<?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>126654</bug_id>
          
          <creation_ts>2014-01-08 12:13:50 -0800</creation_ts>
          <short_desc>[iOS] Upstream WebCore/platform changes</short_desc>
          <delta_ts>2014-01-09 22:11:30 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aestes</cc>
    
    <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>enrica</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>jpetsovits</cc>
    
    <cc>ljaehun.lim</cc>
    
    <cc>ltilve+ews</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>965585</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-01-08 12:13:50 -0800</bug_when>
    <thetext>Upstream the iOS changes to WebCore/platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965586</commentid>
    <comment_count>1</comment_count>
      <attachid>220650</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-01-08 12:15:47 -0800</bug_when>
    <thetext>Created attachment 220650
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965587</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-08 12:18:20 -0800</bug_when>
    <thetext>Attachment 220650 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/MainThread.cpp&apos;, u&apos;Source/WTF/wtf/MainThread.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/ContentFilter.h&apos;, u&apos;Source/WebCore/platform/DragData.h&apos;, u&apos;Source/WebCore/platform/FileChooser.cpp&apos;, u&apos;Source/WebCore/platform/FileChooser.h&apos;, u&apos;Source/WebCore/platform/FileSystem.cpp&apos;, u&apos;Source/WebCore/platform/FileSystem.h&apos;, u&apos;Source/WebCore/platform/KillRingNone.cpp&apos;, u&apos;Source/WebCore/platform/LocalizedStrings.cpp&apos;, u&apos;Source/WebCore/platform/LocalizedStrings.h&apos;, u&apos;Source/WebCore/platform/Logging.h&apos;, u&apos;Source/WebCore/platform/MIMETypeRegistry.cpp&apos;, u&apos;Source/WebCore/platform/MemoryPressureHandler.cpp&apos;, u&apos;Source/WebCore/platform/MemoryPressureHandler.h&apos;, u&apos;Source/WebCore/platform/PlatformKeyboardEvent.h&apos;, u&apos;Source/WebCore/platform/PlatformMouseEvent.h&apos;, u&apos;Source/WebCore/platform/PlatformScreen.h&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecks.cpp&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecksIOS.h&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecksIOS.mm&apos;, u&apos;Source/WebCore/platform/ScrollAnimator.cpp&apos;, u&apos;Source/WebCore/platform/ScrollAnimator.h&apos;, u&apos;Source/WebCore/platform/ScrollTypes.h&apos;, u&apos;Source/WebCore/platform/ScrollView.cpp&apos;, u&apos;Source/WebCore/platform/ScrollView.h&apos;, u&apos;Source/WebCore/platform/ScrollableArea.cpp&apos;, u&apos;Source/WebCore/platform/ScrollableArea.h&apos;, u&apos;Source/WebCore/platform/Scrollbar.cpp&apos;, u&apos;Source/WebCore/platform/Scrollbar.h&apos;, u&apos;Source/WebCore/platform/SharedBuffer.cpp&apos;, u&apos;Source/WebCore/platform/SharedBuffer.h&apos;, u&apos;Source/WebCore/platform/SuddenTermination.h&apos;, u&apos;Source/WebCore/platform/Supplementable.h&apos;, u&apos;Source/WebCore/platform/SystemMemory.h&apos;, u&apos;Source/WebCore/platform/ThreadCheck.h&apos;, u&apos;Source/WebCore/platform/ThreadGlobalData.cpp&apos;, u&apos;Source/WebCore/platform/ThreadGlobalData.h&apos;, u&apos;Source/WebCore/platform/ThreadTimers.cpp&apos;, u&apos;Source/WebCore/platform/Timer.cpp&apos;, u&apos;Source/WebCore/platform/Timer.h&apos;, u&apos;Source/WebCore/platform/URL.cpp&apos;, u&apos;Source/WebCore/platform/URL.h&apos;, u&apos;Source/WebCore/platform/Widget.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioDestinationIOS.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioFileReaderIOS.cpp&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioFileReaderIOS.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioSessionIOS.mm&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioDestinationMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioFileReaderMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioSessionMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/MediaSessionManagerMac.cpp&apos;, u&apos;Source/WebCore/platform/cf/SharedBufferCF.cpp&apos;, u&apos;Source/WebCore/platform/cf/URLCF.cpp&apos;, u&apos;Source/WebCore/platform/cocoa/KeyEventCocoa.mm&apos;, u&apos;Source/WebCore/platform/graphics/BitmapImage.cpp&apos;, u&apos;Source/WebCore/platform/graphics/BitmapImage.h&apos;, u&apos;Source/WebCore/platform/graphics/Color.cpp&apos;, u&apos;Source/WebCore/platform/graphics/Color.h&apos;, u&apos;Source/WebCore/platform/graphics/DisplayRefreshMonitor.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatPoint.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatRect.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatSize.h&apos;, u&apos;Source/WebCore/platform/graphics/Font.cpp&apos;, u&apos;Source/WebCore/platform/graphics/Font.h&apos;, u&apos;Source/WebCore/platform/graphics/FontCache.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontCache.h&apos;, u&apos;Source/WebCore/platform/graphics/FontFastPath.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontGlyphs.h&apos;, u&apos;Source/WebCore/platform/graphics/FontPlatformData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontPlatformData.h&apos;, u&apos;Source/WebCore/platform/graphics/GlyphPageTreeNode.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext.h&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext3D.h&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsLayer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsLayer.h&apos;, u&apos;Source/WebCore/platform/graphics/Icon.h&apos;, u&apos;Source/WebCore/platform/graphics/Image.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ImageSource.h&apos;, u&apos;Source/WebCore/platform/graphics/IntPoint.h&apos;, u&apos;Source/WebCore/platform/graphics/IntRect.h&apos;, u&apos;Source/WebCore/platform/graphics/IntSize.h&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayer.h&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayerPrivate.h&apos;, u&apos;Source/WebCore/platform/graphics/SimpleFontData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/SimpleFontData.h&apos;, u&apos;Source/WebCore/platform/graphics/StringTruncator.cpp&apos;, u&apos;Source/WebCore/platform/graphics/StringTruncator.h&apos;, u&apos;Source/WebCore/platform/graphics/TextTrackRepresentation.cpp&apos;, u&apos;Source/WebCore/platform/graphics/WidthIterator.h&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/FontBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/PlatformCAFilters.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/PlatformCALayer.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/TileController.mm&apos;, u&apos;Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/BitmapImageCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ColorCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatPointCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatRectCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatSizeCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/GradientCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferDataCG.h&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageSourceCGMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntPointCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntRectCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntSizeCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PathCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PatternCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/DisplayRefreshMonitoriOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontCacheIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontServicesIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontServicesIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/GraphicsContext3DIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/IconIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/InbandTextTrackPrivateAVFIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/MediaPlayerPrivateIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/MediaPlayerPrivateIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/SimpleFontDataIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/TextTrackRepresentationIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/TextTrackRepresentationIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/ColorMac.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/ComplexTextController.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatPointMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatRectMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatSizeMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontCacheMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/GraphicsContextMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IconMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/ImageMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntPointMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntRectMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntSizeMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/MediaPlayerProxy.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebGLLayer.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebGLLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebTiledLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp&apos;, u&apos;Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/FontWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/wince/FontWinCE.cpp&apos;, u&apos;Source/WebCore/platform/ios/ContentFilterIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/DeviceMotionClientIOS.h&apos;, u&apos;Source/WebCore/platform/ios/DeviceMotionClientIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/DeviceOrientationClientIOS.h&apos;, u&apos;Source/WebCore/platform/ios/DeviceOrientationClientIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/KeyEventIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/MIMETypeRegistryIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/MemoryPressureHandlerIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PasteboardIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformEventFactoryIOS.h&apos;, u&apos;Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformPasteboardIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformScreenIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformSpeechSynthesizerIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SSLKeyGeneratorIOS.cpp&apos;, u&apos;Source/WebCore/platform/ios/ScrollAnimatorIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ScrollAnimatorIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/ScrollViewIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/ScrollbarThemeIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ScrollbarThemeIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SelectionRect.cpp&apos;, u&apos;Source/WebCore/platform/ios/SelectionRect.h&apos;, u&apos;Source/WebCore/platform/ios/SoundIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SystemMemoryIOS.cpp&apos;, u&apos;Source/WebCore/platform/ios/ThemeIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ThemeIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/TileCache.h&apos;, u&apos;Source/WebCore/platform/ios/TileCache.mm&apos;, u&apos;Source/WebCore/platform/ios/TileGrid.h&apos;, u&apos;Source/WebCore/platform/ios/TileGrid.mm&apos;, u&apos;Source/WebCore/platform/ios/TileGridTile.h&apos;, u&apos;Source/WebCore/platform/ios/TileGridTile.mm&apos;, u&apos;Source/WebCore/platform/ios/TileLayer.h&apos;, u&apos;Source/WebCore/platform/ios/TileLayer.mm&apos;, u&apos;Source/WebCore/platform/ios/TileLayerPool.h&apos;, u&apos;Source/WebCore/platform/ios/TileLayerPool.mm&apos;, u&apos;Source/WebCore/platform/ios/WebCoreMotionManager.h&apos;, u&apos;Source/WebCore/platform/ios/WebCoreMotionManager.mm&apos;, u&apos;Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.h&apos;, u&apos;Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/WebEvent.h&apos;, u&apos;Source/WebCore/platform/ios/WebEvent.mm&apos;, u&apos;Source/WebCore/platform/ios/WidgetIOS.mm&apos;, u&apos;Source/WebCore/platform/mac/DisplaySleepDisabler.cpp&apos;, u&apos;Source/WebCore/platform/mac/DisplaySleepDisabler.h&apos;, u&apos;Source/WebCore/platform/mac/FileSystemMac.mm&apos;, u&apos;Source/WebCore/platform/mac/KillRingMac.mm&apos;, u&apos;Source/WebCore/platform/mac/MemoryPressureHandlerMac.mm&apos;, u&apos;Source/WebCore/platform/mac/PlatformClockCM.mm&apos;, u&apos;Source/WebCore/platform/mac/SoftLinking.h&apos;, u&apos;Source/WebCore/platform/mac/SystemVersionMac.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenPlaceholderView.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenPlaceholderView.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWarningView.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWarningView.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWindow.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWindow.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreNSCellExtras.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreNSCellExtras.m&apos;, u&apos;Source/WebCore/platform/mac/WebCoreSystemInterface.h&apos;, u&apos;Source/WebCore/platform/mac/WebFontCache.mm&apos;, u&apos;Source/WebCore/platform/network/BlobRegistry.cpp&apos;, u&apos;Source/WebCore/platform/network/BlobRegistryImpl.cpp&apos;, u&apos;Source/WebCore/platform/network/Credential.h&apos;, u&apos;Source/WebCore/platform/network/CredentialStorage.cpp&apos;, u&apos;Source/WebCore/platform/network/CredentialStorage.h&apos;, u&apos;Source/WebCore/platform/network/NetworkStateNotifier.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceRequestBase.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceRequestBase.h&apos;, u&apos;Source/WebCore/platform/network/cf/CredentialStorageCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/DNSCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ProxyServerCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceRequest.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/ios/NetworkStateNotifierIOS.cpp&apos;, u&apos;Source/WebCore/platform/network/ios/QuickLook.h&apos;, u&apos;Source/WebCore/platform/network/ios/QuickLook.mm&apos;, u&apos;Source/WebCore/platform/network/ios/ResourceHandleIOS.mm&apos;, u&apos;Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h&apos;, u&apos;Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.mm&apos;, u&apos;Source/WebCore/platform/network/mac/AuthenticationMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/CredentialStorageMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceErrorMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceHandleMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceRequestMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/UTIUtilities.mm&apos;, u&apos;Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm&apos;, u&apos;Source/WebCore/platform/sql/SQLiteDatabase.h&apos;, u&apos;Source/WebCore/platform/sql/SQLiteFileSystem.cpp&apos;, u&apos;Source/WebCore/platform/sql/SQLiteFileSystem.h&apos;, u&apos;Source/WebCore/platform/sql/SQLiteTransaction.cpp&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTracker.cpp&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTracker.h&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTrackerClient.h&apos;, u&apos;Source/WebCore/platform/text/PlatformLocale.cpp&apos;, u&apos;Source/WebCore/platform/text/PlatformLocale.h&apos;, u&apos;Source/WebCore/platform/text/TextBreakIteratorICU.cpp&apos;, u&apos;Source/WebCore/platform/text/TextCodecICU.cpp&apos;, u&apos;Source/WebCore/platform/text/TextEncodingRegistry.cpp&apos;, u&apos;Source/WebCore/platform/text/cf/HyphenationCF.cpp&apos;, u&apos;Source/WebCore/platform/text/ios/LocalizedDateCache.h&apos;, u&apos;Source/WebCore/platform/text/ios/LocalizedDateCache.mm&apos;, u&apos;Source/WebCore/platform/text/mac/CharsetData.h&apos;, u&apos;Source/WebCore/platform/text/mac/LocaleMac.h&apos;, u&apos;Source/WebCore/platform/text/mac/LocaleMac.mm&apos;, u&apos;Source/WebCore/platform/text/mac/TextBoundaries.mm&apos;, u&apos;Source/WebCore/platform/text/mac/TextCodecMac.cpp&apos;, u&apos;Source/WebCore/platform/text/mac/TextCodecMac.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/ios/WebEvent.h:27:  #ifndef header guard has wrong style, please use: WebEvent_h  [build/header_guard] [5]
ERROR: Source/WebCore/platform/ios/WebEvent.h:109:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:114:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:115:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:118:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:121:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:122:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:124:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:130:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:132:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:136:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:137:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:138:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:141:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:143:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:144:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:145:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:146:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:147:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/ScrollAnimatorIOS.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:143:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:144:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:145:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:144:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:145:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:189:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:189:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:250:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:117:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:118:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:119:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp:74:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SystemMemoryIOS.cpp:67:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SystemMemoryIOS.cpp:71:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:1041:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:1099:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:51:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:52:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:53:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:54:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/mac/SoftLinking.h:117:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mac/SoftLinking.h:122:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:45:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:46:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:47:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:48:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:50:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:51:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/FontPlatformData.h:104:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:54:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:55:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:56:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:57:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:58:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:59:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:60:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:61:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:62:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:63:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:64:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:65:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:66:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:67:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:68:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 79 in 280 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>965596</commentid>
    <comment_count>3</comment_count>
      <attachid>220650</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-08 12:35:02 -0800</bug_when>
    <thetext>Comment on attachment 220650
Patch

Attachment 220650 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/4509973627273216</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965602</commentid>
    <comment_count>4</comment_count>
      <attachid>220655</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-01-08 12:46:59 -0800</bug_when>
    <thetext>Created attachment 220655
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965604</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-08 12:48:46 -0800</bug_when>
    <thetext>Attachment 220655 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/MainThread.cpp&apos;, u&apos;Source/WTF/wtf/MainThread.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/ContentFilter.h&apos;, u&apos;Source/WebCore/platform/DragData.h&apos;, u&apos;Source/WebCore/platform/FileChooser.cpp&apos;, u&apos;Source/WebCore/platform/FileChooser.h&apos;, u&apos;Source/WebCore/platform/FileSystem.cpp&apos;, u&apos;Source/WebCore/platform/FileSystem.h&apos;, u&apos;Source/WebCore/platform/KillRingNone.cpp&apos;, u&apos;Source/WebCore/platform/LocalizedStrings.cpp&apos;, u&apos;Source/WebCore/platform/LocalizedStrings.h&apos;, u&apos;Source/WebCore/platform/Logging.h&apos;, u&apos;Source/WebCore/platform/MIMETypeRegistry.cpp&apos;, u&apos;Source/WebCore/platform/MemoryPressureHandler.cpp&apos;, u&apos;Source/WebCore/platform/MemoryPressureHandler.h&apos;, u&apos;Source/WebCore/platform/PlatformKeyboardEvent.h&apos;, u&apos;Source/WebCore/platform/PlatformMouseEvent.h&apos;, u&apos;Source/WebCore/platform/PlatformScreen.h&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecks.cpp&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecksIOS.h&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecksIOS.mm&apos;, u&apos;Source/WebCore/platform/ScrollAnimator.cpp&apos;, u&apos;Source/WebCore/platform/ScrollAnimator.h&apos;, u&apos;Source/WebCore/platform/ScrollTypes.h&apos;, u&apos;Source/WebCore/platform/ScrollView.cpp&apos;, u&apos;Source/WebCore/platform/ScrollView.h&apos;, u&apos;Source/WebCore/platform/ScrollableArea.cpp&apos;, u&apos;Source/WebCore/platform/ScrollableArea.h&apos;, u&apos;Source/WebCore/platform/Scrollbar.cpp&apos;, u&apos;Source/WebCore/platform/Scrollbar.h&apos;, u&apos;Source/WebCore/platform/SharedBuffer.cpp&apos;, u&apos;Source/WebCore/platform/SharedBuffer.h&apos;, u&apos;Source/WebCore/platform/SuddenTermination.h&apos;, u&apos;Source/WebCore/platform/Supplementable.h&apos;, u&apos;Source/WebCore/platform/SystemMemory.h&apos;, u&apos;Source/WebCore/platform/ThreadCheck.h&apos;, u&apos;Source/WebCore/platform/ThreadGlobalData.cpp&apos;, u&apos;Source/WebCore/platform/ThreadGlobalData.h&apos;, u&apos;Source/WebCore/platform/ThreadTimers.cpp&apos;, u&apos;Source/WebCore/platform/Timer.cpp&apos;, u&apos;Source/WebCore/platform/Timer.h&apos;, u&apos;Source/WebCore/platform/URL.cpp&apos;, u&apos;Source/WebCore/platform/URL.h&apos;, u&apos;Source/WebCore/platform/Widget.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioDestinationIOS.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioFileReaderIOS.cpp&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioFileReaderIOS.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioSessionIOS.mm&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioDestinationMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioFileReaderMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioSessionMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/MediaSessionManagerMac.cpp&apos;, u&apos;Source/WebCore/platform/cf/SharedBufferCF.cpp&apos;, u&apos;Source/WebCore/platform/cf/URLCF.cpp&apos;, u&apos;Source/WebCore/platform/cocoa/KeyEventCocoa.mm&apos;, u&apos;Source/WebCore/platform/graphics/BitmapImage.cpp&apos;, u&apos;Source/WebCore/platform/graphics/BitmapImage.h&apos;, u&apos;Source/WebCore/platform/graphics/Color.cpp&apos;, u&apos;Source/WebCore/platform/graphics/Color.h&apos;, u&apos;Source/WebCore/platform/graphics/DisplayRefreshMonitor.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatPoint.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatRect.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatSize.h&apos;, u&apos;Source/WebCore/platform/graphics/Font.cpp&apos;, u&apos;Source/WebCore/platform/graphics/Font.h&apos;, u&apos;Source/WebCore/platform/graphics/FontCache.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontCache.h&apos;, u&apos;Source/WebCore/platform/graphics/FontFastPath.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontGlyphs.h&apos;, u&apos;Source/WebCore/platform/graphics/FontPlatformData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontPlatformData.h&apos;, u&apos;Source/WebCore/platform/graphics/GlyphPageTreeNode.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext.h&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext3D.h&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsLayer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsLayer.h&apos;, u&apos;Source/WebCore/platform/graphics/Icon.h&apos;, u&apos;Source/WebCore/platform/graphics/Image.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ImageSource.h&apos;, u&apos;Source/WebCore/platform/graphics/IntPoint.h&apos;, u&apos;Source/WebCore/platform/graphics/IntRect.h&apos;, u&apos;Source/WebCore/platform/graphics/IntSize.h&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayer.h&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayerPrivate.h&apos;, u&apos;Source/WebCore/platform/graphics/SimpleFontData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/SimpleFontData.h&apos;, u&apos;Source/WebCore/platform/graphics/StringTruncator.cpp&apos;, u&apos;Source/WebCore/platform/graphics/StringTruncator.h&apos;, u&apos;Source/WebCore/platform/graphics/TextTrackRepresentation.cpp&apos;, u&apos;Source/WebCore/platform/graphics/WidthIterator.h&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/FontBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/PlatformCAFilters.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/PlatformCALayer.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/TileController.mm&apos;, u&apos;Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/BitmapImageCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ColorCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatPointCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatRectCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatSizeCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/GradientCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferDataCG.h&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageSourceCGMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntPointCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntRectCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntSizeCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PathCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PatternCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/DisplayRefreshMonitoriOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontCacheIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontServicesIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontServicesIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/GraphicsContext3DIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/IconIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/InbandTextTrackPrivateAVFIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/MediaPlayerPrivateIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/MediaPlayerPrivateIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/SimpleFontDataIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/TextTrackRepresentationIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/TextTrackRepresentationIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/ColorMac.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/ComplexTextController.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatPointMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatRectMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatSizeMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontCacheMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/GraphicsContextMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IconMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/ImageMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntPointMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntRectMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntSizeMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/MediaPlayerProxy.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebGLLayer.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebGLLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebTiledLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp&apos;, u&apos;Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/FontWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/wince/FontWinCE.cpp&apos;, u&apos;Source/WebCore/platform/ios/ContentFilterIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/DeviceMotionClientIOS.h&apos;, u&apos;Source/WebCore/platform/ios/DeviceMotionClientIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/DeviceOrientationClientIOS.h&apos;, u&apos;Source/WebCore/platform/ios/DeviceOrientationClientIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/KeyEventIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/MIMETypeRegistryIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/MemoryPressureHandlerIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PasteboardIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformEventFactoryIOS.h&apos;, u&apos;Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformPasteboardIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformScreenIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformSpeechSynthesizerIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SSLKeyGeneratorIOS.cpp&apos;, u&apos;Source/WebCore/platform/ios/ScrollAnimatorIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ScrollAnimatorIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/ScrollViewIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/ScrollbarThemeIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ScrollbarThemeIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SelectionRect.cpp&apos;, u&apos;Source/WebCore/platform/ios/SelectionRect.h&apos;, u&apos;Source/WebCore/platform/ios/SoundIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SystemMemoryIOS.cpp&apos;, u&apos;Source/WebCore/platform/ios/ThemeIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ThemeIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/TileCache.h&apos;, u&apos;Source/WebCore/platform/ios/TileCache.mm&apos;, u&apos;Source/WebCore/platform/ios/TileGrid.h&apos;, u&apos;Source/WebCore/platform/ios/TileGrid.mm&apos;, u&apos;Source/WebCore/platform/ios/TileGridTile.h&apos;, u&apos;Source/WebCore/platform/ios/TileGridTile.mm&apos;, u&apos;Source/WebCore/platform/ios/TileLayer.h&apos;, u&apos;Source/WebCore/platform/ios/TileLayer.mm&apos;, u&apos;Source/WebCore/platform/ios/TileLayerPool.h&apos;, u&apos;Source/WebCore/platform/ios/TileLayerPool.mm&apos;, u&apos;Source/WebCore/platform/ios/WebCoreMotionManager.h&apos;, u&apos;Source/WebCore/platform/ios/WebCoreMotionManager.mm&apos;, u&apos;Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.h&apos;, u&apos;Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/WebEvent.h&apos;, u&apos;Source/WebCore/platform/ios/WebEvent.mm&apos;, u&apos;Source/WebCore/platform/ios/WidgetIOS.mm&apos;, u&apos;Source/WebCore/platform/mac/DisplaySleepDisabler.cpp&apos;, u&apos;Source/WebCore/platform/mac/DisplaySleepDisabler.h&apos;, u&apos;Source/WebCore/platform/mac/FileSystemMac.mm&apos;, u&apos;Source/WebCore/platform/mac/KillRingMac.mm&apos;, u&apos;Source/WebCore/platform/mac/MemoryPressureHandlerMac.mm&apos;, u&apos;Source/WebCore/platform/mac/PlatformClockCM.mm&apos;, u&apos;Source/WebCore/platform/mac/SoftLinking.h&apos;, u&apos;Source/WebCore/platform/mac/SystemVersionMac.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenPlaceholderView.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenPlaceholderView.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWarningView.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWarningView.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWindow.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWindow.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreNSCellExtras.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreNSCellExtras.m&apos;, u&apos;Source/WebCore/platform/mac/WebCoreSystemInterface.h&apos;, u&apos;Source/WebCore/platform/mac/WebFontCache.mm&apos;, u&apos;Source/WebCore/platform/network/BlobRegistry.cpp&apos;, u&apos;Source/WebCore/platform/network/BlobRegistryImpl.cpp&apos;, u&apos;Source/WebCore/platform/network/Credential.h&apos;, u&apos;Source/WebCore/platform/network/CredentialStorage.cpp&apos;, u&apos;Source/WebCore/platform/network/CredentialStorage.h&apos;, u&apos;Source/WebCore/platform/network/NetworkStateNotifier.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceRequestBase.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceRequestBase.h&apos;, u&apos;Source/WebCore/platform/network/cf/CredentialStorageCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/DNSCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ProxyServerCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceRequest.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/ios/NetworkStateNotifierIOS.cpp&apos;, u&apos;Source/WebCore/platform/network/ios/QuickLook.h&apos;, u&apos;Source/WebCore/platform/network/ios/QuickLook.mm&apos;, u&apos;Source/WebCore/platform/network/ios/ResourceHandleIOS.mm&apos;, u&apos;Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h&apos;, u&apos;Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.mm&apos;, u&apos;Source/WebCore/platform/network/mac/AuthenticationMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/CredentialStorageMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceErrorMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceHandleMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceRequestMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/UTIUtilities.mm&apos;, u&apos;Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm&apos;, u&apos;Source/WebCore/platform/sql/SQLiteDatabase.h&apos;, u&apos;Source/WebCore/platform/sql/SQLiteFileSystem.cpp&apos;, u&apos;Source/WebCore/platform/sql/SQLiteFileSystem.h&apos;, u&apos;Source/WebCore/platform/sql/SQLiteTransaction.cpp&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTracker.cpp&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTracker.h&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTrackerClient.h&apos;, u&apos;Source/WebCore/platform/text/PlatformLocale.cpp&apos;, u&apos;Source/WebCore/platform/text/PlatformLocale.h&apos;, u&apos;Source/WebCore/platform/text/TextBreakIteratorICU.cpp&apos;, u&apos;Source/WebCore/platform/text/TextCodecICU.cpp&apos;, u&apos;Source/WebCore/platform/text/TextEncodingRegistry.cpp&apos;, u&apos;Source/WebCore/platform/text/cf/HyphenationCF.cpp&apos;, u&apos;Source/WebCore/platform/text/ios/LocalizedDateCache.h&apos;, u&apos;Source/WebCore/platform/text/ios/LocalizedDateCache.mm&apos;, u&apos;Source/WebCore/platform/text/mac/CharsetData.h&apos;, u&apos;Source/WebCore/platform/text/mac/LocaleMac.h&apos;, u&apos;Source/WebCore/platform/text/mac/LocaleMac.mm&apos;, u&apos;Source/WebCore/platform/text/mac/TextBoundaries.mm&apos;, u&apos;Source/WebCore/platform/text/mac/TextCodecMac.cpp&apos;, u&apos;Source/WebCore/platform/text/mac/TextCodecMac.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/ios/WebEvent.h:27:  #ifndef header guard has wrong style, please use: WebEvent_h  [build/header_guard] [5]
ERROR: Source/WebCore/platform/ios/WebEvent.h:109:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:114:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:115:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:118:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:121:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:122:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:124:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:130:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:132:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:136:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:137:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:138:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:141:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:143:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:144:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:145:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:146:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:147:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/ScrollAnimatorIOS.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:143:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:144:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:145:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:144:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:145:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:189:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:189:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:250:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:117:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:118:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:119:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp:74:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SystemMemoryIOS.cpp:67:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SystemMemoryIOS.cpp:71:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:1041:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:1099:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:51:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:52:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:53:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:54:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/mac/SoftLinking.h:117:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mac/SoftLinking.h:122:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:45:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:46:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:47:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:48:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:50:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:51:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/FontPlatformData.h:104:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:54:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:55:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:56:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:57:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:58:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:59:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:60:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:61:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:62:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:63:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:64:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:65:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:66:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:67:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:68:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 79 in 280 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>965605</commentid>
    <comment_count>6</comment_count>
      <attachid>220656</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-01-08 12:52:24 -0800</bug_when>
    <thetext>Created attachment 220656
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965607</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-08 12:54:43 -0800</bug_when>
    <thetext>Attachment 220656 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/MainThread.cpp&apos;, u&apos;Source/WTF/wtf/MainThread.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/ContentFilter.h&apos;, u&apos;Source/WebCore/platform/DragData.h&apos;, u&apos;Source/WebCore/platform/FileChooser.cpp&apos;, u&apos;Source/WebCore/platform/FileChooser.h&apos;, u&apos;Source/WebCore/platform/FileSystem.cpp&apos;, u&apos;Source/WebCore/platform/FileSystem.h&apos;, u&apos;Source/WebCore/platform/KillRingNone.cpp&apos;, u&apos;Source/WebCore/platform/LocalizedStrings.cpp&apos;, u&apos;Source/WebCore/platform/LocalizedStrings.h&apos;, u&apos;Source/WebCore/platform/Logging.h&apos;, u&apos;Source/WebCore/platform/MIMETypeRegistry.cpp&apos;, u&apos;Source/WebCore/platform/MemoryPressureHandler.cpp&apos;, u&apos;Source/WebCore/platform/MemoryPressureHandler.h&apos;, u&apos;Source/WebCore/platform/PlatformKeyboardEvent.h&apos;, u&apos;Source/WebCore/platform/PlatformMouseEvent.h&apos;, u&apos;Source/WebCore/platform/PlatformScreen.h&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecks.cpp&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecksIOS.h&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecksIOS.mm&apos;, u&apos;Source/WebCore/platform/ScrollAnimator.cpp&apos;, u&apos;Source/WebCore/platform/ScrollAnimator.h&apos;, u&apos;Source/WebCore/platform/ScrollTypes.h&apos;, u&apos;Source/WebCore/platform/ScrollView.cpp&apos;, u&apos;Source/WebCore/platform/ScrollView.h&apos;, u&apos;Source/WebCore/platform/ScrollableArea.cpp&apos;, u&apos;Source/WebCore/platform/ScrollableArea.h&apos;, u&apos;Source/WebCore/platform/Scrollbar.cpp&apos;, u&apos;Source/WebCore/platform/Scrollbar.h&apos;, u&apos;Source/WebCore/platform/SharedBuffer.cpp&apos;, u&apos;Source/WebCore/platform/SharedBuffer.h&apos;, u&apos;Source/WebCore/platform/SuddenTermination.h&apos;, u&apos;Source/WebCore/platform/Supplementable.h&apos;, u&apos;Source/WebCore/platform/SystemMemory.h&apos;, u&apos;Source/WebCore/platform/ThreadCheck.h&apos;, u&apos;Source/WebCore/platform/ThreadGlobalData.cpp&apos;, u&apos;Source/WebCore/platform/ThreadGlobalData.h&apos;, u&apos;Source/WebCore/platform/ThreadTimers.cpp&apos;, u&apos;Source/WebCore/platform/Timer.cpp&apos;, u&apos;Source/WebCore/platform/Timer.h&apos;, u&apos;Source/WebCore/platform/URL.cpp&apos;, u&apos;Source/WebCore/platform/URL.h&apos;, u&apos;Source/WebCore/platform/Widget.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioDestinationIOS.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioFileReaderIOS.cpp&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioFileReaderIOS.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioSessionIOS.mm&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioDestinationMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioFileReaderMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioSessionMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/MediaSessionManagerMac.cpp&apos;, u&apos;Source/WebCore/platform/cf/SharedBufferCF.cpp&apos;, u&apos;Source/WebCore/platform/cf/URLCF.cpp&apos;, u&apos;Source/WebCore/platform/cocoa/KeyEventCocoa.mm&apos;, u&apos;Source/WebCore/platform/graphics/BitmapImage.cpp&apos;, u&apos;Source/WebCore/platform/graphics/BitmapImage.h&apos;, u&apos;Source/WebCore/platform/graphics/Color.cpp&apos;, u&apos;Source/WebCore/platform/graphics/Color.h&apos;, u&apos;Source/WebCore/platform/graphics/DisplayRefreshMonitor.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatPoint.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatRect.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatSize.h&apos;, u&apos;Source/WebCore/platform/graphics/Font.cpp&apos;, u&apos;Source/WebCore/platform/graphics/Font.h&apos;, u&apos;Source/WebCore/platform/graphics/FontCache.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontCache.h&apos;, u&apos;Source/WebCore/platform/graphics/FontFastPath.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontGlyphs.h&apos;, u&apos;Source/WebCore/platform/graphics/FontPlatformData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontPlatformData.h&apos;, u&apos;Source/WebCore/platform/graphics/GlyphPageTreeNode.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext.h&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext3D.h&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsLayer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsLayer.h&apos;, u&apos;Source/WebCore/platform/graphics/Icon.h&apos;, u&apos;Source/WebCore/platform/graphics/Image.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ImageSource.h&apos;, u&apos;Source/WebCore/platform/graphics/IntPoint.h&apos;, u&apos;Source/WebCore/platform/graphics/IntRect.h&apos;, u&apos;Source/WebCore/platform/graphics/IntSize.h&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayer.h&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayerPrivate.h&apos;, u&apos;Source/WebCore/platform/graphics/SimpleFontData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/SimpleFontData.h&apos;, u&apos;Source/WebCore/platform/graphics/StringTruncator.cpp&apos;, u&apos;Source/WebCore/platform/graphics/StringTruncator.h&apos;, u&apos;Source/WebCore/platform/graphics/TextTrackRepresentation.cpp&apos;, u&apos;Source/WebCore/platform/graphics/WidthIterator.h&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/FontBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/PlatformCAFilters.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/PlatformCALayer.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/TileController.mm&apos;, u&apos;Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/BitmapImageCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ColorCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatPointCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatRectCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatSizeCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/GradientCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferDataCG.h&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageSourceCGMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntPointCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntRectCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntSizeCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PathCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PatternCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/DisplayRefreshMonitoriOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontCacheIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontServicesIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontServicesIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/GraphicsContext3DIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/IconIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/InbandTextTrackPrivateAVFIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/MediaPlayerPrivateIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/MediaPlayerPrivateIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/SimpleFontDataIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/TextTrackRepresentationIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/TextTrackRepresentationIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/ColorMac.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/ComplexTextController.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatPointMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatRectMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatSizeMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontCacheMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/GraphicsContextMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IconMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/ImageMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntPointMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntRectMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntSizeMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/MediaPlayerProxy.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebGLLayer.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebGLLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebTiledLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp&apos;, u&apos;Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/FontWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/wince/FontWinCE.cpp&apos;, u&apos;Source/WebCore/platform/ios/ContentFilterIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/DeviceMotionClientIOS.h&apos;, u&apos;Source/WebCore/platform/ios/DeviceMotionClientIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/DeviceOrientationClientIOS.h&apos;, u&apos;Source/WebCore/platform/ios/DeviceOrientationClientIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/KeyEventIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/MIMETypeRegistryIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/MemoryPressureHandlerIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PasteboardIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformEventFactoryIOS.h&apos;, u&apos;Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformPasteboardIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformScreenIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformSpeechSynthesizerIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SSLKeyGeneratorIOS.cpp&apos;, u&apos;Source/WebCore/platform/ios/ScrollAnimatorIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ScrollAnimatorIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/ScrollViewIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/ScrollbarThemeIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ScrollbarThemeIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SelectionRect.cpp&apos;, u&apos;Source/WebCore/platform/ios/SelectionRect.h&apos;, u&apos;Source/WebCore/platform/ios/SoundIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SystemMemoryIOS.cpp&apos;, u&apos;Source/WebCore/platform/ios/ThemeIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ThemeIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/TileCache.h&apos;, u&apos;Source/WebCore/platform/ios/TileCache.mm&apos;, u&apos;Source/WebCore/platform/ios/TileGrid.h&apos;, u&apos;Source/WebCore/platform/ios/TileGrid.mm&apos;, u&apos;Source/WebCore/platform/ios/TileGridTile.h&apos;, u&apos;Source/WebCore/platform/ios/TileGridTile.mm&apos;, u&apos;Source/WebCore/platform/ios/TileLayer.h&apos;, u&apos;Source/WebCore/platform/ios/TileLayer.mm&apos;, u&apos;Source/WebCore/platform/ios/TileLayerPool.h&apos;, u&apos;Source/WebCore/platform/ios/TileLayerPool.mm&apos;, u&apos;Source/WebCore/platform/ios/WebCoreMotionManager.h&apos;, u&apos;Source/WebCore/platform/ios/WebCoreMotionManager.mm&apos;, u&apos;Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.h&apos;, u&apos;Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/WebEvent.h&apos;, u&apos;Source/WebCore/platform/ios/WebEvent.mm&apos;, u&apos;Source/WebCore/platform/ios/WidgetIOS.mm&apos;, u&apos;Source/WebCore/platform/mac/DisplaySleepDisabler.cpp&apos;, u&apos;Source/WebCore/platform/mac/DisplaySleepDisabler.h&apos;, u&apos;Source/WebCore/platform/mac/FileSystemMac.mm&apos;, u&apos;Source/WebCore/platform/mac/KillRingMac.mm&apos;, u&apos;Source/WebCore/platform/mac/MemoryPressureHandlerMac.mm&apos;, u&apos;Source/WebCore/platform/mac/PlatformClockCM.mm&apos;, u&apos;Source/WebCore/platform/mac/SoftLinking.h&apos;, u&apos;Source/WebCore/platform/mac/SystemVersionMac.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenPlaceholderView.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenPlaceholderView.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWarningView.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWarningView.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWindow.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWindow.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreNSCellExtras.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreNSCellExtras.m&apos;, u&apos;Source/WebCore/platform/mac/WebCoreSystemInterface.h&apos;, u&apos;Source/WebCore/platform/mac/WebFontCache.mm&apos;, u&apos;Source/WebCore/platform/network/BlobRegistry.cpp&apos;, u&apos;Source/WebCore/platform/network/BlobRegistryImpl.cpp&apos;, u&apos;Source/WebCore/platform/network/Credential.h&apos;, u&apos;Source/WebCore/platform/network/CredentialStorage.cpp&apos;, u&apos;Source/WebCore/platform/network/CredentialStorage.h&apos;, u&apos;Source/WebCore/platform/network/NetworkStateNotifier.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceRequestBase.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceRequestBase.h&apos;, u&apos;Source/WebCore/platform/network/cf/CredentialStorageCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/DNSCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ProxyServerCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceRequest.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/ios/NetworkStateNotifierIOS.cpp&apos;, u&apos;Source/WebCore/platform/network/ios/QuickLook.h&apos;, u&apos;Source/WebCore/platform/network/ios/QuickLook.mm&apos;, u&apos;Source/WebCore/platform/network/ios/ResourceHandleIOS.mm&apos;, u&apos;Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h&apos;, u&apos;Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.mm&apos;, u&apos;Source/WebCore/platform/network/mac/AuthenticationMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/CredentialStorageMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceErrorMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceHandleMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceRequestMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/UTIUtilities.mm&apos;, u&apos;Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm&apos;, u&apos;Source/WebCore/platform/sql/SQLiteDatabase.h&apos;, u&apos;Source/WebCore/platform/sql/SQLiteFileSystem.cpp&apos;, u&apos;Source/WebCore/platform/sql/SQLiteFileSystem.h&apos;, u&apos;Source/WebCore/platform/sql/SQLiteTransaction.cpp&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTracker.cpp&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTracker.h&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTrackerClient.h&apos;, u&apos;Source/WebCore/platform/text/PlatformLocale.cpp&apos;, u&apos;Source/WebCore/platform/text/PlatformLocale.h&apos;, u&apos;Source/WebCore/platform/text/TextBreakIteratorICU.cpp&apos;, u&apos;Source/WebCore/platform/text/TextCodecICU.cpp&apos;, u&apos;Source/WebCore/platform/text/TextEncodingRegistry.cpp&apos;, u&apos;Source/WebCore/platform/text/cf/HyphenationCF.cpp&apos;, u&apos;Source/WebCore/platform/text/ios/LocalizedDateCache.h&apos;, u&apos;Source/WebCore/platform/text/ios/LocalizedDateCache.mm&apos;, u&apos;Source/WebCore/platform/text/mac/CharsetData.h&apos;, u&apos;Source/WebCore/platform/text/mac/LocaleMac.h&apos;, u&apos;Source/WebCore/platform/text/mac/LocaleMac.mm&apos;, u&apos;Source/WebCore/platform/text/mac/TextBoundaries.mm&apos;, u&apos;Source/WebCore/platform/text/mac/TextCodecMac.cpp&apos;, u&apos;Source/WebCore/platform/text/mac/TextCodecMac.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/ios/WebEvent.h:27:  #ifndef header guard has wrong style, please use: WebEvent_h  [build/header_guard] [5]
ERROR: Source/WebCore/platform/ios/WebEvent.h:109:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:114:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:115:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:118:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:121:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:122:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:124:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:130:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:132:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:136:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:137:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:138:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:141:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:143:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:144:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:145:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:146:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:147:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/ScrollAnimatorIOS.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:143:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:144:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:145:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:144:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:145:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:189:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:189:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:250:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:117:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:118:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:119:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp:74:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SystemMemoryIOS.cpp:67:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SystemMemoryIOS.cpp:71:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:1041:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:1099:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:51:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:52:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:53:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:54:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/mac/SoftLinking.h:117:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mac/SoftLinking.h:122:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:45:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:46:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:47:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:48:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:50:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:51:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/FontPlatformData.h:104:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:54:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:55:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:56:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:57:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:58:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:59:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:60:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:61:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:62:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:63:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:64:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:65:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:66:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:67:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:68:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 79 in 280 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>965615</commentid>
    <comment_count>8</comment_count>
      <attachid>220656</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-01-08 13:29:52 -0800</bug_when>
    <thetext>Comment on attachment 220656
Patch

Attachment 220656 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/5071720184545280</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965630</commentid>
    <comment_count>9</comment_count>
      <attachid>220656</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-01-08 13:46:54 -0800</bug_when>
    <thetext>Comment on attachment 220656
Patch

Attachment 220656 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/6656729009881088</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965648</commentid>
    <comment_count>10</comment_count>
      <attachid>220670</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-01-08 14:55:36 -0800</bug_when>
    <thetext>Created attachment 220670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965770</commentid>
    <comment_count>11</comment_count>
      <attachid>220696</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-01-08 20:47:55 -0800</bug_when>
    <thetext>Created attachment 220696
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965771</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-08 20:51:04 -0800</bug_when>
    <thetext>Attachment 220696 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/MainThread.cpp&apos;, u&apos;Source/WTF/wtf/MainThread.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/ContentFilter.h&apos;, u&apos;Source/WebCore/platform/DragData.h&apos;, u&apos;Source/WebCore/platform/FileChooser.cpp&apos;, u&apos;Source/WebCore/platform/FileChooser.h&apos;, u&apos;Source/WebCore/platform/FileSystem.cpp&apos;, u&apos;Source/WebCore/platform/FileSystem.h&apos;, u&apos;Source/WebCore/platform/KillRingNone.cpp&apos;, u&apos;Source/WebCore/platform/LocalizedStrings.cpp&apos;, u&apos;Source/WebCore/platform/LocalizedStrings.h&apos;, u&apos;Source/WebCore/platform/Logging.h&apos;, u&apos;Source/WebCore/platform/MIMETypeRegistry.cpp&apos;, u&apos;Source/WebCore/platform/MemoryPressureHandler.cpp&apos;, u&apos;Source/WebCore/platform/MemoryPressureHandler.h&apos;, u&apos;Source/WebCore/platform/PlatformKeyboardEvent.h&apos;, u&apos;Source/WebCore/platform/PlatformMouseEvent.h&apos;, u&apos;Source/WebCore/platform/PlatformScreen.h&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecks.cpp&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecksIOS.h&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecksIOS.mm&apos;, u&apos;Source/WebCore/platform/ScrollAnimator.cpp&apos;, u&apos;Source/WebCore/platform/ScrollAnimator.h&apos;, u&apos;Source/WebCore/platform/ScrollTypes.h&apos;, u&apos;Source/WebCore/platform/ScrollView.cpp&apos;, u&apos;Source/WebCore/platform/ScrollView.h&apos;, u&apos;Source/WebCore/platform/ScrollableArea.cpp&apos;, u&apos;Source/WebCore/platform/ScrollableArea.h&apos;, u&apos;Source/WebCore/platform/Scrollbar.cpp&apos;, u&apos;Source/WebCore/platform/Scrollbar.h&apos;, u&apos;Source/WebCore/platform/SharedBuffer.cpp&apos;, u&apos;Source/WebCore/platform/SharedBuffer.h&apos;, u&apos;Source/WebCore/platform/SuddenTermination.h&apos;, u&apos;Source/WebCore/platform/Supplementable.h&apos;, u&apos;Source/WebCore/platform/SystemMemory.h&apos;, u&apos;Source/WebCore/platform/ThreadCheck.h&apos;, u&apos;Source/WebCore/platform/ThreadGlobalData.cpp&apos;, u&apos;Source/WebCore/platform/ThreadGlobalData.h&apos;, u&apos;Source/WebCore/platform/ThreadTimers.cpp&apos;, u&apos;Source/WebCore/platform/Timer.cpp&apos;, u&apos;Source/WebCore/platform/Timer.h&apos;, u&apos;Source/WebCore/platform/URL.cpp&apos;, u&apos;Source/WebCore/platform/URL.h&apos;, u&apos;Source/WebCore/platform/Widget.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioDestinationIOS.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioFileReaderIOS.cpp&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioFileReaderIOS.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioSessionIOS.mm&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioDestinationMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioFileReaderMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioSessionMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/MediaSessionManagerMac.cpp&apos;, u&apos;Source/WebCore/platform/cf/SharedBufferCF.cpp&apos;, u&apos;Source/WebCore/platform/cf/URLCF.cpp&apos;, u&apos;Source/WebCore/platform/cocoa/KeyEventCocoa.mm&apos;, u&apos;Source/WebCore/platform/graphics/BitmapImage.cpp&apos;, u&apos;Source/WebCore/platform/graphics/BitmapImage.h&apos;, u&apos;Source/WebCore/platform/graphics/Color.cpp&apos;, u&apos;Source/WebCore/platform/graphics/Color.h&apos;, u&apos;Source/WebCore/platform/graphics/DisplayRefreshMonitor.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatPoint.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatRect.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatSize.h&apos;, u&apos;Source/WebCore/platform/graphics/Font.cpp&apos;, u&apos;Source/WebCore/platform/graphics/Font.h&apos;, u&apos;Source/WebCore/platform/graphics/FontCache.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontCache.h&apos;, u&apos;Source/WebCore/platform/graphics/FontFastPath.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontGlyphs.h&apos;, u&apos;Source/WebCore/platform/graphics/FontPlatformData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontPlatformData.h&apos;, u&apos;Source/WebCore/platform/graphics/GlyphPageTreeNode.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext.h&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext3D.h&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsLayer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsLayer.h&apos;, u&apos;Source/WebCore/platform/graphics/Icon.h&apos;, u&apos;Source/WebCore/platform/graphics/Image.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ImageSource.h&apos;, u&apos;Source/WebCore/platform/graphics/IntPoint.h&apos;, u&apos;Source/WebCore/platform/graphics/IntRect.h&apos;, u&apos;Source/WebCore/platform/graphics/IntSize.h&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayer.h&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayerPrivate.h&apos;, u&apos;Source/WebCore/platform/graphics/SimpleFontData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/SimpleFontData.h&apos;, u&apos;Source/WebCore/platform/graphics/StringTruncator.cpp&apos;, u&apos;Source/WebCore/platform/graphics/StringTruncator.h&apos;, u&apos;Source/WebCore/platform/graphics/TextTrackRepresentation.cpp&apos;, u&apos;Source/WebCore/platform/graphics/WidthIterator.h&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/FontBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/PlatformCAFilters.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/PlatformCALayer.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/TileController.mm&apos;, u&apos;Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/BitmapImageCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ColorCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatPointCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatRectCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatSizeCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/GradientCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferDataCG.h&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageSourceCGMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntPointCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntRectCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntSizeCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PathCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PatternCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/DisplayRefreshMonitorIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontCacheIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontServicesIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontServicesIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/GraphicsContext3DIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/IconIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/InbandTextTrackPrivateAVFIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/MediaPlayerPrivateIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/MediaPlayerPrivateIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/SimpleFontDataIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/TextTrackRepresentationIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/TextTrackRepresentationIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/ColorMac.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/ComplexTextController.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatPointMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatRectMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatSizeMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontCacheMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/GraphicsContextMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IconMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/ImageMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntPointMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntRectMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntSizeMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/MediaPlayerProxy.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebGLLayer.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebGLLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebTiledLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp&apos;, u&apos;Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/FontWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/wince/FontWinCE.cpp&apos;, u&apos;Source/WebCore/platform/ios/ContentFilterIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/DeviceMotionClientIOS.h&apos;, u&apos;Source/WebCore/platform/ios/DeviceMotionClientIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/DeviceOrientationClientIOS.h&apos;, u&apos;Source/WebCore/platform/ios/DeviceOrientationClientIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/KeyEventIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/MIMETypeRegistryIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/MemoryPressureHandlerIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PasteboardIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformEventFactoryIOS.h&apos;, u&apos;Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformPasteboardIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformScreenIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformSpeechSynthesizerIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SSLKeyGeneratorIOS.cpp&apos;, u&apos;Source/WebCore/platform/ios/ScrollAnimatorIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ScrollAnimatorIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/ScrollViewIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/ScrollbarThemeIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ScrollbarThemeIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SelectionRect.cpp&apos;, u&apos;Source/WebCore/platform/ios/SelectionRect.h&apos;, u&apos;Source/WebCore/platform/ios/SoundIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SystemMemoryIOS.cpp&apos;, u&apos;Source/WebCore/platform/ios/ThemeIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ThemeIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/TileCache.h&apos;, u&apos;Source/WebCore/platform/ios/TileCache.mm&apos;, u&apos;Source/WebCore/platform/ios/TileGrid.h&apos;, u&apos;Source/WebCore/platform/ios/TileGrid.mm&apos;, u&apos;Source/WebCore/platform/ios/TileGridTile.h&apos;, u&apos;Source/WebCore/platform/ios/TileGridTile.mm&apos;, u&apos;Source/WebCore/platform/ios/TileLayer.h&apos;, u&apos;Source/WebCore/platform/ios/TileLayer.mm&apos;, u&apos;Source/WebCore/platform/ios/TileLayerPool.h&apos;, u&apos;Source/WebCore/platform/ios/TileLayerPool.mm&apos;, u&apos;Source/WebCore/platform/ios/WebCoreMotionManager.h&apos;, u&apos;Source/WebCore/platform/ios/WebCoreMotionManager.mm&apos;, u&apos;Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.h&apos;, u&apos;Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/WebEvent.h&apos;, u&apos;Source/WebCore/platform/ios/WebEvent.mm&apos;, u&apos;Source/WebCore/platform/ios/WidgetIOS.mm&apos;, u&apos;Source/WebCore/platform/mac/DisplaySleepDisabler.cpp&apos;, u&apos;Source/WebCore/platform/mac/DisplaySleepDisabler.h&apos;, u&apos;Source/WebCore/platform/mac/FileSystemMac.mm&apos;, u&apos;Source/WebCore/platform/mac/KillRingMac.mm&apos;, u&apos;Source/WebCore/platform/mac/MemoryPressureHandlerMac.mm&apos;, u&apos;Source/WebCore/platform/mac/PlatformClockCM.mm&apos;, u&apos;Source/WebCore/platform/mac/SoftLinking.h&apos;, u&apos;Source/WebCore/platform/mac/SystemVersionMac.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenPlaceholderView.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenPlaceholderView.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWarningView.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWarningView.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWindow.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWindow.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreNSCellExtras.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreNSCellExtras.m&apos;, u&apos;Source/WebCore/platform/mac/WebCoreSystemInterface.h&apos;, u&apos;Source/WebCore/platform/mac/WebFontCache.mm&apos;, u&apos;Source/WebCore/platform/network/BlobRegistry.cpp&apos;, u&apos;Source/WebCore/platform/network/BlobRegistryImpl.cpp&apos;, u&apos;Source/WebCore/platform/network/Credential.h&apos;, u&apos;Source/WebCore/platform/network/CredentialStorage.cpp&apos;, u&apos;Source/WebCore/platform/network/CredentialStorage.h&apos;, u&apos;Source/WebCore/platform/network/NetworkStateNotifier.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceRequestBase.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceRequestBase.h&apos;, u&apos;Source/WebCore/platform/network/cf/CredentialStorageCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/DNSCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ProxyServerCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceRequest.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/ios/NetworkStateNotifierIOS.cpp&apos;, u&apos;Source/WebCore/platform/network/ios/QuickLook.h&apos;, u&apos;Source/WebCore/platform/network/ios/QuickLook.mm&apos;, u&apos;Source/WebCore/platform/network/ios/ResourceHandleIOS.mm&apos;, u&apos;Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h&apos;, u&apos;Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.mm&apos;, u&apos;Source/WebCore/platform/network/mac/AuthenticationMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/CredentialStorageMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceErrorMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceHandleMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceRequestMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/UTIUtilities.mm&apos;, u&apos;Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm&apos;, u&apos;Source/WebCore/platform/sql/SQLiteDatabase.h&apos;, u&apos;Source/WebCore/platform/sql/SQLiteFileSystem.cpp&apos;, u&apos;Source/WebCore/platform/sql/SQLiteFileSystem.h&apos;, u&apos;Source/WebCore/platform/sql/SQLiteTransaction.cpp&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTracker.cpp&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTracker.h&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTrackerClient.h&apos;, u&apos;Source/WebCore/platform/text/PlatformLocale.cpp&apos;, u&apos;Source/WebCore/platform/text/PlatformLocale.h&apos;, u&apos;Source/WebCore/platform/text/TextBreakIteratorICU.cpp&apos;, u&apos;Source/WebCore/platform/text/TextCodecICU.cpp&apos;, u&apos;Source/WebCore/platform/text/TextEncodingRegistry.cpp&apos;, u&apos;Source/WebCore/platform/text/cf/HyphenationCF.cpp&apos;, u&apos;Source/WebCore/platform/text/ios/LocalizedDateCache.h&apos;, u&apos;Source/WebCore/platform/text/ios/LocalizedDateCache.mm&apos;, u&apos;Source/WebCore/platform/text/mac/CharsetData.h&apos;, u&apos;Source/WebCore/platform/text/mac/LocaleMac.h&apos;, u&apos;Source/WebCore/platform/text/mac/LocaleMac.mm&apos;, u&apos;Source/WebCore/platform/text/mac/TextBoundaries.mm&apos;, u&apos;Source/WebCore/platform/text/mac/TextCodecMac.cpp&apos;, u&apos;Source/WebCore/platform/text/mac/TextCodecMac.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/ios/WebEvent.h:27:  #ifndef header guard has wrong style, please use: WebEvent_h  [build/header_guard] [5]
ERROR: Source/WebCore/platform/ios/WebEvent.h:109:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:114:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:115:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:118:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:121:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:122:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:124:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:130:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:132:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:136:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:137:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:138:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:141:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:143:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:144:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:145:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:146:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:147:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/ScrollAnimatorIOS.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:143:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:144:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:145:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:144:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:145:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:189:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:189:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:250:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:117:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:118:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:119:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp:74:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SystemMemoryIOS.cpp:67:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SystemMemoryIOS.cpp:71:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:1041:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:1099:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:51:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:52:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:53:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:54:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/mac/SoftLinking.h:117:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mac/SoftLinking.h:122:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:45:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:46:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:47:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:48:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:50:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:51:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/FontPlatformData.h:104:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:54:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:55:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:56:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:57:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:58:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:59:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:60:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:61:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:62:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:63:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:64:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:65:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:66:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:67:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:68:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 79 in 280 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>965776</commentid>
    <comment_count>13</comment_count>
      <attachid>220696</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-01-08 21:31:03 -0800</bug_when>
    <thetext>Comment on attachment 220696
Patch

Attachment 220696 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/4676705868316672</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965778</commentid>
    <comment_count>14</comment_count>
      <attachid>220696</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-01-08 21:50:05 -0800</bug_when>
    <thetext>Comment on attachment 220696
Patch

Attachment 220696 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/6073543318044672</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965783</commentid>
    <comment_count>15</comment_count>
      <attachid>220696</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-01-08 22:48:06 -0800</bug_when>
    <thetext>Comment on attachment 220696
Patch

Attachment 220696 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/4826516743520256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965892</commentid>
    <comment_count>16</comment_count>
      <attachid>220733</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-01-09 07:40:01 -0800</bug_when>
    <thetext>Created attachment 220733
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965894</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-09 07:43:07 -0800</bug_when>
    <thetext>Attachment 220733 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/MainThread.cpp&apos;, u&apos;Source/WTF/wtf/MainThread.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/ContentFilter.h&apos;, u&apos;Source/WebCore/platform/DragData.h&apos;, u&apos;Source/WebCore/platform/FileChooser.cpp&apos;, u&apos;Source/WebCore/platform/FileChooser.h&apos;, u&apos;Source/WebCore/platform/FileSystem.cpp&apos;, u&apos;Source/WebCore/platform/FileSystem.h&apos;, u&apos;Source/WebCore/platform/KillRingNone.cpp&apos;, u&apos;Source/WebCore/platform/LocalizedStrings.cpp&apos;, u&apos;Source/WebCore/platform/LocalizedStrings.h&apos;, u&apos;Source/WebCore/platform/Logging.h&apos;, u&apos;Source/WebCore/platform/MIMETypeRegistry.cpp&apos;, u&apos;Source/WebCore/platform/MemoryPressureHandler.cpp&apos;, u&apos;Source/WebCore/platform/MemoryPressureHandler.h&apos;, u&apos;Source/WebCore/platform/PlatformKeyboardEvent.h&apos;, u&apos;Source/WebCore/platform/PlatformMouseEvent.h&apos;, u&apos;Source/WebCore/platform/PlatformScreen.h&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecks.cpp&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecksIOS.h&apos;, u&apos;Source/WebCore/platform/RuntimeApplicationChecksIOS.mm&apos;, u&apos;Source/WebCore/platform/ScrollAnimator.cpp&apos;, u&apos;Source/WebCore/platform/ScrollAnimator.h&apos;, u&apos;Source/WebCore/platform/ScrollTypes.h&apos;, u&apos;Source/WebCore/platform/ScrollView.cpp&apos;, u&apos;Source/WebCore/platform/ScrollView.h&apos;, u&apos;Source/WebCore/platform/ScrollableArea.cpp&apos;, u&apos;Source/WebCore/platform/ScrollableArea.h&apos;, u&apos;Source/WebCore/platform/Scrollbar.cpp&apos;, u&apos;Source/WebCore/platform/Scrollbar.h&apos;, u&apos;Source/WebCore/platform/SharedBuffer.cpp&apos;, u&apos;Source/WebCore/platform/SharedBuffer.h&apos;, u&apos;Source/WebCore/platform/SuddenTermination.h&apos;, u&apos;Source/WebCore/platform/Supplementable.h&apos;, u&apos;Source/WebCore/platform/SystemMemory.h&apos;, u&apos;Source/WebCore/platform/ThreadCheck.h&apos;, u&apos;Source/WebCore/platform/ThreadGlobalData.cpp&apos;, u&apos;Source/WebCore/platform/ThreadGlobalData.h&apos;, u&apos;Source/WebCore/platform/ThreadTimers.cpp&apos;, u&apos;Source/WebCore/platform/Timer.cpp&apos;, u&apos;Source/WebCore/platform/Timer.h&apos;, u&apos;Source/WebCore/platform/URL.cpp&apos;, u&apos;Source/WebCore/platform/URL.h&apos;, u&apos;Source/WebCore/platform/Widget.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioDestinationIOS.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioFileReaderIOS.cpp&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioFileReaderIOS.h&apos;, u&apos;Source/WebCore/platform/audio/ios/AudioSessionIOS.mm&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioDestinationMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioFileReaderMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioSessionMac.cpp&apos;, u&apos;Source/WebCore/platform/audio/mac/MediaSessionManagerMac.cpp&apos;, u&apos;Source/WebCore/platform/cf/SharedBufferCF.cpp&apos;, u&apos;Source/WebCore/platform/cf/URLCF.cpp&apos;, u&apos;Source/WebCore/platform/cocoa/KeyEventCocoa.mm&apos;, u&apos;Source/WebCore/platform/graphics/BitmapImage.cpp&apos;, u&apos;Source/WebCore/platform/graphics/BitmapImage.h&apos;, u&apos;Source/WebCore/platform/graphics/Color.cpp&apos;, u&apos;Source/WebCore/platform/graphics/Color.h&apos;, u&apos;Source/WebCore/platform/graphics/DisplayRefreshMonitor.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatPoint.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatRect.h&apos;, u&apos;Source/WebCore/platform/graphics/FloatSize.h&apos;, u&apos;Source/WebCore/platform/graphics/Font.cpp&apos;, u&apos;Source/WebCore/platform/graphics/Font.h&apos;, u&apos;Source/WebCore/platform/graphics/FontCache.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontCache.h&apos;, u&apos;Source/WebCore/platform/graphics/FontFastPath.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontGlyphs.h&apos;, u&apos;Source/WebCore/platform/graphics/FontPlatformData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/FontPlatformData.h&apos;, u&apos;Source/WebCore/platform/graphics/GlyphPageTreeNode.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext.h&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext3D.h&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsLayer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsLayer.h&apos;, u&apos;Source/WebCore/platform/graphics/Icon.h&apos;, u&apos;Source/WebCore/platform/graphics/Image.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ImageSource.h&apos;, u&apos;Source/WebCore/platform/graphics/IntPoint.h&apos;, u&apos;Source/WebCore/platform/graphics/IntRect.h&apos;, u&apos;Source/WebCore/platform/graphics/IntSize.h&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayer.h&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayerPrivate.h&apos;, u&apos;Source/WebCore/platform/graphics/SimpleFontData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/SimpleFontData.h&apos;, u&apos;Source/WebCore/platform/graphics/StringTruncator.cpp&apos;, u&apos;Source/WebCore/platform/graphics/StringTruncator.h&apos;, u&apos;Source/WebCore/platform/graphics/TextTrackRepresentation.cpp&apos;, u&apos;Source/WebCore/platform/graphics/WidthIterator.h&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm&apos;, u&apos;Source/WebCore/platform/graphics/blackberry/FontBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/PlatformCAFilters.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/PlatformCALayer.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/ca/mac/TileController.mm&apos;, u&apos;Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/BitmapImageCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ColorCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatPointCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatRectCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/FloatSizeCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/GradientCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageBufferDataCG.h&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/ImageSourceCGMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntPointCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntRectCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/IntSizeCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PathCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PatternCG.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/DisplayRefreshMonitorIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontCacheIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontServicesIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/FontServicesIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/GraphicsContext3DIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/IconIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/InbandTextTrackPrivateAVFIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/MediaPlayerPrivateIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/MediaPlayerPrivateIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/SimpleFontDataIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/ios/TextTrackRepresentationIOS.h&apos;, u&apos;Source/WebCore/platform/graphics/ios/TextTrackRepresentationIOS.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/ColorMac.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/ComplexTextController.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatPointMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatRectMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FloatSizeMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontCacheMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/FontMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/GraphicsContextMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IconMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/ImageMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntPointMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntRectMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/IntSizeMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/MediaPlayerProxy.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebGLLayer.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebGLLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebTiledLayer.mm&apos;, u&apos;Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp&apos;, u&apos;Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/FontWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/wince/FontWinCE.cpp&apos;, u&apos;Source/WebCore/platform/ios/ContentFilterIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/DeviceMotionClientIOS.h&apos;, u&apos;Source/WebCore/platform/ios/DeviceMotionClientIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/DeviceOrientationClientIOS.h&apos;, u&apos;Source/WebCore/platform/ios/DeviceOrientationClientIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/KeyEventIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/MIMETypeRegistryIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/MemoryPressureHandlerIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PasteboardIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformEventFactoryIOS.h&apos;, u&apos;Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformPasteboardIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformScreenIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PlatformSpeechSynthesizerIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SSLKeyGeneratorIOS.cpp&apos;, u&apos;Source/WebCore/platform/ios/ScrollAnimatorIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ScrollAnimatorIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/ScrollViewIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/ScrollbarThemeIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ScrollbarThemeIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SelectionRect.cpp&apos;, u&apos;Source/WebCore/platform/ios/SelectionRect.h&apos;, u&apos;Source/WebCore/platform/ios/SoundIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/SystemMemoryIOS.cpp&apos;, u&apos;Source/WebCore/platform/ios/ThemeIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ThemeIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/TileCache.h&apos;, u&apos;Source/WebCore/platform/ios/TileCache.mm&apos;, u&apos;Source/WebCore/platform/ios/TileGrid.h&apos;, u&apos;Source/WebCore/platform/ios/TileGrid.mm&apos;, u&apos;Source/WebCore/platform/ios/TileGridTile.h&apos;, u&apos;Source/WebCore/platform/ios/TileGridTile.mm&apos;, u&apos;Source/WebCore/platform/ios/TileLayer.h&apos;, u&apos;Source/WebCore/platform/ios/TileLayer.mm&apos;, u&apos;Source/WebCore/platform/ios/TileLayerPool.h&apos;, u&apos;Source/WebCore/platform/ios/TileLayerPool.mm&apos;, u&apos;Source/WebCore/platform/ios/WebCoreMotionManager.h&apos;, u&apos;Source/WebCore/platform/ios/WebCoreMotionManager.mm&apos;, u&apos;Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.h&apos;, u&apos;Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/WebEvent.h&apos;, u&apos;Source/WebCore/platform/ios/WebEvent.mm&apos;, u&apos;Source/WebCore/platform/ios/WidgetIOS.mm&apos;, u&apos;Source/WebCore/platform/mac/DisplaySleepDisabler.cpp&apos;, u&apos;Source/WebCore/platform/mac/DisplaySleepDisabler.h&apos;, u&apos;Source/WebCore/platform/mac/FileSystemMac.mm&apos;, u&apos;Source/WebCore/platform/mac/KillRingMac.mm&apos;, u&apos;Source/WebCore/platform/mac/MemoryPressureHandlerMac.mm&apos;, u&apos;Source/WebCore/platform/mac/PlatformClockCM.mm&apos;, u&apos;Source/WebCore/platform/mac/SoftLinking.h&apos;, u&apos;Source/WebCore/platform/mac/SystemVersionMac.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenPlaceholderView.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenPlaceholderView.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWarningView.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWarningView.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWindow.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreFullScreenWindow.mm&apos;, u&apos;Source/WebCore/platform/mac/WebCoreNSCellExtras.h&apos;, u&apos;Source/WebCore/platform/mac/WebCoreNSCellExtras.m&apos;, u&apos;Source/WebCore/platform/mac/WebCoreSystemInterface.h&apos;, u&apos;Source/WebCore/platform/mac/WebFontCache.mm&apos;, u&apos;Source/WebCore/platform/network/BlobRegistry.cpp&apos;, u&apos;Source/WebCore/platform/network/BlobRegistryImpl.cpp&apos;, u&apos;Source/WebCore/platform/network/Credential.h&apos;, u&apos;Source/WebCore/platform/network/CredentialStorage.cpp&apos;, u&apos;Source/WebCore/platform/network/CredentialStorage.h&apos;, u&apos;Source/WebCore/platform/network/NetworkStateNotifier.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceRequestBase.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceRequestBase.h&apos;, u&apos;Source/WebCore/platform/network/cf/CredentialStorageCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/DNSCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ProxyServerCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceRequest.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/ios/NetworkStateNotifierIOS.cpp&apos;, u&apos;Source/WebCore/platform/network/ios/QuickLook.h&apos;, u&apos;Source/WebCore/platform/network/ios/QuickLook.mm&apos;, u&apos;Source/WebCore/platform/network/ios/ResourceHandleIOS.mm&apos;, u&apos;Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h&apos;, u&apos;Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.mm&apos;, u&apos;Source/WebCore/platform/network/mac/AuthenticationMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/CredentialStorageMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceErrorMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceHandleMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceRequestMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/UTIUtilities.mm&apos;, u&apos;Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm&apos;, u&apos;Source/WebCore/platform/sql/SQLiteDatabase.h&apos;, u&apos;Source/WebCore/platform/sql/SQLiteFileSystem.cpp&apos;, u&apos;Source/WebCore/platform/sql/SQLiteFileSystem.h&apos;, u&apos;Source/WebCore/platform/sql/SQLiteTransaction.cpp&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTracker.cpp&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTracker.h&apos;, u&apos;Source/WebCore/platform/sql/ios/SQLiteDatabaseTrackerClient.h&apos;, u&apos;Source/WebCore/platform/text/PlatformLocale.cpp&apos;, u&apos;Source/WebCore/platform/text/PlatformLocale.h&apos;, u&apos;Source/WebCore/platform/text/TextBreakIteratorICU.cpp&apos;, u&apos;Source/WebCore/platform/text/TextCodecICU.cpp&apos;, u&apos;Source/WebCore/platform/text/TextEncodingRegistry.cpp&apos;, u&apos;Source/WebCore/platform/text/cf/HyphenationCF.cpp&apos;, u&apos;Source/WebCore/platform/text/ios/LocalizedDateCache.h&apos;, u&apos;Source/WebCore/platform/text/ios/LocalizedDateCache.mm&apos;, u&apos;Source/WebCore/platform/text/mac/CharsetData.h&apos;, u&apos;Source/WebCore/platform/text/mac/LocaleMac.h&apos;, u&apos;Source/WebCore/platform/text/mac/LocaleMac.mm&apos;, u&apos;Source/WebCore/platform/text/mac/TextBoundaries.mm&apos;, u&apos;Source/WebCore/platform/text/mac/TextCodecMac.cpp&apos;, u&apos;Source/WebCore/platform/text/mac/TextCodecMac.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/ios/WebEvent.h:27:  #ifndef header guard has wrong style, please use: WebEvent_h  [build/header_guard] [5]
ERROR: Source/WebCore/platform/ios/WebEvent.h:109:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:114:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:115:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:118:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:121:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:122:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:124:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:130:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:132:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:136:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:137:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:138:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:141:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:143:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:144:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:145:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:146:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:147:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/WebEvent.h:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/ScrollAnimatorIOS.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:143:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:144:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:145:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:144:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:145:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:189:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:189:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:190:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:250:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:117:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:118:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:119:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/BitmapImage.cpp:120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp:74:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SystemMemoryIOS.cpp:67:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SystemMemoryIOS.cpp:71:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:1041:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:1099:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:51:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:52:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:53:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextCodecICU.cpp:54:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/mac/SoftLinking.h:117:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mac/SoftLinking.h:122:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:45:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:46:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:47:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:48:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:50:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.h:51:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/FontPlatformData.h:104:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:54:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:55:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:56:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:57:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:58:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:59:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:60:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:61:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:62:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:63:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:64:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:65:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:66:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:67:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/ios/SelectionRect.cpp:68:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 79 in 280 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>965921</commentid>
    <comment_count>18</comment_count>
      <attachid>220733</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-01-09 08:46:01 -0800</bug_when>
    <thetext>Comment on attachment 220733
Patch

Attachment 220733 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/5825924629004288

New failing tests:
media/track/media-element-enqueue-event-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965922</commentid>
    <comment_count>19</comment_count>
      <attachid>220742</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-01-09 08:46:05 -0800</bug_when>
    <thetext>Created attachment 220742
Archive of layout-test-results from webkit-ews-14 for mac-mountainlion-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: webkit-ews-14  Port: mac-mountainlion-wk2  Platform: Mac OS X 10.8.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966077</commentid>
    <comment_count>20</comment_count>
      <attachid>220733</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-01-09 14:37:58 -0800</bug_when>
    <thetext>Comment on attachment 220733
Patch

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

rs=me.  There&apos;s no way I could review this whole patch in detail, but I did glance through all of it.

&gt; Source/WebCore/platform/ScrollTypes.h:29
&gt; +// WTF_PLATFORM_IOS

Nit: This can be removed later.  Useless comment at this point.

&gt; Source/WebCore/platform/text/TextCodecICU.cpp:197
&gt; +    // A.B. adding a few more Mac encodings missing &apos;cause we don&apos;t have TextCodecMac right now

A.B. = André Boulé</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966085</commentid>
    <comment_count>21</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-01-09 14:55:23 -0800</bug_when>
    <thetext>Committed r161589: &lt;http://trac.webkit.org/changeset/161589&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966115</commentid>
    <comment_count>22</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-01-09 16:12:17 -0800</bug_when>
    <thetext>Committed build fix for Mountain Lion Release (32-bit) in &lt;http://trac.webkit.org/changeset/161592&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966122</commentid>
    <comment_count>23</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-01-09 16:18:03 -0800</bug_when>
    <thetext>For some reason the Windows build was unhappy with the use of NeverDestroyed&lt;FontCache&gt; in WebCore::FontCache(), as it calls the private constructor FontCache::FontCache(), despite NeverDestroyed&lt;FontCache&gt; being a friend class of FontCache. Committed partial revert in &lt;http://trac.webkit.org/changeset/161598&gt;.

For completeness, the standard output for the Apple Win Release bot is at:
&lt;http://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/56267/steps/compile-webkit/logs/stdio&gt;

And here is the relevant error output:

 1&gt;C:\cygwin\home\buildbot\slave\win-debug\build\WebKitBuild\Debug\include\private\wtf/NeverDestroyed.h(52): error C2248: &apos;WebCore::FontCache::FontCache&apos; : cannot access private member declared in class &apos;WebCore::FontCache&apos; (..\platform\graphics\FontCache.cpp)
                 c:\cygwin\home\buildbot\slave\win-debug\build\source\webcore\platform\graphics\FontCache.h(172) : see declaration of &apos;WebCore::FontCache::FontCache&apos;
                 c:\cygwin\home\buildbot\slave\win-debug\build\source\webcore\platform\graphics\FontCache.h(107) : see declaration of &apos;WebCore::FontCache&apos;
                 ..\platform\graphics\FontCache.cpp(90) : see reference to function template instantiation &apos;WTF::NeverDestroyed&lt;WebCore::FontCache&gt;::NeverDestroyed&lt;&gt;(void)&apos; being compiled
                 ..\platform\graphics\FontCache.cpp(90) : see reference to function template instantiation &apos;WTF::NeverDestroyed&lt;WebCore::FontCache&gt;::NeverDestroyed&lt;&gt;(void)&apos; being compiled</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966134</commentid>
    <comment_count>24</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-01-09 16:40:38 -0800</bug_when>
    <thetext>Committed another Windows build fix in &lt;http://trac.webkit.org/changeset/161602&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966222</commentid>
    <comment_count>25</comment_count>
    <who name="Jaehun Lim">ljaehun.lim</who>
    <bug_when>2014-01-09 21:07:48 -0800</bug_when>
    <thetext>Please fix this failure.

EFL debug build has failed.

/home/jaehun/source/WebKit/Source/WebCore/platform/ThreadTimers.cpp: In member function ‘void WebCore::ThreadTimers::sharedTimerFiredInternal()’:
/home/jaehun/source/WebKit/Source/WebCore/platform/ThreadTimers.cpp:112:56: error: suggest parentheses around ‘&amp;&amp;’ within ‘||’ [-Werror=parentheses]
cc1plus: all warnings being treated as errors
make[2]: *** [Source/WebCore/CMakeFiles/WebCore.dir/platform/ThreadTimers.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [Source/WebCore/CMakeFiles/WebCore.dir/all] Error 2


In ThreadTimers.cpp:112,

ASSERT(isMainThread() || !isWebThread() &amp;&amp; !isUIThread());

We need parentheses. But I don&apos;t know where because I&apos;m not familiar to WebThread &amp; UIThread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966226</commentid>
    <comment_count>26</comment_count>
    <who name="Jaehun Lim">ljaehun.lim</who>
    <bug_when>2014-01-09 22:11:30 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Please fix this failure.
&gt; 
&gt; EFL debug build has failed.
&gt; 
&gt; /home/jaehun/source/WebKit/Source/WebCore/platform/ThreadTimers.cpp: In member function ‘void WebCore::ThreadTimers::sharedTimerFiredInternal()’:
&gt; /home/jaehun/source/WebKit/Source/WebCore/platform/ThreadTimers.cpp:112:56: error: suggest parentheses around ‘&amp;&amp;’ within ‘||’ [-Werror=parentheses]
&gt; cc1plus: all warnings being treated as errors
&gt; make[2]: *** [Source/WebCore/CMakeFiles/WebCore.dir/platform/ThreadTimers.cpp.o] Error 1
&gt; make[2]: *** Waiting for unfinished jobs....
&gt; make[1]: *** [Source/WebCore/CMakeFiles/WebCore.dir/all] Error 2
&gt; 
&gt; 
&gt; In ThreadTimers.cpp:112,
&gt; 
&gt; ASSERT(isMainThread() || !isWebThread() &amp;&amp; !isUIThread());
&gt; 
&gt; We need parentheses. But I don&apos;t know where because I&apos;m not familiar to WebThread &amp; UIThread.

Fixed in https://bugs.webkit.org/show_bug.cgi?id=126735</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220650</attachid>
            <date>2014-01-08 12:15:47 -0800</date>
            <delta_ts>2014-01-08 12:46:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126654-20140108121546.patch</filename>
            <type>text/plain</type>
            <size>994106</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDdlZDBhMjFhNGYxODdjMjk5YjkyNjNm
OGRiMDAxNmRlNWRmM2U2ZWMuLjQ1YTMwODVmNzZhNmNmYzY2ZmE5ZGI4YTgzY2JkNzVlMzVlYjRh
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMDEtMDggIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFVwc3RyZWFtIFdlYkNvcmUvcGxhdGZvcm0g
Y2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI2NjU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmNhbkFjY2Vzc1RocmVhZExvY2Fs
RGF0YUZvclRocmVhZCk6CisgICAgICAgICogd3RmL01haW5UaHJlYWQuaDoKKwogMjAxNC0wMS0w
NyAgRGF2aWQgRmFybGVyICA8ZGZhcmxlckBhcHBsZS5jb20+CiAKICAgICAgICAgW0FTQU5dIEJ1
aWxkaW5nIHdpdGggdHJ1bmsgY2xhbmcgY29ycnVwdHMgc2FuZGJveCBwcm9maWxlIHdpdGggY29t
bWVudCBmcm9tIENvbXBpbGVyLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYjhjOTkyZTYwYWY2NjE5NTkyZjBi
OTFiNGJkODBjMzVmZTdkZjUzLi5jMmNjMzFkNDBhZjI0ODBiYTNkMTRiYTM5NTNhOTIwZWQ1OWM4
OTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYyIEBACisyMDE0LTAxLTA4ICBEYW5pZWwgQmF0
ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBVcHN0cmVhbSBXZWJDb3Jl
L3BsYXRmb3JtIGNoYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNjY1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRlbnRGaWx0ZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9EcmFnRGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9v
c2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZpbGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWV0YWRhdGFVUkwpOgorICAg
ICAgICAqIHBsYXRmb3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9LaWxsUmlu
Z05vbmUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZmlsZUJ1dHRvbkNob29zZU1lZGlhRmlsZUxhYmVsKToKKyAgICAgICAg
KFdlYkNvcmU6OmZpbGVCdXR0b25DaG9vc2VNdWx0aXBsZU1lZGlhRmlsZXNMYWJlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpmaWxlQnV0dG9uTm9NZWRpYUZpbGVTZWxlY3RlZExhYmVsKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZpbGVCdXR0b25Ob01lZGlhRmlsZXNTZWxlY3RlZExhYmVsKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmg6CisgICAgICAgICogcGxhdGZvcm0vTG9n
Z2luZy5oOgorICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aW5pdGlhbGl6ZVN1cHBvcnRlZEltYWdlTUlNRVR5cGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmluaXRpYWxpemVTdXBwb3J0ZWROb25JbWFnZU1pbWVUeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjppbml0aWFsaXplVW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Bs
YXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpldmVudCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFp
bkJ1bmRsZUlzRXF1YWxUbyk6CisgICAgICAgICogcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzSU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1N0cmluZ1RydW5jYXRvci5oLgorICAgICAgICAqIHBsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrc0lPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVRvdWNoRXZlbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsVHlwZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
dzo6YWN0dWFsU2Nyb2xsWCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjphY3R1YWxT
Y3JvbGxZKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aXNQaW5uZWRJbkJvdGhEaXJlY3Rpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZEhvcml6b250YWxseUluRGlyZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZFZlcnRpY2Fs
bHlJbkRpcmVjdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc1RvdWNoU2Nyb2xsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aXNPdmVyZmxvd1Njcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZGlkU3RhcnRTY3JvbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWE6OmRpZEVuZFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxhYmxlQXJlYTo6ZGlkVXBkYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGFibGVBcmVhOjpzZXRJc1VzZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWE6OmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9NaW5pbXVtUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVk
VG9NYXhpbXVtUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Omlz
VmVydGljYWxTY3JvbGxlclBpbm5lZFRvTWluaW11bVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGFibGVBcmVhOjppc1ZlcnRpY2FsU2Nyb2xsZXJQaW5uZWRUb01heGltdW1Qb3Np
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGVQdXJnZWFibGVCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6c2hvdWxkVXNlUHVyZ2Vh
YmxlTWVtb3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TdWRkZW5UZXJtaW5hdGlvbi5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdXBw
bGVtZW50YWJsZTo6cHJvdmlkZVN1cHBsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3VwcGxl
bWVudGFibGU6OnJlbW92ZVN1cHBsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3VwcGxlbWVu
dGFibGU6OnJlcXVpcmVTdXBwbGVtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TeXN0ZW1NZW1v
cnkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5n
VHJ1bmNhdG9yLmguCisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkQ2hlY2suaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVh
ZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFk
R2xvYmFsRGF0YTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRh
OjpzZXRXZWJDb3JlVGhyZWFkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjp0aHJlYWRHbG9iYWxE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmg6CisgICAgICAgICog
cGxhdGZvcm0vVGhyZWFkVGltZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFRpbWVy
czo6VGhyZWFkVGltZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFRpbWVyczo6c2hhcmVk
VGltZXJGaXJlZEludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaW1lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUaW1lckJhc2U6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVy
QmFzZTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lckJhc2U6OnNldE5leHRGaXJlVGlt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vVGltZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVy
QmFzZTo6aXNBY3RpdmUpOgorICAgICAgICAqIHBsYXRmb3JtL1VSTC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjplbmFibGVVUkxTY2hlbWVDYW5vbmljYWxpemF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmVxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTDo6cGFyc2UpOgorICAgICAgICAqIHBs
YXRmb3JtL1VSTC5oOgorICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFjLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUF1ZGlvQnVmZmVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpkZXN0
cm95QXVkaW9CdWZmZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6
QXVkaW9GaWxlUmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6fkF1
ZGlvRmlsZVJlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OnJlYWRQ
cm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6Z2V0U2l6ZVByb2MpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUF1ZGlvRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2lv
cy9BdWRpb0ZpbGVSZWFkZXJJT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmguCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Zp
bGVSZWFkZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpkYXRh
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvU2Vzc2lvbklPUy5tbToK
KyAgICAgICAgKFNPRlRfTElOS19QT0lOVEVSKToKKyAgICAgICAgKC1bV2ViQXVkaW9TZXNzaW9u
SGVscGVyIGluaXRXaXRoQ2FsbGJhY2s6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1dlYkF1ZGlv
U2Vzc2lvbkhlbHBlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkF1ZGlvU2Vzc2lvbkhlbHBl
ciBpbnRlcnJ1cHRpb246XSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1Nlc3Npb246OnNldENh
dGVnb3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1h
Yy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZSk6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vYXVk
aW8vbWFjL01lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwOgorICAgICAgICAoTWVkaWFTZXNzaW9u
TWFuYWdlcjo6dXBkYXRlU2Vzc2lvblN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9TaGFy
ZWRCdWZmZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vY2YvVVJMQ0YuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2NvY29hL0tleUV2ZW50Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjp3aW5kb3dzS2V5
Q29kZUZvckNoYXJDb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lSW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6b3JpZ2luYWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpvcmlnaW5h
bFNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjplbnN1cmVG
cmFtZUluZm9Jc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lT3JpZW50YXRpb25BdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzdGFydEFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0RhcmspOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
RGlzcGxheVJlZnJlc2hNb25pdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Rm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp3
aWR0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6d29yZFNwYWNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6bGV0dGVy
U3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzZXRXb3JkU3BhY2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpzZXRMZXR0ZXJTcGFjaW5nKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOgorICAgICAgICAoaW5pdEZvbnRDYWNoZUxvY2tPbmNl
KToKKyAgICAgICAgKEZvbnRMb2NrZXI6OkZvbnRMb2NrZXIpOgorICAgICAgICAoRm9udExvY2tl
cjo6fkZvbnRMb2NrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udENhY2hlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0
UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3U2ltcGxlVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRHbHlwaHMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmZvbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cm91bmRzR2x5cGhBZHZhbmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjppbml0aWFsaXplUGFnZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdCaWRpVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBS
b3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmVtb2ppRHJh
d2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRFbW9q
aURyYXdpbmdFbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6Y29udGVudHNMYXllckZvck1lZGlhKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6OnBpeGVsQWxpZ25tZW50T2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6Omhhc0ZsYXR0ZW5lZFBlcnNwZWN0aXZlVHJhbnNmb3JtKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JY29uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdUaWxlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjppc1N1YnNhbXBsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFBvaW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbnN0YWxsZWRN
ZWRpYUVuZ2luZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmlzQ3VycmVudFBs
YXliYWNrVGFyZ2V0V2lyZWxlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6
aGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXI6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyOjpzZXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0
ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmN1cnJlbnRQbGF5YmFja1Rh
cmdldElzV2lyZWxlc3NDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpw
bGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXI6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXI6OnJlYWR5Rm9yUGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnZv
bHVtZUNoYW5nZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllckNsaWVudDo6bWVkaWFQbGF5ZXJDdXJyZW50
UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllckNsaWVudDo6bWVkaWFQbGF5ZXJQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5n
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjp2b2x1bWUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjppc0N1cnJlbnRQ
bGF5YmFja1RhcmdldFdpcmVsZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZTo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6aGFzV2lyZWxlc3NQbGF5YmFja1Rhcmdl
dHMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjp3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2U6OnNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6c2V0SGFzUGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlSW50ZXJmYWNlOjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6cmVhZHlGb3JQbGF5YmFjayk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1N0cmluZ1RydW5jYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjZW50ZXJUcnVuY2F0ZVRv
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0VHJ1bmNhdGVUb0J1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpyaWdodENsaXBUb0NoYXJhY3RlckJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpyaWdodENsaXBUb1dvcmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFRydW5j
YXRlVG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6dHJ1bmNhdGVTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJUcnVuY2F0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RyaW5nVHJ1bmNhdG9yOjpsZWZ0VHJ1bmNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3Ry
aW5nVHJ1bmNhdG9yOjpyaWdodENsaXBUb0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dHJpbmdUcnVuY2F0b3I6OnJpZ2h0Q2xpcFRvV29yZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OnN1cHBvcnRz
VHlwZXNldHRpbmdGZWF0dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL0FWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGwubW06CisgICAgICAgIChXZWJDb3JlOjpB
VlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsOjpsYWJlbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OnBsYXRmb3JtTWF4VGltZUxvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjp3a0FWQXNzZXRS
ZXNvbHZlZFVSTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250
QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzdXBwb3J0c0FjY2VsZXJhdGVkRmlsdGVyQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNvbnRlbnRzTGF5ZXJGb3JNZWRpYSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNvbXB1dGVWaXNpYmxlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdlb21ldHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNSZWN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9ybUFuaW1h
dGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
c2V0dXBDb250ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
bWVkaWFMYXllck11c3RCZVVwZGF0ZWRPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNBOjpjb21wdXRlUGl4ZWxBbGlnbm1lbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvUGxhdGZvcm1DQUxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3VycmVu
dFJ1bkxvb3ApOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxlcjo6c2NoZWR1
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMubW06CisgICAgICAgICgtW1dlYkFuaW1hdGlvbkRlbGVnYXRlIGFuaW1hdGlvbkRpZFN0YXJ0
Ol0pOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRDb250ZW50c1NjYWxlKToKKyAg
ICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6aXNXZWJMYXllcik6CisgICAgICAgIChQbGF0Zm9ybUNB
TGF5ZXI6OnNldEJvdW5kc09uTWFpblRocmVhZCk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6
OnNldFBvc2l0aW9uT25NYWluVGhyZWFkKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6c2V0
QW5jaG9yUG9pbnRPbk1haW5UaHJlYWQpOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjpzZXRU
aWxlU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9s
bGVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnBsYXRmb3JtQ0FMYXll
clBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnJlbW92
ZUFsbFRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpyZW1vdmVBbGxT
ZWNvbmRhcnlUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmVtb3Zl
VGlsZXNJbkNvaG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmV2YWxp
ZGF0ZVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpjcmVhdGVUaWxl
TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0Zv
clNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lQXRJbmRleCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVDR0NvbG9yV2l0aERldmljZVdoaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUNHQ29sb3JXaXRoRGV2aWNlUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29s
b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzUkdCQ29sb3JT
cGFjZVJlZik6CisgICAgICAgIChXZWJDb3JlOjpzZXRTdHJva2VBbmRGaWxsQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlSU9TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpqcGVnVVRJKToKKyAgICAgICAgKFdlYkNvcmU6OnV0aUZyb21NSU1FVHlwZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdQYXR0ZXJuQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpJbWFnZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjppbWFnZVNvdXJjZU9w
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmltYWdlU291cmNlT3B0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6b3JpZ2luYWxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW06CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW50UmVjdENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXpl
Q0cuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW06CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhQXNzaWduKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6OmFsbG93c0xpZ2F0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpjdEZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNwbGF5
UmVmcmVzaE1vbml0b3JpT1MubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yOjp+RGlzcGxheVJlZnJlc2hNb25pdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlSZWZyZXNoTW9uaXRvcjo6cmVxdWVzdFJlZnJlc2hDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I6OmRpc3BsYXlMaW5rRmlyZWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW06IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJT1MuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5tbTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250U2VydmljZXNJT1M6OkZvbnRTZXJ2aWNlc0lPUyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBoaWNzQ29udGV4dDNESU9TLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuY3Bw
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmguCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGSU9TOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUzo6aW50ZXJuYWxJRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRSZWN0TWFjLm1tLgorICAgICAgICAoV2Vi
Q29yZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUzo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRklPUyk6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9T
Ojp+SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUyk6CisgICAgICAgIChXZWJDb3JlOjpJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TOjpraW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9pb3MvTWVkaWFQbGF5ZXJQcml2YXRlSU9TLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2lvcy9NZWRpYVBsYXllclByaXZhdGVJT1MubW06IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZvbnRIYXNWZXJ0aWNhbEdseXBocyk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRUcmFja1JlcHJlc2VudGF0aW9u
LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25JT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xv
ck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjphZGp1
c3RHbHlwaHNBbmRBZHZhbmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW06CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1hYy5tbToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3
Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Zm9udERhdGFGb3JDb21iaW5p
bmdDaGFyYWN0ZXJTZXF1ZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hvd0xldHRlcnByZXNzZWRHbHlwaHNX
aXRoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFjLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2VGcm9tRHJhd2FibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRG90UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL21hYy9JY29uTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW06
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWMubW06CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFNpemVNYWMubW06CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJveHkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9XZWJHTExheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1dlYkdMTGF5ZXIubW06CisgICAgICAgICgtW1dlYkdMTGF5ZXIgY29weUltYWdlU25hcHNo
b3RXaXRoQ29sb3JTcGFjZTpdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBkaXNwbGF5XSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6ZHJhd0xheWVyQ29udGVudHMpOgorICAgICAgICAoLVtXZWJTaW1wbGVMYXllciBkaXNw
bGF5XSk6CisgICAgICAgICgtW1dlYlNpbXBsZUxheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIubW06CisgICAgICAgICgr
W1dlYlRpbGVkTGF5ZXIgc2hvdWxkRHJhd09uTWFpblRocmVhZF0pOgorICAgICAgICAoLVtXZWJU
aWxlZExheWVyIGRpc3BsYXldKToKKyAgICAgICAgKC1bV2ViVGlsZWRMYXllciBkcmF3SW5Db250
ZXh0Ol0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpibGl0RnJh
bWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpiaW5kVmVy
dGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBw
b3J0c0V4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmRy
YXdCdWZmZXJzRVhUKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1h
dGlvbk1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
bXVsdGlwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vaW9zL0NvbnRlbnRGaWx0
ZXJJT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRGaWx0
ZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvRGV2aWNlTW90aW9uQ2xpZW50SU9TLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TOjpjcmVhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9EZXZpY2VNb3Rpb25DbGllbnRJT1MubW06IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpjcmVhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5tbTog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL0tleUV2ZW50SU9TLm1tOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9NSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9pb3MvTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmQ6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJl
c291cmNlTUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVQbGFp
blRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpzdXBwb3J0ZWRJbWFnZVR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OnN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIu
aC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW06IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9pb3MvUGxhdGZvcm1TY3JlZW5JT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2lvcy9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1tOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9pb3MvU1NMS2V5R2VuZXJhdG9ySU9TLmNwcDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5oLgorICAgICAgICAqIHBsYXRm
b3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1Njcm9sbFZpZXdJT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TY3Jv
bGxiYXJUaGVtZUlPUy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvU2Nyb2xsYmFy
VGhlbWVJT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TZWxlY3Rpb25SZWN0
LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1NlbGVjdGlvblJlY3QuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1NvdW5kSU9TLm1tOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9DaGFyc2V0RGF0YS5oLgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9TeXN0ZW1NZW1vcnlJT1MuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvVGhlbWVJT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2ls
bFJpbmdOb25lLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGhlbWVJT1MubW06IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9uZS5jcHAuCisgICAgICAg
ICogcGxhdGZvcm0vaW9zL1RpbGVDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVDYWNoZTo6aXNTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9UaWxlQ2FjaGUubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9U
aWxlR3JpZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGlsZUdyaWQubW06IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZpbHRlci5oLgorICAgICAgICAqIHBsYXRm
b3JtL2lvcy9UaWxlR3JpZFRpbGUubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9U
aWxlTGF5ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3Bs
YXlTbGVlcERpc2FibGVyLmguCisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVMYXllci5tbTog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVMYXllclBvb2wubW06IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwLgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5tbTogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW06IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2lvcy9XZWJFdmVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvV2ViRXZlbnQubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XaWRnZXRJT1Mu
bW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5U2xlZXBEaXNhYmxlcjo6RGlzcGxheVNsZWVw
RGlzYWJsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVNsZWVwRGlzYWJsZXI6On5EaXNw
bGF5U2xlZXBEaXNhYmxlcik6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERp
c2FibGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW06CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlQ
cmVzc3VyZUhhbmRsZXI6Omluc3RhbGwpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5UHJlc3N1
cmVIYW5kbGVyOjpyZWxlYXNlTWVtb3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZv
cm1DbG9ja0NNLm1tOgorICAgICAgICAoUGxhdGZvcm1DbG9ja0NNOjpQbGF0Zm9ybUNsb2NrQ00p
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9TeXN0ZW1WZXJzaW9uTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJD
b3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9X
ZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJD
b3JlRnVsbFNjcmVlbldpbmRvdy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZU5T
Q2VsbEV4dHJhcy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFz
Lm06CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViRm9udENhY2hlLm1tOgorICAgICAgICAoK1tXZWJGb250
Q2FjaGUgZm9udFdpdGhGYW1pbHk6dHJhaXRzOnNpemU6XSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9CbG9iUmVnaXN0cnkuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5SW1wbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFs
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFnZTo6c2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpjbGVhckNyZWRlbnRpYWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbHRpblJlc291cmNlSGFu
ZGxlQ29uc3RydWN0b3JNYXApOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
Ojpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RGVm
YXVsdEFsbG93Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNl
OjpkZWZhdWx0QWxsb3dDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OlJlc291cmNlUmVxdWVzdEJhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvQ3Jl
ZGVudGlhbFN0b3JhZ2VDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3Rv
cmFnZTo6c2F2ZVRvUGVyc2lzdGVudFN0b3JhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY2YvRE5TQ0ZOZXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUHJveHlT
ZXJ2ZXJDRk5ldC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
cXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6c2V0TWFpblJlc291cmNl
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmlzTWFpblJlc291
cmNlUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVl
c3RDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZUZy
b21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRIVFRQQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3Q6OmRvVXBkYXRlUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdDo6YXBwbHlXZWJBcmNoaXZlSGFja0Zvck1haWwpOgorICAgICAgICAo
V2ViQ29yZTo6aW5pdGlhbGl6ZUhUVFBDb25uZWN0aW9uU2V0dGluZ3NPblN0YXJ0dXApOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZXBvcnRFcnJvclRvQ2xpZW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9OZXR3b3JrU3RhdGVOb3RpZmllcklP
Uy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9uZS5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RhdGVOb3RpZmllcjo6TmV0d29ya1N0YXRl
Tm90aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0YXRlTm90aWZpZXI6OnNldElz
T25MaW5lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xvb2suaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLm1tOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9SZXNvdXJjZUhhbmRsZUlPUy5tbTogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9pb3MvV2ViQ29yZVVSTFJlc3BvbnNlSU9T
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1Ry
dW5jYXRvci5oLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvaW9zL1dlYkNvcmVVUkxSZXNw
b25zZUlPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvQXV0aGVu
dGljYXRpb25NYWMubW06CisgICAgICAgIChXZWJDb3JlOjptYWMpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvbWFjL0NyZWRlbnRpYWxTdG9yYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OnNhdmVUb1BlcnNpc3RlbnRTdG9yYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUVycm9yTWFjLm1tOgorICAgICAgICAoZGlj
dGlvbmFyeVRoYXRDYW5Db2RlKToKKyAgICAgICAgKC1bV2ViQ3VzdG9tTlNVUkxFcnJvciBlbmNv
ZGVXaXRoQ29kZXI6XSk6CisgICAgICAgIChOU0Vycm9yRnJvbUNGRXJyb3IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VFcnJvcjo6bnNFcnJvcik6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzeW5jaHJv
bm91c1dpbGxTZW5kUmVxdWVzdEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNjaGVk
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp1bnNjaGVkdWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMv
UmVzb3VyY2VSZXF1ZXN0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
OjpSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp1
cGRhdGVOU1VSTFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojph
cHBseVdlYkFyY2hpdmVIYWNrRm9yTWFpbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3Q6OnVzZVF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcyk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9tYWMvVVRJVXRpbGl0aWVzLm1tOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUubW06CisgICAgICAgICgt
W1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUgY29ubmVjdGlvblNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlOl0pOgorICAgICAgICAoLVtXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVn
YXRlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZVJlc3BvbnNlOl0pOgorICAgICAgICAoLVtXZWJDb3Jl
UmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZURhdGFBcnJheTpd
KToKKyAgICAgICAgKC1bV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSBjb25uZWN0aW9u
OmRpZFJlY2VpdmVEYXRhOmxlbmd0aFJlY2VpdmVkOl0pOgorICAgICAgICAoLVtXZWJDb3JlUmVz
b3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5nOl0pOgorICAg
ICAgICAoLVtXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246ZGlkRmFp
bFdpdGhFcnJvcjpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzcWxpdGUzSGFuZGxlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVGaWxlU3lzdGVtOjp0cnVuY2F0ZURhdGFiYXNlRmlsZSk6CisgICAgICAgICogcGxh
dGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FM
aXRlVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb246
OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uOjpjb21taXQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb246OnJvbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uOjpzdG9wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9z
cWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3NxbC9pb3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAuCisgICAgICAgICogcGxh
dGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcC4KKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1Bs
YXRmb3JtTG9jYWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRv
cklDVS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQ29kZWNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFRleHRD
b2RlY01hcHMpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjYW5IeXBoZW5hdGUpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvbWFjL0NoYXJzZXREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxl
TWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6TG9jYWxlTWFjOjpmb3JtYXREYXRlVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2NhbGVNYWM6Om1heGltdW1XaWR0aEZvckRhdGVUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2tpcENo
YXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1doaXRlc3BhY2VDaGFyYWN0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNXb3JkRGVsaW1pdGluZ0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJD
b3JlOjppc1N5bWJvbENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc0FtYmlndW91c0Jv
dW5kYXJ5Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRva2VuaXplckZvclN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpmaW5kU2ltcGxlV29yZEJvdW5kYXJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRDb21wbGV4V29yZEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRX
b3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5leHRXb3JkRnJvbUluZGV4KToK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5oOgorCiAyMDE0LTAxLTA4ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgV2lu
ZG93cyBidWlsZCBmaXggYXR0ZW1wdCBhZnRlciByMTYxNDgxLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvTWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApp
bmRleCAwNDRhNjQ3MjA5Yzc0MjIxNjYwM2FlYjdhYzcyZjdkOGUxZWI2MjUxLi5mNTcyYTNmZjVi
N2E5Mjg4ZDA0YjBjMTI4ZDU4ZGViZjUyMzA3ZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9NYWluVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApAQCAt
MjY2LDYgKzI2NiwxMyBAQCBib29sIGlzTWFpblRocmVhZCgpCiB9CiAjZW5kaWYKIAorI2lmICFV
U0UoV0VCX1RIUkVBRCkKK2Jvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSWQpCit7CisgICAgcmV0dXJuIHRocmVhZElkID09IGN1cnJl
bnRUaHJlYWQoKTsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQogc3RhdGlj
IFRocmVhZFNwZWNpZmljPGJvb2w+KiBpc0dDVGhyZWFkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmggYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgK
aW5kZXggNTBkZWI5YTlkMTUwYjA2NDEzMjExZDZhZWY2MmQzN2MwYmM5M2Y2OS4uMTNmNTUyMDRi
ZTQ3MTJmNDEzYTdjYTY4NjExYWQ3ZTJjYWE4ZDdiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvTWFpblRocmVhZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaApAQCAtNTUs
MTMgKzU1LDE0IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1haW5UaHJlYWRDYWxsYmFj
a3NQYXVzZWQoYm9vbCBwYXVzZWQpOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc01haW5U
aHJlYWQoKTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxE
YXRhRm9yVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworCiAjaWYgVVNFKFdFQl9USFJFQUQpCiBX
VEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1dlYlRocmVhZCgpOwogV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgaXNVSVRocmVhZCgpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVdl
YlRocmVhZCgpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZUFwcGxpY2F0aW9u
VUlUaHJlYWRJZGVudGlmaWVyKCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXpl
V2ViVGhyZWFkSWRlbnRpZmllcigpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOwogdm9pZCBpbml0aWFs
aXplV2ViVGhyZWFkUGxhdGZvcm0oKTsKICNlbHNlCiBpbmxpbmUgYm9vbCBpc1dlYlRocmVhZCgp
IHsgcmV0dXJuIGlzTWFpblRocmVhZCgpOyB9CkBAIC0xMDIsMTEgKzEwMywxMyBAQCB1c2luZyBX
VEY6OmNhbmNlbENhbGxPbk1haW5UaHJlYWQ7CiB1c2luZyBXVEY6OnNldE1haW5UaHJlYWRDYWxs
YmFja3NQYXVzZWQ7CiB1c2luZyBXVEY6OmlzTWFpblRocmVhZDsKIHVzaW5nIFdURjo6aXNNYWlu
VGhyZWFkT3JHQ1RocmVhZDsKK3VzaW5nIFdURjo6Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkOwordXNpbmcgV1RGOjppc1VJVGhyZWFkOwordXNpbmcgV1RGOjppc1dlYlRocmVhZDsK
ICNpZiBVU0UoV0VCX1RIUkVBRCkKIHVzaW5nIFdURjo6aW5pdGlhbGl6ZVdlYlRocmVhZDsKIHVz
aW5nIFdURjo6aW5pdGlhbGl6ZUFwcGxpY2F0aW9uVUlUaHJlYWRJZGVudGlmaWVyOwogdXNpbmcg
V1RGOjppbml0aWFsaXplV2ViVGhyZWFkSWRlbnRpZmllcjsKLXVzaW5nIFdURjo6Y2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkOwogI2VuZGlmCiAKICNlbmRpZiAvLyBNYWluVGhyZWFk
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMGMxZmQyYzNiZWMyNGI5OTg1ZTcyYWU5MjI3Mzcz
ZmNmZWEyM2UzMS4uMjkzYWFjMTcyMjNkZTc0Y2E0MGU0MmVlMzgzM2FjNjhjZTVjYmI0ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KQEAgLTE5MTUsNiArMTkxNSw5IEBAIF93a1NpZ25hbENGUmVhZFN0
cmVhbUVuZAogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtRXJyb3IKIF93a1NpZ25hbENGUmVhZFN0cmVh
bUhhc0J5dGVzCiAKK19fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc0Fkb2JlSW5zdGFsbGVyRXYK
K19fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc01pY3Jvc29mdE15RGF5RXYKKwogI2lmICFQTEFU
Rk9STShJT1MpCiAub2JqY19jbGFzc19uYW1lX0RPTUF0dHIKIC5vYmpjX2NsYXNzX25hbWVfRE9N
Q0RBVEFTZWN0aW9uCkBAIC0yMDQzLDggKzIwNDYsNiBAQCBfX1pON1dlYkNvcmUyNmNvbnRleHRN
ZW51SXRlbVRhZ0ZvbnRNZW51RXYKIF9fWk43V2ViQ29yZTI2Y29udGV4dE1lbnVJdGVtVGFnT3Bl
bkxpbmtFdgogX19aTjdXZWJDb3JlMjZwZGZEb2N1bWVudFR5cGVEZXNjcmlwdGlvbkV2CiBfX1pO
N1dlYkNvcmUyNnVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yRXYKLV9fWk43V2ViQ29yZTI3YXBw
bGljYXRpb25Jc0Fkb2JlSW5zdGFsbGVyRXYKLV9fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc01p
Y3Jvc29mdE15RGF5RXYKIF9fWk43V2ViQ29yZTI3Y29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRz
RXYKIF9fWk43V2ViQ29yZTI3Y29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lRXYKIF9fWk43V2Vi
Q29yZTI4Y29udGV4dE1lbnVJdGVtVGFnQ2FwaXRhbGl6ZUV2CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTVlNzNjZTc2MTZmOTQ2
NDRmZjk4NjViYjg2NGFkYjIzZGI1MTNlMS4uMTdmZjYzYjkyMGYwMDQzZDIxZTFlNTZjNzNjNjRk
MGFjYmUyNjM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtNTQ5Miw2ICs1NDkyLDczIEBACiAJCUNFQ0FERkNFMTUzNzc5MUQw
MEUzNzA2OCAvKiBUZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQ0FERkNDMTUzNzc5MUQwMEUzNzA2OCAvKiBU
ZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuaCAqLzsgfTsKIAkJQ0VDQ0ZDM0IxNDE5NzNENTAwMkEw
QUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VDQ0ZDM0ExNDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVz
Y2FwZVNlcXVlbmNlcy5oICovOyB9OwogCQlDRURBMTJENzE1MkNBMUNCMDBEOUUwOEQgLyogQWx0
ZXJuYXRpdmVUZXh0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRURBMTJENjE1MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xp
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MjkwMzcxNjUxNkJBMTFCQzAwRkVGREYwIC8qIENvbnRlbnRGaWx0ZXJJT1MubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTAzNzE2NDE2QkExMUJDMDBG
RUZERjAgLyogQ29udGVudEZpbHRlcklPUy5tbSAqLzsgfTsKKwkJMzFFQUY5N0UxMjE0MzVBNDAw
RTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFFQUY5N0MxMjE0MzVBNDAwRTdDMUJGIC8qIERldmlj
ZU1vdGlvbkNsaWVudElPUy5oICovOyB9OworCQkzMUVBRjk3RjEyMTQzNUE0MDBFN0MxQkYgLyog
RGV2aWNlTW90aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzFFQUY5N0QxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlvbkNs
aWVudElPUy5tbSAqLzsgfTsKKwkJMzE0MDM3OUQxMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9y
aWVudGF0aW9uQ2xpZW50SU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTQwMzc5OTEyNEJFQTdGMDBBRjQwRTQgLyogRGV2aWNlT3JpZW50YXRpb25D
bGllbnRJT1MuaCAqLzsgfTsKKwkJMzE0MDM3OUUxMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9y
aWVudGF0aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzE0MDM3OUExMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9u
Q2xpZW50SU9TLm1tICovOyB9OworCQkxRjY4RDRBRTE0QkI5RENBMDA3QjVDNjIgLyogTWVtb3J5
UHJlc3N1cmVIYW5kbGVySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUY2OEQ0QUQxNEJCOURDQTAwN0I1QzYyIC8qIE1lbW9yeVByZXNzdXJlSGFu
ZGxlcklPUy5tbSAqLzsgfTsKKwkJRTQ1MzkwMUQwRUFGQ0FDQTAwMzY5NUM4IC8qIE1JTUVUeXBl
UmVnaXN0cnlJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDUzOTAxODBFQUZDQUNBMDAzNjk1QzggLyogTUlNRVR5cGVSZWdpc3RyeUlPUy5tbSAq
LzsgfTsKKwkJMjY2MDFFQkYxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5
SU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjYw
MUVCRDE0QjNCOUFEMDAxMkMwRkUgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkyNjYwMUVDMDE0QjNC
OUFEMDAxMkMwRkUgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjYwMUVCRTE0QjNCOUFEMDAxMkMwRkUg
LyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0gKi87IH07CisJCUU0NTM5MDQzMEVBRkQ2Mzcw
MDM2OTVDOCAvKiBQbGF0Zm9ybVNjcmVlbklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MDMyMEVBRkQ2MzcwMDM2OTVDOCAvKiBQbGF0Zm9y
bVNjcmVlbklPUy5tbSAqLzsgfTsKKwkJQUExMkRGNDkxNzQzREY4MzAwNERBRkRGIC8qIFBsYXRm
b3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBQUUzNzU1RDE3NDI5QkNDMDA2MjAwQzIgLyogUGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXplcklPUy5tbSAqLzsgfTsKKwkJMEYxNzc0ODAxMzc4Qjc3MjAwOURBNzZBIC8q
IFNjcm9sbEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1Mu
aCAqLzsgfTsKKwkJMEYxNzc0ODExMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNzc0
N0YxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLm1tICovOyB9OworCQk0NEM5
OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Qzk5MTg1MEYzRDFFQkUwMDU4NjY3
MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5oICovOyB9OworCQk0NEM5OTE4MjBGM0QxRTBEMDA1ODY2
NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NEM5OTE4MTBGM0QxRTBEMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhl
bWVJT1MubW0gKi87IH07CisJCUU0NTM5MDQ1MEVBRkQ2MzcwMDM2OTVDOCAvKiBTY3JvbGxWaWV3
SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1
MzkwMzQwRUFGRDYzNzAwMzY5NUM4IC8qIFNjcm9sbFZpZXdJT1MubW0gKi87IH07CisJCUJFQTgw
N0M4MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFQTgwN0M2MEY3MTRBMDMwMDUyNDE5OSAv
KiBTZWxlY3Rpb25SZWN0LmNwcCAqLzsgfTsKKwkJQkVBODA3QzkwRjcxNEEwMzAwNTI0MTk5IC8q
IFNlbGVjdGlvblJlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJFQTgwN0M3MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTQ1MzkwNDcwRUFG
RDYzNzAwMzY5NUM4IC8qIFNvdW5kSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQ1MzkwMzYwRUFGRDYzNzAwMzY5NUM4IC8qIFNvdW5kSU9TLm1t
ICovOyB9OworCQk0NDc2NTMxQjEzMzE3MDk5MDAwNkI3ODkgLyogU1NMS2V5R2VuZXJhdG9ySU9T
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NzY1
MzFBMTMzMTcwOTkwMDA2Qjc4OSAvKiBTU0xLZXlHZW5lcmF0b3JJT1MuY3BwICovOyB9OworCQlF
NDUzOTBBRTBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9TLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MEFEMEVBRkY0QjUwMDM2
OTVDOCAvKiBTeXN0ZW1NZW1vcnlJT1MuY3BwICovOyB9OworCQk0NEM5OTE5RjBGM0QyMTBFMDA1
ODY2NzAgLyogVGhlbWVJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0Qzk5MTlEMEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5oICovOyB9Owor
CQk0NEM5OTFBMDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEM5OTE5RTBGM0QyMTBFMDA1ODY2NzAg
LyogVGhlbWVJT1MubW0gKi87IH07CisJCUU0QzNCMUZBMEYwRTQxNjEwMDk2OTNGNiAvKiBUaWxl
Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
QzNCMUY5MEYwRTQxNjEwMDk2OTNGNiAvKiBUaWxlQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFNEMzQjFGQzBGMEU0MTcwMDA5NjkzRjYg
LyogVGlsZUNhY2hlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTRDM0IxRkIwRjBFNDE3MDAwOTY5M0Y2IC8qIFRpbGVDYWNoZS5tbSAqLzsgfTsKKwkJ
RTRCNjVBNTgxMzJGQThFNzAwNzBFN0JFIC8qIFRpbGVHcmlkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1NzEzMkZBOEU3MDA3MEU3QkUgLyog
VGlsZUdyaWQuaCAqLzsgfTsKKwkJRTRCNjVBNUExMzJGQUFGOTAwNzBFN0JFIC8qIFRpbGVHcmlk
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNjVB
NTkxMzJGQUFGOTAwNzBFN0JFIC8qIFRpbGVHcmlkLm1tICovOyB9OworCQlFNDI0QTM5RTEzMzBE
RjAxMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDI0QTM5RDEzMzBERjAxMDBDRjZEQzkgLyogVGlsZUdyaWRU
aWxlLmggKi87IH07CisJCUU0MjRBM0EwMTMzMERGMUUwMENGNkRDOSAvKiBUaWxlR3JpZFRpbGUu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDI0QTM5
RjEzMzBERjFFMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLm1tICovOyB9OworCQlFNEI2NUE1QzEz
MkZBQ0IwMDA3MEU3QkUgLyogVGlsZUxheWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1QjEzMkZBQ0IwMDA3MEU3QkUgLyogVGlsZUxheWVy
LmggKi87IH07CisJCUU0QjY1QTVFMTMyRkFEQjYwMDcwRTdCRSAvKiBUaWxlTGF5ZXIubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1RDEzMkZB
REI2MDA3MEU3QkUgLyogVGlsZUxheWVyLm1tICovOyB9OworCQlFNEUzOUFGQjEzMzBFRkE4MDAz
QUIyNzQgLyogVGlsZUxheWVyUG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTRFMzlBRkExMzMwRUZBODAwM0FCMjc0IC8qIFRpbGVMYXllclBvb2wu
aCAqLzsgfTsKKwkJRTRFMzlBRkQxMzMwRUZDNjAwM0FCMjc0IC8qIFRpbGVMYXllclBvb2wubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEUzOUFGQzEz
MzBFRkM1MDAzQUIyNzQgLyogVGlsZUxheWVyUG9vbC5tbSAqLzsgfTsKKwkJMzE0MDM3OUIxMjRC
RUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTQwMzc5NzEyNEJFQTdGMDBBRjQwRTQgLyog
V2ViQ29yZU1vdGlvbk1hbmFnZXIuaCAqLzsgfTsKKwkJMzE0MDM3OUMxMjRCRUE3RjAwQUY0MEU0
IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzE0MDM3OTgxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rp
b25NYW5hZ2VyLm1tICovOyB9OworCQk0NEMzQ0ZFODE1NTZCRTVEMDAwMTM2MDkgLyogV2ViQ29y
ZVN5c3RlbUludGVyZmFjZUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDRDM0NGRTcxNTU2QkU1RDAwMDEzNjA5IC8qIFdlYkNvcmVTeXN0ZW1JbnRl
cmZhY2VJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlFNDUzOTA0OTBFQUZENjM3MDAzNjk1QzggLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZUlP
Uy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5
MDM4MEVBRkQ2MzcwMDM2OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tICovOyB9
OworCQlGRTBEODRFOTEwNDg0MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ4NEU4MTA0ODQzNDgwMDFBMTc5
RSAvKiBXZWJFdmVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUZFMEQ4NEVCMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ4NEVBMTA0ODQzNkUw
MDFBMTc5RSAvKiBXZWJFdmVudC5tbSAqLzsgfTsKKwkJRTQ1MzkwNEQwRUFGRDYzNzAwMzY5NUM4
IC8qIFdpZGdldElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0NTM5MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gKi87IH07CisJ
CTBGOTdBNjU4MTU1REE4MUUwMEZBREQ0QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JpT1MubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk3QTY1NzE1
NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yaU9TLm1tICovOyB9OworCQkz
NzI3REZENTE0MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcyN0RGRDQxNDJBQUU0NTAwRDQ0OUNC
IC8qIEZvbnRDYWNoZUlPUy5tbSAqLzsgfTsKKwkJQzU4MzYxQTkxNzQ0NTIzRjAwMTczNTExIC8q
IEZvbnRTZXJ2aWNlc0lPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzU4MzYxQTcxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5oICov
OyB9OworCQlDNTgzNjFBQTE3NDQ1MjNGMDAxNzM1MTEgLyogRm9udFNlcnZpY2VzSU9TLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4MzYxQTgxNzQ0
NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5tbSAqLzsgfTsKKwkJMzFBQjUwMDAxMjI4
NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dDNESU9TLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUFCNEZGRjEyMjg3OEEyMDAxQTdEQjAgLyog
R3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLzsgfTsKKwkJRkVEMTNENDAwQ0VBOTM5NDAwRDg5NDY2
IC8qIEljb25JT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRUQxM0QzRjBDRUE5Mzk0MDBEODk0NjYgLyogSWNvbklPUy5tbSAqLzsgfTsKKwkJMDdF
RDM1QTMxNkQ2RENFMjAwMjI0OEYzIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MzU3Qzc2MTZE
MkRGMEQwMEVEOTlFNyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLmggKi87IH07CisJ
CTA3RUQzNUEyMTZENkRDQzkwMDIyNDhGMyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczNTdD
NzcxNkQyREYwRDAwRUQ5OUU3IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW0gKi87
IH07CisJCTA3NDMwMEE2MEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NDMwMEE0
MEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MuaCAqLzsgfTsKKwkJMDc0
MzAwQTUwRjRCOEJDRjAwODA3NkNEIC8qIE1lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NDMwMEEzMEY0QjhCQ0Yw
MDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MubW0gKi87IH07CisJCTM3RTY1OTUwMTYz
QjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBT
aW1wbGVGb250RGF0YUlPUy5tbSAqLzsgfTsKKwkJQ0RDQTgyOTYxNjc5MTAwRjAwODc1NzE0IC8q
IFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQTgyOTQxNjc5MTAwRjAwODc1NzE0IC8qIFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uSU9TLm1tICovOyB9OworCQlBNTE2RThCNzEzNkUwNERCMDA3NkMzQzAg
LyogTG9jYWxpemVkRGF0ZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTE2RThCNDEzNkUwNERCMDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNh
Y2hlLmggKi87IH07CisJCUE1MTZFOEI4MTM2RTA0REIwMDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRl
Q2FjaGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NTE2RThCNTEzNkUwNERCMDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLm1tICovOyB9Owor
CQlDRDU1OTY5MTE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9TLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTU5NjhGMTQ3NUI2
NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuY3BwICovOyB9OworCQlDRDU1OTY5MjE0
NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9TLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDU1OTY5MDE0NzVCNjc4MDAxRDBCRDAgLyog
QXVkaW9GaWxlUmVhZGVySU9TLmggKi87IH07CisJCTQ0QzM2M0YwMEZBQTdCQjMwMDk3RjhDQyAv
KiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QzM2M0VFMEZBQTdCQjMwMDk3RjhDQyAvKiBSdW50aW1l
QXBwbGljYXRpb25DaGVja3NJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk0NEMzNjNGMTBGQUE3QkIzMDA5N0Y4Q0MgLyogUnVudGltZUFwcGxp
Y2F0aW9uQ2hlY2tzSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDRDMzYzRUYwRkFBN0JCMzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNo
ZWNrc0lPUy5tbSAqLzsgfTsKKwkJNDQzRjA0MjcwRTc1QzhGQjAwN0U1NDA3IC8qIE5ldHdvcmtT
dGF0ZU5vdGlmaWVySU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0M0YwNDI2MEU3NUM4RkIwMDdFNTQwNyAvKiBOZXR3b3JrU3RhdGVOb3RpZmll
cklPUy5jcHAgKi87IH07CisJCTQ0MkFGN0E5MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MkFGN0E3
MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NDJBRjdBQTEwMkNEREVBMDA4RkQ0RDMgLyogUXVp
Y2tMb29rLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDQyQUY3QTgxMDJDRERFQTAwOEZENEQzIC8qIFF1aWNrTG9vay5tbSAqLzsgfTsKKwkJN0U0MjhD
RTUxM0UzNDA3RjAwM0I2NjFDIC8qIFJlc291cmNlSGFuZGxlSU9TLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0MjhDRTQxM0UzNDA3RjAwM0I2NjFD
IC8qIFJlc291cmNlSGFuZGxlSU9TLm1tICovOyB9OworCQk0NEEyMERCOTBGODQxNjZDMDBCM0Ux
RkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyMERCODBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVS
TFJlc3BvbnNlSU9TLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNDQ0RDRFMjMwRjcwOEIyRTAwMzE1OEUwIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlP
Uy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NEQ0
RTIxMEY3MDhCMkUwMDMxNThFMCAvKiBXZWJDb3JlVVJMUmVzcG9uc2VJT1MubW0gKi87IH07CisJ
CTdFNDc0RTIwMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0NzRFMUQxMjQ5
NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi87IH07CisJCTdFNDc0
RTFGMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNDc0RTFDMTI0OTREQzkwMDIz
NTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3RTQ3NEUxRTEyNDk0REM5MDAyMzUzNjQgLyogU1FM
aXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3RTQ3NEUxQjEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJh
c2VUcmFja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQ0VGNDE4Q0UxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFRjQx
OENDMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgKi87IH07CiAJCUNF
RjQxOENGMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VGNDE4Q0QxMTc5Njc4QzAwOUQx
MTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDAwMEVCQTIxMUJEQUZENDAwQzQ3NzI2IC8qIEZyYW1lTG9h
ZGVyU3RhdGVNYWNoaW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEQwMDBFQkEwMTFCREFGRDQwMEM0NzcyNiAvKiBGcmFtZUxvYWRlclN0YXRlTWFj
aGluZS5jcHAgKi87IH07CkBAIC0xMjY2NCw2ICsxMjczMSw3NCBAQAogCQlDRUNBREZDQzE1Mzc3
OTFEMDBFMzcwNjggLyogVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRUNDRkMzQTE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNj
YXBlU2VxdWVuY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY29kZUVz
Y2FwZVNlcXVlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRURBMTJENjE1
MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFsdGVybmF0aXZlVGV4dENsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyOTAzNzE2NDE2QkExMUJDMDBGRUZERjAgLyogQ29udGVudEZpbHRl
cklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IENvbnRlbnRG
aWx0ZXJJT1MubW07IHBhdGggPSBpb3MvQ29udGVudEZpbHRlcklPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzFFQUY5N0MxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlv
bkNsaWVudElPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEZXZpY2VNb3Rp
b25DbGllbnRJT1MuaDsgcGF0aCA9IGlvcy9EZXZpY2VNb3Rpb25DbGllbnRJT1MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFFQUY5N0QxMjE0MzVBNDAwRTdDMUJGIC8qIERldmlj
ZU1vdGlvbkNsaWVudElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IERldmljZU1vdGlvbkNsaWVudElPUy5tbTsgcGF0aCA9IGlvcy9EZXZpY2VNb3Rpb25DbGll
bnRJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNDAzNzk5MTI0QkVBN0Yw
MEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oOyBwYXRoID0gaW9z
L0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxNDAzNzlBMTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElP
Uy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IERldmljZU9yaWVu
dGF0aW9uQ2xpZW50SU9TLm1tOyBwYXRoID0gaW9zL0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9T
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxRjY4RDRBRDE0QkI5RENBMDA3QjVD
NjIgLyogTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tOyBwYXRoID0gaW9z
L01lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTQ1MzkwMTgwRUFGQ0FDQTAwMzY5NUM4IC8qIE1JTUVUeXBlUmVnaXN0cnlJT1MubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNSU1FVHlwZVJlZ2lzdHJ5SU9T
Lm1tOyBwYXRoID0gaW9zL01JTUVUeXBlUmVnaXN0cnlJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTI2NjAxRUJEMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFj
dG9yeUlPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybUV2ZW50
RmFjdG9yeUlPUy5oOyBwYXRoID0gaW9zL1BsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2NjAxRUJFMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0
Zm9ybUV2ZW50RmFjdG9yeUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tOyBwYXRoID0gaW9zL1BsYXRmb3JtRXZl
bnRGYWN0b3J5SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDUzOTAzMjBF
QUZENjM3MDAzNjk1QzggLyogUGxhdGZvcm1TY3JlZW5JT1MubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbGF0Zm9ybVNjcmVlbklPUy5tbTsgcGF0aCA9IGlvcy9Q
bGF0Zm9ybVNjcmVlbklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUFFMzc1
NUQxNzQyOUJDQzAwNjIwMEMyIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVySU9TLm1tOyBwYXRoID0gaW9zL1BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMTc3NDdFMTM3OEI3NzEwMDlEQTc2QSAv
KiBTY3JvbGxBbmltYXRvcklPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBT
Y3JvbGxBbmltYXRvcklPUy5oOyBwYXRoID0gaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMTc3NDdGMTM3OEI3NzIwMDlEQTc2QSAvKiBTY3Jv
bGxBbmltYXRvcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IFNjcm9sbEFuaW1hdG9ySU9TLm1tOyBwYXRoID0gaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEM5OTE4NTBGM0QxRUJFMDA1ODY2NzAgLyog
U2Nyb2xsYmFyVGhlbWVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2Ny
b2xsYmFyVGhlbWVJT1MuaDsgcGF0aCA9IGlvcy9TY3JvbGxiYXJUaGVtZUlPUy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0NEM5OTE4MTBGM0QxRTBEMDA1ODY2NzAgLyogU2Nyb2xs
YmFyVGhlbWVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBT
Y3JvbGxiYXJUaGVtZUlPUy5tbTsgcGF0aCA9IGlvcy9TY3JvbGxiYXJUaGVtZUlPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ1MzkwMzQwRUFGRDYzNzAwMzY5NUM4IC8qIFNj
cm9sbFZpZXdJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBT
Y3JvbGxWaWV3SU9TLm1tOyBwYXRoID0gaW9zL1Njcm9sbFZpZXdJT1MubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJFQTgwN0M2MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25S
ZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNlbGVjdGlvblJl
Y3QuY3BwOyBwYXRoID0gaW9zL1NlbGVjdGlvblJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCRUE4MDdDNzBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVjdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTZWxlY3Rpb25SZWN0Lmg7IHBhdGggPSBp
b3MvU2VsZWN0aW9uUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDUzOTAz
NjBFQUZENjM3MDAzNjk1QzggLyogU291bmRJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBTb3VuZElPUy5tbTsgcGF0aCA9IGlvcy9Tb3VuZElPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDQ3NjUzMUExMzMxNzA5OTAwMDZCNzg5IC8qIFNT
TEtleUdlbmVyYXRvcklPUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBTU0xLZXlHZW5lcmF0b3JJT1MuY3BwOyBwYXRoID0gaW9zL1NTTEtleUdlbmVyYXRvcklPUy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NTM5MEFEMEVBRkY0QjUwMDM2OTVD
OCAvKiBTeXN0ZW1NZW1vcnlJT1MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gU3lzdGVtTWVtb3J5SU9TLmNwcDsgcGF0aCA9IGlvcy9TeXN0ZW1NZW1vcnlJT1MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAg
LyogVGhlbWVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGhlbWVJT1Mu
aDsgcGF0aCA9IGlvcy9UaGVtZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
NEM5OTE5RTBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUaGVtZUlPUy5tbTsgcGF0aCA9IGlvcy9UaGVtZUlPUy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRDM0IxRjkwRjBFNDE2MTAwOTY5M0Y2
IC8qIFRpbGVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUaWxlQ2Fj
aGUuaDsgcGF0aCA9IGlvcy9UaWxlQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTRDM0IxRkIwRjBFNDE3MDAwOTY5M0Y2IC8qIFRpbGVDYWNoZS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFRpbGVDYWNoZS5tbTsgcGF0aCA9IGlvcy9UaWxl
Q2FjaGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QjY1QTU3MTMyRkE4RTcw
MDcwRTdCRSAvKiBUaWxlR3JpZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBU
aWxlR3JpZC5oOyBwYXRoID0gaW9zL1RpbGVHcmlkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUU0QjY1QTU5MTMyRkFBRjkwMDcwRTdCRSAvKiBUaWxlR3JpZC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFRpbGVHcmlkLm1tOyBwYXRoID0gaW9zL1Rp
bGVHcmlkLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDI0QTM5RDEzMzBERjAx
MDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFRpbGVHcmlkVGlsZS5oOyBwYXRoID0gaW9zL1RpbGVHcmlkVGlsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFNDI0QTM5RjEzMzBERjFFMDBDRjZEQzkgLyogVGlsZUdyaWRU
aWxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gVGlsZUdyaWRU
aWxlLm1tOyBwYXRoID0gaW9zL1RpbGVHcmlkVGlsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTRCNjVBNUIxMzJGQUNCMDAwNzBFN0JFIC8qIFRpbGVMYXllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUaWxlTGF5ZXIuaDsgcGF0aCA9IGlvcy9UaWxlTGF5
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRCNjVBNUQxMzJGQURCNjAwNzBF
N0JFIC8qIFRpbGVMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IFRpbGVMYXllci5tbTsgcGF0aCA9IGlvcy9UaWxlTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUU0RTM5QUZBMTMzMEVGQTgwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29s
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRpbGVMYXllclBvb2wuaDsgcGF0
aCA9IGlvcy9UaWxlTGF5ZXJQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0
RTM5QUZDMTMzMEVGQzUwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29sLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gVGlsZUxheWVyUG9vbC5tbTsgcGF0aCA9IGlvcy9U
aWxlTGF5ZXJQb29sLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTQwMzc5NzEy
NEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViQ29yZU1vdGlvbk1hbmFnZXIuaDsgcGF0aCA9IGlvcy9XZWJD
b3JlTW90aW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTQwMzc5
ODEyNEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJDb3JlTW90aW9uTWFuYWdlci5tbTsgcGF0
aCA9IGlvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDRDM0NGRTcxNTU2QkU1RDAwMDEzNjA5IC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJ
T1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQ29yZVN5c3RlbUludGVy
ZmFjZUlPUy5oOyBwYXRoID0gaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ1MzkwMzgwRUFGRDYzNzAwMzY5NUM4IC8qIFdlYkNv
cmVTeXN0ZW1JbnRlcmZhY2VJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tOyBwYXRoID0gaW9zL1dlYkNvcmVT
eXN0ZW1JbnRlcmZhY2VJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMEQ4
NEU4MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJFdmVudC5oOyBwYXRoID0gaW9zL1dlYkV2ZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYkV2ZW50Lm1tOyBw
YXRoID0gaW9zL1dlYkV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDUz
OTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gV2lkZ2V0SU9TLm1tOyBwYXRoID0gaW9zL1dpZGdldElPUy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5N0E2NTcxNTVEQTgxRTAwRkFERDRD
IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcmlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IERpc3BsYXlSZWZyZXNoTW9uaXRvcmlPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzcyN0RGRDQxNDJBQUU0NTAwRDQ0OUNCIC8qIEZvbnRDYWNoZUlP
Uy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZvbnRDYWNoZUlP
Uy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU4MzYxQTcxNzQ0NTIzRjAwMTcz
NTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGb250U2VydmljZXNJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU4MzYx
QTgxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZvbnRTZXJ2aWNlc0lPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzFBQjRGRkYxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29u
dGV4dDNESU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29u
dGV4dDNESU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFRDEzRDNGMENFQTkz
OTQwMEQ4OTQ2NiAvKiBJY29uSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gSWNvbklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDczNTdD
NzYxNkQyREYwRDAwRUQ5OUU3IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklP
Uy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzM1N0M3NzE2RDJERjBEMDBFRDk5
RTcgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3NDMwMEE0MEY0QjhCQ0YwMDgwNzZDRCAvKiBN
ZWRpYVBsYXllclByaXZhdGVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWVkaWFQbGF5ZXJQcml2YXRlSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3
NDMwMEEzMEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZWRpYVBsYXllclByaXZhdGVJT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3
NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDRUVDNjAzNDE4N0REOTYyMDAzRTQzQkIgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25J
T1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25JT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDQTgyOTQxNjc5MTAw
RjAwODc1NzE0IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1MTZFOEI0MTM2RTA0REIwMDc2QzNDMCAv
KiBMb2NhbGl6ZWREYXRlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TG9jYWxpemVkRGF0ZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1MTZF
OEI1MTM2RTA0REIwMDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbGl6ZWREYXRlQ2FjaGUubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNENTU5NjhGMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRp
b0ZpbGVSZWFkZXJJT1MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QXVkaW9GaWxlUmVhZGVySU9TLmNwcDsgcGF0aCA9IGlvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDU1OTY5MDE0NzVCNjc4MDAxRDBCRDAg
LyogQXVkaW9GaWxlUmVhZGVySU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEF1ZGlvRmlsZVJlYWRlcklPUy5oOyBwYXRoID0gaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEMzNjNFRTBGQUE3QkIzMDA5N0Y4Q0MgLyog
UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0NEMzNjNFRjBGQUE3QkIzMDA5N0Y4Q0MgLyogUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0NDNGMDQyNjBFNzVDOEZCMDA3RTU0MDcgLyogTmV0d29ya1N0YXRlTm90aWZpZXJJT1MuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya1N0YXRlTm90aWZp
ZXJJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDJBRjdBNzEwMkNEREVB
MDA4RkQ0RDMgLyogUXVpY2tMb29rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFF1aWNrTG9vay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDJBRjdBODEwMkNE
REVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gUXVpY2tMb29rLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
RTQyOENFNDEzRTM0MDdGMDAzQjY2MUMgLyogUmVzb3VyY2VIYW5kbGVJT1MubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXNvdXJjZUhhbmRsZUlPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDRBMjBEQjgwRjg0MTY2QzAwQjNFMUZFIC8qIFdl
YkNvcmVVUkxSZXNwb25zZUlPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJDb3JlVVJMUmVzcG9uc2VJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDQ0
RDRFMjEwRjcwOEIyRTAwMzE1OEUwIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZUlPUy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0U0NzRFMUQxMjQ5NERDOTAwMjM1MzY0
IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3RTQ3NEUxQzEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFj
a2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTGl0ZURhdGFiYXNlVHJh
Y2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3RTQ3NEUxQjEyNDk0REM5MDAy
MzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRUY0MThDQzExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRB
cmd1bWVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3Bv
cnRBcmd1bWVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUY0MThDRDEx
Nzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmlld3BvcnRBcmd1bWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRDAwMEVCQTAxMUJEQUZENDAwQzQ3NzI2IC8qIEZyYW1lTG9hZGVyU3RhdGVNYWNo
aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lTG9hZGVy
U3RhdGVNYWNoaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MzE0LDYg
KzE0NDQ5LDcgQEAKIAkJMUEyRTZFNTYwQ0M1NTFFMDAwNEEyMDYyIC8qIHNxbCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0U0NzRFMTkxMjQ5NERBOTAw
MjM1MzY0IC8qIGlvcyAqLywKIAkJCQkxQTJFNkU3ODBDQzU1NkQ1MDA0QTIwNjIgLyogU1FMaXRl
QXV0aG9yaXplci5jcHAgKi8sCiAJCQkJMUEyMjQ2NDMwQ0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0
ZURhdGFiYXNlLmNwcCAqLywKIAkJCQkxQTIyNDY0NDBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRl
RGF0YWJhc2UuaCAqLywKQEAgLTE1NTc3LDYgKzE1NzEzLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjJGMzRGRTcwRTgyRjgxNzAwRjYyN0NEIC8qIGNmICov
LAorCQkJCTQ0OTdENThDMEVCQTg1NEYwMEExMDU1MiAvKiBpb3MgKi8sCiAJCQkJNjU2Qjg0RTcw
QUVBMURBRTAwQTA5NUI0IC8qIG1hYyAqLywKIAkJCQk5MzRGNzEzNzBENUE2RUZGMDAwMThENjkg
LyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmNwcCAqLywKIAkJCQk5MzRGNzEzOTBENUE2
RjEwMDAwMThENjkgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmggKi8sCkBAIC0xNzU3
MSwxNyArMTc3MDgsNTkgQEAKIAkJQTU5RTNDMUIxMTU4MEYzNDAwNzI5MjhFIC8qIGlvcyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMjkwMzcxNjQxNkJB
MTFCQzAwRkVGREYwIC8qIENvbnRlbnRGaWx0ZXJJT1MubW0gKi8sCiAJCQkJMjY1NTQxNEIxNDg5
QUEyQjAwMERGQzVEIC8qIEN1cnNvcklPUy5jcHAgKi8sCisJCQkJMzFFQUY5N0MxMjE0MzVBNDAw
RTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElPUy5oICovLAorCQkJCTMxRUFGOTdEMTIxNDM1
QTQwMEU3QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGllbnRJT1MubW0gKi8sCisJCQkJMzE0MDM3OTkx
MjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmggKi8sCisJCQkJ
MzE0MDM3OUExMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1t
ICovLAogCQkJCTI2RjQwRDQ5MTQ5MDRBNjMwMENBNjdDNCAvKiBFdmVudExvb3BJT1MubW0gKi8s
CiAJCQkJMjZDMTdBM0MxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCAqLywKIAkJ
CQkyNkMxN0EzRDE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSAqLywKIAkJCQky
NjU1NDEzNzE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5oICovLAogCQkJCTI2
NTU0MTM4MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudElPUy5tbSAqLywKKwkJCQkxRjY4RDRB
RDE0QkI5RENBMDA3QjVDNjIgLyogTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tICovLAorCQkJ
CUU0NTM5MDE4MEVBRkNBQ0EwMDM2OTVDOCAvKiBNSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tICovLAog
CQkJCUU0NTM5MDE5MEVBRkNBQ0EwMDM2OTVDOCAvKiBQYXN0ZWJvYXJkSU9TLm1tICovLAorCQkJ
CTI2NjAxRUJEMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oICov
LAorCQkJCTI2NjAxRUJFMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlP
Uy5tbSAqLywKIAkJCQlDNTI3OEIwQjE3RjIxMkVBMDAzQTI5OTggLyogUGxhdGZvcm1QYXN0ZWJv
YXJkSU9TLm1tICovLAorCQkJCUU0NTM5MDMyMEVBRkQ2MzcwMDM2OTVDOCAvKiBQbGF0Zm9ybVNj
cmVlbklPUy5tbSAqLywKKwkJCQlBQUUzNzU1RDE3NDI5QkNDMDA2MjAwQzIgLyogUGxhdGZvcm1T
cGVlY2hTeW50aGVzaXplcklPUy5tbSAqLywKKwkJCQk0NEMzNjNFRTBGQUE3QkIzMDA5N0Y4Q0Mg
LyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmggKi8sCisJCQkJNDRDMzYzRUYwRkFBN0JC
MzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5tbSAqLywKKwkJCQkwRjE3
NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCAqLywKKwkJCQkwRjE3
NzQ3RjEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MubW0gKi8sCisJCQkJNDRD
OTkxODUwRjNEMUVCRTAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLmggKi8sCisJCQkJNDRD
OTkxODEwRjNEMUUwRDAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLm1tICovLAorCQkJCUU0
NTM5MDM0MEVBRkQ2MzcwMDM2OTVDOCAvKiBTY3JvbGxWaWV3SU9TLm1tICovLAorCQkJCUJFQTgw
N0M2MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmNwcCAqLywKKwkJCQlCRUE4MDdD
NzBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVjdC5oICovLAogCQkJCUU0NTM5MDM1MEVB
RkQ2MzcwMDM2OTVDOCAvKiBTaGFyZWRUaW1lcklPUy5tbSAqLywKKwkJCQlFNDUzOTAzNjBFQUZE
NjM3MDAzNjk1QzggLyogU291bmRJT1MubW0gKi8sCisJCQkJNDQ3NjUzMUExMzMxNzA5OTAwMDZC
Nzg5IC8qIFNTTEtleUdlbmVyYXRvcklPUy5jcHAgKi8sCisJCQkJRTQ1MzkwQUQwRUFGRjRCNTAw
MzY5NUM4IC8qIFN5c3RlbU1lbW9yeUlPUy5jcHAgKi8sCisJCQkJNDRDOTkxOUQwRjNEMjEwRTAw
NTg2NjcwIC8qIFRoZW1lSU9TLmggKi8sCisJCQkJNDRDOTkxOUUwRjNEMjEwRTAwNTg2NjcwIC8q
IFRoZW1lSU9TLm1tICovLAorCQkJCUU0QzNCMUY5MEYwRTQxNjEwMDk2OTNGNiAvKiBUaWxlQ2Fj
aGUuaCAqLywKKwkJCQlFNEMzQjFGQjBGMEU0MTcwMDA5NjkzRjYgLyogVGlsZUNhY2hlLm1tICov
LAorCQkJCUU0QjY1QTU3MTMyRkE4RTcwMDcwRTdCRSAvKiBUaWxlR3JpZC5oICovLAorCQkJCUU0
QjY1QTU5MTMyRkFBRjkwMDcwRTdCRSAvKiBUaWxlR3JpZC5tbSAqLywKKwkJCQlFNDI0QTM5RDEz
MzBERjAxMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLmggKi8sCisJCQkJRTQyNEEzOUYxMzMwREYx
RTAwQ0Y2REM5IC8qIFRpbGVHcmlkVGlsZS5tbSAqLywKKwkJCQlFNEI2NUE1QjEzMkZBQ0IwMDA3
MEU3QkUgLyogVGlsZUxheWVyLmggKi8sCisJCQkJRTRCNjVBNUQxMzJGQURCNjAwNzBFN0JFIC8q
IFRpbGVMYXllci5tbSAqLywKKwkJCQlFNEUzOUFGQTEzMzBFRkE4MDAzQUIyNzQgLyogVGlsZUxh
eWVyUG9vbC5oICovLAorCQkJCUU0RTM5QUZDMTMzMEVGQzUwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQ
b29sLm1tICovLAorCQkJCTMxNDAzNzk3MTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9u
TWFuYWdlci5oICovLAorCQkJCTMxNDAzNzk4MTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90
aW9uTWFuYWdlci5tbSAqLywKKwkJCQk0NEMzQ0ZFNzE1NTZCRTVEMDAwMTM2MDkgLyogV2ViQ29y
ZVN5c3RlbUludGVyZmFjZUlPUy5oICovLAorCQkJCUU0NTM5MDM4MEVBRkQ2MzcwMDM2OTVDOCAv
KiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tICovLAorCQkJCUZFMEQ4NEU4MTA0ODQzNDgw
MDFBMTc5RSAvKiBXZWJFdmVudC5oICovLAorCQkJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAv
KiBXZWJFdmVudC5tbSAqLywKIAkJCQlBNTAyQzVERDEzMDQ5QjM1MDBGQzdENTMgLyogV2ViU2Fm
ZUdDQWN0aXZpdHlDYWxsYmFja0lPUy5oICovLAogCQkJCUMyQzRDQjFEMTYxQTEzMTIwMEQyMTRE
QSAvKiBXZWJTYWZlSW5jcmVtZW50YWxTd2VlcGVySU9TLmggKi8sCisJCQkJRTQ1MzkwM0MwRUFG
RDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gaW9zOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE5NDA2LDYgKzE5NTg1LDcgQEAKIAkJCQk5
MzMyQUIzQjE2NTE1RDc3MDBEODI3RUMgLyogY3B1ICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAw
MDdGMjQ4MSAvKiBmaWx0ZXJzICovLAogCQkJCTQ5ODc3MEMxMTI0MkM1MEQwMDIyMjZCQSAvKiBn
cHUgKi8sCisJCQkJNDQxQUYwQTcwRUJBN0JCRjAwNDRFRDRCIC8qIGlvcyAqLywKIAkJCQlCMjc1
MzU0OTBCMDUzODE0MDAyQ0U2NEYgLyogbWFjICovLAogCQkJCUZCQzIyMEREMTIzN0ZCRUIwMEJD
Rjc4OCAvKiBvcGVuZ2wgKi8sCiAJCQkJRjRFQUY0QUIxMEM3NDI2ODAwOTEwMEQzIC8qIG9wZW50
eXBlICovLApAQCAtMTk1ODAsNiArMTk3NjAsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlCMkIyNjQ1OTBEMDBBNzdFMDAwQUNDMUQgLyogY2YgKi8sCisJCQkJ
QTUxNkU4QjIxMzZFMDRDMDAwNzZDM0MwIC8qIGlvcyAqLywKIAkJCQlCMkMzRDlGOTBEMDA2QzFE
MDBFRjZGMjYgLyogbWFjICovLAogCQkJCTM3QzYxRjAwMTIwOTVDODcwMDdBM0M2NyAvKiBBdG9t
aWNTdHJpbmdLZXllZE1SVUNhY2hlLmggKi8sCiAJCQkJQjJDM0Q5RjIwRDAwNkMxRDAwRUY2RjI2
IC8qIEJpZGlDb250ZXh0LmNwcCAqLywKQEAgLTIwNDg0LDYgKzIwNjY1LDggQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCUNEMEVFRTBCMTQ3NDNFMzUwMDNFQUZBMiAvKiBBdWRpb0Rlc3RpbmF0aW9u
SU9TLmNwcCAqLywKIAkJCQlDRDBFRUUwQTE0NzQzRTM0MDAzRUFGQTIgLyogQXVkaW9EZXN0aW5h
dGlvbklPUy5oICovLAorCQkJCUNENTU5NjhGMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVS
ZWFkZXJJT1MuY3BwICovLAorCQkJCUNENTU5NjkwMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0Zp
bGVSZWFkZXJJT1MuaCAqLywKIAkJCQlDREE3OTgyNTE3MEEyNzkwMDBENDVDNTUgLyogQXVkaW9T
ZXNzaW9uSU9TLm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSBpb3M7CkBAIC0yMDU5OSw2ICsyMDc4
Miw1OSBAQAogCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07
CisJCTQ0MUFGMEE3MEVCQTdCQkYwMDQ0RUQ0QiAvKiBpb3MgKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBGOTdBNjU3MTU1REE4MUUwMEZBREQ0QyAvKiBE
aXNwbGF5UmVmcmVzaE1vbml0b3JpT1MubW0gKi8sCisJCQkJMzcyN0RGRDQxNDJBQUU0NTAwRDQ0
OUNCIC8qIEZvbnRDYWNoZUlPUy5tbSAqLywKKwkJCQlDNTgzNjFBNzE3NDQ1MjNGMDAxNzM1MTEg
LyogRm9udFNlcnZpY2VzSU9TLmggKi8sCisJCQkJQzU4MzYxQTgxNzQ0NTIzRjAwMTczNTExIC8q
IEZvbnRTZXJ2aWNlc0lPUy5tbSAqLywKKwkJCQkzMUFCNEZGRjEyMjg3OEEyMDAxQTdEQjAgLyog
R3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLywKKwkJCQlGRUQxM0QzRjBDRUE5Mzk0MDBEODk0NjYg
LyogSWNvbklPUy5tbSAqLywKKwkJCQkwNzM1N0M3NjE2RDJERjBEMDBFRDk5RTcgLyogSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5oICovLAorCQkJCTA3MzU3Qzc3MTZEMkRGMEQwMEVEOTlF
NyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLm1tICovLAorCQkJCTA3NDMwMEE0MEY0
QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MuaCAqLywKKwkJCQkwNzQzMDBB
MzBGNEI4QkNGMDA4MDc2Q0QgLyogTWVkaWFQbGF5ZXJQcml2YXRlSU9TLm1tICovLAorCQkJCTM3
RTY1OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSAqLywKKwkJCQlD
RUVDNjAzNDE4N0REOTYyMDAzRTQzQkIgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaCAq
LywKKwkJCQlDRENBODI5NDE2NzkxMDBGMDA4NzU3MTQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25JT1MubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IGlvczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CisJCUE1MTZFOEIyMTM2RTA0QzAwMDc2QzNDMCAvKiBpb3MgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUE1MTZFOEI0MTM2RTA0REIw
MDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUuaCAqLywKKwkJCQlBNTE2RThCNTEzNkUwNERC
MDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBp
b3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk0NDk3RDU4QzBFQkE4NTRG
MDBBMTA1NTIgLyogaW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQk0NDNGMDQyNjBFNzVDOEZCMDA3RTU0MDcgLyogTmV0d29ya1N0YXRlTm90aWZpZXJJ
T1MuY3BwICovLAorCQkJCTQ0MkFGN0E3MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2suaCAq
LywKKwkJCQk0NDJBRjdBODEwMkNEREVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLm1tICovLAorCQkJ
CTdFNDI4Q0U0MTNFMzQwN0YwMDNCNjYxQyAvKiBSZXNvdXJjZUhhbmRsZUlPUy5tbSAqLywKKwkJ
CQk0NEEyMERCODBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggKi8s
CisJCQkJNDQ0RDRFMjEwRjcwOEIyRTAwMzE1OEUwIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5t
bSAqLywKKwkJCSk7CisJCQlwYXRoID0gaW9zOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKKwkJN0U0NzRFMTkxMjQ5NERBOTAwMjM1MzY0IC8qIGlvcyAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJN0U0NzRFMUQxMjQ5NERDOTAwMjM1MzY0
IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8sCisJCQkJN0U0NzRFMUMxMjQ5NERDOTAw
MjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5oICovLAorCQkJCTdFNDc0RTFCMTI0OTRE
QzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLywKKwkJCSk7CisJ
CQluYW1lID0gaW9zOworCQkJcGF0aCA9IHNxbC9pb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OwogCQlERjlBRkQ2RjEzRkMzMUIwMDAxNUZFQjcgLyogb2JqYyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMjI4Myw2ICsyMjUxOSw3IEBA
CiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAwRDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UwOEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFN0IyREIzMTU4NkFCQUQw
MDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZFMEQ4NEU5MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkQzMTYwM0UxMkIwMjY3NjAwQzFBMzU5IC8qIEFuYWx5c2VyTm9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0RFM0E4NTgxN0Y2MDIwNDAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRl
QVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDkwNzA3RTcxMjE5QzA0MzAwRDkwRTUxIC8q
IEFOR0xFV2ViS2l0QnJpZGdlLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNDI0LDYgKzIyNjYxLDcg
QEAKIAkJCQlCQ0IxNkMxQzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkSW1hZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxOUZCRDVGMTVEMkY0NjQwMDk2NDBBNiAvKiBDYWNoZWRJbWFnZUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwMTg0NjkwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hl
ZFBhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0MjRBMzlFMTMzMERGMDEwMENGNkRDOSAvKiBU
aWxlR3JpZFRpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUQwRURBNzc1MTQzRTMwM0MwMDI4RTM4
MyAvKiBDYWNoZWRSYXdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCNTMzNDkxNzE3
REVFMzAwRjIwNUY5IC8qIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0IxNkMyMDA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2UuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjI2MTcsNiArMjI4NTUsNyBAQAogCQkJCTA3OEUwOTE0MTdEMTREMUMwMDQy
MEFBMSAvKiBNZWRpYUNvbnN0cmFpbnRzSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZD
RTkwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTQ5QkQ5RkExMzFGRDJFRDAwM0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTRCNjVBNTgxMzJGQThFNzAwNzBFN0JFIC8qIFRpbGVHcmlkLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5MDAxRTlBQkMgLyogQ3Vyc29yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzIyNzJBMjBFODJFODdDMDBFN0Y5NzUgLyogQ3Vyc29yRGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODY4MTYwRDYxODc2NkExMzAwMjFFNzlEIC8qIFVzZXJBY3Rpdml0eS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yMzA1Nyw2ICsyMzI5Niw3IEBACiAJCQkJODU1MjZDRDIwQUIwQjdE
OTAwMDMwMkVBIC8qIERPTVRyZWVXYWxrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MEI0MUMz
MEFEOUU3RTcwMEE2RUQ0RiAvKiBET01UcmVlV2Fsa2VySW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg1QzdGNDkxMEFBRjc5REMwMDQwMTRERCAvKiBET01VSUV2ZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk0NEM5OTE5RjBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg1OTg5REQwMEFDQzhCQkQwMEEwQkM1MSAvKiBET01VSUV2ZW50SW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFMzdERkRCMTJEQkFGQjgwMEE2QjIzMyAvKiBET01V
UkwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE1Qzc3MEE2MTAwRDQxQ0QwMDVCQTI2NyAvKiBET01W
YWxpZGl0eVN0YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTIzMjI1LDYgKzIzNDY1LDcgQEAKIAkJ
CQk4NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwOEM5MjUxQTBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMTMxM0Y2NjE0NDNCMzVGMDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTQ0QzNDRkU4MTU1NkJFNUQwMDAxMzYwOSAvKiBXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlSU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI2RTE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI3
MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzcyQzAwRDkxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAq
LywKQEAgLTIzMzEyLDYgKzIzNTUzLDcgQEAKIAkJCQkwODczQjg2QjEzNjA2NEVBMDBBNTIyQzIg
LyogR2x5cGhQYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE2RTBEMDA2Q0Q2MDBFRjZG
MjYgLyogR2x5cGhQYWdlVHJlZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTNDNUY1MERB
NTZCOTIwMDIxRUI1RCAvKiBHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0U0NzRFMUUx
MjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjIyMjc5NjQwRDAwQkYyMjAwNzFCNzgyIC8qIEdyYWRpZW50QXR0cmlidXRl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBo
aWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3
IC8qIEdyYXBoaWNzQ29udGV4dDNELmggaW4gSGVhZGVycyAqLywKQEAgLTIzNDI4LDYgKzIzNjcw
LDcgQEAKIAkJCQlBODEzNjlEQzA5NzM3NEY2MDBENzQ0NjMgLyogSFRNTE9wdGlvbkVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTM2OURBMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MT3B0
aW9uc0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRBRDAxMDA5MTI3RTY0MkEwMDE1
MDM1RiAvKiBIVE1MT3V0cHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDRDMzYzRjAw
RkFBN0JCMzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTFENzE5RjgxODExMDZFMDAwMTZEQzUxIC8qIEluZGV4ZWREQi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThFQTdDQjUwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxQYXJhZ3JhcGhF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcxRDQ1ODBBMTI3Q0JDMDBCMTJBNjggLyog
SFRNTFBhcmFtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzUxNSw2ICsyMzc1OCw3IEBA
CiAJCQkJQkM3RjQ0QTgwQjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJENUE1OTMxMTUyNTI1RDAwMDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTI5MUU0QjEzNDE3MkM4MDBFNzUzREUgLyogSW1hZ2VS
ZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEMzQjFGQTBGMEU0MTYxMDA5Njkz
RjYgLyogVGlsZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjc1MzU3MTBCMDUzODE0MDAy
Q0U2NEYgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCMzQ4MDk0MEVFRjUw
RDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZGRTEx
ODBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLApA
QCAtMjM1ODYsNiArMjM4MzAsNyBAQAogCQkJCTdBRjExQTVBMTJFNzI3NDkwMDYxRjIzQyAvKiBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgyQUIxNzc0MTI1Qzgy
NjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
Mjg4OUI0RDEzQzYyMzkyMDA5QTYxNTYgLyogSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzMUVBRjk3RTEyMTQzNUE0MDBFN0MxQkYgLyogRGV2aWNlTW90aW9u
Q2xpZW50SU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTQxMzNBODEwMkUwMEU4MDAwNzVEMDAg
LyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc4REEyMEYx
NTIwRUJBMzAwNjE0MUMxIC8qIEluc3BlY3RvcldlYlR5cGVCdWlsZGVycy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRjM4MTBDMUMxMzY1QTQ5NjAwRUQ2RTMzIC8qIEluc3BlY3RvcldvcmtlckFnZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTIzNjQ1LDYgKzIzODkwLDcgQEAKIAkJCQk5NzVDQTJBMjEz
MDM2NzlEMDBFOTlBRDkgLyogSlNDcnlwdG8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDZDMUZC
MEMwRERDOEYwMDIwQ0ZDMyAvKiBKU0NTU0NoYXJzZXRSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MDlFQkRDMzE2QjdGM0E2MDBDQkEzRkMgLyogSlNDU1NGb250RmFjZUxvYWRFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJN0U0NzRFMUYxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFi
YXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0NkMxRkQwQzBEREM4RjAwMjBDRkMz
IC8qIEpTQ1NTRm9udEZhY2VSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQ2QzFGRjBDMERE
QzhGMDAyMENGQzMgLyogSlNDU1NJbXBvcnRSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQ2
QzIwMTBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NNZWRpYVJ1bGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMjM2NzEsNiArMjM5MTcsNyBAQAogCQkJCTMxRkIxQTY2MTIwQTVEM0YwMERDMDJBMCAvKiBK
U0RldmljZU1vdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1OUE4NjAwODExOURBRkEx
MDBERUYxRUYgLyogSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0U0Mzg5QzE0MEIxQkE4MDA1RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAq
LywKKwkJCQk0NEM5OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCBp
biBIZWFkZXJzICovLAogCQkJCUU0QUU3QzFBMTdEMjMyMzUwMDA5RkIzMSAvKiBFbGVtZW50QW5j
ZXN0b3JJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE0NkZFNzUxODQ0MjM3MDAwMUE5
MzdDIC8qIEpTT0VTVGV4dHVyZUZsb2F0TGluZWFyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTlE
REM4MzA5RTE5OEJBMDAxQkYzQzYgLyogSlNEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MzY5MSw2ICsyMzkzOCw3IEBACiAJCQkJRTE5QUMzRjMxODI0REM3OTAwMzQ5NDI2IC8qIENyeXB0
b0FsZ29yaXRobVNIQTM4NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkI5MTM5MkExNkFFNEZDMDAw
MUZFNjgyIC8qIEpTRE9NUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlEMjQ3RkYwRDc1N0U2
OTAwRkRGOTU5IC8qIEpTRE9NUGx1Z2luLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTQwMzc5QjEy
NEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE5RDI0ODAxMEQ3NTdFNjkwMEZERjk1OSAvKiBKU0RPTVBsdWdpbkFycmF5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTk3MjcxNjE4MjA1NDlFMDA1OTJENTEgLyogQ3J5cHRvS2V5VHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1QTg2QjYwQzMzNjdFODAwRUVBNjQ5IC8qIEpTRE9NU2Vs
ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTIzNzE5LDYgKzIzOTY3LDcgQEAKIAkJCQkzMzE0
QUNFQzEwODkyMDg2MDAwRjBFNTYgLyogSlNFeGNlcHRpb25CYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk2RUJGMEU3NzEyQTk4Njg4MDBEQjE3MEEgLyogSlNFWFREcmF3QnVmZmVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzcyODY5ODQxNEZEOUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEUzOUFGQjEzMzBFRkE4MDAz
QUIyNzQgLyogVGlsZUxheWVyUG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMEYwMTUwRTBB
MTg5NTAwRkQwNEUzIC8qIEpTRmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkUzQkMwQ0IxMTdE
M0UwODAwQjk0MDlBIC8qIEpTRmlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTg3ODVG
MTEyMkUxRTg3MDAzQUFCREEgLyogSlNGaWxlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKQEAg
LTIzNzMzLDYgKzIzOTgyLDcgQEAKIAkJCQlGRTgwREE2NjBFOUM0NzAzMDAwRDZGNzUgLyogSlNH
ZW9wb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc5NjlEQUMxN0QxNDE1MTAwN0ZGODQy
IC8qIEpTUlRDRGF0YUNoYW5uZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0ODJCNzUyMTE5OENC
NkIwMEJGQjAwNSAvKiBKU0hhc2hDaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkVB
ODA3QzkwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDOTREMTRGMEMyNzVDNjgwMDZCQzYxNyAvKiBKU0hpc3RvcnkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDOTdFNDEzMTA5MTU0RkEwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTRBMkRGMDBBMUI4NTJBMDBDODA3RjggLyogSlNIVE1MQW5j
aG9yRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzc5MSw2ICsyNDA0MSw3IEBACiAJCQkJ
MUE4NUIxRUIwQTFCMjQwNTAwRDhDODdDIC8qIEpTSFRNTE9MaXN0RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTgwRTdFOUIwQTFBODNFMzAwN0ZCOEM1IC8qIEpTSFRNTE9wdEdyb3VwRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTdFOTkwQTFBODNFMzAwN0ZCOEM1IC8qIEpT
SFRNTE9wdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUM1ODM2MUE5MTc0NDUyM0Yw
MDE3MzUxMSAvKiBGb250U2VydmljZXNJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0OEEyOUJG
MEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNEFEMDE3M0QxMjdFODI4NjAwMTUwMzVGIC8qIEpTSFRNTE91dHB1dEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTJBQkE3MEExQ0U5MDUwMEI0MkIyNSAvKiBKU0hUTUxQ
YXJhZ3JhcGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzODQxLDYgKzI0MDkyLDcgQEAK
IAkJCQk5MzVGNDU0MzBGN0MzQjVGMDBEN0MxRkIgLyogSlNMYXp5RXZlbnRMaXN0ZW5lci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNFMUM0M0MwRDk4MzBEMzAwM0IwMkYyIC8qIEpTTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUZEMjNBMTI2MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjY2MDFFQkYxNEIz
QjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDQ2MTQxOTBDRDY4MjY5MDBGQURBNzUgLyogSlNNZWRpYUVycm9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzNDMzlCNzBDMEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUQzQTk0QTQ3MTIyREM0MEYwMEEzN0JCQyAvKiBKU01lZGlhUXVlcnlM
aXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI0MTE2LDYgKzI0MzY4LDcgQEAKIAkJCQk2RTNGQUQz
OTE0NzMzRjQwMDBFNDIzMDYgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkVFOEE3NzMxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyQ0JGNEUxNDBGMUFCRDAwMzg3OUJF
IC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3NDMwMEE2MEY0
QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTZFM0ZBRDM5MTQ3MzNGNDAxMUU0MjMwNyAvKiBKU1dlYkdMRGVidWdSZW5kZXJlckluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTZFM0ZBRDM5MTQ3MzNGNDAyMkU0MjMwNyAvKiBKU1dlYkdM
RGVidWdTaGFkZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTNGQUQzOTE0NzMzRjQwMDBFNDIz
MDcgLyogSlNXZWJHTERlcHRoVGV4dHVyZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDEyOCw2ICsy
NDM4MSw3IEBACiAJCQkJNTFDOTYxMUIxODNEMkI4MDAwRDIwMDJFIC8qIElEQkRhdGFiYXNlTWV0
YWRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUEwN0QzMzU2MTUyQjYzMEUwMDFCNjM5MyAvKiBK
U1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlB
NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFRleHR1cmUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxNDAzNzlEMTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5MTUxN0QxNEQxQzAwNDIwQUExIC8qIE1lZGlhU3Ry
ZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQzQ1MzQyODEwQ0RCQkZBMDA4NjkxNTcgLyogSlNX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzdFRjYyRjQxMkY5REI3
NDAwQzc3QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNDM4OCw2ICsyNDY0Miw3IEBACiAJCQkJOTM3N0FCQTAxNURFRkVFRjAwMzFGRDA0IC8q
IFBhZ2luYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTA4ODUwNjdGMTFEQTA0NUIwMDE4MkI5
OCAvKiBQYWludEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTA4ODUwNjgwMTFEQTA0NUIwMDE4
MkI5OCAvKiBQYWludFBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwN0VEMzVBMzE2RDZEQ0Uy
MDAyMjQ4RjMgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTgwRTZDRkIwQTE5ODlDQTAwN0ZCOEM1IC8qIFBhaXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZEMzE2MEEzMTJCMDI2RjcwMEMxQTM1OSAvKiBQYW5uZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZEMzE2MDFBMTJCMDI2NzYwMEMxQTM1OSAvKiBQYW5uZXJOb2RlLmggaW4gSGVhZGVycyAq
LywKQEAgLTI0NjAzLDYgKzI0ODU4LDcgQEAKIAkJCQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0Ig
LyogUmVuZGVyU1ZHRWxsaXBzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDNDMDkyQkMxMkQ5RTRF
RTAwQTk4OUMzIC8qIFJlbmRlclNWR0ZvcmVpZ25PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQzNjcwOEM1MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxQUI1MDAwMTIyODc4QTIwMDFBN0RCMCAvKiBHcmFwaGljc0NvbnRl
eHQzRElPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4QzcxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4Qzkx
MkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0ltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
ODU0QjAxNTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVycyAq
LywKQEAgLTI0NjExLDYgKzI0ODY3LDcgQEAKIAkJCQlDRDNBNDk2MjE3QTlEMDFCMDAyNzRFNDIg
LyogU291cmNlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhDQjEyRDlDQTRCMDAw
NDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0ODk0
NEEzMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjE3NzQ4MDEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEREYxQUQ3MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRo
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTBCQjU4NTE0ODRFM0E3MDBCMkU4N0EgLyogUmVuZGVy
U1ZHUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4Q0QxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NzkzLDYgKzI1MDUwLDcg
QEAKIAkJCQlFMUI3ODM5QzE2Mzc0MEE3MDAwN0I2OTIgLyogU2hhcmVkV29ya2VyU3RyYXRlZ3ku
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxRDE2OEVFMTAyMjZFODkwMDlCQzgyNyAvKiBTaGFyZWRX
b3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTY1MEQwMDZDRDYwMEVGNkYy
NiAvKiBTaW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRCNjVBNUMxMzJGQUNC
MDAwNzBFN0JFIC8qIFRpbGVMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVBMUVBN0QxNTJC
Q0YwODAwNEQwMEI2IC8qIFNpbXBsaWZ5TWFya3VwQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzE3NDFBQUQxNjYzNjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkQwMEQ3QTUxNEEzRjYxOTAwNzM0MDExIC8qIFNpbmNSZXNhbXBs
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ4NjgsNiArMjUxMjYsNyBAQAogCQkJCTUxQkUzN0Uw
MERBRUUwMEUwMDEwODVGQyAvKiBTdG9yYWdlQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzUx
NjBFRUIxMDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1wbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzUxMDJFQ0YwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQ0Q1NTk2OTIxNDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRl
cklPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFMEJBQkIwREE1NTQ3MTAwQTlFNDE3IC8qIFN0
b3JhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU2NTc2RTgxN0RBOTRFMjAwQTU2QkRD
IC8qIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUVC
REQ4NDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNTAyNCw2ICsyNTI4Myw3IEBACiAJCQkJQjIyMjc5RkEwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR0ZFT2Zmc2V0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5RkQw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyMjI3QTAwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk0NEEyMERCOTBGODQxNjZDMDBCM0UxRkUgLyog
V2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwMzBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHRkVTcG90TGlnaHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwNzhFMDkxOTE3RDE0RDFDMDA0MjBBQTEgLyogTWVkaWFTdHJlYW1UcmFja0V2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyN0EwNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUaWxlRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTI0Nyw2ICsyNTUwNyw3IEBACiAJCQkJOTdCQzg0
QTUxMjM3MERDODAwMEM2MTYxIC8qIFRleHRWaWV3U291cmNlUGFyc2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0U2NThGRjBFQTkyNDhBMDA3RTQ1MzMgLyogVGhlbWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRTY1OUU2MEVBOTJGQjIwMDdFNDUzMyAvKiBUaGVtZU1hYy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNDQyQUY3QTkxMDJDRERFQTAwOEZENEQzIC8qIFF1aWNrTG9vay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNFNjU5QTkwRUE5MjdCOTAwN0U0NTMzIC8qIFRoZW1lVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3NkQ2Qzk1MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwQjkwNTYxQjBGMjU3OEJGMDA5NUZGNkEg
LyogVGhyZWFkYWJsZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTI2MSw2ICsyNTUyMiw3
IEBACiAJCQkJMUFGODlBNDIxNTE4RkRFQTAwRTU0N0I1IC8qIFRpbGVkQmFja2luZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDk4NzcwRjMxMjQyQzUzNTAwMjIyNkJBIC8qIFRpbGluZ0RhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCUY1NUIzRERDMTI1MUYxMkQwMDNFRjI2OSAvKiBUaW1lSW5wdXRU
eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNTE2RThCNzEzNkUwNERCMDA3NkMzQzAgLyogTG9j
YWxpemVkRGF0ZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTUzQ0ZFODEwOEY0NzNGMDBF
QTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3
MTlCNzE4MTEwNkUwMDAxNkRDNTEgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjU5MjgsNiArMjYxOTAsNyBAQAogCQkJCUZEOEM0NkVCMTU0NjA4RTcwMEE1
OTEwQyAvKiBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RkVENDgzOTBDRUQ2NkMzMjU1RjcyQzU5IC8qIE1hdGhNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDc4RTA5MDMxN0QxNENFRTAwNDIwQUExIC8qIE1lZGlhU3RyZWFtVHJh
Y2tFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0NDRENEUyMzBGNzA4QjJFMDAzMTU4RTAg
LyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBNzk4MjQx
NzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlD
REE3OTgyNzE3MEEyNzkxMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0Q1NERFNEIxNzQ2OUM2RDAwNUU1QjM2IC8qIEF1ZGlvU2Vzc2lvbk1hYy5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTI1OTM3LDYgKzI2MjAwLDcgQEAKIAkJCQlCRTg4RTBEODE3MTVE
MkEyMDA2NThEOTggLyogQXVkaW9UcmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRTg4RTBE
QjE3MTVEMkEyMDA2NThEOTggLyogQXVkaW9UcmFja0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkQzMTYwOEExMkIwMjZGNzAwQzFBMzU5IC8qIEF1ZGlvVXRpbGl0aWVzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTdFNDI4Q0U1MTNFMzQwN0YwMDNCNjYxQyAvKiBSZXNvdXJjZUhhbmRsZUlP
Uy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzNEY3MTM4MEQ1QTZFRkYwMDAxOEQ2OSAvKiBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NEQw
Q0U5MjM0RTAwN0VGM0NEIC8qIEF1dGhlbnRpY2F0aW9uTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDU4MzBENEQxNjc5QjRGODAwQUNGOEMzIC8qIEF1dG9zY3JvbGxDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjYwMDIsNiArMjYyNjYsNyBAQAogCQkJCTQ5QUUyRDk2MTM0RUU1
RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIx
ODI3NDkzMTM0Q0E0QzEwMEI5OEMyRCAvKiBDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTZFNEU5MUFDMTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmli
dXRlcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTQwMzc5QzEyNEJFQTdGMDBBRjQwRTQgLyog
V2ViQ29yZU1vdGlvbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk0OTQ4NEZDMTEwMkNG
MjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkI5
MTM5MjcxNkFFNEMzNDAwMUZFNjgyIC8qIENhbnZhc1BhdGhNZXRob2RzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQ5NDg0RkM0MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjYwNjgsMTIgKzI2MzMzLDE0IEBACiAJCQkJOTc2MjdCOEQxNEZC
M0NFRTAwMkNEQ0ExIC8qIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTA2NUFENEY2MEIwQzJFREEwMDVBMkIxRCAvKiBDb250ZXh0TWVudUNvbnRyb2xs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdEMDdCMTQxODM0MTU4ODAwQUJERDNDIC8qIEpT
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdFNDc0
RTIwMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMDYwMjdDQjMwQjFDQzAzRDAwODg0QjJEIC8qIENvbnRleHRNZW51SXRlbU1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzQjZBMEVBMEIwQkNBODQwMEY1MDI3QSAvKiBDb250
ZXh0TWVudU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI4MTJCMDI2NzYwMEMxQTM1
OSAvKiBDb252b2x2ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxNDI0QzkzMTY0QjUy
QzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE0MjRDOTAx
NjRCNDYwQjAwRjMyRDQwIC8qIENvb2tpZUphck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdF
RTY4NDYzMTJEMjZFMzgwMEU3OTQxNSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMzdFNjU5NTAxNjNCMTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRhSU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEzRjAxRjExMjcwRTE5MDAwREZCQTcxIC8qIENvb2tp
ZVN0b3JhZ2VNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzQ2QUYyMTE0RjREREU2MDAzRTdB
NzIgLyogQ29vcmRpbmF0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI5NTAwRTgyMDU2
QjAwQjI1OTY1IC8qIENvdW50ZXJEaXJlY3RpdmVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjYx
NzksNiArMjY0NDYsNyBAQAogCQkJCUZFNDU2RjE4MTY3N0Q3NEUwMDVFRERGOSAvKiBEYXRhYmFz
ZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVCMjZEMjgxNjdBOEYyQTAwRkREMjZC
IC8qIERhdGFiYXNlU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFREVGODQxMTY3OTcx
MDgwMDBFNDQ0QSAvKiBEYXRhYmFzZVN0cmF0ZWd5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0
RTM5QUZEMTMzMEVGQzYwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29sLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTdCQzZBMkExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlU3luYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5N0JDNkEyRDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUYXNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTJGMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFz
ZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2MzE0LDYgKzI2NTgyLDcgQEAKIAkJCQlG
NUMwNDFFNDBGRkNBOTZEMDA4MzlENEEgLyogRE9NSFRNTERhdGFMaXN0RWxlbWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUUxNTdBOEU4MTgxODRDNjcwMDlGODIxRCAvKiBKU0NyeXB0b0tleUN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzA1ODUyMzE3RkRDMTQwMDA1RjJCQ0IgLyog
TWVkaWFUcmFja0NvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFRDEzRDQwMENF
QTkzOTQwMEQ4OTQ2NiAvKiBJY29uSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNUY4MzEx
ODIyRjExQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRDM1OUQ3OTIxMjlDQTNDMDAwMDZFNUQyIC8qIERPTUhUTUxEZXRhaWxzRWxlbWVudC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTg1QkE0RDBDMEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1M
RGlyZWN0b3J5RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLApAQCAtMjYzNzUsNiArMjY2NDQsNyBA
QAogCQkJCTg1QkE0RDE4MEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MVUxpc3RFbGVtZW50Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTgxODVGM0UwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxl
bWVudGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzQzg0MUZGMDlDRTg1ODMwMERGRjVF
NSAvKiBET01JbXBsZW1lbnRhdGlvbkZyb250LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2NjAx
RUMwMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDMUEzN0JBMDk3QzcxNUYwMDE5RjNEOCAvKiBET01JbnRlcm5hbC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTg1RkYzMTVCMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2Fy
ZEV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwNjU2RkYwQUFCNDc2MzAwMkQxNUMwIC8q
IERPTU1lZGlhTGlzdC5tbSBpbiBTb3VyY2VzICovLApAQCAtMjY0NTcsNiArMjY3MjcsNyBAQAog
CQkJCTQ5ODc3MERCMTI0MkM1MzUwMDIyMjZCQSAvKiBEcmF3aW5nQnVmZmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUNEQzhCNUE2MTgwNDc0RjcwMDE2RTY4NSAvKiBNZWRpYVNvdXJjZVByaXZh
dGVBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk4NzcxNTMxMjQzRjlGQTAwMjIyNkJB
IC8qIERyYXdpbmdCdWZmZXJNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkzMUVBRjk3RjEyMTQz
NUE0MDBFN0MxQkYgLyogRGV2aWNlTW90aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDc4RTA5MTIxN0QxNENFRTAwNDIwQUExIC8qIFVzZXJNZWRpYUNvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkQ2RUQyQzcxMzZCOEU2NjAwM0NGMDcyIC8qIER5bmFtaWNzQ29t
cHJlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDUzNzM1NjEzN0I2NTNCMDAwMDhEQ0Ug
LyogRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY2NTgs
NiArMjY5MjksNyBAQAogCQkJCTA3OTY5REJEMTdEMTQxNTEwMDdGRjg0MiAvKiBKU1JUQ1Nlc3Np
b25EZXNjcmlwdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFERTI5MEEx
NTJBQzgwMEIxMkE2OCAvKiBIVE1MQm9keUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThDRkY3QTgwQTE1Njk3ODAwMEE0MjM0IC8qIEhUTUxCUkVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMUY2OEQ0QUUxNEJCOURDQTAwN0I1QzYyIC8qIE1lbW9yeVByZXNzdXJlSGFuZGxl
cklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4MTM2OUQzMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBI
VE1MQnV0dG9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFGRDA4MjQ1RTU5
MDAxRTlBQkMgLyogSFRNTENhbnZhc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThE
RjNGRDEwOTdGQTBGQzAwNTI5ODFCIC8qIEhUTUxDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMjY2NjksOCArMjY5NDEsMTAgQEAKIAkJCQlBOEVBN0NCMTBBMTkyQjlDMDBBOEVGNUYg
LyogSFRNTERpdkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThFQTc5RjUwQTE5MTZE
RjAwQThFRjVGIC8qIEhUTUxETGlzdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNG
MTlBOTEwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk0NEM5OTE4MjBGM0QxRTBEMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MubW0gaW4g
U291cmNlcyAqLywKIAkJCQk5NzdCMzg2NjEyMjg4M0U5MDBCODFGRjggLyogSFRNTERvY3VtZW50
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REU3MDk5RTY0OTIwMDU2RTU4MSAv
KiBodG1sZWRpdGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNTE2RThCODEzNkUwNERCMDA3
NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlB
OTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUUxNTdBOEYwMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3QzgxMjIwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVt
ZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2OTA2LDYgKzI3MTgwLDcgQEAKIAkJ
CQk3MEY1NDZFOEI4QjVEN0RDNTRFRTE0NEUgLyogSlNCZWZvcmVVbmxvYWRFdmVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGREYwOURDODEzOTlCNjIyMDA2ODhFNUIgLyogSlNCaXF1YWRGaWx0
ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEOEFBNjNDMTY5NTE0OEUwMEQyRUE2OCAv
KiBKU0JpcXVhZEZpbHRlck5vZGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzE0MDM3
OUUxMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkUyRDk5Q0QxMEUyQkJEQTAwNDk2MzM3IC8qIEpTQmxvYi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4OTMxREU1QjE0QzQ0QzQ0MDAwREM5RDIgLyogSlNCbG9iQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDlFMjg3MTA3RDREQjQwMEI1NzkzRiAvKiBKU0Nh
bGxiYWNrRGF0YS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2OTE0LDYgKzI3MTg5LDcgQEAKIAkJ
CQk2NURGMzIzQjA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNQYXR0ZXJuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQ5RUVEMTQyMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFRUQxNDQxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNE
Q0E4Mjk2MTY3OTEwMEYwMDg3NTcxNCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTQ5RUVEMTRFMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUVFRDE1MDEw
NTE5NzFBMDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzRjlCN0EwMEJBNjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2OTQ4LDYgKzI3MjI0LDcgQEAKIAkJCQlCQzQ2QzFF
RTBDMEREQkRGMDAyMENGQzMgLyogSlNDU1NSdWxlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4RDA1RkE3MEEyM0IzMDEwMDVFNzIwMyAvKiBKU0NTU1J1bGVMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTA3MDM2M0U1MTgxQTFDREMwMEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNv
dXJjZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5MEFFMEVBRkY0QjUwMDM2OTVDOCAvKiBT
eXN0ZW1NZW1vcnlJT1MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MjI2MkYxMDMyMTA4NDAw
NkU3RDVEIC8qIEpTQ1NTUnVsZUxpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
MDExQjYwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlGRkI2OThDRjE4MzQwMkJCMDAxNThBMzEgLyogTGluZUluZm8uY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0yNjk3NSw2ICsyNzI1Miw3IEBACiAJCQkJNTlBODYwMDYxMTlEQUY3
RjAwREVGMUVGIC8qIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1OTBFMUI0QjExRTRFRjcwMDA2OUY3ODQgLyogSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRTQzOEEyMTQwQzBEQzAwMDVFNDM3RSAv
KiBKU0RpY3Rpb25hcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDRDMzYzRjEwRkFBN0JCMzAw
OTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTY1OUREQzgyMDlFMTk4QkEwMDFCRjNDNiAvKiBKU0RvY3VtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQ5QzdCQThEMTA0MkY1QjEwMDA5RDQ0NyAvKiBKU0RvY3VtZW50Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBNDk0RURFMEExMjNGNEMwMEZEQUZDMSAvKiBKU0RvY3Vt
ZW50RnJhZ21lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjk4Niw2ICsyNzI2NCw3IEBACiAJ
CQkJMkUwODg4RDQxMTQ4ODQ4QTAwQUY0MjY1IC8qIEpTRE9NRm9ybURhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkUwODg4RTYxMTQ4ODRFMjAwQUY0MjY1IC8qIEpTRE9NRm9ybURhdGFDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFDMzZDQkQwRUIwODA2MjAwNzQxMEJDIC8qIEpT
RE9NR2xvYmFsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3RUQzNUEyMTZENkRDQzkw
MDIyNDhGMyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjVERjMxRjcwOUQxQ0M2MDAwMEJFMzI1IC8qIEpTRE9NSW1wbGVtZW50YXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTlEMjQ4MDYwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWlt
ZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlEMjQ4MDgwRDc1N0U3RDAwRkRGOTU5IC8q
IEpTRE9NTWltZVR5cGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MDI4LDYgKzI3MzA3
LDcgQEAKIAkJCQlCQzYwOTAyMDBFOTFCOEVDMDAwQzY4QjUgLyogSlNFdmVudFRhcmdldEN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMzE0QUNFQjEwODkyMDg2MDAwRjBFNTYgLyogSlNF
eGNlcHRpb25CYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFQkYwRTc2MTJBOTg2ODgwMERC
MTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5MDQ5
MEVBRkQ2MzcwMDM2OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzcyODY5ODMxNEZEOUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDBGMDE0MEUwQTE4OTUwMEZE
MDRFMyAvKiBKU0ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkUzQkMwQ0ExMTdEM0UwODAw
Qjk0MDlBIC8qIEpTRmlsZUVycm9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjcxNzYsNiArMjc0
NTYsNyBAQAogCQkJCUNEQTk4RTA0MTYwMzlFMUEwMEZFQTNCMSAvKiBKU01lZGlhS2V5cy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwNzk2OURDMzE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENTdGF0
c1Jlc3BvbnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQTk4RTA2MTYwMzlFMUYwMEZFQTNC
MSAvKiBKU01lZGlhS2V5U2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwNzQzMDBBNTBG
NEI4QkNGMDA4MDc2Q0QgLyogTWVkaWFQbGF5ZXJQcml2YXRlSU9TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkMzQzM5QjYwQzBEM0Q4RDAwNUY0RDdBIC8qIEpTTWVkaWFMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUQzQTk0QTQ2MTIyREM0MEYwMEEzN0JCQyAvKiBKU01lZGlhUXVlcnlMaXN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNENjQxRUJGMTgxOUIzNjAwMEVFNEM0MSAvKiBNZWRp
YVRpbWVNYWMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzI2NCw2ICsyNzU0NSw3IEBACiAJCQkJ
NTFEQ0U4MDIwQ0FDOUYxQzAwNDg4MzU4IC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUVBQzU2NzE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTlERDZBNjExOTAy
QTYyMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlBQTEyREY0OTE3NDNERjgzMDA0REFGREYgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXpl
cklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUI1OURENkFBMTE5MDJBNzEwMDdFOTY4NCAvKiBK
U1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2
MzgwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjU5REQ2OUUxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25DYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MzMxLDYgKzI3NjEzLDcgQEAKIAkJCQlCMkZBM0Q3
NjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDM1OEU4N0MxMzYwQTJFRTAwRTQ3NDhDIC8qIEpTU1ZHRkVEcm9wU2hh
ZG93RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q3ODBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdGRUZsb29kRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0NEM5OTFB
MDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkZB
M0Q3QTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRUZ1bmNBRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMkZBM0Q3QzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRUZ1bmNCRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q3RTBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdGRUZ1bmNHRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MzU0LDYgKzI3NjM3LDcg
QEAKIAkJCQlBODNCNzkwMzBDQ0FGRjE1MDAwQjA4MjUgLyogSlNTVkdGb250RmFjZU5hbWVFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4M0I3OEZGMENDQUZGMTUwMDBCMDgyNSAvKiBK
U1NWR0ZvbnRGYWNlU3JjRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODNCNzhGRDBD
Q0FGRjE1MDAwQjA4MjUgLyogSlNTVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTQ1MzkwNEQwRUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyRkEzRDk4MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZvcmVpZ25PYmpl
Y3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDlBMEFCNzVBNkYwMDBFNUFD
NCAvKiBKU1NWR0dFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyN0IyODI3MENFRjBD
MDcwMEQzOUQ1NCAvKiBKU1NWR0dseXBoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3
MzYzLDYgKzI3NjQ3LDcgQEAKIAkJCQk4NTE3NEVDMkJDQ0FGMTdFQUUzRjQ2RjggLyogSlNTVkdH
cmFwaGljc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQ4NTIyN0IxMTkwMTYyQzAw
NkVEQzdGIC8qIEpTU1ZHSEtlcm5FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEz
RDlFMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlFNDI0QTNBMDEzMzBERjFFMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjJGQTNEQTAwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGVuZ3RoLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA3NzY2NEZDMTgzRTZCNUMwMDEzM0I5MiAvKiBKU1F1aWNr
VGltZVBsdWdpblJlcGxhY2VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4RTRGRTQ2MEUy
QkQ0MTQwMEY0Q0FFMCAvKiBKU1NWR0xlbmd0aEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI3Mzg5LDYgKzI3Njc0LDcgQEAKIAkJCQlCMkZBM0RDMDBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzREMy
MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEQzQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNEI2NUE1
RTEzMkZBREI2MDA3MEU3QkUgLyogVGlsZUxheWVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJG
QTNEQzYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEQzgwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNE
Q0EwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhB
YnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzQzMiw2ICsyNzcxOCw3IEBACiAJCQkJQjJGQTNF
MEUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVFJlZkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMDcwMzYzRDYxODFBMTQ2NTAwQzA3NEE1IC8qIE1lZGlhU3RyZWFtU291cmNlU3RhdGVz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRTEwMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NW
R1RTcGFuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDUzOTA0MzBFQUZENjM3MDAz
Njk1QzggLyogUGxhdGZvcm1TY3JlZW5JT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Ux
MjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdVbml0VHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTEyNUY4NTExODI4M0E1NjAwRDg0Q0Q5IC8qIEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpX
Sy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0UxNDBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdVc2VFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc1MzEsNiArMjc4MTgsNyBAQAog
CQkJCUJDRUZFMUVBMERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNFRkUxRTUwRENBNUYzMzAwNzM5MjE5IC8qIEpTWFNMVFByb2Nlc3Nv
ckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTAzMUI0MzBBNDRFRkM3MDBGOTkyRTAg
LyogS2V5Ym9hcmRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDNTgzNjFBQTE3NDQ1MjNG
MDAxNzM1MTEgLyogRm9udFNlcnZpY2VzSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0Iz
RDgxMTRCMTY2QTAwMUM0MjlCIC8qIEtleUV2ZW50Q29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkyNjU1NDEzQTE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRJT1MubW0gaW4gU291cmNlcyAq
LywKIAkJCQk1MTFFRjJDMTE3RjBGRDM1MDBFNEZBMTYgLyogSlNJREJDdXJzb3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yNzU5MiwxMCArMjc4ODAsMTIgQEAKIAkJCQk1MTAxOTQ0NDE4MzZGN0U0
MDA5MjU1MjMgLyogSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkFCRTcyRjQxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkFCRTcyRkQxMDU5QzIxMTAwRDk5OUREIC8qIE1hdGhNTEVsZW1lbnRG
YWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJFQTgwN0M4MEY3MTRBMDMwMDUyNDE5OSAv
KiBTZWxlY3Rpb25SZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZBQkU3MkY2MTA1OUMxRUIw
MEQ5OTlERCAvKiBNYXRoTUxJbmxpbmVDb250YWluZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZBQkU3MkY4MTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxNYXRoRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGQUJFNzJGRTEwNTlDMjExMDBEOTk5REQgLyogTWF0aE1MTmFt
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkE2NTRBNkIxMTA4QUJFRDAwMjYxNUUwIC8qIE1h
dGhNTFRleHRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5MDQ1MEVBRkQ2Mzcw
MDM2OTVDOCAvKiBTY3JvbGxWaWV3SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlENURDMkIw
RjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQ5RTkxMUM2MEVGODZENDcwMDlEMENBRiAvKiBNYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE3MjUzQUExMzU0QkJCQzAwMzYwRjJB
IC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc2MzEsMTEg
KzI3OTIxLDEzIEBACiAJCQkJOTMzMDlERjkwOTlFNjQ5MjAwNTZFNTgxIC8qIE1lcmdlSWRlbnRp
Y2FsRWxlbWVudHNDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQURFQ0NGMEU3NkFE
OEIwMDRBMUE1RSAvKiBNZXNzYWdlQ2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NTc5
M0U4MzBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTQ0M0YwNDI3MEU3NUM4RkIwMDdFNTQwNyAvKiBOZXR3b3JrU3RhdGVOb3RpZmllcklPUy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUFERUNDMDBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2Fn
ZVBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4RTUyNkYxMzQ2QkQxNzAwQUQ5QzMxIC8q
IE1ldGVyU2hhZG93RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0REQ0Q5NDEzODQ0
RkQ1MDAwOEI3OTMgLyogTUlNRUhlYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzc3MkM0
RTBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzc3MkM1RTBDNEVCMzQ0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeU1hYy5tbSBp
biBTb3VyY2VzICovLAorCQkJCUU0NTM5MDQ3MEVBRkQ2MzcwMDM2OTVDOCAvKiBTb3VuZElPUy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTUyRjEwODY1MTYyQjZEQTQwMDlBQzgxRSAvKiBNaXhlZENv
bnRlbnRDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM2RDc0QUU0MDlBQTI5MEEwMDBC
MEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RjU1QjNEQzUxMjUxRjEyRDAwM0VGMjY5IC8qIE1vbnRoSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjc3MjMsNiArMjgwMTUsNyBAQAogCQkJCUUxMjg0QUVBMTA0NDdERUUwMEVBRUI1
MiAvKiBQYWdlVHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNjczMEEz
MTgyRDhGQkIwMDNGQUY1QyAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxRTFFQ0MyMEM5MUM5MDQwMERDMjU1QiAvKiBQYWdlVVJMUmVjb3JkLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTM3MjdERkQ1MTQyQUFFNDUwMEQ0NDlDQiAvKiBGb250Q2FjaGVJT1MubW0g
aW4gU291cmNlcyAqLywKIAkJCQlGRkQ1Qjk3QTEzNUNDOTc4MDBENUU5MkEgLyogUGFnZVZpc2li
aWxpdHlTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjBBMjEyQjAyNkY3MDBDMUEz
NTkgLyogUGFubmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDE5MTJCMDI2NzYwMEMx
QTM1OSAvKiBQYW5uZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc3NTEsNiArMjgwNDQs
NyBAQAogCQkJCTQ5NTg3ODIyMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlDREVBNzYzMDE0NjA4QTUzMDA4QjMxRjEgLyogUGxhdGZv
cm1DbG9ja0NBLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQUE4RDBBMTRENzFCMkUwMDYxRUE2
MCAvKiBQbGF0Zm9ybUNsb2NrQ00ubW0gaW4gU291cmNlcyAqLywKKwkJCQk0NDJBRjdBQTEwMkNE
REVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBQTQ4NkYx
NEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRjU0NEY3ODgxNUNGQjJBODAwQUYzM0E4IC8qIFBsYXRmb3JtTG9jYWxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxQkY3MDBGMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3ODM5LDYgKzI4MTMzLDcg
QEAKIAkJCQlCQ0VBNDg3NzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDRUE0ODc5MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMYXllci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU4MEQwMDBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5MDFEMEVBRkNBQ0EwMDM2
OTVDOCAvKiBNSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1ODBD
RkUwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MEQxMEQ5OTE1NDVGNTc2MDA5NkQyODggLyogUmVuZGVyTGF5ZXJGaWx0ZXJJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTNDMjQ0RkVCQTM3NUFDNjMzRjg4QkU2RiAvKiBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc4OTgsNiArMjgx
OTMsNyBAQAogCQkJCUE4REY0QUVBMDk4MEM0MkMwMDUyOTgxQiAvKiBSZW5kZXJUYWJsZUNlbGwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThERjRBRTgwOTgwQzQyQzAwNTI5ODFCIC8qIFJlbmRl
clRhYmxlQ29sLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4REY0QUYwMDk4MEM0MkMwMDUyOTgx
QiAvKiBSZW5kZXJUYWJsZVJvdy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNEI2NUE1QTEzMkZB
QUY5MDA3MEU3QkUgLyogVGlsZUdyaWQubW0gaW4gU291cmNlcyAqLywKIAkJCQlBOERGNEFFRDA5
ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDRUE0ODhCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUZXh0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUFCNjdEMUE4MDk3RjNBRTMwMEY5MzkyRSAvKiBSZW5kZXJUZXh0Q29udHJvbC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTI3OTk1LDYgKzI4MjkxLDcgQEAKIAkJCQkwRjYwNUFFQzE1
Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFGNjJFRTcxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjYyRUU2MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxp
bmdDb29yZGluYXRvck1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNENTU5NjkxMTQ3NUI2Nzgw
MDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTND
MzhCRkUxNjQ0NzNDNzAwMDkxRUIyIC8qIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzMUNCRDBDMTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0
ZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMxQ0JEMTMxNjFBNDRGODAwRTRDODc0IC8q
IFNjcm9sbGluZ1N0YXRlTm9kZU1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtMjgwMzMsNiArMjgz
MzAsNyBAQAogCQkJCUJDNUVCOEMzMEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE2RDE2OTYyMTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENDVBOTUzMTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFw
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyOTAzNzE2NTE2QkExMUJDMDBGRUZERjAgLyogQ29u
dGVudEZpbHRlcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZENDVBOTU0MTc1RDNGQjgwMEMy
MUVDOCAvKiBTaGFwZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ0NUE5NTUxNzVEM0ZC
ODAwQzIxRUM4IC8qIFNoYXBlSW5zaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDQ1
QTk1NjE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI4MjIzLDYgKzI4NTIxLDcgQEAKIAkJCQlDREUzQTg1NzE3RjYwMjA0MDBDNUJFMjAg
LyogQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5
QjMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0RvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyOEM2QTI3MEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYxNzc0ODExMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1h
dG9ySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5QjYwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgzM0M4NTIwQTJDRjUyODAwRDU3
NjY0IC8qIFNWR0VsZW1lbnRGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUI5
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdFbGVtZW50SW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0yODMxNSw2ICsyODYxNCw3IEBACiAJCQkJQjIyMjdBNTgwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1BhdGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0NzZDOUVGMTFERjZBNTgw
MDU1NUIwMiAvKiBTVkdQYXRoUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTgw
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlGRTBEODRFQjEwNDg0MzZFMDAxQTE3OUUgLyogV2ViRXZlbnQubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NDc2QzlFNTExREY2QTBCMDA1NTVCMDIgLyogU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUNERjJCMDE4MTgyMDU0MDcwMEYyQjQyNCAvKiBNb2NrVHJh
Y2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4RkYxMDIwMTI5NTBGNUEwMEYwMDI3NiAvKiBT
VkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4NDE3
LDYgKzI4NzE3LDcgQEAKIAkJCQk0OTg3NzBGMDEyNDJDNTM1MDAyMjI2QkEgLyogVGV4dHVyZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDODRBNDEyMzcwREM4MDAwQzYxNjEgLyogVGV4dFZp
ZXdTb3VyY2VQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNjVEMzIwRUFEMTIxMTAw
N0U0NTMzIC8qIFRoZW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0QzNCMUZDMEYwRTQxNzAw
MDk2OTNGNiAvKiBUaWxlQ2FjaGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0U2NTlFOTBFQTky
RkZBMDA3RTQ1MzMgLyogVGhlbWVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzZENkM5NDEy
MkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwQjkwNTYxRTBGMjU3RTkzMDA5NUZGNkEgLyogVGhyZWFkYWJsZUxvYWRlci5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTI4NTA1LDYgKzI4ODA2LDcgQEAKIAkJCQk3RTY2RTIzMzE2RDZF
QjZDMDBGN0U3RkYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3RTY2RTIzMzE3RTZFQjZDMDBGN0U3RkYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVBWUlRDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFM0ZBRThFMTQ3MzNGREIwMEU0MjMwNiAv
KiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjk3
QTY1ODE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yaU9TLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNkU0RTkxQUUxMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGNkYxRUQxMjdGNzBCMTAwNTVDQjA2
IC8qIFdlYkdMQ29udGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTAxRDNDRjgyMTRC
RDBBMzAwMEZFOTk3MCAvKiBXZWJHTENvbnRleHRHcm91cC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI4NjMwLDYgKzI4OTMyLDcgQEAKIAkJCQlFMUVDMjk5RjBCQjA0QzZCMDBFQTE4N0IgLyogWFBh
dGhOb2RlU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQjdGQzc1MEE4QjkyRUMwMEQ5RDM3
QiAvKiBYUGF0aE5TUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0ZDNzgwQThC
OTJFQzAwRDlEMzdCIC8qIFhQYXRoUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ0NzY1
MzFCMTMzMTcwOTkwMDA2Qjc4OSAvKiBTU0xLZXlHZW5lcmF0b3JJT1MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUFCN0ZDN0EwQThCOTJFQzAwRDlEMzdCIC8qIFhQYXRoUGF0aC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQUI3RkM3QzBBOEI5MkVDMDBEOUQzN0IgLyogWFBhdGhQcmVkaWNhdGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0ZDN0UwQThCOTJFQzAwRDlEMzdCIC8qIFhQYXRo
UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ29udGVudEZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZp
bHRlci5oCmluZGV4IDkzZjIwOWRiNjNlOWE5NjBiMjU1NjRkYmMzNjM5Y2U5NWY1NDY5MDAuLmQw
NWUyYWEyODdmNGMyYTYzOGQzYTc4M2I2ODZhMWFlM2VhM2NkZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Db250ZW50RmlsdGVyLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKKyNpZiBQTEFURk9S
TShJT1MpCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNlbmRpZgorCiAjaWYgUExBVEZP
Uk0oTUFDKQogT0JKQ19DTEFTUyBXZWJGaWx0ZXJFdmFsdWF0b3I7CiAjZW5kaWYKQEAgLTUxLDYg
KzU1LDExIEBAIHB1YmxpYzoKICAgICBib29sIGRpZEJsb2NrRGF0YSgpIGNvbnN0OwogICAgIGNv
bnN0IGNoYXIqIGdldFJlcGxhY2VtZW50RGF0YShpbnQmIGxlbmd0aCkgY29uc3Q7CiAgICAgCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzY2hlbWUoKTsKKyAgICB2
b2lkIHJlcXVlc3RVbmJsb2NrQW5kRGlzcGF0Y2hJZlN1Y2Nlc3NmdWwoRnVuY3Rpb248dm9pZCgp
Pik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDb250ZW50RmlsdGVyKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCmlu
ZGV4IGYzNTM1NmNiZDVkYTI4MDRhODY1MmE5MDJhOTUwMWY0OTA1MDMxZjMuLjUzNzliODY3MDZj
ODJjNzk5ZmM3MDQyZjkwMDRiZTY4YWMyZmE4NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0RyYWdEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0Rh
dGEuaApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykg
JiYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU1LDExICs1NSwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBEYXRhT2JqZWN0R3RrOwogfQogdHlwZWRlZiBXZWJDb3JlOjpEYXRhT2Jq
ZWN0R3RrKiBEcmFnRGF0YVJlZjsKLSNlbGlmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oQkxB
Q0tCRVJSWSkgfHwgUExBVEZPUk0oTklYKQorI2VsaWYgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9S
TShCTEFDS0JFUlJZKSB8fCBQTEFURk9STShOSVgpIHx8IFBMQVRGT1JNKElPUykKIHR5cGVkZWYg
dm9pZCogRHJhZ0RhdGFSZWY7CiAjZW5kaWYKIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEZyYW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29z
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCmluZGV4IGRj
OTcxYjM2ZTdhZWVlMjQyNGFiZTEzYzFhOTZmNzRjMmQ3YzhlMmQuLjRhMTBmMTZkMzNlZDVmY2Mz
NTQ4OTNlZmQ5YjZjZTcyY2QzMGU4NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0ZpbGVDaG9vc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hv
b3Nlci5jcHAKQEAgLTc1LDYgKzc1LDI1IEBAIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCiAgICAgbV9jbGllbnQtPmZpbGVzQ2hv
c2VuKGZpbGVzKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy8vIEZJWE1FOiBUaGlzIGZ1bmN0
aW9uIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gRmlsZUNob29zZXI6OmNob29zZUZpbGVzKCkuIFdl
IHNob3VsZCBtZXJnZSB0aGlzIGZ1bmN0aW9uCisvLyB3aXRoIEZpbGVDaG9vc2VyOjpjaG9vc2VG
aWxlcygpIGFuZCBoZW5jZSByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCit2b2lkIEZp
bGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFt
ZXMsIGNvbnN0IFN0cmluZyYgZGlzcGxheVN0cmluZywgSWNvbiogaWNvbikKK3sKKyAgICAvLyBG
SVhNRTogVGhpcyBpcyBpbmVsZWdhbnQuIFdlIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBzZXR0
aW5ncyBoZXJlLgorICAgIGlmIChtX3NldHRpbmdzLnNlbGVjdGVkRmlsZXMgPT0gZmlsZW5hbWVz
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4gZmlsZXM7CisgICAgZm9yIChhdXRv
IGZpbGVuYW1lIDogZmlsZW5hbWVzKQorICAgICAgICBmaWxlcy5hcHBlbmQoRmlsZUNob29zZXJG
aWxlSW5mbyhmaWxlbmFtZSkpOworICAgIG1fY2xpZW50LT5maWxlc0Nob3NlbihmaWxlcywgZGlz
cGxheVN0cmluZywgaWNvbik7Cit9CisjZW5kaWYKKwogdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3Nl
RmlsZXMoY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBmaWxlcykKIHsKICAgICAv
LyBGSVhNRTogVGhpcyBpcyBpbmVsZWdhbnQuIFdlIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBz
ZXR0aW5ncyBoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNo
b29zZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgKaW5kZXggNmMw
MjNlM2Q2ZGRkM2VkZDkwNzMxZDFjMWFhODljYTk3MzE3ODgwMC4uOGQ3NTllNjkzNzhjNmQwNjQ2
YzFlZWM5MTdmYmMyYTQ0ZmFmMTM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRmlsZUNob29zZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nl
ci5oCkBAIC0zNyw2ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbGVD
aG9vc2VyOworY2xhc3MgSWNvbjsKIAogc3RydWN0IEZpbGVDaG9vc2VyRmlsZUluZm8gewogICAg
IEZpbGVDaG9vc2VyRmlsZUluZm8oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lID0gU3RyaW5nKCkpCkBAIC03MCw2ICs3MSwxMSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB+RmlsZUNob29zZXJDbGllbnQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBmaWxlc0No
b3Nlbihjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mKSA9IDA7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIGFsbW9zdCBpZGVudGljYWwg
dG8gRmlsZUNob29zZXI6OmZpbGVzQ2hvc2VuKCkuIFdlIHNob3VsZCBtZXJnZSB0aGlzCisgICAg
Ly8gZnVuY3Rpb24gd2l0aCBGaWxlQ2hvb3Nlcjo6ZmlsZXNDaG9zZW4oKSBhbmQgaGVuY2UgcmVt
b3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgorICAgIHZpcnR1YWwgdm9pZCBmaWxlc0Nob3Nl
bihjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlTdHJpbmcsIEljb24qKSA9IDA7CisjZW5kaWYKIH07CiAKIGNsYXNzIEZpbGVDaG9vc2VyIDog
cHVibGljIFJlZkNvdW50ZWQ8RmlsZUNob29zZXI+IHsKQEAgLTgxLDYgKzg3LDExIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgY2hvb3NlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIHZvaWQg
Y2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgYWxtb3N0IGlkZW50aWNhbCB0byBG
aWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoKS4gV2Ugc2hvdWxkIG1lcmdlIHRoaXMKKyAgICAvLyBm
dW5jdGlvbiB3aXRoIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcygpIGFuZCBoZW5jZSByZW1vdmUg
dGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCisgICAgdm9pZCBjaG9vc2VNZWRpYUZpbGVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgU3RyaW5nJiBkaXNwbGF5U3RyaW5nLCBJY29u
Kik7CisjZW5kaWYgICAgCiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IGp1c3Qg
cGFzcyBmaWxlIHBhdGhzIHRoYXQgY291bGQgYmUgdmlydHVhbCBwYXRocyB3aXRoIHByb3BlciBk
aXNwbGF5IG5hbWVzIHJhdGhlciB0aGFuIHBhc3Npbmcgc3RydWN0cy4KICAgICB2b2lkIGNob29z
ZUZpbGVzKGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiYgZmlsZXMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAppbmRleCA0MDJmZjE3YWEwYTNkNzVjNGU2MWQ4
Y2JhYTBhNWM3NGI5ZDEyNWZmLi40ZTBkOWQ2NmNkNGI4ZTdhOTI4ZTQ2OWExZDFlMTcwY2FhZDUw
ZGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcApAQCAtOTcsNiArOTcs
MTAgQEAgU3RyaW5nIGVuY29kZUZvckZpbGVOYW1lKGNvbnN0IFN0cmluZyYgaW5wdXRTdHJpbmcp
CiAKICNpZiAhUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCiAKK3ZvaWQgc2V0TWV0YWRh
dGFVUkwoU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKK30KKwogYm9v
bCBjYW5FeGNsdWRlRnJvbUJhY2t1cCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRmlsZVN5c3RlbS5oCmluZGV4IDlhNWEzOWYzZTJlMDk0MjUyMWExZjZlNjkwNDgw
MGRlNTAzNDc4NWQuLjM0ZmUwYTQzMGY3ZTZhMzMzYzIzZmUzMDM1Y2Q5OWUxMTFmOTZhYWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKQEAgLTE1MSw2ICsxNTEsOCBAQCBTdHJp
bmcgaG9tZURpcmVjdG9yeVBhdGgoKTsKIFN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3Ry
aW5nJik7CiBTdHJpbmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmKTsKIAordm9pZCBzZXRN
ZXRhZGF0YVVSTChTdHJpbmcmIFVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29u
c3QgU3RyaW5nJiBwYXRoKTsKKwogYm9vbCBjYW5FeGNsdWRlRnJvbUJhY2t1cCgpOyAvLyBSZXR1
cm5zIHRydWUgaWYgYW55IGZpbGUgY2FuIGV2ZXIgYmUgZXhjbHVkZWQgZnJvbSBiYWNrdXAuCiBi
b29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYpOyAvLyBSZXR1cm5zIHRydWUgaWYg
c3VjY2Vzc2Z1bC4KIApAQCAtMTg5LDEwICsxOTEsNiBAQCBTdHJpbmcgZW5jb2RlRm9yRmlsZU5h
bWUoY29uc3QgU3RyaW5nJik7CiBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHBhdGhBc1VSTChjb25zdCBT
dHJpbmcmKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQotdm9pZCBzZXRNZXRhZGF0YVVS
TChTdHJpbmcmIFVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5n
JiBwYXRoKTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShOSVgpCiBT
dHJpbmcgZmlsZW5hbWVUb1N0cmluZyhjb25zdCBjaGFyKik7CiBTdHJpbmcgZmlsZW5hbWVGb3JE
aXNwbGF5KGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vS2lsbFJpbmdOb25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9u
ZS5jcHAKaW5kZXggMzEwYWEwODBjYjI1YTc0N2E2M2Q4ZTA2NDRjZjYwNzEyNWM0NTA5MS4uY2Q5
NDZhNGUyNGZmZDQyODk5NWQ3ZTU5OGRkNDE0ZTEwMTQ3MDE3NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwCkBAIC01MCwzICs1MCw0IEBAIHZvaWQgS2lsbFJpbmc6
OnNldFRvWWFua2VkU3RhdGUoKQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5jcHAKaW5kZXggNTk5MDExYjI2
MWI0NjAxNjNlZGQzNTA5MWE2YWYwMWVmMDBhOTNhMS4uYjgyMDdmOWMwYzQ2N2JkMjYzODBkZTJj
N2EzOWM5MDA3YjNhYjg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9j
YWxpemVkU3RyaW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVk
U3RyaW5ncy5jcHAKQEAgLTcxLDYgKzcxLDcgQEAgc3RhdGljIFN0cmluZyBmb3JtYXRMb2NhbGl6
ZWRTdHJpbmcoU3RyaW5nIGZvcm1hdCwgLi4uKQogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKIHN0YXRpYyBTdHJpbmcgdHJ1bmNhdGVkU3RyaW5nRm9yTG9va3VwTWVudUl0
ZW0oY29uc3QgU3RyaW5nJiBvcmlnaW5hbCkKIHsKICAgICBpZiAob3JpZ2luYWwuaXNFbXB0eSgp
KQpAQCAtODQsNiArODUsNyBAQCBzdGF0aWMgU3RyaW5nIHRydW5jYXRlZFN0cmluZ0Zvckxvb2t1
cE1lbnVJdGVtKGNvbnN0IFN0cmluZyYgb3JpZ2luYWwpCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZD
aGFyYWN0ZXJzID0gbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyh0cmltbWVkLCBtYXhO
dW1iZXJPZkdyYXBoZW1lQ2x1c3RlcnNJbkxvb2t1cE1lbnVJdGVtKTsKICAgICByZXR1cm4gbnVt
YmVyT2ZDaGFyYWN0ZXJzID09IHRyaW1tZWQubGVuZ3RoKCkgPyB0cmltbWVkIDogdHJpbW1lZC5s
ZWZ0KG51bWJlck9mQ2hhcmFjdGVycykgKyBlbGxpcHNpczsKIH0KKyNlbmRpZgogCiBTdHJpbmcg
aW5wdXRFbGVtZW50QWx0VGV4dCgpCiB7CkBAIC03OTcsNiArNzk5LDI2IEBAIFN0cmluZyBodG1s
U2VsZWN0TXVsdGlwbGVJdGVtcyhzaXplX3QgY291bnQpCiAgICAgICAgIHJldHVybiBmb3JtYXRM
b2NhbGl6ZWRTdHJpbmcoV0VCX1VJX1NUUklORygiJXp1IEl0ZW1zIiwgIlByZXNlbnQgdGhlIG51
bWJlciBvZiBzZWxlY3RlZCA8b3B0aW9uPiBpdGVtcyBpbiBhIDxzZWxlY3QgbXVsdGlwbGU+IGVs
ZW1lbnQgKGlPUyBvbmx5KSIpLCBjb3VudCk7CiAgICAgfQogfQorCitTdHJpbmcgZmlsZUJ1dHRv
bkNob29zZU1lZGlhRmlsZUxhYmVsKCkKK3sKKyAgICByZXR1cm4gV0VCX1VJX1NUUklORygiQ2hv
b3NlIE1lZGlhIChTaW5nbGUpIiwgIlRpdGxlIGZvciBmaWxlIGJ1dHRvbiB1c2VkIGluIEhUTUwg
Zm9ybXMgZm9yIG1lZGlhIGZpbGVzIik7Cit9CisKK1N0cmluZyBmaWxlQnV0dG9uQ2hvb3NlTXVs
dGlwbGVNZWRpYUZpbGVzTGFiZWwoKQoreworICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJDaG9v
c2UgTWVkaWEgKE11bHRpcGxlKSIsICJUaXRsZSBmb3IgZmlsZSBidXR0b24gdXNlZCBpbiBIVE1M
NSBmb3JtcyBmb3IgbXVsdGlwbGUgbWVkaWEgZmlsZXMiKTsKK30KKworU3RyaW5nIGZpbGVCdXR0
b25Ob01lZGlhRmlsZVNlbGVjdGVkTGFiZWwoKQoreworICAgIHJldHVybiBXRUJfVUlfU1RSSU5H
KCJubyBtZWRpYSBzZWxlY3RlZCAoc2luZ2xlKSIsICJUZXh0IHRvIGRpc3BsYXkgaW4gZmlsZSBi
dXR0b24gdXNlZCBpbiBIVE1MIGZvcm1zIGZvciBtZWRpYSBmaWxlcyB3aGVuIG5vIG1lZGlhIGZp
bGUgaXMgc2VsZWN0ZWQiKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25Ob01lZGlhRmlsZXNTZWxl
Y3RlZExhYmVsKCkKK3sKKyAgICByZXR1cm4gV0VCX1VJX1NUUklORygibm8gbWVkaWEgc2VsZWN0
ZWQgKG11bHRpcGxlKSIsICJUZXh0IHRvIGRpc3BsYXkgaW4gZmlsZSBidXR0b24gdXNlZCBpbiBI
VE1MIGZvcm1zIGZvciBtZWRpYSBmaWxlcyB3aGVuIG5vIG1lZGlhIGZpbGVzIGFyZSBzZWxlY3Rl
ZCBhbmQgdGhlIGJ1dHRvbiBhbGxvd3MgbXVsdGlwbGUgZmlsZXMgdG8gYmUgc2VsZWN0ZWQiKTsK
K30KICNlbmRpZgogCiBTdHJpbmcgaW1hZ2VUaXRsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBj
b25zdCBJbnRTaXplJiBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TG9jYWxpemVkU3RyaW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3Ry
aW5ncy5oCmluZGV4IGE4NzU3ZDRkZmM2ODY1OWU4ODU1NzI3NjRjMzJlN2FmZGY2MTFhYTguLmUz
ZjczY2IwZDJjMDE2OGJiYWZhNjFjMGU3OWYxYTRlMzc4YmY2N2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmgKQEAgLTE0NSw2ICsxNDUsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50
KCk7CiAjZW5kaWYgLy8gRU5BQkxFKENPTlRFWFRfTUVOVVMpCiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIFN0cmluZyBzZWFyY2hNZW51Tm9SZWNlbnRTZWFyY2hlc1RleHQoKTsKICAgICBTdHJp
bmcgc2VhcmNoTWVudVJlY2VudFNlYXJjaGVzVGV4dCgpOwogICAgIFN0cmluZyBzZWFyY2hNZW51
Q2xlYXJSZWNlbnRTZWFyY2hlc1RleHQoKTsKQEAgLTE3MSw2ICsxNzIsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgU3RyaW5nIEFYTWVudUxpc3RQb3B1cEFjdGlvblZlcmIoKTsKICAgICBT
dHJpbmcgQVhMaW5rQWN0aW9uVmVyYigpOwogICAgIFN0cmluZyBBWExpc3RJdGVtQWN0aW9uVmVy
YigpOworI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9XRUVLKQogICAgIC8vIHdlZWtG
b3JtYXRJbkxETUwoKSByZXR1cm5zIHdlZWsgYW5kIHllYXIgZm9ybWF0IGluIExETUwsIFVuaWNv
ZGUKQEAgLTIwNiw2ICsyMDgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIFN0cmluZyBodG1sU2VsZWN0TXVsdGlwbGVJdGVtcyhzaXplX3QgbnVtKTsK
KyAgICBTdHJpbmcgZmlsZUJ1dHRvbkNob29zZU1lZGlhRmlsZUxhYmVsKCk7CisgICAgU3RyaW5n
IGZpbGVCdXR0b25DaG9vc2VNdWx0aXBsZU1lZGlhRmlsZXNMYWJlbCgpOworICAgIFN0cmluZyBm
aWxlQnV0dG9uTm9NZWRpYUZpbGVTZWxlY3RlZExhYmVsKCk7CisgICAgU3RyaW5nIGZpbGVCdXR0
b25Ob01lZGlhRmlsZXNTZWxlY3RlZExhYmVsKCk7CiAjZW5kaWYKIAogICAgIFN0cmluZyBpbWFn
ZVRpdGxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IEludFNpemUmIHNpemUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTG9nZ2luZy5oCmluZGV4IDFiYWFiMzAzYTBlM2ZlYzVjMmUyNWJlNzA0NTIz
Y2VkM2I1YWI0NDcuLjRlZjIyZjYzMjY3NjQ2NjkwZmZkMmQ0NWIzY2YwNTExNTg5YTYyYTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKQEAgLTU0LDYgKzU0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIE0oTGl2ZUNvbm5lY3QpIFwKICAgICBNKExvYWRpbmcpIFwKICAgICBNKE1l
ZGlhKSBcCisgICAgTShNZW1vcnlQcmVzc3VyZSkgXAogICAgIE0oTmV0d29yaykgXAogICAgIE0o
Tm90WWV0SW1wbGVtZW50ZWQpIFwKICAgICBNKFBhZ2VDYWNoZSkgXApAQCAtNjEsNiArNjIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShQbHVnaW5zKSBcCiAgICAgTShQb3B1cEJsb2Nr
aW5nKSBcCiAgICAgTShQcm9ncmVzcykgXAorICAgIE0oUmVtb3RlSW5zcGVjdG9yKSBcCiAgICAg
TShSZXNvdXJjZUxvYWRpbmcpIFwKICAgICBNKFNRTERhdGFiYXNlKSBcCiAgICAgTShTcGVsbGlu
Z0FuZEdyYW1tYXIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVU
eXBlUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3Ry
eS5jcHAKaW5kZXggNzQ2NGUxOWVkMjQ1YjgxOGQ4MmFiYTRmYWQyNTIzMDI1MmQ2YzNjNC4uMGJi
NTA4YmRkNjBjYmE2ZDAxNjQ4NjU4OWJhNmI5ZTdlOWE2ZmU3MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKQEAgLTM2LDcgKzM2LDExIEBACiAKICNp
ZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2VDRy5oIgorI2lmICFQTEFURk9STShJT1Mp
CiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Cisj
ZWxzZQorI2luY2x1ZGUgPEltYWdlSU8vQ0dJbWFnZURlc3RpbmF0aW9uLmg+CisjZW5kaWYKICNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYKIApAQCAtMjI0LDYgKzIyOCwzNCBAQCBz
dGF0aWMgdm9pZCBpbml0aWFsaXplU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXMoKQogICAgIHN1cHBv
cnRlZEltYWdlTUlNRVR5cGVzLT5yZW1vdmUoImFwcGxpY2F0aW9uL3BkZiIpOwogICAgIHN1cHBv
cnRlZEltYWdlTUlNRVR5cGVzLT5yZW1vdmUoImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiKTsKIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBBZGQgbWFsZm9ybWVkIGltYWdlIG1pbWV0eXBlIGZv
ciBjb21wYXRpYmlsaXR5IHdpdGggTWFpbCBhbmQgdG8gaGFuZGxlIG1hbGZvcm1lZCBtaW1ldHlw
ZXMgZnJvbSB0aGUgbmV0CisgICAgLy8gVGhlc2Ugd2VyZSByZW1vdmVkIGZvciA8cmRhcjovL3By
b2JsZW0vNjU2NDUzOD4gUmUtZW5hYmxlIFVUSSBjb2RlIGluIFdlYkNvcmUgbm93IHRoYXQgTW9i
aWxlQ29yZVNlcnZpY2VzIGV4aXN0cworICAgIC8vIEJ1dCBNYWlsIHJlbGllcyBvbiBhdCBsZWFz
dCBpbWFnZS90aWYgcmVwb3J0ZWQgYXMgYmVpbmcgc3VwcG9ydGVkIChzaG91bGQgYmUgaW1hZ2Uv
dGlmZikuCisgICAgLy8gVGhpcyBjYW4gYmUgcmVtb3ZlZCB3aGVuIE1haWwgYWRkcmVzc2VzOgor
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83ODc5NTEwPiBNYWlsIHNob3VsZCB1c2Ugc3RhbmRhcmQg
aW1hZ2UgbWltZXR5cGVzIAorICAgIC8vIGFuZCB3ZSBmaXggc25pZmZpbmcgc28gdGhhdCBpdCBj
b3JyZWN0cyBpdGVtcyBzdWNoIGFzIGltYWdlL2pwZyAtPiBpbWFnZS9qcGVnLgorICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBtYWxmb3JtZWRNSU1FVHlwZXNbXSA9IHsKKyAgICAgICAgLy8gSlBFRyAo
aW1hZ2UvanBlZykKKyAgICAgICAgImltYWdlL2pwZyIsICJpbWFnZS9qcF8iLCAiaW1hZ2UvanBl
XyIsICJhcHBsaWNhdGlvbi9qcGciLCAiYXBwbGljYXRpb24veC1qcGciLCAiaW1hZ2UvcGlwZWci
LAorICAgICAgICAiaW1hZ2Uvdm5kLnN3aXRmdmlldy1qcGVnIiwgImltYWdlL3gteGJpdG1hcCIs
CisgICAgICAgIC8vIEdJRiAoaW1hZ2UvZ2lmKQorICAgICAgICAiaW1hZ2UvZ2lfIiwKKyAgICAg
ICAgLy8gUE5HIChpbWFnZS9wbmcpCisgICAgICAgICJhcHBsaWNhdGlvbi9wbmciLCAiYXBwbGlj
YXRpb24veC1wbmciLAorICAgICAgICAvLyBUSUZGIChpbWFnZS90aWZmKQorICAgICAgICAiaW1h
Z2UveC10aWYiLCAiaW1hZ2UvdGlmIiwgImltYWdlL3gtdGlmZiIsICJhcHBsaWNhdGlvbi90aWYi
LCAiYXBwbGljYXRpb24veC10aWYiLCAiYXBwbGljYXRpb24vdGlmZiIsCisgICAgICAgICJhcHBs
aWNhdGlvbi94LXRpZmYiLAorICAgICAgICAvLyBCTVAgKGltYWdlL2JtcCwgaW1hZ2UveC1iaXRt
YXApCisgICAgICAgICJpbWFnZS94LWJtcCIsICJpbWFnZS94LXdpbi1iaXRtYXAiLCAiaW1hZ2Uv
eC13aW5kb3dzLWJtcCIsICJpbWFnZS9tcy1ibXAiLCAiaW1hZ2UveC1tcy1ibXAiLAorICAgICAg
ICAiYXBwbGljYXRpb24vYm1wIiwgImFwcGxpY2F0aW9uL3gtYm1wIiwgImFwcGxpY2F0aW9uL3gt
d2luLWJpdG1hcCIsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJB
WV9MRU5HVEgobWFsZm9ybWVkTUlNRVR5cGVzKTsgKytpKSB7CisgICAgICAgIHN1cHBvcnRlZElt
YWdlTUlNRVR5cGVzLT5hZGQobWFsZm9ybWVkTUlNRVR5cGVzW2ldKTsKKyAgICAgICAgc3VwcG9y
dGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlcy0+YWRkKG1hbGZvcm1lZE1JTUVUeXBlc1tpXSk7Cisg
ICAgfQorI2VuZGlmCisKICNlbHNlCiAgICAgLy8gYXNzdW1lIHRoYXQgYWxsIGltcGxlbWVudGF0
aW9ucyBhdCBsZWFzdCBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgc3RhbmRhcmQKICAgICAvLyBpbWFn
ZSB0eXBlczoKQEAgLTMzMSw5ICszNjMsMTEgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1cHBv
cnRlZE5vbkltYWdlTWltZVR5cGVzKCkKICAgICAgICAgInRleHQvIiwKICAgICAgICAgImFwcGxp
Y2F0aW9uL3htbCIsCiAgICAgICAgICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLAorI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgICAgICJhcHBsaWNhdGlvbi92bmQud2FwLnhodG1sK3htbCIsCiAgICAg
ICAgICJhcHBsaWNhdGlvbi9yc3MreG1sIiwKICAgICAgICAgImFwcGxpY2F0aW9uL2F0b20reG1s
IiwKKyNlbmRpZgogICAgICAgICAiYXBwbGljYXRpb24vanNvbiIsCiAjaWYgRU5BQkxFKFNWRykK
ICAgICAgICAgImltYWdlL3N2Zyt4bWwiLApAQCAtNDQwLDcgKzQ3NCwxMSBAQCBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplVW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzKCkKICAgICAgICAgInRleHQveC1x
aWYiLAogICAgICAgICAidGV4dC94LWNzdiIsCiAgICAgICAgICJ0ZXh0L3gtdmNmIiwKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgICAgICAidGV4dC9ydGYiLAorI2Vsc2UKKyAgICAgICAgInRleHQv
dm5kLnN1bi5qMm1lLmFwcC1kZXNjcmlwdG9yIiwKKyNlbmRpZgogICAgIH07CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHR5cGVzKTsgKytpKQogICAgICAgdW5z
dXBwb3J0ZWRUZXh0TUlNRVR5cGVzLT5hZGQodHlwZXNbaV0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKaW5kZXggNWU4ZTdjYzNmYzIx
MGY2NjBiZTBkNmJhMTc0YjU4ODA3NGVkZDkyYi4uNjJlZTFhZDU2YTE5M2UzMTA0YTY4NDY4MzQ0
M2Q4OTM3ZGI1MTY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuY3BwCkBAIC00MCw2ICs0MCwxNCBAQCBNZW1vcnlQcmVzc3VyZUhhbmRs
ZXI6Ok1lbW9yeVByZXNzdXJlSGFuZGxlcigpCiAgICAgOiBtX2luc3RhbGxlZChmYWxzZSkKICAg
ICAsIG1fbGFzdFJlc3BvbmRUaW1lKDApCiAgICAgLCBtX2xvd01lbW9yeUhhbmRsZXIocmVsZWFz
ZU1lbW9yeSkKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IENhbiB3ZSBzaGFyZSBt
b3JlIG9mIHRoaXMgd2l0aCBPcGVuU291cmNlPworICAgICwgbV9yZWNlaXZlZE1lbW9yeVByZXNz
dXJlKDApCisgICAgLCBtX21lbW9yeVByZXNzdXJlUmVhc29uKE1lbW9yeVByZXNzdXJlUmVhc29u
Tm9uZSkKKyAgICAsIG1fY2xlYXJQcmVzc3VyZU9uTWVtb3J5UmVsZWFzZSh0cnVlKQorICAgICwg
bV9yZWxlYXNlTWVtb3J5QmxvY2soMCkKKyAgICAsIG1fb2JzZXJ2ZXIoMCkKKyNlbmRpZgogewog
fQogCkBAIC00OSw3ICs1Nyw5IEBAIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjppbnN0YWxs
KCkgeyB9CiB2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6dW5pbnN0YWxsKCkgeyB9CiB2b2lk
IE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6aG9sZE9mZih1bnNpZ25lZCkgeyB9CiB2b2lkIE1lbW9y
eVByZXNzdXJlSGFuZGxlcjo6cmVzcG9uZFRvTWVtb3J5UHJlc3N1cmUoKSB7IH0KKyNpZiAhUExB
VEZPUk0oSU9TKQogdm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnJlbGVhc2VNZW1vcnkoYm9v
bCkgeyB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKaW5kZXggOTUwYWU4NTJk
ZmUwOTA4ZWIzNDM4OWNmY2ZiNmI0MjZiOTRjNzk0Zi4uZWJmYjg0Y2ExMGI3ZmZlM2M5OTlkM2Jl
MTU1NDEzMWFiNjgzZjA3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVt
b3J5UHJlc3N1cmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmgKQEAgLTI5LDggKzI5LDIwIEBACiAjaW5jbHVkZSA8dGltZS5oPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKKyNpZiBQTEFURk9STShJT1MpCitlbnVtIE1lbW9yeVByZXNzdXJlUmVhc29uIHsKKyAg
ICBNZW1vcnlQcmVzc3VyZVJlYXNvbk5vbmUgPSAwIDw8IDAsCisgICAgTWVtb3J5UHJlc3N1cmVS
ZWFzb25WTVByZXNzdXJlID0gMSA8PCAwLAorICAgIE1lbW9yeVByZXNzdXJlUmVhc29uVk1TdGF0
dXMgPSAxIDw8IDEsCit9OworI2VuZGlmCisKIHR5cGVkZWYgdm9pZCAoKkxvd01lbW9yeUhhbmRs
ZXIpKGJvb2wgY3JpdGljYWwpOwogCiBjbGFzcyBNZW1vcnlQcmVzc3VyZUhhbmRsZXIgewpAQCAt
NDYsNiArNTgsMTYgQEAgcHVibGljOgogICAgICAgICBtX2xvd01lbW9yeUhhbmRsZXIgPSBoYW5k
bGVyOwogICAgIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogQ2FuIHdlIHNo
YXJlIG1vcmUgb2YgdGhpcyB3aXRoIE9wZW5Tb3VyY2U/CisgICAgdm9pZCBpbnN0YWxsTWVtb3J5
UmVsZWFzZUJsb2NrKHZvaWQgKF5yZWxlYXNlTWVtb3J5QmxvY2spKCksIGJvb2wgY2xlYXJQcmVz
c3VyZU9uTWVtb3J5UmVsZWFzZSA9IHRydWUpOworICAgIHZvaWQgc2V0UmVjZWl2ZWRNZW1vcnlQ
cmVzc3VyZShNZW1vcnlQcmVzc3VyZVJlYXNvbik7CisgICAgYm9vbCBoYXNSZWNlaXZlZE1lbW9y
eVByZXNzdXJlKCk7CisgICAgdm9pZCBjbGVhck1lbW9yeVByZXNzdXJlKCk7CisgICAgYm9vbCBz
aG91bGRXYWl0Rm9yTWVtb3J5Q2xlYXJNZXNzYWdlKCk7CisgICAgdm9pZCByZXNwb25kVG9NZW1v
cnlQcmVzc3VyZUlmTmVlZGVkKCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIHVuaW5z
dGFsbCgpOwogCkBAIC02MCw2ICs4MiwxNSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pbnN0YWxs
ZWQ7CiAgICAgdGltZV90IG1fbGFzdFJlc3BvbmRUaW1lOwogICAgIExvd01lbW9yeUhhbmRsZXIg
bV9sb3dNZW1vcnlIYW5kbGVyOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHVpbnQzMl90IG1f
cmVjZWl2ZWRNZW1vcnlQcmVzc3VyZTsKKyAgICB1aW50MzJfdCBtX21lbW9yeVByZXNzdXJlUmVh
c29uOworICAgIGJvb2wgbV9jbGVhclByZXNzdXJlT25NZW1vcnlSZWxlYXNlOworICAgIHZvaWQg
KF5tX3JlbGVhc2VNZW1vcnlCbG9jaykoKTsKKyAgICBDRlJ1bkxvb3BPYnNlcnZlclJlZiBtX29i
c2VydmVyOworICAgIE11dGV4IG1fb2JzZXJ2ZXJNdXRleDsKKyNlbmRpZgogfTsKICAKIC8vIEZ1
bmN0aW9uIHRvIG9idGFpbiB0aGUgZ2xvYmFsIG1lbW9yeSBwcmVzc3VyZSBvYmplY3QuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCmluZGV4IDU5
YmEyOWIzOWVhMDhkMGNlMjFhMWI2MDQ5ZGYwOGQwYTljZjA1ZGMuLmY3MzAzN2RjNmMxODI2MGUy
YTEyYjY2NzdhNzNiZWY0MTM2NmMyMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCkBAIC0zNiw2ICszNiwxNCBAQAogT0JKQ19DTEFTUyBO
U0V2ZW50OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisjaWZkZWYgX19PQkpDX18KK0Bj
bGFzcyBXZWJFdmVudDsKKyNlbHNlCitjbGFzcyBXZWJFdmVudDsKKyNlbmRpZgorI2VuZGlmCisK
ICNpZiBQTEFURk9STShHVEspCiB0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRL
ZXk7CiAjaW5jbHVkZSAiQ29tcG9zaXRpb25SZXN1bHRzLmgiCkBAIC0xMjcsNyArMTM1LDExIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQorI2lmICFQ
TEFURk9STShJT1MpCiAgICAgICAgIE5TRXZlbnQqIG1hY0V2ZW50KCkgY29uc3QgeyByZXR1cm4g
bV9tYWNFdmVudC5nZXQoKTsgfQorI2Vsc2UKKyAgICAgICAgV2ViRXZlbnQgKmV2ZW50KCkgY29u
c3QgeyByZXR1cm4gbV9FdmVudC5nZXQoKTsgfQorI2VuZGlmCiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKFdJTikKQEAgLTE3MCw3ICsxODIsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlm
CiAKICNpZiBQTEFURk9STShNQUMpCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgUmV0YWlu
UHRyPE5TRXZlbnQ+IG1fbWFjRXZlbnQ7CisjZWxzZQorICAgICAgICBSZXRhaW5QdHI8V2ViRXZl
bnQ+IG1fRXZlbnQ7CisjZW5kaWYKICNlbmRpZgogI2lmIFBMQVRGT1JNKEdUSykKICAgICAgICAg
R2RrRXZlbnRLZXkqIG1fZ2RrRXZlbnRLZXk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtTW91c2VFdmVudC5oCmluZGV4IDNhNDI1MzM2NTBlNjA0MDk5Y2RhMDE3N2ZiMTc3Yjli
OGViODYzZjMuLmQ2NGRkMjMwNzIzNTA4ODYwNTg2Nzk5ZDgwYWVmY2JkNGQxZjdiYjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCkBAIC01Nyw3ICs1
Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9idXR0b24oTm9CdXR0
b24pCiAgICAgICAgICAgICAsIG1fY2xpY2tDb3VudCgwKQogICAgICAgICAgICAgLCBtX21vZGlm
aWVyRmxhZ3MoMCkKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oSU9TKQogICAgICAgICAgICAgLCBtX2V2ZW50TnVtYmVyKDApCiAjZWxpZiBQTEFURk9S
TShXSU4pCiAgICAgICAgICAgICAsIG1fZGlkQWN0aXZhdGVXZWJWaWV3KGZhbHNlKQpAQCAtNzMs
NyArNzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fYnV0dG9uKGJ1
dHRvbikKICAgICAgICAgICAgICwgbV9jbGlja0NvdW50KGNsaWNrQ291bnQpCiAgICAgICAgICAg
ICAsIG1fbW9kaWZpZXJGbGFncygwKQotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShN
QUMpICYmICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICAsIG1fZXZlbnROdW1iZXIoMCkKICNl
bGlmIFBMQVRGT1JNKFdJTikKICAgICAgICAgICAgICwgbV9kaWRBY3RpdmF0ZVdlYlZpZXcoZmFs
c2UpCkBAIC0xMDUsNyArMTA1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQbGF0
Zm9ybU1vdXNlRXZlbnQoY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiwgSW50UG9pbnQpOwog
I2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZP
Uk0oSU9TKQogICAgICAgICBpbnQgZXZlbnROdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50
TnVtYmVyOyB9CiAjZW5kaWYKIApAQCAtMTI5LDcgKzEyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgaW50IG1fY2xpY2tDb3VudDsKICAgICAgICAgdW5zaWduZWQgbV9tb2RpZmll
ckZsYWdzOwogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRG
T1JNKElPUykKICAgICAgICAgaW50IG1fZXZlbnROdW1iZXI7CiAjZWxpZiBQTEFURk9STShXSU4p
CiAgICAgICAgIGJvb2wgbV9kaWRBY3RpdmF0ZVdlYlZpZXc7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1TY3JlZW4uaAppbmRleCA5MzM2YzdmNjQ1YWYwZmE5OTFmNGI1MzhmNmU0NDU5
NjU2NWQ1MzhmLi5hMjRlZGQ3OTFkOTM5N2JhYmVmODYyM2UzMDM5MTc5ODNlYmU1MDJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiBPQkpDX0NMQVNTIE5TU2NyZWVuOwogT0JKQ19D
TEFTUyBOU1dpbmRvdzsKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRS
WV9UWVBFUwpAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgRmxvYXRS
ZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kik7CiAgICAgdm9pZCBzY3JlZW5Db2xvclBy
b2ZpbGUoQ29sb3JQcm9maWxlJik7CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0o
TUFDKSAmJiAhUExBVEZPUk0oSU9TKQogICAgIE5TU2NyZWVuICpzY3JlZW5Gb3JXaW5kb3coTlNX
aW5kb3cgKik7CiAKICAgICBGbG9hdFJlY3QgdG9Vc2VyU3BhY2UoY29uc3QgTlNSZWN0JiwgTlNX
aW5kb3cgKmRlc3RpbmF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9S
dW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwCmluZGV4IGU5NDAwYTA5YzI4NmE0NDQwYzMyNjU5
ZTQ5ZTMwZTUwY2Q5ZTQ0ZGYuLjI2ZTQ5YmRiYjM5MmU2ZDE0OWFjNzc3NTcyYTkyNjQ3MDZjMmU5
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0
aW9uQ2hlY2tzLmNwcApAQCAtMzcsNyArMzcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
CiBzdGF0aWMgYm9vbCBtYWluQnVuZGxlSXNFcXVhbFRvKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRl
bnRpZmllclN0cmluZykKIHsKLSNpZiBVU0UoQ0YpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBj
b25zaWRlciBtZXJnaW5nIHRoaXMgZmlsZSB3aXRoIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lP
Uy5tbS4KKyAgICAvLyBUaGVuIHdlIGNhbiByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQu
CisjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oSU9TKQogICAgIENGQnVuZGxlUmVmIG1haW5CdW5k
bGUgPSBDRkJ1bmRsZUdldE1haW5CdW5kbGUoKTsKICAgICBpZiAoIW1haW5CdW5kbGUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1
bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGIzNzhiYWFkZGQwYjUxNWE4
ODZjYWY2MzFjOWJlMzI2YzRmZDZmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oCkBAIC0wLDAgKzEsNDkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1NfaAorI2RlZmluZSBS
dW50aW1lQXBwbGljYXRpb25DaGVja3NJT1NfaAorCisvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNp
ZGVyIG1lcmdpbmcgdGhpcyBmaWxlIHdpdGggUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmguCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgYXBwbGljYXRpb25Jc01vYmlsZU1haWwoKTsKK2Jv
b2wgYXBwbGljYXRpb25Jc01vYmlsZVNhZmFyaSgpOworYm9vbCBhcHBsaWNhdGlvbklzRHVtcFJl
bmRlclRyZWUoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc01vYmlsZVN0b3JlKCk7Citib29sIGFwcGxp
Y2F0aW9uSXNXZWJBcHAoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc09rQ3VwaWQoKTsKK2Jvb2wgYXBw
bGljYXRpb25Jc0ZhY2Vib29rKCk7Citib29sIGFwcGxpY2F0aW9uSXNFcGljdXJpb3VzKCk7Citi
b29sIGFwcGxpY2F0aW9uSXNEYWlqaXNlbkRpY3Rpb25hcnkoKTsKK2Jvb2wgYXBwbGljYXRpb25J
c05BU0FIRCgpOworYm9vbCBhcHBsaWNhdGlvbklzTUFTSCgpOworYm9vbCBhcHBsaWNhdGlvbklz
VGhlRWNvbm9taXN0T25JUGhvbmUoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc1dlYlByb2Nlc3MoKTsK
K2Jvb2wgYXBwbGljYXRpb25Jc0lCb29rc09uSU9TKCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPU19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWY0NDIwMzBjMjM1OWIzZmQxY2VkMTE1ZjU4MGM4MmVlMzZlNjBjMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrc0lPUy5tbQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIgorCisvLyBGSVhNRTog
V2Ugc2hvdWxkIGNvbnNpZGVyIG1lcmdpbmcgdGhpcyBmaWxlIHdpdGggUnVudGltZUFwcGxpY2F0
aW9uQ2hlY2tzLmNwcC4KKyNpZiBQTEFURk9STShJT1MpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworYm9vbCBhcHBsaWNhdGlvbklzTW9iaWxlTWFpbCgpCit7CisgICAgc3RhdGljIGJvb2wgaXNN
b2JpbGVNYWlsID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNF
cXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLm1vYmlsZW1haWwiXTsKKyAgICByZXR1cm4gaXNNb2Jp
bGVNYWlsOworfQorCitib29sIGFwcGxpY2F0aW9uSXNNb2JpbGVTYWZhcmkoKQoreworICAgIHN0
YXRpYyBib29sIGlzTW9iaWxlU2FmYXJpID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxl
SWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLm1vYmlsZXNhZmFyaSJdOwor
ICAgIHJldHVybiBpc01vYmlsZVNhZmFyaTsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzRHVtcFJl
bmRlclRyZWUoKQoreworICAgIHN0YXRpYyBib29sIGlzRHVtcFJlbmRlclRyZWUgPSBbW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20u
YXBwbGUuRHVtcFJlbmRlclRyZWUiXTsKKyAgICByZXR1cm4gaXNEdW1wUmVuZGVyVHJlZTsKK30K
KworYm9vbCBhcHBsaWNhdGlvbklzTW9iaWxlU3RvcmUoKQoreworICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzTW9iaWxlU3RvcmUgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlm
aWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uYXBwbGUuTW9iaWxlU3RvcmUiXTsKKyAgICByZXR1
cm4gaXNNb2JpbGVTdG9yZTsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzV2ViQXBwKCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBpc1dlYkFwcCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlk
ZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5hcHBsZS53ZWJhcHAiXTsKKyAgICByZXR1
cm4gaXNXZWJBcHA7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc09rQ3VwaWQoKQoreworICAgIHN0
YXRpYyBib29sIGlzT2tDdXBpZCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50
aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5va2N1cGlkLmFwcCJdOworICAgIHJldHVybiBp
c09rQ3VwaWQ7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc0ZhY2Vib29rKCkKK3sKKyAgICBzdGF0
aWMgYm9vbCBpc0ZhY2Vib29rID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRp
Zmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmZhY2Vib29rLkZhY2Vib29rIl07CisgICAgcmV0
dXJuIGlzRmFjZWJvb2s7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc0VwaWN1cmlvdXMoKQorewor
ICAgIHN0YXRpYyBib29sIGlzRXBpY3VyaW91cyA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1
bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5jb25kZW5ldC5FcGljdXJpb3Vz
Il07CisgICAgcmV0dXJuIGlzRXBpY3VyaW91czsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzRGFp
amlzZW5EaWN0aW9uYXJ5KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc0RhaWppc2VuRGljdGlvbmFy
eSA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0
cmluZzpAImpwLmNvLnNob2dha3VrYW4uZGFpamlzZW4yMDA5aSJdOworICAgIHJldHVybiBpc0Rh
aWppc2VuRGljdGlvbmFyeTsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzTkFTQUhEKCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBpc05BU0FIRCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlk
ZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImdvdi5uYXNhLk5BU0FIRCJdOworICAgIHJldHVy
biBpc05BU0FIRDsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzTUFTSCgpCit7CisgICAgc3RhdGlj
IGJvb2wgaXNNQVNIID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0g
aXNFcXVhbFRvU3RyaW5nOkAiY29tLm1hZ25hdGVpbnRlcmFjdGl2ZS5tYXNoZ2FtZSJdCisgICAg
ICAgIHx8IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxU
b1N0cmluZzpAImNvbS5tYWduYXRlaW50ZXJhY3RpdmUubWFzaGxpdGVnYW1lIl0KKyAgICAgICAg
fHwgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3Ry
aW5nOkAiY29tLm1hZ25hdGVpbnRlcmFjdGl2ZS5tYXNoY2hyaXN0bWFzIl0KKyAgICAgICAgfHwg
W1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5n
OkAiY29tLm1hZ25hdGVpbnRlcmFjdGl2ZS5tYXNoaGFsbG93ZWVuIl0KKyAgICAgICAgfHwgW1tb
TlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAi
Y29tLm1hZ25hdGVpbnRlcmFjdGl2ZS5tYXNodmFsZW50aW5lcyJdOworICAgIHJldHVybiBpc01B
U0g7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc1RoZUVjb25vbWlzdE9uSVBob25lKCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBpc1RoZUVjb25vbWlzdE9uSVBob25lID0gW1tbTlNCdW5kbGUgbWFpbkJ1
bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmVjb25vbWlzdC5p
cGhvbmUiXTsKKyAgICByZXR1cm4gaXNUaGVFY29ub21pc3RPbklQaG9uZTsKK30KKworLy8gRklY
TUU6IHRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB3aGVuIHRoZSBXZWJQcm9jZXNzIGlzIGNoYW5n
ZWQgdG8gYW4gWFBDIHNlcnZpY2UuCitib29sIGFwcGxpY2F0aW9uSXNXZWJQcm9jZXNzKCkKK3sK
KyAgICBzdGF0aWMgYm9vbCBpc1dlYlByb2Nlc3MgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBi
dW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uYXBwbGUuV2ViS2l0LldlYkNv
bnRlbnQiXSB8fCBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0Vx
dWFsVG9TdHJpbmc6QCJjb20uYXBwbGUuV2ViUHJvY2VzcyJdOworICAgIHJldHVybiBpc1dlYlBy
b2Nlc3M7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc0lCb29rc09uSU9TKCkKK3sKKyAgICBzdGF0
aWMgYm9vbCBpc0lCb29rc09uSU9TID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRl
bnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLmlCb29rcyJdOworICAgIHJldHVy
biBpc0lCb29rc09uSU9TOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5j
cHAKaW5kZXggNzg3ZmIxMjg0MzVkYjY0NzA0OWZiMzFiOGU1NzBmNmYwOGE5NzdlZC4uZjhkYjI1
MGMwMTg2ZjY0MGNmNjMyMmJmZmY0NDM5YzI4MzkwNGVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtMzksNyArMzksNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLSNpZiAhRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisjaWYgIUVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKSAmJiAhUExBVEZPUk0oSU9TKQogUGFzc093blB0cjxTY3JvbGxBbmlt
YXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFy
ZWEpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxl
QXJlYSkpOwpAQCAtMTIzLDYgKzEyMywxMyBAQCBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVX
aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKICAgICByZXR1cm4gaGFuZGxl
ZDsKIH0KIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCitib29sIFNjcm9sbEFuaW1hdG9yOjpo
YW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorI2VuZGlmCisKIHZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNldEN1cnJlbnRQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKIHsKICAgICBtX2N1cnJlbnRQb3NYID0g
cG9zaXRpb24ueCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5k
ZXggMjBlOWE1NmRkMjRjYmIzMmQzODY4NTEzNmUxYmQ3ZTVhM2I0NzdjMS4uZjBkYzk4NDYzOGRl
ODdlNDk5NjNlODdiZjkwNWU3OTMzMWQyY2JkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5oCkBAIC00MCw2ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBTY3Jv
bGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJhcjsKIApAQCAtNjIsNiArNjMsMTAgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50Jik7CiAKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpOworI2VuZGlmCisKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnRQaGFzZShQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSkgeyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxUeXBlcy5oCmluZGV4IGY2MzBkYWUyNjU4M2JjMDkyNTAyYWI3ODNjMjM5Y2NlYzZkNGRm
MmQuLjk2NDg2YTliZDJkNTA0NzhlMDczMDZkNzU5NDVmNWNlZGVjOWFjYTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaApAQCAtMjYsNiArMjYsOSBAQAogI2lmbmRlZiBTY3Jv
bGxUeXBlc19oCiAjZGVmaW5lIFNjcm9sbFR5cGVzX2gKIAorLy8gV1RGX1BMQVRGT1JNX0lPUwor
I2lmZGVmIF9fY3BsdXNwbHVzCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGVudW0gU2Ny
b2xsRGlyZWN0aW9uIHsKQEAgLTE3OCw0ICsxODEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgfTsKIH0KIAorI2VuZGlmIC8vIF9fY3BsdXNwbHVzCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAppbmRleCBmZjIyYzRkMGU5NjU0YjFiZGIzZTE0NjdkNGRj
OTc0ODgyMDcyOWQ5Li45YjMzYzMxZGFmMTc2ZDI1YTQ3MWIyZTQ3ZTcyNGJmNDU3ZjMyNzNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApAQCAtMjQxLDggKzI0MSwxMCBA
QCBJbnRTaXplIFNjcm9sbFZpZXc6OnVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKFZpc2libGVD
b250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYgogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAg
ICAgICByZXR1cm4gcGxhdGZvcm1WaXNpYmxlQ29udGVudFNpemUoc2Nyb2xsYmFySW5jbHVzaW9u
ID09IEluY2x1ZGVTY3JvbGxiYXJzKTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFt
X2ZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1fZml4
ZWRWaXNpYmxlQ29udGVudFJlY3Quc2l6ZSgpOworI2VuZGlmCiAKICAgICBpbnQgdmVydGljYWxT
Y3JvbGxiYXJXaWR0aCA9IDA7CiAgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAw
OwpAQCAtMjY0LDggKzI2NiwxMCBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50
UmVjdChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2NvbAogICAgIGlmIChw
bGF0Zm9ybVdpZGdldCgpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1WaXNpYmxlQ29udGVudFJl
Y3Qoc2NvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpOwogCisjaWYgIVBMQVRG
T1JNKElPUykKICAgICBpZiAoIW1fZml4ZWRWaXNpYmxlQ29udGVudFJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gbV9maXhlZFZpc2libGVDb250ZW50UmVjdDsKKyNlbmRpZgogCiAgICAg
RmxvYXRTaXplIHZpc2libGVDb250ZW50U2l6ZSA9IHVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXpl
KHNjb2xsYmFySW5jbHVzaW9uKTsKICAgICB2aXNpYmxlQ29udGVudFNpemUuc2NhbGUoMSAvIHZp
c2libGVDb250ZW50U2NhbGVGYWN0b3IoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3
LmgKaW5kZXggMjBjNjljZWVlYTZlMDUzYjQ3NjA3MTAzYmY3NGFlOTE3MTg4OTMwNS4uZTUyODVm
NGZkYmY0MzlkMGQ4NzMwMmExODc5MWRlZDY5NmIyZTc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuaApAQCAtMzUsNiArMzUsMjQgQEAKIAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBXQUtTY3Jv
bGxWaWV3OworQGNsYXNzIFdBS1ZpZXc7CisjZWxzZQorY2xhc3MgV0FLU2Nyb2xsVmlldzsKK2Ns
YXNzIFdBS1ZpZXc7CisjZW5kaWYKKworI2lmbmRlZiBOU1Njcm9sbFZpZXcKKyNkZWZpbmUgTlNT
Y3JvbGxWaWV3IFdBS1Njcm9sbFZpZXcKKyNlbmRpZgorCisjaWZuZGVmIE5TVmlldworI2RlZmlu
ZSBOU1ZpZXcgV0FLVmlldworI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiAjaWYg
UExBVEZPUk0oTUFDKSAmJiBkZWZpbmVkIF9fT0JKQ19fCiBAcHJvdG9jb2wgV2ViQ29yZUZyYW1l
U2Nyb2xsVmlldzsKICNlbmRpZgpAQCAtNDMsNiArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBUaWxlQ2FjaGU7
CiAKIGNsYXNzIFNjcm9sbFZpZXcgOiBwdWJsaWMgV2lkZ2V0LCBwdWJsaWMgU2Nyb2xsYWJsZUFy
ZWEgewogcHVibGljOgpAQCAtMTQxLDkgKzE2MCwyMCBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIHNl
dEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0IGluc3RlYWQgZm9yIHRoZSBtYWluZnJhbWUsIHRob3Vn
aCB0aGlzIG11c3QgYmUgdXBkYXRlZCBtYW51YWxseSwgZS5nIGp1c3QgYmVmb3JlIHJlc3VtaW5n
IHRoZSBwYWdlCiAgICAgLy8gd2hpY2ggdXN1YWxseSB3aWxsIGhhcHBlbiB3aGVuIHBhbm5pbmcs
IHBpbmNoaW5nIGFuZCByb3RhdGlvbiBlbmRzLCBvciB3aGVuIHNjYWxlIG9yIHBvc2l0aW9uIGFy
ZSBjaGFuZ2VkIG1hbnVhbGx5LgogICAgIHZpcnR1YWwgSW50UmVjdCB2aXNpYmxlQ29udGVudFJl
Y3QoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzID0gRXhjbHVkZVNjcm9sbGJh
cnMpIGNvbnN0IE9WRVJSSURFOworI2lmICFQTEFURk9STShJT1MpCiAgICAgdmlydHVhbCB2b2lk
IHNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50
UmVjdCkgeyBtX2ZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0OyB9
CiAgICAgSW50UmVjdCBmaXhlZFZpc2libGVDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Zml4ZWRWaXNpYmxlQ29udGVudFJlY3Q7IH0KKyNlbmRpZgogICAgIEludFNpemUgdmlzaWJsZVNp
emUoKSBjb25zdCB7IHJldHVybiB2aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCk7IH0KKyNpZiBQ
TEFURk9STShJT1MpCisgICAgLy8gVGhpcyBpcyB0aGUgYXJlYSB0aGF0IGlzIG5vdCBjb3ZlcmVk
IGJ5IFVJIGVsZW1lbnRzLgorICAgIEludFJlY3QgYWN0dWFsVmlzaWJsZUNvbnRlbnRSZWN0KCkg
Y29uc3Q7CisgICAgLy8gVGhpcyBpcyB0aGUgYXJlYSB0aGF0IGlzIHBhcnRpYWxseSBvciBmdWxs
eSBleHBvc2VkLCBhbmQgbWF5IGV4dGVuZCB1bmRlciBvdmVybGFwcGluZyBVSSBlbGVtZW50cy4K
KyAgICBJbnRSZWN0IHZpc2libGVFeHRlbnRDb250ZW50UmVjdCgpIGNvbnN0OworCisgICAgdm9p
ZCBzZXRBY3R1YWxTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOworICAgIFRpbGVDYWNo
ZSogdGlsZUNhY2hlKCk7CisjZW5kaWYKICAgICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiB2aXNpYmxlQ29udGVudFJlY3QoKS53aWR0aCgpOyB9CiAg
ICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHZp
c2libGVDb250ZW50UmVjdCgpLmhlaWdodCgpOyB9CiAKQEAgLTE4MSw2ICsyMTEsMTEgQEAgcHVi
bGljOgogICAgIGludCBzY3JvbGxYKCkgY29uc3QgeyByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS54
KCk7IH0KICAgICBpbnQgc2Nyb2xsWSgpIGNvbnN0IHsgcmV0dXJuIHNjcm9sbFBvc2l0aW9uKCku
eSgpOyB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgaW50IGFjdHVhbFNjcm9sbFgoKSBjb25z
dCB7IHJldHVybiBhY3R1YWxWaXNpYmxlQ29udGVudFJlY3QoKS54KCk7IH0KKyAgICBpbnQgYWN0
dWFsU2Nyb2xsWSgpIGNvbnN0IHsgcmV0dXJuIGFjdHVhbFZpc2libGVDb250ZW50UmVjdCgpLnko
KTsgfQorI2VuZGlmCisKICAgICAvLyBzY3JvbGxPZmZzZXQoKSBhbmNob3JzIGl0cyAoMCwwKSBw
b2ludCBhdCB0aGUgdG9wIGVuZCBvZiB0aGUgaGVhZGVyIGlmIHRoaXMgU2Nyb2xsYWJsZUFyZWEK
ICAgICAvLyBoYXMgYSBoZWFkZXIsIHNvIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSB0b3RhbENvbnRl
bnRzU2l6ZSgpLiBzY3JvbGxPZmZzZXRSZWxhdGl2ZVRvRG9jdW1lbnQoKQogICAgIC8vIGFuY2hv
cnMgKDAsMCkgYXQgdGhlIHRvcCBvZiB0aGUgRG9jdW1lbnQsIHdoaWNoIHdpbGwgYmUgYmVuZWF0
aCBhbnkgaGVhZGVycywgc28gaXQgaXMgcmVsYXRpdmUKQEAgLTM1NCw3ICszODksOSBAQCBwcml2
YXRlOgogICAgIC8vIHdoZXRoZXIgaXQgaXMgc2FmZSB0byBibGl0IG9uIHNjcm9sbC4KICAgICBi
b29sIG1fY2FuQmxpdE9uU2Nyb2xsOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBJbnRSZWN0
IG1fZml4ZWRWaXNpYmxlQ29udGVudFJlY3Q7CisjZW5kaWYKICAgICBJbnRTaXplIG1fc2Nyb2xs
T2Zmc2V0OyAvLyBGSVhNRTogV291bGQgcmF0aGVyIHN0b3JlIHRoaXMgYXMgYSBwb3NpdGlvbiwg
YnV0IHdlIHdpbGwgd2FpdCB0byBtYWtlIHRoaXMgY2hhbmdlIHVudGlsIG1vcmUgY29kZSBpcyBz
aGFyZWQuCiAgICAgSW50UG9pbnQgbV9jYWNoZWRTY3JvbGxQb3NpdGlvbjsKICAgICBJbnRTaXpl
IG1fZml4ZWRMYXlvdXRTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuY3BwCmluZGV4IGMxOGRlYTdlZGM0OTFhZDVmZDUyYjY2Y2QyM2Y5Y2JmNTgyZDRlOTkuLjJi
Yzg0YzVjMWIyOTQzYTMyMWI0MDhjNzg1M2UwYjk5NTJkMzZmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTE3Niw2ICsxNzYsMTMgQEAgYm9vbCBT
Y3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
IHdoZWVsRXZlbnQpCiAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCktPmhhbmRsZVdoZWVsRXZl
bnQod2hlZWxFdmVudCk7CiB9CiAKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorYm9vbCBTY3Jv
bGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRv
dWNoRXZlbnQpCit7CisgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCktPmhhbmRsZVRvdWNoRXZl
bnQodG91Y2hFdmVudCk7Cit9CisjZW5kaWYKKwogLy8gTk9URTogT25seSBjYWxsZWQgZnJvbSBJ
bnRlcm5hbHMgZm9yIHRlc3RpbmcuCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPZmZz
ZXRGcm9tSW50ZXJuYWxzKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7CkBAIC0zODksNiArMzk2
LDMxIEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNlcnZpY2VTY3JvbGxBbmltYXRpb25zKCkKICAg
ICAgICAgc2Nyb2xsQW5pbWF0b3ItPnNlcnZpY2VTY3JvbGxBbmltYXRpb25zKCk7CiB9CiAKKyNp
ZiBQTEFURk9STShJT1MpCitib29sIFNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZEluQm90aERpcmVj
dGlvbnMoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlz
UGlubmVkSG9yaXpvbnRhbGx5SW5EaXJlY3Rpb24oc2Nyb2xsRGVsdGEud2lkdGgoKSkgJiYgaXNQ
aW5uZWRWZXJ0aWNhbGx5SW5EaXJlY3Rpb24oc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpOworfQorCiti
b29sIFNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZEhvcml6b250YWxseUluRGlyZWN0aW9uKGludCBo
b3Jpem9udGFsU2Nyb2xsRGVsdGEpIGNvbnN0Cit7CisgICAgaWYgKGhvcml6b250YWxTY3JvbGxE
ZWx0YSA8IDAgJiYgaXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01pbmltdW1Qb3NpdGlvbigp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbERlbHRhID4g
MCAmJiBpc0hvcml6b250YWxTY3JvbGxlclBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxhYmxl
QXJlYTo6aXNQaW5uZWRWZXJ0aWNhbGx5SW5EaXJlY3Rpb24oaW50IHZlcnRpY2FsU2Nyb2xsRGVs
dGEpIGNvbnN0Cit7CisgICAgaWYgKHZlcnRpY2FsU2Nyb2xsRGVsdGEgPCAwICYmIGlzVmVydGlj
YWxTY3JvbGxlclBpbm5lZFRvTWluaW11bVBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGlmICh2ZXJ0aWNhbFNjcm9sbERlbHRhID4gMCAmJiBpc1ZlcnRpY2FsU2Nyb2xsZXJQ
aW5uZWRUb01heGltdW1Qb3NpdGlvbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiBJbnRQb2ludCBTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewogICAgIGludCB4ID0gaG9yaXpvbnRh
bFNjcm9sbGJhcigpID8gaG9yaXpvbnRhbFNjcm9sbGJhcigpLT52YWx1ZSgpIDogMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCmluZGV4IGUzMzczZTRjOTFjOWUyNWVl
MDMyNTdiNzRmNjhlZDRjY2JmODYzMjYuLmYxNzQ3MWQ0ZDdkMThlYWI0OWIyY2Q0NWE3YWM1N2Zj
NWYxYjVjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaApAQCAt
MzMsNiArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CiBj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBQ
bGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBTY3JvbGxBbmltYXRvcjsKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCkBAIC01Nyw2ICs1OCwxOSBAQCBwdWJsaWM6CiAKICAgICBib29s
IGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKKyNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorICAgIHZpcnR1YWwgYm9vbCBpc1RvdWNoU2Nyb2xsYWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZVRvdWNoRXZlbnQo
Y29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50Jik7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykK
KyAgICB2aXJ0dWFsIGJvb2wgaXNPdmVyZmxvd1Njcm9sbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGRpZEVuZFNjcm9sbCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVTY3JvbGwo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNVc2VyU2Nyb2xsKGJvb2wpIHsgfQorI2VuZGlm
CisKICAgICAvLyBGdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIGlmIHlvdSBjYW4gc2Nyb2xsIHBh
c3QgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuCiAgICAgYm9vbCBjb25zdHJhaW5zU2Nyb2xsaW5n
VG9Db250ZW50RWRnZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RyYWluc1Njcm9sbGluZ1RvQ29u
dGVudEVkZ2U7IH0KICAgICB2b2lkIHNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdl
KGJvb2wgY29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UpIHsgbV9jb25zdHJhaW5zU2Ny
b2xsaW5nVG9Db250ZW50RWRnZSA9IGNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlOyB9
CkBAIC0xODIsNiArMTk2LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVB
bmltYXRpb24oKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgc2VydmljZVNjcm9sbEFuaW1h
dGlvbnMoKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIGlzSG9yaXpvbnRhbFNjcm9s
bGVyUGlubmVkVG9NaW5pbXVtUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiAhaG9yaXpvbnRhbFNj
cm9sbGJhcigpIHx8IHNjcm9sbFBvc2l0aW9uKGhvcml6b250YWxTY3JvbGxiYXIoKSkgPD0gbWlu
aW11bVNjcm9sbFBvc2l0aW9uKCkueCgpOyB9CisgICAgYm9vbCBpc0hvcml6b250YWxTY3JvbGxl
clBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gIWhvcml6b250YWxTY3Jv
bGxiYXIoKSB8fCBzY3JvbGxQb3NpdGlvbihob3Jpem9udGFsU2Nyb2xsYmFyKCkpID49IG1heGlt
dW1TY3JvbGxQb3NpdGlvbigpLngoKTsgfQorICAgIGJvb2wgaXNWZXJ0aWNhbFNjcm9sbGVyUGlu
bmVkVG9NaW5pbXVtUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiAhdmVydGljYWxTY3JvbGxiYXIo
KSB8fCBzY3JvbGxQb3NpdGlvbih2ZXJ0aWNhbFNjcm9sbGJhcigpKSA8PSBtaW5pbXVtU2Nyb2xs
UG9zaXRpb24oKS55KCk7IH0KKyAgICBib29sIGlzVmVydGljYWxTY3JvbGxlclBpbm5lZFRvTWF4
aW11bVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gIXZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgc2Ny
b2xsUG9zaXRpb24odmVydGljYWxTY3JvbGxiYXIoKSkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkueSgpOyB9IAorCisgICAgYm9vbCBpc1Bpbm5lZEluQm90aERpcmVjdGlvbnMoY29uc3QgSW50
U2l6ZSYpIGNvbnN0OyAKKyAgICBib29sIGlzUGlubmVkSG9yaXpvbnRhbGx5SW5EaXJlY3Rpb24o
aW50IGhvcml6b250YWxTY3JvbGxEZWx0YSkgY29uc3Q7IAorICAgIGJvb2wgaXNQaW5uZWRWZXJ0
aWNhbGx5SW5EaXJlY3Rpb24oaW50IHZlcnRpY2FsU2Nyb2xsRGVsdGEpIGNvbnN0OworI2VuZGlm
CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBUaWxlZEJh
Y2tpbmcqIHRpbGVkQmFja2luZygpIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKaW5kZXggYjk4Y2NhMzExZTQ1NTM0ZjVhNGEyY2Q5Njlk
ZGNjMDRjODZjYTc2OS4uNDFmN2JhNDhlYzhlY2MyYjMzNjlhMWQ2ZGVkMTdiMjU0NzliZTQzZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCkBAIC0zMzQsNiArMzM0LDcgQEAg
dm9pZCBTY3JvbGxiYXI6OnNldFByZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQgcGFydCkKICAgICAg
ICAgdGhlbWUoKS0+aW52YWxpZGF0ZVBhcnQodGhpcywgbV9ob3ZlcmVkUGFydCk7CiB9CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAgICAgaWYgKG1fcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0
KSB7CkBAIC0zNzIsNiArMzczLDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZgog
CiB2b2lkIFNjcm9sbGJhcjo6bW91c2VFbnRlcmVkKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmgKaW5kZXggZTViMzI5ZGFiYjEyNTYyZDY5ZGUyZDYyNWJiZjQ4NDk5YjZkMmFmYy4u
Y2QxZTg5NzAzOGVlZWFiNWQxNzMzYTI1ZjU3NGZmYTU3MDE3MjhiOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyLmgKQEAgLTEyNSw3ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgLy8gVGhl
c2UgbWV0aG9kcyBhcmUgdXNlZCBmb3IgcGxhdGZvcm0gc2Nyb2xsYmFycyB0byBnaXZlIDpob3Zl
ciBmZWVkYmFjay4gIFRoZXkgd2lsbCBub3QgZ2V0IGNhbGxlZAogICAgIC8vIHdoZW4gdGhlIG1v
dXNlIHdlbnQgZG93biBpbiBhIHNjcm9sbGJhciwgc2luY2UgaXQgaXMgYXNzdW1lZCB0aGUgc2Ny
b2xsYmFyIHdpbGwgc3RhcnQKICAgICAvLyBncmFiYmluZyBhbGwgZXZlbnRzIGluIHRoYXQgY2Fz
ZSBhbnl3YXkuCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBib29sIG1vdXNlTW92ZWQoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisjZW5kaWYKICAgICB2b2lkIG1vdXNlRW50ZXJlZCgpOwog
ICAgIGJvb2wgbW91c2VFeGl0ZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5jcHAKaW5kZXggZGI4MjNjZDdmYjYyNGZmMDQwM2VmYWJmN2M2MmRlMmYwZmE3ZGRlNS4u
MWRhZDc4NzIzMmIzMDYxZDE5NjdjOWRlYjkzYjg2NjE3ODg1YzdiYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC02Niw2ICs2Niw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBmcmVlU2VnbWVudChjaGFyKiBwKQogCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZl
cigpCiAgICAgOiBtX3NpemUoMCkKKyAgICAsIG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGZh
bHNlKQogI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQogICAgICwgbV9pc01lbW9yeU1hcHBl
ZChmYWxzZSkKICAgICAsIG1fZGlza0ltYWdlQ2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxp
ZERpc2tDYWNoZUlkKQpAQCAtNzgsNiArNzksNyBAQCBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZl
cigpCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcih1bnNpZ25lZCBzaXplKQogICAgIDogbV9z
aXplKHNpemUpCiAgICAgLCBtX2J1ZmZlcihzaXplKQorICAgICwgbV9zaG91bGRVc2VQdXJnZWFi
bGVNZW1vcnkoZmFsc2UpCiAjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCiAgICAgLCBtX2lz
TWVtb3J5TWFwcGVkKGZhbHNlKQogICAgICwgbV9kaXNrSW1hZ2VDYWNoZUlkKERpc2tJbWFnZUNh
Y2hlOjppbnZhbGlkRGlza0NhY2hlSWQpCkBAIC04OSw2ICs5MSw3IEBAIFNoYXJlZEJ1ZmZlcjo6
U2hhcmVkQnVmZmVyKHVuc2lnbmVkIHNpemUpCiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVy
KGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUpCiAgICAgOiBtX3NpemUoMCkKKyAgICAs
IG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGZhbHNlKQogI2lmIEVOQUJMRShESVNLX0lNQUdF
X0NBQ0hFKQogICAgICwgbV9pc01lbW9yeU1hcHBlZChmYWxzZSkKICAgICAsIG1fZGlza0ltYWdl
Q2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlkKQpAQCAtMTAxLDYgKzEw
NCw3IEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2ln
bmVkIHNpemUpCiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVuc2lnbmVkIGNo
YXIqIGRhdGEsIHVuc2lnbmVkIHNpemUpCiAgICAgOiBtX3NpemUoMCkKKyAgICAsIG1fc2hvdWxk
VXNlUHVyZ2VhYmxlTWVtb3J5KGZhbHNlKQogI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQog
ICAgICwgbV9pc01lbW9yeU1hcHBlZChmYWxzZSkKICAgICAsIG1fZGlza0ltYWdlQ2FjaGVJZChE
aXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlkKQpAQCAtMjEwLDYgKzIxNCwxMiBAQCB2
b2lkIFNoYXJlZEJ1ZmZlcjo6c2V0TWVtb3J5TWFwcGVkTm90aWZpY2F0aW9uQ2FsbGJhY2soTWVt
b3J5TWFwcGVkTm90aWZ5Q2FsbGJhYwogfQogI2VuZGlmCiAKKy8vIFRyeSB0byBjcmVhdGUgYSBQ
dXJnZWFibGVCdWZmZXIuIFdlIGNhbiBmYWlsIHRvIGNyZWF0ZSBvbmUgZm9yIGFueSBvZiB0aGUK
Ky8vIGZvbGxvd2luZyByZWFzb25zOgorLy8gICAtIHNob3VsZFVzZVB1cmdlYWJsZU1lbW9yeSBp
cyBzZXQgdG8gZmFsc2UuCisvLyAgIC0gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyBsZXNzIHRo
YW4gdGhlIG1pbmltdW0gc2l6ZSByZXF1aXJlZCBieQorLy8gICAgIFB1cmdlYWJsZUJ1ZmZlciAo
Y3VycmVudGx5IDE2aykuCisvLyAgIC0gUHVyZ2VhYmxlQnVmZmVyOjpjcmVhdGVVbmluaXRpYWxp
emVkKCkgY2FsbCBmYWlscy4KIHZvaWQgU2hhcmVkQnVmZmVyOjpjcmVhdGVQdXJnZWFibGVCdWZm
ZXIoKSBjb25zdAogewogICAgIGlmIChtX3B1cmdlYWJsZUJ1ZmZlcikKQEAgLTIyNiw2ICsyMzYs
OSBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlUHVyZ2VhYmxlQnVmZmVyKCkgY29uc3QKICAg
ICBpZiAoIWhhc09uZVJlZigpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoIW1fc2hvdWxk
VXNlUHVyZ2VhYmxlTWVtb3J5KQorICAgICAgICByZXR1cm47CisKICAgICBjaGFyKiBkZXN0aW5h
dGlvbiA9IDA7CiAgICAgbV9wdXJnZWFibGVCdWZmZXIgPSBQdXJnZWFibGVCdWZmZXI6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQobV9zaXplLCBkZXN0aW5hdGlvbik7CiAgICAgaWYgKCFtX3B1cmdlYWJs
ZUJ1ZmZlcikKQEAgLTI1Myw3ICsyNjYsOSBAQCBjb25zdCBjaGFyKiBTaGFyZWRCdWZmZXI6OmRh
dGEoKSBjb25zdAogICAgIGlmIChjb25zdCBjaGFyKiBidWZmZXIgPSBzaW5nbGVEYXRhQXJyYXlC
dWZmZXIoKSkKICAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKICNlbmRpZgotICAgIAorCisgICAgY3Jl
YXRlUHVyZ2VhYmxlQnVmZmVyKCk7CisKICAgICBpZiAobV9wdXJnZWFibGVCdWZmZXIpCiAgICAg
ICAgIHJldHVybiBtX3B1cmdlYWJsZUJ1ZmZlci0+ZGF0YSgpOwogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCA4MjcxOGIzNWMwZDAzN2I5ZmI1ZWI1NmE4OWRk
MTUzNWI4NzQ5N2EyLi4xMDZjODMwZDY1MWY5ZWQ3ZTU2NmMwMTg4ZDJkNzBjNTMyYzY4MDI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtMTM4LDYgKzEzOCw4IEBA
IHB1YmxpYzoKICAgICAvLyAgICAgIH0KICAgICB1bnNpZ25lZCBnZXRTb21lRGF0YShjb25zdCBj
aGFyKiYgZGF0YSwgdW5zaWduZWQgcG9zaXRpb24gPSAwKSBjb25zdDsKIAorICAgIHZvaWQgc2hv
dWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGJvb2wgdXNlKSB7IG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVt
b3J5ID0gdXNlOyB9CisKICNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkKICAgICBlbnVtIE1l
bW9yeU1hcHBpbmdTdGF0ZSB7IFF1ZXVlZEZvck1hcHBpbmcsIFByZXZpb3VzbHlRdWV1ZWRGb3JN
YXBwaW5nLCBTdWNjZXNzQWxyZWFkeU1hcHBlZCwgRmFpbHVyZUNhY2hlRnVsbCB9OwogCkBAIC0x
ODcsNiArMTg5LDcgQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fc2l6ZTsKICAgICBtdXRh
YmxlIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKKyAgICBib29sIG1fc2hvdWxkVXNlUHVyZ2VhYmxl
TWVtb3J5OwogICAgIG11dGFibGUgT3duUHRyPFB1cmdlYWJsZUJ1ZmZlcj4gbV9wdXJnZWFibGVC
dWZmZXI7CiAjaWYgVVNFKE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKQogICAgIG11dGFi
bGUgVmVjdG9yPFJldGFpblB0cjxDRkRhdGFSZWY+PiBtX2RhdGFBcnJheTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1ZGRlblRlcm1pbmF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TdWRkZW5UZXJtaW5hdGlvbi5oCmluZGV4IDcyNTIxNDkwNjJmNDMzYWIz
M2M2ODgwYzk1NTRiOWIzYmRmYWRjOTIuLjgwOTY3YzZjMDhjOWZjNzJhMTEyZjFkMzBlYmNmMmYw
ODEyNWQzZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1ZGRlblRlcm1p
bmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VkZGVuVGVybWluYXRpb24u
aApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdm9pZCBkaXNhYmxl
U3VkZGVuVGVybWluYXRpb24oKTsKICAgICB2b2lkIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7
CiAKLSNpZiAhUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKElPUykgfHwgIVBMQVRGT1JNKE1B
QykKICAgICBpbmxpbmUgdm9pZCBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKSB7IH0KICAgICBp
bmxpbmUgdm9pZCBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpIHsgfQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdXBwbGVtZW50YWJsZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU3VwcGxlbWVudGFibGUuaAppbmRleCAyNzdhYWVmODBlZjZjYzdiYTNi
ZTJhOTg5YzJmNWZmM2RlZDJjNzUxLi5jMjAyZjJjNDIxZWUwODZiZDFjZmU0NmMwNzQzYWNlNjdm
Njc3NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdXBwbGVtZW50YWJs
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmgKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCkBAIC05OSwyMCArMTAwLDIw
IEBAIGNsYXNzIFN1cHBsZW1lbnRhYmxlIHsKIHB1YmxpYzoKICAgICB2b2lkIHByb3ZpZGVTdXBw
bGVtZW50KGNvbnN0IGNoYXIqIGtleSwgUGFzc093blB0cjxTdXBwbGVtZW50PFQ+PiBzdXBwbGVt
ZW50KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdGhyZWFkSWQgPT0gY3VycmVudFRocmVhZCgp
KTsKKyAgICAgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3Ro
cmVhZElkKSk7CiAgICAgICAgIEFTU0VSVCghbV9zdXBwbGVtZW50cy5nZXQoa2V5KSk7CiAgICAg
ICAgIG1fc3VwcGxlbWVudHMuc2V0KGtleSwgc3VwcGxlbWVudCk7CiAgICAgfQogCiAgICAgdm9p
ZCByZW1vdmVTdXBwbGVtZW50KGNvbnN0IGNoYXIqIGtleSkKICAgICB7Ci0gICAgICAgIEFTU0VS
VChtX3RocmVhZElkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAgIEFTU0VSVChjYW5BY2Nl
c3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90aHJlYWRJZCkpOwogICAgICAgICBtX3N1cHBs
ZW1lbnRzLnJlbW92ZShrZXkpOwogICAgIH0KIAogICAgIFN1cHBsZW1lbnQ8VD4qIHJlcXVpcmVT
dXBwbGVtZW50KGNvbnN0IGNoYXIqIGtleSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3RocmVh
ZElkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQobV90aHJlYWRJZCkpOwogICAgICAgICByZXR1cm4gbV9zdXBwbGVt
ZW50cy5nZXQoa2V5KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1N5c3RlbU1lbW9yeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3lzdGVtTWVtb3J5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTI3NjNjZDNhNmNkNzBkNjFiODc2YThhMzZkYjBmYTA0ZDVjZWYwYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N5c3RlbU1lbW9yeS5o
CkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3lzdGVtTWVtb3J5X2gKKyNkZWZpbmUgU3lzdGVt
TWVtb3J5X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworaW50IHN5c3RlbU1lbW9yeUxldmVsKCk7
IC8vIEluIFswLCAxMDBdCitzaXplX3Qgc3lzdGVtVG90YWxNZW1vcnkoKTsKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRDaGVjay5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkQ2hlY2suaAppbmRleCAwN2ViNDYzYjA1YmUyN2Rl
MTM1MmQwNjZlZTcyZGU3MTdiYmMzNzU5Li5mYmEzYWEyNmIzOTI1ZjYyMDAxNjFhZWU1ZjE0MDk4
NDkyZmFkNmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRDaGVj
ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZENoZWNrLmgKQEAgLTI2LDYg
KzI2LDcgQEAKICNpZm5kZWYgVGhyZWFkQ2hlY2tfaAogI2RlZmluZSBUaHJlYWRDaGVja19oCiAK
KyNpZiAhUExBVEZPUk0oSU9TKQogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGVudW0gVGhyZWFk
VmlvbGF0aW9uQmVoYXZpb3IgewogICAgICAgICBOb1RocmVhZENoZWNrLApAQCAtNDYsNSArNDcs
OSBAQCBleHRlcm4gIkMiIHZvaWQgV2ViQ29yZVJlcG9ydFRocmVhZFZpb2xhdGlvbihjb25zdCBj
aGFyKiBmdW5jdGlvbiwgV2ViQ29yZTo6VGhyZQogCiAjZGVmaW5lIFdlYkNvcmVUaHJlYWRWaW9s
YXRpb25DaGVja1JvdW5kT25lKCkgOjpXZWJDb3JlOjpyZXBvcnRUaHJlYWRWaW9sYXRpb24oV1RG
X1BSRVRUWV9GVU5DVElPTiwgV2ViQ29yZTo6VGhyZWFkVmlvbGF0aW9uUm91bmRPbmUpCiAjZGVm
aW5lIFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kVHdvKCkgOjpXZWJDb3JlOjpyZXBv
cnRUaHJlYWRWaW9sYXRpb24oV1RGX1BSRVRUWV9GVU5DVElPTiwgV2ViQ29yZTo6VGhyZWFkVmlv
bGF0aW9uUm91bmRUd28pCisjZWxzZQorI2RlZmluZSBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hl
Y2tSb3VuZE9uZSgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgV2ViQ29yZVRocmVhZFZpb2xh
dGlvbkNoZWNrUm91bmRUd28oKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVh
ZEdsb2JhbERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0
YS5jcHAKaW5kZXggMGQ4MzdiZjU2ZDc5YjkyYzQwOTE0NWQ3Nzc2NzdlYTdkMTJkYzIwNC4uY2Vm
YjE5ZGRjNzBlNWRhOTU1MTEyYTg5NmVjNjdjMTlkNTAyZTI0MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAKQEAgLTUwLDYgKzUwLDkgQEAgdXNpbmcg
bmFtZXNwYWNlIFdURjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVGhyZWFkU3BlY2lmaWM8VGhy
ZWFkR2xvYmFsRGF0YT4qIFRocmVhZEdsb2JhbERhdGE6OnN0YXRpY0RhdGE7CisjaWYgVVNFKFdF
Ql9USFJFQUQpCitUaHJlYWRHbG9iYWxEYXRhKiBUaHJlYWRHbG9iYWxEYXRhOjpzaGFyZWRNYWlu
VGhyZWFkU3RhdGljRGF0YTsKKyNlbmRpZgogCiBUaHJlYWRHbG9iYWxEYXRhOjpUaHJlYWRHbG9i
YWxEYXRhKCkKICAgICA6IG1fY2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycyhhZG9wdFB0
cihuZXcgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycykpCkBAIC02MSw3ICs2NCw3IEBA
IFRocmVhZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERhdGEoKQogI2lmIFVTRShJQ1VfVU5JQ09E
RSkKICAgICAsIG1fY2FjaGVkQ29udmVydGVySUNVKGFkb3B0UHRyKG5ldyBJQ1VDb252ZXJ0ZXJX
cmFwcGVyKSkKICNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYm
ICFQTEFURk9STShJT1MpCiAgICAgLCBtX2NhY2hlZENvbnZlcnRlclRFQyhhZG9wdFB0cihuZXcg
VEVDQ29udmVydGVyV3JhcHBlcikpCiAjZW5kaWYKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAt
ODIsNyArODUsNyBAQCBUaHJlYWRHbG9iYWxEYXRhOjp+VGhyZWFkR2xvYmFsRGF0YSgpCiAKIHZv
aWQgVGhyZWFkR2xvYmFsRGF0YTo6ZGVzdHJveSgpCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lm
IFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICBtX2NhY2hlZENvbnZlcnRlclRF
Qy5jbGVhcigpOwogI2VuZGlmCiAKQEAgLTk4LDExICsxMDEsMzUgQEAgdm9pZCBUaHJlYWRHbG9i
YWxEYXRhOjpkZXN0cm95KCkKICAgICBtX3RocmVhZFRpbWVycy5jbGVhcigpOwogfQogCisjaWYg
RU5BQkxFKFdPUktFUlMpICYmIFVTRShXRUJfVEhSRUFEKQordm9pZCBUaHJlYWRHbG9iYWxEYXRh
OjpzZXRXZWJDb3JlVGhyZWFkRGF0YSgpCit7CisgICAgQVNTRVJUKGlzV2ViVGhyZWFkKCkpOwor
ICAgIEFTU0VSVCgmdGhyZWFkR2xvYmFsRGF0YSgpICE9IFRocmVhZEdsb2JhbERhdGE6OnNoYXJl
ZE1haW5UaHJlYWRTdGF0aWNEYXRhKTsKKworICAgIC8vIFNldCBXZWJUaHJlYWQncyBUaHJlYWRH
bG9iYWxEYXRhIG9iamVjdCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgbWFpbiBVSSB0aHJlYWQuCisg
ICAgVGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0YS0+cmVwbGFjZShUaHJlYWRHbG9iYWxEYXRh
OjpzaGFyZWRNYWluVGhyZWFkU3RhdGljRGF0YSk7CisKKyAgICBBU1NFUlQoJnRocmVhZEdsb2Jh
bERhdGEoKSA9PSBUaHJlYWRHbG9iYWxEYXRhOjpzaGFyZWRNYWluVGhyZWFkU3RhdGljRGF0YSk7
Cit9CisjZW5kaWYKKwogVGhyZWFkR2xvYmFsRGF0YSYgdGhyZWFkR2xvYmFsRGF0YSgpIAogewor
I2lmIFVTRShXRUJfVEhSRUFEKQorICAgIGlmIChVTkxJS0VMWSghVGhyZWFkR2xvYmFsRGF0YTo6
c3RhdGljRGF0YSkpIHsKKyAgICAgICAgVGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0YSA9IG5l
dyBUaHJlYWRTcGVjaWZpYzxUaHJlYWRHbG9iYWxEYXRhPjsKKyAgICAgICAgLy8gV2ViVGhyZWFk
IGFuZCBtYWluIFVJIHRocmVhZCBuZWVkIHRvIHNoYXJlIHRoZSBzYW1lIG9iamVjdC4gU2F2ZSBp
dCBpbiBhIHN0YXRpYworICAgICAgICAvLyBoZXJlLCB0aGUgV2ViVGhyZWFkIHdpbGwgcGljayBp
dCB1cCBpbiBzZXRXZWJDb3JlVGhyZWFkRGF0YSgpLgorICAgICAgICBpZiAocHRocmVhZF9tYWlu
X25wKCkpCisgICAgICAgICAgICBUaHJlYWRHbG9iYWxEYXRhOjpzaGFyZWRNYWluVGhyZWFkU3Rh
dGljRGF0YSA9ICpUaHJlYWRHbG9iYWxEYXRhOjpzdGF0aWNEYXRhOworICAgIH0KKyAgICByZXR1
cm4gKipUaHJlYWRHbG9iYWxEYXRhOjpzdGF0aWNEYXRhOworI2Vsc2UKICAgICBpZiAoIVRocmVh
ZEdsb2JhbERhdGE6OnN0YXRpY0RhdGEpCiAgICAgICAgIFRocmVhZEdsb2JhbERhdGE6OnN0YXRp
Y0RhdGEgPSBuZXcgVGhyZWFkU3BlY2lmaWM8VGhyZWFkR2xvYmFsRGF0YT47CiAgICAgcmV0dXJu
ICoqVGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0YTsKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRH
bG9iYWxEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgK
aW5kZXggNzZjOWZhZmIxZTliMzI3Yjc4Y2E4NjkxZWU0MzgwNjQ2NmFhODk0Ni4uZmZiMDE4Yzdh
MjBmZTdlYTMwNzhlODUxN2UxZjhmMzE1MzI4ODY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RocmVhZEdsb2JhbERhdGEuaApAQCAtNjIsMTAgKzYyLDE0IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgSUNVQ29udmVydGVyV3JhcHBlciYgY2FjaGVkQ29udmVydGVySUNVKCkg
eyByZXR1cm4gKm1fY2FjaGVkQ29udmVydGVySUNVOyB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JN
KE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgICAgIFRFQ0Nv
bnZlcnRlcldyYXBwZXImIGNhY2hlZENvbnZlcnRlclRFQygpIHsgcmV0dXJuICptX2NhY2hlZENv
bnZlcnRlclRFQzsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV09SS0VSUykgJiYgVVNFKFdFQl9U
SFJFQUQpCisgICAgICAgIHZvaWQgc2V0V2ViQ29yZVRocmVhZERhdGEoKTsKKyNlbmRpZgorCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICAgICAgVGhyZWFkTG9jYWxJbnNwZWN0b3JDb3VudGVy
cyYgaW5zcGVjdG9yQ291bnRlcnMoKSB7IHJldHVybiAqbV9pbnNwZWN0b3JDb3VudGVyczsgfQog
I2VuZGlmCkBAIC04Myw3ICs4Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgT3du
UHRyPElDVUNvbnZlcnRlcldyYXBwZXI+IG1fY2FjaGVkQ29udmVydGVySUNVOwogI2VuZGlmCiAK
LSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQog
ICAgICAgICBPd25QdHI8VEVDQ29udmVydGVyV3JhcHBlcj4gbV9jYWNoZWRDb252ZXJ0ZXJURUM7
CiAjZW5kaWYKIApAQCAtOTIsMTAgKzk2LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRp
ZgogCiAgICAgICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxUaHJlYWRHbG9iYWxEYXRhPiogc3Rh
dGljRGF0YTsKKyNpZiBVU0UoV0VCX1RIUkVBRCkKKyAgICAgICAgc3RhdGljIFRocmVhZEdsb2Jh
bERhdGEqIHNoYXJlZE1haW5UaHJlYWRTdGF0aWNEYXRhOworI2VuZGlmCiAgICAgICAgIGZyaWVu
ZCBUaHJlYWRHbG9iYWxEYXRhJiB0aHJlYWRHbG9iYWxEYXRhKCk7CiAgICAgfTsKIAorI2lmIFVT
RShXRUJfVEhSRUFEKQorVGhyZWFkR2xvYmFsRGF0YSYgdGhyZWFkR2xvYmFsRGF0YSgpOworI2Vs
c2UKIFRocmVhZEdsb2JhbERhdGEmIHRocmVhZEdsb2JhbERhdGEoKSBQVVJFX0ZVTkNUSU9OOwor
I2VuZGlmCiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFRpbWVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9UaHJlYWRUaW1lcnMuY3BwCmluZGV4IDg0NjQ0MGZmMjVkY2IyZTM0NzlmNTRlZTIzYjYw
MzE2OGM1NmE0ZmMuLjc4OTM3OGNlM2ZlYjRlM2IwY2NmNDBiNzU3YmY1M2YxOGNjNTM5MzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFRpbWVycy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkVGltZXJzLmNwcApAQCAtMzMsNiArMzMsMTAg
QEAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZpcmUgdGltZXJzIGZvciB0aGlzIGxl
bmd0aCBvZiB0aW1lLCBhbmQgdGhlbiBxdWl0IHRvIGxldCB0aGUgcnVuIGxvb3AgcHJvY2VzcyB1
c2VyIGlucHV0IGV2ZW50cy4KQEAgLTU0LDcgKzU4LDcgQEAgVGhyZWFkVGltZXJzOjpUaHJlYWRU
aW1lcnMoKQogICAgICwgbV9maXJpbmdUaW1lcnMoZmFsc2UpCiAgICAgLCBtX3BlbmRpbmdTaGFy
ZWRUaW1lckZpcmVUaW1lKDApCiB7Ci0gICAgaWYgKGlzTWFpblRocmVhZCgpKQorICAgIGlmIChp
c1VJVGhyZWFkKCkpCiAgICAgICAgIHNldFNoYXJlZFRpbWVyKG1haW5UaHJlYWRTaGFyZWRUaW1l
cigpKTsKIH0KIApAQCAtMTA1LDYgKzEwOSw3IEBAIHZvaWQgVGhyZWFkVGltZXJzOjpzaGFyZWRU
aW1lckZpcmVkKCkKIAogdm9pZCBUaHJlYWRUaW1lcnM6OnNoYXJlZFRpbWVyRmlyZWRJbnRlcm5h
bCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpIHx8ICFpc1dlYlRocmVhZCgpICYmICFp
c1VJVGhyZWFkKCkpOwogICAgIC8vIERvIGEgcmUtZW50cmFuY3kgY2hlY2suCiAgICAgaWYgKG1f
ZmlyaW5nVGltZXJzKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9UaW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5jcHAK
aW5kZXggMzFhNDA1ZDcwMGRlM2QxOTdlNWZkYjExNTRkYmJmZTE2OWQ2ZDhhNi4uYTg3MzczMDQz
YmU0MWU4ODEzNzEwMGVmOTQ5OGZiZGI2ZmEwOWMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGltZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RpbWVy
LmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0yMDksNyArMjEwLDcgQEAgVGltZXJCYXNlOjp+VGltZXJCYXNlKCkKIAogdm9pZCBU
aW1lckJhc2U6OnN0YXJ0KGRvdWJsZSBuZXh0RmlyZUludGVydmFsLCBkb3VibGUgcmVwZWF0SW50
ZXJ2YWwpCiB7Ci0gICAgQVNTRVJUKG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAg
QVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RocmVhZCkpOwogCiAg
ICAgbV9yZXBlYXRJbnRlcnZhbCA9IHJlcGVhdEludGVydmFsOwogICAgIHNldE5leHRGaXJlVGlt
ZShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSArIG5leHRGaXJlSW50ZXJ2YWwpOwpAQCAt
MjE3LDcgKzIxOCw3IEBAIHZvaWQgVGltZXJCYXNlOjpzdGFydChkb3VibGUgbmV4dEZpcmVJbnRl
cnZhbCwgZG91YmxlIHJlcGVhdEludGVydmFsKQogCiB2b2lkIFRpbWVyQmFzZTo6c3RvcCgpCiB7
Ci0gICAgQVNTRVJUKG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgQVNTRVJUKGNh
bkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RocmVhZCkpOwogCiAgICAgbV9yZXBl
YXRJbnRlcnZhbCA9IDA7CiAgICAgc2V0TmV4dEZpcmVUaW1lKDApOwpAQCAtMzY4LDcgKzM2OSw3
IEBAIHZvaWQgVGltZXJCYXNlOjp1cGRhdGVIZWFwSWZOZWVkZWQoZG91YmxlIG9sZFRpbWUpCiAK
IHZvaWQgVGltZXJCYXNlOjpzZXROZXh0RmlyZVRpbWUoZG91YmxlIG5ld1VuYWxpZ25lZFRpbWUp
CiB7Ci0gICAgQVNTRVJUKG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgQVNTRVJU
KGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RocmVhZCkpOwogICAgIEFTU0VS
VCghbV93YXNEZWxldGVkKTsKIAogICAgIGlmIChtX3VuYWxpZ25lZE5leHRGaXJlVGltZSAhPSBu
ZXdVbmFsaWduZWRUaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGlt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmgKaW5kZXggNjllOWVkNTI3MTcw
ZGQzNWM4M2QxNDhhZGI5MDFjZjc3MDA0YzU4YS4uMTYxNGJkMTNhY2E1ZDI3NmEyNjFhNzQwYjk4
YzQ1ZmE3ZTM1OTA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGltZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5oCkBAIC0zMCw2ICszMCwxMCBA
QAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
KyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGltZSBpbnRlcnZhbHMgYXJlIGFsbCBpbiBzZWNv
bmRzLgpAQCAtMTIwLDcgKzEyNCwxOCBAQCBwcml2YXRlOgogCiBpbmxpbmUgYm9vbCBUaW1lckJh
c2U6OmlzQWN0aXZlKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogV3JpdGUgdGhpcyBpbiB0ZXJt
cyBvZiBVU0UoV0VCX1RIUkVBRCkgaW5zdGVhZCBvZiBQTEFURk9STShJT1MpLgorI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgQVNTRVJUKG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisjZWxz
ZQorICAgIC8vIE9uIGlPUyB0aW1lcnMgYXJlIGFsd2F5cyBydW4gb24gdGhlIG1haW4gdGhyZWFk
IG9yIHRoZSBXZWIgVGhyZWFkLgorICAgIC8vIFVubGVzcyB3ZSBoYXZlIHdvcmtlcnMgZW5hYmxl
ZCBpbiB3aGljaCBjYXNlIHRpbWVycyBjYW4gcnVuIG9uIG90aGVyIHRocmVhZHMuCisjaWYgRU5B
QkxFKFdPUktFUlMpCisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpIHx8IHB0aHJlYWRf
bWFpbl9ucCgpIHx8IG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisjZWxzZQorICAgIEFT
U0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSB8fCBwdGhyZWFkX21haW5fbnAoKSk7CisjZW5kaWYK
KyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAgICAgcmV0dXJuIG1fbmV4dEZpcmVUaW1lOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vVVJMLmNwcAppbmRleCA1YjdjZDNhNTVhYTYwMzE2YWQ4OWJkNmEwNGM0
ZmEwMDQzOGE2MWI2Li4zMzc4NzhlODFiNjI5NGNjOTAwZTQyZjllMDg0Y2EwYjBhYTdmMThjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1VSTC5jcHAKQEAgLTk4Niw5ICs5ODYsMjcgQEAgdm9pZCBVUkw6OnBh
cnNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksICZzdHJp
bmcpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGJvb2wgc2hvdWxkQ2Fub25pY2Fs
aXplU2NoZW1lID0gdHJ1ZTsKKwordm9pZCBlbmFibGVVUkxTY2hlbWVDYW5vbmljYWxpemF0aW9u
KGJvb2wgZW5hYmxlU2NoZW1lQ2Fub25pY2FsaXphdGlvbikKK3sKKyAgICBzaG91bGRDYW5vbmlj
YWxpemVTY2hlbWUgPSBlbmFibGVTY2hlbWVDYW5vbmljYWxpemF0aW9uOworfQorI2VuZGlmCisK
IHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+CiBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWwoY29uc3Qg
Y2hhciogYSwgY29uc3QgY2hhciAoJmIpW2xlbmd0aF0pCiB7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIGlmICghc2hvdWxkQ2Fub25pY2FsaXplU2NoZW1lKSB7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh0b0FTQ0lJTG93ZXIo
YVtpXSkgIT0gYltpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI2Miw4ICsxMjgwLDE4IEBAIHZvaWQgVVJMOjpwYXJz
ZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IFN0cmluZyogb3JpZ2luYWxTdHJpbmcpCiAKICAgICAv
LyBjb3B5IGluIHRoZSBzY2hlbWUKICAgICBjb25zdCBjaGFyICpzY2hlbWVFbmRQdHIgPSB1cmwg
KyBzY2hlbWVFbmQ7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChzaG91bGRDYW5vbmljYWxp
emVTY2hlbWUgfHwgbV9wcm90b2NvbElzSW5IVFRQRmFtaWx5KSB7CisgICAgICAgIHdoaWxlIChz
dHJQdHIgPCBzY2hlbWVFbmRQdHIpCisgICAgICAgICAgICAqcCsrID0gdG9BU0NJSUxvd2VyKCpz
dHJQdHIrKyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2hpbGUgKHN0clB0ciA8IHNjaGVtZUVu
ZFB0cikKKyAgICAgICAgICAgICpwKysgPSAqc3RyUHRyKys7CisgICAgfQorI2Vsc2UKICAgICB3
aGlsZSAoc3RyUHRyIDwgc2NoZW1lRW5kUHRyKQogICAgICAgICAqcCsrID0gdG9BU0NJSUxvd2Vy
KCpzdHJQdHIrKyk7CisjZW5kaWYKICAgICBtX3NjaGVtZUVuZCA9IHAgLSBidWZmZXIuZGF0YSgp
OwogCiAgICAgYm9vbCBob3N0SXNMb2NhbEhvc3QgPSBwb3J0RW5kIC0gdXNlclN0YXJ0ID09IDkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVVJMLmgKaW5kZXggYzEzMjllYjRjMjMyZjRhYjEwOGJiNzdkZjk4ZGIwYzI2
NWIwYTQxNS4uNzEzYmRjZTkxODczZjBiNWJhZDAyNDBiZDIyYTc1M2I2OTVlMjQyNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVVJMLmgKQEAgLTMzMiw2ICszMzIsMTAgQEAgaW5saW5lIHVuc2lnbmVkIFVSTDo6
cGF0aEFmdGVyTGFzdFNsYXNoKCkgY29uc3QKICAgICByZXR1cm4gbV9wYXRoQWZ0ZXJMYXN0U2xh
c2g7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIGVuYWJsZVVSTFNjaGVtZUNhbm9uaWNh
bGl6YXRpb24oYm9vbCk7CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1l
c3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKaW5kZXggNDAwZjZlMGVmOTQ4YTlm
NTdhNWVhZjBlMTk5NzU2ZmVhNDY4ZDdlNS4uNjNiNjNmNTkxZGZlOTViYTAwZmI1Zjk4YmJkZDU2
ZDUzZWRkY2Y3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKQEAgLTI3LDYgKzI3LDEyIEBA
CiAjaWZuZGVmIFdpZGdldF9oCiAjZGVmaW5lIFdpZGdldF9oCiAKKyNpZiBQTEFURk9STShJT1Mp
CisjaWZuZGVmIE5TVmlldworI2RlZmluZSBOU1ZpZXcgV0FLVmlldworI2VuZGlmCisjZW5kaWYK
KwogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0xOTAsNiArMTk2LDkgQEAgcHVibGljOgogCiAgICAg
dm9pZCByZW1vdmVGcm9tU3VwZXJ2aWV3KCk7CiAjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgdm9pZCBhZGRUb1N1cGVydmlldyhOU1ZpZXcqKTsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0o
RUZMKQogICAgIHZvaWQgc2V0RXZhc09iamVjdChFdmFzX09iamVjdCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1Mu
Y3BwCmluZGV4IGY5MzI2ZWE5MjhhZWFjNzJjOWUzZDhmMzI4ODNkODMyNzllMTQ0N2MuLmJlZGY4
OGYwMDAzODdjOGIwZTE3ZjI4ZTA5Y2IxMmU5YjdhYjIxYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAK
QEAgLTI5LDkgKzI5LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFdF
Ql9BVURJTykKLQotI2lmIFBMQVRGT1JNKElPUykKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBQ
TEFURk9STShJT1MpCiAKICNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uSU9TLmgiCiAKQEAgLTI2
Miw2ICsyNjAsNSBAQCB2b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OmZyYW1lU2l6ZUNoYW5nZWRQ
cm9jKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXQsIEF1ZGlvVQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9B
VURJTykgJiYgUExBVEZPUk0oSU9TKQogCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0
aW9uSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5h
dGlvbklPUy5oCmluZGV4IGYwZWVlY2ExOTc4NmMyODRhZTYzNGI5YzdlYTkxNzI5ZDQ5MzM0MmQu
LjhiNjhhNmFjODM0ZTViNjgxNWJiYTJjODAwNDE1MDgzZTk0MjlkMzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1Mu
aApAQCAtNzYsMyArNzYsNCBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gQXVkaW9EZXN0aW5hdGlvbklPU19oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYmI4NTlmYjZiNjQ2YzQ0ZjI1ZTgxYzMyZjE5OWFhZDhkYzA4NzBmMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJ
T1MuY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
dWRpb0ZpbGVSZWFkZXJJT1MuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFBMQVRGT1JN
KElPUykKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVy
LmgiCisjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9D
b3JlRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworU09GVF9MSU5LX0ZSQU1FV09SSyhBdWRpb1Rvb2xi
b3gpCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0ZpbGVDbG9zZSwgT1NTdGF0dXMsIChB
dWRpb0ZpbGVJRCBpbkF1ZGlvRmlsZSksIChpbkF1ZGlvRmlsZSkpCitTT0ZUX0xJTksoQXVkaW9U
b29sYm94LCBBdWRpb0ZpbGVPcGVuV2l0aENhbGxiYWNrcywgT1NTdGF0dXMsICh2b2lkICppbkNs
aWVudERhdGEsIEF1ZGlvRmlsZV9SZWFkUHJvYyBpblJlYWRGdW5jLCBBdWRpb0ZpbGVfV3JpdGVQ
cm9jIGluV3JpdGVGdW5jLCBBdWRpb0ZpbGVfR2V0U2l6ZVByb2MgaW5HZXRTaXplRnVuYywgQXVk
aW9GaWxlX1NldFNpemVQcm9jIGluU2V0U2l6ZUZ1bmMsIEF1ZGlvRmlsZVR5cGVJRCBpbkZpbGVU
eXBlSGludCwgQXVkaW9GaWxlSUQgKm91dEF1ZGlvRmlsZSksIChpbkNsaWVudERhdGEsIGluUmVh
ZEZ1bmMsIGluV3JpdGVGdW5jLCBpbkdldFNpemVGdW5jLCBpblNldFNpemVGdW5jLCBpbkZpbGVU
eXBlSGludCwgb3V0QXVkaW9GaWxlKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlv
RmlsZURpc3Bvc2UsIE9TU3RhdHVzLCAoRXh0QXVkaW9GaWxlUmVmIGluRXh0QXVkaW9GaWxlKSwg
KGluRXh0QXVkaW9GaWxlKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlvRmlsZUdl
dFByb3BlcnR5LCBPU1N0YXR1cywgKEV4dEF1ZGlvRmlsZVJlZiBpbkV4dEF1ZGlvRmlsZSwgRXh0
QXVkaW9GaWxlUHJvcGVydHlJRCBpblByb3BlcnR5SUQsIFVJbnQzMiAqaW9Qcm9wZXJ0eURhdGFT
aXplLCB2b2lkICpvdXRQcm9wZXJ0eURhdGEpLCAoaW5FeHRBdWRpb0ZpbGUsIGluUHJvcGVydHlJ
RCwgaW9Qcm9wZXJ0eURhdGFTaXplLCBvdXRQcm9wZXJ0eURhdGEpKQorU09GVF9MSU5LKEF1ZGlv
VG9vbGJveCwgRXh0QXVkaW9GaWxlUmVhZCwgT1NTdGF0dXMsIChFeHRBdWRpb0ZpbGVSZWYgaW5F
eHRBdWRpb0ZpbGUsIFVJbnQzMiAqaW9OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCAqaW9E
YXRhKSwgKGluRXh0QXVkaW9GaWxlLCBpb051bWJlckZyYW1lcywgaW9EYXRhKSkKK1NPRlRfTElO
SyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlvRmlsZVNldFByb3BlcnR5LCBPU1N0YXR1cywgKEV4dEF1
ZGlvRmlsZVJlZiBpbkV4dEF1ZGlvRmlsZSwgRXh0QXVkaW9GaWxlUHJvcGVydHlJRCBpblByb3Bl
cnR5SUQsIFVJbnQzMiBpblByb3BlcnR5RGF0YVNpemUsIGNvbnN0IHZvaWQgKmluUHJvcGVydHlE
YXRhKSwgKGluRXh0QXVkaW9GaWxlLCBpblByb3BlcnR5SUQsIGluUHJvcGVydHlEYXRhU2l6ZSwg
aW5Qcm9wZXJ0eURhdGEpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlV3Jh
cEF1ZGlvRmlsZUlELCBPU1N0YXR1cywgKEF1ZGlvRmlsZUlEIGluRmlsZUlELCBCb29sZWFuIGlu
Rm9yV3JpdGluZywgRXh0QXVkaW9GaWxlUmVmICpvdXRFeHRBdWRpb0ZpbGUpLCAoaW5GaWxlSUQs
IGluRm9yV3JpdGluZywgb3V0RXh0QXVkaW9GaWxlKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gs
IEV4dEF1ZGlvRmlsZU9wZW5VUkwsIE9TU3RhdHVzLCAoQ0ZVUkxSZWYgaW5VUkwsIEV4dEF1ZGlv
RmlsZVJlZiogb3V0RXh0QXVkaW9GaWxlKSwgKGluVVJMLCBvdXRFeHRBdWRpb0ZpbGUpKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gQXVkaW9CdWZm
ZXJMaXN0KiBjcmVhdGVBdWRpb0J1ZmZlckxpc3Qoc2l6ZV90IG51bWJlck9mQnVmZmVycykKK3sK
KyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IGJ1ZmZlckxpc3RTaXplID0gc2l6
ZW9mKEF1ZGlvQnVmZmVyTGlzdCkgLSBzaXplb2YoQXVkaW9CdWZmZXIpOworICAgIGJ1ZmZlckxp
c3RTaXplICs9IG51bWJlck9mQnVmZmVycyAqIHNpemVvZihBdWRpb0J1ZmZlcik7CisKKyAgICBB
dWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxpc3QgPSBzdGF0aWNfY2FzdDxBdWRpb0J1ZmZlckxpc3Qq
PihjYWxsb2MoMSwgYnVmZmVyTGlzdFNpemUudW5zYWZlR2V0KCkpKTsKKyAgICBpZiAoYnVmZmVy
TGlzdCkKKyAgICAgICAgYnVmZmVyTGlzdC0+bU51bWJlckJ1ZmZlcnMgPSBudW1iZXJPZkJ1ZmZl
cnM7CisgICAgcmV0dXJuIGJ1ZmZlckxpc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0
cm95QXVkaW9CdWZmZXJMaXN0KEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCkKK3sKKyAgICBm
cmVlKGJ1ZmZlckxpc3QpOworfQorCitBdWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcihj
b25zdCBjaGFyKiBmaWxlUGF0aCkKKyAgICA6IG1fZGF0YSgwKQorICAgICwgbV9kYXRhU2l6ZSgw
KQorICAgICwgbV9hdWRpb0ZpbGVJRCgwKQorICAgICwgbV9leHRBdWRpb0ZpbGVSZWYobnVsbHB0
cikKK3sKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybFJlZiA9IGFkb3B0Q0YoQ0ZVUkxDcmVh
dGVGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGtDRkFsbG9jYXRvckRlZmF1bHQsIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihmaWxlUGF0aCksIHN0cmxlbihmaWxlUGF0aCksIGZh
bHNlKSk7CisgICAgaWYgKCF1cmxSZWYpCisgICAgICAgIHJldHVybjsKKyAgICBFeHRBdWRpb0Zp
bGVPcGVuVVJMKHVybFJlZi5nZXQoKSwgJm1fZXh0QXVkaW9GaWxlUmVmKTsKK30KKworQXVkaW9G
aWxlUmVhZGVyOjpBdWRpb0ZpbGVSZWFkZXIoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFT
aXplKQorICAgIDogbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFTaXplKGRhdGFTaXplKQorICAg
ICwgbV9hdWRpb0ZpbGVJRCgwKQorICAgICwgbV9leHRBdWRpb0ZpbGVSZWYobnVsbHB0cikKK3sK
KyAgICBpZiAoQXVkaW9GaWxlT3BlbldpdGhDYWxsYmFja3ModGhpcywgcmVhZFByb2MsIDAsIGdl
dFNpemVQcm9jLCAwLCAwLCAmbV9hdWRpb0ZpbGVJRCkgIT0gbm9FcnIpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChFeHRBdWRpb0ZpbGVXcmFwQXVkaW9GaWxlSUQobV9hdWRpb0ZpbGVJRCwg
ZmFsc2UsICZtX2V4dEF1ZGlvRmlsZVJlZikgIT0gbm9FcnIpCisgICAgICAgIG1fZXh0QXVkaW9G
aWxlUmVmID0gbnVsbHB0cjsKK30KKworQXVkaW9GaWxlUmVhZGVyOjp+QXVkaW9GaWxlUmVhZGVy
KCkKK3sKKyAgICBpZiAobV9leHRBdWRpb0ZpbGVSZWYpCisgICAgICAgIEV4dEF1ZGlvRmlsZURp
c3Bvc2UobV9leHRBdWRpb0ZpbGVSZWYpOworCisgICAgbV9leHRBdWRpb0ZpbGVSZWYgPSBudWxs
cHRyOworCisgICAgaWYgKG1fYXVkaW9GaWxlSUQpCisgICAgICAgIEF1ZGlvRmlsZUNsb3NlKG1f
YXVkaW9GaWxlSUQpOworCisgICAgbV9hdWRpb0ZpbGVJRCA9IDA7Cit9CisKK09TU3RhdHVzIEF1
ZGlvRmlsZVJlYWRlcjo6cmVhZFByb2Modm9pZCogY2xpZW50RGF0YSwgU0ludDY0IHBvc2l0aW9u
LCBVSW50MzIgcmVxdWVzdENvdW50LCB2b2lkKiBidWZmZXIsIFVJbnQzMiogYWN0dWFsQ291bnQp
Cit7CisgICAgQXVkaW9GaWxlUmVhZGVyKiBhdWRpb0ZpbGVSZWFkZXIgPSBzdGF0aWNfY2FzdDxB
dWRpb0ZpbGVSZWFkZXIqPihjbGllbnREYXRhKTsKKworICAgIHNpemVfdCBkYXRhU2l6ZSA9IGF1
ZGlvRmlsZVJlYWRlci0+ZGF0YVNpemUoKTsKKyAgICBjb25zdCB2b2lkKiBkYXRhID0gYXVkaW9G
aWxlUmVhZGVyLT5kYXRhKCk7CisgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gMDsKKworICAgIGlm
IChzdGF0aWNfY2FzdDxVSW50NjQ+KHBvc2l0aW9uKSA8IGRhdGFTaXplKSB7CisgICAgICAgIHNp
emVfdCBieXRlc0F2YWlsYWJsZSA9IGRhdGFTaXplIC0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihwb3Np
dGlvbik7CisgICAgICAgIGJ5dGVzVG9SZWFkID0gcmVxdWVzdENvdW50IDw9IGJ5dGVzQXZhaWxh
YmxlID8gcmVxdWVzdENvdW50IDogYnl0ZXNBdmFpbGFibGU7CisgICAgICAgIG1lbWNweShidWZm
ZXIsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSArIHBvc2l0aW9uLCBieXRlc1RvUmVh
ZCk7CisgICAgfQorCisgICAgaWYgKGFjdHVhbENvdW50KQorICAgICAgICAqYWN0dWFsQ291bnQg
PSBieXRlc1RvUmVhZDsKKworICAgIHJldHVybiBub0VycjsKK30KKworU0ludDY0IEF1ZGlvRmls
ZVJlYWRlcjo6Z2V0U2l6ZVByb2Modm9pZCogY2xpZW50RGF0YSkKK3sKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QXVkaW9GaWxlUmVhZGVyKj4oY2xpZW50RGF0YSktPmRhdGFTaXplKCk7Cit9CisK
K1Bhc3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNh
bXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vKQoreworICAgIGlmICghbV9leHRBdWRpb0ZpbGVSZWYp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gR2V0IGZpbGUncyBkYXRhIGZvcm1h
dAorICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKG1fZmlsZURhdGFGb3JtYXQpOworICAgIGlmIChF
eHRBdWRpb0ZpbGVHZXRQcm9wZXJ0eShtX2V4dEF1ZGlvRmlsZVJlZiwga0V4dEF1ZGlvRmlsZVBy
b3BlcnR5X0ZpbGVEYXRhRm9ybWF0LCAmc2l6ZSwgJm1fZmlsZURhdGFGb3JtYXQpICE9IG5vRXJy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHNpemVfdCBudW1iZXJPZkNoYW5uZWxz
ID0gbV9maWxlRGF0YUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZTsKKworICAgIC8vIE51bWJlciBv
ZiBmcmFtZXMKKyAgICBTSW50NjQgbnVtYmVyT2ZGcmFtZXM2NCA9IDA7CisgICAgc2l6ZSA9IHNp
emVvZihudW1iZXJPZkZyYW1lczY0KTsKKyAgICBpZiAoRXh0QXVkaW9GaWxlR2V0UHJvcGVydHko
bV9leHRBdWRpb0ZpbGVSZWYsIGtFeHRBdWRpb0ZpbGVQcm9wZXJ0eV9GaWxlTGVuZ3RoRnJhbWVz
LCAmc2l6ZSwgJm51bWJlck9mRnJhbWVzNjQpICE9IG5vRXJyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGRvdWJsZSBmaWxlU2FtcGxlUmF0ZSA9IG1fZmlsZURhdGFGb3JtYXQubVNh
bXBsZVJhdGU7CisKKyAgICAvLyBNYWtlIGNsaWVudCBmb3JtYXQgc2FtZSBudW1iZXIgb2YgY2hh
bm5lbHMgYXMgZmlsZSBmb3JtYXQsIGJ1dCB0d2VhayBhIGZldyB0aGluZ3MuCisgICAgLy8gQ2xp
ZW50IGZvcm1hdCB3aWxsIGJlIGxpbmVhciBQQ00gKGNhbm9uaWNhbCksIGFuZCBwb3RlbnRpYWxs
eSBjaGFuZ2Ugc2FtcGxlLXJhdGUuCisgICAgbV9jbGllbnREYXRhRm9ybWF0ID0gbV9maWxlRGF0
YUZvcm1hdDsKKworICAgIGNvbnN0IGludCBieXRlc1BlckZsb2F0ID0gc2l6ZW9mKEZsb2F0MzIp
OworICAgIGNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7CisgICAgbV9jbGllbnREYXRhRm9ybWF0
Lm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKKyAgICBtX2NsaWVudERhdGFGb3Jt
YXQubUZvcm1hdEZsYWdzID0ga0F1ZGlvRm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtB
dWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkOworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5t
Qnl0ZXNQZXJQYWNrZXQgPSBieXRlc1BlckZsb2F0OworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5t
RnJhbWVzUGVyUGFja2V0ID0gMTsKKyAgICBtX2NsaWVudERhdGFGb3JtYXQubUJ5dGVzUGVyRnJh
bWUgPSBieXRlc1BlckZsb2F0OworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tQ2hhbm5lbHNQZXJG
cmFtZSA9IG51bWJlck9mQ2hhbm5lbHM7CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1CaXRzUGVy
Q2hhbm5lbCA9IGJpdHNQZXJCeXRlICogYnl0ZXNQZXJGbG9hdDsKKworICAgIGlmIChzYW1wbGVS
YXRlKQorICAgICAgICBtX2NsaWVudERhdGFGb3JtYXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRl
OworCisgICAgaWYgKEV4dEF1ZGlvRmlsZVNldFByb3BlcnR5KG1fZXh0QXVkaW9GaWxlUmVmLCBr
RXh0QXVkaW9GaWxlUHJvcGVydHlfQ2xpZW50RGF0YUZvcm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFt
QmFzaWNEZXNjcmlwdGlvbiksICZtX2NsaWVudERhdGFGb3JtYXQpICE9IG5vRXJyKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIENoYW5nZSBudW1iZXJPZkZyYW1lczY0IHRvIGRl
c3RpbmF0aW9uIHNhbXBsZS1yYXRlCisgICAgbnVtYmVyT2ZGcmFtZXM2NCA9IG51bWJlck9mRnJh
bWVzNjQgKiAobV9jbGllbnREYXRhRm9ybWF0Lm1TYW1wbGVSYXRlIC8gZmlsZVNhbXBsZVJhdGUp
OworICAgIHNpemVfdCBudW1iZXJPZkZyYW1lcyA9IHN0YXRpY19jYXN0PHNpemVfdD4obnVtYmVy
T2ZGcmFtZXM2NCk7CisKKyAgICBzaXplX3QgYnVzQ2hhbm5lbENvdW50ID0gbWl4VG9Nb25vID8g
MSA6IG51bWJlck9mQ2hhbm5lbHM7CisKKyAgICAvLyBDcmVhdGUgQXVkaW9CdXMgd2hlcmUgd2Un
bGwgcHV0IHRoZSBQQ00gYXVkaW8gZGF0YQorICAgIFJlZlB0cjxBdWRpb0J1cz4gYXVkaW9CdXMg
PSBBdWRpb0J1czo6Y3JlYXRlKGJ1c0NoYW5uZWxDb3VudCwgbnVtYmVyT2ZGcmFtZXMpOworICAg
IGF1ZGlvQnVzLT5zZXRTYW1wbGVSYXRlKG1fY2xpZW50RGF0YUZvcm1hdC5tU2FtcGxlUmF0ZSk7
IC8vIHNhdmUgZm9yIGxhdGVyCisKKyAgICAvLyBPbmx5IGFsbG9jYXRlZCBpbiB0aGUgbWl4VG9N
b25vIGNhc2U7IGRlYWxsb2NhdGVkIG9uIGRlc3RydWN0aW9uLgorICAgIEF1ZGlvRmxvYXRBcnJh
eSBsZWZ0Q2hhbm5lbDsKKyAgICBBdWRpb0Zsb2F0QXJyYXkgcmlnaHRDaGFubmVsOworCisgICAg
QXVkaW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0ID0gY3JlYXRlQXVkaW9CdWZmZXJMaXN0KG51bWJl
ck9mQ2hhbm5lbHMpOworICAgIGlmICghYnVmZmVyTGlzdCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgY29uc3Qgc2l6ZV90IGJ1ZmZlclNpemUgPSBudW1iZXJPZkZyYW1lcyAqIHNpemVv
ZihmbG9hdCk7CisKKyAgICBpZiAobWl4VG9Nb25vICYmIG51bWJlck9mQ2hhbm5lbHMgPT0gMikg
eworICAgICAgICBsZWZ0Q2hhbm5lbC5hbGxvY2F0ZShudW1iZXJPZkZyYW1lcyk7CisgICAgICAg
IHJpZ2h0Q2hhbm5lbC5hbGxvY2F0ZShudW1iZXJPZkZyYW1lcyk7CisKKyAgICAgICAgYnVmZmVy
TGlzdC0+bUJ1ZmZlcnNbMF0ubU51bWJlckNoYW5uZWxzID0gMTsKKyAgICAgICAgYnVmZmVyTGlz
dC0+bUJ1ZmZlcnNbMF0ubURhdGFCeXRlU2l6ZSA9IGJ1ZmZlclNpemU7CisgICAgICAgIGJ1ZmZl
ckxpc3QtPm1CdWZmZXJzWzBdLm1EYXRhID0gbGVmdENoYW5uZWwuZGF0YSgpOworCisgICAgICAg
IGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1OdW1iZXJDaGFubmVscyA9IDE7CisgICAgICAgIGJ1
ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1EYXRhQnl0ZVNpemUgPSBidWZmZXJTaXplOworICAgICAg
ICBidWZmZXJMaXN0LT5tQnVmZmVyc1sxXS5tRGF0YSA9IHJpZ2h0Q2hhbm5lbC5kYXRhKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCFtaXhUb01vbm8gfHwgbnVtYmVyT2ZDaGFubmVs
cyA9PSAxKTsKKworICAgICAgICAvLyBGb3IgVHJ1ZS1zdGVyZW8gKG51bWJlck9mQ2hhbm5lbHMg
PT0gNCkKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyAr
K2kpIHsKKyAgICAgICAgICAgIGF1ZGlvQnVzLT5jaGFubmVsKGkpLT56ZXJvKCk7CisgICAgICAg
ICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tTnVtYmVyQ2hhbm5lbHMgPSAxOworICAgICAg
ICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSA9IGJ1ZmZlclNpemU7
CisgICAgICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YSA9IGF1ZGlvQnVzLT5j
aGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmVh
ZCBmcm9tIHRoZSBmaWxlIChvciBpbi1tZW1vcnkgdmVyc2lvbikKKyAgICBVSW50MzIgZnJhbWVz
VG9SZWFkID0gbnVtYmVyT2ZGcmFtZXM7CisgICAgaWYgKEV4dEF1ZGlvRmlsZVJlYWQobV9leHRB
dWRpb0ZpbGVSZWYsICZmcmFtZXNUb1JlYWQsIGJ1ZmZlckxpc3QpICE9IG5vRXJyKSB7CisgICAg
ICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoYnVmZmVyTGlzdCk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIGlmIChtaXhUb01vbm8gJiYgbnVtYmVyT2ZDaGFubmVscyA9
PSAyKSB7CisgICAgICAgIC8vIE1peCBzdGVyZW8gZG93biB0byBtb25vCisgICAgICAgIGZsb2F0
KiBkZXN0TCA9IGF1ZGlvQnVzLT5jaGFubmVsKDApLT5tdXRhYmxlRGF0YSgpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mRnJhbWVzOyArK2kpCisgICAgICAgICAgICBk
ZXN0TFtpXSA9IDAuNWYgKiAobGVmdENoYW5uZWxbaV0gKyByaWdodENoYW5uZWxbaV0pOworICAg
IH0KKworICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoYnVmZmVyTGlzdCk7CisKKyAgICByZXR1
cm4gYXVkaW9CdXMucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVC
dXNGcm9tQXVkaW9GaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoLCBib29sIG1peFRvTW9ubywgZmxv
YXQgc2FtcGxlUmF0ZSkKK3sKKyAgICBBdWRpb0ZpbGVSZWFkZXIgcmVhZGVyKGZpbGVQYXRoKTsK
KyAgICByZXR1cm4gcmVhZGVyLmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOworfQor
CitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUoY29u
c3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2Ft
cGxlUmF0ZSkKK3sKKyAgICBBdWRpb0ZpbGVSZWFkZXIgcmVhZGVyKGRhdGEsIGRhdGFTaXplKTsK
KyAgICByZXR1cm4gcmVhZGVyLmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOworfQor
Cit9IC8vIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pICYmIFBMQVRGT1JN
KElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRp
b0ZpbGVSZWFkZXJJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRp
b0ZpbGVSZWFkZXJJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZWY1NjkzM2VmZDdlYTg3YWQ1YmNlZTk3ODNh
MDM2YTA2OTY4OTk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBB
dWRpb0ZpbGVSZWFkZXJJT1NfaAorI2RlZmluZSBBdWRpb0ZpbGVSZWFkZXJJT1NfaAorCisjaW5j
bHVkZSA8QXVkaW9Ub29sYm94L0F1ZGlvRmlsZS5oPgorI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9F
eHRlbmRlZEF1ZGlvRmlsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9CdXM7CisKKy8vIFdyYXBwZXIgY2xhc3MgZm9y
IEF1ZGlvRmlsZSBhbmQgRXh0QXVkaW9GaWxlIENvcmVBdWRpbyBBUElzIGZvciByZWFkaW5nIGZp
bGVzIGFuZCBpbi1tZW1vcnkgdmVyc2lvbnMgb2YgdGhlbS4uLgorCitjbGFzcyBBdWRpb0ZpbGVS
ZWFkZXIgeworcHVibGljOgorICAgIEF1ZGlvRmlsZVJlYWRlcihjb25zdCBjaGFyKiBmaWxlUGF0
aCk7CisgICAgQXVkaW9GaWxlUmVhZGVyKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6
ZSk7CisgICAgfkF1ZGlvRmlsZVJlYWRlcigpOworCisgICAgUGFzc1JlZlB0cjxBdWRpb0J1cz4g
Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vKTsgLy8gUmV0dXJucyBu
dWxscHRyIG9uIGVycm9yCisKKyAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhOyB9CisgICAgc2l6ZV90IGRhdGFTaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhU2l6
ZTsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBPU1N0YXR1cyByZWFkUHJvYyh2b2lkKiBjbGll
bnREYXRhLCBTSW50NjQgcG9zaXRpb24sIFVJbnQzMiByZXF1ZXN0Q291bnQsIHZvaWQqIGJ1ZmZl
ciwgVUludDMyKiBhY3R1YWxDb3VudCk7CisgICAgc3RhdGljIFNJbnQ2NCBnZXRTaXplUHJvYyh2
b2lkKiBjbGllbnREYXRhKTsKKworICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKKyAgICBzaXplX3Qg
bV9kYXRhU2l6ZTsKKworICAgIEF1ZGlvRmlsZUlEIG1fYXVkaW9GaWxlSUQ7CisgICAgRXh0QXVk
aW9GaWxlUmVmIG1fZXh0QXVkaW9GaWxlUmVmOworCisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uIG1fZmlsZURhdGFGb3JtYXQ7CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
IG1fY2xpZW50RGF0YUZvcm1hdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEF1ZGlvRmlsZVJlYWRlcklPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9TZXNzaW9uSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vaW9zL0F1ZGlvU2Vzc2lvbklPUy5tbQppbmRleCA3OWUyNjFhYTBmOGE0Yjg3
NWNmNGNlNTI5ZmUzNTQ2NWI4NDMyYjc5Li4zNDljMWY1ZDgzOTNjNTNlZDQ4MDg5ZmM4ZTRkYTE1
YTNkODE2OGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3Mv
QXVkaW9TZXNzaW9uSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lv
cy9BdWRpb1Nlc3Npb25JT1MubW0KQEAgLTQyLDcgKzQyLDYgQEAgU09GVF9MSU5LX1BPSU5URVIo
QVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5UGxheWJhY2ssIE5TU3RyaW5nICop
CiBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlS
ZWNvcmQsIE5TU3RyaW5nICopCiBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVk
aW9TZXNzaW9uQ2F0ZWdvcnlQbGF5QW5kUmVjb3JkLCBOU1N0cmluZyAqKQogU09GVF9MSU5LX1BP
SU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5QXVkaW9Qcm9jZXNzaW5n
LCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vz
c2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiwgTlNTdHJpbmcgKikKIFNPRlRfTElOS19QT0lO
VEVSKEFWRm91bmRhdGlvbiwgQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25UeXBlS2V5LCBOU1N0
cmluZyAqKQogCiAjZGVmaW5lIEFWQXVkaW9TZXNzaW9uIGdldEFWQXVkaW9TZXNzaW9uQ2xhc3Mo
KQpAQCAtNTIsOSArNTEsMTQgQEAgU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1
ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXksIE5TU3RyaW5nICopCiAjZGVmaW5lIEFWQXVk
aW9TZXNzaW9uQ2F0ZWdvcnlSZWNvcmQgZ2V0QVZBdWRpb1Nlc3Npb25DYXRlZ29yeVJlY29yZCgp
CiAjZGVmaW5lIEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlQbGF5QW5kUmVjb3JkIGdldEFWQXVkaW9T
ZXNzaW9uQ2F0ZWdvcnlQbGF5QW5kUmVjb3JkKCkKICNkZWZpbmUgQVZBdWRpb1Nlc3Npb25DYXRl
Z29yeUF1ZGlvUHJvY2Vzc2luZyBnZXRBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5QXVkaW9Qcm9jZXNz
aW5nKCkKLSNkZWZpbmUgQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24gZ2V0
QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24oKQogI2RlZmluZSBBVkF1ZGlv
U2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXkgZ2V0QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25U
eXBlS2V5KCkKIAorc3RhdGljIE5TU3RyaW5nICogY29uc3QgV0NBVkF1ZGlvU2Vzc2lvbkludGVy
cnVwdGlvbk5vdGlmaWNhdGlvbiA9IEAiQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmlj
YXRpb24iOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorU09GVF9MSU5LX1BPSU5URVIoQVZGb3Vu
ZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiwgTlNTdHJpbmcg
KikKKyNlbmRpZgorCiBAaW50ZXJmYWNlIFdlYkF1ZGlvU2Vzc2lvbkhlbHBlciA6IE5TT2JqZWN0
IHsKICAgICBXZWJDb3JlOjpBdWRpb1Nlc3Npb24qIF9jYWxsYmFjazsKIH0KQEAgLTcxLDE5ICs3
NSwyNSBAQCBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uSW50
ZXJydXB0aW9uVHlwZUtleSwgTlNTdHJpbmcgKikKIAogICAgIF9jYWxsYmFjayA9IGNhbGxiYWNr
OwogCi0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZl
cjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihpbnRlcnJ1cHRpb246KSBuYW1lOkFWQXVkaW9TZXNz
aW9uSW50ZXJydXB0aW9uTm90aWZpY2F0aW9uIG9iamVjdDpbQVZBdWRpb1Nlc3Npb24gc2hhcmVk
SW5zdGFuY2VdXTsKKyAgICBBU1NFUlQoW1dDQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3Rp
ZmljYXRpb24gaXNFcXVhbFRvU3RyaW5nOmdldEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uTm90
aWZpY2F0aW9uKCldKTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaW50ZXJydXB0aW9uOikgbmFt
ZTpXQ0FWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwog
CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07CisgICAg
W1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxm
IG5hbWU6V0NBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiBvYmplY3Q6bmls
XTsKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKIC0gKHZvaWQpaW50ZXJydXB0aW9uOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogeworICAgIEFTU0VSVChbQVZBdWRpb1Nlc3Npb24g
c2hhcmVkSW5zdGFuY2VdID09IFtub3RpZmljYXRpb24gb2JqZWN0XSk7CisgICAgaWYgKFtBVkF1
ZGlvU2Vzc2lvbiBzaGFyZWRJbnN0YW5jZV0gIT0gW25vdGlmaWNhdGlvbiBvYmplY3RdKQorICAg
ICAgICByZXR1cm47CisKICAgICBOU1VJbnRlZ2VyIHR5cGUgPSBbW1tub3RpZmljYXRpb24gdXNl
ckluZm9dIG9iamVjdEZvcktleTpBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXldIHVu
c2lnbmVkSW50ZWdlclZhbHVlXTsKICAgICBpZiAodHlwZSA9PSBBVkF1ZGlvU2Vzc2lvbkludGVy
cnVwdGlvblR5cGVCZWdhbikKICAgICAgICAgX2NhbGxiYWNrLT5iZWdhbkF1ZGlvSW50ZXJydXB0
aW9uKCk7CkBAIC0xMzMsMTkgKzE0MywyNiBAQCB2b2lkIEF1ZGlvU2Vzc2lvbjo6c2V0Q2F0ZWdv
cnkoQ2F0ZWdvcnlUeXBlIG5ld0NhdGVnb3J5KQogICAgIHN3aXRjaCAobmV3Q2F0ZWdvcnkpIHsK
ICAgICBjYXNlIEFtYmllbnRTb3VuZDoKICAgICAgICAgY2F0ZWdvcnlTdHJpbmcgPSBBVkF1ZGlv
U2Vzc2lvbkNhdGVnb3J5QW1iaWVudDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTb2xvQW1i
aWVudFNvdW5kOgogICAgICAgICBjYXRlZ29yeVN0cmluZyA9IEFWQXVkaW9TZXNzaW9uQ2F0ZWdv
cnlTb2xvQW1iaWVudDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNZWRpYVBsYXliYWNrOgog
ICAgICAgICBjYXRlZ29yeVN0cmluZyA9IEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlQbGF5YmFjazsK
KyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZWNvcmRBdWRpbzoKICAgICAgICAgY2F0ZWdvcnlT
dHJpbmcgPSBBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5UmVjb3JkOworICAgICAgICBicmVhazsKICAg
ICBjYXNlIFBsYXlBbmRSZWNvcmQ6CiAgICAgICAgIGNhdGVnb3J5U3RyaW5nID0gQVZBdWRpb1Nl
c3Npb25DYXRlZ29yeVBsYXlBbmRSZWNvcmQ7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQXVk
aW9Qcm9jZXNzaW5nOgogICAgICAgICBjYXRlZ29yeVN0cmluZyA9IEFWQXVkaW9TZXNzaW9uQ2F0
ZWdvcnlBdWRpb1Byb2Nlc3Npbmc7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9uZToKICAg
ICBkZWZhdWx0OgogICAgICAgICBjYXRlZ29yeVN0cmluZyA9IG5pbDsKKyAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwogICAgIFtbQVZBdWRpb1Nlc3Npb24g
c2hhcmVkSW5zdGFuY2VdIHNldENhdGVnb3J5OmNhdGVnb3J5U3RyaW5nIGVycm9yOiZlcnJvcl07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0
aW5hdGlvbk1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9E
ZXN0aW5hdGlvbk1hYy5jcHAKaW5kZXggYjBlZGE4MTVlM2M1OTc0ZDVjYWNjMjc2NGIwNzJmYTZi
ODhkNjUzMS4uM2M3NmNmNTM0ZTk2MjVkM2EwOWUxZDY1NGMwZTMwYmI2ZjkxZmQ3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25N
YWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3Rp
bmF0aW9uTWFjLmNwcApAQCAtMzAsNiArMzAsOCBAQAogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykK
IAorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKKwogI2luY2x1ZGUgIkF1ZGlv
RGVzdGluYXRpb25NYWMuaCIKIAogI2luY2x1ZGUgIkF1ZGlvSU9DYWxsYmFjay5oIgpAQCAtMTgx
LDQgKzE4Myw2IEBAIE9TU3RhdHVzIEF1ZGlvRGVzdGluYXRpb25NYWM6OmlucHV0UHJvYyh2b2lk
KiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKKwogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwCmluZGV4IGVkMmVkNTVhOWUy
OTBiNzgxNmY2YzNlNGEyMWZiYTc3OWEyODdmN2MuLjdkMjU5NGM2NDkyYjUyNTZjZjcxOTY4YTdl
NmI1NWNjNTQ1YjEyY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAKICNp
ZiBFTkFCTEUoV0VCX0FVRElPKQogCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9T
KQorCiAjaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyTWFjLmgiCiAKICNpbmNsdWRlICJBdWRpb0J1
cy5oIgpAQCAtNTgsNyArNjAsNyBAQCBzdGF0aWMgdm9pZCBkZXN0cm95QXVkaW9CdWZmZXJMaXN0
KEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCkKIH0KIAogQXVkaW9GaWxlUmVhZGVyOjpBdWRp
b0ZpbGVSZWFkZXIoY29uc3QgY2hhciogZmlsZVBhdGgpCi0gICAgOiBtX2RhdGEoMCkKKyAgICA6
IG1fZGF0YShudWxscHRyKQogICAgICwgbV9kYXRhU2l6ZSgwKQogICAgICwgbV9hdWRpb0ZpbGVJ
RCgwKQogICAgICwgbV9leHRBdWRpb0ZpbGVSZWYoMCkKQEAgLTIzNywxNiArMjM5LDE2IEBAIFBh
c3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBs
ZVJhdGUsIGJvb2wgbWl4VG9Nb25vCiAKIFBhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zy
b21BdWRpb0ZpbGUoY29uc3QgY2hhciogZmlsZVBhdGgsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBz
YW1wbGVSYXRlKQogewotICAgIEF1ZGlvRmlsZVJlYWRlciByZWFkZXIoZmlsZVBhdGgpOwotICAg
IHJldHVybiByZWFkZXIuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CisgICAgcmV0
dXJuIEF1ZGlvRmlsZVJlYWRlcihmaWxlUGF0aCkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRv
TW9ubyk7CiB9CiAKIFBhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1
ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25v
LCBmbG9hdCBzYW1wbGVSYXRlKQogewotICAgIEF1ZGlvRmlsZVJlYWRlciByZWFkZXIoZGF0YSwg
ZGF0YVNpemUpOwotICAgIHJldHVybiByZWFkZXIuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRv
TW9ubyk7CisgICAgcmV0dXJuIEF1ZGlvRmlsZVJlYWRlcihkYXRhLCBkYXRhU2l6ZSkuY3JlYXRl
QnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CiB9CiAKLX0gLy8gV2ViQ29yZQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9T
KQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1Nlc3Npb25NYWMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5jcHAKaW5kZXggNzc4ODQ3MmNm
NGZiZTNmMGEzMjdiMWM2OTg2MmYyNjI1ZTFhNTllZS4uMzVlMjhhYjE4ZjU5M2Y4NjlmMTY5ODhh
N2I3MDBhYWY3MWRmZDEyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJBdWRpb1Nlc3Npb24uaCIKIAotI2lmIFVTRShBVURJT19T
RVNTSU9OKSAmJiBQTEFURk9STShNQUMpCisjaWYgVVNFKEFVRElPX1NFU1NJT04pICYmIFBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9NZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL21hYy9NZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcAppbmRleCBkYTA4
MmE2ZjIyMjk0ODE0OTVhNTUzOTg1YTJkMGViOTkxZTU4YjU2Li44YmU3ZTZlOGRhNDViYjM5ZDU4
YzJiYzNhNjJmZDUwZjUwNjYxZjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9tYWMvTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL01lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwCkBAIC00OCw3
ICs0OCw3IEBAIHZvaWQgTWVkaWFTZXNzaW9uTWFuYWdlcjo6dXBkYXRlU2Vzc2lvblN0YXRlKCkK
ICAgICAgICAgQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2V0UHJlZmVycmVkQnVmZmVy
U2l6ZShrV2ViQXVkaW9CdWZmZXJTaXplKTsKICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQu
b3JnL2IvMTE2NzI1PiBGaWd1cmUgb3V0IHdoeSBlbmFibGluZyB0aGUgY29kZSBiZWxvdwogICAg
IC8vIGNhdXNlcyBtZWRpYSBMYXlvdXRUZXN0cyB0byBmYWlsIG9uIDEwLjguCi0jaWYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgUExBVEZPUk0oSU9TKSB8fCBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICBlbHNlIGlmICgoaGFz
KE1lZGlhU2Vzc2lvbjo6VmlkZW8pIHx8IGhhcyhNZWRpYVNlc3Npb246OkF1ZGlvKSkgJiYgU2V0
dGluZ3M6Omxvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkKCkpCiAgICAgICAgIEF1
ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNldFByZWZlcnJlZEJ1ZmZlclNpemUoa0xvd1Bv
d2VyVmlkZW9CdWZmZXJTaXplKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2YvU2hhcmVkQnVmZmVyQ0YuY3BwCmluZGV4IDhlN2M3YTM3NTVhMDgxZmQ5NDdhNDY1ZmIzMmE1
YjI0Y2MxYjE5MjYuLmUxODU5MzkwMGM2MjllZTliMzk3MmExNWRhZjI4Nzc4OTQ1NTE2NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAKQEAgLTM4
LDEzICszOCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVk
QnVmZmVyKENGRGF0YVJlZiBjZkRhdGEpCiAgICAgOiBtX3NpemUoMCkKLSAgICAsIG1fY2ZEYXRh
KGNmRGF0YSkKKyAgICAsIG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGZhbHNlKQogI2lmIEVO
QUJMRShESVNLX0lNQUdFX0NBQ0hFKQogICAgICwgbV9pc01lbW9yeU1hcHBlZChmYWxzZSkKICAg
ICAsIG1fZGlza0ltYWdlQ2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlk
KQogICAgICwgbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFjayhudWxscHRyKQogICAgICwgbV9u
b3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFja0RhdGEobnVsbHB0cikKICNlbmRpZgorICAgICwgbV9j
ZkRhdGEoY2ZEYXRhKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jZi9VUkxDRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9VUkxDRi5jcHAKaW5k
ZXggYjNlY2I1MDMxOTIyMmEyZDQ0YWFhN2Q0OGNjYjEzNWJlZTM1MzljOS4uNWIxNjk0ODc2NmQz
MzhmZjM0OWM0ZWY1MjY0OGI1YzRhNDZjNzQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2YvVVJMQ0YuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1VS
TENGLmNwcApAQCAtMzAsNiArMzAsMTEgQEAKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlVS
TC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElPUykK
KyNpbmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCIKKyNpbmNsdWRlIDxDb3Jl
Rm91bmRhdGlvbi9DRlByaXYuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFVS
TDo6VVJMKENGVVJMUmVmIHVybCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL0tleUV2ZW50Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9L
ZXlFdmVudENvY29hLm1tCmluZGV4IGExMjViNmExMGY0N2I3MmU2MDU2ZGY3OTRiNmRlYWI1ZDQ3
NmYzNjkuLjFhM2Q4MzBkZDE5NGMwZDk2OTRjMjg1NjhiMzQ5MmRiMTNkOGNiOWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0tleUV2ZW50Q29jb2EubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvS2V5RXZlbnRDb2NvYS5tbQpAQCAtNTMxLDkg
KzUzMSw4IEBAIGludCB3aW5kb3dzS2V5Q29kZUZvckNoYXJDb2RlKHVuaWNoYXIgY2hhckNvZGUp
CiAgICAgICAgIGNhc2UgTlNQcmludEZ1bmN0aW9uS2V5OiByZXR1cm4gVktfUFJJTlQ7CiAgICAg
ICAgIGNhc2UgTlNFeGVjdXRlRnVuY3Rpb25LZXk6IHJldHVybiBWS19FWEVDVVRFOwogICAgICAg
ICBjYXNlIE5TUHJpbnRTY3JlZW5GdW5jdGlvbktleTogcmV0dXJuIFZLX1NOQVBTSE9UOwotICAg
ICAgICBjYXNlIE5TSW5zZXJ0RnVuY3Rpb25LZXk6IHJldHVybiBWS19JTlNFUlQ7CiAjaWYgUExB
VEZPUk0oSU9TKQotICAgICAgICBjYXNlIE5TSGVscEZ1bmN0aW9uS2V5OiByZXR1cm4gVktfSU5T
RVJUOworICAgICAgICBjYXNlIE5TSW5zZXJ0RnVuY3Rpb25LZXk6IGNhc2UgTlNIZWxwRnVuY3Rp
b25LZXk6IHJldHVybiBWS19JTlNFUlQ7CiAKICAgICAgICAgY2FzZSBOU0YxRnVuY3Rpb25LZXk6
IHJldHVybiBWS19GMTsKICAgICAgICAgY2FzZSBOU0YyRnVuY3Rpb25LZXk6IHJldHVybiBWS19G
MjsKQEAgLTU1NSw2ICs1NTQsOCBAQCBpbnQgd2luZG93c0tleUNvZGVGb3JDaGFyQ29kZSh1bmlj
aGFyIGNoYXJDb2RlKQogICAgICAgICBjYXNlIE5TRjE4RnVuY3Rpb25LZXk6IHJldHVybiBWS19G
MTg7CiAgICAgICAgIGNhc2UgTlNGMTlGdW5jdGlvbktleTogcmV0dXJuIFZLX0YxOTsKICAgICAg
ICAgY2FzZSBOU0YyMEZ1bmN0aW9uS2V5OiByZXR1cm4gVktfRjIwOworI2Vsc2UKKyAgICAgICAg
Y2FzZSBOU0luc2VydEZ1bmN0aW9uS2V5OiByZXR1cm4gVktfSU5TRVJUOwogI2VuZGlmCiAgICAg
ICAgIGNhc2UgTlNGMjFGdW5jdGlvbktleTogcmV0dXJuIFZLX0YyMTsKICAgICAgICAgY2FzZSBO
U0YyMkZ1bmN0aW9uS2V5OiByZXR1cm4gVktfRjIyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4IGM4OGFiNWU0OTk2YWM5OTcxZGVm
ZWYwYjFlODkzNjJhN2M3NzNhMTkuLjQ3MDA4MmVkNWM1ZWYwMmE3MzNlNmQ5NDEyMWMwNDkyMDVi
ZTBkMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5jcHAKQEAgLTM3LDggKzM3LDE0IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1
ZGUgPGxpbWl0cz4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBX
ZSBzaG91bGQgYmV0dGVyIGludGVncmF0ZSB0aGUgaU9TIGFuZCBub24taU9TIGNvZGUgaW4gdGhp
cyBjbGFzcy4gVW5saWtlIG90aGVyIHBvcnRzLCB0aGUKKy8vIGlPUyBwb3J0IGNhY2hlcyB0aGUg
bWV0YWRhdGEgZm9yIGEgZnJhbWUgd2l0aG91dCBkZWNvZGluZyB0aGUgaW1hZ2UuCiBCaXRtYXBJ
bWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShv
YnNlcnZlcikKICAgICAsIG1fY3VycmVudEZyYW1lKDApCkBAIC01MCw2ICs1NiwxMSBAQCBCaXRt
YXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgLCBtX2Rl
Y29kZWRTaXplKDApCiAgICAgLCBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSgwKQogICAgICwgbV9m
cmFtZUNvdW50KDApCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
ZXhwb3NlIGEgc2V0dGluZyB0byBlbmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIHJl
bW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKyAgICAsIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1
bmtUaW1lKDApCisgICAgLCBtX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQoMCkKKyNlbmRpZgog
ICAgICwgbV9pc1NvbGlkQ29sb3IoZmFsc2UpCiAgICAgLCBtX2NoZWNrZWRGb3JTb2xpZENvbG9y
KGZhbHNlKQogICAgICwgbV9hbmltYXRpb25GaW5pc2hlZChmYWxzZSkKQEAgLTEwMCw3ICsxMTEs
MTYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9v
bCBkZXN0cm95QWxsKQogewogICAgIC8vIEFuaW1hdGVkIGltYWdlcyA+NU1CIGFyZSBjb25zaWRl
cmVkIGxhcmdlIGVub3VnaCB0aGF0IHdlJ2xsIG9ubHkgaGFuZyBvbgogICAgIC8vIHRvIG9uZSBm
cmFtZSBhdCBhIHRpbWUuCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjTGFyZ2VBbmltYXRpb25DdXRvZmYgPSAyMDk3MTUyOworCisgICAgIC8vIElmIHdlIGhh
dmUgZGVjb2RlZCBmcmFtZXMgYnV0IHRoZXJlIGlzIG5vIGVuY29kZWQgZGF0YSwgd2Ugc2hvdWxk
bid0IGRlc3Ryb3kKKyAgICAgLy8gdGhlIGRlY29kZWQgaW1hZ2Ugc2luY2Ugd2Ugd29uJ3QgYmUg
YWJsZSB0byByZWNvbnN0cnVjdCBpdCBsYXRlci4KKyAgICAgaWYgKCFkYXRhKCkgJiYgbV9mcmFt
ZXMuc2l6ZSgpKQorICAgICAgICAgcmV0dXJuOworI2Vsc2UKICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgY0xhcmdlQW5pbWF0aW9uQ3V0b2ZmID0gNTI0Mjg4MDsKKyNlbmRpZgogCiAgICAgLy8g
SWYgd2UgaGF2ZSBkZWNvZGVkIGZyYW1lcyBidXQgdGhlcmUgaXMgbm8gZW5jb2RlZCBkYXRhLCB3
ZSBzaG91bGRuJ3QgZGVzdHJveQogICAgIC8vIHRoZSBkZWNvZGVkIGltYWdlIHNpbmNlIHdlIHdv
bid0IGJlIGFibGUgdG8gcmVjb25zdHJ1Y3QgaXQgbGF0ZXIuCkBAIC0xMzEsNyArMTUxLDExIEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lNZXRhZGF0YUFuZE5vdGlmeSh1bnNpZ25lZCBmcmFt
ZUJ5dGVzQ2xlYXJlZCkKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kZWNvZGVkU2l6ZUNoYW5n
ZWQodGhpcywgLXNhZmVDYXN0PGludD4oZnJhbWVCeXRlc0NsZWFyZWQpKTsKIH0KIAorI2lmIFBM
QVRGT1JNKElPUykKK3ZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBm
bG9hdCBzY2FsZUhpbnQpCisjZWxzZQogdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXpl
X3QgaW5kZXgpCisjZW5kaWYKIHsKICAgICBzaXplX3QgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgp
OwogICAgIEFTU0VSVChtX2RlY29kZWRTaXplID09IDAgfHwgbnVtRnJhbWVzID4gMSk7CkBAIC0x
MzksNyArMTYzLDEyIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4
KQogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkgPCBudW1GcmFtZXMpCiAgICAgICAgIG1fZnJhbWVz
Lmdyb3cobnVtRnJhbWVzKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2ZyYW1lc1tpbmRl
eF0ubV9mcmFtZSA9IG1fc291cmNlLmNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCwgJnNjYWxlSGlu
dCk7CisgICAgbV9mcmFtZXNbaW5kZXhdLm1fc2NhbGUgPSBzY2FsZUhpbnQ7CisjZWxzZQogICAg
IG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVBdEluZGV4KGlu
ZGV4KTsKKyNlbmRpZgogICAgIGlmIChudW1GcmFtZXMgPT0gMSAmJiBtX2ZyYW1lc1tpbmRleF0u
bV9mcmFtZSkKICAgICAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CiAKQEAgLTE2Niw2ICsxOTUs
MjMgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgpCiAgICAgfQog
fQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZUluZm8o
c2l6ZV90IGluZGV4KQoreworICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CisK
KyAgICBpZiAobV9mcmFtZXMuc2l6ZSgpIDwgbnVtRnJhbWVzKQorICAgICAgICBtX2ZyYW1lcy5y
ZXNpemUobnVtRnJhbWVzKTsKKworICAgIEFTU0VSVCghbV9mcmFtZXNbaW5kZXhdLm1faGF2ZUlu
Zm8pOworCisgICAgaWYgKHNob3VsZEFuaW1hdGUoKSkKKyAgICAgICAgbV9mcmFtZXNbaW5kZXhd
Lm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CisgICAg
bV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRl
eChpbmRleCk7CisgICAgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZUluZm8gPSB0cnVlOworfQorI2Vu
ZGlmCisKIHZvaWQgQml0bWFwSW1hZ2U6OmRpZERlY29kZVByb3BlcnRpZXMoKSBjb25zdAogewog
ICAgIGlmIChtX2RlY29kZWRTaXplKQpAQCAtMTkzLDYgKzIzOSwxMCBAQCB2b2lkIEJpdG1hcElt
YWdlOjp1cGRhdGVTaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikg
Y29uc3QKICAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NvdXJjZS5zaXplKElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbihSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZGVzY3Jp
cHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKSk7CiAgICAgbV9pbWFnZU9yaWVudGF0aW9uID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CiAgICAg
bV9zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihk
ZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpKTsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgbV9vcmlnaW5hbFNpemUgPSBtX3NvdXJjZS5vcmlnaW5hbFNpemUoKTsKKyAgICBtX29y
aWdpbmFsU2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc291cmNlLm9yaWdpbmFsU2l6ZShS
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7CisjZW5kaWYKICAgICBtX2hhdmVTaXplID0gdHJ1ZTsK
ICAgICBkaWREZWNvZGVQcm9wZXJ0aWVzKCk7CiB9CkBAIC0yMDksNiArMjU5LDIwIEBAIEludFNp
emUgQml0bWFwSW1hZ2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uIGRlc2NyCiAgICAgcmV0dXJuIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlv
bjsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK0ludFNpemUgQml0bWFwSW1hZ2U6Om9yaWdpbmFs
U2l6ZSgpIGNvbnN0Cit7CisgICAgdXBkYXRlU2l6ZSgpOworICAgIHJldHVybiBtX29yaWdpbmFs
U2l6ZTsKK30KKworSW50U2l6ZSBCaXRtYXBJbWFnZTo6b3JpZ2luYWxTaXplUmVzcGVjdGluZ09y
aWVudGF0aW9uKCkgY29uc3QKK3sKKyAgICB1cGRhdGVTaXplKCk7CisgICAgcmV0dXJuIG1fb3Jp
Z2luYWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9uOworfQorI2VuZGlmCisKIEludFNpemUgQml0
bWFwSW1hZ2U6OmN1cnJlbnRGcmFtZVNpemUoKSBjb25zdAogewogICAgIGlmICghbV9jdXJyZW50
RnJhbWUgfHwgbV9oYXNVbmlmb3JtRnJhbWVTaXplKQpAQCAtMjI3LDYgKzI5MSw5IEBAIGJvb2wg
Qml0bWFwSW1hZ2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0CiAKIGJvb2wg
Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogeworICAgIC8v
IEJlY2F1c2Ugd2UncmUgbW9kaWZ5aW5nIHRoZSBjdXJyZW50IGZyYW1lLCBjbGVhciBpdHMgKG5v
dyBwb3NzaWJseQorICAgIC8vIGluYWNjdXJhdGUpIG1ldGFkYXRhIGFzIHdlbGwuCisjaWYgIVBM
QVRGT1JNKElPUykKICAgICAvLyBDbGVhciBhbGwgcGFydGlhbGx5LWRlY29kZWQgZnJhbWVzLiBG
b3IgbW9zdCBpbWFnZSBmb3JtYXRzLCB0aGVyZSBpcyBvbmx5CiAgICAgLy8gb25lIGZyYW1lLCBi
dXQgYXQgbGVhc3QgR0lGIGFuZCBJQ08gY2FuIGhhdmUgbW9yZS4gV2l0aCBHSUZzLCB0aGUgZnJh
bWVzCiAgICAgLy8gY29tZSBpbiBvcmRlciBhbmQgd2UgYXNrIHRvIGRlY29kZSB0aGVtIGluIG9y
ZGVyLCB3YWl0aW5nIHRvIHJlcXVlc3QgYQpAQCAtMjU0LDExICszMjEsNDAgQEAgYm9vbCBCaXRt
YXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgICAgICAgICBm
cmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1ZSkgPyBmcmFtZUJ5dGVz
IDogMCk7CiAgICAgfQogICAgIGRlc3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xl
YXJlZCk7CisjZWxzZQorICAgIGludCBkZWx0YUJ5dGVzID0gMDsKKyAgICBpZiAoIW1fZnJhbWVz
LmlzRW1wdHkoKSkgeworICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXpl
KCkgLSAxXS5tX2ZyYW1lQnl0ZXM7CisgICAgICAgIGlmIChtX2ZyYW1lc1ttX2ZyYW1lcy5zaXpl
KCkgLSAxXS5jbGVhcih0cnVlKSkgeworICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsK
KyAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gbV9kZWNvZGVkUHJvcGVydGllc1NpemU7CisgICAg
ICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSA9IDA7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KGRlbHRhQnl0ZXMpOworI2VuZGlmCiAgICAgCiAg
ICAgLy8gRmVlZCBhbGwgdGhlIGRhdGEgd2UndmUgc2VlbiBzbyBmYXIgdG8gdGhlIGltYWdlIGRl
Y29kZXIuCiAgICAgbV9hbGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXhwb3NlIGEgc2V0dGluZyB0byBl
bmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIGFuZCBtYWtlIHRoaXMKKyAgICAvLyBj
b2RlIGNvbmRpdGlvbmFsIG9uIGl0LiBUaGVuIHdlIGNhbiByZW1vdmUgdGhlIFBMQVRGT1JNKElP
UyktZ3VhcmQuCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBjaHVua0xvYWRJbnRlcnZhbHNbXSA9
IHswLCAxLCAzLCA2LCAxNX07CisgICAgZG91YmxlIGludGVydmFsID0gY2h1bmtMb2FkSW50ZXJ2
YWxzW3N0ZDo6bWluKG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCwgc3RhdGljX2Nhc3Q8dWlu
dDE2X3Q+KDQpKV07CisKKyAgICBib29sIG5lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgaWYgKGN1
cnJlbnRUaW1lKCkgLSBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSA+IGludGVydmFsKSB7IC8v
IFRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIHRoZSBjaHVuayB0aW1lIHdpbGwgYmUgMCBhbmQgdGhl
IGltYWdlIHdpbGwgZ2V0IGFuIHVwZGF0ZS4KKyAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlOwor
ICAgICAgICBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAg
ICAgIEFTU0VSVChtX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQgPD0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MTZfdD46Om1heCgpKTsKKyAgICAgICAgKyttX3Byb2dyZXNzaXZlTG9hZENodW5r
Q291bnQ7CisgICAgfQorICAgIGlmIChuZWVkc1VwZGF0ZSB8fCBhbGxEYXRhUmVjZWl2ZWQpCisg
ICAgICAgIG1fc291cmNlLnNldERhdGEoZGF0YSgpLCBhbGxEYXRhUmVjZWl2ZWQpOworI2Vsc2UK
ICAgICBtX3NvdXJjZS5zZXREYXRhKGRhdGEoKSwgYWxsRGF0YVJlY2VpdmVkKTsKLSAgICAKKyNl
bmRpZgorCiAgICAgbV9oYXZlRnJhbWVDb3VudCA9IGZhbHNlOwogICAgIG1faGFzVW5pZm9ybUZy
YW1lU2l6ZSA9IHRydWU7CiAgICAgcmV0dXJuIGlzU2l6ZUF2YWlsYWJsZSgpOwpAQCAtMjkzLDYg
KzM4OSw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJu
IG1fc2l6ZUF2YWlsYWJsZTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiBib29sIEJpdG1hcElt
YWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXgg
Pj0gZnJhbWVDb3VudCgpKQpAQCAtMzAyLDI1ICszOTksNzUgQEAgYm9vbCBCaXRtYXBJbWFnZTo6
ZW5zdXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgpCiAgICAgICAgIGNhY2hlRnJhbWUoaW5k
ZXgpOwogICAgIHJldHVybiB0cnVlOwogfQorI2Vsc2UKK2Jvb2wgQml0bWFwSW1hZ2U6OmVuc3Vy
ZUZyYW1lSW5mb0lzQ2FjaGVkKHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXggPj0gZnJh
bWVDb3VudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaW5kZXggPj0gbV9m
cmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9oYXZlSW5mbykKKyAgICAgICAgY2Fj
aGVGcmFtZUluZm8oaW5kZXgpOworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCiAKIFBhc3NO
YXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIGZyYW1lQXRJbmRleChpbmRleCwgMS4wZik7
CisjZWxzZQogICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gbV9mcmFtZXNbaW5k
ZXhdLm1fZnJhbWU7CisjZW5kaWYKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK1Bhc3NOYXRpdmVJ
bWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgc2Nh
bGVIaW50KQoreworICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFt
ZXNbaW5kZXhdLm1fZnJhbWUpCisgICAgICAgIGNhY2hlRnJhbWUoaW5kZXgsIHNjYWxlSGludCk7
CisgICAgZWxzZSBpZiAoc3RkOjptaW4oMS4wZiwgc2NhbGVIaW50KSA+IG1fZnJhbWVzW2luZGV4
XS5tX3NjYWxlKSB7CisgICAgICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwg
YnV0IGF0IHRvbyBzbWFsbCBhIHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgorICAg
ICAgICBpbnQgc2l6ZUNoYW5nZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOworICAg
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihtX2RlY29kZWRTaXplKSArIHNpemVDaGFuZ2Ug
Pj0gMCk7CisgICAgICAgIG1fZnJhbWVzW2luZGV4XS5jbGVhcih0cnVlKTsKKyAgICAgICAgaW52
YWxpZGF0ZVBsYXRmb3JtRGF0YSgpOworICAgICAgICBtX2RlY29kZWRTaXplICs9IHNpemVDaGFu
Z2U7CisgICAgICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgICAgICBpbWFnZU9ic2Vy
dmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCBzaXplQ2hhbmdlKTsKKworICAgICAgICBj
YWNoZUZyYW1lKGluZGV4LCBzY2FsZUhpbnQpOworICAgIH0KKyAgICByZXR1cm4gbV9mcmFtZXNb
aW5kZXhdLm1fZnJhbWU7Cit9CisjZW5kaWYKKwogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IEZJWE1FOiBjYWNoZUZyYW1lSW5mbyBkb2VzIG5vdCBzZXQgbV9pc0NvbXBsZXRlLiBTaG91bGQg
aXQ/CisgICAgaWYgKCFlbnN1cmVGcmFtZUluZm9Jc0NhY2hlZChpbmRleCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyNlbHNlCiAgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4
XS5tX2lzQ29tcGxldGU7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJ
bmRleChzaXplX3QgaW5kZXgpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmICghZW5zdXJl
RnJhbWVJbmZvSXNDYWNoZWQoaW5kZXgpKQorICAgICAgICByZXR1cm4gMDsKKyNlbHNlCiAgICAg
aWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKICAgICAgICAgcmV0dXJuIDA7CisjZW5k
aWYKICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fZHVyYXRpb247CiB9CiAKQEAgLTMzMSw5
ICs0NzgsMTMgQEAgUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpCiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4
KHNpemVfdCBpbmRleCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKCFlbnN1cmVGcmFt
ZUluZm9Jc0NhY2hlZChpbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBGSVhNRTogV2h5
IHdvdWxkIGFuIGludmFsaWQgaW5kZXggcmV0dXJuIHRydWUgaGVyZT8KKyNlbHNlCiAgICAgaWYg
KG1fZnJhbWVzLnNpemUoKSA8PSBpbmRleCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0KKyNlbmRp
ZgogICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCiAgICAgICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKIApAQCAtMzQ3LDggKzQ5OCwxNCBAQCBib29s
IEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKQogCiBJbWFnZU9yaWVu
dGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgp
CiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBjYWNoZUZyYW1lSW5mbyBkb2Vz
IG5vdCBzZXQgbV9vcmllbnRhdGlvbi4gU2hvdWxkIGl0PworICAgIGlmICghZW5zdXJlRnJhbWVJ
bmZvSXNDYWNoZWQoaW5kZXgpKQorICAgICAgICByZXR1cm4gRGVmYXVsdEltYWdlT3JpZW50YXRp
b247CisjZWxzZQogICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCiAgICAgICAg
IHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKKyNlbmRpZgogCiAgICAgaWYgKG1fZnJh
bWVzW2luZGV4XS5tX2hhdmVNZXRhZGF0YSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4
XS5tX29yaWVudGF0aW9uOwpAQCAtMzYzLDggKzUyMCw2IEBAIGJvb2wgQml0bWFwSW1hZ2U6Om5v
dFNvbGlkQ29sb3IoKQogfQogI2VuZGlmCiAKLQotCiBpbnQgQml0bWFwSW1hZ2U6OnJlcGV0aXRp
b25Db3VudChib29sIGltYWdlS25vd25Ub0JlQ29tcGxldGUpCiB7CiAgICAgaWYgKChtX3JlcGV0
aXRpb25Db3VudFN0YXR1cyA9PSBVbmtub3duKSB8fCAoKG1fcmVwZXRpdGlvbkNvdW50U3RhdHVz
ID09IFVuY2VydGFpbikgJiYgaW1hZ2VLbm93blRvQmVDb21wbGV0ZSkpIHsKQEAgLTQxMiwxMiAr
NTY3LDE4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKGJvb2wgY2F0Y2hVcElm
TmVjZXNzYXJ5KQogICAgIGNvbnN0IGRvdWJsZSBjdXJyZW50RHVyYXRpb24gPSBmcmFtZUR1cmF0
aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CiAgICAgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUg
Kz0gY3VycmVudER1cmF0aW9uOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBXaGVuIGFu
IGFuaW1hdGVkIGltYWdlIGlzIG1vcmUgdGhhbiBmaXZlIG1pbnV0ZXMgb3V0IG9mIGRhdGUsIHRo
ZQogICAgIC8vIHVzZXIgcHJvYmFibHkgZG9lc24ndCBjYXJlIGFib3V0IHJlc3luY2luZyBhbmQg
d2UgY291bGQgYnVybiBhIGxvdCBvZgogICAgIC8vIHRpbWUgbG9vcGluZyB0aHJvdWdoIGZyYW1l
cyBiZWxvdy4gIEp1c3QgcmVzZXQgdGhlIHRpbWluZ3MuCiAgICAgY29uc3QgZG91YmxlIGNBbmlt
YXRpb25SZXN5bmNDdXRvZmYgPSA1ICogNjA7CiAgICAgaWYgKCh0aW1lIC0gbV9kZXNpcmVkRnJh
bWVTdGFydFRpbWUpID4gY0FuaW1hdGlvblJlc3luY0N1dG9mZikKICAgICAgICAgbV9kZXNpcmVk
RnJhbWVTdGFydFRpbWUgPSB0aW1lICsgY3VycmVudER1cmF0aW9uOworI2Vsc2UKKyAgICAvLyBN
YWludGFpbmluZyBmcmFtZS10by1mcmFtZSBkZWxheXMgaXMgbW9yZSBpbXBvcnRhbnQgdGhhbgor
ICAgIC8vIG1haW50YWluaW5nIGFic29sdXRlIGFuaW1hdGlvbiB0aW1pbmcsIHNvIHJlc2V0IHRo
ZSB0aW1pbmdzIGVhY2ggZnJhbWUuCisgICAgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUgPSB0aW1l
ICsgY3VycmVudER1cmF0aW9uOworI2VuZGlmCiAKICAgICAvLyBUaGUgaW1hZ2UgbWF5IGxvYWQg
bW9yZSBzbG93bHkgdGhhbiBpdCdzIHN1cHBvc2VkIHRvIGFuaW1hdGUsIHNvIHRoYXQgYnkKICAg
ICAvLyB0aGUgdGltZSB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBmaXJzdCByZXBldGl0aW9uLCB3
ZSdyZSB3ZWxsIGJlaGluZC4KQEAgLTU0OCwxMCArNzA5LDEyIEBAIGJvb2wgQml0bWFwSW1hZ2U6
OmludGVybmFsQWR2YW5jZUFuaW1hdGlvbihib29sIHNraXBwaW5nRnJhbWVzKQogICAgIC8vIFN0
b3AgdGhlIGFuaW1hdGlvbi4KICAgICBzdG9wQW5pbWF0aW9uKCk7CiAgICAgCisjaWYgIVBMQVRG
T1JNKElPUykKICAgICAvLyBTZWUgaWYgYW55b25lIGlzIHN0aWxsIHBheWluZyBhdHRlbnRpb24g
dG8gdGhpcyBhbmltYXRpb24uICBJZiBub3QsIHdlIGRvbid0CiAgICAgLy8gYWR2YW5jZSBhbmQg
d2lsbCByZW1haW4gc3VzcGVuZGVkIGF0IHRoZSBjdXJyZW50IGZyYW1lIHVudGlsIHRoZSBhbmlt
YXRpb24gaXMgcmVzdW1lZC4KICAgICBpZiAoIXNraXBwaW5nRnJhbWVzICYmIGltYWdlT2JzZXJ2
ZXIoKS0+c2hvdWxkUGF1c2VBbmltYXRpb24odGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgogCiAgICAgKyttX2N1cnJlbnRGcmFtZTsKICAgICBib29sIGFkdmFuY2VkQW5pbWF0
aW9uID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5oCmluZGV4IGI5ZGQ3YjNhNTIxNzg3NmMxM2M0MGM4OGJmN2M2Y2JmZTRhNzllNGYuLjg3
ZDhiOGM2NjIyZmI5ZmMzYzJiZjAwNDY1N2M3MDUzYmU0ZTlmM2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtMzYsNyArMzYsOSBAQAog
CiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpZiAhUExB
VEZPUk0oSU9TKQogT0JKQ19DTEFTUyBOU0ltYWdlOworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtNjcsNiArNjksMTAgQEAgcHVibGljOgog
ICAgIEZyYW1lRGF0YSgpCiAgICAgICAgIDogbV9mcmFtZSgwKQogICAgICAgICAsIG1fb3JpZW50
YXRpb24oRGVmYXVsdEltYWdlT3JpZW50YXRpb24pCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAg
ICAsIG1fc2NhbGUoMCkKKyAgICAgICAgLCBtX2hhdmVJbmZvKGZhbHNlKQorI2VuZGlmCiAgICAg
ICAgICwgbV9kdXJhdGlvbigwKQogICAgICAgICAsIG1faGF2ZU1ldGFkYXRhKGZhbHNlKQogICAg
ICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKQEAgLTg2LDYgKzkyLDEwIEBAIHB1YmxpYzoKIAog
ICAgIE5hdGl2ZUltYWdlUHRyIG1fZnJhbWU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVu
dGF0aW9uOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBmbG9hdCBtX3NjYWxlOworICAgIGJvb2wg
bV9oYXZlSW5mbzsKKyNlbmRpZgogICAgIGZsb2F0IG1fZHVyYXRpb247CiAgICAgYm9vbCBtX2hh
dmVNZXRhZGF0YSA6IDE7CiAgICAgYm9vbCBtX2lzQ29tcGxldGUgOiAxOwpAQCAtOTcsNiArMTA3
LDkgQEAgcHVibGljOgogLy8gQml0bWFwSW1hZ2UgQ2xhc3MKIC8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorLy8gRklYTUU6IFdlIHNob3VsZCBi
ZXR0ZXIgaW50ZWdyYXRlIHRoZSBpT1MgYW5kIG5vbi1pT1MgY29kZSBpbiB0aGlzIGNsYXNzLiBV
bmxpa2Ugb3RoZXIgcG9ydHMsIHRoZQorLy8gaU9TIHBvcnQgY2FjaGVzIHRoZSBtZXRhZGF0YSBm
b3IgYSBmcmFtZSB3aXRob3V0IGRlY29kaW5nIHRoZSBpbWFnZS4KKwogY2xhc3MgQml0bWFwSW1h
Z2UgRklOQUwgOiBwdWJsaWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFn
ZTsKICAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CkBAIC0xMjIsNiAr
MTM1LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgT1ZF
UlJJREU7CiAgICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKEltYWdlT3JpZW50
YXRpb25EZXNjcmlwdGlvbiA9IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCBJbnRTaXplIG9yaWdpbmFsU2l6ZSgpIGNv
bnN0OworICAgIEludFNpemUgb3JpZ2luYWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29u
c3Q7CisjZW5kaWYKICAgICBJbnRTaXplIGN1cnJlbnRGcmFtZVNpemUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgZ2V0SG90U3BvdChJbnRQb2ludCYpIGNvbnN0IE9WRVJSSURFOwogCkBAIC0x
NDEsNyArMTU4LDkgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIEFjY2Vz
c29ycyBmb3IgbmF0aXZlIGltYWdlIGZvcm1hdHMuCisjaWYgIVBMQVRGT1JNKElPUykKICAgICB2
aXJ0dWFsIE5TSW1hZ2UqIGdldE5TSW1hZ2UoKSBPVkVSUklERTsKKyNlbmRpZgogICAgIHZpcnR1
YWwgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIE9WRVJSSURFOwogI2VuZGlmCiAK
QEAgLTE5NSw2ICsyMTQsMTAgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKICAgICBzaXplX3QgY3Vy
cmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50RnJhbWU7IH0KKyNpZiBQTEFURk9S
TShJT1MpCisgICAgUGFzc05hdGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRleChzaXplX3QsIGZsb2F0
IHNjYWxlSGludCk7CisgICAgUGFzc05hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lQXRJ
bmRleChzaXplX3QpOworI2VuZGlmCiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKICAgICBQYXNz
TmF0aXZlSW1hZ2VQdHIgZnJhbWVBdEluZGV4KHNpemVfdCk7CiAgICAgYm9vbCBmcmFtZUlzQ29t
cGxldGVBdEluZGV4KHNpemVfdCk7CkBAIC0yMDMsOSArMjI2LDE4IEBAIHByb3RlY3RlZDoKICAg
ICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4KHNpemVfdCk7CiAKICAg
ICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMgYSBmcmFtZS4gTmV2ZXIgYWNjZXNzZWQgZXhjZXB0IGlu
dGVybmFsbHkuCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgY2FjaGVGcmFtZShzaXplX3Qg
aW5kZXgsIGZsb2F0IHNjYWxlSGludCk7CisKKyAgICAvLyBDYWNoZSBmcmFtZSBtZXRhZGF0YSB3
aXRob3V0IGRlY29kaW5nIGltYWdlLgorICAgIHZvaWQgY2FjaGVGcmFtZUluZm8oc2l6ZV90IGlu
ZGV4KTsKKyAgICAvLyBDYWxsZWQgYmVmb3JlIGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0gZm9y
IGluZm8gd2l0aG91dCBkZWNvZGluZy4gUmV0dXJucyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91
bmRzLgorICAgIGJvb2wgZW5zdXJlRnJhbWVJbmZvSXNDYWNoZWQoc2l6ZV90IGluZGV4KTsKKyNl
bHNlCiAgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRleCk7CiAgICAgLy8gQ2FsbGVkIGJl
Zm9yZSBhY2Nlc3NpbmcgbV9mcmFtZXNbaW5kZXhdLiBSZXR1cm5zIGZhbHNlIG9uIGluZGV4IG91
dCBvZiBib3VuZHMuCiAgICAgYm9vbCBlbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCk7
CisjZW5kaWYKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhLiAgV2hl
biB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50aXJlIGZy
YW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ryb3kKQEAg
LTI2OCw2ICszMDAsMTAgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1faW1hZ2VP
cmllbnRhdGlvbiA6IDQ7IC8vIEltYWdlT3JpZW50YXRpb25FbnVtCiAgICAgbXV0YWJsZSB1bnNp
Z25lZCBtX3Nob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uIDogMTsgLy8gUmVzcGVjdEltYWdl
T3JpZW50YXRpb25FbnVtCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgbXV0YWJsZSBJbnRTaXpl
IG1fb3JpZ2luYWxTaXplOyAvLyBUaGUgc2l6ZSBvZiB0aGUgdW5zdWJzYW1wbGVkIGltYWdlLgor
ICAgIG11dGFibGUgSW50U2l6ZSBtX29yaWdpbmFsU2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsK
KyNlbmRpZgogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZTsgLy8gVGhlIGluZGV4IG9mIHRoZSBj
dXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KICAgICBWZWN0b3I8RnJhbWVEYXRhLCAxPiBtX2Zy
YW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4g
V2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIApAQCAtMjc4
LDcgKzMxNCw5IEBAIHByaXZhdGU6CiAgICAgZG91YmxlIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1l
OyAgLy8gVGhlIHN5c3RlbSB0aW1lIGF0IHdoaWNoIHdlIGhvcGUgdG8gc2VlIHRoZSBuZXh0IGNh
bGwgdG8gc3RhcnRBbmltYXRpb24oKS4KIAogI2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIG11dGFibGUgUmV0YWluUHRyPE5TSW1hZ2U+IG1fbnNJbWFnZTsgLy8gQSBj
YWNoZWQgTlNJbWFnZSBvZiBmcmFtZSAwLiBPbmx5IGJ1aWx0IGxhemlseSBpZiBzb21lb25lIGFj
dHVhbGx5IHF1ZXJpZXMgZm9yIG9uZS4KKyNlbmRpZgogICAgIG11dGFibGUgUmV0YWluUHRyPENG
RGF0YVJlZj4gbV90aWZmUmVwOyAvLyBDYWNoZWQgVElGRiByZXAgZm9yIGZyYW1lIDAuICBPbmx5
IGJ1aWx0IGxhemlseSBpZiBzb21lb25lIHF1ZXJpZXMgZm9yIG9uZS4KICNlbmRpZgogCkBAIC0y
ODgsNiArMzI2LDEyIEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2RlY29kZWRQ
cm9wZXJ0aWVzU2l6ZTsgLy8gVGhlIHNpemUgb2YgZGF0YSBkZWNvZGVkIGJ5IHRoZSBzb3VyY2Ug
dG8gZGV0ZXJtaW5lIGltYWdlIHByb3BlcnRpZXMgKGUuZy4gc2l6ZSwgZnJhbWUgY291bnQsIGV0
YykuCiAgICAgc2l6ZV90IG1fZnJhbWVDb3VudDsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGV4cG9zZSBhIHNldHRpbmcgdG8gZW5hYmxlL2Rpc2FibGUgcHJv
Z3Jlc3NpdmUgbG9hZGluZyByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCisgICAgZG91
YmxlIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtUaW1lOworICAgIHVpbnQxNl90IG1fcHJvZ3Jlc3Np
dmVMb2FkQ2h1bmtDb3VudDsKKyNlbmRpZgorCiAgICAgYm9vbCBtX2lzU29saWRDb2xvciA6IDE7
IC8vIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBhIDF4MSBzb2xpZCBpbWFnZS4KICAgICBib29sIG1f
Y2hlY2tlZEZvclNvbGlkQ29sb3IgOiAxOyAvLyBXaGV0aGVyIHdlJ3ZlIGNoZWNrZWQgdGhlIGZy
YW1lIGZvciBzb2xpZCBjb2xvci4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuY3BwCmluZGV4IDIyYzhkYzFjMzMyZmNkNDliYmNiOTk3YzU2ZTEwMzlhNjYxNWY5MjUu
LjU5ZDM3NTk1ZGIzZGY2MjdhNjZlMDkyYWExMDg1MDBiYTk4M2Q4MzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTMxMCw2ICszMTAsMTcgQEAgQ29s
b3IgQ29sb3I6OmRhcmsoKSBjb25zdAogICAgICAgICAgICAgICAgICBhbHBoYSgpKTsKIH0KIAor
Ym9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKK3sKKyAgICBmbG9hdCByZWQ7CisgICAgZmxvYXQg
Z3JlZW47CisgICAgZmxvYXQgYmx1ZTsKKyAgICBmbG9hdCBhbHBoYTsKKyAgICBnZXRSR0JBKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICBmbG9hdCBsYXJnZXN0Tm9uQWxwaGFDaGFubmVs
ID0gc3RkOjptYXgocmVkLCBzdGQ6Om1heChncmVlbiwgYmx1ZSkpOworICAgIHJldHVybiBhbHBo
YSA+IDAuNSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41OworfQorCiBzdGF0aWMgaW50
IGJsZW5kQ29tcG9uZW50KGludCBjLCBpbnQgYSkKIHsKICAgICAvLyBXZSB1c2Ugd2hpdGUuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAppbmRleCA4ZTQwYzI0NGIyYWU3
NjA1ZTE3NjE3MzJkNjhlYzQ0YzllZDA3OTJjLi4yMDQ3YWQyNGMzN2E4MGIxMTc1OGY0NGQyZjhj
MGJlYzEyODU4MDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgK
QEAgLTM0LDYgKzM0LDkgQEAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgog
dHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvciogQ0dDb2xvclJlZjsKKyNpZiBQTEFURk9STShJT1MpCit0
eXBlZGVmIHN0cnVjdCBDR0NvbG9yU3BhY2UqIENHQ29sb3JTcGFjZVJlZjsKKyNlbmRpZiAvLyBQ
TEFURk9STShJT1MpCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTExOCw2ICsxMjEs
OCBAQCBwdWJsaWM6CiAgICAgQ29sb3IgbGlnaHQoKSBjb25zdDsKICAgICBDb2xvciBkYXJrKCkg
Y29uc3Q7CiAKKyAgICBib29sIGlzRGFyaygpIGNvbnN0OworCiAgICAgLy8gVGhpcyBpcyBhbiBp
bXBsZW1lbnRhdGlvbiBvZiBQb3J0ZXItRHVmZidzICJzb3VyY2Utb3ZlciIgZXF1YXRpb24KICAg
ICBDb2xvciBibGVuZChjb25zdCBDb2xvciYpIGNvbnN0OwogICAgIENvbG9yIGJsZW5kV2l0aFdo
aXRlKCkgY29uc3Q7CkBAIC0xNDUsNiArMTUwLDE1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3QgUkdCQTMyIGdyYXkgPSAweEZGQTBBMEEwOwogICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgbGln
aHRHcmF5ID0gMHhGRkMwQzBDMDsKICAgICBzdGF0aWMgY29uc3QgUkdCQTMyIHRyYW5zcGFyZW50
ID0gMHgwMDAwMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGN5YW4gPSAweEZGMDBGRkZG
OworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgdGFwID0gMHg0
RDFBMUExQTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGNvbG9yIHNob3VsZG4ndCBiZSBpT1Mtc3Bl
Y2lmaWMuIE9uY2Ugd2UgZml4IHVwIGl0cyB1c2FnZSBpbiBJbmxpbmVUZXh0Qm94OjpwYWludENv
bXBvc2l0aW9uQmFja2dyb3VuZCgpCisgICAgLy8gd2Ugc2hvdWxkIG1vdmUgaXQgb3V0c2lkZSB0
aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI2Mjk2Pi4KKyAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGNvbXBvc2l0aW9u
RmlsbCA9IDB4M0NBRkMwRTM7CisjZW5kaWYKIAogcHJpdmF0ZToKICAgICBSR0JBMzIgbV9jb2xv
cjsKQEAgLTIwMCw2ICsyMTQsOSBAQCBpbmxpbmUgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVp
bnQxNl90IHZhbHVlKQogCiAjaWYgVVNFKENHKQogQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKGNv
bnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CisjaWYgUExBVEZPUk0oSU9TKQorQ0dDb2xvclJlZiBj
cmVhdGVDR0NvbG9yV2l0aERldmljZVdoaXRlKENHRmxvYXQgd2hpdGUsIENHRmxvYXQgYWxwaGEp
OworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5
UmVmcmVzaE1vbml0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3Bs
YXlSZWZyZXNoTW9uaXRvci5oCmluZGV4IDhlMDU4MzEwOWE4ZjIwMTczMTAyODAwNjA5MTI4MDY4
MzRkMGI0ZTEuLmY4OTI5ZDY5ZmQ2NjMxZWQ2ZjhkY2JkMDkxYTUzMTJjMjVhNzFlMmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9u
aXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZy
ZXNoTW9uaXRvci5oCkBAIC0xMzEsMTIgKzEzMSwxOSBAQCBwcml2YXRlOgogICAgIHZvaWQgc3Rv
cEFuaW1hdGlvbkNsaWVudCgpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExB
VEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogcHVibGljOgogICAgIHZvaWQgZGlzcGxheUxp
bmtGaXJlZChkb3VibGUgbm93U2Vjb25kcywgZG91YmxlIG91dHB1dFRpbWVTZWNvbmRzKTsKIHBy
aXZhdGU6CiAgICAgQ1ZEaXNwbGF5TGlua1JlZiBtX2Rpc3BsYXlMaW5rOwogI2VuZGlmCisKKyNp
ZiBQTEFURk9STShJT1MpCitwdWJsaWM6CisgICAgdm9pZCBkaXNwbGF5TGlua0ZpcmVkKGRvdWJs
ZSBub3dTZWNvbmRzKTsKK3ByaXZhdGU6CisgICAgdm9pZCogbV9kaXNwbGF5TGluazsKKyNlbmRp
ZgogfTsKIAogLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9p
bnQuaAppbmRleCA5MjE2MTcxODU1YTY5MTk1OWYzNjEyNTdkMTQ3OTEyZTJhNDBlOWQ0Li4xNjBk
MDhmMjFkZmVkMTNjM2FjZDgwZDkzZDM3OGFiOWEyMmUzMjMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCkBAIC00MywxMyArNDMsMTMgQEAgY2xh
c3MgRmxvYXRQb2ludDsKIHR5cGVkZWYgc3RydWN0IENHUG9pbnQgQ0dQb2ludDsKICNlbmRpZgog
Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykK
ICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogdHlwZWRl
ZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50OwogI2Vsc2UKIHR5cGVkZWYgc3RydWN0IF9OU1BvaW50
IE5TUG9pbnQ7CiAjZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgIVBM
QVRGT1JNKElPUykKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMzksMTAgKzEzOSwxMiBA
QCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dQb2ludCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9U
WVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpCiAgICAgRmxvYXRQb2ludChjb25zdCBOU1Bv
aW50Jik7CiAgICAgb3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0OwogI2VuZGlmCisjZW5kaWYgLy8g
IVBMQVRGT1JNKElPUykKIAogI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgRmxvYXRQb2lu
dChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRQb2ludCYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAppbmRleCAxY2UyMzllNWZmN2IzZGFi
MGJjYzljYzNjNmYyZjdlODJlYzQzNDM0Li5jYzlhMDNiZWY4MDIzNTFhY2M2MGRhZWQ0YWZjZmJi
NWFiNDIzNTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaApAQCAtMzAsMTcgKzMwLDIxIEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDb3JlR3Jh
cGhpY3MvQ0dHZW9tZXRyeS5oPgorI2VuZGlmCisKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVj
dCBDR1JlY3QgQ0dSZWN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9B
U19DR0dFT01FVFJZX1RZUEVTCiB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0OwogI2Vsc2UK
IHR5cGVkZWYgc3RydWN0IF9OU1JlY3QgTlNSZWN0OwogI2VuZGlmCi0jZW5kaWYKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAKICNpZiBQTEFURk9STShCTEFDS0JF
UlJZKQogbmFtZXNwYWNlIEJsYWNrQmVycnkgewpAQCAtMTgxLDEwICsxODUsMTIgQEAgcHVibGlj
OgogICAgIG9wZXJhdG9yIENHUmVjdCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0o
SU9TKQogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1F
X0FTX0NHR0VPTUVUUllfVFlQRVMpCiAgICAgRmxvYXRSZWN0KGNvbnN0IE5TUmVjdCYpOwogICAg
IG9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0OwogI2VuZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKIAogI2lmIFVTRShDQUlSTykKICAgICBGbG9hdFJlY3QoY29uc3QgY2Fpcm9fcmVjdGFuZ2xl
X3QmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
U2l6ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKaW5k
ZXggMGZhOGNjMWQ3NmIwYTEzYzkzNmVkNjFlZjA1OTRkMzkyNThjYjVjYy4uOTUyYTI5MDQ0YWRj
OTlhZWUxNzJjNmJkYjRkZjg1N2E0MTI4YmY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKQEAgLTM5LDE3ICszOSwyMSBAQCBjbGFzcyBGbG9hdFNp
emU7CiB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKKwogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0
IENHU2l6ZSBDR1NpemU7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9S
TShNQUMpICYmICFQTEFURk9STShJT1MpCiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FT
X0NHR0VPTUVUUllfVFlQRVMKIHR5cGVkZWYgc3RydWN0IENHU2l6ZSBOU1NpemU7CiAjZWxzZQog
dHlwZWRlZiBzdHJ1Y3QgX05TU2l6ZSBOU1NpemU7CiAjZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0xMjIsMTAgKzEyNiwxMiBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dTaXplKCkgY29u
c3Q7CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiAjaWYgKFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKQogICAg
IGV4cGxpY2l0IEZsb2F0U2l6ZShjb25zdCBOU1NpemUgJik7IC8vIGRvbid0IGRvIHRoaXMgaW1w
bGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgb3BlcmF0b3IgTlNTaXplKCkgY29uc3Q7CiAj
ZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
Y3BwCmluZGV4IGEyYjgwYTBlMTc5MmVkYWQ2YjU4NWNhZmNhZjZhMWIyNTkxYTZjMzQuLmYzYmJk
NzIxZDZiNWM2Yjc3OTQwOWE2OTJjZTA1ZDM0MzljOTRhOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC01MCw2ICs1MCw4IEBAIHRlbXBsYXRlIDw+IHZv
aWQgZGVsZXRlT3duZWRQdHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91
dCogcHRyKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBQYXNzUmVmPEZvbnRHbHlw
aHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisKIGNvbnN0IHVpbnQ4X3QgRm9udDo6c19yb3Vu
ZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdID0gewogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDEgLypcdCovLCAxIC8qXG4qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKICAgICAxIC8qc3BhY2UqLywgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKi0qLywgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKj8qLywKQEAgLTEwNyw3ICsxMDks
MTUgQEAgRm9udDo6Rm9udCgpCiB7CiB9CiAKKworCisvLyBGSVhNRTogV2Ugc2hvdWxkIHJlY29u
Y2lsZSB0aGUgZGlmZmVyZW5jZSBpbiBkYXRhdHlwZSBiZXR3ZWVuIGlPUyBhbmQgT3BlblNvdXJj
ZS4gT24gaU9TIHdlIHdhbnQgbGV0dGVyLCB3b3JkIHNwYWNpbmcKKy8vIHRvIGJlIGZsb2F0IGZv
ciBzdWItcGl4ZWwga2VybmluZy4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA2MDY+LgorI2lmICFQTEFURk9STShJT1MpCiBGb250OjpGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZmQsIHNob3J0IGxldHRlclNwYWNpbmcsIHNob3J0IHdvcmRTcGFjaW5n
KSAKKyNlbHNlCitGb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxl
dHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKSAKKyNlbmRpZgogICAgIDogbV9mb250RGVz
Y3JpcHRpb24oZmQpCiAgICAgLCBtX2xldHRlclNwYWNpbmcobGV0dGVyU3BhY2luZykKICAgICAs
IG1fd29yZFNwYWNpbmcod29yZFNwYWNpbmcpCkBAIC0xMTYsNiArMTI2LDcgQEAgRm9udDo6Rm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mIGZkLCBzaG9ydCBsZXR0ZXJTcGFjaW5nLCBzaG9ydCB3
b3JkU3BhY2luZykKIHsKIH0KIAorLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3Ry
dWN0b3IgcGxhdGZvcm0taW5kZXBlbmRlbnQuCiBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZv
bnRTbW9vdGhpbmdNb2RlKQogICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxh
dGZvcm1Gb250KGZvbnREYXRhKSkKICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQpAQCAtMTI1LDgg
KzEzNiwzMiBAQCBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBi
b29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNbwogewogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQpOwogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldEZvbnRTbW9vdGhpbmcoZm9udFNtb290aGluZ01vZGUpOworI2lmIFBMQVRGT1JNKElP
UykKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUo
Zm9udERhdGEuZm9udCgpKSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7CisgICAgbV9mb250RGVzY3JpcHRpb24u
c2V0SXRhbGljKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RG
b250VHJhaXRJdGFsaWMpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250
R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8g
Rm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKKyNlbmRpZgogfQogCisvLyBGSVhN
RTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4K
KyNpZiBQTEFURk9STShJT1MpCitGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZv
bnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQorICAgIDogbV9n
bHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKKyAgICAs
IG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93b3JkU3BhY2luZygwKQorICAgICwgbV90eXBl
c2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7CisgICAgQ1RG
b250UmVmIHByaW1hcnlGb250ID0gZm9udERhdGEuZm9udCgpOworICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9udCkpOworICAgIG1f
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlGb250
KSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXRhbGljKENURm9udEdldFN5bWJvbGljVHJh
aXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgbV9mb250RGVzY3Jp
cHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBr
Q1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7Cisg
ICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmludGVy
Rm9udCgpKTsKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKG1f
Zm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworfQorI2VuZGlmCisKIEZvbnQ6
OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCiAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbihvdGhlci5t
X2ZvbnREZXNjcmlwdGlvbikKICAgICAsIG1fZ2x5cGhzKG90aGVyLm1fZ2x5cGhzKQpAQCAtMjk3
LDE0ICszMzIsMTQgQEAgdm9pZCBGb250Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+
IGZvbnRTZWxlY3RvcikgY29uc3QKICAgICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgPSBjb21wdXRl
VHlwZXNldHRpbmdGZWF0dXJlcygpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbikgY29uc3QKK2Zsb2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnRO
b3RSZWFkeUFjdGlvbikgY29uc3QKIHsKICAgICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdoaWxl
IHdlIGFyZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9h
ZGluZywKICAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1lbnQgaXMgc2V0IHRvIHRy
dWUgKGluIHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawogICAgIC8vIGZvbnQpLgog
ICAgIGlmIChsb2FkaW5nQ3VzdG9tRm9udHMoKSAmJiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24g
PT0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAg
ICAgIHJldHVybiAwOworCiAgICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0byk7
CiAKICAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4KQpAQCAtMzQwLDcgKzM3NSw3IEBA
IGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvCiAgICAgfQogCiAgICAgYm9vbCBoYXNLZXJuaW5nT3JM
aWdhdHVyZXMgPSB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiAoS2VybmluZyB8IExpZ2F0dXJlcyk7
Ci0gICAgYm9vbCBoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZyA9IHdvcmRTcGFjaW5nKCkg
fCBsZXR0ZXJTcGFjaW5nKCk7CisgICAgYm9vbCBoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3BhY2lu
ZyA9IHdvcmRTcGFjaW5nKCkgfHwgbGV0dGVyU3BhY2luZygpOwogICAgIGZsb2F0KiBjYWNoZUVu
dHJ5ID0gbV9nbHlwaHMtPndpZHRoQ2FjaGUoKS5hZGQocnVuLCBzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6cXVpZXRfTmFOKCksIGhhc0tlcm5pbmdPckxpZ2F0dXJlcywgaGFzV29yZFNwYWNp
bmdPckxldHRlclNwYWNpbmcsIGdseXBoT3ZlcmZsb3cpOwogICAgIGlmIChjYWNoZUVudHJ5ICYm
ICFzdGQ6OmlzbmFuKCpjYWNoZUVudHJ5KSkKICAgICAgICAgcmV0dXJuICpjYWNoZUVudHJ5Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IGMzZjM3MDY2NjZiZGNm
YThmNDEzODU5NjJmMmNmZWRiMDU3YTk4ZTUuLjFlMTY0OGE5NDMwOTkzMTg3NThiZGNmNDJlM2Rm
MDExNGFkOGI4ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAg
LTc5LDkgKzc5LDIxIEBAIHN0cnVjdCBHbHlwaE92ZXJmbG93IHsKIGNsYXNzIEZvbnQgewogcHVi
bGljOgogICAgIEZvbnQoKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVjb25jaWxlIHRo
ZSBkaWZmZXJlbmNlIGluIGRhdGF0eXBlIGJldHdlZW4gaU9TIGFuZCBPcGVuU291cmNlLiBPbiBp
T1Mgd2Ugd2FudCBsZXR0ZXIsIHdvcmQgc3BhY2luZworICAgIC8vIHRvIGJlIGZsb2F0IGZvciBz
dWItcGl4ZWwga2VybmluZy4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA2MDY+LgorI2lmICFQTEFURk9STShJT1MpCiAgICAgRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBzaG9ydCBsZXR0ZXJTcGFjaW5nLCBzaG9ydCB3b3JkU3BhY2luZyk7CisjZWxz
ZQorICAgIEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgbGV0dGVyU3BhY2luZywg
ZmxvYXQgd29yZFNwYWNpbmcpOworI2VuZGlmCiAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBv
bmx5IHVzZWQgaWYgdGhlIHBsYXRmb3JtIHdhbnRzIHRvIHN0YXJ0IHdpdGggYSBuYXRpdmUgZm9u
dC4KICAgICBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzUHJpbnRpbmcsIEZv
bnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgUGFzc1JlZlB0cjxG
b250U2VsZWN0b3I+KTsKKyNlbmRpZgogICAgIH5Gb250KCk7CiAKICAgICBGb250KGNvbnN0IEZv
bnQmKTsKQEAgLTk4LDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZShQYXNzUmVm
UHRyPEZvbnRTZWxlY3Rvcj4pIGNvbnN0OwogCiAgICAgZW51bSBDdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24geyBEb05vdFBhaW50SWZGb250Tm90UmVhZHksIFVzZUZhbGxiYWNrSWZGb250Tm90UmVh
ZHkgfTsKLSAgICB2b2lkIGRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSwgQ3VzdG9tRm9u
dE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBjb25zdDsKKyAgICBm
bG9hdCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxv
YXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiA9IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CiAgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAt
MSkgY29uc3Q7CiAKICAgICBEYXNoQXJyYXkgZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0
KGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgZnJvbSwg
aW50IHRvLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRzKSBjb25zdDsKQEAgLTExNSwxMCAr
MTI3LDE5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTbWFsbENhcHMoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsgfQogCisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCByZWNvbmNpbGUgdGhlIGRpZmZlcmVuY2UgaW4gZGF0YXR5cGUgYmV0d2VlbiBpT1MgYW5k
IE9wZW5Tb3VyY2UuIE9uIGlPUyB3ZSB3YW50IGxldHRlciwgd29yZCBzcGFjaW5nCisgICAgLy8g
dG8gYmUgZmxvYXQgZm9yIHN1Yi1waXhlbCBrZXJuaW5nLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYwNj4uCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBz
aG9ydCB3b3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fd29yZFNwYWNpbmc7IH0KICAgICBz
aG9ydCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9CiAg
ICAgdm9pZCBzZXRXb3JkU3BhY2luZyhzaG9ydCBzKSB7IG1fd29yZFNwYWNpbmcgPSBzOyB9CiAg
ICAgdm9pZCBzZXRMZXR0ZXJTcGFjaW5nKHNob3J0IHMpIHsgbV9sZXR0ZXJTcGFjaW5nID0gczsg
fQorI2Vsc2UKKyAgICBmbG9hdCB3b3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fd29yZFNw
YWNpbmc7IH0KKyAgICBmbG9hdCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0
ZXJTcGFjaW5nOyB9CisgICAgdm9pZCBzZXRXb3JkU3BhY2luZyhmbG9hdCBzKSB7IG1fd29yZFNw
YWNpbmcgPSBzOyB9CisgICAgdm9pZCBzZXRMZXR0ZXJTcGFjaW5nKGZsb2F0IHMpIHsgbV9sZXR0
ZXJTcGFjaW5nID0gczsgfQorI2VuZGlmCiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsK
ICAgICBib29sIGlzUHJpbnRlckZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlv
bi51c2VQcmludGVyRm9udCgpOyB9CiAgICAgYm9vbCBpc1NWR0ZvbnQoKSBjb25zdCB7IHJldHVy
biBwcmltYXJ5Rm9udCgpLT5pc1NWR0ZvbnQoKTsgfQpAQCAtMTgwLDEwICsyMDEsMTAgQEAgcHJp
dmF0ZToKIAogICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCiAg
ICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4m
LCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0g
Tm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKLSAgICB2b2lkIGRyYXdTaW1wbGVUZXh0KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20s
IGludCB0bykgY29uc3Q7CisgICAgZmxvYXQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAgICAgdm9pZCBkcmF3R2x5cGhz
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZm
ZXImLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9p
ZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEdseXBoQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZvaWQgZHJhd0ds
eXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1
ZmZlciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0
IEF0b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICBmbG9hdCBmbG9h
dFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsK
ICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBm
bG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CkBAIC0xOTYs
NyArMjE3LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3Ry
ZWFtIGFkdmFuY2UuCiAgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0
RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICBmbG9hdCBkcmF3Q29tcGxleFRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Owog
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxv
dyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMp
IGNvbnN0OwpAQCAtMzA0LDggKzMyNSwxMyBAQCBwcml2YXRlOgogCiAgICAgRm9udERlc2NyaXB0
aW9uIG1fZm9udERlc2NyaXB0aW9uOwogICAgIG11dGFibGUgUmVmUHRyPEZvbnRHbHlwaHM+IG1f
Z2x5cGhzOworI2lmICFQTEFURk9STShJT1MpCiAgICAgc2hvcnQgbV9sZXR0ZXJTcGFjaW5nOwog
ICAgIHNob3J0IG1fd29yZFNwYWNpbmc7CisjZWxzZQorICAgIGZsb2F0IG1fbGV0dGVyU3BhY2lu
ZzsKKyAgICBmbG9hdCBtX3dvcmRTcGFjaW5nOworI2VuZGlmCiAgICAgbXV0YWJsZSBib29sIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3R5cGVzZXR0
aW5nRmVhdHVyZXMgOiAyOyAvLyAoVHlwZXNldHRpbmdGZWF0dXJlcykgQ2FjaGVzIHZhbHVlcyBj
b21wdXRlZCBmcm9tIG1fZm9udERlc2NyaXB0aW9uLgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCmluZGV4IGVkN2EyMDJkY2QwOTg5NjFjY2Y4
ZjY0YTBlZjdmNGQwODEzZGJmMWUuLmZiZThiZjQ0ZmQzN2RlY2Y0ZDkzNDRhODNiZmY0MDljOTA5
YjM2YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcApAQCAtNDUsMTQgKzQ1LDUwIEBACiAjaW5jbHVkZSAiT3BlblR5cGVWZXJ0aWNhbERhdGEu
aCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIk1lbW9yeVByZXNzdXJl
SGFuZGxlci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCisvLyBGSVhNRTogV2Ug
bWF5IGJlIGFibGUgdG8gc2ltcGxpZnkgdGhpcyBjb2RlIHVzaW5nIEMrKzExIHRocmVhZGluZyBw
cmltaXRpdmVzLCBpbmNsdWRpbmcgc3RkOjpjYWxsX29uY2UoKS4KK3N0YXRpYyBwdGhyZWFkX211
dGV4X3QgZm9udERhdGFMb2NrOworCitzdGF0aWMgdm9pZCBpbml0Rm9udENhY2hlTG9ja09uY2Uo
KQoreworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhBdHRyaWJ1dGU7CisgICAgcHRocmVh
ZF9tdXRleGF0dHJfaW5pdCgmbXV0ZXhBdHRyaWJ1dGUpOworICAgIHB0aHJlYWRfbXV0ZXhhdHRy
X3NldHR5cGUoJm11dGV4QXR0cmlidXRlLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7CisgICAg
cHRocmVhZF9tdXRleF9pbml0KCZmb250RGF0YUxvY2ssICZtdXRleEF0dHJpYnV0ZSk7CisgICAg
cHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmbXV0ZXhBdHRyaWJ1dGUpOworfQorCitzdGF0aWMg
cHRocmVhZF9vbmNlX3QgaW5pdEZvbnRMb2NrQ29udHJvbCA9IFBUSFJFQURfT05DRV9JTklUOwor
CitjbGFzcyBGb250TG9ja2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250TG9ja2Vy
KTsKK3B1YmxpYzoKKyAgICBGb250TG9ja2VyKCkKKyAgICB7CisgICAgICAgIHB0aHJlYWRfb25j
ZSgmaW5pdEZvbnRMb2NrQ29udHJvbCwgaW5pdEZvbnRDYWNoZUxvY2tPbmNlKTsKKyAgICAgICAg
aW50IGxvY2tjb2RlID0gcHRocmVhZF9tdXRleF9sb2NrKCZmb250RGF0YUxvY2spOworICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2NrY29kZSwgIWxvY2tjb2RlLCAiZm9udERh
dGFMb2NrIGxvY2sgZmFpbGVkIHdpdGggY29kZTolZCIsIGxvY2tjb2RlKTsgICAgCisgICAgfQor
ICAgIH5Gb250TG9ja2VyKCkKKyAgICB7CisgICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRf
bXV0ZXhfdW5sb2NrKCZmb250RGF0YUxvY2spOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
X1VOVVNFRChsb2NrY29kZSwgIWxvY2tjb2RlLCAiZm9udERhdGFMb2NrIHVubG9jayBmYWlsZWQg
d2l0aCBjb2RlOiVkIiwgbG9ja2NvZGUpOworICAgIH0KK307CisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQorCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8v
IEZJWE1FOiBXZSBzaG91bGQgcmV0dXJuIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVy
IHNpbmNlIHdlIG5ldmVyIHJldHVybiBhIG51bGxwdHIuCiBGb250Q2FjaGUqIGZvbnRDYWNoZSgp
CiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250Q2FjaGUsIGdsb2JhbEZvbnRDYWNoZSwg
KCkpOwotICAgIHJldHVybiAmZ2xvYmFsRm9udENhY2hlOworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxGb250Q2FjaGU+IGdsb2JhbEZvbnRDYWNoZTsKKyAgICByZXR1cm4gJmdsb2JhbEZvbnRD
YWNoZS5nZXQoKTsKIH0KIAogRm9udENhY2hlOjpGb250Q2FjaGUoKQpAQCAtMTg0LDYgKzIyMCwx
MCBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmbwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcGFzc2VkRmFt
aWx5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgRm9udExvY2tlciBmb250TG9ja2VyOworI2VuZGlmCisgICAgCiAjaWYgT1MoV0lORE9X
UykgJiYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQogICAgIC8vIExlYWRpbmcgIkAiIGluIHRo
ZSBmb250IG5hbWUgZW5hYmxlcyBXaW5kb3dzIHZlcnRpY2FsIGZsb3cgZmxhZyBmb3IgdGhlIGZv
bnQuCiAgICAgLy8gQmVjYXVzZSB3ZSBkbyB2ZXJ0aWNhbCBmbG93IGJ5IG91cnNlbHZlcywgd2Ug
ZG9uJ3Qgd2FudCB0byB1c2UgdGhlIFdpbmRvd3MgZmVhdHVyZS4KQEAgLTMxNyw4ICszNTcsMTUg
QEAgdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGEsIHN0ZDo6cGFpcjxSZWZQdHI8U2lt
cGxlRm9udERhdGE+LCB1bnNpZ25lZD4sIEYKIAogc3RhdGljIEZvbnREYXRhQ2FjaGUqIGdGb250
RGF0YUNhY2hlID0gMDsKIAorI2lmIFBMQVRGT1JNKElPUykKK2NvbnN0IGludCBjTWF4SW5hY3Rp
dmVGb250RGF0YSA9IDEyMDsKK2NvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDEw
MDsKK2NvbnN0IGludCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1
MDsKK2NvbnN0IGludCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEg
PSAzMDsKKyNlbHNlCiBjb25zdCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSAyMjU7CiBjb25z
dCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAyMDA7CisjZW5kaWYKIHN0YXRpYyBMaXN0
SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+PiogZ0luYWN0aXZlRm9udERhdGEgPSAwOwog
CiBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlseSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUsIFNob3VsZFJldGFpbiBzaG91
bGRSZXRhaW4pCkBAIC0zNDAsNiArMzg3LDEwIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSoKICAg
ICAgICAgQVNTRVJUKG1fcHVyZ2VQcmV2ZW50Q291bnQpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgRm9udExvY2tlciBmb250TG9ja2VyOworI2VuZGlmCisgICAgCiAgICAgaWYg
KCFnRm9udERhdGFDYWNoZSkgewogICAgICAgICBnRm9udERhdGFDYWNoZSA9IG5ldyBGb250RGF0
YUNhY2hlOwogICAgICAgICBnSW5hY3RpdmVGb250RGF0YSA9IG5ldyBMaXN0SGFzaFNldDxSZWZQ
dHI8U2ltcGxlRm9udERhdGE+PjsKQEAgLTM4MCw2ICs0MzEsMTAgQEAgdm9pZCBGb250Q2FjaGU6
OnJlbGVhc2VGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiAgICAgQVNT
RVJUKGdGb250RGF0YUNhY2hlKTsKICAgICBBU1NFUlQoIWZvbnREYXRhLT5pc0N1c3RvbUZvbnQo
KSk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgRm9udExvY2tlciBmb250TG9ja2VyOworI2Vu
ZGlmCisgICAgCiAgICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNo
ZS0+ZmluZChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwogICAgIEFTU0VSVChpdCAhPSBnRm9u
dERhdGFDYWNoZS0+ZW5kKCkpOwogICAgIGlmIChpdCA9PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkp
CkBAIC0zOTIsOCArNDQ3LDE3IEBAIHZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFj
dGl2ZUZvbnREYXRhSWZOZWVkZWQoKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIHVu
ZGVyTWVtb3J5UHJlc3N1cmUgPSBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5oYXNSZWNlaXZlZE1l
bW9yeVByZXNzdXJlKCk7CisgICAgaW50IGluYWN0aXZlRm9udERhdGFMaW1pdCA9IHVuZGVyTWVt
b3J5UHJlc3N1cmUgPyBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgOiBj
TWF4SW5hY3RpdmVGb250RGF0YTsKKyAgICBpbnQgdGFyZ2V0Rm9udERhdGFMaW1pdCA9IHVuZGVy
TWVtb3J5UHJlc3N1cmUgPyBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERh
dGEgOiBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YTsKKworICAgIGlmIChnSW5hY3RpdmVGb250RGF0
YSAmJiAhbV9wdXJnZVByZXZlbnRDb3VudCAmJiBnSW5hY3RpdmVGb250RGF0YS0+c2l6ZSgpID4g
aW5hY3RpdmVGb250RGF0YUxpbWl0KQorICAgICAgICBwdXJnZUluYWN0aXZlRm9udERhdGEoZ0lu
YWN0aXZlRm9udERhdGEtPnNpemUoKSAtIHRhcmdldEZvbnREYXRhTGltaXQpOworI2Vsc2UKICAg
ICBpZiAoZ0luYWN0aXZlRm9udERhdGEgJiYgIW1fcHVyZ2VQcmV2ZW50Q291bnQgJiYgZ0luYWN0
aXZlRm9udERhdGEtPnNpemUoKSA+IGNNYXhJbmFjdGl2ZUZvbnREYXRhKQogICAgICAgICBwdXJn
ZUluYWN0aXZlRm9udERhdGEoZ0luYWN0aXZlRm9udERhdGEtPnNpemUoKSAtIGNUYXJnZXRJbmFj
dGl2ZUZvbnREYXRhKTsKKyNlbmRpZgogfQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2
ZUZvbnREYXRhKGludCBjb3VudCkKQEAgLTQwOSw2ICs0NzMsMTAgQEAgdm9pZCBGb250Q2FjaGU6
OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgY291bnQpCiAKICAgICBpc1B1cmdpbmcgPSB0cnVl
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEZvbnRMb2NrZXIgZm9udExvY2tlcjsKKyNlbmRp
ZgorCiAgICAgVmVjdG9yPFJlZlB0cjxTaW1wbGVGb250RGF0YT4sIDIwPiBmb250RGF0YVRvRGVs
ZXRlOwogICAgIExpc3RIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4+OjppdGVyYXRvciBl
bmQgPSBnSW5hY3RpdmVGb250RGF0YS0+ZW5kKCk7CiAgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPFNp
bXBsZUZvbnREYXRhPj46Oml0ZXJhdG9yIGl0ID0gZ0luYWN0aXZlRm9udERhdGEtPmJlZ2luKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCmluZGV4IGI1
Y2YwOTE2Yzc3YjQzNTNlMzNjMzgxODJmOThlYTFkMWE2NDI4NTUuLjU2NzAyZWQzNDI5ZmRkNzFj
NjNjN2U4MzIwOWY4N2YyM2Q4NjY2MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0zMywxMiArMzMsMTcgQEAKICNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9V
bmljb2RlLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q29yZVRleHQvQ1RGb250
Lmg+CisjZW5kaWYKKwogI2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2lu
Y2x1ZGUgPG9iamlkbC5oPgpAQCAtMTAwLDkgKzEwNSw5IEBAIHN0cnVjdCBGb250RGVzY3JpcHRp
b25Gb250RGF0YUNhY2hlS2V5IHsKIH07CiAKIGNsYXNzIEZvbnRDYWNoZSB7Ci0gICAgZnJpZW5k
IGNsYXNzIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwotCiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRm9udENhY2hlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgZnJpZW5kIGNsYXNz
IEZvbnRDYWNoZVB1cmdlUHJldmVudGVyOworICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3ll
ZDxGb250Q2FjaGU+OwogcHVibGljOgogICAgIGZyaWVuZCBGb250Q2FjaGUqIGZvbnRDYWNoZSgp
OwogCkBAIC0xMTcsNiArMTIyLDkgQEAgcHVibGljOgogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQg
YnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CiAKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgc3RhdGljIGZsb2F0IHdlaWdodE9mQ1RGb250KENURm9udFJlZik7CisjZW5k
aWYKICNpZiBQTEFURk9STShXSU4pCiAgICAgSU1MYW5nRm9udExpbmtUeXBlKiBnZXRGb250TGlu
a0ludGVyZmFjZSgpOwogICAgIHN0YXRpYyB2b2lkIGNvbUluaXRpYWxpemUoKTsKQEAgLTE3OCw2
ICsxODYsMTAgQEAgcHJpdmF0ZToKICAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKIAogICAgIC8vIFRo
ZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdldEN1c3RvbUZhbGxiYWNrRm9udChjb25z
dCBVSW50MzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IGdldFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCk7CisjZW5kaWYKICAgICBQYXNzT3duUHRyPEZvbnRQbGF0Zm9ybURhdGE+
IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRv
bWljU3RyaW5nJiBmYW1pbHkpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBzaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mKTsKQEAgLTE5Myw2ICsyMDUsOSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgZnJpZW5kIGNs
YXNzIFNpbXBsZUZvbnREYXRhOyAvLyBGb3IgZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSopCiAgICAgZnJpZW5kIGNsYXNzIEZvbnRHbHlwaHM7CisjaWYgUExBVEZPUk0o
SU9TKQorICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXI7CisjZW5kaWYKIH07
CiAKIC8vIEdldCB0aGUgZ2xvYmFsIGZvbnRDYWNoZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCmluZGV4IDA3NDAxNzM1ZDczMWUyYmM0
YjFkYzQzYTM4YzQ1NjFjMzdhMzJkZTUuLjk1NjM0MzczZTk1NTdhNDk1MDI5YjJmOTBhMDRjMGFh
MzQwY2I2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRGYXN0UGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEZhc3RQYXRoLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQK
ICAgICByZXR1cm4gYmVmb3JlV2lkdGg7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd1NpbXBsZVRleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd1Np
bXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8v
IFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMrYWR2YW5jZXMrZm9udCBkYXRhIGZv
ciBlYWNoIGdseXBoLgogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwpAQCAtMTY2LDEwICsx
NjYsMTIgQEAgdm9pZCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmwKICAgICBmbG9hdCBzdGFydFggPSBwb2lu
dC54KCkgKyBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0bywg
Z2x5cGhCdWZmZXIpOwogCiAgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gMDsKIAogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChz
dGFydFgsIHBvaW50LnkoKSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5
cGhCdWZmZXIsIHN0YXJ0UG9pbnQpOworCisgICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3Rh
cnRYOwogfQogCiB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29u
c3QKQEAgLTE4Myw4ICsxODUsOCBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2lt
cGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdQogICAgIGRyYXdF
bXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQo
cG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOwogfQogCi12b2lkIEZvbnQ6
OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkgY29uc3QKLXsgICAKK3ZvaWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsIEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorewogI2lmICFFTkFCTEUoU1ZHX0ZP
TlRTKQogICAgIFVOVVNFRF9QQVJBTShydW4pOwogI2VuZGlmCkBAIC0yMjYsOSArMjI4LDExIEBA
IHZvaWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBpZiAo
cmVuZGVyaW5nQ29udGV4dCAmJiBmb250RGF0YS0+aXNTVkdGb250KCkpCiAgICAgICAgIHJlbmRl
cmluZ0NvbnRleHQtPmRyYXdTVkdHbHlwaHMoY29udGV4dCwgZm9udERhdGEsIGdseXBoQnVmZmVy
LCBsYXN0RnJvbSwgbmV4dEdseXBoIC0gbGFzdEZyb20sIHN0YXJ0UG9pbnQpOwotICAgIGVsc2UK
KyAgICBlbHNlIHsKICNlbmRpZgogICAgICAgICBkcmF3R2x5cGhzKGNvbnRleHQsIGZvbnREYXRh
LCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50
KTsKKyAgICAgICAgcG9pbnQuc2V0WChuZXh0WCk7CisgICAgfQogfQogCiBpbmxpbmUgc3RhdGlj
IGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwaChjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEsIEdseXBoIGdseXBoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udEdseXBocy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEdseXBocy5oCmluZGV4IDI5ZWRkZTc5MDlmNGQ2NDM0MjVjODJmNDI4MDlmM2JkMjEyZWM3NTku
LjRjNzBkN2RmMjdhOWZlNTZmZDE0NGZhZDc5MTc4ZTU3ZTE0YTMyNTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgKQEAgLTI3LDYgKzI3LDEwIEBA
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
CisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdseXBoUGFnZVRyZWVOb2RlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNw
cAppbmRleCAyMWJlYTM3MzU4NjMzZWVhMjc2YjY3ZjkzMGE0MDRiYWEwM2U1MjVjLi41MzA4ZWJk
ZmU1YzUyNTcwMWI5NWZhMzYxZWQzZTcwNTQxMjJhNmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcApAQCAtMzMsNiAr
MzMsOSBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSkKICAgICA6IG1fc3ludGhldGljQm9sZChmYWxzZSkKICAgICAsIG1f
c3ludGhldGljT2JsaXF1ZShmYWxzZSkKICAgICAsIG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkK
KyNpZiBQTEFURk9STShJT1MpCisgICAgLCBtX2lzRW1vamkoZmFsc2UpCisjZW5kaWYKICAgICAs
IG1fc2l6ZSgwKQogICAgICwgbV93aWR0aFZhcmlhbnQoUmVndWxhcldpZHRoKQogI2lmIFBMQVRG
T1JNKFdJTikKQEAgLTYwLDYgKzYzLDkgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YSgpCiAgICAgOiBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCiAgICAgLCBtX3N5bnRoZXRpY09i
bGlxdWUoZmFsc2UpCiAgICAgLCBtX29yaWVudGF0aW9uKEhvcml6b250YWwpCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgICwgbV9pc0Vtb2ppKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX3NpemUoMCkK
ICAgICAsIG1fd2lkdGhWYXJpYW50KFJlZ3VsYXJXaWR0aCkKICNpZiBPUyhEQVJXSU4pCkBAIC04
NSw2ICs5MSw5IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpCiAgICAgOiBtX3N5bnRoZXRpY0Jv
bGQoc3ludGhldGljQm9sZCkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShzeW50aGV0aWNPYmxp
cXVlKQogICAgICwgbV9vcmllbnRhdGlvbihvcmllbnRhdGlvbikKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgLCBtX2lzRW1vamkoZmFsc2UpCisjZW5kaWYKICAgICAsIG1fc2l6ZShzaXplKQogICAg
ICwgbV93aWR0aFZhcmlhbnQod2lkdGhWYXJpYW50KQogI2lmIE9TKERBUldJTikKQEAgLTExMSw2
ICsxMjAsOSBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiBj
Z0ZvbnQsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQgogICAgIDogbV9zeW50aGV0aWNCb2xk
KHN5bnRoZXRpY0JvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoc3ludGhldGljT2JsaXF1
ZSkKICAgICAsIG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24pCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICwgbV9pc0Vtb2ppKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAs
IG1fd2lkdGhWYXJpYW50KHdpZHRoVmFyaWFudCkKICAgICAsIG1fZm9udCgwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4
IDcwMGRiOTVkMDNlOWZlMzFjM2YxNjRhNDhiMDE5NTMxZjNjNWI5NTIuLjA1ZGZjYzMzYzgxODM1
NDY2OTVhNGY3NWE1NTdmNDYwNTA1MjQ2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTQ5LDYgKzQ5LDEwIEBACiAj
aWYgT1MoREFSV0lOKQogT0JKQ19DTEFTUyBOU0ZvbnQ7CiAKKyNpZiBQTEFURk9STShJT1MpCisj
aW1wb3J0IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKKwogdHlwZWRlZiBz
dHJ1Y3QgQ0dGb250KiBDR0ZvbnRSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NURm9udCog
Q1RGb250UmVmOwogI2VuZGlmCkBAIC03OSw3ICs4Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotI2lmIE9TKERB
UldJTikKKyNpZiBPUyhEQVJXSU4pICYmIFVTRShBUFBLSVQpCiBpbmxpbmUgQ1RGb250UmVmIHRv
Q1RGb250UmVmKE5TRm9udCAqbnNGb250KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PENURm9u
dFJlZj4obnNGb250KTsgfQogI2VuZGlmCiAKQEAgLTkyLDggKzk2LDE0IEBAIHB1YmxpYzoKICAg
ICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBz
eW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBGb250V2lkdGhW
YXJpYW50ID0gUmVndWxhcldpZHRoKTsKIAogI2lmIE9TKERBUldJTikKKyNpZiBVU0UoQVBQS0lU
KQogICAgIEZvbnRQbGF0Zm9ybURhdGEoTlNGb250KiwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50
ZXJGb250ID0gZmFsc2UsIGJvb2wgc3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRp
Y09ibGlxdWUgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgIEZvbnRPcmllbnRhdGlvbiA9
IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgpOworI2Vsc2UKKyAg
ICBGb250UGxhdGZvcm1EYXRhKENURm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJG
b250ID0gZmFsc2UsIGJvb2wgc3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY09i
bGlxdWUgPSBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgIEZvbnRPcmllbnRhdGlvbiA9IEhv
cml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgpOworI2VuZGlmCisKICNp
ZiBVU0UoQ0cpCiAgICAgRm9udFBsYXRmb3JtRGF0YShDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRpb24s
IEZvbnRXaWR0aFZhcmlhbnQpOwogI2VuZGlmCkBAIC0xMDcsMTEgKzExNywxOCBAQCBwdWJsaWM6
CiAjZW5kaWYKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEZvbnRQbGF0Zm9ybURh
dGEoQ1RGb250UmVmLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQgPSBmYWxzZSwgYm9v
bCBzeW50aGV0aWNPYmxpcXVlID0gZmFsc2UsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWws
IEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgpOworI2VuZGlmCisKICAgICB+Rm9udFBs
YXRmb3JtRGF0YSgpOwogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEhGT05UIGhmb250KCkgY29u
c3QgeyByZXR1cm4gbV9mb250ID8gbV9mb250LT5nZXQoKSA6IDA7IH0KICAgICBib29sIHVzZUdE
SSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlR0RJOyB9CisjZWxpZiBQTEFURk9STShJT1MpCisgICAg
Q1RGb250UmVmIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKyAgICB2b2lkIHNldEZv
bnQoQ1RGb250UmVmKTsKICNlbGlmIE9TKERBUldJTikKICAgICBOU0ZvbnQqIGZvbnQoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnQ7IH0KICAgICB2b2lkIHNldEZvbnQoTlNGb250Kik7CkBAIC0xMjIs
NyArMTM5LDEyIEBAIHB1YmxpYzoKICAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1
cm4gbV9jZ0ZvbnQuZ2V0KCk7IH0KICAgICBDVEZvbnRSZWYgY3RGb250KCkgY29uc3Q7CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIGJvb2wgcm91bmRzR2x5cGhBZHZhbmNlcygpIGNvbnN0Owor
I2Vsc2UKKyAgICBib29sIHJvdW5kc0dseXBoQWR2YW5jZXMoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKICAgICBib29sIGFsbG93c0xpZ2F0dXJl
cygpIGNvbnN0OwogI2Vsc2UKICAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1cm4g
bV9jZ0ZvbnQuZ2V0KCk7IH0KQEAgLTE1MywxMCArMTc1LDE1IEBAIHB1YmxpYzoKICNpZiBQTEFU
Rk9STShXSU4pICYmICFVU0UoQ0FJUk8pCiAgICAgICAgIHJldHVybiBtX2ZvbnQgPyBtX2ZvbnQt
Pmhhc2goKSA6IDA7CiAjZWxpZiBPUyhEQVJXSU4pCisjaWYgIVBMQVRGT1JNKElPUykKICNpZiBV
U0UoQ0cpCiAgICAgICAgIEFTU0VSVChtX2ZvbnQgfHwgIW1fY2dGb250KTsKICNlbmRpZgogICAg
ICAgICB1aW50cHRyX3QgaGFzaENvZGVzWzNdID0geyAodWludHB0cl90KW1fZm9udCwgbV93aWR0
aFZhcmlhbnQsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obV9pc1ByaW50ZXJGb250IDw8IDMgfCBt
X29yaWVudGF0aW9uIDw8IDIgfCBtX3N5bnRoZXRpY0JvbGQgPDwgMSB8IG1fc3ludGhldGljT2Js
aXF1ZSkgfTsKKyNlbHNlCisgICAgICAgIEFTU0VSVChtX2ZvbnQgfHwgIW1fY2dGb250IHx8IG1f
aXNFbW9qaSk7CisgICAgICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbM10gPSB7IHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oQ0ZIYXNoKG1fZm9udCkpLCBtX3dpZHRoVmFyaWFudCwgc3RhdGljX2Nhc3Q8
dWludHB0cl90PihtX2lzRW1vamkgPDwgNCB8IG1faXNQcmludGVyRm9udCA8PCAzIHwgbV9vcmll
bnRhdGlvbiA8PCAyIHwgbV9zeW50aGV0aWNCb2xkIDw8IDEgfCBtX3N5bnRoZXRpY09ibGlxdWUp
IH07CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKICAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hl
cjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKICNlbGlmIFVTRShD
QUlSTykKICAgICAgICAgcmV0dXJuIFB0ckhhc2g8Y2Fpcm9fc2NhbGVkX2ZvbnRfdCo+OjpoYXNo
KG1fc2NhbGVkRm9udCk7CkBAIC0yMDMsNyArMjMwLDkgQEAgcHJpdmF0ZToKICAgICBib29sIHBs
YXRmb3JtSXNFcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJikgY29uc3Q7CiAgICAgdm9pZCBw
bGF0Zm9ybURhdGFJbml0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKICAgICBjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGFBc3NpZ24oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYp
OwotI2lmIE9TKERBUldJTikKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhdGljIENURm9udFJl
ZiBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxD
VEZvbnRSZWY+KC0xKTsgfQorI2VsaWYgT1MoREFSV0lOKQogICAgIC8vIExvYWQgdmFyaW91cyBk
YXRhIGFib3V0IHRoZSBmb250IHNwZWNpZmllZCBieSB8bnNGb250fCB3aXRoIHRoZSBzaXplIGZv
bnRTaXplIGludG8gdGhlIGZvbGxvd2luZyBvdXRwdXQgcGFyYW10ZXJzOgogICAgIHZvaWQgbG9h
ZEZvbnQoTlNGb250KiwgZmxvYXQgZm9udFNpemUsIE5TRm9udComIG91dE5TRm9udCwgQ0dGb250
UmVmJik7CiAgICAgc3RhdGljIE5TRm9udCogaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKTsgfQpAQCAtMjE5LDExICsyNDgs
MTYgQEAgcHVibGljOgogICAgIGJvb2wgbV9zeW50aGV0aWNCb2xkOwogICAgIGJvb2wgbV9zeW50
aGV0aWNPYmxpcXVlOwogICAgIEZvbnRPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICBib29sIG1faXNFbW9qaTsKKyNlbmRpZgogICAgIGZsb2F0IG1fc2l6
ZTsKICAgICBGb250V2lkdGhWYXJpYW50IG1fd2lkdGhWYXJpYW50OwogCiBwcml2YXRlOgotI2lm
IE9TKERBUldJTikKKyNpZiBQTEFURk9STShJT1MpCisgICAgQ1RGb250UmVmIG1fZm9udDsKKyNl
bGlmIE9TKERBUldJTikKICAgICBOU0ZvbnQqIG1fZm9udDsKICNlbGlmIFBMQVRGT1JNKFdJTikK
ICAgICBSZWZQdHI8U2hhcmVkR0RJT2JqZWN0PEhGT05UPj4gbV9mb250OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCmlu
ZGV4IDY0NTRlNzNlNzZlOWRiOGYzYmVhM2E0YWYyM2M0N2U3OTNjZGNiMGEuLmNhZWY1ZTlkNjlk
YTJkZTRlMTQ2OTQ2MDY5NzYwZjhlZjVkYjg1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKQEAgLTIxMiw2ICsy
MTIsMTQgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6aW5pdGlhbGl6ZVBhZ2UoY29uc3QgRm9u
dERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBwYWdlTnUKICAgICAgICAgICAgICAgICAgICAgbV9w
YWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnREYXRhKHRoaXMpOwogICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgbV9wYWdlID0gR2x5cGhQYWdlOjpjcmVh
dGVGb3JTaW5nbGVGb250RGF0YSh0aGlzLCBzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KGZvbnREYXRhKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaW1lcyBOZXcgUm9tYW4gY29udGFpbnMgQXJhYmljIGdseXBocywgYnV0IENvcmUgVGV4
dCBkb2Vzbid0IGtub3cgaG93IHRvIHNoYXBlIHRoZW0uIFNlZSA8cmRhcjovL3Byb2JsZW0vOTgy
Mzk3NT4uCisgICAgICAgICAgICAgICAgLy8gT25jZSB3ZSBoYXZlIHRoZSBmaXggZm9yIDxyZGFy
Oi8vcHJvYmxlbS85ODIzOTc1PiB0aGVuIHJlbW92ZSB0aGlzIGNvZGUgdG9nZXRoZXIgd2l0aCBT
aW1wbGVGb250RGF0YTo6c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkKKyAgICAgICAgICAgICAg
ICAvLyBpbiA8cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+LgorICAgICAgICAgICAgICAgIGlmIChw
YWdlTnVtYmVyID09IDYgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihmb250
RGF0YSktPnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQorICAgICAgICAgICAgICAgICAgICBo
YXZlR2x5cGhzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmCiAgICAgICAg
ICAgICAgICAgaGF2ZUdseXBocyA9IGZpbGwobV9wYWdlLmdldCgpLCAwLCBHbHlwaFBhZ2U6OnNp
emUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KGZvbnREYXRhKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1f
cGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSh0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmlu
ZGV4IDBjNDVlYmUwNzcyMjgwN2MyNzM1MjBkODE4ZTU2YTRhOGJkYTExZTguLmYxMmYwMmE2ZjZm
ODU2NjlmZTJkN2IyYzAzOTA3YTVjMDNlMzg3OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNzYsMTIgKzc2LDIx
IEBAIHByaXZhdGU6CiAgICAgaW50IG1fb2Zmc2V0OwogfTsKIAorI2lmICFQTEFURk9STShJT1Mp
CiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQpCiAgICAgOiBtX3VwZGF0aW5nQ29udHJvbFRpbnRz
KGZhbHNlKQogICAgICwgbV90cmFuc3BhcmVuY3lDb3VudCgwKQogewogICAgIHBsYXRmb3JtSW5p
dChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7CiB9CisjZWxzZQorR3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0LCBib29sIHNob3VsZFVzZUNvbnRleHRDb2xvcnMpCisgICAgOiBtX3VwZGF0aW5nQ29u
dHJvbFRpbnRzKGZhbHNlKQorICAgICwgbV90cmFuc3BhcmVuY3lDb3VudCgwKQoreworICAgIHBs
YXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgc2hvdWxkVXNlQ29udGV4dENvbG9y
cyk7Cit9CisjZW5kaWYKIAogR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKIHsK
QEAgLTExNSw2ICsxMjQsMjggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQogICAg
IHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBDb2xvclNwYWNlIGVsbGlwc2VDb2xvclNwYWNlLCBj
b25zdCBDb2xvciYgc2hhZG93Q29sb3IsIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZSkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzYXZl
KCk7CisKKyAgICBzZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvciwgc2hhZG93Q29sb3JTcGFjZSk7
CisgICAgc2V0RmlsbENvbG9yKHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKKworICAg
IGRyYXdFbGxpcHNlKEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpKTsKKworICAgIHNldFN0cm9rZUNvbG9yKGVsbGlwc2VDb2xvciwg
ZWxsaXBzZUNvbG9yU3BhY2UpOworICAgIHNldEZpbGxDb2xvcihlbGxpcHNlQ29sb3IsIGVsbGlw
c2VDb2xvclNwYWNlKTsKKworICAgIGRyYXdFbGxpcHNlKHJlY3QpOyAgCisKKyAgICByZXN0b3Jl
KCk7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVRoaWNrbmVz
cyhmbG9hdCB0aGlja25lc3MpCiB7CiAgICAgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0aGlj
a25lc3M7CkBAIC00MDQsNiArNDM1LDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6OnBhaW50aW5n
RGlzYWJsZWQoKSBjb25zdAogICAgIHJldHVybiBtX3N0YXRlLnBhaW50aW5nRGlzYWJsZWQ7CiB9
CiAKKy8vIEZJWE1FOiBSZXBsYWNlIHRoZSBub24taU9TIGltcGxlbWVudGF0aW9uIHdpdGggdGhl
IGlPUyBpbXBsZW1lbnRhdGlvbiBzaW5jZSB0aGUgbGF0dGVyIGNvbXB1dGVzIHJldHVybnMKKy8v
IHRoZSB3aWR0aCBvZiB0aGUgZHJhd24gdGV4dC4gRW5zdXJlIHRoYXQgdGhlcmUgYXJlbid0IG5v
dGljZWFibGUgZGlmZmVyZW5jZXMgaW4gbGF5b3V0LgorI2lmICFQTEFURk9STShJT1MpCiAjaWYg
IVVTRShXSU5HREkpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZy
b20sIGludCB0bykKIHsKQEAgLTQxMyw2ICs0NDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXQKICAgICBmb250LmRyYXdUZXh0KHRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KICNl
bmRpZgorI2Vsc2UKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZy
b20sIGludCB0bykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBmb250LmRyYXdUZXh0KHRoaXMsIHJ1biwgcG9pbnQsIGZyb20s
IHRvKTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKQogewpAQCAtNDIyLDIxICs0NjUsNDQgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY28KICAgICBmb250LmRyYXdFbXBoYXNpc01hcmtzKHRoaXMsIHJ1biwgbWFyaywgcG9pbnQs
IGZyb20sIHRvKTsKIH0KIAorLy8gRklYTUU6IEJldHRlciBtZXJnZSB0aGUgaU9TIGFuZCBub24t
aU9TIGRpZmZlcmVuY2VzLiBJbiBwYXJ0aWN1bGFyLCBtYWtlIHRoaXMgbWV0aG9kIHVzZSB0aGUK
Ky8vIHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LCBGb250OjpkcmF3VGV4dCgpLCBp
bnN0ZWFkIG9mIGNvbXB1dGluZyBpdC4gRW5zdXJlIHRoYXQgdGhlcmUKKy8vIGFyZW4ndCBub3Rp
Y2VhYmxlIGRpZmZlcmVuY2VzIGluIGxheW91dCB3aXRoIHN1Y2ggYSBjaGFuZ2UuCisjaWYgIVBM
QVRGT1JNKElPUykKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9u
dDo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKKyNl
bHNlCitmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBmb250
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250OjpDdXN0
b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uLCBCaWRpU3RhdHVz
KiBzdGF0dXMsIGludCBsZW5ndGgpCisjZW5kaWYKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgICAg
IHJldHVybiAwOworI2VuZGlmCiAKICAgICBCaWRpUmVzb2x2ZXI8VGV4dFJ1bkl0ZXJhdG9yLCBC
aWRpQ2hhcmFjdGVyUnVuPiBiaWRpUmVzb2x2ZXI7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBi
aWRpUmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGly
ZWN0aW9uYWxPdmVycmlkZSgpKSk7CisjZWxzZQorICAgIGJpZGlSZXNvbHZlci5zZXRTdGF0dXMo
c3RhdHVzID8gKnN0YXR1cyA6IEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0
aW9uYWxPdmVycmlkZSgpKSk7CisjZW5kaWYKICAgICBiaWRpUmVzb2x2ZXIuc2V0UG9zaXRpb25J
Z25vcmluZ05lc3RlZElzb2xhdGVzKFRleHRSdW5JdGVyYXRvcigmcnVuLCAwKSk7CiAKICAgICAv
LyBGSVhNRTogVGhpcyBvd25lcnNoaXAgc2hvdWxkIGJlIHJldmVyc2VkLiBXZSBzaG91bGQgcGFz
cyBCaWRpUnVuTGlzdAogICAgIC8vIHRvIEJpZGlSZXNvbHZlciBpbiBjcmVhdGVCaWRpUnVuc0Zv
ckxpbmUuCiAgICAgQmlkaVJ1bkxpc3Q8QmlkaUNoYXJhY3RlclJ1bj4mIGJpZGlSdW5zID0gYmlk
aVJlc29sdmVyLnJ1bnMoKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGJpZGlSZXNvbHZlci5j
cmVhdGVCaWRpUnVuc0ZvckxpbmUoVGV4dFJ1bkl0ZXJhdG9yKCZydW4sIHJ1bi5sZW5ndGgoKSkp
OworI2Vsc2UKKyAgICBiaWRpUmVzb2x2ZXIuY3JlYXRlQmlkaVJ1bnNGb3JMaW5lKFRleHRSdW5J
dGVyYXRvcigmcnVuLCBsZW5ndGggPCAwID8gcnVuLmxlbmd0aCgpIDogbGVuZ3RoKSk7CisjZW5k
aWYgICAgCiAgICAgaWYgKCFiaWRpUnVucy5ydW5Db3VudCgpKQorI2lmICFQTEFURk9STShJT1Mp
CiAgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgICAgIHJldHVybiAwOworI2VuZGlmCiAKICAg
ICBGbG9hdFBvaW50IGN1cnJQb2ludCA9IHBvaW50OwogICAgIEJpZGlDaGFyYWN0ZXJSdW4qIGJp
ZGlSdW4gPSBiaWRpUnVucy5maXJzdFJ1bigpOwpAQCAtNDQ2LDE1ICs1MTIsMzAgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEYKICAgICAgICAgc3VicnVuLnNldERpcmVjdGlvbihpc1JUTCA/IFJU
TCA6IExUUik7CiAgICAgICAgIHN1YnJ1bi5zZXREaXJlY3Rpb25hbE92ZXJyaWRlKGJpZGlSdW4t
PmRpck92ZXJyaWRlKGZhbHNlKSk7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBmb250
LmRyYXdUZXh0KHRoaXMsIHN1YnJ1biwgY3VyclBvaW50LCAwLCAtMSwgY3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uKTsKIAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgpOwogICAgICAg
ICAvLyBGSVhNRTogSGF2ZSBGb250OjpkcmF3VGV4dCByZXR1cm4gdGhlIHdpZHRoIG9mIHdoYXQg
aXQgZHJldyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtbWVhc3VyZSBoZXJlLgogICAgICAg
ICBpZiAoYmlkaVJ1bikKICAgICAgICAgICAgIGN1cnJQb2ludC5tb3ZlKGZvbnQud2lkdGgoc3Vi
cnVuKSwgMCk7CisjZWxzZQorICAgICAgICBmbG9hdCB3aWR0aCA9IGZvbnQuZHJhd1RleHQodGhp
cywgc3VicnVuLCBjdXJyUG9pbnQsIDAsIC0xLCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwor
ICAgICAgICBjdXJyUG9pbnQubW92ZSh3aWR0aCwgMCk7CisKKyAgICAgICAgYmlkaVJ1biA9IGJp
ZGlSdW4tPm5leHQoKTsKKyNlbmRpZgogICAgIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBp
ZiAoc3RhdHVzKQorICAgICAgICAqc3RhdHVzID0gYmlkaVJlc29sdmVyLnN0YXR1cygpOworI2Vu
ZGlmCiAgICAgYmlkaVJ1bnMuZGVsZXRlUnVucygpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IHJldHVybiBjdXJyUG9pbnQueCgpIC0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBvaW50LngoKSk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdIaWdobGlnaHRGb3JUZXh0KGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGludCBoLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGludCBmcm9tLCBpbnQgdG8pCkBAIC02MTUsNiArNjk2LDE4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgUm91bmRlZFJlY3QmIHJlY3QpCiAgICAg
Y2xpcChwYXRoKTsKIH0KIAorLy8gRklYTUU6IENvbnNpZGVyIHdyaXRpbmcgdGhpcyBpbiB0ZXJt
cyBvZiBhIHNwZWNpYWxpemVkIFJvdW5kZWRSZWN0IHRoYXQgdXNlcyBGbG9hdFJlY3QgYW5kIEZs
b2F0U2l6ZSByYWRpaS4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnQsIGNvbnN0IEZsb2F0
U2l6ZSYgdG9wUmlnaHQsCisgICAgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBG
bG9hdFNpemUmIGJvdHRvbVJpZ2h0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0
KHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7CisgICAg
Y2xpcChwYXRoKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVj
dChjb25zdCBSb3VuZGVkUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQpAQCAtNzMyLDYgKzgyNSwxOCBAQCBCbGVuZE1vZGUgR3JhcGhpY3NDb250ZXh0OjpibGVuZE1v
ZGVPcGVyYXRpb24oKSBjb25zdAogICAgIHJldHVybiBtX3N0YXRlLmJsZW5kTW9kZTsKIH0KIAor
I2lmIFBMQVRGT1JNKElPUykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0OjplbW9qaURyYXdpbmdFbmFi
bGVkKCkKK3sKKyAgICByZXR1cm4gbV9zdGF0ZS5lbW9qaURyYXdpbmdFbmFibGVkOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RW1vamlEcmF3aW5nRW5hYmxlZChib29sIGVtb2ppRHJh
d2luZ0VuYWJsZWQpCit7CisgICAgbV9zdGF0ZS5lbW9qaURyYXdpbmdFbmFibGVkID0gZW1vamlE
cmF3aW5nRW5hYmxlZDsKK30KKyNlbmRpZgorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RHJh
d0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykKIHsKICAgICBtX3N0YXRlLmRy
YXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDE3YzRjZTRkZDcz
MWUzMzQzODNmY2YxNGQ2N2I1NTNlZjMzZTJkM2MuLjRjYThlOTMwZGRmMTg0OWI3ZTU4ODQwMDQw
ZDUzZGY0OWVkMmRhMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC05Myw2ICs5Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKICAgICBjbGFzcyBUZXh0UnVuOwogICAg
IGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdHJ1
Y3QgQmlkaVN0YXR1czsKKyNlbmRpZgogCiAgICAgZW51bSBUZXh0RHJhd2luZ01vZGUgewogICAg
ICAgICBUZXh0TW9kZUZpbGwgPSAxIDw8IDAsCkBAIC0xMzYsNiArMTM5LDEwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgc2hhZG93Q29sb3JTcGFjZShDb2xvclNwYWNlRGV2
aWNlUkdCKQogICAgICAgICAgICAgLCBjb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVTb3VyY2VP
dmVyKQogICAgICAgICAgICAgLCBibGVuZE1vZGUoQmxlbmRNb2RlTm9ybWFsKQorI2lmIFBMQVRG
T1JNKElPUykKKyAgICAgICAgICAgICwgZW1vamlEcmF3aW5nRW5hYmxlZCh0cnVlKQorICAgICAg
ICAgICAgLCBzaG91bGRVc2VDb250ZXh0Q29sb3JzKHRydWUpCisjZW5kaWYKICAgICAgICAgICAg
ICwgc2hvdWxkQW50aWFsaWFzKHRydWUpCiAgICAgICAgICAgICAsIHNob3VsZFNtb290aEZvbnRz
KHRydWUpCiAgICAgICAgICAgICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyh0cnVlKQpA
QCAtMTc3LDYgKzE4NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yOwogICAgICAgICBCbGVuZE1vZGUgYmxlbmRNb2Rl
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBib29sIGVtb2ppRHJhd2luZ0VuYWJsZWQg
OiAxOworICAgICAgICBib29sIHNob3VsZFVzZUNvbnRleHRDb2xvcnMgOiAxOworI2VuZGlmCiAg
ICAgICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzIDogMTsKICAgICAgICAgYm9vbCBzaG91bGRTbW9v
dGhGb250cyA6IDE7CiAgICAgICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDog
MTsKQEAgLTE4OCwxMCArMTk5LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9v
bCBkcmF3THVtaW5hbmNlTWFzayA6IDE7CiAgICAgfTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICB2b2lkIHNldFN0cm9rZUFuZEZpbGxDb2xvcihQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCosIENH
Q29sb3JSZWYpOworI2VuZGlmCisKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQgewogICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKICAgICBwdWJsaWM6CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CisjZWxzZQorICAgICAgICBHcmFw
aGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqLCBib29sIHNob3VsZFVzZUNvbnRl
eHRDb2xvcnMgPSB0cnVlKTsKKyNlbmRpZgogICAgICAgICB+R3JhcGhpY3NDb250ZXh0KCk7CiAK
ICAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
OwpAQCAtMjQzLDcgKzI2MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
YXBwbHlGaWxsUGF0dGVybigpOwogICAgICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsK
IAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoUGFzc05h
dGl2ZUltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBmbG9hdCBzY2FsZSwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VP
dmVyLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb24gPSBEZWZh
dWx0SW1hZ2VPcmllbnRhdGlvbik7CisjZWxzZQogICAgICAgICB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShQYXNzTmF0aXZlSW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlciwg
QmxlbmRNb2RlID0gQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uID0gRGVmYXVsdElt
YWdlT3JpZW50YXRpb24pOworI2VuZGlmCiAKICAgICAgICAgLy8gQWxsb3cgZm9udCBzbW9vdGhp
bmcgKExDRCBhbnRpYWxpYXNpbmcpLiBOb3QgcGFydCBvZiB0aGUgZ3JhcGhpY3Mgc3RhdGUuCiAg
ICAgICAgIHZvaWQgc2V0QWxsb3dzRm9udFNtb290aGluZyhib29sKTsKQEAgLTI2NCw3ICsyODcs
MTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBzdHJva2UgY29sb3IpLgogICAg
ICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50Jik7CisKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgIHZvaWQgZHJhd0pvaW5lZExpbmVzKENHUG9pbnQgcG9pbnRzW10sIHVuc2lnbmVk
IGNvdW50LCBib29sIGFudGlhbGlhcywgQ0dMaW5lQ2FwID0ga0NHTGluZUNhcEJ1dHQpOworI2Vu
ZGlmCisKICAgICAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0Jik7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgICAgICB2b2lkIGRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJiBlbGxpcHNlQ29sb3IsIENvbG9yU3BhY2UgZWxsaXBzZUNvbG9yU3BhY2UsIGNvbnN0IENv
bG9yJiBzaGFkb3dDb2xvciwgQ29sb3JTcGFjZSBzaGFkb3dDb2xvclNwYWNlKTsKKyNlbmRpZgog
ICAgICAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZs
b2F0UG9pbnQqLCBib29sIHNob3VsZEFudGlhbGlhcyA9IGZhbHNlKTsKIAogICAgICAgICB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKQEAgLTMxMSw2ICszNDMsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIGNsaXAoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lk
IGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgICAgIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNv
bnN0IFJvdW5kZWRSZWN0Jik7CisKKyAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHdyaXRpbmcg
dGhpcyBpbiB0ZXJtcyBvZiBhIHNwZWNpYWxpemVkIFJvdW5kZWRSZWN0IHRoYXQgdXNlcyBGbG9h
dFJlY3QgYW5kIEZsb2F0U2l6ZSByYWRpaS4KKyAgICAgICAgdm9pZCBjbGlwUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0LCBjb25zdCBGbG9hdFNp
emUmIHRvcFJpZ2h0LCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEZsb2F0U2l6
ZSYgYm90dG9tUmlnaHQpOworCiAgICAgICAgIHZvaWQgY2xpcE91dChjb25zdCBJbnRSZWN0Jik7
CiAgICAgICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IFJvdW5kZWRSZWN0Jik7CiAg
ICAgICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKTsKQEAgLTMyMiw5ICsz
NTgsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBUZXh0RHJhd2luZ01vZGVGbGFn
cyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01v
ZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBi
b29sIGVtb2ppRHJhd2luZ0VuYWJsZWQoKTsKKyAgICAgICAgdm9pZCBzZXRFbW9qaURyYXdpbmdF
bmFibGVkKGJvb2wpOworI2VuZGlmCisgICAgICAgIAorI2lmICFQTEFURk9STShJT1MpCiAgICAg
ICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9h
dFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisjZWxzZQorICAgICAgICBmbG9h
dCBkcmF3VGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGRyYXdF
bXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiAsIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEp
OworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZv
bnQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnQ6OkN1c3RvbUZvbnRO
b3RSZWFkeUFjdGlvbiA9IEZvbnQ6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CisjZWxzZQor
ICAgICAgICBmbG9hdCBkcmF3QmlkaVRleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBGbG9hdFBvaW50JiwgRm9udDo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udDo6
RG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBCaWRpU3RhdHVzKiA9IDAsIGludCBsZW5ndGggPSAt
MSk7CisjZW5kaWYKICAgICAgICAgdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yVGV4dChjb25zdCBGb250
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaCwgY29uc3QgQ29sb3Im
IGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZSwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7
CiAKICAgICAgICAgZW51bSBSb3VuZGluZ01vZGUgewpAQCAtMzM2LDYgKzM4NSw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgRmxvYXRSZWN0IGNvbXB1dGVMaW5lQm91bmRzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpOwogICAgICAg
ICB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpOwogICAgICAgICBlbnVtIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VX
aXRoQWx0ZXJuYXRpdmVzTGluZVN0eWxlLAorI2VuZGlmCiAgICAgICAgICAgICBEb2N1bWVudE1h
cmtlclNwZWxsaW5nTGluZVN0eWxlLAogICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXJHcmFtbWFy
TGluZVN0eWxlLAogICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXJBdXRvY29ycmVjdGlvblJlcGxh
Y2VtZW50TGluZVN0eWxlLApAQCAtNDk2LDcgKzU0OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBv
aW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSk7
CiAKICAgICBwcml2YXRlOgorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIHZvaWQgcGxhdGZv
cm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CisjZWxzZQorICAgICAgICB2b2lkIHBs
YXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCosIGJvb2wgc2hvdWxkVXNlQ29udGV4
dENvbG9ycyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIAogI2lm
IFBMQVRGT1JNKFdJTikgJiYgIVVTRShXSU5HREkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCA5ZTI0NDkwNDI2ODcx
YzRhNGNlZWNlYjY5N2QzOWE4NTdhODQzYzVkLi44MTU4OGZmNTFiMjgyYjcwZTgxYWRiMTU2MmU0
MDVlMDE4MzUyODdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTU0LDYgKzU0LDEyIEBACiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8T3BlbkdMRVMvRVMy
L2dsLmg+CisjaWZkZWYgX19PQkpDX18KKyNpbXBvcnQgPE9wZW5HTEVTL0VBR0wuaD4KKyNlbmRp
ZiAvLyBfX09CSkNfXworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiBPQkpDX0NMQVNTIENBTGF5ZXI7CiBPQkpDX0NMQVNTIFdlYkdMTGF5ZXI7CkBA
IC02MSw3ICs2NywxMyBAQCBPQkpDX0NMQVNTIFdlYkdMTGF5ZXI7CiB0eXBlZGVmIHVuc2lnbmVk
IGludCBHTHVpbnQ7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJ
T1MpCisjaWZkZWYgX19PQkpDX18KK3R5cGVkZWYgRUFHTENvbnRleHQqIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0Q7CisjZWxzZQordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEOworI2VuZGlmIC8vIF9fT0JKQ19fCisjZWxpZiBQTEFURk9STShNQUMpCiB0eXBlZGVmIHN0
cnVjdCBfQ0dMQ29udGV4dE9iamVjdCAqQ0dMQ29udGV4dE9iajsKIAogdHlwZWRlZiBDR0xDb250
ZXh0T2JqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7CkBAIC03OTEsNiArODAzLDEwIEBAIHB1
YmxpYzoKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9J
bWFnZURhdGEoRHJhd2luZ0J1ZmZlciopOwogICAgIGJvb2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvQ2FudmFzKEltYWdlQnVmZmVyKik7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBl
bmRQYWludCgpOworI2VuZGlmCisKICNpZiBQTEFURk9STShCTEFDS0JFUlJZKQogICAgIGJvb2wg
cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogI2VuZGlmCkBAIC05MzMsNiArOTQ5LDEw
IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNz
YXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBw
aXhlbHMpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgYm9vbCBzZXRSZW5kZXJi
dWZmZXJTdG9yYWdlRnJvbURyYXdhYmxlKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCk7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgdm9pZCBsb2dGcmFt
ZUJ1ZmZlclN0YXR1cyhpbnQgbGluZSk7CiAgICAgdm9pZCByZWFkUGl4ZWxzSU1HKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSk7CkBAIC05NDcsNyArOTY3LDEwIEBA
IHByaXZhdGU6CiAgICAgaW50IG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQ7CiAgICAg
Ym9vbCBpc1Jlc291cmNlU2FmZSgpOwogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JN
KElPUykKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIG1fY29udGV4dE9iajsKKyAgICBS
ZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV93ZWJHTExheWVyOworI2VsaWYgUExBVEZPUk0oTUFD
KQogICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAgIFJldGFpblB0cjxXZWJHTExh
eWVyPiBtX3dlYkdMTGF5ZXI7CiAjZWxpZiBQTEFURk9STShXSU4pICYmIFVTRShDQSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5k
ZXggMmY3ZGU1ZWFjY2ExNDgzMGI3N2U5ZjkwZWFmNzA4MWM4Y2Y5OGQxMy4uNzE5ODM4MzkzYjQ1
MjU3Mjg1OTlhZmQ0OWU3ZDBiOGVkOTFmZjkxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKQEAgLTExNyw3ICsxMTcsNiBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCiAgICAgaWYgKG1fY2xpZW50KQog
ICAgICAgICBtX2NsaWVudC0+dmVyaWZ5Tm90UGFpbnRpbmcoKTsKICNlbmRpZgotCiAgICAgaWYg
KG1fcmVwbGljYUxheWVyKQogICAgICAgICBtX3JlcGxpY2FMYXllci0+c2V0UmVwbGljYXRlZExh
eWVyKDApOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyLmgKaW5kZXggNTFmZDc2MDEyNzI5ZGNhNzY4ZDIxMmViN2QzNmM4NGYxNjk0ZGI1Yi4u
Y2U2MDQxMDhmZTVlZTNlODg4MzBiM2M3NzJmYjdiY2YxZjlmZTExNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaApAQCAtMzg3LDYgKzM4
Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdl
KikgeyB9CiAgICAgdmlydHVhbCBib29sIHNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UoSW1h
Z2UqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
VG9NZWRpYShQbGF0Zm9ybUxheWVyKikgeyB9IC8vIHZpZGVvIG9yIHBsdWctaW4KKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyRm9yTWVk
aWEoKSBjb25zdCB7IHJldHVybiAwOyB9CisjZW5kaWYKICAgICAvLyBQYXNzIGFuIGludmFsaWQg
Y29sb3IgdG8gcmVtb3ZlIHRoZSBjb250ZW50cyBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3QgQ29sb3ImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKikgeyB9CkBAIC00MzcsNiArNDQwLDEw
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRNYWludGFpbnNQaXhlbEFsaWdubWVu
dChib29sIG1haW50YWluc0FsaWdubWVudCkgeyBtX21haW50YWluc1BpeGVsQWxpZ25tZW50ID0g
bWFpbnRhaW5zQWxpZ25tZW50OyB9CiAgICAgdmlydHVhbCBib29sIG1haW50YWluc1BpeGVsQWxp
Z25tZW50KCkgY29uc3QgeyByZXR1cm4gbV9tYWludGFpbnNQaXhlbEFsaWdubWVudDsgfQorI2lm
IFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBwaXhlbEFsaWdubWVudE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0U2l6ZSgpOyB9CisgICAgYm9vbCBoYXNGbGF0dGVuZWRQ
ZXJzcGVjdGl2ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuICFwcmVzZXJ2ZXMzRCgpICYmIG1f
Y2hpbGRyZW5UcmFuc2Zvcm0uaGFzUGVyc3BlY3RpdmUoKTsgfQorI2VuZGlmCiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIHNldEFwcGxpZXNQYWdlU2NhbGUoYm9vbCBhcHBsaWVzU2NhbGUgPSB0cnVl
KSB7IG1fYXBwbGllc1BhZ2VTY2FsZSA9IGFwcGxpZXNTY2FsZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBhcHBsaWVzUGFnZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBsaWVzUGFnZVNjYWxlOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKaW5kZXggMmFiN2NhMGYzYjI4
NjQ0ZWExMmEwYTdhOGJlMmJhYWNiYTVhZDAwZi4uODI3OThjMzA2OTUwODczYWI0ZWRhNzVlNWEw
NzI1MTcyMGZkNzFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSWNvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaApA
QCAtMjYsNyArMjYsMTEgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisjaW5j
bHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBo
aWNzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VsaWYgUExBVEZPUk0oTUFDKQog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIE9CSkNfQ0xBU1MgTlNJbWFnZTsKICNlbGlmIFBM
QVRGT1JNKFdJTikKQEAgLTUyLDggKzU2LDE2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJY29uPiBjcmVhdGUoSElDT04gaEljb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29u
KGhJY29uKSk7IH0KICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBN
YWtlIHRoaXMgd29yayBmb3Igbm9uLWlPUyBwb3J0cyBhbmQgcmVtb3ZlIHRoZSBQTEFURk9STShJ
T1MpLWd1YXJkLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEljb24+IGNyZWF0ZUljb25Gb3JJbWFn
ZShOYXRpdmVJbWFnZVB0cik7CisjZW5kaWYKKwogcHJpdmF0ZToKLSNpZiBQTEFURk9STShNQUMp
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEljb24oQ0dJbWFnZVJlZik7CisgICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IG1fY2dJbWFnZTsKKyNlbGlmIFBMQVRGT1JNKE1BQykKICAgICBJY29uKE5T
SW1hZ2UqKTsKICAgICBSZXRhaW5QdHI8TlNJbWFnZT4gbV9uc0ltYWdlOwogI2VsaWYgUExBVEZP
Uk0oV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCmluZGV4
IGU1MjgzNDI0NDM4MTg2ZTM2ZGY5YzVhMDllMjI2OGJlNTQwYjY4ZDYuLjBlMzY1MWEzY2ExNDFl
NDU2NGI1NjJhMjczYzc0NzZiOTI4NDIxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZS5jcHAKQEAgLTEzMCwxMSArMTMwLDY2IEBAIHZvaWQgSW1hZ2U6OmRyYXdU
aWxlZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAg
Ly8gV2hlbiB1c2luZyBhY2NlbGVyYXRlZCBkcmF3aW5nIG9uIGlPUywgaXQncyBmYXN0ZXIgdG8g
c3RyZXRjaCBhbiBpbWFnZSB0aGFuIHRvIHRpbGUgaXQuCisgICAgaWYgKGN0eHQtPmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpIHsKKyAgICAgICAgaWYgKHNpemUoKS53aWR0aCgpID09IDEgJiYgaW50
ZXJzZWN0aW9uKG9uZVRpbGVSZWN0LCBkZXN0UmVjdCkuaGVpZ2h0KCkgPT0gZGVzdFJlY3QuaGVp
Z2h0KCkpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlU3JjUmVjdDsKKyAgICAgICAg
ICAgIHZpc2libGVTcmNSZWN0LnNldFgoMCk7CisgICAgICAgICAgICB2aXNpYmxlU3JjUmVjdC5z
ZXRZKChkZXN0UmVjdC55KCkgLSBvbmVUaWxlUmVjdC55KCkpIC8gc2NhbGUuaGVpZ2h0KCkpOwor
ICAgICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0V2lkdGgoMSk7CisgICAgICAgICAgICB2aXNp
YmxlU3JjUmVjdC5zZXRIZWlnaHQoZGVzdFJlY3QuaGVpZ2h0KCkgLyBzY2FsZS5oZWlnaHQoKSk7
CisgICAgICAgICAgICBkcmF3KGN0eHQsIGRlc3RSZWN0LCB2aXNpYmxlU3JjUmVjdCwgc3R5bGVD
b2xvclNwYWNlLCBvcCwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRp
b24oKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNpemUo
KS5oZWlnaHQoKSA9PSAxICYmIGludGVyc2VjdGlvbihvbmVUaWxlUmVjdCwgZGVzdFJlY3QpLndp
ZHRoKCkgPT0gZGVzdFJlY3Qud2lkdGgoKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IHZpc2li
bGVTcmNSZWN0OworICAgICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0WCgoZGVzdFJlY3QueCgp
IC0gb25lVGlsZVJlY3QueCgpKSAvIHNjYWxlLndpZHRoKCkpOworICAgICAgICAgICAgdmlzaWJs
ZVNyY1JlY3Quc2V0WSgwKTsKKyAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFdpZHRoKGRl
c3RSZWN0LndpZHRoKCkgLyBzY2FsZS53aWR0aCgpKTsKKyAgICAgICAgICAgIHZpc2libGVTcmNS
ZWN0LnNldEhlaWdodCgxKTsKKyAgICAgICAgICAgIGRyYXcoY3R4dCwgZGVzdFJlY3QsIHZpc2li
bGVTcmNSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIENHUGF0dGVybiB1c2Vz
IGxvdHMgb2YgbWVtb3J5IGdvdCBjYWNoaW5nIHdoZW4gdGhlIHRpbGUgc2l6ZSBpcyBsYXJnZSAo
PHJkYXI6Ly9wcm9ibGVtLzQ2OTE4NTk+LAorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS82MjM5NTA1
PikuIE1lbW9yeSBjb25zdW1wdGlvbiBkZXBlbmRzIG9uIHRoZSB0cmFuc2Zvcm1lZCB0aWxlIHNp
emUgd2hpY2ggY2FuIGdldAorICAgIC8vIGxhcmdlciB0aGFuIHRoZSBvcmlnaW5hbCB0aWxlIGlm
IHVzZXIgem9vbXMgaW4gZW5vdWdoLgorICAgIGNvbnN0IGZsb2F0IG1heFBhdHRlcm5UaWxlUGl4
ZWxzID0gNTEyICogNTEyOworICAgIEZsb2F0UmVjdCB0cmFuc2Zvcm1lZFRpbGVTaXplID0gY3R4
dC0+Z2V0Q1RNKCkubWFwUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzY2FsZWRUaWxlU2l6
ZSkpOworICAgIGZsb2F0IHRyYW5zZm9ybWVkVGlsZVNpemVQaXhlbHMgPSB0cmFuc2Zvcm1lZFRp
bGVTaXplLndpZHRoKCkgKiB0cmFuc2Zvcm1lZFRpbGVTaXplLmhlaWdodCgpOworICAgIGlmICh0
cmFuc2Zvcm1lZFRpbGVTaXplUGl4ZWxzID4gbWF4UGF0dGVyblRpbGVQaXhlbHMpIHsKKyAgICAg
ICAgZmxvYXQgZnJvbVkgPSAoZGVzdFJlY3QueSgpIC0gb25lVGlsZVJlY3QueSgpKSAvIHNjYWxl
LmhlaWdodCgpOworICAgICAgICBmbG9hdCB0b1kgPSBvbmVUaWxlUmVjdC55KCk7CisgICAgICAg
IHdoaWxlICh0b1kgPCBDR1JlY3RHZXRNYXhZKGRlc3RSZWN0KSkgeworICAgICAgICAgICAgZmxv
YXQgZnJvbVggPSAoZGVzdFJlY3QueCgpIC0gb25lVGlsZVJlY3QueCgpKSAvIHNjYWxlLndpZHRo
KCk7CisgICAgICAgICAgICBmbG9hdCB0b1ggPSBvbmVUaWxlUmVjdC54KCk7CisgICAgICAgICAg
ICB3aGlsZSAodG9YIDwgQ0dSZWN0R2V0TWF4WChkZXN0UmVjdCkpIHsKKyAgICAgICAgICAgICAg
ICBDR1JlY3QgdG9SZWN0ID0gQ0dSZWN0SW50ZXJzZWN0aW9uKGRlc3RSZWN0LCBDR1JlY3RNYWtl
KHRvWCwgdG9ZLCBvbmVUaWxlUmVjdC53aWR0aCgpLCBvbmVUaWxlUmVjdC5oZWlnaHQoKSkpOwor
ICAgICAgICAgICAgICAgIENHUmVjdCBmcm9tUmVjdCA9IENHUmVjdE1ha2UoZnJvbVgsIGZyb21Z
LCB0b1JlY3Quc2l6ZS53aWR0aCAvIHNjYWxlLndpZHRoKCksIHRvUmVjdC5zaXplLmhlaWdodCAv
IHNjYWxlLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBkcmF3KGN0eHQsIHRvUmVjdCwgZnJv
bVJlY3QsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRh
dGlvbkRlc2NyaXB0aW9uKCkpOworICAgICAgICAgICAgICAgIHRvWCArPSBvbmVUaWxlUmVjdC53
aWR0aCgpOworICAgICAgICAgICAgICAgIGZyb21YID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRvWSArPSBvbmVUaWxlUmVjdC5oZWlnaHQoKTsKKyAgICAgICAgICAgIGZyb21ZID0g
MDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmICAgIAorCiAgICAg
QWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oKS5zY2Fs
ZU5vblVuaWZvcm0oc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogICAgIEZsb2F0UmVj
dCB0aWxlUmVjdChGbG9hdFBvaW50KCksIGludHJpbnNpY1RpbGVTaXplKTsKICAgICBkcmF3UGF0
dGVybihjdHh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgb25lVGlsZVJlY3QubG9jYXRp
b24oKSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgc3RhcnRBbmltYXRpb24oZmFsc2UpOworI2Vsc2UKICAgICBzdGFy
dEFuaW1hdGlvbigpOworI2VuZGlmCiB9CiAKIC8vIEZJWE1FOiBNZXJnZSB3aXRoIHRoZSBvdGhl
ciBkcmF3VGlsZWQgZXZlbnR1YWxseSwgc2luY2Ugd2UgbmVlZCBhIGNvbWJpbmF0aW9uIG9mIGJv
dGggZm9yIHNvbWUgdGhpbmdzLgpAQCAtMTY4LDcgKzIyMywxMSBAQCB2b2lkIEltYWdlOjpkcmF3
VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsbwogICAgIAogICAgIGRyYXdQYXR0ZXJuKGN0eHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBhdHRlcm5QaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZHN0UmVjdCk7CiAKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgc3RhcnRBbmltYXRpb24oZmFsc2UpOworI2Vsc2UKICAgICBz
dGFydEFuaW1hdGlvbigpOworI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9E
T1dOX1NBTVBMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgKaW5kZXggM2M2MzI3ZmI3YWE2ZDFlNGRhYzQ0YTBmODc3NDU4YmZhMTM1YjNmNi4u
YWI3MTkwZTk5ZTc0YWM5NWQzYmRmZDFkYmM3ZjUxN2I5MWVkOGZiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0xMzUsNiArMTM1LDEx
IEBAIHB1YmxpYzoKICAgICBJbnRTaXplIHNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9u
ID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0OwogICAgIEludFNpemUgZnJh
bWVTaXplQXRJbmRleChzaXplX3QsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiA9IEltYWdl
T3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBJbnRTaXplIG9yaWdpbmFsU2l6ZShSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBEb05v
dFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsKKyAgICBib29sIGlzU3Vic2FtcGxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fYmFzZVN1YnNhbXBsaW5nOyB9CisjZW5kaWYKKwogICAgIGJvb2wg
Z2V0SG90U3BvdChJbnRQb2ludCYpIGNvbnN0OwogCiAgICAgc2l6ZV90IGJ5dGVzRGVjb2RlZFRv
RGV0ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFBvaW50LmgKaW5kZXggMTY5MjAzN2Q3NTM3NDllMmMyN2Q5MGRlNThiMTMwYjdk
NjMxNWM2NS4uZmUzM2Y0YzNmOGI4ZjFlMGU3YTIyMjYxNjhkZGJkM2Q5NDYzYTA2OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCkBAIC0zNCw2ICszNCw3
IEBAIHR5cGVkZWYgc3RydWN0IENHUG9pbnQgQ0dQb2ludDsKICNlbmRpZgogCiAKKyNpZiAhUExB
VEZPUk0oSU9TKQogI2lmIE9TKERBUldJTikKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVf
QVNfQ0dHRU9NRVRSWV9UWVBFUwogdHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50OwpAQCAt
NDEsNiArNDIsNyBAQCB0eXBlZGVmIHN0cnVjdCBDR1BvaW50IE5TUG9pbnQ7CiB0eXBlZGVmIHN0
cnVjdCBfTlNQb2ludCBOU1BvaW50OwogI2VuZGlmCiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZP
Uk0oSU9TKQogCiAjaWYgUExBVEZPUk0oV0lOKQogdHlwZWRlZiBzdHJ1Y3QgdGFnUE9JTlQgUE9J
TlQ7CkBAIC0xMTEsMTAgKzExMywxMiBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dQb2ludCgp
IGNvbnN0OwogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmIE9TKERBUldJTikgJiYg
IWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpCiAgICAg
ZXhwbGljaXQgSW50UG9pbnQoY29uc3QgTlNQb2ludCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxp
Y2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgIG9wZXJhdG9yIE5TUG9pbnQoKSBjb25zdDsKICNl
bmRpZgorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKICNpZiBQTEFURk9STShXSU4pCiAgICAg
SW50UG9pbnQoY29uc3QgUE9JTlQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuaAppbmRleCA1NjlhOTA4MTQ0NDk1OTE0ZDJkOWRmNGNkYTE1ZjkxMGVkNzNjNzlh
Li42MjIwNTI5MDdiMzQ5NzQxMzdjNTE1MzljZjQ3NzQyNWFhNzM1ZWJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCkBAIC0zMyw3ICszMyw3IEBACiB0eXBl
ZGVmIHN0cnVjdCBDR1JlY3QgQ0dSZWN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisj
aWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQ
RVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0
OwogI2Vsc2UKQEAgLTQxLDYgKzQxLDEyIEBAIHR5cGVkZWYgc3RydWN0IF9OU1JlY3QgTlNSZWN0
OwogI2VuZGlmCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpZm5kZWYgTlNSZWN0Cisj
ZGVmaW5lIE5TUmVjdCBDR1JlY3QKKyNlbmRpZgorI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4p
CiB0eXBlZGVmIHN0cnVjdCB0YWdSRUNUIFJFQ1Q7CiAjZWxpZiBQTEFURk9STShHVEspCkBAIC0x
OTIsOSArMTk4LDExIEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBDR1JlY3QoKSBjb25zdDsKICNl
bmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKICNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykpCiAgICAgb3BlcmF0
b3IgTlNSZWN0KCkgY29uc3Q7CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAj
aWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBJbnRSZWN0KGNvbnN0IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpJbnRSZWN0Jik7CkBAIC0yNTIsOSArMjYwLDExIEBAIGlubGluZSBib29sIEludFJl
Y3Q6OmlzSW5maW5pdGUoKSBjb25zdAogSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IENH
UmVjdCYpOwogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmIChQTEFURk9STShNQUMp
ICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKSkK
IEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBOU1JlY3QmKTsKICNlbmRpZgorI2VuZGlm
IC8vICFQTEFURk9STShJT1MpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCmluZGV4IGRiN2RiYTdlZGI1ODQxNzg3
YjVmNTg2MjQzYzFjZTEyM2Q3YjMzMzkuLjljN2U0ZGU4NzhjNGM4NzE2ZmViZWU5NzhhMjQxZWNj
YjYxZGEyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFNpemUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgK
QEAgLTMyLDcgKzMyLDcgQEAKIHR5cGVkZWYgc3RydWN0IENHU2l6ZSBDR1NpemU7CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1Mp
CiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5cGVk
ZWYgc3RydWN0IENHU2l6ZSBOU1NpemU7CiAjZWxzZQpAQCAtNDAsNiArNDAsMTIgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX05TU2l6ZSBOU1NpemU7CiAjZW5kaWYKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
SU9TKQorI2lmbmRlZiBOU1NpemUKKyNkZWZpbmUgTlNTaXplIENHU2l6ZQorI2VuZGlmCisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKFdJTikKIHR5cGVkZWYgc3RydWN0IHRhZ1NJWkUgU0laRTsKICNl
bGlmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCkBAIC0xMzAsMTAgKzEzNiwxMiBAQCBwdWJsaWM6CiAg
ICAgb3BlcmF0b3IgQ0dTaXplKCkgY29uc3Q7CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1Mp
ICAgIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1F
X0FTX0NHR0VPTUVUUllfVFlQRVMpCiAgICAgZXhwbGljaXQgSW50U2l6ZShjb25zdCBOU1NpemUg
Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgb3Bl
cmF0b3IgTlNTaXplKCkgY29uc3Q7CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQog
CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEludFNpemUoY29uc3QgU0laRSYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDA1NzA5
YTFiZmIyY2MzNGFhYjA2NTgwZjUzZTZiMGQ1N2Q0NTJhYTUuLjZlNDhhYmQ3ZDEzZThhNTA5MWZh
ZTY4OGZmYzY2N2MxZWU1MjU1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTU0LDcgKzU0LDEyIEBACiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TLmgiCisjZGVmaW5lIFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWUgTWVkaWFQ
bGF5ZXJQcml2YXRlSU9TCisjZWxzZQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
LmgiCisjZW5kaWYKICNpZiBVU0UoQVZGT1VOREFUSU9OKQogI2luY2x1ZGUgIk1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCIKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQpAQCAt
MjEyLDcgKzIxNyw3IEBAIHN0YXRpYyBWZWN0b3I8TWVkaWFQbGF5ZXJGYWN0b3J5Kj4mIGluc3Rh
bGxlZE1lZGlhRW5naW5lcyhSZXF1ZXJ5RW5naW5lT3B0aW9ucyByCiAKICNpZiBVU0UoQVZGT1VO
REFUSU9OKQogICAgICAgICBpZiAoU2V0dGluZ3M6OmlzQVZGb3VuZGF0aW9uRW5hYmxlZCgpKSB7
Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQog
ICAgICAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cmVnaXN0ZXJN
ZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKICAg
ICAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cmVnaXN0ZXJN
ZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CkBAIC0yMjMsMTAgKzIyOCwxMiBAQCBzdGF0aWMg
VmVjdG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+JiBpbnN0YWxsZWRNZWRpYUVuZ2luZXMoUmVxdWVy
eUVuZ2luZU9wdGlvbnMgcgogICAgICAgICB9CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1Mp
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBpZiAoU2V0dGluZ3M6OmlzUVRLaXRFbmFibGVk
KCkpCiAgICAgICAgICAgICBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cmVnaXN0ZXJNZWRpYUVu
Z2luZShhZGRNZWRpYUVuZ2luZSk7CiAjZW5kaWYKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChQbGF0
Zm9ybU1lZGlhRW5naW5lQ2xhc3NOYW1lKQogICAgICAgICBQbGF0Zm9ybU1lZGlhRW5naW5lQ2xh
c3NOYW1lOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKQEAgLTgzNyw2ICs4
NDQsNTAgQEAgdm9pZCBNZWRpYVBsYXllcjo6ZXhpdEZ1bGxzY3JlZW4oKQogfQogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCitib29sIE1lZGlhUGxheWVyOjppc0N1cnJlbnRQbGF5
YmFja1RhcmdldFdpcmVsZXNzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0N1
cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXI6OnNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcigpCit7CisgICAgbV9wcml2YXRlLT5zaG93UGxheWJhY2tU
YXJnZXRQaWNrZXIoKTsKK30KKworYm9vbCBNZWRpYVBsYXllcjo6aGFzV2lyZWxlc3NQbGF5YmFj
a1RhcmdldHMoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmhhc1dpcmVsZXNzUGxh
eWJhY2tUYXJnZXRzKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXI6OndpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT53aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyOjpzZXRXaXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZChib29sIGRpc2FibGVkKQoreworICAgIG1fcHJpdmF0ZS0+
c2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoZGlzYWJsZWQpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyOjpzZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhib29s
IGhhc0xpc3RlbmVycykKK3sKKyAgICBtX3ByaXZhdGUtPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5TGlzdGVuZXJzKGhhc0xpc3RlbmVycyk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXI6
OmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9t
ZWRpYVBsYXllckNsaWVudCkKKyAgICAgICAgbV9tZWRpYVBsYXllckNsaWVudC0+bWVkaWFQbGF5
ZXJDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCh0aGlzKTsKK30KKwordm9p
ZCBNZWRpYVBsYXllcjo6cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkKCkKK3sKKyAg
ICBpZiAobV9tZWRpYVBsYXllckNsaWVudCkKKyAgICAgICAgbV9tZWRpYVBsYXllckNsaWVudC0+
bWVkaWFQbGF5ZXJQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWQodGhpcyk7Cit9Cisj
ZW5kaWYKKwogI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKIGJvb2wgTWVkaWFQbGF5
ZXI6OmNhbkVudGVyRnVsbHNjcmVlbigpIGNvbnN0CiB7CkBAIC05NTYsNiArMTAwNywxOCBAQCB2
b2lkIE1lZGlhUGxheWVyOjpzZXRQcml2YXRlQnJvd3NpbmdNb2RlKGJvb2wgcHJpdmF0ZUJyb3dz
aW5nTW9kZSkKICAgICBtX3ByaXZhdGUtPnNldFByaXZhdGVCcm93c2luZ01vZGUobV9wcml2YXRl
QnJvd3NpbmcpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBNZWRpYVBsYXllcjo6YXR0
cmlidXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIAor
eworICAgIG1fcHJpdmF0ZS0+YXR0cmlidXRlQ2hhbmdlZChuYW1lLCB2YWx1ZSk7Cit9CisKK2Jv
b2wgTWVkaWFQbGF5ZXI6OnJlYWR5Rm9yUGxheWJhY2soKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPnJlYWR5Rm9yUGxheWJhY2soKTsKK30KKyNlbmRpZgorCiAvLyBDbGllbnQgY2Fs
bGJhY2tzLgogdm9pZCBNZWRpYVBsYXllcjo6bmV0d29ya1N0YXRlQ2hhbmdlZCgpCiB7CkBAIC05
ODEsNyArMTA0NCwxMiBAQCB2b2lkIE1lZGlhUGxheWVyOjpyZWFkeVN0YXRlQ2hhbmdlZCgpCiAK
IHZvaWQgTWVkaWFQbGF5ZXI6OnZvbHVtZUNoYW5nZWQoZG91YmxlIG5ld1ZvbHVtZSkKIHsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKG5ld1ZvbHVtZSk7CisgICAgbV92b2x1
bWUgPSBtX3ByaXZhdGUtPnZvbHVtZSgpOworI2Vsc2UKICAgICBtX3ZvbHVtZSA9IG5ld1ZvbHVt
ZTsKKyNlbmRpZgogICAgIGlmIChtX21lZGlhUGxheWVyQ2xpZW50KQogICAgICAgICBtX21lZGlh
UGxheWVyQ2xpZW50LT5tZWRpYVBsYXllclZvbHVtZUNoYW5nZWQodGhpcyk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCAxMjZkNWY2
N2RjZGU4OWQ3MTU1YzI5YTU1ODYwZTYwYWM3YzAzNGM4Li4yMjdlOWU3ZDliNmRhNDA3OTgzNDFh
NGU4NDdiYjVlYjQyNjdiZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyLmgKQEAgLTIyNCw2ICsyMjQsMTEgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBtZWRpYVBsYXllcktleU5lZWRlZChNZWRpYVBsYXllciosIFVpbnQ4QXJyYXkqKSB7
IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAgICAgCisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQor
ICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllckN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxl
c3NDaGFuZ2VkKE1lZGlhUGxheWVyKikgeyB9OworICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXll
clBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZChNZWRpYVBsYXllciopIHsgfTsKKyNl
bmRpZgorCiAgICAgdmlydHVhbCBTdHJpbmcgbWVkaWFQbGF5ZXJSZWZlcnJlcigpIGNvbnN0IHsg
cmV0dXJuIFN0cmluZygpOyB9CiAgICAgdmlydHVhbCBTdHJpbmcgbWVkaWFQbGF5ZXJVc2VyQWdl
bnQoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgQ09SU01vZGUgbWVk
aWFQbGF5ZXJDT1JTTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFVuc3BlY2lmaWVkOyB9CkBAIC00MzMs
NiArNDM4LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShJT1NfQUlSUExBWSkKKyAgICBib29sIGlzQ3VycmVudFBsYXliYWNrVGFy
Z2V0V2lyZWxlc3MoKSBjb25zdDsKKyAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcigp
OworCisgICAgYm9vbCBoYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cygpIGNvbnN0OworCisgICAg
Ym9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0
V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoYm9vbCk7CisKKyAgICB2b2lkIGN1cnJlbnRQ
bGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkKCk7CisgICAgdm9pZCBwbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUNoYW5nZWQoKTsKKworICAgIHZvaWQgc2V0SGFzUGxheWJhY2tUYXJnZXRB
dmFpbGFiaWxpdHlMaXN0ZW5lcnMoYm9vbCk7CisjZW5kaWYKKwogI2lmIFVTRShOQVRJVkVfRlVM
TFNDUkVFTl9WSURFTykKICAgICBib29sIGNhbkVudGVyRnVsbHNjcmVlbigpIGNvbnN0OwogI2Vu
ZGlmCkBAIC00ODYsNiArNTA2LDExIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBlbmdpbmVEZXNj
cmlwdGlvbigpIGNvbnN0OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgYXR0cmlidXRl
Q2hhbmdlZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIGJv
b2wgcmVhZHlGb3JQbGF5YmFjaygpIGNvbnN0OworI2VuZGlmCisKICAgICBDYWNoZWRSZXNvdXJj
ZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFD
SykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXJQcml2YXRlLmgKaW5kZXggY2Y3YjVmMjg4NWY1MTVmMjYzNDMwM2JlNjNhZTc1NWQyYjg0MzRk
OC4uZmJhZmQ3MGNkOWVmMzRhMDc4MDRhMjVhNzkyOTNiODc4MjM5YjM1MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgK
QEAgLTk3LDYgKzk3LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZShm
bG9hdCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZURvdWJsZShkb3VibGUgdm9sdW1l
KSB7IHJldHVybiBzZXRWb2x1bWUodm9sdW1lKTsgfQorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2
aXJ0dWFsIGZsb2F0IHZvbHVtZSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyNlbmRpZgogCiAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzTXV0aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoYm9vbCkgeyB9CkBAIC0xNDEsNiArMTQ0LDE4IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKSB7IH0KICNlbmRpZgogCisj
aWYgRU5BQkxFKElPU19BSVJQTEFZKQorICAgIHZpcnR1YWwgYm9vbCBpc0N1cnJlbnRQbGF5YmFj
a1RhcmdldFdpcmVsZXNzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
V2lyZWxlc3NQbGF5YmFja1RhcmdldHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
dmlydHVhbCBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWQoYm9vbCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SGFzUGxheWJhY2tUYXJnZXRB
dmFpbGFiaWxpdHlMaXN0ZW5lcnMoYm9vbCkgeyB9CisjZW5kaWYKKwogI2lmIFVTRShOQVRJVkVf
RlVMTFNDUkVFTl9WSURFTykKICAgICB2aXJ0dWFsIGJvb2wgY2FuRW50ZXJGdWxsc2NyZWVuKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtMjA5LDcgKzIyNCwxMiBAQCBwdWJs
aWM6CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICB2aXJ0dWFsIHZvaWQgc2ltdWxhdGVBdWRpb0lu
dGVycnVwdGlvbigpIHsgfQogI2VuZGlmCi0gICAgCisKKyNpZiBQTEFURk9STShJT1MpCisgICAg
dmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JikgeyB9CisgICAgdmlydHVhbCBib29sIHJlYWR5Rm9yUGxheWJhY2soKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgU3RyaW5nIGxhbmd1YWdlT2ZQcmltYXJ5
QXVkaW9UcmFjaygpIGNvbnN0IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KIAogICAgIHZpcnR1
YWwgc2l6ZV90IGV4dHJhTWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAppbmRl
eCAzMjM1YjQwZWY1MmQxNzJmNmE2YzY3YjZiYTYyYTUzMTEwOWQwYTE5Li5iMDYyN2FkMjQ0NzI3
M2E4YjUzMDM5MmI1MjlkMWE5MmYzNzJkODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCkBAIC04MCw2ICs4MCw5IEBAIFNp
bXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8QWRkaXRpb25hbEZv
bnREYXRhPiBmb250RGF0YSwgZmxvCiAgICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQogI2VuZGlmCiAg
ICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAs
IG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbHNlKQorI2VuZGlmCiB7CiAgICAgbV9mb250
RGF0YS0+aW5pdGlhbGl6ZUZvbnREYXRhKHRoaXMsIGZvbnRTaXplKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCmluZGV4IDQ1YTBm
NTVmYTA5NTJlOWZhMTcxZDgwMjdjZjJhNTg5ZjI0NDkyYWQuLjljZDMxNmYyNjY3NDUyYzdkZjZh
OGM2MWE1YzE1ZTg3MmEzZDRhNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaApAQCAtMTgwLDExICsxODAsMTUgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgT1ZFUlJJREU7CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBVU0UoQVBQS0lUKQogICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBnZXRDb21wb3NpdGVGb250UmVmZXJlbmNlRm9udERhdGEoTlNGb250ICprZXkpIGNv
bnN0OwogICAgIE5TRm9udCogZ2V0TlNGb250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURh
dGEuZm9udCgpOyB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBDVEZvbnRSZWYg
Z2V0Q1RGb250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9CisgICAg
Ym9vbCBzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE5v
dEJlVXNlZEZvckFyYWJpYzsgfTsKKyNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBDRkRp
Y3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZv
bnRPcmllbnRhdGlvbikgY29uc3Q7CiAjZW5kaWYKQEAgLTE5Nyw3ICsyMDEsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBpZiAoaXNTVkdGb250KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID4gMTA4MAorI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCiAgICAgICAgIHdrQ1RGb250VHJhbnNmb3Jt
T3B0aW9ucyBvcHRpb25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBLZXJuaW5nID8gd2tDVEZv
bnRUcmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIDogMCkgfCAodHlwZXNldHRpbmdGZWF0dXJlcyAm
IExpZ2F0dXJlcyA/IHdrQ1RGb250VHJhbnNmb3JtQXBwbHlTaGFwaW5nIDogMCk7CiAgICAgICAg
IHJldHVybiB3a0NURm9udFRyYW5zZm9ybUdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwg
Z2x5cGhzLCByZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGFkdmFuY2VzKSwgZ2x5cGhDb3VudCwg
b3B0aW9ucyk7CiAjZWxzZQpAQCAtMzE1LDYgKzMxOSw5IEBAIHByaXZhdGU6CiAgICAgbXV0YWJs
ZSBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CiAjZW5kaWYK
ICNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIG1fc2hvdWxkTm90QmVVc2VkRm9y
QXJhYmljOworI2VuZGlmCiB9OwogCiBBTFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBTaW1wbGVGb250
RGF0YTo6Ym91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcAppbmRleCBhNzJh
ZTRiN2E1YjkzNTRkNTZjZmFiZWM4NTk5YzA3MWE0YjI5ODFkLi5hNDY3MzlhM2FlMTBmMDFiMjk2
MTA4NWRlZjRjMTJjOGNiOTg0NzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjZGVmaW5lIFNUUklOR19CVUZGRVJfU0laRSAyMDQ4CiAKLXR5cGVk
ZWYgdW5zaWduZWQgVHJ1bmNhdGlvbkZ1bmN0aW9uKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQga2VlcENvdW50LCBVQ2hhciogYnVmZmVyKTsKK3R5cGVkZWYgdW5zaWdu
ZWQgVHJ1bmNhdGlvbkZ1bmN0aW9uKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxlbmd0aCwgdW5z
aWduZWQga2VlcENvdW50LCBVQ2hhciogYnVmZmVyLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lz
KTsKIAogc3RhdGljIGlubGluZSBpbnQgdGV4dEJyZWFrQXRPclByZWNlZGluZyhUZXh0QnJlYWtJ
dGVyYXRvciogaXQsIGludCBvZmZzZXQpCiB7CkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBpbmxp
bmUgaW50IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGl0LCBp
bnQgb2Zmc2V0LCBpCiAgICAgcmV0dXJuIHJlc3VsdCA9PSBUZXh0QnJlYWtEb25lID8gbGVuZ3Ro
IDogcmVzdWx0OwogfQogCi1zdGF0aWMgdW5zaWduZWQgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlcihj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQs
IFVDaGFyKiBidWZmZXIpCitzdGF0aWMgdW5zaWduZWQgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlcihj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQs
IFVDaGFyKiBidWZmZXIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMpCiB7CiAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oa2VlcENvdW50IDwgbGVuZ3RoKTsKICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihrZWVwQ291bnQgPCBTVFJJTkdfQlVGRkVSX1NJ
WkUpOwpAQCAtNjYsMzIgKzY2LDEyNSBAQCBzdGF0aWMgdW5zaWduZWQgY2VudGVyVHJ1bmNhdGVU
b0J1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bgogICAgIE5v
blNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoc3RyaW5nLmNoYXJhY3RlcnMoKSwgbGVu
Z3RoKTsKICAgICB1bnNpZ25lZCBvbWl0RW5kID0gYm91bmRlZFRleHRCcmVha0ZvbGxvd2luZyhp
dCwgb21pdFN0YXJ0ICsgKGxlbmd0aCAtIGtlZXBDb3VudCkgLSAxLCBsZW5ndGgpOwogICAgIG9t
aXRTdGFydCA9IHRleHRCcmVha0F0T3JQcmVjZWRpbmcoaXQsIG9taXRTdGFydCk7Ci0gICAgCi0g
ICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoID0gb21pdFN0YXJ0ICsgMSArIChsZW5ndGggLSBv
bWl0RW5kKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGd1
YXJkIHRoaXMgY29kZSBiZWhpbmQgYW4gZWRpdGluZyBiZWhhdmlvci4gVGhlbiB3ZSBjYW4gcmVt
b3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgorCisgICAgLy8gU3RyaXAgc2luZ2xlIGNoYXJh
Y3RlciBiZWZvcmUgZWxsaXBzaXMgY2hhcmFjdGVyLCB3aGVuIHRoYXQgY2hhcmFjdGVyIGlzIHBy
ZWNlZGVkIGJ5IGEgc3BhY2UKKyAgICBpZiAob21pdFN0YXJ0ID4gMSAmJiBzdHJpbmdbb21pdFN0
YXJ0IC0gMV0gIT0gc3BhY2UgJiYgb21pdFN0YXJ0ID4gMiAmJiBzdHJpbmdbb21pdFN0YXJ0IC0g
Ml0gPT0gc3BhY2UpCisgICAgICAgIC0tb21pdFN0YXJ0OworCisgICAgLy8gU3RyaXAgd2hpdGVz
cGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlbGxpcHNpcyBjaGFyYWN0ZXIKKyAgICB3aGlsZSAo
b21pdFN0YXJ0ID4gMSAmJiBzdHJpbmdbb21pdFN0YXJ0IC0gMV0gPT0gc3BhY2UpCisgICAgICAg
IC0tb21pdFN0YXJ0OworCisgICAgLy8gU3RyaXAgc2luZ2xlIGNoYXJhY3RlciBhZnRlciBlbGxp
cHNpcyBjaGFyYWN0ZXIsIHdoZW4gdGhhdCBjaGFyYWN0ZXIgaXMgZm9sbG93ZWQgYnkgYSBzcGFj
ZQorICAgIGlmICgobGVuZ3RoIC0gb21pdEVuZCkgPiAxICYmIHN0cmluZ1tvbWl0RW5kXSAhPSBz
cGFjZSAmJiAobGVuZ3RoIC0gb21pdEVuZCkgPiAyICYmIHN0cmluZ1tvbWl0RW5kICsgMV0gPT0g
c3BhY2UpCisgICAgICAgICsrb21pdEVuZDsKKworICAgIHdoaWxlICgobGVuZ3RoIC0gb21pdEVu
ZCkgPiAxICYmIHN0cmluZ1tvbWl0RW5kXSA9PSBzcGFjZSkKKyAgICAgICAgKytvbWl0RW5kOwor
I2VuZGlmCisKKyAgICB1bnNpZ25lZCB0cnVuY2F0ZWRMZW5ndGggPSBzaG91bGRJbnNlcnRFbGxp
cHNpcyA/IG9taXRTdGFydCArIDEgKyAobGVuZ3RoIC0gb21pdEVuZCkgOiBsZW5ndGggLSAob21p
dEVuZCAtIG9taXRTdGFydCk7CiAgICAgQVNTRVJUKHRydW5jYXRlZExlbmd0aCA8PSBsZW5ndGgp
OwogCiAgICAgbWVtY3B5KGJ1ZmZlciwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc2l6ZW9mKFVDaGFy
KSAqIG9taXRTdGFydCk7Ci0gICAgYnVmZmVyW29taXRTdGFydF0gPSBob3Jpem9udGFsRWxsaXBz
aXM7Ci0gICAgbWVtY3B5KCZidWZmZXJbb21pdFN0YXJ0ICsgMV0sICZzdHJpbmcuY2hhcmFjdGVy
cygpW29taXRFbmRdLCBzaXplb2YoVUNoYXIpICogKGxlbmd0aCAtIG9taXRFbmQpKTsKLSAgICAK
KyAgICBpZiAoc2hvdWxkSW5zZXJ0RWxsaXBzaXMpIHsKKyAgICAgICAgYnVmZmVyW29taXRTdGFy
dF0gPSBob3Jpem9udGFsRWxsaXBzaXM7CisgICAgICAgIG1lbWNweSgmYnVmZmVyW29taXRTdGFy
dCArIDFdLCAmc3RyaW5nLmNoYXJhY3RlcnMoKVtvbWl0RW5kXSwgc2l6ZW9mKFVDaGFyKSAqIChs
ZW5ndGggLSBvbWl0RW5kKSk7ICAgIAorICAgIH0gZWxzZQorICAgICAgICBtZW1jcHkoJmJ1ZmZl
cltvbWl0U3RhcnRdLCAmc3RyaW5nLmNoYXJhY3RlcnMoKVtvbWl0RW5kXSwgc2l6ZW9mKFVDaGFy
KSAqIChsZW5ndGggLSBvbWl0RW5kKSk7CiAgICAgcmV0dXJuIHRydW5jYXRlZExlbmd0aDsKIH0K
IAotc3RhdGljIHVuc2lnbmVkIHJpZ2h0VHJ1bmNhdGVUb0J1ZmZlcihjb25zdCBTdHJpbmcmIHN0
cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQsIFVDaGFyKiBidWZmZXIp
CitzdGF0aWMgdW5zaWduZWQgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGtlZXBDb3VudCwgVUNoYXIqIGJ1ZmZlciwg
Ym9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcykKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihrZWVwQ291bnQgPCBsZW5ndGgpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGtlZXBDb3VudCA8IFNUUklOR19CVUZGRVJfU0laRSk7Ci0gICAgCisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBndWFyZCB0aGlzIGNvZGUg
YmVoaW5kIGFuIGVkaXRpbmcgYmVoYXZpb3IuIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZP
Uk0oSU9TKS1ndWFyZC4KKworICAgIC8vIFN0cmlwIHNpbmdsZSBjaGFyYWN0ZXIgYmVmb3JlIGVs
bGlwc2lzIGNoYXJhY3Rlciwgd2hlbiB0aGF0IGNoYXJhY3RlciBpcyBwcmVjZWRlZCBieSBhIHNw
YWNlCisgICAgaWYgKGtlZXBDb3VudCA+IDEgJiYgc3RyaW5nW2tlZXBDb3VudCAtIDFdICE9IHNw
YWNlICYmIGtlZXBDb3VudCA+IDIgJiYgc3RyaW5nW2tlZXBDb3VudCAtIDJdID09IHNwYWNlKQor
ICAgICAgICAtLWtlZXBDb3VudDsKKworICAgIC8vIFN0cmlwIHdoaXRlc3BhY2UgYmVmb3JlIHRo
ZSBlbGxpcHNpcyBjaGFyYWN0ZXIKKyAgICB3aGlsZSAoa2VlcENvdW50ID4gMSAmJiBzdHJpbmdb
a2VlcENvdW50IC0gMV0gPT0gc3BhY2UpCisgICAgICAgIC0ta2VlcENvdW50OworI2VuZGlmCisK
ICAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmluZy5jaGFyYWN0ZXJz
KCksIGxlbmd0aCk7CiAgICAgdW5zaWduZWQga2VlcExlbmd0aCA9IHRleHRCcmVha0F0T3JQcmVj
ZWRpbmcoaXQsIGtlZXBDb3VudCk7Ci0gICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoID0ga2Vl
cExlbmd0aCArIDE7Ci0gICAgCisgICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoID0gc2hvdWxk
SW5zZXJ0RWxsaXBzaXMgPyBrZWVwTGVuZ3RoICsgMSA6IGtlZXBMZW5ndGg7CisKICAgICBtZW1j
cHkoYnVmZmVyLCBzdHJpbmcuY2hhcmFjdGVycygpLCBzaXplb2YoVUNoYXIpICoga2VlcExlbmd0
aCk7Ci0gICAgYnVmZmVyW2tlZXBMZW5ndGhdID0gaG9yaXpvbnRhbEVsbGlwc2lzOwotICAgIAor
ICAgIGlmIChzaG91bGRJbnNlcnRFbGxpcHNpcykKKyAgICAgICAgYnVmZmVyW2tlZXBMZW5ndGhd
ID0gaG9yaXpvbnRhbEVsbGlwc2lzOworCiAgICAgcmV0dXJuIHRydW5jYXRlZExlbmd0aDsKIH0K
IAorc3RhdGljIHVuc2lnbmVkIHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyQnVmZmVyKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGtlZXBDb3VudCwgVUNoYXIqIGJ1
ZmZlciwgYm9vbCkKK3sKKyAgICBBU1NFUlQoa2VlcENvdW50IDwgbGVuZ3RoKTsKKyAgICBBU1NF
UlQoa2VlcENvdW50IDwgU1RSSU5HX0JVRkZFUl9TSVpFKTsKKworICAgIE5vblNoYXJlZENoYXJh
Y3RlckJyZWFrSXRlcmF0b3IgaXQoc3RyaW5nLmNoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICB1
bnNpZ25lZCBrZWVwTGVuZ3RoID0gdGV4dEJyZWFrQXRPclByZWNlZGluZyhpdCwga2VlcENvdW50
KTsKKyAgICBtZW1jcHkoYnVmZmVyLCBzdHJpbmcuY2hhcmFjdGVycygpLCBzaXplb2YoVUNoYXIp
ICoga2VlcExlbmd0aCk7CisKKyAgICByZXR1cm4ga2VlcExlbmd0aDsKK30KKworc3RhdGljIHVu
c2lnbmVkIHJpZ2h0Q2xpcFRvV29yZEJ1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQsIFVDaGFyKiBidWZmZXIsIGJvb2wpCit7Cisg
ICAgQVNTRVJUKGtlZXBDb3VudCA8IGxlbmd0aCk7CisgICAgQVNTRVJUKGtlZXBDb3VudCA8IFNU
UklOR19CVUZGRVJfU0laRSk7CisKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJl
YWtJdGVyYXRvcihzdHJpbmcuY2hhcmFjdGVycygpLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGtl
ZXBMZW5ndGggPSB0ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKGl0LCBrZWVwQ291bnQpOworICAgIG1l
bWNweShidWZmZXIsIHN0cmluZy5jaGFyYWN0ZXJzKCksIHNpemVvZihVQ2hhcikgKiBrZWVwTGVu
Z3RoKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGd1YXJk
IHRoaXMgY29kZSBiZWhpbmQgYW4gZWRpdGluZyBiZWhhdmlvci4gVGhlbiB3ZSBjYW4gcmVtb3Zl
IHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgorICAgIC8vIE1vdGl2YXRlZCBieSA8cmRhcjovL3By
b2JsZW0vNzQzOTMyNz4gdHJ1bmNhdGlvbiBzaG91bGQgbm90IGluY2x1ZGUgYSB0cmFpbGluZyBz
cGFjZQorICAgIHdoaWxlICgoa2VlcExlbmd0aCA+IDApICYmIChzdHJpbmdba2VlcExlbmd0aCAt
IDFdID09IHNwYWNlKSkKKyAgICAgICAgLS1rZWVwTGVuZ3RoOworI2VuZGlmCisgICAgcmV0dXJu
IGtlZXBMZW5ndGg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsZWZ0VHJ1bmNhdGVUb0J1ZmZlcihj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQs
IFVDaGFyKiBidWZmZXIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMpCit7CisgICAgQVNTRVJU
KGtlZXBDb3VudCA8IGxlbmd0aCk7CisgICAgQVNTRVJUKGtlZXBDb3VudCA8IFNUUklOR19CVUZG
RVJfU0laRSk7CisKKyAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gbGVuZ3RoIC0ga2VlcENvdW50
OworCisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChzdHJpbmcuY2hhcmFj
dGVycygpLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGFkanVzdGVkU3RhcnRJbmRleCA9IHN0YXJ0
SW5kZXg7CisgICAgc3RhcnRJbmRleCA9IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHN0
YXJ0SW5kZXgsIGxlbmd0aCAtIHN0YXJ0SW5kZXgpOworCisgICAgLy8gU3RyaXAgc2luZ2xlIGNo
YXJhY3RlciBhZnRlciBlbGxpcHNpcyBjaGFyYWN0ZXIsIHdoZW4gdGhhdCBjaGFyYWN0ZXIgaXMg
cHJlY2VkZWQgYnkgYSBzcGFjZQorICAgIGlmIChhZGp1c3RlZFN0YXJ0SW5kZXggPCBsZW5ndGgg
JiYgc3RyaW5nW2FkanVzdGVkU3RhcnRJbmRleF0gIT0gc3BhY2UKKyAgICAgICAgJiYgYWRqdXN0
ZWRTdGFydEluZGV4IDwgbGVuZ3RoIC0gMSAmJiBzdHJpbmdbYWRqdXN0ZWRTdGFydEluZGV4ICsg
MV0gPT0gc3BhY2UpCisgICAgICAgICsrYWRqdXN0ZWRTdGFydEluZGV4OworCisgICAgLy8gU3Ry
aXAgd2hpdGVzcGFjZSBhZnRlciB0aGUgZWxsaXBzaXMgY2hhcmFjdGVyCisgICAgd2hpbGUgKGFk
anVzdGVkU3RhcnRJbmRleCA8IGxlbmd0aCAmJiBzdHJpbmdbYWRqdXN0ZWRTdGFydEluZGV4XSA9
PSBzcGFjZSkKKyAgICAgICAgKythZGp1c3RlZFN0YXJ0SW5kZXg7CisKKyAgICBpZiAoc2hvdWxk
SW5zZXJ0RWxsaXBzaXMpIHsKKyAgICAgICAgYnVmZmVyWzBdID0gaG9yaXpvbnRhbEVsbGlwc2lz
OworICAgICAgICBtZW1jcHkoJmJ1ZmZlclsxXSwgJnN0cmluZy5jaGFyYWN0ZXJzKClbYWRqdXN0
ZWRTdGFydEluZGV4XSwgc2l6ZW9mKFVDaGFyKSAqIChsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5k
ZXggKyAxKSk7CisgICAgICAgIHJldHVybiBsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5kZXggKyAx
OworICAgIH0KKyAgICBtZW1jcHkoJmJ1ZmZlclswXSwgJnN0cmluZy5jaGFyYWN0ZXJzKClbYWRq
dXN0ZWRTdGFydEluZGV4XSwgc2l6ZW9mKFVDaGFyKSAqIChsZW5ndGggLSBhZGp1c3RlZFN0YXJ0
SW5kZXggKyAxKSk7CisgICAgcmV0dXJuIGxlbmd0aCAtIGFkanVzdGVkU3RhcnRJbmRleDsKK30K
Kwogc3RhdGljIGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnQmIHJlbmRlcmVyLCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBib29sIGRpc2FibGVSb3VuZGluZ0hh
Y2tzKQogewogICAgIFRleHRSdW4gcnVuKGNoYXJhY3RlcnMsIGxlbmd0aCk7CkBAIC0xMDAsMjMg
KzE5MywyOSBAQCBzdGF0aWMgZmxvYXQgc3RyaW5nV2lkdGgoY29uc3QgRm9udCYgcmVuZGVyZXIs
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZAogICAgIHJldHVybiByZW5kZXJlci53
aWR0aChydW4pOwogfQogCi1zdGF0aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgVHJ1bmNhdGlvbkZ1
bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3MpCitzdGF0
aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhX
aWR0aCwgY29uc3QgRm9udCYgZm9udCwgVHJ1bmNhdGlvbkZ1bmN0aW9uIHRydW5jYXRlVG9CdWZm
ZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0KiByZXN1bHRXaWR0aCA9IG51bGxw
dHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCAgZmxvYXQgY3VzdG9tVHJ1bmNh
dGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3YXlzVHJ1bmNhdGUgPSBmYWxzZSkKIHsKICAg
ICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHN0cmluZzsKLSAgICAKKwor
ICAgIGlmIChyZXN1bHRXaWR0aCkKKyAgICAgICAgKnJlc3VsdFdpZHRoID0gMDsKKwogICAgIEFT
U0VSVChtYXhXaWR0aCA+PSAwKTsKLSAgICAKLSAgICBmbG9hdCBjdXJyZW50RWxsaXBzaXNXaWR0
aCA9IHN0cmluZ1dpZHRoKGZvbnQsICZob3Jpem9udGFsRWxsaXBzaXMsIDEsIGRpc2FibGVSb3Vu
ZGluZ0hhY2tzKTsKLSAgICAKKworICAgIGZsb2F0IGN1cnJlbnRFbGxpcHNpc1dpZHRoID0gc2hv
dWxkSW5zZXJ0RWxsaXBzaXMgPyBzdHJpbmdXaWR0aChmb250LCAmaG9yaXpvbnRhbEVsbGlwc2lz
LCAxLCBkaXNhYmxlUm91bmRpbmdIYWNrcykgOiBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRo
OworCiAgICAgVUNoYXIgc3RyaW5nQnVmZmVyW1NUUklOR19CVUZGRVJfU0laRV07CiAgICAgdW5z
aWduZWQgdHJ1bmNhdGVkTGVuZ3RoOwogICAgIHVuc2lnbmVkIGtlZXBDb3VudDsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAKICAgICBpZiAobGVuZ3RoID4gU1RSSU5H
X0JVRkZFUl9TSVpFKSB7Ci0gICAgICAgIGtlZXBDb3VudCA9IFNUUklOR19CVUZGRVJfU0laRSAt
IDE7IC8vIG5lZWQgMSBjaGFyYWN0ZXIgZm9yIHRoZSBlbGxpcHNpcwotICAgICAgICB0cnVuY2F0
ZWRMZW5ndGggPSBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyKHN0cmluZywgbGVuZ3RoLCBrZWVwQ291
bnQsIHN0cmluZ0J1ZmZlcik7CisgICAgICAgIGlmIChzaG91bGRJbnNlcnRFbGxpcHNpcykKKyAg
ICAgICAgICAgIGtlZXBDb3VudCA9IFNUUklOR19CVUZGRVJfU0laRSAtIDE7IC8vIG5lZWQgMSBj
aGFyYWN0ZXIgZm9yIHRoZSBlbGxpcHNpcworICAgICAgICBlbHNlCisgICAgICAgICAgICBrZWVw
Q291bnQgPSAwOworICAgICAgICB0cnVuY2F0ZWRMZW5ndGggPSBjZW50ZXJUcnVuY2F0ZVRvQnVm
ZmVyKHN0cmluZywgbGVuZ3RoLCBrZWVwQ291bnQsIHN0cmluZ0J1ZmZlciwgc2hvdWxkSW5zZXJ0
RWxsaXBzaXMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGtlZXBDb3VudCA9IGxlbmd0aDsKICAg
ICAgICAgbWVtY3B5KHN0cmluZ0J1ZmZlciwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc2l6ZW9mKFVD
aGFyKSAqIGxlbmd0aCk7CkBAIC0xMjQsOCArMjIzLDEzIEBAIHN0YXRpYyBTdHJpbmcgdHJ1bmNh
dGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250
JiBmCiAgICAgfQogCiAgICAgZmxvYXQgd2lkdGggPSBzdHJpbmdXaWR0aChmb250LCBzdHJpbmdC
dWZmZXIsIHRydW5jYXRlZExlbmd0aCwgZGlzYWJsZVJvdW5kaW5nSGFja3MpOwotICAgIGlmICh3
aWR0aCA8PSBtYXhXaWR0aCkKKyAgICBpZiAoIXNob3VsZEluc2VydEVsbGlwc2lzICYmIGFsd2F5
c1RydW5jYXRlKQorICAgICAgICB3aWR0aCArPSBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRo
OworICAgIGlmICgod2lkdGggLSBtYXhXaWR0aCkgPCAwLjAwMDEpIHsgLy8gSWdub3JlIHJvdW5k
aW5nIGVycm9ycy4KKyAgICAgICAgaWYgKHJlc3VsdFdpZHRoKQorICAgICAgICAgICAgKnJlc3Vs
dFdpZHRoID0gd2lkdGg7CiAgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgfQogCiAgICAgdW5z
aWduZWQga2VlcENvdW50Rm9yTGFyZ2VzdEtub3duVG9GaXQgPSAwOwogICAgIGZsb2F0IHdpZHRo
Rm9yTGFyZ2VzdEtub3duVG9GaXQgPSBjdXJyZW50RWxsaXBzaXNXaWR0aDsKQEAgLTE1NiwxMyAr
MjYwLDE3IEBAIHN0YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmCiAgICAgICAgIEFTU0VSVChrZWVwQ291
bnQgPiAwKTsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oa2VlcENv
dW50IDwga2VlcENvdW50Rm9yU21hbGxlc3RLbm93blRvTm90Rml0KTsKICAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oa2VlcENvdW50ID4ga2VlcENvdW50Rm9yTGFyZ2Vz
dEtub3duVG9GaXQpOwotICAgICAgICAKLSAgICAgICAgdHJ1bmNhdGVkTGVuZ3RoID0gdHJ1bmNh
dGVUb0J1ZmZlcihzdHJpbmcsIGxlbmd0aCwga2VlcENvdW50LCBzdHJpbmdCdWZmZXIpOworCisg
ICAgICAgIHRydW5jYXRlZExlbmd0aCA9IHRydW5jYXRlVG9CdWZmZXIoc3RyaW5nLCBsZW5ndGgs
IGtlZXBDb3VudCwgc3RyaW5nQnVmZmVyLCBzaG91bGRJbnNlcnRFbGxpcHNpcyk7CiAKICAgICAg
ICAgd2lkdGggPSBzdHJpbmdXaWR0aChmb250LCBzdHJpbmdCdWZmZXIsIHRydW5jYXRlZExlbmd0
aCwgZGlzYWJsZVJvdW5kaW5nSGFja3MpOworICAgICAgICBpZiAoIXNob3VsZEluc2VydEVsbGlw
c2lzKQorICAgICAgICAgICAgd2lkdGggKz0gY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aDsK
ICAgICAgICAgaWYgKHdpZHRoIDw9IG1heFdpZHRoKSB7CiAgICAgICAgICAgICBrZWVwQ291bnRG
b3JMYXJnZXN0S25vd25Ub0ZpdCA9IGtlZXBDb3VudDsKICAgICAgICAgICAgIHdpZHRoRm9yTGFy
Z2VzdEtub3duVG9GaXQgPSB3aWR0aDsKKyAgICAgICAgICAgIGlmIChyZXN1bHRXaWR0aCkKKyAg
ICAgICAgICAgICAgICAqcmVzdWx0V2lkdGggPSB3aWR0aDsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGtlZXBDb3VudEZvclNtYWxsZXN0S25vd25Ub05vdEZpdCA9IGtlZXBDb3VudDsK
ICAgICAgICAgICAgIHdpZHRoRm9yU21hbGxlc3RLbm93blRvTm90Rml0ID0gd2lkdGg7CkBAIC0x
NzUsNyArMjgzLDcgQEAgc3RhdGljIFN0cmluZyB0cnVuY2F0ZVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGYKICAgICAKICAgICBpZiAoa2Vl
cENvdW50ICE9IGtlZXBDb3VudEZvckxhcmdlc3RLbm93blRvRml0KSB7CiAgICAgICAgIGtlZXBD
b3VudCA9IGtlZXBDb3VudEZvckxhcmdlc3RLbm93blRvRml0OwotICAgICAgICB0cnVuY2F0ZWRM
ZW5ndGggPSB0cnVuY2F0ZVRvQnVmZmVyKHN0cmluZywgbGVuZ3RoLCBrZWVwQ291bnQsIHN0cmlu
Z0J1ZmZlcik7CisgICAgICAgIHRydW5jYXRlZExlbmd0aCA9IHRydW5jYXRlVG9CdWZmZXIoc3Ry
aW5nLCBsZW5ndGgsIGtlZXBDb3VudCwgc3RyaW5nQnVmZmVyLCBzaG91bGRJbnNlcnRFbGxpcHNp
cyk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBTdHJpbmcoc3RyaW5nQnVmZmVyLCB0cnVuY2F0
ZWRMZW5ndGgpOwpAQCAtMTk2LDQgKzMwNCwyOSBAQCBmbG9hdCBTdHJpbmdUcnVuY2F0b3I6Ondp
ZHRoKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZAog
ICAgIHJldHVybiBzdHJpbmdXaWR0aChmb250LCBzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcu
bGVuZ3RoKCksICFlbmFibGVSb3VuZGluZ0hhY2tzKTsKIH0KIAorU3RyaW5nIFN0cmluZ1RydW5j
YXRvcjo6Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRo
LCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRp
bmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQoreworICAgIHJldHVybiB0cnVuY2F0
ZVN0cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyLCAh
ZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
Y3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7Cit9CisKK1N0cmluZyBTdHJpbmdUcnVuY2F0
b3I6OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBj
b25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdI
YWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9h
dCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQoreworICAgIHJldHVybiB0cnVuY2F0ZVN0
cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCByaWdodFRydW5jYXRlVG9CdWZmZXIsICFlbmFi
bGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0
b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKK30KKworU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
bGVmdFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3Qg
Rm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3Ms
IGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxvYXQgY3Vz
dG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK3sKKyAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmco
c3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgbGVmdFRydW5jYXRlVG9CdWZmZXIsICFlbmFibGVSb3Vu
ZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0b21UcnVu
Y2F0aW9uRWxlbWVudFdpZHRoKTsKK30KKworU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRD
bGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNr
cywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBj
dXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQoreworICAgIHJldHVybiB0cnVuY2F0ZVN0cmlu
ZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCByaWdodENsaXBUb0NoYXJhY3RlckJ1ZmZlciwgIWVu
YWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGN1
c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOworfQorCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9y
OjpyaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBj
b25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdI
YWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCAgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCwgYm9vbCBhbHdheXNUcnVuY2F0ZSkKK3sK
KyAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRD
bGlwVG9Xb3JkQnVmZmVyLCAhZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91
bGRJbnNlcnRFbGxpcHNpcywgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCwgYWx3YXlzVHJ1
bmNhdGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCmluZGV4IDE0OTljMTA4NzQ0
NzNhZDQ2M2M0ZjM3YWIyMDRlZDAwNjc5ZGNkN2MuLjEzZDhlMTRhZjdlODY0OGE3MWNmNDc3MDQw
NjY2Mjg2OWUzOTdjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5oCkBAIC00MSw2ICs0MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgc3RhdGljIFN0cmluZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcm
LCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9
IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKICAgICAgICAgc3RhdGljIFN0cmluZyByaWdodFRydW5j
YXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91
bmRpbmdIYWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOworCisgICAgICAgIHN0YXRp
YyBTdHJpbmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNv
bnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwg
Ym9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25F
bGVtZW50V2lkdGggPSAwKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNv
bnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdI
YWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMg
PSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgICAg
IHN0YXRpYyBTdHJpbmcgbGVmdFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRo
LCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lk
dGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0
aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgcmlnaHRDbGlwVG9D
aGFyYWN0ZXIoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFi
bGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNl
cnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAw
KTsKKyAgICAgICAgc3RhdGljIFN0cmluZyByaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwg
ZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZs
b2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwLCBib29sIGFsd2F5c1RydW5jYXRlID0g
ZmFsc2UpOworCiAgICAgICAgIHN0YXRpYyBmbG9hdCB3aWR0aChjb25zdCBTdHJpbmcmLCBjb25z
dCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3Mp
OwogICAgIH07CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAKaW5kZXggNjhlNGMyZDRhMzA5
MzU1ZWE4MzQzNGVkYjVkOTgzN2VkN2ZhNTY1YS4uZDE3OGU1ODZmNzhmMjAxNjkwZWVjMzNmMjJh
MjYzNDkzYmExYWRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1RleHRUcmFja1JlcHJlc2VudGF0aW9uLmNwcApAQCAtNDIsMTAgKzQyLDEy
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFJlY3QgYm91bmRzKCkgY29uc3QgeyByZXR1cm4g
SW50UmVjdCgpOyB9CiB9OwogCisjaWYgIVBMQVRGT1JNKElPUykKIFBhc3NPd25QdHI8VGV4dFRy
YWNrUmVwcmVzZW50YXRpb24+IFRleHRUcmFja1JlcHJlc2VudGF0aW9uOjpjcmVhdGUoVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25DbGllbnQqKQogewogICAgIHJldHVybiBXVEY6OmFkb3B0UHRyKG5l
dyBOdWxsVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKSk7CiB9CisjZW5kaWYKIAogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKaW5kZXgg
YmY2MzVjOWNhNDdmNjQ0NjNhNjMyNGI3Zjg3NzlmNDM0MzkxYWE0Ny4uMTM0NGI5YWU2MTQyNGVi
MTM0NzdiMWJkNjI1NjgwMjMzNTFkYjZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoY29uc3QgRm9udCYg
Zm9udCkKICAgICB7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID4gMTA4MAorI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCiAgICAgICAgIGlmICghZm9u
dC5pc1ByaW50ZXJGb250KCkpCiAgICAgICAgICAgICByZXR1cm4gIWZvbnQudHlwZXNldHRpbmdG
ZWF0dXJlcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbC5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BVlRyYWNrUHJpdmF0ZUFWRk9iakNJ
bXBsLm1tCmluZGV4IDE2ZDA4MTE3NmQ3ODkxNTllNGE3MjhkNDc0OWI0MWI1Mzk5MzI3OTYuLjll
NDU1YjRlOTIwMDNmY2UyNmY0YjQwNWMyZjAzYjg5Yzk3MmFkZjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BVlRyYWNrUHJpdmF0ZUFW
Rk9iakNJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9BVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsLm1tCkBAIC0xMTUsNyArMTE1LDcgQEAg
QXRvbWljU3RyaW5nIEFWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGw6OmxhYmVsKCkgY29uc3QKICAg
ICAgICAgcmV0dXJuIGVtcHR5QXRvbTsKIAogICAgIC8vIElmIHBvc3NpYmxlLCByZXR1cm4gYSB0
aXRsZSBpbiBvbmUgb2YgdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2VzLgotI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAorI2lmIFBMQVRGT1JNKElPUykgfHwg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAgICAgTlNBcnJheSAqdGl0
bGVzRm9yUHJlZmVycmVkTGFuZ3VhZ2VzID0gW0FWTWV0YWRhdGFJdGVtIG1ldGFkYXRhSXRlbXNG
cm9tQXJyYXk6dGl0bGVzIGZpbHRlcmVkQW5kU29ydGVkQWNjb3JkaW5nVG9QcmVmZXJyZWRMYW5n
dWFnZXM6W05TTG9jYWxlIHByZWZlcnJlZExhbmd1YWdlc11dOwogI2Vsc2UKICAgICBOU0FycmF5
ICp0aXRsZXNGb3JQcmVmZXJyZWRMYW5ndWFnZXMgPSBbQVZNZXRhZGF0YUl0ZW0gbWV0YWRhdGFJ
dGVtc0Zyb21BcnJheTp0aXRsZXMgd2l0aExvY2FsZTpbTlNMb2NhbGUgY3VycmVudExvY2FsZV1d
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMubW0KaW5kZXggYTYzZWQ2NzVkMDU2MmI1MDM2Y2IyMTczOGI3
NTdjMjU5M2I1NWE4Zi4uOTk0ODZkN2ExNDZmZGJlYWM2ZmQxOGNhZWZjZGVjZTlmMjZjZDkxMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCkBAIC02Miw4ICs2MiwxMiBAQAogI2ltcG9ydCA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0aW9uLmg+
Ci0jaW1wb3J0IDxDb3JlTWVkaWEvQ29yZU1lZGlhLmg+CisjaWYgUExBVEZPUk0oSU9TKQorI2lt
cG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgorI2Vsc2UKICNpbXBvcnQgPFF1YXJ0ekNvcmUv
Q29yZUltYWdlLmg+CisjZW5kaWYKKyNpbXBvcnQgPENvcmVNZWRpYS9Db3JlTWVkaWEuaD4KIAog
I2lmIFVTRShWSURFT1RPT0xCT1gpCiAjaW1wb3J0IDxDb3JlVmlkZW8vQ29yZVZpZGVvLmg+CkBA
IC03NzksNyArNzgzLDcgQEAgZG91YmxlIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OnBsYXRmb3JtTWF4VGltZVNlZWthYmxlKCkgY29uc3QKIAogZmxvYXQgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1NYXhUaW1lTG9hZGVkKCkgY29uc3QKIHsK
LSNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0g
MTA4MAorI2lmICFQTEFURk9STShJT1MpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPD0gMTA4MAogICAgIC8vIEFWRm91bmRhdGlvbiBvbiBNb3VudGFpbiBMaW9uIHdpbGwgb2Nj
YXNpb25hbGx5IG5vdCBzZW5kIGEgS1ZPIG5vdGlmaWNhdGlvbgogICAgIC8vIHdoZW4gbG9hZGVk
VGltZVJhbmdlcyBjaGFuZ2VzIHdoZW4gdGhlcmUgaXMgbm8gdmlkZW8gb3V0cHV0LiBJbiB0aGF0
IGNhc2UKICAgICAvLyB1cGRhdGUgdGhlIGNhY2hlZCB2YWx1ZSBleHBsaWNpdGx5LgpAQCAtMTIz
Miw2ICsxMjM2LDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
c2l6ZUNoYW5nZWQoKQogICAgIHNldE5hdHVyYWxTaXplKEludFNpemUobmF0dXJhbFNpemUpKTsK
IH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIGlPUyBpbiBX
ZWJLaXQgU3lzdGVtIEludGVyZmFjZS4KK3N0YXRpYyBpbmxpbmUgTlNVUkwgKndrQVZBc3NldFJl
c29sdmVkVVJMKEFWQXNzZXQqKQoreworICAgIHJldHVybiBuaWw7Cit9CisjZW5kaWYKKwogYm9v
bCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpoYXNTaW5nbGVTZWN1cml0eU9y
aWdpbigpIGNvbnN0IAogewogICAgIGlmICghbV9hdkFzc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250QmxhY2tCZXJyeS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRCbGFja0Jl
cnJ5LmNwcAppbmRleCBlOTRjNzg3YzZjYTAxMTE1YzQ1YTkzNjk4MmMwNjQ1ZDM0NWZmOTE4Li41
YTZkYTE3ZmFjZjExMzk4NDUzOGQwMGRlZTdkM2FkYjExMjQyOTFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRCbGFja0JlcnJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRC
bGFja0JlcnJ5LmNwcApAQCAtMzgsMTAgKzM4LDEwIEBAIHN0YXRpYyBpbmxpbmUgRlNfRklYRUQg
RmxvYXRUb0ZTRml4ZWQoZmxvYXQgbikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RlNfRklYRUQ+KG4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIGlmICgh
cnVuLmxlbmd0aCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAwOwogCiAgICAg
R2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMs
IHJ1bik7CkBAIC00OSw4ICs0OSwxMCBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRgogICAgIGlm
ICghc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikpCiAgICAgICAgIHJldHVybjsKICAgICBGbG9h
dFBvaW50IGFkanVzdGVkUG9pbnQgPSBzaGFwZXIuYWRqdXN0U3RhcnRQb2ludChwb2ludCk7Cisg
ICAgZmxvYXQgc3RhcnRYID0gYWRqdXN0ZWRQb2ludC54KCk7CiAKICAgICBkcmF3R2x5cGhCdWZm
ZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgYWRqdXN0ZWRQb2ludCk7CisgICAgcmV0dXJu
IGFkanVzdGVkUG9pbnQueCgpIC0gc3RhcnRYOwogfQogCiBmbG9hdCBGb250OjpmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIC8qIGZhbGxiYWNrRm9udHMgKi8sIEdseXBoT3ZlcmZsb3cqIC8qIGdseXBoT3Zl
cmZsb3cgKi8pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCA2MjU5ZDMyYTQxM2U1M2I5Y2M2Y2Fm
ZDY5MWVjY2M0NGY1ZWVkZjAzLi5mZjU0MTEyMGYzNTYzZWMxZDRjYzU5M2YyN2NjYjlhY2VkOGYx
MTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTQ3LDYgKzQ3LDEwIEBACiAjaW5jbHVkZSA8d3RmL1Rl
bXBvcmFyeUNoYW5nZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYg
UExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgorCiAjaWYg
UExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllck1hYy5oIgogI2luY2x1ZGUg
IldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKQEAgLTYxLDcgKzY1LDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIC8vIFRoZSB0aHJlc2hvbGQgd2lkdGggb3IgaGVpZ2h0IGFib3ZlIHdoaWNoIGEg
dGlsZWQgbGF5ZXIgd2lsbCBiZSB1c2VkLiBUaGlzIHNob3VsZCBiZQogLy8gbGFyZ2UgZW5vdWdo
IHRvIGF2b2lkIHRpbGVkIGxheWVycyBmb3IgbW9zdCBHcmFwaGljc0xheWVycywgYnV0IGxlc3Mg
dGhhbiB0aGUgT3BlbkdMCiAvLyB0ZXh0dXJlIHNpemUgbGltaXQgb24gYWxsIHN1cHBvcnRlZCBo
YXJkd2FyZS4KKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgY29uc3QgaW50IGNNYXhQaXhlbERp
bWVuc2lvbiA9IDEyODA7CisjZWxzZQogc3RhdGljIGNvbnN0IGludCBjTWF4UGl4ZWxEaW1lbnNp
b24gPSAyMDAwOworI2VuZGlmCiAKIC8vIERlcml2ZWQgZW1waXJpY2FsbHk6IDxyZGFyOi8vcHJv
YmxlbS8xMzQwMTg2MT4KIHN0YXRpYyBjb25zdCBpbnQgY01heExheWVyVHJlZURlcHRoID0gMjUw
OwpAQCAtMjgyLDcgKzI5MCw3IEBAIHN0YXRpYyBmbG9hdCBtYXhTY2FsZUZyb21UcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCiBzdGF0aWMgaW5saW5lIGJvb2wgc3VwcG9y
dHNBY2NlbGVyYXRlZEZpbHRlckFuaW1hdGlvbnMoKQogewogLy8gPHJkYXI6Ly9wcm9ibGVtLzEw
OTA3MjUxPiAtIFdlYktpdDIgZG9lc24ndCBzdXBwb3J0IENBIGFuaW1hdGlvbnMgb2YgQ0kgZmls
dGVycyBvbiBMaW9uIGFuZCBiZWxvdwotI2lmIFBMQVRGT1JNKE1BQykgJiYgKFBMQVRGT1JNKElP
UykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwKQorI2lmIFBMQVRG
T1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDgwKQogICAgIHJldHVybiB0cnVlOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7
CkBAIC04NzEsNyArODc5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9J
bWFnZShJbWFnZSogaW1hZ2UpCiAgICAgICAgIG1fdW5jb3JyZWN0ZWRDb250ZW50c0ltYWdlID0g
bmV3SW1hZ2U7CiAgICAgICAgIG1fcGVuZGluZ0NvbnRlbnRzSW1hZ2UgPSBuZXdJbWFnZTsKIAot
I2lmICFQTEFURk9STShXSU4pCisjaWYgIVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKElPUykK
ICAgICAgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0ltYWdlR2V0Q29sb3JTcGFj
ZShtX3BlbmRpbmdDb250ZW50c0ltYWdlLmdldCgpKTsKIAogICAgICAgICBzdGF0aWMgQ0dDb2xv
clNwYWNlUmVmIGRldmljZVJHQiA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwpAQCAt
OTE2LDYgKzkyNCwxMyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb01lZGlh
KFBsYXRmb3JtTGF5ZXIqIG1lZGlhTGF5ZXIpCiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2Vk
KENvbnRlbnRzTWVkaWFMYXllckNoYW5nZWQpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorUGxh
dGZvcm1MYXllciogR3JhcGhpY3NMYXllckNBOjpjb250ZW50c0xheWVyRm9yTWVkaWEoKSBjb25z
dAoreworICAgIHJldHVybiBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID09IENvbnRlbnRzTGF5ZXJG
b3JNZWRpYSA/IG1fY29udGVudHNMYXllci0+cGxhdGZvcm1MYXllcigpIDogbnVsbHB0cjsKK30K
KyNlbmRpZgorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0
Zm9ybUxheWVyKiBjYW52YXNMYXllcikKIHsKICAgICBpZiAobV9jb250ZW50c0xheWVyICYmIGNh
bnZhc0xheWVyID09IG1fY29udGVudHNMYXllci0+cGxhdGZvcm1MYXllcigpKQpAQCAtMTEwMSw2
ICsxMTE2LDEwIEBAIEZsb2F0UmVjdCBHcmFwaGljc0xheWVyQ0E6OmNvbXB1dGVWaXNpYmxlUmVj
dChUcmFuc2Zvcm1TdGF0ZSYgc3RhdGUsIENvbXB1dGVWaXNpCiAgICAgYm9vbCBtYXBXYXNDbGFt
cGVkOwogICAgIEZsb2F0UmVjdCBjbGlwUmVjdEZvckNoaWxkcmVuID0gc3RhdGUubWFwcGVkUXVh
ZCgmbWFwV2FzQ2xhbXBlZCkuYm91bmRpbmdCb3goKTsKICAgICBGbG9hdFBvaW50IGJvdW5kc09y
aWdpbiA9IG1fYm91bmRzT3JpZ2luOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBVSUtpdCBt
YXkgYmUgY2hhbmdpbmcgbGF5ZXIgYm91bmRzIGJlaGluZCBvdXIgYmFjayBpbiBvdmVyZmxvdy1z
Y3JvbGwgbGF5ZXJzLCBzbyB1c2UgdGhlIGxheWVyJ3Mgb3JpZ2luLgorICAgIGJvdW5kc09yaWdp
biA9IG1fbGF5ZXItPmJvdW5kcygpLmxvY2F0aW9uKCk7CisjZW5kaWYKICAgICBjbGlwUmVjdEZv
ckNoaWxkcmVuLm1vdmUoYm91bmRzT3JpZ2luLngoKSwgYm91bmRzT3JpZ2luLnkoKSk7CiAgICAg
CiAgICAgRmxvYXRSZWN0IGNsaXBSZWN0Rm9yU2VsZihib3VuZHNPcmlnaW4sIG1fc2l6ZSk7CkBA
IC0xNDY4LDYgKzE0ODcsMTAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdlb21ldHJ5
KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG8KICAgICBGbG9hdFNp
emUgcGl4ZWxBbGlnbm1lbnRPZmZzZXQ7CiAgICAgY29tcHV0ZVBpeGVsQWxpZ25tZW50KHBhZ2VT
Y2FsZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSwgc2NhbGVkUG9zaXRpb24sIHNjYWxl
ZFNpemUsIHNjYWxlZEFuY2hvclBvaW50LCBwaXhlbEFsaWdubWVudE9mZnNldCk7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgbV9waXhlbEFsaWdubWVudE9mZnNldCA9IHBpeGVsQWxpZ25tZW50
T2Zmc2V0OworI2VuZGlmCisKICAgICBGbG9hdFJlY3QgYWRqdXN0ZWRCb3VuZHMobV9ib3VuZHNP
cmlnaW4gLSBwaXhlbEFsaWdubWVudE9mZnNldCwgc2NhbGVkU2l6ZSk7CiAKICAgICAvLyBVcGRh
dGUgcG9zaXRpb24uCkBAIC0xNDc3LDEwICsxNTAwLDIxIEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
Ojp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvCiAgICAgaWYgKG1fc3RydWN0dXJhbExheWVyKSB7CiAgICAgICAgIEZsb2F0UG9pbnQgbGF5
ZXJQb3NpdGlvbihtX3Bvc2l0aW9uLngoKSArIG1fYW5jaG9yUG9pbnQueCgpICogbV9zaXplLndp
ZHRoKCksIG1fcG9zaXRpb24ueSgpICsgbV9hbmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0
KCkpOwogICAgICAgICBGbG9hdFJlY3QgbGF5ZXJCb3VuZHMobV9ib3VuZHNPcmlnaW4sIG1fc2l6
ZSk7Ci0gICAgICAgIAorCisjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAg
ICAgIC8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgdGhlIG1haW4gdGhyZWFkIGxvZ2ljIGludG8g
UGxhdGZvcm1DQUxheWVyLgorICAgICAgICBpZiAobWVkaWFMYXllck11c3RCZVVwZGF0ZWRPbk1h
aW5UaHJlYWQoKSAmJiBXZWJUaHJlYWRJc0N1cnJlbnQoKSkgeworICAgICAgICAgICAgbV9zdHJ1
Y3R1cmFsTGF5ZXItPnNldFBvc2l0aW9uT25NYWluVGhyZWFkKGxheWVyUG9zaXRpb24pOworICAg
ICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNldEJvdW5kc09uTWFpblRocmVhZChsYXllckJv
dW5kcyk7CisgICAgICAgICAgICBtX3N0cnVjdHVyYWxMYXllci0+c2V0QW5jaG9yUG9pbnRPbk1h
aW5UaHJlYWQobV9hbmNob3JQb2ludCk7CisgICAgICAgIH0gZWxzZSB7CisjZW5kaWYKICAgICAg
ICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNldFBvc2l0aW9uKGxheWVyUG9zaXRpb24pOwogICAgICAg
ICBtX3N0cnVjdHVyYWxMYXllci0+c2V0Qm91bmRzKGxheWVyQm91bmRzKTsKICAgICAgICAgbV9z
dHJ1Y3R1cmFsTGF5ZXItPnNldEFuY2hvclBvaW50KG1fYW5jaG9yUG9pbnQpOworI2lmIEVOQUJM
RShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorICAgICAgICB9CisjZW5kaWYKIAogICAgICAgICBp
ZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX3N0cnVjdHVyYWxMYXllckNsb25lcy5nZXQo
KSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xv
bmVNYXAtPmVuZCgpOwpAQCAtMTUwNCwxMCArMTUzOCwyMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50
JiBwbwogICAgICAgICBzY2FsZWRBbmNob3JQb2ludCA9IEZsb2F0UG9pbnQoMC41ZiwgMC41Zik7
CiAgICAgICAgIGFkanVzdGVkUG9zaXRpb24gPSBGbG9hdFBvaW50KHNjYWxlZEFuY2hvclBvaW50
LngoKSAqIHNjYWxlZFNpemUud2lkdGgoKSAtIHBpeGVsQWxpZ25tZW50T2Zmc2V0LndpZHRoKCks
IHNjYWxlZEFuY2hvclBvaW50LnkoKSAqIHNjYWxlZFNpemUuaGVpZ2h0KCkgLSBwaXhlbEFsaWdu
bWVudE9mZnNldC5oZWlnaHQoKSk7CiAgICAgfQotICAgIAorCisjaWYgRU5BQkxFKFBMVUdJTl9Q
Uk9YWV9GT1JfVklERU8pCisgICAgLy8gRklYTUU6IENvbnNpZGVyIG1vdmluZyB0aGUgbWFpbiB0
aHJlYWQgbG9naWMgaW50byBQbGF0Zm9ybUNBTGF5ZXIuCisgICAgaWYgKG1lZGlhTGF5ZXJNdXN0
QmVVcGRhdGVkT25NYWluVGhyZWFkKCkgJiYgV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKKyAgICAg
ICAgbV9sYXllci0+c2V0UG9zaXRpb25Pbk1haW5UaHJlYWQoYWRqdXN0ZWRQb3NpdGlvbik7Cisg
ICAgICAgIG1fbGF5ZXItPnNldEJvdW5kc09uTWFpblRocmVhZChhZGp1c3RlZEJvdW5kcyk7Cisg
ICAgICAgIG1fbGF5ZXItPnNldEFuY2hvclBvaW50T25NYWluVGhyZWFkKHNjYWxlZEFuY2hvclBv
aW50KTsKKyAgICB9IGVsc2UgeworI2VuZGlmCiAgICAgbV9sYXllci0+c2V0UG9zaXRpb24oYWRq
dXN0ZWRQb3NpdGlvbik7CiAgICAgbV9sYXllci0+c2V0Qm91bmRzKGFkanVzdGVkQm91bmRzKTsK
ICAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludChzY2FsZWRBbmNob3JQb2ludCk7CisjaWYgRU5B
QkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAgfQorI2VuZGlmCiAKICAgICBpZiAoTGF5
ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgIExh
eWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKQEAgLTE2
NzgsNyArMTcyMywxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExh
eWVyKFN0cnVjdHVyYWxMYXllclB1cnBvc2UgcHVycG9zZSkKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIAorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFJlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+IG9sZFByaW1hcnlMYXllciA9IG1fc3RydWN0dXJhbExheWVyID8gbV9zdHJ1
Y3R1cmFsTGF5ZXIuZ2V0KCkgOiBtX2xheWVyLmdldCgpOworI2VuZGlmCisKICAgICBib29sIHN0
cnVjdHVyYWxMYXllckNoYW5nZWQgPSBmYWxzZTsKICAgICAKICAgICBpZiAocHVycG9zZSA9PSBT
dHJ1Y3R1cmFsTGF5ZXJGb3JQcmVzZXJ2ZXMzRCkgewpAQCAtMTk3Nyw4ICsyMDI2LDE4IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3RzKCkKICAgICBpZiAoZ2FpbmVk
T3JMb3N0Q2xpcHBpbmdMYXllcikKICAgICAgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoRG9udFNj
aGVkdWxlRmx1c2gpOwogCisjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAg
Ly8gRklYTUU6IENvbnNpZGVyIG1vdmluZyB0aGUgbWFpbiB0aHJlYWQgbG9naWMgaW50byBQbGF0
Zm9ybUNBTGF5ZXIuCisgICAgaWYgKG1lZGlhTGF5ZXJNdXN0QmVVcGRhdGVkT25NYWluVGhyZWFk
KCkgJiYgV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLT5z
ZXRQb3NpdGlvbk9uTWFpblRocmVhZChjb250ZW50T3JpZ2luKTsKKyAgICAgICAgbV9jb250ZW50
c0xheWVyLT5zZXRCb3VuZHNPbk1haW5UaHJlYWQoY29udGVudEJvdW5kcyk7CisgICAgfSBlbHNl
IHsKKyNlbmRpZgogICAgIG1fY29udGVudHNMYXllci0+c2V0UG9zaXRpb24oY29udGVudE9yaWdp
bik7CiAgICAgbV9jb250ZW50c0xheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisjaWYg
RU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pIAorICAgIH0KKyNlbmRpZgogCiAgICAgaWYg
KG1fY29udGVudHNMYXllckNsb25lcykgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9jb250ZW50c0xheWVyQ2xvbmVzLT5lbmQoKTsKQEAgLTIzNjIsOCArMjQyMSwx
MSBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uc0Zyb21L
ZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZQogICAgIGJvb2wgaXNNYXRyaXhBbmltYXRpb24g
PSBsaXN0SW5kZXggPCAwOwogICAgIGludCBudW1BbmltYXRpb25zID0gaXNNYXRyaXhBbmltYXRp
b24gPyAxIDogb3BlcmF0aW9ucy0+c2l6ZSgpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJv
b2wgcmV2ZXJzZUFuaW1hdGlvbkxpc3QgPSBmYWxzZTsKKyNlbHNlCiAgICAgYm9vbCByZXZlcnNl
QW5pbWF0aW9uTGlzdCA9IHRydWU7Ci0jaWYgIVBMQVRGT1JNKElPUykgJiYgIVBMQVRGT1JNKFdJ
TikKKyNpZiAhUExBVEZPUk0oV0lOKQogICAgICAgICAvLyBPbGQgdmVyc2lvbnMgb2YgQ29yZSBB
bmltYXRpb24gYXBwbHkgYW5pbWF0aW9ucyBpbiByZXZlcnNlIG9yZGVyICg8cmRhcjovL3Byb2Js
ZW0vNzA5NTYzOD4pIHNvIHdlIG5lZWQgdG8gZmxpcCB0aGUgbGlzdC4KICAgICAgICAgLy8gdG8g
YmUgbm9uLWFkZGl0aXZlLiBGb3IgYmluYXJ5IGNvbXBhdGliaWxpdHksIHRoZSBjdXJyZW50IHZl
cnNpb24gb2YgQ29yZSBBbmltYXRpb24gcHJlc2VydmVzIHRoaXMgYmVoYXZpb3IgZm9yIGFwcGxp
Y2F0aW9ucyBsaW5rZWQKICAgICAgICAgLy8gb24gb3IgYmVmb3JlIFNub3cgTGVvcGFyZC4KQEAg
LTIzNzMsNiArMjQzNSw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpjcmVhdGVUcmFuc2Zvcm1B
bmltYXRpb25zRnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlCiAgICAgICAgIGlmICgh
ZXhlY3V0YWJsZVdhc0xpbmtlZE9uT3JCZWZvcmVTbm93TGVvcGFyZCkKICAgICAgICAgICAgIHJl
dmVyc2VBbmltYXRpb25MaXN0ID0gZmFsc2U7CiAjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCiAgICAgaWYgKHJldmVyc2VBbmltYXRpb25MaXN0KSB7CiAgICAgICAgIGZvciAoaW50IGFu
aW1hdGlvbkluZGV4ID0gbnVtQW5pbWF0aW9ucyAtIDE7IGFuaW1hdGlvbkluZGV4ID49IDA7IC0t
YW5pbWF0aW9uSW5kZXgpIHsKICAgICAgICAgICAgIGlmICghYXBwZW5kVG9VbmNvbW1pdHRlZEFu
aW1hdGlvbnModmFsdWVMaXN0LCBvcGVyYXRpb25zLCBhbmltYXRpb24sIGFuaW1hdGlvbk5hbWUs
IGJveFNpemUsIGFuaW1hdGlvbkluZGV4LCB0aW1lT2Zmc2V0LCBpc01hdHJpeEFuaW1hdGlvbikp
IHsKQEAgLTMwMzIsNyArMzA5NSw5IEBAIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0ZXNPcmllbnRhdGlvbiBHcmFwaGljc0xheWVyQ0E6OmRlZmF1bHRDb250ZW50CiB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6c2V0dXBDb250ZW50c0xheWVyKFBsYXRmb3JtQ0FMYXllciogY29udGVu
dHNMYXllcikKIHsKICAgICAvLyBUdXJuIG9mZiBpbXBsaWNpdCBhbmltYXRpb25zIG9uIHRoZSBp
bm5lciBsYXllci4KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGNvbnRlbnRzTGF5ZXItPnNldE1h
c2tzVG9Cb3VuZHModHJ1ZSk7CisjZW5kaWYKIAogICAgIGlmIChkZWZhdWx0Q29udGVudHNPcmll
bnRhdGlvbigpID09IENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNCb3R0b21VcCkgewogICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBmbGlwcGVyKApAQCAtMzA1MSw2ICszMTE2LDEzIEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjpzZXR1cENvbnRlbnRzTGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBjb250
ZW50c0xheWVyKQogICAgIH0KIH0KIAorI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVP
KQorYm9vbCBHcmFwaGljc0xheWVyQ0E6Om1lZGlhTGF5ZXJNdXN0QmVVcGRhdGVkT25NYWluVGhy
ZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZW50c0xheWVyUHVycG9zZSA9PSBDb250
ZW50c0xheWVyRm9yTWVkaWE7Cit9CisjZW5kaWYKKwogUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5
ZXI+IEdyYXBoaWNzTGF5ZXJDQTo6ZmluZE9yTWFrZUNsb25lKENsb25lSUQgY2xvbmVJRCwgUGxh
dGZvcm1DQUxheWVyICpzb3VyY2VMYXllciwgTGF5ZXJNYXAqIGNsb25lcywgQ2xvbmVMZXZlbCBj
bG9uZUxldmVsKQogewogICAgIGlmICghc291cmNlTGF5ZXIpCkBAIC0zMzI3LDEyICszMzk5LDE0
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpjb21wdXRlUGl4ZWxBbGlnbm1lbnQoZmxvYXQgcGFn
ZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvCiAgICAgCiAgICAgLy8gQ29udmVydCBiYWNrIHRv
IGxheWVyIGNvb3JkaW5hdGVzLgogICAgIGFsaWduZWRCb3VuZHMuc2NhbGUoMSAvIHBhZ2VTY2Fs
ZUZhY3Rvcik7Ci0gICAgCisKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIEVwc2lsb24gaXMg
bmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IGJhY2tpbmcgc3RvcmUgc2l6ZSBjb21wdXRhdGlvbiBp
biBDQSwgd2hpY2ggaW52b2x2ZXMgaW50ZWdlciB0cnVuY2F0aW9uLAogICAgIC8vIHdpbGwgbWF0
Y2ggb3VyIGFsaWduZWQgYm91bmRzLgogICAgIGNvbnN0IGZsb2F0IGVwc2lsb24gPSAxZS01ZjsK
ICAgICBhbGlnbmVkQm91bmRzLmV4cGFuZChlcHNpbG9uLCBlcHNpbG9uKTsKLSAgICAKKyNlbmRp
ZgorCiAgICAgYWxpZ25tZW50T2Zmc2V0ID0gYmFzZVJlbGF0aXZlQm91bmRzLmxvY2F0aW9uKCkg
LSBhbGlnbmVkQm91bmRzLmxvY2F0aW9uKCk7CiAgICAgcG9zaXRpb24gPSBtX3Bvc2l0aW9uIC0g
YWxpZ25tZW50T2Zmc2V0OwogICAgIHNpemUgPSBhbGlnbmVkQm91bmRzLnNpemUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNB
LmgKaW5kZXggMWMzN2QwMGZkYzM0NTZhNmFkMDFlNzE0MzczNDBhNjFjZDBiNmE1Yy4uOWIyYjM2
NTgzNDdhZTliZGZhZGI0ODkxM2E5Yzk0MWU1ZGI2ZDU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKQEAgLTEyMSw2
ICsxMjEsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxh
eWVyKik7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogY29u
dGVudHNMYXllckZvck1lZGlhKCkgY29uc3QgT1ZFUlJJREU7CisjZW5kaWYKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKik7CiAgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IENvbG9yJik7CiAKQEAgLTEzNyw2ICsx
NDAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxheWVyRGlkRGlzcGxheShQbGF0Zm9y
bUxheWVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQo
Ym9vbCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgRmxvYXRTaXplIHBpeGVsQWxp
Z25tZW50T2Zmc2V0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9waXhlbEFsaWdubWVudE9m
ZnNldDsgfQorI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9y
Q2hhbmdlZCgpOwogCiAgICAgc3RydWN0IENvbW1pdFN0YXRlIHsKQEAgLTI1Niw2ICsyNjIsMTAg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHNldHVwQ29udGVudHNMYXllcihQbGF0Zm9ybUNBTGF5ZXIq
KTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRzTGF5ZXIuZ2V0KCk7IH0KIAorI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJ
REVPKQorICAgIGJvb2wgbWVkaWFMYXllck11c3RCZVVwZGF0ZWRPbk1haW5UaHJlYWQoKSBjb25z
dDsKKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBo
aWNzTGF5ZXIqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXREZWJ1Z0JvcmRlckluZm8oQ29sb3Im
LCBmbG9hdCYgd2lkdGgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmgKaW5kZXggMjljY2VmNDdkMDI4YjM0
OWI2NGFlYTQzNWE2ZDI1Njg5MjlmODcwOC4uY2RhNzJjZWY3NDA3NTdkNWU1NDMzNjA5ZDJkYjM5
ZDMxMzQwZjdjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBRmlsdGVycy5oCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAi
UGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAorI2lmIFBMQVRGT1JNKElPUykgfHwg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAjZGVmaW5lIFVTRV9DQV9G
SUxURVJTIDEKICNlbHNlCiAjZGVmaW5lIFVTRV9DQV9GSUxURVJTIDAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKaW5kZXgg
ZmI3ZTYxMDFmNjcyNGY2NjkwNDM2MzEzYjQ4OGExYzE0MDZiYzQyMS4uMmE0NmJkNjY0MmY4NTlm
NThhMjNmYTI1NDhhYWI0YTNjMDMzMDA4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKQEAgLTIwNiw2ICsyMDYsMTQg
QEAgcHVibGljOgogI2VuZGlmIC8vIE5ERUJVRwogI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIGlzV2ViTGF5ZXIoKTsKKyAgICB2b2lkIHNldEJv
dW5kc09uTWFpblRocmVhZChDR1JlY3QpOworICAgIHZvaWQgc2V0UG9zaXRpb25Pbk1haW5UaHJl
YWQoQ0dQb2ludCk7CisgICAgdm9pZCBzZXRBbmNob3JQb2ludE9uTWFpblRocmVhZChGbG9hdFBv
aW50M0QpOworICAgIHZvaWQgc2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYpOworI2VuZGlmCisK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGVDb21wYXRpYmxl
TGF5ZXIoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CiAKICNp
ZiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAKaW5kZXgg
MTQ2MmQ1ZTNiNDdhNGRkNmIyMTgzOTQ2OTZiZTIxNWIyZjY4ODhmYy4uYmZjM2U1YWY2YzMwNmZi
ZDVlY2E2ODEwYzNiMDQ3MTE5OGVhYzcwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllckZsdXNoU2NoZWR1bGVy
TWFjLmNwcApAQCAtMzEsMTEgKzMxLDMxIEBACiAKICNpbmNsdWRlIDx3dGYvQXV0b2RyYWluZWRQ
b29sLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzSU9TLmgiCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZCdW5kbGUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1dlYkNvcmVUaHJlYWQuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBjb25zdCBDRkluZGV4IENvcmVBbmltYXRpb25SdW5Mb29wT3JkZXIgPSAy
MDAwMDAwOwogc3RhdGljIGNvbnN0IENGSW5kZXggTGF5ZXJGbHVzaFJ1bkxvb3BPcmRlciA9IENv
cmVBbmltYXRpb25SdW5Mb29wT3JkZXIgLSAxOwogCitzdGF0aWMgQ0ZSdW5Mb29wUmVmIGN1cnJl
bnRSdW5Mb29wKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gQSByYWNlIGNvbmRpdGlv
biBkdXJpbmcgV2ViVmlldyBkZWFsbG9jYXRpb24gY2FuIGxlYWQgdG8gYSBjcmFzaCBpZiB0aGUg
bGF5ZXIgc3luYyBydW4gbG9vcAorICAgIC8vIG9ic2VydmVyIGlzIGFkZGVkIHRvIHRoZSBtYWlu
IHJ1biBsb29wIDxyZGFyOi8vcHJvYmxlbS85Nzk4NTUwPi4gSG93ZXZlciwgZm9yIHJlc3BvbnNp
dmVuZXNzLAorICAgIC8vIHdlIHN0aWxsIGFsbG93IHRoaXMsIHNlZSA8cmRhcjovL3Byb2JsZW0v
NzQwMzMyOD4uIFNpbmNlIHRoZSByYWNlIGNvbmRpdGlvbiBhbmQgc3Vic2VxdWVudAorICAgIC8v
IGNyYXNoIGFyZSBlc3BlY2lhbGx5IHRyb3VibGVzb21lIGZvciBpQm9va3MsIHdlIG5ldmVyIGFs
bG93IHRoZSBvYnNlcnZlciB0byBiZSBhZGRlZCB0byB0aGUKKyAgICAvLyBtYWluIHJ1biBsb29w
IGluIGlCb29rcy4KKyAgICBpZiAoYXBwbGljYXRpb25Jc0lCb29rc09uSU9TKCkpCisgICAgICAg
IHJldHVybiBXZWJUaHJlYWRSdW5Mb29wKCk7CisjZW5kaWYKKyAgICByZXR1cm4gQ0ZSdW5Mb29w
R2V0Q3VycmVudCgpOworfQorCiBMYXllckZsdXNoU2NoZWR1bGVyOjpMYXllckZsdXNoU2NoZWR1
bGVyKExheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQqIGNsaWVudCkKICAgICA6IG1faXNTdXNwZW5k
ZWQoZmFsc2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCkBAIC02OCwxMCArODgsMTAgQEAgdm9p
ZCBMYXllckZsdXNoU2NoZWR1bGVyOjpzY2hlZHVsZSgpCiAgICAgaWYgKG1faXNTdXNwZW5kZWQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIENGUnVuTG9vcFJlZiBjdXJyZW50UnVuTG9vcCA9IENG
UnVuTG9vcEdldEN1cnJlbnQoKTsKKyAgICBDRlJ1bkxvb3BSZWYgcnVuTG9vcCA9IGN1cnJlbnRS
dW5Mb29wKCk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2Ugd2FrZSB1cCB0aGUgbG9vcCBvciB0aGUg
b2JzZXJ2ZXIgY291bGQgYmUgZGVsYXllZCB1bnRpbCBzb21lIG90aGVyIHNvdXJjZSBmaXJlcy4K
LSAgICBDRlJ1bkxvb3BXYWtlVXAoY3VycmVudFJ1bkxvb3ApOworICAgIENGUnVuTG9vcFdha2VV
cChydW5Mb29wKTsKIAogICAgIGlmIChtX3J1bkxvb3BPYnNlcnZlcikKICAgICAgICAgcmV0dXJu
OwpAQCAtNzksNyArOTksNyBAQCB2b2lkIExheWVyRmx1c2hTY2hlZHVsZXI6OnNjaGVkdWxlKCkK
ICAgICBDRlJ1bkxvb3BPYnNlcnZlckNvbnRleHQgY29udGV4dCA9IHsgMCwgdGhpcywgMCwgMCwg
MCB9OwogICAgIG1fcnVuTG9vcE9ic2VydmVyID0gYWRvcHRDRihDRlJ1bkxvb3BPYnNlcnZlckNy
ZWF0ZSgwLCBrQ0ZSdW5Mb29wQmVmb3JlV2FpdGluZyB8IGtDRlJ1bkxvb3BFeGl0LCB0cnVlLCBM
YXllckZsdXNoUnVuTG9vcE9yZGVyLCBydW5Mb29wT2JzZXJ2ZXJDYWxsYmFjaywgJmNvbnRleHQp
KTsKIAotICAgIENGUnVuTG9vcEFkZE9ic2VydmVyKGN1cnJlbnRSdW5Mb29wLCBtX3J1bkxvb3BP
YnNlcnZlci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKKyAgICBDRlJ1bkxvb3BBZGRP
YnNlcnZlcihydW5Mb29wLCBtX3J1bkxvb3BPYnNlcnZlci5nZXQoKSwga0NGUnVuTG9vcENvbW1v
bk1vZGVzKTsKIH0KIAogdm9pZCBMYXllckZsdXNoU2NoZWR1bGVyOjppbnZhbGlkYXRlKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9y
bUNBTGF5ZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
UGxhdGZvcm1DQUxheWVyTWFjLm1tCmluZGV4IDMxYjQ4MjQ5MThjY2Y4YTFlMGE3Yzc2ZTU4NDIx
MGY5ZWU1ODY4NDkuLmQ5OWJjZDlkZjdiYTYxYjNhZjU5MTlkNzRmZDE4Yjg2NTVkY2I4OWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9y
bUNBTGF5ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQpAQCAtNDgsNiArNDgsMTMgQEAKICNpbXBvcnQgPHd0
Zi9DdXJyZW50VGltZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCisjaWYgUExBVEZP
Uk0oSU9TKQorI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgorI2ltcG9ydCAiV2ViVGlsZWRMYXll
ci5oIgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0dlb21ldHJ5Lmg+CisjaW1wb3J0IDxRdWFydHpD
b3JlL0NBVGlsZWRMYXllclByaXZhdGUuaD4KKyNlbmRpZgorCiBTT0ZUX0xJTktfRlJBTUVXT1JL
X09QVElPTkFMKEFWRm91bmRhdGlvbikKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFW
UGxheWVyTGF5ZXIpCiAKQEAgLTk5LDYgKzEwNiw5IEBAIHN0YXRpYyBkb3VibGUgbWVkaWFUaW1l
VG9DdXJyZW50VGltZShDRlRpbWVJbnRlcnZhbCB0KQogCiAtICh2b2lkKWFuaW1hdGlvbkRpZFN0
YXJ0OihDQUFuaW1hdGlvbiAqKWFuaW1hdGlvbgogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBX
ZWJUaHJlYWRMb2NrKCk7CisjZW5kaWYKICAgICAvLyBoYXNOb25aZXJvQmVnaW5UaW1lIGlzIHN0
b3JlZCBpbiBhIGtleSBpbiB0aGUgYW5pbWF0aW9uCiAgICAgYm9vbCBoYXNOb25aZXJvQmVnaW5U
aW1lID0gW1thbmltYXRpb24gdmFsdWVGb3JLZXk6V0tOb25aZXJvQmVnaW5UaW1lRmxhZ10gYm9v
bFZhbHVlXTsKICAgICBDRlRpbWVJbnRlcnZhbCBzdGFydFRpbWU7CkBAIC03MjYsNiArNzM2LDE2
IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHZhbHVl
KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgp
IHNldENvbnRlbnRzU2NhbGU6dmFsdWVdOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBbbV9sYXll
ci5nZXQoKSBzZXRSYXN0ZXJpemF0aW9uU2NhbGU6dmFsdWVdOworCisgICAgaWYgKG1fbGF5ZXJU
eXBlID09IExheWVyVHlwZVdlYlRpbGVkTGF5ZXIpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGlu
dmFsaWRhdGUgYWxsIHRoZSB0aWxlcyBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCBzdGFsZSB0aWxl
cyB3aXRoIHRoZSB3cm9uZyBzY2FsZSBpbiB0aGUgd3JvbmcgcGxhY2UsCisgICAgICAgIC8vIHNl
ZSA8cmRhcjovL3Byb2JsZW0vOTQzNDc2NT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAg
IHN0YXRpYyBOU0RpY3Rpb25hcnkgKm9wdGlvbnNEaWN0aW9uYXJ5ID0gW1tOU0RpY3Rpb25hcnkg
YWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllF
U10sIGtDQVRpbGVkTGF5ZXJSZW1vdmVJbW1lZGlhdGVseSwgbmlsXTsKKyAgICAgICAgWyhDQVRp
bGVkTGF5ZXIgKiltX2xheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheUluUmVjdDpbbV9sYXllci5n
ZXQoKSBib3VuZHNdIGxldmVsT2ZEZXRhaWw6MCBvcHRpb25zOm9wdGlvbnNEaWN0aW9uYXJ5XTsK
KyAgICB9CisjZW5kaWYKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKQEAgLTc3
MCw2ICs3OTAsNTggQEAgVGlsZWRCYWNraW5nKiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnRpbGVkQmFj
a2luZygpCiAgICAgcmV0dXJuIFt0aWxlZEJhY2tpbmdMYXllciB0aWxlZEJhY2tpbmddOwogfQog
CisjaWYgUExBVEZPUk0oSU9TKQorYm9vbCBQbGF0Zm9ybUNBTGF5ZXI6OmlzV2ViTGF5ZXIoKQor
eworICAgIEJPT0wgcmVzdWx0ID0gTk87CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
CisgICAgcmVzdWx0ID0gW21fbGF5ZXIuZ2V0KCkgaXNLaW5kT2ZDbGFzczpbV2ViTGF5ZXIgc2Vs
Zl1dOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm91bmRzT25NYWluVGhyZWFkKENHUmVjdCBi
b3VuZHMpCit7CisgICAgQ0FMYXllciAqbGF5ZXIgPSBtX2xheWVyLmdldCgpOworICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUworICAgICAgICBbbGF5ZXIgc2V0Qm91bmRzOmJvdW5kc107Cisg
ICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICB9KTsKK30KKwordm9pZCBQbGF0
Zm9ybUNBTGF5ZXI6OnNldFBvc2l0aW9uT25NYWluVGhyZWFkKENHUG9pbnQgcG9zaXRpb24pCit7
CisgICAgQ0FMYXllciAqbGF5ZXIgPSBtX2xheWVyLmdldCgpOworICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUworICAgICAgICBbbGF5ZXIgc2V0UG9zaXRpb246cG9zaXRpb25dOworICAgICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyOjpzZXRBbmNob3JQb2ludE9uTWFpblRocmVhZChGbG9hdFBvaW50M0QgdmFsdWUpCit7
CisgICAgQ0FMYXllciAqbGF5ZXIgPSBtX2xheWVyLmdldCgpOworICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUworICAgICAgICBbbGF5ZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UodmFs
dWUueCgpLCB2YWx1ZS55KCkpXTsKKyAgICAgICAgW2xheWVyIHNldEFuY2hvclBvaW50Wjp2YWx1
ZS56KCldOworICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfSk7Cit9CisK
K3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiB0aWxlU2l6
ZSkKK3sKKyAgICBpZiAobV9sYXllclR5cGUgIT0gTGF5ZXJUeXBlV2ViVGlsZWRMYXllcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW3N0
YXRpY19jYXN0PFdlYlRpbGVkTGF5ZXIqPihtX2xheWVyLmdldCgpKSBzZXRUaWxlU2l6ZTp0aWxl
U2l6ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKKwogUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllck1h
Yzo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVy
VHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBjbGllbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKGxheWVyVHlwZSwgY2xpZW50KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxl
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJv
bGxlci5tbQppbmRleCAwMmZiOWY3OGI0MzhiNjdiZGFiMzNmODY1NjkzZjQ1NDAwZTljZGU0Li5l
YThlYjQzN2Y4NDE1MDU4NzYzY2QwYTZmMTdkMTVjNTA5MjFkMmQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvbnRyb2xsZXIubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVy
Lm1tCkBAIC0yOSw3ICsyOSw5IEBACiAjaW1wb3J0ICJJbnRSZWN0LmgiCiAjaW1wb3J0ICJQbGF0
Zm9ybUNBTGF5ZXIuaCIKICNpbXBvcnQgIlJlZ2lvbi5oIgorI2lmICFQTEFURk9STShJT1MpCiAj
aW1wb3J0ICJMYXllclBvb2wuaCIKKyNlbmRpZgogI2ltcG9ydCAiV2ViTGF5ZXIuaCIKICNpbXBv
cnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW1wb3J0IDx1dGlsaXR5PgpAQCAtMTY2LDYgKzE2OCwx
MSBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRUaWxlTmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IFRpbGVJbmRleCYgdGlsZUluZGV4LCBUaWxlSQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpwbGF0
Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxheWVy
LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmKQogeworI2lmIFBMQVRG
T1JNKElPUykKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRocmVhZExv
Y2soKTsKKyNlbmRpZgorCiAgICAgaWYgKHBsYXRmb3JtQ0FMYXllciA9PSBtX3RpbGVkU2Nyb2xs
aW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkpIHsKICAgICAgICAgZHJhd1RpbGVNYXBDb250ZW50cyhj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIt
PmJvdW5kcygpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjM3LDcgKzY0NCw5IEBAIHZvaWQgVGls
ZUNvbnRyb2xsZXI6OnJlbW92ZUFsbFRpbGVzKCkKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdGlsZXNUb1JlbW92ZS5zaXplKCk7ICsraSkgewogICAgICAgICBUaWxlSW5mbyB0aWxlSW5m
byA9IG1fdGlsZXMudGFrZSh0aWxlc1RvUmVtb3ZlW2ldKTsKKyNpZiAhUExBVEZPUk0oSU9TKQog
ICAgICAgICBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRkTGF5ZXIodGlsZUluZm8ubGF5ZXIp
OworI2VuZGlmCiAgICAgfQogfQogCkBAIC02NTUsNyArNjY0LDkgQEAgdm9pZCBUaWxlQ29udHJv
bGxlcjo6cmVtb3ZlQWxsU2Vjb25kYXJ5VGlsZXMoKQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFRpbGVJbmZvIHRpbGVJ
bmZvID0gbV90aWxlcy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pOworI2lmICFQTEFURk9STShJT1Mp
CiAgICAgICAgIExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5hZGRMYXllcih0aWxlSW5mby5sYXll
cik7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTY3NCw3ICs2ODUsOSBAQCB2b2lkIFRpbGVDb250
cm9sbGVyOjpyZW1vdmVUaWxlc0luQ29ob3J0KFRpbGVDb2hvcnQgY29ob3J0KQogCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IFRpbGVJbmZvIHRpbGVJbmZvID0gbV90aWxlcy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pOworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgICAgIExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5hZGRMYXll
cih0aWxlSW5mby5sYXllcik7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTgwNCw3ICs4MTcsOSBA
QCB2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZhbGlkYXRlVGlsZXMoVGlsZVZhbGlkYXRpb25Qb2xp
Y3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdAogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBz
aXplID0gdGlsZXNUb1JlbW92ZS5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAg
IFRpbGVJbmZvIHRpbGVJbmZvID0gbV90aWxlcy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pOworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRk
TGF5ZXIodGlsZUluZm8ubGF5ZXIpOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEw
ODAsNyArMTA5NSwxMSBAQCBpbnQgVGlsZUNvbnRyb2xsZXI6OnJpZ2h0TWFyZ2luV2lkdGgoKSBj
b25zdAogCiBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlVGls
ZUxheWVyKGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQogeworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBsYXllcjsKKyNlbHNlCiAgICAgUmVmUHRyPFBsYXRm
b3JtQ0FMYXllcj4gbGF5ZXIgPSBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+dGFrZUxheWVyV2l0
aFNpemUodGlsZVJlY3Quc2l6ZSgpKTsKKyNlbmRpZgogCiAgICAgaWYgKGxheWVyKSB7CiAgICAg
ICAgIG1fdGlsZVJlcGFpbnRDb3VudHMucmVtb3ZlKGxheWVyLmdldCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6
TkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHAKaW5kZXggOGQ1MDBmNGE1NTA1MGMwNTBiMTM5Y2FmMDZjZjQ2MTRiNzAx
YzdmYi4uMGM5NDBjNWQ2OWM3ZDkzNzRjMmQ5MDA4MzFmNDM5OGUxMDU0ODFkMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1
enpORy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9u
dENhaXJvSGFyZmJ1enpORy5jcHAKQEAgLTM3LDE0ICszNywxOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50LCBp
bnQpIGNvbnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQs
IGludCkgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBIYXJmQnV6
elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKLSAgICBpZiAoc2hhcGVyLnNoYXBlKCZnbHlwaEJ1
ZmZlcikpCi0gICAgICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVy
LCBwb2ludCk7Ci0gICAgZWxzZQotICAgICAgICBMT0dfRVJST1IoIlNoYXBlciBjb3VsZG4ndCBz
aGFwZSBnbHlwaEJ1ZmZlci4iKTsKKyAgICBpZiAoc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikp
IHsKKyAgICAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50ID0gcG9pbnQ7CisgICAgICAgIGZsb2F0
IHN0YXJ0WCA9IHN0YXJ0UG9pbnQueCgpOworICAgICAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4
dCwgcnVuLCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCk7CisgICAgICAgIHJldHVybiBzdGFydFBv
aW50LngoKSAtIHN0YXJ0WDsKKyAgICB9CisgICAgTE9HX0VSUk9SKCJTaGFwZXIgY291bGRuJ3Qg
c2hhcGUgZ2x5cGhCdWZmZXIuIik7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgRm9udDo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQg
Ki8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJr
ICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAv
KiB0byAqLykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKaW5kZXggMzZlOWYyZTA0MTYxZWYwYzEzYzY3NDU0Zjhm
YjBjZDIxOWNiNTgxZS4uMWU0YzAxMzU5MzUyM2ViZTY0MWI3OTY0OTYzMjZhNDIxNWIwMDRiNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1h
Z2VDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFw
SW1hZ2VDRy5jcHAKQEAgLTMyLDcgKzMyLDExIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
Q0cuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiU3ViaW1hZ2VDYWNo
ZVdpdGhUaW1lci5oIgorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25T
ZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9DR0NvbnRleHRQcml2YXRlLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC01Miw2ICs1NiwxMiBAQCBib29sIEZyYW1lRGF0
YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQogCiAgICAgbV9vcmllbnRhdGlvbiA9IERlZmF1
bHRJbWFnZU9yaWVudGF0aW9uOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIG1fZnJhbWVCeXRl
cyA9IDA7CisgICAgbV9zY2FsZSA9IDE7CisgICAgbV9oYXZlSW5mbyA9IGZhbHNlOworI2VuZGlm
CisKICAgICBpZiAobV9mcmFtZSkgewogI2lmIENBQ0hFX1NVQklNQUdFUwogICAgICAgICBzdWJp
bWFnZUNhY2hlKCkuY2xlYXJJbWFnZShtX2ZyYW1lKTsKQEAgLTkwLDExICsxMDAsMjAgQEAgQml0
bWFwSW1hZ2U6OkJpdG1hcEltYWdlKENHSW1hZ2VSZWYgY2dJbWFnZSwgSW1hZ2VPYnNlcnZlciog
b2JzZXJ2ZXIpCiAgICAgLy8gU2V0IG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiB0byBiZSB0
aGUgc2FtZSBhcyBtX3NpemUgc28gaXQncyBub3QgMHgwLgogICAgIG1fc2l6ZVJlc3BlY3RpbmdP
cmllbnRhdGlvbiA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgbV9vcmlnaW5hbFNpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIG1fb3Jp
Z2luYWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsK
KyNlbmRpZgorCiAgICAgbV9mcmFtZXMuZ3JvdygxKTsKICAgICBtX2ZyYW1lc1swXS5tX2ZyYW1l
ID0gQ0dJbWFnZVJldGFpbihjZ0ltYWdlKTsKICAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0g
dHJ1ZTsKICAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7CiAKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgbV9mcmFtZXNbMF0ubV9zY2FsZSA9IDE7CisjZW5kaWYKKwogICAgIGNo
ZWNrRm9yU29saWRDb2xvcigpOwogfQogCkBAIC0xMDgsMTAgKzEyNywyNCBAQCB2b2lkIEJpdG1h
cEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCisj
aWYgIVBMQVRGT1JNKElPUykKICAgICBDR0ltYWdlUmVmIGltYWdlID0gZnJhbWVBdEluZGV4KDAp
OwotICAgIAorI2Vsc2UKKyAgICAvLyBOb3RlLCBjaGVja0ZvclNvbGlkQ29sb3IoKSBtYXkgYmUg
Y2FsbGVkIGZyb20gZnJhbWVBdEluZGV4KCkuIE9uIGlPUyBmcmFtZUF0SW5kZXgoKSBnZXRzIHBh
c3NlZCBhIHNjYWxlSGludAorICAgIC8vIGFyZ3VtZW50IHdoaWNoIGl0IHVzZXMgdG8gdGVsbCBD
RyB0byBjcmVhdGUgYSBzY2FsZWQgZG93biBpbWFnZS4gU2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUg
c2NhbGVIaW50IGhlcmUsIGlmCisgICAgLy8gd2UgY2FsbCBmcmFtZUF0SW5kZXgoKSBhZ2Fpbiwg
d2Ugd291bGQgcGFzcyBpdCB0aGUgZGVmYXVsdCBzY2FsZSBvZiAxIGFuZCB3b3VsZCBlbmQgdXAg
cmVjcmVhdGluZyB0aGUgaW1hZ2UuCisgICAgLy8gU28gd2UgZG8gYSBxdWljayBjaGVjayBhbmQg
Y2FsbCBmcmFtZUF0SW5kZXgoMCkgb25seSBpZiB3ZSBoYXZlbid0IHlldCBjcmVhdGVkIGFuIGlt
YWdlLgorICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBudWxscHRyOworICAgIGlmIChtX2ZyYW1lcy5z
aXplKCkpCisgICAgICAgIGltYWdlID0gbV9mcmFtZXNbMF0ubV9mcmFtZTsKKworICAgIGlmICgh
aW1hZ2UpCisgICAgICAgIGltYWdlID0gZnJhbWVBdEluZGV4KDApOworI2VuZGlmCisKICAgICAv
LyBDdXJyZW50bHkgd2Ugb25seSBjaGVjayBmb3Igc29saWQgY29sb3IgaW4gdGhlIGltcG9ydGFu
dCBzcGVjaWFsIGNhc2Ugb2YgYSAxeDEgaW1hZ2UuCiAgICAgaWYgKGltYWdlICYmIENHSW1hZ2VH
ZXRXaWR0aChpbWFnZSkgPT0gMSAmJiBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSA9PSAxKSB7Cisj
aWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdC
QQogICAgICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBibWFwID0gYWRvcHRDRihDR0JpdG1h
cENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIGRldmljZVJHQkNv
bG9yU3BhY2VSZWYoKSwKICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7CkBAIC0xMjQsNiArMTU3LDIzIEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAgICAgICAgICAgICBtX3NvbGlkQ29s
b3IgPSBDb2xvcigwLCAwLCAwLCAwKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zb2xp
ZENvbG9yID0gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUg
LyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOworI2Vsc2UK
KyAgICAgICAgLy8gRklYTUU6IENhbiB3ZSBzaGFyZSBtb3JlIGNvZGUgd2l0aCB0aGUgTWFjIHBv
cnQ/IEZvcm1lcmx5IHRoZSBNYWMgcG9ydCBjcmVhdGVkIGEgZmxvYXRpbmcgcG9pbnQgYml0bWFw
IGNvbnRleHQsCisgICAgICAgIC8vIGJ1dCBzdWNoIGEgY29udGV4dCB3YXNuJ3Qgc3VwcG9ydCBv
biBpT1MgKHJkYXI6Ly9wcm9ibGVtLzUxMDY1MTQpLiBTbywgb24gaU9TIHdlIGNyZWF0ZWQgYW4g
aW50ZWdyYWwgYml0bWFwCisgICAgICAgIC8vIGNvbnRleHQuIFNpbmNlIDxodHRwczovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjM5Mzk+IHRoZSBNYWMgcG9ydCBjcmVhdGVzIGFuIGludGVn
cmFsIGJpdG1hcCBjb250ZXh0LgorICAgICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsWzRdID0gezAs
IDAsIDAsIDB9OyAvLyBSR0JBCisgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGJpdG1h
cCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2Yo
cGl4ZWwpLCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksCisgICAgICAgICAgICBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgaWYgKCFiaXRtYXApCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIEdyYXBoaWNzQ29udGV4dChiaXRtYXAuZ2V0KCkpLnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgQ0dSZWN0IGRlc3RpbmF0aW9u
UmVjdCA9IHsgezAsIDB9LCB7MSwgMX0gfTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJp
dG1hcC5nZXQoKSwgZGVzdGluYXRpb25SZWN0LCBpbWFnZSk7CisgICAgICAgIGlmICghcGl4ZWxb
M10pCisgICAgICAgICAgICBtX3NvbGlkQ29sb3IgPSBDb2xvcigwLCAwLCAwLCAwKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50
PihwaXhlbFswXSksIHN0YXRpY19jYXN0PGludD4ocGl4ZWxbMV0pLCBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVsWzJdKSwgc3RhdGljX2Nhc3Q8aW50PihwaXhlbFszXSkpOworI2VuZGlmCiAgICAgICAg
IG1faXNTb2xpZENvbG9yID0gdHJ1ZTsKICAgICB9CiB9CkBAIC0xNjIsOSArMjEyLDIxIEBAIFJl
dGFpblB0cjxDRkFycmF5UmVmPiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkKIAogdm9p
ZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRN
b2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCiB7CisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBzdGFydEFuaW1hdGlvbigpOwogCiAgICAgQ0dJbWFnZVJlZiBpbWFn
ZSA9IGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CisjZWxzZQorICAgIHN0YXJ0QW5pbWF0
aW9uKGZhbHNlKTsKKworICAgIENHUmVjdCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdCA9IENH
UmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRlc3RSZWN0LCBDR0NvbnRleHRHZXRDVE0oY3R4dC0+
cGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Cisg
ICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNv
bnRleHRzLgorICAgIGlmIChDR0NvbnRleHRHZXRUeXBlKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgp
KSA9PSBrQ0dDb250ZXh0VHlwZVBERikKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKGNvcHlVbnNj
YWxlZEZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpOworICAgIGVsc2UKKyAgICAgICAgaW1h
Z2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN0ZDo6bWluPGZsb2F0PigxLjBmLCBz
dGQ6Om1heCh0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLndpZHRoICAvIHNyY1JlY3Qu
d2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0
LmhlaWdodCgpKSkpOworI2VuZGlmCiAgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFy
bHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKICAgICAKQEAg
LTE3MywxOCArMjM1LDQxIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgZmxvYXQgc2NhbGUgPSBtX2ZyYW1l
c1ttX2N1cnJlbnRGcmFtZV0ubV9zY2FsZTsKKyNlbmRpZgogICAgIEZsb2F0U2l6ZSBzZWxmU2l6
ZSA9IGN1cnJlbnRGcmFtZVNpemUoKTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9u
OwogCiAgICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVz
cGVjdEltYWdlT3JpZW50YXRpb24pCiAgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRh
dGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGN0
eHQtPmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgc2VsZlNpemUsIHN0eWxlQ29sb3JTcGFj
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHNjYWxlLCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmll
bnRhdGlvbik7CisjZWxzZQogICAgIGN0eHQtPmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgc2VsZlNp
emUsIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIGNvbXBvc2l0ZU9wLCBibGVu
ZE1vZGUsIG9yaWVudGF0aW9uKTsKKyNlbmRpZgogCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkK
ICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQogCisjaWYgUExBVEZP
Uk0oSU9TKQorUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFt
ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNp
emUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUpCisgICAgICAgIGNhY2hlRnJhbWUoaW5k
ZXgsIDEpOworCisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX3NjYWxlID09IDEgJiYgIW1fc291
cmNlLmlzU3Vic2FtcGxlZCgpKQorICAgICAgICByZXR1cm4gQ0dJbWFnZVJldGFpbihtX2ZyYW1l
c1tpbmRleF0ubV9mcmFtZSk7CisKKyAgICByZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVBdElu
ZGV4KGluZGV4KTsKK30KKyNlbmRpZgorCiB9CiAKICNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCmluZGV4IGQ3NGI0
YjQ3MGM1YjQ5NmNmMzA2ZTYxNTEwM2I4YTA4MWQyYjAwYmIuLjkyMzY2ZTJhYmZjZWVjNDgxMzM5
M2U0N2I1MDcwZjYxOTliZDMwMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0NvbG9yQ0cuY3BwCkBAIC0zMSwxMCArMzEsMzggQEAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRp
b25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR0NvbG9yVHJhbnNmb3JtLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVH
cmFwaGljcy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNlbmRpZiAvLyAhUExB
VEZPUk0oSU9TKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShJT1MpCitD
R0NvbG9yUmVmIGNyZWF0ZUNHQ29sb3JXaXRoRGV2aWNlV2hpdGUoQ0dGbG9hdCB3aGl0ZSwgQ0dG
bG9hdCBhbHBoYSkKK3sKKyAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIGdyYXlTcGFjZSA9IENH
Q29sb3JTcGFjZUNyZWF0ZURldmljZUdyYXkoKTsKKyAgICBjb25zdCBDR0Zsb2F0IGNvbXBvbmVu
dHNbXSA9IHsgd2hpdGUsIGFscGhhIH07CisgICAgcmV0dXJuIENHQ29sb3JDcmVhdGUoZ3JheVNw
YWNlLCBjb21wb25lbnRzKTsKK30KKworc3RhdGljIENHQ29sb3JSZWYgY3JlYXRlQ0dDb2xvcldp
dGhEZXZpY2VSR0JBKENHQ29sb3JSZWYgc291cmNlQ29sb3IpCit7CisgICAgaWYgKCFzb3VyY2VD
b2xvciB8fCBDRkVxdWFsKENHQ29sb3JHZXRDb2xvclNwYWNlKHNvdXJjZUNvbG9yKSwgZGV2aWNl
UkdCQ29sb3JTcGFjZVJlZigpKSkKKyAgICAgICAgcmV0dXJuIENHQ29sb3JSZXRhaW4oc291cmNl
Q29sb3IpOworCisgICAgUmV0YWluUHRyPENHQ29sb3JUcmFuc2Zvcm1SZWY+IGNvbG9yVHJhbnNm
b3JtID0gYWRvcHRDRihDR0NvbG9yVHJhbnNmb3JtQ3JlYXRlKGRldmljZVJHQkNvbG9yU3BhY2VS
ZWYoKSwgbnVsbHB0cikpOworICAgIGlmICghY29sb3JUcmFuc2Zvcm0pCisgICAgICAgIHJldHVy
biBDR0NvbG9yUmV0YWluKHNvdXJjZUNvbG9yKTsKKworICAgIC8vIENHQ29sb3JUcmFuc2Zvcm1D
b252ZXJ0Q29sb3IoKSByZXR1cm5zIGEgKzEgcmV0YWluZWQgb2JqZWN0LgorICAgIHJldHVybiBD
R0NvbG9yVHJhbnNmb3JtQ29udmVydENvbG9yKGNvbG9yVHJhbnNmb3JtLmdldCgpLCBzb3VyY2VD
b2xvciwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQorCiBDb2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikKIHsKICAgICBpZiAoIWNvbG9y
KSB7CkBAIC00Myw4ICs3MSwxNyBAQCBDb2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgc2l6ZV90IG51
bUNvbXBvbmVudHMgPSBDR0NvbG9yR2V0TnVtYmVyT2ZDb21wb25lbnRzKGNvbG9yKTsKICAgICBj
b25zdCBDR0Zsb2F0KiBjb21wb25lbnRzID0gQ0dDb2xvckdldENvbXBvbmVudHMoY29sb3IpOwor
I2Vsc2UKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY29ycmVjdGVkQ29sb3IgPSBhZG9wdENG
KGNyZWF0ZUNHQ29sb3JXaXRoRGV2aWNlUkdCQShjb2xvcikpOworICAgIGlmICghY29ycmVjdGVk
Q29sb3IpCisgICAgICAgIGNvcnJlY3RlZENvbG9yID0gY29sb3I7CisKKyAgICBzaXplX3QgbnVt
Q29tcG9uZW50cyA9IENHQ29sb3JHZXROdW1iZXJPZkNvbXBvbmVudHMoY29ycmVjdGVkQ29sb3Iu
Z2V0KCkpOworICAgIGNvbnN0IENHRmxvYXQqIGNvbXBvbmVudHMgPSBDR0NvbG9yR2V0Q29tcG9u
ZW50cyhjb3JyZWN0ZWRDb2xvci5nZXQoKSk7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAog
ICAgIGZsb2F0IHIgPSAwOwogICAgIGZsb2F0IGcgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKaW5kZXggZjM3ZTA3ZjMx
OTg4OGUyNzVjNmY0NTkyYjI5YzE0MjdiOWQ2OGU1ZC4uMjUwZWQ1MDVkZmYyOWI5NTBmMmEwYTNm
MzFmY2IzY2VmNGE5Y2M1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9GbG9hdFBvaW50Q0cuY3BwCkBAIC0yOSw3ICsyOSwxMSBAQAogCiAjaWYgVVNF
KENHKQogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2Vz
L0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0Nv
cmVHcmFwaGljcy5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCmluZGV4
IDRlYTA4M2FlYTNmZWE1MjY0OTdkMWIxYTgwNDQwZGMyNmNjNWM1MzAuLjhhMGE1M2M2MWQyNjY3
ZWJmNGRjMGZkOWY0NDVlNWYzYzdmNjI3N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTI5LDcgKzI5LDExIEBACiAK
ICNpZiBVU0UoQ0cpCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9u
U2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3Jh
cGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVDRy5j
cHAKaW5kZXggMTRlMTRmYzJhMzk5ZGQxN2RiMTI1MjAyNjE0MTQ5MjlkMzZhOWY2MC4uNGYxZTEw
OGRlMzlhMGMwNTc2ZmY1MGZkM2NjNjljNWMxYjQ3MTgzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRTaXplQ0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcApAQCAtMjksNyArMjks
MTEgQEAKIAogI2lmIFVTRShDRykKIAorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBw
bGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YWRpZW50Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGll
bnRDRy5jcHAKaW5kZXggNDdkOWM3ZjYwOGJiMGFkMDQ1NGU5ZGZlMDUzNzcxOTM5OGE2OTgzMC4u
Mzg3MTBhMTczNTgwOWViZmJjZGJhYjczMzIzYTdkZWE1YmQ2MDE4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKQEAgLTI4LDcg
KzI4LDExIEBACiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggYTE5NzQ1ZTI4ZTI2NTIx
YmRmMDg0YzBkZGZjZDlkNjkyMjEwMTJkZS4uM2Q0ZDNhZjk2YTI2ZTg0OTZjMWMyNjQ5OTExMWU2
OWUwMWQ1Mjk3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtNTEsMTAgKzUxLDE3IEBACiAjaW5j
bHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2Vu
ZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4
dEdTdGF0ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjZW5kaWYKKworI2lmICFQTEFU
Rk9STShJT1MpCiBleHRlcm4gIkMiIHsKICAgICBDR19FWFRFUk4gdm9pZCBDR0NvbnRleHRTZXRD
VE0oQ0dDb250ZXh0UmVmLCBDR0FmZmluZVRyYW5zZm9ybSk7CiAgICAgQ0dfRVhURVJOIENHQWZm
aW5lVHJhbnNmb3JtIENHQ29udGV4dEdldEJhc2VDVE0oQ0dDb250ZXh0UmVmKTsKIH07CisjZW5k
aWYgLy8gIVBMQVRGT1JNKElPUykKIAogLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgdXNpbmcgZGVj
bGFyYXRpb24gc2hvdWxkIGJlIGluIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPi4KIHVzaW5nIFdURjo6
cGFpckludEhhc2g7CkBAIC04Miw2ICs4OSw5IEBAIENHQ29sb3JTcGFjZVJlZiBkZXZpY2VSR0JD
b2xvclNwYWNlUmVmKCkKIAogQ0dDb2xvclNwYWNlUmVmIHNSR0JDb2xvclNwYWNlUmVmKCkKIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKTsK
KyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAgICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBzUkdC
U3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQik7CiAj
aWYgUExBVEZPUk0oV0lOKQogICAgIC8vIE91dC1vZi1kYXRlIENHIGluc3RhbGxhdGlvbnMgd2ls
bCBub3QgaG9ub3Iga0NHQ29sb3JTcGFjZVNSR0IuIFRoaXMgbG9naWMgYXZvaWRzCkBAIC05Myw3
ICsxMDMsMTUgQEAgQ0dDb2xvclNwYWNlUmVmIHNSR0JDb2xvclNwYWNlUmVmKCkKICAgICByZXR1
cm4gc1JHQlNwYWNlOwogfQogCi0jaWYgUExBVEZPUk0oV0lOKQorI2lmIFBMQVRGT1JNKElPUykK
K3ZvaWQgc2V0U3Ryb2tlQW5kRmlsbENvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0NvbG9y
UmVmIGNvbG9yKQoreworICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRl
eHQsIGNvbG9yKTsKKyAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29udGV4dCwg
Y29sb3IpOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKworI2lmIFBMQVRGT1JNKFdJTikg
fHwgUExBVEZPUk0oSU9TKQogQ0dDb2xvclNwYWNlUmVmIGxpbmVhclJHQkNvbG9yU3BhY2VSZWYo
KQogewogICAgIC8vIEZJWE1FOiBXaW5kb3dzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBsaW5lYXIg
c1JHQiwgdGhpcyBpcyB0cmFja2VkIGJ5IGh0dHA6Ly93ZWJraXQub3JnL2IvODAwMDAuCkBAIC0x
MDEsMTEgKzExOSwyMCBAQCBDR0NvbG9yU3BhY2VSZWYgbGluZWFyUkdCQ29sb3JTcGFjZVJlZigp
CiB9CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Jbml0KENHQ29udGV4dFJlZiBjZ0NvbnRleHQpCisjZWxzZQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtSW5pdChDR0NvbnRleHRSZWYgY2dDb250ZXh0LCBib29sIHNob3Vs
ZFVzZUNvbnRleHRDb2xvcnMpCisjZW5kaWYKIHsKICAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCk7CiAgICAgc2V0UGFpbnRpbmdEaXNhYmxl
ZCghY2dDb250ZXh0KTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChjZ0NvbnRleHQpIHsK
KyNlbHNlCisgICAgbV9zdGF0ZS5zaG91bGRVc2VDb250ZXh0Q29sb3JzID0gc2hvdWxkVXNlQ29u
dGV4dENvbG9yczsKKyAgICBpZiAoY2dDb250ZXh0ICYmIHNob3VsZFVzZUNvbnRleHRDb2xvcnMp
IHsKKyNlbmRpZgogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5
bmMgd2l0aCBvdXIgc3RhdGUuCiAgICAgICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xv
cigpLCBmaWxsQ29sb3JTcGFjZSgpKTsKICAgICAgICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihz
dHJva2VDb2xvcigpLCBzdHJva2VDb2xvclNwYWNlKCkpOwpAQCAtMTQxLDExICsxNjgsMTkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKICAgICBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAor
I2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2Uo
UGFzc05hdGl2ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgZmxvYXQgc2NhbGUsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQorI2Vs
c2UKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdl
UHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdl
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCisjZW5kaWYKIHsKICAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2UoaW1hZ2VQdHIpOwogCiAgICAgZmxvYXQgY3VyckhlaWdodCA9IG9yaWVudGF0
aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpIDog
Q0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IFVuYXBwbHkgdGhlIHNjYWxpbmcgc2luY2Ugd2UgYXJlIGdldHRpbmcgdGhpcyBmcm9tIGEgc2Nh
bGVkIGJpdG1hcC4KKyAgICBjdXJySGVpZ2h0IC89IHNjYWxlOworI2VuZGlmCiAKICAgICBpZiAo
Y3VyckhlaWdodCA8PSBzcmNSZWN0LnkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUzLDYgKzE4
OCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJ
bWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRTaQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsK
IAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBBbnRpLWFsaWFzaW5nIGlzIG9uIGJ5IGRlZmF1
bHQgb24gdGhlIGlQaG9uZS4gTmVlZCB0byB0dXJuIGl0IG9mZiB3aGVuIGRyYXdpbmcgaW1hZ2Vz
LgorICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBmYWxzZSk7CisjZW5k
aWYKKwogICAgIGJvb2wgc2hvdWxkVXNlU3ViaW1hZ2UgPSBmYWxzZTsKIAogICAgIC8vIElmIHRo
ZSBzb3VyY2UgcmVjdCBpcyBhIHN1YnBvcnRpb24gb2YgdGhlIGltYWdlLCB0aGVuIHdlIGNvbXB1
dGUgYW4gaW5mbGF0ZWQgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdpbGwgaG9sZCB0aGUgZW50aXJl
IGltYWdlCkBAIC0xODIsNiArMjIyLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRp
dmVJbWFnZShQYXNzTmF0aXZlSW1hZ2VQdHIgaW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2kKICAgICAg
ICAgICAgIHN1YmltYWdlUmVjdC5zZXRIZWlnaHQoY2VpbGYoc3ViaW1hZ2VSZWN0LmhlaWdodCgp
ICsgdG9wUGFkZGluZykpOwogICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQo
c3ViaW1hZ2VSZWN0LmhlaWdodCgpIC8geVNjYWxlKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAgICAgICAgIHN1YmltYWdlUmVjdC5zY2FsZShzY2FsZSwgc2NhbGUpOworI2VuZGlmCiAjaWYg
Q0FDSEVfU1VCSU1BR0VTCiAgICAgICAgICAgICBpbWFnZSA9IHN1YmltYWdlQ2FjaGUoKS5nZXRT
dWJpbWFnZShpbWFnZS5nZXQoKSwgc3ViaW1hZ2VSZWN0KTsKICNlbHNlCkBAIC0yMDQsNiArMjQ3
LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUlt
YWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpCiAgICAgaWYgKCFzaG91bGRVc2VTdWJpbWFn
ZSAmJiBjdXJySGVpZ2h0IDwgaW1hZ2VTaXplLmhlaWdodCgpKQogICAgICAgICBhZGp1c3RlZERl
c3RSZWN0LnNldEhlaWdodChhZGp1c3RlZERlc3RSZWN0LmhlaWdodCgpICogY3VyckhlaWdodCAv
IGltYWdlU2l6ZS5oZWlnaHQoKSk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gQWxpZ24g
dG8gcGl4ZWwgYm91bmRhcmllcworICAgIGFkanVzdGVkRGVzdFJlY3QgPSByb3VuZFRvRGV2aWNl
UGl4ZWxzKGFkanVzdGVkRGVzdFJlY3QpOworI2VuZGlmCisKICAgICBzZXRQbGF0Zm9ybUNvbXBv
c2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKIAogICAgIC8vIEltYWdlT3JpZW50YXRpb24g
ZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKQpAQCAtMzIzLDggKzM3MSwxNCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50MSwgY29u
c3QgSW50UG9pbnQmIHBvaW50MikKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKLSAgICBpZiAoc2hvdWxkQW50aWFsaWFzKCkpCi0gICAgICAgIENHQ29u
dGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBmYWxzZSk7CisgICAgaWYgKHNob3VsZEFu
dGlhbGlhcygpKSB7CisgICAgICAgIGJvb2wgd2lsbEFudGlhbGlhcyA9IGZhbHNlOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICAgICAgLy8gRm9yY2UgYW50aWFsaWFzaW5nIG9uIGZvciBsaW5lIHBh
dHRlcm5zIGFzIHRoZXkgZG9uJ3QgbG9vayBnb29kIHdpdGggaXQgdHVybmVkIG9mZiAoPHJkYXI6
Ly9wcm9ibGVtLzU0NTk3NzI+KS4KKyAgICAgICAgd2lsbEFudGlhbGlhcyA9IHBhdFdpZHRoOwor
I2VuZGlmCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB3aWxs
QW50aWFsaWFzKTsKKyAgICB9CiAKICAgICBpZiAocGF0V2lkdGgpIHsKICAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKQEAgLTM4NSw2ICs0MzksMzYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50
JiBwb2ludDIpCiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB0
cnVlKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Sm9pbmVkTGluZXMoQ0dQb2ludCBwb2ludHNbXSwgdW5zaWduZWQgY291bnQsIGJvb2wgYW50aWFs
aWFzLCBDR0xpbmVDYXAgbGluZUNhcCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8
ICFjb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKKyAgICBmbG9hdCB3aWR0aCA9IENHQ29udGV4dEdldExpbmVXaWR0
aChjb250ZXh0KTsKKworICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisgICAgCisg
ICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIGFudGlhbGlhcyk7CisKKyAg
ICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgd2lkdGggPCAxID8gMSA6IHdpZHRoKTsK
KworICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICAKKyAgICBDR0NvbnRleHRT
ZXRMaW5lQ2FwKGNvbnRleHQsIGxpbmVDYXApOworICAgIAorICAgIENHQ29udGV4dE1vdmVUb1Bv
aW50KGNvbnRleHQsIHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIENHQ29udGV4dEFkZExpbmVU
b1BvaW50KGNvbnRleHQsIHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7CisKKyAgICBDR0NvbnRl
eHRTdHJva2VQYXRoKGNvbnRleHQpOworCisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250
ZXh0KTsKK30KKyNlbmRpZgorCiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0
aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3RWxsaXBzZShjb25zdCBJbnRSZWN0JiByZWN0KQogewpAQCAtMzk2LDYgKzQ4MCwzMSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKICAg
ICBkcmF3UGF0aChwYXRoKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQocGxhdGZvcm1Db250ZXh0KCkpOworCisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250
ZXh0KTsKKworICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGZpbGxDb2xvcigpLCBmaWxsQ29s
b3JTcGFjZSgpKTsKKyAgICBzZXRDR1N0cm9rZUNvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9yKCks
IHN0cm9rZUNvbG9yU3BhY2UoKSk7CisKKyAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4
dCwgc3Ryb2tlVGhpY2tuZXNzKCkpOworICAgIAorICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250
ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRFbGxpcHNlSW5SZWN0KGNvbnRleHQsIHJlY3QpOworCisg
ICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChj
b250ZXh0KTsKKyAgICAKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworfQor
I2VuZGlmCisKIHN0YXRpYyB2b2lkIGFkZENvbnZleFBvbHlnb25Ub1BhdGgoUGF0aCYgcGF0aCwg
c2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCiB7CiAgICAg
QVNTRVJUKG51bWJlck9mUG9pbnRzID4gMCk7CkBAIC05MDMsNyArMTAxMiwxMSBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKQogCiBzdGF0aWMgdm9p
ZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIENHRmxvYXQmIHhPZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCiB7Ci0jaWYg
IVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKGNvbnRl
eHQpOworICAgIFVOVVNFRF9QQVJBTSh4T2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oeU9mZnNl
dCk7CisjZWxzZQogICAgIGlmIChjb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMTIzNSw2ICsxMzQ4LDU5IEBAIEZsb2F0UmVjdCBHcmFwaGljc0Nv
bnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGlu
Z01vCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdo
dCAtIHJvdW5kZWRPcmlnaW4pOwogfQogCisvLyBGSVhNRTogV2Ugc2hvdWxkIGxvb2sgdG8gY29u
c29saWRhdGUgdGhlIGlPUyBhbmQgbm9uLWlPUyBpbXBsZW1lbnRhdGlvbnMgb2YKKy8vIGNvbXB1
dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoKSBhbmQgY29tcHV0ZUxpbmVC
b3VuZHNGb3JUZXh0KCkuCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIEZsb2F0UmVjdCBjb21w
dXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KEdyYXBoaWNzQ29udGV4dCYg
aW5pdGlhbENvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgYm9v
bCBwcmludGluZywgYm9vbCYgc2hvdWxkQW50aWFsaWFzLCBDb2xvciYgY29sb3IpCit7CisgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBpbml0aWFsQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsK
KyAgICBDR1BvaW50IG9yaWdpbjsKKyAgICBDR0Zsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KGlu
aXRpYWxDb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCAwLjVmKTsKKworICAgIHNob3VsZEFudGlh
bGlhcyA9IHRydWU7CisgICAgaWYgKHByaW50aW5nKQorICAgICAgICBvcmlnaW4gPSBDR1BvaW50
TWFrZShwb2ludC54KCksIHBvaW50LnkoKSk7CisgICAgZWxzZSB7CisgICAgICAgIENHQWZmaW5l
VHJhbnNmb3JtIHQgPSBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNmb3Jt
KGNvbnRleHQpOworICAgICAgICBpZiAoQWZmaW5lVHJhbnNmb3JtKHQpLnByZXNlcnZlc0F4aXNB
bGlnbm1lbnQoKSkKKyAgICAgICAgICAgIHNob3VsZEFudGlhbGlhcyA9IGZhbHNlOworCisgICAg
ICAgIC8vIFRoaXMgY29kZSBhbHdheXMgZHJhd3MgYSBsaW5lIHRoYXQgaXMgYXQgbGVhc3Qgb25l
LXBpeGVsIGxpbmUgaGlnaCwKKyAgICAgICAgLy8gd2hpY2ggdGVuZHMgdG8gdmlzdWFsbHkgb3Zl
cndoZWxtIHRleHQgYXQgc21hbGwgc2NhbGVzLiBUbyBjb3VudGVyIHRoaXMKKyAgICAgICAgLy8g
ZWZmZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRvIHRoZSB1bmRlcmxpbmUgY29sb3Igd2hlbiB0
ZXh0IGlzIGF0IHNtYWxsIHNjYWxlcy4KKworICAgICAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUg
aW4geCBkaW1lbnNpb24sIGFzc3VtaW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KKyAgICAg
ICAgQ0dGbG9hdCBzY2FsZSA9IHQuYiA/IHNxcnRmKHQuYSAqIHQuYSArIHQuYiAqIHQuYikgOiB0
LmE7CisgICAgICAgIGlmIChzY2FsZSA8IDEuMCkgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0IE1pblVuZGVybGluZUFscGhhID0gMC40ZjsKKyAgICAgICAgICAgIGZsb2F0IHNoYWRl
ID0gc2NhbGUgPiBNaW5VbmRlcmxpbmVBbHBoYSA/IHNjYWxlIDogTWluVW5kZXJsaW5lQWxwaGE7
CisgICAgICAgICAgICBpbnQgYWxwaGEgPSBjb2xvci5hbHBoYSgpICogc2hhZGU7CisgICAgICAg
ICAgICBjb2xvciA9IENvbG9yKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVl
KCksIGFscGhhKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERvbid0IG9mZnNldCBsaW5lIGZy
b20gYm90dG9tIG9mIHRleHQgaWYgc2NhbGUgaXMgbGVzcyB0aGFuIE9mZnNldFVuZGVybGluZVNj
YWxlLgorICAgICAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBPZmZzZXRVbmRlcmxpbmVTY2FsZSA9
IDAuNGY7CisgICAgICAgIENHRmxvYXQgZHkgPSBzY2FsZSA8IE9mZnNldFVuZGVybGluZVNjYWxl
ID8gMCA6IDE7CisKKyAgICAgICAgLy8gSWYgd2UndmUgaW5jcmVhc2VkIHRoZSB0aGlja25lc3Mg
b2YgdGhlIGxpbmUsIG1ha2Ugc3VyZSB0byBtb3ZlIHRoZSBsb2NhdGlvbiB0b28uCisgICAgICAg
IGlmICh0aGlja25lc3MgPiAxKQorICAgICAgICAgICAgZHkgKz0gcm91bmRmKHRoaWNrbmVzcykg
LSAxOworCisgICAgICAgIENHUG9pbnQgZGV2aWNlUG9pbnQgPSBDR1BvaW50QXBwbHlBZmZpbmVU
cmFuc2Zvcm0ocG9pbnQsIHQpOworICAgICAgICBDR1BvaW50IGRldmljZU9yaWdpbiA9IENHUG9p
bnRNYWtlKHJvdW5kZihkZXZpY2VQb2ludC54KSwgY2VpbGYoZGV2aWNlUG9pbnQueSkgKyBkeSk7
CisgICAgICAgIG9yaWdpbiA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShkZXZpY2VPcmln
aW4sIENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KHQpKTsKKyAgICAgICAgdGhpY2tuZXNzIC89IHNj
YWxlOworICAgIH0KKyAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbi54LCBvcmlnaW4ueSwgd2lk
dGgsIHRoaWNrbmVzcyk7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVM
aW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpCit7CisgICAgYm9vbCBkdW1teUJvb2w7CisgICAgQ29sb3IgZHVtbXlDb2xv
cjsKKyAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4
dCgqdGhpcywgcG9pbnQsIHdpZHRoLCBwcmludGluZywgZHVtbXlCb29sLCBkdW1teUNvbG9yKTsK
K30KKyNlbHNlCiBzdGF0aWMgRmxvYXRSZWN0IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFz
aW5nTW9kZUZvclRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcsIGJvb2wmIHNob3VsZEFudGlhbGlh
cykKIHsKICAgICBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOwpAQCAtMTI3MCw2ICsxNDM2LDcgQEAg
RmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG8KICAgICBib29sIGR1bW15OwogICAgIHJldHVybiBjb21w
dXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KCp0aGlzLCBwb2ludCwgd2lk
dGgsIHByaW50aW5nLCBkdW1teSk7CiB9CisjZW5kaWYKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpCiB7CkBAIC0xMjc5LDYgKzE0NDYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwg
Ym9vbAogICAgIGlmICh3aWR0aCA8PSAwKQogICAgICAgICByZXR1cm47CiAKKyNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzTGluZTsKICAgICBGbG9hdFJlY3QgYm91
bmRzID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCgqdGhpcywg
cG9pbnQsIHdpZHRoLCBwcmludGluZywgc2hvdWxkQW50aWFsaWFzTGluZSk7CiAKQEAgLTEyOTcs
MTAgKzE0NjUsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJvb2wKIAogICAgIGlmIChyZXN0b3Jl
QW50aWFsaWFzTW9kZSkKICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKHBsYXRm
b3JtQ29udGV4dCgpLCB0cnVlKTsKKyNlbHNlCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisg
ICAgQ29sb3IgY29sb3Ioc3Ryb2tlQ29sb3IoKSk7CisgICAgCisgICAgYm9vbCBzaG91bGRBbnRp
YWxpYXNMaW5lOworICAgIEZsb2F0UmVjdCByZWN0ID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRp
YWxpYXNpbmdNb2RlRm9yVGV4dCgqdGhpcywgcG9pbnQsIHdpZHRoLCBwcmludGluZywgc2hvdWxk
QW50aWFsaWFzTGluZSwgY29sb3IpOworCisgICAgaWYgKG1fc3RhdGUuc2hvdWxkVXNlQ29udGV4
dENvbG9ycykKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgY29sb3IsIHN0cm9rZUNv
bG9yU3BhY2UoKSk7CisgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgcmVjdCk7CisKKyAg
ICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworI2VuZGlmCiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgSW50UmVj
dCYgZGVzdFJlY3QpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEzMTksNiArMTUwMywxMCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KQogCiAgICAgQ0dQREZDb250ZXh0U2V0VVJMRm9yUmVjdChjb250ZXh0LCB1
cmxSZWYuZ2V0KCksCiAgICAgICAgIENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKHJlY3QsIENH
Q29udGV4dEdldENUTShjb250ZXh0KSkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obGluayk7
CisgICAgVU5VU0VEX1BBUkFNKGRlc3RSZWN0KTsKKyNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0
eSBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHLmNwcAppbmRleCBiMTNkMTIxMzQwYmIzMTEzOThhNjkyODc5NmQzODk5ZGVk
Y2ZjZWZjLi5lN2Q2ZjQzNmU0YzY3NmI4YzVkYjQ5YTRmZDY2MTliNDAwOGQ3OTA5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcApAQCAtMzMsOCArMzMsMTMgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgog
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNp
bmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNs
dWRlIDxtYXRoLmg+CisjaWYgIVBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNl
cnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2VuZGlm
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRo
bWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtNTAsMTAgKzU1LDE3IEBA
CiAjaW5jbHVkZSA8SU9TdXJmYWNlL0lPU3VyZmFjZS5oPgogI2VuZGlmCiAKKy8vIENBIHVzZXMg
QVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9w
dGltaXplZC4KKyNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1MpCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCisjaWYg
UExBVEZPUk0oSU9TKQorc3RhdGljIGNvbnN0IGludCBtYXhJT1N1cmZhY2VEaW1lbnNpb24gPSAy
MDQ4OworI2Vsc2UKIHN0YXRpYyBjb25zdCBpbnQgbWF4SU9TdXJmYWNlRGltZW5zaW9uID0gNDA5
NjsKKyNlbmRpZgogCiBzdGF0aWMgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4gY3JlYXRlSU9TdXJm
YWNlKGNvbnN0IEludFNpemUmIHNpemUpCiB7CkBAIC03MCw4ICs4MiwxMyBAQCBzdGF0aWMgUmV0
YWluUHRyPElPU3VyZmFjZVJlZj4gY3JlYXRlSU9TdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUp
CiAgICAgaWYgKCFhbGxvY1NpemUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3Qgdm9p
ZCAqa2V5c1s2XTsKLSAgICBjb25zdCB2b2lkICp2YWx1ZXNbNl07CisjaWYgIVBMQVRGT1JNKElP
UykKKyAgICBjb25zdCB2b2lkKiBrZXlzWzZdOworICAgIGNvbnN0IHZvaWQqIHZhbHVlc1s2XTsK
KyNlbHNlCisgICAgY29uc3Qgdm9pZCoga2V5c1s3XTsKKyAgICBjb25zdCB2b2lkKiB2YWx1ZXNb
N107CisjZW5kaWYKICAgICBrZXlzWzBdID0ga0lPU3VyZmFjZVdpZHRoOwogICAgIHZhbHVlc1sw
XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUsICZ3aWR0aCk7CiAgICAga2V5
c1sxXSA9IGtJT1N1cmZhY2VIZWlnaHQ7CkBAIC04NCw5ICsxMDEsMTQgQEAgc3RhdGljIFJldGFp
blB0cjxJT1N1cmZhY2VSZWY+IGNyZWF0ZUlPU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplKQog
ICAgIHZhbHVlc1s0XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxvbmdUeXBlLCAmYnl0
ZXNQZXJSb3cpOwogICAgIGtleXNbNV0gPSBrSU9TdXJmYWNlQWxsb2NTaXplOwogICAgIHZhbHVl
c1s1XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxvbmdUeXBlLCAmYWxsb2NTaXplKTsK
KyNpZiBQTEFURk9STShJT1MpCisgICAga2V5c1s2XSA9IGtJT1N1cmZhY2VDYWNoZU1vZGU7Cisg
ICAgaW50IGNhY2hlTW9kZSA9IGtJT01hcFdyaXRlQ29tYmluZUNhY2hlOworICAgIHZhbHVlc1s2
XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUsICZjYWNoZU1vZGUpOworI2Vu
ZGlmCiAKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBkaWN0ID0gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCA2LCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBkaWN0ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCBXVEZf
QVJSQVlfTEVOR1RIKHZhbHVlcyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpOyArK2kpCiAgICAgICAgIENGUmVsZWFzZSh2
YWx1ZXNbaV0pOwogCiAgICAgcmV0dXJuIGFkb3B0Q0YoSU9TdXJmYWNlQ3JlYXRlKGRpY3QuZ2V0
KCkpKTsKQEAgLTE2OSw3ICsxOTEsMTEgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0
IEludFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90
PihtX2RhdGEubV9kYXRhKSAmIDMpKTsKIAorI2lmIFVTRV9BUkdCMzIKKyAgICAgICAgbV9kYXRh
Lm1fYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRt
YXBCeXRlT3JkZXIzMkhvc3Q7CisjZWxzZQogICAgICAgICBtX2RhdGEubV9iaXRtYXBJbmZvID0g
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OworI2VuZGlmCiAgICAgICAgIGNnQ29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5tX2RhdGEsIG1fZGF0YS5t
X2JhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLm1fYmFja2luZ1N0b3JlU2l6ZS5oZWln
aHQoKSwgOCwgbV9kYXRhLm1fYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5tX2NvbG9y
U3BhY2UsIG1fZGF0YS5tX2JpdG1hcEluZm8pKTsKICAgICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBp
bWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgogICAgICAgICBtX2RhdGEubV9kYXRhUHJvdmlkZXIg
PSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLm1fZGF0YSwg
bnVtQnl0ZXMudW5zYWZlR2V0KCksIHJlbGVhc2VJbWFnZURhdGEpKTsKQEAgLTI3OCw3ICszMDQs
MTMgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwKIAogICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNy
Y1JlY3QgPSBzcmNSZWN0OwogICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LT5kcmF3TmF0aXZlSW1h
Z2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5tX2JhY2tpbmdTdG9yZVNpemUsIGNvbG9yU3BhY2UsIGRl
c3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBibGVuZE1vZGUpOworICAgIGRlc3RDb250ZXh0
LT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5tX2JhY2tpbmdTdG9yZVNpemUs
IGNvbG9yU3BhY2UsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsCisjaWYgUExBVEZPUk0oSU9T
KQorICAgICAgICAxLjBmLCAvLyBEZWZhdWx0IHNjYWxlIG9mIDEuMAorI2VuZGlmCisgICAgICAg
IG9wLAorICAgICAgICBibGVuZE1vZGUKKyAgICApOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKQEAgLTM3NSw3ICs0MDcsNyBA
QCB2b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoTXVsdGlwbHkgbXVsdGlwbGllZCwgVWlu
dDhDbGFtcGVkQXJyYXkqIHNvdXJjZSwgYwogCiBzdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpw
ZWdVVEkoKQogewotI2lmIFBMQVRGT1JNKFdJTikKKyNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRG
T1JNKFdJTikKICAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBDRlNU
UigicHVibGljLmpwZWciKTsKICNlbmRpZgogICAgIHJldHVybiBrVVRUeXBlSlBFRzsKQEAgLTM4
Myw3ICs0MTUsNyBAQCBzdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpwZWdVVEkoKQogICAgIAog
c3RhdGljIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYg
IVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gYWRvcHRDRihVVFR5cGVDcmVhdGVQcmVmZXJyZWRJ
ZGVudGlmaWVyRm9yVGFnKGtVVFRhZ0NsYXNzTUlNRVR5cGUsIG1pbWVUeXBlLmNyZWF0ZUNGU3Ry
aW5nKCkuZ2V0KCksIDApKTsKICNlbHNlCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8g
SXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCmlu
ZGV4IGRlNGMzODdlMTY3YTUxOTc4YWFmOGJhZjhjOWY1OWJlYjc5YTc1MzkuLjlmZDI4ZDQ1N2Zj
YjgwY2U0YjRhNTcwOWRmYTRjMTg5YjMyMjliNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKQEAgLTQ4
LDYgKzQ4LDkgQEAgc3RydWN0IFNjYW5saW5lRGF0YSB7CiB9OwogI2VuZGlmCiAKKy8vIENBIHVz
ZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlz
IG9wdGltaXplZC4KKyNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1MpCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50
U2l6ZSYpCkBAIC02MCw3ICs2Myw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRh
KGNvbnN0IEludFNpemUmKQogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCiAKLSNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQorI2lmIFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKIHN0YXRpYyB2b2lkIGNvbnZlcnRTY2FubGluZSh2b2lk
KiBkYXRhLCBzaXplX3QgdGlsZU51bWJlciwgYm9vbCBwcmVtdWx0aXBseSkKIHsKICAgICBTY2Fu
bGluZURhdGEqIHNjYW5saW5lRGF0YSA9IHN0YXRpY19jYXN0PFNjYW5saW5lRGF0YSo+KGRhdGEp
OwpAQCAtMTIyLDEzICsxMjUsMTMgQEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1h
Z2VCdWZmZXJEYXRhOjpnZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnMKICAgICAKICAg
ICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwogICAgIGludCBkZXN0eCA9IDA7Ci0gICAgaW50IGRl
c3R3ID0gcmVjdC53aWR0aCgpOworICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IHJlY3Qud2lkdGgo
KTsKICAgICBpZiAob3JpZ2lueCA8IDApIHsKICAgICAgICAgZGVzdHcgKz0gb3JpZ2lueDsKICAg
ICAgICAgZGVzdHggPSAtb3JpZ2lueDsKICAgICAgICAgb3JpZ2lueCA9IDA7CiAgICAgfQotICAg
IGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dywgY2VpbGYoc2l6ZS53aWR0aCgpIC8gcmVzb2x1
dGlvblNjYWxlKSAtIG9yaWdpbngpOworICAgIGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dy51
bnNhZmVHZXQoKSwgY2VpbGYoc2l6ZS53aWR0aCgpIC8gcmVzb2x1dGlvblNjYWxlKSAtIG9yaWdp
bngpOwogICAgIG9yaWdpbnggKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIGlmIChlbmR4LnVuc2Fm
ZUdldCgpID4gc2l6ZS53aWR0aCgpKQogICAgICAgICBlbmR4ID0gc2l6ZS53aWR0aCgpOwpAQCAt
MTM2LDEzICsxMzksMTMgQEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXJEYXRhOjpnZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnMKICAgICAKICAgICBpbnQg
b3JpZ2lueSA9IHJlY3QueSgpOwogICAgIGludCBkZXN0eSA9IDA7Ci0gICAgaW50IGRlc3RoID0g
cmVjdC5oZWlnaHQoKTsKKyAgICBDaGVja2VkPGludD4gZGVzdGggPSByZWN0LmhlaWdodCgpOwog
ICAgIGlmIChvcmlnaW55IDwgMCkgewogICAgICAgICBkZXN0aCArPSBvcmlnaW55OwogICAgICAg
ICBkZXN0eSA9IC1vcmlnaW55OwogICAgICAgICBvcmlnaW55ID0gMDsKICAgICB9Ci0gICAgZGVz
dGggPSBzdGQ6Om1pbjxpbnQ+KGRlc3RoLCBjZWlsZihzaXplLmhlaWdodCgpIC8gcmVzb2x1dGlv
blNjYWxlKSAtIG9yaWdpbnkpOworICAgIGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0aC51bnNh
ZmVHZXQoKSwgY2VpbGYoc2l6ZS5oZWlnaHQoKSAvIHJlc29sdXRpb25TY2FsZSkgLSBvcmlnaW55
KTsKICAgICBvcmlnaW55ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBpZiAoZW5keS51bnNhZmVH
ZXQoKSA+IHNpemUuaGVpZ2h0KCkpCiAgICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwpAQCAt
MTYzLDYgKzE2NiwxNiBAQCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZl
ckRhdGE6OmdldERhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29ucwogICAgICAgICAKICNpZiBV
U0UoQUNDRUxFUkFURSkKICAgICAgICAgaWYgKHVubXVsdGlwbGllZCkgeworI2lmIFVTRV9BUkdC
MzIKKyAgICAgICAgICAgIFNjYW5saW5lRGF0YSBzY2FubGluZURhdGE7CisgICAgICAgICAgICBz
Y2FubGluZURhdGEuc2NhbmxpbmVXaWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOworICAgICAgICAg
ICAgc2NhbmxpbmVEYXRhLnNyY0RhdGEgPSBzcmNSb3dzOworICAgICAgICAgICAgc2NhbmxpbmVE
YXRhLnNyY1Jvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBzY2FubGluZURh
dGEuZGVzdERhdGEgPSBkZXN0Um93czsKKyAgICAgICAgICAgIHNjYW5saW5lRGF0YS5kZXN0Um93
Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7CisKKyAgICAgICAgICAgIGRpc3BhdGNoX2FwcGx5X2Yo
ZGVzdGgudW5zYWZlR2V0KCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVF
VUVfUFJJT1JJVFlfREVGQVVMVCwgMCksICZzY2FubGluZURhdGEsIHVucHJlbXVsdGl0cGx5U2Nh
bmxpbmUpOworI2Vsc2UKICAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwogICAgICAgICAg
ICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKICAgICAgICAgICAgIHNyYy53aWR0
aCA9IHdpZHRoLnVuc2FmZUdldCgpOwpAQCAtMTcwLDggKzE4Myw4IEBAIFBhc3NSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zCiAgICAgICAgICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZHN0OwotICAgICAgICAgICAgZHN0LmhlaWdodCA9
IGRlc3RoOwotICAgICAgICAgICAgZHN0LndpZHRoID0gZGVzdHc7CisgICAgICAgICAgICBkc3Qu
aGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7CisgICAgICAgICAgICBkc3Qud2lkdGggPSBkZXN0
dy51bnNhZmVHZXQoKTsKICAgICAgICAgICAgIGRzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJv
dzsKICAgICAgICAgICAgIGRzdC5kYXRhID0gZGVzdFJvd3M7CiAKQEAgLTE4NCwxMyArMTk3LDE0
IEBAIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0
YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkc3QsIGt2SW1hZ2VOb0Zs
YWdzKTsKKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAgICAg
ICAgIH0KICNlbmRpZgogICAgICAgICBpZiAocmVzb2x1dGlvblNjYWxlICE9IDEpIHsKICAgICAg
ICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IHNvdXJjZUNvbnRleHQgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZShzcmNSb3dzLCB3aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0LnVu
c2FmZUdldCgpLCA4LCBzcmNCeXRlc1BlclJvdywgbV9jb2xvclNwYWNlLCBrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZExhc3QpKTsKICAgICAgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBz
b3VyY2VJbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uoc291cmNlQ29u
dGV4dC5nZXQoKSkpOwotICAgICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gZGVzdGlu
YXRpb25Db250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGVzdFJvd3MsIGRl
c3R3LCBkZXN0aCwgOCwgZGVzdEJ5dGVzUGVyUm93LCBtX2NvbG9yU3BhY2UsIGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJl
Zj4gZGVzdGluYXRpb25Db250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGVz
dFJvd3MsIGRlc3R3LnVuc2FmZUdldCgpLCBkZXN0aC51bnNhZmVHZXQoKSwgOCwgZGVzdEJ5dGVz
UGVyUm93LCBtX2NvbG9yU3BhY2UsIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGRlc3RpbmF0aW9uQ29udGV4dC5nZXQo
KSwga0NHQmxlbmRNb2RlQ29weSk7CiAgICAgICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVz
dGluYXRpb25Db250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHdpZHRoLnVuc2FmZUdldCgp
IC8gcmVzb2x1dGlvblNjYWxlLCBoZWlnaHQudW5zYWZlR2V0KCkgLyByZXNvbHV0aW9uU2NhbGUp
LCBzb3VyY2VJbWFnZS5nZXQoKSk7IC8vIEZJWE1FOiBBZGQgc3VicGl4ZWwgdHJhbnNsYXRpb24u
CiAgICAgICAgICAgICBpZiAoIXVubXVsdGlwbGllZCkKQEAgLTIwOCw2ICsyMjIsMjAgQEAgUGFz
c1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnMKICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4
ID0geCAqIDQ7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNS
b3dzW2Jhc2V4ICsgM107CisjaWYgVVNFX0FSR0IzMgorICAgICAgICAgICAgICAgICAgICAvLyBC
eXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jh
c2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gc3JjUm93c1tiYXNleCArIDJdOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICAgICAg
fQorI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxw
aGE7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jv
d3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKQEAgLTIxNSwxNCArMjQzLDI1IEBAIFBhc3NS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDNdID0gYWxwaGE7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgp
WzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Cisj
ZW5kaWYKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNC
eXRlc1BlclJvdzsKICAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7CisjaWYgVVNFX0FSR0IzMgorICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykg
eworICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKKyAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOworICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOworICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07CisgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107
CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8ICh3aWR0aCAqIDQpLnVuc2FmZUdldCgpOyB4ICs9IDQpCiAgICAgICAgICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIHgpWzBdID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyB4KVswXTsKKyNlbmRpZgogICAgICAgICAg
ICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CiAgICAgICAgICAgICAgICAgZGVzdFJv
d3MgKz0gZGVzdEJ5dGVzUGVyUm93OwogICAgICAgICAgICAgfQpAQCAtMjQyLDggKzI4MSw4IEBA
IFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKIAog
ICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGg7
Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dzsKKyAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0
aC51bnNhZmVHZXQoKTsKKyAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwog
ICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwogICAgICAgICBkZXN0LmRh
dGEgPSBkZXN0Um93czsKIApAQCAtMjYzLDEzICszMDIsMTMgQEAgUGFzc1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnMKIAogICAgICAgICBpZiAodW5tdWx0aXBsaWVkKSB7CiAgICAgICAgICAgICBTY2FubGlu
ZURhdGEgc2NhbmxpbmVEYXRhOwotICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNjYW5saW5lV2lk
dGggPSB3aWR0aC51bnNhZmVHZXQoKTsKKyAgICAgICAgICAgIHNjYW5saW5lRGF0YS5zY2FubGlu
ZVdpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7CiAgICAgICAgICAgICBzY2FubGluZURhdGEuc3Jj
RGF0YSA9IHNyY1Jvd3M7CiAgICAgICAgICAgICBzY2FubGluZURhdGEuc3JjUm93Qnl0ZXMgPSBz
cmNCeXRlc1BlclJvdzsKICAgICAgICAgICAgIHNjYW5saW5lRGF0YS5kZXN0RGF0YSA9IGRlc3RS
b3dzOwogICAgICAgICAgICAgc2NhbmxpbmVEYXRhLmRlc3RSb3dCeXRlcyA9IGRlc3RCeXRlc1Bl
clJvdzsKIAotICAgICAgICAgICAgZGlzcGF0Y2hfYXBwbHlfZihoZWlnaHQudW5zYWZlR2V0KCks
IGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVM
VCwgMCksICZzY2FubGluZURhdGEsIHVucHJlbXVsdGl0cGx5U2NhbmxpbmUpOworICAgICAgICAg
ICAgZGlzcGF0Y2hfYXBwbHlfZihkZXN0aC51bnNhZmVHZXQoKSwgZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgJnNjYW5saW5lRGF0
YSwgdW5wcmVtdWx0aXRwbHlTY2FubGluZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gQkdSQSB0byBSR0JBLgogICAgICAgICAgICAg
Y29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKQEAgLTI3OSw3ICszMTgsNyBA
QCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29ucwogICAgICAgICBpZiAocmVzb2x1dGlvblNjYWxlICE9
IDEpIHsKICAgICAgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IHNvdXJjZUNvbnRleHQg
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShzcmNSb3dzLCB3aWR0aC51bnNhZmVHZXQo
KSwgaGVpZ2h0LnVuc2FmZUdldCgpLCA4LCBzcmNCeXRlc1BlclJvdywgbV9jb2xvclNwYWNlLCBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKICAgICAgICAgICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBzb3VyY2VJbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1h
Z2Uoc291cmNlQ29udGV4dC5nZXQoKSkpOwotICAgICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4
dFJlZj4gZGVzdGluYXRpb25Db250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUo
ZGVzdFJvd3MsIGRlc3R3LCBkZXN0aCwgOCwgZGVzdEJ5dGVzUGVyUm93LCBtX2NvbG9yU3BhY2Us
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICAgICAgUmV0YWluUHRy
PENHQ29udGV4dFJlZj4gZGVzdGluYXRpb25Db250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGUoZGVzdFJvd3MsIGRlc3R3LnVuc2FmZUdldCgpLCBkZXN0aC51bnNhZmVHZXQoKSwg
OCwgZGVzdEJ5dGVzUGVyUm93LCBtX2NvbG9yU3BhY2UsIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkTGFzdCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGRlc3RpbmF0aW9u
Q29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CiAgICAgICAgICAgICBDR0NvbnRleHRE
cmF3SW1hZ2UoZGVzdGluYXRpb25Db250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHdpZHRo
LnVuc2FmZUdldCgpIC8gcmVzb2x1dGlvblNjYWxlLCBoZWlnaHQudW5zYWZlR2V0KCkgLyByZXNv
bHV0aW9uU2NhbGUpLCBzb3VyY2VJbWFnZS5nZXQoKSk7IC8vIEZJWE1FOiBBZGQgc3VicGl4ZWwg
dHJhbnNsYXRpb24uCiAKQEAgLTM5MCw2ICs0MjksMTcgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6
OnB1dERhdGEoVWludDhDbGFtcGVkQXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVMKICAgICAgICAgCiAjaWYgIFVTRShBQ0NFTEVSQVRFKQogICAgICAgICBpZiAodW5tdWx0aXBs
aWVkKSB7CisjaWYgVVNFX0FSR0IzMgorICAgICAgICAgICAgLy8gRklYTUU6IEFyZSBzY2FubGlu
ZURhdGEuc2NhbmxpbmVXaWR0aCBhbmQgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmll
ZCB0byBkaXNwYXRjaF9hcHBseV9mKCkgY29ycmVjdD8KKyAgICAgICAgICAgIFNjYW5saW5lRGF0
YSBzY2FubGluZURhdGE7CisgICAgICAgICAgICBzY2FubGluZURhdGEuc2NhbmxpbmVXaWR0aCA9
IHdpZHRoLnVuc2FmZUdldCgpOworICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNyY0RhdGEgPSBz
cmNSb3dzOworICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNyY1Jvd0J5dGVzID0gc3JjQnl0ZXNQ
ZXJSb3c7CisgICAgICAgICAgICBzY2FubGluZURhdGEuZGVzdERhdGEgPSBkZXN0Um93czsKKyAg
ICAgICAgICAgIHNjYW5saW5lRGF0YS5kZXN0Um93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7CisK
KyAgICAgICAgICAgIGRpc3BhdGNoX2FwcGx5X2YoaGVpZ2h0LnVuc2FmZUdldCgpLCBkaXNwYXRj
aF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCAm
c2NhbmxpbmVEYXRhLCBwcmVtdWx0aXRwbHlTY2FubGluZSk7CisjZWxzZQogICAgICAgICAgICAg
dkltYWdlX0J1ZmZlciBzcmM7CiAgICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2Fm
ZUdldCgpOwogICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7CkBAIC00
MTEsNiArNDYxLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoVWludDhDbGFtcGVk
QXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVMKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkc3QsIGt2
SW1hZ2VOb0ZsYWdzKTsKKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAj
ZW5kaWYKQEAgLTQzMyw2ICs0ODQsMjAgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEo
VWludDhDbGFtcGVkQXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVMKICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewogICAg
ICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107CisjaWYgVVNFX0FSR0IzMgorICAgICAg
ICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZm
ZXJzIG9mIEFSR0IzMgorICAgICAgICAgICAgICAgIGlmICh1bm11bHRpcGxpZWQgJiYgYWxwaGEg
IT0gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dz
W2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8g
MjU1OworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3Nb
YmFzZXggKyAwXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAx
XTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFz
ZXhdOworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Cisg
ICAgICAgICAgICAgICAgfQorI2Vsc2UKICAgICAgICAgICAgICAgICBpZiAodW5tdWx0aXBsaWVk
ICYmIGFscGhhICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0g
PSAoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CiAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAy
NTQpIC8gMjU1OwpAQCAtNDQwLDYgKzUwNSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXRE
YXRhKFVpbnQ4Q2xhbXBlZEFycmF5KiYgc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTCiAg
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KHNyY1Jvd3MgKyBiYXNleClbMF07CisjZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3Jj
Qnl0ZXNQZXJSb3c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAppbmRleCBhNDE5MDZiYWI2MWVmZTYwMGQyNzRhZGU2
NjQ2YzFmZjM2MDY4Y2UwLi44OTYwZDAwZTRmMGMzMDgxZmIzYWQ4N2FhYzQ2YzQ0MjJmYzQ2OWVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckRhdGFDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmgKQEAgLTMxLDcgKzMxLDkgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CiAKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShDQSkKKyNpZiAhUExBVEZPUk0oSU9T
X1NJTVVMQVRPUikKICNkZWZpbmUgV1RGX1VTRV9JT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUgMQorI2VuZGlmIC8vICFQTEFURk9STShJT1NfU0lNVUxBVE9SKQogI2VuZGlmCiAKIHR5cGVk
ZWYgc3RydWN0IF9fSU9TdXJmYWNlICpJT1N1cmZhY2VSZWY7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCmluZGV4IDY5YmEyZDYyYmUyNTM4NGE4
MzNhOWE5ZjI1MjAxZmFhNTA1MmEzMDcuLjQ5NWQ2NjJmZDQ0YTUyMDRhMzJiNTBkMzYyOWQ0Y2U2
ZmE4YWYxOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQ0cuY3BwCkBAIC0zMiw3ICszMiwxMSBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgor
I2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNh
dGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhp
Y3MuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRGT1JN
KE1BQykKQEAgLTcwLDcgKzc0LDEyIEBAIFJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZTo6aW1h
Z2VXaXRoQ29sb3JTcGFjZShDR0ltYWdlUmVmIG9yaWdpbmFsSW1hZ2UsIENvbG9yCiBzdGF0aWMg
dm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0
KQogewogICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSAoQ0dJbWFnZVJlZilpbmZvOwotICAgIENHQ29u
dGV4dERyYXdJbWFnZShjb250ZXh0LCBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0Rl
dmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFn
ZUdldEhlaWdodChpbWFnZSkpKSwgaW1hZ2UpOworICAgIENHRmxvYXQgaGVpZ2h0ID0gQ0dJbWFn
ZUdldEhlaWdodChpbWFnZSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIENHQ29udGV4dFNjYWxl
Q1RNKGNvbnRleHQsIDEsIC0xKTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwg
MCwgLWhlaWdodCk7CisjZW5kaWYKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3Jh
cGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KDAsIDAs
IENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIGhlaWdodCkpLCBpbWFnZSk7CiB9CiAKIHN0YXRpYyB2
b2lkIHBhdHRlcm5SZWxlYXNlT25NYWluVGhyZWFkQ2FsbGJhY2sodm9pZCogaW5mbykKQEAgLTEz
OCw2ICsxNDcsMTAgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdAogICAgICAgICBtYXRyaXggPSBD
R0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQ29udGV4dEdldENUTShjb250ZXh0KSk7
CiAgICAgICAgIC8vIFRoZSB0b3Agb2YgYSBwYXJ0aWFsbHktZGVjb2RlZCBpbWFnZSBpcyBkcmF3
biBhdCB0aGUgYm90dG9tIG9mIHRoZSB0aWxlLiBNYXAgaXQgdG8gdGhlIHRvcC4KICAgICAgICAg
bWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUobWF0cml4LCAwLCBzaXplKCkuaGVp
Z2h0KCkgLSBoKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIG1hdHJpeCA9IENHQWZmaW5l
VHJhbnNmb3JtU2NhbGUobWF0cml4LCAxLCAtMSk7CisgICAgICAgIG1hdHJpeCA9IENHQWZmaW5l
VHJhbnNmb3JtVHJhbnNsYXRlKG1hdHJpeCwgMCwgLWgpOworI2VuZGlmCiAgICAgICAgIENHSW1h
Z2VSZWYgcGxhdGZvcm1JbWFnZSA9IENHSW1hZ2VSZXRhaW4oc3ViSW1hZ2UuZ2V0KCkpOwogICAg
ICAgICBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBwYXR0ZXJuID0gYWRvcHRDRihDR1BhdHRlcm5D
cmVhdGUocGxhdGZvcm1JbWFnZSwgQ0dSZWN0TWFrZSgwLCAwLCB0aWxlUmVjdC53aWR0aCgpLCB0
aWxlUmVjdC5oZWlnaHQoKSksIG1hdHJpeCwKICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCkg
KyBzcGFjZVNpemUoKS53aWR0aCgpICogKDEgLyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRl
cm5UcmFuc2Zvcm0uYSgpKSksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCmluZGV4IGJmNjkyODJjN2EyNWMzNjIxYTdmM2Yw
ZjQ1OGFkMDJlZjE3NGJmZjUuLmJmNDUzMzYzY2ZiNjNiMmVkMmE5YTIxYTkzOGYxNWM1ZWNkNjkw
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
U291cmNlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlU291cmNlQ0cuY3BwCkBAIC0zNCw3ICszNCwxNSBAQAogI2luY2x1ZGUgIkludFNpemUuaCIK
ICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxp
Y2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2VQ
cml2YXRlLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1
ZGUgPEltYWdlSU8vQ0dJbWFnZVNvdXJjZVByaXZhdGUuaD4KKyNpbmNsdWRlIDxJbWFnZUlPL0lt
YWdlSU8uaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00Niw2ICs1NCwxMCBAQCBjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFn
ZVNvdXJjZVNraXBNZXRhZGF0YSA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YQog
Ly8gdGhhdCB3b24ndCBjb25mbGljdCB3aXRoIEltYWdlSU8ncyB2ZXJzaW9uIHdoZW4gaXQgaXMg
YXZhaWxhYmxlLgogY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUdJRlVu
Y2xhbXBlZERlbGF5VGltZSA9IENGU1RSKCJVbmNsYW1wZWREZWxheVRpbWUiKTsKIAorI2lmIFBM
QVRGT1JNKElPUykKK2Jvb2wgSW1hZ2VTb3VyY2U6OnNfYWNjZWxlcmF0ZWRJbWFnZURlY29kaW5n
OworI2VuZGlmCisKICNpZiAhUExBVEZPUk0oTUFDKQogc2l6ZV90IHNoYXJlZEJ1ZmZlckdldEJ5
dGVzQXRQb3NpdGlvbih2b2lkKiBpbmZvLCB2b2lkKiBidWZmZXIsIG9mZl90IHBvc2l0aW9uLCBz
aXplX3QgY291bnQpCiB7CkBAIC02OSw2ICs4MSwxMCBAQCB2b2lkIHNoYXJlZEJ1ZmZlclJlbGVh
c2Uodm9pZCogaW5mbykKIAogSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEltYWdlU291cmNlOjpB
bHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogICAg
IDogbV9kZWNvZGVyKDApCisjaWYgUExBVEZPUk0oSU9TKQorICAgICwgbV9iYXNlU3Vic2FtcGxp
bmcoMCkKKyAgICAsIG1faXNQcm9ncmVzc2l2ZShmYWxzZSkKKyNlbmRpZgogewogICAgIC8vIEZJ
WE1FOiBBbHBoYU9wdGlvbiBhbmQgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gYXJlIGlnbm9y
ZWQuCiB9CkBAIC05NCwxMyArMTEwLDE0IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wg
ZGVzdHJveUFsbEZyYW1lcywgc2l6ZV90LCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wKICAgICAg
ICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCi1zdGF0aWMgQ0ZEaWN0aW9u
YXJ5UmVmIGltYWdlU291cmNlT3B0aW9ucyhJbWFnZVNvdXJjZTo6U2hvdWxkU2tpcE1ldGFkYXRh
IHNraXBNZXRhZGF0YSkKKyNpZiAhUExBVEZPUk0oSU9TKQorc3RhdGljIENGRGljdGlvbmFyeVJl
ZiBpbWFnZVNvdXJjZU9wdGlvbnMoSW1hZ2VTb3VyY2U6OlNob3VsZFNraXBNZXRhZGF0YSBza2lw
TWV0YURhdGEpCiB7CiAgICAgc3RhdGljIENGRGljdGlvbmFyeVJlZiBvcHRpb25zOwogCiAgICAg
aWYgKCFvcHRpb25zKSB7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG51bU9wdGlvbnMgPSAzOwot
ICAgICAgICBjb25zdCBDRkJvb2xlYW5SZWYgaW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgPSAoc2tp
cE1ldGFkYXRhID09IEltYWdlU291cmNlOjpTa2lwTWV0YWRhdGEpID8ga0NGQm9vbGVhblRydWUg
OiBrQ0ZCb29sZWFuRmFsc2U7CisgICAgICAgIGNvbnN0IENGQm9vbGVhblJlZiBpbWFnZVNvdXJj
ZVNraXBNZXRhZGF0YSA9IChza2lwTWV0YURhdGEgPT0gSW1hZ2VTb3VyY2U6OlNraXBNZXRhZGF0
YSkgPyBrQ0ZCb29sZWFuVHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZTsKICAgICAgICAgY29uc3Qgdm9p
ZCoga2V5c1tudW1PcHRpb25zXSA9IHsga0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZSwga0NHSW1h
Z2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiwga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgfTsK
ICAgICAgICAgY29uc3Qgdm9pZCogdmFsdWVzW251bU9wdGlvbnNdID0geyBrQ0ZCb29sZWFuVHJ1
ZSwga0NGQm9vbGVhblRydWUsIGltYWdlU291cmNlU2tpcE1ldGFkYXRhIH07CiAgICAgICAgIG9w
dGlvbnMgPSBDRkRpY3Rpb25hcnlDcmVhdGUoTlVMTCwga2V5cywgdmFsdWVzLCBudW1PcHRpb25z
LCAKQEAgLTEwOCw2ICsxMjUsMjUgQEAgc3RhdGljIENGRGljdGlvbmFyeVJlZiBpbWFnZVNvdXJj
ZU9wdGlvbnMoSW1hZ2VTb3VyY2U6OlNob3VsZFNraXBNZXRhZGF0YSBza2lwTWUKICAgICB9CiAg
ICAgcmV0dXJuIG9wdGlvbnM7CiB9CisjZWxzZQorQ0ZEaWN0aW9uYXJ5UmVmIEltYWdlU291cmNl
OjppbWFnZVNvdXJjZU9wdGlvbnMoU2hvdWxkU2tpcE1ldGFkYXRhIHNraXBNZXRhRGF0YSwgaW50
IHJlcXVlc3RlZFN1YnNhbXBsaW5nKSBjb25zdAoreworICAgIHN0YXRpYyBDRkRpY3Rpb25hcnlS
ZWYgb3B0aW9uc1s0XSA9IHtudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyfTsKKyAg
ICBpbnQgc3Vic2FtcGxpbmcgPSBzdGQ6Om1pbigzLCBtX2lzUHJvZ3Jlc3NpdmUgfHwgcmVxdWVz
dGVkU3Vic2FtcGxpbmcgPCAwID8gMCA6IChyZXF1ZXN0ZWRTdWJzYW1wbGluZyArIG1fYmFzZVN1
YnNhbXBsaW5nKSk7CisKKyAgICBpZiAoIW9wdGlvbnNbc3Vic2FtcGxpbmddKSB7CisgICAgICAg
IGludCBzdWJzYW1wbGVJbnQgPSAxIDw8IHN1YnNhbXBsaW5nOyAvLyBbMC4uM10gPT4gWzEsIDIs
IDQsIDhdCisgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gc3Vic2FtcGxlTnVtYmVyID0g
YWRvcHRDRihDRk51bWJlckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVySW50VHlwZSwgICZzdWJz
YW1wbGVJbnQpKTsKKyAgICAgICAgY29uc3QgQ0ZJbmRleCBudW1PcHRpb25zID0gNTsKKyAgICAg
ICAgY29uc3QgQ0ZCb29sZWFuUmVmIGltYWdlU291cmNlU2tpcE1ldGFEYXRhID0gKHNraXBNZXRh
RGF0YSA9PSBJbWFnZVNvdXJjZTo6U2tpcE1ldGFkYXRhKSA/IGtDRkJvb2xlYW5UcnVlIDoga0NG
Qm9vbGVhbkZhbHNlOworICAgICAgICBjb25zdCBDRkJvb2xlYW5SZWYgYWNjZWxlcmF0ZWRJbWFn
ZURlY29kaW5nID0gSW1hZ2VTb3VyY2U6OnNfYWNjZWxlcmF0ZWRJbWFnZURlY29kaW5nID8ga0NG
Qm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2U7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleXNb
bnVtT3B0aW9uc10gPSB7IGtDR0ltYWdlU291cmNlU2hvdWxkQ2FjaGUsIGtDR0ltYWdlU291cmNl
U2hvdWxkUHJlZmVyUkdCMzIsIGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yLCBrQ0dJbWFn
ZVNvdXJjZVNraXBNZXRhZGF0YSwga0NHSW1hZ2VTb3VyY2VVc2VIYXJkd2FyZUFjY2VsZXJhdGlv
biB9OworICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZXNbbnVtT3B0aW9uc10gPSB7IGtDRkJvb2xl
YW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwgc3Vic2FtcGxlTnVtYmVyLmdldCgpLCBpbWFnZVNvdXJj
ZVNraXBNZXRhRGF0YSwgYWNjZWxlcmF0ZWRJbWFnZURlY29kaW5nIH07CisgICAgICAgIG9wdGlv
bnNbc3Vic2FtcGxpbmddID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKG51bGxwdHIsIGtleXMsIHZhbHVl
cywgbnVtT3B0aW9ucywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURp
Y3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgfQorICAgIHJldHVybiBvcHRpb25zW3N1YnNh
bXBsaW5nXTsKK30KKyNlbmRpZgogCiBib29sIEltYWdlU291cmNlOjppbml0aWFsaXplZCgpIGNv
bnN0CiB7CkBAIC0xOTcsNiArMjMzLDM4IEBAIEludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6
ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24KICAgICBp
ZiAobnVtKQogICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwg
JmgpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmICghbV9pc1Byb2dyZXNzaXZlKSB7Cisg
ICAgICAgIENGRGljdGlvbmFyeVJlZiBqZmlmUHJvcGVydGllcyA9IHN0YXRpY19jYXN0PENGRGlj
dGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1h
Z2VQcm9wZXJ0eUpGSUZEaWN0aW9uYXJ5KSk7CisgICAgICAgIGlmIChqZmlmUHJvcGVydGllcykg
eworICAgICAgICAgICAgQ0ZCb29sZWFuUmVmIGlzUHJvZ0NGQm9vbCA9IHN0YXRpY19jYXN0PENG
Qm9vbGVhblJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoamZpZlByb3BlcnRpZXMsIGtDR0ltYWdl
UHJvcGVydHlKRklGSXNQcm9ncmVzc2l2ZSkpOworICAgICAgICAgICAgaWYgKGlzUHJvZ0NGQm9v
bCkKKyAgICAgICAgICAgICAgICBtX2lzUHJvZ3Jlc3NpdmUgPSBDRkJvb2xlYW5HZXRWYWx1ZShp
c1Byb2dDRkJvb2wpOworICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9i
bGVtLzUxODQ2NTU+IC0gSGFuZyByZW5kZXJpbmcgdmVyeSBsYXJnZSBwcm9ncmVzc2l2ZSBKUEVH
LiBEZWNvZGluZyBwcm9ncmVzc2l2ZQorICAgICAgICAgICAgLy8gaW1hZ2VzIGhhbmdzIGZvciBh
IHZlcnkgbG9uZyB0aW1lIHJpZ2h0IG5vdy4gVW50aWwgdGhpcyBpcyBmaXhlZCwgZG9uJ3Qgc3Vi
LXNhbXBsZSBwcm9ncmVzc2l2ZSBpbWFnZXMuIFRoaXMKKyAgICAgICAgICAgIC8vIHdpbGwgY2F1
c2UgdGhlbSB0byBmYWlsIG91ciBsYXJnZSBpbWFnZSBjaGVjayBhbmQgdGhleSB3b24ndCBiZSBk
ZWNvZGVkLgorICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIHVuZGVybHlpbmcgaXNz
dWUgaXMgZml4ZWQgKDxyZGFyOi8vcHJvYmxlbS81MTkxNDE4PikKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICgobV9iYXNlU3Vic2FtcGxpbmcgPT0gMCkgJiYgIW1faXNQcm9ncmVzc2l2ZSkg
eworICAgICAgICBJbnRTaXplIHN1YnNhbXBsZWRTaXplKHcsIGgpOworICAgICAgICBjb25zdCBp
bnQgY01heGltdW1JbWFnZVNpemVCZWZvcmVTdWJzYW1wbGluZyA9IDUgKiAxMDI0ICogMTAyNDsK
KyAgICAgICAgd2hpbGUgKChtX2Jhc2VTdWJzYW1wbGluZyA8IDMpICYmIHN1YnNhbXBsZWRTaXpl
LndpZHRoKCkgKiBzdWJzYW1wbGVkU2l6ZS5oZWlnaHQoKSA+IGNNYXhpbXVtSW1hZ2VTaXplQmVm
b3JlU3Vic2FtcGxpbmcpIHsKKyAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIHNpemUsIGJ1dCB0
aGUgYWN0dWFsIGltYWdlIGlzIHZlcnkgbGFyZ2UgYW5kIHNob3VsZCBiZSBzdWItc2FtcGxlZC4K
KyAgICAgICAgICAgIC8vIEluY3JlYXNlIHRoZSBiYXNlIHN1YnNhbXBsaW5nIGFuZCBhc2sgZm9y
IHRoZSBzaXplIGFnYWluLiBJZiB0aGUgaW1hZ2UgY2FuIGJlIHN1YnNhbXBsZWQsIHRoZSBzaXpl
IHdpbGwgYmUKKyAgICAgICAgICAgIC8vIGdyZWF0bHkgcmVkdWNlZC4gNHggc3ViLXNhbXBsaW5n
IHdpbGwgbWFrZSB1cyBzdXBwb3J0IHVwIHRvIDMyME1QICg1TVAgKiA0XjMpIGltYWdlcywgd2hp
Y2ggc2hvdWxkIGJlIHBsZW50eS4KKyAgICAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gY2FsbGJhY2sg
ZnJvbSBJbWFnZUlPIHdoZW4gdGhlIHNpemUgaXMgYXZhaWxhYmxlLCBzbyB3ZSBkbyB0aGUgY2hl
Y2sgd2hlbiB3ZSBoYXBwZW4KKyAgICAgICAgICAgIC8vIHRvIGNoZWNrIHRoZSBzaXplIGFuZCBp
dHMgbm9uIC0gemVyby4KKyAgICAgICAgICAgIC8vIE5vdGU6IFNvbWUgY2xpZW50cyBvZiB0aGlz
IGNsYXNzIGRvbid0IGNhbGwgaXNTaXplQXZhaWxhYmxlKCkgc28gd2UgY2FuJ3QgcmVseSBvbiB0
aGF0LgorICAgICAgICAgICAgKyttX2Jhc2VTdWJzYW1wbGluZzsKKyAgICAgICAgICAgIHN1YnNh
bXBsZWRTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgZGVzY3JpcHRpb24ucmVzcGVjdElt
YWdlT3JpZW50YXRpb24oKSk7CisgICAgICAgIH0KKyAgICAgICAgdyA9IHN1YnNhbXBsZWRTaXpl
LndpZHRoKCk7CisgICAgICAgIGggPSBzdWJzYW1wbGVkU2l6ZS5oZWlnaHQoKTsKKyAgICB9Cisj
ZW5kaWYKKwogICAgIGlmICgoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9
PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgJiYgb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhw
cm9wZXJ0aWVzLmdldCgpKS51c2VzV2lkdGhBc0hlaWdodCgpKQogICAgICAgICByZXR1cm4gSW50
U2l6ZShoLCB3KTsKIApAQCAtMjEyLDYgKzI4MCwzMSBAQCBJbWFnZU9yaWVudGF0aW9uIEltYWdl
U291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHJldHVy
biBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkpOwogfQogCisjaWYg
UExBVEZPUk0oSU9TKQorSW50U2l6ZSBJbWFnZVNvdXJjZTo6b3JpZ2luYWxTaXplKFJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0T3JpZW50YXRpb24pIGNvbnN0Cit7Cisg
ICAgZnJhbWVTaXplQXRJbmRleCgwLCBzaG91bGRSZXNwZWN0T3JpZW50YXRpb24pOworICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3Vy
Y2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMo
U2tpcE1ldGFkYXRhLCAtMSkpKTsKKworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0
dXJuIEludFNpemUoKTsKKworICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7
CisgICAgQ0ZOdW1iZXJSZWYgbnVtYmVyID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZh
bHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKTsKKyAgICBp
ZiAobnVtYmVyKQorICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVtYmVySW50
VHlwZSwgJndpZHRoKTsKKyAgICBudW1iZXIgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVs
SGVpZ2h0KSk7CisgICAgaWYgKG51bWJlcikKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW1i
ZXIsIGtDRk51bWJlckludFR5cGUsICZoZWlnaHQpOworCisgICAgaWYgKChzaG91bGRSZXNwZWN0
T3JpZW50YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pICYmIG9yaWVudGF0aW9uRnJv
bVByb3BlcnRpZXMocHJvcGVydGllcy5nZXQoKSkudXNlc1dpZHRoQXNIZWlnaHQoKSkKKyAgICAg
ICAgcmV0dXJuIEludFNpemUoaGVpZ2h0LCB3aWR0aCk7CisKKyAgICByZXR1cm4gSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KTsKK30KKyNlbmRpZgorCiBJbnRTaXplIEltYWdlU291cmNlOjpzaXplKElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICByZXR1
cm4gZnJhbWVTaXplQXRJbmRleCgwLCBkZXNjcmlwdGlvbik7CkBAIC0yODYsNyArMzc5LDM2IEBA
IENHSW1hZ2VSZWYgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgs
IGZsb2F0KiBzY2FsZSkKICAgICBpZiAoIWluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybiAw
OwogCisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0oc2NhbGUpOwogICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUlt
YWdlQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoU2tpcE1ldGFk
YXRhKSkpOworI2Vsc2UKKyAgICAvLyBTdWJzYW1wbGluZyBjYW4gYmUgMSwgMiBvciAzLCB3aGlj
aCBtZWFucyBxdWFydGVyLSwgc2l4dGVlbnRoLSBhbmQgc2l4dHktZm91cnRoLXNpemUsIHJlc3Bl
Y3RpdmVseS4KKyAgICAvLyBBIHplcm8gb3IgbmVnYXRpdmUgdmFsdWUgbWVhbnMgbm8gc3Vic2Ft
cGxpbmcuCisgICAgaW50IHN1YnNhbXBsaW5nID0gc2NhbGUgPyBzdGF0aWNfY2FzdDxpbnQ+KGxv
ZzJmKDEuMGYgLyBzdGQ6Om1heCgwLjFmLCBzdGQ6Om1pbigxLjBmLCAqc2NhbGUpKSkpIDogLTE7
CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihDR0ltYWdlU291cmNl
Q3JlYXRlSW1hZ2VBdEluZGV4KG1fZGVjb2RlciwgaW5kZXgsIGltYWdlU291cmNlT3B0aW9ucyhT
a2lwTWV0YWRhdGEsIHN1YnNhbXBsaW5nKSkpOworCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzcz
NzExOTg+IC0gQ29yZUdyYXBoaWNzIGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlv
dXIgaW4gaU9TIDQuMCB0byBrQ0dJbWFnZUNhY2hpbmdUcmFuc2llbnQKKyAgICAvLyB3aGljaCBj
YXVzZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhh
ZCB0byBiZSByZXNhbXBsZWQvcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCisgICAgLy8g
Q0dDb250ZXh0RHJhd0ltYWdlLiBXZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1h
Z2VzLiBTZWUgYWxzbyA8cmRhcjovL3Byb2JsZW0vMTQzNjY3NTU+IC0KKyAgICAvLyBDb3JlR3Jh
cGhpY3MgbmVlZHMgdG8gdW4tZGVwcmVjYXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5j
ZSBpdCdzIHN0aWxsIG5vdCB0aGUgZGVmYXVsdC4KKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyNlbmRpZgorICAgIENHSW1hZ2VTZXRDYWNo
aW5nRmxhZ3MoaW1hZ2UuZ2V0KCksIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSk7CisjaWYgQ09N
UElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKyAgICBp
ZiAoc2NhbGUpIHsKKyAgICAgICAgaWYgKHN1YnNhbXBsaW5nID4gMCkKKyAgICAgICAgICAgICpz
Y2FsZSA9IHN0YXRpY19jYXN0PGZsb2F0PihDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpKSAv
IHNpemUoRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikud2lkdGgoKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihDR0ltYWdlR2V0V2lkdGgo
aW1hZ2UuZ2V0KCkpKSA9PSBzaXplKERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pLndpZHRo
KCkpOworICAgICAgICAgICAgKnNjYWxlID0gMTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAv
LyAhUExBVEZPUk0oSU9TKQogICAgIENGU3RyaW5nUmVmIGltYWdlVVRJID0gQ0dJbWFnZVNvdXJj
ZUdldFR5cGUobV9kZWNvZGVyKTsKICAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgeGJtVVRJ
ID0gQ0ZTVFIoInB1YmxpYy54Yml0bWFwLWltYWdlIik7CiAgICAgaWYgKCFpbWFnZVVUSSB8fCAh
Q0ZFcXVhbChpbWFnZVVUSSwgeGJtVVRJKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCmluZGV4IDk1M2JjYjlkMjhh
ZDBlYjc1YWIzODgxM2MzNDM5NDU1ZjEyNjJjNzYuLmVkZjllNDkwZTZmZmJlNTgwNjJlMDRiODdk
NmZmZDZiM2YzNzJiMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpAQCAtMjksNiArMjksMjEgQEAKICNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisj
aWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCisjaW5jbHVkZSA8TW9i
aWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgorCitTT0ZUX0xJTktfRlJBTUVX
T1JLKE1vYmlsZUNvcmVTZXJ2aWNlcykKKworU09GVF9MSU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywg
VVRUeXBlQ29weVByZWZlcnJlZFRhZ1dpdGhDbGFzcywgQ0ZTdHJpbmdSZWYsIChDRlN0cmluZ1Jl
ZiBpblVUSSwgQ0ZTdHJpbmdSZWYgaW5UYWdDbGFzcyksIChpblVUSSwgaW5UYWdDbGFzcykpCisK
K1NPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFRhZ0NsYXNzRmlsZW5h
bWVFeHRlbnNpb24sIENGU3RyaW5nUmVmKQorU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVT
ZXJ2aWNlcywga1VUVGFnQ2xhc3NNSU1FVHlwZSwgQ0ZTdHJpbmdSZWYpCisKKyNkZWZpbmUga1VU
VGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiBnZXRrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9u
KCkKKyNkZWZpbmUga1VUVGFnQ2xhc3NNSU1FVHlwZSBnZXRrVVRUYWdDbGFzc01JTUVUeXBlKCkK
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFN0cmluZyBNSU1FVHlwZUZvckltYWdl
U291cmNlVHlwZShjb25zdCBTdHJpbmcmIHV0aSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKaW5kZXggNzA4ZmNjMmUxZGZmZGE5Yzk0
MzI3NmU1MGFhNDQ4MDBmOWZkMmViOC4uYmQwNDU3NGM3ZDY5ZjVhZWIyMjdkNzBiNGY4ODViNTU1
YjIwMmQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW50UG9pbnRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW50UG9pbnRDRy5jcHAKQEAgLTI4LDcgKzI4LDExIEBACiAKICNpZiBVU0UoQ0cpCiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25T
ZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENHLmNwcAppbmRleCA4ZDEwMjA3YmY5Zjg3NWFh
MmQ3ZjZlNzBhYjNiN2NlYjYzZDk5NWQ0Li5kMWY3YjJlNTcwODhhOWJkYjRhYjQ0OGM4MDM2NTkx
ZmUxN2YyMmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbnRSZWN0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ludFJlY3RDRy5jcHAKQEAgLTI4LDcgKzI4LDExIEBACiAKICNpZiBVU0UoQ0cpCiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25T
ZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXplQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcAppbmRleCA0MWZiMzk5ZTM1NWNhMDEz
NjNjMDZmN2I0MTA3YjJkNmY5YmY4NGYyLi5lNWQwYjgyNGRkNmFjYTVhNmYyMzYwNjBiNGJjNjVk
NzMwOWMzYjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbnRTaXplQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ludFNpemVDRy5jcHAKQEAgLTI4LDcgKzI4LDExIEBACiAKICNpZiBVU0UoQ0cpCiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25T
ZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDU2
ZmRkNTk3NzQ5MTUwMDEwOGY5OWQ0ZjExODBjOGE4N2JkYmE2YjkuLjExM2ZhOTc5NzY0NzRiOTk4
NzFiMjY2NjkwODliODM2NjExM2Y3OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC0yOSw2ICsyOSwx
MyBAQAogCiAjaWYgVVNFKENHKQogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8Q29yZUdy
YXBoaWNzL0NHQ29udGV4dFByaXZhdGUuaD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0NvbnRl
eHRHU3RhdGUuaD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbXBv
cnQgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2VuZGlmCisKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCmlu
ZGV4IGZlOWY3ODQ0MDUzOGJhYWIyYzU5MDFmMmUxZWNiOThhYjNjMTRhYzIuLjMzYmQ4OTE3Yjcy
ZGMzYTcwMTY0Nzc0MjhmN2UzZjQxZjJmMjUwYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcApAQCAtMzQsNyArMzQsMTIgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiU3Ry
b2tlU3R5bGVBcHBsaWVyLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NHUGF0aFByaXZhdGUuaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdy
YXBoaWNzLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCmluZGV4
IDBjZDUyOWVhYmU5MWE1ODljYjg1YTYzM2RmNGY3OWFhN2UyMTNhODYuLjBjMDgwNDhjYjJiZjIy
YzE3MjI3YzZmMzk4NmY1ZmUyZDA4MzUxZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcApAQCAtMjksNyArMjksMTIgQEAKIAogI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
CisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxp
Y2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFw
aGljcy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogI2lmIFBMQVRG
T1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQppbmRleCBhOTE1ZDI3Y2UwODRm
ODA2ZDVkZTA4NjFkYWFkMWM5ZTY0ZTY3ZDMxLi43Yjc2MzJhZDQxMDA3Zjk2MjI5NTAyNzRjYzAz
ZmRiZDNmMGE4ODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC0yNSw3ICsy
NSwxMyBAQAogI2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0YS5oIgogCiAjaW1wb3J0ICJXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbXBvcnQgPEFwcEtpdC9O
U0ZvbnQuaD4KKyNlbHNlCisjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorI2ltcG9ydCA8
Q29yZUdyYXBoaWNzL0NHRm9udEluZm8uaD4KKyNlbmRpZgorCiAjaW1wb3J0IDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzMsMTQgKzM5LDE1IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIC8vIFRoZXNlIENvcmVUZXh0IFRleHQgU3BhY2luZyBmZWF0dXJl
IHNlbGVjdG9ycyBhcmUgbm90IGRlZmluZWQgaW4gQ29yZVRleHQuCiBlbnVtIFRleHRTcGFjaW5n
Q1RGZWF0dXJlU2VsZWN0b3IgeyBUZXh0U3BhY2luZ1Byb3BvcnRpb25hbCwgVGV4dFNwYWNpbmdG
dWxsV2lkdGgsIFRleHRTcGFjaW5nSGFsZldpZHRoLCBUZXh0U3BhY2luZ1RoaXJkV2lkdGgsIFRl
eHRTcGFjaW5nUXVhcnRlcldpZHRoIH07CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogdm9pZCBGb250UGxhdGZvcm1EYXRhOjpsb2FkRm9u
dChOU0ZvbnQqIG5zRm9udCwgZmxvYXQsIE5TRm9udComIG91dE5TRm9udCwgQ0dGb250UmVmJiBj
Z0ZvbnQpCiB7CiAgICAgb3V0TlNGb250ID0gbnNGb250OwogICAgIGNnRm9udCA9IENURm9udENv
cHlHcmFwaGljc0ZvbnQodG9DVEZvbnRSZWYobnNGb250KSwgMCk7CiB9Ci0jZW5kaWYgIC8vIFBM
QVRGT1JNKE1BQykKKyNlbmRpZiAgLy8gUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQog
CisjaWYgIVBMQVRGT1JNKElPUykKIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
TlNGb250ICpuc0ZvbnQsIGZsb2F0IHNpemUsIGJvb2wgaXNQcmludGVyRm9udCwgYm9vbCBzeW50
aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQpCiAgICAgOiBtX3N5bnRoZXRpY0Jv
bGQoc3ludGhldGljQm9sZCkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShzeW50aGV0aWNPYmxp
cXVlKQpAQCAtNDksOSArNTYsMjIgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShOU0ZvbnQgKm5zRm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJGb24KICAgICAsIG1f
d2lkdGhWYXJpYW50KHdpZHRoVmFyaWFudCkKICAgICAsIG1fZm9udChuc0ZvbnQpCiAgICAgLCBt
X2lzQ29sb3JCaXRtYXBGb250KGZhbHNlKQorI2Vsc2UKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEoQ1RGb250UmVmIGN0Rm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJG
b250LCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCkKKyAgICA6
IG1fc3ludGhldGljQm9sZChzeW50aGV0aWNCb2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVl
KHN5bnRoZXRpY09ibGlxdWUpCisgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQorICAg
ICwgbV9pc0Vtb2ppKGZhbHNlKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3dpZHRoVmFy
aWFudCh3aWR0aFZhcmlhbnQpCisgICAgLCBtX2ZvbnQoY3RGb250KQorICAgICwgbV9jZ0ZvbnQo
YWRvcHRDRihDVEZvbnRDb3B5R3JhcGhpY3NGb250KGN0Rm9udCwgTlVMTCkpKQorICAgICwgbV9p
c0NvbG9yQml0bWFwRm9udChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpICYga0NURm9u
dFRyYWl0Q29sb3JHbHlwaHMpCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKICAgICAsIG1faXND
b21wb3NpdGVGb250UmVmZXJlbmNlKGZhbHNlKQogICAgICwgbV9pc1ByaW50ZXJGb250KGlzUHJp
bnRlckZvbnQpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBBU1NFUlRfQVJHKG5zRm9udCwg
bnNGb250KTsKIAogICAgIENHRm9udFJlZiBjZ0ZvbnQgPSAwOwpAQCAtNjgsMTggKzg4LDM1IEBA
IEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoTlNGb250ICpuc0ZvbnQsIGZsb2F0
IHNpemUsIGJvb2wgaXNQcmludGVyRm9uCiAgICAgICAgIENGUmV0YWluKG1fZm9udCk7CiAKICAg
ICBtX2NnRm9udCA9IGFkb3B0Q0YoY2dGb250KTsKKyNlbHNlCisgICAgQVNTRVJUX0FSRyhjdEZv
bnQsIGN0Rm9udCk7CisKKyAgICBDRlJldGFpbihjdEZvbnQpOworI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCiB9CiAKLUZvbnRQbGF0Zm9ybURhdGE6OiB+Rm9udFBsYXRmb3JtRGF0YSgpCitGb250
UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCiB7CisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICBpZiAobV9mb250ICYmIG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PE5TRm9udCAqPigt
MSkpCiAgICAgICAgIENGUmVsZWFzZShtX2ZvbnQpOworI2Vsc2UKKyAgICBpZiAobV9mb250ICYm
IG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpKQorICAgICAgICBDRlJl
bGVhc2UobV9mb250KTsKKyNlbmRpZgogfQogCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRm
b3JtRGF0YUluaXQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZikKIHsKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgIG1fZm9udCA9IGYubV9mb250ICYmIGYubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nh
c3Q8TlNGb250ICo+KC0xKSA/IGNvbnN0X2Nhc3Q8TlNGb250ICo+KHN0YXRpY19jYXN0PGNvbnN0
IE5TRm9udCAqPihDRlJldGFpbihmLm1fZm9udCkpKSA6IGYubV9mb250OworI2Vsc2UKKyAgICBt
X2ZvbnQgPSBmLm1fZm9udCAmJiBmLm1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJl
Zj4oLTEpID8gc3RhdGljX2Nhc3Q8Q1RGb250UmVmPihjb25zdF9jYXN0PHZvaWQgKj4oQ0ZSZXRh
aW4oZi5tX2ZvbnQpKSkgOiBmLm1fZm9udDsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIG1faXNFbW9qaSA9IGYubV9pc0Vtb2ppOworI2VuZGlmCiAgICAgbV9jZ0ZvbnQgPSBmLm1f
Y2dGb250OwogICAgIG1fQ1RGb250ID0gZi5tX0NURm9udDsKIH0KQEAgLTg3LDEyICsxMjQsMjQg
QEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIGYpCiBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpw
bGF0Zm9ybURhdGFBc3NpZ24oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZikKIHsKICAgICBtX2Nn
Rm9udCA9IGYubV9jZ0ZvbnQ7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIG1faXNFbW9qaSA9IGYu
bV9pc0Vtb2ppOworI2VuZGlmCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAobV9mb250ID09
IGYubV9mb250KQogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgaWYgKGYubV9mb250ICYmIGYu
bV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKSkKICAgICAgICAgQ0ZSZXRh
aW4oZi5tX2ZvbnQpOwogICAgIGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nh
c3Q8TlNGb250ICo+KC0xKSkKICAgICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7CisjZWxzZQorICAg
IGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Q1RGb250UmVmPigtMSkg
JiYgZi5tX2ZvbnQgJiYgZi5tX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0x
KSAmJiBDRkVxdWFsKG1fZm9udCwgZi5tX2ZvbnQpKQorICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgaWYgKGYubV9mb250ICYmIGYubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Q1RGb250UmVm
PigtMSkpCisgICAgICAgIENGUmV0YWluKGYubV9mb250KTsKKyAgICBpZiAobV9mb250ICYmIG1f
Zm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpKQorICAgICAgICBDRlJlbGVh
c2UobV9mb250KTsKKyNlbmRpZgogICAgIG1fZm9udCA9IGYubV9mb250OwogICAgIG1fQ1RGb250
ID0gZi5tX0NURm9udDsKICAgICByZXR1cm4gKnRoaXM7CkBAIC0xMDAsMTEgKzE0OSwyOSBAQCBj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFBc3Np
Z24oY29uc3QgRm9udFBsYXRmb3JtRAogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3Jt
SXNFcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKIHsKLSAgICBpZiAo
bV9mb250IHx8IG90aGVyLm1fZm9udCkKLSAgICAgICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5t
X2ZvbnQ7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBpZiAobV9mb250IHx8IG90aGVy
Lm1fZm9udCkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgcmVzdWx0ID0gbV9mb250ICYm
IG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpICYmIG90aGVyLm1fZm9u
dCAmJiBvdGhlci5tX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSAmJiBD
RkVxdWFsKG1fZm9udCwgb3RoZXIubV9mb250KTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
ICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBBU1NFUlQobV9pc0Vtb2ppID09IG90aGVyLm1f
aXNFbW9qaSk7CisjZW5kaWYKKyNlbHNlCisgICAgICAgIHJlc3VsdCA9IG1fZm9udCA9PSBvdGhl
ci5tX2ZvbnQ7CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyNpZiBQTEFURk9STShJT1MpCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGlm
IChtX2NnRm9udCA9PSBvdGhlci5tX2NnRm9udCkKKyAgICAgICAgQVNTRVJUKG1faXNFbW9qaSA9
PSBvdGhlci5tX2lzRW1vamkpOworI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogICAg
IHJldHVybiBtX2NnRm9udCA9PSBvdGhlci5tX2NnRm9udDsKIH0KIAorI2lmICFQTEFURk9STShJ
T1MpCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldEZvbnQoTlNGb250ICpmb250KQogewogICAg
IEFTU0VSVF9BUkcoZm9udCwgZm9udCk7CkBAIC0xMzMsMTUgKzIwMCw0MyBAQCB2b2lkIEZvbnRQ
bGF0Zm9ybURhdGE6OnNldEZvbnQoTlNGb250ICpmb250KQogICAgIH0KICAgICBtX0NURm9udCA9
IDA7CiB9CisjZWxzZQordm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KENURm9udFJlZiBm
b250KQoreworICAgIEFTU0VSVF9BUkcoZm9udCwgZm9udCk7CisgICAgQVNTRVJUKG1fZm9udCAh
PSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpKTsKIAorICAgIGlmIChtX2ZvbnQgPT0g
Zm9udCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZSZXRhaW4oZm9udCk7CisgICAgaWYgKG1f
Zm9udCkKKyAgICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7CisgICAgbV9mb250ID0gZm9udDsKKyAg
ICBtX3NpemUgPSBDVEZvbnRHZXRTaXplKGZvbnQpOworICAgIG1fY2dGb250ID0gYWRvcHRDRihD
VEZvbnRDb3B5R3JhcGhpY3NGb250KGZvbnQsIG51bGxwdHIpKTsKKyAgICBtX2lzQ29sb3JCaXRt
YXBGb250ID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCkgJiBrQ1RGb250VHJhaXRDb2xv
ckdseXBoczsKK30KKyNlbmRpZgorCisjaWYgIVBMQVRGT1JNKElPUykKIGJvb2wgRm9udFBsYXRm
b3JtRGF0YTo6cm91bmRzR2x5cGhBZHZhbmNlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX2Zv
bnQgcmVuZGVyaW5nTW9kZV0gPT0gTlNGb250QW50aWFsaWFzZWRJbnRlZ2VyQWR2YW5jZW1lbnRz
UmVuZGVyaW5nTW9kZTsKIH0KKyNlbmRpZgogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OmFsbG93
c0xpZ2F0dXJlcygpIGNvbnN0CiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gIVtb
bV9mb250IGNvdmVyZWRDaGFyYWN0ZXJTZXRdIGNoYXJhY3RlcklzTWVtYmVyOidhJ107CisjZWxz
ZQorICAgIGlmICghbV9mb250KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5Q
dHI8Q0ZDaGFyYWN0ZXJTZXRSZWY+IGNoYXJhY3RlclNldCA9IGFkb3B0Q0YoQ1RGb250Q29weUNo
YXJhY3RlclNldChjdEZvbnQoKSkpOworICAgIHJldHVybiAhKGNoYXJhY3RlclNldC5nZXQoKSAm
JiBDRkNoYXJhY3RlclNldElzQ2hhcmFjdGVyTWVtYmVyKGNoYXJhY3RlclNldC5nZXQoKSwgJ2En
KSk7CisjZW5kaWYKIH0KIAogaW5saW5lIGludCBtYXBGb250V2lkdGhWYXJpYW50VG9DVEZlYXR1
cmVTZWxlY3RvcihGb250V2lkdGhWYXJpYW50IHZhcmlhbnQpCkBAIC0yMTcsNiArMzEyLDcgQEAg
Q1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0CiAgICAgaWYgKG1fQ1RG
b250KQogICAgICAgICByZXR1cm4gbV9DVEZvbnQuZ2V0KCk7CiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIG1fQ1RGb250ID0gdG9DVEZvbnRSZWYobV9mb250KTsKICAgICBpZiAobV9DVEZvbnQp
IHsKICAgICAgICAgQ1RGb250RGVzY3JpcHRvclJlZiBmb250RGVzY3JpcHRvcjsKQEAgLTIyOSw2
ICszMjUsMTcgQEAgQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0CiAg
ICAgICAgIG1fQ1RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMo
bV9DVEZvbnQuZ2V0KCksIG1fc2l6ZSwgMCwgZm9udERlc2NyaXB0b3IpKTsKICAgICB9IGVsc2UK
ICAgICAgICAgbV9DVEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQo
bV9jZ0ZvbnQuZ2V0KCksIG1fc2l6ZSwgMCwgY2FzY2FkZVRvTGFzdFJlc29ydEZvbnREZXNjcmlw
dG9yKCkpKTsKKyNlbHNlCisgICAgLy8gQXBwbGUgQ29sb3IgRW1vamkgc2l6ZSBpcyBhZGp1c3Rl
ZCAoYW5kIHRoZW4gcmUtYWRqdXN0ZWQgYnkgQ29yZSBUZXh0KSBhbmQgY2FwcGVkLgorICAgIENH
RmxvYXQgc2l6ZSA9ICFtX2lzRW1vamkgPyBtX3NpemUgOiBtX3NpemUgPD0gMTUgPyA0ICogKG1f
c2l6ZSArIDIpIC8gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oNSkgOiAxNjsKKyAgICBDVEZvbnREZXNj
cmlwdG9yUmVmIGZvbnREZXNjcmlwdG9yOworICAgIGNvbnN0IGNoYXIqIHBvc3RTY3JpcHROYW1l
ID0gQ0dGb250R2V0UG9zdFNjcmlwdE5hbWUobV9jZ0ZvbnQuZ2V0KCkpOworICAgIGlmIChwb3N0
U2NyaXB0TmFtZSAmJiAoIXN0cmNtcChwb3N0U2NyaXB0TmFtZSwgIkhvZWZsZXJUZXh0LUl0YWxp
YyIpIHx8ICFzdHJjbXAocG9zdFNjcmlwdE5hbWUsICJIb2VmbGVyVGV4dC1CbGFja0l0YWxpYyIp
KSkKKyAgICAgICAgZm9udERlc2NyaXB0b3IgPSBjYXNjYWRlVG9MYXN0UmVzb3J0QW5kRGlzYWJs
ZVN3YXNoZXNGb250RGVzY3JpcHRvcigpOworICAgIGVsc2UKKyAgICAgICAgZm9udERlc2NyaXB0
b3IgPSBjYXNjYWRlVG9MYXN0UmVzb3J0Rm9udERlc2NyaXB0b3IoKTsKKyAgICBtX0NURm9udCA9
IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEdyYXBoaWNzRm9udChtX2NnRm9udC5nZXQoKSwgc2l6
ZSwgMCwgZm9udERlc2NyaXB0b3IpKTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAgICAg
aWYgKG1fd2lkdGhWYXJpYW50ICE9IFJlZ3VsYXJXaWR0aCkgewogICAgICAgICBpbnQgZmVhdHVy
ZVR5cGVWYWx1ZSA9IGtUZXh0U3BhY2luZ1R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRGlzcGxheVJlZnJlc2hNb25pdG9yaU9TLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcmlP
Uy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ODA0M2NhYWVjYzgwNTViNDhiYzAyZmUwMzVjYmY2OWYyMTlhZWMw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9z
L0Rpc3BsYXlSZWZyZXNoTW9uaXRvcmlPUy5tbQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9O
SVRPUikKKworI2luY2x1ZGUgIkRpc3BsYXlSZWZyZXNoTW9uaXRvci5oIgorCisjaW5jbHVkZSA8
UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Cisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgor
CitAaW50ZXJmYWNlIFdlYkRpc3BsYXlMaW5rSGFuZGxlciA6IE5TT2JqZWN0Cit7CisgICAgV2Vi
Q29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yKiBtX21vbml0b3I7CisgICAgQ0FEaXNwbGF5TGlu
ayogbV9kaXNwbGF5TGluazsKK30KKworLSAoaWQpaW5pdFdpdGhNb25pdG9yOihXZWJDb3JlOjpE
aXNwbGF5UmVmcmVzaE1vbml0b3IqKW1vbml0b3I7CistICh2b2lkKWhhbmRsZURpc3BsYXlMaW5r
OihDQURpc3BsYXlMaW5rICopc2VuZGVyOworLSAodm9pZClpbnZhbGlkYXRlOworCitAZW5kCisK
K3N0YXRpYyBkb3VibGUgbWVkaWFUaW1lVG9DdXJyZW50VGltZShDRlRpbWVJbnRlcnZhbCB0KQor
eworICAgIHJldHVybiBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSArIHQgLSBDQUN1cnJl
bnRNZWRpYVRpbWUoKTsKK30KKworQGltcGxlbWVudGF0aW9uIFdlYkRpc3BsYXlMaW5rSGFuZGxl
cgorCistIChpZClpbml0V2l0aE1vbml0b3I6KFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRv
ciopbW9uaXRvcgoreworICAgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgICAgIG1f
bW9uaXRvciA9IG1vbml0b3I7CisgICAgICAgIC8vIE5vdGUgdGhhdCBDQURpc3BsYXlMaW5rIHJl
dGFpbnMgaXRzIHRhcmdldCAoc2VsZiksIHNvIGEgY2FsbCB0byAtaW52YWxpZGF0ZSBpcyBuZWVk
ZWQgb24gdGVhcmRvd24uCisgICAgICAgIG1fZGlzcGxheUxpbmsgPSBbQ0FEaXNwbGF5TGluayBk
aXNwbGF5TGlua1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaGFuZGxlRGlzcGxh
eUxpbms6KV07CisgICAgICAgIFttX2Rpc3BsYXlMaW5rIGFkZFRvUnVuTG9vcDpXZWJUaHJlYWRO
U1J1bkxvb3AoKSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKKyAgICB9CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VSVCghbV9kaXNwbGF5
TGluayk7IC8vIC1pbnZhbGlkYXRlIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGFscmVhZHkuCisg
ICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKWhhbmRsZURpc3BsYXlMaW5rOihDQURp
c3BsYXlMaW5rICopc2VuZGVyCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsK
KyAgICBtX21vbml0b3ItPmRpc3BsYXlMaW5rRmlyZWQoc2VuZGVyLnRpbWVzdGFtcCk7Cit9CisK
Ky0gKHZvaWQpaW52YWxpZGF0ZQoreworICAgIFttX2Rpc3BsYXlMaW5rIGludmFsaWRhdGVdOwor
ICAgIG1fZGlzcGxheUxpbmsgPSBudWxscHRyOworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKyAKK0Rpc3BsYXlSZWZyZXNoTW9uaXRvcjo6fkRpc3BsYXlSZWZyZXNoTW9uaXRvcigp
Cit7CisgICAgWyhXZWJEaXNwbGF5TGlua0hhbmRsZXIqKSBtX2Rpc3BsYXlMaW5rIGludmFsaWRh
dGVdOworICAgIFsoV2ViRGlzcGxheUxpbmtIYW5kbGVyKikgbV9kaXNwbGF5TGluayByZWxlYXNl
XTsKK30KKworYm9vbCBEaXNwbGF5UmVmcmVzaE1vbml0b3I6OnJlcXVlc3RSZWZyZXNoQ2FsbGJh
Y2soKQoreworICAgIGlmICghbV9hY3RpdmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgaWYgKCFtX2Rpc3BsYXlMaW5rKSB7CisgICAgICAgIG1fZGlzcGxheUxpbmsgPSBb
W1dlYkRpc3BsYXlMaW5rSGFuZGxlciBhbGxvY10gaW5pdFdpdGhNb25pdG9yOnRoaXNdOworICAg
ICAgICBtX2FjdGl2ZSA9IHRydWU7CisgICAgfQorCisgICAgbV9zY2hlZHVsZWQgPSB0cnVlOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRvcjo6ZGlzcGxh
eUxpbmtGaXJlZChkb3VibGUgbm93U2Vjb25kcykKK3sKKyAgICBpZiAoIW1fcHJldmlvdXNGcmFt
ZURvbmUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJldmlvdXNGcmFtZURvbmUgPSBmYWxz
ZTsKKyAgICBtX21vbm90b25pY0FuaW1hdGlvblN0YXJ0VGltZSA9IG1lZGlhVGltZVRvQ3VycmVu
dFRpbWUobm93U2Vjb25kcyk7CisKKyAgICBoYW5kbGVEaXNwbGF5UmVmcmVzaGVkTm90aWZpY2F0
aW9uT25NYWluVGhyZWFkKHRoaXMpOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVjMmY1
YjVhZmMyZDNhM2ZlZjkwM2RmNTY5NTkwNmE0NzAwZWRiZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KQEAgLTAs
MCArMSw2NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiRm9udENhY2hlLmgiCisKKyNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIlJlbmRlclRo
ZW1lSU9TLmgiCisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ0dGb250VW5pY29kZVN1cHBvcnQuaD4K
KyNpbXBvcnQgPENvcmVUZXh0L0NURm9udERlc2NyaXB0b3JQcml2Lmg+CisjaW1wb3J0IDxDb3Jl
VGV4dC9DVEZvbnRQcml2Lmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAg
ICB3a1NldFVwRm9udENhY2hlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZvbnRXZWln
aHRCb2xkKE5TSW50ZWdlciBmb250V2VpZ2h0KQoreworICAgIHJldHVybiBmb250V2VpZ2h0ID49
IEZvbnRXZWlnaHQ2MDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCByZXF1aXJlc0N1c3RvbUZh
bGxiYWNrRm9udChjb25zdCBVSW50MzIgY2hhcmFjdGVyKQoreworICAgIHJldHVybiBjaGFyYWN0
ZXIgPT0gQXBwbGVMb2dvIHx8IGNoYXJhY3RlciA9PSBibGFja0NpcmNsZTsKK30KKworc3RhdGlj
IENGQ2hhcmFjdGVyU2V0UmVmIGNvcHlGb250Q2hhcmFjdGVyU2V0KENGU3RyaW5nUmVmIGZvbnRO
YW1lKQoreworICAgIC8vIFRoZSBzaXplLCAxMCwgaXMgYXJiaXRyYXJ5LgorICAgIFJldGFpblB0
cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVz
Y3JpcHRvckNyZWF0ZVdpdGhOYW1lQW5kU2l6ZShmb250TmFtZSwgMTApKTsKKyAgICBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBmb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0
b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIDEwLCBudWxscHRyKSk7CisgICAgcmV0dXJuIChDRkNo
YXJhY3RlclNldFJlZilDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250RGVzY3JpcHRv
ci5nZXQoKSwga0NURm9udENoYXJhY3RlclNldEF0dHJpYnV0ZSk7Cit9CisKK3N0YXRpYyBDRkNo
YXJhY3RlclNldFJlZiBhcHBsZUNvbG9yRW1vamlDaGFyYWN0ZXJTZXQoKQoreworICAgIHN0YXRp
YyBDRkNoYXJhY3RlclNldFJlZiBjaGFyYWN0ZXJTZXQgPSBjb3B5Rm9udENoYXJhY3RlclNldChD
RlNUUigiQXBwbGVDb2xvckVtb2ppIikpOworICAgIHJldHVybiBjaGFyYWN0ZXJTZXQ7Cit9CisK
K3N0YXRpYyBDRkNoYXJhY3RlclNldFJlZiBwaG9uZUZhbGxiYWNrQ2hhcmFjdGVyU2V0KCkKK3sK
KyAgICBzdGF0aWMgQ0ZDaGFyYWN0ZXJTZXRSZWYgY2hhcmFjdGVyU2V0ID0gY29weUZvbnRDaGFy
YWN0ZXJTZXQoQ0ZTVFIoIi5QaG9uZUZhbGxiYWNrIikpOworICAgIHJldHVybiBjaGFyYWN0ZXJT
ZXQ7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U3lzdGVt
Rm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0YSwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCit7CisgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
cGxhdGZvcm1EYXRhID0gb3JpZ2luYWxGb250RGF0YS0+cGxhdGZvcm1EYXRhKCk7CisgICAgQ1RG
b250UmVmIGN0Rm9udCA9IHBsYXRmb3JtRGF0YS5mb250KCk7CisKKyAgICBDRkluZGV4IGNvdmVy
ZWRMZW5ndGggPSAwOworICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IHN1YnN0aXR1dGVGb250ID0g
YWRvcHRDRihDVEZvbnRDcmVhdGVQaHlzaWNhbEZvbnRGb3JDaGFyYWN0ZXJzV2l0aExhbmd1YWdl
KGN0Rm9udCwgKGNvbnN0IFVURjE2Q2hhciopY2hhcmFjdGVycywgKENGSW5kZXgpbGVuZ3RoLCAw
LCAmY292ZXJlZExlbmd0aCkpOworICAgIGlmICghc3Vic3RpdHV0ZUZvbnQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgb3JpZ2luYWxUcmFpdHMgPSBDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpOworICAgIENURm9udFN5bWJvbGljVHJhaXRzIGFj
dHVhbFRyYWl0cyA9IDA7CisgICAgaWYgKGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2Vp
Z2h0KCkpIHx8IGRlc2NyaXB0aW9uLml0YWxpYygpKQorICAgICAgICBhY3R1YWxUcmFpdHMgPSBD
VEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhzdWJzdGl0dXRlRm9udC5nZXQoKSk7CisKKyAgICBib29s
IHN5bnRoZXRpY0JvbGQgPSAob3JpZ2luYWxUcmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKSAmJiAh
KGFjdHVhbFRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpOworICAgIGJvb2wgc3ludGhldGljT2Js
aXF1ZSA9IChvcmlnaW5hbFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykgJiYgIShhY3R1YWxU
cmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOworCisgICAgRm9udFBsYXRmb3JtRGF0YSBhbHRl
cm5hdGVGb250KHN1YnN0aXR1dGVGb250LmdldCgpLCBwbGF0Zm9ybURhdGEuc2l6ZSgpLCBwbGF0
Zm9ybURhdGEuaXNQcmludGVyRm9udCgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVl
LCBwbGF0Zm9ybURhdGEubV9vcmllbnRhdGlvbik7CisgICAgYWx0ZXJuYXRlRm9udC5tX2lzRW1v
amkgPSBDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShzdWJzdGl0dXRlRm9udC5nZXQoKSk7CisKKyAg
ICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoJmFsdGVybmF0ZUZvbnQsIERvTm90UmV0YWluKTsK
K30KKworUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFj
a0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBpbnQgbGVuZ3RoKQoreworICAgIHN0YXRpYyBib29sIGlzR0IxODAzMENvbXBsaWFu
Y2VSZXF1aXJlZCA9IHdrSXNHQjE4MDMwQ29tcGxpYW5jZVJlcXVpcmVkKCk7CisKKyAgICAvLyBV
bmxpa2UgT1MgWCwgb3VyIGZhbGxiYWNrIGZvbnQgb24gaVBob25lIGlzIEFyaWFsIFVuaWNvZGUs
IHdoaWNoIGRvZXNuJ3QgaGF2ZSBzb21lIGFwcGxlLXNwZWNpZmljIGdseXBocyBsaWtlIEY4RkYu
CisgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBBcHBsZSBGYWxsYmFjayBmb250IGluIHRoaXMgY2Fz
ZS4KKyAgICBpZiAobGVuZ3RoID4gMCAmJiByZXF1aXJlc0N1c3RvbUZhbGxiYWNrRm9udCgqY2hh
cmFjdGVycykpCisgICAgICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShnZXRDdXN0b21GYWxs
YmFja0ZvbnQoKmNoYXJhY3RlcnMsIGRlc2NyaXB0aW9uKSwgRG9Ob3RSZXRhaW4pOworCisgICAg
VUNoYXIzMiBjID0gKmNoYXJhY3RlcnM7CisgICAgaWYgKGxlbmd0aCA+IDEgJiYgVTE2X0lTX0xF
QUQoYykgJiYgVTE2X0lTX1RSQUlMKGNoYXJhY3RlcnNbMV0pKQorICAgICAgICBjID0gVTE2X0dF
VF9TVVBQTEVNRU5UQVJZKGMsIGNoYXJhY3RlcnNbMV0pOworCisgICAgLy8gRm9yIHN5c3RlbSBm
b250cyB3ZSB1c2UgQ29yZVRleHQgZmFsbGJhY2sgbWVjaGFuaXNtLgorICAgIGlmIChsZW5ndGgp
IHsKKyAgICAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnREZXNjcmlwdG9y
ID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3Iob3JpZ2luYWxGb250RGF0YS0+Z2V0
Q1RGb250KCkpKTsKKyAgICAgICAgaWYgKENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9udChm
b250RGVzY3JpcHRvci5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZ2V0U3lzdGVtRm9udEZh
bGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlvbiwgb3JpZ2luYWxGb250RGF0YSwgY2hhcmFj
dGVycywgbGVuZ3RoKTsKKyAgICB9CisKKyAgICBib29sIHVzZUNKRm9udCA9IGZhbHNlOworICAg
IGJvb2wgdXNlS29yZWFuRm9udCA9IGZhbHNlOworICAgIGJvb2wgdXNlQ3lyaWxsaWNGb250ID0g
ZmFsc2U7CisgICAgYm9vbCB1c2VBcmFiaWNGb250ID0gZmFsc2U7CisgICAgYm9vbCB1c2VIZWJy
ZXdGb250ID0gZmFsc2U7CisgICAgYm9vbCB1c2VJbmRpY0ZvbnQgPSBmYWxzZTsKKyAgICBib29s
IHVzZVRoYWlGb250ID0gZmFsc2U7CisgICAgYm9vbCB1c2VUaWJldGFuRm9udCA9IGZhbHNlOwor
ICAgIGJvb2wgdXNlQ2FuYWRpYW5BYm9yaWdpbmFsU3lsbGFiaWNzRm9udCA9IGZhbHNlOworICAg
IGJvb2wgdXNlRW1vamlGb250ID0gZmFsc2U7CisgICAgaWYgKGxlbmd0aCA+IDApIHsKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgLy8gVGhpcyBpc24ndCBhIGxvb3AgYnV0IGEgd2F5IHRvIGVm
ZmljaWVudGx5IGNoZWNrIGZvciByYW5nZXMgb2YgY2hhcmFjdGVycy4KKworICAgICAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyByYW5nZXMgYXJlIEtvcmVhbiBIYW5ndWwgYW5kIHNob3VsZCBiZSBy
ZW5kZXJlZCBieSBBcHBsZVNER290aGljTmVvCisgICAgICAgICAgICAvLyBVKzExMDAgLSBVKzEx
RkYKKyAgICAgICAgICAgIC8vIFUrMzEzMCAtIFUrMzE4RgorICAgICAgICAgICAgLy8gVStBQzAw
IC0gVStEN0EzCisKKyAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBDeXJpbGxpYyBhbmQgc2hvdWxk
IGJlIHJlbmRlcmVkIGJ5IEhlbHZldGljYSBOZXVlCisgICAgICAgICAgICAvLyBVKzA0MDAgLSBV
KzA1MkYKKworICAgICAgICAgICAgaWYgKGMgPCAweDQwMCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmIChjIDw9IDB4NTJGKSB7CisgICAgICAgICAgICAgICAgdXNlQ3ly
aWxsaWNGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChjIDwgMHg1OTApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBpZiAoYyA8IDB4NjAwKSB7CisgICAgICAgICAgICAgICAgdXNlSGVicmV3Rm9udCA9
IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoYyA8PSAweDZGRikgeworICAgICAgICAgICAgICAgIHVzZUFyYWJpY0ZvbnQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGMgPCAweDkwMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDwg
MHhFMDApIHsKKyAgICAgICAgICAgICAgICB1c2VJbmRpY0ZvbnQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPD0gMHhFN0Yp
IHsKKyAgICAgICAgICAgICAgICB1c2VUaGFpRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA8IDB4MEYwMCkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDw9IDB4MEZGRikgeworICAgICAg
ICAgICAgICAgIHVzZVRpYmV0YW5Gb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDwgMHgxMTAwKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGMgPD0gMHgxMUZGKSB7CisgICAgICAgICAgICAg
ICAgdXNlS29yZWFuRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoYyA+IDB4MTQwMCAmJiBjIDwgMHgxNzgwKSB7CisgICAg
ICAgICAgICAgICAgdXNlQ2FuYWRpYW5BYm9yaWdpbmFsU3lsbGFiaWNzRm9udCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA8
IDB4MkU4MCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDwgMHgz
MTMwKSB7CisgICAgICAgICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDw9IDB4MzE4Rikgewor
ICAgICAgICAgICAgICAgIHVzZUtvcmVhbkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPCAweEFDMDApIHsKKyAgICAg
ICAgICAgICAgICB1c2VDSkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPD0gMHhEN0EzKSB7CisgICAgICAgICAgICAg
ICAgdXNlS29yZWFuRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIGMgPD0gMHhERkZGKSB7CisgICAgICAgICAgICAgICAg
dXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICggYyA8IDB4RTAwMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmICggYyA8IDB4RTYwMCkgeworICAgICAgICAgICAgICAgIGlmIChpc0dCMTgw
MzBDb21wbGlhbmNlUmVxdWlyZWQpCisgICAgICAgICAgICAgICAgICAgIHVzZUNKRm9udCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB1c2VFbW9qaUZv
bnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCBjIDw9IDB4RTg2NCAmJiBpc0dCMTgwMzBDb21wbGlhbmNlUmVxdWlyZWQpIHsK
KyAgICAgICAgICAgICAgICB1c2VDSkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPD0gMHhGOEZGKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGMgPCAweEZCMDApIHsKKyAgICAgICAgICAg
ICAgICB1c2VDSkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGMgPCAweEZCNTApCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAoYyA8PSAweEZERkYpIHsKKyAgICAgICAgICAgICAgICB1c2VBcmFi
aWNGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChjIDwgMHhGRTIwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgaWYgKGMgPCAweEZFNzApIHsKKyAgICAgICAgICAgICAgICB1c2VDSkZvbnQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGMgPCAweEZGMDApIHsKKyAgICAgICAgICAgICAgICB1c2VBcmFiaWNGb250ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDwg
MHhGRkYwKSB7CisgICAgICAgICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjID49MHgyMDAwMCAm
JiBjIDw9IDB4MkZGRkYpCisgICAgICAgICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAg
ICAgfSB3aGlsZSAoMCk7CisgICAgfQorCisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1w
bGVGb250RGF0YTsKKworICAgIGlmICh1c2VDSkZvbnQpIHsKKyAgICAgICAgLy8gQnkgZGVmYXVs
dCwgQ2hpbmVzZSBmb250IGlzIHByZWZlcnJlZCwgZmFsbCBiYWNrIG9uIEphcGFuZXNlLgorCisg
ICAgICAgIGVudW0gQ0pLRm9udFZhcmlhbnQgeworICAgICAgICAgICAga0NKS0ZvbnRVc2VIaXJh
Z2lubyA9IDAsCisgICAgICAgICAgICBrQ0pLRm9udFVzZVNUSGVpdGlTQywKKyAgICAgICAgICAg
IGtDSktGb250VXNlU1RIZWl0aVRDLAorICAgICAgICAgICAga0NKS0ZvbnRVc2VTVEhlaXRpSiwK
KyAgICAgICAgICAgIGtDSktGb250VXNlU1RIZWl0aUssCisgICAgICAgICAgICBrQ0pLRm9udHNV
c2VIS0dQVzNVSQorICAgICAgICB9OworCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9taWNTdHJpbmc+IHBsYWluSGlyYWdpbm8oIkhpcmFLYWt1UHJvTi1XMyIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBwbGFpblNUSGVpdGlTQygiU1RIZWl0aVNDLUxpZ2h0IiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IHBsYWluU1RIZWl0aVRDKCJTVEhlaXRpVEMtTGlnaHQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gcGxhaW5TVEhlaXRpSigiU1RIZWl0aUotTGlnaHQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gcGxhaW5TVEhlaXRpSygiU1RIZWl0aUstTGlnaHQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gcGxhaW5IS0dQVzNVSSgiSEtHUFczVUkiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIEF0b21pY1N0cmluZyogY2pr
UGxhaW5bXSA9IHsgICAgIAorICAgICAgICAgICAgJnBsYWluSGlyYWdpbm8uZ2V0KCksCisgICAg
ICAgICAgICAmcGxhaW5TVEhlaXRpU0MuZ2V0KCksCisgICAgICAgICAgICAmcGxhaW5TVEhlaXRp
VEMuZ2V0KCksCisgICAgICAgICAgICAmcGxhaW5TVEhlaXRpSi5nZXQoKSwKKyAgICAgICAgICAg
ICZwbGFpblNUSGVpdGlLLmdldCgpLAorICAgICAgICAgICAgJnBsYWluSEtHUFczVUkuZ2V0KCks
CisgICAgICAgIH07CisKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gYm9sZEhpcmFnaW5vKCJIaXJhS2FrdVByb04tVzYiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gYm9sZFNUSGVpdGlTQygiU1RIZWl0aVNDLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBib2xkU1RIZWl0aVRDKCJTVEhlaXRpVEMtTWVkaXVtIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGJvbGRTVEhlaXRpSigiU1RIZWl0aUotTWVkaXVtIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGJvbGRTVEhlaXRpSygiU1RIZWl0aUstTWVkaXVtIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGJvbGRIS0dQVzNVSSgiSEtHUFczVUkiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIEF0b21pY1N0cmluZyogY2prQm9sZFtdID0geyAg
CisgICAgICAgICAgICAmYm9sZEhpcmFnaW5vLmdldCgpLAorICAgICAgICAgICAgJmJvbGRTVEhl
aXRpU0MuZ2V0KCksCisgICAgICAgICAgICAmYm9sZFNUSGVpdGlUQy5nZXQoKSwKKyAgICAgICAg
ICAgICZib2xkU1RIZWl0aUouZ2V0KCksCisgICAgICAgICAgICAmYm9sZFNUSGVpdGlLLmdldCgp
LAorICAgICAgICAgICAgJmJvbGRIS0dQVzNVSS5nZXQoKSwKKyAgICAgICAgfTsKKworICAgICAg
ICAvLyBEZWZhdWx0IGJlbG93IGlzIGZvciBTaW1wbGlmaWVkIENoaW5lc2UgdXNlcjogemgtSGFu
cyAtIG5vdGUgdGhhdCBIaXJhZ2lubyBpcyB0aGUKKyAgICAgICAgLy8gdGhlIHNlY29uZGFyeSBm
b250IGFzIHdlIHdhbnQgaXRzIGZvciBIaXJhZ2FuYSBhbmQgS2F0YWthbmEuIFRoZSBvdGhlciBD
SksgZm9udHMKKyAgICAgICAgLy8gZG8gbm90LCBhbmQgc2hvdWxkIG5vdCwgY29udGFpbiBIaXJh
Z2FuYSBvciBLYXRha2FuYSBnbHlwaHMuCisgICAgICAgIHN0YXRpYyBDSktGb250VmFyaWFudCBw
cmVmZXJyZWRDSktGb250ID0ga0NKS0ZvbnRVc2VTVEhlaXRpU0M7CisgICAgICAgIHN0YXRpYyBD
SktGb250VmFyaWFudCBzZWNvbmRhcnlDSktGb250ID0ga0NKS0ZvbnRzVXNlSEtHUFczVUk7CisK
KyAgICAgICAgc3RhdGljIGJvb2wgQ0pLRm9udEluaXRpYWxpemVkOworICAgICAgICBpZiAoIUNK
S0ZvbnRJbml0aWFsaXplZCkgeworICAgICAgICAgICAgQ0pLRm9udEluaXRpYWxpemVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIC8vIFRlc3Rpbmc6IGxhbmd1YWdlTmFtZSA9IChDRlN0cmluZ1JlZilA
ImphIjsKKyAgICAgICAgICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CisgICAgICAgICAgICBOU0FycmF5ICpsYW5ndWFn
ZXMgPSBbZGVmYXVsdHMgc3RyaW5nQXJyYXlGb3JLZXk6QCJBcHBsZUxhbmd1YWdlcyJdOworCisg
ICAgICAgICAgICBpZiAobGFuZ3VhZ2VzKSB7CisgICAgICAgICAgICAgICAgZm9yIChOU1N0cmlu
ZyAqbGFuZ3VhZ2UgaW4gbGFuZ3VhZ2VzKSB7CisgICAgICAgICAgICAgICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gbGFuZ3VhZ2VOYW1lID0gYWRvcHRDRihDRkxvY2FsZUNyZWF0ZUNhbm9u
aWNhbExhbmd1YWdlSWRlbnRpZmllckZyb21TdHJpbmcobnVsbHB0ciwgKENGU3RyaW5nUmVmKWxh
bmd1YWdlKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChDRkVxdWFsKGxhbmd1YWdlTmFtZS5n
ZXQoKSwgQ0ZTVFIoInpoLUhhbnMiKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsg
Ly8gU2ltcGxpZmllZCBDaGluZXNlIC0gZGVmYXVsdCBzZXR0aW5ncworICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChDRkVxdWFsKGxhbmd1YWdlTmFtZS5nZXQoKSwgQ0ZTVFIoImphIikpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRDSktGb250ID0ga0NKS0ZvbnRVc2VI
aXJhZ2lubzsgLy8gSmFwYW5lc2UgLSBwcmVmZXIgSGlyYWdpbm8gYW5kIFNUSGVpdGkgSmFwYW5z
ZSBWYXJpYW50CisgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnlDSktGb250ID0ga0NK
S0ZvbnRVc2VTVEhlaXRpSjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKENGRXF1YWwobGFuZ3VhZ2VOYW1lLmdldCgpLCBDRlNU
Uigia28iKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZENKS0ZvbnQgPSBr
Q0pLRm9udFVzZVNUSGVpdGlLOyAvLyBLb3JlYW4gLSBwcmVmZXIgU1RIZWl0aSBLb3JlYW4gVmFy
aWFudCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKENGRXF1YWwobGFuZ3VhZ2VOYW1lLmdldCgpLCBDRlNUUigiemgtSGFudCIp
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ0pLRm9udCA9IGtDSktGb250
VXNlU1RIZWl0aVRDOyAvLyBUcmFkaXRpb25hbCBDaGluZXNlIC0gcHJlZmVyIFNUSGVpdGkgVHJh
ZGl0aW9uYWwgVmFyaWFudAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0
aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/ICpjamtCb2xkW3By
ZWZlcnJlZENKS0ZvbnRdIDogKmNqa1BsYWluW3ByZWZlcnJlZENKS0ZvbnRdLCBmYWxzZSwgRG9O
b3RSZXRhaW4pOworICAgICAgICBib29sIHVzZVNlY29uZGFyeUZvbnQgPSB0cnVlOworICAgICAg
ICBpZiAoc2ltcGxlRm9udERhdGEpIHsKKyAgICAgICAgICAgIENHR2x5cGggZ2x5cGhzWzJdOwor
ICAgICAgICAgICAgLy8gQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMgdGFrZXMgVVRGLTE2IGJ1
ZmZlci4gU2hvdWxkIG9ubHkgYmUgMSBjb2RlcG9pbnQgYnV0IHNpbmNlIHdlIG1heSBwYXNzIGlu
IHR3byBVVEYtMTYgY2hhcmFjdGVycywKKyAgICAgICAgICAgIC8vIG1ha2Ugcm9vbSBmb3IgMiBn
bHlwaHMganVzdCB0byBiZSBzYWZlLgorICAgICAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5p
Y2hhcnMoc2ltcGxlRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBjaGFyYWN0ZXJz
LCBnbHlwaHMsIGxlbmd0aCk7CisKKyAgICAgICAgICAgIHVzZVNlY29uZGFyeUZvbnQgPSAoZ2x5
cGhzWzBdID09IDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZVNlY29uZGFyeUZvbnQp
CisgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0
aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/ICpjamtCb2xkW3Nl
Y29uZGFyeUNKS0ZvbnRdIDogKmNqa1BsYWluW3NlY29uZGFyeUNKS0ZvbnRdLCBmYWxzZSwgRG9O
b3RSZXRhaW4pOworICAgIH0gZWxzZSBpZiAodXNlS29yZWFuRm9udCkgeworICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrb3JlYW5QbGFpbigiQXBwbGVTREdvdGhp
Y05lby1NZWRpdW0iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4ga29yZWFuQm9sZCgiQXBwbGVT
REdvdGhpY05lby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlz
Rm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8ga29yZWFuQm9sZCA6IGtvcmVh
blBsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSBpZiAodXNlQ3lyaWxsaWNG
b250KSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmls
bGljUGxhaW4oIkhlbHZldGljYU5ldWUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY3lyaWxs
aWNCb2xkKCJIZWx2ZXRpY2FOZXVlLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNj
cmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjeXJpbGxp
Y0JvbGQgOiBjeXJpbGxpY1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSBp
ZiAodXNlQXJhYmljRm9udCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBhcmFiaWNQbGFpbigiR2VlemFQcm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
YXJhYmljQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2Ny
aXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGFyYWJpY0Jv
bGQgOiBhcmFiaWNQbGFpbiwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICB9IGVsc2UgaWYgKHVz
ZUhlYnJld0ZvbnQpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gaGVicmV3UGxhaW4oIkFyaWFsSGVicmV3IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhl
YnJld0JvbGQoIkFyaWFsSGVicmV3LUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNj
cmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBoZWJyZXdC
b2xkIDogaGVicmV3UGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgfSBlbHNlIGlmICh1
c2VJbmRpY0ZvbnQpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gZGV2YW5hZ2FyaUZvbnQoIkRldmFuYWdhcmlTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBiZW5nYWxpRm9udCgiQmFuZ2xhU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gZ3VybXVraGlGb250KCJHdXJtdWtoaU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7IC8vIE1pZ2h0IGJlIHJlcGxhY2VkIGluIGEgZnV0dXJlIHJlbGVhc2Ugd2l0
aCBhIFNhbmdhbSB2ZXJzaW9uLgorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBndWphcmF0aUZvbnQoIkd1amFyYXRpU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gb3JpeWFGb250KCJPcml5YVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IHRhbWlsRm9udCgiVGFtaWxTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0
ZWx1Z3VGb250KCJUZWx1Z3VTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrYW5u
YWRhRm9udCgiS2FubmFkYVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1hbGF5
YWxhbUZvbnQoIk1hbGF5YWxhbVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNp
bmhhbGFGb250KCJTaW5oYWxhU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBk
ZXZhbmFnYXJpRm9udEJvbGQoIkRldmFuYWdhcmlTYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9taWNTdHJpbmc+IGJlbmdhbGlGb250Qm9sZCgiQmFuZ2xhU2FuZ2FtTU4tQm9sZCIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBndXJtdWtoaUZvbnRCb2xkKCJHdXJtdWtoaU1OLUJvbGQiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsgLy8gTWlnaHQgYmUgcmVwbGFjZWQg
aW4gYSBmdXR1cmUgcmVsZWFzZSB3aXRoIGEgU2FuZ2FtIHZlcnNpb24uCisgICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGd1amFyYXRpRm9udEJvbGQoIkd1amFyYXRp
U2FuZ2FtTU4tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBvcml5YUZvbnRCb2xkKCJP
cml5YVNhbmdhbU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGFtaWxGb250Qm9s
ZCgiVGFtaWxTYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRlbHVndUZv
bnRCb2xkKCJUZWx1Z3VTYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGth
bm5hZGFGb250Qm9sZCgiS2FubmFkYVNhbmdhbU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gbWFsYXlhbGFtRm9udEJvbGQoIk1hbGF5YWxhbVNhbmdhbU1OLUJvbGQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gc2luaGFsYUZvbnRCb2xkKCJTaW5oYWxhU2FuZ2FtTU4tQm9sZCIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworCisgICAgICAgIHN0YXRpYyBB
dG9taWNTdHJpbmcqIGluZGljVW5pY29kZVBhZ2VGb250c1tdID0geworICAgICAgICAgICAgJmRl
dmFuYWdhcmlGb250LmdldCgpLAorICAgICAgICAgICAgJmJlbmdhbGlGb250LmdldCgpLAorICAg
ICAgICAgICAgJmd1cm11a2hpRm9udC5nZXQoKSwKKyAgICAgICAgICAgICZndWphcmF0aUZvbnQu
Z2V0KCksCisgICAgICAgICAgICAmb3JpeWFGb250LmdldCgpLAorICAgICAgICAgICAgJnRhbWls
Rm9udC5nZXQoKSwKKyAgICAgICAgICAgICZ0ZWx1Z3VGb250LmdldCgpLAorICAgICAgICAgICAg
Jmthbm5hZGFGb250LmdldCgpLAorICAgICAgICAgICAgJm1hbGF5YWxhbUZvbnQuZ2V0KCksCisg
ICAgICAgICAgICAmc2luaGFsYUZvbnQuZ2V0KCkKKyAgICAgICAgfTsKKworICAgICAgICBzdGF0
aWMgQXRvbWljU3RyaW5nKiBpbmRpY1VuaWNvZGVQYWdlRm9udHNCb2xkW10gPSB7CisgICAgICAg
ICAgICAmZGV2YW5hZ2FyaUZvbnRCb2xkLmdldCgpLAorICAgICAgICAgICAgJmJlbmdhbGlGb250
Qm9sZC5nZXQoKSwKKyAgICAgICAgICAgICZndXJtdWtoaUZvbnRCb2xkLmdldCgpLAorICAgICAg
ICAgICAgJmd1amFyYXRpRm9udEJvbGQuZ2V0KCksCisgICAgICAgICAgICAmb3JpeWFGb250Qm9s
ZC5nZXQoKSwKKyAgICAgICAgICAgICZ0YW1pbEZvbnRCb2xkLmdldCgpLAorICAgICAgICAgICAg
JnRlbHVndUZvbnRCb2xkLmdldCgpLAorICAgICAgICAgICAgJmthbm5hZGFGb250Qm9sZC5nZXQo
KSwKKyAgICAgICAgICAgICZtYWxheWFsYW1Gb250Qm9sZC5nZXQoKSwKKyAgICAgICAgICAgICZz
aW5oYWxhRm9udEJvbGQuZ2V0KCkKKyAgICAgICAgfTsKKworICAgICAgICB1aW50MzJfdCBpbmRp
Y1BhZ2VPcmRlckluZGV4ID0gKGMgLSAweDA5MDApIC8gMHgwMDgwOyAvLyBJbmRpYyBzY3JpcHRz
IHN0YXJ0IGF0IDB4MDkwMCBpbiBVbmljb2RlLiBFYWNoIHNjcmlwdCBpcyBhbGxvY2FsdGVkIGEg
YmxvY2sgb2YgMHg4MCBjaGFyYWN0ZXJzLgorICAgICAgICBpZiAoaW5kaWNQYWdlT3JkZXJJbmRl
eCA8IChzaXplb2YoaW5kaWNVbmljb2RlUGFnZUZvbnRzKSAvIHNpemVvZihBdG9taWNTdHJpbmcq
KSkpIHsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyogaW5kaWNGb250U3RyaW5nID0gaXNGb250
V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBpbmRpY1VuaWNvZGVQYWdlRm9udHNC
b2xkW2luZGljUGFnZU9yZGVySW5kZXhdIDogaW5kaWNVbmljb2RlUGFnZUZvbnRzW2luZGljUGFn
ZU9yZGVySW5kZXhdOworICAgICAgICAgICAgaWYgKGluZGljRm9udFN0cmluZykKKyAgICAgICAg
ICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCAq
aW5kaWNGb250U3RyaW5nLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICB9CisgICAgfSBl
bHNlIGlmICh1c2VUaGFpRm9udCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiB0aGFpUGxhaW4oIlRob25idXJpIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+
IHRoYWlCb2xkKCJUaG9uYnVyaS1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhhaUJvbGQg
OiB0aGFpUGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgfSBlbHNlIGlmICh1c2VUaWJl
dGFuRm9udCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0
aWJldGFuUGxhaW4oIkthaWxhc2EiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGliZXRhbkJv
bGQoIkthaWxhc2EtQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwor
ICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBp
c0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IHRpYmV0YW5Cb2xkIDogdGli
ZXRhblBsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSBpZiAodXNlQ2FuYWRp
YW5BYm9yaWdpbmFsU3lsbGFiaWNzRm9udCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXRvbWljU3RyaW5nPiBjYXNQbGFpbigiRXVwaGVtaWFVQ0FTIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IGNhc0JvbGQoIkV1cGhlbWlhVUNBUy1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9u
dERhdGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkp
ID8gY2FzQm9sZCA6IGNhc1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSB7
CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGFwcGxlQ29sb3JF
bW9qaSgiQXBwbGVDb2xvckVtb2ppIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgICAgIGlmICghdXNlRW1vamlGb250KSB7CisgICAgICAgICAgICBpZiAoIUNGQ2hh
cmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKHBob25lRmFsbGJhY2tDaGFyYWN0ZXJTZXQo
KSwgYykpCisgICAgICAgICAgICAgICAgdXNlRW1vamlGb250ID0gQ0ZDaGFyYWN0ZXJTZXRJc0xv
bmdDaGFyYWN0ZXJNZW1iZXIoYXBwbGVDb2xvckVtb2ppQ2hhcmFjdGVyU2V0KCksIGMpOworICAg
ICAgICB9CisgICAgICAgIGlmICh1c2VFbW9qaUZvbnQpCisgICAgICAgICAgICBzaW1wbGVGb250
RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1vamksIGZh
bHNlLCBEb05vdFJldGFpbik7CisgICAgfQorCisgICAgaWYgKHNpbXBsZUZvbnREYXRhKQorICAg
ICAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgpOworCisgICAgcmV0dXJuIGdldE5v
blJldGFpbmVkTGFzdFJlc29ydEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbik7Cit9CisKK1Bhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICAvLyBBdHRlbXB0IHRv
IGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1hdGNoIGJhc2VkIG9uIHRoZSBwcmVz
ZW5jZSBvZiBrZXl3b3JkcyBpbgorICAgIC8vIHRoZSByZXF1ZXN0ZWQgbmFtZXMuIEZvciBleGFt
cGxlLCB3ZSdsbCBtYXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRhaW5zICJBcmFiaWMiIHRvIEdlZXph
IFByby4KKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnREYXRhOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOyArK2kpIHsK
KyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBkZXNjcmlwdGlvbi5mYW1pbHlB
dChpKTsKKyAgICAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAvLyBTdWJzdGl0dXRlIHRoZSBkZWZhdWx0IG1vbm9zcGFjZSBmb250IGZv
ciB3ZWxsLWtub3duIG1vbm9zcGFjZSBmb250cy4KKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gbW9uYWNvKCJtb25hY28iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gbWVubG8oIm1lbmxvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNvdXJpZXIoImNvdXJp
ZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbW9uYWNvKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1p
bHksIG1lbmxvKSkgeworICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250
RGF0YShkZXNjcmlwdGlvbiwgY291cmllcik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFN1YnN0aXR1dGUgVmVyZGFuYSBmb3IgTHVjaWRhIEdyYW5kZS4K
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbHVjaWRhR3JhbmRl
KCJsdWNpZGEgZ3JhbmRlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHZlcmRhbmEoInZlcmRh
bmEiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbHVjaWRhR3JhbmRlKSkgeworICAgICAgICAgICAgc2lt
cGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTdHJpbmc+IGFyYWJpYyhBU0NJSUxpdGVyYWwoIkFyYWJpYyIpKTsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gcGFzaHRvKEFTQ0lJTGl0ZXJhbCgiUGFzaHRv
IikpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB1cmR1KEFTQ0lJTGl0
ZXJhbCgiVXJkdSIpKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsg
JmFyYWJpYy5nZXQoKSwgJnBhc2h0by5nZXQoKSwgJnVyZHUuZ2V0KCkgfTsKKyAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2VlemFQbGFpbigiR2VlemFQcm8iLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgMyAmJiAhc2ltcGxlRm9udERhdGE7ICsraikKKyAgICAgICAgICAgIGlmIChmYW1pbHkuY29u
dGFpbnMoKm1hdGNoV29yZHNbal0sIGZhbHNlKSkKKyAgICAgICAgICAgICAgICBzaW1wbGVGb250
RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRl
c2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOworICAgIH0KKwor
ICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFp
bikKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBmYWxsYmFja0Zv
bnRGYW1pbHkoIi5QaG9uZUZhbGxiYWNrIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFs
bGJhY2tGb250RmFtaWx5LCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKK30KKworRm9udFBsYXRmb3Jt
RGF0YSogRm9udENhY2hlOjpnZXRDdXN0b21GYWxsYmFja0ZvbnQoY29uc3QgVUludDMyIGMsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgQVNTRVJUKHJlcXVpcmVz
Q3VzdG9tRmFsbGJhY2tGb250KGMpKTsKKyAgICBpZiAoYyA9PSBBcHBsZUxvZ28pIHsKKyAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gaGVsdmV0aWNhRmFtaWx5KCJI
ZWx2ZXRpY2EgTmV1ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAg
ICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgaGVsdmV0
aWNhRmFtaWx5KTsKKyAgICB9CisgICAgaWYgKGMgPT0gYmxhY2tDaXJjbGUpIHsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbG9ja0Nsb2NrRmFtaWx5KCJMb2Nr
Q2xvY2stTGlnaHQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAg
ICAgcmV0dXJuIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIGxvY2tDbG9j
a0ZhbWlseSk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgaW5saW5l
IEZvbnRUcmFpdHNNYXNrIHRvVHJhaXRzTWFzayhDVEZvbnRTeW1ib2xpY1RyYWl0cyBjdEZvbnRU
cmFpdHMpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigoKGN0Rm9u
dFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykgPyBGb250U3R5bGVJdGFsaWNNYXNrIDogRm9u
dFN0eWxlTm9ybWFsTWFzaykKKyAgICAgICAgfCBGb250VmFyaWFudE5vcm1hbE1hc2sKKyAgICAg
ICAgLy8gRm9udFdlaWdodDYwMCBvciBoaWdoZXIgaXMgYm9sZCBmb3IgQ1RGb250cywgc28gY2hv
b3NlIG1pZGRsZSB2YWx1ZXMgZm9yCisgICAgICAgIC8vIGJvbGQgKDYwMC05MDApIGFuZCBub24t
Ym9sZCAoMTAwLTUwMCkKKyAgICAgICAgfCAoKGN0Rm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEJv
bGQpID8gRm9udFdlaWdodDcwME1hc2sgOiBGb250V2VpZ2h0MzAwTWFzaykpOworfQorCit2b2lk
IEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlO
YW1lLCBWZWN0b3I8dW5zaWduZWQ+JiB0cmFpdHNNYXNrcykKK3sKKyAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGZhbWlseU5hbWVTdHIgPSBmYW1pbHlOYW1lLnN0cmluZygpLmNyZWF0ZUNGU3Ry
aW5nKCk7CisgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gQHsgKGlkKWtDVEZvbnRGYW1p
bHlOYW1lQXR0cmlidXRlOiAoTlNTdHJpbmcqKWZhbWlseU5hbWVTdHIuZ2V0KCkgfTsKKyAgICBS
ZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENU
Rm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcygoQ0ZEaWN0aW9uYXJ5UmVmKWF0dHJp
YnV0ZXMpKTsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gbWF0Y2hlZERlc2NyaXB0b3JzID0gYWRv
cHROUygoTlNBcnJheSAqKUNURm9udERlc2NyaXB0b3JDcmVhdGVNYXRjaGluZ0ZvbnREZXNjcmlw
dG9ycyhmb250RGVzY3JpcHRvci5nZXQoKSwgbnVsbHB0cikpOworCisgICAgTlNJbnRlZ2VyIG51
bU1hdGNoZXMgPSBbbWF0Y2hlZERlc2NyaXB0b3JzLmdldCgpIGNvdW50XTsKKyAgICBpZiAoIW1h
dGNoZWREZXNjcmlwdG9ycyB8fCAhbnVtTWF0Y2hlcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
Zm9yIChOU0ludGVnZXIgaSA9IDA7IGkgPCBudW1NYXRjaGVzOyArK2kpIHsKKyAgICAgICAgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4gdHJhaXRzID0gYWRvcHRDRigoQ0ZEaWN0aW9uYXJ5UmVm
KUNURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKChDVEZvbnREZXNjcmlwdG9yUmVmKVttYXRj
aGVkRGVzY3JpcHRvcnMuZ2V0KCkgb2JqZWN0QXRJbmRleDppXSwga0NURm9udFRyYWl0c0F0dHJp
YnV0ZSkpOworICAgICAgICBDRk51bWJlclJlZiByZXN1bHRSZWYgPSAoQ0ZOdW1iZXJSZWYpQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUodHJhaXRzLmdldCgpLCBrQ1RGb250U3ltYm9saWNUcmFpdCk7Cisg
ICAgICAgIGlmIChyZXN1bHRSZWYpIHsKKyAgICAgICAgICAgIENURm9udFN5bWJvbGljVHJhaXRz
IHN5bWJvbGljVHJhaXRzOworICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShyZXN1bHRSZWYs
IGtDRk51bWJlckludFR5cGUsICZzeW1ib2xpY1RyYWl0cyk7CisgICAgICAgICAgICB0cmFpdHNN
YXNrcy5hcHBlbmQodG9UcmFpdHNNYXNrKHN5bWJvbGljVHJhaXRzKSk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK2Zsb2F0IEZvbnRDYWNoZTo6d2VpZ2h0T2ZDVEZvbnQoQ1RGb250UmVmIGZvbnQp
Cit7CisgICAgZmxvYXQgcmVzdWx0ID0gMDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiB0cmFpdHMgPSBhZG9wdENGKENURm9udENvcHlUcmFpdHMoZm9udCkpOworICAgIGlmICghdHJh
aXRzKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgQ0ZOdW1iZXJSZWYgcmVzdWx0UmVm
ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHRyYWl0cy5nZXQoKSwga0NURm9u
dFdlaWdodFRyYWl0KTsKKyAgICBpZiAocmVzdWx0UmVmKQorICAgICAgICBDRk51bWJlckdldFZh
bHVlKHJlc3VsdFJlZiwga0NGTnVtYmVyRmxvYXRUeXBlLCAmcmVzdWx0KTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVEZvbnRSZWYgY3JlYXRlQ1RGb250V2l0aFRleHRTdHls
ZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIENURm9udFN5bWJvbGljVHJhaXRzIHRyYWl0cywg
Q0dGbG9hdCBzaXplKQoreworICAgIGlmIChmYW1pbHlOYW1lLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIENURm9udFN5bWJvbGljVHJhaXRzIHN5bWJvbGljVHJhaXRz
ID0gMDsKKyAgICBpZiAodHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkKKyAgICAgICAgc3ltYm9s
aWNUcmFpdHMgfD0ga0NURm9udEJvbGRUcmFpdDsKKyAgICBpZiAodHJhaXRzICYga0NURm9udFRy
YWl0SXRhbGljKQorICAgICAgICBzeW1ib2xpY1RyYWl0cyB8PSBrQ1RGb250VHJhaXRJdGFsaWM7
CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lU3RyID0gZmFtaWx5TmFtZS5j
cmVhdGVDRlN0cmluZygpOworICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250
RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUo
ZmFtaWx5TmFtZVN0ci5nZXQoKSwgUmVuZGVyVGhlbWVJT1M6OmNvbnRlbnRTaXplQ2F0ZWdvcnko
KSwgbnVsbHB0cikpOworICAgIGlmIChzeW1ib2xpY1RyYWl0cykKKyAgICAgICAgZm9udERlc2Ny
aXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5V2l0aFN5bWJvbGljVHJh
aXRzKGZvbnREZXNjcmlwdG9yLmdldCgpLCBzeW1ib2xpY1RyYWl0cywgc3ltYm9saWNUcmFpdHMp
KTsKKworICAgIHJldHVybiBDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERlc2Ny
aXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpOworfQorCitzdGF0aWMgQ1RGb250UmVmIGNyZWF0
ZUNURm9udFdpdGhGYW1pbHlOYW1lQW5kV2VpZ2h0KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwg
Q1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzLCBmbG9hdCBzaXplLCB1aW50MTZfdCB3ZWlnaHQp
Cit7CisgICAgaWYgKGZhbWlseU5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gc3lzdGVtVUlGb250
V2l0aFdlYktpdFByZWZpeCgiLXdlYmtpdC1zeXN0ZW0tZm9udCIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IHN5c3RlbVVJRm9udFdpdGhBcHBsZVByZWZpeCgiLWFwcGxlLXN5c3RlbS1mb250IiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGZhbWlseU5hbWUsIHN5c3RlbVVJRm9udFdpdGhXZWJLaXRQcmVmaXgpIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKGZhbWlseU5hbWUsIHN5c3RlbVVJRm9udFdpdGhBcHBsZVByZWZpeCkpIHsKKyAg
ICAgICAgQ1RGb250VUlGb250VHlwZSBmb250VHlwZSA9IGtDVEZvbnRVSUZvbnRTeXN0ZW07Cisg
ICAgICAgIGlmICh3ZWlnaHQgPiAzMDApIHsKKyAgICAgICAgICAgIC8vIFRoZSBjb21tZW50IGJl
bG93IGhhcyBiZWVuIGNvcGllZCBmcm9tIENvcmVUZXh0L1VJRm91bmRhdGlvbi4gSG93ZXZlciwg
aW4gV2ViS2l0IHdlIHN5bnRoZXNpemUgdGhlIG9ibGlxdWUsCisgICAgICAgICAgICAvLyBzbyB3
ZSBzaG91bGQgaW52ZXN0aWdhdGUgdGhlIHJlc3VsdCA8cmRhcjovL3Byb2JsZW0vMTQ0NDkzNDA+
OgorICAgICAgICAgICAgLy8gV2UgZG9uJ3QgZG8gYm9sZC1pdGFsaWMgZm9yIHN5c3RlbSBmb250
cy4gSWYgeW91IGFzayBmb3IgaXQsIHdlJ2xsIGFzc3VtZSB0aGF0IHlvdSdyZSBqdXN0IGtpZGRp
bmcgYW5kIHRoYXQgeW91IHJlYWxseSB3YW50IGJvbGQuIFRoaXMgaXMgYSBmZWF0dXJlLgorICAg
ICAgICAgICAgaWYgKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpCisgICAgICAgICAgICAgICAg
Zm9udFR5cGUgPSBrQ1RGb250VUlGb250RW1waGFzaXplZFN5c3RlbTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykKKyAgICAgICAgICAgICAgICBmb250
VHlwZSA9IHN0YXRpY19jYXN0PENURm9udFVJRm9udFR5cGU+KGtDVEZvbnRVSUZvbnRTeXN0ZW1J
dGFsaWMpOworICAgICAgICB9IGVsc2UgaWYgKHdlaWdodCA+IDI1MCkKKyAgICAgICAgICAgIGZv
bnRUeXBlID0gc3RhdGljX2Nhc3Q8Q1RGb250VUlGb250VHlwZT4oa0NURm9udFVJRm9udFN5c3Rl
bUxpZ2h0KTsKKyAgICAgICAgZWxzZSBpZiAod2VpZ2h0ID4gMTUwKQorICAgICAgICAgICAgZm9u
dFR5cGUgPSBzdGF0aWNfY2FzdDxDVEZvbnRVSUZvbnRUeXBlPihrQ1RGb250VUlGb250U3lzdGVt
VGhpbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvbnRUeXBlID0gc3RhdGljX2Nhc3Q8
Q1RGb250VUlGb250VHlwZT4oa0NURm9udFVJRm9udFN5c3RlbVVsdHJhTGlnaHQpOworICAgICAg
ICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENG
KENURm9udERlc2NyaXB0b3JDcmVhdGVGb3JVSVR5cGUoZm9udFR5cGUsIHNpemUsIG51bGxwdHIp
KTsKKyAgICAgICAgcmV0dXJuIENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVz
Y3JpcHRvci5nZXQoKSwgc2l6ZSwgbnVsbHB0cik7CisgICAgfQorCisgICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBmYW1pbHlOYW1lU3RyID0gZmFtaWx5TmFtZS5jcmVhdGVDRlN0cmluZygpOwor
ICAgIENURm9udFN5bWJvbGljVHJhaXRzIHJlcXVlc3RlZFRyYWl0cyA9IChDVEZvbnRTeW1ib2xp
Y1RyYWl0cykodHJhaXRzICYgKGtDVEZvbnRCb2xkVHJhaXQgfCBrQ1RGb250SXRhbGljVHJhaXQp
KTsKKyAgICByZXR1cm4gQ1RGb250Q3JlYXRlRm9yQ1NTKGZhbWlseU5hbWVTdHIuZ2V0KCksIHdl
aWdodCwgcmVxdWVzdGVkVHJhaXRzLCBzaXplKTsKK30KKworc3RhdGljIHVpbnQxNl90IHRvQ1RG
b250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKK3sKKyAgICBzd2l0Y2ggKGZvbnRXZWln
aHQpIHsKKyAgICBjYXNlIEZvbnRXZWlnaHQxMDA6CisgICAgICAgIHJldHVybiAxMDA7CisgICAg
Y2FzZSBGb250V2VpZ2h0MjAwOgorICAgICAgICByZXR1cm4gMjAwOworICAgIGNhc2UgRm9udFdl
aWdodDMwMDoKKyAgICAgICAgcmV0dXJuIDMwMDsKKyAgICBjYXNlIEZvbnRXZWlnaHQ0MDA6Cisg
ICAgICAgIHJldHVybiA0MDA7CisgICAgY2FzZSBGb250V2VpZ2h0NTAwOgorICAgICAgICByZXR1
cm4gNTAwOworICAgIGNhc2UgRm9udFdlaWdodDYwMDoKKyAgICAgICAgcmV0dXJuIDYwMDsKKyAg
ICBjYXNlIEZvbnRXZWlnaHQ3MDA6CisgICAgICAgIHJldHVybiA3MDA7CisgICAgY2FzZSBGb250
V2VpZ2h0ODAwOgorICAgICAgICByZXR1cm4gODAwOworICAgIGNhc2UgRm9udFdlaWdodDkwMDoK
KyAgICAgICAgcmV0dXJuIDkwMDsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gNDAwOwor
ICAgIH0KK30KKworUGFzc093blB0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQoreworICAgIC8vIFNwZWNpYWwgY2FzZSBmb3Ig
IkNvdXJpZXIiIGZvbnQuIFdlIHVzZWQgdG8gaGF2ZSBvbmx5IGFuIG9ibGlxdWUgdmFyaWFudCBv
biBpT1MsIHNvIHByaW9yIHRvCisgICAgLy8gaU9TIDYuMCwgd2UgZGlzYWxsb3dlZCBpdHMgdXNl
IGhlcmUuIFdlJ2xsIGZhbGwgYmFjayBvbiAiQ291cmllciBOZXciLiA8cmRhcjovL3Byb2JsZW0v
NTExNjQ3NyYxMDg1MDIyNz4KKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBjb3VyaWVyKCJDb3VyaWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgc3RhdGljIGJvb2wgc2hvdWxkRGlzYWxsb3dDb3VyaWVyID0gIWlvc0V4ZWN1dGFibGVX
YXNMaW5rZWRPbk9yQWZ0ZXJWZXJzaW9uKHdrSU9TU3lzdGVtVmVyc2lvbl82XzApOworICAgIGlm
IChzaG91bGREaXNhbGxvd0NvdXJpZXIgJiYgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBjb3Vy
aWVyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0
cyB0cmFpdHMgPSAwOworICAgIGlmIChmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCisgICAgICAg
IHRyYWl0cyB8PSBrQ1RGb250VHJhaXRJdGFsaWM7CisgICAgaWYgKGlzRm9udFdlaWdodEJvbGQo
Zm9udERlc2NyaXB0aW9uLndlaWdodCgpKSkKKyAgICAgICAgdHJhaXRzIHw9IGtDVEZvbnRUcmFp
dEJvbGQ7CisgICAgZmxvYXQgc2l6ZSA9IGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6
ZSgpOworCisgICAgUmV0YWluUHRyPENURm9udFJlZj4gY3RGb250OworICAgIGlmIChmYW1pbHku
c3RhcnRzV2l0aCgiVUlDVEZvbnRUZXh0U3R5bGUiKSkKKyAgICAgICAgY3RGb250ID0gYWRvcHRD
RihjcmVhdGVDVEZvbnRXaXRoVGV4dFN0eWxlKGZhbWlseSwgdHJhaXRzLCBzaXplKSk7CisgICAg
ZWxzZQorICAgICAgICBjdEZvbnQgPSBhZG9wdENGKGNyZWF0ZUNURm9udFdpdGhGYW1pbHlOYW1l
QW5kV2VpZ2h0KGZhbWlseSwgdHJhaXRzLCBzaXplLCB0b0NURm9udFdlaWdodChmb250RGVzY3Jp
cHRpb24ud2VpZ2h0KCkpKSk7CisgICAgaWYgKCFjdEZvbnQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgYWN0dWFsVHJhaXRzID0gMDsKKyAgICBp
ZiAoaXNGb250V2VpZ2h0Qm9sZChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkpIHx8IGZvbnREZXNj
cmlwdGlvbi5pdGFsaWMoKSkKKyAgICAgICAgYWN0dWFsVHJhaXRzID0gQ1RGb250R2V0U3ltYm9s
aWNUcmFpdHMoY3RGb250LmdldCgpKTsKKworICAgIGJvb2wgaXNBcHBsZUNvbG9yRW1vamkgPSBD
VEZvbnRJc0FwcGxlQ29sb3JFbW9qaShjdEZvbnQuZ2V0KCkpOworCisgICAgYm9vbCBzeW50aGV0
aWNCb2xkID0gKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpICYmICEoYWN0dWFsVHJhaXRzICYg
a0NURm9udFRyYWl0Qm9sZCkgJiYgIWlzQXBwbGVDb2xvckVtb2ppOworICAgIGJvb2wgc3ludGhl
dGljT2JsaXF1ZSA9ICh0cmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpICYmICEoYWN0dWFsVHJh
aXRzICYga0NURm9udFRyYWl0SXRhbGljKSAmJiAhaXNBcHBsZUNvbG9yRW1vamk7CisKKyAgICBG
b250UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBuZXcgRm9udFBsYXRmb3JtRGF0YShjdEZvbnQuZ2V0
KCksIHNpemUsIGZvbnREZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgpLCBzeW50aGV0aWNCb2xk
LCBzeW50aGV0aWNPYmxpcXVlLCBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwgZm9udERl
c2NyaXB0aW9uLndpZHRoVmFyaWFudCgpKTsKKyAgICBpZiAoaXNBcHBsZUNvbG9yRW1vamkpCisg
ICAgICAgIHJlc3VsdC0+bV9pc0Vtb2ppID0gdHJ1ZTsKKyAgICByZXR1cm4gYWRvcHRQdHIocmVz
dWx0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNjZjhiZGM5NDhmODg2YmRhZTMyYTQ3N2IxMDdhZjJkZWUyYjdkYzAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udFNlcnZpY2VzSU9T
LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBGb250U2VydmljZXNJT1NfaAorI2RlZmluZSBG
b250U2VydmljZXNJT1NfaAorCisjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRTZXJ2aWNlc0lPUyB7CitwdWJsaWM6CisgICAg
Rm9udFNlcnZpY2VzSU9TKENURm9udFJlZik7CisgICAgQ0dGbG9hdCBhc2NlbnQoKSB7IHJldHVy
biBtX2FzY2VudDsgfQorICAgIENHRmxvYXQgZGVzY2VudCgpIHsgcmV0dXJuIG1fZGVzY2VudDsg
fQorICAgIENHRmxvYXQgbGluZUdhcCgpIHsgcmV0dXJuIG1fbGluZUdhcDsgfQorICAgIENHRmxv
YXQgbGluZVNwYWNpbmcoKSB7IHJldHVybiBtX2xpbmVTcGFjaW5nOyB9CisgICAgQ0dGbG9hdCB4
SGVpZ2h0KCkgeyByZXR1cm4gbV94SGVpZ2h0OyB9CisgICAgdW5zaWduZWQgdW5pdHNQZXJFbSgp
IHsgcmV0dXJuIG1fdW5pdHNQZXJFbTsgfQorCitwcml2YXRlOgorICAgIENHRmxvYXQgbV9hc2Nl
bnQ7CisgICAgQ0dGbG9hdCBtX2Rlc2NlbnQ7CisgICAgQ0dGbG9hdCBtX2xpbmVHYXA7CisgICAg
Q0dGbG9hdCBtX2xpbmVTcGFjaW5nOworICAgIENHRmxvYXQgbV94SGVpZ2h0OworICAgIHVuc2ln
bmVkIG1fdW5pdHNQZXJFbTsKK307CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJT1MubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzIyMmI1MjUxY2VhOWMxZWFhNDcwZDYxYWM2NGQ0OTU2MjViMGYxMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJ
T1MubW0KQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJG
b250U2VydmljZXNJT1MuaCIKKworI2ltcG9ydCAiRm9udE1ldHJpY3MuaCIKKyNpbXBvcnQgPENv
cmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3NQcml2YXRlLmg+CisjaW1wb3J0IDxtYWNoLW8vZHlsZF9wcml2Lmg+CisjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGZs
b2F0IGtMaW5lSGVpZ2h0QWRqdXN0bWVudCA9IDAuMTVmOworCitzdGF0aWMgYm9vbCBzaG91bGRV
c2VBZGp1c3RtZW50KENURm9udFJlZiBmb250LCBib29sIGlzaU9TN09yTGF0ZXIpCit7CisgICAg
UmV0YWluUHRyPE5TU3RyaW5nPiBmYW1pbHlOYW1lID0gYWRvcHROUygoTlNTdHJpbmcgKilDVEZv
bnRDb3B5RmFtaWx5TmFtZShmb250KSk7CisgICAgaWYgKCFbZmFtaWx5TmFtZSBsZW5ndGhdKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoW2ZhbWlseU5hbWUuZ2V0KCkgY29tcGFy
ZTpAIlRpbWVzIiBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSA9PSBOU09yZGVyZWRT
YW1lCisgICAgICAgIHx8IFtmYW1pbHlOYW1lLmdldCgpIGNvbXBhcmU6QCJIZWx2ZXRpY2EiIG9w
dGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdID09IE5TT3JkZXJlZFNhbWUKKyAgICAgICAg
fHwgW2ZhbWlseU5hbWUuZ2V0KCkgY29tcGFyZTpAIi5IZWx2ZXRpY2EgTmV1ZVVJIiBvcHRpb25z
Ok5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSA9PSBOU09yZGVyZWRTYW1lKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAoIWlzaU9TN09yTGF0ZXIgJiYgW2ZhbWlseU5hbWUuZ2V0KCkgY29t
cGFyZTpAIi5IZWx2ZXRpY2EgTmV1ZVVJTGVnYWN5IiBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZl
U2VhcmNoXSA9PSBOU09yZGVyZWRTYW1lKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXNDb3VyaWVyKENURm9udFJlZiBmb250KQor
eworICAgIFJldGFpblB0cjxOU1N0cmluZz4gZmFtaWx5TmFtZSA9IGFkb3B0TlMoKE5TU3RyaW5n
ICopQ1RGb250Q29weUZhbWlseU5hbWUoZm9udCkpOworICAgIGlmICghW2ZhbWlseU5hbWUgbGVu
Z3RoXSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbZmFtaWx5TmFtZS5nZXQo
KSBjb21wYXJlOkAiQ291cmllciIgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0gPT0g
TlNPcmRlcmVkU2FtZTsKK30KKworRm9udFNlcnZpY2VzSU9TOjpGb250U2VydmljZXNJT1MoQ1RG
b250UmVmIGZvbnQpCit7CisgICAgQ0dGb250RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgIFJl
dGFpblB0cjxDR0ZvbnRSZWY+IGNnRm9udCA9IGFkb3B0Q0YoQ1RGb250Q29weUdyYXBoaWNzRm9u
dChmb250LCBOVUxMKSk7CisgICAgbV94SGVpZ2h0ID0gQ0dGb250R2V0RGVzY3JpcHRvcihjZ0Zv
bnQuZ2V0KCksICZkZXNjcmlwdG9yKSA/IChkZXNjcmlwdG9yLnhIZWlnaHQgLyAxMDAwKSAqIENU
Rm9udEdldFNpemUoZm9udCkgOiAwOworICAgIG1fdW5pdHNQZXJFbSA9IENURm9udEdldFVuaXRz
UGVyRW0oZm9udCk7CisgICAgQ0dGbG9hdCBsaW5lR2FwOworICAgIENHRmxvYXQgYXNjZW50Owor
ICAgIENHRmxvYXQgZGVzY2VudDsKKyAgICBzdGF0aWMgYm9vbCBpc2lPUzdPckxhdGVyID0gZHls
ZF9nZXRfcHJvZ3JhbV9zZGtfdmVyc2lvbigpID49IERZTERfSU9TX1ZFUlNJT05fN18wOworICAg
IGlmIChpc2lPUzdPckxhdGVyKSB7CisgICAgICAgIC8vIFVzZSBDb3JlVGV4dCBBUEkgaW4gaU9T
IDcuCisgICAgICAgIGFzY2VudCA9IENURm9udEdldEFzY2VudChmb250KTsKKyAgICAgICAgZGVz
Y2VudCA9IENURm9udEdldERlc2NlbnQoZm9udCk7CisgICAgICAgIGxpbmVHYXAgPSBDVEZvbnRH
ZXRMZWFkaW5nKGZvbnQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZsb2F0IHBvaW50U2l6ZSA9
IENURm9udEdldFNpemUoZm9udCk7CisgICAgICAgIGNvbnN0IENHRm9udEhNZXRyaWNzICptZXRy
aWNzID0gQ0dGb250R2V0SE1ldHJpY3MoY2dGb250LmdldCgpKTsKKyAgICAgICAgdW5zaWduZWQg
dW5pdHNQZXJFbSA9IENHRm9udEdldFVuaXRzUGVyRW0oY2dGb250LmdldCgpKTsKKworICAgICAg
ICBsaW5lR2FwID0gKGR5bGRfZ2V0X3Byb2dyYW1fc2RrX3ZlcnNpb24oKSA+PSBEWUxEX0lPU19W
RVJTSU9OXzNfMCkgPyBzY2FsZUVtVG9Vbml0cyhtZXRyaWNzLT5saW5lR2FwLCB1bml0c1BlckVt
KSAqIHBvaW50U2l6ZSA6IDAuMDsKKworICAgICAgICBib29sIGlzaU9TNk9yTGF0ZXIgPSBkeWxk
X2dldF9wcm9ncmFtX3Nka192ZXJzaW9uKCkgPj0gRFlMRF9JT1NfVkVSU0lPTl82XzA7CisgICAg
ICAgIGlmICghaXNpT1M2T3JMYXRlciB8fCAhaXNDb3VyaWVyKGZvbnQpKSB7CisgICAgICAgICAg
ICBhc2NlbnQgPSAoc2NhbGVFbVRvVW5pdHMobWV0cmljcy0+YXNjZW50LCB1bml0c1BlckVtKSAq
IHBvaW50U2l6ZSk7CisgICAgICAgICAgICBkZXNjZW50ID0gKC1zY2FsZUVtVG9Vbml0cyhtZXRy
aWNzLT5kZXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBGb3IgQ291cmllciwgd2UgdXNlIENvdXJpZXIgTmV3J3MgZXhhY3Qg
dmFsdWVzLCBiZWNhdXNlIGluIGlPUyA1LjEgYW5kIGVhcmxpZXIsCisgICAgICAgICAgICAvLyBD
b3VyaWVyIE5ldyB3YXMgc3Vic3RpdHV0ZWQgZm9yIENvdXJpZXIgYnkgV2ViS2l0LgorICAgICAg
ICAgICAgYXNjZW50ID0gKHNjYWxlRW1Ub1VuaXRzKDE3MDUsIDIwNDgpICogcG9pbnRTaXplKTsK
KyAgICAgICAgICAgIGRlc2NlbnQgPSAoc2NhbGVFbVRvVW5pdHMoNjE1LCAyMDQ4KSAqIHBvaW50
U2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgQ0dGbG9hdCBhZGp1c3RtZW50ID0gKHNob3Vs
ZFVzZUFkanVzdG1lbnQoZm9udCwgaXNpT1M3T3JMYXRlcikpID8gY2VpbCgoYXNjZW50ICsgZGVz
Y2VudCkgKiBrTGluZUhlaWdodEFkanVzdG1lbnQpIDogMDsKKworICAgIG1fYXNjZW50ID0gYXNj
ZW50ICsgYWRqdXN0bWVudDsKKyAgICBtX2Rlc2NlbnQgPSBkZXNjZW50OworICAgIG1fbGluZUdh
cCA9IGNlaWxmKGxpbmVHYXApOworICAgIG1fbGluZVNwYWNpbmcgPSBjZWlsKGFzY2VudCkgKyBh
ZGp1c3RtZW50ICsgY2VpbChkZXNjZW50KSArIG1fbGluZUdhcDsKK30KKworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvR3JhcGhpY3NDb250ZXh0M0RJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9HcmFwaGljc0NvbnRleHQzRElPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzM2JhMDlkNTk5
YzhmODVkNDUwZWRmZmZmYjI5M2QxYjc1YjQ2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvR3JhcGhpY3NDb250ZXh0M0RJT1MuaApAQCAt
MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRElPU19oCisj
ZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNESU9TX2gKKworI2RlZmluZSBnbEJpbmRGcmFtZWJ1ZmZl
ckVYVCBnbEJpbmRGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbEJpbmRSZW5kZXJidWZmZXJFWFQgZ2xC
aW5kUmVuZGVyYnVmZmVyCisjZGVmaW5lIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCBnbENo
ZWNrRnJhbWVidWZmZXJTdGF0dXMKKyNkZWZpbmUgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQgZ2xE
ZWxldGVGcmFtZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUIGdsRGVs
ZXRlUmVuZGVyYnVmZmVycworI2RlZmluZSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUIGds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVY
VCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJECisjZGVmaW5lIGdsR2VuZXJhdGVNaXBtYXBFWFQgZ2xH
ZW5lcmF0ZU1pcG1hcAorI2RlZmluZSBnbEdlbkZyYW1lYnVmZmVyc0VYVCBnbEdlbkZyYW1lYnVm
ZmVycworI2RlZmluZSBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQgZ2xHZW5SZW5kZXJidWZmZXJzCisj
ZGVmaW5lIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQgZ2xHZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdgorI2RlZmluZSBnbEdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlcml2RVhUIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYKKyNkZWZpbmUgZ2xJc0Zy
YW1lYnVmZmVyRVhUIGdsSXNGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbElzUmVuZGVyYnVmZmVyRVhU
IGdsSXNSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUIGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZQorI2RlZmluZSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUVYVCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFQUExFCisKKyNkZWZpbmUgR0xf
Q09MT1JfQVRUQUNITUVOVDBfRVhUIEdMX0NPTE9SX0FUVEFDSE1FTlQwCisjZGVmaW5lIEdMX0RF
UFRIMjRfU1RFTkNJTDhfRVhUIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTCisjZGVmaW5lIEdMX0RF
UFRIX0FUVEFDSE1FTlRfRVhUICBHTF9ERVBUSF9BVFRBQ0hNRU5UCisjZGVmaW5lIEdMX0RSQVdf
RlJBTUVCVUZGRVJfRVhUIEdMX0RSQVdfRlJBTUVCVUZGRVJfQVBQTEUKKyNkZWZpbmUgR0xfRlJB
TUVCVUZGRVJfQ09NUExFVEVfRVhUIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFCisjZGVmaW5lIEdM
X0ZSQU1FQlVGRkVSX0VYVCBHTF9GUkFNRUJVRkZFUgorI2RlZmluZSBHTF9NQVhfU0FNUExFU19F
WFQgR0xfTUFYX1NBTVBMRVNfQVBQTEUKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQg
R0xfUkVBRF9GUkFNRUJVRkZFUl9BUFBMRQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfRVhUIEdM
X1JFTkRFUkJVRkZFUgorI2lmbmRlZiBHTF9SR0I4CisjZGVmaW5lIEdMX1JHQjggR0xfUkdCCisj
ZW5kaWYKKyNpZm5kZWYgR0xfUkdCQTgKKyNkZWZpbmUgR0xfUkdCQTggR0xfUkdCQQorI2VuZGlm
CisjZGVmaW5lIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViBHTF9SR0JBCisKKyNlbmRpZiAv
LyBHcmFwaGljc0NvbnRleHQzRElPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9JY29uSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljNzI4ZWRiZmJkNzE1YThiZGZkYmVj
ZjcyMzA0ODgxNDZjODQ3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJJY29uLmgiCisKKyNpbXBvcnQgIkJpdG1hcEltYWdlLmgiCisjaW1wb3J0ICJHcmFw
aGljc0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorSWNvbjo6SWNvbihD
R0ltYWdlUmVmIGltYWdlKQorICAgIDogbV9jZ0ltYWdlKGltYWdlKQoreworfQorCitJY29uOjp+
SWNvbigpCit7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiAvKmZpbGVuYW1lcyovKQoreworICAgIHJldHVybiBudWxs
cHRyOworfQorCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JJbWFnZShOYXRp
dmVJbWFnZVB0ciBpbWFnZVJlZikKK3sKKyAgICBpZiAoIWltYWdlUmVmKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWNvbihpbWFnZVJlZikpOwor
fQorCit2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpCit7CisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpjb250ZXh0KTsKKworICAgIGZsb2F0IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKG1fY2dJ
bWFnZS5nZXQoKSk7CisgICAgZmxvYXQgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChtX2NnSW1h
Z2UuZ2V0KCkpOworICAgIEZsb2F0U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQpOworICAgIEZsb2F0
UmVjdCBzcmNSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgIENvbG9yU3BhY2UgY29sb3JT
cGFjZSA9IENvbG9yU3BhY2VEZXZpY2VSR0I7CisKKyAgICBjb250ZXh0LT5zZXRJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25IaWdoKTsKKyAgICBjb250ZXh0LT5kcmF3TmF0
aXZlSW1hZ2UobV9jZ0ltYWdlLmdldCgpLCBzaXplLCBjb2xvclNwYWNlLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgMS4wZiwgQ29tcG9zaXRlU291cmNlT3ZlciwgQmxlbmRNb2RlTm9ybWFsLCBEZWZhdWx0
SW1hZ2VPcmllbnRhdGlvbik7Cit9CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1YmU3M2NlOWEx
Y2ZkNDZhMzJlNTVlYTdkNzU1ZjQ5ZmUzYzAxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklP
Uy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluYmFuZFRleHRUcmFja1By
aXZhdGVBVkZJT1NfaAorI2RlZmluZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TX2gKKwor
I2lmIEVOQUJMRShWSURFTykgJiYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRi5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TIDogcHVi
bGljIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M+IGNyZWF0ZShBVkZJbmJhbmRUcmFj
a1BhcmVudCogcGFyZW50LCBpbnQgaW50ZXJuYWxJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MocGFyZW50LCBp
bnRlcm5hbElELCBuYW1lLCBsYW5ndWFnZSwgdHlwZSkpOworICAgIH0KKworICAgIH5JbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGSU9TKCk7CisKKyAgICB2aXJ0dWFsIEluYmFuZFRleHRUcmFja1By
aXZhdGU6OktpbmQga2luZCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgQXRvbWljU3Ry
aW5nIGxhYmVsKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgdmlydHVh
bCBBdG9taWNTdHJpbmcgbGFuZ3VhZ2UoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2xhbmd1
YWdlOyB9CisgICAgdmlydHVhbCBib29sIGlzTGVnYWN5Q2xvc2VkQ2FwdGlvbnNUcmFjaygpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgaW50IGludGVybmFsSUQoKSBjb25z
dCB7IHJldHVybiBtX2ludGVybmFsSUQ7IH0KKworcHJvdGVjdGVkOgorICAgIEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkZJT1MoQVZGSW5iYW5kVHJhY2tQYXJlbnQqLCBpbnQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSwgY29uc3QgU3RyaW5nJiB0eXBlKTsKKwor
ICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fbGFuZ3VhZ2U7CisgICAgU3RyaW5nIG1f
dHlwZTsKKyAgICBpbnQgbV9pbnRlcm5hbElEOworfTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShW
SURFTykgJiYgUExBVEZPUk0oSU9TKQorI2VuZGlmIC8vIEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9z
L0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9pb3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lM2FmYjI4MDAwOGE0OThlNDNkZjZlNWE3N2VkZjllM2I0OTczNDBkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0luYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkZJT1MubW0KQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQg
IkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaCIKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRp
b25zLmgiCisjaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbXBvcnQgIkluYmFuZFRleHRU
cmFja1ByaXZhdGUuaCIKKyNpbXBvcnQgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaCIKKyNp
bXBvcnQgIkxvZ2dpbmcuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUzo6SW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRklPUyhBVkZJbmJhbmRUcmFja1BhcmVudCogcGFyZW50LCBpbnQgaW50ZXJu
YWxJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBT
dHJpbmcmIHR5cGUpCisgICAgOiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKHBhcmVudCkKKyAg
ICAsIG1fbmFtZShuYW1lKQorICAgICwgbV9sYW5ndWFnZShsYW5ndWFnZSkKKyAgICAsIG1fdHlw
ZSh0eXBlKQorICAgICwgbV9pbnRlcm5hbElEKGludGVybmFsSUQpCit7Cit9CisKK0luYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkZJT1M6On5JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKCkKK3sK
K30KKworSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6S2luZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TOjpraW5kKCkgY29uc3QKK3sKKyAgICBpZiAoW21fdHlwZSBpc0VxdWFsVG9TdHJpbmc6
QCJjYXB0aW9ucyJdKQorICAgICAgICByZXR1cm4gQ2FwdGlvbnM7CisgICAgaWYgKFttX3R5cGUg
aXNFcXVhbFRvU3RyaW5nOkAic3VidGl0bGVzIl0pCisgICAgICAgIHJldHVybiBTdWJ0aXRsZXM7
CisKKyAgICByZXR1cm4gQ2FwdGlvbnM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
TWVkaWFQbGF5ZXJQcml2YXRlSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvTWVkaWFQbGF5ZXJQcml2YXRlSU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJhYzI1NzhjODY0ZWQx
ZGQ0MzFmNmQxMDYxYjU4OWI3YjI3MGUzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9NZWRpYVBsYXllclByaXZhdGVJT1MuaApAQCAtMCww
ICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTWVk
aWFQbGF5ZXJQcml2YXRlSU9TX2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlSU9TX2gKKwor
I2lmIEVOQUJMRShWSURFTykgJiYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRi5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAi
TWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcm94eS5oIgorI2lu
Y2x1ZGUgPG9iamMvcnVudGltZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsKK09CSkNf
Q0xBU1MgTlNNdXRhYmxlRGljdGlvbmFyeTsKK09CSkNfQ0xBU1MgTlNOdW1iZXI7CitPQkpDX0NM
QVNTIE5TT2JqZWN0OworT0JKQ19DTEFTUyBXZWJDb3JlTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25I
ZWxwZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRklPUzsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlSU9TIDogcHVibGljIE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSwgcHVibGljIEFWRkluYmFuZFRyYWNrUGFyZW50IHsKK3B1
YmxpYzoKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVS
ZWdpc3RyYXIpOworICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyUHJpdmF0ZUlPUygpOworCisgICAg
dmlydHVhbCB2b2lkIGRlbGl2ZXJOb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcm94eU5vdGlmaWNh
dGlvblR5cGUpIE9WRVJSSURFOworICAgIGJvb2wgY2FsbGJhY2tzRGVsYXllZCgpIHsgcmV0dXJu
IG1fZGVsYXlDYWxsYmFja3MgPiAwOyB9CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1BsYXko
KSBPVkVSUklERTsKKyAgICB2b2lkIHByb2Nlc3NEZWZlcnJlZFJlcXVlc3RzKCk7CisKKyNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCisgICAgdm9pZCBpbmJhbmRUZXh0VHJhY2tzQ2hhbmdlZChOU0Fy
cmF5ICopOworICAgIHZvaWQgcHJvY2Vzc0luYmFuZFRleHRUcmFja0N1ZShOU0FycmF5ICosIGRv
dWJsZSk7CisgICAgdm9pZCB0ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5UGx1Z2luKE5TRGljdGlvbmFy
eSAqKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIE1lZGlhUGxheWVyUHJpdmF0ZUlPUyhNZWRp
YVBsYXllciopOworCisgICAgLy8gRW5naW5lIHN1cHBvcnQKKyAgICBzdGF0aWMgUGFzc093blB0
cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IGNyZWF0ZShNZWRpYVBsYXllciopOworICAg
IHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpOwor
ICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBN
ZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFi
bGUoKTsKKworICAgIHZpcnR1YWwgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgYm9vbCBoYXNBdWRpbygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0Z1bGxzY3JlZW4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgY2FuTG9hZFBvc3RlcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zdGVyKGNvbnN0IFN0cmluZyYgdXJsKSBPVkVSUklE
RTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250cm9scyhib29sKSBPVkVSUklERTsKKworICAg
IHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW4oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhpdEZ1bGxzY3JlZW4oKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNDbG9z
ZWRDYXB0aW9ucygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDbG9zZWRD
YXB0aW9uc1Zpc2libGUoYm9vbCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChj
b25zdCBTdHJpbmcmIHVybCkgT1ZFUlJJREU7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPEhUTUxNZWRpYVNv
dXJjZT4pIE9WRVJSSURFIHsgfQorI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGNhbmNlbExvYWQo
KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHBhdXNlKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGF1c2VkKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25zdCBPVkVSUklE
RTsKKworICAgIHZpcnR1YWwgZmxvYXQgZHVyYXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2VlayhmbG9hdCB0aW1lKSBPVkVSUklERTsKKyAgICB2b2lkIHNldEVuZFRpbWUoZmxv
YXQpOworCisgICAgZmxvYXQgcmF0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRl
KGZsb2F0IGluUmF0ZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBmbG9hdCB2b2x1bWUoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vm9sdW1lKGZsb2F0IGluVm9sdW1lKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoYm9vbCBpbk11dGUpIE9WRVJSSURF
OworCisgICAgaW50IGRhdGFSYXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgCisgICAgZmxvYXQgbWF4VGltZUJ1ZmZlcmVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9h
dCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
Ym9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdCBPVkVSUklERTsKKyAgICBib29sIHRvdGFs
Qnl0ZXNLbm93bigpIGNvbnN0OworICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOwor
CisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQorICAgIHZpcnR1YWwgYm9vbCBpc0N1cnJlbnRQbGF5
YmFja1RhcmdldFdpcmVsZXNzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcigpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIGhh
c1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoYm9vbCkgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxp
dHlMaXN0ZW5lcnMoYm9vbCkgT1ZFUlJJREU7CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRl
cmluZygpIGNvbnN0IE9WRVJSSURFOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWVk
aWFQbGF5ZXJQcm94eShXZWJNZWRpYVBsYXllclByb3h5KikgT1ZFUlJJREU7CisgICAgdm9pZCBw
cm9jZXNzUGVuZGluZ1JlcXVlc3RzKCk7CisKKyAgICB2b2lkIHNldERlbGF5Q2FsbGJhY2tzKGJv
b2wgZG9EZWxheSkgeyBtX2RlbGF5Q2FsbGJhY2tzICs9IChkb0RlbGF5ID8gMSA6IC0xKTsgfQor
CisgICAgYm9vbCB1c2luZ05ldHdvcmsoKSBjb25zdCB7IHJldHVybiBtX3VzaW5nTmV0d29yazsg
fQorICAgIGJvb2wgaW5GdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9pbkZ1bGxTY3JlZW47
IH0KKworICAgIHZvaWQgYWRkRGVmZXJyZWRSZXF1ZXN0KE5TU3RyaW5nICpuYW1lLCBpZCB2YWx1
ZSk7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IHsgU3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgiaU9TIikpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRl
Q2hhbmdlZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCByZWFkeUZvclBsYXliYWNrKCkgY29uc3QgT1ZFUlJJREU7CisK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzVGV4dFRy
YWNrUmVwcmVzZW50YXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dFRyYWNr
UmVwcmVzZW50YXRpb24oVGV4dFRyYWNrUmVwcmVzZW50YXRpb24qKTsKKworICAgIHZvaWQgY2xl
YXJUZXh0VHJhY2tzKCk7CisgICAgdm9pZCBzZXRTZWxlY3RlZFRleHRUcmFjayhOU051bWJlciAq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhY2tNb2RlQ2hhbmdlZCgpIE9WRVJSSURFOworICAgIHZv
aWQgc2V0T3V0T2ZCYW5kVGV4dFRyYWNrcyhOU0FycmF5ICopOworCisgICAgdmlydHVhbCBib29s
IGltcGxlbWVudHNUZXh0VHJhY2tDb250cm9scygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlPiB0ZXh0
VHJhY2tNZW51KCk7CisKKyAgICB2b2lkIG91dE9mQmFuZFRleHRUcmFja3NDaGFuZ2VkKCk7Cisg
ICAgdm9pZCB0ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5TWVkaWFFbGVtZW50KFBhc3NSZWZQdHI8UGxh
dGZvcm1UZXh0VHJhY2s+KTsKKyNlbmRpZgorCitwcml2YXRlOgorCisgICAgY2xhc3MgUGxhdGZv
cm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlSU9TIDogcHVibGljIFBsYXRmb3JtVGV4dFRyYWNrTWVu
dUludGVyZmFjZSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0
Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1M+IGNyZWF0ZShNZWRpYVBsYXllclByaXZhdGVJ
T1MqIG93bmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBs
YXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUyhvd25lcikpOworICAgICAgICB9CisKKyAg
ICAgICAgdmlydHVhbCB+UGxhdGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlSU9TKCk7CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHRyYWNrc0RpZENoYW5nZSgpIE9WRVJSSURFCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX293bmVyKQorICAgICAgICAgICAgICAgIG1fb3duZXItPm91dE9m
QmFuZFRleHRUcmFja3NDaGFuZ2VkKCk7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZv
aWQgdHJhY2tXYXNTZWxlY3RlZChQYXNzUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiB0cmFjaykg
T1ZFUlJJREUKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fb3duZXIpCisgICAgICAgICAg
ICAgICAgbV9vd25lci0+dGV4dFRyYWNrV2FzU2VsZWN0ZWRCeU1lZGlhRWxlbWVudCh0cmFjayk7
CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KFBsYXRmb3JtVGV4
dFRyYWNrTWVudUNsaWVudCogY2xpZW50KSBPVkVSUklERSB7IG1fY2xpZW50ID0gY2xpZW50OyB9
CisgICAgICAgIFBsYXRmb3JtVGV4dFRyYWNrTWVudUNsaWVudCogY2xpZW50KCkgeyByZXR1cm4g
bV9jbGllbnQ7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFBsYXRmb3JtVGV4dFRyYWNrTWVu
dUludGVyZmFjZUlPUyhNZWRpYVBsYXllclByaXZhdGVJT1MqKTsKKworICAgICAgICBQbGF0Zm9y
bVRleHRUcmFja01lbnVDbGllbnQqIG1fY2xpZW50OworICAgICAgICBNZWRpYVBsYXllclByaXZh
dGVJT1MqIG1fb3duZXI7CisgICAgfTsKKworICAgIE1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVy
OworICAgIFJldGFpblB0cjxOU09iamVjdD4gbV9tZWRpYVBsYXllckhlbHBlcjsgLy8gVGhpcyBp
cyB0aGUgTWVkaWFQbGF5ZXJQcm94eS4KKyAgICBSZXRhaW5QdHI8V2ViQ29yZU1lZGlhUGxheWVy
Tm90aWZpY2F0aW9uSGVscGVyPiBtX29iamNIZWxwZXI7CisgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZURpY3Rpb25hcnk+IG1fZGVmZXJyZWRQcm9wZXJ0aWVzOworCisgICAgTWVkaWFQbGF5ZXI6Ok5l
dHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBt
X3JlYWR5U3RhdGU7CisKKyAgICBlbnVtIEJ1ZmZlcmluZ1N0YXRlIHsgRW1wdHksIFVubGlrZWxl
eVRvS2VlcFVwLCBMaWtlbGV5VG9LZWVwVXAsIEZ1bGwgfTsKKworI2lmIEVOQUJMRShWSURFT19U
UkFDSykKKyAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKiBtX2N1cnJlbnRUcmFjazsK
KyAgICBWZWN0b3I8UmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M+ID4gbV90ZXh0
VHJhY2tzOworICAgIFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1M+IG1f
bWVudUludGVyZmFjZTsKKyNlbmRpZgorCisgICAgaW50IG1fZGVsYXlDYWxsYmFja3M7CisgICAg
aW50IG1fY2hhbmdpbmdWb2x1bWU7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2J5dGVzTG9hZGVk
QXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzOworICAgIGZsb2F0IG1fcmVxdWVzdGVkUmF0ZTsKKyAg
ICBCdWZmZXJpbmdTdGF0ZSBtX2J1ZmZlcmluZ1N0YXRlOworICAgIGJvb2wgbV92aXNpYmxlIDog
MTsKKyAgICBib29sIG1fdXNpbmdOZXR3b3JrIDogMTsKKyAgICBib29sIG1faW5GdWxsU2NyZWVu
IDogMTsKKyAgICBib29sIG1fc2hvdWxkUHJlcGFyZVRvUGxheSA6IDE7CisgICAgYm9vbCBtX3By
ZXBhcmluZ1RvUGxheSA6IDE7CisgICAgYm9vbCBtX3BhdXNlUmVxdWVzdGVkIDogMTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYgLy8gTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvTWVkaWFQbGF5ZXJQcml2YXRlSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL01lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZWVhNzI3OWRh
ZWNmMDFjZDA5MTFlMTFlNTA0N2M0OTAxOGRkNjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL01lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbQpA
QCAtMCwwICsxLDEyNjMgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAx
MSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShJT1MpCisK
KyNpbXBvcnQgIk1lZGlhUGxheWVyUHJpdmF0ZUlPUy5oIgorCisjaW1wb3J0ICJHcmFwaGljc0xh
eWVyQ0EuaCIKKyNpbXBvcnQgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaCIKKyNpbXBv
cnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtVGV4dFRyYWNrLmgiCisjaW1wb3J0ICJU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5oIgorI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9y
dCAiVVJMLmgiCisjaW1wb3J0ICJXQUtBcHBLaXRTdHVicy5oIgorI2ltcG9ydCAiV2ViQ29yZVRo
cmVhZFJ1bi5oIgorI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2ltcG9y
dCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworQGludGVy
ZmFjZSBXZWJDb3JlTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25IZWxwZXIgOiBOU09iamVjdAorewor
ICAgIE1lZGlhUGxheWVyUHJpdmF0ZUlPUyogX2NsaWVudDsKKyAgICBCT09MIF9kZWZlcnJlZFBy
b3BlcnRpZXNTY2hlZHVsZWQ7Cit9CistIChpZClpbml0V2l0aENsaWVudDooTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TICopY2xpZW50OworLSAodm9pZClkaXNjb25uZWN0OworLSAodm9pZCljYW5jZWxQ
ZW5kaW5nUmVxdWVzdHM7CistICh2b2lkKWRlbGF5Tm90aWZpY2F0aW9uOihpbnQpbm90aWZpY2F0
aW9uOworLSAodm9pZClkZWxpdmVyTm90aWZpY2F0aW9uOihOU051bWJlciAqKW5vdGlmaWNhdGlv
bjsKKy0gKHZvaWQpc2NoZWR1bGVQcmVwYXJlVG9QbGF5V2l0aE9wdGlvbmFsRGVsYXk6KE5TTnVt
YmVyICopc2hvdWxkRGVsYXk7CistICh2b2lkKXNjaGVkdWxlRGVmZXJyZWRQcm9wZXJ0aWVzV2l0
aE9wdGlvbmFsRGVsYXk6KE5TTnVtYmVyICopc2hvdWxkRGVsYXk7CisKKy0gKHZvaWQpcGx1Z2lu
RWxlbWVudEluQmFuZEFsdGVybmF0ZVRleHRUcmFja3NEaWRDaGFuZ2U6KE5TQXJyYXkgKil0cmFj
a3M7CistICh2b2lkKXBsdWdpbkVsZW1lbnREaWRTZWxlY3RUZXh0VHJhY2s6KE5TU3RyaW5nICop
dHJhY2tJZDsKKy0gKHZvaWQpcGx1Z2luRWxlbWVudERpZE91dHB1dEF0dHJpYnV0ZWRTdHJpbmdz
OihOU0FycmF5ICopc3RyaW5ncyBuYXRpdmVTYW1wbGVCdWZmZXJzOihOU0FycmF5ICopYnVmZmVy
cyBmb3JUaW1lOihOU1RpbWVJbnRlcnZhbCl0aW1lOworQGVuZAorCisvLyBQcml2YXRlIHNlbGVj
dG9ycyBpbXBsZW1lbnRlZCBieSB0aGUgbWVkaWEgcGxheWVyIHByb3h5IG9iamVjdCByZXR1cm5l
ZCBieSB0aGUgcGx1Zy1pbi4KK0BpbnRlcmZhY2UgTlNPYmplY3QgKFdlYk1lZGlhUGxheWVyUHJv
eHlfRXh0cmFzKQorLSAodm9pZClfYXR0cmlidXRlQ2hhbmdlZDooTlNTdHJpbmcgKiluYW1lIHZh
bHVlOihOU1N0cmluZyAqKXZhbHVlOworLSAoQk9PTClfcmVhZHlGb3JQbGF5YmFjazsKK0BlbmQK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBpbnQga1JlcXVpcmVkSGVscGVySW50ZXJm
YWNlVmVyc2lvbiA9IDE7CisKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IERlZmVycmVkUHJvcGVy
dHlDb250cm9sc0tleSA9IEAiY29udHJvbHMiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgRGVm
ZXJyZWRQcm9wZXJ0eVBvc3RlcktleSA9IEAicG9zdGVyIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNv
bnN0IERlZmVycmVkUHJvcGVydHlTcmNLZXkgPSBAInNyYyI7CitzdGF0aWMgTlNTdHJpbmcgKiBj
b25zdCBEZWZlcnJlZFBsYXlLZXkgPSBAInBsYXkiOworc3RhdGljIE5TU3RyaW5nICogY29uc3Qg
RGVmZXJyZWRQcm9wZXJ0eVNlbGVjdGVkVHJhY2tLZXkgPSBAInNlbGVjdGVkdHJhY2siOworc3Rh
dGljIE5TU3RyaW5nICogY29uc3QgRGVmZXJyZWRQcm9wZXJ0eU91dE9mQmFuZFRyYWNrc0tleSA9
IEAib3V0b2ZiYW5kdHJhY2tzIjsKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCitzdGF0aWMgTlNT
dHJpbmcgKiBjb25zdCBEZWZlcnJlZFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkID0gQCJ3
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCI7CisjZW5kaWYKKworc3RhdGljIE5TU3RyaW5n
ICogY29uc3QgVGV4dFRyYWNrRGlzcGxheU5hbWVLZXkgPSBAImRpc3BsYXluYW1lIjsKK3N0YXRp
YyBOU1N0cmluZyAqIGNvbnN0IFRleHRUcmFja0xvY2FsZUlkZW50aWZpZXJLZXkgPSBAImxvY2Fs
ZWlkZW50aWZpZXIiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgVGV4dFRyYWNrU3VidGl0bGVz
S2V5ID0gQCJzdWJ0aXRsZXMiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgVGV4dFRyYWNrQ2Fw
dGlvbnNLZXkgPSBAImNhcHRpb25zIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFRleHRUcmFj
a1R5cGVLZXkgPSBAInR5cGUiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgVGV4dFRyYWNrSURL
ZXkgPSBAImlkIjsKKworY29uc3QgaW50IFRleHRUcmFja09mZk1lbnVJdGVtSUQgPSAtMTsKK2Nv
bnN0IGludCBUZXh0VHJhY2tBdXRvTWVudUl0ZW1JRCA9IC0yOworCitNZWRpYVBsYXllclByaXZh
dGVJT1M6OlBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUzo6UGxhdGZvcm1UZXh0VHJh
Y2tNZW51SW50ZXJmYWNlSU9TKE1lZGlhUGxheWVyUHJpdmF0ZUlPUyogb3duZXIpCisgICAgOiBt
X2NsaWVudChudWxscHRyKQorICAgICwgbV9vd25lcihvd25lcikKK3sKK30KKyAgICAgICAgCitN
ZWRpYVBsYXllclByaXZhdGVJT1M6OlBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUzo6
flBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUygpCit7CisgICAgbV9vd25lciA9IG51
bGxwdHI7CisgICAgbV9jbGllbnQgPSBudWxscHRyOworfQorCitQYXNzT3duUHRyPE1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpjcmVhdGUoTWVkaWFQ
bGF5ZXIqIHBsYXllcikKK3sgCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNZWRpYVBsYXllclBy
aXZhdGVJT1MocGxheWVyKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpyZWdp
c3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBp
ZiAoaXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVk
VHlwZXMsIHN1cHBvcnRzVHlwZSwgMCwgMCwgMCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZUlP
Uzo6TWVkaWFQbGF5ZXJQcml2YXRlSU9TKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBtX21l
ZGlhUGxheWVyKHBsYXllcikKKyAgICAsIG1fb2JqY0hlbHBlcihhZG9wdE5TKFtbV2ViQ29yZU1l
ZGlhUGxheWVyTm90aWZpY2F0aW9uSGVscGVyIGFsbG9jXSBpbml0V2l0aENsaWVudDp0aGlzXSkp
CisgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCisgICAgLCBtX3JlYWR5
U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICAsIG1fY3VycmVudFRyYWNrKG51bGxwdHIpCisjZW5kaWYKKyAgICAsIG1fZGVsYXlDYWxs
YmFja3MoMCkKKyAgICAsIG1fY2hhbmdpbmdWb2x1bWUoMCkKKyAgICAsIG1fYnl0ZXNMb2FkZWRB
dExhc3REaWRMb2FkaW5nUHJvZ3Jlc3MoMCkKKyAgICAsIG1fcmVxdWVzdGVkUmF0ZSgwKQorICAg
ICwgbV9idWZmZXJpbmdTdGF0ZShFbXB0eSkKKyAgICAsIG1fdmlzaWJsZShmYWxzZSkKKyAgICAs
IG1fdXNpbmdOZXR3b3JrKGZhbHNlKQorICAgICwgbV9pbkZ1bGxTY3JlZW4oZmFsc2UpCisgICAg
LCBtX3Nob3VsZFByZXBhcmVUb1BsYXkoZmFsc2UpCisgICAgLCBtX3ByZXBhcmluZ1RvUGxheShm
YWxzZSkKKyAgICAsIG1fcGF1c2VSZXF1ZXN0ZWQoZmFsc2UpCit7Cit9CisKK01lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6fk1lZGlhUGxheWVyUHJpdmF0ZUlPUygpCit7CisgICAgY2xlYXJUZXh0VHJh
Y2tzKCk7CisgICAgW21fb2JqY0hlbHBlci5nZXQoKSBkaXNjb25uZWN0XTsKKyAgICBpZiAoW21f
bWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfc2V0
RGVsZWdhdGU6KV0pCisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXREZWxl
Z2F0ZTpuaWxdOworICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9kaXNjb25uZWN0XTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldE1lZGlhUGxheWVyUHJveHkoV2Vi
TWVkaWFQbGF5ZXJQcm94eSAqcHJveHkpCit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXJIZWxwZXIp
CisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9kaXNjb25uZWN0XTsKKworICAg
IG1fbWVkaWFQbGF5ZXJIZWxwZXIgPSBudWxscHRyOworCisgICAgaWYgKHByb3h5KSB7CisgICAg
ICAgIC8vIGRvbid0IHRyeSB0byB1c2UgYSBoZWxwZXIgaWYgdGhlIGludGVyZmFjZSB2ZXJzaW9u
IGlzIHRvbyBsb3cKKyAgICAgICAgaWYgKFtwcm94eSBfaW50ZXJmYWNlVmVyc2lvbl0gPCAga1Jl
cXVpcmVkSGVscGVySW50ZXJmYWNlVmVyc2lvbikgeworICAgICAgICAgICAgTlNMb2coQCJNZWRp
YSBwbGF5ZXIgaGVscGVyIGludGVyZmFjZSB2ZXJzaW9uIHRvbyBsb3csIGV4aXRpbmcuIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9tZWRpYVBsYXllckhlbHBl
ciA9IGFkb3B0TlMoc3RhdGljX2Nhc3Q8TlNPYmplY3QgKj4oW3Byb3h5IHJldGFpbl0pKTsKKyAg
ICAgICAgaWYgKFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX3NldERlbGVnYXRlOildKQorICAgICAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxw
ZXIuZ2V0KCkgX3NldERlbGVnYXRlOm1fb2JqY0hlbHBlci5nZXQoKV07CisKKyAgICAgICAgYWNj
ZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBwcm9jZXNzUGVu
ZGluZ1JlcXVlc3RzKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpsb2FkKGNv
bnN0IFN0cmluZyYgdXJsKQoreworICAgIE5TVVJMICpuc1VSTCA9IFVSTChQYXJzZWRVUkxTdHJp
bmcsIHVybCk7CisKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpIHsKKyAgICAgICAgYWRk
RGVmZXJyZWRSZXF1ZXN0KERlZmVycmVkUHJvcGVydHlTcmNLZXksIFtuc1VSTCBhYnNvbHV0ZVN0
cmluZ10pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW21fZGVmZXJyZWRQcm9wZXJ0
aWVzLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpEZWZlcnJlZFByb3BlcnR5U3JjS2V5XTsKKyAg
ICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICB7CisgICAgICAgIGlmIChtX25ldHdvcmtT
dGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGluZykgeworICAgICAgICAgICAgbV9uZXR3b3JrU3Rh
dGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgICAgIG1fbWVkaWFQbGF5ZXItPm5l
dHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9yZWFkeVN0YXRl
ICE9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykgeworICAgICAgICAgICAgbV9yZWFkeVN0YXRl
ID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICAgICAgbV9tZWRpYVBsYXllci0+
cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fcGF1c2VSZXF1ZXN0
ZWQgPSBmYWxzZTsKKyAgICAgICAgbV9wcmVwYXJpbmdUb1BsYXkgPSBmYWxzZTsKKworICAgICAg
ICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfY2FuY2VsTG9hZF07CisgICAgICAgIFttX21l
ZGlhUGxheWVySGVscGVyLmdldCgpIF9sb2FkOm5zVVJMXTsKKyAgICB9CisgICAgc2V0RGVsYXlD
YWxsYmFja3MoZmFsc2UpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6Y2FuY2Vs
TG9hZCgpCit7CisgICAgW21fb2JqY0hlbHBlci5nZXQoKSBjYW5jZWxQZW5kaW5nUmVxdWVzdHNd
OworICAgIFttX2RlZmVycmVkUHJvcGVydGllcy5nZXQoKSByZW1vdmVBbGxPYmplY3RzXTsKKwor
ICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIFttX21l
ZGlhUGxheWVySGVscGVyLmdldCgpIF9jYW5jZWxMb2FkXTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVJT1M6OmFkZERlZmVycmVkUmVxdWVzdChOU1N0cmluZyAqbmFtZSwgaWQgdmFsdWUp
Cit7CisgICAgaWYgKCFtX2RlZmVycmVkUHJvcGVydGllcykKKyAgICAgICAgbV9kZWZlcnJlZFBy
b3BlcnRpZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwor
ICAgIFttX2RlZmVycmVkUHJvcGVydGllcy5nZXQoKSBzZXRPYmplY3Q6dmFsdWUgPyB2YWx1ZSA6
IEAiIiBmb3JLZXk6bmFtZV07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpwcm9j
ZXNzRGVmZXJyZWRSZXF1ZXN0cygpCit7CisgICAgaWYgKCFbbV9kZWZlcnJlZFByb3BlcnRpZXMu
Z2V0KCkgY291bnRdKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0
cnVlKTsKKyAgICB7CisgICAgICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGxvY2FsUHJvcGVy
dGllcyA9IGFkb3B0TlMoW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpt
X2RlZmVycmVkUHJvcGVydGllcy5nZXQoKV0pOworICAgICAgICBbbV9kZWZlcnJlZFByb3BlcnRp
ZXMuZ2V0KCkgcmVtb3ZlQWxsT2JqZWN0c107CisKKyAgICAgICAgLy8gQWx3YXlzIHNldCB0aGUg
c3JjIGZpcnN0LgorICAgICAgICBpZCB2YWx1ZSA9IFtsb2NhbFByb3BlcnRpZXMuZ2V0KCkgb2Jq
ZWN0Rm9yS2V5OkRlZmVycmVkUHJvcGVydHlTcmNLZXldOworICAgICAgICBpZiAodmFsdWUpCisg
ICAgICAgICAgICBsb2FkKHZhbHVlKTsKKworICAgICAgICBmb3IgKE5TU3RyaW5nICpuYW1lIGlu
IGxvY2FsUHJvcGVydGllcy5nZXQoKSkgeworICAgICAgICAgICAgdmFsdWUgPSBbbG9jYWxQcm9w
ZXJ0aWVzLmdldCgpIG9iamVjdEZvcktleTpuYW1lXTsKKworICAgICAgICAgICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpwcm9jZXNzRGVmZXJyZWRSZXF1ZXN0cyglcCkgLSBw
cm9jZXNzaW5nICVzIiwgdGhpcywgW25hbWUgVVRGOFN0cmluZ10pOworCisgICAgICAgICAgICBp
ZiAoW25hbWUgaXNFcXVhbFRvU3RyaW5nOkRlZmVycmVkUHJvcGVydHlQb3N0ZXJLZXldKQorICAg
ICAgICAgICAgICAgIHNldFBvc3Rlcih2YWx1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChbbmFt
ZSBpc0VxdWFsVG9TdHJpbmc6RGVmZXJyZWRQcm9wZXJ0eUNvbnRyb2xzS2V5XSkKKyAgICAgICAg
ICAgICAgICBzZXRDb250cm9scyhbdmFsdWUgYm9vbFZhbHVlXSk7CisgICAgICAgICAgICBlbHNl
IGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6RGVmZXJyZWRQbGF5S2V5XSkKKyAgICAgICAgICAg
ICAgICBwbGF5KCk7CisgICAgICAgICAgICBlbHNlIGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6
RGVmZXJyZWRQcm9wZXJ0eU91dE9mQmFuZFRyYWNrc0tleV0pCisgICAgICAgICAgICAgICAgc2V0
T3V0T2ZCYW5kVGV4dFRyYWNrcyh2YWx1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChbbmFtZSBp
c0VxdWFsVG9TdHJpbmc6RGVmZXJyZWRQcm9wZXJ0eVNlbGVjdGVkVHJhY2tLZXldKQorICAgICAg
ICAgICAgICAgIHNldFNlbGVjdGVkVGV4dFRyYWNrKHZhbHVlKTsKKyNpZiBFTkFCTEUoSU9TX0FJ
UlBMQVkpCisgICAgICAgICAgICBlbHNlIGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6RGVmZXJy
ZWRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZF0pCisgICAgICAgICAgICAgICAgc2V0V2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoW3ZhbHVlIGJvb2xWYWx1ZV0pOworI2VuZGlmCisg
ICAgICAgICAgICBlbHNlIGlmICghW25hbWUgaXNFcXVhbFRvU3RyaW5nOkRlZmVycmVkUHJvcGVy
dHlTcmNLZXldKQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQobmFtZSwgdmFsdWUp
OworICAgICAgICB9CisgICAgfQorICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldFBvc3Rlcihjb25zdCBTdHJpbmcmIHVybCkK
K3sKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICB7CisgICAgICAgIE5TVVJMICpu
c1VSTCA9IFVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7CisgICAgICAgIGlmIChtX21lZGlhUGxh
eWVySGVscGVyKSB7CisgICAgICAgICAgICBbbV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVt
b3ZlT2JqZWN0Rm9yS2V5OkRlZmVycmVkUHJvcGVydHlQb3N0ZXJLZXldOworICAgICAgICAgICAg
W21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldFBvc3Rlcjpuc1VSTF07CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkRGVmZXJyZWRSZXF1ZXN0KERlZmVycmVkUHJv
cGVydHlQb3N0ZXJLZXksIHVybCk7CisgICAgfQorICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNl
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldENvbnRyb2xzKGJvb2wgY29u
dHJvbHMpCit7CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgeworICAgICAgICBp
ZiAobV9tZWRpYVBsYXllckhlbHBlcikgeworICAgICAgICAgICAgW21fZGVmZXJyZWRQcm9wZXJ0
aWVzLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpEZWZlcnJlZFByb3BlcnR5Q29udHJvbHNLZXld
OworICAgICAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldENvbnRyb2xzOmNv
bnRyb2xzXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGREZWZlcnJl
ZFJlcXVlc3QoRGVmZXJyZWRQcm9wZXJ0eUNvbnRyb2xzS2V5LCBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6Y29udHJvbHNdKTsKKyAgICB9CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cygp
Cit7CisgICAgaWYgKG1fc2hvdWxkUHJlcGFyZVRvUGxheSAmJiAhbV9wcmVwYXJpbmdUb1BsYXkp
CisgICAgICAgIFttX29iamNIZWxwZXIuZ2V0KCkgc2NoZWR1bGVQcmVwYXJlVG9QbGF5V2l0aE9w
dGlvbmFsRGVsYXk6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU11dOworICAgIGlmIChbbV9k
ZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgY291bnRdKQorICAgICAgICBbbV9vYmpjSGVscGVyLmdl
dCgpIHNjaGVkdWxlRGVmZXJyZWRQcm9wZXJ0aWVzV2l0aE9wdGlvbmFsRGVsYXk6W05TTnVtYmVy
IG51bWJlcldpdGhCb29sOllFU11dOworICAgIG1fc2hvdWxkUHJlcGFyZVRvUGxheSA9IGZhbHNl
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cHJlcGFyZVRvUGxheSgpCit7Cisg
ICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKSB7CisgICAgICAgIC8vIE5vdCBob29rZWQgdXAg
dG8gdGhlIHBsdWctaW4geWV0LCByZW1lbWJlciB0aGlzIHJlcXVlc3QuCisgICAgICAgIG1fc2hv
dWxkUHJlcGFyZVRvUGxheSA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobV9wcmVwYXJpbmdUb1BsYXkgfHwgbV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZl
RnV0dXJlRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaG91bGRQcmVwYXJlVG9QbGF5
ID0gZmFsc2U7CisgICAgbV9wcmVwYXJpbmdUb1BsYXkgPSB0cnVlOworCisgICAgc2V0RGVsYXlD
YWxsYmFja3ModHJ1ZSk7CisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9wcmVw
YXJlRm9yUGxheWJhY2tdOworICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKworCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cGxheSgpCit7CisgICAgaWYgKCFtX21lZGlhUGxh
eWVySGVscGVyKSB7CisgICAgICAgIGFkZERlZmVycmVkUmVxdWVzdChEZWZlcnJlZFBsYXlLZXks
IG5pbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3BhdXNlUmVxdWVzdGVkID0g
ZmFsc2U7CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgICAgIFttX21lZGlhUGxh
eWVySGVscGVyLmdldCgpIF9wbGF5XTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpwYXVzZSgpCit7CisgICAgaWYgKCFtX21l
ZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhdXNlUmVxdWVzdGVk
ID0gdHJ1ZTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICAgICAgW21fbWVkaWFQ
bGF5ZXJIZWxwZXIuZ2V0KCkgX3BhdXNlXTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7
Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZHVyYXRpb24oKSBjb25zdAorewor
ICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZmxv
YXQgZHVyYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4oW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0
KCkgX2R1cmF0aW9uXSk7CisgICAgcmV0dXJuIGR1cmF0aW9uID09IC0xID8gbnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjppbmZpbml0eSgpIDogZHVyYXRpb247Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6Y3VycmVudFRpbWUoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXll
ckhlbHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
PihbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfY3VycmVudFRpbWVdKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnNlZWsoZmxvYXQgdGltZSkKK3sKKyAgICBpZiAoIW1fbWVk
aWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybjsKKyAgICBmbG9hdCBkdXJhdGlvbiA9IHRo
aXMtPmR1cmF0aW9uKCk7CisgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldEN1cnJl
bnRUaW1lOih0aW1lID4gZHVyYXRpb24gPyBkdXJhdGlvbiA6IHRpbWUpXTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnNldEVuZFRpbWUoZmxvYXQgdGltZSkKK3sKKyAgICBpZiAo
IW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybjsKKyAgICBbbV9tZWRpYVBsYXll
ckhlbHBlci5nZXQoKSBfc2V0RW5kVGltZTp0aW1lXTsKK30KKworYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVJT1M6OnBhdXNlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVy
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXJhdGUoKTsKK30KKworYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnNlZWtpbmcoKSBjb25zdAoreworICAgIGlmICghbV9tZWRp
YVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9tZWRp
YVBsYXllckhlbHBlci5nZXQoKSBfc2Vla2luZ107Cit9CisKK0ludFNpemUgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVy
SGVscGVyKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgTlNTaXplIHNpemUgPSBb
bV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfbmF0dXJhbFNpemVdOworICAgIHJldHVybiBJbnRT
aXplKHNpemUpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6aGFzVmlkZW8oKSBj
b25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfaGFzVmlkZW9dOwor
fQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6aGFzQXVkaW8oKSBjb25zdAoreworICAg
IGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfaGFzQXVkaW9dOworfQorCitmbG9hdCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnZvbHVtZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlh
UGxheWVySGVscGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFttX21lZGlh
UGxheWVySGVscGVyLmdldCgpIF92b2x1bWVdOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUlPUzo6c2V0Vm9sdW1lKGZsb2F0IGluVm9sdW1lKQoreworICAgIGlmICghbV9tZWRpYVBsYXll
ckhlbHBlciB8fCBtX2NoYW5naW5nVm9sdW1lKQorICAgICAgICByZXR1cm47CisgICAgW21fbWVk
aWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldFZvbHVtZTppblZvbHVtZV07Cit9CisKK2Zsb2F0IE1l
ZGlhUGxheWVyUHJpdmF0ZUlPUzo6cmF0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxh
eWVySGVscGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFttX21lZGlhUGxh
eWVySGVscGVyLmdldCgpIF9yYXRlXTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6
OnNldFJhdGUoZmxvYXQgaW5SYXRlKQoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikK
KyAgICAgICAgcmV0dXJuOworICAgIG1fcmVxdWVzdGVkUmF0ZSA9IGluUmF0ZTsKKyAgICBbbV9t
ZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2V0UmF0ZTppblJhdGVdOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUlPUzo6c2V0TXV0ZWQoYm9vbCBpbk11dGUpCit7CisgICAgaWYgKCFtX21l
ZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm47CisgICAgW21fbWVkaWFQbGF5ZXJIZWxw
ZXIuZ2V0KCkgX3NldE11dGVkOmluTXV0ZV07Cit9CisKK2ludCBNZWRpYVBsYXllclByaXZhdGVJ
T1M6OmRhdGFSYXRlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBf
ZGF0YVJhdGVdOworfQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6bmV0d29ya1N0YXRlKCkgY29uc3QgCit7IAorICAgIHJldHVybiBtX25ldHdvcmtT
dGF0ZTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlSU9T
OjpyZWFkeVN0YXRlKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKK30KKwor
ZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjptYXhUaW1lQnVmZmVyZWQoKSBjb25zdAorewor
ICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9tYXhUaW1lQnVmZmVyZWRdOworfQorCiti
b29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB1bnNpZ25lZCBjdXJyZW50Qnl0ZXNMb2FkZWQgPSBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQo
KSBfYnl0ZXNMb2FkZWRdOworICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzID0gY3VycmVudEJ5
dGVzTG9hZGVkICE9IG1fYnl0ZXNMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3M7CisgICAg
bV9ieXRlc0xvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzcyA9IGN1cnJlbnRCeXRlc0xvYWRl
ZDsKKyAgICByZXR1cm4gZGlkTG9hZGluZ1Byb2dyZXNzOworfQorCitib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6dG90YWxCeXRlc0tub3duKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdG90YWxC
eXRlcygpID4gMDsKK30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjp0b3RhbEJ5
dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfdG90YWxCeXRl
c107Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6bWF4VGltZVNlZWthYmxlKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiAw
LjBmOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfbWF4VGltZVNlZWth
YmxlXTsKK30KKworUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVJT1M6
OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9
IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOworCisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQor
ICAgICAgICByZXR1cm4gdGltZVJhbmdlcy5yZWxlYXNlKCk7CisKKyAgICBOU0FycmF5ICpyYW5n
ZXMgPSBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfYnVmZmVyZWRUaW1lUmFuZ2VzXTsKKyAg
ICBpZiAoIXJhbmdlcykKKyAgICAgICAgcmV0dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOworCisg
ICAgZmxvYXQgdGltZVJhbmdlWzJdOworICAgIGludCBjb3VudCA9IFtyYW5nZXMgY291bnRdOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU0RhdGEgKnJh
bmdlID0gW3JhbmdlcyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBbcmFuZ2UgZ2V0Qnl0ZXM6
dGltZVJhbmdlIGxlbmd0aDooTlNVSW50ZWdlcilzaXplb2YodGltZVJhbmdlKV07CisKKyAgICAg
ICAgdGltZVJhbmdlcy0+YWRkKHRpbWVSYW5nZVswXSwgdGltZVJhbmdlWzFdKTsKKyAgICB9CisK
KyAgICByZXR1cm4gdGltZVJhbmdlcy5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpzZXRTaXplKGNvbnN0IEludFNpemUmKQoreworICAgIC8vIEZJWE1FOiBEbyB3
ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmU/Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
SU9TOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVl
ZCB0byBkbyBhbnl0aGluZyBtb3JlIGhlcmU/CisgICAgaWYgKG1fdmlzaWJsZSAhPSB2aXNpYmxl
KQorICAgICAgICBtX3Zpc2libGUgPSB2aXNpYmxlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpCit7CisgICAg
Ly8gTm90aGluZyB0byBkbyBoZXJlLgorfQorCitzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVU
eXBlQ2FjaGUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+
IHR5cGVDYWNoZTsKKyAgICBzdGF0aWMgYm9vbCB0eXBlTGlzdEluaXRpYWxpemVkID0gZmFsc2U7
CisKKyAgICBpZiAodHlwZUxpc3RJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIHR5cGVDYWNo
ZTsKKworICAgIHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgLy8gRklYTUU6IFNo
b3VsZCBnZXQgdGhlc2UgZnJvbSB0aGUgaGVscGVyLCBidXQgd2UgZG9uJ3QgaGF2ZSBhbiBpbnN0
YW5jZSB3aGVuIHRoaXMgaXMgY2FsbGVkLgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0eXBlTGlz
dFtdID0geworICAgICAgICAiYXBwbGljYXRpb24veC1tcGVndXJsIiwKKyAgICAgICAgImFwcGxp
Y2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsIiwKKyAgICAgICAgImF1ZGlvLzNncHAiLAorICAgICAg
ICAiYXVkaW8vM2dwcDIiLAorICAgICAgICAiYXVkaW8vYWFjIiwKKyAgICAgICAgImF1ZGlvL2Fp
ZmYiLAorICAgICAgICAiYXVkaW8vYW1yIiwKKyAgICAgICAgImF1ZGlvL2Jhc2ljIiwKKyAgICAg
ICAgImF1ZGlvL21wMyIsCisgICAgICAgICJhdWRpby9tcDQiLAorICAgICAgICAiYXVkaW8vbXBl
ZyIsCisgICAgICAgICJhdWRpby9tcGVndXJsIiwKKyAgICAgICAgImF1ZGlvL21wZWczIiwKKyAg
ICAgICAgImF1ZGlvL3NjcGxzIiwKKyAgICAgICAgImF1ZGlvL3dhdiIsCisgICAgICAgICJhdWRp
by94LWFhYyIsCisgICAgICAgICJhdWRpby94LWFpZmYiLAorICAgICAgICAiYXVkaW8veC1jYWYi
LAorICAgICAgICAiYXVkaW8veC1tNGEiLAorICAgICAgICAiYXVkaW8veC1tNGIiLAorICAgICAg
ICAiYXVkaW8veC1tNHAiLAorICAgICAgICAiYXVkaW8veC1tNHIiLAorICAgICAgICAiYXVkaW8v
eC1tcDMiLAorICAgICAgICAiYXVkaW8veC1tcGVnIiwKKyAgICAgICAgImF1ZGlvL3gtbXBlZzMi
LAorICAgICAgICAiYXVkaW8veC1tcGVndXJsIiwKKyAgICAgICAgImF1ZGlvL3gtc2NwbHMiLAor
ICAgICAgICAiYXVkaW8veC13YXYiLAorICAgICAgICAidmlkZW8vM2dwcCIsCisgICAgICAgICJ2
aWRlby8zZ3BwMiIsCisgICAgICAgICJ2aWRlby9tcDQiLAorICAgICAgICAidmlkZW8vcXVpY2t0
aW1lIiwKKyAgICAgICAgInZpZGVvL3gtbTR2IiwKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBp
cyBhZGRlZCB0byByZXN0b3JlIG9sZCBiZWhhdmlvciBmb3I6CisgICAgICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS85NzkyOTY0PiBFbWJlZGRlZCB2aWRlb3MgZG9uJ3QgcGxheSBvbiBzcGllZ2VsLmRl
ICguaHRtbCBmaWxlIHJlZGlyZWN0cykKKyAgICAgICAgLy8gSG93ZXZlciwgYSBiZXR0ZXIgZml4
IGlzIHRyYWNrZWQgYnk6CisgICAgICAgIC8vIDxodHRwOi8vd2Via2l0Lm9yZy9iLzY0ODExPiA8
dmlkZW8+ICIuaHRtbCIgc3JjIHdpdGggYSAzMDEgcmVkaXJlY3QgZmFpbHMgdG8gbG9hZAorICAg
ICAgICAidGV4dC9odG1sIiwKKyAgICB9OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBX
VEZfQVJSQVlfTEVOR1RIKHR5cGVMaXN0KTsgKytpKQorICAgICAgICB0eXBlQ2FjaGUuZ2V0KCku
YWRkKHR5cGVMaXN0W2ldKTsKKworICAgIHJldHVybiB0eXBlQ2FjaGU7Cit9CisKK01lZGlhUGxh
eWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzdXBwb3J0c1R5cGUoY29u
c3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICAvLyBP
bmx5IHJldHVybiAiSXNTdXBwb3J0ZWQiIGlmIHRoZXJlIGlzIG5vIGNvZGVjcyBwYXJhbWV0ZXIg
Zm9yIG5vdyBhcyB0aGVyZSBpcyBubyB3YXkgdG8gYXNrIENvcmVNZWRpYQorICAgIC8vIGlmIGl0
IHN1cHBvcnRzIGFuIGV4dGVuZGVkIE1JTUUgdHlwZS4KKyAgICBpZiAoIXBhcmFtZXRlcnMudHlw
ZS5pc0VtcHR5KCkgJiYgbWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkp
CisgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXll
cjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7CisKKyAgICByZXR1
cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcykKK3sKKyAg
ICB0eXBlcyA9IG1pbWVUeXBlQ2FjaGUoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJ
T1M6OmlzQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShJ
T1NfQUlSUExBWSkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjppc0N1cnJlbnRQbGF5YmFj
a1RhcmdldFdpcmVsZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIu
Z2V0KCkgX2lzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxlc3NdOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUlPUzo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCkKK3sKKyAgICBzZXRE
ZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkg
X3Nob3dQbGF5YmFja1RhcmdldFBpY2tlcl07CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2Up
OworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6aGFzV2lyZWxlc3NQbGF5YmFja1Rh
cmdldHMoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfaGFz
V2lyZWxlc3NQbGF5YmFja1RhcmdldHNdOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlP
Uzo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdAoreworICAgIGlmICghbV9t
ZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9t
ZWRpYVBsYXllckhlbHBlci5nZXQoKSBfd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRdOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c2V0V2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKK3sKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsK
KyAgICB7CisgICAgICAgIGlmIChtX21lZGlhUGxheWVySGVscGVyKSB7CisgICAgICAgICAgICBb
bV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkRlZmVycmVkV2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRdOworICAgICAgICAgICAgW21fbWVkaWFQbGF5ZXJI
ZWxwZXIuZ2V0KCkgX3NldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkOmRpc2FibGVkXTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBhZGREZWZlcnJlZFJlcXVlc3QoRGVmZXJyZWRX
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmRp
c2FibGVkXSk7CisgICAgfQorICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
TGlzdGVuZXJzKGJvb2wgaGFzTGlzdGVuZXJzKQoreworICAgIFttX21lZGlhUGxheWVySGVscGVy
LmdldCgpIF9zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVyczpoYXNMaXN0
ZW5lcnNdOworfQorI2VuZGlmCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiti
b29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVJT1M6OmVudGVyRnVsbHNjcmVlbigpCit7CisgICAgLy8gVGhlIGNvbnN0IGNhc3Qg
aXMgYSB3b3JrYXJvdW5kIGR1ZSB0byBPcGVuU291cmNlIGNoYW5naW5nIHRoZSBzaWduYXR1cmUg
dG8gY29uc3QuCisgICAgTWVkaWFQbGF5ZXJQcml2YXRlSU9TKiBtdXRhYmxlVGhpcyA9IGNvbnN0
X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlSU9TKj4odGhpcyk7CisgICAgbXV0YWJsZVRoaXMtPnNl
dERlbGF5Q2FsbGJhY2tzKHRydWUpOworICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9l
bnRlckZ1bGxTY3JlZW5dOworICAgIG11dGFibGVUaGlzLT5zZXREZWxheUNhbGxiYWNrcyhmYWxz
ZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpleGl0RnVsbHNjcmVlbigpCit7
CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIu
Z2V0KCkgX2V4aXRGdWxsU2NyZWVuXTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5
ZXJIZWxwZXIpIHsKKyAgICAgICAgYWRkRGVmZXJyZWRSZXF1ZXN0KG5hbWUsIHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0
KCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihfYXR0cmlidXRlQ2hhbmdlZDp2YWx1ZTop
XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAg
W21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2F0dHJpYnV0ZUNoYW5nZWQ6bmFtZSB2YWx1ZTp2
YWx1ZV07CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCitib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUlPUzo6cmVhZHlGb3JQbGF5YmFjaygpIGNvbnN0Cit7CisgICAgaWYgKFttX21l
ZGlhUGxheWVySGVscGVyLmdldCgpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3JlYWR5
Rm9yUGxheWJhY2spXSkKKyAgICAgICAgcmV0dXJuIFttX21lZGlhUGxheWVySGVscGVyLmdldCgp
IF9yZWFkeUZvclBsYXliYWNrXTsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlOjpyZWFkeUZvclBsYXliYWNrKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlSU9T
OjpoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX21lZGlhUGxheWVy
SGVscGVyLmdldCgpIF9oYXNDbG9zZWRDYXB0aW9uc107Cit9ICAgIAorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUlPUzo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgZmxhZykKK3sKKyAg
ICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlOmZs
YWddOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZGVsaXZlck5vdGlmaWNhdGlv
bihNZWRpYVBsYXllclByb3h5Tm90aWZpY2F0aW9uVHlwZSBub3RpZmljYXRpb24pIAoreworICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZGVsaXZlck5vdGlmaWNhdGlvbigl
cCkgLSBub3RpZmljYXRpb24gPSAlaSwgZW50ZXJpbmcgd2l0aCBuZXR3b3JrU3RhdGUgPSAlaSwg
cmVhZHlTdGF0ZSA9ICVpIiwgCisgICAgICAgIHRoaXMsIHN0YXRpY19jYXN0PGludD4obm90aWZp
Y2F0aW9uKSwgc3RhdGljX2Nhc3Q8aW50PihtX25ldHdvcmtTdGF0ZSksIHN0YXRpY19jYXN0PGlu
dD4obV9yZWFkeVN0YXRlKSk7CisKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChjYWxsYmFja3NEZWxheWVkKCkpIHsKKyAgICAgICAgW21fb2JqY0hl
bHBlci5nZXQoKSBkZWxheU5vdGlmaWNhdGlvbjpub3RpZmljYXRpb25dOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3Rh
dGUgPSBtX25ldHdvcmtTdGF0ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFk
eVN0YXRlID0gbV9yZWFkeVN0YXRlOworCisgICAgc3dpdGNoIChub3RpZmljYXRpb24pIHsKKyAg
ICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uU3RhcnRVc2luZ05ldHdvcms6CisgICAgICAg
IG1fdXNpbmdOZXR3b3JrID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwgTWVk
aWFQbGF5ZXI6OkxvYWRpbmcpCisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpMb2FkaW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZp
Y2F0aW9uU3RvcFVzaW5nTmV0d29yazoKKyAgICAgICAgbV91c2luZ05ldHdvcmsgPSBmYWxzZTsK
KyAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGEg
JiYgbV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpCisgICAgICAgICAg
ICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxlOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25HYWluRm9jdXM6CisgICAgICAgIGlmICht
X25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxheWVyOjpMb2FkaW5nKQorICAgICAgICAgICAgbV9uZXR3
b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uTG9zZUZvY3VzOgorICAgICAgICBpZiAobV9uZXR3
b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpCisgICAgICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxlOworICAgICAgICBpZiAobV9yZWFkeVN0YXRlID4g
TWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSkKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRp
YVBsYXllck5vdGlmaWNhdGlvbkVudGVyZWRGdWxsc2NyZWVuOgorICAgICAgICBtX2luRnVsbFNj
cmVlbiA9IHRydWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlm
aWNhdGlvbkV4aXRlZEZ1bGxzY3JlZW46IHsKKyAgICAgICAgbV9pbkZ1bGxTY3JlZW4gPSBmYWxz
ZTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgICAgIHNldFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKDApOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVk
aWFQbGF5ZXJOb3RpZmljYXRpb25SZWFkeUZvckluc3BlY3Rpb246CisgICAgICAgIC8vIFRoZSBi
dWZmZXJpbmcgc3RhdGUgc29tZXRpbWVzIHJlYWNoZXMgImxpa2VseSB0byBrZWVwIHVwIiBvciAi
ZnVsbCIgYmVmb3JlIHRoZSBwbGF5ZXIgaXRlbSBpcworICAgICAgICAvLyByZWFkeSBmb3IgaW5z
cGVjdGlvbi4gSW4gdGhhdCBjYXNlIGFkdmFuY2UgZGlyZWN0bHkgdG8gSGF2ZUVub3VnaERhdGEu
CisgICAgICAgIGlmIChtX2J1ZmZlcmluZ1N0YXRlID4gVW5saWtlbGV5VG9LZWVwVXApCisgICAg
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlQ3Vy
cmVudERhdGE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNh
dGlvbk1lZGlhVmFsaWRhdGVkOgorICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBs
YXllcjo6SWRsZSAmJiAhbV9wcmVwYXJpbmdUb1BsYXkpCisgICAgICAgICAgICBtX25ldHdvcmtT
dGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxlOworICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3Rz
KCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvbk1l
ZGlhRmFpbGVkVG9WYWxpZGF0ZToKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXll
cjo6Rm9ybWF0RXJyb3I7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZl
Tm90aGluZzsgCisgICAgICAgIG1fdXNpbmdOZXR3b3JrID0gZmFsc2U7CisgICAgICAgIG1fcHJl
cGFyaW5nVG9QbGF5ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBs
YXllck5vdGlmaWNhdGlvblBsYXliYWNrRmFpbGVkOiB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBj
YW4ndCBjdXJyZW50bHkgdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIE5ldHdvcmtFcnJvciBh
bmQgRGVjb2RlRXJyb3IuCisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkRl
Y29kZUVycm9yOworCisgICAgICAgIC8vIERvbid0IHJlc2V0IHJlYWR5U3RhdGUsIHdoYXQgd2Ug
aGF2ZSBsb2FkZWQgYWxyZWFkeSBtYXkgYmUgcGxheWFibGUuCisgICAgICAgIG1fdXNpbmdOZXR3
b3JrID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVkaWFQbGF5
ZXJOb3RpZmljYXRpb25SZWFkeUZvclBsYXliYWNrOgorICAgICAgICBpZiAobV9uZXR3b3JrU3Rh
dGUgPCBNZWRpYVBsYXllcjo6TG9hZGluZykKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0g
TWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVy
OjpIYXZlRnV0dXJlRGF0YTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVy
Tm90aWZpY2F0aW9uRGlkUGxheVRvVGhlRW5kOgorICAgICAgICBtX21lZGlhUGxheWVyLT50aW1l
Q2hhbmdlZCgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmlj
YXRpb25TdHJlYW1MaWtlbHlUb0tlZXBVcDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwg
TWVkaWFQbGF5ZXI6OkxvYWRpbmcpCisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlh
UGxheWVyOjpMb2FkaW5nOworICAgICAgICBpZiAobV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6
OkhhdmVNZXRhZGF0YSAmJiBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERh
dGEpCisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERh
dGE7CisgICAgICAgIG1fYnVmZmVyaW5nU3RhdGUgPSBMaWtlbGV5VG9LZWVwVXA7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvblN0cmVhbUJ1ZmZlckZ1
bGw6CisgICAgICAgIC8vIFRoZSBtZWRpYSBidWZmZXJzIGFyZSBmdWxsIHNvIG5vIG1vcmUgZGF0
YSBjYW4gYmUgbG9hZGVkLiBUaGlzIGlzbid0IHJlYWxseSB0aGUgdGhlIHNhbWUgdGhpbmcgYXMg
CisgICAgICAgIC8vICJIYXZlRnV0dXJlRGF0YSIsIGJ1dCBub3RoaW5nIG1vcmUgd2lsbCBiZSBs
b2FkZWQgdW50aWwgcGxheWJhY2sgY29uc3VtZXMgc29tZSBvZiB0aGUgYnVmZmVyZWQgZGF0YQor
ICAgICAgICAvLyBzbyBidW1wIHRoZSByZWFkeVN0YXRlIHRvIGFsbG93IHBsYXliYWNrLgorICAg
ICAgICBpZiAobV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBtX3Jl
YWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpCisgICAgICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgIG1fbmV0d29y
a1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAgIG1fYnVmZmVyaW5nU3RhdGUgPSBG
dWxsOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25T
dHJlYW1SYW5Ecnk6CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRp
bmc7CisgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPiBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRh
KQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0
YTsKKyAgICAgICAgbV9idWZmZXJpbmdTdGF0ZSA9IEVtcHR5OworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25TdHJlYW1Vbmxpa2VseVRvS2VlcFVwOgor
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBp
ZiAobV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBtX3JlYWR5U3Rh
dGUgPCBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpCisgICAgICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgIG1fYnVmZmVyaW5nU3Rh
dGUgPSBVbmxpa2VsZXlUb0tlZXBVcDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlh
UGxheWVyTm90aWZpY2F0aW9uRmlsZUxvYWRlZDoKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBN
ZWRpYVBsYXllcjo6TG9hZGVkOworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZUVub3VnaERhdGE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5v
dGlmaWNhdGlvblRpbWVKdW1wZWQ6CisgICAgICAgIC8vIFNvbWV0aW1lcyBnZXQgYSBzcHVyaW91
cyAidGltZSBqdW1wZWQiIHdoZW4gdGhlIG1vdmllIGlzIGJlaW5nIHNldCB1cCBvciBpbW1lZGlh
dGVseSBhZnRlciBwYXVzaW5nLCAKKyAgICAgICAgLy8gZG9uJ3QgZmFsbCBmb3IgaXQuCisgICAg
ICAgIGlmIChtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YSkKKyAg
ICAgICAgICAgIG1fbWVkaWFQbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvbk11dGVkRGlkQ2hhbmdlOgorICAgIGNh
c2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25Wb2x1bWVEaWRDaGFuZ2U6CisgICAgICAgICsrbV9j
aGFuZ2luZ1ZvbHVtZTsKKyAgICAgICAgbV9tZWRpYVBsYXllci0+dm9sdW1lQ2hhbmdlZCh2b2x1
bWUoKSk7CisgICAgICAgIC0tbV9jaGFuZ2luZ1ZvbHVtZTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uU2l6ZURpZENoYW5nZToKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uUGxheVBhdXNlQnV0dG9uUHJl
c3NlZDoKKyAgICBjYXNlIE1lZGlhUGxheWVyUmVxdWVzdEJlZ2luUGxheWJhY2s6CisgICAgY2Fz
ZSBNZWRpYVBsYXllclJlcXVlc3RQYXVzZVBsYXliYWNrOgorICAgICAgICBicmVhazsKKworICAg
IGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25SYXRlRGlkQ2hhbmdlOgorICAgICAgICBtX3By
ZXBhcmluZ1RvUGxheSA9IGZhbHNlOworICAgICAgICBpZiAobV9wYXVzZVJlcXVlc3RlZCAmJiBy
YXRlKCkpCisgICAgICAgICAgICBtX3BhdXNlUmVxdWVzdGVkID0gZmFsc2U7CisgICAgICAgIGJy
ZWFrOworCisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQorICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3Rp
ZmljYXRpb25DdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZDoKKyAgICAgICAg
bV9tZWRpYVBsYXllci0+Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5nZWQoKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uUGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkOgorICAgICAgICBtX21lZGlhUGxheWVyLT5wbGF5
YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWQoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYK
KyAgICB9CisKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gb2xkTmV0d29ya1N0YXRlKQorICAg
ICAgICBtX21lZGlhUGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fcmVh
ZHlTdGF0ZSAhPSBvbGRSZWFkeVN0YXRlKQorICAgICAgICBtX21lZGlhUGxheWVyLT5yZWFkeVN0
YXRlQ2hhbmdlZCgpOworCisgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpk
ZWxpdmVyTm90aWZpY2F0aW9uKCVwKSAtIGV4aXRpbmcgd2l0aCBuZXR3b3JrU3RhdGUgPSAlaSwg
cmVhZHlTdGF0ZSA9ICVpIiwgCisgICAgICAgIHRoaXMsIHN0YXRpY19jYXN0PGludD4obV9uZXR3
b3JrU3RhdGUpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVhZHlTdGF0ZSkpOworfQorCisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQorYm9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnJlcXVpcmVzVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2luRnVsbFNjcmVl
bjsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKFRleHRUcmFja1JlcHJlc2VudGF0aW9uKiByZXByZXNlbnRhdGlvbikKK3sKKyAgICBb
bV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb246cmVw
cmVzZW50YXRpb24gPyByZXByZXNlbnRhdGlvbi0+cGxhdGZvcm1MYXllcigpIDogbnVsbHB0cl07
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjppbmJhbmRUZXh0VHJhY2tzQ2hhbmdl
ZChOU0FycmF5ICp0cmFja3MpCit7CisgICAgVmVjdG9yPFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGSU9TPiA+IHJlbW92ZWRUZXh0VHJhY2tzID0gbV90ZXh0VHJhY2tzOworCisgICAg
Zm9yIChOU0RpY3Rpb25hcnkgKnRyYWNrSW5mbyBpbiB0cmFja3MpIHsKKyAgICAgICAgYm9vbCBu
ZXdUcmFjayA9IHRydWU7CisgICAgICAgIE5TTnVtYmVyICp0cmFja0lEVmFsdWUgID0gW3RyYWNr
SW5mbyBvYmplY3RGb3JLZXk6VGV4dFRyYWNrSURLZXldOworCisgICAgICAgIGlmICghW3RyYWNr
SURWYWx1ZSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKSB7CisgICAgICAgICAgICBO
U0xvZyhAIlVuZXhwZWN0ZWQgdHJhY2sgSUQsIGlnbm9yaW5nLiIpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKworICAgICAgICBpbnQgdHJhY2tJRCA9IFt0cmFja0lEVmFsdWUg
aW50VmFsdWVdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZW1vdmVkVGV4dFRyYWNrcy5z
aXplKCk7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGSU9TPiB0cmFjayA9IHN0YXRpY19jYXN0PEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZJT1MqPihyZW1vdmVkVGV4dFRyYWNrc1tpIC0gMV0uZ2V0KCkpOworCisgICAgICAgICAgICBp
ZiAodHJhY2stPmludGVybmFsSUQoKSA9PSB0cmFja0lEKSB7CisgICAgICAgICAgICAgICAgcmVt
b3ZlZFRleHRUcmFja3MucmVtb3ZlKGkgLSAxKTsKKyAgICAgICAgICAgICAgICBuZXdUcmFjayA9
IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmICghbmV3VHJhY2spCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBOU1N0cmluZyAqbmFtZSA9IFt0cmFja0luZm8gb2JqZWN0Rm9yS2V5OlRleHRUcmFja0Rpc3Bs
YXlOYW1lS2V5XTsKKyAgICAgICAgTlNTdHJpbmcgKmxhbmd1YWdlID0gW3RyYWNrSW5mbyBvYmpl
Y3RGb3JLZXk6VGV4dFRyYWNrTG9jYWxlSWRlbnRpZmllcktleV07CisgICAgICAgIE5TU3RyaW5n
ICp0eXBlID0gW3RyYWNrSW5mbyBvYmplY3RGb3JLZXk6VGV4dFRyYWNrVHlwZUtleV07CisKKyAg
ICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjppbmJhbmRUZXh0VHJhY2tz
Q2hhbmdlZCglcCkgLSBhZGRpbmcgdHJhY2sgaWQgJWksIG5hbWUgPSAlcywgbGFuZ3VhZ2UgPSAl
cywgdHlwZSA9ICVzIiwgdGhpcywgdHJhY2tJRCwgW25hbWUgVVRGOFN0cmluZ10sIFtsYW5ndWFn
ZSBVVEY4U3RyaW5nXSwgW3R5cGUgVVRGOFN0cmluZ10pOworCisgICAgICAgIG1fdGV4dFRyYWNr
cy5hcHBlbmQoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUzo6Y3JlYXRlKHRoaXMsIHRyYWNr
SUQsIG5hbWUsIGxhbmd1YWdlLCB0eXBlKSk7CisgICAgfQorCisgICAgaWYgKHJlbW92ZWRUZXh0
VHJhY2tzLnNpemUoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RleHRUcmFja3Mu
c2l6ZSgpOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUz4gdHJhY2sgPSBzdGF0aWNfY2FzdDxJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TKj4obV90ZXh0VHJhY2tzW2kgLSAxXS5nZXQoKSk7CisKKyAgICAgICAgICAgIGlmICgh
cmVtb3ZlZFRleHRUcmFja3MuY29udGFpbnModHJhY2spKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBpZiAobV9jdXJyZW50VHJhY2sgPT0gdHJhY2suZ2V0KCkpCisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50VHJhY2sgPSBudWxscHRyOworICAgICAgICAgICAgbV9t
ZWRpYVBsYXllci0+cmVtb3ZlVGV4dFRyYWNrKHRyYWNrKTsKKyAgICAgICAgICAgIG1fdGV4dFRy
YWNrcy5yZW1vdmUoaSAtIDEpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdGV4dFRyYWNrcy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUz4gdHJhY2sgPSBzdGF0aWNfY2FzdDxJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGSU9TKj4obV90ZXh0VHJhY2tzW2ldLmdldCgpKTsKKworICAgICAg
ICB0cmFjay0+c2V0VGV4dFRyYWNrSW5kZXgoaSk7CisgICAgICAgIGlmICh0cmFjay0+aGFzQmVl
blJlcG9ydGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB0cmFjay0+c2V0
SGFzQmVlblJlcG9ydGVkKHRydWUpOworICAgICAgICBtX21lZGlhUGxheWVyLT5hZGRUZXh0VHJh
Y2sodHJhY2suZ2V0KCkpOworICAgIH0KKyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVJT1M6OmluYmFuZFRleHRUcmFja3NDaGFuZ2VkKCVwKSAtIGZvdW5kICVpIGluLWJhbmQgdHJh
Y2tzIiwgdGhpcywgbV90ZXh0VHJhY2tzLnNpemUoKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpzZXRTZWxlY3RlZFRleHRUcmFjayhOU051bWJlciAqdHJhY2tJRCkKK3sKKyAg
ICBpZiAoIVt0cmFja0lEIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pIHsKKyAgICAg
ICAgTlNMb2coQCJVbmV4cGVjdGVkIHRyYWNrIElELCBpZ25vcmluZy4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikgeworICAgICAgICBh
ZGREZWZlcnJlZFJlcXVlc3QoRGVmZXJyZWRQcm9wZXJ0eVNlbGVjdGVkVHJhY2tLZXksIHRyYWNr
SUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFbbV9tZWRpYVBsYXllckhl
bHBlci5nZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9zZXRTZWxlY3RlZFRleHRU
cmFjazopXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7
CisgICAgeworICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldEN1
cnJlbnRUcmFjayglcCkgLSBzZWxlY3RpbmcgdHJhY2sgaWQgJWkiLCB0aGlzLCBbdHJhY2tJRCBp
bnRWYWx1ZV0pOworICAgICAgICBbbV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVtb3ZlT2Jq
ZWN0Rm9yS2V5OkRlZmVycmVkUHJvcGVydHlTZWxlY3RlZFRyYWNrS2V5XTsKKyAgICAgICAgW21f
bWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldFNlbGVjdGVkVGV4dFRyYWNrOnRyYWNrSURdOwor
ICAgIH0KKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlSU9TOjp0cmFja01vZGVDaGFuZ2VkKCkKK3sKKyAgICBSZWZQdHI8SW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRj4gdHJhY2tUb0VuYWJsZTsKKworICAgIC8vIEFWRm91bmRhdGlvbiBj
YW4gb25seSBlbWl0IGN1ZXMgZm9yIG9uZSB0cmFjayBhdCBhIHRpbWUsIHNvIGVuYWJsZSB0aGUg
Zmlyc3QgdHJhY2sgdGhhdCBpcyBzaG93aW5nLCBvciB0aGUgZmlyc3QgdGhhdAorICAgIC8vIGlz
IGhpZGRlbiBpZiBub25lIGFyZSBzaG93aW5nLiBPdGhlcndpc2UgZGlzYWJsZSBhbGwgdHJhY2tz
LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RleHRUcmFja3Muc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M+IHRyYWNrID0g
bV90ZXh0VHJhY2tzW2ldOworICAgICAgICBpZiAodHJhY2stPm1vZGUoKSA9PSBJbmJhbmRUZXh0
VHJhY2tQcml2YXRlOjpTaG93aW5nKSB7CisgICAgICAgICAgICB0cmFja1RvRW5hYmxlID0gdHJh
Y2s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRyYWNrVG9F
bmFibGUgJiYgdHJhY2stPm1vZGUoKSA9PSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpIaWRkZW4p
CisgICAgICAgICAgICB0cmFja1RvRW5hYmxlID0gdHJhY2s7CisgICAgfQorCisgICAgSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRklPUyogdHJhY2tQcml2YXRlID0gc3RhdGljX2Nhc3Q8SW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRklPUyo+KHRyYWNrVG9FbmFibGUuZ2V0KCkpOworICAgIGlmICht
X2N1cnJlbnRUcmFjayA9PSB0cmFja1ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
Y3VycmVudFRyYWNrID0gdHJhY2tQcml2YXRlOworICAgIHNldFNlbGVjdGVkVGV4dFRyYWNrKHRy
YWNrUHJpdmF0ZSA/IFtOU051bWJlciBudW1iZXJXaXRoSW50OnRyYWNrUHJpdmF0ZS0+aW50ZXJu
YWxJRCgpXSA6IG5pbCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpjbGVhclRl
eHRUcmFja3MoKQoreworICAgIG1fY3VycmVudFRyYWNrID0gbnVsbHB0cjsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV90ZXh0VHJhY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJl
ZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TPiB0cmFjayA9IG1fdGV4dFRyYWNrc1tp
XTsKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cmVtb3ZlVGV4dFRyYWNrKHRyYWNrKTsKKyAgICAg
ICAgdHJhY2stPmRpc2Nvbm5lY3QoKTsKKyAgICB9CisgICAgbV90ZXh0VHJhY2tzLmNsZWFyKCk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpwcm9jZXNzSW5iYW5kVGV4dFRyYWNr
Q3VlKE5TQXJyYXkgKmF0dHJpYnV0ZWRTdHJpbmdzLCBkb3VibGUgdGltZSkKK3sKKyAgICBpZiAo
IW1fY3VycmVudFRyYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRUcmFjay0+
cHJvY2Vzc0N1ZShyZWludGVycHJldF9jYXN0PENGQXJyYXlSZWY+KGF0dHJpYnV0ZWRTdHJpbmdz
KSwgdGltZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRPdXRPZkJhbmRU
ZXh0VHJhY2tzKE5TQXJyYXkgKnRyYWNrc0FycmF5KQoreworICAgIGlmICghbV9tZWRpYVBsYXll
ckhlbHBlcikgeworICAgICAgICBhZGREZWZlcnJlZFJlcXVlc3QoRGVmZXJyZWRQcm9wZXJ0eU91
dE9mQmFuZFRyYWNrc0tleSwgdHJhY2tzQXJyYXkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKF9zZXRPdXRPZkJhbmRUZXh0VHJhY2tzOildKQorICAgICAgICByZXR1cm47CisK
KyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICB7CisgICAgICAgIFttX2RlZmVycmVk
UHJvcGVydGllcy5nZXQoKSByZW1vdmVPYmplY3RGb3JLZXk6RGVmZXJyZWRQcm9wZXJ0eU91dE9m
QmFuZFRyYWNrc0tleV07CisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXRP
dXRPZkJhbmRUZXh0VHJhY2tzOnRyYWNrc0FycmF5XTsKKyAgICB9CisgICAgc2V0RGVsYXlDYWxs
YmFja3MoZmFsc2UpOworfQorCitzdGF0aWMgaW50IHBsYXRmb3JtVHJhY2tJRChQbGF0Zm9ybVRl
eHRUcmFjayogcGxhdGZvcm1UcmFjaykKK3sKKyAgICBpZiAocGxhdGZvcm1UcmFjay0+dHlwZSgp
ID09IFBsYXRmb3JtVGV4dFRyYWNrOjpJbkJhbmQpIHsKKyAgICAgICAgSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUyogdHJhY2tQcml2YXRlID0gc3RhdGljX2Nhc3Q8SW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUyo+KHBsYXRmb3JtVHJhY2stPmNsaWVudCgpLT5wcml2YXRlVHJhY2soKSk7
CisgICAgICAgIHJldHVybiB0cmFja1ByaXZhdGUgPyB0cmFja1ByaXZhdGUtPmludGVybmFsSUQo
KSA6IDA7CisgICAgfQorCisgICAgcmV0dXJuIHBsYXRmb3JtVHJhY2stPnVuaXF1ZUlkKCk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpvdXRPZkJhbmRUZXh0VHJhY2tzQ2hhbmdl
ZCgpCit7CisgICAgaWYgKCFtX21lbnVJbnRlcmZhY2UtPmNsaWVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHRyYWNrc0FycmF5ID0gYWRvcHRO
UyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgVmVjdG9yPFJlZlB0cjxQbGF0
Zm9ybVRleHRUcmFjaz4gPiB0ZXh0VHJhY2tzID0gbV9tZW51SW50ZXJmYWNlLT5jbGllbnQoKS0+
cGxhdGZvcm1UZXh0VHJhY2tzKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4
dFRyYWNrcy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+
IHBsYXRmb3JtVHJhY2sgPSB0ZXh0VHJhY2tzW2ldOworCisgICAgICAgIGlmIChwbGF0Zm9ybVRy
YWNrLT50eXBlKCkgPT0gUGxhdGZvcm1UZXh0VHJhY2s6OkluQmFuZCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBpZiAocGxhdGZvcm1UcmFjay0+a2luZCgpICE9IFBsYXRmb3JtVGV4
dFRyYWNrOjpTdWJ0aXRsZSAmJiBwbGF0Zm9ybVRyYWNrLT5raW5kKCkgIT0gUGxhdGZvcm1UZXh0
VHJhY2s6OkNhcHRpb24pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gdHJhY2sgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlv
bmFyeSBhbGxvY10gaW5pdF0pOworCisgICAgICAgIFt0cmFjay5nZXQoKSBzZXRPYmplY3Q6cGxh
dGZvcm1UcmFjay0+bGFiZWwoKSBmb3JLZXk6VGV4dFRyYWNrRGlzcGxheU5hbWVLZXldOworCisg
ICAgICAgIGlmICghcGxhdGZvcm1UcmFjay0+bGFuZ3VhZ2UoKS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBbdHJhY2suZ2V0KCkgc2V0T2JqZWN0OnBsYXRmb3JtVHJhY2stPmxhbmd1YWdlKCkgZm9y
S2V5OlRleHRUcmFja0xvY2FsZUlkZW50aWZpZXJLZXldOworCisgICAgICAgIE5TU3RyaW5nICp0
eXBlID0gcGxhdGZvcm1UcmFjay0+a2luZCgpID09IFBsYXRmb3JtVGV4dFRyYWNrOjpTdWJ0aXRs
ZSA/IFRleHRUcmFja1N1YnRpdGxlc0tleSA6IFRleHRUcmFja0NhcHRpb25zS2V5OworICAgICAg
ICBbdHJhY2suZ2V0KCkgc2V0T2JqZWN0OnR5cGUgZm9yS2V5OlRleHRUcmFja1R5cGVLZXldOwor
CisgICAgICAgIFt0cmFjay5nZXQoKSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6
cGxhdGZvcm1UcmFja0lEKHBsYXRmb3JtVHJhY2suZ2V0KCkpXSBmb3JLZXk6VGV4dFRyYWNrSURL
ZXldOworCisgICAgICAgIFt0cmFja3NBcnJheSBhZGRPYmplY3Q6dHJhY2suZ2V0KCldOworICAg
IH0KKworICAgIGlmICghW3RyYWNrc0FycmF5LmdldCgpIGNvdW50XSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgc2V0T3V0T2ZCYW5kVGV4dFRyYWNrcyh0cmFja3NBcnJheS5nZXQoKSk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjp0ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5TWVkaWFF
bGVtZW50KFBhc3NSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+IHBsYXRmb3JtVHJhY2spCit7Cisg
ICAgc2V0U2VsZWN0ZWRUZXh0VHJhY2soW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6cGxhdGZvcm1U
cmFja0lEKHBsYXRmb3JtVHJhY2suZ2V0KCkpXSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlSU9TOjp0ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5UGx1Z2luKE5TRGljdGlvbmFyeSAqdHJhY2tJ
bmZvKQoreworICAgIGlmICghbV9tZW51SW50ZXJmYWNlIHx8ICFtX21lbnVJbnRlcmZhY2UtPmNs
aWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXRyYWNrSW5mbykgeworICAgICAg
ICBtX21lbnVJbnRlcmZhY2UtPmNsaWVudCgpLT5zZXRTZWxlY3RlZFRleHRUcmFjaygwKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4gdHJh
Y2tUb1NlbGVjdDsKKyAgICBOU051bWJlciAqdHJhY2tJRFRvU2VsZWN0ICA9IFt0cmFja0luZm8g
b2JqZWN0Rm9yS2V5OlRleHRUcmFja0lES2V5XTsKKyAgICBpZiAoIVt0cmFja0lEVG9TZWxlY3Qg
aXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkgeworICAgICAgICBOU0xvZyhAIlVuZXhw
ZWN0ZWQgdHJhY2sgSUQsIGlnbm9yaW5nLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaW50IHRyYWNrSUQgPSBbdHJhY2tJRFRvU2VsZWN0IGludFZhbHVlXTsKKyAgICBpZiAodHJh
Y2tJRCA9PSBUZXh0VHJhY2tPZmZNZW51SXRlbUlEKQorICAgICAgICB0cmFja1RvU2VsZWN0ID0g
UGxhdGZvcm1UZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpOworICAgIGVsc2UgaWYgKHRy
YWNrSUQgPT0gVGV4dFRyYWNrQXV0b01lbnVJdGVtSUQpCisgICAgICAgIHRyYWNrVG9TZWxlY3Qg
PSBQbGF0Zm9ybVRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7CisgICAgZWxz
ZSB7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+ID4gdGV4dFRyYWNr
cyA9IG1fbWVudUludGVyZmFjZS0+Y2xpZW50KCktPnBsYXRmb3JtVGV4dFRyYWNrcygpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dFRyYWNrcy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiBwbGF0Zm9ybVRyYWNrID0gdGV4
dFRyYWNrc1tpXTsKKworICAgICAgICAgICAgaWYgKHRyYWNrSUQgPT0gcGxhdGZvcm1UcmFja0lE
KHBsYXRmb3JtVHJhY2suZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgdHJhY2tUb1NlbGVjdCA9
IHBsYXRmb3JtVHJhY2s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXRyYWNrVG9TZWxlY3QpIHsKKyAgICAgICAgTlNM
b2coQCJUZXh0IHRyYWNrIElEICVpIGlzIHVua25vd24sIGlnbm9yaW5nLiIsIHRyYWNrSUQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9tZW51SW50ZXJmYWNlLT5jbGllbnQoKS0+
c2V0U2VsZWN0ZWRUZXh0VHJhY2sodHJhY2tUb1NlbGVjdCk7Cit9CisKK1Bhc3NSZWZQdHI8UGxh
dGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlPiBNZWRpYVBsYXllclByaXZhdGVJT1M6OnRleHRU
cmFja01lbnUoKQoreworICAgIGlmICghbV9tZW51SW50ZXJmYWNlKQorICAgICAgICBtX21lbnVJ
bnRlcmZhY2UgPSBQbGF0Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1M6OmNyZWF0ZSh0aGlz
KTsKKyAgICByZXR1cm4gbV9tZW51SW50ZXJmYWNlOworfQorI2VuZGlmIC8vIEVOQUJMRShWSURF
T19UUkFDSykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitAaW1wbGVtZW50YXRpb24gV2Vi
Q29yZU1lZGlhUGxheWVyTm90aWZpY2F0aW9uSGVscGVyCisKKy0gKGlkKWluaXRXaXRoQ2xpZW50
OihNZWRpYVBsYXllclByaXZhdGVJT1MgKiljbGllbnQKK3sKKyAgICBfY2xpZW50ID0gY2xpZW50
OworICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKHZvaWQpZGlzY29ubmVjdAorewor
ICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2Vs
Zl07CisgICAgX2NsaWVudCA9IDA7Cit9CisKKy0gKHZvaWQpY2FuY2VsUGVuZGluZ1JlcXVlc3Rz
Cit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdl
dDpzZWxmXTsKK30KKworLSAodm9pZClkZWxheU5vdGlmaWNhdGlvbjooaW50KW5vdGlmaWNhdGlv
bgoreworICAgIGlmIChfY2xpZW50KQorICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNl
bGVjdG9yKGRlbGl2ZXJOb3RpZmljYXRpb246KSB3aXRoT2JqZWN0OltOU051bWJlciBudW1iZXJX
aXRoSW50Om5vdGlmaWNhdGlvbl0gYWZ0ZXJEZWxheTowXTsKK30KKworLSAodm9pZClkZWxpdmVy
Tm90aWZpY2F0aW9uOihOU051bWJlciAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmICghX2NsaWVu
dCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChfY2xpZW50LT5jYWxsYmFja3NEZWxheWVkKCkp
CisgICAgICAgIFtzZWxmIGRlbGF5Tm90aWZpY2F0aW9uOltub3RpZmljYXRpb24gaW50VmFsdWVd
XTsKKyAgICBlbHNlCisgICAgICAgIF9jbGllbnQtPmRlbGl2ZXJOb3RpZmljYXRpb24oKE1lZGlh
UGxheWVyUHJveHlOb3RpZmljYXRpb25UeXBlKVtub3RpZmljYXRpb24gaW50VmFsdWVdKTsKK30K
KworLSAodm9pZClzY2hlZHVsZVByZXBhcmVUb1BsYXlXaXRoT3B0aW9uYWxEZWxheTooTlNOdW1i
ZXIgKilzaG91bGREZWxheQoreworICAgIGlmICghX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChbc2hvdWxkRGVsYXkgYm9vbFZhbHVlXSkKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNl
bGVjdG9yOkBzZWxlY3RvcihzY2hlZHVsZVByZXBhcmVUb1BsYXlXaXRoT3B0aW9uYWxEZWxheTop
IHdpdGhPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSBhZnRlckRlbGF5OjBdOwor
ICAgIGVsc2UKKyAgICAgICAgX2NsaWVudC0+cHJlcGFyZVRvUGxheSgpOworfQorCistICh2b2lk
KXNjaGVkdWxlRGVmZXJyZWRQcm9wZXJ0aWVzV2l0aE9wdGlvbmFsRGVsYXk6KE5TTnVtYmVyICop
c2hvdWxkRGVsYXkKK3sKKyAgICBpZiAoIV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChbc2hvdWxkRGVsYXkgYm9vbFZhbHVlXSkgeworICAgICAgICBpZiAoIV9kZWZlcnJlZFBy
b3BlcnRpZXNTY2hlZHVsZWQpIHsKKyAgICAgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpA
c2VsZWN0b3Ioc2NoZWR1bGVEZWZlcnJlZFByb3BlcnRpZXNXaXRoT3B0aW9uYWxEZWxheTopIHdp
dGhPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSBhZnRlckRlbGF5OjBdOworICAg
ICAgICAgICAgX2RlZmVycmVkUHJvcGVydGllc1NjaGVkdWxlZCA9IFlFUzsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgX2RlZmVycmVkUHJvcGVydGllc1NjaGVkdWxl
ZCA9IE5POworICAgIF9jbGllbnQtPnByb2Nlc3NEZWZlcnJlZFJlcXVlc3RzKCk7Cit9CisKKy0g
KHZvaWQpcGx1Z2luRWxlbWVudEluQmFuZEFsdGVybmF0ZVRleHRUcmFja3NEaWRDaGFuZ2U6KE5T
QXJyYXkgKil0cmFja3MKK3sKKyAgICBpZiAoIV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBpZiAoIV9jbGllbnQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIF9jbGllbnQtPmluYmFuZFRleHRUcmFja3NDaGFuZ2VkKHRyYWNrcyk7
CisgICAgfSk7Cit9CisKKy0gKHZvaWQpcGx1Z2luRWxlbWVudERpZFNlbGVjdFRleHRUcmFjazoo
TlNEaWN0aW9uYXJ5ICopdHJhY2tJbmZvCit7CisgICAgaWYgKCFfY2xpZW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKCFfY2xpZW50KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBfY2xpZW50LT50ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5
UGx1Z2luKHRyYWNrSW5mbyk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpcGx1Z2luRWxlbWVudERp
ZE91dHB1dEF0dHJpYnV0ZWRTdHJpbmdzOihOU0FycmF5ICopc3RyaW5ncyBuYXRpdmVTYW1wbGVC
dWZmZXJzOihOU0FycmF5ICopYnVmZmVycyBmb3JUaW1lOihOU1RpbWVJbnRlcnZhbCl0aW1lCit7
CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcnMpOworCisgICAgaWYgKCFfY2xpZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKCFfY2xpZW50KQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBfY2xpZW50LT5wcm9jZXNzSW5iYW5kVGV4dFRy
YWNrQ3VlKHN0cmluZ3MsIHRpbWUpOworICAgIH0pOworfQorCitAZW5kCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnRE
YXRhSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZv
bnREYXRhSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3NTBjNDllNWNlMzRiOTZkOTU5MmMyNjQ2MTMxOGQ3
ZjQ5NTJmMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0KQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgor
CisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYWNoZS5oIgorI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCisjaW1wb3J0ICJGb250
U2VydmljZXNJT1MuaCIKKyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0ZvbnRHbHlwaFN1cHBvcnQu
aD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0ZvbnRJbmZvLmg+CisjaW1wb3J0IDxDb3JlR3Jh
cGhpY3MvQ0dGb250UmVuZGVyaW5nLmg+CisjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgor
I2ltcG9ydCA8ZmxvYXQuaD4KKyNpbXBvcnQgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFy
YWJpYyhDRlN0cmluZ1JlZiBmb250RmFtaWx5TmFtZSkKK3sKKyAgICBpZiAoIWZvbnRGYW1pbHlO
YW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaW1lcyBOZXcgUm9tYW4gY29u
dGFpbnMgQXJhYmljIGdseXBocywgYnV0IENvcmUgVGV4dCBkb2Vzbid0IGtub3cgaG93IHRvIHNo
YXBlIHRoZW0uIDxyZGFyOi8vcHJvYmxlbS85ODIzOTc1PgorICAgIC8vIEZJWE1FIDxyZGFyOi8v
cHJvYmxlbS8xMjA5NjgzNT4gcmVtb3ZlIHRoaXMgZnVuY3Rpb24gb25jZSB0aGUgYWJvdmUgYnVn
IGlzIGZpeGVkLgorICAgIC8vIEFyaWFsIGFuZCBUYWhvbWEgYXJlIGhhdmUgcGVyZm9ybWFuY2Ug
aXNzdWVzIHNvIGRvbid0IHVzZSB0aGVtIGFzIHdlbGwuCisgICAgcmV0dXJuIChDRlN0cmluZ0Nv
bXBhcmUoQ0ZTVFIoIlRpbWVzIE5ldyBSb21hbiIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NG
Q29tcGFyZUVxdWFsVG8pCisgICAgICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIkFy
aWFsIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKKyAgICAgICAg
ICAgfHwgKENGU3RyaW5nQ29tcGFyZShDRlNUUigiVGFob21hIiksIGZvbnRGYW1pbHlOYW1lLCAw
KSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyk7Cit9CisKK3N0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNh
bEdseXBocyhDVEZvbnRSZWYgY3RGb250KQoreworICAgIC8vIFRoZSBjaGVjayBkb2Vzbid0IGxv
b2sgbmVhdCBidXQgdGhpcyBpcyB3aGF0IEFwcEtpdCBkb2VzIGZvciB2ZXJ0aWNhbCB3cml0aW5n
Li4uCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHRhYmxlVGFncyA9IGFkb3B0Q0YoQ1RGb250
Q29weUF2YWlsYWJsZVRhYmxlcyhjdEZvbnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykp
OworICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQo
KSk7CisgICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5k
ZXgpIHsKKyAgICAgICAgQ1RGb250VGFibGVUYWcgdGFnID0gKENURm9udFRhYmxlVGFnKSh1aW50
cHRyX3QpQ0ZBcnJheUdldFZhbHVlQXRJbmRleCh0YWJsZVRhZ3MuZ2V0KCksIGluZGV4KTsKKyAg
ICAgICAgaWYgKHRhZyA9PSBrQ1RGb250VGFibGVWaGVhIHx8IHRhZyA9PSBrQ1RGb250VGFibGVW
T1JHKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX3N5bnRo
ZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyBjZWlsZiht
X3BsYXRmb3JtRGF0YS5zaXplKCkgIC8gMjQuMGYpIDogMC5mOworICAgIG1fc3BhY2VHbHlwaCA9
IDA7CisgICAgbV9zcGFjZVdpZHRoID0gMDsKKyAgICB1bnNpZ25lZCB1bml0c1BlckVtOworICAg
IGZsb2F0IGFzY2VudDsKKyAgICBmbG9hdCBkZXNjZW50OworICAgIGZsb2F0IGxpbmVHYXA7Cisg
ICAgZmxvYXQgbGluZVNwYWNpbmc7CisgICAgZmxvYXQgeEhlaWdodDsKKyAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWU7CisgICAgaWYgKENURm9udFJlZiBjdEZvbnQgPSBtX3Bs
YXRmb3JtRGF0YS5mb250KCkpIHsKKyAgICAgICAgRm9udFNlcnZpY2VzSU9TIGZvbnRTZXJ2aWNl
KGN0Rm9udCk7CisgICAgICAgIGFzY2VudCA9IGNlaWxmKGZvbnRTZXJ2aWNlLmFzY2VudCgpKTsK
KyAgICAgICAgZGVzY2VudCA9IGNlaWxmKGZvbnRTZXJ2aWNlLmRlc2NlbnQoKSk7CisgICAgICAg
IGxpbmVTcGFjaW5nID0gZm9udFNlcnZpY2UubGluZVNwYWNpbmcoKTsKKyAgICAgICAgbGluZUdh
cCA9IGZvbnRTZXJ2aWNlLmxpbmVHYXAoKTsKKyAgICAgICAgeEhlaWdodCA9IGZvbnRTZXJ2aWNl
LnhIZWlnaHQoKTsKKyAgICAgICAgdW5pdHNQZXJFbSA9IGZvbnRTZXJ2aWNlLnVuaXRzUGVyRW0o
KTsKKyAgICAgICAgZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RG
b250KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ0dGb250UmVmIGNnRm9udCA9IG1fcGxhdGZv
cm1EYXRhLmNnRm9udCgpOworCisgICAgICAgIHVuaXRzUGVyRW0gPSBDR0ZvbnRHZXRVbml0c1Bl
ckVtKGNnRm9udCk7CisKKyAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEu
c2l6ZSgpOworICAgICAgICBhc2NlbnQgPSBscm91bmRmKHNjYWxlRW1Ub1VuaXRzKENHRm9udEdl
dEFzY2VudChjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIGRlc2Nl
bnQgPSBscm91bmRmKC1zY2FsZUVtVG9Vbml0cygtYWJzKENHRm9udEdldERlc2NlbnQoY2dGb250
KSksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKKyAgICAgICAgbGluZUdhcCA9IGxyb3VuZGYo
c2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0TGVhZGluZyhjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBv
aW50U2l6ZSk7CisgICAgICAgIHhIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVp
Z2h0KGNnRm9udCksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworCisgICAgICAgIGxpbmVTcGFj
aW5nID0gYXNjZW50ICsgZGVzY2VudCArIGxpbmVHYXA7CisgICAgICAgIGZhbWlseU5hbWUgPSBh
ZG9wdENGKENHRm9udENvcHlGYW1pbHlOYW1lKGNnRm9udCkpOworICAgIH0KKworICAgIG1fZm9u
dE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNl
dEFzY2VudChhc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsK
KyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7CisgICAgbV9mb250TWV0cmlj
cy5zZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7CisgICAgbV9mb250TWV0cmljcy5zZXRYSGVp
Z2h0KHhIZWlnaHQpOworICAgIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljID0gZm9udEZhbWls
eVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhmYW1pbHlOYW1lLmdldCgpKTsKKworICAgIGlmIChw
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFpc1RleHRPcmllbnRh
dGlvbkZhbGxiYWNrKCkpCisgICAgICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSBmb250SGFzVmVy
dGljYWxHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCkpOworCisgICAgaWYgKCFtX3BsYXRm
b3JtRGF0YS5tX2lzRW1vamkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB0aGlyZE9mU2l6
ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAvIDM7CisgICAgbV9mb250TWV0cmljcy5zZXRBc2Nl
bnQodGhpcmRPZlNpemUpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudCh0aGlyZE9mU2l6
ZSk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKHRoaXJkT2ZTaXplKTsKKyAgICBtX2Zv
bnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKDApOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUNoYXJXaWR0aEluaXQoKQoreworICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKKyAgICBt
X21heENoYXJXaWR0aCA9IDA7CisKKyAgICAvLyBGYWxsYmFjayB0byBhIGNyb3NzLXBsYXRmb3Jt
IGVzdGltYXRlLCB3aGljaCB3aWxsIHBvcHVsYXRlIHRoZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBu
b24tcG9zaXRpdmUuCisgICAgaW5pdENoYXJXaWR0aHMoKTsKK30KKworUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Cit7CisgICAg
aWYgKGlzQ3VzdG9tRm9udCgpKSB7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9u
dERhdGEobV9wbGF0Zm9ybURhdGEpOworICAgICAgICBzY2FsZWRGb250RGF0YS5tX3NpemUgPSBz
Y2FsZWRGb250RGF0YS5tX3NpemUgKiBzY2FsZUZhY3RvcjsKKyAgICAgICAgcmV0dXJuIFNpbXBs
ZUZvbnREYXRhOjpjcmVhdGUoc2NhbGVkRm9udERhdGEsIHRydWUsIGZhbHNlKTsKKyAgICB9CisK
KyAgICBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICogc2NhbGVGYWN0b3I7Cisg
ICAgQ1RGb250U3ltYm9saWNUcmFpdHMgZm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJh
aXRzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0
b3JSZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3Io
bV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7CisgICAgUmV0YWluUHRyPENURm9udFJlZj4gc2NhbGVk
Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlw
dG9yLmdldCgpLCBzaXplLCBudWxscHRyKSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRG
b250RGF0YShzY2FsZWRGb250LmdldCgpLCBzaXplLCBtX3BsYXRmb3JtRGF0YS5pc1ByaW50ZXJG
b250KCksIGZhbHNlLCBmYWxzZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSk7CisKKyAg
ICBpZiAoc2NhbGVkRm9udERhdGEuZm9udCgpKSB7CisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0
YS5tX3N5bnRoZXRpY0JvbGQpCisgICAgICAgICAgICBmb250VHJhaXRzIHw9IGtDVEZvbnRCb2xk
VHJhaXQ7CisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY09ibGlxdWUpCisg
ICAgICAgICAgICBmb250VHJhaXRzIHw9IGtDVEZvbnRJdGFsaWNUcmFpdDsKKworICAgICAgICBD
VEZvbnRTeW1ib2xpY1RyYWl0cyBzY2FsZWRGb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMoc2NhbGVkRm9udERhdGEuZm9udCgpKTsKKyAgICAgICAgc2NhbGVkRm9udERhdGEubV9z
eW50aGV0aWNCb2xkID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250Qm9sZFRyYWl0KSAmJiAhKHNjYWxl
ZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKTsKKyAgICAgICAgc2NhbGVkRm9udERhdGEu
bV9zeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250SXRhbGljVHJhaXQpICYm
ICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisKKyAgICAgICAgcmV0
dXJuIGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgmc2NhbGVkRm9udERhdGEpOworICAg
IH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIFNpbXBsZUZvbnREYXRhOjpjb250
YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCBpbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAg
Q1RGb250UmVmIGN0Rm9udCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsKKyAgICBtX3RyZWF0QXNG
aXhlZFBpdGNoID0gZmFsc2U7CisgICAgaWYgKCFjdEZvbnQpCisgICAgICAgIHJldHVybjsgLy8g
Q1RGb250IGlzIG51bGwgaW4gdGhlIGNhc2Ugb2YgU1ZHIGZvbnRzIGZvciBleGFtcGxlLgorCisg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmdWxsTmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZ1
bGxOYW1lKGN0Rm9udCkpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZSA9
IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RGb250KSk7CisKKyAgICBtX3RyZWF0QXNG
aXhlZFBpdGNoID0gQ0dGb250SXNGaXhlZFBpdGNoKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKSB8
fCAoZnVsbE5hbWUgJiYgKENGU3RyaW5nQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk9z
YWthLU1vbm8iKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFs
VG8gfHwgQ0ZTdHJpbmdDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTVMtUEdvdGhpYyIp
LCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpOworICAg
IGlmIChmYW1pbHlOYW1lICYmIENGU3RyaW5nQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNU
UigiQ291cmllciBOZXciKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFy
ZUVxdWFsVG8pIHsKKyAgICAgICAgLy8gU3BlY2lhbCBjYXNlIENvdXJpZXIgTmV3IHRvIG5vdCBi
ZSB0cmVhdGVkIGFzIGZpeGVkIHBpdGNoLCBhcyB0aGlzIHdpbGwgbWFrZSB1c2Ugb2YgYSBoYWNr
ZWQgc3BhY2Ugd2lkdGggd2hpY2ggaXMgdW5kZXNpcmVhYmxlIGZvciBpUGhvbmUgKHNlZSByZGFy
Oi8vNjI2OTc4MykuCisgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKKyAgICB9
Cit9CisKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGgg
Z2x5cGgpIGNvbnN0Cit7CisgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOworICAgIGlm
IChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWwgfHwgbV9pc0Jyb2tl
bklkZW9ncmFwaEZhbGxiYWNrKSB7CisgICAgICAgIGlmIChwbGF0Zm9ybURhdGEoKS5tX2lzRW1v
amkpCisgICAgICAgICAgICBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhtX3BsYXRmb3JtRGF0
YS5jdEZvbnQoKSwga0NURm9udEhvcml6b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAmYWR2YW5j
ZSwgMSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gcGxh
dGZvcm1EYXRhKCkubV9zaXplOworICAgICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNm
b3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUpOwor
ICAgICAgICAgICAgc3RhdGljIGNvbnN0IENHRm9udFJlbmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0
eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmlu
Z1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVs
UXVhbnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJlZDsKKyAgICAg
ICAgICAgIGlmICghQ0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgp
LmNnRm9udCgpLCAmdHJhbnNmb3JtLCByZW5kZXJpbmdTdHlsZSwgJmdseXBoLCAxLCAmYWR2YW5j
ZSkpIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lID0g
YWRvcHRDRihDR0ZvbnRDb3B5RnVsbE5hbWUocGxhdGZvcm1EYXRhKCkuY2dGb250KCkpKTsKKyAg
ICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjYWNoZSBnbHlwaCB3aWR0aHMgZm9y
ICVAICVmIiwgZnVsbE5hbWUuZ2V0KCksIHBvaW50U2l6ZSk7CisgICAgICAgICAgICAgICAgYWR2
YW5jZS53aWR0aCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAg
ICAgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCks
IGtDVEZvbnRWZXJ0aWNhbE9yaWVudGF0aW9uLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsKKworICAg
IHJldHVybiBhZHZhbmNlLndpZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9pb3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ5ZThiNmU5MDIwM2IwMGFhMGM4MDhiODZkMzdmMjBhYTg4YmM3MTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25JT1MuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPU19oCisjZGVmaW5lIFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uSU9TX2gKKworI2lmIFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQor
CisjaW1wb3J0ICJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5oIgorI2ltcG9ydCA8UXVhcnR6Q29y
ZS9DQUxheWVyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK0BjbGFzcyBXZWJDb3Jl
VGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1NIZWxwZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MgOiBwdWJsaWMgVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24geworcHVibGljOgorICAgIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50Kik7CisgICAgdmlydHVhbCB+VGV4dFRyYWNrUmVw
cmVzZW50YXRpb25JT1MoKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBPVkVSUklERSB7IHJl
dHVybiBtX2xheWVyLmdldCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRTY2FsZShm
bG9hdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnRSZWN0IGJvdW5kcygpIGNvbnN0IE9WRVJS
SURFOworCisgICAgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25DbGllbnQqIGNsaWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKK3ByaXZhdGU6CisgICAgVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25DbGllbnQqIG1fY2xpZW50OworICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2xheWVyOwor
ICAgIFJldGFpblB0cjxXZWJDb3JlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1NIZWxwZXI+IG1f
ZGVsZWdhdGU7Cit9OworCit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpICYmIEVOQUJMRShW
SURFT19UUkFDSykKKworI2VuZGlmIC8vIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9UZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lv
cy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZTM1ZTQyYjg5OWM5
MTVjN2E1MmY4ZWZkODY2MjM2YWYwMmMwNGJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1t
CkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbklPUy5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCisj
aW5jbHVkZSAiV2ViQ29yZVRocmVhZFJ1bi5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbnRlcmZhY2UgV2ViQ29yZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSU9TSGVscGVyIDogTlNPYmplY3QgeworICAgIFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uSU9TKiBfcGFyZW50OworfQorLSAoaWQpaW5pdFdpdGhQYXJlbnQ6KFRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSU9TKilwYXJlbnQ7CitAcHJvcGVydHkgKGFzc2lnbikgVGV4dFRyYWNrUmVw
cmVzZW50YXRpb25JT1MqIHBhcmVudDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkNvcmVU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPU0hlbHBlcgorLSAoaWQpaW5pdFdpdGhQYXJlbnQ6KFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKilwYXJlbnQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYucGFyZW50ID0gcGFy
ZW50OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIHNl
bGYucGFyZW50ID0gbmlsOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRQ
YXJlbnQ6KFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKilwYXJlbnQKK3sKKyAgICBpZiAoX3Bh
cmVudCkKKyAgICAgICAgW19wYXJlbnQtPnBsYXRmb3JtTGF5ZXIoKSByZW1vdmVPYnNlcnZlcjpz
ZWxmIGZvcktleVBhdGg6QCJib3VuZHMiXTsKKworICAgIF9wYXJlbnQgPSBwYXJlbnQ7CisKKyAg
ICBpZiAoX3BhcmVudCkKKyAgICAgICAgW19wYXJlbnQtPnBsYXRmb3JtTGF5ZXIoKSBhZGRPYnNl
cnZlcjpzZWxmIGZvcktleVBhdGg6QCJib3VuZHMiIG9wdGlvbnM6bmlsIGNvbnRleHQ6MF07Cit9
CisKKy0gKFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKilwYXJlbnQKK3sKKyAgICByZXR1cm4g
X3BhcmVudDsKK30KKworLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAq
KWtleVBhdGggb2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5n
ZSBjb250ZXh0Oih2b2lkICopY29udGV4dAoreworICAgIFVOVVNFRF9QQVJBTShjaGFuZ2UpOwor
ICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAg
aWYgKF9wYXJlbnQgJiYgW2tleVBhdGggaXNFcXVhbDpAImJvdW5kcyJdICYmIG9iamVjdCA9PSBf
cGFyZW50LT5wbGF0Zm9ybUxheWVyKCkpCisgICAgICAgICAgICBfcGFyZW50LT5jbGllbnQoKS0+
dGV4dFRyYWNrUmVwcmVzZW50YXRpb25Cb3VuZHNDaGFuZ2VkKF9wYXJlbnQtPmJvdW5kcygpKTsK
KyAgICB9KTsKK30KKworLSAoaWQpYWN0aW9uRm9yTGF5ZXI6KENBTGF5ZXIgKilsYXllciBmb3JL
ZXk6KE5TU3RyaW5nICopZXZlbnQKK3sKKyAgICBVTlVTRURfUEFSQU0obGF5ZXIpOworICAgIFVO
VVNFRF9QQVJBTShldmVudCk7CisgICAgLy8gUmV0dXJuaW5nIGEgTlNOdWxsIGZyb20gdGhpcyBk
ZWxlZ2F0ZSBtZXRob2QgZGlzYWJsZXMgYWxsIGltcGxpY2l0IENBTGF5ZXIgYWN0aW9ucy4KKyAg
ICByZXR1cm4gW05TTnVsbCBudWxsXTsKK30KKworQGVuZAorCitQYXNzT3duUHRyPFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uPiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbjo6Y3JlYXRlKFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUyhjbGllbnQpKTsKK30KKworVGV4dFRyYWNrUmVw
cmVzZW50YXRpb25JT1M6OlRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKFRleHRUcmFja1JlcHJl
c2VudGF0aW9uQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBt
X2xheWVyKGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSkpCisgICAgLCBtX2RlbGVnYXRl
KGFkb3B0TlMoW1tXZWJDb3JlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1NIZWxwZXIgYWxsb2Nd
IGluaXRXaXRoUGFyZW50OnRoaXNdKSkKK3sKKyAgICBbbV9sYXllci5nZXQoKSBzZXREZWxlZ2F0
ZTptX2RlbGVnYXRlLmdldCgpXTsKKyAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50c0dyYXZp
dHk6a0NBR3Jhdml0eUJvdHRvbV07Cit9CisKK1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TOjp+
VGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MoKQoreworICAgIFttX2xheWVyLmdldCgpIHNldERl
bGVnYXRlOm5pbF07CisgICAgW21fZGVsZWdhdGUuZ2V0KCkgc2V0UGFyZW50OjBdOworfQorCit2
b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TOjp1cGRhdGUoKQoreworICAgIGlmIChSZWZQ
dHI8SW1hZ2U+IHJlcHJlc2VudGF0aW9uID0gbV9jbGllbnQtPmNyZWF0ZVRleHRUcmFja1JlcHJl
c2VudGF0aW9uSW1hZ2UoKSkKKyAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlk
KXJlcHJlc2VudGF0aW9uLT5nZXRDR0ltYWdlUmVmKCldOworfQorCit2b2lkIFRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSU9TOjpzZXRDb250ZW50U2NhbGUoZmxvYXQgc2NhbGUpCit7CisgICAgW21f
bGF5ZXIuZ2V0KCkgc2V0Q29udGVudHNTY2FsZTpzY2FsZV07Cit9CisKK0ludFJlY3QgVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25JT1M6OmJvdW5kcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QoRmxvYXRSZWN0KFttX2xheWVyLmdldCgpIGJvdW5kc10pKTsKK30KKworI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMuaAppbmRleCAyNDgyYjU5M2Ji
OGVlMjhhMmMwMDU4MjliNTNiMzcxYzkyNzY3OGIyLi4wMTNjMWU1NGRmOGQ2YmViM2M1YjM3MDky
YmRjNjJjZTcxM2NkNTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29sb3JNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29sb3JNYWMuaApAQCAtMzEsMTMgKzMxLDE3IEBACiAKICNpbmNsdWRlICJDb2xvci5o
IgogCisjaWYgIVBMQVRGT1JNKElPUykKIE9CSkNfQ0xBU1MgTlNDb2xvcjsKKyNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBUaGVz
ZSBmdW5jdGlvbnMgYXNzdW1lIE5TQ29sb3JzIGFyZSBpbiBEZXZpY2VSR0IgY29sb3JzcGFjZQog
ICAgIENvbG9yIGNvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqKTsKICAgICBOU0NvbG9yICpuc0Nv
bG9yKGNvbnN0IENvbG9yJik7CisjZW5kaWYKIAogICAgIGJvb2wgdXNlc1Rlc3RNb2RlRm9jdXNS
aW5nQ29sb3IoKTsKICAgICB2b2lkIHNldFVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKGJvb2wp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAppbmRleCA0OTcxZjRkYTIzNjFlYTZlMzQ3ODMz
OTc4ODkyMTdmMTQ2NTBmMjljLi42MDM5MTlmODlmNzQ4NWU5NWQwODU0ZDYwY2I2ZmE5MDFiZmEz
Nzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29t
cGxleFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcApAQCAtMzEsNyArMzEsMTEgQEAKICNp
bmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNp
bmNsdWRlICJUZXh0UnVuLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29y
ZVRleHQvQ29yZVRleHQuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCkBAIC01NzIsNiArNTc2
LDkgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2Vz
KCkKICAgICAgICAgQ29tcGxleFRleHRSdW4mIGNvbXBsZXhUZXh0UnVuID0gKm1fY29tcGxleFRl
eHRSdW5zW3JdOwogICAgICAgICB1bnNpZ25lZCBnbHlwaENvdW50ID0gY29tcGxleFRleHRSdW4u
Z2x5cGhDb3VudCgpOwogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBj
b21wbGV4VGV4dFJ1bi5mb250RGF0YSgpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgYm9v
bCBpc0Vtb2ppID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1faXNFbW9qaTsKKyNlbmRpZgog
CiAgICAgICAgIC8vIFJlcHJlc2VudCB0aGUgaW5pdGlhbCBhZHZhbmNlIGZvciBhIHRleHQgcnVu
IGJ5IGFkanVzdGluZyB0aGUgYWR2YW5jZQogICAgICAgICAvLyBvZiB0aGUgbGFzdCBnbHlwaCBv
ZiB0aGUgcHJldmlvdXMgdGV4dCBydW4gaW4gdGhlIGdseXBoIGJ1ZmZlci4KQEAgLTYyMCw2ICs2
MjcsMTAgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFu
Y2VzKCkKICAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNl
KGNoKTsKICAgICAgICAgICAgIENHR2x5cGggZ2x5cGggPSB0cmVhdEFzU3BhY2UgPyBmb250RGF0
YS0+c3BhY2VHbHlwaCgpIDogZ2x5cGhzW2ldOwogICAgICAgICAgICAgQ0dTaXplIGFkdmFuY2Ug
PSB0cmVhdEFzU3BhY2UgPyBDR1NpemVNYWtlKHNwYWNlV2lkdGgsIGFkdmFuY2VzW2ldLmhlaWdo
dCkgOiBhZHZhbmNlc1tpXTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICBpZiAoaXNF
bW9qaSAmJiBhZHZhbmNlLndpZHRoKQorICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBm
b250RGF0YS0+d2lkdGhGb3JHbHlwaChnbHlwaCk7CisjZW5kaWYKIAogICAgICAgICAgICAgaWYg
KGNoID09ICdcdCcgJiYgbV9ydW4uYWxsb3dUYWJzKCkpCiAgICAgICAgICAgICAgICAgYWR2YW5j
ZS53aWR0aCA9IG1fZm9udC50YWJXaWR0aCgqZm9udERhdGEsIG1fcnVuLnRhYlNpemUoKSwgbV9y
dW4ueFBvcygpICsgbV90b3RhbFdpZHRoICsgd2lkdGhTaW5jZUxhc3RDb21taXQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlckNvcmVUZXh0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCmluZGV4IDQ5NjBhNGQ0ZjA2YTM3YjYx
ZWQwNjQ2N2IzMmZlYzA2MDliZjQyNmIuLjQ0YzAyOTRmZDc3YzBmZjliMjhhMzgxMWZmNzE4YjBj
Y2UxZjAxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KQEAg
LTMxLDcgKzMxLDExIEBACiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDb3JlVGV4
dC9Db3JlVGV4dC5oPgorI2Vsc2UKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxp
Y2F0aW9uU2VydmljZXMuaD4KKyNlbmRpZgogCiBAaW50ZXJmYWNlIFdlYkNhc2NhZGVMaXN0IDog
TlNBcnJheSB7CiAgICAgQHByaXZhdGUKQEAgLTI2NiwxMiArMjcwLDE3IEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY3AsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNo
ZSgpLT5nZXRDYWNoZWRGb250RGF0YShtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1l
LmdldCgpLCBmYWxzZSwgRm9udENhY2hlOjpEb05vdFJldGFpbikuZ2V0KCk7CisjaWYgIVBMQVRG
T1JNKElPUykKICAgICAgICAgICAgICAgICAgICAgLy8gQ29yZSBUZXh0IG1heSBoYXZlIHVzZWQg
YSBmb250IHRoYXQgaXMgbm90IGtub3duIHRvIE5TRm9udE1hbmFnZXIuIEluIHRoYXQgY2FzZSwg
ZmFsbCBiYWNrIG9uCiAgICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSBmb250IGFzIHJl
dHVybmVkLCBldmVuIHRob3VnaCBpdCBtYXkgbm90IGhhdmUgdGhlIGJlc3QgTlNGb250UmVuZGVy
aW5nTW9kZS4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFydW5Gb250RGF0YSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBydW5Gb250UGxhdGZvcm1EYXRhKChO
U0ZvbnQgKilydW5Gb250LCBDVEZvbnRHZXRTaXplKHJ1bkZvbnQpLCBtX2ZvbnQuZm9udERlc2Ny
aXB0aW9uKCkudXNlUHJpbnRlckZvbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBydW5G
b250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgmcnVuRm9udFBsYXRmb3Jt
RGF0YSwgRm9udENhY2hlOjpEb05vdFJldGFpbikuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAg
IH0KKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBKdXN0IGFzc2VydCBmb3Ig
bm93LCB1bnRpbCB3ZSBjYW4gZGV2aXNlIGEgYmV0dGVyIGZpeCB0aGF0IHdvcmtzIHdpdGggaU9T
LgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQocnVuRm9udERhdGEpOworI2VuZGlmCiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgcnVu
Rm9udERhdGEgIT0gbV9mb250LnByaW1hcnlGb250KCkpCiAgICAgICAgICAgICAgICAgICAgIG1f
ZmFsbGJhY2tGb250cy0+YWRkKHJ1bkZvbnREYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0KaW5kZXggMmY3MzMxNGZh
MGI5ZGM0YWRjM2QyNWQ0MzlhZGRhMThhYTkxYjc3OS4uYWM5YmMzMWY5ZGMzMzNjMDUyNWY3ODRi
NjNlMTk1OGIxNjliMTgyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0KQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAKKyNpZiAhUExBVEZPUk0oSU9T
KQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1F
X0FTX0NHR0VPTUVUUllfVFlQRVMKQEAgLTQzLDMgKzQ1LDUgQEAgRmxvYXRQb2ludDo6b3BlcmF0
b3IgTlNQb2ludCgpIGNvbnN0CiAjZW5kaWYKIAogfQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9h
dFJlY3RNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRS
ZWN0TWFjLm1tCmluZGV4IDFkNmIwNDU3ODg3ZDIxYjg5MjM0ODZhMjYyZjEzNzM1OWFmZThiNmYu
LjllZmY5YjNhYjY3ODYwNDQ0YTE2ZDllMWE3NzRhYTA4MWIyZGEzZTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFJlY3RNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1hYy5tbQpAQCAt
MjksNiArMjksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogCiBG
bG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBOU1JlY3QmIHIpIDogbV9sb2NhdGlvbihyLm9yaWdp
biksIG1fc2l6ZShyLnNpemUpCkBAIC00MSw1ICs0Miw2IEBAIEZsb2F0UmVjdDo6b3BlcmF0b3Ig
TlNSZWN0KCkgY29uc3QKIH0KIAogI2VuZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0
U2l6ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNp
emVNYWMubW0KaW5kZXggMDFlZmJlOTFkYzQ4NTkzMGUxOTI5Mzk4MjJkZWE5YTMxNzRkZGYxYi4u
MTQwMWJmY2FlMWE4ZmFmYmIxNjkyY2I4ZmQ1MTgxMTczMTQxYTEzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tCkBAIC0y
OSw2ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFQTEFURk9STShJT1Mp
CiAjaWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiAKIEZs
b2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IE5TU2l6ZSYgcykgOiBtX3dpZHRoKHMud2lkdGgpLCBt
X2hlaWdodChzLmhlaWdodCkKQEAgLTQxLDUgKzQyLDYgQEAgRmxvYXRTaXplOjpvcGVyYXRvciBO
U1NpemUoKSBjb25zdAogfQogCiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENh
Y2hlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNo
ZU1hYy5tbQppbmRleCA1OTFmZTE2NzYwMjg1ZGY2NGRjZWU3ZWNlNmU3ODA3OTVhMDBjOTY2Li43
OWNmNWMxYWNiNmNlNjU2OTFlYzcyNzU2MmI1YzRmNmEwN2M5OGFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KQEAgLTMw
LDYgKzMwLDggQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRm9udENhY2hlLmgiCiAK
KyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJTaW1wbGVG
b250RGF0YS5oIgogI2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0YS5oIgpAQCAtMjIwLDMgKzIyMiw1
IEBAIFBhc3NPd25QdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCmluZGV4IGUw
OTM2ZjNiOWI0NWE2OTk4MjNhYmQ2MDQ0N2ZhYjkwMjhhZWRkODIuLjgyYWNmZmE4NWYxZjA0YzYy
YjQ5NzE3NjY1Yjc1ODcyZmJhMjI3ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCkBAIC03Nyw3
ICs3Nyw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50CiAgICAgcmV0dXJuIGluaXRpYWxBZHZh
bmNlOwogfQogCi12b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVy
IGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4K
ICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTg2LDExICs4NiwxMyBAQCB2b2lkIEZv
bnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgRgogCiAgICAgLy8gV2UgY291bGRuJ3QgZ2VuZXJhdGUgYW55IGdseXBo
cyBmb3IgdGhlIHJ1bi4gIEdpdmUgdXAuCiAgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIERyYXcgdGhlIGds
eXBoIGJ1ZmZlciBub3cgYXQgdGhlIHN0YXJ0aW5nIHBvaW50IHJldHVybmVkIGluIHN0YXJ0WC4K
ICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoc3RhcnRYLCBwb2ludC55KCkpOwogICAgIGRyYXdH
bHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBzdGFydFBvaW50KTsKKworICAg
IHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAogdm9pZCBGb250OjpkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdApAQCAtMTQxLDYgKzE0MywxMCBAQCBjb25z
dCBTaW1wbGVGb250RGF0YSogRm9udDo6Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1
ZW5jZShjb25zdCBVQ2hhciogYwogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIGZvciAoY29uc3Qg
Rm9udERhdGEqIGZvbnREYXRhID0gZm9udERhdGFBdCgwKTsgZm9udERhdGE7IGZvbnREYXRhID0g
Zm9udERhdGFBdCgrK2kpKSB7CiAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVG
b250RGF0YSA9IGZvbnREYXRhLT5mb250RGF0YUZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAm
JiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAmJiBzaW1wbGVGb250RGF0YS0+c2hvdWxkTm90QmVV
c2VkRm9yQXJhYmljKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgogICAgICAgICBp
ZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KSB7CiAgICAgICAgICAgICBpZiAoc2ltcGxlRm9u
dERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaXNDSktJZGVvZ3JhcGhPclN5bWJvbChiYXNlQ2hhcmFjdGVyKSAmJiAh
c2ltcGxlRm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmNwcAppbmRleCBmYTIzNTU3Y2ZmNjU2ZDAwODk3NDQ5MzQ4NWU1YjNhYWE5NjNiYzc3
Li4zNzZlMGQxMjRmZTUyODg1YjgyYjYyOWQ2NzdmNWFhMTExMmJkYzc0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuY3BwCkBAIC0yMyw3ICsyMywxMSBAQAogCiAjaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lmICFQTEFURk9STShJ
T1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+
CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ZvbnRNYWMubW0KaW5kZXggOThmYjc4Y2QwMjgzMDdjN2JlMjYyZDAxYzEyMTc2
NjA5Y2E4YmM3MC4uYWY2Mjg3ZjY2MmRmYTE1M2YxNTQ4MjYwMWI3NGVhNDQ2Yzg0YjI1OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KQEAg
LTEyNCwxMiArMTI0LDEyIEBAIHN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0
aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBTCiAKICAgICBbY2F0YWxv
ZyBkcmF3R2x5cGhzOmdseXBocyBhdFBvc2l0aW9uczpwb3NpdGlvbnMuZGF0YSgpIGluQ29udGV4
dDpjb250ZXh0IHdpdGhGb250OmN0Rm9udCBjb3VudDpjb3VudCBzdHlsZVByZXNldE5hbWU6QCJf
VUlLaXROZXdMZXR0ZXJwcmVzc1N0eWxlIiBzdHlsZUNvbmZpZ3VyYXRpb246c3R5bGVDb25maWd1
cmF0aW9uIGZvcmVncm91bmRDb2xvcjpDR0NvbnRleHRHZXRGaWxsQ29sb3JBc0NvbG9yKGNvbnRl
eHQpXTsKICNlbHNlCi1VTlVTRURfUEFSQU0ocG9pbnQpOwotVU5VU0VEX1BBUkFNKGZvbnQpOwot
VU5VU0VEX1BBUkFNKGNvbnRleHQpOwotVU5VU0VEX1BBUkFNKGdseXBocyk7Ci1VTlVTRURfUEFS
QU0oYWR2YW5jZXMpOwotVU5VU0VEX1BBUkFNKGNvdW50KTsKKyAgICBVTlVTRURfUEFSQU0ocG9p
bnQpOworICAgIFVOVVNFRF9QQVJBTShmb250KTsKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7
CisgICAgVU5VU0VEX1BBUkFNKGdseXBocyk7CisgICAgVU5VU0VEX1BBUkFNKGFkdmFuY2VzKTsK
KyAgICBVTlVTRURfUEFSQU0oY291bnQpOwogI2VuZGlmCiB9CiAKQEAgLTE3OSw3ICsxNzksNyBA
QCBzdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBjb25zdCBTaW1wbGVGb250RGF0YQogICAgIH0KIH0KIAotdm9pZCBGb250OjpkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBGb250OjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSBjb25zdAogewogICAgIGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpOwogICAgIGlmICghcGxh
dGZvcm1EYXRhLnNpemUoKSkKQEAgLTIyMSwxMSArMjIxLDEzIEBAIHZvaWQgRm9udDo6ZHJhd0ds
eXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
LCBjb25zCiAgICAgICAgIGNoYW5nZUZvbnRTbW9vdGhpbmcgPSB0cnVlOwogICAgIH0KIAorI2lm
ICFQTEFURk9STShJT1MpCiAgICAgYm9vbCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcg
PSBmYWxzZTsKICAgICBpZiAoY2hhbmdlRm9udFNtb290aGluZykgewogICAgICAgICBvcmlnaW5h
bFNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB3a0NHQ29udGV4dEdldFNob3VsZFNtb290aEZvbnRz
KGNnQ29udGV4dCk7CiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29u
dGV4dCwgc2hvdWxkU21vb3RoRm9udHMpOwogICAgIH0KKyNlbmRpZgogCiAjaWYgIVBMQVRGT1JN
KElPUykKICAgICBOU0ZvbnQqIGRyYXdGb250OwpAQCAtMjQ2LDkgKzI0OCwzOCBAQCB2b2lkIEZv
bnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgY29ucwogICAgIENHQ29udGV4dFNldEZvbnQoY2dDb250ZXh0LCBwbGF0Zm9y
bURhdGEuY2dGb250KCkpOwogCiAgICAgYm9vbCB1c2VMZXR0ZXJwcmVzc0VmZmVjdCA9IHNob3Vs
ZFVzZUxldHRlcnByZXNzRWZmZWN0KCpjb250ZXh0KTsKKyAgICBGbG9hdFBvaW50IHBvaW50ID0g
YW5jaG9yUG9pbnQ7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGZsb2F0IGZvbnRTaXplID0gcGxh
dGZvcm1EYXRhLnNpemUoKTsKICAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSB1c2VMZXR0
ZXJwcmVzc0VmZmVjdCB8fCBwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSA/IENHQWZm
aW5lVHJhbnNmb3JtSWRlbnRpdHkgOiBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShmb250U2l6
ZSwgZm9udFNpemUpOworICAgIGlmIChwbGF0Zm9ybURhdGEubV9pc0Vtb2ppKSB7CisgICAgICAg
IGlmICghY29udGV4dC0+ZW1vamlEcmF3aW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIC8vIE1pbWljIHRoZSBwb3NpdGlvaW5pbmcgb2Ygbm9uLWJpdG1hcCBnbHlw
aHMsIHdoaWNoIGFyZSBub3Qgc3VicGl4ZWwtcG9zaXRpb25lZC4KKyAgICAgICAgcG9pbnQuc2V0
WShjZWlsZihwb2ludC55KCkpKTsKKworICAgICAgICAvLyBFbW9qaSBnbHlwaHMgc25hcCB0byB0
aGUgQ1NTIHBpeGVsIGdyaWQuCisgICAgICAgIHBvaW50LnNldFgoZmxvb3JmKHBvaW50LngoKSkp
OworCisgICAgICAgIC8vIEVtb2ppIGdseXBocyBhcmUgb2Zmc2V0IG9uZSBDU1MgcGl4ZWwgdG8g
dGhlIHJpZ2h0LgorICAgICAgICBwb2ludC5tb3ZlKDEsIDApOworCisgICAgICAgIC8vIEVtb2pp
IGdseXBocyBhcmUgb2Zmc2V0IHZlcnRpY2FsbHkgYmFzZWQgb24gZm9udCBzaXplLgorICAgICAg
ICBmbG9hdCB5ID0gcG9pbnQueSgpOworICAgICAgICBpZiAoZm9udFNpemUgPD0gMTUpIHsKKyAg
ICAgICAgICAgIC8vIFVuZG8gQ29yZSBUZXh0J3MgeSBhZGp1c3RtZW50LgorICAgICAgICAgICAg
c3RhdGljIGZsb2F0IHlBZGp1c3RtZW50RmFjdG9yID0gaW9zRXhlY3V0YWJsZVdhc0xpbmtlZE9u
T3JBZnRlclZlcnNpb24od2tJT1NTeXN0ZW1WZXJzaW9uXzZfMCkgPyAuMTkgOiAuMTsKKyAgICAg
ICAgICAgIHBvaW50LnNldFkoZmxvb3JmKHkgLSB5QWRqdXN0bWVudEZhY3RvciAqIChmb250U2l6
ZSArIDIpICsgMikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGZvbnRTaXpl
IDwgMjYpCisgICAgICAgICAgICAgICAgeSAtPSAuMzVmICogZm9udFNpemUgLSAxMDsKKworICAg
ICAgICAgICAgLy8gVW5kbyBDb3JlIFRleHQncyB5IGFkanVzdG1lbnQuCisgICAgICAgICAgICBz
dGF0aWMgZmxvYXQgeUFkanVzdG1lbnQgPSBpb3NFeGVjdXRhYmxlV2FzTGlua2VkT25PckFmdGVy
VmVyc2lvbih3a0lPU1N5c3RlbVZlcnNpb25fNl8wKSA/IDMuOCA6IDI7CisgICAgICAgICAgICBw
b2ludC5zZXRZKGZsb29yZih5IC0geUFkanVzdG1lbnQpKTsKKyAgICAgICAgfQorICAgIH0KICNl
bHNlCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JZGVu
dGl0eTsKICAgICBpZiAoZHJhd0ZvbnQgJiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFwRm9u
dCgpKQpAQCAtMzAzLDcgKzMzNCwxMSBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29ucwogICAgICAg
ICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3Qg
YXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgog
ICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWln
aHQoKSAqIChjb250ZXh0LT5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKICAg
ICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFk
b3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0
aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUds
eXBocyk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZz
ZXQpCisjZWxzZQorICAgICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCAmJiAhcGxhdGZvcm1E
YXRhLm1faXNFbW9qaSkKKyNlbmRpZgogICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhGbG9hdFBvaW50KHNoYWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4
dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgc3RhdGljX2Nh
c3Q8Y29uc3QgQ0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMp
OwogICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBmaWxsQ29sb3JTcGFj
ZSk7CiAgICAgfQpAQCAtMzEyLDcgKzM0NywxMSBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29ucwog
ICAgICAgICBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwg
Y2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0IENH
U2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKICAgICBlbHNl
CiAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwg
Z2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlw
aEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUdseXBocyk7CisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKKyNlbHNlCisgICAgaWYgKHN5bnRoZXRpY0Jv
bGRPZmZzZXQgJiYgIXBsYXRmb3JtRGF0YS5tX2lzRW1vamkpCisjZW5kaWYKICAgICAgICAgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRP
ZmZzZXQsIHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZy
b20pLCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9t
KSksIG51bUdseXBocyk7CiAKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFj
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VUcmVl
Tm9kZU1hYy5jcHAKaW5kZXggYzBlNTRjYjQ4OThkYjc5NjA3OWQ5ZDI5MWNhNDcxN2Y1MjAwNjVj
NS4uNjEyYjQ1M2ZlZmE1YjNlMTY1NzYxZmM0ZGE2ZDNhNzNmZjU1MmIwZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFj
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdl
VHJlZU5vZGVNYWMuY3BwCkBAIC0zMiw3ICszMiwxMyBAQAogI2luY2x1ZGUgIkZvbnQuaCIKICNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZh
Y2UuaCIKKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dG
b250VW5pY29kZVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxDb3JlVGV4dC9DVEZvbnRQcml2Lmg+Cisj
aW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTYzLDcgKzY5LDE2IEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBiCiAKICAgICBW
ZWN0b3I8Q0dHbHlwaCwgNTEyPiBnbHlwaHMoYnVmZmVyTGVuZ3RoKTsKICAgICBpZiAoIXNob3Vs
ZFVzZUNvcmVUZXh0KGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpIHsKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgICAgICB3a0dldEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpLmNnRm9udCgpLCBidWZmZXIsIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0
aCk7CisjZWxzZQorICAgICAgICAvLyBXZSBwYXNzIGluIGVpdGhlciAyNTYgb3IgNTEyIFVURi0x
NiBjaGFyYWN0ZXJzOiAyNTYgZm9yIFUrRkZGRiBhbmQgbGVzcywgNTEyIChkb3VibGUgY2hhcmFj
dGVyIHN1cnJvZ2F0ZXMpCisgICAgICAgIC8vIGZvciBVKzEwMDAwIGFuZCBhYm92ZS4gSXQgaXMg
aW5kZWVkIHBvc3NpYmxlIHRvIGdldCBiYWNrIDUxMiBnbHlwaHMgYmFjayBmcm9tIHRoZSBBUEks
IHNvIHRoZSBnbHlwaCBidWZmZXIKKyAgICAgICAgLy8gd2UgcGFzcyBpbiBtdXN0IGJlIDUxMi4g
SWYgd2UgZ2V0IGJhY2sgbW9yZSB0aGFuIDI1NiBnbHlwaHMgdGhvdWdoIHdlJ2xsIGlnbm9yZSBh
bGwgdGhlIG9uZXMgYWZ0ZXIgMjU2LAorICAgICAgICAvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVu
IGFzIHRoZSBvbmx5IHRpbWUgd2UgcGFzcyBpbiA1MTIgY2hhcmFjdGVycyBpcyB3aGVuIHRoZXkg
YXJlIHN1cnJvZ2F0ZXMuCisgICAgICAgIC8vIEZJWE1FOiBVc2Ugd2tHZXRHbHlwaHNGb3JDaGFy
YWN0ZXJzKCkgaW5zdGVhZCBvZiBDR0ZvbnRHZXRHbHlwaHNGb3JVbmljaGFycygpIG9uY2Ugd2Ug
dXBkYXRlIFdlYktpdCBTeXN0ZW0gSW50ZXJmYWNlIG9uIGlPUy4KKyAgICAgICAgQ0dGb250R2V0
R2x5cGhzRm9yVW5pY2hhcnMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBidWZm
ZXIsIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisjZW5kaWYKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIWdseXBo
c1tpXSkKICAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAw
LCAwKTsKQEAgLTE0NCw2ICsxNTksNyBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVG
b250RGF0YSogcnVuU2ltcGxlID0gZm9udERhdGEtPmdldENvbXBvc2l0ZUZvbnRSZWZlcmVuY2VG
b250RGF0YSgoTlNGb250ICopcnVuRm9udCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChydW5T
aW1wbGUpIHsKQEAgLTE1OCw2ICsxNzQsNyBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0K
aW5kZXggOTZhNjMxOTRlYWU2MDYzN2MzNDZlNDg2NjBkY2NlODc2NzNjNjI2Yy4uZTQ0YTEzZjRh
NTcwODNlYTlkN2I3MzAzYTNhZDFlMjZiMWRkNjc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5t
bQpAQCAtMjgsNiArMjgsOSBAQAogI2lmIFVTRSgzRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNESU9TLmgiCisjZW5kaWYKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAK
QEAgLTM5LDggKzQyLDE1IEBACiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaWYgUExB
VEZPUk0oSU9TKQorI2ltcG9ydCA8T3BlbkdMRVMvRVMyL2dsZXh0Lmg+CisjaW1wb3J0IDxPcGVu
R0xFUy9FQUdMLmg+CisjaW1wb3J0IDxPcGVuR0xFUy9FQUdMRHJhd2FibGUuaD4KKyNpbXBvcnQg
PFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2Vsc2UKICNpbmNsdWRlIDxPcGVuR0wvQ0dMUmVu
ZGVyZXJzLmg+CiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CisjZW5kaWYKICNpbmNsdWRlICJXZWJH
TExheWVyLmgiCiAjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0Fy
cmF5QnVmZmVyLmg+CkBAIC02MSw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICB+R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKCkgeyB9CiB9OwogCisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyB2b2lk
IHNldFBpeGVsRm9ybWF0KFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4mIGF0dHJpYnMs
IGludCBjb2xvckJpdHMsIGludCBkZXB0aEJpdHMsIGJvb2wgYWNjZWxlcmF0ZWQsIGJvb2wgc3Vw
ZXJzYW1wbGUsIGJvb2wgY2xvc2VzdCwgYm9vbCBhbnRpYWxpYXMpCiB7CiAgICAgYXR0cmlicy5j
bGVhcigpOwpAQCAtOTMsNiArMTA0LDcgQEAgc3RhdGljIHZvaWQgc2V0UGl4ZWxGb3JtYXQoVmVj
dG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPiYgYXR0cmlicywgaW50IGNvbG9yQmkKICAgICAg
ICAgCiAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1
dGU+KDApKTsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiBQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiB7CkBAIC0xMDcsNiArMTE5LDkgQEAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICA6IG1fY3VycmVudFdpZHRoKDApCiAgICAgLCBtX2N1
cnJlbnRIZWlnaHQoMCkKICAgICAsIG1fY29udGV4dE9iaigwKQorI2lmIFBMQVRGT1JNKElPUykK
KyAgICAsIG1fY29tcGlsZXIoU0hfRVNTTF9PVVRQVVQpCisjZW5kaWYKICAgICAsIG1fYXR0cnMo
YXR0cnMpCiAgICAgLCBtX3RleHR1cmUoMCkKICAgICAsIG1fY29tcG9zaXRvclRleHR1cmUoMCkK
QEAgLTEyMiw2ICsxMzcsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICBVTlVTRURf
UEFSQU0oaG9zdFdpbmRvdyk7CiAgICAgVU5VU0VEX1BBUkFNKHJlbmRlclN0eWxlKTsKIAorI2lm
IFBMQVRGT1JNKElPUykKKyAgICBtX2NvbnRleHRPYmogPSBbW0VBR0xDb250ZXh0IGFsbG9jXSBp
bml0V2l0aEFQSTprRUFHTFJlbmRlcmluZ0FQSU9wZW5HTEVTMl07CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisjZWxzZQogICAgIFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0
cmliczsKICAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9iaiA9IDA7CiAgICAgR0xp
bnQgbnVtUGl4ZWxGb3JtYXRzID0gMDsKQEAgLTE4NCwxMiArMjAzLDE2IEBAIEdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycywgSG9zdFdpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CisjZW5k
aWYgLy8gIVBMQVRGT1JNKElPUykKICAgICAKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAog
ICAgIC8vIENyZWF0ZSB0aGUgV2ViR0xMYXllcgogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwogICAgICAgICBtX3dlYkdMTGF5ZXIgPSBhZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10g
aW5pdFdpdGhHcmFwaGljc0NvbnRleHQzRDp0aGlzXSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
ICAgICBbbV93ZWJHTExheWVyLmdldCgpIHNldE9wYXF1ZTowXTsKKyNlbmRpZgogI2lmbmRlZiBO
REVCVUcKICAgICAgICAgW21fd2ViR0xMYXllci5nZXQoKSBzZXROYW1lOkAiV2ViR0wgTGF5ZXIi
XTsKICNlbmRpZiAgICAKQEAgLTE5OCw2ICsyMjEsOSBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RX
aQogICAgIGlmICh1c2VNdWx0aXNhbXBsaW5nKQogICAgICAgICA6OmdsRW5hYmxlKEdMX01VTFRJ
U0FNUExFKTsKICAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgOjpnbEdlblJlbmRlcmJ1ZmZl
cnMoMSwgJm1fdGV4dHVyZSk7CisjZWxzZQogICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gcmVu
ZGVyIGludG8KICAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAgICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CkBAIC0yMTIsNiArMjM4LDcgQEAg
R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVApOwogICAgIDo6Z2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUCk7CiAgICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworI2VuZGlmCiAgICAgCiAgICAgLy8gY3JlYXRl
IGFuIEZCTwogICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKQEAgLTI1Myw4
ICsyODAsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKIAogICAgIG1fY29tcGlsZXIuc2V0
UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKICAgICAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
IDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CiAgICAgOjpnbEVuYWJs
ZShHTF9QT0lOVF9TUFJJVEUpOworI2VuZGlmCiAKICAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAw
LCAwKTsKIH0KQEAgLTI2Miw5ICsyOTEsMTUgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKIEdy
YXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogewogICAgIGlmIChtX2NvbnRl
eHRPYmopIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV90ZXh0dXJlKTsKKyAgICAg
ICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2Vs
c2UKICAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICAgICAg
OjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogICAgICAgICA6OmdsRGVsZXRlVGV4
dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlmCiAgICAgICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcykgewogICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQo
MSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CiAgICAgICAgICAgICBpZiAobV9hdHRycy5z
dGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCkBAIC0yNzUsMjIgKzMxMCw1MSBAQCBHcmFwaGljc0Nv
bnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICAgICAgICAgICAgICA6OmdsRGVsZXRl
UmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwogICAgICAgICB9CiAg
ICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgICAgIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDowXTsKKyAgICAg
ICAgW3N0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obV9jb250ZXh0T2JqKSByZWxlYXNlXTsKKyNl
bHNlCiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwogICAgICAgICBDR0xEZXN0cm95
Q29udGV4dChtX2NvbnRleHRPYmopOworI2VuZGlmCiAgICAgfQogfQogCisjaWYgUExBVEZPUk0o
SU9TKQorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21E
cmF3YWJsZShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgW21fd2Vi
R0xMYXllci5nZXQoKSBzZXRCb3VuZHM6Q0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KV07
CisgICAgcmV0dXJuIFttX2NvbnRleHRPYmogcmVuZGVyYnVmZmVyU3RvcmFnZTpHTF9SRU5ERVJC
VUZGRVIgZnJvbURyYXdhYmxlOnN0YXRpY19jYXN0PE5TT2JqZWN0PEVBR0xEcmF3YWJsZT4qPiht
X3dlYkdMTGF5ZXIuZ2V0KCkpXTsKK30KKyNlbmRpZgorCiBib29sIEdyYXBoaWNzQ29udGV4dDNE
OjptYWtlQ29udGV4dEN1cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKFtFQUdMQ29udGV4
dCBjdXJyZW50Q29udGV4dF0gIT0gbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm4gW0VBR0xD
b250ZXh0IHNldEN1cnJlbnRDb250ZXh0OnN0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obV9jb250
ZXh0T2JqKV07CisjZWxzZQogICAgIENHTENvbnRleHRPYmogY3VycmVudENvbnRleHQgPSBDR0xH
ZXRDdXJyZW50Q29udGV4dCgpOwogICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBtX2NvbnRleHRP
YmopCiAgICAgICAgIHJldHVybiBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopID09
IGtDR0xOb0Vycm9yOworI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBQTEFURk9S
TShJT1MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZsdXNoKCk7CisgICAgOjpnbEJpbmRSZW5kZXJidWZm
ZXIoR0xfUkVOREVSQlVGRkVSLCBtX3RleHR1cmUpOworICAgIFtzdGF0aWNfY2FzdDxFQUdMQ29u
dGV4dCo+KG1fY29udGV4dE9iaikgcHJlc2VudFJlbmRlcmJ1ZmZlcjpHTF9SRU5ERVJCVUZGRVJd
OworICAgIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpuaWxdOworfQorI2VuZGlmCisK
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogewogICAg
IHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCmluZGV4IDJjODM4NWQxZWE2ZTI2NjQ0
ODAwODFkOTBlNDM3YTM2ZDc2OGU1MmIuLjUzM2ViMGU2YTg1ZTJlMTAzYjE0YmFmODhhODAwYjA4
MjY1ZjNjY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9HcmFwaGljc0NvbnRleHRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQpAQCAtMjgsMTAgKzI4LDE5IEBACiAKICNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVDRy5oIgorI2lmIFVTRShBUFBLSVQpCiAjaW1wb3J0IDxBcHBLaXQvQXBwS2l0
Lmg+CisjZW5kaWYKICNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAorI2lmIFBMQVRGT1JN
KElPUykKKyNpbXBvcnQgIkNvbG9yLmgiCisjaW1wb3J0ICJXS0dyYXBoaWNzLmgiCisjZW5kaWYK
KworI2lmICFQTEFURk9STShJT1MpCiAjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQuaCIKKyNlbmRpZgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogCiBAY2xh
c3MgTlNDb2xvcjsKQEAgLTQ1LDYgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gY2Fs
bHMgaW4gdGhpcyBmaWxlIGFyZSBhbGwgZXhjZXB0aW9uLXNhZmUsIHNvIHdlIGRvbid0IGJsb2Nr
CiAvLyBleGNlcHRpb25zIGZvciB0aG9zZS4KIAorI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMg
dm9pZCBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhS
ZWYgZm9jdXNSaW5nUGF0aCwgQ0dDb2xvclJlZiBjb2xvciwgaW50IHJhZGl1cykKIHsKICAgICBD
R0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CkBAIC02NCw5ICs3NCwxMSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBpbnQgd2lkdGgsIGlu
dCAvKm9mZnNldCovLAogCiAgICAgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dChwbGF0Zm9ybUNvbnRl
eHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgY29sb3JSZWYsIHJhZGl1cyk7CiB9CisjZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTgwLDkgKzkyLDE2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGludCB3aWR0aCwgaW50CiAgICAgICAgIENHUGF0aEFkZFJlY3QoZm9jdXNSaW5nUGF0aC5nZXQo
KSwgMCwgQ0dSZWN0SW5zZXQocmVjdHNbaV0sIC1vZmZzZXQsIC1vZmZzZXQpKTsKIAogICAgIGRy
YXdGb2N1c1JpbmdUb0NvbnRleHQocGxhdGZvcm1Db250ZXh0KCksIGZvY3VzUmluZ1BhdGguZ2V0
KCksIGNvbG9yUmVmLCByYWRpdXMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVjdHMpOwor
ICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAg
VU5VU0VEX1BBUkFNKGNvbG9yKTsKKyNlbmRpZgogfQogCiAKKyNpZiAhUExBVEZPUk0oSU9TKQog
c3RhdGljIE5TQ29sb3IqIG1ha2VQYXR0ZXJuQ29sb3IoTlNTdHJpbmcqIGZpcnN0Q2hvaWNlTmFt
ZSwgTlNTdHJpbmcqIHNlY29uZENob2ljZU5hbWUsIE5TQ29sb3IqIGRlZmF1bHRDb2xvciwgYm9v
bCYgdXNpbmdEb3QpCiB7CiAgICAgLy8gRXZlbnR1YWxseSB3ZSBzaG91bGQgYmUgYWJsZSB0byBn
ZXQgcmlkIG9mIHRoZSBzZWNvbmRDaG9pY2VOYW1lLiBGb3IgdGhlIHRpbWUgYmVpbmcgd2UgbmVl
ZCBib3RoIHRvIGtlZXAKQEAgLTk4LDYgKzExNywxNSBAQCBzdGF0aWMgTlNDb2xvciogbWFrZVBh
dHRlcm5Db2xvcihOU1N0cmluZyogZmlyc3RDaG9pY2VOYW1lLCBOU1N0cmluZyogc2Vjb25kQ2hv
aQogICAgICAgICBjb2xvciA9IGRlZmF1bHRDb2xvcjsKICAgICByZXR1cm4gY29sb3I7CiB9Cisj
ZWxzZQorc3RhdGljIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IGNyZWF0ZURvdFBhdHRlcm4oYm9v
bCYgdXNpbmdEb3QsIGNvbnN0IGNoYXIqIHJlc291cmNlTmFtZSkKK3sKKyAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKFdLR3JhcGhpY3NDcmVhdGVJbWFnZUZyb21CdW5k
bGVXaXRoTmFtZShyZXNvdXJjZU5hbWUpKTsKKyAgICBBU1NFUlQoaW1hZ2UpOyAvLyBpZiBpbWFn
ZSBpcyBub3QgYXZhaWxhYmxlLCB3ZSB3YW50IHRvIGtub3cKKyAgICB1c2luZ0RvdCA9IHRydWU7
CisgICAgcmV0dXJuIGFkb3B0Q0YoV0tDcmVhdGVQYXR0ZXJuRnJvbUNHSW1hZ2UoaW1hZ2UuZ2V0
KCkpKTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiBzdGF0aWMgTlNDb2xvciAqc3Bl
bGxpbmdQYXR0ZXJuQ29sb3IgPSBudWxscHRyOwogc3RhdGljIE5TQ29sb3IgKmdyYW1tYXJQYXR0
ZXJuQ29sb3IgPSBudWxscHRyOwpAQCAtMTIxLDIwICsxNDksMzEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHcKICAgICBmbG9hdCBwYXR0ZXJuV2lkdGggPSBjTWlzc3BlbGxpbmdMaW5lUGF0dGVy
bldpZHRoOwogCiAgICAgYm9vbCB1c2luZ0RvdDsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIE5T
Q29sb3IgKnBhdHRlcm5Db2xvcjsKKyNlbHNlCisgICAgQ0dQYXR0ZXJuUmVmIGRvdFBhdHRlcm47
CisjZW5kaWYKICAgICBzd2l0Y2ggKHN0eWxlKSB7CiAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJr
ZXJTcGVsbGluZ0xpbmVTdHlsZToKICAgICAgICAgewogICAgICAgICAgICAgLy8gQ29uc3RhbnRz
IGZvciBzcGVsbGluZyBwYXR0ZXJuIGNvbG9yLgogICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNp
bmdEb3RGb3JTcGVsbGluZyA9IGZhbHNlOworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgICAg
ICBpZiAoIXNwZWxsaW5nUGF0dGVybkNvbG9yKQogICAgICAgICAgICAgICAgIHNwZWxsaW5nUGF0
dGVybkNvbG9yID0gW21ha2VQYXR0ZXJuQ29sb3IoQCJOU1NwZWxsaW5nRG90IiwgQCJTcGVsbGlu
Z0RvdCIsIFtOU0NvbG9yIHJlZENvbG9yXSwgdXNpbmdEb3RGb3JTcGVsbGluZykgcmV0YWluXTsK
ICAgICAgICAgICAgIHVzaW5nRG90ID0gdXNpbmdEb3RGb3JTcGVsbGluZzsKICAgICAgICAgICAg
IHBhdHRlcm5Db2xvciA9IHNwZWxsaW5nUGF0dGVybkNvbG9yOworI2Vsc2UKKyAgICAgICAgICAg
IHN0YXRpYyBDR1BhdHRlcm5SZWYgc3BlbGxpbmdQYXR0ZXJuID0gY3JlYXRlRG90UGF0dGVybih1
c2luZ0RvdEZvclNwZWxsaW5nLCAiU3BlbGxpbmdEb3QiKS5sZWFrUmVmKCk7CisgICAgICAgICAg
ICBkb3RQYXR0ZXJuID0gc3BlbGxpbmdQYXR0ZXJuOworI2VuZGlmCisgICAgICAgICAgICB1c2lu
Z0RvdCA9IHVzaW5nRG90Rm9yU3BlbGxpbmc7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyR3JhbW1hckxpbmVTdHlsZToKICAgICAgICAg
eworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICAvLyBDb25zdGFudHMgZm9yIGdyYW1t
YXIgcGF0dGVybiBjb2xvci4KICAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yR3Jh
bW1hciA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFncmFtbWFyUGF0dGVybkNvbG9yKQpAQCAt
MTQyLDggKzE4MSwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdwogICAgICAgICAgICAgdXNp
bmdEb3QgPSB1c2luZ0RvdEZvckdyYW1tYXI7CiAgICAgICAgICAgICBwYXR0ZXJuQ29sb3IgPSBn
cmFtbWFyUGF0dGVybkNvbG9yOwogICAgICAgICAgICAgYnJlYWs7CisjZWxzZQorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisjZW5kaWYKICAg
ICAgICAgfQotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBQTEFURk9S
TShNQUMpCiAgICAgICAgIC8vIFRvIHN1cHBvcnQgY29ycmVjdGlvbiBwYW5lbC4KICAgICAgICAg
Y2FzZSBEb2N1bWVudE1hcmtlckF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnRMaW5lU3R5bGU6CiAg
ICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJEaWN0YXRpb25BbHRlcm5hdGl2ZXNMaW5lU3R5bGU6
CkBAIC0xNTcsNyArMjAwLDIxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogI2VuZGlmCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBj
YXNlIFRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNMaW5lU3R5bGU6
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yRGljdGF0aW9u
UGhyYXNlV2l0aEFsdGVybmF0aXZlcyA9IGZhbHNlOworICAgICAgICAgICAgc3RhdGljIENHUGF0
dGVyblJlZiBkaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzUGF0dGVybiA9IGNyZWF0ZURv
dFBhdHRlcm4odXNpbmdEb3RGb3JEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCAiRGlj
dGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc0RvdCIpLmxlYWtSZWYoKTsKKyAgICAgICAgICAg
IGRvdFBhdHRlcm4gPSBkaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzUGF0dGVybjsKKyAg
ICAgICAgICAgIHVzaW5nRG90ID0gdXNpbmdEb3RGb3JEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJu
YXRpdmVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCiAgICAgICAgIGRlZmF1bHQ6CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAg
Ly8gRklYTUU6IFNob3VsZCByZW1vdmUgZGVmYXVsdCBjYXNlIHNvIHdlIGdldCBjb21waWxlLXRp
bWUgZXJyb3JzLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTE4Miwy
MCArMjM5LDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3CiAgICAgLy8gZm9yIHRyYW5zZm9y
bXMuCiAKICAgICAvLyBEcmF3IHVuZGVybGluZS4KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQodGhpcyk7CiAgICAgTlNHcmFw
aGljc0NvbnRleHQgKmN1cnJlbnRDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRD
b250ZXh0XTsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IChDR0NvbnRleHRSZWYpW2N1cnJl
bnRDb250ZXh0IGdyYXBoaWNzUG9ydF07CisjZWxzZQorICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CisjZW5kaWYKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNv
bnRleHQpOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbcGF0dGVybkNvbG9yIHNldF07Cisj
ZWxzZQorICAgIFdLU2V0UGF0dGVybihjb250ZXh0LCBkb3RQYXR0ZXJuLCBZRVMsIFlFUyk7Cisj
ZW5kaWYKIAogICAgIHdrU2V0UGF0dGVyblBoYXNlSW5Vc2VyU3BhY2UoY29udGV4dCwgb2Zmc2V0
UG9pbnQpOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBOU1JlY3RGaWxsVXNpbmdPcGVyYXRp
b24oTlNNYWtlUmVjdChvZmZzZXRQb2ludC54KCksIG9mZnNldFBvaW50LnkoKSwgd2lkdGgsIHBh
dHRlcm5IZWlnaHQpLCBOU0NvbXBvc2l0ZVNvdXJjZU92ZXIpOworI2Vsc2UKKyAgICBXS1JlY3RG
aWxsVXNpbmdPcGVyYXRpb24oY29udGV4dCwgQ0dSZWN0TWFrZShvZmZzZXRQb2ludC54KCksIG9m
ZnNldFBvaW50LnkoKSwgd2lkdGgsIHBhdHRlcm5IZWlnaHQpLCBrQ0dDb21wb3NpdGVTb3Zlcik7
CisjZW5kaWYKICAgICAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQog
CisjaWYgIVBMQVRGT1JNKElPUykKIENHQ29sb3JTcGFjZVJlZiBsaW5lYXJSR0JDb2xvclNwYWNl
UmVmKCkKIHsKICAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIGxpbmVhclNSR0JTcGFjZSA9IDA7
CkBAIC0yMTUsNSArMjg1LDYgQEAgQ0dDb2xvclNwYWNlUmVmIGxpbmVhclJHQkNvbG9yU3BhY2VS
ZWYoKQogCiAgICAgcmV0dXJuIGxpbmVhclNSR0JTcGFjZTsKIH0KKyNlbmRpZgogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCmluZGV4IGRj
YjI2OTQ2OTRkOWIyNTBlY2IyZmNmZmRhY2RiMjM3NDJlY2I2ODcuLmEwZDZlZWVlZDNjNGRiMzNl
YWJkOTI2MWNiY2ZhNDM1YWQyZDZiNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCkBAIC0xOCw2ICsxOCw4IEBACiAgKgogICovCiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQorCiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkljb24uaCIK
IApAQCAtODIsMyArODQsNSBAQCB2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIH0KIAogfQorCisjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9J
bWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1h
Yy5tbQppbmRleCAyNTFmNTc0OGJmOTAxZDRmYjg0NjlmYzNmNzBlNDk3YjNhYmI0N2QzLi4xMjA0
NThjMzMxMTU5MWY2YzAyYjYzMDU3N2RhY2UzMDY5NDM4M2E1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCkBAIC0zNyw2ICszNywxOCBA
QAogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVCdW5kbGVGaW5kZXIKIEBlbmQKIAorI2lmIFBMQVRG
T1JNKElPUykKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisKKyNpbXBvcnQgPENvcmVHcmFwaGlj
cy9Db3JlR3JhcGhpY3MuaD4KKyNpbXBvcnQgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2ltcG9ydCA8
TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgorCitTT0ZUX0xJTktfRlJB
TUVXT1JLKE1vYmlsZUNvcmVTZXJ2aWNlcykKK1NPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3Jl
U2VydmljZXMsIGtVVFR5cGVUSUZGLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1VUVHlwZVRJRkYg
Z2V0a1VUVHlwZVRJRkYoKQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBC
aXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpCkBAIC00NCw3ICs1Niw5IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQogICAgIGlmIChtX2ZyYW1l
cy5zaXplKCkgIT0gMSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBtX25zSW1hZ2UgPSAwOworI2VuZGlmCiAgICAgbV90aWZmUmVwID0gMDsKIH0KIApAQCAtMTAz
LDYgKzExNyw3IEBAIENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9u
KCkKICAgICByZXR1cm4gbV90aWZmUmVwLmdldCgpOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykK
IE5TSW1hZ2UqIEJpdG1hcEltYWdlOjpnZXROU0ltYWdlKCkKIHsKICAgICBpZiAobV9uc0ltYWdl
KQpAQCAtMTE1LDUgKzEzMCw2IEBAIE5TSW1hZ2UqIEJpdG1hcEltYWdlOjpnZXROU0ltYWdlKCkK
ICAgICBtX25zSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhEYXRhOihO
U0RhdGEqKWRhdGFdKTsKICAgICByZXR1cm4gbV9uc0ltYWdlLmdldCgpOwogfQorI2VuZGlmCiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQ
b2ludE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQb2lu
dE1hYy5tbQppbmRleCA3YTJlNzMwZWQ4ZTZiNzQ5NjU2ZjU2Y2FmZGUwZTcxMTQ2NjlkZjhjLi5j
MjljM2FlODY0ZDM4YWY3OWRjYzRhZTFjYmJjNWI0OWRhYzE2YTViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFBvaW50TWFjLm1tCkBAIC0yOCw2
ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFQTEFURk9STShJT1MpCiAj
aWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiAKIEludFBv
aW50OjpJbnRQb2ludChjb25zdCBOU1BvaW50JiBwKSA6IG1feChzdGF0aWNfY2FzdDxpbnQ+KHAu
eCkpLCBtX3koc3RhdGljX2Nhc3Q8aW50PihwLnkpKQpAQCAtNDAsNSArNDEsNiBAQCBJbnRQb2lu
dDo6b3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0CiB9CiAKICNlbmRpZgorI2VuZGlmIC8vICFQTEFU
Rk9STShJT1MpCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9JbnRSZWN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ludFJlY3RNYWMubW0KaW5kZXggNzM4NjE4YTE5ODNhYzc3NWMzNTk4YTU2MzQ1Yjk0ZGFl
NGIyNmExNC4uNzc0YTBiYTcwNGVlN2Q1ODNhZjhlMDQwMmI5NzFhYzM4ZjQzYmNhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWMubW0K
QEAgLTI4LDYgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIVBMQVRGT1JN
KElPUykKICNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMK
IAogSW50UmVjdDo6b3BlcmF0b3IgTlNSZWN0KCkgY29uc3QKQEAgLTQ1LDUgKzQ2LDYgQEAgSW50
UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IE5TUmVjdCYgcmVjdCkKIH0KIAogI2VuZGlmCisj
ZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ludFNpemVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
SW50U2l6ZU1hYy5tbQppbmRleCBjN2RjZDg4Yzg4ZTA3MTRjYWUxNTg2MzFhZThmMzMxOWIzZGNi
ZDZiLi45YTQ3NjY1MDlmYjNjZTQ2ODM0ODgxYTVjNmY4MzE0MjBmYThmOWNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50U2l6ZU1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50U2l6ZU1hYy5tbQpAQCAt
MjgsNiArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogCiBJ
bnRTaXplOjpJbnRTaXplKGNvbnN0IE5TU2l6ZSYgcykgOiBtX3dpZHRoKHN0YXRpY19jYXN0PGlu
dD4ocy53aWR0aCkpLCBtX2hlaWdodChzdGF0aWNfY2FzdDxpbnQ+KHMuaGVpZ2h0KSkKQEAgLTQw
LDUgKzQxLDYgQEAgSW50U2l6ZTo6b3BlcmF0b3IgTlNTaXplKCkgY29uc3QKIH0KIAogI2VuZGlm
CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJveHkuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByb3h5LmgKaW5kZXggYzU4NmZi
ODZmZWZhNDA2ODBmYTk1YTIzNTc3NjIzZDAzYTEyOWJiYi4uYzQxZThjZjg1MjNiZjU5NWFmZDk5
NWQzOTkzN2UyZjhhYzZkMGVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcm94eS5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiwyMSBAQAogI2lm
bmRlZiBNZWRpYVBsYXllclByb3h5X2gKICNkZWZpbmUgTWVkaWFQbGF5ZXJQcm94eV9oCiAKKyNp
ZiBQTEFURk9STShJT1MpCisjaWYgZGVmaW5lZChfX09CSkNfXykKKyNpbXBvcnQgPEZvdW5kYXRp
b24vTlNHZW9tZXRyeS5oPgorI2VuZGlmCisKKy8vIE5lZWRlZCBzaW5jZSB0aGlzIGlzIGEgV2Vi
S2l0IHByaXZhdGUgaGVhZGVyIG9uIGlPUy4KKyNpZm5kZWYgT0JKQ19DTEFTUworI2lmZGVmIF9f
T0JKQ19fCisjZGVmaW5lIE9CSkNfQ0xBU1MgQGNsYXNzCisjZWxzZQorI2RlZmluZSBPQkpDX0NM
QVNTIGNsYXNzCisjZW5kaWYKKyNlbmRpZiAvLyAhZGVmaW5lZChPQkpDX0NMQVNTKQorI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykKKwogT0JKQ19DTEFTUyBXZWJNZWRpYVBsYXllclByb3h5OwogCiBl
bnVtIE1lZGlhUGxheWVyUHJveHlOb3RpZmljYXRpb25UeXBlIHsKQEAgLTU3LDYgKzcyLDE2IEBA
IGVudW0gTWVkaWFQbGF5ZXJQcm94eU5vdGlmaWNhdGlvblR5cGUgewogICAgIE1lZGlhUGxheWVy
Tm90aWZpY2F0aW9uVGltZUp1bXBlZCwKICAgICAKICAgICBNZWRpYVBsYXllck5vdGlmaWNhdGlv
blBsYXlQYXVzZUJ1dHRvblByZXNzZWQsCisgICAgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25SYXRl
RGlkQ2hhbmdlLAorICAgIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uR2FpbkZvY3VzLAorICAgIE1l
ZGlhUGxheWVyTm90aWZpY2F0aW9uTG9zZUZvY3VzLAorICAgIE1lZGlhUGxheWVyUmVxdWVzdEJl
Z2luUGxheWJhY2ssCisgICAgTWVkaWFQbGF5ZXJSZXF1ZXN0UGF1c2VQbGF5YmFjaywKKworI2lm
IEVOQUJMRShJT1NfQUlSUExBWSkKKyAgICBNZWRpYVBsYXllck5vdGlmaWNhdGlvbkN1cnJlbnRQ
bGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkLAorICAgIE1lZGlhUGxheWVyTm90aWZpY2F0
aW9uUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkLAorI2VuZGlmCiB9OwogCiAjaWZk
ZWYgX19PQkpDX18KQEAgLTcxLDYgKzk2LDI1IEBAIGVudW0gTWVkaWFQbGF5ZXJQcm94eU5vdGlm
aWNhdGlvblR5cGUgewogCiAtICh2b2lkKV9zZXRQb3N0ZXI6KE5TVVJMICopdXJsOwogCistICh2
b2lkKV9zZXRDb250cm9sczooQk9PTCljb250cm9sczsKKy0gKHZvaWQpX3NldEF1dG9idWZmZXI6
KEJPT0wpYXV0b2J1ZmZlcjsKKworLSAodm9pZClfZW50ZXJGdWxsU2NyZWVuOworLSAodm9pZClf
ZXhpdEZ1bGxTY3JlZW47CisKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCistIChCT09MKV9pc0N1
cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzOworLSAodm9pZClfc2hvd1BsYXliYWNrVGFyZ2V0
UGlja2VyOworCistIChCT09MKV9oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0czsKKworLSAoQk9P
TClfd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7CistICh2b2lkKV9zZXRXaXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZDooQk9PTClkaXNhYmxlZDsKKworLSAodm9pZClfc2V0SGFzUGxh
eWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnM6KEJPT0wpaGFzTGlzdGVuZXJzOworI2Vu
ZGlmCisKKy0gKHZvaWQpX3ByZXBhcmVGb3JQbGF5YmFjazsKIC0gKHZvaWQpX3BsYXk7CiAtICh2
b2lkKV9wYXVzZTsKIApAQCAtNzksNiArMTIzLDkgQEAgZW51bSBNZWRpYVBsYXllclByb3h5Tm90
aWZpY2F0aW9uVHlwZSB7CiAtIChCT09MKV9oYXNWaWRlbzsKIC0gKEJPT0wpX2hhc0F1ZGlvOwog
CistIChCT09MKV9oYXNDbG9zZWRDYXB0aW9uczsKKy0gKHZvaWQpX3NldENsb3NlZENhcHRpb25z
VmlzaWJsZTooQk9PTCl2aXNpYmxlOworCiAtIChOU1RpbWVJbnRlcnZhbClfZHVyYXRpb247CiAK
IC0gKGRvdWJsZSlfY3VycmVudFRpbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKaW5k
ZXggNzI5YmU2ZmFlNzcwZmRlZDA3OGY0OTk4MjE1ZTU0ODNjZWY1ZGFiMy4uMDgyOGJkODA4MmMx
ODMxZjkwNjYwYzJjZDVlMjJhZDRmNzU2ZWNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0
LmNwcApAQCAtMjcsNyArMjcsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29y
ZVRleHQvQ29yZVRleHQuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0
YU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250
RGF0YU1hYy5tbQppbmRleCAyMWVhNjExNjA3ODYxNDMxZTYzYjY0YTMwY2VkNzdhNzBmOWE5MDBj
Li4yNjQwY2M0Nzk1ODgyOGFiNTI4ZGM0MWFhODU5MzQ2NTk0NmI1ZTJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRh
TWFjLm1tCkBAIC0zNSwyMCArMzUsMjcgQEAKICNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgog
I2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
LmgiCisjaWYgVVNFKEFQUEtJVCkKICNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KICNpbXBvcnQg
PEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbXBv
cnQgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjZW5kaWYKICNpbXBvcnQgPGZsb2F0Lmg+CiAjaW1w
b3J0IDx1bmljb2RlL3VjaGFyLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2ltcG9y
dCA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCisjaWYg
IVBMQVRGT1JNKElPUykKIEBpbnRlcmZhY2UgTlNGb250IChXZWJBcHBLaXRTZWNyZXRBUEkpCiAt
IChCT09MKV9pc0Zha2VGaXhlZFBpdGNoOwogQGVuZAorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgCisKKyNpZiBVU0UoQVBQS0lUKQogc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2Fs
R2x5cGhzKENURm9udFJlZiBjdEZvbnQpCiB7CiAgICAgLy8gVGhlIGNoZWNrIGRvZXNuJ3QgbG9v
ayBuZWF0IGJ1dCB0aGlzIGlzIHdoYXQgQXBwS2l0IGRvZXMgZm9yIHZlcnRpY2FsIHdyaXRpbmcu
Li4KQEAgLTI1NSw2ICsyNjIsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJX
aWR0aEluaXQoKQogICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0aW1hdGUs
IHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1wb3NpdGl2
ZS4KICAgICBpbml0Q2hhcldpZHRocygpOwogfQorI2VuZGlmIC8vIFVTRShBUFBLSVQpCiAKIHZv
aWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiB7CkBAIC0yNjgsNiArMjc2LDcg
QEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKICAgICB9CiB9CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGlmIChpc0N1
c3RvbUZvbnQoKSkgewpAQCAtMzA0LDcgKzMxMyw5IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZv
CiAKICAgICByZXR1cm4gMDsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCisjaWYgIVBM
QVRGT1JNKElPUykKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKIHsKICAgICBOU1N0cmluZyAq
c3RyaW5nID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5OmNvbnN0
X2Nhc3Q8dW5pY2hhcio+KGNoYXJhY3RlcnMpIGxlbmd0aDpsZW5ndGggZnJlZVdoZW5Eb25lOk5P
XTsKQEAgLTMzNSw2ICszNDYsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRj
aCgpCiAgICAgICAgICAgIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJNUy1QR290aGlj
Il0gIT0gTlNPcmRlcmVkU2FtZSAmJgogICAgICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVD
b21wYXJlOkAiTW9ub3R5cGVDb3JzaXZhIl0gIT0gTlNPcmRlcmVkU2FtZTsKIH0KKyNlbmRpZiAv
LyAhUExBVEZPUk0oSU9TKQogCiBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91
bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CkBAIC0zNDcsNiArMzU5LDcgQEAgRmxv
YXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAogICAgIHJldHVybiBib3VuZGluZ0JveDsKIH0KIAorI2lmICFQTEFURk9STShJT1Mp
CiBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAogewogICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKQEAgLTM2Nyw2ICsz
ODAsNyBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdAogCiAgICAgcmV0dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0Jv
bGRPZmZzZXQ7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogc3RydWN0IFByb3ZpZGVy
SW5mbyB7CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIuaAppbmRleCA2NDQwYjcxYWY3MTk4
ODdmMzVmYTU4MDRmZTkwYzBhOTljNTIwODg2Li5lYWRlNTIwMzRjZGQ4MTBhNjAyZmU4MWZkYTI4
NDJiMjMxODZhMDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvV2ViR0xMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9XZWJHTExheWVyLmgKQEAgLTM1LDcgKzM1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIH0KIAotQGludGVyZmFjZSBXZWJHTExheWVy
IDogQ0FPcGVuR0xMYXllciAKKyNpZiBQTEFURk9STShJT1MpCitAaW50ZXJmYWNlIFdlYkdMTGF5
ZXIgOiBDQUVBR0xMYXllcgorI2Vsc2UKK0BpbnRlcmZhY2UgV2ViR0xMYXllciA6IENBT3BlbkdM
TGF5ZXIKKyNlbmRpZgogewogICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fbGF5ZXJPd25l
cjsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbQppbmRleCBk
NTEwYjYxOWRlOTk5NTVjNzMwNjFhYTRhODk2MjVjMThhN2NhYjMzLi42NDgyOTllNzU5NmMzNDU2
MmUxNTQ0NTBlNzdlYTI0YTc4MmIyMWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbQpAQCAtMzIsOCArMzIsMTAgQEAKIAogI2lt
cG9ydCAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKKyNp
ZiAhUExBVEZPUk0oSU9TKQogI2ltcG9ydCA8T3BlbkdML09wZW5HTC5oPgogI2ltcG9ydCA8T3Bl
bkdML2dsLmg+CisjZW5kaWYKICNpbXBvcnQgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CiAKQEAgLTQ4LDYgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLShDR0xQaXhl
bEZvcm1hdE9iailjb3B5Q0dMUGl4ZWxGb3JtYXRGb3JEaXNwbGF5TWFzazoodWludDMyX3QpbWFz
awogewogICAgIC8vIEZJWE1FOiBUaGUgbWFzayBwYXJhbSB0ZWxscyB5b3Ugd2hpY2ggZGlzcGxh
eSAob24gYSBtdWx0aS1kaXNwbGF5IHN5c3RlbSkKQEAgLTEwOCw5ICsxMTEsMTQgQEAgc3RhdGlj
IHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAq
LykKIHsKICAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQgKj4oZGF0YSkpOwogfQorI2VuZGlm
CiAKIC0oQ0dJbWFnZVJlZiljb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihDR0NvbG9y
U3BhY2VSZWYpY29sb3JTcGFjZQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFS
QU0oY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIDA7CisjZWxzZQogICAgIENHTFNldEN1cnJlbnRD
b250ZXh0KG1fY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKIAogICAgIFJl
dGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGltYWdlQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CkBA
IC0xMzgsMTEgKzE0NiwxNiBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZv
aWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOwogICAgIENH
RGF0YVByb3ZpZGVyUmVsZWFzZShwcm92aWRlcik7CiAgICAgcmV0dXJuIGltYWdlOworI2VuZGlm
CiB9CiAKIC0gKHZvaWQpZGlzcGxheQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2NvbnRl
eHQtPmVuZFBhaW50KCk7CisjZWxzZQogICAgIFtzdXBlciBkaXNwbGF5XTsKKyNlbmRpZgogICAg
IGlmIChtX2xheWVyT3duZXIpCiAgICAgICAgIG1fbGF5ZXJPd25lci0+bGF5ZXJEaWREaXNwbGF5
KHNlbGYpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1dlYkxheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YkxheWVyLm1tCmluZGV4IDA4Mjk2NDJkOTQ5ZDA2NGVkOWFhNmNhZWU0MGFlMDZlNDA0OWJjNGMu
LmE5MjRjZGY4Y2RlOGE5ODIwMTE4ZDAzYTlmOTExNDEwNGEyM2MzMjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KQEAgLTMyLDE1ICsz
MiwyOSBAQAogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0ICJHcmFwaGljc0xh
eWVyQ0EuaCIKICNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllci5oIgorI2lmICFQTEFURk9STShJT1Mp
CiAjaW1wb3J0ICJUaGVtZU1hYy5oIgorI2VuZGlmCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0
ekNvcmUuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIldLR3JhcGhpY3MuaCIKKyNp
bXBvcnQgIldBS1dpbmRvdy5oIgorI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmCisK
IEBpbnRlcmZhY2UgQ0FMYXllcihXZWJDb3JlQ0FMYXllclByaXZhdGUpCiAtICh2b2lkKXJlbG9h
ZFZhbHVlRm9yS2V5UGF0aDooTlNTdHJpbmcgKilrZXlQYXRoOwogQGVuZAogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAorI2lmIFBMQVRGT1JNKElPUykKK0BpbnRlcmZhY2UgV2ViTGF5ZXIo
UHJpdmF0ZSkKKy0gKHZvaWQpZHJhd1NjYWxlZENvbnRlbnRzSW5Db250ZXh0OihDR0NvbnRleHRS
ZWYpY29udGV4dDsKK0BlbmQKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlcGFp
bnRSZWN0TGlzdCBjb2xsZWN0UmVjdHNUb1BhaW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBQbGF0
Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllcikKQEAgLTc0LDE3ICs4OCwyNiBAQCB2b2lkIGRy
YXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXIqIHBsYXRmb3JtQwogICAgIGlmICghbGF5ZXJDb250ZW50cykKICAgICAgICAgcmV0dXJu
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFdLU2V0Q3VycmVudEdyYXBoaWNzQ29udGV4dChj
b250ZXh0KTsKKyNlbmRpZgorCiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAog
ICAgIC8vIFdlIG5ldmVyIHVzZSBDb21wb3NpdGluZ0Nvb3JkaW5hdGVzQm90dG9tVXAgb24gTWFj
LgogICAgIEFTU0VSVChsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVu
dGF0aW9uKCkgPT0gR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24p
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFdLRm9udEFudGlhbGlhc2luZ1N0YXRlU2F2ZXIg
Zm9udEFudGlhbGlhc2luZ1N0YXRlKGNvbnRleHQsIFtwbGF0Zm9ybUNBTGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSBpc09wYXF1ZV0pOworICAgIGZvbnRBbnRpYWxpYXNpbmdTdGF0ZS5zZXR1cChbV0FL
V2luZG93IGhhc0xhbmRzY2FwZU9yaWVudGF0aW9uXSk7CisjZWxzZQogICAgIFtOU0dyYXBoaWNz
Q29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07CiAKICAgICAvLyBTZXQgdXAgYW4gTlNHcmFwaGlj
c0NvbnRleHQgZm9yIHRoZSBjb250ZXh0LCBzbyB0aGF0IHBhcnRzIG9mIEFwcEtpdCB0aGF0IHJl
bHkgb24KICAgICAvLyB0aGUgY3VycmVudCBOU0dyYXBoaWNzQ29udGV4dCAoZS5nLiBOU0NlbGwg
ZHJhd2luZykgZ2V0IHRoZSByaWdodCBvbmUuCiAgICAgTlNHcmFwaGljc0NvbnRleHQqIGxheWVy
Q29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQ
b3J0OmNvbnRleHQgZmxpcHBlZDpZRVNdOwogICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJy
ZW50Q29udGV4dDpsYXllckNvbnRleHRdOworI2VuZGlmCiAKICAgICBHcmFwaGljc0NvbnRleHQg
Z3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5
ZXJDb250ZXh0KHRydWUpOwpAQCAtOTQsNyArMTE3LDggQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50
cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9y
bUMKICAgICAgICAgLy8gVHVybiBvZmYgZm9udCBzbW9vdGhpbmcgdG8gaW1wcm92ZSB0aGUgYXBw
ZWFyYW5jZSBvZiB0ZXh0IHJlbmRlcmVkIG9udG8gYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLgog
ICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hvdWxkU21vb3RoRm9udHMoZmFsc2UpOwogICAg
IH0KLSAgICAKKworI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8g
Z2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmlj
YW50bHkKICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBs
YXllcnMpCiAgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRp
bmdCb3goY29udGV4dCk7CkBAIC0xMDYsNiArMTMwLDcgQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50
cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9y
bUMKICAgICBmb2N1c1JpbmdDbGlwUmVjdCA9IHRyYW5zZm9ybS5tYXBSZWN0KGNsaXBCb3VuZHMp
OwogI2VuZGlmCiAgICAgVGhlbWVNYWM6OnNldEZvY3VzUmluZ0NsaXBSZWN0KGZvY3VzUmluZ0Ns
aXBSZWN0KTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAgICAgZm9yIChhdXRvIHJlY3Qg
OiBkaXJ0eVJlY3RzKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihncmFwaGljc0NvbnRleHQpOwpAQCAtMTE0LDkgKzEzOSwxMyBAQCB2b2lkIGRyYXdMYXll
ckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIq
IHBsYXRmb3JtQwogICAgICAgICBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENv
bnRlbnRzKHBsYXRmb3JtQ0FMYXllciwgZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0
KHJlY3QpKTsKICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgZm9udEFudGlhbGlhc2lu
Z1N0YXRlLnJlc3RvcmUoKTsKKyNlbHNlCiAgICAgVGhlbWVNYWM6OnNldEZvY3VzUmluZ0NsaXBS
ZWN0KEZsb2F0UmVjdCgpKTsKIAogICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhp
Y3NTdGF0ZV07CisjZW5kaWYKIAogICAgIC8vIFJlLWZldGNoIHRoZSBsYXllciBvd25lciwgc2lu
Y2UgPHJkYXI6Ly9wcm9ibGVtLzkxMjUxNTE+IGluZGljYXRlcyB0aGF0IGl0IG1pZ2h0IGhhdmUg
YmVlbiBkZXN0cm95ZWQgZHVyaW5nIHBhaW50aW5nLgogICAgIGxheWVyQ29udGVudHMgPSBwbGF0
Zm9ybUNBTGF5ZXItPm93bmVyKCk7CkBAIC0yMjQsNiArMjUzLDEwIEBAIHZvaWQgZHJhd1JlcGFp
bnRJbmRpY2F0b3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFBsYXRmb3JtQ0FMYXllciogcGxhdGZv
cm1DQUxheWVyCiAKIC0gKHZvaWQpZGlzcGxheQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBp
ZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRocmVhZExvY2soKTsKKyNlbmRpZgog
ICAgIFtzdXBlciBkaXNwbGF5XTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyID0gUGxhdGZv
cm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIoc2VsZik7CiAgICAgaWYgKGxheWVyICYmIGxheWVy
LT5vd25lcigpKQpAQCAtMjMyLDYgKzI2NSwxMCBAQCB2b2lkIGRyYXdSZXBhaW50SW5kaWNhdG9y
KENHQ29udGV4dFJlZiBjb250ZXh0LCBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllcgog
CiAtICh2b2lkKWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0CiB7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIGlmIChwdGhyZWFkX21haW5fbnAoKSkKKyAgICAgICAgV2ViVGhyZWFk
TG9jaygpOworI2VuZGlmCiAgICAgUGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FM
YXllcjo6cGxhdGZvcm1DQUxheWVyKHNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3du
ZXIoKSkgewogICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRp
bGVkTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViVGls
ZWRMYXllci5tbQppbmRleCAzY2FjNWU3YzMzMTI4ZGExZGZlY2Y5M2Q2MDM4YzExZTE5OWQyNWIz
Li5jODZhZmE2ODg0YmVjZDJmMzY4NDdmM2JkMjBkNzhkMDk0Y2EyMWVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViVGlsZWRMYXllci5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViVGlsZWRMYXllci5tbQpA
QCAtMzMsNiArMzMsMTEgQEAKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2ltcG9ydCAi
UGxhdGZvcm1DQUxheWVyLmgiCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJXZWJDb3Jl
VGhyZWFkLmgiCisjaW1wb3J0ICJXZWJDb3JlVGhyZWFkUnVuLmgiCisjZW5kaWYKKwogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJUaWxlZExheWVyCkBAIC00
Niw3ICs1MSwxNCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIC8vIE1ha2Ugc3VyZSB0aGF0
IHRpbGVzIGFyZSBkcmF3biBvbiB0aGUgbWFpbiB0aHJlYWQKICsgKEJPT0wpc2hvdWxkRHJhd09u
TWFpblRocmVhZAogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2ViS2l0MiBh
bHdheXMgd2FudHMgdG8gZHJhdyBvbiB0aGUgbWFpbiB0aHJlYWQsIGJ1dCB0aGVyZSBpcworICAg
IC8vIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBjaGVjayBmb3IgV2ViS2l0MiB0aGFuIHVzaW5n
IHRoZSBleGlzdGFuY2Ugb2YKKyAgICAvLyB0aGUgd2ViIHRocmVhZCBhcyBhIHByb3h5LgorICAg
IHJldHVybiAhV2ViVGhyZWFkSXNFbmFibGVkKCk7CisjZWxzZQogICAgIHJldHVybiBZRVM7Cisj
ZW5kaWYKIH0KIAogKyAodW5zaWduZWQgaW50KXByZWZldGNoZWRUaWxlcwpAQCAtOTgsNiArMTEw
LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogLSAodm9pZClkaXNwbGF5CiB7CiAgICAg
W3N1cGVyIGRpc3BsYXldOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBDQVRpbGVkTGF5ZXIg
bmV2ZXIgY2FsbHMgZGlzcGxheSBvbiBhIGJhY2tncm91bmQgdGhyZWFkLCBzbyBpdCdzIHNhZmUK
KyAgICAvLyB0byBhc3N1bWUgd2UncmUgZWl0aGVyIG9uIHRoZSBtYWluIHRocmVhZCBvciBvbiB0
aGUgd2ViIHRocmVhZC4KKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRo
cmVhZExvY2soKTsKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOwor
I2VuZGlmCiAgICAgUGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxh
dGZvcm1DQUxheWVyKHNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkKICAg
ICAgICAgbGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShzZWxm
KTsKQEAgLTEwNSw5ICsxMjQsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIC0gKHZv
aWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKIHsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgdm9pZCAoXmRyYXcpKCkgPSBeeworI2VuZGlmCiAgICAgUGxhdGZvcm1DQUxheWVy
KiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHNlbGYpOwogICAgIGlm
IChsYXllcikKICAgICAgICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4dCwgbGF5ZXIpOworI2lm
IFBMQVRGT1JNKElPUykKKyAgICB9OworICAgIGlmIChwdGhyZWFkX21haW5fbnAoKSkgeworICAg
ICAgICBXZWJUaHJlYWRMb2NrKCk7CisgICAgICAgIGRyYXcoKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgV2ViVGhyZWFkUnVuU3luYyhkcmF3KTsKKyNlbmRpZgogfQogCiBAZW5kIC8vIGltcGxlbWVu
dGF0aW9uIFdlYlRpbGVkTGF5ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKaW5kZXggZmEy
NzkwZDNhZjk1MGNmZjRkY2I1NmM1ZmNkM2I0ODY2YzJjM2M2NS4uMjg5YzNlMjljODAyMmU4ZGVm
ZGY1NGZjYjgzMjVkMWRiODI5NzY0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKQEAg
LTMyLDEzICszMiwyMCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKElPUykK
KyNpbmNsdWRlICJBTkdMRS9TaGFkZXJMYW5nLmgiCisjaW5jbHVkZSA8T3BlbkdMRVMvRVMyL2ds
ZXh0Lmg+CisjZWxpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSAiQU5HTEUvU2hhZGVyTGFuZy5o
IgogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklYKQogI2luY2x1ZGUgIk9wZW5H
TFNoaW1zLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRElPUy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRXh0ZW5z
aW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0woR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCkBAIC01Myw3ICs2MCwyMSBAQCBFeHRlbnNpb25zM0RPcGVuR0w6On5FeHRlbnNpb25zM0RP
cGVuR0woKQogCiB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcg
c3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxv
bmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5z
aWduZWQgbG9uZyBmaWx0ZXIpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFVOVVNFRF9QQVJB
TShzcmNYMCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kwKTsKKyAgICBVTlVTRURfUEFSQU0oc3Jj
WDEpOworICAgIFVOVVNFRF9QQVJBTShzcmNZMSk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFgwKTsK
KyAgICBVTlVTRURfUEFSQU0oZHN0WTApOworICAgIFVOVVNFRF9QQVJBTShkc3RYMSk7CisgICAg
VU5VU0VEX1BBUkFNKGRzdFkxKTsKKyAgICBVTlVTRURfUEFSQU0obWFzayk7CisgICAgVU5VU0VE
X1BBUkFNKGZpbHRlcik7CisgICAgOjpnbFJlc29sdmVNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQVBQ
TEUoKTsKKyNlbHNlCiAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVChzcmNYMCwgc3JjWTAsIHNy
Y1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7Cisj
ZW5kaWYKIH0KIAogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCkKQEAgLTEwNSw2ICsxMjYsMTAgQEAgR0MzRGJvb2xlYW4gRXh0ZW5zaW9u
czNET3BlbkdMOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCiAKIHZv
aWQgRXh0ZW5zaW9uczNET3BlbkdMOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCBhcnJheSkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKGFycmF5KTsK
KyNlbmRpZgorCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICNpZiAoUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0o
TklYKSkKICAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQpAQCAtMTg2LDEz
ICsyMTEsMTkgQEAgYm9vbCBFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgfQor
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChuYW1lID09ICJHTF9FWFRfcGFja2VkX2RlcHRo
X3N0ZW5jaWwiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5z
KCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIG1f
YXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKIH0KIAogdm9pZCBFeHRlbnNpb25z
M0RPcGVuR0w6OmRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSBuLCBjb25zdCBHQzNEZW51bSogYnVm
cykKIHsKICAgICAvLyAgRklYTUU6IGltcGxlbWVudCBzdXBwb3J0IGZvciBvdGhlciBwbGF0Zm9y
bXMuCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElP
UykKICAgICA6OmdsRHJhd0J1ZmZlcnNBUkIobiwgYnVmcyk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggZmU4
NGIzOWFlMzE5NWQwYWU0MzY4YzdkYzM5YjM0NWY4YzZhYjg4OC4uMDA2MDJlMzRlZjIwMzU0ZmE4
ZmQ1NGI0MzRlM2VmMmIzMTRmZTUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbi5jcHAKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1M
b2cuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPE9wZW5HTEVTL0VT
Mi9nbGV4dC5oPgorI2Vsc2UKICNpZiBVU0UoT1BFTkdMX0VTXzIpCiAjaW5jbHVkZSAiT3BlbkdM
RVNTaGltcy5oIgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgpAQCAtNDUsNiArNDgsNyBAQAogI2Vs
aWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExB
VEZPUk0oTklYKQogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjZW5kaWYKKyNlbmRpZgogCiAj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03
MSw3ICs3NSw3IEBAIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6RXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIGlmICh2ZW5kb3JDb21wb25l
bnRzLmNvbnRhaW5zKCJpbnRlbCIpKQogICAgICAgICBtX2lzSW50ZWwgPSB0cnVlOwogCi0jaWYg
UExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICBp
ZiAobV9pc0FNRCB8fCBtX2lzSW50ZWwpCiAgICAgICAgIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rp
b25FbXVsYXRpb24gPSB0cnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cAppbmRleCBkMDQ4NWJmMTg2MjU1Yjg1OTU4N2VmYmZiNjU0YTYxODA2N2JjNjQ1Li43OWM2ZmQ4
Mzg4ZDI5ZmQ0ZTkyMGQxMzRkZDkyYTE0ZjcwMzlkOTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTC5jcHAKQEAgLTI5LDYgKzI5LDkgQEAKICNpZiBVU0UoM0RfR1JBUEhJQ1Mp
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lmIFBMQVRGT1JNKElPUykKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRElPUy5oIgorI2VuZGlmCiAKICNpbmNsdWRlICJFeHRl
bnNpb25zM0RPcGVuR0wuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC00MSw3ICs0NCwxMiBA
QAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPE9w
ZW5HTEVTL0VTMi9nbGV4dC5oPgorLy8gRnJvbSA8T3BlbkdMRVMvZ2xleHQuaD4KKyNkZWZpbmUg
R0xfUkdCQTMyRl9BUkIgICAgICAgICAgICAgICAgICAgICAgMHg4ODE0CisjZGVmaW5lIEdMX1JH
QjMyRl9BUkIgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxNQorI2VsaWYgUExBVEZPUk0oTUFD
KQogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklYKQogI2luY2x1ZGUgIk9wZW5H
TFNoaW1zLmgiCkBAIC04Niw3ICs5NCwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNo
YXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICBpZiAoZXh0ZW5zaW9ucy0+c3Vw
cG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKQogICAgICAgICAgICAgaW50ZXJu
YWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKICAgICAgICAg
ZWxzZQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7CisjZWxzZQogICAgICAgICAgICAgaW50ZXJu
YWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7CisjZW5kaWYKICAgICB9
CiAKICAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CkBAIC0xMjcsNiArMTM5LDExIEBA
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUp
CiAgICAgfQogCiAgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
IDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKKyAgICA6
OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFD
SE1FTlQwLCBHTF9SRU5ERVJCVUZGRVIsIG1fdGV4dHVyZSk7CisgICAgc2V0UmVuZGVyYnVmZmVy
U3RvcmFnZUZyb21EcmF3YWJsZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKKyNl
bHNlCiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CiAgICAg
OjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7CiAgICAg
OjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1Jf
QVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwpAQCAtMTM2LDYg
KzE1Myw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNp
emUmIHNpemUpCiAgICAgICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50
ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lH
TkVEX0JZVEUsIDApOwogICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7
CiAgICAgfQorI2VuZGlmCiAKICAgICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJz
LnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkpIHsKICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZm
ZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwpAQCAtMTY3
LDE3ICsxODUsMjIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQogCiAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwot
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKKyAgICA6OmdsUmVz
b2x2ZU11bHRpc2FtcGxlRnJhbWVidWZmZXJBUFBMRSgpOworI2Vsc2UKICAgICBJbnRSZWN0IHJl
c29sdmVSZWN0ID0gcmVjdDsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJlc29s
dmVSZWN0ID0gSW50UmVjdCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsK
IAogICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQocmVzb2x2ZVJlY3QueCgpLCByZXNvbHZlUmVj
dC55KCksIHJlc29sdmVSZWN0Lm1heFgoKSwgcmVzb2x2ZVJlY3QubWF4WSgpLCByZXNvbHZlUmVj
dC54KCksIHJlc29sdmVSZWN0LnkoKSwgcmVzb2x2ZVJlY3QubWF4WCgpLCByZXNvbHZlUmVjdC5t
YXhZKCksIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisjZW5kaWYKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CiAgICAgY2FzZSBERVBUSF9TVEVOQ0lMOgogICAg
ICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOwpAQCAtMTkzLDYg
KzIxNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvCiAgICAgICAgIGludGVybmFsZm9ybWF0
ID0gR0xfUkdCOwogICAgICAgICBicmVhazsKICAgICB9CisjZW5kaWYKICAgICA6OmdsUmVuZGVy
YnVmZmVyU3RvcmFnZUVYVCh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
IH0KIApAQCAtMjA0LDYgKzIyOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVn
ZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKICAgICAvLyBUaGVyZWZvcmUsIHRo
ZSB2YWx1ZSByZXR1cm5lZCBieSBkZXNrdG9wIEdMIG5lZWRzIHRvIGJlIGRpdmlkZWQgYnkgNC4K
ICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBjYXNlIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CiAgICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTLCB2
YWx1ZSk7CiAgICAgICAgICp2YWx1ZSAvPSA0OwpAQCAtMjE2LDYgKzI0MSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1
ZSkKICAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywgdmFsdWUp
OwogICAgICAgICAqdmFsdWUgLz0gNDsKICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBkZWZh
dWx0OgogICAgICAgICA6OmdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKICAgICB9CkBAIC0y
NjYsNiArMjkyLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAgZWxzZSBpZiAo
Zm9ybWF0ID09IEdMX1JHQikKICAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xf
UkdCMzJGX0FSQjsKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMpIHsKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCiAgICAgICAg
ICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX1JHQkExNkZfQVJCOwogICAgICAgICBlbHNl
IGlmIChmb3JtYXQgPT0gR0xfUkdCKQpAQCAtMjc3LDYgKzMwNCw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlCiAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEp
CiAgICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX0xVTUlOQU5DRV9BTFBIQTE2
Rl9BUkI7CiAgICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKKyNlbmRpZgogICAgIH0K
ICAgICB0ZXhJbWFnZTJERGlyZWN0KHRhcmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTI4NSwxMyArMzEzLDIxIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0Rj
bGFtcGYgekZhcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgOjpnbERlcHRoUmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciksIHN0YXRp
Y19jYXN0PGZsb2F0Pih6RmFyKSk7CisjZWxzZQogICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6
RmFyKTsKKyNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdD
M0RjbGFtcGYgZGVwdGgpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIDo6Z2xDbGVhckRlcHRoZihzdGF0aWNfY2FzdDxmbG9hdD4oZGVwdGgpKTsK
KyNlbHNlCiAgICAgOjpnbENsZWFyRGVwdGgoZGVwdGgpOworI2VuZGlmCiB9CiAKIEV4dGVuc2lv
bnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggNzY4NzQ3MzJlOTcwYTFkMjEx
YjdkYTM0ZTlkYTJhNjU3ODdkZWViNy4uZjU0MWUwZTMzNzQ0Nzg3NmE1ZWI1YmMyYjg3YmEzNjAz
ZWFmNmY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24u
Y3BwCkBAIC0zMSw2ICszMSw5IEBACiAjaWYgVVNFKDNEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0RJT1MuaCIKKyNlbmRpZgogCiAjaWYgVVNFKE9QRU5HTF9FU18yKQogI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCkBAIC01NCw2ICs1NywxMiBAQAogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCisjaWYg
UExBVEZPUk0oSU9TKQorI2ltcG9ydCA8T3BlbkdMRVMvRVMyL2dsZXh0Lmg+CisvLyBGcm9tIDxP
cGVuR0xFUy9nbGV4dC5oPgorI2RlZmluZSBHTF9SR0JBMzJGX0FSQiAgICAgICAgICAgICAgICAg
ICAgICAweDg4MTQKKyNkZWZpbmUgR0xfUkdCMzJGX0FSQiAgICAgICAgICAgICAgICAgICAgICAg
MHg4ODE1CisjZWxzZQogI2lmIFVTRShPUEVOR0xfRVNfMikKICNpbmNsdWRlICJPcGVuR0xFU1No
aW1zLmgiCiAjZWxpZiBQTEFURk9STShNQUMpCkBAIC02MSw2ICs3MCw3IEBACiAjZWxpZiBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShO
SVgpCiAjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKICNlbmRpZgorI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShCTEFDS0JFUlJZKQogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgpAQCAt
MTYxLDYgKzE3MSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIsCiAgICAgcGFpbnRUb0NhbnZh
cyhwaXhlbHMuZ2V0KCksIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkud2lkdGgoKSwgaW1hZ2VCdWZm
ZXItPmludGVybmFsU2l6ZSgpLmhlaWdodCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0
Zm9ybUNvbnRleHQoKSk7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBlbmRQYWlu
dCgpOworI2VuZGlmCiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50Q29tcG9zaXRl
ZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRp
b25NYXRyaXguY3BwCmluZGV4IGJmNTA3NDUxMjc3M2JmN2MxN2UxNWYyYTgzYTM3YzkwYWNmNmMw
ZmIuLmRhZDIzNTk5YmUyYzU4MDEyNDhhNzBhNTFiZDI0NmM1OGU5Y2FhZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRp
b25NYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCkBAIC0xMDM1LDcgKzEwMzUsNzEgQEAgVHJh
bnNmb3JtYXRpb25NYXRyaXggVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiBmcm9tLCBjb24KIC8vIHRoaXMgPSBtYXQgKiB0aGlzLgogVHJhbnNmb3JtYXRp
b25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4OjptdWx0aXBseShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0KQogewotI2lmIENQVShBUFBMRV9BUk1WN1MpCisjaWYgQ1BVKEFSTTY0
KQorICAgIGRvdWJsZSogbGVmdE1hdHJpeCA9ICYobV9tYXRyaXhbMF1bMF0pOworICAgIGNvbnN0
IGRvdWJsZSogcmlnaHRNYXRyaXggPSAmKG1hdC5tX21hdHJpeFswXVswXSk7CisgICAgYXNtIHZv
bGF0aWxlICgKKyAgICAgICAgLy8gRmlyc3QsIGxvYWQgdGhlIGxlZnRNYXRyaXggY29tcGxldGVs
eSBpbiBtZW1vcnkuIFRoZSBsZWZ0TWF0cml4IGlzIGluIHYxNi12MjMuCisgICAgICAgICJtb3Yg
ICAgICB4NCwgJVtsZWZ0TWF0cml4XVxuXHQiCisgICAgICAgICJsZDEuMmQgICB7djE2LCB2MTcs
IHYxOCwgdjE5fSwgWyVbbGVmdE1hdHJpeF1dLCAjNjRcblx0IgorICAgICAgICAibGQxLjJkICAg
e3YyMCwgdjIxLCB2MjIsIHYyM30sIFslW2xlZnRNYXRyaXhdXVxuXHQiCisKKyAgICAgICAgLy8g
Rmlyc3Qgcm93LgorICAgICAgICAibGQ0ci4yZCAge3YyNCwgdjI1LCB2MjYsIHYyN30sIFslW3Jp
Z2h0TWF0cml4XV0sICMzMlxuXHQiCisgICAgICAgICJmbXVsLjJkICB2MjgsIHYyNCwgdjE2XG5c
dCIKKyAgICAgICAgImZtdWwuMmQgIHYyOSwgdjI0LCB2MTdcblx0IgorICAgICAgICAiZm1sYS4y
ZCAgdjI4LCB2MjUsIHYxOFxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MjksIHYyNSwgdjE5XG5c
dCIKKyAgICAgICAgImZtbGEuMmQgIHYyOCwgdjI2LCB2MjBcblx0IgorICAgICAgICAiZm1sYS4y
ZCAgdjI5LCB2MjYsIHYyMVxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MjgsIHYyNywgdjIyXG5c
dCIKKyAgICAgICAgImZtbGEuMmQgIHYyOSwgdjI3LCB2MjNcblx0IgorCisgICAgICAgICJsZDRy
LjJkICB7djAsIHYxLCB2MiwgdjN9LCBbJVtyaWdodE1hdHJpeF1dLCAjMzJcblx0IgorICAgICAg
ICAic3QxLjJkICB7djI4LCB2Mjl9LCBbeDRdLCAjMzJcblx0IgorCisgICAgICAgIC8vIFNlY29u
ZCByb3cuCisgICAgICAgICJmbXVsLjJkICB2MzAsIHYwLCB2MTZcblx0IgorICAgICAgICAiZm11
bC4yZCAgdjMxLCB2MCwgdjE3XG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYzMCwgdjEsIHYxOFxu
XHQiCisgICAgICAgICJmbWxhLjJkICB2MzEsIHYxLCB2MTlcblx0IgorICAgICAgICAiZm1sYS4y
ZCAgdjMwLCB2MiwgdjIwXG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYzMSwgdjIsIHYyMVxuXHQi
CisgICAgICAgICJmbWxhLjJkICB2MzAsIHYzLCB2MjJcblx0IgorICAgICAgICAiZm1sYS4yZCAg
djMxLCB2MywgdjIzXG5cdCIKKworICAgICAgICAibGQ0ci4yZCAge3YyNCwgdjI1LCB2MjYsIHYy
N30sIFslW3JpZ2h0TWF0cml4XV0sICMzMlxuXHQiCisgICAgICAgICJzdDEuMmQgICB7djMwLCB2
MzF9LCBbeDRdLCAjMzJcblx0IgorCisgICAgICAgIC8vIFRoaXJkIHJvdy4KKyAgICAgICAgImZt
dWwuMmQgIHYyOCwgdjI0LCB2MTZcblx0IgorICAgICAgICAiZm11bC4yZCAgdjI5LCB2MjQsIHYx
N1xuXHQiCisgICAgICAgICJmbWxhLjJkICB2MjgsIHYyNSwgdjE4XG5cdCIKKyAgICAgICAgImZt
bGEuMmQgIHYyOSwgdjI1LCB2MTlcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjI4LCB2MjYsIHYy
MFxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MjksIHYyNiwgdjIxXG5cdCIKKyAgICAgICAgImZt
bGEuMmQgIHYyOCwgdjI3LCB2MjJcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjI5LCB2MjcsIHYy
M1xuXHQiCisKKyAgICAgICAgImxkNHIuMmQgIHt2MCwgdjEsIHYyLCB2M30sIFslW3JpZ2h0TWF0
cml4XV0sICMzMlxuXHQiCisgICAgICAgICJzdDEuMmQgICB7djI4LCB2Mjl9LCBbeDRdLCAjMzJc
blx0IgorCisgICAgICAgIC8vIEZvdXJ0aCByb3cuCisgICAgICAgICJmbXVsLjJkICB2MzAsIHYw
LCB2MTZcblx0IgorICAgICAgICAiZm11bC4yZCAgdjMxLCB2MCwgdjE3XG5cdCIKKyAgICAgICAg
ImZtbGEuMmQgIHYzMCwgdjEsIHYxOFxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MzEsIHYxLCB2
MTlcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjMwLCB2MiwgdjIwXG5cdCIKKyAgICAgICAgImZt
bGEuMmQgIHYzMSwgdjIsIHYyMVxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MzAsIHYzLCB2MjJc
blx0IgorICAgICAgICAiZm1sYS4yZCAgdjMxLCB2MywgdjIzXG5cdCIKKworICAgICAgICAic3Qx
LjJkICB7djMwLCB2MzF9LCBbeDRdXG5cdCIKKworICAgICAgICA6IFtsZWZ0TWF0cml4XSIrciIo
bGVmdE1hdHJpeCksIFtyaWdodE1hdHJpeF0iK3IiKHJpZ2h0TWF0cml4KQorICAgICAgICA6Cisg
ICAgICAgIDogIm1lbW9yeSIsICJ4NCIsICJ2MCIsICJ2MSIsICJ2MiIsICJ2MyIsICJ2MTYiLCAi
djE3IiwgInYxOCIsICJ2MTkiLCAidjIwIiwgInYyMSIsICJ2MjIiLCAidjIzIiwgInYyNCIsICJ2
MjUiLCAidjI2IiwgInYyNyIsICJ2MjgiLCAidjI5IiwgInYzMCIsICJ2MzEiKTsKKyNlbGlmIENQ
VShBUFBMRV9BUk1WN1MpCiAgICAgZG91YmxlKiBsZWZ0TWF0cml4ID0gJihtX21hdHJpeFswXVsw
XSk7CiAgICAgY29uc3QgZG91YmxlKiByaWdodE1hdHJpeCA9ICYobWF0Lm1fbWF0cml4WzBdWzBd
KTsKICAgICBhc20gdm9sYXRpbGUgKC8vIEZpcnN0IHJvdyBvZiBsZWZ0TWF0cml4LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCmluZGV4IDky
MDkzZDA5MTdiMzQ5ZTYyMWFkZjJiZTRiMDgxNDA4MTY2YzgwN2MuLjU1NDhkZTAzMzdjODQyYjZi
NzRkNDU3OTY2ZTlmY2ZiYzRkODg1ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAKQEAgLTk0LDggKzk0LDcgQEAgZmxvYXQgRm9udDo6
Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGlu
dCBmcm9tLCBpbnQKICAgICByZXR1cm4gYmVmb3JlV2lkdGg7CiB9CiAKLXZvaWQgRm9udDo6ZHJh
d0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVm
ZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlw
aC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTEwNCwxMSArMTAzLDEyIEBAIHZv
aWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGCiAKICAgICAvLyBXZSBjb3VsZG4ndCBnZW5lcmF0ZSBhbnkg
Z2x5cGhzIGZvciB0aGUgcnVuLiAgR2l2ZSB1cC4KICAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRHJhdyB0
aGUgZ2x5cGggYnVmZmVyIG5vdyBhdCB0aGUgc3RhcnRpbmcgcG9pbnQgcmV0dXJuZWQgaW4gc3Rh
cnRYLgogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChzdGFydFgsIHBvaW50LnkoKSk7CiAgICAg
ZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQpOwor
ICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAogdm9pZCBGb250OjpkcmF3
RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5jcHAKaW5kZXggZWMxNTRlOGQ0
OTI1OWRmM2MyZGQ3YzVkZDMxNmY0MDcyZTE2Y2MxNS4uZGY1ODk3MzIyZDhlNTBkZjM5NzkyMzBi
ODJlY2IwYzI5MDQ3MTg2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9Gb250V2luQ0UuY3BwCkBAIC0yMDcsOCArMjA3LDcgQEAgc3RhdGljIGlu
dCBnZW5lcmF0ZUNvbXBvbmVudHMoVGV4dFJ1bkNvbXBvbmVudHMqIGNvbXBvbmVudHMsIGNvbnN0
IEZvbnQgJmZvbnQsIGMKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIEZvbnQ6OmRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBpZiAodG8gPCAwKQogICAgICAg
ICB0byA9IHJ1bi5sZW5ndGgoKTsKQEAgLTIxOCw2ICsyMTcsNyBAQCB2b2lkIEZvbnQ6OmRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRgogICAgIFRleHRSdW5Db21wb25lbnRzIGNvbXBvbmVudHM7CiAgICAgaW50IHcgPSBn
ZW5lcmF0ZUNvbXBvbmVudHMoJmNvbXBvbmVudHMsICp0aGlzLCBydW4pOwogCisgICAgZmxvYXQg
d2lkdGhPZkRyYXduVGV4dCA9IDA7CiAgICAgaW50IGN1clBvcyA9IDA7CiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAoaW50KWNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3Qg
VGV4dFJ1bkNvbXBvbmVudCYgY29tcCA9IGNvbXBvbmVudHMuYXQoaSk7CkBAIC0yMjksMTIgKzIy
OSwxMyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRgogICAgICAgICAgICAgICAgIHB0LnNldFgo
cG9pbnQueCgpICsgdyAtIGNvbXAubV9vZmZzZXQgLSBjb21wLm1fd2lkdGgpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIHB0LnNldFgocG9pbnQueCgpICsgY29tcC5tX29mZnNl
dCk7Ci0gICAgICAgICAgICBkcmF3U2ltcGxlVGV4dChjb250ZXh0LCBjb21wLm1fdGV4dFJ1biwg
cHQsIGZyb20gLSBjdXJQb3MsIHN0ZDo6bWluKHRvLCBjdXJFbmQpIC0gY3VyUG9zKTsKKyAgICAg
ICAgICAgIHdpZHRoT2ZEcmF3blRleHQgKz0gZHJhd1NpbXBsZVRleHQoY29udGV4dCwgY29tcC5t
X3RleHRSdW4sIHB0LCBmcm9tIC0gY3VyUG9zLCBzdGQ6Om1pbih0bywgY3VyRW5kKSAtIGN1clBv
cyk7CiAgICAgICAgIH0KICAgICAgICAgY3VyUG9zICs9IGxlbjsKICAgICAgICAgaWYgKGZyb20g
PCBjdXJQb3MpCiAgICAgICAgICAgICBmcm9tID0gY3VyUG9zOwogICAgIH0KKyAgICByZXR1cm4g
d2lkdGhPZkRyYXduVGV4dDsKIH0KIAogdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYg
LyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9p
bnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbnRlbnRGaWx0ZXJJT1MubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ29udGVudEZpbHRlcklPUy5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40OGMyNWIwMGRlM2ZmMzBhZWVkMjBkZGJlMTY4MmEzOTUyYmRjNjMzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbnRlbnRGaWx0ZXJJT1MubW0K
QEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiQ29udGVudEZpbHRlci5oIgorCisjaWYgUExBVEZPUk0oSU9TKSAmJiBVU0UoQ09OVEVOVF9G
SUxURVJJTkcpCisKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIKKworI2lmIGRlZmluZWQo
X19oYXNfaW5jbHVkZSkgJiYgX19oYXNfaW5jbHVkZSg8V2ViQ29udGVudEFuYWx5c2lzL1dlYkZp
bHRlckV2YWx1YXRvci5oPikKKyNpbXBvcnQgPFdlYkNvbnRlbnRBbmFseXNpcy9XZWJGaWx0ZXJF
dmFsdWF0b3IuaD4KKyNlbHNlCitAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJGaWx0ZXJFdmFsdWF0
b3JEZXRhaWxzKQorLSAodm9pZCl1bmJsb2NrV2l0aENvbXBsZXRpb246KHZvaWQgKF4pKEJPT0wg
dW5ibG9ja2VkLCBOU0Vycm9yICplcnJvcikpY29tcGxldGlvbjsKK0BlbmQKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGNoYXIqIENvbnRlbnRGaWx0ZXI6OnNjaGVtZSgp
Cit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgY29udGVudEZpbHRlclNjaGVtZVtdID0gIngtYXBw
bGUtY29udGVudC1maWx0ZXIiOworICAgIHJldHVybiBjb250ZW50RmlsdGVyU2NoZW1lOworfQor
ICAgIAordm9pZCBDb250ZW50RmlsdGVyOjpyZXF1ZXN0VW5ibG9ja0FuZERpc3BhdGNoSWZTdWNj
ZXNzZnVsKEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24pCit7CisgICAgW21fcGxhdGZvcm1Db250
ZW50RmlsdGVyIHVuYmxvY2tXaXRoQ29tcGxldGlvbjpeKEJPT0wgdW5ibG9ja2VkLCBOU0Vycm9y
ICopIHsKKyAgICAgICAgaWYgKHVuYmxvY2tlZCkgeworICAgICAgICAgICAgV2ViVGhyZWFkUnVu
KF57CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgfV07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykgJiYgVVNFKENPTlRFTlRfRklMVEVSSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZU1vdGlvbkNsaWVudElPUy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZU1vdGlvbkNsaWVudElPUy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4
NTk5MWYyMDA1MjhlNWFjYTllZTVlMjA2MjdkYzkwOThmOGExODUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlTW90aW9uQ2xpZW50SU9TLmgKQEAg
LTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZXZpY2VNb3Rpb25DbGllbnRJT1NfaAor
I2RlZmluZSBEZXZpY2VNb3Rpb25DbGllbnRJT1NfaAorCisjaW5jbHVkZSAiRGV2aWNlTW90aW9u
Q2xpZW50LmgiCisjaW5jbHVkZSAiRGV2aWNlTW90aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
IkRldmljZU1vdGlvbkRhdGEuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmZGVmIF9fT0JKQ19fCitAY2xhc3MgV2ViQ29yZU1vdGlv
bk1hbmFnZXI7CisjZWxzZQorY2xhc3MgV2ViQ29yZU1vdGlvbk1hbmFnZXI7CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEZXZpY2VNb3Rpb25DbGllbnRJT1MgOiBwdWJs
aWMgRGV2aWNlTW90aW9uQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxE
ZXZpY2VNb3Rpb25DbGllbnRJT1M+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IERldmljZU1vdGlvbkNsaWVudElPUygpKTsKKyAgICB9CisgICAgRGV2aWNlTW90
aW9uQ2xpZW50SU9TKCk7CisgICAgdmlydHVhbCB+RGV2aWNlTW90aW9uQ2xpZW50SU9TKCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRyb2xsZXIoRGV2aWNlTW90aW9uQ29udHJv
bGxlciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgRGV2aWNlTW90aW9uRGF0YSogbGFzdE1vdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkZXZpY2VNb3Rpb25Db250cm9sbGVyRGVzdHJveWVkKCkgT1ZFUlJJREU7CisK
KyAgICB2b2lkIG1vdGlvbkNoYW5nZWQoZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBk
b3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CisKK3ByaXZhdGU6CisgICAg
V2ViQ29yZU1vdGlvbk1hbmFnZXIqIG1fbW90aW9uTWFuYWdlcjsKKyAgICBEZXZpY2VNb3Rpb25D
b250cm9sbGVyKiBtX2NvbnRyb2xsZXI7CisgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE+IG1f
Y3VycmVudERldmljZU1vdGlvbkRhdGE7CisgICAgYm9vbCBtX3VwZGF0aW5nOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGV2aWNlTW90aW9uQ2xpZW50SU9TX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EZXZpY2VNb3Rpb25DbGll
bnRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlTW90aW9uQ2xpZW50
SU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjgyY2U5MWFiM2Q2NGQ5MTEyODgzMWI1MmQxODdjNGY2OTc1YWMy
OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNl
TW90aW9uQ2xpZW50SU9TLm1tCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaW1wb3J0
ICJEZXZpY2VNb3Rpb25DbGllbnRJT1MuaCIKKworI2ltcG9ydCAiV2ViQ29yZU1vdGlvbk1hbmFn
ZXIuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEZXZp
Y2VNb3Rpb25DbGllbnRJT1M6OkRldmljZU1vdGlvbkNsaWVudElPUygpCisgICAgOiBEZXZpY2VN
b3Rpb25DbGllbnQoKQorICAgICwgbV9tb3Rpb25NYW5hZ2VyKG51bGxwdHIpCisgICAgLCBtX3Vw
ZGF0aW5nKDApCit7Cit9CisKK0RldmljZU1vdGlvbkNsaWVudElPUzo6fkRldmljZU1vdGlvbkNs
aWVudElPUygpCit7Cit9CisKK3ZvaWQgRGV2aWNlTW90aW9uQ2xpZW50SU9TOjpzZXRDb250cm9s
bGVyKERldmljZU1vdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCit7CisgICAgbV9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKK30KKwordm9pZCBEZXZpY2VNb3Rpb25DbGllbnRJT1M6OnN0YXJ0
VXBkYXRpbmcoKQoreworICAgIG1fdXBkYXRpbmcgPSB0cnVlOworCisgICAgaWYgKCFtX21vdGlv
bk1hbmFnZXIpCisgICAgICAgIG1fbW90aW9uTWFuYWdlciA9IFtXZWJDb3JlTW90aW9uTWFuYWdl
ciBzaGFyZWRNYW5hZ2VyXTsKKworICAgIFttX21vdGlvbk1hbmFnZXIgYWRkTW90aW9uQ2xpZW50
OnRoaXNdOworfQorCit2b2lkIERldmljZU1vdGlvbkNsaWVudElPUzo6c3RvcFVwZGF0aW5nKCkK
K3sKKyAgICBtX3VwZGF0aW5nID0gZmFsc2U7CisKKyAgICAvLyBSZW1vdmUgb3Vyc2VsdmVzIGFz
IHRoZSBtb3Rpb24gY2xpZW50IHNvIHdlIHdvbid0IGdldCB1cGRhdGVzLgorICAgIFttX21vdGlv
bk1hbmFnZXIgcmVtb3ZlTW90aW9uQ2xpZW50OnRoaXNdOworfQorCitEZXZpY2VNb3Rpb25EYXRh
KiBEZXZpY2VNb3Rpb25DbGllbnRJT1M6Omxhc3RNb3Rpb24oKSBjb25zdAoreworICAgIHJldHVy
biBtX2N1cnJlbnREZXZpY2VNb3Rpb25EYXRhLmdldCgpOworfQorCit2b2lkIERldmljZU1vdGlv
bkNsaWVudElPUzo6ZGV2aWNlTW90aW9uQ29udHJvbGxlckRlc3Ryb3llZCgpCit7CisgICAgW21f
bW90aW9uTWFuYWdlciByZW1vdmVNb3Rpb25DbGllbnQ6dGhpc107Cit9CisKK3ZvaWQgRGV2aWNl
TW90aW9uQ2xpZW50SU9TOjptb3Rpb25DaGFuZ2VkKGRvdWJsZSB4QWNjZWxlcmF0aW9uLCBkb3Vi
bGUgeUFjY2VsZXJhdGlvbiwgZG91YmxlIHpBY2NlbGVyYXRpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgeEFjY2VsZXJhdGlvbkluY2x1ZGlu
Z0dyYXZpdHksIGRvdWJsZSB5QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgZG91YmxlIHpB
Y2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIHhSb3RhdGlvblJhdGUsIGRvdWJsZSB5Um90YXRpb25S
YXRlLCBkb3VibGUgelJvdGF0aW9uUmF0ZSkKK3sKKyAgICBpZiAoIW1fdXBkYXRpbmcpCisgICAg
ICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCisgICAgVU5VU0VEX1BB
UkFNKHhBY2NlbGVyYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh5QWNjZWxlcmF0aW9uKTsKKyAg
ICBVTlVTRURfUEFSQU0oekFjY2VsZXJhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHhBY2NlbGVy
YXRpb25JbmNsdWRpbmdHcmF2aXR5KTsKKyAgICBVTlVTRURfUEFSQU0oeUFjY2VsZXJhdGlvbklu
Y2x1ZGluZ0dyYXZpdHkpOworICAgIFVOVVNFRF9QQVJBTSh6QWNjZWxlcmF0aW9uSW5jbHVkaW5n
R3Jhdml0eSk7CisgICAgVU5VU0VEX1BBUkFNKHhSb3RhdGlvblJhdGUpOworICAgIFVOVVNFRF9Q
QVJBTSh5Um90YXRpb25SYXRlKTsKKyAgICBVTlVTRURfUEFSQU0oelJvdGF0aW9uUmF0ZSk7CisK
KyAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmF0aW9uPiBhY2NlbGVyYXRpb25J
bmNsdWRpbmdHcmF2aXR5ID0gRGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmF0aW9uOjpjcmVhdGUo
ZmFsc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMCk7CisgICAgUmVmUHRyPERldmljZU1vdGlvbkRh
dGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxlcmF0aW9uID0gRGV2aWNlTW90aW9uRGF0YTo6QWNjZWxl
cmF0aW9uOjpjcmVhdGUoZmFsc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFsc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmFsc2UsIDApOworICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlvblJhdGU+
IHJvdGF0aW9uUmF0ZSA9IERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uUmF0ZTo6Y3JlYXRlKGZh
bHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAwKTsKKyNl
bHNlCisgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxlcmF0
aW9uSW5jbHVkaW5nR3Jhdml0eSA9IERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbjo6Y3Jl
YXRlKHRydWUsIHhBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB5QWNjZWxlcmF0
aW9uSW5jbHVkaW5nR3Jhdml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgekFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkp
OworICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+IGFjY2VsZXJhdGlv
biA9IDA7CisgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uUmF0ZT4gcm90YXRp
b25SYXRlID0gMDsKKyAgICBpZiAoW21fbW90aW9uTWFuYWdlciBneXJvQXZhaWxhYmxlXSkgewor
ICAgICAgICBhY2NlbGVyYXRpb24gPSBEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb246OmNy
ZWF0ZSh0cnVlLCB4QWNjZWxlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB5QWNjZWxlcmF0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cnVlLCB6QWNjZWxlcmF0aW9uKTsKKyAgICAgICAgcm90YXRpb25SYXRlID0gRGV2aWNlTW90
aW9uRGF0YTo6Um90YXRpb25SYXRlOjpjcmVhdGUodHJ1ZSwgeFJvdGF0aW9uUmF0ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJ1ZSwgeVJvdGF0aW9uUmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgelJvdGF0aW9uUmF0ZSk7CisgICAgfQor
I2VuZGlmIC8vIFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCisKKyAgICBtX2N1cnJlbnREZXZpY2VN
b3Rpb25EYXRhID0gRGV2aWNlTW90aW9uRGF0YTo6Y3JlYXRlKGFjY2VsZXJhdGlvbiwgYWNjZWxl
cmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgcm90YXRpb25SYXRlLCB0cnVlLCBrTW90aW9uVXBkYXRl
SW50ZXJ2YWwpOworICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlRGV2aWNlTW90aW9uKG1fY3Vy
cmVudERldmljZU1vdGlvbkRhdGEuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVi
ZTdmNTFlMjgzMzg4MjI3MjlmMzU4ZDlkMGY2MzBkNjFhMWMxZmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1Mu
aApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERldmljZU9yaWVudGF0aW9uQ2xp
ZW50SU9TX2gKKyNkZWZpbmUgRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1NfaAorCisjaW5jbHVk
ZSAiRGV2aWNlT3JpZW50YXRpb25DbGllbnQuaCIKKyNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlv
bkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlvbkRhdGEuaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmZGVm
IF9fT0JKQ19fCitAY2xhc3MgV2ViQ29yZU1vdGlvbk1hbmFnZXI7CisjZWxzZQorY2xhc3MgV2Vi
Q29yZU1vdGlvbk1hbmFnZXI7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUyA6IHB1YmxpYyBEZXZpY2VPcmllbnRhdGlvbkNs
aWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RGV2aWNlT3JpZW50YXRpb25D
bGllbnRJT1M+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERl
dmljZU9yaWVudGF0aW9uQ2xpZW50SU9TKCkpOworICAgIH0KKyAgICBEZXZpY2VPcmllbnRhdGlv
bkNsaWVudElPUygpOworICAgIHZpcnR1YWwgfkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TKCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRyb2xsZXIoRGV2aWNlT3JpZW50YXRp
b25Db250cm9sbGVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmco
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBEZXZpY2VPcmllbnRhdGlvbkRhdGEqIGxhc3RPcmllbnRhdGlvbigpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXJE
ZXN0cm95ZWQoKSBPVkVSUklERTsKKworICAgIHZvaWQgb3JpZW50YXRpb25DaGFuZ2VkKGRvdWJs
ZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKKworcHJpdmF0ZToKKyAgICBXZWJD
b3JlTW90aW9uTWFuYWdlciogbV9tb3Rpb25NYW5hZ2VyOworICAgIERldmljZU9yaWVudGF0aW9u
Q29udHJvbGxlciogbV9jb250cm9sbGVyOworICAgIFJlZlB0cjxEZXZpY2VPcmllbnRhdGlvbkRh
dGE+IG1fY3VycmVudERldmljZU9yaWVudGF0aW9uOworICAgIGJvb2wgbV91cGRhdGluZzsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERldmljZU9yaWVudGF0aW9u
Q2xpZW50SU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EZXZp
Y2VPcmllbnRhdGlvbkNsaWVudElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9E
ZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMTZhNTY2YzI4MmFjYTFh
ZGFkODRmYWRmNDc5ZjU4ZDA5ODFjNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1tCkBAIC0wLDAgKzEs
MTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorCisjaW1wb3J0ICJEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5o
IgorCisjaW1wb3J0ICJXZWJDb3JlTW90aW9uTWFuYWdlci5oIgorCisjaWYgUExBVEZPUk0oSU9T
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpE
ZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUygpCisgICAgOiBEZXZpY2VPcmllbnRhdGlvbkNsaWVu
dCgpCisgICAgLCBtX21vdGlvbk1hbmFnZXIobnVsbHB0cikKKyAgICAsIG1fdXBkYXRpbmcoMCkK
K3sKK30KKworRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1M6On5EZXZpY2VPcmllbnRhdGlvbkNs
aWVudElPUygpCit7Cit9CisKK3ZvaWQgRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1M6OnNldENv
bnRyb2xsZXIoRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKiBjb250cm9sbGVyKQoreworICAg
IG1fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cit9CisKK3ZvaWQgRGV2aWNlT3JpZW50YXRpb25D
bGllbnRJT1M6OnN0YXJ0VXBkYXRpbmcoKQoreworICAgIG1fdXBkYXRpbmcgPSB0cnVlOworCisg
ICAgaWYgKCFtX21vdGlvbk1hbmFnZXIpCisgICAgICAgIG1fbW90aW9uTWFuYWdlciA9IFtXZWJD
b3JlTW90aW9uTWFuYWdlciBzaGFyZWRNYW5hZ2VyXTsKKworICAgIFttX21vdGlvbk1hbmFnZXIg
YWRkT3JpZW50YXRpb25DbGllbnQ6dGhpc107Cit9CisKK3ZvaWQgRGV2aWNlT3JpZW50YXRpb25D
bGllbnRJT1M6OnN0b3BVcGRhdGluZygpCit7CisgICAgbV91cGRhdGluZyA9IGZhbHNlOworCisg
ICAgLy8gUmVtb3ZlIG91cnNlbHZlcyBhcyB0aGUgb3JpZW50YXRpb24gY2xpZW50IHNvIHdlIHdv
bid0IGdldCB1cGRhdGVzLgorICAgIFttX21vdGlvbk1hbmFnZXIgcmVtb3ZlT3JpZW50YXRpb25D
bGllbnQ6dGhpc107Cit9CisKK0RldmljZU9yaWVudGF0aW9uRGF0YSogRGV2aWNlT3JpZW50YXRp
b25DbGllbnRJT1M6Omxhc3RPcmllbnRhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3Vy
cmVudERldmljZU9yaWVudGF0aW9uLmdldCgpOworfQorCit2b2lkIERldmljZU9yaWVudGF0aW9u
Q2xpZW50SU9TOjpkZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXJEZXN0cm95ZWQoKQoreworICAg
IFttX21vdGlvbk1hbmFnZXIgcmVtb3ZlT3JpZW50YXRpb25DbGllbnQ6dGhpc107Cit9CisgICAg
Cit2b2lkIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpvcmllbnRhdGlvbkNoYW5nZWQoZG91
YmxlIGFscGhhLCBkb3VibGUgYmV0YSwgZG91YmxlIGdhbW1hLCBkb3VibGUgY29tcGFzc0hlYWRp
bmcsIGRvdWJsZSBjb21wYXNzQWNjdXJhY3kpCit7CisgICAgaWYgKCFtX3VwZGF0aW5nKQorICAg
ICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1NfU0lNVUxBVE9SKQorICAgIFVOVVNFRF9Q
QVJBTShhbHBoYSk7CisgICAgVU5VU0VEX1BBUkFNKGJldGEpOworICAgIFVOVVNFRF9QQVJBTShn
YW1tYSk7CisgICAgVU5VU0VEX1BBUkFNKGNvbXBhc3NIZWFkaW5nKTsKKyAgICBVTlVTRURfUEFS
QU0oY29tcGFzc0FjY3VyYWN5KTsKKyAgICBtX2N1cnJlbnREZXZpY2VPcmllbnRhdGlvbiA9IERl
dmljZU9yaWVudGF0aW9uRGF0YTo6Y3JlYXRlKGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFs
c2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMCk7CisjZWxzZQorICAgIG1fY3VycmVudERl
dmljZU9yaWVudGF0aW9uID0gRGV2aWNlT3JpZW50YXRpb25EYXRhOjpjcmVhdGUodHJ1ZSwgYWxw
aGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRydWUsIGJldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGdhbW1hLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBjb21wYXNzSGVhZGlu
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ1ZSwgY29tcGFzc0FjY3VyYWN5KTsKKyNlbmRpZgorICAgIG1fY29udHJvbGxlci0+
ZGlkQ2hhbmdlRGV2aWNlT3JpZW50YXRpb24obV9jdXJyZW50RGV2aWNlT3JpZW50YXRpb24uZ2V0
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvS2V5RXZlbnRJT1Mu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvS2V5RXZlbnRJT1MubW0KaW5kZXggODI0
YWI3ZjFiY2IwNDYwMGE5NDYwYmYwZTM5MjAxMTY1YzQ1YTVmNC4uMzkxYjZhYTk5MzBiMWJhNGQy
MDUwMGQ3ZmE3NzZkMGQ1Mjc2Y2U4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL0tleUV2ZW50SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9L
ZXlFdmVudElPUy5tbQpAQCAtMjgsNTkgKzI4LDEyIEBACiAKICNpZiBQTEFURk9STShJT1MpCiAK
LSNpbXBvcnQgIktleUV2ZW50Q29jb2EuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW1wb3J0ICJXZWJFdmVudC5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBTdHJpbmcga2V5SWRlbnRp
ZmllckZvcktleUV2ZW50KFdlYkV2ZW50ICpldmVudCkKLXsKLSAgICBOU1N0cmluZyAqcyA9IGV2
ZW50LmNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczsKLSAgICBpZiAoW3MgbGVuZ3RoXSAhPSAx
KSB7Ci0gICAgICAgIExPRyhFdmVudHMsICJyZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG51bWJlciBv
ZiBjaGFyYWN0ZXJzIGluIGtleSBldmVudDogJXUiLCBbcyBsZW5ndGhdKTsKLSAgICAgICAgcmV0
dXJuICJVbmlkZW50aWZpZWQiOwotICAgIH0KLQotICAgIHVuaWNoYXIgYyA9IENGU3RyaW5nR2V0
Q2hhcmFjdGVyQXRJbmRleCgoQ0ZTdHJpbmdSZWYpcywgMCk7Ci0gICAgcmV0dXJuIGtleUlkZW50
aWZpZXJGb3JDaGFyQ29kZShjKTsKLX0KLQotUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9y
bUtleWJvYXJkRXZlbnQoV2ViRXZlbnQgKmV2ZW50KQotICAgIDogUGxhdGZvcm1FdmVudChldmVu
dC50eXBlID09IFdlYkV2ZW50S2V5VXAgPyBQbGF0Zm9ybUV2ZW50OjpLZXlVcCA6IFBsYXRmb3Jt
RXZlbnQ6OktleURvd24sIGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrU2hp
ZnQsIGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrQ29udHJvbCwgZXZlbnQu
bW9kaWZpZXJGbGFncyAmIFdlYkV2ZW50RmxhZ01hc2tBbHRlcm5hdGUsIGV2ZW50Lm1vZGlmaWVy
RmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrQ29tbWFuZCkKLSAgICAsIG1fdGV4dChldmVudC5jaGFy
YWN0ZXJzKQotICAgICwgbV91bm1vZGlmaWVkVGV4dChldmVudC5jaGFyYWN0ZXJzSWdub3JpbmdN
b2RpZmllcnMpCi0gICAgLCBtX2tleUlkZW50aWZpZXIoa2V5SWRlbnRpZmllckZvcktleUV2ZW50
KGV2ZW50KSkKLSAgICAsIG1fYXV0b1JlcGVhdChldmVudC5pc0tleVJlcGVhdGluZykKLSAgICAs
IG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlKGV2ZW50LmtleUNvZGUpCi0gICAgLCBtX2lzS2V5cGFk
KGZhbHNlKSAvLyBpUGhvbmUgZG9lcyBub3QgZGlzdGluZ3Vpc2ggdGhlIG51bXBhZCA8cmRhcjov
L3Byb2JsZW0vNzE5MDgzNT4KLSAgICAsIG1fRXZlbnQoZXZlbnQpCi17Ci0gICAgQVNTRVJUKGV2
ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlEb3duIHx8IGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlV
cCk7Ci0KLSAgICAvLyBBbHdheXMgdXNlIDEzIGZvciBFbnRlci9SZXR1cm4gLS0gd2UgZG9uJ3Qg
d2FudCB0byB1c2UgQXBwS2l0J3MgZGlmZmVyZW50IGNoYXJhY3RlciBmb3IgRW50ZXIuCi0gICAg
aWYgKG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID09ICdccicpIHsKLSAgICAgICAgbV90ZXh0ID0g
IlxyIjsKLSAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9ICJcciI7Ci0gICAgfQotCi0gICAgLy8g
VGhlIGFkanVzdG1lbnRzIGJlbG93IGFyZSBvbmx5IG5lZWRlZCBpbiBiYWNrd2FyZCBjb21wYXRp
YmlsaXR5IG1vZGUsIGJ1dCB3ZSBjYW5ub3QgdGVsbCB3aGF0IG1vZGUgd2UgYXJlIGluIGZyb20g
aGVyZS4KLQotICAgIC8vIFR1cm4gMHg3RiBpbnRvIDgsIGJlY2F1c2UgYmFja3NwYWNlIG5lZWRz
IHRvIGFsd2F5cyBiZSA4LgotICAgIGlmIChtX3RleHQgPT0gIlx4N0YiKQotICAgICAgICBtX3Rl
eHQgPSAiXHg4IjsKLSAgICBpZiAobV91bm1vZGlmaWVkVGV4dCA9PSAiXHg3RiIpCi0gICAgICAg
IG1fdW5tb2RpZmllZFRleHQgPSAiXHg4IjsKLSAgICAvLyBBbHdheXMgdXNlIDkgZm9yIHRhYiAt
LSB3ZSBkb24ndCB3YW50IHRvIHVzZSBBcHBLaXQncyBkaWZmZXJlbnQgY2hhcmFjdGVyIGZvciBz
aGlmdC10YWIuCi0gICAgaWYgKG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID09IDkpIHsKLSAgICAg
ICAgbV90ZXh0ID0gIlx4OSI7Ci0gICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHg5IjsKLSAg
ICB9Ci19Ci0KIHZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3du
RXZlbnQoVHlwZSB0eXBlLCBib29sIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCiB7CiAgICAg
Ly8gQ2FuIG9ubHkgY2hhbmdlIHR5cGUgZnJvbSBLZXlEb3duIHRvIFJhd0tleURvd24gb3IgQ2hh
ciwgYXMgd2UgbGFjayBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgY29udmVyc2lvbnMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTUlNRVR5cGVSZWdpc3RyeUlPUy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9NSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRmNDg1YTIwZDdjMWM3MjU4YWFhNWExMjViNmMyNjlmOWNjZTVmYzAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTUlNRVR5cGVSZWdpc3RyeUlP
Uy5tbQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKworI2luY2x1ZGUgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgCit7CitTdHJpbmcgTUlNRVR5
cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nICZleHQpCit7
CisgICAgcmV0dXJuIHdrR2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0KTsKK30KKworVmVjdG9y
PFN0cmluZz4gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0RXh0ZW5zaW9uc0Zvck1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgLyp0eXBlKi8pCit7CisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Cit9CisK
K1N0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIC8qdHlwZSovKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwor
Ym9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTWVtb3J5UHJlc3N1
cmVIYW5kbGVySU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiNDRmMjNiM2U1MWNlMWY3YThlYzkzNGE3MTcz
ZDRhNGQ5NWNjYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIKKworI2ltcG9ydCAiTG9nZ2luZy5o
IgorI2ltcG9ydCAiU3lzdGVtTWVtb3J5LmgiCisjaW1wb3J0ICJXZWJDb3JlVGhyZWFkLmgiCisj
aW1wb3J0IDxsaWJrZXJuL09TQXRvbWljLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIHZvaWQgcmVzcG9uZFRvTWVtb3J5UHJlc3N1cmVDYWxsYmFjayhDRlJ1bkxvb3BPYnNlcnZl
clJlZiBvYnNlcnZlciwgQ0ZSdW5Mb29wQWN0aXZpdHkgLyphY3Rpdml0eSovLCB2b2lkKiAvKmlu
Zm8qLykKK3sKKyAgICBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5yZXNwb25kVG9NZW1vcnlQcmVz
c3VyZUlmTmVlZGVkKCk7CisgICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJJbnZhbGlkYXRlKG9ic2VydmVy
KTsKKyAgICBDRlJlbGVhc2Uob2JzZXJ2ZXIpOworfQorCit2b2lkIE1lbW9yeVByZXNzdXJlSGFu
ZGxlcjo6aW5zdGFsbE1lbW9yeVJlbGVhc2VCbG9jayh2b2lkIChecmVsZWFzZU1lbW9yeUJsb2Nr
KSgpLCBib29sIGNsZWFyUHJlc3N1cmVPbk1lbW9yeVJlbGVhc2UpCit7CisgICAgaWYgKG1faW5z
dGFsbGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9yZWxlYXNlTWVtb3J5QmxvY2sgPSBCbG9j
a19jb3B5KHJlbGVhc2VNZW1vcnlCbG9jayk7CisgICAgbV9jbGVhclByZXNzdXJlT25NZW1vcnlS
ZWxlYXNlID0gY2xlYXJQcmVzc3VyZU9uTWVtb3J5UmVsZWFzZTsKKyAgICBtX2luc3RhbGxlZCA9
IHRydWU7Cit9CisKK3ZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzZXRSZWNlaXZlZE1lbW9y
eVByZXNzdXJlKE1lbW9yeVByZXNzdXJlUmVhc29uIHJlYXNvbikKK3sKKyAgICBPU0F0b21pY1Rl
c3RBbmRTZXQoMCwgJm1fcmVjZWl2ZWRNZW1vcnlQcmVzc3VyZSk7CisKKyAgICB7CisgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX29ic2VydmVyTXV0ZXgpOworICAgICAgICBpZiAoIW1fb2Jz
ZXJ2ZXIpIHsKKyAgICAgICAgICAgIG1fb2JzZXJ2ZXIgPSBDRlJ1bkxvb3BPYnNlcnZlckNyZWF0
ZShOVUxMLCBrQ0ZSdW5Mb29wQmVmb3JlV2FpdGluZyB8IGtDRlJ1bkxvb3BFeGl0LCBOTyAvKiBk
b24ndCByZXBlYXQgKi8sCisgICAgICAgICAgICAgICAgMCwgV2ViQ29yZTo6cmVzcG9uZFRvTWVt
b3J5UHJlc3N1cmVDYWxsYmFjaywgTlVMTCk7CisgICAgICAgICAgICBDRlJ1bkxvb3BBZGRPYnNl
cnZlcihXZWJUaHJlYWRSdW5Mb29wKCksIG1fb2JzZXJ2ZXIsIGtDRlJ1bkxvb3BDb21tb25Nb2Rl
cyk7CisgICAgICAgICAgICBDRlJ1bkxvb3BXYWtlVXAoV2ViVGhyZWFkUnVuTG9vcCgpKTsKKyAg
ICAgICAgfQorICAgICAgICBtX21lbW9yeVByZXNzdXJlUmVhc29uIHw9IHJlYXNvbjsKKyAgICB9
Cit9CisKK2Jvb2wgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpoYXNSZWNlaXZlZE1lbW9yeVByZXNz
dXJlKCkKK3sKKyAgICByZXR1cm4gT1NBdG9taWNPcjMyKDAsICZtX3JlY2VpdmVkTWVtb3J5UHJl
c3N1cmUpOworfQorCit2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6Y2xlYXJNZW1vcnlQcmVz
c3VyZSgpCit7CisgICAgT1NBdG9taWNUZXN0QW5kQ2xlYXIoMCwgJm1fcmVjZWl2ZWRNZW1vcnlQ
cmVzc3VyZSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29ic2VydmVy
TXV0ZXgpOworICAgICAgICBtX21lbW9yeVByZXNzdXJlUmVhc29uID0gTWVtb3J5UHJlc3N1cmVS
ZWFzb25Ob25lOworICAgIH0KK30KKworYm9vbCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNob3Vs
ZFdhaXRGb3JNZW1vcnlDbGVhck1lc3NhZ2UoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X29ic2VydmVyTXV0ZXgpOworICAgIHJldHVybiBtX21lbW9yeVByZXNzdXJlUmVhc29uICYgTWVt
b3J5UHJlc3N1cmVSZWFzb25WTVN0YXR1czsKK30KKwordm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRs
ZXI6OnJlc3BvbmRUb01lbW9yeVByZXNzdXJlSWZOZWVkZWQoKQoreworICAgIEFTU0VSVChXZWJU
aHJlYWRJc0xvY2tlZE9yRGlzYWJsZWQoKSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX29ic2VydmVyTXV0ZXgpOworICAgICAgICBtX29ic2VydmVyID0gMDsKKyAgICB9
CisKKyAgICBpZiAoaGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3VyZSgpKSB7CisgICAgICAgIEFTU0VS
VChtX3JlbGVhc2VNZW1vcnlCbG9jayk7CisgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIkhh
bmRsZSBtZW1vcnkgcHJlc3N1cmUgYXQgJXMiLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgICAg
ICAgbV9yZWxlYXNlTWVtb3J5QmxvY2soKTsKKyAgICAgICAgaWYgKG1fY2xlYXJQcmVzc3VyZU9u
TWVtb3J5UmVsZWFzZSkKKyAgICAgICAgICAgIGNsZWFyTWVtb3J5UHJlc3N1cmUoKTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Bhc3RlYm9hcmRJT1MubW0KaW5kZXggODdiNTUxNzkxYWQxY2QzYjgxNDc1ZTQ4MTNlMjE0
ZjhhYTcxN2U4ZC4uZjI1OTI3NThiYWUxNzkzZTUxYzEyNTVmM2QyMDJmNjViNjFlZjc2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KQEAgLTM1LDIw
ICszNSwyNCBAQAogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyLmgiCiAj
aW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2ltcG9ydCAiSFRNTENvbnZlcnRlci5oIgog
I2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxOYW1lcy5oIgogI2ltcG9ydCAi
SFRNTFBhcnNlcklkaW9tcy5oIgotI2ltcG9ydCAiVVJMLmgiCisjaW1wb3J0ICJJbWFnZS5oIgog
I2ltcG9ydCAiTGVnYWN5V2ViQXJjaGl2ZS5oIgogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAi
UGFzdGVib2FyZFN0cmF0ZWd5LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNp
bXBvcnQgIlJlbmRlckltYWdlLmgiCisjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3NJ
T1MuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIK
ICNpbXBvcnQgIlRleHQuaCIKKyNpbXBvcnQgIlVSTC5oIgorI2ltcG9ydCAiV2ViTlNBdHRyaWJ1
dGVkU3RyaW5nRXh0cmFzLmgiCiAjaW1wb3J0ICJodG1sZWRpdGluZy5oIgogI2ltcG9ydCAibWFy
a3VwLmgiCi0jaW1wb3J0ICJXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIKICNpbXBvcnQg
PE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KIAogQGludGVyZmFjZSBO
U0F0dHJpYnV0ZWRTdHJpbmcgKE5TQXR0cmlidXRlZFN0cmluZ0tpdEFkZGl0aW9ucykKQEAgLTEy
Niw5NyArMTMwLDI0IEBAIFBhc3NPd25QdHI8UGFzdGVib2FyZD4gUGFzdGVib2FyZDo6Y3JlYXRl
UHJpdmF0ZSgpCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYXN0ZWJvYXJkKTsKIH0KIAotdm9p
ZCBQYXN0ZWJvYXJkOjpzZXRGcmFtZShGcmFtZSogZnJhbWUpCit2b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KQogewotICAgIG1fZnJhbWUg
PSBmcmFtZTsKLSAgICBtX2NoYW5nZUNvdW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkt
PnBhc3RlYm9hcmRDaGFuZ2VDb3VudCgpOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVUb1Bhc3RlYm9hcmQoY29udGVudCk7CiB9CiAKLXZvaWQg
UGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgLypj
YW5TbWFydENvcHlPckRlbGV0ZSovLCBGcmFtZSAqZnJhbWUsIFNob3VsZFNlcmlhbGl6ZVNlbGVj
dGVkVGV4dEZvckNsaXBib2FyZCBzaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9h
cmQpCitTdHJpbmcgUGFzdGVib2FyZDo6cmVzb3VyY2VNSU1FVHlwZShjb25zdCBOU1N0cmluZyAq
bWltZVR5cGUpCiB7Ci0gICAgQVNTRVJUKHNlbGVjdGVkUmFuZ2UpOwotICAgIEFTU0VSVChmcmFt
ZSk7Ci0KLSAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgY29u
dGVudCBpbnNpZGUgYW4gYW5jaG9yIHRhZwotICAgIC8vIHdlIG1vdmUgdGhlIHNlbGVjdGlvbiBz
dGFydCB0byBpbmNsdWRlIHRoZSBhbmNob3IuCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBO
b2RlKiBjb21tb25BbmNlc3RvciA9IHNlbGVjdGVkUmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFp
bmVyKGVjKTsKLSAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3IpOwotICAgIE5vZGUqIGVuY2xvc2lu
Z0FuY2hvciA9IGVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9u
QW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFUYWcpOwotICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYg
Y29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoc2VsZWN0ZWRSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpLmFuY2hvck5vZGUoKSksIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSkgPj0gMCkKLSAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2V0U3RhcnQoZW5jbG9zaW5n
QW5jaG9yLCAwLCBlYyk7Ci0KLSAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRh
dGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotCi0g
ICAgLy8gUHV0IFdlYkFyY2hpdmUgb24gdGhlIHBhc3RlYm9hcmQuCi0gICAgUmVmUHRyPExlZ2Fj
eVdlYkFyY2hpdmU+IGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0
aW9uKGZyYW1lKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gYXJjaGl2ZSA/IGFy
Y2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpIDogMDsKLSAgICBpZiAoZGF0YSkKLSAgICAg
ICAgW3JlcHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTooTlNEYXRhICopZGF0YS5nZXQoKSBm
b3JLZXk6V2ViQXJjaGl2ZVBib2FyZFR5cGVdOwotCi0gICAgUmV0YWluUHRyPE5TSFRNTFJlYWRl
cj4gY29udmVydGVyID0gYWRvcHROUyhbW2dldE5TSFRNTFJlYWRlckNsYXNzKCkgYWxsb2NdIGlu
aXRXaXRoRE9NUmFuZ2U6a2l0KHNlbGVjdGVkUmFuZ2UpXSk7Ci0gICAgaWYgKGNvbnZlcnRlcikg
ewotICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbY29udmVy
dGVyLmdldCgpIGF0dHJpYnV0ZWRTdHJpbmddOwotICAgICAgICBOU0RhdGEqIFJURkREYXRhID0g
W2F0dHJpYnV0ZWRTdHJpbmcgUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRl
ZFN0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKLSAgICAgICAgaWYgKFJU
RkREYXRhKQotICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTpSVEZE
RGF0YSBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVJURkRdOwotICAgICAgICBpZiAoW2F0dHJp
YnV0ZWRTdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10pCi0gICAgICAgICAgICBhdHRyaWJ1dGVk
U3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNobWVudENoYXJhY3RlcnMo
YXR0cmlidXRlZFN0cmluZyk7Ci0gICAgICAgIE5TRGF0YSogUlRGRGF0YSA9IFthdHRyaWJ1dGVk
U3RyaW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmluZyBsZW5n
dGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKLSAgICAgICAgaWYgKFJURkRhdGEpCi0gICAg
ICAgICAgICBbcmVwcmVzZW50YXRpb25zLmdldCgpIHNldFZhbHVlOlJURkRhdGEgZm9yS2V5OihO
U1N0cmluZyAqKWtVVFR5cGVSVEZdOwotICAgIH0KLQotICAgIC8vIFB1dCBwbGFpbiBzdHJpbmcg
b24gdGhlIHBhc3RlYm9hcmQuCi0gICAgU3RyaW5nIHRleHQgPSBzaG91bGRTZXJpYWxpemVTZWxl
Y3RlZFRleHRGb3JDbGlwYm9hcmQgPT0gSW5jbHVkZUltYWdlQWx0VGV4dEZvckNsaXBib2FyZAot
ICAgICAgICA/IGZyYW1lLT5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKSA6IGZy
YW1lLT5lZGl0b3IoKS5zZWxlY3RlZFRleHQoKTsKLSAgICB0ZXh0LnJlcGxhY2Uobm9CcmVha1Nw
YWNlLCAnICcpOwotICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6dGV4dCBmb3JL
ZXk6KE5TU3RyaW5nICopa1VUVHlwZVRleHRdOwotCi0gICAgZnJhbWUtPmVkaXRvcigpLmNsaWVu
dCgpLT53cml0ZURhdGFUb1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25zLmdldCgpKTsKKyAgICBy
ZXR1cm4gU3RyaW5nKGFkb3B0Q0YoVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRh
ZyhrVVRUYWdDbGFzc01JTUVUeXBlLCAoQ0ZTdHJpbmdSZWYpbWltZVR5cGUsIE5VTEwpKS5nZXQo
KSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0
ZXh0LCBGcmFtZSAqZnJhbWUpCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9h
cmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKQogewotICAgIEFTU0VSVChmcmFtZSk7Ci0KLSAgICBS
ZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkg
c2V0VmFsdWU6dGV4dCBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVRleHRdOwotICAgIGZyYW1l
LT5lZGl0b3IoKS5jbGllbnQoKS0+d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9u
cy5nZXQoKSk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCBG
cmFtZSogZnJhbWUpCi17Ci0gICAgQVNTRVJUKG5vZGUpOwotCi0gICAgaWYgKCEobm9kZS0+cmVu
ZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdlKCkpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBSZW5kZXJJbWFnZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRl
cmVyKCkpOwotICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJ
bWFnZSgpOwotICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJy
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2Ut
PmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwotICAgIEFTU0VSVChpbWFnZSk7Ci0KLSAgICBS
ZXRhaW5QdHI8TlNEYXRhPiBpbWFnZURhdGEgPSBpbWFnZS0+ZGF0YSgpLT5jcmVhdGVOU0RhdGEo
KTsKLQotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gZGljdGlvbmFyeSA9IGFkb3B0TlMoW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgTlNTdHJpbmcgKm1pbWVUeXBlID0gY2FjaGVk
SW1hZ2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IHV0aSA9IGFkb3B0Q0YoVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZyhrVVRU
YWdDbGFzc01JTUVUeXBlLCAoQ0ZTdHJpbmdSZWYpbWltZVR5cGUsIE5VTEwpKTsKLSAgICBpZiAo
dXRpKSB7Ci0gICAgICAgIFtkaWN0aW9uYXJ5LmdldCgpIHNldE9iamVjdDppbWFnZURhdGEuZ2V0
KCkgZm9yS2V5OihOU1N0cmluZyAqKXV0aS5nZXQoKV07Ci0gICAgICAgIFtkaWN0aW9uYXJ5Lmdl
dCgpIHNldE9iamVjdDooTlNTdHJpbmcgKilub2RlLT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0
cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG5vZGUpLT5nZXRBdHRyaWJ1dGUoInNyYyIpKSkgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVV
UkxdOwotICAgIH0KLSAgICBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPndyaXRlRGF0YVRvUGFz
dGVib2FyZChkaWN0aW9uYXJ5LmdldCgpKTsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJkKHBhc3RlYm9hcmRJbWFnZSk7CiB9
CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiwgU21hcnRS
ZXBsYWNlT3B0aW9uKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJp
bmcmIHRleHQsIFNtYXJ0UmVwbGFjZU9wdGlvbikKIHsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJkKGtVVFR5cGVUZXh0LCB0
ZXh0KTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBhc3RlYm9hcmQoY29uc3QgUGFzdGVi
b2FyZCYpCkBAIC0yMzAsMjQxICsxNjEsODMgQEAgYm9vbCBQYXN0ZWJvYXJkOjpjYW5TbWFydFJl
cGxhY2UoKQogCiB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZFBsYWluVGV4dCYgdGV4
dCkKIHsKLSAgICBSZXRhaW5QdHI8TlNBcnJheT4gcGFzdGVib2FyZEl0ZW0gPSBtX2ZyYW1lLT5l
ZGl0b3IoKS5jbGllbnQoKS0+cmVhZERhdGFGcm9tUGFzdGVib2FyZCgoTlNTdHJpbmcgKilrVVRU
eXBlVGV4dCwgMCk7Ci0KLSAgICBpZiAoW3Bhc3RlYm9hcmRJdGVtLmdldCgpIGNvdW50XSA9PSAw
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZCB2YWx1ZSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQo
KSBvYmplY3RBdEluZGV4OjBdOwotICAgIEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNT
dHJpbmcgY2xhc3NdXSk7Ci0gICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBj
bGFzc11dKQotICAgICAgICB0ZXh0LnRleHQgPSAoTlNTdHJpbmcgKil2YWx1ZTsKKyAgICBQYXN0
ZWJvYXJkU3RyYXRlZ3kmIHN0cmF0ZWd5ID0gKnBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJv
YXJkU3RyYXRlZ3koKTsKKyAgICB0ZXh0LnRleHQgPSBzdHJhdGVneS5yZWFkU3RyaW5nRnJvbVBh
c3RlYm9hcmQoMCwga1VUVHlwZVRleHQpOwogfQogCiBzdGF0aWMgTlNBcnJheSogc3VwcG9ydGVk
SW1hZ2VUeXBlcygpCiB7Ci0gICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6KGlk
KWtVVFR5cGVQTkcsIChpZClrVVRUeXBlVElGRiwgKGlkKWtVVFR5cGVKUEVHLCAoaWQpa1VUVHlw
ZUdJRiwgbmlsXTsKKyAgICByZXR1cm4gQFsoaWQpa1VUVHlwZVBORywgKGlkKWtVVFR5cGVUSUZG
LCAoaWQpa1VUVHlwZUpQRUcsIChpZClrVVRUeXBlR0lGXTsKIH0KIAotTlNBcnJheSogUGFzdGVi
b2FyZDo6c3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzKCkKK3ZvaWQgUGFzdGVib2FyZDo6cmVhZChQ
YXN0ZWJvYXJkV2ViQ29udGVudFJlYWRlciYgcmVhZGVyKQogewotICAgIHJldHVybiBbTlNBcnJh
eSBhcnJheVdpdGhPYmplY3RzOihpZClXZWJBcmNoaXZlUGJvYXJkVHlwZSwgKGlkKWtVVFR5cGVQ
TkcsIChpZClrVVRUeXBlVElGRiwgKGlkKWtVVFR5cGVKUEVHLCAoaWQpa1VUVHlwZUdJRiwgKGlk
KWtVVFR5cGVVUkwsIChpZClrVVRUeXBlVGV4dCwgKGlkKWtVVFR5cGVSVEZELCAoaWQpa1VUVHlw
ZVJURiwgbmlsXTsKLX0KLQotI2RlZmluZSBXZWJEYXRhUHJvdG9jb2xTY2hlbWUgQCJ3ZWJraXQt
ZmFrZS11cmwiCi0KLXN0YXRpYyBOU1VSTCogdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChOU1N0
cmluZyAqcmVsYXRpdmVQYXJ0KQotewotICAgIENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZVVUlEQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOwotICAgIE5TU3RyaW5nICpVVUlEU3RyaW5nID0gKE5T
U3RyaW5nICopQ0ZVVUlEQ3JlYXRlU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVVSURSZWYp
OwotICAgIENGUmVsZWFzZShVVUlEUmVmKTsKLSAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTFdp
dGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDovLyVALyVAIiwgV2ViRGF0
YVByb3RvY29sU2NoZW1lLCBVVUlEU3RyaW5nLCByZWxhdGl2ZVBhcnRdXTsKLSAgICBDRlJlbGVh
c2UoVVVJRFN0cmluZyk7Ci0KLSAgICByZXR1cm4gVVJMOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UoRnJh
bWUqIGZyYW1lLCBQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2UpCi17Ci0gICAg
UmVmUHRyPEVsZW1lbnQ+IGltYWdlRWxlbWVudCA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVF
bGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBmYWxzZSk7Ci0KLSAgICBpZiAoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICBs
b2FkZXItPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZS5nZXQoKSk7Ci0KLSAgICBOU1VSTCAq
VVJMID0gcmVzb3VyY2UtPnVybCgpOwotICAgIGltYWdlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhU
TUxOYW1lczo6c3JjQXR0ciwgW1VSTCBpc0ZpbGVVUkxdID8gW1VSTCBhYnNvbHV0ZVN0cmluZ10g
OiByZXNvdXJjZS0+dXJsKCkpOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgZnJh
Z21lbnQtPmFwcGVuZENoaWxkKGltYWdlRWxlbWVudC5yZWxlYXNlKCkpOwotICAgIHJldHVybiBm
cmFnbWVudC5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGRvY3VtZW50RnJhZ21lbnRXaXRoTGluayhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKQotewotICAgIFJlZlB0cjxFbGVtZW50PiBhbmNob3JFbGVtZW50ID0g
ZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoSFRNTE5hbWVzOjphVGFnLCBmYWxzZSk7Ci0KLSAgICBh
bmNob3JFbGVtZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpocmVmQXR0ciwgdXJsU3RyaW5n
KTsKLSAgICBhbmNob3JFbGVtZW50LT5hcHBlbmRDaGlsZChkb2N1bWVudC0+Y3JlYXRlVGV4dE5v
ZGUodXJsU3RyaW5nKSk7Ci0KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBkb2N1bWVudC0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgIGZyYWdtZW50LT5hcHBl
bmRDaGlsZChhbmNob3JFbGVtZW50LnJlbGVhc2UoKSk7Ci0gICAgcmV0dXJuIGZyYWdtZW50LnJl
bGVhc2UoKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1l
bnRGcmFnbWVudFdpdGhSVEYoRnJhbWUqIGZyYW1lLCBOU1N0cmluZyAqcGFzdGVib2FyZFR5cGUs
IE5TRGF0YSogcGFzdGVib2FyZERhdGEpCi17Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmRv
Y3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZzsK
LSAgICBpZiAoW3Bhc3RlYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRU
eXBlUlRGRF0pCi0gICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFJURkQ6cGFzdGVib2FyZERhdGEgZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOwotCi0g
ICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFJURjpwYXN0ZWJvYXJkRGF0YSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07
Ci0KLSAgICBpZiAoIXN0cmluZykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIHdhc0Rl
ZmVycmluZ0NhbGxiYWNrcyA9IGZyYW1lLT5wYWdlKCktPmRlZmVyc0xvYWRpbmcoKTsKLSAgICBp
ZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykKLSAgICAgICAgZnJhbWUtPnBhZ2UoKS0+c2V0RGVm
ZXJzTG9hZGluZyh0cnVlKTsKKyAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kmIHN0cmF0ZWd5ID0gKnBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKTsKIAotICAgIFZlY3RvcjxS
ZWZQdHI8QXJjaGl2ZVJlc291cmNlPj4gcmVzb3VyY2VzOwotICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IGZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+ZG9jdW1lbnRGcmFn
bWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKHN0cmluZy5nZXQoKSwgcmVzb3VyY2VzKTsKKyAgICBp
bnQgbnVtYmVyT2ZJdGVtcyA9IHN0cmF0ZWd5LmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAK
LSAgICBzaXplX3Qgc2l6ZSA9IHJlc291cmNlcy5zaXplKCk7Ci0gICAgaWYgKHNpemUpIHsKLSAg
ICAgICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExv
YWRlcigpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgICAgIGxvYWRlci0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlc1tpXSk7Ci0gICAgfQor
ICAgIGlmICghbnVtYmVyT2ZJdGVtcykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCF3YXNE
ZWZlcnJpbmdDYWxsYmFja3MpCi0gICAgICAgIGZyYW1lLT5wYWdlKCktPnNldERlZmVyc0xvYWRp
bmcoZmFsc2UpOworICAgIE5TQXJyYXkgKnR5cGVzID0gc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVz
KCk7CisgICAgaW50IG51bWJlck9mVHlwZXMgPSBbdHlwZXMgY291bnRdOwogCi0gICAgcmV0dXJu
IGZyYWdtZW50LnJlbGVhc2UoKTsKLX0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9m
SXRlbXM7IGkrKykgeworICAgICAgICBmb3IgKGludCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXgg
PCBudW1iZXJPZlR5cGVzOyB0eXBlSW5kZXgrKykgeworICAgICAgICAgICAgTlNTdHJpbmcgKnR5
cGUgPSBbdHlwZXMgb2JqZWN0QXRJbmRleDp0eXBlSW5kZXhdOwogCi1QYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnRGb3JQYXN0ZWJvYXJkSXRl
bUF0SW5kZXgoRnJhbWUqIGZyYW1lLCBpbnQgaW5kZXgsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJv
b2wmIGNob3NlUGxhaW5UZXh0KQotewotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+ZG9jdW1lbnRGcmFnbWVudEZyb21EZWxl
Z2F0ZShpbmRleCk7Ci0gICAgaWYgKGZyYWdtZW50KQotICAgICAgICByZXR1cm4gZnJhZ21lbnQu
cmVsZWFzZSgpOwotCi0gICAgLy8gRmlyc3QgdHJ5IHRvIGFzayB0aGUgY2xpZW50IGFib3V0IHRo
ZSBzdXBwb3J0ZWQgdHlwZXMuIEl0IHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlIGNsaWVudAotICAg
IC8vIGhhcyBubyBzZWxlY3Rpb24uCi0gICAgTlNBcnJheSAqc3VwcG9ydGVkVHlwZXMgPSBmcmFt
ZS0+ZWRpdG9yKCkuY2xpZW50KCktPnN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlc0ZvckN1cnJlbnRT
ZWxlY3Rpb24oKTsKLSAgICBpZiAoIXN1cHBvcnRlZFR5cGVzKQotICAgICAgICBzdXBwb3J0ZWRU
eXBlcyA9IHN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlcygpOwotICAgIGludCBudW1iZXJPZlR5cGVz
ID0gW3N1cHBvcnRlZFR5cGVzIGNvdW50XTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
YmVyT2ZUeXBlczsgaSsrKSB7Ci0gICAgICAgIE5TU3RyaW5nICp0eXBlID0gW3N1cHBvcnRlZFR5
cGVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIFJldGFpblB0cjxOU0FycmF5PiBwYXN0ZWJv
YXJkSXRlbSA9IGZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+cmVhZERhdGFGcm9tUGFzdGVib2Fy
ZCh0eXBlLCBpbmRleCk7Ci0KLSAgICAgICAgaWYgKFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBjb3Vu
dF0gPT0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChbdHlwZSBpc0Vx
dWFsVG9TdHJpbmc6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7Ci0gICAgICAgICAgICBpZiAoIWZy
YW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAg
ICAvLyBXZSBwdXQgW1dlYkFyY2hpdmUgZGF0YV0gb24gdGhlIHBhc3RlYm9hcmQgaW4gLWNvcHk6
IGluc3RlYWQgb2YgdGhlIGFyY2hpdmUgaXRzZWxmIHVudGlsIHRoZXJlIGlzIEFQSSB0byBwcm92
aWRlIHRoZSBXZWJBcmNoaXZlLgotICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gW3Bhc3RlYm9h
cmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgICAgICAgICBSZWZQdHI8TGVnYWN5
V2ViQXJjaGl2ZT4gY29yZUFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoU2hhcmVk
QnVmZmVyOjp3cmFwTlNEYXRhKGRhdGEpLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChjb3JlQXJj
aGl2ZSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IG1haW5SZXNv
dXJjZSA9IGNvcmVBcmNoaXZlLT5tYWluUmVzb3VyY2UoKTsKLSAgICAgICAgICAgICAgICBpZiAo
bWFpblJlc291cmNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5TU3RyaW5nICpNSU1FVHlwZSA9
IG1haW5SZXNvdXJjZS0+bWltZVR5cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1l
LT5sb2FkZXIoKS5jbGllbnQoKS5jYW5TaG93TUlNRVR5cGVBc0hUTUwoTUlNRVR5cGUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IG1hcmt1cFN0cmluZyA9
IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOlttYWluUmVzb3VyY2UtPmRh
dGEoKS0+Y3JlYXRlTlNEYXRhKCkgYXV0b3JlbGVhc2VdIGVuY29kaW5nOk5TVVRGOFN0cmluZ0Vu
Y29kaW5nXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvYWRlci0+YWRkQWxsQXJjaGl2ZVJlc291cmNlcyhjb3JlQXJjaGl2ZS5n
ZXQoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRGcm9tTWFya3VwKCpmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwU3RyaW5nLmdldCgpLCBtYWlu
UmVzb3VyY2UtPnVybCgpLCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwotICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOldlYkFyY2hp
dmVQYm9hcmRUeXBlXSkgeworICAgICAgICAgICAgICAgIGlmIChSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXIgPSBzdHJhdGVneS5yZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQoaSwgV2ViQXJjaGl2
ZVBib2FyZFR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIucmVhZFdlYkFy
Y2hpdmUoYnVmZmVyLnJlbGVhc2UoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcg
KilrVVRUeXBlUlRGRF0pCi0gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRGcmFnbWVudFdpdGhS
VEYoZnJhbWUsIChOU1N0cmluZyAqKWtVVFR5cGVSVEZELCBbcGFzdGVib2FyZEl0ZW0uZ2V0KCkg
b2JqZWN0QXRJbmRleDowXSk7CiAKLSAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzoo
TlNTdHJpbmcgKilrVVRUeXBlUlRGXSkKLSAgICAgICAgICAgIHJldHVybiBkb2N1bWVudEZyYWdt
ZW50V2l0aFJURihmcmFtZSwgKE5TU3RyaW5nICopa1VUVHlwZVJURiwgW3Bhc3RlYm9hcmRJdGVt
LmdldCgpIG9iamVjdEF0SW5kZXg6MF0pOwotCi0gICAgICAgIGlmIChbc3VwcG9ydGVkSW1hZ2VU
eXBlcygpIGNvbnRhaW5zT2JqZWN0OnR5cGVdKSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNT
dHJpbmc+IGZpbGVuYW1lRXh0ZW5zaW9uID0gYWRvcHROUygoTlNTdHJpbmcgKilVVFR5cGVDb3B5
UHJlZmVycmVkVGFnV2l0aENsYXNzKChDRlN0cmluZ1JlZil0eXBlLCBrVVRUYWdDbGFzc0ZpbGVu
YW1lRXh0ZW5zaW9uKSk7Ci0gICAgICAgICAgICBOU1N0cmluZyAqcmVsYXRpdmVVUkxQYXJ0ID0g
W0AiaW1hZ2UiIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmZpbGVuYW1lRXh0ZW5zaW9uLmdldCgp
XTsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gbWltZVR5cGUgPSBhZG9wdE5TKChO
U1N0cmluZyAqKVVUVHlwZUNvcHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3MoKENGU3RyaW5nUmVmKXR5
cGUsIGtVVFRhZ0NsYXNzTUlNRVR5cGUpKTsKLSAgICAgICAgICAgIE5TRGF0YSAqZGF0YSA9IFtw
YXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOwotICAgICAgICAgICAgcmV0dXJu
IGRvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZShmcmFtZSwgQXJjaGl2ZVJlc291cmNl
OjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtbZGF0YSBjb3B5XSBhdXRvcmVsZWFz
ZV0pLCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KHJlbGF0aXZlVVJMUGFydCksIG1pbWVUeXBl
LmdldCgpLCAiIiwgIiIpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRv
U3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVVUkxdKSB7Ci0gICAgICAgICAgICBpZCB2YWx1ZSA9
IFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOwotICAgICAgICAgICAgaWYg
KCFbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNVUkwgY2xhc3NdXSkgewotICAgICAgICAgICAgICAg
IEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNVUkwgY2xhc3NdXSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzoo
TlNTdHJpbmcgKilrVVRUeXBlUlRGRF0pIHsKKyAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gYnVmZmVyID0gc3RyYXRlZ3kucmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGks
IGtVVFR5cGVSVEZEKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLnJlYWRSVEZE
KGJ1ZmZlci5yZWxlYXNlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgTlNVUkwgKnVybCA9IChO
U1VSTCAqKXZhbHVlOwogCi0gICAgICAgICAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS5jbGllbnQo
KS0+aGFzUmljaGx5RWRpdGFibGVTZWxlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChmcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSwgW3VybCBhYnNvbHV0ZVN0cmluZ10pOwotICAgICAgICAgICAgICAg
IGlmIChmcmFnbWVudCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVh
c2UoKTsKKyAgICAgICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICop
a1VUVHlwZVJURl0pIHsKKyAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
YnVmZmVyID0gc3RyYXRlZ3kucmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGksIGtVVFR5cGVSVEYp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIucmVhZFJURihidWZmZXIucmVsZWFz
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKFt1cmwgaXNGaWxlVVJMXSkgewotICAg
ICAgICAgICAgICAgIE5TU3RyaW5nICpsb2NhbFBhdGggPSBbdXJsIHJlbGF0aXZlUGF0aF07Ci0g
ICAgICAgICAgICAgICAgLy8gT25seSBhbGxvdyB1cmwgYXR0YWNobWVudHMgZnJvbSB+L01lZGlh
IGZvciBub3cuCi0gICAgICAgICAgICAgICAgaWYgKCFbbG9jYWxQYXRoIGhhc1ByZWZpeDpbKE5T
U3RyaW5nICopQ1BTaGFyZWRSZXNvdXJjZXNEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1N0
cmluZzpAIi9NZWRpYS9EQ0lNLyJdXSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGZpbGVUeXBlID0gYWRvcHROUygo
TlNTdHJpbmcgKilVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9yVGFnKGtVVFRhZ0Ns
YXNzRmlsZW5hbWVFeHRlbnNpb24sIChDRlN0cmluZ1JlZilbbG9jYWxQYXRoIHBhdGhFeHRlbnNp
b25dLCBOVUxMKSk7Ci0gICAgICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRh
V2l0aENvbnRlbnRzT2ZGaWxlOmxvY2FsUGF0aF07Ci0gICAgICAgICAgICAgICAgaWYgKFVUVHlw
ZUNvbmZvcm1zVG8oKENGU3RyaW5nUmVmKWZpbGVUeXBlLmdldCgpLCBrVVRUeXBlUE5HKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJj
ZShmcmFtZSwgQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRh
KFtbZGF0YSBjb3B5XSBhdXRvcmVsZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAi
aW1hZ2UucG5nIiksIEAiaW1hZ2UvcG5nIiwgIiIsICIiKSk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoVVRUeXBlQ29uZm9ybXNUbygoQ0ZTdHJpbmdSZWYpZmlsZVR5cGUuZ2V0KCksIGtVVFR5
cGVKUEVHKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnRXaXRo
SW1hZ2VSZXNvdXJjZShmcmFtZSwgQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVy
Ojp3cmFwTlNEYXRhKFtbZGF0YSBjb3B5XSBhdXRvcmVsZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVs
YXRpdmVQYXJ0KEAiaW1hZ2UuanBnIiksIEAiaW1hZ2UvanBnIiwgIiIsICIiKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGxpbmsgd2l0aCBVUkwg
dGV4dC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRGcmFnbWVudFdpdGhMaW5rKGZy
YW1lLT5kb2N1bWVudCgpLCBbdXJsIGFic29sdXRlU3RyaW5nXSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoW3N1cHBvcnRlZEltYWdlVHlwZXMoKSBjb250YWluc09iamVjdDp0eXBl
XSkgeworICAgICAgICAgICAgICAgIGlmIChSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBz
dHJhdGVneS5yZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQoaSwgdHlwZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlYWRlci5yZWFkSW1hZ2UoYnVmZmVyLnJlbGVhc2UoKSwgdHlwZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKGFsbG93UGxhaW5UZXh0ICYmIFt0eXBlIGlzRXF1YWxUb1N0cmluZzoo
TlNTdHJpbmcgKilrVVRUeXBlVGV4dF0pIHsKLSAgICAgICAgICAgIGlkIHZhbHVlID0gW3Bhc3Rl
Ym9hcmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgICAgICAgICBpZiAoIVt2YWx1
ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzoo
TlNTdHJpbmcgKilrVVRUeXBlVVJMXSkgeworICAgICAgICAgICAgICAgIFVSTCB1cmwgPSBzdHJh
dGVneS5yZWFkVVJMRnJvbVBhc3RlYm9hcmQoaSwga1VUVHlwZVVSTCk7CisgICAgICAgICAgICAg
ICAgaWYgKCF1cmwuaXNOdWxsKCkgJiYgcmVhZGVyLnJlYWRVUkwodXJsLCBTdHJpbmcoKSkpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVU
ZXh0XSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcgPSBzdHJhdGVneS5yZWFkU3Ry
aW5nRnJvbVBhc3RlYm9hcmQoaSwga1VUVHlwZVRleHQpOworICAgICAgICAgICAgICAgIGlmICgh
c3RyaW5nLmlzTnVsbCgpICYmIHJlYWRlci5yZWFkUGxhaW5UZXh0KHN0cmluZykpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjaG9zZVBs
YWluVGV4dCA9IHRydWU7Ci0gICAgICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJv
bVRleHQoZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIChOU1N0
cmluZyAqKXZhbHVlKTsKLSAgICAgICAgICAgIGlmIChmcmFnbWVudCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcmV0
dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9j
dW1lbnRGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+IC8qY29udGV4dCov
LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKK05TQXJyYXkqIFBh
c3RlYm9hcmQ6OnN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlcygpCiB7Ci0gICAgY2hvc2VQbGFpblRl
eHQgPSBmYWxzZTsKLQotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
aW50IG51bWJlck9mSXRlbXMgPSBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPmdldFBhc3RlYm9h
cmRJdGVtc0NvdW50KCk7Ci0KLSAgICBpZiAoIW51bWJlck9mSXRlbXMpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgLy8gSW4gdGhlIGNvbW1vbiBjYXNlIHRoZXJlIGlzIGp1c3Qgb25lIGl0ZW0g
b24gdGhlIHBhc3RlYm9hcmQsIGF2b2lkIHRoZSBleHBlbnNlIG9mIHRyYW5zZmVycmluZyB0aGUg
Y29udGVudCBvZgotICAgIC8vIGZyYWdtZW50Rm9yQ3VycmVudEl0ZW0gdG8gdGhlIG1haW4gZnJh
Z21lbnQuCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnRG
cmFnbWVudEZvclBhc3RlYm9hcmRJdGVtQXRJbmRleChmcmFtZSwgMCwgYWxsb3dQbGFpblRleHQs
IGNob3NlUGxhaW5UZXh0KTsKLQotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbnVtYmVyT2ZJdGVt
czsgaSsrKSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudEZvckN1
cnJlbnRJdGVtID0gZG9jdW1lbnRGcmFnbWVudEZvclBhc3RlYm9hcmRJdGVtQXRJbmRleChmcmFt
ZSwgaSwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKLSAgICAgICAgaWYgKCFmcmFn
bWVudCkKLSAgICAgICAgICAgIGZyYWdtZW50ID0gZnJhZ21lbnRGb3JDdXJyZW50SXRlbTsKLSAg
ICAgICAgZWxzZSBpZiAoZnJhZ21lbnRGb3JDdXJyZW50SXRlbSAmJiBmcmFnbWVudEZvckN1cnJl
bnRJdGVtLT5maXJzdENoaWxkKCkpIHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0g
ICAgICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoZnJhZ21lbnRGb3JDdXJyZW50SXRlbS0+
Zmlyc3RDaGlsZCgpLCBlYyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnQp
Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci0KLSAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gQFsoaWQpV2ViQXJjaGl2ZVBib2FyZFR5cGUsIChpZClrVVRUeXBlUE5HLCAoaWQp
a1VUVHlwZVRJRkYsIChpZClrVVRUeXBlSlBFRywgKGlkKWtVVFR5cGVHSUYsIChpZClrVVRUeXBl
VVJMLCAoaWQpa1VUVHlwZVRleHQsIChpZClrVVRUeXBlUlRGRCwgKGlkKWtVVFR5cGVSVEZdOwog
fQogCiBib29sIFBhc3RlYm9hcmQ6Omhhc0RhdGEoKQogewotICAgIHJldHVybiBtX2ZyYW1lLT5l
ZGl0b3IoKS5jbGllbnQoKS0+Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKSAhPSAwOworICAgIHJl
dHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFBhc3Rl
Ym9hcmRJdGVtc0NvdW50KCkgIT0gMDsKIH0KIAogc3RhdGljIFN0cmluZyB1dGlUeXBlRnJvbUNv
Y29hVHlwZShOU1N0cmluZyAqdHlwZSkKQEAgLTU0MCw3ICszMTMsNyBAQCBTdHJpbmcgUGFzdGVi
b2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgICAgICAgICBjb2NvYVZh
bHVlID0gWyhOU1N0cmluZyAqKXZhbHVlIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1h
cHBpbmddOzsKICAgICB9IGVsc2UgaWYgKGNvY29hVHlwZSkgewogICAgICAgICBpZiAoUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gc3RyYXRlZ3kucmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJk
KDAsIGNvY29hVHlwZS5nZXQoKSkpCi0gICAgICAgICAgICBjb2NvYVZhbHVlID0gW1tbTlNTdHJp
bmcgYWxsb2NdIGluaXRXaXRoRGF0YTpidWZmZXItPmNyZWF0ZU5TRGF0YSgpIGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBjb2NvYVZhbHVl
ID0gW1tbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpidWZmZXItPmNyZWF0ZU5TRGF0YSgp
LmdldCgpIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBhdXRvcmVsZWFzZV07CiAgICAg
fQogCiAgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBX
ZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkzOWM4OWZlMTNmNjc4MGU5OWVlNzc3MWIyYmYxZGY2YjRiYmIyNDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZh
Y3RvcnlJT1MuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9y
bUV2ZW50RmFjdG9yeUlPU19oCisjZGVmaW5lIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TX2gKKwor
I2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgPFdl
YktpdEFkZGl0aW9ucy9QbGF0Zm9ybVRvdWNoRXZlbnRJT1MuaD4KKworQGNsYXNzIFdlYkV2ZW50
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtRXZlbnRGYWN0b3J5IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGxhdGZvcm1Nb3VzZUV2ZW50IGNyZWF0ZVBsYXRmb3JtTW91
c2VFdmVudChXZWJFdmVudCAqKTsKKyAgICBzdGF0aWMgUGxhdGZvcm1XaGVlbEV2ZW50IGNyZWF0
ZVBsYXRmb3JtV2hlZWxFdmVudChXZWJFdmVudCAqKTsKKyAgICBzdGF0aWMgUGxhdGZvcm1LZXli
b2FyZEV2ZW50IGNyZWF0ZVBsYXRmb3JtS2V5Ym9hcmRFdmVudChXZWJFdmVudCAqKTsKKyNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHN0YXRpYyBQbGF0Zm9ybVRvdWNoRXZlbnQgY3JlYXRl
UGxhdGZvcm1Ub3VjaEV2ZW50KFdlYkV2ZW50ICopOworI2VuZGlmCit9OworCitTdHJpbmcga2V5
SWRlbnRpZmllckZvcktleUV2ZW50KFdlYkV2ZW50ICopOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPU19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTQ5NTFkZTFjNTNmZTQ3OGJlY2Q4NGUzMTk4NTc4YmMyNTFmZTc1NwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybUV2ZW50RmFj
dG9yeUlPUy5tbQpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxhdGZv
cm1FdmVudEZhY3RvcnlJT1MuaCIKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0dlb21ldHJ5Lmg+
CisjaW1wb3J0IDxJbnRQb2ludC5oPgorI2ltcG9ydCA8S2V5RXZlbnRDb2NvYS5oPgorI2ltcG9y
dCA8TG9nZ2luZy5oPgorI2ltcG9ydCA8V2ViRXZlbnQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgdW5zaWduZWQgbW9kaWZpZXJzRm9yRXZlbnQoV2ViRXZlbnQgKmV2ZW50KQor
eworICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7CisKKyAgICBpZiAoZXZlbnQubW9kaWZpZXJG
bGFncyAmIFdlYkV2ZW50RmxhZ01hc2tTaGlmdCkKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRm
b3JtRXZlbnQ6OlNoaWZ0S2V5OworICAgIGlmIChldmVudC5tb2RpZmllckZsYWdzICYgV2ViRXZl
bnRGbGFnTWFza0NvbnRyb2wpCisgICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpD
dHJsS2V5OworICAgIGlmIChldmVudC5tb2RpZmllckZsYWdzICYgV2ViRXZlbnRGbGFnTWFza0Fs
dGVybmF0ZSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OkFsdEtleTsKKyAg
ICBpZiAoZXZlbnQubW9kaWZpZXJGbGFncyAmIFdlYkV2ZW50RmxhZ01hc2tDb21tYW5kKQorICAg
ICAgICBtb2RpZmllcnMgfD0gUGxhdGZvcm1FdmVudDo6TWV0YUtleTsKKworICAgIHJldHVybiBt
b2RpZmllcnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50UG9pbnQgcG9pbnRGb3JFdmVudChXZWJF
dmVudCAqZXZlbnQpCit7CisgICAgcmV0dXJuIEludFBvaW50KGV2ZW50LmxvY2F0aW9uSW5XaW5k
b3cpOworfQorCitzdGF0aWMgaW5saW5lIEludFBvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoV2Vi
RXZlbnQgKmV2ZW50KQoreworICAgIC8vIGlPUyBXZWJLaXQgd29ya3MgYXMgaWYgaXQgaXMgZnVs
bCBzY3JlZW4uIFRoZXJlZm9yZSBXZWIgY29vcmRzIGFyZSBHbG9iYWwgY29vcmRzLgorICAgIHJl
dHVybiBwb2ludEZvckV2ZW50KGV2ZW50KTsKK30KKworc3RhdGljIFBsYXRmb3JtRXZlbnQ6OlR5
cGUgbW91c2VFdmVudFR5cGUoV2ViRXZlbnQgKmV2ZW50KQoreworICAgIHN3aXRjaCAoZXZlbnQu
dHlwZSkgeworICAgIGNhc2UgV2ViRXZlbnRNb3VzZURvd246CisgICAgICAgIHJldHVybiBQbGF0
Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQ7CisgICAgY2FzZSBXZWJFdmVudE1vdXNlVXA6CisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkOworICAgIGNhc2UgV2ViRXZl
bnRNb3VzZU1vdmVkOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZDsK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZDsKKyAgICB9Cit9CisKK2NsYXNzIFBsYXRm
b3JtTW91c2VFdmVudEJ1aWxkZXIgOiBwdWJsaWMgUGxhdGZvcm1Nb3VzZUV2ZW50IHsKK3B1Ymxp
YzoKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKFdlYkV2ZW50ICpldmVudCkKKyAgICB7
CisgICAgICAgIG1fdHlwZSA9IG1vdXNlRXZlbnRUeXBlKGV2ZW50KTsKKyAgICAgICAgbV9tb2Rp
ZmllcnMgPSAwOworICAgICAgICBtX3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisKKyAgICAg
ICAgbV9wb3NpdGlvbiA9IHBvaW50Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX2dsb2JhbFBv
c2l0aW9uID0gZ2xvYmFsUG9pbnRGb3JFdmVudChldmVudCk7CisgICAgICAgIG1fYnV0dG9uID0g
TGVmdEJ1dHRvbjsgLy8gVGhpcyBoYXMgYWx3YXlzIGJlZW4gdGhlIExlZnRCdXR0b24gb24gaU9T
LgorICAgICAgICBtX2NsaWNrQ291bnQgPSAxOyAvLyBUaGlzIGhhcyBhbHdheXMgYmVlbiAxIG9u
IGlPUy4KKyAgICB9Cit9OworCitQbGF0Zm9ybU1vdXNlRXZlbnQgUGxhdGZvcm1FdmVudEZhY3Rv
cnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudChXZWJFdmVudCAqZXZlbnQpCit7CisgICAgcmV0
dXJuIFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIoZXZlbnQpOworfQorCitjbGFzcyBQbGF0Zm9y
bVdoZWVsRXZlbnRCdWlsZGVyIDogcHVibGljIFBsYXRmb3JtV2hlZWxFdmVudCB7CitwdWJsaWM6
CisgICAgUGxhdGZvcm1XaGVlbEV2ZW50QnVpbGRlcihXZWJFdmVudCAqZXZlbnQpCisgICAgewor
ICAgICAgICBBU1NFUlQoZXZlbnQudHlwZSA9PSBXZWJFdmVudFNjcm9sbFdoZWVsKTsKKworICAg
ICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpXaGVlbDsKKyAgICAgICAgbV9tb2RpZmllcnMg
PSAwOworICAgICAgICBtX3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisKKyAgICAgICAgbV9w
b3NpdGlvbiA9IHBvaW50Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX2dsb2JhbFBvc2l0aW9u
ID0gZ2xvYmFsUG9pbnRGb3JFdmVudChldmVudCk7CisgICAgICAgIG1fZGVsdGFYID0gZXZlbnQu
ZGVsdGFYOworICAgICAgICBtX2RlbHRhWSA9IGV2ZW50LmRlbHRhWTsKKyAgICAgICAgbV9ncmFu
dWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OyAvLyBpT1Mgb25seSBzdXBwb3J0cyBj
b250aW51b3VzIChwaXhlbC1tb2RlKSBzY3JvbGxpbmcuCisgICAgfQorfTsKKworUGxhdGZvcm1X
aGVlbEV2ZW50IFBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybVdoZWVsRXZlbnQo
V2ViRXZlbnQgKmV2ZW50KQoreworICAgIHJldHVybiBQbGF0Zm9ybVdoZWVsRXZlbnRCdWlsZGVy
KGV2ZW50KTsKK30KKworU3RyaW5nIGtleUlkZW50aWZpZXJGb3JLZXlFdmVudChXZWJFdmVudCAq
ZXZlbnQpCit7CisgICAgTlNTdHJpbmcgKnMgPSBldmVudC5jaGFyYWN0ZXJzSWdub3JpbmdNb2Rp
ZmllcnM7CisgICAgaWYgKFtzIGxlbmd0aF0gIT0gMSkgeworICAgICAgICBMT0coRXZlbnRzLCAi
cmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBrZXkgZXZlbnQ6
ICV1IiwgW3MgbGVuZ3RoXSk7CisgICAgICAgIHJldHVybiAiVW5pZGVudGlmaWVkIjsKKyAgICB9
CisKKyAgICByZXR1cm4ga2V5SWRlbnRpZmllckZvckNoYXJDb2RlKENGU3RyaW5nR2V0Q2hhcmFj
dGVyQXRJbmRleCgoQ0ZTdHJpbmdSZWYpcywgMCkpOworfQorCitjbGFzcyBQbGF0Zm9ybUtleWJv
YXJkRXZlbnRCdWlsZGVyIDogcHVibGljIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCB7CitwdWJsaWM6
CisgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlcihXZWJFdmVudCAqZXZlbnQpCisgICAg
eworICAgICAgICBBU1NFUlQoZXZlbnQudHlwZSA9PSBXZWJFdmVudEtleURvd24gfHwgZXZlbnQu
dHlwZSA9PSBXZWJFdmVudEtleVVwKTsKKworICAgICAgICBtX3R5cGUgPSAoZXZlbnQudHlwZSA9
PSBXZWJFdmVudEtleVVwID8gUGxhdGZvcm1FdmVudDo6S2V5VXAgOiBQbGF0Zm9ybUV2ZW50OjpL
ZXlEb3duKTsKKyAgICAgICAgbV9tb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7
CisgICAgICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKKworICAgICAgICBtX3RleHQg
PSBldmVudC5jaGFyYWN0ZXJzOworICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gZXZlbnQuY2hh
cmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOworICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJ
ZGVudGlmaWVyRm9yS2V5RXZlbnQoZXZlbnQpOworICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5
Q29kZSA9IGV2ZW50LmtleUNvZGU7CisgICAgICAgIG1fbWFjQ2hhckNvZGUgPSAwOworICAgICAg
ICBtX2F1dG9SZXBlYXQgPSBldmVudC5pc0tleVJlcGVhdGluZzsKKyAgICAgICAgbV9pc0tleXBh
ZCA9IGZhbHNlOyAvLyBpT1MgZG9lcyBub3QgZGlzdGluZ3Vpc2ggdGhlIG51bXBhZC4gU2VlIDxy
ZGFyOi8vcHJvYmxlbS83MTkwODM1Pi4KKyAgICAgICAgbV9pc1N5c3RlbUtleSA9IGZhbHNlOwor
ICAgICAgICBtX0V2ZW50ID0gZXZlbnQ7CisKKyAgICAgICAgLy8gQWx3YXlzIHVzZSAxMyBmb3Ig
RW50ZXIvUmV0dXJuIC0tIHdlIGRvbid0IHdhbnQgdG8gdXNlIEFwcEtpdCdzIGRpZmZlcmVudCBj
aGFyYWN0ZXIgZm9yIEVudGVyLgorICAgICAgICBpZiAobV93aW5kb3dzVmlydHVhbEtleUNvZGUg
PT0gJ1xyJykgeworICAgICAgICAgICAgbV90ZXh0ID0gIlxyIjsKKyAgICAgICAgICAgIG1fdW5t
b2RpZmllZFRleHQgPSAiXHIiOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIGFkanVzdG1l
bnRzIGJlbG93IGFyZSBvbmx5IG5lZWRlZCBpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUs
IGJ1dCB3ZSBjYW5ub3QgdGVsbCB3aGF0IG1vZGUgd2UgYXJlIGluIGZyb20gaGVyZS4KKworICAg
ICAgICAvLyBUdXJuIDB4N0YgaW50byA4LCBiZWNhdXNlIGJhY2tzcGFjZSBuZWVkcyB0byBhbHdh
eXMgYmUgOC4KKyAgICAgICAgaWYgKG1fdGV4dCA9PSAiXHg3RiIpCisgICAgICAgICAgICBtX3Rl
eHQgPSAiXHg4IjsKKyAgICAgICAgaWYgKG1fdW5tb2RpZmllZFRleHQgPT0gIlx4N0YiKQorICAg
ICAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9ICJceDgiOworICAgICAgICAvLyBBbHdheXMgdXNl
IDkgZm9yIHRhYiAtLSB3ZSBkb24ndCB3YW50IHRvIHVzZSBBcHBLaXQncyBkaWZmZXJlbnQgY2hh
cmFjdGVyIGZvciBzaGlmdC10YWIuCisgICAgICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29k
ZSA9PSA5KSB7CisgICAgICAgICAgICBtX3RleHQgPSAiXHg5IjsKKyAgICAgICAgICAgIG1fdW5t
b2RpZmllZFRleHQgPSAiXHg5IjsKKyAgICAgICAgfQorICAgIH0KK307CisKK1BsYXRmb3JtS2V5
Ym9hcmRFdmVudCBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1LZXlib2FyZEV2
ZW50KFdlYkV2ZW50ICpldmVudCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1LZXlib2FyZEV2ZW50
QnVpbGRlcihldmVudCk7Cit9CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorc3RhdGljIFBs
YXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQaGFzZVR5cGUgY29udmVydFRvdWNoUGhhc2UoTlNOdW1i
ZXIgKnRvdWNoUGhhc2VOdW1iZXIpCit7CisgICAgV2ViRXZlbnRUb3VjaFBoYXNlVHlwZSB0b3Vj
aFBoYXNlID0gc3RhdGljX2Nhc3Q8V2ViRXZlbnRUb3VjaFBoYXNlVHlwZT4oW3RvdWNoUGhhc2VO
dW1iZXIgdW5zaWduZWRJbnRWYWx1ZV0pOworICAgIHN3aXRjaCAodG91Y2hQaGFzZSkgeworICAg
IGNhc2UgV2ViRXZlbnRUb3VjaFBoYXNlQmVnYW46CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVRv
dWNoUG9pbnQ6OlRvdWNoUGhhc2VCZWdhbjsKKyAgICBjYXNlIFdlYkV2ZW50VG91Y2hQaGFzZU1v
dmVkOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlTW92ZWQ7
CisgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VTdGF0aW9uYXJ5OgorICAgICAgICByZXR1cm4g
UGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlU3RhdGlvbmFyeTsKKyAgICBjYXNlIFdlYkV2
ZW50VG91Y2hQaGFzZUVuZGVkOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1Ub3VjaFBvaW50OjpU
b3VjaFBoYXNlRW5kZWQ7CisgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VDYW5jZWxsZWQ6Cisg
ICAgICAgIHJldHVybiBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUGhhc2VDYW5jZWxsZWQ7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJl
dHVybiBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUGhhc2VCZWdhbjsKK30KKworc3RhdGljIFBs
YXRmb3JtRXZlbnQ6OlR5cGUgdG91Y2hFdmVudFR5cGUoV2ViRXZlbnQgKmV2ZW50KQoreworICAg
IHN3aXRjaCAoZXZlbnQudHlwZSkgeworICAgIGNhc2UgV2ViRXZlbnRUb3VjaEJlZ2luOgorICAg
ICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6VG91Y2hTdGFydDsKKyAgICBjYXNlIFdlYkV2ZW50
VG91Y2hFbmQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpUb3VjaEVuZDsKKyAgICBj
YXNlIFdlYkV2ZW50VG91Y2hDYW5jZWw6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpU
b3VjaENhbmNlbDsKKyAgICBjYXNlIFdlYkV2ZW50VG91Y2hDaGFuZ2U6CisgICAgICAgIHJldHVy
biBQbGF0Zm9ybUV2ZW50OjpUb3VjaE1vdmU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpUb3VjaENhbmNl
bDsKKyAgICB9Cit9CisKK2NsYXNzIFBsYXRmb3JtVG91Y2hQb2ludEJ1aWxkZXIgOiBwdWJsaWMg
UGxhdGZvcm1Ub3VjaFBvaW50IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybVRvdWNoUG9pbnRCdWls
ZGVyKHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IEludFBvaW50JiBsb2NhdGlvbiwgVG91Y2hQ
aGFzZVR5cGUgcGhhc2UpCisgICAgICAgIDogUGxhdGZvcm1Ub3VjaFBvaW50KGlkZW50aWZpZXIs
IGxvY2F0aW9uLCBwaGFzZSkKKyAgICB7CisgICAgfQorfTsKKworY2xhc3MgUGxhdGZvcm1Ub3Vj
aEV2ZW50QnVpbGRlciA6IHB1YmxpYyBQbGF0Zm9ybVRvdWNoRXZlbnQgeworcHVibGljOgorICAg
IFBsYXRmb3JtVG91Y2hFdmVudEJ1aWxkZXIoV2ViRXZlbnQgKmV2ZW50KQorICAgIHsKKyAgICAg
ICAgbV90eXBlID0gdG91Y2hFdmVudFR5cGUoZXZlbnQpOworICAgICAgICBtX21vZGlmaWVycyA9
IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV90aW1lc3RhbXAgPSBjdXJyZW50
VGltZSgpOworCisgICAgICAgIG1fZ2VzdHVyZVNjYWxlID0gZXZlbnQuZ2VzdHVyZVNjYWxlOwor
ICAgICAgICBtX2dlc3R1cmVSb3RhdGlvbiA9IGV2ZW50Lmdlc3R1cmVSb3RhdGlvbjsKKyAgICAg
ICAgbV9pc0dlc3R1cmUgPSBldmVudC5pc0dlc3R1cmU7CisgICAgICAgIG1fcG9zaXRpb24gPSBw
b2ludEZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IGdsb2JhbFBv
aW50Rm9yRXZlbnQoZXZlbnQpOworCisgICAgICAgIHVuc2lnbmVkIHRvdWNoQ291bnQgPSBldmVu
dC50b3VjaENvdW50OworICAgICAgICBtX3RvdWNoUG9pbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkodG91Y2hDb3VudCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3VjaENv
dW50OyArK2kpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBbKE5TTnVtYmVy
ICopW2V2ZW50LnRvdWNoSWRlbnRpZmllcnMgb2JqZWN0QXRJbmRleDppXSB1bnNpZ25lZEludFZh
bHVlXTsKKyAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uID0gSW50UG9pbnQoWyhOU1ZhbHVl
ICopW2V2ZW50LnRvdWNoTG9jYXRpb25zIG9iamVjdEF0SW5kZXg6aV0gcG9pbnRWYWx1ZV0pOwor
ICAgICAgICAgICAgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlVHlwZSB0b3VjaFBoYXNl
ID0gY29udmVydFRvdWNoUGhhc2UoW2V2ZW50LnRvdWNoUGhhc2VzIG9iamVjdEF0SW5kZXg6aV0p
OworICAgICAgICAgICAgbV90b3VjaFBvaW50cy51bmNoZWNrZWRBcHBlbmQoUGxhdGZvcm1Ub3Vj
aFBvaW50QnVpbGRlcihpZGVudGlmaWVyLCBsb2NhdGlvbiwgdG91Y2hQaGFzZSkpOworICAgICAg
ICB9CisgICAgfQorfTsKKworUGxhdGZvcm1Ub3VjaEV2ZW50IFBsYXRmb3JtRXZlbnRGYWN0b3J5
OjpjcmVhdGVQbGF0Zm9ybVRvdWNoRXZlbnQoV2ViRXZlbnQgKmV2ZW50KQoreworICAgIHJldHVy
biBQbGF0Zm9ybVRvdWNoRXZlbnRCdWlsZGVyKGV2ZW50KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQppbmRleCAzMjBl
YTUwNDk4ODUxNGU3N2U5MmFkYmExODViODFiYzk4ZjAzZGQyLi5lODM1YTUyMDljNWE5MDk1MWY3
MzliNGUyYTljOGVhMzBmZDMzN2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KQEAgLTI0LDEwICsyNCwxMyBAQAogICov
CiAKICNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxhdGZvcm1QYXN0ZWJvYXJkLmgiCisK
ICNpbXBvcnQgIkNvbG9yLmgiCiAjaW1wb3J0ICJVUkwuaCIKICNpbXBvcnQgIkltYWdlLmgiCi0j
aW1wb3J0ICJQbGF0Zm9ybVBhc3RlYm9hcmQuaCIKKyNpbXBvcnQgIlBhc3RlYm9hcmQuaCIKKyNp
bXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKIAogU09GVF9M
SU5LX0ZSQU1FV09SSyhVSUtpdCkKQEAgLTE1MiwxMiArMTU1LDEyIEBAIHZvaWQgUGxhdGZvcm1Q
YXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkKICAg
ICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwogCiAgICAgaWYgKGNvbnRlbnQuZGF0YUlu
V2ViQXJjaGl2ZUZvcm1hdCkKLSAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTooTlNE
YXRhICopY29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0LT5jcmVhdGVOU0RhdGEoKSBmb3JL
ZXk6V2ViQXJjaGl2ZVBib2FyZFR5cGVdOworICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZh
bHVlOihOU0RhdGEgKiljb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQtPmNyZWF0ZU5TRGF0
YSgpLmdldCgpIGZvcktleTpXZWJBcmNoaXZlUGJvYXJkVHlwZV07CiAKICAgICBpZiAoY29udGVu
dC5kYXRhSW5SVEZERm9ybWF0KQotICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmNv
bnRlbnQuZGF0YUluUlRGREZvcm1hdC0+Y3JlYXRlTlNEYXRhKCkgZm9yS2V5OihOU1N0cmluZyAq
KWtVVFR5cGVSVEZEXTsKKyAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTpjb250ZW50
LmRhdGFJblJURkRGb3JtYXQtPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGZvcktleTooTlNTdHJpbmcg
KilrVVRUeXBlUlRGRF07CiAgICAgaWYgKGNvbnRlbnQuZGF0YUluUlRGRm9ybWF0KQotICAgICAg
ICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmNvbnRlbnQuZGF0YUluUlRGRm9ybWF0LT5jcmVh
dGVOU0RhdGEoKSBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVJURl07CisgICAgICAgIFtyZXBy
ZXNlbnRhdGlvbnMgc2V0VmFsdWU6Y29udGVudC5kYXRhSW5SVEZGb3JtYXQtPmNyZWF0ZU5TRGF0
YSgpLmdldCgpIGZvcktleTooTlNTdHJpbmcgKilrVVRUeXBlUlRGXTsKICAgICBbcmVwcmVzZW50
YXRpb25zIHNldFZhbHVlOmNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0IGZvcktleTooTlNTdHJp
bmcgKilrVVRUeXBlVGV4dF07CiAgICAgW21fcGFzdGVib2FyZCBzZXRJdGVtczpAW3JlcHJlc2Vu
dGF0aW9ucy5nZXQoKV1dOwogfQpAQCAtMTY2LDcgKzE2OSw3IEBAIHZvaWQgUGxhdGZvcm1QYXN0
ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkSW1hZ2UmIHBhc3RlYm9hcmRJbWFnZSkKIHsK
ICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRv
cHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKICAgICBpZiAoIXBhc3Rl
Ym9hcmRJbWFnZS5yZXNvdXJjZU1JTUVUeXBlLmlzTnVsbCgpKSB7Ci0gICAgICAgIFtyZXByZXNl
bnRhdGlvbnMgc2V0T2JqZWN0OnBhc3RlYm9hcmRJbWFnZS5pbWFnZS0+ZGF0YSgpLT5jcmVhdGVO
U0RhdGEoKSBmb3JLZXk6cGFzdGVib2FyZEltYWdlLnJlc291cmNlTUlNRVR5cGVdOworICAgICAg
ICBbcmVwcmVzZW50YXRpb25zIHNldE9iamVjdDpwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2UtPmRhdGEo
KS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZm9yS2V5OnBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZU1J
TUVUeXBlXTsKICAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRPYmplY3Q6KE5TU3RyaW5nICop
cGFzdGVib2FyZEltYWdlLnVybC51cmwgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdOwog
ICAgIH0KICAgICBbbV9wYXN0ZWJvYXJkIHNldEl0ZW1zOkBbcmVwcmVzZW50YXRpb25zLmdldCgp
XV07CkBAIC0xNzcsNyArMTgwLDcgQEAgdm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICBSZXRh
aW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
RGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwogCiAgICAgaWYgKHBhc3RlYm9hcmRUeXBlID09IFN0
cmluZyhrVVRUeXBlVVJMKSkKLSAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTpbYWRv
cHROUyhbTlNVUkwgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHRdKS5nZXQoKSBmb3JLZXk6cGFz
dGVib2FyZFR5cGVdOworICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmFkb3B0TlMo
W1tOU1VSTCBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dF0pLmdldCgpIGZvcktleTpwYXN0ZWJv
YXJkVHlwZV07CiAgICAgZWxzZSBpZiAoIXBhc3RlYm9hcmRUeXBlLmlzTnVsbCgpKQogICAgICAg
ICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOnRleHQgZm9yS2V5OnBhc3RlYm9hcmRUeXBlXTsK
ICAgICBbbV9wYXN0ZWJvYXJkIHNldEl0ZW1zOkBbcmVwcmVzZW50YXRpb25zLmdldCgpXV07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TY3JlZW5JT1Mu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TY3JlZW5JT1MubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMmJmMjIxMGJjYTZlMDFkOTY5NTdmMjVhNDI0ZWIxM2EzNjdlNzZlNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVNjcmVlbklP
Uy5tbQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKKworI2ltcG9ydCAiRmxvYXRSZWN0Lmgi
CisjaW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQgIkludFJlY3QuaCIKKyNpbXBvcnQgIk5v
dEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJXQUtXaW5kb3cuaCIKKyNpbXBvcnQgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQgIldpZGdldC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2ludCBzY3JlZW5Ib3Jpem9udGFsRFBJKFdpZGdldCopCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHNjcmVlblZlcnRpY2FsRFBJKFdpZGdl
dCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHNj
cmVlbkRlcHRoKFdpZGdldCopCit7CisgICAgLy8gQXNzdW1lIDMyIGJpdHMgcGVyIHBpeGVsLiBT
ZWUgPHJkYXI6Ly9wcm9ibGVtLzkzNzg4Mjk+LgorICAgIHJldHVybiAzMjsKK30KKworaW50IHNj
cmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopCit7CisgICAgLy8gQXNzdW1lIHRoZSBzY3Jl
ZW4gZGVwdGggaXMgZXZlbmx5IGRpdmlkZWQgaW50byBmb3VyIGNvbG9yIGNvbXBvbmVudHMuIFNl
ZSA8cmRhcjovL3Byb2JsZW0vOTM3ODgyOT4uCisgICAgcmV0dXJuIHNjcmVlbkRlcHRoKDApIC8g
NDsKK30KKworYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KikKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKKy8vIFRoZXNlIGZ1bmN0aW9ucyBzY2FsZSBiZXR3ZWVuIHNjcmVlbiBhbmQg
cGFnZSBjb29yZGluYXRlcyBiZWNhdXNlIEphdmFTY3JpcHQvRE9NIG9wZXJhdGlvbnMgCisvLyBh
c3N1bWUgdGhhdCB0aGUgc2NyZWVuIGFuZCB0aGUgcGFnZSBzaGFyZSB0aGUgc2FtZSBjb29yZGlu
YXRlIHN5c3RlbS4KK0Zsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQoreworICAg
IGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKKyAgICBXQUtXaW5kb3cg
KndpbmRvdyA9IFt3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XTsKKyAgICBpZiAoIXdp
bmRvdykKKyAgICAgICAgcmV0dXJuIFt3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgZnJhbWVdOwor
ICAgIENHUmVjdCBzY3JlZW5SZWN0ID0geyBDR1BvaW50WmVybywgW3dpbmRvdyBzY3JlZW5TaXpl
XSB9OworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHNjcmVlblJlY3QpOworfQorCitGbG9h
dFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAoIXdp
ZGdldCkKKyAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CisgICAgV0FLV2luZG93ICp3aW5kb3cg
PSBbd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRvd107CisgICAgaWYgKCF3aW5kb3cpCisg
ICAgICAgIHJldHVybiBDR1JlY3RaZXJvOworICAgIENHUmVjdCBzY3JlZW5SZWN0ID0geyBDR1Bv
aW50WmVybywgW3dpbmRvdyBhdmFpbGFibGVTY3JlZW5TaXplXSB9OworICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KHNjcmVlblJlY3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXplcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVNwZWVj
aFN5bnRoZXNpemVySU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NDA1ZTc2NzZjMWRhZDdlOTNiYjcwZGQ2
ODVjNmMxNzgyMzBlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcklPUy5tbQpAQCAtMCwwICsxLDI3OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3BlZWNoU3ludGhlc2l6ZXIuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworI2lmIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgiCisj
aW5jbHVkZSAiU29mdExpbmtpbmcuaCIKKyNpbmNsdWRlIDxBVkZvdW5kYXRpb24vQVZTcGVlY2hT
eW50aGVzaXMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK1NPRlRfTElOS19GUkFN
RVdPUksoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZTcGVl
Y2hTeW50aGVzaXplcikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWU3BlZWNoVXR0
ZXJhbmNlKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZTcGVlY2hTeW50aGVzaXNW
b2ljZSkKKworU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91bmRhdGlvbiwgQVZTcGVlY2hVdHRlcmFu
Y2VEZWZhdWx0U3BlZWNoUmF0ZSwgZmxvYXQpCitTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0
aW9uLCBBVlNwZWVjaFV0dGVyYW5jZU1heGltdW1TcGVlY2hSYXRlLCBmbG9hdCkKKworI2RlZmlu
ZSBBVlNwZWVjaFV0dGVyYW5jZURlZmF1bHRTcGVlY2hSYXRlIGdldEFWU3BlZWNoVXR0ZXJhbmNl
RGVmYXVsdFNwZWVjaFJhdGUoKQorI2RlZmluZSBBVlNwZWVjaFV0dGVyYW5jZU1heGltdW1TcGVl
Y2hSYXRlIGdldEFWU3BlZWNoVXR0ZXJhbmNlTWF4aW11bVNwZWVjaFJhdGUoKQorCisjZGVmaW5l
IEFWU3BlZWNoU3ludGhlc2l6ZXJDbGFzcyBnZXRBVlNwZWVjaFN5bnRoZXNpemVyQ2xhc3MoKQor
I2RlZmluZSBBVlNwZWVjaFV0dGVyYW5jZUNsYXNzIGdldEFWU3BlZWNoVXR0ZXJhbmNlQ2xhc3Mo
KQorI2RlZmluZSBBVlNwZWVjaFN5bnRoZXNpc1ZvaWNlQ2xhc3MgZ2V0QVZTcGVlY2hTeW50aGVz
aXNWb2ljZUNsYXNzKCkKKworQGludGVyZmFjZSBXZWJTcGVlY2hTeW50aGVzaXNXcmFwcGVyIDog
TlNPYmplY3Q8QVZTcGVlY2hTeW50aGVzaXplckRlbGVnYXRlPgoreworICAgIFdlYkNvcmU6OlBs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIqIG1fc3ludGhlc2l6ZXJPYmplY3Q7CisgICAgLy8gSG9s
ZCBhIFJlZiB0byB0aGUgdXR0ZXJhbmNlIHNvIHRoYXQgaXQgd29uJ3QgZGlzYXBwZWFyIHVudGls
IHRoZSBzeW50aCBpcyBkb25lIHdpdGggaXQuCisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3Jt
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPiBtX3V0dGVyYW5jZTsKKyAgICAKKyAgICBSZXRhaW5Q
dHI8QVZTcGVlY2hTeW50aGVzaXplcj4gbV9zeW50aGVzaXplcjsKK30KKworLSAoV2ViU3BlZWNo
U3ludGhlc2lzV3JhcHBlciAqKWluaXRXaXRoU3BlZWNoU3ludGhlc2l6ZXI6KFdlYkNvcmU6OlBs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIqKXN5bnRoZXNpemVyOworLSAodm9pZClzcGVha1V0dGVy
YW5jZTooUGFzc1JlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZT4pdXR0ZXJhbmNlOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJTcGVlY2hTeW50aGVz
aXNXcmFwcGVyCisKKy0gKFdlYlNwZWVjaFN5bnRoZXNpc1dyYXBwZXIgKilpbml0V2l0aFNwZWVj
aFN5bnRoZXNpemVyOihXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyKilzeW50aGVz
aXplcgoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIAorICAgIG1fc3ludGhlc2l6ZXJPYmplY3QgPSBzeW50aGVzaXplcjsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAoZmxvYXQpbWFwU3BlZWNoUmF0ZVRvUGxhdGZvcm1SYXRlOihm
bG9hdClyYXRlCit7CisgICAgLy8gV2ViU3BlZWNoIHNheXMgdG8gZ28gZnJvbSAuMSAtPiAxMCAo
ZGVmYXVsdCAxKQorICAgIC8vIEFWU3BlZWNoU3ludGhlc2l6ZXIgYXNrcyBmb3IgMCAtPiAxIChk
ZWZhdWx0LiA1KQorICAgIGlmIChyYXRlIDwgMSkKKyAgICAgICAgcmF0ZSAqPSBBVlNwZWVjaFV0
dGVyYW5jZURlZmF1bHRTcGVlY2hSYXRlOworICAgIGVsc2UKKyAgICAgICAgcmF0ZSA9IEFWU3Bl
ZWNoVXR0ZXJhbmNlRGVmYXVsdFNwZWVjaFJhdGUgKyAoKHJhdGUgLSAxKSAqIChBVlNwZWVjaFV0
dGVyYW5jZU1heGltdW1TcGVlY2hSYXRlIC0gQVZTcGVlY2hVdHRlcmFuY2VEZWZhdWx0U3BlZWNo
UmF0ZSkpOworICAgIAorICAgIHJldHVybiByYXRlOworfQorCistICh2b2lkKXNwZWFrVXR0ZXJh
bmNlOihQYXNzUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNl
Pil1dHRlcmFuY2UKK3sKKyAgICAvLyBXaGVuIHNwZWFrIGlzIGNhbGxlZCB3ZSBzaG91bGQgbm90
IGhhdmUgYW4gZXhpc3Rpbmcgc3BlZWNoIHV0dGVyYW5jZSBvdXRzdGFuZGluZy4KKyAgICBBU1NF
UlQoIW1fdXR0ZXJhbmNlKTsKKyAgICBBU1NFUlQodXR0ZXJhbmNlKTsKKyAgICAKKyAgICBpZiAo
IXV0dGVyYW5jZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghbV9zeW50aGVzaXpl
cikgeworICAgICAgICBtX3N5bnRoZXNpemVyID0gYWRvcHROUyhbW0FWU3BlZWNoU3ludGhlc2l6
ZXJDbGFzcyBhbGxvY10gaW5pdF0pOworICAgICAgICBbbV9zeW50aGVzaXplciBzZXREZWxlZ2F0
ZTpzZWxmXTsKKyAgICB9CisKKyAgICAvLyBDaG9vc2UgdGhlIGJlc3Qgdm9pY2UsIGJ5IGZpcnN0
IGxvb2tpbmcgYXQgdGhlIHV0dGVyYW5jZSB2b2ljZSwgdGhlbiB0aGUgdXR0ZXJhbmNlIGxhbmd1
YWdlLAorICAgIC8vIHRoZW4gY2hvb3NlIHRoZSBkZWZhdWx0IGxhbmd1YWdlLgorICAgIFdlYkNv
cmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UqIHV0dGVyYW5jZVZvaWNlID0gdXR0ZXJh
bmNlLT52b2ljZSgpOworICAgIE5TU3RyaW5nICp2b2ljZUxhbmd1YWdlID0gbmlsOworICAgIGlm
ICghdXR0ZXJhbmNlVm9pY2UpIHsKKyAgICAgICAgaWYgKHV0dGVyYW5jZS0+bGFuZygpLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHZvaWNlTGFuZ3VhZ2UgPSBbQVZTcGVlY2hTeW50aGVzaXNWb2lj
ZUNsYXNzIGN1cnJlbnRMYW5ndWFnZUNvZGVdOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2
b2ljZUxhbmd1YWdlID0gdXR0ZXJhbmNlLT5sYW5nKCk7CisgICAgfSBlbHNlCisgICAgICAgIHZv
aWNlTGFuZ3VhZ2UgPSB1dHRlcmFuY2UtPnZvaWNlKCktPmxhbmcoKTsKKyAgICAKKyAgICBBVlNw
ZWVjaFN5bnRoZXNpc1ZvaWNlICphdlZvaWNlID0gbmlsOworICAgIGlmICh2b2ljZUxhbmd1YWdl
KQorICAgICAgICBhdlZvaWNlID0gW0FWU3BlZWNoU3ludGhlc2lzVm9pY2VDbGFzcyB2b2ljZVdp
dGhMYW5ndWFnZTp2b2ljZUxhbmd1YWdlXTsKKworICAgIEFWU3BlZWNoVXR0ZXJhbmNlICphdlV0
dGVyYW5jZSA9IFtBVlNwZWVjaFV0dGVyYW5jZUNsYXNzIHNwZWVjaFV0dGVyYW5jZVdpdGhTdHJp
bmc6dXR0ZXJhbmNlLT50ZXh0KCldOworCisgICAgW2F2VXR0ZXJhbmNlIHNldFJhdGU6W3NlbGYg
bWFwU3BlZWNoUmF0ZVRvUGxhdGZvcm1SYXRlOnV0dGVyYW5jZS0+cmF0ZSgpXV07CisgICAgW2F2
VXR0ZXJhbmNlIHNldFZvbHVtZTp1dHRlcmFuY2UtPnZvbHVtZSgpXTsKKyAgICBbYXZVdHRlcmFu
Y2Ugc2V0UGl0Y2hNdWx0aXBsaWVyOnV0dGVyYW5jZS0+cGl0Y2goKV07CisgICAgW2F2VXR0ZXJh
bmNlIHNldFZvaWNlOmF2Vm9pY2VdOworICAgIG1fdXR0ZXJhbmNlID0gdXR0ZXJhbmNlOworICAg
IAorICAgIFttX3N5bnRoZXNpemVyIHNwZWFrVXR0ZXJhbmNlOmF2VXR0ZXJhbmNlXTsKK30KKwor
LSAodm9pZClwYXVzZQoreworICAgIGlmICghbV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBbbV9zeW50aGVzaXplciBwYXVzZVNwZWFraW5nQXRCb3VuZGFyeTpBVlNwZWVj
aEJvdW5kYXJ5SW1tZWRpYXRlXTsKK30KKworLSAodm9pZClyZXN1bWUKK3sKKyAgICBpZiAoIW1f
dXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgW21fc3ludGhlc2l6ZXIgY29u
dGludWVTcGVha2luZ107Cit9CisKKy0gKHZvaWQpY2FuY2VsCit7CisgICAgaWYgKCFtX3V0dGVy
YW5jZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFttX3N5bnRoZXNpemVyIHN0b3BTcGVh
a2luZ0F0Qm91bmRhcnk6QVZTcGVlY2hCb3VuZGFyeUltbWVkaWF0ZV07Cit9CisKKy0gKHZvaWQp
c3BlZWNoU3ludGhlc2l6ZXI6KEFWU3BlZWNoU3ludGhlc2l6ZXIgKilzeW50aGVzaXplciBkaWRT
dGFydFNwZWVjaFV0dGVyYW5jZTooQVZTcGVlY2hVdHRlcmFuY2UgKil1dHRlcmFuY2UKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3ludGhlc2l6ZXIpOworICAgIFVOVVNFRF9QQVJBTSh1dHRlcmFuY2Up
OworICAgIGlmICghbV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX3N5
bnRoZXNpemVyT2JqZWN0LT5jbGllbnQoKS0+ZGlkU3RhcnRTcGVha2luZyhtX3V0dGVyYW5jZSk7
Cit9CisKKy0gKHZvaWQpc3BlZWNoU3ludGhlc2l6ZXI6KEFWU3BlZWNoU3ludGhlc2l6ZXIgKilz
eW50aGVzaXplciBkaWRGaW5pc2hTcGVlY2hVdHRlcmFuY2U6KEFWU3BlZWNoVXR0ZXJhbmNlICop
dXR0ZXJhbmNlCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bnRoZXNpemVyKTsKKyAgICBVTlVTRURf
UEFSQU0odXR0ZXJhbmNlKTsKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgLy8gQ2xlYXIgdGhlIG1fdXR0ZXJhbmNlIHZhcmlhYmxlIGluIGNhc2UgZmlu
aXNoIHNwZWFraW5nIGtpY2tzIG9mZiBhIG5ldyBzcGVha2luZyBqb2IgaW1tZWRpYXRlbHkuCisg
ICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPiBwbGF0
Zm9ybVV0dGVyYW5jZSA9IG1fdXR0ZXJhbmNlOworICAgIG1fdXR0ZXJhbmNlID0gMDsKKyAgICAK
KyAgICBtX3N5bnRoZXNpemVyT2JqZWN0LT5jbGllbnQoKS0+ZGlkRmluaXNoU3BlYWtpbmcocGxh
dGZvcm1VdHRlcmFuY2UpOworfQorCistICh2b2lkKXNwZWVjaFN5bnRoZXNpemVyOihBVlNwZWVj
aFN5bnRoZXNpemVyICopc3ludGhlc2l6ZXIgZGlkUGF1c2VTcGVlY2hVdHRlcmFuY2U6KEFWU3Bl
ZWNoVXR0ZXJhbmNlICopdXR0ZXJhbmNlCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bnRoZXNpemVy
KTsKKyAgICBVTlVTRURfUEFSQU0odXR0ZXJhbmNlKTsKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zeW50aGVzaXplck9iamVjdC0+Y2xpZW50KCkt
PmRpZFBhdXNlU3BlYWtpbmcobV91dHRlcmFuY2UpOworfQorCistICh2b2lkKXNwZWVjaFN5bnRo
ZXNpemVyOihBVlNwZWVjaFN5bnRoZXNpemVyICopc3ludGhlc2l6ZXIgZGlkQ29udGludWVTcGVl
Y2hVdHRlcmFuY2U6KEFWU3BlZWNoVXR0ZXJhbmNlICopdXR0ZXJhbmNlCit7CisgICAgVU5VU0VE
X1BBUkFNKHN5bnRoZXNpemVyKTsKKyAgICBVTlVTRURfUEFSQU0odXR0ZXJhbmNlKTsKKyAgICBp
ZiAoIW1fdXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zeW50aGVzaXpl
ck9iamVjdC0+Y2xpZW50KCktPmRpZFJlc3VtZVNwZWFraW5nKG1fdXR0ZXJhbmNlKTsKK30KKwor
LSAodm9pZClzcGVlY2hTeW50aGVzaXplcjooQVZTcGVlY2hTeW50aGVzaXplciAqKXN5bnRoZXNp
emVyIGRpZENhbmNlbFNwZWVjaFV0dGVyYW5jZTooQVZTcGVlY2hVdHRlcmFuY2UgKil1dHRlcmFu
Y2UKK3sKKyAgICBVTlVTRURfUEFSQU0oc3ludGhlc2l6ZXIpOworICAgIFVOVVNFRF9QQVJBTSh1
dHRlcmFuY2UpOworICAgIGlmICghbV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICAvLyBDbGVhciB0aGUgbV91dHRlcmFuY2UgdmFyaWFibGUgaW4gY2FzZSBmaW5pc2ggc3Bl
YWtpbmcga2lja3Mgb2ZmIGEgbmV3IHNwZWFraW5nIGpvYiBpbW1lZGlhdGVseS4KKyAgICBSZWZQ
dHI8V2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U+IHBsYXRmb3JtVXR0
ZXJhbmNlID0gbV91dHRlcmFuY2U7CisgICAgbV91dHRlcmFuY2UgPSAwOworICAgIAorICAgIG1f
c3ludGhlc2l6ZXJPYmplY3QtPmNsaWVudCgpLT5kaWRGaW5pc2hTcGVha2luZyhwbGF0Zm9ybVV0
dGVyYW5jZSk7Cit9CisKKy0gKHZvaWQpc3BlZWNoU3ludGhlc2l6ZXI6KEFWU3BlZWNoU3ludGhl
c2l6ZXIgKilzeW50aGVzaXplciB3aWxsU3BlYWtSYW5nZU9mU3BlZWNoU3RyaW5nOihOU1Jhbmdl
KWNoYXJhY3RlclJhbmdlIHV0dGVyYW5jZTooQVZTcGVlY2hVdHRlcmFuY2UgKil1dHRlcmFuY2UK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3ludGhlc2l6ZXIpOworICAgIFVOVVNFRF9QQVJBTSh1dHRl
cmFuY2UpOworICAgIAorICAgIGlmICghbV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICAvLyBpT1Mgb25seSBzdXBwb3J0cyB3b3JkIGJvdW5kYXJpZXMuCisgICAgbV9zeW50
aGVzaXplck9iamVjdC0+Y2xpZW50KCktPmJvdW5kYXJ5RXZlbnRPY2N1cnJlZChtX3V0dGVyYW5j
ZSwgV2ViQ29yZTo6U3BlZWNoV29yZEJvdW5kYXJ5LCBjaGFyYWN0ZXJSYW5nZS5sb2NhdGlvbik7
Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVyOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyKFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6
ZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fc3BlZWNoU3ludGhlc2l6ZXJDbGllbnQoY2xpZW50
KQoreworfQorCitQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjp+UGxhdGZvcm1TcGVlY2hTeW50
aGVzaXplcigpCit7Cit9CisKK3ZvaWQgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcjo6aW5pdGlh
bGl6ZVZvaWNlTGlzdCgpCit7CisgICAgZm9yIChBVlNwZWVjaFN5bnRoZXNpc1ZvaWNlICp2b2lj
ZSBpbiBbQVZTcGVlY2hTeW50aGVzaXNWb2ljZUNsYXNzIHNwZWVjaFZvaWNlc10pIHsKKyAgICAg
ICAgLy8gaU9TIFNwZWVjaCB2b2ljZXMgb25seSBleHBvc2UgdGhlaXIgbGFuZ3VhZ2UgYXMgYW4g
aWRlbnRpZnlpbmcgYXNwZWN0LgorICAgICAgICBOU1N0cmluZyAqbGFuZ3VhZ2UgPSBbdm9pY2Ug
bGFuZ3VhZ2VdOworICAgICAgICBOU1N0cmluZyAqdm9pY2VVUkkgPSBsYW5ndWFnZTsKKyAgICAg
ICAgTlNTdHJpbmcgKm5hbWUgPSBsYW5ndWFnZTsKKyAgICAgICAgYm9vbCBpc0RlZmF1bHQgPSB0
cnVlOworICAgICAgICAKKyAgICAgICAgbV92b2ljZUxpc3QuYXBwZW5kKFBsYXRmb3JtU3BlZWNo
U3ludGhlc2lzVm9pY2U6OmNyZWF0ZSh2b2ljZVVSSSwgbmFtZSwgbGFuZ3VhZ2UsIHRydWUsIGlz
RGVmYXVsdCkpOworICAgIH0KK30KKwordm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpw
YXVzZSgpCit7CisgICAgW21fcGxhdGZvcm1TcGVlY2hXcmFwcGVyLmdldCgpIHBhdXNlXTsKK30K
Kwordm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpyZXN1bWUoKQoreworICAgIFttX3Bs
YXRmb3JtU3BlZWNoV3JhcHBlci5nZXQoKSByZXN1bWVdOworfQorCit2b2lkIFBsYXRmb3JtU3Bl
ZWNoU3ludGhlc2l6ZXI6OnNwZWFrKFBhc3NSZWZQdHI8UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2U+IHV0dGVyYW5jZSkKK3sKKyAgICBpZiAoIW1fcGxhdGZvcm1TcGVlY2hXcmFwcGVy
KQorICAgICAgICBtX3BsYXRmb3JtU3BlZWNoV3JhcHBlciA9IGFkb3B0TlMoW1tXZWJTcGVlY2hT
eW50aGVzaXNXcmFwcGVyIGFsbG9jXSBpbml0V2l0aFNwZWVjaFN5bnRoZXNpemVyOnRoaXNdKTsK
KyAgICAKKyAgICBbbV9wbGF0Zm9ybVNwZWVjaFdyYXBwZXIuZ2V0KCkgc3BlYWtVdHRlcmFuY2U6
dXR0ZXJhbmNlLmdldCgpXTsKK30KKwordm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpj
YW5jZWwoKQoreworICAgIFttX3BsYXRmb3JtU3BlZWNoV3JhcHBlci5nZXQoKSBjYW5jZWxdOwor
fQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUVD
SF9TWU5USEVTSVMpCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU1NMS2V5R2VuZXJhdG9ySU9TLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9TU0xLZXlHZW5lcmF0b3JJT1MuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0
Y2NlMzdjOWU3Yzk3ZGU1MDJhZDJkYzQ3YWI4MGQ3N2FhN2UxMGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU1NMS2V5R2VuZXJhdG9ySU9TLmNwcApAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNTTEtleUdlbmVyYXRvci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgZ2V0U3VwcG9ydGVkS2V5U2l6ZXMoVmVjdG9yPFN0cmluZz4m
KQoreworfQorCitTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2ln
bmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nJiBjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IFVS
TCYpCit7CisgICAgVU5VU0VEX1BBUkFNKGtleVNpemVJbmRleCk7CisgICAgVU5VU0VEX1BBUkFN
KGNoYWxsZW5nZVN0cmluZyk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Ny
b2xsQW5pbWF0b3JJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmlt
YXRvcklPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwZDE5N2IzMDE2ZGE4YjJkNTU2ZDgzZWU1MjU5YzU4NTgw
ZDY5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Ny
b2xsQW5pbWF0b3JJT1MuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBT
Y3JvbGxBbmltYXRvcklPU19oCisjZGVmaW5lIFNjcm9sbEFuaW1hdG9ySU9TX2gKKworI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtVG91Y2hFdmVudDsKKworY2xhc3MgU2Nyb2xs
QW5pbWF0b3JJT1MgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgeworcHVibGljOgorICAgIFNjcm9s
bEFuaW1hdG9ySU9TKFNjcm9sbGFibGVBcmVhKik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0
b3JJT1MoKTsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdmlydHVhbCBib29sIGhh
bmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgT1ZFUlJJREU7CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGRldGVybWluZVNjcm9sbGFibGVBcmVhRm9yVG91Y2hT
ZXF1ZW5jZShjb25zdCBJbnRTaXplJiB0b3VjaERlbHRhKTsKKworICAgIC8vIFN0YXRlIGZvciBo
YW5kbGluZyBzZXF1ZW5jZXMgb2YgdG91Y2hlcyBpbiBkZWZhdWx0VG91Y2hFdmVudEhhbmRsZXIu
CisgICAgZW51bSBBeGlzTGF0Y2ggeworICAgICAgICBBeGlzTGF0Y2hOb3RDb21wdXRlZCwKKyAg
ICAgICAgQXhpc0xhdGNoTm9uZSwKKyAgICAgICAgQXhpc0xhdGNoSG9yaXpvbnRhbCwKKyAgICAg
ICAgQXhpc0xhdGNoVmVydGljYWwKKyAgICB9OworICAgIEF4aXNMYXRjaCBtX3RvdWNoU2Nyb2xs
QXhpc0xhdGNoOworICAgIGJvb2wgbV9pblRvdWNoU2VxdWVuY2U7CisgICAgYm9vbCBtX2NvbW1p
dHRlZFRvU2Nyb2xsQXhpczsKKyAgICBib29sIG1fc3RhcnRlZFNjcm9sbDsKKyAgICBJbnRQb2lu
dCBtX2ZpcnN0VG91Y2hQb2ludDsKKyAgICBJbnRQb2ludCBtX2xhc3RUb3VjaFBvaW50OworCisg
ICAgLy8gV2hlbiB3ZSdyZSBpbiBhIHRvdWNoIHNlcXVlbmNlLCB0aGlzIHdpbGwgcG9pbnQgdG8g
dGhlIHNjcm9sbGFibGUgYXJlYSB0aGF0CisgICAgLy8gc2hvdWxkIGFjdHVhbGx5IGJlIHNjcm9s
bGVkIGR1cmluZyB0aGUgc2VxdWVuY2UuCisgICAgU2Nyb2xsYWJsZUFyZWEqIG1fc2Nyb2xsYWJs
ZUFyZWFGb3JUb3VjaFNlcXVlbmNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gU2Nyb2xsQW5pbWF0b3JJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhZjUyMTI4YTUzYWQ3MTAw
MGE3MGQwZDE2YzM4YjQ3YjUxNDBlNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0KQEAgLTAsMCArMSwxODQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JJ
T1MuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtVG91Y2hFdmVudElPUy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3du
UHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVh
KiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1h
dG9ySU9TKHNjcm9sbGFibGVBcmVhKSk7Cit9CisKK1Njcm9sbEFuaW1hdG9ySU9TOjpTY3JvbGxB
bmltYXRvcklPUyhTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCisgICAgOiBTY3JvbGxB
bmltYXRvcihzY3JvbGxhYmxlQXJlYSkKKyAgICAsIG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2goQXhp
c0xhdGNoTm90Q29tcHV0ZWQpCisgICAgLCBtX2luVG91Y2hTZXF1ZW5jZShmYWxzZSkKKyAgICAs
IG1fY29tbWl0dGVkVG9TY3JvbGxBeGlzKGZhbHNlKQorICAgICwgbV9zdGFydGVkU2Nyb2xsKGZh
bHNlKQorICAgICwgbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UoMCkKK3sKK30KKwor
U2Nyb2xsQW5pbWF0b3JJT1M6On5TY3JvbGxBbmltYXRvcklPUygpCit7Cit9CisKK2Jvb2wgU2Ny
b2xsQW5pbWF0b3JJT1M6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50
JiB0b3VjaEV2ZW50KQoreworICAgIGlmICh0b3VjaEV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2
ZW50OjpUb3VjaFN0YXJ0ICYmIHRvdWNoRXZlbnQudG91Y2hDb3VudCgpID09IDEpIHsKKyAgICAg
ICAgbV9maXJzdFRvdWNoUG9pbnQgPSB0b3VjaEV2ZW50LnRvdWNoTG9jYXRpb25BdEluZGV4KDAp
OworICAgICAgICBtX2xhc3RUb3VjaFBvaW50ID0gbV9maXJzdFRvdWNoUG9pbnQ7CisgICAgICAg
IG1faW5Ub3VjaFNlcXVlbmNlID0gdHJ1ZTsKKyAgICAgICAgbV9jb21taXR0ZWRUb1Njcm9sbEF4
aXMgPSBmYWxzZTsKKyAgICAgICAgbV9zdGFydGVkU2Nyb2xsID0gZmFsc2U7CisgICAgICAgIG1f
dG91Y2hTY3JvbGxBeGlzTGF0Y2ggPSBBeGlzTGF0Y2hOb3RDb21wdXRlZDsKKyAgICAgICAgLy8g
TmV2ZXIgY2xhaW0gdG8gaGF2ZSBoYW5kbGVkIHRoZSBUb3VjaFN0YXJ0LCBiZWNhdXNlIHRoYXQg
d2lsbCBraWxsIGRlZmF1bHQgc2Nyb2xsaW5nIGJlaGF2aW9yLgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFtX2luVG91Y2hTZXF1ZW5jZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKHRvdWNoRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6OlRv
dWNoRW5kIHx8IHRvdWNoRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6OlRvdWNoQ2FuY2Vs
KSB7CisgICAgICAgIG1faW5Ub3VjaFNlcXVlbmNlID0gZmFsc2U7CisgICAgICAgIG1fc2Nyb2xs
YWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlID0gMDsKKyAgICAgICAgaWYgKG1fc3RhcnRlZFNjcm9s
bCkKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhKCktPmRpZEVuZFNjcm9sbCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgYSBzZWNvbmQgdG91Y2ggYXBwZWFy
cywgYXNzdW1lIHRoYXQgdGhlIHVzZXIgaXMgdHJ5aW5nIHRvIHpvb20sIGFuZCBiYWlsIG9uIHRo
ZSBzY3JvbGxpbmcgc2VxdWVuY2UuCisgICAgLy8gRklYTUU6IGlmIHRoYXQgc2Vjb25kIHRvdWNo
IGlzIGluc2lkZSB0aGUgc2Nyb2xsYWJsZSBhcmVhLCBzaG91bGQgd2Uga2VlcCBzY3JvbGxpbmc/
CisgICAgaWYgKHRvdWNoRXZlbnQudG91Y2hDb3VudCgpICE9IDEpIHsKKyAgICAgICAgbV9pblRv
dWNoU2VxdWVuY2UgPSBmYWxzZTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2Vx
dWVuY2UgPSAwOworICAgICAgICBpZiAobV9zdGFydGVkU2Nyb2xsKQorICAgICAgICAgICAgc2Ny
b2xsYWJsZUFyZWEoKS0+ZGlkRW5kU2Nyb2xsKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgCisgICAgSW50UG9pbnQgY3VycmVudFBvaW50ID0gdG91Y2hFdmVudC50b3VjaExv
Y2F0aW9uQXRJbmRleCgwKTsKKworICAgIEludFNpemUgdG91Y2hEZWx0YSA9IG1fbGFzdFRvdWNo
UG9pbnQgLSBjdXJyZW50UG9pbnQ7CisgICAgbV9sYXN0VG91Y2hQb2ludCA9IGN1cnJlbnRQb2lu
dDsKKworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UpCisgICAgICAg
IGRldGVybWluZVNjcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZSh0b3VjaERlbHRhKTsKKwor
ICAgIGlmICghbV9jb21taXR0ZWRUb1Njcm9sbEF4aXMpIHsKKyAgICAgICAgYm9vbCBob3Jpem9u
dGFsbHlTY3JvbGxhYmxlID0gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShIb3Jpem9udGFs
U2Nyb2xsYmFyKTsKKyAgICAgICAgYm9vbCB2ZXJ0aWNhbGx5U2Nyb2xsYWJsZSA9IG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbFNpemUoVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgICAgIGlmICgh
aG9yaXpvbnRhbGx5U2Nyb2xsYWJsZSAmJiAhdmVydGljYWxseVNjcm9sbGFibGUpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgSW50U2l6ZSBkZWx0YUZyb21TdGFydCA9IG1f
Zmlyc3RUb3VjaFBvaW50IC0gY3VycmVudFBvaW50OworICAgIAorICAgICAgICBjb25zdCBpbnQg
bGF0Y2hBeGlzTW92ZW1lbnRUaHJlc2hvbGQgPSAxMDsKKyAgICAgICAgaWYgKCFob3Jpem9udGFs
bHlTY3JvbGxhYmxlICYmIHZlcnRpY2FsbHlTY3JvbGxhYmxlKSB7CisgICAgICAgICAgICBtX3Rv
dWNoU2Nyb2xsQXhpc0xhdGNoID0gQXhpc0xhdGNoVmVydGljYWw7CisgICAgICAgICAgICBpZiAo
YWJzKGRlbHRhRnJvbVN0YXJ0LmhlaWdodCgpKSA+PSBsYXRjaEF4aXNNb3ZlbWVudFRocmVzaG9s
ZCkKKyAgICAgICAgICAgICAgICBtX2NvbW1pdHRlZFRvU2Nyb2xsQXhpcyA9IHRydWU7CisgICAg
ICAgIH0gZWxzZSBpZiAoaG9yaXpvbnRhbGx5U2Nyb2xsYWJsZSAmJiAhdmVydGljYWxseVNjcm9s
bGFibGUpIHsKKyAgICAgICAgICAgIG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2ggPSBBeGlzTGF0Y2hI
b3Jpem9udGFsOworICAgICAgICAgICAgaWYgKGFicyhkZWx0YUZyb21TdGFydC53aWR0aCgpKSA+
PSBsYXRjaEF4aXNNb3ZlbWVudFRocmVzaG9sZCkKKyAgICAgICAgICAgICAgICBtX2NvbW1pdHRl
ZFRvU2Nyb2xsQXhpcyA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Nv
bW1pdHRlZFRvU2Nyb2xsQXhpcyA9IHRydWU7CisKKyAgICAgICAgICAgIGlmIChtX3RvdWNoU2Ny
b2xsQXhpc0xhdGNoID09IEF4aXNMYXRjaE5vdENvbXB1dGVkKSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgZmxvYXQgbG9ja0FuZ2xlRGVncmVlcyA9IDIwOworICAgICAgICAgICAgICAgIGlmIChk
ZWx0YUZyb21TdGFydC53aWR0aCgpICYmIGRlbHRhRnJvbVN0YXJ0LmhlaWdodCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IGRyYWdBbmdsZSA9IGF0YW5mKGZhYnNmKGRlbHRhRnJvbVN0
YXJ0LmhlaWdodCgpKSAvIGZhYnNmKGRlbHRhRnJvbVN0YXJ0LndpZHRoKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGRyYWdBbmdsZSA8PSBkZWcycmFkKGxvY2tBbmdsZURlZ3JlZXMpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbV90b3VjaFNjcm9sbEF4aXNMYXRjaCA9IEF4aXNMYXRj
aEhvcml6b250YWw7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRyYWdBbmdsZSA+PSBk
ZWcycmFkKDkwIC0gbG9ja0FuZ2xlRGVncmVlcykpCisgICAgICAgICAgICAgICAgICAgICAgICBt
X3RvdWNoU2Nyb2xsQXhpc0xhdGNoID0gQXhpc0xhdGNoVmVydGljYWw7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW1f
Y29tbWl0dGVkVG9TY3JvbGxBeGlzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIAorICAgIC8vIEhvcml6b250YWwKKyAg
ICBpZiAobV90b3VjaFNjcm9sbEF4aXNMYXRjaCAhPSBBeGlzTGF0Y2hWZXJ0aWNhbCkgeworICAg
ICAgICBpbnQgZGVsdGEgPSB0b3VjaERlbHRhLndpZHRoKCk7CisgICAgICAgIGhhbmRsZWQgfD0g
bV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UtPnNjcm9sbChkZWx0YSA8IDAgPyBTY3Jv
bGxMZWZ0IDogU2Nyb2xsUmlnaHQsIFNjcm9sbEJ5UGl4ZWwsIGZhYnNmKGRlbHRhKSk7CisgICAg
fQorICAgIAorICAgIC8vIFZlcnRpY2FsCisgICAgaWYgKG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2gg
IT0gQXhpc0xhdGNoSG9yaXpvbnRhbCkgeworICAgICAgICBpbnQgZGVsdGEgPSB0b3VjaERlbHRh
LmhlaWdodCgpOworICAgICAgICBoYW5kbGVkIHw9IG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNl
cXVlbmNlLT5zY3JvbGwoZGVsdGEgPCAwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxC
eVBpeGVsLCBmYWJzZihkZWx0YSkpOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm4gZmFsc2Ug
dW50aWwgd2UgbWFuYWdlIHRvIHNjcm9sbCBhdCBhbGwsIGFuZCB0aGVuIGtlZXAgcmV0dXJuaW5n
IHRydWUgdW50aWwgdGhlIGdlc3R1cmUgZW5kcy4KKyAgICBpZiAoIW1fc3RhcnRlZFNjcm9sbCkg
eworICAgICAgICBpZiAoIWhhbmRsZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIG1fc3RhcnRlZFNjcm9sbCA9IHRydWU7CisgICAgICAgIHNjcm9sbGFibGVBcmVhKCktPmRp
ZFN0YXJ0U2Nyb2xsKCk7CisgICAgfSBlbHNlIGlmIChoYW5kbGVkKQorICAgICAgICBzY3JvbGxh
YmxlQXJlYSgpLT5kaWRVcGRhdGVTY3JvbGwoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRvcklPUzo6ZGV0ZXJtaW5lU2Nyb2xsYWJsZUFyZWFGb3JUb3Vj
aFNlcXVlbmNlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIEFTU0VSVCghbV9z
Y3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UpOworCisgICAgU2Nyb2xsYWJsZUFyZWEqIHNj
cm9sbGFibGVBcmVhID0gbV9zY3JvbGxhYmxlQXJlYTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICBpZiAoIXNjcm9sbGFibGVBcmVhLT5pc1Bpbm5lZEluQm90aERpcmVjdGlvbnMoc2Nyb2xs
RGVsdGEpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWEqIGVu
Y2xvc2luZ0FyZWEgPSBzY3JvbGxhYmxlQXJlYS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKTsK
KyAgICAgICAgaWYgKCFlbmNsb3NpbmdBcmVhKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEgPSBlbmNsb3NpbmdBcmVhOworICAgIH0KKworICAgIEFTU0VSVChz
Y3JvbGxhYmxlQXJlYSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UgPSBz
Y3JvbGxhYmxlQXJlYTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbFZpZXdJT1MubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsVmlld0lPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMGIwYWQxMzJi
YjQzZWJmMTZkMGI3ZjE0YWQ5NWRhYTc3OWZhNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbFZpZXdJT1MubW0KQEAgLTAsMCArMSwyNzEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlNjcm9sbFZpZXcuaCIKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJG
bG9hdFJlY3QuaCIKKyNpbXBvcnQgIkludFJlY3QuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNp
bXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJXQUtBcHBLaXRTdHVicy5oIgorI2lt
cG9ydCAiV0FLQ2xpcFZpZXcuaCIKKyNpbXBvcnQgIldBS1Njcm9sbFZpZXcuaCIKKyNpbXBvcnQg
IldBS1ZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXQUtXaW5kb3cuaCIKKyNpbXBvcnQgIldLVmll
d1ByaXZhdGUuaCIKKyNpbXBvcnQgIldlYkNvcmVGcmFtZVZpZXcuaCIKKwordXNpbmcgbmFtZXNw
YWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgTlNTY3JvbGxWaWV3PFdl
YkNvcmVGcmFtZVNjcm9sbFZpZXc+ICpTY3JvbGxWaWV3OjpzY3JvbGxWaWV3KCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoIXBsYXRmb3JtV2lkZ2V0KCkgfHwgW3BsYXRmb3JtV2lkZ2V0KCkgaXNLaW5k
T2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pOworICAgIEFTU0VSVCghcGxhdGZvcm1XaWRn
ZXQoKSB8fCBbcGxhdGZvcm1XaWRnZXQoKSBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdl
YkNvcmVGcmFtZVNjcm9sbFZpZXcpXSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5TU2Nyb2xs
VmlldzxXZWJDb3JlRnJhbWVTY3JvbGxWaWV3PiAqPihwbGF0Zm9ybVdpZGdldCgpKTsKK30KKwor
TlNWaWV3ICpTY3JvbGxWaWV3Ojpkb2N1bWVudFZpZXcoKSBjb25zdAoreworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gW3Njcm9sbFZpZXcoKSBkb2N1bWVudFZp
ZXddOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIG5pbDsKK30K
Kwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUFkZENoaWxkKFdpZGdldCogY2hpbGQpCit7Cisg
ICAgQVNTRVJUKGNoaWxkICE9IHRoaXMpOworCisgICAgY2hpbGQtPmFkZFRvU3VwZXJ2aWV3KGRv
Y3VtZW50VmlldygpKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVJlbW92ZUNoaWxk
KFdpZGdldCogY2hpbGQpCit7CisgICAgY2hpbGQtPnJlbW92ZUZyb21TdXBlcnZpZXcoKTsKK30K
Kwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbGJhck1vZGVzKCkKK3sKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW3Njcm9sbFZpZXcoKSBzZXRTY3JvbGxp
bmdNb2RlczptX2hvcml6b250YWxTY3JvbGxiYXJNb2RlIHZlcnRpY2FsOm1fdmVydGljYWxTY3Jv
bGxiYXJNb2RlIGFuZExvY2s6Tk9dOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JvbGxiYXJNb2RlcyhTY3JvbGxiYXJNb2Rl
JiBob3Jpem9udGFsLCBTY3JvbGxiYXJNb2RlJiB2ZXJ0aWNhbCkgY29uc3QKK3sKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW3Njcm9sbFZpZXcoKSBzY3JvbGxpbmdNb2Rl
czomaG9yaXpvbnRhbCB2ZXJ0aWNhbDomdmVydGljYWxdOworICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRDYW5CbGl0T25TY3Jv
bGwoYm9vbCBjYW5CbGl0T25TY3JvbGwpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOworICAgIFtbc2Nyb2xsVmlldygpIGNvbnRlbnRWaWV3XSBzZXRDb3BpZXNPblNjcm9sbDpj
YW5CbGl0T25TY3JvbGxdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK2Jv
b2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1DYW5CbGl0T25TY3JvbGwoKSBjb25zdAoreworICAgIHJl
dHVybiBbW3Njcm9sbFZpZXcoKSBjb250ZW50Vmlld10gY29waWVzT25TY3JvbGxdOworfQorCitJ
bnRSZWN0IFNjcm9sbFZpZXc6OmFjdHVhbFZpc2libGVDb250ZW50UmVjdCgpIGNvbnN0Cit7Cisg
ICAgQ0dSZWN0IHIgPSBDR1JlY3RaZXJvOworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKKyAgICBXQUtTY3JvbGxWaWV3ICp2aWV3ID0gc3RhdGljX2Nhc3Q8V0FLU2Nyb2xsVmlldyAq
PihwbGF0Zm9ybVdpZGdldCgpKTsKKyAgICByID0gW3ZpZXcgYWN0dWFsRG9jdW1lbnRWaXNpYmxl
UmVjdF07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdChyKTsKK30KKworSW50UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlRXh0ZW50Q29u
dGVudFJlY3QoKSBjb25zdAoreworICAgIE5TU2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19jYXN0
PE5TU2Nyb2xsVmlldyAqPihwbGF0Zm9ybVdpZGdldCgpKTsKKworICAgIENHUmVjdCByID0gQ0dS
ZWN0WmVybzsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgaWYgKFt2aWV3
IGlzS2luZE9mQ2xhc3M6W05TU2Nyb2xsVmlldyBjbGFzc11dKQorICAgICAgICByID0gW3ZpZXcg
ZG9jdW1lbnRWaXNpYmxlRXh0ZW50XTsKKyAgICBlbHNlIGlmICh2aWV3KSB7CisgICAgICAgIHIu
b3JpZ2luID0gW3ZpZXcgdmlzaWJsZVJlY3RdLm9yaWdpbjsKKyAgICAgICAgci5zaXplID0gW3Zp
ZXcgYm91bmRzXS5zaXplOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBXZWJLaXQy
IG9uIGlPUyBkb2Vzbid0IGluZm9ybSB0aGUgV2ViUHJvY2VzcyBvZiB0aGUgZXhwb3NlZCBhcmVh
LgorICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50c1NpemUoKSk7Cisg
ICAgfQorCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdChyKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRBY3R1YWxTY3JvbGxQb3Np
dGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCit7CisgICAgTlNTY3JvbGxWaWV3ICp2aWV3
ID0gc3RhdGljX2Nhc3Q8TlNTY3JvbGxWaWV3ICo+KHBsYXRmb3JtV2lkZ2V0KCkpOworCisgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNz
OltOU1Njcm9sbFZpZXcgY2xhc3NdXSkKKyAgICAgICAgW3ZpZXcgc2V0QWN0dWFsU2Nyb2xsUG9z
aXRpb246cG9zaXRpb25dOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK0lu
dFJlY3QgU2Nyb2xsVmlldzo6cGxhdGZvcm1WaXNpYmxlQ29udGVudFJlY3QoYm9vbCBpbmNsdWRl
U2Nyb2xsYmFycykgY29uc3QKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cisg
ICAgaWYgKGluY2x1ZGVTY3JvbGxiYXJzKSB7CisgICAgICAgIGlmIChOU1ZpZXcqIGRvY3VtZW50
VmlldyA9IHRoaXMtPmRvY3VtZW50VmlldygpKQorICAgICAgICAgICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QoW2RvY3VtZW50VmlldyB2aXNpYmxlUmVjdF0pOworICAgIH0KKyAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdChbc2Nyb2xsVmlldygpIGRvY3VtZW50VmlzaWJsZVJlY3RdKTsKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisK
K0ludFNpemUgU2Nyb2xsVmlldzo6cGxhdGZvcm1WaXNpYmxlQ29udGVudFNpemUoYm9vbCBpbmNs
dWRlU2Nyb2xsYmFycykgY29uc3QKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisgICAgaWYgKGluY2x1ZGVTY3JvbGxiYXJzKSB7CisgICAgICAgIGlmIChOU1ZpZXcqIGRvY3Vt
ZW50VmlldyA9IHRoaXMtPmRvY3VtZW50VmlldygpKQorICAgICAgICAgICAgcmV0dXJuIEludFNp
emUoW2RvY3VtZW50VmlldyB2aXNpYmxlUmVjdF0uc2l6ZSk7CisgICAgfQorCisgICAgcmV0dXJu
IGV4cGFuZGVkSW50U2l6ZShGbG9hdFNpemUoW3Njcm9sbFZpZXcoKSBkb2N1bWVudFZpc2libGVS
ZWN0XS5zaXplKSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4g
SW50U2l6ZSgpOworfQorCitUaWxlQ2FjaGUqIFNjcm9sbFZpZXc6OnRpbGVDYWNoZSgpCit7Cisg
ICAgLy8gTWFrZSB0aWxlIGNhY2hlIHBvaW50ZXIgYXZhaWxhYmxlIHZpYSB0aGUgbWFpbiBmcmFt
ZSBvbmx5LiBUaWxlIGNhY2hlIGludGVyYWN0aW9uIHNob3VsZCBiZSBtYW5hZ2VkIGJ5CisgICAg
Ly8gdGhlIG1haW4gZnJhbWUgYW5kIHRoaXMgYXZvaWRzIGhhdmluZyB0byBhZGQgcGFyZW50IGNo
ZWNrcyB0byBhbGwgY2FsbCBzaXRlcy4KKyAgICBpZiAocGFyZW50KCkpCisgICAgICAgIHJldHVy
biAwOworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBXQUtTY3JvbGxWaWV3
ICp2aWV3ID0gc3RhdGljX2Nhc3Q8V0FLU2Nyb2xsVmlldyAqPihwbGF0Zm9ybVdpZGdldCgpKTsK
KyAgICByZXR1cm4gW1t2aWV3IHdpbmRvd10gdGlsZUNhY2hlXTsKKyAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0Q29udGVudHNT
aXplKCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgaW50IHcgPSBt
X2NvbnRlbnRzU2l6ZS53aWR0aCgpOworICAgIGludCBoID0gbV9jb250ZW50c1NpemUuaGVpZ2h0
KCk7CisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBMT0coRnJhbWVzLCAiJXAgJUAgYXQgdyAlZCBo
ICVkXG4iLCBkb2N1bWVudFZpZXcoKSwgWyhpZClbZG9jdW1lbnRWaWV3KCkgY2xhc3NdIGNsYXNz
TmFtZV0sIHcsIGgpOyAgICAgICAgICAgIAorI2Vsc2UKKyAgICBMT0coRnJhbWVzLCAiJXAgJUAg
YXQgdyAlZCBoICVkXG4iLCBkb2N1bWVudFZpZXcoKSwgTlNTdHJpbmdGcm9tQ2xhc3MoW2RvY3Vt
ZW50VmlldygpIGNsYXNzXSksIHcsIGgpOworI2VuZGlmCisgICAgTlNTaXplIHRlbXBTaXplID0g
eyBzdGF0aWNfY2FzdDxDR0Zsb2F0PihtYXgoMCwgdykpLCBzdGF0aWNfY2FzdDxDR0Zsb2F0Piht
YXgoMCwgaCkpIH07IC8vIHdvcmthcm91bmQgZm9yIDQyMTMzMTQKKyAgICBbZG9jdW1lbnRWaWV3
KCkgc2V0Qm91bmRzU2l6ZTp0ZW1wU2l6ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbGJhcnNTdXBwcmVzc2Vk
KGJvb2wgcmVwYWludE9uVW5zdXBwcmVzcykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgW3Njcm9sbFZpZXcoKSBzZXRTY3JvbGxCYXJzU3VwcHJlc3NlZDptX3Njcm9s
bGJhcnNTdXBwcmVzc2VkCisgICAgICAgICAgICAgICAgICAgICAgcmVwYWludE9uVW5zdXBwcmVz
czpyZXBhaW50T25VbnN1cHByZXNzXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
fQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50
UG9pbnQmIHNjcm9sbFBvaW50KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KyAgICBOU1BvaW50IGZsb2F0UG9pbnQgPSBzY3JvbGxQb2ludDsKKyAgICBOU1BvaW50IHRlbXBQ
b2ludCA9IHsgbWF4KC1bc2Nyb2xsVmlldygpIHNjcm9sbE9yaWdpbl0ueCwgZmxvYXRQb2ludC54
KSwgbWF4KC1bc2Nyb2xsVmlldygpIHNjcm9sbE9yaWdpbl0ueSwgZmxvYXRQb2ludC55KSB9OyAg
Ly8gRG9uJ3QgdXNlIE5TTWFrZVBvaW50IHRvIHdvcmsgYXJvdW5kIDQyMTMzMTQuCisgICAgW2Rv
Y3VtZW50VmlldygpIHNjcm9sbFBvaW50OnRlbXBQb2ludF07CisgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKK30KKworYm9vbCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcm9sbChTY3JvbGxE
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5KQoreworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBi
ZSBuaWNlIHRvIGltcGxlbWVudCB0aGlzIHNvIHRoYXQgYWxsIG9mIHRoZSBjb2RlIGluIFdlYkZy
YW1lVmlldyBjb3VsZCBnbyBhd2F5LgorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtUmVwYWludENvbnRlbnRSZWN0
YW5nbGUoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCAvKm5vdyovKQoreworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5TVmlldyAqdmlldyA9IGRvY3VtZW50Vmlldygp
OworCisgICAgW3ZpZXcgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OnJlY3RdOyAgICAKKyAgICAvLyBG
SVhNRTogSGFuZGxlICJub3ciLgorCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30K
KworLy8gIkNvbnRhaW5pbmcgV2luZG93IiBtZWFucyB0aGUgTlNXaW5kb3cncyBjb29yZCBzeXN0
ZW0sIHdoaWNoIGlzIG9yaWdpbiBsb3dlciBsZWZ0CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6cGxh
dGZvcm1Db250ZW50c1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIGlmIChOU1ZpZXcqIGRvY3VtZW50Vmll
dyA9IHRoaXMtPmRvY3VtZW50VmlldygpKSB7CisgICAgICAgIE5TUmVjdCB0ZW1wUmVjdCA9IHJl
Y3Q7CisgICAgICAgIHRlbXBSZWN0ID0gW2RvY3VtZW50VmlldyBjb252ZXJ0UmVjdDp0ZW1wUmVj
dCB0b1ZpZXc6bmlsXTsKKyAgICAgICAgdGVtcFJlY3Qub3JpZ2luID0gW1tkb2N1bWVudFZpZXcg
d2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOnRlbXBSZWN0Lm9yaWdpbl07CisgICAgICAgIHJl
dHVybiBlbmNsb3NpbmdJbnRSZWN0KHRlbXBSZWN0KTsKKyAgICB9CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCitJbnRQb2ludCBTY3Jv
bGxWaWV3OjpwbGF0Zm9ybVNjcmVlblRvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBj
b25zdAoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBpZiAoTlNWaWV3
KiBkb2N1bWVudFZpZXcgPSB0aGlzLT5kb2N1bWVudFZpZXcoKSkgeworICAgICAgICBOU1BvaW50
IHdpbmRvd0Nvb3JkID0gW1tkb2N1bWVudFZpZXcgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNl
OiBwb2ludF07CisgICAgICAgIHJldHVybiBJbnRQb2ludChbZG9jdW1lbnRWaWV3IGNvbnZlcnRQ
b2ludDp3aW5kb3dDb29yZCBmcm9tVmlldzpuaWxdKTsKKyAgICB9CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gSW50UG9pbnQoKTsKK30KKworYm9vbCBTY3JvbGxW
aWV3OjpwbGF0Zm9ybUlzT2Zmc2NyZWVuKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogRERLOiBT
Y3JvbGxWaWV3TWFjLm1tIGFsc28gY2hlY2tzOiAhW1twbGF0Zm9ybVdpZGdldCgpIHdpbmRvd10g
aXNWaXNpYmxlXQorICAgIC8vIGJ1dCAtW1dBS1dpbmRvdyBpc1Zpc2libGVdIGRvZXNuJ3QgZXhp
c3QuCisgICAgcmV0dXJuICFbcGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddOworfQorCit2b2lkIFNj
cm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhck92ZXJs
YXlTdHlsZSkKK3sKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbE9yaWdp
bihjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBib29sIHVwZGF0ZVBvc2l0aW9uQWxsLCBib29sIHVw
ZGF0ZVBvc2l0aW9uU3luY2hyb25vdXNseSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgW3Njcm9sbFZpZXcoKSBzZXRTY3JvbGxPcmlnaW46c3RhdGljX2Nhc3Q8Q0dQ
b2ludD4ob3JpZ2luKSB1cGRhdGVQb3NpdGlvbkF0QWxsOnVwZGF0ZVBvc2l0aW9uQWxsIGltbWVk
aWF0ZWx5OnVwZGF0ZVBvc2l0aW9uU3luY2hyb25vdXNseV07CisgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Njcm9sbGJhclRoZW1lSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Ny
b2xsYmFyVGhlbWVJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTgxNjJhODFmYWU5NGQ1YTVmY2M1NTg0MzA0
MjI2MTM2OTVlMTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Njcm9sbGJhclRoZW1lSU9TLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjcm9sbGJhclRoZW1lSU9T
X2gKKyNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVJT1NfaAorCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhl
bWVDb21wb3NpdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXJU
aGVtZUlPUyA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSB7CitwdWJsaWM6CisgICAg
U2Nyb2xsYmFyVGhlbWVJT1MoKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZUlPUygpOwor
CisgICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFy
U2Nyb2xsYmFyKSBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250
cm9sVGludHMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFs
IGRvdWJsZSBpbml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxheSgpIE9WRVJSSURFOworCisgICAgdmlydHVh
bCBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQoKSBjb25zdCBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVt
ZUNsaWVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFy
KFNjcm9sbGJhclRoZW1lQ2xpZW50KikgT1ZFUlJJREU7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCopIE9WRVJSSURFOwor
CisgICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50
KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBT
Y3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBib29sIHBhaW50aW5n
ID0gZmFsc2UpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3Ro
KFNjcm9sbGJhclRoZW1lQ2xpZW50KikgT1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCBib29s
IHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmKSBPVkVSUklERTsKKyAgICAKK3B1YmxpYzoKKyAgICB2b2lkIHByZWZlcmVu
Y2VzQ2hhbmdlZCgpOworfTsKKworfQorCisjZW5kaWYgLy8gU2Nyb2xsYmFyVGhlbWVJT1NfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbGJhclRoZW1lSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbGJhclRoZW1lSU9TLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmEzNzc0NTI0ZDFjODJiYmJkOTVmZjM3MzM4ZjQ5NzI0MGE5YzAwZmUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsYmFyVGhlbWVJ
T1MubW0KQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lSU9TLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRS
ZWN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xs
YmFyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbGJhclRoZW1lKiBT
Y3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTY3JvbGxiYXJUaGVtZUlPUz4gdGhlbWU7CisgICAgcmV0dXJuICZ0aGVtZS5nZXQoKTsKK30K
Kwordm9pZCBTY3JvbGxiYXJUaGVtZUlPUzo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqKQoreworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lSU9TOjp1bnJlZ2lzdGVyU2Ny
b2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KikKK3sKK30KKworU2Nyb2xsYmFyVGhlbWVJT1M6
OlNjcm9sbGJhclRoZW1lSU9TKCkKK3sKK30KKworU2Nyb2xsYmFyVGhlbWVJT1M6On5TY3JvbGxi
YXJUaGVtZUlPUygpCit7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVJT1M6OnByZWZlcmVuY2Vz
Q2hhbmdlZCgpCit7Cit9CisKK2ludCBTY3JvbGxiYXJUaGVtZUlPUzo6c2Nyb2xsYmFyVGhpY2tu
ZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplKQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUg
U2Nyb2xsYmFyVGhlbWVJT1M6OmluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpCit7CisgICAg
cmV0dXJuIDA7Cit9CisKK2RvdWJsZSBTY3JvbGxiYXJUaGVtZUlPUzo6YXV0b3Njcm9sbFRpbWVy
RGVsYXkoKQoreworICAgIHJldHVybiAwOworfQorICAgIAorU2Nyb2xsYmFyQnV0dG9uc1BsYWNl
bWVudCBTY3JvbGxiYXJUaGVtZUlPUzo6YnV0dG9uc1BsYWNlbWVudCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFNjcm9sbGJhckJ1dHRvbnNOb25lOworfQorCitib29sIFNjcm9sbGJhclRoZW1lSU9T
OjpoYXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50KikKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVJT1M6Omhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xp
ZW50KikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVJ
T1M6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwg
Ym9vbCAvKnBhaW50aW5nKi8pCit7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworSW50UmVj
dCBTY3JvbGxiYXJUaGVtZUlPUzo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sIC8qcGFpbnRpbmcqLykKK3sKKyAgICByZXR1cm4gSW50
UmVjdCgpOworfQorCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lSU9TOjp0cmFja1JlY3QoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqLCBib29sIC8qcGFpbnRpbmcqLykKK3sKKyAgICByZXR1cm4gSW50UmVj
dCgpOworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVJT1M6Om1pbmltdW1UaHVtYkxlbmd0aChTY3Jv
bGxiYXJUaGVtZUNsaWVudCopCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgU2Nyb2xsYmFy
VGhlbWVJT1M6OnNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBT
Y3JvbGxiYXJUaGVtZUlPUzo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRSZWN0JiAvKmRhbWFnZVJlY3QqLykKK3sKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvblJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1NlbGVjdGlvblJlY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5NzFhYTU0MzUxZGFhYTM1MTk0
NTg4YjViNTI5MmFlNDhhY2E4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvU2VsZWN0aW9uUmVjdC5jcHAKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25SZWN0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworU2VsZWN0aW9uUmVjdDo6U2VsZWN0aW9uUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0LCBib29sIGlzSG9yaXpvbnRhbCwgaW50IGNvbHVtbk51bWJlcikKKyAgICA6
IG1fcmVjdChyZWN0KQorICAgICwgbV9kaXJlY3Rpb24oTFRSKQorICAgICwgbV9taW5YKDApCisg
ICAgLCBtX21heFgoMCkKKyAgICAsIG1fbWF4WSgwKQorICAgICwgbV9saW5lTnVtYmVyKDApCisg
ICAgLCBtX2lzTGluZUJyZWFrKGZhbHNlKQorICAgICwgbV9pc0ZpcnN0T25MaW5lKGZhbHNlKQor
ICAgICwgbV9pc0xhc3RPbkxpbmUoZmFsc2UpCisgICAgLCBtX2NvbnRhaW5zU3RhcnQoZmFsc2Up
CisgICAgLCBtX2NvbnRhaW5zRW5kKGZhbHNlKQorICAgICwgbV9pc0hvcml6b250YWwoaXNIb3Jp
em9udGFsKQorICAgICwgbV9pc0luRml4ZWRQb3NpdGlvbihmYWxzZSkKKyAgICAsIG1faXNSdWJ5
VGV4dChmYWxzZSkKKyAgICAsIG1fY29sdW1uTnVtYmVyKGNvbHVtbk51bWJlcikKK3sKK30KKwor
Ly8gRklYTUU6IFdlIHNob3VsZCBtb3ZlIHNvbWUgb2YgdGhlc2UgYXJndW1lbnRzIHRvIGFuIGF1
eGlsbGFyeSBzdHJ1Y3QuCitTZWxlY3Rpb25SZWN0OjpTZWxlY3Rpb25SZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbWluWCwgaW50IG1heFgsIGlu
dCBtYXhZLAorICAgIGludCBsaW5lTnVtYmVyLCBib29sIGlzTGluZUJyZWFrLCBib29sIGlzRmly
c3RPbkxpbmUsIGJvb2wgaXNMYXN0T25MaW5lLCBib29sIGNvbnRhaW5zU3RhcnQsIGJvb2wgY29u
dGFpbnNFbmQsCisgICAgYm9vbCBpc0hvcml6b250YWwsIGJvb2wgaXNJbkZpeGVkUG9zaXRpb24s
IGJvb2wgaXNSdWJ5VGV4dCwgaW50IGNvbHVtbk51bWJlcikKKyAgICA6IG1fcmVjdChyZWN0KQor
ICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQorICAgICwgbV9taW5YKG1pblgpCisgICAgLCBt
X21heFgobWF4WCkKKyAgICAsIG1fbWF4WShtYXhZKQorICAgICwgbV9saW5lTnVtYmVyKGxpbmVO
dW1iZXIpCisgICAgLCBtX2lzTGluZUJyZWFrKGlzTGluZUJyZWFrKQorICAgICwgbV9pc0ZpcnN0
T25MaW5lKGlzRmlyc3RPbkxpbmUpCisgICAgLCBtX2lzTGFzdE9uTGluZShpc0xhc3RPbkxpbmUp
CisgICAgLCBtX2NvbnRhaW5zU3RhcnQoY29udGFpbnNTdGFydCkKKyAgICAsIG1fY29udGFpbnNF
bmQoY29udGFpbnNFbmQpCisgICAgLCBtX2lzSG9yaXpvbnRhbChpc0hvcml6b250YWwpCisgICAg
LCBtX2lzSW5GaXhlZFBvc2l0aW9uKGlzSW5GaXhlZFBvc2l0aW9uKQorICAgICwgbV9pc1J1YnlU
ZXh0KGlzUnVieVRleHQpCisgICAgLCBtX2NvbHVtbk51bWJlcihjb2x1bW5OdW1iZXIpCit7Cit9
CisKK1NlbGVjdGlvblJlY3Q6OlNlbGVjdGlvblJlY3QoKQorICAgIDogbV9kaXJlY3Rpb24oTFRS
KQorICAgICwgbV9taW5YKDApCisgICAgLCBtX21heFgoMCkKKyAgICAsIG1fbWF4WSgwKQorICAg
ICwgbV9saW5lTnVtYmVyKDApCisgICAgLCBtX2lzTGluZUJyZWFrKGZhbHNlKQorICAgICwgbV9p
c0ZpcnN0T25MaW5lKGZhbHNlKQorICAgICwgbV9pc0xhc3RPbkxpbmUoZmFsc2UpCisgICAgLCBt
X2NvbnRhaW5zU3RhcnQoZmFsc2UpCisgICAgLCBtX2NvbnRhaW5zRW5kKGZhbHNlKQorICAgICwg
bV9pc0hvcml6b250YWwodHJ1ZSkKKyAgICAsIG1faXNJbkZpeGVkUG9zaXRpb24oZmFsc2UpCisg
ICAgLCBtX2lzUnVieVRleHQoZmFsc2UpCisgICAgLCBtX2NvbHVtbk51bWJlcigwKQoreworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvU2VsZWN0aW9uUmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Nl
bGVjdGlvblJlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZGM5MWZkZjFlN2M4MDU2ZGMwNjkyNWFmMGQyMmI0
NTMwZTc1MjlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1NlbGVjdGlvblJlY3QuaApAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U2VsZWN0aW9uUmVjdF9oCisjZGVmaW5lIFNlbGVjdGlvblJlY3RfaAorCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlbGVjdGlvblJlY3Qgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFNlbGVj
dGlvblJlY3QoY29uc3QgSW50UmVjdCYsIGJvb2wgaXNIb3Jpem9udGFsLCBpbnQgY29sdW1uTnVt
YmVyKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbW92ZSBzb21lIG9mIHRoZXNlIGFyZ3Vt
ZW50cyB0byBhbiBhdXhpbGxhcnkgc3RydWN0LgorICAgIFNlbGVjdGlvblJlY3QoY29uc3QgSW50
UmVjdCYsIFRleHREaXJlY3Rpb24sIGludCwgaW50LCBpbnQsIGludCwgYm9vbCwgYm9vbCwgYm9v
bCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgaW50KTsKKyAgICBTZWxlY3Rpb25SZWN0
KCk7CisgICAgflNlbGVjdGlvblJlY3QoKSB7IH0KKworICAgIEludFJlY3QgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgaW50IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1
cm4gbV9pc0hvcml6b250YWwgPyBtX3JlY3QueCgpIDogbV9yZWN0LnkoKTsgfQorICAgIGludCBs
b2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2lzSG9yaXpvbnRhbCA/IG1fcmVjdC53aWR0
aCgpIDogbV9yZWN0LmhlaWdodCgpOyB9CisgICAgaW50IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJl
dHVybiBtX2lzSG9yaXpvbnRhbCA/IG1fcmVjdC55KCkgOiBtX3JlY3QueCgpOyB9CisgICAgaW50
IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2lzSG9yaXpvbnRhbCA/IG1fcmVjdC5o
ZWlnaHQoKSA6IG1fcmVjdC53aWR0aCgpOyB9CisKKyAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CisgICAgaW50IG1pblgoKSBjb25zdCB7
IHJldHVybiBtX21pblg7IH0KKyAgICBpbnQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4WDsg
fQorICAgIGludCBtYXhZKCkgY29uc3QgeyByZXR1cm4gbV9tYXhZOyB9CisgICAgaW50IGxpbmVO
dW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xpbmVOdW1iZXI7IH0KKyAgICBib29sIGlzTGluZUJy
ZWFrKCkgY29uc3QgeyByZXR1cm4gbV9pc0xpbmVCcmVhazsgfQorICAgIGJvb2wgaXNGaXJzdE9u
TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXJzdE9uTGluZTsgfQorICAgIGJvb2wgaXNMYXN0
T25MaW5lKCkgY29uc3QgeyByZXR1cm4gbV9pc0xhc3RPbkxpbmU7IH0KKyAgICBib29sIGNvbnRh
aW5zU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zU3RhcnQ7IH0KKyAgICBib29sIGNv
bnRhaW5zRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0VuZDsgfQorICAgIGJvb2wgaXNI
b3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250YWw7IH0KKyAgICBib29sIGlz
SW5GaXhlZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0luRml4ZWRQb3NpdGlvbjsgfQor
ICAgIGJvb2wgaXNSdWJ5VGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNSdWJ5VGV4dDsgfQorICAg
IGludCBjb2x1bW5OdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbk51bWJlcjsgfQorCisg
ICAgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9yZWN0ID0gcmVjdDsgfQor
CisgICAgdm9pZCBzZXRMb2dpY2FsTGVmdChpbnQgbGVmdCkKKyAgICB7CisgICAgICAgIGlmICht
X2lzSG9yaXpvbnRhbCkKKyAgICAgICAgICAgIG1fcmVjdC5zZXRYKGxlZnQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX3JlY3Quc2V0WShsZWZ0KTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dExvZ2ljYWxXaWR0aChpbnQgd2lkdGgpCisgICAgeworICAgICAgICBpZiAobV9pc0hvcml6b250
YWwpCisgICAgICAgICAgICBtX3JlY3Quc2V0V2lkdGgod2lkdGgpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX3JlY3Quc2V0SGVpZ2h0KHdpZHRoKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dExvZ2ljYWxUb3AoaW50IHRvcCkKKyAgICB7CisgICAgICAgIGlmIChtX2lzSG9yaXpvbnRhbCkK
KyAgICAgICAgICAgIG1fcmVjdC5zZXRZKHRvcCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fcmVjdC5zZXRYKHRvcCk7CisgICAgfQorCisgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KGlu
dCBoZWlnaHQpCisgICAgeworICAgICAgICBpZiAobV9pc0hvcml6b250YWwpCisgICAgICAgICAg
ICBtX3JlY3Quc2V0SGVpZ2h0KGhlaWdodCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
cmVjdC5zZXRXaWR0aChoZWlnaHQpOworICAgIH0KKworICAgIHZvaWQgc2V0RGlyZWN0aW9uKFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uKSB7IG1fZGlyZWN0aW9uID0gZGlyZWN0aW9uOyB9CisgICAg
dm9pZCBzZXRNaW5YKGludCBtaW5YKSB7IG1fbWluWCA9IG1pblg7IH0KKyAgICB2b2lkIHNldE1h
eFgoaW50IG1heFgpIHsgbV9tYXhYID0gbWF4WDsgfQorICAgIHZvaWQgc2V0TWF4WShpbnQgbWF4
WSkgeyBtX21heFkgPSBtYXhZOyB9CisgICAgdm9pZCBzZXRMaW5lTnVtYmVyKGludCBsaW5lTnVt
YmVyKSB7IG1fbGluZU51bWJlciA9IGxpbmVOdW1iZXI7IH0KKyAgICB2b2lkIHNldElzTGluZUJy
ZWFrKGJvb2wgaXNMaW5lQnJlYWspIHsgbV9pc0xpbmVCcmVhayA9IGlzTGluZUJyZWFrOyB9Cisg
ICAgdm9pZCBzZXRJc0ZpcnN0T25MaW5lKGJvb2wgaXNGaXJzdE9uTGluZSkgeyBtX2lzRmlyc3RP
bkxpbmUgPSBpc0ZpcnN0T25MaW5lOyB9CisgICAgdm9pZCBzZXRJc0xhc3RPbkxpbmUoYm9vbCBp
c0xhc3RPbkxpbmUpIHsgbV9pc0xhc3RPbkxpbmUgPSBpc0xhc3RPbkxpbmU7IH0KKyAgICB2b2lk
IHNldENvbnRhaW5zU3RhcnQoYm9vbCBjb250YWluc1N0YXJ0KSB7IG1fY29udGFpbnNTdGFydCA9
IGNvbnRhaW5zU3RhcnQ7IH0KKyAgICB2b2lkIHNldENvbnRhaW5zRW5kKGJvb2wgY29udGFpbnNF
bmQpIHsgbV9jb250YWluc0VuZCA9IGNvbnRhaW5zRW5kOyB9CisgICAgdm9pZCBzZXRJc0hvcml6
b250YWwoYm9vbCBpc0hvcml6b250YWwpIHsgbV9pc0hvcml6b250YWwgPSBpc0hvcml6b250YWw7
IH0KKworcHJpdmF0ZToKKyAgICBJbnRSZWN0IG1fcmVjdDsKKyAgICBUZXh0RGlyZWN0aW9uIG1f
ZGlyZWN0aW9uOworICAgIGludCBtX21pblg7CisgICAgaW50IG1fbWF4WDsKKyAgICBpbnQgbV9t
YXhZOworICAgIGludCBtX2xpbmVOdW1iZXI7CisgICAgYm9vbCBtX2lzTGluZUJyZWFrOworICAg
IGJvb2wgbV9pc0ZpcnN0T25MaW5lOworICAgIGJvb2wgbV9pc0xhc3RPbkxpbmU7CisgICAgYm9v
bCBtX2NvbnRhaW5zU3RhcnQ7CisgICAgYm9vbCBtX2NvbnRhaW5zRW5kOworICAgIGJvb2wgbV9p
c0hvcml6b250YWw7CisgICAgYm9vbCBtX2lzSW5GaXhlZFBvc2l0aW9uOworICAgIGJvb2wgbV9p
c1J1YnlUZXh0OworICAgIGludCBtX2NvbHVtbk51bWJlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFNlbGVjdGlvblJlY3RfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NvdW5kSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1NvdW5kSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0ZDU0OTMzNDU0ZTAyMWQ1OTAwMWY4Zjgz
MmJjYzljNzE3ZDhiNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvU291bmRJT1MubW0KQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNvdW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordm9pZCBzeXN0ZW1CZWVwKCkgeyBOU0xvZyhAIldlYmNvcmUgTlNCZWVwKCkhIik7IH0g
ICAgCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9TeXN0ZW1NZW1vcnlJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1N5c3RlbU1lbW9yeUlPUy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQyMjBjNTA1MTg3YTU0ODdl
MWYzOTY0M2FkNDIwZGIxN2E3ZmFhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9TeXN0ZW1NZW1vcnlJT1MuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTeXN0ZW1NZW1vcnkuaCIKKworI2luY2x1ZGUgPG1h
Y2gvbWFjaC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2ludCBzeXN0ZW1NZW1vcnlMZXZlbCgpCit7CisjaWYgUExBVEZPUk0oSU9TX1NJTVVM
QVRPUikKKyAgICByZXR1cm4gMzU7CisjZWxzZQorICAgIHN0YXRpYyBpbnQgbWVtb3J5RnJlZUxl
dmVsID0gLTE7CisgICAgc3RhdGljIGRvdWJsZSBwcmV2aW91c0NoZWNrVGltZTsgCisgICAgZG91
YmxlIHRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIGlmICh0aW1lIC0gcHJldmlvdXNDaGVja1Rp
bWUgPCAwLjEpCisgICAgICAgIHJldHVybiBtZW1vcnlGcmVlTGV2ZWw7CisgICAgcHJldmlvdXND
aGVja1RpbWUgPSB0aW1lOworICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKG1lbW9yeUZyZWVMZXZl
bCk7CisgICAgc3lzY3RsYnluYW1lKCJrZXJuLm1lbW9yeXN0YXR1c19sZXZlbCIsICZtZW1vcnlG
cmVlTGV2ZWwsICZzaXplLCBudWxscHRyLCAwKTsKKyAgICByZXR1cm4gbWVtb3J5RnJlZUxldmVs
OworI2VuZGlmCit9CisKKyNpZiAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKK3N0YXRpYyBob3N0
X2Jhc2ljX2luZm9fZGF0YV90IGdIb3N0QmFzaWNJbmZvOworCitzdGF0aWMgdm9pZCBpbml0Q2Fw
YWJpbGl0aWVzKHZvaWQpCit7CisgICAgLy8gRGlzY292ZXIgb3VyIENQVSB0eXBlCisgICAgbWFj
aF9wb3J0X3QgaG9zdCA9IG1hY2hfaG9zdF9zZWxmKCk7CisgICAgbWFjaF9tc2dfdHlwZV9udW1i
ZXJfdCBjb3VudCA9IEhPU1RfQkFTSUNfSU5GT19DT1VOVDsKKyAgICBrZXJuX3JldHVybl90IHJl
dHVyblZhbHVlID0gaG9zdF9pbmZvKGhvc3QsIEhPU1RfQkFTSUNfSU5GTywgcmVpbnRlcnByZXRf
Y2FzdDxob3N0X2luZm9fdD4oJmdIb3N0QmFzaWNJbmZvKSwgJmNvdW50KTsKKyAgICBtYWNoX3Bv
cnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBob3N0KTsKKyAgICBpZiAocmV0dXJuVmFs
dWUgIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICBMT0dfRVJST1IoIiVzIDogaG9zdF9pbmZvKCVk
KSA6ICVzLlxuIiwgX19GVU5DVElPTl9fLCByZXR1cm5WYWx1ZSwgbWFjaF9lcnJvcl9zdHJpbmco
cmV0dXJuVmFsdWUpKTsKK30KKyNlbmRpZgorCitzaXplX3Qgc3lzdGVtVG90YWxNZW1vcnkoKQor
eworI2lmIFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCisgICAgcmV0dXJuIDUxMiAqIDEwMjQgKiAx
MDI0OworI2Vsc2UKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgQysrMTEgdGhyZWFkIHBy
aW1pdGl2ZXMuCisgICAgc3RhdGljIHB0aHJlYWRfb25jZV90IGluaXRDb250cm9sID0gUFRIUkVB
RF9PTkNFX0lOSVQ7CisKKyAgICBwdGhyZWFkX29uY2UoJmluaXRDb250cm9sLCBpbml0Q2FwYWJp
bGl0aWVzKTsKKyAgICAvLyBUaGUgdmFsdWUgaW4gZ0hvc3RCYXNpY0luZm8ubWF4X21lbSBpcyBv
ZnRlbiBsb3dlciB0aGFuIHRoZSBhbW91bnQgd2UncmUKKyAgICAvLyBpbnRlcmVzdGVkIGluIChl
LmcuLCBkb2VzIHRoaXMgZGV2aWNlIGhhdmUgYXQgbGVhc3QgMjU2TUIgb2YgUkFNPykKKyAgICAv
LyBSb3VuZCB0aGUgdmFsdWUgdG8gdGhlIG5lYXJlc3QgcG93ZXIgb2YgMi4KKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8c2l6ZV90PihleHAyKGNlaWwobG9nMihnSG9zdEJhc2ljSW5mby5tYXhfbWVt
KSkpKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGhlbWVJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9UaGVtZUlPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzY2M5YmE3M2Q5MTU2NGMwMzA2ZGZj
NmJhMWNhNWRiNDE5NzI5MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVGhlbWVJT1MuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVGhlbWVJT1NfaAorI2RlZmluZSBU
aGVtZUlPU19oCisKKyNpbmNsdWRlICJUaGVtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFRoZW1lSU9TIDogcHVibGljIFRoZW1lIHsKK3B1YmxpYzoKKyAgICBUaGVtZUlPUygp
IHsgfQorICAgIHZpcnR1YWwgflRoZW1lSU9TKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBUaGVtZUlPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
VGhlbWVJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjQ2ZmMzYWIyZDZjMWIyMmViNmY1ZjJlN2Q3MDA1NWEy
MTUzMjkwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9U
aGVtZUlPUy5tbQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGhlbWVJT1Mu
aCIKKworI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJTY3JvbGxWaWV3Lmgi
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIEZJWE1FOiBJbXBsZW1lbnQgYmVmb3JlIGVuYWJsaW5nIFVTRShORVdfVEhFTUUpLgorCitU
aGVtZSogcGxhdGZvcm1UaGVtZSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRoZW1l
SU9TPiB0aGVtZUlPUzsKKyAgICByZXR1cm4gJnRoZW1lSU9TLmdldCgpOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWUzYjk1NWE1Mzhj
NWFmMWQ0MTFkZTExNzdmYzdlYmM2ZThjYTYzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlQ2FjaGUuaApAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgVGlsZUNhY2hlX2gKKyNkZWZpbmUgVGlsZUNhY2hlX2gKKworI2lmIFBM
QVRGT1JNKElPUykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJU
aW1lci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZmRlZiBfX09CSkNfXworQGNsYXNz
IENBTGF5ZXI7CitAY2xhc3MgVGlsZUNhY2hlVG9tYnN0b25lOworQGNsYXNzIFRpbGVMYXllcjsK
K0BjbGFzcyBXQUtXaW5kb3c7CisjZWxzZQorY2xhc3MgQ0FMYXllcjsKK2NsYXNzIFRpbGVDYWNo
ZVRvbWJzdG9uZTsKK2NsYXNzIFRpbGVMYXllcjsKK2NsYXNzIFdBS1dpbmRvdzsKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRpbGVHcmlkOworCitjbGFzcyBUaWxlQ2Fj
aGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGVDYWNoZSk7CitwdWJsaWM6CisgICAg
VGlsZUNhY2hlKFdBS1dpbmRvdyopOworICAgIH5UaWxlQ2FjaGUoKTsKKworICAgIENHRmxvYXQg
c2NyZWVuU2NhbGUoKSBjb25zdDsKKworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAg
dm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIAorICAgIHZv
aWQgbGF5b3V0VGlsZXMoKTsKKyAgICB2b2lkIGxheW91dFRpbGVzTm93KCk7CisgICAgdm9pZCBs
YXlvdXRUaWxlc05vd0ZvclJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgcmVtb3ZlQWxs
Tm9uVmlzaWJsZVRpbGVzKCk7CisgICAgdm9pZCByZW1vdmVBbGxUaWxlcygpOworICAgIHZvaWQg
cmVtb3ZlRm9yZWdyb3VuZFRpbGVzKCk7CisKKyAgICAvLyBJZiAnY29udGVudFJlcGxhY2VtZW50
SW1hZ2UnIGlzIG5vdCBOVUxMLCBkcmF3TGF5ZXIoKSBkcmF3cworICAgIC8vIGNvbnRlbnRSZXBs
YWNlbWVudEltYWdlIGluc3RlYWQgb2YgdGhlIHBhZ2UgY29udGVudC4gV2UgYXNzdW1lIHRoZQor
ICAgIC8vIGltYWdlIGlzIHRvIGJlIGRyYXduIGF0IHRoZSBvcmlnaW4gYW5kIHNjYWxlZCB0byBt
YXRjaCBkZXZpY2UgcGl4ZWxzLgorICAgIHZvaWQgc2V0Q29udGVudFJlcGxhY2VtZW50SW1hZ2Uo
UmV0YWluUHRyPENHSW1hZ2VSZWY+KTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVu
dFJlcGxhY2VtZW50SW1hZ2UoKSBjb25zdDsKKworICAgIHZvaWQgc2V0VGlsZUJvcmRlcnNWaXNp
YmxlKGJvb2wpOworICAgIGJvb2wgdGlsZUJvcmRlcnNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4g
bV90aWxlQm9yZGVyc1Zpc2libGU7IH0KKworICAgIHZvaWQgc2V0VGlsZVBhaW50Q291bnRlcnNW
aXNpYmxlKGJvb2wpOworICAgIGJvb2wgdGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKCkgY29uc3Qg
eyByZXR1cm4gbV90aWxlUGFpbnRDb3VudGVyc1Zpc2libGU7IH0KKworICAgIHZvaWQgc2V0QWNj
ZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZERyYXdp
bmdFbmFibGVkID0gZW5hYmxlZDsgfQorICAgIGJvb2wgYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZDsgfQorCisgICAg
dm9pZCBzZXRLZWVwc1pvb21lZE91dFRpbGVzKGJvb2wpOworICAgIGJvb2wga2VlcHNab29tZWRP
dXRUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fa2VlcHNab29tZWRPdXRUaWxlczsgfQorCisgICAg
dm9pZCBzZXRab29tZWRPdXRTY2FsZShmbG9hdCk7CisgICAgZmxvYXQgem9vbWVkT3V0U2NhbGUo
KSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHNldEN1cnJlbnRTY2FsZShmbG9hdCk7CisgICAgZmxv
YXQgY3VycmVudFNjYWxlKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCB0aWxlc09wYXF1ZSgpIGNv
bnN0OworICAgIHZvaWQgc2V0VGlsZXNPcGFxdWUoYm9vbCk7CisgICAgCisgICAgZW51bSBUaWxp
bmdNb2RlIHsKKyAgICAgICAgTm9ybWFsLAorICAgICAgICBNaW5pbWFsLAorICAgICAgICBQYW5u
aW5nLAorICAgICAgICBab29taW5nLAorICAgICAgICBEaXNhYmxlZCwKKyAgICAgICAgU2Nyb2xs
VG9Ub3AKKyAgICB9OworICAgIFRpbGluZ01vZGUgdGlsaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGlsaW5nTW9kZTsgfQorICAgIHZvaWQgc2V0VGlsaW5nTW9kZShUaWxpbmdNb2RlKTsKKwor
ICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIFRpbGluZ0RpcmVjdGlvblVwLAorICAgICAgICBU
aWxpbmdEaXJlY3Rpb25Eb3duLAorICAgICAgICBUaWxpbmdEaXJlY3Rpb25MZWZ0LAorICAgICAg
ICBUaWxpbmdEaXJlY3Rpb25SaWdodCwKKyAgICB9IFRpbGluZ0RpcmVjdGlvbjsKKyAgICB2b2lk
IHNldFRpbGluZ0RpcmVjdGlvbihUaWxpbmdEaXJlY3Rpb24pOworICAgIFRpbGluZ0RpcmVjdGlv
biB0aWxpbmdEaXJlY3Rpb24oKSBjb25zdDsKKworICAgIGJvb2wgaGFzUGVuZGluZ0RyYXcoKSBj
b25zdDsKKworICAgIHZvaWQgaG9zdExheWVyU2l6ZUNoYW5nZWQoKTsKKworICAgIHN0YXRpYyB2
b2lkIHNldExheWVyUG9vbENhcGFjaXR5KHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgdm9pZCBkcmFp
bkxheWVyUG9vbCgpOworCisgICAgLy8gTG9nZ2luZworICAgIHZvaWQgZHVtcFRpbGVzKCk7CisK
KyAgICAvLyBJbnRlcm5hbAorICAgIHZvaWQgZG9MYXlvdXRUaWxlcygpOworICAgIHZvaWQgZHJh
d0xheWVyKFRpbGVMYXllciosIENHQ29udGV4dFJlZik7CisgICAgdm9pZCBwcmVwYXJlVG9EcmF3
KCk7CisgICAgdm9pZCBmaW5pc2hlZENyZWF0aW5nVGlsZXMoYm9vbCBkaWRDcmVhdGVUaWxlcywg
Ym9vbCBjcmVhdGVNb3JlKTsKKyAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3RJbkxheWVyKENBTGF5
ZXIgKikgY29uc3Q7CisgICAgQ0FMYXllciogaG9zdExheWVyKCkgY29uc3Q7CisgICAgdW5zaWdu
ZWQgdGlsZUNhcGFjaXR5Rm9yR3JpZChUaWxlR3JpZCopOworICAgIENvbG9yIGNvbG9yRm9yR3Jp
ZFRpbGVCb3JkZXIoVGlsZUdyaWQqKSBjb25zdDsKKworICAgIHZvaWQgZG9QZW5kaW5nUmVwYWlu
dHMoKTsKKworICAgIGJvb2wgaXNTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX2lzU3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkOyB9CisgICAgdm9p
ZCBzZXRTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQoYm9vbCk7CisgICAgCisgICAgZW51
bSBTeW5jaHJvbm91c1RpbGVDcmVhdGlvbk1vZGUgeyBDb3ZlclZpc2libGVPbmx5LCBDb3ZlclNw
ZWN1bGF0aXZlIH07CisKK3ByaXZhdGU6CisgICAgVGlsZUdyaWQqIGFjdGl2ZVRpbGVHcmlkKCkg
Y29uc3Q7CisgICAgVGlsZUdyaWQqIGluYWN0aXZlVGlsZUdyaWQoKSBjb25zdDsKKworICAgIHZv
aWQgdXBkYXRlVGlsaW5nTW9kZSgpOworICAgIGJvb2wgaXNUaWxlSW52YWxpZGF0aW9uU3VzcGVu
ZGVkKCkgY29uc3Q7CisgICAgYm9vbCBpc1RpbGVDcmVhdGlvblN1c3BlbmRlZCgpIGNvbnN0Owor
ICAgIHZvaWQgZmx1c2hTYXZlZERpc3BsYXlSZWN0cygpOworICAgIHZvaWQgaW52YWxpZGF0ZVRp
bGVzKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdm9pZCBzZXRab29tZWRPdXRTY2Fs
ZUludGVybmFsKGZsb2F0KTsKKyAgICB2b2lkIGNvbW1pdFNjYWxlQ2hhbmdlKCk7CisgICAgdm9p
ZCBicmluZ0FjdGl2ZVRpbGVHcmlkVG9Gcm9udCgpOworICAgIHZvaWQgYWRqdXN0VGlsZUdyaWRU
cmFuc2Zvcm1zKCk7CisgICAgdm9pZCByZW1vdmVBbGxOb25WaXNpYmxlVGlsZXNJbnRlcm5hbCgp
OworICAgIHZvaWQgY3JlYXRlVGlsZXNJbkFjdGl2ZUdyaWQoU3luY2hyb25vdXNUaWxlQ3JlYXRp
b25Nb2RlKTsKKyAgICB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50KCk7
CisKKyAgICB2b2lkIHRpbGVDcmVhdGlvblRpbWVyRmlyZWQoVGltZXI8VGlsZUNhY2hlPiopOwor
CisgICAgdm9pZCBkcmF3UmVwbGFjZW1lbnRJbWFnZShUaWxlTGF5ZXIqLCBDR0NvbnRleHRSZWYs
IENHSW1hZ2VSZWYpOworICAgIHZvaWQgZHJhd1dpbmRvd0NvbnRlbnQoVGlsZUxheWVyKiwgQ0dD
b250ZXh0UmVmLCBDR1JlY3QgZGlydHlSZWN0KTsKKworICAgIFdBS1dpbmRvdyogbV93aW5kb3c7
CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9jb250ZW50UmVwbGFjZW1lbnRJbWFnZTsK
KworICAgIGJvb2wgbV9rZWVwc1pvb21lZE91dFRpbGVzOworCisgICAgYm9vbCBtX2hhc1BlbmRp
bmdMYXlvdXRUaWxlczsKKyAgICBib29sIG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01vZGU7Cisg
ICAgLy8gRW5zdXJlIHRoZXJlIGFyZSBubyBhc3luYyBjYWxscyBvbiBhIGRlYWQgdGlsZSBjYWNo
ZS4KKyAgICBSZXRhaW5QdHI8VGlsZUNhY2hlVG9tYnN0b25lPiBtX3RvbWJzdG9uZTsKKworICAg
IFRpbGluZ01vZGUgbV90aWxpbmdNb2RlOworICAgIFRpbGluZ0RpcmVjdGlvbiBtX3RpbGluZ0Rp
cmVjdGlvbjsKKworICAgIEludFNpemUgbV90aWxlU2l6ZTsKKyAgICBib29sIG1fdGlsZXNPcGFx
dWU7CisKKyAgICBib29sIG1fdGlsZUJvcmRlcnNWaXNpYmxlOworICAgIGJvb2wgbV90aWxlUGFp
bnRDb3VudGVyc1Zpc2libGU7CisgICAgYm9vbCBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQ7
CisgICAgYm9vbCBtX2lzU3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkOworCisgICAgYm9v
bCBtX2RpZENhbGxXaWxsU3RhcnRTY3JvbGxpbmdPclpvb21pbmc7CisgICAgT3duUHRyPFRpbGVH
cmlkPiBtX3pvb21lZE91dFRpbGVHcmlkOworICAgIE93blB0cjxUaWxlR3JpZD4gbV96b29tZWRJ
blRpbGVHcmlkOworCisgICAgVGltZXI8VGlsZUNhY2hlPiBtX3RpbGVDcmVhdGlvblRpbWVyOwor
CisgICAgVmVjdG9yPEludFJlY3Q+IG1fc2F2ZWREaXNwbGF5UmVjdHM7CisKKyAgICBmbG9hdCBt
X2N1cnJlbnRTY2FsZTsKKworICAgIGZsb2F0IG1fcGVuZGluZ1NjYWxlOworICAgIGZsb2F0IG1f
cGVuZGluZ1pvb21lZE91dFNjYWxlOworCisgICAgbXV0YWJsZSBNdXRleCBtX3RpbGVNdXRleDsK
KyAgICBtdXRhYmxlIE11dGV4IG1fc2F2ZWREaXNwbGF5UmVjdE11dGV4OworICAgIG11dGFibGUg
TXV0ZXggbV9jb250ZW50UmVwbGFjZW1lbnRJbWFnZU11dGV4OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gVGlsZUNh
Y2hlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlQ2FjaGUu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjBjZWMwN2Q2YmUzYTg3ZmY3YWVjMWI4NTkyMzlmMzBkMDhmNWNjYTgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLm1tCkBAIC0wLDAgKzEs
ODIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRpbGVD
YWNoZS5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk1lbW9yeVByZXNzdXJlSGFuZGxlci5oIgorI2luY2x1ZGUgIlN5c3RlbU1lbW9yeS5o
IgorI2luY2x1ZGUgIlRpbGVHcmlkLmgiCisjaW5jbHVkZSAiVGlsZUdyaWRUaWxlLmgiCisjaW5j
bHVkZSAiVGlsZUxheWVyLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyUG9vbC5oIgorI2luY2x1ZGUg
IldBS1dpbmRvdy5oIgorI2luY2x1ZGUgIldLR3JhcGhpY3MuaCIKKyNpbmNsdWRlICJXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZFJ1bi5oIgorI2luY2x1
ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6
Q29yZVByaXZhdGUuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworQGludGVyZmFj
ZSBXQUtWaWV3IChXZWJWaWV3RXh0cmFzKQorLSAodm9pZClfZGlzcGF0Y2hUaWxlRGlkRHJhdzoo
Q0FMYXllciopdGlsZTsKKy0gKHZvaWQpX3dpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZzsKKy0g
KHZvaWQpX2RpZEZpbmlzaFNjcm9sbGluZ09yWm9vbWluZzsKKy0gKHZvaWQpX2Rpc3BhdGNoVGls
ZURpZERyYXc7CistICh2b2lkKV9zY2hlZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5nVGlsZUNhY2hl
UmVwYWludDsKK0BlbmQKKworQGludGVyZmFjZSBUaWxlQ2FjaGVUb21ic3RvbmUgOiBOU09iamVj
dCB7CisgICAgQk9PTCBkZWFkOworfQorQHByb3BlcnR5KGdldHRlcj1pc0RlYWQpIEJPT0wgZGVh
ZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGlsZUNhY2hlVG9tYnN0b25lCisKK0BzeW50
aGVzaXplIGRlYWQ7CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUaWxlQ2FjaGU6
OlRpbGVDYWNoZShXQUtXaW5kb3cqIHdpbmRvdykKKyAgICA6IG1fd2luZG93KHdpbmRvdykKKyAg
ICAsIG1fa2VlcHNab29tZWRPdXRUaWxlcyhmYWxzZSkKKyAgICAsIG1faGFzUGVuZGluZ0xheW91
dFRpbGVzKGZhbHNlKQorICAgICwgbV9oYXNQZW5kaW5nVXBkYXRlVGlsaW5nTW9kZShmYWxzZSkK
KyAgICAsIG1fdG9tYnN0b25lKGFkb3B0TlMoW1tUaWxlQ2FjaGVUb21ic3RvbmUgYWxsb2NdIGlu
aXRdKSkKKyAgICAsIG1fdGlsaW5nTW9kZShOb3JtYWwpCisgICAgLCBtX3RpbGluZ0RpcmVjdGlv
bihUaWxpbmdEaXJlY3Rpb25Eb3duKQorICAgICwgbV90aWxlU2l6ZSg1MTIsIDUxMikKKyAgICAs
IG1fdGlsZXNPcGFxdWUodHJ1ZSkKKyAgICAsIG1fdGlsZUJvcmRlcnNWaXNpYmxlKGZhbHNlKQor
ICAgICwgbV90aWxlUGFpbnRDb3VudGVyc1Zpc2libGUoZmFsc2UpCisgICAgLCBtX2FjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQoZmFsc2UpCisgICAgLCBtX2lzU3BlY3VsYXRpdmVUaWxlQ3JlYXRp
b25FbmFibGVkKHRydWUpCisgICAgLCBtX2RpZENhbGxXaWxsU3RhcnRTY3JvbGxpbmdPclpvb21p
bmcoZmFsc2UpCisgICAgLCBtX3pvb21lZE91dFRpbGVHcmlkKFBhc3NPd25QdHI8VGlsZUdyaWQ+
KCkpCisgICAgLCBtX3pvb21lZEluVGlsZUdyaWQoUGFzc093blB0cjxUaWxlR3JpZD4oKSkKKyAg
ICAsIG1fdGlsZUNyZWF0aW9uVGltZXIodGhpcywgJlRpbGVDYWNoZTo6dGlsZUNyZWF0aW9uVGlt
ZXJGaXJlZCkKKyAgICAsIG1fY3VycmVudFNjYWxlKDEuZikKKyAgICAsIG1fcGVuZGluZ1NjYWxl
KDApCisgICAgLCBtX3BlbmRpbmdab29tZWRPdXRTY2FsZSgwKQoreworICAgIG1fem9vbWVkT3V0
VGlsZUdyaWQgPSBUaWxlR3JpZDo6Y3JlYXRlKHRoaXMsIG1fdGlsZVNpemUpOworICAgIFtob3N0
TGF5ZXIoKSBpbnNlcnRTdWJsYXllcjptX3pvb21lZE91dFRpbGVHcmlkLT50aWxlSG9zdExheWVy
KCkgYXRJbmRleDowXTsKKyAgICBob3N0TGF5ZXJTaXplQ2hhbmdlZCgpOworfQorCitUaWxlQ2Fj
aGU6On5UaWxlQ2FjaGUoKQoreworICAgIFttX3RvbWJzdG9uZS5nZXQoKSBzZXREZWFkOnRydWVd
OworfQorCitDR0Zsb2F0IFRpbGVDYWNoZTo6c2NyZWVuU2NhbGUoKSBjb25zdAoreworICAgIHJl
dHVybiBbbV93aW5kb3cgc2NyZWVuU2NhbGVdOworfQorCitDQUxheWVyKiBUaWxlQ2FjaGU6Omhv
c3RMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX3dpbmRvdyBob3N0TGF5ZXJdOworfQor
CitGbG9hdFJlY3QgVGlsZUNhY2hlOjp2aXNpYmxlUmVjdEluTGF5ZXIoQ0FMYXllciAqbGF5ZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFtsYXllciBjb252ZXJ0UmVjdDpbbV93aW5kb3cgZXh0ZW5k
ZWRWaXNpYmxlUmVjdF0gZnJvbUxheWVyOmhvc3RMYXllcigpXTsKK30KKworYm9vbCBUaWxlQ2Fj
aGU6OnRpbGVzT3BhcXVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlc09wYXF1ZTsKK30K
KyAgICAKK1RpbGVHcmlkKiBUaWxlQ2FjaGU6OmFjdGl2ZVRpbGVHcmlkKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fa2VlcHNab29tZWRPdXRUaWxlcykKKyAgICAgICAgcmV0dXJuIG1fem9vbWVkT3V0
VGlsZUdyaWQuZ2V0KCk7CisgICAgaWYgKG1fdGlsaW5nTW9kZSA9PSBab29taW5nKQorICAgICAg
ICByZXR1cm4gbV96b29tZWRPdXRUaWxlR3JpZC5nZXQoKTsKKyAgICBpZiAobV96b29tZWRJblRp
bGVHcmlkICYmIG1fY3VycmVudFNjYWxlID09IG1fem9vbWVkSW5UaWxlR3JpZC0+c2NhbGUoKSkK
KyAgICAgICAgcmV0dXJuIG1fem9vbWVkSW5UaWxlR3JpZC5nZXQoKTsKKyAgICByZXR1cm4gbV96
b29tZWRPdXRUaWxlR3JpZC5nZXQoKTsKK30KKworVGlsZUdyaWQqIFRpbGVDYWNoZTo6aW5hY3Rp
dmVUaWxlR3JpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFjdGl2ZVRpbGVHcmlkKCkgPT0gbV96
b29tZWRPdXRUaWxlR3JpZCA/IG1fem9vbWVkSW5UaWxlR3JpZC5nZXQoKSA6IG1fem9vbWVkT3V0
VGlsZUdyaWQuZ2V0KCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlc09wYXF1ZShib29s
IG9wYXF1ZSkKK3sKKyAgICBpZiAobV90aWxlc09wYXF1ZSA9PSBvcGFxdWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisKKyAgICBtX3Rp
bGVzT3BhcXVlID0gb3BhcXVlOworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnVwZGF0ZVRpbGVP
cGFjaXR5KCk7CisgICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCkKKyAgICAgICAgbV96b29tZWRJ
blRpbGVHcmlkLT51cGRhdGVUaWxlT3BhY2l0eSgpOworfQorCit2b2lkIFRpbGVDYWNoZTo6ZG9M
YXlvdXRUaWxlcygpCit7CisgICAgaWYgKGlzVGlsZUNyZWF0aW9uU3VzcGVuZGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAg
VGlsZUdyaWQqIGFjdGl2ZUdyaWQgPSBhY3RpdmVUaWxlR3JpZCgpOworICAgIC8vIEV2ZW4gdGhv
dWdoIHdlIGFyZW4ndCBhY3R1YWxseSBjcmVhdGluZyB0aWxlcyBpbiB0aGUgaW5hY3RpdmUgZ3Jp
ZCwgd2UKKyAgICAvLyBzdGlsbCBuZWVkIHRvIGRyb3AgaW52YWxpZCB0aWxlcyBpbiByZXNwb25z
ZSB0byBhIGxheW91dC4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4Mzk4Njc+LgorICAg
IGlmIChUaWxlR3JpZCogaW5hY3RpdmVHcmlkID0gaW5hY3RpdmVUaWxlR3JpZCgpKQorICAgICAg
ICBpbmFjdGl2ZUdyaWQtPmRyb3BJbnZhbGlkVGlsZXMoKTsKKyAgICBpZiAoYWN0aXZlR3JpZC0+
Y2hlY2tEb1NpbmdsZVRpbGVMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNyZWF0ZVRp
bGVzSW5BY3RpdmVHcmlkKENvdmVyVmlzaWJsZU9ubHkpOworfQorCit2b2lkIFRpbGVDYWNoZTo6
aG9zdExheWVyU2l6ZUNoYW5nZWQoKQoreworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnVwZGF0
ZUhvc3RMYXllclNpemUoKTsKKyAgICBpZiAobV96b29tZWRJblRpbGVHcmlkKQorICAgICAgICBt
X3pvb21lZEluVGlsZUdyaWQtPnVwZGF0ZUhvc3RMYXllclNpemUoKTsKK30KKwordm9pZCBUaWxl
Q2FjaGU6OnNldEtlZXBzWm9vbWVkT3V0VGlsZXMoYm9vbCBrZWVwKQoreworICAgIG1fa2VlcHNa
b29tZWRPdXRUaWxlcyA9IGtlZXA7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRDdXJyZW50U2Nh
bGUoZmxvYXQgc2NhbGUpCit7CisgICAgQVNTRVJUKHNjYWxlID4gMCk7CisKKyAgICBpZiAoY3Vy
cmVudFNjYWxlKCkgPT0gc2NhbGUpIHsKKyAgICAgICAgbV9wZW5kaW5nU2NhbGUgPSAwOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIG1fcGVuZGluZ1NjYWxlID0gc2NhbGU7CisgICAgaWYg
KG1fdGlsaW5nTW9kZSA9PSBEaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIGNvbW1pdFNj
YWxlQ2hhbmdlKCk7CisKKyAgICBpZiAoIWtlZXBzWm9vbWVkT3V0VGlsZXMoKSAmJiAhaXNUaWxl
SW52YWxpZGF0aW9uU3VzcGVuZGVkKCkpIHsKKyAgICAgICAgLy8gVGlsZSBpbnZhbGlkYXRpb24g
aXMgbm9ybWFsbHkgc3VzcGVuZGVkIGR1cmluZyB6b29taW5nIGJ5IFVJS2l0IGJ1dCBzb21lIGFw
cGxpY2F0aW9ucworICAgICAgICAvLyB1c2luZyBjdXN0b20gc2Nyb2xsdmlld3MgbWF5IHpvb20g
d2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBjYWxsYmFja3MuIEludmFsaWRhdGUgdGhlIHRpbGVzIGV4
cGxpY2l0bHkuCisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAg
ICAgIGFjdGl2ZVRpbGVHcmlkKCktPmRyb3BBbGxUaWxlcygpOworICAgICAgICBhY3RpdmVUaWxl
R3JpZCgpLT5jcmVhdGVUaWxlcyhDb3ZlclZpc2libGVPbmx5KTsKKyAgICB9Cit9CisKK3ZvaWQg
VGlsZUNhY2hlOjpzZXRab29tZWRPdXRTY2FsZShmbG9hdCBzY2FsZSkKK3sKKyAgICBBU1NFUlQo
c2NhbGUgPiAwKTsKKworICAgIGlmICh6b29tZWRPdXRTY2FsZSgpID09IHNjYWxlKSB7CisgICAg
ICAgIG1fcGVuZGluZ1pvb21lZE91dFNjYWxlID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX3BlbmRpbmdab29tZWRPdXRTY2FsZSA9IHNjYWxlOworICAgIGlmIChtX3RpbGluZ01v
ZGUgPT0gRGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBjb21taXRTY2FsZUNoYW5nZSgp
OworfQorICAgIAordm9pZCBUaWxlQ2FjaGU6OmNvbW1pdFNjYWxlQ2hhbmdlKCkKK3sKKyAgICBB
U1NFUlQobV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUgfHwgbV9wZW5kaW5nU2NhbGUpOworICAgIEFT
U0VSVChtX3RpbGluZ01vZGUgIT0gRGlzYWJsZWQpOworICAgIAorICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3RpbGVNdXRleCk7CisKKyAgICBpZiAobV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUpIHsK
KyAgICAgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+c2V0U2NhbGUobV9wZW5kaW5nWm9vbWVkT3V0
U2NhbGUpOworICAgICAgICBtX3BlbmRpbmdab29tZWRPdXRTY2FsZSA9IDA7CisgICAgfQorICAg
IAorICAgIGlmICghbV9rZWVwc1pvb21lZE91dFRpbGVzKSB7CisgICAgICAgIEFTU0VSVChhY3Rp
dmVUaWxlR3JpZCgpID09IG1fem9vbWVkT3V0VGlsZUdyaWQpOworICAgICAgICBpZiAobV9wZW5k
aW5nU2NhbGUpIHsKKyAgICAgICAgICAgIG1fY3VycmVudFNjYWxlID0gbV9wZW5kaW5nU2NhbGU7
CisgICAgICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5zZXRTY2FsZShtX2N1cnJlbnRTY2Fs
ZSk7CisgICAgICAgIH0KKyAgICAgICAgbV9wZW5kaW5nU2NhbGUgPSAwOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKG1fcGVuZGluZ1NjYWxlKSB7CisgICAgICAgIG1fY3VycmVu
dFNjYWxlID0gbV9wZW5kaW5nU2NhbGU7CisgICAgICAgIG1fcGVuZGluZ1NjYWxlID0gMDsKKyAg
ICB9CisKKyAgICBpZiAobV9jdXJyZW50U2NhbGUgIT0gbV96b29tZWRPdXRUaWxlR3JpZC0+c2Nh
bGUoKSkgeworICAgICAgICBpZiAoIW1fem9vbWVkSW5UaWxlR3JpZCkgeworICAgICAgICAgICAg
bV96b29tZWRJblRpbGVHcmlkID0gVGlsZUdyaWQ6OmNyZWF0ZSh0aGlzLCBtX3RpbGVTaXplKTsK
KyAgICAgICAgICAgIFtob3N0TGF5ZXIoKSBhZGRTdWJsYXllcjptX3pvb21lZEluVGlsZUdyaWQt
PnRpbGVIb3N0TGF5ZXIoKV07CisgICAgICAgICAgICBob3N0TGF5ZXJTaXplQ2hhbmdlZCgpOwor
ICAgICAgICB9CisgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+c2V0U2NhbGUobV9jdXJyZW50
U2NhbGUpOworICAgIH0KKworICAgIC8vIEtlZXAgdGhlIGN1cnJlbnQgb3JkZXJpbmcgZHVyaW5n
IHpvb21pbmcuCisgICAgaWYgKG1fdGlsaW5nTW9kZSAhPSBab29taW5nKQorICAgICAgICBicmlu
Z0FjdGl2ZVRpbGVHcmlkVG9Gcm9udCgpOworCisgICAgYWRqdXN0VGlsZUdyaWRUcmFuc2Zvcm1z
KCk7CisgICAgbGF5b3V0VGlsZXMoKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmJyaW5nQWN0aXZl
VGlsZUdyaWRUb0Zyb250KCkKK3sKKyAgICBUaWxlR3JpZCogYWN0aXZlR3JpZCA9IGFjdGl2ZVRp
bGVHcmlkKCk7CisgICAgVGlsZUdyaWQqIG90aGVyR3JpZCA9IGluYWN0aXZlVGlsZUdyaWQoKTsK
KyAgICBpZiAoIW90aGVyR3JpZCkKKyAgICAgICAgcmV0dXJuOworICAgIENBTGF5ZXIqIGZyb250
TGF5ZXIgPSBhY3RpdmVHcmlkLT50aWxlSG9zdExheWVyKCk7CisgICAgQ0FMYXllciogb3RoZXJM
YXllciA9IG90aGVyR3JpZC0+dGlsZUhvc3RMYXllcigpOworICAgIFtob3N0TGF5ZXIoKSBpbnNl
cnRTdWJsYXllcjpmcm9udExheWVyIGFib3ZlOm90aGVyTGF5ZXJdOworfQorICAgIAordm9pZCBU
aWxlQ2FjaGU6OmFkanVzdFRpbGVHcmlkVHJhbnNmb3JtcygpCit7CisgICAgQ0FMYXllciogem9v
bWVkT3V0SG9zdExheWVyID0gbV96b29tZWRPdXRUaWxlR3JpZC0+dGlsZUhvc3RMYXllcigpOwor
ICAgIGZsb2F0IHRyYW5zZm9ybVNjYWxlID0gY3VycmVudFNjYWxlKCkgLyB6b29tZWRPdXRTY2Fs
ZSgpOworICAgIFt6b29tZWRPdXRIb3N0TGF5ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RN
YWtlU2NhbGUodHJhbnNmb3JtU2NhbGUsIHRyYW5zZm9ybVNjYWxlLCAxLjBmKV07CisgICAgbV96
b29tZWRPdXRUaWxlR3JpZC0+dXBkYXRlSG9zdExheWVyU2l6ZSgpOworfQorCit2b2lkIFRpbGVD
YWNoZTo6bGF5b3V0VGlsZXMoKQoreworICAgIGlmIChtX2hhc1BlbmRpbmdMYXlvdXRUaWxlcykK
KyAgICAgICAgcmV0dXJuOworICAgIG1faGFzUGVuZGluZ0xheW91dFRpbGVzID0gdHJ1ZTsKKwor
ICAgIFRpbGVDYWNoZVRvbWJzdG9uZSAqdG9tYnN0b25lID0gbV90b21ic3RvbmUuZ2V0KCk7Cisg
ICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlmIChbdG9tYnN0b25lIGlzRGVhZF0pCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIG1faGFzUGVuZGluZ0xheW91dFRpbGVzID0gZmFsc2U7
CisgICAgICAgIGRvTGF5b3V0VGlsZXMoKTsKKyAgICB9KTsKK30KKwordm9pZCBUaWxlQ2FjaGU6
OmxheW91dFRpbGVzTm93KCkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2Fi
bGVkKCkpOworCisgICAgLy8gbGF5b3V0VGlsZXNOb3coKSBpcyBjYWxsZWQgYWZ0ZXIgYSB6b29t
LCB3aGlsZSB0aGUgdGlsZSBtb2RlIGlzIHN0aWxsIHNldCB0byBab29taW5nLgorICAgIC8vIElm
IHdlIGNoZWNrZWQgZm9yIGlzVGlsZUNyZWF0aW9uU3VzcGVuZGVkIGhlcmUsIHRoYXQgd291bGQg
Y2F1c2UgPHJkYXI6Ly9wcm9ibGVtLzg0MzQxMTI+IChQYWdlIGZsYXNoZXMgYWZ0ZXIgem9vbWlu
ZyBpbi9vdXQpLgorICAgIGlmIChtX3RpbGluZ01vZGUgPT0gRGlzYWJsZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICAvLyBGSVhNRTogbGF5b3V0VGlsZXNOb3cgc2hvdWxkIGJlIGNhbGxl
ZCBhZnRlciBzdGF0ZSBoYXMgYmVlbiBzZXQgdG8gbm9uLXpvb21pbmcgYW5kIHRoZSBhY3RpdmUg
Z3JpZCBpcyB0aGUgZmluYWwgb25lLiAKKyAgICAvLyBGaXggdGhpcyBpbiBVSUtpdCBzaWRlIChw
ZXJoYXBzIGFsc28gZ2V0dGluZyByaWQgb2YgdGhpcyBjYWxsKSBhbmQgcmVtb3ZlIHRoaXMgY29k
ZSBhZnRlcndhcmRzLgorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS85NjcyOTkzPgorICAgIFRpbGlu
Z01vZGUgc2F2ZWRUaWxpbmdNb2RlID0gbV90aWxpbmdNb2RlOworICAgIGlmIChtX3RpbGluZ01v
ZGUgPT0gWm9vbWluZykKKyAgICAgICAgbV90aWxpbmdNb2RlID0gTWluaW1hbDsKKworICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAgVGlsZUdyaWQqIGFjdGl2ZUdyaWQg
PSBhY3RpdmVUaWxlR3JpZCgpOworICAgIGlmIChhY3RpdmVHcmlkLT5jaGVja0RvU2luZ2xlVGls
ZUxheW91dCgpKSB7CisgICAgICAgIG1fdGlsaW5nTW9kZSA9IHNhdmVkVGlsaW5nTW9kZTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjcmVhdGVUaWxlc0luQWN0aXZlR3JpZChDb3ZlclZp
c2libGVPbmx5KTsKKyAgICBtX3RpbGluZ01vZGUgPSBzYXZlZFRpbGluZ01vZGU7Cit9CisKK3Zv
aWQgVGlsZUNhY2hlOjpsYXlvdXRUaWxlc05vd0ZvclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisKKyAgICBhY3RpdmVUaWxlR3JpZCgpLT5hZGRU
aWxlc0NvdmVyaW5nUmVjdChyZWN0KTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OnJlbW92ZUFsbE5v
blZpc2libGVUaWxlcygpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsK
KyAgICByZW1vdmVBbGxOb25WaXNpYmxlVGlsZXNJbnRlcm5hbCgpOworfQorCit2b2lkIFRpbGVD
YWNoZTo6cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzSW50ZXJuYWwoKQoreworICAgIFRpbGVHcmlk
KiBhY3RpdmVHcmlkID0gYWN0aXZlVGlsZUdyaWQoKTsKKyAgICBpZiAoa2VlcHNab29tZWRPdXRU
aWxlcygpICYmIGFjdGl2ZUdyaWQgPT0gbV96b29tZWRJblRpbGVHcmlkICYmIGFjdGl2ZUdyaWQt
Pmhhc1RpbGVzKCkpCisgICAgICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPmRyb3BBbGxUaWxlcygp
OworCisgICAgSW50UmVjdCBhY3RpdmVUaWxlQm91bmRzID0gYWN0aXZlR3JpZC0+Ym91bmRzKCk7
CisgICAgaWYgKGFjdGl2ZVRpbGVCb3VuZHMud2lkdGgoKSA8PSBtX3RpbGVTaXplLndpZHRoKCkg
JiYgYWN0aXZlVGlsZUJvdW5kcy5oZWlnaHQoKSA8PSBtX3RpbGVTaXplLmhlaWdodCgpKSB7Cisg
ICAgICAgIC8vIElmIHRoZSB2aWV3IGlzIHNtYWxsZXIgdGhhbiBhIHRpbGUsIGtlZXAgdGhlIHRp
bGUgZXZlbiBpZiBpdCBpcyBub3QgdmlzaWJsZS4KKyAgICAgICAgYWN0aXZlR3JpZC0+ZHJvcFRp
bGVzT3V0c2lkZVJlY3QoYWN0aXZlVGlsZUJvdW5kcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBhY3RpdmVHcmlkLT5kcm9wVGlsZXNPdXRzaWRlUmVjdChhY3RpdmVHcmlkLT52aXNp
YmxlUmVjdCgpKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OnJlbW92ZUFsbFRpbGVzKCkKK3sKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAgIG1fem9vbWVkT3V0VGlsZUdy
aWQtPmRyb3BBbGxUaWxlcygpOworICAgIGlmIChtX3pvb21lZEluVGlsZUdyaWQpCisgICAgICAg
IG1fem9vbWVkSW5UaWxlR3JpZC0+ZHJvcEFsbFRpbGVzKCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hl
OjpyZW1vdmVGb3JlZ3JvdW5kVGlsZXMoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Rp
bGVNdXRleCk7CisgICAgaWYgKCFrZWVwc1pvb21lZE91dFRpbGVzKCkpCisgICAgICAgIG1fem9v
bWVkT3V0VGlsZUdyaWQtPmRyb3BBbGxUaWxlcygpOworICAgIGlmIChtX3pvb21lZEluVGlsZUdy
aWQpCisgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+ZHJvcEFsbFRpbGVzKCk7Cit9CisKK3Zv
aWQgVGlsZUNhY2hlOjpzZXRDb250ZW50UmVwbGFjZW1lbnRJbWFnZShSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gY29udGVudFJlcGxhY2VtZW50SW1hZ2UpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2VNdXRleCk7CisgICAgbV9jb250ZW50UmVwbGFjZW1l
bnRJbWFnZSA9IGNvbnRlbnRSZXBsYWNlbWVudEltYWdlOworfQorCitSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gVGlsZUNhY2hlOjpjb250ZW50UmVwbGFjZW1lbnRJbWFnZSgpIGNvbnN0Cit7CisgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2VNdXRleCk7CisgICAg
cmV0dXJuIG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2U7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpz
ZXRUaWxlQm9yZGVyc1Zpc2libGUoYm9vbCBmbGFnKQoreworICAgIGlmIChmbGFnID09IG1fdGls
ZUJvcmRlcnNWaXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RpbGVCb3JkZXJzVmlz
aWJsZSA9IGZsYWc7CisgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+dXBkYXRlVGlsZUJvcmRlclZp
c2liaWxpdHkoKTsKKyAgICBpZiAobV96b29tZWRJblRpbGVHcmlkKQorICAgICAgICBtX3pvb21l
ZEluVGlsZUdyaWQtPnVwZGF0ZVRpbGVCb3JkZXJWaXNpYmlsaXR5KCk7Cit9CisKK3ZvaWQgVGls
ZUNhY2hlOjpzZXRUaWxlUGFpbnRDb3VudGVyc1Zpc2libGUoYm9vbCBmbGFnKQoreworICAgIG1f
dGlsZVBhaW50Q291bnRlcnNWaXNpYmxlID0gZmxhZzsKKyAgICAvLyBUaGUgbnVtYmVycyB3aWxs
IHNob3cgdXAgdGhlIG5leHQgdGltZSB0aGUgdGlsZXMgcGFpbnQuCit9CisKK3ZvaWQgVGlsZUNh
Y2hlOjpmaW5pc2hlZENyZWF0aW5nVGlsZXMoYm9vbCBkaWRDcmVhdGVUaWxlcywgYm9vbCBjcmVh
dGVNb3JlKQoreworICAgIC8vIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYWxsIHRpbGVzIGFyZSBz
aG93aW5nIHRoZSBzYW1lIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQuCisgICAgaWYgKGRpZENyZWF0
ZVRpbGVzICYmICFtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgZmx1c2hT
YXZlZERpc3BsYXlSZWN0cygpOworCisgICAgaWYgKGtlZXBzWm9vbWVkT3V0VGlsZXMoKSkgewor
ICAgICAgICBpZiAobV96b29tZWRJblRpbGVHcmlkICYmIGFjdGl2ZVRpbGVHcmlkKCkgPT0gbV96
b29tZWRPdXRUaWxlR3JpZCAmJiBtX3RpbGluZ01vZGUgIT0gWm9vbWluZyAmJiBtX3pvb21lZElu
VGlsZUdyaWQtPmhhc1RpbGVzKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgQ0EgdHJhbnNhY3Rp
b24gd2lsbCBjb3ZlciB0aGUgc2NyZWVuIHdpdGggdG9wIGxldmVsIHRpbGVzLgorICAgICAgICAg
ICAgLy8gV2UgY2FuIHJlbW92ZSB6b29tZWQtaW4gdGlsZXMgd2l0aG91dCBmbGFzaGluZy4KKyAg
ICAgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+ZHJvcEFsbFRpbGVzKCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoYWN0aXZlVGlsZUdyaWQoKSA9PSBtX3pvb21lZEluVGlsZUdyaWQpIHsKKyAgICAg
ICAgICAgIC8vIFBhc3MgdGhlIG1pbmltdW0gcG9zc2libGUgZGlzdGFuY2UgdG8gY29uc2lkZXIg
YWxsIHRpbGVzLCBldmVuIHZpc2libGUgb25lcy4KKyAgICAgICAgICAgIG1fem9vbWVkT3V0VGls
ZUdyaWQtPmRyb3BEaXN0YW50VGlsZXMoMCwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpt
aW4oKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBLZWVwIGNyZWF0aW5nIHRpbGVzIHVu
dGlsIHRoZSB3aG9sZSBjb3ZlclJlY3QgaXMgY292ZXJlZC4KKyAgICBpZiAoY3JlYXRlTW9yZSkK
KyAgICAgICAgbV90aWxlQ3JlYXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQg
VGlsZUNhY2hlOjp0aWxlQ3JlYXRpb25UaW1lckZpcmVkKFRpbWVyPFRpbGVDYWNoZT4qKQorewor
ICAgIGlmIChpc1RpbGVDcmVhdGlvblN1c3BlbmRlZCgpKQorICAgICAgICByZXR1cm47CisgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKKyAgICBjcmVhdGVUaWxlc0luQWN0aXZl
R3JpZChDb3ZlclNwZWN1bGF0aXZlKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmNyZWF0ZVRpbGVz
SW5BY3RpdmVHcmlkKFN5bmNocm9ub3VzVGlsZUNyZWF0aW9uTW9kZSBtb2RlKQoreworICAgIGlm
IChtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5oYXNSZWNlaXZlZE1lbW9yeVByZXNzdXJlKCkpIHsK
KyAgICAgICAgTE9HKE1lbW9yeVByZXNzdXJlLCAiVW5kZXIgbWVtb3J5IHByZXNzdXJlIGF0OiAl
cyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgICAgICByZW1vdmVBbGxOb25WaXNpYmxlVGls
ZXNJbnRlcm5hbCgpOworICAgIH0KKyAgICBhY3RpdmVUaWxlR3JpZCgpLT5jcmVhdGVUaWxlcyht
b2RlKTsKK30KKwordW5zaWduZWQgVGlsZUNhY2hlOjp0aWxlQ2FwYWNpdHlGb3JHcmlkKFRpbGVH
cmlkKiBncmlkKQoreworICAgIHN0YXRpYyB1bnNpZ25lZCBjYXBhY2l0eTsKKyAgICBpZiAoIWNh
cGFjaXR5KSB7CisgICAgICAgIHNpemVfdCB0b3RhbE1lbW9yeSA9IHN5c3RlbVRvdGFsTWVtb3J5
KCk7CisgICAgICAgIHRvdGFsTWVtb3J5IC89IDEwMjQgKiAxMDI0OworICAgICAgICBpZiAodG90
YWxNZW1vcnkgPj0gMTAyNCkKKyAgICAgICAgICAgIGNhcGFjaXR5ID0gMTI4ICogMTAyNCAqIDEw
MjQ7CisgICAgICAgIGVsc2UgaWYgKHRvdGFsTWVtb3J5ID49IDUxMikKKyAgICAgICAgICAgIGNh
cGFjaXR5ID0gNjQgKiAxMDI0ICogMTAyNDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2Fw
YWNpdHkgPSAzMiAqIDEwMjQgKiAxMDI0OworICAgIH0KKworICAgIGludCBncmlkQ2FwYWNpdHk7
CisKKyAgICBpbnQgbWVtb3J5TGV2ZWwgPSBzeXN0ZW1NZW1vcnlMZXZlbCgpOworICAgIGlmICht
ZW1vcnlMZXZlbCA8IDE1KQorICAgICAgICBncmlkQ2FwYWNpdHkgPSBjYXBhY2l0eSAvIDQ7Cisg
ICAgZWxzZSBpZiAobWVtb3J5TGV2ZWwgPCAyMCkKKyAgICAgICAgZ3JpZENhcGFjaXR5ID0gY2Fw
YWNpdHkgLyAyOworICAgIGVsc2UgaWYgKG1lbW9yeUxldmVsIDwgMzApIAorICAgICAgICBncmlk
Q2FwYWNpdHkgPSBjYXBhY2l0eSAqIDMgLyA0OworICAgIGVsc2UKKyAgICAgICAgZ3JpZENhcGFj
aXR5ID0gY2FwYWNpdHk7CisKKyAgICBpZiAoa2VlcHNab29tZWRPdXRUaWxlcygpICYmIGdyaWQg
PT0gbV96b29tZWRPdXRUaWxlR3JpZCkgeworICAgICAgICBpZiAoYWN0aXZlVGlsZUdyaWQoKSA9
PSBtX3pvb21lZE91dFRpbGVHcmlkKQorICAgICAgICAgICAgcmV0dXJuIGdyaWRDYXBhY2l0eTsK
KyAgICAgICAgcmV0dXJuIGdyaWRDYXBhY2l0eSAvIDQ7CisgICAgfQorICAgIHJldHVybiBncmlk
Q2FwYWNpdHkgKiAzIC8gNDsKK30KKworQ29sb3IgVGlsZUNhY2hlOjpjb2xvckZvckdyaWRUaWxl
Qm9yZGVyKFRpbGVHcmlkKiBncmlkKSBjb25zdAoreworICAgIGlmIChncmlkID09IG1fem9vbWVk
T3V0VGlsZUdyaWQpCisgICAgICAgIHJldHVybiBDb2xvciguM2YsIC4wZiwgMC40ZiwgMC41Zik7
CisKKyAgICByZXR1cm4gQ29sb3IoLjBmLCAuMGYsIDAuNGYsIDAuNWYpOworfQorCitzdGF0aWMg
Ym9vbCBzaG91bGRSZXBhaW50SW5QaWVjZXMoY29uc3QgQ0dSZWN0JiBkaXJ0eVJlY3QsIENHU1Jl
Z2lvbk9iaiBkaXJ0eVJlZ2lvbiwgQ0dGbG9hdCBjb250ZW50c1NjYWxlKQoreworICAgIC8vIEVz
dGltYXRlIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCB1c2UgdGhlIHVuaW9uZWQgcmVjdCBvciB0
aGUgaW5kaXZpZHVhbCByZWN0cy4KKyAgICAvLyBXZSBkbyB0aGlzIGJ5IGNvbXB1dGluZyB0aGUg
cGVyY2VudGFnZSBvZiAid2FzdGVkIHNwYWNlIiBpbiB0aGUgdW5pb24uIElmIHRoYXQgd2FzdGVk
IHNwYWNlCisgICAgLy8gaXMgdG9vIGxhcmdlLCB0aGVuIHdlIHdpbGwgZG8gaW5kaXZpZHVhbCBy
ZWN0IHBhaW50aW5nIGluc3RlYWQuCisgICAgZmxvYXQgc2luZ2xlUGl4ZWxzID0gMDsKKyAgICB1
bnNpZ25lZCByZWN0Q291bnQgPSAwOworCisgICAgQ0dTUmVnaW9uRW51bWVyYXRvck9iaiBlbnVt
ZXJhdG9yID0gQ0dTUmVnaW9uRW51bWVyYXRvcihkaXJ0eVJlZ2lvbik7CisgICAgQ0dSZWN0ICpz
dWJSZWN0OworICAgIHdoaWxlICgoc3ViUmVjdCA9IENHU05leHRSZWN0KGVudW1lcmF0b3IpKSkg
eworICAgICAgICArK3JlY3RDb3VudDsKKyAgICAgICAgc2luZ2xlUGl4ZWxzICs9IHN1YlJlY3Qt
PnNpemUud2lkdGggKiBzdWJSZWN0LT5zaXplLmhlaWdodDsKKyAgICB9CisgICAgc2luZ2xlUGl4
ZWxzIC89IChjb250ZW50c1NjYWxlICogY29udGVudHNTY2FsZSk7CisgICAgQ0dTUmVsZWFzZVJl
Z2lvbkVudW1lcmF0b3IoZW51bWVyYXRvcik7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjUmVjdFRo
cmVzaG9sZCA9IDEwOworICAgIGlmIChyZWN0Q291bnQgPCAyIHx8IHJlY3RDb3VudCA+IGNSZWN0
VGhyZXNob2xkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBmbG9hdCBjV2Fz
dGVkU3BhY2VUaHJlc2hvbGQgPSAwLjUwZjsKKyAgICBmbG9hdCB1bmlvblBpeGVscyA9IGRpcnR5
UmVjdC5zaXplLndpZHRoICogZGlydHlSZWN0LnNpemUuaGVpZ2h0OworICAgIGZsb2F0IHdhc3Rl
ZFNwYWNlID0gMS5mIC0gKHNpbmdsZVBpeGVscyAvIHVuaW9uUGl4ZWxzKTsKKyAgICByZXR1cm4g
d2FzdGVkU3BhY2UgPiBjV2FzdGVkU3BhY2VUaHJlc2hvbGQ7Cit9CisKK3ZvaWQgVGlsZUNhY2hl
OjpkcmF3UmVwbGFjZW1lbnRJbWFnZShUaWxlTGF5ZXIqIGxheWVyLCBDR0NvbnRleHRSZWYgY29u
dGV4dCwgQ0dJbWFnZVJlZiBpbWFnZSkKK3sKKyAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3Io
Y29udGV4dCwgMSwgMSwgMSwgMSk7CisgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgQ0dD
b250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpKTsKKworICAgIENHRmxvYXQgY29udGVu
dHNTY2FsZSA9IFtsYXllciBjb250ZW50c1NjYWxlXTsKKyAgICBDR0NvbnRleHRTY2FsZUNUTShj
b250ZXh0LCAxIC8gY29udGVudHNTY2FsZSwgLTEgLyBjb250ZW50c1NjYWxlKTsKKyAgICBDR1Jl
Y3QgaW1hZ2VSZWN0ID0gQ0dSZWN0TWFrZSgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBD
R0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRl
eHQsIDAsIC1pbWFnZVJlY3Quc2l6ZS5oZWlnaHQpOworICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LCBpbWFnZVJlY3QsIGltYWdlKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmRyYXdXaW5k
b3dDb250ZW50KFRpbGVMYXllciogbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1JlY3Qg
ZGlydHlSZWN0KQoreworICAgIENHUmVjdCBmcmFtZSA9IFtsYXllciBmcmFtZV07CisgICAgV0tG
b250QW50aWFsaWFzaW5nU3RhdGVTYXZlciBmb250QW50aWFsaWFzaW5nU3RhdGUoY29udGV4dCwg
W21fd2luZG93IHVzZU9yaWVudGF0aW9uRGVwZW5kZW50Rm9udEFudGlhbGlhc2luZ10gJiYgW2xh
eWVyIGlzT3BhcXVlXSk7CisgICAgZm9udEFudGlhbGlhc2luZ1N0YXRlLnNldHVwKFtXQUtXaW5k
b3cgaGFzTGFuZHNjYXBlT3JpZW50YXRpb25dKTsKKworICAgIENHU1JlZ2lvbk9iaiBkcmF3UmVn
aW9uID0gKENHU1JlZ2lvbk9iailbbGF5ZXIgcmVnaW9uQmVpbmdEcmF3bl07CisgICAgQ0dGbG9h
dCBjb250ZW50c1NjYWxlID0gW2xheWVyIGNvbnRlbnRzU2NhbGVdOworICAgIGlmIChkcmF3UmVn
aW9uICYmIHNob3VsZFJlcGFpbnRJblBpZWNlcyhkaXJ0eVJlY3QsIGRyYXdSZWdpb24sIGNvbnRl
bnRzU2NhbGUpKSB7CisgICAgICAgIC8vIFVzZSBmaW5lIGdyYWluZWQgcmVwYWludCByZWN0YW5n
bGVzIHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgcGFpbnRlZCBwaXhlbHMuCisgICAgICAgIENH
U1JlZ2lvbkVudW1lcmF0b3JPYmogZW51bWVyYXRvciA9IENHU1JlZ2lvbkVudW1lcmF0b3IoZHJh
d1JlZ2lvbik7CisgICAgICAgIENHUmVjdCAqc3ViUmVjdDsKKyAgICAgICAgd2hpbGUgKChzdWJS
ZWN0ID0gQ0dTTmV4dFJlY3QoZW51bWVyYXRvcikpKSB7CisgICAgICAgICAgICBDR1JlY3QgYWRq
dXN0ZWRTdWJSZWN0ID0gKnN1YlJlY3Q7CisgICAgICAgICAgICBhZGp1c3RlZFN1YlJlY3Qub3Jp
Z2luLnggLz0gY29udGVudHNTY2FsZTsKKyAgICAgICAgICAgIGFkanVzdGVkU3ViUmVjdC5vcmln
aW4ueSA9IGZyYW1lLnNpemUuaGVpZ2h0IC0gKGFkanVzdGVkU3ViUmVjdC5vcmlnaW4ueSArIGFk
anVzdGVkU3ViUmVjdC5zaXplLmhlaWdodCkgLyBjb250ZW50c1NjYWxlOworICAgICAgICAgICAg
YWRqdXN0ZWRTdWJSZWN0LnNpemUud2lkdGggLz0gY29udGVudHNTY2FsZTsKKyAgICAgICAgICAg
IGFkanVzdGVkU3ViUmVjdC5zaXplLmhlaWdodCAvPSBjb250ZW50c1NjYWxlOworCisgICAgICAg
ICAgICBDR1JlY3Qgc3ViUmVjdEluU3VwZXIgPSBbaG9zdExheWVyKCkgY29udmVydFJlY3Q6YWRq
dXN0ZWRTdWJSZWN0IGZyb21MYXllcjpsYXllcl07CisgICAgICAgICAgICBbbV93aW5kb3cgZGlz
cGxheVJlY3Q6c3ViUmVjdEluU3VwZXJdOworICAgICAgICB9CisgICAgICAgIENHU1JlbGVhc2VS
ZWdpb25FbnVtZXJhdG9yKGVudW1lcmF0b3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFNp
bXBsZSByZXBhaW50CisgICAgICAgIENHUmVjdCBkaXJ0eVJlY3RJblN1cGVyID0gW2hvc3RMYXll
cigpIGNvbnZlcnRSZWN0OmRpcnR5UmVjdCBmcm9tTGF5ZXI6bGF5ZXJdOworICAgICAgICBbbV93
aW5kb3cgZGlzcGxheVJlY3Q6ZGlydHlSZWN0SW5TdXBlcl07CisgICAgfQorCisgICAgZm9udEFu
dGlhbGlhc2luZ1N0YXRlLnJlc3RvcmUoKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmRyYXdMYXll
cihUaWxlTGF5ZXIqIGxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICAvLyBUaGUg
d2ViIGxvY2sgdW5sb2NrIG9ic2VydmVyIHJ1bnMgYWZ0ZXIgQ0EgY29tbWl0IG9ic2VydmVyLgor
ICAgIGlmICghV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJEcmF3aW5nIHdpdGhvdXQgaG9sZGluZyB0aGUgd2ViIHRocmVhZCBsb2NrIik7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIFdLU2V0Q3VycmVudEdyYXBo
aWNzQ29udGV4dChjb250ZXh0KTsKKworICAgIENHUmVjdCBkaXJ0eVJlY3QgPSBDR0NvbnRleHRH
ZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCk7CisgICAgQ0dSZWN0IGZyYW1lID0gW2xheWVyIGZy
YW1lXTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgLWZyYW1lLm9yaWdpbi54
LCAtZnJhbWUub3JpZ2luLnkpOworICAgIENHUmVjdCBzY2FsZWRGcmFtZSA9IFtob3N0TGF5ZXIo
KSBjb252ZXJ0UmVjdDpbbGF5ZXIgYm91bmRzXSBmcm9tTGF5ZXI6bGF5ZXJdOworICAgIENHQ29u
dGV4dFNjYWxlQ1RNKGNvbnRleHQsIGZyYW1lLnNpemUud2lkdGggLyBzY2FsZWRGcmFtZS5zaXpl
LndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCAvIHNjYWxlZEZyYW1lLnNpemUuaGVpZ2h0KTsKKwor
ICAgIGlmIChSZXRhaW5QdHI8Q0dJbWFnZT4gY29udGVudFJlcGxhY2VtZW50SW1hZ2UgPSB0aGlz
LT5jb250ZW50UmVwbGFjZW1lbnRJbWFnZSgpKQorICAgICAgICBkcmF3UmVwbGFjZW1lbnRJbWFn
ZShsYXllciwgY29udGV4dCwgY29udGVudFJlcGxhY2VtZW50SW1hZ2UuZ2V0KCkpOworICAgIGVs
c2UKKyAgICAgICAgZHJhd1dpbmRvd0NvbnRlbnQobGF5ZXIsIGNvbnRleHQsIGRpcnR5UmVjdCk7
CisKKyAgICArK2xheWVyLnBhaW50Q291bnQ7CisgICAgaWYgKG1fdGlsZVBhaW50Q291bnRlcnNW
aXNpYmxlKSB7CisgICAgICAgIGNoYXIgdGV4dFsxNl07CisgICAgICAgIHNucHJpbnRmKHRleHQs
IHNpemVvZih0ZXh0KSwgIiVkIiwgbGF5ZXIucGFpbnRDb3VudCk7CisKKyAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKworICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0o
Y29udGV4dCwgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55KTsKKyAgICAgICAgQ0dDb250
ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNhY2hlZENHQ29sb3IoY29sb3JGb3JH
cmlkVGlsZUJvcmRlcihbbGF5ZXIgdGlsZUdyaWRdKSwgQ29sb3JTcGFjZURldmljZVJHQikpOwor
ICAgICAgICAKKyAgICAgICAgQ0dSZWN0IGxhYmVsQm91bmRzID0gW2xheWVyIGJvdW5kc107Cisg
ICAgICAgIGxhYmVsQm91bmRzLnNpemUud2lkdGggPSAxMCArIDEyICogc3RybGVuKHRleHQpOwor
ICAgICAgICBsYWJlbEJvdW5kcy5zaXplLmhlaWdodCA9IDI1OworICAgICAgICBDR0NvbnRleHRG
aWxsUmVjdChjb250ZXh0LCBsYWJlbEJvdW5kcyk7CisKKyAgICAgICAgaWYgKGFjY2VsZXJhdGVk
RHJhd2luZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihj
b250ZXh0LCAxLCAwLCAwLCAwLjRmKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQ0dDb250
ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEsIDEsIDEsIDAuNmYpOworI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Rl
cHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgICAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNv
bnRleHQsIENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKDEsIC0xKSk7CisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVw
cmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgICAgIENHQ29udGV4dFNlbGVjdEZvbnQoY29udGV4
dCwgIkhlbHZldGljYSIsIDI1LCBrQ0dFbmNvZGluZ01hY1JvbWFuKTsKKyAgICAgICAgQ0dDb250
ZXh0U2hvd1RleHRBdFBvaW50KGNvbnRleHQsIGxhYmVsQm91bmRzLm9yaWdpbi54ICsgMywgbGFi
ZWxCb3VuZHMub3JpZ2luLnkgKyAyMCwgdGV4dCwgc3RybGVuKHRleHQpKTsKKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwb3AKKyAgICAKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShj
b250ZXh0KTsgICAgICAgIAorICAgIH0KKworICAgIFdBS1ZpZXcqIHZpZXcgPSBbbV93aW5kb3cg
Y29udGVudFZpZXddOworICAgIFt2aWV3IHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX2Rpc3Bh
dGNoVGlsZURpZERyYXc6KSB3aXRoT2JqZWN0OmxheWVyIGFmdGVyRGVsYXk6MC4wXTsKK30KKwor
dm9pZCBUaWxlQ2FjaGU6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgc2V0TmVlZHNEaXNwbGF5
SW5SZWN0KEludFJlY3QoMCwgMCwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2No
ZWR1bGVMYXllckZsdXNoRm9yUGVuZGluZ1JlcGFpbnQoKQoreworICAgIFdBS1ZpZXcqIHZpZXcg
PSBbbV93aW5kb3cgY29udGVudFZpZXddOworICAgIFt2aWV3IF9zY2hlZHVsZUxheWVyRmx1c2hG
b3JQZW5kaW5nVGlsZUNhY2hlUmVwYWludF07Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX3NhdmVkRGlzcGxheVJlY3RNdXRleCk7CisgICAgYm9vbCBhZGRlZEZpcnN0
UmVjdCA9IG1fc2F2ZWREaXNwbGF5UmVjdHMuaXNFbXB0eSgpOworICAgIG1fc2F2ZWREaXNwbGF5
UmVjdHMuYXBwZW5kKGRpcnR5UmVjdCk7CisgICAgaWYgKCFhZGRlZEZpcnN0UmVjdCkKKyAgICAg
ICAgcmV0dXJuOworICAgIC8vIENvbXBvc2l0aW5nIGxheWVyIGZsdXNoIHdpbGwgY2FsbCBiYWNr
IHRvIGRvUGVuZGluZ1JlcGFpbnRzKCkuIFRoZSBmbHVzaCBtYXkgYmUgdGhyb3R0bGVkIGFuZCBu
b3QgaGFwcGVuIGltbWVkaWF0ZWx5LgorICAgIHNjaGVkdWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdS
ZXBhaW50KCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjppbnZhbGlkYXRlVGlsZXMoY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KQoreworICAgIEFTU0VSVCghbV90aWxlTXV0ZXgudHJ5TG9jaygpKTsK
KworICAgIFRpbGVHcmlkKiBhY3RpdmVHcmlkID0gYWN0aXZlVGlsZUdyaWQoKTsKKyAgICBpZiAo
IWtlZXBzWm9vbWVkT3V0VGlsZXMoKSkgeworICAgICAgICBhY3RpdmVHcmlkLT5pbnZhbGlkYXRl
VGlsZXMoZGlydHlSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGbG9hdFJlY3Qg
c2NhbGVkUmVjdCA9IGRpcnR5UmVjdDsKKyAgICBzY2FsZWRSZWN0LnNjYWxlKHpvb21lZE91dFNj
YWxlKCkgLyBjdXJyZW50U2NhbGUoKSk7CisgICAgSW50UmVjdCB6b29tZWRPdXREaXJ0eVJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KHNjYWxlZFJlY3QpOworICAgIGlmIChhY3RpdmVHcmlkID09IG1f
em9vbWVkT3V0VGlsZUdyaWQpIHsKKyAgICAgICAgYm9vbCBkdW1teTsKKyAgICAgICAgSW50UmVj
dCBjb3ZlclJlY3QgPSBtX3pvb21lZE91dFRpbGVHcmlkLT5jYWxjdWxhdGVDb3ZlclJlY3QobV96
b29tZWRPdXRUaWxlR3JpZC0+dmlzaWJsZVJlY3QoKSwgZHVtbXkpOworICAgICAgICAvLyBJbnN0
ZWFkIG9mIHJlcGFpbnRpbmcgYSB0aWxlIG91dHNpZGUgdGhlIGNvdmVyIHJlY3QsIGp1c3QgcmVt
b3ZlIGl0LgorICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9wVGlsZXNCZXR3ZWVuUmVj
dHMoem9vbWVkT3V0RGlydHlSZWN0LCBjb3ZlclJlY3QpOworICAgICAgICBtX3pvb21lZE91dFRp
bGVHcmlkLT5pbnZhbGlkYXRlVGlsZXMoem9vbWVkT3V0RGlydHlSZWN0KTsKKyAgICAgICAgLy8g
V2UgbmVlZCB0byBpbnZhbGlkYXRlIHpvb21lZCBpbiB0aWxlcyBhcyB3ZWxsIHdoaWxlIHpvb21p
bmcsIHNpbmNlCisgICAgICAgIC8vIHdlIGNvdWxkIHN3aXRjaCBiYWNrIHRvIHRoZSB6b29tZWQg
aW4gZ3JpZCB3aXRob3V0IGRyb3BwaW5nIGl0cworICAgICAgICAvLyB0aWxlcy4gIFNlZSA8cmRh
cjovL3Byb2JsZW0vOTk0Njc1OT4uCisgICAgICAgIGlmIChtX3RpbGluZ01vZGUgPT0gWm9vbWlu
ZyAmJiBtX3pvb21lZEluVGlsZUdyaWQpCisgICAgICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQt
PmludmFsaWRhdGVUaWxlcyhkaXJ0eVJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmICghbV96b29tZWRJblRpbGVHcmlkLT5oYXNUaWxlcygpKSB7CisgICAgICAgIC8vIElmIG5v
IHRpbGVzIGhhdmUgYmVlbiBjcmVhdGVkIHlldCBmb3IgdGhlIHpvb21lZCBpbiBncmlkLCB3ZSBj
YW4ndCBkcm9wIHRoZSB6b29tZWQgb3V0IHRpbGVzLgorICAgICAgICBtX3pvb21lZE91dFRpbGVH
cmlkLT5pbnZhbGlkYXRlVGlsZXMoem9vbWVkT3V0RGlydHlSZWN0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9wVGlsZXNJbnRlcnNlY3RpbmdS
ZWN0KHpvb21lZE91dERpcnR5UmVjdCk7CisgICAgbV96b29tZWRJblRpbGVHcmlkLT5pbnZhbGlk
YXRlVGlsZXMoZGlydHlSZWN0KTsKK30KKyAgICAKK2Jvb2wgVGlsZUNhY2hlOjppc1RpbGVDcmVh
dGlvblN1c3BlbmRlZCgpIGNvbnN0IAoreworICAgIHJldHVybiAoIWtlZXBzWm9vbWVkT3V0VGls
ZXMoKSAmJiBtX3RpbGluZ01vZGUgPT0gWm9vbWluZykgfHwgbV90aWxpbmdNb2RlID09IERpc2Fi
bGVkOworfQorCitib29sIFRpbGVDYWNoZTo6aXNUaWxlSW52YWxpZGF0aW9uU3VzcGVuZGVkKCkg
Y29uc3QgCit7IAorICAgIHJldHVybiBtX3RpbGluZ01vZGUgPT0gWm9vbWluZyB8fCBtX3RpbGlu
Z01vZGUgPT0gUGFubmluZyB8fCBtX3RpbGluZ01vZGUgPT0gU2Nyb2xsVG9Ub3AgfHwgbV90aWxp
bmdNb2RlID09IERpc2FibGVkOyAKK30KKwordm9pZCBUaWxlQ2FjaGU6OnVwZGF0ZVRpbGluZ01v
ZGUoKQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSB8fCAhV2ViVGhyZWFkSXNF
bmFibGVkKCkpOworCisgICAgV0FLVmlldyogdmlldyA9IFttX3dpbmRvdyBjb250ZW50Vmlld107
CisKKyAgICBpZiAobV90aWxpbmdNb2RlID09IFpvb21pbmcgfHwgbV90aWxpbmdNb2RlID09IFBh
bm5pbmcgfHwgbV90aWxpbmdNb2RlID09IFNjcm9sbFRvVG9wKSB7CisgICAgICAgIGlmICghbV9k
aWRDYWxsV2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nKSB7CisgICAgICAgICAgICBbdmlldyBf
d2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nXTsKKyAgICAgICAgICAgIG1fZGlkQ2FsbFdpbGxT
dGFydFNjcm9sbGluZ09yWm9vbWluZyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAobV9kaWRDYWxsV2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nKSB7CisgICAg
ICAgICAgICBbdmlldyBfZGlkRmluaXNoU2Nyb2xsaW5nT3Jab29taW5nXTsKKyAgICAgICAgICAg
IG1fZGlkQ2FsbFdpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZyA9IGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmIChtX3RpbGluZ01vZGUgPT0gRGlzYWJsZWQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKKyAgICAgICAg
Y3JlYXRlVGlsZXNJbkFjdGl2ZUdyaWQoQ292ZXJWaXNpYmxlT25seSk7CisKKyAgICAgICAgaWYg
KCFtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50KCk7CisgICAgfQorfQorCit2b2lkIFRpbGVDYWNoZTo6
c2V0VGlsaW5nTW9kZShUaWxpbmdNb2RlIHRpbGluZ01vZGUpCit7CisgICAgaWYgKHRpbGluZ01v
ZGUgPT0gbV90aWxpbmdNb2RlKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCB3YXNab29taW5n
ID0gKG1fdGlsaW5nTW9kZSA9PSBab29taW5nKTsKKyAgICBtX3RpbGluZ01vZGUgPSB0aWxpbmdN
b2RlOworCisgICAgaWYgKChtX3BlbmRpbmdab29tZWRPdXRTY2FsZSB8fCBtX3BlbmRpbmdTY2Fs
ZSkgJiYgbV90aWxpbmdNb2RlICE9IERpc2FibGVkKQorICAgICAgICBjb21taXRTY2FsZUNoYW5n
ZSgpOworICAgIGVsc2UgaWYgKHdhc1pvb21pbmcpIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fdGlsZU11dGV4KTsKKyAgICAgICAgYnJpbmdBY3RpdmVUaWxlR3JpZFRvRnJvbnQoKTsK
KyAgICB9CisKKyAgICBpZiAobV9oYXNQZW5kaW5nVXBkYXRlVGlsaW5nTW9kZSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01vZGUgPSB0cnVlOworCisgICAg
VGlsZUNhY2hlVG9tYnN0b25lICp0b21ic3RvbmUgPSBtX3RvbWJzdG9uZS5nZXQoKTsKKyAgICBX
ZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKFt0b21ic3RvbmUgaXNEZWFkXSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV9oYXNQZW5kaW5nVXBkYXRlVGlsaW5nTW9kZSA9IGZhbHNl
OworICAgICAgICB1cGRhdGVUaWxpbmdNb2RlKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgVGlsZUNh
Y2hlOjpzZXRUaWxpbmdEaXJlY3Rpb24oVGlsaW5nRGlyZWN0aW9uIHRpbGluZ0RpcmVjdGlvbikK
K3sKKyAgICBtX3RpbGluZ0RpcmVjdGlvbiA9IHRpbGluZ0RpcmVjdGlvbjsKK30KKworVGlsZUNh
Y2hlOjpUaWxpbmdEaXJlY3Rpb24gVGlsZUNhY2hlOjp0aWxpbmdEaXJlY3Rpb24oKSBjb25zdAor
eworICAgIHJldHVybiBtX3RpbGluZ0RpcmVjdGlvbjsKK30KKyAgICAKK2Zsb2F0IFRpbGVDYWNo
ZTo6em9vbWVkT3V0U2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3pvb21lZE91dFRpbGVH
cmlkLT5zY2FsZSgpOworfQorCitmbG9hdCBUaWxlQ2FjaGU6OmN1cnJlbnRTY2FsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fY3VycmVudFNjYWxlOworfQorCit2b2lkIFRpbGVDYWNoZTo6ZG9Q
ZW5kaW5nUmVwYWludHMoKQoreworICAgIGlmIChtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc1RpbGVJbnZhbGlkYXRpb25TdXNwZW5kZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7
CisgICAgZmx1c2hTYXZlZERpc3BsYXlSZWN0cygpOworfQorCit2b2lkIFRpbGVDYWNoZTo6Zmx1
c2hTYXZlZERpc3BsYXlSZWN0cygpCit7CisgICAgQVNTRVJUKCFtX3RpbGVNdXRleC50cnlMb2Nr
KCkpOworICAgIEFTU0VSVCghbV9zYXZlZERpc3BsYXlSZWN0cy5pc0VtcHR5KCkpOworCisgICAg
VmVjdG9yPEludFJlY3Q+IHJlY3RzOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fc2F2ZWREaXNwbGF5UmVjdE11dGV4KTsKKyAgICAgICAgbV9zYXZlZERpc3BsYXlSZWN0cy5z
d2FwKHJlY3RzKTsKKyAgICB9CisgICAgc2l6ZV90IHNpemUgPSByZWN0cy5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgbiA9IDA7IG4gPCBzaXplOyArK24pCisgICAgICAgIGludmFsaWRhdGVUaWxl
cyhyZWN0c1tuXSk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRTcGVjdWxhdGl2ZVRpbGVDcmVh
dGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtX2lzU3BlY3VsYXRpdmVUaWxl
Q3JlYXRpb25FbmFibGVkID09IGVuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzU3Bl
Y3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkID0gZW5hYmxlZDsKKyAgICBpZiAobV9pc1NwZWN1
bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCkKKyAgICAgICAgbV90aWxlQ3JlYXRpb25UaW1lci5z
dGFydE9uZVNob3QoMCk7Cit9CisKK2Jvb2wgVGlsZUNhY2hlOjpoYXNQZW5kaW5nRHJhdygpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKTsKK30KKwor
dm9pZCBUaWxlQ2FjaGU6OnByZXBhcmVUb0RyYXcoKQoreworICAgIC8vIFRoaXMgd2lsbCB0cmln
Z2VyIGRvY3VtZW50IHJlbGF5b3V0IGlmIG5lZWRlZC4KKyAgICBbW21fd2luZG93IGNvbnRlbnRW
aWV3XSB2aWV3V2lsbERyYXddOworCisgICAgaWYgKCFtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1w
dHkoKSkgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAgICAg
ICBmbHVzaFNhdmVkRGlzcGxheVJlY3RzKCk7CisgICAgfQorfQorCit2b2lkIFRpbGVDYWNoZTo6
c2V0TGF5ZXJQb29sQ2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHkpCit7CisgICAgVGlsZUxheWVy
UG9vbDo6c2hhcmVkUG9vbCgpLT5zZXRDYXBhY2l0eShjYXBhY2l0eSk7Cit9CisKK3ZvaWQgVGls
ZUNhY2hlOjpkcmFpbkxheWVyUG9vbCgpCit7CisgICAgVGlsZUxheWVyUG9vbDo6c2hhcmVkUG9v
bCgpLT5kcmFpbigpOworfQorCit2b2lkIFRpbGVDYWNoZTo6ZHVtcFRpbGVzKCkKK3sKKyAgICBO
U0xvZyhAIj09PT09PT09PT09PT09PT09Iik7CisgICAgTlNMb2coQCJaT09NRUQgT1VUIik7Cisg
ICAgaWYgKG1fem9vbWVkT3V0VGlsZUdyaWQgPT0gYWN0aXZlVGlsZUdyaWQoKSkKKyAgICAgICAg
TlNMb2coQCI8QUNUSVZFPiIpOworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPmR1bXBUaWxlcygp
OworICAgIE5TTG9nKEAiPT09PT09PT09PT09PT09PT0iKTsKKyAgICBpZiAobV96b29tZWRJblRp
bGVHcmlkKSB7CisgICAgICAgIE5TTG9nKEAiWk9PTUVEIElOIik7CisgICAgICAgIGlmIChtX3pv
b21lZEluVGlsZUdyaWQgPT0gYWN0aXZlVGlsZUdyaWQoKSkKKyAgICAgICAgICAgIE5TTG9nKEAi
PEFDVElWRT4iKTsKKyAgICAgICAgbV96b29tZWRJblRpbGVHcmlkLT5kdW1wVGlsZXMoKTsKKyAg
ICAgICAgTlNMb2coQCI9PT09PT09PT09PT09PT09PSIpOworICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVGlsZUdyaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTk5MGZjY2RkNjk3MGZkOThhZjg1ZWVm
NDNjMDNjNWJhMzdiZWUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1RpbGVHcmlkLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFRpbGVHcmlkX2gKKyNkZWZpbmUgVGlsZUdyaWRfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisj
aW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRQb2ludEhhc2guaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRpbGVDYWNoZS5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
KyNkZWZpbmUgTE9HX1RJTElORyAwCisKK0BjbGFzcyBDQUxheWVyOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFRpbGVHcmlkVGlsZTsKKworY2xhc3MgVGlsZUdyaWQgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFRpbGVHcmlkKTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludFBv
aW50IFRpbGVJbmRleDsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPFRpbGVHcmlkPiBjcmVhdGUo
VGlsZUNhY2hlKiBjYWNoZSwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpIHsgcmV0dXJuIGFkb3B0
UHRyKG5ldyBUaWxlR3JpZChjYWNoZSwgdGlsZVNpemUpKTsgfQorCisgICAgflRpbGVHcmlkKCk7
CisKKyAgICBUaWxlQ2FjaGUqIHRpbGVDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZUNhY2hl
OyB9CisKKyAgICBDQUxheWVyICp0aWxlSG9zdExheWVyKCkgY29uc3Q7CisgICAgSW50UmVjdCBi
b3VuZHMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCB0aWxlQ291bnQoKSBjb25zdDsKKworICAgIGZs
b2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQorICAgIHZvaWQgc2V0U2NhbGUo
ZmxvYXQgc2NhbGUpIHsgbV9zY2FsZSA9IHNjYWxlOyB9CisKKyAgICBJbnRSZWN0IHZpc2libGVS
ZWN0KCkgY29uc3Q7CisKKyAgICB2b2lkIGNyZWF0ZVRpbGVzKFRpbGVDYWNoZTo6U3luY2hyb25v
dXNUaWxlQ3JlYXRpb25Nb2RlKTsKKworICAgIHZvaWQgZHJvcEFsbFRpbGVzKCk7CisgICAgdm9p
ZCBkcm9wSW52YWxpZFRpbGVzKCk7CisgICAgdm9pZCBkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25z
dCBJbnRSZWN0Jik7CisgICAgdm9pZCBkcm9wVGlsZXNJbnRlcnNlY3RpbmdSZWN0KGNvbnN0IElu
dFJlY3QmKTsKKyAgICAvLyBEcm9wcyB0aWxlcyB0aGF0IGludGVyc2VjdCBkcm9wUmVjdCBidXQg
ZG8gbm90IGludGVyc2VjdCBrZWVwUmVjdC4KKyAgICB2b2lkIGRyb3BUaWxlc0JldHdlZW5SZWN0
cyhjb25zdCBJbnRSZWN0JiBkcm9wUmVjdCwgY29uc3QgSW50UmVjdCYga2VlcFJlY3QpOworICAg
IGJvb2wgZHJvcERpc3RhbnRUaWxlcyh1bnNpZ25lZCB0aWxlc05lZWRlZCwgZG91YmxlIHNob3J0
ZXN0RGlzdGFuY2UpOworCisgICAgdm9pZCBhZGRUaWxlc0NvdmVyaW5nUmVjdChjb25zdCBJbnRS
ZWN0Jik7CisKKyAgICBib29sIHRpbGVzQ292ZXIoY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAg
IHZvaWQgY2VudGVyVGlsZUdyaWRPcmlnaW4oY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOwor
ICAgIHZvaWQgaW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisKKyAg
ICB2b2lkIHVwZGF0ZVRpbGVPcGFjaXR5KCk7CisgICAgdm9pZCB1cGRhdGVUaWxlQm9yZGVyVmlz
aWJpbGl0eSgpOworICAgIHZvaWQgdXBkYXRlSG9zdExheWVyU2l6ZSgpOworICAgIGJvb2wgY2hl
Y2tEb1NpbmdsZVRpbGVMYXlvdXQoKTsKKworICAgIGJvb2wgaGFzVGlsZXMoKSBjb25zdCB7IHJl
dHVybiAhbV90aWxlcy5pc0VtcHR5KCk7IH0KKworICAgIEludFJlY3QgY2FsY3VsYXRlQ292ZXJS
ZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBib29sJiBjZW50ZXJHcmlkKTsKKworICAg
IC8vIExvZ2dpbmcKKyAgICB2b2lkIGR1bXBUaWxlcygpOworCitwcml2YXRlOgorICAgIGRvdWJs
ZSB0aWxlRGlzdGFuY2UyKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0
JiB0aWxlUmVjdCkgY29uc3Q7CisgICAgdW5zaWduZWQgdGlsZUJ5dGVTaXplKCkgY29uc3Q7CisK
KyAgICB2b2lkIGFkZFRpbGVGb3JJbmRleChjb25zdCBUaWxlSW5kZXgmKTsKKworICAgIFBhc3NS
ZWZQdHI8VGlsZUdyaWRUaWxlPiB0aWxlRm9ySW5kZXgoY29uc3QgVGlsZUluZGV4JikgY29uc3Q7
CisgICAgSW50UmVjdCB0aWxlUmVjdEZvckluZGV4KGNvbnN0IFRpbGVJbmRleCYpIGNvbnN0Owor
ICAgIFBhc3NSZWZQdHI8VGlsZUdyaWRUaWxlPiB0aWxlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQm
KSBjb25zdDsKKyAgICBUaWxlSW5kZXggdGlsZUluZGV4Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQm
KSBjb25zdDsKKworICAgIEludFJlY3QgYWRqdXN0Q292ZXJSZWN0Rm9yUGFnZUJvdW5kcyhjb25z
dCBJbnRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBzaG91bGRVc2VNaW5pbWFsVGlsZUNvdmVyYWdl
KCkgY29uc3Q7CisKK3ByaXZhdGU6ICAgICAgICAKKyAgICBUaWxlR3JpZChUaWxlQ2FjaGUqLCBj
b25zdCBJbnRTaXplJik7CisKKyAgICBUaWxlQ2FjaGUqIG1fdGlsZUNhY2hlOworICAgIFJldGFp
blB0cjxDQUxheWVyPiBtX3RpbGVIb3N0TGF5ZXI7CisKKyAgICBJbnRQb2ludCBtX29yaWdpbjsK
KyAgICBJbnRTaXplIG1fdGlsZVNpemU7CisKKyAgICBmbG9hdCBtX3NjYWxlOworCisgICAgdHlw
ZWRlZiBIYXNoTWFwPFRpbGVJbmRleCwgUmVmUHRyPFRpbGVHcmlkVGlsZT4+IFRpbGVNYXA7Cisg
ICAgVGlsZU1hcCBtX3RpbGVzOworCisgICAgSW50UmVjdCBtX3ZhbGlkQm91bmRzOworfTsKKwor
c3RhdGljIGlubGluZSBJbnRQb2ludCB0b3BMZWZ0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgcmV0dXJuIHJlY3QubG9jYXRpb24oKTsKK30KKworc3RhdGljIGlubGluZSBJbnRQb2ludCBi
b3R0b21SaWdodChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBJbnRQb2ludChy
ZWN0Lm1heFgoKSAtIDEsIHJlY3QubWF4WSgpIC0gMSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKyNlbmRpZiAvLyBUaWxlR3JpZF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWQubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2QxNzAxMzIx
ZTljNzQwZTQzNzI5NWRhNGNlY2Q2MzAwZmZjZDRlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZC5tbQpAQCAtMCwwICsxLDU2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaWxlR3JpZC5oIgorCisj
aWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCisj
aW5jbHVkZSAiU3lzdGVtTWVtb3J5LmgiCisjaW5jbHVkZSAiVGlsZUdyaWRUaWxlLmgiCisjaW5j
bHVkZSAiVGlsZUxheWVyLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyUG9vbC5oIgorI2luY2x1ZGUg
IldBS1dpbmRvdy5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3NQcml2YXRl
Lmg+CisjaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW5jbHVkZSA8UXVhcnR6
Q29yZS9RdWFydHpDb3JlUHJpdmF0ZS5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRl
IDxmdW5jdGlvbmFsPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RpbGVHcmlkOjpUaWxlR3Jp
ZChUaWxlQ2FjaGUqIHRpbGVDYWNoZSwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpCisgICAgOiBt
X3RpbGVDYWNoZSh0aWxlQ2FjaGUpCisgICAgLCBtX3RpbGVIb3N0TGF5ZXIoYWRvcHROUyhbW1Rp
bGVIb3N0TGF5ZXIgYWxsb2NdIGluaXRXaXRoVGlsZUdyaWQ6dGhpc10pKQorICAgICwgbV90aWxl
U2l6ZSh0aWxlU2l6ZSkKKyAgICAsIG1fc2NhbGUoMSkKKyAgICAsIG1fdmFsaWRCb3VuZHMoMCwg
MCwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSkgCit7Cit9CisgICAgCitUaWxlR3JpZDo6flRpbGVHcmlkKCkKK3sKKyAgICBb
bV90aWxlSG9zdExheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKK30KKworSW50UmVjdCBUaWxl
R3JpZDo6dmlzaWJsZVJlY3QoKSBjb25zdAoreworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KG1fdGlsZUNhY2hlLT52aXNpYmxlUmVjdEluTGF5ZXIobV90aWxlSG9z
dExheWVyLmdldCgpKSk7CisKKyAgICAvLyBXaGVuIGZhc3Qgc2Nyb2xsaW5nIHRvIHRoZSB0b3As
IG1vdmUgdGhlIHZpc2libGUgcmVjdCB0aGVyZSBpbW1lZGlhdGVseSBzbyB3ZSBoYXZlIHRpbGVz
IHdoZW4gdGhlIHNjcm9sbGluZyBjb21wbGV0ZXMuCisgICAgaWYgKG1fdGlsZUNhY2hlLT50aWxp
bmdNb2RlKCkgPT0gVGlsZUNhY2hlOjpTY3JvbGxUb1RvcCkKKyAgICAgICAgdmlzaWJsZVJlY3Qu
c2V0WSgwKTsKKworICAgIHJldHVybiB2aXNpYmxlUmVjdDsKK30KKwordm9pZCBUaWxlR3JpZDo6
ZHJvcEFsbFRpbGVzKCkKK3sKKyAgICBtX3RpbGVzLmNsZWFyKCk7Cit9CisKK3ZvaWQgVGlsZUdy
aWQ6OmRyb3BUaWxlc0ludGVyc2VjdGluZ1JlY3QoY29uc3QgSW50UmVjdCYgZHJvcFJlY3QpCit7
CisgICAgZHJvcFRpbGVzQmV0d2VlblJlY3RzKGRyb3BSZWN0LCBJbnRSZWN0KCkpOworfQorCit2
b2lkIFRpbGVHcmlkOjpkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25zdCBJbnRSZWN0JiBrZWVwUmVj
dCkKK3sKKyAgICBkcm9wVGlsZXNCZXR3ZWVuUmVjdHMoSW50UmVjdCgwLCAwLCBzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSwg
a2VlcFJlY3QpOworfQorCit2b2lkIFRpbGVHcmlkOjpkcm9wVGlsZXNCZXR3ZWVuUmVjdHMoY29u
c3QgSW50UmVjdCYgZHJvcFJlY3QsIGNvbnN0IEludFJlY3QmIGtlZXBSZWN0KQoreworICAgIFZl
Y3RvcjxUaWxlSW5kZXg+IHRvUmVtb3ZlOworICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
dGlsZXMuZW5kKCk7CisgICAgZm9yIChhdXRvIHRpbGUgOiBtX3RpbGVzKSB7CisgICAgICAgIFRp
bGVJbmRleCYgaW5kZXggPSB0aWxlLmtleTsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRp
bGUudmFsdWUtPnJlY3QoKTsKKyAgICAgICAgaWYgKHRpbGVSZWN0LmludGVyc2VjdHMoZHJvcFJl
Y3QpICYmICF0aWxlUmVjdC5pbnRlcnNlY3RzKGtlZXBSZWN0KSkKKyAgICAgICAgICAgIHRvUmVt
b3ZlLmFwcGVuZChpbmRleCk7CisgICAgfQorICAgIHVuc2lnbmVkIHJlbW92ZUNvdW50ID0gdG9S
ZW1vdmUuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCByZW1vdmVDb3VudDsg
KytuKQorICAgICAgICBtX3RpbGVzLnJlbW92ZSh0b1JlbW92ZVtuXSk7Cit9CisKK3Vuc2lnbmVk
IFRpbGVHcmlkOjp0aWxlQnl0ZVNpemUoKSBjb25zdAoreworICAgIEludFNpemUgdGlsZVBpeGVs
U2l6ZSA9IG1fdGlsZVNpemU7CisgICAgdGlsZVBpeGVsU2l6ZS5zY2FsZShtX3RpbGVDYWNoZS0+
c2NyZWVuU2NhbGUoKSk7CisgICAgcmV0dXJuIFRpbGVMYXllclBvb2w6OmJ5dGVzQmFja2luZ0xh
eWVyV2l0aFBpeGVsU2l6ZSh0aWxlUGl4ZWxTaXplKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitzdGF0aWMgYm9vbCBpc0ZhcnRoZXJBd2F5KGNvbnN0IHBhaXI8ZG91YmxlLCBUPiYgYSwg
Y29uc3QgcGFpcjxkb3VibGUsIFQ+JiBiKQoreworICAgIHJldHVybiBhLmZpcnN0ID4gYi5maXJz
dDsKK30KKworYm9vbCBUaWxlR3JpZDo6ZHJvcERpc3RhbnRUaWxlcyh1bnNpZ25lZCB0aWxlc05l
ZWRlZCwgZG91YmxlIHNob3J0ZXN0RGlzdGFuY2UpCit7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJU
aWxlID0gdGlsZUJ5dGVTaXplKCk7CisgICAgdW5zaWduZWQgYnl0ZXNOZWVkZWQgPSB0aWxlc05l
ZWRlZCAqIGJ5dGVzUGVyVGlsZTsKKyAgICB1bnNpZ25lZCBieXRlc1VzZWQgPSB0aWxlQ291bnQo
KSAqIGJ5dGVzUGVyVGlsZTsKKyAgICB1bnNpZ25lZCBtYXhpbXVtQnl0ZXMgPSBtX3RpbGVDYWNo
ZS0+dGlsZUNhcGFjaXR5Rm9yR3JpZCh0aGlzKTsKKworICAgIGludCBieXRlc1RvUmVjbGFpbSA9
IGludChieXRlc1VzZWQpIC0gKGludChtYXhpbXVtQnl0ZXMpIC0gYnl0ZXNOZWVkZWQpOworICAg
IGlmIChieXRlc1RvUmVjbGFpbSA8PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHVu
c2lnbmVkIHRpbGVzVG9SZW1vdmVDb3VudCA9IGJ5dGVzVG9SZWNsYWltIC8gYnl0ZXNQZXJUaWxl
OworCisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHRoaXMtPnZpc2libGVSZWN0KCk7CisgICAg
VmVjdG9yPHBhaXI8ZG91YmxlLCBUaWxlSW5kZXg+PiB0b1JlbW92ZTsKKyAgICBmb3IgKGF1dG8g
dGlsZSA6IG1fdGlsZXMpIHsKKyAgICAgICAgVGlsZUluZGV4JiBpbmRleCA9IHRpbGUua2V5Owor
ICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gdGlsZS52YWx1ZS0+cmVjdCgpOworICAgICAgICBk
b3VibGUgZGlzdGFuY2UgPSB0aWxlRGlzdGFuY2UyKHZpc2libGVSZWN0LCB0aWxlUmVjdCk7Cisg
ICAgICAgIGlmIChkaXN0YW5jZSA8PSBzaG9ydGVzdERpc3RhbmNlKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihkaXN0YW5jZSwg
aW5kZXgpKTsKKyAgICAgICAgc3RkOjpwdXNoX2hlYXAodG9SZW1vdmUuYmVnaW4oKSwgdG9SZW1v
dmUuZW5kKCksIHN0ZDo6cHRyX2Z1bihpc0ZhcnRoZXJBd2F5PFRpbGVJbmRleD4pKTsKKyAgICAg
ICAgaWYgKHRvUmVtb3ZlLnNpemUoKSA+IHRpbGVzVG9SZW1vdmVDb3VudCkgeworICAgICAgICAg
ICAgc3RkOjpwb3BfaGVhcCh0b1JlbW92ZS5iZWdpbigpLCB0b1JlbW92ZS5lbmQoKSwgc3RkOjpw
dHJfZnVuKGlzRmFydGhlckF3YXk8VGlsZUluZGV4PikpOworICAgICAgICAgICAgdG9SZW1vdmUu
cmVtb3ZlTGFzdCgpOworICAgICAgICB9CisgICAgfQorICAgIHNpemVfdCByZW1vdmVDb3VudCA9
IHRvUmVtb3ZlLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBuID0gMDsgbiA8IHJlbW92ZUNvdW50
OyArK24pCisgICAgICAgIG1fdGlsZXMucmVtb3ZlKHRvUmVtb3ZlW25dLnNlY29uZCk7CisKKyAg
ICBpZiAoIXNob3J0ZXN0RGlzdGFuY2UpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0
dXJuIHRpbGVDb3VudCgpICogYnl0ZXNQZXJUaWxlICsgYnl0ZXNOZWVkZWQgPD0gbWF4aW11bUJ5
dGVzOworfQorCit2b2lkIFRpbGVHcmlkOjphZGRUaWxlc0NvdmVyaW5nUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0VG9Db3ZlcikKK3sKKyAgICAvLyBXZSBuZXZlciBkcmF3IGFueXRoaW5nIG91dHNp
ZGUgb2Ygb3VyIGJvdW5kcy4KKyAgICBJbnRSZWN0IHJlY3QocmVjdFRvQ292ZXIpOworICAgIHJl
Y3QuaW50ZXJzZWN0KGJvdW5kcygpKTsKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFRpbGVJbmRleCB0b3BMZWZ0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2lu
dCh0b3BMZWZ0KHJlY3QpKTsKKyAgICBUaWxlSW5kZXggYm90dG9tUmlnaHRJbmRleCA9IHRpbGVJ
bmRleEZvclBvaW50KGJvdHRvbVJpZ2h0KHJlY3QpKTsKKyAgICBmb3IgKGludCB5SW5kZXggPSB0
b3BMZWZ0SW5kZXgueSgpOyB5SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC55KCk7ICsreUluZGV4
KSB7CisgICAgICAgIGZvciAoaW50IHhJbmRleCA9IHRvcExlZnRJbmRleC54KCk7IHhJbmRleCA8
PSBib3R0b21SaWdodEluZGV4LngoKTsgKyt4SW5kZXgpIHsKKyAgICAgICAgICAgIFRpbGVJbmRl
eCBpbmRleCh4SW5kZXgsIHlJbmRleCk7CisgICAgICAgICAgICBpZiAoIXRpbGVGb3JJbmRleChp
bmRleCkpCisgICAgICAgICAgICAgICAgYWRkVGlsZUZvckluZGV4KGluZGV4KTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBUaWxlR3JpZDo6YWRkVGlsZUZvckluZGV4KGNvbnN0IFRpbGVJ
bmRleCYgaW5kZXgpCit7CisgICAgbV90aWxlcy5zZXQoaW5kZXgsIFRpbGVHcmlkVGlsZTo6Y3Jl
YXRlKHRoaXMsIHRpbGVSZWN0Rm9ySW5kZXgoaW5kZXgpKSk7Cit9CisKK0NBTGF5ZXIqIFRpbGVH
cmlkOjp0aWxlSG9zdExheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlSG9zdExheWVy
LmdldCgpOworfQorCitJbnRSZWN0IFRpbGVHcmlkOjpib3VuZHMoKSBjb25zdAoreworICAgIHJl
dHVybiBJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoW3RpbGVIb3N0TGF5ZXIoKSBzaXplXSkp
OworfQorCitQYXNzUmVmUHRyPFRpbGVHcmlkVGlsZT4gVGlsZUdyaWQ6OnRpbGVGb3JJbmRleChj
b25zdCBUaWxlSW5kZXgmIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBtX3RpbGVzLmdldChp
bmRleCk7Cit9CisKK0ludFJlY3QgVGlsZUdyaWQ6OnRpbGVSZWN0Rm9ySW5kZXgoY29uc3QgVGls
ZUluZGV4JiBpbmRleCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QoaW5kZXgueCgpICogbV90
aWxlU2l6ZS53aWR0aCgpIC0gKG1fb3JpZ2luLngoKSA/IG1fdGlsZVNpemUud2lkdGgoKSAtIG1f
b3JpZ2luLngoKSA6IDApLAorICAgICAgICAgICAgICAgICBpbmRleC55KCkgKiBtX3RpbGVTaXpl
LmhlaWdodCgpIC0gKG1fb3JpZ2luLnkoKSA/IG1fdGlsZVNpemUuaGVpZ2h0KCkgLSBtX29yaWdp
bi55KCkgOiAwKSwKKyAgICAgICAgICAgICAgICAgbV90aWxlU2l6ZS53aWR0aCgpLAorICAgICAg
ICAgICAgICAgICBtX3RpbGVTaXplLmhlaWdodCgpKTsKKyAgICByZWN0LmludGVyc2VjdChib3Vu
ZHMoKSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK1RpbGVHcmlkOjpUaWxlSW5kZXggVGlsZUdy
aWQ6OnRpbGVJbmRleEZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9vcmlnaW4ueCgpIDwgbV90aWxlU2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlQo
bV9vcmlnaW4ueSgpIDwgbV90aWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgaW50IHggPSAocG9pbnQu
eCgpICsgKG1fb3JpZ2luLngoKSA/IG1fdGlsZVNpemUud2lkdGgoKSAtIG1fb3JpZ2luLngoKSA6
IDApKSAvIG1fdGlsZVNpemUud2lkdGgoKTsKKyAgICBpbnQgeSA9IChwb2ludC55KCkgKyAobV9v
cmlnaW4ueSgpID8gbV90aWxlU2l6ZS5oZWlnaHQoKSAtIG1fb3JpZ2luLnkoKSA6IDApKSAvIG1f
dGlsZVNpemUuaGVpZ2h0KCk7CisgICAgcmV0dXJuIFRpbGVJbmRleChzdGQ6Om1heCh4LCAwKSwg
c3RkOjptYXgoeSwgMCkpOworfQorCit2b2lkIFRpbGVHcmlkOjpjZW50ZXJUaWxlR3JpZE9yaWdp
bihjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCkKK3sKKyAgICBpZiAodmlzaWJsZVJlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBtaW5pbXVtSG9yaXpvbnRh
bFRpbGVzID0gMSArICh2aXNpYmxlUmVjdC53aWR0aCgpIC0gMSkgLyBtX3RpbGVTaXplLndpZHRo
KCk7CisgICAgdW5zaWduZWQgbWluaW11bVZlcnRpY2FsVGlsZXMgPSAxICsgKHZpc2libGVSZWN0
LmhlaWdodCgpIC0gMSkgLyBtX3RpbGVTaXplLmhlaWdodCgpOworICAgIFRpbGVJbmRleCBjdXJy
ZW50VG9wTGVmdEluZGV4ID0gdGlsZUluZGV4Rm9yUG9pbnQodG9wTGVmdCh2aXNpYmxlUmVjdCkp
OworICAgIFRpbGVJbmRleCBjdXJyZW50Qm90dG9tUmlnaHRJbmRleCA9IHRpbGVJbmRleEZvclBv
aW50KGJvdHRvbVJpZ2h0KHZpc2libGVSZWN0KSk7CisgICAgdW5zaWduZWQgY3VycmVudEhvcml6
b250YWxUaWxlcyA9IGN1cnJlbnRCb3R0b21SaWdodEluZGV4LngoKSAtIGN1cnJlbnRUb3BMZWZ0
SW5kZXgueCgpICsgMTsKKyAgICB1bnNpZ25lZCBjdXJyZW50VmVydGljYWxUaWxlcyA9IGN1cnJl
bnRCb3R0b21SaWdodEluZGV4LnkoKSAtIGN1cnJlbnRUb3BMZWZ0SW5kZXgueSgpICsgMTsKKwor
ICAgIC8vIElmIHdlIGhhdmUgdGlsZXMgYWxyZWFkeSwgb25seSBjZW50ZXIgaWYgd2Ugd291bGQg
Z2V0IGJlbmVmaXRzIGZyb20gYm90aCBkaXJlY3Rpb25zIChhcyB3ZSBuZWVkIHRvIHRocm93IG91
dCBleGlzdGluZyB0aWxlcykuCisgICAgaWYgKHRpbGVDb3VudCgpICYmIChjdXJyZW50SG9yaXpv
bnRhbFRpbGVzID09IG1pbmltdW1Ib3Jpem9udGFsVGlsZXMgfHwgY3VycmVudFZlcnRpY2FsVGls
ZXMgPT0gbWluaW11bVZlcnRpY2FsVGlsZXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQ
b2ludCBuZXdPcmlnaW4oMCwgMCk7CisgICAgSW50U2l6ZSBzaXplID0gYm91bmRzKCkuc2l6ZSgp
OworICAgIGlmIChzaXplLndpZHRoKCkgPiBtX3RpbGVTaXplLndpZHRoKCkpIHsKKyAgICAgICAg
bmV3T3JpZ2luLnNldFgoKHZpc2libGVSZWN0LngoKSAtIChtaW5pbXVtSG9yaXpvbnRhbFRpbGVz
ICogbV90aWxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVJlY3Qud2lkdGgoKSkgLyAyKSAlIG1fdGls
ZVNpemUud2lkdGgoKSk7CisgICAgICAgIGlmIChuZXdPcmlnaW4ueCgpIDwgMCkKKyAgICAgICAg
ICAgIG5ld09yaWdpbi5zZXRYKDApOworICAgIH0KKyAgICBpZiAoc2l6ZS5oZWlnaHQoKSA+IG1f
dGlsZVNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgbmV3T3JpZ2luLnNldFkoKHZpc2libGVSZWN0
LnkoKSAtIChtaW5pbXVtVmVydGljYWxUaWxlcyAqIG1fdGlsZVNpemUuaGVpZ2h0KCkgLSB2aXNp
YmxlUmVjdC5oZWlnaHQoKSkgLyAyKSAlIG1fdGlsZVNpemUuaGVpZ2h0KCkpOworICAgICAgICBp
ZiAobmV3T3JpZ2luLnkoKSA8IDApCisgICAgICAgICAgICBuZXdPcmlnaW4uc2V0WSgwKTsKKyAg
ICB9CisKKyAgICAvLyBEcm9wIGFsbCBleGlzdGluZyB0aWxlcyBpZiB0aGUgb3JpZ2luIG1vdmVk
LgorICAgIGlmIChuZXdPcmlnaW4gPT0gbV9vcmlnaW4pCisgICAgICAgIHJldHVybjsKKyAgICBt
X3RpbGVzLmNsZWFyKCk7CisgICAgbV9vcmlnaW4gPSBuZXdPcmlnaW47Cit9CisKK1Bhc3NSZWZQ
dHI8VGlsZUdyaWRUaWxlPiBUaWxlR3JpZDo6dGlsZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBw
b2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGlsZUZvckluZGV4KHRpbGVJbmRleEZvclBvaW50
KHBvaW50KSk7Cit9CisKK2Jvb2wgVGlsZUdyaWQ6OnRpbGVzQ292ZXIoY29uc3QgSW50UmVjdCYg
cmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGlsZUZvclBvaW50KHJlY3QubG9jYXRpb24oKSkg
JiYgdGlsZUZvclBvaW50KEludFBvaW50KHJlY3QubWF4WCgpIC0gMSwgcmVjdC55KCkpKSAmJgor
ICAgIHRpbGVGb3JQb2ludChJbnRQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkgLSAxKSkgJiYg
dGlsZUZvclBvaW50KEludFBvaW50KHJlY3QubWF4WCgpIC0gMSwgcmVjdC5tYXhZKCkgLSAxKSk7
Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OnVwZGF0ZVRpbGVPcGFjaXR5KCkKK3sKKyAgICBUaWxlTWFw
OjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOworICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgW2l0LT52
YWx1ZS0+dGlsZUxheWVyKCkgc2V0T3BhcXVlOm1fdGlsZUNhY2hlLT50aWxlc09wYXF1ZSgpXTsK
K30KKwordm9pZCBUaWxlR3JpZDo6dXBkYXRlVGlsZUJvcmRlclZpc2liaWxpdHkoKQoreworICAg
IFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChUaWxlTWFw
OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICBpdC0+dmFsdWUtPnNob3dCb3JkZXIobV90aWxlQ2FjaGUtPnRpbGVCb3JkZXJzVmlzaWJsZSgp
KTsKK30KKwordW5zaWduZWQgVGlsZUdyaWQ6OnRpbGVDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdGlsZXMuc2l6ZSgpOworfQorCitib29sIFRpbGVHcmlkOjpjaGVja0RvU2luZ2xlVGls
ZUxheW91dCgpCit7CisgICAgSW50U2l6ZSBzaXplID0gYm91bmRzKCkuc2l6ZSgpOworICAgIGlm
IChzaXplLndpZHRoKCkgPiBtX3RpbGVTaXplLndpZHRoKCkgfHwgc2l6ZS5oZWlnaHQoKSA+IG1f
dGlsZVNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29y
aWdpbiAhPSBJbnRQb2ludCgwLCAwKSkgeworICAgICAgICBtX3RpbGVzLmNsZWFyKCk7CisgICAg
ICAgIG1fb3JpZ2luID0gSW50UG9pbnQoMCwgMCk7CisgICAgfQorCisgICAgZHJvcEludmFsaWRU
aWxlcygpOworCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVCghbV90
aWxlcy5nZXQoVGlsZUluZGV4KDAsIDApKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIFRpbGVJbmRleCBvcmlnaW5JbmRleCgwLCAwKTsKKyAgICBpZiAoIW1fdGlsZXMuZ2V0
KG9yaWdpbkluZGV4KSkKKyAgICAgICAgbV90aWxlcy5zZXQob3JpZ2luSW5kZXgsIFRpbGVHcmlk
VGlsZTo6Y3JlYXRlKHRoaXMsIHRpbGVSZWN0Rm9ySW5kZXgob3JpZ2luSW5kZXgpKSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUaWxlR3JpZDo6dXBkYXRlSG9zdExheWVyU2l6ZSgp
Cit7CisgICAgQ0FMYXllciogaG9zdExheWVyID0gbV90aWxlQ2FjaGUtPmhvc3RMYXllcigpOwor
ICAgIENHUmVjdCB0aWxlSG9zdEJvdW5kcyA9IFtob3N0TGF5ZXIgY29udmVydFJlY3Q6W2hvc3RM
YXllciBib3VuZHNdIHRvTGF5ZXI6dGlsZUhvc3RMYXllcigpXTsKKyAgICBDR1NpemUgdHJhbnNm
b3JtZWRTaXplOworICAgIHRyYW5zZm9ybWVkU2l6ZS53aWR0aCA9IENHUm91bmQodGlsZUhvc3RC
b3VuZHMuc2l6ZS53aWR0aCk7CisgICAgdHJhbnNmb3JtZWRTaXplLmhlaWdodCA9IENHUm91bmQo
dGlsZUhvc3RCb3VuZHMuc2l6ZS5oZWlnaHQpOworCisgICAgQ0dSZWN0IGJvdW5kcyA9IFt0aWxl
SG9zdExheWVyKCkgYm91bmRzXTsKKyAgICBpZiAoQ0dTaXplRXF1YWxUb1NpemUoYm91bmRzLnNp
emUsIHRyYW5zZm9ybWVkU2l6ZSkpCisgICAgICAgIHJldHVybjsKKyAgICBib3VuZHMuc2l6ZSA9
IHRyYW5zZm9ybWVkU2l6ZTsKKyAgICBbdGlsZUhvc3RMYXllcigpIHNldEJvdW5kczpib3VuZHNd
OworfQorCit2b2lkIFRpbGVHcmlkOjpkcm9wSW52YWxpZFRpbGVzKCkKK3sKKyAgICBJbnRSZWN0
IGJvdW5kcyA9IHRoaXMtPmJvdW5kcygpOworICAgIEludFJlY3QgZHJvcEJvdW5kcyA9IGludGVy
c2VjdGlvbihtX3ZhbGlkQm91bmRzLCBib3VuZHMpOworICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRv
UmVtb3ZlOworICAgIGZvciAoYXV0byB0aWxlIDogbV90aWxlcykgeworICAgICAgICBUaWxlSW5k
ZXgmIGluZGV4ID0gdGlsZS5rZXk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB0aWxlLnZh
bHVlLT5yZWN0KCk7CisgICAgICAgIEludFJlY3QgZXhwZWN0ZWRUaWxlUmVjdCA9IHRpbGVSZWN0
Rm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAoZXhwZWN0ZWRUaWxlUmVjdCAhPSB0aWxlUmVj
dCB8fCAhZHJvcEJvdW5kcy5jb250YWlucyh0aWxlUmVjdCkpCisgICAgICAgICAgICB0b1JlbW92
ZS5hcHBlbmQoaW5kZXgpOworICAgIH0KKyAgICB1bnNpZ25lZCByZW1vdmVDb3VudCA9IHRvUmVt
b3ZlLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcmVtb3ZlQ291bnQ7ICsr
bikKKyAgICAgICAgbV90aWxlcy5yZW1vdmUodG9SZW1vdmVbbl0pOworCisgICAgbV92YWxpZEJv
dW5kcyA9IGJvdW5kczsKK30KKwordm9pZCBUaWxlR3JpZDo6aW52YWxpZGF0ZVRpbGVzKGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBpZiAoIWhhc1RpbGVzKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEludFJlY3QgYm91bmRzID0gdGhpcy0+Ym91bmRzKCk7CisgICAgaWYgKGlu
dGVyc2VjdGlvbihib3VuZHMsIG1fdmFsaWRCb3VuZHMpICE9IG1fdmFsaWRCb3VuZHMpIHsKKyAg
ICAgICAgLy8gVGhlIGJvdW5kcyBoYXZlIGdvdCBzbWFsbGVyLiBFdmVyeXRoaW5nIG91dHNpZGUg
d2lsbCBhbHNvIGJlIGNvbnNpZGVyZWQgaW52YWxpZCBhbmQgd2lsbCBiZSBkcm9wcGVkIGJ5IGRy
b3BJbnZhbGlkVGlsZXMoKS4KKyAgICAgICAgLy8gRHVlIHRvIGRpcnR5UmVjdCBiZWluZyBsaW1p
dGVkIHRvIGN1cnJlbnQgYm91bmRzIHRoZSB0aWxlcyB0aGF0IGFyZSB0ZW1wb3JhcmlseSBvdXRz
aWRlIG1pZ2h0IG1pc3MgaW52YWxpZGF0aW9uIAorICAgICAgICAvLyBjb21wbGV0ZWx5IG90aHdl
cndpc2UuCisgICAgICAgIG1fdmFsaWRCb3VuZHMgPSBib3VuZHM7CisgICAgfQorCisgICAgVmVj
dG9yPFRpbGVJbmRleD4gaW52YWxpZGF0ZWRUaWxlczsKKworICAgIGlmIChkaXJ0eVJlY3Qud2lk
dGgoKSA+IG1fdGlsZVNpemUud2lkdGgoKSAqIDQgfHwgZGlydHlSZWN0LmhlaWdodCgpID4gbV90
aWxlU2l6ZS5oZWlnaHQoKSAqIDQpIHsKKyAgICAgICAgLy8gRm9yIGxhcmdlIGludmFsaWRhdGVz
LCBpdGVyYXRlIG92ZXIgbGl2ZSB0aWxlcy4KKyAgICAgICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5k
ID0gbV90aWxlcy5lbmQoKTsKKyAgICAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBUaWxlR3JpZFRp
bGUqIHRpbGUgPSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXRpbGUtPnJlY3Qo
KS5pbnRlcnNlY3RzKGRpcnR5UmVjdCkpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIHRpbGUtPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CisgICAgICAgICAgICBpbnZh
bGlkYXRlZFRpbGVzLmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIFRpbGVJbmRleCB0b3BMZWZ0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludCh0b3BMZWZ0
KGRpcnR5UmVjdCkpOworICAgICAgICBUaWxlSW5kZXggYm90dG9tUmlnaHRJbmRleCA9IHRpbGVJ
bmRleEZvclBvaW50KGJvdHRvbVJpZ2h0KGRpcnR5UmVjdCkpOworICAgICAgICBmb3IgKGludCB5
SW5kZXggPSB0b3BMZWZ0SW5kZXgueSgpOyB5SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC55KCk7
ICsreUluZGV4KSB7CisgICAgICAgICAgICBmb3IgKGludCB4SW5kZXggPSB0b3BMZWZ0SW5kZXgu
eCgpOyB4SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC54KCk7ICsreEluZGV4KSB7CisgICAgICAg
ICAgICAgICAgVGlsZUluZGV4IGluZGV4KHhJbmRleCwgeUluZGV4KTsKKyAgICAgICAgICAgICAg
ICBSZWZQdHI8VGlsZUdyaWRUaWxlPiB0aWxlID0gdGlsZUZvckluZGV4KGluZGV4KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXRpbGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIGlmICghdGlsZS0+cmVjdCgpLmludGVyc2VjdHMoZGlydHlSZWN0KSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdGlsZS0+aW52YWxp
ZGF0ZVJlY3QoZGlydHlSZWN0KTsKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlZFRpbGVzLmFw
cGVuZChpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGlu
dmFsaWRhdGVkVGlsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgLy8gV2hlbiB1
c2luZyBtaW5pbWFsIGNvdmVyYWdlLCBkcm9wIHNwZWN1bGF0aXZlIHRpbGVzIGluc3RlYWQgb2Yg
dXBkYXRpbmcgdGhlbS4KKyAgICBpZiAoIXNob3VsZFVzZU1pbmltYWxUaWxlQ292ZXJhZ2UoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3RpbGVDYWNoZS0+dGlsaW5nTW9kZSgpICE9IFRp
bGVDYWNoZTo6TWluaW1hbCAmJiBtX3RpbGVDYWNoZS0+dGlsaW5nTW9kZSgpICE9IFRpbGVDYWNo
ZTo6Tm9ybWFsKQorICAgICAgICByZXR1cm47CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHRo
aXMtPnZpc2libGVSZWN0KCk7CisgICAgdW5zaWduZWQgY291bnQgPSBpbnZhbGlkYXRlZFRpbGVz
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAg
ICAgICBSZWZQdHI8VGlsZUdyaWRUaWxlPiB0aWxlID0gdGlsZUZvckluZGV4KGludmFsaWRhdGVk
VGlsZXNbaV0pOworICAgICAgICBpZiAoIXRpbGUtPnJlY3QoKS5pbnRlcnNlY3RzKHZpc2libGVS
ZWN0KSkKKyAgICAgICAgICAgIG1fdGlsZXMucmVtb3ZlKGludmFsaWRhdGVkVGlsZXNbaV0pOwor
ICAgIH0KK30KKworYm9vbCBUaWxlR3JpZDo6c2hvdWxkVXNlTWluaW1hbFRpbGVDb3ZlcmFnZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZUNhY2hlLT50aWxpbmdNb2RlKCkgPT0gVGlsZUNh
Y2hlOjpNaW5pbWFsCisgICAgICAgIHx8ICFtX3RpbGVDYWNoZS0+aXNTcGVjdWxhdGl2ZVRpbGVD
cmVhdGlvbkVuYWJsZWQoKQorICAgICAgICB8fCBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5oYXNS
ZWNlaXZlZE1lbW9yeVByZXNzdXJlKCk7Cit9CisKK0ludFJlY3QgVGlsZUdyaWQ6OmFkanVzdENv
dmVyUmVjdEZvclBhZ2VCb3VuZHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICAv
LyBBZGp1c3QgdGhlIHJlY3Qgc28gdGhhdCBpdCBzdGF5cyB3aXRoaW4gdGhlIGJvdW5kcyBhbmQg
a2VlcHMgdGhlIHBpeGVsIHNpemUuCisgICAgSW50UmVjdCBib3VuZHMgPSB0aGlzLT5ib3VuZHMo
KTsKKyAgICBJbnRSZWN0IGFkanVzdGVkUmVjdCA9IHJlY3Q7CisgICAgYWRqdXN0ZWRSZWN0Lm1v
dmUocmVjdC54KCkgPCBib3VuZHMueCgpID8gYm91bmRzLngoKSAtIHJlY3QueCgpIDogMCwKKyAg
ICAgICAgICAgICAgcmVjdC55KCkgPCBib3VuZHMueSgpID8gYm91bmRzLnkoKSAtIHJlY3QueSgp
IDogMCk7CisgICAgYWRqdXN0ZWRSZWN0Lm1vdmUocmVjdC5tYXhYKCkgPiBib3VuZHMubWF4WCgp
ID8gYm91bmRzLm1heFgoKSAtIHJlY3QubWF4WCgpIDogMCwKKyAgICAgICAgICAgICAgcmVjdC5t
YXhZKCkgPiBib3VuZHMubWF4WSgpID8gYm91bmRzLm1heFkoKSAtIHJlY3QubWF4WSgpIDogMCk7
CisgICAgYWRqdXN0ZWRSZWN0ID0gaW50ZXJzZWN0aW9uKGJvdW5kcywgYWRqdXN0ZWRSZWN0KTsK
KyAgICBpZiAoYWRqdXN0ZWRSZWN0ID09IHJlY3QgfHwgYWRqdXN0ZWRSZWN0LmlzRW1wdHkoKSB8
fCBzaG91bGRVc2VNaW5pbWFsVGlsZUNvdmVyYWdlKCkpCisgICAgICAgIHJldHVybiBhZGp1c3Rl
ZFJlY3Q7CisgICAgaW50IHBpeGVscyA9IGFkanVzdGVkUmVjdC53aWR0aCgpICogYWRqdXN0ZWRS
ZWN0LmhlaWdodCgpOworICAgIGlmIChhZGp1c3RlZFJlY3Qud2lkdGgoKSAhPSByZWN0LndpZHRo
KCkpCisgICAgICAgIGFkanVzdGVkUmVjdC5pbmZsYXRlWSgocGl4ZWxzIC8gYWRqdXN0ZWRSZWN0
LndpZHRoKCkgLSBhZGp1c3RlZFJlY3QuaGVpZ2h0KCkpIC8gMik7CisgICAgZWxzZSBpZiAoYWRq
dXN0ZWRSZWN0LmhlaWdodCgpICE9IHJlY3QuaGVpZ2h0KCkpCisgICAgICAgIGFkanVzdGVkUmVj
dC5pbmZsYXRlWCgocGl4ZWxzIC8gYWRqdXN0ZWRSZWN0LmhlaWdodCgpIC0gYWRqdXN0ZWRSZWN0
LndpZHRoKCkpIC8gMik7CisgICAgcmV0dXJuIGludGVyc2VjdGlvbihhZGp1c3RlZFJlY3QsIGJv
dW5kcyk7Cit9CisKK0ludFJlY3QgVGlsZUdyaWQ6OmNhbGN1bGF0ZUNvdmVyUmVjdChjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlUmVjdCwgYm9vbCYgY2VudGVyR3JpZCkKK3sKKyAgICAvLyBVc2UgbWlu
aW11bSBjb3ZlclJlY3QgaWYgd2UgYXJlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KKyAgICBpZiAo
c2hvdWxkVXNlTWluaW1hbFRpbGVDb3ZlcmFnZSgpKSB7CisgICAgICAgIGNlbnRlckdyaWQgPSB0
cnVlOworICAgICAgICByZXR1cm4gdmlzaWJsZVJlY3Q7CisgICAgfQorICAgIEludFJlY3QgY292
ZXJSZWN0ID0gdmlzaWJsZVJlY3Q7CisgICAgY2VudGVyR3JpZCA9IGZhbHNlOworICAgIGNvdmVy
UmVjdC5pbmZsYXRlWCh2aXNpYmxlUmVjdC53aWR0aCgpIC8gMik7CisgICAgY292ZXJSZWN0Lmlu
ZmxhdGVZKHZpc2libGVSZWN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gYWRqdXN0Q292ZXJSZWN0
Rm9yUGFnZUJvdW5kcyhjb3ZlclJlY3QpOworfQorCitkb3VibGUgVGlsZUdyaWQ6OnRpbGVEaXN0
YW5jZTIoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0
KSBjb25zdAoreworICAgIC8vIFRoZSAiZGlzdGFuY2UiIGNhbGN1bGF0ZWQgaGVyZSBpcyB1c2Vk
IHRvIHBpY2sgd2hpY2ggdGlsZSB0byBjYWNoZSBuZXh0LiBUaGUgaWRlYSBpcyB0byBjcmVhdGUg
dGhvc2UKKyAgICAvLyBjbG9zZXN0IHRvIHRoZSBjdXJyZW50IHZpZXdwb3J0IGZpcnN0IHNvIHRo
ZSB1c2VyIGlzIG1vcmUgbGlrZWx5IHRvIHNlZSBhbHJlYWR5IHJlbmRlcmVkIGNvbnRlbnQgd2Ug
c2hlCisgICAgLy8gc2Nyb2xscy4gVGhlIGNhbGN1bGF0aW9uIGlzIHdlaWdodGVkIHRvIHByZWZl
ciB2ZXJ0aWNhbCBhbmQgZG93bndhcmQgZGlyZWN0aW9uLgorICAgIGlmICh2aXNpYmxlUmVjdC5p
bnRlcnNlY3RzKHRpbGVSZWN0KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgSW50UG9pbnQgdmlz
aWJsZUNlbnRlciA9IHZpc2libGVSZWN0LmxvY2F0aW9uKCkgKyBJbnRTaXplKHZpc2libGVSZWN0
LndpZHRoKCkgLyAyLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSAvIDIpOworICAgIEludFBvaW50IHRp
bGVDZW50ZXIgPSB0aWxlUmVjdC5sb2NhdGlvbigpICsgSW50U2l6ZSh0aWxlUmVjdC53aWR0aCgp
IC8gMiwgdGlsZVJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICAKKyAgICBkb3VibGUgaG9yaXpvbnRh
bEJpYXMgPSAxLjA7CisgICAgZG91YmxlIGxlZnR3YXJkQmlhcyA9IDEuMDsKKyAgICBkb3VibGUg
cmlnaHR3YXJkQmlhcyA9IDEuMDsKKworICAgIGRvdWJsZSB2ZXJ0aWNhbEJpYXMgPSAxLjA7Cisg
ICAgZG91YmxlIHVwd2FyZEJpYXMgPSAxLjA7CisgICAgZG91YmxlIGRvd253YXJkQmlhcyA9IDEu
MDsKKworICAgIGNvbnN0IGRvdWJsZSB0aWxpbmdCaWFzVmVyeUxpa2VseSA9IDAuODsKKyAgICBj
b25zdCBkb3VibGUgdGlsaW5nQmlhc0xpa2VseSA9IDAuOTsKKworICAgIHN3aXRjaCAobV90aWxl
Q2FjaGUtPnRpbGluZ0RpcmVjdGlvbigpKSB7CisgICAgY2FzZSBUaWxlQ2FjaGU6OlRpbGluZ0Rp
cmVjdGlvblVwOgorICAgICAgICB2ZXJ0aWNhbEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxpa2VseTsK
KyAgICAgICAgdXB3YXJkQmlhcyA9IHRpbGluZ0JpYXNMaWtlbHk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVGlsZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb25Eb3duOgorICAgICAgICB2ZXJ0aWNh
bEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxpa2VseTsKKyAgICAgICAgZG93bndhcmRCaWFzID0gdGls
aW5nQmlhc0xpa2VseTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUaWxlQ2FjaGU6OlRpbGlu
Z0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIGhvcml6b250YWxCaWFzID0gdGlsaW5nQmlhc1ZlcnlM
aWtlbHk7CisgICAgICAgIGxlZnR3YXJkQmlhcyA9IHRpbGluZ0JpYXNMaWtlbHk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVGlsZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb25SaWdodDoKKyAgICAg
ICAgaG9yaXpvbnRhbEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxpa2VseTsKKyAgICAgICAgcmlnaHR3
YXJkQmlhcyA9IHRpbGluZ0JpYXNMaWtlbHk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGRvdWJsZSB4U2NhbGUgPSBob3Jpem9udGFsQmlhcyAqIHZpc2libGVSZWN0LmhlaWdodCgpIC8g
dmlzaWJsZVJlY3Qud2lkdGgoKSAqICh0aWxlQ2VudGVyLngoKSA+PSB2aXNpYmxlQ2VudGVyLngo
KSA/IHJpZ2h0d2FyZEJpYXMgOiBsZWZ0d2FyZEJpYXMpOworICAgIGRvdWJsZSB5U2NhbGUgPSB2
ZXJ0aWNhbEJpYXMgKiB2aXNpYmxlUmVjdC53aWR0aCgpIC8gdmlzaWJsZVJlY3QuaGVpZ2h0KCkg
KiAodGlsZUNlbnRlci55KCkgPj0gdmlzaWJsZUNlbnRlci55KCkgPyBkb3dud2FyZEJpYXMgOiB1
cHdhcmRCaWFzKTsKKworICAgIGRvdWJsZSB4RGlzdGFuY2UgPSB4U2NhbGUgKiAodGlsZUNlbnRl
ci54KCkgLSB2aXNpYmxlQ2VudGVyLngoKSk7CisgICAgZG91YmxlIHlEaXN0YW5jZSA9IHlTY2Fs
ZSAqICh0aWxlQ2VudGVyLnkoKSAtIHZpc2libGVDZW50ZXIueSgpKTsKKworICAgIGRvdWJsZSBk
aXN0YW5jZTIgPSB4RGlzdGFuY2UgKiB4RGlzdGFuY2UgKyB5RGlzdGFuY2UgKiB5RGlzdGFuY2U7
CisgICAgcmV0dXJuIGRpc3RhbmNlMjsKK30KKwordm9pZCBUaWxlR3JpZDo6Y3JlYXRlVGlsZXMo
VGlsZUNhY2hlOjpTeW5jaHJvbm91c1RpbGVDcmVhdGlvbk1vZGUgY3JlYXRpb25Nb2RlKQorewor
ICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB0aGlzLT52aXNpYmxlUmVjdCgpOworICAgIGlmICh2
aXNpYmxlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERyb3AgdGls
ZXMgdGhhdCBhcmUgd3Jvbmcgc2l6ZSBvciBvdXRzaWRlIHRoZSBmcmFtZSAoYmVjYXVzZSB0aGUg
ZnJhbWUgaGFzIGJlZW4gcmVzaXplZCkuCisgICAgZHJvcEludmFsaWRUaWxlcygpOworCisgICAg
Ym9vbCBjZW50ZXJHcmlkOworICAgIEludFJlY3QgY292ZXJSZWN0ID0gY2FsY3VsYXRlQ292ZXJS
ZWN0KHZpc2libGVSZWN0LCBjZW50ZXJHcmlkKTsKKworICAgIC8vIElmIHRpbGUgc2l6ZSBpcyBi
aWdnZXIgdGhhbiB0aGUgdmlldywgY2VudGVyaW5nIG1pbmltaXplcyB0aGUgcGFpbnRpbmcgbmVl
ZGVkIHRvIGNvdmVyIHRoZSBzY3JlZW4uCisgICAgLy8gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1
bCBhZnRlciB6b29taW5nIAorICAgIGNlbnRlckdyaWQgPSBjZW50ZXJHcmlkIHx8ICF0aWxlQ291
bnQoKTsKKyAgICBpZiAoY2VudGVyR3JpZCkKKyAgICAgICAgY2VudGVyVGlsZUdyaWRPcmlnaW4o
dmlzaWJsZVJlY3QpOworCisgICAgZG91YmxlIHNob3J0ZXN0RGlzdGFuY2UgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7CisgICAgZG91YmxlIGNvdmVyZWREaXN0YW5j
ZSA9IDA7CisgICAgVmVjdG9yPFRpbGVHcmlkOjpUaWxlSW5kZXg+IHRpbGVzVG9DcmVhdGU7Cisg
ICAgdW5zaWduZWQgcGVuZGluZ1RpbGVDb3VudCA9IDA7CisKKyAgICBUaWxlR3JpZDo6VGlsZUlu
ZGV4IHRvcExlZnRJbmRleCA9IHRpbGVJbmRleEZvclBvaW50KHRvcExlZnQoY292ZXJSZWN0KSk7
CisgICAgVGlsZUdyaWQ6OlRpbGVJbmRleCBib3R0b21SaWdodEluZGV4ID0gdGlsZUluZGV4Rm9y
UG9pbnQoYm90dG9tUmlnaHQoY292ZXJSZWN0KSk7CisgICAgZm9yIChpbnQgeUluZGV4ID0gdG9w
TGVmdEluZGV4LnkoKTsgeUluZGV4IDw9IGJvdHRvbVJpZ2h0SW5kZXgueSgpOyArK3lJbmRleCkg
eworICAgICAgICBmb3IgKGludCB4SW5kZXggPSB0b3BMZWZ0SW5kZXgueCgpOyB4SW5kZXggPD0g
Ym90dG9tUmlnaHRJbmRleC54KCk7ICsreEluZGV4KSB7CisgICAgICAgICAgICBUaWxlR3JpZDo6
VGlsZUluZGV4IGluZGV4KHhJbmRleCwgeUluZGV4KTsKKyAgICAgICAgICAgIC8vIEN1cnJlbnRs
eSB2aXNpYmxlIHRpbGVzIGhhdmUgZGlzdGFuY2Ugb2YgMCBhbmQgZ2V0IGFsbCBjcmVhdGVkIGlu
IHRoZSBzYW1lIHRyYW5zYWN0aW9uLgorICAgICAgICAgICAgZG91YmxlIGRpc3RhbmNlID0gdGls
ZURpc3RhbmNlMih2aXNpYmxlUmVjdCwgdGlsZVJlY3RGb3JJbmRleChpbmRleCkpOworICAgICAg
ICAgICAgaWYgKGRpc3RhbmNlID4gY292ZXJlZERpc3RhbmNlKQorICAgICAgICAgICAgICAgIGNv
dmVyZWREaXN0YW5jZSA9IGRpc3RhbmNlOworICAgICAgICAgICAgaWYgKHRpbGVGb3JJbmRleChp
bmRleCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICArK3BlbmRpbmdU
aWxlQ291bnQ7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiBzaG9ydGVzdERpc3RhbmNlKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgc2hv
cnRlc3REaXN0YW5jZSkgeworICAgICAgICAgICAgICAgIHRpbGVzVG9DcmVhdGUuY2xlYXIoKTsK
KyAgICAgICAgICAgICAgICBzaG9ydGVzdERpc3RhbmNlID0gZGlzdGFuY2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aWxlc1RvQ3JlYXRlLmFwcGVuZChpbmRleCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzaXplX3QgdGlsZXNUb0NyZWF0ZUNvdW50ID0gdGlsZXNUb0NyZWF0ZS5z
aXplKCk7CisKKyAgICAvLyBUaWxlIGNyZWF0aW9uIHRpbWVyIHdpbGwgaW52b2tlIHRoaXMgZnVu
Y3Rpb24gYWdhaW4gaW4gQ292ZXJTcGVjdWxhdGl2ZSBtb2RlLgorICAgIGJvb2wgY2FuZGlkYXRl
VGlsZXNBcmVTcGVjdWxhdGl2ZSA9IHNob3J0ZXN0RGlzdGFuY2UgPiAwOworICAgIGlmIChjcmVh
dGlvbk1vZGUgPT0gVGlsZUNhY2hlOjpDb3ZlclZpc2libGVPbmx5ICYmIGNhbmRpZGF0ZVRpbGVz
QXJlU3BlY3VsYXRpdmUpCisgICAgICAgIHRpbGVzVG9DcmVhdGVDb3VudCA9IDA7CisKKyAgICAv
LyBFdmVuIGlmIHdlIGRvbid0IGNyZWF0ZSBhbnkgdGlsZXMsIHdlIHNob3VsZCBzdGlsbCBkcm9w
IGRpc3RhbnQgdGlsZXMKKyAgICAvLyBpbiBjYXNlIGNvdmVyUmVjdCBnb3Qgc21hbGxlci4KKyAg
ICBkb3VibGUga2VlcERpc3RhbmNlID0gc3RkOjptaW4oc2hvcnRlc3REaXN0YW5jZSwgY292ZXJl
ZERpc3RhbmNlKTsKKyAgICBpZiAoIWRyb3BEaXN0YW50VGlsZXModGlsZXNUb0NyZWF0ZUNvdW50
LCBrZWVwRGlzdGFuY2UpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGVuZGluZ1Rp
bGVDb3VudCA+PSB0aWxlc1RvQ3JlYXRlQ291bnQpOworICAgIGlmICghcGVuZGluZ1RpbGVDb3Vu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCB0aWxlc1Rv
Q3JlYXRlQ291bnQ7ICsrbikKKyAgICAgICAgYWRkVGlsZUZvckluZGV4KHRpbGVzVG9DcmVhdGVb
bl0pOworCisgICAgYm9vbCBkaWRDcmVhdGVUaWxlcyA9ICEhdGlsZXNUb0NyZWF0ZUNvdW50Owor
ICAgIGJvb2wgY3JlYXRlTW9yZVRpbGVzID0gcGVuZGluZ1RpbGVDb3VudCA+IHRpbGVzVG9DcmVh
dGVDb3VudDsKKyAgICBtX3RpbGVDYWNoZS0+ZmluaXNoZWRDcmVhdGluZ1RpbGVzKGRpZENyZWF0
ZVRpbGVzLCBjcmVhdGVNb3JlVGlsZXMpOworfQorCit2b2lkIFRpbGVHcmlkOjpkdW1wVGlsZXMo
KQoreworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB0aGlzLT52aXNpYmxlUmVjdCgpOworICAg
IE5TTG9nKEAidHJhbnNmb3JtZWQgdmlzaWJsZVJlY3QgPSBbJTZkICU2ZCAlNmQgJTZkXSIsIHZp
c2libGVSZWN0LngoKSwgdmlzaWJsZVJlY3QueSgpLCB2aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNp
YmxlUmVjdC5oZWlnaHQoKSk7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgVGlsZU1hcDo6aXRl
cmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVGlsZUluZGV4
JiBpbmRleCA9IGl0LT5rZXk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBpdC0+dmFsdWUt
PnJlY3QoKTsKKyAgICAgICAgTlNMb2coQCIjJS0zZCAoJTNkICUzZCkgLSBbJTZkICU2ZCAlNmQg
JTZkXSVAIiwgKytpLCBpbmRleC54KCksIGluZGV4LnkoKSwgdGlsZVJlY3QueCgpLCB0aWxlUmVj
dC55KCksIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCB0aWxlUmVjdC5pbnRl
cnNlY3RzKHZpc2libGVSZWN0KSA/IEAiICoiIDogQCIiKTsKKyAgICAgICAgTlNMb2coQCIgICAg
ICVAIiwgW2l0LT52YWx1ZS0+dGlsZUxheWVyKCkgY29udGVudHNdKTsKKyAgICB9Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYWQ5MjI4NWZk
OThkYjZhMjkzMjhhMmIzZTAwYzRmOTJkYWEwMWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkVGlsZS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFRpbGVHcmlkVGlsZV9oCisjZGVmaW5lIFRpbGVHcmlkVGlsZV9o
CisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCitAY2xhc3MgVGlsZUxheWVyOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFRpbGVHcmlkOworCisvLyBSZWZjb3VudCB0aGUgdGlsZXMgc28gdGhleSB3b3Jr
IG5pY2VseSBpbiB2ZWN0b3IgYW5kIHdlIGtub3cgd2hlbiB0byByZW1vdmUgdGhlIHRpbGUgbGF5
ZXIgZnJvbSB0aGUgcGFyZW50LgorY2xhc3MgVGlsZUdyaWRUaWxlIDogcHVibGljIFJlZkNvdW50
ZWQ8VGlsZUdyaWRUaWxlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGlsZUdy
aWRUaWxlPiBjcmVhdGUoVGlsZUdyaWQqIGdyaWQsIGNvbnN0IEludFJlY3QmIHJlY3QpIHsgcmV0
dXJuIGFkb3B0UmVmPFRpbGVHcmlkVGlsZT4obmV3IFRpbGVHcmlkVGlsZShncmlkLCByZWN0KSk7
IH0KKyAgICB+VGlsZUdyaWRUaWxlKCk7CisKKyAgICBUaWxlTGF5ZXIqIHRpbGVMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fdGlsZUxheWVyLmdldCgpOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0SW5TdXJmYWNlKTsKKyAgICBJbnRSZWN0IHJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgdGls
ZVJlY3QpOworICAgIHZvaWQgc2hvd0JvcmRlcihib29sKTsKKworcHJpdmF0ZToKKyAgICBUaWxl
R3JpZFRpbGUoVGlsZUdyaWQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICBUaWxlR3JpZCogbV90
aWxlR3JpZDsKKyAgICBSZXRhaW5QdHI8VGlsZUxheWVyPiBtX3RpbGVMYXllcjsKKyAgICBJbnRS
ZWN0IG1fcmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykKKyNlbmRpZiAvLyBUaWxlR3JpZFRpbGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkVGlsZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTYxODY3YTcxNzNiOGUyYzJj
MGZmNDlkZmYzZDUxNTI0ZGIzYmU2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUubW0KQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGlsZUdyaWQuaCIKKworI2lmIFBM
QVRGT1JNKElPUykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiVGlsZUNhY2hlLmgi
CisjaW5jbHVkZSAiVGlsZUdyaWRUaWxlLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyLmgiCisjaW5j
bHVkZSAiVGlsZUxheWVyUG9vbC5oIgorI2luY2x1ZGUgIldBS1dpbmRvdy5oIgorI2luY2x1ZGUg
PFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29y
ZVByaXZhdGUuaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgTE9HX1RJTElORworc3RhdGljIGludCB0b3Rh
bFRpbGVDb3VudDsKKyNlbmRpZgorCitUaWxlR3JpZFRpbGU6OlRpbGVHcmlkVGlsZShUaWxlR3Jp
ZCogdGlsZUdyaWQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQorICAgIDogbV90aWxlR3JpZCh0
aWxlR3JpZCkKKyAgICAsIG1fcmVjdCh0aWxlUmVjdCkKK3sKKyAgICBBU1NFUlQoIXRpbGVSZWN0
LmlzRW1wdHkoKSk7CisgICAgSW50U2l6ZSBwaXhlbFNpemUobV9yZWN0LnNpemUoKSk7CisgICAg
Y29uc3QgQ0dGbG9hdCBzY3JlZW5TY2FsZSA9IG1fdGlsZUdyaWQtPnRpbGVDYWNoZSgpLT5zY3Jl
ZW5TY2FsZSgpOworICAgIHBpeGVsU2l6ZS5zY2FsZShzY3JlZW5TY2FsZSk7CisgICAgbV90aWxl
TGF5ZXIgPSBUaWxlTGF5ZXJQb29sOjpzaGFyZWRQb29sKCktPnRha2VMYXllcldpdGhTaXplKHBp
eGVsU2l6ZSk7CisgICAgaWYgKCFtX3RpbGVMYXllcikgeworI2lmIExPR19USUxJTkcKKyAgICAg
ICAgTlNMb2coQCJ1bmFibGUgdG8gcmV1c2UgbGF5ZXIgd2l0aCBzaXplICVkIHggJWQsIGNyZWF0
aW5nIG9uZSIsIHBpeGVsU2l6ZS53aWR0aCgpLCBwaXhlbFNpemUuaGVpZ2h0KCkpOworI2VuZGlm
CisgICAgICAgIG1fdGlsZUxheWVyID0gYWRvcHROUyhbW1RpbGVMYXllciBhbGxvY10gaW5pdF0p
OworICAgIH0KKyAgICBUaWxlTGF5ZXIqIGxheWVyID0gbV90aWxlTGF5ZXIuZ2V0KCk7CisgICAg
W2xheWVyIHNldFRpbGVHcmlkOnRpbGVHcmlkXTsKKyAgICBbbGF5ZXIgc2V0T3BhcXVlOm1fdGls
ZUdyaWQtPnRpbGVDYWNoZSgpLT50aWxlc09wYXF1ZSgpXTsKKyAgICBbbGF5ZXIgc2V0RWRnZUFu
dGlhbGlhc2luZ01hc2s6MF07CisgICAgW2xheWVyIHNldE5lZWRzTGF5b3V0T25HZW9tZXRyeUNo
YW5nZTpOT107CisgICAgW2xheWVyIHNldENvbnRlbnRzU2NhbGU6c2NyZWVuU2NhbGVdOworICAg
IFtsYXllciBzZXRBY2NlbGVyYXRlc0RyYXdpbmc6bV90aWxlR3JpZC0+dGlsZUNhY2hlKCktPmFj
Y2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKV07CisKKyAgICAvLyBIb3N0IGxheWVyIG1heSBoYXZl
IG90aGVyIHN1YmxheWVycy4gS2VlcCB0aGUgdGlsZSBsYXllcnMgYXQgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgYXJyYXkKKyAgICAvLyBzbyB0aGV5IGFyZSBwYWludGVkIGJlaGluZCBldmVyeXRoaW5n
IGVsc2UuCisgICAgW3RpbGVHcmlkLT50aWxlSG9zdExheWVyKCkgaW5zZXJ0U3VibGF5ZXI6bGF5
ZXIgYXRJbmRleDp0aWxlR3JpZC0+dGlsZUNvdW50KCldOworICAgIFtsYXllciBzZXRGcmFtZTpt
X3JlY3RdOworICAgIGludmFsaWRhdGVSZWN0KG1fcmVjdCk7CisgICAgc2hvd0JvcmRlcihtX3Rp
bGVHcmlkLT50aWxlQ2FjaGUoKS0+dGlsZUJvcmRlcnNWaXNpYmxlKCkpOworCisjaWYgTE9HX1RJ
TElORworICAgICsrdG90YWxUaWxlQ291bnQ7CisgICAgTlNMb2coQCJuZXcgVGlsZSAoJWQsJWQp
ICVkICVkLCBjb3VudCAlZCIsIHRpbGVSZWN0LngoKSwgdGlsZVJlY3QueSgpLCB0aWxlUmVjdC53
aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwgdG90YWxUaWxlQ291bnQpOworI2VuZGlmCit9CisK
K1RpbGVHcmlkVGlsZTo6flRpbGVHcmlkVGlsZSgpIAoreworICAgIFt0aWxlTGF5ZXIoKSBzZXRU
aWxlR3JpZDowXTsKKyAgICBbdGlsZUxheWVyKCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAg
IFRpbGVMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRkTGF5ZXIodGlsZUxheWVyKCkpOworI2lm
IExPR19USUxJTkcKKyAgICAtLXRvdGFsVGlsZUNvdW50OworICAgIE5TTG9nKEAiZGVsZXRlIFRp
bGUgKCVkLCVkKSAlZCAlZCwgY291bnQgJWQiLCBtX3JlY3QueCgpLCBtX3JlY3QueSgpLCBtX3Jl
Y3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdodCgpLCB0b3RhbFRpbGVDb3VudCk7CisjZW5kaWYKK30K
Kwordm9pZCBUaWxlR3JpZFRpbGU6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHdpbmRv
d0RpcnR5UmVjdCkKK3sKKyAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGludGVyc2VjdGlvbih3aW5k
b3dEaXJ0eVJlY3QsIG1fcmVjdCk7CisgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBkaXJ0eVJlY3QubW92ZShJbnRQb2ludCgpIC0gbV9yZWN0LmxvY2F0
aW9uKCkpOworICAgIFt0aWxlTGF5ZXIoKSBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6ZGlydHlSZWN0
XTsKKworICAgIGlmIChtX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+dGlsZVBhaW50Q291bnRlcnNW
aXNpYmxlKCkpCisgICAgICAgIFt0aWxlTGF5ZXIoKSBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6Q0dS
ZWN0TWFrZSgwLCAwLCA0NiwgMjUpXTsKK30KKwordm9pZCBUaWxlR3JpZFRpbGU6OnNldFJlY3Qo
Y29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCit7CisgICAgaWYgKG1fcmVjdCA9PSB0aWxlUmVjdCkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fcmVjdCA9IHRpbGVSZWN0OworICAgIFRpbGVMYXllciog
bGF5ZXIgPSBtX3RpbGVMYXllci5nZXQoKTsKKyAgICBbbGF5ZXIgc2V0RnJhbWU6bV9yZWN0XTsK
KyAgICBbbGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKK30KKwordm9pZCBUaWxlR3JpZFRpbGU6OnNo
b3dCb3JkZXIoYm9vbCBmbGFnKQoreworICAgIFRpbGVMYXllciogbGF5ZXIgPSBtX3RpbGVMYXll
ci5nZXQoKTsKKyAgICBpZiAoZmxhZykgeworICAgICAgICBbbGF5ZXIgc2V0Qm9yZGVyQ29sb3I6
Y2FjaGVkQ0dDb2xvcihtX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+Y29sb3JGb3JHcmlkVGlsZUJv
cmRlcihtX3RpbGVHcmlkKSwgQ29sb3JTcGFjZURldmljZVJHQildOworICAgICAgICBbbGF5ZXIg
c2V0Qm9yZGVyV2lkdGg6MC41Zl07CisgICAgfSBlbHNlIHsKKyAgICAgICAgW2xheWVyIHNldEJv
cmRlckNvbG9yOm5pbF07CisgICAgICAgIFtsYXllciBzZXRCb3JkZXJXaWR0aDowXTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNGI4NTFk
YzhiNjUxN2E1MzY3MzVjNjNlNmVhOGM5YWUwZGNhZTBkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVMYXllci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFRpbGVMYXllcl9oCisjZGVmaW5lIFRpbGVMYXllcl9oCisKKyNp
ZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlIDxRdWFydHpDb3JlL0NBTGF5ZXIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGlsZUdyaWQ7Cit9OworCitAaW50ZXJmYWNlIFRpbGVM
YXllciA6IENBTGF5ZXIgeworICAgIFdlYkNvcmU6OlRpbGVHcmlkKiBfdGlsZUdyaWQ7CisgICAg
dW5zaWduZWQgX3BhaW50Q291bnQ7Cit9CitAcHJvcGVydHkgKG5vbmF0b21pYykgdW5zaWduZWQg
cGFpbnRDb3VudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBXZWJDb3JlOjpUaWxlR3JpZCogdGls
ZUdyaWQ7CisrIChUaWxlTGF5ZXIgKilsYXllckJlaW5nUGFpbnRlZDsKK0BlbmQKKworQGludGVy
ZmFjZSBUaWxlSG9zdExheWVyIDogQ0FMYXllciB7CisgICAgV2ViQ29yZTo6VGlsZUdyaWQqIF90
aWxlR3JpZDsKK30KKy0gKGlkKWluaXRXaXRoVGlsZUdyaWQ6KFdlYkNvcmU6OlRpbGVHcmlkKil0
aWxlR3JpZDsKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKyNlbmRpZiAvLyBUaWxl
TGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVMYXll
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzI4YmVjODVlN2U5ZmNjNjU1OWQ1NmYzNWI0OWMzYmMxMDUwYzY0NgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIubW0KQEAgLTAsMCAr
MSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGls
ZUxheWVyLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJUaWxlQ2FjaGUuaCIK
KyNpbmNsdWRlICJUaWxlR3JpZC5oIgorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKworQGlt
cGxlbWVudGF0aW9uIFRpbGVIb3N0TGF5ZXIKKy0gKGlkKWluaXRXaXRoVGlsZUdyaWQ6KFdlYkNv
cmU6OlRpbGVHcmlkKil0aWxlR3JpZAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAg
aWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIF90aWxlR3JpZCA9IHRpbGVHcmlk
OworICAgIFtzZWxmIHNldEFuY2hvclBvaW50OkNHUG9pbnRaZXJvXTsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAoaWQ8Q0FBY3Rpb24+KWFjdGlvbkZvcktleTooTlNTdHJpbmcgKilrZXkKK3sK
KyAgICBVTlVTRURfUEFSQU0oa2V5KTsKKyAgICAvLyBEaXNhYmxlIGFsbCBkZWZhdWx0IGFjdGlv
bnMKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKXJlbmRlckluQ29udGV4dDooQ0dDb250
ZXh0UmVmKWNvbnRleHQKK3sKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdl
YlRocmVhZExvY2soKTsKKyAgICBfdGlsZUdyaWQtPnRpbGVDYWNoZSgpLT5kb0xheW91dFRpbGVz
KCk7CisgICAgW3N1cGVyIHJlbmRlckluQ29udGV4dDpjb250ZXh0XTsKK30KK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFRpbGVMYXllcgorQHN5bnRoZXNpemUgcGFpbnRDb3VudCA9IF9wYWludENv
dW50OworQHN5bnRoZXNpemUgdGlsZUdyaWQgPSBfdGlsZUdyaWQ7CisKK3N0YXRpYyBUaWxlTGF5
ZXIgKmxheWVyQmVpbmdQYWludGVkOworCistICh2b2lkKXNldE5lZWRzRGlzcGxheUluUmVjdDoo
Q0dSZWN0KXJlY3QKK3sKKyAgICBbc2VsZiBzZXROZWVkc0xheW91dF07CisgICAgW3N1cGVyIHNl
dE5lZWRzRGlzcGxheUluUmVjdDpyZWN0XTsKK30KKworLSAodm9pZClsYXlvdXRTdWJsYXllcnMK
K3sKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRocmVhZExvY2soKTsK
KyAgICAvLyBUaGlzIG1heSB0cmlnZ2VyIFdlYktpdCBsYXlvdXQgYW5kIGdlbmVyYXRlIG1vcmUg
cmVwYWludCByZWN0cy4KKyAgICBpZiAoX3RpbGVHcmlkKQorICAgICAgICBfdGlsZUdyaWQtPnRp
bGVDYWNoZSgpLT5wcmVwYXJlVG9EcmF3KCk7Cit9CisKKy0gKHZvaWQpZHJhd0luQ29udGV4dDoo
Q0dDb250ZXh0UmVmKWNvbnRleHQKK3sKKyAgICBpZiAoX3RpbGVHcmlkKQorICAgICAgICBfdGls
ZUdyaWQtPnRpbGVDYWNoZSgpLT5kcmF3TGF5ZXIoc2VsZiwgY29udGV4dCk7Cit9CisKKy0gKGlk
PENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5Cit7CisgICAgVU5VU0VEX1BB
UkFNKGtleSk7CisgICAgLy8gRGlzYWJsZSBhbGwgZGVmYXVsdCBhY3Rpb25zCisgICAgcmV0dXJu
IG5pbDsKK30KKworKyAoVGlsZUxheWVyICopbGF5ZXJCZWluZ1BhaW50ZWQKK3sKKyAgICByZXR1
cm4gbGF5ZXJCZWluZ1BhaW50ZWQ7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXJQb29s
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNiMzFkN2I2NDRlNWVhYmM2MDQwOGUxMGFjNDIyMDMwZjI0YmMyYjIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5oCkBAIC0w
LDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRpbGVMYXllclBvb2xfaAorI2RlZmlu
ZSBUaWxlTGF5ZXJQb29sX2gKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkludFNp
emUuaCIKKyNpbmNsdWRlICJJbnRTaXplSGFzaC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK0BjbGFzcyBUaWxlTGF5ZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgVGlsZUxheWVyUG9vbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGlsZUxh
eWVyUG9vbCk7CitwdWJsaWM6CisgICAgc3RhdGljIFRpbGVMYXllclBvb2wqIHNoYXJlZFBvb2wo
KTsKKworICAgIHZvaWQgYWRkTGF5ZXIoY29uc3QgUmV0YWluUHRyPFRpbGVMYXllcj4mKTsKKyAg
ICBSZXRhaW5QdHI8VGlsZUxheWVyPiB0YWtlTGF5ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJik7
CisKKyAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGFsbCBxdWV1ZWQgbGF5ZXJzIGluIGJ5dGVz
LgorICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9jYXBhY2l0eTsgfQor
ICAgIHZvaWQgc2V0Q2FwYWNpdHkodW5zaWduZWQpOworICAgIHZvaWQgZHJhaW4oKTsKKworICAg
IHVuc2lnbmVkIGRlY2F5ZWRDYXBhY2l0eSgpIGNvbnN0OworCisgICAgc3RhdGljIHVuc2lnbmVk
IGJ5dGVzQmFja2luZ0xheWVyV2l0aFBpeGVsU2l6ZShjb25zdCBJbnRTaXplJik7CisKK3ByaXZh
dGU6CisgICAgVGlsZUxheWVyUG9vbCgpOworCisgICAgdHlwZWRlZiBEZXF1ZTxSZXRhaW5QdHI8
VGlsZUxheWVyPiA+IExheWVyTGlzdDsKKworICAgIGJvb2wgY2FuUmV1c2VMYXllcldpdGhTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWNpdHkgJiYgIXNpemUu
aXNFbXB0eSgpOyB9CisgICAgdm9pZCBzY2hlZHVsZVBydW5lKCk7CisgICAgdm9pZCBwcnVuZSgp
OworICAgIHR5cGVkZWYgZW51bSB7IExlYXZlVW5jaGFuZ2VkLCBNYXJrQXNVc2VkIH0gQWNjZXNz
VHlwZTsKKyAgICBMYXllckxpc3QmIGxpc3RPZkxheWVyc1dpdGhTaXplKGNvbnN0IEludFNpemUm
LCBBY2Nlc3NUeXBlID0gTGVhdmVVbmNoYW5nZWQpOworCisgICAgSGFzaE1hcDxJbnRTaXplLCBM
YXllckxpc3Q+IG1fcmV1c2VMaXN0czsKKyAgICAvLyBPcmRlcmVkIGJ5IHJlY2VudCB1c2UuIFRo
ZSBsYXN0IHNpemUgaXMgdGhlIG1vc3QgcmVjZW50bHkgdXNlZC4KKyAgICBWZWN0b3I8SW50U2l6
ZT4gbV9zaXplc0luUHJ1bmVPcmRlcjsKKyAgICB1bnNpZ25lZCBtX3RvdGFsQnl0ZXM7CisgICAg
dW5zaWduZWQgbV9jYXBhY2l0eTsKKyAgICBNdXRleCBtX2xheWVyUG9vbE11dGV4OworCisgICAg
ZG91YmxlIG1fbGFzdEFkZFRpbWU7CisgICAgYm9vbCBtX25lZWRzUHJ1bmU7CisKKyAgICBmcmll
bmQgTmV2ZXJEZXN0cm95ZWQ8VGlsZUxheWVyUG9vbD47Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisjZW5kaWYgLy8gVGlsZUxheWVyUG9v
bF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9v
bC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXJQb29sLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhlYzQ5MGM1Yzg5ODViODJiNDZjYjRlYjhiNTZhYTAyZjI2NzNjMTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5tbQpA
QCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUaWxlTGF5ZXJQb29sLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJM
b2dnaW5nLmgiCisjaW5jbHVkZSAiTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCisjaW5jbHVkZSAi
VGlsZUxheWVyLmgiCisjaW5jbHVkZSAiVGlsZUdyaWQuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgY29uc3QgZG91YmxlIGNhcGFjaXR5RGVjYXlUaW1lID0gNTsKKwor
VGlsZUxheWVyUG9vbDo6VGlsZUxheWVyUG9vbCgpCisgICAgOiBtX3RvdGFsQnl0ZXMoMCkKKyAg
ICAsIG1fY2FwYWNpdHkoMCkKKyAgICAsIG1fbGFzdEFkZFRpbWUoMCkKKyAgICAsIG1fbmVlZHNQ
cnVuZShmYWxzZSkKK3sKK30KKworVGlsZUxheWVyUG9vbCogVGlsZUxheWVyUG9vbDo6c2hhcmVk
UG9vbCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRpbGVMYXllclBvb2w+IHNoYXJl
ZFBvb2w7CisgICAgcmV0dXJuICZzaGFyZWRQb29sLmdldCgpOworfQorCit1bnNpZ25lZCBUaWxl
TGF5ZXJQb29sOjpieXRlc0JhY2tpbmdMYXllcldpdGhQaXhlbFNpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICByZXR1cm4gc2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7Cit9
CisKK1RpbGVMYXllclBvb2w6OkxheWVyTGlzdCYgVGlsZUxheWVyUG9vbDo6bGlzdE9mTGF5ZXJz
V2l0aFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQorewor
ICAgIEFTU0VSVCghbV9sYXllclBvb2xNdXRleC50cnlMb2NrKCkpOworICAgIEhhc2hNYXA8SW50
U2l6ZSwgTGF5ZXJMaXN0Pjo6aXRlcmF0b3IgaXQgPSBtX3JldXNlTGlzdHMuZmluZChzaXplKTsK
KyAgICBpZiAoaXQgPT0gbV9yZXVzZUxpc3RzLmVuZCgpKSB7CisgICAgICAgIGl0ID0gbV9yZXVz
ZUxpc3RzLmFkZChzaXplLCBMYXllckxpc3QoKSkuaXRlcmF0b3I7CisgICAgICAgIG1fc2l6ZXNJ
blBydW5lT3JkZXIuYXBwZW5kKHNpemUpOworICAgIH0gZWxzZSBpZiAoYWNjZXNzVHlwZSA9PSBN
YXJrQXNVc2VkKSB7CisgICAgICAgIG1fc2l6ZXNJblBydW5lT3JkZXIucmVtb3ZlKG1fc2l6ZXNJ
blBydW5lT3JkZXIucmV2ZXJzZUZpbmQoc2l6ZSkpOworICAgICAgICBtX3NpemVzSW5QcnVuZU9y
ZGVyLmFwcGVuZChzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKK30KKwordm9p
ZCBUaWxlTGF5ZXJQb29sOjphZGRMYXllcihjb25zdCBSZXRhaW5QdHI8VGlsZUxheWVyPiYgbGF5
ZXIpCit7CisgICAgSW50U2l6ZSBsYXllclNpemUoW2xheWVyLmdldCgpIGZyYW1lXS5zaXplKTsK
KyAgICBsYXllclNpemUuc2NhbGUoW2xheWVyLmdldCgpIGNvbnRlbnRzU2NhbGVdKTsKKyAgICBp
ZiAoIWNhblJldXNlTGF5ZXJXaXRoU2l6ZShsYXllclNpemUpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuaGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3Vy
ZSgpKSB7CisgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIlVuZGVyIG1lbW9yeSBwcmVzc3Vy
ZTogJXMsIHRvdGFsQnl0ZXM6ICVkIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgbV90b3RhbEJ5dGVz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xh
eWVyUG9vbE11dGV4KTsKKyAgICBsaXN0T2ZMYXllcnNXaXRoU2l6ZShsYXllclNpemUpLnByZXBl
bmQobGF5ZXIpOworICAgIG1fdG90YWxCeXRlcyArPSBieXRlc0JhY2tpbmdMYXllcldpdGhQaXhl
bFNpemUobGF5ZXJTaXplKTsKKworICAgIG1fbGFzdEFkZFRpbWUgPSBjdXJyZW50VGltZSgpOwor
ICAgIHNjaGVkdWxlUHJ1bmUoKTsKK30KKworUmV0YWluUHRyPFRpbGVMYXllcj4gVGlsZUxheWVy
UG9vbDo6dGFrZUxheWVyV2l0aFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAo
IWNhblJldXNlTGF5ZXJXaXRoU2l6ZShzaXplKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBN
dXRleExvY2tlciBsb2NrZXIobV9sYXllclBvb2xNdXRleCk7CisgICAgTGF5ZXJMaXN0JiByZXVz
ZUxpc3QgPSBsaXN0T2ZMYXllcnNXaXRoU2l6ZShzaXplLCBNYXJrQXNVc2VkKTsKKyAgICBpZiAo
cmV1c2VMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBtX3RvdGFsQnl0
ZXMgLT0gYnl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKHNpemUpOworICAgIHJldHVybiBy
ZXVzZUxpc3QudGFrZUZpcnN0KCk7Cit9CisKK3ZvaWQgVGlsZUxheWVyUG9vbDo6c2V0Q2FwYWNp
dHkodW5zaWduZWQgY2FwYWNpdHkpCit7CisgICAgTXV0ZXhMb2NrZXIgcmV1c2VMb2NrZXIobV9s
YXllclBvb2xNdXRleCk7CisgICAgaWYgKGNhcGFjaXR5IDwgbV9jYXBhY2l0eSkKKyAgICAgICAg
c2NoZWR1bGVQcnVuZSgpOworICAgIG1fY2FwYWNpdHkgPSBjYXBhY2l0eTsKK30KKyAgICAKK3Vu
c2lnbmVkIFRpbGVMYXllclBvb2w6OmRlY2F5ZWRDYXBhY2l0eSgpIGNvbnN0Cit7CisgICAgLy8g
RGVjYXkgdG8gb25lIHF1YXJ0ZXIgb3ZlciBjYXBhY2l0eURlY2F5VGltZQorICAgIGRvdWJsZSB0
aW1lU2luY2VMYXN0QWRkID0gY3VycmVudFRpbWUoKSAtIG1fbGFzdEFkZFRpbWU7CisgICAgaWYg
KHRpbWVTaW5jZUxhc3RBZGQgPiBjYXBhY2l0eURlY2F5VGltZSkKKyAgICAgICAgcmV0dXJuIG1f
Y2FwYWNpdHkgLyA0OworICAgIGZsb2F0IGRlY2F5UHJvZ2VzcyA9IGZsb2F0KHRpbWVTaW5jZUxh
c3RBZGQgLyBjYXBhY2l0eURlY2F5VGltZSk7CisgICAgcmV0dXJuIG1fY2FwYWNpdHkgLyA0ICsg
bV9jYXBhY2l0eSAqIDMgLyA0ICogKDEuZiAtIGRlY2F5UHJvZ2Vzcyk7Cit9CisKK3ZvaWQgVGls
ZUxheWVyUG9vbDo6c2NoZWR1bGVQcnVuZSgpCit7CisgICAgQVNTRVJUKCFtX2xheWVyUG9vbE11
dGV4LnRyeUxvY2soKSk7CisgICAgaWYgKG1fbmVlZHNQcnVuZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fbmVlZHNQcnVuZSA9IHRydWU7CisgICAgZGlzcGF0Y2hfdGltZV90IG5leHRQcnVuZVRp
bWUgPSBkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCAxICogTlNFQ19QRVJfU0VDKTsK
KyAgICBkaXNwYXRjaF9hZnRlcihuZXh0UHJ1bmVUaW1lLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1
ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeeworICAgICAgICBwcnVu
ZSgpOworICAgIH0pOworfQorCit2b2lkIFRpbGVMYXllclBvb2w6OnBydW5lKCkKK3sKKyAgICBN
dXRleExvY2tlciBsb2NrZXIobV9sYXllclBvb2xNdXRleCk7CisgICAgQVNTRVJUKG1fbmVlZHNQ
cnVuZSk7CisgICAgbV9uZWVkc1BydW5lID0gZmFsc2U7CisgICAgdW5zaWduZWQgc2hyaW5rVG8g
PSBkZWNheWVkQ2FwYWNpdHkoKTsKKyAgICB3aGlsZSAobV90b3RhbEJ5dGVzID4gc2hyaW5rVG8p
IHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemVzSW5QcnVuZU9yZGVyLmlzRW1wdHkoKSk7CisgICAg
ICAgIEludFNpemUgc2l6ZVRvRHJvcCA9IG1fc2l6ZXNJblBydW5lT3JkZXIuZmlyc3QoKTsKKyAg
ICAgICAgTGF5ZXJMaXN0JiBvbGRlc3RSZXVzZUxpc3QgPSBtX3JldXNlTGlzdHMuZmluZChzaXpl
VG9Ecm9wKS0+dmFsdWU7CisgICAgICAgIGlmIChvbGRlc3RSZXVzZUxpc3QuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBtX3JldXNlTGlzdHMucmVtb3ZlKHNpemVUb0Ryb3ApOworICAgICAgICAg
ICAgbV9zaXplc0luUHJ1bmVPcmRlci5yZW1vdmUoMCk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorI2lmIExPR19USUxJTkcKKyAgICAgICAgTlNMb2coQCJkcm9wcGluZyBsYXll
ciBvZiBzaXplICVkIHggJWQiLCBzaXplVG9Ecm9wLndpZHRoKCksIHNpemVUb0Ryb3AuaGVpZ2h0
KCkpOworI2VuZGlmCisgICAgICAgIG1fdG90YWxCeXRlcyAtPSBieXRlc0JhY2tpbmdMYXllcldp
dGhQaXhlbFNpemUoc2l6ZVRvRHJvcCk7CisgICAgICAgIC8vIFRoZSBsYXN0IGVsZW1lbnQgaW4g
dGhlIGxpc3QgaXMgdGhlIG9sZGVzdCwgaGVuY2UgbW9zdCBsaWtlbHkgbm90IHRvCisgICAgICAg
IC8vIHN0aWxsIGhhdmUgYSBiYWNraW5nIHN0b3JlLgorICAgICAgICBvbGRlc3RSZXVzZUxpc3Qu
cmVtb3ZlTGFzdCgpOworICAgIH0KKyAgICBpZiAoY3VycmVudFRpbWUoKSAtIG1fbGFzdEFkZFRp
bWUgPD0gY2FwYWNpdHlEZWNheVRpbWUpCisgICAgICAgIHNjaGVkdWxlUHJ1bmUoKTsKK30KKwor
dm9pZCBUaWxlTGF5ZXJQb29sOjpkcmFpbigpCit7CisgICAgTXV0ZXhMb2NrZXIgcmV1c2VMb2Nr
ZXIobV9sYXllclBvb2xNdXRleCk7CisgICAgbV9yZXVzZUxpc3RzLmNsZWFyKCk7CisgICAgbV9z
aXplc0luUHJ1bmVPcmRlci5jbGVhcigpOworICAgIG1fdG90YWxCeXRlcyA9IDA7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVNb3Rpb25NYW5hZ2VyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDk4YWRmMzM4OWUzMTYwMmRiODkzYWVmMzcxZmE2NmJkZmJmNzYzNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdl
ci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBXZWJDb3JlTW90aW9uTWFuYWdlcl9oCisjZGVmaW5lIFdlYkNv
cmVNb3Rpb25NYW5hZ2VyX2gKKworI2ltcG9ydCAiRGV2aWNlTW90aW9uQ2xpZW50SU9TLmgiCisj
aW1wb3J0ICJEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oIgorI2ltcG9ydCA8Q29yZUxvY2F0
aW9uL0NvcmVMb2NhdGlvbi5oPgorI2ltcG9ydCA8Q29yZU1vdGlvbi9Db3JlTW90aW9uLmg+Cisj
aW1wb3J0IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKworI2lmIFBMQVRGT1JNKElPUykKKworY29u
c3QgZmxvYXQga01vdGlvblVwZGF0ZUludGVydmFsID0gMC4wNWY7CisKK0BpbnRlcmZhY2UgV2Vi
Q29yZU1vdGlvbk1hbmFnZXIgOiBOU09iamVjdCB7CisgICAgQ01Nb3Rpb25NYW5hZ2VyKiBtX21v
dGlvbk1hbmFnZXI7CisgICAgQ0xMb2NhdGlvbk1hbmFnZXIqIG1fbG9jYXRpb25NYW5hZ2VyOwor
ICAgIEhhc2hTZXQ8V2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TKj4gbV9kZXZpY2VNb3Rp
b25DbGllbnRzOworICAgIEhhc2hTZXQ8V2ViQ29yZTo6RGV2aWNlT3JpZW50YXRpb25DbGllbnRJ
T1MqPiBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50czsKKyAgICBOU1RpbWVyKiBtX3VwZGF0ZVRp
bWVyOworICAgIEJPT0wgbV9neXJvQXZhaWxhYmxlOworICAgIEJPT0wgbV9oZWFkaW5nQXZhaWxh
YmxlOworfQorCisrIChXZWJDb3JlTW90aW9uTWFuYWdlciAqKXNoYXJlZE1hbmFnZXI7CistICh2
b2lkKWFkZE1vdGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TICopY2xp
ZW50OworLSAodm9pZClyZW1vdmVNb3Rpb25DbGllbnQ6KFdlYkNvcmU6OkRldmljZU1vdGlvbkNs
aWVudElPUyAqKWNsaWVudDsKKy0gKHZvaWQpYWRkT3JpZW50YXRpb25DbGllbnQ6KFdlYkNvcmU6
OkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TICopY2xpZW50OworLSAodm9pZClyZW1vdmVPcmll
bnRhdGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MgKiljbGll
bnQ7CistIChCT09MKWd5cm9BdmFpbGFibGU7CistIChCT09MKWhlYWRpbmdBdmFpbGFibGU7CitA
ZW5kCisKKyNlbmRpZgorCisjZW5kaWYgLy8gV2ViQ29yZU1vdGlvbk1hbmFnZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVNb3Rpb25NYW5hZ2VyLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFlNTg0MDZlMDA4MmFhYTYzMjRhMzdlOWM5Y2E0NTJmN2Y4ODg2OTYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZU1vdGlvbk1h
bmFnZXIubW0KQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJDb3JlTW90
aW9uTWFuYWdlci5oIgorCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCAiV2ViQ29y
ZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIKKyNpbXBvcnQgPENv
cmVMb2NhdGlvbi9Db3JlTG9jYXRpb24uaD4KKyNpbXBvcnQgPENvcmVNb3Rpb24vQ29yZU1vdGlv
bi5oPgorI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9NYXRoRXh0
cmFzLmg+CisjaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgorCisjaWYgUExBVEZPUk0oSU9TKQorCisvLyBHZXQgQ29yZUxvY2F0aW9uIGNsYXNzZXMK
K1NPRlRfTElOS19GUkFNRVdPUksoQ29yZUxvY2F0aW9uKQorCitTT0ZUX0xJTktfQ0xBU1MoQ29y
ZUxvY2F0aW9uLCBDTExvY2F0aW9uTWFuYWdlcikKK1NPRlRfTElOS19DTEFTUyhDb3JlTG9jYXRp
b24sIENMSGVhZGluZykKKworLy8gR2V0IENvcmVNb3Rpb24gY2xhc3NlcworU09GVF9MSU5LX0ZS
QU1FV09SSyhDb3JlTW90aW9uKQorCitTT0ZUX0xJTktfQ0xBU1MoQ29yZU1vdGlvbiwgQ01Nb3Rp
b25NYW5hZ2VyKQorU09GVF9MSU5LX0NMQVNTKENvcmVNb3Rpb24sIENNQWNjZWxlcm9tZXRlckRh
dGEpCitTT0ZUX0xJTktfQ0xBU1MoQ29yZU1vdGlvbiwgQ01EZXZpY2VNb3Rpb24pCisKK3N0YXRp
YyBjb25zdCBkb3VibGUga0dyYXZpdHkgPSA5LjgwNjY1OworCitAaW50ZXJmYWNlIFdlYkNvcmVN
b3Rpb25NYW5hZ2VyKFByaXZhdGUpCisKKy0gKHZvaWQpaW5pdGlhbGl6ZU9uTWFpblRocmVhZDsK
Ky0gKHZvaWQpY2hlY2tDbGllbnRTdGF0dXM7CistICh2b2lkKXVwZGF0ZTsKKy0gKHZvaWQpc2Vu
ZEFjY2VsZXJvbWV0ZXJEYXRhOihDTUFjY2VsZXJvbWV0ZXJEYXRhICopbmV3QWNjZWxlcmF0aW9u
OworLSAodm9pZClzZW5kTW90aW9uRGF0YTooQ01EZXZpY2VNb3Rpb24gKiluZXdNb3Rpb24gd2l0
aEhlYWRpbmc6KENMSGVhZGluZyAqKW5ld0hlYWRpbmc7CisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFdlYkNvcmVNb3Rpb25NYW5hZ2VyCisKKysgKFdlYkNvcmVNb3Rpb25NYW5hZ2VyICopc2hh
cmVkTWFuYWdlcgoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPFdlYkNvcmVN
b3Rpb25NYW5hZ2VyPiwgc2hhcmVkTW90aW9uTWFuYWdlciwgKFtbV2ViQ29yZU1vdGlvbk1hbmFn
ZXIgYWxsb2NdIGluaXRdKSk7CisgICAgcmV0dXJuIHNoYXJlZE1vdGlvbk1hbmFnZXIuZ2V0KCk7
Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmIChz
ZWxmKQorICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9y
KGluaXRpYWxpemVPbk1haW5UaHJlYWQpIHdpdGhPYmplY3Q6bmlsIHdhaXRVbnRpbERvbmU6Tk9d
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBpZiAoV2Vi
Q29yZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW1dlYkNvcmVNb3Rpb25NYW5h
Z2VyIGNsYXNzXSwgc2VsZikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghbV91cGRh
dGVUaW1lcik7CisKKyAgICBpZiAobV9oZWFkaW5nQXZhaWxhYmxlKQorICAgICAgICBbbV9sb2Nh
dGlvbk1hbmFnZXIgc3RvcFVwZGF0aW5nSGVhZGluZ107CisgICAgW21fbG9jYXRpb25NYW5hZ2Vy
IHJlbGVhc2VdOworCisgICAgaWYgKG1fZ3lyb0F2YWlsYWJsZSkKKyAgICAgICAgW21fbW90aW9u
TWFuYWdlciBzdG9wRGV2aWNlTW90aW9uVXBkYXRlc107CisgICAgZWxzZQorICAgICAgICBbbV9t
b3Rpb25NYW5hZ2VyIHN0b3BBY2NlbGVyb21ldGVyVXBkYXRlc107CisgICAgW21fbW90aW9uTWFu
YWdlciByZWxlYXNlXTsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClhZGRN
b3Rpb25DbGllbnQ6KFdlYkNvcmU6OkRldmljZU1vdGlvbkNsaWVudElPUyAqKWNsaWVudAorewor
ICAgIG1fZGV2aWNlTW90aW9uQ2xpZW50cy5hZGQoY2xpZW50KTsKKyAgICBbc2VsZiBjaGVja0Ns
aWVudFN0YXR1c107Cit9CisKKy0gKHZvaWQpcmVtb3ZlTW90aW9uQ2xpZW50OihXZWJDb3JlOjpE
ZXZpY2VNb3Rpb25DbGllbnRJT1MgKiljbGllbnQKK3sKKyAgICBtX2RldmljZU1vdGlvbkNsaWVu
dHMucmVtb3ZlKGNsaWVudCk7CisgICAgW3NlbGYgY2hlY2tDbGllbnRTdGF0dXNdOworfQorCist
ICh2b2lkKWFkZE9yaWVudGF0aW9uQ2xpZW50OihXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbkNs
aWVudElPUyAqKWNsaWVudAoreworICAgIG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzLmFkZChj
bGllbnQpOworICAgIFtzZWxmIGNoZWNrQ2xpZW50U3RhdHVzXTsKK30KKworLSAodm9pZClyZW1v
dmVPcmllbnRhdGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1Mg
KiljbGllbnQKK3sKKyAgICBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50cy5yZW1vdmUoY2xpZW50
KTsKKyAgICBbc2VsZiBjaGVja0NsaWVudFN0YXR1c107Cit9CisKKy0gKEJPT0wpZ3lyb0F2YWls
YWJsZQoreworICAgIHJldHVybiBtX2d5cm9BdmFpbGFibGU7Cit9CisKKy0gKEJPT0wpaGVhZGlu
Z0F2YWlsYWJsZQoreworICAgIHJldHVybiBtX2hlYWRpbmdBdmFpbGFibGU7Cit9CisKKy0gKHZv
aWQpaW5pdGlhbGl6ZU9uTWFpblRocmVhZAoreworICAgIEFTU0VSVCghV2ViVGhyZWFkSXNDdXJy
ZW50KCkpOworCisjZGVmaW5lIENNTW90aW9uTWFuYWdlciBnZXRDTU1vdGlvbk1hbmFnZXJDbGFz
cygpCisgICAgbV9tb3Rpb25NYW5hZ2VyID0gW1tDTU1vdGlvbk1hbmFnZXIgYWxsb2NdIGluaXRd
OworI3VuZGVmIENNTW90aW9uTWFuYWdlcgorCisgICAgbV9neXJvQXZhaWxhYmxlID0gbV9tb3Rp
b25NYW5hZ2VyLmRldmljZU1vdGlvbkF2YWlsYWJsZTsKKworICAgIGlmIChtX2d5cm9BdmFpbGFi
bGUpCisgICAgICAgIG1fbW90aW9uTWFuYWdlci5kZXZpY2VNb3Rpb25VcGRhdGVJbnRlcnZhbCA9
IGtNb3Rpb25VcGRhdGVJbnRlcnZhbDsKKyAgICBlbHNlCisgICAgICAgIG1fbW90aW9uTWFuYWdl
ci5hY2NlbGVyb21ldGVyVXBkYXRlSW50ZXJ2YWwgPSBrTW90aW9uVXBkYXRlSW50ZXJ2YWw7CisK
KyNkZWZpbmUgQ0xMb2NhdGlvbk1hbmFnZXIgZ2V0Q0xMb2NhdGlvbk1hbmFnZXJDbGFzcygpCisg
ICAgbV9sb2NhdGlvbk1hbmFnZXIgPSBbW0NMTG9jYXRpb25NYW5hZ2VyIGFsbG9jXSBpbml0XTsK
KyAgICBtX2hlYWRpbmdBdmFpbGFibGUgPSBbQ0xMb2NhdGlvbk1hbmFnZXIgaGVhZGluZ0F2YWls
YWJsZV07CisjdW5kZWYgQ0xMb2NhdGlvbk1hbmFnZXIKKworICAgIFtzZWxmIGNoZWNrQ2xpZW50
U3RhdHVzXTsKK30KKworLSAodm9pZCljaGVja0NsaWVudFN0YXR1cworeworICAgIGlmICghcHRo
cmVhZF9tYWluX25wKCkpIHsKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhy
ZWFkOl9jbWQgd2l0aE9iamVjdDpuaWwgd2FpdFVudGlsRG9uZTpOT107CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBTaW5jZSB0aGlzIG1ldGhvZCBleGVjdXRlcyBvbiB0aGUgbWFp
biB0aHJlYWQsIGl0IHNob3VsZCBhbHdheXMgYmUgY2FsbGVkCisgICAgLy8gYWZ0ZXIgdGhlIGlu
aXRpYWxpemVPbk1haW5UaHJlYWQgbWV0aG9kIGhhcyBydW4sIGFuZCBoZW5jZSB0aGVyZSBzaG91
bGQKKyAgICAvLyBiZSBubyBjaGFuY2UgdGhhdCBtX21vdGlvbk1hbmFnZXIgaGFzIG5vdCBiZWVu
IGNyZWF0ZWQuCisgICAgQVNTRVJUKG1fbW90aW9uTWFuYWdlcik7CisKKyAgICBpZiAobV9kZXZp
Y2VNb3Rpb25DbGllbnRzLnNpemUoKSB8fCBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50cy5zaXpl
KCkpIHsKKyAgICAgICAgaWYgKG1fZ3lyb0F2YWlsYWJsZSkKKyAgICAgICAgICAgIFttX21vdGlv
bk1hbmFnZXIgc3RhcnREZXZpY2VNb3Rpb25VcGRhdGVzXTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgW21fbW90aW9uTWFuYWdlciBzdGFydEFjY2VsZXJvbWV0ZXJVcGRhdGVzXTsKKworICAg
ICAgICBpZiAobV9oZWFkaW5nQXZhaWxhYmxlKQorICAgICAgICAgICAgW21fbG9jYXRpb25NYW5h
Z2VyIHN0YXJ0VXBkYXRpbmdIZWFkaW5nXTsKKworICAgICAgICBpZiAoIW1fdXBkYXRlVGltZXIp
IHsKKyAgICAgICAgICAgIG1fdXBkYXRlVGltZXIgPSBbW05TVGltZXIgc2NoZWR1bGVkVGltZXJX
aXRoVGltZUludGVydmFsOmtNb3Rpb25VcGRhdGVJbnRlcnZhbAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6c2VsZgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0b3I6QHNlbGVjdG9yKHVwZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVh
dHM6WUVTXSByZXRhaW5dOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgTlNUaW1l
ciAqdGltZXIgPSBtX3VwZGF0ZVRpbWVyOworICAgICAgICBtX3VwZGF0ZVRpbWVyID0gbmlsOwor
ICAgICAgICBbdGltZXIgaW52YWxpZGF0ZV07CisgICAgICAgIFt0aW1lciByZWxlYXNlXTsKKwor
ICAgICAgICBpZiAobV9neXJvQXZhaWxhYmxlKQorICAgICAgICAgICAgW21fbW90aW9uTWFuYWdl
ciBzdG9wRGV2aWNlTW90aW9uVXBkYXRlc107CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtt
X21vdGlvbk1hbmFnZXIgc3RvcEFjY2VsZXJvbWV0ZXJVcGRhdGVzXTsKKworICAgICAgICBpZiAo
bV9oZWFkaW5nQXZhaWxhYmxlKQorICAgICAgICAgICAgW21fbG9jYXRpb25NYW5hZ2VyIHN0b3BV
cGRhdGluZ0hlYWRpbmddOworICAgIH0KK30KKworLSAodm9pZCl1cGRhdGUKK3sKKyAgICAvLyBJ
dCdzIGV4dHJlbWVseSB1bmxpa2VseSB0aGF0IGFuIHVwZGF0ZSBoYXBwZW5zIHdpdGhvdXQgYW4g
YWN0aXZlCisgICAgLy8gbW90aW9uIG9yIGxvY2F0aW9uIG1hbmFnZXIsIGJ1dCB3ZSBzaG91bGQg
Z3VhcmQgZm9yIHRoaXMgY2FzZSBqdXN0IGluIGNhc2UuCisgICAgaWYgKCFtX21vdGlvbk1hbmFn
ZXIgfHwgIW1fbG9jYXRpb25NYW5hZ2VyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8g
V2Ugc2hvdWxkLCBob3dldmVyLCBndWFyZCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIG1hbmFnZXJz
IHJldHVybiBuaWwgZGF0YS4KKyAgICBDTURldmljZU1vdGlvbiAqZGV2aWNlTW90aW9uID0gbV9t
b3Rpb25NYW5hZ2VyLmRldmljZU1vdGlvbjsKKyAgICBpZiAobV9neXJvQXZhaWxhYmxlICYmIGRl
dmljZU1vdGlvbikKKyAgICAgICAgW3NlbGYgc2VuZE1vdGlvbkRhdGE6ZGV2aWNlTW90aW9uIHdp
dGhIZWFkaW5nOm1fbG9jYXRpb25NYW5hZ2VyLmhlYWRpbmddOworICAgIGVsc2UgeworICAgICAg
ICBpZiAoQ01BY2NlbGVyb21ldGVyRGF0YSAqYWNjZWxlcm9tZXRlckRhdGEgPSBtX21vdGlvbk1h
bmFnZXIuYWNjZWxlcm9tZXRlckRhdGEpCisgICAgICAgICAgICBbc2VsZiBzZW5kQWNjZWxlcm9t
ZXRlckRhdGE6YWNjZWxlcm9tZXRlckRhdGFdOworICAgIH0KK30KKworLSAodm9pZClzZW5kQWNj
ZWxlcm9tZXRlckRhdGE6KENNQWNjZWxlcm9tZXRlckRhdGEgKiluZXdBY2NlbGVyYXRpb24KK3sK
KyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgQ01BY2NlbGVyYXRpb24gYWNjZWwgPSBuZXdB
Y2NlbGVyYXRpb24uYWNjZWxlcmF0aW9uOworCisgICAgICAgIFZlY3RvcjxXZWJDb3JlOjpEZXZp
Y2VNb3Rpb25DbGllbnRJT1MqPiBjbGllbnRzOworICAgICAgICBjb3B5VG9WZWN0b3IobV9kZXZp
Y2VNb3Rpb25DbGllbnRzLCBjbGllbnRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjbGllbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY2xpZW50c1tpXS0+bW90aW9uQ2hh
bmdlZCgwLCAwLCAwLCBhY2NlbC54ICoga0dyYXZpdHksIGFjY2VsLnkgKiBrR3Jhdml0eSwgYWNj
ZWwueiAqIGtHcmF2aXR5LCAwLCAwLCAwKTsKKyAgICB9KTsKK30KKworLSAodm9pZClzZW5kTW90
aW9uRGF0YTooQ01EZXZpY2VNb3Rpb24gKiluZXdNb3Rpb24gd2l0aEhlYWRpbmc6KENMSGVhZGlu
ZyAqKW5ld0hlYWRpbmcKK3sKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgLy8gQWNjZWxl
cmF0aW9uIGlzIHVzZXIgKyBncmF2aXR5CisgICAgICAgIENNQWNjZWxlcmF0aW9uIHVzZXJBY2Nl
bCA9IG5ld01vdGlvbi51c2VyQWNjZWxlcmF0aW9uOworICAgICAgICBDTUFjY2VsZXJhdGlvbiBn
cmF2aXR5ID0gbmV3TW90aW9uLmdyYXZpdHk7CisgICAgICAgIENNQWNjZWxlcmF0aW9uIHRvdGFs
QWNjZWw7CisgICAgICAgIHRvdGFsQWNjZWwueCA9IHVzZXJBY2NlbC54ICsgZ3Jhdml0eS54Owor
ICAgICAgICB0b3RhbEFjY2VsLnkgPSB1c2VyQWNjZWwueSArIGdyYXZpdHkueTsKKyAgICAgICAg
dG90YWxBY2NlbC56ID0gdXNlckFjY2VsLnogKyBncmF2aXR5Lno7CisKKyAgICAgICAgQ01Sb3Rh
dGlvblJhdGUgcm90YXRpb25SYXRlID0gbmV3TW90aW9uLnJvdGF0aW9uUmF0ZTsKKworICAgICAg
ICBWZWN0b3I8V2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TKj4gbW90aW9uQ2xpZW50czsK
KyAgICAgICAgY29weVRvVmVjdG9yKG1fZGV2aWNlTW90aW9uQ2xpZW50cywgbW90aW9uQ2xpZW50
cyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbW90aW9uQ2xpZW50cy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgbW90aW9uQ2xpZW50c1tpXS0+bW90aW9uQ2hhbmdlZCh1c2Vy
QWNjZWwueCAqIGtHcmF2aXR5LCB1c2VyQWNjZWwueSAqIGtHcmF2aXR5LCB1c2VyQWNjZWwueiAq
IGtHcmF2aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b3RhbEFjY2VsLnggKiBrR3Jhdml0eSwgdG90YWxBY2NlbC55ICoga0dyYXZpdHksIHRvdGFsQWNj
ZWwueiAqIGtHcmF2aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByYWQyZGVnKHJvdGF0aW9uUmF0ZS54KSwgcmFkMmRlZyhyb3RhdGlvblJhdGUueSksIHJh
ZDJkZWcocm90YXRpb25SYXRlLnopKTsKKyAgICAgICAgfQorCisgICAgICAgIENNQXR0aXR1ZGUq
IGF0dGl0dWRlID0gbmV3TW90aW9uLmF0dGl0dWRlOworCisgICAgICAgIFZlY3RvcjxXZWJDb3Jl
OjpEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUyo+IG9yaWVudGF0aW9uQ2xpZW50czsKKyAgICAg
ICAgY29weVRvVmVjdG9yKG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzLCBvcmllbnRhdGlvbkNs
aWVudHMpOworCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgVzNDIERldmljZU9yaWVudGF0aW9u
IHNwZWNpZmljYXRpb24gbGFiZWxzIHRoZSBYIGF4aXMKKyAgICAgICAgLy8gYXMgcGFzc2luZyBi
ZXR3ZWVuIHRoZSBzaWRlcyBvZiB0aGUgZGV2aWNlLCBhbmQgdGhlIFkgYXhpcyBhcyBwYXNzaW5n
CisgICAgICAgIC8vIGZyb20gdG9wIHRvIGJvdHRvbSBvZiB0aGUgZGV2aWNlLiBDb252ZW50aW9u
YWwgVGFpdC1CcnlhbiBFdWxlciBhbmdsZXMKKyAgICAgICAgLy8gaGF2ZSB0aGUgWCBheGlzIHBv
aW50aW5nIGZvcndhcmQgKHRoZSBoZWFkaW5nIG9mIHRoZSBhaXJjcmFmdCwgZm9yCisgICAgICAg
IC8vIGV4YW1wbGUpLCB3aGljaCBpcyB3aGF0IHlvdSB3b3VsZCAicm9sbCIgYXJvdW5kLCBhbmQg
d2hhdCB0aGUgVzNDIHNheXMKKyAgICAgICAgLy8gaXMgdGhlIFkgYXhpcy4gVW5mb3J0dW5hdGVs
eSBDb3JlTW90aW9uIGRvZXNuJ3Qgbm9ybWFsaXplIGluIHRoZQorICAgICAgICAvLyBzYW1lIG9y
ZGVyIGFzIHRoZSBXM0MgcmVxdWVzdHMsIHNvIG91ciBiZXRhIGlzIFstOTAsIDkwXSBhbmQgZ2Ft
bWEgaXMKKyAgICAgICAgLy8gWy0xODAsIDE4MF0uIEZvciBtb3N0IHByYWN0aWNhbCB1c2VzIHRo
aXMgaXMgYWNjZXB0YWJsZS4KKyAgICAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS85NDE0NDU5
PiBOb3JtYWxpemUgb3VyIERldmljZU9yaWVudGF0aW9uIGJldGEvZ2FtbWEgcGVyIHNwZWMKKwor
ICAgICAgICAvLyBSb3RhdGlvbiBhcm91bmQgdGhlIFogYXhpcyAocG9pbnRpbmcgdXAsIG5vcm1h
bGl6ZWQgdG8gWzAsIDM2MF0gZGVnKS4KKyAgICAgICAgZG91YmxlIGFscGhhID0gcmFkMmRlZyhh
dHRpdHVkZS55YXcgPiAwID8gYXR0aXR1ZGUueWF3IDogKE1fUEkgKiAyICsgYXR0aXR1ZGUueWF3
KSk7CisgICAgICAgIC8vIFJvdGF0aW9uIGFyb3VuZCB0aGUgWCBheGlzIChzaWRlIHRvIHNpZGUp
LgorICAgICAgICBkb3VibGUgYmV0YSA9IHJhZDJkZWcoYXR0aXR1ZGUucGl0Y2gpOworICAgICAg
ICAvLyBSb3RhdGlvbiBhcm91bmQgdGhlIFkgYXhpcyAodG9wIHRvIGJvdHRvbSkuCisgICAgICAg
IGRvdWJsZSBnYW1tYSA9IHJhZDJkZWcoYXR0aXR1ZGUucm9sbCk7CisKKyAgICAgICAgZG91Ymxl
IGhlYWRpbmcgPSAobV9oZWFkaW5nQXZhaWxhYmxlICYmIG5ld0hlYWRpbmcpID8gbmV3SGVhZGlu
Zy5tYWduZXRpY0hlYWRpbmcgOiAwOworICAgICAgICBkb3VibGUgaGVhZGluZ0FjY3VyYWN5ID0g
KG1faGVhZGluZ0F2YWlsYWJsZSAmJiBuZXdIZWFkaW5nKSA/IG5ld0hlYWRpbmcuaGVhZGluZ0Fj
Y3VyYWN5IDogLTE7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcmllbnRhdGlv
bkNsaWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvcmllbnRhdGlvbkNsaWVudHNbaV0t
Pm9yaWVudGF0aW9uQ2hhbmdlZChhbHBoYSwgYmV0YSwgZ2FtbWEsIGhlYWRpbmcsIGhlYWRpbmdB
Y2N1cmFjeSk7CisgICAgfSk7Cit9CisKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44OGFkNTVmNjVhOTA4ZDQwNmExOWM5NzYxYzI1YmNhYjEzNzFkNDQxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRl
cmZhY2VJT1MuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdlYkNvcmVTeXN0ZW1J
bnRlcmZhY2VJT1NfaAorI2RlZmluZSBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TX2gKKworI2lu
Y2x1ZGUgPEF2YWlsYWJpbGl0eS5oPgorCit0eXBlZGVmIGVudW0geworICAgIHdrSU9TU3lzdGVt
VmVyc2lvbl8zXzAgPSBfX0lQSE9ORV8zXzAsCisgICAgd2tJT1NTeXN0ZW1WZXJzaW9uXzRfMiA9
IF9fSVBIT05FXzRfMiwKKyAgICB3a0lPU1N5c3RlbVZlcnNpb25fNV8wID0gX19JUEhPTkVfNV8w
LAorICAgIHdrSU9TU3lzdGVtVmVyc2lvbl82XzAgPSBfX0lQSE9ORV82XzAsCit9IHdrSU9TU3lz
dGVtVmVyc2lvbjsKKworYm9vbCBpb3NFeGVjdXRhYmxlV2FzTGlua2VkT25PckFmdGVyVmVyc2lv
bih3a0lPU1N5c3RlbVZlcnNpb24pOworCitleHRlcm4gYm9vbCAoKndrRXhlY3V0YWJsZVdhc0xp
bmtlZE9uT3JBZnRlcklPU1ZlcnNpb24pKGludCk7CisKK2V4dGVybiBib29sICgqd2tJc0dCMTgw
MzBDb21wbGlhbmNlUmVxdWlyZWQpKHZvaWQpOworCitpbmxpbmUgYm9vbCBpb3NFeGVjdXRhYmxl
V2FzTGlua2VkT25PckFmdGVyVmVyc2lvbih3a0lPU1N5c3RlbVZlcnNpb24gdmVyc2lvbikKK3sK
KyAgICByZXR1cm4gd2tFeGVjdXRhYmxlV2FzTGlua2VkT25PckFmdGVySU9TVmVyc2lvbih2ZXJz
aW9uKTsKK30KKwordHlwZWRlZiBlbnVtIHsKKyAgICB3a0RldmljZUNsYXNzSW52YWxpZCA9IC0x
LAorICAgIHdrRGV2aWNlQ2xhc3NpUGFkLAorICAgIHdrRGV2aWNlQ2xhc3NpUGhvbmUsCisgICAg
d2tEZXZpY2VDbGFzc2lQb2QsCit9IHdrRGV2aWNlQ2xhc3M7CitleHRlcm4gaW50ICgqd2tHZXRE
ZXZpY2VDbGFzcykodm9pZCk7CitpbmxpbmUgd2tEZXZpY2VDbGFzcyBpb3NEZXZpY2VDbGFzcyh2
b2lkKQoreworICAgIGludCBkZXZpY2VDbGFzcyA9IHdrR2V0RGV2aWNlQ2xhc3MoKTsKKyAgICBz
d2l0Y2ggKGRldmljZUNsYXNzKSB7CisgICAgY2FzZSB3a0RldmljZUNsYXNzSW52YWxpZDoKKyAg
ICBjYXNlIHdrRGV2aWNlQ2xhc3NpUGFkOgorICAgIGNhc2Ugd2tEZXZpY2VDbGFzc2lQaG9uZToK
KyAgICBjYXNlIHdrRGV2aWNlQ2xhc3NpUG9kOgorICAgICAgICByZXR1cm4gKHdrRGV2aWNlQ2xh
c3MpZGV2aWNlQ2xhc3M7CisgICAgfQorICAgIGFzc2VydChmYWxzZSk7CisgICAgcmV0dXJuIHdr
RGV2aWNlQ2xhc3NJbnZhbGlkOworfQorCitleHRlcm4gQ0ZTdHJpbmdSZWYgKCp3a0dldFVzZXJB
Z2VudCkodm9pZCk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgKCp3a0dldFBsYXRmb3JtTmFtZUZvck5h
dmlnYXRvcikodm9pZCk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgKCp3a0dldFZlbmRvck5hbWVGb3JO
YXZpZ2F0b3IpKHZvaWQpOworCisjZW5kaWYgLy8gV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPU19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlU3lzdGVt
SW50ZXJmYWNlSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiNzY0YTVlNDNkZmE5ZjE3ZTMyYTk0ZjdiMTBk
NDUwODQ4NzAwNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5tbQpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAq
IENvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgorCit2b2lkICgqd2tDQUxheWVyRW51bWVyYXRlUmVjdHNCZWlu
Z0RyYXduV2l0aEJsb2NrKShDQUxheWVyICosIENHQ29udGV4dFJlZiBjb250ZXh0LCB2b2lkIChe
YmxvY2spKENHUmVjdCByZWN0KSk7CitCT09MICgqd2tDR0NvbnRleHRHZXRTaG91bGRTbW9vdGhG
b250cykoQ0dDb250ZXh0UmVmKTsKK0NHUGF0dGVyblJlZiAoKndrQ0dQYXR0ZXJuQ3JlYXRlV2l0
aEltYWdlQW5kVHJhbnNmb3JtKShDR0ltYWdlUmVmLCBDR0FmZmluZVRyYW5zZm9ybSwgaW50KTsK
K3ZvaWQgKCp3a0NHQ29udGV4dFJlc2V0Q2xpcCkoQ0dDb250ZXh0UmVmKTsgCitDRlN0cmluZ1Jl
ZiAoKndrQ29weUNGTG9jYWxpemF0aW9uUHJlZmVycmVkTmFtZSkoQ0ZTdHJpbmdSZWYpOwordm9p
ZCAoKndrQ2xlYXJHbHlwaFZlY3Rvcikodm9pZCogZ2x5cGhzKTsKK09TU3RhdHVzICgqd2tDb252
ZXJ0Q2hhclRvR2x5cGhzKSh2b2lkKiBzdHlsZUdyb3VwLCBjb25zdCBVbmlDaGFyKiwgdW5zaWdu
ZWQgbnVtQ2hhcmFjdGVycywgdm9pZCogZ2x5cGhzKTsKK05TU3RyaW5nKiAoKndrR2V0TUlNRVR5
cGVGb3JFeHRlbnNpb24pKE5TU3RyaW5nKik7CitOU0RhdGUgKigqd2tHZXROU1VSTFJlc3BvbnNl
TGFzdE1vZGlmaWVkRGF0ZSkoTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UpOwordm9pZCAoKndrU2V0
QmFzZUNUTSkoQ0dDb250ZXh0UmVmLCBDR0FmZmluZVRyYW5zZm9ybSk7Cit2b2lkICgqd2tTZXRQ
YXR0ZXJuUGhhc2VJblVzZXJTcGFjZSkoQ0dDb250ZXh0UmVmLCBDR1BvaW50IHBvaW50KTsKK0NH
QWZmaW5lVHJhbnNmb3JtICgqd2tHZXRVc2VyVG9CYXNlQ1RNKShDR0NvbnRleHRSZWYpOworYm9v
bCAoKndrQ0dDb250ZXh0SXNQREZDb250ZXh0KShDR0NvbnRleHRSZWYpOwordm9pZCAoKndrU2V0
VXBGb250Q2FjaGUpKCk7Cit2b2lkICgqd2tTaWduYWxDRlJlYWRTdHJlYW1FbmQpKENGUmVhZFN0
cmVhbVJlZiBzdHJlYW0pOwordm9pZCAoKndrU2lnbmFsQ0ZSZWFkU3RyZWFtSGFzQnl0ZXMpKENG
UmVhZFN0cmVhbVJlZiBzdHJlYW0pOwordm9pZCAoKndrU2lnbmFsQ0ZSZWFkU3RyZWFtRXJyb3Ip
KENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIENGU3RyZWFtRXJyb3IgKmVycm9yKTsKK0NGUmVhZFN0
cmVhbVJlZiAoKndrQ3JlYXRlQ3VzdG9tQ0ZSZWFkU3RyZWFtKSh2b2lkICooKmZvcm1DcmVhdGUp
KENGUmVhZFN0cmVhbVJlZiwgdm9pZCAqKSwgCisgICAgdm9pZCAoKmZvcm1GaW5hbGl6ZSkoQ0ZS
ZWFkU3RyZWFtUmVmLCB2b2lkICopLCAKKyAgICBCb29sZWFuICgqZm9ybU9wZW4pKENGUmVhZFN0
cmVhbVJlZiwgQ0ZTdHJlYW1FcnJvciAqLCBCb29sZWFuICosIHZvaWQgKiksIAorICAgIENGSW5k
ZXggKCpmb3JtUmVhZCkoQ0ZSZWFkU3RyZWFtUmVmLCBVSW50OCAqLCBDRkluZGV4LCBDRlN0cmVh
bUVycm9yICosIEJvb2xlYW4gKiwgdm9pZCAqKSwgCisgICAgQm9vbGVhbiAoKmZvcm1DYW5SZWFk
KShDRlJlYWRTdHJlYW1SZWYsIHZvaWQgKiksIAorICAgIHZvaWQgKCpmb3JtQ2xvc2UpKENGUmVh
ZFN0cmVhbVJlZiwgdm9pZCAqKSwgCisgICAgdm9pZCAoKmZvcm1TY2hlZHVsZSkoQ0ZSZWFkU3Ry
ZWFtUmVmLCBDRlJ1bkxvb3BSZWYsIENGU3RyaW5nUmVmLCB2b2lkICopLCAKKyAgICB2b2lkICgq
Zm9ybVVuc2NoZWR1bGUpKENGUmVhZFN0cmVhbVJlZiwgQ0ZSdW5Mb29wUmVmLCBDRlN0cmluZ1Jl
Ziwgdm9pZCAqKSwKKyAgICB2b2lkICpjb250ZXh0KTsKK05TU3RyaW5nKiAoKndrQ29weU5TVVJM
UmVzcG9uc2VTdGF0dXNMaW5lKShOU1VSTFJlc3BvbnNlKik7Cit2b2lkICgqd2tTZXROU1VSTENv
bm5lY3Rpb25EZWZlcnNDYWxsYmFja3MpKE5TVVJMQ29ubmVjdGlvbiAqLCBCT09MKTsKK3ZvaWQg
KCp3a1NldE5TVVJMUmVxdWVzdFNob3VsZENvbnRlbnRTbmlmZikoTlNNdXRhYmxlVVJMUmVxdWVz
dCAqLCBCT09MKTsKK2lkICgqd2tDcmVhdGVOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZVByb3h5KSh2
b2lkKTsKK3Vuc2lnbmVkICgqd2tJbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQ
ZXJIb3N0KSh1bnNpZ25lZCBwcmVmZXJyZWRDb25uZWN0aW9uQ291bnQpOworaW50ICgqd2tHZXRI
VFRQUGlwZWxpbmluZ1ByaW9yaXR5KShDRlVSTFJlcXVlc3RSZWYpOwordm9pZCAoKndrU2V0SFRU
UFBpcGVsaW5pbmdNYXhpbXVtUHJpb3JpdHkpKGludCBwcmlvcml0eSk7Cit2b2lkICgqd2tTZXRI
VFRQUGlwZWxpbmluZ1ByaW9yaXR5KShDRlVSTFJlcXVlc3RSZWYsIGludCBwcmlvcml0eSk7Cit2
b2lkICgqd2tTZXRIVFRQUGlwZWxpbmluZ01pbmltdW1GYXN0TGFuZVByaW9yaXR5KShpbnQgcHJp
b3JpdHkpOwordm9pZCAoKndrU2V0Q09OTkVDVFByb3h5Rm9yU3RyZWFtKShDRlJlYWRTdHJlYW1S
ZWYsIENGU3RyaW5nUmVmIHByb3h5SG9zdCwgQ0ZOdW1iZXJSZWYgcHJveHlQb3J0KTsKK3ZvaWQg
KCp3a1NldENPTk5FQ1RQcm94eUF1dGhvcml6YXRpb25Gb3JTdHJlYW0pKENGUmVhZFN0cmVhbVJl
ZiwgQ0ZTdHJpbmdSZWYgcHJveHlBdXRob3JpemF0aW9uU3RyaW5nKTsKK3ZvaWQgKCp3a1NldENv
b2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdFbmFibGVkKShCT09MKTsKK0NGSFRUUE1lc3NhZ2VS
ZWYgKCp3a0NvcHlDT05ORUNUUHJveHlSZXNwb25zZSkoQ0ZSZWFkU3RyZWFtUmVmLCBDRlVSTFJl
ZiByZXNwb25zZVVSTCwgQ0ZTdHJpbmdSZWYgcHJveHlIb3N0LCBDRk51bWJlclJlZiBwcm94eVBv
cnQpOworYm9vbCAoKndrRXhlY3V0YWJsZVdhc0xpbmtlZE9uT3JBZnRlcklPU1ZlcnNpb24pKGlu
dCk7CitpbnQgKCp3a0dldERldmljZUNsYXNzKSh2b2lkKTsKK0NHU2l6ZSAoKndrR2V0Vmlld3Bv
cnRTY3JlZW5TaXplKSh2b2lkKTsKK3ZvaWQgKCp3a1NldExheWVyQ29udGVudHNTY2FsZSkoQ0FM
YXllciAqKTsKK2Zsb2F0ICgqd2tHZXRTY3JlZW5TY2FsZUZhY3Rvcikodm9pZCk7Citib29sICgq
d2tJc0dCMTgwMzBDb21wbGlhbmNlUmVxdWlyZWQpKHZvaWQpOwordm9pZCAoKndrQ0dQYXRoQWRk
Um91bmRlZFJlY3QpKENHTXV0YWJsZVBhdGhSZWYgcGF0aCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zv
cm0qIG1hdHJpeCwgQ0dSZWN0IHJlY3QsIENHRmxvYXQgY29ybmVyV2lkdGgsIENHRmxvYXQgY29y
bmVySGVpZ2h0KTsgCit2b2lkICgqd2tDRlVSTFJlcXVlc3RBbGxvd0FsbFBvc3RDYWNoaW5nKShD
RlVSTFJlcXVlc3RSZWYpOworQ0ZBcnJheVJlZiAoKndrQ29weU5TVVJMUmVzcG9uc2VDZXJ0aWZp
Y2F0ZUNoYWluKShOU1VSTFJlc3BvbnNlKik7CisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorQ0ZIVFRQ
Q29va2llU3RvcmFnZVJlZiAoKndrR2V0RGVmYXVsdEhUVFBDb29raWVTdG9yYWdlKSgpOworV0tD
RlVSTENyZWRlbnRpYWxSZWYgKCp3a0NvcHlDcmVkZW50aWFsRnJvbUNGUGVyc2lzdGVudFN0b3Jh
Z2UpKENGVVJMUHJvdGVjdGlvblNwYWNlUmVmIHByb3RlY3Rpb25TcGFjZSk7Cit2b2lkICgqd2tT
ZXRDRlVSTFJlcXVlc3RTaG91bGRDb250ZW50U25pZmYpKENGTXV0YWJsZVVSTFJlcXVlc3RSZWYs
IGJvb2wpOworQ0ZBcnJheVJlZiAoKndrQ0ZVUkxSZXF1ZXN0Q29weUhUVFBSZXF1ZXN0Qm9keVBh
cnRzKShDRlVSTFJlcXVlc3RSZWYpOwordm9pZCAoKndrQ0ZVUkxSZXF1ZXN0U2V0SFRUUFJlcXVl
c3RCb2R5UGFydHMpKENGTXV0YWJsZVVSTFJlcXVlc3RSZWYsIENGQXJyYXlSZWYgYm9keVBhcnRz
KTsKK3ZvaWQgKCp3a1NldFJlcXVlc3RTdG9yYWdlU2Vzc2lvbikoQ0ZVUkxTdG9yYWdlU2Vzc2lv
blJlZiwgQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZik7CisjZW5kaWYKKworYm9vbCAoKndrR2V0VmVy
dGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKShDVEZvbnRSZWYsIGNvbnN0IFVuaUNoYXJbXSwgQ0dH
bHlwaFtdLCBzaXplX3QpOworQ1RMaW5lUmVmICgqd2tDcmVhdGVDVExpbmVXaXRoVW5pQ2hhclBy
b3ZpZGVyKShjb25zdCBVbmlDaGFyKiAoKnByb3ZpZGUpKENGSW5kZXggc3RyaW5nSW5kZXgsIENG
SW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiksIHZv
aWQgKCpkaXNwb3NlKShjb25zdCBVbmlDaGFyKiBjaGFycywgdm9pZCopLCB2b2lkKik7Citib29s
ICgqd2tDVEZvbnRUcmFuc2Zvcm1HbHlwaHMpKENURm9udFJlZiBmb250LCBDR0dseXBoIGdseXBo
c1tdLCBDR1NpemUgYWR2YW5jZXNbXSwgQ0ZJbmRleCBjb3VudCwgd2tDVEZvbnRUcmFuc2Zvcm1P
cHRpb25zIG9wdGlvbnMpOworCitDR1NpemUgKCp3a0NUUnVuR2V0SW5pdGlhbEFkdmFuY2UpKENU
UnVuUmVmKTsKKworQ1RUeXBlc2V0dGVyUmVmICgqd2tDcmVhdGVDVFR5cGVzZXR0ZXJXaXRoVW5p
Q2hhclByb3ZpZGVyQW5kT3B0aW9ucykoY29uc3QgVW5pQ2hhciogKCpwcm92aWRlKShDRkluZGV4
IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjaGFyQ291bnQsIENGRGljdGlvbmFyeVJlZiogYXR0cmli
dXRlcywgdm9pZCopLCB2b2lkICgqZGlzcG9zZSkoY29uc3QgVW5pQ2hhciogY2hhcnMsIHZvaWQq
KSwgdm9pZCosIENGRGljdGlvbmFyeVJlZiBvcHRpb25zKTsKKworI2lmICFQTEFURk9STShJT1Nf
U0lNVUxBVE9SKQorQ0dDb250ZXh0UmVmICgqd2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlKShJT1N1
cmZhY2VSZWYgc3VyZmFjZSwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgQ0dDb2xv
clNwYWNlUmVmIGNvbG9yU3BhY2UpOworQ0dJbWFnZVJlZiAoKndrSU9TdXJmYWNlQ29udGV4dENy
ZWF0ZUltYWdlKShDR0NvbnRleHRSZWYgY29udGV4dCk7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
U19TSU1VTEFUT1IpCisKK0NGVVJMU3RvcmFnZVNlc3Npb25SZWYgKCp3a0NyZWF0ZVByaXZhdGVT
dG9yYWdlU2Vzc2lvbikoQ0ZTdHJpbmdSZWYpOworTlNVUkxSZXF1ZXN0KiAoKndrQ29weVJlcXVl
c3RXaXRoU3RvcmFnZVNlc3Npb24pKENGVVJMU3RvcmFnZVNlc3Npb25SZWYsIE5TVVJMUmVxdWVz
dCopOworQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiAoKndrQ29weUhUVFBDb29raWVTdG9yYWdlKShD
RlVSTFN0b3JhZ2VTZXNzaW9uUmVmKTsKK3Vuc2lnbmVkICgqd2tHZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KShDRkhUVFBDb29raWVTdG9yYWdlUmVmKTsKK3ZvaWQgKCp3a1NldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3kpKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYsIHVuc2lnbmVkKTsKK05TQXJyYXkg
Kigqd2tIVFRQQ29va2llcykoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZik7CitOU0FycmF5ICooKndr
SFRUUENvb2tpZXNGb3JVUkwpKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYsIE5TVVJMICopOwordm9p
ZCAoKndrU2V0SFRUUENvb2tpZXNGb3JVUkwpKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYsIE5TQXJy
YXkgKiwgTlNVUkwgKiwgTlNVUkwgKik7Cit2b2lkICgqd2tEZWxldGVBbGxIVFRQQ29va2llcyko
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZik7Cit2b2lkICgqd2tEZWxldGVIVFRQQ29va2llKShDRkhU
VFBDb29raWVTdG9yYWdlUmVmLCBOU0hUVFBDb29raWUgKik7CisKK0NGU3RyaW5nUmVmICgqd2tH
ZXRDRlVSTFJlc3BvbnNlTUlNRVR5cGUpKENGVVJMUmVzcG9uc2VSZWYpOworQ0ZVUkxSZWYgKCp3
a0dldENGVVJMUmVzcG9uc2VVUkwpKENGVVJMUmVzcG9uc2VSZWYpOworQ0ZIVFRQTWVzc2FnZVJl
ZiAoKndrR2V0Q0ZVUkxSZXNwb25zZUhUVFBSZXNwb25zZSkoQ0ZVUkxSZXNwb25zZVJlZik7CitD
RlN0cmluZ1JlZiAoKndrQ29weUNGVVJMUmVzcG9uc2VTdWdnZXN0ZWRGaWxlbmFtZSkoQ0ZVUkxS
ZXNwb25zZVJlZik7Cit2b2lkICgqd2tTZXRDRlVSTFJlc3BvbnNlTUlNRVR5cGUpKENGVVJMUmVz
cG9uc2VSZWYsIENGU3RyaW5nUmVmIG1pbWVUeXBlKTsKKwordm9pZCgqd2tEZXN0cm95UmVuZGVy
aW5nUmVzb3VyY2VzKSh2b2lkKTsKKworYm9vbCAoKndrQ2FwdGlvbkFwcGVhcmFuY2VIYXNVc2Vy
UHJlZmVyZW5jZXMpKHZvaWQpOworYm9vbCAoKndrQ2FwdGlvbkFwcGVhcmFuY2VTaG93Q2FwdGlv
bnNXaGVuQXZhaWxhYmxlKSh2b2lkKTsKK0NHQ29sb3JSZWYoKndrQ2FwdGlvbkFwcGVhcmFuY2VD
b3B5Rm9yZWdyb3VuZENvbG9yKSh2b2lkKTsKK0NHQ29sb3JSZWYoKndrQ2FwdGlvbkFwcGVhcmFu
Y2VDb3B5QmFja2dyb3VuZENvbG9yKSh2b2lkKTsKK0NHQ29sb3JSZWYoKndrQ2FwdGlvbkFwcGVh
cmFuY2VDb3B5V2luZG93Q29sb3IpKHZvaWQpOworYm9vbCgqd2tDYXB0aW9uQXBwZWFyYW5jZUdl
dEZvcmVncm91bmRPcGFjaXR5KShDR0Zsb2F0Kik7Citib29sKCp3a0NhcHRpb25BcHBlYXJhbmNl
R2V0QmFja2dyb3VuZE9wYWNpdHkpKENHRmxvYXQqKTsKK2Jvb2woKndrQ2FwdGlvbkFwcGVhcmFu
Y2VHZXRXaW5kb3dPcGFjaXR5KShDR0Zsb2F0Kik7CitDR0ZvbnRSZWYoKndrQ2FwdGlvbkFwcGVh
cmFuY2VDb3B5Rm9udEZvclN0eWxlKShpbnQpOworYm9vbCgqd2tDYXB0aW9uQXBwZWFyYW5jZUdl
dFJlbGF0aXZlQ2hhcmFjdGVyU2l6ZSkoQ0dGbG9hdCopOworaW50KCp3a0NhcHRpb25BcHBlYXJh
bmNlR2V0VGV4dEVkZ2VTdHlsZSkodm9pZCk7CitDRlN0cmluZ1JlZigqd2tDYXB0aW9uQXBwZWFy
YW5jZUdldFNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbikodm9pZCk7CisKKyNpZiBFTkFCTEUo
UFVCTElDX1NVRkZJWF9MSVNUKQorYm9vbCAoKndrSXNQdWJsaWNTdWZmaXgpKE5TU3RyaW5nICpo
b3N0KTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKK0NGU3RyaW5n
UmVmICgqd2tDYWNoZVBhcnRpdGlvbktleSkodm9pZCk7CisjZW5kaWYKKworQ0ZTdHJpbmdSZWYg
KCp3a0dldFVzZXJBZ2VudCkodm9pZCk7CitDRlN0cmluZ1JlZiAoKndrR2V0UGxhdGZvcm1OYW1l
Rm9yTmF2aWdhdG9yKSh2b2lkKTsKK0NGU3RyaW5nUmVmICgqd2tHZXRWZW5kb3JOYW1lRm9yTmF2
aWdhdG9yKSh2b2lkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkV2ZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGY4Mjk5N2VmZTI4MWRmMzEyODI5Zjk5NTgyZWRkZDFjNDAwODA1MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJFdmVudC5oCkBAIC0wLDAg
KzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRklYTUU6IFJlbmFtZSB0aGlzIGZpbGUgdG8gV2Vi
RXZlbnRJT1MuaCBhZnRlciB3ZSB1cHN0cmVhbSB0aGUgaU9TIHBvcnQuCisjaWZuZGVmIFdlYkV2
ZW50SU9TX2gKKyNkZWZpbmUgV2ViRXZlbnRJT1NfaAorCisjaW1wb3J0IDxDb3JlR3JhcGhpY3Mv
Q29yZUdyYXBoaWNzLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKwordHlw
ZWRlZiBlbnVtIHsKKyAgICBXZWJFdmVudE1vdXNlRG93biwKKyAgICBXZWJFdmVudE1vdXNlVXAs
CisgICAgV2ViRXZlbnRNb3VzZU1vdmVkLAorICAgIAorICAgIFdlYkV2ZW50U2Nyb2xsV2hlZWws
CisgICAgCisgICAgV2ViRXZlbnRLZXlEb3duLAorICAgIFdlYkV2ZW50S2V5VXAsCisgICAgCisg
ICAgV2ViRXZlbnRUb3VjaEJlZ2luLAorICAgIFdlYkV2ZW50VG91Y2hDaGFuZ2UsCisgICAgV2Vi
RXZlbnRUb3VjaEVuZCwKKyAgICBXZWJFdmVudFRvdWNoQ2FuY2VsCit9IFdlYkV2ZW50VHlwZTsK
KwordHlwZWRlZiBlbnVtIHsKKyAgICBXZWJFdmVudFRvdWNoUGhhc2VCZWdhbiwKKyAgICBXZWJF
dmVudFRvdWNoUGhhc2VNb3ZlZCwKKyAgICBXZWJFdmVudFRvdWNoUGhhc2VTdGF0aW9uYXJ5LAor
ICAgIFdlYkV2ZW50VG91Y2hQaGFzZUVuZGVkLAorICAgIFdlYkV2ZW50VG91Y2hQaGFzZUNhbmNl
bGxlZAorfSBXZWJFdmVudFRvdWNoUGhhc2VUeXBlOworCisvLyBUaGVzZSBlbnVtIHZhbHVlcyBh
cmUgY29waWVkIGRpcmVjdGx5IGZyb20gR1NFdmVudCBmb3IgY29tcGF0aWJpbGl0eS4KK3R5cGVk
ZWYgZW51bSB7CisgICAgV2ViRXZlbnRGbGFnTWFza0FscGhhU2hpZnQgPSAweDAwMDEwMDAwLAor
ICAgIFdlYkV2ZW50RmxhZ01hc2tTaGlmdCAgICAgID0gMHgwMDAyMDAwMCwKKyAgICBXZWJFdmVu
dEZsYWdNYXNrQ29udHJvbCAgICA9IDB4MDAwNDAwMDAsCisgICAgV2ViRXZlbnRGbGFnTWFza0Fs
dGVybmF0ZSAgPSAweDAwMDgwMDAwLAorICAgIFdlYkV2ZW50RmxhZ01hc2tDb21tYW5kICAgID0g
MHgwMDEwMDAwMCwKK30gV2ViRXZlbnRGbGFnVmFsdWVzOwordHlwZWRlZiB1bnNpZ25lZCBXZWJF
dmVudEZsYWdzOworCisvLyBUaGVzZSBlbnVtIHZhbHVlcyBhcmUgY29waWVkIGRpcmVjdGx5IGZy
b20gR1NFdmVudCBmb3IgY29tcGF0aWJpbGl0eS4KK3R5cGVkZWYgZW51bSB7CisgICAgV2ViRXZl
bnRDaGFyYWN0ZXJTZXRBU0NJSSAgICAgICAgICAgPSAwLAorICAgIFdlYkV2ZW50Q2hhcmFjdGVy
U2V0U3ltYm9sICAgICAgICAgID0gMSwKKyAgICBXZWJFdmVudENoYXJhY3RlclNldERpbmdiYXRz
ICAgICAgICA9IDIsCisgICAgV2ViRXZlbnRDaGFyYWN0ZXJTZXRVbmljb2RlICAgICAgICAgPSAy
NTMsCisgICAgV2ViRXZlbnRDaGFyYWN0ZXJTZXRGdW5jdGlvbktleXMgICAgPSAyNTQsCit9IFdl
YkV2ZW50Q2hhcmFjdGVyU2V0OworCitAaW50ZXJmYWNlIFdlYkV2ZW50IDogTlNPYmplY3Qgewor
QHByaXZhdGUKKyAgICBXZWJFdmVudFR5cGUgX3R5cGU7CisgICAgQ0ZUaW1lSW50ZXJ2YWwgX3Rp
bWVzdGFtcDsKKyAgICAKKyAgICBDR1BvaW50IF9sb2NhdGlvbkluV2luZG93OworICAgIAorICAg
IE5TU3RyaW5nICpfY2hhcmFjdGVyczsKKyAgICBOU1N0cmluZyAqX2NoYXJhY3RlcnNJZ25vcmlu
Z01vZGlmaWVyczsKKyAgICBXZWJFdmVudEZsYWdzIF9tb2RpZmllckZsYWdzOworICAgIEJPT0wg
X2tleVJlcGVhdGluZzsKKyAgICBCT09MIF9wb3B1cFZhcmlhbnQ7IC8vIEZJWE1FOiB0byBiZSBy
ZW1vdmVkCisgICAgTlNVSW50ZWdlciBfa2V5Ym9hcmRGbGFnczsKKyAgICB1aW50MTZfdCBfa2V5
Q29kZTsKKyAgICBCT09MIF90YWJLZXk7CisgICAgV2ViRXZlbnRDaGFyYWN0ZXJTZXQgX2NoYXJh
Y3RlclNldDsKKyAgICAKKyAgICBmbG9hdCBfZGVsdGFYOworICAgIGZsb2F0IF9kZWx0YVk7Cisg
ICAgCisgICAgdW5zaWduZWQgX3RvdWNoQ291bnQ7CisgICAgTlNBcnJheSAqX3RvdWNoTG9jYXRp
b25zOworICAgIE5TQXJyYXkgKl90b3VjaElkZW50aWZpZXJzOworICAgIE5TQXJyYXkgKl90b3Vj
aFBoYXNlczsKKyAgICAKKyAgICBCT09MIF9pc0dlc3R1cmU7CisgICAgZmxvYXQgX2dlc3R1cmVT
Y2FsZTsKKyAgICBmbG9hdCBfZ2VzdHVyZVJvdGF0aW9uOworCisgICAgQk9PTCBfd2FzSGFuZGxl
ZDsKK30KKworLSAoV2ViRXZlbnQgKilpbml0V2l0aE1vdXNlRXZlbnRUeXBlOihXZWJFdmVudFR5
cGUpdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVN0YW1wOihDRlRpbWVJbnRl
cnZhbCl0aW1lU3RhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjooQ0dQ
b2ludClwb2ludDsKKworLSAoV2ViRXZlbnQgKilpbml0V2l0aFNjcm9sbFdoZWVsRXZlbnRXaXRo
VGltZVN0YW1wOihDRlRpbWVJbnRlcnZhbCl0aW1lU3RhbXAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjooQ0dQb2ludClwb2ludAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWDooZmxvYXQpZGVsdGFY
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFZOihm
bG9hdClkZWx0YVk7CisKKy0gKFdlYkV2ZW50ICopaW5pdFdpdGhUb3VjaEV2ZW50VHlwZTooV2Vi
RXZlbnRUeXBlKXR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVTdGFtcDooQ0ZU
aW1lSW50ZXJ2YWwpdGltZVN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRp
b246KENHUG9pbnQpcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczoo
V2ViRXZlbnRGbGFncyltb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdG91Y2hD
b3VudDoodW5zaWduZWQpdG91Y2hDb3VudAorICAgICAgICAgICAgICAgICAgICAgIHRvdWNoTG9j
YXRpb25zOihOU0FycmF5ICopdG91Y2hMb2NhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgdG91
Y2hJZGVudGlmaWVyczooTlNBcnJheSAqKXRvdWNoSWRlbnRpZmllcnMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICB0b3VjaFBoYXNlczooTlNBcnJheSAqKXRvdWNoUGhhc2VzIGlzR2VzdHVyZToo
Qk9PTClpc0dlc3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlc3R1cmVTY2FsZTooZmxv
YXQpZ2VzdHVyZVNjYWxlCisgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlUm90YXRpb246KGZs
b2F0KWdlc3R1cmVSb3RhdGlvbjsKKworLy8gRklYTUU6IHRoaXMgaXMgZGVwcmVjYXRlZC4gSXQg
d2lsbCBiZSByZW1vdmVkIHdoZW4gVUlLaXQgYWRvcHRzIHRoZSBuZXcgb25lIGJlbG93LgorLSAo
V2ViRXZlbnQgKilpbml0V2l0aEtleUV2ZW50VHlwZTooV2ViRXZlbnRUeXBlKXR5cGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lU3RhbXA6KENGVGltZUludGVydmFsKXRpbWVTdGFtcAor
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyczooTlNTdHJpbmcgKiljaGFyYWN0ZXJz
CisgICAgICAgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOihOU1N0cmluZyAqKWNoYXJhY3Rl
cnNJZ25vcmluZ01vZGlmaWVycworICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczoo
V2ViRXZlbnRGbGFncyltb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgaXNSZXBlYXRp
bmc6KEJPT0wpcmVwZWF0aW5nCisgICAgICAgICAgICAgICAgICAgIGlzUG9wdXBWYXJpYW50OihC
T09MKXBvcHVwVmFyaWFudAorICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29kZToodWlu
dDE2X3Qpa2V5Q29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RhYktleTooQk9PTCl0
YWJLZXkKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJTZXQ6KFdlYkV2ZW50Q2hhcmFj
dGVyU2V0KWNoYXJhY3RlclNldDsKKworLSAoV2ViRXZlbnQgKilpbml0V2l0aEtleUV2ZW50VHlw
ZTooV2ViRXZlbnRUeXBlKXR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RhbXA6
KENGVGltZUludGVydmFsKXRpbWVTdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFj
dGVyczooTlNTdHJpbmcgKiljaGFyYWN0ZXJzCisgICAgICAgY2hhcmFjdGVyc0lnbm9yaW5nTW9k
aWZpZXJzOihOU1N0cmluZyAqKWNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycworICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vZGlmaWVyczooV2ViRXZlbnRGbGFncyltb2RpZmllcnMKKyAgICAg
ICAgICAgICAgICAgICAgICAgaXNSZXBlYXRpbmc6KEJPT0wpcmVwZWF0aW5nCisgICAgICAgICAg
ICAgICAgICAgICAgICAgd2l0aEZsYWdzOihOU1VJbnRlZ2VyKWZsYWdzCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrZXlDb2RlOih1aW50MTZfdClrZXlDb2RlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlzVGFiS2V5OihCT09MKXRhYktleQorICAgICAgICAgICAgICAgICAgICAgIGNo
YXJhY3RlclNldDooV2ViRXZlbnRDaGFyYWN0ZXJTZXQpY2hhcmFjdGVyU2V0OworCitAcHJvcGVy
dHkobm9uYXRvbWljLCByZWFkb25seSkgV2ViRXZlbnRUeXBlIHR5cGU7CitAcHJvcGVydHkobm9u
YXRvbWljLCByZWFkb25seSkgQ0ZUaW1lSW50ZXJ2YWwgdGltZXN0YW1wOworCisvLyBNb3VzZQor
QHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIENHUG9pbnQgbG9jYXRpb25JbldpbmRvdzsK
KworLy8gS2V5Ym9hcmQKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5LCByZXRhaW4pIE5T
U3RyaW5nICpjaGFyYWN0ZXJzOworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHksIHJldGFp
bikgTlNTdHJpbmcgKmNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczsKK0Bwcm9wZXJ0eShub25h
dG9taWMsIHJlYWRvbmx5KSBXZWJFdmVudEZsYWdzIG1vZGlmaWVyRmxhZ3M7CitAcHJvcGVydHko
bm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyID0gaXNLZXlSZXBlYXRpbmcpIEJPT0wga2V5UmVw
ZWF0aW5nOworCisvLyBGSVhNRTogdGhpcyBpcyBkZXByZWNhdGVkLiBJdCB3aWxsIGJlIHJlbW92
ZWQgd2hlbiBVSUtpdCBhZG9wdHMgdGhlIG5ldyBpbml0V2l0aEtleUV2ZW50VHlwZS4KK0Bwcm9w
ZXJ0eShub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXIgPSBpc1BvcHVwVmFyaWFudCkgQk9PTCBw
b3B1cFZhcmlhbnQ7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBr
ZXlib2FyZEZsYWdzOworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIHVpbnQxNl90IGtl
eUNvZGU7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyID0gaXNUYWJLZXkp
IEJPT0wgdGFiS2V5OworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIFdlYkV2ZW50Q2hh
cmFjdGVyU2V0IGNoYXJhY3RlclNldDsKKworLy8gU2Nyb2xsIFdoZWVsCitAcHJvcGVydHkobm9u
YXRvbWljLCByZWFkb25seSkgZmxvYXQgZGVsdGFYOworQHByb3BlcnR5KG5vbmF0b21pYywgcmVh
ZG9ubHkpIGZsb2F0IGRlbHRhWTsKKworLy8gVG91Y2gKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJl
YWRvbmx5KSB1bnNpZ25lZCB0b3VjaENvdW50OworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9u
bHksIHJldGFpbikgTlNBcnJheSAqdG91Y2hMb2NhdGlvbnM7CitAcHJvcGVydHkobm9uYXRvbWlj
LCByZWFkb25seSwgcmV0YWluKSBOU0FycmF5ICp0b3VjaElkZW50aWZpZXJzOworQHByb3BlcnR5
KG5vbmF0b21pYywgcmVhZG9ubHksIHJldGFpbikgTlNBcnJheSAqdG91Y2hQaGFzZXM7CisKKy8v
IEdlc3R1cmUKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGlzR2VzdHVyZTsK
K0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBmbG9hdCBnZXN0dXJlU2NhbGU7CitAcHJv
cGVydHkobm9uYXRvbWljLCByZWFkb25seSkgZmxvYXQgZ2VzdHVyZVJvdGF0aW9uOworCitAcHJv
cGVydHkobm9uYXRvbWljKSBCT09MIHdhc0hhbmRsZWQ7CisKK0BlbmQKKworQGludGVyZmFjZSBX
ZWJJT1NFdmVudCA6IFdlYkV2ZW50CitAZW5kCisKKyNlbmRpZiAvLyBXZWJFdmVudElPU19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViRXZlbnQubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViRXZlbnQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjU1Nzg4NzMw
N2UzNzgzMTY4NDMzNjM5YTQ3OGNmMGQ3MjlmZjA5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJFdmVudC5tbQpAQCAtMCwwICsxLDQ5NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIEZJWE1FOiBSZW5hbWUgdGhpcyBmaWxlIHRvIFdlYkV2ZW50SU9T
Lm1tIGFmdGVyIHdlIHVwc3RyZWFtIHRoZSBpT1MgcG9ydC4KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJXZWJFdmVudC5oIgorCisjaW1wb3J0ICJLZXlFdmVudENvY29hLmgiCisjaW1w
b3J0IDxGb3VuZGF0aW9uL05TR2VvbWV0cnkuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitAaW1wbGVtZW50YXRpb24gV2ViRXZlbnQK
KworQHN5bnRoZXNpemUgdHlwZSA9IF90eXBlOworQHN5bnRoZXNpemUgdGltZXN0YW1wID0gX3Rp
bWVzdGFtcDsKK0BzeW50aGVzaXplIHdhc0hhbmRsZWQgPSBfd2FzSGFuZGxlZDsKKworLSAoV2Vi
RXZlbnQgKilpbml0V2l0aE1vdXNlRXZlbnRUeXBlOihXZWJFdmVudFR5cGUpdHlwZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZVN0YW1wOihDRlRpbWVJbnRlcnZhbCl0aW1lU3RhbXAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjooQ0dQb2ludClwb2ludAorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIAorICAgIF90eXBlID0gdHlwZTsKKyAgICBfdGltZXN0YW1wID0gdGltZVN0YW1w
OworCisgICAgX2xvY2F0aW9uSW5XaW5kb3cgPSBwb2ludDsKKyAgICAKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAoV2ViRXZlbnQgKilpbml0V2l0aFNjcm9sbFdoZWVsRXZlbnRXaXRoVGltZVN0
YW1wOihDRlRpbWVJbnRlcnZhbCl0aW1lU3RhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NhdGlvbjooQ0dQb2ludClwb2ludAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWDooZmxvYXQpZGVsdGFYCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFZOihmbG9hdClk
ZWx0YVkKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfdHlwZSA9IFdlYkV2ZW50U2Nyb2xsV2hlZWw7Cisg
ICAgX3RpbWVzdGFtcCA9IHRpbWVTdGFtcDsKKworICAgIF9sb2NhdGlvbkluV2luZG93ID0gcG9p
bnQ7CisgICAgX2RlbHRhWCA9IGRlbHRhWDsKKyAgICBfZGVsdGFZID0gZGVsdGFZOworICAgIAor
ICAgIHJldHVybiBzZWxmOworfQorCistIChXZWJFdmVudCAqKWluaXRXaXRoVG91Y2hFdmVudFR5
cGU6KFdlYkV2ZW50VHlwZSl0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3Rh
bXA6KENGVGltZUludGVydmFsKXRpbWVTdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvY2F0aW9uOihDR1BvaW50KXBvaW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rp
ZmllcnM6KFdlYkV2ZW50RmxhZ3MpbW9kaWZpZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvdWNoQ291bnQ6KHVuc2lnbmVkKXRvdWNoQ291bnQKKyAgICAgICAgICAgICAgICAgICAgICB0
b3VjaExvY2F0aW9uczooTlNBcnJheSAqKXRvdWNoTG9jYXRpb25zCisgICAgICAgICAgICAgICAg
ICAgIHRvdWNoSWRlbnRpZmllcnM6KE5TQXJyYXkgKil0b3VjaElkZW50aWZpZXJzCisgICAgICAg
ICAgICAgICAgICAgICAgICAgdG91Y2hQaGFzZXM6KE5TQXJyYXkgKil0b3VjaFBoYXNlcyBpc0dl
c3R1cmU6KEJPT0wpaXNHZXN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlU2Nh
bGU6KGZsb2F0KWdlc3R1cmVTY2FsZQorICAgICAgICAgICAgICAgICAgICAgZ2VzdHVyZVJvdGF0
aW9uOihmbG9hdClnZXN0dXJlUm90YXRpb24KK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF90eXBlID0gdHlwZTsK
KyAgICBfdGltZXN0YW1wID0gdGltZVN0YW1wOworICAgIF9tb2RpZmllckZsYWdzID0gbW9kaWZp
ZXJzOworCisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTg1Mjg0PiBUb3VjaEV2ZW50
cyBtYXkgYmUgaW4gbW9yZSB0aGFuIG9uZSB3aW5kb3cgc29tZSBkYXkuCisgICAgX2xvY2F0aW9u
SW5XaW5kb3cgPSBwb2ludDsKKyAgICBfdG91Y2hDb3VudCA9IHRvdWNoQ291bnQ7CisgICAgX3Rv
dWNoTG9jYXRpb25zID0gW3RvdWNoTG9jYXRpb25zIGNvcHldOworICAgIF90b3VjaElkZW50aWZp
ZXJzID0gW3RvdWNoSWRlbnRpZmllcnMgY29weV07CisgICAgX3RvdWNoUGhhc2VzID0gW3RvdWNo
UGhhc2VzIGNvcHldOworICAgIF9pc0dlc3R1cmUgPSBpc0dlc3R1cmU7CisgICAgX2dlc3R1cmVT
Y2FsZSA9IGdlc3R1cmVTY2FsZTsKKyAgICBfZ2VzdHVyZVJvdGF0aW9uID0gZ2VzdHVyZVJvdGF0
aW9uOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKK3N0YXRpYyBpbnQgd2luZG93c0tleUNvZGVG
b3JDaGFyQ29kZUlPUyh1bmljaGFyIGNoYXJDb2RlKQoreworICAgIC8vIGlQaG9uZSBTcGVjaWZp
YyBDYXNlcworICAgIC8vIDxyZGFyOi8vNzcwOTQwOD46IFdlIGdldCAxMCAoJ1xuJykgZnJvbSBV
SUtpdCB3aGVuIHVzaW5nIHRoZSBzb2Z0d2FyZSBrZXlib2FyZAorICAgIGlmIChjaGFyQ29kZSA9
PSAxMCkKKyAgICAgICAgcmV0dXJuIDB4MEQ7CisKKyAgICAvLyBHZW5lcmFsIENhc2UKKyAgICBy
ZXR1cm4gd2luZG93c0tleUNvZGVGb3JDaGFyQ29kZShjaGFyQ29kZSk7Cit9CisKKy0gKFdlYkV2
ZW50ICopaW5pdFdpdGhLZXlFdmVudFR5cGU6KFdlYkV2ZW50VHlwZSl0eXBlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZVN0YW1wOihDRlRpbWVJbnRlcnZhbCl0aW1lU3RhbXAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnM6KE5TU3RyaW5nICopY2hhcmFjdGVycworICAg
ICAgIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczooTlNTdHJpbmcgKiljaGFyYWN0ZXJzSWdu
b3JpbmdNb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnM6KFdlYkV2
ZW50RmxhZ3MpbW9kaWZpZXJzCisgICAgICAgICAgICAgICAgICAgICAgIGlzUmVwZWF0aW5nOihC
T09MKXJlcGVhdGluZworICAgICAgICAgICAgICAgICAgICBpc1BvcHVwVmFyaWFudDooQk9PTClw
b3B1cFZhcmlhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvZGU6KHVpbnQxNl90
KWtleUNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUYWJLZXk6KEJPT0wpdGFiS2V5
CisgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyU2V0OihXZWJFdmVudENoYXJhY3RlclNl
dCljaGFyYWN0ZXJTZXQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfdHlwZSA9IHR5cGU7CisgICAgX3Rp
bWVzdGFtcCA9IHRpbWVTdGFtcDsKKworICAgIF9jaGFyYWN0ZXJzID0gW2NoYXJhY3RlcnMgcmV0
YWluXTsKKyAgICBfY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzID0gW2NoYXJhY3RlcnNJZ25v
cmluZ01vZGlmaWVycyByZXRhaW5dOworICAgIF9tb2RpZmllckZsYWdzID0gbW9kaWZpZXJzOwor
ICAgIF9rZXlSZXBlYXRpbmcgPSByZXBlYXRpbmc7CisgICAgX3BvcHVwVmFyaWFudCA9IHBvcHVw
VmFyaWFudDsKKyAgICBfdGFiS2V5ID0gdGFiS2V5OworICAgIF9jaGFyYWN0ZXJTZXQgPSBjaGFy
YWN0ZXJTZXQ7CisKKyAgICBpZiAoa2V5Q29kZSkKKyAgICAgICAgX2tleUNvZGUgPSB3aW5kb3dz
S2V5Q29kZUZvcktleUNvZGUoa2V5Q29kZSk7CisKKyAgICAvLyBOT1RFOiB0aGlzIHByZXNlcnZl
cyB0aGUgb3JpZ2luYWwgc2VtYW50aWNzIHdoaWNoIHVzZWQgdGhlCisgICAgLy8gY2hhcmFjdGVy
cyBzdHJpbmcgZm9yIHRoZSBrZXlDb2RlLiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIGluIGlPUyA0
LjAgdG8KKyAgICAvLyBhbGxvdyB0aGUgY2xpZW50IHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBhIGtl
eUNvZGUsIG90aGVyd2lzZSBkZWZhdWx0IHRvCisgICAgLy8gbWFwcGluZyB0aGUgY2hhcmFjdGVy
cyBzdHJpbmcgdG8gYSBrZXlDb2RlLgorICAgIC8vIGUuZy4gYWRkIGFuICdlbHNlJyBiZWZvcmUg
dGhpcyAnaWYnLgorICAgIGlmIChbY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIGxlbmd0aF0g
PT0gMSkgeworICAgICAgICB1bmljaGFyIGNoID0gW2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVy
cyBjaGFyYWN0ZXJBdEluZGV4OjBdOworICAgICAgICBfa2V5Q29kZSA9IHdpbmRvd3NLZXlDb2Rl
Rm9yQ2hhckNvZGVJT1MoY2gpOworICAgIH0KKworICAgIHJldHVybiBzZWxmOworfQorCisKKy0g
KFdlYkV2ZW50ICopaW5pdFdpdGhLZXlFdmVudFR5cGU6KFdlYkV2ZW50VHlwZSl0eXBlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZVN0YW1wOihDRlRpbWVJbnRlcnZhbCl0aW1lU3RhbXAK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnM6KE5TU3RyaW5nICopY2hhcmFjdGVy
cworICAgICAgIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczooTlNTdHJpbmcgKiljaGFyYWN0
ZXJzSWdub3JpbmdNb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnM6
KFdlYkV2ZW50RmxhZ3MpbW9kaWZpZXJzCisgICAgICAgICAgICAgICAgICAgICAgIGlzUmVwZWF0
aW5nOihCT09MKXJlcGVhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhGbGFnczoo
TlNVSW50ZWdlcilmbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29kZToodWlu
dDE2X3Qpa2V5Q29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RhYktleTooQk9PTCl0
YWJLZXkKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJTZXQ6KFdlYkV2ZW50Q2hhcmFj
dGVyU2V0KWNoYXJhY3RlclNldAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF90eXBlID0gdHlwZTsKKyAg
ICBfdGltZXN0YW1wID0gdGltZVN0YW1wOworCisgICAgX2NoYXJhY3RlcnMgPSBbY2hhcmFjdGVy
cyByZXRhaW5dOworICAgIF9jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgPSBbY2hhcmFjdGVy
c0lnbm9yaW5nTW9kaWZpZXJzIHJldGFpbl07CisgICAgX21vZGlmaWVyRmxhZ3MgPSBtb2RpZmll
cnM7CisgICAgX2tleVJlcGVhdGluZyA9IHJlcGVhdGluZzsKKyAgICBfa2V5Ym9hcmRGbGFncyA9
IGZsYWdzOworICAgIF90YWJLZXkgPSB0YWJLZXk7CisgICAgX2NoYXJhY3RlclNldCA9IGNoYXJh
Y3RlclNldDsKKyAgICAKKyAgICBpZiAoa2V5Q29kZSkKKyAgICAgICAgX2tleUNvZGUgPSB3aW5k
b3dzS2V5Q29kZUZvcktleUNvZGUoa2V5Q29kZSk7CisKKyAgICAvLyBOT1RFOiB0aGlzIHByZXNl
cnZlcyB0aGUgb3JpZ2luYWwgc2VtYW50aWNzIHdoaWNoIHVzZWQgdGhlIAorICAgIC8vIGNoYXJh
Y3RlcnMgc3RyaW5nIGZvciB0aGUga2V5Q29kZS4gVGhpcyBzaG91bGQgYmUgY2hhbmdlZCBpbiBp
T1MgNC4wIHRvCisgICAgLy8gYWxsb3cgdGhlIGNsaWVudCB0byBleHBsaWNpdGx5IHNwZWNpZnkg
YSBrZXlDb2RlLCBvdGhlcndpc2UgZGVmYXVsdCB0byAKKyAgICAvLyBtYXBwaW5nIHRoZSBjaGFy
YWN0ZXJzIHN0cmluZyB0byBhIGtleUNvZGUuCisgICAgLy8gZS5nLiBhZGQgYW4gJ2Vsc2UnIGJl
Zm9yZSB0aGlzICdpZicuCisgICAgaWYgKFtjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgbGVu
Z3RoXSA9PSAxKSB7CisgICAgICAgIHVuaWNoYXIgY2ggPSBbY2hhcmFjdGVyc0lnbm9yaW5nTW9k
aWZpZXJzIGNoYXJhY3RlckF0SW5kZXg6MF07CisgICAgICAgIF9rZXlDb2RlID0gd2luZG93c0tl
eUNvZGVGb3JDaGFyQ29kZUlPUyhjaCk7CisgICAgfQorCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtfY2hhcmFjdGVycyByZWxlYXNlXTsKKyAgICBbX2No
YXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyByZWxlYXNlXTsKKworICAgIFtfdG91Y2hMb2NhdGlv
bnMgcmVsZWFzZV07CisgICAgW190b3VjaElkZW50aWZpZXJzIHJlbGVhc2VdOworICAgIFtfdG91
Y2hQaGFzZXMgcmVsZWFzZV07CisgICAgCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChO
U1N0cmluZyAqKV90eXBlRGVzY3JpcHRpb24KK3sKKyAgICBzd2l0Y2ggKF90eXBlKSB7CisgICAg
ICAgIGNhc2UgV2ViRXZlbnRNb3VzZURvd246CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVu
dE1vdXNlRG93biI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRNb3VzZVVwOgorICAgICAgICAgICAg
cmV0dXJuIEAiV2ViRXZlbnRNb3VzZVVwIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudE1vdXNlTW92
ZWQ6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudE1vdXNlTW92ZWQiOworICAgICAgICBj
YXNlIFdlYkV2ZW50U2Nyb2xsV2hlZWw6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFNj
cm9sbFdoZWVsIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudEtleURvd246CisgICAgICAgICAgICBy
ZXR1cm4gQCJXZWJFdmVudEtleURvd24iOworICAgICAgICBjYXNlIFdlYkV2ZW50S2V5VXA6Cisg
ICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudEtleVVwIjsKKyAgICAgICAgY2FzZSBXZWJFdmVu
dFRvdWNoQmVnaW46CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoQmVnaW4iOwor
ICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hDaGFuZ2U6CisgICAgICAgICAgICByZXR1cm4gQCJX
ZWJFdmVudFRvdWNoQ2hhbmdlIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoRW5kOgorICAg
ICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaEVuZCI7CisgICAgICAgIGNhc2UgV2ViRXZl
bnRUb3VjaENhbmNlbDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50VG91Y2hDYW5jZWwi
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorICAgIHJldHVybiBAIlVua25vd24iOworfQorCistIChOU1N0cmluZyAqKV9tb2RpZmVy
RmxhZ3NEZXNjcmlwdGlvbgoreworICAgIHN3aXRjaCAoX21vZGlmaWVyRmxhZ3MpIHsKKyAgICAg
ICAgY2FzZSBXZWJFdmVudE1vdXNlRG93bjoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50
TW91c2VEb3duIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudE1vdXNlVXA6CisgICAgICAgICAgICBy
ZXR1cm4gQCJXZWJFdmVudE1vdXNlVXAiOworICAgICAgICBjYXNlIFdlYkV2ZW50TW91c2VNb3Zl
ZDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50TW91c2VNb3ZlZCI7CisgICAgICAgIGNh
c2UgV2ViRXZlbnRTY3JvbGxXaGVlbDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50U2Ny
b2xsV2hlZWwiOworICAgICAgICBjYXNlIFdlYkV2ZW50S2V5RG93bjoKKyAgICAgICAgICAgIHJl
dHVybiBAIldlYkV2ZW50S2V5RG93biI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRLZXlVcDoKKyAg
ICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50S2V5VXAiOworICAgICAgICBjYXNlIFdlYkV2ZW50
VG91Y2hCZWdpbjoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50VG91Y2hCZWdpbiI7Cisg
ICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaENoYW5nZToKKyAgICAgICAgICAgIHJldHVybiBAIldl
YkV2ZW50VG91Y2hDaGFuZ2UiOworICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hFbmQ6CisgICAg
ICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoRW5kIjsKKyAgICAgICAgY2FzZSBXZWJFdmVu
dFRvdWNoQ2FuY2VsOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaENhbmNlbCI7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisgICAgcmV0dXJuIEAiVW5rbm93biI7Cit9CisKKy0gKE5TU3RyaW5nICopX2NoYXJhY3Rl
clNldERlc2NyaXB0aW9uCit7CisgICAgc3dpdGNoIChfY2hhcmFjdGVyU2V0KSB7CisgICAgICAg
IGNhc2UgV2ViRXZlbnRDaGFyYWN0ZXJTZXRBU0NJSToKKyAgICAgICAgICAgIHJldHVybiBAIldl
YkV2ZW50Q2hhcmFjdGVyU2V0QVNDSUkiOworICAgICAgICBjYXNlIFdlYkV2ZW50Q2hhcmFjdGVy
U2V0U3ltYm9sOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRDaGFyYWN0ZXJTZXRTeW1i
b2wiOworICAgICAgICBjYXNlIFdlYkV2ZW50Q2hhcmFjdGVyU2V0RGluZ2JhdHM6CisgICAgICAg
ICAgICByZXR1cm4gQCJXZWJFdmVudENoYXJhY3RlclNldERpbmdiYXRzIjsKKyAgICAgICAgY2Fz
ZSBXZWJFdmVudENoYXJhY3RlclNldFVuaWNvZGU6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJF
dmVudENoYXJhY3RlclNldFVuaWNvZGUiOworICAgICAgICBjYXNlIFdlYkV2ZW50Q2hhcmFjdGVy
U2V0RnVuY3Rpb25LZXlzOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRDaGFyYWN0ZXJT
ZXRGdW5jdGlvbktleXMiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBAIlVua25vd24iOworfQorCistIChOU1N0
cmluZyAqKV90b3VjaExvY2F0aW9uc0Rlc2NyaXB0aW9uOihOU0FycmF5ICopbG9jYXRpb25zCit7
CisgICAgQk9PTCBzaG91bGRBZGRDb21tYSA9IE5POworICAgIE5TTXV0YWJsZVN0cmluZyAqZGVz
Y3JpcHRpb24gPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisgICAgZm9yIChOU1ZhbHVlICp2
YWx1ZSBpbiBsb2NhdGlvbnMpIHsKKyAgICAgICAgQ0dQb2ludCBwb2ludCA9IFt2YWx1ZSBwb2lu
dFZhbHVlXTsKKyAgICAgICAgW2Rlc2NyaXB0aW9uIGFwcGVuZEZvcm1hdDpAIiVAKCVmLCAlZiki
LCAoc2hvdWxkQWRkQ29tbWEgPyBAIiwgIiA6IEAiIiksIHBvaW50LngsIHBvaW50LnldOworICAg
ICAgICBzaG91bGRBZGRDb21tYSA9IFlFUzsKKyAgICB9CisgICAgcmV0dXJuIGRlc2NyaXB0aW9u
OworfQorCistIChOU1N0cmluZyAqKV90b3VjaElkZW50aWZpZXJzRGVzY3JpcHRpb24KK3sKKyAg
ICBCT09MIHNob3VsZEFkZENvbW1hID0gTk87CisgICAgTlNNdXRhYmxlU3RyaW5nICpkZXNjcmlw
dGlvbiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgICBmb3IgKE5TTnVtYmVyICppZGVu
dGlmaWVyIGluIF90b3VjaElkZW50aWZpZXJzKSB7CisgICAgICAgIFtkZXNjcmlwdGlvbiBhcHBl
bmRGb3JtYXQ6QCIlQCV1IiwgKHNob3VsZEFkZENvbW1hID8gQCIsICIgOiBAIiIpLCBbaWRlbnRp
ZmllciB1bnNpZ25lZEludFZhbHVlXV07CisgICAgICAgIHNob3VsZEFkZENvbW1hID0gWUVTOwor
ICAgIH0KKyAgICByZXR1cm4gZGVzY3JpcHRpb247Cit9CisKKy0gKE5TU3RyaW5nICopX3RvdWNo
UGhhc2VEZXNjcmlwdGlvbjooV2ViRXZlbnRUb3VjaFBoYXNlVHlwZSlwaGFzZQoreworICAgIHN3
aXRjaCAocGhhc2UpIHsKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VCZWdhbjoKKyAg
ICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50VG91Y2hQaGFzZUJlZ2FuIjsKKyAgICAgICAgY2Fz
ZSBXZWJFdmVudFRvdWNoUGhhc2VNb3ZlZDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50
VG91Y2hQaGFzZU1vdmVkIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VTdGF0aW9u
YXJ5OgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaFBoYXNlU3RhdGlvbmFyeSI7
CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaFBoYXNlRW5kZWQ6CisgICAgICAgICAgICByZXR1
cm4gQCJXZWJFdmVudFRvdWNoUGhhc2VFbmRlZCI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3Vj
aFBoYXNlQ2FuY2VsbGVkOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaFBoYXNl
Q2FuY2VsbGVkIjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gQCJVbmtub3duIjsKK30KKworLSAoTlNTdHJpbmcg
KilfdG91Y2hQaGFzZXNEZXNjcmlwdGlvbgoreworICAgIEJPT0wgc2hvdWxkQWRkQ29tbWEgPSBO
TzsKKyAgICBOU011dGFibGVTdHJpbmcgKmRlc2NyaXB0aW9uID0gW05TTXV0YWJsZVN0cmluZyBz
dHJpbmddOworICAgIGZvciAoTlNOdW1iZXIgKnBoYXNlIGluIF90b3VjaFBoYXNlcykgeworICAg
ICAgICBbZGVzY3JpcHRpb24gYXBwZW5kRm9ybWF0OkAiJUAlQCIsIChzaG91bGRBZGRDb21tYSA/
IEAiLCAiIDogQCIiKSwgW3NlbGYgX3RvdWNoUGhhc2VEZXNjcmlwdGlvbjpzdGF0aWNfY2FzdDxX
ZWJFdmVudFRvdWNoUGhhc2VUeXBlPihbcGhhc2UgdW5zaWduZWRJbnRWYWx1ZV0pXV07CisgICAg
ICAgIHNob3VsZEFkZENvbW1hID0gWUVTOworICAgIH0KKyAgICByZXR1cm4gZGVzY3JpcHRpb247
Cit9CisKKy0gKE5TU3RyaW5nICopX2V2ZW50RGVzY3JpcHRpb24KK3sKKyAgICBzd2l0Y2ggKF90
eXBlKSB7CisgICAgICAgIGNhc2UgV2ViRXZlbnRNb3VzZURvd246CisgICAgICAgIGNhc2UgV2Vi
RXZlbnRNb3VzZVVwOgorICAgICAgICBjYXNlIFdlYkV2ZW50TW91c2VNb3ZlZDoKKyAgICAgICAg
ICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImxvY2F0aW9uOiAoJWYsICVm
KSIsIF9sb2NhdGlvbkluV2luZG93LngsIF9sb2NhdGlvbkluV2luZG93LnldOworICAgICAgICBj
YXNlIFdlYkV2ZW50U2Nyb2xsV2hlZWw6CisgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCJsb2NhdGlvbjogKCVmLCAlZikgZGVsdGFYOiAlZiBkZWx0YVk6ICVm
IiwgX2xvY2F0aW9uSW5XaW5kb3cueCwgX2xvY2F0aW9uSW5XaW5kb3cueSwgX2RlbHRhWCwgX2Rl
bHRhWV07CisgICAgICAgIGNhc2UgV2ViRXZlbnRLZXlEb3duOgorICAgICAgICBjYXNlIFdlYkV2
ZW50S2V5VXA6CisgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJjaGFyczogJUAgY2hhcnNOb01vZGlmaWVyczogJUAgZmxhZ3M6ICVkIHJlcGVhdGluZzogJWQg
a2V5Ym9hcmRGbGFnczogJWx1IGtleUNvZGUgJWQsIGlzVGFiOiAlZCBjaGFyU2V0OiAlQCIsIF9j
aGFyYWN0ZXJzLCBfY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzLCBfbW9kaWZpZXJGbGFncywg
X2tleVJlcGVhdGluZywgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX2tleWJvYXJkRmxhZ3Mp
LCBfa2V5Q29kZSwgX3RhYktleSwgW3NlbGYgX2NoYXJhY3RlclNldERlc2NyaXB0aW9uXV07Cisg
ICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaEJlZ2luOgorICAgICAgICBjYXNlIFdlYkV2ZW50VG91
Y2hDaGFuZ2U6CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaEVuZDoKKyAgICAgICAgY2FzZSBX
ZWJFdmVudFRvdWNoQ2FuY2VsOgorICAgICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAibG9jYXRpb246ICglZiwgJWYpIGNvdW50OiAlZCBsb2NhdGlvbnM6ICVAIGlk
ZW50aWZpZXJzOiAlQCBwaGFzZXM6ICVAIGlzR2VzdHVyZTogJWQgc2NhbGU6ICVmIHJvdGF0aW9u
OiAlZiIsIF9sb2NhdGlvbkluV2luZG93LngsIF9sb2NhdGlvbkluV2luZG93LnksIF90b3VjaENv
dW50LCBbc2VsZiBfdG91Y2hMb2NhdGlvbnNEZXNjcmlwdGlvbjpfdG91Y2hMb2NhdGlvbnNdLCBb
c2VsZiBfdG91Y2hJZGVudGlmaWVyc0Rlc2NyaXB0aW9uXSwgW3NlbGYgX3RvdWNoUGhhc2VzRGVz
Y3JpcHRpb25dLCAoX2lzR2VzdHVyZSA/IDEgOiAwKSwgX2dlc3R1cmVTY2FsZSwgX2dlc3R1cmVS
b3RhdGlvbl07CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisgICAgcmV0dXJuIEAiVW5rbm93biI7Cit9CisKKy0gKE5TU3RyaW5nICop
ZGVzY3JpcHRpb24KK3sKKyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIl
QCB0eXBlOiAlQCAtICVAIiwgW3N1cGVyIGRlc2NyaXB0aW9uXSwgW3NlbGYgX3R5cGVEZXNjcmlw
dGlvbl0sIFtzZWxmIF9ldmVudERlc2NyaXB0aW9uXV07Cit9CisKKy0gKENHUG9pbnQpbG9jYXRp
b25JbldpbmRvdworeworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoX3R5cGUgPT0gV2ViRXZlbnRN
b3VzZURvd24gfHwgX3R5cGUgPT0gV2ViRXZlbnRNb3VzZVVwIHx8IF90eXBlID09IFdlYkV2ZW50
TW91c2VNb3ZlZCB8fCBfdHlwZSA9PSBXZWJFdmVudFNjcm9sbFdoZWVsCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxODUyODQ+IFRvdWNoRXZlbnRz
IG1heSBiZSBpbiBtb3JlIHRoYW4gb25lIHdpbmRvdyBzb21lIGRheS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hCZWdpbiB8fCBfdHlwZSA9PSBXZWJF
dmVudFRvdWNoQ2hhbmdlIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hFbmQgfHwgX3R5cGUgPT0g
V2ViRXZlbnRUb3VjaENhbmNlbAorICAgICAgICAgICAgICAgICAgICAgICAgLCAiV2ViRXZlbnRU
eXBlOiAlZCIsIF90eXBlKTsKKyAgICByZXR1cm4gX2xvY2F0aW9uSW5XaW5kb3c7Cit9CisKKy0g
KE5TU3RyaW5nICopY2hhcmFjdGVycworeworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudEtl
eURvd24gfHwgX3R5cGUgPT0gV2ViRXZlbnRLZXlVcCk7CisgICAgcmV0dXJuIFtbX2NoYXJhY3Rl
cnMgcmV0YWluXSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKE5TU3RyaW5nICopY2hhcmFjdGVyc0ln
bm9yaW5nTW9kaWZpZXJzCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50S2V5RG93biB8
fCBfdHlwZSA9PSBXZWJFdmVudEtleVVwKTsKKyAgICByZXR1cm4gW1tfY2hhcmFjdGVyc0lnbm9y
aW5nTW9kaWZpZXJzIHJldGFpbl0gYXV0b3JlbGVhc2VdOworfQorCistIChXZWJFdmVudEZsYWdz
KW1vZGlmaWVyRmxhZ3MKK3sKKyAgICByZXR1cm4gX21vZGlmaWVyRmxhZ3M7Cit9CisKKy0gKEJP
T0wpaXNLZXlSZXBlYXRpbmcKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRLZXlEb3du
IHx8IF90eXBlID09IFdlYkV2ZW50S2V5VXApOworICAgIHJldHVybiBfa2V5UmVwZWF0aW5nOwor
fQorCisvLyBGSVhNRTogdG8gYmUgcmVtb3ZlZAorLSAoQk9PTClpc1BvcHVwVmFyaWFudAorewor
ICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudEtleURvd24gfHwgX3R5cGUgPT0gV2ViRXZlbnRL
ZXlVcCk7CisgICAgcmV0dXJuIF9wb3B1cFZhcmlhbnQ7Cit9CisKKy0gKE5TVUludGVnZXIpa2V5
Ym9hcmRGbGFncworeworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudEtleURvd24gfHwgX3R5
cGUgPT0gV2ViRXZlbnRLZXlVcCk7CisgICAgcmV0dXJuIF9rZXlib2FyZEZsYWdzOworfQorCist
ICh1aW50MTZfdClrZXlDb2RlCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50S2V5RG93
biB8fCBfdHlwZSA9PSBXZWJFdmVudEtleVVwKTsKKyAgICByZXR1cm4gX2tleUNvZGU7Cit9CisK
Ky0gKEJPT0wpaXNUYWJLZXkKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRLZXlEb3du
IHx8IF90eXBlID09IFdlYkV2ZW50S2V5VXApOworICAgIHJldHVybiBfdGFiS2V5OworfQorCist
IChXZWJFdmVudENoYXJhY3RlclNldCljaGFyYWN0ZXJTZXQKK3sKKyAgICBBU1NFUlQoX3R5cGUg
PT0gV2ViRXZlbnRLZXlEb3duIHx8IF90eXBlID09IFdlYkV2ZW50S2V5VXApOworICAgIHJldHVy
biBfY2hhcmFjdGVyU2V0OworfQorCistIChmbG9hdClkZWx0YVgKK3sKKyAgICBBU1NFUlQoX3R5
cGUgPT0gV2ViRXZlbnRTY3JvbGxXaGVlbCk7CisgICAgcmV0dXJuIF9kZWx0YVg7Cit9CisKKy0g
KGZsb2F0KWRlbHRhWQoreworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudFNjcm9sbFdoZWVs
KTsKKyAgICByZXR1cm4gX2RlbHRhWTsKK30KKworLy8gVG91Y2gKKy0gKHVuc2lnbmVkKXRvdWNo
Q291bnQKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEJlZ2luIHx8IF90eXBl
ID09IFdlYkV2ZW50VG91Y2hDaGFuZ2UgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEVuZCB8fCBf
dHlwZSA9PSBXZWJFdmVudFRvdWNoQ2FuY2VsKTsKKyAgICByZXR1cm4gX3RvdWNoQ291bnQ7Cit9
CisKKy0gKE5TQXJyYXkgKil0b3VjaExvY2F0aW9ucworeworICAgIEFTU0VSVChfdHlwZSA9PSBX
ZWJFdmVudFRvdWNoQmVnaW4gfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENoYW5nZSB8fCBfdHlw
ZSA9PSBXZWJFdmVudFRvdWNoRW5kIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDYW5jZWwpOwor
ICAgIHJldHVybiBfdG91Y2hMb2NhdGlvbnM7Cit9CisKKy0gKE5TQXJyYXkgKil0b3VjaElkZW50
aWZpZXJzCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50VG91Y2hCZWdpbiB8fCBfdHlw
ZSA9PSBXZWJFdmVudFRvdWNoQ2hhbmdlIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hFbmQgfHwg
X3R5cGUgPT0gV2ViRXZlbnRUb3VjaENhbmNlbCk7CisgICAgcmV0dXJuIF90b3VjaElkZW50aWZp
ZXJzOworfQorCistIChOU0FycmF5ICopdG91Y2hQaGFzZXMKK3sKKyAgICBBU1NFUlQoX3R5cGUg
PT0gV2ViRXZlbnRUb3VjaEJlZ2luIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDaGFuZ2UgfHwg
X3R5cGUgPT0gV2ViRXZlbnRUb3VjaEVuZCB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoQ2FuY2Vs
KTsKKyAgICByZXR1cm4gX3RvdWNoUGhhc2VzOworfQorCisvLyBHZXN0dXJlCistIChCT09MKWlz
R2VzdHVyZQoreworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudFRvdWNoQmVnaW4gfHwgX3R5
cGUgPT0gV2ViRXZlbnRUb3VjaENoYW5nZSB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoRW5kIHx8
IF90eXBlID09IFdlYkV2ZW50VG91Y2hDYW5jZWwpOworICAgIHJldHVybiBfaXNHZXN0dXJlOwor
fQorCistIChmbG9hdClnZXN0dXJlU2NhbGUKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZl
bnRUb3VjaEJlZ2luIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDaGFuZ2UgfHwgX3R5cGUgPT0g
V2ViRXZlbnRUb3VjaEVuZCB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoQ2FuY2VsKTsKKyAgICBy
ZXR1cm4gX2dlc3R1cmVTY2FsZTsKK30KKworLSAoZmxvYXQpZ2VzdHVyZVJvdGF0aW9uCit7Cisg
ICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50VG91Y2hCZWdpbiB8fCBfdHlwZSA9PSBXZWJFdmVu
dFRvdWNoQ2hhbmdlIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hFbmQgfHwgX3R5cGUgPT0gV2Vi
RXZlbnRUb3VjaENhbmNlbCk7CisgICAgcmV0dXJuIF9nZXN0dXJlUm90YXRpb247Cit9CisKK0Bl
bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5
OWU0MTIxZTdhOWNmOWQ2YWZiN2Y4NzBmZWE5NjdhNjQyNjg4MjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCkBAIC0wLDAgKzEsMjc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJXaWRnZXQuaCIKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJD
dXJzb3IuaCIKKyNpbXBvcnQgIkRvY3VtZW50LmgiCisjaW1wb3J0ICJGb250LmgiCisjaW1wb3J0
ICJGcmFtZS5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJQYWdlLmgi
CisjaW1wb3J0ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbXBvcnQgIlNjcm9sbFZpZXcuaCIK
KyNpbXBvcnQgIldBS1Njcm9sbFZpZXcuaCIKKyNpbXBvcnQgIldBS1ZpZXcuaCIKKyNpbXBvcnQg
IldBS1dpbmRvdy5oIgorI2ltcG9ydCAiV2ViQ29yZUZyYW1lVmlldy5oIgorI2ltcG9ydCAiV2Vi
Q29yZVZpZXcuaCIKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGludGVyZmFjZSBOU1Zp
ZXcgKFdlYlNldFNlbGVjdGVkTWV0aG9kcykKKy0gKHZvaWQpc2V0SXNTZWxlY3RlZDooQk9PTClp
c1NlbGVjdGVkOworLSAodm9pZCl3ZWJQbHVnSW5TZXRJc1NlbGVjdGVkOihCT09MKWlzU2VsZWN0
ZWQ7CitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgc2FmZVJlbW92
ZUZyb21TdXBlcnZpZXcoTlNWaWV3ICp2aWV3KQoreworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQg
cHJvYmFibHkgY2hhbmdlIHRoZSBmaXJzdCByZXNwb25kZXIgb2YgdGhlIHdpbmRvdyBpZgorICAg
IC8vIGl0IGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgdmlldyB3ZSByZW1vdmUuCisgICAgLy8gU2Vl
OiA8cmRhcjovL3Byb2JsZW0vMTAzNjAxODY+CisgICAgW3ZpZXcgcmVtb3ZlRnJvbVN1cGVydmll
d107Cit9CisKK1dpZGdldDo6V2lkZ2V0KE5TVmlldyogdmlldykKK3sKKyAgICBpbml0KHZpZXcp
OworfQorCitXaWRnZXQ6On5XaWRnZXQoKSAKK3sKKyAgICByZWxlYXNlUGxhdGZvcm1XaWRnZXQo
KTsKK30KKworLy8gRklYTUU6IFNob3VsZCBtb3ZlIHRoaXMgdG8gQ2hyb21lOyBiYWQgbGF5ZXJp
bmcgdGhhdCB0aGlzIGtub3dzIGFib3V0IEZyYW1lLgordm9pZCBXaWRnZXQ6OnNldEZvY3VzKGJv
b2wgZm9jdXNlZCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZm9jdXNlZCk7Cit9CisKK3ZvaWQgV2lk
Z2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikKK3sKK30KKwordm9pZCBXaWRnZXQ6OnNob3co
KQoreworICAgIGlmIChpc1NlbGZWaXNpYmxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNl
dFNlbGZWaXNpYmxlKHRydWUpOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
ICAgIFtnZXRPdXRlclZpZXcoKSBzZXRIaWRkZW46Tk9dOworICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Cit9CisKK3ZvaWQgV2lkZ2V0OjpoaWRlKCkKK3sKKyAgICBpZiAoIWlzU2VsZlZp
c2libGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOwor
CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIFtnZXRPdXRlclZpZXcoKSBz
ZXRIaWRkZW46WUVTXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitJbnRS
ZWN0IFdpZGdldDo6ZnJhbWVSZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0
KCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lOworICAgIAorICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChbZ2V0T3V0ZXJWaWV3KCkg
ZnJhbWVdKTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIHJldHVy
biBtX2ZyYW1lOworfQorCit2b2lkIFdpZGdldDo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3Qg
JnJlY3QpCit7CisgICAgbV9mcmFtZSA9IHJlY3Q7CisgICAgCisgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworICAgIE5TVmlldyAqdiA9IGdldE91dGVyVmlldygpOworICAgIE5TUmVj
dCBmID0gcmVjdDsKKyAgICBpZiAoIU5TRXF1YWxSZWN0cyhmLCBbdiBmcmFtZV0pKSB7CisgICAg
ICAgIFt2IHNldEZyYW1lOmZdOworICAgICAgICBbdiBzZXROZWVkc0Rpc3BsYXk6IE5PXTsKKyAg
ICB9CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworTlNWaWV3KiBXaWRnZXQ6
OmdldE91dGVyVmlldygpIGNvbnN0Cit7CisgICAgTlNWaWV3KiB2aWV3ID0gcGxhdGZvcm1XaWRn
ZXQoKTsKKworICAgIC8vIElmIHRoaXMgd2lkZ2V0J3MgdmlldyBpcyBhIFdlYkNvcmVGcmFtZVNj
cm9sbFZpZXcgdGhlbiB3ZQorICAgIC8vIHJlc2l6ZSBpdHMgY29udGFpbmluZyB2aWV3LCBhIFdl
YkZyYW1lVmlldy4KKyAgICBpZiAoW3ZpZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChX
ZWJDb3JlRnJhbWVTY3JvbGxWaWV3KV0pIHsKKyAgICAgICAgdmlldyA9IFt2aWV3IHN1cGVydmll
d107CisgICAgICAgIEFTU0VSVCh2aWV3KTsKKyAgICB9CisKKyAgICByZXR1cm4gdmlldzsKK30K
Kwordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgSW50UmVjdCYg
cikKK3sKKyAgICBpZiAocC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgTlNWaWV3ICp2aWV3ID0gZ2V0T3V0ZXJWaWV3KCk7CisKKyAgICBDR0NvbnRleHRS
ZWYgY2dDb250ZXh0ID0gcC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0U2F2ZUdT
dGF0ZShjZ0NvbnRleHQpOworCisgICAgTlNSZWN0IHZpZXdGcmFtZSA9IFt2aWV3IGZyYW1lXTsK
KyAgICBOU1JlY3Qgdmlld0JvdW5kcyA9IFt2aWV3IGJvdW5kc107CisgICAgQ0dDb250ZXh0VHJh
bnNsYXRlQ1RNKGNnQ29udGV4dCwgdmlld0ZyYW1lLm9yaWdpbi54IC0gdmlld0JvdW5kcy5vcmln
aW4ueCwgdmlld0ZyYW1lLm9yaWdpbi55IC0gdmlld0JvdW5kcy5vcmlnaW4ueSk7CisKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmlu
Z09wYWNpdHk6W3ZpZXcgY29udmVydFJlY3Q6ciBmcm9tVmlldzpbdmlldyBzdXBlcnZpZXddXSBp
bkNvbnRleHQ6Y2dDb250ZXh0XTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisg
ICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjZ0NvbnRleHQpOworfQorCit2b2lkIFdpZGdldDo6
c2V0SXNTZWxlY3RlZChib29sIC8qaXNTZWxlY3RlZCovKQoreworfQorCit2b2lkIFdpZGdldDo6
YWRkVG9TdXBlcnZpZXcoTlNWaWV3ICp2aWV3KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKKworICAgIEFTU0VSVCh2aWV3KTsKKyAgICBOU1ZpZXcgKnN1YnZpZXcgPSBnZXRP
dXRlclZpZXcoKTsKKworICAgIGlmICghc3VidmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUKCFbdmlldyBpc0Rlc2NlbmRhbnRPZjpzdWJ2aWV3XSk7CisgICAgCisgICAgaWYgKFtz
dWJ2aWV3IHN1cGVydmlld10gIT0gdmlldykKKyAgICAgICAgW3ZpZXcgYWRkU3VidmlldzpzdWJ2
aWV3XTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgV2lkZ2V0
OjpyZW1vdmVGcm9tU3VwZXJ2aWV3KCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisgICAgc2FmZVJlbW92ZUZyb21TdXBlcnZpZXcoZ2V0T3V0ZXJWaWV3KCkpOworICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0RnJv
bVJvb3RUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmICghcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkK
KyAgICAgICAgcmV0dXJuIHJlY3Q7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisgICAgQVNTRVJUKFtyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIGlzS2luZE9mQ2xhc3M6
W05TU2Nyb2xsVmlldyBjbGFzc11dKTsKKyAgICBXQUtTY3JvbGxWaWV3ICp2aWV3ID0gc3RhdGlj
X2Nhc3Q8V0FLU2Nyb2xsVmlldyAqPihyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKTsKKyAg
ICBpZiAoV0FLVmlldyAqZG9jdW1lbnRWaWV3ID0gW3ZpZXcgZG9jdW1lbnRWaWV3XSkKKyAgICAg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoW2RvY3VtZW50VmlldyBjb252ZXJ0UmVjdDpyZWN0
IHRvVmlldzpuaWxdKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChbdmlldyBjb252ZXJ0
UmVjdDpyZWN0IHRvVmlldzpuaWxdKTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRh
aW5pbmdXaW5kb3dUb1Jvb3QoY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIGlmICghcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkKKyAgICAg
ICAgcmV0dXJuIHJlY3Q7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAg
QVNTRVJUKFtyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIGlzS2luZE9mQ2xhc3M6W05TU2Ny
b2xsVmlldyBjbGFzc11dKTsKKyAgICBXQUtTY3JvbGxWaWV3ICp2aWV3ID0gc3RhdGljX2Nhc3Q8
V0FLU2Nyb2xsVmlldyAqPihyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKTsKKyAgICBpZiAo
V0FLVmlldyAqZG9jdW1lbnRWaWV3ID0gW3ZpZXcgZG9jdW1lbnRWaWV3XSkKKyAgICAgICAgcmV0
dXJuIGVuY2xvc2luZ0ludFJlY3QoW2RvY3VtZW50VmlldyBjb252ZXJ0UmVjdDpyZWN0IGZyb21W
aWV3Om5pbF0pOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KFt2aWV3IGNvbnZlcnRSZWN0
OnJlY3QgZnJvbVZpZXc6bmlsXSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKwor
ICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRGcm9tUm9vdFRv
Q29udGFpbmluZ1dpbmRvdyhjb25zdCBXaWRnZXQqIHJvb3RXaWRnZXQsIGNvbnN0IEludFBvaW50
JiBwb2ludCkKK3sKKyAgICBpZiAoIXJvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpCisgICAg
ICAgIHJldHVybiBwb2ludDsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAg
ICBBU1NFUlQoW3Jvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgaXNLaW5kT2ZDbGFzczpbTlNT
Y3JvbGxWaWV3IGNsYXNzXV0pOworICAgIFdBS1Njcm9sbFZpZXcgKnZpZXcgPSBzdGF0aWNfY2Fz
dDxXQUtTY3JvbGxWaWV3ICo+KHJvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpOworICAgIE5T
UG9pbnQgY29udmVydGVkUG9pbnQ7CisgICAgaWYgKFdBS1ZpZXcgKmRvY3VtZW50VmlldyA9IFt2
aWV3IGRvY3VtZW50Vmlld10pCisgICAgICAgIGNvbnZlcnRlZFBvaW50ID0gW2RvY3VtZW50Vmll
dyBjb252ZXJ0UG9pbnQ6cG9pbnQgdG9WaWV3Om5pbF07CisgICAgZWxzZQorICAgICAgICBjb252
ZXJ0ZWRQb2ludCA9IFt2aWV3IGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6bmlsXTsKKyAgICBy
ZXR1cm4gSW50UG9pbnQocm91bmRmKGNvbnZlcnRlZFBvaW50LngpLCByb3VuZGYoY29udmVydGVk
UG9pbnQueSkpOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4g
cG9pbnQ7Cit9CisKK0ludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93
VG9Sb290KGNvbnN0IFdpZGdldCogcm9vdFdpZGdldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQor
eworICAgIGlmICghcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJu
IHBvaW50OworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIEFTU0VSVChb
cm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSBpc0tpbmRPZkNsYXNzOltOU1Njcm9sbFZpZXcg
Y2xhc3NdXSk7CisgICAgV0FLU2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19jYXN0PFdBS1Njcm9s
bFZpZXcgKj4ocm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSk7CisgICAgTlNQb2ludCBjb252
ZXJ0ZWRQb2ludDsKKyAgICBpZiAoV0FLVmlldyAqZG9jdW1lbnRWaWV3ID0gW3ZpZXcgZG9jdW1l
bnRWaWV3XSkKKyAgICAgICAgY29udmVydGVkUG9pbnQgPSBJbnRQb2ludChbZG9jdW1lbnRWaWV3
IGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpuaWxdKTsKKyAgICBlbHNlCisgICAgICAgIGNv
bnZlcnRlZFBvaW50ID0gSW50UG9pbnQoW3ZpZXcgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3
Om5pbF0pOworICAgIHJldHVybiBJbnRQb2ludChyb3VuZGYoY29udmVydGVkUG9pbnQueCksIHJv
dW5kZihjb252ZXJ0ZWRQb2ludC55KSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KworICAgIHJldHVybiBwb2ludDsKK30KKworTlNWaWV3ICpXaWRnZXQ6OnBsYXRmb3JtV2lkZ2V0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93aWRnZXQuZ2V0KCk7Cit9CisKK3ZvaWQgV2lkZ2V0
OjpzZXRQbGF0Zm9ybVdpZGdldChOU1ZpZXcgKndpZGdldCkKK3sKKyAgICBpZiAod2lkZ2V0ID09
IG1fd2lkZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3dpZGdldCA9IHdpZGdldDsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVl
cERpc2FibGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBE
aXNhYmxlci5jcHAKaW5kZXggNWI5OTdjYWNhNzhmZTI4NzVkNDkzNGQxNWY0ZGNhZTc4NDgxM2E0
Mi4uYjM2YjY2ZDhlOGZiYTQyNDcyNThjMDg2YTk0YjRjZDgxMGY2Nzk5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERpc2FibGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuY3BwCkBA
IC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGlzcGxheVNs
ZWVwRGlzYWJsZXIuaCIKIAorI2lmICFQTEFURk9STShJT1MpCisKICNpbmNsdWRlIDxJT0tpdC9w
d3JfbWd0L0lPUE1MaWIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTU0LDMg
KzU2LDEyIEBAIERpc3BsYXlTbGVlcERpc2FibGVyOjp+RGlzcGxheVNsZWVwRGlzYWJsZXIoKQog
fQogCiB9CisKKyNlbHNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK0Rpc3BsYXlTbGVlcERpc2Fi
bGVyOjpEaXNwbGF5U2xlZXBEaXNhYmxlcihjb25zdCBjaGFyICopIHsgfQorRGlzcGxheVNsZWVw
RGlzYWJsZXI6On5EaXNwbGF5U2xlZXBEaXNhYmxlcigpIHsgfQorfQorCisjZW5kaWYgLy8gIVBM
QVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EaXNw
bGF5U2xlZXBEaXNhYmxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3BsYXlT
bGVlcERpc2FibGVyLmgKaW5kZXggMmM5YTE4NDJmNDkwYWQ5MDcxMzEwOTk0OTY2ZGFiYTY3ZjNl
NDI3Zi4uYTY5YmY4ZGQ5NDY4ZmY0NjMzN2IwNWI0MDIyNDA0OGY0NjAwY2YzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERpc2FibGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERpc2FibGVyLmgKQEAg
LTQwLDcgKzQwLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBEaXNwbGF5U2xlZXBEaXNhYmxl
cihjb25zdCBjaGFyKiByZWFzb24pOwogICAgIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgdWlu
dDMyX3QgbV9kaXNhYmxlRGlzcGxheVNsZWVwQXNzZXJ0aW9uOworI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RmlsZVN5c3RlbU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9GaWxlU3lzdGVt
TWFjLm1tCmluZGV4IDIxNmI2MDU5NThlMTM3YjI5YWEyODFlZGQ0ZjJjODNkNmFmOTAwZTAuLjY4
ZjZkZjZjNjU1YTY5MGVkNTkyMDI1ZGNjOWJhNjBhNmU1NmNjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9GaWxlU3lzdGVtTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9GaWxlU3lzdGVtTWFjLm1tCkBAIC02Nyw2ICs2Nyw4IEBAIFN0cmlu
ZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFu
ZGxlJiBwbGF0Zm9ybUZpbGVICiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcG9yYXJ5
RmlsZVBhdGguZGF0YSgpKTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCisKIHZvaWQgc2V0TWV0
YWRhdGFVUkwoU3RyaW5nJiBVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGNvbnN0
IFN0cmluZyYgcGF0aCkKIHsKICAgICBOU1VSTCAqVVJMID0gVVJMV2l0aFVzZXJUeXBlZFN0cmlu
ZyhVUkxTdHJpbmcsIG5pbCk7CkBAIC04Miw3ICs4NCw2IEBAIHZvaWQgc2V0TWV0YWRhdGFVUkwo
U3RyaW5nJiBVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGNvbnN0IFN0cmluZyYg
cGF0CiAgICAgfSk7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQogYm9vbCBjYW5FeGNsdWRlRnJv
bUJhY2t1cCgpCiB7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05NCw2ICs5NSw3IEBAIGJvb2wgZXhj
bHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIENTQmFja3VwU2V0SXRlbUV4
Y2x1ZGVkKHBhdGhBc1VSTChwYXRoKS5nZXQoKSwgVFJVRSwgRkFMU0UpOyAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9LaWxsUmluZ01hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9LaWxsUmluZ01hYy5tbQppbmRleCAzMmU3YzcyMjYyYTZlZTY0Mjk4
NjEzMDAxYmE1Nzc4NTg3ZDdhNDE5Li4xMDE1MDcwOGEzOTgzMTRlOTA2ZDg3N2ExYzkwOTZhZWI3
ZjkyNTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvS2lsbFJpbmdN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjLm1tCkBA
IC04MSwzICs4MSw0IEBAIHZvaWQgS2lsbFJpbmc6OnNldFRvWWFua2VkU3RhdGUoKQogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTWFjLm1tCmluZGV4IGFjOWQwY2ZhY2NkY2I0
YTMyOWQzYzI5ZmNkYzAwODI2OWY4MDkwOGQuLjkxNjM2NTNkZWNjMzMwOGU0MWFlM2M5MGZlNTc1
YjRiZmEzNzNlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9NZW1v
cnlQcmVzc3VyZUhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L01lbW9yeVByZXNzdXJlSGFuZGxlck1hYy5tbQpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIE1lbW9y
eVByZXNzdXJlSGFuZGxlcjo6aW5zdGFsbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0jaWYgTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmICFQTEFURk9STShJT1MpICYmIE1BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICAgICAgX2NhY2hlX2V2ZW50X3NvdXJj
ZSA9IHdrQ3JlYXRlTWVtb3J5U3RhdHVzUHJlc3N1cmVDcml0aWNhbERpc3BhdGNoT25NYWluUXVl
dWUoKTsKICNlbHNlCiAgICAgICAgIF9jYWNoZV9ldmVudF9zb3VyY2UgPSB3a0NyZWF0ZVZNUHJl
c3N1cmVEaXNwYXRjaE9uTWFpblF1ZXVlKCk7CkBAIC0xNTgsNyArMTU4LDkgQEAgdm9pZCBNZW1v
cnlQcmVzc3VyZUhhbmRsZXI6OnJlbGVhc2VNZW1vcnkoYm9vbCkKIAogICAgIG1lbW9yeUNhY2hl
KCktPnBydW5lVG9QZXJjZW50YWdlKDApOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBMYXll
clBvb2w6OnNoYXJlZFBvb2woKS0+ZHJhaW4oKTsKKyNlbmRpZgogCiAgICAgY3NzVmFsdWVQb29s
KCkuZHJhaW4oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bs
YXRmb3JtQ2xvY2tDTS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUNs
b2NrQ00ubW0KaW5kZXggMzNmNTRjOWExNGYzMGU0YTI1MmViNWI4MjBiNGVhYWE2NWM3ZTAzNS4u
MDc0MDA1ZWJhZDg0NDZjMWRjMDNlNGJhYWViYzM3MWE1NDM1YjUwYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtQ2xvY2tDTS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1DbG9ja0NNLm1tCkBAIC0zMSwxMSArMzEsMTkg
QEAKIAogI2ltcG9ydCAiTWVkaWFUaW1lTWFjLmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgor
I2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPENvcmVNZWRpYS9DTUF1ZGlvQ2xvY2suaD4KKyNl
bHNlCiAjaW1wb3J0IDxDb3JlTWVkaWEvQ01BdWRpb0RldmljZUNsb2NrLmg+CisjZW5kaWYKIAog
U09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChDb3JlTWVkaWEpCiAKKyNpZiBQTEFURk9STShJ
T1MpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTUF1ZGlvQ2xvY2tDcmVhdGUsIE9TU3RhdHVzLCAo
Q0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDTUNsb2NrUmVmICpjbG9ja091dCksIChhbGxvY2F0
b3IsIGNsb2NrT3V0KSkKKyNlbHNlCiBTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTUF1ZGlvRGV2aWNl
Q2xvY2tDcmVhdGUsIE9TU3RhdHVzLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDRlN0cmlu
Z1JlZiBkZXZpY2VVSUQsIENNQ2xvY2tSZWYgKmNsb2NrT3V0KSwgKGFsbG9jYXRvciwgZGV2aWNl
VUlELCBjbG9ja091dCkpCisjZW5kaWYKIFNPRlRfTElOSyhDb3JlTWVkaWEsIENNVGltZWJhc2VD
cmVhdGVXaXRoTWFzdGVyQ2xvY2ssIE9TU3RhdHVzLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9y
LCBDTUNsb2NrUmVmIG1hc3RlckNsb2NrLCBDTVRpbWViYXNlUmVmICp0aW1lYmFzZU91dCksIChh
bGxvY2F0b3IsIG1hc3RlckNsb2NrLCB0aW1lYmFzZU91dCkpCiBTT0ZUX0xJTksoQ29yZU1lZGlh
LCBDTVRpbWViYXNlU2V0VGltZSwgT1NTdGF0dXMsIChDTVRpbWViYXNlUmVmIHRpbWViYXNlLCBD
TVRpbWUgdGltZSksICh0aW1lYmFzZSwgdGltZSkpCiBTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRp
bWViYXNlR2V0VGltZSwgQ01UaW1lLCAoQ01UaW1lYmFzZVJlZiB0aW1lYmFzZSksICh0aW1lYmFz
ZSkpCkBAIC01NCw3ICs2MiwxMSBAQCBQbGF0Zm9ybUNsb2NrQ006OlBsYXRmb3JtQ2xvY2tDTSgp
CiAgICAgLCBtX3J1bm5pbmcoZmFsc2UpCiB7CiAgICAgQ01DbG9ja1JlZiByYXdDbG9ja1B0ciA9
IDA7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIENNQXVkaW9DbG9ja0NyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCAmcmF3Q2xvY2tQdHIpOworI2Vsc2UKICAgICBDTUF1ZGlvRGV2aWNlQ2xvY2tD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgTlVMTCwgJnJhd0Nsb2NrUHRyKTsKKyNlbmRpZgog
ICAgIFJldGFpblB0cjxDTUNsb2NrUmVmPiBjbG9jayA9IGFkb3B0Q0YocmF3Q2xvY2tQdHIpOwog
ICAgIGluaXRpYWxpemVXaXRoVGltaW5nU291cmNlKGNsb2NrLmdldCgpKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgKaW5kZXggZTk0NmIzZDlkZTUzOWRmZmNi
MzhlMzk1OGViODBhYmU1OWZlMTE2OC4uMjU3ZDgzZDA3MThkYzJiNTgxZTQwZTNlMjRkNmU2NWVj
MDBkMjY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5r
aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgKQEAg
LTI5LDYgKzI5LDEwIEBACiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCA8ZGxm
Y24uaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2Vu
ZGlmCisKICNkZWZpbmUgU09GVF9MSU5LX0xJQlJBUlkobGliKSBcCiAgICAgc3RhdGljIHZvaWQq
IGxpYiMjTGlicmFyeSgpIFwKICAgICB7IFwKQEAgLTYyLDYgKzY2LDE1IEBACiAgICAgICAgIHJl
dHVybiBmcmFtZXdvcmtMaWJyYXJ5OyBcCiAgICAgfQogCisjaWYgUExBVEZPUk0oSU9TKQorI2Rl
ZmluZSBTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoZnJhbWV3b3JrKSBcCisg
ICAgc3RhdGljIHZvaWQqIGZyYW1ld29yayMjTGlicmFyeSgpIFwKKyAgICB7IFwKKyAgICAgICAg
c3RhdGljIHZvaWQqIGZyYW1ld29ya0xpYnJhcnkgPSBkbG9wZW4oIi9TeXN0ZW0vTGlicmFyeS9Q
cml2YXRlRnJhbWV3b3Jrcy8iICNmcmFtZXdvcmsgIi5mcmFtZXdvcmsvIiAjZnJhbWV3b3JrLCBS
VExEX05PVyk7IFwKKyAgICAgICAgcmV0dXJuIGZyYW1ld29ya0xpYnJhcnk7IFwKKyAgICB9Cisj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiAjZGVmaW5lIFNPRlRfTElOS19TVEFHRURfRlJBTUVX
T1JLKGZyYW1ld29yaywgdW5zdGFnZWRMb2NhdGlvbiwgdmVyc2lvbikgXAogICAgIHN0YXRpYyB2
b2lkKiBmcmFtZXdvcmsjI0xpYnJhcnkoKSBcCiAgICAgeyBcCkBAIC05OSw2ICsxMTIsMzAgQEAK
ICAgICAgICAgcmV0dXJuIHNvZnRMaW5rIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7IFwK
ICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisjZGVmaW5lIFNPRlRfTElOS19NQVlfRkFJTChm
cmFtZXdvcmssIGZ1bmN0aW9uTmFtZSwgcmVzdWx0VHlwZSwgcGFyYW1ldGVyRGVjbGFyYXRpb25z
LCBwYXJhbWV0ZXJOYW1lcykgXAorICAgIHN0YXRpYyByZXN1bHRUeXBlICgqc29mdExpbmsjI2Z1
bmN0aW9uTmFtZSkgcGFyYW1ldGVyRGVjbGFyYXRpb25zID0gMDsgXAorICAgIFwKKyAgICBzdGF0
aWMgYm9vbCBpbml0IyNmdW5jdGlvbk5hbWUoKSBcCisgICAgeyBcCisgICAgICAgIEFTU0VSVCgh
c29mdExpbmsjI2Z1bmN0aW9uTmFtZSk7IFwKKyAgICAgICAgc29mdExpbmsjI2Z1bmN0aW9uTmFt
ZSA9IChyZXN1bHRUeXBlICgqKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMpIGRsc3ltKGZyYW1ld29y
ayMjTGlicmFyeSgpLCAjZnVuY3Rpb25OYW1lKTsgXAorICAgICAgICByZXR1cm4gISFzb2Z0TGlu
ayMjZnVuY3Rpb25OYW1lOyBcCisgICAgfSBcCisgICAgXAorICAgIHN0YXRpYyBib29sIGNhbkxv
YWQjI2Z1bmN0aW9uTmFtZSgpIFwKKyAgICB7IFwKKyAgICAgICAgc3RhdGljIGJvb2wgbG9hZGVk
ID0gaW5pdCMjZnVuY3Rpb25OYW1lKCk7IFwKKyAgICAgICAgcmV0dXJuIGxvYWRlZDsgXAorICAg
IH0gXAorICAgIFwKKyAgICByZXN1bHRUeXBlIGZ1bmN0aW9uTmFtZSBwYXJhbWV0ZXJEZWNsYXJh
dGlvbnMgXAorICAgIHsgXAorICAgICAgICBBU1NFUlQoc29mdExpbmsjI2Z1bmN0aW9uTmFtZSk7
IFwKKyAgICAgICAgcmV0dXJuIHNvZnRMaW5rIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7
IFwKKyAgICB9CisjZW5kaWYKKwogLyogY2FsbGluZ0NvbnZlbnRpb24gaXMgdW51c2VkIG9uIE1h
YyBidXQgaXMgaGVyZSB0byBrZWVwIHRoZSBtYWNybyBwcm90b3R5cGUgdGhlIHNhbWUgYmV0d2Vl
biBNYWMgYW5kIFdpbmRvd3MuICovCiAjZGVmaW5lIFNPRlRfTElOS19PUFRJT05BTChmcmFtZXdv
cmssIGZ1bmN0aW9uTmFtZSwgcmVzdWx0VHlwZSwgY2FsbGluZ0NvbnZlbnRpb24sIHBhcmFtZXRl
ckRlY2xhcmF0aW9ucykgXAogICAgIHR5cGVkZWYgcmVzdWx0VHlwZSAoKmZ1bmN0aW9uTmFtZSMj
UHRyVHlwZSkgcGFyYW1ldGVyRGVjbGFyYXRpb25zOyBcCkBAIC0yMDIsMyArMjM5LDMyIEBACiAg
ICAgICAgIGdldCMjbmFtZSA9IG5hbWUjI0Z1bmN0aW9uOyBcCiAgICAgICAgIHJldHVybiBjb25z
dGFudCMjbmFtZTsgXAogICAgIH0KKworI2lmIFBMQVRGT1JNKElPUykKKyNkZWZpbmUgU09GVF9M
SU5LX0NPTlNUQU5UX01BWV9GQUlMKGZyYW1ld29yaywgbmFtZSwgdHlwZSkgXAorICAgIHN0YXRp
YyBib29sIGluaXQjI25hbWUoKTsgXAorICAgIHN0YXRpYyB0eXBlICgqZ2V0IyNuYW1lKSgpID0g
MDsgXAorICAgIHN0YXRpYyB0eXBlIGNvbnN0YW50IyNuYW1lOyBcCisgICAgXAorICAgIHN0YXRp
YyB0eXBlIG5hbWUjI0Z1bmN0aW9uKCkgXAorICAgIHsgXAorICAgICAgICByZXR1cm4gY29uc3Rh
bnQjI25hbWU7IFwKKyAgICB9XAorICAgIFwKKyAgICBzdGF0aWMgYm9vbCBjYW5Mb2FkIyNuYW1l
KCkgXAorICAgIHsgXAorICAgICAgICBzdGF0aWMgYm9vbCBsb2FkZWQgPSBpbml0IyNuYW1lKCk7
IFwKKyAgICAgICAgcmV0dXJuIGxvYWRlZDsgXAorICAgIH0gXAorICAgIFwKKyAgICBzdGF0aWMg
Ym9vbCBpbml0IyNuYW1lKCkgXAorICAgIHsgXAorICAgICAgICBBU1NFUlQoIWdldCMjbmFtZSk7
IFwKKyAgICAgICAgdm9pZCogY29uc3RhbnQgPSBkbHN5bShmcmFtZXdvcmsjI0xpYnJhcnkoKSwg
I25hbWUpOyBcCisgICAgICAgIGlmICghY29uc3RhbnQpIFwKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgXAorICAgICAgICBjb25zdGFudCMjbmFtZSA9ICpzdGF0aWNfY2FzdDx0eXBlKj4oY29u
c3RhbnQpOyBcCisgICAgICAgIGdldCMjbmFtZSA9IG5hbWUjI0Z1bmN0aW9uOyBcCisgICAgICAg
IHJldHVybiB0cnVlOyBcCisgICAgfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU3lzdGVtVmVyc2lvbk1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TeXN0ZW1WZXJzaW9uTWFjLm1tCmluZGV4IGJjYzExYmE5YjU4OTkzZmQ1ODhhMTFj
OTk5MDU1YzlmNzZjMzJmY2QuLmVjZDU1ZTIyMzdjOTkwMTE5NjUyOGQ0MDM5NWFjNzJiYjFhYWVh
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TeXN0ZW1WZXJzaW9u
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TeXN0ZW1WZXJzaW9uTWFj
Lm1tCkBAIC0yNyw2ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFQTEFU
Rk9STShJT1MpCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAK
IHN0YXRpYyBOU1N0cmluZyAqY3JlYXRlU3lzdGVtTWFya2V0aW5nVmVyc2lvbigpCkBAIC02NCwx
MSArNjUsMTUgQEAgc3RhdGljIE5TU3RyaW5nICpjcmVhdGVTeXN0ZW1NYXJrZXRpbmdWZXJzaW9u
KCkKIAogI2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAog
Ci0KIE5TU3RyaW5nICpzeXN0ZW1NYXJrZXRpbmdWZXJzaW9uKCkKIHsKICAgICBzdGF0aWMgTlNT
dHJpbmcgKnZlcnNpb24gPSBjcmVhdGVTeXN0ZW1NYXJrZXRpbmdWZXJzaW9uKCk7CiAgICAgcmV0
dXJuIHZlcnNpb247CiB9CisjZWxzZQorCit9CisKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxT
Y3JlZW5QbGFjZWhvbGRlclZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJD
b3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oCmluZGV4IDdiMjQzYjBhMmYyNGMyMDU3Mzdh
YTM5NzhkMWE4YzZhZTRkYzQ0YzMuLjg3ZTY5OWFjZWMwYTY4MDg3ZWU5ZGVmZmRhNDA0MDg1MDhm
YzIzMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVs
bFNjcmVlblBsYWNlaG9sZGVyVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oCkBAIC0yMyw2ICsyMyw4IEBACiAg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmICFQTEFURk9STShJ
T1MpCisKICNpZm5kZWYgV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXdfaAogI2RlZmlu
ZSBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlld19oCiAKQEAgLTQwLDMgKzQyLDUgQEAK
IEBlbmQKIAogI2VuZGlmIC8vIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3X2gKKwor
I2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0KaW5k
ZXggYTk2ZGIwZTZiMWQxZGZhMzA3M2NjZjMyNGE5M2JmNDYyOGE2ZjFhMy4uMTNmNTYzZTkyODFl
N2E3YzJlNzVjNjYzNmEzYzlmMTU1OWJmZjljYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmll
dy5tbQpAQCAtMjQsNiArMjQsOCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpZiAh
UExBVEZPUk0oSU9TKQorCiAjaW5jbHVkZSAiV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZp
ZXcuaCIKIAogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKQEAgLTkzLDMgKzk1LDUgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB9CiAKIEBlbmQKKworI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1
bGxTY3JlZW5XYXJuaW5nVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNv
cmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcuaAppbmRleCBmNmVhOWFkNzg0ZWFlMmRlMDk1ZDFlMzBl
ZGQ3YzBjNTRmYTZjY2NkLi5lMmEzN2ZiNDI0MDgxMmIxOGRkMDhmMjNjM2JiODEyNzJjY2E2MTZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3Jl
ZW5XYXJuaW5nVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
RnVsbFNjcmVlbldhcm5pbmdWaWV3LmgKQEAgLTIzLDYgKzIzLDggQEAKICAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaWYgIVBMQVRGT1JNKElPUykKKwogI2lmbmRl
ZiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3X2gKICNkZWZpbmUgV2ViQ29yZUZ1bGxTY3Jl
ZW5XYXJuaW5nVmlld19oCiAKQEAgLTM5LDMgKzQxLDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLy8g
V2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlld19oCisKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9T
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2Ny
ZWVuV2FybmluZ1ZpZXcubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1
bGxTY3JlZW5XYXJuaW5nVmlldy5tbQppbmRleCBjNGUxZmEzMjkwYWQ0NDA0ZDYyZjJlMTE0YjBh
ZGZhMTZhZTE5MmMzLi4zNDk0Yjg4YWM5ZTQxNmJmZDViOWE5MDg3MjI3MDVlNGY2OTcxODdjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5X
YXJuaW5nVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1
bGxTY3JlZW5XYXJuaW5nVmlldy5tbQpAQCAtMjQsNiArMjQsOCBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaW5jbHVkZSAiV2ViQ29yZUZ1bGxT
Y3JlZW5XYXJuaW5nVmlldy5oIgogCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgpAQCAt
MTAzLDMgKzEwNSw1IEBAIHN0YXRpYyBjb25zdCBDR0Zsb2F0IFdhcm5pbmdWaWV3U2hhZG93UmFk
aXVzID0gNTsKICAgICByZXR1cm4gc2VsZjsKIH0KIEBlbmQKKworI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1
bGxTY3JlZW5XaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVs
bFNjcmVlbldpbmRvdy5oCmluZGV4IGRlNjM2NWE5NDE4MjE0NDQ0YzcxODFiNWUwY2RkZWRlNTk2
MThhYzAuLjYwMWUzNDhmMDA0NGMwMjNkZTUxYTAxODVhZTJiODVhNWIwYjc5YTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldpbmRv
dy5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFdlYkNvcmVGdWxsU2NyZWVuV2luZG93X2gK
ICNkZWZpbmUgV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3dfaAogCi0jaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgIVBMQVRGT1JNKElPUykKIAog
QGludGVyZmFjZSBXZWJDb3JlRnVsbFNjcmVlbldpbmRvdyA6IE5TV2luZG93CiBAZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5XaW5k
b3cubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5XaW5k
b3cubW0KaW5kZXggNTIwMjkyY2ZhYmViMDExYWU4MmRjY2YxMjY4ZjAyY2JkNTg0OTliMS4uNTMw
MmNkYTJlYTFlNDY3NWE5NzcyMTc5NWRkZmNkMTIxMmJmNjIzOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93Lm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5tbQpAQCAt
MjUsNyArMjUsNyBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmICFQTEFURk9STShJT1MpCiAK
ICNpbXBvcnQgIldlYkNvcmVGdWxsU2NyZWVuV2luZG93LmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TQ2VsbEV4dHJhcy5oCmluZGV4IDQ3ZWRmZjg2MWFl
YjRiYThkZjI5OGEwOGU4Yzg0MDg3ZGEzMGQ0NjAuLjlmZjc0NjJiMDc2NmMyNWFkMWE4NTAzZjkz
NjMyZTg2NTlmMTdiMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJDb3JlTlNDZWxsRXh0cmFzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YkNvcmVOU0NlbGxFeHRyYXMuaApAQCAtMjMsOCArMjMsMTIgQEAKICAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbXBvcnQgPEFw
cEtpdC9BcHBLaXQuaD4KIAogQGludGVyZmFjZSBOU0NlbGwgKFdlYkNvcmVGb2N1c1JpbmdEcmF3
aW5nKQogLSAodm9pZClfd2ViX2RyYXdGb2N1c1JpbmdXaXRoRnJhbWU6KE5TUmVjdCljZWxsRnJh
bWUgaW5WaWV3OihOU1ZpZXcgKiljb250cm9sVmlldzsKIEBlbmQKKworI2VuZGlmIC8vICFQTEFU
Rk9STShJT1MpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJD
b3JlTlNDZWxsRXh0cmFzLm0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5T
Q2VsbEV4dHJhcy5tCmluZGV4IGE1Njg5MzE3NGIzNzZkNzY5ZTVhOGQ3NTdiNjMwZTM0MDVkYzBk
MzIuLjBkNWIwZTcxNWNjM2E0MzRlYzVmNGJlOTkxOGMzNTlmYzBhMGEzODAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFzLm0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU0NlbGxFeHRyYXMubQpAQCAtMjYs
NiArMjYsOCBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXZWJDb3JlTlNDZWxsRXh0
cmFzLmgiCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiBAaW1wbGVtZW50YXRpb24gTlNDZWxsIChX
ZWJDb3JlRm9jdXNSaW5nRHJhd2luZykKIAogLSAodm9pZClfd2ViX2RyYXdGb2N1c1JpbmdXaXRo
RnJhbWU6KE5TUmVjdCljZWxsRnJhbWUgaW5WaWV3OihOU1ZpZXcgKiljb250cm9sVmlldwpAQCAt
NDAsMyArNDIsNiBAQCAtICh2b2lkKV93ZWJfZHJhd0ZvY3VzUmluZ1dpdGhGcmFtZTooTlNSZWN0
KWNlbGxGcmFtZSBpblZpZXc6KE5TVmlldyAqKWNvbnRyb2xWaQogfQogCiBAZW5kCisKKyNlbmRp
ZiAvLyAhUExBVEZPUk0oSU9TKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAppbmRleCA0YjQyNzA5MGM0ZjI2YmZkNDU0ZTM1
ZWZjZDIxM2ZhYmNhM2JmNzE5Li41MzMxMjg5NzM1OTNmYTQ1NmQ2NDE2NDRlMzFmZGNkYzJmYjA2
YTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgKQEAgLTI4LDYgKzI4LDEwIEBACiAKICNpbmNsdWRlIDxvYmpjL29iamMu
aD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
SU9TLmgiCisjZW5kaWYKKwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlN0cmluZyAqIENGU3Ry
aW5nUmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRk51bWJlciAqIENGTnVtYmVyUmVmOwog
dHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRpY3Rpb25hcnkgKiBDRkRpY3Rpb25hcnlSZWY7CkBA
IC01MywxNiArNTcsMjEgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVExpbmUgKiBDVExpbmVS
ZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NUUnVuICogQ1RSdW5SZWY7CiB0eXBlZGVmIGNv
bnN0IHN0cnVjdCBfX0NUVHlwZXNldHRlciAqIENUVHlwZXNldHRlclJlZjsKIHR5cGVkZWYgY29u
c3Qgc3RydWN0IF9fQVhVSUVsZW1lbnQgKkFYVUlFbGVtZW50UmVmOworI2lmICFQTEFURk9STShJ
T1MpCiB0eXBlZGVmIHN0cnVjdCBfTlNSYW5nZSBOU1JhbmdlOwogCiB0eXBlZGVmIFVJbnQzMiBG
TUZvbnQ7CiB0eXBlZGVmIEZNRm9udCBBVFNVRm9udElEOwogdHlwZWRlZiBVSW50MTYgQVRTR2x5
cGhSZWY7CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKENBKQorI2lmICFQTEFU
Rk9STShJT1NfU0lNVUxBVE9SKQogdHlwZWRlZiBzdHJ1Y3QgX19JT1N1cmZhY2UgKklPU3VyZmFj
ZVJlZjsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKICNlbmRpZgogCisjaWYg
IVBMQVRGT1JNKElPUykKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRS
WV9UWVBFUwogdHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50OwogdHlwZWRlZiBzdHJ1Y3Qg
Q0dSZWN0IE5TUmVjdDsKQEAgLTcwLDYgKzc5LDExIEBAIHR5cGVkZWYgc3RydWN0IENHUmVjdCBO
U1JlY3Q7CiB0eXBlZGVmIHN0cnVjdCBfTlNQb2ludCBOU1BvaW50OwogdHlwZWRlZiBzdHJ1Y3Qg
X05TUmVjdCBOU1JlY3Q7CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisjaWYg
UExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNl
bmRpZgogCiAjaWYgVVNFKENGTkVUV09SSykKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENv
b2tpZVN0b3JhZ2UqICBDRkhUVFBDb29raWVTdG9yYWdlUmVmOwpAQCAtMTE5LDcgKzEzMyw3IEBA
IHR5cGVkZWYgZW51bSB7CiAgICAgd2tQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nCiB9IHdr
UGF0dGVyblRpbGluZzsKIGV4dGVybiB2b2lkICgqd2tDR0NvbnRleHRSZXNldENsaXApKENHQ29u
dGV4dFJlZik7Ci0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCisj
aWYgIVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDgwCiBleHRlcm4gYm9vbCAoKndrQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNl
dHMpKENHQ29udGV4dFJlZik7CiAjZW5kaWYKIGV4dGVybiBDR1BhdHRlcm5SZWYgKCp3a0NHUGF0
dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9ybSkoQ0dJbWFnZVJlZiwgQ0dBZmZpbmVUcmFu
c2Zvcm0sIGludCk7CkBAIC0xMzUsNiArMTQ5LDcgQEAgZXh0ZXJuIENGUmVhZFN0cmVhbVJlZiAo
KndrQ3JlYXRlQ3VzdG9tQ0ZSZWFkU3RyZWFtKSh2b2lkICooKmZvcm1DcmVhdGUpKENGUmVhZFMK
IGV4dGVybiBDRlN0cmluZ1JlZiAoKndrQ29weUNGTG9jYWxpemF0aW9uUHJlZmVycmVkTmFtZSko
Q0ZTdHJpbmdSZWYpOwogZXh0ZXJuIE5TU3RyaW5nKiAoKndrQ29weU5TVVJMUmVzcG9uc2VTdGF0
dXNMaW5lKShOU1VSTFJlc3BvbnNlKik7CiBleHRlcm4gQ0ZBcnJheVJlZiAoKndrQ29weU5TVVJM
UmVzcG9uc2VDZXJ0aWZpY2F0ZUNoYWluKShOU1VSTFJlc3BvbnNlKik7CisjaWYgIVBMQVRGT1JN
KElPUykKIGV4dGVybiB2b2lkICgqd2tEcmF3QmV6ZWxlZFRleHRGaWVsZENlbGwpKE5TUmVjdCwg
Qk9PTCBlbmFibGVkKTsKIGV4dGVybiB2b2lkICgqd2tEcmF3VGV4dEZpZWxkQ2VsbEZvY3VzUmlu
ZykoTlNUZXh0RmllbGRDZWxsKiwgTlNSZWN0KTsKIGV4dGVybiB2b2lkICgqd2tEcmF3Q2Fwc0xv
Y2tJbmRpY2F0b3IpKENHQ29udGV4dFJlZiwgQ0dSZWN0KTsKQEAgLTE0MywxNiArMTU4LDIyIEBA
IGV4dGVybiB2b2lkICgqd2tEcmF3Rm9jdXNSaW5nKShDR0NvbnRleHRSZWYsIENHQ29sb3JSZWYs
IGludCByYWRpdXMpOwogZXh0ZXJuIE5TRm9udCogKCp3a0dldEZvbnRJbkxhbmd1YWdlRm9yUmFu
Z2UpKE5TRm9udCosIE5TU3RyaW5nKiwgTlNSYW5nZSk7CiBleHRlcm4gTlNGb250KiAoKndrR2V0
Rm9udEluTGFuZ3VhZ2VGb3JDaGFyYWN0ZXIpKE5TRm9udCosIFVuaUNoYXIpOwogZXh0ZXJuIEJP
T0wgKCp3a0dldEdseXBoVHJhbnNmb3JtZWRBZHZhbmNlcykoQ0dGb250UmVmLCBOU0ZvbnQqLCBD
R0FmZmluZVRyYW5zZm9ybSosIEFUU0dseXBoUmVmKiwgQ0dTaXplKiBhZHZhbmNlKTsKKyNlbmRp
ZgorI2lmICFQTEFURk9STShJT1MpCiBleHRlcm4gdm9pZCAoKndrRHJhd01lZGlhU2xpZGVyVHJh
Y2spKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1JlY3QgcmVjdCwgZmxvYXQgdGltZUxvYWRlZCwg
ZmxvYXQgY3VycmVudFRpbWUsCiAgICAgZmxvYXQgZHVyYXRpb24sIHVuc2lnbmVkIHN0YXRlKTsK
IGV4dGVybiB2b2lkICgqd2tEcmF3TWVkaWFVSVBhcnQpKGludCBwYXJ0LCBDR0NvbnRleHRSZWYg
Y29udGV4dCwgQ0dSZWN0IHJlY3QsIHVuc2lnbmVkIHN0YXRlKTsKIGV4dGVybiBDRlN0cmluZ1Jl
ZiAoKndrU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKSh1bnNpZ25lZCBrZXlTaXpl
LCBDRlN0cmluZ1JlZiBjaGFsbGVuZ2UsIENGU3RyaW5nUmVmIGtleURlc2NyaXB0aW9uKTsKIGV4
dGVybiBOU1N0cmluZyogKCp3a0dldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKShOU1N0
cmluZyopOwogZXh0ZXJuIE5TQXJyYXkqICgqd2tHZXRFeHRlbnNpb25zRm9yTUlNRVR5cGUpKE5T
U3RyaW5nKik7CisjZW5kaWYKIGV4dGVybiBOU1N0cmluZyogKCp3a0dldE1JTUVUeXBlRm9yRXh0
ZW5zaW9uKShOU1N0cmluZyopOworI2lmICFQTEFURk9STShJT1MpCiBleHRlcm4gQVRTVUZvbnRJ
RCAoKndrR2V0TlNGb250QVRTVUZvbnRJZCkoTlNGb250Kik7CiBleHRlcm4gZG91YmxlICgqd2tH
ZXROU1VSTFJlc3BvbnNlQ2FsY3VsYXRlZEV4cGlyYXRpb24pKE5TVVJMUmVzcG9uc2UgKnJlc3Bv
bnNlKTsKKyNlbmRpZgogZXh0ZXJuIE5TRGF0ZSAqKCp3a0dldE5TVVJMUmVzcG9uc2VMYXN0TW9k
aWZpZWREYXRlKShOU1VSTFJlc3BvbnNlICpyZXNwb25zZSk7CisjaWYgIVBMQVRGT1JNKElPUykK
IGV4dGVybiBCT09MICgqd2tHZXROU1VSTFJlc3BvbnNlTXVzdFJldmFsaWRhdGUpKE5TVVJMUmVz
cG9uc2UgKnJlc3BvbnNlKTsKIGV4dGVybiB2b2lkICgqd2tHZXRXaGVlbEV2ZW50RGVsdGFzKShO
U0V2ZW50KiwgZmxvYXQqIGRlbHRhWCwgZmxvYXQqIGRlbHRhWSwgQk9PTCogY29udGludW91cyk7
CiBleHRlcm4gVUludDggKCp3a0dldE5TRXZlbnRLZXlDaGFyKShOU0V2ZW50ICopOwpAQCAtMTkx
LDcgKzIxMiw5IEBAIGV4dGVybiBOU0FycmF5ICooKndrUVRHZXRTaXRlc0luTWVkaWFEb3dubG9h
ZENhY2hlKSgpOwogZXh0ZXJuIHZvaWQgKCp3a1FUQ2xlYXJNZWRpYURvd25sb2FkQ2FjaGVGb3JT
aXRlKShOU1N0cmluZyAqc2l0ZSk7CiBleHRlcm4gdm9pZCAoKndrUVRDbGVhck1lZGlhRG93bmxv
YWRDYWNoZSkoKTsKIGV4dGVybiB2b2lkICgqd2tTZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKShDR0Nv
bnRleHRSZWYsIE5TRm9udCosIEJPT0wpOworZXh0ZXJuIHZvaWQgKCp3a1NldENvb2tpZVN0b3Jh
Z2VQcml2YXRlQnJvd3NpbmdFbmFibGVkKShCT09MKTsKIGV4dGVybiB2b2lkICgqd2tTZXREcmFn
SW1hZ2UpKE5TSW1hZ2UqLCBOU1BvaW50IG9mZnNldCk7CisjZW5kaWYKIGV4dGVybiB2b2lkICgq
d2tTZXROU1VSTENvbm5lY3Rpb25EZWZlcnNDYWxsYmFja3MpKE5TVVJMQ29ubmVjdGlvbiAqLCBC
T09MKTsKIGV4dGVybiB2b2lkICgqd2tTZXROU1VSTFJlcXVlc3RTaG91bGRDb250ZW50U25pZmYp
KE5TTXV0YWJsZVVSTFJlcXVlc3QgKiwgQk9PTCk7CiBleHRlcm4gdm9pZCAoKndrU2V0QmFzZUNU
TSkoQ0dDb250ZXh0UmVmLCBDR0FmZmluZVRyYW5zZm9ybSk7CkBAIC0yMTYsMTEgKzIzOSwxMyBA
QCBleHRlcm4gYm9vbCAoKndrR2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKShDVEZvbnRS
ZWYsIGNvbnN0IFVuaUNoYXJbXSwgQ0dHbAogCiBleHRlcm4gQk9PTCAoKndrVXNlU2hhcmVkTWVk
aWFVSSkoKTsKIAorI2lmICFQTEFURk9STShJT1MpCiBleHRlcm4gdm9pZCogd2tHZXRIeXBoZW5h
dGlvbkxvY2F0aW9uQmVmb3JlSW5kZXg7CisjZW5kaWYKIAogZXh0ZXJuIENUTGluZVJlZiAoKndr
Q3JlYXRlQ1RMaW5lV2l0aFVuaUNoYXJQcm92aWRlcikoY29uc3QgVW5pQ2hhciogKCpwcm92aWRl
KShDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjaGFyQ291bnQsIENGRGljdGlvbmFyeVJl
ZiogYXR0cmlidXRlcywgdm9pZCopLCB2b2lkICgqZGlzcG9zZSkoY29uc3QgVW5pQ2hhciogY2hh
cnMsIHZvaWQqKSwgdm9pZCopOwogCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDkwCisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwOTAKIGVudW0gewogICAgIHdrQ1RGb250VHJhbnNmb3JtQXBwbHlTaGFwaW5n
ID0gKDEgPDwgMCksCiAgICAgd2tDVEZvbnRUcmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nID0gKDEg
PDwgMSkKQEAgLTIzNSwxMSArMjYwLDEyIEBAIGV4dGVybiBDVFR5cGVzZXR0ZXJSZWYgKCp3a0Ny
ZWF0ZUNUVHlwZXNldHRlcldpdGhVbmlDaGFyUHJvdmlkZXJBbmRPcHRpb25zKShjb25zCiAKIGV4
dGVybiBDR1NpemUgKCp3a0NUUnVuR2V0SW5pdGlhbEFkdmFuY2UpKENUUnVuUmVmKTsKIAotI2lm
IFBMQVRGT1JNKE1BQykgJiYgVVNFKENBKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKENBKSAm
JiAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKIGV4dGVybiBDR0NvbnRleHRSZWYgKCp3a0lPU3Vy
ZmFjZUNvbnRleHRDcmVhdGUpKElPU3VyZmFjZVJlZiBzdXJmYWNlLCB1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0LCBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSk7CiBleHRlcm4gQ0dJ
bWFnZVJlZiAoKndrSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKShDR0NvbnRleHRSZWYgY29u
dGV4dCk7CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiBleHRlcm4gaW50ICgqd2tSZWNv
bW1lbmRlZFNjcm9sbGVyU3R5bGUpKHZvaWQpOwogCiBleHRlcm4gYm9vbCAoKndrRXhlY3V0YWJs
ZVdhc0xpbmtlZE9uT3JCZWZvcmVTbm93TGVvcGFyZCkodm9pZCk7CkBAIC0yNTAsNyArMjc2LDkg
QEAgZXh0ZXJuIHZvaWQgKCp3a1NldENyYXNoUmVwb3J0QXBwbGljYXRpb25TcGVjaWZpY0luZm9y
bWF0aW9uKShDRlN0cmluZ1JlZik7CiBleHRlcm4gTlNVUkwgKigqd2tBVkFzc2V0UmVzb2x2ZWRV
UkwpKEFWQXNzZXQqKTsKIAogZXh0ZXJuIE5TQ3Vyc29yICooKndrQ3Vyc29yKShjb25zdCBjaGFy
Kik7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKICAgICAKKyNpZiAhUExBVEZPUk0oSU9TKQog
I2lmIFBMQVRGT1JNKE1BQykKIGV4dGVybiBOU0FycmF5ICooKndrU3BlZWNoU3ludGhlc2lzR2V0
Vm9pY2VJZGVudGlmaWVycykodm9pZCk7CiBleHRlcm4gTlNTdHJpbmcgKigqd2tTcGVlY2hTeW50
aGVzaXNHZXREZWZhdWx0Vm9pY2VJZGVudGlmaWVyRm9yTG9jYWxlKShOU0xvY2FsZSAqKTsKQEAg
LTI2Niw2ICsyOTQsMTMgQEAgZXh0ZXJuIENGVHlwZVJlZiAoKndrQ29weUFYVGV4dE1hcmtlclJh
bmdlRW5kKShDRlR5cGVSZWYgcmFuZ2UpOwogZXh0ZXJuIENGVHlwZVJlZiAoKndrQ3JlYXRlQVhU
ZXh0TWFya2VyKShjb25zdCB2b2lkICpieXRlcywgc2l6ZV90IGxlbik7CiBleHRlcm4gQk9PTCAo
KndrR2V0Qnl0ZXNGcm9tQVhUZXh0TWFya2VyKShDRlR5cGVSZWYgdGV4dE1hcmtlciwgdm9pZCAq
Ynl0ZXMsIHNpemVfdCBsZW5ndGgpOwogZXh0ZXJuIEFYVUlFbGVtZW50UmVmICgqd2tDcmVhdGVB
WFVJRWxlbWVudFJlZikoaWQgZWxlbWVudCk7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKwor
I2lmIFBMQVRGT1JNKElPUykKK2V4dGVybiBDR1NpemUgKCp3a0dldFZpZXdwb3J0U2NyZWVuU2l6
ZSkodm9pZCk7CitleHRlcm4gdm9pZCAoKndrU2V0TGF5ZXJDb250ZW50c1NjYWxlKShDQUxheWVy
ICopOworZXh0ZXJuIGZsb2F0ICgqd2tHZXRTY3JlZW5TY2FsZUZhY3Rvcikodm9pZCk7CisjZW5k
aWYKIAogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVSTFN0b3JhZ2VTZXNzaW9uKiBDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmOwogZXh0ZXJuIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgKCp3a0NyZWF0
ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbikoQ0ZTdHJpbmdSZWYpOwpAQCAtMjk3LDE3ICszMzIsMjEg
QEAgZXh0ZXJuIENGQXJyYXlSZWYgKCp3a0NGVVJMUmVxdWVzdENvcHlIVFRQUmVxdWVzdEJvZHlQ
YXJ0cykoQ0ZVUkxSZXF1ZXN0UmVmKTsKIGV4dGVybiB2b2lkICgqd2tDRlVSTFJlcXVlc3RTZXRI
VFRQUmVxdWVzdEJvZHlQYXJ0cykoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZiwgQ0ZBcnJheVJlZiBi
b2R5UGFydHMpOwogZXh0ZXJuIHZvaWQgKCp3a1NldFJlcXVlc3RTdG9yYWdlU2Vzc2lvbikoQ0ZV
UkxTdG9yYWdlU2Vzc2lvblJlZiwgQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZik7CiAjZW5kaWYKKyNp
ZiAhUExBVEZPUk0oSU9TKQogZXh0ZXJuIHZvaWQgKCp3a1NldE1ldGFkYXRhVVJMKShOU1N0cmlu
ZyAqdXJsU3RyaW5nLCBOU1N0cmluZyAqcmVmZXJyZXIsIE5TU3RyaW5nICpwYXRoKTsKKyNlbmRp
ZgogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbXBvcnQgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CiAK
IGV4dGVybiBkaXNwYXRjaF9zb3VyY2VfdCAoKndrQ3JlYXRlVk1QcmVzc3VyZURpc3BhdGNoT25N
YWluUXVldWUpKHZvaWQpOworI2VuZGlmCiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwOTAKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwOTAKIGV4dGVybiBkaXNwYXRjaF9zb3VyY2VfdCAoKndrQ3JlYXRl
TWVtb3J5U3RhdHVzUHJlc3N1cmVDcml0aWNhbERpc3BhdGNoT25NYWluUXVldWUpKHZvaWQpOwog
I2VuZGlmCiAgICAgCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgw
CisjaWYgIVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDgwCiBleHRlcm4gYm9vbCAoKndrRXhlY3V0YWJsZVdhc0xpbmtlZE9uT3JCZWZvcmVMaW9u
KSh2b2lkKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2ViRm9udENhY2hlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkZvbnRD
YWNoZS5tbQppbmRleCBlNDA3NTNlNTk0M2IzY2ExNzMwNzU1NGUyMWQxODI3NzM4ODJmZGUzLi44
YzgyNjBiMDJiMmIwOThiOWVkZGViZTBhZWIxMzUyYzFmNGVlMDlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViRm9udENhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJGb250Q2FjaGUubW0KQEAgLTI4NywxMiArMjg3LDEwIEBAIHN0
YXRpYyBpbmxpbmUgRm9udFRyYWl0c01hc2sgdG9UcmFpdHNNYXNrKE5TRm9udFRyYWl0TWFzayBh
cHBLaXRUcmFpdHMsIE5TSW50ZWdlCiAgICAgcmV0dXJuIFtzZWxmIGludGVybmFsRm9udFdpdGhG
YW1pbHk6ZGVzaXJlZEZhbWlseSB0cmFpdHM6ZGVzaXJlZFRyYWl0cyB3ZWlnaHQ6ZGVzaXJlZFdl
aWdodCBzaXplOnNpemVdOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKICsgKE5TRm9udCAqKWZv
bnRXaXRoRmFtaWx5OihOU1N0cmluZyAqKWRlc2lyZWRGYW1pbHkgdHJhaXRzOihOU0ZvbnRUcmFp
dE1hc2spZGVzaXJlZFRyYWl0cyBzaXplOihmbG9hdClzaXplCiB7CiAgICAgaW50IGRlc2lyZWRX
ZWlnaHQgPSAoZGVzaXJlZFRyYWl0cyAmIE5TQm9sZEZvbnRNYXNrKSA/IDkgOiA1OwogICAgIHJl
dHVybiBbc2VsZiBmb250V2l0aEZhbWlseTpkZXNpcmVkRmFtaWx5IHRyYWl0czpkZXNpcmVkVHJh
aXRzIHdlaWdodDpkZXNpcmVkV2VpZ2h0IHNpemU6c2l6ZV07CiB9Ci0jZW5kaWYKIAogQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwCmlu
ZGV4IDVhYjA0MmYzNTc1MzI0OGE0ZjI2M2Y2MDE0ZWJiZjU5NmM2NDQzMTEuLjRhNjFkZjRjOTg4
NWRhN2MwYWNjODY0YjA1NjkzNzFhMjk1N2I3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5jcHAKQEAgLTMzLDYgKzMzLDEwIEBACiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
IAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBCbG9iUmVnaXN0cnkmIGJsb2JSZWdpc3RyeSgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUlt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBs
LmNwcAppbmRleCA2YmI1Y2FlNWJhYjRiYjA3MmY2NTZhOTgzYmRlYjA0MGE2ODg0OTIzLi4yMzFh
Zjc4YWFjM2JhZTIzNTYwZTM5YmFhMWIwN2M4OTYzMGE0NGE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTQzLDYg
KzQzLDEwIEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiV2ViQ29yZVRocmVh
ZC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQmxvYlJlZ2lzdHJ5SW1wbDo6
fkJsb2JSZWdpc3RyeUltcGwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9DcmVkZW50aWFsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Ny
ZWRlbnRpYWwuaAppbmRleCAxYTVhNDdlNTI5Zjc2MzhjOTE1M2M4ZmM3MmMxODNjM2E1Y2E0YzQ0
Li4yMTY2YjliZmE5NzM1NjA1MjJjODJlNjYzNTA3OTllZWI1ODkxZTJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuaApAQCAtMjcsNyArMjcsNyBAQAog
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNkZWZpbmUgQ0VSVElGSUNBVEVf
Q1JFREVOVElBTFNfU1VQUE9SVEVEIFBMQVRGT1JNKE1BQykKKyNkZWZpbmUgQ0VSVElGSUNBVEVf
Q1JFREVOVElBTFNfU1VQUE9SVEVEIChQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKE1BQykpCiAK
ICNpZiBDRVJUSUZJQ0FURV9DUkVERU5USUFMU19TVVBQT1JURUQKICNpbmNsdWRlIDxTZWN1cml0
eS9TZWNCYXNlLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0NyZWRlbnRpYWxTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbFN0b3JhZ2UuY3BwCmluZGV4IDk1OTU3MjQ4N2U5OTkzOTFmZTVjMGEzYTczZDdk
ZjU1ZjI2Yzg5ZWUuLmQ4NmZkODFjNGMwNmIxN2EzNmIzN2JlZjYzYzZjOWJhMTI0Mjg4MTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3Jh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0
b3JhZ2UuY3BwCkBAIC0zNiw2ICszNiwxMCBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2lu
Y2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHR5cGVkZWYgSGFzaE1hcDxQcm90ZWN0aW9uU3BhY2UsIENyZWRlbnRpYWw+IFByb3RlY3Rpb25T
cGFjZVRvQ3JlZGVudGlhbE1hcDsKQEAgLTkzLDYgKzk3LDExIEBAIHZvaWQgQ3JlZGVudGlhbFN0
b3JhZ2U6OnNldChjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsLCBjb25zdCBQcm90ZWN0aW9u
U3BhY2UmCiAgICAgQVNTRVJUKHByb3RlY3Rpb25TcGFjZS5pc1Byb3h5KCkgfHwgdXJsLmlzVmFs
aWQoKSk7CiAKICAgICBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXAoKS5zZXQocHJvdGVj
dGlvblNwYWNlLCBjcmVkZW50aWFsKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzYXZlVG9Q
ZXJzaXN0ZW50U3RvcmFnZShwcm90ZWN0aW9uU3BhY2UsIGNyZWRlbnRpYWwpOworI2VuZGlmCisK
ICAgICBpZiAoIXByb3RlY3Rpb25TcGFjZS5pc1Byb3h5KCkpIHsKICAgICAgICAgb3JpZ2luc1dp
dGhDcmVkZW50aWFscygpLmFkZChvcmlnaW5TdHJpbmdGcm9tVVJMKHVybCkpOwogCkBAIC0xNjMs
NiArMTcyLDE1IEBAIENyZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChjb25zdCBVUkwm
IHVybCkKICAgICByZXR1cm4gcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuZ2V0KGl0
ZXItPnZhbHVlKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgQ3JlZGVudGlhbFN0b3Jh
Z2U6OmNsZWFyQ3JlZGVudGlhbHMoKQoreworICAgIHBhdGhUb0RlZmF1bHRQcm90ZWN0aW9uU3Bh
Y2VNYXAoKS5jbGVhcigpOworICAgIG9yaWdpbnNXaXRoQ3JlZGVudGlhbHMoKS5jbGVhcigpOwor
ICAgIHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLmNsZWFyKCk7Cit9CisjZW5kaWYK
Kwogdm9pZCBDcmVkZW50aWFsU3RvcmFnZTo6c2V0UHJpdmF0ZU1vZGUoYm9vbCBtb2RlKQogewog
ICAgIGlmICghbW9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQ3JlZGVudGlhbFN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbFN0b3JhZ2UuaAppbmRleCBiM2JkMWZkNzgzOTJhMjY3ZTMwOWZmY2NjZjQ3YTIx
YWUwNmU4OTllLi4zYzhjNzQ4NzUyMDIwNTlmMTcxZDFkMjRhYmNhZDNmYzk1ZDg1NTQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFn
ZS5oCkBAIC00Miw2ICs0MiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gT1MgcGVyc2lzdGVudCBzdG9y
YWdlLgogICAgIHN0YXRpYyBDcmVkZW50aWFsIGdldEZyb21QZXJzaXN0ZW50U3RvcmFnZShjb25z
dCBQcm90ZWN0aW9uU3BhY2UmKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdGF0aWMgdm9p
ZCBzYXZlVG9QZXJzaXN0ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBjb25zdCBD
cmVkZW50aWFsJik7CisgICAgc3RhdGljIHZvaWQgY2xlYXJDcmVkZW50aWFscygpOworI2VuZGlm
CisKICAgICAvLyBUaGVzZSBtZXRob2RzIHdvcmsgZm9yIGF1dGhlbnRpY2F0aW9uIHNjaGVtZXMg
dGhhdCBzdXBwb3J0IHNlbmRpbmcgY3JlZGVudGlhbHMgd2l0aG91dCB3YWl0aW5nIGZvciBhIHJl
cXVlc3QuIEUuZy4sIGZvciBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uIHNjaGVtZQogICAgIC8v
IGEgY2xpZW50IHNob3VsZCBhc3N1bWUgdGhhdCBhbGwgcGF0aHMgYXQgb3IgZGVlcGVyIHRoYW4g
dGhlIGRlcHRoIG9mIGEga25vd24gcHJvdGVjdGVkIHJlc291cmNlIHNoYXJlIGFyZSB3aXRoaW4g
dGhlIHNhbWUgcHJvdGVjdGlvbiBzcGFjZS4KICAgICBzdGF0aWMgYm9vbCBzZXQoY29uc3QgQ3Jl
ZGVudGlhbCYsIGNvbnN0IFVSTCYpOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIFVSTCBjb3JyZXNw
b25kcyB0byBhIGtub3duIHByb3RlY3Rpb24gc3BhY2UsIHNvIGNyZWRlbnRpYWxzIGNvdWxkIGJl
IHVwZGF0ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05l
dHdvcmtTdGF0ZU5vdGlmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05l
dHdvcmtTdGF0ZU5vdGlmaWVyLmgKaW5kZXggMzMyNDdjOTdmYzkwMjkxZTE2NWMwNDVhMzZhNmY2
MzFhYWJmMzlhOS4uZjlmNjFkNWNlMzMxYzhhZTQ2OTIwMTA0NmRkYzE4MDcyZGRhNDkyZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3Rp
Zmllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRl
Tm90aWZpZXIuaApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTYyLDYgKzYyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IGFkZE5ldHdvcmtTdGF0ZUNoYW5nZUxpc3RlbmVyKE5ldHdvcmtTdGF0ZUNoYW5nZUxpc3RlbmVy
KTsKIAogICAgIGJvb2wgb25MaW5lKCkgY29uc3QgeyByZXR1cm4gbV9pc09uTGluZTsgfQorICAg
IAorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIHNldElzT25MaW5lKGJvb2wpOworI2VuZGlm
CiAKICNpZiBQTEFURk9STShCTEFDS0JFUlJZKQogICAgIHZvaWQgbmV0d29ya1N0YXRlQ2hhbmdl
KGJvb2wgb25saW5lKTsKQEAgLTc0LDcgKzc4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGlm
eU5ldHdvcmtTdGF0ZUNoYW5nZSgpOwogICAgIHZvaWQgdXBkYXRlU3RhdGUoKTsKIAotI2lmIFBM
QVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgdm9p
ZCBuZXR3b3JrU3RhdGVDaGFuZ2VUaW1lckZpcmVkKFRpbWVyPE5ldHdvcmtTdGF0ZU5vdGlmaWVy
PiopOwogCiAgICAgc3RhdGljIHZvaWQgZHluYW1pY1N0b3JlQ2FsbGJhY2soU0NEeW5hbWljU3Rv
cmVSZWYsIENGQXJyYXlSZWYgY2hhbmdlZEtleXMsIHZvaWQgKmluZm8pOyAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKaW5kZXggMGM4
NTJkYzJkYzZjNTBjYWE2YmI1ZmNhN2EyZTA1OWEyMTdiM2QzYS4uOTNlMGY5YTRjYjBjMzA4MTJm
YzkwMjMyZjJmMjhiZDE0NmZlOTdmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKQEAgLTM1LDYgKzM1LDEwIEBACiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNp
ZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIHNob3VsZEZvcmNlQ29udGVudFNuaWZm
aW5nOwpAQCAtNDIsNyArNDYsMTEgQEAgc3RhdGljIGJvb2wgc2hvdWxkRm9yY2VDb250ZW50U25p
ZmZpbmc7CiB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZXNvdXJjZUhhbmRsZTo6QnVp
bHRpbkNvbnN0cnVjdG9yPiBCdWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcDsKIHN0
YXRpYyBCdWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCYgYnVpbHRpblJlc291cmNl
SGFuZGxlQ29uc3RydWN0b3JNYXAoKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBBU1NFUlQo
V2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworI2Vsc2UKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworI2VuZGlmCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChCdWlsdGluUmVzb3Vy
Y2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCwgbWFwLCAoKSk7CiAgICAgcmV0dXJuIG1hcDsKIH0KQEAg
LTE1MSwyMyArMTU5LDIzIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudChSZXNvdXJj
ZUhhbmRsZUNsaWVudCogY2xpZW50KQogLy8gUmVzb3VyY2VIYW5kbGUgbmV2ZXIgdXNlcyBhc3lu
YyBjbGllbnQgY2FsbHMgb24gdGhlc2UgcGxhdGZvcm1zIHlldC4KIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCiB7Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKQogewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCkKIHsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiAj
aWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sKQog
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAj
ZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKaW5kZXggZWY0MjE5MzQzNTQ3OWU3YjlkY2FiNDQ5
M2E5ZDRjOGQ1MDgyNjJmMS4uMGVkODI4OTkzYTFkYjY5MjZhNDFmYjJjMGU1YTFlNTllNGI2MjNm
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
cXVlc3RCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuY3BwCkBAIC0zOCw2ICszOCwxMCBAQCBkb3VibGUgUmVzb3VyY2VSZXF1
ZXN0QmFzZTo6c19kZWZhdWx0VGltZW91dEludGVydmFsID0gSU5UX01BWDsKIGRvdWJsZSBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpzX2RlZmF1bHRUaW1lb3V0SW50ZXJ2YWwgPSAwOwogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShJT1MpCitib29sIFJlc291cmNlUmVxdWVzdEJhc2U6OnNfZGVmYXVsdEFs
bG93Q29va2llcyA9IHRydWU7CisjZW5kaWYKKwogaW5saW5lIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YXNSZXNvdXJjZVJlcXVlc3QoKSBjb25zdAogewogICAg
IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgUmVzb3VyY2VSZXF1ZXN0Kj4odGhpcyk7CkBAIC01
MjgsNCArNTMyLDE2IEBAIHVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25D
b3VudFBlckhvc3QoKQogfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIFJlc291
cmNlUmVxdWVzdEJhc2U6OnNldERlZmF1bHRBbGxvd0Nvb2tpZXMoYm9vbCBhbGxvd0Nvb2tpZXMp
Cit7CisgICAgc19kZWZhdWx0QWxsb3dDb29raWVzID0gYWxsb3dDb29raWVzOworfQorCitib29s
IFJlc291cmNlUmVxdWVzdEJhc2U6OmRlZmF1bHRBbGxvd0Nvb2tpZXMoKQoreworICAgIHJldHVy
biBzX2RlZmF1bHRBbGxvd0Nvb2tpZXM7Cit9CisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAppbmRleCAx
NDA1N2NiMjdmNGY4MjNlNTlhYmM0MmE4ODBmODQwMWM1ZTVhMGI5Li5hYTA2MDE5NTNkODA4NDU1
ZDQ0YjcwNWI2OWZiYWI1MGYwMGE2MDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaApAQCAtMTQyLDYgKzE0MiwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBkb3VibGUgZGVmYXVsdFRpbWVv
dXRJbnRlcnZhbCgpOyAvLyBNYXkgcmV0dXJuIDAgd2hlbiB1c2luZyBwbGF0Zm9ybSBkZWZhdWx0
LgogICAgICAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0VGltZW91dEludGVydmFsKGRvdWJsZSk7
CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHN0YXRpYyBib29sIGRlZmF1bHRBbGxvd0Nv
b2tpZXMoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdEFsbG93Q29va2llcyhib29s
KTsKKyNlbmRpZgorCiAgICAgICAgIHN0YXRpYyBib29sIGNvbXBhcmUoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0x
NjMsNyArMTY4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9jYWNo
ZVBvbGljeShwb2xpY3kpCiAgICAgICAgICAgICAsIG1fdGltZW91dEludGVydmFsKHNfZGVmYXVs
dFRpbWVvdXRJbnRlcnZhbCkKICAgICAgICAgICAgICwgbV9odHRwTWV0aG9kKEFTQ0lJTGl0ZXJh
bCgiR0VUIikpCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgICAgICwgbV9hbGxvd0Nvb2tp
ZXModHJ1ZSkKKyNlbHNlCisgICAgICAgICAgICAsIG1fYWxsb3dDb29raWVzKFJlc291cmNlUmVx
dWVzdEJhc2U6OmRlZmF1bHRBbGxvd0Nvb2tpZXMoKSkKKyNlbmRpZgogICAgICAgICAgICAgLCBt
X3Jlc291cmNlUmVxdWVzdFVwZGF0ZWQodHJ1ZSkKICAgICAgICAgICAgICwgbV9wbGF0Zm9ybVJl
cXVlc3RVcGRhdGVkKGZhbHNlKQogICAgICAgICAgICAgLCBtX3Jlc291cmNlUmVxdWVzdEJvZHlV
cGRhdGVkKHRydWUpCkBAIC0yMDQsNiArMjEzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGFzUmVzb3VyY2VSZXF1ZXN0KCkgY29uc3Q7CiAK
ICAgICAgICAgc3RhdGljIGRvdWJsZSBzX2RlZmF1bHRUaW1lb3V0SW50ZXJ2YWw7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgICAgICBzdGF0aWMgYm9vbCBzX2RlZmF1bHRBbGxvd0Nvb2tpZXM7Cisj
ZW5kaWYKICAgICB9OwogCiAgICAgYm9vbCBlcXVhbElnbm9yaW5nSGVhZGVyRmllbGRzKGNvbnN0
IFJlc291cmNlUmVxdWVzdEJhc2UmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJik7CkBAIC0y
MzAsNyArMjQyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAgICAgCiAgICAgdW5z
aWduZWQgaW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpOwotCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgaW5pdGlhbGl6ZUhUVFBDb25uZWN0aW9uU2V0dGlu
Z3NPblN0YXJ0dXAoKTsKKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gUmVzb3VyY2VSZXF1ZXN0QmFzZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL0NyZWRlbnRpYWxTdG9yYWdlQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9DcmVkZW50aWFsU3RvcmFnZUNGTmV0LmNwcAppbmRleCBj
MzRmNmY2NjVjYTc0NTIzMjk5YjkxYzE3NDE5MzBlNjcxNGJmY2I5Li5jNzI1MmMzODU0MDNlNjVj
NTUwN2U0OWU1MjVkZDMwM2FmMWIzY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL0NyZWRlbnRpYWxTdG9yYWdlQ0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ3JlZGVudGlhbFN0b3JhZ2VDRk5ldC5jcHAKQEAg
LTM5LDYgKzM5LDEwIEBACiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5
c3RlbUludGVyZmFjZS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8
Q0ZOZXR3b3JrL0NGVVJMQ3JlZGVudGlhbFN0b3JhZ2UuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIENyZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldEZyb21QZXJzaXN0
ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKQEAgLTQ4
LDYgKzUyLDIzIEBAIENyZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldEZyb21QZXJzaXN0
ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByCiAgICAgcmV0dXJuIGNvcmUoY3Jl
ZGVudGlhbENGLmdldCgpKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgQ3JlZGVudGlh
bFN0b3JhZ2U6OnNhdmVUb1BlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYg
cHJvdGVjdGlvblNwYWNlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQoreworICAgIFJl
dGFpblB0cjxDRlVSTENyZWRlbnRpYWxTdG9yYWdlUmVmPiBzdG9yYWdlQ0YgPSBhZG9wdENGKENG
VVJMQ3JlZGVudGlhbFN0b3JhZ2VDcmVhdGUoMCkpOworICAgIFJldGFpblB0cjxDRlVSTFByb3Rl
Y3Rpb25TcGFjZVJlZj4gcHJvdGVjdGlvblNwYWNlQ0YgPSBhZG9wdENGKGNyZWF0ZUNGKHByb3Rl
Y3Rpb25TcGFjZSkpOworCisgICAgaWYgKGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVk
ZW50aWFsUGVyc2lzdGVuY2VOb25lKSB7CisgICAgICAgIENyZWRlbnRpYWwgc2Vzc2lvbkNyZWRl
bnRpYWwoY3JlZGVudGlhbCwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbik7CisgICAg
ICAgIFJldGFpblB0cjxDRlVSTENyZWRlbnRpYWxSZWY+IHNlc3Npb25DcmVkZW50aWFsQ0YgPSBh
ZG9wdENGKGNyZWF0ZUNGKHNlc3Npb25DcmVkZW50aWFsKSk7CisgICAgICAgIENGVVJMQ3JlZGVu
dGlhbFN0b3JhZ2VTZXREZWZhdWx0Q3JlZGVudGlhbEZvclByb3RlY3Rpb25TcGFjZShzdG9yYWdl
Q0YuZ2V0KCksIHNlc3Npb25DcmVkZW50aWFsQ0YuZ2V0KCksIHByb3RlY3Rpb25TcGFjZUNGLmdl
dCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxDcmVkZW50aWFsUmVm
PiBjcmVkZW50aWFsQ0YgPSBhZG9wdENGKGNyZWF0ZUNGKGNyZWRlbnRpYWwpKTsKKyAgICAgICAg
Q0ZVUkxDcmVkZW50aWFsU3RvcmFnZVNldERlZmF1bHRDcmVkZW50aWFsRm9yUHJvdGVjdGlvblNw
YWNlKHN0b3JhZ2VDRi5nZXQoKSwgY3JlZGVudGlhbENGLmdldCgpLCBwcm90ZWN0aW9uU3BhY2VD
Ri5nZXQoKSk7CisgICAgfQorfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIFVTRShDRk5FVFdPUkspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL0ROU0NGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvRE5TQ0ZOZXQuY3BwCmluZGV4IDA3NWFhNmJjYTVlMjU2NDdhZWJlOWYxMmQ2OWQ2
YWI2YzgzZTQ2YzMuLmUzZjFjMmI5MTJjOGVjNWJkZGI2ODE4ZGU0YTc1MmY2YjE5NTUxYjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRE5TQ0ZOZXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRE5TQ0ZOZXQuY3BwCkBA
IC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8
Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgorI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4pCiAjaW5j
bHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5o
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Qcm94eVNl
cnZlckNGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUHJveHlT
ZXJ2ZXJDRk5ldC5jcHAKaW5kZXggNzExMThkMmVlYjFmZjk1MmExNTkyMzBjMGJjNDM4NjJkOTQ0
YTZmYS4uOWYxNDcxMjY5N2U0OWViNjU1ZDY4YTY4ZjJkNTc0M2JjMTkyZTY2OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Qcm94eVNlcnZlckNGTmV0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Byb3h5U2VydmVyQ0ZO
ZXQuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKFdJTikKKyNpZiBQTEFU
Rk9STShJT1MpIHx8IFBMQVRGT1JNKFdJTikKICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZOZXR3b3Jr
Lmg+CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZVJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VSZXF1ZXN0LmgKaW5kZXggNmNmMjZhYjRjM2VmODRhMDRjZWNlOGZhZGU5OGQ3
ZDhjYTIzNWQ3Mi4uM2I4OWYzYjQ0NjZkYzA1YjU5OGJkZDhkNjEyMWRjODM4YzViNmYzNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVl
c3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVx
dWVzdC5oCkBAIC00MywyMiArNDMsMzQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1Ymxp
YzoKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKSAKICAgICAgICAg
ICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZShVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBVc2VQ
cm90b2NvbENhY2hlUG9saWN5KQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgICwgbV9t
YWluUmVzb3VyY2VSZXF1ZXN0KGZhbHNlKQorI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQog
CiAgICAgICAgIFJlc291cmNlUmVxdWVzdChjb25zdCBVUkwmIHVybCkgCiAgICAgICAgICAgICA6
IFJlc291cmNlUmVxdWVzdEJhc2UodXJsLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorI2lmIFBM
QVRGT1JNKElPUykKKyAgICAgICAgICAgICwgbV9tYWluUmVzb3VyY2VSZXF1ZXN0KGZhbHNlKQor
I2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIFJlc291cmNlUmVxdWVzdChj
b25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgUmVzb3VyY2VSZXF1ZXN0Q2Fj
aGVQb2xpY3kgcG9saWN5ID0gVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkgCiAgICAgICAgICAgICA6
IFJlc291cmNlUmVxdWVzdEJhc2UodXJsLCBwb2xpY3kpCisjaWYgUExBVEZPUk0oSU9TKQorICAg
ICAgICAgICAgLCBtX21haW5SZXNvdXJjZVJlcXVlc3QoZmFsc2UpCisjZW5kaWYKICAgICAgICAg
ewogICAgICAgICAgICAgc2V0SFRUUFJlZmVycmVyKHJlZmVycmVyKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KCkKICAgICAgICAgICAgIDogUmVzb3VyY2VS
ZXF1ZXN0QmFzZShVUkwoKSwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgICAgICAsIG1fbWFpblJlc291cmNlUmVxdWVzdChmYWxzZSkKKyNlbmRpZgog
ICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC03MCw2ICs4Miw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICBSZXNvdXJjZVJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmIGNm
UmVxdWVzdCkKICAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSgpCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgICAgICAgICAgLCBtX21haW5SZXNvdXJjZVJlcXVlc3QoZmFsc2UpCisjZW5k
aWYKICAgICAgICAgICAgICwgbV9jZlJlcXVlc3QoY2ZSZXF1ZXN0KQogICAgICAgICB7CiAjaWYg
UExBVEZPUk0oTUFDKQpAQCAtNzksNiArOTQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZWxz
ZQogICAgICAgICBSZXNvdXJjZVJlcXVlc3QoTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3QpCiAgICAg
ICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAg
ICAgICAgICwgbV9tYWluUmVzb3VyY2VSZXF1ZXN0KGZhbHNlKQorI2VuZGlmCiAgICAgICAgICAg
ICAsIG1fbnNSZXF1ZXN0KG5zUmVxdWVzdCkKICAgICAgICAgewogICAgICAgICB9CkBAIC0xMDks
NiArMTI3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGJvb2wgdXNl
UXVpY2tMb29rUmVzb3VyY2VDYWNoaW5nUXVpcmtzKCk7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JN
KElPUykKKyAgICAgICAgdm9pZCBzZXRNYWluUmVzb3VyY2VSZXF1ZXN0KGJvb2wgaXNNYWluUmVz
b3VyY2VSZXF1ZXN0KSBjb25zdCB7IG1fbWFpblJlc291cmNlUmVxdWVzdCA9IGlzTWFpblJlc291
cmNlUmVxdWVzdDsgfQorICAgICAgICBib29sIGlzTWFpblJlc291cmNlUmVxdWVzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFpblJlc291cmNlUmVxdWVzdDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgbXV0YWJsZSBib29sIG1fbWFpblJlc291cmNlUmVxdWVzdDsKKyNlbmRpZgorCiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlUmVxdWVzdEJhc2U7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0
Q0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
cXVlc3RDRk5ldC5jcHAKaW5kZXggNjhmYmJmYWY5YjI0N2ViNzFjNjNhZmNkNmQwNWRjMDdmZDk1
ZTM4NS4uNGEyNjIzZmM2NjVjOGU0YjUyY2NjMTQzYmNlNjU2YWQzOTYxODhkNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5l
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
cXVlc3RDRk5ldC5jcHAKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlICJGb3JtRGF0YVN0cmVh
bUNGTmV0LmgiCiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGVVJMUmVxdWVzdFByaXYuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPENG
TmV0d29yay9DRk5ldHdvcmtDb25uZWN0aW9uQ2FjaGVQcml2Lmg+CisjZW5kaWYKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNTAsNyArNTMsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisjaWYgUExBVEZPUk0oSU9TKQorYm9vbCBSZXNvdXJjZVJlcXVlc3Q6OnNfaHR0cFBp
cGVsaW5pbmdFbmFibGVkID0gdHJ1ZTsKKyNlbHNlCiBib29sIFJlc291cmNlUmVxdWVzdDo6c19o
dHRwUGlwZWxpbmluZ0VuYWJsZWQgPSBmYWxzZTsKKyNlbmRpZgogCiAjaWYgVVNFKENGTkVUV09S
SykKIApAQCAtMjIyLDEwICsyMjksMzMgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRl
UGxhdGZvcm1IVFRQQm9keSgpCiAjZW5kaWYKIH0KIAordm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVw
ZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRIVFRQQm9keShjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIGRlbGVnYXRlUHJvdmlkZWRSZXF1ZXN0KQoreworICAgIFJlZlB0cjxGb3JtRGF0YT4gb2xk
SFRUUEJvZHkgPSBodHRwQm9keSgpOworCisgICAgKnRoaXMgPSBkZWxlZ2F0ZVByb3ZpZGVkUmVx
dWVzdDsKKyAgICBzZXRIVFRQQm9keShvbGRIVFRQQm9keS5yZWxlYXNlKCkpOworfQorCiB2b2lk
IFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVSZXNvdXJjZVJlcXVlc3QoKQogewogICAgIGlmICgh
bV9jZlJlcXVlc3QpIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIC8vIDxyZGFyOi8vcHJv
YmxlbS85OTEzNTI2PgorICAgICAgICAvLyBUaGlzIGlzIGEgaGFjayB0byBtaW1pYyB0aGUgc3Vi
dGxlIGJlaGF2aW91ciBvZiB0aGUgRm91bmRhdGlvbiBiYXNlZCBSZXNvdXJjZVJlcXVlc3QKKyAg
ICAgICAgLy8gY29kZS4gVGhhdCBjb2RlIGRvZXMgbm90IHJlc2V0IG1faHR0cE1ldGhvZCBpZiB0
aGUgTlNVUkxSZXF1ZXN0IGlzIG5pbC4gSSBmaWxlZAorICAgICAgICAvLyA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzM2PiB0byB0cmFjayB0aGF0LgorICAgICAg
ICAvLyBBbm90aGVyIHJlbGF0ZWQgYnVnIGlzIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjYzNTA+LiBGaXhpbmcgdGhhdAorICAgICAgICAvLyB3b3VsZCwgaWRlYWxs
eSwgYWxsb3cgdXMgdG8gbm90IGhhdmUgdGhpcyBoYWNrLiBCdXQgdW5mb3J0dW5hdGVseSB0aGF0
IGNhdXNlZCBsYXlvdXQgdGVzdAorICAgICAgICAvLyBmYWlsdXJlcy4KKyAgICAgICAgLy8gUmVt
b3ZhbCBvZiB0aGlzIGhhY2sgaXMgdHJhY2tlZCBieSA8cmRhcjovL3Byb2JsZW0vOTk3MDQ5OT4u
CisKKyAgICAgICAgU3RyaW5nIGh0dHBNZXRob2QgPSBtX2h0dHBNZXRob2Q7CiAgICAgICAgICp0
aGlzID0gUmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgICAgIG1faHR0cE1ldGhvZCA9IGh0dHBNZXRo
b2Q7CisjZWxzZQorICAgICAgICAqdGhpcyA9IFJlc291cmNlUmVxdWVzdCgpOworI2VuZGlmCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMwNyw4ICszMzcsMTAgQEAgdm9pZCBSZXNvdXJj
ZVJlcXVlc3Q6OnNldFN0b3JhZ2VTZXNzaW9uKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFn
ZVNlc3Npb24pCiAjaWYgUExBVEZPUk0oTUFDKQogdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmFwcGx5
V2ViQXJjaGl2ZUhhY2tGb3JNYWlsKCkKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIEhh
Y2sgYmVjYXVzZSBNYWlsIGNoZWNrcyBmb3IgdGhpcyBwcm9wZXJ0eSB0byBkZXRlY3QgZGF0YSAv
IGFyY2hpdmUgbG9hZHMKICAgICBfQ0ZVUkxSZXF1ZXN0U2V0UHJvdG9jb2xQcm9wZXJ0eShjZlVS
TFJlcXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9keSksIENGU1RSKCJXZWJEYXRhUmVxdWVzdCIpLCBD
RlNUUigiIikpOworI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMzgzLDUgKzQxNSwyMSBAQCB1bnNp
Z25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCkKIAogICAg
IHJldHVybiBtYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3Q7CiB9CisgICAgCisjaWYg
UExBVEZPUk0oSU9TKQordm9pZCBpbml0aWFsaXplSFRUUENvbm5lY3Rpb25TZXR0aW5nc09uU3Rh
cnR1cCgpCit7CisgICAgLy8gVGhpcyBuZWVkIHRvIGJlIGNhbGxlZCBmcm9tIFdlYktpdEluaXRp
YWxpemUgc28gdGhlIGNhbGxzIGhhcHBlbiBlYXJseSBlbm91Z2gsIGJlZm9yZSBhbnkgcmVxdWVz
dHMgYXJlIG1hZGUuIDxyZGFyOi8vcHJvYmxlbS85NjkxODcxPgorICAgIC8vIERlc2t0b3AgZG9l
c24ndCBoYXZlIGVhcmx5IGluaXRpYWxpemF0aW9uIHNvIGl0IGlzIG5vdCBjbGVhciBob3cgdGhp
cyBzaG91bGQgYmUgZG9uZSB0aGVyZS4gVGhlIENGTmV0d29yayBTUEkgcHJvYmFibHkKKyAgICAv
LyBuZWVkcyB0byBiZWNvbWUgbW9yZSBmb3JnaXZpbmcuCisgICAgLy8gV2UgY2FuJ3QgcmVhZCBz
ZXR0aW5ncyBoZXJlIGFzIHRoaXMgaXMgY2FsbGVkIHRvbyBlYXJseSBmb3IgdGhhdC4gQWxsIHZh
bHVlcyBuZWVkIHRvIGJlIGNvbnN0YW50cy4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcHJl
ZmVycmVkQ29ubmVjdGlvbkNvdW50ID0gNjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFz
dExhbmVDb25uZWN0aW9uQ291bnQgPSAxOworICAgIHdrSW5pdGlhbGl6ZU1heGltdW1IVFRQQ29u
bmVjdGlvbkNvdW50UGVySG9zdChwcmVmZXJyZWRDb25uZWN0aW9uQ291bnQpOworICAgIHdrU2V0
SFRUUFBpcGVsaW5pbmdNYXhpbXVtUHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0
KTsKKyAgICB3a1NldEhUVFBQaXBlbGluaW5nTWluaW11bUZhc3RMYW5lUHJpb3JpdHkoUmVzb3Vy
Y2VMb2FkUHJpb3JpdHlNZWRpdW0pOworICAgIF9DRk5ldHdvcmtIVFRQQ29ubmVjdGlvbkNhY2hl
U2V0TGltaXQoa0hUVFBOdW1GYXN0TGFuZXMsIGZhc3RMYW5lQ29ubmVjdGlvbkNvdW50KTsKK30K
KyNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQu
Y3BwCmluZGV4IGZjMmQyOGQ3MjQxODNmNTU0YWVjNzcyNzdlNDFhMzIwNWE5MDI5ZmYuLmI1ZWFj
NDVhN2E2YmJkYzgwOGE4ODQxMDgwMjFmMTQzYzdkNzFhNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxl
Q0ZOZXQuY3BwCkBAIC00MSw2ICs0MSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisj
aW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgorI2VuZGlmCisKICNpZiBQTEFURk9STShX
SU4pCiAjaW5jbHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NG
TmV0d29yay5oPgpAQCAtNTcxLDcgKzU3NSw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpy
ZXBvcnRFcnJvclRvQ2xpZW50KENGRXJyb3JSZWYgZXJyb3IpCiAgICAgQ0ZJbmRleCBlcnJvckNv
ZGUgPSBDRkVycm9yR2V0Q29kZShlcnJvcik7CiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOwogCi0j
aWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAog
I2lmIENPTVBJTEVSKENMQU5HKQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL05ldHdvcmtTdGF0ZU5v
dGlmaWVySU9TLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL05ldHdv
cmtTdGF0ZU5vdGlmaWVySU9TLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZWQ2YTA4Nzg1Y2VlOGRkZjQ3MDcw
ZGJlZjI2YTYxYzQ3YjgyZDM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9pb3MvTmV0d29ya1N0YXRlTm90aWZpZXJJT1MuY3BwCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTdGF0ZU5vdGlmaWVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworTmV0d29ya1N0YXRlTm90aWZpZXI6Ok5ldHdvcmtTdGF0ZU5v
dGlmaWVyKCkKKyAgICA6IG1faXNPbkxpbmUoZmFsc2UpCit7Cit9CisKK3ZvaWQgTmV0d29ya1N0
YXRlTm90aWZpZXI6OnNldElzT25MaW5lKGJvb2wgaXNPbkxpbmUpCit7CisgICAgaWYgKG1faXNP
bkxpbmUgPT0gaXNPbkxpbmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzT25MaW5lID0gaXNP
bkxpbmU7CisgICAgbm90aWZ5TmV0d29ya1N0YXRlQ2hhbmdlKCk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9vay5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YmUyNzU2ZGY0NTE4M2EwOTcxNGY5ZTlkZjhlYjZmZTRhMjI4YjkwZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9vay5oCkBAIC0w
LDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBRdWlja0xvb2tfaAorI2RlZmluZSBR
dWlja0xvb2tfaAorCisjaWYgVVNFKFFVSUNLX0xPT0spCisKKyNpbXBvcnQgIlJlc291cmNlUmVx
dWVzdC5oIgorI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9QYXNz
T3duUHRyLmg+CisKKyNpZmRlZiBfX09CSkNfXworQGNsYXNzIE5TRGF0YTsKK0BjbGFzcyBOU0Rp
Y3Rpb25hcnk7CitAY2xhc3MgTlNGaWxlSGFuZGxlOworQGNsYXNzIE5TU2V0OworQGNsYXNzIE5T
U3RyaW5nOworQGNsYXNzIE5TVVJMOworQGNsYXNzIE5TVVJMQ29ubmVjdGlvbjsKK0BjbGFzcyBO
U1VSTFJlc3BvbnNlOworI2Vsc2UKK2NsYXNzIE5TRGF0YTsKK2NsYXNzIE5TRGljdGlvbmFyeTsK
K2NsYXNzIE5TRmlsZUhhbmRsZTsKK2NsYXNzIE5TU2V0OworY2xhc3MgTlNTdHJpbmc7CitjbGFz
cyBOU1VSTDsKK2NsYXNzIE5TVVJMQ29ubmVjdGlvbjsKK2NsYXNzIE5TVVJMUmVzcG9uc2U7Cisj
ZW5kaWYKKworI2lmIFVTRShDRk5FVFdPUkspCit0eXBlZGVmIHN0cnVjdCBfQ0ZVUkxSZXNwb25z
ZSogQ0ZVUkxSZXNwb25zZVJlZjsKK3R5cGVkZWYgc3RydWN0IF9DRlVSTENvbm5lY3Rpb24qIENG
VVJMQ29ubmVjdGlvblJlZjsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFJlc291cmNlSGFuZGxlOworY2xhc3MgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOworCitDbGFzcyBRTFByZXZpZXdDb252ZXJ0ZXJDbGFzcygpOworTlNT
dHJpbmcgKlFMVHlwZUNvcHlCZXN0TWltZVR5cGVGb3JGaWxlTmFtZUFuZE1pbWVUeXBlKE5TU3Ry
aW5nICpmaWxlTmFtZSwgTlNTdHJpbmcgKm1pbWVUeXBlKTsKK05TU3RyaW5nICpRTFR5cGVDb3B5
QmVzdE1pbWVUeXBlRm9yVVJMQW5kTWltZVR5cGUoTlNVUkwgKiwgTlNTdHJpbmcgKm1pbWVUeXBl
KTsKKworTlNTZXQgKlFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpOworCisvLyBV
c2VkIGZvciBzZXR0aW5nIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgc2F2ZWQgUUwgY29udGVudAor
TlNEaWN0aW9uYXJ5ICpRTEZpbGVBdHRyaWJ1dGVzKCk7CitOU0RpY3Rpb25hcnkgKlFMRGlyZWN0
b3J5QXR0cmlidXRlcygpOworCit2b2lkIGFkZFFMUHJldmlld0NvbnZlcnRlcldpdGhGaWxlRm9y
VVJMKE5TVVJMICosIGlkIGNvbnZlcnRlciwgTlNTdHJpbmcgKmZpbGVOYW1lKTsKK05TU3RyaW5n
ICpxbFByZXZpZXdDb252ZXJ0ZXJGaWxlTmFtZUZvclVSTChOU1VSTCAqKTsKK05TU3RyaW5nICpx
bFByZXZpZXdDb252ZXJ0ZXJVVElGb3JVUkwoTlNVUkwgKik7Cit2b2lkIHJlbW92ZVFMUHJldmll
d0NvbnZlcnRlckZvclVSTChOU1VSTCAqKTsKKworUGFzc093blB0cjxSZXNvdXJjZVJlcXVlc3Q+
IHJlZ2lzdGVyUUxQcmV2aWV3Q29udmVydGVySWZOZWVkZWQoTlNVUkwgKiwgTlNTdHJpbmcgKm1p
bWVUeXBlLCBOU0RhdGEgKik7CisKK2NvbnN0IFVSTCBzYWZlUUxVUkxGb3JEb2N1bWVudFVSTEFu
ZFJlc291cmNlVVJMKGNvbnN0IFVSTCYgZG9jdW1lbnRVUkwsIGNvbnN0IFN0cmluZyYgcmVzb3Vy
Y2VVUkwpOworCitjb25zdCBjaGFyKiBRTFByZXZpZXdQcm90b2NvbCgpOworCisKK2NsYXNzIFF1
aWNrTG9va0hhbmRsZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUXVpY2tMb29rSGFuZGxl
KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxRdWlja0xvb2tIYW5kbGU+IGNyZWF0
ZShSZXNvdXJjZUhhbmRsZSosIE5TVVJMQ29ubmVjdGlvbiAqLCBOU1VSTFJlc3BvbnNlICosIGlk
IGRlbGVnYXRlKTsKKyNpZiBVU0UoQ0ZORVRXT1JLKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFF1
aWNrTG9va0hhbmRsZT4gY3JlYXRlKFJlc291cmNlSGFuZGxlKiwgU3luY2hyb25vdXNSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKiwgQ0ZVUkxSZXNwb25zZVJlZik7CisjZW5k
aWYKKyAgICB+UXVpY2tMb29rSGFuZGxlKCk7CisKKyAgICBib29sIGRpZFJlY2VpdmVEYXRhQXJy
YXkoQ0ZBcnJheVJlZik7CisgICAgYm9vbCBkaWRSZWNlaXZlRGF0YShDRkRhdGFSZWYpOworICAg
IGJvb2wgZGlkRmluaXNoTG9hZGluZygpOworICAgIHZvaWQgZGlkRmFpbCgpOworCisgICAgTlNV
UkxSZXNwb25zZSAqbnNSZXNwb25zZSgpOworI2lmIFVTRShDRk5FVFdPUkspCisgICAgQ0ZVUkxS
ZXNwb25zZVJlZiBjZlJlc3BvbnNlKCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBRdWlja0xv
b2tIYW5kbGUoUmVzb3VyY2VIYW5kbGUqLCBOU1VSTENvbm5lY3Rpb24gKiwgTlNVUkxSZXNwb25z
ZSAqLCBpZCBkZWxlZ2F0ZSk7CisjaWYgVVNFKENGTkVUV09SSykKKyAgICBRdWlja0xvb2tIYW5k
bGUoUmVzb3VyY2VIYW5kbGUqLCBDRlVSTFJlc3BvbnNlUmVmKTsKKyNlbmRpZgorCisgICAgUmVz
b3VyY2VIYW5kbGUqIG1faGFuZGxlOworICAgIFJldGFpblB0cjxpZD4gbV9jb252ZXJ0ZXI7Cisg
ICAgUmV0YWluUHRyPGlkPiBtX2RlbGVnYXRlOworICAgIGJvb2wgbV9maW5pc2hlZExvYWRpbmdE
YXRhSW50b0NvbnZlcnRlcjsKKyAgICBSZXRhaW5QdHI8TlNGaWxlSGFuZGxlICo+IG1fcXVpY2ts
b29rRmlsZUhhbmRsZTsKKyAgICBOU1VSTFJlc3BvbnNlICptX25zUmVzcG9uc2U7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoUVVJQ0tfTE9PSykKKworI2Vu
ZGlmIC8vIFF1aWNrTG9va19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2lvcy9RdWlja0xvb2subW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2lvcy9RdWlja0xvb2subW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2U3NjkwOTExZTE3ZDIwMDMxZDg5N2UxOWU2
NmE0ZDRhZDY1ZWZkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvaW9zL1F1aWNrTG9vay5tbQpAQCAtMCwwICsxLDQ2NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUXVpY2tMb29rLmgiCisKKyNpZiBVU0UoUVVJ
Q0tfTE9PSykKKworI2ltcG9ydCAiRmlsZVN5c3RlbUlPUy5oIgorI2ltcG9ydCAiTG9nZ2luZy5o
IgorI2ltcG9ydCAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrc0lPUy5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgIlN5bmNocm9u
b3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV2Vi
Q29yZVVSTFJlc3BvbnNlSU9TLmgiCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
KyNpbXBvcnQgPEZvdW5kYXRpb24vTlNGaWxlTWFuYWdlcl9OU1VSTEV4dHJhcy5oPgorI2ltcG9y
dCA8UXVpY2tMb29rL1FMUHJldmlld0NvbnZlcnRlci5oPgorI2ltcG9ydCA8UXVpY2tMb29rL1F1
aWNrTG9va1ByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9y
dCA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL1RocmVhZGluZy5oPgorI2ltcG9y
dCA8d3RmL1ZlY3Rvci5oPgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBV
U0UoQ0ZORVRXT1JLKQorI2ltcG9ydCA8Q0ZOZXR3b3JrL0NGVVJMQ29ubmVjdGlvbi5oPgorCitA
aW50ZXJmYWNlIE5TVVJMUmVzcG9uc2UgKFF1aWNrTG9va0RldGFpbHMpCisrKE5TVVJMUmVzcG9u
c2UgKilfcmVzcG9uc2VXaXRoQ0ZVUkxSZXNwb25zZTooQ0ZVUkxSZXNwb25zZVJlZilyZXNwb25z
ZTsKKy0oQ0ZVUkxSZXNwb25zZVJlZilfQ0ZVUkxSZXNwb25zZTsKK0BlbmQKKyNlbmRpZgorCitT
T0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKFF1aWNrTG9vaykKK1NPRlRfTElOS19DTEFTUyhR
dWlja0xvb2ssIFFMUHJldmlld0NvbnZlcnRlcikKK1NPRlRfTElOS19NQVlfRkFJTChRdWlja0xv
b2ssIFFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlcywgTlNTZXQgKiwgKCksICgpKQorU09G
VF9MSU5LX01BWV9GQUlMKFF1aWNrTG9vaywgUUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvckZpbGVO
YW1lQW5kTWltZVR5cGUsIE5TU3RyaW5nICosIChOU1N0cmluZyAqZmlsZU5hbWUsIE5TU3RyaW5n
ICptaW1lVHlwZSksIChmaWxlTmFtZSwgbWltZVR5cGUpKQorU09GVF9MSU5LX01BWV9GQUlMKFF1
aWNrTG9vaywgUUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvclVSTEFuZE1pbWVUeXBlLCBOU1N0cmlu
ZyAqLCAoTlNVUkwgKnVybCwgTlNTdHJpbmcgKm1pbWVUeXBlKSwgKHVybCwgbWltZVR5cGUpKQor
U09GVF9MSU5LX01BWV9GQUlMKFF1aWNrTG9vaywgUUxUeXBlQ29weVVUSUZvclVSTEFuZE1pbWVU
eXBlLCBOU1N0cmluZyAqLCAoTlNVUkwgKnVybCwgTlNTdHJpbmcgKm1pbWVUeXBlKSwgKHVybCwg
bWltZVR5cGUpKQorU09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMKFF1aWNrTG9vaywgUUxQcmV2
aWV3U2NoZW1lLCBOU1N0cmluZyAqKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgTlNTdHJp
bmcgKlFMVHlwZUNvcHlVVElGb3JVUkxBbmRNaW1lVHlwZShOU1VSTCAqdXJsLCBOU1N0cmluZyAq
bWltZVR5cGUpOworfQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQ2xhc3MgV2ViQ29y
ZTo6UUxQcmV2aWV3Q29udmVydGVyQ2xhc3MoKQoreworI2RlZmluZSBRTFByZXZpZXdDb252ZXJ0
ZXIgZ2V0UUxQcmV2aWV3Q29udmVydGVyQ2xhc3MoKQorICAgIHJldHVybiBRTFByZXZpZXdDb252
ZXJ0ZXI7CisjdW5kZWYgUUxQcmV2aWV3Q29udmVydGVyCit9CisKK05TU3RyaW5nICpXZWJDb3Jl
OjpRTFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yRmlsZU5hbWVBbmRNaW1lVHlwZShOU1N0cmluZyAq
ZmlsZU5hbWUsIE5TU3RyaW5nICptaW1lVHlwZSkKK3sKKyAgICBpZiAoIWNhbkxvYWRRTFR5cGVD
b3B5QmVzdE1pbWVUeXBlRm9yRmlsZU5hbWVBbmRNaW1lVHlwZSgpKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgcmV0dXJuIDo6UUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvckZpbGVOYW1lQW5k
TWltZVR5cGUoZmlsZU5hbWUsIG1pbWVUeXBlKTsKK30KKworTlNTdHJpbmcgKldlYkNvcmU6OlFM
VHlwZUNvcHlCZXN0TWltZVR5cGVGb3JVUkxBbmRNaW1lVHlwZShOU1VSTCAqdXJsLCBOU1N0cmlu
ZyAqbWltZVR5cGUpCit7CisgICAgaWYgKCFjYW5Mb2FkUUxUeXBlQ29weUJlc3RNaW1lVHlwZUZv
clVSTEFuZE1pbWVUeXBlKCkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gOjpR
TFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yVVJMQW5kTWltZVR5cGUodXJsLCBtaW1lVHlwZSk7Cit9
CisKK05TU2V0ICpXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKQor
eworICAgIGlmICghY2FuTG9hZFFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlcygpKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgc3RhdGljIE5TU2V0ICpzZXQgPSBhZG9wdE5TKDo6UUxQ
cmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzKCkpLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gc2V0
OworfQorCitOU1N0cmluZyAqV2ViQ29yZTo6UUxUeXBlQ29weVVUSUZvclVSTEFuZE1pbWVUeXBl
KE5TVVJMICp1cmwsIE5TU3RyaW5nICptaW1lVHlwZSkKK3sKKyAgICBpZiAoIWNhbkxvYWRRTFR5
cGVDb3B5VVRJRm9yVVJMQW5kTWltZVR5cGUoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IHJldHVybiA6OlFMVHlwZUNvcHlVVElGb3JVUkxBbmRNaW1lVHlwZSh1cmwsIG1pbWVUeXBlKTsK
K30KKworTlNEaWN0aW9uYXJ5ICpXZWJDb3JlOjpRTEZpbGVBdHRyaWJ1dGVzKCkKK3sKKyAgICAv
LyBTZXQgZmlsZSBwZXJtcyB0byBvd25lciByZWFkL3dyaXRlIG9ubHkKKyAgICBOU051bWJlciAq
ZmlsZVBPU0lYUGVybWlzc2lvbnMgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6KFdFQl9V
UkVBRCB8IFdFQl9VV1JJVEUpXTsKKyAgICBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5
ID0gYWRvcHROUyhbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VzZXJOYW1lKCksIE5T
RmlsZU93bmVyQWNjb3VudE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmlsZVBPU0lYUGVybWlzc2lvbnMsIE5TRmlsZVBvc2l4UGVybWlzc2lvbnMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cl0pLmxlYWtSZWYoKTsK
KyAgICByZXR1cm4gZGljdGlvbmFyeTsKK30KKworTlNEaWN0aW9uYXJ5ICpXZWJDb3JlOjpRTERp
cmVjdG9yeUF0dHJpYnV0ZXMoKQoreworICAgIC8vIFNldCBmaWxlIHBlcm1zIHRvIG93bmVyIHJl
YWQvd3JpdGUvZXhlY3V0ZSBvbmx5CisgICAgTlNOdW1iZXIgKmRpcmVjdG9yeVBPU0lYUGVybWlz
c2lvbnMgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6KFdFQl9VUkVBRCB8IFdFQl9VV1JJ
VEUgfCBXRUJfVUVYRUMpXTsKKyAgICBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0g
YWRvcHROUyhbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVXNlck5hbWUo
KSwgTlNGaWxlT3duZXJBY2NvdW50TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeVBPU0lYUGVybWlzc2lvbnMsIE5TRmlsZVBvc2l4
UGVybWlzc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudWxscHRyXSkubGVha1JlZigpOworICAgIHJldHVybiBkaWN0aW9uYXJ5OworfQorCitz
dGF0aWMgTXV0ZXgmIHFsUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnlNdXRleCgpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPE11dGV4PiBtdXRleDsKKyAgICByZXR1cm4gbXV0ZXg7Cit9
CisKK3N0YXRpYyBOU011dGFibGVEaWN0aW9uYXJ5ICpRTFByZXZpZXdDb252ZXJ0ZXJEaWN0aW9u
YXJ5KCkKK3sKKyAgICBzdGF0aWMgTlNNdXRhYmxlRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IGFk
b3B0TlMoW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV0pLmxlYWtSZWYoKTsKKyAgICBy
ZXR1cm4gZGljdGlvbmFyeTsKK30KKworc3RhdGljIE5TTXV0YWJsZURpY3Rpb25hcnkgKlFMQ29u
dGVudERpY3Rpb25hcnkoKQoreworICAgIHN0YXRpYyBOU011dGFibGVEaWN0aW9uYXJ5ICpjb250
ZW50RGljdGlvbmFyeSA9IGFkb3B0TlMoW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV0p
LmxlYWtSZWYoKTsKKyAgICByZXR1cm4gY29udGVudERpY3Rpb25hcnk7Cit9CisKK3ZvaWQgV2Vi
Q29yZTo6YWRkUUxQcmV2aWV3Q29udmVydGVyV2l0aEZpbGVGb3JVUkwoTlNVUkwgKnVybCwgaWQg
Y29udmVydGVyLCBOU1N0cmluZyAqZmlsZU5hbWUpCit7CisgICAgQVNTRVJUKHVybCk7CisgICAg
QVNTRVJUKGNvbnZlcnRlcik7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhxbFByZXZpZXdDb252ZXJ0
ZXJEaWN0aW9uYXJ5TXV0ZXgoKSk7CisgICAgW1FMUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnko
KSBzZXRPYmplY3Q6Y29udmVydGVyIGZvcktleTp1cmxdOworICAgIFtRTENvbnRlbnREaWN0aW9u
YXJ5KCkgc2V0T2JqZWN0OihmaWxlTmFtZSA/IGZpbGVOYW1lIDogQCIiKSBmb3JLZXk6dXJsXTsK
K30KKworTlNTdHJpbmcgKldlYkNvcmU6OnFsUHJldmlld0NvbnZlcnRlckZpbGVOYW1lRm9yVVJM
KE5TVVJMICp1cmwpCit7CisgICAgcmV0dXJuIFtRTENvbnRlbnREaWN0aW9uYXJ5KCkgb2JqZWN0
Rm9yS2V5OnVybF07Cit9CisKK05TU3RyaW5nICpXZWJDb3JlOjpxbFByZXZpZXdDb252ZXJ0ZXJV
VElGb3JVUkwoTlNVUkwgKnVybCkKK3sKKyAgICBpZCBjb252ZXJ0ZXIgPSBuaWw7CisgICAgewor
ICAgICAgICBNdXRleExvY2tlciBsb2NrKHFsUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnlNdXRl
eCgpKTsKKyAgICAgICAgY29udmVydGVyID0gW1FMUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnko
KSBvYmplY3RGb3JLZXk6dXJsXTsKKyAgICB9CisgICAgaWYgKCFjb252ZXJ0ZXIpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtjb252ZXJ0ZXIgcHJldmlld1VUSV07Cit9CisKK3Zv
aWQgV2ViQ29yZTo6cmVtb3ZlUUxQcmV2aWV3Q29udmVydGVyRm9yVVJMKE5TVVJMICp1cmwpCit7
CisgICAgTXV0ZXhMb2NrZXIgbG9jayhxbFByZXZpZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5TXV0ZXgo
KSk7CisgICAgW1FMUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnkoKSByZW1vdmVPYmplY3RGb3JL
ZXk6dXJsXTsKKworICAgIC8vIERlbGV0ZSB0aGUgZmlsZSB3aGVuIHdlIHJlbW92ZSB0aGUgcHJl
dmlldyBjb252ZXJ0ZXIKKyAgICBOU1N0cmluZyAqZmlsZW5hbWUgPSBxbFByZXZpZXdDb252ZXJ0
ZXJGaWxlTmFtZUZvclVSTCh1cmwpOworICAgIGlmIChbZmlsZW5hbWUgbGVuZ3RoXSkKKyAgICAg
ICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBfd2ViX3JlbW92ZUZpbGVPbmx5QXRQ
YXRoOmZpbGVuYW1lXTsKKyAgICBbUUxDb250ZW50RGljdGlvbmFyeSgpIHJlbW92ZU9iamVjdEZv
cktleTp1cmxdOworfQorCitQYXNzT3duUHRyPFJlc291cmNlUmVxdWVzdD4gV2ViQ29yZTo6cmVn
aXN0ZXJRTFByZXZpZXdDb252ZXJ0ZXJJZk5lZWRlZChOU1VSTCAqdXJsLCBOU1N0cmluZyAqbWlt
ZVR5cGUsIE5TRGF0YSAqZGF0YSkKK3sKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHVwZGF0ZWRN
SU1FVHlwZSA9IGFkb3B0TlMoV2ViQ29yZTo6UUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvclVSTEFu
ZE1pbWVUeXBlKHVybCwgbWltZVR5cGUpKTsKKworICAgIGlmIChbV2ViQ29yZTo6UUxQcmV2aWV3
R2V0U3VwcG9ydGVkTUlNRVR5cGVzU2V0KCkgY29udGFpbnNPYmplY3Q6dXBkYXRlZE1JTUVUeXBl
LmdldCgpXSkgeworICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHV0aSA9IGFkb3B0TlMoV2Vi
Q29yZTo6UUxUeXBlQ29weVVUSUZvclVSTEFuZE1pbWVUeXBlKHVybCwgdXBkYXRlZE1JTUVUeXBl
LmdldCgpKSk7CisKKyAgICAgICAgUmV0YWluUHRyPGlkPiBjb252ZXJ0ZXIgPSBhZG9wdE5TKFtb
UUxQcmV2aWV3Q29udmVydGVyQ2xhc3MoKSBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGEgbmFtZTpu
aWwgdXRpOnV0aS5nZXQoKSBvcHRpb25zOm5pbF0pOworICAgICAgICBOU1VSTFJlcXVlc3QgKnJl
cXVlc3QgPSBbY29udmVydGVyLmdldCgpIHByZXZpZXdSZXF1ZXN0XTsKKworICAgICAgICAvLyBX
ZSB1c2UgW3JlcXVlc3QgVVJMXSBoZXJlIGluc3RlYWQgb2YgdXJsIHNpbmNlIGl0IHdpbGwgYmUK
KyAgICAgICAgLy8gdGhlIFVSTCB0aGF0IHRoZSBXZWJEYXRhU291cmNlIHdpbGwgc2VlIGR1cmlu
ZyAtZGVhbGxvYy4KKyAgICAgICAgYWRkUUxQcmV2aWV3Q29udmVydGVyV2l0aEZpbGVGb3JVUkwo
W3JlcXVlc3QgVVJMXSwgY29udmVydGVyLmdldCgpLCBuaWwpOworCisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworY29uc3QgVVJMIFdlYkNvcmU6OnNhZmVRTFVSTEZvckRvY3VtZW50
VVJMQW5kUmVzb3VyY2VVUkwoY29uc3QgVVJMJiBkb2N1bWVudFVSTCwgY29uc3QgU3RyaW5nJiBy
ZXNvdXJjZVVSTCkKK3sKKyAgICBpZCBjb252ZXJ0ZXIgPSBuaWw7CisgICAgTlNVUkwgKm5zRG9j
dW1lbnRVUkwgPSBkb2N1bWVudFVSTDsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2so
cWxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeU11dGV4KCkpOworICAgICAgICBjb252ZXJ0ZXIg
PSBbUUxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeSgpIG9iamVjdEZvcktleTpuc0RvY3VtZW50
VVJMXTsKKyAgICB9CisKKyAgICBpZiAoIWNvbnZlcnRlcikKKyAgICAgICAgcmV0dXJuIFVSTChQ
YXJzZWRVUkxTdHJpbmcsIHJlc291cmNlVVJMKTsKKworICAgIFJldGFpblB0cjxOU1VSTFJlcXVl
c3Q+IHJlcXVlc3QgPSBhZG9wdE5TKFtbTlNVUkxSZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVSTDpb
TlNVUkwgVVJMV2l0aFN0cmluZzpyZXNvdXJjZVVSTF1dKTsKKyAgICBOU1VSTFJlcXVlc3QgKnNh
ZmVSZXF1ZXN0ID0gW2NvbnZlcnRlciBzYWZlUmVxdWVzdEZvclJlcXVlc3Q6cmVxdWVzdC5nZXQo
KV07CisgICAgcmV0dXJuIFtzYWZlUmVxdWVzdCBVUkxdOworfQorCitzdGF0aWMgVmVjdG9yPGNo
YXI+IGNyZWF0ZVFMUHJldmlld1Byb3RvY29sKCkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gcHJldmll
d1Byb3RvY29sOworI2RlZmluZSBRTFByZXZpZXdTY2hlbWUgZ2V0UUxQcmV2aWV3U2NoZW1lKCkK
KyAgICBjb25zdCBjaGFyKiBxbFByZXZpZXdTY2hlbWUgPSBbUUxQcmV2aWV3U2NoZW1lIFVURjhT
dHJpbmddOworI3VuZGVmIFFMUHJldmlld1NjaGVtZQorICAgIHByZXZpZXdQcm90b2NvbC5hcHBl
bmQocWxQcmV2aWV3U2NoZW1lLCBzdHJsZW4ocWxQcmV2aWV3U2NoZW1lKSArIDEpOworICAgIHJl
dHVybiBwcmV2aWV3UHJvdG9jb2w7Cit9CisKK2NvbnN0IGNoYXIqIFdlYkNvcmU6OlFMUHJldmll
d1Byb3RvY29sKCkKK3sKKyAgICBpZiAoIWNhbkxvYWRRTFByZXZpZXdTY2hlbWUoKSkKKyAgICAg
ICAgcmV0dXJuICIiOworCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxjaGFyPj4g
cHJldmlld1Byb3RvY29sKGNyZWF0ZVFMUHJldmlld1Byb3RvY29sKCkpOworICAgIHJldHVybiBw
cmV2aWV3UHJvdG9jb2wuZ2V0KCkuZGF0YSgpOworfQorCisjaWYgVVNFKENGTkVUV09SSykKKy8v
IFRoZSB3YXkgUXVpY2tMb29rIHdvcmtzIGlzIHdlIHBhc3MgaXQgYW4gTlNVUkxDb25uZWN0aW9u
RGVsZWdhdGUgY2FsbGJhY2sgb2JqZWN0IGF0IGNyZWF0aW9uCisvLyB0aW1lLiBUaGVuIHdlIHBh
c3MgaXQgYWxsIHRoZSBkYXRhIGFzIHdlIHJlY2VpdmUgaXQuIE9uY2Ugd2UndmUgZG93bmxvYWRl
ZCB0aGUgZnVsbCBVUkwsCisvLyBRdWlja0xvb2sgdHVybnMgYXJvdW5kIGFuZCBzZW5kIHVzLCB0
aHJvdWdoIHRoaXMgZGVsZWdhdGUsIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhlIGZpbGUgd2hpY2gg
d2UKKy8vIHBhc3Mgb24gdG8gV2ViQ29yZS4gVGhlIGZsYWcgbV9maW5pc2hlZExvYWRpbmdEYXRh
SW50b0NvbnZlcnRlciBpbiBRdWlja0xvb2tIYW5kbGUgZGVjaWRlcworLy8gd2hldGhlciB0byBw
YXNzIHRoZSBkYXRhIHRvIFF1aWNrTG9vayBvciBXZWJDb3JlLgorLy8KKy8vIFRoaXMgd29ya3Mg
ZmluZSB3aGVuIHVzaW5nIE5TIEFQSXMsIGJ1dCB3aGVuIHVzaW5nIENGTmV0d29yaywgd2UgZG9u
J3QgaGF2ZSBhIE5TVVJMQ29ubmVjdGlvbkRlbGVnYXRlLgorLy8gU28gd2UgY3JlYXRlIFdlYlF1
aWNrTG9va0hhbmRsZUFzRGVsZWdhdGUgYXMgYW4gaW50ZXJtZWRpYXRlIGRlbGVnYXRlIG9iamVj
dCBhbmQgcGFzcyBpdCB0bworLy8gUUxQcmV2aWV3Q29udmVydGVyLiBUaGUgcHJveHkgZGVsZWdh
dGUgdGhlbiBmb3J3YXJkcyB0aGUgbWVzc2FnZXMgb24gdG8gdGhlIENGTmV0d29yayBjb2RlLgor
QGludGVyZmFjZSBXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVnYXRlIDogTlNPYmplY3QgPE5TVVJM
Q29ubmVjdGlvbkRlbGVnYXRlPiB7CisgICAgUmVmUHRyPFN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZT4gbV9jb25uZWN0aW9uRGVsZWdhdGU7Cit9CisKKy0g
KGlkKWluaXRXaXRoQ29ubmVjdGlvbkRlbGVnYXRlOihTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUqKWNvbm5lY3Rpb25EZWxlZ2F0ZTsKKy0gKHZvaWQpY2xl
YXJIYW5kbGU7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJRdWlja0xvb2tIYW5kbGVBc0Rl
bGVnYXRlCistIChpZClpbml0V2l0aENvbm5lY3Rpb25EZWxlZ2F0ZTooU3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKiljb25uZWN0aW9uRGVsZWdhdGUKK3sK
KyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBtX2Nvbm5lY3Rpb25EZWxlZ2F0ZSA9IGNvbm5lY3Rpb25EZWxlZ2F0ZTsKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24g
Kiljb25uZWN0aW9uIGRpZFJlY2VpdmVEYXRhQXJyYXk6KE5TQXJyYXkgKilkYXRhQXJyYXkKK3sK
KyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb25EZWxl
Z2F0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIExPRyhOZXR3b3JrLCAiV2ViUXVpY2tMb29rSGFu
ZGxlQXNEZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGFBcnJheSgpIik7CisgICAgbV9jb25uZWN0aW9u
RGVsZWdhdGUtPmRpZFJlY2VpdmVEYXRhQXJyYXkocmVpbnRlcnByZXRfY2FzdDxDRkFycmF5UmVm
PihkYXRhQXJyYXkpKTsKK30KKworLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24g
Kiljb25uZWN0aW9uIGRpZFJlY2VpdmVEYXRhOihOU0RhdGEgKilkYXRhIGxlbmd0aFJlY2VpdmVk
Oihsb25nIGxvbmcpbGVuZ3RoUmVjZWl2ZWQKK3sKKyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlv
bik7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb25EZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworICAg
IExPRyhOZXR3b3JrLCAiV2ViUXVpY2tMb29rSGFuZGxlQXNEZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURh
dGEoKSAtIGRhdGEgbGVuZ3RoID0gJWxkIiwgKGxvbmcpW2RhdGEgbGVuZ3RoXSk7CisKKyAgICAv
LyBRdWlja0xvb2sgY29kZSBzZW5kcyB1cyBhIG5pbCBkYXRhIGF0IHRpbWVzLiBUaGUgY2hlY2sg
YmVsb3cgaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSBpbgorICAgIC8vIFJlc291cmNlSGFuZGxlTWFj
LmNwcCBhZGRlZCBmb3IgYSBkaWZmZXJlbnQgYnVnLgorICAgIGlmICghW2RhdGEgbGVuZ3RoXSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlLT5kaWRSZWNlaXZlRGF0
YShyZWludGVycHJldF9jYXN0PENGRGF0YVJlZj4oZGF0YSksIHN0YXRpY19jYXN0PGludD4obGVu
Z3RoUmVjZWl2ZWQpKTsKK30KKworLSAodm9pZCljb25uZWN0aW9uRGlkRmluaXNoTG9hZGluZzoo
TlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbgoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0
aW9uKTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbkRlbGVnYXRlKQorICAgICAgICByZXR1cm47Cisg
ICAgTE9HKE5ldHdvcmssICJXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVnYXRlOjpkaWRGaW5pc2hM
b2FkaW5nKCkiKTsKKyAgICBtX2Nvbm5lY3Rpb25EZWxlZ2F0ZS0+ZGlkRmluaXNoTG9hZGluZygp
OworfQorCistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24g
ZGlkRmFpbFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKGNv
bm5lY3Rpb24pOworICAgIGlmICghbV9jb25uZWN0aW9uRGVsZWdhdGUpCisgICAgICAgIHJldHVy
bjsKKyAgICBMT0coTmV0d29yaywgIldlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGU6OmRpZEZh
aWwoKSIpOworICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlLT5kaWRGYWlsKHJlaW50ZXJwcmV0X2Nh
c3Q8Q0ZFcnJvclJlZj4oZXJyb3IpKTsKK30KKworLSAodm9pZCljbGVhckhhbmRsZQoreworICAg
IG1fY29ubmVjdGlvbkRlbGVnYXRlID0gbnVsbHB0cjsKK30KK0BlbmQKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBOU1N0cmluZyAqY3JlYXRlVGVtcG9yYXJ5RmlsZUZv
clF1aWNrTG9vayhOU1N0cmluZyAqZmlsZU5hbWUpCit7CisgICAgTlNTdHJpbmcgKmRvd25sb2Fk
RGlyZWN0b3J5ID0gY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KEAiUXVpY2tMb29rQ29udGVudCIp
OworICAgIGlmICghZG93bmxvYWREaXJlY3RvcnkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBOU1N0cmluZyAqY29udGVudFBhdGggPSBbZG93bmxvYWREaXJlY3Rvcnkgc3RyaW5nQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OmZpbGVOYW1lXTsKKyAgICBOU0ZpbGVNYW5hZ2VyICpmaWxlTWFu
YWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKKyAgICBOU1N0cmluZyAqdW5p
cXVlQ29udGVudFBhdGggPSBbZmlsZU1hbmFnZXIgX3dlYl9wYXRoV2l0aFVuaXF1ZUZpbGVuYW1l
Rm9yUGF0aDpjb250ZW50UGF0aF07CisKKyAgICBCT09MIHN1Y2Nlc3MgPSBbZmlsZU1hbmFnZXIg
X3dlYl9jcmVhdGVGaWxlQXRQYXRoV2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOnVuaXF1ZUNv
bnRlbnRQYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50czpuaWwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGVzOlFMRmlsZUF0dHJpYnV0ZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeUF0dHJpYnV0ZXM6UUxEaXJl
Y3RvcnlBdHRyaWJ1dGVzKCldOworCisgICAgcmV0dXJuIHN1Y2Nlc3MgPyB1bmlxdWVDb250ZW50
UGF0aCA6IG5pbDsKK30KKworCitRdWlja0xvb2tIYW5kbGU6OlF1aWNrTG9va0hhbmRsZShSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBOU1VSTENvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIE5TVVJMUmVz
cG9uc2UgKm5zUmVzcG9uc2UsIGlkIGRlbGVnYXRlKQorICAgIDogbV9oYW5kbGUoaGFuZGxlKQor
ICAgICwgbV9jb252ZXJ0ZXIoYWRvcHROUyhbW1FMUHJldmlld0NvbnZlcnRlckNsYXNzKCkgYWxs
b2NdIGluaXRXaXRoQ29ubmVjdGlvbjpjb25uZWN0aW9uIGRlbGVnYXRlOmRlbGVnYXRlIHJlc3Bv
bnNlOm5zUmVzcG9uc2Ugb3B0aW9uczpuaWxdKSkKKyAgICAsIG1fZGVsZWdhdGUoYWRvcHROUyhb
ZGVsZWdhdGUgcmV0YWluXSkpCisgICAgLCBtX2ZpbmlzaGVkTG9hZGluZ0RhdGFJbnRvQ29udmVy
dGVyKGZhbHNlKQorICAgICwgbV9uc1Jlc3BvbnNlKFttX2NvbnZlcnRlci5nZXQoKSBwcmV2aWV3
UmVzcG9uc2VdKQoreworICAgIE5TVVJMICpwcmV2aWV3UmVxdWVzdFVSTCA9IFtbbV9jb252ZXJ0
ZXIuZ2V0KCkgcHJldmlld1JlcXVlc3RdIFVSTF07CisgICAgaWYgKCFhcHBsaWNhdGlvbklzTW9i
aWxlU2FmYXJpKCkpIHsKKyAgICAgICAgLy8gVGhpcyBrZWVwcyB0aGUgUUxQcmV2aWV3Q29udmVy
dGVyIGFsaXZlIHRvIHNlcnZlIGFueSBzdWJyZXNvdXJjZSByZXF1ZXN0cy4KKyAgICAgICAgLy8g
SXQgaXMgcmVtb3ZlZCBieSAtW1dlYkRhdGFTb3VyY2UgZGVhbGxvY10uCisgICAgICAgIGFkZFFM
UHJldmlld0NvbnZlcnRlcldpdGhGaWxlRm9yVVJMKHByZXZpZXdSZXF1ZXN0VVJMLCBtX2NvbnZl
cnRlci5nZXQoKSwgbmlsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFF1aWNr
TG9vayBjb25zdW1lcyB0aGUgaW5jb21pbmcgZGF0YSwgd2UgbmVlZCB0byBzdG9yZSBpdCBzbyB0
aGF0IGl0IGNhbiBiZSBvcGVuZWQgaW4gdGhlIGhhbmRsaW5nIGFwcGxpY2F0aW9uLgorICAgIE5T
U3RyaW5nICpxdWlja2xvb2tDb250ZW50UGF0aCA9IGNyZWF0ZVRlbXBvcmFyeUZpbGVGb3JRdWlj
a0xvb2soW21fY29udmVydGVyLmdldCgpIHByZXZpZXdGaWxlTmFtZV0pOworICAgIExPRyhOZXR3
b3JrLCAiUXVpY2tMb29rSGFuZGxlOjpRdWlja0xvb2tIYW5kbGUoKSAtIHF1aWNrbG9va0NvbnRl
bnRQYXRoOiAlcyIsIFtxdWlja2xvb2tDb250ZW50UGF0aCBVVEY4U3RyaW5nXSk7CisKKyAgICBp
ZiAocXVpY2tsb29rQ29udGVudFBhdGgpIHsKKyAgICAgICAgbV9xdWlja2xvb2tGaWxlSGFuZGxl
ID0gYWRvcHROUyhbW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlRm9yV3JpdGluZ0F0UGF0aDpxdWlj
a2xvb2tDb250ZW50UGF0aF0gcmV0YWluXSk7CisgICAgICAgIC8vIFdlIG11c3QgdXNlIHRoZSBn
ZW5lcmF0ZWQgVVJMIGZyb20gbV9jb252ZXJ0ZXIncyBOU1VSTFJlcXVlc3Qgb2JqZWN0CisgICAg
ICAgIC8vIHNvIHRoYXQgaXQgbWF0Y2hlcyB0aGUgVVJMIHJlbW92ZWQgZnJvbSAtW1dlYkRhdGFT
b3VyY2UgZGVhbGxvY10uCisgICAgICAgIGFkZFFMUHJldmlld0NvbnZlcnRlcldpdGhGaWxlRm9y
VVJMKHByZXZpZXdSZXF1ZXN0VVJMLCBtX2NvbnZlcnRlci5nZXQoKSwgcXVpY2tsb29rQ29udGVu
dFBhdGgpOworICAgIH0KK30KKworUGFzc093blB0cjxRdWlja0xvb2tIYW5kbGU+IFF1aWNrTG9v
a0hhbmRsZTo6Y3JlYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIE5TVVJMQ29ubmVjdGlvbiAq
Y29ubmVjdGlvbiwgTlNVUkxSZXNwb25zZSAqbnNSZXNwb25zZSwgaWQgZGVsZWdhdGUpCit7Cisg
ICAgaWYgKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaXNNYWluUmVzb3VyY2VSZXF1ZXN0KCkgJiYg
W1dlYkNvcmU6OlFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpIGNvbnRhaW5zT2Jq
ZWN0Oltuc1Jlc3BvbnNlIE1JTUVUeXBlXV0pCisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
UXVpY2tMb29rSGFuZGxlKGhhbmRsZSwgY29ubmVjdGlvbiwgbnNSZXNwb25zZSwgZGVsZWdhdGUp
KTsKKworICAgIHJldHVybiBudWxscHRyOworfQorCisjaWYgVVNFKENGTkVUV09SSykKK1Bhc3NP
d25QdHI8UXVpY2tMb29rSGFuZGxlPiBRdWlja0xvb2tIYW5kbGU6OmNyZWF0ZShSZXNvdXJjZUhh
bmRsZSogaGFuZGxlLCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGUqIGNvbm5lY3Rpb25EZWxlZ2F0ZSwgQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlKQor
eworICAgIGlmIChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmlzTWFpblJlc291cmNlUmVxdWVzdCgp
ICYmIFtXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWlu
c09iamVjdDooTlNTdHJpbmcgKilDRlVSTFJlc3BvbnNlR2V0TUlNRVR5cGUoY2ZSZXNwb25zZSld
KSB7CisgICAgICAgIE5TVVJMUmVzcG9uc2UgKm5zUmVzcG9uc2UgPSBbTlNVUkxSZXNwb25zZSBf
cmVzcG9uc2VXaXRoQ0ZVUkxSZXNwb25zZTpjZlJlc3BvbnNlXTsKKyAgICAgICAgV2ViUXVpY2tM
b29rSGFuZGxlQXNEZWxlZ2F0ZSAqZGVsZWdhdGUgPSBbW1tXZWJRdWlja0xvb2tIYW5kbGVBc0Rl
bGVnYXRlIGFsbG9jXSBpbml0V2l0aENvbm5lY3Rpb25EZWxlZ2F0ZTpjb25uZWN0aW9uRGVsZWdh
dGVdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBRdWlja0xvb2tI
YW5kbGUoaGFuZGxlLCBuaWwsIG5zUmVzcG9uc2UsIGRlbGVnYXRlKSk7CisgICAgfQorCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK0NGVVJMUmVzcG9uc2VSZWYgUXVpY2tMb29rSGFuZGxlOjpj
ZlJlc3BvbnNlKCkKK3sKKyAgICByZXR1cm4gW21fbnNSZXNwb25zZSBfQ0ZVUkxSZXNwb25zZV07
Cit9CisjZW5kaWYKKworTlNVUkxSZXNwb25zZSAqUXVpY2tMb29rSGFuZGxlOjpuc1Jlc3BvbnNl
KCkKK3sKKyAgICByZXR1cm4gbV9uc1Jlc3BvbnNlOworfQorCitib29sIFF1aWNrTG9va0hhbmRs
ZTo6ZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycmF5UmVmIGNmRGF0YUFycmF5KQoreworICAgIE5T
QXJyYXkgKiBjb25zdCBkYXRhQXJyYXkgPSAoTlNBcnJheSAqKWNmRGF0YUFycmF5OworCisgICAg
aWYgKG1fZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIExPRyhOZXR3b3JrLCAiUXVpY2tMb29rSGFuZGxlOjpkaWRSZWNlaXZlRGF0
YUFycmF5KCkiKTsKKyAgICBbbV9jb252ZXJ0ZXIuZ2V0KCkgYXBwZW5kRGF0YUFycmF5OmRhdGFB
cnJheV07CisgICAgaWYgKG1fcXVpY2tsb29rRmlsZUhhbmRsZSkgeworICAgICAgICBmb3IgKE5T
RGF0YSAqZGF0YSBpbiBkYXRhQXJyYXkpCisgICAgICAgICAgICBbbV9xdWlja2xvb2tGaWxlSGFu
ZGxlLmdldCgpIHdyaXRlRGF0YTpkYXRhXTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUXVpY2tMb29rSGFuZGxlOjpkaWRSZWNlaXZlRGF0YShDRkRhdGFSZWYgY2ZEYXRhKQor
eworICAgIE5TRGF0YSAqIGNvbnN0IGRhdGEgPSAoTlNEYXRhICopY2ZEYXRhOworCisgICAgaWYg
KG1fZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIExPRyhOZXR3b3JrLCAiUXVpY2tMb29rSGFuZGxlOjpkaWRSZWNlaXZlRGF0YSgp
Iik7CisgICAgW21fY29udmVydGVyLmdldCgpIGFwcGVuZERhdGE6ZGF0YV07CisgICAgaWYgKG1f
cXVpY2tsb29rRmlsZUhhbmRsZSkKKyAgICAgICAgW21fcXVpY2tsb29rRmlsZUhhbmRsZS5nZXQo
KSB3cml0ZURhdGE6ZGF0YV07CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUXVpY2tMb29r
SGFuZGxlOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBpZiAobV9maW5pc2hlZExvYWRpbmdE
YXRhSW50b0NvbnZlcnRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTE9HKE5ldHdv
cmssICJRdWlja0xvb2tIYW5kbGU6OmRpZEZpbmlzaExvYWRpbmcoKSIpOworICAgIG1fZmluaXNo
ZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXIgPSBZRVM7CisgICAgW21fY29udmVydGVyLmdldCgp
IGZpbmlzaGVkQXBwZW5kaW5nRGF0YV07CisgICAgaWYgKG1fcXVpY2tsb29rRmlsZUhhbmRsZSkK
KyAgICAgICAgW21fcXVpY2tsb29rRmlsZUhhbmRsZS5nZXQoKSBjbG9zZUZpbGVdOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFF1aWNrTG9va0hhbmRsZTo6ZGlkRmFpbCgpCit7CisgICAg
TE9HKE5ldHdvcmssICJRdWlja0xvb2tIYW5kbGU6OmRpZEZhaWwoKSIpOworICAgIG1fcXVpY2ts
b29rRmlsZUhhbmRsZSA9IG51bGxwdHI7CisgICAgLy8gcmVtb3ZlUUxQcmV2aWV3Q29udmVydGVy
Rm9yVVJMIGRlbGV0ZXMgdGhlIHRlbXBvcmFyeSBmaWxlIGNyZWF0ZWQuCisgICAgcmVtb3ZlUUxQ
cmV2aWV3Q29udmVydGVyRm9yVVJMKFttX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkubnNVUkxSZXF1
ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpIFVSTF0pOworICAgIFttX2NvbnZlcnRlci5nZXQoKSBm
aW5pc2hDb252ZXJ0aW5nXTsKKyAgICBtX2NvbnZlcnRlciA9IG51bGxwdHI7Cit9CisKK1F1aWNr
TG9va0hhbmRsZTo6flF1aWNrTG9va0hhbmRsZSgpCit7CisgICAgTE9HKE5ldHdvcmssICJRdWlj
a0xvb2tIYW5kbGU6On5RdWlja0xvb2tIYW5kbGUoKSIpOworICAgIGlmIChtX3F1aWNrbG9va0Zp
bGVIYW5kbGUpIHsKKyAgICAgICAgbV9xdWlja2xvb2tGaWxlSGFuZGxlID0gbnVsbHB0cjsKKyAg
ICAgICAgcmVtb3ZlUUxQcmV2aWV3Q29udmVydGVyRm9yVVJMKFttX2hhbmRsZS0+Zmlyc3RSZXF1
ZXN0KCkubnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpIFVSTF0pOworICAgIH0KKyAg
ICBtX2NvbnZlcnRlciA9IG51bGxwdHI7CisKKyAgICBbbV9kZWxlZ2F0ZS5nZXQoKSBjbGVhckhh
bmRsZV07Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShRVUlDS19MT09LKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUmVzb3VyY2VIYW5kbGVJT1MubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9SZXNvdXJjZUhhbmRsZUlPUy5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42NjdiOWIxODY2NzQ0MGRlYmZlZmRhMTgwNWI4NGNiNTQ3ODRjNTc5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUmVz
b3VyY2VIYW5kbGVJT1MubW0KQEAgLTAsMCArMSwzOSBAQAorLy8KKy8vICBSZXNvdXJjZUhhbmRs
ZUlQaG9uZS5tbQorLy8gIFdlYkNvcmUKKy8vCisvLyAgQ29weXJpZ2h0IDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorCisjaW1w
b3J0IDxDRk5ldHdvcmsvQ0ZTb2NrZXRTdHJlYW1Qcml2Lmg+CisjaW1wb3J0IDxGb3VuZGF0aW9u
L05TVVJMUmVxdWVzdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlU1NMUHJvcGVydGllc0Zyb21OU1VSTFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQoreworICAgIE5TU3RyaW5nICpob3N0ID0gcmVxdWVzdC51cmwoKS5ob3N0
KCk7CisgICAgTlNBcnJheSAqY2VydEFycmF5ID0gW05TVVJMUmVxdWVzdCBhbGxvd3NTcGVjaWZp
Y0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0Omhvc3RdOworICAgIEJPT0wgYWxsb3dzQW55Q2VydGlm
aWNhdGUgPSBbTlNVUkxSZXF1ZXN0IGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVGb3JIb3N0Omhv
c3RdOworICAgIGlmICghY2VydEFycmF5ICYmICFhbGxvd3NBbnlDZXJ0aWZpY2F0ZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIHNzbFByb3BzID0gQ0ZE
aWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURp
Y3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsK
KyAgICBpZiAoY2VydEFycmF5KQorICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShzc2xQcm9w
cywgX2tDRlN0cmVhbVNTTFRydXN0ZWRMZWFmQ2VydGlmaWNhdGVzLCAoQ0ZUeXBlUmVmKSBjZXJ0
QXJyYXkpOworCisgICAgaWYgKGFsbG93c0FueUNlcnRpZmljYXRlKQorICAgICAgICBDRkRpY3Rp
b25hcnlTZXRWYWx1ZShzc2xQcm9wcywga0NGU3RyZWFtU1NMVmFsaWRhdGVzQ2VydGlmaWNhdGVD
aGFpbiwga0NGQm9vbGVhbkZhbHNlKTsKKyAgICByZXR1cm4gc3NsUHJvcHM7Cit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9X
ZWJDb3JlVVJMUmVzcG9uc2VJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
aW9zL1dlYkNvcmVVUkxSZXNwb25zZUlPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEwMGRkOTBiNjAyYTE2YmMy
ZGFjODRlNjBhMWZhZDcwYjJlNTk0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9XZWJDb3JlVVJMUmVzcG9uc2VJT1MuaApAQCAtMCwwICsx
LDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYkNvcmVVUkxSZXNwb25zZUlPU19oCisjZGVmaW5lIFdlYkNv
cmVVUkxSZXNwb25zZUlPU19oCisKKyNpZmRlZiBfX09CSkNfXworI2luY2x1ZGUgIldlYkNvcmVV
UkxSZXNwb25zZS5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I2lmIFVTRShRVUlDS19MT09LKQorICAgIAoraW5saW5lIGJvb2wgc2hvdWxkVXNlUXVpY2tMb29r
Rm9yTUlNRVR5cGUoY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmICgoIU1J
TUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkgICAg
ICAgLy8gaWdub3JlIHN1cHBvcnRlZCBub24taW1hZ2UgTUlNRSB0eXBlcworICAgICAgICAgJiYg
IU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkgICAg
ICAgLy8gaWdub3JlIHN1cHBvcnRlZCBpbWFnZSBNSU1FIHR5cGVzCisgICAgICAgICAmJiBtaW1l
VHlwZSAhPSAidGV4dC9jc3MiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpZ25vcmUgY3NzCisgICAgICAgICAmJiBtaW1lVHlwZSAhPSAiYXBwbGljYXRpb24vcGRmIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgcGRmCisgICAgICAgICApCisg
ICAgICAgIHx8IG1pbWVUeXBlID09ICJ0ZXh0L3BsYWluIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBidXQga2VlcCB0ZXh0L3BsYWluIHdoaWNoIGlzIHRvbyBnZW5lcmlj
IGFuZCBjYW4gaGlkZSBzb21ldGhpbmcKKyAgICAgICAgfHwgKG1pbWVUeXBlID09ICJ0ZXh0L3ht
bCIgfHwgbWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3htbCIpKSAgIC8vIGFuZCBrZWVwIFhNTCB0
eXBlcyBmb3IgLm1vYmlsZWNvbmZpZyBmaWxlcworICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisjZW5kaWYgLy8gVVNFKFFVSUNLX0xP
T0spCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYkNvcmVVUkxSZXNw
b25zZUlPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lv
cy9XZWJDb3JlVVJMUmVzcG9uc2VJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2lvcy9XZWJDb3JlVVJMUmVzcG9uc2VJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWU3Y2JkZjI1NjQz
NDQ1YTJlZDBjMWE1YWY0NDhhYTZmMjk1NjZlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1dlYkNvcmVVUkxSZXNwb25zZUlPUy5tbQpAQCAt
MCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkNvcmVVUkxS
ZXNwb25zZUlPUy5oIgorI2ltcG9ydCAiVVRJVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlLmgiCisKKyNpbXBvcnQgIlF1aWNrTG9vay5oIgorI2ltcG9ydCAiU29m
dExpbmtpbmcuaCIKKyNpbXBvcnQgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2Vydmlj
ZXMuaD4KKworU09GVF9MSU5LX0ZSQU1FV09SSyhNb2JpbGVDb3JlU2VydmljZXMpCisKK1NPRlRf
TElOSyhNb2JpbGVDb3JlU2VydmljZXMsIFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50aWZpZXJG
b3JUYWcsIENGU3RyaW5nUmVmLCAoQ0ZTdHJpbmdSZWYgaW5UYWdDbGFzcywgQ0ZTdHJpbmdSZWYg
aW5UYWcsIENGU3RyaW5nUmVmIGluQ29uZm9ybWluZ1RvVVRJKSwgKGluVGFnQ2xhc3MsIGluVGFn
LCBpbkNvbmZvcm1pbmdUb1VUSSkpCisKK1NPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2Vy
dmljZXMsIGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24sIENGU3RyaW5nUmVmKQorCisjZGVm
aW5lIGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24gZ2V0a1VUVGFnQ2xhc3NGaWxlbmFtZUV4
dGVuc2lvbigpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBhZGp1c3RNSU1FVHlwZUlm
TmVjZXNzYXJ5KENGVVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25zZSkKK3sKKyAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IG1pbWVUeXBlID0gd2tHZXRDRlVSTFJlc3BvbnNlTUlNRVR5cGUoY2ZSZXNw
b25zZSk7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cGRhdGVkTUlNRVR5cGUgPSBtaW1l
VHlwZTsKKyAgICBpZiAoIXVwZGF0ZWRNSU1FVHlwZSkKKyAgICAgICAgdXBkYXRlZE1JTUVUeXBl
ID0gZGVmYXVsdE1JTUVUeXBlKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKKworI2lmIFVTRShRVUlDS19M
T09LKQorICAgIC8vIFdlIG11c3QgZW5zdXJlIHRoYXQgdGhlIE1JTUUgdHlwZSBpcyBjb3JyZWN0
LCBzbyB0aGF0IFF1aWNrTG9vaydzIHdlYiBwbHVnaW4gaXMgY2FsbGVkIHdoZW4gbmVlZGVkLgor
ICAgIC8vIFdlIGZpbHRlciB0aGUgYmFzaWMgTUlNRSB0eXBlcyBzbyB0aGF0IHdlIGRvbid0IGRv
IHVubmVjZXNzYXJ5IHdvcmsgaW4gc3RhbmRhcmQgYnJvd3Npbmcgc2l0dWF0aW9ucy4KKyAgICBp
ZiAoc2hvdWxkVXNlUXVpY2tMb29rRm9yTUlNRVR5cGUoKE5TU3RyaW5nICopdXBkYXRlZE1JTUVU
eXBlLmdldCgpKSkgeworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN1Z2dlc3RlZEZp
bGVuYW1lID0gYWRvcHRDRih3a0NvcHlDRlVSTFJlc3BvbnNlU3VnZ2VzdGVkRmlsZW5hbWUoY2ZS
ZXNwb25zZSkpOworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHF1aWNrTG9va01JTUVU
eXBlID0gYWRvcHRDRigoQ0ZTdHJpbmdSZWYpUUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvckZpbGVO
YW1lQW5kTWltZVR5cGUoKE5TU3RyaW5nICopc3VnZ2VzdGVkRmlsZW5hbWUuZ2V0KCksIChOU1N0
cmluZyAqKW1pbWVUeXBlLmdldCgpKSk7CisgICAgICAgIGlmICghcXVpY2tMb29rTUlNRVR5cGUp
IHsKKyAgICAgICAgICAgIENGVVJMUmVmIHVybCA9IHdrR2V0Q0ZVUkxSZXNwb25zZVVSTChjZlJl
c3BvbnNlKTsKKyAgICAgICAgICAgIE5TVVJMICpuc1VSTCA9IChOU1VSTCAqKXVybDsKKyAgICAg
ICAgICAgIGlmIChbbnNVUkwgaXNGaWxlVVJMXSkgeworICAgICAgICAgICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gZXh0ZW5zaW9uID0gYWRvcHRDRihDRlVSTENvcHlQYXRoRXh0ZW5zaW9u
KHVybCkpOworICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGkgPSBhZG9wdENGKFVUVHlwZUNyZWF0ZVBy
ZWZlcnJlZElkZW50aWZpZXJGb3JUYWcoa1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwgZXh0
ZW5zaW9uLmdldCgpLCBudWxscHRyKSk7CisgICAgICAgICAgICAgICAgICAgIHF1aWNrTG9va01J
TUVUeXBlID0gbWltZVR5cGVGcm9tVVRJVHJlZSh1dGkuZ2V0KCkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChxdWlja0xvb2tNSU1F
VHlwZSkKKyAgICAgICAgICAgIHVwZGF0ZWRNSU1FVHlwZSA9IHF1aWNrTG9va01JTUVUeXBlOwor
ICAgIH0KKyNlbmRpZiAvLyBVU0UoUVVJQ0tfTE9PSykKKyAgICBpZiAoIW1pbWVUeXBlIHx8IENG
U3RyaW5nQ29tcGFyZShtaW1lVHlwZS5nZXQoKSwgdXBkYXRlZE1JTUVUeXBlLmdldCgpLCBrQ0ZD
b21wYXJlQ2FzZUluc2Vuc2l0aXZlKSAhPSBrQ0ZDb21wYXJlRXF1YWxUbykKKyAgICAgICAgd2tT
ZXRDRlVSTFJlc3BvbnNlTUlNRVR5cGUoY2ZSZXNwb25zZSwgdXBkYXRlZE1JTUVUeXBlLmdldCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQXV0aGVudGljYXRpb25NYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbQppbmRleCAxZWM3
Nzc3ZDAwODBmMjI0M2U3ZjcwMjQ0NzBmYmUzOGE2MWUzMDA3Li5jOWMzMGY3YjY2MGNmNDFjMzEy
MTA3MWRkNGVjNTVhZjkxMjNlN2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbQpAQCAtNDMsNyArNDMsMTEg
QEAKIEBlbmQKIAogQGludGVyZmFjZSBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIChEZXRh
aWxzKQorI2lmIFBMQVRGT1JNKElPUykKKysoTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAq
KV9jcmVhdGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUZvckNGQXV0aENoYWxsZW5nZTooQ0ZVUkxB
dXRoQ2hhbGxlbmdlUmVmKWNmQ2hhbGxlbmdlIHNlbmRlcjooaWQgPE5TVVJMQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VTZW5kZXI+KXNlbmRlcjsKKyNlbHNlCiArKE5TVVJMQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UgKilfYXV0aGVudGljYXRpb25DaGFsbGVuZ2VGb3JDRkF1dGhDaGFsbGVuZ2U6KENG
VVJMQXV0aENoYWxsZW5nZVJlZiljZkNoYWxsZW5nZSBzZW5kZXI6KGlkIDxOU1VSTEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlU2VuZGVyPilzZW5kZXI7CisjZW5kaWYKIEBlbmQKIAogQGludGVyZmFj
ZSBOU1VSTENyZWRlbnRpYWwgKERldGFpbHMpCkBAIC0xNTQsNyArMTU4LDExIEBAIE5TVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgKm1hYyhjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y29yZUNoYWxsZW5nZSkKICAgICBpZiAoIWF1dGhDaGFsbGVuZ2UpCiAgICAgICAgIGF1dGhDaGFs
bGVuZ2UgPSBhZG9wdENGKGNyZWF0ZUNGKGNvcmVDaGFsbGVuZ2UpKTsKICAgICBbY2hhbGxlbmdl
U2VuZGVyLmdldCgpIHNldENGQ2hhbGxlbmdlOmF1dGhDaGFsbGVuZ2UuZ2V0KCldOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICByZXR1cm4gW1tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIF9j
cmVhdGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUZvckNGQXV0aENoYWxsZW5nZTphdXRoQ2hhbGxl
bmdlLmdldCgpIHNlbmRlcjpjaGFsbGVuZ2VTZW5kZXIuZ2V0KCldIGF1dG9yZWxlYXNlXTsKKyNl
bHNlCiAgICAgcmV0dXJuIFtbTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBfYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VGb3JDRkF1dGhDaGFsbGVuZ2U6YXV0aENoYWxsZW5nZS5nZXQoKSBzZW5k
ZXI6Y2hhbGxlbmdlU2VuZGVyLmdldCgpXSBhdXRvcmVsZWFzZV07CisjZW5kaWYKIH0KIAogTlNV
UkxDcmVkZW50aWFsICptYWMoY29uc3QgQ3JlZGVudGlhbCYgY29yZUNyZWRlbnRpYWwpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3Rv
cmFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0NyZWRlbnRp
YWxTdG9yYWdlTWFjLm1tCmluZGV4IGFhNWU3YWZmMjk0NTMzODViYzgzMWExY2I3ZDRlN2M4Yzhi
Yzg3M2YuLjAxMTMxNWIyOGI0NDViOWJkNzIyNWRmNmQ1OTY0ZjAxOGI3OWQ3NzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0NyZWRlbnRpYWxTdG9yYWdl
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0NyZWRlbnRp
YWxTdG9yYWdlTWFjLm1tCkBAIC0zOSw2ICszOSwxNyBAQCBDcmVkZW50aWFsIENyZWRlbnRpYWxT
dG9yYWdlOjpnZXRGcm9tUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBw
cgogICAgIHJldHVybiBjcmVkZW50aWFsID8gY29yZShjcmVkZW50aWFsKSA6IENyZWRlbnRpYWwo
KTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgQ3JlZGVudGlhbFN0b3JhZ2U6OnNhdmVU
b1BlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNl
LCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQoreworICAgIGlmIChjcmVkZW50aWFsLnBl
cnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSkgeworICAgICAgICBDcmVk
ZW50aWFsIHNlc3Npb25DcmVkZW50aWFsKGNyZWRlbnRpYWwsIENyZWRlbnRpYWxQZXJzaXN0ZW5j
ZUZvclNlc3Npb24pOworICAgICAgICBbW05TVVJMQ3JlZGVudGlhbFN0b3JhZ2Ugc2hhcmVkQ3Jl
ZGVudGlhbFN0b3JhZ2VdIHNldERlZmF1bHRDcmVkZW50aWFsOm1hYyhzZXNzaW9uQ3JlZGVudGlh
bCkgZm9yUHJvdGVjdGlvblNwYWNlOm1hYyhwcm90ZWN0aW9uU3BhY2UpXTsKKyAgICB9IGVsc2UK
KyAgICAgICAgW1tOU1VSTENyZWRlbnRpYWxTdG9yYWdlIHNoYXJlZENyZWRlbnRpYWxTdG9yYWdl
XSBzZXREZWZhdWx0Q3JlZGVudGlhbDptYWMoY3JlZGVudGlhbCkgZm9yUHJvdGVjdGlvblNwYWNl
Om1hYyhwcm90ZWN0aW9uU3BhY2UpXTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyAhVVNFKENGTkVUV09SSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlRXJyb3JNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUVycm9yTWFjLm1tCmluZGV4IGNlZjZj
ZGYzNDZlMGQyM2M3ZGYyYmM1NzBkMGEyYWM2NmYxNGQ0MmUuLmNjN2Y0NTQxNjZkNmQxZGU3ZTQ1
ZTc4YzkxYjZkNzJmZmIxZDljNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvbWFjL1Jlc291cmNlRXJyb3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VFcnJvck1hYy5tbQpAQCAtMzEsMTAgKzMxLDE0OCBA
QAogI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ0ZFcnJvci5oPgogI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxDRk5ldHdvcmsv
Q0ZTb2NrZXRTdHJlYW1Qcml2Lmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMRXJyb3IuaD4K
KyNlbmRpZgorCiBAaW50ZXJmYWNlIE5TRXJyb3IgKFdlYkV4dHJhcykKIC0gKE5TU3RyaW5nICop
X3dlYl9sb2NhbGl6ZWREZXNjcmlwdGlvbjsKIEBlbmQKIAorI2lmIFBMQVRGT1JNKElPUykKKwor
Ly8gVGhpcyB3b3JrYXJvdW5kIGNvZGUgZXhpc3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBjYWxs
IHRyYW5zbGF0ZVRvQ0ZFcnJvciBpbiBGb3VuZGF0aW9uLiBPbmNlIHdlCisvLyBoYXZlIHRoYXQs
IHdlIGNhbiByZW1vdmUgdGhpcyBjb2RlLiA8cmRhcjovL3Byb2JsZW0vOTgzNzQxNT4gTmVlZCBT
UEkgZm9yIHRyYW5zbGF0ZUNGRXJyb3IKKy8vIFRoZSBjb2RlIGlzIG1vc3RseSBpZGVudGljYWwg
dG8gRm91bmRhdGlvbiAtIEkgY2hhbmdlZCB0aGUgY2xhc3MgbmFtZSBhbmQgZml4ZWQgbWlub3Ig
Y29tcGlsZSBlcnJvcnMuCisvLyBXZSBuZWVkIHRoaXMgYmVjYXVzZSBjbGllbnQgY29kZSAoU2Fm
YXJpKSB3YW50cyBhbiBOU0Vycm9yIHdpdGggTlNVUkxFcnJvckRvbWFpbiBhcyBpdHMgZG9tYWlu
LgorLy8gVGhlIEZvdW5kYXRpb24gY29kZSBiZWxvdyBkb2VzIHRoYXQgYW5kIHNldHMgdXAgYXBw
cm9wcmlhdGUgY2VydGlmaWNhdGUga2V5cyBpbiB0aGUgTlNFcnJvci4KKworQGludGVyZmFjZSBX
ZWJDdXN0b21OU1VSTEVycm9yIDogTlNFcnJvcgorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
ZWJDdXN0b21OU1VSTEVycm9yCisKK3N0YXRpYyBOU0RpY3Rpb25hcnkqIGRpY3Rpb25hcnlUaGF0
Q2FuQ29kZShOU0RpY3Rpb25hcnkqIHNyYykKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG1ha2Vz
IGEgY29weSBvZiBpbnB1dCBkaWN0aW9uYXJ5LCBtb2RpZmllcyBpdCBzdWNoIHRoYXQgaXQgInNo
b3VsZCIgKGFzIG11Y2ggYXMgd2UgY2FuIGhlbHAgaXQpCisgICAgLy8gbm90IGNvbnRhaW4gYW55
IG9iamVjdHMgdGhhdCBkbyBub3QgY29uZm9ybSB0byBOU0NvZGluZyBwcm90b2NvbCwgYW5kIHJl
dHVybnMgaXQgYXV0b3JlbGVhc2VkLgorCisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSogZHN0ID0g
W3NyYyBtdXRhYmxlQ29weV07CisKKyAgICAvLyBLaWxsIHRoZSBrbm93biBwcm9ibGVtIGVudHJp
ZXMuCisgICAgW2RzdCByZW1vdmVPYmplY3RGb3JLZXk6QCJOU0Vycm9yUGVlckNlcnRpZmljYXRl
Q2hhaW5LZXkiXTsgLy8gTlNBcnJheSB3aXRoIFNlY0NlcnRpZmljYXRlUmVmIG9iamVjdHMKKyAg
ICBbZHN0IHJlbW92ZU9iamVjdEZvcktleTpAIk5TRXJyb3JDbGllbnRDZXJ0aWZpY2F0ZUNoYWlu
S2V5Il07IC8vIE5TQXJyYXkgd2l0aCBTZWNDZXJ0aWZpY2F0ZVJlZiBvYmplY3RzCisgICAgW2Rz
dCByZW1vdmVPYmplY3RGb3JLZXk6TlNVUkxFcnJvckZhaWxpbmdVUkxQZWVyVHJ1c3RFcnJvcktl
eV07IC8vIFNlY1RydXN0UmVmIG9iamVjdAorICAgIFtkc3QgcmVtb3ZlT2JqZWN0Rm9yS2V5Ok5T
VW5kZXJseWluZ0Vycm9yS2V5XTsgLy8gKEltbXV0YWJsZSkgQ0ZFcnJvciBjb250YWluaW5nIGtD
RiBlcXVpdmFsZW50IG9mIHRoZSBhYm92ZQorICAgIC8vIFdlIGNvdWxkIHJlY29uc3RpdHV0ZSB0
aGlzIGJ1dCBpdCdzIG1vcmUgdHJvdWJsZSB0aGFuIGl0J3Mgd29ydGgKKworICAgIC8vIE5vbi1j
b21wcmVoZW5zaXZlIHNhZmV0eSBjaGVjazogIEtpbGwgdG9wLWxldmVsIGRpY3Rpb25hcnkgZW50
cmllcyB0aGF0IGRvbid0IGNvbmZvcm0gdG8gTlNDb2RpbmcuCisgICAgLy8gV2UgbWF5IGhpdCBv
bmVzIHdlIGp1c3QgcmVtb3ZlZCwgYnV0IHRoYXQncyBmaW5lLgorICAgIC8vIFdlIGRvbid0IGhh
bmRsZSBhcmJpdHJhcnkgb2JqZWN0cyB0aGF0IGNsaWVudHMgaGF2ZSBzdHVmZmVkIGludG8gdGhl
IGRpY3Rpb25hcnksIHNpbmNlIHdlIG1heSBub3Qga25vdyBob3cgdG8KKyAgICAvLyBnZXQgYXQg
aXRzIGNvbmVudHMgKGUuZy4sIGEgQ0ZFcnJvciBvYmplY3QgLS0geW91J2QgaGF2ZSB0byBrbm93
IGl0IGhhZCBhIHVzZXJJbmZvIGRpY3Rpb25hcnkgYW5kIGtpbGwgdGhpbmdzCisgICAgLy8gaW5z
aWRlIGl0KS4KKyAgICBbc3JjIGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKGlk
IGtleSwgaWQgb2JqLCBCT09MKikgeworICAgICAgICBpZiAoISBbb2JqIGNvbmZvcm1zVG9Qcm90
b2NvbDpAcHJvdG9jb2woTlNDb2RpbmcpXSkgeworICAgICAgICAgICAgW2RzdCByZW1vdmVPYmpl
Y3RGb3JLZXk6a2V5XTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgZHJp
bGwgZG93biBpbnRvIHN1YmRpY3Rpb25hcmllcywgYnV0IGl0IHNlZW1zIG1vcmUgdHJvdWJsZSB0
aGFuIGl0J3Mgd29ydGgKKyAgICB9XTsKKworICAgIHJldHVybiBbZHN0IGF1dG9yZWxlYXNlXTsK
K30KKworLSAodm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2RlcgoreworICAgIE5T
RGljdGlvbmFyeSogbmV3VXNlckluZm8gPSBkaWN0aW9uYXJ5VGhhdENhbkNvZGUoW3NlbGYgdXNl
ckluZm9dKTsKKworICAgIFtbTlNFcnJvciBlcnJvcldpdGhEb21haW46W3NlbGYgZG9tYWluXSBj
b2RlOltzZWxmIGNvZGVdIHVzZXJJbmZvOm5ld1VzZXJJbmZvXSBlbmNvZGVXaXRoQ29kZXI6Y29k
ZXJdOworfQorCitAZW5kCisKKworI2lmIFVTRShDRk5FVFdPUkspCitzdGF0aWMgTlNFcnJvciAq
TlNFcnJvckZyb21DRkVycm9yKENGRXJyb3JSZWYgY2ZFcnJvciwgTlNVUkwgKnVybCkKK3sKKyAg
ICBDRkluZGV4IGVyckNvZGUgPSBDRkVycm9yR2V0Q29kZShjZkVycm9yKTsKKyAgICBpZiAoQ0ZF
cXVhbChDRkVycm9yR2V0RG9tYWluKGNmRXJyb3IpLCBrQ0ZFcnJvckRvbWFpbkNGTmV0d29yaykg
JiYgZXJyQ29kZSA8PSBrQ0ZVUkxFcnJvclVua25vd24gJiYgZXJyQ29kZSA+IC00MDAwKSB7Cisg
ICAgICAgIC8vIFRoaXMgaXMgYW4gVVJMIGVycm9yIGFuZCBuZWVkcyB0byBiZSB0cmFuc2xhdGVk
IHRvIHRoZSBOU1VSTEVycm9yRG9tYWluCisgICAgICAgIGlkIGtleXNbMTBdLCB2YWx1ZXNbMTBd
OworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgdXNlckluZm8gPSBDRkVycm9yQ29weVVzZXJJbmZv
KGNmRXJyb3IpOworICAgICAgICBOU0Vycm9yICpyZXN1bHQ7CisgICAgICAgIE5TSW50ZWdlciBj
b3VudCA9IDA7CisKKyAgICAgICAgaWYgKHVybCkgeworICAgICAgICAgICAga2V5c1tjb3VudF0g
PSBOU1VSTEVycm9yRmFpbGluZ1VSTEVycm9yS2V5OworICAgICAgICAgICAgdmFsdWVzW2NvdW50
XSA9IHVybDsKKyAgICAgICAgICAgIGNvdW50ICsrOworCisgICAgICAgICAgICBrZXlzW2NvdW50
XSA9IE5TVVJMRXJyb3JGYWlsaW5nVVJMU3RyaW5nRXJyb3JLZXk7CisgICAgICAgICAgICB2YWx1
ZXNbY291bnRdID0gW3VybCBhYnNvbHV0ZVN0cmluZ107CisgICAgICAgICAgICBjb3VudCArKzsK
KyAgICAgICAgfQorCisgICAgICAgIHZhbHVlc1tjb3VudF0gPSAoaWQpQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUodXNlckluZm8sIGtDRkVycm9yTG9jYWxpemVkRGVzY3JpcHRpb25LZXkpOworICAgICAg
ICBpZiAodmFsdWVzW2NvdW50XSkgeworICAgICAgICAgICAga2V5c1tjb3VudF0gPSBOU0xvY2Fs
aXplZERlc2NyaXB0aW9uS2V5OworICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKwor
ICAgICAgICB2YWx1ZXNbY291bnRdID0gKGlkKUNGRGljdGlvbmFyeUdldFZhbHVlKHVzZXJJbmZv
LCBrQ0ZFcnJvckxvY2FsaXplZEZhaWx1cmVSZWFzb25LZXkpOworICAgICAgICBpZiAodmFsdWVz
W2NvdW50XSkgeworICAgICAgICAgICAga2V5c1tjb3VudF0gPSBOU0xvY2FsaXplZEZhaWx1cmVS
ZWFzb25FcnJvcktleTsKKyAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICB9CisKKyAgICAg
ICAgdmFsdWVzW2NvdW50XSA9IChpZClDRkRpY3Rpb25hcnlHZXRWYWx1ZSh1c2VySW5mbywga0NG
RXJyb3JMb2NhbGl6ZWRSZWNvdmVyeVN1Z2dlc3Rpb25LZXkpOworICAgICAgICBpZiAodmFsdWVz
W2NvdW50XSkgeworICAgICAgICAgICAga2V5c1tjb3VudF0gPSBOU0xvY2FsaXplZFJlY292ZXJ5
U3VnZ2VzdGlvbkVycm9yS2V5OworICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKwor
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBp
Z25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgICAgICBpZiAodXNlckluZm8g
JiYgKHZhbHVlc1tjb3VudF0gPSAoaWQpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUodXNlckluZm8sIGtD
RlN0cmVhbVByb3BlcnR5U1NMUGVlckNlcnRpZmljYXRlcykpICE9IG5pbCkgeworICAgICAgICAg
ICAgLy8gTmVlZCB0byB0cmFuc2xhdGUgdGhlIGNlcnQKKyAgICAgICAgICAgIGtleXNbY291bnRd
ID0gQCJOU0Vycm9yUGVlckNlcnRpZmljYXRlQ2hhaW5LZXkiOworICAgICAgICAgICAgY291bnQg
Kys7CisKKyAgICAgICAgICAgIHZhbHVlc1tjb3VudF0gPSAoaWQpQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUodXNlckluZm8sIF9rQ0ZTdHJlYW1Qcm9wZXJ0eVNTTENsaWVudENlcnRpZmljYXRlcyk7Cisg
ICAgICAgICAgICBpZiAodmFsdWVzW2NvdW50XSkgeworICAgICAgICAgICAgICAgIGtleXNbY291
bnRdID0gQCJOU0Vycm9yQ2xpZW50Q2VydGlmaWNhdGVDaGFpbktleSI7CisgICAgICAgICAgICAg
ICAgY291bnQgKys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhbHVlc1tjb3VudF0g
PSAoaWQpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUodXNlckluZm8sIF9rQ0ZTdHJlYW1Qcm9wZXJ0eVNT
TENsaWVudENlcnRpZmljYXRlU3RhdGUpOworICAgICAgICAgICAgaWYgKHZhbHVlc1tjb3VudF0p
IHsKKyAgICAgICAgICAgICAgICBrZXlzW2NvdW50XSA9IEAiTlNFcnJvckNsaWVudENlcnRpZmlj
YXRlU3RhdGVLZXkiOworICAgICAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisKKyAgICAgICAgaWYgKHVz
ZXJJbmZvICYmICh2YWx1ZXNbY291bnRdID0gKGlkKUNGRGljdGlvbmFyeUdldFZhbHVlKHVzZXJJ
bmZvLCBrQ0ZTdHJlYW1Qcm9wZXJ0eVNTTFBlZXJUcnVzdCkpICE9IG5pbCkgeworICAgICAgICAg
ICAga2V5c1tjb3VudF0gPSBOU1VSTEVycm9yRmFpbGluZ1VSTFBlZXJUcnVzdEVycm9yS2V5Owor
ICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIGtleXNbY291bnRdID0g
TlNVbmRlcmx5aW5nRXJyb3JLZXk7CisgICAgICAgIHZhbHVlc1tjb3VudF0gPSAoaWQpY2ZFcnJv
cjsKKyAgICAgICAgY291bnQgKys7CisKKyAgICAgICAgcmVzdWx0ID0gW1dlYkN1c3RvbU5TVVJM
RXJyb3IgZXJyb3JXaXRoRG9tYWluOk5TVVJMRXJyb3JEb21haW4gY29kZTooZXJyQ29kZSA9PSBr
Q0ZVUkxFcnJvclVua25vd24gPyAoQ0ZJbmRleClOU1VSTEVycm9yVW5rbm93biA6IGVyckNvZGUp
IHVzZXJJbmZvOltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzOnZhbHVlcyBmb3JL
ZXlzOmtleXMgY291bnQ6Y291bnRdXTsKKyAgICAgICAgaWYgKHVzZXJJbmZvKQorICAgICAgICAg
ICAgQ0ZSZWxlYXNlKHVzZXJJbmZvKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgcmV0dXJuIChOU0Vycm9yICopY2ZFcnJvcjsKK30KKyNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JL
KQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyBSZXRhaW5QdHI8TlNFcnJvcj4gY3JlYXRlTlNFcnJvckZyb21SZXNvdXJjZUVycm9yQmFz
ZShjb25zdCBSZXNvdXJjZUVycm9yQmFzZSYgcmVzb3VyY2VFcnJvcikKQEAgLTc3LDYgKzIxNSwx
NCBAQCBOU0Vycm9yICpSZXNvdXJjZUVycm9yOjpuc0Vycm9yKCkgY29uc3QKICAgICBpZiAobV9w
bGF0Zm9ybUVycm9yKSB7CiAgICAgICAgIENGRXJyb3JSZWYgZXJyb3IgPSBtX3BsYXRmb3JtRXJy
b3IuZ2V0KCk7CiAgICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHVzZXJJbmZvID0g
YWRvcHRDRihDRkVycm9yQ29weVVzZXJJbmZvKGVycm9yKSk7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICAgICBtX3BsYXRmb3JtTlNFcnJvciA9IE5TRXJyb3JGcm9tQ0ZFcnJvcihlcnJvciwgKE5T
VVJMICopWyhOU0RpY3Rpb25hcnkgKil1c2VySW5mby5nZXQoKSBvYmplY3RGb3JLZXk6KGlkKSBr
Q0ZVUkxFcnJvckZhaWxpbmdVUkxFcnJvcktleV0pOworICAgICAgICAvLyBJZiBOU0Vycm9yRnJv
bUNGRXJyb3IgY3JlYXRlZCBhIG5ldyBOU0Vycm9yIGZvciB1cywgcmV0dXJuIHRoYXQuCisgICAg
ICAgIGlmIChtX3BsYXRmb3JtTlNFcnJvci5nZXQoKSAhPSAoTlNFcnJvciAqKWVycm9yKQorICAg
ICAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1OU0Vycm9yLmdldCgpOworCisgICAgICAgIC8vIE90
aGVyd2lzZSBmYWxsIHRocm91Z2ggdG8gY3JlYXRlIGEgbmV3IE5TRXJyb3IgZnJvbSB0aGUgQ0ZF
cnJvci4KKyNlbmRpZgogICAgICAgICBtX3BsYXRmb3JtTlNFcnJvciA9IGFkb3B0TlMoW1tOU0Vy
cm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjooTlNTdHJpbmcgKilDRkVycm9yR2V0RG9tYWluKGVy
cm9yKSBjb2RlOkNGRXJyb3JHZXRDb2RlKGVycm9yKSB1c2VySW5mbzooTlNEaWN0aW9uYXJ5ICop
dXNlckluZm8uZ2V0KCldKTsKICAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1OU0Vycm9yLmdldCgp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFj
L1Jlc291cmNlSGFuZGxlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9t
YWMvUmVzb3VyY2VIYW5kbGVNYWMubW0KaW5kZXggZTczYzY1ZDIyNzdkOTg5MjJlNjc4ZWM2NWJl
ZjhmOGM3YTkwZWI0Yi4uM2QwNDUxODEzMTcxYTFiNzgyM2IxMTZiZjM1ZGYxMTY5NWM1MjRjNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VI
YW5kbGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVz
b3VyY2VIYW5kbGVNYWMubW0KQEAgLTU2LDYgKzU2LDIxIEBACiAjaW1wb3J0IDx3dGYvdGV4dC9C
YXNlNjQuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElP
UykKKyNpbXBvcnQgPENGTmV0d29yay9DRlVSTFJlcXVlc3QuaD4KKworI2ltcG9ydCAiUnVudGlt
ZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgiCisjaW1wb3J0ICJXZWJDb3JlVGhyZWFkUnVuLmgiCisK
K0BpbnRlcmZhY2UgTlNVUkxSZXF1ZXN0IChpT1NEZXRhaWxzKQorLSAoQ0ZVUkxSZXF1ZXN0UmVm
KSBfQ0ZVUkxSZXF1ZXN0OworQGVuZAorI2VuZGlmCisKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyNp
bXBvcnQgIlF1aWNrTG9vay5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBAaW50ZXJmYWNlIE5TVVJMQ29ubmVjdGlvbiAoRGV0YWlscykKQEAgLTk0LDcgKzEwOSwxOSBA
QCBSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKCkKICAgICBMT0coTmV0d29yaywgIkhh
bmRsZSAlcCBkZXN0cm95ZWQiLCB0aGlzKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRp
YyBib29sIHN5bmNocm9ub3VzV2lsbFNlbmRSZXF1ZXN0RW5hYmxlZCgpCit7CisgICAgc3RhdGlj
IGJvb2wgZGlzYWJsZWQgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBi
b29sRm9yS2V5OkAiV2ViS2l0RGlzYWJsZVN5bmNocm9ub3VzV2lsbFNlbmRSZXF1ZXN0UHJlZmVy
ZW5jZUtleSJdOworICAgIHJldHVybiAhZGlzYWJsZWQ7Cit9CisjZW5kaWYKKworI2lmICFQTEFU
Rk9STShJT1MpCiB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVOU1VSTENvbm5lY3Rpb24oaWQg
ZGVsZWdhdGUsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGJvb2wgc2hvdWxkQ29u
dGVudFNuaWZmKQorI2Vsc2UKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVj
dGlvbihpZCBkZWxlZ2F0ZSwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbCBz
aG91bGRDb250ZW50U25pZmYsIE5TRGljdGlvbmFyeSAqY29ubmVjdGlvblByb3BlcnRpZXMpCisj
ZW5kaWYKIHsKICAgICAvLyBDcmVkZW50aWFscyBmb3IgZnRwIGNhbiBvbmx5IGJlIHBhc3NlZCBp
biBVUkwsIHRoZSBjb25uZWN0aW9uOmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTog
ZGVsZWdhdGUgY2FsbCB3b24ndCBiZSBtYWRlLgogICAgIGlmICgoIWQtPm1fdXNlci5pc0VtcHR5
KCkgfHwgIWQtPm1fcGFzcy5pc0VtcHR5KCkpICYmICFmaXJzdFJlcXVlc3QoKS51cmwoKS5wcm90
b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKQEAgLTEzNCwxOSArMTYxLDMzIEBAIHZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbihpZCBkZWxlZ2F0ZSwgYm9vbCBzaG91bGRV
c2VDcmVkZW50aWFsCiAKICAgICBBU1NFUlQoW05TVVJMQ29ubmVjdGlvbiBpbnN0YW5jZXNSZXNw
b25kVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2luaXRXaXRoUmVxdWVzdDpkZWxlZ2F0ZTp1c2VzQ2Fj
aGU6bWF4Q29udGVudExlbmd0aDpzdGFydEltbWVkaWF0ZWx5OmNvbm5lY3Rpb25Qcm9wZXJ0aWVz
OildKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBOU0RpY3Rpb25hcnkgKnN0cmVhbVByb3Bl
cnRpZXNGcm9tQ2xpZW50ID0gW2Nvbm5lY3Rpb25Qcm9wZXJ0aWVzIG9iamVjdEZvcktleTpAImtD
RlVSTENvbm5lY3Rpb25Tb2NrZXRTdHJlYW1Qcm9wZXJ0aWVzIl07CisgICAgTlNNdXRhYmxlRGlj
dGlvbmFyeSAqc3RyZWFtUHJvcGVydGllcyA9IHN0cmVhbVByb3BlcnRpZXNGcm9tQ2xpZW50ID8g
W1tzdHJlYW1Qcm9wZXJ0aWVzRnJvbUNsaWVudCBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdIDog
W05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07CisjZWxzZQogICAgIE5TTXV0YWJsZURp
Y3Rpb25hcnkgKnN0cmVhbVByb3BlcnRpZXMgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9u
YXJ5XTsKKyNlbmRpZgogCiAgICAgaWYgKCFzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKICAg
ICAgICAgW3N0cmVhbVByb3BlcnRpZXMgc2V0T2JqZWN0OkAiV2ViS2l0UHJpdmF0ZVNlc3Npb24i
IGZvcktleTpAIl9rQ0ZVUkxDb25uZWN0aW9uU2Vzc2lvbklEIl07CiAKLSNpZiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IHNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhID0gZC0+bV9jb250ZXh0LT5zb3VyY2VBcHBs
aWNhdGlvbkF1ZGl0RGF0YSgpOwogICAgIGlmIChzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSkK
ICAgICAgICAgW3N0cmVhbVByb3BlcnRpZXMgc2V0T2JqZWN0OihOU0RhdGEgKilzb3VyY2VBcHBs
aWNhdGlvbkF1ZGl0RGF0YS5nZXQoKSBmb3JLZXk6QCJrQ0ZTdHJlYW1Qcm9wZXJ0eVNvdXJjZUFw
cGxpY2F0aW9uIl07CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBOU011dGFibGVE
aWN0aW9uYXJ5ICpwcm9wZXJ0eURpY3Rpb25hcnkgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aERpY3Rpb25hcnk6Y29ubmVjdGlvblByb3BlcnRpZXNdOworICAgIFtwcm9wZXJ0
eURpY3Rpb25hcnkgc2V0T2JqZWN0OnN0cmVhbVByb3BlcnRpZXMgZm9yS2V5OkAia0NGVVJMQ29u
bmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMiXTsKKyAgICBjb25zdCBib29sIHVzZXNDYWNo
ZSA9IGZhbHNlOworICAgIGlmIChzeW5jaHJvbm91c1dpbGxTZW5kUmVxdWVzdEVuYWJsZWQoKSkK
KyAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0U2hvdWxkU3RhcnRTeW5jaHJvbm91c2x5KFtuc1JlcXVl
c3QgX0NGVVJMUmVxdWVzdF0sIDEpOworI2Vsc2UKICAgICBOU0RpY3Rpb25hcnkgKnByb3BlcnR5
RGljdGlvbmFyeSA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6c3RyZWFtUHJv
cGVydGllcyBmb3JLZXk6QCJrQ0ZVUkxDb25uZWN0aW9uU29ja2V0U3RyZWFtUHJvcGVydGllcyJd
OwotICAgIGQtPm1fY29ubmVjdGlvbiA9IGFkb3B0TlMoW1tOU1VSTENvbm5lY3Rpb24gYWxsb2Nd
IF9pbml0V2l0aFJlcXVlc3Q6bnNSZXF1ZXN0IGRlbGVnYXRlOmRlbGVnYXRlIHVzZXNDYWNoZTpZ
RVMgbWF4Q29udGVudExlbmd0aDowIHN0YXJ0SW1tZWRpYXRlbHk6Tk8gY29ubmVjdGlvblByb3Bl
cnRpZXM6cHJvcGVydHlEaWN0aW9uYXJ5XSk7CisgICAgY29uc3QgYm9vbCB1c2VzQ2FjaGUgPSB0
cnVlOworI2VuZGlmCisgICAgZC0+bV9jb25uZWN0aW9uID0gYWRvcHROUyhbW05TVVJMQ29ubmVj
dGlvbiBhbGxvY10gX2luaXRXaXRoUmVxdWVzdDpuc1JlcXVlc3QgZGVsZWdhdGU6ZGVsZWdhdGUg
dXNlc0NhY2hlOnVzZXNDYWNoZSBtYXhDb250ZW50TGVuZ3RoOjAgc3RhcnRJbW1lZGlhdGVseTpO
TyBjb25uZWN0aW9uUHJvcGVydGllczpwcm9wZXJ0eURpY3Rpb25hcnldKTsKIH0KIAogYm9vbCBS
ZXNvdXJjZUhhbmRsZTo6c3RhcnQoKQpAQCAtMTY4LDExICsyMDksMjQgQEAgYm9vbCBSZXNvdXJj
ZUhhbmRsZTo6c3RhcnQoKQogCiAgICAgZC0+bV9uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyA9IGQt
Pm1fY29udGV4dC0+bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKTsKIAorI2lmICFQTEFURk9STShJ
T1MpCiAgICAgY3JlYXRlTlNVUkxDb25uZWN0aW9uKAogICAgICAgICBSZXNvdXJjZUhhbmRsZTo6
ZGVsZWdhdGUoKSwKICAgICAgICAgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsCiAgICAgICAg
IGQtPm1fc2hvdWxkQ29udGVudFNuaWZmIHx8IGQtPm1fY29udGV4dC0+bG9jYWxGaWxlQ29udGVu
dFNuaWZmaW5nRW5hYmxlZCgpKTsKKyNlbHNlCisgICAgY3JlYXRlTlNVUkxDb25uZWN0aW9uKAor
ICAgICAgICBkLT5tX3Byb3h5LmdldCgpLAorICAgICAgICBzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZSwKKyAgICAgICAgZC0+bV9zaG91bGRDb250ZW50U25pZmYgfHwgZC0+bV9jb250ZXh0LT5s
b2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCksCisgICAgICAgIChOU0RpY3Rpb25hcnkg
KiljbGllbnQoKS0+Y29ubmVjdGlvblByb3BlcnRpZXModGhpcykpOworI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgTlNVUkxDb25uZWN0aW9uICp1cmxDb25uZWN0aW9uID0gY29ubmVj
dGlvbigpOworICAgIFt1cmxDb25uZWN0aW9uIHNjaGVkdWxlSW5SdW5Mb29wOldlYlRocmVhZE5T
UnVuTG9vcCgpIGZvck1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGVdOworICAgIFt1cmxDb25uZWN0
aW9uIHN0YXJ0XTsKKyNlbHNlCiAgICAgYm9vbCBzY2hlZHVsZWQgPSBmYWxzZTsKICAgICBpZiAo
U2NoZWR1bGVQYWlySGFzaFNldCogc2NoZWR1bGVkUGFpcnMgPSBkLT5tX2NvbnRleHQtPnNjaGVk
dWxlZFJ1bkxvb3BQYWlycygpKSB7CiAgICAgICAgIFNjaGVkdWxlUGFpckhhc2hTZXQ6Oml0ZXJh
dG9yIGVuZCA9IHNjaGVkdWxlZFBhaXJzLT5lbmQoKTsKQEAgLTE5Niw2ICsyNTAsNyBAQCBib29s
IFJlc291cmNlSGFuZGxlOjpzdGFydCgpCiAgICAgICAgIFtjb25uZWN0aW9uKCkgc3RhcnRdOwog
ICAgIGVsc2UKICAgICAgICAgZC0+bV9zdGFydFdoZW5TY2hlZHVsZWQgPSB0cnVlOworI2VuZGlm
CiAKICAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBzdGFydGluZyBjb25uZWN0aW9uICVwIGZv
ciAlQCIsIHRoaXMsIGNvbm5lY3Rpb24oKSwgZmlyc3RSZXF1ZXN0KCkubnNVUkxSZXF1ZXN0KERv
Tm90VXBkYXRlSFRUUEJvZHkpKTsKICAgICAKQEAgLTIzMCw2ICsyODUsNyBAQCB2b2lkIFJlc291
cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCiAKIHZvaWQg
UmVzb3VyY2VIYW5kbGU6OnNjaGVkdWxlKFNjaGVkdWxlUGFpciogcGFpcikKIHsKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIE5TUnVuTG9vcCAqcnVuTG9vcCA9IHBhaXItPm5zUnVuTG9vcCgpOwog
ICAgIGlmICghcnVuTG9vcCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4LDEyICsyOTQsMTkgQEAg
dm9pZCBSZXNvdXJjZUhhbmRsZTo6c2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBwYWlyKQogICAgICAg
ICBbZC0+bV9jb25uZWN0aW9uLmdldCgpIHN0YXJ0XTsKICAgICAgICAgZC0+bV9zdGFydFdoZW5T
Y2hlZHVsZWQgPSBmYWxzZTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWlyKTsK
KyNlbmRpZgogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjp1bnNjaGVkdWxlKFNjaGVkdWxlUGFp
ciogcGFpcikKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChOU1J1bkxvb3AgKnJ1bkxv
b3AgPSBwYWlyLT5uc1J1bkxvb3AoKSkKICAgICAgICAgW2QtPm1fY29ubmVjdGlvbi5nZXQoKSB1
bnNjaGVkdWxlRnJvbVJ1bkxvb3A6cnVuTG9vcCBmb3JNb2RlOihOU1N0cmluZyAqKXBhaXItPm1v
ZGUoKV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWlyKTsKKyNlbmRpZgogfQogCiBpZCBS
ZXNvdXJjZUhhbmRsZTo6ZGVsZWdhdGUoKQpAQCAtMjk5LDEwICszNjIsMTkgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmICFQTEFURk9STShJ
T1MpCiAgICAgaGFuZGxlLT5jcmVhdGVOU1VSTENvbm5lY3Rpb24oCiAgICAgICAgIGhhbmRsZS0+
ZGVsZWdhdGUoKSwKICAgICAgICAgc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVk
ZW50aWFscywKICAgICAgICAgaGFuZGxlLT5zaG91bGRDb250ZW50U25pZmYoKSB8fCBjb250ZXh0
LT5sb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkpOworI2Vsc2UKKyAgICBoYW5kbGUt
PmNyZWF0ZU5TVVJMQ29ubmVjdGlvbigKKyAgICAgICAgaGFuZGxlLT5kZWxlZ2F0ZSgpLCAvLyBB
IHN5bmNocm9ub3VzIHJlcXVlc3QgY2Fubm90IHR1cm4gaW50byBhIGRvd25sb2FkLCBzbyB0aGVy
ZSBpcyBubyBuZWVkIHRvIHByb3h5IHRoZSBkZWxlZ2F0ZS4KKyAgICAgICAgc3RvcmVkQ3JlZGVu
dGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscywKKyAgICAgICAgc2hvdWxkUmVsYXhUaGly
ZFBhcnR5Q29va2llUG9saWN5KGNvbnRleHQsIHJlcXVlc3QudXJsKCkpLAorICAgICAgICBoYW5k
bGUtPnNob3VsZENvbnRlbnRTbmlmZigpIHx8IChjb250ZXh0ICYmIGNvbnRleHQtPmxvY2FsRmls
ZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSksCisgICAgICAgIChOU0RpY3Rpb25hcnkgKiloYW5k
bGUtPmNsaWVudCgpLT5jb25uZWN0aW9uUHJvcGVydGllcyhoYW5kbGUuZ2V0KCkpKTsKKyNlbmRp
ZgogCiAgICAgW2hhbmRsZS0+Y29ubmVjdGlvbigpIHNjaGVkdWxlSW5SdW5Mb29wOltOU1J1bkxv
b3AgY3VycmVudFJ1bkxvb3BdIGZvck1vZGU6KE5TU3RyaW5nICopc3luY2hyb25vdXNMb2FkUnVu
TG9vcE1vZGUoKV07CiAgICAgW2hhbmRsZS0+Y29ubmVjdGlvbigpIHN0YXJ0XTsKQEAgLTQ5Miw2
ICs1NjQsMTkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGwKICAgICAgICAgfQogICAgIH0KIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBJZiB0aGUgY2hhbGxlbmdlIGlzIGZvciBhIHByb3h5
IHByb3RlY3Rpb24gc3BhY2UsIGxvb2sgZm9yIGRlZmF1bHQgY3JlZGVudGlhbHMgaW4KKyAgICAv
LyB0aGUga2V5Y2hhaW4uICBDRk5ldHdvcmsgdXNlZCB0byBoYW5kbGUgdGhpcyB1bnRpbCBXZWJD
b3JlIHdhcyBjaGFuZ2VkIHRvIGFsd2F5cworICAgIC8vIHJldHVybiBOTyB0byAtY29ubmVjdGlv
blNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlOiBmb3IgPHJkYXI6Ly9wcm9ibGVtLzc3MDQ5NDM+
LgorICAgIGlmICghY2hhbGxlbmdlLnByZXZpb3VzRmFpbHVyZUNvdW50KCkgJiYgY2hhbGxlbmdl
LnByb3RlY3Rpb25TcGFjZSgpLmlzUHJveHkoKSkgeworICAgICAgICBOU1VSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlICptYWNDaGFsbGVuZ2UgPSBtYWMoY2hhbGxlbmdlKTsKKyAgICAgICAgaWYg
KE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCA9IFtbTlNVUkxDcmVkZW50aWFsU3RvcmFnZSBz
aGFyZWRDcmVkZW50aWFsU3RvcmFnZV0gZGVmYXVsdENyZWRlbnRpYWxGb3JQcm90ZWN0aW9uU3Bh
Y2U6W21hY0NoYWxsZW5nZSBwcm90ZWN0aW9uU3BhY2VdXSkgeworICAgICAgICAgICAgW2NoYWxs
ZW5nZS5zZW5kZXIoKSB1c2VDcmVkZW50aWFsOmNyZWRlbnRpYWwgZm9yQXV0aGVudGljYXRpb25D
aGFsbGVuZ2U6bWFjQ2hhbGxlbmdlXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKICAgICBkLT5tX2N1cnJlbnRNYWNDaGFs
bGVuZ2UgPSBjaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpOwogICAgIGQt
Pm1fY3VycmVudFdlYkNoYWxsZW5nZSA9IGNvcmUoZC0+bV9jdXJyZW50TWFjQ2hhbGxlbmdlKTsK
ICAgICBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2Uuc2V0QXV0aGVudGljYXRpb25DbGllbnQodGhp
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNv
dXJjZVJlcXVlc3RNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9S
ZXNvdXJjZVJlcXVlc3RNYWMubW0KaW5kZXggODY5MTQwNTBmYmZkYjhhNmE1ZmU3YmJjOWEzODBm
ODgyOGZjNDEyMi4uM2M3OGM2ODYxMDU0MzJhZmJiMjhiYzNiMTdiMTdlODI4ZTQ5NjdiZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1
ZXN0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291
cmNlUmVxdWVzdE1hYy5tbQpAQCAtNTksNiArNTksOSBAQCBOU1VSTFJlcXVlc3QgKlJlc291cmNl
UmVxdWVzdDo6bnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5IGJvZHlQb2xpY3kpIGNv
bgogCiBSZXNvdXJjZVJlcXVlc3Q6OlJlc291cmNlUmVxdWVzdChOU1VSTFJlcXVlc3QgKm5zUmVx
dWVzdCkKICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoKQorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAsIG1fbWFpblJlc291cmNlUmVxdWVzdChmYWxzZSkKKyNlbmRpZgogICAgICwgbV9jZlJlcXVl
c3QoW25zUmVxdWVzdCBfQ0ZVUkxSZXF1ZXN0XSkKICAgICAsIG1fbnNSZXF1ZXN0KG5zUmVxdWVz
dCkKIHsKQEAgLTY2LDggKzY5LDI1IEBAIFJlc291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1ZXN0
KE5TVVJMUmVxdWVzdCAqbnNSZXF1ZXN0KQogCiB2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBkYXRl
TlNVUkxSZXF1ZXN0KCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gVGhlcmUgaXMgY2xp
ZW50IGNvZGUgdGhhdCBleHRlbmRzIE5TVVJMUmVxdWVzdCBhbmQgZXhwZWN0cyB0byBnZXQgYmFj
aywgaW4gdGhlIGRlbGVnYXRlCisgICAgLy8gY2FsbGJhY2tzLCBhbiBvYmplY3Qgb2YgdGhlIHNh
bWUgdHlwZSB0aGF0IHRoZXkgcGFzc2VkIGludG8gV2ViS2l0LiBUbyBrZWVwIHRoZW4gcnVubmlu
Zywgd2UKKyAgICAvLyBjcmVhdGUgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYW5kIHJldHVy
biB0aGF0LiBTZWUgPHJkYXI6Ly85ODQzNTgyPi4KKyAgICAvLyBBbHNvLCBkZXZlbG9wZXJzIHJl
YWxseSByZWFsbHkgd2FudCBhbiBOU011dGFibGVVUkxSZXF1ZXN0IHNvIHRyeSB0byBjcmVhdGUg
YW4KKyAgICAvLyBOU011dGFibGVVUkxSZXF1ZXN0IGluc3RlYWQgb2YgTlNVUkxSZXF1ZXN0Lgor
ICAgIHN0YXRpYyBDbGFzcyBuc1VSTFJlcXVlc3RDbGFzcyA9IFtOU1VSTFJlcXVlc3QgY2xhc3Nd
OworICAgIHN0YXRpYyBDbGFzcyBuc011dGFibGVVUkxSZXF1ZXN0Q2xhc3MgPSBbTlNNdXRhYmxl
VVJMUmVxdWVzdCBjbGFzc107CisgICAgQ2xhc3MgcmVxdWVzdENsYXNzID0gW21fbnNSZXF1ZXN0
LmdldCgpIGNsYXNzXTsKKworICAgIGlmICghcmVxdWVzdENsYXNzIHx8IHJlcXVlc3RDbGFzcyA9
PSBuc1VSTFJlcXVlc3RDbGFzcykKKyAgICAgICAgcmVxdWVzdENsYXNzID0gbnNNdXRhYmxlVVJM
UmVxdWVzdENsYXNzOworCisgICAgaWYgKG1fY2ZSZXF1ZXN0KQorICAgICAgICBtX25zUmVxdWVz
dCA9IGFkb3B0TlMoW1tyZXF1ZXN0Q2xhc3MgYWxsb2NdIF9pbml0V2l0aENGVVJMUmVxdWVzdDpt
X2NmUmVxdWVzdC5nZXQoKV0pOworI2Vsc2UKICAgICBpZiAobV9jZlJlcXVlc3QpCiAgICAgICAg
IG1fbnNSZXF1ZXN0ID0gYWRvcHROUyhbW05TVVJMUmVxdWVzdCBhbGxvY10gX2luaXRXaXRoQ0ZV
UkxSZXF1ZXN0Om1fY2ZSZXF1ZXN0LmdldCgpXSk7CisjZW5kaWYKIH0KIAogI2Vsc2UKQEAgLTIz
Miw4ICsyNTIsMTAgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZUZyb21EZWxlZ2F0ZVBy
ZXNlcnZpbmdPbGRIVFRQQm9keShjb25zdCBSZXNvdXJjZVJlcXUKIAogdm9pZCBSZXNvdXJjZVJl
cXVlc3Q6OmFwcGx5V2ViQXJjaGl2ZUhhY2tGb3JNYWlsKCkKIHsKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIC8vIEhhY2sgYmVjYXVzZSBNYWlsIGNoZWNrcyBmb3IgdGhpcyBwcm9wZXJ0eSB0byBk
ZXRlY3QgZGF0YSAvIGFyY2hpdmUgbG9hZHMKICAgICBbTlNVUkxQcm90b2NvbCBzZXRQcm9wZXJ0
eTpAIiIgZm9yS2V5OkAiV2ViRGF0YVJlcXVlc3QiIGluUmVxdWVzdDooTlNNdXRhYmxlVVJMUmVx
dWVzdCAqKW5zVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KV07CisjZW5kaWYKIH0KIAog
dm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnNldFN0b3JhZ2VTZXNzaW9uKENGVVJMU3RvcmFnZVNlc3Np
b25SZWYgc3RvcmFnZVNlc3Npb24pCkBAIC0yNDQsNiArMjY2LDcgQEAgdm9pZCBSZXNvdXJjZVJl
cXVlc3Q6OnNldFN0b3JhZ2VTZXNzaW9uKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNl
c3Npb24pCiAgICAgCiAjZW5kaWYgLy8gVVNFKENGTkVUV09SSykKIAorI2lmICFQTEFURk9STShJ
T1MpCiBzdGF0aWMgYm9vbCBpbml0UXVpY2tMb29rUmVzb3VyY2VDYWNoaW5nUXVpcmtzKCkKIHsK
ICAgICBpZiAoYXBwbGljYXRpb25Jc1NhZmFyaSgpKQpAQCAtMjYyLDExICsyODUsMTYgQEAgc3Rh
dGljIGJvb2wgaW5pdFF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcygpCiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiBib29sIFJlc291
cmNlUmVxdWVzdDo6dXNlUXVpY2tMb29rUmVzb3VyY2VDYWNoaW5nUXVpcmtzKCkKIHsKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgIHN0YXRpYyBib29sIGZsYWcgPSBpbml0UXVpY2tMb29rUmVzb3Vy
Y2VDYWNoaW5nUXVpcmtzKCk7CiAgICAgcmV0dXJuIGZsYWc7CisjZWxzZQorICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9VVElV
dGlsaXRpZXMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9VVElVdGls
aXRpZXMubW0KaW5kZXggNDI1OTI5ODAwZjVhYmZhN2Q2MmQ2M2JhMTRkOWU4ODEyYjYyZmYzMy4u
NjdiOGQ1ZTU1ZjA3NmY4MjNmNWU1NjFjZjQ1YzZmMzljZjM5ZDI2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvVVRJVXRpbGl0aWVzLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1VUSVV0aWxpdGllcy5tbQpAQCAtMzQs
NiArMzQsNyBAQCBTT0ZUX0xJTktfRlJBTUVXT1JLKE1vYmlsZUNvcmVTZXJ2aWNlcykKIAogU09G
VF9MSU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywgVVRUeXBlQ29weURlY2xhcmF0aW9uLCBDRkRpY3Rp
b25hcnlSZWYsIChDRlN0cmluZ1JlZiBpblVUSSksIChpblVUSSkpCiBTT0ZUX0xJTksoTW9iaWxl
Q29yZVNlcnZpY2VzLCBVVFR5cGVDb3B5UHJlZmVycmVkVGFnV2l0aENsYXNzLCBDRlN0cmluZ1Jl
ZiwgKENGU3RyaW5nUmVmIGluVVRJLCBDRlN0cmluZ1JlZiBpblRhZ0NsYXNzKSwgKGluVVRJLCBp
blRhZ0NsYXNzKSkKK1NPRlRfTElOSyhNb2JpbGVDb3JlU2VydmljZXMsIFVUVHlwZUNyZWF0ZVBy
ZWZlcnJlZElkZW50aWZpZXJGb3JUYWcsIENGU3RyaW5nUmVmLCAoQ0ZTdHJpbmdSZWYgaW5UYWdD
bGFzcywgQ0ZTdHJpbmdSZWYgaW5UYWcsIENGU3RyaW5nUmVmIGluQ29uZm9ybWluZ1RvVVRJKSwg
KGluVGFnQ2xhc3MsIGluVGFnLCBpbkNvbmZvcm1pbmdUb1VUSSkpCiAKIFNPRlRfTElOS19DT05T
VEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFR5cGVDb25mb3Jtc1RvS2V5LCBDRlN0cmluZ1Jl
ZikKIFNPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFRhZ0NsYXNzTUlN
RVR5cGUsIENGU3RyaW5nUmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdh
dGUubW0KaW5kZXggYjEzNGY1NWYxNmUxMGEyNTNlNmMyZWYwMDNmYjY4MzBhNzQxYzMwZS4uOTcz
YmE2MmM0ZDg4YTE4MDRjMDhjZGM3OGNjNjcyMDFmZDhiN2MzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxl
Z2F0ZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3Jl
UmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlLm1tCkBAIC05MywxMCArOTMsMTQgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKICAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBj
b25uZWN0aW9uU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U6JXAiLCBtX2hhbmRsZSwgY29ubmVj
dGlvbik7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIE5POworI2Vsc2UKICAgICBp
ZiAoIW1faGFuZGxlKQogICAgICAgICByZXR1cm4gTk87CiAKICAgICByZXR1cm4gbV9oYW5kbGUt
PnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7CisjZW5kaWYKIH0KIAogLSAodm9pZCljb25u
ZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZQpA
QCAtMTQxLDcgKzE0NSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAtICh2b2lkKWNv
bm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZVJlc3BvbnNl
OihOU1VSTFJlc3BvbnNlICopcgogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgVU5VU0VEX1BB
UkFNKGNvbm5lY3Rpb24pOworI2VuZGlmCiAKICAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBk
ZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGRpZFJlY2VpdmVSZXNwb25zZTolcCAoSFRUUCBzdGF0dXMg
JWQsIHJlcG9ydGVkIE1JTUVUeXBlICclcycpIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIHIsIFty
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc3RhdHVzQ29kZSldID8gWyhpZClyIHN0YXR1
c0NvZGVdIDogMCwgW1tyIE1JTUVUeXBlXSBVVEY4U3RyaW5nXSk7CiAKQEAgLTE1Myw4ICsxNTks
MTYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgaWYgKHN0YXR1c0NvZGUgIT0gMzA0
KQogICAgICAgICBhZGp1c3RNSU1FVHlwZUlmTmVjZXNzYXJ5KFtyIF9DRlVSTFJlc3BvbnNlXSk7
CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChbbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgp
Lm5zVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSBfcHJvcGVydHlGb3JLZXk6QCJGb3Jj
ZUhUTUxNSU1FVHlwZSJdKQogICAgICAgICBbciBfc2V0TUlNRVR5cGU6QCJ0ZXh0L2h0bWwiXTsK
KyNlbmRpZgorCisjaWYgVVNFKFFVSUNLX0xPT0spCisgICAgbV9oYW5kbGUtPnNldFF1aWNrTG9v
a0hhbmRsZShRdWlja0xvb2tIYW5kbGU6OmNyZWF0ZShtX2hhbmRsZSwgY29ubmVjdGlvbiwgciwg
c2VsZikpOworICAgIGlmIChtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCkpCisgICAgICAgIHIg
PSBtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCktPm5zUmVzcG9uc2UoKTsKKyNlbmRpZgogCiAg
ICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UobV9oYW5kbGUsIHIpOwog
fQpAQCAtMTcxLDYgKzE4NSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBpZiAo
IW1faGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKIAorI2lm
IFVTRShRVUlDS19MT09LKQorICAgIGlmIChtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCkgJiYg
bV9oYW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpLT5kaWRSZWNlaXZlRGF0YUFycmF5KHJlaW50ZXJw
cmV0X2Nhc3Q8Q0ZBcnJheVJlZj4oZGF0YUFycmF5KSkpCisgICAgICAgIHJldHVybjsKKyNlbmRp
ZgorCiAgICAgbV9oYW5kbGUtPmhhbmRsZURhdGFBcnJheShyZWludGVycHJldF9jYXN0PENGQXJy
YXlSZWY+KGRhdGFBcnJheSkpOwogICAgIC8vIFRoZSBjYWxsIHRvIGRpZFJlY2VpdmVEYXRhIGFi
b3ZlIGNhbiBjYW5jZWwgYSBsb2FkLCBhbmQgaWYgc28sIHRoZSBkZWxlZ2F0ZSAoc2VsZikgY291
bGQgaGF2ZSBiZWVuIGRlYWxsb2NhdGVkIGJ5IHRoaXMgcG9pbnQuCiB9CkBAIC0xODMsMTIgKzIw
MiwyMiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogICAgIExPRyhOZXR3b3JrLCAiSGFu
ZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgZGlkUmVjZWl2ZURhdGE6JXAgbGVuZ3RoUmVj
ZWl2ZWQ6JWxsZCIsIG1faGFuZGxlLCBjb25uZWN0aW9uLCBkYXRhLCBsZW5ndGhSZWNlaXZlZCk7
CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKFtkYXRhIGxlbmd0aF0gPT0gMCkgLy8gPHJk
YXI6Ly9wcm9ibGVtLzU1MzI5MzE+CisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgaWYg
KCFtX2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAg
Ly8gRklYTUU6IElmIHdlIGdldCBtb3JlIHRoYW4gMkIgYnl0ZXMgaW4gYSBzaW5nbGUgY2h1bmss
IHRoaXMgY29kZSB3b24ndCBkbyB0aGUgcmlnaHQgdGhpbmcuCiAgICAgLy8gSG93ZXZlciwgd2l0
aCB0b2RheSdzIGNvbXB1dGVycyBhbmQgbmV0d29ya2luZyBzcGVlZHMsIHRoaXMgd29uJ3QgaGFw
cGVuIGluIHByYWN0aWNlLgogICAgIC8vIENvdWxkIGJlIGFuIGlzc3VlIHdpdGggYSBnaWFudCBs
b2NhbCBmaWxlLgogCisjaWYgVVNFKFFVSUNLX0xPT0spCisgICAgaWYgKG1faGFuZGxlLT5xdWlj
a0xvb2tIYW5kbGUoKSAmJiBtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCktPmRpZFJlY2VpdmVE
YXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPihkYXRhKSkpCisgICAgICAgIHJldHVybjsK
KyNlbmRpZgorCiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTc5MwogICAgIC8vIC0xIG1lYW5zIHdlIGRvIG5vdCBwcm92aWRlIGFueSBkYXRh
IGFib3V0IHRyYW5zZmVyIHNpemUgdG8gaW5zcGVjdG9yIHNvIGl0IHdvdWxkIHVzZQogICAgIC8v
IENvbnRlbnQtTGVuZ3RoIGhlYWRlcnMgb3IgY29udGVudCBzaXplIHRvIHNob3cgdHJhbnNmZXIg
c2l6ZS4KQEAgLTIzMCw2ICsyNTksMTEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAg
aWYgKCFtX2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQogICAgICAgICByZXR1cm47CiAK
KyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBpZiAobV9oYW5kbGUtPnF1aWNrTG9va0hhbmRsZSgp
ICYmIG1faGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKS0+ZGlkRmluaXNoTG9hZGluZygpKQorICAg
ICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmluaXNo
TG9hZGluZyhtX2hhbmRsZSwgMCk7CiB9CiAKQEAgLTI0Miw2ICsyNzYsMTEgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAgICAgaWYgKCFtX2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgp
KQogICAgICAgICByZXR1cm47CiAKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBpZiAobV9oYW5k
bGUtPnF1aWNrTG9va0hhbmRsZSgpKQorICAgICAgICBtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxl
KCktPmRpZEZhaWwoKTsKKyNlbmRpZgorCiAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGYWls
KG1faGFuZGxlLCBlcnJvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZURhdGFiYXNlLmgKaW5kZXggZjE1NTA4YzQwYTBmOTFjZjkyZmU4ODcyMTEzZGMwZDQxYTE3
MWVmYi4uMWNkZjE3Nzk3NDViYTY5YjU3NzBkYzU5YzA5YjczZmZiOGJkNjg1OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKQEAgLTEwNyw3ICsxMDcs
OSBAQCBwdWJsaWM6CiAgICAgY29uc3QgY2hhciogbGFzdEVycm9yTXNnKCk7CiAgICAgCiAgICAg
c3FsaXRlMyogc3FsaXRlM0hhbmRsZSgpIGNvbnN0IHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
ICAgICBBU1NFUlQobV9zaGFyYWJsZSB8fCBjdXJyZW50VGhyZWFkKCkgPT0gbV9vcGVuaW5nVGhy
ZWFkIHx8ICFtX2RiKTsKKyNlbmRpZgogICAgICAgICByZXR1cm4gbV9kYjsKICAgICB9CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3Rl
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAK
aW5kZXggNzM1ZjBiNDFmNzhlMmMyMzNhN2M5YmJjZjg3ZTIxMTA0YzAxMzc2MC4uOGViNDhmMmJm
ZmZlZTg0YzYyNDEyMGMyOTg0M2U1ZTUxNjMwNDJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2lu
Y2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVk
ZSA8c3FsaXRlMy5oPgorI2luY2x1ZGUgPHNxbGl0ZTNfcHJpdmF0ZS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTExMCw2ICsxMTEsMTMgQEAgYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpk
ZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKICAgICByZXR1cm4gZGVs
ZXRlRmlsZShmaWxlTmFtZSk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitib29sIFNRTGl0ZUZp
bGVTeXN0ZW06OnRydW5jYXRlRGF0YWJhc2VGaWxlKHNxbGl0ZTMqIGRhdGFiYXNlKQoreworICAg
IHJldHVybiBzcWxpdGUzX2ZpbGVfY29udHJvbChkYXRhYmFzZSwgMCwgU1FMSVRFX1RSVU5DQVRF
X0RBVEFCQVNFLCAwKSA9PSBTUUxJVEVfT0s7Cit9CisjZW5kaWYKKyAgICAKIGxvbmcgbG9uZyBT
UUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpCiB7ICAgICAgICAKICAgICBsb25nIGxvbmcgc2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCmluZGV4IDE0MDg1YjkyOWM4NWI4N2FjMDU2
MmJjOWZlYzdhM2YxYzc3MDMxNjQuLmE3ZWY2NWU2NzUxZTQ2MTljNjVlYTNjMjA0ZDMwOTdjN2Q2
MGRjNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxl
U3lzdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0
ZW0uaApAQCAtOTksNiArOTksMTMgQEAgcHVibGljOgogICAgIC8vIGZpbGVOYW1lIC0gVGhlIGZp
bGUgbmFtZS4KICAgICBzdGF0aWMgYm9vbCBkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5n
JiBmaWxlTmFtZSk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gVHJ1bmNhdGVzIGEgZGF0
YWJhc2UgZmlsZS4gVXNlZCB3aGVuIE1vYmlsZVNhZmFyaVNldHRpbmdzIGRlbGV0ZXMgYSBkYXRh
YmFzZSBmaWxlLAorICAgIC8vIHNpbmNlIGRlbGV0aW5nIHRoZSBmaWxlIG51a2VzIHRoZSBQT1NJ
WCBmaWxlIGxvY2tzIHdoaWNoIHdvdWxkIHBvdGVudGlhbGx5IGNhdXNlIFNhZmFyaQorICAgIC8v
IHRvIGNvcnJ1cHQgdGhlIG5ldyBkYiBpZiBpdCdzIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmQu
CisgICAgc3RhdGljIGJvb2wgdHJ1bmNhdGVEYXRhYmFzZUZpbGUoc3FsaXRlMyogZGF0YWJhc2Up
OworI2VuZGlmCisgICAgCiAgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZGF0YWJhc2Ug
ZmlsZS4KICAgICAvLwogICAgIC8vIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwCmluZGV4IDZm
OTBlYWMwODk0ZTVmYzMxMWRiYTNmMDQ3NTJkMWNlMmI5MzhiNjEuLmQxNWNlZDNhZTBmYmRlNGE5
YWQ0OGI1MDM5YTRmMDliM2YwNTdhYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZVRyYW5zYWN0aW9uLmNwcApAQCAtMjgsNiArMjgsMTAgQEAKIAogI2luY2x1
ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiU1FM
aXRlRGF0YWJhc2VUcmFja2VyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBT
UUxpdGVUcmFuc2FjdGlvbjo6U1FMaXRlVHJhbnNhY3Rpb24oU1FMaXRlRGF0YWJhc2UmIGRiLCBi
b29sIHJlYWRPbmx5KQpAQCAtNTQsMTEgKzU4LDE4IEBAIHZvaWQgU1FMaXRlVHJhbnNhY3Rpb246
OmJlZ2luKCkKICAgICAgICAgLy8gYW55IHN0YXRlbWVudHMuIElmIHRoYXQgaGFwcGVucywgdGhp
cyB0cmFuc2FjdGlvbiB3aWxsIGZhaWwuCiAgICAgICAgIC8vIGh0dHA6Ly93d3cuc3FsaXRlLm9y
Zy9sYW5nX3RyYW5zYWN0aW9uLmh0bWwKICAgICAgICAgLy8gaHR0cDovL3d3dy5zcWxpdGUub3Jn
L2xvY2tpbmd2My5odG1sI2xvY2tpbmcKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIFNRTGl0
ZURhdGFiYXNlVHJhY2tlcjo6aW5jcmVtZW50VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnQoKTsK
KyNlbmRpZgogICAgICAgICBpZiAobV9yZWFkT25seSkKICAgICAgICAgICAgIG1faW5Qcm9ncmVz
cyA9IG1fZGIuZXhlY3V0ZUNvbW1hbmQoIkJFR0lOIik7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIG1faW5Qcm9ncmVzcyA9IG1fZGIuZXhlY3V0ZUNvbW1hbmQoIkJFR0lOIElNTUVESUFURSIp
OwogICAgICAgICBtX2RiLm1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gbV9pblByb2dyZXNzOwor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgaWYgKCFtX2luUHJvZ3Jlc3MpCisgICAgICAgICAg
ICBTUUxpdGVEYXRhYmFzZVRyYWNrZXI6OmRlY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0Nv
dW50KCk7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTY4LDYgKzc5LDEwIEBAIHZvaWQgU1FMaXRl
VHJhbnNhY3Rpb246OmNvbW1pdCgpCiAgICAgICAgIEFTU0VSVChtX2RiLm1fdHJhbnNhY3Rpb25J
blByb2dyZXNzKTsKICAgICAgICAgbV9pblByb2dyZXNzID0gIW1fZGIuZXhlY3V0ZUNvbW1hbmQo
IkNPTU1JVCIpOwogICAgICAgICBtX2RiLm1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gbV9pblBy
b2dyZXNzOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgaWYgKCFtX2luUHJvZ3Jlc3MpCisg
ICAgICAgICAgICBTUUxpdGVEYXRhYmFzZVRyYWNrZXI6OmRlY3JlbWVudFRyYW5zYWN0aW9uSW5Q
cm9ncmVzc0NvdW50KCk7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTgyLDYgKzk3LDkgQEAgdm9p
ZCBTUUxpdGVUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQogICAgICAgICBtX2RiLmV4ZWN1dGVDb21t
YW5kKCJST0xMQkFDSyIpOwogICAgICAgICBtX2luUHJvZ3Jlc3MgPSBmYWxzZTsKICAgICAgICAg
bV9kYi5tX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworI2lmIFBMQVRGT1JNKElPUykK
KyAgICAgICAgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpkZWNyZW1lbnRUcmFuc2FjdGlvbkluUHJv
Z3Jlc3NDb3VudCgpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC05MCw2ICsxMDgsOSBAQCB2b2lk
IFNRTGl0ZVRyYW5zYWN0aW9uOjpzdG9wKCkKICAgICBpZiAobV9pblByb2dyZXNzKSB7CiAgICAg
ICAgIG1faW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgICAgICBtX2RiLm1fdHJhbnNhY3Rpb25JblBy
b2dyZXNzID0gZmFsc2U7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBTUUxpdGVEYXRhYmFz
ZVRyYWNrZXI6OmRlY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KCk7CisjZW5kaWYK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9pb3Mv
U1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9p
b3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjYyMmY0YTVkMDRiOWZh
NDBiNWI2YTVlZGQ4YTdmMmUyOGIxMmNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwCkBAIC0wLDAgKzEs
ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2VUcmFja2VyLmgi
CisKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgU1FMaXRlRGF0YWJhc2VUcmFja2VyIHsKKworc3Rh
dGljIFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCogc19zdGF0aWNTUUxpdGVEYXRhYmFzZVRy
YWNrZXJDbGllbnQgPSAwOworc3RhdGljIHVuc2lnbmVkIHNfdHJhbnNhY3Rpb25JblByb2dyZXNz
Q291bnRlciA9IDA7CisKK3N0YXRpYyBNdXRleCYgdHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNdXRleD4gdGlwTXV0ZXg7CisgICAgcmV0
dXJuIHRpcE11dGV4OworfQorCit2b2lkIHNldENsaWVudChTUUxpdGVEYXRhYmFzZVRyYWNrZXJD
bGllbnQqIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoY2xpZW50KTsKKyAgICBBU1NFUlQoIXNfc3Rh
dGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50IHx8IHNfc3RhdGljU1FMaXRlRGF0YWJhc2VU
cmFja2VyQ2xpZW50ID09IGNsaWVudCk7CisgICAgc19zdGF0aWNTUUxpdGVEYXRhYmFzZVRyYWNr
ZXJDbGllbnQgPSBjbGllbnQ7Cit9CisKK3ZvaWQgaW5jcmVtZW50VHJhbnNhY3Rpb25JblByb2dy
ZXNzQ291bnQoKQoreworICAgIGlmICghc19zdGF0aWNTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGll
bnQpCisgICAgICAgIHJldHVybjsKKyAgICBNdXRleExvY2tlciBsb2NrKHRyYW5zYWN0aW9uSW5Q
cm9ncmVzc011dGV4KCkpOworCisgICAgc190cmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudGVyKys7
CisgICAgaWYgKHNfdHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRlciA9PSAxKQorICAgICAgICBz
X3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC0+d2lsbEJlZ2luRmlyc3RUcmFuc2Fj
dGlvbigpOworfQorCit2b2lkIGRlY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KCkK
K3sKKyAgICBpZiAoIXNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KQorICAgICAg
ICByZXR1cm47CisgICAgTXV0ZXhMb2NrZXIgbG9jayh0cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRl
eCgpKTsKKworICAgIEFTU0VSVChzX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXIpOworICAg
IHNfdHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRlci0tOworCisgICAgaWYgKCFzX3RyYW5zYWN0
aW9uSW5Qcm9ncmVzc0NvdW50ZXIpCisgICAgICAgIHNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFj
a2VyQ2xpZW50LT5kaWRGaW5pc2hMYXN0VHJhbnNhY3Rpb24oKTsKK30KKworI2lmICFBU1NFUlRf
RElTQUJMRUQKK2Jvb2wgaGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkKK3sKKyAgICByZXR1cm4g
IXNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50IHx8IHNfdHJhbnNhY3Rpb25JblBy
b2dyZXNzQ291bnRlciA+IDA7Cit9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorCit9IC8v
IG5hbWVzcGFjZSBTUUxpdGVEYXRhYmFzZVRyYWNrZXIKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRh
YmFzZVRyYWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9pb3MvU1FMaXRlRGF0
YWJhc2VUcmFja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODYxYzY0NjMzZTYzODQzOTQwMWJhZmQzZThjMTQx
NTk1ZGNiZGQwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9pb3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU1FMaXRl
RGF0YWJhc2VUcmFja2VyX2gKKyNkZWZpbmUgU1FMaXRlRGF0YWJhc2VUcmFja2VyX2gKKworI2lu
Y2x1ZGUgIlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBTUUxpdGVEYXRh
YmFzZVRyYWNrZXIgeworCit2b2lkIGRlY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50
KCk7Cit2b2lkIGluY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KCk7CisKK3ZvaWQg
c2V0Q2xpZW50KFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCopOworCisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorYm9vbCBoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKTsKKyNlbmRpZiAvLyAhQVNT
RVJUX0RJU0FCTEVECisKK307CisKK2NsYXNzIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1
dG9Db3VudGVyIHsKK3B1YmxpYzoKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRv
Q291bnRlcigpCisgICAgeworICAgICAgICBTUUxpdGVEYXRhYmFzZVRyYWNrZXI6OmluY3JlbWVu
dFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KCk7CisgICAgfQorICAgIH5TUUxpdGVUcmFuc2Fj
dGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlcigpCisgICAgeworICAgICAgICBTUUxpdGVEYXRhYmFz
ZVRyYWNrZXI6OmRlY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KCk7CisgICAgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU1FMaXRlRGF0YWJhc2VU
cmFja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9pb3MvU1FM
aXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
aW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxZjNkMmI5YmZi
NzgyZmFmODM2ZjI5ZWU0ZTYzZTlkYTU1YzM3ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oCkBA
IC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudF9oCisjZGVmaW5lIFNRTGl0
ZURhdGFiYXNlVHJhY2tlckNsaWVudF9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
U1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TUUxp
dGVEYXRhYmFzZVRyYWNrZXJDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVn
aW5GaXJzdFRyYW5zYWN0aW9uKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMYXN0
VHJhbnNhY3Rpb24oKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcAppbmRleCBkNzM2Y2NhNzRlYTQ5YTk3ZTQy
MjMwZTU3ZDEyYTAwMGU4NDVkOGM5Li4zMGY3YWIyMDlhYzVmN2JmZTZmYjM5ZjE1MjVmOTMzNWNm
ODE3OWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3Jt
TG9jYWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9j
YWxlLmNwcApAQCAtMzI4LDYgKzMyOCw3IEBAIFN0cmluZyBMb2NhbGU6OmNvbnZlcnRGcm9tTG9j
YWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYgbG9jYWxpemVkKQogCiAjaWYgRU5BQkxFKERBVEVf
QU5EX1RJTUVfSU5QVVRfVFlQRVMpCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogU3RyaW5nIExvY2Fs
ZTo6Zm9ybWF0RGF0ZVRpbWUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUsIEZvcm1hdFR5cGUg
Zm9ybWF0VHlwZSkKIHsKICAgICBpZiAoZGF0ZS50eXBlKCkgPT0gRGF0ZUNvbXBvbmVudHM6Oklu
dmFsaWQpCkBAIC0zNjMsNiArMzY0LDggQEAgU3RyaW5nIExvY2FsZTo6Zm9ybWF0RGF0ZVRpbWUo
Y29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUsIEZvcm1hdFR5cGUgZm9ybWF0VHlwZSkKICAgICB9
CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TKQorCiAjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9QbGF0Zm9ybUxvY2FsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0
Zm9ybUxvY2FsZS5oCmluZGV4IDFlOTc2OTA2YmU4Njg2Yjg5NWM2ZTMzMjkzMjU1NmUxNTdlMjA1
NmEuLjlmYzYzOWNlYTYwYTQ5Mzc3NjNmY2I0Mzg3MDc2NGRmNmQzYjBkYmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmgKQEAgLTMzLDYgKzMzLDEw
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIFBMQVRGT1JNKElPUykKK2NsYXNzIEZv
bnQ7CisjZW5kaWYKKwogY2xhc3MgTG9jYWxlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShM
b2NhbGUpOwogCkBAIC0xMTMsNyArMTE3LDE3IEBAIHB1YmxpYzoKICAgICAvLyBkaXNwbGF5IHRv
IHRoZSB1c2VyLiBJZiBhbiBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnQKICAgICAvLyBs
b2NhbGl6ZWQgZGF0ZXMgdGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RyaW5n
LgogICAgIC8vIEZvcm1hdFR5cGUgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBpZiB5b3Ugd2FudCB0
aGUgc2hvcnQgZm9ybWF0LiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIFN0cmluZyBmb3JtYXRE
YXRlVGltZShjb25zdCBEYXRlQ29tcG9uZW50cyYsIEZvcm1hdFR5cGUgPSBGb3JtYXRUeXBlVW5z
cGVjaWZpZWQpOworI2Vsc2UKKyAgICB2aXJ0dWFsIFN0cmluZyBmb3JtYXREYXRlVGltZShjb25z
dCBEYXRlQ29tcG9uZW50cyYsIEZvcm1hdFR5cGUgPSBGb3JtYXRUeXBlVW5zcGVjaWZpZWQpID0g
MDsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBzaG91bGQgYmUgbWVyZ2VkIHdpdGggT3BlbiBTb3Vy
Y2UgaW4gYSB3YXkgdGhhdCBpcyBmdXR1cmUgY29tcGF0aWJsZS4KKyAgICAvLyBNYXhpbXVtIHdp
ZHRoIGZvciBhIGZvcm1hdHRlZCBkYXRlIHN0cmluZyB3aXRoIGEgc3BlY2lmaWVkIGZvbnQuCisg
ICAgdmlydHVhbCBmbG9hdCBtYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6
VHlwZSwgY29uc3QgRm9udCYpID0gMDsKICNlbmRpZgogCiAgICAgdmlydHVhbCB+TG9jYWxlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJh
dG9ySUNVLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0
b3JJQ1UuY3BwCmluZGV4IDVlMTRlM2YwOGFhZWYzM2Y1ZDMzZTdhMmMzNzZhMTExZjFhODliNmMu
LjdlMGUyZDgzNzQ5MTUyYzNjN2JkMGRmMTdlOWM1YjM2MDA5NWNmY2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCkBA
IC01NzEsNiArNTcxLDcgQEAgYm9vbCBpc1dvcmRUZXh0QnJlYWsoVGV4dEJyZWFrSXRlcmF0b3Iq
IGl0ZXJhdG9yKQogICAgIHJldHVybiBydWxlU3RhdHVzICE9IFVCUktfV09SRF9OT05FOwogfQog
CisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc2V0VXBJdGVy
YXRvcldpdGhSdWxlcyhib29sJiBjcmVhdGVkSXRlcmF0b3IsIFRleHRCcmVha0l0ZXJhdG9yKiYg
aXRlcmF0b3IsCiAgICAgY29uc3QgY2hhciogYnJlYWtSdWxlcywgY29uc3QgVUNoYXIqIHN0cmlu
ZywgaW50IGxlbmd0aCkKIHsKQEAgLTU5NSw5ICs1OTYsMTEgQEAgc3RhdGljIFRleHRCcmVha0l0
ZXJhdG9yKiBzZXRVcEl0ZXJhdG9yV2l0aFJ1bGVzKGJvb2wmIGNyZWF0ZWRJdGVyYXRvciwgVGV4
dEJyZWEKIAogICAgIHJldHVybiBpdGVyYXRvcjsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9T
KQogCiBUZXh0QnJlYWtJdGVyYXRvciogY3Vyc29yTW92ZW1lbnRJdGVyYXRvcihjb25zdCBVQ2hh
ciogc3RyaW5nLCBpbnQgbGVuZ3RoKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gVGhp
cyBydWxlIHNldCBpcyBiYXNlZCBvbiBjaGFyYWN0ZXItYnJlYWsgaXRlcmF0b3IgcnVsZXMgb2Yg
SUNVIDQuMAogICAgIC8vIDxodHRwOi8vc291cmNlLmljdS1wcm9qZWN0Lm9yZy9yZXBvcy9pY3Uv
aWN1L3RhZ3MvcmVsZWFzZS00LTAvc291cmNlL2RhdGEvYnJraXRyL2NoYXIudHh0Pi4KICAgICAv
LyBUaGUgbWFqb3IgZGlmZmVyZW5jZXMgZnJvbSB0aGUgb3JpZ2luYWwgb25lcyBhcmUgbGlzdGVk
IGJlbG93OgpAQCAtNjgzLDYgKzY4NiwzMCBAQCBUZXh0QnJlYWtJdGVyYXRvciogY3Vyc29yTW92
ZW1lbnRJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQogICAgIHN0YXRp
YyBib29sIGNyZWF0ZWRDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yID0gZmFsc2U7CiAgICAgc3RhdGlj
IFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yOwogICAgIHJl
dHVybiBzZXRVcEl0ZXJhdG9yV2l0aFJ1bGVzKGNyZWF0ZWRDdXJzb3JNb3ZlbWVudEl0ZXJhdG9y
LCBzdGF0aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yLCBrUnVsZXMsIHN0cmluZywgbGVuZ3RoKTsK
KyNlbHNlIC8vIFBMQVRGT1JNKElPUykKKyAgICAvLyBVc2UgdGhlIHNwZWNpYWwgVGhhaSBjaGFy
YWN0ZXIgYnJlYWsgaXRlcmF0b3IgZm9yIGFsbCBsb2NhbGVzCisgICAgc3RhdGljIGJvb2wgY3Jl
YXRlZEN1cnNvckJyZWFrSXRlcmF0b3I7CisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBz
dGF0aWNDdXJzb3JCcmVha0l0ZXJhdG9yOworCisgICAgaWYgKCFzdHJpbmcpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgaWYgKCFjcmVhdGVkQ3Vyc29yQnJlYWtJdGVyYXRvcikgewor
ICAgICAgICBVRXJyb3JDb2RlIG9wZW5TdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHN0
YXRpY0N1cnNvckJyZWFrSXRlcmF0b3IgPSByZWludGVycHJldF9jYXN0PFRleHRCcmVha0l0ZXJh
dG9yKj4odWJya19vcGVuKFVCUktfQ0hBUkFDVEVSLCAidGgiLCAwLCAwLCAmb3BlblN0YXR1cykp
OworICAgICAgICBjcmVhdGVkQ3Vyc29yQnJlYWtJdGVyYXRvciA9IHRydWU7CisgICAgICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoVV9TVUNDRVNTKG9wZW5TdGF0dXMpLCAiSUNVIGNvdWxkIG5vdCBv
cGVuIGEgYnJlYWsgaXRlcmF0b3I6ICVzICglZCkiLCB1X2Vycm9yTmFtZShvcGVuU3RhdHVzKSwg
b3BlblN0YXR1cyk7CisgICAgfQorICAgIGlmICghc3RhdGljQ3Vyc29yQnJlYWtJdGVyYXRvcikK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBVRXJyb3JDb2RlIHNldFRleHRTdGF0dXMg
PSBVX1pFUk9fRVJST1I7CisgICAgdWJya19zZXRUZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFr
SXRlcmF0b3IqPihzdGF0aWNDdXJzb3JCcmVha0l0ZXJhdG9yKSwgc3RyaW5nLCBsZW5ndGgsICZz
ZXRUZXh0U3RhdHVzKTsKKyAgICBpZiAoVV9GQUlMVVJFKHNldFRleHRTdGF0dXMpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGF0aWNDdXJzb3JCcmVha0l0ZXJhdG9y
OworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAppbmRleCBiNGJiMzkwN2Y2MTQ4YzM0OTNmNmEx
N2ZhZjllODIwMDdlMDM2MDE1Li5jYzZlYWEyMWYwNGFhZDhhNDk2NTYwYTY1ODU2NjI3NmE0ZTll
YjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lD
VS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3Bw
CkBAIC00NCw2ICs0NCwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IHNpemVfdCBD
b252ZXJzaW9uQnVmZmVyU2l6ZSA9IDE2Mzg0OwogCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGlj
IGNvbnN0IGNoYXIqIHRleHRDb2RlY01hY0FsaWFzZXNbXSA9IHsKKyAgICAibWFjb3MtN18zLTEw
LjIiLCAvLyB4bWFjY3lyaWxsaWMsIG1hY2N5cmlsbGljCisgICAgIm1hY29zLTZfMi0xMC40Iiwg
Ly8geG1hY2dyZWVrCisgICAgIm1hY29zLTYtMTAuMiIsICAgLy8gbWFjZ3JlZWsKKyAgICAibWFj
b3MtMjktMTAuMiIsICAvLyB4bWFjY2VudHJhbGV1cnJvbWFuLCBtYWNjZW50cmFsZXVycm9tYW4K
KyAgICAibWFjb3MtMzUtMTAuMiIsICAvLyB4bWFjdHVya2lzaCwgbWFjdHVya2lzaAorICAgICJz
b2Z0YmFuay1zamlzIiwgIC8vIHNvZnRiYW5rc2ppcworICAgIG51bGxwdHIKK307CisjZW5kaWYK
KwogSUNVQ29udmVydGVyV3JhcHBlcjo6fklDVUNvbnZlcnRlcldyYXBwZXIoKQogewogICAgIGlm
IChjb252ZXJ0ZXIpCkBAIC0xODAsNiArMTkyLDI5IEBAIHZvaWQgVGV4dENvZGVjSUNVOjpyZWdp
c3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKICAgICBy
ZWdpc3RyYXIoIklTTzg4NTktMTUiLCAiSVNPLTg4NTktMTUiKTsKICAgICAvLyBOb3QgcmVnaXN0
ZXJpbmcgSVNPODg1OS0xNiwgYmVjYXVzZSBGaXJlZm94IChhcyBvZiB2ZXJzaW9uIDMuNi42KSBk
b2Vzbid0IGtub3cgdGhpcyBwYXJ0aWN1bGFyIGFsaWFzLAogICAgIC8vIGFuZCBiZWNhdXNlIG9s
ZGVyIHZlcnNpb25zIG9mIElDVSBkb24ndCBzdXBwb3J0IElTTy04ODU5LTE2IGVuY29kaW5nIGF0
IGFsbC4KKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBBLkIuIGFkZGluZyBhIGZldyBtb3Jl
IE1hYyBlbmNvZGluZ3MgbWlzc2luZyAnY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBUZXh0Q29kZWNNYWMg
cmlnaHQgbm93CisgICAgLy8gbHVja2lseSwgdGhleSBhcmUgc3VwcG9ydGVkIGluIElDVSwganVz
dCBuZWVkIHRvIGFsaWFzIHRoZW0uCisgICAgLy8gdGhpcyBoYW5kbGVzIGVuY29kaW5ncyB0aGF0
IE9TIFggdXNlcyBURUMgKFRleHRDb2RlY01hYykKKyAgICAvLyA8aHR0cDovL3B1YmxpYi5ib3Vs
ZGVyLmlibS5jb20vaW5mb2NlbnRlci93bWJoZWxwL3Y2cjBtMC9pbmRleC5qc3A/dG9waWM9L2Nv
bS5pYm0uZXRvb2xzLm1mdC5lYi5kb2MvYWMwMDQwOF8uaHRtPgorICAgIGludDMyX3QgaSA9IDA7
CisgICAgZm9yIChjb25zdCBjaGFyKiBtYWNBbGlhcyA9IHRleHRDb2RlY01hY0FsaWFzZXNbaV07
IG1hY0FsaWFzOyBtYWNBbGlhcyA9IHRleHRDb2RlY01hY0FsaWFzZXNbKytpXSkgeworICAgICAg
ICByZWdpc3RyYXIobWFjQWxpYXMsIG1hY0FsaWFzKTsKKworICAgICAgICBVRXJyb3JDb2RlIGVy
cm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1aW50MTZfdCBudW1BbGlhc2VzID0gdWNudl9j
b3VudEFsaWFzZXMobWFjQWxpYXMsICZlcnJvcik7CisgICAgICAgIEFTU0VSVChVX1NVQ0NFU1Mo
ZXJyb3IpKTsKKyAgICAgICAgaWYgKFVfU1VDQ0VTUyhlcnJvcikpCisgICAgICAgICAgICBmb3Ig
KHVpbnQxNl90IGogPSAwOyBqIDwgbnVtQWxpYXNlczsgKytqKSB7CisgICAgICAgICAgICAgICAg
ZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYWxpYXMg
PSB1Y252X2dldEFsaWFzKG1hY0FsaWFzLCBqLCAmZXJyb3IpOworICAgICAgICAgICAgICAgIEFT
U0VSVChVX1NVQ0NFU1MoZXJyb3IpKTsKKyAgICAgICAgICAgICAgICBpZiAoVV9TVUNDRVNTKGVy
cm9yKSAmJiBzdHJjbXAoYWxpYXMsIG1hY0FsaWFzKSkKKyAgICAgICAgICAgICAgICAgICAgcmVn
aXN0cmFyKGFsaWFzLCBtYWNBbGlhcyk7CisgICAgICAgICAgICB9CisgICAgfQorI2VuZGlmCiB9
CiAKIHZvaWQgVGV4dENvZGVjSUNVOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIg
cmVnaXN0cmFyKQpAQCAtMjE3LDYgKzI1MiwxMyBAQCB2b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0
ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKICAgICAvLyBGSVhNRTogSXMg
dGhlcmUgYSBnb29kIHdheSB0byBkZXRlcm1pbmUgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2YXJpYW50
IHByb2dyYW1tYXRpY2FsbHk/CiAgICAgcmVnaXN0cmFyKCJ3aW5kb3dzLTg3NCIsIGNyZWF0ZSwg
IndpbmRvd3MtODc0LTIwMDAiKTsKICAgICByZWdpc3RyYXIoIndpbmRvd3MtOTQ5IiwgY3JlYXRl
LCAid2luZG93cy05NDktMjAwMCIpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIFNlZSBj
b21tZW50IGFib3ZlIGluIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcygpLgorICAgIGludDMyX3QgaSA9
IDA7CisgICAgZm9yIChjb25zdCBjaGFyKiBhbGlhcyA9IHRleHRDb2RlY01hY0FsaWFzZXNbaV07
IGFsaWFzOyBhbGlhcyA9IHRleHRDb2RlY01hY0FsaWFzZXNbKytpXSkKKyAgICAgICAgcmVnaXN0
cmFyKGFsaWFzLCBjcmVhdGUsIDApOworI2VuZGlmCiB9CiAKIFRleHRDb2RlY0lDVTo6VGV4dENv
ZGVjSUNVKGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBjYW5vbmljYWxDb252ZXJ0
ZXJOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5j
b2RpbmdSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ1JlZ2lzdHJ5LmNwcAppbmRleCBhNTc4MmNmZDVmODRmODNiOGI5MzkxNjIwMWViNGYwOTY1
NjcwMTYzLi5iMWZlZTM1MDM1ZjkyMjNkMjNhZWEwNjg5ZWEyMDU4NDZmZTZlOWEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5
LmNwcApAQCAtNDIsNyArNDIsNyBAQAogI2lmIFVTRShJQ1VfVU5JQ09ERSkKICNpbmNsdWRlICJU
ZXh0Q29kZWNJQ1UuaCIKICNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShN
QUMpICYmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSAiVGV4dENvZGVjTWFjLmgiCiAjZW5kaWYK
ICNpZiBPUyhXSU5ET1dTKSAmJiBVU0UoV0NIQVJfVU5JQ09ERSkKQEAgLTI4NCw3ICsyODQsNyBA
QCBzdGF0aWMgdm9pZCBleHRlbmRUZXh0Q29kZWNNYXBzKCkKICAgICBUZXh0Q29kZWNJQ1U6OnJl
Z2lzdGVyQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0o
TUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICBUZXh0Q29kZWNN
YWM6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOwogICAg
IFRleHRDb2RlY01hYzo6cmVnaXN0ZXJDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL0h5cGhlbmF0aW9u
Q0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNw
cAppbmRleCA1YWM3OTRhMzE4M2M3YzZmYjZkNDljZTk1ZDg4YjY2ZTdmY2Q5NjQxLi4wZGVkYTg3
ZmNjN2FiZDk3OTliNmI0YWI4MWQwMjVkYmFmYWU2YmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAKQEAgLTYwLDcgKzYwLDE3IEBA
IHN0YXRpYyBBdG9taWNTdHJpbmdLZXllZE1SVUNhY2hlPFJldGFpblB0cjxDRkxvY2FsZVJlZj4+
JiBjZkxvY2FsZUNhY2hlKCkKIAogYm9vbCBjYW5IeXBoZW5hdGUoY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbGVJZGVudGlmaWVyKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgcmV0dXJuIGNm
TG9jYWxlQ2FjaGUoKS5nZXQobG9jYWxlSWRlbnRpZmllcik7CisjZWxzZQorI2lmICEoZGVmaW5l
ZChXVEZfQVJNX0FSQ0hfVkVSU0lPTikgJiYgV1RGX0FSTV9BUkNIX1ZFUlNJT04gPT0gNikKKyAg
ICByZXR1cm4gY2ZMb2NhbGVDYWNoZSgpLmdldChsb2NhbGVJZGVudGlmaWVyKTsKKyNlbHNlCisg
ICAgLy8gSHlwaGVuYXRpb24gaXMgbm90IGF2YWlsYWJsZSBvbiBkZXZpY2VzIHdpdGggQVJNdjYg
cHJvY2Vzc29ycy4gU2VlIDxyZGFyOi8vODM1MjU3MD4uCisgICAgVU5VU0VEX1BBUkFNKGxvY2Fs
ZUlkZW50aWZpZXIpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKIH0KIAogc2l6ZV90IGxhc3RIeXBoZW5Mb2NhdGlvbihjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGJlZm9yZUluZGV4LCBjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkNzMwZmJlMzFi
ZTQ1NTUxNjU2ZjZjZTc0MTBmYjk1ZmE4MzAxOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUuaApAQCAtMCwwICsx
LDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBMb2NhbGl6ZWREYXRlQ2FjaGVfaAorI2RlZmluZSBMb2NhbGl6ZWREYXRlQ2FjaGVfaAor
CisjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTG9j
YWxpemVkRGF0ZUNhY2hlIHsKK3B1YmxpYzoKKyAgICBOU0RhdGVGb3JtYXR0ZXIgKmZvcm1hdHRl
ckZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlKTsKKyAgICBmbG9hdCBtYXhpbXVtV2lk
dGhGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSwgY29uc3QgRm9udCYpOworICAgIHZv
aWQgbG9jYWxlQ2hhbmdlZCgpOworCitwcml2YXRlOgorICAgIExvY2FsaXplZERhdGVDYWNoZSgp
OworICAgIH5Mb2NhbGl6ZWREYXRlQ2FjaGUoKTsKKworICAgIE5TRGF0ZUZvcm1hdHRlciAqY3Jl
YXRlRm9ybWF0dGVyRm9yVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSk7CisgICAgZmxvYXQgY2Fs
Y3VsYXRlTWF4aW11bVdpZHRoKERhdGVDb21wb25lbnRzOjpUeXBlLCBjb25zdCBGb250Jik7CisK
KyAgICAvLyBVc2luZyBpbnQgaW5zdGVhZCBvZiBEYXRlQ29tcG9uZW50czo6VHlwZSBmb3IgdGhl
IGtleSBiZWNhdXNlIHRoZSBlbnVtCisgICAgLy8gZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgaGFz
aCBhbmQgaGFzaCB0cmFpdHMuIFVzYWdlIG9mIHRoZSBtYXBzCisgICAgLy8gY2FzdHMgdGhlIERh
dGVDb21wb25lbnRzOjpUeXBlIGludG8gYW4gaW50IGFzIHRoZSBrZXkuCisgICAgdHlwZWRlZiBI
YXNoTWFwPGludCwgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4+IERhdGVUeXBlRm9ybWF0dGVy
TWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIGZsb2F0PiBEYXRlVHlwZU1heFdpZHRoTWFw
OworICAgIERhdGVUeXBlRm9ybWF0dGVyTWFwIG1fZm9ybWF0dGVyTWFwOworICAgIERhdGVUeXBl
TWF4V2lkdGhNYXAgbV9tYXhXaWR0aE1hcDsKKyAgICBGb250IG1fZm9udDsKKworICAgIGZyaWVu
ZCBMb2NhbGl6ZWREYXRlQ2FjaGUmIGxvY2FsaXplZERhdGVDYWNoZSgpOworICAgIGZyaWVuZCBO
ZXZlckRlc3Ryb3llZDxMb2NhbGl6ZWREYXRlQ2FjaGU+OworfTsKKworLy8gU2luZ2xldG9uLgor
TG9jYWxpemVkRGF0ZUNhY2hlJiBsb2NhbGl6ZWREYXRlQ2FjaGUoKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTG9jYWxpemVkRGF0ZUNhY2hlX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5tbQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44NzE5MWEyZTQ1MzkyMzNhYjEzZGM2NjE3OGU1OGExYjhjOGM2MzlhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVk
RGF0ZUNhY2hlLm1tCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJMb2NhbGl6
ZWREYXRlQ2FjaGUuaCIKKworI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiVGV4dFJ1bi5oIgor
I2ltcG9ydCA8bWF0aC5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbXBvcnQgPENvcmVGb3VuZGF0aW9uL0NGTm90aWZpY2F0aW9u
Q2VudGVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworTG9jYWxpemVkRGF0ZUNhY2hlJiBsb2NhbGl6ZWREYXRlQ2FjaGUoKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxMb2NhbGl6ZWREYXRlQ2FjaGU+IGNhY2hlOworICAgIHJldHVybiBj
YWNoZTsKK30KKworc3RhdGljIHZvaWQgX2xvY2FsZUNoYW5nZWQoQ0ZOb3RpZmljYXRpb25DZW50
ZXJSZWYsIHZvaWQqLCBDRlN0cmluZ1JlZiwgY29uc3Qgdm9pZCosIENGRGljdGlvbmFyeVJlZikK
K3sKKyAgICBsb2NhbGl6ZWREYXRlQ2FjaGUoKS5sb2NhbGVDaGFuZ2VkKCk7Cit9CisKK0xvY2Fs
aXplZERhdGVDYWNoZTo6TG9jYWxpemVkRGF0ZUNhY2hlKCkKKyAgICA6IG1fZm9udChGb250KCkp
Cit7CisgICAgLy8gTGlzdGVuIHRvIENGIE5vdGlmaWNhdGlvbnMgZm9yIGxvY2FsZSBjaGFuZ2Us
IGFuZCBjbGVhciB0aGUgY2FjaGUgd2hlbiBpdCBkb2VzLgorICAgIENGTm90aWZpY2F0aW9uQ2Vu
dGVyQWRkT2JzZXJ2ZXIoQ0ZOb3RpZmljYXRpb25DZW50ZXJHZXRMb2NhbENlbnRlcigpLCAodm9p
ZCopdGhpcywgX2xvY2FsZUNoYW5nZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrQ0ZMb2NhbGVDdXJyZW50TG9jYWxlRGlkQ2hhbmdlTm90aWZpY2F0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgQ0ZOb3RpZmljYXRpb25TdXNwZW5z
aW9uQmVoYXZpb3JEZWxpdmVySW1tZWRpYXRlbHkpOworfQorCitMb2NhbGl6ZWREYXRlQ2FjaGU6
On5Mb2NhbGl6ZWREYXRlQ2FjaGUoKQoreworICAgIC8vIE5PVEU6IFNpbmdsZXRvbiBkb2VzIG5v
dCBleHBlY3QgdG8gYmUgZGVjb25zdHJ1Y3RlZC4KKyAgICBDRk5vdGlmaWNhdGlvbkNlbnRlclJl
bW92ZU9ic2VydmVyKENGTm90aWZpY2F0aW9uQ2VudGVyR2V0TG9jYWxDZW50ZXIoKSwgKHZvaWQq
KXRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0ZMb2NhbGVD
dXJyZW50TG9jYWxlRGlkQ2hhbmdlTm90aWZpY2F0aW9uLCBOVUxMKTsKK30KKwordm9pZCBMb2Nh
bGl6ZWREYXRlQ2FjaGU6OmxvY2FsZUNoYW5nZWQoKQoreworICAgIG1fbWF4V2lkdGhNYXAuY2xl
YXIoKTsKKyAgICBtX2Zvcm1hdHRlck1hcC5jbGVhcigpOworfQorCitOU0RhdGVGb3JtYXR0ZXIg
KkxvY2FsaXplZERhdGVDYWNoZTo6Zm9ybWF0dGVyRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6
OlR5cGUgdHlwZSkKK3sKKyAgICBpbnQga2V5ID0gc3RhdGljX2Nhc3Q8aW50Pih0eXBlKTsKKyAg
ICBpZiAobV9mb3JtYXR0ZXJNYXAuY29udGFpbnMoa2V5KSkKKyAgICAgICAgcmV0dXJuIG1fZm9y
bWF0dGVyTWFwLmdldChrZXkpLmdldCgpOworCisgICAgTlNEYXRlRm9ybWF0dGVyICpkYXRlRm9y
bWF0dGVyID0gW2NyZWF0ZUZvcm1hdHRlckZvclR5cGUodHlwZSkgYXV0b3JlbGVhc2VdOworICAg
IG1fZm9ybWF0dGVyTWFwLnNldChrZXksIGRhdGVGb3JtYXR0ZXIpOworICAgIHJldHVybiBkYXRl
Rm9ybWF0dGVyOworfQorCitmbG9hdCBMb2NhbGl6ZWREYXRlQ2FjaGU6Om1heGltdW1XaWR0aEZv
ckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUsIGNvbnN0IEZvbnQmIGZvbnQpCit7
CisgICAgaW50IGtleSA9IHN0YXRpY19jYXN0PGludD4odHlwZSk7CisgICAgaWYgKG1fZm9udCA9
PSBmb250KSB7CisgICAgICAgIGlmIChtX21heFdpZHRoTWFwLmNvbnRhaW5zKGtleSkpCisgICAg
ICAgICAgICByZXR1cm4gbV9tYXhXaWR0aE1hcC5nZXQoa2V5KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX2ZvbnQgPSBGb250KGZvbnQpOworICAgICAgICBtX21heFdpZHRoTWFwLmNsZWFyKCk7
CisgICAgfQorCisgICAgZmxvYXQgY2FsY3VsYXRlZE1heGltdW0gPSBjYWxjdWxhdGVNYXhpbXVt
V2lkdGgodHlwZSwgZm9udCk7CisgICAgbV9tYXhXaWR0aE1hcC5zZXQoa2V5LCBjYWxjdWxhdGVk
TWF4aW11bSk7CisgICAgcmV0dXJuIGNhbGN1bGF0ZWRNYXhpbXVtOworfQorCitOU0RhdGVGb3Jt
YXR0ZXIgKkxvY2FsaXplZERhdGVDYWNoZTo6Y3JlYXRlRm9ybWF0dGVyRm9yVHlwZShEYXRlQ29t
cG9uZW50czo6VHlwZSB0eXBlKQoreworICAgIE5TRGF0ZUZvcm1hdHRlciAqZGF0ZUZvcm1hdHRl
ciA9IFtbTlNEYXRlRm9ybWF0dGVyIGFsbG9jXSBpbml0XTsKKyAgICBOU0xvY2FsZSAqY3VycmVu
dExvY2FsZSA9IFtOU0xvY2FsZSBjdXJyZW50TG9jYWxlXTsKKyAgICBbZGF0ZUZvcm1hdHRlciBz
ZXRMb2NhbGU6Y3VycmVudExvY2FsZV07CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IERhdGVDb21wb25lbnRzOjpJbnZhbGlkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZToKKyAgICAgICAg
W2RhdGVGb3JtYXR0ZXIgc2V0VGltZVpvbmU6W05TVGltZVpvbmUgdGltZVpvbmVGb3JTZWNvbmRz
RnJvbUdNVDowXV07CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldFRpbWVTdHlsZTpOU0RhdGVG
b3JtYXR0ZXJOb1N0eWxlXTsKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0RGF0ZVN0eWxlOk5T
RGF0ZUZvcm1hdHRlck1lZGl1bVN0eWxlXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRl
Q29tcG9uZW50czo6RGF0ZVRpbWU6CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldFRpbWVab25l
OltOU1RpbWVab25lIGxvY2FsVGltZVpvbmVdXTsKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0
VGltZVN0eWxlOk5TRGF0ZUZvcm1hdHRlclNob3J0U3R5bGVdOworICAgICAgICBbZGF0ZUZvcm1h
dHRlciBzZXREYXRlU3R5bGU6TlNEYXRlRm9ybWF0dGVyTWVkaXVtU3R5bGVdOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlVGltZUxvY2FsOgorICAgICAgICBb
ZGF0ZUZvcm1hdHRlciBzZXRUaW1lWm9uZTpbTlNUaW1lWm9uZSB0aW1lWm9uZUZvclNlY29uZHNG
cm9tR01UOjBdXTsKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0VGltZVN0eWxlOk5TRGF0ZUZv
cm1hdHRlclNob3J0U3R5bGVdOworICAgICAgICBbZGF0ZUZvcm1hdHRlciBzZXREYXRlU3R5bGU6
TlNEYXRlRm9ybWF0dGVyTWVkaXVtU3R5bGVdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERh
dGVDb21wb25lbnRzOjpNb250aDoKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0VGltZVpvbmU6
W05TVGltZVpvbmUgdGltZVpvbmVGb3JTZWNvbmRzRnJvbUdNVDowXV07CisgICAgICAgIFtkYXRl
Rm9ybWF0dGVyIHNldERhdGVGb3JtYXQ6W05TRGF0ZUZvcm1hdHRlciBkYXRlRm9ybWF0RnJvbVRl
bXBsYXRlOkAiTU1NTXl5eXkiIG9wdGlvbnM6MCBsb2NhbGU6Y3VycmVudExvY2FsZV1dOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIERhdGVDb21wb25lbnRzOjpUaW1lOgorICAgICAgICBbZGF0
ZUZvcm1hdHRlciBzZXRUaW1lWm9uZTpbTlNUaW1lWm9uZSB0aW1lWm9uZUZvclNlY29uZHNGcm9t
R01UOjBdXTsKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0VGltZVN0eWxlOk5TRGF0ZUZvcm1h
dHRlclNob3J0U3R5bGVdOworICAgICAgICBbZGF0ZUZvcm1hdHRlciBzZXREYXRlU3R5bGU6TlNE
YXRlRm9ybWF0dGVyTm9TdHlsZV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGF0ZUNvbXBv
bmVudHM6OldlZWs6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gZGF0ZUZvcm1hdHRlcjsKK30KKworLy8gTk9URTogVGhp
cyBkb2VzIG5vdCBjaGVjayBmb3IgdGhlIHdpZGVzdCBkYXkgb2YgdGhlIHdlZWsuCisvLyBXZSBh
c3N1bWUgbm8gZm9ybWF0dGVyIG9wdGlvbiBzaG93cyB0aGF0IGluZm9ybWF0aW9uLgorZmxvYXQg
TG9jYWxpemVkRGF0ZUNhY2hlOjpjYWxjdWxhdGVNYXhpbXVtV2lkdGgoRGF0ZUNvbXBvbmVudHM6
OlR5cGUgdHlwZSwgY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICBmbG9hdCBtYXhpbXVtV2lkdGgg
PSAwOworCisgICAgLy8gR2V0IHRoZSBmb3JtYXR0ZXIgd2Ugd291bGQgdXNlLCBjb3B5IGl0IGJl
Y2F1c2Ugd2Ugd2lsbCBmb3JjZSBpdHMgdGltZSB6b25lIHRvIGJlIFVUQy4KKyAgICBOU0RhdGVG
b3JtYXR0ZXIgKmRhdGVGb3JtYXR0ZXIgPSBbW2Zvcm1hdHRlckZvckRhdGVUeXBlKHR5cGUpIGNv
cHldIGF1dG9yZWxlYXNlXTsKKyAgICBbZGF0ZUZvcm1hdHRlciBzZXRUaW1lWm9uZTpbTlNUaW1l
Wm9uZSB0aW1lWm9uZUZvclNlY29uZHNGcm9tR01UOjBdXTsKKworICAgIC8vIFNhbXBsZSBkYXRl
IHdpdGggYSA0IGRpZ2l0IHllYXIgYW5kIDIgZGlnaXQgZGF5LCBob3VyLCBhbmQgbWludXRlLiBE
aWdpdHMgYXJlCisgICAgLy8gdHlwaWNhbGx5IGFsbCBlcXVhbGx5IHdpZGUuIEZvcmNlIFVUQyB0
aW1lem9uZSBmb3IgdGhlIHRlc3QgZGF0ZSBiZWxvdyBzbyB0aGUKKyAgICAvLyBkYXRlIGRvZXNu
J3QgYWRqdXN0IGZvciB0aGUgY3VycmVudCB0aW1lem9uZS4gVGhpcyBpcyBhbiBhcmJpdHJhcnkg
ZGF0ZQorICAgIC8vICh4LTI3LTIwMDcpIGFuZCB0aW1lICgxMDo0NSBQTSkuCisgICAgUmV0YWlu
UHRyPE5TQ2FsZW5kYXI+IGdyZWdvcmlhbiA9IGFkb3B0TlMoW1tOU0NhbGVuZGFyIGFsbG9jXSBp
bml0V2l0aENhbGVuZGFySWRlbnRpZmllcjpOU0NhbGVuZGFySWRlbnRpZmllckdyZWdvcmlhbl0p
OworICAgIFtncmVnb3JpYW4uZ2V0KCkgc2V0VGltZVpvbmU6W05TVGltZVpvbmUgdGltZVpvbmVG
b3JTZWNvbmRzRnJvbUdNVDowXV07CisgICAgUmV0YWluUHRyPE5TRGF0ZUNvbXBvbmVudHM+IGNv
bXBvbmVudHMgPSBhZG9wdE5TKFtbTlNEYXRlQ29tcG9uZW50cyBhbGxvY10gaW5pdF0pOworICAg
IFtjb21wb25lbnRzLmdldCgpIHNldERheToyN107CisgICAgW2NvbXBvbmVudHMuZ2V0KCkgc2V0
WWVhcjoyMDA3XTsKKyAgICBbY29tcG9uZW50cy5nZXQoKSBzZXRIb3VyOjIyXTsKKyAgICBbY29t
cG9uZW50cy5nZXQoKSBzZXRNaW51dGU6NDVdOworCisgICAgc3RhdGljIE5TVUludGVnZXIgbnVt
YmVyT2ZHcmVnb3JpYW5Nb250aHMgPSBbW2RhdGVGb3JtYXR0ZXIgbW9udGhTeW1ib2xzXSBjb3Vu
dF07CisgICAgQVNTRVJUKG51bWJlck9mR3JlZ29yaWFuTW9udGhzID09IDEyKTsKKworICAgIC8v
IEZvciBlYWNoIG1vbnRoIChpbiB0aGUgR3JlZ29yaWFuIENhbGVuZGFyKSwgZm9ybWF0IGEgZGF0
ZSBhbmQgbWVhc3VyZSBpdHMgbGVuZ3RoLgorICAgIE5TVUludGVnZXIgdG90YWxNb250aHNUb1Rl
c3QgPSAxOworICAgIGlmICh0eXBlID09IERhdGVDb21wb25lbnRzOjpEYXRlCisgICAgICAgIHx8
IHR5cGUgPT0gRGF0ZUNvbXBvbmVudHM6OkRhdGVUaW1lCisgICAgICAgIHx8IHR5cGUgPT0gRGF0
ZUNvbXBvbmVudHM6OkRhdGVUaW1lTG9jYWwKKyAgICAgICAgfHwgdHlwZSA9PSBEYXRlQ29tcG9u
ZW50czo6TW9udGgpCisgICAgICAgIHRvdGFsTW9udGhzVG9UZXN0ID0gbnVtYmVyT2ZHcmVnb3Jp
YW5Nb250aHM7CisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgdG90YWxNb250aHNUb1Rl
c3Q7ICsraSkgeworICAgICAgICBbY29tcG9uZW50cy5nZXQoKSBzZXRNb250aDooaSArIDEpXTsK
KyAgICAgICAgTlNEYXRlICpkYXRlID0gW2dyZWdvcmlhbi5nZXQoKSBkYXRlRnJvbUNvbXBvbmVu
dHM6Y29tcG9uZW50cy5nZXQoKV07CisgICAgICAgIE5TU3RyaW5nICpmb3JtYXR0ZWREYXRlID0g
W2RhdGVGb3JtYXR0ZXIgc3RyaW5nRnJvbURhdGU6ZGF0ZV07CisgICAgICAgIFN0cmluZyBzdHIg
PSBTdHJpbmcoZm9ybWF0dGVkRGF0ZSk7CisgICAgICAgIG1heGltdW1XaWR0aCA9IG1heChtYXhp
bXVtV2lkdGgsIGZvbnQud2lkdGgoc3RyKSk7CisgICAgfQorCisgICAgcmV0dXJuIG1heGltdW1X
aWR0aDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvQ2hhcnNldERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvbWFjL0NoYXJzZXREYXRhLmgKaW5kZXggNDU4Y2VjYjUwZjFjZjFjOWJmNTM0
YjM3MmJjZTU4MjdmMzVlNDYzZC4uYTYwNzA0Mjk1Y2RlYzM3ZmIwNmM4NjRhMzczOTIwYjc4NTI5
NDkyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvQ2hhcnNl
dERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9DaGFyc2V0RGF0
YS5oCkBAIC0yMyw2ICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAorI2lmIFBMQVRG
T1JNKElPUykKK3R5cGVkZWYgVUludDMyICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0RW5j
b2Rpbmc7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgI2RlZmluZSBrVGV4
dEVuY29kaW5nSVNPTGF0aW5UaGFpIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW5UaGFpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5oCmluZGV4IDcwNzQ5MDNm
NDJkMWY2ZTgyM2Q4ZDQ0Y2E4YjkwN2RlNzE4MjJiOTYuLjg0YThmZGI5OTQyY2E4OTM5MmFmMjQw
NjU5NzVlNDM3NTM4ZjkwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvbWFjL0xvY2FsZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFj
L0xvY2FsZU1hYy5oCkBAIC01MSw2ICs1MSwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NP
d25QdHI8TG9jYWxlTWFjPiBjcmVhdGUoTlNMb2NhbGUqKTsKICAgICB+TG9jYWxlTWFjKCk7CiAK
KyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCBmbG9hdCBtYXhpbXVtV2lkdGhGb3JEYXRl
VHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSwgY29uc3QgRm9udCYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgU3RyaW5nIGZvcm1hdERhdGVUaW1lKGNvbnN0IERhdGVDb21wb25lbnRzJiwgRm9ybWF0
VHlwZSA9IEZvcm1hdFR5cGVVbnNwZWNpZmllZCkgT1ZFUlJJREU7CisjZW5kaWYKKwogI2lmIEVO
QUJMRShEQVRFX0FORF9USU1FX0lOUFVUX1RZUEVTKQogICAgIHZpcnR1YWwgU3RyaW5nIGRhdGVG
b3JtYXQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFN0cmluZyBtb250aEZvcm1hdCgpIE9WRVJS
SURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxl
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLm1tCmlu
ZGV4IGRiNDM1YmZhM2Y3MjNlMmM0OTY5ZTllMDIyMWVkMzNhNTZkM2NmZWMuLmQzNzNhZGQ3OTE5
ZTZmN2RiZGZjNjRmMzFiY2M0NzdkOWNmNThjYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMubW0KQEAgLTQwLDYgKzQwLDEwIEBACiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAor
I2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIkxvY2FsaXplZERhdGVDYWNoZS5oIgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGlubGluZSBTdHJpbmcgbGFuZ3VhZ2VG
cm9tTG9jYWxlKGNvbnN0IFN0cmluZyYgbG9jYWxlKQpAQCAtMTE2LDYgKzEyMCwzNSBAQCBSZXRh
aW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBMb2NhbGVNYWM6OnNob3J0RGF0ZUZvcm1hdHRlcigpCiAg
ICAgcmV0dXJuIGNyZWF0ZURhdGVUaW1lRm9ybWF0dGVyKG1fbG9jYWxlLmdldCgpLCBtX2dyZWdv
cmlhbkNhbGVuZGFyLmdldCgpLCBOU0RhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlLCBOU0RhdGVGb3Jt
YXR0ZXJOb1N0eWxlKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK1N0cmluZyBMb2NhbGVNYWM6
OmZvcm1hdERhdGVUaW1lKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlQ29tcG9uZW50cywgRm9y
bWF0VHlwZSkKK3sKKyAgICBkb3VibGUgbXNlYyA9IGRhdGVDb21wb25lbnRzLm1pbGxpc2Vjb25k
c1NpbmNlRXBvY2goKTsKKyAgICBEYXRlQ29tcG9uZW50czo6VHlwZSB0eXBlID0gZGF0ZUNvbXBv
bmVudHMudHlwZSgpOworCisgICAgLy8gIndlZWsiIHR5cGUgbm90IHN1cHBvcnRlZC4KKyAgICBB
U1NFUlQodHlwZSAhPSBEYXRlQ29tcG9uZW50czo6SW52YWxpZCk7CisgICAgaWYgKHR5cGUgPT0g
RGF0ZUNvbXBvbmVudHM6OldlZWspCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8v
IEluY29taW5nIG1zZWMgdmFsdWUgaXMgbWlsbGlzZWNvbmRzIHNpbmNlIDE5NzAtMDEtMDEgMDA6
MDA6MDAgVVRDLiBUaGUgMTk3MCBlcG9jaC4KKyAgICBOU1RpbWVJbnRlcnZhbCBzZWNvbmRzU2lu
Y2UxOTcwID0gKG1zZWMgLyAxMDAwKTsKKyAgICBOU0RhdGUgKmRhdGUgPSBbTlNEYXRlIGRhdGVX
aXRoVGltZUludGVydmFsU2luY2UxOTcwOnNlY29uZHNTaW5jZTE5NzBdOworCisgICAgLy8gUmV0
dXJuIGEgZm9ybWF0dGVkIHN0cmluZy4KKyAgICBOU0RhdGVGb3JtYXR0ZXIgKmRhdGVGb3JtYXR0
ZXIgPSBsb2NhbGl6ZWREYXRlQ2FjaGUoKS5mb3JtYXR0ZXJGb3JEYXRlVHlwZSh0eXBlKTsKKyAg
ICByZXR1cm4gW2RhdGVGb3JtYXR0ZXIgc3RyaW5nRnJvbURhdGU6ZGF0ZV07Cit9CisKK2Zsb2F0
IExvY2FsZU1hYzo6bWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUg
dHlwZSwgY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICBBU1NFUlQodHlwZSAhPSBEYXRlQ29tcG9u
ZW50czo6SW52YWxpZCk7CisgICAgQVNTRVJUKHR5cGUgIT0gRGF0ZUNvbXBvbmVudHM6OldlZWsp
OworCisgICAgcmV0dXJuIGxvY2FsaXplZERhdGVDYWNoZSgpLm1heGltdW1XaWR0aEZvckRhdGVU
eXBlKHR5cGUsIGZvbnQpOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9J
TlBVVF9UWVBFUykKIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVNYWM6Om1vbnRoTGFiZWxz
KCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRC
b3VuZGFyaWVzLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dEJvdW5k
YXJpZXMubW0KaW5kZXggMmY5MjE3ZjA3YmExODNjYTdmOWNmZDFiOTk3YzllZjBhNTk1ODkxNS4u
MzM2ZDdmNWUxNjYyYmU3YTcwMWM0ZmMwNmI4Njk0ZjI2ZmY1M2M3MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dEJvdW5kYXJpZXMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dEJvdW5kYXJpZXMubW0KQEAgLTI2LDEw
ICsyNiwxNzcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiVGV4dEJvdW5kYXJpZXMu
aCIKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIlRleHRCcmVha0l0ZXJhdG9ySW50ZXJu
YWxJQ1UuaCIKKyNpbXBvcnQgPENvcmVGb3VuZGF0aW9uL0NGU3RyaW5nVG9rZW5pemVyLmg+Cisj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPHVuaWNvZGUvdWJyay5o
PgorI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgorI2ltcG9ydCA8dW5pY29kZS91c3RyaW5nLmg+
CisjaW1wb3J0IDx1bmljb2RlL3V0eXBlcy5oPgorI2ltcG9ydCA8d3RmL3VuaWNvZGUvQ2hhcmFj
dGVyTmFtZXMuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShJT1MpCisKK3N0YXRpYyBib29sIGlzU2tpcENo
YXJhY3RlcihVQ2hhcjMyIGMpCit7CisgICAgcmV0dXJuIGMgPT0gMHhBMCB8fCAKKyAgICAgICAg
YyA9PSAnXG4nIHx8IAorICAgICAgICBjID09ICcuJyB8fCAKKyAgICAgICAgYyA9PSAnLCcgfHwg
CisgICAgICAgIGMgPT0gJyEnICB8fCAKKyAgICAgICAgYyA9PSAnPycgfHwgCisgICAgICAgIGMg
PT0gJzsnIHx8IAorICAgICAgICBjID09ICc6JyB8fCAKKyAgICAgICAgdV9pc3NwYWNlKGMpOwor
fQorCitzdGF0aWMgYm9vbCBpc1doaXRlc3BhY2VDaGFyYWN0ZXIoVUNoYXIzMiBjKQoreworICAg
IHJldHVybiBjID09IDB4QTAgfHwgCisgICAgICAgIGMgPT0gJ1xuJyB8fCAKKyAgICAgICAgdV9p
c3NwYWNlKGMpOworfQorCitzdGF0aWMgYm9vbCBpc1dvcmREZWxpbWl0aW5nQ2hhcmFjdGVyKFVD
aGFyMzIgYykKK3sKKyAgICBDRkNoYXJhY3RlclNldFJlZiBzZXQgPSBDRkNoYXJhY3RlclNldEdl
dFByZWRlZmluZWQoa0NGQ2hhcmFjdGVyU2V0QWxwaGFOdW1lcmljKTsKKyAgICAvLyBBbXBlcnNh
bmQgaXMgYW4gZXhjZXB0aW9uIGFkZGVkIHRvIHRyZWF0IEFUJlQgYXMgYSBzaW5nbGUgd29yZCAo
c2VlIDxyZGFyOi8vcHJvYmxlbS81MDIyMjY0PikuCisgICAgcmV0dXJuICFDRkNoYXJhY3RlclNl
dElzTG9uZ0NoYXJhY3Rlck1lbWJlcihzZXQsIGMpICYmIGMgIT0gJyYnOworfQorCitzdGF0aWMg
Ym9vbCBpc1N5bWJvbENoYXJhY3RlcihVQ2hhcjMyIGMpCit7CisgICAgQ0ZDaGFyYWN0ZXJTZXRS
ZWYgc2V0ID0gQ0ZDaGFyYWN0ZXJTZXRHZXRQcmVkZWZpbmVkKGtDRkNoYXJhY3RlclNldFN5bWJv
bCk7CisgICAgcmV0dXJuIENGQ2hhcmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKHNldCwg
Yyk7Cit9CisKK3N0YXRpYyBib29sIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNoYXIz
MiBjaGFyYWN0ZXIpCit7CisgICAgLy8gVGhlc2UgYXJlIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmVo
YXZlIGFzIHdvcmQgYm91bmRhcmllcywgYnV0IGNhbiBhcHBlYXIgd2l0aGluIHdvcmRzLgorICAg
IHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0ZXIgPT0gcmlnaHRTaW5nbGVRdW90
YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9PSBoZWJyZXdQdW5jdHVhdGlvbkdlcnNoYXlpbTsKK30K
Kworc3RhdGljIENGU3RyaW5nVG9rZW5pemVyUmVmIHRva2VuaXplckZvclN0cmluZyhDRlN0cmlu
Z1JlZiBzdHIpCit7CisgICAgc3RhdGljIENGU3RyaW5nVG9rZW5pemVyUmVmIHRva2VuaXplciA9
IG51bGxwdHI7CisgICAgc3RhdGljIENGTG9jYWxlUmVmIGxvY2FsZSA9IG51bGxwdHI7CisKKyAg
ICBpZiAoIWxvY2FsZSkgeworICAgICAgICBjb25zdCBjaGFyKiB0ZW1wID0gY3VycmVudFRleHRC
cmVha0xvY2FsZUlEKCk7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY3VycmVudExv
Y2FsZUlEID0gYWRvcHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlc05vQ29weShudWxscHRyLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4odGVtcCksIHN0cmxlbih0ZW1wKSwgIGtDRlN0
cmluZ0VuY29kaW5nQVNDSUksIGZhbHNlLCBrQ0ZBbGxvY2F0b3JOdWxsKSk7CisgICAgICAgIGxv
Y2FsZSA9IENGTG9jYWxlQ3JlYXRlKG51bGxwdHIsIGN1cnJlbnRMb2NhbGVJRC5nZXQoKSk7Cisg
ICAgICAgIGlmICghbG9jYWxlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgQ0ZSYW5nZSBlbnRpcmVSYW5nZSA9IENGUmFuZ2VNYWtlKDAsIENGU3RyaW5nR2V0TGVu
Z3RoKHN0cikpOyAgICAKKworICAgIGlmICghdG9rZW5pemVyKQorICAgICAgICB0b2tlbml6ZXIg
PSBDRlN0cmluZ1Rva2VuaXplckNyZWF0ZShudWxscHRyLCBzdHIsIGVudGlyZVJhbmdlLCBrQ0ZT
dHJpbmdUb2tlbml6ZXJVbml0V29yZEJvdW5kYXJ5LCBsb2NhbGUpOworICAgIGVsc2UKKyAgICAg
ICAgQ0ZTdHJpbmdUb2tlbml6ZXJTZXRTdHJpbmcodG9rZW5pemVyLCBzdHIsIGVudGlyZVJhbmdl
KTsKKyAgICByZXR1cm4gdG9rZW5pemVyOworfQorCisKKy8vIFNpbXBsZSBjYXNlOiBhIHdvcmQg
aXMgYSBzdHJlYW0gb2YgY2hhcmFjdGVycworLy8gZGVsaW1pdGVkIGJ5IGEgc3BlY2lhbCBzZXQg
b2Ygd29yZC1kZWxpbWl0aW5nIGNoYXJhY3RlcnMuCitzdGF0aWMgdm9pZCBmaW5kU2ltcGxlV29y
ZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQq
IHN0YXJ0LCBpbnQqIGVuZCkKK3sKKyAgICBBU1NFUlQocG9zaXRpb24gPj0gMCk7CisgICAgQVNT
RVJUKHBvc2l0aW9uIDwgbGVuKTsKKworICAgIGludCBzdGFydFBvcyA9IHBvc2l0aW9uOworICAg
IHdoaWxlIChzdGFydFBvcyA+IDApIHsKKyAgICAgICAgaW50IGkgPSBzdGFydFBvczsKKyAgICAg
ICAgVUNoYXIzMiBjaGFyYWN0ZXJCZWZvcmVTdGFydFBvczsKKyAgICAgICAgVTE2X1BSRVYoY2hh
cnMsIDAsIGksIGNoYXJhY3RlckJlZm9yZVN0YXJ0UG9zKTsKKyAgICAgICAgaWYgKGlzV29yZERl
bGltaXRpbmdDaGFyYWN0ZXIoY2hhcmFjdGVyQmVmb3JlU3RhcnRQb3MpKSB7CisgICAgICAgICAg
ICBBU1NFUlQoaSA+PSAwKTsKKyAgICAgICAgICAgIGlmICghaSkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgaWYgKCFpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKGNo
YXJhY3RlckJlZm9yZVN0YXJ0UG9zKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgVUNoYXIzMiBjaGFyYWN0ZXJCZWZvcmVCZWZvcmVTdGFydFBvczsKKyAgICAgICAgICAg
IFUxNl9QUkVWKGNoYXJzLCAwLCBpLCBjaGFyYWN0ZXJCZWZvcmVCZWZvcmVTdGFydFBvcyk7Cisg
ICAgICAgICAgICBpZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXJCZWZvcmVC
ZWZvcmVTdGFydFBvcykpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgVTE2X0JBQ0tfMShjaGFycywgMCwgc3RhcnRQb3MpOworICAgIH0KKyAgICAKKyAgICBpbnQg
ZW5kUG9zID0gcG9zaXRpb247CisgICAgd2hpbGUgKGVuZFBvcyA8IGxlbikgeworICAgICAgICBV
Q2hhcjMyIGNoYXJhY3RlcjsKKyAgICAgICAgVTE2X0dFVChjaGFycywgMCwgZW5kUG9zLCBsZW4s
IGNoYXJhY3Rlcik7CisgICAgICAgIGlmIChpc1dvcmREZWxpbWl0aW5nQ2hhcmFjdGVyKGNoYXJh
Y3RlcikpIHsKKyAgICAgICAgICAgIGludCBpID0gZW5kUG9zOworICAgICAgICAgICAgVTE2X0ZX
RF8xKGNoYXJzLCBpLCBsZW4pOworICAgICAgICAgICAgQVNTRVJUKGkgPD0gbGVuKTsKKyAgICAg
ICAgICAgIGlmIChpID09IGxlbikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IFVDaGFyMzIgY2hhcmFjdGVyQWZ0ZXJFbmRQb3M7CisgICAgICAgICAgICBVMTZfTkVYVChjaGFy
cywgaSwgbGVuLCBjaGFyYWN0ZXJBZnRlckVuZFBvcyk7CisgICAgICAgICAgICBpZiAoIWlzQW1i
aWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoY2hhcmFjdGVyKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmIChpc1dvcmREZWxpbWl0aW5nQ2hhcmFjdGVyKGNoYXJhY3RlckFm
dGVyRW5kUG9zKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBV
MTZfRldEXzEoY2hhcnMsIGVuZFBvcywgbGVuKTsKKyAgICB9CisKKyAgICAvLyBUaGUgdGV4dCBt
YXkgY29uc2lzdCBvZiBhbGwgZGVsaW1pdGVyIGNoYXJhY3RlcnMgKGUuZy4gIisrKysrKysrIiBv
ciBhIHNlcmllcyBvZiBlbW9qaSksIGFuZCByZXR1cm5pbmcgYW4gZW1wdHkgcmFuZ2UKKyAgICAv
LyBtYWtlcyBubyBzZW5zZSAoYW5kIGRvZXNuJ3QgbWF0Y2ggZmluZENvbXBsZXhXb3JkQm91bmRh
cnkoKSBiZWhhdmlvcikuCisgICAgaWYgKHN0YXJ0UG9zID09IGVuZFBvcyAmJiBlbmRQb3MgPCBs
ZW4pIHsKKyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7CisgICAgICAgIFUxNl9HRVQoY2hhcnMs
IDAsIGVuZFBvcywgbGVuLCBjaGFyYWN0ZXIpOworICAgICAgICBpZiAoaXNTeW1ib2xDaGFyYWN0
ZXIoY2hhcmFjdGVyKSkKKyAgICAgICAgICAgIFUxNl9GV0RfMShjaGFycywgZW5kUG9zLCBsZW4p
OworICAgIH0KKworICAgICpzdGFydCA9IHN0YXJ0UG9zOworICAgICplbmQgPSBlbmRQb3M7Cit9
CisKKy8vIENvbXBsZXggY2FzZTogdXNlIENGU3RyaW5nVG9rZW5pemVyIHRvIGZpbmQgd29yZCBi
b3VuZGFyeS4KK3N0YXRpYyB2b2lkIGZpbmRDb21wbGV4V29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFy
KiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkKK3sK
KyAgICBDRlN0cmluZ1JlZiBjaGFyU3RyaW5nID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
c05vQ29weShOVUxMLCBjaGFycywgbGVuLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKKyAgICBBU1NFUlQo
Y2hhclN0cmluZyk7CisgICAgCisgICAgQ0ZTdHJpbmdUb2tlbml6ZXJSZWYgdG9rZW5pemVyID0g
dG9rZW5pemVyRm9yU3RyaW5nKGNoYXJTdHJpbmcpOworICAgIGlmICh0b2tlbml6ZXIpIHsgICAg
ICAgIAorICAgICAgICBDRlN0cmluZ1Rva2VuaXplclRva2VuVHlwZSAgdG9rZW4gPSBDRlN0cmlu
Z1Rva2VuaXplckdvVG9Ub2tlbkF0SW5kZXgodG9rZW5pemVyLCBwb3NpdGlvbik7CisgICAgICAg
IENGUmFuZ2UgcmVzdWx0OworICAgICAgICBpZiAodG9rZW4gIT0ga0NGU3RyaW5nVG9rZW5pemVy
VG9rZW5Ob25lKSB7CisgICAgICAgICAgICByZXN1bHQgPSBDRlN0cmluZ1Rva2VuaXplckdldEN1
cnJlbnRUb2tlblJhbmdlKHRva2VuaXplcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBpZiBubyB0b2tlbiBmb3VuZDogc2VsZWN0IGVudGlyZSBibG9jaworICAgICAgICAgICAg
Ly8gTkI6IEkgbmV2ZXIgaGl0IHRoaXMgc2VjdGlvbiBpbiBhbGwgbXkgdGVzdGluZy4uLgorICAg
ICAgICAgICAgcmVzdWx0LmxvY2F0aW9uID0gMDsKKyAgICAgICAgICAgIHJlc3VsdC5sZW5ndGgg
PSBsZW47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICpzdGFydCA9IHJlc3VsdC5sb2Nh
dGlvbjsKKyAgICAgICAgKmVuZCA9IHJlc3VsdC5sb2NhdGlvbiArIHJlc3VsdC5sZW5ndGg7Cisg
ICAgfSBlbHNlIHsgICAgLy8gZXJyb3IgY3JlYXRpbmcgdG9rZW5pemVyCisgICAgICAgIGZpbmRT
aW1wbGVXb3JkQm91bmRhcnkoY2hhcnMsIGxlbiwgcG9zaXRpb24sIHN0YXJ0LCBlbmQpOworICAg
IH0KKworICAgIENGUmVsZWFzZShjaGFyU3RyaW5nKTsKK30KKyNlbmRpZgorCiB2b2lkIGZpbmRX
b3JkQm91bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGlu
dCogc3RhcnQsIGludCogZW5kKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgTlNTdHJpbmcq
IHN0cmluZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyc05vQ29weTpjb25z
dF9jYXN0PHVuaWNoYXIqPihjaGFycykKICAgICAgICAgbGVuZ3RoOmxlbiBmcmVlV2hlbkRvbmU6
Tk9dOwogICAgIE5TQXR0cmlidXRlZFN0cmluZyogYXR0ciA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzpzdHJpbmddOwpAQCAtMzgsNiArMjA1LDQ0IEBAIHZvaWQg
ZmluZFdvcmRCb3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlv
biwgaW50KiBzdGFydCwgaW50CiAgICAgW3N0cmluZyByZWxlYXNlXTsKICAgICAqc3RhcnQgPSBy
YW5nZS5sb2NhdGlvbjsKICAgICAqZW5kID0gcmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGg7
CisjZWxzZQorICAgIGludCBwb3MgPSBwb3NpdGlvbjsKKyAgICBpZiAoIHBvc2l0aW9uID09IGxl
biAmJiBwb3NpdGlvbiAhPSAwKQorICAgICAgICBwb3MtLTsKKyAgICAKKyAgICAvLyBGb3IgY29t
cGxleCB0ZXh0IChUaGFpLCBKYXBhbmVzZSwgQ2hpbmVzZSksIHZpc2libGVfdW5pdHMgd2lsbCBw
YXNzIHRoZSB0ZXh0IGluIGFzIGEgCisgICAgLy8gc2luZ2xlIGNvbnRpZ3VvdXMgcnVuIG9mIGNo
YXJhY3RlcnMsIHByb3ZpZGluZyBhcyBtdWNoIGNvbnRleHQgYXMgaXMgcG9zc2libGUuCisgICAg
Ly8gV2Ugb25seSBuZWVkIG9uZSBjaGFyYWN0ZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSB0ZXh0IGlz
IGNvbXBsZXguCisgICAgVUNoYXIzMiBjaDsKKyAgICBpbnQgaSA9IHBvczsKKyAgICBVMTZfTkVY
VChjaGFycyxpLGxlbixjaCk7CisgICAgYm9vbCBpc0NvbXBsZXggPSByZXF1aXJlc0NvbnRleHRG
b3JXb3JkQm91bmRhcnkoY2gpOworICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGltcHJv
dmVzIG91ciB3b3JkIGJvdW5kYXJ5IGJlaGF2aW9yLCBidXQgZG9lc24ndCBhY3R1YWxseSBnbyBm
YXIgZW5vdWdoLgorICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vODg1Mzk1MT4gVGFrZSBjb21w
bGV4IHdvcmQgYm91bmRhcnkgZmluZGluZyBwYXRoIHdoZW4gbmVjZXNzYXJ5CisgICAgaWYgKCFp
c0NvbXBsZXgpIHsKKyAgICAgICAgLy8gQ2hlY2sgYWdhaW4gZm9yIGNvbXBsZXggdGV4dCwgYXQg
dGhlIHN0YXJ0IG9mIHRoZSBydW4uCisgICAgICAgIGkgPSAwOworICAgICAgICBVMTZfTkVYVChj
aGFycywgaSwgbGVuLCBjaCk7CisgICAgICAgIGlzQ29tcGxleCA9IHJlcXVpcmVzQ29udGV4dEZv
cldvcmRCb3VuZGFyeShjaCk7CisgICAgfQorICAgIAorICAgIGlmIChpc0NvbXBsZXgpIHsKKyAg
ICAgICAgZmluZENvbXBsZXhXb3JkQm91bmRhcnkoY2hhcnMsbGVuLCBwb3NpdGlvbiwgc3RhcnQs
IGVuZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmluZFNpbXBsZVdvcmRCb3VuZGFyeShjaGFy
cyxsZW4sIHBvc2l0aW9uLCBzdGFydCwgZW5kKTsKKyAgICB9CisKKyNkZWZpbmUgTE9HX1dPUkRf
QlJFQUsgMAorI2lmIExPR19XT1JEX0JSRUFLCisgICAgQ0ZTdHJpbmdSZWYgdW5pU3RyaW5nID0g
Q0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhOVUxMLCBjaGFycywgbGVuKTsKKyAgICBDRlN0
cmluZ1JlZiBmb3VuZFdvcmQgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKE5VTEwsIChj
b25zdCBVbmlDaGFyICopIGNoYXJzICsgKnN0YXJ0LCAqZW5kIC0gKnN0YXJ0KTsgICAgICAgIAor
ICAgIE5TTG9nKEAiJXNfQlJFQUsgJyVAJyAoJWQsJWQpIGluICclQCcgKCVwKSBhdCAlZCwgbGVu
Z3RoPSVkIiwgaXNDb21wbGV4ID8gIkNPTVBMRVgiIDogIlNJTVBMRSIsIGZvdW5kV29yZCwgKnN0
YXJ0LCAqZW5kLCB1bmlTdHJpbmcsIHVuaVN0cmluZywgcG9zaXRpb24sIGxlbik7CisgICAgQ0ZS
ZWxlYXNlKGZvdW5kV29yZCk7CisgICAgQ0ZSZWxlYXNlKHVuaVN0cmluZyk7CisjZW5kaWYKKyAg
ICAKKyNlbmRpZgogfQogCiB2b2lkIGZpbmRFbmRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIqIGNo
YXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogZW5kKQpAQCAtNTMsNiArMjU4LDcgQEAg
dm9pZCBmaW5kRW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwgaW50
IHBvc2l0aW9uLCBpbnQqIGVuZCkKIAogaW50IGZpbmROZXh0V29yZEZyb21JbmRleChjb25zdCBV
Q2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgYm9vbCBmb3J3YXJkKQogeyAgIAor
I2lmICFQTEFURk9STShJT1MpCiAgICAgTlNTdHJpbmcqIHN0cmluZyA9IFtbTlNTdHJpbmcgYWxs
b2NdIGluaXRXaXRoQ2hhcmFjdGVyc05vQ29weTpjb25zdF9jYXN0PHVuaWNoYXIqPihjaGFycykK
ICAgICAgICAgbGVuZ3RoOmxlbiBmcmVlV2hlbkRvbmU6Tk9dOwogICAgIE5TQXR0cmlidXRlZFN0
cmluZyogYXR0ciA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpz
dHJpbmddOwpAQCAtNjAsNiArMjY2LDM1IEBAIGludCBmaW5kTmV4dFdvcmRGcm9tSW5kZXgoY29u
c3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyCiAgICAg
W2F0dHIgcmVsZWFzZV07CiAgICAgW3N0cmluZyByZWxlYXNlXTsKICAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UKKyAgICAvLyBUaGlzIHZlcnkgbGlrZWx5IHdvbid0IGJlaGF2ZSBleGFjdGx5IGxp
a2UgdGhlIG5vbi1pUGhvbmUgdmVyc2lvbiwgYnV0IGl0IHdvcmtzCisgICAgLy8gZm9yIHRoZSBj
b250ZXh0cyBpbiB3aGljaCBpdCBpcyB1c2VkIG9uIGlQaG9uZSwgYW5kIGluIHRoZSBmdXR1cmUg
d2lsbCBiZQorICAgIC8vIHR1bmVkIHRvIGltcHJvdmUgdGhlIGlQaG9uZS1zcGVjaWZpYyBiZWhh
dmlvciBmb3IgdGhlIGtleWJvYXJkIGFuZCB0ZXh0IGVkaXRpbmcuCisgICAgaW50IHBvcyA9IHBv
c2l0aW9uOworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIFVCcmVh
a0l0ZXJhdG9yICpib3VuZGFyeSA9IHVicmtfb3BlbihVQlJLX1dPUkQsIGN1cnJlbnRUZXh0QnJl
YWtMb2NhbGVJRCgpLCBjb25zdF9jYXN0PHVuaWNoYXIgKj4ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bmljaGFyICo+KGNoYXJzKSksIGxlbiwgJnN0YXR1cyk7CisKKyAgICBpZiAoYm91bmRhcnkg
JiYgVV9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgaWYgKGZvcndhcmQpIHsKKyAgICAgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgICAgICBwb3MgPSB1YnJrX2ZvbGxvd2luZyhib3VuZGFyeSwg
cG9zKTsgICAgCisgICAgICAgICAgICAgICAgaWYgKHBvcyA9PSBVQlJLX0RPTkUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcG9zID0gbGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gd2hpbGUgKHBvcyA8IGxlbiAmJiAocG9zID09IDAgfHwgIWlzU2tpcENoYXJhY3RlcihjaGFy
c1twb3MtMV0pKSAmJiBpc1NraXBDaGFyYWN0ZXIoY2hhcnNbcG9zXSkpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHBvcyA9IHVi
cmtfcHJlY2VkaW5nKGJvdW5kYXJ5LCBwb3MpOworICAgICAgICAgICAgICAgIGlmIChwb3MgPT0g
VUJSS19ET05FKSB7CisgICAgICAgICAgICAgICAgICAgIHBvcyA9IDA7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSB3aGlsZSAocG9zID4gMCAmJiBpc1NraXBDaGFyYWN0ZXIoY2hh
cnNbcG9zXSkgJiYgIWlzV2hpdGVzcGFjZUNoYXJhY3RlcihjaGFyc1twb3MtMV0pKTsKKyAgICAg
ICAgfQorICAgICAgICB1YnJrX2Nsb3NlKGJvdW5kYXJ5KTsKKyAgICB9CisgICAgcmV0dXJuIHBv
czsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmNwcAppbmRleCA0OGE5Nzc2YTllNTVh
M2NiNGNjY2VhMmI1ZDc5MjMyMWFiNDQ1N2RkLi43M2VkNGU4MWRjZWZmYWZkNzRjNjhhZjBkMGU1
ZGQ2ODNiNWQ2OTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21h
Yy9UZXh0Q29kZWNNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFj
L1RleHRDb2RlY01hYy5jcHAKQEAgLTI0LDYgKzI0LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICov
CiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
VGV4dENvZGVjTWFjLmgiCiAKQEAgLTMyNSwzICszMjcsNSBAQCBDU3RyaW5nIFRleHRDb2RlY01h
Yzo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29k
YWJsZQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENv
ZGVjTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMu
aAppbmRleCAzZTdhMjM3YzEzN2U5OTcwMDM0YTdhOGZhZTFiZmUwODc0NWUyOTEzLi40NjAyYjFi
YThjNjllZWU4YjEzODQ4MDQyNThmYzhiMWNjMDc0MzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuaApAQCAtMjcsNiArMjcsOCBAQAogI2lm
bmRlZiBUZXh0Q29kZWNNYWNfaAogI2RlZmluZSBUZXh0Q29kZWNNYWNfaAogCisjaWYgIVBMQVRG
T1JNKElPUykKKwogI2luY2x1ZGUgIlRleHRDb2RlYy5oIgogI2luY2x1ZGUgPENvcmVTZXJ2aWNl
cy9Db3JlU2VydmljZXMuaD4KIApAQCAtNzAsNCArNzIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisK
ICNlbmRpZiAvLyBUZXh0Q29kZWNNYWNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220655</attachid>
            <date>2014-01-08 12:46:59 -0800</date>
            <delta_ts>2014-01-08 12:52:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126654-20140108124658.patch</filename>
            <type>text/plain</type>
            <size>994144</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDdlZDBhMjFhNGYxODdjMjk5YjkyNjNm
OGRiMDAxNmRlNWRmM2U2ZWMuLjQ1YTMwODVmNzZhNmNmYzY2ZmE5ZGI4YTgzY2JkNzVlMzVlYjRh
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMDEtMDggIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFVwc3RyZWFtIFdlYkNvcmUvcGxhdGZvcm0g
Y2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI2NjU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmNhbkFjY2Vzc1RocmVhZExvY2Fs
RGF0YUZvclRocmVhZCk6CisgICAgICAgICogd3RmL01haW5UaHJlYWQuaDoKKwogMjAxNC0wMS0w
NyAgRGF2aWQgRmFybGVyICA8ZGZhcmxlckBhcHBsZS5jb20+CiAKICAgICAgICAgW0FTQU5dIEJ1
aWxkaW5nIHdpdGggdHJ1bmsgY2xhbmcgY29ycnVwdHMgc2FuZGJveCBwcm9maWxlIHdpdGggY29t
bWVudCBmcm9tIENvbXBpbGVyLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYjhjOTkyZTYwYWY2NjE5NTkyZjBi
OTFiNGJkODBjMzVmZTdkZjUzLi5jMmNjMzFkNDBhZjI0ODBiYTNkMTRiYTM5NTNhOTIwZWQ1OWM4
OTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYyIEBACisyMDE0LTAxLTA4ICBEYW5pZWwgQmF0
ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBVcHN0cmVhbSBXZWJDb3Jl
L3BsYXRmb3JtIGNoYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNjY1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRlbnRGaWx0ZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9EcmFnRGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9v
c2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZpbGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWV0YWRhdGFVUkwpOgorICAg
ICAgICAqIHBsYXRmb3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9LaWxsUmlu
Z05vbmUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZmlsZUJ1dHRvbkNob29zZU1lZGlhRmlsZUxhYmVsKToKKyAgICAgICAg
KFdlYkNvcmU6OmZpbGVCdXR0b25DaG9vc2VNdWx0aXBsZU1lZGlhRmlsZXNMYWJlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpmaWxlQnV0dG9uTm9NZWRpYUZpbGVTZWxlY3RlZExhYmVsKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZpbGVCdXR0b25Ob01lZGlhRmlsZXNTZWxlY3RlZExhYmVsKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmg6CisgICAgICAgICogcGxhdGZvcm0vTG9n
Z2luZy5oOgorICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aW5pdGlhbGl6ZVN1cHBvcnRlZEltYWdlTUlNRVR5cGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmluaXRpYWxpemVTdXBwb3J0ZWROb25JbWFnZU1pbWVUeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjppbml0aWFsaXplVW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Bs
YXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpldmVudCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFp
bkJ1bmRsZUlzRXF1YWxUbyk6CisgICAgICAgICogcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzSU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1N0cmluZ1RydW5jYXRvci5oLgorICAgICAgICAqIHBsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrc0lPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVRvdWNoRXZlbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsVHlwZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
dzo6YWN0dWFsU2Nyb2xsWCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjphY3R1YWxT
Y3JvbGxZKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aXNQaW5uZWRJbkJvdGhEaXJlY3Rpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZEhvcml6b250YWxseUluRGlyZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZFZlcnRpY2Fs
bHlJbkRpcmVjdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc1RvdWNoU2Nyb2xsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aXNPdmVyZmxvd1Njcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZGlkU3RhcnRTY3JvbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWE6OmRpZEVuZFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxhYmxlQXJlYTo6ZGlkVXBkYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGFibGVBcmVhOjpzZXRJc1VzZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWE6OmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9NaW5pbXVtUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVk
VG9NYXhpbXVtUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Omlz
VmVydGljYWxTY3JvbGxlclBpbm5lZFRvTWluaW11bVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGFibGVBcmVhOjppc1ZlcnRpY2FsU2Nyb2xsZXJQaW5uZWRUb01heGltdW1Qb3Np
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGVQdXJnZWFibGVCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6c2hvdWxkVXNlUHVyZ2Vh
YmxlTWVtb3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TdWRkZW5UZXJtaW5hdGlvbi5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdXBw
bGVtZW50YWJsZTo6cHJvdmlkZVN1cHBsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3VwcGxl
bWVudGFibGU6OnJlbW92ZVN1cHBsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3VwcGxlbWVu
dGFibGU6OnJlcXVpcmVTdXBwbGVtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TeXN0ZW1NZW1v
cnkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5n
VHJ1bmNhdG9yLmguCisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkQ2hlY2suaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVh
ZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFk
R2xvYmFsRGF0YTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRh
OjpzZXRXZWJDb3JlVGhyZWFkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjp0aHJlYWRHbG9iYWxE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmg6CisgICAgICAgICog
cGxhdGZvcm0vVGhyZWFkVGltZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFRpbWVy
czo6VGhyZWFkVGltZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFRpbWVyczo6c2hhcmVk
VGltZXJGaXJlZEludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaW1lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUaW1lckJhc2U6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVy
QmFzZTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lckJhc2U6OnNldE5leHRGaXJlVGlt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vVGltZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVy
QmFzZTo6aXNBY3RpdmUpOgorICAgICAgICAqIHBsYXRmb3JtL1VSTC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjplbmFibGVVUkxTY2hlbWVDYW5vbmljYWxpemF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmVxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTDo6cGFyc2UpOgorICAgICAgICAqIHBs
YXRmb3JtL1VSTC5oOgorICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFjLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUF1ZGlvQnVmZmVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpkZXN0
cm95QXVkaW9CdWZmZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6
QXVkaW9GaWxlUmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6fkF1
ZGlvRmlsZVJlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OnJlYWRQ
cm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6Z2V0U2l6ZVByb2MpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUF1ZGlvRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2lv
cy9BdWRpb0ZpbGVSZWFkZXJJT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmguCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Zp
bGVSZWFkZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpkYXRh
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvU2Vzc2lvbklPUy5tbToK
KyAgICAgICAgKFNPRlRfTElOS19QT0lOVEVSKToKKyAgICAgICAgKC1bV2ViQXVkaW9TZXNzaW9u
SGVscGVyIGluaXRXaXRoQ2FsbGJhY2s6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1dlYkF1ZGlv
U2Vzc2lvbkhlbHBlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkF1ZGlvU2Vzc2lvbkhlbHBl
ciBpbnRlcnJ1cHRpb246XSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1Nlc3Npb246OnNldENh
dGVnb3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1h
Yy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZSk6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vYXVk
aW8vbWFjL01lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwOgorICAgICAgICAoTWVkaWFTZXNzaW9u
TWFuYWdlcjo6dXBkYXRlU2Vzc2lvblN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9TaGFy
ZWRCdWZmZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vY2YvVVJMQ0YuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2NvY29hL0tleUV2ZW50Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjp3aW5kb3dzS2V5
Q29kZUZvckNoYXJDb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lSW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6b3JpZ2luYWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpvcmlnaW5h
bFNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjplbnN1cmVG
cmFtZUluZm9Jc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lT3JpZW50YXRpb25BdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzdGFydEFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0RhcmspOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
RGlzcGxheVJlZnJlc2hNb25pdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Rm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp3
aWR0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6d29yZFNwYWNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6bGV0dGVy
U3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzZXRXb3JkU3BhY2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpzZXRMZXR0ZXJTcGFjaW5nKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOgorICAgICAgICAoaW5pdEZvbnRDYWNoZUxvY2tPbmNl
KToKKyAgICAgICAgKEZvbnRMb2NrZXI6OkZvbnRMb2NrZXIpOgorICAgICAgICAoRm9udExvY2tl
cjo6fkZvbnRMb2NrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udENhY2hlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0
UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3U2ltcGxlVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRHbHlwaHMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmZvbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cm91bmRzR2x5cGhBZHZhbmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjppbml0aWFsaXplUGFnZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdCaWRpVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBS
b3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmVtb2ppRHJh
d2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRFbW9q
aURyYXdpbmdFbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6Y29udGVudHNMYXllckZvck1lZGlhKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6OnBpeGVsQWxpZ25tZW50T2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6Omhhc0ZsYXR0ZW5lZFBlcnNwZWN0aXZlVHJhbnNmb3JtKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JY29uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdUaWxlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjppc1N1YnNhbXBsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFBvaW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbnN0YWxsZWRN
ZWRpYUVuZ2luZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmlzQ3VycmVudFBs
YXliYWNrVGFyZ2V0V2lyZWxlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6
aGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXI6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyOjpzZXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0
ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmN1cnJlbnRQbGF5YmFja1Rh
cmdldElzV2lyZWxlc3NDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpw
bGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXI6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXI6OnJlYWR5Rm9yUGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnZv
bHVtZUNoYW5nZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllckNsaWVudDo6bWVkaWFQbGF5ZXJDdXJyZW50
UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllckNsaWVudDo6bWVkaWFQbGF5ZXJQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5n
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjp2b2x1bWUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjppc0N1cnJlbnRQ
bGF5YmFja1RhcmdldFdpcmVsZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZTo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6aGFzV2lyZWxlc3NQbGF5YmFja1Rhcmdl
dHMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjp3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2U6OnNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6c2V0SGFzUGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlSW50ZXJmYWNlOjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6cmVhZHlGb3JQbGF5YmFjayk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1N0cmluZ1RydW5jYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjZW50ZXJUcnVuY2F0ZVRv
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0VHJ1bmNhdGVUb0J1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpyaWdodENsaXBUb0NoYXJhY3RlckJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpyaWdodENsaXBUb1dvcmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFRydW5j
YXRlVG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6dHJ1bmNhdGVTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJUcnVuY2F0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RyaW5nVHJ1bmNhdG9yOjpsZWZ0VHJ1bmNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3Ry
aW5nVHJ1bmNhdG9yOjpyaWdodENsaXBUb0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dHJpbmdUcnVuY2F0b3I6OnJpZ2h0Q2xpcFRvV29yZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OnN1cHBvcnRz
VHlwZXNldHRpbmdGZWF0dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL0FWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGwubW06CisgICAgICAgIChXZWJDb3JlOjpB
VlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsOjpsYWJlbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OnBsYXRmb3JtTWF4VGltZUxvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjp3a0FWQXNzZXRS
ZXNvbHZlZFVSTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250
QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzdXBwb3J0c0FjY2VsZXJhdGVkRmlsdGVyQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNvbnRlbnRzTGF5ZXJGb3JNZWRpYSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNvbXB1dGVWaXNpYmxlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdlb21ldHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNSZWN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9ybUFuaW1h
dGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
c2V0dXBDb250ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
bWVkaWFMYXllck11c3RCZVVwZGF0ZWRPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNBOjpjb21wdXRlUGl4ZWxBbGlnbm1lbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvUGxhdGZvcm1DQUxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3VycmVu
dFJ1bkxvb3ApOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxlcjo6c2NoZWR1
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMubW06CisgICAgICAgICgtW1dlYkFuaW1hdGlvbkRlbGVnYXRlIGFuaW1hdGlvbkRpZFN0YXJ0
Ol0pOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRDb250ZW50c1NjYWxlKToKKyAg
ICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6aXNXZWJMYXllcik6CisgICAgICAgIChQbGF0Zm9ybUNB
TGF5ZXI6OnNldEJvdW5kc09uTWFpblRocmVhZCk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6
OnNldFBvc2l0aW9uT25NYWluVGhyZWFkKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6c2V0
QW5jaG9yUG9pbnRPbk1haW5UaHJlYWQpOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjpzZXRU
aWxlU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9s
bGVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnBsYXRmb3JtQ0FMYXll
clBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnJlbW92
ZUFsbFRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpyZW1vdmVBbGxT
ZWNvbmRhcnlUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmVtb3Zl
VGlsZXNJbkNvaG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmV2YWxp
ZGF0ZVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpjcmVhdGVUaWxl
TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0Zv
clNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lQXRJbmRleCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVDR0NvbG9yV2l0aERldmljZVdoaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUNHQ29sb3JXaXRoRGV2aWNlUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29s
b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzUkdCQ29sb3JT
cGFjZVJlZik6CisgICAgICAgIChXZWJDb3JlOjpzZXRTdHJva2VBbmRGaWxsQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlSU9TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpqcGVnVVRJKToKKyAgICAgICAgKFdlYkNvcmU6OnV0aUZyb21NSU1FVHlwZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdQYXR0ZXJuQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpJbWFnZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjppbWFnZVNvdXJjZU9w
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmltYWdlU291cmNlT3B0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6b3JpZ2luYWxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW06CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW50UmVjdENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXpl
Q0cuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW06CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhQXNzaWduKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6OmFsbG93c0xpZ2F0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpjdEZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNwbGF5
UmVmcmVzaE1vbml0b3JpT1MubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yOjp+RGlzcGxheVJlZnJlc2hNb25pdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlSZWZyZXNoTW9uaXRvcjo6cmVxdWVzdFJlZnJlc2hDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I6OmRpc3BsYXlMaW5rRmlyZWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW06IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJT1MuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5tbTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250U2VydmljZXNJT1M6OkZvbnRTZXJ2aWNlc0lPUyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBoaWNzQ29udGV4dDNESU9TLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuY3Bw
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmguCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGSU9TOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUzo6aW50ZXJuYWxJRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRSZWN0TWFjLm1tLgorICAgICAgICAoV2Vi
Q29yZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUzo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRklPUyk6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9T
Ojp+SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUyk6CisgICAgICAgIChXZWJDb3JlOjpJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TOjpraW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9pb3MvTWVkaWFQbGF5ZXJQcml2YXRlSU9TLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2lvcy9NZWRpYVBsYXllclByaXZhdGVJT1MubW06IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZvbnRIYXNWZXJ0aWNhbEdseXBocyk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRUcmFja1JlcHJlc2VudGF0aW9u
LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25JT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xv
ck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjphZGp1
c3RHbHlwaHNBbmRBZHZhbmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW06CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1hYy5tbToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3
Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Zm9udERhdGFGb3JDb21iaW5p
bmdDaGFyYWN0ZXJTZXF1ZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hvd0xldHRlcnByZXNzZWRHbHlwaHNX
aXRoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFjLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2VGcm9tRHJhd2FibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRG90UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL21hYy9JY29uTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW06
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWMubW06CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFNpemVNYWMubW06CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJveHkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9XZWJHTExheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1dlYkdMTGF5ZXIubW06CisgICAgICAgICgtW1dlYkdMTGF5ZXIgY29weUltYWdlU25hcHNo
b3RXaXRoQ29sb3JTcGFjZTpdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBkaXNwbGF5XSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6ZHJhd0xheWVyQ29udGVudHMpOgorICAgICAgICAoLVtXZWJTaW1wbGVMYXllciBkaXNw
bGF5XSk6CisgICAgICAgICgtW1dlYlNpbXBsZUxheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIubW06CisgICAgICAgICgr
W1dlYlRpbGVkTGF5ZXIgc2hvdWxkRHJhd09uTWFpblRocmVhZF0pOgorICAgICAgICAoLVtXZWJU
aWxlZExheWVyIGRpc3BsYXldKToKKyAgICAgICAgKC1bV2ViVGlsZWRMYXllciBkcmF3SW5Db250
ZXh0Ol0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpibGl0RnJh
bWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpiaW5kVmVy
dGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBw
b3J0c0V4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmRy
YXdCdWZmZXJzRVhUKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1h
dGlvbk1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
bXVsdGlwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vaW9zL0NvbnRlbnRGaWx0
ZXJJT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRGaWx0
ZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvRGV2aWNlTW90aW9uQ2xpZW50SU9TLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TOjpjcmVhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9EZXZpY2VNb3Rpb25DbGllbnRJT1MubW06IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpjcmVhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5tbTog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL0tleUV2ZW50SU9TLm1tOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9NSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9pb3MvTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmQ6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJl
c291cmNlTUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVQbGFp
blRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpzdXBwb3J0ZWRJbWFnZVR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OnN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIu
aC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW06IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9pb3MvUGxhdGZvcm1TY3JlZW5JT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2lvcy9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1tOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9pb3MvU1NMS2V5R2VuZXJhdG9ySU9TLmNwcDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5oLgorICAgICAgICAqIHBsYXRm
b3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1Njcm9sbFZpZXdJT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TY3Jv
bGxiYXJUaGVtZUlPUy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvU2Nyb2xsYmFy
VGhlbWVJT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TZWxlY3Rpb25SZWN0
LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1NlbGVjdGlvblJlY3QuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1NvdW5kSU9TLm1tOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9DaGFyc2V0RGF0YS5oLgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9TeXN0ZW1NZW1vcnlJT1MuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvVGhlbWVJT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2ls
bFJpbmdOb25lLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGhlbWVJT1MubW06IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9uZS5jcHAuCisgICAgICAg
ICogcGxhdGZvcm0vaW9zL1RpbGVDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVDYWNoZTo6aXNTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9UaWxlQ2FjaGUubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9U
aWxlR3JpZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGlsZUdyaWQubW06IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZpbHRlci5oLgorICAgICAgICAqIHBsYXRm
b3JtL2lvcy9UaWxlR3JpZFRpbGUubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9U
aWxlTGF5ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3Bs
YXlTbGVlcERpc2FibGVyLmguCisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVMYXllci5tbTog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVMYXllclBvb2wubW06IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwLgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5tbTogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW06IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2lvcy9XZWJFdmVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvV2ViRXZlbnQubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XaWRnZXRJT1Mu
bW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5U2xlZXBEaXNhYmxlcjo6RGlzcGxheVNsZWVw
RGlzYWJsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVNsZWVwRGlzYWJsZXI6On5EaXNw
bGF5U2xlZXBEaXNhYmxlcik6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERp
c2FibGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW06CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlQ
cmVzc3VyZUhhbmRsZXI6Omluc3RhbGwpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5UHJlc3N1
cmVIYW5kbGVyOjpyZWxlYXNlTWVtb3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZv
cm1DbG9ja0NNLm1tOgorICAgICAgICAoUGxhdGZvcm1DbG9ja0NNOjpQbGF0Zm9ybUNsb2NrQ00p
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9TeXN0ZW1WZXJzaW9uTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJD
b3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9X
ZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJD
b3JlRnVsbFNjcmVlbldpbmRvdy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZU5T
Q2VsbEV4dHJhcy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFz
Lm06CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViRm9udENhY2hlLm1tOgorICAgICAgICAoK1tXZWJGb250
Q2FjaGUgZm9udFdpdGhGYW1pbHk6dHJhaXRzOnNpemU6XSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9CbG9iUmVnaXN0cnkuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5SW1wbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFs
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFnZTo6c2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpjbGVhckNyZWRlbnRpYWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbHRpblJlc291cmNlSGFu
ZGxlQ29uc3RydWN0b3JNYXApOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
Ojpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RGVm
YXVsdEFsbG93Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNl
OjpkZWZhdWx0QWxsb3dDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OlJlc291cmNlUmVxdWVzdEJhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvQ3Jl
ZGVudGlhbFN0b3JhZ2VDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3Rv
cmFnZTo6c2F2ZVRvUGVyc2lzdGVudFN0b3JhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY2YvRE5TQ0ZOZXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUHJveHlT
ZXJ2ZXJDRk5ldC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
cXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6c2V0TWFpblJlc291cmNl
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmlzTWFpblJlc291
cmNlUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVl
c3RDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZUZy
b21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRIVFRQQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3Q6OmRvVXBkYXRlUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdDo6YXBwbHlXZWJBcmNoaXZlSGFja0Zvck1haWwpOgorICAgICAgICAo
V2ViQ29yZTo6aW5pdGlhbGl6ZUhUVFBDb25uZWN0aW9uU2V0dGluZ3NPblN0YXJ0dXApOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZXBvcnRFcnJvclRvQ2xpZW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9OZXR3b3JrU3RhdGVOb3RpZmllcklP
Uy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9uZS5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RhdGVOb3RpZmllcjo6TmV0d29ya1N0YXRl
Tm90aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0YXRlTm90aWZpZXI6OnNldElz
T25MaW5lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xvb2suaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLm1tOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9SZXNvdXJjZUhhbmRsZUlPUy5tbTogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9pb3MvV2ViQ29yZVVSTFJlc3BvbnNlSU9T
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1Ry
dW5jYXRvci5oLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvaW9zL1dlYkNvcmVVUkxSZXNw
b25zZUlPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvQXV0aGVu
dGljYXRpb25NYWMubW06CisgICAgICAgIChXZWJDb3JlOjptYWMpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvbWFjL0NyZWRlbnRpYWxTdG9yYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OnNhdmVUb1BlcnNpc3RlbnRTdG9yYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUVycm9yTWFjLm1tOgorICAgICAgICAoZGlj
dGlvbmFyeVRoYXRDYW5Db2RlKToKKyAgICAgICAgKC1bV2ViQ3VzdG9tTlNVUkxFcnJvciBlbmNv
ZGVXaXRoQ29kZXI6XSk6CisgICAgICAgIChOU0Vycm9yRnJvbUNGRXJyb3IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VFcnJvcjo6bnNFcnJvcik6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzeW5jaHJv
bm91c1dpbGxTZW5kUmVxdWVzdEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNjaGVk
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp1bnNjaGVkdWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMv
UmVzb3VyY2VSZXF1ZXN0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
OjpSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp1
cGRhdGVOU1VSTFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojph
cHBseVdlYkFyY2hpdmVIYWNrRm9yTWFpbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3Q6OnVzZVF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcyk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9tYWMvVVRJVXRpbGl0aWVzLm1tOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUubW06CisgICAgICAgICgt
W1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUgY29ubmVjdGlvblNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlOl0pOgorICAgICAgICAoLVtXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVn
YXRlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZVJlc3BvbnNlOl0pOgorICAgICAgICAoLVtXZWJDb3Jl
UmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZURhdGFBcnJheTpd
KToKKyAgICAgICAgKC1bV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSBjb25uZWN0aW9u
OmRpZFJlY2VpdmVEYXRhOmxlbmd0aFJlY2VpdmVkOl0pOgorICAgICAgICAoLVtXZWJDb3JlUmVz
b3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5nOl0pOgorICAg
ICAgICAoLVtXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246ZGlkRmFp
bFdpdGhFcnJvcjpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzcWxpdGUzSGFuZGxlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVGaWxlU3lzdGVtOjp0cnVuY2F0ZURhdGFiYXNlRmlsZSk6CisgICAgICAgICogcGxh
dGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FM
aXRlVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb246
OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uOjpjb21taXQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb246OnJvbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uOjpzdG9wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9z
cWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3NxbC9pb3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAuCisgICAgICAgICogcGxh
dGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcC4KKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1Bs
YXRmb3JtTG9jYWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRv
cklDVS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQ29kZWNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFRleHRD
b2RlY01hcHMpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjYW5IeXBoZW5hdGUpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvbWFjL0NoYXJzZXREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxl
TWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6TG9jYWxlTWFjOjpmb3JtYXREYXRlVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2NhbGVNYWM6Om1heGltdW1XaWR0aEZvckRhdGVUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2tpcENo
YXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1doaXRlc3BhY2VDaGFyYWN0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNXb3JkRGVsaW1pdGluZ0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJD
b3JlOjppc1N5bWJvbENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc0FtYmlndW91c0Jv
dW5kYXJ5Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRva2VuaXplckZvclN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpmaW5kU2ltcGxlV29yZEJvdW5kYXJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRDb21wbGV4V29yZEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRX
b3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5leHRXb3JkRnJvbUluZGV4KToK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5oOgorCiAyMDE0LTAxLTA4ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgV2lu
ZG93cyBidWlsZCBmaXggYXR0ZW1wdCBhZnRlciByMTYxNDgxLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvTWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApp
bmRleCAwNDRhNjQ3MjA5Yzc0MjIxNjYwM2FlYjdhYzcyZjdkOGUxZWI2MjUxLi5mNTcyYTNmZjVi
N2E5Mjg4ZDA0YjBjMTI4ZDU4ZGViZjUyMzA3ZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9NYWluVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApAQCAt
MjY2LDYgKzI2NiwxMyBAQCBib29sIGlzTWFpblRocmVhZCgpCiB9CiAjZW5kaWYKIAorI2lmICFV
U0UoV0VCX1RIUkVBRCkKK2Jvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSWQpCit7CisgICAgcmV0dXJuIHRocmVhZElkID09IGN1cnJl
bnRUaHJlYWQoKTsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQogc3RhdGlj
IFRocmVhZFNwZWNpZmljPGJvb2w+KiBpc0dDVGhyZWFkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmggYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgK
aW5kZXggNTBkZWI5YTlkMTUwYjA2NDEzMjExZDZhZWY2MmQzN2MwYmM5M2Y2OS4uMTNmNTUyMDRi
ZTQ3MTJmNDEzYTdjYTY4NjExYWQ3ZTJjYWE4ZDdiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvTWFpblRocmVhZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaApAQCAtNTUs
MTMgKzU1LDE0IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1haW5UaHJlYWRDYWxsYmFj
a3NQYXVzZWQoYm9vbCBwYXVzZWQpOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc01haW5U
aHJlYWQoKTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxE
YXRhRm9yVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworCiAjaWYgVVNFKFdFQl9USFJFQUQpCiBX
VEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1dlYlRocmVhZCgpOwogV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgaXNVSVRocmVhZCgpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVdl
YlRocmVhZCgpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZUFwcGxpY2F0aW9u
VUlUaHJlYWRJZGVudGlmaWVyKCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXpl
V2ViVGhyZWFkSWRlbnRpZmllcigpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOwogdm9pZCBpbml0aWFs
aXplV2ViVGhyZWFkUGxhdGZvcm0oKTsKICNlbHNlCiBpbmxpbmUgYm9vbCBpc1dlYlRocmVhZCgp
IHsgcmV0dXJuIGlzTWFpblRocmVhZCgpOyB9CkBAIC0xMDIsMTEgKzEwMywxMyBAQCB1c2luZyBX
VEY6OmNhbmNlbENhbGxPbk1haW5UaHJlYWQ7CiB1c2luZyBXVEY6OnNldE1haW5UaHJlYWRDYWxs
YmFja3NQYXVzZWQ7CiB1c2luZyBXVEY6OmlzTWFpblRocmVhZDsKIHVzaW5nIFdURjo6aXNNYWlu
VGhyZWFkT3JHQ1RocmVhZDsKK3VzaW5nIFdURjo6Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkOwordXNpbmcgV1RGOjppc1VJVGhyZWFkOwordXNpbmcgV1RGOjppc1dlYlRocmVhZDsK
ICNpZiBVU0UoV0VCX1RIUkVBRCkKIHVzaW5nIFdURjo6aW5pdGlhbGl6ZVdlYlRocmVhZDsKIHVz
aW5nIFdURjo6aW5pdGlhbGl6ZUFwcGxpY2F0aW9uVUlUaHJlYWRJZGVudGlmaWVyOwogdXNpbmcg
V1RGOjppbml0aWFsaXplV2ViVGhyZWFkSWRlbnRpZmllcjsKLXVzaW5nIFdURjo6Y2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkOwogI2VuZGlmCiAKICNlbmRpZiAvLyBNYWluVGhyZWFk
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMGMxZmQyYzNiZWMyNGI5OTg1ZTcyYWU5MjI3Mzcz
ZmNmZWEyM2UzMS4uMjkzYWFjMTcyMjNkZTc0Y2E0MGU0MmVlMzgzM2FjNjhjZTVjYmI0ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KQEAgLTE5MTUsNiArMTkxNSw5IEBAIF93a1NpZ25hbENGUmVhZFN0
cmVhbUVuZAogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtRXJyb3IKIF93a1NpZ25hbENGUmVhZFN0cmVh
bUhhc0J5dGVzCiAKK19fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc0Fkb2JlSW5zdGFsbGVyRXYK
K19fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc01pY3Jvc29mdE15RGF5RXYKKwogI2lmICFQTEFU
Rk9STShJT1MpCiAub2JqY19jbGFzc19uYW1lX0RPTUF0dHIKIC5vYmpjX2NsYXNzX25hbWVfRE9N
Q0RBVEFTZWN0aW9uCkBAIC0yMDQzLDggKzIwNDYsNiBAQCBfX1pON1dlYkNvcmUyNmNvbnRleHRN
ZW51SXRlbVRhZ0ZvbnRNZW51RXYKIF9fWk43V2ViQ29yZTI2Y29udGV4dE1lbnVJdGVtVGFnT3Bl
bkxpbmtFdgogX19aTjdXZWJDb3JlMjZwZGZEb2N1bWVudFR5cGVEZXNjcmlwdGlvbkV2CiBfX1pO
N1dlYkNvcmUyNnVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yRXYKLV9fWk43V2ViQ29yZTI3YXBw
bGljYXRpb25Jc0Fkb2JlSW5zdGFsbGVyRXYKLV9fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc01p
Y3Jvc29mdE15RGF5RXYKIF9fWk43V2ViQ29yZTI3Y29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRz
RXYKIF9fWk43V2ViQ29yZTI3Y29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lRXYKIF9fWk43V2Vi
Q29yZTI4Y29udGV4dE1lbnVJdGVtVGFnQ2FwaXRhbGl6ZUV2CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTVlNzNjZTc2MTZmOTQ2
NDRmZjk4NjViYjg2NGFkYjIzZGI1MTNlMS4uMTdmZjYzYjkyMGYwMDQzZDIxZTFlNTZjNzNjNjRk
MGFjYmUyNjM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtNTQ5Miw2ICs1NDkyLDczIEBACiAJCUNFQ0FERkNFMTUzNzc5MUQw
MEUzNzA2OCAvKiBUZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQ0FERkNDMTUzNzc5MUQwMEUzNzA2OCAvKiBU
ZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuaCAqLzsgfTsKIAkJQ0VDQ0ZDM0IxNDE5NzNENTAwMkEw
QUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VDQ0ZDM0ExNDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVz
Y2FwZVNlcXVlbmNlcy5oICovOyB9OwogCQlDRURBMTJENzE1MkNBMUNCMDBEOUUwOEQgLyogQWx0
ZXJuYXRpdmVUZXh0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRURBMTJENjE1MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xp
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MjkwMzcxNjUxNkJBMTFCQzAwRkVGREYwIC8qIENvbnRlbnRGaWx0ZXJJT1MubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTAzNzE2NDE2QkExMUJDMDBG
RUZERjAgLyogQ29udGVudEZpbHRlcklPUy5tbSAqLzsgfTsKKwkJMzFFQUY5N0UxMjE0MzVBNDAw
RTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFFQUY5N0MxMjE0MzVBNDAwRTdDMUJGIC8qIERldmlj
ZU1vdGlvbkNsaWVudElPUy5oICovOyB9OworCQkzMUVBRjk3RjEyMTQzNUE0MDBFN0MxQkYgLyog
RGV2aWNlTW90aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzFFQUY5N0QxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlvbkNs
aWVudElPUy5tbSAqLzsgfTsKKwkJMzE0MDM3OUQxMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9y
aWVudGF0aW9uQ2xpZW50SU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTQwMzc5OTEyNEJFQTdGMDBBRjQwRTQgLyogRGV2aWNlT3JpZW50YXRpb25D
bGllbnRJT1MuaCAqLzsgfTsKKwkJMzE0MDM3OUUxMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9y
aWVudGF0aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzE0MDM3OUExMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9u
Q2xpZW50SU9TLm1tICovOyB9OworCQkxRjY4RDRBRTE0QkI5RENBMDA3QjVDNjIgLyogTWVtb3J5
UHJlc3N1cmVIYW5kbGVySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUY2OEQ0QUQxNEJCOURDQTAwN0I1QzYyIC8qIE1lbW9yeVByZXNzdXJlSGFu
ZGxlcklPUy5tbSAqLzsgfTsKKwkJRTQ1MzkwMUQwRUFGQ0FDQTAwMzY5NUM4IC8qIE1JTUVUeXBl
UmVnaXN0cnlJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDUzOTAxODBFQUZDQUNBMDAzNjk1QzggLyogTUlNRVR5cGVSZWdpc3RyeUlPUy5tbSAq
LzsgfTsKKwkJMjY2MDFFQkYxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5
SU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjYw
MUVCRDE0QjNCOUFEMDAxMkMwRkUgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkyNjYwMUVDMDE0QjNC
OUFEMDAxMkMwRkUgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjYwMUVCRTE0QjNCOUFEMDAxMkMwRkUg
LyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0gKi87IH07CisJCUU0NTM5MDQzMEVBRkQ2Mzcw
MDM2OTVDOCAvKiBQbGF0Zm9ybVNjcmVlbklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MDMyMEVBRkQ2MzcwMDM2OTVDOCAvKiBQbGF0Zm9y
bVNjcmVlbklPUy5tbSAqLzsgfTsKKwkJQUExMkRGNDkxNzQzREY4MzAwNERBRkRGIC8qIFBsYXRm
b3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBQUUzNzU1RDE3NDI5QkNDMDA2MjAwQzIgLyogUGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXplcklPUy5tbSAqLzsgfTsKKwkJMEYxNzc0ODAxMzc4Qjc3MjAwOURBNzZBIC8q
IFNjcm9sbEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1Mu
aCAqLzsgfTsKKwkJMEYxNzc0ODExMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNzc0
N0YxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLm1tICovOyB9OworCQk0NEM5
OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Qzk5MTg1MEYzRDFFQkUwMDU4NjY3
MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5oICovOyB9OworCQk0NEM5OTE4MjBGM0QxRTBEMDA1ODY2
NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NEM5OTE4MTBGM0QxRTBEMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhl
bWVJT1MubW0gKi87IH07CisJCUU0NTM5MDQ1MEVBRkQ2MzcwMDM2OTVDOCAvKiBTY3JvbGxWaWV3
SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1
MzkwMzQwRUFGRDYzNzAwMzY5NUM4IC8qIFNjcm9sbFZpZXdJT1MubW0gKi87IH07CisJCUJFQTgw
N0M4MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFQTgwN0M2MEY3MTRBMDMwMDUyNDE5OSAv
KiBTZWxlY3Rpb25SZWN0LmNwcCAqLzsgfTsKKwkJQkVBODA3QzkwRjcxNEEwMzAwNTI0MTk5IC8q
IFNlbGVjdGlvblJlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJFQTgwN0M3MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTQ1MzkwNDcwRUFG
RDYzNzAwMzY5NUM4IC8qIFNvdW5kSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQ1MzkwMzYwRUFGRDYzNzAwMzY5NUM4IC8qIFNvdW5kSU9TLm1t
ICovOyB9OworCQk0NDc2NTMxQjEzMzE3MDk5MDAwNkI3ODkgLyogU1NMS2V5R2VuZXJhdG9ySU9T
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NzY1
MzFBMTMzMTcwOTkwMDA2Qjc4OSAvKiBTU0xLZXlHZW5lcmF0b3JJT1MuY3BwICovOyB9OworCQlF
NDUzOTBBRTBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9TLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MEFEMEVBRkY0QjUwMDM2
OTVDOCAvKiBTeXN0ZW1NZW1vcnlJT1MuY3BwICovOyB9OworCQk0NEM5OTE5RjBGM0QyMTBFMDA1
ODY2NzAgLyogVGhlbWVJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0Qzk5MTlEMEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5oICovOyB9Owor
CQk0NEM5OTFBMDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEM5OTE5RTBGM0QyMTBFMDA1ODY2NzAg
LyogVGhlbWVJT1MubW0gKi87IH07CisJCUU0QzNCMUZBMEYwRTQxNjEwMDk2OTNGNiAvKiBUaWxl
Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
QzNCMUY5MEYwRTQxNjEwMDk2OTNGNiAvKiBUaWxlQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFNEMzQjFGQzBGMEU0MTcwMDA5NjkzRjYg
LyogVGlsZUNhY2hlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTRDM0IxRkIwRjBFNDE3MDAwOTY5M0Y2IC8qIFRpbGVDYWNoZS5tbSAqLzsgfTsKKwkJ
RTRCNjVBNTgxMzJGQThFNzAwNzBFN0JFIC8qIFRpbGVHcmlkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1NzEzMkZBOEU3MDA3MEU3QkUgLyog
VGlsZUdyaWQuaCAqLzsgfTsKKwkJRTRCNjVBNUExMzJGQUFGOTAwNzBFN0JFIC8qIFRpbGVHcmlk
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNjVB
NTkxMzJGQUFGOTAwNzBFN0JFIC8qIFRpbGVHcmlkLm1tICovOyB9OworCQlFNDI0QTM5RTEzMzBE
RjAxMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDI0QTM5RDEzMzBERjAxMDBDRjZEQzkgLyogVGlsZUdyaWRU
aWxlLmggKi87IH07CisJCUU0MjRBM0EwMTMzMERGMUUwMENGNkRDOSAvKiBUaWxlR3JpZFRpbGUu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDI0QTM5
RjEzMzBERjFFMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLm1tICovOyB9OworCQlFNEI2NUE1QzEz
MkZBQ0IwMDA3MEU3QkUgLyogVGlsZUxheWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1QjEzMkZBQ0IwMDA3MEU3QkUgLyogVGlsZUxheWVy
LmggKi87IH07CisJCUU0QjY1QTVFMTMyRkFEQjYwMDcwRTdCRSAvKiBUaWxlTGF5ZXIubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1RDEzMkZB
REI2MDA3MEU3QkUgLyogVGlsZUxheWVyLm1tICovOyB9OworCQlFNEUzOUFGQjEzMzBFRkE4MDAz
QUIyNzQgLyogVGlsZUxheWVyUG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTRFMzlBRkExMzMwRUZBODAwM0FCMjc0IC8qIFRpbGVMYXllclBvb2wu
aCAqLzsgfTsKKwkJRTRFMzlBRkQxMzMwRUZDNjAwM0FCMjc0IC8qIFRpbGVMYXllclBvb2wubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEUzOUFGQzEz
MzBFRkM1MDAzQUIyNzQgLyogVGlsZUxheWVyUG9vbC5tbSAqLzsgfTsKKwkJMzE0MDM3OUIxMjRC
RUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTQwMzc5NzEyNEJFQTdGMDBBRjQwRTQgLyog
V2ViQ29yZU1vdGlvbk1hbmFnZXIuaCAqLzsgfTsKKwkJMzE0MDM3OUMxMjRCRUE3RjAwQUY0MEU0
IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzE0MDM3OTgxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rp
b25NYW5hZ2VyLm1tICovOyB9OworCQk0NEMzQ0ZFODE1NTZCRTVEMDAwMTM2MDkgLyogV2ViQ29y
ZVN5c3RlbUludGVyZmFjZUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDRDM0NGRTcxNTU2QkU1RDAwMDEzNjA5IC8qIFdlYkNvcmVTeXN0ZW1JbnRl
cmZhY2VJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlFNDUzOTA0OTBFQUZENjM3MDAzNjk1QzggLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZUlP
Uy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5
MDM4MEVBRkQ2MzcwMDM2OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tICovOyB9
OworCQlGRTBEODRFOTEwNDg0MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ4NEU4MTA0ODQzNDgwMDFBMTc5
RSAvKiBXZWJFdmVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUZFMEQ4NEVCMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ4NEVBMTA0ODQzNkUw
MDFBMTc5RSAvKiBXZWJFdmVudC5tbSAqLzsgfTsKKwkJRTQ1MzkwNEQwRUFGRDYzNzAwMzY5NUM4
IC8qIFdpZGdldElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0NTM5MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gKi87IH07CisJ
CTBGOTdBNjU4MTU1REE4MUUwMEZBREQ0QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JpT1MubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk3QTY1NzE1
NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yaU9TLm1tICovOyB9OworCQkz
NzI3REZENTE0MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcyN0RGRDQxNDJBQUU0NTAwRDQ0OUNC
IC8qIEZvbnRDYWNoZUlPUy5tbSAqLzsgfTsKKwkJQzU4MzYxQTkxNzQ0NTIzRjAwMTczNTExIC8q
IEZvbnRTZXJ2aWNlc0lPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzU4MzYxQTcxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5oICov
OyB9OworCQlDNTgzNjFBQTE3NDQ1MjNGMDAxNzM1MTEgLyogRm9udFNlcnZpY2VzSU9TLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4MzYxQTgxNzQ0
NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5tbSAqLzsgfTsKKwkJMzFBQjUwMDAxMjI4
NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dDNESU9TLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUFCNEZGRjEyMjg3OEEyMDAxQTdEQjAgLyog
R3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLzsgfTsKKwkJRkVEMTNENDAwQ0VBOTM5NDAwRDg5NDY2
IC8qIEljb25JT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRUQxM0QzRjBDRUE5Mzk0MDBEODk0NjYgLyogSWNvbklPUy5tbSAqLzsgfTsKKwkJMDdF
RDM1QTMxNkQ2RENFMjAwMjI0OEYzIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MzU3Qzc2MTZE
MkRGMEQwMEVEOTlFNyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLmggKi87IH07CisJ
CTA3RUQzNUEyMTZENkRDQzkwMDIyNDhGMyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczNTdD
NzcxNkQyREYwRDAwRUQ5OUU3IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW0gKi87
IH07CisJCTA3NDMwMEE2MEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NDMwMEE0
MEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MuaCAqLzsgfTsKKwkJMDc0
MzAwQTUwRjRCOEJDRjAwODA3NkNEIC8qIE1lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NDMwMEEzMEY0QjhCQ0Yw
MDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MubW0gKi87IH07CisJCTM3RTY1OTUwMTYz
QjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBT
aW1wbGVGb250RGF0YUlPUy5tbSAqLzsgfTsKKwkJQ0RDQTgyOTYxNjc5MTAwRjAwODc1NzE0IC8q
IFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQTgyOTQxNjc5MTAwRjAwODc1NzE0IC8qIFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uSU9TLm1tICovOyB9OworCQlBNTE2RThCNzEzNkUwNERCMDA3NkMzQzAg
LyogTG9jYWxpemVkRGF0ZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTE2RThCNDEzNkUwNERCMDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNh
Y2hlLmggKi87IH07CisJCUE1MTZFOEI4MTM2RTA0REIwMDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRl
Q2FjaGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NTE2RThCNTEzNkUwNERCMDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLm1tICovOyB9Owor
CQlDRDU1OTY5MTE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9TLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTU5NjhGMTQ3NUI2
NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuY3BwICovOyB9OworCQlDRDU1OTY5MjE0
NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9TLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDU1OTY5MDE0NzVCNjc4MDAxRDBCRDAgLyog
QXVkaW9GaWxlUmVhZGVySU9TLmggKi87IH07CisJCTQ0QzM2M0YwMEZBQTdCQjMwMDk3RjhDQyAv
KiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QzM2M0VFMEZBQTdCQjMwMDk3RjhDQyAvKiBSdW50aW1l
QXBwbGljYXRpb25DaGVja3NJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk0NEMzNjNGMTBGQUE3QkIzMDA5N0Y4Q0MgLyogUnVudGltZUFwcGxp
Y2F0aW9uQ2hlY2tzSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDRDMzYzRUYwRkFBN0JCMzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNo
ZWNrc0lPUy5tbSAqLzsgfTsKKwkJNDQzRjA0MjcwRTc1QzhGQjAwN0U1NDA3IC8qIE5ldHdvcmtT
dGF0ZU5vdGlmaWVySU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0M0YwNDI2MEU3NUM4RkIwMDdFNTQwNyAvKiBOZXR3b3JrU3RhdGVOb3RpZmll
cklPUy5jcHAgKi87IH07CisJCTQ0MkFGN0E5MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MkFGN0E3
MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NDJBRjdBQTEwMkNEREVBMDA4RkQ0RDMgLyogUXVp
Y2tMb29rLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDQyQUY3QTgxMDJDRERFQTAwOEZENEQzIC8qIFF1aWNrTG9vay5tbSAqLzsgfTsKKwkJN0U0MjhD
RTUxM0UzNDA3RjAwM0I2NjFDIC8qIFJlc291cmNlSGFuZGxlSU9TLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0MjhDRTQxM0UzNDA3RjAwM0I2NjFD
IC8qIFJlc291cmNlSGFuZGxlSU9TLm1tICovOyB9OworCQk0NEEyMERCOTBGODQxNjZDMDBCM0Ux
RkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyMERCODBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVS
TFJlc3BvbnNlSU9TLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNDQ0RDRFMjMwRjcwOEIyRTAwMzE1OEUwIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlP
Uy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NEQ0
RTIxMEY3MDhCMkUwMDMxNThFMCAvKiBXZWJDb3JlVVJMUmVzcG9uc2VJT1MubW0gKi87IH07CisJ
CTdFNDc0RTIwMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0NzRFMUQxMjQ5
NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi87IH07CisJCTdFNDc0
RTFGMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNDc0RTFDMTI0OTREQzkwMDIz
NTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3RTQ3NEUxRTEyNDk0REM5MDAyMzUzNjQgLyogU1FM
aXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3RTQ3NEUxQjEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJh
c2VUcmFja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQ0VGNDE4Q0UxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFRjQx
OENDMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgKi87IH07CiAJCUNF
RjQxOENGMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VGNDE4Q0QxMTc5Njc4QzAwOUQx
MTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDAwMEVCQTIxMUJEQUZENDAwQzQ3NzI2IC8qIEZyYW1lTG9h
ZGVyU3RhdGVNYWNoaW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEQwMDBFQkEwMTFCREFGRDQwMEM0NzcyNiAvKiBGcmFtZUxvYWRlclN0YXRlTWFj
aGluZS5jcHAgKi87IH07CkBAIC0xMjY2NCw2ICsxMjczMSw3NCBAQAogCQlDRUNBREZDQzE1Mzc3
OTFEMDBFMzcwNjggLyogVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRUNDRkMzQTE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNj
YXBlU2VxdWVuY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY29kZUVz
Y2FwZVNlcXVlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRURBMTJENjE1
MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFsdGVybmF0aXZlVGV4dENsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyOTAzNzE2NDE2QkExMUJDMDBGRUZERjAgLyogQ29udGVudEZpbHRl
cklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IENvbnRlbnRG
aWx0ZXJJT1MubW07IHBhdGggPSBpb3MvQ29udGVudEZpbHRlcklPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzFFQUY5N0MxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlv
bkNsaWVudElPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEZXZpY2VNb3Rp
b25DbGllbnRJT1MuaDsgcGF0aCA9IGlvcy9EZXZpY2VNb3Rpb25DbGllbnRJT1MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFFQUY5N0QxMjE0MzVBNDAwRTdDMUJGIC8qIERldmlj
ZU1vdGlvbkNsaWVudElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IERldmljZU1vdGlvbkNsaWVudElPUy5tbTsgcGF0aCA9IGlvcy9EZXZpY2VNb3Rpb25DbGll
bnRJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNDAzNzk5MTI0QkVBN0Yw
MEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oOyBwYXRoID0gaW9z
L0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxNDAzNzlBMTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElP
Uy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IERldmljZU9yaWVu
dGF0aW9uQ2xpZW50SU9TLm1tOyBwYXRoID0gaW9zL0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9T
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxRjY4RDRBRDE0QkI5RENBMDA3QjVD
NjIgLyogTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tOyBwYXRoID0gaW9z
L01lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTQ1MzkwMTgwRUFGQ0FDQTAwMzY5NUM4IC8qIE1JTUVUeXBlUmVnaXN0cnlJT1MubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNSU1FVHlwZVJlZ2lzdHJ5SU9T
Lm1tOyBwYXRoID0gaW9zL01JTUVUeXBlUmVnaXN0cnlJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTI2NjAxRUJEMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFj
dG9yeUlPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybUV2ZW50
RmFjdG9yeUlPUy5oOyBwYXRoID0gaW9zL1BsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2NjAxRUJFMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0
Zm9ybUV2ZW50RmFjdG9yeUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tOyBwYXRoID0gaW9zL1BsYXRmb3JtRXZl
bnRGYWN0b3J5SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDUzOTAzMjBF
QUZENjM3MDAzNjk1QzggLyogUGxhdGZvcm1TY3JlZW5JT1MubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbGF0Zm9ybVNjcmVlbklPUy5tbTsgcGF0aCA9IGlvcy9Q
bGF0Zm9ybVNjcmVlbklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUFFMzc1
NUQxNzQyOUJDQzAwNjIwMEMyIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVySU9TLm1tOyBwYXRoID0gaW9zL1BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMTc3NDdFMTM3OEI3NzEwMDlEQTc2QSAv
KiBTY3JvbGxBbmltYXRvcklPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBT
Y3JvbGxBbmltYXRvcklPUy5oOyBwYXRoID0gaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMTc3NDdGMTM3OEI3NzIwMDlEQTc2QSAvKiBTY3Jv
bGxBbmltYXRvcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IFNjcm9sbEFuaW1hdG9ySU9TLm1tOyBwYXRoID0gaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEM5OTE4NTBGM0QxRUJFMDA1ODY2NzAgLyog
U2Nyb2xsYmFyVGhlbWVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2Ny
b2xsYmFyVGhlbWVJT1MuaDsgcGF0aCA9IGlvcy9TY3JvbGxiYXJUaGVtZUlPUy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0NEM5OTE4MTBGM0QxRTBEMDA1ODY2NzAgLyogU2Nyb2xs
YmFyVGhlbWVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBT
Y3JvbGxiYXJUaGVtZUlPUy5tbTsgcGF0aCA9IGlvcy9TY3JvbGxiYXJUaGVtZUlPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ1MzkwMzQwRUFGRDYzNzAwMzY5NUM4IC8qIFNj
cm9sbFZpZXdJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBT
Y3JvbGxWaWV3SU9TLm1tOyBwYXRoID0gaW9zL1Njcm9sbFZpZXdJT1MubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJFQTgwN0M2MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25S
ZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNlbGVjdGlvblJl
Y3QuY3BwOyBwYXRoID0gaW9zL1NlbGVjdGlvblJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCRUE4MDdDNzBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVjdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTZWxlY3Rpb25SZWN0Lmg7IHBhdGggPSBp
b3MvU2VsZWN0aW9uUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDUzOTAz
NjBFQUZENjM3MDAzNjk1QzggLyogU291bmRJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBTb3VuZElPUy5tbTsgcGF0aCA9IGlvcy9Tb3VuZElPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDQ3NjUzMUExMzMxNzA5OTAwMDZCNzg5IC8qIFNT
TEtleUdlbmVyYXRvcklPUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBTU0xLZXlHZW5lcmF0b3JJT1MuY3BwOyBwYXRoID0gaW9zL1NTTEtleUdlbmVyYXRvcklPUy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NTM5MEFEMEVBRkY0QjUwMDM2OTVD
OCAvKiBTeXN0ZW1NZW1vcnlJT1MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gU3lzdGVtTWVtb3J5SU9TLmNwcDsgcGF0aCA9IGlvcy9TeXN0ZW1NZW1vcnlJT1MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAg
LyogVGhlbWVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGhlbWVJT1Mu
aDsgcGF0aCA9IGlvcy9UaGVtZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
NEM5OTE5RTBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUaGVtZUlPUy5tbTsgcGF0aCA9IGlvcy9UaGVtZUlPUy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRDM0IxRjkwRjBFNDE2MTAwOTY5M0Y2
IC8qIFRpbGVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUaWxlQ2Fj
aGUuaDsgcGF0aCA9IGlvcy9UaWxlQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTRDM0IxRkIwRjBFNDE3MDAwOTY5M0Y2IC8qIFRpbGVDYWNoZS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFRpbGVDYWNoZS5tbTsgcGF0aCA9IGlvcy9UaWxl
Q2FjaGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QjY1QTU3MTMyRkE4RTcw
MDcwRTdCRSAvKiBUaWxlR3JpZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBU
aWxlR3JpZC5oOyBwYXRoID0gaW9zL1RpbGVHcmlkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUU0QjY1QTU5MTMyRkFBRjkwMDcwRTdCRSAvKiBUaWxlR3JpZC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFRpbGVHcmlkLm1tOyBwYXRoID0gaW9zL1Rp
bGVHcmlkLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDI0QTM5RDEzMzBERjAx
MDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFRpbGVHcmlkVGlsZS5oOyBwYXRoID0gaW9zL1RpbGVHcmlkVGlsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFNDI0QTM5RjEzMzBERjFFMDBDRjZEQzkgLyogVGlsZUdyaWRU
aWxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gVGlsZUdyaWRU
aWxlLm1tOyBwYXRoID0gaW9zL1RpbGVHcmlkVGlsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTRCNjVBNUIxMzJGQUNCMDAwNzBFN0JFIC8qIFRpbGVMYXllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUaWxlTGF5ZXIuaDsgcGF0aCA9IGlvcy9UaWxlTGF5
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRCNjVBNUQxMzJGQURCNjAwNzBF
N0JFIC8qIFRpbGVMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IFRpbGVMYXllci5tbTsgcGF0aCA9IGlvcy9UaWxlTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUU0RTM5QUZBMTMzMEVGQTgwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29s
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRpbGVMYXllclBvb2wuaDsgcGF0
aCA9IGlvcy9UaWxlTGF5ZXJQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0
RTM5QUZDMTMzMEVGQzUwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29sLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gVGlsZUxheWVyUG9vbC5tbTsgcGF0aCA9IGlvcy9U
aWxlTGF5ZXJQb29sLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTQwMzc5NzEy
NEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViQ29yZU1vdGlvbk1hbmFnZXIuaDsgcGF0aCA9IGlvcy9XZWJD
b3JlTW90aW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTQwMzc5
ODEyNEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJDb3JlTW90aW9uTWFuYWdlci5tbTsgcGF0
aCA9IGlvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDRDM0NGRTcxNTU2QkU1RDAwMDEzNjA5IC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJ
T1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQ29yZVN5c3RlbUludGVy
ZmFjZUlPUy5oOyBwYXRoID0gaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ1MzkwMzgwRUFGRDYzNzAwMzY5NUM4IC8qIFdlYkNv
cmVTeXN0ZW1JbnRlcmZhY2VJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tOyBwYXRoID0gaW9zL1dlYkNvcmVT
eXN0ZW1JbnRlcmZhY2VJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMEQ4
NEU4MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJFdmVudC5oOyBwYXRoID0gaW9zL1dlYkV2ZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYkV2ZW50Lm1tOyBw
YXRoID0gaW9zL1dlYkV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDUz
OTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gV2lkZ2V0SU9TLm1tOyBwYXRoID0gaW9zL1dpZGdldElPUy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5N0E2NTcxNTVEQTgxRTAwRkFERDRD
IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcmlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IERpc3BsYXlSZWZyZXNoTW9uaXRvcmlPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzcyN0RGRDQxNDJBQUU0NTAwRDQ0OUNCIC8qIEZvbnRDYWNoZUlP
Uy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZvbnRDYWNoZUlP
Uy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU4MzYxQTcxNzQ0NTIzRjAwMTcz
NTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGb250U2VydmljZXNJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU4MzYx
QTgxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZvbnRTZXJ2aWNlc0lPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzFBQjRGRkYxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29u
dGV4dDNESU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29u
dGV4dDNESU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFRDEzRDNGMENFQTkz
OTQwMEQ4OTQ2NiAvKiBJY29uSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gSWNvbklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDczNTdD
NzYxNkQyREYwRDAwRUQ5OUU3IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklP
Uy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzM1N0M3NzE2RDJERjBEMDBFRDk5
RTcgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3NDMwMEE0MEY0QjhCQ0YwMDgwNzZDRCAvKiBN
ZWRpYVBsYXllclByaXZhdGVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWVkaWFQbGF5ZXJQcml2YXRlSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3
NDMwMEEzMEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZWRpYVBsYXllclByaXZhdGVJT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3
NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDRUVDNjAzNDE4N0REOTYyMDAzRTQzQkIgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25J
T1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25JT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDQTgyOTQxNjc5MTAw
RjAwODc1NzE0IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1MTZFOEI0MTM2RTA0REIwMDc2QzNDMCAv
KiBMb2NhbGl6ZWREYXRlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TG9jYWxpemVkRGF0ZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1MTZF
OEI1MTM2RTA0REIwMDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbGl6ZWREYXRlQ2FjaGUubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNENTU5NjhGMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRp
b0ZpbGVSZWFkZXJJT1MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QXVkaW9GaWxlUmVhZGVySU9TLmNwcDsgcGF0aCA9IGlvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDU1OTY5MDE0NzVCNjc4MDAxRDBCRDAg
LyogQXVkaW9GaWxlUmVhZGVySU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEF1ZGlvRmlsZVJlYWRlcklPUy5oOyBwYXRoID0gaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEMzNjNFRTBGQUE3QkIzMDA5N0Y4Q0MgLyog
UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0NEMzNjNFRjBGQUE3QkIzMDA5N0Y4Q0MgLyogUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0NDNGMDQyNjBFNzVDOEZCMDA3RTU0MDcgLyogTmV0d29ya1N0YXRlTm90aWZpZXJJT1MuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya1N0YXRlTm90aWZp
ZXJJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDJBRjdBNzEwMkNEREVB
MDA4RkQ0RDMgLyogUXVpY2tMb29rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFF1aWNrTG9vay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDJBRjdBODEwMkNE
REVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gUXVpY2tMb29rLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
RTQyOENFNDEzRTM0MDdGMDAzQjY2MUMgLyogUmVzb3VyY2VIYW5kbGVJT1MubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXNvdXJjZUhhbmRsZUlPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDRBMjBEQjgwRjg0MTY2QzAwQjNFMUZFIC8qIFdl
YkNvcmVVUkxSZXNwb25zZUlPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJDb3JlVVJMUmVzcG9uc2VJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDQ0
RDRFMjEwRjcwOEIyRTAwMzE1OEUwIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZUlPUy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0U0NzRFMUQxMjQ5NERDOTAwMjM1MzY0
IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3RTQ3NEUxQzEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFj
a2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTGl0ZURhdGFiYXNlVHJh
Y2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3RTQ3NEUxQjEyNDk0REM5MDAy
MzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRUY0MThDQzExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRB
cmd1bWVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3Bv
cnRBcmd1bWVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUY0MThDRDEx
Nzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmlld3BvcnRBcmd1bWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRDAwMEVCQTAxMUJEQUZENDAwQzQ3NzI2IC8qIEZyYW1lTG9hZGVyU3RhdGVNYWNo
aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lTG9hZGVy
U3RhdGVNYWNoaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MzE0LDYg
KzE0NDQ5LDcgQEAKIAkJMUEyRTZFNTYwQ0M1NTFFMDAwNEEyMDYyIC8qIHNxbCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0U0NzRFMTkxMjQ5NERBOTAw
MjM1MzY0IC8qIGlvcyAqLywKIAkJCQkxQTJFNkU3ODBDQzU1NkQ1MDA0QTIwNjIgLyogU1FMaXRl
QXV0aG9yaXplci5jcHAgKi8sCiAJCQkJMUEyMjQ2NDMwQ0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0
ZURhdGFiYXNlLmNwcCAqLywKIAkJCQkxQTIyNDY0NDBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRl
RGF0YWJhc2UuaCAqLywKQEAgLTE1NTc3LDYgKzE1NzEzLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjJGMzRGRTcwRTgyRjgxNzAwRjYyN0NEIC8qIGNmICov
LAorCQkJCTQ0OTdENThDMEVCQTg1NEYwMEExMDU1MiAvKiBpb3MgKi8sCiAJCQkJNjU2Qjg0RTcw
QUVBMURBRTAwQTA5NUI0IC8qIG1hYyAqLywKIAkJCQk5MzRGNzEzNzBENUE2RUZGMDAwMThENjkg
LyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmNwcCAqLywKIAkJCQk5MzRGNzEzOTBENUE2
RjEwMDAwMThENjkgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmggKi8sCkBAIC0xNzU3
MSwxNyArMTc3MDgsNTkgQEAKIAkJQTU5RTNDMUIxMTU4MEYzNDAwNzI5MjhFIC8qIGlvcyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMjkwMzcxNjQxNkJB
MTFCQzAwRkVGREYwIC8qIENvbnRlbnRGaWx0ZXJJT1MubW0gKi8sCiAJCQkJMjY1NTQxNEIxNDg5
QUEyQjAwMERGQzVEIC8qIEN1cnNvcklPUy5jcHAgKi8sCisJCQkJMzFFQUY5N0MxMjE0MzVBNDAw
RTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElPUy5oICovLAorCQkJCTMxRUFGOTdEMTIxNDM1
QTQwMEU3QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGllbnRJT1MubW0gKi8sCisJCQkJMzE0MDM3OTkx
MjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmggKi8sCisJCQkJ
MzE0MDM3OUExMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1t
ICovLAogCQkJCTI2RjQwRDQ5MTQ5MDRBNjMwMENBNjdDNCAvKiBFdmVudExvb3BJT1MubW0gKi8s
CiAJCQkJMjZDMTdBM0MxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCAqLywKIAkJ
CQkyNkMxN0EzRDE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSAqLywKIAkJCQky
NjU1NDEzNzE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5oICovLAogCQkJCTI2
NTU0MTM4MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudElPUy5tbSAqLywKKwkJCQkxRjY4RDRB
RDE0QkI5RENBMDA3QjVDNjIgLyogTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tICovLAorCQkJ
CUU0NTM5MDE4MEVBRkNBQ0EwMDM2OTVDOCAvKiBNSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tICovLAog
CQkJCUU0NTM5MDE5MEVBRkNBQ0EwMDM2OTVDOCAvKiBQYXN0ZWJvYXJkSU9TLm1tICovLAorCQkJ
CTI2NjAxRUJEMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oICov
LAorCQkJCTI2NjAxRUJFMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlP
Uy5tbSAqLywKIAkJCQlDNTI3OEIwQjE3RjIxMkVBMDAzQTI5OTggLyogUGxhdGZvcm1QYXN0ZWJv
YXJkSU9TLm1tICovLAorCQkJCUU0NTM5MDMyMEVBRkQ2MzcwMDM2OTVDOCAvKiBQbGF0Zm9ybVNj
cmVlbklPUy5tbSAqLywKKwkJCQlBQUUzNzU1RDE3NDI5QkNDMDA2MjAwQzIgLyogUGxhdGZvcm1T
cGVlY2hTeW50aGVzaXplcklPUy5tbSAqLywKKwkJCQk0NEMzNjNFRTBGQUE3QkIzMDA5N0Y4Q0Mg
LyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmggKi8sCisJCQkJNDRDMzYzRUYwRkFBN0JC
MzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5tbSAqLywKKwkJCQkwRjE3
NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCAqLywKKwkJCQkwRjE3
NzQ3RjEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MubW0gKi8sCisJCQkJNDRD
OTkxODUwRjNEMUVCRTAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLmggKi8sCisJCQkJNDRD
OTkxODEwRjNEMUUwRDAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLm1tICovLAorCQkJCUU0
NTM5MDM0MEVBRkQ2MzcwMDM2OTVDOCAvKiBTY3JvbGxWaWV3SU9TLm1tICovLAorCQkJCUJFQTgw
N0M2MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmNwcCAqLywKKwkJCQlCRUE4MDdD
NzBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVjdC5oICovLAogCQkJCUU0NTM5MDM1MEVB
RkQ2MzcwMDM2OTVDOCAvKiBTaGFyZWRUaW1lcklPUy5tbSAqLywKKwkJCQlFNDUzOTAzNjBFQUZE
NjM3MDAzNjk1QzggLyogU291bmRJT1MubW0gKi8sCisJCQkJNDQ3NjUzMUExMzMxNzA5OTAwMDZC
Nzg5IC8qIFNTTEtleUdlbmVyYXRvcklPUy5jcHAgKi8sCisJCQkJRTQ1MzkwQUQwRUFGRjRCNTAw
MzY5NUM4IC8qIFN5c3RlbU1lbW9yeUlPUy5jcHAgKi8sCisJCQkJNDRDOTkxOUQwRjNEMjEwRTAw
NTg2NjcwIC8qIFRoZW1lSU9TLmggKi8sCisJCQkJNDRDOTkxOUUwRjNEMjEwRTAwNTg2NjcwIC8q
IFRoZW1lSU9TLm1tICovLAorCQkJCUU0QzNCMUY5MEYwRTQxNjEwMDk2OTNGNiAvKiBUaWxlQ2Fj
aGUuaCAqLywKKwkJCQlFNEMzQjFGQjBGMEU0MTcwMDA5NjkzRjYgLyogVGlsZUNhY2hlLm1tICov
LAorCQkJCUU0QjY1QTU3MTMyRkE4RTcwMDcwRTdCRSAvKiBUaWxlR3JpZC5oICovLAorCQkJCUU0
QjY1QTU5MTMyRkFBRjkwMDcwRTdCRSAvKiBUaWxlR3JpZC5tbSAqLywKKwkJCQlFNDI0QTM5RDEz
MzBERjAxMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLmggKi8sCisJCQkJRTQyNEEzOUYxMzMwREYx
RTAwQ0Y2REM5IC8qIFRpbGVHcmlkVGlsZS5tbSAqLywKKwkJCQlFNEI2NUE1QjEzMkZBQ0IwMDA3
MEU3QkUgLyogVGlsZUxheWVyLmggKi8sCisJCQkJRTRCNjVBNUQxMzJGQURCNjAwNzBFN0JFIC8q
IFRpbGVMYXllci5tbSAqLywKKwkJCQlFNEUzOUFGQTEzMzBFRkE4MDAzQUIyNzQgLyogVGlsZUxh
eWVyUG9vbC5oICovLAorCQkJCUU0RTM5QUZDMTMzMEVGQzUwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQ
b29sLm1tICovLAorCQkJCTMxNDAzNzk3MTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9u
TWFuYWdlci5oICovLAorCQkJCTMxNDAzNzk4MTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90
aW9uTWFuYWdlci5tbSAqLywKKwkJCQk0NEMzQ0ZFNzE1NTZCRTVEMDAwMTM2MDkgLyogV2ViQ29y
ZVN5c3RlbUludGVyZmFjZUlPUy5oICovLAorCQkJCUU0NTM5MDM4MEVBRkQ2MzcwMDM2OTVDOCAv
KiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tICovLAorCQkJCUZFMEQ4NEU4MTA0ODQzNDgw
MDFBMTc5RSAvKiBXZWJFdmVudC5oICovLAorCQkJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAv
KiBXZWJFdmVudC5tbSAqLywKIAkJCQlBNTAyQzVERDEzMDQ5QjM1MDBGQzdENTMgLyogV2ViU2Fm
ZUdDQWN0aXZpdHlDYWxsYmFja0lPUy5oICovLAogCQkJCUMyQzRDQjFEMTYxQTEzMTIwMEQyMTRE
QSAvKiBXZWJTYWZlSW5jcmVtZW50YWxTd2VlcGVySU9TLmggKi8sCisJCQkJRTQ1MzkwM0MwRUFG
RDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gaW9zOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE5NDA2LDYgKzE5NTg1LDcgQEAKIAkJCQk5
MzMyQUIzQjE2NTE1RDc3MDBEODI3RUMgLyogY3B1ICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAw
MDdGMjQ4MSAvKiBmaWx0ZXJzICovLAogCQkJCTQ5ODc3MEMxMTI0MkM1MEQwMDIyMjZCQSAvKiBn
cHUgKi8sCisJCQkJNDQxQUYwQTcwRUJBN0JCRjAwNDRFRDRCIC8qIGlvcyAqLywKIAkJCQlCMjc1
MzU0OTBCMDUzODE0MDAyQ0U2NEYgLyogbWFjICovLAogCQkJCUZCQzIyMEREMTIzN0ZCRUIwMEJD
Rjc4OCAvKiBvcGVuZ2wgKi8sCiAJCQkJRjRFQUY0QUIxMEM3NDI2ODAwOTEwMEQzIC8qIG9wZW50
eXBlICovLApAQCAtMTk1ODAsNiArMTk3NjAsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlCMkIyNjQ1OTBEMDBBNzdFMDAwQUNDMUQgLyogY2YgKi8sCisJCQkJ
QTUxNkU4QjIxMzZFMDRDMDAwNzZDM0MwIC8qIGlvcyAqLywKIAkJCQlCMkMzRDlGOTBEMDA2QzFE
MDBFRjZGMjYgLyogbWFjICovLAogCQkJCTM3QzYxRjAwMTIwOTVDODcwMDdBM0M2NyAvKiBBdG9t
aWNTdHJpbmdLZXllZE1SVUNhY2hlLmggKi8sCiAJCQkJQjJDM0Q5RjIwRDAwNkMxRDAwRUY2RjI2
IC8qIEJpZGlDb250ZXh0LmNwcCAqLywKQEAgLTIwNDg0LDYgKzIwNjY1LDggQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCUNEMEVFRTBCMTQ3NDNFMzUwMDNFQUZBMiAvKiBBdWRpb0Rlc3RpbmF0aW9u
SU9TLmNwcCAqLywKIAkJCQlDRDBFRUUwQTE0NzQzRTM0MDAzRUFGQTIgLyogQXVkaW9EZXN0aW5h
dGlvbklPUy5oICovLAorCQkJCUNENTU5NjhGMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVS
ZWFkZXJJT1MuY3BwICovLAorCQkJCUNENTU5NjkwMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0Zp
bGVSZWFkZXJJT1MuaCAqLywKIAkJCQlDREE3OTgyNTE3MEEyNzkwMDBENDVDNTUgLyogQXVkaW9T
ZXNzaW9uSU9TLm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSBpb3M7CkBAIC0yMDU5OSw2ICsyMDc4
Miw1OSBAQAogCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07
CisJCTQ0MUFGMEE3MEVCQTdCQkYwMDQ0RUQ0QiAvKiBpb3MgKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBGOTdBNjU3MTU1REE4MUUwMEZBREQ0QyAvKiBE
aXNwbGF5UmVmcmVzaE1vbml0b3JpT1MubW0gKi8sCisJCQkJMzcyN0RGRDQxNDJBQUU0NTAwRDQ0
OUNCIC8qIEZvbnRDYWNoZUlPUy5tbSAqLywKKwkJCQlDNTgzNjFBNzE3NDQ1MjNGMDAxNzM1MTEg
LyogRm9udFNlcnZpY2VzSU9TLmggKi8sCisJCQkJQzU4MzYxQTgxNzQ0NTIzRjAwMTczNTExIC8q
IEZvbnRTZXJ2aWNlc0lPUy5tbSAqLywKKwkJCQkzMUFCNEZGRjEyMjg3OEEyMDAxQTdEQjAgLyog
R3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLywKKwkJCQlGRUQxM0QzRjBDRUE5Mzk0MDBEODk0NjYg
LyogSWNvbklPUy5tbSAqLywKKwkJCQkwNzM1N0M3NjE2RDJERjBEMDBFRDk5RTcgLyogSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5oICovLAorCQkJCTA3MzU3Qzc3MTZEMkRGMEQwMEVEOTlF
NyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLm1tICovLAorCQkJCTA3NDMwMEE0MEY0
QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MuaCAqLywKKwkJCQkwNzQzMDBB
MzBGNEI4QkNGMDA4MDc2Q0QgLyogTWVkaWFQbGF5ZXJQcml2YXRlSU9TLm1tICovLAorCQkJCTM3
RTY1OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSAqLywKKwkJCQlD
RUVDNjAzNDE4N0REOTYyMDAzRTQzQkIgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaCAq
LywKKwkJCQlDRENBODI5NDE2NzkxMDBGMDA4NzU3MTQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25JT1MubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IGlvczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CisJCUE1MTZFOEIyMTM2RTA0QzAwMDc2QzNDMCAvKiBpb3MgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUE1MTZFOEI0MTM2RTA0REIw
MDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUuaCAqLywKKwkJCQlBNTE2RThCNTEzNkUwNERC
MDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBp
b3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk0NDk3RDU4QzBFQkE4NTRG
MDBBMTA1NTIgLyogaW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQk0NDNGMDQyNjBFNzVDOEZCMDA3RTU0MDcgLyogTmV0d29ya1N0YXRlTm90aWZpZXJJ
T1MuY3BwICovLAorCQkJCTQ0MkFGN0E3MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2suaCAq
LywKKwkJCQk0NDJBRjdBODEwMkNEREVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLm1tICovLAorCQkJ
CTdFNDI4Q0U0MTNFMzQwN0YwMDNCNjYxQyAvKiBSZXNvdXJjZUhhbmRsZUlPUy5tbSAqLywKKwkJ
CQk0NEEyMERCODBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggKi8s
CisJCQkJNDQ0RDRFMjEwRjcwOEIyRTAwMzE1OEUwIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5t
bSAqLywKKwkJCSk7CisJCQlwYXRoID0gaW9zOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKKwkJN0U0NzRFMTkxMjQ5NERBOTAwMjM1MzY0IC8qIGlvcyAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJN0U0NzRFMUQxMjQ5NERDOTAwMjM1MzY0
IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8sCisJCQkJN0U0NzRFMUMxMjQ5NERDOTAw
MjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5oICovLAorCQkJCTdFNDc0RTFCMTI0OTRE
QzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLywKKwkJCSk7CisJ
CQluYW1lID0gaW9zOworCQkJcGF0aCA9IHNxbC9pb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OwogCQlERjlBRkQ2RjEzRkMzMUIwMDAxNUZFQjcgLyogb2JqYyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMjI4Myw2ICsyMjUxOSw3IEBA
CiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAwRDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UwOEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFN0IyREIzMTU4NkFCQUQw
MDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZFMEQ4NEU5MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkQzMTYwM0UxMkIwMjY3NjAwQzFBMzU5IC8qIEFuYWx5c2VyTm9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0RFM0E4NTgxN0Y2MDIwNDAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRl
QVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDkwNzA3RTcxMjE5QzA0MzAwRDkwRTUxIC8q
IEFOR0xFV2ViS2l0QnJpZGdlLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNDI0LDYgKzIyNjYxLDcg
QEAKIAkJCQlCQ0IxNkMxQzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkSW1hZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxOUZCRDVGMTVEMkY0NjQwMDk2NDBBNiAvKiBDYWNoZWRJbWFnZUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwMTg0NjkwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hl
ZFBhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0MjRBMzlFMTMzMERGMDEwMENGNkRDOSAvKiBU
aWxlR3JpZFRpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUQwRURBNzc1MTQzRTMwM0MwMDI4RTM4
MyAvKiBDYWNoZWRSYXdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCNTMzNDkxNzE3
REVFMzAwRjIwNUY5IC8qIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0IxNkMyMDA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2UuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjI2MTcsNiArMjI4NTUsNyBAQAogCQkJCTA3OEUwOTE0MTdEMTREMUMwMDQy
MEFBMSAvKiBNZWRpYUNvbnN0cmFpbnRzSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZD
RTkwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTQ5QkQ5RkExMzFGRDJFRDAwM0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTRCNjVBNTgxMzJGQThFNzAwNzBFN0JFIC8qIFRpbGVHcmlkLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5MDAxRTlBQkMgLyogQ3Vyc29yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzIyNzJBMjBFODJFODdDMDBFN0Y5NzUgLyogQ3Vyc29yRGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODY4MTYwRDYxODc2NkExMzAwMjFFNzlEIC8qIFVzZXJBY3Rpdml0eS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yMzA1Nyw2ICsyMzI5Niw3IEBACiAJCQkJODU1MjZDRDIwQUIwQjdE
OTAwMDMwMkVBIC8qIERPTVRyZWVXYWxrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MEI0MUMz
MEFEOUU3RTcwMEE2RUQ0RiAvKiBET01UcmVlV2Fsa2VySW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg1QzdGNDkxMEFBRjc5REMwMDQwMTRERCAvKiBET01VSUV2ZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk0NEM5OTE5RjBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg1OTg5REQwMEFDQzhCQkQwMEEwQkM1MSAvKiBET01VSUV2ZW50SW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFMzdERkRCMTJEQkFGQjgwMEE2QjIzMyAvKiBET01V
UkwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE1Qzc3MEE2MTAwRDQxQ0QwMDVCQTI2NyAvKiBET01W
YWxpZGl0eVN0YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTIzMjI1LDYgKzIzNDY1LDcgQEAKIAkJ
CQk4NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwOEM5MjUxQTBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMTMxM0Y2NjE0NDNCMzVGMDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTQ0QzNDRkU4MTU1NkJFNUQwMDAxMzYwOSAvKiBXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlSU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI2RTE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI3
MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzcyQzAwRDkxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAq
LywKQEAgLTIzMzEyLDYgKzIzNTUzLDcgQEAKIAkJCQkwODczQjg2QjEzNjA2NEVBMDBBNTIyQzIg
LyogR2x5cGhQYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE2RTBEMDA2Q0Q2MDBFRjZG
MjYgLyogR2x5cGhQYWdlVHJlZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTNDNUY1MERB
NTZCOTIwMDIxRUI1RCAvKiBHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0U0NzRFMUUx
MjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjIyMjc5NjQwRDAwQkYyMjAwNzFCNzgyIC8qIEdyYWRpZW50QXR0cmlidXRl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBo
aWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3
IC8qIEdyYXBoaWNzQ29udGV4dDNELmggaW4gSGVhZGVycyAqLywKQEAgLTIzNDI4LDYgKzIzNjcw
LDcgQEAKIAkJCQlBODEzNjlEQzA5NzM3NEY2MDBENzQ0NjMgLyogSFRNTE9wdGlvbkVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTM2OURBMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MT3B0
aW9uc0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRBRDAxMDA5MTI3RTY0MkEwMDE1
MDM1RiAvKiBIVE1MT3V0cHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDRDMzYzRjAw
RkFBN0JCMzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTFENzE5RjgxODExMDZFMDAwMTZEQzUxIC8qIEluZGV4ZWREQi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThFQTdDQjUwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxQYXJhZ3JhcGhF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcxRDQ1ODBBMTI3Q0JDMDBCMTJBNjggLyog
SFRNTFBhcmFtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzUxNSw2ICsyMzc1OCw3IEBA
CiAJCQkJQkM3RjQ0QTgwQjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJENUE1OTMxMTUyNTI1RDAwMDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTI5MUU0QjEzNDE3MkM4MDBFNzUzREUgLyogSW1hZ2VS
ZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEMzQjFGQTBGMEU0MTYxMDA5Njkz
RjYgLyogVGlsZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjc1MzU3MTBCMDUzODE0MDAy
Q0U2NEYgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCMzQ4MDk0MEVFRjUw
RDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZGRTEx
ODBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLApA
QCAtMjM1ODYsNiArMjM4MzAsNyBAQAogCQkJCTdBRjExQTVBMTJFNzI3NDkwMDYxRjIzQyAvKiBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgyQUIxNzc0MTI1Qzgy
NjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
Mjg4OUI0RDEzQzYyMzkyMDA5QTYxNTYgLyogSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzMUVBRjk3RTEyMTQzNUE0MDBFN0MxQkYgLyogRGV2aWNlTW90aW9u
Q2xpZW50SU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTQxMzNBODEwMkUwMEU4MDAwNzVEMDAg
LyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc4REEyMEYx
NTIwRUJBMzAwNjE0MUMxIC8qIEluc3BlY3RvcldlYlR5cGVCdWlsZGVycy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRjM4MTBDMUMxMzY1QTQ5NjAwRUQ2RTMzIC8qIEluc3BlY3RvcldvcmtlckFnZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTIzNjQ1LDYgKzIzODkwLDcgQEAKIAkJCQk5NzVDQTJBMjEz
MDM2NzlEMDBFOTlBRDkgLyogSlNDcnlwdG8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDZDMUZC
MEMwRERDOEYwMDIwQ0ZDMyAvKiBKU0NTU0NoYXJzZXRSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MDlFQkRDMzE2QjdGM0E2MDBDQkEzRkMgLyogSlNDU1NGb250RmFjZUxvYWRFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJN0U0NzRFMUYxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFi
YXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0NkMxRkQwQzBEREM4RjAwMjBDRkMz
IC8qIEpTQ1NTRm9udEZhY2VSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQ2QzFGRjBDMERE
QzhGMDAyMENGQzMgLyogSlNDU1NJbXBvcnRSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQ2
QzIwMTBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NNZWRpYVJ1bGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMjM2NzEsNiArMjM5MTcsNyBAQAogCQkJCTMxRkIxQTY2MTIwQTVEM0YwMERDMDJBMCAvKiBK
U0RldmljZU1vdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1OUE4NjAwODExOURBRkEx
MDBERUYxRUYgLyogSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0U0Mzg5QzE0MEIxQkE4MDA1RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAq
LywKKwkJCQk0NEM5OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCBp
biBIZWFkZXJzICovLAogCQkJCUU0QUU3QzFBMTdEMjMyMzUwMDA5RkIzMSAvKiBFbGVtZW50QW5j
ZXN0b3JJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE0NkZFNzUxODQ0MjM3MDAwMUE5
MzdDIC8qIEpTT0VTVGV4dHVyZUZsb2F0TGluZWFyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTlE
REM4MzA5RTE5OEJBMDAxQkYzQzYgLyogSlNEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MzY5MSw2ICsyMzkzOCw3IEBACiAJCQkJRTE5QUMzRjMxODI0REM3OTAwMzQ5NDI2IC8qIENyeXB0
b0FsZ29yaXRobVNIQTM4NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkI5MTM5MkExNkFFNEZDMDAw
MUZFNjgyIC8qIEpTRE9NUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlEMjQ3RkYwRDc1N0U2
OTAwRkRGOTU5IC8qIEpTRE9NUGx1Z2luLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTQwMzc5QjEy
NEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE5RDI0ODAxMEQ3NTdFNjkwMEZERjk1OSAvKiBKU0RPTVBsdWdpbkFycmF5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTk3MjcxNjE4MjA1NDlFMDA1OTJENTEgLyogQ3J5cHRvS2V5VHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1QTg2QjYwQzMzNjdFODAwRUVBNjQ5IC8qIEpTRE9NU2Vs
ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTIzNzE5LDYgKzIzOTY3LDcgQEAKIAkJCQkzMzE0
QUNFQzEwODkyMDg2MDAwRjBFNTYgLyogSlNFeGNlcHRpb25CYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk2RUJGMEU3NzEyQTk4Njg4MDBEQjE3MEEgLyogSlNFWFREcmF3QnVmZmVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzcyODY5ODQxNEZEOUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEUzOUFGQjEzMzBFRkE4MDAz
QUIyNzQgLyogVGlsZUxheWVyUG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMEYwMTUwRTBB
MTg5NTAwRkQwNEUzIC8qIEpTRmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkUzQkMwQ0IxMTdE
M0UwODAwQjk0MDlBIC8qIEpTRmlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTg3ODVG
MTEyMkUxRTg3MDAzQUFCREEgLyogSlNGaWxlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKQEAg
LTIzNzMzLDYgKzIzOTgyLDcgQEAKIAkJCQlGRTgwREE2NjBFOUM0NzAzMDAwRDZGNzUgLyogSlNH
ZW9wb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc5NjlEQUMxN0QxNDE1MTAwN0ZGODQy
IC8qIEpTUlRDRGF0YUNoYW5uZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0ODJCNzUyMTE5OENC
NkIwMEJGQjAwNSAvKiBKU0hhc2hDaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkVB
ODA3QzkwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDOTREMTRGMEMyNzVDNjgwMDZCQzYxNyAvKiBKU0hpc3RvcnkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDOTdFNDEzMTA5MTU0RkEwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTRBMkRGMDBBMUI4NTJBMDBDODA3RjggLyogSlNIVE1MQW5j
aG9yRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzc5MSw2ICsyNDA0MSw3IEBACiAJCQkJ
MUE4NUIxRUIwQTFCMjQwNTAwRDhDODdDIC8qIEpTSFRNTE9MaXN0RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTgwRTdFOUIwQTFBODNFMzAwN0ZCOEM1IC8qIEpTSFRNTE9wdEdyb3VwRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTdFOTkwQTFBODNFMzAwN0ZCOEM1IC8qIEpT
SFRNTE9wdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUM1ODM2MUE5MTc0NDUyM0Yw
MDE3MzUxMSAvKiBGb250U2VydmljZXNJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0OEEyOUJG
MEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNEFEMDE3M0QxMjdFODI4NjAwMTUwMzVGIC8qIEpTSFRNTE91dHB1dEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTJBQkE3MEExQ0U5MDUwMEI0MkIyNSAvKiBKU0hUTUxQ
YXJhZ3JhcGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzODQxLDYgKzI0MDkyLDcgQEAK
IAkJCQk5MzVGNDU0MzBGN0MzQjVGMDBEN0MxRkIgLyogSlNMYXp5RXZlbnRMaXN0ZW5lci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNFMUM0M0MwRDk4MzBEMzAwM0IwMkYyIC8qIEpTTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUZEMjNBMTI2MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjY2MDFFQkYxNEIz
QjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDQ2MTQxOTBDRDY4MjY5MDBGQURBNzUgLyogSlNNZWRpYUVycm9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzNDMzlCNzBDMEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUQzQTk0QTQ3MTIyREM0MEYwMEEzN0JCQyAvKiBKU01lZGlhUXVlcnlM
aXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI0MTE2LDYgKzI0MzY4LDcgQEAKIAkJCQk2RTNGQUQz
OTE0NzMzRjQwMDBFNDIzMDYgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkVFOEE3NzMxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyQ0JGNEUxNDBGMUFCRDAwMzg3OUJF
IC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3NDMwMEE2MEY0
QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTZFM0ZBRDM5MTQ3MzNGNDAxMUU0MjMwNyAvKiBKU1dlYkdMRGVidWdSZW5kZXJlckluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTZFM0ZBRDM5MTQ3MzNGNDAyMkU0MjMwNyAvKiBKU1dlYkdM
RGVidWdTaGFkZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTNGQUQzOTE0NzMzRjQwMDBFNDIz
MDcgLyogSlNXZWJHTERlcHRoVGV4dHVyZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDEyOCw2ICsy
NDM4MSw3IEBACiAJCQkJNTFDOTYxMUIxODNEMkI4MDAwRDIwMDJFIC8qIElEQkRhdGFiYXNlTWV0
YWRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUEwN0QzMzU2MTUyQjYzMEUwMDFCNjM5MyAvKiBK
U1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlB
NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFRleHR1cmUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxNDAzNzlEMTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5MTUxN0QxNEQxQzAwNDIwQUExIC8qIE1lZGlhU3Ry
ZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQzQ1MzQyODEwQ0RCQkZBMDA4NjkxNTcgLyogSlNX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzdFRjYyRjQxMkY5REI3
NDAwQzc3QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNDM4OCw2ICsyNDY0Miw3IEBACiAJCQkJOTM3N0FCQTAxNURFRkVFRjAwMzFGRDA0IC8q
IFBhZ2luYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTA4ODUwNjdGMTFEQTA0NUIwMDE4MkI5
OCAvKiBQYWludEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTA4ODUwNjgwMTFEQTA0NUIwMDE4
MkI5OCAvKiBQYWludFBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwN0VEMzVBMzE2RDZEQ0Uy
MDAyMjQ4RjMgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTgwRTZDRkIwQTE5ODlDQTAwN0ZCOEM1IC8qIFBhaXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZEMzE2MEEzMTJCMDI2RjcwMEMxQTM1OSAvKiBQYW5uZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZEMzE2MDFBMTJCMDI2NzYwMEMxQTM1OSAvKiBQYW5uZXJOb2RlLmggaW4gSGVhZGVycyAq
LywKQEAgLTI0NjAzLDYgKzI0ODU4LDcgQEAKIAkJCQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0Ig
LyogUmVuZGVyU1ZHRWxsaXBzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDNDMDkyQkMxMkQ5RTRF
RTAwQTk4OUMzIC8qIFJlbmRlclNWR0ZvcmVpZ25PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQzNjcwOEM1MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxQUI1MDAwMTIyODc4QTIwMDFBN0RCMCAvKiBHcmFwaGljc0NvbnRl
eHQzRElPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4QzcxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4Qzkx
MkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0ltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
ODU0QjAxNTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVycyAq
LywKQEAgLTI0NjExLDYgKzI0ODY3LDcgQEAKIAkJCQlDRDNBNDk2MjE3QTlEMDFCMDAyNzRFNDIg
LyogU291cmNlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhDQjEyRDlDQTRCMDAw
NDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0ODk0
NEEzMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjE3NzQ4MDEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEREYxQUQ3MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRo
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTBCQjU4NTE0ODRFM0E3MDBCMkU4N0EgLyogUmVuZGVy
U1ZHUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4Q0QxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NzkzLDYgKzI1MDUwLDcg
QEAKIAkJCQlFMUI3ODM5QzE2Mzc0MEE3MDAwN0I2OTIgLyogU2hhcmVkV29ya2VyU3RyYXRlZ3ku
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxRDE2OEVFMTAyMjZFODkwMDlCQzgyNyAvKiBTaGFyZWRX
b3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTY1MEQwMDZDRDYwMEVGNkYy
NiAvKiBTaW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRCNjVBNUMxMzJGQUNC
MDAwNzBFN0JFIC8qIFRpbGVMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVBMUVBN0QxNTJC
Q0YwODAwNEQwMEI2IC8qIFNpbXBsaWZ5TWFya3VwQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzE3NDFBQUQxNjYzNjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkQwMEQ3QTUxNEEzRjYxOTAwNzM0MDExIC8qIFNpbmNSZXNhbXBs
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ4NjgsNiArMjUxMjYsNyBAQAogCQkJCTUxQkUzN0Uw
MERBRUUwMEUwMDEwODVGQyAvKiBTdG9yYWdlQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzUx
NjBFRUIxMDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1wbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzUxMDJFQ0YwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQ0Q1NTk2OTIxNDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRl
cklPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFMEJBQkIwREE1NTQ3MTAwQTlFNDE3IC8qIFN0
b3JhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU2NTc2RTgxN0RBOTRFMjAwQTU2QkRD
IC8qIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUVC
REQ4NDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNTAyNCw2ICsyNTI4Myw3IEBACiAJCQkJQjIyMjc5RkEwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR0ZFT2Zmc2V0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5RkQw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyMjI3QTAwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk0NEEyMERCOTBGODQxNjZDMDBCM0UxRkUgLyog
V2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwMzBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHRkVTcG90TGlnaHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwNzhFMDkxOTE3RDE0RDFDMDA0MjBBQTEgLyogTWVkaWFTdHJlYW1UcmFja0V2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyN0EwNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUaWxlRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTI0Nyw2ICsyNTUwNyw3IEBACiAJCQkJOTdCQzg0
QTUxMjM3MERDODAwMEM2MTYxIC8qIFRleHRWaWV3U291cmNlUGFyc2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0U2NThGRjBFQTkyNDhBMDA3RTQ1MzMgLyogVGhlbWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRTY1OUU2MEVBOTJGQjIwMDdFNDUzMyAvKiBUaGVtZU1hYy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNDQyQUY3QTkxMDJDRERFQTAwOEZENEQzIC8qIFF1aWNrTG9vay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNFNjU5QTkwRUE5MjdCOTAwN0U0NTMzIC8qIFRoZW1lVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3NkQ2Qzk1MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwQjkwNTYxQjBGMjU3OEJGMDA5NUZGNkEg
LyogVGhyZWFkYWJsZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTI2MSw2ICsyNTUyMiw3
IEBACiAJCQkJMUFGODlBNDIxNTE4RkRFQTAwRTU0N0I1IC8qIFRpbGVkQmFja2luZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDk4NzcwRjMxMjQyQzUzNTAwMjIyNkJBIC8qIFRpbGluZ0RhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCUY1NUIzRERDMTI1MUYxMkQwMDNFRjI2OSAvKiBUaW1lSW5wdXRU
eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNTE2RThCNzEzNkUwNERCMDA3NkMzQzAgLyogTG9j
YWxpemVkRGF0ZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTUzQ0ZFODEwOEY0NzNGMDBF
QTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3
MTlCNzE4MTEwNkUwMDAxNkRDNTEgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjU5MjgsNiArMjYxOTAsNyBAQAogCQkJCUZEOEM0NkVCMTU0NjA4RTcwMEE1
OTEwQyAvKiBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RkVENDgzOTBDRUQ2NkMzMjU1RjcyQzU5IC8qIE1hdGhNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDc4RTA5MDMxN0QxNENFRTAwNDIwQUExIC8qIE1lZGlhU3RyZWFtVHJh
Y2tFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0NDRENEUyMzBGNzA4QjJFMDAzMTU4RTAg
LyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBNzk4MjQx
NzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlD
REE3OTgyNzE3MEEyNzkxMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0Q1NERFNEIxNzQ2OUM2RDAwNUU1QjM2IC8qIEF1ZGlvU2Vzc2lvbk1hYy5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTI1OTM3LDYgKzI2MjAwLDcgQEAKIAkJCQlCRTg4RTBEODE3MTVE
MkEyMDA2NThEOTggLyogQXVkaW9UcmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRTg4RTBE
QjE3MTVEMkEyMDA2NThEOTggLyogQXVkaW9UcmFja0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkQzMTYwOEExMkIwMjZGNzAwQzFBMzU5IC8qIEF1ZGlvVXRpbGl0aWVzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTdFNDI4Q0U1MTNFMzQwN0YwMDNCNjYxQyAvKiBSZXNvdXJjZUhhbmRsZUlP
Uy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzNEY3MTM4MEQ1QTZFRkYwMDAxOEQ2OSAvKiBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NEQw
Q0U5MjM0RTAwN0VGM0NEIC8qIEF1dGhlbnRpY2F0aW9uTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDU4MzBENEQxNjc5QjRGODAwQUNGOEMzIC8qIEF1dG9zY3JvbGxDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjYwMDIsNiArMjYyNjYsNyBAQAogCQkJCTQ5QUUyRDk2MTM0RUU1
RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIx
ODI3NDkzMTM0Q0E0QzEwMEI5OEMyRCAvKiBDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTZFNEU5MUFDMTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmli
dXRlcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTQwMzc5QzEyNEJFQTdGMDBBRjQwRTQgLyog
V2ViQ29yZU1vdGlvbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk0OTQ4NEZDMTEwMkNG
MjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkI5
MTM5MjcxNkFFNEMzNDAwMUZFNjgyIC8qIENhbnZhc1BhdGhNZXRob2RzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQ5NDg0RkM0MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjYwNjgsMTIgKzI2MzMzLDE0IEBACiAJCQkJOTc2MjdCOEQxNEZC
M0NFRTAwMkNEQ0ExIC8qIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTA2NUFENEY2MEIwQzJFREEwMDVBMkIxRCAvKiBDb250ZXh0TWVudUNvbnRyb2xs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdEMDdCMTQxODM0MTU4ODAwQUJERDNDIC8qIEpT
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdFNDc0
RTIwMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMDYwMjdDQjMwQjFDQzAzRDAwODg0QjJEIC8qIENvbnRleHRNZW51SXRlbU1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzQjZBMEVBMEIwQkNBODQwMEY1MDI3QSAvKiBDb250
ZXh0TWVudU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI4MTJCMDI2NzYwMEMxQTM1
OSAvKiBDb252b2x2ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxNDI0QzkzMTY0QjUy
QzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE0MjRDOTAx
NjRCNDYwQjAwRjMyRDQwIC8qIENvb2tpZUphck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdF
RTY4NDYzMTJEMjZFMzgwMEU3OTQxNSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMzdFNjU5NTAxNjNCMTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRhSU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEzRjAxRjExMjcwRTE5MDAwREZCQTcxIC8qIENvb2tp
ZVN0b3JhZ2VNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzQ2QUYyMTE0RjREREU2MDAzRTdB
NzIgLyogQ29vcmRpbmF0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI5NTAwRTgyMDU2
QjAwQjI1OTY1IC8qIENvdW50ZXJEaXJlY3RpdmVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjYx
NzksNiArMjY0NDYsNyBAQAogCQkJCUZFNDU2RjE4MTY3N0Q3NEUwMDVFRERGOSAvKiBEYXRhYmFz
ZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVCMjZEMjgxNjdBOEYyQTAwRkREMjZC
IC8qIERhdGFiYXNlU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFREVGODQxMTY3OTcx
MDgwMDBFNDQ0QSAvKiBEYXRhYmFzZVN0cmF0ZWd5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0
RTM5QUZEMTMzMEVGQzYwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29sLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTdCQzZBMkExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlU3luYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5N0JDNkEyRDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUYXNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTJGMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFz
ZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2MzE0LDYgKzI2NTgyLDcgQEAKIAkJCQlG
NUMwNDFFNDBGRkNBOTZEMDA4MzlENEEgLyogRE9NSFRNTERhdGFMaXN0RWxlbWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUUxNTdBOEU4MTgxODRDNjcwMDlGODIxRCAvKiBKU0NyeXB0b0tleUN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzA1ODUyMzE3RkRDMTQwMDA1RjJCQ0IgLyog
TWVkaWFUcmFja0NvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFRDEzRDQwMENF
QTkzOTQwMEQ4OTQ2NiAvKiBJY29uSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNUY4MzEx
ODIyRjExQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRDM1OUQ3OTIxMjlDQTNDMDAwMDZFNUQyIC8qIERPTUhUTUxEZXRhaWxzRWxlbWVudC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTg1QkE0RDBDMEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1M
RGlyZWN0b3J5RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLApAQCAtMjYzNzUsNiArMjY2NDQsNyBA
QAogCQkJCTg1QkE0RDE4MEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MVUxpc3RFbGVtZW50Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTgxODVGM0UwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxl
bWVudGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzQzg0MUZGMDlDRTg1ODMwMERGRjVF
NSAvKiBET01JbXBsZW1lbnRhdGlvbkZyb250LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2NjAx
RUMwMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDMUEzN0JBMDk3QzcxNUYwMDE5RjNEOCAvKiBET01JbnRlcm5hbC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTg1RkYzMTVCMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2Fy
ZEV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwNjU2RkYwQUFCNDc2MzAwMkQxNUMwIC8q
IERPTU1lZGlhTGlzdC5tbSBpbiBTb3VyY2VzICovLApAQCAtMjY0NTcsNiArMjY3MjcsNyBAQAog
CQkJCTQ5ODc3MERCMTI0MkM1MzUwMDIyMjZCQSAvKiBEcmF3aW5nQnVmZmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUNEQzhCNUE2MTgwNDc0RjcwMDE2RTY4NSAvKiBNZWRpYVNvdXJjZVByaXZh
dGVBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk4NzcxNTMxMjQzRjlGQTAwMjIyNkJB
IC8qIERyYXdpbmdCdWZmZXJNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkzMUVBRjk3RjEyMTQz
NUE0MDBFN0MxQkYgLyogRGV2aWNlTW90aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDc4RTA5MTIxN0QxNENFRTAwNDIwQUExIC8qIFVzZXJNZWRpYUNvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkQ2RUQyQzcxMzZCOEU2NjAwM0NGMDcyIC8qIER5bmFtaWNzQ29t
cHJlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDUzNzM1NjEzN0I2NTNCMDAwMDhEQ0Ug
LyogRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY2NTgs
NiArMjY5MjksNyBAQAogCQkJCTA3OTY5REJEMTdEMTQxNTEwMDdGRjg0MiAvKiBKU1JUQ1Nlc3Np
b25EZXNjcmlwdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFERTI5MEEx
NTJBQzgwMEIxMkE2OCAvKiBIVE1MQm9keUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThDRkY3QTgwQTE1Njk3ODAwMEE0MjM0IC8qIEhUTUxCUkVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMUY2OEQ0QUUxNEJCOURDQTAwN0I1QzYyIC8qIE1lbW9yeVByZXNzdXJlSGFuZGxl
cklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4MTM2OUQzMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBI
VE1MQnV0dG9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFGRDA4MjQ1RTU5
MDAxRTlBQkMgLyogSFRNTENhbnZhc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThE
RjNGRDEwOTdGQTBGQzAwNTI5ODFCIC8qIEhUTUxDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMjY2NjksOCArMjY5NDEsMTAgQEAKIAkJCQlBOEVBN0NCMTBBMTkyQjlDMDBBOEVGNUYg
LyogSFRNTERpdkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThFQTc5RjUwQTE5MTZE
RjAwQThFRjVGIC8qIEhUTUxETGlzdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNG
MTlBOTEwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk0NEM5OTE4MjBGM0QxRTBEMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MubW0gaW4g
U291cmNlcyAqLywKIAkJCQk5NzdCMzg2NjEyMjg4M0U5MDBCODFGRjggLyogSFRNTERvY3VtZW50
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REU3MDk5RTY0OTIwMDU2RTU4MSAv
KiBodG1sZWRpdGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNTE2RThCODEzNkUwNERCMDA3
NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlB
OTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUUxNTdBOEYwMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3QzgxMjIwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVt
ZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2OTA2LDYgKzI3MTgwLDcgQEAKIAkJ
CQk3MEY1NDZFOEI4QjVEN0RDNTRFRTE0NEUgLyogSlNCZWZvcmVVbmxvYWRFdmVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGREYwOURDODEzOTlCNjIyMDA2ODhFNUIgLyogSlNCaXF1YWRGaWx0
ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEOEFBNjNDMTY5NTE0OEUwMEQyRUE2OCAv
KiBKU0JpcXVhZEZpbHRlck5vZGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzE0MDM3
OUUxMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkUyRDk5Q0QxMEUyQkJEQTAwNDk2MzM3IC8qIEpTQmxvYi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4OTMxREU1QjE0QzQ0QzQ0MDAwREM5RDIgLyogSlNCbG9iQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDlFMjg3MTA3RDREQjQwMEI1NzkzRiAvKiBKU0Nh
bGxiYWNrRGF0YS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2OTE0LDYgKzI3MTg5LDcgQEAKIAkJ
CQk2NURGMzIzQjA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNQYXR0ZXJuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQ5RUVEMTQyMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFRUQxNDQxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNE
Q0E4Mjk2MTY3OTEwMEYwMDg3NTcxNCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTQ5RUVEMTRFMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUVFRDE1MDEw
NTE5NzFBMDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzRjlCN0EwMEJBNjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2OTQ4LDYgKzI3MjI0LDcgQEAKIAkJCQlCQzQ2QzFF
RTBDMEREQkRGMDAyMENGQzMgLyogSlNDU1NSdWxlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4RDA1RkE3MEEyM0IzMDEwMDVFNzIwMyAvKiBKU0NTU1J1bGVMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTA3MDM2M0U1MTgxQTFDREMwMEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNv
dXJjZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5MEFFMEVBRkY0QjUwMDM2OTVDOCAvKiBT
eXN0ZW1NZW1vcnlJT1MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MjI2MkYxMDMyMTA4NDAw
NkU3RDVEIC8qIEpTQ1NTUnVsZUxpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
MDExQjYwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlGRkI2OThDRjE4MzQwMkJCMDAxNThBMzEgLyogTGluZUluZm8uY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0yNjk3NSw2ICsyNzI1Miw3IEBACiAJCQkJNTlBODYwMDYxMTlEQUY3
RjAwREVGMUVGIC8qIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1OTBFMUI0QjExRTRFRjcwMDA2OUY3ODQgLyogSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRTQzOEEyMTQwQzBEQzAwMDVFNDM3RSAv
KiBKU0RpY3Rpb25hcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDRDMzYzRjEwRkFBN0JCMzAw
OTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTY1OUREQzgyMDlFMTk4QkEwMDFCRjNDNiAvKiBKU0RvY3VtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQ5QzdCQThEMTA0MkY1QjEwMDA5RDQ0NyAvKiBKU0RvY3VtZW50Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBNDk0RURFMEExMjNGNEMwMEZEQUZDMSAvKiBKU0RvY3Vt
ZW50RnJhZ21lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjk4Niw2ICsyNzI2NCw3IEBACiAJ
CQkJMkUwODg4RDQxMTQ4ODQ4QTAwQUY0MjY1IC8qIEpTRE9NRm9ybURhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkUwODg4RTYxMTQ4ODRFMjAwQUY0MjY1IC8qIEpTRE9NRm9ybURhdGFDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFDMzZDQkQwRUIwODA2MjAwNzQxMEJDIC8qIEpT
RE9NR2xvYmFsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3RUQzNUEyMTZENkRDQzkw
MDIyNDhGMyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjVERjMxRjcwOUQxQ0M2MDAwMEJFMzI1IC8qIEpTRE9NSW1wbGVtZW50YXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTlEMjQ4MDYwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWlt
ZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlEMjQ4MDgwRDc1N0U3RDAwRkRGOTU5IC8q
IEpTRE9NTWltZVR5cGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MDI4LDYgKzI3MzA3
LDcgQEAKIAkJCQlCQzYwOTAyMDBFOTFCOEVDMDAwQzY4QjUgLyogSlNFdmVudFRhcmdldEN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMzE0QUNFQjEwODkyMDg2MDAwRjBFNTYgLyogSlNF
eGNlcHRpb25CYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFQkYwRTc2MTJBOTg2ODgwMERC
MTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5MDQ5
MEVBRkQ2MzcwMDM2OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzcyODY5ODMxNEZEOUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDBGMDE0MEUwQTE4OTUwMEZE
MDRFMyAvKiBKU0ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkUzQkMwQ0ExMTdEM0UwODAw
Qjk0MDlBIC8qIEpTRmlsZUVycm9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjcxNzYsNiArMjc0
NTYsNyBAQAogCQkJCUNEQTk4RTA0MTYwMzlFMUEwMEZFQTNCMSAvKiBKU01lZGlhS2V5cy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwNzk2OURDMzE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENTdGF0
c1Jlc3BvbnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQTk4RTA2MTYwMzlFMUYwMEZFQTNC
MSAvKiBKU01lZGlhS2V5U2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwNzQzMDBBNTBG
NEI4QkNGMDA4MDc2Q0QgLyogTWVkaWFQbGF5ZXJQcml2YXRlSU9TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkMzQzM5QjYwQzBEM0Q4RDAwNUY0RDdBIC8qIEpTTWVkaWFMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUQzQTk0QTQ2MTIyREM0MEYwMEEzN0JCQyAvKiBKU01lZGlhUXVlcnlMaXN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNENjQxRUJGMTgxOUIzNjAwMEVFNEM0MSAvKiBNZWRp
YVRpbWVNYWMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzI2NCw2ICsyNzU0NSw3IEBACiAJCQkJ
NTFEQ0U4MDIwQ0FDOUYxQzAwNDg4MzU4IC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUVBQzU2NzE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTlERDZBNjExOTAy
QTYyMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlBQTEyREY0OTE3NDNERjgzMDA0REFGREYgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXpl
cklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUI1OURENkFBMTE5MDJBNzEwMDdFOTY4NCAvKiBK
U1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2
MzgwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjU5REQ2OUUxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25DYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MzMxLDYgKzI3NjEzLDcgQEAKIAkJCQlCMkZBM0Q3
NjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDM1OEU4N0MxMzYwQTJFRTAwRTQ3NDhDIC8qIEpTU1ZHRkVEcm9wU2hh
ZG93RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q3ODBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdGRUZsb29kRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0NEM5OTFB
MDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkZB
M0Q3QTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRUZ1bmNBRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMkZBM0Q3QzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRUZ1bmNCRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q3RTBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdGRUZ1bmNHRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MzU0LDYgKzI3NjM3LDcg
QEAKIAkJCQlBODNCNzkwMzBDQ0FGRjE1MDAwQjA4MjUgLyogSlNTVkdGb250RmFjZU5hbWVFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4M0I3OEZGMENDQUZGMTUwMDBCMDgyNSAvKiBK
U1NWR0ZvbnRGYWNlU3JjRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODNCNzhGRDBD
Q0FGRjE1MDAwQjA4MjUgLyogSlNTVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTQ1MzkwNEQwRUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyRkEzRDk4MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZvcmVpZ25PYmpl
Y3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDlBMEFCNzVBNkYwMDBFNUFD
NCAvKiBKU1NWR0dFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyN0IyODI3MENFRjBD
MDcwMEQzOUQ1NCAvKiBKU1NWR0dseXBoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3
MzYzLDYgKzI3NjQ3LDcgQEAKIAkJCQk4NTE3NEVDMkJDQ0FGMTdFQUUzRjQ2RjggLyogSlNTVkdH
cmFwaGljc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQ4NTIyN0IxMTkwMTYyQzAw
NkVEQzdGIC8qIEpTU1ZHSEtlcm5FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEz
RDlFMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlFNDI0QTNBMDEzMzBERjFFMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjJGQTNEQTAwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGVuZ3RoLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA3NzY2NEZDMTgzRTZCNUMwMDEzM0I5MiAvKiBKU1F1aWNr
VGltZVBsdWdpblJlcGxhY2VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4RTRGRTQ2MEUy
QkQ0MTQwMEY0Q0FFMCAvKiBKU1NWR0xlbmd0aEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI3Mzg5LDYgKzI3Njc0LDcgQEAKIAkJCQlCMkZBM0RDMDBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzREMy
MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEQzQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNEI2NUE1
RTEzMkZBREI2MDA3MEU3QkUgLyogVGlsZUxheWVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJG
QTNEQzYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEQzgwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNE
Q0EwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhB
YnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzQzMiw2ICsyNzcxOCw3IEBACiAJCQkJQjJGQTNF
MEUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVFJlZkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMDcwMzYzRDYxODFBMTQ2NTAwQzA3NEE1IC8qIE1lZGlhU3RyZWFtU291cmNlU3RhdGVz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRTEwMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NW
R1RTcGFuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDUzOTA0MzBFQUZENjM3MDAz
Njk1QzggLyogUGxhdGZvcm1TY3JlZW5JT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Ux
MjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdVbml0VHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTEyNUY4NTExODI4M0E1NjAwRDg0Q0Q5IC8qIEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpX
Sy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0UxNDBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdVc2VFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc1MzEsNiArMjc4MTgsNyBAQAog
CQkJCUJDRUZFMUVBMERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNFRkUxRTUwRENBNUYzMzAwNzM5MjE5IC8qIEpTWFNMVFByb2Nlc3Nv
ckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTAzMUI0MzBBNDRFRkM3MDBGOTkyRTAg
LyogS2V5Ym9hcmRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDNTgzNjFBQTE3NDQ1MjNG
MDAxNzM1MTEgLyogRm9udFNlcnZpY2VzSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0Iz
RDgxMTRCMTY2QTAwMUM0MjlCIC8qIEtleUV2ZW50Q29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkyNjU1NDEzQTE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRJT1MubW0gaW4gU291cmNlcyAq
LywKIAkJCQk1MTFFRjJDMTE3RjBGRDM1MDBFNEZBMTYgLyogSlNJREJDdXJzb3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yNzU5MiwxMCArMjc4ODAsMTIgQEAKIAkJCQk1MTAxOTQ0NDE4MzZGN0U0
MDA5MjU1MjMgLyogSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkFCRTcyRjQxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkFCRTcyRkQxMDU5QzIxMTAwRDk5OUREIC8qIE1hdGhNTEVsZW1lbnRG
YWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJFQTgwN0M4MEY3MTRBMDMwMDUyNDE5OSAv
KiBTZWxlY3Rpb25SZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZBQkU3MkY2MTA1OUMxRUIw
MEQ5OTlERCAvKiBNYXRoTUxJbmxpbmVDb250YWluZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZBQkU3MkY4MTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxNYXRoRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGQUJFNzJGRTEwNTlDMjExMDBEOTk5REQgLyogTWF0aE1MTmFt
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkE2NTRBNkIxMTA4QUJFRDAwMjYxNUUwIC8qIE1h
dGhNTFRleHRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5MDQ1MEVBRkQ2Mzcw
MDM2OTVDOCAvKiBTY3JvbGxWaWV3SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlENURDMkIw
RjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQ5RTkxMUM2MEVGODZENDcwMDlEMENBRiAvKiBNYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE3MjUzQUExMzU0QkJCQzAwMzYwRjJB
IC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc2MzEsMTEg
KzI3OTIxLDEzIEBACiAJCQkJOTMzMDlERjkwOTlFNjQ5MjAwNTZFNTgxIC8qIE1lcmdlSWRlbnRp
Y2FsRWxlbWVudHNDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQURFQ0NGMEU3NkFE
OEIwMDRBMUE1RSAvKiBNZXNzYWdlQ2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NTc5
M0U4MzBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTQ0M0YwNDI3MEU3NUM4RkIwMDdFNTQwNyAvKiBOZXR3b3JrU3RhdGVOb3RpZmllcklPUy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUFERUNDMDBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2Fn
ZVBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4RTUyNkYxMzQ2QkQxNzAwQUQ5QzMxIC8q
IE1ldGVyU2hhZG93RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0REQ0Q5NDEzODQ0
RkQ1MDAwOEI3OTMgLyogTUlNRUhlYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzc3MkM0
RTBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzc3MkM1RTBDNEVCMzQ0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeU1hYy5tbSBp
biBTb3VyY2VzICovLAorCQkJCUU0NTM5MDQ3MEVBRkQ2MzcwMDM2OTVDOCAvKiBTb3VuZElPUy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTUyRjEwODY1MTYyQjZEQTQwMDlBQzgxRSAvKiBNaXhlZENv
bnRlbnRDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM2RDc0QUU0MDlBQTI5MEEwMDBC
MEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RjU1QjNEQzUxMjUxRjEyRDAwM0VGMjY5IC8qIE1vbnRoSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjc3MjMsNiArMjgwMTUsNyBAQAogCQkJCUUxMjg0QUVBMTA0NDdERUUwMEVBRUI1
MiAvKiBQYWdlVHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNjczMEEz
MTgyRDhGQkIwMDNGQUY1QyAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxRTFFQ0MyMEM5MUM5MDQwMERDMjU1QiAvKiBQYWdlVVJMUmVjb3JkLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTM3MjdERkQ1MTQyQUFFNDUwMEQ0NDlDQiAvKiBGb250Q2FjaGVJT1MubW0g
aW4gU291cmNlcyAqLywKIAkJCQlGRkQ1Qjk3QTEzNUNDOTc4MDBENUU5MkEgLyogUGFnZVZpc2li
aWxpdHlTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjBBMjEyQjAyNkY3MDBDMUEz
NTkgLyogUGFubmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDE5MTJCMDI2NzYwMEMx
QTM1OSAvKiBQYW5uZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc3NTEsNiArMjgwNDQs
NyBAQAogCQkJCTQ5NTg3ODIyMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlDREVBNzYzMDE0NjA4QTUzMDA4QjMxRjEgLyogUGxhdGZv
cm1DbG9ja0NBLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQUE4RDBBMTRENzFCMkUwMDYxRUE2
MCAvKiBQbGF0Zm9ybUNsb2NrQ00ubW0gaW4gU291cmNlcyAqLywKKwkJCQk0NDJBRjdBQTEwMkNE
REVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBQTQ4NkYx
NEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRjU0NEY3ODgxNUNGQjJBODAwQUYzM0E4IC8qIFBsYXRmb3JtTG9jYWxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxQkY3MDBGMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3ODM5LDYgKzI4MTMzLDcg
QEAKIAkJCQlCQ0VBNDg3NzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDRUE0ODc5MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMYXllci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU4MEQwMDBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5MDFEMEVBRkNBQ0EwMDM2
OTVDOCAvKiBNSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1ODBD
RkUwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MEQxMEQ5OTE1NDVGNTc2MDA5NkQyODggLyogUmVuZGVyTGF5ZXJGaWx0ZXJJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTNDMjQ0RkVCQTM3NUFDNjMzRjg4QkU2RiAvKiBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc4OTgsNiArMjgx
OTMsNyBAQAogCQkJCUE4REY0QUVBMDk4MEM0MkMwMDUyOTgxQiAvKiBSZW5kZXJUYWJsZUNlbGwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThERjRBRTgwOTgwQzQyQzAwNTI5ODFCIC8qIFJlbmRl
clRhYmxlQ29sLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4REY0QUYwMDk4MEM0MkMwMDUyOTgx
QiAvKiBSZW5kZXJUYWJsZVJvdy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNEI2NUE1QTEzMkZB
QUY5MDA3MEU3QkUgLyogVGlsZUdyaWQubW0gaW4gU291cmNlcyAqLywKIAkJCQlBOERGNEFFRDA5
ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDRUE0ODhCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUZXh0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUFCNjdEMUE4MDk3RjNBRTMwMEY5MzkyRSAvKiBSZW5kZXJUZXh0Q29udHJvbC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTI3OTk1LDYgKzI4MjkxLDcgQEAKIAkJCQkwRjYwNUFFQzE1
Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFGNjJFRTcxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjYyRUU2MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxp
bmdDb29yZGluYXRvck1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNENTU5NjkxMTQ3NUI2Nzgw
MDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTND
MzhCRkUxNjQ0NzNDNzAwMDkxRUIyIC8qIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzMUNCRDBDMTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0
ZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMxQ0JEMTMxNjFBNDRGODAwRTRDODc0IC8q
IFNjcm9sbGluZ1N0YXRlTm9kZU1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtMjgwMzMsNiArMjgz
MzAsNyBAQAogCQkJCUJDNUVCOEMzMEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE2RDE2OTYyMTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENDVBOTUzMTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFw
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyOTAzNzE2NTE2QkExMUJDMDBGRUZERjAgLyogQ29u
dGVudEZpbHRlcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZENDVBOTU0MTc1RDNGQjgwMEMy
MUVDOCAvKiBTaGFwZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ0NUE5NTUxNzVEM0ZC
ODAwQzIxRUM4IC8qIFNoYXBlSW5zaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDQ1
QTk1NjE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI4MjIzLDYgKzI4NTIxLDcgQEAKIAkJCQlDREUzQTg1NzE3RjYwMjA0MDBDNUJFMjAg
LyogQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5
QjMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0RvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyOEM2QTI3MEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYxNzc0ODExMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1h
dG9ySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5QjYwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgzM0M4NTIwQTJDRjUyODAwRDU3
NjY0IC8qIFNWR0VsZW1lbnRGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUI5
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdFbGVtZW50SW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0yODMxNSw2ICsyODYxNCw3IEBACiAJCQkJQjIyMjdBNTgwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1BhdGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0NzZDOUVGMTFERjZBNTgw
MDU1NUIwMiAvKiBTVkdQYXRoUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTgw
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlGRTBEODRFQjEwNDg0MzZFMDAxQTE3OUUgLyogV2ViRXZlbnQubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NDc2QzlFNTExREY2QTBCMDA1NTVCMDIgLyogU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUNERjJCMDE4MTgyMDU0MDcwMEYyQjQyNCAvKiBNb2NrVHJh
Y2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4RkYxMDIwMTI5NTBGNUEwMEYwMDI3NiAvKiBT
VkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4NDE3
LDYgKzI4NzE3LDcgQEAKIAkJCQk0OTg3NzBGMDEyNDJDNTM1MDAyMjI2QkEgLyogVGV4dHVyZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDODRBNDEyMzcwREM4MDAwQzYxNjEgLyogVGV4dFZp
ZXdTb3VyY2VQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNjVEMzIwRUFEMTIxMTAw
N0U0NTMzIC8qIFRoZW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0QzNCMUZDMEYwRTQxNzAw
MDk2OTNGNiAvKiBUaWxlQ2FjaGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0U2NTlFOTBFQTky
RkZBMDA3RTQ1MzMgLyogVGhlbWVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzZENkM5NDEy
MkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwQjkwNTYxRTBGMjU3RTkzMDA5NUZGNkEgLyogVGhyZWFkYWJsZUxvYWRlci5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTI4NTA1LDYgKzI4ODA2LDcgQEAKIAkJCQk3RTY2RTIzMzE2RDZF
QjZDMDBGN0U3RkYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3RTY2RTIzMzE3RTZFQjZDMDBGN0U3RkYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVBWUlRDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFM0ZBRThFMTQ3MzNGREIwMEU0MjMwNiAv
KiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjk3
QTY1ODE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yaU9TLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNkU0RTkxQUUxMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGNkYxRUQxMjdGNzBCMTAwNTVDQjA2
IC8qIFdlYkdMQ29udGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTAxRDNDRjgyMTRC
RDBBMzAwMEZFOTk3MCAvKiBXZWJHTENvbnRleHRHcm91cC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI4NjMwLDYgKzI4OTMyLDcgQEAKIAkJCQlFMUVDMjk5RjBCQjA0QzZCMDBFQTE4N0IgLyogWFBh
dGhOb2RlU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQjdGQzc1MEE4QjkyRUMwMEQ5RDM3
QiAvKiBYUGF0aE5TUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0ZDNzgwQThC
OTJFQzAwRDlEMzdCIC8qIFhQYXRoUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ0NzY1
MzFCMTMzMTcwOTkwMDA2Qjc4OSAvKiBTU0xLZXlHZW5lcmF0b3JJT1MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUFCN0ZDN0EwQThCOTJFQzAwRDlEMzdCIC8qIFhQYXRoUGF0aC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQUI3RkM3QzBBOEI5MkVDMDBEOUQzN0IgLyogWFBhdGhQcmVkaWNhdGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0ZDN0UwQThCOTJFQzAwRDlEMzdCIC8qIFhQYXRo
UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ29udGVudEZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZp
bHRlci5oCmluZGV4IDkzZjIwOWRiNjNlOWE5NjBiMjU1NjRkYmMzNjM5Y2U5NWY1NDY5MDAuLmQw
NWUyYWEyODdmNGMyYTYzOGQzYTc4M2I2ODZhMWFlM2VhM2NkZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Db250ZW50RmlsdGVyLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKKyNpZiBQTEFURk9S
TShJT1MpCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNlbmRpZgorCiAjaWYgUExBVEZP
Uk0oTUFDKQogT0JKQ19DTEFTUyBXZWJGaWx0ZXJFdmFsdWF0b3I7CiAjZW5kaWYKQEAgLTUxLDYg
KzU1LDExIEBAIHB1YmxpYzoKICAgICBib29sIGRpZEJsb2NrRGF0YSgpIGNvbnN0OwogICAgIGNv
bnN0IGNoYXIqIGdldFJlcGxhY2VtZW50RGF0YShpbnQmIGxlbmd0aCkgY29uc3Q7CiAgICAgCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzY2hlbWUoKTsKKyAgICB2
b2lkIHJlcXVlc3RVbmJsb2NrQW5kRGlzcGF0Y2hJZlN1Y2Nlc3NmdWwoRnVuY3Rpb248dm9pZCgp
Pik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDb250ZW50RmlsdGVyKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCmlu
ZGV4IGYzNTM1NmNiZDVkYTI4MDRhODY1MmE5MDJhOTUwMWY0OTA1MDMxZjMuLjUzNzliODY3MDZj
ODJjNzk5ZmM3MDQyZjkwMDRiZTY4YWMyZmE4NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0RyYWdEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0Rh
dGEuaApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykg
JiYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU1LDExICs1NSwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBEYXRhT2JqZWN0R3RrOwogfQogdHlwZWRlZiBXZWJDb3JlOjpEYXRhT2Jq
ZWN0R3RrKiBEcmFnRGF0YVJlZjsKLSNlbGlmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oQkxB
Q0tCRVJSWSkgfHwgUExBVEZPUk0oTklYKQorI2VsaWYgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9S
TShCTEFDS0JFUlJZKSB8fCBQTEFURk9STShOSVgpIHx8IFBMQVRGT1JNKElPUykKIHR5cGVkZWYg
dm9pZCogRHJhZ0RhdGFSZWY7CiAjZW5kaWYKIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEZyYW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29z
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCmluZGV4IGRj
OTcxYjM2ZTdhZWVlMjQyNGFiZTEzYzFhOTZmNzRjMmQ3YzhlMmQuLjRhMTBmMTZkMzNlZDVmY2Mz
NTQ4OTNlZmQ5YjZjZTcyY2QzMGU4NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0ZpbGVDaG9vc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hv
b3Nlci5jcHAKQEAgLTc1LDYgKzc1LDI1IEBAIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCiAgICAgbV9jbGllbnQtPmZpbGVzQ2hv
c2VuKGZpbGVzKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy8vIEZJWE1FOiBUaGlzIGZ1bmN0
aW9uIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gRmlsZUNob29zZXI6OmNob29zZUZpbGVzKCkuIFdl
IHNob3VsZCBtZXJnZSB0aGlzIGZ1bmN0aW9uCisvLyB3aXRoIEZpbGVDaG9vc2VyOjpjaG9vc2VG
aWxlcygpIGFuZCBoZW5jZSByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCit2b2lkIEZp
bGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFt
ZXMsIGNvbnN0IFN0cmluZyYgZGlzcGxheVN0cmluZywgSWNvbiogaWNvbikKK3sKKyAgICAvLyBG
SVhNRTogVGhpcyBpcyBpbmVsZWdhbnQuIFdlIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBzZXR0
aW5ncyBoZXJlLgorICAgIGlmIChtX3NldHRpbmdzLnNlbGVjdGVkRmlsZXMgPT0gZmlsZW5hbWVz
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4gZmlsZXM7CisgICAgZm9yIChhdXRv
IGZpbGVuYW1lIDogZmlsZW5hbWVzKQorICAgICAgICBmaWxlcy5hcHBlbmQoRmlsZUNob29zZXJG
aWxlSW5mbyhmaWxlbmFtZSkpOworICAgIG1fY2xpZW50LT5maWxlc0Nob3NlbihmaWxlcywgZGlz
cGxheVN0cmluZywgaWNvbik7Cit9CisjZW5kaWYKKwogdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3Nl
RmlsZXMoY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBmaWxlcykKIHsKICAgICAv
LyBGSVhNRTogVGhpcyBpcyBpbmVsZWdhbnQuIFdlIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBz
ZXR0aW5ncyBoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNo
b29zZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgKaW5kZXggNmMw
MjNlM2Q2ZGRkM2VkZDkwNzMxZDFjMWFhODljYTk3MzE3ODgwMC4uOGQ3NTllNjkzNzhjNmQwNjQ2
YzFlZWM5MTdmYmMyYTQ0ZmFmMTM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRmlsZUNob29zZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nl
ci5oCkBAIC0zNyw2ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbGVD
aG9vc2VyOworY2xhc3MgSWNvbjsKIAogc3RydWN0IEZpbGVDaG9vc2VyRmlsZUluZm8gewogICAg
IEZpbGVDaG9vc2VyRmlsZUluZm8oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lID0gU3RyaW5nKCkpCkBAIC03MCw2ICs3MSwxMSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB+RmlsZUNob29zZXJDbGllbnQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBmaWxlc0No
b3Nlbihjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mKSA9IDA7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIGFsbW9zdCBpZGVudGljYWwg
dG8gRmlsZUNob29zZXI6OmZpbGVzQ2hvc2VuKCkuIFdlIHNob3VsZCBtZXJnZSB0aGlzCisgICAg
Ly8gZnVuY3Rpb24gd2l0aCBGaWxlQ2hvb3Nlcjo6ZmlsZXNDaG9zZW4oKSBhbmQgaGVuY2UgcmVt
b3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgorICAgIHZpcnR1YWwgdm9pZCBmaWxlc0Nob3Nl
bihjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlTdHJpbmcsIEljb24qKSA9IDA7CisjZW5kaWYKIH07CiAKIGNsYXNzIEZpbGVDaG9vc2VyIDog
cHVibGljIFJlZkNvdW50ZWQ8RmlsZUNob29zZXI+IHsKQEAgLTgxLDYgKzg3LDExIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgY2hvb3NlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIHZvaWQg
Y2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgYWxtb3N0IGlkZW50aWNhbCB0byBG
aWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoKS4gV2Ugc2hvdWxkIG1lcmdlIHRoaXMKKyAgICAvLyBm
dW5jdGlvbiB3aXRoIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcygpIGFuZCBoZW5jZSByZW1vdmUg
dGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCisgICAgdm9pZCBjaG9vc2VNZWRpYUZpbGVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgU3RyaW5nJiBkaXNwbGF5U3RyaW5nLCBJY29u
Kik7CisjZW5kaWYgICAgCiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IGp1c3Qg
cGFzcyBmaWxlIHBhdGhzIHRoYXQgY291bGQgYmUgdmlydHVhbCBwYXRocyB3aXRoIHByb3BlciBk
aXNwbGF5IG5hbWVzIHJhdGhlciB0aGFuIHBhc3Npbmcgc3RydWN0cy4KICAgICB2b2lkIGNob29z
ZUZpbGVzKGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiYgZmlsZXMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAppbmRleCA0MDJmZjE3YWEwYTNkNzVjNGU2MWQ4
Y2JhYTBhNWM3NGI5ZDEyNWZmLi40ZTBkOWQ2NmNkNGI4ZTdhOTI4ZTQ2OWExZDFlMTcwY2FhZDUw
ZGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcApAQCAtOTcsNiArOTcs
MTAgQEAgU3RyaW5nIGVuY29kZUZvckZpbGVOYW1lKGNvbnN0IFN0cmluZyYgaW5wdXRTdHJpbmcp
CiAKICNpZiAhUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCiAKK3ZvaWQgc2V0TWV0YWRh
dGFVUkwoU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKK30KKwogYm9v
bCBjYW5FeGNsdWRlRnJvbUJhY2t1cCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRmlsZVN5c3RlbS5oCmluZGV4IDlhNWEzOWYzZTJlMDk0MjUyMWExZjZlNjkwNDgw
MGRlNTAzNDc4NWQuLjM0ZmUwYTQzMGY3ZTZhMzMzYzIzZmUzMDM1Y2Q5OWUxMTFmOTZhYWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKQEAgLTE1MSw2ICsxNTEsOCBAQCBTdHJp
bmcgaG9tZURpcmVjdG9yeVBhdGgoKTsKIFN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3Ry
aW5nJik7CiBTdHJpbmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmKTsKIAordm9pZCBzZXRN
ZXRhZGF0YVVSTChTdHJpbmcmIFVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29u
c3QgU3RyaW5nJiBwYXRoKTsKKwogYm9vbCBjYW5FeGNsdWRlRnJvbUJhY2t1cCgpOyAvLyBSZXR1
cm5zIHRydWUgaWYgYW55IGZpbGUgY2FuIGV2ZXIgYmUgZXhjbHVkZWQgZnJvbSBiYWNrdXAuCiBi
b29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYpOyAvLyBSZXR1cm5zIHRydWUgaWYg
c3VjY2Vzc2Z1bC4KIApAQCAtMTg5LDEwICsxOTEsNiBAQCBTdHJpbmcgZW5jb2RlRm9yRmlsZU5h
bWUoY29uc3QgU3RyaW5nJik7CiBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHBhdGhBc1VSTChjb25zdCBT
dHJpbmcmKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQotdm9pZCBzZXRNZXRhZGF0YVVS
TChTdHJpbmcmIFVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5n
JiBwYXRoKTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShOSVgpCiBT
dHJpbmcgZmlsZW5hbWVUb1N0cmluZyhjb25zdCBjaGFyKik7CiBTdHJpbmcgZmlsZW5hbWVGb3JE
aXNwbGF5KGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vS2lsbFJpbmdOb25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9u
ZS5jcHAKaW5kZXggMzEwYWEwODBjYjI1YTc0N2E2M2Q4ZTA2NDRjZjYwNzEyNWM0NTA5MS4uY2Q5
NDZhNGUyNGZmZDQyODk5NWQ3ZTU5OGRkNDE0ZTEwMTQ3MDE3NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwCkBAIC01MCwzICs1MCw0IEBAIHZvaWQgS2lsbFJpbmc6
OnNldFRvWWFua2VkU3RhdGUoKQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5jcHAKaW5kZXggNTk5MDExYjI2
MWI0NjAxNjNlZGQzNTA5MWE2YWYwMWVmMDBhOTNhMS4uYjgyMDdmOWMwYzQ2N2JkMjYzODBkZTJj
N2EzOWM5MDA3YjNhYjg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9j
YWxpemVkU3RyaW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVk
U3RyaW5ncy5jcHAKQEAgLTcxLDYgKzcxLDcgQEAgc3RhdGljIFN0cmluZyBmb3JtYXRMb2NhbGl6
ZWRTdHJpbmcoU3RyaW5nIGZvcm1hdCwgLi4uKQogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKIHN0YXRpYyBTdHJpbmcgdHJ1bmNhdGVkU3RyaW5nRm9yTG9va3VwTWVudUl0
ZW0oY29uc3QgU3RyaW5nJiBvcmlnaW5hbCkKIHsKICAgICBpZiAob3JpZ2luYWwuaXNFbXB0eSgp
KQpAQCAtODQsNiArODUsNyBAQCBzdGF0aWMgU3RyaW5nIHRydW5jYXRlZFN0cmluZ0Zvckxvb2t1
cE1lbnVJdGVtKGNvbnN0IFN0cmluZyYgb3JpZ2luYWwpCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZD
aGFyYWN0ZXJzID0gbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyh0cmltbWVkLCBtYXhO
dW1iZXJPZkdyYXBoZW1lQ2x1c3RlcnNJbkxvb2t1cE1lbnVJdGVtKTsKICAgICByZXR1cm4gbnVt
YmVyT2ZDaGFyYWN0ZXJzID09IHRyaW1tZWQubGVuZ3RoKCkgPyB0cmltbWVkIDogdHJpbW1lZC5s
ZWZ0KG51bWJlck9mQ2hhcmFjdGVycykgKyBlbGxpcHNpczsKIH0KKyNlbmRpZgogCiBTdHJpbmcg
aW5wdXRFbGVtZW50QWx0VGV4dCgpCiB7CkBAIC03OTcsNiArNzk5LDI2IEBAIFN0cmluZyBodG1s
U2VsZWN0TXVsdGlwbGVJdGVtcyhzaXplX3QgY291bnQpCiAgICAgICAgIHJldHVybiBmb3JtYXRM
b2NhbGl6ZWRTdHJpbmcoV0VCX1VJX1NUUklORygiJXp1IEl0ZW1zIiwgIlByZXNlbnQgdGhlIG51
bWJlciBvZiBzZWxlY3RlZCA8b3B0aW9uPiBpdGVtcyBpbiBhIDxzZWxlY3QgbXVsdGlwbGU+IGVs
ZW1lbnQgKGlPUyBvbmx5KSIpLCBjb3VudCk7CiAgICAgfQogfQorCitTdHJpbmcgZmlsZUJ1dHRv
bkNob29zZU1lZGlhRmlsZUxhYmVsKCkKK3sKKyAgICByZXR1cm4gV0VCX1VJX1NUUklORygiQ2hv
b3NlIE1lZGlhIChTaW5nbGUpIiwgIlRpdGxlIGZvciBmaWxlIGJ1dHRvbiB1c2VkIGluIEhUTUwg
Zm9ybXMgZm9yIG1lZGlhIGZpbGVzIik7Cit9CisKK1N0cmluZyBmaWxlQnV0dG9uQ2hvb3NlTXVs
dGlwbGVNZWRpYUZpbGVzTGFiZWwoKQoreworICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJDaG9v
c2UgTWVkaWEgKE11bHRpcGxlKSIsICJUaXRsZSBmb3IgZmlsZSBidXR0b24gdXNlZCBpbiBIVE1M
NSBmb3JtcyBmb3IgbXVsdGlwbGUgbWVkaWEgZmlsZXMiKTsKK30KKworU3RyaW5nIGZpbGVCdXR0
b25Ob01lZGlhRmlsZVNlbGVjdGVkTGFiZWwoKQoreworICAgIHJldHVybiBXRUJfVUlfU1RSSU5H
KCJubyBtZWRpYSBzZWxlY3RlZCAoc2luZ2xlKSIsICJUZXh0IHRvIGRpc3BsYXkgaW4gZmlsZSBi
dXR0b24gdXNlZCBpbiBIVE1MIGZvcm1zIGZvciBtZWRpYSBmaWxlcyB3aGVuIG5vIG1lZGlhIGZp
bGUgaXMgc2VsZWN0ZWQiKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25Ob01lZGlhRmlsZXNTZWxl
Y3RlZExhYmVsKCkKK3sKKyAgICByZXR1cm4gV0VCX1VJX1NUUklORygibm8gbWVkaWEgc2VsZWN0
ZWQgKG11bHRpcGxlKSIsICJUZXh0IHRvIGRpc3BsYXkgaW4gZmlsZSBidXR0b24gdXNlZCBpbiBI
VE1MIGZvcm1zIGZvciBtZWRpYSBmaWxlcyB3aGVuIG5vIG1lZGlhIGZpbGVzIGFyZSBzZWxlY3Rl
ZCBhbmQgdGhlIGJ1dHRvbiBhbGxvd3MgbXVsdGlwbGUgZmlsZXMgdG8gYmUgc2VsZWN0ZWQiKTsK
K30KICNlbmRpZgogCiBTdHJpbmcgaW1hZ2VUaXRsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBj
b25zdCBJbnRTaXplJiBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TG9jYWxpemVkU3RyaW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3Ry
aW5ncy5oCmluZGV4IGE4NzU3ZDRkZmM2ODY1OWU4ODU1NzI3NjRjMzJlN2FmZGY2MTFhYTguLmUz
ZjczY2IwZDJjMDE2OGJiYWZhNjFjMGU3OWYxYTRlMzc4YmY2N2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmgKQEAgLTE0NSw2ICsxNDUsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50
KCk7CiAjZW5kaWYgLy8gRU5BQkxFKENPTlRFWFRfTUVOVVMpCiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIFN0cmluZyBzZWFyY2hNZW51Tm9SZWNlbnRTZWFyY2hlc1RleHQoKTsKICAgICBTdHJp
bmcgc2VhcmNoTWVudVJlY2VudFNlYXJjaGVzVGV4dCgpOwogICAgIFN0cmluZyBzZWFyY2hNZW51
Q2xlYXJSZWNlbnRTZWFyY2hlc1RleHQoKTsKQEAgLTE3MSw2ICsxNzIsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgU3RyaW5nIEFYTWVudUxpc3RQb3B1cEFjdGlvblZlcmIoKTsKICAgICBT
dHJpbmcgQVhMaW5rQWN0aW9uVmVyYigpOwogICAgIFN0cmluZyBBWExpc3RJdGVtQWN0aW9uVmVy
YigpOworI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9XRUVLKQogICAgIC8vIHdlZWtG
b3JtYXRJbkxETUwoKSByZXR1cm5zIHdlZWsgYW5kIHllYXIgZm9ybWF0IGluIExETUwsIFVuaWNv
ZGUKQEAgLTIwNiw2ICsyMDgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIFN0cmluZyBodG1sU2VsZWN0TXVsdGlwbGVJdGVtcyhzaXplX3QgbnVtKTsK
KyAgICBTdHJpbmcgZmlsZUJ1dHRvbkNob29zZU1lZGlhRmlsZUxhYmVsKCk7CisgICAgU3RyaW5n
IGZpbGVCdXR0b25DaG9vc2VNdWx0aXBsZU1lZGlhRmlsZXNMYWJlbCgpOworICAgIFN0cmluZyBm
aWxlQnV0dG9uTm9NZWRpYUZpbGVTZWxlY3RlZExhYmVsKCk7CisgICAgU3RyaW5nIGZpbGVCdXR0
b25Ob01lZGlhRmlsZXNTZWxlY3RlZExhYmVsKCk7CiAjZW5kaWYKIAogICAgIFN0cmluZyBpbWFn
ZVRpdGxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IEludFNpemUmIHNpemUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTG9nZ2luZy5oCmluZGV4IDFiYWFiMzAzYTBlM2ZlYzVjMmUyNWJlNzA0NTIz
Y2VkM2I1YWI0NDcuLjRlZjIyZjYzMjY3NjQ2NjkwZmZkMmQ0NWIzY2YwNTExNTg5YTYyYTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKQEAgLTU0LDYgKzU0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIE0oTGl2ZUNvbm5lY3QpIFwKICAgICBNKExvYWRpbmcpIFwKICAgICBNKE1l
ZGlhKSBcCisgICAgTShNZW1vcnlQcmVzc3VyZSkgXAogICAgIE0oTmV0d29yaykgXAogICAgIE0o
Tm90WWV0SW1wbGVtZW50ZWQpIFwKICAgICBNKFBhZ2VDYWNoZSkgXApAQCAtNjEsNiArNjIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShQbHVnaW5zKSBcCiAgICAgTShQb3B1cEJsb2Nr
aW5nKSBcCiAgICAgTShQcm9ncmVzcykgXAorICAgIE0oUmVtb3RlSW5zcGVjdG9yKSBcCiAgICAg
TShSZXNvdXJjZUxvYWRpbmcpIFwKICAgICBNKFNRTERhdGFiYXNlKSBcCiAgICAgTShTcGVsbGlu
Z0FuZEdyYW1tYXIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVU
eXBlUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3Ry
eS5jcHAKaW5kZXggNzQ2NGUxOWVkMjQ1YjgxOGQ4MmFiYTRmYWQyNTIzMDI1MmQ2YzNjNC4uMGJi
NTA4YmRkNjBjYmE2ZDAxNjQ4NjU4OWJhNmI5ZTdlOWE2ZmU3MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKQEAgLTM2LDcgKzM2LDExIEBACiAKICNp
ZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2VDRy5oIgorI2lmICFQTEFURk9STShJT1Mp
CiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Cisj
ZWxzZQorI2luY2x1ZGUgPEltYWdlSU8vQ0dJbWFnZURlc3RpbmF0aW9uLmg+CisjZW5kaWYKICNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYKIApAQCAtMjI0LDYgKzIyOCwzNCBAQCBz
dGF0aWMgdm9pZCBpbml0aWFsaXplU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXMoKQogICAgIHN1cHBv
cnRlZEltYWdlTUlNRVR5cGVzLT5yZW1vdmUoImFwcGxpY2F0aW9uL3BkZiIpOwogICAgIHN1cHBv
cnRlZEltYWdlTUlNRVR5cGVzLT5yZW1vdmUoImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiKTsKIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBBZGQgbWFsZm9ybWVkIGltYWdlIG1pbWV0eXBlIGZv
ciBjb21wYXRpYmlsaXR5IHdpdGggTWFpbCBhbmQgdG8gaGFuZGxlIG1hbGZvcm1lZCBtaW1ldHlw
ZXMgZnJvbSB0aGUgbmV0CisgICAgLy8gVGhlc2Ugd2VyZSByZW1vdmVkIGZvciA8cmRhcjovL3By
b2JsZW0vNjU2NDUzOD4gUmUtZW5hYmxlIFVUSSBjb2RlIGluIFdlYkNvcmUgbm93IHRoYXQgTW9i
aWxlQ29yZVNlcnZpY2VzIGV4aXN0cworICAgIC8vIEJ1dCBNYWlsIHJlbGllcyBvbiBhdCBsZWFz
dCBpbWFnZS90aWYgcmVwb3J0ZWQgYXMgYmVpbmcgc3VwcG9ydGVkIChzaG91bGQgYmUgaW1hZ2Uv
dGlmZikuCisgICAgLy8gVGhpcyBjYW4gYmUgcmVtb3ZlZCB3aGVuIE1haWwgYWRkcmVzc2VzOgor
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83ODc5NTEwPiBNYWlsIHNob3VsZCB1c2Ugc3RhbmRhcmQg
aW1hZ2UgbWltZXR5cGVzIAorICAgIC8vIGFuZCB3ZSBmaXggc25pZmZpbmcgc28gdGhhdCBpdCBj
b3JyZWN0cyBpdGVtcyBzdWNoIGFzIGltYWdlL2pwZyAtPiBpbWFnZS9qcGVnLgorICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBtYWxmb3JtZWRNSU1FVHlwZXNbXSA9IHsKKyAgICAgICAgLy8gSlBFRyAo
aW1hZ2UvanBlZykKKyAgICAgICAgImltYWdlL2pwZyIsICJpbWFnZS9qcF8iLCAiaW1hZ2UvanBl
XyIsICJhcHBsaWNhdGlvbi9qcGciLCAiYXBwbGljYXRpb24veC1qcGciLCAiaW1hZ2UvcGlwZWci
LAorICAgICAgICAiaW1hZ2Uvdm5kLnN3aXRmdmlldy1qcGVnIiwgImltYWdlL3gteGJpdG1hcCIs
CisgICAgICAgIC8vIEdJRiAoaW1hZ2UvZ2lmKQorICAgICAgICAiaW1hZ2UvZ2lfIiwKKyAgICAg
ICAgLy8gUE5HIChpbWFnZS9wbmcpCisgICAgICAgICJhcHBsaWNhdGlvbi9wbmciLCAiYXBwbGlj
YXRpb24veC1wbmciLAorICAgICAgICAvLyBUSUZGIChpbWFnZS90aWZmKQorICAgICAgICAiaW1h
Z2UveC10aWYiLCAiaW1hZ2UvdGlmIiwgImltYWdlL3gtdGlmZiIsICJhcHBsaWNhdGlvbi90aWYi
LCAiYXBwbGljYXRpb24veC10aWYiLCAiYXBwbGljYXRpb24vdGlmZiIsCisgICAgICAgICJhcHBs
aWNhdGlvbi94LXRpZmYiLAorICAgICAgICAvLyBCTVAgKGltYWdlL2JtcCwgaW1hZ2UveC1iaXRt
YXApCisgICAgICAgICJpbWFnZS94LWJtcCIsICJpbWFnZS94LXdpbi1iaXRtYXAiLCAiaW1hZ2Uv
eC13aW5kb3dzLWJtcCIsICJpbWFnZS9tcy1ibXAiLCAiaW1hZ2UveC1tcy1ibXAiLAorICAgICAg
ICAiYXBwbGljYXRpb24vYm1wIiwgImFwcGxpY2F0aW9uL3gtYm1wIiwgImFwcGxpY2F0aW9uL3gt
d2luLWJpdG1hcCIsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJB
WV9MRU5HVEgobWFsZm9ybWVkTUlNRVR5cGVzKTsgKytpKSB7CisgICAgICAgIHN1cHBvcnRlZElt
YWdlTUlNRVR5cGVzLT5hZGQobWFsZm9ybWVkTUlNRVR5cGVzW2ldKTsKKyAgICAgICAgc3VwcG9y
dGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlcy0+YWRkKG1hbGZvcm1lZE1JTUVUeXBlc1tpXSk7Cisg
ICAgfQorI2VuZGlmCisKICNlbHNlCiAgICAgLy8gYXNzdW1lIHRoYXQgYWxsIGltcGxlbWVudGF0
aW9ucyBhdCBsZWFzdCBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgc3RhbmRhcmQKICAgICAvLyBpbWFn
ZSB0eXBlczoKQEAgLTMzMSw5ICszNjMsMTEgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1cHBv
cnRlZE5vbkltYWdlTWltZVR5cGVzKCkKICAgICAgICAgInRleHQvIiwKICAgICAgICAgImFwcGxp
Y2F0aW9uL3htbCIsCiAgICAgICAgICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLAorI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgICAgICJhcHBsaWNhdGlvbi92bmQud2FwLnhodG1sK3htbCIsCiAgICAg
ICAgICJhcHBsaWNhdGlvbi9yc3MreG1sIiwKICAgICAgICAgImFwcGxpY2F0aW9uL2F0b20reG1s
IiwKKyNlbmRpZgogICAgICAgICAiYXBwbGljYXRpb24vanNvbiIsCiAjaWYgRU5BQkxFKFNWRykK
ICAgICAgICAgImltYWdlL3N2Zyt4bWwiLApAQCAtNDQwLDcgKzQ3NCwxMSBAQCBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplVW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzKCkKICAgICAgICAgInRleHQveC1x
aWYiLAogICAgICAgICAidGV4dC94LWNzdiIsCiAgICAgICAgICJ0ZXh0L3gtdmNmIiwKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgICAgICAidGV4dC9ydGYiLAorI2Vsc2UKKyAgICAgICAgInRleHQv
dm5kLnN1bi5qMm1lLmFwcC1kZXNjcmlwdG9yIiwKKyNlbmRpZgogICAgIH07CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHR5cGVzKTsgKytpKQogICAgICAgdW5z
dXBwb3J0ZWRUZXh0TUlNRVR5cGVzLT5hZGQodHlwZXNbaV0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKaW5kZXggNWU4ZTdjYzNmYzIx
MGY2NjBiZTBkNmJhMTc0YjU4ODA3NGVkZDkyYi4uNjJlZTFhZDU2YTE5M2UzMTA0YTY4NDY4MzQ0
M2Q4OTM3ZGI1MTY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuY3BwCkBAIC00MCw2ICs0MCwxNCBAQCBNZW1vcnlQcmVzc3VyZUhhbmRs
ZXI6Ok1lbW9yeVByZXNzdXJlSGFuZGxlcigpCiAgICAgOiBtX2luc3RhbGxlZChmYWxzZSkKICAg
ICAsIG1fbGFzdFJlc3BvbmRUaW1lKDApCiAgICAgLCBtX2xvd01lbW9yeUhhbmRsZXIocmVsZWFz
ZU1lbW9yeSkKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IENhbiB3ZSBzaGFyZSBt
b3JlIG9mIHRoaXMgd2l0aCBPcGVuU291cmNlPworICAgICwgbV9yZWNlaXZlZE1lbW9yeVByZXNz
dXJlKDApCisgICAgLCBtX21lbW9yeVByZXNzdXJlUmVhc29uKE1lbW9yeVByZXNzdXJlUmVhc29u
Tm9uZSkKKyAgICAsIG1fY2xlYXJQcmVzc3VyZU9uTWVtb3J5UmVsZWFzZSh0cnVlKQorICAgICwg
bV9yZWxlYXNlTWVtb3J5QmxvY2soMCkKKyAgICAsIG1fb2JzZXJ2ZXIoMCkKKyNlbmRpZgogewog
fQogCkBAIC00OSw3ICs1Nyw5IEBAIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjppbnN0YWxs
KCkgeyB9CiB2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6dW5pbnN0YWxsKCkgeyB9CiB2b2lk
IE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6aG9sZE9mZih1bnNpZ25lZCkgeyB9CiB2b2lkIE1lbW9y
eVByZXNzdXJlSGFuZGxlcjo6cmVzcG9uZFRvTWVtb3J5UHJlc3N1cmUoKSB7IH0KKyNpZiAhUExB
VEZPUk0oSU9TKQogdm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnJlbGVhc2VNZW1vcnkoYm9v
bCkgeyB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKaW5kZXggOTUwYWU4NTJk
ZmUwOTA4ZWIzNDM4OWNmY2ZiNmI0MjZiOTRjNzk0Zi4uZWJmYjg0Y2ExMGI3ZmZlM2M5OTlkM2Jl
MTU1NDEzMWFiNjgzZjA3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVt
b3J5UHJlc3N1cmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmgKQEAgLTI5LDggKzI5LDIwIEBACiAjaW5jbHVkZSA8dGltZS5oPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKKyNpZiBQTEFURk9STShJT1MpCitlbnVtIE1lbW9yeVByZXNzdXJlUmVhc29uIHsKKyAg
ICBNZW1vcnlQcmVzc3VyZVJlYXNvbk5vbmUgPSAwIDw8IDAsCisgICAgTWVtb3J5UHJlc3N1cmVS
ZWFzb25WTVByZXNzdXJlID0gMSA8PCAwLAorICAgIE1lbW9yeVByZXNzdXJlUmVhc29uVk1TdGF0
dXMgPSAxIDw8IDEsCit9OworI2VuZGlmCisKIHR5cGVkZWYgdm9pZCAoKkxvd01lbW9yeUhhbmRs
ZXIpKGJvb2wgY3JpdGljYWwpOwogCiBjbGFzcyBNZW1vcnlQcmVzc3VyZUhhbmRsZXIgewpAQCAt
NDYsNiArNTgsMTYgQEAgcHVibGljOgogICAgICAgICBtX2xvd01lbW9yeUhhbmRsZXIgPSBoYW5k
bGVyOwogICAgIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogQ2FuIHdlIHNo
YXJlIG1vcmUgb2YgdGhpcyB3aXRoIE9wZW5Tb3VyY2U/CisgICAgdm9pZCBpbnN0YWxsTWVtb3J5
UmVsZWFzZUJsb2NrKHZvaWQgKF5yZWxlYXNlTWVtb3J5QmxvY2spKCksIGJvb2wgY2xlYXJQcmVz
c3VyZU9uTWVtb3J5UmVsZWFzZSA9IHRydWUpOworICAgIHZvaWQgc2V0UmVjZWl2ZWRNZW1vcnlQ
cmVzc3VyZShNZW1vcnlQcmVzc3VyZVJlYXNvbik7CisgICAgYm9vbCBoYXNSZWNlaXZlZE1lbW9y
eVByZXNzdXJlKCk7CisgICAgdm9pZCBjbGVhck1lbW9yeVByZXNzdXJlKCk7CisgICAgYm9vbCBz
aG91bGRXYWl0Rm9yTWVtb3J5Q2xlYXJNZXNzYWdlKCk7CisgICAgdm9pZCByZXNwb25kVG9NZW1v
cnlQcmVzc3VyZUlmTmVlZGVkKCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIHVuaW5z
dGFsbCgpOwogCkBAIC02MCw2ICs4MiwxNSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pbnN0YWxs
ZWQ7CiAgICAgdGltZV90IG1fbGFzdFJlc3BvbmRUaW1lOwogICAgIExvd01lbW9yeUhhbmRsZXIg
bV9sb3dNZW1vcnlIYW5kbGVyOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHVpbnQzMl90IG1f
cmVjZWl2ZWRNZW1vcnlQcmVzc3VyZTsKKyAgICB1aW50MzJfdCBtX21lbW9yeVByZXNzdXJlUmVh
c29uOworICAgIGJvb2wgbV9jbGVhclByZXNzdXJlT25NZW1vcnlSZWxlYXNlOworICAgIHZvaWQg
KF5tX3JlbGVhc2VNZW1vcnlCbG9jaykoKTsKKyAgICBDRlJ1bkxvb3BPYnNlcnZlclJlZiBtX29i
c2VydmVyOworICAgIE11dGV4IG1fb2JzZXJ2ZXJNdXRleDsKKyNlbmRpZgogfTsKICAKIC8vIEZ1
bmN0aW9uIHRvIG9idGFpbiB0aGUgZ2xvYmFsIG1lbW9yeSBwcmVzc3VyZSBvYmplY3QuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCmluZGV4IDU5
YmEyOWIzOWVhMDhkMGNlMjFhMWI2MDQ5ZGYwOGQwYTljZjA1ZGMuLmY3MzAzN2RjNmMxODI2MGUy
YTEyYjY2NzdhNzNiZWY0MTM2NmMyMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCkBAIC0zNiw2ICszNiwxNCBAQAogT0JKQ19DTEFTUyBO
U0V2ZW50OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisjaWZkZWYgX19PQkpDX18KK0Bj
bGFzcyBXZWJFdmVudDsKKyNlbHNlCitjbGFzcyBXZWJFdmVudDsKKyNlbmRpZgorI2VuZGlmCisK
ICNpZiBQTEFURk9STShHVEspCiB0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRL
ZXk7CiAjaW5jbHVkZSAiQ29tcG9zaXRpb25SZXN1bHRzLmgiCkBAIC0xMjcsNyArMTM1LDExIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQorI2lmICFQ
TEFURk9STShJT1MpCiAgICAgICAgIE5TRXZlbnQqIG1hY0V2ZW50KCkgY29uc3QgeyByZXR1cm4g
bV9tYWNFdmVudC5nZXQoKTsgfQorI2Vsc2UKKyAgICAgICAgV2ViRXZlbnQgKmV2ZW50KCkgY29u
c3QgeyByZXR1cm4gbV9FdmVudC5nZXQoKTsgfQorI2VuZGlmCiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKFdJTikKQEAgLTE3MCw3ICsxODIsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlm
CiAKICNpZiBQTEFURk9STShNQUMpCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgUmV0YWlu
UHRyPE5TRXZlbnQ+IG1fbWFjRXZlbnQ7CisjZWxzZQorICAgICAgICBSZXRhaW5QdHI8V2ViRXZl
bnQ+IG1fRXZlbnQ7CisjZW5kaWYKICNlbmRpZgogI2lmIFBMQVRGT1JNKEdUSykKICAgICAgICAg
R2RrRXZlbnRLZXkqIG1fZ2RrRXZlbnRLZXk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtTW91c2VFdmVudC5oCmluZGV4IDNhNDI1MzM2NTBlNjA0MDk5Y2RhMDE3N2ZiMTc3Yjli
OGViODYzZjMuLmQ2NGRkMjMwNzIzNTA4ODYwNTg2Nzk5ZDgwYWVmY2JkNGQxZjdiYjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCkBAIC01Nyw3ICs1
Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9idXR0b24oTm9CdXR0
b24pCiAgICAgICAgICAgICAsIG1fY2xpY2tDb3VudCgwKQogICAgICAgICAgICAgLCBtX21vZGlm
aWVyRmxhZ3MoMCkKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oSU9TKQogICAgICAgICAgICAgLCBtX2V2ZW50TnVtYmVyKDApCiAjZWxpZiBQTEFURk9S
TShXSU4pCiAgICAgICAgICAgICAsIG1fZGlkQWN0aXZhdGVXZWJWaWV3KGZhbHNlKQpAQCAtNzMs
NyArNzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fYnV0dG9uKGJ1
dHRvbikKICAgICAgICAgICAgICwgbV9jbGlja0NvdW50KGNsaWNrQ291bnQpCiAgICAgICAgICAg
ICAsIG1fbW9kaWZpZXJGbGFncygwKQotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShN
QUMpICYmICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICAsIG1fZXZlbnROdW1iZXIoMCkKICNl
bGlmIFBMQVRGT1JNKFdJTikKICAgICAgICAgICAgICwgbV9kaWRBY3RpdmF0ZVdlYlZpZXcoZmFs
c2UpCkBAIC0xMDUsNyArMTA1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQbGF0
Zm9ybU1vdXNlRXZlbnQoY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiwgSW50UG9pbnQpOwog
I2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZP
Uk0oSU9TKQogICAgICAgICBpbnQgZXZlbnROdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50
TnVtYmVyOyB9CiAjZW5kaWYKIApAQCAtMTI5LDcgKzEyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgaW50IG1fY2xpY2tDb3VudDsKICAgICAgICAgdW5zaWduZWQgbV9tb2RpZmll
ckZsYWdzOwogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRG
T1JNKElPUykKICAgICAgICAgaW50IG1fZXZlbnROdW1iZXI7CiAjZWxpZiBQTEFURk9STShXSU4p
CiAgICAgICAgIGJvb2wgbV9kaWRBY3RpdmF0ZVdlYlZpZXc7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1TY3JlZW4uaAppbmRleCA5MzM2YzdmNjQ1YWYwZmE5OTFmNGI1MzhmNmU0NDU5
NjU2NWQ1MzhmLi5hMjRlZGQ3OTFkOTM5N2JhYmVmODYyM2UzMDM5MTc5ODNlYmU1MDJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiBPQkpDX0NMQVNTIE5TU2NyZWVuOwogT0JKQ19D
TEFTUyBOU1dpbmRvdzsKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRS
WV9UWVBFUwpAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgRmxvYXRS
ZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kik7CiAgICAgdm9pZCBzY3JlZW5Db2xvclBy
b2ZpbGUoQ29sb3JQcm9maWxlJik7CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0o
TUFDKSAmJiAhUExBVEZPUk0oSU9TKQogICAgIE5TU2NyZWVuICpzY3JlZW5Gb3JXaW5kb3coTlNX
aW5kb3cgKik7CiAKICAgICBGbG9hdFJlY3QgdG9Vc2VyU3BhY2UoY29uc3QgTlNSZWN0JiwgTlNX
aW5kb3cgKmRlc3RpbmF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9S
dW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwCmluZGV4IGU5NDAwYTA5YzI4NmE0NDQwYzMyNjU5
ZTQ5ZTMwZTUwY2Q5ZTQ0ZGYuLjI2ZTQ5YmRiYjM5MmU2ZDE0OWFjNzc3NTcyYTkyNjQ3MDZjMmU5
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0
aW9uQ2hlY2tzLmNwcApAQCAtMzcsNyArMzcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
CiBzdGF0aWMgYm9vbCBtYWluQnVuZGxlSXNFcXVhbFRvKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRl
bnRpZmllclN0cmluZykKIHsKLSNpZiBVU0UoQ0YpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBj
b25zaWRlciBtZXJnaW5nIHRoaXMgZmlsZSB3aXRoIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lP
Uy5tbS4KKyAgICAvLyBUaGVuIHdlIGNhbiByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQu
CisjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oSU9TKQogICAgIENGQnVuZGxlUmVmIG1haW5CdW5k
bGUgPSBDRkJ1bmRsZUdldE1haW5CdW5kbGUoKTsKICAgICBpZiAoIW1haW5CdW5kbGUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1
bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGIzNzhiYWFkZGQwYjUxNWE4
ODZjYWY2MzFjOWJlMzI2YzRmZDZmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oCkBAIC0wLDAgKzEsNDkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1NfaAorI2RlZmluZSBS
dW50aW1lQXBwbGljYXRpb25DaGVja3NJT1NfaAorCisvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNp
ZGVyIG1lcmdpbmcgdGhpcyBmaWxlIHdpdGggUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmguCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgYXBwbGljYXRpb25Jc01vYmlsZU1haWwoKTsKK2Jv
b2wgYXBwbGljYXRpb25Jc01vYmlsZVNhZmFyaSgpOworYm9vbCBhcHBsaWNhdGlvbklzRHVtcFJl
bmRlclRyZWUoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc01vYmlsZVN0b3JlKCk7Citib29sIGFwcGxp
Y2F0aW9uSXNXZWJBcHAoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc09rQ3VwaWQoKTsKK2Jvb2wgYXBw
bGljYXRpb25Jc0ZhY2Vib29rKCk7Citib29sIGFwcGxpY2F0aW9uSXNFcGljdXJpb3VzKCk7Citi
b29sIGFwcGxpY2F0aW9uSXNEYWlqaXNlbkRpY3Rpb25hcnkoKTsKK2Jvb2wgYXBwbGljYXRpb25J
c05BU0FIRCgpOworYm9vbCBhcHBsaWNhdGlvbklzTUFTSCgpOworYm9vbCBhcHBsaWNhdGlvbklz
VGhlRWNvbm9taXN0T25JUGhvbmUoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc1dlYlByb2Nlc3MoKTsK
K2Jvb2wgYXBwbGljYXRpb25Jc0lCb29rc09uSU9TKCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPU19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWY0NDIwMzBjMjM1OWIzZmQxY2VkMTE1ZjU4MGM4MmVlMzZlNjBjMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrc0lPUy5tbQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIgorCisvLyBGSVhNRTog
V2Ugc2hvdWxkIGNvbnNpZGVyIG1lcmdpbmcgdGhpcyBmaWxlIHdpdGggUnVudGltZUFwcGxpY2F0
aW9uQ2hlY2tzLmNwcC4KKyNpZiBQTEFURk9STShJT1MpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworYm9vbCBhcHBsaWNhdGlvbklzTW9iaWxlTWFpbCgpCit7CisgICAgc3RhdGljIGJvb2wgaXNN
b2JpbGVNYWlsID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNF
cXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLm1vYmlsZW1haWwiXTsKKyAgICByZXR1cm4gaXNNb2Jp
bGVNYWlsOworfQorCitib29sIGFwcGxpY2F0aW9uSXNNb2JpbGVTYWZhcmkoKQoreworICAgIHN0
YXRpYyBib29sIGlzTW9iaWxlU2FmYXJpID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxl
SWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLm1vYmlsZXNhZmFyaSJdOwor
ICAgIHJldHVybiBpc01vYmlsZVNhZmFyaTsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzRHVtcFJl
bmRlclRyZWUoKQoreworICAgIHN0YXRpYyBib29sIGlzRHVtcFJlbmRlclRyZWUgPSBbW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20u
YXBwbGUuRHVtcFJlbmRlclRyZWUiXTsKKyAgICByZXR1cm4gaXNEdW1wUmVuZGVyVHJlZTsKK30K
KworYm9vbCBhcHBsaWNhdGlvbklzTW9iaWxlU3RvcmUoKQoreworICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzTW9iaWxlU3RvcmUgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlm
aWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uYXBwbGUuTW9iaWxlU3RvcmUiXTsKKyAgICByZXR1
cm4gaXNNb2JpbGVTdG9yZTsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzV2ViQXBwKCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBpc1dlYkFwcCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlk
ZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5hcHBsZS53ZWJhcHAiXTsKKyAgICByZXR1
cm4gaXNXZWJBcHA7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc09rQ3VwaWQoKQoreworICAgIHN0
YXRpYyBib29sIGlzT2tDdXBpZCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50
aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5va2N1cGlkLmFwcCJdOworICAgIHJldHVybiBp
c09rQ3VwaWQ7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc0ZhY2Vib29rKCkKK3sKKyAgICBzdGF0
aWMgYm9vbCBpc0ZhY2Vib29rID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRp
Zmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmZhY2Vib29rLkZhY2Vib29rIl07CisgICAgcmV0
dXJuIGlzRmFjZWJvb2s7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc0VwaWN1cmlvdXMoKQorewor
ICAgIHN0YXRpYyBib29sIGlzRXBpY3VyaW91cyA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1
bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5jb25kZW5ldC5FcGljdXJpb3Vz
Il07CisgICAgcmV0dXJuIGlzRXBpY3VyaW91czsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzRGFp
amlzZW5EaWN0aW9uYXJ5KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc0RhaWppc2VuRGljdGlvbmFy
eSA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0
cmluZzpAImpwLmNvLnNob2dha3VrYW4uZGFpamlzZW4yMDA5aSJdOworICAgIHJldHVybiBpc0Rh
aWppc2VuRGljdGlvbmFyeTsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzTkFTQUhEKCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBpc05BU0FIRCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlk
ZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImdvdi5uYXNhLk5BU0FIRCJdOworICAgIHJldHVy
biBpc05BU0FIRDsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzTUFTSCgpCit7CisgICAgc3RhdGlj
IGJvb2wgaXNNQVNIID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0g
aXNFcXVhbFRvU3RyaW5nOkAiY29tLm1hZ25hdGVpbnRlcmFjdGl2ZS5tYXNoZ2FtZSJdCisgICAg
ICAgIHx8IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxU
b1N0cmluZzpAImNvbS5tYWduYXRlaW50ZXJhY3RpdmUubWFzaGxpdGVnYW1lIl0KKyAgICAgICAg
fHwgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3Ry
aW5nOkAiY29tLm1hZ25hdGVpbnRlcmFjdGl2ZS5tYXNoY2hyaXN0bWFzIl0KKyAgICAgICAgfHwg
W1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5n
OkAiY29tLm1hZ25hdGVpbnRlcmFjdGl2ZS5tYXNoaGFsbG93ZWVuIl0KKyAgICAgICAgfHwgW1tb
TlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAi
Y29tLm1hZ25hdGVpbnRlcmFjdGl2ZS5tYXNodmFsZW50aW5lcyJdOworICAgIHJldHVybiBpc01B
U0g7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc1RoZUVjb25vbWlzdE9uSVBob25lKCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBpc1RoZUVjb25vbWlzdE9uSVBob25lID0gW1tbTlNCdW5kbGUgbWFpbkJ1
bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmVjb25vbWlzdC5p
cGhvbmUiXTsKKyAgICByZXR1cm4gaXNUaGVFY29ub21pc3RPbklQaG9uZTsKK30KKworLy8gRklY
TUU6IHRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB3aGVuIHRoZSBXZWJQcm9jZXNzIGlzIGNoYW5n
ZWQgdG8gYW4gWFBDIHNlcnZpY2UuCitib29sIGFwcGxpY2F0aW9uSXNXZWJQcm9jZXNzKCkKK3sK
KyAgICBzdGF0aWMgYm9vbCBpc1dlYlByb2Nlc3MgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBi
dW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uYXBwbGUuV2ViS2l0LldlYkNv
bnRlbnQiXSB8fCBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0Vx
dWFsVG9TdHJpbmc6QCJjb20uYXBwbGUuV2ViUHJvY2VzcyJdOworICAgIHJldHVybiBpc1dlYlBy
b2Nlc3M7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc0lCb29rc09uSU9TKCkKK3sKKyAgICBzdGF0
aWMgYm9vbCBpc0lCb29rc09uSU9TID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRl
bnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLmlCb29rcyJdOworICAgIHJldHVy
biBpc0lCb29rc09uSU9TOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5j
cHAKaW5kZXggNzg3ZmIxMjg0MzVkYjY0NzA0OWZiMzFiOGU1NzBmNmYwOGE5NzdlZC4uZjhkYjI1
MGMwMTg2ZjY0MGNmNjMyMmJmZmY0NDM5YzI4MzkwNGVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtMzksNyArMzksNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLSNpZiAhRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisjaWYgIUVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKSAmJiAhUExBVEZPUk0oSU9TKQogUGFzc093blB0cjxTY3JvbGxBbmlt
YXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFy
ZWEpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxl
QXJlYSkpOwpAQCAtMTIzLDYgKzEyMywxMyBAQCBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVX
aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKICAgICByZXR1cm4gaGFuZGxl
ZDsKIH0KIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCitib29sIFNjcm9sbEFuaW1hdG9yOjpo
YW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorI2VuZGlmCisKIHZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNldEN1cnJlbnRQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKIHsKICAgICBtX2N1cnJlbnRQb3NYID0g
cG9zaXRpb24ueCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5k
ZXggMjBlOWE1NmRkMjRjYmIzMmQzODY4NTEzNmUxYmQ3ZTVhM2I0NzdjMS4uZjBkYzk4NDYzOGRl
ODdlNDk5NjNlODdiZjkwNWU3OTMzMWQyY2JkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5oCkBAIC00MCw2ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBTY3Jv
bGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJhcjsKIApAQCAtNjIsNiArNjMsMTAgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50Jik7CiAKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpOworI2VuZGlmCisKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnRQaGFzZShQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSkgeyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxUeXBlcy5oCmluZGV4IGY2MzBkYWUyNjU4M2JjMDkyNTAyYWI3ODNjMjM5Y2NlYzZkNGRm
MmQuLjk2NDg2YTliZDJkNTA0NzhlMDczMDZkNzU5NDVmNWNlZGVjOWFjYTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaApAQCAtMjYsNiArMjYsOSBAQAogI2lmbmRlZiBTY3Jv
bGxUeXBlc19oCiAjZGVmaW5lIFNjcm9sbFR5cGVzX2gKIAorLy8gV1RGX1BMQVRGT1JNX0lPUwor
I2lmZGVmIF9fY3BsdXNwbHVzCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGVudW0gU2Ny
b2xsRGlyZWN0aW9uIHsKQEAgLTE3OCw0ICsxODEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgfTsKIH0KIAorI2VuZGlmIC8vIF9fY3BsdXNwbHVzCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAppbmRleCBmZjIyYzRkMGU5NjU0YjFiZGIzZTE0NjdkNGRj
OTc0ODgyMDcyOWQ5Li45YjMzYzMxZGFmMTc2ZDI1YTQ3MWIyZTQ3ZTcyNGJmNDU3ZjMyNzNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApAQCAtMjQxLDggKzI0MSwxMCBA
QCBJbnRTaXplIFNjcm9sbFZpZXc6OnVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKFZpc2libGVD
b250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYgogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAg
ICAgICByZXR1cm4gcGxhdGZvcm1WaXNpYmxlQ29udGVudFNpemUoc2Nyb2xsYmFySW5jbHVzaW9u
ID09IEluY2x1ZGVTY3JvbGxiYXJzKTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFt
X2ZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1fZml4
ZWRWaXNpYmxlQ29udGVudFJlY3Quc2l6ZSgpOworI2VuZGlmCiAKICAgICBpbnQgdmVydGljYWxT
Y3JvbGxiYXJXaWR0aCA9IDA7CiAgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAw
OwpAQCAtMjY0LDggKzI2NiwxMCBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50
UmVjdChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2NvbAogICAgIGlmIChw
bGF0Zm9ybVdpZGdldCgpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1WaXNpYmxlQ29udGVudFJl
Y3Qoc2NvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpOwogCisjaWYgIVBMQVRG
T1JNKElPUykKICAgICBpZiAoIW1fZml4ZWRWaXNpYmxlQ29udGVudFJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gbV9maXhlZFZpc2libGVDb250ZW50UmVjdDsKKyNlbmRpZgogCiAgICAg
RmxvYXRTaXplIHZpc2libGVDb250ZW50U2l6ZSA9IHVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXpl
KHNjb2xsYmFySW5jbHVzaW9uKTsKICAgICB2aXNpYmxlQ29udGVudFNpemUuc2NhbGUoMSAvIHZp
c2libGVDb250ZW50U2NhbGVGYWN0b3IoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3
LmgKaW5kZXggMjBjNjljZWVlYTZlMDUzYjQ3NjA3MTAzYmY3NGFlOTE3MTg4OTMwNS4uZTUyODVm
NGZkYmY0MzlkMGQ4NzMwMmExODc5MWRlZDY5NmIyZTc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuaApAQCAtMzUsNiArMzUsMjQgQEAKIAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBXQUtTY3Jv
bGxWaWV3OworQGNsYXNzIFdBS1ZpZXc7CisjZWxzZQorY2xhc3MgV0FLU2Nyb2xsVmlldzsKK2Ns
YXNzIFdBS1ZpZXc7CisjZW5kaWYKKworI2lmbmRlZiBOU1Njcm9sbFZpZXcKKyNkZWZpbmUgTlNT
Y3JvbGxWaWV3IFdBS1Njcm9sbFZpZXcKKyNlbmRpZgorCisjaWZuZGVmIE5TVmlldworI2RlZmlu
ZSBOU1ZpZXcgV0FLVmlldworI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiAjaWYg
UExBVEZPUk0oTUFDKSAmJiBkZWZpbmVkIF9fT0JKQ19fCiBAcHJvdG9jb2wgV2ViQ29yZUZyYW1l
U2Nyb2xsVmlldzsKICNlbmRpZgpAQCAtNDMsNiArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBUaWxlQ2FjaGU7
CiAKIGNsYXNzIFNjcm9sbFZpZXcgOiBwdWJsaWMgV2lkZ2V0LCBwdWJsaWMgU2Nyb2xsYWJsZUFy
ZWEgewogcHVibGljOgpAQCAtMTQxLDkgKzE2MCwyMCBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIHNl
dEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0IGluc3RlYWQgZm9yIHRoZSBtYWluZnJhbWUsIHRob3Vn
aCB0aGlzIG11c3QgYmUgdXBkYXRlZCBtYW51YWxseSwgZS5nIGp1c3QgYmVmb3JlIHJlc3VtaW5n
IHRoZSBwYWdlCiAgICAgLy8gd2hpY2ggdXN1YWxseSB3aWxsIGhhcHBlbiB3aGVuIHBhbm5pbmcs
IHBpbmNoaW5nIGFuZCByb3RhdGlvbiBlbmRzLCBvciB3aGVuIHNjYWxlIG9yIHBvc2l0aW9uIGFy
ZSBjaGFuZ2VkIG1hbnVhbGx5LgogICAgIHZpcnR1YWwgSW50UmVjdCB2aXNpYmxlQ29udGVudFJl
Y3QoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzID0gRXhjbHVkZVNjcm9sbGJh
cnMpIGNvbnN0IE9WRVJSSURFOworI2lmICFQTEFURk9STShJT1MpCiAgICAgdmlydHVhbCB2b2lk
IHNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50
UmVjdCkgeyBtX2ZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0OyB9
CiAgICAgSW50UmVjdCBmaXhlZFZpc2libGVDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Zml4ZWRWaXNpYmxlQ29udGVudFJlY3Q7IH0KKyNlbmRpZgogICAgIEludFNpemUgdmlzaWJsZVNp
emUoKSBjb25zdCB7IHJldHVybiB2aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCk7IH0KKyNpZiBQ
TEFURk9STShJT1MpCisgICAgLy8gVGhpcyBpcyB0aGUgYXJlYSB0aGF0IGlzIG5vdCBjb3ZlcmVk
IGJ5IFVJIGVsZW1lbnRzLgorICAgIEludFJlY3QgYWN0dWFsVmlzaWJsZUNvbnRlbnRSZWN0KCkg
Y29uc3Q7CisgICAgLy8gVGhpcyBpcyB0aGUgYXJlYSB0aGF0IGlzIHBhcnRpYWxseSBvciBmdWxs
eSBleHBvc2VkLCBhbmQgbWF5IGV4dGVuZCB1bmRlciBvdmVybGFwcGluZyBVSSBlbGVtZW50cy4K
KyAgICBJbnRSZWN0IHZpc2libGVFeHRlbnRDb250ZW50UmVjdCgpIGNvbnN0OworCisgICAgdm9p
ZCBzZXRBY3R1YWxTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOworICAgIFRpbGVDYWNo
ZSogdGlsZUNhY2hlKCk7CisjZW5kaWYKICAgICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiB2aXNpYmxlQ29udGVudFJlY3QoKS53aWR0aCgpOyB9CiAg
ICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHZp
c2libGVDb250ZW50UmVjdCgpLmhlaWdodCgpOyB9CiAKQEAgLTE4MSw2ICsyMTEsMTEgQEAgcHVi
bGljOgogICAgIGludCBzY3JvbGxYKCkgY29uc3QgeyByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS54
KCk7IH0KICAgICBpbnQgc2Nyb2xsWSgpIGNvbnN0IHsgcmV0dXJuIHNjcm9sbFBvc2l0aW9uKCku
eSgpOyB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgaW50IGFjdHVhbFNjcm9sbFgoKSBjb25z
dCB7IHJldHVybiBhY3R1YWxWaXNpYmxlQ29udGVudFJlY3QoKS54KCk7IH0KKyAgICBpbnQgYWN0
dWFsU2Nyb2xsWSgpIGNvbnN0IHsgcmV0dXJuIGFjdHVhbFZpc2libGVDb250ZW50UmVjdCgpLnko
KTsgfQorI2VuZGlmCisKICAgICAvLyBzY3JvbGxPZmZzZXQoKSBhbmNob3JzIGl0cyAoMCwwKSBw
b2ludCBhdCB0aGUgdG9wIGVuZCBvZiB0aGUgaGVhZGVyIGlmIHRoaXMgU2Nyb2xsYWJsZUFyZWEK
ICAgICAvLyBoYXMgYSBoZWFkZXIsIHNvIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSB0b3RhbENvbnRl
bnRzU2l6ZSgpLiBzY3JvbGxPZmZzZXRSZWxhdGl2ZVRvRG9jdW1lbnQoKQogICAgIC8vIGFuY2hv
cnMgKDAsMCkgYXQgdGhlIHRvcCBvZiB0aGUgRG9jdW1lbnQsIHdoaWNoIHdpbGwgYmUgYmVuZWF0
aCBhbnkgaGVhZGVycywgc28gaXQgaXMgcmVsYXRpdmUKQEAgLTM1NCw3ICszODksOSBAQCBwcml2
YXRlOgogICAgIC8vIHdoZXRoZXIgaXQgaXMgc2FmZSB0byBibGl0IG9uIHNjcm9sbC4KICAgICBi
b29sIG1fY2FuQmxpdE9uU2Nyb2xsOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBJbnRSZWN0
IG1fZml4ZWRWaXNpYmxlQ29udGVudFJlY3Q7CisjZW5kaWYKICAgICBJbnRTaXplIG1fc2Nyb2xs
T2Zmc2V0OyAvLyBGSVhNRTogV291bGQgcmF0aGVyIHN0b3JlIHRoaXMgYXMgYSBwb3NpdGlvbiwg
YnV0IHdlIHdpbGwgd2FpdCB0byBtYWtlIHRoaXMgY2hhbmdlIHVudGlsIG1vcmUgY29kZSBpcyBz
aGFyZWQuCiAgICAgSW50UG9pbnQgbV9jYWNoZWRTY3JvbGxQb3NpdGlvbjsKICAgICBJbnRTaXpl
IG1fZml4ZWRMYXlvdXRTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuY3BwCmluZGV4IGMxOGRlYTdlZGM0OTFhZDVmZDUyYjY2Y2QyM2Y5Y2JmNTgyZDRlOTkuLjJi
Yzg0YzVjMWIyOTQzYTMyMWI0MDhjNzg1M2UwYjk5NTJkMzZmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTE3Niw2ICsxNzYsMTMgQEAgYm9vbCBT
Y3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
IHdoZWVsRXZlbnQpCiAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCktPmhhbmRsZVdoZWVsRXZl
bnQod2hlZWxFdmVudCk7CiB9CiAKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorYm9vbCBTY3Jv
bGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRv
dWNoRXZlbnQpCit7CisgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCktPmhhbmRsZVRvdWNoRXZl
bnQodG91Y2hFdmVudCk7Cit9CisjZW5kaWYKKwogLy8gTk9URTogT25seSBjYWxsZWQgZnJvbSBJ
bnRlcm5hbHMgZm9yIHRlc3RpbmcuCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPZmZz
ZXRGcm9tSW50ZXJuYWxzKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7CkBAIC0zODksNiArMzk2
LDMxIEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNlcnZpY2VTY3JvbGxBbmltYXRpb25zKCkKICAg
ICAgICAgc2Nyb2xsQW5pbWF0b3ItPnNlcnZpY2VTY3JvbGxBbmltYXRpb25zKCk7CiB9CiAKKyNp
ZiBQTEFURk9STShJT1MpCitib29sIFNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZEluQm90aERpcmVj
dGlvbnMoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlz
UGlubmVkSG9yaXpvbnRhbGx5SW5EaXJlY3Rpb24oc2Nyb2xsRGVsdGEud2lkdGgoKSkgJiYgaXNQ
aW5uZWRWZXJ0aWNhbGx5SW5EaXJlY3Rpb24oc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpOworfQorCiti
b29sIFNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZEhvcml6b250YWxseUluRGlyZWN0aW9uKGludCBo
b3Jpem9udGFsU2Nyb2xsRGVsdGEpIGNvbnN0Cit7CisgICAgaWYgKGhvcml6b250YWxTY3JvbGxE
ZWx0YSA8IDAgJiYgaXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01pbmltdW1Qb3NpdGlvbigp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbERlbHRhID4g
MCAmJiBpc0hvcml6b250YWxTY3JvbGxlclBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxhYmxl
QXJlYTo6aXNQaW5uZWRWZXJ0aWNhbGx5SW5EaXJlY3Rpb24oaW50IHZlcnRpY2FsU2Nyb2xsRGVs
dGEpIGNvbnN0Cit7CisgICAgaWYgKHZlcnRpY2FsU2Nyb2xsRGVsdGEgPCAwICYmIGlzVmVydGlj
YWxTY3JvbGxlclBpbm5lZFRvTWluaW11bVBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGlmICh2ZXJ0aWNhbFNjcm9sbERlbHRhID4gMCAmJiBpc1ZlcnRpY2FsU2Nyb2xsZXJQ
aW5uZWRUb01heGltdW1Qb3NpdGlvbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiBJbnRQb2ludCBTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewogICAgIGludCB4ID0gaG9yaXpvbnRh
bFNjcm9sbGJhcigpID8gaG9yaXpvbnRhbFNjcm9sbGJhcigpLT52YWx1ZSgpIDogMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCmluZGV4IGUzMzczZTRjOTFjOWUyNWVl
MDMyNTdiNzRmNjhlZDRjY2JmODYzMjYuLmYxNzQ3MWQ0ZDdkMThlYWI0OWIyY2Q0NWE3YWM1N2Zj
NWYxYjVjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaApAQCAt
MzMsNiArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CiBj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBQ
bGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBTY3JvbGxBbmltYXRvcjsKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCkBAIC01Nyw2ICs1OCwxOSBAQCBwdWJsaWM6CiAKICAgICBib29s
IGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKKyNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorICAgIHZpcnR1YWwgYm9vbCBpc1RvdWNoU2Nyb2xsYWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZVRvdWNoRXZlbnQo
Y29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50Jik7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykK
KyAgICB2aXJ0dWFsIGJvb2wgaXNPdmVyZmxvd1Njcm9sbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGRpZEVuZFNjcm9sbCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVTY3JvbGwo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNVc2VyU2Nyb2xsKGJvb2wpIHsgfQorI2VuZGlm
CisKICAgICAvLyBGdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIGlmIHlvdSBjYW4gc2Nyb2xsIHBh
c3QgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuCiAgICAgYm9vbCBjb25zdHJhaW5zU2Nyb2xsaW5n
VG9Db250ZW50RWRnZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RyYWluc1Njcm9sbGluZ1RvQ29u
dGVudEVkZ2U7IH0KICAgICB2b2lkIHNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdl
KGJvb2wgY29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UpIHsgbV9jb25zdHJhaW5zU2Ny
b2xsaW5nVG9Db250ZW50RWRnZSA9IGNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlOyB9
CkBAIC0xODIsNiArMTk2LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVB
bmltYXRpb24oKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgc2VydmljZVNjcm9sbEFuaW1h
dGlvbnMoKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIGlzSG9yaXpvbnRhbFNjcm9s
bGVyUGlubmVkVG9NaW5pbXVtUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiAhaG9yaXpvbnRhbFNj
cm9sbGJhcigpIHx8IHNjcm9sbFBvc2l0aW9uKGhvcml6b250YWxTY3JvbGxiYXIoKSkgPD0gbWlu
aW11bVNjcm9sbFBvc2l0aW9uKCkueCgpOyB9CisgICAgYm9vbCBpc0hvcml6b250YWxTY3JvbGxl
clBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gIWhvcml6b250YWxTY3Jv
bGxiYXIoKSB8fCBzY3JvbGxQb3NpdGlvbihob3Jpem9udGFsU2Nyb2xsYmFyKCkpID49IG1heGlt
dW1TY3JvbGxQb3NpdGlvbigpLngoKTsgfQorICAgIGJvb2wgaXNWZXJ0aWNhbFNjcm9sbGVyUGlu
bmVkVG9NaW5pbXVtUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiAhdmVydGljYWxTY3JvbGxiYXIo
KSB8fCBzY3JvbGxQb3NpdGlvbih2ZXJ0aWNhbFNjcm9sbGJhcigpKSA8PSBtaW5pbXVtU2Nyb2xs
UG9zaXRpb24oKS55KCk7IH0KKyAgICBib29sIGlzVmVydGljYWxTY3JvbGxlclBpbm5lZFRvTWF4
aW11bVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gIXZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgc2Ny
b2xsUG9zaXRpb24odmVydGljYWxTY3JvbGxiYXIoKSkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkueSgpOyB9IAorCisgICAgYm9vbCBpc1Bpbm5lZEluQm90aERpcmVjdGlvbnMoY29uc3QgSW50
U2l6ZSYpIGNvbnN0OyAKKyAgICBib29sIGlzUGlubmVkSG9yaXpvbnRhbGx5SW5EaXJlY3Rpb24o
aW50IGhvcml6b250YWxTY3JvbGxEZWx0YSkgY29uc3Q7IAorICAgIGJvb2wgaXNQaW5uZWRWZXJ0
aWNhbGx5SW5EaXJlY3Rpb24oaW50IHZlcnRpY2FsU2Nyb2xsRGVsdGEpIGNvbnN0OworI2VuZGlm
CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBUaWxlZEJh
Y2tpbmcqIHRpbGVkQmFja2luZygpIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKaW5kZXggYjk4Y2NhMzExZTQ1NTM0ZjVhNGEyY2Q5Njlk
ZGNjMDRjODZjYTc2OS4uNDFmN2JhNDhlYzhlY2MyYjMzNjlhMWQ2ZGVkMTdiMjU0NzliZTQzZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCkBAIC0zMzQsNiArMzM0LDcgQEAg
dm9pZCBTY3JvbGxiYXI6OnNldFByZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQgcGFydCkKICAgICAg
ICAgdGhlbWUoKS0+aW52YWxpZGF0ZVBhcnQodGhpcywgbV9ob3ZlcmVkUGFydCk7CiB9CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAgICAgaWYgKG1fcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0
KSB7CkBAIC0zNzIsNiArMzczLDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZgog
CiB2b2lkIFNjcm9sbGJhcjo6bW91c2VFbnRlcmVkKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmgKaW5kZXggZTViMzI5ZGFiYjEyNTYyZDY5ZGUyZDYyNWJiZjQ4NDk5YjZkMmFmYy4u
Y2QxZTg5NzAzOGVlZWFiNWQxNzMzYTI1ZjU3NGZmYTU3MDE3MjhiOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyLmgKQEAgLTEyNSw3ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgLy8gVGhl
c2UgbWV0aG9kcyBhcmUgdXNlZCBmb3IgcGxhdGZvcm0gc2Nyb2xsYmFycyB0byBnaXZlIDpob3Zl
ciBmZWVkYmFjay4gIFRoZXkgd2lsbCBub3QgZ2V0IGNhbGxlZAogICAgIC8vIHdoZW4gdGhlIG1v
dXNlIHdlbnQgZG93biBpbiBhIHNjcm9sbGJhciwgc2luY2UgaXQgaXMgYXNzdW1lZCB0aGUgc2Ny
b2xsYmFyIHdpbGwgc3RhcnQKICAgICAvLyBncmFiYmluZyBhbGwgZXZlbnRzIGluIHRoYXQgY2Fz
ZSBhbnl3YXkuCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBib29sIG1vdXNlTW92ZWQoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisjZW5kaWYKICAgICB2b2lkIG1vdXNlRW50ZXJlZCgpOwog
ICAgIGJvb2wgbW91c2VFeGl0ZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5jcHAKaW5kZXggZGI4MjNjZDdmYjYyNGZmMDQwM2VmYWJmN2M2MmRlMmYwZmE3ZGRlNS4u
MWRhZDc4NzIzMmIzMDYxZDE5NjdjOWRlYjkzYjg2NjE3ODg1YzdiYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC02Niw2ICs2Niw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBmcmVlU2VnbWVudChjaGFyKiBwKQogCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZl
cigpCiAgICAgOiBtX3NpemUoMCkKKyAgICAsIG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGZh
bHNlKQogI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQogICAgICwgbV9pc01lbW9yeU1hcHBl
ZChmYWxzZSkKICAgICAsIG1fZGlza0ltYWdlQ2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxp
ZERpc2tDYWNoZUlkKQpAQCAtNzgsNiArNzksNyBAQCBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZl
cigpCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcih1bnNpZ25lZCBzaXplKQogICAgIDogbV9z
aXplKHNpemUpCiAgICAgLCBtX2J1ZmZlcihzaXplKQorICAgICwgbV9zaG91bGRVc2VQdXJnZWFi
bGVNZW1vcnkoZmFsc2UpCiAjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCiAgICAgLCBtX2lz
TWVtb3J5TWFwcGVkKGZhbHNlKQogICAgICwgbV9kaXNrSW1hZ2VDYWNoZUlkKERpc2tJbWFnZUNh
Y2hlOjppbnZhbGlkRGlza0NhY2hlSWQpCkBAIC04OSw2ICs5MSw3IEBAIFNoYXJlZEJ1ZmZlcjo6
U2hhcmVkQnVmZmVyKHVuc2lnbmVkIHNpemUpCiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVy
KGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUpCiAgICAgOiBtX3NpemUoMCkKKyAgICAs
IG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGZhbHNlKQogI2lmIEVOQUJMRShESVNLX0lNQUdF
X0NBQ0hFKQogICAgICwgbV9pc01lbW9yeU1hcHBlZChmYWxzZSkKICAgICAsIG1fZGlza0ltYWdl
Q2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlkKQpAQCAtMTAxLDYgKzEw
NCw3IEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2ln
bmVkIHNpemUpCiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVuc2lnbmVkIGNo
YXIqIGRhdGEsIHVuc2lnbmVkIHNpemUpCiAgICAgOiBtX3NpemUoMCkKKyAgICAsIG1fc2hvdWxk
VXNlUHVyZ2VhYmxlTWVtb3J5KGZhbHNlKQogI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQog
ICAgICwgbV9pc01lbW9yeU1hcHBlZChmYWxzZSkKICAgICAsIG1fZGlza0ltYWdlQ2FjaGVJZChE
aXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlkKQpAQCAtMjEwLDYgKzIxNCwxMiBAQCB2
b2lkIFNoYXJlZEJ1ZmZlcjo6c2V0TWVtb3J5TWFwcGVkTm90aWZpY2F0aW9uQ2FsbGJhY2soTWVt
b3J5TWFwcGVkTm90aWZ5Q2FsbGJhYwogfQogI2VuZGlmCiAKKy8vIFRyeSB0byBjcmVhdGUgYSBQ
dXJnZWFibGVCdWZmZXIuIFdlIGNhbiBmYWlsIHRvIGNyZWF0ZSBvbmUgZm9yIGFueSBvZiB0aGUK
Ky8vIGZvbGxvd2luZyByZWFzb25zOgorLy8gICAtIHNob3VsZFVzZVB1cmdlYWJsZU1lbW9yeSBp
cyBzZXQgdG8gZmFsc2UuCisvLyAgIC0gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyBsZXNzIHRo
YW4gdGhlIG1pbmltdW0gc2l6ZSByZXF1aXJlZCBieQorLy8gICAgIFB1cmdlYWJsZUJ1ZmZlciAo
Y3VycmVudGx5IDE2aykuCisvLyAgIC0gUHVyZ2VhYmxlQnVmZmVyOjpjcmVhdGVVbmluaXRpYWxp
emVkKCkgY2FsbCBmYWlscy4KIHZvaWQgU2hhcmVkQnVmZmVyOjpjcmVhdGVQdXJnZWFibGVCdWZm
ZXIoKSBjb25zdAogewogICAgIGlmIChtX3B1cmdlYWJsZUJ1ZmZlcikKQEAgLTIyNiw2ICsyMzYs
OSBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlUHVyZ2VhYmxlQnVmZmVyKCkgY29uc3QKICAg
ICBpZiAoIWhhc09uZVJlZigpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoIW1fc2hvdWxk
VXNlUHVyZ2VhYmxlTWVtb3J5KQorICAgICAgICByZXR1cm47CisKICAgICBjaGFyKiBkZXN0aW5h
dGlvbiA9IDA7CiAgICAgbV9wdXJnZWFibGVCdWZmZXIgPSBQdXJnZWFibGVCdWZmZXI6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQobV9zaXplLCBkZXN0aW5hdGlvbik7CiAgICAgaWYgKCFtX3B1cmdlYWJs
ZUJ1ZmZlcikKQEAgLTI1Myw3ICsyNjYsOSBAQCBjb25zdCBjaGFyKiBTaGFyZWRCdWZmZXI6OmRh
dGEoKSBjb25zdAogICAgIGlmIChjb25zdCBjaGFyKiBidWZmZXIgPSBzaW5nbGVEYXRhQXJyYXlC
dWZmZXIoKSkKICAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKICNlbmRpZgotICAgIAorCisgICAgY3Jl
YXRlUHVyZ2VhYmxlQnVmZmVyKCk7CisKICAgICBpZiAobV9wdXJnZWFibGVCdWZmZXIpCiAgICAg
ICAgIHJldHVybiBtX3B1cmdlYWJsZUJ1ZmZlci0+ZGF0YSgpOwogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCA4MjcxOGIzNWMwZDAzN2I5ZmI1ZWI1NmE4OWRk
MTUzNWI4NzQ5N2EyLi4xMDZjODMwZDY1MWY5ZWQ3ZTU2NmMwMTg4ZDJkNzBjNTMyYzY4MDI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtMTM4LDYgKzEzOCw4IEBA
IHB1YmxpYzoKICAgICAvLyAgICAgIH0KICAgICB1bnNpZ25lZCBnZXRTb21lRGF0YShjb25zdCBj
aGFyKiYgZGF0YSwgdW5zaWduZWQgcG9zaXRpb24gPSAwKSBjb25zdDsKIAorICAgIHZvaWQgc2hv
dWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGJvb2wgdXNlKSB7IG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVt
b3J5ID0gdXNlOyB9CisKICNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkKICAgICBlbnVtIE1l
bW9yeU1hcHBpbmdTdGF0ZSB7IFF1ZXVlZEZvck1hcHBpbmcsIFByZXZpb3VzbHlRdWV1ZWRGb3JN
YXBwaW5nLCBTdWNjZXNzQWxyZWFkeU1hcHBlZCwgRmFpbHVyZUNhY2hlRnVsbCB9OwogCkBAIC0x
ODcsNiArMTg5LDcgQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fc2l6ZTsKICAgICBtdXRh
YmxlIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKKyAgICBib29sIG1fc2hvdWxkVXNlUHVyZ2VhYmxl
TWVtb3J5OwogICAgIG11dGFibGUgT3duUHRyPFB1cmdlYWJsZUJ1ZmZlcj4gbV9wdXJnZWFibGVC
dWZmZXI7CiAjaWYgVVNFKE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKQogICAgIG11dGFi
bGUgVmVjdG9yPFJldGFpblB0cjxDRkRhdGFSZWY+PiBtX2RhdGFBcnJheTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1ZGRlblRlcm1pbmF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TdWRkZW5UZXJtaW5hdGlvbi5oCmluZGV4IDcyNTIxNDkwNjJmNDMzYWIz
M2M2ODgwYzk1NTRiOWIzYmRmYWRjOTIuLjgwOTY3YzZjMDhjOWZjNzJhMTEyZjFkMzBlYmNmMmYw
ODEyNWQzZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1ZGRlblRlcm1p
bmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VkZGVuVGVybWluYXRpb24u
aApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdm9pZCBkaXNhYmxl
U3VkZGVuVGVybWluYXRpb24oKTsKICAgICB2b2lkIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7
CiAKLSNpZiAhUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKElPUykgfHwgIVBMQVRGT1JNKE1B
QykKICAgICBpbmxpbmUgdm9pZCBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKSB7IH0KICAgICBp
bmxpbmUgdm9pZCBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpIHsgfQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdXBwbGVtZW50YWJsZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU3VwcGxlbWVudGFibGUuaAppbmRleCAyNzdhYWVmODBlZjZjYzdiYTNi
ZTJhOTg5YzJmNWZmM2RlZDJjNzUxLi5jMjAyZjJjNDIxZWUwODZiZDFjZmU0NmMwNzQzYWNlNjdm
Njc3NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdXBwbGVtZW50YWJs
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmgKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCkBAIC05OSwyMCArMTAwLDIw
IEBAIGNsYXNzIFN1cHBsZW1lbnRhYmxlIHsKIHB1YmxpYzoKICAgICB2b2lkIHByb3ZpZGVTdXBw
bGVtZW50KGNvbnN0IGNoYXIqIGtleSwgUGFzc093blB0cjxTdXBwbGVtZW50PFQ+PiBzdXBwbGVt
ZW50KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdGhyZWFkSWQgPT0gY3VycmVudFRocmVhZCgp
KTsKKyAgICAgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3Ro
cmVhZElkKSk7CiAgICAgICAgIEFTU0VSVCghbV9zdXBwbGVtZW50cy5nZXQoa2V5KSk7CiAgICAg
ICAgIG1fc3VwcGxlbWVudHMuc2V0KGtleSwgc3VwcGxlbWVudCk7CiAgICAgfQogCiAgICAgdm9p
ZCByZW1vdmVTdXBwbGVtZW50KGNvbnN0IGNoYXIqIGtleSkKICAgICB7Ci0gICAgICAgIEFTU0VS
VChtX3RocmVhZElkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAgIEFTU0VSVChjYW5BY2Nl
c3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90aHJlYWRJZCkpOwogICAgICAgICBtX3N1cHBs
ZW1lbnRzLnJlbW92ZShrZXkpOwogICAgIH0KIAogICAgIFN1cHBsZW1lbnQ8VD4qIHJlcXVpcmVT
dXBwbGVtZW50KGNvbnN0IGNoYXIqIGtleSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3RocmVh
ZElkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQobV90aHJlYWRJZCkpOwogICAgICAgICByZXR1cm4gbV9zdXBwbGVt
ZW50cy5nZXQoa2V5KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1N5c3RlbU1lbW9yeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3lzdGVtTWVtb3J5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTI3NjNjZDNhNmNkNzBkNjFiODc2YThhMzZkYjBmYTA0ZDVjZWYwYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N5c3RlbU1lbW9yeS5o
CkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3lzdGVtTWVtb3J5X2gKKyNkZWZpbmUgU3lzdGVt
TWVtb3J5X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworaW50IHN5c3RlbU1lbW9yeUxldmVsKCk7
IC8vIEluIFswLCAxMDBdCitzaXplX3Qgc3lzdGVtVG90YWxNZW1vcnkoKTsKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRDaGVjay5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkQ2hlY2suaAppbmRleCAwN2ViNDYzYjA1YmUyN2Rl
MTM1MmQwNjZlZTcyZGU3MTdiYmMzNzU5Li5mYmEzYWEyNmIzOTI1ZjYyMDAxNjFhZWU1ZjE0MDk4
NDkyZmFkNmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRDaGVj
ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZENoZWNrLmgKQEAgLTI2LDYg
KzI2LDcgQEAKICNpZm5kZWYgVGhyZWFkQ2hlY2tfaAogI2RlZmluZSBUaHJlYWRDaGVja19oCiAK
KyNpZiAhUExBVEZPUk0oSU9TKQogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGVudW0gVGhyZWFk
VmlvbGF0aW9uQmVoYXZpb3IgewogICAgICAgICBOb1RocmVhZENoZWNrLApAQCAtNDYsNSArNDcs
OSBAQCBleHRlcm4gIkMiIHZvaWQgV2ViQ29yZVJlcG9ydFRocmVhZFZpb2xhdGlvbihjb25zdCBj
aGFyKiBmdW5jdGlvbiwgV2ViQ29yZTo6VGhyZQogCiAjZGVmaW5lIFdlYkNvcmVUaHJlYWRWaW9s
YXRpb25DaGVja1JvdW5kT25lKCkgOjpXZWJDb3JlOjpyZXBvcnRUaHJlYWRWaW9sYXRpb24oV1RG
X1BSRVRUWV9GVU5DVElPTiwgV2ViQ29yZTo6VGhyZWFkVmlvbGF0aW9uUm91bmRPbmUpCiAjZGVm
aW5lIFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kVHdvKCkgOjpXZWJDb3JlOjpyZXBv
cnRUaHJlYWRWaW9sYXRpb24oV1RGX1BSRVRUWV9GVU5DVElPTiwgV2ViQ29yZTo6VGhyZWFkVmlv
bGF0aW9uUm91bmRUd28pCisjZWxzZQorI2RlZmluZSBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hl
Y2tSb3VuZE9uZSgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgV2ViQ29yZVRocmVhZFZpb2xh
dGlvbkNoZWNrUm91bmRUd28oKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVh
ZEdsb2JhbERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0
YS5jcHAKaW5kZXggMGQ4MzdiZjU2ZDc5YjkyYzQwOTE0NWQ3Nzc2NzdlYTdkMTJkYzIwNC4uY2Vm
YjE5ZGRjNzBlNWRhOTU1MTEyYTg5NmVjNjdjMTlkNTAyZTI0MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAKQEAgLTUwLDYgKzUwLDkgQEAgdXNpbmcg
bmFtZXNwYWNlIFdURjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVGhyZWFkU3BlY2lmaWM8VGhy
ZWFkR2xvYmFsRGF0YT4qIFRocmVhZEdsb2JhbERhdGE6OnN0YXRpY0RhdGE7CisjaWYgVVNFKFdF
Ql9USFJFQUQpCitUaHJlYWRHbG9iYWxEYXRhKiBUaHJlYWRHbG9iYWxEYXRhOjpzaGFyZWRNYWlu
VGhyZWFkU3RhdGljRGF0YTsKKyNlbmRpZgogCiBUaHJlYWRHbG9iYWxEYXRhOjpUaHJlYWRHbG9i
YWxEYXRhKCkKICAgICA6IG1fY2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycyhhZG9wdFB0
cihuZXcgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycykpCkBAIC02MSw3ICs2NCw3IEBA
IFRocmVhZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERhdGEoKQogI2lmIFVTRShJQ1VfVU5JQ09E
RSkKICAgICAsIG1fY2FjaGVkQ29udmVydGVySUNVKGFkb3B0UHRyKG5ldyBJQ1VDb252ZXJ0ZXJX
cmFwcGVyKSkKICNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYm
ICFQTEFURk9STShJT1MpCiAgICAgLCBtX2NhY2hlZENvbnZlcnRlclRFQyhhZG9wdFB0cihuZXcg
VEVDQ29udmVydGVyV3JhcHBlcikpCiAjZW5kaWYKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAt
ODIsNyArODUsNyBAQCBUaHJlYWRHbG9iYWxEYXRhOjp+VGhyZWFkR2xvYmFsRGF0YSgpCiAKIHZv
aWQgVGhyZWFkR2xvYmFsRGF0YTo6ZGVzdHJveSgpCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lm
IFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICBtX2NhY2hlZENvbnZlcnRlclRF
Qy5jbGVhcigpOwogI2VuZGlmCiAKQEAgLTk4LDExICsxMDEsMzUgQEAgdm9pZCBUaHJlYWRHbG9i
YWxEYXRhOjpkZXN0cm95KCkKICAgICBtX3RocmVhZFRpbWVycy5jbGVhcigpOwogfQogCisjaWYg
RU5BQkxFKFdPUktFUlMpICYmIFVTRShXRUJfVEhSRUFEKQordm9pZCBUaHJlYWRHbG9iYWxEYXRh
OjpzZXRXZWJDb3JlVGhyZWFkRGF0YSgpCit7CisgICAgQVNTRVJUKGlzV2ViVGhyZWFkKCkpOwor
ICAgIEFTU0VSVCgmdGhyZWFkR2xvYmFsRGF0YSgpICE9IFRocmVhZEdsb2JhbERhdGE6OnNoYXJl
ZE1haW5UaHJlYWRTdGF0aWNEYXRhKTsKKworICAgIC8vIFNldCBXZWJUaHJlYWQncyBUaHJlYWRH
bG9iYWxEYXRhIG9iamVjdCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgbWFpbiBVSSB0aHJlYWQuCisg
ICAgVGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0YS0+cmVwbGFjZShUaHJlYWRHbG9iYWxEYXRh
OjpzaGFyZWRNYWluVGhyZWFkU3RhdGljRGF0YSk7CisKKyAgICBBU1NFUlQoJnRocmVhZEdsb2Jh
bERhdGEoKSA9PSBUaHJlYWRHbG9iYWxEYXRhOjpzaGFyZWRNYWluVGhyZWFkU3RhdGljRGF0YSk7
Cit9CisjZW5kaWYKKwogVGhyZWFkR2xvYmFsRGF0YSYgdGhyZWFkR2xvYmFsRGF0YSgpIAogewor
I2lmIFVTRShXRUJfVEhSRUFEKQorICAgIGlmIChVTkxJS0VMWSghVGhyZWFkR2xvYmFsRGF0YTo6
c3RhdGljRGF0YSkpIHsKKyAgICAgICAgVGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0YSA9IG5l
dyBUaHJlYWRTcGVjaWZpYzxUaHJlYWRHbG9iYWxEYXRhPjsKKyAgICAgICAgLy8gV2ViVGhyZWFk
IGFuZCBtYWluIFVJIHRocmVhZCBuZWVkIHRvIHNoYXJlIHRoZSBzYW1lIG9iamVjdC4gU2F2ZSBp
dCBpbiBhIHN0YXRpYworICAgICAgICAvLyBoZXJlLCB0aGUgV2ViVGhyZWFkIHdpbGwgcGljayBp
dCB1cCBpbiBzZXRXZWJDb3JlVGhyZWFkRGF0YSgpLgorICAgICAgICBpZiAocHRocmVhZF9tYWlu
X25wKCkpCisgICAgICAgICAgICBUaHJlYWRHbG9iYWxEYXRhOjpzaGFyZWRNYWluVGhyZWFkU3Rh
dGljRGF0YSA9ICpUaHJlYWRHbG9iYWxEYXRhOjpzdGF0aWNEYXRhOworICAgIH0KKyAgICByZXR1
cm4gKipUaHJlYWRHbG9iYWxEYXRhOjpzdGF0aWNEYXRhOworI2Vsc2UKICAgICBpZiAoIVRocmVh
ZEdsb2JhbERhdGE6OnN0YXRpY0RhdGEpCiAgICAgICAgIFRocmVhZEdsb2JhbERhdGE6OnN0YXRp
Y0RhdGEgPSBuZXcgVGhyZWFkU3BlY2lmaWM8VGhyZWFkR2xvYmFsRGF0YT47CiAgICAgcmV0dXJu
ICoqVGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0YTsKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRH
bG9iYWxEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgK
aW5kZXggNzZjOWZhZmIxZTliMzI3Yjc4Y2E4NjkxZWU0MzgwNjQ2NmFhODk0Ni4uZmZiMDE4Yzdh
MjBmZTdlYTMwNzhlODUxN2UxZjhmMzE1MzI4ODY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RocmVhZEdsb2JhbERhdGEuaApAQCAtNjIsMTAgKzYyLDE0IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgSUNVQ29udmVydGVyV3JhcHBlciYgY2FjaGVkQ29udmVydGVySUNVKCkg
eyByZXR1cm4gKm1fY2FjaGVkQ29udmVydGVySUNVOyB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JN
KE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgICAgIFRFQ0Nv
bnZlcnRlcldyYXBwZXImIGNhY2hlZENvbnZlcnRlclRFQygpIHsgcmV0dXJuICptX2NhY2hlZENv
bnZlcnRlclRFQzsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV09SS0VSUykgJiYgVVNFKFdFQl9U
SFJFQUQpCisgICAgICAgIHZvaWQgc2V0V2ViQ29yZVRocmVhZERhdGEoKTsKKyNlbmRpZgorCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICAgICAgVGhyZWFkTG9jYWxJbnNwZWN0b3JDb3VudGVy
cyYgaW5zcGVjdG9yQ291bnRlcnMoKSB7IHJldHVybiAqbV9pbnNwZWN0b3JDb3VudGVyczsgfQog
I2VuZGlmCkBAIC04Myw3ICs4Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgT3du
UHRyPElDVUNvbnZlcnRlcldyYXBwZXI+IG1fY2FjaGVkQ29udmVydGVySUNVOwogI2VuZGlmCiAK
LSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQog
ICAgICAgICBPd25QdHI8VEVDQ29udmVydGVyV3JhcHBlcj4gbV9jYWNoZWRDb252ZXJ0ZXJURUM7
CiAjZW5kaWYKIApAQCAtOTIsMTAgKzk2LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRp
ZgogCiAgICAgICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxUaHJlYWRHbG9iYWxEYXRhPiogc3Rh
dGljRGF0YTsKKyNpZiBVU0UoV0VCX1RIUkVBRCkKKyAgICAgICAgc3RhdGljIFRocmVhZEdsb2Jh
bERhdGEqIHNoYXJlZE1haW5UaHJlYWRTdGF0aWNEYXRhOworI2VuZGlmCiAgICAgICAgIGZyaWVu
ZCBUaHJlYWRHbG9iYWxEYXRhJiB0aHJlYWRHbG9iYWxEYXRhKCk7CiAgICAgfTsKIAorI2lmIFVT
RShXRUJfVEhSRUFEKQorVGhyZWFkR2xvYmFsRGF0YSYgdGhyZWFkR2xvYmFsRGF0YSgpOworI2Vs
c2UKIFRocmVhZEdsb2JhbERhdGEmIHRocmVhZEdsb2JhbERhdGEoKSBQVVJFX0ZVTkNUSU9OOwor
I2VuZGlmCiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFRpbWVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9UaHJlYWRUaW1lcnMuY3BwCmluZGV4IDg0NjQ0MGZmMjVkY2IyZTM0NzlmNTRlZTIzYjYw
MzE2OGM1NmE0ZmMuLjc4OTM3OGNlM2ZlYjRlM2IwY2NmNDBiNzU3YmY1M2YxOGNjNTM5MzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFRpbWVycy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkVGltZXJzLmNwcApAQCAtMzMsNiArMzMsMTAg
QEAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZpcmUgdGltZXJzIGZvciB0aGlzIGxl
bmd0aCBvZiB0aW1lLCBhbmQgdGhlbiBxdWl0IHRvIGxldCB0aGUgcnVuIGxvb3AgcHJvY2VzcyB1
c2VyIGlucHV0IGV2ZW50cy4KQEAgLTU0LDcgKzU4LDcgQEAgVGhyZWFkVGltZXJzOjpUaHJlYWRU
aW1lcnMoKQogICAgICwgbV9maXJpbmdUaW1lcnMoZmFsc2UpCiAgICAgLCBtX3BlbmRpbmdTaGFy
ZWRUaW1lckZpcmVUaW1lKDApCiB7Ci0gICAgaWYgKGlzTWFpblRocmVhZCgpKQorICAgIGlmIChp
c1VJVGhyZWFkKCkpCiAgICAgICAgIHNldFNoYXJlZFRpbWVyKG1haW5UaHJlYWRTaGFyZWRUaW1l
cigpKTsKIH0KIApAQCAtMTA1LDYgKzEwOSw3IEBAIHZvaWQgVGhyZWFkVGltZXJzOjpzaGFyZWRU
aW1lckZpcmVkKCkKIAogdm9pZCBUaHJlYWRUaW1lcnM6OnNoYXJlZFRpbWVyRmlyZWRJbnRlcm5h
bCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpIHx8ICFpc1dlYlRocmVhZCgpICYmICFp
c1VJVGhyZWFkKCkpOwogICAgIC8vIERvIGEgcmUtZW50cmFuY3kgY2hlY2suCiAgICAgaWYgKG1f
ZmlyaW5nVGltZXJzKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9UaW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5jcHAK
aW5kZXggMzFhNDA1ZDcwMGRlM2QxOTdlNWZkYjExNTRkYmJmZTE2OWQ2ZDhhNi4uYTg3MzczMDQz
YmU0MWU4ODEzNzEwMGVmOTQ5OGZiZGI2ZmEwOWMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGltZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RpbWVy
LmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0yMDksNyArMjEwLDcgQEAgVGltZXJCYXNlOjp+VGltZXJCYXNlKCkKIAogdm9pZCBU
aW1lckJhc2U6OnN0YXJ0KGRvdWJsZSBuZXh0RmlyZUludGVydmFsLCBkb3VibGUgcmVwZWF0SW50
ZXJ2YWwpCiB7Ci0gICAgQVNTRVJUKG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAg
QVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RocmVhZCkpOwogCiAg
ICAgbV9yZXBlYXRJbnRlcnZhbCA9IHJlcGVhdEludGVydmFsOwogICAgIHNldE5leHRGaXJlVGlt
ZShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSArIG5leHRGaXJlSW50ZXJ2YWwpOwpAQCAt
MjE3LDcgKzIxOCw3IEBAIHZvaWQgVGltZXJCYXNlOjpzdGFydChkb3VibGUgbmV4dEZpcmVJbnRl
cnZhbCwgZG91YmxlIHJlcGVhdEludGVydmFsKQogCiB2b2lkIFRpbWVyQmFzZTo6c3RvcCgpCiB7
Ci0gICAgQVNTRVJUKG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgQVNTRVJUKGNh
bkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RocmVhZCkpOwogCiAgICAgbV9yZXBl
YXRJbnRlcnZhbCA9IDA7CiAgICAgc2V0TmV4dEZpcmVUaW1lKDApOwpAQCAtMzY4LDcgKzM2OSw3
IEBAIHZvaWQgVGltZXJCYXNlOjp1cGRhdGVIZWFwSWZOZWVkZWQoZG91YmxlIG9sZFRpbWUpCiAK
IHZvaWQgVGltZXJCYXNlOjpzZXROZXh0RmlyZVRpbWUoZG91YmxlIG5ld1VuYWxpZ25lZFRpbWUp
CiB7Ci0gICAgQVNTRVJUKG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgQVNTRVJU
KGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RocmVhZCkpOwogICAgIEFTU0VS
VCghbV93YXNEZWxldGVkKTsKIAogICAgIGlmIChtX3VuYWxpZ25lZE5leHRGaXJlVGltZSAhPSBu
ZXdVbmFsaWduZWRUaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGlt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmgKaW5kZXggNjllOWVkNTI3MTcw
ZGQzNWM4M2QxNDhhZGI5MDFjZjc3MDA0YzU4YS4uMTYxNGJkMTNhY2E1ZDI3NmEyNjFhNzQwYjk4
YzQ1ZmE3ZTM1OTA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGltZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5oCkBAIC0zMCw2ICszMCwxMCBA
QAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
KyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGltZSBpbnRlcnZhbHMgYXJlIGFsbCBpbiBzZWNv
bmRzLgpAQCAtMTIwLDcgKzEyNCwxOCBAQCBwcml2YXRlOgogCiBpbmxpbmUgYm9vbCBUaW1lckJh
c2U6OmlzQWN0aXZlKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogV3JpdGUgdGhpcyBpbiB0ZXJt
cyBvZiBVU0UoV0VCX1RIUkVBRCkgaW5zdGVhZCBvZiBQTEFURk9STShJT1MpLgorI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgQVNTRVJUKG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisjZWxz
ZQorICAgIC8vIE9uIGlPUyB0aW1lcnMgYXJlIGFsd2F5cyBydW4gb24gdGhlIG1haW4gdGhyZWFk
IG9yIHRoZSBXZWIgVGhyZWFkLgorICAgIC8vIFVubGVzcyB3ZSBoYXZlIHdvcmtlcnMgZW5hYmxl
ZCBpbiB3aGljaCBjYXNlIHRpbWVycyBjYW4gcnVuIG9uIG90aGVyIHRocmVhZHMuCisjaWYgRU5B
QkxFKFdPUktFUlMpCisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpIHx8IHB0aHJlYWRf
bWFpbl9ucCgpIHx8IG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisjZWxzZQorICAgIEFT
U0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSB8fCBwdGhyZWFkX21haW5fbnAoKSk7CisjZW5kaWYK
KyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAgICAgcmV0dXJuIG1fbmV4dEZpcmVUaW1lOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vVVJMLmNwcAppbmRleCA1YjdjZDNhNTVhYTYwMzE2YWQ4OWJkNmEwNGM0
ZmEwMDQzOGE2MWI2Li4zMzc4NzhlODFiNjI5NGNjOTAwZTQyZjllMDg0Y2EwYjBhYTdmMThjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1VSTC5jcHAKQEAgLTk4Niw5ICs5ODYsMjcgQEAgdm9pZCBVUkw6OnBh
cnNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksICZzdHJp
bmcpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGJvb2wgc2hvdWxkQ2Fub25pY2Fs
aXplU2NoZW1lID0gdHJ1ZTsKKwordm9pZCBlbmFibGVVUkxTY2hlbWVDYW5vbmljYWxpemF0aW9u
KGJvb2wgZW5hYmxlU2NoZW1lQ2Fub25pY2FsaXphdGlvbikKK3sKKyAgICBzaG91bGRDYW5vbmlj
YWxpemVTY2hlbWUgPSBlbmFibGVTY2hlbWVDYW5vbmljYWxpemF0aW9uOworfQorI2VuZGlmCisK
IHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+CiBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWwoY29uc3Qg
Y2hhciogYSwgY29uc3QgY2hhciAoJmIpW2xlbmd0aF0pCiB7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIGlmICghc2hvdWxkQ2Fub25pY2FsaXplU2NoZW1lKSB7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh0b0FTQ0lJTG93ZXIo
YVtpXSkgIT0gYltpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI2Miw4ICsxMjgwLDE4IEBAIHZvaWQgVVJMOjpwYXJz
ZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IFN0cmluZyogb3JpZ2luYWxTdHJpbmcpCiAKICAgICAv
LyBjb3B5IGluIHRoZSBzY2hlbWUKICAgICBjb25zdCBjaGFyICpzY2hlbWVFbmRQdHIgPSB1cmwg
KyBzY2hlbWVFbmQ7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChzaG91bGRDYW5vbmljYWxp
emVTY2hlbWUgfHwgbV9wcm90b2NvbElzSW5IVFRQRmFtaWx5KSB7CisgICAgICAgIHdoaWxlIChz
dHJQdHIgPCBzY2hlbWVFbmRQdHIpCisgICAgICAgICAgICAqcCsrID0gdG9BU0NJSUxvd2VyKCpz
dHJQdHIrKyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2hpbGUgKHN0clB0ciA8IHNjaGVtZUVu
ZFB0cikKKyAgICAgICAgICAgICpwKysgPSAqc3RyUHRyKys7CisgICAgfQorI2Vsc2UKICAgICB3
aGlsZSAoc3RyUHRyIDwgc2NoZW1lRW5kUHRyKQogICAgICAgICAqcCsrID0gdG9BU0NJSUxvd2Vy
KCpzdHJQdHIrKyk7CisjZW5kaWYKICAgICBtX3NjaGVtZUVuZCA9IHAgLSBidWZmZXIuZGF0YSgp
OwogCiAgICAgYm9vbCBob3N0SXNMb2NhbEhvc3QgPSBwb3J0RW5kIC0gdXNlclN0YXJ0ID09IDkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVVJMLmgKaW5kZXggYzEzMjllYjRjMjMyZjRhYjEwOGJiNzdkZjk4ZGIwYzI2
NWIwYTQxNS4uNzEzYmRjZTkxODczZjBiNWJhZDAyNDBiZDIyYTc1M2I2OTVlMjQyNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVVJMLmgKQEAgLTMzMiw2ICszMzIsMTAgQEAgaW5saW5lIHVuc2lnbmVkIFVSTDo6
cGF0aEFmdGVyTGFzdFNsYXNoKCkgY29uc3QKICAgICByZXR1cm4gbV9wYXRoQWZ0ZXJMYXN0U2xh
c2g7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIGVuYWJsZVVSTFNjaGVtZUNhbm9uaWNh
bGl6YXRpb24oYm9vbCk7CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1l
c3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKaW5kZXggNDAwZjZlMGVmOTQ4YTlm
NTdhNWVhZjBlMTk5NzU2ZmVhNDY4ZDdlNS4uNjNiNjNmNTkxZGZlOTViYTAwZmI1Zjk4YmJkZDU2
ZDUzZWRkY2Y3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKQEAgLTI3LDYgKzI3LDEyIEBA
CiAjaWZuZGVmIFdpZGdldF9oCiAjZGVmaW5lIFdpZGdldF9oCiAKKyNpZiBQTEFURk9STShJT1Mp
CisjaWZuZGVmIE5TVmlldworI2RlZmluZSBOU1ZpZXcgV0FLVmlldworI2VuZGlmCisjZW5kaWYK
KwogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0xOTAsNiArMTk2LDkgQEAgcHVibGljOgogCiAgICAg
dm9pZCByZW1vdmVGcm9tU3VwZXJ2aWV3KCk7CiAjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgdm9pZCBhZGRUb1N1cGVydmlldyhOU1ZpZXcqKTsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0o
RUZMKQogICAgIHZvaWQgc2V0RXZhc09iamVjdChFdmFzX09iamVjdCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1Mu
Y3BwCmluZGV4IGY5MzI2ZWE5MjhhZWFjNzJjOWUzZDhmMzI4ODNkODMyNzllMTQ0N2MuLmJlZGY4
OGYwMDAzODdjOGIwZTE3ZjI4ZTA5Y2IxMmU5YjdhYjIxYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAK
QEAgLTI5LDkgKzI5LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFdF
Ql9BVURJTykKLQotI2lmIFBMQVRGT1JNKElPUykKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBQ
TEFURk9STShJT1MpCiAKICNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uSU9TLmgiCiAKQEAgLTI2
Miw2ICsyNjAsNSBAQCB2b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OmZyYW1lU2l6ZUNoYW5nZWRQ
cm9jKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXQsIEF1ZGlvVQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9B
VURJTykgJiYgUExBVEZPUk0oSU9TKQogCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0
aW9uSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5h
dGlvbklPUy5oCmluZGV4IGYwZWVlY2ExOTc4NmMyODRhZTYzNGI5YzdlYTkxNzI5ZDQ5MzM0MmQu
LjhiNjhhNmFjODM0ZTViNjgxNWJiYTJjODAwNDE1MDgzZTk0MjlkMzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1Mu
aApAQCAtNzYsMyArNzYsNCBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gQXVkaW9EZXN0aW5hdGlvbklPU19oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYmI4NTlmYjZiNjQ2YzQ0ZjI1ZTgxYzMyZjE5OWFhZDhkYzA4NzBmMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJ
T1MuY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
dWRpb0ZpbGVSZWFkZXJJT1MuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFBMQVRGT1JN
KElPUykKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVy
LmgiCisjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9D
b3JlRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworU09GVF9MSU5LX0ZSQU1FV09SSyhBdWRpb1Rvb2xi
b3gpCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0ZpbGVDbG9zZSwgT1NTdGF0dXMsIChB
dWRpb0ZpbGVJRCBpbkF1ZGlvRmlsZSksIChpbkF1ZGlvRmlsZSkpCitTT0ZUX0xJTksoQXVkaW9U
b29sYm94LCBBdWRpb0ZpbGVPcGVuV2l0aENhbGxiYWNrcywgT1NTdGF0dXMsICh2b2lkICppbkNs
aWVudERhdGEsIEF1ZGlvRmlsZV9SZWFkUHJvYyBpblJlYWRGdW5jLCBBdWRpb0ZpbGVfV3JpdGVQ
cm9jIGluV3JpdGVGdW5jLCBBdWRpb0ZpbGVfR2V0U2l6ZVByb2MgaW5HZXRTaXplRnVuYywgQXVk
aW9GaWxlX1NldFNpemVQcm9jIGluU2V0U2l6ZUZ1bmMsIEF1ZGlvRmlsZVR5cGVJRCBpbkZpbGVU
eXBlSGludCwgQXVkaW9GaWxlSUQgKm91dEF1ZGlvRmlsZSksIChpbkNsaWVudERhdGEsIGluUmVh
ZEZ1bmMsIGluV3JpdGVGdW5jLCBpbkdldFNpemVGdW5jLCBpblNldFNpemVGdW5jLCBpbkZpbGVU
eXBlSGludCwgb3V0QXVkaW9GaWxlKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlv
RmlsZURpc3Bvc2UsIE9TU3RhdHVzLCAoRXh0QXVkaW9GaWxlUmVmIGluRXh0QXVkaW9GaWxlKSwg
KGluRXh0QXVkaW9GaWxlKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlvRmlsZUdl
dFByb3BlcnR5LCBPU1N0YXR1cywgKEV4dEF1ZGlvRmlsZVJlZiBpbkV4dEF1ZGlvRmlsZSwgRXh0
QXVkaW9GaWxlUHJvcGVydHlJRCBpblByb3BlcnR5SUQsIFVJbnQzMiAqaW9Qcm9wZXJ0eURhdGFT
aXplLCB2b2lkICpvdXRQcm9wZXJ0eURhdGEpLCAoaW5FeHRBdWRpb0ZpbGUsIGluUHJvcGVydHlJ
RCwgaW9Qcm9wZXJ0eURhdGFTaXplLCBvdXRQcm9wZXJ0eURhdGEpKQorU09GVF9MSU5LKEF1ZGlv
VG9vbGJveCwgRXh0QXVkaW9GaWxlUmVhZCwgT1NTdGF0dXMsIChFeHRBdWRpb0ZpbGVSZWYgaW5F
eHRBdWRpb0ZpbGUsIFVJbnQzMiAqaW9OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCAqaW9E
YXRhKSwgKGluRXh0QXVkaW9GaWxlLCBpb051bWJlckZyYW1lcywgaW9EYXRhKSkKK1NPRlRfTElO
SyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlvRmlsZVNldFByb3BlcnR5LCBPU1N0YXR1cywgKEV4dEF1
ZGlvRmlsZVJlZiBpbkV4dEF1ZGlvRmlsZSwgRXh0QXVkaW9GaWxlUHJvcGVydHlJRCBpblByb3Bl
cnR5SUQsIFVJbnQzMiBpblByb3BlcnR5RGF0YVNpemUsIGNvbnN0IHZvaWQgKmluUHJvcGVydHlE
YXRhKSwgKGluRXh0QXVkaW9GaWxlLCBpblByb3BlcnR5SUQsIGluUHJvcGVydHlEYXRhU2l6ZSwg
aW5Qcm9wZXJ0eURhdGEpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlV3Jh
cEF1ZGlvRmlsZUlELCBPU1N0YXR1cywgKEF1ZGlvRmlsZUlEIGluRmlsZUlELCBCb29sZWFuIGlu
Rm9yV3JpdGluZywgRXh0QXVkaW9GaWxlUmVmICpvdXRFeHRBdWRpb0ZpbGUpLCAoaW5GaWxlSUQs
IGluRm9yV3JpdGluZywgb3V0RXh0QXVkaW9GaWxlKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gs
IEV4dEF1ZGlvRmlsZU9wZW5VUkwsIE9TU3RhdHVzLCAoQ0ZVUkxSZWYgaW5VUkwsIEV4dEF1ZGlv
RmlsZVJlZiogb3V0RXh0QXVkaW9GaWxlKSwgKGluVVJMLCBvdXRFeHRBdWRpb0ZpbGUpKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gQXVkaW9CdWZm
ZXJMaXN0KiBjcmVhdGVBdWRpb0J1ZmZlckxpc3Qoc2l6ZV90IG51bWJlck9mQnVmZmVycykKK3sK
KyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IGJ1ZmZlckxpc3RTaXplID0gc2l6
ZW9mKEF1ZGlvQnVmZmVyTGlzdCkgLSBzaXplb2YoQXVkaW9CdWZmZXIpOworICAgIGJ1ZmZlckxp
c3RTaXplICs9IG51bWJlck9mQnVmZmVycyAqIHNpemVvZihBdWRpb0J1ZmZlcik7CisKKyAgICBB
dWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxpc3QgPSBzdGF0aWNfY2FzdDxBdWRpb0J1ZmZlckxpc3Qq
PihjYWxsb2MoMSwgYnVmZmVyTGlzdFNpemUudW5zYWZlR2V0KCkpKTsKKyAgICBpZiAoYnVmZmVy
TGlzdCkKKyAgICAgICAgYnVmZmVyTGlzdC0+bU51bWJlckJ1ZmZlcnMgPSBudW1iZXJPZkJ1ZmZl
cnM7CisgICAgcmV0dXJuIGJ1ZmZlckxpc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0
cm95QXVkaW9CdWZmZXJMaXN0KEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCkKK3sKKyAgICBm
cmVlKGJ1ZmZlckxpc3QpOworfQorCitBdWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcihj
b25zdCBjaGFyKiBmaWxlUGF0aCkKKyAgICA6IG1fZGF0YSgwKQorICAgICwgbV9kYXRhU2l6ZSgw
KQorICAgICwgbV9hdWRpb0ZpbGVJRCgwKQorICAgICwgbV9leHRBdWRpb0ZpbGVSZWYobnVsbHB0
cikKK3sKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybFJlZiA9IGFkb3B0Q0YoQ0ZVUkxDcmVh
dGVGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGtDRkFsbG9jYXRvckRlZmF1bHQsIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihmaWxlUGF0aCksIHN0cmxlbihmaWxlUGF0aCksIGZh
bHNlKSk7CisgICAgaWYgKCF1cmxSZWYpCisgICAgICAgIHJldHVybjsKKyAgICBFeHRBdWRpb0Zp
bGVPcGVuVVJMKHVybFJlZi5nZXQoKSwgJm1fZXh0QXVkaW9GaWxlUmVmKTsKK30KKworQXVkaW9G
aWxlUmVhZGVyOjpBdWRpb0ZpbGVSZWFkZXIoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFT
aXplKQorICAgIDogbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFTaXplKGRhdGFTaXplKQorICAg
ICwgbV9hdWRpb0ZpbGVJRCgwKQorICAgICwgbV9leHRBdWRpb0ZpbGVSZWYobnVsbHB0cikKK3sK
KyAgICBpZiAoQXVkaW9GaWxlT3BlbldpdGhDYWxsYmFja3ModGhpcywgcmVhZFByb2MsIDAsIGdl
dFNpemVQcm9jLCAwLCAwLCAmbV9hdWRpb0ZpbGVJRCkgIT0gbm9FcnIpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChFeHRBdWRpb0ZpbGVXcmFwQXVkaW9GaWxlSUQobV9hdWRpb0ZpbGVJRCwg
ZmFsc2UsICZtX2V4dEF1ZGlvRmlsZVJlZikgIT0gbm9FcnIpCisgICAgICAgIG1fZXh0QXVkaW9G
aWxlUmVmID0gbnVsbHB0cjsKK30KKworQXVkaW9GaWxlUmVhZGVyOjp+QXVkaW9GaWxlUmVhZGVy
KCkKK3sKKyAgICBpZiAobV9leHRBdWRpb0ZpbGVSZWYpCisgICAgICAgIEV4dEF1ZGlvRmlsZURp
c3Bvc2UobV9leHRBdWRpb0ZpbGVSZWYpOworCisgICAgbV9leHRBdWRpb0ZpbGVSZWYgPSBudWxs
cHRyOworCisgICAgaWYgKG1fYXVkaW9GaWxlSUQpCisgICAgICAgIEF1ZGlvRmlsZUNsb3NlKG1f
YXVkaW9GaWxlSUQpOworCisgICAgbV9hdWRpb0ZpbGVJRCA9IDA7Cit9CisKK09TU3RhdHVzIEF1
ZGlvRmlsZVJlYWRlcjo6cmVhZFByb2Modm9pZCogY2xpZW50RGF0YSwgU0ludDY0IHBvc2l0aW9u
LCBVSW50MzIgcmVxdWVzdENvdW50LCB2b2lkKiBidWZmZXIsIFVJbnQzMiogYWN0dWFsQ291bnQp
Cit7CisgICAgQXVkaW9GaWxlUmVhZGVyKiBhdWRpb0ZpbGVSZWFkZXIgPSBzdGF0aWNfY2FzdDxB
dWRpb0ZpbGVSZWFkZXIqPihjbGllbnREYXRhKTsKKworICAgIHNpemVfdCBkYXRhU2l6ZSA9IGF1
ZGlvRmlsZVJlYWRlci0+ZGF0YVNpemUoKTsKKyAgICBjb25zdCB2b2lkKiBkYXRhID0gYXVkaW9G
aWxlUmVhZGVyLT5kYXRhKCk7CisgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gMDsKKworICAgIGlm
IChzdGF0aWNfY2FzdDxVSW50NjQ+KHBvc2l0aW9uKSA8IGRhdGFTaXplKSB7CisgICAgICAgIHNp
emVfdCBieXRlc0F2YWlsYWJsZSA9IGRhdGFTaXplIC0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihwb3Np
dGlvbik7CisgICAgICAgIGJ5dGVzVG9SZWFkID0gcmVxdWVzdENvdW50IDw9IGJ5dGVzQXZhaWxh
YmxlID8gcmVxdWVzdENvdW50IDogYnl0ZXNBdmFpbGFibGU7CisgICAgICAgIG1lbWNweShidWZm
ZXIsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSArIHBvc2l0aW9uLCBieXRlc1RvUmVh
ZCk7CisgICAgfQorCisgICAgaWYgKGFjdHVhbENvdW50KQorICAgICAgICAqYWN0dWFsQ291bnQg
PSBieXRlc1RvUmVhZDsKKworICAgIHJldHVybiBub0VycjsKK30KKworU0ludDY0IEF1ZGlvRmls
ZVJlYWRlcjo6Z2V0U2l6ZVByb2Modm9pZCogY2xpZW50RGF0YSkKK3sKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QXVkaW9GaWxlUmVhZGVyKj4oY2xpZW50RGF0YSktPmRhdGFTaXplKCk7Cit9CisK
K1Bhc3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNh
bXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vKQoreworICAgIGlmICghbV9leHRBdWRpb0ZpbGVSZWYp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gR2V0IGZpbGUncyBkYXRhIGZvcm1h
dAorICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKG1fZmlsZURhdGFGb3JtYXQpOworICAgIGlmIChF
eHRBdWRpb0ZpbGVHZXRQcm9wZXJ0eShtX2V4dEF1ZGlvRmlsZVJlZiwga0V4dEF1ZGlvRmlsZVBy
b3BlcnR5X0ZpbGVEYXRhRm9ybWF0LCAmc2l6ZSwgJm1fZmlsZURhdGFGb3JtYXQpICE9IG5vRXJy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHNpemVfdCBudW1iZXJPZkNoYW5uZWxz
ID0gbV9maWxlRGF0YUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZTsKKworICAgIC8vIE51bWJlciBv
ZiBmcmFtZXMKKyAgICBTSW50NjQgbnVtYmVyT2ZGcmFtZXM2NCA9IDA7CisgICAgc2l6ZSA9IHNp
emVvZihudW1iZXJPZkZyYW1lczY0KTsKKyAgICBpZiAoRXh0QXVkaW9GaWxlR2V0UHJvcGVydHko
bV9leHRBdWRpb0ZpbGVSZWYsIGtFeHRBdWRpb0ZpbGVQcm9wZXJ0eV9GaWxlTGVuZ3RoRnJhbWVz
LCAmc2l6ZSwgJm51bWJlck9mRnJhbWVzNjQpICE9IG5vRXJyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGRvdWJsZSBmaWxlU2FtcGxlUmF0ZSA9IG1fZmlsZURhdGFGb3JtYXQubVNh
bXBsZVJhdGU7CisKKyAgICAvLyBNYWtlIGNsaWVudCBmb3JtYXQgc2FtZSBudW1iZXIgb2YgY2hh
bm5lbHMgYXMgZmlsZSBmb3JtYXQsIGJ1dCB0d2VhayBhIGZldyB0aGluZ3MuCisgICAgLy8gQ2xp
ZW50IGZvcm1hdCB3aWxsIGJlIGxpbmVhciBQQ00gKGNhbm9uaWNhbCksIGFuZCBwb3RlbnRpYWxs
eSBjaGFuZ2Ugc2FtcGxlLXJhdGUuCisgICAgbV9jbGllbnREYXRhRm9ybWF0ID0gbV9maWxlRGF0
YUZvcm1hdDsKKworICAgIGNvbnN0IGludCBieXRlc1BlckZsb2F0ID0gc2l6ZW9mKEZsb2F0MzIp
OworICAgIGNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7CisgICAgbV9jbGllbnREYXRhRm9ybWF0
Lm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKKyAgICBtX2NsaWVudERhdGFGb3Jt
YXQubUZvcm1hdEZsYWdzID0ga0F1ZGlvRm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtB
dWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkOworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5t
Qnl0ZXNQZXJQYWNrZXQgPSBieXRlc1BlckZsb2F0OworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5t
RnJhbWVzUGVyUGFja2V0ID0gMTsKKyAgICBtX2NsaWVudERhdGFGb3JtYXQubUJ5dGVzUGVyRnJh
bWUgPSBieXRlc1BlckZsb2F0OworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tQ2hhbm5lbHNQZXJG
cmFtZSA9IG51bWJlck9mQ2hhbm5lbHM7CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1CaXRzUGVy
Q2hhbm5lbCA9IGJpdHNQZXJCeXRlICogYnl0ZXNQZXJGbG9hdDsKKworICAgIGlmIChzYW1wbGVS
YXRlKQorICAgICAgICBtX2NsaWVudERhdGFGb3JtYXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRl
OworCisgICAgaWYgKEV4dEF1ZGlvRmlsZVNldFByb3BlcnR5KG1fZXh0QXVkaW9GaWxlUmVmLCBr
RXh0QXVkaW9GaWxlUHJvcGVydHlfQ2xpZW50RGF0YUZvcm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFt
QmFzaWNEZXNjcmlwdGlvbiksICZtX2NsaWVudERhdGFGb3JtYXQpICE9IG5vRXJyKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIENoYW5nZSBudW1iZXJPZkZyYW1lczY0IHRvIGRl
c3RpbmF0aW9uIHNhbXBsZS1yYXRlCisgICAgbnVtYmVyT2ZGcmFtZXM2NCA9IG51bWJlck9mRnJh
bWVzNjQgKiAobV9jbGllbnREYXRhRm9ybWF0Lm1TYW1wbGVSYXRlIC8gZmlsZVNhbXBsZVJhdGUp
OworICAgIHNpemVfdCBudW1iZXJPZkZyYW1lcyA9IHN0YXRpY19jYXN0PHNpemVfdD4obnVtYmVy
T2ZGcmFtZXM2NCk7CisKKyAgICBzaXplX3QgYnVzQ2hhbm5lbENvdW50ID0gbWl4VG9Nb25vID8g
MSA6IG51bWJlck9mQ2hhbm5lbHM7CisKKyAgICAvLyBDcmVhdGUgQXVkaW9CdXMgd2hlcmUgd2Un
bGwgcHV0IHRoZSBQQ00gYXVkaW8gZGF0YQorICAgIFJlZlB0cjxBdWRpb0J1cz4gYXVkaW9CdXMg
PSBBdWRpb0J1czo6Y3JlYXRlKGJ1c0NoYW5uZWxDb3VudCwgbnVtYmVyT2ZGcmFtZXMpOworICAg
IGF1ZGlvQnVzLT5zZXRTYW1wbGVSYXRlKG1fY2xpZW50RGF0YUZvcm1hdC5tU2FtcGxlUmF0ZSk7
IC8vIHNhdmUgZm9yIGxhdGVyCisKKyAgICAvLyBPbmx5IGFsbG9jYXRlZCBpbiB0aGUgbWl4VG9N
b25vIGNhc2U7IGRlYWxsb2NhdGVkIG9uIGRlc3RydWN0aW9uLgorICAgIEF1ZGlvRmxvYXRBcnJh
eSBsZWZ0Q2hhbm5lbDsKKyAgICBBdWRpb0Zsb2F0QXJyYXkgcmlnaHRDaGFubmVsOworCisgICAg
QXVkaW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0ID0gY3JlYXRlQXVkaW9CdWZmZXJMaXN0KG51bWJl
ck9mQ2hhbm5lbHMpOworICAgIGlmICghYnVmZmVyTGlzdCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgY29uc3Qgc2l6ZV90IGJ1ZmZlclNpemUgPSBudW1iZXJPZkZyYW1lcyAqIHNpemVv
ZihmbG9hdCk7CisKKyAgICBpZiAobWl4VG9Nb25vICYmIG51bWJlck9mQ2hhbm5lbHMgPT0gMikg
eworICAgICAgICBsZWZ0Q2hhbm5lbC5hbGxvY2F0ZShudW1iZXJPZkZyYW1lcyk7CisgICAgICAg
IHJpZ2h0Q2hhbm5lbC5hbGxvY2F0ZShudW1iZXJPZkZyYW1lcyk7CisKKyAgICAgICAgYnVmZmVy
TGlzdC0+bUJ1ZmZlcnNbMF0ubU51bWJlckNoYW5uZWxzID0gMTsKKyAgICAgICAgYnVmZmVyTGlz
dC0+bUJ1ZmZlcnNbMF0ubURhdGFCeXRlU2l6ZSA9IGJ1ZmZlclNpemU7CisgICAgICAgIGJ1ZmZl
ckxpc3QtPm1CdWZmZXJzWzBdLm1EYXRhID0gbGVmdENoYW5uZWwuZGF0YSgpOworCisgICAgICAg
IGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1OdW1iZXJDaGFubmVscyA9IDE7CisgICAgICAgIGJ1
ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1EYXRhQnl0ZVNpemUgPSBidWZmZXJTaXplOworICAgICAg
ICBidWZmZXJMaXN0LT5tQnVmZmVyc1sxXS5tRGF0YSA9IHJpZ2h0Q2hhbm5lbC5kYXRhKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCFtaXhUb01vbm8gfHwgbnVtYmVyT2ZDaGFubmVs
cyA9PSAxKTsKKworICAgICAgICAvLyBGb3IgVHJ1ZS1zdGVyZW8gKG51bWJlck9mQ2hhbm5lbHMg
PT0gNCkKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyAr
K2kpIHsKKyAgICAgICAgICAgIGF1ZGlvQnVzLT5jaGFubmVsKGkpLT56ZXJvKCk7CisgICAgICAg
ICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tTnVtYmVyQ2hhbm5lbHMgPSAxOworICAgICAg
ICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSA9IGJ1ZmZlclNpemU7
CisgICAgICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YSA9IGF1ZGlvQnVzLT5j
aGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmVh
ZCBmcm9tIHRoZSBmaWxlIChvciBpbi1tZW1vcnkgdmVyc2lvbikKKyAgICBVSW50MzIgZnJhbWVz
VG9SZWFkID0gbnVtYmVyT2ZGcmFtZXM7CisgICAgaWYgKEV4dEF1ZGlvRmlsZVJlYWQobV9leHRB
dWRpb0ZpbGVSZWYsICZmcmFtZXNUb1JlYWQsIGJ1ZmZlckxpc3QpICE9IG5vRXJyKSB7CisgICAg
ICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoYnVmZmVyTGlzdCk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIGlmIChtaXhUb01vbm8gJiYgbnVtYmVyT2ZDaGFubmVscyA9
PSAyKSB7CisgICAgICAgIC8vIE1peCBzdGVyZW8gZG93biB0byBtb25vCisgICAgICAgIGZsb2F0
KiBkZXN0TCA9IGF1ZGlvQnVzLT5jaGFubmVsKDApLT5tdXRhYmxlRGF0YSgpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mRnJhbWVzOyArK2kpCisgICAgICAgICAgICBk
ZXN0TFtpXSA9IDAuNWYgKiAobGVmdENoYW5uZWxbaV0gKyByaWdodENoYW5uZWxbaV0pOworICAg
IH0KKworICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoYnVmZmVyTGlzdCk7CisKKyAgICByZXR1
cm4gYXVkaW9CdXMucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVC
dXNGcm9tQXVkaW9GaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoLCBib29sIG1peFRvTW9ubywgZmxv
YXQgc2FtcGxlUmF0ZSkKK3sKKyAgICBBdWRpb0ZpbGVSZWFkZXIgcmVhZGVyKGZpbGVQYXRoKTsK
KyAgICByZXR1cm4gcmVhZGVyLmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOworfQor
CitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUoY29u
c3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2Ft
cGxlUmF0ZSkKK3sKKyAgICBBdWRpb0ZpbGVSZWFkZXIgcmVhZGVyKGRhdGEsIGRhdGFTaXplKTsK
KyAgICByZXR1cm4gcmVhZGVyLmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOworfQor
Cit9IC8vIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pICYmIFBMQVRGT1JN
KElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRp
b0ZpbGVSZWFkZXJJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRp
b0ZpbGVSZWFkZXJJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZWY1NjkzM2VmZDdlYTg3YWQ1YmNlZTk3ODNh
MDM2YTA2OTY4OTk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBB
dWRpb0ZpbGVSZWFkZXJJT1NfaAorI2RlZmluZSBBdWRpb0ZpbGVSZWFkZXJJT1NfaAorCisjaW5j
bHVkZSA8QXVkaW9Ub29sYm94L0F1ZGlvRmlsZS5oPgorI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9F
eHRlbmRlZEF1ZGlvRmlsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9CdXM7CisKKy8vIFdyYXBwZXIgY2xhc3MgZm9y
IEF1ZGlvRmlsZSBhbmQgRXh0QXVkaW9GaWxlIENvcmVBdWRpbyBBUElzIGZvciByZWFkaW5nIGZp
bGVzIGFuZCBpbi1tZW1vcnkgdmVyc2lvbnMgb2YgdGhlbS4uLgorCitjbGFzcyBBdWRpb0ZpbGVS
ZWFkZXIgeworcHVibGljOgorICAgIEF1ZGlvRmlsZVJlYWRlcihjb25zdCBjaGFyKiBmaWxlUGF0
aCk7CisgICAgQXVkaW9GaWxlUmVhZGVyKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6
ZSk7CisgICAgfkF1ZGlvRmlsZVJlYWRlcigpOworCisgICAgUGFzc1JlZlB0cjxBdWRpb0J1cz4g
Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vKTsgLy8gUmV0dXJucyBu
dWxscHRyIG9uIGVycm9yCisKKyAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhOyB9CisgICAgc2l6ZV90IGRhdGFTaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhU2l6
ZTsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBPU1N0YXR1cyByZWFkUHJvYyh2b2lkKiBjbGll
bnREYXRhLCBTSW50NjQgcG9zaXRpb24sIFVJbnQzMiByZXF1ZXN0Q291bnQsIHZvaWQqIGJ1ZmZl
ciwgVUludDMyKiBhY3R1YWxDb3VudCk7CisgICAgc3RhdGljIFNJbnQ2NCBnZXRTaXplUHJvYyh2
b2lkKiBjbGllbnREYXRhKTsKKworICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKKyAgICBzaXplX3Qg
bV9kYXRhU2l6ZTsKKworICAgIEF1ZGlvRmlsZUlEIG1fYXVkaW9GaWxlSUQ7CisgICAgRXh0QXVk
aW9GaWxlUmVmIG1fZXh0QXVkaW9GaWxlUmVmOworCisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uIG1fZmlsZURhdGFGb3JtYXQ7CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
IG1fY2xpZW50RGF0YUZvcm1hdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEF1ZGlvRmlsZVJlYWRlcklPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9TZXNzaW9uSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vaW9zL0F1ZGlvU2Vzc2lvbklPUy5tbQppbmRleCA3OWUyNjFhYTBmOGE0Yjg3
NWNmNGNlNTI5ZmUzNTQ2NWI4NDMyYjc5Li4zNDljMWY1ZDgzOTNjNTNlZDQ4MDg5ZmM4ZTRkYTE1
YTNkODE2OGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3Mv
QXVkaW9TZXNzaW9uSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lv
cy9BdWRpb1Nlc3Npb25JT1MubW0KQEAgLTQyLDcgKzQyLDYgQEAgU09GVF9MSU5LX1BPSU5URVIo
QVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5UGxheWJhY2ssIE5TU3RyaW5nICop
CiBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlS
ZWNvcmQsIE5TU3RyaW5nICopCiBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVk
aW9TZXNzaW9uQ2F0ZWdvcnlQbGF5QW5kUmVjb3JkLCBOU1N0cmluZyAqKQogU09GVF9MSU5LX1BP
SU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5QXVkaW9Qcm9jZXNzaW5n
LCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vz
c2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiwgTlNTdHJpbmcgKikKIFNPRlRfTElOS19QT0lO
VEVSKEFWRm91bmRhdGlvbiwgQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25UeXBlS2V5LCBOU1N0
cmluZyAqKQogCiAjZGVmaW5lIEFWQXVkaW9TZXNzaW9uIGdldEFWQXVkaW9TZXNzaW9uQ2xhc3Mo
KQpAQCAtNTIsOSArNTEsMTQgQEAgU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1
ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXksIE5TU3RyaW5nICopCiAjZGVmaW5lIEFWQXVk
aW9TZXNzaW9uQ2F0ZWdvcnlSZWNvcmQgZ2V0QVZBdWRpb1Nlc3Npb25DYXRlZ29yeVJlY29yZCgp
CiAjZGVmaW5lIEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlQbGF5QW5kUmVjb3JkIGdldEFWQXVkaW9T
ZXNzaW9uQ2F0ZWdvcnlQbGF5QW5kUmVjb3JkKCkKICNkZWZpbmUgQVZBdWRpb1Nlc3Npb25DYXRl
Z29yeUF1ZGlvUHJvY2Vzc2luZyBnZXRBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5QXVkaW9Qcm9jZXNz
aW5nKCkKLSNkZWZpbmUgQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24gZ2V0
QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24oKQogI2RlZmluZSBBVkF1ZGlv
U2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXkgZ2V0QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25U
eXBlS2V5KCkKIAorc3RhdGljIE5TU3RyaW5nICogY29uc3QgV0NBVkF1ZGlvU2Vzc2lvbkludGVy
cnVwdGlvbk5vdGlmaWNhdGlvbiA9IEAiQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmlj
YXRpb24iOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorU09GVF9MSU5LX1BPSU5URVIoQVZGb3Vu
ZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiwgTlNTdHJpbmcg
KikKKyNlbmRpZgorCiBAaW50ZXJmYWNlIFdlYkF1ZGlvU2Vzc2lvbkhlbHBlciA6IE5TT2JqZWN0
IHsKICAgICBXZWJDb3JlOjpBdWRpb1Nlc3Npb24qIF9jYWxsYmFjazsKIH0KQEAgLTcxLDE5ICs3
NSwyNSBAQCBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uSW50
ZXJydXB0aW9uVHlwZUtleSwgTlNTdHJpbmcgKikKIAogICAgIF9jYWxsYmFjayA9IGNhbGxiYWNr
OwogCi0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZl
cjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihpbnRlcnJ1cHRpb246KSBuYW1lOkFWQXVkaW9TZXNz
aW9uSW50ZXJydXB0aW9uTm90aWZpY2F0aW9uIG9iamVjdDpbQVZBdWRpb1Nlc3Npb24gc2hhcmVk
SW5zdGFuY2VdXTsKKyAgICBBU1NFUlQoW1dDQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3Rp
ZmljYXRpb24gaXNFcXVhbFRvU3RyaW5nOmdldEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uTm90
aWZpY2F0aW9uKCldKTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaW50ZXJydXB0aW9uOikgbmFt
ZTpXQ0FWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwog
CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07CisgICAg
W1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxm
IG5hbWU6V0NBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiBvYmplY3Q6bmls
XTsKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKIC0gKHZvaWQpaW50ZXJydXB0aW9uOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogeworICAgIEFTU0VSVChbQVZBdWRpb1Nlc3Npb24g
c2hhcmVkSW5zdGFuY2VdID09IFtub3RpZmljYXRpb24gb2JqZWN0XSk7CisgICAgaWYgKFtBVkF1
ZGlvU2Vzc2lvbiBzaGFyZWRJbnN0YW5jZV0gIT0gW25vdGlmaWNhdGlvbiBvYmplY3RdKQorICAg
ICAgICByZXR1cm47CisKICAgICBOU1VJbnRlZ2VyIHR5cGUgPSBbW1tub3RpZmljYXRpb24gdXNl
ckluZm9dIG9iamVjdEZvcktleTpBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXldIHVu
c2lnbmVkSW50ZWdlclZhbHVlXTsKICAgICBpZiAodHlwZSA9PSBBVkF1ZGlvU2Vzc2lvbkludGVy
cnVwdGlvblR5cGVCZWdhbikKICAgICAgICAgX2NhbGxiYWNrLT5iZWdhbkF1ZGlvSW50ZXJydXB0
aW9uKCk7CkBAIC0xMzMsMTkgKzE0MywyNiBAQCB2b2lkIEF1ZGlvU2Vzc2lvbjo6c2V0Q2F0ZWdv
cnkoQ2F0ZWdvcnlUeXBlIG5ld0NhdGVnb3J5KQogICAgIHN3aXRjaCAobmV3Q2F0ZWdvcnkpIHsK
ICAgICBjYXNlIEFtYmllbnRTb3VuZDoKICAgICAgICAgY2F0ZWdvcnlTdHJpbmcgPSBBVkF1ZGlv
U2Vzc2lvbkNhdGVnb3J5QW1iaWVudDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTb2xvQW1i
aWVudFNvdW5kOgogICAgICAgICBjYXRlZ29yeVN0cmluZyA9IEFWQXVkaW9TZXNzaW9uQ2F0ZWdv
cnlTb2xvQW1iaWVudDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNZWRpYVBsYXliYWNrOgog
ICAgICAgICBjYXRlZ29yeVN0cmluZyA9IEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlQbGF5YmFjazsK
KyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZWNvcmRBdWRpbzoKICAgICAgICAgY2F0ZWdvcnlT
dHJpbmcgPSBBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5UmVjb3JkOworICAgICAgICBicmVhazsKICAg
ICBjYXNlIFBsYXlBbmRSZWNvcmQ6CiAgICAgICAgIGNhdGVnb3J5U3RyaW5nID0gQVZBdWRpb1Nl
c3Npb25DYXRlZ29yeVBsYXlBbmRSZWNvcmQ7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQXVk
aW9Qcm9jZXNzaW5nOgogICAgICAgICBjYXRlZ29yeVN0cmluZyA9IEFWQXVkaW9TZXNzaW9uQ2F0
ZWdvcnlBdWRpb1Byb2Nlc3Npbmc7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9uZToKICAg
ICBkZWZhdWx0OgogICAgICAgICBjYXRlZ29yeVN0cmluZyA9IG5pbDsKKyAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwogICAgIFtbQVZBdWRpb1Nlc3Npb24g
c2hhcmVkSW5zdGFuY2VdIHNldENhdGVnb3J5OmNhdGVnb3J5U3RyaW5nIGVycm9yOiZlcnJvcl07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0
aW5hdGlvbk1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9E
ZXN0aW5hdGlvbk1hYy5jcHAKaW5kZXggYjBlZGE4MTVlM2M1OTc0ZDVjYWNjMjc2NGIwNzJmYTZi
ODhkNjUzMS4uM2M3NmNmNTM0ZTk2MjVkM2EwOWUxZDY1NGMwZTMwYmI2ZjkxZmQ3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25N
YWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3Rp
bmF0aW9uTWFjLmNwcApAQCAtMzAsNiArMzAsOCBAQAogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykK
IAorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKKwogI2luY2x1ZGUgIkF1ZGlv
RGVzdGluYXRpb25NYWMuaCIKIAogI2luY2x1ZGUgIkF1ZGlvSU9DYWxsYmFjay5oIgpAQCAtMTgx
LDQgKzE4Myw2IEBAIE9TU3RhdHVzIEF1ZGlvRGVzdGluYXRpb25NYWM6OmlucHV0UHJvYyh2b2lk
KiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKKwogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwCmluZGV4IGVkMmVkNTVhOWUy
OTBiNzgxNmY2YzNlNGEyMWZiYTc3OWEyODdmN2MuLjdkMjU5NGM2NDkyYjUyNTZjZjcxOTY4YTdl
NmI1NWNjNTQ1YjEyY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAKICNp
ZiBFTkFCTEUoV0VCX0FVRElPKQogCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9T
KQorCiAjaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyTWFjLmgiCiAKICNpbmNsdWRlICJBdWRpb0J1
cy5oIgpAQCAtNTgsNyArNjAsNyBAQCBzdGF0aWMgdm9pZCBkZXN0cm95QXVkaW9CdWZmZXJMaXN0
KEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCkKIH0KIAogQXVkaW9GaWxlUmVhZGVyOjpBdWRp
b0ZpbGVSZWFkZXIoY29uc3QgY2hhciogZmlsZVBhdGgpCi0gICAgOiBtX2RhdGEoMCkKKyAgICA6
IG1fZGF0YShudWxscHRyKQogICAgICwgbV9kYXRhU2l6ZSgwKQogICAgICwgbV9hdWRpb0ZpbGVJ
RCgwKQogICAgICwgbV9leHRBdWRpb0ZpbGVSZWYoMCkKQEAgLTIzNywxNiArMjM5LDE2IEBAIFBh
c3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBs
ZVJhdGUsIGJvb2wgbWl4VG9Nb25vCiAKIFBhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zy
b21BdWRpb0ZpbGUoY29uc3QgY2hhciogZmlsZVBhdGgsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBz
YW1wbGVSYXRlKQogewotICAgIEF1ZGlvRmlsZVJlYWRlciByZWFkZXIoZmlsZVBhdGgpOwotICAg
IHJldHVybiByZWFkZXIuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CisgICAgcmV0
dXJuIEF1ZGlvRmlsZVJlYWRlcihmaWxlUGF0aCkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRv
TW9ubyk7CiB9CiAKIFBhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1
ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25v
LCBmbG9hdCBzYW1wbGVSYXRlKQogewotICAgIEF1ZGlvRmlsZVJlYWRlciByZWFkZXIoZGF0YSwg
ZGF0YVNpemUpOwotICAgIHJldHVybiByZWFkZXIuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRv
TW9ubyk7CisgICAgcmV0dXJuIEF1ZGlvRmlsZVJlYWRlcihkYXRhLCBkYXRhU2l6ZSkuY3JlYXRl
QnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CiB9CiAKLX0gLy8gV2ViQ29yZQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9T
KQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1Nlc3Npb25NYWMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5jcHAKaW5kZXggNzc4ODQ3MmNm
NGZiZTNmMGEzMjdiMWM2OTg2MmYyNjI1ZTFhNTllZS4uMzVlMjhhYjE4ZjU5M2Y4NjlmMTY5ODhh
N2I3MDBhYWY3MWRmZDEyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJBdWRpb1Nlc3Npb24uaCIKIAotI2lmIFVTRShBVURJT19T
RVNTSU9OKSAmJiBQTEFURk9STShNQUMpCisjaWYgVVNFKEFVRElPX1NFU1NJT04pICYmIFBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9NZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL21hYy9NZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcAppbmRleCBkYTA4
MmE2ZjIyMjk0ODE0OTVhNTUzOTg1YTJkMGViOTkxZTU4YjU2Li44YmU3ZTZlOGRhNDViYjM5ZDU4
YzJiYzNhNjJmZDUwZjUwNjYxZjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9tYWMvTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL01lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwCkBAIC00OCw3
ICs0OCw3IEBAIHZvaWQgTWVkaWFTZXNzaW9uTWFuYWdlcjo6dXBkYXRlU2Vzc2lvblN0YXRlKCkK
ICAgICAgICAgQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2V0UHJlZmVycmVkQnVmZmVy
U2l6ZShrV2ViQXVkaW9CdWZmZXJTaXplKTsKICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQu
b3JnL2IvMTE2NzI1PiBGaWd1cmUgb3V0IHdoeSBlbmFibGluZyB0aGUgY29kZSBiZWxvdwogICAg
IC8vIGNhdXNlcyBtZWRpYSBMYXlvdXRUZXN0cyB0byBmYWlsIG9uIDEwLjguCi0jaWYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgUExBVEZPUk0oSU9TKSB8fCBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICBlbHNlIGlmICgoaGFz
KE1lZGlhU2Vzc2lvbjo6VmlkZW8pIHx8IGhhcyhNZWRpYVNlc3Npb246OkF1ZGlvKSkgJiYgU2V0
dGluZ3M6Omxvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkKCkpCiAgICAgICAgIEF1
ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNldFByZWZlcnJlZEJ1ZmZlclNpemUoa0xvd1Bv
d2VyVmlkZW9CdWZmZXJTaXplKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2YvU2hhcmVkQnVmZmVyQ0YuY3BwCmluZGV4IDhlN2M3YTM3NTVhMDgxZmQ5NDdhNDY1ZmIzMmE1
YjI0Y2MxYjE5MjYuLmUxODU5MzkwMGM2MjllZTliMzk3MmExNWRhZjI4Nzc4OTQ1NTE2NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAKQEAgLTM4
LDEzICszOCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVk
QnVmZmVyKENGRGF0YVJlZiBjZkRhdGEpCiAgICAgOiBtX3NpemUoMCkKLSAgICAsIG1fY2ZEYXRh
KGNmRGF0YSkKKyAgICAsIG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGZhbHNlKQogI2lmIEVO
QUJMRShESVNLX0lNQUdFX0NBQ0hFKQogICAgICwgbV9pc01lbW9yeU1hcHBlZChmYWxzZSkKICAg
ICAsIG1fZGlza0ltYWdlQ2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlk
KQogICAgICwgbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFjayhudWxscHRyKQogICAgICwgbV9u
b3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFja0RhdGEobnVsbHB0cikKICNlbmRpZgorICAgICwgbV9j
ZkRhdGEoY2ZEYXRhKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jZi9VUkxDRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9VUkxDRi5jcHAKaW5k
ZXggYjNlY2I1MDMxOTIyMmEyZDQ0YWFhN2Q0OGNjYjEzNWJlZTM1MzljOS4uNWIxNjk0ODc2NmQz
MzhmZjM0OWM0ZWY1MjY0OGI1YzRhNDZjNzQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2YvVVJMQ0YuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1VS
TENGLmNwcApAQCAtMzAsNiArMzAsMTEgQEAKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlVS
TC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElPUykK
KyNpbmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCIKKyNpbmNsdWRlIDxDb3Jl
Rm91bmRhdGlvbi9DRlByaXYuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFVS
TDo6VVJMKENGVVJMUmVmIHVybCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL0tleUV2ZW50Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9L
ZXlFdmVudENvY29hLm1tCmluZGV4IGExMjViNmExMGY0N2I3MmU2MDU2ZGY3OTRiNmRlYWI1ZDQ3
NmYzNjkuLjFhM2Q4MzBkZDE5NGMwZDk2OTRjMjg1NjhiMzQ5MmRiMTNkOGNiOWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0tleUV2ZW50Q29jb2EubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvS2V5RXZlbnRDb2NvYS5tbQpAQCAtNTMxLDkg
KzUzMSw4IEBAIGludCB3aW5kb3dzS2V5Q29kZUZvckNoYXJDb2RlKHVuaWNoYXIgY2hhckNvZGUp
CiAgICAgICAgIGNhc2UgTlNQcmludEZ1bmN0aW9uS2V5OiByZXR1cm4gVktfUFJJTlQ7CiAgICAg
ICAgIGNhc2UgTlNFeGVjdXRlRnVuY3Rpb25LZXk6IHJldHVybiBWS19FWEVDVVRFOwogICAgICAg
ICBjYXNlIE5TUHJpbnRTY3JlZW5GdW5jdGlvbktleTogcmV0dXJuIFZLX1NOQVBTSE9UOwotICAg
ICAgICBjYXNlIE5TSW5zZXJ0RnVuY3Rpb25LZXk6IHJldHVybiBWS19JTlNFUlQ7CiAjaWYgUExB
VEZPUk0oSU9TKQotICAgICAgICBjYXNlIE5TSGVscEZ1bmN0aW9uS2V5OiByZXR1cm4gVktfSU5T
RVJUOworICAgICAgICBjYXNlIE5TSW5zZXJ0RnVuY3Rpb25LZXk6IGNhc2UgTlNIZWxwRnVuY3Rp
b25LZXk6IHJldHVybiBWS19JTlNFUlQ7CiAKICAgICAgICAgY2FzZSBOU0YxRnVuY3Rpb25LZXk6
IHJldHVybiBWS19GMTsKICAgICAgICAgY2FzZSBOU0YyRnVuY3Rpb25LZXk6IHJldHVybiBWS19G
MjsKQEAgLTU1NSw2ICs1NTQsOCBAQCBpbnQgd2luZG93c0tleUNvZGVGb3JDaGFyQ29kZSh1bmlj
aGFyIGNoYXJDb2RlKQogICAgICAgICBjYXNlIE5TRjE4RnVuY3Rpb25LZXk6IHJldHVybiBWS19G
MTg7CiAgICAgICAgIGNhc2UgTlNGMTlGdW5jdGlvbktleTogcmV0dXJuIFZLX0YxOTsKICAgICAg
ICAgY2FzZSBOU0YyMEZ1bmN0aW9uS2V5OiByZXR1cm4gVktfRjIwOworI2Vsc2UKKyAgICAgICAg
Y2FzZSBOU0luc2VydEZ1bmN0aW9uS2V5OiByZXR1cm4gVktfSU5TRVJUOwogI2VuZGlmCiAgICAg
ICAgIGNhc2UgTlNGMjFGdW5jdGlvbktleTogcmV0dXJuIFZLX0YyMTsKICAgICAgICAgY2FzZSBO
U0YyMkZ1bmN0aW9uS2V5OiByZXR1cm4gVktfRjIyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4IGM4OGFiNWU0OTk2YWM5OTcxZGVm
ZWYwYjFlODkzNjJhN2M3NzNhMTkuLjQ3MDA4MmVkNWM1ZWYwMmE3MzNlNmQ5NDEyMWMwNDkyMDVi
ZTBkMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5jcHAKQEAgLTM3LDggKzM3LDE0IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1
ZGUgPGxpbWl0cz4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBX
ZSBzaG91bGQgYmV0dGVyIGludGVncmF0ZSB0aGUgaU9TIGFuZCBub24taU9TIGNvZGUgaW4gdGhp
cyBjbGFzcy4gVW5saWtlIG90aGVyIHBvcnRzLCB0aGUKKy8vIGlPUyBwb3J0IGNhY2hlcyB0aGUg
bWV0YWRhdGEgZm9yIGEgZnJhbWUgd2l0aG91dCBkZWNvZGluZyB0aGUgaW1hZ2UuCiBCaXRtYXBJ
bWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShv
YnNlcnZlcikKICAgICAsIG1fY3VycmVudEZyYW1lKDApCkBAIC01MCw2ICs1NiwxMSBAQCBCaXRt
YXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgLCBtX2Rl
Y29kZWRTaXplKDApCiAgICAgLCBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSgwKQogICAgICwgbV9m
cmFtZUNvdW50KDApCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
ZXhwb3NlIGEgc2V0dGluZyB0byBlbmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIHJl
bW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKyAgICAsIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1
bmtUaW1lKDApCisgICAgLCBtX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQoMCkKKyNlbmRpZgog
ICAgICwgbV9pc1NvbGlkQ29sb3IoZmFsc2UpCiAgICAgLCBtX2NoZWNrZWRGb3JTb2xpZENvbG9y
KGZhbHNlKQogICAgICwgbV9hbmltYXRpb25GaW5pc2hlZChmYWxzZSkKQEAgLTEwMCw3ICsxMTEs
MTYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9v
bCBkZXN0cm95QWxsKQogewogICAgIC8vIEFuaW1hdGVkIGltYWdlcyA+NU1CIGFyZSBjb25zaWRl
cmVkIGxhcmdlIGVub3VnaCB0aGF0IHdlJ2xsIG9ubHkgaGFuZyBvbgogICAgIC8vIHRvIG9uZSBm
cmFtZSBhdCBhIHRpbWUuCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjTGFyZ2VBbmltYXRpb25DdXRvZmYgPSAyMDk3MTUyOworCisgICAgIC8vIElmIHdlIGhh
dmUgZGVjb2RlZCBmcmFtZXMgYnV0IHRoZXJlIGlzIG5vIGVuY29kZWQgZGF0YSwgd2Ugc2hvdWxk
bid0IGRlc3Ryb3kKKyAgICAgLy8gdGhlIGRlY29kZWQgaW1hZ2Ugc2luY2Ugd2Ugd29uJ3QgYmUg
YWJsZSB0byByZWNvbnN0cnVjdCBpdCBsYXRlci4KKyAgICAgaWYgKCFkYXRhKCkgJiYgbV9mcmFt
ZXMuc2l6ZSgpKQorICAgICAgICAgcmV0dXJuOworI2Vsc2UKICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgY0xhcmdlQW5pbWF0aW9uQ3V0b2ZmID0gNTI0Mjg4MDsKKyNlbmRpZgogCiAgICAgLy8g
SWYgd2UgaGF2ZSBkZWNvZGVkIGZyYW1lcyBidXQgdGhlcmUgaXMgbm8gZW5jb2RlZCBkYXRhLCB3
ZSBzaG91bGRuJ3QgZGVzdHJveQogICAgIC8vIHRoZSBkZWNvZGVkIGltYWdlIHNpbmNlIHdlIHdv
bid0IGJlIGFibGUgdG8gcmVjb25zdHJ1Y3QgaXQgbGF0ZXIuCkBAIC0xMzEsNyArMTUxLDExIEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lNZXRhZGF0YUFuZE5vdGlmeSh1bnNpZ25lZCBmcmFt
ZUJ5dGVzQ2xlYXJlZCkKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kZWNvZGVkU2l6ZUNoYW5n
ZWQodGhpcywgLXNhZmVDYXN0PGludD4oZnJhbWVCeXRlc0NsZWFyZWQpKTsKIH0KIAorI2lmIFBM
QVRGT1JNKElPUykKK3ZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBm
bG9hdCBzY2FsZUhpbnQpCisjZWxzZQogdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXpl
X3QgaW5kZXgpCisjZW5kaWYKIHsKICAgICBzaXplX3QgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgp
OwogICAgIEFTU0VSVChtX2RlY29kZWRTaXplID09IDAgfHwgbnVtRnJhbWVzID4gMSk7CkBAIC0x
MzksNyArMTYzLDEyIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4
KQogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkgPCBudW1GcmFtZXMpCiAgICAgICAgIG1fZnJhbWVz
Lmdyb3cobnVtRnJhbWVzKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2ZyYW1lc1tpbmRl
eF0ubV9mcmFtZSA9IG1fc291cmNlLmNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCwgJnNjYWxlSGlu
dCk7CisgICAgbV9mcmFtZXNbaW5kZXhdLm1fc2NhbGUgPSBzY2FsZUhpbnQ7CisjZWxzZQogICAg
IG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVBdEluZGV4KGlu
ZGV4KTsKKyNlbmRpZgogICAgIGlmIChudW1GcmFtZXMgPT0gMSAmJiBtX2ZyYW1lc1tpbmRleF0u
bV9mcmFtZSkKICAgICAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CiAKQEAgLTE2Niw2ICsxOTUs
MjMgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgpCiAgICAgfQog
fQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZUluZm8o
c2l6ZV90IGluZGV4KQoreworICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CisK
KyAgICBpZiAobV9mcmFtZXMuc2l6ZSgpIDwgbnVtRnJhbWVzKQorICAgICAgICBtX2ZyYW1lcy5y
ZXNpemUobnVtRnJhbWVzKTsKKworICAgIEFTU0VSVCghbV9mcmFtZXNbaW5kZXhdLm1faGF2ZUlu
Zm8pOworCisgICAgaWYgKHNob3VsZEFuaW1hdGUoKSkKKyAgICAgICAgbV9mcmFtZXNbaW5kZXhd
Lm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CisgICAg
bV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRl
eChpbmRleCk7CisgICAgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZUluZm8gPSB0cnVlOworfQorI2Vu
ZGlmCisKIHZvaWQgQml0bWFwSW1hZ2U6OmRpZERlY29kZVByb3BlcnRpZXMoKSBjb25zdAogewog
ICAgIGlmIChtX2RlY29kZWRTaXplKQpAQCAtMTkzLDYgKzIzOSwxMCBAQCB2b2lkIEJpdG1hcElt
YWdlOjp1cGRhdGVTaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikg
Y29uc3QKICAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NvdXJjZS5zaXplKElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbihSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZGVzY3Jp
cHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKSk7CiAgICAgbV9pbWFnZU9yaWVudGF0aW9uID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CiAgICAg
bV9zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihk
ZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpKTsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgbV9vcmlnaW5hbFNpemUgPSBtX3NvdXJjZS5vcmlnaW5hbFNpemUoKTsKKyAgICBtX29y
aWdpbmFsU2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc291cmNlLm9yaWdpbmFsU2l6ZShS
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7CisjZW5kaWYKICAgICBtX2hhdmVTaXplID0gdHJ1ZTsK
ICAgICBkaWREZWNvZGVQcm9wZXJ0aWVzKCk7CiB9CkBAIC0yMDksNiArMjU5LDIwIEBAIEludFNp
emUgQml0bWFwSW1hZ2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uIGRlc2NyCiAgICAgcmV0dXJuIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlv
bjsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK0ludFNpemUgQml0bWFwSW1hZ2U6Om9yaWdpbmFs
U2l6ZSgpIGNvbnN0Cit7CisgICAgdXBkYXRlU2l6ZSgpOworICAgIHJldHVybiBtX29yaWdpbmFs
U2l6ZTsKK30KKworSW50U2l6ZSBCaXRtYXBJbWFnZTo6b3JpZ2luYWxTaXplUmVzcGVjdGluZ09y
aWVudGF0aW9uKCkgY29uc3QKK3sKKyAgICB1cGRhdGVTaXplKCk7CisgICAgcmV0dXJuIG1fb3Jp
Z2luYWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9uOworfQorI2VuZGlmCisKIEludFNpemUgQml0
bWFwSW1hZ2U6OmN1cnJlbnRGcmFtZVNpemUoKSBjb25zdAogewogICAgIGlmICghbV9jdXJyZW50
RnJhbWUgfHwgbV9oYXNVbmlmb3JtRnJhbWVTaXplKQpAQCAtMjI3LDYgKzI5MSw5IEBAIGJvb2wg
Qml0bWFwSW1hZ2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0CiAKIGJvb2wg
Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogeworICAgIC8v
IEJlY2F1c2Ugd2UncmUgbW9kaWZ5aW5nIHRoZSBjdXJyZW50IGZyYW1lLCBjbGVhciBpdHMgKG5v
dyBwb3NzaWJseQorICAgIC8vIGluYWNjdXJhdGUpIG1ldGFkYXRhIGFzIHdlbGwuCisjaWYgIVBM
QVRGT1JNKElPUykKICAgICAvLyBDbGVhciBhbGwgcGFydGlhbGx5LWRlY29kZWQgZnJhbWVzLiBG
b3IgbW9zdCBpbWFnZSBmb3JtYXRzLCB0aGVyZSBpcyBvbmx5CiAgICAgLy8gb25lIGZyYW1lLCBi
dXQgYXQgbGVhc3QgR0lGIGFuZCBJQ08gY2FuIGhhdmUgbW9yZS4gV2l0aCBHSUZzLCB0aGUgZnJh
bWVzCiAgICAgLy8gY29tZSBpbiBvcmRlciBhbmQgd2UgYXNrIHRvIGRlY29kZSB0aGVtIGluIG9y
ZGVyLCB3YWl0aW5nIHRvIHJlcXVlc3QgYQpAQCAtMjU0LDExICszMjEsNDAgQEAgYm9vbCBCaXRt
YXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgICAgICAgICBm
cmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1ZSkgPyBmcmFtZUJ5dGVz
IDogMCk7CiAgICAgfQogICAgIGRlc3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xl
YXJlZCk7CisjZWxzZQorICAgIGludCBkZWx0YUJ5dGVzID0gMDsKKyAgICBpZiAoIW1fZnJhbWVz
LmlzRW1wdHkoKSkgeworICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXpl
KCkgLSAxXS5tX2ZyYW1lQnl0ZXM7CisgICAgICAgIGlmIChtX2ZyYW1lc1ttX2ZyYW1lcy5zaXpl
KCkgLSAxXS5jbGVhcih0cnVlKSkgeworICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsK
KyAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gbV9kZWNvZGVkUHJvcGVydGllc1NpemU7CisgICAg
ICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSA9IDA7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KGRlbHRhQnl0ZXMpOworI2VuZGlmCiAgICAgCiAg
ICAgLy8gRmVlZCBhbGwgdGhlIGRhdGEgd2UndmUgc2VlbiBzbyBmYXIgdG8gdGhlIGltYWdlIGRl
Y29kZXIuCiAgICAgbV9hbGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXhwb3NlIGEgc2V0dGluZyB0byBl
bmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIGFuZCBtYWtlIHRoaXMKKyAgICAvLyBj
b2RlIGNvbmRpdGlvbmFsIG9uIGl0LiBUaGVuIHdlIGNhbiByZW1vdmUgdGhlIFBMQVRGT1JNKElP
UyktZ3VhcmQuCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBjaHVua0xvYWRJbnRlcnZhbHNbXSA9
IHswLCAxLCAzLCA2LCAxNX07CisgICAgZG91YmxlIGludGVydmFsID0gY2h1bmtMb2FkSW50ZXJ2
YWxzW3N0ZDo6bWluKG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCwgc3RhdGljX2Nhc3Q8dWlu
dDE2X3Q+KDQpKV07CisKKyAgICBib29sIG5lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgaWYgKGN1
cnJlbnRUaW1lKCkgLSBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSA+IGludGVydmFsKSB7IC8v
IFRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIHRoZSBjaHVuayB0aW1lIHdpbGwgYmUgMCBhbmQgdGhl
IGltYWdlIHdpbGwgZ2V0IGFuIHVwZGF0ZS4KKyAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlOwor
ICAgICAgICBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAg
ICAgIEFTU0VSVChtX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQgPD0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MTZfdD46Om1heCgpKTsKKyAgICAgICAgKyttX3Byb2dyZXNzaXZlTG9hZENodW5r
Q291bnQ7CisgICAgfQorICAgIGlmIChuZWVkc1VwZGF0ZSB8fCBhbGxEYXRhUmVjZWl2ZWQpCisg
ICAgICAgIG1fc291cmNlLnNldERhdGEoZGF0YSgpLCBhbGxEYXRhUmVjZWl2ZWQpOworI2Vsc2UK
ICAgICBtX3NvdXJjZS5zZXREYXRhKGRhdGEoKSwgYWxsRGF0YVJlY2VpdmVkKTsKLSAgICAKKyNl
bmRpZgorCiAgICAgbV9oYXZlRnJhbWVDb3VudCA9IGZhbHNlOwogICAgIG1faGFzVW5pZm9ybUZy
YW1lU2l6ZSA9IHRydWU7CiAgICAgcmV0dXJuIGlzU2l6ZUF2YWlsYWJsZSgpOwpAQCAtMjkzLDYg
KzM4OSw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJu
IG1fc2l6ZUF2YWlsYWJsZTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiBib29sIEJpdG1hcElt
YWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXgg
Pj0gZnJhbWVDb3VudCgpKQpAQCAtMzAyLDI1ICszOTksNzUgQEAgYm9vbCBCaXRtYXBJbWFnZTo6
ZW5zdXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgpCiAgICAgICAgIGNhY2hlRnJhbWUoaW5k
ZXgpOwogICAgIHJldHVybiB0cnVlOwogfQorI2Vsc2UKK2Jvb2wgQml0bWFwSW1hZ2U6OmVuc3Vy
ZUZyYW1lSW5mb0lzQ2FjaGVkKHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXggPj0gZnJh
bWVDb3VudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaW5kZXggPj0gbV9m
cmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9oYXZlSW5mbykKKyAgICAgICAgY2Fj
aGVGcmFtZUluZm8oaW5kZXgpOworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCiAKIFBhc3NO
YXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIGZyYW1lQXRJbmRleChpbmRleCwgMS4wZik7
CisjZWxzZQogICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gbV9mcmFtZXNbaW5k
ZXhdLm1fZnJhbWU7CisjZW5kaWYKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK1Bhc3NOYXRpdmVJ
bWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgc2Nh
bGVIaW50KQoreworICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFt
ZXNbaW5kZXhdLm1fZnJhbWUpCisgICAgICAgIGNhY2hlRnJhbWUoaW5kZXgsIHNjYWxlSGludCk7
CisgICAgZWxzZSBpZiAoc3RkOjptaW4oMS4wZiwgc2NhbGVIaW50KSA+IG1fZnJhbWVzW2luZGV4
XS5tX3NjYWxlKSB7CisgICAgICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwg
YnV0IGF0IHRvbyBzbWFsbCBhIHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgorICAg
ICAgICBpbnQgc2l6ZUNoYW5nZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOworICAg
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihtX2RlY29kZWRTaXplKSArIHNpemVDaGFuZ2Ug
Pj0gMCk7CisgICAgICAgIG1fZnJhbWVzW2luZGV4XS5jbGVhcih0cnVlKTsKKyAgICAgICAgaW52
YWxpZGF0ZVBsYXRmb3JtRGF0YSgpOworICAgICAgICBtX2RlY29kZWRTaXplICs9IHNpemVDaGFu
Z2U7CisgICAgICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgICAgICBpbWFnZU9ic2Vy
dmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCBzaXplQ2hhbmdlKTsKKworICAgICAgICBj
YWNoZUZyYW1lKGluZGV4LCBzY2FsZUhpbnQpOworICAgIH0KKyAgICByZXR1cm4gbV9mcmFtZXNb
aW5kZXhdLm1fZnJhbWU7Cit9CisjZW5kaWYKKwogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IEZJWE1FOiBjYWNoZUZyYW1lSW5mbyBkb2VzIG5vdCBzZXQgbV9pc0NvbXBsZXRlLiBTaG91bGQg
aXQ/CisgICAgaWYgKCFlbnN1cmVGcmFtZUluZm9Jc0NhY2hlZChpbmRleCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyNlbHNlCiAgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4
XS5tX2lzQ29tcGxldGU7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJ
bmRleChzaXplX3QgaW5kZXgpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmICghZW5zdXJl
RnJhbWVJbmZvSXNDYWNoZWQoaW5kZXgpKQorICAgICAgICByZXR1cm4gMDsKKyNlbHNlCiAgICAg
aWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKICAgICAgICAgcmV0dXJuIDA7CisjZW5k
aWYKICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fZHVyYXRpb247CiB9CiAKQEAgLTMzMSw5
ICs0NzgsMTMgQEAgUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpCiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4
KHNpemVfdCBpbmRleCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKCFlbnN1cmVGcmFt
ZUluZm9Jc0NhY2hlZChpbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBGSVhNRTogV2h5
IHdvdWxkIGFuIGludmFsaWQgaW5kZXggcmV0dXJuIHRydWUgaGVyZT8KKyNlbHNlCiAgICAgaWYg
KG1fZnJhbWVzLnNpemUoKSA8PSBpbmRleCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0KKyNlbmRp
ZgogICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCiAgICAgICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKIApAQCAtMzQ3LDggKzQ5OCwxNCBAQCBib29s
IEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKQogCiBJbWFnZU9yaWVu
dGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgp
CiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBjYWNoZUZyYW1lSW5mbyBkb2Vz
IG5vdCBzZXQgbV9vcmllbnRhdGlvbi4gU2hvdWxkIGl0PworICAgIGlmICghZW5zdXJlRnJhbWVJ
bmZvSXNDYWNoZWQoaW5kZXgpKQorICAgICAgICByZXR1cm4gRGVmYXVsdEltYWdlT3JpZW50YXRp
b247CisjZWxzZQogICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCiAgICAgICAg
IHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKKyNlbmRpZgogCiAgICAgaWYgKG1fZnJh
bWVzW2luZGV4XS5tX2hhdmVNZXRhZGF0YSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4
XS5tX29yaWVudGF0aW9uOwpAQCAtMzYzLDggKzUyMCw2IEBAIGJvb2wgQml0bWFwSW1hZ2U6Om5v
dFNvbGlkQ29sb3IoKQogfQogI2VuZGlmCiAKLQotCiBpbnQgQml0bWFwSW1hZ2U6OnJlcGV0aXRp
b25Db3VudChib29sIGltYWdlS25vd25Ub0JlQ29tcGxldGUpCiB7CiAgICAgaWYgKChtX3JlcGV0
aXRpb25Db3VudFN0YXR1cyA9PSBVbmtub3duKSB8fCAoKG1fcmVwZXRpdGlvbkNvdW50U3RhdHVz
ID09IFVuY2VydGFpbikgJiYgaW1hZ2VLbm93blRvQmVDb21wbGV0ZSkpIHsKQEAgLTQxMiwxMiAr
NTY3LDE4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKGJvb2wgY2F0Y2hVcElm
TmVjZXNzYXJ5KQogICAgIGNvbnN0IGRvdWJsZSBjdXJyZW50RHVyYXRpb24gPSBmcmFtZUR1cmF0
aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CiAgICAgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUg
Kz0gY3VycmVudER1cmF0aW9uOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBXaGVuIGFu
IGFuaW1hdGVkIGltYWdlIGlzIG1vcmUgdGhhbiBmaXZlIG1pbnV0ZXMgb3V0IG9mIGRhdGUsIHRo
ZQogICAgIC8vIHVzZXIgcHJvYmFibHkgZG9lc24ndCBjYXJlIGFib3V0IHJlc3luY2luZyBhbmQg
d2UgY291bGQgYnVybiBhIGxvdCBvZgogICAgIC8vIHRpbWUgbG9vcGluZyB0aHJvdWdoIGZyYW1l
cyBiZWxvdy4gIEp1c3QgcmVzZXQgdGhlIHRpbWluZ3MuCiAgICAgY29uc3QgZG91YmxlIGNBbmlt
YXRpb25SZXN5bmNDdXRvZmYgPSA1ICogNjA7CiAgICAgaWYgKCh0aW1lIC0gbV9kZXNpcmVkRnJh
bWVTdGFydFRpbWUpID4gY0FuaW1hdGlvblJlc3luY0N1dG9mZikKICAgICAgICAgbV9kZXNpcmVk
RnJhbWVTdGFydFRpbWUgPSB0aW1lICsgY3VycmVudER1cmF0aW9uOworI2Vsc2UKKyAgICAvLyBN
YWludGFpbmluZyBmcmFtZS10by1mcmFtZSBkZWxheXMgaXMgbW9yZSBpbXBvcnRhbnQgdGhhbgor
ICAgIC8vIG1haW50YWluaW5nIGFic29sdXRlIGFuaW1hdGlvbiB0aW1pbmcsIHNvIHJlc2V0IHRo
ZSB0aW1pbmdzIGVhY2ggZnJhbWUuCisgICAgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUgPSB0aW1l
ICsgY3VycmVudER1cmF0aW9uOworI2VuZGlmCiAKICAgICAvLyBUaGUgaW1hZ2UgbWF5IGxvYWQg
bW9yZSBzbG93bHkgdGhhbiBpdCdzIHN1cHBvc2VkIHRvIGFuaW1hdGUsIHNvIHRoYXQgYnkKICAg
ICAvLyB0aGUgdGltZSB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBmaXJzdCByZXBldGl0aW9uLCB3
ZSdyZSB3ZWxsIGJlaGluZC4KQEAgLTU0OCwxMCArNzA5LDEyIEBAIGJvb2wgQml0bWFwSW1hZ2U6
OmludGVybmFsQWR2YW5jZUFuaW1hdGlvbihib29sIHNraXBwaW5nRnJhbWVzKQogICAgIC8vIFN0
b3AgdGhlIGFuaW1hdGlvbi4KICAgICBzdG9wQW5pbWF0aW9uKCk7CiAgICAgCisjaWYgIVBMQVRG
T1JNKElPUykKICAgICAvLyBTZWUgaWYgYW55b25lIGlzIHN0aWxsIHBheWluZyBhdHRlbnRpb24g
dG8gdGhpcyBhbmltYXRpb24uICBJZiBub3QsIHdlIGRvbid0CiAgICAgLy8gYWR2YW5jZSBhbmQg
d2lsbCByZW1haW4gc3VzcGVuZGVkIGF0IHRoZSBjdXJyZW50IGZyYW1lIHVudGlsIHRoZSBhbmlt
YXRpb24gaXMgcmVzdW1lZC4KICAgICBpZiAoIXNraXBwaW5nRnJhbWVzICYmIGltYWdlT2JzZXJ2
ZXIoKS0+c2hvdWxkUGF1c2VBbmltYXRpb24odGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgogCiAgICAgKyttX2N1cnJlbnRGcmFtZTsKICAgICBib29sIGFkdmFuY2VkQW5pbWF0
aW9uID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5oCmluZGV4IGI5ZGQ3YjNhNTIxNzg3NmMxM2M0MGM4OGJmN2M2Y2JmZTRhNzllNGYuLjg3
ZDhiOGM2NjIyZmI5ZmMzYzJiZjAwNDY1N2M3MDUzYmU0ZTlmM2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtMzYsNyArMzYsOSBAQAog
CiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpZiAhUExB
VEZPUk0oSU9TKQogT0JKQ19DTEFTUyBOU0ltYWdlOworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtNjcsNiArNjksMTAgQEAgcHVibGljOgog
ICAgIEZyYW1lRGF0YSgpCiAgICAgICAgIDogbV9mcmFtZSgwKQogICAgICAgICAsIG1fb3JpZW50
YXRpb24oRGVmYXVsdEltYWdlT3JpZW50YXRpb24pCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAg
ICAsIG1fc2NhbGUoMCkKKyAgICAgICAgLCBtX2hhdmVJbmZvKGZhbHNlKQorI2VuZGlmCiAgICAg
ICAgICwgbV9kdXJhdGlvbigwKQogICAgICAgICAsIG1faGF2ZU1ldGFkYXRhKGZhbHNlKQogICAg
ICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKQEAgLTg2LDYgKzkyLDEwIEBAIHB1YmxpYzoKIAog
ICAgIE5hdGl2ZUltYWdlUHRyIG1fZnJhbWU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVu
dGF0aW9uOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBmbG9hdCBtX3NjYWxlOworICAgIGJvb2wg
bV9oYXZlSW5mbzsKKyNlbmRpZgogICAgIGZsb2F0IG1fZHVyYXRpb247CiAgICAgYm9vbCBtX2hh
dmVNZXRhZGF0YSA6IDE7CiAgICAgYm9vbCBtX2lzQ29tcGxldGUgOiAxOwpAQCAtOTcsNiArMTA3
LDkgQEAgcHVibGljOgogLy8gQml0bWFwSW1hZ2UgQ2xhc3MKIC8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorLy8gRklYTUU6IFdlIHNob3VsZCBi
ZXR0ZXIgaW50ZWdyYXRlIHRoZSBpT1MgYW5kIG5vbi1pT1MgY29kZSBpbiB0aGlzIGNsYXNzLiBV
bmxpa2Ugb3RoZXIgcG9ydHMsIHRoZQorLy8gaU9TIHBvcnQgY2FjaGVzIHRoZSBtZXRhZGF0YSBm
b3IgYSBmcmFtZSB3aXRob3V0IGRlY29kaW5nIHRoZSBpbWFnZS4KKwogY2xhc3MgQml0bWFwSW1h
Z2UgRklOQUwgOiBwdWJsaWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFn
ZTsKICAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CkBAIC0xMjIsNiAr
MTM1LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgT1ZF
UlJJREU7CiAgICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKEltYWdlT3JpZW50
YXRpb25EZXNjcmlwdGlvbiA9IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCBJbnRTaXplIG9yaWdpbmFsU2l6ZSgpIGNv
bnN0OworICAgIEludFNpemUgb3JpZ2luYWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29u
c3Q7CisjZW5kaWYKICAgICBJbnRTaXplIGN1cnJlbnRGcmFtZVNpemUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgZ2V0SG90U3BvdChJbnRQb2ludCYpIGNvbnN0IE9WRVJSSURFOwogCkBAIC0x
NDEsNyArMTU4LDkgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIEFjY2Vz
c29ycyBmb3IgbmF0aXZlIGltYWdlIGZvcm1hdHMuCisjaWYgIVBMQVRGT1JNKElPUykKICAgICB2
aXJ0dWFsIE5TSW1hZ2UqIGdldE5TSW1hZ2UoKSBPVkVSUklERTsKKyNlbmRpZgogICAgIHZpcnR1
YWwgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIE9WRVJSSURFOwogI2VuZGlmCiAK
QEAgLTE5NSw2ICsyMTQsMTAgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKICAgICBzaXplX3QgY3Vy
cmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50RnJhbWU7IH0KKyNpZiBQTEFURk9S
TShJT1MpCisgICAgUGFzc05hdGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRleChzaXplX3QsIGZsb2F0
IHNjYWxlSGludCk7CisgICAgUGFzc05hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lQXRJ
bmRleChzaXplX3QpOworI2VuZGlmCiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKICAgICBQYXNz
TmF0aXZlSW1hZ2VQdHIgZnJhbWVBdEluZGV4KHNpemVfdCk7CiAgICAgYm9vbCBmcmFtZUlzQ29t
cGxldGVBdEluZGV4KHNpemVfdCk7CkBAIC0yMDMsOSArMjI2LDE4IEBAIHByb3RlY3RlZDoKICAg
ICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4KHNpemVfdCk7CiAKICAg
ICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMgYSBmcmFtZS4gTmV2ZXIgYWNjZXNzZWQgZXhjZXB0IGlu
dGVybmFsbHkuCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgY2FjaGVGcmFtZShzaXplX3Qg
aW5kZXgsIGZsb2F0IHNjYWxlSGludCk7CisKKyAgICAvLyBDYWNoZSBmcmFtZSBtZXRhZGF0YSB3
aXRob3V0IGRlY29kaW5nIGltYWdlLgorICAgIHZvaWQgY2FjaGVGcmFtZUluZm8oc2l6ZV90IGlu
ZGV4KTsKKyAgICAvLyBDYWxsZWQgYmVmb3JlIGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0gZm9y
IGluZm8gd2l0aG91dCBkZWNvZGluZy4gUmV0dXJucyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91
bmRzLgorICAgIGJvb2wgZW5zdXJlRnJhbWVJbmZvSXNDYWNoZWQoc2l6ZV90IGluZGV4KTsKKyNl
bHNlCiAgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRleCk7CiAgICAgLy8gQ2FsbGVkIGJl
Zm9yZSBhY2Nlc3NpbmcgbV9mcmFtZXNbaW5kZXhdLiBSZXR1cm5zIGZhbHNlIG9uIGluZGV4IG91
dCBvZiBib3VuZHMuCiAgICAgYm9vbCBlbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCk7
CisjZW5kaWYKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhLiAgV2hl
biB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50aXJlIGZy
YW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ryb3kKQEAg
LTI2OCw2ICszMDAsMTAgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1faW1hZ2VP
cmllbnRhdGlvbiA6IDQ7IC8vIEltYWdlT3JpZW50YXRpb25FbnVtCiAgICAgbXV0YWJsZSB1bnNp
Z25lZCBtX3Nob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uIDogMTsgLy8gUmVzcGVjdEltYWdl
T3JpZW50YXRpb25FbnVtCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgbXV0YWJsZSBJbnRTaXpl
IG1fb3JpZ2luYWxTaXplOyAvLyBUaGUgc2l6ZSBvZiB0aGUgdW5zdWJzYW1wbGVkIGltYWdlLgor
ICAgIG11dGFibGUgSW50U2l6ZSBtX29yaWdpbmFsU2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsK
KyNlbmRpZgogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZTsgLy8gVGhlIGluZGV4IG9mIHRoZSBj
dXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KICAgICBWZWN0b3I8RnJhbWVEYXRhLCAxPiBtX2Zy
YW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4g
V2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIApAQCAtMjc4
LDcgKzMxNCw5IEBAIHByaXZhdGU6CiAgICAgZG91YmxlIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1l
OyAgLy8gVGhlIHN5c3RlbSB0aW1lIGF0IHdoaWNoIHdlIGhvcGUgdG8gc2VlIHRoZSBuZXh0IGNh
bGwgdG8gc3RhcnRBbmltYXRpb24oKS4KIAogI2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIG11dGFibGUgUmV0YWluUHRyPE5TSW1hZ2U+IG1fbnNJbWFnZTsgLy8gQSBj
YWNoZWQgTlNJbWFnZSBvZiBmcmFtZSAwLiBPbmx5IGJ1aWx0IGxhemlseSBpZiBzb21lb25lIGFj
dHVhbGx5IHF1ZXJpZXMgZm9yIG9uZS4KKyNlbmRpZgogICAgIG11dGFibGUgUmV0YWluUHRyPENG
RGF0YVJlZj4gbV90aWZmUmVwOyAvLyBDYWNoZWQgVElGRiByZXAgZm9yIGZyYW1lIDAuICBPbmx5
IGJ1aWx0IGxhemlseSBpZiBzb21lb25lIHF1ZXJpZXMgZm9yIG9uZS4KICNlbmRpZgogCkBAIC0y
ODgsNiArMzI2LDEyIEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2RlY29kZWRQ
cm9wZXJ0aWVzU2l6ZTsgLy8gVGhlIHNpemUgb2YgZGF0YSBkZWNvZGVkIGJ5IHRoZSBzb3VyY2Ug
dG8gZGV0ZXJtaW5lIGltYWdlIHByb3BlcnRpZXMgKGUuZy4gc2l6ZSwgZnJhbWUgY291bnQsIGV0
YykuCiAgICAgc2l6ZV90IG1fZnJhbWVDb3VudDsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGV4cG9zZSBhIHNldHRpbmcgdG8gZW5hYmxlL2Rpc2FibGUgcHJv
Z3Jlc3NpdmUgbG9hZGluZyByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCisgICAgZG91
YmxlIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtUaW1lOworICAgIHVpbnQxNl90IG1fcHJvZ3Jlc3Np
dmVMb2FkQ2h1bmtDb3VudDsKKyNlbmRpZgorCiAgICAgYm9vbCBtX2lzU29saWRDb2xvciA6IDE7
IC8vIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBhIDF4MSBzb2xpZCBpbWFnZS4KICAgICBib29sIG1f
Y2hlY2tlZEZvclNvbGlkQ29sb3IgOiAxOyAvLyBXaGV0aGVyIHdlJ3ZlIGNoZWNrZWQgdGhlIGZy
YW1lIGZvciBzb2xpZCBjb2xvci4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuY3BwCmluZGV4IDIyYzhkYzFjMzMyZmNkNDliYmNiOTk3YzU2ZTEwMzlhNjYxNWY5MjUu
LjU5ZDM3NTk1ZGIzZGY2MjdhNjZlMDkyYWExMDg1MDBiYTk4M2Q4MzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTMxMCw2ICszMTAsMTcgQEAgQ29s
b3IgQ29sb3I6OmRhcmsoKSBjb25zdAogICAgICAgICAgICAgICAgICBhbHBoYSgpKTsKIH0KIAor
Ym9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKK3sKKyAgICBmbG9hdCByZWQ7CisgICAgZmxvYXQg
Z3JlZW47CisgICAgZmxvYXQgYmx1ZTsKKyAgICBmbG9hdCBhbHBoYTsKKyAgICBnZXRSR0JBKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICBmbG9hdCBsYXJnZXN0Tm9uQWxwaGFDaGFubmVs
ID0gc3RkOjptYXgocmVkLCBzdGQ6Om1heChncmVlbiwgYmx1ZSkpOworICAgIHJldHVybiBhbHBo
YSA+IDAuNSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41OworfQorCiBzdGF0aWMgaW50
IGJsZW5kQ29tcG9uZW50KGludCBjLCBpbnQgYSkKIHsKICAgICAvLyBXZSB1c2Ugd2hpdGUuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAppbmRleCA4ZTQwYzI0NGIyYWU3
NjA1ZTE3NjE3MzJkNjhlYzQ0YzllZDA3OTJjLi4yMDQ3YWQyNGMzN2E4MGIxMTc1OGY0NGQyZjhj
MGJlYzEyODU4MDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgK
QEAgLTM0LDYgKzM0LDkgQEAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgog
dHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvciogQ0dDb2xvclJlZjsKKyNpZiBQTEFURk9STShJT1MpCit0
eXBlZGVmIHN0cnVjdCBDR0NvbG9yU3BhY2UqIENHQ29sb3JTcGFjZVJlZjsKKyNlbmRpZiAvLyBQ
TEFURk9STShJT1MpCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTExOCw2ICsxMjEs
OCBAQCBwdWJsaWM6CiAgICAgQ29sb3IgbGlnaHQoKSBjb25zdDsKICAgICBDb2xvciBkYXJrKCkg
Y29uc3Q7CiAKKyAgICBib29sIGlzRGFyaygpIGNvbnN0OworCiAgICAgLy8gVGhpcyBpcyBhbiBp
bXBsZW1lbnRhdGlvbiBvZiBQb3J0ZXItRHVmZidzICJzb3VyY2Utb3ZlciIgZXF1YXRpb24KICAg
ICBDb2xvciBibGVuZChjb25zdCBDb2xvciYpIGNvbnN0OwogICAgIENvbG9yIGJsZW5kV2l0aFdo
aXRlKCkgY29uc3Q7CkBAIC0xNDUsNiArMTUwLDE1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3QgUkdCQTMyIGdyYXkgPSAweEZGQTBBMEEwOwogICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgbGln
aHRHcmF5ID0gMHhGRkMwQzBDMDsKICAgICBzdGF0aWMgY29uc3QgUkdCQTMyIHRyYW5zcGFyZW50
ID0gMHgwMDAwMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGN5YW4gPSAweEZGMDBGRkZG
OworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgdGFwID0gMHg0
RDFBMUExQTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGNvbG9yIHNob3VsZG4ndCBiZSBpT1Mtc3Bl
Y2lmaWMuIE9uY2Ugd2UgZml4IHVwIGl0cyB1c2FnZSBpbiBJbmxpbmVUZXh0Qm94OjpwYWludENv
bXBvc2l0aW9uQmFja2dyb3VuZCgpCisgICAgLy8gd2Ugc2hvdWxkIG1vdmUgaXQgb3V0c2lkZSB0
aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI2Mjk2Pi4KKyAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGNvbXBvc2l0aW9u
RmlsbCA9IDB4M0NBRkMwRTM7CisjZW5kaWYKIAogcHJpdmF0ZToKICAgICBSR0JBMzIgbV9jb2xv
cjsKQEAgLTIwMCw2ICsyMTQsOSBAQCBpbmxpbmUgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVp
bnQxNl90IHZhbHVlKQogCiAjaWYgVVNFKENHKQogQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKGNv
bnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CisjaWYgUExBVEZPUk0oSU9TKQorQ0dDb2xvclJlZiBj
cmVhdGVDR0NvbG9yV2l0aERldmljZVdoaXRlKENHRmxvYXQgd2hpdGUsIENHRmxvYXQgYWxwaGEp
OworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5
UmVmcmVzaE1vbml0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3Bs
YXlSZWZyZXNoTW9uaXRvci5oCmluZGV4IDhlMDU4MzEwOWE4ZjIwMTczMTAyODAwNjA5MTI4MDY4
MzRkMGI0ZTEuLmY4OTI5ZDY5ZmQ2NjMxZWQ2ZjhkY2JkMDkxYTUzMTJjMjVhNzFlMmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9u
aXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZy
ZXNoTW9uaXRvci5oCkBAIC0xMzEsMTIgKzEzMSwxOSBAQCBwcml2YXRlOgogICAgIHZvaWQgc3Rv
cEFuaW1hdGlvbkNsaWVudCgpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExB
VEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogcHVibGljOgogICAgIHZvaWQgZGlzcGxheUxp
bmtGaXJlZChkb3VibGUgbm93U2Vjb25kcywgZG91YmxlIG91dHB1dFRpbWVTZWNvbmRzKTsKIHBy
aXZhdGU6CiAgICAgQ1ZEaXNwbGF5TGlua1JlZiBtX2Rpc3BsYXlMaW5rOwogI2VuZGlmCisKKyNp
ZiBQTEFURk9STShJT1MpCitwdWJsaWM6CisgICAgdm9pZCBkaXNwbGF5TGlua0ZpcmVkKGRvdWJs
ZSBub3dTZWNvbmRzKTsKK3ByaXZhdGU6CisgICAgdm9pZCogbV9kaXNwbGF5TGluazsKKyNlbmRp
ZgogfTsKIAogLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9p
bnQuaAppbmRleCA5MjE2MTcxODU1YTY5MTk1OWYzNjEyNTdkMTQ3OTEyZTJhNDBlOWQ0Li4xNjBk
MDhmMjFkZmVkMTNjM2FjZDgwZDkzZDM3OGFiOWEyMmUzMjMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCkBAIC00MywxMyArNDMsMTMgQEAgY2xh
c3MgRmxvYXRQb2ludDsKIHR5cGVkZWYgc3RydWN0IENHUG9pbnQgQ0dQb2ludDsKICNlbmRpZgog
Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykK
ICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogdHlwZWRl
ZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50OwogI2Vsc2UKIHR5cGVkZWYgc3RydWN0IF9OU1BvaW50
IE5TUG9pbnQ7CiAjZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgIVBM
QVRGT1JNKElPUykKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMzksMTAgKzEzOSwxMiBA
QCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dQb2ludCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9U
WVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpCiAgICAgRmxvYXRQb2ludChjb25zdCBOU1Bv
aW50Jik7CiAgICAgb3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0OwogI2VuZGlmCisjZW5kaWYgLy8g
IVBMQVRGT1JNKElPUykKIAogI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgRmxvYXRQb2lu
dChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRQb2ludCYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAppbmRleCAxY2UyMzllNWZmN2IzZGFi
MGJjYzljYzNjNmYyZjdlODJlYzQzNDM0Li5jYzlhMDNiZWY4MDIzNTFhY2M2MGRhZWQ0YWZjZmJi
NWFiNDIzNTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaApAQCAtMzAsMTcgKzMwLDIxIEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDb3JlR3Jh
cGhpY3MvQ0dHZW9tZXRyeS5oPgorI2VuZGlmCisKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVj
dCBDR1JlY3QgQ0dSZWN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9B
U19DR0dFT01FVFJZX1RZUEVTCiB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0OwogI2Vsc2UK
IHR5cGVkZWYgc3RydWN0IF9OU1JlY3QgTlNSZWN0OwogI2VuZGlmCi0jZW5kaWYKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAKICNpZiBQTEFURk9STShCTEFDS0JF
UlJZKQogbmFtZXNwYWNlIEJsYWNrQmVycnkgewpAQCAtMTgxLDEwICsxODUsMTIgQEAgcHVibGlj
OgogICAgIG9wZXJhdG9yIENHUmVjdCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0o
SU9TKQogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1F
X0FTX0NHR0VPTUVUUllfVFlQRVMpCiAgICAgRmxvYXRSZWN0KGNvbnN0IE5TUmVjdCYpOwogICAg
IG9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0OwogI2VuZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKIAogI2lmIFVTRShDQUlSTykKICAgICBGbG9hdFJlY3QoY29uc3QgY2Fpcm9fcmVjdGFuZ2xl
X3QmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
U2l6ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKaW5k
ZXggMGZhOGNjMWQ3NmIwYTEzYzkzNmVkNjFlZjA1OTRkMzkyNThjYjVjYy4uOTUyYTI5MDQ0YWRj
OTlhZWUxNzJjNmJkYjRkZjg1N2E0MTI4YmY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKQEAgLTM5LDE3ICszOSwyMSBAQCBjbGFzcyBGbG9hdFNp
emU7CiB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKKwogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0
IENHU2l6ZSBDR1NpemU7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9S
TShNQUMpICYmICFQTEFURk9STShJT1MpCiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FT
X0NHR0VPTUVUUllfVFlQRVMKIHR5cGVkZWYgc3RydWN0IENHU2l6ZSBOU1NpemU7CiAjZWxzZQog
dHlwZWRlZiBzdHJ1Y3QgX05TU2l6ZSBOU1NpemU7CiAjZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0xMjIsMTAgKzEyNiwxMiBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dTaXplKCkgY29u
c3Q7CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiAjaWYgKFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKQogICAg
IGV4cGxpY2l0IEZsb2F0U2l6ZShjb25zdCBOU1NpemUgJik7IC8vIGRvbid0IGRvIHRoaXMgaW1w
bGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgb3BlcmF0b3IgTlNTaXplKCkgY29uc3Q7CiAj
ZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
Y3BwCmluZGV4IGEyYjgwYTBlMTc5MmVkYWQ2YjU4NWNhZmNhZjZhMWIyNTkxYTZjMzQuLmYzYmJk
NzIxZDZiNWM2Yjc3OTQwOWE2OTJjZTA1ZDM0MzljOTRhOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC01MCw2ICs1MCw4IEBAIHRlbXBsYXRlIDw+IHZv
aWQgZGVsZXRlT3duZWRQdHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91
dCogcHRyKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBQYXNzUmVmPEZvbnRHbHlw
aHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisKIGNvbnN0IHVpbnQ4X3QgRm9udDo6c19yb3Vu
ZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdID0gewogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDEgLypcdCovLCAxIC8qXG4qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKICAgICAxIC8qc3BhY2UqLywgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKi0qLywgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKj8qLywKQEAgLTEwNyw3ICsxMDks
MTUgQEAgRm9udDo6Rm9udCgpCiB7CiB9CiAKKworCisvLyBGSVhNRTogV2Ugc2hvdWxkIHJlY29u
Y2lsZSB0aGUgZGlmZmVyZW5jZSBpbiBkYXRhdHlwZSBiZXR3ZWVuIGlPUyBhbmQgT3BlblNvdXJj
ZS4gT24gaU9TIHdlIHdhbnQgbGV0dGVyLCB3b3JkIHNwYWNpbmcKKy8vIHRvIGJlIGZsb2F0IGZv
ciBzdWItcGl4ZWwga2VybmluZy4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA2MDY+LgorI2lmICFQTEFURk9STShJT1MpCiBGb250OjpGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZmQsIHNob3J0IGxldHRlclNwYWNpbmcsIHNob3J0IHdvcmRTcGFjaW5n
KSAKKyNlbHNlCitGb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxl
dHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKSAKKyNlbmRpZgogICAgIDogbV9mb250RGVz
Y3JpcHRpb24oZmQpCiAgICAgLCBtX2xldHRlclNwYWNpbmcobGV0dGVyU3BhY2luZykKICAgICAs
IG1fd29yZFNwYWNpbmcod29yZFNwYWNpbmcpCkBAIC0xMTYsNiArMTI2LDcgQEAgRm9udDo6Rm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mIGZkLCBzaG9ydCBsZXR0ZXJTcGFjaW5nLCBzaG9ydCB3
b3JkU3BhY2luZykKIHsKIH0KIAorLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3Ry
dWN0b3IgcGxhdGZvcm0taW5kZXBlbmRlbnQuCiBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZv
bnRTbW9vdGhpbmdNb2RlKQogICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxh
dGZvcm1Gb250KGZvbnREYXRhKSkKICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQpAQCAtMTI1LDgg
KzEzNiwzMiBAQCBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBi
b29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNbwogewogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQpOwogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldEZvbnRTbW9vdGhpbmcoZm9udFNtb290aGluZ01vZGUpOworI2lmIFBMQVRGT1JNKElP
UykKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUo
Zm9udERhdGEuZm9udCgpKSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7CisgICAgbV9mb250RGVzY3JpcHRpb24u
c2V0SXRhbGljKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RG
b250VHJhaXRJdGFsaWMpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250
R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8g
Rm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKKyNlbmRpZgogfQogCisvLyBGSVhN
RTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4K
KyNpZiBQTEFURk9STShJT1MpCitGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZv
bnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQorICAgIDogbV9n
bHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKKyAgICAs
IG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93b3JkU3BhY2luZygwKQorICAgICwgbV90eXBl
c2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7CisgICAgQ1RG
b250UmVmIHByaW1hcnlGb250ID0gZm9udERhdGEuZm9udCgpOworICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9udCkpOworICAgIG1f
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlGb250
KSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXRhbGljKENURm9udEdldFN5bWJvbGljVHJh
aXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgbV9mb250RGVzY3Jp
cHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBr
Q1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7Cisg
ICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmludGVy
Rm9udCgpKTsKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKG1f
Zm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworfQorI2VuZGlmCisKIEZvbnQ6
OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCiAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbihvdGhlci5t
X2ZvbnREZXNjcmlwdGlvbikKICAgICAsIG1fZ2x5cGhzKG90aGVyLm1fZ2x5cGhzKQpAQCAtMjk3
LDE0ICszMzIsMTQgQEAgdm9pZCBGb250Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+
IGZvbnRTZWxlY3RvcikgY29uc3QKICAgICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgPSBjb21wdXRl
VHlwZXNldHRpbmdGZWF0dXJlcygpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbikgY29uc3QKK2Zsb2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnRO
b3RSZWFkeUFjdGlvbikgY29uc3QKIHsKICAgICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdoaWxl
IHdlIGFyZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9h
ZGluZywKICAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1lbnQgaXMgc2V0IHRvIHRy
dWUgKGluIHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawogICAgIC8vIGZvbnQpLgog
ICAgIGlmIChsb2FkaW5nQ3VzdG9tRm9udHMoKSAmJiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24g
PT0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAg
ICAgIHJldHVybiAwOworCiAgICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0byk7
CiAKICAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4KQpAQCAtMzQwLDcgKzM3NSw3IEBA
IGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvCiAgICAgfQogCiAgICAgYm9vbCBoYXNLZXJuaW5nT3JM
aWdhdHVyZXMgPSB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiAoS2VybmluZyB8IExpZ2F0dXJlcyk7
Ci0gICAgYm9vbCBoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZyA9IHdvcmRTcGFjaW5nKCkg
fCBsZXR0ZXJTcGFjaW5nKCk7CisgICAgYm9vbCBoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3BhY2lu
ZyA9IHdvcmRTcGFjaW5nKCkgfHwgbGV0dGVyU3BhY2luZygpOwogICAgIGZsb2F0KiBjYWNoZUVu
dHJ5ID0gbV9nbHlwaHMtPndpZHRoQ2FjaGUoKS5hZGQocnVuLCBzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6cXVpZXRfTmFOKCksIGhhc0tlcm5pbmdPckxpZ2F0dXJlcywgaGFzV29yZFNwYWNp
bmdPckxldHRlclNwYWNpbmcsIGdseXBoT3ZlcmZsb3cpOwogICAgIGlmIChjYWNoZUVudHJ5ICYm
ICFzdGQ6OmlzbmFuKCpjYWNoZUVudHJ5KSkKICAgICAgICAgcmV0dXJuICpjYWNoZUVudHJ5Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IGMzZjM3MDY2NjZiZGNm
YThmNDEzODU5NjJmMmNmZWRiMDU3YTk4ZTUuLjFlMTY0OGE5NDMwOTkzMTg3NThiZGNmNDJlM2Rm
MDExNGFkOGI4ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAg
LTc5LDkgKzc5LDIxIEBAIHN0cnVjdCBHbHlwaE92ZXJmbG93IHsKIGNsYXNzIEZvbnQgewogcHVi
bGljOgogICAgIEZvbnQoKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVjb25jaWxlIHRo
ZSBkaWZmZXJlbmNlIGluIGRhdGF0eXBlIGJldHdlZW4gaU9TIGFuZCBPcGVuU291cmNlLiBPbiBp
T1Mgd2Ugd2FudCBsZXR0ZXIsIHdvcmQgc3BhY2luZworICAgIC8vIHRvIGJlIGZsb2F0IGZvciBz
dWItcGl4ZWwga2VybmluZy4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA2MDY+LgorI2lmICFQTEFURk9STShJT1MpCiAgICAgRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBzaG9ydCBsZXR0ZXJTcGFjaW5nLCBzaG9ydCB3b3JkU3BhY2luZyk7CisjZWxz
ZQorICAgIEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgbGV0dGVyU3BhY2luZywg
ZmxvYXQgd29yZFNwYWNpbmcpOworI2VuZGlmCiAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBv
bmx5IHVzZWQgaWYgdGhlIHBsYXRmb3JtIHdhbnRzIHRvIHN0YXJ0IHdpdGggYSBuYXRpdmUgZm9u
dC4KICAgICBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzUHJpbnRpbmcsIEZv
bnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgUGFzc1JlZlB0cjxG
b250U2VsZWN0b3I+KTsKKyNlbmRpZgogICAgIH5Gb250KCk7CiAKICAgICBGb250KGNvbnN0IEZv
bnQmKTsKQEAgLTk4LDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZShQYXNzUmVm
UHRyPEZvbnRTZWxlY3Rvcj4pIGNvbnN0OwogCiAgICAgZW51bSBDdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24geyBEb05vdFBhaW50SWZGb250Tm90UmVhZHksIFVzZUZhbGxiYWNrSWZGb250Tm90UmVh
ZHkgfTsKLSAgICB2b2lkIGRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSwgQ3VzdG9tRm9u
dE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBjb25zdDsKKyAgICBm
bG9hdCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxv
YXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiA9IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CiAgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAt
MSkgY29uc3Q7CiAKICAgICBEYXNoQXJyYXkgZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0
KGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgZnJvbSwg
aW50IHRvLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRzKSBjb25zdDsKQEAgLTExNSwxMCAr
MTI3LDE5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTbWFsbENhcHMoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsgfQogCisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCByZWNvbmNpbGUgdGhlIGRpZmZlcmVuY2UgaW4gZGF0YXR5cGUgYmV0d2VlbiBpT1MgYW5k
IE9wZW5Tb3VyY2UuIE9uIGlPUyB3ZSB3YW50IGxldHRlciwgd29yZCBzcGFjaW5nCisgICAgLy8g
dG8gYmUgZmxvYXQgZm9yIHN1Yi1waXhlbCBrZXJuaW5nLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYwNj4uCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBz
aG9ydCB3b3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fd29yZFNwYWNpbmc7IH0KICAgICBz
aG9ydCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9CiAg
ICAgdm9pZCBzZXRXb3JkU3BhY2luZyhzaG9ydCBzKSB7IG1fd29yZFNwYWNpbmcgPSBzOyB9CiAg
ICAgdm9pZCBzZXRMZXR0ZXJTcGFjaW5nKHNob3J0IHMpIHsgbV9sZXR0ZXJTcGFjaW5nID0gczsg
fQorI2Vsc2UKKyAgICBmbG9hdCB3b3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fd29yZFNw
YWNpbmc7IH0KKyAgICBmbG9hdCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0
ZXJTcGFjaW5nOyB9CisgICAgdm9pZCBzZXRXb3JkU3BhY2luZyhmbG9hdCBzKSB7IG1fd29yZFNw
YWNpbmcgPSBzOyB9CisgICAgdm9pZCBzZXRMZXR0ZXJTcGFjaW5nKGZsb2F0IHMpIHsgbV9sZXR0
ZXJTcGFjaW5nID0gczsgfQorI2VuZGlmCiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsK
ICAgICBib29sIGlzUHJpbnRlckZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlv
bi51c2VQcmludGVyRm9udCgpOyB9CiAgICAgYm9vbCBpc1NWR0ZvbnQoKSBjb25zdCB7IHJldHVy
biBwcmltYXJ5Rm9udCgpLT5pc1NWR0ZvbnQoKTsgfQpAQCAtMTgwLDEwICsyMDEsMTAgQEAgcHJp
dmF0ZToKIAogICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCiAg
ICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4m
LCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0g
Tm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKLSAgICB2b2lkIGRyYXdTaW1wbGVUZXh0KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20s
IGludCB0bykgY29uc3Q7CisgICAgZmxvYXQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAgICAgdm9pZCBkcmF3R2x5cGhz
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZm
ZXImLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9p
ZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEdseXBoQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZvaWQgZHJhd0ds
eXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1
ZmZlciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0
IEF0b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICBmbG9hdCBmbG9h
dFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsK
ICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBm
bG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CkBAIC0xOTYs
NyArMjE3LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3Ry
ZWFtIGFkdmFuY2UuCiAgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0
RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICBmbG9hdCBkcmF3Q29tcGxleFRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Owog
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxv
dyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMp
IGNvbnN0OwpAQCAtMzA0LDggKzMyNSwxMyBAQCBwcml2YXRlOgogCiAgICAgRm9udERlc2NyaXB0
aW9uIG1fZm9udERlc2NyaXB0aW9uOwogICAgIG11dGFibGUgUmVmUHRyPEZvbnRHbHlwaHM+IG1f
Z2x5cGhzOworI2lmICFQTEFURk9STShJT1MpCiAgICAgc2hvcnQgbV9sZXR0ZXJTcGFjaW5nOwog
ICAgIHNob3J0IG1fd29yZFNwYWNpbmc7CisjZWxzZQorICAgIGZsb2F0IG1fbGV0dGVyU3BhY2lu
ZzsKKyAgICBmbG9hdCBtX3dvcmRTcGFjaW5nOworI2VuZGlmCiAgICAgbXV0YWJsZSBib29sIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3R5cGVzZXR0
aW5nRmVhdHVyZXMgOiAyOyAvLyAoVHlwZXNldHRpbmdGZWF0dXJlcykgQ2FjaGVzIHZhbHVlcyBj
b21wdXRlZCBmcm9tIG1fZm9udERlc2NyaXB0aW9uLgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCmluZGV4IGVkN2EyMDJkY2QwOTg5NjFjY2Y4
ZjY0YTBlZjdmNGQwODEzZGJmMWUuLmZiZThiZjQ0ZmQzN2RlY2Y0ZDkzNDRhODNiZmY0MDljOTA5
YjM2YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcApAQCAtNDUsMTQgKzQ1LDUwIEBACiAjaW5jbHVkZSAiT3BlblR5cGVWZXJ0aWNhbERhdGEu
aCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIk1lbW9yeVByZXNzdXJl
SGFuZGxlci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCisvLyBGSVhNRTogV2Ug
bWF5IGJlIGFibGUgdG8gc2ltcGxpZnkgdGhpcyBjb2RlIHVzaW5nIEMrKzExIHRocmVhZGluZyBw
cmltaXRpdmVzLCBpbmNsdWRpbmcgc3RkOjpjYWxsX29uY2UoKS4KK3N0YXRpYyBwdGhyZWFkX211
dGV4X3QgZm9udERhdGFMb2NrOworCitzdGF0aWMgdm9pZCBpbml0Rm9udENhY2hlTG9ja09uY2Uo
KQoreworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhBdHRyaWJ1dGU7CisgICAgcHRocmVh
ZF9tdXRleGF0dHJfaW5pdCgmbXV0ZXhBdHRyaWJ1dGUpOworICAgIHB0aHJlYWRfbXV0ZXhhdHRy
X3NldHR5cGUoJm11dGV4QXR0cmlidXRlLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7CisgICAg
cHRocmVhZF9tdXRleF9pbml0KCZmb250RGF0YUxvY2ssICZtdXRleEF0dHJpYnV0ZSk7CisgICAg
cHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmbXV0ZXhBdHRyaWJ1dGUpOworfQorCitzdGF0aWMg
cHRocmVhZF9vbmNlX3QgaW5pdEZvbnRMb2NrQ29udHJvbCA9IFBUSFJFQURfT05DRV9JTklUOwor
CitjbGFzcyBGb250TG9ja2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250TG9ja2Vy
KTsKK3B1YmxpYzoKKyAgICBGb250TG9ja2VyKCkKKyAgICB7CisgICAgICAgIHB0aHJlYWRfb25j
ZSgmaW5pdEZvbnRMb2NrQ29udHJvbCwgaW5pdEZvbnRDYWNoZUxvY2tPbmNlKTsKKyAgICAgICAg
aW50IGxvY2tjb2RlID0gcHRocmVhZF9tdXRleF9sb2NrKCZmb250RGF0YUxvY2spOworICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2NrY29kZSwgIWxvY2tjb2RlLCAiZm9udERh
dGFMb2NrIGxvY2sgZmFpbGVkIHdpdGggY29kZTolZCIsIGxvY2tjb2RlKTsgICAgCisgICAgfQor
ICAgIH5Gb250TG9ja2VyKCkKKyAgICB7CisgICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRf
bXV0ZXhfdW5sb2NrKCZmb250RGF0YUxvY2spOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
X1VOVVNFRChsb2NrY29kZSwgIWxvY2tjb2RlLCAiZm9udERhdGFMb2NrIHVubG9jayBmYWlsZWQg
d2l0aCBjb2RlOiVkIiwgbG9ja2NvZGUpOworICAgIH0KK307CisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQorCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8v
IEZJWE1FOiBXZSBzaG91bGQgcmV0dXJuIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVy
IHNpbmNlIHdlIG5ldmVyIHJldHVybiBhIG51bGxwdHIuCiBGb250Q2FjaGUqIGZvbnRDYWNoZSgp
CiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250Q2FjaGUsIGdsb2JhbEZvbnRDYWNoZSwg
KCkpOwotICAgIHJldHVybiAmZ2xvYmFsRm9udENhY2hlOworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxGb250Q2FjaGU+IGdsb2JhbEZvbnRDYWNoZTsKKyAgICByZXR1cm4gJmdsb2JhbEZvbnRD
YWNoZS5nZXQoKTsKIH0KIAogRm9udENhY2hlOjpGb250Q2FjaGUoKQpAQCAtMTg0LDYgKzIyMCwx
MCBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmbwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcGFzc2VkRmFt
aWx5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgRm9udExvY2tlciBmb250TG9ja2VyOworI2VuZGlmCisgICAgCiAjaWYgT1MoV0lORE9X
UykgJiYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQogICAgIC8vIExlYWRpbmcgIkAiIGluIHRo
ZSBmb250IG5hbWUgZW5hYmxlcyBXaW5kb3dzIHZlcnRpY2FsIGZsb3cgZmxhZyBmb3IgdGhlIGZv
bnQuCiAgICAgLy8gQmVjYXVzZSB3ZSBkbyB2ZXJ0aWNhbCBmbG93IGJ5IG91cnNlbHZlcywgd2Ug
ZG9uJ3Qgd2FudCB0byB1c2UgdGhlIFdpbmRvd3MgZmVhdHVyZS4KQEAgLTMxNyw4ICszNTcsMTUg
QEAgdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGEsIHN0ZDo6cGFpcjxSZWZQdHI8U2lt
cGxlRm9udERhdGE+LCB1bnNpZ25lZD4sIEYKIAogc3RhdGljIEZvbnREYXRhQ2FjaGUqIGdGb250
RGF0YUNhY2hlID0gMDsKIAorI2lmIFBMQVRGT1JNKElPUykKK2NvbnN0IGludCBjTWF4SW5hY3Rp
dmVGb250RGF0YSA9IDEyMDsKK2NvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDEw
MDsKK2NvbnN0IGludCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1
MDsKK2NvbnN0IGludCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEg
PSAzMDsKKyNlbHNlCiBjb25zdCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSAyMjU7CiBjb25z
dCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAyMDA7CisjZW5kaWYKIHN0YXRpYyBMaXN0
SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+PiogZ0luYWN0aXZlRm9udERhdGEgPSAwOwog
CiBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlseSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUsIFNob3VsZFJldGFpbiBzaG91
bGRSZXRhaW4pCkBAIC0zNDAsNiArMzg3LDEwIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSoKICAg
ICAgICAgQVNTRVJUKG1fcHVyZ2VQcmV2ZW50Q291bnQpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgRm9udExvY2tlciBmb250TG9ja2VyOworI2VuZGlmCisgICAgCiAgICAgaWYg
KCFnRm9udERhdGFDYWNoZSkgewogICAgICAgICBnRm9udERhdGFDYWNoZSA9IG5ldyBGb250RGF0
YUNhY2hlOwogICAgICAgICBnSW5hY3RpdmVGb250RGF0YSA9IG5ldyBMaXN0SGFzaFNldDxSZWZQ
dHI8U2ltcGxlRm9udERhdGE+PjsKQEAgLTM4MCw2ICs0MzEsMTAgQEAgdm9pZCBGb250Q2FjaGU6
OnJlbGVhc2VGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiAgICAgQVNT
RVJUKGdGb250RGF0YUNhY2hlKTsKICAgICBBU1NFUlQoIWZvbnREYXRhLT5pc0N1c3RvbUZvbnQo
KSk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgRm9udExvY2tlciBmb250TG9ja2VyOworI2Vu
ZGlmCisgICAgCiAgICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNo
ZS0+ZmluZChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwogICAgIEFTU0VSVChpdCAhPSBnRm9u
dERhdGFDYWNoZS0+ZW5kKCkpOwogICAgIGlmIChpdCA9PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkp
CkBAIC0zOTIsOCArNDQ3LDE3IEBAIHZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFj
dGl2ZUZvbnREYXRhSWZOZWVkZWQoKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIHVu
ZGVyTWVtb3J5UHJlc3N1cmUgPSBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5oYXNSZWNlaXZlZE1l
bW9yeVByZXNzdXJlKCk7CisgICAgaW50IGluYWN0aXZlRm9udERhdGFMaW1pdCA9IHVuZGVyTWVt
b3J5UHJlc3N1cmUgPyBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgOiBj
TWF4SW5hY3RpdmVGb250RGF0YTsKKyAgICBpbnQgdGFyZ2V0Rm9udERhdGFMaW1pdCA9IHVuZGVy
TWVtb3J5UHJlc3N1cmUgPyBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERh
dGEgOiBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YTsKKworICAgIGlmIChnSW5hY3RpdmVGb250RGF0
YSAmJiAhbV9wdXJnZVByZXZlbnRDb3VudCAmJiBnSW5hY3RpdmVGb250RGF0YS0+c2l6ZSgpID4g
aW5hY3RpdmVGb250RGF0YUxpbWl0KQorICAgICAgICBwdXJnZUluYWN0aXZlRm9udERhdGEoZ0lu
YWN0aXZlRm9udERhdGEtPnNpemUoKSAtIHRhcmdldEZvbnREYXRhTGltaXQpOworI2Vsc2UKICAg
ICBpZiAoZ0luYWN0aXZlRm9udERhdGEgJiYgIW1fcHVyZ2VQcmV2ZW50Q291bnQgJiYgZ0luYWN0
aXZlRm9udERhdGEtPnNpemUoKSA+IGNNYXhJbmFjdGl2ZUZvbnREYXRhKQogICAgICAgICBwdXJn
ZUluYWN0aXZlRm9udERhdGEoZ0luYWN0aXZlRm9udERhdGEtPnNpemUoKSAtIGNUYXJnZXRJbmFj
dGl2ZUZvbnREYXRhKTsKKyNlbmRpZgogfQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2
ZUZvbnREYXRhKGludCBjb3VudCkKQEAgLTQwOSw2ICs0NzMsMTAgQEAgdm9pZCBGb250Q2FjaGU6
OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgY291bnQpCiAKICAgICBpc1B1cmdpbmcgPSB0cnVl
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEZvbnRMb2NrZXIgZm9udExvY2tlcjsKKyNlbmRp
ZgorCiAgICAgVmVjdG9yPFJlZlB0cjxTaW1wbGVGb250RGF0YT4sIDIwPiBmb250RGF0YVRvRGVs
ZXRlOwogICAgIExpc3RIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4+OjppdGVyYXRvciBl
bmQgPSBnSW5hY3RpdmVGb250RGF0YS0+ZW5kKCk7CiAgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPFNp
bXBsZUZvbnREYXRhPj46Oml0ZXJhdG9yIGl0ID0gZ0luYWN0aXZlRm9udERhdGEtPmJlZ2luKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCmluZGV4IGI1
Y2YwOTE2Yzc3YjQzNTNlMzNjMzgxODJmOThlYTFkMWE2NDI4NTUuLjU2NzAyZWQzNDI5ZmRkNzFj
NjNjN2U4MzIwOWY4N2YyM2Q4NjY2MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0zMywxMiArMzMsMTcgQEAKICNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9V
bmljb2RlLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q29yZVRleHQvQ1RGb250
Lmg+CisjZW5kaWYKKwogI2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2lu
Y2x1ZGUgPG9iamlkbC5oPgpAQCAtMTAwLDkgKzEwNSw5IEBAIHN0cnVjdCBGb250RGVzY3JpcHRp
b25Gb250RGF0YUNhY2hlS2V5IHsKIH07CiAKIGNsYXNzIEZvbnRDYWNoZSB7Ci0gICAgZnJpZW5k
IGNsYXNzIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwotCiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRm9udENhY2hlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgZnJpZW5kIGNsYXNz
IEZvbnRDYWNoZVB1cmdlUHJldmVudGVyOworICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3ll
ZDxGb250Q2FjaGU+OwogcHVibGljOgogICAgIGZyaWVuZCBGb250Q2FjaGUqIGZvbnRDYWNoZSgp
OwogCkBAIC0xMTcsNiArMTIyLDkgQEAgcHVibGljOgogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQg
YnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CiAKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgc3RhdGljIGZsb2F0IHdlaWdodE9mQ1RGb250KENURm9udFJlZik7CisjZW5k
aWYKICNpZiBQTEFURk9STShXSU4pCiAgICAgSU1MYW5nRm9udExpbmtUeXBlKiBnZXRGb250TGlu
a0ludGVyZmFjZSgpOwogICAgIHN0YXRpYyB2b2lkIGNvbUluaXRpYWxpemUoKTsKQEAgLTE3OCw2
ICsxODYsMTAgQEAgcHJpdmF0ZToKICAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKIAogICAgIC8vIFRo
ZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdldEN1c3RvbUZhbGxiYWNrRm9udChjb25z
dCBVSW50MzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IGdldFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCk7CisjZW5kaWYKICAgICBQYXNzT3duUHRyPEZvbnRQbGF0Zm9ybURhdGE+
IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRv
bWljU3RyaW5nJiBmYW1pbHkpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBzaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mKTsKQEAgLTE5Myw2ICsyMDUsOSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgZnJpZW5kIGNs
YXNzIFNpbXBsZUZvbnREYXRhOyAvLyBGb3IgZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSopCiAgICAgZnJpZW5kIGNsYXNzIEZvbnRHbHlwaHM7CisjaWYgUExBVEZPUk0o
SU9TKQorICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXI7CisjZW5kaWYKIH07
CiAKIC8vIEdldCB0aGUgZ2xvYmFsIGZvbnRDYWNoZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCmluZGV4IDA3NDAxNzM1ZDczMWUyYmM0
YjFkYzQzYTM4YzQ1NjFjMzdhMzJkZTUuLjk1NjM0MzczZTk1NTdhNDk1MDI5YjJmOTBhMDRjMGFh
MzQwY2I2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRGYXN0UGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEZhc3RQYXRoLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQK
ICAgICByZXR1cm4gYmVmb3JlV2lkdGg7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd1NpbXBsZVRleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd1Np
bXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8v
IFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMrYWR2YW5jZXMrZm9udCBkYXRhIGZv
ciBlYWNoIGdseXBoLgogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwpAQCAtMTY2LDEwICsx
NjYsMTIgQEAgdm9pZCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmwKICAgICBmbG9hdCBzdGFydFggPSBwb2lu
dC54KCkgKyBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0bywg
Z2x5cGhCdWZmZXIpOwogCiAgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gMDsKIAogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChz
dGFydFgsIHBvaW50LnkoKSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5
cGhCdWZmZXIsIHN0YXJ0UG9pbnQpOworCisgICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3Rh
cnRYOwogfQogCiB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29u
c3QKQEAgLTE4Myw4ICsxODUsOCBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2lt
cGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdQogICAgIGRyYXdF
bXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQo
cG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOwogfQogCi12b2lkIEZvbnQ6
OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkgY29uc3QKLXsgICAKK3ZvaWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsIEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorewogI2lmICFFTkFCTEUoU1ZHX0ZP
TlRTKQogICAgIFVOVVNFRF9QQVJBTShydW4pOwogI2VuZGlmCkBAIC0yMjYsOSArMjI4LDExIEBA
IHZvaWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBpZiAo
cmVuZGVyaW5nQ29udGV4dCAmJiBmb250RGF0YS0+aXNTVkdGb250KCkpCiAgICAgICAgIHJlbmRl
cmluZ0NvbnRleHQtPmRyYXdTVkdHbHlwaHMoY29udGV4dCwgZm9udERhdGEsIGdseXBoQnVmZmVy
LCBsYXN0RnJvbSwgbmV4dEdseXBoIC0gbGFzdEZyb20sIHN0YXJ0UG9pbnQpOwotICAgIGVsc2UK
KyAgICBlbHNlIHsKICNlbmRpZgogICAgICAgICBkcmF3R2x5cGhzKGNvbnRleHQsIGZvbnREYXRh
LCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50
KTsKKyAgICAgICAgcG9pbnQuc2V0WChuZXh0WCk7CisgICAgfQogfQogCiBpbmxpbmUgc3RhdGlj
IGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwaChjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEsIEdseXBoIGdseXBoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udEdseXBocy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEdseXBocy5oCmluZGV4IDI5ZWRkZTc5MDlmNGQ2NDM0MjVjODJmNDI4MDlmM2JkMjEyZWM3NTku
LjRjNzBkN2RmMjdhOWZlNTZmZDE0NGZhZDc5MTc4ZTU3ZTE0YTMyNTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgKQEAgLTI3LDYgKzI3LDEwIEBA
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
CisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdseXBoUGFnZVRyZWVOb2RlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNw
cAppbmRleCAyMWJlYTM3MzU4NjMzZWVhMjc2YjY3ZjkzMGE0MDRiYWEwM2U1MjVjLi41MzA4ZWJk
ZmU1YzUyNTcwMWI5NWZhMzYxZWQzZTcwNTQxMjJhNmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcApAQCAtMzMsNiAr
MzMsOSBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSkKICAgICA6IG1fc3ludGhldGljQm9sZChmYWxzZSkKICAgICAsIG1f
c3ludGhldGljT2JsaXF1ZShmYWxzZSkKICAgICAsIG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkK
KyNpZiBQTEFURk9STShJT1MpCisgICAgLCBtX2lzRW1vamkoZmFsc2UpCisjZW5kaWYKICAgICAs
IG1fc2l6ZSgwKQogICAgICwgbV93aWR0aFZhcmlhbnQoUmVndWxhcldpZHRoKQogI2lmIFBMQVRG
T1JNKFdJTikKQEAgLTYwLDYgKzYzLDkgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YSgpCiAgICAgOiBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCiAgICAgLCBtX3N5bnRoZXRpY09i
bGlxdWUoZmFsc2UpCiAgICAgLCBtX29yaWVudGF0aW9uKEhvcml6b250YWwpCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgICwgbV9pc0Vtb2ppKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX3NpemUoMCkK
ICAgICAsIG1fd2lkdGhWYXJpYW50KFJlZ3VsYXJXaWR0aCkKICNpZiBPUyhEQVJXSU4pCkBAIC04
NSw2ICs5MSw5IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpCiAgICAgOiBtX3N5bnRoZXRpY0Jv
bGQoc3ludGhldGljQm9sZCkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShzeW50aGV0aWNPYmxp
cXVlKQogICAgICwgbV9vcmllbnRhdGlvbihvcmllbnRhdGlvbikKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgLCBtX2lzRW1vamkoZmFsc2UpCisjZW5kaWYKICAgICAsIG1fc2l6ZShzaXplKQogICAg
ICwgbV93aWR0aFZhcmlhbnQod2lkdGhWYXJpYW50KQogI2lmIE9TKERBUldJTikKQEAgLTExMSw2
ICsxMjAsOSBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiBj
Z0ZvbnQsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQgogICAgIDogbV9zeW50aGV0aWNCb2xk
KHN5bnRoZXRpY0JvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoc3ludGhldGljT2JsaXF1
ZSkKICAgICAsIG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24pCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICwgbV9pc0Vtb2ppKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAs
IG1fd2lkdGhWYXJpYW50KHdpZHRoVmFyaWFudCkKICAgICAsIG1fZm9udCgwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4
IDcwMGRiOTVkMDNlOWZlMzFjM2YxNjRhNDhiMDE5NTMxZjNjNWI5NTIuLjA1ZGZjYzMzYzgxODM1
NDY2OTVhNGY3NWE1NTdmNDYwNTA1MjQ2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTQ5LDYgKzQ5LDEwIEBACiAj
aWYgT1MoREFSV0lOKQogT0JKQ19DTEFTUyBOU0ZvbnQ7CiAKKyNpZiBQTEFURk9STShJT1MpCisj
aW1wb3J0IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKKwogdHlwZWRlZiBz
dHJ1Y3QgQ0dGb250KiBDR0ZvbnRSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NURm9udCog
Q1RGb250UmVmOwogI2VuZGlmCkBAIC03OSw3ICs4Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotI2lmIE9TKERB
UldJTikKKyNpZiBPUyhEQVJXSU4pICYmIFVTRShBUFBLSVQpCiBpbmxpbmUgQ1RGb250UmVmIHRv
Q1RGb250UmVmKE5TRm9udCAqbnNGb250KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PENURm9u
dFJlZj4obnNGb250KTsgfQogI2VuZGlmCiAKQEAgLTkyLDggKzk2LDE0IEBAIHB1YmxpYzoKICAg
ICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBz
eW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBGb250V2lkdGhW
YXJpYW50ID0gUmVndWxhcldpZHRoKTsKIAogI2lmIE9TKERBUldJTikKKyNpZiBVU0UoQVBQS0lU
KQogICAgIEZvbnRQbGF0Zm9ybURhdGEoTlNGb250KiwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50
ZXJGb250ID0gZmFsc2UsIGJvb2wgc3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRp
Y09ibGlxdWUgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgIEZvbnRPcmllbnRhdGlvbiA9
IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgpOworI2Vsc2UKKyAg
ICBGb250UGxhdGZvcm1EYXRhKENURm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJG
b250ID0gZmFsc2UsIGJvb2wgc3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY09i
bGlxdWUgPSBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgIEZvbnRPcmllbnRhdGlvbiA9IEhv
cml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgpOworI2VuZGlmCisKICNp
ZiBVU0UoQ0cpCiAgICAgRm9udFBsYXRmb3JtRGF0YShDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRpb24s
IEZvbnRXaWR0aFZhcmlhbnQpOwogI2VuZGlmCkBAIC0xMDcsMTEgKzExNywxOCBAQCBwdWJsaWM6
CiAjZW5kaWYKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEZvbnRQbGF0Zm9ybURh
dGEoQ1RGb250UmVmLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQgPSBmYWxzZSwgYm9v
bCBzeW50aGV0aWNPYmxpcXVlID0gZmFsc2UsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWws
IEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgpOworI2VuZGlmCisKICAgICB+Rm9udFBs
YXRmb3JtRGF0YSgpOwogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEhGT05UIGhmb250KCkgY29u
c3QgeyByZXR1cm4gbV9mb250ID8gbV9mb250LT5nZXQoKSA6IDA7IH0KICAgICBib29sIHVzZUdE
SSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlR0RJOyB9CisjZWxpZiBQTEFURk9STShJT1MpCisgICAg
Q1RGb250UmVmIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKyAgICB2b2lkIHNldEZv
bnQoQ1RGb250UmVmKTsKICNlbGlmIE9TKERBUldJTikKICAgICBOU0ZvbnQqIGZvbnQoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnQ7IH0KICAgICB2b2lkIHNldEZvbnQoTlNGb250Kik7CkBAIC0xMjIs
NyArMTM5LDEyIEBAIHB1YmxpYzoKICAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1
cm4gbV9jZ0ZvbnQuZ2V0KCk7IH0KICAgICBDVEZvbnRSZWYgY3RGb250KCkgY29uc3Q7CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIGJvb2wgcm91bmRzR2x5cGhBZHZhbmNlcygpIGNvbnN0Owor
I2Vsc2UKKyAgICBib29sIHJvdW5kc0dseXBoQWR2YW5jZXMoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKICAgICBib29sIGFsbG93c0xpZ2F0dXJl
cygpIGNvbnN0OwogI2Vsc2UKICAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1cm4g
bV9jZ0ZvbnQuZ2V0KCk7IH0KQEAgLTE1MywxMCArMTc1LDE1IEBAIHB1YmxpYzoKICNpZiBQTEFU
Rk9STShXSU4pICYmICFVU0UoQ0FJUk8pCiAgICAgICAgIHJldHVybiBtX2ZvbnQgPyBtX2ZvbnQt
Pmhhc2goKSA6IDA7CiAjZWxpZiBPUyhEQVJXSU4pCisjaWYgIVBMQVRGT1JNKElPUykKICNpZiBV
U0UoQ0cpCiAgICAgICAgIEFTU0VSVChtX2ZvbnQgfHwgIW1fY2dGb250KTsKICNlbmRpZgogICAg
ICAgICB1aW50cHRyX3QgaGFzaENvZGVzWzNdID0geyAodWludHB0cl90KW1fZm9udCwgbV93aWR0
aFZhcmlhbnQsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obV9pc1ByaW50ZXJGb250IDw8IDMgfCBt
X29yaWVudGF0aW9uIDw8IDIgfCBtX3N5bnRoZXRpY0JvbGQgPDwgMSB8IG1fc3ludGhldGljT2Js
aXF1ZSkgfTsKKyNlbHNlCisgICAgICAgIEFTU0VSVChtX2ZvbnQgfHwgIW1fY2dGb250IHx8IG1f
aXNFbW9qaSk7CisgICAgICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbM10gPSB7IHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oQ0ZIYXNoKG1fZm9udCkpLCBtX3dpZHRoVmFyaWFudCwgc3RhdGljX2Nhc3Q8
dWludHB0cl90PihtX2lzRW1vamkgPDwgNCB8IG1faXNQcmludGVyRm9udCA8PCAzIHwgbV9vcmll
bnRhdGlvbiA8PCAyIHwgbV9zeW50aGV0aWNCb2xkIDw8IDEgfCBtX3N5bnRoZXRpY09ibGlxdWUp
IH07CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKICAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hl
cjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKICNlbGlmIFVTRShD
QUlSTykKICAgICAgICAgcmV0dXJuIFB0ckhhc2g8Y2Fpcm9fc2NhbGVkX2ZvbnRfdCo+OjpoYXNo
KG1fc2NhbGVkRm9udCk7CkBAIC0yMDMsNyArMjMwLDkgQEAgcHJpdmF0ZToKICAgICBib29sIHBs
YXRmb3JtSXNFcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJikgY29uc3Q7CiAgICAgdm9pZCBw
bGF0Zm9ybURhdGFJbml0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKICAgICBjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGFBc3NpZ24oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYp
OwotI2lmIE9TKERBUldJTikKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhdGljIENURm9udFJl
ZiBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxD
VEZvbnRSZWY+KC0xKTsgfQorI2VsaWYgT1MoREFSV0lOKQogICAgIC8vIExvYWQgdmFyaW91cyBk
YXRhIGFib3V0IHRoZSBmb250IHNwZWNpZmllZCBieSB8bnNGb250fCB3aXRoIHRoZSBzaXplIGZv
bnRTaXplIGludG8gdGhlIGZvbGxvd2luZyBvdXRwdXQgcGFyYW10ZXJzOgogICAgIHZvaWQgbG9h
ZEZvbnQoTlNGb250KiwgZmxvYXQgZm9udFNpemUsIE5TRm9udComIG91dE5TRm9udCwgQ0dGb250
UmVmJik7CiAgICAgc3RhdGljIE5TRm9udCogaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKTsgfQpAQCAtMjE5LDExICsyNDgs
MTYgQEAgcHVibGljOgogICAgIGJvb2wgbV9zeW50aGV0aWNCb2xkOwogICAgIGJvb2wgbV9zeW50
aGV0aWNPYmxpcXVlOwogICAgIEZvbnRPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICBib29sIG1faXNFbW9qaTsKKyNlbmRpZgogICAgIGZsb2F0IG1fc2l6
ZTsKICAgICBGb250V2lkdGhWYXJpYW50IG1fd2lkdGhWYXJpYW50OwogCiBwcml2YXRlOgotI2lm
IE9TKERBUldJTikKKyNpZiBQTEFURk9STShJT1MpCisgICAgQ1RGb250UmVmIG1fZm9udDsKKyNl
bGlmIE9TKERBUldJTikKICAgICBOU0ZvbnQqIG1fZm9udDsKICNlbGlmIFBMQVRGT1JNKFdJTikK
ICAgICBSZWZQdHI8U2hhcmVkR0RJT2JqZWN0PEhGT05UPj4gbV9mb250OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCmlu
ZGV4IDY0NTRlNzNlNzZlOWRiOGYzYmVhM2E0YWYyM2M0N2U3OTNjZGNiMGEuLmNhZWY1ZTlkNjlk
YTJkZTRlMTQ2OTQ2MDY5NzYwZjhlZjVkYjg1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKQEAgLTIxMiw2ICsy
MTIsMTQgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6aW5pdGlhbGl6ZVBhZ2UoY29uc3QgRm9u
dERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBwYWdlTnUKICAgICAgICAgICAgICAgICAgICAgbV9w
YWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnREYXRhKHRoaXMpOwogICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgbV9wYWdlID0gR2x5cGhQYWdlOjpjcmVh
dGVGb3JTaW5nbGVGb250RGF0YSh0aGlzLCBzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KGZvbnREYXRhKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaW1lcyBOZXcgUm9tYW4gY29udGFpbnMgQXJhYmljIGdseXBocywgYnV0IENvcmUgVGV4
dCBkb2Vzbid0IGtub3cgaG93IHRvIHNoYXBlIHRoZW0uIFNlZSA8cmRhcjovL3Byb2JsZW0vOTgy
Mzk3NT4uCisgICAgICAgICAgICAgICAgLy8gT25jZSB3ZSBoYXZlIHRoZSBmaXggZm9yIDxyZGFy
Oi8vcHJvYmxlbS85ODIzOTc1PiB0aGVuIHJlbW92ZSB0aGlzIGNvZGUgdG9nZXRoZXIgd2l0aCBT
aW1wbGVGb250RGF0YTo6c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkKKyAgICAgICAgICAgICAg
ICAvLyBpbiA8cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+LgorICAgICAgICAgICAgICAgIGlmIChw
YWdlTnVtYmVyID09IDYgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihmb250
RGF0YSktPnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQorICAgICAgICAgICAgICAgICAgICBo
YXZlR2x5cGhzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmCiAgICAgICAg
ICAgICAgICAgaGF2ZUdseXBocyA9IGZpbGwobV9wYWdlLmdldCgpLCAwLCBHbHlwaFBhZ2U6OnNp
emUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KGZvbnREYXRhKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1f
cGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSh0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmlu
ZGV4IDBjNDVlYmUwNzcyMjgwN2MyNzM1MjBkODE4ZTU2YTRhOGJkYTExZTguLmYxMmYwMmE2ZjZm
ODU2NjlmZTJkN2IyYzAzOTA3YTVjMDNlMzg3OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNzYsMTIgKzc2LDIx
IEBAIHByaXZhdGU6CiAgICAgaW50IG1fb2Zmc2V0OwogfTsKIAorI2lmICFQTEFURk9STShJT1Mp
CiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQpCiAgICAgOiBtX3VwZGF0aW5nQ29udHJvbFRpbnRz
KGZhbHNlKQogICAgICwgbV90cmFuc3BhcmVuY3lDb3VudCgwKQogewogICAgIHBsYXRmb3JtSW5p
dChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7CiB9CisjZWxzZQorR3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0LCBib29sIHNob3VsZFVzZUNvbnRleHRDb2xvcnMpCisgICAgOiBtX3VwZGF0aW5nQ29u
dHJvbFRpbnRzKGZhbHNlKQorICAgICwgbV90cmFuc3BhcmVuY3lDb3VudCgwKQoreworICAgIHBs
YXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgc2hvdWxkVXNlQ29udGV4dENvbG9y
cyk7Cit9CisjZW5kaWYKIAogR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKIHsK
QEAgLTExNSw2ICsxMjQsMjggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQogICAg
IHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBDb2xvclNwYWNlIGVsbGlwc2VDb2xvclNwYWNlLCBj
b25zdCBDb2xvciYgc2hhZG93Q29sb3IsIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZSkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzYXZl
KCk7CisKKyAgICBzZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvciwgc2hhZG93Q29sb3JTcGFjZSk7
CisgICAgc2V0RmlsbENvbG9yKHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKKworICAg
IGRyYXdFbGxpcHNlKEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpKTsKKworICAgIHNldFN0cm9rZUNvbG9yKGVsbGlwc2VDb2xvciwg
ZWxsaXBzZUNvbG9yU3BhY2UpOworICAgIHNldEZpbGxDb2xvcihlbGxpcHNlQ29sb3IsIGVsbGlw
c2VDb2xvclNwYWNlKTsKKworICAgIGRyYXdFbGxpcHNlKHJlY3QpOyAgCisKKyAgICByZXN0b3Jl
KCk7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVRoaWNrbmVz
cyhmbG9hdCB0aGlja25lc3MpCiB7CiAgICAgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0aGlj
a25lc3M7CkBAIC00MDQsNiArNDM1LDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6OnBhaW50aW5n
RGlzYWJsZWQoKSBjb25zdAogICAgIHJldHVybiBtX3N0YXRlLnBhaW50aW5nRGlzYWJsZWQ7CiB9
CiAKKy8vIEZJWE1FOiBSZXBsYWNlIHRoZSBub24taU9TIGltcGxlbWVudGF0aW9uIHdpdGggdGhl
IGlPUyBpbXBsZW1lbnRhdGlvbiBzaW5jZSB0aGUgbGF0dGVyIGNvbXB1dGVzIHJldHVybnMKKy8v
IHRoZSB3aWR0aCBvZiB0aGUgZHJhd24gdGV4dC4gRW5zdXJlIHRoYXQgdGhlcmUgYXJlbid0IG5v
dGljZWFibGUgZGlmZmVyZW5jZXMgaW4gbGF5b3V0LgorI2lmICFQTEFURk9STShJT1MpCiAjaWYg
IVVTRShXSU5HREkpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZy
b20sIGludCB0bykKIHsKQEAgLTQxMyw2ICs0NDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXQKICAgICBmb250LmRyYXdUZXh0KHRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KICNl
bmRpZgorI2Vsc2UKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZy
b20sIGludCB0bykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBmb250LmRyYXdUZXh0KHRoaXMsIHJ1biwgcG9pbnQsIGZyb20s
IHRvKTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKQogewpAQCAtNDIyLDIxICs0NjUsNDQgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY28KICAgICBmb250LmRyYXdFbXBoYXNpc01hcmtzKHRoaXMsIHJ1biwgbWFyaywgcG9pbnQs
IGZyb20sIHRvKTsKIH0KIAorLy8gRklYTUU6IEJldHRlciBtZXJnZSB0aGUgaU9TIGFuZCBub24t
aU9TIGRpZmZlcmVuY2VzLiBJbiBwYXJ0aWN1bGFyLCBtYWtlIHRoaXMgbWV0aG9kIHVzZSB0aGUK
Ky8vIHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LCBGb250OjpkcmF3VGV4dCgpLCBp
bnN0ZWFkIG9mIGNvbXB1dGluZyBpdC4gRW5zdXJlIHRoYXQgdGhlcmUKKy8vIGFyZW4ndCBub3Rp
Y2VhYmxlIGRpZmZlcmVuY2VzIGluIGxheW91dCB3aXRoIHN1Y2ggYSBjaGFuZ2UuCisjaWYgIVBM
QVRGT1JNKElPUykKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9u
dDo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKKyNl
bHNlCitmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBmb250
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250OjpDdXN0
b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uLCBCaWRpU3RhdHVz
KiBzdGF0dXMsIGludCBsZW5ndGgpCisjZW5kaWYKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgICAg
IHJldHVybiAwOworI2VuZGlmCiAKICAgICBCaWRpUmVzb2x2ZXI8VGV4dFJ1bkl0ZXJhdG9yLCBC
aWRpQ2hhcmFjdGVyUnVuPiBiaWRpUmVzb2x2ZXI7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBi
aWRpUmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGly
ZWN0aW9uYWxPdmVycmlkZSgpKSk7CisjZWxzZQorICAgIGJpZGlSZXNvbHZlci5zZXRTdGF0dXMo
c3RhdHVzID8gKnN0YXR1cyA6IEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0
aW9uYWxPdmVycmlkZSgpKSk7CisjZW5kaWYKICAgICBiaWRpUmVzb2x2ZXIuc2V0UG9zaXRpb25J
Z25vcmluZ05lc3RlZElzb2xhdGVzKFRleHRSdW5JdGVyYXRvcigmcnVuLCAwKSk7CiAKICAgICAv
LyBGSVhNRTogVGhpcyBvd25lcnNoaXAgc2hvdWxkIGJlIHJldmVyc2VkLiBXZSBzaG91bGQgcGFz
cyBCaWRpUnVuTGlzdAogICAgIC8vIHRvIEJpZGlSZXNvbHZlciBpbiBjcmVhdGVCaWRpUnVuc0Zv
ckxpbmUuCiAgICAgQmlkaVJ1bkxpc3Q8QmlkaUNoYXJhY3RlclJ1bj4mIGJpZGlSdW5zID0gYmlk
aVJlc29sdmVyLnJ1bnMoKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGJpZGlSZXNvbHZlci5j
cmVhdGVCaWRpUnVuc0ZvckxpbmUoVGV4dFJ1bkl0ZXJhdG9yKCZydW4sIHJ1bi5sZW5ndGgoKSkp
OworI2Vsc2UKKyAgICBiaWRpUmVzb2x2ZXIuY3JlYXRlQmlkaVJ1bnNGb3JMaW5lKFRleHRSdW5J
dGVyYXRvcigmcnVuLCBsZW5ndGggPCAwID8gcnVuLmxlbmd0aCgpIDogbGVuZ3RoKSk7CisjZW5k
aWYgICAgCiAgICAgaWYgKCFiaWRpUnVucy5ydW5Db3VudCgpKQorI2lmICFQTEFURk9STShJT1Mp
CiAgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgICAgIHJldHVybiAwOworI2VuZGlmCiAKICAg
ICBGbG9hdFBvaW50IGN1cnJQb2ludCA9IHBvaW50OwogICAgIEJpZGlDaGFyYWN0ZXJSdW4qIGJp
ZGlSdW4gPSBiaWRpUnVucy5maXJzdFJ1bigpOwpAQCAtNDQ2LDE1ICs1MTIsMzAgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEYKICAgICAgICAgc3VicnVuLnNldERpcmVjdGlvbihpc1JUTCA/IFJU
TCA6IExUUik7CiAgICAgICAgIHN1YnJ1bi5zZXREaXJlY3Rpb25hbE92ZXJyaWRlKGJpZGlSdW4t
PmRpck92ZXJyaWRlKGZhbHNlKSk7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBmb250
LmRyYXdUZXh0KHRoaXMsIHN1YnJ1biwgY3VyclBvaW50LCAwLCAtMSwgY3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uKTsKIAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgpOwogICAgICAg
ICAvLyBGSVhNRTogSGF2ZSBGb250OjpkcmF3VGV4dCByZXR1cm4gdGhlIHdpZHRoIG9mIHdoYXQg
aXQgZHJldyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtbWVhc3VyZSBoZXJlLgogICAgICAg
ICBpZiAoYmlkaVJ1bikKICAgICAgICAgICAgIGN1cnJQb2ludC5tb3ZlKGZvbnQud2lkdGgoc3Vi
cnVuKSwgMCk7CisjZWxzZQorICAgICAgICBmbG9hdCB3aWR0aCA9IGZvbnQuZHJhd1RleHQodGhp
cywgc3VicnVuLCBjdXJyUG9pbnQsIDAsIC0xLCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwor
ICAgICAgICBjdXJyUG9pbnQubW92ZSh3aWR0aCwgMCk7CisKKyAgICAgICAgYmlkaVJ1biA9IGJp
ZGlSdW4tPm5leHQoKTsKKyNlbmRpZgogICAgIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBp
ZiAoc3RhdHVzKQorICAgICAgICAqc3RhdHVzID0gYmlkaVJlc29sdmVyLnN0YXR1cygpOworI2Vu
ZGlmCiAgICAgYmlkaVJ1bnMuZGVsZXRlUnVucygpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IHJldHVybiBjdXJyUG9pbnQueCgpIC0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBvaW50LngoKSk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdIaWdobGlnaHRGb3JUZXh0KGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGludCBoLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGludCBmcm9tLCBpbnQgdG8pCkBAIC02MTUsNiArNjk2LDE4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgUm91bmRlZFJlY3QmIHJlY3QpCiAgICAg
Y2xpcChwYXRoKTsKIH0KIAorLy8gRklYTUU6IENvbnNpZGVyIHdyaXRpbmcgdGhpcyBpbiB0ZXJt
cyBvZiBhIHNwZWNpYWxpemVkIFJvdW5kZWRSZWN0IHRoYXQgdXNlcyBGbG9hdFJlY3QgYW5kIEZs
b2F0U2l6ZSByYWRpaS4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnQsIGNvbnN0IEZsb2F0
U2l6ZSYgdG9wUmlnaHQsCisgICAgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBG
bG9hdFNpemUmIGJvdHRvbVJpZ2h0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0
KHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7CisgICAg
Y2xpcChwYXRoKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVj
dChjb25zdCBSb3VuZGVkUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQpAQCAtNzMyLDYgKzgyNSwxOCBAQCBCbGVuZE1vZGUgR3JhcGhpY3NDb250ZXh0OjpibGVuZE1v
ZGVPcGVyYXRpb24oKSBjb25zdAogICAgIHJldHVybiBtX3N0YXRlLmJsZW5kTW9kZTsKIH0KIAor
I2lmIFBMQVRGT1JNKElPUykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0OjplbW9qaURyYXdpbmdFbmFi
bGVkKCkKK3sKKyAgICByZXR1cm4gbV9zdGF0ZS5lbW9qaURyYXdpbmdFbmFibGVkOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RW1vamlEcmF3aW5nRW5hYmxlZChib29sIGVtb2ppRHJh
d2luZ0VuYWJsZWQpCit7CisgICAgbV9zdGF0ZS5lbW9qaURyYXdpbmdFbmFibGVkID0gZW1vamlE
cmF3aW5nRW5hYmxlZDsKK30KKyNlbmRpZgorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RHJh
d0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykKIHsKICAgICBtX3N0YXRlLmRy
YXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDE3YzRjZTRkZDcz
MWUzMzQzODNmY2YxNGQ2N2I1NTNlZjMzZTJkM2MuLjRjYThlOTMwZGRmMTg0OWI3ZTU4ODQwMDQw
ZDUzZGY0OWVkMmRhMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC05Myw2ICs5Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKICAgICBjbGFzcyBUZXh0UnVuOwogICAg
IGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdHJ1
Y3QgQmlkaVN0YXR1czsKKyNlbmRpZgogCiAgICAgZW51bSBUZXh0RHJhd2luZ01vZGUgewogICAg
ICAgICBUZXh0TW9kZUZpbGwgPSAxIDw8IDAsCkBAIC0xMzYsNiArMTM5LDEwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgc2hhZG93Q29sb3JTcGFjZShDb2xvclNwYWNlRGV2
aWNlUkdCKQogICAgICAgICAgICAgLCBjb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVTb3VyY2VP
dmVyKQogICAgICAgICAgICAgLCBibGVuZE1vZGUoQmxlbmRNb2RlTm9ybWFsKQorI2lmIFBMQVRG
T1JNKElPUykKKyAgICAgICAgICAgICwgZW1vamlEcmF3aW5nRW5hYmxlZCh0cnVlKQorICAgICAg
ICAgICAgLCBzaG91bGRVc2VDb250ZXh0Q29sb3JzKHRydWUpCisjZW5kaWYKICAgICAgICAgICAg
ICwgc2hvdWxkQW50aWFsaWFzKHRydWUpCiAgICAgICAgICAgICAsIHNob3VsZFNtb290aEZvbnRz
KHRydWUpCiAgICAgICAgICAgICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyh0cnVlKQpA
QCAtMTc3LDYgKzE4NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yOwogICAgICAgICBCbGVuZE1vZGUgYmxlbmRNb2Rl
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBib29sIGVtb2ppRHJhd2luZ0VuYWJsZWQg
OiAxOworICAgICAgICBib29sIHNob3VsZFVzZUNvbnRleHRDb2xvcnMgOiAxOworI2VuZGlmCiAg
ICAgICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzIDogMTsKICAgICAgICAgYm9vbCBzaG91bGRTbW9v
dGhGb250cyA6IDE7CiAgICAgICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDog
MTsKQEAgLTE4OCwxMCArMTk5LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9v
bCBkcmF3THVtaW5hbmNlTWFzayA6IDE7CiAgICAgfTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICB2b2lkIHNldFN0cm9rZUFuZEZpbGxDb2xvcihQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCosIENH
Q29sb3JSZWYpOworI2VuZGlmCisKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQgewogICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKICAgICBwdWJsaWM6CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CisjZWxzZQorICAgICAgICBHcmFw
aGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqLCBib29sIHNob3VsZFVzZUNvbnRl
eHRDb2xvcnMgPSB0cnVlKTsKKyNlbmRpZgogICAgICAgICB+R3JhcGhpY3NDb250ZXh0KCk7CiAK
ICAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
OwpAQCAtMjQzLDcgKzI2MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
YXBwbHlGaWxsUGF0dGVybigpOwogICAgICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsK
IAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoUGFzc05h
dGl2ZUltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBmbG9hdCBzY2FsZSwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VP
dmVyLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb24gPSBEZWZh
dWx0SW1hZ2VPcmllbnRhdGlvbik7CisjZWxzZQogICAgICAgICB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShQYXNzTmF0aXZlSW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlciwg
QmxlbmRNb2RlID0gQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uID0gRGVmYXVsdElt
YWdlT3JpZW50YXRpb24pOworI2VuZGlmCiAKICAgICAgICAgLy8gQWxsb3cgZm9udCBzbW9vdGhp
bmcgKExDRCBhbnRpYWxpYXNpbmcpLiBOb3QgcGFydCBvZiB0aGUgZ3JhcGhpY3Mgc3RhdGUuCiAg
ICAgICAgIHZvaWQgc2V0QWxsb3dzRm9udFNtb290aGluZyhib29sKTsKQEAgLTI2NCw3ICsyODcs
MTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBzdHJva2UgY29sb3IpLgogICAg
ICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50Jik7CisKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgIHZvaWQgZHJhd0pvaW5lZExpbmVzKENHUG9pbnQgcG9pbnRzW10sIHVuc2lnbmVk
IGNvdW50LCBib29sIGFudGlhbGlhcywgQ0dMaW5lQ2FwID0ga0NHTGluZUNhcEJ1dHQpOworI2Vu
ZGlmCisKICAgICAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0Jik7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgICAgICB2b2lkIGRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJiBlbGxpcHNlQ29sb3IsIENvbG9yU3BhY2UgZWxsaXBzZUNvbG9yU3BhY2UsIGNvbnN0IENv
bG9yJiBzaGFkb3dDb2xvciwgQ29sb3JTcGFjZSBzaGFkb3dDb2xvclNwYWNlKTsKKyNlbmRpZgog
ICAgICAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZs
b2F0UG9pbnQqLCBib29sIHNob3VsZEFudGlhbGlhcyA9IGZhbHNlKTsKIAogICAgICAgICB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKQEAgLTMxMSw2ICszNDMsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIGNsaXAoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lk
IGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgICAgIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNv
bnN0IFJvdW5kZWRSZWN0Jik7CisKKyAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHdyaXRpbmcg
dGhpcyBpbiB0ZXJtcyBvZiBhIHNwZWNpYWxpemVkIFJvdW5kZWRSZWN0IHRoYXQgdXNlcyBGbG9h
dFJlY3QgYW5kIEZsb2F0U2l6ZSByYWRpaS4KKyAgICAgICAgdm9pZCBjbGlwUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0LCBjb25zdCBGbG9hdFNp
emUmIHRvcFJpZ2h0LCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEZsb2F0U2l6
ZSYgYm90dG9tUmlnaHQpOworCiAgICAgICAgIHZvaWQgY2xpcE91dChjb25zdCBJbnRSZWN0Jik7
CiAgICAgICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IFJvdW5kZWRSZWN0Jik7CiAg
ICAgICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKTsKQEAgLTMyMiw5ICsz
NTgsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBUZXh0RHJhd2luZ01vZGVGbGFn
cyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01v
ZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBi
b29sIGVtb2ppRHJhd2luZ0VuYWJsZWQoKTsKKyAgICAgICAgdm9pZCBzZXRFbW9qaURyYXdpbmdF
bmFibGVkKGJvb2wpOworI2VuZGlmCisgICAgICAgIAorI2lmICFQTEFURk9STShJT1MpCiAgICAg
ICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9h
dFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisjZWxzZQorICAgICAgICBmbG9h
dCBkcmF3VGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGRyYXdF
bXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiAsIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEp
OworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZv
bnQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnQ6OkN1c3RvbUZvbnRO
b3RSZWFkeUFjdGlvbiA9IEZvbnQ6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CisjZWxzZQor
ICAgICAgICBmbG9hdCBkcmF3QmlkaVRleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBGbG9hdFBvaW50JiwgRm9udDo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udDo6
RG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBCaWRpU3RhdHVzKiA9IDAsIGludCBsZW5ndGggPSAt
MSk7CisjZW5kaWYKICAgICAgICAgdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yVGV4dChjb25zdCBGb250
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaCwgY29uc3QgQ29sb3Im
IGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZSwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7
CiAKICAgICAgICAgZW51bSBSb3VuZGluZ01vZGUgewpAQCAtMzM2LDYgKzM4NSw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgRmxvYXRSZWN0IGNvbXB1dGVMaW5lQm91bmRzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpOwogICAgICAg
ICB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpOwogICAgICAgICBlbnVtIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VX
aXRoQWx0ZXJuYXRpdmVzTGluZVN0eWxlLAorI2VuZGlmCiAgICAgICAgICAgICBEb2N1bWVudE1h
cmtlclNwZWxsaW5nTGluZVN0eWxlLAogICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXJHcmFtbWFy
TGluZVN0eWxlLAogICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXJBdXRvY29ycmVjdGlvblJlcGxh
Y2VtZW50TGluZVN0eWxlLApAQCAtNDk2LDcgKzU0OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBv
aW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSk7
CiAKICAgICBwcml2YXRlOgorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIHZvaWQgcGxhdGZv
cm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CisjZWxzZQorICAgICAgICB2b2lkIHBs
YXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCosIGJvb2wgc2hvdWxkVXNlQ29udGV4
dENvbG9ycyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIAogI2lm
IFBMQVRGT1JNKFdJTikgJiYgIVVTRShXSU5HREkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCA5ZTI0NDkwNDI2ODcx
YzRhNGNlZWNlYjY5N2QzOWE4NTdhODQzYzVkLi44MTU4OGZmNTFiMjgyYjcwZTgxYWRiMTU2MmU0
MDVlMDE4MzUyODdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTU0LDYgKzU0LDEyIEBACiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8T3BlbkdMRVMvRVMy
L2dsLmg+CisjaWZkZWYgX19PQkpDX18KKyNpbXBvcnQgPE9wZW5HTEVTL0VBR0wuaD4KKyNlbmRp
ZiAvLyBfX09CSkNfXworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiBPQkpDX0NMQVNTIENBTGF5ZXI7CiBPQkpDX0NMQVNTIFdlYkdMTGF5ZXI7CkBA
IC02MSw3ICs2NywxMyBAQCBPQkpDX0NMQVNTIFdlYkdMTGF5ZXI7CiB0eXBlZGVmIHVuc2lnbmVk
IGludCBHTHVpbnQ7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJ
T1MpCisjaWZkZWYgX19PQkpDX18KK3R5cGVkZWYgRUFHTENvbnRleHQqIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0Q7CisjZWxzZQordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEOworI2VuZGlmIC8vIF9fT0JKQ19fCisjZWxpZiBQTEFURk9STShNQUMpCiB0eXBlZGVmIHN0
cnVjdCBfQ0dMQ29udGV4dE9iamVjdCAqQ0dMQ29udGV4dE9iajsKIAogdHlwZWRlZiBDR0xDb250
ZXh0T2JqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7CkBAIC03OTEsNiArODAzLDEwIEBAIHB1
YmxpYzoKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9J
bWFnZURhdGEoRHJhd2luZ0J1ZmZlciopOwogICAgIGJvb2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvQ2FudmFzKEltYWdlQnVmZmVyKik7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBl
bmRQYWludCgpOworI2VuZGlmCisKICNpZiBQTEFURk9STShCTEFDS0JFUlJZKQogICAgIGJvb2wg
cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogI2VuZGlmCkBAIC05MzMsNiArOTQ5LDEw
IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNz
YXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBw
aXhlbHMpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgYm9vbCBzZXRSZW5kZXJi
dWZmZXJTdG9yYWdlRnJvbURyYXdhYmxlKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCk7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgdm9pZCBsb2dGcmFt
ZUJ1ZmZlclN0YXR1cyhpbnQgbGluZSk7CiAgICAgdm9pZCByZWFkUGl4ZWxzSU1HKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSk7CkBAIC05NDcsNyArOTY3LDEwIEBA
IHByaXZhdGU6CiAgICAgaW50IG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQ7CiAgICAg
Ym9vbCBpc1Jlc291cmNlU2FmZSgpOwogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JN
KElPUykKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIG1fY29udGV4dE9iajsKKyAgICBS
ZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV93ZWJHTExheWVyOworI2VsaWYgUExBVEZPUk0oTUFD
KQogICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAgIFJldGFpblB0cjxXZWJHTExh
eWVyPiBtX3dlYkdMTGF5ZXI7CiAjZWxpZiBQTEFURk9STShXSU4pICYmIFVTRShDQSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5k
ZXggMmY3ZGU1ZWFjY2ExNDgzMGI3N2U5ZjkwZWFmNzA4MWM4Y2Y5OGQxMy4uNzE5ODM4MzkzYjQ1
MjU3Mjg1OTlhZmQ0OWU3ZDBiOGVkOTFmZjkxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKQEAgLTExNyw3ICsxMTcsNiBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCiAgICAgaWYgKG1fY2xpZW50KQog
ICAgICAgICBtX2NsaWVudC0+dmVyaWZ5Tm90UGFpbnRpbmcoKTsKICNlbmRpZgotCiAgICAgaWYg
KG1fcmVwbGljYUxheWVyKQogICAgICAgICBtX3JlcGxpY2FMYXllci0+c2V0UmVwbGljYXRlZExh
eWVyKDApOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyLmgKaW5kZXggNTFmZDc2MDEyNzI5ZGNhNzY4ZDIxMmViN2QzNmM4NGYxNjk0ZGI1Yi4u
Y2U2MDQxMDhmZTVlZTNlODg4MzBiM2M3NzJmYjdiY2YxZjlmZTExNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaApAQCAtMzg3LDYgKzM4
Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdl
KikgeyB9CiAgICAgdmlydHVhbCBib29sIHNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UoSW1h
Z2UqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
VG9NZWRpYShQbGF0Zm9ybUxheWVyKikgeyB9IC8vIHZpZGVvIG9yIHBsdWctaW4KKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyRm9yTWVk
aWEoKSBjb25zdCB7IHJldHVybiAwOyB9CisjZW5kaWYKICAgICAvLyBQYXNzIGFuIGludmFsaWQg
Y29sb3IgdG8gcmVtb3ZlIHRoZSBjb250ZW50cyBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3QgQ29sb3ImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKikgeyB9CkBAIC00MzcsNiArNDQwLDEw
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRNYWludGFpbnNQaXhlbEFsaWdubWVu
dChib29sIG1haW50YWluc0FsaWdubWVudCkgeyBtX21haW50YWluc1BpeGVsQWxpZ25tZW50ID0g
bWFpbnRhaW5zQWxpZ25tZW50OyB9CiAgICAgdmlydHVhbCBib29sIG1haW50YWluc1BpeGVsQWxp
Z25tZW50KCkgY29uc3QgeyByZXR1cm4gbV9tYWludGFpbnNQaXhlbEFsaWdubWVudDsgfQorI2lm
IFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBwaXhlbEFsaWdubWVudE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0U2l6ZSgpOyB9CisgICAgYm9vbCBoYXNGbGF0dGVuZWRQ
ZXJzcGVjdGl2ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuICFwcmVzZXJ2ZXMzRCgpICYmIG1f
Y2hpbGRyZW5UcmFuc2Zvcm0uaGFzUGVyc3BlY3RpdmUoKTsgfQorI2VuZGlmCiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIHNldEFwcGxpZXNQYWdlU2NhbGUoYm9vbCBhcHBsaWVzU2NhbGUgPSB0cnVl
KSB7IG1fYXBwbGllc1BhZ2VTY2FsZSA9IGFwcGxpZXNTY2FsZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBhcHBsaWVzUGFnZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBsaWVzUGFnZVNjYWxlOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKaW5kZXggMmFiN2NhMGYzYjI4
NjQ0ZWExMmEwYTdhOGJlMmJhYWNiYTVhZDAwZi4uODI3OThjMzA2OTUwODczYWI0ZWRhNzVlNWEw
NzI1MTcyMGZkNzFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSWNvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaApA
QCAtMjYsNyArMjYsMTEgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisjaW5j
bHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBo
aWNzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VsaWYgUExBVEZPUk0oTUFDKQog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIE9CSkNfQ0xBU1MgTlNJbWFnZTsKICNlbGlmIFBM
QVRGT1JNKFdJTikKQEAgLTUyLDggKzU2LDE2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJY29uPiBjcmVhdGUoSElDT04gaEljb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29u
KGhJY29uKSk7IH0KICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBN
YWtlIHRoaXMgd29yayBmb3Igbm9uLWlPUyBwb3J0cyBhbmQgcmVtb3ZlIHRoZSBQTEFURk9STShJ
T1MpLWd1YXJkLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEljb24+IGNyZWF0ZUljb25Gb3JJbWFn
ZShOYXRpdmVJbWFnZVB0cik7CisjZW5kaWYKKwogcHJpdmF0ZToKLSNpZiBQTEFURk9STShNQUMp
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEljb24oQ0dJbWFnZVJlZik7CisgICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IG1fY2dJbWFnZTsKKyNlbGlmIFBMQVRGT1JNKE1BQykKICAgICBJY29uKE5T
SW1hZ2UqKTsKICAgICBSZXRhaW5QdHI8TlNJbWFnZT4gbV9uc0ltYWdlOwogI2VsaWYgUExBVEZP
Uk0oV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCmluZGV4
IGU1MjgzNDI0NDM4MTg2ZTM2ZGY5YzVhMDllMjI2OGJlNTQwYjY4ZDYuLjBlMzY1MWEzY2ExNDFl
NDU2NGI1NjJhMjczYzc0NzZiOTI4NDIxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZS5jcHAKQEAgLTEzMCwxMSArMTMwLDY2IEBAIHZvaWQgSW1hZ2U6OmRyYXdU
aWxlZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAg
Ly8gV2hlbiB1c2luZyBhY2NlbGVyYXRlZCBkcmF3aW5nIG9uIGlPUywgaXQncyBmYXN0ZXIgdG8g
c3RyZXRjaCBhbiBpbWFnZSB0aGFuIHRvIHRpbGUgaXQuCisgICAgaWYgKGN0eHQtPmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpIHsKKyAgICAgICAgaWYgKHNpemUoKS53aWR0aCgpID09IDEgJiYgaW50
ZXJzZWN0aW9uKG9uZVRpbGVSZWN0LCBkZXN0UmVjdCkuaGVpZ2h0KCkgPT0gZGVzdFJlY3QuaGVp
Z2h0KCkpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlU3JjUmVjdDsKKyAgICAgICAg
ICAgIHZpc2libGVTcmNSZWN0LnNldFgoMCk7CisgICAgICAgICAgICB2aXNpYmxlU3JjUmVjdC5z
ZXRZKChkZXN0UmVjdC55KCkgLSBvbmVUaWxlUmVjdC55KCkpIC8gc2NhbGUuaGVpZ2h0KCkpOwor
ICAgICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0V2lkdGgoMSk7CisgICAgICAgICAgICB2aXNp
YmxlU3JjUmVjdC5zZXRIZWlnaHQoZGVzdFJlY3QuaGVpZ2h0KCkgLyBzY2FsZS5oZWlnaHQoKSk7
CisgICAgICAgICAgICBkcmF3KGN0eHQsIGRlc3RSZWN0LCB2aXNpYmxlU3JjUmVjdCwgc3R5bGVD
b2xvclNwYWNlLCBvcCwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRp
b24oKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNpemUo
KS5oZWlnaHQoKSA9PSAxICYmIGludGVyc2VjdGlvbihvbmVUaWxlUmVjdCwgZGVzdFJlY3QpLndp
ZHRoKCkgPT0gZGVzdFJlY3Qud2lkdGgoKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IHZpc2li
bGVTcmNSZWN0OworICAgICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0WCgoZGVzdFJlY3QueCgp
IC0gb25lVGlsZVJlY3QueCgpKSAvIHNjYWxlLndpZHRoKCkpOworICAgICAgICAgICAgdmlzaWJs
ZVNyY1JlY3Quc2V0WSgwKTsKKyAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFdpZHRoKGRl
c3RSZWN0LndpZHRoKCkgLyBzY2FsZS53aWR0aCgpKTsKKyAgICAgICAgICAgIHZpc2libGVTcmNS
ZWN0LnNldEhlaWdodCgxKTsKKyAgICAgICAgICAgIGRyYXcoY3R4dCwgZGVzdFJlY3QsIHZpc2li
bGVTcmNSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIENHUGF0dGVybiB1c2Vz
IGxvdHMgb2YgbWVtb3J5IGdvdCBjYWNoaW5nIHdoZW4gdGhlIHRpbGUgc2l6ZSBpcyBsYXJnZSAo
PHJkYXI6Ly9wcm9ibGVtLzQ2OTE4NTk+LAorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS82MjM5NTA1
PikuIE1lbW9yeSBjb25zdW1wdGlvbiBkZXBlbmRzIG9uIHRoZSB0cmFuc2Zvcm1lZCB0aWxlIHNp
emUgd2hpY2ggY2FuIGdldAorICAgIC8vIGxhcmdlciB0aGFuIHRoZSBvcmlnaW5hbCB0aWxlIGlm
IHVzZXIgem9vbXMgaW4gZW5vdWdoLgorICAgIGNvbnN0IGZsb2F0IG1heFBhdHRlcm5UaWxlUGl4
ZWxzID0gNTEyICogNTEyOworICAgIEZsb2F0UmVjdCB0cmFuc2Zvcm1lZFRpbGVTaXplID0gY3R4
dC0+Z2V0Q1RNKCkubWFwUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzY2FsZWRUaWxlU2l6
ZSkpOworICAgIGZsb2F0IHRyYW5zZm9ybWVkVGlsZVNpemVQaXhlbHMgPSB0cmFuc2Zvcm1lZFRp
bGVTaXplLndpZHRoKCkgKiB0cmFuc2Zvcm1lZFRpbGVTaXplLmhlaWdodCgpOworICAgIGlmICh0
cmFuc2Zvcm1lZFRpbGVTaXplUGl4ZWxzID4gbWF4UGF0dGVyblRpbGVQaXhlbHMpIHsKKyAgICAg
ICAgZmxvYXQgZnJvbVkgPSAoZGVzdFJlY3QueSgpIC0gb25lVGlsZVJlY3QueSgpKSAvIHNjYWxl
LmhlaWdodCgpOworICAgICAgICBmbG9hdCB0b1kgPSBvbmVUaWxlUmVjdC55KCk7CisgICAgICAg
IHdoaWxlICh0b1kgPCBDR1JlY3RHZXRNYXhZKGRlc3RSZWN0KSkgeworICAgICAgICAgICAgZmxv
YXQgZnJvbVggPSAoZGVzdFJlY3QueCgpIC0gb25lVGlsZVJlY3QueCgpKSAvIHNjYWxlLndpZHRo
KCk7CisgICAgICAgICAgICBmbG9hdCB0b1ggPSBvbmVUaWxlUmVjdC54KCk7CisgICAgICAgICAg
ICB3aGlsZSAodG9YIDwgQ0dSZWN0R2V0TWF4WChkZXN0UmVjdCkpIHsKKyAgICAgICAgICAgICAg
ICBDR1JlY3QgdG9SZWN0ID0gQ0dSZWN0SW50ZXJzZWN0aW9uKGRlc3RSZWN0LCBDR1JlY3RNYWtl
KHRvWCwgdG9ZLCBvbmVUaWxlUmVjdC53aWR0aCgpLCBvbmVUaWxlUmVjdC5oZWlnaHQoKSkpOwor
ICAgICAgICAgICAgICAgIENHUmVjdCBmcm9tUmVjdCA9IENHUmVjdE1ha2UoZnJvbVgsIGZyb21Z
LCB0b1JlY3Quc2l6ZS53aWR0aCAvIHNjYWxlLndpZHRoKCksIHRvUmVjdC5zaXplLmhlaWdodCAv
IHNjYWxlLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBkcmF3KGN0eHQsIHRvUmVjdCwgZnJv
bVJlY3QsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRh
dGlvbkRlc2NyaXB0aW9uKCkpOworICAgICAgICAgICAgICAgIHRvWCArPSBvbmVUaWxlUmVjdC53
aWR0aCgpOworICAgICAgICAgICAgICAgIGZyb21YID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRvWSArPSBvbmVUaWxlUmVjdC5oZWlnaHQoKTsKKyAgICAgICAgICAgIGZyb21ZID0g
MDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmICAgIAorCiAgICAg
QWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oKS5zY2Fs
ZU5vblVuaWZvcm0oc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogICAgIEZsb2F0UmVj
dCB0aWxlUmVjdChGbG9hdFBvaW50KCksIGludHJpbnNpY1RpbGVTaXplKTsKICAgICBkcmF3UGF0
dGVybihjdHh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgb25lVGlsZVJlY3QubG9jYXRp
b24oKSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgc3RhcnRBbmltYXRpb24oZmFsc2UpOworI2Vsc2UKICAgICBzdGFy
dEFuaW1hdGlvbigpOworI2VuZGlmCiB9CiAKIC8vIEZJWE1FOiBNZXJnZSB3aXRoIHRoZSBvdGhl
ciBkcmF3VGlsZWQgZXZlbnR1YWxseSwgc2luY2Ugd2UgbmVlZCBhIGNvbWJpbmF0aW9uIG9mIGJv
dGggZm9yIHNvbWUgdGhpbmdzLgpAQCAtMTY4LDcgKzIyMywxMSBAQCB2b2lkIEltYWdlOjpkcmF3
VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsbwogICAgIAogICAgIGRyYXdQYXR0ZXJuKGN0eHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBhdHRlcm5QaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZHN0UmVjdCk7CiAKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgc3RhcnRBbmltYXRpb24oZmFsc2UpOworI2Vsc2UKICAgICBz
dGFydEFuaW1hdGlvbigpOworI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9E
T1dOX1NBTVBMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgKaW5kZXggM2M2MzI3ZmI3YWE2ZDFlNGRhYzQ0YTBmODc3NDU4YmZhMTM1YjNmNi4u
YWI3MTkwZTk5ZTc0YWM5NWQzYmRmZDFkYmM3ZjUxN2I5MWVkOGZiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0xMzUsNiArMTM1LDEx
IEBAIHB1YmxpYzoKICAgICBJbnRTaXplIHNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9u
ID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0OwogICAgIEludFNpemUgZnJh
bWVTaXplQXRJbmRleChzaXplX3QsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiA9IEltYWdl
T3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBJbnRTaXplIG9yaWdpbmFsU2l6ZShSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBEb05v
dFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsKKyAgICBib29sIGlzU3Vic2FtcGxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fYmFzZVN1YnNhbXBsaW5nOyB9CisjZW5kaWYKKwogICAgIGJvb2wg
Z2V0SG90U3BvdChJbnRQb2ludCYpIGNvbnN0OwogCiAgICAgc2l6ZV90IGJ5dGVzRGVjb2RlZFRv
RGV0ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFBvaW50LmgKaW5kZXggMTY5MjAzN2Q3NTM3NDllMmMyN2Q5MGRlNThiMTMwYjdk
NjMxNWM2NS4uZmUzM2Y0YzNmOGI4ZjFlMGU3YTIyMjYxNjhkZGJkM2Q5NDYzYTA2OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCkBAIC0zNCw2ICszNCw3
IEBAIHR5cGVkZWYgc3RydWN0IENHUG9pbnQgQ0dQb2ludDsKICNlbmRpZgogCiAKKyNpZiAhUExB
VEZPUk0oSU9TKQogI2lmIE9TKERBUldJTikKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVf
QVNfQ0dHRU9NRVRSWV9UWVBFUwogdHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50OwpAQCAt
NDEsNiArNDIsNyBAQCB0eXBlZGVmIHN0cnVjdCBDR1BvaW50IE5TUG9pbnQ7CiB0eXBlZGVmIHN0
cnVjdCBfTlNQb2ludCBOU1BvaW50OwogI2VuZGlmCiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZP
Uk0oSU9TKQogCiAjaWYgUExBVEZPUk0oV0lOKQogdHlwZWRlZiBzdHJ1Y3QgdGFnUE9JTlQgUE9J
TlQ7CkBAIC0xMTEsMTAgKzExMywxMiBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dQb2ludCgp
IGNvbnN0OwogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmIE9TKERBUldJTikgJiYg
IWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpCiAgICAg
ZXhwbGljaXQgSW50UG9pbnQoY29uc3QgTlNQb2ludCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxp
Y2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgIG9wZXJhdG9yIE5TUG9pbnQoKSBjb25zdDsKICNl
bmRpZgorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKICNpZiBQTEFURk9STShXSU4pCiAgICAg
SW50UG9pbnQoY29uc3QgUE9JTlQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuaAppbmRleCA1NjlhOTA4MTQ0NDk1OTE0ZDJkOWRmNGNkYTE1ZjkxMGVkNzNjNzlh
Li42MjIwNTI5MDdiMzQ5NzQxMzdjNTE1MzljZjQ3NzQyNWFhNzM1ZWJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCkBAIC0zMyw3ICszMyw3IEBACiB0eXBl
ZGVmIHN0cnVjdCBDR1JlY3QgQ0dSZWN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisj
aWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQ
RVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0
OwogI2Vsc2UKQEAgLTQxLDYgKzQxLDEyIEBAIHR5cGVkZWYgc3RydWN0IF9OU1JlY3QgTlNSZWN0
OwogI2VuZGlmCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpZm5kZWYgTlNSZWN0Cisj
ZGVmaW5lIE5TUmVjdCBDR1JlY3QKKyNlbmRpZgorI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4p
CiB0eXBlZGVmIHN0cnVjdCB0YWdSRUNUIFJFQ1Q7CiAjZWxpZiBQTEFURk9STShHVEspCkBAIC0x
OTIsOSArMTk4LDExIEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBDR1JlY3QoKSBjb25zdDsKICNl
bmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKICNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykpCiAgICAgb3BlcmF0
b3IgTlNSZWN0KCkgY29uc3Q7CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAj
aWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBJbnRSZWN0KGNvbnN0IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpJbnRSZWN0Jik7CkBAIC0yNTIsOSArMjYwLDExIEBAIGlubGluZSBib29sIEludFJl
Y3Q6OmlzSW5maW5pdGUoKSBjb25zdAogSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IENH
UmVjdCYpOwogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmIChQTEFURk9STShNQUMp
ICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKSkK
IEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBOU1JlY3QmKTsKICNlbmRpZgorI2VuZGlm
IC8vICFQTEFURk9STShJT1MpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCmluZGV4IGRiN2RiYTdlZGI1ODQxNzg3
YjVmNTg2MjQzYzFjZTEyM2Q3YjMzMzkuLjljN2U0ZGU4NzhjNGM4NzE2ZmViZWU5NzhhMjQxZWNj
YjYxZGEyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFNpemUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgK
QEAgLTMyLDcgKzMyLDcgQEAKIHR5cGVkZWYgc3RydWN0IENHU2l6ZSBDR1NpemU7CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1Mp
CiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5cGVk
ZWYgc3RydWN0IENHU2l6ZSBOU1NpemU7CiAjZWxzZQpAQCAtNDAsNiArNDAsMTIgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX05TU2l6ZSBOU1NpemU7CiAjZW5kaWYKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
SU9TKQorI2lmbmRlZiBOU1NpemUKKyNkZWZpbmUgTlNTaXplIENHU2l6ZQorI2VuZGlmCisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKFdJTikKIHR5cGVkZWYgc3RydWN0IHRhZ1NJWkUgU0laRTsKICNl
bGlmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCkBAIC0xMzAsMTAgKzEzNiwxMiBAQCBwdWJsaWM6CiAg
ICAgb3BlcmF0b3IgQ0dTaXplKCkgY29uc3Q7CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1Mp
ICAgIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1F
X0FTX0NHR0VPTUVUUllfVFlQRVMpCiAgICAgZXhwbGljaXQgSW50U2l6ZShjb25zdCBOU1NpemUg
Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgb3Bl
cmF0b3IgTlNTaXplKCkgY29uc3Q7CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQog
CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEludFNpemUoY29uc3QgU0laRSYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDA1NzA5
YTFiZmIyY2MzNGFhYjA2NTgwZjUzZTZiMGQ1N2Q0NTJhYTUuLjZlNDhhYmQ3ZDEzZThhNTA5MWZh
ZTY4OGZmYzY2N2MxZWU1MjU1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTU0LDcgKzU0LDEyIEBACiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TLmgiCisjZGVmaW5lIFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWUgTWVkaWFQ
bGF5ZXJQcml2YXRlSU9TCisjZWxzZQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
LmgiCisjZW5kaWYKICNpZiBVU0UoQVZGT1VOREFUSU9OKQogI2luY2x1ZGUgIk1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCIKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQpAQCAt
MjEyLDcgKzIxNyw3IEBAIHN0YXRpYyBWZWN0b3I8TWVkaWFQbGF5ZXJGYWN0b3J5Kj4mIGluc3Rh
bGxlZE1lZGlhRW5naW5lcyhSZXF1ZXJ5RW5naW5lT3B0aW9ucyByCiAKICNpZiBVU0UoQVZGT1VO
REFUSU9OKQogICAgICAgICBpZiAoU2V0dGluZ3M6OmlzQVZGb3VuZGF0aW9uRW5hYmxlZCgpKSB7
Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQog
ICAgICAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cmVnaXN0ZXJN
ZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKICAg
ICAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cmVnaXN0ZXJN
ZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CkBAIC0yMjMsMTAgKzIyOCwxMiBAQCBzdGF0aWMg
VmVjdG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+JiBpbnN0YWxsZWRNZWRpYUVuZ2luZXMoUmVxdWVy
eUVuZ2luZU9wdGlvbnMgcgogICAgICAgICB9CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1Mp
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBpZiAoU2V0dGluZ3M6OmlzUVRLaXRFbmFibGVk
KCkpCiAgICAgICAgICAgICBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cmVnaXN0ZXJNZWRpYUVu
Z2luZShhZGRNZWRpYUVuZ2luZSk7CiAjZW5kaWYKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChQbGF0
Zm9ybU1lZGlhRW5naW5lQ2xhc3NOYW1lKQogICAgICAgICBQbGF0Zm9ybU1lZGlhRW5naW5lQ2xh
c3NOYW1lOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKQEAgLTgzNyw2ICs4
NDQsNTAgQEAgdm9pZCBNZWRpYVBsYXllcjo6ZXhpdEZ1bGxzY3JlZW4oKQogfQogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCitib29sIE1lZGlhUGxheWVyOjppc0N1cnJlbnRQbGF5
YmFja1RhcmdldFdpcmVsZXNzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0N1
cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXI6OnNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcigpCit7CisgICAgbV9wcml2YXRlLT5zaG93UGxheWJhY2tU
YXJnZXRQaWNrZXIoKTsKK30KKworYm9vbCBNZWRpYVBsYXllcjo6aGFzV2lyZWxlc3NQbGF5YmFj
a1RhcmdldHMoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmhhc1dpcmVsZXNzUGxh
eWJhY2tUYXJnZXRzKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXI6OndpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT53aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyOjpzZXRXaXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZChib29sIGRpc2FibGVkKQoreworICAgIG1fcHJpdmF0ZS0+
c2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoZGlzYWJsZWQpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyOjpzZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhib29s
IGhhc0xpc3RlbmVycykKK3sKKyAgICBtX3ByaXZhdGUtPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5TGlzdGVuZXJzKGhhc0xpc3RlbmVycyk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXI6
OmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9t
ZWRpYVBsYXllckNsaWVudCkKKyAgICAgICAgbV9tZWRpYVBsYXllckNsaWVudC0+bWVkaWFQbGF5
ZXJDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCh0aGlzKTsKK30KKwordm9p
ZCBNZWRpYVBsYXllcjo6cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkKCkKK3sKKyAg
ICBpZiAobV9tZWRpYVBsYXllckNsaWVudCkKKyAgICAgICAgbV9tZWRpYVBsYXllckNsaWVudC0+
bWVkaWFQbGF5ZXJQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWQodGhpcyk7Cit9Cisj
ZW5kaWYKKwogI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKIGJvb2wgTWVkaWFQbGF5
ZXI6OmNhbkVudGVyRnVsbHNjcmVlbigpIGNvbnN0CiB7CkBAIC05NTYsNiArMTAwNywxOCBAQCB2
b2lkIE1lZGlhUGxheWVyOjpzZXRQcml2YXRlQnJvd3NpbmdNb2RlKGJvb2wgcHJpdmF0ZUJyb3dz
aW5nTW9kZSkKICAgICBtX3ByaXZhdGUtPnNldFByaXZhdGVCcm93c2luZ01vZGUobV9wcml2YXRl
QnJvd3NpbmcpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBNZWRpYVBsYXllcjo6YXR0
cmlidXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIAor
eworICAgIG1fcHJpdmF0ZS0+YXR0cmlidXRlQ2hhbmdlZChuYW1lLCB2YWx1ZSk7Cit9CisKK2Jv
b2wgTWVkaWFQbGF5ZXI6OnJlYWR5Rm9yUGxheWJhY2soKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPnJlYWR5Rm9yUGxheWJhY2soKTsKK30KKyNlbmRpZgorCiAvLyBDbGllbnQgY2Fs
bGJhY2tzLgogdm9pZCBNZWRpYVBsYXllcjo6bmV0d29ya1N0YXRlQ2hhbmdlZCgpCiB7CkBAIC05
ODEsNyArMTA0NCwxMiBAQCB2b2lkIE1lZGlhUGxheWVyOjpyZWFkeVN0YXRlQ2hhbmdlZCgpCiAK
IHZvaWQgTWVkaWFQbGF5ZXI6OnZvbHVtZUNoYW5nZWQoZG91YmxlIG5ld1ZvbHVtZSkKIHsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKG5ld1ZvbHVtZSk7CisgICAgbV92b2x1
bWUgPSBtX3ByaXZhdGUtPnZvbHVtZSgpOworI2Vsc2UKICAgICBtX3ZvbHVtZSA9IG5ld1ZvbHVt
ZTsKKyNlbmRpZgogICAgIGlmIChtX21lZGlhUGxheWVyQ2xpZW50KQogICAgICAgICBtX21lZGlh
UGxheWVyQ2xpZW50LT5tZWRpYVBsYXllclZvbHVtZUNoYW5nZWQodGhpcyk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCAxMjZkNWY2
N2RjZGU4OWQ3MTU1YzI5YTU1ODYwZTYwYWM3YzAzNGM4Li4yMjdlOWU3ZDliNmRhNDA3OTgzNDFh
NGU4NDdiYjVlYjQyNjdiZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyLmgKQEAgLTIyNCw2ICsyMjQsMTEgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBtZWRpYVBsYXllcktleU5lZWRlZChNZWRpYVBsYXllciosIFVpbnQ4QXJyYXkqKSB7
IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAgICAgCisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQor
ICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllckN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxl
c3NDaGFuZ2VkKE1lZGlhUGxheWVyKikgeyB9OworICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXll
clBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZChNZWRpYVBsYXllciopIHsgfTsKKyNl
bmRpZgorCiAgICAgdmlydHVhbCBTdHJpbmcgbWVkaWFQbGF5ZXJSZWZlcnJlcigpIGNvbnN0IHsg
cmV0dXJuIFN0cmluZygpOyB9CiAgICAgdmlydHVhbCBTdHJpbmcgbWVkaWFQbGF5ZXJVc2VyQWdl
bnQoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgQ09SU01vZGUgbWVk
aWFQbGF5ZXJDT1JTTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFVuc3BlY2lmaWVkOyB9CkBAIC00MzMs
NiArNDM4LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShJT1NfQUlSUExBWSkKKyAgICBib29sIGlzQ3VycmVudFBsYXliYWNrVGFy
Z2V0V2lyZWxlc3MoKSBjb25zdDsKKyAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcigp
OworCisgICAgYm9vbCBoYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cygpIGNvbnN0OworCisgICAg
Ym9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0
V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoYm9vbCk7CisKKyAgICB2b2lkIGN1cnJlbnRQ
bGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkKCk7CisgICAgdm9pZCBwbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUNoYW5nZWQoKTsKKworICAgIHZvaWQgc2V0SGFzUGxheWJhY2tUYXJnZXRB
dmFpbGFiaWxpdHlMaXN0ZW5lcnMoYm9vbCk7CisjZW5kaWYKKwogI2lmIFVTRShOQVRJVkVfRlVM
TFNDUkVFTl9WSURFTykKICAgICBib29sIGNhbkVudGVyRnVsbHNjcmVlbigpIGNvbnN0OwogI2Vu
ZGlmCkBAIC00ODYsNiArNTA2LDExIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBlbmdpbmVEZXNj
cmlwdGlvbigpIGNvbnN0OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgYXR0cmlidXRl
Q2hhbmdlZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIGJv
b2wgcmVhZHlGb3JQbGF5YmFjaygpIGNvbnN0OworI2VuZGlmCisKICAgICBDYWNoZWRSZXNvdXJj
ZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFD
SykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXJQcml2YXRlLmgKaW5kZXggY2Y3YjVmMjg4NWY1MTVmMjYzNDMwM2JlNjNhZTc1NWQyYjg0MzRk
OC4uZmJhZmQ3MGNkOWVmMzRhMDc4MDRhMjVhNzkyOTNiODc4MjM5YjM1MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgK
QEAgLTk3LDYgKzk3LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZShm
bG9hdCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZURvdWJsZShkb3VibGUgdm9sdW1l
KSB7IHJldHVybiBzZXRWb2x1bWUodm9sdW1lKTsgfQorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2
aXJ0dWFsIGZsb2F0IHZvbHVtZSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyNlbmRpZgogCiAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzTXV0aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoYm9vbCkgeyB9CkBAIC0xNDEsNiArMTQ0LDE4IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKSB7IH0KICNlbmRpZgogCisj
aWYgRU5BQkxFKElPU19BSVJQTEFZKQorICAgIHZpcnR1YWwgYm9vbCBpc0N1cnJlbnRQbGF5YmFj
a1RhcmdldFdpcmVsZXNzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
V2lyZWxlc3NQbGF5YmFja1RhcmdldHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
dmlydHVhbCBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWQoYm9vbCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SGFzUGxheWJhY2tUYXJnZXRB
dmFpbGFiaWxpdHlMaXN0ZW5lcnMoYm9vbCkgeyB9CisjZW5kaWYKKwogI2lmIFVTRShOQVRJVkVf
RlVMTFNDUkVFTl9WSURFTykKICAgICB2aXJ0dWFsIGJvb2wgY2FuRW50ZXJGdWxsc2NyZWVuKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtMjA5LDcgKzIyNCwxMiBAQCBwdWJs
aWM6CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICB2aXJ0dWFsIHZvaWQgc2ltdWxhdGVBdWRpb0lu
dGVycnVwdGlvbigpIHsgfQogI2VuZGlmCi0gICAgCisKKyNpZiBQTEFURk9STShJT1MpCisgICAg
dmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JikgeyB9CisgICAgdmlydHVhbCBib29sIHJlYWR5Rm9yUGxheWJhY2soKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgU3RyaW5nIGxhbmd1YWdlT2ZQcmltYXJ5
QXVkaW9UcmFjaygpIGNvbnN0IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KIAogICAgIHZpcnR1
YWwgc2l6ZV90IGV4dHJhTWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAppbmRl
eCAzMjM1YjQwZWY1MmQxNzJmNmE2YzY3YjZiYTYyYTUzMTEwOWQwYTE5Li5iMDYyN2FkMjQ0NzI3
M2E4YjUzMDM5MmI1MjlkMWE5MmYzNzJkODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCkBAIC04MCw2ICs4MCw5IEBAIFNp
bXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8QWRkaXRpb25hbEZv
bnREYXRhPiBmb250RGF0YSwgZmxvCiAgICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQogI2VuZGlmCiAg
ICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAs
IG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbHNlKQorI2VuZGlmCiB7CiAgICAgbV9mb250
RGF0YS0+aW5pdGlhbGl6ZUZvbnREYXRhKHRoaXMsIGZvbnRTaXplKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCmluZGV4IDQ1YTBm
NTVmYTA5NTJlOWZhMTcxZDgwMjdjZjJhNTg5ZjI0NDkyYWQuLjljZDMxNmYyNjY3NDUyYzdkZjZh
OGM2MWE1YzE1ZTg3MmEzZDRhNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaApAQCAtMTgwLDExICsxODAsMTUgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgT1ZFUlJJREU7CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBVU0UoQVBQS0lUKQogICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBnZXRDb21wb3NpdGVGb250UmVmZXJlbmNlRm9udERhdGEoTlNGb250ICprZXkpIGNv
bnN0OwogICAgIE5TRm9udCogZ2V0TlNGb250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURh
dGEuZm9udCgpOyB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBDVEZvbnRSZWYg
Z2V0Q1RGb250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9CisgICAg
Ym9vbCBzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE5v
dEJlVXNlZEZvckFyYWJpYzsgfTsKKyNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBDRkRp
Y3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZv
bnRPcmllbnRhdGlvbikgY29uc3Q7CiAjZW5kaWYKQEAgLTE5Nyw3ICsyMDEsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBpZiAoaXNTVkdGb250KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID4gMTA4MAorI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCiAgICAgICAgIHdrQ1RGb250VHJhbnNmb3Jt
T3B0aW9ucyBvcHRpb25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBLZXJuaW5nID8gd2tDVEZv
bnRUcmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIDogMCkgfCAodHlwZXNldHRpbmdGZWF0dXJlcyAm
IExpZ2F0dXJlcyA/IHdrQ1RGb250VHJhbnNmb3JtQXBwbHlTaGFwaW5nIDogMCk7CiAgICAgICAg
IHJldHVybiB3a0NURm9udFRyYW5zZm9ybUdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwg
Z2x5cGhzLCByZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGFkdmFuY2VzKSwgZ2x5cGhDb3VudCwg
b3B0aW9ucyk7CiAjZWxzZQpAQCAtMzE1LDYgKzMxOSw5IEBAIHByaXZhdGU6CiAgICAgbXV0YWJs
ZSBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CiAjZW5kaWYK
ICNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIG1fc2hvdWxkTm90QmVVc2VkRm9y
QXJhYmljOworI2VuZGlmCiB9OwogCiBBTFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBTaW1wbGVGb250
RGF0YTo6Ym91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcAppbmRleCBhNzJh
ZTRiN2E1YjkzNTRkNTZjZmFiZWM4NTk5YzA3MWE0YjI5ODFkLi5hNDY3MzlhM2FlMTBmMDFiMjk2
MTA4NWRlZjRjMTJjOGNiOTg0NzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjZGVmaW5lIFNUUklOR19CVUZGRVJfU0laRSAyMDQ4CiAKLXR5cGVk
ZWYgdW5zaWduZWQgVHJ1bmNhdGlvbkZ1bmN0aW9uKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQga2VlcENvdW50LCBVQ2hhciogYnVmZmVyKTsKK3R5cGVkZWYgdW5zaWdu
ZWQgVHJ1bmNhdGlvbkZ1bmN0aW9uKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxlbmd0aCwgdW5z
aWduZWQga2VlcENvdW50LCBVQ2hhciogYnVmZmVyLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lz
KTsKIAogc3RhdGljIGlubGluZSBpbnQgdGV4dEJyZWFrQXRPclByZWNlZGluZyhUZXh0QnJlYWtJ
dGVyYXRvciogaXQsIGludCBvZmZzZXQpCiB7CkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBpbmxp
bmUgaW50IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGl0LCBp
bnQgb2Zmc2V0LCBpCiAgICAgcmV0dXJuIHJlc3VsdCA9PSBUZXh0QnJlYWtEb25lID8gbGVuZ3Ro
IDogcmVzdWx0OwogfQogCi1zdGF0aWMgdW5zaWduZWQgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlcihj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQs
IFVDaGFyKiBidWZmZXIpCitzdGF0aWMgdW5zaWduZWQgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlcihj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQs
IFVDaGFyKiBidWZmZXIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMpCiB7CiAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oa2VlcENvdW50IDwgbGVuZ3RoKTsKICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihrZWVwQ291bnQgPCBTVFJJTkdfQlVGRkVSX1NJ
WkUpOwpAQCAtNjYsMzIgKzY2LDEyNSBAQCBzdGF0aWMgdW5zaWduZWQgY2VudGVyVHJ1bmNhdGVU
b0J1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bgogICAgIE5v
blNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoc3RyaW5nLmNoYXJhY3RlcnMoKSwgbGVu
Z3RoKTsKICAgICB1bnNpZ25lZCBvbWl0RW5kID0gYm91bmRlZFRleHRCcmVha0ZvbGxvd2luZyhp
dCwgb21pdFN0YXJ0ICsgKGxlbmd0aCAtIGtlZXBDb3VudCkgLSAxLCBsZW5ndGgpOwogICAgIG9t
aXRTdGFydCA9IHRleHRCcmVha0F0T3JQcmVjZWRpbmcoaXQsIG9taXRTdGFydCk7Ci0gICAgCi0g
ICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoID0gb21pdFN0YXJ0ICsgMSArIChsZW5ndGggLSBv
bWl0RW5kKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGd1
YXJkIHRoaXMgY29kZSBiZWhpbmQgYW4gZWRpdGluZyBiZWhhdmlvci4gVGhlbiB3ZSBjYW4gcmVt
b3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgorCisgICAgLy8gU3RyaXAgc2luZ2xlIGNoYXJh
Y3RlciBiZWZvcmUgZWxsaXBzaXMgY2hhcmFjdGVyLCB3aGVuIHRoYXQgY2hhcmFjdGVyIGlzIHBy
ZWNlZGVkIGJ5IGEgc3BhY2UKKyAgICBpZiAob21pdFN0YXJ0ID4gMSAmJiBzdHJpbmdbb21pdFN0
YXJ0IC0gMV0gIT0gc3BhY2UgJiYgb21pdFN0YXJ0ID4gMiAmJiBzdHJpbmdbb21pdFN0YXJ0IC0g
Ml0gPT0gc3BhY2UpCisgICAgICAgIC0tb21pdFN0YXJ0OworCisgICAgLy8gU3RyaXAgd2hpdGVz
cGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlbGxpcHNpcyBjaGFyYWN0ZXIKKyAgICB3aGlsZSAo
b21pdFN0YXJ0ID4gMSAmJiBzdHJpbmdbb21pdFN0YXJ0IC0gMV0gPT0gc3BhY2UpCisgICAgICAg
IC0tb21pdFN0YXJ0OworCisgICAgLy8gU3RyaXAgc2luZ2xlIGNoYXJhY3RlciBhZnRlciBlbGxp
cHNpcyBjaGFyYWN0ZXIsIHdoZW4gdGhhdCBjaGFyYWN0ZXIgaXMgZm9sbG93ZWQgYnkgYSBzcGFj
ZQorICAgIGlmICgobGVuZ3RoIC0gb21pdEVuZCkgPiAxICYmIHN0cmluZ1tvbWl0RW5kXSAhPSBz
cGFjZSAmJiAobGVuZ3RoIC0gb21pdEVuZCkgPiAyICYmIHN0cmluZ1tvbWl0RW5kICsgMV0gPT0g
c3BhY2UpCisgICAgICAgICsrb21pdEVuZDsKKworICAgIHdoaWxlICgobGVuZ3RoIC0gb21pdEVu
ZCkgPiAxICYmIHN0cmluZ1tvbWl0RW5kXSA9PSBzcGFjZSkKKyAgICAgICAgKytvbWl0RW5kOwor
I2VuZGlmCisKKyAgICB1bnNpZ25lZCB0cnVuY2F0ZWRMZW5ndGggPSBzaG91bGRJbnNlcnRFbGxp
cHNpcyA/IG9taXRTdGFydCArIDEgKyAobGVuZ3RoIC0gb21pdEVuZCkgOiBsZW5ndGggLSAob21p
dEVuZCAtIG9taXRTdGFydCk7CiAgICAgQVNTRVJUKHRydW5jYXRlZExlbmd0aCA8PSBsZW5ndGgp
OwogCiAgICAgbWVtY3B5KGJ1ZmZlciwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc2l6ZW9mKFVDaGFy
KSAqIG9taXRTdGFydCk7Ci0gICAgYnVmZmVyW29taXRTdGFydF0gPSBob3Jpem9udGFsRWxsaXBz
aXM7Ci0gICAgbWVtY3B5KCZidWZmZXJbb21pdFN0YXJ0ICsgMV0sICZzdHJpbmcuY2hhcmFjdGVy
cygpW29taXRFbmRdLCBzaXplb2YoVUNoYXIpICogKGxlbmd0aCAtIG9taXRFbmQpKTsKLSAgICAK
KyAgICBpZiAoc2hvdWxkSW5zZXJ0RWxsaXBzaXMpIHsKKyAgICAgICAgYnVmZmVyW29taXRTdGFy
dF0gPSBob3Jpem9udGFsRWxsaXBzaXM7CisgICAgICAgIG1lbWNweSgmYnVmZmVyW29taXRTdGFy
dCArIDFdLCAmc3RyaW5nLmNoYXJhY3RlcnMoKVtvbWl0RW5kXSwgc2l6ZW9mKFVDaGFyKSAqIChs
ZW5ndGggLSBvbWl0RW5kKSk7ICAgIAorICAgIH0gZWxzZQorICAgICAgICBtZW1jcHkoJmJ1ZmZl
cltvbWl0U3RhcnRdLCAmc3RyaW5nLmNoYXJhY3RlcnMoKVtvbWl0RW5kXSwgc2l6ZW9mKFVDaGFy
KSAqIChsZW5ndGggLSBvbWl0RW5kKSk7CiAgICAgcmV0dXJuIHRydW5jYXRlZExlbmd0aDsKIH0K
IAotc3RhdGljIHVuc2lnbmVkIHJpZ2h0VHJ1bmNhdGVUb0J1ZmZlcihjb25zdCBTdHJpbmcmIHN0
cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQsIFVDaGFyKiBidWZmZXIp
CitzdGF0aWMgdW5zaWduZWQgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGtlZXBDb3VudCwgVUNoYXIqIGJ1ZmZlciwg
Ym9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcykKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihrZWVwQ291bnQgPCBsZW5ndGgpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGtlZXBDb3VudCA8IFNUUklOR19CVUZGRVJfU0laRSk7Ci0gICAgCisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBndWFyZCB0aGlzIGNvZGUg
YmVoaW5kIGFuIGVkaXRpbmcgYmVoYXZpb3IuIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZP
Uk0oSU9TKS1ndWFyZC4KKworICAgIC8vIFN0cmlwIHNpbmdsZSBjaGFyYWN0ZXIgYmVmb3JlIGVs
bGlwc2lzIGNoYXJhY3Rlciwgd2hlbiB0aGF0IGNoYXJhY3RlciBpcyBwcmVjZWRlZCBieSBhIHNw
YWNlCisgICAgaWYgKGtlZXBDb3VudCA+IDEgJiYgc3RyaW5nW2tlZXBDb3VudCAtIDFdICE9IHNw
YWNlICYmIGtlZXBDb3VudCA+IDIgJiYgc3RyaW5nW2tlZXBDb3VudCAtIDJdID09IHNwYWNlKQor
ICAgICAgICAtLWtlZXBDb3VudDsKKworICAgIC8vIFN0cmlwIHdoaXRlc3BhY2UgYmVmb3JlIHRo
ZSBlbGxpcHNpcyBjaGFyYWN0ZXIKKyAgICB3aGlsZSAoa2VlcENvdW50ID4gMSAmJiBzdHJpbmdb
a2VlcENvdW50IC0gMV0gPT0gc3BhY2UpCisgICAgICAgIC0ta2VlcENvdW50OworI2VuZGlmCisK
ICAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmluZy5jaGFyYWN0ZXJz
KCksIGxlbmd0aCk7CiAgICAgdW5zaWduZWQga2VlcExlbmd0aCA9IHRleHRCcmVha0F0T3JQcmVj
ZWRpbmcoaXQsIGtlZXBDb3VudCk7Ci0gICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoID0ga2Vl
cExlbmd0aCArIDE7Ci0gICAgCisgICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoID0gc2hvdWxk
SW5zZXJ0RWxsaXBzaXMgPyBrZWVwTGVuZ3RoICsgMSA6IGtlZXBMZW5ndGg7CisKICAgICBtZW1j
cHkoYnVmZmVyLCBzdHJpbmcuY2hhcmFjdGVycygpLCBzaXplb2YoVUNoYXIpICoga2VlcExlbmd0
aCk7Ci0gICAgYnVmZmVyW2tlZXBMZW5ndGhdID0gaG9yaXpvbnRhbEVsbGlwc2lzOwotICAgIAor
ICAgIGlmIChzaG91bGRJbnNlcnRFbGxpcHNpcykKKyAgICAgICAgYnVmZmVyW2tlZXBMZW5ndGhd
ID0gaG9yaXpvbnRhbEVsbGlwc2lzOworCiAgICAgcmV0dXJuIHRydW5jYXRlZExlbmd0aDsKIH0K
IAorc3RhdGljIHVuc2lnbmVkIHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyQnVmZmVyKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGtlZXBDb3VudCwgVUNoYXIqIGJ1
ZmZlciwgYm9vbCkKK3sKKyAgICBBU1NFUlQoa2VlcENvdW50IDwgbGVuZ3RoKTsKKyAgICBBU1NF
UlQoa2VlcENvdW50IDwgU1RSSU5HX0JVRkZFUl9TSVpFKTsKKworICAgIE5vblNoYXJlZENoYXJh
Y3RlckJyZWFrSXRlcmF0b3IgaXQoc3RyaW5nLmNoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICB1
bnNpZ25lZCBrZWVwTGVuZ3RoID0gdGV4dEJyZWFrQXRPclByZWNlZGluZyhpdCwga2VlcENvdW50
KTsKKyAgICBtZW1jcHkoYnVmZmVyLCBzdHJpbmcuY2hhcmFjdGVycygpLCBzaXplb2YoVUNoYXIp
ICoga2VlcExlbmd0aCk7CisKKyAgICByZXR1cm4ga2VlcExlbmd0aDsKK30KKworc3RhdGljIHVu
c2lnbmVkIHJpZ2h0Q2xpcFRvV29yZEJ1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQsIFVDaGFyKiBidWZmZXIsIGJvb2wpCit7Cisg
ICAgQVNTRVJUKGtlZXBDb3VudCA8IGxlbmd0aCk7CisgICAgQVNTRVJUKGtlZXBDb3VudCA8IFNU
UklOR19CVUZGRVJfU0laRSk7CisKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJl
YWtJdGVyYXRvcihzdHJpbmcuY2hhcmFjdGVycygpLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGtl
ZXBMZW5ndGggPSB0ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKGl0LCBrZWVwQ291bnQpOworICAgIG1l
bWNweShidWZmZXIsIHN0cmluZy5jaGFyYWN0ZXJzKCksIHNpemVvZihVQ2hhcikgKiBrZWVwTGVu
Z3RoKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGd1YXJk
IHRoaXMgY29kZSBiZWhpbmQgYW4gZWRpdGluZyBiZWhhdmlvci4gVGhlbiB3ZSBjYW4gcmVtb3Zl
IHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgorICAgIC8vIE1vdGl2YXRlZCBieSA8cmRhcjovL3By
b2JsZW0vNzQzOTMyNz4gdHJ1bmNhdGlvbiBzaG91bGQgbm90IGluY2x1ZGUgYSB0cmFpbGluZyBz
cGFjZQorICAgIHdoaWxlICgoa2VlcExlbmd0aCA+IDApICYmIChzdHJpbmdba2VlcExlbmd0aCAt
IDFdID09IHNwYWNlKSkKKyAgICAgICAgLS1rZWVwTGVuZ3RoOworI2VuZGlmCisgICAgcmV0dXJu
IGtlZXBMZW5ndGg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsZWZ0VHJ1bmNhdGVUb0J1ZmZlcihj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQs
IFVDaGFyKiBidWZmZXIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMpCit7CisgICAgQVNTRVJU
KGtlZXBDb3VudCA8IGxlbmd0aCk7CisgICAgQVNTRVJUKGtlZXBDb3VudCA8IFNUUklOR19CVUZG
RVJfU0laRSk7CisKKyAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gbGVuZ3RoIC0ga2VlcENvdW50
OworCisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChzdHJpbmcuY2hhcmFj
dGVycygpLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGFkanVzdGVkU3RhcnRJbmRleCA9IHN0YXJ0
SW5kZXg7CisgICAgc3RhcnRJbmRleCA9IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHN0
YXJ0SW5kZXgsIGxlbmd0aCAtIHN0YXJ0SW5kZXgpOworCisgICAgLy8gU3RyaXAgc2luZ2xlIGNo
YXJhY3RlciBhZnRlciBlbGxpcHNpcyBjaGFyYWN0ZXIsIHdoZW4gdGhhdCBjaGFyYWN0ZXIgaXMg
cHJlY2VkZWQgYnkgYSBzcGFjZQorICAgIGlmIChhZGp1c3RlZFN0YXJ0SW5kZXggPCBsZW5ndGgg
JiYgc3RyaW5nW2FkanVzdGVkU3RhcnRJbmRleF0gIT0gc3BhY2UKKyAgICAgICAgJiYgYWRqdXN0
ZWRTdGFydEluZGV4IDwgbGVuZ3RoIC0gMSAmJiBzdHJpbmdbYWRqdXN0ZWRTdGFydEluZGV4ICsg
MV0gPT0gc3BhY2UpCisgICAgICAgICsrYWRqdXN0ZWRTdGFydEluZGV4OworCisgICAgLy8gU3Ry
aXAgd2hpdGVzcGFjZSBhZnRlciB0aGUgZWxsaXBzaXMgY2hhcmFjdGVyCisgICAgd2hpbGUgKGFk
anVzdGVkU3RhcnRJbmRleCA8IGxlbmd0aCAmJiBzdHJpbmdbYWRqdXN0ZWRTdGFydEluZGV4XSA9
PSBzcGFjZSkKKyAgICAgICAgKythZGp1c3RlZFN0YXJ0SW5kZXg7CisKKyAgICBpZiAoc2hvdWxk
SW5zZXJ0RWxsaXBzaXMpIHsKKyAgICAgICAgYnVmZmVyWzBdID0gaG9yaXpvbnRhbEVsbGlwc2lz
OworICAgICAgICBtZW1jcHkoJmJ1ZmZlclsxXSwgJnN0cmluZy5jaGFyYWN0ZXJzKClbYWRqdXN0
ZWRTdGFydEluZGV4XSwgc2l6ZW9mKFVDaGFyKSAqIChsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5k
ZXggKyAxKSk7CisgICAgICAgIHJldHVybiBsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5kZXggKyAx
OworICAgIH0KKyAgICBtZW1jcHkoJmJ1ZmZlclswXSwgJnN0cmluZy5jaGFyYWN0ZXJzKClbYWRq
dXN0ZWRTdGFydEluZGV4XSwgc2l6ZW9mKFVDaGFyKSAqIChsZW5ndGggLSBhZGp1c3RlZFN0YXJ0
SW5kZXggKyAxKSk7CisgICAgcmV0dXJuIGxlbmd0aCAtIGFkanVzdGVkU3RhcnRJbmRleDsKK30K
Kwogc3RhdGljIGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnQmIHJlbmRlcmVyLCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBib29sIGRpc2FibGVSb3VuZGluZ0hh
Y2tzKQogewogICAgIFRleHRSdW4gcnVuKGNoYXJhY3RlcnMsIGxlbmd0aCk7CkBAIC0xMDAsMjMg
KzE5MywyOSBAQCBzdGF0aWMgZmxvYXQgc3RyaW5nV2lkdGgoY29uc3QgRm9udCYgcmVuZGVyZXIs
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZAogICAgIHJldHVybiByZW5kZXJlci53
aWR0aChydW4pOwogfQogCi1zdGF0aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgVHJ1bmNhdGlvbkZ1
bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3MpCitzdGF0
aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhX
aWR0aCwgY29uc3QgRm9udCYgZm9udCwgVHJ1bmNhdGlvbkZ1bmN0aW9uIHRydW5jYXRlVG9CdWZm
ZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0KiByZXN1bHRXaWR0aCA9IG51bGxw
dHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCAgZmxvYXQgY3VzdG9tVHJ1bmNh
dGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3YXlzVHJ1bmNhdGUgPSBmYWxzZSkKIHsKICAg
ICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHN0cmluZzsKLSAgICAKKwor
ICAgIGlmIChyZXN1bHRXaWR0aCkKKyAgICAgICAgKnJlc3VsdFdpZHRoID0gMDsKKwogICAgIEFT
U0VSVChtYXhXaWR0aCA+PSAwKTsKLSAgICAKLSAgICBmbG9hdCBjdXJyZW50RWxsaXBzaXNXaWR0
aCA9IHN0cmluZ1dpZHRoKGZvbnQsICZob3Jpem9udGFsRWxsaXBzaXMsIDEsIGRpc2FibGVSb3Vu
ZGluZ0hhY2tzKTsKLSAgICAKKworICAgIGZsb2F0IGN1cnJlbnRFbGxpcHNpc1dpZHRoID0gc2hv
dWxkSW5zZXJ0RWxsaXBzaXMgPyBzdHJpbmdXaWR0aChmb250LCAmaG9yaXpvbnRhbEVsbGlwc2lz
LCAxLCBkaXNhYmxlUm91bmRpbmdIYWNrcykgOiBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRo
OworCiAgICAgVUNoYXIgc3RyaW5nQnVmZmVyW1NUUklOR19CVUZGRVJfU0laRV07CiAgICAgdW5z
aWduZWQgdHJ1bmNhdGVkTGVuZ3RoOwogICAgIHVuc2lnbmVkIGtlZXBDb3VudDsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAKICAgICBpZiAobGVuZ3RoID4gU1RSSU5H
X0JVRkZFUl9TSVpFKSB7Ci0gICAgICAgIGtlZXBDb3VudCA9IFNUUklOR19CVUZGRVJfU0laRSAt
IDE7IC8vIG5lZWQgMSBjaGFyYWN0ZXIgZm9yIHRoZSBlbGxpcHNpcwotICAgICAgICB0cnVuY2F0
ZWRMZW5ndGggPSBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyKHN0cmluZywgbGVuZ3RoLCBrZWVwQ291
bnQsIHN0cmluZ0J1ZmZlcik7CisgICAgICAgIGlmIChzaG91bGRJbnNlcnRFbGxpcHNpcykKKyAg
ICAgICAgICAgIGtlZXBDb3VudCA9IFNUUklOR19CVUZGRVJfU0laRSAtIDE7IC8vIG5lZWQgMSBj
aGFyYWN0ZXIgZm9yIHRoZSBlbGxpcHNpcworICAgICAgICBlbHNlCisgICAgICAgICAgICBrZWVw
Q291bnQgPSAwOworICAgICAgICB0cnVuY2F0ZWRMZW5ndGggPSBjZW50ZXJUcnVuY2F0ZVRvQnVm
ZmVyKHN0cmluZywgbGVuZ3RoLCBrZWVwQ291bnQsIHN0cmluZ0J1ZmZlciwgc2hvdWxkSW5zZXJ0
RWxsaXBzaXMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGtlZXBDb3VudCA9IGxlbmd0aDsKICAg
ICAgICAgbWVtY3B5KHN0cmluZ0J1ZmZlciwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc2l6ZW9mKFVD
aGFyKSAqIGxlbmd0aCk7CkBAIC0xMjQsOCArMjIzLDEzIEBAIHN0YXRpYyBTdHJpbmcgdHJ1bmNh
dGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250
JiBmCiAgICAgfQogCiAgICAgZmxvYXQgd2lkdGggPSBzdHJpbmdXaWR0aChmb250LCBzdHJpbmdC
dWZmZXIsIHRydW5jYXRlZExlbmd0aCwgZGlzYWJsZVJvdW5kaW5nSGFja3MpOwotICAgIGlmICh3
aWR0aCA8PSBtYXhXaWR0aCkKKyAgICBpZiAoIXNob3VsZEluc2VydEVsbGlwc2lzICYmIGFsd2F5
c1RydW5jYXRlKQorICAgICAgICB3aWR0aCArPSBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRo
OworICAgIGlmICgod2lkdGggLSBtYXhXaWR0aCkgPCAwLjAwMDEpIHsgLy8gSWdub3JlIHJvdW5k
aW5nIGVycm9ycy4KKyAgICAgICAgaWYgKHJlc3VsdFdpZHRoKQorICAgICAgICAgICAgKnJlc3Vs
dFdpZHRoID0gd2lkdGg7CiAgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgfQogCiAgICAgdW5z
aWduZWQga2VlcENvdW50Rm9yTGFyZ2VzdEtub3duVG9GaXQgPSAwOwogICAgIGZsb2F0IHdpZHRo
Rm9yTGFyZ2VzdEtub3duVG9GaXQgPSBjdXJyZW50RWxsaXBzaXNXaWR0aDsKQEAgLTE1NiwxMyAr
MjYwLDE3IEBAIHN0YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmCiAgICAgICAgIEFTU0VSVChrZWVwQ291
bnQgPiAwKTsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oa2VlcENv
dW50IDwga2VlcENvdW50Rm9yU21hbGxlc3RLbm93blRvTm90Rml0KTsKICAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oa2VlcENvdW50ID4ga2VlcENvdW50Rm9yTGFyZ2Vz
dEtub3duVG9GaXQpOwotICAgICAgICAKLSAgICAgICAgdHJ1bmNhdGVkTGVuZ3RoID0gdHJ1bmNh
dGVUb0J1ZmZlcihzdHJpbmcsIGxlbmd0aCwga2VlcENvdW50LCBzdHJpbmdCdWZmZXIpOworCisg
ICAgICAgIHRydW5jYXRlZExlbmd0aCA9IHRydW5jYXRlVG9CdWZmZXIoc3RyaW5nLCBsZW5ndGgs
IGtlZXBDb3VudCwgc3RyaW5nQnVmZmVyLCBzaG91bGRJbnNlcnRFbGxpcHNpcyk7CiAKICAgICAg
ICAgd2lkdGggPSBzdHJpbmdXaWR0aChmb250LCBzdHJpbmdCdWZmZXIsIHRydW5jYXRlZExlbmd0
aCwgZGlzYWJsZVJvdW5kaW5nSGFja3MpOworICAgICAgICBpZiAoIXNob3VsZEluc2VydEVsbGlw
c2lzKQorICAgICAgICAgICAgd2lkdGggKz0gY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aDsK
ICAgICAgICAgaWYgKHdpZHRoIDw9IG1heFdpZHRoKSB7CiAgICAgICAgICAgICBrZWVwQ291bnRG
b3JMYXJnZXN0S25vd25Ub0ZpdCA9IGtlZXBDb3VudDsKICAgICAgICAgICAgIHdpZHRoRm9yTGFy
Z2VzdEtub3duVG9GaXQgPSB3aWR0aDsKKyAgICAgICAgICAgIGlmIChyZXN1bHRXaWR0aCkKKyAg
ICAgICAgICAgICAgICAqcmVzdWx0V2lkdGggPSB3aWR0aDsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGtlZXBDb3VudEZvclNtYWxsZXN0S25vd25Ub05vdEZpdCA9IGtlZXBDb3VudDsK
ICAgICAgICAgICAgIHdpZHRoRm9yU21hbGxlc3RLbm93blRvTm90Rml0ID0gd2lkdGg7CkBAIC0x
NzUsNyArMjgzLDcgQEAgc3RhdGljIFN0cmluZyB0cnVuY2F0ZVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGYKICAgICAKICAgICBpZiAoa2Vl
cENvdW50ICE9IGtlZXBDb3VudEZvckxhcmdlc3RLbm93blRvRml0KSB7CiAgICAgICAgIGtlZXBD
b3VudCA9IGtlZXBDb3VudEZvckxhcmdlc3RLbm93blRvRml0OwotICAgICAgICB0cnVuY2F0ZWRM
ZW5ndGggPSB0cnVuY2F0ZVRvQnVmZmVyKHN0cmluZywgbGVuZ3RoLCBrZWVwQ291bnQsIHN0cmlu
Z0J1ZmZlcik7CisgICAgICAgIHRydW5jYXRlZExlbmd0aCA9IHRydW5jYXRlVG9CdWZmZXIoc3Ry
aW5nLCBsZW5ndGgsIGtlZXBDb3VudCwgc3RyaW5nQnVmZmVyLCBzaG91bGRJbnNlcnRFbGxpcHNp
cyk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBTdHJpbmcoc3RyaW5nQnVmZmVyLCB0cnVuY2F0
ZWRMZW5ndGgpOwpAQCAtMTk2LDQgKzMwNCwyOSBAQCBmbG9hdCBTdHJpbmdUcnVuY2F0b3I6Ondp
ZHRoKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZAog
ICAgIHJldHVybiBzdHJpbmdXaWR0aChmb250LCBzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcu
bGVuZ3RoKCksICFlbmFibGVSb3VuZGluZ0hhY2tzKTsKIH0KIAorU3RyaW5nIFN0cmluZ1RydW5j
YXRvcjo6Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRo
LCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRp
bmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQoreworICAgIHJldHVybiB0cnVuY2F0
ZVN0cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyLCAh
ZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
Y3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7Cit9CisKK1N0cmluZyBTdHJpbmdUcnVuY2F0
b3I6OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBj
b25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdI
YWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9h
dCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQoreworICAgIHJldHVybiB0cnVuY2F0ZVN0
cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCByaWdodFRydW5jYXRlVG9CdWZmZXIsICFlbmFi
bGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0
b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKK30KKworU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
bGVmdFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3Qg
Rm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3Ms
IGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxvYXQgY3Vz
dG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK3sKKyAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmco
c3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgbGVmdFRydW5jYXRlVG9CdWZmZXIsICFlbmFibGVSb3Vu
ZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0b21UcnVu
Y2F0aW9uRWxlbWVudFdpZHRoKTsKK30KKworU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRD
bGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNr
cywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBj
dXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQoreworICAgIHJldHVybiB0cnVuY2F0ZVN0cmlu
ZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCByaWdodENsaXBUb0NoYXJhY3RlckJ1ZmZlciwgIWVu
YWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGN1
c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOworfQorCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9y
OjpyaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBj
b25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdI
YWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCAgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCwgYm9vbCBhbHdheXNUcnVuY2F0ZSkKK3sK
KyAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRD
bGlwVG9Xb3JkQnVmZmVyLCAhZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91
bGRJbnNlcnRFbGxpcHNpcywgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCwgYWx3YXlzVHJ1
bmNhdGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCmluZGV4IDE0OTljMTA4NzQ0
NzNhZDQ2M2M0ZjM3YWIyMDRlZDAwNjc5ZGNkN2MuLjEzZDhlMTRhZjdlODY0OGE3MWNmNDc3MDQw
NjY2Mjg2OWUzOTdjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5oCkBAIC00MSw2ICs0MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgc3RhdGljIFN0cmluZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcm
LCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9
IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKICAgICAgICAgc3RhdGljIFN0cmluZyByaWdodFRydW5j
YXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91
bmRpbmdIYWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOworCisgICAgICAgIHN0YXRp
YyBTdHJpbmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNv
bnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwg
Ym9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25F
bGVtZW50V2lkdGggPSAwKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNv
bnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdI
YWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMg
PSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgICAg
IHN0YXRpYyBTdHJpbmcgbGVmdFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRo
LCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lk
dGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0
aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgcmlnaHRDbGlwVG9D
aGFyYWN0ZXIoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFi
bGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNl
cnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAw
KTsKKyAgICAgICAgc3RhdGljIFN0cmluZyByaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwg
ZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZs
b2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwLCBib29sIGFsd2F5c1RydW5jYXRlID0g
ZmFsc2UpOworCiAgICAgICAgIHN0YXRpYyBmbG9hdCB3aWR0aChjb25zdCBTdHJpbmcmLCBjb25z
dCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3Mp
OwogICAgIH07CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAKaW5kZXggNjhlNGMyZDRhMzA5
MzU1ZWE4MzQzNGVkYjVkOTgzN2VkN2ZhNTY1YS4uZDE3OGU1ODZmNzhmMjAxNjkwZWVjMzNmMjJh
MjYzNDkzYmExYWRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1RleHRUcmFja1JlcHJlc2VudGF0aW9uLmNwcApAQCAtNDIsMTAgKzQyLDEy
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFJlY3QgYm91bmRzKCkgY29uc3QgeyByZXR1cm4g
SW50UmVjdCgpOyB9CiB9OwogCisjaWYgIVBMQVRGT1JNKElPUykKIFBhc3NPd25QdHI8VGV4dFRy
YWNrUmVwcmVzZW50YXRpb24+IFRleHRUcmFja1JlcHJlc2VudGF0aW9uOjpjcmVhdGUoVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25DbGllbnQqKQogewogICAgIHJldHVybiBXVEY6OmFkb3B0UHRyKG5l
dyBOdWxsVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKSk7CiB9CisjZW5kaWYKIAogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKaW5kZXgg
YmY2MzVjOWNhNDdmNjQ0NjNhNjMyNGI3Zjg3NzlmNDM0MzkxYWE0Ny4uMTM0NGI5YWU2MTQyNGVi
MTM0NzdiMWJkNjI1NjgwMjMzNTFkYjZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoY29uc3QgRm9udCYg
Zm9udCkKICAgICB7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID4gMTA4MAorI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCiAgICAgICAgIGlmICghZm9u
dC5pc1ByaW50ZXJGb250KCkpCiAgICAgICAgICAgICByZXR1cm4gIWZvbnQudHlwZXNldHRpbmdG
ZWF0dXJlcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbC5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BVlRyYWNrUHJpdmF0ZUFWRk9iakNJ
bXBsLm1tCmluZGV4IDE2ZDA4MTE3NmQ3ODkxNTllNGE3MjhkNDc0OWI0MWI1Mzk5MzI3OTYuLjll
NDU1YjRlOTIwMDNmY2UyNmY0YjQwNWMyZjAzYjg5Yzk3MmFkZjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BVlRyYWNrUHJpdmF0ZUFW
Rk9iakNJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9BVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsLm1tCkBAIC0xMTUsNyArMTE1LDcgQEAg
QXRvbWljU3RyaW5nIEFWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGw6OmxhYmVsKCkgY29uc3QKICAg
ICAgICAgcmV0dXJuIGVtcHR5QXRvbTsKIAogICAgIC8vIElmIHBvc3NpYmxlLCByZXR1cm4gYSB0
aXRsZSBpbiBvbmUgb2YgdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2VzLgotI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAorI2lmIFBMQVRGT1JNKElPUykgfHwg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAgICAgTlNBcnJheSAqdGl0
bGVzRm9yUHJlZmVycmVkTGFuZ3VhZ2VzID0gW0FWTWV0YWRhdGFJdGVtIG1ldGFkYXRhSXRlbXNG
cm9tQXJyYXk6dGl0bGVzIGZpbHRlcmVkQW5kU29ydGVkQWNjb3JkaW5nVG9QcmVmZXJyZWRMYW5n
dWFnZXM6W05TTG9jYWxlIHByZWZlcnJlZExhbmd1YWdlc11dOwogI2Vsc2UKICAgICBOU0FycmF5
ICp0aXRsZXNGb3JQcmVmZXJyZWRMYW5ndWFnZXMgPSBbQVZNZXRhZGF0YUl0ZW0gbWV0YWRhdGFJ
dGVtc0Zyb21BcnJheTp0aXRsZXMgd2l0aExvY2FsZTpbTlNMb2NhbGUgY3VycmVudExvY2FsZV1d
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMubW0KaW5kZXggYTYzZWQ2NzVkMDU2MmI1MDM2Y2IyMTczOGI3
NTdjMjU5M2I1NWE4Zi4uOTk0ODZkN2ExNDZmZGJlYWM2ZmQxOGNhZWZjZGVjZTlmMjZjZDkxMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCkBAIC02Miw4ICs2MiwxMiBAQAogI2ltcG9ydCA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0aW9uLmg+
Ci0jaW1wb3J0IDxDb3JlTWVkaWEvQ29yZU1lZGlhLmg+CisjaWYgUExBVEZPUk0oSU9TKQorI2lt
cG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgorI2Vsc2UKICNpbXBvcnQgPFF1YXJ0ekNvcmUv
Q29yZUltYWdlLmg+CisjZW5kaWYKKyNpbXBvcnQgPENvcmVNZWRpYS9Db3JlTWVkaWEuaD4KIAog
I2lmIFVTRShWSURFT1RPT0xCT1gpCiAjaW1wb3J0IDxDb3JlVmlkZW8vQ29yZVZpZGVvLmg+CkBA
IC03NzksNyArNzgzLDcgQEAgZG91YmxlIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OnBsYXRmb3JtTWF4VGltZVNlZWthYmxlKCkgY29uc3QKIAogZmxvYXQgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1NYXhUaW1lTG9hZGVkKCkgY29uc3QKIHsK
LSNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0g
MTA4MAorI2lmICFQTEFURk9STShJT1MpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPD0gMTA4MAogICAgIC8vIEFWRm91bmRhdGlvbiBvbiBNb3VudGFpbiBMaW9uIHdpbGwgb2Nj
YXNpb25hbGx5IG5vdCBzZW5kIGEgS1ZPIG5vdGlmaWNhdGlvbgogICAgIC8vIHdoZW4gbG9hZGVk
VGltZVJhbmdlcyBjaGFuZ2VzIHdoZW4gdGhlcmUgaXMgbm8gdmlkZW8gb3V0cHV0LiBJbiB0aGF0
IGNhc2UKICAgICAvLyB1cGRhdGUgdGhlIGNhY2hlZCB2YWx1ZSBleHBsaWNpdGx5LgpAQCAtMTIz
Miw2ICsxMjM2LDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
c2l6ZUNoYW5nZWQoKQogICAgIHNldE5hdHVyYWxTaXplKEludFNpemUobmF0dXJhbFNpemUpKTsK
IH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIGlPUyBpbiBX
ZWJLaXQgU3lzdGVtIEludGVyZmFjZS4KK3N0YXRpYyBpbmxpbmUgTlNVUkwgKndrQVZBc3NldFJl
c29sdmVkVVJMKEFWQXNzZXQqKQoreworICAgIHJldHVybiBuaWw7Cit9CisjZW5kaWYKKwogYm9v
bCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpoYXNTaW5nbGVTZWN1cml0eU9y
aWdpbigpIGNvbnN0IAogewogICAgIGlmICghbV9hdkFzc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250QmxhY2tCZXJyeS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRCbGFja0Jl
cnJ5LmNwcAppbmRleCBlOTRjNzg3YzZjYTAxMTE1YzQ1YTkzNjk4MmMwNjQ1ZDM0NWZmOTE4Li41
YTZkYTE3ZmFjZjExMzk4NDUzOGQwMGRlZTdkM2FkYjExMjQyOTFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRCbGFja0JlcnJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRC
bGFja0JlcnJ5LmNwcApAQCAtMzgsMTAgKzM4LDEwIEBAIHN0YXRpYyBpbmxpbmUgRlNfRklYRUQg
RmxvYXRUb0ZTRml4ZWQoZmxvYXQgbikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RlNfRklYRUQ+KG4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIGlmICgh
cnVuLmxlbmd0aCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAwOwogCiAgICAg
R2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMs
IHJ1bik7CkBAIC00OSw4ICs0OSwxMCBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRgogICAgIGlm
ICghc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikpCiAgICAgICAgIHJldHVybjsKICAgICBGbG9h
dFBvaW50IGFkanVzdGVkUG9pbnQgPSBzaGFwZXIuYWRqdXN0U3RhcnRQb2ludChwb2ludCk7Cisg
ICAgZmxvYXQgc3RhcnRYID0gYWRqdXN0ZWRQb2ludC54KCk7CiAKICAgICBkcmF3R2x5cGhCdWZm
ZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgYWRqdXN0ZWRQb2ludCk7CisgICAgcmV0dXJu
IGFkanVzdGVkUG9pbnQueCgpIC0gc3RhcnRYOwogfQogCiBmbG9hdCBGb250OjpmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIC8qIGZhbGxiYWNrRm9udHMgKi8sIEdseXBoT3ZlcmZsb3cqIC8qIGdseXBoT3Zl
cmZsb3cgKi8pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCA2MjU5ZDMyYTQxM2U1M2I5Y2M2Y2Fm
ZDY5MWVjY2M0NGY1ZWVkZjAzLi5mZjU0MTEyMGYzNTYzZWMxZDRjYzU5M2YyN2NjYjlhY2VkOGYx
MTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTQ3LDYgKzQ3LDEwIEBACiAjaW5jbHVkZSA8d3RmL1Rl
bXBvcmFyeUNoYW5nZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYg
UExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgorCiAjaWYg
UExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllck1hYy5oIgogI2luY2x1ZGUg
IldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKQEAgLTYxLDcgKzY1LDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIC8vIFRoZSB0aHJlc2hvbGQgd2lkdGggb3IgaGVpZ2h0IGFib3ZlIHdoaWNoIGEg
dGlsZWQgbGF5ZXIgd2lsbCBiZSB1c2VkLiBUaGlzIHNob3VsZCBiZQogLy8gbGFyZ2UgZW5vdWdo
IHRvIGF2b2lkIHRpbGVkIGxheWVycyBmb3IgbW9zdCBHcmFwaGljc0xheWVycywgYnV0IGxlc3Mg
dGhhbiB0aGUgT3BlbkdMCiAvLyB0ZXh0dXJlIHNpemUgbGltaXQgb24gYWxsIHN1cHBvcnRlZCBo
YXJkd2FyZS4KKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgY29uc3QgaW50IGNNYXhQaXhlbERp
bWVuc2lvbiA9IDEyODA7CisjZWxzZQogc3RhdGljIGNvbnN0IGludCBjTWF4UGl4ZWxEaW1lbnNp
b24gPSAyMDAwOworI2VuZGlmCiAKIC8vIERlcml2ZWQgZW1waXJpY2FsbHk6IDxyZGFyOi8vcHJv
YmxlbS8xMzQwMTg2MT4KIHN0YXRpYyBjb25zdCBpbnQgY01heExheWVyVHJlZURlcHRoID0gMjUw
OwpAQCAtMjgyLDcgKzI5MCw3IEBAIHN0YXRpYyBmbG9hdCBtYXhTY2FsZUZyb21UcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCiBzdGF0aWMgaW5saW5lIGJvb2wgc3VwcG9y
dHNBY2NlbGVyYXRlZEZpbHRlckFuaW1hdGlvbnMoKQogewogLy8gPHJkYXI6Ly9wcm9ibGVtLzEw
OTA3MjUxPiAtIFdlYktpdDIgZG9lc24ndCBzdXBwb3J0IENBIGFuaW1hdGlvbnMgb2YgQ0kgZmls
dGVycyBvbiBMaW9uIGFuZCBiZWxvdwotI2lmIFBMQVRGT1JNKE1BQykgJiYgKFBMQVRGT1JNKElP
UykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwKQorI2lmIFBMQVRG
T1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDgwKQogICAgIHJldHVybiB0cnVlOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7
CkBAIC04NzEsNyArODc5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9J
bWFnZShJbWFnZSogaW1hZ2UpCiAgICAgICAgIG1fdW5jb3JyZWN0ZWRDb250ZW50c0ltYWdlID0g
bmV3SW1hZ2U7CiAgICAgICAgIG1fcGVuZGluZ0NvbnRlbnRzSW1hZ2UgPSBuZXdJbWFnZTsKIAot
I2lmICFQTEFURk9STShXSU4pCisjaWYgIVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKElPUykK
ICAgICAgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0ltYWdlR2V0Q29sb3JTcGFj
ZShtX3BlbmRpbmdDb250ZW50c0ltYWdlLmdldCgpKTsKIAogICAgICAgICBzdGF0aWMgQ0dDb2xv
clNwYWNlUmVmIGRldmljZVJHQiA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwpAQCAt
OTE2LDYgKzkyNCwxMyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb01lZGlh
KFBsYXRmb3JtTGF5ZXIqIG1lZGlhTGF5ZXIpCiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2Vk
KENvbnRlbnRzTWVkaWFMYXllckNoYW5nZWQpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorUGxh
dGZvcm1MYXllciogR3JhcGhpY3NMYXllckNBOjpjb250ZW50c0xheWVyRm9yTWVkaWEoKSBjb25z
dAoreworICAgIHJldHVybiBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID09IENvbnRlbnRzTGF5ZXJG
b3JNZWRpYSA/IG1fY29udGVudHNMYXllci0+cGxhdGZvcm1MYXllcigpIDogbnVsbHB0cjsKK30K
KyNlbmRpZgorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0
Zm9ybUxheWVyKiBjYW52YXNMYXllcikKIHsKICAgICBpZiAobV9jb250ZW50c0xheWVyICYmIGNh
bnZhc0xheWVyID09IG1fY29udGVudHNMYXllci0+cGxhdGZvcm1MYXllcigpKQpAQCAtMTEwMSw2
ICsxMTE2LDEwIEBAIEZsb2F0UmVjdCBHcmFwaGljc0xheWVyQ0E6OmNvbXB1dGVWaXNpYmxlUmVj
dChUcmFuc2Zvcm1TdGF0ZSYgc3RhdGUsIENvbXB1dGVWaXNpCiAgICAgYm9vbCBtYXBXYXNDbGFt
cGVkOwogICAgIEZsb2F0UmVjdCBjbGlwUmVjdEZvckNoaWxkcmVuID0gc3RhdGUubWFwcGVkUXVh
ZCgmbWFwV2FzQ2xhbXBlZCkuYm91bmRpbmdCb3goKTsKICAgICBGbG9hdFBvaW50IGJvdW5kc09y
aWdpbiA9IG1fYm91bmRzT3JpZ2luOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBVSUtpdCBt
YXkgYmUgY2hhbmdpbmcgbGF5ZXIgYm91bmRzIGJlaGluZCBvdXIgYmFjayBpbiBvdmVyZmxvdy1z
Y3JvbGwgbGF5ZXJzLCBzbyB1c2UgdGhlIGxheWVyJ3Mgb3JpZ2luLgorICAgIGJvdW5kc09yaWdp
biA9IG1fbGF5ZXItPmJvdW5kcygpLmxvY2F0aW9uKCk7CisjZW5kaWYKICAgICBjbGlwUmVjdEZv
ckNoaWxkcmVuLm1vdmUoYm91bmRzT3JpZ2luLngoKSwgYm91bmRzT3JpZ2luLnkoKSk7CiAgICAg
CiAgICAgRmxvYXRSZWN0IGNsaXBSZWN0Rm9yU2VsZihib3VuZHNPcmlnaW4sIG1fc2l6ZSk7CkBA
IC0xNDY4LDYgKzE0ODcsMTAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdlb21ldHJ5
KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG8KICAgICBGbG9hdFNp
emUgcGl4ZWxBbGlnbm1lbnRPZmZzZXQ7CiAgICAgY29tcHV0ZVBpeGVsQWxpZ25tZW50KHBhZ2VT
Y2FsZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSwgc2NhbGVkUG9zaXRpb24sIHNjYWxl
ZFNpemUsIHNjYWxlZEFuY2hvclBvaW50LCBwaXhlbEFsaWdubWVudE9mZnNldCk7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgbV9waXhlbEFsaWdubWVudE9mZnNldCA9IHBpeGVsQWxpZ25tZW50
T2Zmc2V0OworI2VuZGlmCisKICAgICBGbG9hdFJlY3QgYWRqdXN0ZWRCb3VuZHMobV9ib3VuZHNP
cmlnaW4gLSBwaXhlbEFsaWdubWVudE9mZnNldCwgc2NhbGVkU2l6ZSk7CiAKICAgICAvLyBVcGRh
dGUgcG9zaXRpb24uCkBAIC0xNDc3LDEwICsxNTAwLDIxIEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
Ojp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvCiAgICAgaWYgKG1fc3RydWN0dXJhbExheWVyKSB7CiAgICAgICAgIEZsb2F0UG9pbnQgbGF5
ZXJQb3NpdGlvbihtX3Bvc2l0aW9uLngoKSArIG1fYW5jaG9yUG9pbnQueCgpICogbV9zaXplLndp
ZHRoKCksIG1fcG9zaXRpb24ueSgpICsgbV9hbmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0
KCkpOwogICAgICAgICBGbG9hdFJlY3QgbGF5ZXJCb3VuZHMobV9ib3VuZHNPcmlnaW4sIG1fc2l6
ZSk7Ci0gICAgICAgIAorCisjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAg
ICAgIC8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgdGhlIG1haW4gdGhyZWFkIGxvZ2ljIGludG8g
UGxhdGZvcm1DQUxheWVyLgorICAgICAgICBpZiAobWVkaWFMYXllck11c3RCZVVwZGF0ZWRPbk1h
aW5UaHJlYWQoKSAmJiBXZWJUaHJlYWRJc0N1cnJlbnQoKSkgeworICAgICAgICAgICAgbV9zdHJ1
Y3R1cmFsTGF5ZXItPnNldFBvc2l0aW9uT25NYWluVGhyZWFkKGxheWVyUG9zaXRpb24pOworICAg
ICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNldEJvdW5kc09uTWFpblRocmVhZChsYXllckJv
dW5kcyk7CisgICAgICAgICAgICBtX3N0cnVjdHVyYWxMYXllci0+c2V0QW5jaG9yUG9pbnRPbk1h
aW5UaHJlYWQobV9hbmNob3JQb2ludCk7CisgICAgICAgIH0gZWxzZSB7CisjZW5kaWYKICAgICAg
ICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNldFBvc2l0aW9uKGxheWVyUG9zaXRpb24pOwogICAgICAg
ICBtX3N0cnVjdHVyYWxMYXllci0+c2V0Qm91bmRzKGxheWVyQm91bmRzKTsKICAgICAgICAgbV9z
dHJ1Y3R1cmFsTGF5ZXItPnNldEFuY2hvclBvaW50KG1fYW5jaG9yUG9pbnQpOworI2lmIEVOQUJM
RShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorICAgICAgICB9CisjZW5kaWYKIAogICAgICAgICBp
ZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX3N0cnVjdHVyYWxMYXllckNsb25lcy5nZXQo
KSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xv
bmVNYXAtPmVuZCgpOwpAQCAtMTUwNCwxMCArMTUzOCwyMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50
JiBwbwogICAgICAgICBzY2FsZWRBbmNob3JQb2ludCA9IEZsb2F0UG9pbnQoMC41ZiwgMC41Zik7
CiAgICAgICAgIGFkanVzdGVkUG9zaXRpb24gPSBGbG9hdFBvaW50KHNjYWxlZEFuY2hvclBvaW50
LngoKSAqIHNjYWxlZFNpemUud2lkdGgoKSAtIHBpeGVsQWxpZ25tZW50T2Zmc2V0LndpZHRoKCks
IHNjYWxlZEFuY2hvclBvaW50LnkoKSAqIHNjYWxlZFNpemUuaGVpZ2h0KCkgLSBwaXhlbEFsaWdu
bWVudE9mZnNldC5oZWlnaHQoKSk7CiAgICAgfQotICAgIAorCisjaWYgRU5BQkxFKFBMVUdJTl9Q
Uk9YWV9GT1JfVklERU8pCisgICAgLy8gRklYTUU6IENvbnNpZGVyIG1vdmluZyB0aGUgbWFpbiB0
aHJlYWQgbG9naWMgaW50byBQbGF0Zm9ybUNBTGF5ZXIuCisgICAgaWYgKG1lZGlhTGF5ZXJNdXN0
QmVVcGRhdGVkT25NYWluVGhyZWFkKCkgJiYgV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKKyAgICAg
ICAgbV9sYXllci0+c2V0UG9zaXRpb25Pbk1haW5UaHJlYWQoYWRqdXN0ZWRQb3NpdGlvbik7Cisg
ICAgICAgIG1fbGF5ZXItPnNldEJvdW5kc09uTWFpblRocmVhZChhZGp1c3RlZEJvdW5kcyk7Cisg
ICAgICAgIG1fbGF5ZXItPnNldEFuY2hvclBvaW50T25NYWluVGhyZWFkKHNjYWxlZEFuY2hvclBv
aW50KTsKKyAgICB9IGVsc2UgeworI2VuZGlmCiAgICAgbV9sYXllci0+c2V0UG9zaXRpb24oYWRq
dXN0ZWRQb3NpdGlvbik7CiAgICAgbV9sYXllci0+c2V0Qm91bmRzKGFkanVzdGVkQm91bmRzKTsK
ICAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludChzY2FsZWRBbmNob3JQb2ludCk7CisjaWYgRU5B
QkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAgfQorI2VuZGlmCiAKICAgICBpZiAoTGF5
ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgIExh
eWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKQEAgLTE2
NzgsNyArMTcyMywxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExh
eWVyKFN0cnVjdHVyYWxMYXllclB1cnBvc2UgcHVycG9zZSkKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIAorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFJlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+IG9sZFByaW1hcnlMYXllciA9IG1fc3RydWN0dXJhbExheWVyID8gbV9zdHJ1
Y3R1cmFsTGF5ZXIuZ2V0KCkgOiBtX2xheWVyLmdldCgpOworI2VuZGlmCisKICAgICBib29sIHN0
cnVjdHVyYWxMYXllckNoYW5nZWQgPSBmYWxzZTsKICAgICAKICAgICBpZiAocHVycG9zZSA9PSBT
dHJ1Y3R1cmFsTGF5ZXJGb3JQcmVzZXJ2ZXMzRCkgewpAQCAtMTk3Nyw4ICsyMDI2LDE4IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3RzKCkKICAgICBpZiAoZ2FpbmVk
T3JMb3N0Q2xpcHBpbmdMYXllcikKICAgICAgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoRG9udFNj
aGVkdWxlRmx1c2gpOwogCisjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAg
Ly8gRklYTUU6IENvbnNpZGVyIG1vdmluZyB0aGUgbWFpbiB0aHJlYWQgbG9naWMgaW50byBQbGF0
Zm9ybUNBTGF5ZXIuCisgICAgaWYgKG1lZGlhTGF5ZXJNdXN0QmVVcGRhdGVkT25NYWluVGhyZWFk
KCkgJiYgV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLT5z
ZXRQb3NpdGlvbk9uTWFpblRocmVhZChjb250ZW50T3JpZ2luKTsKKyAgICAgICAgbV9jb250ZW50
c0xheWVyLT5zZXRCb3VuZHNPbk1haW5UaHJlYWQoY29udGVudEJvdW5kcyk7CisgICAgfSBlbHNl
IHsKKyNlbmRpZgogICAgIG1fY29udGVudHNMYXllci0+c2V0UG9zaXRpb24oY29udGVudE9yaWdp
bik7CiAgICAgbV9jb250ZW50c0xheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisjaWYg
RU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pIAorICAgIH0KKyNlbmRpZgogCiAgICAgaWYg
KG1fY29udGVudHNMYXllckNsb25lcykgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9jb250ZW50c0xheWVyQ2xvbmVzLT5lbmQoKTsKQEAgLTIzNjIsOCArMjQyMSwx
MSBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uc0Zyb21L
ZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZQogICAgIGJvb2wgaXNNYXRyaXhBbmltYXRpb24g
PSBsaXN0SW5kZXggPCAwOwogICAgIGludCBudW1BbmltYXRpb25zID0gaXNNYXRyaXhBbmltYXRp
b24gPyAxIDogb3BlcmF0aW9ucy0+c2l6ZSgpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJv
b2wgcmV2ZXJzZUFuaW1hdGlvbkxpc3QgPSBmYWxzZTsKKyNlbHNlCiAgICAgYm9vbCByZXZlcnNl
QW5pbWF0aW9uTGlzdCA9IHRydWU7Ci0jaWYgIVBMQVRGT1JNKElPUykgJiYgIVBMQVRGT1JNKFdJ
TikKKyNpZiAhUExBVEZPUk0oV0lOKQogICAgICAgICAvLyBPbGQgdmVyc2lvbnMgb2YgQ29yZSBB
bmltYXRpb24gYXBwbHkgYW5pbWF0aW9ucyBpbiByZXZlcnNlIG9yZGVyICg8cmRhcjovL3Byb2Js
ZW0vNzA5NTYzOD4pIHNvIHdlIG5lZWQgdG8gZmxpcCB0aGUgbGlzdC4KICAgICAgICAgLy8gdG8g
YmUgbm9uLWFkZGl0aXZlLiBGb3IgYmluYXJ5IGNvbXBhdGliaWxpdHksIHRoZSBjdXJyZW50IHZl
cnNpb24gb2YgQ29yZSBBbmltYXRpb24gcHJlc2VydmVzIHRoaXMgYmVoYXZpb3IgZm9yIGFwcGxp
Y2F0aW9ucyBsaW5rZWQKICAgICAgICAgLy8gb24gb3IgYmVmb3JlIFNub3cgTGVvcGFyZC4KQEAg
LTIzNzMsNiArMjQzNSw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpjcmVhdGVUcmFuc2Zvcm1B
bmltYXRpb25zRnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlCiAgICAgICAgIGlmICgh
ZXhlY3V0YWJsZVdhc0xpbmtlZE9uT3JCZWZvcmVTbm93TGVvcGFyZCkKICAgICAgICAgICAgIHJl
dmVyc2VBbmltYXRpb25MaXN0ID0gZmFsc2U7CiAjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCiAgICAgaWYgKHJldmVyc2VBbmltYXRpb25MaXN0KSB7CiAgICAgICAgIGZvciAoaW50IGFu
aW1hdGlvbkluZGV4ID0gbnVtQW5pbWF0aW9ucyAtIDE7IGFuaW1hdGlvbkluZGV4ID49IDA7IC0t
YW5pbWF0aW9uSW5kZXgpIHsKICAgICAgICAgICAgIGlmICghYXBwZW5kVG9VbmNvbW1pdHRlZEFu
aW1hdGlvbnModmFsdWVMaXN0LCBvcGVyYXRpb25zLCBhbmltYXRpb24sIGFuaW1hdGlvbk5hbWUs
IGJveFNpemUsIGFuaW1hdGlvbkluZGV4LCB0aW1lT2Zmc2V0LCBpc01hdHJpeEFuaW1hdGlvbikp
IHsKQEAgLTMwMzIsNyArMzA5NSw5IEBAIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0ZXNPcmllbnRhdGlvbiBHcmFwaGljc0xheWVyQ0E6OmRlZmF1bHRDb250ZW50CiB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6c2V0dXBDb250ZW50c0xheWVyKFBsYXRmb3JtQ0FMYXllciogY29udGVu
dHNMYXllcikKIHsKICAgICAvLyBUdXJuIG9mZiBpbXBsaWNpdCBhbmltYXRpb25zIG9uIHRoZSBp
bm5lciBsYXllci4KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGNvbnRlbnRzTGF5ZXItPnNldE1h
c2tzVG9Cb3VuZHModHJ1ZSk7CisjZW5kaWYKIAogICAgIGlmIChkZWZhdWx0Q29udGVudHNPcmll
bnRhdGlvbigpID09IENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNCb3R0b21VcCkgewogICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBmbGlwcGVyKApAQCAtMzA1MSw2ICszMTE2LDEzIEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjpzZXR1cENvbnRlbnRzTGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBjb250
ZW50c0xheWVyKQogICAgIH0KIH0KIAorI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVP
KQorYm9vbCBHcmFwaGljc0xheWVyQ0E6Om1lZGlhTGF5ZXJNdXN0QmVVcGRhdGVkT25NYWluVGhy
ZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZW50c0xheWVyUHVycG9zZSA9PSBDb250
ZW50c0xheWVyRm9yTWVkaWE7Cit9CisjZW5kaWYKKwogUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5
ZXI+IEdyYXBoaWNzTGF5ZXJDQTo6ZmluZE9yTWFrZUNsb25lKENsb25lSUQgY2xvbmVJRCwgUGxh
dGZvcm1DQUxheWVyICpzb3VyY2VMYXllciwgTGF5ZXJNYXAqIGNsb25lcywgQ2xvbmVMZXZlbCBj
bG9uZUxldmVsKQogewogICAgIGlmICghc291cmNlTGF5ZXIpCkBAIC0zMzI3LDEyICszMzk5LDE0
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpjb21wdXRlUGl4ZWxBbGlnbm1lbnQoZmxvYXQgcGFn
ZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvCiAgICAgCiAgICAgLy8gQ29udmVydCBiYWNrIHRv
IGxheWVyIGNvb3JkaW5hdGVzLgogICAgIGFsaWduZWRCb3VuZHMuc2NhbGUoMSAvIHBhZ2VTY2Fs
ZUZhY3Rvcik7Ci0gICAgCisKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIEVwc2lsb24gaXMg
bmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IGJhY2tpbmcgc3RvcmUgc2l6ZSBjb21wdXRhdGlvbiBp
biBDQSwgd2hpY2ggaW52b2x2ZXMgaW50ZWdlciB0cnVuY2F0aW9uLAogICAgIC8vIHdpbGwgbWF0
Y2ggb3VyIGFsaWduZWQgYm91bmRzLgogICAgIGNvbnN0IGZsb2F0IGVwc2lsb24gPSAxZS01ZjsK
ICAgICBhbGlnbmVkQm91bmRzLmV4cGFuZChlcHNpbG9uLCBlcHNpbG9uKTsKLSAgICAKKyNlbmRp
ZgorCiAgICAgYWxpZ25tZW50T2Zmc2V0ID0gYmFzZVJlbGF0aXZlQm91bmRzLmxvY2F0aW9uKCkg
LSBhbGlnbmVkQm91bmRzLmxvY2F0aW9uKCk7CiAgICAgcG9zaXRpb24gPSBtX3Bvc2l0aW9uIC0g
YWxpZ25tZW50T2Zmc2V0OwogICAgIHNpemUgPSBhbGlnbmVkQm91bmRzLnNpemUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNB
LmgKaW5kZXggMWMzN2QwMGZkYzM0NTZhNmFkMDFlNzE0MzczNDBhNjFjZDBiNmE1Yy4uOWIyYjM2
NTgzNDdhZTliZGZhZGI0ODkxM2E5Yzk0MWU1ZGI2ZDU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKQEAgLTEyMSw2
ICsxMjEsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxh
eWVyKik7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogY29u
dGVudHNMYXllckZvck1lZGlhKCkgY29uc3QgT1ZFUlJJREU7CisjZW5kaWYKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKik7CiAgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IENvbG9yJik7CiAKQEAgLTEzNyw2ICsx
NDAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxheWVyRGlkRGlzcGxheShQbGF0Zm9y
bUxheWVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQo
Ym9vbCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgRmxvYXRTaXplIHBpeGVsQWxp
Z25tZW50T2Zmc2V0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9waXhlbEFsaWdubWVudE9m
ZnNldDsgfQorI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9y
Q2hhbmdlZCgpOwogCiAgICAgc3RydWN0IENvbW1pdFN0YXRlIHsKQEAgLTI1Niw2ICsyNjIsMTAg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHNldHVwQ29udGVudHNMYXllcihQbGF0Zm9ybUNBTGF5ZXIq
KTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRzTGF5ZXIuZ2V0KCk7IH0KIAorI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJ
REVPKQorICAgIGJvb2wgbWVkaWFMYXllck11c3RCZVVwZGF0ZWRPbk1haW5UaHJlYWQoKSBjb25z
dDsKKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBo
aWNzTGF5ZXIqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXREZWJ1Z0JvcmRlckluZm8oQ29sb3Im
LCBmbG9hdCYgd2lkdGgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmgKaW5kZXggMjljY2VmNDdkMDI4YjM0
OWI2NGFlYTQzNWE2ZDI1Njg5MjlmODcwOC4uY2RhNzJjZWY3NDA3NTdkNWU1NDMzNjA5ZDJkYjM5
ZDMxMzQwZjdjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBRmlsdGVycy5oCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAi
UGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAorI2lmIFBMQVRGT1JNKElPUykgfHwg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAjZGVmaW5lIFVTRV9DQV9G
SUxURVJTIDEKICNlbHNlCiAjZGVmaW5lIFVTRV9DQV9GSUxURVJTIDAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKaW5kZXgg
ZmI3ZTYxMDFmNjcyNGY2NjkwNDM2MzEzYjQ4OGExYzE0MDZiYzQyMS4uMmE0NmJkNjY0MmY4NTlm
NThhMjNmYTI1NDhhYWI0YTNjMDMzMDA4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKQEAgLTIwNiw2ICsyMDYsMTQg
QEAgcHVibGljOgogI2VuZGlmIC8vIE5ERUJVRwogI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIGlzV2ViTGF5ZXIoKTsKKyAgICB2b2lkIHNldEJv
dW5kc09uTWFpblRocmVhZChDR1JlY3QpOworICAgIHZvaWQgc2V0UG9zaXRpb25Pbk1haW5UaHJl
YWQoQ0dQb2ludCk7CisgICAgdm9pZCBzZXRBbmNob3JQb2ludE9uTWFpblRocmVhZChGbG9hdFBv
aW50M0QpOworICAgIHZvaWQgc2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYpOworI2VuZGlmCisK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGVDb21wYXRpYmxl
TGF5ZXIoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CiAKICNp
ZiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAKaW5kZXgg
MTQ2MmQ1ZTNiNDdhNGRkNmIyMTgzOTQ2OTZiZTIxNWIyZjY4ODhmYy4uYmZjM2U1YWY2YzMwNmZi
ZDVlY2E2ODEwYzNiMDQ3MTE5OGVhYzcwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllckZsdXNoU2NoZWR1bGVy
TWFjLmNwcApAQCAtMzEsMTEgKzMxLDMxIEBACiAKICNpbmNsdWRlIDx3dGYvQXV0b2RyYWluZWRQ
b29sLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzSU9TLmgiCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZCdW5kbGUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1dlYkNvcmVUaHJlYWQuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBjb25zdCBDRkluZGV4IENvcmVBbmltYXRpb25SdW5Mb29wT3JkZXIgPSAy
MDAwMDAwOwogc3RhdGljIGNvbnN0IENGSW5kZXggTGF5ZXJGbHVzaFJ1bkxvb3BPcmRlciA9IENv
cmVBbmltYXRpb25SdW5Mb29wT3JkZXIgLSAxOwogCitzdGF0aWMgQ0ZSdW5Mb29wUmVmIGN1cnJl
bnRSdW5Mb29wKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gQSByYWNlIGNvbmRpdGlv
biBkdXJpbmcgV2ViVmlldyBkZWFsbG9jYXRpb24gY2FuIGxlYWQgdG8gYSBjcmFzaCBpZiB0aGUg
bGF5ZXIgc3luYyBydW4gbG9vcAorICAgIC8vIG9ic2VydmVyIGlzIGFkZGVkIHRvIHRoZSBtYWlu
IHJ1biBsb29wIDxyZGFyOi8vcHJvYmxlbS85Nzk4NTUwPi4gSG93ZXZlciwgZm9yIHJlc3BvbnNp
dmVuZXNzLAorICAgIC8vIHdlIHN0aWxsIGFsbG93IHRoaXMsIHNlZSA8cmRhcjovL3Byb2JsZW0v
NzQwMzMyOD4uIFNpbmNlIHRoZSByYWNlIGNvbmRpdGlvbiBhbmQgc3Vic2VxdWVudAorICAgIC8v
IGNyYXNoIGFyZSBlc3BlY2lhbGx5IHRyb3VibGVzb21lIGZvciBpQm9va3MsIHdlIG5ldmVyIGFs
bG93IHRoZSBvYnNlcnZlciB0byBiZSBhZGRlZCB0byB0aGUKKyAgICAvLyBtYWluIHJ1biBsb29w
IGluIGlCb29rcy4KKyAgICBpZiAoYXBwbGljYXRpb25Jc0lCb29rc09uSU9TKCkpCisgICAgICAg
IHJldHVybiBXZWJUaHJlYWRSdW5Mb29wKCk7CisjZW5kaWYKKyAgICByZXR1cm4gQ0ZSdW5Mb29w
R2V0Q3VycmVudCgpOworfQorCiBMYXllckZsdXNoU2NoZWR1bGVyOjpMYXllckZsdXNoU2NoZWR1
bGVyKExheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQqIGNsaWVudCkKICAgICA6IG1faXNTdXNwZW5k
ZWQoZmFsc2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCkBAIC02OCwxMCArODgsMTAgQEAgdm9p
ZCBMYXllckZsdXNoU2NoZWR1bGVyOjpzY2hlZHVsZSgpCiAgICAgaWYgKG1faXNTdXNwZW5kZWQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIENGUnVuTG9vcFJlZiBjdXJyZW50UnVuTG9vcCA9IENG
UnVuTG9vcEdldEN1cnJlbnQoKTsKKyAgICBDRlJ1bkxvb3BSZWYgcnVuTG9vcCA9IGN1cnJlbnRS
dW5Mb29wKCk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2Ugd2FrZSB1cCB0aGUgbG9vcCBvciB0aGUg
b2JzZXJ2ZXIgY291bGQgYmUgZGVsYXllZCB1bnRpbCBzb21lIG90aGVyIHNvdXJjZSBmaXJlcy4K
LSAgICBDRlJ1bkxvb3BXYWtlVXAoY3VycmVudFJ1bkxvb3ApOworICAgIENGUnVuTG9vcFdha2VV
cChydW5Mb29wKTsKIAogICAgIGlmIChtX3J1bkxvb3BPYnNlcnZlcikKICAgICAgICAgcmV0dXJu
OwpAQCAtNzksNyArOTksNyBAQCB2b2lkIExheWVyRmx1c2hTY2hlZHVsZXI6OnNjaGVkdWxlKCkK
ICAgICBDRlJ1bkxvb3BPYnNlcnZlckNvbnRleHQgY29udGV4dCA9IHsgMCwgdGhpcywgMCwgMCwg
MCB9OwogICAgIG1fcnVuTG9vcE9ic2VydmVyID0gYWRvcHRDRihDRlJ1bkxvb3BPYnNlcnZlckNy
ZWF0ZSgwLCBrQ0ZSdW5Mb29wQmVmb3JlV2FpdGluZyB8IGtDRlJ1bkxvb3BFeGl0LCB0cnVlLCBM
YXllckZsdXNoUnVuTG9vcE9yZGVyLCBydW5Mb29wT2JzZXJ2ZXJDYWxsYmFjaywgJmNvbnRleHQp
KTsKIAotICAgIENGUnVuTG9vcEFkZE9ic2VydmVyKGN1cnJlbnRSdW5Mb29wLCBtX3J1bkxvb3BP
YnNlcnZlci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKKyAgICBDRlJ1bkxvb3BBZGRP
YnNlcnZlcihydW5Mb29wLCBtX3J1bkxvb3BPYnNlcnZlci5nZXQoKSwga0NGUnVuTG9vcENvbW1v
bk1vZGVzKTsKIH0KIAogdm9pZCBMYXllckZsdXNoU2NoZWR1bGVyOjppbnZhbGlkYXRlKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9y
bUNBTGF5ZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
UGxhdGZvcm1DQUxheWVyTWFjLm1tCmluZGV4IDMxYjQ4MjQ5MThjY2Y4YTFlMGE3Yzc2ZTU4NDIx
MGY5ZWU1ODY4NDkuLmQ5OWJjZDlkZjdiYTYxYjNhZjU5MTlkNzRmZDE4Yjg2NTVkY2I4OWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9y
bUNBTGF5ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQpAQCAtNDgsNiArNDgsMTMgQEAKICNpbXBvcnQgPHd0
Zi9DdXJyZW50VGltZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCisjaWYgUExBVEZP
Uk0oSU9TKQorI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgorI2ltcG9ydCAiV2ViVGlsZWRMYXll
ci5oIgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0dlb21ldHJ5Lmg+CisjaW1wb3J0IDxRdWFydHpD
b3JlL0NBVGlsZWRMYXllclByaXZhdGUuaD4KKyNlbmRpZgorCiBTT0ZUX0xJTktfRlJBTUVXT1JL
X09QVElPTkFMKEFWRm91bmRhdGlvbikKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFW
UGxheWVyTGF5ZXIpCiAKQEAgLTk5LDYgKzEwNiw5IEBAIHN0YXRpYyBkb3VibGUgbWVkaWFUaW1l
VG9DdXJyZW50VGltZShDRlRpbWVJbnRlcnZhbCB0KQogCiAtICh2b2lkKWFuaW1hdGlvbkRpZFN0
YXJ0OihDQUFuaW1hdGlvbiAqKWFuaW1hdGlvbgogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBX
ZWJUaHJlYWRMb2NrKCk7CisjZW5kaWYKICAgICAvLyBoYXNOb25aZXJvQmVnaW5UaW1lIGlzIHN0
b3JlZCBpbiBhIGtleSBpbiB0aGUgYW5pbWF0aW9uCiAgICAgYm9vbCBoYXNOb25aZXJvQmVnaW5U
aW1lID0gW1thbmltYXRpb24gdmFsdWVGb3JLZXk6V0tOb25aZXJvQmVnaW5UaW1lRmxhZ10gYm9v
bFZhbHVlXTsKICAgICBDRlRpbWVJbnRlcnZhbCBzdGFydFRpbWU7CkBAIC03MjYsNiArNzM2LDE2
IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHZhbHVl
KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgp
IHNldENvbnRlbnRzU2NhbGU6dmFsdWVdOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBbbV9sYXll
ci5nZXQoKSBzZXRSYXN0ZXJpemF0aW9uU2NhbGU6dmFsdWVdOworCisgICAgaWYgKG1fbGF5ZXJU
eXBlID09IExheWVyVHlwZVdlYlRpbGVkTGF5ZXIpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGlu
dmFsaWRhdGUgYWxsIHRoZSB0aWxlcyBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCBzdGFsZSB0aWxl
cyB3aXRoIHRoZSB3cm9uZyBzY2FsZSBpbiB0aGUgd3JvbmcgcGxhY2UsCisgICAgICAgIC8vIHNl
ZSA8cmRhcjovL3Byb2JsZW0vOTQzNDc2NT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAg
IHN0YXRpYyBOU0RpY3Rpb25hcnkgKm9wdGlvbnNEaWN0aW9uYXJ5ID0gW1tOU0RpY3Rpb25hcnkg
YWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllF
U10sIGtDQVRpbGVkTGF5ZXJSZW1vdmVJbW1lZGlhdGVseSwgbmlsXTsKKyAgICAgICAgWyhDQVRp
bGVkTGF5ZXIgKiltX2xheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheUluUmVjdDpbbV9sYXllci5n
ZXQoKSBib3VuZHNdIGxldmVsT2ZEZXRhaWw6MCBvcHRpb25zOm9wdGlvbnNEaWN0aW9uYXJ5XTsK
KyAgICB9CisjZW5kaWYKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKQEAgLTc3
MCw2ICs3OTAsNTggQEAgVGlsZWRCYWNraW5nKiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnRpbGVkQmFj
a2luZygpCiAgICAgcmV0dXJuIFt0aWxlZEJhY2tpbmdMYXllciB0aWxlZEJhY2tpbmddOwogfQog
CisjaWYgUExBVEZPUk0oSU9TKQorYm9vbCBQbGF0Zm9ybUNBTGF5ZXI6OmlzV2ViTGF5ZXIoKQor
eworICAgIEJPT0wgcmVzdWx0ID0gTk87CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
CisgICAgcmVzdWx0ID0gW21fbGF5ZXIuZ2V0KCkgaXNLaW5kT2ZDbGFzczpbV2ViTGF5ZXIgc2Vs
Zl1dOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm91bmRzT25NYWluVGhyZWFkKENHUmVjdCBi
b3VuZHMpCit7CisgICAgQ0FMYXllciAqbGF5ZXIgPSBtX2xheWVyLmdldCgpOworICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUworICAgICAgICBbbGF5ZXIgc2V0Qm91bmRzOmJvdW5kc107Cisg
ICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICB9KTsKK30KKwordm9pZCBQbGF0
Zm9ybUNBTGF5ZXI6OnNldFBvc2l0aW9uT25NYWluVGhyZWFkKENHUG9pbnQgcG9zaXRpb24pCit7
CisgICAgQ0FMYXllciAqbGF5ZXIgPSBtX2xheWVyLmdldCgpOworICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUworICAgICAgICBbbGF5ZXIgc2V0UG9zaXRpb246cG9zaXRpb25dOworICAgICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyOjpzZXRBbmNob3JQb2ludE9uTWFpblRocmVhZChGbG9hdFBvaW50M0QgdmFsdWUpCit7
CisgICAgQ0FMYXllciAqbGF5ZXIgPSBtX2xheWVyLmdldCgpOworICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUworICAgICAgICBbbGF5ZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UodmFs
dWUueCgpLCB2YWx1ZS55KCkpXTsKKyAgICAgICAgW2xheWVyIHNldEFuY2hvclBvaW50Wjp2YWx1
ZS56KCldOworICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfSk7Cit9CisK
K3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiB0aWxlU2l6
ZSkKK3sKKyAgICBpZiAobV9sYXllclR5cGUgIT0gTGF5ZXJUeXBlV2ViVGlsZWRMYXllcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW3N0
YXRpY19jYXN0PFdlYlRpbGVkTGF5ZXIqPihtX2xheWVyLmdldCgpKSBzZXRUaWxlU2l6ZTp0aWxl
U2l6ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKKwogUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllck1h
Yzo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVy
VHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBjbGllbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKGxheWVyVHlwZSwgY2xpZW50KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxl
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJv
bGxlci5tbQppbmRleCAwMmZiOWY3OGI0MzhiNjdiZGFiMzNmODY1NjkzZjQ1NDAwZTljZGU0Li5l
YThlYjQzN2Y4NDE1MDU4NzYzY2QwYTZmMTdkMTVjNTA5MjFkMmQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvbnRyb2xsZXIubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVy
Lm1tCkBAIC0yOSw3ICsyOSw5IEBACiAjaW1wb3J0ICJJbnRSZWN0LmgiCiAjaW1wb3J0ICJQbGF0
Zm9ybUNBTGF5ZXIuaCIKICNpbXBvcnQgIlJlZ2lvbi5oIgorI2lmICFQTEFURk9STShJT1MpCiAj
aW1wb3J0ICJMYXllclBvb2wuaCIKKyNlbmRpZgogI2ltcG9ydCAiV2ViTGF5ZXIuaCIKICNpbXBv
cnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW1wb3J0IDx1dGlsaXR5PgpAQCAtMTY2LDYgKzE2OCwx
MSBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRUaWxlTmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IFRpbGVJbmRleCYgdGlsZUluZGV4LCBUaWxlSQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpwbGF0
Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxheWVy
LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmKQogeworI2lmIFBMQVRG
T1JNKElPUykKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRocmVhZExv
Y2soKTsKKyNlbmRpZgorCiAgICAgaWYgKHBsYXRmb3JtQ0FMYXllciA9PSBtX3RpbGVkU2Nyb2xs
aW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkpIHsKICAgICAgICAgZHJhd1RpbGVNYXBDb250ZW50cyhj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIt
PmJvdW5kcygpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjM3LDcgKzY0NCw5IEBAIHZvaWQgVGls
ZUNvbnRyb2xsZXI6OnJlbW92ZUFsbFRpbGVzKCkKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdGlsZXNUb1JlbW92ZS5zaXplKCk7ICsraSkgewogICAgICAgICBUaWxlSW5mbyB0aWxlSW5m
byA9IG1fdGlsZXMudGFrZSh0aWxlc1RvUmVtb3ZlW2ldKTsKKyNpZiAhUExBVEZPUk0oSU9TKQog
ICAgICAgICBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRkTGF5ZXIodGlsZUluZm8ubGF5ZXIp
OworI2VuZGlmCiAgICAgfQogfQogCkBAIC02NTUsNyArNjY0LDkgQEAgdm9pZCBUaWxlQ29udHJv
bGxlcjo6cmVtb3ZlQWxsU2Vjb25kYXJ5VGlsZXMoKQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFRpbGVJbmZvIHRpbGVJ
bmZvID0gbV90aWxlcy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pOworI2lmICFQTEFURk9STShJT1Mp
CiAgICAgICAgIExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5hZGRMYXllcih0aWxlSW5mby5sYXll
cik7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTY3NCw3ICs2ODUsOSBAQCB2b2lkIFRpbGVDb250
cm9sbGVyOjpyZW1vdmVUaWxlc0luQ29ob3J0KFRpbGVDb2hvcnQgY29ob3J0KQogCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IFRpbGVJbmZvIHRpbGVJbmZvID0gbV90aWxlcy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pOworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgICAgIExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5hZGRMYXll
cih0aWxlSW5mby5sYXllcik7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTgwNCw3ICs4MTcsOSBA
QCB2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZhbGlkYXRlVGlsZXMoVGlsZVZhbGlkYXRpb25Qb2xp
Y3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdAogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBz
aXplID0gdGlsZXNUb1JlbW92ZS5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAg
IFRpbGVJbmZvIHRpbGVJbmZvID0gbV90aWxlcy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pOworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRk
TGF5ZXIodGlsZUluZm8ubGF5ZXIpOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEw
ODAsNyArMTA5NSwxMSBAQCBpbnQgVGlsZUNvbnRyb2xsZXI6OnJpZ2h0TWFyZ2luV2lkdGgoKSBj
b25zdAogCiBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlVGls
ZUxheWVyKGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQogeworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBsYXllcjsKKyNlbHNlCiAgICAgUmVmUHRyPFBsYXRm
b3JtQ0FMYXllcj4gbGF5ZXIgPSBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+dGFrZUxheWVyV2l0
aFNpemUodGlsZVJlY3Quc2l6ZSgpKTsKKyNlbmRpZgogCiAgICAgaWYgKGxheWVyKSB7CiAgICAg
ICAgIG1fdGlsZVJlcGFpbnRDb3VudHMucmVtb3ZlKGxheWVyLmdldCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6
TkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHAKaW5kZXggOGQ1MDBmNGE1NTA1MGMwNTBiMTM5Y2FmMDZjZjQ2MTRiNzAx
YzdmYi4uMGM5NDBjNWQ2OWM3ZDkzNzRjMmQ5MDA4MzFmNDM5OGUxMDU0ODFkMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1
enpORy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9u
dENhaXJvSGFyZmJ1enpORy5jcHAKQEAgLTM3LDE0ICszNywxOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50LCBp
bnQpIGNvbnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQs
IGludCkgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBIYXJmQnV6
elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKLSAgICBpZiAoc2hhcGVyLnNoYXBlKCZnbHlwaEJ1
ZmZlcikpCi0gICAgICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVy
LCBwb2ludCk7Ci0gICAgZWxzZQotICAgICAgICBMT0dfRVJST1IoIlNoYXBlciBjb3VsZG4ndCBz
aGFwZSBnbHlwaEJ1ZmZlci4iKTsKKyAgICBpZiAoc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikp
IHsKKyAgICAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50ID0gcG9pbnQ7CisgICAgICAgIGZsb2F0
IHN0YXJ0WCA9IHN0YXJ0UG9pbnQueCgpOworICAgICAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4
dCwgcnVuLCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCk7CisgICAgICAgIHJldHVybiBzdGFydFBv
aW50LngoKSAtIHN0YXJ0WDsKKyAgICB9CisgICAgTE9HX0VSUk9SKCJTaGFwZXIgY291bGRuJ3Qg
c2hhcGUgZ2x5cGhCdWZmZXIuIik7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgRm9udDo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQg
Ki8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJr
ICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAv
KiB0byAqLykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKaW5kZXggMzZlOWYyZTA0MTYxZWYwYzEzYzY3NDU0Zjhm
YjBjZDIxOWNiNTgxZS4uMWU0YzAxMzU5MzUyM2ViZTY0MWI3OTY0OTYzMjZhNDIxNWIwMDRiNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1h
Z2VDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFw
SW1hZ2VDRy5jcHAKQEAgLTMyLDcgKzMyLDExIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
Q0cuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiU3ViaW1hZ2VDYWNo
ZVdpdGhUaW1lci5oIgorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25T
ZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9DR0NvbnRleHRQcml2YXRlLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC01Miw2ICs1NiwxMiBAQCBib29sIEZyYW1lRGF0
YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQogCiAgICAgbV9vcmllbnRhdGlvbiA9IERlZmF1
bHRJbWFnZU9yaWVudGF0aW9uOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIG1fZnJhbWVCeXRl
cyA9IDA7CisgICAgbV9zY2FsZSA9IDE7CisgICAgbV9oYXZlSW5mbyA9IGZhbHNlOworI2VuZGlm
CisKICAgICBpZiAobV9mcmFtZSkgewogI2lmIENBQ0hFX1NVQklNQUdFUwogICAgICAgICBzdWJp
bWFnZUNhY2hlKCkuY2xlYXJJbWFnZShtX2ZyYW1lKTsKQEAgLTkwLDExICsxMDAsMjAgQEAgQml0
bWFwSW1hZ2U6OkJpdG1hcEltYWdlKENHSW1hZ2VSZWYgY2dJbWFnZSwgSW1hZ2VPYnNlcnZlciog
b2JzZXJ2ZXIpCiAgICAgLy8gU2V0IG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiB0byBiZSB0
aGUgc2FtZSBhcyBtX3NpemUgc28gaXQncyBub3QgMHgwLgogICAgIG1fc2l6ZVJlc3BlY3RpbmdP
cmllbnRhdGlvbiA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgbV9vcmlnaW5hbFNpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIG1fb3Jp
Z2luYWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsK
KyNlbmRpZgorCiAgICAgbV9mcmFtZXMuZ3JvdygxKTsKICAgICBtX2ZyYW1lc1swXS5tX2ZyYW1l
ID0gQ0dJbWFnZVJldGFpbihjZ0ltYWdlKTsKICAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0g
dHJ1ZTsKICAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7CiAKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgbV9mcmFtZXNbMF0ubV9zY2FsZSA9IDE7CisjZW5kaWYKKwogICAgIGNo
ZWNrRm9yU29saWRDb2xvcigpOwogfQogCkBAIC0xMDgsMTAgKzEyNywyNCBAQCB2b2lkIEJpdG1h
cEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCisj
aWYgIVBMQVRGT1JNKElPUykKICAgICBDR0ltYWdlUmVmIGltYWdlID0gZnJhbWVBdEluZGV4KDAp
OwotICAgIAorI2Vsc2UKKyAgICAvLyBOb3RlLCBjaGVja0ZvclNvbGlkQ29sb3IoKSBtYXkgYmUg
Y2FsbGVkIGZyb20gZnJhbWVBdEluZGV4KCkuIE9uIGlPUyBmcmFtZUF0SW5kZXgoKSBnZXRzIHBh
c3NlZCBhIHNjYWxlSGludAorICAgIC8vIGFyZ3VtZW50IHdoaWNoIGl0IHVzZXMgdG8gdGVsbCBD
RyB0byBjcmVhdGUgYSBzY2FsZWQgZG93biBpbWFnZS4gU2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUg
c2NhbGVIaW50IGhlcmUsIGlmCisgICAgLy8gd2UgY2FsbCBmcmFtZUF0SW5kZXgoKSBhZ2Fpbiwg
d2Ugd291bGQgcGFzcyBpdCB0aGUgZGVmYXVsdCBzY2FsZSBvZiAxIGFuZCB3b3VsZCBlbmQgdXAg
cmVjcmVhdGluZyB0aGUgaW1hZ2UuCisgICAgLy8gU28gd2UgZG8gYSBxdWljayBjaGVjayBhbmQg
Y2FsbCBmcmFtZUF0SW5kZXgoMCkgb25seSBpZiB3ZSBoYXZlbid0IHlldCBjcmVhdGVkIGFuIGlt
YWdlLgorICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBudWxscHRyOworICAgIGlmIChtX2ZyYW1lcy5z
aXplKCkpCisgICAgICAgIGltYWdlID0gbV9mcmFtZXNbMF0ubV9mcmFtZTsKKworICAgIGlmICgh
aW1hZ2UpCisgICAgICAgIGltYWdlID0gZnJhbWVBdEluZGV4KDApOworI2VuZGlmCisKICAgICAv
LyBDdXJyZW50bHkgd2Ugb25seSBjaGVjayBmb3Igc29saWQgY29sb3IgaW4gdGhlIGltcG9ydGFu
dCBzcGVjaWFsIGNhc2Ugb2YgYSAxeDEgaW1hZ2UuCiAgICAgaWYgKGltYWdlICYmIENHSW1hZ2VH
ZXRXaWR0aChpbWFnZSkgPT0gMSAmJiBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSA9PSAxKSB7Cisj
aWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdC
QQogICAgICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBibWFwID0gYWRvcHRDRihDR0JpdG1h
cENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIGRldmljZVJHQkNv
bG9yU3BhY2VSZWYoKSwKICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7CkBAIC0xMjQsNiArMTU3LDIzIEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAgICAgICAgICAgICBtX3NvbGlkQ29s
b3IgPSBDb2xvcigwLCAwLCAwLCAwKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zb2xp
ZENvbG9yID0gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUg
LyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOworI2Vsc2UK
KyAgICAgICAgLy8gRklYTUU6IENhbiB3ZSBzaGFyZSBtb3JlIGNvZGUgd2l0aCB0aGUgTWFjIHBv
cnQ/IEZvcm1lcmx5IHRoZSBNYWMgcG9ydCBjcmVhdGVkIGEgZmxvYXRpbmcgcG9pbnQgYml0bWFw
IGNvbnRleHQsCisgICAgICAgIC8vIGJ1dCBzdWNoIGEgY29udGV4dCB3YXNuJ3Qgc3VwcG9ydCBv
biBpT1MgKHJkYXI6Ly9wcm9ibGVtLzUxMDY1MTQpLiBTbywgb24gaU9TIHdlIGNyZWF0ZWQgYW4g
aW50ZWdyYWwgYml0bWFwCisgICAgICAgIC8vIGNvbnRleHQuIFNpbmNlIDxodHRwczovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjM5Mzk+IHRoZSBNYWMgcG9ydCBjcmVhdGVzIGFuIGludGVn
cmFsIGJpdG1hcCBjb250ZXh0LgorICAgICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsWzRdID0gezAs
IDAsIDAsIDB9OyAvLyBSR0JBCisgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGJpdG1h
cCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2Yo
cGl4ZWwpLCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksCisgICAgICAgICAgICBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgaWYgKCFiaXRtYXApCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIEdyYXBoaWNzQ29udGV4dChiaXRtYXAuZ2V0KCkpLnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgQ0dSZWN0IGRlc3RpbmF0aW9u
UmVjdCA9IHsgezAsIDB9LCB7MSwgMX0gfTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJp
dG1hcC5nZXQoKSwgZGVzdGluYXRpb25SZWN0LCBpbWFnZSk7CisgICAgICAgIGlmICghcGl4ZWxb
M10pCisgICAgICAgICAgICBtX3NvbGlkQ29sb3IgPSBDb2xvcigwLCAwLCAwLCAwKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50
PihwaXhlbFswXSksIHN0YXRpY19jYXN0PGludD4ocGl4ZWxbMV0pLCBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVsWzJdKSwgc3RhdGljX2Nhc3Q8aW50PihwaXhlbFszXSkpOworI2VuZGlmCiAgICAgICAg
IG1faXNTb2xpZENvbG9yID0gdHJ1ZTsKICAgICB9CiB9CkBAIC0xNjIsOSArMjEyLDIxIEBAIFJl
dGFpblB0cjxDRkFycmF5UmVmPiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkKIAogdm9p
ZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRN
b2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCiB7CisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBzdGFydEFuaW1hdGlvbigpOwogCiAgICAgQ0dJbWFnZVJlZiBpbWFn
ZSA9IGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CisjZWxzZQorICAgIHN0YXJ0QW5pbWF0
aW9uKGZhbHNlKTsKKworICAgIENHUmVjdCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdCA9IENH
UmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRlc3RSZWN0LCBDR0NvbnRleHRHZXRDVE0oY3R4dC0+
cGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Cisg
ICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNv
bnRleHRzLgorICAgIGlmIChDR0NvbnRleHRHZXRUeXBlKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgp
KSA9PSBrQ0dDb250ZXh0VHlwZVBERikKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKGNvcHlVbnNj
YWxlZEZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpOworICAgIGVsc2UKKyAgICAgICAgaW1h
Z2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN0ZDo6bWluPGZsb2F0PigxLjBmLCBz
dGQ6Om1heCh0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLndpZHRoICAvIHNyY1JlY3Qu
d2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0
LmhlaWdodCgpKSkpOworI2VuZGlmCiAgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFy
bHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKICAgICAKQEAg
LTE3MywxOCArMjM1LDQxIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgZmxvYXQgc2NhbGUgPSBtX2ZyYW1l
c1ttX2N1cnJlbnRGcmFtZV0ubV9zY2FsZTsKKyNlbmRpZgogICAgIEZsb2F0U2l6ZSBzZWxmU2l6
ZSA9IGN1cnJlbnRGcmFtZVNpemUoKTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9u
OwogCiAgICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVz
cGVjdEltYWdlT3JpZW50YXRpb24pCiAgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRh
dGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGN0
eHQtPmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgc2VsZlNpemUsIHN0eWxlQ29sb3JTcGFj
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHNjYWxlLCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmll
bnRhdGlvbik7CisjZWxzZQogICAgIGN0eHQtPmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgc2VsZlNp
emUsIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIGNvbXBvc2l0ZU9wLCBibGVu
ZE1vZGUsIG9yaWVudGF0aW9uKTsKKyNlbmRpZgogCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkK
ICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQogCisjaWYgUExBVEZP
Uk0oSU9TKQorUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFt
ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNp
emUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUpCisgICAgICAgIGNhY2hlRnJhbWUoaW5k
ZXgsIDEpOworCisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX3NjYWxlID09IDEgJiYgIW1fc291
cmNlLmlzU3Vic2FtcGxlZCgpKQorICAgICAgICByZXR1cm4gQ0dJbWFnZVJldGFpbihtX2ZyYW1l
c1tpbmRleF0ubV9mcmFtZSk7CisKKyAgICByZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVBdElu
ZGV4KGluZGV4KTsKK30KKyNlbmRpZgorCiB9CiAKICNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCmluZGV4IGQ3NGI0
YjQ3MGM1YjQ5NmNmMzA2ZTYxNTEwM2I4YTA4MWQyYjAwYmIuLjkyMzY2ZTJhYmZjZWVjNDgxMzM5
M2U0N2I1MDcwZjYxOTliZDMwMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0NvbG9yQ0cuY3BwCkBAIC0zMSwxMCArMzEsMzggQEAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRp
b25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR0NvbG9yVHJhbnNmb3JtLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVH
cmFwaGljcy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNlbmRpZiAvLyAhUExB
VEZPUk0oSU9TKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShJT1MpCitD
R0NvbG9yUmVmIGNyZWF0ZUNHQ29sb3JXaXRoRGV2aWNlV2hpdGUoQ0dGbG9hdCB3aGl0ZSwgQ0dG
bG9hdCBhbHBoYSkKK3sKKyAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIGdyYXlTcGFjZSA9IENH
Q29sb3JTcGFjZUNyZWF0ZURldmljZUdyYXkoKTsKKyAgICBjb25zdCBDR0Zsb2F0IGNvbXBvbmVu
dHNbXSA9IHsgd2hpdGUsIGFscGhhIH07CisgICAgcmV0dXJuIENHQ29sb3JDcmVhdGUoZ3JheVNw
YWNlLCBjb21wb25lbnRzKTsKK30KKworc3RhdGljIENHQ29sb3JSZWYgY3JlYXRlQ0dDb2xvcldp
dGhEZXZpY2VSR0JBKENHQ29sb3JSZWYgc291cmNlQ29sb3IpCit7CisgICAgaWYgKCFzb3VyY2VD
b2xvciB8fCBDRkVxdWFsKENHQ29sb3JHZXRDb2xvclNwYWNlKHNvdXJjZUNvbG9yKSwgZGV2aWNl
UkdCQ29sb3JTcGFjZVJlZigpKSkKKyAgICAgICAgcmV0dXJuIENHQ29sb3JSZXRhaW4oc291cmNl
Q29sb3IpOworCisgICAgUmV0YWluUHRyPENHQ29sb3JUcmFuc2Zvcm1SZWY+IGNvbG9yVHJhbnNm
b3JtID0gYWRvcHRDRihDR0NvbG9yVHJhbnNmb3JtQ3JlYXRlKGRldmljZVJHQkNvbG9yU3BhY2VS
ZWYoKSwgbnVsbHB0cikpOworICAgIGlmICghY29sb3JUcmFuc2Zvcm0pCisgICAgICAgIHJldHVy
biBDR0NvbG9yUmV0YWluKHNvdXJjZUNvbG9yKTsKKworICAgIC8vIENHQ29sb3JUcmFuc2Zvcm1D
b252ZXJ0Q29sb3IoKSByZXR1cm5zIGEgKzEgcmV0YWluZWQgb2JqZWN0LgorICAgIHJldHVybiBD
R0NvbG9yVHJhbnNmb3JtQ29udmVydENvbG9yKGNvbG9yVHJhbnNmb3JtLmdldCgpLCBzb3VyY2VD
b2xvciwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQorCiBDb2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikKIHsKICAgICBpZiAoIWNvbG9y
KSB7CkBAIC00Myw4ICs3MSwxNyBAQCBDb2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgc2l6ZV90IG51
bUNvbXBvbmVudHMgPSBDR0NvbG9yR2V0TnVtYmVyT2ZDb21wb25lbnRzKGNvbG9yKTsKICAgICBj
b25zdCBDR0Zsb2F0KiBjb21wb25lbnRzID0gQ0dDb2xvckdldENvbXBvbmVudHMoY29sb3IpOwor
I2Vsc2UKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY29ycmVjdGVkQ29sb3IgPSBhZG9wdENG
KGNyZWF0ZUNHQ29sb3JXaXRoRGV2aWNlUkdCQShjb2xvcikpOworICAgIGlmICghY29ycmVjdGVk
Q29sb3IpCisgICAgICAgIGNvcnJlY3RlZENvbG9yID0gY29sb3I7CisKKyAgICBzaXplX3QgbnVt
Q29tcG9uZW50cyA9IENHQ29sb3JHZXROdW1iZXJPZkNvbXBvbmVudHMoY29ycmVjdGVkQ29sb3Iu
Z2V0KCkpOworICAgIGNvbnN0IENHRmxvYXQqIGNvbXBvbmVudHMgPSBDR0NvbG9yR2V0Q29tcG9u
ZW50cyhjb3JyZWN0ZWRDb2xvci5nZXQoKSk7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAog
ICAgIGZsb2F0IHIgPSAwOwogICAgIGZsb2F0IGcgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKaW5kZXggZjM3ZTA3ZjMx
OTg4OGUyNzVjNmY0NTkyYjI5YzE0MjdiOWQ2OGU1ZC4uMjUwZWQ1MDVkZmYyOWI5NTBmMmEwYTNm
MzFmY2IzY2VmNGE5Y2M1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9GbG9hdFBvaW50Q0cuY3BwCkBAIC0yOSw3ICsyOSwxMSBAQAogCiAjaWYgVVNF
KENHKQogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2Vz
L0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0Nv
cmVHcmFwaGljcy5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCmluZGV4
IDRlYTA4M2FlYTNmZWE1MjY0OTdkMWIxYTgwNDQwZGMyNmNjNWM1MzAuLjhhMGE1M2M2MWQyNjY3
ZWJmNGRjMGZkOWY0NDVlNWYzYzdmNjI3N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTI5LDcgKzI5LDExIEBACiAK
ICNpZiBVU0UoQ0cpCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9u
U2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3Jh
cGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVDRy5j
cHAKaW5kZXggMTRlMTRmYzJhMzk5ZGQxN2RiMTI1MjAyNjE0MTQ5MjlkMzZhOWY2MC4uNGYxZTEw
OGRlMzlhMGMwNTc2ZmY1MGZkM2NjNjljNWMxYjQ3MTgzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRTaXplQ0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcApAQCAtMjksNyArMjks
MTEgQEAKIAogI2lmIFVTRShDRykKIAorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBw
bGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YWRpZW50Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGll
bnRDRy5jcHAKaW5kZXggNDdkOWM3ZjYwOGJiMGFkMDQ1NGU5ZGZlMDUzNzcxOTM5OGE2OTgzMC4u
Mzg3MTBhMTczNTgwOWViZmJjZGJhYjczMzIzYTdkZWE1YmQ2MDE4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKQEAgLTI4LDcg
KzI4LDExIEBACiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggYTE5NzQ1ZTI4ZTI2NTIx
YmRmMDg0YzBkZGZjZDlkNjkyMjEwMTJkZS4uM2Q0ZDNhZjk2YTI2ZTg0OTZjMWMyNjQ5OTExMWU2
OWUwMWQ1Mjk3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtNTEsMTAgKzUxLDE3IEBACiAjaW5j
bHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2Vu
ZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4
dEdTdGF0ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjZW5kaWYKKworI2lmICFQTEFU
Rk9STShJT1MpCiBleHRlcm4gIkMiIHsKICAgICBDR19FWFRFUk4gdm9pZCBDR0NvbnRleHRTZXRD
VE0oQ0dDb250ZXh0UmVmLCBDR0FmZmluZVRyYW5zZm9ybSk7CiAgICAgQ0dfRVhURVJOIENHQWZm
aW5lVHJhbnNmb3JtIENHQ29udGV4dEdldEJhc2VDVE0oQ0dDb250ZXh0UmVmKTsKIH07CisjZW5k
aWYgLy8gIVBMQVRGT1JNKElPUykKIAogLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgdXNpbmcgZGVj
bGFyYXRpb24gc2hvdWxkIGJlIGluIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPi4KIHVzaW5nIFdURjo6
cGFpckludEhhc2g7CkBAIC04Miw2ICs4OSw5IEBAIENHQ29sb3JTcGFjZVJlZiBkZXZpY2VSR0JD
b2xvclNwYWNlUmVmKCkKIAogQ0dDb2xvclNwYWNlUmVmIHNSR0JDb2xvclNwYWNlUmVmKCkKIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKTsK
KyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAgICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBzUkdC
U3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQik7CiAj
aWYgUExBVEZPUk0oV0lOKQogICAgIC8vIE91dC1vZi1kYXRlIENHIGluc3RhbGxhdGlvbnMgd2ls
bCBub3QgaG9ub3Iga0NHQ29sb3JTcGFjZVNSR0IuIFRoaXMgbG9naWMgYXZvaWRzCkBAIC05Myw3
ICsxMDMsMTUgQEAgQ0dDb2xvclNwYWNlUmVmIHNSR0JDb2xvclNwYWNlUmVmKCkKICAgICByZXR1
cm4gc1JHQlNwYWNlOwogfQogCi0jaWYgUExBVEZPUk0oV0lOKQorI2lmIFBMQVRGT1JNKElPUykK
K3ZvaWQgc2V0U3Ryb2tlQW5kRmlsbENvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0NvbG9y
UmVmIGNvbG9yKQoreworICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRl
eHQsIGNvbG9yKTsKKyAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29udGV4dCwg
Y29sb3IpOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKworI2lmIFBMQVRGT1JNKFdJTikg
fHwgUExBVEZPUk0oSU9TKQogQ0dDb2xvclNwYWNlUmVmIGxpbmVhclJHQkNvbG9yU3BhY2VSZWYo
KQogewogICAgIC8vIEZJWE1FOiBXaW5kb3dzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBsaW5lYXIg
c1JHQiwgdGhpcyBpcyB0cmFja2VkIGJ5IGh0dHA6Ly93ZWJraXQub3JnL2IvODAwMDAuCkBAIC0x
MDEsMTEgKzExOSwyMCBAQCBDR0NvbG9yU3BhY2VSZWYgbGluZWFyUkdCQ29sb3JTcGFjZVJlZigp
CiB9CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Jbml0KENHQ29udGV4dFJlZiBjZ0NvbnRleHQpCisjZWxzZQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtSW5pdChDR0NvbnRleHRSZWYgY2dDb250ZXh0LCBib29sIHNob3Vs
ZFVzZUNvbnRleHRDb2xvcnMpCisjZW5kaWYKIHsKICAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCk7CiAgICAgc2V0UGFpbnRpbmdEaXNhYmxl
ZCghY2dDb250ZXh0KTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChjZ0NvbnRleHQpIHsK
KyNlbHNlCisgICAgbV9zdGF0ZS5zaG91bGRVc2VDb250ZXh0Q29sb3JzID0gc2hvdWxkVXNlQ29u
dGV4dENvbG9yczsKKyAgICBpZiAoY2dDb250ZXh0ICYmIHNob3VsZFVzZUNvbnRleHRDb2xvcnMp
IHsKKyNlbmRpZgogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5
bmMgd2l0aCBvdXIgc3RhdGUuCiAgICAgICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xv
cigpLCBmaWxsQ29sb3JTcGFjZSgpKTsKICAgICAgICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihz
dHJva2VDb2xvcigpLCBzdHJva2VDb2xvclNwYWNlKCkpOwpAQCAtMTQxLDExICsxNjgsMTkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKICAgICBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAor
I2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2Uo
UGFzc05hdGl2ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgZmxvYXQgc2NhbGUsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQorI2Vs
c2UKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdl
UHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdl
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCisjZW5kaWYKIHsKICAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2UoaW1hZ2VQdHIpOwogCiAgICAgZmxvYXQgY3VyckhlaWdodCA9IG9yaWVudGF0
aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpIDog
Q0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IFVuYXBwbHkgdGhlIHNjYWxpbmcgc2luY2Ugd2UgYXJlIGdldHRpbmcgdGhpcyBmcm9tIGEgc2Nh
bGVkIGJpdG1hcC4KKyAgICBjdXJySGVpZ2h0IC89IHNjYWxlOworI2VuZGlmCiAKICAgICBpZiAo
Y3VyckhlaWdodCA8PSBzcmNSZWN0LnkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUzLDYgKzE4
OCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJ
bWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRTaQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsK
IAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBBbnRpLWFsaWFzaW5nIGlzIG9uIGJ5IGRlZmF1
bHQgb24gdGhlIGlQaG9uZS4gTmVlZCB0byB0dXJuIGl0IG9mZiB3aGVuIGRyYXdpbmcgaW1hZ2Vz
LgorICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBmYWxzZSk7CisjZW5k
aWYKKwogICAgIGJvb2wgc2hvdWxkVXNlU3ViaW1hZ2UgPSBmYWxzZTsKIAogICAgIC8vIElmIHRo
ZSBzb3VyY2UgcmVjdCBpcyBhIHN1YnBvcnRpb24gb2YgdGhlIGltYWdlLCB0aGVuIHdlIGNvbXB1
dGUgYW4gaW5mbGF0ZWQgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdpbGwgaG9sZCB0aGUgZW50aXJl
IGltYWdlCkBAIC0xODIsNiArMjIyLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRp
dmVJbWFnZShQYXNzTmF0aXZlSW1hZ2VQdHIgaW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2kKICAgICAg
ICAgICAgIHN1YmltYWdlUmVjdC5zZXRIZWlnaHQoY2VpbGYoc3ViaW1hZ2VSZWN0LmhlaWdodCgp
ICsgdG9wUGFkZGluZykpOwogICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQo
c3ViaW1hZ2VSZWN0LmhlaWdodCgpIC8geVNjYWxlKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAgICAgICAgIHN1YmltYWdlUmVjdC5zY2FsZShzY2FsZSwgc2NhbGUpOworI2VuZGlmCiAjaWYg
Q0FDSEVfU1VCSU1BR0VTCiAgICAgICAgICAgICBpbWFnZSA9IHN1YmltYWdlQ2FjaGUoKS5nZXRT
dWJpbWFnZShpbWFnZS5nZXQoKSwgc3ViaW1hZ2VSZWN0KTsKICNlbHNlCkBAIC0yMDQsNiArMjQ3
LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUlt
YWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpCiAgICAgaWYgKCFzaG91bGRVc2VTdWJpbWFn
ZSAmJiBjdXJySGVpZ2h0IDwgaW1hZ2VTaXplLmhlaWdodCgpKQogICAgICAgICBhZGp1c3RlZERl
c3RSZWN0LnNldEhlaWdodChhZGp1c3RlZERlc3RSZWN0LmhlaWdodCgpICogY3VyckhlaWdodCAv
IGltYWdlU2l6ZS5oZWlnaHQoKSk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gQWxpZ24g
dG8gcGl4ZWwgYm91bmRhcmllcworICAgIGFkanVzdGVkRGVzdFJlY3QgPSByb3VuZFRvRGV2aWNl
UGl4ZWxzKGFkanVzdGVkRGVzdFJlY3QpOworI2VuZGlmCisKICAgICBzZXRQbGF0Zm9ybUNvbXBv
c2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKIAogICAgIC8vIEltYWdlT3JpZW50YXRpb24g
ZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKQpAQCAtMzIzLDggKzM3MSwxNCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50MSwgY29u
c3QgSW50UG9pbnQmIHBvaW50MikKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKLSAgICBpZiAoc2hvdWxkQW50aWFsaWFzKCkpCi0gICAgICAgIENHQ29u
dGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBmYWxzZSk7CisgICAgaWYgKHNob3VsZEFu
dGlhbGlhcygpKSB7CisgICAgICAgIGJvb2wgd2lsbEFudGlhbGlhcyA9IGZhbHNlOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICAgICAgLy8gRm9yY2UgYW50aWFsaWFzaW5nIG9uIGZvciBsaW5lIHBh
dHRlcm5zIGFzIHRoZXkgZG9uJ3QgbG9vayBnb29kIHdpdGggaXQgdHVybmVkIG9mZiAoPHJkYXI6
Ly9wcm9ibGVtLzU0NTk3NzI+KS4KKyAgICAgICAgd2lsbEFudGlhbGlhcyA9IHBhdFdpZHRoOwor
I2VuZGlmCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB3aWxs
QW50aWFsaWFzKTsKKyAgICB9CiAKICAgICBpZiAocGF0V2lkdGgpIHsKICAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKQEAgLTM4NSw2ICs0MzksMzYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50
JiBwb2ludDIpCiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB0
cnVlKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Sm9pbmVkTGluZXMoQ0dQb2ludCBwb2ludHNbXSwgdW5zaWduZWQgY291bnQsIGJvb2wgYW50aWFs
aWFzLCBDR0xpbmVDYXAgbGluZUNhcCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8
ICFjb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKKyAgICBmbG9hdCB3aWR0aCA9IENHQ29udGV4dEdldExpbmVXaWR0
aChjb250ZXh0KTsKKworICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisgICAgCisg
ICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIGFudGlhbGlhcyk7CisKKyAg
ICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgd2lkdGggPCAxID8gMSA6IHdpZHRoKTsK
KworICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICAKKyAgICBDR0NvbnRleHRT
ZXRMaW5lQ2FwKGNvbnRleHQsIGxpbmVDYXApOworICAgIAorICAgIENHQ29udGV4dE1vdmVUb1Bv
aW50KGNvbnRleHQsIHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIENHQ29udGV4dEFkZExpbmVU
b1BvaW50KGNvbnRleHQsIHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7CisKKyAgICBDR0NvbnRl
eHRTdHJva2VQYXRoKGNvbnRleHQpOworCisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250
ZXh0KTsKK30KKyNlbmRpZgorCiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0
aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3RWxsaXBzZShjb25zdCBJbnRSZWN0JiByZWN0KQogewpAQCAtMzk2LDYgKzQ4MCwzMSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKICAg
ICBkcmF3UGF0aChwYXRoKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQocGxhdGZvcm1Db250ZXh0KCkpOworCisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250
ZXh0KTsKKworICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGZpbGxDb2xvcigpLCBmaWxsQ29s
b3JTcGFjZSgpKTsKKyAgICBzZXRDR1N0cm9rZUNvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9yKCks
IHN0cm9rZUNvbG9yU3BhY2UoKSk7CisKKyAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4
dCwgc3Ryb2tlVGhpY2tuZXNzKCkpOworICAgIAorICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250
ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRFbGxpcHNlSW5SZWN0KGNvbnRleHQsIHJlY3QpOworCisg
ICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChj
b250ZXh0KTsKKyAgICAKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworfQor
I2VuZGlmCisKIHN0YXRpYyB2b2lkIGFkZENvbnZleFBvbHlnb25Ub1BhdGgoUGF0aCYgcGF0aCwg
c2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCiB7CiAgICAg
QVNTRVJUKG51bWJlck9mUG9pbnRzID4gMCk7CkBAIC05MDMsNyArMTAxMiwxMSBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKQogCiBzdGF0aWMgdm9p
ZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIENHRmxvYXQmIHhPZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCiB7Ci0jaWYg
IVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKGNvbnRl
eHQpOworICAgIFVOVVNFRF9QQVJBTSh4T2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oeU9mZnNl
dCk7CisjZWxzZQogICAgIGlmIChjb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMTIzNSw2ICsxMzQ4LDU5IEBAIEZsb2F0UmVjdCBHcmFwaGljc0Nv
bnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGlu
Z01vCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdo
dCAtIHJvdW5kZWRPcmlnaW4pOwogfQogCisvLyBGSVhNRTogV2Ugc2hvdWxkIGxvb2sgdG8gY29u
c29saWRhdGUgdGhlIGlPUyBhbmQgbm9uLWlPUyBpbXBsZW1lbnRhdGlvbnMgb2YKKy8vIGNvbXB1
dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoKSBhbmQgY29tcHV0ZUxpbmVC
b3VuZHNGb3JUZXh0KCkuCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIEZsb2F0UmVjdCBjb21w
dXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KEdyYXBoaWNzQ29udGV4dCYg
aW5pdGlhbENvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgYm9v
bCBwcmludGluZywgYm9vbCYgc2hvdWxkQW50aWFsaWFzLCBDb2xvciYgY29sb3IpCit7CisgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBpbml0aWFsQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsK
KyAgICBDR1BvaW50IG9yaWdpbjsKKyAgICBDR0Zsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KGlu
aXRpYWxDb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCAwLjVmKTsKKworICAgIHNob3VsZEFudGlh
bGlhcyA9IHRydWU7CisgICAgaWYgKHByaW50aW5nKQorICAgICAgICBvcmlnaW4gPSBDR1BvaW50
TWFrZShwb2ludC54KCksIHBvaW50LnkoKSk7CisgICAgZWxzZSB7CisgICAgICAgIENHQWZmaW5l
VHJhbnNmb3JtIHQgPSBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNmb3Jt
KGNvbnRleHQpOworICAgICAgICBpZiAoQWZmaW5lVHJhbnNmb3JtKHQpLnByZXNlcnZlc0F4aXNB
bGlnbm1lbnQoKSkKKyAgICAgICAgICAgIHNob3VsZEFudGlhbGlhcyA9IGZhbHNlOworCisgICAg
ICAgIC8vIFRoaXMgY29kZSBhbHdheXMgZHJhd3MgYSBsaW5lIHRoYXQgaXMgYXQgbGVhc3Qgb25l
LXBpeGVsIGxpbmUgaGlnaCwKKyAgICAgICAgLy8gd2hpY2ggdGVuZHMgdG8gdmlzdWFsbHkgb3Zl
cndoZWxtIHRleHQgYXQgc21hbGwgc2NhbGVzLiBUbyBjb3VudGVyIHRoaXMKKyAgICAgICAgLy8g
ZWZmZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRvIHRoZSB1bmRlcmxpbmUgY29sb3Igd2hlbiB0
ZXh0IGlzIGF0IHNtYWxsIHNjYWxlcy4KKworICAgICAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUg
aW4geCBkaW1lbnNpb24sIGFzc3VtaW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KKyAgICAg
ICAgQ0dGbG9hdCBzY2FsZSA9IHQuYiA/IHNxcnRmKHQuYSAqIHQuYSArIHQuYiAqIHQuYikgOiB0
LmE7CisgICAgICAgIGlmIChzY2FsZSA8IDEuMCkgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0IE1pblVuZGVybGluZUFscGhhID0gMC40ZjsKKyAgICAgICAgICAgIGZsb2F0IHNoYWRl
ID0gc2NhbGUgPiBNaW5VbmRlcmxpbmVBbHBoYSA/IHNjYWxlIDogTWluVW5kZXJsaW5lQWxwaGE7
CisgICAgICAgICAgICBpbnQgYWxwaGEgPSBjb2xvci5hbHBoYSgpICogc2hhZGU7CisgICAgICAg
ICAgICBjb2xvciA9IENvbG9yKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVl
KCksIGFscGhhKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERvbid0IG9mZnNldCBsaW5lIGZy
b20gYm90dG9tIG9mIHRleHQgaWYgc2NhbGUgaXMgbGVzcyB0aGFuIE9mZnNldFVuZGVybGluZVNj
YWxlLgorICAgICAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBPZmZzZXRVbmRlcmxpbmVTY2FsZSA9
IDAuNGY7CisgICAgICAgIENHRmxvYXQgZHkgPSBzY2FsZSA8IE9mZnNldFVuZGVybGluZVNjYWxl
ID8gMCA6IDE7CisKKyAgICAgICAgLy8gSWYgd2UndmUgaW5jcmVhc2VkIHRoZSB0aGlja25lc3Mg
b2YgdGhlIGxpbmUsIG1ha2Ugc3VyZSB0byBtb3ZlIHRoZSBsb2NhdGlvbiB0b28uCisgICAgICAg
IGlmICh0aGlja25lc3MgPiAxKQorICAgICAgICAgICAgZHkgKz0gcm91bmRmKHRoaWNrbmVzcykg
LSAxOworCisgICAgICAgIENHUG9pbnQgZGV2aWNlUG9pbnQgPSBDR1BvaW50QXBwbHlBZmZpbmVU
cmFuc2Zvcm0ocG9pbnQsIHQpOworICAgICAgICBDR1BvaW50IGRldmljZU9yaWdpbiA9IENHUG9p
bnRNYWtlKHJvdW5kZihkZXZpY2VQb2ludC54KSwgY2VpbGYoZGV2aWNlUG9pbnQueSkgKyBkeSk7
CisgICAgICAgIG9yaWdpbiA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShkZXZpY2VPcmln
aW4sIENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KHQpKTsKKyAgICAgICAgdGhpY2tuZXNzIC89IHNj
YWxlOworICAgIH0KKyAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbi54LCBvcmlnaW4ueSwgd2lk
dGgsIHRoaWNrbmVzcyk7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVM
aW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpCit7CisgICAgYm9vbCBkdW1teUJvb2w7CisgICAgQ29sb3IgZHVtbXlDb2xv
cjsKKyAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4
dCgqdGhpcywgcG9pbnQsIHdpZHRoLCBwcmludGluZywgZHVtbXlCb29sLCBkdW1teUNvbG9yKTsK
K30KKyNlbHNlCiBzdGF0aWMgRmxvYXRSZWN0IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFz
aW5nTW9kZUZvclRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcsIGJvb2wmIHNob3VsZEFudGlhbGlh
cykKIHsKICAgICBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOwpAQCAtMTI3MCw2ICsxNDM2LDcgQEAg
RmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG8KICAgICBib29sIGR1bW15OwogICAgIHJldHVybiBjb21w
dXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KCp0aGlzLCBwb2ludCwgd2lk
dGgsIHByaW50aW5nLCBkdW1teSk7CiB9CisjZW5kaWYKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpCiB7CkBAIC0xMjc5LDYgKzE0NDYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwg
Ym9vbAogICAgIGlmICh3aWR0aCA8PSAwKQogICAgICAgICByZXR1cm47CiAKKyNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzTGluZTsKICAgICBGbG9hdFJlY3QgYm91
bmRzID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCgqdGhpcywg
cG9pbnQsIHdpZHRoLCBwcmludGluZywgc2hvdWxkQW50aWFsaWFzTGluZSk7CiAKQEAgLTEyOTcs
MTAgKzE0NjUsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJvb2wKIAogICAgIGlmIChyZXN0b3Jl
QW50aWFsaWFzTW9kZSkKICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKHBsYXRm
b3JtQ29udGV4dCgpLCB0cnVlKTsKKyNlbHNlCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisg
ICAgQ29sb3IgY29sb3Ioc3Ryb2tlQ29sb3IoKSk7CisgICAgCisgICAgYm9vbCBzaG91bGRBbnRp
YWxpYXNMaW5lOworICAgIEZsb2F0UmVjdCByZWN0ID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRp
YWxpYXNpbmdNb2RlRm9yVGV4dCgqdGhpcywgcG9pbnQsIHdpZHRoLCBwcmludGluZywgc2hvdWxk
QW50aWFsaWFzTGluZSwgY29sb3IpOworCisgICAgaWYgKG1fc3RhdGUuc2hvdWxkVXNlQ29udGV4
dENvbG9ycykKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgY29sb3IsIHN0cm9rZUNv
bG9yU3BhY2UoKSk7CisgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgcmVjdCk7CisKKyAg
ICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworI2VuZGlmCiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgSW50UmVj
dCYgZGVzdFJlY3QpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEzMTksNiArMTUwMywxMCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KQogCiAgICAgQ0dQREZDb250ZXh0U2V0VVJMRm9yUmVjdChjb250ZXh0LCB1
cmxSZWYuZ2V0KCksCiAgICAgICAgIENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKHJlY3QsIENH
Q29udGV4dEdldENUTShjb250ZXh0KSkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obGluayk7
CisgICAgVU5VU0VEX1BBUkFNKGRlc3RSZWN0KTsKKyNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0
eSBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHLmNwcAppbmRleCBiMTNkMTIxMzQwYmIzMTEzOThhNjkyODc5NmQzODk5ZGVk
Y2ZjZWZjLi5lN2Q2ZjQzNmU0YzY3NmI4YzVkYjQ5YTRmZDY2MTliNDAwOGQ3OTA5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcApAQCAtMzMsOCArMzMsMTMgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgog
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNp
bmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNs
dWRlIDxtYXRoLmg+CisjaWYgIVBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNl
cnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2VuZGlm
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRo
bWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtNTAsMTAgKzU1LDE3IEBA
CiAjaW5jbHVkZSA8SU9TdXJmYWNlL0lPU3VyZmFjZS5oPgogI2VuZGlmCiAKKy8vIENBIHVzZXMg
QVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9w
dGltaXplZC4KKyNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1MpCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCisjaWYg
UExBVEZPUk0oSU9TKQorc3RhdGljIGNvbnN0IGludCBtYXhJT1N1cmZhY2VEaW1lbnNpb24gPSAy
MDQ4OworI2Vsc2UKIHN0YXRpYyBjb25zdCBpbnQgbWF4SU9TdXJmYWNlRGltZW5zaW9uID0gNDA5
NjsKKyNlbmRpZgogCiBzdGF0aWMgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4gY3JlYXRlSU9TdXJm
YWNlKGNvbnN0IEludFNpemUmIHNpemUpCiB7CkBAIC03MCw4ICs4MiwxMyBAQCBzdGF0aWMgUmV0
YWluUHRyPElPU3VyZmFjZVJlZj4gY3JlYXRlSU9TdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUp
CiAgICAgaWYgKCFhbGxvY1NpemUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3Qgdm9p
ZCAqa2V5c1s2XTsKLSAgICBjb25zdCB2b2lkICp2YWx1ZXNbNl07CisjaWYgIVBMQVRGT1JNKElP
UykKKyAgICBjb25zdCB2b2lkKiBrZXlzWzZdOworICAgIGNvbnN0IHZvaWQqIHZhbHVlc1s2XTsK
KyNlbHNlCisgICAgY29uc3Qgdm9pZCoga2V5c1s3XTsKKyAgICBjb25zdCB2b2lkKiB2YWx1ZXNb
N107CisjZW5kaWYKICAgICBrZXlzWzBdID0ga0lPU3VyZmFjZVdpZHRoOwogICAgIHZhbHVlc1sw
XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUsICZ3aWR0aCk7CiAgICAga2V5
c1sxXSA9IGtJT1N1cmZhY2VIZWlnaHQ7CkBAIC04NCw5ICsxMDEsMTQgQEAgc3RhdGljIFJldGFp
blB0cjxJT1N1cmZhY2VSZWY+IGNyZWF0ZUlPU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplKQog
ICAgIHZhbHVlc1s0XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxvbmdUeXBlLCAmYnl0
ZXNQZXJSb3cpOwogICAgIGtleXNbNV0gPSBrSU9TdXJmYWNlQWxsb2NTaXplOwogICAgIHZhbHVl
c1s1XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxvbmdUeXBlLCAmYWxsb2NTaXplKTsK
KyNpZiBQTEFURk9STShJT1MpCisgICAga2V5c1s2XSA9IGtJT1N1cmZhY2VDYWNoZU1vZGU7Cisg
ICAgaW50IGNhY2hlTW9kZSA9IGtJT01hcFdyaXRlQ29tYmluZUNhY2hlOworICAgIHZhbHVlc1s2
XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUsICZjYWNoZU1vZGUpOworI2Vu
ZGlmCiAKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBkaWN0ID0gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCA2LCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBkaWN0ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCBXVEZf
QVJSQVlfTEVOR1RIKHZhbHVlcyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpOyArK2kpCiAgICAgICAgIENGUmVsZWFzZSh2
YWx1ZXNbaV0pOwogCiAgICAgcmV0dXJuIGFkb3B0Q0YoSU9TdXJmYWNlQ3JlYXRlKGRpY3QuZ2V0
KCkpKTsKQEAgLTE2OSw3ICsxOTEsMTEgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0
IEludFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90
PihtX2RhdGEubV9kYXRhKSAmIDMpKTsKIAorI2lmIFVTRV9BUkdCMzIKKyAgICAgICAgbV9kYXRh
Lm1fYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRt
YXBCeXRlT3JkZXIzMkhvc3Q7CisjZWxzZQogICAgICAgICBtX2RhdGEubV9iaXRtYXBJbmZvID0g
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OworI2VuZGlmCiAgICAgICAgIGNnQ29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5tX2RhdGEsIG1fZGF0YS5t
X2JhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLm1fYmFja2luZ1N0b3JlU2l6ZS5oZWln
aHQoKSwgOCwgbV9kYXRhLm1fYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5tX2NvbG9y
U3BhY2UsIG1fZGF0YS5tX2JpdG1hcEluZm8pKTsKICAgICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBp
bWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgogICAgICAgICBtX2RhdGEubV9kYXRhUHJvdmlkZXIg
PSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLm1fZGF0YSwg
bnVtQnl0ZXMudW5zYWZlR2V0KCksIHJlbGVhc2VJbWFnZURhdGEpKTsKQEAgLTI3OCw3ICszMDQs
MTMgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwKIAogICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNy
Y1JlY3QgPSBzcmNSZWN0OwogICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LT5kcmF3TmF0aXZlSW1h
Z2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5tX2JhY2tpbmdTdG9yZVNpemUsIGNvbG9yU3BhY2UsIGRl
c3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBibGVuZE1vZGUpOworICAgIGRlc3RDb250ZXh0
LT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5tX2JhY2tpbmdTdG9yZVNpemUs
IGNvbG9yU3BhY2UsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsCisjaWYgUExBVEZPUk0oSU9T
KQorICAgICAgICAxLjBmLCAvLyBEZWZhdWx0IHNjYWxlIG9mIDEuMAorI2VuZGlmCisgICAgICAg
IG9wLAorICAgICAgICBibGVuZE1vZGUKKyAgICApOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKQEAgLTM3NSw3ICs0MDcsNyBA
QCB2b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoTXVsdGlwbHkgbXVsdGlwbGllZCwgVWlu
dDhDbGFtcGVkQXJyYXkqIHNvdXJjZSwgYwogCiBzdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpw
ZWdVVEkoKQogewotI2lmIFBMQVRGT1JNKFdJTikKKyNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRG
T1JNKFdJTikKICAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBDRlNU
UigicHVibGljLmpwZWciKTsKICNlbmRpZgogICAgIHJldHVybiBrVVRUeXBlSlBFRzsKQEAgLTM4
Myw3ICs0MTUsNyBAQCBzdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpwZWdVVEkoKQogICAgIAog
c3RhdGljIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYg
IVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gYWRvcHRDRihVVFR5cGVDcmVhdGVQcmVmZXJyZWRJ
ZGVudGlmaWVyRm9yVGFnKGtVVFRhZ0NsYXNzTUlNRVR5cGUsIG1pbWVUeXBlLmNyZWF0ZUNGU3Ry
aW5nKCkuZ2V0KCksIDApKTsKICNlbHNlCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8g
SXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCmlu
ZGV4IGRlNGMzODdlMTY3YTUxOTc4YWFmOGJhZjhjOWY1OWJlYjc5YTc1MzkuLjlmZDI4ZDQ1N2Zj
YjgwY2U0YjRhNTcwOWRmYTRjMTg5YjMyMjliNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKQEAgLTQ4
LDYgKzQ4LDkgQEAgc3RydWN0IFNjYW5saW5lRGF0YSB7CiB9OwogI2VuZGlmCiAKKy8vIENBIHVz
ZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlz
IG9wdGltaXplZC4KKyNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1MpCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50
U2l6ZSYpCkBAIC02MCw3ICs2Myw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRh
KGNvbnN0IEludFNpemUmKQogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCiAKLSNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQorI2lmIFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKIHN0YXRpYyB2b2lkIGNvbnZlcnRTY2FubGluZSh2b2lk
KiBkYXRhLCBzaXplX3QgdGlsZU51bWJlciwgYm9vbCBwcmVtdWx0aXBseSkKIHsKICAgICBTY2Fu
bGluZURhdGEqIHNjYW5saW5lRGF0YSA9IHN0YXRpY19jYXN0PFNjYW5saW5lRGF0YSo+KGRhdGEp
OwpAQCAtMTIyLDEzICsxMjUsMTMgQEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1h
Z2VCdWZmZXJEYXRhOjpnZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnMKICAgICAKICAg
ICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwogICAgIGludCBkZXN0eCA9IDA7Ci0gICAgaW50IGRl
c3R3ID0gcmVjdC53aWR0aCgpOworICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IHJlY3Qud2lkdGgo
KTsKICAgICBpZiAob3JpZ2lueCA8IDApIHsKICAgICAgICAgZGVzdHcgKz0gb3JpZ2lueDsKICAg
ICAgICAgZGVzdHggPSAtb3JpZ2lueDsKICAgICAgICAgb3JpZ2lueCA9IDA7CiAgICAgfQotICAg
IGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dywgY2VpbGYoc2l6ZS53aWR0aCgpIC8gcmVzb2x1
dGlvblNjYWxlKSAtIG9yaWdpbngpOworICAgIGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dy51
bnNhZmVHZXQoKSwgY2VpbGYoc2l6ZS53aWR0aCgpIC8gcmVzb2x1dGlvblNjYWxlKSAtIG9yaWdp
bngpOwogICAgIG9yaWdpbnggKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIGlmIChlbmR4LnVuc2Fm
ZUdldCgpID4gc2l6ZS53aWR0aCgpKQogICAgICAgICBlbmR4ID0gc2l6ZS53aWR0aCgpOwpAQCAt
MTM2LDEzICsxMzksMTMgQEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXJEYXRhOjpnZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnMKICAgICAKICAgICBpbnQg
b3JpZ2lueSA9IHJlY3QueSgpOwogICAgIGludCBkZXN0eSA9IDA7Ci0gICAgaW50IGRlc3RoID0g
cmVjdC5oZWlnaHQoKTsKKyAgICBDaGVja2VkPGludD4gZGVzdGggPSByZWN0LmhlaWdodCgpOwog
ICAgIGlmIChvcmlnaW55IDwgMCkgewogICAgICAgICBkZXN0aCArPSBvcmlnaW55OwogICAgICAg
ICBkZXN0eSA9IC1vcmlnaW55OwogICAgICAgICBvcmlnaW55ID0gMDsKICAgICB9Ci0gICAgZGVz
dGggPSBzdGQ6Om1pbjxpbnQ+KGRlc3RoLCBjZWlsZihzaXplLmhlaWdodCgpIC8gcmVzb2x1dGlv
blNjYWxlKSAtIG9yaWdpbnkpOworICAgIGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0aC51bnNh
ZmVHZXQoKSwgY2VpbGYoc2l6ZS5oZWlnaHQoKSAvIHJlc29sdXRpb25TY2FsZSkgLSBvcmlnaW55
KTsKICAgICBvcmlnaW55ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBpZiAoZW5keS51bnNhZmVH
ZXQoKSA+IHNpemUuaGVpZ2h0KCkpCiAgICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwpAQCAt
MTYzLDYgKzE2NiwxNiBAQCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZl
ckRhdGE6OmdldERhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29ucwogICAgICAgICAKICNpZiBV
U0UoQUNDRUxFUkFURSkKICAgICAgICAgaWYgKHVubXVsdGlwbGllZCkgeworI2lmIFVTRV9BUkdC
MzIKKyAgICAgICAgICAgIFNjYW5saW5lRGF0YSBzY2FubGluZURhdGE7CisgICAgICAgICAgICBz
Y2FubGluZURhdGEuc2NhbmxpbmVXaWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOworICAgICAgICAg
ICAgc2NhbmxpbmVEYXRhLnNyY0RhdGEgPSBzcmNSb3dzOworICAgICAgICAgICAgc2NhbmxpbmVE
YXRhLnNyY1Jvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBzY2FubGluZURh
dGEuZGVzdERhdGEgPSBkZXN0Um93czsKKyAgICAgICAgICAgIHNjYW5saW5lRGF0YS5kZXN0Um93
Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7CisKKyAgICAgICAgICAgIGRpc3BhdGNoX2FwcGx5X2Yo
ZGVzdGgudW5zYWZlR2V0KCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVF
VUVfUFJJT1JJVFlfREVGQVVMVCwgMCksICZzY2FubGluZURhdGEsIHVucHJlbXVsdGl0cGx5U2Nh
bmxpbmUpOworI2Vsc2UKICAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwogICAgICAgICAg
ICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKICAgICAgICAgICAgIHNyYy53aWR0
aCA9IHdpZHRoLnVuc2FmZUdldCgpOwpAQCAtMTcwLDggKzE4Myw4IEBAIFBhc3NSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zCiAgICAgICAgICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZHN0OwotICAgICAgICAgICAgZHN0LmhlaWdodCA9
IGRlc3RoOwotICAgICAgICAgICAgZHN0LndpZHRoID0gZGVzdHc7CisgICAgICAgICAgICBkc3Qu
aGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7CisgICAgICAgICAgICBkc3Qud2lkdGggPSBkZXN0
dy51bnNhZmVHZXQoKTsKICAgICAgICAgICAgIGRzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJv
dzsKICAgICAgICAgICAgIGRzdC5kYXRhID0gZGVzdFJvd3M7CiAKQEAgLTE4NCwxMyArMTk3LDE0
IEBAIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0
YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkc3QsIGt2SW1hZ2VOb0Zs
YWdzKTsKKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAgICAg
ICAgIH0KICNlbmRpZgogICAgICAgICBpZiAocmVzb2x1dGlvblNjYWxlICE9IDEpIHsKICAgICAg
ICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IHNvdXJjZUNvbnRleHQgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZShzcmNSb3dzLCB3aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0LnVu
c2FmZUdldCgpLCA4LCBzcmNCeXRlc1BlclJvdywgbV9jb2xvclNwYWNlLCBrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZExhc3QpKTsKICAgICAgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBz
b3VyY2VJbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uoc291cmNlQ29u
dGV4dC5nZXQoKSkpOwotICAgICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gZGVzdGlu
YXRpb25Db250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGVzdFJvd3MsIGRl
c3R3LCBkZXN0aCwgOCwgZGVzdEJ5dGVzUGVyUm93LCBtX2NvbG9yU3BhY2UsIGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJl
Zj4gZGVzdGluYXRpb25Db250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGVz
dFJvd3MsIGRlc3R3LnVuc2FmZUdldCgpLCBkZXN0aC51bnNhZmVHZXQoKSwgOCwgZGVzdEJ5dGVz
UGVyUm93LCBtX2NvbG9yU3BhY2UsIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGRlc3RpbmF0aW9uQ29udGV4dC5nZXQo
KSwga0NHQmxlbmRNb2RlQ29weSk7CiAgICAgICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVz
dGluYXRpb25Db250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHdpZHRoLnVuc2FmZUdldCgp
IC8gcmVzb2x1dGlvblNjYWxlLCBoZWlnaHQudW5zYWZlR2V0KCkgLyByZXNvbHV0aW9uU2NhbGUp
LCBzb3VyY2VJbWFnZS5nZXQoKSk7IC8vIEZJWE1FOiBBZGQgc3VicGl4ZWwgdHJhbnNsYXRpb24u
CiAgICAgICAgICAgICBpZiAoIXVubXVsdGlwbGllZCkKQEAgLTIwOCw2ICsyMjIsMjAgQEAgUGFz
c1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnMKICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4
ID0geCAqIDQ7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNS
b3dzW2Jhc2V4ICsgM107CisjaWYgVVNFX0FSR0IzMgorICAgICAgICAgICAgICAgICAgICAvLyBC
eXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jh
c2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gc3JjUm93c1tiYXNleCArIDJdOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICAgICAg
fQorI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxw
aGE7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jv
d3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKQEAgLTIxNSwxNCArMjQzLDI1IEBAIFBhc3NS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDNdID0gYWxwaGE7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgp
WzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Cisj
ZW5kaWYKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNC
eXRlc1BlclJvdzsKICAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7CisjaWYgVVNFX0FSR0IzMgorICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykg
eworICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKKyAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOworICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOworICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07CisgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107
CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8ICh3aWR0aCAqIDQpLnVuc2FmZUdldCgpOyB4ICs9IDQpCiAgICAgICAgICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIHgpWzBdID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyB4KVswXTsKKyNlbmRpZgogICAgICAgICAg
ICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CiAgICAgICAgICAgICAgICAgZGVzdFJv
d3MgKz0gZGVzdEJ5dGVzUGVyUm93OwogICAgICAgICAgICAgfQpAQCAtMjQyLDggKzI4MSw4IEBA
IFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKIAog
ICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGg7
Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dzsKKyAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0
aC51bnNhZmVHZXQoKTsKKyAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwog
ICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwogICAgICAgICBkZXN0LmRh
dGEgPSBkZXN0Um93czsKIApAQCAtMjYzLDEzICszMDIsMTMgQEAgUGFzc1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnMKIAogICAgICAgICBpZiAodW5tdWx0aXBsaWVkKSB7CiAgICAgICAgICAgICBTY2FubGlu
ZURhdGEgc2NhbmxpbmVEYXRhOwotICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNjYW5saW5lV2lk
dGggPSB3aWR0aC51bnNhZmVHZXQoKTsKKyAgICAgICAgICAgIHNjYW5saW5lRGF0YS5zY2FubGlu
ZVdpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7CiAgICAgICAgICAgICBzY2FubGluZURhdGEuc3Jj
RGF0YSA9IHNyY1Jvd3M7CiAgICAgICAgICAgICBzY2FubGluZURhdGEuc3JjUm93Qnl0ZXMgPSBz
cmNCeXRlc1BlclJvdzsKICAgICAgICAgICAgIHNjYW5saW5lRGF0YS5kZXN0RGF0YSA9IGRlc3RS
b3dzOwogICAgICAgICAgICAgc2NhbmxpbmVEYXRhLmRlc3RSb3dCeXRlcyA9IGRlc3RCeXRlc1Bl
clJvdzsKIAotICAgICAgICAgICAgZGlzcGF0Y2hfYXBwbHlfZihoZWlnaHQudW5zYWZlR2V0KCks
IGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVM
VCwgMCksICZzY2FubGluZURhdGEsIHVucHJlbXVsdGl0cGx5U2NhbmxpbmUpOworICAgICAgICAg
ICAgZGlzcGF0Y2hfYXBwbHlfZihkZXN0aC51bnNhZmVHZXQoKSwgZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgJnNjYW5saW5lRGF0
YSwgdW5wcmVtdWx0aXRwbHlTY2FubGluZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gQkdSQSB0byBSR0JBLgogICAgICAgICAgICAg
Y29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKQEAgLTI3OSw3ICszMTgsNyBA
QCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29ucwogICAgICAgICBpZiAocmVzb2x1dGlvblNjYWxlICE9
IDEpIHsKICAgICAgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IHNvdXJjZUNvbnRleHQg
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShzcmNSb3dzLCB3aWR0aC51bnNhZmVHZXQo
KSwgaGVpZ2h0LnVuc2FmZUdldCgpLCA4LCBzcmNCeXRlc1BlclJvdywgbV9jb2xvclNwYWNlLCBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKICAgICAgICAgICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBzb3VyY2VJbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1h
Z2Uoc291cmNlQ29udGV4dC5nZXQoKSkpOwotICAgICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4
dFJlZj4gZGVzdGluYXRpb25Db250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUo
ZGVzdFJvd3MsIGRlc3R3LCBkZXN0aCwgOCwgZGVzdEJ5dGVzUGVyUm93LCBtX2NvbG9yU3BhY2Us
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICAgICAgUmV0YWluUHRy
PENHQ29udGV4dFJlZj4gZGVzdGluYXRpb25Db250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGUoZGVzdFJvd3MsIGRlc3R3LnVuc2FmZUdldCgpLCBkZXN0aC51bnNhZmVHZXQoKSwg
OCwgZGVzdEJ5dGVzUGVyUm93LCBtX2NvbG9yU3BhY2UsIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkTGFzdCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGRlc3RpbmF0aW9u
Q29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CiAgICAgICAgICAgICBDR0NvbnRleHRE
cmF3SW1hZ2UoZGVzdGluYXRpb25Db250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHdpZHRo
LnVuc2FmZUdldCgpIC8gcmVzb2x1dGlvblNjYWxlLCBoZWlnaHQudW5zYWZlR2V0KCkgLyByZXNv
bHV0aW9uU2NhbGUpLCBzb3VyY2VJbWFnZS5nZXQoKSk7IC8vIEZJWE1FOiBBZGQgc3VicGl4ZWwg
dHJhbnNsYXRpb24uCiAKQEAgLTM5MCw2ICs0MjksMTcgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6
OnB1dERhdGEoVWludDhDbGFtcGVkQXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVMKICAgICAgICAgCiAjaWYgIFVTRShBQ0NFTEVSQVRFKQogICAgICAgICBpZiAodW5tdWx0aXBs
aWVkKSB7CisjaWYgVVNFX0FSR0IzMgorICAgICAgICAgICAgLy8gRklYTUU6IEFyZSBzY2FubGlu
ZURhdGEuc2NhbmxpbmVXaWR0aCBhbmQgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmll
ZCB0byBkaXNwYXRjaF9hcHBseV9mKCkgY29ycmVjdD8KKyAgICAgICAgICAgIFNjYW5saW5lRGF0
YSBzY2FubGluZURhdGE7CisgICAgICAgICAgICBzY2FubGluZURhdGEuc2NhbmxpbmVXaWR0aCA9
IHdpZHRoLnVuc2FmZUdldCgpOworICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNyY0RhdGEgPSBz
cmNSb3dzOworICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNyY1Jvd0J5dGVzID0gc3JjQnl0ZXNQ
ZXJSb3c7CisgICAgICAgICAgICBzY2FubGluZURhdGEuZGVzdERhdGEgPSBkZXN0Um93czsKKyAg
ICAgICAgICAgIHNjYW5saW5lRGF0YS5kZXN0Um93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7CisK
KyAgICAgICAgICAgIGRpc3BhdGNoX2FwcGx5X2YoaGVpZ2h0LnVuc2FmZUdldCgpLCBkaXNwYXRj
aF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCAm
c2NhbmxpbmVEYXRhLCBwcmVtdWx0aXRwbHlTY2FubGluZSk7CisjZWxzZQogICAgICAgICAgICAg
dkltYWdlX0J1ZmZlciBzcmM7CiAgICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2Fm
ZUdldCgpOwogICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7CkBAIC00
MTEsNiArNDYxLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoVWludDhDbGFtcGVk
QXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVMKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkc3QsIGt2
SW1hZ2VOb0ZsYWdzKTsKKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAj
ZW5kaWYKQEAgLTQzMyw2ICs0ODQsMjAgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEo
VWludDhDbGFtcGVkQXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVMKICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewogICAg
ICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107CisjaWYgVVNFX0FSR0IzMgorICAgICAg
ICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZm
ZXJzIG9mIEFSR0IzMgorICAgICAgICAgICAgICAgIGlmICh1bm11bHRpcGxpZWQgJiYgYWxwaGEg
IT0gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dz
W2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8g
MjU1OworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3Nb
YmFzZXggKyAwXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAx
XTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFz
ZXhdOworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Cisg
ICAgICAgICAgICAgICAgfQorI2Vsc2UKICAgICAgICAgICAgICAgICBpZiAodW5tdWx0aXBsaWVk
ICYmIGFscGhhICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0g
PSAoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CiAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAy
NTQpIC8gMjU1OwpAQCAtNDQwLDYgKzUwNSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXRE
YXRhKFVpbnQ4Q2xhbXBlZEFycmF5KiYgc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTCiAg
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KHNyY1Jvd3MgKyBiYXNleClbMF07CisjZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3Jj
Qnl0ZXNQZXJSb3c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAppbmRleCBhNDE5MDZiYWI2MWVmZTYwMGQyNzRhZGU2
NjQ2YzFmZjM2MDY4Y2UwLi44OTYwZDAwZTRmMGMzMDgxZmIzYWQ4N2FhYzQ2YzQ0MjJmYzQ2OWVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckRhdGFDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmgKQEAgLTMxLDcgKzMxLDkgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CiAKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShDQSkKKyNpZiAhUExBVEZPUk0oSU9T
X1NJTVVMQVRPUikKICNkZWZpbmUgV1RGX1VTRV9JT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUgMQorI2VuZGlmIC8vICFQTEFURk9STShJT1NfU0lNVUxBVE9SKQogI2VuZGlmCiAKIHR5cGVk
ZWYgc3RydWN0IF9fSU9TdXJmYWNlICpJT1N1cmZhY2VSZWY7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCmluZGV4IDY5YmEyZDYyYmUyNTM4NGE4
MzNhOWE5ZjI1MjAxZmFhNTA1MmEzMDcuLjQ5NWQ2NjJmZDQ0YTUyMDRhMzJiNTBkMzYyOWQ0Y2U2
ZmE4YWYxOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQ0cuY3BwCkBAIC0zMiw3ICszMiwxMSBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgor
I2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNh
dGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhp
Y3MuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRGT1JN
KE1BQykKQEAgLTcwLDcgKzc0LDEyIEBAIFJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZTo6aW1h
Z2VXaXRoQ29sb3JTcGFjZShDR0ltYWdlUmVmIG9yaWdpbmFsSW1hZ2UsIENvbG9yCiBzdGF0aWMg
dm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0
KQogewogICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSAoQ0dJbWFnZVJlZilpbmZvOwotICAgIENHQ29u
dGV4dERyYXdJbWFnZShjb250ZXh0LCBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0Rl
dmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFn
ZUdldEhlaWdodChpbWFnZSkpKSwgaW1hZ2UpOworICAgIENHRmxvYXQgaGVpZ2h0ID0gQ0dJbWFn
ZUdldEhlaWdodChpbWFnZSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIENHQ29udGV4dFNjYWxl
Q1RNKGNvbnRleHQsIDEsIC0xKTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwg
MCwgLWhlaWdodCk7CisjZW5kaWYKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3Jh
cGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KDAsIDAs
IENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIGhlaWdodCkpLCBpbWFnZSk7CiB9CiAKIHN0YXRpYyB2
b2lkIHBhdHRlcm5SZWxlYXNlT25NYWluVGhyZWFkQ2FsbGJhY2sodm9pZCogaW5mbykKQEAgLTEz
OCw2ICsxNDcsMTAgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdAogICAgICAgICBtYXRyaXggPSBD
R0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQ29udGV4dEdldENUTShjb250ZXh0KSk7
CiAgICAgICAgIC8vIFRoZSB0b3Agb2YgYSBwYXJ0aWFsbHktZGVjb2RlZCBpbWFnZSBpcyBkcmF3
biBhdCB0aGUgYm90dG9tIG9mIHRoZSB0aWxlLiBNYXAgaXQgdG8gdGhlIHRvcC4KICAgICAgICAg
bWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUobWF0cml4LCAwLCBzaXplKCkuaGVp
Z2h0KCkgLSBoKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIG1hdHJpeCA9IENHQWZmaW5l
VHJhbnNmb3JtU2NhbGUobWF0cml4LCAxLCAtMSk7CisgICAgICAgIG1hdHJpeCA9IENHQWZmaW5l
VHJhbnNmb3JtVHJhbnNsYXRlKG1hdHJpeCwgMCwgLWgpOworI2VuZGlmCiAgICAgICAgIENHSW1h
Z2VSZWYgcGxhdGZvcm1JbWFnZSA9IENHSW1hZ2VSZXRhaW4oc3ViSW1hZ2UuZ2V0KCkpOwogICAg
ICAgICBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBwYXR0ZXJuID0gYWRvcHRDRihDR1BhdHRlcm5D
cmVhdGUocGxhdGZvcm1JbWFnZSwgQ0dSZWN0TWFrZSgwLCAwLCB0aWxlUmVjdC53aWR0aCgpLCB0
aWxlUmVjdC5oZWlnaHQoKSksIG1hdHJpeCwKICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCkg
KyBzcGFjZVNpemUoKS53aWR0aCgpICogKDEgLyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRl
cm5UcmFuc2Zvcm0uYSgpKSksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCmluZGV4IGJmNjkyODJjN2EyNWMzNjIxYTdmM2Yw
ZjQ1OGFkMDJlZjE3NGJmZjUuLmJmNDUzMzYzY2ZiNjNiMmVkMmE5YTIxYTkzOGYxNWM1ZWNkNjkw
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
U291cmNlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlU291cmNlQ0cuY3BwCkBAIC0zNCw3ICszNCwxNSBAQAogI2luY2x1ZGUgIkludFNpemUuaCIK
ICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxp
Y2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2VQ
cml2YXRlLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1
ZGUgPEltYWdlSU8vQ0dJbWFnZVNvdXJjZVByaXZhdGUuaD4KKyNpbmNsdWRlIDxJbWFnZUlPL0lt
YWdlSU8uaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00Niw2ICs1NCwxMCBAQCBjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFn
ZVNvdXJjZVNraXBNZXRhZGF0YSA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YQog
Ly8gdGhhdCB3b24ndCBjb25mbGljdCB3aXRoIEltYWdlSU8ncyB2ZXJzaW9uIHdoZW4gaXQgaXMg
YXZhaWxhYmxlLgogY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUdJRlVu
Y2xhbXBlZERlbGF5VGltZSA9IENGU1RSKCJVbmNsYW1wZWREZWxheVRpbWUiKTsKIAorI2lmIFBM
QVRGT1JNKElPUykKK2Jvb2wgSW1hZ2VTb3VyY2U6OnNfYWNjZWxlcmF0ZWRJbWFnZURlY29kaW5n
OworI2VuZGlmCisKICNpZiAhUExBVEZPUk0oTUFDKQogc2l6ZV90IHNoYXJlZEJ1ZmZlckdldEJ5
dGVzQXRQb3NpdGlvbih2b2lkKiBpbmZvLCB2b2lkKiBidWZmZXIsIG9mZl90IHBvc2l0aW9uLCBz
aXplX3QgY291bnQpCiB7CkBAIC02OSw2ICs4MSwxMCBAQCB2b2lkIHNoYXJlZEJ1ZmZlclJlbGVh
c2Uodm9pZCogaW5mbykKIAogSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEltYWdlU291cmNlOjpB
bHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogICAg
IDogbV9kZWNvZGVyKDApCisjaWYgUExBVEZPUk0oSU9TKQorICAgICwgbV9iYXNlU3Vic2FtcGxp
bmcoMCkKKyAgICAsIG1faXNQcm9ncmVzc2l2ZShmYWxzZSkKKyNlbmRpZgogewogICAgIC8vIEZJ
WE1FOiBBbHBoYU9wdGlvbiBhbmQgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gYXJlIGlnbm9y
ZWQuCiB9CkBAIC05NCwxMyArMTEwLDE0IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wg
ZGVzdHJveUFsbEZyYW1lcywgc2l6ZV90LCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wKICAgICAg
ICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCi1zdGF0aWMgQ0ZEaWN0aW9u
YXJ5UmVmIGltYWdlU291cmNlT3B0aW9ucyhJbWFnZVNvdXJjZTo6U2hvdWxkU2tpcE1ldGFkYXRh
IHNraXBNZXRhZGF0YSkKKyNpZiAhUExBVEZPUk0oSU9TKQorc3RhdGljIENGRGljdGlvbmFyeVJl
ZiBpbWFnZVNvdXJjZU9wdGlvbnMoSW1hZ2VTb3VyY2U6OlNob3VsZFNraXBNZXRhZGF0YSBza2lw
TWV0YURhdGEpCiB7CiAgICAgc3RhdGljIENGRGljdGlvbmFyeVJlZiBvcHRpb25zOwogCiAgICAg
aWYgKCFvcHRpb25zKSB7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG51bU9wdGlvbnMgPSAzOwot
ICAgICAgICBjb25zdCBDRkJvb2xlYW5SZWYgaW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgPSAoc2tp
cE1ldGFkYXRhID09IEltYWdlU291cmNlOjpTa2lwTWV0YWRhdGEpID8ga0NGQm9vbGVhblRydWUg
OiBrQ0ZCb29sZWFuRmFsc2U7CisgICAgICAgIGNvbnN0IENGQm9vbGVhblJlZiBpbWFnZVNvdXJj
ZVNraXBNZXRhZGF0YSA9IChza2lwTWV0YURhdGEgPT0gSW1hZ2VTb3VyY2U6OlNraXBNZXRhZGF0
YSkgPyBrQ0ZCb29sZWFuVHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZTsKICAgICAgICAgY29uc3Qgdm9p
ZCoga2V5c1tudW1PcHRpb25zXSA9IHsga0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZSwga0NHSW1h
Z2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiwga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgfTsK
ICAgICAgICAgY29uc3Qgdm9pZCogdmFsdWVzW251bU9wdGlvbnNdID0geyBrQ0ZCb29sZWFuVHJ1
ZSwga0NGQm9vbGVhblRydWUsIGltYWdlU291cmNlU2tpcE1ldGFkYXRhIH07CiAgICAgICAgIG9w
dGlvbnMgPSBDRkRpY3Rpb25hcnlDcmVhdGUoTlVMTCwga2V5cywgdmFsdWVzLCBudW1PcHRpb25z
LCAKQEAgLTEwOCw2ICsxMjUsMjUgQEAgc3RhdGljIENGRGljdGlvbmFyeVJlZiBpbWFnZVNvdXJj
ZU9wdGlvbnMoSW1hZ2VTb3VyY2U6OlNob3VsZFNraXBNZXRhZGF0YSBza2lwTWUKICAgICB9CiAg
ICAgcmV0dXJuIG9wdGlvbnM7CiB9CisjZWxzZQorQ0ZEaWN0aW9uYXJ5UmVmIEltYWdlU291cmNl
OjppbWFnZVNvdXJjZU9wdGlvbnMoU2hvdWxkU2tpcE1ldGFkYXRhIHNraXBNZXRhRGF0YSwgaW50
IHJlcXVlc3RlZFN1YnNhbXBsaW5nKSBjb25zdAoreworICAgIHN0YXRpYyBDRkRpY3Rpb25hcnlS
ZWYgb3B0aW9uc1s0XSA9IHtudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyfTsKKyAg
ICBpbnQgc3Vic2FtcGxpbmcgPSBzdGQ6Om1pbigzLCBtX2lzUHJvZ3Jlc3NpdmUgfHwgcmVxdWVz
dGVkU3Vic2FtcGxpbmcgPCAwID8gMCA6IChyZXF1ZXN0ZWRTdWJzYW1wbGluZyArIG1fYmFzZVN1
YnNhbXBsaW5nKSk7CisKKyAgICBpZiAoIW9wdGlvbnNbc3Vic2FtcGxpbmddKSB7CisgICAgICAg
IGludCBzdWJzYW1wbGVJbnQgPSAxIDw8IHN1YnNhbXBsaW5nOyAvLyBbMC4uM10gPT4gWzEsIDIs
IDQsIDhdCisgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gc3Vic2FtcGxlTnVtYmVyID0g
YWRvcHRDRihDRk51bWJlckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVySW50VHlwZSwgICZzdWJz
YW1wbGVJbnQpKTsKKyAgICAgICAgY29uc3QgQ0ZJbmRleCBudW1PcHRpb25zID0gNTsKKyAgICAg
ICAgY29uc3QgQ0ZCb29sZWFuUmVmIGltYWdlU291cmNlU2tpcE1ldGFEYXRhID0gKHNraXBNZXRh
RGF0YSA9PSBJbWFnZVNvdXJjZTo6U2tpcE1ldGFkYXRhKSA/IGtDRkJvb2xlYW5UcnVlIDoga0NG
Qm9vbGVhbkZhbHNlOworICAgICAgICBjb25zdCBDRkJvb2xlYW5SZWYgYWNjZWxlcmF0ZWRJbWFn
ZURlY29kaW5nID0gSW1hZ2VTb3VyY2U6OnNfYWNjZWxlcmF0ZWRJbWFnZURlY29kaW5nID8ga0NG
Qm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2U7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleXNb
bnVtT3B0aW9uc10gPSB7IGtDR0ltYWdlU291cmNlU2hvdWxkQ2FjaGUsIGtDR0ltYWdlU291cmNl
U2hvdWxkUHJlZmVyUkdCMzIsIGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yLCBrQ0dJbWFn
ZVNvdXJjZVNraXBNZXRhZGF0YSwga0NHSW1hZ2VTb3VyY2VVc2VIYXJkd2FyZUFjY2VsZXJhdGlv
biB9OworICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZXNbbnVtT3B0aW9uc10gPSB7IGtDRkJvb2xl
YW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwgc3Vic2FtcGxlTnVtYmVyLmdldCgpLCBpbWFnZVNvdXJj
ZVNraXBNZXRhRGF0YSwgYWNjZWxlcmF0ZWRJbWFnZURlY29kaW5nIH07CisgICAgICAgIG9wdGlv
bnNbc3Vic2FtcGxpbmddID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKG51bGxwdHIsIGtleXMsIHZhbHVl
cywgbnVtT3B0aW9ucywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURp
Y3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgfQorICAgIHJldHVybiBvcHRpb25zW3N1YnNh
bXBsaW5nXTsKK30KKyNlbmRpZgogCiBib29sIEltYWdlU291cmNlOjppbml0aWFsaXplZCgpIGNv
bnN0CiB7CkBAIC0xOTcsNiArMjMzLDM4IEBAIEludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6
ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24KICAgICBp
ZiAobnVtKQogICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwg
JmgpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmICghbV9pc1Byb2dyZXNzaXZlKSB7Cisg
ICAgICAgIENGRGljdGlvbmFyeVJlZiBqZmlmUHJvcGVydGllcyA9IHN0YXRpY19jYXN0PENGRGlj
dGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1h
Z2VQcm9wZXJ0eUpGSUZEaWN0aW9uYXJ5KSk7CisgICAgICAgIGlmIChqZmlmUHJvcGVydGllcykg
eworICAgICAgICAgICAgQ0ZCb29sZWFuUmVmIGlzUHJvZ0NGQm9vbCA9IHN0YXRpY19jYXN0PENG
Qm9vbGVhblJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoamZpZlByb3BlcnRpZXMsIGtDR0ltYWdl
UHJvcGVydHlKRklGSXNQcm9ncmVzc2l2ZSkpOworICAgICAgICAgICAgaWYgKGlzUHJvZ0NGQm9v
bCkKKyAgICAgICAgICAgICAgICBtX2lzUHJvZ3Jlc3NpdmUgPSBDRkJvb2xlYW5HZXRWYWx1ZShp
c1Byb2dDRkJvb2wpOworICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9i
bGVtLzUxODQ2NTU+IC0gSGFuZyByZW5kZXJpbmcgdmVyeSBsYXJnZSBwcm9ncmVzc2l2ZSBKUEVH
LiBEZWNvZGluZyBwcm9ncmVzc2l2ZQorICAgICAgICAgICAgLy8gaW1hZ2VzIGhhbmdzIGZvciBh
IHZlcnkgbG9uZyB0aW1lIHJpZ2h0IG5vdy4gVW50aWwgdGhpcyBpcyBmaXhlZCwgZG9uJ3Qgc3Vi
LXNhbXBsZSBwcm9ncmVzc2l2ZSBpbWFnZXMuIFRoaXMKKyAgICAgICAgICAgIC8vIHdpbGwgY2F1
c2UgdGhlbSB0byBmYWlsIG91ciBsYXJnZSBpbWFnZSBjaGVjayBhbmQgdGhleSB3b24ndCBiZSBk
ZWNvZGVkLgorICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIHVuZGVybHlpbmcgaXNz
dWUgaXMgZml4ZWQgKDxyZGFyOi8vcHJvYmxlbS81MTkxNDE4PikKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICgobV9iYXNlU3Vic2FtcGxpbmcgPT0gMCkgJiYgIW1faXNQcm9ncmVzc2l2ZSkg
eworICAgICAgICBJbnRTaXplIHN1YnNhbXBsZWRTaXplKHcsIGgpOworICAgICAgICBjb25zdCBp
bnQgY01heGltdW1JbWFnZVNpemVCZWZvcmVTdWJzYW1wbGluZyA9IDUgKiAxMDI0ICogMTAyNDsK
KyAgICAgICAgd2hpbGUgKChtX2Jhc2VTdWJzYW1wbGluZyA8IDMpICYmIHN1YnNhbXBsZWRTaXpl
LndpZHRoKCkgKiBzdWJzYW1wbGVkU2l6ZS5oZWlnaHQoKSA+IGNNYXhpbXVtSW1hZ2VTaXplQmVm
b3JlU3Vic2FtcGxpbmcpIHsKKyAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIHNpemUsIGJ1dCB0
aGUgYWN0dWFsIGltYWdlIGlzIHZlcnkgbGFyZ2UgYW5kIHNob3VsZCBiZSBzdWItc2FtcGxlZC4K
KyAgICAgICAgICAgIC8vIEluY3JlYXNlIHRoZSBiYXNlIHN1YnNhbXBsaW5nIGFuZCBhc2sgZm9y
IHRoZSBzaXplIGFnYWluLiBJZiB0aGUgaW1hZ2UgY2FuIGJlIHN1YnNhbXBsZWQsIHRoZSBzaXpl
IHdpbGwgYmUKKyAgICAgICAgICAgIC8vIGdyZWF0bHkgcmVkdWNlZC4gNHggc3ViLXNhbXBsaW5n
IHdpbGwgbWFrZSB1cyBzdXBwb3J0IHVwIHRvIDMyME1QICg1TVAgKiA0XjMpIGltYWdlcywgd2hp
Y2ggc2hvdWxkIGJlIHBsZW50eS4KKyAgICAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gY2FsbGJhY2sg
ZnJvbSBJbWFnZUlPIHdoZW4gdGhlIHNpemUgaXMgYXZhaWxhYmxlLCBzbyB3ZSBkbyB0aGUgY2hl
Y2sgd2hlbiB3ZSBoYXBwZW4KKyAgICAgICAgICAgIC8vIHRvIGNoZWNrIHRoZSBzaXplIGFuZCBp
dHMgbm9uIC0gemVyby4KKyAgICAgICAgICAgIC8vIE5vdGU6IFNvbWUgY2xpZW50cyBvZiB0aGlz
IGNsYXNzIGRvbid0IGNhbGwgaXNTaXplQXZhaWxhYmxlKCkgc28gd2UgY2FuJ3QgcmVseSBvbiB0
aGF0LgorICAgICAgICAgICAgKyttX2Jhc2VTdWJzYW1wbGluZzsKKyAgICAgICAgICAgIHN1YnNh
bXBsZWRTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgZGVzY3JpcHRpb24ucmVzcGVjdElt
YWdlT3JpZW50YXRpb24oKSk7CisgICAgICAgIH0KKyAgICAgICAgdyA9IHN1YnNhbXBsZWRTaXpl
LndpZHRoKCk7CisgICAgICAgIGggPSBzdWJzYW1wbGVkU2l6ZS5oZWlnaHQoKTsKKyAgICB9Cisj
ZW5kaWYKKwogICAgIGlmICgoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9
PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgJiYgb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhw
cm9wZXJ0aWVzLmdldCgpKS51c2VzV2lkdGhBc0hlaWdodCgpKQogICAgICAgICByZXR1cm4gSW50
U2l6ZShoLCB3KTsKIApAQCAtMjEyLDYgKzI4MCwzMSBAQCBJbWFnZU9yaWVudGF0aW9uIEltYWdl
U291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHJldHVy
biBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkpOwogfQogCisjaWYg
UExBVEZPUk0oSU9TKQorSW50U2l6ZSBJbWFnZVNvdXJjZTo6b3JpZ2luYWxTaXplKFJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0T3JpZW50YXRpb24pIGNvbnN0Cit7Cisg
ICAgZnJhbWVTaXplQXRJbmRleCgwLCBzaG91bGRSZXNwZWN0T3JpZW50YXRpb24pOworICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3Vy
Y2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMo
U2tpcE1ldGFkYXRhLCAtMSkpKTsKKworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0
dXJuIEludFNpemUoKTsKKworICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7
CisgICAgQ0ZOdW1iZXJSZWYgbnVtYmVyID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZh
bHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKTsKKyAgICBp
ZiAobnVtYmVyKQorICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVtYmVySW50
VHlwZSwgJndpZHRoKTsKKyAgICBudW1iZXIgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVs
SGVpZ2h0KSk7CisgICAgaWYgKG51bWJlcikKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW1i
ZXIsIGtDRk51bWJlckludFR5cGUsICZoZWlnaHQpOworCisgICAgaWYgKChzaG91bGRSZXNwZWN0
T3JpZW50YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pICYmIG9yaWVudGF0aW9uRnJv
bVByb3BlcnRpZXMocHJvcGVydGllcy5nZXQoKSkudXNlc1dpZHRoQXNIZWlnaHQoKSkKKyAgICAg
ICAgcmV0dXJuIEludFNpemUoaGVpZ2h0LCB3aWR0aCk7CisKKyAgICByZXR1cm4gSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KTsKK30KKyNlbmRpZgorCiBJbnRTaXplIEltYWdlU291cmNlOjpzaXplKElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICByZXR1
cm4gZnJhbWVTaXplQXRJbmRleCgwLCBkZXNjcmlwdGlvbik7CkBAIC0yODYsNyArMzc5LDM2IEBA
IENHSW1hZ2VSZWYgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgs
IGZsb2F0KiBzY2FsZSkKICAgICBpZiAoIWluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybiAw
OwogCisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0oc2NhbGUpOwogICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUlt
YWdlQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoU2tpcE1ldGFk
YXRhKSkpOworI2Vsc2UKKyAgICAvLyBTdWJzYW1wbGluZyBjYW4gYmUgMSwgMiBvciAzLCB3aGlj
aCBtZWFucyBxdWFydGVyLSwgc2l4dGVlbnRoLSBhbmQgc2l4dHktZm91cnRoLXNpemUsIHJlc3Bl
Y3RpdmVseS4KKyAgICAvLyBBIHplcm8gb3IgbmVnYXRpdmUgdmFsdWUgbWVhbnMgbm8gc3Vic2Ft
cGxpbmcuCisgICAgaW50IHN1YnNhbXBsaW5nID0gc2NhbGUgPyBzdGF0aWNfY2FzdDxpbnQ+KGxv
ZzJmKDEuMGYgLyBzdGQ6Om1heCgwLjFmLCBzdGQ6Om1pbigxLjBmLCAqc2NhbGUpKSkpIDogLTE7
CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihDR0ltYWdlU291cmNl
Q3JlYXRlSW1hZ2VBdEluZGV4KG1fZGVjb2RlciwgaW5kZXgsIGltYWdlU291cmNlT3B0aW9ucyhT
a2lwTWV0YWRhdGEsIHN1YnNhbXBsaW5nKSkpOworCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzcz
NzExOTg+IC0gQ29yZUdyYXBoaWNzIGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlv
dXIgaW4gaU9TIDQuMCB0byBrQ0dJbWFnZUNhY2hpbmdUcmFuc2llbnQKKyAgICAvLyB3aGljaCBj
YXVzZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhh
ZCB0byBiZSByZXNhbXBsZWQvcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCisgICAgLy8g
Q0dDb250ZXh0RHJhd0ltYWdlLiBXZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1h
Z2VzLiBTZWUgYWxzbyA8cmRhcjovL3Byb2JsZW0vMTQzNjY3NTU+IC0KKyAgICAvLyBDb3JlR3Jh
cGhpY3MgbmVlZHMgdG8gdW4tZGVwcmVjYXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5j
ZSBpdCdzIHN0aWxsIG5vdCB0aGUgZGVmYXVsdC4KKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyNlbmRpZgorICAgIENHSW1hZ2VTZXRDYWNo
aW5nRmxhZ3MoaW1hZ2UuZ2V0KCksIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSk7CisjaWYgQ09N
UElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKyAgICBp
ZiAoc2NhbGUpIHsKKyAgICAgICAgaWYgKHN1YnNhbXBsaW5nID4gMCkKKyAgICAgICAgICAgICpz
Y2FsZSA9IHN0YXRpY19jYXN0PGZsb2F0PihDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpKSAv
IHNpemUoRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikud2lkdGgoKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihDR0ltYWdlR2V0V2lkdGgo
aW1hZ2UuZ2V0KCkpKSA9PSBzaXplKERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pLndpZHRo
KCkpOworICAgICAgICAgICAgKnNjYWxlID0gMTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAv
LyAhUExBVEZPUk0oSU9TKQogICAgIENGU3RyaW5nUmVmIGltYWdlVVRJID0gQ0dJbWFnZVNvdXJj
ZUdldFR5cGUobV9kZWNvZGVyKTsKICAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgeGJtVVRJ
ID0gQ0ZTVFIoInB1YmxpYy54Yml0bWFwLWltYWdlIik7CiAgICAgaWYgKCFpbWFnZVVUSSB8fCAh
Q0ZFcXVhbChpbWFnZVVUSSwgeGJtVVRJKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCmluZGV4IDk1M2JjYjlkMjhh
ZDBlYjc1YWIzODgxM2MzNDM5NDU1ZjEyNjJjNzYuLmVkZjllNDkwZTZmZmJlNTgwNjJlMDRiODdk
NmZmZDZiM2YzNzJiMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpAQCAtMjksNiArMjksMjEgQEAKICNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisj
aWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCisjaW5jbHVkZSA8TW9i
aWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgorCitTT0ZUX0xJTktfRlJBTUVX
T1JLKE1vYmlsZUNvcmVTZXJ2aWNlcykKKworU09GVF9MSU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywg
VVRUeXBlQ29weVByZWZlcnJlZFRhZ1dpdGhDbGFzcywgQ0ZTdHJpbmdSZWYsIChDRlN0cmluZ1Jl
ZiBpblVUSSwgQ0ZTdHJpbmdSZWYgaW5UYWdDbGFzcyksIChpblVUSSwgaW5UYWdDbGFzcykpCisK
K1NPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFRhZ0NsYXNzRmlsZW5h
bWVFeHRlbnNpb24sIENGU3RyaW5nUmVmKQorU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVT
ZXJ2aWNlcywga1VUVGFnQ2xhc3NNSU1FVHlwZSwgQ0ZTdHJpbmdSZWYpCisKKyNkZWZpbmUga1VU
VGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiBnZXRrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9u
KCkKKyNkZWZpbmUga1VUVGFnQ2xhc3NNSU1FVHlwZSBnZXRrVVRUYWdDbGFzc01JTUVUeXBlKCkK
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFN0cmluZyBNSU1FVHlwZUZvckltYWdl
U291cmNlVHlwZShjb25zdCBTdHJpbmcmIHV0aSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKaW5kZXggNzA4ZmNjMmUxZGZmZGE5Yzk0
MzI3NmU1MGFhNDQ4MDBmOWZkMmViOC4uYmQwNDU3NGM3ZDY5ZjVhZWIyMjdkNzBiNGY4ODViNTU1
YjIwMmQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW50UG9pbnRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW50UG9pbnRDRy5jcHAKQEAgLTI4LDcgKzI4LDExIEBACiAKICNpZiBVU0UoQ0cpCiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25T
ZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENHLmNwcAppbmRleCA4ZDEwMjA3YmY5Zjg3NWFh
MmQ3ZjZlNzBhYjNiN2NlYjYzZDk5NWQ0Li5kMWY3YjJlNTcwODhhOWJkYjRhYjQ0OGM4MDM2NTkx
ZmUxN2YyMmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbnRSZWN0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ludFJlY3RDRy5jcHAKQEAgLTI4LDcgKzI4LDExIEBACiAKICNpZiBVU0UoQ0cpCiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25T
ZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXplQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcAppbmRleCA0MWZiMzk5ZTM1NWNhMDEz
NjNjMDZmN2I0MTA3YjJkNmY5YmY4NGYyLi5lNWQwYjgyNGRkNmFjYTVhNmYyMzYwNjBiNGJjNjVk
NzMwOWMzYjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbnRTaXplQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ludFNpemVDRy5jcHAKQEAgLTI4LDcgKzI4LDExIEBACiAKICNpZiBVU0UoQ0cpCiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25T
ZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDU2
ZmRkNTk3NzQ5MTUwMDEwOGY5OWQ0ZjExODBjOGE4N2JkYmE2YjkuLjExM2ZhOTc5NzY0NzRiOTk4
NzFiMjY2NjkwODliODM2NjExM2Y3OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC0yOSw2ICsyOSwx
MyBAQAogCiAjaWYgVVNFKENHKQogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8Q29yZUdy
YXBoaWNzL0NHQ29udGV4dFByaXZhdGUuaD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0NvbnRl
eHRHU3RhdGUuaD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbXBv
cnQgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2VuZGlmCisKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCmlu
ZGV4IGZlOWY3ODQ0MDUzOGJhYWIyYzU5MDFmMmUxZWNiOThhYjNjMTRhYzIuLjMzYmQ4OTE3Yjcy
ZGMzYTcwMTY0Nzc0MjhmN2UzZjQxZjJmMjUwYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcApAQCAtMzQsNyArMzQsMTIgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiU3Ry
b2tlU3R5bGVBcHBsaWVyLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NHUGF0aFByaXZhdGUuaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdy
YXBoaWNzLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCmluZGV4
IDBjZDUyOWVhYmU5MWE1ODljYjg1YTYzM2RmNGY3OWFhN2UyMTNhODYuLjBjMDgwNDhjYjJiZjIy
YzE3MjI3YzZmMzk4NmY1ZmUyZDA4MzUxZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcApAQCAtMjksNyArMjksMTIgQEAKIAogI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
CisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxp
Y2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFw
aGljcy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogI2lmIFBMQVRG
T1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQppbmRleCBhOTE1ZDI3Y2UwODRm
ODA2ZDVkZTA4NjFkYWFkMWM5ZTY0ZTY3ZDMxLi43Yjc2MzJhZDQxMDA3Zjk2MjI5NTAyNzRjYzAz
ZmRiZDNmMGE4ODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC0yNSw3ICsy
NSwxMyBAQAogI2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0YS5oIgogCiAjaW1wb3J0ICJXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbXBvcnQgPEFwcEtpdC9O
U0ZvbnQuaD4KKyNlbHNlCisjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorI2ltcG9ydCA8
Q29yZUdyYXBoaWNzL0NHRm9udEluZm8uaD4KKyNlbmRpZgorCiAjaW1wb3J0IDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzMsMTQgKzM5LDE1IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIC8vIFRoZXNlIENvcmVUZXh0IFRleHQgU3BhY2luZyBmZWF0dXJl
IHNlbGVjdG9ycyBhcmUgbm90IGRlZmluZWQgaW4gQ29yZVRleHQuCiBlbnVtIFRleHRTcGFjaW5n
Q1RGZWF0dXJlU2VsZWN0b3IgeyBUZXh0U3BhY2luZ1Byb3BvcnRpb25hbCwgVGV4dFNwYWNpbmdG
dWxsV2lkdGgsIFRleHRTcGFjaW5nSGFsZldpZHRoLCBUZXh0U3BhY2luZ1RoaXJkV2lkdGgsIFRl
eHRTcGFjaW5nUXVhcnRlcldpZHRoIH07CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogdm9pZCBGb250UGxhdGZvcm1EYXRhOjpsb2FkRm9u
dChOU0ZvbnQqIG5zRm9udCwgZmxvYXQsIE5TRm9udComIG91dE5TRm9udCwgQ0dGb250UmVmJiBj
Z0ZvbnQpCiB7CiAgICAgb3V0TlNGb250ID0gbnNGb250OwogICAgIGNnRm9udCA9IENURm9udENv
cHlHcmFwaGljc0ZvbnQodG9DVEZvbnRSZWYobnNGb250KSwgMCk7CiB9Ci0jZW5kaWYgIC8vIFBM
QVRGT1JNKE1BQykKKyNlbmRpZiAgLy8gUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQog
CisjaWYgIVBMQVRGT1JNKElPUykKIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
TlNGb250ICpuc0ZvbnQsIGZsb2F0IHNpemUsIGJvb2wgaXNQcmludGVyRm9udCwgYm9vbCBzeW50
aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQpCiAgICAgOiBtX3N5bnRoZXRpY0Jv
bGQoc3ludGhldGljQm9sZCkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShzeW50aGV0aWNPYmxp
cXVlKQpAQCAtNDksOSArNTYsMjIgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShOU0ZvbnQgKm5zRm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJGb24KICAgICAsIG1f
d2lkdGhWYXJpYW50KHdpZHRoVmFyaWFudCkKICAgICAsIG1fZm9udChuc0ZvbnQpCiAgICAgLCBt
X2lzQ29sb3JCaXRtYXBGb250KGZhbHNlKQorI2Vsc2UKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEoQ1RGb250UmVmIGN0Rm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJG
b250LCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCkKKyAgICA6
IG1fc3ludGhldGljQm9sZChzeW50aGV0aWNCb2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVl
KHN5bnRoZXRpY09ibGlxdWUpCisgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQorICAg
ICwgbV9pc0Vtb2ppKGZhbHNlKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3dpZHRoVmFy
aWFudCh3aWR0aFZhcmlhbnQpCisgICAgLCBtX2ZvbnQoY3RGb250KQorICAgICwgbV9jZ0ZvbnQo
YWRvcHRDRihDVEZvbnRDb3B5R3JhcGhpY3NGb250KGN0Rm9udCwgTlVMTCkpKQorICAgICwgbV9p
c0NvbG9yQml0bWFwRm9udChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpICYga0NURm9u
dFRyYWl0Q29sb3JHbHlwaHMpCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKICAgICAsIG1faXND
b21wb3NpdGVGb250UmVmZXJlbmNlKGZhbHNlKQogICAgICwgbV9pc1ByaW50ZXJGb250KGlzUHJp
bnRlckZvbnQpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBBU1NFUlRfQVJHKG5zRm9udCwg
bnNGb250KTsKIAogICAgIENHRm9udFJlZiBjZ0ZvbnQgPSAwOwpAQCAtNjgsMTggKzg4LDM1IEBA
IEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoTlNGb250ICpuc0ZvbnQsIGZsb2F0
IHNpemUsIGJvb2wgaXNQcmludGVyRm9uCiAgICAgICAgIENGUmV0YWluKG1fZm9udCk7CiAKICAg
ICBtX2NnRm9udCA9IGFkb3B0Q0YoY2dGb250KTsKKyNlbHNlCisgICAgQVNTRVJUX0FSRyhjdEZv
bnQsIGN0Rm9udCk7CisKKyAgICBDRlJldGFpbihjdEZvbnQpOworI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCiB9CiAKLUZvbnRQbGF0Zm9ybURhdGE6OiB+Rm9udFBsYXRmb3JtRGF0YSgpCitGb250
UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCiB7CisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICBpZiAobV9mb250ICYmIG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PE5TRm9udCAqPigt
MSkpCiAgICAgICAgIENGUmVsZWFzZShtX2ZvbnQpOworI2Vsc2UKKyAgICBpZiAobV9mb250ICYm
IG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpKQorICAgICAgICBDRlJl
bGVhc2UobV9mb250KTsKKyNlbmRpZgogfQogCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRm
b3JtRGF0YUluaXQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZikKIHsKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgIG1fZm9udCA9IGYubV9mb250ICYmIGYubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nh
c3Q8TlNGb250ICo+KC0xKSA/IGNvbnN0X2Nhc3Q8TlNGb250ICo+KHN0YXRpY19jYXN0PGNvbnN0
IE5TRm9udCAqPihDRlJldGFpbihmLm1fZm9udCkpKSA6IGYubV9mb250OworI2Vsc2UKKyAgICBt
X2ZvbnQgPSBmLm1fZm9udCAmJiBmLm1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJl
Zj4oLTEpID8gc3RhdGljX2Nhc3Q8Q1RGb250UmVmPihjb25zdF9jYXN0PHZvaWQgKj4oQ0ZSZXRh
aW4oZi5tX2ZvbnQpKSkgOiBmLm1fZm9udDsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIG1faXNFbW9qaSA9IGYubV9pc0Vtb2ppOworI2VuZGlmCiAgICAgbV9jZ0ZvbnQgPSBmLm1f
Y2dGb250OwogICAgIG1fQ1RGb250ID0gZi5tX0NURm9udDsKIH0KQEAgLTg3LDEyICsxMjQsMjQg
QEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIGYpCiBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpw
bGF0Zm9ybURhdGFBc3NpZ24oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZikKIHsKICAgICBtX2Nn
Rm9udCA9IGYubV9jZ0ZvbnQ7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIG1faXNFbW9qaSA9IGYu
bV9pc0Vtb2ppOworI2VuZGlmCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAobV9mb250ID09
IGYubV9mb250KQogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgaWYgKGYubV9mb250ICYmIGYu
bV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKSkKICAgICAgICAgQ0ZSZXRh
aW4oZi5tX2ZvbnQpOwogICAgIGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nh
c3Q8TlNGb250ICo+KC0xKSkKICAgICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7CisjZWxzZQorICAg
IGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Q1RGb250UmVmPigtMSkg
JiYgZi5tX2ZvbnQgJiYgZi5tX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0x
KSAmJiBDRkVxdWFsKG1fZm9udCwgZi5tX2ZvbnQpKQorICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgaWYgKGYubV9mb250ICYmIGYubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Q1RGb250UmVm
PigtMSkpCisgICAgICAgIENGUmV0YWluKGYubV9mb250KTsKKyAgICBpZiAobV9mb250ICYmIG1f
Zm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpKQorICAgICAgICBDRlJlbGVh
c2UobV9mb250KTsKKyNlbmRpZgogICAgIG1fZm9udCA9IGYubV9mb250OwogICAgIG1fQ1RGb250
ID0gZi5tX0NURm9udDsKICAgICByZXR1cm4gKnRoaXM7CkBAIC0xMDAsMTEgKzE0OSwyOSBAQCBj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFBc3Np
Z24oY29uc3QgRm9udFBsYXRmb3JtRAogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3Jt
SXNFcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKIHsKLSAgICBpZiAo
bV9mb250IHx8IG90aGVyLm1fZm9udCkKLSAgICAgICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5t
X2ZvbnQ7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBpZiAobV9mb250IHx8IG90aGVy
Lm1fZm9udCkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgcmVzdWx0ID0gbV9mb250ICYm
IG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpICYmIG90aGVyLm1fZm9u
dCAmJiBvdGhlci5tX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSAmJiBD
RkVxdWFsKG1fZm9udCwgb3RoZXIubV9mb250KTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
ICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBBU1NFUlQobV9pc0Vtb2ppID09IG90aGVyLm1f
aXNFbW9qaSk7CisjZW5kaWYKKyNlbHNlCisgICAgICAgIHJlc3VsdCA9IG1fZm9udCA9PSBvdGhl
ci5tX2ZvbnQ7CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyNpZiBQTEFURk9STShJT1MpCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGlm
IChtX2NnRm9udCA9PSBvdGhlci5tX2NnRm9udCkKKyAgICAgICAgQVNTRVJUKG1faXNFbW9qaSA9
PSBvdGhlci5tX2lzRW1vamkpOworI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogICAg
IHJldHVybiBtX2NnRm9udCA9PSBvdGhlci5tX2NnRm9udDsKIH0KIAorI2lmICFQTEFURk9STShJ
T1MpCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldEZvbnQoTlNGb250ICpmb250KQogewogICAg
IEFTU0VSVF9BUkcoZm9udCwgZm9udCk7CkBAIC0xMzMsMTUgKzIwMCw0MyBAQCB2b2lkIEZvbnRQ
bGF0Zm9ybURhdGE6OnNldEZvbnQoTlNGb250ICpmb250KQogICAgIH0KICAgICBtX0NURm9udCA9
IDA7CiB9CisjZWxzZQordm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KENURm9udFJlZiBm
b250KQoreworICAgIEFTU0VSVF9BUkcoZm9udCwgZm9udCk7CisgICAgQVNTRVJUKG1fZm9udCAh
PSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpKTsKIAorICAgIGlmIChtX2ZvbnQgPT0g
Zm9udCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZSZXRhaW4oZm9udCk7CisgICAgaWYgKG1f
Zm9udCkKKyAgICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7CisgICAgbV9mb250ID0gZm9udDsKKyAg
ICBtX3NpemUgPSBDVEZvbnRHZXRTaXplKGZvbnQpOworICAgIG1fY2dGb250ID0gYWRvcHRDRihD
VEZvbnRDb3B5R3JhcGhpY3NGb250KGZvbnQsIG51bGxwdHIpKTsKKyAgICBtX2lzQ29sb3JCaXRt
YXBGb250ID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCkgJiBrQ1RGb250VHJhaXRDb2xv
ckdseXBoczsKK30KKyNlbmRpZgorCisjaWYgIVBMQVRGT1JNKElPUykKIGJvb2wgRm9udFBsYXRm
b3JtRGF0YTo6cm91bmRzR2x5cGhBZHZhbmNlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX2Zv
bnQgcmVuZGVyaW5nTW9kZV0gPT0gTlNGb250QW50aWFsaWFzZWRJbnRlZ2VyQWR2YW5jZW1lbnRz
UmVuZGVyaW5nTW9kZTsKIH0KKyNlbmRpZgogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OmFsbG93
c0xpZ2F0dXJlcygpIGNvbnN0CiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gIVtb
bV9mb250IGNvdmVyZWRDaGFyYWN0ZXJTZXRdIGNoYXJhY3RlcklzTWVtYmVyOidhJ107CisjZWxz
ZQorICAgIGlmICghbV9mb250KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5Q
dHI8Q0ZDaGFyYWN0ZXJTZXRSZWY+IGNoYXJhY3RlclNldCA9IGFkb3B0Q0YoQ1RGb250Q29weUNo
YXJhY3RlclNldChjdEZvbnQoKSkpOworICAgIHJldHVybiAhKGNoYXJhY3RlclNldC5nZXQoKSAm
JiBDRkNoYXJhY3RlclNldElzQ2hhcmFjdGVyTWVtYmVyKGNoYXJhY3RlclNldC5nZXQoKSwgJ2En
KSk7CisjZW5kaWYKIH0KIAogaW5saW5lIGludCBtYXBGb250V2lkdGhWYXJpYW50VG9DVEZlYXR1
cmVTZWxlY3RvcihGb250V2lkdGhWYXJpYW50IHZhcmlhbnQpCkBAIC0yMTcsNiArMzEyLDcgQEAg
Q1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0CiAgICAgaWYgKG1fQ1RG
b250KQogICAgICAgICByZXR1cm4gbV9DVEZvbnQuZ2V0KCk7CiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIG1fQ1RGb250ID0gdG9DVEZvbnRSZWYobV9mb250KTsKICAgICBpZiAobV9DVEZvbnQp
IHsKICAgICAgICAgQ1RGb250RGVzY3JpcHRvclJlZiBmb250RGVzY3JpcHRvcjsKQEAgLTIyOSw2
ICszMjUsMTcgQEAgQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0CiAg
ICAgICAgIG1fQ1RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMo
bV9DVEZvbnQuZ2V0KCksIG1fc2l6ZSwgMCwgZm9udERlc2NyaXB0b3IpKTsKICAgICB9IGVsc2UK
ICAgICAgICAgbV9DVEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQo
bV9jZ0ZvbnQuZ2V0KCksIG1fc2l6ZSwgMCwgY2FzY2FkZVRvTGFzdFJlc29ydEZvbnREZXNjcmlw
dG9yKCkpKTsKKyNlbHNlCisgICAgLy8gQXBwbGUgQ29sb3IgRW1vamkgc2l6ZSBpcyBhZGp1c3Rl
ZCAoYW5kIHRoZW4gcmUtYWRqdXN0ZWQgYnkgQ29yZSBUZXh0KSBhbmQgY2FwcGVkLgorICAgIENH
RmxvYXQgc2l6ZSA9ICFtX2lzRW1vamkgPyBtX3NpemUgOiBtX3NpemUgPD0gMTUgPyA0ICogKG1f
c2l6ZSArIDIpIC8gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oNSkgOiAxNjsKKyAgICBDVEZvbnREZXNj
cmlwdG9yUmVmIGZvbnREZXNjcmlwdG9yOworICAgIGNvbnN0IGNoYXIqIHBvc3RTY3JpcHROYW1l
ID0gQ0dGb250R2V0UG9zdFNjcmlwdE5hbWUobV9jZ0ZvbnQuZ2V0KCkpOworICAgIGlmIChwb3N0
U2NyaXB0TmFtZSAmJiAoIXN0cmNtcChwb3N0U2NyaXB0TmFtZSwgIkhvZWZsZXJUZXh0LUl0YWxp
YyIpIHx8ICFzdHJjbXAocG9zdFNjcmlwdE5hbWUsICJIb2VmbGVyVGV4dC1CbGFja0l0YWxpYyIp
KSkKKyAgICAgICAgZm9udERlc2NyaXB0b3IgPSBjYXNjYWRlVG9MYXN0UmVzb3J0QW5kRGlzYWJs
ZVN3YXNoZXNGb250RGVzY3JpcHRvcigpOworICAgIGVsc2UKKyAgICAgICAgZm9udERlc2NyaXB0
b3IgPSBjYXNjYWRlVG9MYXN0UmVzb3J0Rm9udERlc2NyaXB0b3IoKTsKKyAgICBtX0NURm9udCA9
IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEdyYXBoaWNzRm9udChtX2NnRm9udC5nZXQoKSwgc2l6
ZSwgMCwgZm9udERlc2NyaXB0b3IpKTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAgICAg
aWYgKG1fd2lkdGhWYXJpYW50ICE9IFJlZ3VsYXJXaWR0aCkgewogICAgICAgICBpbnQgZmVhdHVy
ZVR5cGVWYWx1ZSA9IGtUZXh0U3BhY2luZ1R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRGlzcGxheVJlZnJlc2hNb25pdG9yaU9TLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcmlP
Uy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ODA0M2NhYWVjYzgwNTViNDhiYzAyZmUwMzVjYmY2OWYyMTlhZWMw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9z
L0Rpc3BsYXlSZWZyZXNoTW9uaXRvcmlPUy5tbQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9O
SVRPUikKKworI2luY2x1ZGUgIkRpc3BsYXlSZWZyZXNoTW9uaXRvci5oIgorCisjaW5jbHVkZSA8
UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Cisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgor
CitAaW50ZXJmYWNlIFdlYkRpc3BsYXlMaW5rSGFuZGxlciA6IE5TT2JqZWN0Cit7CisgICAgV2Vi
Q29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yKiBtX21vbml0b3I7CisgICAgQ0FEaXNwbGF5TGlu
ayogbV9kaXNwbGF5TGluazsKK30KKworLSAoaWQpaW5pdFdpdGhNb25pdG9yOihXZWJDb3JlOjpE
aXNwbGF5UmVmcmVzaE1vbml0b3IqKW1vbml0b3I7CistICh2b2lkKWhhbmRsZURpc3BsYXlMaW5r
OihDQURpc3BsYXlMaW5rICopc2VuZGVyOworLSAodm9pZClpbnZhbGlkYXRlOworCitAZW5kCisK
K3N0YXRpYyBkb3VibGUgbWVkaWFUaW1lVG9DdXJyZW50VGltZShDRlRpbWVJbnRlcnZhbCB0KQor
eworICAgIHJldHVybiBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSArIHQgLSBDQUN1cnJl
bnRNZWRpYVRpbWUoKTsKK30KKworQGltcGxlbWVudGF0aW9uIFdlYkRpc3BsYXlMaW5rSGFuZGxl
cgorCistIChpZClpbml0V2l0aE1vbml0b3I6KFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRv
ciopbW9uaXRvcgoreworICAgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgICAgIG1f
bW9uaXRvciA9IG1vbml0b3I7CisgICAgICAgIC8vIE5vdGUgdGhhdCBDQURpc3BsYXlMaW5rIHJl
dGFpbnMgaXRzIHRhcmdldCAoc2VsZiksIHNvIGEgY2FsbCB0byAtaW52YWxpZGF0ZSBpcyBuZWVk
ZWQgb24gdGVhcmRvd24uCisgICAgICAgIG1fZGlzcGxheUxpbmsgPSBbQ0FEaXNwbGF5TGluayBk
aXNwbGF5TGlua1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaGFuZGxlRGlzcGxh
eUxpbms6KV07CisgICAgICAgIFttX2Rpc3BsYXlMaW5rIGFkZFRvUnVuTG9vcDpXZWJUaHJlYWRO
U1J1bkxvb3AoKSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKKyAgICB9CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VSVCghbV9kaXNwbGF5
TGluayk7IC8vIC1pbnZhbGlkYXRlIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGFscmVhZHkuCisg
ICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKWhhbmRsZURpc3BsYXlMaW5rOihDQURp
c3BsYXlMaW5rICopc2VuZGVyCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsK
KyAgICBtX21vbml0b3ItPmRpc3BsYXlMaW5rRmlyZWQoc2VuZGVyLnRpbWVzdGFtcCk7Cit9CisK
Ky0gKHZvaWQpaW52YWxpZGF0ZQoreworICAgIFttX2Rpc3BsYXlMaW5rIGludmFsaWRhdGVdOwor
ICAgIG1fZGlzcGxheUxpbmsgPSBudWxscHRyOworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKyAKK0Rpc3BsYXlSZWZyZXNoTW9uaXRvcjo6fkRpc3BsYXlSZWZyZXNoTW9uaXRvcigp
Cit7CisgICAgWyhXZWJEaXNwbGF5TGlua0hhbmRsZXIqKSBtX2Rpc3BsYXlMaW5rIGludmFsaWRh
dGVdOworICAgIFsoV2ViRGlzcGxheUxpbmtIYW5kbGVyKikgbV9kaXNwbGF5TGluayByZWxlYXNl
XTsKK30KKworYm9vbCBEaXNwbGF5UmVmcmVzaE1vbml0b3I6OnJlcXVlc3RSZWZyZXNoQ2FsbGJh
Y2soKQoreworICAgIGlmICghbV9hY3RpdmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgaWYgKCFtX2Rpc3BsYXlMaW5rKSB7CisgICAgICAgIG1fZGlzcGxheUxpbmsgPSBb
W1dlYkRpc3BsYXlMaW5rSGFuZGxlciBhbGxvY10gaW5pdFdpdGhNb25pdG9yOnRoaXNdOworICAg
ICAgICBtX2FjdGl2ZSA9IHRydWU7CisgICAgfQorCisgICAgbV9zY2hlZHVsZWQgPSB0cnVlOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRvcjo6ZGlzcGxh
eUxpbmtGaXJlZChkb3VibGUgbm93U2Vjb25kcykKK3sKKyAgICBpZiAoIW1fcHJldmlvdXNGcmFt
ZURvbmUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJldmlvdXNGcmFtZURvbmUgPSBmYWxz
ZTsKKyAgICBtX21vbm90b25pY0FuaW1hdGlvblN0YXJ0VGltZSA9IG1lZGlhVGltZVRvQ3VycmVu
dFRpbWUobm93U2Vjb25kcyk7CisKKyAgICBoYW5kbGVEaXNwbGF5UmVmcmVzaGVkTm90aWZpY2F0
aW9uT25NYWluVGhyZWFkKHRoaXMpOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVjMmY1
YjVhZmMyZDNhM2ZlZjkwM2RmNTY5NTkwNmE0NzAwZWRiZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KQEAgLTAs
MCArMSw2NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiRm9udENhY2hlLmgiCisKKyNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIlJlbmRlclRo
ZW1lSU9TLmgiCisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ0dGb250VW5pY29kZVN1cHBvcnQuaD4K
KyNpbXBvcnQgPENvcmVUZXh0L0NURm9udERlc2NyaXB0b3JQcml2Lmg+CisjaW1wb3J0IDxDb3Jl
VGV4dC9DVEZvbnRQcml2Lmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAg
ICB3a1NldFVwRm9udENhY2hlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZvbnRXZWln
aHRCb2xkKE5TSW50ZWdlciBmb250V2VpZ2h0KQoreworICAgIHJldHVybiBmb250V2VpZ2h0ID49
IEZvbnRXZWlnaHQ2MDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCByZXF1aXJlc0N1c3RvbUZh
bGxiYWNrRm9udChjb25zdCBVSW50MzIgY2hhcmFjdGVyKQoreworICAgIHJldHVybiBjaGFyYWN0
ZXIgPT0gQXBwbGVMb2dvIHx8IGNoYXJhY3RlciA9PSBibGFja0NpcmNsZTsKK30KKworc3RhdGlj
IENGQ2hhcmFjdGVyU2V0UmVmIGNvcHlGb250Q2hhcmFjdGVyU2V0KENGU3RyaW5nUmVmIGZvbnRO
YW1lKQoreworICAgIC8vIFRoZSBzaXplLCAxMCwgaXMgYXJiaXRyYXJ5LgorICAgIFJldGFpblB0
cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVz
Y3JpcHRvckNyZWF0ZVdpdGhOYW1lQW5kU2l6ZShmb250TmFtZSwgMTApKTsKKyAgICBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBmb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0
b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIDEwLCBudWxscHRyKSk7CisgICAgcmV0dXJuIChDRkNo
YXJhY3RlclNldFJlZilDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250RGVzY3JpcHRv
ci5nZXQoKSwga0NURm9udENoYXJhY3RlclNldEF0dHJpYnV0ZSk7Cit9CisKK3N0YXRpYyBDRkNo
YXJhY3RlclNldFJlZiBhcHBsZUNvbG9yRW1vamlDaGFyYWN0ZXJTZXQoKQoreworICAgIHN0YXRp
YyBDRkNoYXJhY3RlclNldFJlZiBjaGFyYWN0ZXJTZXQgPSBjb3B5Rm9udENoYXJhY3RlclNldChD
RlNUUigiQXBwbGVDb2xvckVtb2ppIikpOworICAgIHJldHVybiBjaGFyYWN0ZXJTZXQ7Cit9CisK
K3N0YXRpYyBDRkNoYXJhY3RlclNldFJlZiBwaG9uZUZhbGxiYWNrQ2hhcmFjdGVyU2V0KCkKK3sK
KyAgICBzdGF0aWMgQ0ZDaGFyYWN0ZXJTZXRSZWYgY2hhcmFjdGVyU2V0ID0gY29weUZvbnRDaGFy
YWN0ZXJTZXQoQ0ZTVFIoIi5QaG9uZUZhbGxiYWNrIikpOworICAgIHJldHVybiBjaGFyYWN0ZXJT
ZXQ7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U3lzdGVt
Rm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0YSwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCit7CisgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
cGxhdGZvcm1EYXRhID0gb3JpZ2luYWxGb250RGF0YS0+cGxhdGZvcm1EYXRhKCk7CisgICAgQ1RG
b250UmVmIGN0Rm9udCA9IHBsYXRmb3JtRGF0YS5mb250KCk7CisKKyAgICBDRkluZGV4IGNvdmVy
ZWRMZW5ndGggPSAwOworICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IHN1YnN0aXR1dGVGb250ID0g
YWRvcHRDRihDVEZvbnRDcmVhdGVQaHlzaWNhbEZvbnRGb3JDaGFyYWN0ZXJzV2l0aExhbmd1YWdl
KGN0Rm9udCwgKGNvbnN0IFVURjE2Q2hhciopY2hhcmFjdGVycywgKENGSW5kZXgpbGVuZ3RoLCAw
LCAmY292ZXJlZExlbmd0aCkpOworICAgIGlmICghc3Vic3RpdHV0ZUZvbnQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgb3JpZ2luYWxUcmFpdHMgPSBDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpOworICAgIENURm9udFN5bWJvbGljVHJhaXRzIGFj
dHVhbFRyYWl0cyA9IDA7CisgICAgaWYgKGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2Vp
Z2h0KCkpIHx8IGRlc2NyaXB0aW9uLml0YWxpYygpKQorICAgICAgICBhY3R1YWxUcmFpdHMgPSBD
VEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhzdWJzdGl0dXRlRm9udC5nZXQoKSk7CisKKyAgICBib29s
IHN5bnRoZXRpY0JvbGQgPSAob3JpZ2luYWxUcmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKSAmJiAh
KGFjdHVhbFRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpOworICAgIGJvb2wgc3ludGhldGljT2Js
aXF1ZSA9IChvcmlnaW5hbFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykgJiYgIShhY3R1YWxU
cmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOworCisgICAgRm9udFBsYXRmb3JtRGF0YSBhbHRl
cm5hdGVGb250KHN1YnN0aXR1dGVGb250LmdldCgpLCBwbGF0Zm9ybURhdGEuc2l6ZSgpLCBwbGF0
Zm9ybURhdGEuaXNQcmludGVyRm9udCgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVl
LCBwbGF0Zm9ybURhdGEubV9vcmllbnRhdGlvbik7CisgICAgYWx0ZXJuYXRlRm9udC5tX2lzRW1v
amkgPSBDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShzdWJzdGl0dXRlRm9udC5nZXQoKSk7CisKKyAg
ICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoJmFsdGVybmF0ZUZvbnQsIERvTm90UmV0YWluKTsK
K30KKworUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFj
a0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBpbnQgbGVuZ3RoKQoreworICAgIHN0YXRpYyBib29sIGlzR0IxODAzMENvbXBsaWFu
Y2VSZXF1aXJlZCA9IHdrSXNHQjE4MDMwQ29tcGxpYW5jZVJlcXVpcmVkKCk7CisKKyAgICAvLyBV
bmxpa2UgT1MgWCwgb3VyIGZhbGxiYWNrIGZvbnQgb24gaVBob25lIGlzIEFyaWFsIFVuaWNvZGUs
IHdoaWNoIGRvZXNuJ3QgaGF2ZSBzb21lIGFwcGxlLXNwZWNpZmljIGdseXBocyBsaWtlIEY4RkYu
CisgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBBcHBsZSBGYWxsYmFjayBmb250IGluIHRoaXMgY2Fz
ZS4KKyAgICBpZiAobGVuZ3RoID4gMCAmJiByZXF1aXJlc0N1c3RvbUZhbGxiYWNrRm9udCgqY2hh
cmFjdGVycykpCisgICAgICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShnZXRDdXN0b21GYWxs
YmFja0ZvbnQoKmNoYXJhY3RlcnMsIGRlc2NyaXB0aW9uKSwgRG9Ob3RSZXRhaW4pOworCisgICAg
VUNoYXIzMiBjID0gKmNoYXJhY3RlcnM7CisgICAgaWYgKGxlbmd0aCA+IDEgJiYgVTE2X0lTX0xF
QUQoYykgJiYgVTE2X0lTX1RSQUlMKGNoYXJhY3RlcnNbMV0pKQorICAgICAgICBjID0gVTE2X0dF
VF9TVVBQTEVNRU5UQVJZKGMsIGNoYXJhY3RlcnNbMV0pOworCisgICAgLy8gRm9yIHN5c3RlbSBm
b250cyB3ZSB1c2UgQ29yZVRleHQgZmFsbGJhY2sgbWVjaGFuaXNtLgorICAgIGlmIChsZW5ndGgp
IHsKKyAgICAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnREZXNjcmlwdG9y
ID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3Iob3JpZ2luYWxGb250RGF0YS0+Z2V0
Q1RGb250KCkpKTsKKyAgICAgICAgaWYgKENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9udChm
b250RGVzY3JpcHRvci5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZ2V0U3lzdGVtRm9udEZh
bGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlvbiwgb3JpZ2luYWxGb250RGF0YSwgY2hhcmFj
dGVycywgbGVuZ3RoKTsKKyAgICB9CisKKyAgICBib29sIHVzZUNKRm9udCA9IGZhbHNlOworICAg
IGJvb2wgdXNlS29yZWFuRm9udCA9IGZhbHNlOworICAgIGJvb2wgdXNlQ3lyaWxsaWNGb250ID0g
ZmFsc2U7CisgICAgYm9vbCB1c2VBcmFiaWNGb250ID0gZmFsc2U7CisgICAgYm9vbCB1c2VIZWJy
ZXdGb250ID0gZmFsc2U7CisgICAgYm9vbCB1c2VJbmRpY0ZvbnQgPSBmYWxzZTsKKyAgICBib29s
IHVzZVRoYWlGb250ID0gZmFsc2U7CisgICAgYm9vbCB1c2VUaWJldGFuRm9udCA9IGZhbHNlOwor
ICAgIGJvb2wgdXNlQ2FuYWRpYW5BYm9yaWdpbmFsU3lsbGFiaWNzRm9udCA9IGZhbHNlOworICAg
IGJvb2wgdXNlRW1vamlGb250ID0gZmFsc2U7CisgICAgaWYgKGxlbmd0aCA+IDApIHsKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgLy8gVGhpcyBpc24ndCBhIGxvb3AgYnV0IGEgd2F5IHRvIGVm
ZmljaWVudGx5IGNoZWNrIGZvciByYW5nZXMgb2YgY2hhcmFjdGVycy4KKworICAgICAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyByYW5nZXMgYXJlIEtvcmVhbiBIYW5ndWwgYW5kIHNob3VsZCBiZSBy
ZW5kZXJlZCBieSBBcHBsZVNER290aGljTmVvCisgICAgICAgICAgICAvLyBVKzExMDAgLSBVKzEx
RkYKKyAgICAgICAgICAgIC8vIFUrMzEzMCAtIFUrMzE4RgorICAgICAgICAgICAgLy8gVStBQzAw
IC0gVStEN0EzCisKKyAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBDeXJpbGxpYyBhbmQgc2hvdWxk
IGJlIHJlbmRlcmVkIGJ5IEhlbHZldGljYSBOZXVlCisgICAgICAgICAgICAvLyBVKzA0MDAgLSBV
KzA1MkYKKworICAgICAgICAgICAgaWYgKGMgPCAweDQwMCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmIChjIDw9IDB4NTJGKSB7CisgICAgICAgICAgICAgICAgdXNlQ3ly
aWxsaWNGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChjIDwgMHg1OTApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBpZiAoYyA8IDB4NjAwKSB7CisgICAgICAgICAgICAgICAgdXNlSGVicmV3Rm9udCA9
IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoYyA8PSAweDZGRikgeworICAgICAgICAgICAgICAgIHVzZUFyYWJpY0ZvbnQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGMgPCAweDkwMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDwg
MHhFMDApIHsKKyAgICAgICAgICAgICAgICB1c2VJbmRpY0ZvbnQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPD0gMHhFN0Yp
IHsKKyAgICAgICAgICAgICAgICB1c2VUaGFpRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA8IDB4MEYwMCkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDw9IDB4MEZGRikgeworICAgICAg
ICAgICAgICAgIHVzZVRpYmV0YW5Gb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDwgMHgxMTAwKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGMgPD0gMHgxMUZGKSB7CisgICAgICAgICAgICAg
ICAgdXNlS29yZWFuRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoYyA+IDB4MTQwMCAmJiBjIDwgMHgxNzgwKSB7CisgICAg
ICAgICAgICAgICAgdXNlQ2FuYWRpYW5BYm9yaWdpbmFsU3lsbGFiaWNzRm9udCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA8
IDB4MkU4MCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDwgMHgz
MTMwKSB7CisgICAgICAgICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDw9IDB4MzE4Rikgewor
ICAgICAgICAgICAgICAgIHVzZUtvcmVhbkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPCAweEFDMDApIHsKKyAgICAg
ICAgICAgICAgICB1c2VDSkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPD0gMHhEN0EzKSB7CisgICAgICAgICAgICAg
ICAgdXNlS29yZWFuRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIGMgPD0gMHhERkZGKSB7CisgICAgICAgICAgICAgICAg
dXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICggYyA8IDB4RTAwMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmICggYyA8IDB4RTYwMCkgeworICAgICAgICAgICAgICAgIGlmIChpc0dCMTgw
MzBDb21wbGlhbmNlUmVxdWlyZWQpCisgICAgICAgICAgICAgICAgICAgIHVzZUNKRm9udCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB1c2VFbW9qaUZv
bnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCBjIDw9IDB4RTg2NCAmJiBpc0dCMTgwMzBDb21wbGlhbmNlUmVxdWlyZWQpIHsK
KyAgICAgICAgICAgICAgICB1c2VDSkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPD0gMHhGOEZGKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGMgPCAweEZCMDApIHsKKyAgICAgICAgICAg
ICAgICB1c2VDSkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGMgPCAweEZCNTApCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAoYyA8PSAweEZERkYpIHsKKyAgICAgICAgICAgICAgICB1c2VBcmFi
aWNGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChjIDwgMHhGRTIwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgaWYgKGMgPCAweEZFNzApIHsKKyAgICAgICAgICAgICAgICB1c2VDSkZvbnQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGMgPCAweEZGMDApIHsKKyAgICAgICAgICAgICAgICB1c2VBcmFiaWNGb250ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDwg
MHhGRkYwKSB7CisgICAgICAgICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjID49MHgyMDAwMCAm
JiBjIDw9IDB4MkZGRkYpCisgICAgICAgICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAg
ICAgfSB3aGlsZSAoMCk7CisgICAgfQorCisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1w
bGVGb250RGF0YTsKKworICAgIGlmICh1c2VDSkZvbnQpIHsKKyAgICAgICAgLy8gQnkgZGVmYXVs
dCwgQ2hpbmVzZSBmb250IGlzIHByZWZlcnJlZCwgZmFsbCBiYWNrIG9uIEphcGFuZXNlLgorCisg
ICAgICAgIGVudW0gQ0pLRm9udFZhcmlhbnQgeworICAgICAgICAgICAga0NKS0ZvbnRVc2VIaXJh
Z2lubyA9IDAsCisgICAgICAgICAgICBrQ0pLRm9udFVzZVNUSGVpdGlTQywKKyAgICAgICAgICAg
IGtDSktGb250VXNlU1RIZWl0aVRDLAorICAgICAgICAgICAga0NKS0ZvbnRVc2VTVEhlaXRpSiwK
KyAgICAgICAgICAgIGtDSktGb250VXNlU1RIZWl0aUssCisgICAgICAgICAgICBrQ0pLRm9udHNV
c2VIS0dQVzNVSQorICAgICAgICB9OworCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9taWNTdHJpbmc+IHBsYWluSGlyYWdpbm8oIkhpcmFLYWt1UHJvTi1XMyIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBwbGFpblNUSGVpdGlTQygiU1RIZWl0aVNDLUxpZ2h0IiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IHBsYWluU1RIZWl0aVRDKCJTVEhlaXRpVEMtTGlnaHQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gcGxhaW5TVEhlaXRpSigiU1RIZWl0aUotTGlnaHQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gcGxhaW5TVEhlaXRpSygiU1RIZWl0aUstTGlnaHQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gcGxhaW5IS0dQVzNVSSgiSEtHUFczVUkiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIEF0b21pY1N0cmluZyogY2pr
UGxhaW5bXSA9IHsgICAgIAorICAgICAgICAgICAgJnBsYWluSGlyYWdpbm8uZ2V0KCksCisgICAg
ICAgICAgICAmcGxhaW5TVEhlaXRpU0MuZ2V0KCksCisgICAgICAgICAgICAmcGxhaW5TVEhlaXRp
VEMuZ2V0KCksCisgICAgICAgICAgICAmcGxhaW5TVEhlaXRpSi5nZXQoKSwKKyAgICAgICAgICAg
ICZwbGFpblNUSGVpdGlLLmdldCgpLAorICAgICAgICAgICAgJnBsYWluSEtHUFczVUkuZ2V0KCks
CisgICAgICAgIH07CisKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gYm9sZEhpcmFnaW5vKCJIaXJhS2FrdVByb04tVzYiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gYm9sZFNUSGVpdGlTQygiU1RIZWl0aVNDLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBib2xkU1RIZWl0aVRDKCJTVEhlaXRpVEMtTWVkaXVtIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGJvbGRTVEhlaXRpSigiU1RIZWl0aUotTWVkaXVtIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGJvbGRTVEhlaXRpSygiU1RIZWl0aUstTWVkaXVtIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGJvbGRIS0dQVzNVSSgiSEtHUFczVUkiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIEF0b21pY1N0cmluZyogY2prQm9sZFtdID0geyAg
CisgICAgICAgICAgICAmYm9sZEhpcmFnaW5vLmdldCgpLAorICAgICAgICAgICAgJmJvbGRTVEhl
aXRpU0MuZ2V0KCksCisgICAgICAgICAgICAmYm9sZFNUSGVpdGlUQy5nZXQoKSwKKyAgICAgICAg
ICAgICZib2xkU1RIZWl0aUouZ2V0KCksCisgICAgICAgICAgICAmYm9sZFNUSGVpdGlLLmdldCgp
LAorICAgICAgICAgICAgJmJvbGRIS0dQVzNVSS5nZXQoKSwKKyAgICAgICAgfTsKKworICAgICAg
ICAvLyBEZWZhdWx0IGJlbG93IGlzIGZvciBTaW1wbGlmaWVkIENoaW5lc2UgdXNlcjogemgtSGFu
cyAtIG5vdGUgdGhhdCBIaXJhZ2lubyBpcyB0aGUKKyAgICAgICAgLy8gdGhlIHNlY29uZGFyeSBm
b250IGFzIHdlIHdhbnQgaXRzIGZvciBIaXJhZ2FuYSBhbmQgS2F0YWthbmEuIFRoZSBvdGhlciBD
SksgZm9udHMKKyAgICAgICAgLy8gZG8gbm90LCBhbmQgc2hvdWxkIG5vdCwgY29udGFpbiBIaXJh
Z2FuYSBvciBLYXRha2FuYSBnbHlwaHMuCisgICAgICAgIHN0YXRpYyBDSktGb250VmFyaWFudCBw
cmVmZXJyZWRDSktGb250ID0ga0NKS0ZvbnRVc2VTVEhlaXRpU0M7CisgICAgICAgIHN0YXRpYyBD
SktGb250VmFyaWFudCBzZWNvbmRhcnlDSktGb250ID0ga0NKS0ZvbnRzVXNlSEtHUFczVUk7CisK
KyAgICAgICAgc3RhdGljIGJvb2wgQ0pLRm9udEluaXRpYWxpemVkOworICAgICAgICBpZiAoIUNK
S0ZvbnRJbml0aWFsaXplZCkgeworICAgICAgICAgICAgQ0pLRm9udEluaXRpYWxpemVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIC8vIFRlc3Rpbmc6IGxhbmd1YWdlTmFtZSA9IChDRlN0cmluZ1JlZilA
ImphIjsKKyAgICAgICAgICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CisgICAgICAgICAgICBOU0FycmF5ICpsYW5ndWFn
ZXMgPSBbZGVmYXVsdHMgc3RyaW5nQXJyYXlGb3JLZXk6QCJBcHBsZUxhbmd1YWdlcyJdOworCisg
ICAgICAgICAgICBpZiAobGFuZ3VhZ2VzKSB7CisgICAgICAgICAgICAgICAgZm9yIChOU1N0cmlu
ZyAqbGFuZ3VhZ2UgaW4gbGFuZ3VhZ2VzKSB7CisgICAgICAgICAgICAgICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gbGFuZ3VhZ2VOYW1lID0gYWRvcHRDRihDRkxvY2FsZUNyZWF0ZUNhbm9u
aWNhbExhbmd1YWdlSWRlbnRpZmllckZyb21TdHJpbmcobnVsbHB0ciwgKENGU3RyaW5nUmVmKWxh
bmd1YWdlKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChDRkVxdWFsKGxhbmd1YWdlTmFtZS5n
ZXQoKSwgQ0ZTVFIoInpoLUhhbnMiKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsg
Ly8gU2ltcGxpZmllZCBDaGluZXNlIC0gZGVmYXVsdCBzZXR0aW5ncworICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChDRkVxdWFsKGxhbmd1YWdlTmFtZS5nZXQoKSwgQ0ZTVFIoImphIikpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRDSktGb250ID0ga0NKS0ZvbnRVc2VI
aXJhZ2lubzsgLy8gSmFwYW5lc2UgLSBwcmVmZXIgSGlyYWdpbm8gYW5kIFNUSGVpdGkgSmFwYW5z
ZSBWYXJpYW50CisgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnlDSktGb250ID0ga0NK
S0ZvbnRVc2VTVEhlaXRpSjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKENGRXF1YWwobGFuZ3VhZ2VOYW1lLmdldCgpLCBDRlNU
Uigia28iKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZENKS0ZvbnQgPSBr
Q0pLRm9udFVzZVNUSGVpdGlLOyAvLyBLb3JlYW4gLSBwcmVmZXIgU1RIZWl0aSBLb3JlYW4gVmFy
aWFudCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKENGRXF1YWwobGFuZ3VhZ2VOYW1lLmdldCgpLCBDRlNUUigiemgtSGFudCIp
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ0pLRm9udCA9IGtDSktGb250
VXNlU1RIZWl0aVRDOyAvLyBUcmFkaXRpb25hbCBDaGluZXNlIC0gcHJlZmVyIFNUSGVpdGkgVHJh
ZGl0aW9uYWwgVmFyaWFudAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0
aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/ICpjamtCb2xkW3By
ZWZlcnJlZENKS0ZvbnRdIDogKmNqa1BsYWluW3ByZWZlcnJlZENKS0ZvbnRdLCBmYWxzZSwgRG9O
b3RSZXRhaW4pOworICAgICAgICBib29sIHVzZVNlY29uZGFyeUZvbnQgPSB0cnVlOworICAgICAg
ICBpZiAoc2ltcGxlRm9udERhdGEpIHsKKyAgICAgICAgICAgIENHR2x5cGggZ2x5cGhzWzJdOwor
ICAgICAgICAgICAgLy8gQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMgdGFrZXMgVVRGLTE2IGJ1
ZmZlci4gU2hvdWxkIG9ubHkgYmUgMSBjb2RlcG9pbnQgYnV0IHNpbmNlIHdlIG1heSBwYXNzIGlu
IHR3byBVVEYtMTYgY2hhcmFjdGVycywKKyAgICAgICAgICAgIC8vIG1ha2Ugcm9vbSBmb3IgMiBn
bHlwaHMganVzdCB0byBiZSBzYWZlLgorICAgICAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5p
Y2hhcnMoc2ltcGxlRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBjaGFyYWN0ZXJz
LCBnbHlwaHMsIGxlbmd0aCk7CisKKyAgICAgICAgICAgIHVzZVNlY29uZGFyeUZvbnQgPSAoZ2x5
cGhzWzBdID09IDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZVNlY29uZGFyeUZvbnQp
CisgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0
aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/ICpjamtCb2xkW3Nl
Y29uZGFyeUNKS0ZvbnRdIDogKmNqa1BsYWluW3NlY29uZGFyeUNKS0ZvbnRdLCBmYWxzZSwgRG9O
b3RSZXRhaW4pOworICAgIH0gZWxzZSBpZiAodXNlS29yZWFuRm9udCkgeworICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrb3JlYW5QbGFpbigiQXBwbGVTREdvdGhp
Y05lby1NZWRpdW0iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4ga29yZWFuQm9sZCgiQXBwbGVT
REdvdGhpY05lby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlz
Rm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8ga29yZWFuQm9sZCA6IGtvcmVh
blBsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSBpZiAodXNlQ3lyaWxsaWNG
b250KSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmls
bGljUGxhaW4oIkhlbHZldGljYU5ldWUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY3lyaWxs
aWNCb2xkKCJIZWx2ZXRpY2FOZXVlLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNj
cmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjeXJpbGxp
Y0JvbGQgOiBjeXJpbGxpY1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSBp
ZiAodXNlQXJhYmljRm9udCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBhcmFiaWNQbGFpbigiR2VlemFQcm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
YXJhYmljQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2Ny
aXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGFyYWJpY0Jv
bGQgOiBhcmFiaWNQbGFpbiwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICB9IGVsc2UgaWYgKHVz
ZUhlYnJld0ZvbnQpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gaGVicmV3UGxhaW4oIkFyaWFsSGVicmV3IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhl
YnJld0JvbGQoIkFyaWFsSGVicmV3LUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNj
cmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBoZWJyZXdC
b2xkIDogaGVicmV3UGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgfSBlbHNlIGlmICh1
c2VJbmRpY0ZvbnQpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gZGV2YW5hZ2FyaUZvbnQoIkRldmFuYWdhcmlTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBiZW5nYWxpRm9udCgiQmFuZ2xhU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gZ3VybXVraGlGb250KCJHdXJtdWtoaU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7IC8vIE1pZ2h0IGJlIHJlcGxhY2VkIGluIGEgZnV0dXJlIHJlbGVhc2Ugd2l0
aCBhIFNhbmdhbSB2ZXJzaW9uLgorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBndWphcmF0aUZvbnQoIkd1amFyYXRpU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gb3JpeWFGb250KCJPcml5YVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IHRhbWlsRm9udCgiVGFtaWxTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0
ZWx1Z3VGb250KCJUZWx1Z3VTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrYW5u
YWRhRm9udCgiS2FubmFkYVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1hbGF5
YWxhbUZvbnQoIk1hbGF5YWxhbVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNp
bmhhbGFGb250KCJTaW5oYWxhU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBk
ZXZhbmFnYXJpRm9udEJvbGQoIkRldmFuYWdhcmlTYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9taWNTdHJpbmc+IGJlbmdhbGlGb250Qm9sZCgiQmFuZ2xhU2FuZ2FtTU4tQm9sZCIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBndXJtdWtoaUZvbnRCb2xkKCJHdXJtdWtoaU1OLUJvbGQiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsgLy8gTWlnaHQgYmUgcmVwbGFjZWQg
aW4gYSBmdXR1cmUgcmVsZWFzZSB3aXRoIGEgU2FuZ2FtIHZlcnNpb24uCisgICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGd1amFyYXRpRm9udEJvbGQoIkd1amFyYXRp
U2FuZ2FtTU4tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBvcml5YUZvbnRCb2xkKCJP
cml5YVNhbmdhbU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGFtaWxGb250Qm9s
ZCgiVGFtaWxTYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRlbHVndUZv
bnRCb2xkKCJUZWx1Z3VTYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGth
bm5hZGFGb250Qm9sZCgiS2FubmFkYVNhbmdhbU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gbWFsYXlhbGFtRm9udEJvbGQoIk1hbGF5YWxhbVNhbmdhbU1OLUJvbGQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gc2luaGFsYUZvbnRCb2xkKCJTaW5oYWxhU2FuZ2FtTU4tQm9sZCIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworCisgICAgICAgIHN0YXRpYyBB
dG9taWNTdHJpbmcqIGluZGljVW5pY29kZVBhZ2VGb250c1tdID0geworICAgICAgICAgICAgJmRl
dmFuYWdhcmlGb250LmdldCgpLAorICAgICAgICAgICAgJmJlbmdhbGlGb250LmdldCgpLAorICAg
ICAgICAgICAgJmd1cm11a2hpRm9udC5nZXQoKSwKKyAgICAgICAgICAgICZndWphcmF0aUZvbnQu
Z2V0KCksCisgICAgICAgICAgICAmb3JpeWFGb250LmdldCgpLAorICAgICAgICAgICAgJnRhbWls
Rm9udC5nZXQoKSwKKyAgICAgICAgICAgICZ0ZWx1Z3VGb250LmdldCgpLAorICAgICAgICAgICAg
Jmthbm5hZGFGb250LmdldCgpLAorICAgICAgICAgICAgJm1hbGF5YWxhbUZvbnQuZ2V0KCksCisg
ICAgICAgICAgICAmc2luaGFsYUZvbnQuZ2V0KCkKKyAgICAgICAgfTsKKworICAgICAgICBzdGF0
aWMgQXRvbWljU3RyaW5nKiBpbmRpY1VuaWNvZGVQYWdlRm9udHNCb2xkW10gPSB7CisgICAgICAg
ICAgICAmZGV2YW5hZ2FyaUZvbnRCb2xkLmdldCgpLAorICAgICAgICAgICAgJmJlbmdhbGlGb250
Qm9sZC5nZXQoKSwKKyAgICAgICAgICAgICZndXJtdWtoaUZvbnRCb2xkLmdldCgpLAorICAgICAg
ICAgICAgJmd1amFyYXRpRm9udEJvbGQuZ2V0KCksCisgICAgICAgICAgICAmb3JpeWFGb250Qm9s
ZC5nZXQoKSwKKyAgICAgICAgICAgICZ0YW1pbEZvbnRCb2xkLmdldCgpLAorICAgICAgICAgICAg
JnRlbHVndUZvbnRCb2xkLmdldCgpLAorICAgICAgICAgICAgJmthbm5hZGFGb250Qm9sZC5nZXQo
KSwKKyAgICAgICAgICAgICZtYWxheWFsYW1Gb250Qm9sZC5nZXQoKSwKKyAgICAgICAgICAgICZz
aW5oYWxhRm9udEJvbGQuZ2V0KCkKKyAgICAgICAgfTsKKworICAgICAgICB1aW50MzJfdCBpbmRp
Y1BhZ2VPcmRlckluZGV4ID0gKGMgLSAweDA5MDApIC8gMHgwMDgwOyAvLyBJbmRpYyBzY3JpcHRz
IHN0YXJ0IGF0IDB4MDkwMCBpbiBVbmljb2RlLiBFYWNoIHNjcmlwdCBpcyBhbGxvY2FsdGVkIGEg
YmxvY2sgb2YgMHg4MCBjaGFyYWN0ZXJzLgorICAgICAgICBpZiAoaW5kaWNQYWdlT3JkZXJJbmRl
eCA8IChzaXplb2YoaW5kaWNVbmljb2RlUGFnZUZvbnRzKSAvIHNpemVvZihBdG9taWNTdHJpbmcq
KSkpIHsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyogaW5kaWNGb250U3RyaW5nID0gaXNGb250
V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBpbmRpY1VuaWNvZGVQYWdlRm9udHNC
b2xkW2luZGljUGFnZU9yZGVySW5kZXhdIDogaW5kaWNVbmljb2RlUGFnZUZvbnRzW2luZGljUGFn
ZU9yZGVySW5kZXhdOworICAgICAgICAgICAgaWYgKGluZGljRm9udFN0cmluZykKKyAgICAgICAg
ICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCAq
aW5kaWNGb250U3RyaW5nLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICB9CisgICAgfSBl
bHNlIGlmICh1c2VUaGFpRm9udCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiB0aGFpUGxhaW4oIlRob25idXJpIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+
IHRoYWlCb2xkKCJUaG9uYnVyaS1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhhaUJvbGQg
OiB0aGFpUGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgfSBlbHNlIGlmICh1c2VUaWJl
dGFuRm9udCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0
aWJldGFuUGxhaW4oIkthaWxhc2EiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGliZXRhbkJv
bGQoIkthaWxhc2EtQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwor
ICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBp
c0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IHRpYmV0YW5Cb2xkIDogdGli
ZXRhblBsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSBpZiAodXNlQ2FuYWRp
YW5BYm9yaWdpbmFsU3lsbGFiaWNzRm9udCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXRvbWljU3RyaW5nPiBjYXNQbGFpbigiRXVwaGVtaWFVQ0FTIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IGNhc0JvbGQoIkV1cGhlbWlhVUNBUy1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9u
dERhdGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkp
ID8gY2FzQm9sZCA6IGNhc1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSB7
CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGFwcGxlQ29sb3JF
bW9qaSgiQXBwbGVDb2xvckVtb2ppIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgICAgIGlmICghdXNlRW1vamlGb250KSB7CisgICAgICAgICAgICBpZiAoIUNGQ2hh
cmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKHBob25lRmFsbGJhY2tDaGFyYWN0ZXJTZXQo
KSwgYykpCisgICAgICAgICAgICAgICAgdXNlRW1vamlGb250ID0gQ0ZDaGFyYWN0ZXJTZXRJc0xv
bmdDaGFyYWN0ZXJNZW1iZXIoYXBwbGVDb2xvckVtb2ppQ2hhcmFjdGVyU2V0KCksIGMpOworICAg
ICAgICB9CisgICAgICAgIGlmICh1c2VFbW9qaUZvbnQpCisgICAgICAgICAgICBzaW1wbGVGb250
RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1vamksIGZh
bHNlLCBEb05vdFJldGFpbik7CisgICAgfQorCisgICAgaWYgKHNpbXBsZUZvbnREYXRhKQorICAg
ICAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgpOworCisgICAgcmV0dXJuIGdldE5v
blJldGFpbmVkTGFzdFJlc29ydEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbik7Cit9CisKK1Bhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICAvLyBBdHRlbXB0IHRv
IGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1hdGNoIGJhc2VkIG9uIHRoZSBwcmVz
ZW5jZSBvZiBrZXl3b3JkcyBpbgorICAgIC8vIHRoZSByZXF1ZXN0ZWQgbmFtZXMuIEZvciBleGFt
cGxlLCB3ZSdsbCBtYXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRhaW5zICJBcmFiaWMiIHRvIEdlZXph
IFByby4KKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnREYXRhOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOyArK2kpIHsK
KyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBkZXNjcmlwdGlvbi5mYW1pbHlB
dChpKTsKKyAgICAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAvLyBTdWJzdGl0dXRlIHRoZSBkZWZhdWx0IG1vbm9zcGFjZSBmb250IGZv
ciB3ZWxsLWtub3duIG1vbm9zcGFjZSBmb250cy4KKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gbW9uYWNvKCJtb25hY28iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gbWVubG8oIm1lbmxvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNvdXJpZXIoImNvdXJp
ZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbW9uYWNvKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1p
bHksIG1lbmxvKSkgeworICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250
RGF0YShkZXNjcmlwdGlvbiwgY291cmllcik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFN1YnN0aXR1dGUgVmVyZGFuYSBmb3IgTHVjaWRhIEdyYW5kZS4K
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbHVjaWRhR3JhbmRl
KCJsdWNpZGEgZ3JhbmRlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHZlcmRhbmEoInZlcmRh
bmEiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbHVjaWRhR3JhbmRlKSkgeworICAgICAgICAgICAgc2lt
cGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTdHJpbmc+IGFyYWJpYyhBU0NJSUxpdGVyYWwoIkFyYWJpYyIpKTsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gcGFzaHRvKEFTQ0lJTGl0ZXJhbCgiUGFzaHRv
IikpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB1cmR1KEFTQ0lJTGl0
ZXJhbCgiVXJkdSIpKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsg
JmFyYWJpYy5nZXQoKSwgJnBhc2h0by5nZXQoKSwgJnVyZHUuZ2V0KCkgfTsKKyAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2VlemFQbGFpbigiR2VlemFQcm8iLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgMyAmJiAhc2ltcGxlRm9udERhdGE7ICsraikKKyAgICAgICAgICAgIGlmIChmYW1pbHkuY29u
dGFpbnMoKm1hdGNoV29yZHNbal0sIGZhbHNlKSkKKyAgICAgICAgICAgICAgICBzaW1wbGVGb250
RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRl
c2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOworICAgIH0KKwor
ICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFp
bikKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBmYWxsYmFja0Zv
bnRGYW1pbHkoIi5QaG9uZUZhbGxiYWNrIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFs
bGJhY2tGb250RmFtaWx5LCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKK30KKworRm9udFBsYXRmb3Jt
RGF0YSogRm9udENhY2hlOjpnZXRDdXN0b21GYWxsYmFja0ZvbnQoY29uc3QgVUludDMyIGMsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgQVNTRVJUKHJlcXVpcmVz
Q3VzdG9tRmFsbGJhY2tGb250KGMpKTsKKyAgICBpZiAoYyA9PSBBcHBsZUxvZ28pIHsKKyAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gaGVsdmV0aWNhRmFtaWx5KCJI
ZWx2ZXRpY2EgTmV1ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAg
ICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgaGVsdmV0
aWNhRmFtaWx5KTsKKyAgICB9CisgICAgaWYgKGMgPT0gYmxhY2tDaXJjbGUpIHsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbG9ja0Nsb2NrRmFtaWx5KCJMb2Nr
Q2xvY2stTGlnaHQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAg
ICAgcmV0dXJuIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIGxvY2tDbG9j
a0ZhbWlseSk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgaW5saW5l
IEZvbnRUcmFpdHNNYXNrIHRvVHJhaXRzTWFzayhDVEZvbnRTeW1ib2xpY1RyYWl0cyBjdEZvbnRU
cmFpdHMpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigoKGN0Rm9u
dFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykgPyBGb250U3R5bGVJdGFsaWNNYXNrIDogRm9u
dFN0eWxlTm9ybWFsTWFzaykKKyAgICAgICAgfCBGb250VmFyaWFudE5vcm1hbE1hc2sKKyAgICAg
ICAgLy8gRm9udFdlaWdodDYwMCBvciBoaWdoZXIgaXMgYm9sZCBmb3IgQ1RGb250cywgc28gY2hv
b3NlIG1pZGRsZSB2YWx1ZXMgZm9yCisgICAgICAgIC8vIGJvbGQgKDYwMC05MDApIGFuZCBub24t
Ym9sZCAoMTAwLTUwMCkKKyAgICAgICAgfCAoKGN0Rm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEJv
bGQpID8gRm9udFdlaWdodDcwME1hc2sgOiBGb250V2VpZ2h0MzAwTWFzaykpOworfQorCit2b2lk
IEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlO
YW1lLCBWZWN0b3I8dW5zaWduZWQ+JiB0cmFpdHNNYXNrcykKK3sKKyAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGZhbWlseU5hbWVTdHIgPSBmYW1pbHlOYW1lLnN0cmluZygpLmNyZWF0ZUNGU3Ry
aW5nKCk7CisgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gQHsgKGlkKWtDVEZvbnRGYW1p
bHlOYW1lQXR0cmlidXRlOiAoTlNTdHJpbmcqKWZhbWlseU5hbWVTdHIuZ2V0KCkgfTsKKyAgICBS
ZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENU
Rm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcygoQ0ZEaWN0aW9uYXJ5UmVmKWF0dHJp
YnV0ZXMpKTsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gbWF0Y2hlZERlc2NyaXB0b3JzID0gYWRv
cHROUygoTlNBcnJheSAqKUNURm9udERlc2NyaXB0b3JDcmVhdGVNYXRjaGluZ0ZvbnREZXNjcmlw
dG9ycyhmb250RGVzY3JpcHRvci5nZXQoKSwgbnVsbHB0cikpOworCisgICAgTlNJbnRlZ2VyIG51
bU1hdGNoZXMgPSBbbWF0Y2hlZERlc2NyaXB0b3JzLmdldCgpIGNvdW50XTsKKyAgICBpZiAoIW1h
dGNoZWREZXNjcmlwdG9ycyB8fCAhbnVtTWF0Y2hlcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
Zm9yIChOU0ludGVnZXIgaSA9IDA7IGkgPCBudW1NYXRjaGVzOyArK2kpIHsKKyAgICAgICAgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4gdHJhaXRzID0gYWRvcHRDRigoQ0ZEaWN0aW9uYXJ5UmVm
KUNURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKChDVEZvbnREZXNjcmlwdG9yUmVmKVttYXRj
aGVkRGVzY3JpcHRvcnMuZ2V0KCkgb2JqZWN0QXRJbmRleDppXSwga0NURm9udFRyYWl0c0F0dHJp
YnV0ZSkpOworICAgICAgICBDRk51bWJlclJlZiByZXN1bHRSZWYgPSAoQ0ZOdW1iZXJSZWYpQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUodHJhaXRzLmdldCgpLCBrQ1RGb250U3ltYm9saWNUcmFpdCk7Cisg
ICAgICAgIGlmIChyZXN1bHRSZWYpIHsKKyAgICAgICAgICAgIENURm9udFN5bWJvbGljVHJhaXRz
IHN5bWJvbGljVHJhaXRzOworICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShyZXN1bHRSZWYs
IGtDRk51bWJlckludFR5cGUsICZzeW1ib2xpY1RyYWl0cyk7CisgICAgICAgICAgICB0cmFpdHNN
YXNrcy5hcHBlbmQodG9UcmFpdHNNYXNrKHN5bWJvbGljVHJhaXRzKSk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK2Zsb2F0IEZvbnRDYWNoZTo6d2VpZ2h0T2ZDVEZvbnQoQ1RGb250UmVmIGZvbnQp
Cit7CisgICAgZmxvYXQgcmVzdWx0ID0gMDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiB0cmFpdHMgPSBhZG9wdENGKENURm9udENvcHlUcmFpdHMoZm9udCkpOworICAgIGlmICghdHJh
aXRzKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgQ0ZOdW1iZXJSZWYgcmVzdWx0UmVm
ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHRyYWl0cy5nZXQoKSwga0NURm9u
dFdlaWdodFRyYWl0KTsKKyAgICBpZiAocmVzdWx0UmVmKQorICAgICAgICBDRk51bWJlckdldFZh
bHVlKHJlc3VsdFJlZiwga0NGTnVtYmVyRmxvYXRUeXBlLCAmcmVzdWx0KTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVEZvbnRSZWYgY3JlYXRlQ1RGb250V2l0aFRleHRTdHls
ZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIENURm9udFN5bWJvbGljVHJhaXRzIHRyYWl0cywg
Q0dGbG9hdCBzaXplKQoreworICAgIGlmIChmYW1pbHlOYW1lLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIENURm9udFN5bWJvbGljVHJhaXRzIHN5bWJvbGljVHJhaXRz
ID0gMDsKKyAgICBpZiAodHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkKKyAgICAgICAgc3ltYm9s
aWNUcmFpdHMgfD0ga0NURm9udEJvbGRUcmFpdDsKKyAgICBpZiAodHJhaXRzICYga0NURm9udFRy
YWl0SXRhbGljKQorICAgICAgICBzeW1ib2xpY1RyYWl0cyB8PSBrQ1RGb250VHJhaXRJdGFsaWM7
CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lU3RyID0gZmFtaWx5TmFtZS5j
cmVhdGVDRlN0cmluZygpOworICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250
RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUo
ZmFtaWx5TmFtZVN0ci5nZXQoKSwgUmVuZGVyVGhlbWVJT1M6OmNvbnRlbnRTaXplQ2F0ZWdvcnko
KSwgbnVsbHB0cikpOworICAgIGlmIChzeW1ib2xpY1RyYWl0cykKKyAgICAgICAgZm9udERlc2Ny
aXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5V2l0aFN5bWJvbGljVHJh
aXRzKGZvbnREZXNjcmlwdG9yLmdldCgpLCBzeW1ib2xpY1RyYWl0cywgc3ltYm9saWNUcmFpdHMp
KTsKKworICAgIHJldHVybiBDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERlc2Ny
aXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpOworfQorCitzdGF0aWMgQ1RGb250UmVmIGNyZWF0
ZUNURm9udFdpdGhGYW1pbHlOYW1lQW5kV2VpZ2h0KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwg
Q1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzLCBmbG9hdCBzaXplLCB1aW50MTZfdCB3ZWlnaHQp
Cit7CisgICAgaWYgKGZhbWlseU5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gc3lzdGVtVUlGb250
V2l0aFdlYktpdFByZWZpeCgiLXdlYmtpdC1zeXN0ZW0tZm9udCIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IHN5c3RlbVVJRm9udFdpdGhBcHBsZVByZWZpeCgiLWFwcGxlLXN5c3RlbS1mb250IiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGZhbWlseU5hbWUsIHN5c3RlbVVJRm9udFdpdGhXZWJLaXRQcmVmaXgpIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKGZhbWlseU5hbWUsIHN5c3RlbVVJRm9udFdpdGhBcHBsZVByZWZpeCkpIHsKKyAg
ICAgICAgQ1RGb250VUlGb250VHlwZSBmb250VHlwZSA9IGtDVEZvbnRVSUZvbnRTeXN0ZW07Cisg
ICAgICAgIGlmICh3ZWlnaHQgPiAzMDApIHsKKyAgICAgICAgICAgIC8vIFRoZSBjb21tZW50IGJl
bG93IGhhcyBiZWVuIGNvcGllZCBmcm9tIENvcmVUZXh0L1VJRm91bmRhdGlvbi4gSG93ZXZlciwg
aW4gV2ViS2l0IHdlIHN5bnRoZXNpemUgdGhlIG9ibGlxdWUsCisgICAgICAgICAgICAvLyBzbyB3
ZSBzaG91bGQgaW52ZXN0aWdhdGUgdGhlIHJlc3VsdCA8cmRhcjovL3Byb2JsZW0vMTQ0NDkzNDA+
OgorICAgICAgICAgICAgLy8gV2UgZG9uJ3QgZG8gYm9sZC1pdGFsaWMgZm9yIHN5c3RlbSBmb250
cy4gSWYgeW91IGFzayBmb3IgaXQsIHdlJ2xsIGFzc3VtZSB0aGF0IHlvdSdyZSBqdXN0IGtpZGRp
bmcgYW5kIHRoYXQgeW91IHJlYWxseSB3YW50IGJvbGQuIFRoaXMgaXMgYSBmZWF0dXJlLgorICAg
ICAgICAgICAgaWYgKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpCisgICAgICAgICAgICAgICAg
Zm9udFR5cGUgPSBrQ1RGb250VUlGb250RW1waGFzaXplZFN5c3RlbTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykKKyAgICAgICAgICAgICAgICBmb250
VHlwZSA9IHN0YXRpY19jYXN0PENURm9udFVJRm9udFR5cGU+KGtDVEZvbnRVSUZvbnRTeXN0ZW1J
dGFsaWMpOworICAgICAgICB9IGVsc2UgaWYgKHdlaWdodCA+IDI1MCkKKyAgICAgICAgICAgIGZv
bnRUeXBlID0gc3RhdGljX2Nhc3Q8Q1RGb250VUlGb250VHlwZT4oa0NURm9udFVJRm9udFN5c3Rl
bUxpZ2h0KTsKKyAgICAgICAgZWxzZSBpZiAod2VpZ2h0ID4gMTUwKQorICAgICAgICAgICAgZm9u
dFR5cGUgPSBzdGF0aWNfY2FzdDxDVEZvbnRVSUZvbnRUeXBlPihrQ1RGb250VUlGb250U3lzdGVt
VGhpbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvbnRUeXBlID0gc3RhdGljX2Nhc3Q8
Q1RGb250VUlGb250VHlwZT4oa0NURm9udFVJRm9udFN5c3RlbVVsdHJhTGlnaHQpOworICAgICAg
ICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENG
KENURm9udERlc2NyaXB0b3JDcmVhdGVGb3JVSVR5cGUoZm9udFR5cGUsIHNpemUsIG51bGxwdHIp
KTsKKyAgICAgICAgcmV0dXJuIENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVz
Y3JpcHRvci5nZXQoKSwgc2l6ZSwgbnVsbHB0cik7CisgICAgfQorCisgICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBmYW1pbHlOYW1lU3RyID0gZmFtaWx5TmFtZS5jcmVhdGVDRlN0cmluZygpOwor
ICAgIENURm9udFN5bWJvbGljVHJhaXRzIHJlcXVlc3RlZFRyYWl0cyA9IChDVEZvbnRTeW1ib2xp
Y1RyYWl0cykodHJhaXRzICYgKGtDVEZvbnRCb2xkVHJhaXQgfCBrQ1RGb250SXRhbGljVHJhaXQp
KTsKKyAgICByZXR1cm4gQ1RGb250Q3JlYXRlRm9yQ1NTKGZhbWlseU5hbWVTdHIuZ2V0KCksIHdl
aWdodCwgcmVxdWVzdGVkVHJhaXRzLCBzaXplKTsKK30KKworc3RhdGljIHVpbnQxNl90IHRvQ1RG
b250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKK3sKKyAgICBzd2l0Y2ggKGZvbnRXZWln
aHQpIHsKKyAgICBjYXNlIEZvbnRXZWlnaHQxMDA6CisgICAgICAgIHJldHVybiAxMDA7CisgICAg
Y2FzZSBGb250V2VpZ2h0MjAwOgorICAgICAgICByZXR1cm4gMjAwOworICAgIGNhc2UgRm9udFdl
aWdodDMwMDoKKyAgICAgICAgcmV0dXJuIDMwMDsKKyAgICBjYXNlIEZvbnRXZWlnaHQ0MDA6Cisg
ICAgICAgIHJldHVybiA0MDA7CisgICAgY2FzZSBGb250V2VpZ2h0NTAwOgorICAgICAgICByZXR1
cm4gNTAwOworICAgIGNhc2UgRm9udFdlaWdodDYwMDoKKyAgICAgICAgcmV0dXJuIDYwMDsKKyAg
ICBjYXNlIEZvbnRXZWlnaHQ3MDA6CisgICAgICAgIHJldHVybiA3MDA7CisgICAgY2FzZSBGb250
V2VpZ2h0ODAwOgorICAgICAgICByZXR1cm4gODAwOworICAgIGNhc2UgRm9udFdlaWdodDkwMDoK
KyAgICAgICAgcmV0dXJuIDkwMDsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gNDAwOwor
ICAgIH0KK30KKworUGFzc093blB0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQoreworICAgIC8vIFNwZWNpYWwgY2FzZSBmb3Ig
IkNvdXJpZXIiIGZvbnQuIFdlIHVzZWQgdG8gaGF2ZSBvbmx5IGFuIG9ibGlxdWUgdmFyaWFudCBv
biBpT1MsIHNvIHByaW9yIHRvCisgICAgLy8gaU9TIDYuMCwgd2UgZGlzYWxsb3dlZCBpdHMgdXNl
IGhlcmUuIFdlJ2xsIGZhbGwgYmFjayBvbiAiQ291cmllciBOZXciLiA8cmRhcjovL3Byb2JsZW0v
NTExNjQ3NyYxMDg1MDIyNz4KKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBjb3VyaWVyKCJDb3VyaWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgc3RhdGljIGJvb2wgc2hvdWxkRGlzYWxsb3dDb3VyaWVyID0gIWlvc0V4ZWN1dGFibGVX
YXNMaW5rZWRPbk9yQWZ0ZXJWZXJzaW9uKHdrSU9TU3lzdGVtVmVyc2lvbl82XzApOworICAgIGlm
IChzaG91bGREaXNhbGxvd0NvdXJpZXIgJiYgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBjb3Vy
aWVyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0
cyB0cmFpdHMgPSAwOworICAgIGlmIChmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCisgICAgICAg
IHRyYWl0cyB8PSBrQ1RGb250VHJhaXRJdGFsaWM7CisgICAgaWYgKGlzRm9udFdlaWdodEJvbGQo
Zm9udERlc2NyaXB0aW9uLndlaWdodCgpKSkKKyAgICAgICAgdHJhaXRzIHw9IGtDVEZvbnRUcmFp
dEJvbGQ7CisgICAgZmxvYXQgc2l6ZSA9IGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6
ZSgpOworCisgICAgUmV0YWluUHRyPENURm9udFJlZj4gY3RGb250OworICAgIGlmIChmYW1pbHku
c3RhcnRzV2l0aCgiVUlDVEZvbnRUZXh0U3R5bGUiKSkKKyAgICAgICAgY3RGb250ID0gYWRvcHRD
RihjcmVhdGVDVEZvbnRXaXRoVGV4dFN0eWxlKGZhbWlseSwgdHJhaXRzLCBzaXplKSk7CisgICAg
ZWxzZQorICAgICAgICBjdEZvbnQgPSBhZG9wdENGKGNyZWF0ZUNURm9udFdpdGhGYW1pbHlOYW1l
QW5kV2VpZ2h0KGZhbWlseSwgdHJhaXRzLCBzaXplLCB0b0NURm9udFdlaWdodChmb250RGVzY3Jp
cHRpb24ud2VpZ2h0KCkpKSk7CisgICAgaWYgKCFjdEZvbnQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgYWN0dWFsVHJhaXRzID0gMDsKKyAgICBp
ZiAoaXNGb250V2VpZ2h0Qm9sZChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkpIHx8IGZvbnREZXNj
cmlwdGlvbi5pdGFsaWMoKSkKKyAgICAgICAgYWN0dWFsVHJhaXRzID0gQ1RGb250R2V0U3ltYm9s
aWNUcmFpdHMoY3RGb250LmdldCgpKTsKKworICAgIGJvb2wgaXNBcHBsZUNvbG9yRW1vamkgPSBD
VEZvbnRJc0FwcGxlQ29sb3JFbW9qaShjdEZvbnQuZ2V0KCkpOworCisgICAgYm9vbCBzeW50aGV0
aWNCb2xkID0gKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpICYmICEoYWN0dWFsVHJhaXRzICYg
a0NURm9udFRyYWl0Qm9sZCkgJiYgIWlzQXBwbGVDb2xvckVtb2ppOworICAgIGJvb2wgc3ludGhl
dGljT2JsaXF1ZSA9ICh0cmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpICYmICEoYWN0dWFsVHJh
aXRzICYga0NURm9udFRyYWl0SXRhbGljKSAmJiAhaXNBcHBsZUNvbG9yRW1vamk7CisKKyAgICBG
b250UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBuZXcgRm9udFBsYXRmb3JtRGF0YShjdEZvbnQuZ2V0
KCksIHNpemUsIGZvbnREZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgpLCBzeW50aGV0aWNCb2xk
LCBzeW50aGV0aWNPYmxpcXVlLCBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwgZm9udERl
c2NyaXB0aW9uLndpZHRoVmFyaWFudCgpKTsKKyAgICBpZiAoaXNBcHBsZUNvbG9yRW1vamkpCisg
ICAgICAgIHJlc3VsdC0+bV9pc0Vtb2ppID0gdHJ1ZTsKKyAgICByZXR1cm4gYWRvcHRQdHIocmVz
dWx0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNjZjhiZGM5NDhmODg2YmRhZTMyYTQ3N2IxMDdhZjJkZWUyYjdkYzAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udFNlcnZpY2VzSU9T
LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBGb250U2VydmljZXNJT1NfaAorI2RlZmluZSBG
b250U2VydmljZXNJT1NfaAorCisjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRTZXJ2aWNlc0lPUyB7CitwdWJsaWM6CisgICAg
Rm9udFNlcnZpY2VzSU9TKENURm9udFJlZik7CisgICAgQ0dGbG9hdCBhc2NlbnQoKSB7IHJldHVy
biBtX2FzY2VudDsgfQorICAgIENHRmxvYXQgZGVzY2VudCgpIHsgcmV0dXJuIG1fZGVzY2VudDsg
fQorICAgIENHRmxvYXQgbGluZUdhcCgpIHsgcmV0dXJuIG1fbGluZUdhcDsgfQorICAgIENHRmxv
YXQgbGluZVNwYWNpbmcoKSB7IHJldHVybiBtX2xpbmVTcGFjaW5nOyB9CisgICAgQ0dGbG9hdCB4
SGVpZ2h0KCkgeyByZXR1cm4gbV94SGVpZ2h0OyB9CisgICAgdW5zaWduZWQgdW5pdHNQZXJFbSgp
IHsgcmV0dXJuIG1fdW5pdHNQZXJFbTsgfQorCitwcml2YXRlOgorICAgIENHRmxvYXQgbV9hc2Nl
bnQ7CisgICAgQ0dGbG9hdCBtX2Rlc2NlbnQ7CisgICAgQ0dGbG9hdCBtX2xpbmVHYXA7CisgICAg
Q0dGbG9hdCBtX2xpbmVTcGFjaW5nOworICAgIENHRmxvYXQgbV94SGVpZ2h0OworICAgIHVuc2ln
bmVkIG1fdW5pdHNQZXJFbTsKK307CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJT1MubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzIyMmI1MjUxY2VhOWMxZWFhNDcwZDYxYWM2NGQ0OTU2MjViMGYxMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJ
T1MubW0KQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJG
b250U2VydmljZXNJT1MuaCIKKworI2ltcG9ydCAiRm9udE1ldHJpY3MuaCIKKyNpbXBvcnQgPENv
cmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3NQcml2YXRlLmg+CisjaW1wb3J0IDxtYWNoLW8vZHlsZF9wcml2Lmg+CisjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGZs
b2F0IGtMaW5lSGVpZ2h0QWRqdXN0bWVudCA9IDAuMTVmOworCitzdGF0aWMgYm9vbCBzaG91bGRV
c2VBZGp1c3RtZW50KENURm9udFJlZiBmb250LCBib29sIGlzaU9TN09yTGF0ZXIpCit7CisgICAg
UmV0YWluUHRyPE5TU3RyaW5nPiBmYW1pbHlOYW1lID0gYWRvcHROUygoTlNTdHJpbmcgKilDVEZv
bnRDb3B5RmFtaWx5TmFtZShmb250KSk7CisgICAgaWYgKCFbZmFtaWx5TmFtZSBsZW5ndGhdKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoW2ZhbWlseU5hbWUuZ2V0KCkgY29tcGFy
ZTpAIlRpbWVzIiBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSA9PSBOU09yZGVyZWRT
YW1lCisgICAgICAgIHx8IFtmYW1pbHlOYW1lLmdldCgpIGNvbXBhcmU6QCJIZWx2ZXRpY2EiIG9w
dGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdID09IE5TT3JkZXJlZFNhbWUKKyAgICAgICAg
fHwgW2ZhbWlseU5hbWUuZ2V0KCkgY29tcGFyZTpAIi5IZWx2ZXRpY2EgTmV1ZVVJIiBvcHRpb25z
Ok5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSA9PSBOU09yZGVyZWRTYW1lKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAoIWlzaU9TN09yTGF0ZXIgJiYgW2ZhbWlseU5hbWUuZ2V0KCkgY29t
cGFyZTpAIi5IZWx2ZXRpY2EgTmV1ZVVJTGVnYWN5IiBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZl
U2VhcmNoXSA9PSBOU09yZGVyZWRTYW1lKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXNDb3VyaWVyKENURm9udFJlZiBmb250KQor
eworICAgIFJldGFpblB0cjxOU1N0cmluZz4gZmFtaWx5TmFtZSA9IGFkb3B0TlMoKE5TU3RyaW5n
ICopQ1RGb250Q29weUZhbWlseU5hbWUoZm9udCkpOworICAgIGlmICghW2ZhbWlseU5hbWUgbGVu
Z3RoXSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbZmFtaWx5TmFtZS5nZXQo
KSBjb21wYXJlOkAiQ291cmllciIgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0gPT0g
TlNPcmRlcmVkU2FtZTsKK30KKworRm9udFNlcnZpY2VzSU9TOjpGb250U2VydmljZXNJT1MoQ1RG
b250UmVmIGZvbnQpCit7CisgICAgQ0dGb250RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgIFJl
dGFpblB0cjxDR0ZvbnRSZWY+IGNnRm9udCA9IGFkb3B0Q0YoQ1RGb250Q29weUdyYXBoaWNzRm9u
dChmb250LCBOVUxMKSk7CisgICAgbV94SGVpZ2h0ID0gQ0dGb250R2V0RGVzY3JpcHRvcihjZ0Zv
bnQuZ2V0KCksICZkZXNjcmlwdG9yKSA/IChkZXNjcmlwdG9yLnhIZWlnaHQgLyAxMDAwKSAqIENU
Rm9udEdldFNpemUoZm9udCkgOiAwOworICAgIG1fdW5pdHNQZXJFbSA9IENURm9udEdldFVuaXRz
UGVyRW0oZm9udCk7CisgICAgQ0dGbG9hdCBsaW5lR2FwOworICAgIENHRmxvYXQgYXNjZW50Owor
ICAgIENHRmxvYXQgZGVzY2VudDsKKyAgICBzdGF0aWMgYm9vbCBpc2lPUzdPckxhdGVyID0gZHls
ZF9nZXRfcHJvZ3JhbV9zZGtfdmVyc2lvbigpID49IERZTERfSU9TX1ZFUlNJT05fN18wOworICAg
IGlmIChpc2lPUzdPckxhdGVyKSB7CisgICAgICAgIC8vIFVzZSBDb3JlVGV4dCBBUEkgaW4gaU9T
IDcuCisgICAgICAgIGFzY2VudCA9IENURm9udEdldEFzY2VudChmb250KTsKKyAgICAgICAgZGVz
Y2VudCA9IENURm9udEdldERlc2NlbnQoZm9udCk7CisgICAgICAgIGxpbmVHYXAgPSBDVEZvbnRH
ZXRMZWFkaW5nKGZvbnQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZsb2F0IHBvaW50U2l6ZSA9
IENURm9udEdldFNpemUoZm9udCk7CisgICAgICAgIGNvbnN0IENHRm9udEhNZXRyaWNzICptZXRy
aWNzID0gQ0dGb250R2V0SE1ldHJpY3MoY2dGb250LmdldCgpKTsKKyAgICAgICAgdW5zaWduZWQg
dW5pdHNQZXJFbSA9IENHRm9udEdldFVuaXRzUGVyRW0oY2dGb250LmdldCgpKTsKKworICAgICAg
ICBsaW5lR2FwID0gKGR5bGRfZ2V0X3Byb2dyYW1fc2RrX3ZlcnNpb24oKSA+PSBEWUxEX0lPU19W
RVJTSU9OXzNfMCkgPyBzY2FsZUVtVG9Vbml0cyhtZXRyaWNzLT5saW5lR2FwLCB1bml0c1BlckVt
KSAqIHBvaW50U2l6ZSA6IDAuMDsKKworICAgICAgICBib29sIGlzaU9TNk9yTGF0ZXIgPSBkeWxk
X2dldF9wcm9ncmFtX3Nka192ZXJzaW9uKCkgPj0gRFlMRF9JT1NfVkVSU0lPTl82XzA7CisgICAg
ICAgIGlmICghaXNpT1M2T3JMYXRlciB8fCAhaXNDb3VyaWVyKGZvbnQpKSB7CisgICAgICAgICAg
ICBhc2NlbnQgPSAoc2NhbGVFbVRvVW5pdHMobWV0cmljcy0+YXNjZW50LCB1bml0c1BlckVtKSAq
IHBvaW50U2l6ZSk7CisgICAgICAgICAgICBkZXNjZW50ID0gKC1zY2FsZUVtVG9Vbml0cyhtZXRy
aWNzLT5kZXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBGb3IgQ291cmllciwgd2UgdXNlIENvdXJpZXIgTmV3J3MgZXhhY3Qg
dmFsdWVzLCBiZWNhdXNlIGluIGlPUyA1LjEgYW5kIGVhcmxpZXIsCisgICAgICAgICAgICAvLyBD
b3VyaWVyIE5ldyB3YXMgc3Vic3RpdHV0ZWQgZm9yIENvdXJpZXIgYnkgV2ViS2l0LgorICAgICAg
ICAgICAgYXNjZW50ID0gKHNjYWxlRW1Ub1VuaXRzKDE3MDUsIDIwNDgpICogcG9pbnRTaXplKTsK
KyAgICAgICAgICAgIGRlc2NlbnQgPSAoc2NhbGVFbVRvVW5pdHMoNjE1LCAyMDQ4KSAqIHBvaW50
U2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgQ0dGbG9hdCBhZGp1c3RtZW50ID0gKHNob3Vs
ZFVzZUFkanVzdG1lbnQoZm9udCwgaXNpT1M3T3JMYXRlcikpID8gY2VpbCgoYXNjZW50ICsgZGVz
Y2VudCkgKiBrTGluZUhlaWdodEFkanVzdG1lbnQpIDogMDsKKworICAgIG1fYXNjZW50ID0gYXNj
ZW50ICsgYWRqdXN0bWVudDsKKyAgICBtX2Rlc2NlbnQgPSBkZXNjZW50OworICAgIG1fbGluZUdh
cCA9IGNlaWxmKGxpbmVHYXApOworICAgIG1fbGluZVNwYWNpbmcgPSBjZWlsKGFzY2VudCkgKyBh
ZGp1c3RtZW50ICsgY2VpbChkZXNjZW50KSArIG1fbGluZUdhcDsKK30KKworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvR3JhcGhpY3NDb250ZXh0M0RJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9HcmFwaGljc0NvbnRleHQzRElPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzM2JhMDlkNTk5
YzhmODVkNDUwZWRmZmZmYjI5M2QxYjc1YjQ2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvR3JhcGhpY3NDb250ZXh0M0RJT1MuaApAQCAt
MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRElPU19oCisj
ZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNESU9TX2gKKworI2RlZmluZSBnbEJpbmRGcmFtZWJ1ZmZl
ckVYVCBnbEJpbmRGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbEJpbmRSZW5kZXJidWZmZXJFWFQgZ2xC
aW5kUmVuZGVyYnVmZmVyCisjZGVmaW5lIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCBnbENo
ZWNrRnJhbWVidWZmZXJTdGF0dXMKKyNkZWZpbmUgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQgZ2xE
ZWxldGVGcmFtZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUIGdsRGVs
ZXRlUmVuZGVyYnVmZmVycworI2RlZmluZSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUIGds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVY
VCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJECisjZGVmaW5lIGdsR2VuZXJhdGVNaXBtYXBFWFQgZ2xH
ZW5lcmF0ZU1pcG1hcAorI2RlZmluZSBnbEdlbkZyYW1lYnVmZmVyc0VYVCBnbEdlbkZyYW1lYnVm
ZmVycworI2RlZmluZSBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQgZ2xHZW5SZW5kZXJidWZmZXJzCisj
ZGVmaW5lIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQgZ2xHZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdgorI2RlZmluZSBnbEdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlcml2RVhUIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYKKyNkZWZpbmUgZ2xJc0Zy
YW1lYnVmZmVyRVhUIGdsSXNGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbElzUmVuZGVyYnVmZmVyRVhU
IGdsSXNSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUIGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZQorI2RlZmluZSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUVYVCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFQUExFCisKKyNkZWZpbmUgR0xf
Q09MT1JfQVRUQUNITUVOVDBfRVhUIEdMX0NPTE9SX0FUVEFDSE1FTlQwCisjZGVmaW5lIEdMX0RF
UFRIMjRfU1RFTkNJTDhfRVhUIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTCisjZGVmaW5lIEdMX0RF
UFRIX0FUVEFDSE1FTlRfRVhUICBHTF9ERVBUSF9BVFRBQ0hNRU5UCisjZGVmaW5lIEdMX0RSQVdf
RlJBTUVCVUZGRVJfRVhUIEdMX0RSQVdfRlJBTUVCVUZGRVJfQVBQTEUKKyNkZWZpbmUgR0xfRlJB
TUVCVUZGRVJfQ09NUExFVEVfRVhUIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFCisjZGVmaW5lIEdM
X0ZSQU1FQlVGRkVSX0VYVCBHTF9GUkFNRUJVRkZFUgorI2RlZmluZSBHTF9NQVhfU0FNUExFU19F
WFQgR0xfTUFYX1NBTVBMRVNfQVBQTEUKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQg
R0xfUkVBRF9GUkFNRUJVRkZFUl9BUFBMRQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfRVhUIEdM
X1JFTkRFUkJVRkZFUgorI2lmbmRlZiBHTF9SR0I4CisjZGVmaW5lIEdMX1JHQjggR0xfUkdCCisj
ZW5kaWYKKyNpZm5kZWYgR0xfUkdCQTgKKyNkZWZpbmUgR0xfUkdCQTggR0xfUkdCQQorI2VuZGlm
CisjZGVmaW5lIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViBHTF9SR0JBCisKKyNlbmRpZiAv
LyBHcmFwaGljc0NvbnRleHQzRElPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9JY29uSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljNzI4ZWRiZmJkNzE1YThiZGZkYmVj
ZjcyMzA0ODgxNDZjODQ3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJJY29uLmgiCisKKyNpbXBvcnQgIkJpdG1hcEltYWdlLmgiCisjaW1wb3J0ICJHcmFw
aGljc0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorSWNvbjo6SWNvbihD
R0ltYWdlUmVmIGltYWdlKQorICAgIDogbV9jZ0ltYWdlKGltYWdlKQoreworfQorCitJY29uOjp+
SWNvbigpCit7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiAvKmZpbGVuYW1lcyovKQoreworICAgIHJldHVybiBudWxs
cHRyOworfQorCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JJbWFnZShOYXRp
dmVJbWFnZVB0ciBpbWFnZVJlZikKK3sKKyAgICBpZiAoIWltYWdlUmVmKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWNvbihpbWFnZVJlZikpOwor
fQorCit2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpCit7CisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpjb250ZXh0KTsKKworICAgIGZsb2F0IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKG1fY2dJ
bWFnZS5nZXQoKSk7CisgICAgZmxvYXQgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChtX2NnSW1h
Z2UuZ2V0KCkpOworICAgIEZsb2F0U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQpOworICAgIEZsb2F0
UmVjdCBzcmNSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgIENvbG9yU3BhY2UgY29sb3JT
cGFjZSA9IENvbG9yU3BhY2VEZXZpY2VSR0I7CisKKyAgICBjb250ZXh0LT5zZXRJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25IaWdoKTsKKyAgICBjb250ZXh0LT5kcmF3TmF0
aXZlSW1hZ2UobV9jZ0ltYWdlLmdldCgpLCBzaXplLCBjb2xvclNwYWNlLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgMS4wZiwgQ29tcG9zaXRlU291cmNlT3ZlciwgQmxlbmRNb2RlTm9ybWFsLCBEZWZhdWx0
SW1hZ2VPcmllbnRhdGlvbik7Cit9CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1YmU3M2NlOWEx
Y2ZkNDZhMzJlNTVlYTdkNzU1ZjQ5ZmUzYzAxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklP
Uy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluYmFuZFRleHRUcmFja1By
aXZhdGVBVkZJT1NfaAorI2RlZmluZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TX2gKKwor
I2lmIEVOQUJMRShWSURFTykgJiYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRi5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TIDogcHVi
bGljIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M+IGNyZWF0ZShBVkZJbmJhbmRUcmFj
a1BhcmVudCogcGFyZW50LCBpbnQgaW50ZXJuYWxJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MocGFyZW50LCBp
bnRlcm5hbElELCBuYW1lLCBsYW5ndWFnZSwgdHlwZSkpOworICAgIH0KKworICAgIH5JbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGSU9TKCk7CisKKyAgICB2aXJ0dWFsIEluYmFuZFRleHRUcmFja1By
aXZhdGU6OktpbmQga2luZCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgQXRvbWljU3Ry
aW5nIGxhYmVsKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgdmlydHVh
bCBBdG9taWNTdHJpbmcgbGFuZ3VhZ2UoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2xhbmd1
YWdlOyB9CisgICAgdmlydHVhbCBib29sIGlzTGVnYWN5Q2xvc2VkQ2FwdGlvbnNUcmFjaygpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgaW50IGludGVybmFsSUQoKSBjb25z
dCB7IHJldHVybiBtX2ludGVybmFsSUQ7IH0KKworcHJvdGVjdGVkOgorICAgIEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkZJT1MoQVZGSW5iYW5kVHJhY2tQYXJlbnQqLCBpbnQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSwgY29uc3QgU3RyaW5nJiB0eXBlKTsKKwor
ICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fbGFuZ3VhZ2U7CisgICAgU3RyaW5nIG1f
dHlwZTsKKyAgICBpbnQgbV9pbnRlcm5hbElEOworfTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShW
SURFTykgJiYgUExBVEZPUk0oSU9TKQorI2VuZGlmIC8vIEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9z
L0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9pb3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lM2FmYjI4MDAwOGE0OThlNDNkZjZlNWE3N2VkZjllM2I0OTczNDBkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0luYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkZJT1MubW0KQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQg
IkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaCIKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRp
b25zLmgiCisjaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbXBvcnQgIkluYmFuZFRleHRU
cmFja1ByaXZhdGUuaCIKKyNpbXBvcnQgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaCIKKyNp
bXBvcnQgIkxvZ2dpbmcuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUzo6SW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRklPUyhBVkZJbmJhbmRUcmFja1BhcmVudCogcGFyZW50LCBpbnQgaW50ZXJu
YWxJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBT
dHJpbmcmIHR5cGUpCisgICAgOiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKHBhcmVudCkKKyAg
ICAsIG1fbmFtZShuYW1lKQorICAgICwgbV9sYW5ndWFnZShsYW5ndWFnZSkKKyAgICAsIG1fdHlw
ZSh0eXBlKQorICAgICwgbV9pbnRlcm5hbElEKGludGVybmFsSUQpCit7Cit9CisKK0luYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkZJT1M6On5JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKCkKK3sK
K30KKworSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6S2luZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TOjpraW5kKCkgY29uc3QKK3sKKyAgICBpZiAoW21fdHlwZSBpc0VxdWFsVG9TdHJpbmc6
QCJjYXB0aW9ucyJdKQorICAgICAgICByZXR1cm4gQ2FwdGlvbnM7CisgICAgaWYgKFttX3R5cGUg
aXNFcXVhbFRvU3RyaW5nOkAic3VidGl0bGVzIl0pCisgICAgICAgIHJldHVybiBTdWJ0aXRsZXM7
CisKKyAgICByZXR1cm4gQ2FwdGlvbnM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
TWVkaWFQbGF5ZXJQcml2YXRlSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvTWVkaWFQbGF5ZXJQcml2YXRlSU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJhYzI1NzhjODY0ZWQx
ZGQ0MzFmNmQxMDYxYjU4OWI3YjI3MGUzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9NZWRpYVBsYXllclByaXZhdGVJT1MuaApAQCAtMCww
ICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTWVk
aWFQbGF5ZXJQcml2YXRlSU9TX2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlSU9TX2gKKwor
I2lmIEVOQUJMRShWSURFTykgJiYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRi5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAi
TWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcm94eS5oIgorI2lu
Y2x1ZGUgPG9iamMvcnVudGltZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsKK09CSkNf
Q0xBU1MgTlNNdXRhYmxlRGljdGlvbmFyeTsKK09CSkNfQ0xBU1MgTlNOdW1iZXI7CitPQkpDX0NM
QVNTIE5TT2JqZWN0OworT0JKQ19DTEFTUyBXZWJDb3JlTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25I
ZWxwZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRklPUzsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlSU9TIDogcHVibGljIE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSwgcHVibGljIEFWRkluYmFuZFRyYWNrUGFyZW50IHsKK3B1
YmxpYzoKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVS
ZWdpc3RyYXIpOworICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyUHJpdmF0ZUlPUygpOworCisgICAg
dmlydHVhbCB2b2lkIGRlbGl2ZXJOb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcm94eU5vdGlmaWNh
dGlvblR5cGUpIE9WRVJSSURFOworICAgIGJvb2wgY2FsbGJhY2tzRGVsYXllZCgpIHsgcmV0dXJu
IG1fZGVsYXlDYWxsYmFja3MgPiAwOyB9CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1BsYXko
KSBPVkVSUklERTsKKyAgICB2b2lkIHByb2Nlc3NEZWZlcnJlZFJlcXVlc3RzKCk7CisKKyNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCisgICAgdm9pZCBpbmJhbmRUZXh0VHJhY2tzQ2hhbmdlZChOU0Fy
cmF5ICopOworICAgIHZvaWQgcHJvY2Vzc0luYmFuZFRleHRUcmFja0N1ZShOU0FycmF5ICosIGRv
dWJsZSk7CisgICAgdm9pZCB0ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5UGx1Z2luKE5TRGljdGlvbmFy
eSAqKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIE1lZGlhUGxheWVyUHJpdmF0ZUlPUyhNZWRp
YVBsYXllciopOworCisgICAgLy8gRW5naW5lIHN1cHBvcnQKKyAgICBzdGF0aWMgUGFzc093blB0
cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IGNyZWF0ZShNZWRpYVBsYXllciopOworICAg
IHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpOwor
ICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBN
ZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFi
bGUoKTsKKworICAgIHZpcnR1YWwgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgYm9vbCBoYXNBdWRpbygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0Z1bGxzY3JlZW4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgY2FuTG9hZFBvc3RlcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zdGVyKGNvbnN0IFN0cmluZyYgdXJsKSBPVkVSUklE
RTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250cm9scyhib29sKSBPVkVSUklERTsKKworICAg
IHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW4oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhpdEZ1bGxzY3JlZW4oKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNDbG9z
ZWRDYXB0aW9ucygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDbG9zZWRD
YXB0aW9uc1Zpc2libGUoYm9vbCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChj
b25zdCBTdHJpbmcmIHVybCkgT1ZFUlJJREU7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPEhUTUxNZWRpYVNv
dXJjZT4pIE9WRVJSSURFIHsgfQorI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGNhbmNlbExvYWQo
KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHBhdXNlKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGF1c2VkKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25zdCBPVkVSUklE
RTsKKworICAgIHZpcnR1YWwgZmxvYXQgZHVyYXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2VlayhmbG9hdCB0aW1lKSBPVkVSUklERTsKKyAgICB2b2lkIHNldEVuZFRpbWUoZmxv
YXQpOworCisgICAgZmxvYXQgcmF0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRl
KGZsb2F0IGluUmF0ZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBmbG9hdCB2b2x1bWUoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vm9sdW1lKGZsb2F0IGluVm9sdW1lKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoYm9vbCBpbk11dGUpIE9WRVJSSURF
OworCisgICAgaW50IGRhdGFSYXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgCisgICAgZmxvYXQgbWF4VGltZUJ1ZmZlcmVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9h
dCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
Ym9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdCBPVkVSUklERTsKKyAgICBib29sIHRvdGFs
Qnl0ZXNLbm93bigpIGNvbnN0OworICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOwor
CisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQorICAgIHZpcnR1YWwgYm9vbCBpc0N1cnJlbnRQbGF5
YmFja1RhcmdldFdpcmVsZXNzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcigpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIGhh
c1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoYm9vbCkgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxp
dHlMaXN0ZW5lcnMoYm9vbCkgT1ZFUlJJREU7CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRl
cmluZygpIGNvbnN0IE9WRVJSSURFOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWVk
aWFQbGF5ZXJQcm94eShXZWJNZWRpYVBsYXllclByb3h5KikgT1ZFUlJJREU7CisgICAgdm9pZCBw
cm9jZXNzUGVuZGluZ1JlcXVlc3RzKCk7CisKKyAgICB2b2lkIHNldERlbGF5Q2FsbGJhY2tzKGJv
b2wgZG9EZWxheSkgeyBtX2RlbGF5Q2FsbGJhY2tzICs9IChkb0RlbGF5ID8gMSA6IC0xKTsgfQor
CisgICAgYm9vbCB1c2luZ05ldHdvcmsoKSBjb25zdCB7IHJldHVybiBtX3VzaW5nTmV0d29yazsg
fQorICAgIGJvb2wgaW5GdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9pbkZ1bGxTY3JlZW47
IH0KKworICAgIHZvaWQgYWRkRGVmZXJyZWRSZXF1ZXN0KE5TU3RyaW5nICpuYW1lLCBpZCB2YWx1
ZSk7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IHsgU3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgiaU9TIikpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRl
Q2hhbmdlZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCByZWFkeUZvclBsYXliYWNrKCkgY29uc3QgT1ZFUlJJREU7CisK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzVGV4dFRy
YWNrUmVwcmVzZW50YXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dFRyYWNr
UmVwcmVzZW50YXRpb24oVGV4dFRyYWNrUmVwcmVzZW50YXRpb24qKTsKKworICAgIHZvaWQgY2xl
YXJUZXh0VHJhY2tzKCk7CisgICAgdm9pZCBzZXRTZWxlY3RlZFRleHRUcmFjayhOU051bWJlciAq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhY2tNb2RlQ2hhbmdlZCgpIE9WRVJSSURFOworICAgIHZv
aWQgc2V0T3V0T2ZCYW5kVGV4dFRyYWNrcyhOU0FycmF5ICopOworCisgICAgdmlydHVhbCBib29s
IGltcGxlbWVudHNUZXh0VHJhY2tDb250cm9scygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlPiB0ZXh0
VHJhY2tNZW51KCk7CisKKyAgICB2b2lkIG91dE9mQmFuZFRleHRUcmFja3NDaGFuZ2VkKCk7Cisg
ICAgdm9pZCB0ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5TWVkaWFFbGVtZW50KFBhc3NSZWZQdHI8UGxh
dGZvcm1UZXh0VHJhY2s+KTsKKyNlbmRpZgorCitwcml2YXRlOgorCisgICAgY2xhc3MgUGxhdGZv
cm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlSU9TIDogcHVibGljIFBsYXRmb3JtVGV4dFRyYWNrTWVu
dUludGVyZmFjZSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0
Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1M+IGNyZWF0ZShNZWRpYVBsYXllclByaXZhdGVJ
T1MqIG93bmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBs
YXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUyhvd25lcikpOworICAgICAgICB9CisKKyAg
ICAgICAgdmlydHVhbCB+UGxhdGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlSU9TKCk7CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHRyYWNrc0RpZENoYW5nZSgpIE9WRVJSSURFCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX293bmVyKQorICAgICAgICAgICAgICAgIG1fb3duZXItPm91dE9m
QmFuZFRleHRUcmFja3NDaGFuZ2VkKCk7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZv
aWQgdHJhY2tXYXNTZWxlY3RlZChQYXNzUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiB0cmFjaykg
T1ZFUlJJREUKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fb3duZXIpCisgICAgICAgICAg
ICAgICAgbV9vd25lci0+dGV4dFRyYWNrV2FzU2VsZWN0ZWRCeU1lZGlhRWxlbWVudCh0cmFjayk7
CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KFBsYXRmb3JtVGV4
dFRyYWNrTWVudUNsaWVudCogY2xpZW50KSBPVkVSUklERSB7IG1fY2xpZW50ID0gY2xpZW50OyB9
CisgICAgICAgIFBsYXRmb3JtVGV4dFRyYWNrTWVudUNsaWVudCogY2xpZW50KCkgeyByZXR1cm4g
bV9jbGllbnQ7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFBsYXRmb3JtVGV4dFRyYWNrTWVu
dUludGVyZmFjZUlPUyhNZWRpYVBsYXllclByaXZhdGVJT1MqKTsKKworICAgICAgICBQbGF0Zm9y
bVRleHRUcmFja01lbnVDbGllbnQqIG1fY2xpZW50OworICAgICAgICBNZWRpYVBsYXllclByaXZh
dGVJT1MqIG1fb3duZXI7CisgICAgfTsKKworICAgIE1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVy
OworICAgIFJldGFpblB0cjxOU09iamVjdD4gbV9tZWRpYVBsYXllckhlbHBlcjsgLy8gVGhpcyBp
cyB0aGUgTWVkaWFQbGF5ZXJQcm94eS4KKyAgICBSZXRhaW5QdHI8V2ViQ29yZU1lZGlhUGxheWVy
Tm90aWZpY2F0aW9uSGVscGVyPiBtX29iamNIZWxwZXI7CisgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZURpY3Rpb25hcnk+IG1fZGVmZXJyZWRQcm9wZXJ0aWVzOworCisgICAgTWVkaWFQbGF5ZXI6Ok5l
dHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBt
X3JlYWR5U3RhdGU7CisKKyAgICBlbnVtIEJ1ZmZlcmluZ1N0YXRlIHsgRW1wdHksIFVubGlrZWxl
eVRvS2VlcFVwLCBMaWtlbGV5VG9LZWVwVXAsIEZ1bGwgfTsKKworI2lmIEVOQUJMRShWSURFT19U
UkFDSykKKyAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKiBtX2N1cnJlbnRUcmFjazsK
KyAgICBWZWN0b3I8UmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M+ID4gbV90ZXh0
VHJhY2tzOworICAgIFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1M+IG1f
bWVudUludGVyZmFjZTsKKyNlbmRpZgorCisgICAgaW50IG1fZGVsYXlDYWxsYmFja3M7CisgICAg
aW50IG1fY2hhbmdpbmdWb2x1bWU7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2J5dGVzTG9hZGVk
QXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzOworICAgIGZsb2F0IG1fcmVxdWVzdGVkUmF0ZTsKKyAg
ICBCdWZmZXJpbmdTdGF0ZSBtX2J1ZmZlcmluZ1N0YXRlOworICAgIGJvb2wgbV92aXNpYmxlIDog
MTsKKyAgICBib29sIG1fdXNpbmdOZXR3b3JrIDogMTsKKyAgICBib29sIG1faW5GdWxsU2NyZWVu
IDogMTsKKyAgICBib29sIG1fc2hvdWxkUHJlcGFyZVRvUGxheSA6IDE7CisgICAgYm9vbCBtX3By
ZXBhcmluZ1RvUGxheSA6IDE7CisgICAgYm9vbCBtX3BhdXNlUmVxdWVzdGVkIDogMTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYgLy8gTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvTWVkaWFQbGF5ZXJQcml2YXRlSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL01lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZWVhNzI3OWRh
ZWNmMDFjZDA5MTFlMTFlNTA0N2M0OTAxOGRkNjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL01lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbQpA
QCAtMCwwICsxLDEyNjMgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAx
MSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShJT1MpCisK
KyNpbXBvcnQgIk1lZGlhUGxheWVyUHJpdmF0ZUlPUy5oIgorCisjaW1wb3J0ICJHcmFwaGljc0xh
eWVyQ0EuaCIKKyNpbXBvcnQgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaCIKKyNpbXBv
cnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtVGV4dFRyYWNrLmgiCisjaW1wb3J0ICJU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5oIgorI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9y
dCAiVVJMLmgiCisjaW1wb3J0ICJXQUtBcHBLaXRTdHVicy5oIgorI2ltcG9ydCAiV2ViQ29yZVRo
cmVhZFJ1bi5oIgorI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2ltcG9y
dCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworQGludGVy
ZmFjZSBXZWJDb3JlTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25IZWxwZXIgOiBOU09iamVjdAorewor
ICAgIE1lZGlhUGxheWVyUHJpdmF0ZUlPUyogX2NsaWVudDsKKyAgICBCT09MIF9kZWZlcnJlZFBy
b3BlcnRpZXNTY2hlZHVsZWQ7Cit9CistIChpZClpbml0V2l0aENsaWVudDooTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TICopY2xpZW50OworLSAodm9pZClkaXNjb25uZWN0OworLSAodm9pZCljYW5jZWxQ
ZW5kaW5nUmVxdWVzdHM7CistICh2b2lkKWRlbGF5Tm90aWZpY2F0aW9uOihpbnQpbm90aWZpY2F0
aW9uOworLSAodm9pZClkZWxpdmVyTm90aWZpY2F0aW9uOihOU051bWJlciAqKW5vdGlmaWNhdGlv
bjsKKy0gKHZvaWQpc2NoZWR1bGVQcmVwYXJlVG9QbGF5V2l0aE9wdGlvbmFsRGVsYXk6KE5TTnVt
YmVyICopc2hvdWxkRGVsYXk7CistICh2b2lkKXNjaGVkdWxlRGVmZXJyZWRQcm9wZXJ0aWVzV2l0
aE9wdGlvbmFsRGVsYXk6KE5TTnVtYmVyICopc2hvdWxkRGVsYXk7CisKKy0gKHZvaWQpcGx1Z2lu
RWxlbWVudEluQmFuZEFsdGVybmF0ZVRleHRUcmFja3NEaWRDaGFuZ2U6KE5TQXJyYXkgKil0cmFj
a3M7CistICh2b2lkKXBsdWdpbkVsZW1lbnREaWRTZWxlY3RUZXh0VHJhY2s6KE5TU3RyaW5nICop
dHJhY2tJZDsKKy0gKHZvaWQpcGx1Z2luRWxlbWVudERpZE91dHB1dEF0dHJpYnV0ZWRTdHJpbmdz
OihOU0FycmF5ICopc3RyaW5ncyBuYXRpdmVTYW1wbGVCdWZmZXJzOihOU0FycmF5ICopYnVmZmVy
cyBmb3JUaW1lOihOU1RpbWVJbnRlcnZhbCl0aW1lOworQGVuZAorCisvLyBQcml2YXRlIHNlbGVj
dG9ycyBpbXBsZW1lbnRlZCBieSB0aGUgbWVkaWEgcGxheWVyIHByb3h5IG9iamVjdCByZXR1cm5l
ZCBieSB0aGUgcGx1Zy1pbi4KK0BpbnRlcmZhY2UgTlNPYmplY3QgKFdlYk1lZGlhUGxheWVyUHJv
eHlfRXh0cmFzKQorLSAodm9pZClfYXR0cmlidXRlQ2hhbmdlZDooTlNTdHJpbmcgKiluYW1lIHZh
bHVlOihOU1N0cmluZyAqKXZhbHVlOworLSAoQk9PTClfcmVhZHlGb3JQbGF5YmFjazsKK0BlbmQK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBpbnQga1JlcXVpcmVkSGVscGVySW50ZXJm
YWNlVmVyc2lvbiA9IDE7CisKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IERlZmVycmVkUHJvcGVy
dHlDb250cm9sc0tleSA9IEAiY29udHJvbHMiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgRGVm
ZXJyZWRQcm9wZXJ0eVBvc3RlcktleSA9IEAicG9zdGVyIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNv
bnN0IERlZmVycmVkUHJvcGVydHlTcmNLZXkgPSBAInNyYyI7CitzdGF0aWMgTlNTdHJpbmcgKiBj
b25zdCBEZWZlcnJlZFBsYXlLZXkgPSBAInBsYXkiOworc3RhdGljIE5TU3RyaW5nICogY29uc3Qg
RGVmZXJyZWRQcm9wZXJ0eVNlbGVjdGVkVHJhY2tLZXkgPSBAInNlbGVjdGVkdHJhY2siOworc3Rh
dGljIE5TU3RyaW5nICogY29uc3QgRGVmZXJyZWRQcm9wZXJ0eU91dE9mQmFuZFRyYWNrc0tleSA9
IEAib3V0b2ZiYW5kdHJhY2tzIjsKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCitzdGF0aWMgTlNT
dHJpbmcgKiBjb25zdCBEZWZlcnJlZFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkID0gQCJ3
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCI7CisjZW5kaWYKKworc3RhdGljIE5TU3RyaW5n
ICogY29uc3QgVGV4dFRyYWNrRGlzcGxheU5hbWVLZXkgPSBAImRpc3BsYXluYW1lIjsKK3N0YXRp
YyBOU1N0cmluZyAqIGNvbnN0IFRleHRUcmFja0xvY2FsZUlkZW50aWZpZXJLZXkgPSBAImxvY2Fs
ZWlkZW50aWZpZXIiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgVGV4dFRyYWNrU3VidGl0bGVz
S2V5ID0gQCJzdWJ0aXRsZXMiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgVGV4dFRyYWNrQ2Fw
dGlvbnNLZXkgPSBAImNhcHRpb25zIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFRleHRUcmFj
a1R5cGVLZXkgPSBAInR5cGUiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgVGV4dFRyYWNrSURL
ZXkgPSBAImlkIjsKKworY29uc3QgaW50IFRleHRUcmFja09mZk1lbnVJdGVtSUQgPSAtMTsKK2Nv
bnN0IGludCBUZXh0VHJhY2tBdXRvTWVudUl0ZW1JRCA9IC0yOworCitNZWRpYVBsYXllclByaXZh
dGVJT1M6OlBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUzo6UGxhdGZvcm1UZXh0VHJh
Y2tNZW51SW50ZXJmYWNlSU9TKE1lZGlhUGxheWVyUHJpdmF0ZUlPUyogb3duZXIpCisgICAgOiBt
X2NsaWVudChudWxscHRyKQorICAgICwgbV9vd25lcihvd25lcikKK3sKK30KKyAgICAgICAgCitN
ZWRpYVBsYXllclByaXZhdGVJT1M6OlBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUzo6
flBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUygpCit7CisgICAgbV9vd25lciA9IG51
bGxwdHI7CisgICAgbV9jbGllbnQgPSBudWxscHRyOworfQorCitQYXNzT3duUHRyPE1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpjcmVhdGUoTWVkaWFQ
bGF5ZXIqIHBsYXllcikKK3sgCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNZWRpYVBsYXllclBy
aXZhdGVJT1MocGxheWVyKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpyZWdp
c3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBp
ZiAoaXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVk
VHlwZXMsIHN1cHBvcnRzVHlwZSwgMCwgMCwgMCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZUlP
Uzo6TWVkaWFQbGF5ZXJQcml2YXRlSU9TKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBtX21l
ZGlhUGxheWVyKHBsYXllcikKKyAgICAsIG1fb2JqY0hlbHBlcihhZG9wdE5TKFtbV2ViQ29yZU1l
ZGlhUGxheWVyTm90aWZpY2F0aW9uSGVscGVyIGFsbG9jXSBpbml0V2l0aENsaWVudDp0aGlzXSkp
CisgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCisgICAgLCBtX3JlYWR5
U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICAsIG1fY3VycmVudFRyYWNrKG51bGxwdHIpCisjZW5kaWYKKyAgICAsIG1fZGVsYXlDYWxs
YmFja3MoMCkKKyAgICAsIG1fY2hhbmdpbmdWb2x1bWUoMCkKKyAgICAsIG1fYnl0ZXNMb2FkZWRB
dExhc3REaWRMb2FkaW5nUHJvZ3Jlc3MoMCkKKyAgICAsIG1fcmVxdWVzdGVkUmF0ZSgwKQorICAg
ICwgbV9idWZmZXJpbmdTdGF0ZShFbXB0eSkKKyAgICAsIG1fdmlzaWJsZShmYWxzZSkKKyAgICAs
IG1fdXNpbmdOZXR3b3JrKGZhbHNlKQorICAgICwgbV9pbkZ1bGxTY3JlZW4oZmFsc2UpCisgICAg
LCBtX3Nob3VsZFByZXBhcmVUb1BsYXkoZmFsc2UpCisgICAgLCBtX3ByZXBhcmluZ1RvUGxheShm
YWxzZSkKKyAgICAsIG1fcGF1c2VSZXF1ZXN0ZWQoZmFsc2UpCit7Cit9CisKK01lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6fk1lZGlhUGxheWVyUHJpdmF0ZUlPUygpCit7CisgICAgY2xlYXJUZXh0VHJh
Y2tzKCk7CisgICAgW21fb2JqY0hlbHBlci5nZXQoKSBkaXNjb25uZWN0XTsKKyAgICBpZiAoW21f
bWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfc2V0
RGVsZWdhdGU6KV0pCisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXREZWxl
Z2F0ZTpuaWxdOworICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9kaXNjb25uZWN0XTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldE1lZGlhUGxheWVyUHJveHkoV2Vi
TWVkaWFQbGF5ZXJQcm94eSAqcHJveHkpCit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXJIZWxwZXIp
CisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9kaXNjb25uZWN0XTsKKworICAg
IG1fbWVkaWFQbGF5ZXJIZWxwZXIgPSBudWxscHRyOworCisgICAgaWYgKHByb3h5KSB7CisgICAg
ICAgIC8vIGRvbid0IHRyeSB0byB1c2UgYSBoZWxwZXIgaWYgdGhlIGludGVyZmFjZSB2ZXJzaW9u
IGlzIHRvbyBsb3cKKyAgICAgICAgaWYgKFtwcm94eSBfaW50ZXJmYWNlVmVyc2lvbl0gPCAga1Jl
cXVpcmVkSGVscGVySW50ZXJmYWNlVmVyc2lvbikgeworICAgICAgICAgICAgTlNMb2coQCJNZWRp
YSBwbGF5ZXIgaGVscGVyIGludGVyZmFjZSB2ZXJzaW9uIHRvbyBsb3csIGV4aXRpbmcuIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9tZWRpYVBsYXllckhlbHBl
ciA9IGFkb3B0TlMoc3RhdGljX2Nhc3Q8TlNPYmplY3QgKj4oW3Byb3h5IHJldGFpbl0pKTsKKyAg
ICAgICAgaWYgKFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX3NldERlbGVnYXRlOildKQorICAgICAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxw
ZXIuZ2V0KCkgX3NldERlbGVnYXRlOm1fb2JqY0hlbHBlci5nZXQoKV07CisKKyAgICAgICAgYWNj
ZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBwcm9jZXNzUGVu
ZGluZ1JlcXVlc3RzKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpsb2FkKGNv
bnN0IFN0cmluZyYgdXJsKQoreworICAgIE5TVVJMICpuc1VSTCA9IFVSTChQYXJzZWRVUkxTdHJp
bmcsIHVybCk7CisKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpIHsKKyAgICAgICAgYWRk
RGVmZXJyZWRSZXF1ZXN0KERlZmVycmVkUHJvcGVydHlTcmNLZXksIFtuc1VSTCBhYnNvbHV0ZVN0
cmluZ10pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW21fZGVmZXJyZWRQcm9wZXJ0
aWVzLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpEZWZlcnJlZFByb3BlcnR5U3JjS2V5XTsKKyAg
ICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICB7CisgICAgICAgIGlmIChtX25ldHdvcmtT
dGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGluZykgeworICAgICAgICAgICAgbV9uZXR3b3JrU3Rh
dGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgICAgIG1fbWVkaWFQbGF5ZXItPm5l
dHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9yZWFkeVN0YXRl
ICE9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykgeworICAgICAgICAgICAgbV9yZWFkeVN0YXRl
ID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICAgICAgbV9tZWRpYVBsYXllci0+
cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fcGF1c2VSZXF1ZXN0
ZWQgPSBmYWxzZTsKKyAgICAgICAgbV9wcmVwYXJpbmdUb1BsYXkgPSBmYWxzZTsKKworICAgICAg
ICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfY2FuY2VsTG9hZF07CisgICAgICAgIFttX21l
ZGlhUGxheWVySGVscGVyLmdldCgpIF9sb2FkOm5zVVJMXTsKKyAgICB9CisgICAgc2V0RGVsYXlD
YWxsYmFja3MoZmFsc2UpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6Y2FuY2Vs
TG9hZCgpCit7CisgICAgW21fb2JqY0hlbHBlci5nZXQoKSBjYW5jZWxQZW5kaW5nUmVxdWVzdHNd
OworICAgIFttX2RlZmVycmVkUHJvcGVydGllcy5nZXQoKSByZW1vdmVBbGxPYmplY3RzXTsKKwor
ICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIFttX21l
ZGlhUGxheWVySGVscGVyLmdldCgpIF9jYW5jZWxMb2FkXTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVJT1M6OmFkZERlZmVycmVkUmVxdWVzdChOU1N0cmluZyAqbmFtZSwgaWQgdmFsdWUp
Cit7CisgICAgaWYgKCFtX2RlZmVycmVkUHJvcGVydGllcykKKyAgICAgICAgbV9kZWZlcnJlZFBy
b3BlcnRpZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwor
ICAgIFttX2RlZmVycmVkUHJvcGVydGllcy5nZXQoKSBzZXRPYmplY3Q6dmFsdWUgPyB2YWx1ZSA6
IEAiIiBmb3JLZXk6bmFtZV07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpwcm9j
ZXNzRGVmZXJyZWRSZXF1ZXN0cygpCit7CisgICAgaWYgKCFbbV9kZWZlcnJlZFByb3BlcnRpZXMu
Z2V0KCkgY291bnRdKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0
cnVlKTsKKyAgICB7CisgICAgICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGxvY2FsUHJvcGVy
dGllcyA9IGFkb3B0TlMoW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpt
X2RlZmVycmVkUHJvcGVydGllcy5nZXQoKV0pOworICAgICAgICBbbV9kZWZlcnJlZFByb3BlcnRp
ZXMuZ2V0KCkgcmVtb3ZlQWxsT2JqZWN0c107CisKKyAgICAgICAgLy8gQWx3YXlzIHNldCB0aGUg
c3JjIGZpcnN0LgorICAgICAgICBpZCB2YWx1ZSA9IFtsb2NhbFByb3BlcnRpZXMuZ2V0KCkgb2Jq
ZWN0Rm9yS2V5OkRlZmVycmVkUHJvcGVydHlTcmNLZXldOworICAgICAgICBpZiAodmFsdWUpCisg
ICAgICAgICAgICBsb2FkKHZhbHVlKTsKKworICAgICAgICBmb3IgKE5TU3RyaW5nICpuYW1lIGlu
IGxvY2FsUHJvcGVydGllcy5nZXQoKSkgeworICAgICAgICAgICAgdmFsdWUgPSBbbG9jYWxQcm9w
ZXJ0aWVzLmdldCgpIG9iamVjdEZvcktleTpuYW1lXTsKKworICAgICAgICAgICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpwcm9jZXNzRGVmZXJyZWRSZXF1ZXN0cyglcCkgLSBw
cm9jZXNzaW5nICVzIiwgdGhpcywgW25hbWUgVVRGOFN0cmluZ10pOworCisgICAgICAgICAgICBp
ZiAoW25hbWUgaXNFcXVhbFRvU3RyaW5nOkRlZmVycmVkUHJvcGVydHlQb3N0ZXJLZXldKQorICAg
ICAgICAgICAgICAgIHNldFBvc3Rlcih2YWx1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChbbmFt
ZSBpc0VxdWFsVG9TdHJpbmc6RGVmZXJyZWRQcm9wZXJ0eUNvbnRyb2xzS2V5XSkKKyAgICAgICAg
ICAgICAgICBzZXRDb250cm9scyhbdmFsdWUgYm9vbFZhbHVlXSk7CisgICAgICAgICAgICBlbHNl
IGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6RGVmZXJyZWRQbGF5S2V5XSkKKyAgICAgICAgICAg
ICAgICBwbGF5KCk7CisgICAgICAgICAgICBlbHNlIGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6
RGVmZXJyZWRQcm9wZXJ0eU91dE9mQmFuZFRyYWNrc0tleV0pCisgICAgICAgICAgICAgICAgc2V0
T3V0T2ZCYW5kVGV4dFRyYWNrcyh2YWx1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChbbmFtZSBp
c0VxdWFsVG9TdHJpbmc6RGVmZXJyZWRQcm9wZXJ0eVNlbGVjdGVkVHJhY2tLZXldKQorICAgICAg
ICAgICAgICAgIHNldFNlbGVjdGVkVGV4dFRyYWNrKHZhbHVlKTsKKyNpZiBFTkFCTEUoSU9TX0FJ
UlBMQVkpCisgICAgICAgICAgICBlbHNlIGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6RGVmZXJy
ZWRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZF0pCisgICAgICAgICAgICAgICAgc2V0V2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoW3ZhbHVlIGJvb2xWYWx1ZV0pOworI2VuZGlmCisg
ICAgICAgICAgICBlbHNlIGlmICghW25hbWUgaXNFcXVhbFRvU3RyaW5nOkRlZmVycmVkUHJvcGVy
dHlTcmNLZXldKQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQobmFtZSwgdmFsdWUp
OworICAgICAgICB9CisgICAgfQorICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldFBvc3Rlcihjb25zdCBTdHJpbmcmIHVybCkK
K3sKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICB7CisgICAgICAgIE5TVVJMICpu
c1VSTCA9IFVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7CisgICAgICAgIGlmIChtX21lZGlhUGxh
eWVySGVscGVyKSB7CisgICAgICAgICAgICBbbV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVt
b3ZlT2JqZWN0Rm9yS2V5OkRlZmVycmVkUHJvcGVydHlQb3N0ZXJLZXldOworICAgICAgICAgICAg
W21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldFBvc3Rlcjpuc1VSTF07CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkRGVmZXJyZWRSZXF1ZXN0KERlZmVycmVkUHJv
cGVydHlQb3N0ZXJLZXksIHVybCk7CisgICAgfQorICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNl
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldENvbnRyb2xzKGJvb2wgY29u
dHJvbHMpCit7CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgeworICAgICAgICBp
ZiAobV9tZWRpYVBsYXllckhlbHBlcikgeworICAgICAgICAgICAgW21fZGVmZXJyZWRQcm9wZXJ0
aWVzLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpEZWZlcnJlZFByb3BlcnR5Q29udHJvbHNLZXld
OworICAgICAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldENvbnRyb2xzOmNv
bnRyb2xzXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGREZWZlcnJl
ZFJlcXVlc3QoRGVmZXJyZWRQcm9wZXJ0eUNvbnRyb2xzS2V5LCBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6Y29udHJvbHNdKTsKKyAgICB9CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cygp
Cit7CisgICAgaWYgKG1fc2hvdWxkUHJlcGFyZVRvUGxheSAmJiAhbV9wcmVwYXJpbmdUb1BsYXkp
CisgICAgICAgIFttX29iamNIZWxwZXIuZ2V0KCkgc2NoZWR1bGVQcmVwYXJlVG9QbGF5V2l0aE9w
dGlvbmFsRGVsYXk6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU11dOworICAgIGlmIChbbV9k
ZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgY291bnRdKQorICAgICAgICBbbV9vYmpjSGVscGVyLmdl
dCgpIHNjaGVkdWxlRGVmZXJyZWRQcm9wZXJ0aWVzV2l0aE9wdGlvbmFsRGVsYXk6W05TTnVtYmVy
IG51bWJlcldpdGhCb29sOllFU11dOworICAgIG1fc2hvdWxkUHJlcGFyZVRvUGxheSA9IGZhbHNl
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cHJlcGFyZVRvUGxheSgpCit7Cisg
ICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKSB7CisgICAgICAgIC8vIE5vdCBob29rZWQgdXAg
dG8gdGhlIHBsdWctaW4geWV0LCByZW1lbWJlciB0aGlzIHJlcXVlc3QuCisgICAgICAgIG1fc2hv
dWxkUHJlcGFyZVRvUGxheSA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobV9wcmVwYXJpbmdUb1BsYXkgfHwgbV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZl
RnV0dXJlRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaG91bGRQcmVwYXJlVG9QbGF5
ID0gZmFsc2U7CisgICAgbV9wcmVwYXJpbmdUb1BsYXkgPSB0cnVlOworCisgICAgc2V0RGVsYXlD
YWxsYmFja3ModHJ1ZSk7CisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9wcmVw
YXJlRm9yUGxheWJhY2tdOworICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKworCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cGxheSgpCit7CisgICAgaWYgKCFtX21lZGlhUGxh
eWVySGVscGVyKSB7CisgICAgICAgIGFkZERlZmVycmVkUmVxdWVzdChEZWZlcnJlZFBsYXlLZXks
IG5pbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3BhdXNlUmVxdWVzdGVkID0g
ZmFsc2U7CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgICAgIFttX21lZGlhUGxh
eWVySGVscGVyLmdldCgpIF9wbGF5XTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpwYXVzZSgpCit7CisgICAgaWYgKCFtX21l
ZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhdXNlUmVxdWVzdGVk
ID0gdHJ1ZTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICAgICAgW21fbWVkaWFQ
bGF5ZXJIZWxwZXIuZ2V0KCkgX3BhdXNlXTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7
Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZHVyYXRpb24oKSBjb25zdAorewor
ICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZmxv
YXQgZHVyYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4oW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0
KCkgX2R1cmF0aW9uXSk7CisgICAgcmV0dXJuIGR1cmF0aW9uID09IC0xID8gbnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjppbmZpbml0eSgpIDogZHVyYXRpb247Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6Y3VycmVudFRpbWUoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXll
ckhlbHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
PihbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfY3VycmVudFRpbWVdKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnNlZWsoZmxvYXQgdGltZSkKK3sKKyAgICBpZiAoIW1fbWVk
aWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybjsKKyAgICBmbG9hdCBkdXJhdGlvbiA9IHRo
aXMtPmR1cmF0aW9uKCk7CisgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldEN1cnJl
bnRUaW1lOih0aW1lID4gZHVyYXRpb24gPyBkdXJhdGlvbiA6IHRpbWUpXTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnNldEVuZFRpbWUoZmxvYXQgdGltZSkKK3sKKyAgICBpZiAo
IW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybjsKKyAgICBbbV9tZWRpYVBsYXll
ckhlbHBlci5nZXQoKSBfc2V0RW5kVGltZTp0aW1lXTsKK30KKworYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVJT1M6OnBhdXNlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVy
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXJhdGUoKTsKK30KKworYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnNlZWtpbmcoKSBjb25zdAoreworICAgIGlmICghbV9tZWRp
YVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9tZWRp
YVBsYXllckhlbHBlci5nZXQoKSBfc2Vla2luZ107Cit9CisKK0ludFNpemUgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVy
SGVscGVyKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgTlNTaXplIHNpemUgPSBb
bV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfbmF0dXJhbFNpemVdOworICAgIHJldHVybiBJbnRT
aXplKHNpemUpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6aGFzVmlkZW8oKSBj
b25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfaGFzVmlkZW9dOwor
fQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6aGFzQXVkaW8oKSBjb25zdAoreworICAg
IGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfaGFzQXVkaW9dOworfQorCitmbG9hdCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnZvbHVtZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlh
UGxheWVySGVscGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFttX21lZGlh
UGxheWVySGVscGVyLmdldCgpIF92b2x1bWVdOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUlPUzo6c2V0Vm9sdW1lKGZsb2F0IGluVm9sdW1lKQoreworICAgIGlmICghbV9tZWRpYVBsYXll
ckhlbHBlciB8fCBtX2NoYW5naW5nVm9sdW1lKQorICAgICAgICByZXR1cm47CisgICAgW21fbWVk
aWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldFZvbHVtZTppblZvbHVtZV07Cit9CisKK2Zsb2F0IE1l
ZGlhUGxheWVyUHJpdmF0ZUlPUzo6cmF0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxh
eWVySGVscGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFttX21lZGlhUGxh
eWVySGVscGVyLmdldCgpIF9yYXRlXTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6
OnNldFJhdGUoZmxvYXQgaW5SYXRlKQoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikK
KyAgICAgICAgcmV0dXJuOworICAgIG1fcmVxdWVzdGVkUmF0ZSA9IGluUmF0ZTsKKyAgICBbbV9t
ZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2V0UmF0ZTppblJhdGVdOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUlPUzo6c2V0TXV0ZWQoYm9vbCBpbk11dGUpCit7CisgICAgaWYgKCFtX21l
ZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm47CisgICAgW21fbWVkaWFQbGF5ZXJIZWxw
ZXIuZ2V0KCkgX3NldE11dGVkOmluTXV0ZV07Cit9CisKK2ludCBNZWRpYVBsYXllclByaXZhdGVJ
T1M6OmRhdGFSYXRlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBf
ZGF0YVJhdGVdOworfQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6bmV0d29ya1N0YXRlKCkgY29uc3QgCit7IAorICAgIHJldHVybiBtX25ldHdvcmtT
dGF0ZTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlSU9T
OjpyZWFkeVN0YXRlKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKK30KKwor
ZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjptYXhUaW1lQnVmZmVyZWQoKSBjb25zdAorewor
ICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9tYXhUaW1lQnVmZmVyZWRdOworfQorCiti
b29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB1bnNpZ25lZCBjdXJyZW50Qnl0ZXNMb2FkZWQgPSBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQo
KSBfYnl0ZXNMb2FkZWRdOworICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzID0gY3VycmVudEJ5
dGVzTG9hZGVkICE9IG1fYnl0ZXNMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3M7CisgICAg
bV9ieXRlc0xvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzcyA9IGN1cnJlbnRCeXRlc0xvYWRl
ZDsKKyAgICByZXR1cm4gZGlkTG9hZGluZ1Byb2dyZXNzOworfQorCitib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6dG90YWxCeXRlc0tub3duKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdG90YWxC
eXRlcygpID4gMDsKK30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjp0b3RhbEJ5
dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfdG90YWxCeXRl
c107Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6bWF4VGltZVNlZWthYmxlKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiAw
LjBmOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfbWF4VGltZVNlZWth
YmxlXTsKK30KKworUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVJT1M6
OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9
IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOworCisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQor
ICAgICAgICByZXR1cm4gdGltZVJhbmdlcy5yZWxlYXNlKCk7CisKKyAgICBOU0FycmF5ICpyYW5n
ZXMgPSBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfYnVmZmVyZWRUaW1lUmFuZ2VzXTsKKyAg
ICBpZiAoIXJhbmdlcykKKyAgICAgICAgcmV0dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOworCisg
ICAgZmxvYXQgdGltZVJhbmdlWzJdOworICAgIGludCBjb3VudCA9IFtyYW5nZXMgY291bnRdOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU0RhdGEgKnJh
bmdlID0gW3JhbmdlcyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBbcmFuZ2UgZ2V0Qnl0ZXM6
dGltZVJhbmdlIGxlbmd0aDooTlNVSW50ZWdlcilzaXplb2YodGltZVJhbmdlKV07CisKKyAgICAg
ICAgdGltZVJhbmdlcy0+YWRkKHRpbWVSYW5nZVswXSwgdGltZVJhbmdlWzFdKTsKKyAgICB9CisK
KyAgICByZXR1cm4gdGltZVJhbmdlcy5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpzZXRTaXplKGNvbnN0IEludFNpemUmKQoreworICAgIC8vIEZJWE1FOiBEbyB3
ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmU/Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
SU9TOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVl
ZCB0byBkbyBhbnl0aGluZyBtb3JlIGhlcmU/CisgICAgaWYgKG1fdmlzaWJsZSAhPSB2aXNpYmxl
KQorICAgICAgICBtX3Zpc2libGUgPSB2aXNpYmxlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpCit7CisgICAg
Ly8gTm90aGluZyB0byBkbyBoZXJlLgorfQorCitzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVU
eXBlQ2FjaGUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+
IHR5cGVDYWNoZTsKKyAgICBzdGF0aWMgYm9vbCB0eXBlTGlzdEluaXRpYWxpemVkID0gZmFsc2U7
CisKKyAgICBpZiAodHlwZUxpc3RJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIHR5cGVDYWNo
ZTsKKworICAgIHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgLy8gRklYTUU6IFNo
b3VsZCBnZXQgdGhlc2UgZnJvbSB0aGUgaGVscGVyLCBidXQgd2UgZG9uJ3QgaGF2ZSBhbiBpbnN0
YW5jZSB3aGVuIHRoaXMgaXMgY2FsbGVkLgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0eXBlTGlz
dFtdID0geworICAgICAgICAiYXBwbGljYXRpb24veC1tcGVndXJsIiwKKyAgICAgICAgImFwcGxp
Y2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsIiwKKyAgICAgICAgImF1ZGlvLzNncHAiLAorICAgICAg
ICAiYXVkaW8vM2dwcDIiLAorICAgICAgICAiYXVkaW8vYWFjIiwKKyAgICAgICAgImF1ZGlvL2Fp
ZmYiLAorICAgICAgICAiYXVkaW8vYW1yIiwKKyAgICAgICAgImF1ZGlvL2Jhc2ljIiwKKyAgICAg
ICAgImF1ZGlvL21wMyIsCisgICAgICAgICJhdWRpby9tcDQiLAorICAgICAgICAiYXVkaW8vbXBl
ZyIsCisgICAgICAgICJhdWRpby9tcGVndXJsIiwKKyAgICAgICAgImF1ZGlvL21wZWczIiwKKyAg
ICAgICAgImF1ZGlvL3NjcGxzIiwKKyAgICAgICAgImF1ZGlvL3dhdiIsCisgICAgICAgICJhdWRp
by94LWFhYyIsCisgICAgICAgICJhdWRpby94LWFpZmYiLAorICAgICAgICAiYXVkaW8veC1jYWYi
LAorICAgICAgICAiYXVkaW8veC1tNGEiLAorICAgICAgICAiYXVkaW8veC1tNGIiLAorICAgICAg
ICAiYXVkaW8veC1tNHAiLAorICAgICAgICAiYXVkaW8veC1tNHIiLAorICAgICAgICAiYXVkaW8v
eC1tcDMiLAorICAgICAgICAiYXVkaW8veC1tcGVnIiwKKyAgICAgICAgImF1ZGlvL3gtbXBlZzMi
LAorICAgICAgICAiYXVkaW8veC1tcGVndXJsIiwKKyAgICAgICAgImF1ZGlvL3gtc2NwbHMiLAor
ICAgICAgICAiYXVkaW8veC13YXYiLAorICAgICAgICAidmlkZW8vM2dwcCIsCisgICAgICAgICJ2
aWRlby8zZ3BwMiIsCisgICAgICAgICJ2aWRlby9tcDQiLAorICAgICAgICAidmlkZW8vcXVpY2t0
aW1lIiwKKyAgICAgICAgInZpZGVvL3gtbTR2IiwKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBp
cyBhZGRlZCB0byByZXN0b3JlIG9sZCBiZWhhdmlvciBmb3I6CisgICAgICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS85NzkyOTY0PiBFbWJlZGRlZCB2aWRlb3MgZG9uJ3QgcGxheSBvbiBzcGllZ2VsLmRl
ICguaHRtbCBmaWxlIHJlZGlyZWN0cykKKyAgICAgICAgLy8gSG93ZXZlciwgYSBiZXR0ZXIgZml4
IGlzIHRyYWNrZWQgYnk6CisgICAgICAgIC8vIDxodHRwOi8vd2Via2l0Lm9yZy9iLzY0ODExPiA8
dmlkZW8+ICIuaHRtbCIgc3JjIHdpdGggYSAzMDEgcmVkaXJlY3QgZmFpbHMgdG8gbG9hZAorICAg
ICAgICAidGV4dC9odG1sIiwKKyAgICB9OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBX
VEZfQVJSQVlfTEVOR1RIKHR5cGVMaXN0KTsgKytpKQorICAgICAgICB0eXBlQ2FjaGUuZ2V0KCku
YWRkKHR5cGVMaXN0W2ldKTsKKworICAgIHJldHVybiB0eXBlQ2FjaGU7Cit9CisKK01lZGlhUGxh
eWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzdXBwb3J0c1R5cGUoY29u
c3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICAvLyBP
bmx5IHJldHVybiAiSXNTdXBwb3J0ZWQiIGlmIHRoZXJlIGlzIG5vIGNvZGVjcyBwYXJhbWV0ZXIg
Zm9yIG5vdyBhcyB0aGVyZSBpcyBubyB3YXkgdG8gYXNrIENvcmVNZWRpYQorICAgIC8vIGlmIGl0
IHN1cHBvcnRzIGFuIGV4dGVuZGVkIE1JTUUgdHlwZS4KKyAgICBpZiAoIXBhcmFtZXRlcnMudHlw
ZS5pc0VtcHR5KCkgJiYgbWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkp
CisgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXll
cjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7CisKKyAgICByZXR1
cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcykKK3sKKyAg
ICB0eXBlcyA9IG1pbWVUeXBlQ2FjaGUoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJ
T1M6OmlzQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShJ
T1NfQUlSUExBWSkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjppc0N1cnJlbnRQbGF5YmFj
a1RhcmdldFdpcmVsZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIu
Z2V0KCkgX2lzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxlc3NdOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUlPUzo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCkKK3sKKyAgICBzZXRE
ZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkg
X3Nob3dQbGF5YmFja1RhcmdldFBpY2tlcl07CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2Up
OworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6aGFzV2lyZWxlc3NQbGF5YmFja1Rh
cmdldHMoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfaGFz
V2lyZWxlc3NQbGF5YmFja1RhcmdldHNdOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlP
Uzo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdAoreworICAgIGlmICghbV9t
ZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9t
ZWRpYVBsYXllckhlbHBlci5nZXQoKSBfd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRdOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c2V0V2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKK3sKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsK
KyAgICB7CisgICAgICAgIGlmIChtX21lZGlhUGxheWVySGVscGVyKSB7CisgICAgICAgICAgICBb
bV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkRlZmVycmVkV2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRdOworICAgICAgICAgICAgW21fbWVkaWFQbGF5ZXJI
ZWxwZXIuZ2V0KCkgX3NldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkOmRpc2FibGVkXTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBhZGREZWZlcnJlZFJlcXVlc3QoRGVmZXJyZWRX
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmRp
c2FibGVkXSk7CisgICAgfQorICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
TGlzdGVuZXJzKGJvb2wgaGFzTGlzdGVuZXJzKQoreworICAgIFttX21lZGlhUGxheWVySGVscGVy
LmdldCgpIF9zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVyczpoYXNMaXN0
ZW5lcnNdOworfQorI2VuZGlmCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiti
b29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVJT1M6OmVudGVyRnVsbHNjcmVlbigpCit7CisgICAgLy8gVGhlIGNvbnN0IGNhc3Qg
aXMgYSB3b3JrYXJvdW5kIGR1ZSB0byBPcGVuU291cmNlIGNoYW5naW5nIHRoZSBzaWduYXR1cmUg
dG8gY29uc3QuCisgICAgTWVkaWFQbGF5ZXJQcml2YXRlSU9TKiBtdXRhYmxlVGhpcyA9IGNvbnN0
X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlSU9TKj4odGhpcyk7CisgICAgbXV0YWJsZVRoaXMtPnNl
dERlbGF5Q2FsbGJhY2tzKHRydWUpOworICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9l
bnRlckZ1bGxTY3JlZW5dOworICAgIG11dGFibGVUaGlzLT5zZXREZWxheUNhbGxiYWNrcyhmYWxz
ZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpleGl0RnVsbHNjcmVlbigpCit7
CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIu
Z2V0KCkgX2V4aXRGdWxsU2NyZWVuXTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5
ZXJIZWxwZXIpIHsKKyAgICAgICAgYWRkRGVmZXJyZWRSZXF1ZXN0KG5hbWUsIHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0
KCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihfYXR0cmlidXRlQ2hhbmdlZDp2YWx1ZTop
XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAg
W21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2F0dHJpYnV0ZUNoYW5nZWQ6bmFtZSB2YWx1ZTp2
YWx1ZV07CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCitib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUlPUzo6cmVhZHlGb3JQbGF5YmFjaygpIGNvbnN0Cit7CisgICAgaWYgKFttX21l
ZGlhUGxheWVySGVscGVyLmdldCgpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3JlYWR5
Rm9yUGxheWJhY2spXSkKKyAgICAgICAgcmV0dXJuIFttX21lZGlhUGxheWVySGVscGVyLmdldCgp
IF9yZWFkeUZvclBsYXliYWNrXTsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlOjpyZWFkeUZvclBsYXliYWNrKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlSU9T
OjpoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX21lZGlhUGxheWVy
SGVscGVyLmdldCgpIF9oYXNDbG9zZWRDYXB0aW9uc107Cit9ICAgIAorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUlPUzo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgZmxhZykKK3sKKyAg
ICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlOmZs
YWddOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZGVsaXZlck5vdGlmaWNhdGlv
bihNZWRpYVBsYXllclByb3h5Tm90aWZpY2F0aW9uVHlwZSBub3RpZmljYXRpb24pIAoreworICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZGVsaXZlck5vdGlmaWNhdGlvbigl
cCkgLSBub3RpZmljYXRpb24gPSAlaSwgZW50ZXJpbmcgd2l0aCBuZXR3b3JrU3RhdGUgPSAlaSwg
cmVhZHlTdGF0ZSA9ICVpIiwgCisgICAgICAgIHRoaXMsIHN0YXRpY19jYXN0PGludD4obm90aWZp
Y2F0aW9uKSwgc3RhdGljX2Nhc3Q8aW50PihtX25ldHdvcmtTdGF0ZSksIHN0YXRpY19jYXN0PGlu
dD4obV9yZWFkeVN0YXRlKSk7CisKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChjYWxsYmFja3NEZWxheWVkKCkpIHsKKyAgICAgICAgW21fb2JqY0hl
bHBlci5nZXQoKSBkZWxheU5vdGlmaWNhdGlvbjpub3RpZmljYXRpb25dOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3Rh
dGUgPSBtX25ldHdvcmtTdGF0ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFk
eVN0YXRlID0gbV9yZWFkeVN0YXRlOworCisgICAgc3dpdGNoIChub3RpZmljYXRpb24pIHsKKyAg
ICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uU3RhcnRVc2luZ05ldHdvcms6CisgICAgICAg
IG1fdXNpbmdOZXR3b3JrID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwgTWVk
aWFQbGF5ZXI6OkxvYWRpbmcpCisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpMb2FkaW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZp
Y2F0aW9uU3RvcFVzaW5nTmV0d29yazoKKyAgICAgICAgbV91c2luZ05ldHdvcmsgPSBmYWxzZTsK
KyAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGEg
JiYgbV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpCisgICAgICAgICAg
ICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxlOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25HYWluRm9jdXM6CisgICAgICAgIGlmICht
X25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxheWVyOjpMb2FkaW5nKQorICAgICAgICAgICAgbV9uZXR3
b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uTG9zZUZvY3VzOgorICAgICAgICBpZiAobV9uZXR3
b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpCisgICAgICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxlOworICAgICAgICBpZiAobV9yZWFkeVN0YXRlID4g
TWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSkKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRp
YVBsYXllck5vdGlmaWNhdGlvbkVudGVyZWRGdWxsc2NyZWVuOgorICAgICAgICBtX2luRnVsbFNj
cmVlbiA9IHRydWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlm
aWNhdGlvbkV4aXRlZEZ1bGxzY3JlZW46IHsKKyAgICAgICAgbV9pbkZ1bGxTY3JlZW4gPSBmYWxz
ZTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgICAgIHNldFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKDApOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVk
aWFQbGF5ZXJOb3RpZmljYXRpb25SZWFkeUZvckluc3BlY3Rpb246CisgICAgICAgIC8vIFRoZSBi
dWZmZXJpbmcgc3RhdGUgc29tZXRpbWVzIHJlYWNoZXMgImxpa2VseSB0byBrZWVwIHVwIiBvciAi
ZnVsbCIgYmVmb3JlIHRoZSBwbGF5ZXIgaXRlbSBpcworICAgICAgICAvLyByZWFkeSBmb3IgaW5z
cGVjdGlvbi4gSW4gdGhhdCBjYXNlIGFkdmFuY2UgZGlyZWN0bHkgdG8gSGF2ZUVub3VnaERhdGEu
CisgICAgICAgIGlmIChtX2J1ZmZlcmluZ1N0YXRlID4gVW5saWtlbGV5VG9LZWVwVXApCisgICAg
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlQ3Vy
cmVudERhdGE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNh
dGlvbk1lZGlhVmFsaWRhdGVkOgorICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBs
YXllcjo6SWRsZSAmJiAhbV9wcmVwYXJpbmdUb1BsYXkpCisgICAgICAgICAgICBtX25ldHdvcmtT
dGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxlOworICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3Rz
KCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvbk1l
ZGlhRmFpbGVkVG9WYWxpZGF0ZToKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXll
cjo6Rm9ybWF0RXJyb3I7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZl
Tm90aGluZzsgCisgICAgICAgIG1fdXNpbmdOZXR3b3JrID0gZmFsc2U7CisgICAgICAgIG1fcHJl
cGFyaW5nVG9QbGF5ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBs
YXllck5vdGlmaWNhdGlvblBsYXliYWNrRmFpbGVkOiB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBj
YW4ndCBjdXJyZW50bHkgdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIE5ldHdvcmtFcnJvciBh
bmQgRGVjb2RlRXJyb3IuCisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkRl
Y29kZUVycm9yOworCisgICAgICAgIC8vIERvbid0IHJlc2V0IHJlYWR5U3RhdGUsIHdoYXQgd2Ug
aGF2ZSBsb2FkZWQgYWxyZWFkeSBtYXkgYmUgcGxheWFibGUuCisgICAgICAgIG1fdXNpbmdOZXR3
b3JrID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVkaWFQbGF5
ZXJOb3RpZmljYXRpb25SZWFkeUZvclBsYXliYWNrOgorICAgICAgICBpZiAobV9uZXR3b3JrU3Rh
dGUgPCBNZWRpYVBsYXllcjo6TG9hZGluZykKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0g
TWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVy
OjpIYXZlRnV0dXJlRGF0YTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVy
Tm90aWZpY2F0aW9uRGlkUGxheVRvVGhlRW5kOgorICAgICAgICBtX21lZGlhUGxheWVyLT50aW1l
Q2hhbmdlZCgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmlj
YXRpb25TdHJlYW1MaWtlbHlUb0tlZXBVcDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwg
TWVkaWFQbGF5ZXI6OkxvYWRpbmcpCisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlh
UGxheWVyOjpMb2FkaW5nOworICAgICAgICBpZiAobV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6
OkhhdmVNZXRhZGF0YSAmJiBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERh
dGEpCisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERh
dGE7CisgICAgICAgIG1fYnVmZmVyaW5nU3RhdGUgPSBMaWtlbGV5VG9LZWVwVXA7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvblN0cmVhbUJ1ZmZlckZ1
bGw6CisgICAgICAgIC8vIFRoZSBtZWRpYSBidWZmZXJzIGFyZSBmdWxsIHNvIG5vIG1vcmUgZGF0
YSBjYW4gYmUgbG9hZGVkLiBUaGlzIGlzbid0IHJlYWxseSB0aGUgdGhlIHNhbWUgdGhpbmcgYXMg
CisgICAgICAgIC8vICJIYXZlRnV0dXJlRGF0YSIsIGJ1dCBub3RoaW5nIG1vcmUgd2lsbCBiZSBs
b2FkZWQgdW50aWwgcGxheWJhY2sgY29uc3VtZXMgc29tZSBvZiB0aGUgYnVmZmVyZWQgZGF0YQor
ICAgICAgICAvLyBzbyBidW1wIHRoZSByZWFkeVN0YXRlIHRvIGFsbG93IHBsYXliYWNrLgorICAg
ICAgICBpZiAobV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBtX3Jl
YWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpCisgICAgICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgIG1fbmV0d29y
a1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAgIG1fYnVmZmVyaW5nU3RhdGUgPSBG
dWxsOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25T
dHJlYW1SYW5Ecnk6CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRp
bmc7CisgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPiBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRh
KQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0
YTsKKyAgICAgICAgbV9idWZmZXJpbmdTdGF0ZSA9IEVtcHR5OworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25TdHJlYW1Vbmxpa2VseVRvS2VlcFVwOgor
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBp
ZiAobV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBtX3JlYWR5U3Rh
dGUgPCBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpCisgICAgICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgIG1fYnVmZmVyaW5nU3Rh
dGUgPSBVbmxpa2VsZXlUb0tlZXBVcDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlh
UGxheWVyTm90aWZpY2F0aW9uRmlsZUxvYWRlZDoKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBN
ZWRpYVBsYXllcjo6TG9hZGVkOworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZUVub3VnaERhdGE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5v
dGlmaWNhdGlvblRpbWVKdW1wZWQ6CisgICAgICAgIC8vIFNvbWV0aW1lcyBnZXQgYSBzcHVyaW91
cyAidGltZSBqdW1wZWQiIHdoZW4gdGhlIG1vdmllIGlzIGJlaW5nIHNldCB1cCBvciBpbW1lZGlh
dGVseSBhZnRlciBwYXVzaW5nLCAKKyAgICAgICAgLy8gZG9uJ3QgZmFsbCBmb3IgaXQuCisgICAg
ICAgIGlmIChtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YSkKKyAg
ICAgICAgICAgIG1fbWVkaWFQbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvbk11dGVkRGlkQ2hhbmdlOgorICAgIGNh
c2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25Wb2x1bWVEaWRDaGFuZ2U6CisgICAgICAgICsrbV9j
aGFuZ2luZ1ZvbHVtZTsKKyAgICAgICAgbV9tZWRpYVBsYXllci0+dm9sdW1lQ2hhbmdlZCh2b2x1
bWUoKSk7CisgICAgICAgIC0tbV9jaGFuZ2luZ1ZvbHVtZTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uU2l6ZURpZENoYW5nZToKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uUGxheVBhdXNlQnV0dG9uUHJl
c3NlZDoKKyAgICBjYXNlIE1lZGlhUGxheWVyUmVxdWVzdEJlZ2luUGxheWJhY2s6CisgICAgY2Fz
ZSBNZWRpYVBsYXllclJlcXVlc3RQYXVzZVBsYXliYWNrOgorICAgICAgICBicmVhazsKKworICAg
IGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25SYXRlRGlkQ2hhbmdlOgorICAgICAgICBtX3By
ZXBhcmluZ1RvUGxheSA9IGZhbHNlOworICAgICAgICBpZiAobV9wYXVzZVJlcXVlc3RlZCAmJiBy
YXRlKCkpCisgICAgICAgICAgICBtX3BhdXNlUmVxdWVzdGVkID0gZmFsc2U7CisgICAgICAgIGJy
ZWFrOworCisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQorICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3Rp
ZmljYXRpb25DdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZDoKKyAgICAgICAg
bV9tZWRpYVBsYXllci0+Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5nZWQoKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uUGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkOgorICAgICAgICBtX21lZGlhUGxheWVyLT5wbGF5
YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWQoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYK
KyAgICB9CisKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gb2xkTmV0d29ya1N0YXRlKQorICAg
ICAgICBtX21lZGlhUGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fcmVh
ZHlTdGF0ZSAhPSBvbGRSZWFkeVN0YXRlKQorICAgICAgICBtX21lZGlhUGxheWVyLT5yZWFkeVN0
YXRlQ2hhbmdlZCgpOworCisgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpk
ZWxpdmVyTm90aWZpY2F0aW9uKCVwKSAtIGV4aXRpbmcgd2l0aCBuZXR3b3JrU3RhdGUgPSAlaSwg
cmVhZHlTdGF0ZSA9ICVpIiwgCisgICAgICAgIHRoaXMsIHN0YXRpY19jYXN0PGludD4obV9uZXR3
b3JrU3RhdGUpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVhZHlTdGF0ZSkpOworfQorCisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQorYm9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnJlcXVpcmVzVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2luRnVsbFNjcmVl
bjsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKFRleHRUcmFja1JlcHJlc2VudGF0aW9uKiByZXByZXNlbnRhdGlvbikKK3sKKyAgICBb
bV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb246cmVw
cmVzZW50YXRpb24gPyByZXByZXNlbnRhdGlvbi0+cGxhdGZvcm1MYXllcigpIDogbnVsbHB0cl07
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjppbmJhbmRUZXh0VHJhY2tzQ2hhbmdl
ZChOU0FycmF5ICp0cmFja3MpCit7CisgICAgVmVjdG9yPFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGSU9TPiA+IHJlbW92ZWRUZXh0VHJhY2tzID0gbV90ZXh0VHJhY2tzOworCisgICAg
Zm9yIChOU0RpY3Rpb25hcnkgKnRyYWNrSW5mbyBpbiB0cmFja3MpIHsKKyAgICAgICAgYm9vbCBu
ZXdUcmFjayA9IHRydWU7CisgICAgICAgIE5TTnVtYmVyICp0cmFja0lEVmFsdWUgID0gW3RyYWNr
SW5mbyBvYmplY3RGb3JLZXk6VGV4dFRyYWNrSURLZXldOworCisgICAgICAgIGlmICghW3RyYWNr
SURWYWx1ZSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKSB7CisgICAgICAgICAgICBO
U0xvZyhAIlVuZXhwZWN0ZWQgdHJhY2sgSUQsIGlnbm9yaW5nLiIpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKworICAgICAgICBpbnQgdHJhY2tJRCA9IFt0cmFja0lEVmFsdWUg
aW50VmFsdWVdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZW1vdmVkVGV4dFRyYWNrcy5z
aXplKCk7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGSU9TPiB0cmFjayA9IHN0YXRpY19jYXN0PEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZJT1MqPihyZW1vdmVkVGV4dFRyYWNrc1tpIC0gMV0uZ2V0KCkpOworCisgICAgICAgICAgICBp
ZiAodHJhY2stPmludGVybmFsSUQoKSA9PSB0cmFja0lEKSB7CisgICAgICAgICAgICAgICAgcmVt
b3ZlZFRleHRUcmFja3MucmVtb3ZlKGkgLSAxKTsKKyAgICAgICAgICAgICAgICBuZXdUcmFjayA9
IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmICghbmV3VHJhY2spCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBOU1N0cmluZyAqbmFtZSA9IFt0cmFja0luZm8gb2JqZWN0Rm9yS2V5OlRleHRUcmFja0Rpc3Bs
YXlOYW1lS2V5XTsKKyAgICAgICAgTlNTdHJpbmcgKmxhbmd1YWdlID0gW3RyYWNrSW5mbyBvYmpl
Y3RGb3JLZXk6VGV4dFRyYWNrTG9jYWxlSWRlbnRpZmllcktleV07CisgICAgICAgIE5TU3RyaW5n
ICp0eXBlID0gW3RyYWNrSW5mbyBvYmplY3RGb3JLZXk6VGV4dFRyYWNrVHlwZUtleV07CisKKyAg
ICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjppbmJhbmRUZXh0VHJhY2tz
Q2hhbmdlZCglcCkgLSBhZGRpbmcgdHJhY2sgaWQgJWksIG5hbWUgPSAlcywgbGFuZ3VhZ2UgPSAl
cywgdHlwZSA9ICVzIiwgdGhpcywgdHJhY2tJRCwgW25hbWUgVVRGOFN0cmluZ10sIFtsYW5ndWFn
ZSBVVEY4U3RyaW5nXSwgW3R5cGUgVVRGOFN0cmluZ10pOworCisgICAgICAgIG1fdGV4dFRyYWNr
cy5hcHBlbmQoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUzo6Y3JlYXRlKHRoaXMsIHRyYWNr
SUQsIG5hbWUsIGxhbmd1YWdlLCB0eXBlKSk7CisgICAgfQorCisgICAgaWYgKHJlbW92ZWRUZXh0
VHJhY2tzLnNpemUoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RleHRUcmFja3Mu
c2l6ZSgpOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUz4gdHJhY2sgPSBzdGF0aWNfY2FzdDxJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TKj4obV90ZXh0VHJhY2tzW2kgLSAxXS5nZXQoKSk7CisKKyAgICAgICAgICAgIGlmICgh
cmVtb3ZlZFRleHRUcmFja3MuY29udGFpbnModHJhY2spKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBpZiAobV9jdXJyZW50VHJhY2sgPT0gdHJhY2suZ2V0KCkpCisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50VHJhY2sgPSBudWxscHRyOworICAgICAgICAgICAgbV9t
ZWRpYVBsYXllci0+cmVtb3ZlVGV4dFRyYWNrKHRyYWNrKTsKKyAgICAgICAgICAgIG1fdGV4dFRy
YWNrcy5yZW1vdmUoaSAtIDEpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdGV4dFRyYWNrcy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUz4gdHJhY2sgPSBzdGF0aWNfY2FzdDxJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGSU9TKj4obV90ZXh0VHJhY2tzW2ldLmdldCgpKTsKKworICAgICAg
ICB0cmFjay0+c2V0VGV4dFRyYWNrSW5kZXgoaSk7CisgICAgICAgIGlmICh0cmFjay0+aGFzQmVl
blJlcG9ydGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB0cmFjay0+c2V0
SGFzQmVlblJlcG9ydGVkKHRydWUpOworICAgICAgICBtX21lZGlhUGxheWVyLT5hZGRUZXh0VHJh
Y2sodHJhY2suZ2V0KCkpOworICAgIH0KKyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVJT1M6OmluYmFuZFRleHRUcmFja3NDaGFuZ2VkKCVwKSAtIGZvdW5kICVpIGluLWJhbmQgdHJh
Y2tzIiwgdGhpcywgbV90ZXh0VHJhY2tzLnNpemUoKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpzZXRTZWxlY3RlZFRleHRUcmFjayhOU051bWJlciAqdHJhY2tJRCkKK3sKKyAg
ICBpZiAoIVt0cmFja0lEIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pIHsKKyAgICAg
ICAgTlNMb2coQCJVbmV4cGVjdGVkIHRyYWNrIElELCBpZ25vcmluZy4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikgeworICAgICAgICBh
ZGREZWZlcnJlZFJlcXVlc3QoRGVmZXJyZWRQcm9wZXJ0eVNlbGVjdGVkVHJhY2tLZXksIHRyYWNr
SUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFbbV9tZWRpYVBsYXllckhl
bHBlci5nZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9zZXRTZWxlY3RlZFRleHRU
cmFjazopXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7
CisgICAgeworICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldEN1
cnJlbnRUcmFjayglcCkgLSBzZWxlY3RpbmcgdHJhY2sgaWQgJWkiLCB0aGlzLCBbdHJhY2tJRCBp
bnRWYWx1ZV0pOworICAgICAgICBbbV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVtb3ZlT2Jq
ZWN0Rm9yS2V5OkRlZmVycmVkUHJvcGVydHlTZWxlY3RlZFRyYWNrS2V5XTsKKyAgICAgICAgW21f
bWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldFNlbGVjdGVkVGV4dFRyYWNrOnRyYWNrSURdOwor
ICAgIH0KKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlSU9TOjp0cmFja01vZGVDaGFuZ2VkKCkKK3sKKyAgICBSZWZQdHI8SW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRj4gdHJhY2tUb0VuYWJsZTsKKworICAgIC8vIEFWRm91bmRhdGlvbiBj
YW4gb25seSBlbWl0IGN1ZXMgZm9yIG9uZSB0cmFjayBhdCBhIHRpbWUsIHNvIGVuYWJsZSB0aGUg
Zmlyc3QgdHJhY2sgdGhhdCBpcyBzaG93aW5nLCBvciB0aGUgZmlyc3QgdGhhdAorICAgIC8vIGlz
IGhpZGRlbiBpZiBub25lIGFyZSBzaG93aW5nLiBPdGhlcndpc2UgZGlzYWJsZSBhbGwgdHJhY2tz
LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RleHRUcmFja3Muc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M+IHRyYWNrID0g
bV90ZXh0VHJhY2tzW2ldOworICAgICAgICBpZiAodHJhY2stPm1vZGUoKSA9PSBJbmJhbmRUZXh0
VHJhY2tQcml2YXRlOjpTaG93aW5nKSB7CisgICAgICAgICAgICB0cmFja1RvRW5hYmxlID0gdHJh
Y2s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRyYWNrVG9F
bmFibGUgJiYgdHJhY2stPm1vZGUoKSA9PSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpIaWRkZW4p
CisgICAgICAgICAgICB0cmFja1RvRW5hYmxlID0gdHJhY2s7CisgICAgfQorCisgICAgSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRklPUyogdHJhY2tQcml2YXRlID0gc3RhdGljX2Nhc3Q8SW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRklPUyo+KHRyYWNrVG9FbmFibGUuZ2V0KCkpOworICAgIGlmICht
X2N1cnJlbnRUcmFjayA9PSB0cmFja1ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
Y3VycmVudFRyYWNrID0gdHJhY2tQcml2YXRlOworICAgIHNldFNlbGVjdGVkVGV4dFRyYWNrKHRy
YWNrUHJpdmF0ZSA/IFtOU051bWJlciBudW1iZXJXaXRoSW50OnRyYWNrUHJpdmF0ZS0+aW50ZXJu
YWxJRCgpXSA6IG5pbCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpjbGVhclRl
eHRUcmFja3MoKQoreworICAgIG1fY3VycmVudFRyYWNrID0gbnVsbHB0cjsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV90ZXh0VHJhY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJl
ZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TPiB0cmFjayA9IG1fdGV4dFRyYWNrc1tp
XTsKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cmVtb3ZlVGV4dFRyYWNrKHRyYWNrKTsKKyAgICAg
ICAgdHJhY2stPmRpc2Nvbm5lY3QoKTsKKyAgICB9CisgICAgbV90ZXh0VHJhY2tzLmNsZWFyKCk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpwcm9jZXNzSW5iYW5kVGV4dFRyYWNr
Q3VlKE5TQXJyYXkgKmF0dHJpYnV0ZWRTdHJpbmdzLCBkb3VibGUgdGltZSkKK3sKKyAgICBpZiAo
IW1fY3VycmVudFRyYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRUcmFjay0+
cHJvY2Vzc0N1ZShyZWludGVycHJldF9jYXN0PENGQXJyYXlSZWY+KGF0dHJpYnV0ZWRTdHJpbmdz
KSwgdGltZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRPdXRPZkJhbmRU
ZXh0VHJhY2tzKE5TQXJyYXkgKnRyYWNrc0FycmF5KQoreworICAgIGlmICghbV9tZWRpYVBsYXll
ckhlbHBlcikgeworICAgICAgICBhZGREZWZlcnJlZFJlcXVlc3QoRGVmZXJyZWRQcm9wZXJ0eU91
dE9mQmFuZFRyYWNrc0tleSwgdHJhY2tzQXJyYXkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKF9zZXRPdXRPZkJhbmRUZXh0VHJhY2tzOildKQorICAgICAgICByZXR1cm47CisK
KyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICB7CisgICAgICAgIFttX2RlZmVycmVk
UHJvcGVydGllcy5nZXQoKSByZW1vdmVPYmplY3RGb3JLZXk6RGVmZXJyZWRQcm9wZXJ0eU91dE9m
QmFuZFRyYWNrc0tleV07CisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXRP
dXRPZkJhbmRUZXh0VHJhY2tzOnRyYWNrc0FycmF5XTsKKyAgICB9CisgICAgc2V0RGVsYXlDYWxs
YmFja3MoZmFsc2UpOworfQorCitzdGF0aWMgaW50IHBsYXRmb3JtVHJhY2tJRChQbGF0Zm9ybVRl
eHRUcmFjayogcGxhdGZvcm1UcmFjaykKK3sKKyAgICBpZiAocGxhdGZvcm1UcmFjay0+dHlwZSgp
ID09IFBsYXRmb3JtVGV4dFRyYWNrOjpJbkJhbmQpIHsKKyAgICAgICAgSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUyogdHJhY2tQcml2YXRlID0gc3RhdGljX2Nhc3Q8SW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUyo+KHBsYXRmb3JtVHJhY2stPmNsaWVudCgpLT5wcml2YXRlVHJhY2soKSk7
CisgICAgICAgIHJldHVybiB0cmFja1ByaXZhdGUgPyB0cmFja1ByaXZhdGUtPmludGVybmFsSUQo
KSA6IDA7CisgICAgfQorCisgICAgcmV0dXJuIHBsYXRmb3JtVHJhY2stPnVuaXF1ZUlkKCk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpvdXRPZkJhbmRUZXh0VHJhY2tzQ2hhbmdl
ZCgpCit7CisgICAgaWYgKCFtX21lbnVJbnRlcmZhY2UtPmNsaWVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHRyYWNrc0FycmF5ID0gYWRvcHRO
UyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgVmVjdG9yPFJlZlB0cjxQbGF0
Zm9ybVRleHRUcmFjaz4gPiB0ZXh0VHJhY2tzID0gbV9tZW51SW50ZXJmYWNlLT5jbGllbnQoKS0+
cGxhdGZvcm1UZXh0VHJhY2tzKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4
dFRyYWNrcy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+
IHBsYXRmb3JtVHJhY2sgPSB0ZXh0VHJhY2tzW2ldOworCisgICAgICAgIGlmIChwbGF0Zm9ybVRy
YWNrLT50eXBlKCkgPT0gUGxhdGZvcm1UZXh0VHJhY2s6OkluQmFuZCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBpZiAocGxhdGZvcm1UcmFjay0+a2luZCgpICE9IFBsYXRmb3JtVGV4
dFRyYWNrOjpTdWJ0aXRsZSAmJiBwbGF0Zm9ybVRyYWNrLT5raW5kKCkgIT0gUGxhdGZvcm1UZXh0
VHJhY2s6OkNhcHRpb24pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gdHJhY2sgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlv
bmFyeSBhbGxvY10gaW5pdF0pOworCisgICAgICAgIFt0cmFjay5nZXQoKSBzZXRPYmplY3Q6cGxh
dGZvcm1UcmFjay0+bGFiZWwoKSBmb3JLZXk6VGV4dFRyYWNrRGlzcGxheU5hbWVLZXldOworCisg
ICAgICAgIGlmICghcGxhdGZvcm1UcmFjay0+bGFuZ3VhZ2UoKS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBbdHJhY2suZ2V0KCkgc2V0T2JqZWN0OnBsYXRmb3JtVHJhY2stPmxhbmd1YWdlKCkgZm9y
S2V5OlRleHRUcmFja0xvY2FsZUlkZW50aWZpZXJLZXldOworCisgICAgICAgIE5TU3RyaW5nICp0
eXBlID0gcGxhdGZvcm1UcmFjay0+a2luZCgpID09IFBsYXRmb3JtVGV4dFRyYWNrOjpTdWJ0aXRs
ZSA/IFRleHRUcmFja1N1YnRpdGxlc0tleSA6IFRleHRUcmFja0NhcHRpb25zS2V5OworICAgICAg
ICBbdHJhY2suZ2V0KCkgc2V0T2JqZWN0OnR5cGUgZm9yS2V5OlRleHRUcmFja1R5cGVLZXldOwor
CisgICAgICAgIFt0cmFjay5nZXQoKSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6
cGxhdGZvcm1UcmFja0lEKHBsYXRmb3JtVHJhY2suZ2V0KCkpXSBmb3JLZXk6VGV4dFRyYWNrSURL
ZXldOworCisgICAgICAgIFt0cmFja3NBcnJheSBhZGRPYmplY3Q6dHJhY2suZ2V0KCldOworICAg
IH0KKworICAgIGlmICghW3RyYWNrc0FycmF5LmdldCgpIGNvdW50XSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgc2V0T3V0T2ZCYW5kVGV4dFRyYWNrcyh0cmFja3NBcnJheS5nZXQoKSk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjp0ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5TWVkaWFF
bGVtZW50KFBhc3NSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+IHBsYXRmb3JtVHJhY2spCit7Cisg
ICAgc2V0U2VsZWN0ZWRUZXh0VHJhY2soW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6cGxhdGZvcm1U
cmFja0lEKHBsYXRmb3JtVHJhY2suZ2V0KCkpXSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlSU9TOjp0ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5UGx1Z2luKE5TRGljdGlvbmFyeSAqdHJhY2tJ
bmZvKQoreworICAgIGlmICghbV9tZW51SW50ZXJmYWNlIHx8ICFtX21lbnVJbnRlcmZhY2UtPmNs
aWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXRyYWNrSW5mbykgeworICAgICAg
ICBtX21lbnVJbnRlcmZhY2UtPmNsaWVudCgpLT5zZXRTZWxlY3RlZFRleHRUcmFjaygwKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4gdHJh
Y2tUb1NlbGVjdDsKKyAgICBOU051bWJlciAqdHJhY2tJRFRvU2VsZWN0ICA9IFt0cmFja0luZm8g
b2JqZWN0Rm9yS2V5OlRleHRUcmFja0lES2V5XTsKKyAgICBpZiAoIVt0cmFja0lEVG9TZWxlY3Qg
aXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkgeworICAgICAgICBOU0xvZyhAIlVuZXhw
ZWN0ZWQgdHJhY2sgSUQsIGlnbm9yaW5nLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaW50IHRyYWNrSUQgPSBbdHJhY2tJRFRvU2VsZWN0IGludFZhbHVlXTsKKyAgICBpZiAodHJh
Y2tJRCA9PSBUZXh0VHJhY2tPZmZNZW51SXRlbUlEKQorICAgICAgICB0cmFja1RvU2VsZWN0ID0g
UGxhdGZvcm1UZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpOworICAgIGVsc2UgaWYgKHRy
YWNrSUQgPT0gVGV4dFRyYWNrQXV0b01lbnVJdGVtSUQpCisgICAgICAgIHRyYWNrVG9TZWxlY3Qg
PSBQbGF0Zm9ybVRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7CisgICAgZWxz
ZSB7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+ID4gdGV4dFRyYWNr
cyA9IG1fbWVudUludGVyZmFjZS0+Y2xpZW50KCktPnBsYXRmb3JtVGV4dFRyYWNrcygpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dFRyYWNrcy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiBwbGF0Zm9ybVRyYWNrID0gdGV4
dFRyYWNrc1tpXTsKKworICAgICAgICAgICAgaWYgKHRyYWNrSUQgPT0gcGxhdGZvcm1UcmFja0lE
KHBsYXRmb3JtVHJhY2suZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgdHJhY2tUb1NlbGVjdCA9
IHBsYXRmb3JtVHJhY2s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXRyYWNrVG9TZWxlY3QpIHsKKyAgICAgICAgTlNM
b2coQCJUZXh0IHRyYWNrIElEICVpIGlzIHVua25vd24sIGlnbm9yaW5nLiIsIHRyYWNrSUQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9tZW51SW50ZXJmYWNlLT5jbGllbnQoKS0+
c2V0U2VsZWN0ZWRUZXh0VHJhY2sodHJhY2tUb1NlbGVjdCk7Cit9CisKK1Bhc3NSZWZQdHI8UGxh
dGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlPiBNZWRpYVBsYXllclByaXZhdGVJT1M6OnRleHRU
cmFja01lbnUoKQoreworICAgIGlmICghbV9tZW51SW50ZXJmYWNlKQorICAgICAgICBtX21lbnVJ
bnRlcmZhY2UgPSBQbGF0Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1M6OmNyZWF0ZSh0aGlz
KTsKKyAgICByZXR1cm4gbV9tZW51SW50ZXJmYWNlOworfQorI2VuZGlmIC8vIEVOQUJMRShWSURF
T19UUkFDSykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitAaW1wbGVtZW50YXRpb24gV2Vi
Q29yZU1lZGlhUGxheWVyTm90aWZpY2F0aW9uSGVscGVyCisKKy0gKGlkKWluaXRXaXRoQ2xpZW50
OihNZWRpYVBsYXllclByaXZhdGVJT1MgKiljbGllbnQKK3sKKyAgICBfY2xpZW50ID0gY2xpZW50
OworICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKHZvaWQpZGlzY29ubmVjdAorewor
ICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2Vs
Zl07CisgICAgX2NsaWVudCA9IDA7Cit9CisKKy0gKHZvaWQpY2FuY2VsUGVuZGluZ1JlcXVlc3Rz
Cit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdl
dDpzZWxmXTsKK30KKworLSAodm9pZClkZWxheU5vdGlmaWNhdGlvbjooaW50KW5vdGlmaWNhdGlv
bgoreworICAgIGlmIChfY2xpZW50KQorICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNl
bGVjdG9yKGRlbGl2ZXJOb3RpZmljYXRpb246KSB3aXRoT2JqZWN0OltOU051bWJlciBudW1iZXJX
aXRoSW50Om5vdGlmaWNhdGlvbl0gYWZ0ZXJEZWxheTowXTsKK30KKworLSAodm9pZClkZWxpdmVy
Tm90aWZpY2F0aW9uOihOU051bWJlciAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmICghX2NsaWVu
dCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChfY2xpZW50LT5jYWxsYmFja3NEZWxheWVkKCkp
CisgICAgICAgIFtzZWxmIGRlbGF5Tm90aWZpY2F0aW9uOltub3RpZmljYXRpb24gaW50VmFsdWVd
XTsKKyAgICBlbHNlCisgICAgICAgIF9jbGllbnQtPmRlbGl2ZXJOb3RpZmljYXRpb24oKE1lZGlh
UGxheWVyUHJveHlOb3RpZmljYXRpb25UeXBlKVtub3RpZmljYXRpb24gaW50VmFsdWVdKTsKK30K
KworLSAodm9pZClzY2hlZHVsZVByZXBhcmVUb1BsYXlXaXRoT3B0aW9uYWxEZWxheTooTlNOdW1i
ZXIgKilzaG91bGREZWxheQoreworICAgIGlmICghX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChbc2hvdWxkRGVsYXkgYm9vbFZhbHVlXSkKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNl
bGVjdG9yOkBzZWxlY3RvcihzY2hlZHVsZVByZXBhcmVUb1BsYXlXaXRoT3B0aW9uYWxEZWxheTop
IHdpdGhPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSBhZnRlckRlbGF5OjBdOwor
ICAgIGVsc2UKKyAgICAgICAgX2NsaWVudC0+cHJlcGFyZVRvUGxheSgpOworfQorCistICh2b2lk
KXNjaGVkdWxlRGVmZXJyZWRQcm9wZXJ0aWVzV2l0aE9wdGlvbmFsRGVsYXk6KE5TTnVtYmVyICop
c2hvdWxkRGVsYXkKK3sKKyAgICBpZiAoIV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChbc2hvdWxkRGVsYXkgYm9vbFZhbHVlXSkgeworICAgICAgICBpZiAoIV9kZWZlcnJlZFBy
b3BlcnRpZXNTY2hlZHVsZWQpIHsKKyAgICAgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpA
c2VsZWN0b3Ioc2NoZWR1bGVEZWZlcnJlZFByb3BlcnRpZXNXaXRoT3B0aW9uYWxEZWxheTopIHdp
dGhPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSBhZnRlckRlbGF5OjBdOworICAg
ICAgICAgICAgX2RlZmVycmVkUHJvcGVydGllc1NjaGVkdWxlZCA9IFlFUzsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgX2RlZmVycmVkUHJvcGVydGllc1NjaGVkdWxl
ZCA9IE5POworICAgIF9jbGllbnQtPnByb2Nlc3NEZWZlcnJlZFJlcXVlc3RzKCk7Cit9CisKKy0g
KHZvaWQpcGx1Z2luRWxlbWVudEluQmFuZEFsdGVybmF0ZVRleHRUcmFja3NEaWRDaGFuZ2U6KE5T
QXJyYXkgKil0cmFja3MKK3sKKyAgICBpZiAoIV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBpZiAoIV9jbGllbnQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIF9jbGllbnQtPmluYmFuZFRleHRUcmFja3NDaGFuZ2VkKHRyYWNrcyk7
CisgICAgfSk7Cit9CisKKy0gKHZvaWQpcGx1Z2luRWxlbWVudERpZFNlbGVjdFRleHRUcmFjazoo
TlNEaWN0aW9uYXJ5ICopdHJhY2tJbmZvCit7CisgICAgaWYgKCFfY2xpZW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKCFfY2xpZW50KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBfY2xpZW50LT50ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5
UGx1Z2luKHRyYWNrSW5mbyk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpcGx1Z2luRWxlbWVudERp
ZE91dHB1dEF0dHJpYnV0ZWRTdHJpbmdzOihOU0FycmF5ICopc3RyaW5ncyBuYXRpdmVTYW1wbGVC
dWZmZXJzOihOU0FycmF5ICopYnVmZmVycyBmb3JUaW1lOihOU1RpbWVJbnRlcnZhbCl0aW1lCit7
CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcnMpOworCisgICAgaWYgKCFfY2xpZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKCFfY2xpZW50KQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBfY2xpZW50LT5wcm9jZXNzSW5iYW5kVGV4dFRy
YWNrQ3VlKHN0cmluZ3MsIHRpbWUpOworICAgIH0pOworfQorCitAZW5kCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnRE
YXRhSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZv
bnREYXRhSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3NTBjNDllNWNlMzRiOTZkOTU5MmMyNjQ2MTMxOGQ3
ZjQ5NTJmMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0KQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgor
CisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYWNoZS5oIgorI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCisjaW1wb3J0ICJGb250
U2VydmljZXNJT1MuaCIKKyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0ZvbnRHbHlwaFN1cHBvcnQu
aD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0ZvbnRJbmZvLmg+CisjaW1wb3J0IDxDb3JlR3Jh
cGhpY3MvQ0dGb250UmVuZGVyaW5nLmg+CisjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgor
I2ltcG9ydCA8ZmxvYXQuaD4KKyNpbXBvcnQgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFy
YWJpYyhDRlN0cmluZ1JlZiBmb250RmFtaWx5TmFtZSkKK3sKKyAgICBpZiAoIWZvbnRGYW1pbHlO
YW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaW1lcyBOZXcgUm9tYW4gY29u
dGFpbnMgQXJhYmljIGdseXBocywgYnV0IENvcmUgVGV4dCBkb2Vzbid0IGtub3cgaG93IHRvIHNo
YXBlIHRoZW0uIDxyZGFyOi8vcHJvYmxlbS85ODIzOTc1PgorICAgIC8vIEZJWE1FIDxyZGFyOi8v
cHJvYmxlbS8xMjA5NjgzNT4gcmVtb3ZlIHRoaXMgZnVuY3Rpb24gb25jZSB0aGUgYWJvdmUgYnVn
IGlzIGZpeGVkLgorICAgIC8vIEFyaWFsIGFuZCBUYWhvbWEgYXJlIGhhdmUgcGVyZm9ybWFuY2Ug
aXNzdWVzIHNvIGRvbid0IHVzZSB0aGVtIGFzIHdlbGwuCisgICAgcmV0dXJuIChDRlN0cmluZ0Nv
bXBhcmUoQ0ZTVFIoIlRpbWVzIE5ldyBSb21hbiIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NG
Q29tcGFyZUVxdWFsVG8pCisgICAgICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIkFy
aWFsIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKKyAgICAgICAg
ICAgfHwgKENGU3RyaW5nQ29tcGFyZShDRlNUUigiVGFob21hIiksIGZvbnRGYW1pbHlOYW1lLCAw
KSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyk7Cit9CisKK3N0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNh
bEdseXBocyhDVEZvbnRSZWYgY3RGb250KQoreworICAgIC8vIFRoZSBjaGVjayBkb2Vzbid0IGxv
b2sgbmVhdCBidXQgdGhpcyBpcyB3aGF0IEFwcEtpdCBkb2VzIGZvciB2ZXJ0aWNhbCB3cml0aW5n
Li4uCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHRhYmxlVGFncyA9IGFkb3B0Q0YoQ1RGb250
Q29weUF2YWlsYWJsZVRhYmxlcyhjdEZvbnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykp
OworICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQo
KSk7CisgICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5k
ZXgpIHsKKyAgICAgICAgQ1RGb250VGFibGVUYWcgdGFnID0gKENURm9udFRhYmxlVGFnKSh1aW50
cHRyX3QpQ0ZBcnJheUdldFZhbHVlQXRJbmRleCh0YWJsZVRhZ3MuZ2V0KCksIGluZGV4KTsKKyAg
ICAgICAgaWYgKHRhZyA9PSBrQ1RGb250VGFibGVWaGVhIHx8IHRhZyA9PSBrQ1RGb250VGFibGVW
T1JHKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX3N5bnRo
ZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyBjZWlsZiht
X3BsYXRmb3JtRGF0YS5zaXplKCkgIC8gMjQuMGYpIDogMC5mOworICAgIG1fc3BhY2VHbHlwaCA9
IDA7CisgICAgbV9zcGFjZVdpZHRoID0gMDsKKyAgICB1bnNpZ25lZCB1bml0c1BlckVtOworICAg
IGZsb2F0IGFzY2VudDsKKyAgICBmbG9hdCBkZXNjZW50OworICAgIGZsb2F0IGxpbmVHYXA7Cisg
ICAgZmxvYXQgbGluZVNwYWNpbmc7CisgICAgZmxvYXQgeEhlaWdodDsKKyAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWU7CisgICAgaWYgKENURm9udFJlZiBjdEZvbnQgPSBtX3Bs
YXRmb3JtRGF0YS5mb250KCkpIHsKKyAgICAgICAgRm9udFNlcnZpY2VzSU9TIGZvbnRTZXJ2aWNl
KGN0Rm9udCk7CisgICAgICAgIGFzY2VudCA9IGNlaWxmKGZvbnRTZXJ2aWNlLmFzY2VudCgpKTsK
KyAgICAgICAgZGVzY2VudCA9IGNlaWxmKGZvbnRTZXJ2aWNlLmRlc2NlbnQoKSk7CisgICAgICAg
IGxpbmVTcGFjaW5nID0gZm9udFNlcnZpY2UubGluZVNwYWNpbmcoKTsKKyAgICAgICAgbGluZUdh
cCA9IGZvbnRTZXJ2aWNlLmxpbmVHYXAoKTsKKyAgICAgICAgeEhlaWdodCA9IGZvbnRTZXJ2aWNl
LnhIZWlnaHQoKTsKKyAgICAgICAgdW5pdHNQZXJFbSA9IGZvbnRTZXJ2aWNlLnVuaXRzUGVyRW0o
KTsKKyAgICAgICAgZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RG
b250KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ0dGb250UmVmIGNnRm9udCA9IG1fcGxhdGZv
cm1EYXRhLmNnRm9udCgpOworCisgICAgICAgIHVuaXRzUGVyRW0gPSBDR0ZvbnRHZXRVbml0c1Bl
ckVtKGNnRm9udCk7CisKKyAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEu
c2l6ZSgpOworICAgICAgICBhc2NlbnQgPSBscm91bmRmKHNjYWxlRW1Ub1VuaXRzKENHRm9udEdl
dEFzY2VudChjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIGRlc2Nl
bnQgPSBscm91bmRmKC1zY2FsZUVtVG9Vbml0cygtYWJzKENHRm9udEdldERlc2NlbnQoY2dGb250
KSksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKKyAgICAgICAgbGluZUdhcCA9IGxyb3VuZGYo
c2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0TGVhZGluZyhjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBv
aW50U2l6ZSk7CisgICAgICAgIHhIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVp
Z2h0KGNnRm9udCksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworCisgICAgICAgIGxpbmVTcGFj
aW5nID0gYXNjZW50ICsgZGVzY2VudCArIGxpbmVHYXA7CisgICAgICAgIGZhbWlseU5hbWUgPSBh
ZG9wdENGKENHRm9udENvcHlGYW1pbHlOYW1lKGNnRm9udCkpOworICAgIH0KKworICAgIG1fZm9u
dE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNl
dEFzY2VudChhc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsK
KyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7CisgICAgbV9mb250TWV0cmlj
cy5zZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7CisgICAgbV9mb250TWV0cmljcy5zZXRYSGVp
Z2h0KHhIZWlnaHQpOworICAgIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljID0gZm9udEZhbWls
eVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhmYW1pbHlOYW1lLmdldCgpKTsKKworICAgIGlmIChw
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFpc1RleHRPcmllbnRh
dGlvbkZhbGxiYWNrKCkpCisgICAgICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSBmb250SGFzVmVy
dGljYWxHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCkpOworCisgICAgaWYgKCFtX3BsYXRm
b3JtRGF0YS5tX2lzRW1vamkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB0aGlyZE9mU2l6
ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAvIDM7CisgICAgbV9mb250TWV0cmljcy5zZXRBc2Nl
bnQodGhpcmRPZlNpemUpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudCh0aGlyZE9mU2l6
ZSk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKHRoaXJkT2ZTaXplKTsKKyAgICBtX2Zv
bnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKDApOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUNoYXJXaWR0aEluaXQoKQoreworICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKKyAgICBt
X21heENoYXJXaWR0aCA9IDA7CisKKyAgICAvLyBGYWxsYmFjayB0byBhIGNyb3NzLXBsYXRmb3Jt
IGVzdGltYXRlLCB3aGljaCB3aWxsIHBvcHVsYXRlIHRoZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBu
b24tcG9zaXRpdmUuCisgICAgaW5pdENoYXJXaWR0aHMoKTsKK30KKworUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Cit7CisgICAg
aWYgKGlzQ3VzdG9tRm9udCgpKSB7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9u
dERhdGEobV9wbGF0Zm9ybURhdGEpOworICAgICAgICBzY2FsZWRGb250RGF0YS5tX3NpemUgPSBz
Y2FsZWRGb250RGF0YS5tX3NpemUgKiBzY2FsZUZhY3RvcjsKKyAgICAgICAgcmV0dXJuIFNpbXBs
ZUZvbnREYXRhOjpjcmVhdGUoc2NhbGVkRm9udERhdGEsIHRydWUsIGZhbHNlKTsKKyAgICB9CisK
KyAgICBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICogc2NhbGVGYWN0b3I7Cisg
ICAgQ1RGb250U3ltYm9saWNUcmFpdHMgZm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJh
aXRzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0
b3JSZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3Io
bV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7CisgICAgUmV0YWluUHRyPENURm9udFJlZj4gc2NhbGVk
Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlw
dG9yLmdldCgpLCBzaXplLCBudWxscHRyKSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRG
b250RGF0YShzY2FsZWRGb250LmdldCgpLCBzaXplLCBtX3BsYXRmb3JtRGF0YS5pc1ByaW50ZXJG
b250KCksIGZhbHNlLCBmYWxzZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSk7CisKKyAg
ICBpZiAoc2NhbGVkRm9udERhdGEuZm9udCgpKSB7CisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0
YS5tX3N5bnRoZXRpY0JvbGQpCisgICAgICAgICAgICBmb250VHJhaXRzIHw9IGtDVEZvbnRCb2xk
VHJhaXQ7CisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY09ibGlxdWUpCisg
ICAgICAgICAgICBmb250VHJhaXRzIHw9IGtDVEZvbnRJdGFsaWNUcmFpdDsKKworICAgICAgICBD
VEZvbnRTeW1ib2xpY1RyYWl0cyBzY2FsZWRGb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMoc2NhbGVkRm9udERhdGEuZm9udCgpKTsKKyAgICAgICAgc2NhbGVkRm9udERhdGEubV9z
eW50aGV0aWNCb2xkID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250Qm9sZFRyYWl0KSAmJiAhKHNjYWxl
ZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKTsKKyAgICAgICAgc2NhbGVkRm9udERhdGEu
bV9zeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250SXRhbGljVHJhaXQpICYm
ICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisKKyAgICAgICAgcmV0
dXJuIGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgmc2NhbGVkRm9udERhdGEpOworICAg
IH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIFNpbXBsZUZvbnREYXRhOjpjb250
YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCBpbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAg
Q1RGb250UmVmIGN0Rm9udCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsKKyAgICBtX3RyZWF0QXNG
aXhlZFBpdGNoID0gZmFsc2U7CisgICAgaWYgKCFjdEZvbnQpCisgICAgICAgIHJldHVybjsgLy8g
Q1RGb250IGlzIG51bGwgaW4gdGhlIGNhc2Ugb2YgU1ZHIGZvbnRzIGZvciBleGFtcGxlLgorCisg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmdWxsTmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZ1
bGxOYW1lKGN0Rm9udCkpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZSA9
IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RGb250KSk7CisKKyAgICBtX3RyZWF0QXNG
aXhlZFBpdGNoID0gQ0dGb250SXNGaXhlZFBpdGNoKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKSB8
fCAoZnVsbE5hbWUgJiYgKENGU3RyaW5nQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk9z
YWthLU1vbm8iKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFs
VG8gfHwgQ0ZTdHJpbmdDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTVMtUEdvdGhpYyIp
LCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpOworICAg
IGlmIChmYW1pbHlOYW1lICYmIENGU3RyaW5nQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNU
UigiQ291cmllciBOZXciKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFy
ZUVxdWFsVG8pIHsKKyAgICAgICAgLy8gU3BlY2lhbCBjYXNlIENvdXJpZXIgTmV3IHRvIG5vdCBi
ZSB0cmVhdGVkIGFzIGZpeGVkIHBpdGNoLCBhcyB0aGlzIHdpbGwgbWFrZSB1c2Ugb2YgYSBoYWNr
ZWQgc3BhY2Ugd2lkdGggd2hpY2ggaXMgdW5kZXNpcmVhYmxlIGZvciBpUGhvbmUgKHNlZSByZGFy
Oi8vNjI2OTc4MykuCisgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKKyAgICB9
Cit9CisKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGgg
Z2x5cGgpIGNvbnN0Cit7CisgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOworICAgIGlm
IChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWwgfHwgbV9pc0Jyb2tl
bklkZW9ncmFwaEZhbGxiYWNrKSB7CisgICAgICAgIGlmIChwbGF0Zm9ybURhdGEoKS5tX2lzRW1v
amkpCisgICAgICAgICAgICBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhtX3BsYXRmb3JtRGF0
YS5jdEZvbnQoKSwga0NURm9udEhvcml6b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAmYWR2YW5j
ZSwgMSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gcGxh
dGZvcm1EYXRhKCkubV9zaXplOworICAgICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNm
b3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUpOwor
ICAgICAgICAgICAgc3RhdGljIGNvbnN0IENHRm9udFJlbmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0
eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmlu
Z1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVs
UXVhbnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJlZDsKKyAgICAg
ICAgICAgIGlmICghQ0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgp
LmNnRm9udCgpLCAmdHJhbnNmb3JtLCByZW5kZXJpbmdTdHlsZSwgJmdseXBoLCAxLCAmYWR2YW5j
ZSkpIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lID0g
YWRvcHRDRihDR0ZvbnRDb3B5RnVsbE5hbWUocGxhdGZvcm1EYXRhKCkuY2dGb250KCkpKTsKKyAg
ICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjYWNoZSBnbHlwaCB3aWR0aHMgZm9y
ICVAICVmIiwgZnVsbE5hbWUuZ2V0KCksIHBvaW50U2l6ZSk7CisgICAgICAgICAgICAgICAgYWR2
YW5jZS53aWR0aCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAg
ICAgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCks
IGtDVEZvbnRWZXJ0aWNhbE9yaWVudGF0aW9uLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsKKworICAg
IHJldHVybiBhZHZhbmNlLndpZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9pb3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ5ZThiNmU5MDIwM2IwMGFhMGM4MDhiODZkMzdmMjBhYTg4YmM3MTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25JT1MuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPU19oCisjZGVmaW5lIFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uSU9TX2gKKworI2lmIFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQor
CisjaW1wb3J0ICJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5oIgorI2ltcG9ydCA8UXVhcnR6Q29y
ZS9DQUxheWVyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK0BjbGFzcyBXZWJDb3Jl
VGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1NIZWxwZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MgOiBwdWJsaWMgVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24geworcHVibGljOgorICAgIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50Kik7CisgICAgdmlydHVhbCB+VGV4dFRyYWNrUmVw
cmVzZW50YXRpb25JT1MoKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBPVkVSUklERSB7IHJl
dHVybiBtX2xheWVyLmdldCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRTY2FsZShm
bG9hdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnRSZWN0IGJvdW5kcygpIGNvbnN0IE9WRVJS
SURFOworCisgICAgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25DbGllbnQqIGNsaWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKK3ByaXZhdGU6CisgICAgVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25DbGllbnQqIG1fY2xpZW50OworICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2xheWVyOwor
ICAgIFJldGFpblB0cjxXZWJDb3JlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1NIZWxwZXI+IG1f
ZGVsZWdhdGU7Cit9OworCit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpICYmIEVOQUJMRShW
SURFT19UUkFDSykKKworI2VuZGlmIC8vIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9UZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lv
cy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZTM1ZTQyYjg5OWM5
MTVjN2E1MmY4ZWZkODY2MjM2YWYwMmMwNGJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1t
CkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbklPUy5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCisj
aW5jbHVkZSAiV2ViQ29yZVRocmVhZFJ1bi5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbnRlcmZhY2UgV2ViQ29yZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSU9TSGVscGVyIDogTlNPYmplY3QgeworICAgIFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uSU9TKiBfcGFyZW50OworfQorLSAoaWQpaW5pdFdpdGhQYXJlbnQ6KFRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSU9TKilwYXJlbnQ7CitAcHJvcGVydHkgKGFzc2lnbikgVGV4dFRyYWNrUmVw
cmVzZW50YXRpb25JT1MqIHBhcmVudDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkNvcmVU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPU0hlbHBlcgorLSAoaWQpaW5pdFdpdGhQYXJlbnQ6KFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKilwYXJlbnQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYucGFyZW50ID0gcGFy
ZW50OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIHNl
bGYucGFyZW50ID0gbmlsOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRQ
YXJlbnQ6KFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKilwYXJlbnQKK3sKKyAgICBpZiAoX3Bh
cmVudCkKKyAgICAgICAgW19wYXJlbnQtPnBsYXRmb3JtTGF5ZXIoKSByZW1vdmVPYnNlcnZlcjpz
ZWxmIGZvcktleVBhdGg6QCJib3VuZHMiXTsKKworICAgIF9wYXJlbnQgPSBwYXJlbnQ7CisKKyAg
ICBpZiAoX3BhcmVudCkKKyAgICAgICAgW19wYXJlbnQtPnBsYXRmb3JtTGF5ZXIoKSBhZGRPYnNl
cnZlcjpzZWxmIGZvcktleVBhdGg6QCJib3VuZHMiIG9wdGlvbnM6bmlsIGNvbnRleHQ6MF07Cit9
CisKKy0gKFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKilwYXJlbnQKK3sKKyAgICByZXR1cm4g
X3BhcmVudDsKK30KKworLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAq
KWtleVBhdGggb2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5n
ZSBjb250ZXh0Oih2b2lkICopY29udGV4dAoreworICAgIFVOVVNFRF9QQVJBTShjaGFuZ2UpOwor
ICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAg
aWYgKF9wYXJlbnQgJiYgW2tleVBhdGggaXNFcXVhbDpAImJvdW5kcyJdICYmIG9iamVjdCA9PSBf
cGFyZW50LT5wbGF0Zm9ybUxheWVyKCkpCisgICAgICAgICAgICBfcGFyZW50LT5jbGllbnQoKS0+
dGV4dFRyYWNrUmVwcmVzZW50YXRpb25Cb3VuZHNDaGFuZ2VkKF9wYXJlbnQtPmJvdW5kcygpKTsK
KyAgICB9KTsKK30KKworLSAoaWQpYWN0aW9uRm9yTGF5ZXI6KENBTGF5ZXIgKilsYXllciBmb3JL
ZXk6KE5TU3RyaW5nICopZXZlbnQKK3sKKyAgICBVTlVTRURfUEFSQU0obGF5ZXIpOworICAgIFVO
VVNFRF9QQVJBTShldmVudCk7CisgICAgLy8gUmV0dXJuaW5nIGEgTlNOdWxsIGZyb20gdGhpcyBk
ZWxlZ2F0ZSBtZXRob2QgZGlzYWJsZXMgYWxsIGltcGxpY2l0IENBTGF5ZXIgYWN0aW9ucy4KKyAg
ICByZXR1cm4gW05TTnVsbCBudWxsXTsKK30KKworQGVuZAorCitQYXNzT3duUHRyPFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uPiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbjo6Y3JlYXRlKFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUyhjbGllbnQpKTsKK30KKworVGV4dFRyYWNrUmVw
cmVzZW50YXRpb25JT1M6OlRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKFRleHRUcmFja1JlcHJl
c2VudGF0aW9uQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBt
X2xheWVyKGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSkpCisgICAgLCBtX2RlbGVnYXRl
KGFkb3B0TlMoW1tXZWJDb3JlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1NIZWxwZXIgYWxsb2Nd
IGluaXRXaXRoUGFyZW50OnRoaXNdKSkKK3sKKyAgICBbbV9sYXllci5nZXQoKSBzZXREZWxlZ2F0
ZTptX2RlbGVnYXRlLmdldCgpXTsKKyAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50c0dyYXZp
dHk6a0NBR3Jhdml0eUJvdHRvbV07Cit9CisKK1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TOjp+
VGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MoKQoreworICAgIFttX2xheWVyLmdldCgpIHNldERl
bGVnYXRlOm5pbF07CisgICAgW21fZGVsZWdhdGUuZ2V0KCkgc2V0UGFyZW50OjBdOworfQorCit2
b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TOjp1cGRhdGUoKQoreworICAgIGlmIChSZWZQ
dHI8SW1hZ2U+IHJlcHJlc2VudGF0aW9uID0gbV9jbGllbnQtPmNyZWF0ZVRleHRUcmFja1JlcHJl
c2VudGF0aW9uSW1hZ2UoKSkKKyAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlk
KXJlcHJlc2VudGF0aW9uLT5nZXRDR0ltYWdlUmVmKCldOworfQorCit2b2lkIFRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSU9TOjpzZXRDb250ZW50U2NhbGUoZmxvYXQgc2NhbGUpCit7CisgICAgW21f
bGF5ZXIuZ2V0KCkgc2V0Q29udGVudHNTY2FsZTpzY2FsZV07Cit9CisKK0ludFJlY3QgVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25JT1M6OmJvdW5kcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QoRmxvYXRSZWN0KFttX2xheWVyLmdldCgpIGJvdW5kc10pKTsKK30KKworI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMuaAppbmRleCAyNDgyYjU5M2Ji
OGVlMjhhMmMwMDU4MjliNTNiMzcxYzkyNzY3OGIyLi4wMTNjMWU1NGRmOGQ2YmViM2M1YjM3MDky
YmRjNjJjZTcxM2NkNTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29sb3JNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29sb3JNYWMuaApAQCAtMzEsMTMgKzMxLDE3IEBACiAKICNpbmNsdWRlICJDb2xvci5o
IgogCisjaWYgIVBMQVRGT1JNKElPUykKIE9CSkNfQ0xBU1MgTlNDb2xvcjsKKyNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBUaGVz
ZSBmdW5jdGlvbnMgYXNzdW1lIE5TQ29sb3JzIGFyZSBpbiBEZXZpY2VSR0IgY29sb3JzcGFjZQog
ICAgIENvbG9yIGNvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqKTsKICAgICBOU0NvbG9yICpuc0Nv
bG9yKGNvbnN0IENvbG9yJik7CisjZW5kaWYKIAogICAgIGJvb2wgdXNlc1Rlc3RNb2RlRm9jdXNS
aW5nQ29sb3IoKTsKICAgICB2b2lkIHNldFVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKGJvb2wp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAppbmRleCA0OTcxZjRkYTIzNjFlYTZlMzQ3ODMz
OTc4ODkyMTdmMTQ2NTBmMjljLi42MDM5MTlmODlmNzQ4NWU5NWQwODU0ZDYwY2I2ZmE5MDFiZmEz
Nzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29t
cGxleFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcApAQCAtMzEsNyArMzEsMTEgQEAKICNp
bmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNp
bmNsdWRlICJUZXh0UnVuLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29y
ZVRleHQvQ29yZVRleHQuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCkBAIC01NzIsNiArNTc2
LDkgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2Vz
KCkKICAgICAgICAgQ29tcGxleFRleHRSdW4mIGNvbXBsZXhUZXh0UnVuID0gKm1fY29tcGxleFRl
eHRSdW5zW3JdOwogICAgICAgICB1bnNpZ25lZCBnbHlwaENvdW50ID0gY29tcGxleFRleHRSdW4u
Z2x5cGhDb3VudCgpOwogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBj
b21wbGV4VGV4dFJ1bi5mb250RGF0YSgpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgYm9v
bCBpc0Vtb2ppID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1faXNFbW9qaTsKKyNlbmRpZgog
CiAgICAgICAgIC8vIFJlcHJlc2VudCB0aGUgaW5pdGlhbCBhZHZhbmNlIGZvciBhIHRleHQgcnVu
IGJ5IGFkanVzdGluZyB0aGUgYWR2YW5jZQogICAgICAgICAvLyBvZiB0aGUgbGFzdCBnbHlwaCBv
ZiB0aGUgcHJldmlvdXMgdGV4dCBydW4gaW4gdGhlIGdseXBoIGJ1ZmZlci4KQEAgLTYyMCw2ICs2
MjcsMTAgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFu
Y2VzKCkKICAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNl
KGNoKTsKICAgICAgICAgICAgIENHR2x5cGggZ2x5cGggPSB0cmVhdEFzU3BhY2UgPyBmb250RGF0
YS0+c3BhY2VHbHlwaCgpIDogZ2x5cGhzW2ldOwogICAgICAgICAgICAgQ0dTaXplIGFkdmFuY2Ug
PSB0cmVhdEFzU3BhY2UgPyBDR1NpemVNYWtlKHNwYWNlV2lkdGgsIGFkdmFuY2VzW2ldLmhlaWdo
dCkgOiBhZHZhbmNlc1tpXTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICBpZiAoaXNF
bW9qaSAmJiBhZHZhbmNlLndpZHRoKQorICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBm
b250RGF0YS0+d2lkdGhGb3JHbHlwaChnbHlwaCk7CisjZW5kaWYKIAogICAgICAgICAgICAgaWYg
KGNoID09ICdcdCcgJiYgbV9ydW4uYWxsb3dUYWJzKCkpCiAgICAgICAgICAgICAgICAgYWR2YW5j
ZS53aWR0aCA9IG1fZm9udC50YWJXaWR0aCgqZm9udERhdGEsIG1fcnVuLnRhYlNpemUoKSwgbV9y
dW4ueFBvcygpICsgbV90b3RhbFdpZHRoICsgd2lkdGhTaW5jZUxhc3RDb21taXQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlckNvcmVUZXh0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCmluZGV4IDQ5NjBhNGQ0ZjA2YTM3YjYx
ZWQwNjQ2N2IzMmZlYzA2MDliZjQyNmIuLjQ0YzAyOTRmZDc3YzBmZjliMjhhMzgxMWZmNzE4YjBj
Y2UxZjAxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KQEAg
LTMxLDcgKzMxLDExIEBACiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDb3JlVGV4
dC9Db3JlVGV4dC5oPgorI2Vsc2UKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxp
Y2F0aW9uU2VydmljZXMuaD4KKyNlbmRpZgogCiBAaW50ZXJmYWNlIFdlYkNhc2NhZGVMaXN0IDog
TlNBcnJheSB7CiAgICAgQHByaXZhdGUKQEAgLTI2NiwxMiArMjcwLDE3IEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY3AsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNo
ZSgpLT5nZXRDYWNoZWRGb250RGF0YShtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1l
LmdldCgpLCBmYWxzZSwgRm9udENhY2hlOjpEb05vdFJldGFpbikuZ2V0KCk7CisjaWYgIVBMQVRG
T1JNKElPUykKICAgICAgICAgICAgICAgICAgICAgLy8gQ29yZSBUZXh0IG1heSBoYXZlIHVzZWQg
YSBmb250IHRoYXQgaXMgbm90IGtub3duIHRvIE5TRm9udE1hbmFnZXIuIEluIHRoYXQgY2FzZSwg
ZmFsbCBiYWNrIG9uCiAgICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSBmb250IGFzIHJl
dHVybmVkLCBldmVuIHRob3VnaCBpdCBtYXkgbm90IGhhdmUgdGhlIGJlc3QgTlNGb250UmVuZGVy
aW5nTW9kZS4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFydW5Gb250RGF0YSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBydW5Gb250UGxhdGZvcm1EYXRhKChO
U0ZvbnQgKilydW5Gb250LCBDVEZvbnRHZXRTaXplKHJ1bkZvbnQpLCBtX2ZvbnQuZm9udERlc2Ny
aXB0aW9uKCkudXNlUHJpbnRlckZvbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBydW5G
b250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgmcnVuRm9udFBsYXRmb3Jt
RGF0YSwgRm9udENhY2hlOjpEb05vdFJldGFpbikuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAg
IH0KKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBKdXN0IGFzc2VydCBmb3Ig
bm93LCB1bnRpbCB3ZSBjYW4gZGV2aXNlIGEgYmV0dGVyIGZpeCB0aGF0IHdvcmtzIHdpdGggaU9T
LgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQocnVuRm9udERhdGEpOworI2VuZGlmCiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgcnVu
Rm9udERhdGEgIT0gbV9mb250LnByaW1hcnlGb250KCkpCiAgICAgICAgICAgICAgICAgICAgIG1f
ZmFsbGJhY2tGb250cy0+YWRkKHJ1bkZvbnREYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0KaW5kZXggMmY3MzMxNGZh
MGI5ZGM0YWRjM2QyNWQ0MzlhZGRhMThhYTkxYjc3OS4uYWM5YmMzMWY5ZGMzMzNjMDUyNWY3ODRi
NjNlMTk1OGIxNjliMTgyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0KQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAKKyNpZiAhUExBVEZPUk0oSU9T
KQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1F
X0FTX0NHR0VPTUVUUllfVFlQRVMKQEAgLTQzLDMgKzQ1LDUgQEAgRmxvYXRQb2ludDo6b3BlcmF0
b3IgTlNQb2ludCgpIGNvbnN0CiAjZW5kaWYKIAogfQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9h
dFJlY3RNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRS
ZWN0TWFjLm1tCmluZGV4IDFkNmIwNDU3ODg3ZDIxYjg5MjM0ODZhMjYyZjEzNzM1OWFmZThiNmYu
LjllZmY5YjNhYjY3ODYwNDQ0YTE2ZDllMWE3NzRhYTA4MWIyZGEzZTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFJlY3RNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1hYy5tbQpAQCAt
MjksNiArMjksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogCiBG
bG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBOU1JlY3QmIHIpIDogbV9sb2NhdGlvbihyLm9yaWdp
biksIG1fc2l6ZShyLnNpemUpCkBAIC00MSw1ICs0Miw2IEBAIEZsb2F0UmVjdDo6b3BlcmF0b3Ig
TlNSZWN0KCkgY29uc3QKIH0KIAogI2VuZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0
U2l6ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNp
emVNYWMubW0KaW5kZXggMDFlZmJlOTFkYzQ4NTkzMGUxOTI5Mzk4MjJkZWE5YTMxNzRkZGYxYi4u
MTQwMWJmY2FlMWE4ZmFmYmIxNjkyY2I4ZmQ1MTgxMTczMTQxYTEzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tCkBAIC0y
OSw2ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFQTEFURk9STShJT1Mp
CiAjaWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiAKIEZs
b2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IE5TU2l6ZSYgcykgOiBtX3dpZHRoKHMud2lkdGgpLCBt
X2hlaWdodChzLmhlaWdodCkKQEAgLTQxLDUgKzQyLDYgQEAgRmxvYXRTaXplOjpvcGVyYXRvciBO
U1NpemUoKSBjb25zdAogfQogCiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENh
Y2hlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNo
ZU1hYy5tbQppbmRleCA1OTFmZTE2NzYwMjg1ZGY2NGRjZWU3ZWNlNmU3ODA3OTVhMDBjOTY2Li43
OWNmNWMxYWNiNmNlNjU2OTFlYzcyNzU2MmI1YzRmNmEwN2M5OGFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KQEAgLTMw
LDYgKzMwLDggQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRm9udENhY2hlLmgiCiAK
KyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJTaW1wbGVG
b250RGF0YS5oIgogI2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0YS5oIgpAQCAtMjIwLDMgKzIyMiw1
IEBAIFBhc3NPd25QdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCmluZGV4IGUw
OTM2ZjNiOWI0NWE2OTk4MjNhYmQ2MDQ0N2ZhYjkwMjhhZWRkODIuLjgyYWNmZmE4NWYxZjA0YzYy
YjQ5NzE3NjY1Yjc1ODcyZmJhMjI3ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCkBAIC03Nyw3
ICs3Nyw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50CiAgICAgcmV0dXJuIGluaXRpYWxBZHZh
bmNlOwogfQogCi12b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVy
IGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4K
ICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTg2LDExICs4NiwxMyBAQCB2b2lkIEZv
bnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgRgogCiAgICAgLy8gV2UgY291bGRuJ3QgZ2VuZXJhdGUgYW55IGdseXBo
cyBmb3IgdGhlIHJ1bi4gIEdpdmUgdXAuCiAgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIERyYXcgdGhlIGds
eXBoIGJ1ZmZlciBub3cgYXQgdGhlIHN0YXJ0aW5nIHBvaW50IHJldHVybmVkIGluIHN0YXJ0WC4K
ICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoc3RhcnRYLCBwb2ludC55KCkpOwogICAgIGRyYXdH
bHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBzdGFydFBvaW50KTsKKworICAg
IHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAogdm9pZCBGb250OjpkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdApAQCAtMTQxLDYgKzE0MywxMCBAQCBjb25z
dCBTaW1wbGVGb250RGF0YSogRm9udDo6Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1
ZW5jZShjb25zdCBVQ2hhciogYwogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIGZvciAoY29uc3Qg
Rm9udERhdGEqIGZvbnREYXRhID0gZm9udERhdGFBdCgwKTsgZm9udERhdGE7IGZvbnREYXRhID0g
Zm9udERhdGFBdCgrK2kpKSB7CiAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVG
b250RGF0YSA9IGZvbnREYXRhLT5mb250RGF0YUZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAm
JiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAmJiBzaW1wbGVGb250RGF0YS0+c2hvdWxkTm90QmVV
c2VkRm9yQXJhYmljKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgogICAgICAgICBp
ZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KSB7CiAgICAgICAgICAgICBpZiAoc2ltcGxlRm9u
dERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaXNDSktJZGVvZ3JhcGhPclN5bWJvbChiYXNlQ2hhcmFjdGVyKSAmJiAh
c2ltcGxlRm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmNwcAppbmRleCBmYTIzNTU3Y2ZmNjU2ZDAwODk3NDQ5MzQ4NWU1YjNhYWE5NjNiYzc3
Li4zNzZlMGQxMjRmZTUyODg1YjgyYjYyOWQ2NzdmNWFhMTExMmJkYzc0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuY3BwCkBAIC0yMyw3ICsyMywxMSBAQAogCiAjaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lmICFQTEFURk9STShJ
T1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+
CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ZvbnRNYWMubW0KaW5kZXggOThmYjc4Y2QwMjgzMDdjN2JlMjYyZDAxYzEyMTc2
NjA5Y2E4YmM3MC4uYWY2Mjg3ZjY2MmRmYTE1M2YxNTQ4MjYwMWI3NGVhNDQ2Yzg0YjI1OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KQEAg
LTEyNCwxMiArMTI0LDEyIEBAIHN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0
aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBTCiAKICAgICBbY2F0YWxv
ZyBkcmF3R2x5cGhzOmdseXBocyBhdFBvc2l0aW9uczpwb3NpdGlvbnMuZGF0YSgpIGluQ29udGV4
dDpjb250ZXh0IHdpdGhGb250OmN0Rm9udCBjb3VudDpjb3VudCBzdHlsZVByZXNldE5hbWU6QCJf
VUlLaXROZXdMZXR0ZXJwcmVzc1N0eWxlIiBzdHlsZUNvbmZpZ3VyYXRpb246c3R5bGVDb25maWd1
cmF0aW9uIGZvcmVncm91bmRDb2xvcjpDR0NvbnRleHRHZXRGaWxsQ29sb3JBc0NvbG9yKGNvbnRl
eHQpXTsKICNlbHNlCi1VTlVTRURfUEFSQU0ocG9pbnQpOwotVU5VU0VEX1BBUkFNKGZvbnQpOwot
VU5VU0VEX1BBUkFNKGNvbnRleHQpOwotVU5VU0VEX1BBUkFNKGdseXBocyk7Ci1VTlVTRURfUEFS
QU0oYWR2YW5jZXMpOwotVU5VU0VEX1BBUkFNKGNvdW50KTsKKyAgICBVTlVTRURfUEFSQU0ocG9p
bnQpOworICAgIFVOVVNFRF9QQVJBTShmb250KTsKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7
CisgICAgVU5VU0VEX1BBUkFNKGdseXBocyk7CisgICAgVU5VU0VEX1BBUkFNKGFkdmFuY2VzKTsK
KyAgICBVTlVTRURfUEFSQU0oY291bnQpOwogI2VuZGlmCiB9CiAKQEAgLTE3OSw3ICsxNzksNyBA
QCBzdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBjb25zdCBTaW1wbGVGb250RGF0YQogICAgIH0KIH0KIAotdm9pZCBGb250OjpkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBGb250OjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSBjb25zdAogewogICAgIGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpOwogICAgIGlmICghcGxh
dGZvcm1EYXRhLnNpemUoKSkKQEAgLTIyMSwxMSArMjIxLDEzIEBAIHZvaWQgRm9udDo6ZHJhd0ds
eXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
LCBjb25zCiAgICAgICAgIGNoYW5nZUZvbnRTbW9vdGhpbmcgPSB0cnVlOwogICAgIH0KIAorI2lm
ICFQTEFURk9STShJT1MpCiAgICAgYm9vbCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcg
PSBmYWxzZTsKICAgICBpZiAoY2hhbmdlRm9udFNtb290aGluZykgewogICAgICAgICBvcmlnaW5h
bFNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB3a0NHQ29udGV4dEdldFNob3VsZFNtb290aEZvbnRz
KGNnQ29udGV4dCk7CiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29u
dGV4dCwgc2hvdWxkU21vb3RoRm9udHMpOwogICAgIH0KKyNlbmRpZgogCiAjaWYgIVBMQVRGT1JN
KElPUykKICAgICBOU0ZvbnQqIGRyYXdGb250OwpAQCAtMjQ2LDkgKzI0OCwzOCBAQCB2b2lkIEZv
bnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgY29ucwogICAgIENHQ29udGV4dFNldEZvbnQoY2dDb250ZXh0LCBwbGF0Zm9y
bURhdGEuY2dGb250KCkpOwogCiAgICAgYm9vbCB1c2VMZXR0ZXJwcmVzc0VmZmVjdCA9IHNob3Vs
ZFVzZUxldHRlcnByZXNzRWZmZWN0KCpjb250ZXh0KTsKKyAgICBGbG9hdFBvaW50IHBvaW50ID0g
YW5jaG9yUG9pbnQ7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGZsb2F0IGZvbnRTaXplID0gcGxh
dGZvcm1EYXRhLnNpemUoKTsKICAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSB1c2VMZXR0
ZXJwcmVzc0VmZmVjdCB8fCBwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSA/IENHQWZm
aW5lVHJhbnNmb3JtSWRlbnRpdHkgOiBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShmb250U2l6
ZSwgZm9udFNpemUpOworICAgIGlmIChwbGF0Zm9ybURhdGEubV9pc0Vtb2ppKSB7CisgICAgICAg
IGlmICghY29udGV4dC0+ZW1vamlEcmF3aW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIC8vIE1pbWljIHRoZSBwb3NpdGlvaW5pbmcgb2Ygbm9uLWJpdG1hcCBnbHlw
aHMsIHdoaWNoIGFyZSBub3Qgc3VicGl4ZWwtcG9zaXRpb25lZC4KKyAgICAgICAgcG9pbnQuc2V0
WShjZWlsZihwb2ludC55KCkpKTsKKworICAgICAgICAvLyBFbW9qaSBnbHlwaHMgc25hcCB0byB0
aGUgQ1NTIHBpeGVsIGdyaWQuCisgICAgICAgIHBvaW50LnNldFgoZmxvb3JmKHBvaW50LngoKSkp
OworCisgICAgICAgIC8vIEVtb2ppIGdseXBocyBhcmUgb2Zmc2V0IG9uZSBDU1MgcGl4ZWwgdG8g
dGhlIHJpZ2h0LgorICAgICAgICBwb2ludC5tb3ZlKDEsIDApOworCisgICAgICAgIC8vIEVtb2pp
IGdseXBocyBhcmUgb2Zmc2V0IHZlcnRpY2FsbHkgYmFzZWQgb24gZm9udCBzaXplLgorICAgICAg
ICBmbG9hdCB5ID0gcG9pbnQueSgpOworICAgICAgICBpZiAoZm9udFNpemUgPD0gMTUpIHsKKyAg
ICAgICAgICAgIC8vIFVuZG8gQ29yZSBUZXh0J3MgeSBhZGp1c3RtZW50LgorICAgICAgICAgICAg
c3RhdGljIGZsb2F0IHlBZGp1c3RtZW50RmFjdG9yID0gaW9zRXhlY3V0YWJsZVdhc0xpbmtlZE9u
T3JBZnRlclZlcnNpb24od2tJT1NTeXN0ZW1WZXJzaW9uXzZfMCkgPyAuMTkgOiAuMTsKKyAgICAg
ICAgICAgIHBvaW50LnNldFkoZmxvb3JmKHkgLSB5QWRqdXN0bWVudEZhY3RvciAqIChmb250U2l6
ZSArIDIpICsgMikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGZvbnRTaXpl
IDwgMjYpCisgICAgICAgICAgICAgICAgeSAtPSAuMzVmICogZm9udFNpemUgLSAxMDsKKworICAg
ICAgICAgICAgLy8gVW5kbyBDb3JlIFRleHQncyB5IGFkanVzdG1lbnQuCisgICAgICAgICAgICBz
dGF0aWMgZmxvYXQgeUFkanVzdG1lbnQgPSBpb3NFeGVjdXRhYmxlV2FzTGlua2VkT25PckFmdGVy
VmVyc2lvbih3a0lPU1N5c3RlbVZlcnNpb25fNl8wKSA/IDMuOCA6IDI7CisgICAgICAgICAgICBw
b2ludC5zZXRZKGZsb29yZih5IC0geUFkanVzdG1lbnQpKTsKKyAgICAgICAgfQorICAgIH0KICNl
bHNlCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JZGVu
dGl0eTsKICAgICBpZiAoZHJhd0ZvbnQgJiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFwRm9u
dCgpKQpAQCAtMzAzLDcgKzMzNCwxMSBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29ucwogICAgICAg
ICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3Qg
YXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgog
ICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWln
aHQoKSAqIChjb250ZXh0LT5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKICAg
ICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFk
b3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0
aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUds
eXBocyk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZz
ZXQpCisjZWxzZQorICAgICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCAmJiAhcGxhdGZvcm1E
YXRhLm1faXNFbW9qaSkKKyNlbmRpZgogICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhGbG9hdFBvaW50KHNoYWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4
dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgc3RhdGljX2Nh
c3Q8Y29uc3QgQ0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMp
OwogICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBmaWxsQ29sb3JTcGFj
ZSk7CiAgICAgfQpAQCAtMzEyLDcgKzM0NywxMSBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29ucwog
ICAgICAgICBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwg
Y2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0IENH
U2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKICAgICBlbHNl
CiAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwg
Z2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlw
aEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUdseXBocyk7CisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKKyNlbHNlCisgICAgaWYgKHN5bnRoZXRpY0Jv
bGRPZmZzZXQgJiYgIXBsYXRmb3JtRGF0YS5tX2lzRW1vamkpCisjZW5kaWYKICAgICAgICAgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRP
ZmZzZXQsIHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZy
b20pLCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9t
KSksIG51bUdseXBocyk7CiAKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFj
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VUcmVl
Tm9kZU1hYy5jcHAKaW5kZXggYzBlNTRjYjQ4OThkYjc5NjA3OWQ5ZDI5MWNhNDcxN2Y1MjAwNjVj
NS4uNjEyYjQ1M2ZlZmE1YjNlMTY1NzYxZmM0ZGE2ZDNhNzNmZjU1MmIwZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFj
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdl
VHJlZU5vZGVNYWMuY3BwCkBAIC0zMiw3ICszMiwxMyBAQAogI2luY2x1ZGUgIkZvbnQuaCIKICNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZh
Y2UuaCIKKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dG
b250VW5pY29kZVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxDb3JlVGV4dC9DVEZvbnRQcml2Lmg+Cisj
aW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTYzLDcgKzY5LDE2IEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBiCiAKICAgICBW
ZWN0b3I8Q0dHbHlwaCwgNTEyPiBnbHlwaHMoYnVmZmVyTGVuZ3RoKTsKICAgICBpZiAoIXNob3Vs
ZFVzZUNvcmVUZXh0KGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpIHsKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgICAgICB3a0dldEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpLmNnRm9udCgpLCBidWZmZXIsIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0
aCk7CisjZWxzZQorICAgICAgICAvLyBXZSBwYXNzIGluIGVpdGhlciAyNTYgb3IgNTEyIFVURi0x
NiBjaGFyYWN0ZXJzOiAyNTYgZm9yIFUrRkZGRiBhbmQgbGVzcywgNTEyIChkb3VibGUgY2hhcmFj
dGVyIHN1cnJvZ2F0ZXMpCisgICAgICAgIC8vIGZvciBVKzEwMDAwIGFuZCBhYm92ZS4gSXQgaXMg
aW5kZWVkIHBvc3NpYmxlIHRvIGdldCBiYWNrIDUxMiBnbHlwaHMgYmFjayBmcm9tIHRoZSBBUEks
IHNvIHRoZSBnbHlwaCBidWZmZXIKKyAgICAgICAgLy8gd2UgcGFzcyBpbiBtdXN0IGJlIDUxMi4g
SWYgd2UgZ2V0IGJhY2sgbW9yZSB0aGFuIDI1NiBnbHlwaHMgdGhvdWdoIHdlJ2xsIGlnbm9yZSBh
bGwgdGhlIG9uZXMgYWZ0ZXIgMjU2LAorICAgICAgICAvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVu
IGFzIHRoZSBvbmx5IHRpbWUgd2UgcGFzcyBpbiA1MTIgY2hhcmFjdGVycyBpcyB3aGVuIHRoZXkg
YXJlIHN1cnJvZ2F0ZXMuCisgICAgICAgIC8vIEZJWE1FOiBVc2Ugd2tHZXRHbHlwaHNGb3JDaGFy
YWN0ZXJzKCkgaW5zdGVhZCBvZiBDR0ZvbnRHZXRHbHlwaHNGb3JVbmljaGFycygpIG9uY2Ugd2Ug
dXBkYXRlIFdlYktpdCBTeXN0ZW0gSW50ZXJmYWNlIG9uIGlPUy4KKyAgICAgICAgQ0dGb250R2V0
R2x5cGhzRm9yVW5pY2hhcnMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBidWZm
ZXIsIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisjZW5kaWYKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIWdseXBo
c1tpXSkKICAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAw
LCAwKTsKQEAgLTE0NCw2ICsxNTksNyBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVG
b250RGF0YSogcnVuU2ltcGxlID0gZm9udERhdGEtPmdldENvbXBvc2l0ZUZvbnRSZWZlcmVuY2VG
b250RGF0YSgoTlNGb250ICopcnVuRm9udCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChydW5T
aW1wbGUpIHsKQEAgLTE1OCw2ICsxNzQsNyBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0K
aW5kZXggOTZhNjMxOTRlYWU2MDYzN2MzNDZlNDg2NjBkY2NlODc2NzNjNjI2Yy4uZTQ0YTEzZjRh
NTcwODNlYTlkN2I3MzAzYTNhZDFlMjZiMWRkNjc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5t
bQpAQCAtMjgsNiArMjgsOSBAQAogI2lmIFVTRSgzRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNESU9TLmgiCisjZW5kaWYKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAK
QEAgLTM5LDggKzQyLDE1IEBACiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaWYgUExB
VEZPUk0oSU9TKQorI2ltcG9ydCA8T3BlbkdMRVMvRVMyL2dsZXh0Lmg+CisjaW1wb3J0IDxPcGVu
R0xFUy9FQUdMLmg+CisjaW1wb3J0IDxPcGVuR0xFUy9FQUdMRHJhd2FibGUuaD4KKyNpbXBvcnQg
PFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2Vsc2UKICNpbmNsdWRlIDxPcGVuR0wvQ0dMUmVu
ZGVyZXJzLmg+CiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CisjZW5kaWYKICNpbmNsdWRlICJXZWJH
TExheWVyLmgiCiAjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0Fy
cmF5QnVmZmVyLmg+CkBAIC02MSw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICB+R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKCkgeyB9CiB9OwogCisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyB2b2lk
IHNldFBpeGVsRm9ybWF0KFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4mIGF0dHJpYnMs
IGludCBjb2xvckJpdHMsIGludCBkZXB0aEJpdHMsIGJvb2wgYWNjZWxlcmF0ZWQsIGJvb2wgc3Vw
ZXJzYW1wbGUsIGJvb2wgY2xvc2VzdCwgYm9vbCBhbnRpYWxpYXMpCiB7CiAgICAgYXR0cmlicy5j
bGVhcigpOwpAQCAtOTMsNiArMTA0LDcgQEAgc3RhdGljIHZvaWQgc2V0UGl4ZWxGb3JtYXQoVmVj
dG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPiYgYXR0cmlicywgaW50IGNvbG9yQmkKICAgICAg
ICAgCiAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1
dGU+KDApKTsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiBQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiB7CkBAIC0xMDcsNiArMTE5LDkgQEAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICA6IG1fY3VycmVudFdpZHRoKDApCiAgICAgLCBtX2N1
cnJlbnRIZWlnaHQoMCkKICAgICAsIG1fY29udGV4dE9iaigwKQorI2lmIFBMQVRGT1JNKElPUykK
KyAgICAsIG1fY29tcGlsZXIoU0hfRVNTTF9PVVRQVVQpCisjZW5kaWYKICAgICAsIG1fYXR0cnMo
YXR0cnMpCiAgICAgLCBtX3RleHR1cmUoMCkKICAgICAsIG1fY29tcG9zaXRvclRleHR1cmUoMCkK
QEAgLTEyMiw2ICsxMzcsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICBVTlVTRURf
UEFSQU0oaG9zdFdpbmRvdyk7CiAgICAgVU5VU0VEX1BBUkFNKHJlbmRlclN0eWxlKTsKIAorI2lm
IFBMQVRGT1JNKElPUykKKyAgICBtX2NvbnRleHRPYmogPSBbW0VBR0xDb250ZXh0IGFsbG9jXSBp
bml0V2l0aEFQSTprRUFHTFJlbmRlcmluZ0FQSU9wZW5HTEVTMl07CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisjZWxzZQogICAgIFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0
cmliczsKICAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9iaiA9IDA7CiAgICAgR0xp
bnQgbnVtUGl4ZWxGb3JtYXRzID0gMDsKQEAgLTE4NCwxMiArMjAzLDE2IEBAIEdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycywgSG9zdFdpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CisjZW5k
aWYgLy8gIVBMQVRGT1JNKElPUykKICAgICAKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAog
ICAgIC8vIENyZWF0ZSB0aGUgV2ViR0xMYXllcgogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwogICAgICAgICBtX3dlYkdMTGF5ZXIgPSBhZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10g
aW5pdFdpdGhHcmFwaGljc0NvbnRleHQzRDp0aGlzXSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
ICAgICBbbV93ZWJHTExheWVyLmdldCgpIHNldE9wYXF1ZTowXTsKKyNlbmRpZgogI2lmbmRlZiBO
REVCVUcKICAgICAgICAgW21fd2ViR0xMYXllci5nZXQoKSBzZXROYW1lOkAiV2ViR0wgTGF5ZXIi
XTsKICNlbmRpZiAgICAKQEAgLTE5OCw2ICsyMjEsOSBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RX
aQogICAgIGlmICh1c2VNdWx0aXNhbXBsaW5nKQogICAgICAgICA6OmdsRW5hYmxlKEdMX01VTFRJ
U0FNUExFKTsKICAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgOjpnbEdlblJlbmRlcmJ1ZmZl
cnMoMSwgJm1fdGV4dHVyZSk7CisjZWxzZQogICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gcmVu
ZGVyIGludG8KICAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAgICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CkBAIC0yMTIsNiArMjM4LDcgQEAg
R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVApOwogICAgIDo6Z2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUCk7CiAgICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworI2VuZGlmCiAgICAgCiAgICAgLy8gY3JlYXRl
IGFuIEZCTwogICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKQEAgLTI1Myw4
ICsyODAsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKIAogICAgIG1fY29tcGlsZXIuc2V0
UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKICAgICAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
IDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CiAgICAgOjpnbEVuYWJs
ZShHTF9QT0lOVF9TUFJJVEUpOworI2VuZGlmCiAKICAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAw
LCAwKTsKIH0KQEAgLTI2Miw5ICsyOTEsMTUgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKIEdy
YXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogewogICAgIGlmIChtX2NvbnRl
eHRPYmopIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV90ZXh0dXJlKTsKKyAgICAg
ICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2Vs
c2UKICAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICAgICAg
OjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogICAgICAgICA6OmdsRGVsZXRlVGV4
dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlmCiAgICAgICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcykgewogICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQo
MSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CiAgICAgICAgICAgICBpZiAobV9hdHRycy5z
dGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCkBAIC0yNzUsMjIgKzMxMCw1MSBAQCBHcmFwaGljc0Nv
bnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICAgICAgICAgICAgICA6OmdsRGVsZXRl
UmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwogICAgICAgICB9CiAg
ICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgICAgIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDowXTsKKyAgICAg
ICAgW3N0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obV9jb250ZXh0T2JqKSByZWxlYXNlXTsKKyNl
bHNlCiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwogICAgICAgICBDR0xEZXN0cm95
Q29udGV4dChtX2NvbnRleHRPYmopOworI2VuZGlmCiAgICAgfQogfQogCisjaWYgUExBVEZPUk0o
SU9TKQorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21E
cmF3YWJsZShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgW21fd2Vi
R0xMYXllci5nZXQoKSBzZXRCb3VuZHM6Q0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KV07
CisgICAgcmV0dXJuIFttX2NvbnRleHRPYmogcmVuZGVyYnVmZmVyU3RvcmFnZTpHTF9SRU5ERVJC
VUZGRVIgZnJvbURyYXdhYmxlOnN0YXRpY19jYXN0PE5TT2JqZWN0PEVBR0xEcmF3YWJsZT4qPiht
X3dlYkdMTGF5ZXIuZ2V0KCkpXTsKK30KKyNlbmRpZgorCiBib29sIEdyYXBoaWNzQ29udGV4dDNE
OjptYWtlQ29udGV4dEN1cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKFtFQUdMQ29udGV4
dCBjdXJyZW50Q29udGV4dF0gIT0gbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm4gW0VBR0xD
b250ZXh0IHNldEN1cnJlbnRDb250ZXh0OnN0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obV9jb250
ZXh0T2JqKV07CisjZWxzZQogICAgIENHTENvbnRleHRPYmogY3VycmVudENvbnRleHQgPSBDR0xH
ZXRDdXJyZW50Q29udGV4dCgpOwogICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBtX2NvbnRleHRP
YmopCiAgICAgICAgIHJldHVybiBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopID09
IGtDR0xOb0Vycm9yOworI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBQTEFURk9S
TShJT1MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZsdXNoKCk7CisgICAgOjpnbEJpbmRSZW5kZXJidWZm
ZXIoR0xfUkVOREVSQlVGRkVSLCBtX3RleHR1cmUpOworICAgIFtzdGF0aWNfY2FzdDxFQUdMQ29u
dGV4dCo+KG1fY29udGV4dE9iaikgcHJlc2VudFJlbmRlcmJ1ZmZlcjpHTF9SRU5ERVJCVUZGRVJd
OworICAgIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpuaWxdOworfQorI2VuZGlmCisK
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogewogICAg
IHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCmluZGV4IDJjODM4NWQxZWE2ZTI2NjQ0
ODAwODFkOTBlNDM3YTM2ZDc2OGU1MmIuLjUzM2ViMGU2YTg1ZTJlMTAzYjE0YmFmODhhODAwYjA4
MjY1ZjNjY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9HcmFwaGljc0NvbnRleHRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQpAQCAtMjgsMTAgKzI4LDE5IEBACiAKICNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVDRy5oIgorI2lmIFVTRShBUFBLSVQpCiAjaW1wb3J0IDxBcHBLaXQvQXBwS2l0
Lmg+CisjZW5kaWYKICNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAorI2lmIFBMQVRGT1JN
KElPUykKKyNpbXBvcnQgIkNvbG9yLmgiCisjaW1wb3J0ICJXS0dyYXBoaWNzLmgiCisjZW5kaWYK
KworI2lmICFQTEFURk9STShJT1MpCiAjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQuaCIKKyNlbmRpZgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogCiBAY2xh
c3MgTlNDb2xvcjsKQEAgLTQ1LDYgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gY2Fs
bHMgaW4gdGhpcyBmaWxlIGFyZSBhbGwgZXhjZXB0aW9uLXNhZmUsIHNvIHdlIGRvbid0IGJsb2Nr
CiAvLyBleGNlcHRpb25zIGZvciB0aG9zZS4KIAorI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMg
dm9pZCBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhS
ZWYgZm9jdXNSaW5nUGF0aCwgQ0dDb2xvclJlZiBjb2xvciwgaW50IHJhZGl1cykKIHsKICAgICBD
R0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CkBAIC02NCw5ICs3NCwxMSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBpbnQgd2lkdGgsIGlu
dCAvKm9mZnNldCovLAogCiAgICAgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dChwbGF0Zm9ybUNvbnRl
eHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgY29sb3JSZWYsIHJhZGl1cyk7CiB9CisjZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTgwLDkgKzkyLDE2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGludCB3aWR0aCwgaW50CiAgICAgICAgIENHUGF0aEFkZFJlY3QoZm9jdXNSaW5nUGF0aC5nZXQo
KSwgMCwgQ0dSZWN0SW5zZXQocmVjdHNbaV0sIC1vZmZzZXQsIC1vZmZzZXQpKTsKIAogICAgIGRy
YXdGb2N1c1JpbmdUb0NvbnRleHQocGxhdGZvcm1Db250ZXh0KCksIGZvY3VzUmluZ1BhdGguZ2V0
KCksIGNvbG9yUmVmLCByYWRpdXMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVjdHMpOwor
ICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAg
VU5VU0VEX1BBUkFNKGNvbG9yKTsKKyNlbmRpZgogfQogCiAKKyNpZiAhUExBVEZPUk0oSU9TKQog
c3RhdGljIE5TQ29sb3IqIG1ha2VQYXR0ZXJuQ29sb3IoTlNTdHJpbmcqIGZpcnN0Q2hvaWNlTmFt
ZSwgTlNTdHJpbmcqIHNlY29uZENob2ljZU5hbWUsIE5TQ29sb3IqIGRlZmF1bHRDb2xvciwgYm9v
bCYgdXNpbmdEb3QpCiB7CiAgICAgLy8gRXZlbnR1YWxseSB3ZSBzaG91bGQgYmUgYWJsZSB0byBn
ZXQgcmlkIG9mIHRoZSBzZWNvbmRDaG9pY2VOYW1lLiBGb3IgdGhlIHRpbWUgYmVpbmcgd2UgbmVl
ZCBib3RoIHRvIGtlZXAKQEAgLTk4LDYgKzExNywxNSBAQCBzdGF0aWMgTlNDb2xvciogbWFrZVBh
dHRlcm5Db2xvcihOU1N0cmluZyogZmlyc3RDaG9pY2VOYW1lLCBOU1N0cmluZyogc2Vjb25kQ2hv
aQogICAgICAgICBjb2xvciA9IGRlZmF1bHRDb2xvcjsKICAgICByZXR1cm4gY29sb3I7CiB9Cisj
ZWxzZQorc3RhdGljIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IGNyZWF0ZURvdFBhdHRlcm4oYm9v
bCYgdXNpbmdEb3QsIGNvbnN0IGNoYXIqIHJlc291cmNlTmFtZSkKK3sKKyAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKFdLR3JhcGhpY3NDcmVhdGVJbWFnZUZyb21CdW5k
bGVXaXRoTmFtZShyZXNvdXJjZU5hbWUpKTsKKyAgICBBU1NFUlQoaW1hZ2UpOyAvLyBpZiBpbWFn
ZSBpcyBub3QgYXZhaWxhYmxlLCB3ZSB3YW50IHRvIGtub3cKKyAgICB1c2luZ0RvdCA9IHRydWU7
CisgICAgcmV0dXJuIGFkb3B0Q0YoV0tDcmVhdGVQYXR0ZXJuRnJvbUNHSW1hZ2UoaW1hZ2UuZ2V0
KCkpKTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiBzdGF0aWMgTlNDb2xvciAqc3Bl
bGxpbmdQYXR0ZXJuQ29sb3IgPSBudWxscHRyOwogc3RhdGljIE5TQ29sb3IgKmdyYW1tYXJQYXR0
ZXJuQ29sb3IgPSBudWxscHRyOwpAQCAtMTIxLDIwICsxNDksMzEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHcKICAgICBmbG9hdCBwYXR0ZXJuV2lkdGggPSBjTWlzc3BlbGxpbmdMaW5lUGF0dGVy
bldpZHRoOwogCiAgICAgYm9vbCB1c2luZ0RvdDsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIE5T
Q29sb3IgKnBhdHRlcm5Db2xvcjsKKyNlbHNlCisgICAgQ0dQYXR0ZXJuUmVmIGRvdFBhdHRlcm47
CisjZW5kaWYKICAgICBzd2l0Y2ggKHN0eWxlKSB7CiAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJr
ZXJTcGVsbGluZ0xpbmVTdHlsZToKICAgICAgICAgewogICAgICAgICAgICAgLy8gQ29uc3RhbnRz
IGZvciBzcGVsbGluZyBwYXR0ZXJuIGNvbG9yLgogICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNp
bmdEb3RGb3JTcGVsbGluZyA9IGZhbHNlOworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgICAg
ICBpZiAoIXNwZWxsaW5nUGF0dGVybkNvbG9yKQogICAgICAgICAgICAgICAgIHNwZWxsaW5nUGF0
dGVybkNvbG9yID0gW21ha2VQYXR0ZXJuQ29sb3IoQCJOU1NwZWxsaW5nRG90IiwgQCJTcGVsbGlu
Z0RvdCIsIFtOU0NvbG9yIHJlZENvbG9yXSwgdXNpbmdEb3RGb3JTcGVsbGluZykgcmV0YWluXTsK
ICAgICAgICAgICAgIHVzaW5nRG90ID0gdXNpbmdEb3RGb3JTcGVsbGluZzsKICAgICAgICAgICAg
IHBhdHRlcm5Db2xvciA9IHNwZWxsaW5nUGF0dGVybkNvbG9yOworI2Vsc2UKKyAgICAgICAgICAg
IHN0YXRpYyBDR1BhdHRlcm5SZWYgc3BlbGxpbmdQYXR0ZXJuID0gY3JlYXRlRG90UGF0dGVybih1
c2luZ0RvdEZvclNwZWxsaW5nLCAiU3BlbGxpbmdEb3QiKS5sZWFrUmVmKCk7CisgICAgICAgICAg
ICBkb3RQYXR0ZXJuID0gc3BlbGxpbmdQYXR0ZXJuOworI2VuZGlmCisgICAgICAgICAgICB1c2lu
Z0RvdCA9IHVzaW5nRG90Rm9yU3BlbGxpbmc7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyR3JhbW1hckxpbmVTdHlsZToKICAgICAgICAg
eworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICAvLyBDb25zdGFudHMgZm9yIGdyYW1t
YXIgcGF0dGVybiBjb2xvci4KICAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yR3Jh
bW1hciA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFncmFtbWFyUGF0dGVybkNvbG9yKQpAQCAt
MTQyLDggKzE4MSwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdwogICAgICAgICAgICAgdXNp
bmdEb3QgPSB1c2luZ0RvdEZvckdyYW1tYXI7CiAgICAgICAgICAgICBwYXR0ZXJuQ29sb3IgPSBn
cmFtbWFyUGF0dGVybkNvbG9yOwogICAgICAgICAgICAgYnJlYWs7CisjZWxzZQorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisjZW5kaWYKICAg
ICAgICAgfQotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBQTEFURk9S
TShNQUMpCiAgICAgICAgIC8vIFRvIHN1cHBvcnQgY29ycmVjdGlvbiBwYW5lbC4KICAgICAgICAg
Y2FzZSBEb2N1bWVudE1hcmtlckF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnRMaW5lU3R5bGU6CiAg
ICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJEaWN0YXRpb25BbHRlcm5hdGl2ZXNMaW5lU3R5bGU6
CkBAIC0xNTcsNyArMjAwLDIxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogI2VuZGlmCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBj
YXNlIFRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNMaW5lU3R5bGU6
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yRGljdGF0aW9u
UGhyYXNlV2l0aEFsdGVybmF0aXZlcyA9IGZhbHNlOworICAgICAgICAgICAgc3RhdGljIENHUGF0
dGVyblJlZiBkaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzUGF0dGVybiA9IGNyZWF0ZURv
dFBhdHRlcm4odXNpbmdEb3RGb3JEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCAiRGlj
dGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc0RvdCIpLmxlYWtSZWYoKTsKKyAgICAgICAgICAg
IGRvdFBhdHRlcm4gPSBkaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzUGF0dGVybjsKKyAg
ICAgICAgICAgIHVzaW5nRG90ID0gdXNpbmdEb3RGb3JEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJu
YXRpdmVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCiAgICAgICAgIGRlZmF1bHQ6CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAg
Ly8gRklYTUU6IFNob3VsZCByZW1vdmUgZGVmYXVsdCBjYXNlIHNvIHdlIGdldCBjb21waWxlLXRp
bWUgZXJyb3JzLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTE4Miwy
MCArMjM5LDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3CiAgICAgLy8gZm9yIHRyYW5zZm9y
bXMuCiAKICAgICAvLyBEcmF3IHVuZGVybGluZS4KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQodGhpcyk7CiAgICAgTlNHcmFw
aGljc0NvbnRleHQgKmN1cnJlbnRDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRD
b250ZXh0XTsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IChDR0NvbnRleHRSZWYpW2N1cnJl
bnRDb250ZXh0IGdyYXBoaWNzUG9ydF07CisjZWxzZQorICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CisjZW5kaWYKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNv
bnRleHQpOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbcGF0dGVybkNvbG9yIHNldF07Cisj
ZWxzZQorICAgIFdLU2V0UGF0dGVybihjb250ZXh0LCBkb3RQYXR0ZXJuLCBZRVMsIFlFUyk7Cisj
ZW5kaWYKIAogICAgIHdrU2V0UGF0dGVyblBoYXNlSW5Vc2VyU3BhY2UoY29udGV4dCwgb2Zmc2V0
UG9pbnQpOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBOU1JlY3RGaWxsVXNpbmdPcGVyYXRp
b24oTlNNYWtlUmVjdChvZmZzZXRQb2ludC54KCksIG9mZnNldFBvaW50LnkoKSwgd2lkdGgsIHBh
dHRlcm5IZWlnaHQpLCBOU0NvbXBvc2l0ZVNvdXJjZU92ZXIpOworI2Vsc2UKKyAgICBXS1JlY3RG
aWxsVXNpbmdPcGVyYXRpb24oY29udGV4dCwgQ0dSZWN0TWFrZShvZmZzZXRQb2ludC54KCksIG9m
ZnNldFBvaW50LnkoKSwgd2lkdGgsIHBhdHRlcm5IZWlnaHQpLCBrQ0dDb21wb3NpdGVTb3Zlcik7
CisjZW5kaWYKICAgICAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQog
CisjaWYgIVBMQVRGT1JNKElPUykKIENHQ29sb3JTcGFjZVJlZiBsaW5lYXJSR0JDb2xvclNwYWNl
UmVmKCkKIHsKICAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIGxpbmVhclNSR0JTcGFjZSA9IDA7
CkBAIC0yMTUsNSArMjg1LDYgQEAgQ0dDb2xvclNwYWNlUmVmIGxpbmVhclJHQkNvbG9yU3BhY2VS
ZWYoKQogCiAgICAgcmV0dXJuIGxpbmVhclNSR0JTcGFjZTsKIH0KKyNlbmRpZgogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCmluZGV4IGRj
YjI2OTQ2OTRkOWIyNTBlY2IyZmNmZmRhY2RiMjM3NDJlY2I2ODcuLmEwZDZlZWVlZDNjNGRiMzNl
YWJkOTI2MWNiY2ZhNDM1YWQyZDZiNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCkBAIC0xOCw2ICsxOCw4IEBACiAgKgogICovCiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQorCiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkljb24uaCIK
IApAQCAtODIsMyArODQsNSBAQCB2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIH0KIAogfQorCisjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9J
bWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1h
Yy5tbQppbmRleCAyNTFmNTc0OGJmOTAxZDRmYjg0NjlmYzNmNzBlNDk3YjNhYmI0N2QzLi4xMjA0
NThjMzMxMTU5MWY2YzAyYjYzMDU3N2RhY2UzMDY5NDM4M2E1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCkBAIC0zNyw2ICszNywxOCBA
QAogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVCdW5kbGVGaW5kZXIKIEBlbmQKIAorI2lmIFBMQVRG
T1JNKElPUykKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisKKyNpbXBvcnQgPENvcmVHcmFwaGlj
cy9Db3JlR3JhcGhpY3MuaD4KKyNpbXBvcnQgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2ltcG9ydCA8
TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgorCitTT0ZUX0xJTktfRlJB
TUVXT1JLKE1vYmlsZUNvcmVTZXJ2aWNlcykKK1NPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3Jl
U2VydmljZXMsIGtVVFR5cGVUSUZGLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1VUVHlwZVRJRkYg
Z2V0a1VUVHlwZVRJRkYoKQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBC
aXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpCkBAIC00NCw3ICs1Niw5IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQogICAgIGlmIChtX2ZyYW1l
cy5zaXplKCkgIT0gMSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBtX25zSW1hZ2UgPSAwOworI2VuZGlmCiAgICAgbV90aWZmUmVwID0gMDsKIH0KIApAQCAtMTAz
LDYgKzExNyw3IEBAIENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9u
KCkKICAgICByZXR1cm4gbV90aWZmUmVwLmdldCgpOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykK
IE5TSW1hZ2UqIEJpdG1hcEltYWdlOjpnZXROU0ltYWdlKCkKIHsKICAgICBpZiAobV9uc0ltYWdl
KQpAQCAtMTE1LDUgKzEzMCw2IEBAIE5TSW1hZ2UqIEJpdG1hcEltYWdlOjpnZXROU0ltYWdlKCkK
ICAgICBtX25zSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhEYXRhOihO
U0RhdGEqKWRhdGFdKTsKICAgICByZXR1cm4gbV9uc0ltYWdlLmdldCgpOwogfQorI2VuZGlmCiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQ
b2ludE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQb2lu
dE1hYy5tbQppbmRleCA3YTJlNzMwZWQ4ZTZiNzQ5NjU2ZjU2Y2FmZGUwZTcxMTQ2NjlkZjhjLi5j
MjljM2FlODY0ZDM4YWY3OWRjYzRhZTFjYmJjNWI0OWRhYzE2YTViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFBvaW50TWFjLm1tCkBAIC0yOCw2
ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFQTEFURk9STShJT1MpCiAj
aWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiAKIEludFBv
aW50OjpJbnRQb2ludChjb25zdCBOU1BvaW50JiBwKSA6IG1feChzdGF0aWNfY2FzdDxpbnQ+KHAu
eCkpLCBtX3koc3RhdGljX2Nhc3Q8aW50PihwLnkpKQpAQCAtNDAsNSArNDEsNiBAQCBJbnRQb2lu
dDo6b3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0CiB9CiAKICNlbmRpZgorI2VuZGlmIC8vICFQTEFU
Rk9STShJT1MpCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9JbnRSZWN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ludFJlY3RNYWMubW0KaW5kZXggNzM4NjE4YTE5ODNhYzc3NWMzNTk4YTU2MzQ1Yjk0ZGFl
NGIyNmExNC4uNzc0YTBiYTcwNGVlN2Q1ODNhZjhlMDQwMmI5NzFhYzM4ZjQzYmNhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWMubW0K
QEAgLTI4LDYgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIVBMQVRGT1JN
KElPUykKICNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMK
IAogSW50UmVjdDo6b3BlcmF0b3IgTlNSZWN0KCkgY29uc3QKQEAgLTQ1LDUgKzQ2LDYgQEAgSW50
UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IE5TUmVjdCYgcmVjdCkKIH0KIAogI2VuZGlmCisj
ZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ludFNpemVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
SW50U2l6ZU1hYy5tbQppbmRleCBjN2RjZDg4Yzg4ZTA3MTRjYWUxNTg2MzFhZThmMzMxOWIzZGNi
ZDZiLi45YTQ3NjY1MDlmYjNjZTQ2ODM0ODgxYTVjNmY4MzE0MjBmYThmOWNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50U2l6ZU1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50U2l6ZU1hYy5tbQpAQCAt
MjgsNiArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogCiBJ
bnRTaXplOjpJbnRTaXplKGNvbnN0IE5TU2l6ZSYgcykgOiBtX3dpZHRoKHN0YXRpY19jYXN0PGlu
dD4ocy53aWR0aCkpLCBtX2hlaWdodChzdGF0aWNfY2FzdDxpbnQ+KHMuaGVpZ2h0KSkKQEAgLTQw
LDUgKzQxLDYgQEAgSW50U2l6ZTo6b3BlcmF0b3IgTlNTaXplKCkgY29uc3QKIH0KIAogI2VuZGlm
CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJveHkuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByb3h5LmgKaW5kZXggYzU4NmZi
ODZmZWZhNDA2ODBmYTk1YTIzNTc3NjIzZDAzYTEyOWJiYi4uYzQxZThjZjg1MjNiZjU5NWFmZDk5
NWQzOTkzN2UyZjhhYzZkMGVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcm94eS5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiwyMSBAQAogI2lm
bmRlZiBNZWRpYVBsYXllclByb3h5X2gKICNkZWZpbmUgTWVkaWFQbGF5ZXJQcm94eV9oCiAKKyNp
ZiBQTEFURk9STShJT1MpCisjaWYgZGVmaW5lZChfX09CSkNfXykKKyNpbXBvcnQgPEZvdW5kYXRp
b24vTlNHZW9tZXRyeS5oPgorI2VuZGlmCisKKy8vIE5lZWRlZCBzaW5jZSB0aGlzIGlzIGEgV2Vi
S2l0IHByaXZhdGUgaGVhZGVyIG9uIGlPUy4KKyNpZm5kZWYgT0JKQ19DTEFTUworI2lmZGVmIF9f
T0JKQ19fCisjZGVmaW5lIE9CSkNfQ0xBU1MgQGNsYXNzCisjZWxzZQorI2RlZmluZSBPQkpDX0NM
QVNTIGNsYXNzCisjZW5kaWYKKyNlbmRpZiAvLyAhZGVmaW5lZChPQkpDX0NMQVNTKQorI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykKKwogT0JKQ19DTEFTUyBXZWJNZWRpYVBsYXllclByb3h5OwogCiBl
bnVtIE1lZGlhUGxheWVyUHJveHlOb3RpZmljYXRpb25UeXBlIHsKQEAgLTU3LDYgKzcyLDE2IEBA
IGVudW0gTWVkaWFQbGF5ZXJQcm94eU5vdGlmaWNhdGlvblR5cGUgewogICAgIE1lZGlhUGxheWVy
Tm90aWZpY2F0aW9uVGltZUp1bXBlZCwKICAgICAKICAgICBNZWRpYVBsYXllck5vdGlmaWNhdGlv
blBsYXlQYXVzZUJ1dHRvblByZXNzZWQsCisgICAgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25SYXRl
RGlkQ2hhbmdlLAorICAgIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uR2FpbkZvY3VzLAorICAgIE1l
ZGlhUGxheWVyTm90aWZpY2F0aW9uTG9zZUZvY3VzLAorICAgIE1lZGlhUGxheWVyUmVxdWVzdEJl
Z2luUGxheWJhY2ssCisgICAgTWVkaWFQbGF5ZXJSZXF1ZXN0UGF1c2VQbGF5YmFjaywKKworI2lm
IEVOQUJMRShJT1NfQUlSUExBWSkKKyAgICBNZWRpYVBsYXllck5vdGlmaWNhdGlvbkN1cnJlbnRQ
bGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkLAorICAgIE1lZGlhUGxheWVyTm90aWZpY2F0
aW9uUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkLAorI2VuZGlmCiB9OwogCiAjaWZk
ZWYgX19PQkpDX18KQEAgLTcxLDYgKzk2LDI1IEBAIGVudW0gTWVkaWFQbGF5ZXJQcm94eU5vdGlm
aWNhdGlvblR5cGUgewogCiAtICh2b2lkKV9zZXRQb3N0ZXI6KE5TVVJMICopdXJsOwogCistICh2
b2lkKV9zZXRDb250cm9sczooQk9PTCljb250cm9sczsKKy0gKHZvaWQpX3NldEF1dG9idWZmZXI6
KEJPT0wpYXV0b2J1ZmZlcjsKKworLSAodm9pZClfZW50ZXJGdWxsU2NyZWVuOworLSAodm9pZClf
ZXhpdEZ1bGxTY3JlZW47CisKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCistIChCT09MKV9pc0N1
cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzOworLSAodm9pZClfc2hvd1BsYXliYWNrVGFyZ2V0
UGlja2VyOworCistIChCT09MKV9oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0czsKKworLSAoQk9P
TClfd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7CistICh2b2lkKV9zZXRXaXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZDooQk9PTClkaXNhYmxlZDsKKworLSAodm9pZClfc2V0SGFzUGxh
eWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnM6KEJPT0wpaGFzTGlzdGVuZXJzOworI2Vu
ZGlmCisKKy0gKHZvaWQpX3ByZXBhcmVGb3JQbGF5YmFjazsKIC0gKHZvaWQpX3BsYXk7CiAtICh2
b2lkKV9wYXVzZTsKIApAQCAtNzksNiArMTIzLDkgQEAgZW51bSBNZWRpYVBsYXllclByb3h5Tm90
aWZpY2F0aW9uVHlwZSB7CiAtIChCT09MKV9oYXNWaWRlbzsKIC0gKEJPT0wpX2hhc0F1ZGlvOwog
CistIChCT09MKV9oYXNDbG9zZWRDYXB0aW9uczsKKy0gKHZvaWQpX3NldENsb3NlZENhcHRpb25z
VmlzaWJsZTooQk9PTCl2aXNpYmxlOworCiAtIChOU1RpbWVJbnRlcnZhbClfZHVyYXRpb247CiAK
IC0gKGRvdWJsZSlfY3VycmVudFRpbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKaW5k
ZXggNzI5YmU2ZmFlNzcwZmRlZDA3OGY0OTk4MjE1ZTU0ODNjZWY1ZGFiMy4uMDgyOGJkODA4MmMx
ODMxZjkwNjYwYzJjZDVlMjJhZDRmNzU2ZWNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0
LmNwcApAQCAtMjcsNyArMjcsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29y
ZVRleHQvQ29yZVRleHQuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0
YU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250
RGF0YU1hYy5tbQppbmRleCAyMWVhNjExNjA3ODYxNDMxZTYzYjY0YTMwY2VkNzdhNzBmOWE5MDBj
Li4yNjQwY2M0Nzk1ODgyOGFiNTI4ZGM0MWFhODU5MzQ2NTk0NmI1ZTJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRh
TWFjLm1tCkBAIC0zNSwyMCArMzUsMjcgQEAKICNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgog
I2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
LmgiCisjaWYgVVNFKEFQUEtJVCkKICNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KICNpbXBvcnQg
PEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbXBv
cnQgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjZW5kaWYKICNpbXBvcnQgPGZsb2F0Lmg+CiAjaW1w
b3J0IDx1bmljb2RlL3VjaGFyLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2ltcG9y
dCA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCisjaWYg
IVBMQVRGT1JNKElPUykKIEBpbnRlcmZhY2UgTlNGb250IChXZWJBcHBLaXRTZWNyZXRBUEkpCiAt
IChCT09MKV9pc0Zha2VGaXhlZFBpdGNoOwogQGVuZAorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgCisKKyNpZiBVU0UoQVBQS0lUKQogc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2Fs
R2x5cGhzKENURm9udFJlZiBjdEZvbnQpCiB7CiAgICAgLy8gVGhlIGNoZWNrIGRvZXNuJ3QgbG9v
ayBuZWF0IGJ1dCB0aGlzIGlzIHdoYXQgQXBwS2l0IGRvZXMgZm9yIHZlcnRpY2FsIHdyaXRpbmcu
Li4KQEAgLTI1NSw2ICsyNjIsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJX
aWR0aEluaXQoKQogICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0aW1hdGUs
IHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1wb3NpdGl2
ZS4KICAgICBpbml0Q2hhcldpZHRocygpOwogfQorI2VuZGlmIC8vIFVTRShBUFBLSVQpCiAKIHZv
aWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiB7CkBAIC0yNjgsNiArMjc2LDcg
QEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKICAgICB9CiB9CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGlmIChpc0N1
c3RvbUZvbnQoKSkgewpAQCAtMzA0LDcgKzMxMyw5IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZv
CiAKICAgICByZXR1cm4gMDsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCisjaWYgIVBM
QVRGT1JNKElPUykKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKIHsKICAgICBOU1N0cmluZyAq
c3RyaW5nID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5OmNvbnN0
X2Nhc3Q8dW5pY2hhcio+KGNoYXJhY3RlcnMpIGxlbmd0aDpsZW5ndGggZnJlZVdoZW5Eb25lOk5P
XTsKQEAgLTMzNSw2ICszNDYsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRj
aCgpCiAgICAgICAgICAgIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJNUy1QR290aGlj
Il0gIT0gTlNPcmRlcmVkU2FtZSAmJgogICAgICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVD
b21wYXJlOkAiTW9ub3R5cGVDb3JzaXZhIl0gIT0gTlNPcmRlcmVkU2FtZTsKIH0KKyNlbmRpZiAv
LyAhUExBVEZPUk0oSU9TKQogCiBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91
bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CkBAIC0zNDcsNiArMzU5LDcgQEAgRmxv
YXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAogICAgIHJldHVybiBib3VuZGluZ0JveDsKIH0KIAorI2lmICFQTEFURk9STShJT1Mp
CiBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAogewogICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKQEAgLTM2Nyw2ICsz
ODAsNyBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdAogCiAgICAgcmV0dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0Jv
bGRPZmZzZXQ7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogc3RydWN0IFByb3ZpZGVy
SW5mbyB7CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIuaAppbmRleCA2NDQwYjcxYWY3MTk4
ODdmMzVmYTU4MDRmZTkwYzBhOTljNTIwODg2Li5lYWRlNTIwMzRjZGQ4MTBhNjAyZmU4MWZkYTI4
NDJiMjMxODZhMDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvV2ViR0xMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9XZWJHTExheWVyLmgKQEAgLTM1LDcgKzM1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIH0KIAotQGludGVyZmFjZSBXZWJHTExheWVy
IDogQ0FPcGVuR0xMYXllciAKKyNpZiBQTEFURk9STShJT1MpCitAaW50ZXJmYWNlIFdlYkdMTGF5
ZXIgOiBDQUVBR0xMYXllcgorI2Vsc2UKK0BpbnRlcmZhY2UgV2ViR0xMYXllciA6IENBT3BlbkdM
TGF5ZXIKKyNlbmRpZgogewogICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fbGF5ZXJPd25l
cjsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbQppbmRleCBk
NTEwYjYxOWRlOTk5NTVjNzMwNjFhYTRhODk2MjVjMThhN2NhYjMzLi42NDgyOTllNzU5NmMzNDU2
MmUxNTQ0NTBlNzdlYTI0YTc4MmIyMWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbQpAQCAtMzIsOCArMzIsMTAgQEAKIAogI2lt
cG9ydCAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKKyNp
ZiAhUExBVEZPUk0oSU9TKQogI2ltcG9ydCA8T3BlbkdML09wZW5HTC5oPgogI2ltcG9ydCA8T3Bl
bkdML2dsLmg+CisjZW5kaWYKICNpbXBvcnQgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CiAKQEAgLTQ4LDYgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLShDR0xQaXhl
bEZvcm1hdE9iailjb3B5Q0dMUGl4ZWxGb3JtYXRGb3JEaXNwbGF5TWFzazoodWludDMyX3QpbWFz
awogewogICAgIC8vIEZJWE1FOiBUaGUgbWFzayBwYXJhbSB0ZWxscyB5b3Ugd2hpY2ggZGlzcGxh
eSAob24gYSBtdWx0aS1kaXNwbGF5IHN5c3RlbSkKQEAgLTEwOCw5ICsxMTEsMTQgQEAgc3RhdGlj
IHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAq
LykKIHsKICAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQgKj4oZGF0YSkpOwogfQorI2VuZGlm
CiAKIC0oQ0dJbWFnZVJlZiljb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihDR0NvbG9y
U3BhY2VSZWYpY29sb3JTcGFjZQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFS
QU0oY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIDA7CisjZWxzZQogICAgIENHTFNldEN1cnJlbnRD
b250ZXh0KG1fY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKIAogICAgIFJl
dGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGltYWdlQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CkBA
IC0xMzgsMTEgKzE0NiwxNiBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZv
aWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOwogICAgIENH
RGF0YVByb3ZpZGVyUmVsZWFzZShwcm92aWRlcik7CiAgICAgcmV0dXJuIGltYWdlOworI2VuZGlm
CiB9CiAKIC0gKHZvaWQpZGlzcGxheQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2NvbnRl
eHQtPmVuZFBhaW50KCk7CisjZWxzZQogICAgIFtzdXBlciBkaXNwbGF5XTsKKyNlbmRpZgogICAg
IGlmIChtX2xheWVyT3duZXIpCiAgICAgICAgIG1fbGF5ZXJPd25lci0+bGF5ZXJEaWREaXNwbGF5
KHNlbGYpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1dlYkxheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YkxheWVyLm1tCmluZGV4IDA4Mjk2NDJkOTQ5ZDA2NGVkOWFhNmNhZWU0MGFlMDZlNDA0OWJjNGMu
LmE5MjRjZGY4Y2RlOGE5ODIwMTE4ZDAzYTlmOTExNDEwNGEyM2MzMjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KQEAgLTMyLDE1ICsz
MiwyOSBAQAogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0ICJHcmFwaGljc0xh
eWVyQ0EuaCIKICNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllci5oIgorI2lmICFQTEFURk9STShJT1Mp
CiAjaW1wb3J0ICJUaGVtZU1hYy5oIgorI2VuZGlmCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0
ekNvcmUuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIldLR3JhcGhpY3MuaCIKKyNp
bXBvcnQgIldBS1dpbmRvdy5oIgorI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmCisK
IEBpbnRlcmZhY2UgQ0FMYXllcihXZWJDb3JlQ0FMYXllclByaXZhdGUpCiAtICh2b2lkKXJlbG9h
ZFZhbHVlRm9yS2V5UGF0aDooTlNTdHJpbmcgKilrZXlQYXRoOwogQGVuZAogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAorI2lmIFBMQVRGT1JNKElPUykKK0BpbnRlcmZhY2UgV2ViTGF5ZXIo
UHJpdmF0ZSkKKy0gKHZvaWQpZHJhd1NjYWxlZENvbnRlbnRzSW5Db250ZXh0OihDR0NvbnRleHRS
ZWYpY29udGV4dDsKK0BlbmQKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlcGFp
bnRSZWN0TGlzdCBjb2xsZWN0UmVjdHNUb1BhaW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBQbGF0
Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllcikKQEAgLTc0LDE3ICs4OCwyNiBAQCB2b2lkIGRy
YXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXIqIHBsYXRmb3JtQwogICAgIGlmICghbGF5ZXJDb250ZW50cykKICAgICAgICAgcmV0dXJu
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFdLU2V0Q3VycmVudEdyYXBoaWNzQ29udGV4dChj
b250ZXh0KTsKKyNlbmRpZgorCiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAog
ICAgIC8vIFdlIG5ldmVyIHVzZSBDb21wb3NpdGluZ0Nvb3JkaW5hdGVzQm90dG9tVXAgb24gTWFj
LgogICAgIEFTU0VSVChsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVu
dGF0aW9uKCkgPT0gR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24p
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFdLRm9udEFudGlhbGlhc2luZ1N0YXRlU2F2ZXIg
Zm9udEFudGlhbGlhc2luZ1N0YXRlKGNvbnRleHQsIFtwbGF0Zm9ybUNBTGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSBpc09wYXF1ZV0pOworICAgIGZvbnRBbnRpYWxpYXNpbmdTdGF0ZS5zZXR1cChbV0FL
V2luZG93IGhhc0xhbmRzY2FwZU9yaWVudGF0aW9uXSk7CisjZWxzZQogICAgIFtOU0dyYXBoaWNz
Q29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07CiAKICAgICAvLyBTZXQgdXAgYW4gTlNHcmFwaGlj
c0NvbnRleHQgZm9yIHRoZSBjb250ZXh0LCBzbyB0aGF0IHBhcnRzIG9mIEFwcEtpdCB0aGF0IHJl
bHkgb24KICAgICAvLyB0aGUgY3VycmVudCBOU0dyYXBoaWNzQ29udGV4dCAoZS5nLiBOU0NlbGwg
ZHJhd2luZykgZ2V0IHRoZSByaWdodCBvbmUuCiAgICAgTlNHcmFwaGljc0NvbnRleHQqIGxheWVy
Q29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQ
b3J0OmNvbnRleHQgZmxpcHBlZDpZRVNdOwogICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJy
ZW50Q29udGV4dDpsYXllckNvbnRleHRdOworI2VuZGlmCiAKICAgICBHcmFwaGljc0NvbnRleHQg
Z3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5
ZXJDb250ZXh0KHRydWUpOwpAQCAtOTQsNyArMTE3LDggQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50
cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9y
bUMKICAgICAgICAgLy8gVHVybiBvZmYgZm9udCBzbW9vdGhpbmcgdG8gaW1wcm92ZSB0aGUgYXBw
ZWFyYW5jZSBvZiB0ZXh0IHJlbmRlcmVkIG9udG8gYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLgog
ICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hvdWxkU21vb3RoRm9udHMoZmFsc2UpOwogICAg
IH0KLSAgICAKKworI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8g
Z2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmlj
YW50bHkKICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBs
YXllcnMpCiAgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRp
bmdCb3goY29udGV4dCk7CkBAIC0xMDYsNiArMTMwLDcgQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50
cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9y
bUMKICAgICBmb2N1c1JpbmdDbGlwUmVjdCA9IHRyYW5zZm9ybS5tYXBSZWN0KGNsaXBCb3VuZHMp
OwogI2VuZGlmCiAgICAgVGhlbWVNYWM6OnNldEZvY3VzUmluZ0NsaXBSZWN0KGZvY3VzUmluZ0Ns
aXBSZWN0KTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAgICAgZm9yIChhdXRvIHJlY3Qg
OiBkaXJ0eVJlY3RzKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihncmFwaGljc0NvbnRleHQpOwpAQCAtMTE0LDkgKzEzOSwxMyBAQCB2b2lkIGRyYXdMYXll
ckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIq
IHBsYXRmb3JtQwogICAgICAgICBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENv
bnRlbnRzKHBsYXRmb3JtQ0FMYXllciwgZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0
KHJlY3QpKTsKICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgZm9udEFudGlhbGlhc2lu
Z1N0YXRlLnJlc3RvcmUoKTsKKyNlbHNlCiAgICAgVGhlbWVNYWM6OnNldEZvY3VzUmluZ0NsaXBS
ZWN0KEZsb2F0UmVjdCgpKTsKIAogICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhp
Y3NTdGF0ZV07CisjZW5kaWYKIAogICAgIC8vIFJlLWZldGNoIHRoZSBsYXllciBvd25lciwgc2lu
Y2UgPHJkYXI6Ly9wcm9ibGVtLzkxMjUxNTE+IGluZGljYXRlcyB0aGF0IGl0IG1pZ2h0IGhhdmUg
YmVlbiBkZXN0cm95ZWQgZHVyaW5nIHBhaW50aW5nLgogICAgIGxheWVyQ29udGVudHMgPSBwbGF0
Zm9ybUNBTGF5ZXItPm93bmVyKCk7CkBAIC0yMjQsNiArMjUzLDEwIEBAIHZvaWQgZHJhd1JlcGFp
bnRJbmRpY2F0b3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFBsYXRmb3JtQ0FMYXllciogcGxhdGZv
cm1DQUxheWVyCiAKIC0gKHZvaWQpZGlzcGxheQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBp
ZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRocmVhZExvY2soKTsKKyNlbmRpZgog
ICAgIFtzdXBlciBkaXNwbGF5XTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyID0gUGxhdGZv
cm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIoc2VsZik7CiAgICAgaWYgKGxheWVyICYmIGxheWVy
LT5vd25lcigpKQpAQCAtMjMyLDYgKzI2NSwxMCBAQCB2b2lkIGRyYXdSZXBhaW50SW5kaWNhdG9y
KENHQ29udGV4dFJlZiBjb250ZXh0LCBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllcgog
CiAtICh2b2lkKWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0CiB7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIGlmIChwdGhyZWFkX21haW5fbnAoKSkKKyAgICAgICAgV2ViVGhyZWFk
TG9jaygpOworI2VuZGlmCiAgICAgUGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FM
YXllcjo6cGxhdGZvcm1DQUxheWVyKHNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3du
ZXIoKSkgewogICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRp
bGVkTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViVGls
ZWRMYXllci5tbQppbmRleCAzY2FjNWU3YzMzMTI4ZGExZGZlY2Y5M2Q2MDM4YzExZTE5OWQyNWIz
Li5jODZhZmE2ODg0YmVjZDJmMzY4NDdmM2JkMjBkNzhkMDk0Y2EyMWVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViVGlsZWRMYXllci5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViVGlsZWRMYXllci5tbQpA
QCAtMzMsNiArMzMsMTEgQEAKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2ltcG9ydCAi
UGxhdGZvcm1DQUxheWVyLmgiCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJXZWJDb3Jl
VGhyZWFkLmgiCisjaW1wb3J0ICJXZWJDb3JlVGhyZWFkUnVuLmgiCisjZW5kaWYKKwogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJUaWxlZExheWVyCkBAIC00
Niw3ICs1MSwxNCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIC8vIE1ha2Ugc3VyZSB0aGF0
IHRpbGVzIGFyZSBkcmF3biBvbiB0aGUgbWFpbiB0aHJlYWQKICsgKEJPT0wpc2hvdWxkRHJhd09u
TWFpblRocmVhZAogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2ViS2l0MiBh
bHdheXMgd2FudHMgdG8gZHJhdyBvbiB0aGUgbWFpbiB0aHJlYWQsIGJ1dCB0aGVyZSBpcworICAg
IC8vIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBjaGVjayBmb3IgV2ViS2l0MiB0aGFuIHVzaW5n
IHRoZSBleGlzdGFuY2Ugb2YKKyAgICAvLyB0aGUgd2ViIHRocmVhZCBhcyBhIHByb3h5LgorICAg
IHJldHVybiAhV2ViVGhyZWFkSXNFbmFibGVkKCk7CisjZWxzZQogICAgIHJldHVybiBZRVM7Cisj
ZW5kaWYKIH0KIAogKyAodW5zaWduZWQgaW50KXByZWZldGNoZWRUaWxlcwpAQCAtOTgsNiArMTEw
LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogLSAodm9pZClkaXNwbGF5CiB7CiAgICAg
W3N1cGVyIGRpc3BsYXldOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBDQVRpbGVkTGF5ZXIg
bmV2ZXIgY2FsbHMgZGlzcGxheSBvbiBhIGJhY2tncm91bmQgdGhyZWFkLCBzbyBpdCdzIHNhZmUK
KyAgICAvLyB0byBhc3N1bWUgd2UncmUgZWl0aGVyIG9uIHRoZSBtYWluIHRocmVhZCBvciBvbiB0
aGUgd2ViIHRocmVhZC4KKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRo
cmVhZExvY2soKTsKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOwor
I2VuZGlmCiAgICAgUGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxh
dGZvcm1DQUxheWVyKHNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkKICAg
ICAgICAgbGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShzZWxm
KTsKQEAgLTEwNSw5ICsxMjQsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIC0gKHZv
aWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKIHsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgdm9pZCAoXmRyYXcpKCkgPSBeeworI2VuZGlmCiAgICAgUGxhdGZvcm1DQUxheWVy
KiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHNlbGYpOwogICAgIGlm
IChsYXllcikKICAgICAgICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4dCwgbGF5ZXIpOworI2lm
IFBMQVRGT1JNKElPUykKKyAgICB9OworICAgIGlmIChwdGhyZWFkX21haW5fbnAoKSkgeworICAg
ICAgICBXZWJUaHJlYWRMb2NrKCk7CisgICAgICAgIGRyYXcoKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgV2ViVGhyZWFkUnVuU3luYyhkcmF3KTsKKyNlbmRpZgogfQogCiBAZW5kIC8vIGltcGxlbWVu
dGF0aW9uIFdlYlRpbGVkTGF5ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKaW5kZXggZmEy
NzkwZDNhZjk1MGNmZjRkY2I1NmM1ZmNkM2I0ODY2YzJjM2M2NS4uMjg5YzNlMjljODAyMmU4ZGVm
ZGY1NGZjYjgzMjVkMWRiODI5NzY0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKQEAg
LTMyLDEzICszMiwyMCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKElPUykK
KyNpbmNsdWRlICJBTkdMRS9TaGFkZXJMYW5nLmgiCisjaW5jbHVkZSA8T3BlbkdMRVMvRVMyL2ds
ZXh0Lmg+CisjZWxpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSAiQU5HTEUvU2hhZGVyTGFuZy5o
IgogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklYKQogI2luY2x1ZGUgIk9wZW5H
TFNoaW1zLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRElPUy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRXh0ZW5z
aW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0woR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCkBAIC01Myw3ICs2MCwyMSBAQCBFeHRlbnNpb25zM0RPcGVuR0w6On5FeHRlbnNpb25zM0RP
cGVuR0woKQogCiB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcg
c3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxv
bmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5z
aWduZWQgbG9uZyBmaWx0ZXIpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFVOVVNFRF9QQVJB
TShzcmNYMCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kwKTsKKyAgICBVTlVTRURfUEFSQU0oc3Jj
WDEpOworICAgIFVOVVNFRF9QQVJBTShzcmNZMSk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFgwKTsK
KyAgICBVTlVTRURfUEFSQU0oZHN0WTApOworICAgIFVOVVNFRF9QQVJBTShkc3RYMSk7CisgICAg
VU5VU0VEX1BBUkFNKGRzdFkxKTsKKyAgICBVTlVTRURfUEFSQU0obWFzayk7CisgICAgVU5VU0VE
X1BBUkFNKGZpbHRlcik7CisgICAgOjpnbFJlc29sdmVNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQVBQ
TEUoKTsKKyNlbHNlCiAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVChzcmNYMCwgc3JjWTAsIHNy
Y1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7Cisj
ZW5kaWYKIH0KIAogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCkKQEAgLTEwNSw2ICsxMjYsMTAgQEAgR0MzRGJvb2xlYW4gRXh0ZW5zaW9u
czNET3BlbkdMOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCiAKIHZv
aWQgRXh0ZW5zaW9uczNET3BlbkdMOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCBhcnJheSkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKGFycmF5KTsK
KyNlbmRpZgorCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICNpZiAoUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0o
TklYKSkKICAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQpAQCAtMTg2LDEz
ICsyMTEsMTkgQEAgYm9vbCBFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgfQor
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChuYW1lID09ICJHTF9FWFRfcGFja2VkX2RlcHRo
X3N0ZW5jaWwiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5z
KCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIG1f
YXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKIH0KIAogdm9pZCBFeHRlbnNpb25z
M0RPcGVuR0w6OmRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSBuLCBjb25zdCBHQzNEZW51bSogYnVm
cykKIHsKICAgICAvLyAgRklYTUU6IGltcGxlbWVudCBzdXBwb3J0IGZvciBvdGhlciBwbGF0Zm9y
bXMuCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElP
UykKICAgICA6OmdsRHJhd0J1ZmZlcnNBUkIobiwgYnVmcyk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggZmU4
NGIzOWFlMzE5NWQwYWU0MzY4YzdkYzM5YjM0NWY4YzZhYjg4OC4uMDA2MDJlMzRlZjIwMzU0ZmE4
ZmQ1NGI0MzRlM2VmMmIzMTRmZTUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbi5jcHAKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1M
b2cuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPE9wZW5HTEVTL0VT
Mi9nbGV4dC5oPgorI2Vsc2UKICNpZiBVU0UoT1BFTkdMX0VTXzIpCiAjaW5jbHVkZSAiT3BlbkdM
RVNTaGltcy5oIgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgpAQCAtNDUsNiArNDgsNyBAQAogI2Vs
aWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExB
VEZPUk0oTklYKQogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjZW5kaWYKKyNlbmRpZgogCiAj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03
MSw3ICs3NSw3IEBAIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6RXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIGlmICh2ZW5kb3JDb21wb25l
bnRzLmNvbnRhaW5zKCJpbnRlbCIpKQogICAgICAgICBtX2lzSW50ZWwgPSB0cnVlOwogCi0jaWYg
UExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICBp
ZiAobV9pc0FNRCB8fCBtX2lzSW50ZWwpCiAgICAgICAgIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rp
b25FbXVsYXRpb24gPSB0cnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cAppbmRleCBkMDQ4NWJmMTg2MjU1Yjg1OTU4N2VmYmZiNjU0YTYxODA2N2JjNjQ1Li43OWM2ZmQ4
Mzg4ZDI5ZmQ0ZTkyMGQxMzRkZDkyYTE0ZjcwMzlkOTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTC5jcHAKQEAgLTI5LDYgKzI5LDkgQEAKICNpZiBVU0UoM0RfR1JBUEhJQ1Mp
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lmIFBMQVRGT1JNKElPUykKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRElPUy5oIgorI2VuZGlmCiAKICNpbmNsdWRlICJFeHRl
bnNpb25zM0RPcGVuR0wuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC00MSw3ICs0NCwxMiBA
QAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPE9w
ZW5HTEVTL0VTMi9nbGV4dC5oPgorLy8gRnJvbSA8T3BlbkdMRVMvZ2xleHQuaD4KKyNkZWZpbmUg
R0xfUkdCQTMyRl9BUkIgICAgICAgICAgICAgICAgICAgICAgMHg4ODE0CisjZGVmaW5lIEdMX1JH
QjMyRl9BUkIgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxNQorI2VsaWYgUExBVEZPUk0oTUFD
KQogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklYKQogI2luY2x1ZGUgIk9wZW5H
TFNoaW1zLmgiCkBAIC04Niw3ICs5NCwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNo
YXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICBpZiAoZXh0ZW5zaW9ucy0+c3Vw
cG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKQogICAgICAgICAgICAgaW50ZXJu
YWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKICAgICAgICAg
ZWxzZQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7CisjZWxzZQogICAgICAgICAgICAgaW50ZXJu
YWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7CisjZW5kaWYKICAgICB9
CiAKICAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CkBAIC0xMjcsNiArMTM5LDExIEBA
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUp
CiAgICAgfQogCiAgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
IDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKKyAgICA6
OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFD
SE1FTlQwLCBHTF9SRU5ERVJCVUZGRVIsIG1fdGV4dHVyZSk7CisgICAgc2V0UmVuZGVyYnVmZmVy
U3RvcmFnZUZyb21EcmF3YWJsZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKKyNl
bHNlCiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CiAgICAg
OjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7CiAgICAg
OjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1Jf
QVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwpAQCAtMTM2LDYg
KzE1Myw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNp
emUmIHNpemUpCiAgICAgICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50
ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lH
TkVEX0JZVEUsIDApOwogICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7
CiAgICAgfQorI2VuZGlmCiAKICAgICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJz
LnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkpIHsKICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZm
ZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwpAQCAtMTY3
LDE3ICsxODUsMjIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQogCiAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwot
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKKyAgICA6OmdsUmVz
b2x2ZU11bHRpc2FtcGxlRnJhbWVidWZmZXJBUFBMRSgpOworI2Vsc2UKICAgICBJbnRSZWN0IHJl
c29sdmVSZWN0ID0gcmVjdDsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJlc29s
dmVSZWN0ID0gSW50UmVjdCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsK
IAogICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQocmVzb2x2ZVJlY3QueCgpLCByZXNvbHZlUmVj
dC55KCksIHJlc29sdmVSZWN0Lm1heFgoKSwgcmVzb2x2ZVJlY3QubWF4WSgpLCByZXNvbHZlUmVj
dC54KCksIHJlc29sdmVSZWN0LnkoKSwgcmVzb2x2ZVJlY3QubWF4WCgpLCByZXNvbHZlUmVjdC5t
YXhZKCksIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisjZW5kaWYKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CiAgICAgY2FzZSBERVBUSF9TVEVOQ0lMOgogICAg
ICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOwpAQCAtMTkzLDYg
KzIxNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvCiAgICAgICAgIGludGVybmFsZm9ybWF0
ID0gR0xfUkdCOwogICAgICAgICBicmVhazsKICAgICB9CisjZW5kaWYKICAgICA6OmdsUmVuZGVy
YnVmZmVyU3RvcmFnZUVYVCh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
IH0KIApAQCAtMjA0LDYgKzIyOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVn
ZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKICAgICAvLyBUaGVyZWZvcmUsIHRo
ZSB2YWx1ZSByZXR1cm5lZCBieSBkZXNrdG9wIEdMIG5lZWRzIHRvIGJlIGRpdmlkZWQgYnkgNC4K
ICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBjYXNlIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CiAgICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTLCB2
YWx1ZSk7CiAgICAgICAgICp2YWx1ZSAvPSA0OwpAQCAtMjE2LDYgKzI0MSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1
ZSkKICAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywgdmFsdWUp
OwogICAgICAgICAqdmFsdWUgLz0gNDsKICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBkZWZh
dWx0OgogICAgICAgICA6OmdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKICAgICB9CkBAIC0y
NjYsNiArMjkyLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAgZWxzZSBpZiAo
Zm9ybWF0ID09IEdMX1JHQikKICAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xf
UkdCMzJGX0FSQjsKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMpIHsKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCiAgICAgICAg
ICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX1JHQkExNkZfQVJCOwogICAgICAgICBlbHNl
IGlmIChmb3JtYXQgPT0gR0xfUkdCKQpAQCAtMjc3LDYgKzMwNCw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlCiAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEp
CiAgICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX0xVTUlOQU5DRV9BTFBIQTE2
Rl9BUkI7CiAgICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKKyNlbmRpZgogICAgIH0K
ICAgICB0ZXhJbWFnZTJERGlyZWN0KHRhcmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTI4NSwxMyArMzEzLDIxIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0Rj
bGFtcGYgekZhcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgOjpnbERlcHRoUmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciksIHN0YXRp
Y19jYXN0PGZsb2F0Pih6RmFyKSk7CisjZWxzZQogICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6
RmFyKTsKKyNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdD
M0RjbGFtcGYgZGVwdGgpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIDo6Z2xDbGVhckRlcHRoZihzdGF0aWNfY2FzdDxmbG9hdD4oZGVwdGgpKTsK
KyNlbHNlCiAgICAgOjpnbENsZWFyRGVwdGgoZGVwdGgpOworI2VuZGlmCiB9CiAKIEV4dGVuc2lv
bnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggNzY4NzQ3MzJlOTcwYTFkMjEx
YjdkYTM0ZTlkYTJhNjU3ODdkZWViNy4uZjU0MWUwZTMzNzQ0Nzg3NmE1ZWI1YmMyYjg3YmEzNjAz
ZWFmNmY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24u
Y3BwCkBAIC0zMSw2ICszMSw5IEBACiAjaWYgVVNFKDNEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0RJT1MuaCIKKyNlbmRpZgogCiAjaWYgVVNFKE9QRU5HTF9FU18yKQogI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCkBAIC01NCw2ICs1NywxMiBAQAogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCisjaWYg
UExBVEZPUk0oSU9TKQorI2ltcG9ydCA8T3BlbkdMRVMvRVMyL2dsZXh0Lmg+CisvLyBGcm9tIDxP
cGVuR0xFUy9nbGV4dC5oPgorI2RlZmluZSBHTF9SR0JBMzJGX0FSQiAgICAgICAgICAgICAgICAg
ICAgICAweDg4MTQKKyNkZWZpbmUgR0xfUkdCMzJGX0FSQiAgICAgICAgICAgICAgICAgICAgICAg
MHg4ODE1CisjZWxzZQogI2lmIFVTRShPUEVOR0xfRVNfMikKICNpbmNsdWRlICJPcGVuR0xFU1No
aW1zLmgiCiAjZWxpZiBQTEFURk9STShNQUMpCkBAIC02MSw2ICs3MCw3IEBACiAjZWxpZiBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShO
SVgpCiAjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKICNlbmRpZgorI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShCTEFDS0JFUlJZKQogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgpAQCAt
MTYxLDYgKzE3MSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIsCiAgICAgcGFpbnRUb0NhbnZh
cyhwaXhlbHMuZ2V0KCksIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkud2lkdGgoKSwgaW1hZ2VCdWZm
ZXItPmludGVybmFsU2l6ZSgpLmhlaWdodCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0
Zm9ybUNvbnRleHQoKSk7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBlbmRQYWlu
dCgpOworI2VuZGlmCiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50Q29tcG9zaXRl
ZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRp
b25NYXRyaXguY3BwCmluZGV4IGJmNTA3NDUxMjc3M2JmN2MxN2UxNWYyYTgzYTM3YzkwYWNmNmMw
ZmIuLmRhZDIzNTk5YmUyYzU4MDEyNDhhNzBhNTFiZDI0NmM1OGU5Y2FhZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRp
b25NYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCkBAIC0xMDM1LDcgKzEwMzUsNzEgQEAgVHJh
bnNmb3JtYXRpb25NYXRyaXggVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiBmcm9tLCBjb24KIC8vIHRoaXMgPSBtYXQgKiB0aGlzLgogVHJhbnNmb3JtYXRp
b25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4OjptdWx0aXBseShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0KQogewotI2lmIENQVShBUFBMRV9BUk1WN1MpCisjaWYgQ1BVKEFSTTY0
KQorICAgIGRvdWJsZSogbGVmdE1hdHJpeCA9ICYobV9tYXRyaXhbMF1bMF0pOworICAgIGNvbnN0
IGRvdWJsZSogcmlnaHRNYXRyaXggPSAmKG1hdC5tX21hdHJpeFswXVswXSk7CisgICAgYXNtIHZv
bGF0aWxlICgKKyAgICAgICAgLy8gRmlyc3QsIGxvYWQgdGhlIGxlZnRNYXRyaXggY29tcGxldGVs
eSBpbiBtZW1vcnkuIFRoZSBsZWZ0TWF0cml4IGlzIGluIHYxNi12MjMuCisgICAgICAgICJtb3Yg
ICAgICB4NCwgJVtsZWZ0TWF0cml4XVxuXHQiCisgICAgICAgICJsZDEuMmQgICB7djE2LCB2MTcs
IHYxOCwgdjE5fSwgWyVbbGVmdE1hdHJpeF1dLCAjNjRcblx0IgorICAgICAgICAibGQxLjJkICAg
e3YyMCwgdjIxLCB2MjIsIHYyM30sIFslW2xlZnRNYXRyaXhdXVxuXHQiCisKKyAgICAgICAgLy8g
Rmlyc3Qgcm93LgorICAgICAgICAibGQ0ci4yZCAge3YyNCwgdjI1LCB2MjYsIHYyN30sIFslW3Jp
Z2h0TWF0cml4XV0sICMzMlxuXHQiCisgICAgICAgICJmbXVsLjJkICB2MjgsIHYyNCwgdjE2XG5c
dCIKKyAgICAgICAgImZtdWwuMmQgIHYyOSwgdjI0LCB2MTdcblx0IgorICAgICAgICAiZm1sYS4y
ZCAgdjI4LCB2MjUsIHYxOFxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MjksIHYyNSwgdjE5XG5c
dCIKKyAgICAgICAgImZtbGEuMmQgIHYyOCwgdjI2LCB2MjBcblx0IgorICAgICAgICAiZm1sYS4y
ZCAgdjI5LCB2MjYsIHYyMVxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MjgsIHYyNywgdjIyXG5c
dCIKKyAgICAgICAgImZtbGEuMmQgIHYyOSwgdjI3LCB2MjNcblx0IgorCisgICAgICAgICJsZDRy
LjJkICB7djAsIHYxLCB2MiwgdjN9LCBbJVtyaWdodE1hdHJpeF1dLCAjMzJcblx0IgorICAgICAg
ICAic3QxLjJkICB7djI4LCB2Mjl9LCBbeDRdLCAjMzJcblx0IgorCisgICAgICAgIC8vIFNlY29u
ZCByb3cuCisgICAgICAgICJmbXVsLjJkICB2MzAsIHYwLCB2MTZcblx0IgorICAgICAgICAiZm11
bC4yZCAgdjMxLCB2MCwgdjE3XG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYzMCwgdjEsIHYxOFxu
XHQiCisgICAgICAgICJmbWxhLjJkICB2MzEsIHYxLCB2MTlcblx0IgorICAgICAgICAiZm1sYS4y
ZCAgdjMwLCB2MiwgdjIwXG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYzMSwgdjIsIHYyMVxuXHQi
CisgICAgICAgICJmbWxhLjJkICB2MzAsIHYzLCB2MjJcblx0IgorICAgICAgICAiZm1sYS4yZCAg
djMxLCB2MywgdjIzXG5cdCIKKworICAgICAgICAibGQ0ci4yZCAge3YyNCwgdjI1LCB2MjYsIHYy
N30sIFslW3JpZ2h0TWF0cml4XV0sICMzMlxuXHQiCisgICAgICAgICJzdDEuMmQgICB7djMwLCB2
MzF9LCBbeDRdLCAjMzJcblx0IgorCisgICAgICAgIC8vIFRoaXJkIHJvdy4KKyAgICAgICAgImZt
dWwuMmQgIHYyOCwgdjI0LCB2MTZcblx0IgorICAgICAgICAiZm11bC4yZCAgdjI5LCB2MjQsIHYx
N1xuXHQiCisgICAgICAgICJmbWxhLjJkICB2MjgsIHYyNSwgdjE4XG5cdCIKKyAgICAgICAgImZt
bGEuMmQgIHYyOSwgdjI1LCB2MTlcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjI4LCB2MjYsIHYy
MFxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MjksIHYyNiwgdjIxXG5cdCIKKyAgICAgICAgImZt
bGEuMmQgIHYyOCwgdjI3LCB2MjJcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjI5LCB2MjcsIHYy
M1xuXHQiCisKKyAgICAgICAgImxkNHIuMmQgIHt2MCwgdjEsIHYyLCB2M30sIFslW3JpZ2h0TWF0
cml4XV0sICMzMlxuXHQiCisgICAgICAgICJzdDEuMmQgICB7djI4LCB2Mjl9LCBbeDRdLCAjMzJc
blx0IgorCisgICAgICAgIC8vIEZvdXJ0aCByb3cuCisgICAgICAgICJmbXVsLjJkICB2MzAsIHYw
LCB2MTZcblx0IgorICAgICAgICAiZm11bC4yZCAgdjMxLCB2MCwgdjE3XG5cdCIKKyAgICAgICAg
ImZtbGEuMmQgIHYzMCwgdjEsIHYxOFxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MzEsIHYxLCB2
MTlcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjMwLCB2MiwgdjIwXG5cdCIKKyAgICAgICAgImZt
bGEuMmQgIHYzMSwgdjIsIHYyMVxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MzAsIHYzLCB2MjJc
blx0IgorICAgICAgICAiZm1sYS4yZCAgdjMxLCB2MywgdjIzXG5cdCIKKworICAgICAgICAic3Qx
LjJkICB7djMwLCB2MzF9LCBbeDRdXG5cdCIKKworICAgICAgICA6IFtsZWZ0TWF0cml4XSIrciIo
bGVmdE1hdHJpeCksIFtyaWdodE1hdHJpeF0iK3IiKHJpZ2h0TWF0cml4KQorICAgICAgICA6Cisg
ICAgICAgIDogIm1lbW9yeSIsICJ4NCIsICJ2MCIsICJ2MSIsICJ2MiIsICJ2MyIsICJ2MTYiLCAi
djE3IiwgInYxOCIsICJ2MTkiLCAidjIwIiwgInYyMSIsICJ2MjIiLCAidjIzIiwgInYyNCIsICJ2
MjUiLCAidjI2IiwgInYyNyIsICJ2MjgiLCAidjI5IiwgInYzMCIsICJ2MzEiKTsKKyNlbGlmIENQ
VShBUFBMRV9BUk1WN1MpCiAgICAgZG91YmxlKiBsZWZ0TWF0cml4ID0gJihtX21hdHJpeFswXVsw
XSk7CiAgICAgY29uc3QgZG91YmxlKiByaWdodE1hdHJpeCA9ICYobWF0Lm1fbWF0cml4WzBdWzBd
KTsKICAgICBhc20gdm9sYXRpbGUgKC8vIEZpcnN0IHJvdyBvZiBsZWZ0TWF0cml4LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCmluZGV4IDky
MDkzZDA5MTdiMzQ5ZTYyMWFkZjJiZTRiMDgxNDA4MTY2YzgwN2MuLjU1NDhkZTAzMzdjODQyYjZi
NzRkNDU3OTY2ZTlmY2ZiYzRkODg1ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAKQEAgLTk0LDggKzk0LDcgQEAgZmxvYXQgRm9udDo6
Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGlu
dCBmcm9tLCBpbnQKICAgICByZXR1cm4gYmVmb3JlV2lkdGg7CiB9CiAKLXZvaWQgRm9udDo6ZHJh
d0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVm
ZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlw
aC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTEwNCwxMSArMTAzLDEyIEBAIHZv
aWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGCiAKICAgICAvLyBXZSBjb3VsZG4ndCBnZW5lcmF0ZSBhbnkg
Z2x5cGhzIGZvciB0aGUgcnVuLiAgR2l2ZSB1cC4KICAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRHJhdyB0
aGUgZ2x5cGggYnVmZmVyIG5vdyBhdCB0aGUgc3RhcnRpbmcgcG9pbnQgcmV0dXJuZWQgaW4gc3Rh
cnRYLgogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChzdGFydFgsIHBvaW50LnkoKSk7CiAgICAg
ZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQpOwor
ICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAogdm9pZCBGb250OjpkcmF3
RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5jcHAKaW5kZXggZWMxNTRlOGQ0
OTI1OWRmM2MyZGQ3YzVkZDMxNmY0MDcyZTE2Y2MxNS4uZGY1ODk3MzIyZDhlNTBkZjM5NzkyMzBi
ODJlY2IwYzI5MDQ3MTg2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9Gb250V2luQ0UuY3BwCkBAIC0yMDcsOCArMjA3LDcgQEAgc3RhdGljIGlu
dCBnZW5lcmF0ZUNvbXBvbmVudHMoVGV4dFJ1bkNvbXBvbmVudHMqIGNvbXBvbmVudHMsIGNvbnN0
IEZvbnQgJmZvbnQsIGMKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIEZvbnQ6OmRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBpZiAodG8gPCAwKQogICAgICAg
ICB0byA9IHJ1bi5sZW5ndGgoKTsKQEAgLTIxOCw2ICsyMTcsNyBAQCB2b2lkIEZvbnQ6OmRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRgogICAgIFRleHRSdW5Db21wb25lbnRzIGNvbXBvbmVudHM7CiAgICAgaW50IHcgPSBn
ZW5lcmF0ZUNvbXBvbmVudHMoJmNvbXBvbmVudHMsICp0aGlzLCBydW4pOwogCisgICAgZmxvYXQg
d2lkdGhPZkRyYXduVGV4dCA9IDA7CiAgICAgaW50IGN1clBvcyA9IDA7CiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAoaW50KWNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3Qg
VGV4dFJ1bkNvbXBvbmVudCYgY29tcCA9IGNvbXBvbmVudHMuYXQoaSk7CkBAIC0yMjksMTIgKzIy
OSwxMyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRgogICAgICAgICAgICAgICAgIHB0LnNldFgo
cG9pbnQueCgpICsgdyAtIGNvbXAubV9vZmZzZXQgLSBjb21wLm1fd2lkdGgpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIHB0LnNldFgocG9pbnQueCgpICsgY29tcC5tX29mZnNl
dCk7Ci0gICAgICAgICAgICBkcmF3U2ltcGxlVGV4dChjb250ZXh0LCBjb21wLm1fdGV4dFJ1biwg
cHQsIGZyb20gLSBjdXJQb3MsIHN0ZDo6bWluKHRvLCBjdXJFbmQpIC0gY3VyUG9zKTsKKyAgICAg
ICAgICAgIHdpZHRoT2ZEcmF3blRleHQgKz0gZHJhd1NpbXBsZVRleHQoY29udGV4dCwgY29tcC5t
X3RleHRSdW4sIHB0LCBmcm9tIC0gY3VyUG9zLCBzdGQ6Om1pbih0bywgY3VyRW5kKSAtIGN1clBv
cyk7CiAgICAgICAgIH0KICAgICAgICAgY3VyUG9zICs9IGxlbjsKICAgICAgICAgaWYgKGZyb20g
PCBjdXJQb3MpCiAgICAgICAgICAgICBmcm9tID0gY3VyUG9zOwogICAgIH0KKyAgICByZXR1cm4g
d2lkdGhPZkRyYXduVGV4dDsKIH0KIAogdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYg
LyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9p
bnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbnRlbnRGaWx0ZXJJT1MubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ29udGVudEZpbHRlcklPUy5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40OGMyNWIwMGRlM2ZmMzBhZWVkMjBkZGJlMTY4MmEzOTUyYmRjNjMzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbnRlbnRGaWx0ZXJJT1MubW0K
QEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiQ29udGVudEZpbHRlci5oIgorCisjaWYgUExBVEZPUk0oSU9TKSAmJiBVU0UoQ09OVEVOVF9G
SUxURVJJTkcpCisKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIKKworI2lmIGRlZmluZWQo
X19oYXNfaW5jbHVkZSkgJiYgX19oYXNfaW5jbHVkZSg8V2ViQ29udGVudEFuYWx5c2lzL1dlYkZp
bHRlckV2YWx1YXRvci5oPikKKyNpbXBvcnQgPFdlYkNvbnRlbnRBbmFseXNpcy9XZWJGaWx0ZXJF
dmFsdWF0b3IuaD4KKyNlbHNlCitAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJGaWx0ZXJFdmFsdWF0
b3JEZXRhaWxzKQorLSAodm9pZCl1bmJsb2NrV2l0aENvbXBsZXRpb246KHZvaWQgKF4pKEJPT0wg
dW5ibG9ja2VkLCBOU0Vycm9yICplcnJvcikpY29tcGxldGlvbjsKK0BlbmQKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGNoYXIqIENvbnRlbnRGaWx0ZXI6OnNjaGVtZSgp
Cit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgY29udGVudEZpbHRlclNjaGVtZVtdID0gIngtYXBw
bGUtY29udGVudC1maWx0ZXIiOworICAgIHJldHVybiBjb250ZW50RmlsdGVyU2NoZW1lOworfQor
ICAgIAordm9pZCBDb250ZW50RmlsdGVyOjpyZXF1ZXN0VW5ibG9ja0FuZERpc3BhdGNoSWZTdWNj
ZXNzZnVsKEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24pCit7CisgICAgW21fcGxhdGZvcm1Db250
ZW50RmlsdGVyIHVuYmxvY2tXaXRoQ29tcGxldGlvbjpeKEJPT0wgdW5ibG9ja2VkLCBOU0Vycm9y
ICopIHsKKyAgICAgICAgaWYgKHVuYmxvY2tlZCkgeworICAgICAgICAgICAgV2ViVGhyZWFkUnVu
KF57CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgfV07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykgJiYgVVNFKENPTlRFTlRfRklMVEVSSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZU1vdGlvbkNsaWVudElPUy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZU1vdGlvbkNsaWVudElPUy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4
NTk5MWYyMDA1MjhlNWFjYTllZTVlMjA2MjdkYzkwOThmOGExODUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlTW90aW9uQ2xpZW50SU9TLmgKQEAg
LTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZXZpY2VNb3Rpb25DbGllbnRJT1NfaAor
I2RlZmluZSBEZXZpY2VNb3Rpb25DbGllbnRJT1NfaAorCisjaW5jbHVkZSAiRGV2aWNlTW90aW9u
Q2xpZW50LmgiCisjaW5jbHVkZSAiRGV2aWNlTW90aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
IkRldmljZU1vdGlvbkRhdGEuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmZGVmIF9fT0JKQ19fCitAY2xhc3MgV2ViQ29yZU1vdGlv
bk1hbmFnZXI7CisjZWxzZQorY2xhc3MgV2ViQ29yZU1vdGlvbk1hbmFnZXI7CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEZXZpY2VNb3Rpb25DbGllbnRJT1MgOiBwdWJs
aWMgRGV2aWNlTW90aW9uQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxE
ZXZpY2VNb3Rpb25DbGllbnRJT1M+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IERldmljZU1vdGlvbkNsaWVudElPUygpKTsKKyAgICB9CisgICAgRGV2aWNlTW90
aW9uQ2xpZW50SU9TKCk7CisgICAgdmlydHVhbCB+RGV2aWNlTW90aW9uQ2xpZW50SU9TKCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRyb2xsZXIoRGV2aWNlTW90aW9uQ29udHJv
bGxlciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgRGV2aWNlTW90aW9uRGF0YSogbGFzdE1vdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkZXZpY2VNb3Rpb25Db250cm9sbGVyRGVzdHJveWVkKCkgT1ZFUlJJREU7CisK
KyAgICB2b2lkIG1vdGlvbkNoYW5nZWQoZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBk
b3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CisKK3ByaXZhdGU6CisgICAg
V2ViQ29yZU1vdGlvbk1hbmFnZXIqIG1fbW90aW9uTWFuYWdlcjsKKyAgICBEZXZpY2VNb3Rpb25D
b250cm9sbGVyKiBtX2NvbnRyb2xsZXI7CisgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE+IG1f
Y3VycmVudERldmljZU1vdGlvbkRhdGE7CisgICAgYm9vbCBtX3VwZGF0aW5nOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGV2aWNlTW90aW9uQ2xpZW50SU9TX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EZXZpY2VNb3Rpb25DbGll
bnRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlTW90aW9uQ2xpZW50
SU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjgyY2U5MWFiM2Q2NGQ5MTEyODgzMWI1MmQxODdjNGY2OTc1YWMy
OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNl
TW90aW9uQ2xpZW50SU9TLm1tCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaW1wb3J0
ICJEZXZpY2VNb3Rpb25DbGllbnRJT1MuaCIKKworI2ltcG9ydCAiV2ViQ29yZU1vdGlvbk1hbmFn
ZXIuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEZXZp
Y2VNb3Rpb25DbGllbnRJT1M6OkRldmljZU1vdGlvbkNsaWVudElPUygpCisgICAgOiBEZXZpY2VN
b3Rpb25DbGllbnQoKQorICAgICwgbV9tb3Rpb25NYW5hZ2VyKG51bGxwdHIpCisgICAgLCBtX3Vw
ZGF0aW5nKDApCit7Cit9CisKK0RldmljZU1vdGlvbkNsaWVudElPUzo6fkRldmljZU1vdGlvbkNs
aWVudElPUygpCit7Cit9CisKK3ZvaWQgRGV2aWNlTW90aW9uQ2xpZW50SU9TOjpzZXRDb250cm9s
bGVyKERldmljZU1vdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCit7CisgICAgbV9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKK30KKwordm9pZCBEZXZpY2VNb3Rpb25DbGllbnRJT1M6OnN0YXJ0
VXBkYXRpbmcoKQoreworICAgIG1fdXBkYXRpbmcgPSB0cnVlOworCisgICAgaWYgKCFtX21vdGlv
bk1hbmFnZXIpCisgICAgICAgIG1fbW90aW9uTWFuYWdlciA9IFtXZWJDb3JlTW90aW9uTWFuYWdl
ciBzaGFyZWRNYW5hZ2VyXTsKKworICAgIFttX21vdGlvbk1hbmFnZXIgYWRkTW90aW9uQ2xpZW50
OnRoaXNdOworfQorCit2b2lkIERldmljZU1vdGlvbkNsaWVudElPUzo6c3RvcFVwZGF0aW5nKCkK
K3sKKyAgICBtX3VwZGF0aW5nID0gZmFsc2U7CisKKyAgICAvLyBSZW1vdmUgb3Vyc2VsdmVzIGFz
IHRoZSBtb3Rpb24gY2xpZW50IHNvIHdlIHdvbid0IGdldCB1cGRhdGVzLgorICAgIFttX21vdGlv
bk1hbmFnZXIgcmVtb3ZlTW90aW9uQ2xpZW50OnRoaXNdOworfQorCitEZXZpY2VNb3Rpb25EYXRh
KiBEZXZpY2VNb3Rpb25DbGllbnRJT1M6Omxhc3RNb3Rpb24oKSBjb25zdAoreworICAgIHJldHVy
biBtX2N1cnJlbnREZXZpY2VNb3Rpb25EYXRhLmdldCgpOworfQorCit2b2lkIERldmljZU1vdGlv
bkNsaWVudElPUzo6ZGV2aWNlTW90aW9uQ29udHJvbGxlckRlc3Ryb3llZCgpCit7CisgICAgW21f
bW90aW9uTWFuYWdlciByZW1vdmVNb3Rpb25DbGllbnQ6dGhpc107Cit9CisKK3ZvaWQgRGV2aWNl
TW90aW9uQ2xpZW50SU9TOjptb3Rpb25DaGFuZ2VkKGRvdWJsZSB4QWNjZWxlcmF0aW9uLCBkb3Vi
bGUgeUFjY2VsZXJhdGlvbiwgZG91YmxlIHpBY2NlbGVyYXRpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgeEFjY2VsZXJhdGlvbkluY2x1ZGlu
Z0dyYXZpdHksIGRvdWJsZSB5QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgZG91YmxlIHpB
Y2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIHhSb3RhdGlvblJhdGUsIGRvdWJsZSB5Um90YXRpb25S
YXRlLCBkb3VibGUgelJvdGF0aW9uUmF0ZSkKK3sKKyAgICBpZiAoIW1fdXBkYXRpbmcpCisgICAg
ICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCisgICAgVU5VU0VEX1BB
UkFNKHhBY2NlbGVyYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh5QWNjZWxlcmF0aW9uKTsKKyAg
ICBVTlVTRURfUEFSQU0oekFjY2VsZXJhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHhBY2NlbGVy
YXRpb25JbmNsdWRpbmdHcmF2aXR5KTsKKyAgICBVTlVTRURfUEFSQU0oeUFjY2VsZXJhdGlvbklu
Y2x1ZGluZ0dyYXZpdHkpOworICAgIFVOVVNFRF9QQVJBTSh6QWNjZWxlcmF0aW9uSW5jbHVkaW5n
R3Jhdml0eSk7CisgICAgVU5VU0VEX1BBUkFNKHhSb3RhdGlvblJhdGUpOworICAgIFVOVVNFRF9Q
QVJBTSh5Um90YXRpb25SYXRlKTsKKyAgICBVTlVTRURfUEFSQU0oelJvdGF0aW9uUmF0ZSk7CisK
KyAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmF0aW9uPiBhY2NlbGVyYXRpb25J
bmNsdWRpbmdHcmF2aXR5ID0gRGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmF0aW9uOjpjcmVhdGUo
ZmFsc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMCk7CisgICAgUmVmUHRyPERldmljZU1vdGlvbkRh
dGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxlcmF0aW9uID0gRGV2aWNlTW90aW9uRGF0YTo6QWNjZWxl
cmF0aW9uOjpjcmVhdGUoZmFsc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFsc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmFsc2UsIDApOworICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlvblJhdGU+
IHJvdGF0aW9uUmF0ZSA9IERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uUmF0ZTo6Y3JlYXRlKGZh
bHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAwKTsKKyNl
bHNlCisgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxlcmF0
aW9uSW5jbHVkaW5nR3Jhdml0eSA9IERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbjo6Y3Jl
YXRlKHRydWUsIHhBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB5QWNjZWxlcmF0
aW9uSW5jbHVkaW5nR3Jhdml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgekFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkp
OworICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+IGFjY2VsZXJhdGlv
biA9IDA7CisgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uUmF0ZT4gcm90YXRp
b25SYXRlID0gMDsKKyAgICBpZiAoW21fbW90aW9uTWFuYWdlciBneXJvQXZhaWxhYmxlXSkgewor
ICAgICAgICBhY2NlbGVyYXRpb24gPSBEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb246OmNy
ZWF0ZSh0cnVlLCB4QWNjZWxlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB5QWNjZWxlcmF0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cnVlLCB6QWNjZWxlcmF0aW9uKTsKKyAgICAgICAgcm90YXRpb25SYXRlID0gRGV2aWNlTW90
aW9uRGF0YTo6Um90YXRpb25SYXRlOjpjcmVhdGUodHJ1ZSwgeFJvdGF0aW9uUmF0ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJ1ZSwgeVJvdGF0aW9uUmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgelJvdGF0aW9uUmF0ZSk7CisgICAgfQor
I2VuZGlmIC8vIFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCisKKyAgICBtX2N1cnJlbnREZXZpY2VN
b3Rpb25EYXRhID0gRGV2aWNlTW90aW9uRGF0YTo6Y3JlYXRlKGFjY2VsZXJhdGlvbiwgYWNjZWxl
cmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgcm90YXRpb25SYXRlLCB0cnVlLCBrTW90aW9uVXBkYXRl
SW50ZXJ2YWwpOworICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlRGV2aWNlTW90aW9uKG1fY3Vy
cmVudERldmljZU1vdGlvbkRhdGEuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVi
ZTdmNTFlMjgzMzg4MjI3MjlmMzU4ZDlkMGY2MzBkNjFhMWMxZmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1Mu
aApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERldmljZU9yaWVudGF0aW9uQ2xp
ZW50SU9TX2gKKyNkZWZpbmUgRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1NfaAorCisjaW5jbHVk
ZSAiRGV2aWNlT3JpZW50YXRpb25DbGllbnQuaCIKKyNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlv
bkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlvbkRhdGEuaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmZGVm
IF9fT0JKQ19fCitAY2xhc3MgV2ViQ29yZU1vdGlvbk1hbmFnZXI7CisjZWxzZQorY2xhc3MgV2Vi
Q29yZU1vdGlvbk1hbmFnZXI7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUyA6IHB1YmxpYyBEZXZpY2VPcmllbnRhdGlvbkNs
aWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RGV2aWNlT3JpZW50YXRpb25D
bGllbnRJT1M+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERl
dmljZU9yaWVudGF0aW9uQ2xpZW50SU9TKCkpOworICAgIH0KKyAgICBEZXZpY2VPcmllbnRhdGlv
bkNsaWVudElPUygpOworICAgIHZpcnR1YWwgfkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TKCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRyb2xsZXIoRGV2aWNlT3JpZW50YXRp
b25Db250cm9sbGVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmco
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBEZXZpY2VPcmllbnRhdGlvbkRhdGEqIGxhc3RPcmllbnRhdGlvbigpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXJE
ZXN0cm95ZWQoKSBPVkVSUklERTsKKworICAgIHZvaWQgb3JpZW50YXRpb25DaGFuZ2VkKGRvdWJs
ZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKKworcHJpdmF0ZToKKyAgICBXZWJD
b3JlTW90aW9uTWFuYWdlciogbV9tb3Rpb25NYW5hZ2VyOworICAgIERldmljZU9yaWVudGF0aW9u
Q29udHJvbGxlciogbV9jb250cm9sbGVyOworICAgIFJlZlB0cjxEZXZpY2VPcmllbnRhdGlvbkRh
dGE+IG1fY3VycmVudERldmljZU9yaWVudGF0aW9uOworICAgIGJvb2wgbV91cGRhdGluZzsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERldmljZU9yaWVudGF0aW9u
Q2xpZW50SU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EZXZp
Y2VPcmllbnRhdGlvbkNsaWVudElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9E
ZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMTZhNTY2YzI4MmFjYTFh
ZGFkODRmYWRmNDc5ZjU4ZDA5ODFjNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1tCkBAIC0wLDAgKzEs
MTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorCisjaW1wb3J0ICJEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5o
IgorCisjaW1wb3J0ICJXZWJDb3JlTW90aW9uTWFuYWdlci5oIgorCisjaWYgUExBVEZPUk0oSU9T
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpE
ZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUygpCisgICAgOiBEZXZpY2VPcmllbnRhdGlvbkNsaWVu
dCgpCisgICAgLCBtX21vdGlvbk1hbmFnZXIobnVsbHB0cikKKyAgICAsIG1fdXBkYXRpbmcoMCkK
K3sKK30KKworRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1M6On5EZXZpY2VPcmllbnRhdGlvbkNs
aWVudElPUygpCit7Cit9CisKK3ZvaWQgRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1M6OnNldENv
bnRyb2xsZXIoRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKiBjb250cm9sbGVyKQoreworICAg
IG1fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cit9CisKK3ZvaWQgRGV2aWNlT3JpZW50YXRpb25D
bGllbnRJT1M6OnN0YXJ0VXBkYXRpbmcoKQoreworICAgIG1fdXBkYXRpbmcgPSB0cnVlOworCisg
ICAgaWYgKCFtX21vdGlvbk1hbmFnZXIpCisgICAgICAgIG1fbW90aW9uTWFuYWdlciA9IFtXZWJD
b3JlTW90aW9uTWFuYWdlciBzaGFyZWRNYW5hZ2VyXTsKKworICAgIFttX21vdGlvbk1hbmFnZXIg
YWRkT3JpZW50YXRpb25DbGllbnQ6dGhpc107Cit9CisKK3ZvaWQgRGV2aWNlT3JpZW50YXRpb25D
bGllbnRJT1M6OnN0b3BVcGRhdGluZygpCit7CisgICAgbV91cGRhdGluZyA9IGZhbHNlOworCisg
ICAgLy8gUmVtb3ZlIG91cnNlbHZlcyBhcyB0aGUgb3JpZW50YXRpb24gY2xpZW50IHNvIHdlIHdv
bid0IGdldCB1cGRhdGVzLgorICAgIFttX21vdGlvbk1hbmFnZXIgcmVtb3ZlT3JpZW50YXRpb25D
bGllbnQ6dGhpc107Cit9CisKK0RldmljZU9yaWVudGF0aW9uRGF0YSogRGV2aWNlT3JpZW50YXRp
b25DbGllbnRJT1M6Omxhc3RPcmllbnRhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3Vy
cmVudERldmljZU9yaWVudGF0aW9uLmdldCgpOworfQorCit2b2lkIERldmljZU9yaWVudGF0aW9u
Q2xpZW50SU9TOjpkZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXJEZXN0cm95ZWQoKQoreworICAg
IFttX21vdGlvbk1hbmFnZXIgcmVtb3ZlT3JpZW50YXRpb25DbGllbnQ6dGhpc107Cit9CisgICAg
Cit2b2lkIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpvcmllbnRhdGlvbkNoYW5nZWQoZG91
YmxlIGFscGhhLCBkb3VibGUgYmV0YSwgZG91YmxlIGdhbW1hLCBkb3VibGUgY29tcGFzc0hlYWRp
bmcsIGRvdWJsZSBjb21wYXNzQWNjdXJhY3kpCit7CisgICAgaWYgKCFtX3VwZGF0aW5nKQorICAg
ICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1NfU0lNVUxBVE9SKQorICAgIFVOVVNFRF9Q
QVJBTShhbHBoYSk7CisgICAgVU5VU0VEX1BBUkFNKGJldGEpOworICAgIFVOVVNFRF9QQVJBTShn
YW1tYSk7CisgICAgVU5VU0VEX1BBUkFNKGNvbXBhc3NIZWFkaW5nKTsKKyAgICBVTlVTRURfUEFS
QU0oY29tcGFzc0FjY3VyYWN5KTsKKyAgICBtX2N1cnJlbnREZXZpY2VPcmllbnRhdGlvbiA9IERl
dmljZU9yaWVudGF0aW9uRGF0YTo6Y3JlYXRlKGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFs
c2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMCk7CisjZWxzZQorICAgIG1fY3VycmVudERl
dmljZU9yaWVudGF0aW9uID0gRGV2aWNlT3JpZW50YXRpb25EYXRhOjpjcmVhdGUodHJ1ZSwgYWxw
aGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRydWUsIGJldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGdhbW1hLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBjb21wYXNzSGVhZGlu
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ1ZSwgY29tcGFzc0FjY3VyYWN5KTsKKyNlbmRpZgorICAgIG1fY29udHJvbGxlci0+
ZGlkQ2hhbmdlRGV2aWNlT3JpZW50YXRpb24obV9jdXJyZW50RGV2aWNlT3JpZW50YXRpb24uZ2V0
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvS2V5RXZlbnRJT1Mu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvS2V5RXZlbnRJT1MubW0KaW5kZXggODI0
YWI3ZjFiY2IwNDYwMGE5NDYwYmYwZTM5MjAxMTY1YzQ1YTVmNC4uMzkxYjZhYTk5MzBiMWJhNGQy
MDUwMGQ3ZmE3NzZkMGQ1Mjc2Y2U4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL0tleUV2ZW50SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9L
ZXlFdmVudElPUy5tbQpAQCAtMjgsNTkgKzI4LDEyIEBACiAKICNpZiBQTEFURk9STShJT1MpCiAK
LSNpbXBvcnQgIktleUV2ZW50Q29jb2EuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW1wb3J0ICJXZWJFdmVudC5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBTdHJpbmcga2V5SWRlbnRp
ZmllckZvcktleUV2ZW50KFdlYkV2ZW50ICpldmVudCkKLXsKLSAgICBOU1N0cmluZyAqcyA9IGV2
ZW50LmNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczsKLSAgICBpZiAoW3MgbGVuZ3RoXSAhPSAx
KSB7Ci0gICAgICAgIExPRyhFdmVudHMsICJyZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG51bWJlciBv
ZiBjaGFyYWN0ZXJzIGluIGtleSBldmVudDogJXUiLCBbcyBsZW5ndGhdKTsKLSAgICAgICAgcmV0
dXJuICJVbmlkZW50aWZpZWQiOwotICAgIH0KLQotICAgIHVuaWNoYXIgYyA9IENGU3RyaW5nR2V0
Q2hhcmFjdGVyQXRJbmRleCgoQ0ZTdHJpbmdSZWYpcywgMCk7Ci0gICAgcmV0dXJuIGtleUlkZW50
aWZpZXJGb3JDaGFyQ29kZShjKTsKLX0KLQotUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9y
bUtleWJvYXJkRXZlbnQoV2ViRXZlbnQgKmV2ZW50KQotICAgIDogUGxhdGZvcm1FdmVudChldmVu
dC50eXBlID09IFdlYkV2ZW50S2V5VXAgPyBQbGF0Zm9ybUV2ZW50OjpLZXlVcCA6IFBsYXRmb3Jt
RXZlbnQ6OktleURvd24sIGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrU2hp
ZnQsIGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrQ29udHJvbCwgZXZlbnQu
bW9kaWZpZXJGbGFncyAmIFdlYkV2ZW50RmxhZ01hc2tBbHRlcm5hdGUsIGV2ZW50Lm1vZGlmaWVy
RmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrQ29tbWFuZCkKLSAgICAsIG1fdGV4dChldmVudC5jaGFy
YWN0ZXJzKQotICAgICwgbV91bm1vZGlmaWVkVGV4dChldmVudC5jaGFyYWN0ZXJzSWdub3JpbmdN
b2RpZmllcnMpCi0gICAgLCBtX2tleUlkZW50aWZpZXIoa2V5SWRlbnRpZmllckZvcktleUV2ZW50
KGV2ZW50KSkKLSAgICAsIG1fYXV0b1JlcGVhdChldmVudC5pc0tleVJlcGVhdGluZykKLSAgICAs
IG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlKGV2ZW50LmtleUNvZGUpCi0gICAgLCBtX2lzS2V5cGFk
KGZhbHNlKSAvLyBpUGhvbmUgZG9lcyBub3QgZGlzdGluZ3Vpc2ggdGhlIG51bXBhZCA8cmRhcjov
L3Byb2JsZW0vNzE5MDgzNT4KLSAgICAsIG1fRXZlbnQoZXZlbnQpCi17Ci0gICAgQVNTRVJUKGV2
ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlEb3duIHx8IGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlV
cCk7Ci0KLSAgICAvLyBBbHdheXMgdXNlIDEzIGZvciBFbnRlci9SZXR1cm4gLS0gd2UgZG9uJ3Qg
d2FudCB0byB1c2UgQXBwS2l0J3MgZGlmZmVyZW50IGNoYXJhY3RlciBmb3IgRW50ZXIuCi0gICAg
aWYgKG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID09ICdccicpIHsKLSAgICAgICAgbV90ZXh0ID0g
IlxyIjsKLSAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9ICJcciI7Ci0gICAgfQotCi0gICAgLy8g
VGhlIGFkanVzdG1lbnRzIGJlbG93IGFyZSBvbmx5IG5lZWRlZCBpbiBiYWNrd2FyZCBjb21wYXRp
YmlsaXR5IG1vZGUsIGJ1dCB3ZSBjYW5ub3QgdGVsbCB3aGF0IG1vZGUgd2UgYXJlIGluIGZyb20g
aGVyZS4KLQotICAgIC8vIFR1cm4gMHg3RiBpbnRvIDgsIGJlY2F1c2UgYmFja3NwYWNlIG5lZWRz
IHRvIGFsd2F5cyBiZSA4LgotICAgIGlmIChtX3RleHQgPT0gIlx4N0YiKQotICAgICAgICBtX3Rl
eHQgPSAiXHg4IjsKLSAgICBpZiAobV91bm1vZGlmaWVkVGV4dCA9PSAiXHg3RiIpCi0gICAgICAg
IG1fdW5tb2RpZmllZFRleHQgPSAiXHg4IjsKLSAgICAvLyBBbHdheXMgdXNlIDkgZm9yIHRhYiAt
LSB3ZSBkb24ndCB3YW50IHRvIHVzZSBBcHBLaXQncyBkaWZmZXJlbnQgY2hhcmFjdGVyIGZvciBz
aGlmdC10YWIuCi0gICAgaWYgKG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID09IDkpIHsKLSAgICAg
ICAgbV90ZXh0ID0gIlx4OSI7Ci0gICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHg5IjsKLSAg
ICB9Ci19Ci0KIHZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3du
RXZlbnQoVHlwZSB0eXBlLCBib29sIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCiB7CiAgICAg
Ly8gQ2FuIG9ubHkgY2hhbmdlIHR5cGUgZnJvbSBLZXlEb3duIHRvIFJhd0tleURvd24gb3IgQ2hh
ciwgYXMgd2UgbGFjayBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgY29udmVyc2lvbnMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTUlNRVR5cGVSZWdpc3RyeUlPUy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9NSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRmNDg1YTIwZDdjMWM3MjU4YWFhNWExMjViNmMyNjlmOWNjZTVmYzAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTUlNRVR5cGVSZWdpc3RyeUlP
Uy5tbQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKworI2luY2x1ZGUgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgCit7CitTdHJpbmcgTUlNRVR5
cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nICZleHQpCit7
CisgICAgcmV0dXJuIHdrR2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0KTsKK30KKworVmVjdG9y
PFN0cmluZz4gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0RXh0ZW5zaW9uc0Zvck1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgLyp0eXBlKi8pCit7CisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Cit9CisK
K1N0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIC8qdHlwZSovKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwor
Ym9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTWVtb3J5UHJlc3N1
cmVIYW5kbGVySU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiNDRmMjNiM2U1MWNlMWY3YThlYzkzNGE3MTcz
ZDRhNGQ5NWNjYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIKKworI2ltcG9ydCAiTG9nZ2luZy5o
IgorI2ltcG9ydCAiU3lzdGVtTWVtb3J5LmgiCisjaW1wb3J0ICJXZWJDb3JlVGhyZWFkLmgiCisj
aW1wb3J0IDxsaWJrZXJuL09TQXRvbWljLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIHZvaWQgcmVzcG9uZFRvTWVtb3J5UHJlc3N1cmVDYWxsYmFjayhDRlJ1bkxvb3BPYnNlcnZl
clJlZiBvYnNlcnZlciwgQ0ZSdW5Mb29wQWN0aXZpdHkgLyphY3Rpdml0eSovLCB2b2lkKiAvKmlu
Zm8qLykKK3sKKyAgICBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5yZXNwb25kVG9NZW1vcnlQcmVz
c3VyZUlmTmVlZGVkKCk7CisgICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJJbnZhbGlkYXRlKG9ic2VydmVy
KTsKKyAgICBDRlJlbGVhc2Uob2JzZXJ2ZXIpOworfQorCit2b2lkIE1lbW9yeVByZXNzdXJlSGFu
ZGxlcjo6aW5zdGFsbE1lbW9yeVJlbGVhc2VCbG9jayh2b2lkIChecmVsZWFzZU1lbW9yeUJsb2Nr
KSgpLCBib29sIGNsZWFyUHJlc3N1cmVPbk1lbW9yeVJlbGVhc2UpCit7CisgICAgaWYgKG1faW5z
dGFsbGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9yZWxlYXNlTWVtb3J5QmxvY2sgPSBCbG9j
a19jb3B5KHJlbGVhc2VNZW1vcnlCbG9jayk7CisgICAgbV9jbGVhclByZXNzdXJlT25NZW1vcnlS
ZWxlYXNlID0gY2xlYXJQcmVzc3VyZU9uTWVtb3J5UmVsZWFzZTsKKyAgICBtX2luc3RhbGxlZCA9
IHRydWU7Cit9CisKK3ZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzZXRSZWNlaXZlZE1lbW9y
eVByZXNzdXJlKE1lbW9yeVByZXNzdXJlUmVhc29uIHJlYXNvbikKK3sKKyAgICBPU0F0b21pY1Rl
c3RBbmRTZXQoMCwgJm1fcmVjZWl2ZWRNZW1vcnlQcmVzc3VyZSk7CisKKyAgICB7CisgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX29ic2VydmVyTXV0ZXgpOworICAgICAgICBpZiAoIW1fb2Jz
ZXJ2ZXIpIHsKKyAgICAgICAgICAgIG1fb2JzZXJ2ZXIgPSBDRlJ1bkxvb3BPYnNlcnZlckNyZWF0
ZShOVUxMLCBrQ0ZSdW5Mb29wQmVmb3JlV2FpdGluZyB8IGtDRlJ1bkxvb3BFeGl0LCBOTyAvKiBk
b24ndCByZXBlYXQgKi8sCisgICAgICAgICAgICAgICAgMCwgV2ViQ29yZTo6cmVzcG9uZFRvTWVt
b3J5UHJlc3N1cmVDYWxsYmFjaywgTlVMTCk7CisgICAgICAgICAgICBDRlJ1bkxvb3BBZGRPYnNl
cnZlcihXZWJUaHJlYWRSdW5Mb29wKCksIG1fb2JzZXJ2ZXIsIGtDRlJ1bkxvb3BDb21tb25Nb2Rl
cyk7CisgICAgICAgICAgICBDRlJ1bkxvb3BXYWtlVXAoV2ViVGhyZWFkUnVuTG9vcCgpKTsKKyAg
ICAgICAgfQorICAgICAgICBtX21lbW9yeVByZXNzdXJlUmVhc29uIHw9IHJlYXNvbjsKKyAgICB9
Cit9CisKK2Jvb2wgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpoYXNSZWNlaXZlZE1lbW9yeVByZXNz
dXJlKCkKK3sKKyAgICByZXR1cm4gT1NBdG9taWNPcjMyKDAsICZtX3JlY2VpdmVkTWVtb3J5UHJl
c3N1cmUpOworfQorCit2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6Y2xlYXJNZW1vcnlQcmVz
c3VyZSgpCit7CisgICAgT1NBdG9taWNUZXN0QW5kQ2xlYXIoMCwgJm1fcmVjZWl2ZWRNZW1vcnlQ
cmVzc3VyZSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29ic2VydmVy
TXV0ZXgpOworICAgICAgICBtX21lbW9yeVByZXNzdXJlUmVhc29uID0gTWVtb3J5UHJlc3N1cmVS
ZWFzb25Ob25lOworICAgIH0KK30KKworYm9vbCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNob3Vs
ZFdhaXRGb3JNZW1vcnlDbGVhck1lc3NhZ2UoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X29ic2VydmVyTXV0ZXgpOworICAgIHJldHVybiBtX21lbW9yeVByZXNzdXJlUmVhc29uICYgTWVt
b3J5UHJlc3N1cmVSZWFzb25WTVN0YXR1czsKK30KKwordm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRs
ZXI6OnJlc3BvbmRUb01lbW9yeVByZXNzdXJlSWZOZWVkZWQoKQoreworICAgIEFTU0VSVChXZWJU
aHJlYWRJc0xvY2tlZE9yRGlzYWJsZWQoKSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX29ic2VydmVyTXV0ZXgpOworICAgICAgICBtX29ic2VydmVyID0gMDsKKyAgICB9
CisKKyAgICBpZiAoaGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3VyZSgpKSB7CisgICAgICAgIEFTU0VS
VChtX3JlbGVhc2VNZW1vcnlCbG9jayk7CisgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIkhh
bmRsZSBtZW1vcnkgcHJlc3N1cmUgYXQgJXMiLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgICAg
ICAgbV9yZWxlYXNlTWVtb3J5QmxvY2soKTsKKyAgICAgICAgaWYgKG1fY2xlYXJQcmVzc3VyZU9u
TWVtb3J5UmVsZWFzZSkKKyAgICAgICAgICAgIGNsZWFyTWVtb3J5UHJlc3N1cmUoKTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Bhc3RlYm9hcmRJT1MubW0KaW5kZXggODdiNTUxNzkxYWQxY2QzYjgxNDc1ZTQ4MTNlMjE0
ZjhhYTcxN2U4ZC4uZjI1OTI3NThiYWUxNzkzZTUxYzEyNTVmM2QyMDJmNjViNjFlZjc2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KQEAgLTM1LDIw
ICszNSwyNCBAQAogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyLmgiCiAj
aW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2ltcG9ydCAiSFRNTENvbnZlcnRlci5oIgog
I2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxOYW1lcy5oIgogI2ltcG9ydCAi
SFRNTFBhcnNlcklkaW9tcy5oIgotI2ltcG9ydCAiVVJMLmgiCisjaW1wb3J0ICJJbWFnZS5oIgog
I2ltcG9ydCAiTGVnYWN5V2ViQXJjaGl2ZS5oIgogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAi
UGFzdGVib2FyZFN0cmF0ZWd5LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNp
bXBvcnQgIlJlbmRlckltYWdlLmgiCisjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3NJ
T1MuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIK
ICNpbXBvcnQgIlRleHQuaCIKKyNpbXBvcnQgIlVSTC5oIgorI2ltcG9ydCAiV2ViTlNBdHRyaWJ1
dGVkU3RyaW5nRXh0cmFzLmgiCiAjaW1wb3J0ICJodG1sZWRpdGluZy5oIgogI2ltcG9ydCAibWFy
a3VwLmgiCi0jaW1wb3J0ICJXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIKICNpbXBvcnQg
PE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KIAogQGludGVyZmFjZSBO
U0F0dHJpYnV0ZWRTdHJpbmcgKE5TQXR0cmlidXRlZFN0cmluZ0tpdEFkZGl0aW9ucykKQEAgLTEy
Niw5NyArMTMwLDI0IEBAIFBhc3NPd25QdHI8UGFzdGVib2FyZD4gUGFzdGVib2FyZDo6Y3JlYXRl
UHJpdmF0ZSgpCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYXN0ZWJvYXJkKTsKIH0KIAotdm9p
ZCBQYXN0ZWJvYXJkOjpzZXRGcmFtZShGcmFtZSogZnJhbWUpCit2b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KQogewotICAgIG1fZnJhbWUg
PSBmcmFtZTsKLSAgICBtX2NoYW5nZUNvdW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkt
PnBhc3RlYm9hcmRDaGFuZ2VDb3VudCgpOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVUb1Bhc3RlYm9hcmQoY29udGVudCk7CiB9CiAKLXZvaWQg
UGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgLypj
YW5TbWFydENvcHlPckRlbGV0ZSovLCBGcmFtZSAqZnJhbWUsIFNob3VsZFNlcmlhbGl6ZVNlbGVj
dGVkVGV4dEZvckNsaXBib2FyZCBzaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9h
cmQpCitTdHJpbmcgUGFzdGVib2FyZDo6cmVzb3VyY2VNSU1FVHlwZShjb25zdCBOU1N0cmluZyAq
bWltZVR5cGUpCiB7Ci0gICAgQVNTRVJUKHNlbGVjdGVkUmFuZ2UpOwotICAgIEFTU0VSVChmcmFt
ZSk7Ci0KLSAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgY29u
dGVudCBpbnNpZGUgYW4gYW5jaG9yIHRhZwotICAgIC8vIHdlIG1vdmUgdGhlIHNlbGVjdGlvbiBz
dGFydCB0byBpbmNsdWRlIHRoZSBhbmNob3IuCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBO
b2RlKiBjb21tb25BbmNlc3RvciA9IHNlbGVjdGVkUmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFp
bmVyKGVjKTsKLSAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3IpOwotICAgIE5vZGUqIGVuY2xvc2lu
Z0FuY2hvciA9IGVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9u
QW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFUYWcpOwotICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYg
Y29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoc2VsZWN0ZWRSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpLmFuY2hvck5vZGUoKSksIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSkgPj0gMCkKLSAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2V0U3RhcnQoZW5jbG9zaW5n
QW5jaG9yLCAwLCBlYyk7Ci0KLSAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRh
dGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotCi0g
ICAgLy8gUHV0IFdlYkFyY2hpdmUgb24gdGhlIHBhc3RlYm9hcmQuCi0gICAgUmVmUHRyPExlZ2Fj
eVdlYkFyY2hpdmU+IGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0
aW9uKGZyYW1lKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gYXJjaGl2ZSA/IGFy
Y2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpIDogMDsKLSAgICBpZiAoZGF0YSkKLSAgICAg
ICAgW3JlcHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTooTlNEYXRhICopZGF0YS5nZXQoKSBm
b3JLZXk6V2ViQXJjaGl2ZVBib2FyZFR5cGVdOwotCi0gICAgUmV0YWluUHRyPE5TSFRNTFJlYWRl
cj4gY29udmVydGVyID0gYWRvcHROUyhbW2dldE5TSFRNTFJlYWRlckNsYXNzKCkgYWxsb2NdIGlu
aXRXaXRoRE9NUmFuZ2U6a2l0KHNlbGVjdGVkUmFuZ2UpXSk7Ci0gICAgaWYgKGNvbnZlcnRlcikg
ewotICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbY29udmVy
dGVyLmdldCgpIGF0dHJpYnV0ZWRTdHJpbmddOwotICAgICAgICBOU0RhdGEqIFJURkREYXRhID0g
W2F0dHJpYnV0ZWRTdHJpbmcgUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRl
ZFN0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKLSAgICAgICAgaWYgKFJU
RkREYXRhKQotICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTpSVEZE
RGF0YSBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVJURkRdOwotICAgICAgICBpZiAoW2F0dHJp
YnV0ZWRTdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10pCi0gICAgICAgICAgICBhdHRyaWJ1dGVk
U3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNobWVudENoYXJhY3RlcnMo
YXR0cmlidXRlZFN0cmluZyk7Ci0gICAgICAgIE5TRGF0YSogUlRGRGF0YSA9IFthdHRyaWJ1dGVk
U3RyaW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmluZyBsZW5n
dGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKLSAgICAgICAgaWYgKFJURkRhdGEpCi0gICAg
ICAgICAgICBbcmVwcmVzZW50YXRpb25zLmdldCgpIHNldFZhbHVlOlJURkRhdGEgZm9yS2V5OihO
U1N0cmluZyAqKWtVVFR5cGVSVEZdOwotICAgIH0KLQotICAgIC8vIFB1dCBwbGFpbiBzdHJpbmcg
b24gdGhlIHBhc3RlYm9hcmQuCi0gICAgU3RyaW5nIHRleHQgPSBzaG91bGRTZXJpYWxpemVTZWxl
Y3RlZFRleHRGb3JDbGlwYm9hcmQgPT0gSW5jbHVkZUltYWdlQWx0VGV4dEZvckNsaXBib2FyZAot
ICAgICAgICA/IGZyYW1lLT5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKSA6IGZy
YW1lLT5lZGl0b3IoKS5zZWxlY3RlZFRleHQoKTsKLSAgICB0ZXh0LnJlcGxhY2Uobm9CcmVha1Nw
YWNlLCAnICcpOwotICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6dGV4dCBmb3JL
ZXk6KE5TU3RyaW5nICopa1VUVHlwZVRleHRdOwotCi0gICAgZnJhbWUtPmVkaXRvcigpLmNsaWVu
dCgpLT53cml0ZURhdGFUb1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25zLmdldCgpKTsKKyAgICBy
ZXR1cm4gU3RyaW5nKGFkb3B0Q0YoVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRh
ZyhrVVRUYWdDbGFzc01JTUVUeXBlLCAoQ0ZTdHJpbmdSZWYpbWltZVR5cGUsIE5VTEwpKS5nZXQo
KSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0
ZXh0LCBGcmFtZSAqZnJhbWUpCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9h
cmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKQogewotICAgIEFTU0VSVChmcmFtZSk7Ci0KLSAgICBS
ZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkg
c2V0VmFsdWU6dGV4dCBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVRleHRdOwotICAgIGZyYW1l
LT5lZGl0b3IoKS5jbGllbnQoKS0+d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9u
cy5nZXQoKSk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCBG
cmFtZSogZnJhbWUpCi17Ci0gICAgQVNTRVJUKG5vZGUpOwotCi0gICAgaWYgKCEobm9kZS0+cmVu
ZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdlKCkpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBSZW5kZXJJbWFnZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRl
cmVyKCkpOwotICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJ
bWFnZSgpOwotICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJy
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2Ut
PmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwotICAgIEFTU0VSVChpbWFnZSk7Ci0KLSAgICBS
ZXRhaW5QdHI8TlNEYXRhPiBpbWFnZURhdGEgPSBpbWFnZS0+ZGF0YSgpLT5jcmVhdGVOU0RhdGEo
KTsKLQotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gZGljdGlvbmFyeSA9IGFkb3B0TlMoW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgTlNTdHJpbmcgKm1pbWVUeXBlID0gY2FjaGVk
SW1hZ2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IHV0aSA9IGFkb3B0Q0YoVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZyhrVVRU
YWdDbGFzc01JTUVUeXBlLCAoQ0ZTdHJpbmdSZWYpbWltZVR5cGUsIE5VTEwpKTsKLSAgICBpZiAo
dXRpKSB7Ci0gICAgICAgIFtkaWN0aW9uYXJ5LmdldCgpIHNldE9iamVjdDppbWFnZURhdGEuZ2V0
KCkgZm9yS2V5OihOU1N0cmluZyAqKXV0aS5nZXQoKV07Ci0gICAgICAgIFtkaWN0aW9uYXJ5Lmdl
dCgpIHNldE9iamVjdDooTlNTdHJpbmcgKilub2RlLT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0
cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG5vZGUpLT5nZXRBdHRyaWJ1dGUoInNyYyIpKSkgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVV
UkxdOwotICAgIH0KLSAgICBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPndyaXRlRGF0YVRvUGFz
dGVib2FyZChkaWN0aW9uYXJ5LmdldCgpKTsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJkKHBhc3RlYm9hcmRJbWFnZSk7CiB9
CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiwgU21hcnRS
ZXBsYWNlT3B0aW9uKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJp
bmcmIHRleHQsIFNtYXJ0UmVwbGFjZU9wdGlvbikKIHsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJkKGtVVFR5cGVUZXh0LCB0
ZXh0KTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBhc3RlYm9hcmQoY29uc3QgUGFzdGVi
b2FyZCYpCkBAIC0yMzAsMjQxICsxNjEsODMgQEAgYm9vbCBQYXN0ZWJvYXJkOjpjYW5TbWFydFJl
cGxhY2UoKQogCiB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZFBsYWluVGV4dCYgdGV4
dCkKIHsKLSAgICBSZXRhaW5QdHI8TlNBcnJheT4gcGFzdGVib2FyZEl0ZW0gPSBtX2ZyYW1lLT5l
ZGl0b3IoKS5jbGllbnQoKS0+cmVhZERhdGFGcm9tUGFzdGVib2FyZCgoTlNTdHJpbmcgKilrVVRU
eXBlVGV4dCwgMCk7Ci0KLSAgICBpZiAoW3Bhc3RlYm9hcmRJdGVtLmdldCgpIGNvdW50XSA9PSAw
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZCB2YWx1ZSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQo
KSBvYmplY3RBdEluZGV4OjBdOwotICAgIEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNT
dHJpbmcgY2xhc3NdXSk7Ci0gICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBj
bGFzc11dKQotICAgICAgICB0ZXh0LnRleHQgPSAoTlNTdHJpbmcgKil2YWx1ZTsKKyAgICBQYXN0
ZWJvYXJkU3RyYXRlZ3kmIHN0cmF0ZWd5ID0gKnBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJv
YXJkU3RyYXRlZ3koKTsKKyAgICB0ZXh0LnRleHQgPSBzdHJhdGVneS5yZWFkU3RyaW5nRnJvbVBh
c3RlYm9hcmQoMCwga1VUVHlwZVRleHQpOwogfQogCiBzdGF0aWMgTlNBcnJheSogc3VwcG9ydGVk
SW1hZ2VUeXBlcygpCiB7Ci0gICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6KGlk
KWtVVFR5cGVQTkcsIChpZClrVVRUeXBlVElGRiwgKGlkKWtVVFR5cGVKUEVHLCAoaWQpa1VUVHlw
ZUdJRiwgbmlsXTsKKyAgICByZXR1cm4gQFsoaWQpa1VUVHlwZVBORywgKGlkKWtVVFR5cGVUSUZG
LCAoaWQpa1VUVHlwZUpQRUcsIChpZClrVVRUeXBlR0lGXTsKIH0KIAotTlNBcnJheSogUGFzdGVi
b2FyZDo6c3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzKCkKK3ZvaWQgUGFzdGVib2FyZDo6cmVhZChQ
YXN0ZWJvYXJkV2ViQ29udGVudFJlYWRlciYgcmVhZGVyKQogewotICAgIHJldHVybiBbTlNBcnJh
eSBhcnJheVdpdGhPYmplY3RzOihpZClXZWJBcmNoaXZlUGJvYXJkVHlwZSwgKGlkKWtVVFR5cGVQ
TkcsIChpZClrVVRUeXBlVElGRiwgKGlkKWtVVFR5cGVKUEVHLCAoaWQpa1VUVHlwZUdJRiwgKGlk
KWtVVFR5cGVVUkwsIChpZClrVVRUeXBlVGV4dCwgKGlkKWtVVFR5cGVSVEZELCAoaWQpa1VUVHlw
ZVJURiwgbmlsXTsKLX0KLQotI2RlZmluZSBXZWJEYXRhUHJvdG9jb2xTY2hlbWUgQCJ3ZWJraXQt
ZmFrZS11cmwiCi0KLXN0YXRpYyBOU1VSTCogdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChOU1N0
cmluZyAqcmVsYXRpdmVQYXJ0KQotewotICAgIENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZVVUlEQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOwotICAgIE5TU3RyaW5nICpVVUlEU3RyaW5nID0gKE5T
U3RyaW5nICopQ0ZVVUlEQ3JlYXRlU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVVSURSZWYp
OwotICAgIENGUmVsZWFzZShVVUlEUmVmKTsKLSAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTFdp
dGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDovLyVALyVAIiwgV2ViRGF0
YVByb3RvY29sU2NoZW1lLCBVVUlEU3RyaW5nLCByZWxhdGl2ZVBhcnRdXTsKLSAgICBDRlJlbGVh
c2UoVVVJRFN0cmluZyk7Ci0KLSAgICByZXR1cm4gVVJMOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UoRnJh
bWUqIGZyYW1lLCBQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2UpCi17Ci0gICAg
UmVmUHRyPEVsZW1lbnQ+IGltYWdlRWxlbWVudCA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVF
bGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBmYWxzZSk7Ci0KLSAgICBpZiAoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICBs
b2FkZXItPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZS5nZXQoKSk7Ci0KLSAgICBOU1VSTCAq
VVJMID0gcmVzb3VyY2UtPnVybCgpOwotICAgIGltYWdlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhU
TUxOYW1lczo6c3JjQXR0ciwgW1VSTCBpc0ZpbGVVUkxdID8gW1VSTCBhYnNvbHV0ZVN0cmluZ10g
OiByZXNvdXJjZS0+dXJsKCkpOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgZnJh
Z21lbnQtPmFwcGVuZENoaWxkKGltYWdlRWxlbWVudC5yZWxlYXNlKCkpOwotICAgIHJldHVybiBm
cmFnbWVudC5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGRvY3VtZW50RnJhZ21lbnRXaXRoTGluayhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKQotewotICAgIFJlZlB0cjxFbGVtZW50PiBhbmNob3JFbGVtZW50ID0g
ZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoSFRNTE5hbWVzOjphVGFnLCBmYWxzZSk7Ci0KLSAgICBh
bmNob3JFbGVtZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpocmVmQXR0ciwgdXJsU3RyaW5n
KTsKLSAgICBhbmNob3JFbGVtZW50LT5hcHBlbmRDaGlsZChkb2N1bWVudC0+Y3JlYXRlVGV4dE5v
ZGUodXJsU3RyaW5nKSk7Ci0KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBkb2N1bWVudC0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgIGZyYWdtZW50LT5hcHBl
bmRDaGlsZChhbmNob3JFbGVtZW50LnJlbGVhc2UoKSk7Ci0gICAgcmV0dXJuIGZyYWdtZW50LnJl
bGVhc2UoKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1l
bnRGcmFnbWVudFdpdGhSVEYoRnJhbWUqIGZyYW1lLCBOU1N0cmluZyAqcGFzdGVib2FyZFR5cGUs
IE5TRGF0YSogcGFzdGVib2FyZERhdGEpCi17Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmRv
Y3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZzsK
LSAgICBpZiAoW3Bhc3RlYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRU
eXBlUlRGRF0pCi0gICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFJURkQ6cGFzdGVib2FyZERhdGEgZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOwotCi0g
ICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFJURjpwYXN0ZWJvYXJkRGF0YSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07
Ci0KLSAgICBpZiAoIXN0cmluZykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIHdhc0Rl
ZmVycmluZ0NhbGxiYWNrcyA9IGZyYW1lLT5wYWdlKCktPmRlZmVyc0xvYWRpbmcoKTsKLSAgICBp
ZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykKLSAgICAgICAgZnJhbWUtPnBhZ2UoKS0+c2V0RGVm
ZXJzTG9hZGluZyh0cnVlKTsKKyAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kmIHN0cmF0ZWd5ID0gKnBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKTsKIAotICAgIFZlY3RvcjxS
ZWZQdHI8QXJjaGl2ZVJlc291cmNlPj4gcmVzb3VyY2VzOwotICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IGZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+ZG9jdW1lbnRGcmFn
bWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKHN0cmluZy5nZXQoKSwgcmVzb3VyY2VzKTsKKyAgICBp
bnQgbnVtYmVyT2ZJdGVtcyA9IHN0cmF0ZWd5LmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAK
LSAgICBzaXplX3Qgc2l6ZSA9IHJlc291cmNlcy5zaXplKCk7Ci0gICAgaWYgKHNpemUpIHsKLSAg
ICAgICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExv
YWRlcigpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgICAgIGxvYWRlci0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlc1tpXSk7Ci0gICAgfQor
ICAgIGlmICghbnVtYmVyT2ZJdGVtcykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCF3YXNE
ZWZlcnJpbmdDYWxsYmFja3MpCi0gICAgICAgIGZyYW1lLT5wYWdlKCktPnNldERlZmVyc0xvYWRp
bmcoZmFsc2UpOworICAgIE5TQXJyYXkgKnR5cGVzID0gc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVz
KCk7CisgICAgaW50IG51bWJlck9mVHlwZXMgPSBbdHlwZXMgY291bnRdOwogCi0gICAgcmV0dXJu
IGZyYWdtZW50LnJlbGVhc2UoKTsKLX0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9m
SXRlbXM7IGkrKykgeworICAgICAgICBmb3IgKGludCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXgg
PCBudW1iZXJPZlR5cGVzOyB0eXBlSW5kZXgrKykgeworICAgICAgICAgICAgTlNTdHJpbmcgKnR5
cGUgPSBbdHlwZXMgb2JqZWN0QXRJbmRleDp0eXBlSW5kZXhdOwogCi1QYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnRGb3JQYXN0ZWJvYXJkSXRl
bUF0SW5kZXgoRnJhbWUqIGZyYW1lLCBpbnQgaW5kZXgsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJv
b2wmIGNob3NlUGxhaW5UZXh0KQotewotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+ZG9jdW1lbnRGcmFnbWVudEZyb21EZWxl
Z2F0ZShpbmRleCk7Ci0gICAgaWYgKGZyYWdtZW50KQotICAgICAgICByZXR1cm4gZnJhZ21lbnQu
cmVsZWFzZSgpOwotCi0gICAgLy8gRmlyc3QgdHJ5IHRvIGFzayB0aGUgY2xpZW50IGFib3V0IHRo
ZSBzdXBwb3J0ZWQgdHlwZXMuIEl0IHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlIGNsaWVudAotICAg
IC8vIGhhcyBubyBzZWxlY3Rpb24uCi0gICAgTlNBcnJheSAqc3VwcG9ydGVkVHlwZXMgPSBmcmFt
ZS0+ZWRpdG9yKCkuY2xpZW50KCktPnN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlc0ZvckN1cnJlbnRT
ZWxlY3Rpb24oKTsKLSAgICBpZiAoIXN1cHBvcnRlZFR5cGVzKQotICAgICAgICBzdXBwb3J0ZWRU
eXBlcyA9IHN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlcygpOwotICAgIGludCBudW1iZXJPZlR5cGVz
ID0gW3N1cHBvcnRlZFR5cGVzIGNvdW50XTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
YmVyT2ZUeXBlczsgaSsrKSB7Ci0gICAgICAgIE5TU3RyaW5nICp0eXBlID0gW3N1cHBvcnRlZFR5
cGVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIFJldGFpblB0cjxOU0FycmF5PiBwYXN0ZWJv
YXJkSXRlbSA9IGZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+cmVhZERhdGFGcm9tUGFzdGVib2Fy
ZCh0eXBlLCBpbmRleCk7Ci0KLSAgICAgICAgaWYgKFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBjb3Vu
dF0gPT0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChbdHlwZSBpc0Vx
dWFsVG9TdHJpbmc6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7Ci0gICAgICAgICAgICBpZiAoIWZy
YW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAg
ICAvLyBXZSBwdXQgW1dlYkFyY2hpdmUgZGF0YV0gb24gdGhlIHBhc3RlYm9hcmQgaW4gLWNvcHk6
IGluc3RlYWQgb2YgdGhlIGFyY2hpdmUgaXRzZWxmIHVudGlsIHRoZXJlIGlzIEFQSSB0byBwcm92
aWRlIHRoZSBXZWJBcmNoaXZlLgotICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gW3Bhc3RlYm9h
cmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgICAgICAgICBSZWZQdHI8TGVnYWN5
V2ViQXJjaGl2ZT4gY29yZUFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoU2hhcmVk
QnVmZmVyOjp3cmFwTlNEYXRhKGRhdGEpLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChjb3JlQXJj
aGl2ZSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IG1haW5SZXNv
dXJjZSA9IGNvcmVBcmNoaXZlLT5tYWluUmVzb3VyY2UoKTsKLSAgICAgICAgICAgICAgICBpZiAo
bWFpblJlc291cmNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5TU3RyaW5nICpNSU1FVHlwZSA9
IG1haW5SZXNvdXJjZS0+bWltZVR5cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1l
LT5sb2FkZXIoKS5jbGllbnQoKS5jYW5TaG93TUlNRVR5cGVBc0hUTUwoTUlNRVR5cGUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IG1hcmt1cFN0cmluZyA9
IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOlttYWluUmVzb3VyY2UtPmRh
dGEoKS0+Y3JlYXRlTlNEYXRhKCkgYXV0b3JlbGVhc2VdIGVuY29kaW5nOk5TVVRGOFN0cmluZ0Vu
Y29kaW5nXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvYWRlci0+YWRkQWxsQXJjaGl2ZVJlc291cmNlcyhjb3JlQXJjaGl2ZS5n
ZXQoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRGcm9tTWFya3VwKCpmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwU3RyaW5nLmdldCgpLCBtYWlu
UmVzb3VyY2UtPnVybCgpLCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwotICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOldlYkFyY2hp
dmVQYm9hcmRUeXBlXSkgeworICAgICAgICAgICAgICAgIGlmIChSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXIgPSBzdHJhdGVneS5yZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQoaSwgV2ViQXJjaGl2
ZVBib2FyZFR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIucmVhZFdlYkFy
Y2hpdmUoYnVmZmVyLnJlbGVhc2UoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcg
KilrVVRUeXBlUlRGRF0pCi0gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRGcmFnbWVudFdpdGhS
VEYoZnJhbWUsIChOU1N0cmluZyAqKWtVVFR5cGVSVEZELCBbcGFzdGVib2FyZEl0ZW0uZ2V0KCkg
b2JqZWN0QXRJbmRleDowXSk7CiAKLSAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzoo
TlNTdHJpbmcgKilrVVRUeXBlUlRGXSkKLSAgICAgICAgICAgIHJldHVybiBkb2N1bWVudEZyYWdt
ZW50V2l0aFJURihmcmFtZSwgKE5TU3RyaW5nICopa1VUVHlwZVJURiwgW3Bhc3RlYm9hcmRJdGVt
LmdldCgpIG9iamVjdEF0SW5kZXg6MF0pOwotCi0gICAgICAgIGlmIChbc3VwcG9ydGVkSW1hZ2VU
eXBlcygpIGNvbnRhaW5zT2JqZWN0OnR5cGVdKSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNT
dHJpbmc+IGZpbGVuYW1lRXh0ZW5zaW9uID0gYWRvcHROUygoTlNTdHJpbmcgKilVVFR5cGVDb3B5
UHJlZmVycmVkVGFnV2l0aENsYXNzKChDRlN0cmluZ1JlZil0eXBlLCBrVVRUYWdDbGFzc0ZpbGVu
YW1lRXh0ZW5zaW9uKSk7Ci0gICAgICAgICAgICBOU1N0cmluZyAqcmVsYXRpdmVVUkxQYXJ0ID0g
W0AiaW1hZ2UiIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmZpbGVuYW1lRXh0ZW5zaW9uLmdldCgp
XTsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gbWltZVR5cGUgPSBhZG9wdE5TKChO
U1N0cmluZyAqKVVUVHlwZUNvcHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3MoKENGU3RyaW5nUmVmKXR5
cGUsIGtVVFRhZ0NsYXNzTUlNRVR5cGUpKTsKLSAgICAgICAgICAgIE5TRGF0YSAqZGF0YSA9IFtw
YXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOwotICAgICAgICAgICAgcmV0dXJu
IGRvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZShmcmFtZSwgQXJjaGl2ZVJlc291cmNl
OjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtbZGF0YSBjb3B5XSBhdXRvcmVsZWFz
ZV0pLCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KHJlbGF0aXZlVVJMUGFydCksIG1pbWVUeXBl
LmdldCgpLCAiIiwgIiIpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRv
U3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVVUkxdKSB7Ci0gICAgICAgICAgICBpZCB2YWx1ZSA9
IFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOwotICAgICAgICAgICAgaWYg
KCFbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNVUkwgY2xhc3NdXSkgewotICAgICAgICAgICAgICAg
IEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNVUkwgY2xhc3NdXSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzoo
TlNTdHJpbmcgKilrVVRUeXBlUlRGRF0pIHsKKyAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gYnVmZmVyID0gc3RyYXRlZ3kucmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGks
IGtVVFR5cGVSVEZEKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLnJlYWRSVEZE
KGJ1ZmZlci5yZWxlYXNlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgTlNVUkwgKnVybCA9IChO
U1VSTCAqKXZhbHVlOwogCi0gICAgICAgICAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS5jbGllbnQo
KS0+aGFzUmljaGx5RWRpdGFibGVTZWxlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChmcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSwgW3VybCBhYnNvbHV0ZVN0cmluZ10pOwotICAgICAgICAgICAgICAg
IGlmIChmcmFnbWVudCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVh
c2UoKTsKKyAgICAgICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICop
a1VUVHlwZVJURl0pIHsKKyAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
YnVmZmVyID0gc3RyYXRlZ3kucmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGksIGtVVFR5cGVSVEYp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIucmVhZFJURihidWZmZXIucmVsZWFz
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKFt1cmwgaXNGaWxlVVJMXSkgewotICAg
ICAgICAgICAgICAgIE5TU3RyaW5nICpsb2NhbFBhdGggPSBbdXJsIHJlbGF0aXZlUGF0aF07Ci0g
ICAgICAgICAgICAgICAgLy8gT25seSBhbGxvdyB1cmwgYXR0YWNobWVudHMgZnJvbSB+L01lZGlh
IGZvciBub3cuCi0gICAgICAgICAgICAgICAgaWYgKCFbbG9jYWxQYXRoIGhhc1ByZWZpeDpbKE5T
U3RyaW5nICopQ1BTaGFyZWRSZXNvdXJjZXNEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1N0
cmluZzpAIi9NZWRpYS9EQ0lNLyJdXSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGZpbGVUeXBlID0gYWRvcHROUygo
TlNTdHJpbmcgKilVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9yVGFnKGtVVFRhZ0Ns
YXNzRmlsZW5hbWVFeHRlbnNpb24sIChDRlN0cmluZ1JlZilbbG9jYWxQYXRoIHBhdGhFeHRlbnNp
b25dLCBOVUxMKSk7Ci0gICAgICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRh
V2l0aENvbnRlbnRzT2ZGaWxlOmxvY2FsUGF0aF07Ci0gICAgICAgICAgICAgICAgaWYgKFVUVHlw
ZUNvbmZvcm1zVG8oKENGU3RyaW5nUmVmKWZpbGVUeXBlLmdldCgpLCBrVVRUeXBlUE5HKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJj
ZShmcmFtZSwgQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRh
KFtbZGF0YSBjb3B5XSBhdXRvcmVsZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAi
aW1hZ2UucG5nIiksIEAiaW1hZ2UvcG5nIiwgIiIsICIiKSk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoVVRUeXBlQ29uZm9ybXNUbygoQ0ZTdHJpbmdSZWYpZmlsZVR5cGUuZ2V0KCksIGtVVFR5
cGVKUEVHKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnRXaXRo
SW1hZ2VSZXNvdXJjZShmcmFtZSwgQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVy
Ojp3cmFwTlNEYXRhKFtbZGF0YSBjb3B5XSBhdXRvcmVsZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVs
YXRpdmVQYXJ0KEAiaW1hZ2UuanBnIiksIEAiaW1hZ2UvanBnIiwgIiIsICIiKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGxpbmsgd2l0aCBVUkwg
dGV4dC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRGcmFnbWVudFdpdGhMaW5rKGZy
YW1lLT5kb2N1bWVudCgpLCBbdXJsIGFic29sdXRlU3RyaW5nXSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoW3N1cHBvcnRlZEltYWdlVHlwZXMoKSBjb250YWluc09iamVjdDp0eXBl
XSkgeworICAgICAgICAgICAgICAgIGlmIChSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBz
dHJhdGVneS5yZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQoaSwgdHlwZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlYWRlci5yZWFkSW1hZ2UoYnVmZmVyLnJlbGVhc2UoKSwgdHlwZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKGFsbG93UGxhaW5UZXh0ICYmIFt0eXBlIGlzRXF1YWxUb1N0cmluZzoo
TlNTdHJpbmcgKilrVVRUeXBlVGV4dF0pIHsKLSAgICAgICAgICAgIGlkIHZhbHVlID0gW3Bhc3Rl
Ym9hcmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgICAgICAgICBpZiAoIVt2YWx1
ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzoo
TlNTdHJpbmcgKilrVVRUeXBlVVJMXSkgeworICAgICAgICAgICAgICAgIFVSTCB1cmwgPSBzdHJh
dGVneS5yZWFkVVJMRnJvbVBhc3RlYm9hcmQoaSwga1VUVHlwZVVSTCk7CisgICAgICAgICAgICAg
ICAgaWYgKCF1cmwuaXNOdWxsKCkgJiYgcmVhZGVyLnJlYWRVUkwodXJsLCBTdHJpbmcoKSkpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVU
ZXh0XSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcgPSBzdHJhdGVneS5yZWFkU3Ry
aW5nRnJvbVBhc3RlYm9hcmQoaSwga1VUVHlwZVRleHQpOworICAgICAgICAgICAgICAgIGlmICgh
c3RyaW5nLmlzTnVsbCgpICYmIHJlYWRlci5yZWFkUGxhaW5UZXh0KHN0cmluZykpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjaG9zZVBs
YWluVGV4dCA9IHRydWU7Ci0gICAgICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJv
bVRleHQoZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIChOU1N0
cmluZyAqKXZhbHVlKTsKLSAgICAgICAgICAgIGlmIChmcmFnbWVudCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcmV0
dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9j
dW1lbnRGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+IC8qY29udGV4dCov
LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKK05TQXJyYXkqIFBh
c3RlYm9hcmQ6OnN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlcygpCiB7Ci0gICAgY2hvc2VQbGFpblRl
eHQgPSBmYWxzZTsKLQotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
aW50IG51bWJlck9mSXRlbXMgPSBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPmdldFBhc3RlYm9h
cmRJdGVtc0NvdW50KCk7Ci0KLSAgICBpZiAoIW51bWJlck9mSXRlbXMpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgLy8gSW4gdGhlIGNvbW1vbiBjYXNlIHRoZXJlIGlzIGp1c3Qgb25lIGl0ZW0g
b24gdGhlIHBhc3RlYm9hcmQsIGF2b2lkIHRoZSBleHBlbnNlIG9mIHRyYW5zZmVycmluZyB0aGUg
Y29udGVudCBvZgotICAgIC8vIGZyYWdtZW50Rm9yQ3VycmVudEl0ZW0gdG8gdGhlIG1haW4gZnJh
Z21lbnQuCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnRG
cmFnbWVudEZvclBhc3RlYm9hcmRJdGVtQXRJbmRleChmcmFtZSwgMCwgYWxsb3dQbGFpblRleHQs
IGNob3NlUGxhaW5UZXh0KTsKLQotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbnVtYmVyT2ZJdGVt
czsgaSsrKSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudEZvckN1
cnJlbnRJdGVtID0gZG9jdW1lbnRGcmFnbWVudEZvclBhc3RlYm9hcmRJdGVtQXRJbmRleChmcmFt
ZSwgaSwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKLSAgICAgICAgaWYgKCFmcmFn
bWVudCkKLSAgICAgICAgICAgIGZyYWdtZW50ID0gZnJhZ21lbnRGb3JDdXJyZW50SXRlbTsKLSAg
ICAgICAgZWxzZSBpZiAoZnJhZ21lbnRGb3JDdXJyZW50SXRlbSAmJiBmcmFnbWVudEZvckN1cnJl
bnRJdGVtLT5maXJzdENoaWxkKCkpIHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0g
ICAgICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoZnJhZ21lbnRGb3JDdXJyZW50SXRlbS0+
Zmlyc3RDaGlsZCgpLCBlYyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnQp
Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci0KLSAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gQFsoaWQpV2ViQXJjaGl2ZVBib2FyZFR5cGUsIChpZClrVVRUeXBlUE5HLCAoaWQp
a1VUVHlwZVRJRkYsIChpZClrVVRUeXBlSlBFRywgKGlkKWtVVFR5cGVHSUYsIChpZClrVVRUeXBl
VVJMLCAoaWQpa1VUVHlwZVRleHQsIChpZClrVVRUeXBlUlRGRCwgKGlkKWtVVFR5cGVSVEZdOwog
fQogCiBib29sIFBhc3RlYm9hcmQ6Omhhc0RhdGEoKQogewotICAgIHJldHVybiBtX2ZyYW1lLT5l
ZGl0b3IoKS5jbGllbnQoKS0+Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKSAhPSAwOworICAgIHJl
dHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFBhc3Rl
Ym9hcmRJdGVtc0NvdW50KCkgIT0gMDsKIH0KIAogc3RhdGljIFN0cmluZyB1dGlUeXBlRnJvbUNv
Y29hVHlwZShOU1N0cmluZyAqdHlwZSkKQEAgLTU0MCw3ICszMTMsNyBAQCBTdHJpbmcgUGFzdGVi
b2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgICAgICAgICBjb2NvYVZh
bHVlID0gWyhOU1N0cmluZyAqKXZhbHVlIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1h
cHBpbmddOzsKICAgICB9IGVsc2UgaWYgKGNvY29hVHlwZSkgewogICAgICAgICBpZiAoUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gc3RyYXRlZ3kucmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJk
KDAsIGNvY29hVHlwZS5nZXQoKSkpCi0gICAgICAgICAgICBjb2NvYVZhbHVlID0gW1tbTlNTdHJp
bmcgYWxsb2NdIGluaXRXaXRoRGF0YTpidWZmZXItPmNyZWF0ZU5TRGF0YSgpIGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBjb2NvYVZhbHVl
ID0gW1tbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpidWZmZXItPmNyZWF0ZU5TRGF0YSgp
LmdldCgpIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBhdXRvcmVsZWFzZV07CiAgICAg
fQogCiAgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBX
ZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkzOWM4OWZlMTNmNjc4MGU5OWVlNzc3MWIyYmYxZGY2YjRiYmIyNDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZh
Y3RvcnlJT1MuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9y
bUV2ZW50RmFjdG9yeUlPU19oCisjZGVmaW5lIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TX2gKKwor
I2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgPFdl
YktpdEFkZGl0aW9ucy9QbGF0Zm9ybVRvdWNoRXZlbnRJT1MuaD4KKworQGNsYXNzIFdlYkV2ZW50
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtRXZlbnRGYWN0b3J5IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGxhdGZvcm1Nb3VzZUV2ZW50IGNyZWF0ZVBsYXRmb3JtTW91
c2VFdmVudChXZWJFdmVudCAqKTsKKyAgICBzdGF0aWMgUGxhdGZvcm1XaGVlbEV2ZW50IGNyZWF0
ZVBsYXRmb3JtV2hlZWxFdmVudChXZWJFdmVudCAqKTsKKyAgICBzdGF0aWMgUGxhdGZvcm1LZXli
b2FyZEV2ZW50IGNyZWF0ZVBsYXRmb3JtS2V5Ym9hcmRFdmVudChXZWJFdmVudCAqKTsKKyNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHN0YXRpYyBQbGF0Zm9ybVRvdWNoRXZlbnQgY3JlYXRl
UGxhdGZvcm1Ub3VjaEV2ZW50KFdlYkV2ZW50ICopOworI2VuZGlmCit9OworCitTdHJpbmcga2V5
SWRlbnRpZmllckZvcktleUV2ZW50KFdlYkV2ZW50ICopOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPU19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTQ5NTFkZTFjNTNmZTQ3OGJlY2Q4NGUzMTk4NTc4YmMyNTFmZTc1NwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybUV2ZW50RmFj
dG9yeUlPUy5tbQpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxhdGZv
cm1FdmVudEZhY3RvcnlJT1MuaCIKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0dlb21ldHJ5Lmg+
CisjaW1wb3J0IDxJbnRQb2ludC5oPgorI2ltcG9ydCA8S2V5RXZlbnRDb2NvYS5oPgorI2ltcG9y
dCA8TG9nZ2luZy5oPgorI2ltcG9ydCA8V2ViRXZlbnQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgdW5zaWduZWQgbW9kaWZpZXJzRm9yRXZlbnQoV2ViRXZlbnQgKmV2ZW50KQor
eworICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7CisKKyAgICBpZiAoZXZlbnQubW9kaWZpZXJG
bGFncyAmIFdlYkV2ZW50RmxhZ01hc2tTaGlmdCkKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRm
b3JtRXZlbnQ6OlNoaWZ0S2V5OworICAgIGlmIChldmVudC5tb2RpZmllckZsYWdzICYgV2ViRXZl
bnRGbGFnTWFza0NvbnRyb2wpCisgICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpD
dHJsS2V5OworICAgIGlmIChldmVudC5tb2RpZmllckZsYWdzICYgV2ViRXZlbnRGbGFnTWFza0Fs
dGVybmF0ZSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OkFsdEtleTsKKyAg
ICBpZiAoZXZlbnQubW9kaWZpZXJGbGFncyAmIFdlYkV2ZW50RmxhZ01hc2tDb21tYW5kKQorICAg
ICAgICBtb2RpZmllcnMgfD0gUGxhdGZvcm1FdmVudDo6TWV0YUtleTsKKworICAgIHJldHVybiBt
b2RpZmllcnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50UG9pbnQgcG9pbnRGb3JFdmVudChXZWJF
dmVudCAqZXZlbnQpCit7CisgICAgcmV0dXJuIEludFBvaW50KGV2ZW50LmxvY2F0aW9uSW5XaW5k
b3cpOworfQorCitzdGF0aWMgaW5saW5lIEludFBvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoV2Vi
RXZlbnQgKmV2ZW50KQoreworICAgIC8vIGlPUyBXZWJLaXQgd29ya3MgYXMgaWYgaXQgaXMgZnVs
bCBzY3JlZW4uIFRoZXJlZm9yZSBXZWIgY29vcmRzIGFyZSBHbG9iYWwgY29vcmRzLgorICAgIHJl
dHVybiBwb2ludEZvckV2ZW50KGV2ZW50KTsKK30KKworc3RhdGljIFBsYXRmb3JtRXZlbnQ6OlR5
cGUgbW91c2VFdmVudFR5cGUoV2ViRXZlbnQgKmV2ZW50KQoreworICAgIHN3aXRjaCAoZXZlbnQu
dHlwZSkgeworICAgIGNhc2UgV2ViRXZlbnRNb3VzZURvd246CisgICAgICAgIHJldHVybiBQbGF0
Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQ7CisgICAgY2FzZSBXZWJFdmVudE1vdXNlVXA6CisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkOworICAgIGNhc2UgV2ViRXZl
bnRNb3VzZU1vdmVkOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZDsK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZDsKKyAgICB9Cit9CisKK2NsYXNzIFBsYXRm
b3JtTW91c2VFdmVudEJ1aWxkZXIgOiBwdWJsaWMgUGxhdGZvcm1Nb3VzZUV2ZW50IHsKK3B1Ymxp
YzoKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKFdlYkV2ZW50ICpldmVudCkKKyAgICB7
CisgICAgICAgIG1fdHlwZSA9IG1vdXNlRXZlbnRUeXBlKGV2ZW50KTsKKyAgICAgICAgbV9tb2Rp
ZmllcnMgPSAwOworICAgICAgICBtX3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisKKyAgICAg
ICAgbV9wb3NpdGlvbiA9IHBvaW50Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX2dsb2JhbFBv
c2l0aW9uID0gZ2xvYmFsUG9pbnRGb3JFdmVudChldmVudCk7CisgICAgICAgIG1fYnV0dG9uID0g
TGVmdEJ1dHRvbjsgLy8gVGhpcyBoYXMgYWx3YXlzIGJlZW4gdGhlIExlZnRCdXR0b24gb24gaU9T
LgorICAgICAgICBtX2NsaWNrQ291bnQgPSAxOyAvLyBUaGlzIGhhcyBhbHdheXMgYmVlbiAxIG9u
IGlPUy4KKyAgICB9Cit9OworCitQbGF0Zm9ybU1vdXNlRXZlbnQgUGxhdGZvcm1FdmVudEZhY3Rv
cnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudChXZWJFdmVudCAqZXZlbnQpCit7CisgICAgcmV0
dXJuIFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIoZXZlbnQpOworfQorCitjbGFzcyBQbGF0Zm9y
bVdoZWVsRXZlbnRCdWlsZGVyIDogcHVibGljIFBsYXRmb3JtV2hlZWxFdmVudCB7CitwdWJsaWM6
CisgICAgUGxhdGZvcm1XaGVlbEV2ZW50QnVpbGRlcihXZWJFdmVudCAqZXZlbnQpCisgICAgewor
ICAgICAgICBBU1NFUlQoZXZlbnQudHlwZSA9PSBXZWJFdmVudFNjcm9sbFdoZWVsKTsKKworICAg
ICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpXaGVlbDsKKyAgICAgICAgbV9tb2RpZmllcnMg
PSAwOworICAgICAgICBtX3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisKKyAgICAgICAgbV9w
b3NpdGlvbiA9IHBvaW50Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX2dsb2JhbFBvc2l0aW9u
ID0gZ2xvYmFsUG9pbnRGb3JFdmVudChldmVudCk7CisgICAgICAgIG1fZGVsdGFYID0gZXZlbnQu
ZGVsdGFYOworICAgICAgICBtX2RlbHRhWSA9IGV2ZW50LmRlbHRhWTsKKyAgICAgICAgbV9ncmFu
dWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OyAvLyBpT1Mgb25seSBzdXBwb3J0cyBj
b250aW51b3VzIChwaXhlbC1tb2RlKSBzY3JvbGxpbmcuCisgICAgfQorfTsKKworUGxhdGZvcm1X
aGVlbEV2ZW50IFBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybVdoZWVsRXZlbnQo
V2ViRXZlbnQgKmV2ZW50KQoreworICAgIHJldHVybiBQbGF0Zm9ybVdoZWVsRXZlbnRCdWlsZGVy
KGV2ZW50KTsKK30KKworU3RyaW5nIGtleUlkZW50aWZpZXJGb3JLZXlFdmVudChXZWJFdmVudCAq
ZXZlbnQpCit7CisgICAgTlNTdHJpbmcgKnMgPSBldmVudC5jaGFyYWN0ZXJzSWdub3JpbmdNb2Rp
ZmllcnM7CisgICAgaWYgKFtzIGxlbmd0aF0gIT0gMSkgeworICAgICAgICBMT0coRXZlbnRzLCAi
cmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBrZXkgZXZlbnQ6
ICV1IiwgW3MgbGVuZ3RoXSk7CisgICAgICAgIHJldHVybiAiVW5pZGVudGlmaWVkIjsKKyAgICB9
CisKKyAgICByZXR1cm4ga2V5SWRlbnRpZmllckZvckNoYXJDb2RlKENGU3RyaW5nR2V0Q2hhcmFj
dGVyQXRJbmRleCgoQ0ZTdHJpbmdSZWYpcywgMCkpOworfQorCitjbGFzcyBQbGF0Zm9ybUtleWJv
YXJkRXZlbnRCdWlsZGVyIDogcHVibGljIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCB7CitwdWJsaWM6
CisgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlcihXZWJFdmVudCAqZXZlbnQpCisgICAg
eworICAgICAgICBBU1NFUlQoZXZlbnQudHlwZSA9PSBXZWJFdmVudEtleURvd24gfHwgZXZlbnQu
dHlwZSA9PSBXZWJFdmVudEtleVVwKTsKKworICAgICAgICBtX3R5cGUgPSAoZXZlbnQudHlwZSA9
PSBXZWJFdmVudEtleVVwID8gUGxhdGZvcm1FdmVudDo6S2V5VXAgOiBQbGF0Zm9ybUV2ZW50OjpL
ZXlEb3duKTsKKyAgICAgICAgbV9tb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7
CisgICAgICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKKworICAgICAgICBtX3RleHQg
PSBldmVudC5jaGFyYWN0ZXJzOworICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gZXZlbnQuY2hh
cmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOworICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJ
ZGVudGlmaWVyRm9yS2V5RXZlbnQoZXZlbnQpOworICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5
Q29kZSA9IGV2ZW50LmtleUNvZGU7CisgICAgICAgIG1fbWFjQ2hhckNvZGUgPSAwOworICAgICAg
ICBtX2F1dG9SZXBlYXQgPSBldmVudC5pc0tleVJlcGVhdGluZzsKKyAgICAgICAgbV9pc0tleXBh
ZCA9IGZhbHNlOyAvLyBpT1MgZG9lcyBub3QgZGlzdGluZ3Vpc2ggdGhlIG51bXBhZC4gU2VlIDxy
ZGFyOi8vcHJvYmxlbS83MTkwODM1Pi4KKyAgICAgICAgbV9pc1N5c3RlbUtleSA9IGZhbHNlOwor
ICAgICAgICBtX0V2ZW50ID0gZXZlbnQ7CisKKyAgICAgICAgLy8gQWx3YXlzIHVzZSAxMyBmb3Ig
RW50ZXIvUmV0dXJuIC0tIHdlIGRvbid0IHdhbnQgdG8gdXNlIEFwcEtpdCdzIGRpZmZlcmVudCBj
aGFyYWN0ZXIgZm9yIEVudGVyLgorICAgICAgICBpZiAobV93aW5kb3dzVmlydHVhbEtleUNvZGUg
PT0gJ1xyJykgeworICAgICAgICAgICAgbV90ZXh0ID0gIlxyIjsKKyAgICAgICAgICAgIG1fdW5t
b2RpZmllZFRleHQgPSAiXHIiOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIGFkanVzdG1l
bnRzIGJlbG93IGFyZSBvbmx5IG5lZWRlZCBpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUs
IGJ1dCB3ZSBjYW5ub3QgdGVsbCB3aGF0IG1vZGUgd2UgYXJlIGluIGZyb20gaGVyZS4KKworICAg
ICAgICAvLyBUdXJuIDB4N0YgaW50byA4LCBiZWNhdXNlIGJhY2tzcGFjZSBuZWVkcyB0byBhbHdh
eXMgYmUgOC4KKyAgICAgICAgaWYgKG1fdGV4dCA9PSAiXHg3RiIpCisgICAgICAgICAgICBtX3Rl
eHQgPSAiXHg4IjsKKyAgICAgICAgaWYgKG1fdW5tb2RpZmllZFRleHQgPT0gIlx4N0YiKQorICAg
ICAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9ICJceDgiOworICAgICAgICAvLyBBbHdheXMgdXNl
IDkgZm9yIHRhYiAtLSB3ZSBkb24ndCB3YW50IHRvIHVzZSBBcHBLaXQncyBkaWZmZXJlbnQgY2hh
cmFjdGVyIGZvciBzaGlmdC10YWIuCisgICAgICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29k
ZSA9PSA5KSB7CisgICAgICAgICAgICBtX3RleHQgPSAiXHg5IjsKKyAgICAgICAgICAgIG1fdW5t
b2RpZmllZFRleHQgPSAiXHg5IjsKKyAgICAgICAgfQorICAgIH0KK307CisKK1BsYXRmb3JtS2V5
Ym9hcmRFdmVudCBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1LZXlib2FyZEV2
ZW50KFdlYkV2ZW50ICpldmVudCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1LZXlib2FyZEV2ZW50
QnVpbGRlcihldmVudCk7Cit9CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorc3RhdGljIFBs
YXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQaGFzZVR5cGUgY29udmVydFRvdWNoUGhhc2UoTlNOdW1i
ZXIgKnRvdWNoUGhhc2VOdW1iZXIpCit7CisgICAgV2ViRXZlbnRUb3VjaFBoYXNlVHlwZSB0b3Vj
aFBoYXNlID0gc3RhdGljX2Nhc3Q8V2ViRXZlbnRUb3VjaFBoYXNlVHlwZT4oW3RvdWNoUGhhc2VO
dW1iZXIgdW5zaWduZWRJbnRWYWx1ZV0pOworICAgIHN3aXRjaCAodG91Y2hQaGFzZSkgeworICAg
IGNhc2UgV2ViRXZlbnRUb3VjaFBoYXNlQmVnYW46CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVRv
dWNoUG9pbnQ6OlRvdWNoUGhhc2VCZWdhbjsKKyAgICBjYXNlIFdlYkV2ZW50VG91Y2hQaGFzZU1v
dmVkOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlTW92ZWQ7
CisgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VTdGF0aW9uYXJ5OgorICAgICAgICByZXR1cm4g
UGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlU3RhdGlvbmFyeTsKKyAgICBjYXNlIFdlYkV2
ZW50VG91Y2hQaGFzZUVuZGVkOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1Ub3VjaFBvaW50OjpU
b3VjaFBoYXNlRW5kZWQ7CisgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VDYW5jZWxsZWQ6Cisg
ICAgICAgIHJldHVybiBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUGhhc2VDYW5jZWxsZWQ7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJl
dHVybiBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUGhhc2VCZWdhbjsKK30KKworc3RhdGljIFBs
YXRmb3JtRXZlbnQ6OlR5cGUgdG91Y2hFdmVudFR5cGUoV2ViRXZlbnQgKmV2ZW50KQoreworICAg
IHN3aXRjaCAoZXZlbnQudHlwZSkgeworICAgIGNhc2UgV2ViRXZlbnRUb3VjaEJlZ2luOgorICAg
ICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6VG91Y2hTdGFydDsKKyAgICBjYXNlIFdlYkV2ZW50
VG91Y2hFbmQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpUb3VjaEVuZDsKKyAgICBj
YXNlIFdlYkV2ZW50VG91Y2hDYW5jZWw6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpU
b3VjaENhbmNlbDsKKyAgICBjYXNlIFdlYkV2ZW50VG91Y2hDaGFuZ2U6CisgICAgICAgIHJldHVy
biBQbGF0Zm9ybUV2ZW50OjpUb3VjaE1vdmU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpUb3VjaENhbmNl
bDsKKyAgICB9Cit9CisKK2NsYXNzIFBsYXRmb3JtVG91Y2hQb2ludEJ1aWxkZXIgOiBwdWJsaWMg
UGxhdGZvcm1Ub3VjaFBvaW50IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybVRvdWNoUG9pbnRCdWls
ZGVyKHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IEludFBvaW50JiBsb2NhdGlvbiwgVG91Y2hQ
aGFzZVR5cGUgcGhhc2UpCisgICAgICAgIDogUGxhdGZvcm1Ub3VjaFBvaW50KGlkZW50aWZpZXIs
IGxvY2F0aW9uLCBwaGFzZSkKKyAgICB7CisgICAgfQorfTsKKworY2xhc3MgUGxhdGZvcm1Ub3Vj
aEV2ZW50QnVpbGRlciA6IHB1YmxpYyBQbGF0Zm9ybVRvdWNoRXZlbnQgeworcHVibGljOgorICAg
IFBsYXRmb3JtVG91Y2hFdmVudEJ1aWxkZXIoV2ViRXZlbnQgKmV2ZW50KQorICAgIHsKKyAgICAg
ICAgbV90eXBlID0gdG91Y2hFdmVudFR5cGUoZXZlbnQpOworICAgICAgICBtX21vZGlmaWVycyA9
IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV90aW1lc3RhbXAgPSBjdXJyZW50
VGltZSgpOworCisgICAgICAgIG1fZ2VzdHVyZVNjYWxlID0gZXZlbnQuZ2VzdHVyZVNjYWxlOwor
ICAgICAgICBtX2dlc3R1cmVSb3RhdGlvbiA9IGV2ZW50Lmdlc3R1cmVSb3RhdGlvbjsKKyAgICAg
ICAgbV9pc0dlc3R1cmUgPSBldmVudC5pc0dlc3R1cmU7CisgICAgICAgIG1fcG9zaXRpb24gPSBw
b2ludEZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IGdsb2JhbFBv
aW50Rm9yRXZlbnQoZXZlbnQpOworCisgICAgICAgIHVuc2lnbmVkIHRvdWNoQ291bnQgPSBldmVu
dC50b3VjaENvdW50OworICAgICAgICBtX3RvdWNoUG9pbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkodG91Y2hDb3VudCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3VjaENv
dW50OyArK2kpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBbKE5TTnVtYmVy
ICopW2V2ZW50LnRvdWNoSWRlbnRpZmllcnMgb2JqZWN0QXRJbmRleDppXSB1bnNpZ25lZEludFZh
bHVlXTsKKyAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uID0gSW50UG9pbnQoWyhOU1ZhbHVl
ICopW2V2ZW50LnRvdWNoTG9jYXRpb25zIG9iamVjdEF0SW5kZXg6aV0gcG9pbnRWYWx1ZV0pOwor
ICAgICAgICAgICAgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlVHlwZSB0b3VjaFBoYXNl
ID0gY29udmVydFRvdWNoUGhhc2UoW2V2ZW50LnRvdWNoUGhhc2VzIG9iamVjdEF0SW5kZXg6aV0p
OworICAgICAgICAgICAgbV90b3VjaFBvaW50cy51bmNoZWNrZWRBcHBlbmQoUGxhdGZvcm1Ub3Vj
aFBvaW50QnVpbGRlcihpZGVudGlmaWVyLCBsb2NhdGlvbiwgdG91Y2hQaGFzZSkpOworICAgICAg
ICB9CisgICAgfQorfTsKKworUGxhdGZvcm1Ub3VjaEV2ZW50IFBsYXRmb3JtRXZlbnRGYWN0b3J5
OjpjcmVhdGVQbGF0Zm9ybVRvdWNoRXZlbnQoV2ViRXZlbnQgKmV2ZW50KQoreworICAgIHJldHVy
biBQbGF0Zm9ybVRvdWNoRXZlbnRCdWlsZGVyKGV2ZW50KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQppbmRleCAzMjBl
YTUwNDk4ODUxNGU3N2U5MmFkYmExODViODFiYzk4ZjAzZGQyLi5lODM1YTUyMDljNWE5MDk1MWY3
MzliNGUyYTljOGVhMzBmZDMzN2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KQEAgLTI0LDEwICsyNCwxMyBAQAogICov
CiAKICNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxhdGZvcm1QYXN0ZWJvYXJkLmgiCisK
ICNpbXBvcnQgIkNvbG9yLmgiCiAjaW1wb3J0ICJVUkwuaCIKICNpbXBvcnQgIkltYWdlLmgiCi0j
aW1wb3J0ICJQbGF0Zm9ybVBhc3RlYm9hcmQuaCIKKyNpbXBvcnQgIlBhc3RlYm9hcmQuaCIKKyNp
bXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKIAogU09GVF9M
SU5LX0ZSQU1FV09SSyhVSUtpdCkKQEAgLTE1MiwxMiArMTU1LDEyIEBAIHZvaWQgUGxhdGZvcm1Q
YXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkKICAg
ICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwogCiAgICAgaWYgKGNvbnRlbnQuZGF0YUlu
V2ViQXJjaGl2ZUZvcm1hdCkKLSAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTooTlNE
YXRhICopY29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0LT5jcmVhdGVOU0RhdGEoKSBmb3JL
ZXk6V2ViQXJjaGl2ZVBib2FyZFR5cGVdOworICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZh
bHVlOihOU0RhdGEgKiljb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQtPmNyZWF0ZU5TRGF0
YSgpLmdldCgpIGZvcktleTpXZWJBcmNoaXZlUGJvYXJkVHlwZV07CiAKICAgICBpZiAoY29udGVu
dC5kYXRhSW5SVEZERm9ybWF0KQotICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmNv
bnRlbnQuZGF0YUluUlRGREZvcm1hdC0+Y3JlYXRlTlNEYXRhKCkgZm9yS2V5OihOU1N0cmluZyAq
KWtVVFR5cGVSVEZEXTsKKyAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTpjb250ZW50
LmRhdGFJblJURkRGb3JtYXQtPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGZvcktleTooTlNTdHJpbmcg
KilrVVRUeXBlUlRGRF07CiAgICAgaWYgKGNvbnRlbnQuZGF0YUluUlRGRm9ybWF0KQotICAgICAg
ICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmNvbnRlbnQuZGF0YUluUlRGRm9ybWF0LT5jcmVh
dGVOU0RhdGEoKSBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVJURl07CisgICAgICAgIFtyZXBy
ZXNlbnRhdGlvbnMgc2V0VmFsdWU6Y29udGVudC5kYXRhSW5SVEZGb3JtYXQtPmNyZWF0ZU5TRGF0
YSgpLmdldCgpIGZvcktleTooTlNTdHJpbmcgKilrVVRUeXBlUlRGXTsKICAgICBbcmVwcmVzZW50
YXRpb25zIHNldFZhbHVlOmNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0IGZvcktleTooTlNTdHJp
bmcgKilrVVRUeXBlVGV4dF07CiAgICAgW21fcGFzdGVib2FyZCBzZXRJdGVtczpAW3JlcHJlc2Vu
dGF0aW9ucy5nZXQoKV1dOwogfQpAQCAtMTY2LDcgKzE2OSw3IEBAIHZvaWQgUGxhdGZvcm1QYXN0
ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkSW1hZ2UmIHBhc3RlYm9hcmRJbWFnZSkKIHsK
ICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRv
cHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKICAgICBpZiAoIXBhc3Rl
Ym9hcmRJbWFnZS5yZXNvdXJjZU1JTUVUeXBlLmlzTnVsbCgpKSB7Ci0gICAgICAgIFtyZXByZXNl
bnRhdGlvbnMgc2V0T2JqZWN0OnBhc3RlYm9hcmRJbWFnZS5pbWFnZS0+ZGF0YSgpLT5jcmVhdGVO
U0RhdGEoKSBmb3JLZXk6cGFzdGVib2FyZEltYWdlLnJlc291cmNlTUlNRVR5cGVdOworICAgICAg
ICBbcmVwcmVzZW50YXRpb25zIHNldE9iamVjdDpwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2UtPmRhdGEo
KS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZm9yS2V5OnBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZU1J
TUVUeXBlXTsKICAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRPYmplY3Q6KE5TU3RyaW5nICop
cGFzdGVib2FyZEltYWdlLnVybC51cmwgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdOwog
ICAgIH0KICAgICBbbV9wYXN0ZWJvYXJkIHNldEl0ZW1zOkBbcmVwcmVzZW50YXRpb25zLmdldCgp
XV07CkBAIC0xNzcsNyArMTgwLDcgQEAgdm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICBSZXRh
aW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
RGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwogCiAgICAgaWYgKHBhc3RlYm9hcmRUeXBlID09IFN0
cmluZyhrVVRUeXBlVVJMKSkKLSAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTpbYWRv
cHROUyhbTlNVUkwgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHRdKS5nZXQoKSBmb3JLZXk6cGFz
dGVib2FyZFR5cGVdOworICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmFkb3B0TlMo
W1tOU1VSTCBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dF0pLmdldCgpIGZvcktleTpwYXN0ZWJv
YXJkVHlwZV07CiAgICAgZWxzZSBpZiAoIXBhc3RlYm9hcmRUeXBlLmlzTnVsbCgpKQogICAgICAg
ICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOnRleHQgZm9yS2V5OnBhc3RlYm9hcmRUeXBlXTsK
ICAgICBbbV9wYXN0ZWJvYXJkIHNldEl0ZW1zOkBbcmVwcmVzZW50YXRpb25zLmdldCgpXV07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TY3JlZW5JT1Mu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TY3JlZW5JT1MubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMmJmMjIxMGJjYTZlMDFkOTY5NTdmMjVhNDI0ZWIxM2EzNjdlNzZlNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVNjcmVlbklP
Uy5tbQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKKworI2ltcG9ydCAiRmxvYXRSZWN0Lmgi
CisjaW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQgIkludFJlY3QuaCIKKyNpbXBvcnQgIk5v
dEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJXQUtXaW5kb3cuaCIKKyNpbXBvcnQgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQgIldpZGdldC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2ludCBzY3JlZW5Ib3Jpem9udGFsRFBJKFdpZGdldCopCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHNjcmVlblZlcnRpY2FsRFBJKFdpZGdl
dCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHNj
cmVlbkRlcHRoKFdpZGdldCopCit7CisgICAgLy8gQXNzdW1lIDMyIGJpdHMgcGVyIHBpeGVsLiBT
ZWUgPHJkYXI6Ly9wcm9ibGVtLzkzNzg4Mjk+LgorICAgIHJldHVybiAzMjsKK30KKworaW50IHNj
cmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopCit7CisgICAgLy8gQXNzdW1lIHRoZSBzY3Jl
ZW4gZGVwdGggaXMgZXZlbmx5IGRpdmlkZWQgaW50byBmb3VyIGNvbG9yIGNvbXBvbmVudHMuIFNl
ZSA8cmRhcjovL3Byb2JsZW0vOTM3ODgyOT4uCisgICAgcmV0dXJuIHNjcmVlbkRlcHRoKDApIC8g
NDsKK30KKworYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KikKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKKy8vIFRoZXNlIGZ1bmN0aW9ucyBzY2FsZSBiZXR3ZWVuIHNjcmVlbiBhbmQg
cGFnZSBjb29yZGluYXRlcyBiZWNhdXNlIEphdmFTY3JpcHQvRE9NIG9wZXJhdGlvbnMgCisvLyBh
c3N1bWUgdGhhdCB0aGUgc2NyZWVuIGFuZCB0aGUgcGFnZSBzaGFyZSB0aGUgc2FtZSBjb29yZGlu
YXRlIHN5c3RlbS4KK0Zsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQoreworICAg
IGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKKyAgICBXQUtXaW5kb3cg
KndpbmRvdyA9IFt3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XTsKKyAgICBpZiAoIXdp
bmRvdykKKyAgICAgICAgcmV0dXJuIFt3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgZnJhbWVdOwor
ICAgIENHUmVjdCBzY3JlZW5SZWN0ID0geyBDR1BvaW50WmVybywgW3dpbmRvdyBzY3JlZW5TaXpl
XSB9OworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHNjcmVlblJlY3QpOworfQorCitGbG9h
dFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAoIXdp
ZGdldCkKKyAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CisgICAgV0FLV2luZG93ICp3aW5kb3cg
PSBbd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRvd107CisgICAgaWYgKCF3aW5kb3cpCisg
ICAgICAgIHJldHVybiBDR1JlY3RaZXJvOworICAgIENHUmVjdCBzY3JlZW5SZWN0ID0geyBDR1Bv
aW50WmVybywgW3dpbmRvdyBhdmFpbGFibGVTY3JlZW5TaXplXSB9OworICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KHNjcmVlblJlY3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXplcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVNwZWVj
aFN5bnRoZXNpemVySU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NDA1ZTc2NzZjMWRhZDdlOTNiYjcwZGQ2
ODVjNmMxNzgyMzBlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcklPUy5tbQpAQCAtMCwwICsxLDI3OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3BlZWNoU3ludGhlc2l6ZXIuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworI2lmIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgiCisj
aW5jbHVkZSAiU29mdExpbmtpbmcuaCIKKyNpbmNsdWRlIDxBVkZvdW5kYXRpb24vQVZTcGVlY2hT
eW50aGVzaXMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK1NPRlRfTElOS19GUkFN
RVdPUksoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZTcGVl
Y2hTeW50aGVzaXplcikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWU3BlZWNoVXR0
ZXJhbmNlKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZTcGVlY2hTeW50aGVzaXNW
b2ljZSkKKworU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91bmRhdGlvbiwgQVZTcGVlY2hVdHRlcmFu
Y2VEZWZhdWx0U3BlZWNoUmF0ZSwgZmxvYXQpCitTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0
aW9uLCBBVlNwZWVjaFV0dGVyYW5jZU1heGltdW1TcGVlY2hSYXRlLCBmbG9hdCkKKworI2RlZmlu
ZSBBVlNwZWVjaFV0dGVyYW5jZURlZmF1bHRTcGVlY2hSYXRlIGdldEFWU3BlZWNoVXR0ZXJhbmNl
RGVmYXVsdFNwZWVjaFJhdGUoKQorI2RlZmluZSBBVlNwZWVjaFV0dGVyYW5jZU1heGltdW1TcGVl
Y2hSYXRlIGdldEFWU3BlZWNoVXR0ZXJhbmNlTWF4aW11bVNwZWVjaFJhdGUoKQorCisjZGVmaW5l
IEFWU3BlZWNoU3ludGhlc2l6ZXJDbGFzcyBnZXRBVlNwZWVjaFN5bnRoZXNpemVyQ2xhc3MoKQor
I2RlZmluZSBBVlNwZWVjaFV0dGVyYW5jZUNsYXNzIGdldEFWU3BlZWNoVXR0ZXJhbmNlQ2xhc3Mo
KQorI2RlZmluZSBBVlNwZWVjaFN5bnRoZXNpc1ZvaWNlQ2xhc3MgZ2V0QVZTcGVlY2hTeW50aGVz
aXNWb2ljZUNsYXNzKCkKKworQGludGVyZmFjZSBXZWJTcGVlY2hTeW50aGVzaXNXcmFwcGVyIDog
TlNPYmplY3Q8QVZTcGVlY2hTeW50aGVzaXplckRlbGVnYXRlPgoreworICAgIFdlYkNvcmU6OlBs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIqIG1fc3ludGhlc2l6ZXJPYmplY3Q7CisgICAgLy8gSG9s
ZCBhIFJlZiB0byB0aGUgdXR0ZXJhbmNlIHNvIHRoYXQgaXQgd29uJ3QgZGlzYXBwZWFyIHVudGls
IHRoZSBzeW50aCBpcyBkb25lIHdpdGggaXQuCisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3Jt
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPiBtX3V0dGVyYW5jZTsKKyAgICAKKyAgICBSZXRhaW5Q
dHI8QVZTcGVlY2hTeW50aGVzaXplcj4gbV9zeW50aGVzaXplcjsKK30KKworLSAoV2ViU3BlZWNo
U3ludGhlc2lzV3JhcHBlciAqKWluaXRXaXRoU3BlZWNoU3ludGhlc2l6ZXI6KFdlYkNvcmU6OlBs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIqKXN5bnRoZXNpemVyOworLSAodm9pZClzcGVha1V0dGVy
YW5jZTooUGFzc1JlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZT4pdXR0ZXJhbmNlOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJTcGVlY2hTeW50aGVz
aXNXcmFwcGVyCisKKy0gKFdlYlNwZWVjaFN5bnRoZXNpc1dyYXBwZXIgKilpbml0V2l0aFNwZWVj
aFN5bnRoZXNpemVyOihXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyKilzeW50aGVz
aXplcgoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIAorICAgIG1fc3ludGhlc2l6ZXJPYmplY3QgPSBzeW50aGVzaXplcjsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAoZmxvYXQpbWFwU3BlZWNoUmF0ZVRvUGxhdGZvcm1SYXRlOihm
bG9hdClyYXRlCit7CisgICAgLy8gV2ViU3BlZWNoIHNheXMgdG8gZ28gZnJvbSAuMSAtPiAxMCAo
ZGVmYXVsdCAxKQorICAgIC8vIEFWU3BlZWNoU3ludGhlc2l6ZXIgYXNrcyBmb3IgMCAtPiAxIChk
ZWZhdWx0LiA1KQorICAgIGlmIChyYXRlIDwgMSkKKyAgICAgICAgcmF0ZSAqPSBBVlNwZWVjaFV0
dGVyYW5jZURlZmF1bHRTcGVlY2hSYXRlOworICAgIGVsc2UKKyAgICAgICAgcmF0ZSA9IEFWU3Bl
ZWNoVXR0ZXJhbmNlRGVmYXVsdFNwZWVjaFJhdGUgKyAoKHJhdGUgLSAxKSAqIChBVlNwZWVjaFV0
dGVyYW5jZU1heGltdW1TcGVlY2hSYXRlIC0gQVZTcGVlY2hVdHRlcmFuY2VEZWZhdWx0U3BlZWNo
UmF0ZSkpOworICAgIAorICAgIHJldHVybiByYXRlOworfQorCistICh2b2lkKXNwZWFrVXR0ZXJh
bmNlOihQYXNzUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNl
Pil1dHRlcmFuY2UKK3sKKyAgICAvLyBXaGVuIHNwZWFrIGlzIGNhbGxlZCB3ZSBzaG91bGQgbm90
IGhhdmUgYW4gZXhpc3Rpbmcgc3BlZWNoIHV0dGVyYW5jZSBvdXRzdGFuZGluZy4KKyAgICBBU1NF
UlQoIW1fdXR0ZXJhbmNlKTsKKyAgICBBU1NFUlQodXR0ZXJhbmNlKTsKKyAgICAKKyAgICBpZiAo
IXV0dGVyYW5jZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghbV9zeW50aGVzaXpl
cikgeworICAgICAgICBtX3N5bnRoZXNpemVyID0gYWRvcHROUyhbW0FWU3BlZWNoU3ludGhlc2l6
ZXJDbGFzcyBhbGxvY10gaW5pdF0pOworICAgICAgICBbbV9zeW50aGVzaXplciBzZXREZWxlZ2F0
ZTpzZWxmXTsKKyAgICB9CisKKyAgICAvLyBDaG9vc2UgdGhlIGJlc3Qgdm9pY2UsIGJ5IGZpcnN0
IGxvb2tpbmcgYXQgdGhlIHV0dGVyYW5jZSB2b2ljZSwgdGhlbiB0aGUgdXR0ZXJhbmNlIGxhbmd1
YWdlLAorICAgIC8vIHRoZW4gY2hvb3NlIHRoZSBkZWZhdWx0IGxhbmd1YWdlLgorICAgIFdlYkNv
cmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UqIHV0dGVyYW5jZVZvaWNlID0gdXR0ZXJh
bmNlLT52b2ljZSgpOworICAgIE5TU3RyaW5nICp2b2ljZUxhbmd1YWdlID0gbmlsOworICAgIGlm
ICghdXR0ZXJhbmNlVm9pY2UpIHsKKyAgICAgICAgaWYgKHV0dGVyYW5jZS0+bGFuZygpLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHZvaWNlTGFuZ3VhZ2UgPSBbQVZTcGVlY2hTeW50aGVzaXNWb2lj
ZUNsYXNzIGN1cnJlbnRMYW5ndWFnZUNvZGVdOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2
b2ljZUxhbmd1YWdlID0gdXR0ZXJhbmNlLT5sYW5nKCk7CisgICAgfSBlbHNlCisgICAgICAgIHZv
aWNlTGFuZ3VhZ2UgPSB1dHRlcmFuY2UtPnZvaWNlKCktPmxhbmcoKTsKKyAgICAKKyAgICBBVlNw
ZWVjaFN5bnRoZXNpc1ZvaWNlICphdlZvaWNlID0gbmlsOworICAgIGlmICh2b2ljZUxhbmd1YWdl
KQorICAgICAgICBhdlZvaWNlID0gW0FWU3BlZWNoU3ludGhlc2lzVm9pY2VDbGFzcyB2b2ljZVdp
dGhMYW5ndWFnZTp2b2ljZUxhbmd1YWdlXTsKKworICAgIEFWU3BlZWNoVXR0ZXJhbmNlICphdlV0
dGVyYW5jZSA9IFtBVlNwZWVjaFV0dGVyYW5jZUNsYXNzIHNwZWVjaFV0dGVyYW5jZVdpdGhTdHJp
bmc6dXR0ZXJhbmNlLT50ZXh0KCldOworCisgICAgW2F2VXR0ZXJhbmNlIHNldFJhdGU6W3NlbGYg
bWFwU3BlZWNoUmF0ZVRvUGxhdGZvcm1SYXRlOnV0dGVyYW5jZS0+cmF0ZSgpXV07CisgICAgW2F2
VXR0ZXJhbmNlIHNldFZvbHVtZTp1dHRlcmFuY2UtPnZvbHVtZSgpXTsKKyAgICBbYXZVdHRlcmFu
Y2Ugc2V0UGl0Y2hNdWx0aXBsaWVyOnV0dGVyYW5jZS0+cGl0Y2goKV07CisgICAgW2F2VXR0ZXJh
bmNlIHNldFZvaWNlOmF2Vm9pY2VdOworICAgIG1fdXR0ZXJhbmNlID0gdXR0ZXJhbmNlOworICAg
IAorICAgIFttX3N5bnRoZXNpemVyIHNwZWFrVXR0ZXJhbmNlOmF2VXR0ZXJhbmNlXTsKK30KKwor
LSAodm9pZClwYXVzZQoreworICAgIGlmICghbV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBbbV9zeW50aGVzaXplciBwYXVzZVNwZWFraW5nQXRCb3VuZGFyeTpBVlNwZWVj
aEJvdW5kYXJ5SW1tZWRpYXRlXTsKK30KKworLSAodm9pZClyZXN1bWUKK3sKKyAgICBpZiAoIW1f
dXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgW21fc3ludGhlc2l6ZXIgY29u
dGludWVTcGVha2luZ107Cit9CisKKy0gKHZvaWQpY2FuY2VsCit7CisgICAgaWYgKCFtX3V0dGVy
YW5jZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFttX3N5bnRoZXNpemVyIHN0b3BTcGVh
a2luZ0F0Qm91bmRhcnk6QVZTcGVlY2hCb3VuZGFyeUltbWVkaWF0ZV07Cit9CisKKy0gKHZvaWQp
c3BlZWNoU3ludGhlc2l6ZXI6KEFWU3BlZWNoU3ludGhlc2l6ZXIgKilzeW50aGVzaXplciBkaWRT
dGFydFNwZWVjaFV0dGVyYW5jZTooQVZTcGVlY2hVdHRlcmFuY2UgKil1dHRlcmFuY2UKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3ludGhlc2l6ZXIpOworICAgIFVOVVNFRF9QQVJBTSh1dHRlcmFuY2Up
OworICAgIGlmICghbV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX3N5
bnRoZXNpemVyT2JqZWN0LT5jbGllbnQoKS0+ZGlkU3RhcnRTcGVha2luZyhtX3V0dGVyYW5jZSk7
Cit9CisKKy0gKHZvaWQpc3BlZWNoU3ludGhlc2l6ZXI6KEFWU3BlZWNoU3ludGhlc2l6ZXIgKilz
eW50aGVzaXplciBkaWRGaW5pc2hTcGVlY2hVdHRlcmFuY2U6KEFWU3BlZWNoVXR0ZXJhbmNlICop
dXR0ZXJhbmNlCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bnRoZXNpemVyKTsKKyAgICBVTlVTRURf
UEFSQU0odXR0ZXJhbmNlKTsKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgLy8gQ2xlYXIgdGhlIG1fdXR0ZXJhbmNlIHZhcmlhYmxlIGluIGNhc2UgZmlu
aXNoIHNwZWFraW5nIGtpY2tzIG9mZiBhIG5ldyBzcGVha2luZyBqb2IgaW1tZWRpYXRlbHkuCisg
ICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPiBwbGF0
Zm9ybVV0dGVyYW5jZSA9IG1fdXR0ZXJhbmNlOworICAgIG1fdXR0ZXJhbmNlID0gMDsKKyAgICAK
KyAgICBtX3N5bnRoZXNpemVyT2JqZWN0LT5jbGllbnQoKS0+ZGlkRmluaXNoU3BlYWtpbmcocGxh
dGZvcm1VdHRlcmFuY2UpOworfQorCistICh2b2lkKXNwZWVjaFN5bnRoZXNpemVyOihBVlNwZWVj
aFN5bnRoZXNpemVyICopc3ludGhlc2l6ZXIgZGlkUGF1c2VTcGVlY2hVdHRlcmFuY2U6KEFWU3Bl
ZWNoVXR0ZXJhbmNlICopdXR0ZXJhbmNlCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bnRoZXNpemVy
KTsKKyAgICBVTlVTRURfUEFSQU0odXR0ZXJhbmNlKTsKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zeW50aGVzaXplck9iamVjdC0+Y2xpZW50KCkt
PmRpZFBhdXNlU3BlYWtpbmcobV91dHRlcmFuY2UpOworfQorCistICh2b2lkKXNwZWVjaFN5bnRo
ZXNpemVyOihBVlNwZWVjaFN5bnRoZXNpemVyICopc3ludGhlc2l6ZXIgZGlkQ29udGludWVTcGVl
Y2hVdHRlcmFuY2U6KEFWU3BlZWNoVXR0ZXJhbmNlICopdXR0ZXJhbmNlCit7CisgICAgVU5VU0VE
X1BBUkFNKHN5bnRoZXNpemVyKTsKKyAgICBVTlVTRURfUEFSQU0odXR0ZXJhbmNlKTsKKyAgICBp
ZiAoIW1fdXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zeW50aGVzaXpl
ck9iamVjdC0+Y2xpZW50KCktPmRpZFJlc3VtZVNwZWFraW5nKG1fdXR0ZXJhbmNlKTsKK30KKwor
LSAodm9pZClzcGVlY2hTeW50aGVzaXplcjooQVZTcGVlY2hTeW50aGVzaXplciAqKXN5bnRoZXNp
emVyIGRpZENhbmNlbFNwZWVjaFV0dGVyYW5jZTooQVZTcGVlY2hVdHRlcmFuY2UgKil1dHRlcmFu
Y2UKK3sKKyAgICBVTlVTRURfUEFSQU0oc3ludGhlc2l6ZXIpOworICAgIFVOVVNFRF9QQVJBTSh1
dHRlcmFuY2UpOworICAgIGlmICghbV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICAvLyBDbGVhciB0aGUgbV91dHRlcmFuY2UgdmFyaWFibGUgaW4gY2FzZSBmaW5pc2ggc3Bl
YWtpbmcga2lja3Mgb2ZmIGEgbmV3IHNwZWFraW5nIGpvYiBpbW1lZGlhdGVseS4KKyAgICBSZWZQ
dHI8V2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U+IHBsYXRmb3JtVXR0
ZXJhbmNlID0gbV91dHRlcmFuY2U7CisgICAgbV91dHRlcmFuY2UgPSAwOworICAgIAorICAgIG1f
c3ludGhlc2l6ZXJPYmplY3QtPmNsaWVudCgpLT5kaWRGaW5pc2hTcGVha2luZyhwbGF0Zm9ybVV0
dGVyYW5jZSk7Cit9CisKKy0gKHZvaWQpc3BlZWNoU3ludGhlc2l6ZXI6KEFWU3BlZWNoU3ludGhl
c2l6ZXIgKilzeW50aGVzaXplciB3aWxsU3BlYWtSYW5nZU9mU3BlZWNoU3RyaW5nOihOU1Jhbmdl
KWNoYXJhY3RlclJhbmdlIHV0dGVyYW5jZTooQVZTcGVlY2hVdHRlcmFuY2UgKil1dHRlcmFuY2UK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3ludGhlc2l6ZXIpOworICAgIFVOVVNFRF9QQVJBTSh1dHRl
cmFuY2UpOworICAgIAorICAgIGlmICghbV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICAvLyBpT1Mgb25seSBzdXBwb3J0cyB3b3JkIGJvdW5kYXJpZXMuCisgICAgbV9zeW50
aGVzaXplck9iamVjdC0+Y2xpZW50KCktPmJvdW5kYXJ5RXZlbnRPY2N1cnJlZChtX3V0dGVyYW5j
ZSwgV2ViQ29yZTo6U3BlZWNoV29yZEJvdW5kYXJ5LCBjaGFyYWN0ZXJSYW5nZS5sb2NhdGlvbik7
Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVyOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyKFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6
ZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fc3BlZWNoU3ludGhlc2l6ZXJDbGllbnQoY2xpZW50
KQoreworfQorCitQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjp+UGxhdGZvcm1TcGVlY2hTeW50
aGVzaXplcigpCit7Cit9CisKK3ZvaWQgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcjo6aW5pdGlh
bGl6ZVZvaWNlTGlzdCgpCit7CisgICAgZm9yIChBVlNwZWVjaFN5bnRoZXNpc1ZvaWNlICp2b2lj
ZSBpbiBbQVZTcGVlY2hTeW50aGVzaXNWb2ljZUNsYXNzIHNwZWVjaFZvaWNlc10pIHsKKyAgICAg
ICAgLy8gaU9TIFNwZWVjaCB2b2ljZXMgb25seSBleHBvc2UgdGhlaXIgbGFuZ3VhZ2UgYXMgYW4g
aWRlbnRpZnlpbmcgYXNwZWN0LgorICAgICAgICBOU1N0cmluZyAqbGFuZ3VhZ2UgPSBbdm9pY2Ug
bGFuZ3VhZ2VdOworICAgICAgICBOU1N0cmluZyAqdm9pY2VVUkkgPSBsYW5ndWFnZTsKKyAgICAg
ICAgTlNTdHJpbmcgKm5hbWUgPSBsYW5ndWFnZTsKKyAgICAgICAgYm9vbCBpc0RlZmF1bHQgPSB0
cnVlOworICAgICAgICAKKyAgICAgICAgbV92b2ljZUxpc3QuYXBwZW5kKFBsYXRmb3JtU3BlZWNo
U3ludGhlc2lzVm9pY2U6OmNyZWF0ZSh2b2ljZVVSSSwgbmFtZSwgbGFuZ3VhZ2UsIHRydWUsIGlz
RGVmYXVsdCkpOworICAgIH0KK30KKwordm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpw
YXVzZSgpCit7CisgICAgW21fcGxhdGZvcm1TcGVlY2hXcmFwcGVyLmdldCgpIHBhdXNlXTsKK30K
Kwordm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpyZXN1bWUoKQoreworICAgIFttX3Bs
YXRmb3JtU3BlZWNoV3JhcHBlci5nZXQoKSByZXN1bWVdOworfQorCit2b2lkIFBsYXRmb3JtU3Bl
ZWNoU3ludGhlc2l6ZXI6OnNwZWFrKFBhc3NSZWZQdHI8UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2U+IHV0dGVyYW5jZSkKK3sKKyAgICBpZiAoIW1fcGxhdGZvcm1TcGVlY2hXcmFwcGVy
KQorICAgICAgICBtX3BsYXRmb3JtU3BlZWNoV3JhcHBlciA9IGFkb3B0TlMoW1tXZWJTcGVlY2hT
eW50aGVzaXNXcmFwcGVyIGFsbG9jXSBpbml0V2l0aFNwZWVjaFN5bnRoZXNpemVyOnRoaXNdKTsK
KyAgICAKKyAgICBbbV9wbGF0Zm9ybVNwZWVjaFdyYXBwZXIuZ2V0KCkgc3BlYWtVdHRlcmFuY2U6
dXR0ZXJhbmNlLmdldCgpXTsKK30KKwordm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpj
YW5jZWwoKQoreworICAgIFttX3BsYXRmb3JtU3BlZWNoV3JhcHBlci5nZXQoKSBjYW5jZWxdOwor
fQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUVD
SF9TWU5USEVTSVMpCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU1NMS2V5R2VuZXJhdG9ySU9TLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9TU0xLZXlHZW5lcmF0b3JJT1MuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0
Y2NlMzdjOWU3Yzk3ZGU1MDJhZDJkYzQ3YWI4MGQ3N2FhN2UxMGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU1NMS2V5R2VuZXJhdG9ySU9TLmNwcApAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNTTEtleUdlbmVyYXRvci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgZ2V0U3VwcG9ydGVkS2V5U2l6ZXMoVmVjdG9yPFN0cmluZz4m
KQoreworfQorCitTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2ln
bmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nJiBjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IFVS
TCYpCit7CisgICAgVU5VU0VEX1BBUkFNKGtleVNpemVJbmRleCk7CisgICAgVU5VU0VEX1BBUkFN
KGNoYWxsZW5nZVN0cmluZyk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Ny
b2xsQW5pbWF0b3JJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmlt
YXRvcklPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwZDE5N2IzMDE2ZGE4YjJkNTU2ZDgzZWU1MjU5YzU4NTgw
ZDY5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Ny
b2xsQW5pbWF0b3JJT1MuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBT
Y3JvbGxBbmltYXRvcklPU19oCisjZGVmaW5lIFNjcm9sbEFuaW1hdG9ySU9TX2gKKworI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtVG91Y2hFdmVudDsKKworY2xhc3MgU2Nyb2xs
QW5pbWF0b3JJT1MgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgeworcHVibGljOgorICAgIFNjcm9s
bEFuaW1hdG9ySU9TKFNjcm9sbGFibGVBcmVhKik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0
b3JJT1MoKTsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdmlydHVhbCBib29sIGhh
bmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgT1ZFUlJJREU7CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGRldGVybWluZVNjcm9sbGFibGVBcmVhRm9yVG91Y2hT
ZXF1ZW5jZShjb25zdCBJbnRTaXplJiB0b3VjaERlbHRhKTsKKworICAgIC8vIFN0YXRlIGZvciBo
YW5kbGluZyBzZXF1ZW5jZXMgb2YgdG91Y2hlcyBpbiBkZWZhdWx0VG91Y2hFdmVudEhhbmRsZXIu
CisgICAgZW51bSBBeGlzTGF0Y2ggeworICAgICAgICBBeGlzTGF0Y2hOb3RDb21wdXRlZCwKKyAg
ICAgICAgQXhpc0xhdGNoTm9uZSwKKyAgICAgICAgQXhpc0xhdGNoSG9yaXpvbnRhbCwKKyAgICAg
ICAgQXhpc0xhdGNoVmVydGljYWwKKyAgICB9OworICAgIEF4aXNMYXRjaCBtX3RvdWNoU2Nyb2xs
QXhpc0xhdGNoOworICAgIGJvb2wgbV9pblRvdWNoU2VxdWVuY2U7CisgICAgYm9vbCBtX2NvbW1p
dHRlZFRvU2Nyb2xsQXhpczsKKyAgICBib29sIG1fc3RhcnRlZFNjcm9sbDsKKyAgICBJbnRQb2lu
dCBtX2ZpcnN0VG91Y2hQb2ludDsKKyAgICBJbnRQb2ludCBtX2xhc3RUb3VjaFBvaW50OworCisg
ICAgLy8gV2hlbiB3ZSdyZSBpbiBhIHRvdWNoIHNlcXVlbmNlLCB0aGlzIHdpbGwgcG9pbnQgdG8g
dGhlIHNjcm9sbGFibGUgYXJlYSB0aGF0CisgICAgLy8gc2hvdWxkIGFjdHVhbGx5IGJlIHNjcm9s
bGVkIGR1cmluZyB0aGUgc2VxdWVuY2UuCisgICAgU2Nyb2xsYWJsZUFyZWEqIG1fc2Nyb2xsYWJs
ZUFyZWFGb3JUb3VjaFNlcXVlbmNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gU2Nyb2xsQW5pbWF0b3JJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhZjUyMTI4YTUzYWQ3MTAw
MGE3MGQwZDE2YzM4YjQ3YjUxNDBlNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0KQEAgLTAsMCArMSwxODQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JJ
T1MuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtVG91Y2hFdmVudElPUy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3du
UHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVh
KiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1h
dG9ySU9TKHNjcm9sbGFibGVBcmVhKSk7Cit9CisKK1Njcm9sbEFuaW1hdG9ySU9TOjpTY3JvbGxB
bmltYXRvcklPUyhTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCisgICAgOiBTY3JvbGxB
bmltYXRvcihzY3JvbGxhYmxlQXJlYSkKKyAgICAsIG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2goQXhp
c0xhdGNoTm90Q29tcHV0ZWQpCisgICAgLCBtX2luVG91Y2hTZXF1ZW5jZShmYWxzZSkKKyAgICAs
IG1fY29tbWl0dGVkVG9TY3JvbGxBeGlzKGZhbHNlKQorICAgICwgbV9zdGFydGVkU2Nyb2xsKGZh
bHNlKQorICAgICwgbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UoMCkKK3sKK30KKwor
U2Nyb2xsQW5pbWF0b3JJT1M6On5TY3JvbGxBbmltYXRvcklPUygpCit7Cit9CisKK2Jvb2wgU2Ny
b2xsQW5pbWF0b3JJT1M6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50
JiB0b3VjaEV2ZW50KQoreworICAgIGlmICh0b3VjaEV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2
ZW50OjpUb3VjaFN0YXJ0ICYmIHRvdWNoRXZlbnQudG91Y2hDb3VudCgpID09IDEpIHsKKyAgICAg
ICAgbV9maXJzdFRvdWNoUG9pbnQgPSB0b3VjaEV2ZW50LnRvdWNoTG9jYXRpb25BdEluZGV4KDAp
OworICAgICAgICBtX2xhc3RUb3VjaFBvaW50ID0gbV9maXJzdFRvdWNoUG9pbnQ7CisgICAgICAg
IG1faW5Ub3VjaFNlcXVlbmNlID0gdHJ1ZTsKKyAgICAgICAgbV9jb21taXR0ZWRUb1Njcm9sbEF4
aXMgPSBmYWxzZTsKKyAgICAgICAgbV9zdGFydGVkU2Nyb2xsID0gZmFsc2U7CisgICAgICAgIG1f
dG91Y2hTY3JvbGxBeGlzTGF0Y2ggPSBBeGlzTGF0Y2hOb3RDb21wdXRlZDsKKyAgICAgICAgLy8g
TmV2ZXIgY2xhaW0gdG8gaGF2ZSBoYW5kbGVkIHRoZSBUb3VjaFN0YXJ0LCBiZWNhdXNlIHRoYXQg
d2lsbCBraWxsIGRlZmF1bHQgc2Nyb2xsaW5nIGJlaGF2aW9yLgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFtX2luVG91Y2hTZXF1ZW5jZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKHRvdWNoRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6OlRv
dWNoRW5kIHx8IHRvdWNoRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6OlRvdWNoQ2FuY2Vs
KSB7CisgICAgICAgIG1faW5Ub3VjaFNlcXVlbmNlID0gZmFsc2U7CisgICAgICAgIG1fc2Nyb2xs
YWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlID0gMDsKKyAgICAgICAgaWYgKG1fc3RhcnRlZFNjcm9s
bCkKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhKCktPmRpZEVuZFNjcm9sbCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgYSBzZWNvbmQgdG91Y2ggYXBwZWFy
cywgYXNzdW1lIHRoYXQgdGhlIHVzZXIgaXMgdHJ5aW5nIHRvIHpvb20sIGFuZCBiYWlsIG9uIHRo
ZSBzY3JvbGxpbmcgc2VxdWVuY2UuCisgICAgLy8gRklYTUU6IGlmIHRoYXQgc2Vjb25kIHRvdWNo
IGlzIGluc2lkZSB0aGUgc2Nyb2xsYWJsZSBhcmVhLCBzaG91bGQgd2Uga2VlcCBzY3JvbGxpbmc/
CisgICAgaWYgKHRvdWNoRXZlbnQudG91Y2hDb3VudCgpICE9IDEpIHsKKyAgICAgICAgbV9pblRv
dWNoU2VxdWVuY2UgPSBmYWxzZTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2Vx
dWVuY2UgPSAwOworICAgICAgICBpZiAobV9zdGFydGVkU2Nyb2xsKQorICAgICAgICAgICAgc2Ny
b2xsYWJsZUFyZWEoKS0+ZGlkRW5kU2Nyb2xsKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgCisgICAgSW50UG9pbnQgY3VycmVudFBvaW50ID0gdG91Y2hFdmVudC50b3VjaExv
Y2F0aW9uQXRJbmRleCgwKTsKKworICAgIEludFNpemUgdG91Y2hEZWx0YSA9IG1fbGFzdFRvdWNo
UG9pbnQgLSBjdXJyZW50UG9pbnQ7CisgICAgbV9sYXN0VG91Y2hQb2ludCA9IGN1cnJlbnRQb2lu
dDsKKworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UpCisgICAgICAg
IGRldGVybWluZVNjcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZSh0b3VjaERlbHRhKTsKKwor
ICAgIGlmICghbV9jb21taXR0ZWRUb1Njcm9sbEF4aXMpIHsKKyAgICAgICAgYm9vbCBob3Jpem9u
dGFsbHlTY3JvbGxhYmxlID0gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShIb3Jpem9udGFs
U2Nyb2xsYmFyKTsKKyAgICAgICAgYm9vbCB2ZXJ0aWNhbGx5U2Nyb2xsYWJsZSA9IG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbFNpemUoVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgICAgIGlmICgh
aG9yaXpvbnRhbGx5U2Nyb2xsYWJsZSAmJiAhdmVydGljYWxseVNjcm9sbGFibGUpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgSW50U2l6ZSBkZWx0YUZyb21TdGFydCA9IG1f
Zmlyc3RUb3VjaFBvaW50IC0gY3VycmVudFBvaW50OworICAgIAorICAgICAgICBjb25zdCBpbnQg
bGF0Y2hBeGlzTW92ZW1lbnRUaHJlc2hvbGQgPSAxMDsKKyAgICAgICAgaWYgKCFob3Jpem9udGFs
bHlTY3JvbGxhYmxlICYmIHZlcnRpY2FsbHlTY3JvbGxhYmxlKSB7CisgICAgICAgICAgICBtX3Rv
dWNoU2Nyb2xsQXhpc0xhdGNoID0gQXhpc0xhdGNoVmVydGljYWw7CisgICAgICAgICAgICBpZiAo
YWJzKGRlbHRhRnJvbVN0YXJ0LmhlaWdodCgpKSA+PSBsYXRjaEF4aXNNb3ZlbWVudFRocmVzaG9s
ZCkKKyAgICAgICAgICAgICAgICBtX2NvbW1pdHRlZFRvU2Nyb2xsQXhpcyA9IHRydWU7CisgICAg
ICAgIH0gZWxzZSBpZiAoaG9yaXpvbnRhbGx5U2Nyb2xsYWJsZSAmJiAhdmVydGljYWxseVNjcm9s
bGFibGUpIHsKKyAgICAgICAgICAgIG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2ggPSBBeGlzTGF0Y2hI
b3Jpem9udGFsOworICAgICAgICAgICAgaWYgKGFicyhkZWx0YUZyb21TdGFydC53aWR0aCgpKSA+
PSBsYXRjaEF4aXNNb3ZlbWVudFRocmVzaG9sZCkKKyAgICAgICAgICAgICAgICBtX2NvbW1pdHRl
ZFRvU2Nyb2xsQXhpcyA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Nv
bW1pdHRlZFRvU2Nyb2xsQXhpcyA9IHRydWU7CisKKyAgICAgICAgICAgIGlmIChtX3RvdWNoU2Ny
b2xsQXhpc0xhdGNoID09IEF4aXNMYXRjaE5vdENvbXB1dGVkKSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgZmxvYXQgbG9ja0FuZ2xlRGVncmVlcyA9IDIwOworICAgICAgICAgICAgICAgIGlmIChk
ZWx0YUZyb21TdGFydC53aWR0aCgpICYmIGRlbHRhRnJvbVN0YXJ0LmhlaWdodCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IGRyYWdBbmdsZSA9IGF0YW5mKGZhYnNmKGRlbHRhRnJvbVN0
YXJ0LmhlaWdodCgpKSAvIGZhYnNmKGRlbHRhRnJvbVN0YXJ0LndpZHRoKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGRyYWdBbmdsZSA8PSBkZWcycmFkKGxvY2tBbmdsZURlZ3JlZXMpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbV90b3VjaFNjcm9sbEF4aXNMYXRjaCA9IEF4aXNMYXRj
aEhvcml6b250YWw7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRyYWdBbmdsZSA+PSBk
ZWcycmFkKDkwIC0gbG9ja0FuZ2xlRGVncmVlcykpCisgICAgICAgICAgICAgICAgICAgICAgICBt
X3RvdWNoU2Nyb2xsQXhpc0xhdGNoID0gQXhpc0xhdGNoVmVydGljYWw7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW1f
Y29tbWl0dGVkVG9TY3JvbGxBeGlzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIAorICAgIC8vIEhvcml6b250YWwKKyAg
ICBpZiAobV90b3VjaFNjcm9sbEF4aXNMYXRjaCAhPSBBeGlzTGF0Y2hWZXJ0aWNhbCkgeworICAg
ICAgICBpbnQgZGVsdGEgPSB0b3VjaERlbHRhLndpZHRoKCk7CisgICAgICAgIGhhbmRsZWQgfD0g
bV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UtPnNjcm9sbChkZWx0YSA8IDAgPyBTY3Jv
bGxMZWZ0IDogU2Nyb2xsUmlnaHQsIFNjcm9sbEJ5UGl4ZWwsIGZhYnNmKGRlbHRhKSk7CisgICAg
fQorICAgIAorICAgIC8vIFZlcnRpY2FsCisgICAgaWYgKG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2gg
IT0gQXhpc0xhdGNoSG9yaXpvbnRhbCkgeworICAgICAgICBpbnQgZGVsdGEgPSB0b3VjaERlbHRh
LmhlaWdodCgpOworICAgICAgICBoYW5kbGVkIHw9IG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNl
cXVlbmNlLT5zY3JvbGwoZGVsdGEgPCAwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxC
eVBpeGVsLCBmYWJzZihkZWx0YSkpOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm4gZmFsc2Ug
dW50aWwgd2UgbWFuYWdlIHRvIHNjcm9sbCBhdCBhbGwsIGFuZCB0aGVuIGtlZXAgcmV0dXJuaW5n
IHRydWUgdW50aWwgdGhlIGdlc3R1cmUgZW5kcy4KKyAgICBpZiAoIW1fc3RhcnRlZFNjcm9sbCkg
eworICAgICAgICBpZiAoIWhhbmRsZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIG1fc3RhcnRlZFNjcm9sbCA9IHRydWU7CisgICAgICAgIHNjcm9sbGFibGVBcmVhKCktPmRp
ZFN0YXJ0U2Nyb2xsKCk7CisgICAgfSBlbHNlIGlmIChoYW5kbGVkKQorICAgICAgICBzY3JvbGxh
YmxlQXJlYSgpLT5kaWRVcGRhdGVTY3JvbGwoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRvcklPUzo6ZGV0ZXJtaW5lU2Nyb2xsYWJsZUFyZWFGb3JUb3Vj
aFNlcXVlbmNlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIEFTU0VSVCghbV9z
Y3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UpOworCisgICAgU2Nyb2xsYWJsZUFyZWEqIHNj
cm9sbGFibGVBcmVhID0gbV9zY3JvbGxhYmxlQXJlYTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICBpZiAoIXNjcm9sbGFibGVBcmVhLT5pc1Bpbm5lZEluQm90aERpcmVjdGlvbnMoc2Nyb2xs
RGVsdGEpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWEqIGVu
Y2xvc2luZ0FyZWEgPSBzY3JvbGxhYmxlQXJlYS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKTsK
KyAgICAgICAgaWYgKCFlbmNsb3NpbmdBcmVhKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEgPSBlbmNsb3NpbmdBcmVhOworICAgIH0KKworICAgIEFTU0VSVChz
Y3JvbGxhYmxlQXJlYSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UgPSBz
Y3JvbGxhYmxlQXJlYTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbFZpZXdJT1MubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsVmlld0lPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMGIwYWQxMzJi
YjQzZWJmMTZkMGI3ZjE0YWQ5NWRhYTc3OWZhNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbFZpZXdJT1MubW0KQEAgLTAsMCArMSwyNzEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlNjcm9sbFZpZXcuaCIKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJG
bG9hdFJlY3QuaCIKKyNpbXBvcnQgIkludFJlY3QuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNp
bXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJXQUtBcHBLaXRTdHVicy5oIgorI2lt
cG9ydCAiV0FLQ2xpcFZpZXcuaCIKKyNpbXBvcnQgIldBS1Njcm9sbFZpZXcuaCIKKyNpbXBvcnQg
IldBS1ZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXQUtXaW5kb3cuaCIKKyNpbXBvcnQgIldLVmll
d1ByaXZhdGUuaCIKKyNpbXBvcnQgIldlYkNvcmVGcmFtZVZpZXcuaCIKKwordXNpbmcgbmFtZXNw
YWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgTlNTY3JvbGxWaWV3PFdl
YkNvcmVGcmFtZVNjcm9sbFZpZXc+ICpTY3JvbGxWaWV3OjpzY3JvbGxWaWV3KCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoIXBsYXRmb3JtV2lkZ2V0KCkgfHwgW3BsYXRmb3JtV2lkZ2V0KCkgaXNLaW5k
T2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pOworICAgIEFTU0VSVCghcGxhdGZvcm1XaWRn
ZXQoKSB8fCBbcGxhdGZvcm1XaWRnZXQoKSBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdl
YkNvcmVGcmFtZVNjcm9sbFZpZXcpXSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5TU2Nyb2xs
VmlldzxXZWJDb3JlRnJhbWVTY3JvbGxWaWV3PiAqPihwbGF0Zm9ybVdpZGdldCgpKTsKK30KKwor
TlNWaWV3ICpTY3JvbGxWaWV3Ojpkb2N1bWVudFZpZXcoKSBjb25zdAoreworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gW3Njcm9sbFZpZXcoKSBkb2N1bWVudFZp
ZXddOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIG5pbDsKK30K
Kwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUFkZENoaWxkKFdpZGdldCogY2hpbGQpCit7Cisg
ICAgQVNTRVJUKGNoaWxkICE9IHRoaXMpOworCisgICAgY2hpbGQtPmFkZFRvU3VwZXJ2aWV3KGRv
Y3VtZW50VmlldygpKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVJlbW92ZUNoaWxk
KFdpZGdldCogY2hpbGQpCit7CisgICAgY2hpbGQtPnJlbW92ZUZyb21TdXBlcnZpZXcoKTsKK30K
Kwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbGJhck1vZGVzKCkKK3sKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW3Njcm9sbFZpZXcoKSBzZXRTY3JvbGxp
bmdNb2RlczptX2hvcml6b250YWxTY3JvbGxiYXJNb2RlIHZlcnRpY2FsOm1fdmVydGljYWxTY3Jv
bGxiYXJNb2RlIGFuZExvY2s6Tk9dOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JvbGxiYXJNb2RlcyhTY3JvbGxiYXJNb2Rl
JiBob3Jpem9udGFsLCBTY3JvbGxiYXJNb2RlJiB2ZXJ0aWNhbCkgY29uc3QKK3sKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW3Njcm9sbFZpZXcoKSBzY3JvbGxpbmdNb2Rl
czomaG9yaXpvbnRhbCB2ZXJ0aWNhbDomdmVydGljYWxdOworICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRDYW5CbGl0T25TY3Jv
bGwoYm9vbCBjYW5CbGl0T25TY3JvbGwpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOworICAgIFtbc2Nyb2xsVmlldygpIGNvbnRlbnRWaWV3XSBzZXRDb3BpZXNPblNjcm9sbDpj
YW5CbGl0T25TY3JvbGxdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK2Jv
b2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1DYW5CbGl0T25TY3JvbGwoKSBjb25zdAoreworICAgIHJl
dHVybiBbW3Njcm9sbFZpZXcoKSBjb250ZW50Vmlld10gY29waWVzT25TY3JvbGxdOworfQorCitJ
bnRSZWN0IFNjcm9sbFZpZXc6OmFjdHVhbFZpc2libGVDb250ZW50UmVjdCgpIGNvbnN0Cit7Cisg
ICAgQ0dSZWN0IHIgPSBDR1JlY3RaZXJvOworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKKyAgICBXQUtTY3JvbGxWaWV3ICp2aWV3ID0gc3RhdGljX2Nhc3Q8V0FLU2Nyb2xsVmlldyAq
PihwbGF0Zm9ybVdpZGdldCgpKTsKKyAgICByID0gW3ZpZXcgYWN0dWFsRG9jdW1lbnRWaXNpYmxl
UmVjdF07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdChyKTsKK30KKworSW50UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlRXh0ZW50Q29u
dGVudFJlY3QoKSBjb25zdAoreworICAgIE5TU2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19jYXN0
PE5TU2Nyb2xsVmlldyAqPihwbGF0Zm9ybVdpZGdldCgpKTsKKworICAgIENHUmVjdCByID0gQ0dS
ZWN0WmVybzsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgaWYgKFt2aWV3
IGlzS2luZE9mQ2xhc3M6W05TU2Nyb2xsVmlldyBjbGFzc11dKQorICAgICAgICByID0gW3ZpZXcg
ZG9jdW1lbnRWaXNpYmxlRXh0ZW50XTsKKyAgICBlbHNlIGlmICh2aWV3KSB7CisgICAgICAgIHIu
b3JpZ2luID0gW3ZpZXcgdmlzaWJsZVJlY3RdLm9yaWdpbjsKKyAgICAgICAgci5zaXplID0gW3Zp
ZXcgYm91bmRzXS5zaXplOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBXZWJLaXQy
IG9uIGlPUyBkb2Vzbid0IGluZm9ybSB0aGUgV2ViUHJvY2VzcyBvZiB0aGUgZXhwb3NlZCBhcmVh
LgorICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50c1NpemUoKSk7Cisg
ICAgfQorCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdChyKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRBY3R1YWxTY3JvbGxQb3Np
dGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCit7CisgICAgTlNTY3JvbGxWaWV3ICp2aWV3
ID0gc3RhdGljX2Nhc3Q8TlNTY3JvbGxWaWV3ICo+KHBsYXRmb3JtV2lkZ2V0KCkpOworCisgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNz
OltOU1Njcm9sbFZpZXcgY2xhc3NdXSkKKyAgICAgICAgW3ZpZXcgc2V0QWN0dWFsU2Nyb2xsUG9z
aXRpb246cG9zaXRpb25dOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK0lu
dFJlY3QgU2Nyb2xsVmlldzo6cGxhdGZvcm1WaXNpYmxlQ29udGVudFJlY3QoYm9vbCBpbmNsdWRl
U2Nyb2xsYmFycykgY29uc3QKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cisg
ICAgaWYgKGluY2x1ZGVTY3JvbGxiYXJzKSB7CisgICAgICAgIGlmIChOU1ZpZXcqIGRvY3VtZW50
VmlldyA9IHRoaXMtPmRvY3VtZW50VmlldygpKQorICAgICAgICAgICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QoW2RvY3VtZW50VmlldyB2aXNpYmxlUmVjdF0pOworICAgIH0KKyAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdChbc2Nyb2xsVmlldygpIGRvY3VtZW50VmlzaWJsZVJlY3RdKTsKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisK
K0ludFNpemUgU2Nyb2xsVmlldzo6cGxhdGZvcm1WaXNpYmxlQ29udGVudFNpemUoYm9vbCBpbmNs
dWRlU2Nyb2xsYmFycykgY29uc3QKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisgICAgaWYgKGluY2x1ZGVTY3JvbGxiYXJzKSB7CisgICAgICAgIGlmIChOU1ZpZXcqIGRvY3Vt
ZW50VmlldyA9IHRoaXMtPmRvY3VtZW50VmlldygpKQorICAgICAgICAgICAgcmV0dXJuIEludFNp
emUoW2RvY3VtZW50VmlldyB2aXNpYmxlUmVjdF0uc2l6ZSk7CisgICAgfQorCisgICAgcmV0dXJu
IGV4cGFuZGVkSW50U2l6ZShGbG9hdFNpemUoW3Njcm9sbFZpZXcoKSBkb2N1bWVudFZpc2libGVS
ZWN0XS5zaXplKSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4g
SW50U2l6ZSgpOworfQorCitUaWxlQ2FjaGUqIFNjcm9sbFZpZXc6OnRpbGVDYWNoZSgpCit7Cisg
ICAgLy8gTWFrZSB0aWxlIGNhY2hlIHBvaW50ZXIgYXZhaWxhYmxlIHZpYSB0aGUgbWFpbiBmcmFt
ZSBvbmx5LiBUaWxlIGNhY2hlIGludGVyYWN0aW9uIHNob3VsZCBiZSBtYW5hZ2VkIGJ5CisgICAg
Ly8gdGhlIG1haW4gZnJhbWUgYW5kIHRoaXMgYXZvaWRzIGhhdmluZyB0byBhZGQgcGFyZW50IGNo
ZWNrcyB0byBhbGwgY2FsbCBzaXRlcy4KKyAgICBpZiAocGFyZW50KCkpCisgICAgICAgIHJldHVy
biAwOworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBXQUtTY3JvbGxWaWV3
ICp2aWV3ID0gc3RhdGljX2Nhc3Q8V0FLU2Nyb2xsVmlldyAqPihwbGF0Zm9ybVdpZGdldCgpKTsK
KyAgICByZXR1cm4gW1t2aWV3IHdpbmRvd10gdGlsZUNhY2hlXTsKKyAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0Q29udGVudHNT
aXplKCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgaW50IHcgPSBt
X2NvbnRlbnRzU2l6ZS53aWR0aCgpOworICAgIGludCBoID0gbV9jb250ZW50c1NpemUuaGVpZ2h0
KCk7CisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBMT0coRnJhbWVzLCAiJXAgJUAgYXQgdyAlZCBo
ICVkXG4iLCBkb2N1bWVudFZpZXcoKSwgWyhpZClbZG9jdW1lbnRWaWV3KCkgY2xhc3NdIGNsYXNz
TmFtZV0sIHcsIGgpOyAgICAgICAgICAgIAorI2Vsc2UKKyAgICBMT0coRnJhbWVzLCAiJXAgJUAg
YXQgdyAlZCBoICVkXG4iLCBkb2N1bWVudFZpZXcoKSwgTlNTdHJpbmdGcm9tQ2xhc3MoW2RvY3Vt
ZW50VmlldygpIGNsYXNzXSksIHcsIGgpOworI2VuZGlmCisgICAgTlNTaXplIHRlbXBTaXplID0g
eyBzdGF0aWNfY2FzdDxDR0Zsb2F0PihtYXgoMCwgdykpLCBzdGF0aWNfY2FzdDxDR0Zsb2F0Piht
YXgoMCwgaCkpIH07IC8vIHdvcmthcm91bmQgZm9yIDQyMTMzMTQKKyAgICBbZG9jdW1lbnRWaWV3
KCkgc2V0Qm91bmRzU2l6ZTp0ZW1wU2l6ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbGJhcnNTdXBwcmVzc2Vk
KGJvb2wgcmVwYWludE9uVW5zdXBwcmVzcykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgW3Njcm9sbFZpZXcoKSBzZXRTY3JvbGxCYXJzU3VwcHJlc3NlZDptX3Njcm9s
bGJhcnNTdXBwcmVzc2VkCisgICAgICAgICAgICAgICAgICAgICAgcmVwYWludE9uVW5zdXBwcmVz
czpyZXBhaW50T25VbnN1cHByZXNzXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
fQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50
UG9pbnQmIHNjcm9sbFBvaW50KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KyAgICBOU1BvaW50IGZsb2F0UG9pbnQgPSBzY3JvbGxQb2ludDsKKyAgICBOU1BvaW50IHRlbXBQ
b2ludCA9IHsgbWF4KC1bc2Nyb2xsVmlldygpIHNjcm9sbE9yaWdpbl0ueCwgZmxvYXRQb2ludC54
KSwgbWF4KC1bc2Nyb2xsVmlldygpIHNjcm9sbE9yaWdpbl0ueSwgZmxvYXRQb2ludC55KSB9OyAg
Ly8gRG9uJ3QgdXNlIE5TTWFrZVBvaW50IHRvIHdvcmsgYXJvdW5kIDQyMTMzMTQuCisgICAgW2Rv
Y3VtZW50VmlldygpIHNjcm9sbFBvaW50OnRlbXBQb2ludF07CisgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKK30KKworYm9vbCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcm9sbChTY3JvbGxE
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5KQoreworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBi
ZSBuaWNlIHRvIGltcGxlbWVudCB0aGlzIHNvIHRoYXQgYWxsIG9mIHRoZSBjb2RlIGluIFdlYkZy
YW1lVmlldyBjb3VsZCBnbyBhd2F5LgorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtUmVwYWludENvbnRlbnRSZWN0
YW5nbGUoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCAvKm5vdyovKQoreworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5TVmlldyAqdmlldyA9IGRvY3VtZW50Vmlldygp
OworCisgICAgW3ZpZXcgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OnJlY3RdOyAgICAKKyAgICAvLyBG
SVhNRTogSGFuZGxlICJub3ciLgorCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30K
KworLy8gIkNvbnRhaW5pbmcgV2luZG93IiBtZWFucyB0aGUgTlNXaW5kb3cncyBjb29yZCBzeXN0
ZW0sIHdoaWNoIGlzIG9yaWdpbiBsb3dlciBsZWZ0CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6cGxh
dGZvcm1Db250ZW50c1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIGlmIChOU1ZpZXcqIGRvY3VtZW50Vmll
dyA9IHRoaXMtPmRvY3VtZW50VmlldygpKSB7CisgICAgICAgIE5TUmVjdCB0ZW1wUmVjdCA9IHJl
Y3Q7CisgICAgICAgIHRlbXBSZWN0ID0gW2RvY3VtZW50VmlldyBjb252ZXJ0UmVjdDp0ZW1wUmVj
dCB0b1ZpZXc6bmlsXTsKKyAgICAgICAgdGVtcFJlY3Qub3JpZ2luID0gW1tkb2N1bWVudFZpZXcg
d2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOnRlbXBSZWN0Lm9yaWdpbl07CisgICAgICAgIHJl
dHVybiBlbmNsb3NpbmdJbnRSZWN0KHRlbXBSZWN0KTsKKyAgICB9CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCitJbnRQb2ludCBTY3Jv
bGxWaWV3OjpwbGF0Zm9ybVNjcmVlblRvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBj
b25zdAoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBpZiAoTlNWaWV3
KiBkb2N1bWVudFZpZXcgPSB0aGlzLT5kb2N1bWVudFZpZXcoKSkgeworICAgICAgICBOU1BvaW50
IHdpbmRvd0Nvb3JkID0gW1tkb2N1bWVudFZpZXcgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNl
OiBwb2ludF07CisgICAgICAgIHJldHVybiBJbnRQb2ludChbZG9jdW1lbnRWaWV3IGNvbnZlcnRQ
b2ludDp3aW5kb3dDb29yZCBmcm9tVmlldzpuaWxdKTsKKyAgICB9CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gSW50UG9pbnQoKTsKK30KKworYm9vbCBTY3JvbGxW
aWV3OjpwbGF0Zm9ybUlzT2Zmc2NyZWVuKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogRERLOiBT
Y3JvbGxWaWV3TWFjLm1tIGFsc28gY2hlY2tzOiAhW1twbGF0Zm9ybVdpZGdldCgpIHdpbmRvd10g
aXNWaXNpYmxlXQorICAgIC8vIGJ1dCAtW1dBS1dpbmRvdyBpc1Zpc2libGVdIGRvZXNuJ3QgZXhp
c3QuCisgICAgcmV0dXJuICFbcGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddOworfQorCit2b2lkIFNj
cm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhck92ZXJs
YXlTdHlsZSkKK3sKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbE9yaWdp
bihjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBib29sIHVwZGF0ZVBvc2l0aW9uQWxsLCBib29sIHVw
ZGF0ZVBvc2l0aW9uU3luY2hyb25vdXNseSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgW3Njcm9sbFZpZXcoKSBzZXRTY3JvbGxPcmlnaW46c3RhdGljX2Nhc3Q8Q0dQ
b2ludD4ob3JpZ2luKSB1cGRhdGVQb3NpdGlvbkF0QWxsOnVwZGF0ZVBvc2l0aW9uQWxsIGltbWVk
aWF0ZWx5OnVwZGF0ZVBvc2l0aW9uU3luY2hyb25vdXNseV07CisgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Njcm9sbGJhclRoZW1lSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Ny
b2xsYmFyVGhlbWVJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTgxNjJhODFmYWU5NGQ1YTVmY2M1NTg0MzA0
MjI2MTM2OTVlMTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Njcm9sbGJhclRoZW1lSU9TLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjcm9sbGJhclRoZW1lSU9T
X2gKKyNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVJT1NfaAorCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhl
bWVDb21wb3NpdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXJU
aGVtZUlPUyA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSB7CitwdWJsaWM6CisgICAg
U2Nyb2xsYmFyVGhlbWVJT1MoKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZUlPUygpOwor
CisgICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFy
U2Nyb2xsYmFyKSBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250
cm9sVGludHMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFs
IGRvdWJsZSBpbml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxheSgpIE9WRVJSSURFOworCisgICAgdmlydHVh
bCBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQoKSBjb25zdCBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVt
ZUNsaWVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFy
KFNjcm9sbGJhclRoZW1lQ2xpZW50KikgT1ZFUlJJREU7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCopIE9WRVJSSURFOwor
CisgICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50
KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBT
Y3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBib29sIHBhaW50aW5n
ID0gZmFsc2UpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3Ro
KFNjcm9sbGJhclRoZW1lQ2xpZW50KikgT1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCBib29s
IHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmKSBPVkVSUklERTsKKyAgICAKK3B1YmxpYzoKKyAgICB2b2lkIHByZWZlcmVu
Y2VzQ2hhbmdlZCgpOworfTsKKworfQorCisjZW5kaWYgLy8gU2Nyb2xsYmFyVGhlbWVJT1NfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbGJhclRoZW1lSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbGJhclRoZW1lSU9TLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmEzNzc0NTI0ZDFjODJiYmJkOTVmZjM3MzM4ZjQ5NzI0MGE5YzAwZmUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsYmFyVGhlbWVJ
T1MubW0KQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lSU9TLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRS
ZWN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xs
YmFyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbGJhclRoZW1lKiBT
Y3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTY3JvbGxiYXJUaGVtZUlPUz4gdGhlbWU7CisgICAgcmV0dXJuICZ0aGVtZS5nZXQoKTsKK30K
Kwordm9pZCBTY3JvbGxiYXJUaGVtZUlPUzo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqKQoreworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lSU9TOjp1bnJlZ2lzdGVyU2Ny
b2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KikKK3sKK30KKworU2Nyb2xsYmFyVGhlbWVJT1M6
OlNjcm9sbGJhclRoZW1lSU9TKCkKK3sKK30KKworU2Nyb2xsYmFyVGhlbWVJT1M6On5TY3JvbGxi
YXJUaGVtZUlPUygpCit7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVJT1M6OnByZWZlcmVuY2Vz
Q2hhbmdlZCgpCit7Cit9CisKK2ludCBTY3JvbGxiYXJUaGVtZUlPUzo6c2Nyb2xsYmFyVGhpY2tu
ZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplKQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUg
U2Nyb2xsYmFyVGhlbWVJT1M6OmluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpCit7CisgICAg
cmV0dXJuIDA7Cit9CisKK2RvdWJsZSBTY3JvbGxiYXJUaGVtZUlPUzo6YXV0b3Njcm9sbFRpbWVy
RGVsYXkoKQoreworICAgIHJldHVybiAwOworfQorICAgIAorU2Nyb2xsYmFyQnV0dG9uc1BsYWNl
bWVudCBTY3JvbGxiYXJUaGVtZUlPUzo6YnV0dG9uc1BsYWNlbWVudCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFNjcm9sbGJhckJ1dHRvbnNOb25lOworfQorCitib29sIFNjcm9sbGJhclRoZW1lSU9T
OjpoYXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50KikKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVJT1M6Omhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xp
ZW50KikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVJ
T1M6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwg
Ym9vbCAvKnBhaW50aW5nKi8pCit7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworSW50UmVj
dCBTY3JvbGxiYXJUaGVtZUlPUzo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sIC8qcGFpbnRpbmcqLykKK3sKKyAgICByZXR1cm4gSW50
UmVjdCgpOworfQorCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lSU9TOjp0cmFja1JlY3QoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqLCBib29sIC8qcGFpbnRpbmcqLykKK3sKKyAgICByZXR1cm4gSW50UmVj
dCgpOworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVJT1M6Om1pbmltdW1UaHVtYkxlbmd0aChTY3Jv
bGxiYXJUaGVtZUNsaWVudCopCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgU2Nyb2xsYmFy
VGhlbWVJT1M6OnNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBT
Y3JvbGxiYXJUaGVtZUlPUzo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRSZWN0JiAvKmRhbWFnZVJlY3QqLykKK3sKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvblJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1NlbGVjdGlvblJlY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5NzFhYTU0MzUxZGFhYTM1MTk0
NTg4YjViNTI5MmFlNDhhY2E4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvU2VsZWN0aW9uUmVjdC5jcHAKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25SZWN0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworU2VsZWN0aW9uUmVjdDo6U2VsZWN0aW9uUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0LCBib29sIGlzSG9yaXpvbnRhbCwgaW50IGNvbHVtbk51bWJlcikKKyAgICA6
IG1fcmVjdChyZWN0KQorICAgICwgbV9kaXJlY3Rpb24oTFRSKQorICAgICwgbV9taW5YKDApCisg
ICAgLCBtX21heFgoMCkKKyAgICAsIG1fbWF4WSgwKQorICAgICwgbV9saW5lTnVtYmVyKDApCisg
ICAgLCBtX2lzTGluZUJyZWFrKGZhbHNlKQorICAgICwgbV9pc0ZpcnN0T25MaW5lKGZhbHNlKQor
ICAgICwgbV9pc0xhc3RPbkxpbmUoZmFsc2UpCisgICAgLCBtX2NvbnRhaW5zU3RhcnQoZmFsc2Up
CisgICAgLCBtX2NvbnRhaW5zRW5kKGZhbHNlKQorICAgICwgbV9pc0hvcml6b250YWwoaXNIb3Jp
em9udGFsKQorICAgICwgbV9pc0luRml4ZWRQb3NpdGlvbihmYWxzZSkKKyAgICAsIG1faXNSdWJ5
VGV4dChmYWxzZSkKKyAgICAsIG1fY29sdW1uTnVtYmVyKGNvbHVtbk51bWJlcikKK3sKK30KKwor
Ly8gRklYTUU6IFdlIHNob3VsZCBtb3ZlIHNvbWUgb2YgdGhlc2UgYXJndW1lbnRzIHRvIGFuIGF1
eGlsbGFyeSBzdHJ1Y3QuCitTZWxlY3Rpb25SZWN0OjpTZWxlY3Rpb25SZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbWluWCwgaW50IG1heFgsIGlu
dCBtYXhZLAorICAgIGludCBsaW5lTnVtYmVyLCBib29sIGlzTGluZUJyZWFrLCBib29sIGlzRmly
c3RPbkxpbmUsIGJvb2wgaXNMYXN0T25MaW5lLCBib29sIGNvbnRhaW5zU3RhcnQsIGJvb2wgY29u
dGFpbnNFbmQsCisgICAgYm9vbCBpc0hvcml6b250YWwsIGJvb2wgaXNJbkZpeGVkUG9zaXRpb24s
IGJvb2wgaXNSdWJ5VGV4dCwgaW50IGNvbHVtbk51bWJlcikKKyAgICA6IG1fcmVjdChyZWN0KQor
ICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQorICAgICwgbV9taW5YKG1pblgpCisgICAgLCBt
X21heFgobWF4WCkKKyAgICAsIG1fbWF4WShtYXhZKQorICAgICwgbV9saW5lTnVtYmVyKGxpbmVO
dW1iZXIpCisgICAgLCBtX2lzTGluZUJyZWFrKGlzTGluZUJyZWFrKQorICAgICwgbV9pc0ZpcnN0
T25MaW5lKGlzRmlyc3RPbkxpbmUpCisgICAgLCBtX2lzTGFzdE9uTGluZShpc0xhc3RPbkxpbmUp
CisgICAgLCBtX2NvbnRhaW5zU3RhcnQoY29udGFpbnNTdGFydCkKKyAgICAsIG1fY29udGFpbnNF
bmQoY29udGFpbnNFbmQpCisgICAgLCBtX2lzSG9yaXpvbnRhbChpc0hvcml6b250YWwpCisgICAg
LCBtX2lzSW5GaXhlZFBvc2l0aW9uKGlzSW5GaXhlZFBvc2l0aW9uKQorICAgICwgbV9pc1J1YnlU
ZXh0KGlzUnVieVRleHQpCisgICAgLCBtX2NvbHVtbk51bWJlcihjb2x1bW5OdW1iZXIpCit7Cit9
CisKK1NlbGVjdGlvblJlY3Q6OlNlbGVjdGlvblJlY3QoKQorICAgIDogbV9kaXJlY3Rpb24oTFRS
KQorICAgICwgbV9taW5YKDApCisgICAgLCBtX21heFgoMCkKKyAgICAsIG1fbWF4WSgwKQorICAg
ICwgbV9saW5lTnVtYmVyKDApCisgICAgLCBtX2lzTGluZUJyZWFrKGZhbHNlKQorICAgICwgbV9p
c0ZpcnN0T25MaW5lKGZhbHNlKQorICAgICwgbV9pc0xhc3RPbkxpbmUoZmFsc2UpCisgICAgLCBt
X2NvbnRhaW5zU3RhcnQoZmFsc2UpCisgICAgLCBtX2NvbnRhaW5zRW5kKGZhbHNlKQorICAgICwg
bV9pc0hvcml6b250YWwodHJ1ZSkKKyAgICAsIG1faXNJbkZpeGVkUG9zaXRpb24oZmFsc2UpCisg
ICAgLCBtX2lzUnVieVRleHQoZmFsc2UpCisgICAgLCBtX2NvbHVtbk51bWJlcigwKQoreworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvU2VsZWN0aW9uUmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Nl
bGVjdGlvblJlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZGM5MWZkZjFlN2M4MDU2ZGMwNjkyNWFmMGQyMmI0
NTMwZTc1MjlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1NlbGVjdGlvblJlY3QuaApAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U2VsZWN0aW9uUmVjdF9oCisjZGVmaW5lIFNlbGVjdGlvblJlY3RfaAorCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlbGVjdGlvblJlY3Qgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFNlbGVj
dGlvblJlY3QoY29uc3QgSW50UmVjdCYsIGJvb2wgaXNIb3Jpem9udGFsLCBpbnQgY29sdW1uTnVt
YmVyKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbW92ZSBzb21lIG9mIHRoZXNlIGFyZ3Vt
ZW50cyB0byBhbiBhdXhpbGxhcnkgc3RydWN0LgorICAgIFNlbGVjdGlvblJlY3QoY29uc3QgSW50
UmVjdCYsIFRleHREaXJlY3Rpb24sIGludCwgaW50LCBpbnQsIGludCwgYm9vbCwgYm9vbCwgYm9v
bCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgaW50KTsKKyAgICBTZWxlY3Rpb25SZWN0
KCk7CisgICAgflNlbGVjdGlvblJlY3QoKSB7IH0KKworICAgIEludFJlY3QgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgaW50IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1
cm4gbV9pc0hvcml6b250YWwgPyBtX3JlY3QueCgpIDogbV9yZWN0LnkoKTsgfQorICAgIGludCBs
b2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2lzSG9yaXpvbnRhbCA/IG1fcmVjdC53aWR0
aCgpIDogbV9yZWN0LmhlaWdodCgpOyB9CisgICAgaW50IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJl
dHVybiBtX2lzSG9yaXpvbnRhbCA/IG1fcmVjdC55KCkgOiBtX3JlY3QueCgpOyB9CisgICAgaW50
IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2lzSG9yaXpvbnRhbCA/IG1fcmVjdC5o
ZWlnaHQoKSA6IG1fcmVjdC53aWR0aCgpOyB9CisKKyAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CisgICAgaW50IG1pblgoKSBjb25zdCB7
IHJldHVybiBtX21pblg7IH0KKyAgICBpbnQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4WDsg
fQorICAgIGludCBtYXhZKCkgY29uc3QgeyByZXR1cm4gbV9tYXhZOyB9CisgICAgaW50IGxpbmVO
dW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xpbmVOdW1iZXI7IH0KKyAgICBib29sIGlzTGluZUJy
ZWFrKCkgY29uc3QgeyByZXR1cm4gbV9pc0xpbmVCcmVhazsgfQorICAgIGJvb2wgaXNGaXJzdE9u
TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXJzdE9uTGluZTsgfQorICAgIGJvb2wgaXNMYXN0
T25MaW5lKCkgY29uc3QgeyByZXR1cm4gbV9pc0xhc3RPbkxpbmU7IH0KKyAgICBib29sIGNvbnRh
aW5zU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zU3RhcnQ7IH0KKyAgICBib29sIGNv
bnRhaW5zRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0VuZDsgfQorICAgIGJvb2wgaXNI
b3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250YWw7IH0KKyAgICBib29sIGlz
SW5GaXhlZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0luRml4ZWRQb3NpdGlvbjsgfQor
ICAgIGJvb2wgaXNSdWJ5VGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNSdWJ5VGV4dDsgfQorICAg
IGludCBjb2x1bW5OdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbk51bWJlcjsgfQorCisg
ICAgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9yZWN0ID0gcmVjdDsgfQor
CisgICAgdm9pZCBzZXRMb2dpY2FsTGVmdChpbnQgbGVmdCkKKyAgICB7CisgICAgICAgIGlmICht
X2lzSG9yaXpvbnRhbCkKKyAgICAgICAgICAgIG1fcmVjdC5zZXRYKGxlZnQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX3JlY3Quc2V0WShsZWZ0KTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dExvZ2ljYWxXaWR0aChpbnQgd2lkdGgpCisgICAgeworICAgICAgICBpZiAobV9pc0hvcml6b250
YWwpCisgICAgICAgICAgICBtX3JlY3Quc2V0V2lkdGgod2lkdGgpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX3JlY3Quc2V0SGVpZ2h0KHdpZHRoKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dExvZ2ljYWxUb3AoaW50IHRvcCkKKyAgICB7CisgICAgICAgIGlmIChtX2lzSG9yaXpvbnRhbCkK
KyAgICAgICAgICAgIG1fcmVjdC5zZXRZKHRvcCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fcmVjdC5zZXRYKHRvcCk7CisgICAgfQorCisgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KGlu
dCBoZWlnaHQpCisgICAgeworICAgICAgICBpZiAobV9pc0hvcml6b250YWwpCisgICAgICAgICAg
ICBtX3JlY3Quc2V0SGVpZ2h0KGhlaWdodCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
cmVjdC5zZXRXaWR0aChoZWlnaHQpOworICAgIH0KKworICAgIHZvaWQgc2V0RGlyZWN0aW9uKFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uKSB7IG1fZGlyZWN0aW9uID0gZGlyZWN0aW9uOyB9CisgICAg
dm9pZCBzZXRNaW5YKGludCBtaW5YKSB7IG1fbWluWCA9IG1pblg7IH0KKyAgICB2b2lkIHNldE1h
eFgoaW50IG1heFgpIHsgbV9tYXhYID0gbWF4WDsgfQorICAgIHZvaWQgc2V0TWF4WShpbnQgbWF4
WSkgeyBtX21heFkgPSBtYXhZOyB9CisgICAgdm9pZCBzZXRMaW5lTnVtYmVyKGludCBsaW5lTnVt
YmVyKSB7IG1fbGluZU51bWJlciA9IGxpbmVOdW1iZXI7IH0KKyAgICB2b2lkIHNldElzTGluZUJy
ZWFrKGJvb2wgaXNMaW5lQnJlYWspIHsgbV9pc0xpbmVCcmVhayA9IGlzTGluZUJyZWFrOyB9Cisg
ICAgdm9pZCBzZXRJc0ZpcnN0T25MaW5lKGJvb2wgaXNGaXJzdE9uTGluZSkgeyBtX2lzRmlyc3RP
bkxpbmUgPSBpc0ZpcnN0T25MaW5lOyB9CisgICAgdm9pZCBzZXRJc0xhc3RPbkxpbmUoYm9vbCBp
c0xhc3RPbkxpbmUpIHsgbV9pc0xhc3RPbkxpbmUgPSBpc0xhc3RPbkxpbmU7IH0KKyAgICB2b2lk
IHNldENvbnRhaW5zU3RhcnQoYm9vbCBjb250YWluc1N0YXJ0KSB7IG1fY29udGFpbnNTdGFydCA9
IGNvbnRhaW5zU3RhcnQ7IH0KKyAgICB2b2lkIHNldENvbnRhaW5zRW5kKGJvb2wgY29udGFpbnNF
bmQpIHsgbV9jb250YWluc0VuZCA9IGNvbnRhaW5zRW5kOyB9CisgICAgdm9pZCBzZXRJc0hvcml6
b250YWwoYm9vbCBpc0hvcml6b250YWwpIHsgbV9pc0hvcml6b250YWwgPSBpc0hvcml6b250YWw7
IH0KKworcHJpdmF0ZToKKyAgICBJbnRSZWN0IG1fcmVjdDsKKyAgICBUZXh0RGlyZWN0aW9uIG1f
ZGlyZWN0aW9uOworICAgIGludCBtX21pblg7CisgICAgaW50IG1fbWF4WDsKKyAgICBpbnQgbV9t
YXhZOworICAgIGludCBtX2xpbmVOdW1iZXI7CisgICAgYm9vbCBtX2lzTGluZUJyZWFrOworICAg
IGJvb2wgbV9pc0ZpcnN0T25MaW5lOworICAgIGJvb2wgbV9pc0xhc3RPbkxpbmU7CisgICAgYm9v
bCBtX2NvbnRhaW5zU3RhcnQ7CisgICAgYm9vbCBtX2NvbnRhaW5zRW5kOworICAgIGJvb2wgbV9p
c0hvcml6b250YWw7CisgICAgYm9vbCBtX2lzSW5GaXhlZFBvc2l0aW9uOworICAgIGJvb2wgbV9p
c1J1YnlUZXh0OworICAgIGludCBtX2NvbHVtbk51bWJlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFNlbGVjdGlvblJlY3RfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NvdW5kSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1NvdW5kSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0ZDU0OTMzNDU0ZTAyMWQ1OTAwMWY4Zjgz
MmJjYzljNzE3ZDhiNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvU291bmRJT1MubW0KQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNvdW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordm9pZCBzeXN0ZW1CZWVwKCkgeyBOU0xvZyhAIldlYmNvcmUgTlNCZWVwKCkhIik7IH0g
ICAgCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9TeXN0ZW1NZW1vcnlJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1N5c3RlbU1lbW9yeUlPUy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQyMjBjNTA1MTg3YTU0ODdl
MWYzOTY0M2FkNDIwZGIxN2E3ZmFhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9TeXN0ZW1NZW1vcnlJT1MuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTeXN0ZW1NZW1vcnkuaCIKKworI2luY2x1ZGUgPG1h
Y2gvbWFjaC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2ludCBzeXN0ZW1NZW1vcnlMZXZlbCgpCit7CisjaWYgUExBVEZPUk0oSU9TX1NJTVVM
QVRPUikKKyAgICByZXR1cm4gMzU7CisjZWxzZQorICAgIHN0YXRpYyBpbnQgbWVtb3J5RnJlZUxl
dmVsID0gLTE7CisgICAgc3RhdGljIGRvdWJsZSBwcmV2aW91c0NoZWNrVGltZTsgCisgICAgZG91
YmxlIHRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIGlmICh0aW1lIC0gcHJldmlvdXNDaGVja1Rp
bWUgPCAwLjEpCisgICAgICAgIHJldHVybiBtZW1vcnlGcmVlTGV2ZWw7CisgICAgcHJldmlvdXND
aGVja1RpbWUgPSB0aW1lOworICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKG1lbW9yeUZyZWVMZXZl
bCk7CisgICAgc3lzY3RsYnluYW1lKCJrZXJuLm1lbW9yeXN0YXR1c19sZXZlbCIsICZtZW1vcnlG
cmVlTGV2ZWwsICZzaXplLCBudWxscHRyLCAwKTsKKyAgICByZXR1cm4gbWVtb3J5RnJlZUxldmVs
OworI2VuZGlmCit9CisKKyNpZiAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKK3N0YXRpYyBob3N0
X2Jhc2ljX2luZm9fZGF0YV90IGdIb3N0QmFzaWNJbmZvOworCitzdGF0aWMgdm9pZCBpbml0Q2Fw
YWJpbGl0aWVzKHZvaWQpCit7CisgICAgLy8gRGlzY292ZXIgb3VyIENQVSB0eXBlCisgICAgbWFj
aF9wb3J0X3QgaG9zdCA9IG1hY2hfaG9zdF9zZWxmKCk7CisgICAgbWFjaF9tc2dfdHlwZV9udW1i
ZXJfdCBjb3VudCA9IEhPU1RfQkFTSUNfSU5GT19DT1VOVDsKKyAgICBrZXJuX3JldHVybl90IHJl
dHVyblZhbHVlID0gaG9zdF9pbmZvKGhvc3QsIEhPU1RfQkFTSUNfSU5GTywgcmVpbnRlcnByZXRf
Y2FzdDxob3N0X2luZm9fdD4oJmdIb3N0QmFzaWNJbmZvKSwgJmNvdW50KTsKKyAgICBtYWNoX3Bv
cnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBob3N0KTsKKyAgICBpZiAocmV0dXJuVmFs
dWUgIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICBMT0dfRVJST1IoIiVzIDogaG9zdF9pbmZvKCVk
KSA6ICVzLlxuIiwgX19GVU5DVElPTl9fLCByZXR1cm5WYWx1ZSwgbWFjaF9lcnJvcl9zdHJpbmco
cmV0dXJuVmFsdWUpKTsKK30KKyNlbmRpZgorCitzaXplX3Qgc3lzdGVtVG90YWxNZW1vcnkoKQor
eworI2lmIFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCisgICAgcmV0dXJuIDUxMiAqIDEwMjQgKiAx
MDI0OworI2Vsc2UKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgQysrMTEgdGhyZWFkIHBy
aW1pdGl2ZXMuCisgICAgc3RhdGljIHB0aHJlYWRfb25jZV90IGluaXRDb250cm9sID0gUFRIUkVB
RF9PTkNFX0lOSVQ7CisKKyAgICBwdGhyZWFkX29uY2UoJmluaXRDb250cm9sLCBpbml0Q2FwYWJp
bGl0aWVzKTsKKyAgICAvLyBUaGUgdmFsdWUgaW4gZ0hvc3RCYXNpY0luZm8ubWF4X21lbSBpcyBv
ZnRlbiBsb3dlciB0aGFuIHRoZSBhbW91bnQgd2UncmUKKyAgICAvLyBpbnRlcmVzdGVkIGluIChl
LmcuLCBkb2VzIHRoaXMgZGV2aWNlIGhhdmUgYXQgbGVhc3QgMjU2TUIgb2YgUkFNPykKKyAgICAv
LyBSb3VuZCB0aGUgdmFsdWUgdG8gdGhlIG5lYXJlc3QgcG93ZXIgb2YgMi4KKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8c2l6ZV90PihleHAyKGNlaWwobG9nMihnSG9zdEJhc2ljSW5mby5tYXhfbWVt
KSkpKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGhlbWVJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9UaGVtZUlPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzY2M5YmE3M2Q5MTU2NGMwMzA2ZGZj
NmJhMWNhNWRiNDE5NzI5MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVGhlbWVJT1MuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVGhlbWVJT1NfaAorI2RlZmluZSBU
aGVtZUlPU19oCisKKyNpbmNsdWRlICJUaGVtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFRoZW1lSU9TIDogcHVibGljIFRoZW1lIHsKK3B1YmxpYzoKKyAgICBUaGVtZUlPUygp
IHsgfQorICAgIHZpcnR1YWwgflRoZW1lSU9TKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBUaGVtZUlPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
VGhlbWVJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjQ2ZmMzYWIyZDZjMWIyMmViNmY1ZjJlN2Q3MDA1NWEy
MTUzMjkwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9U
aGVtZUlPUy5tbQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGhlbWVJT1Mu
aCIKKworI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJTY3JvbGxWaWV3Lmgi
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIEZJWE1FOiBJbXBsZW1lbnQgYmVmb3JlIGVuYWJsaW5nIFVTRShORVdfVEhFTUUpLgorCitU
aGVtZSogcGxhdGZvcm1UaGVtZSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRoZW1l
SU9TPiB0aGVtZUlPUzsKKyAgICByZXR1cm4gJnRoZW1lSU9TLmdldCgpOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWUzYjk1NWE1Mzhj
NWFmMWQ0MTFkZTExNzdmYzdlYmM2ZThjYTYzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlQ2FjaGUuaApAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgVGlsZUNhY2hlX2gKKyNkZWZpbmUgVGlsZUNhY2hlX2gKKworI2lmIFBM
QVRGT1JNKElPUykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJU
aW1lci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZmRlZiBfX09CSkNfXworQGNsYXNz
IENBTGF5ZXI7CitAY2xhc3MgVGlsZUNhY2hlVG9tYnN0b25lOworQGNsYXNzIFRpbGVMYXllcjsK
K0BjbGFzcyBXQUtXaW5kb3c7CisjZWxzZQorY2xhc3MgQ0FMYXllcjsKK2NsYXNzIFRpbGVDYWNo
ZVRvbWJzdG9uZTsKK2NsYXNzIFRpbGVMYXllcjsKK2NsYXNzIFdBS1dpbmRvdzsKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRpbGVHcmlkOworCitjbGFzcyBUaWxlQ2Fj
aGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGVDYWNoZSk7CitwdWJsaWM6CisgICAg
VGlsZUNhY2hlKFdBS1dpbmRvdyopOworICAgIH5UaWxlQ2FjaGUoKTsKKworICAgIENHRmxvYXQg
c2NyZWVuU2NhbGUoKSBjb25zdDsKKworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAg
dm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIAorICAgIHZv
aWQgbGF5b3V0VGlsZXMoKTsKKyAgICB2b2lkIGxheW91dFRpbGVzTm93KCk7CisgICAgdm9pZCBs
YXlvdXRUaWxlc05vd0ZvclJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgcmVtb3ZlQWxs
Tm9uVmlzaWJsZVRpbGVzKCk7CisgICAgdm9pZCByZW1vdmVBbGxUaWxlcygpOworICAgIHZvaWQg
cmVtb3ZlRm9yZWdyb3VuZFRpbGVzKCk7CisKKyAgICAvLyBJZiAnY29udGVudFJlcGxhY2VtZW50
SW1hZ2UnIGlzIG5vdCBOVUxMLCBkcmF3TGF5ZXIoKSBkcmF3cworICAgIC8vIGNvbnRlbnRSZXBs
YWNlbWVudEltYWdlIGluc3RlYWQgb2YgdGhlIHBhZ2UgY29udGVudC4gV2UgYXNzdW1lIHRoZQor
ICAgIC8vIGltYWdlIGlzIHRvIGJlIGRyYXduIGF0IHRoZSBvcmlnaW4gYW5kIHNjYWxlZCB0byBt
YXRjaCBkZXZpY2UgcGl4ZWxzLgorICAgIHZvaWQgc2V0Q29udGVudFJlcGxhY2VtZW50SW1hZ2Uo
UmV0YWluUHRyPENHSW1hZ2VSZWY+KTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVu
dFJlcGxhY2VtZW50SW1hZ2UoKSBjb25zdDsKKworICAgIHZvaWQgc2V0VGlsZUJvcmRlcnNWaXNp
YmxlKGJvb2wpOworICAgIGJvb2wgdGlsZUJvcmRlcnNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4g
bV90aWxlQm9yZGVyc1Zpc2libGU7IH0KKworICAgIHZvaWQgc2V0VGlsZVBhaW50Q291bnRlcnNW
aXNpYmxlKGJvb2wpOworICAgIGJvb2wgdGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKCkgY29uc3Qg
eyByZXR1cm4gbV90aWxlUGFpbnRDb3VudGVyc1Zpc2libGU7IH0KKworICAgIHZvaWQgc2V0QWNj
ZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZERyYXdp
bmdFbmFibGVkID0gZW5hYmxlZDsgfQorICAgIGJvb2wgYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZDsgfQorCisgICAg
dm9pZCBzZXRLZWVwc1pvb21lZE91dFRpbGVzKGJvb2wpOworICAgIGJvb2wga2VlcHNab29tZWRP
dXRUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fa2VlcHNab29tZWRPdXRUaWxlczsgfQorCisgICAg
dm9pZCBzZXRab29tZWRPdXRTY2FsZShmbG9hdCk7CisgICAgZmxvYXQgem9vbWVkT3V0U2NhbGUo
KSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHNldEN1cnJlbnRTY2FsZShmbG9hdCk7CisgICAgZmxv
YXQgY3VycmVudFNjYWxlKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCB0aWxlc09wYXF1ZSgpIGNv
bnN0OworICAgIHZvaWQgc2V0VGlsZXNPcGFxdWUoYm9vbCk7CisgICAgCisgICAgZW51bSBUaWxp
bmdNb2RlIHsKKyAgICAgICAgTm9ybWFsLAorICAgICAgICBNaW5pbWFsLAorICAgICAgICBQYW5u
aW5nLAorICAgICAgICBab29taW5nLAorICAgICAgICBEaXNhYmxlZCwKKyAgICAgICAgU2Nyb2xs
VG9Ub3AKKyAgICB9OworICAgIFRpbGluZ01vZGUgdGlsaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGlsaW5nTW9kZTsgfQorICAgIHZvaWQgc2V0VGlsaW5nTW9kZShUaWxpbmdNb2RlKTsKKwor
ICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIFRpbGluZ0RpcmVjdGlvblVwLAorICAgICAgICBU
aWxpbmdEaXJlY3Rpb25Eb3duLAorICAgICAgICBUaWxpbmdEaXJlY3Rpb25MZWZ0LAorICAgICAg
ICBUaWxpbmdEaXJlY3Rpb25SaWdodCwKKyAgICB9IFRpbGluZ0RpcmVjdGlvbjsKKyAgICB2b2lk
IHNldFRpbGluZ0RpcmVjdGlvbihUaWxpbmdEaXJlY3Rpb24pOworICAgIFRpbGluZ0RpcmVjdGlv
biB0aWxpbmdEaXJlY3Rpb24oKSBjb25zdDsKKworICAgIGJvb2wgaGFzUGVuZGluZ0RyYXcoKSBj
b25zdDsKKworICAgIHZvaWQgaG9zdExheWVyU2l6ZUNoYW5nZWQoKTsKKworICAgIHN0YXRpYyB2
b2lkIHNldExheWVyUG9vbENhcGFjaXR5KHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgdm9pZCBkcmFp
bkxheWVyUG9vbCgpOworCisgICAgLy8gTG9nZ2luZworICAgIHZvaWQgZHVtcFRpbGVzKCk7CisK
KyAgICAvLyBJbnRlcm5hbAorICAgIHZvaWQgZG9MYXlvdXRUaWxlcygpOworICAgIHZvaWQgZHJh
d0xheWVyKFRpbGVMYXllciosIENHQ29udGV4dFJlZik7CisgICAgdm9pZCBwcmVwYXJlVG9EcmF3
KCk7CisgICAgdm9pZCBmaW5pc2hlZENyZWF0aW5nVGlsZXMoYm9vbCBkaWRDcmVhdGVUaWxlcywg
Ym9vbCBjcmVhdGVNb3JlKTsKKyAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3RJbkxheWVyKENBTGF5
ZXIgKikgY29uc3Q7CisgICAgQ0FMYXllciogaG9zdExheWVyKCkgY29uc3Q7CisgICAgdW5zaWdu
ZWQgdGlsZUNhcGFjaXR5Rm9yR3JpZChUaWxlR3JpZCopOworICAgIENvbG9yIGNvbG9yRm9yR3Jp
ZFRpbGVCb3JkZXIoVGlsZUdyaWQqKSBjb25zdDsKKworICAgIHZvaWQgZG9QZW5kaW5nUmVwYWlu
dHMoKTsKKworICAgIGJvb2wgaXNTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX2lzU3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkOyB9CisgICAgdm9p
ZCBzZXRTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQoYm9vbCk7CisgICAgCisgICAgZW51
bSBTeW5jaHJvbm91c1RpbGVDcmVhdGlvbk1vZGUgeyBDb3ZlclZpc2libGVPbmx5LCBDb3ZlclNw
ZWN1bGF0aXZlIH07CisKK3ByaXZhdGU6CisgICAgVGlsZUdyaWQqIGFjdGl2ZVRpbGVHcmlkKCkg
Y29uc3Q7CisgICAgVGlsZUdyaWQqIGluYWN0aXZlVGlsZUdyaWQoKSBjb25zdDsKKworICAgIHZv
aWQgdXBkYXRlVGlsaW5nTW9kZSgpOworICAgIGJvb2wgaXNUaWxlSW52YWxpZGF0aW9uU3VzcGVu
ZGVkKCkgY29uc3Q7CisgICAgYm9vbCBpc1RpbGVDcmVhdGlvblN1c3BlbmRlZCgpIGNvbnN0Owor
ICAgIHZvaWQgZmx1c2hTYXZlZERpc3BsYXlSZWN0cygpOworICAgIHZvaWQgaW52YWxpZGF0ZVRp
bGVzKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdm9pZCBzZXRab29tZWRPdXRTY2Fs
ZUludGVybmFsKGZsb2F0KTsKKyAgICB2b2lkIGNvbW1pdFNjYWxlQ2hhbmdlKCk7CisgICAgdm9p
ZCBicmluZ0FjdGl2ZVRpbGVHcmlkVG9Gcm9udCgpOworICAgIHZvaWQgYWRqdXN0VGlsZUdyaWRU
cmFuc2Zvcm1zKCk7CisgICAgdm9pZCByZW1vdmVBbGxOb25WaXNpYmxlVGlsZXNJbnRlcm5hbCgp
OworICAgIHZvaWQgY3JlYXRlVGlsZXNJbkFjdGl2ZUdyaWQoU3luY2hyb25vdXNUaWxlQ3JlYXRp
b25Nb2RlKTsKKyAgICB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50KCk7
CisKKyAgICB2b2lkIHRpbGVDcmVhdGlvblRpbWVyRmlyZWQoVGltZXI8VGlsZUNhY2hlPiopOwor
CisgICAgdm9pZCBkcmF3UmVwbGFjZW1lbnRJbWFnZShUaWxlTGF5ZXIqLCBDR0NvbnRleHRSZWYs
IENHSW1hZ2VSZWYpOworICAgIHZvaWQgZHJhd1dpbmRvd0NvbnRlbnQoVGlsZUxheWVyKiwgQ0dD
b250ZXh0UmVmLCBDR1JlY3QgZGlydHlSZWN0KTsKKworICAgIFdBS1dpbmRvdyogbV93aW5kb3c7
CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9jb250ZW50UmVwbGFjZW1lbnRJbWFnZTsK
KworICAgIGJvb2wgbV9rZWVwc1pvb21lZE91dFRpbGVzOworCisgICAgYm9vbCBtX2hhc1BlbmRp
bmdMYXlvdXRUaWxlczsKKyAgICBib29sIG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01vZGU7Cisg
ICAgLy8gRW5zdXJlIHRoZXJlIGFyZSBubyBhc3luYyBjYWxscyBvbiBhIGRlYWQgdGlsZSBjYWNo
ZS4KKyAgICBSZXRhaW5QdHI8VGlsZUNhY2hlVG9tYnN0b25lPiBtX3RvbWJzdG9uZTsKKworICAg
IFRpbGluZ01vZGUgbV90aWxpbmdNb2RlOworICAgIFRpbGluZ0RpcmVjdGlvbiBtX3RpbGluZ0Rp
cmVjdGlvbjsKKworICAgIEludFNpemUgbV90aWxlU2l6ZTsKKyAgICBib29sIG1fdGlsZXNPcGFx
dWU7CisKKyAgICBib29sIG1fdGlsZUJvcmRlcnNWaXNpYmxlOworICAgIGJvb2wgbV90aWxlUGFp
bnRDb3VudGVyc1Zpc2libGU7CisgICAgYm9vbCBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQ7
CisgICAgYm9vbCBtX2lzU3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkOworCisgICAgYm9v
bCBtX2RpZENhbGxXaWxsU3RhcnRTY3JvbGxpbmdPclpvb21pbmc7CisgICAgT3duUHRyPFRpbGVH
cmlkPiBtX3pvb21lZE91dFRpbGVHcmlkOworICAgIE93blB0cjxUaWxlR3JpZD4gbV96b29tZWRJ
blRpbGVHcmlkOworCisgICAgVGltZXI8VGlsZUNhY2hlPiBtX3RpbGVDcmVhdGlvblRpbWVyOwor
CisgICAgVmVjdG9yPEludFJlY3Q+IG1fc2F2ZWREaXNwbGF5UmVjdHM7CisKKyAgICBmbG9hdCBt
X2N1cnJlbnRTY2FsZTsKKworICAgIGZsb2F0IG1fcGVuZGluZ1NjYWxlOworICAgIGZsb2F0IG1f
cGVuZGluZ1pvb21lZE91dFNjYWxlOworCisgICAgbXV0YWJsZSBNdXRleCBtX3RpbGVNdXRleDsK
KyAgICBtdXRhYmxlIE11dGV4IG1fc2F2ZWREaXNwbGF5UmVjdE11dGV4OworICAgIG11dGFibGUg
TXV0ZXggbV9jb250ZW50UmVwbGFjZW1lbnRJbWFnZU11dGV4OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gVGlsZUNh
Y2hlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlQ2FjaGUu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjBjZWMwN2Q2YmUzYTg3ZmY3YWVjMWI4NTkyMzlmMzBkMDhmNWNjYTgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLm1tCkBAIC0wLDAgKzEs
ODIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRpbGVD
YWNoZS5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk1lbW9yeVByZXNzdXJlSGFuZGxlci5oIgorI2luY2x1ZGUgIlN5c3RlbU1lbW9yeS5o
IgorI2luY2x1ZGUgIlRpbGVHcmlkLmgiCisjaW5jbHVkZSAiVGlsZUdyaWRUaWxlLmgiCisjaW5j
bHVkZSAiVGlsZUxheWVyLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyUG9vbC5oIgorI2luY2x1ZGUg
IldBS1dpbmRvdy5oIgorI2luY2x1ZGUgIldLR3JhcGhpY3MuaCIKKyNpbmNsdWRlICJXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZFJ1bi5oIgorI2luY2x1
ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6
Q29yZVByaXZhdGUuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworQGludGVyZmFj
ZSBXQUtWaWV3IChXZWJWaWV3RXh0cmFzKQorLSAodm9pZClfZGlzcGF0Y2hUaWxlRGlkRHJhdzoo
Q0FMYXllciopdGlsZTsKKy0gKHZvaWQpX3dpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZzsKKy0g
KHZvaWQpX2RpZEZpbmlzaFNjcm9sbGluZ09yWm9vbWluZzsKKy0gKHZvaWQpX2Rpc3BhdGNoVGls
ZURpZERyYXc7CistICh2b2lkKV9zY2hlZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5nVGlsZUNhY2hl
UmVwYWludDsKK0BlbmQKKworQGludGVyZmFjZSBUaWxlQ2FjaGVUb21ic3RvbmUgOiBOU09iamVj
dCB7CisgICAgQk9PTCBkZWFkOworfQorQHByb3BlcnR5KGdldHRlcj1pc0RlYWQpIEJPT0wgZGVh
ZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGlsZUNhY2hlVG9tYnN0b25lCisKK0BzeW50
aGVzaXplIGRlYWQ7CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUaWxlQ2FjaGU6
OlRpbGVDYWNoZShXQUtXaW5kb3cqIHdpbmRvdykKKyAgICA6IG1fd2luZG93KHdpbmRvdykKKyAg
ICAsIG1fa2VlcHNab29tZWRPdXRUaWxlcyhmYWxzZSkKKyAgICAsIG1faGFzUGVuZGluZ0xheW91
dFRpbGVzKGZhbHNlKQorICAgICwgbV9oYXNQZW5kaW5nVXBkYXRlVGlsaW5nTW9kZShmYWxzZSkK
KyAgICAsIG1fdG9tYnN0b25lKGFkb3B0TlMoW1tUaWxlQ2FjaGVUb21ic3RvbmUgYWxsb2NdIGlu
aXRdKSkKKyAgICAsIG1fdGlsaW5nTW9kZShOb3JtYWwpCisgICAgLCBtX3RpbGluZ0RpcmVjdGlv
bihUaWxpbmdEaXJlY3Rpb25Eb3duKQorICAgICwgbV90aWxlU2l6ZSg1MTIsIDUxMikKKyAgICAs
IG1fdGlsZXNPcGFxdWUodHJ1ZSkKKyAgICAsIG1fdGlsZUJvcmRlcnNWaXNpYmxlKGZhbHNlKQor
ICAgICwgbV90aWxlUGFpbnRDb3VudGVyc1Zpc2libGUoZmFsc2UpCisgICAgLCBtX2FjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQoZmFsc2UpCisgICAgLCBtX2lzU3BlY3VsYXRpdmVUaWxlQ3JlYXRp
b25FbmFibGVkKHRydWUpCisgICAgLCBtX2RpZENhbGxXaWxsU3RhcnRTY3JvbGxpbmdPclpvb21p
bmcoZmFsc2UpCisgICAgLCBtX3pvb21lZE91dFRpbGVHcmlkKFBhc3NPd25QdHI8VGlsZUdyaWQ+
KCkpCisgICAgLCBtX3pvb21lZEluVGlsZUdyaWQoUGFzc093blB0cjxUaWxlR3JpZD4oKSkKKyAg
ICAsIG1fdGlsZUNyZWF0aW9uVGltZXIodGhpcywgJlRpbGVDYWNoZTo6dGlsZUNyZWF0aW9uVGlt
ZXJGaXJlZCkKKyAgICAsIG1fY3VycmVudFNjYWxlKDEuZikKKyAgICAsIG1fcGVuZGluZ1NjYWxl
KDApCisgICAgLCBtX3BlbmRpbmdab29tZWRPdXRTY2FsZSgwKQoreworICAgIG1fem9vbWVkT3V0
VGlsZUdyaWQgPSBUaWxlR3JpZDo6Y3JlYXRlKHRoaXMsIG1fdGlsZVNpemUpOworICAgIFtob3N0
TGF5ZXIoKSBpbnNlcnRTdWJsYXllcjptX3pvb21lZE91dFRpbGVHcmlkLT50aWxlSG9zdExheWVy
KCkgYXRJbmRleDowXTsKKyAgICBob3N0TGF5ZXJTaXplQ2hhbmdlZCgpOworfQorCitUaWxlQ2Fj
aGU6On5UaWxlQ2FjaGUoKQoreworICAgIFttX3RvbWJzdG9uZS5nZXQoKSBzZXREZWFkOnRydWVd
OworfQorCitDR0Zsb2F0IFRpbGVDYWNoZTo6c2NyZWVuU2NhbGUoKSBjb25zdAoreworICAgIHJl
dHVybiBbbV93aW5kb3cgc2NyZWVuU2NhbGVdOworfQorCitDQUxheWVyKiBUaWxlQ2FjaGU6Omhv
c3RMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX3dpbmRvdyBob3N0TGF5ZXJdOworfQor
CitGbG9hdFJlY3QgVGlsZUNhY2hlOjp2aXNpYmxlUmVjdEluTGF5ZXIoQ0FMYXllciAqbGF5ZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFtsYXllciBjb252ZXJ0UmVjdDpbbV93aW5kb3cgZXh0ZW5k
ZWRWaXNpYmxlUmVjdF0gZnJvbUxheWVyOmhvc3RMYXllcigpXTsKK30KKworYm9vbCBUaWxlQ2Fj
aGU6OnRpbGVzT3BhcXVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlc09wYXF1ZTsKK30K
KyAgICAKK1RpbGVHcmlkKiBUaWxlQ2FjaGU6OmFjdGl2ZVRpbGVHcmlkKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fa2VlcHNab29tZWRPdXRUaWxlcykKKyAgICAgICAgcmV0dXJuIG1fem9vbWVkT3V0
VGlsZUdyaWQuZ2V0KCk7CisgICAgaWYgKG1fdGlsaW5nTW9kZSA9PSBab29taW5nKQorICAgICAg
ICByZXR1cm4gbV96b29tZWRPdXRUaWxlR3JpZC5nZXQoKTsKKyAgICBpZiAobV96b29tZWRJblRp
bGVHcmlkICYmIG1fY3VycmVudFNjYWxlID09IG1fem9vbWVkSW5UaWxlR3JpZC0+c2NhbGUoKSkK
KyAgICAgICAgcmV0dXJuIG1fem9vbWVkSW5UaWxlR3JpZC5nZXQoKTsKKyAgICByZXR1cm4gbV96
b29tZWRPdXRUaWxlR3JpZC5nZXQoKTsKK30KKworVGlsZUdyaWQqIFRpbGVDYWNoZTo6aW5hY3Rp
dmVUaWxlR3JpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFjdGl2ZVRpbGVHcmlkKCkgPT0gbV96
b29tZWRPdXRUaWxlR3JpZCA/IG1fem9vbWVkSW5UaWxlR3JpZC5nZXQoKSA6IG1fem9vbWVkT3V0
VGlsZUdyaWQuZ2V0KCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlc09wYXF1ZShib29s
IG9wYXF1ZSkKK3sKKyAgICBpZiAobV90aWxlc09wYXF1ZSA9PSBvcGFxdWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisKKyAgICBtX3Rp
bGVzT3BhcXVlID0gb3BhcXVlOworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnVwZGF0ZVRpbGVP
cGFjaXR5KCk7CisgICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCkKKyAgICAgICAgbV96b29tZWRJ
blRpbGVHcmlkLT51cGRhdGVUaWxlT3BhY2l0eSgpOworfQorCit2b2lkIFRpbGVDYWNoZTo6ZG9M
YXlvdXRUaWxlcygpCit7CisgICAgaWYgKGlzVGlsZUNyZWF0aW9uU3VzcGVuZGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAg
VGlsZUdyaWQqIGFjdGl2ZUdyaWQgPSBhY3RpdmVUaWxlR3JpZCgpOworICAgIC8vIEV2ZW4gdGhv
dWdoIHdlIGFyZW4ndCBhY3R1YWxseSBjcmVhdGluZyB0aWxlcyBpbiB0aGUgaW5hY3RpdmUgZ3Jp
ZCwgd2UKKyAgICAvLyBzdGlsbCBuZWVkIHRvIGRyb3AgaW52YWxpZCB0aWxlcyBpbiByZXNwb25z
ZSB0byBhIGxheW91dC4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4Mzk4Njc+LgorICAg
IGlmIChUaWxlR3JpZCogaW5hY3RpdmVHcmlkID0gaW5hY3RpdmVUaWxlR3JpZCgpKQorICAgICAg
ICBpbmFjdGl2ZUdyaWQtPmRyb3BJbnZhbGlkVGlsZXMoKTsKKyAgICBpZiAoYWN0aXZlR3JpZC0+
Y2hlY2tEb1NpbmdsZVRpbGVMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNyZWF0ZVRp
bGVzSW5BY3RpdmVHcmlkKENvdmVyVmlzaWJsZU9ubHkpOworfQorCit2b2lkIFRpbGVDYWNoZTo6
aG9zdExheWVyU2l6ZUNoYW5nZWQoKQoreworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnVwZGF0
ZUhvc3RMYXllclNpemUoKTsKKyAgICBpZiAobV96b29tZWRJblRpbGVHcmlkKQorICAgICAgICBt
X3pvb21lZEluVGlsZUdyaWQtPnVwZGF0ZUhvc3RMYXllclNpemUoKTsKK30KKwordm9pZCBUaWxl
Q2FjaGU6OnNldEtlZXBzWm9vbWVkT3V0VGlsZXMoYm9vbCBrZWVwKQoreworICAgIG1fa2VlcHNa
b29tZWRPdXRUaWxlcyA9IGtlZXA7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRDdXJyZW50U2Nh
bGUoZmxvYXQgc2NhbGUpCit7CisgICAgQVNTRVJUKHNjYWxlID4gMCk7CisKKyAgICBpZiAoY3Vy
cmVudFNjYWxlKCkgPT0gc2NhbGUpIHsKKyAgICAgICAgbV9wZW5kaW5nU2NhbGUgPSAwOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIG1fcGVuZGluZ1NjYWxlID0gc2NhbGU7CisgICAgaWYg
KG1fdGlsaW5nTW9kZSA9PSBEaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIGNvbW1pdFNj
YWxlQ2hhbmdlKCk7CisKKyAgICBpZiAoIWtlZXBzWm9vbWVkT3V0VGlsZXMoKSAmJiAhaXNUaWxl
SW52YWxpZGF0aW9uU3VzcGVuZGVkKCkpIHsKKyAgICAgICAgLy8gVGlsZSBpbnZhbGlkYXRpb24g
aXMgbm9ybWFsbHkgc3VzcGVuZGVkIGR1cmluZyB6b29taW5nIGJ5IFVJS2l0IGJ1dCBzb21lIGFw
cGxpY2F0aW9ucworICAgICAgICAvLyB1c2luZyBjdXN0b20gc2Nyb2xsdmlld3MgbWF5IHpvb20g
d2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBjYWxsYmFja3MuIEludmFsaWRhdGUgdGhlIHRpbGVzIGV4
cGxpY2l0bHkuCisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAg
ICAgIGFjdGl2ZVRpbGVHcmlkKCktPmRyb3BBbGxUaWxlcygpOworICAgICAgICBhY3RpdmVUaWxl
R3JpZCgpLT5jcmVhdGVUaWxlcyhDb3ZlclZpc2libGVPbmx5KTsKKyAgICB9Cit9CisKK3ZvaWQg
VGlsZUNhY2hlOjpzZXRab29tZWRPdXRTY2FsZShmbG9hdCBzY2FsZSkKK3sKKyAgICBBU1NFUlQo
c2NhbGUgPiAwKTsKKworICAgIGlmICh6b29tZWRPdXRTY2FsZSgpID09IHNjYWxlKSB7CisgICAg
ICAgIG1fcGVuZGluZ1pvb21lZE91dFNjYWxlID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX3BlbmRpbmdab29tZWRPdXRTY2FsZSA9IHNjYWxlOworICAgIGlmIChtX3RpbGluZ01v
ZGUgPT0gRGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBjb21taXRTY2FsZUNoYW5nZSgp
OworfQorICAgIAordm9pZCBUaWxlQ2FjaGU6OmNvbW1pdFNjYWxlQ2hhbmdlKCkKK3sKKyAgICBB
U1NFUlQobV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUgfHwgbV9wZW5kaW5nU2NhbGUpOworICAgIEFT
U0VSVChtX3RpbGluZ01vZGUgIT0gRGlzYWJsZWQpOworICAgIAorICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3RpbGVNdXRleCk7CisKKyAgICBpZiAobV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUpIHsK
KyAgICAgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+c2V0U2NhbGUobV9wZW5kaW5nWm9vbWVkT3V0
U2NhbGUpOworICAgICAgICBtX3BlbmRpbmdab29tZWRPdXRTY2FsZSA9IDA7CisgICAgfQorICAg
IAorICAgIGlmICghbV9rZWVwc1pvb21lZE91dFRpbGVzKSB7CisgICAgICAgIEFTU0VSVChhY3Rp
dmVUaWxlR3JpZCgpID09IG1fem9vbWVkT3V0VGlsZUdyaWQpOworICAgICAgICBpZiAobV9wZW5k
aW5nU2NhbGUpIHsKKyAgICAgICAgICAgIG1fY3VycmVudFNjYWxlID0gbV9wZW5kaW5nU2NhbGU7
CisgICAgICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5zZXRTY2FsZShtX2N1cnJlbnRTY2Fs
ZSk7CisgICAgICAgIH0KKyAgICAgICAgbV9wZW5kaW5nU2NhbGUgPSAwOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKG1fcGVuZGluZ1NjYWxlKSB7CisgICAgICAgIG1fY3VycmVu
dFNjYWxlID0gbV9wZW5kaW5nU2NhbGU7CisgICAgICAgIG1fcGVuZGluZ1NjYWxlID0gMDsKKyAg
ICB9CisKKyAgICBpZiAobV9jdXJyZW50U2NhbGUgIT0gbV96b29tZWRPdXRUaWxlR3JpZC0+c2Nh
bGUoKSkgeworICAgICAgICBpZiAoIW1fem9vbWVkSW5UaWxlR3JpZCkgeworICAgICAgICAgICAg
bV96b29tZWRJblRpbGVHcmlkID0gVGlsZUdyaWQ6OmNyZWF0ZSh0aGlzLCBtX3RpbGVTaXplKTsK
KyAgICAgICAgICAgIFtob3N0TGF5ZXIoKSBhZGRTdWJsYXllcjptX3pvb21lZEluVGlsZUdyaWQt
PnRpbGVIb3N0TGF5ZXIoKV07CisgICAgICAgICAgICBob3N0TGF5ZXJTaXplQ2hhbmdlZCgpOwor
ICAgICAgICB9CisgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+c2V0U2NhbGUobV9jdXJyZW50
U2NhbGUpOworICAgIH0KKworICAgIC8vIEtlZXAgdGhlIGN1cnJlbnQgb3JkZXJpbmcgZHVyaW5n
IHpvb21pbmcuCisgICAgaWYgKG1fdGlsaW5nTW9kZSAhPSBab29taW5nKQorICAgICAgICBicmlu
Z0FjdGl2ZVRpbGVHcmlkVG9Gcm9udCgpOworCisgICAgYWRqdXN0VGlsZUdyaWRUcmFuc2Zvcm1z
KCk7CisgICAgbGF5b3V0VGlsZXMoKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmJyaW5nQWN0aXZl
VGlsZUdyaWRUb0Zyb250KCkKK3sKKyAgICBUaWxlR3JpZCogYWN0aXZlR3JpZCA9IGFjdGl2ZVRp
bGVHcmlkKCk7CisgICAgVGlsZUdyaWQqIG90aGVyR3JpZCA9IGluYWN0aXZlVGlsZUdyaWQoKTsK
KyAgICBpZiAoIW90aGVyR3JpZCkKKyAgICAgICAgcmV0dXJuOworICAgIENBTGF5ZXIqIGZyb250
TGF5ZXIgPSBhY3RpdmVHcmlkLT50aWxlSG9zdExheWVyKCk7CisgICAgQ0FMYXllciogb3RoZXJM
YXllciA9IG90aGVyR3JpZC0+dGlsZUhvc3RMYXllcigpOworICAgIFtob3N0TGF5ZXIoKSBpbnNl
cnRTdWJsYXllcjpmcm9udExheWVyIGFib3ZlOm90aGVyTGF5ZXJdOworfQorICAgIAordm9pZCBU
aWxlQ2FjaGU6OmFkanVzdFRpbGVHcmlkVHJhbnNmb3JtcygpCit7CisgICAgQ0FMYXllciogem9v
bWVkT3V0SG9zdExheWVyID0gbV96b29tZWRPdXRUaWxlR3JpZC0+dGlsZUhvc3RMYXllcigpOwor
ICAgIGZsb2F0IHRyYW5zZm9ybVNjYWxlID0gY3VycmVudFNjYWxlKCkgLyB6b29tZWRPdXRTY2Fs
ZSgpOworICAgIFt6b29tZWRPdXRIb3N0TGF5ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RN
YWtlU2NhbGUodHJhbnNmb3JtU2NhbGUsIHRyYW5zZm9ybVNjYWxlLCAxLjBmKV07CisgICAgbV96
b29tZWRPdXRUaWxlR3JpZC0+dXBkYXRlSG9zdExheWVyU2l6ZSgpOworfQorCit2b2lkIFRpbGVD
YWNoZTo6bGF5b3V0VGlsZXMoKQoreworICAgIGlmIChtX2hhc1BlbmRpbmdMYXlvdXRUaWxlcykK
KyAgICAgICAgcmV0dXJuOworICAgIG1faGFzUGVuZGluZ0xheW91dFRpbGVzID0gdHJ1ZTsKKwor
ICAgIFRpbGVDYWNoZVRvbWJzdG9uZSAqdG9tYnN0b25lID0gbV90b21ic3RvbmUuZ2V0KCk7Cisg
ICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlmIChbdG9tYnN0b25lIGlzRGVhZF0pCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIG1faGFzUGVuZGluZ0xheW91dFRpbGVzID0gZmFsc2U7
CisgICAgICAgIGRvTGF5b3V0VGlsZXMoKTsKKyAgICB9KTsKK30KKwordm9pZCBUaWxlQ2FjaGU6
OmxheW91dFRpbGVzTm93KCkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2Fi
bGVkKCkpOworCisgICAgLy8gbGF5b3V0VGlsZXNOb3coKSBpcyBjYWxsZWQgYWZ0ZXIgYSB6b29t
LCB3aGlsZSB0aGUgdGlsZSBtb2RlIGlzIHN0aWxsIHNldCB0byBab29taW5nLgorICAgIC8vIElm
IHdlIGNoZWNrZWQgZm9yIGlzVGlsZUNyZWF0aW9uU3VzcGVuZGVkIGhlcmUsIHRoYXQgd291bGQg
Y2F1c2UgPHJkYXI6Ly9wcm9ibGVtLzg0MzQxMTI+IChQYWdlIGZsYXNoZXMgYWZ0ZXIgem9vbWlu
ZyBpbi9vdXQpLgorICAgIGlmIChtX3RpbGluZ01vZGUgPT0gRGlzYWJsZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICAvLyBGSVhNRTogbGF5b3V0VGlsZXNOb3cgc2hvdWxkIGJlIGNhbGxl
ZCBhZnRlciBzdGF0ZSBoYXMgYmVlbiBzZXQgdG8gbm9uLXpvb21pbmcgYW5kIHRoZSBhY3RpdmUg
Z3JpZCBpcyB0aGUgZmluYWwgb25lLiAKKyAgICAvLyBGaXggdGhpcyBpbiBVSUtpdCBzaWRlIChw
ZXJoYXBzIGFsc28gZ2V0dGluZyByaWQgb2YgdGhpcyBjYWxsKSBhbmQgcmVtb3ZlIHRoaXMgY29k
ZSBhZnRlcndhcmRzLgorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS85NjcyOTkzPgorICAgIFRpbGlu
Z01vZGUgc2F2ZWRUaWxpbmdNb2RlID0gbV90aWxpbmdNb2RlOworICAgIGlmIChtX3RpbGluZ01v
ZGUgPT0gWm9vbWluZykKKyAgICAgICAgbV90aWxpbmdNb2RlID0gTWluaW1hbDsKKworICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAgVGlsZUdyaWQqIGFjdGl2ZUdyaWQg
PSBhY3RpdmVUaWxlR3JpZCgpOworICAgIGlmIChhY3RpdmVHcmlkLT5jaGVja0RvU2luZ2xlVGls
ZUxheW91dCgpKSB7CisgICAgICAgIG1fdGlsaW5nTW9kZSA9IHNhdmVkVGlsaW5nTW9kZTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjcmVhdGVUaWxlc0luQWN0aXZlR3JpZChDb3ZlclZp
c2libGVPbmx5KTsKKyAgICBtX3RpbGluZ01vZGUgPSBzYXZlZFRpbGluZ01vZGU7Cit9CisKK3Zv
aWQgVGlsZUNhY2hlOjpsYXlvdXRUaWxlc05vd0ZvclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisKKyAgICBhY3RpdmVUaWxlR3JpZCgpLT5hZGRU
aWxlc0NvdmVyaW5nUmVjdChyZWN0KTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OnJlbW92ZUFsbE5v
blZpc2libGVUaWxlcygpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsK
KyAgICByZW1vdmVBbGxOb25WaXNpYmxlVGlsZXNJbnRlcm5hbCgpOworfQorCit2b2lkIFRpbGVD
YWNoZTo6cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzSW50ZXJuYWwoKQoreworICAgIFRpbGVHcmlk
KiBhY3RpdmVHcmlkID0gYWN0aXZlVGlsZUdyaWQoKTsKKyAgICBpZiAoa2VlcHNab29tZWRPdXRU
aWxlcygpICYmIGFjdGl2ZUdyaWQgPT0gbV96b29tZWRJblRpbGVHcmlkICYmIGFjdGl2ZUdyaWQt
Pmhhc1RpbGVzKCkpCisgICAgICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPmRyb3BBbGxUaWxlcygp
OworCisgICAgSW50UmVjdCBhY3RpdmVUaWxlQm91bmRzID0gYWN0aXZlR3JpZC0+Ym91bmRzKCk7
CisgICAgaWYgKGFjdGl2ZVRpbGVCb3VuZHMud2lkdGgoKSA8PSBtX3RpbGVTaXplLndpZHRoKCkg
JiYgYWN0aXZlVGlsZUJvdW5kcy5oZWlnaHQoKSA8PSBtX3RpbGVTaXplLmhlaWdodCgpKSB7Cisg
ICAgICAgIC8vIElmIHRoZSB2aWV3IGlzIHNtYWxsZXIgdGhhbiBhIHRpbGUsIGtlZXAgdGhlIHRp
bGUgZXZlbiBpZiBpdCBpcyBub3QgdmlzaWJsZS4KKyAgICAgICAgYWN0aXZlR3JpZC0+ZHJvcFRp
bGVzT3V0c2lkZVJlY3QoYWN0aXZlVGlsZUJvdW5kcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBhY3RpdmVHcmlkLT5kcm9wVGlsZXNPdXRzaWRlUmVjdChhY3RpdmVHcmlkLT52aXNp
YmxlUmVjdCgpKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OnJlbW92ZUFsbFRpbGVzKCkKK3sKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAgIG1fem9vbWVkT3V0VGlsZUdy
aWQtPmRyb3BBbGxUaWxlcygpOworICAgIGlmIChtX3pvb21lZEluVGlsZUdyaWQpCisgICAgICAg
IG1fem9vbWVkSW5UaWxlR3JpZC0+ZHJvcEFsbFRpbGVzKCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hl
OjpyZW1vdmVGb3JlZ3JvdW5kVGlsZXMoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Rp
bGVNdXRleCk7CisgICAgaWYgKCFrZWVwc1pvb21lZE91dFRpbGVzKCkpCisgICAgICAgIG1fem9v
bWVkT3V0VGlsZUdyaWQtPmRyb3BBbGxUaWxlcygpOworICAgIGlmIChtX3pvb21lZEluVGlsZUdy
aWQpCisgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+ZHJvcEFsbFRpbGVzKCk7Cit9CisKK3Zv
aWQgVGlsZUNhY2hlOjpzZXRDb250ZW50UmVwbGFjZW1lbnRJbWFnZShSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gY29udGVudFJlcGxhY2VtZW50SW1hZ2UpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2VNdXRleCk7CisgICAgbV9jb250ZW50UmVwbGFjZW1l
bnRJbWFnZSA9IGNvbnRlbnRSZXBsYWNlbWVudEltYWdlOworfQorCitSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gVGlsZUNhY2hlOjpjb250ZW50UmVwbGFjZW1lbnRJbWFnZSgpIGNvbnN0Cit7CisgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2VNdXRleCk7CisgICAg
cmV0dXJuIG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2U7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpz
ZXRUaWxlQm9yZGVyc1Zpc2libGUoYm9vbCBmbGFnKQoreworICAgIGlmIChmbGFnID09IG1fdGls
ZUJvcmRlcnNWaXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RpbGVCb3JkZXJzVmlz
aWJsZSA9IGZsYWc7CisgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+dXBkYXRlVGlsZUJvcmRlclZp
c2liaWxpdHkoKTsKKyAgICBpZiAobV96b29tZWRJblRpbGVHcmlkKQorICAgICAgICBtX3pvb21l
ZEluVGlsZUdyaWQtPnVwZGF0ZVRpbGVCb3JkZXJWaXNpYmlsaXR5KCk7Cit9CisKK3ZvaWQgVGls
ZUNhY2hlOjpzZXRUaWxlUGFpbnRDb3VudGVyc1Zpc2libGUoYm9vbCBmbGFnKQoreworICAgIG1f
dGlsZVBhaW50Q291bnRlcnNWaXNpYmxlID0gZmxhZzsKKyAgICAvLyBUaGUgbnVtYmVycyB3aWxs
IHNob3cgdXAgdGhlIG5leHQgdGltZSB0aGUgdGlsZXMgcGFpbnQuCit9CisKK3ZvaWQgVGlsZUNh
Y2hlOjpmaW5pc2hlZENyZWF0aW5nVGlsZXMoYm9vbCBkaWRDcmVhdGVUaWxlcywgYm9vbCBjcmVh
dGVNb3JlKQoreworICAgIC8vIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYWxsIHRpbGVzIGFyZSBz
aG93aW5nIHRoZSBzYW1lIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQuCisgICAgaWYgKGRpZENyZWF0
ZVRpbGVzICYmICFtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgZmx1c2hT
YXZlZERpc3BsYXlSZWN0cygpOworCisgICAgaWYgKGtlZXBzWm9vbWVkT3V0VGlsZXMoKSkgewor
ICAgICAgICBpZiAobV96b29tZWRJblRpbGVHcmlkICYmIGFjdGl2ZVRpbGVHcmlkKCkgPT0gbV96
b29tZWRPdXRUaWxlR3JpZCAmJiBtX3RpbGluZ01vZGUgIT0gWm9vbWluZyAmJiBtX3pvb21lZElu
VGlsZUdyaWQtPmhhc1RpbGVzKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgQ0EgdHJhbnNhY3Rp
b24gd2lsbCBjb3ZlciB0aGUgc2NyZWVuIHdpdGggdG9wIGxldmVsIHRpbGVzLgorICAgICAgICAg
ICAgLy8gV2UgY2FuIHJlbW92ZSB6b29tZWQtaW4gdGlsZXMgd2l0aG91dCBmbGFzaGluZy4KKyAg
ICAgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+ZHJvcEFsbFRpbGVzKCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoYWN0aXZlVGlsZUdyaWQoKSA9PSBtX3pvb21lZEluVGlsZUdyaWQpIHsKKyAgICAg
ICAgICAgIC8vIFBhc3MgdGhlIG1pbmltdW0gcG9zc2libGUgZGlzdGFuY2UgdG8gY29uc2lkZXIg
YWxsIHRpbGVzLCBldmVuIHZpc2libGUgb25lcy4KKyAgICAgICAgICAgIG1fem9vbWVkT3V0VGls
ZUdyaWQtPmRyb3BEaXN0YW50VGlsZXMoMCwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpt
aW4oKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBLZWVwIGNyZWF0aW5nIHRpbGVzIHVu
dGlsIHRoZSB3aG9sZSBjb3ZlclJlY3QgaXMgY292ZXJlZC4KKyAgICBpZiAoY3JlYXRlTW9yZSkK
KyAgICAgICAgbV90aWxlQ3JlYXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQg
VGlsZUNhY2hlOjp0aWxlQ3JlYXRpb25UaW1lckZpcmVkKFRpbWVyPFRpbGVDYWNoZT4qKQorewor
ICAgIGlmIChpc1RpbGVDcmVhdGlvblN1c3BlbmRlZCgpKQorICAgICAgICByZXR1cm47CisgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKKyAgICBjcmVhdGVUaWxlc0luQWN0aXZl
R3JpZChDb3ZlclNwZWN1bGF0aXZlKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmNyZWF0ZVRpbGVz
SW5BY3RpdmVHcmlkKFN5bmNocm9ub3VzVGlsZUNyZWF0aW9uTW9kZSBtb2RlKQoreworICAgIGlm
IChtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5oYXNSZWNlaXZlZE1lbW9yeVByZXNzdXJlKCkpIHsK
KyAgICAgICAgTE9HKE1lbW9yeVByZXNzdXJlLCAiVW5kZXIgbWVtb3J5IHByZXNzdXJlIGF0OiAl
cyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgICAgICByZW1vdmVBbGxOb25WaXNpYmxlVGls
ZXNJbnRlcm5hbCgpOworICAgIH0KKyAgICBhY3RpdmVUaWxlR3JpZCgpLT5jcmVhdGVUaWxlcyht
b2RlKTsKK30KKwordW5zaWduZWQgVGlsZUNhY2hlOjp0aWxlQ2FwYWNpdHlGb3JHcmlkKFRpbGVH
cmlkKiBncmlkKQoreworICAgIHN0YXRpYyB1bnNpZ25lZCBjYXBhY2l0eTsKKyAgICBpZiAoIWNh
cGFjaXR5KSB7CisgICAgICAgIHNpemVfdCB0b3RhbE1lbW9yeSA9IHN5c3RlbVRvdGFsTWVtb3J5
KCk7CisgICAgICAgIHRvdGFsTWVtb3J5IC89IDEwMjQgKiAxMDI0OworICAgICAgICBpZiAodG90
YWxNZW1vcnkgPj0gMTAyNCkKKyAgICAgICAgICAgIGNhcGFjaXR5ID0gMTI4ICogMTAyNCAqIDEw
MjQ7CisgICAgICAgIGVsc2UgaWYgKHRvdGFsTWVtb3J5ID49IDUxMikKKyAgICAgICAgICAgIGNh
cGFjaXR5ID0gNjQgKiAxMDI0ICogMTAyNDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2Fw
YWNpdHkgPSAzMiAqIDEwMjQgKiAxMDI0OworICAgIH0KKworICAgIGludCBncmlkQ2FwYWNpdHk7
CisKKyAgICBpbnQgbWVtb3J5TGV2ZWwgPSBzeXN0ZW1NZW1vcnlMZXZlbCgpOworICAgIGlmICht
ZW1vcnlMZXZlbCA8IDE1KQorICAgICAgICBncmlkQ2FwYWNpdHkgPSBjYXBhY2l0eSAvIDQ7Cisg
ICAgZWxzZSBpZiAobWVtb3J5TGV2ZWwgPCAyMCkKKyAgICAgICAgZ3JpZENhcGFjaXR5ID0gY2Fw
YWNpdHkgLyAyOworICAgIGVsc2UgaWYgKG1lbW9yeUxldmVsIDwgMzApIAorICAgICAgICBncmlk
Q2FwYWNpdHkgPSBjYXBhY2l0eSAqIDMgLyA0OworICAgIGVsc2UKKyAgICAgICAgZ3JpZENhcGFj
aXR5ID0gY2FwYWNpdHk7CisKKyAgICBpZiAoa2VlcHNab29tZWRPdXRUaWxlcygpICYmIGdyaWQg
PT0gbV96b29tZWRPdXRUaWxlR3JpZCkgeworICAgICAgICBpZiAoYWN0aXZlVGlsZUdyaWQoKSA9
PSBtX3pvb21lZE91dFRpbGVHcmlkKQorICAgICAgICAgICAgcmV0dXJuIGdyaWRDYXBhY2l0eTsK
KyAgICAgICAgcmV0dXJuIGdyaWRDYXBhY2l0eSAvIDQ7CisgICAgfQorICAgIHJldHVybiBncmlk
Q2FwYWNpdHkgKiAzIC8gNDsKK30KKworQ29sb3IgVGlsZUNhY2hlOjpjb2xvckZvckdyaWRUaWxl
Qm9yZGVyKFRpbGVHcmlkKiBncmlkKSBjb25zdAoreworICAgIGlmIChncmlkID09IG1fem9vbWVk
T3V0VGlsZUdyaWQpCisgICAgICAgIHJldHVybiBDb2xvciguM2YsIC4wZiwgMC40ZiwgMC41Zik7
CisKKyAgICByZXR1cm4gQ29sb3IoLjBmLCAuMGYsIDAuNGYsIDAuNWYpOworfQorCitzdGF0aWMg
Ym9vbCBzaG91bGRSZXBhaW50SW5QaWVjZXMoY29uc3QgQ0dSZWN0JiBkaXJ0eVJlY3QsIENHU1Jl
Z2lvbk9iaiBkaXJ0eVJlZ2lvbiwgQ0dGbG9hdCBjb250ZW50c1NjYWxlKQoreworICAgIC8vIEVz
dGltYXRlIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCB1c2UgdGhlIHVuaW9uZWQgcmVjdCBvciB0
aGUgaW5kaXZpZHVhbCByZWN0cy4KKyAgICAvLyBXZSBkbyB0aGlzIGJ5IGNvbXB1dGluZyB0aGUg
cGVyY2VudGFnZSBvZiAid2FzdGVkIHNwYWNlIiBpbiB0aGUgdW5pb24uIElmIHRoYXQgd2FzdGVk
IHNwYWNlCisgICAgLy8gaXMgdG9vIGxhcmdlLCB0aGVuIHdlIHdpbGwgZG8gaW5kaXZpZHVhbCBy
ZWN0IHBhaW50aW5nIGluc3RlYWQuCisgICAgZmxvYXQgc2luZ2xlUGl4ZWxzID0gMDsKKyAgICB1
bnNpZ25lZCByZWN0Q291bnQgPSAwOworCisgICAgQ0dTUmVnaW9uRW51bWVyYXRvck9iaiBlbnVt
ZXJhdG9yID0gQ0dTUmVnaW9uRW51bWVyYXRvcihkaXJ0eVJlZ2lvbik7CisgICAgQ0dSZWN0ICpz
dWJSZWN0OworICAgIHdoaWxlICgoc3ViUmVjdCA9IENHU05leHRSZWN0KGVudW1lcmF0b3IpKSkg
eworICAgICAgICArK3JlY3RDb3VudDsKKyAgICAgICAgc2luZ2xlUGl4ZWxzICs9IHN1YlJlY3Qt
PnNpemUud2lkdGggKiBzdWJSZWN0LT5zaXplLmhlaWdodDsKKyAgICB9CisgICAgc2luZ2xlUGl4
ZWxzIC89IChjb250ZW50c1NjYWxlICogY29udGVudHNTY2FsZSk7CisgICAgQ0dTUmVsZWFzZVJl
Z2lvbkVudW1lcmF0b3IoZW51bWVyYXRvcik7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjUmVjdFRo
cmVzaG9sZCA9IDEwOworICAgIGlmIChyZWN0Q291bnQgPCAyIHx8IHJlY3RDb3VudCA+IGNSZWN0
VGhyZXNob2xkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBmbG9hdCBjV2Fz
dGVkU3BhY2VUaHJlc2hvbGQgPSAwLjUwZjsKKyAgICBmbG9hdCB1bmlvblBpeGVscyA9IGRpcnR5
UmVjdC5zaXplLndpZHRoICogZGlydHlSZWN0LnNpemUuaGVpZ2h0OworICAgIGZsb2F0IHdhc3Rl
ZFNwYWNlID0gMS5mIC0gKHNpbmdsZVBpeGVscyAvIHVuaW9uUGl4ZWxzKTsKKyAgICByZXR1cm4g
d2FzdGVkU3BhY2UgPiBjV2FzdGVkU3BhY2VUaHJlc2hvbGQ7Cit9CisKK3ZvaWQgVGlsZUNhY2hl
OjpkcmF3UmVwbGFjZW1lbnRJbWFnZShUaWxlTGF5ZXIqIGxheWVyLCBDR0NvbnRleHRSZWYgY29u
dGV4dCwgQ0dJbWFnZVJlZiBpbWFnZSkKK3sKKyAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3Io
Y29udGV4dCwgMSwgMSwgMSwgMSk7CisgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgQ0dD
b250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpKTsKKworICAgIENHRmxvYXQgY29udGVu
dHNTY2FsZSA9IFtsYXllciBjb250ZW50c1NjYWxlXTsKKyAgICBDR0NvbnRleHRTY2FsZUNUTShj
b250ZXh0LCAxIC8gY29udGVudHNTY2FsZSwgLTEgLyBjb250ZW50c1NjYWxlKTsKKyAgICBDR1Jl
Y3QgaW1hZ2VSZWN0ID0gQ0dSZWN0TWFrZSgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBD
R0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRl
eHQsIDAsIC1pbWFnZVJlY3Quc2l6ZS5oZWlnaHQpOworICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LCBpbWFnZVJlY3QsIGltYWdlKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmRyYXdXaW5k
b3dDb250ZW50KFRpbGVMYXllciogbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1JlY3Qg
ZGlydHlSZWN0KQoreworICAgIENHUmVjdCBmcmFtZSA9IFtsYXllciBmcmFtZV07CisgICAgV0tG
b250QW50aWFsaWFzaW5nU3RhdGVTYXZlciBmb250QW50aWFsaWFzaW5nU3RhdGUoY29udGV4dCwg
W21fd2luZG93IHVzZU9yaWVudGF0aW9uRGVwZW5kZW50Rm9udEFudGlhbGlhc2luZ10gJiYgW2xh
eWVyIGlzT3BhcXVlXSk7CisgICAgZm9udEFudGlhbGlhc2luZ1N0YXRlLnNldHVwKFtXQUtXaW5k
b3cgaGFzTGFuZHNjYXBlT3JpZW50YXRpb25dKTsKKworICAgIENHU1JlZ2lvbk9iaiBkcmF3UmVn
aW9uID0gKENHU1JlZ2lvbk9iailbbGF5ZXIgcmVnaW9uQmVpbmdEcmF3bl07CisgICAgQ0dGbG9h
dCBjb250ZW50c1NjYWxlID0gW2xheWVyIGNvbnRlbnRzU2NhbGVdOworICAgIGlmIChkcmF3UmVn
aW9uICYmIHNob3VsZFJlcGFpbnRJblBpZWNlcyhkaXJ0eVJlY3QsIGRyYXdSZWdpb24sIGNvbnRl
bnRzU2NhbGUpKSB7CisgICAgICAgIC8vIFVzZSBmaW5lIGdyYWluZWQgcmVwYWludCByZWN0YW5n
bGVzIHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgcGFpbnRlZCBwaXhlbHMuCisgICAgICAgIENH
U1JlZ2lvbkVudW1lcmF0b3JPYmogZW51bWVyYXRvciA9IENHU1JlZ2lvbkVudW1lcmF0b3IoZHJh
d1JlZ2lvbik7CisgICAgICAgIENHUmVjdCAqc3ViUmVjdDsKKyAgICAgICAgd2hpbGUgKChzdWJS
ZWN0ID0gQ0dTTmV4dFJlY3QoZW51bWVyYXRvcikpKSB7CisgICAgICAgICAgICBDR1JlY3QgYWRq
dXN0ZWRTdWJSZWN0ID0gKnN1YlJlY3Q7CisgICAgICAgICAgICBhZGp1c3RlZFN1YlJlY3Qub3Jp
Z2luLnggLz0gY29udGVudHNTY2FsZTsKKyAgICAgICAgICAgIGFkanVzdGVkU3ViUmVjdC5vcmln
aW4ueSA9IGZyYW1lLnNpemUuaGVpZ2h0IC0gKGFkanVzdGVkU3ViUmVjdC5vcmlnaW4ueSArIGFk
anVzdGVkU3ViUmVjdC5zaXplLmhlaWdodCkgLyBjb250ZW50c1NjYWxlOworICAgICAgICAgICAg
YWRqdXN0ZWRTdWJSZWN0LnNpemUud2lkdGggLz0gY29udGVudHNTY2FsZTsKKyAgICAgICAgICAg
IGFkanVzdGVkU3ViUmVjdC5zaXplLmhlaWdodCAvPSBjb250ZW50c1NjYWxlOworCisgICAgICAg
ICAgICBDR1JlY3Qgc3ViUmVjdEluU3VwZXIgPSBbaG9zdExheWVyKCkgY29udmVydFJlY3Q6YWRq
dXN0ZWRTdWJSZWN0IGZyb21MYXllcjpsYXllcl07CisgICAgICAgICAgICBbbV93aW5kb3cgZGlz
cGxheVJlY3Q6c3ViUmVjdEluU3VwZXJdOworICAgICAgICB9CisgICAgICAgIENHU1JlbGVhc2VS
ZWdpb25FbnVtZXJhdG9yKGVudW1lcmF0b3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFNp
bXBsZSByZXBhaW50CisgICAgICAgIENHUmVjdCBkaXJ0eVJlY3RJblN1cGVyID0gW2hvc3RMYXll
cigpIGNvbnZlcnRSZWN0OmRpcnR5UmVjdCBmcm9tTGF5ZXI6bGF5ZXJdOworICAgICAgICBbbV93
aW5kb3cgZGlzcGxheVJlY3Q6ZGlydHlSZWN0SW5TdXBlcl07CisgICAgfQorCisgICAgZm9udEFu
dGlhbGlhc2luZ1N0YXRlLnJlc3RvcmUoKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmRyYXdMYXll
cihUaWxlTGF5ZXIqIGxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICAvLyBUaGUg
d2ViIGxvY2sgdW5sb2NrIG9ic2VydmVyIHJ1bnMgYWZ0ZXIgQ0EgY29tbWl0IG9ic2VydmVyLgor
ICAgIGlmICghV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJEcmF3aW5nIHdpdGhvdXQgaG9sZGluZyB0aGUgd2ViIHRocmVhZCBsb2NrIik7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIFdLU2V0Q3VycmVudEdyYXBo
aWNzQ29udGV4dChjb250ZXh0KTsKKworICAgIENHUmVjdCBkaXJ0eVJlY3QgPSBDR0NvbnRleHRH
ZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCk7CisgICAgQ0dSZWN0IGZyYW1lID0gW2xheWVyIGZy
YW1lXTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgLWZyYW1lLm9yaWdpbi54
LCAtZnJhbWUub3JpZ2luLnkpOworICAgIENHUmVjdCBzY2FsZWRGcmFtZSA9IFtob3N0TGF5ZXIo
KSBjb252ZXJ0UmVjdDpbbGF5ZXIgYm91bmRzXSBmcm9tTGF5ZXI6bGF5ZXJdOworICAgIENHQ29u
dGV4dFNjYWxlQ1RNKGNvbnRleHQsIGZyYW1lLnNpemUud2lkdGggLyBzY2FsZWRGcmFtZS5zaXpl
LndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCAvIHNjYWxlZEZyYW1lLnNpemUuaGVpZ2h0KTsKKwor
ICAgIGlmIChSZXRhaW5QdHI8Q0dJbWFnZT4gY29udGVudFJlcGxhY2VtZW50SW1hZ2UgPSB0aGlz
LT5jb250ZW50UmVwbGFjZW1lbnRJbWFnZSgpKQorICAgICAgICBkcmF3UmVwbGFjZW1lbnRJbWFn
ZShsYXllciwgY29udGV4dCwgY29udGVudFJlcGxhY2VtZW50SW1hZ2UuZ2V0KCkpOworICAgIGVs
c2UKKyAgICAgICAgZHJhd1dpbmRvd0NvbnRlbnQobGF5ZXIsIGNvbnRleHQsIGRpcnR5UmVjdCk7
CisKKyAgICArK2xheWVyLnBhaW50Q291bnQ7CisgICAgaWYgKG1fdGlsZVBhaW50Q291bnRlcnNW
aXNpYmxlKSB7CisgICAgICAgIGNoYXIgdGV4dFsxNl07CisgICAgICAgIHNucHJpbnRmKHRleHQs
IHNpemVvZih0ZXh0KSwgIiVkIiwgbGF5ZXIucGFpbnRDb3VudCk7CisKKyAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKworICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0o
Y29udGV4dCwgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55KTsKKyAgICAgICAgQ0dDb250
ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNhY2hlZENHQ29sb3IoY29sb3JGb3JH
cmlkVGlsZUJvcmRlcihbbGF5ZXIgdGlsZUdyaWRdKSwgQ29sb3JTcGFjZURldmljZVJHQikpOwor
ICAgICAgICAKKyAgICAgICAgQ0dSZWN0IGxhYmVsQm91bmRzID0gW2xheWVyIGJvdW5kc107Cisg
ICAgICAgIGxhYmVsQm91bmRzLnNpemUud2lkdGggPSAxMCArIDEyICogc3RybGVuKHRleHQpOwor
ICAgICAgICBsYWJlbEJvdW5kcy5zaXplLmhlaWdodCA9IDI1OworICAgICAgICBDR0NvbnRleHRG
aWxsUmVjdChjb250ZXh0LCBsYWJlbEJvdW5kcyk7CisKKyAgICAgICAgaWYgKGFjY2VsZXJhdGVk
RHJhd2luZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihj
b250ZXh0LCAxLCAwLCAwLCAwLjRmKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQ0dDb250
ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEsIDEsIDEsIDAuNmYpOworI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Rl
cHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgICAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNv
bnRleHQsIENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKDEsIC0xKSk7CisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVw
cmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgICAgIENHQ29udGV4dFNlbGVjdEZvbnQoY29udGV4
dCwgIkhlbHZldGljYSIsIDI1LCBrQ0dFbmNvZGluZ01hY1JvbWFuKTsKKyAgICAgICAgQ0dDb250
ZXh0U2hvd1RleHRBdFBvaW50KGNvbnRleHQsIGxhYmVsQm91bmRzLm9yaWdpbi54ICsgMywgbGFi
ZWxCb3VuZHMub3JpZ2luLnkgKyAyMCwgdGV4dCwgc3RybGVuKHRleHQpKTsKKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwb3AKKyAgICAKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShj
b250ZXh0KTsgICAgICAgIAorICAgIH0KKworICAgIFdBS1ZpZXcqIHZpZXcgPSBbbV93aW5kb3cg
Y29udGVudFZpZXddOworICAgIFt2aWV3IHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX2Rpc3Bh
dGNoVGlsZURpZERyYXc6KSB3aXRoT2JqZWN0OmxheWVyIGFmdGVyRGVsYXk6MC4wXTsKK30KKwor
dm9pZCBUaWxlQ2FjaGU6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgc2V0TmVlZHNEaXNwbGF5
SW5SZWN0KEludFJlY3QoMCwgMCwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2No
ZWR1bGVMYXllckZsdXNoRm9yUGVuZGluZ1JlcGFpbnQoKQoreworICAgIFdBS1ZpZXcqIHZpZXcg
PSBbbV93aW5kb3cgY29udGVudFZpZXddOworICAgIFt2aWV3IF9zY2hlZHVsZUxheWVyRmx1c2hG
b3JQZW5kaW5nVGlsZUNhY2hlUmVwYWludF07Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX3NhdmVkRGlzcGxheVJlY3RNdXRleCk7CisgICAgYm9vbCBhZGRlZEZpcnN0
UmVjdCA9IG1fc2F2ZWREaXNwbGF5UmVjdHMuaXNFbXB0eSgpOworICAgIG1fc2F2ZWREaXNwbGF5
UmVjdHMuYXBwZW5kKGRpcnR5UmVjdCk7CisgICAgaWYgKCFhZGRlZEZpcnN0UmVjdCkKKyAgICAg
ICAgcmV0dXJuOworICAgIC8vIENvbXBvc2l0aW5nIGxheWVyIGZsdXNoIHdpbGwgY2FsbCBiYWNr
IHRvIGRvUGVuZGluZ1JlcGFpbnRzKCkuIFRoZSBmbHVzaCBtYXkgYmUgdGhyb3R0bGVkIGFuZCBu
b3QgaGFwcGVuIGltbWVkaWF0ZWx5LgorICAgIHNjaGVkdWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdS
ZXBhaW50KCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjppbnZhbGlkYXRlVGlsZXMoY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KQoreworICAgIEFTU0VSVCghbV90aWxlTXV0ZXgudHJ5TG9jaygpKTsK
KworICAgIFRpbGVHcmlkKiBhY3RpdmVHcmlkID0gYWN0aXZlVGlsZUdyaWQoKTsKKyAgICBpZiAo
IWtlZXBzWm9vbWVkT3V0VGlsZXMoKSkgeworICAgICAgICBhY3RpdmVHcmlkLT5pbnZhbGlkYXRl
VGlsZXMoZGlydHlSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGbG9hdFJlY3Qg
c2NhbGVkUmVjdCA9IGRpcnR5UmVjdDsKKyAgICBzY2FsZWRSZWN0LnNjYWxlKHpvb21lZE91dFNj
YWxlKCkgLyBjdXJyZW50U2NhbGUoKSk7CisgICAgSW50UmVjdCB6b29tZWRPdXREaXJ0eVJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KHNjYWxlZFJlY3QpOworICAgIGlmIChhY3RpdmVHcmlkID09IG1f
em9vbWVkT3V0VGlsZUdyaWQpIHsKKyAgICAgICAgYm9vbCBkdW1teTsKKyAgICAgICAgSW50UmVj
dCBjb3ZlclJlY3QgPSBtX3pvb21lZE91dFRpbGVHcmlkLT5jYWxjdWxhdGVDb3ZlclJlY3QobV96
b29tZWRPdXRUaWxlR3JpZC0+dmlzaWJsZVJlY3QoKSwgZHVtbXkpOworICAgICAgICAvLyBJbnN0
ZWFkIG9mIHJlcGFpbnRpbmcgYSB0aWxlIG91dHNpZGUgdGhlIGNvdmVyIHJlY3QsIGp1c3QgcmVt
b3ZlIGl0LgorICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9wVGlsZXNCZXR3ZWVuUmVj
dHMoem9vbWVkT3V0RGlydHlSZWN0LCBjb3ZlclJlY3QpOworICAgICAgICBtX3pvb21lZE91dFRp
bGVHcmlkLT5pbnZhbGlkYXRlVGlsZXMoem9vbWVkT3V0RGlydHlSZWN0KTsKKyAgICAgICAgLy8g
V2UgbmVlZCB0byBpbnZhbGlkYXRlIHpvb21lZCBpbiB0aWxlcyBhcyB3ZWxsIHdoaWxlIHpvb21p
bmcsIHNpbmNlCisgICAgICAgIC8vIHdlIGNvdWxkIHN3aXRjaCBiYWNrIHRvIHRoZSB6b29tZWQg
aW4gZ3JpZCB3aXRob3V0IGRyb3BwaW5nIGl0cworICAgICAgICAvLyB0aWxlcy4gIFNlZSA8cmRh
cjovL3Byb2JsZW0vOTk0Njc1OT4uCisgICAgICAgIGlmIChtX3RpbGluZ01vZGUgPT0gWm9vbWlu
ZyAmJiBtX3pvb21lZEluVGlsZUdyaWQpCisgICAgICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQt
PmludmFsaWRhdGVUaWxlcyhkaXJ0eVJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmICghbV96b29tZWRJblRpbGVHcmlkLT5oYXNUaWxlcygpKSB7CisgICAgICAgIC8vIElmIG5v
IHRpbGVzIGhhdmUgYmVlbiBjcmVhdGVkIHlldCBmb3IgdGhlIHpvb21lZCBpbiBncmlkLCB3ZSBj
YW4ndCBkcm9wIHRoZSB6b29tZWQgb3V0IHRpbGVzLgorICAgICAgICBtX3pvb21lZE91dFRpbGVH
cmlkLT5pbnZhbGlkYXRlVGlsZXMoem9vbWVkT3V0RGlydHlSZWN0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9wVGlsZXNJbnRlcnNlY3RpbmdS
ZWN0KHpvb21lZE91dERpcnR5UmVjdCk7CisgICAgbV96b29tZWRJblRpbGVHcmlkLT5pbnZhbGlk
YXRlVGlsZXMoZGlydHlSZWN0KTsKK30KKyAgICAKK2Jvb2wgVGlsZUNhY2hlOjppc1RpbGVDcmVh
dGlvblN1c3BlbmRlZCgpIGNvbnN0IAoreworICAgIHJldHVybiAoIWtlZXBzWm9vbWVkT3V0VGls
ZXMoKSAmJiBtX3RpbGluZ01vZGUgPT0gWm9vbWluZykgfHwgbV90aWxpbmdNb2RlID09IERpc2Fi
bGVkOworfQorCitib29sIFRpbGVDYWNoZTo6aXNUaWxlSW52YWxpZGF0aW9uU3VzcGVuZGVkKCkg
Y29uc3QgCit7IAorICAgIHJldHVybiBtX3RpbGluZ01vZGUgPT0gWm9vbWluZyB8fCBtX3RpbGlu
Z01vZGUgPT0gUGFubmluZyB8fCBtX3RpbGluZ01vZGUgPT0gU2Nyb2xsVG9Ub3AgfHwgbV90aWxp
bmdNb2RlID09IERpc2FibGVkOyAKK30KKwordm9pZCBUaWxlQ2FjaGU6OnVwZGF0ZVRpbGluZ01v
ZGUoKQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSB8fCAhV2ViVGhyZWFkSXNF
bmFibGVkKCkpOworCisgICAgV0FLVmlldyogdmlldyA9IFttX3dpbmRvdyBjb250ZW50Vmlld107
CisKKyAgICBpZiAobV90aWxpbmdNb2RlID09IFpvb21pbmcgfHwgbV90aWxpbmdNb2RlID09IFBh
bm5pbmcgfHwgbV90aWxpbmdNb2RlID09IFNjcm9sbFRvVG9wKSB7CisgICAgICAgIGlmICghbV9k
aWRDYWxsV2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nKSB7CisgICAgICAgICAgICBbdmlldyBf
d2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nXTsKKyAgICAgICAgICAgIG1fZGlkQ2FsbFdpbGxT
dGFydFNjcm9sbGluZ09yWm9vbWluZyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAobV9kaWRDYWxsV2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nKSB7CisgICAg
ICAgICAgICBbdmlldyBfZGlkRmluaXNoU2Nyb2xsaW5nT3Jab29taW5nXTsKKyAgICAgICAgICAg
IG1fZGlkQ2FsbFdpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZyA9IGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmIChtX3RpbGluZ01vZGUgPT0gRGlzYWJsZWQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKKyAgICAgICAg
Y3JlYXRlVGlsZXNJbkFjdGl2ZUdyaWQoQ292ZXJWaXNpYmxlT25seSk7CisKKyAgICAgICAgaWYg
KCFtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50KCk7CisgICAgfQorfQorCit2b2lkIFRpbGVDYWNoZTo6
c2V0VGlsaW5nTW9kZShUaWxpbmdNb2RlIHRpbGluZ01vZGUpCit7CisgICAgaWYgKHRpbGluZ01v
ZGUgPT0gbV90aWxpbmdNb2RlKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCB3YXNab29taW5n
ID0gKG1fdGlsaW5nTW9kZSA9PSBab29taW5nKTsKKyAgICBtX3RpbGluZ01vZGUgPSB0aWxpbmdN
b2RlOworCisgICAgaWYgKChtX3BlbmRpbmdab29tZWRPdXRTY2FsZSB8fCBtX3BlbmRpbmdTY2Fs
ZSkgJiYgbV90aWxpbmdNb2RlICE9IERpc2FibGVkKQorICAgICAgICBjb21taXRTY2FsZUNoYW5n
ZSgpOworICAgIGVsc2UgaWYgKHdhc1pvb21pbmcpIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fdGlsZU11dGV4KTsKKyAgICAgICAgYnJpbmdBY3RpdmVUaWxlR3JpZFRvRnJvbnQoKTsK
KyAgICB9CisKKyAgICBpZiAobV9oYXNQZW5kaW5nVXBkYXRlVGlsaW5nTW9kZSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01vZGUgPSB0cnVlOworCisgICAg
VGlsZUNhY2hlVG9tYnN0b25lICp0b21ic3RvbmUgPSBtX3RvbWJzdG9uZS5nZXQoKTsKKyAgICBX
ZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKFt0b21ic3RvbmUgaXNEZWFkXSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV9oYXNQZW5kaW5nVXBkYXRlVGlsaW5nTW9kZSA9IGZhbHNl
OworICAgICAgICB1cGRhdGVUaWxpbmdNb2RlKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgVGlsZUNh
Y2hlOjpzZXRUaWxpbmdEaXJlY3Rpb24oVGlsaW5nRGlyZWN0aW9uIHRpbGluZ0RpcmVjdGlvbikK
K3sKKyAgICBtX3RpbGluZ0RpcmVjdGlvbiA9IHRpbGluZ0RpcmVjdGlvbjsKK30KKworVGlsZUNh
Y2hlOjpUaWxpbmdEaXJlY3Rpb24gVGlsZUNhY2hlOjp0aWxpbmdEaXJlY3Rpb24oKSBjb25zdAor
eworICAgIHJldHVybiBtX3RpbGluZ0RpcmVjdGlvbjsKK30KKyAgICAKK2Zsb2F0IFRpbGVDYWNo
ZTo6em9vbWVkT3V0U2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3pvb21lZE91dFRpbGVH
cmlkLT5zY2FsZSgpOworfQorCitmbG9hdCBUaWxlQ2FjaGU6OmN1cnJlbnRTY2FsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fY3VycmVudFNjYWxlOworfQorCit2b2lkIFRpbGVDYWNoZTo6ZG9Q
ZW5kaW5nUmVwYWludHMoKQoreworICAgIGlmIChtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc1RpbGVJbnZhbGlkYXRpb25TdXNwZW5kZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7
CisgICAgZmx1c2hTYXZlZERpc3BsYXlSZWN0cygpOworfQorCit2b2lkIFRpbGVDYWNoZTo6Zmx1
c2hTYXZlZERpc3BsYXlSZWN0cygpCit7CisgICAgQVNTRVJUKCFtX3RpbGVNdXRleC50cnlMb2Nr
KCkpOworICAgIEFTU0VSVCghbV9zYXZlZERpc3BsYXlSZWN0cy5pc0VtcHR5KCkpOworCisgICAg
VmVjdG9yPEludFJlY3Q+IHJlY3RzOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fc2F2ZWREaXNwbGF5UmVjdE11dGV4KTsKKyAgICAgICAgbV9zYXZlZERpc3BsYXlSZWN0cy5z
d2FwKHJlY3RzKTsKKyAgICB9CisgICAgc2l6ZV90IHNpemUgPSByZWN0cy5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgbiA9IDA7IG4gPCBzaXplOyArK24pCisgICAgICAgIGludmFsaWRhdGVUaWxl
cyhyZWN0c1tuXSk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRTcGVjdWxhdGl2ZVRpbGVDcmVh
dGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtX2lzU3BlY3VsYXRpdmVUaWxl
Q3JlYXRpb25FbmFibGVkID09IGVuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzU3Bl
Y3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkID0gZW5hYmxlZDsKKyAgICBpZiAobV9pc1NwZWN1
bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCkKKyAgICAgICAgbV90aWxlQ3JlYXRpb25UaW1lci5z
dGFydE9uZVNob3QoMCk7Cit9CisKK2Jvb2wgVGlsZUNhY2hlOjpoYXNQZW5kaW5nRHJhdygpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKTsKK30KKwor
dm9pZCBUaWxlQ2FjaGU6OnByZXBhcmVUb0RyYXcoKQoreworICAgIC8vIFRoaXMgd2lsbCB0cmln
Z2VyIGRvY3VtZW50IHJlbGF5b3V0IGlmIG5lZWRlZC4KKyAgICBbW21fd2luZG93IGNvbnRlbnRW
aWV3XSB2aWV3V2lsbERyYXddOworCisgICAgaWYgKCFtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1w
dHkoKSkgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAgICAg
ICBmbHVzaFNhdmVkRGlzcGxheVJlY3RzKCk7CisgICAgfQorfQorCit2b2lkIFRpbGVDYWNoZTo6
c2V0TGF5ZXJQb29sQ2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHkpCit7CisgICAgVGlsZUxheWVy
UG9vbDo6c2hhcmVkUG9vbCgpLT5zZXRDYXBhY2l0eShjYXBhY2l0eSk7Cit9CisKK3ZvaWQgVGls
ZUNhY2hlOjpkcmFpbkxheWVyUG9vbCgpCit7CisgICAgVGlsZUxheWVyUG9vbDo6c2hhcmVkUG9v
bCgpLT5kcmFpbigpOworfQorCit2b2lkIFRpbGVDYWNoZTo6ZHVtcFRpbGVzKCkKK3sKKyAgICBO
U0xvZyhAIj09PT09PT09PT09PT09PT09Iik7CisgICAgTlNMb2coQCJaT09NRUQgT1VUIik7Cisg
ICAgaWYgKG1fem9vbWVkT3V0VGlsZUdyaWQgPT0gYWN0aXZlVGlsZUdyaWQoKSkKKyAgICAgICAg
TlNMb2coQCI8QUNUSVZFPiIpOworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPmR1bXBUaWxlcygp
OworICAgIE5TTG9nKEAiPT09PT09PT09PT09PT09PT0iKTsKKyAgICBpZiAobV96b29tZWRJblRp
bGVHcmlkKSB7CisgICAgICAgIE5TTG9nKEAiWk9PTUVEIElOIik7CisgICAgICAgIGlmIChtX3pv
b21lZEluVGlsZUdyaWQgPT0gYWN0aXZlVGlsZUdyaWQoKSkKKyAgICAgICAgICAgIE5TTG9nKEAi
PEFDVElWRT4iKTsKKyAgICAgICAgbV96b29tZWRJblRpbGVHcmlkLT5kdW1wVGlsZXMoKTsKKyAg
ICAgICAgTlNMb2coQCI9PT09PT09PT09PT09PT09PSIpOworICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVGlsZUdyaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTk5MGZjY2RkNjk3MGZkOThhZjg1ZWVm
NDNjMDNjNWJhMzdiZWUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1RpbGVHcmlkLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFRpbGVHcmlkX2gKKyNkZWZpbmUgVGlsZUdyaWRfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisj
aW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRQb2ludEhhc2guaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRpbGVDYWNoZS5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
KyNkZWZpbmUgTE9HX1RJTElORyAwCisKK0BjbGFzcyBDQUxheWVyOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFRpbGVHcmlkVGlsZTsKKworY2xhc3MgVGlsZUdyaWQgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFRpbGVHcmlkKTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludFBv
aW50IFRpbGVJbmRleDsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPFRpbGVHcmlkPiBjcmVhdGUo
VGlsZUNhY2hlKiBjYWNoZSwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpIHsgcmV0dXJuIGFkb3B0
UHRyKG5ldyBUaWxlR3JpZChjYWNoZSwgdGlsZVNpemUpKTsgfQorCisgICAgflRpbGVHcmlkKCk7
CisKKyAgICBUaWxlQ2FjaGUqIHRpbGVDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZUNhY2hl
OyB9CisKKyAgICBDQUxheWVyICp0aWxlSG9zdExheWVyKCkgY29uc3Q7CisgICAgSW50UmVjdCBi
b3VuZHMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCB0aWxlQ291bnQoKSBjb25zdDsKKworICAgIGZs
b2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQorICAgIHZvaWQgc2V0U2NhbGUo
ZmxvYXQgc2NhbGUpIHsgbV9zY2FsZSA9IHNjYWxlOyB9CisKKyAgICBJbnRSZWN0IHZpc2libGVS
ZWN0KCkgY29uc3Q7CisKKyAgICB2b2lkIGNyZWF0ZVRpbGVzKFRpbGVDYWNoZTo6U3luY2hyb25v
dXNUaWxlQ3JlYXRpb25Nb2RlKTsKKworICAgIHZvaWQgZHJvcEFsbFRpbGVzKCk7CisgICAgdm9p
ZCBkcm9wSW52YWxpZFRpbGVzKCk7CisgICAgdm9pZCBkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25z
dCBJbnRSZWN0Jik7CisgICAgdm9pZCBkcm9wVGlsZXNJbnRlcnNlY3RpbmdSZWN0KGNvbnN0IElu
dFJlY3QmKTsKKyAgICAvLyBEcm9wcyB0aWxlcyB0aGF0IGludGVyc2VjdCBkcm9wUmVjdCBidXQg
ZG8gbm90IGludGVyc2VjdCBrZWVwUmVjdC4KKyAgICB2b2lkIGRyb3BUaWxlc0JldHdlZW5SZWN0
cyhjb25zdCBJbnRSZWN0JiBkcm9wUmVjdCwgY29uc3QgSW50UmVjdCYga2VlcFJlY3QpOworICAg
IGJvb2wgZHJvcERpc3RhbnRUaWxlcyh1bnNpZ25lZCB0aWxlc05lZWRlZCwgZG91YmxlIHNob3J0
ZXN0RGlzdGFuY2UpOworCisgICAgdm9pZCBhZGRUaWxlc0NvdmVyaW5nUmVjdChjb25zdCBJbnRS
ZWN0Jik7CisKKyAgICBib29sIHRpbGVzQ292ZXIoY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAg
IHZvaWQgY2VudGVyVGlsZUdyaWRPcmlnaW4oY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOwor
ICAgIHZvaWQgaW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisKKyAg
ICB2b2lkIHVwZGF0ZVRpbGVPcGFjaXR5KCk7CisgICAgdm9pZCB1cGRhdGVUaWxlQm9yZGVyVmlz
aWJpbGl0eSgpOworICAgIHZvaWQgdXBkYXRlSG9zdExheWVyU2l6ZSgpOworICAgIGJvb2wgY2hl
Y2tEb1NpbmdsZVRpbGVMYXlvdXQoKTsKKworICAgIGJvb2wgaGFzVGlsZXMoKSBjb25zdCB7IHJl
dHVybiAhbV90aWxlcy5pc0VtcHR5KCk7IH0KKworICAgIEludFJlY3QgY2FsY3VsYXRlQ292ZXJS
ZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBib29sJiBjZW50ZXJHcmlkKTsKKworICAg
IC8vIExvZ2dpbmcKKyAgICB2b2lkIGR1bXBUaWxlcygpOworCitwcml2YXRlOgorICAgIGRvdWJs
ZSB0aWxlRGlzdGFuY2UyKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0
JiB0aWxlUmVjdCkgY29uc3Q7CisgICAgdW5zaWduZWQgdGlsZUJ5dGVTaXplKCkgY29uc3Q7CisK
KyAgICB2b2lkIGFkZFRpbGVGb3JJbmRleChjb25zdCBUaWxlSW5kZXgmKTsKKworICAgIFBhc3NS
ZWZQdHI8VGlsZUdyaWRUaWxlPiB0aWxlRm9ySW5kZXgoY29uc3QgVGlsZUluZGV4JikgY29uc3Q7
CisgICAgSW50UmVjdCB0aWxlUmVjdEZvckluZGV4KGNvbnN0IFRpbGVJbmRleCYpIGNvbnN0Owor
ICAgIFBhc3NSZWZQdHI8VGlsZUdyaWRUaWxlPiB0aWxlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQm
KSBjb25zdDsKKyAgICBUaWxlSW5kZXggdGlsZUluZGV4Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQm
KSBjb25zdDsKKworICAgIEludFJlY3QgYWRqdXN0Q292ZXJSZWN0Rm9yUGFnZUJvdW5kcyhjb25z
dCBJbnRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBzaG91bGRVc2VNaW5pbWFsVGlsZUNvdmVyYWdl
KCkgY29uc3Q7CisKK3ByaXZhdGU6ICAgICAgICAKKyAgICBUaWxlR3JpZChUaWxlQ2FjaGUqLCBj
b25zdCBJbnRTaXplJik7CisKKyAgICBUaWxlQ2FjaGUqIG1fdGlsZUNhY2hlOworICAgIFJldGFp
blB0cjxDQUxheWVyPiBtX3RpbGVIb3N0TGF5ZXI7CisKKyAgICBJbnRQb2ludCBtX29yaWdpbjsK
KyAgICBJbnRTaXplIG1fdGlsZVNpemU7CisKKyAgICBmbG9hdCBtX3NjYWxlOworCisgICAgdHlw
ZWRlZiBIYXNoTWFwPFRpbGVJbmRleCwgUmVmUHRyPFRpbGVHcmlkVGlsZT4+IFRpbGVNYXA7Cisg
ICAgVGlsZU1hcCBtX3RpbGVzOworCisgICAgSW50UmVjdCBtX3ZhbGlkQm91bmRzOworfTsKKwor
c3RhdGljIGlubGluZSBJbnRQb2ludCB0b3BMZWZ0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgcmV0dXJuIHJlY3QubG9jYXRpb24oKTsKK30KKworc3RhdGljIGlubGluZSBJbnRQb2ludCBi
b3R0b21SaWdodChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBJbnRQb2ludChy
ZWN0Lm1heFgoKSAtIDEsIHJlY3QubWF4WSgpIC0gMSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKyNlbmRpZiAvLyBUaWxlR3JpZF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWQubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2QxNzAxMzIx
ZTljNzQwZTQzNzI5NWRhNGNlY2Q2MzAwZmZjZDRlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZC5tbQpAQCAtMCwwICsxLDU2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaWxlR3JpZC5oIgorCisj
aWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCisj
aW5jbHVkZSAiU3lzdGVtTWVtb3J5LmgiCisjaW5jbHVkZSAiVGlsZUdyaWRUaWxlLmgiCisjaW5j
bHVkZSAiVGlsZUxheWVyLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyUG9vbC5oIgorI2luY2x1ZGUg
IldBS1dpbmRvdy5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3NQcml2YXRl
Lmg+CisjaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW5jbHVkZSA8UXVhcnR6
Q29yZS9RdWFydHpDb3JlUHJpdmF0ZS5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRl
IDxmdW5jdGlvbmFsPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RpbGVHcmlkOjpUaWxlR3Jp
ZChUaWxlQ2FjaGUqIHRpbGVDYWNoZSwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpCisgICAgOiBt
X3RpbGVDYWNoZSh0aWxlQ2FjaGUpCisgICAgLCBtX3RpbGVIb3N0TGF5ZXIoYWRvcHROUyhbW1Rp
bGVIb3N0TGF5ZXIgYWxsb2NdIGluaXRXaXRoVGlsZUdyaWQ6dGhpc10pKQorICAgICwgbV90aWxl
U2l6ZSh0aWxlU2l6ZSkKKyAgICAsIG1fc2NhbGUoMSkKKyAgICAsIG1fdmFsaWRCb3VuZHMoMCwg
MCwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSkgCit7Cit9CisgICAgCitUaWxlR3JpZDo6flRpbGVHcmlkKCkKK3sKKyAgICBb
bV90aWxlSG9zdExheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKK30KKworSW50UmVjdCBUaWxl
R3JpZDo6dmlzaWJsZVJlY3QoKSBjb25zdAoreworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KG1fdGlsZUNhY2hlLT52aXNpYmxlUmVjdEluTGF5ZXIobV90aWxlSG9z
dExheWVyLmdldCgpKSk7CisKKyAgICAvLyBXaGVuIGZhc3Qgc2Nyb2xsaW5nIHRvIHRoZSB0b3As
IG1vdmUgdGhlIHZpc2libGUgcmVjdCB0aGVyZSBpbW1lZGlhdGVseSBzbyB3ZSBoYXZlIHRpbGVz
IHdoZW4gdGhlIHNjcm9sbGluZyBjb21wbGV0ZXMuCisgICAgaWYgKG1fdGlsZUNhY2hlLT50aWxp
bmdNb2RlKCkgPT0gVGlsZUNhY2hlOjpTY3JvbGxUb1RvcCkKKyAgICAgICAgdmlzaWJsZVJlY3Qu
c2V0WSgwKTsKKworICAgIHJldHVybiB2aXNpYmxlUmVjdDsKK30KKwordm9pZCBUaWxlR3JpZDo6
ZHJvcEFsbFRpbGVzKCkKK3sKKyAgICBtX3RpbGVzLmNsZWFyKCk7Cit9CisKK3ZvaWQgVGlsZUdy
aWQ6OmRyb3BUaWxlc0ludGVyc2VjdGluZ1JlY3QoY29uc3QgSW50UmVjdCYgZHJvcFJlY3QpCit7
CisgICAgZHJvcFRpbGVzQmV0d2VlblJlY3RzKGRyb3BSZWN0LCBJbnRSZWN0KCkpOworfQorCit2
b2lkIFRpbGVHcmlkOjpkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25zdCBJbnRSZWN0JiBrZWVwUmVj
dCkKK3sKKyAgICBkcm9wVGlsZXNCZXR3ZWVuUmVjdHMoSW50UmVjdCgwLCAwLCBzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSwg
a2VlcFJlY3QpOworfQorCit2b2lkIFRpbGVHcmlkOjpkcm9wVGlsZXNCZXR3ZWVuUmVjdHMoY29u
c3QgSW50UmVjdCYgZHJvcFJlY3QsIGNvbnN0IEludFJlY3QmIGtlZXBSZWN0KQoreworICAgIFZl
Y3RvcjxUaWxlSW5kZXg+IHRvUmVtb3ZlOworICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
dGlsZXMuZW5kKCk7CisgICAgZm9yIChhdXRvIHRpbGUgOiBtX3RpbGVzKSB7CisgICAgICAgIFRp
bGVJbmRleCYgaW5kZXggPSB0aWxlLmtleTsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRp
bGUudmFsdWUtPnJlY3QoKTsKKyAgICAgICAgaWYgKHRpbGVSZWN0LmludGVyc2VjdHMoZHJvcFJl
Y3QpICYmICF0aWxlUmVjdC5pbnRlcnNlY3RzKGtlZXBSZWN0KSkKKyAgICAgICAgICAgIHRvUmVt
b3ZlLmFwcGVuZChpbmRleCk7CisgICAgfQorICAgIHVuc2lnbmVkIHJlbW92ZUNvdW50ID0gdG9S
ZW1vdmUuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCByZW1vdmVDb3VudDsg
KytuKQorICAgICAgICBtX3RpbGVzLnJlbW92ZSh0b1JlbW92ZVtuXSk7Cit9CisKK3Vuc2lnbmVk
IFRpbGVHcmlkOjp0aWxlQnl0ZVNpemUoKSBjb25zdAoreworICAgIEludFNpemUgdGlsZVBpeGVs
U2l6ZSA9IG1fdGlsZVNpemU7CisgICAgdGlsZVBpeGVsU2l6ZS5zY2FsZShtX3RpbGVDYWNoZS0+
c2NyZWVuU2NhbGUoKSk7CisgICAgcmV0dXJuIFRpbGVMYXllclBvb2w6OmJ5dGVzQmFja2luZ0xh
eWVyV2l0aFBpeGVsU2l6ZSh0aWxlUGl4ZWxTaXplKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitzdGF0aWMgYm9vbCBpc0ZhcnRoZXJBd2F5KGNvbnN0IHBhaXI8ZG91YmxlLCBUPiYgYSwg
Y29uc3QgcGFpcjxkb3VibGUsIFQ+JiBiKQoreworICAgIHJldHVybiBhLmZpcnN0ID4gYi5maXJz
dDsKK30KKworYm9vbCBUaWxlR3JpZDo6ZHJvcERpc3RhbnRUaWxlcyh1bnNpZ25lZCB0aWxlc05l
ZWRlZCwgZG91YmxlIHNob3J0ZXN0RGlzdGFuY2UpCit7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJU
aWxlID0gdGlsZUJ5dGVTaXplKCk7CisgICAgdW5zaWduZWQgYnl0ZXNOZWVkZWQgPSB0aWxlc05l
ZWRlZCAqIGJ5dGVzUGVyVGlsZTsKKyAgICB1bnNpZ25lZCBieXRlc1VzZWQgPSB0aWxlQ291bnQo
KSAqIGJ5dGVzUGVyVGlsZTsKKyAgICB1bnNpZ25lZCBtYXhpbXVtQnl0ZXMgPSBtX3RpbGVDYWNo
ZS0+dGlsZUNhcGFjaXR5Rm9yR3JpZCh0aGlzKTsKKworICAgIGludCBieXRlc1RvUmVjbGFpbSA9
IGludChieXRlc1VzZWQpIC0gKGludChtYXhpbXVtQnl0ZXMpIC0gYnl0ZXNOZWVkZWQpOworICAg
IGlmIChieXRlc1RvUmVjbGFpbSA8PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHVu
c2lnbmVkIHRpbGVzVG9SZW1vdmVDb3VudCA9IGJ5dGVzVG9SZWNsYWltIC8gYnl0ZXNQZXJUaWxl
OworCisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHRoaXMtPnZpc2libGVSZWN0KCk7CisgICAg
VmVjdG9yPHBhaXI8ZG91YmxlLCBUaWxlSW5kZXg+PiB0b1JlbW92ZTsKKyAgICBmb3IgKGF1dG8g
dGlsZSA6IG1fdGlsZXMpIHsKKyAgICAgICAgVGlsZUluZGV4JiBpbmRleCA9IHRpbGUua2V5Owor
ICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gdGlsZS52YWx1ZS0+cmVjdCgpOworICAgICAgICBk
b3VibGUgZGlzdGFuY2UgPSB0aWxlRGlzdGFuY2UyKHZpc2libGVSZWN0LCB0aWxlUmVjdCk7Cisg
ICAgICAgIGlmIChkaXN0YW5jZSA8PSBzaG9ydGVzdERpc3RhbmNlKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihkaXN0YW5jZSwg
aW5kZXgpKTsKKyAgICAgICAgc3RkOjpwdXNoX2hlYXAodG9SZW1vdmUuYmVnaW4oKSwgdG9SZW1v
dmUuZW5kKCksIHN0ZDo6cHRyX2Z1bihpc0ZhcnRoZXJBd2F5PFRpbGVJbmRleD4pKTsKKyAgICAg
ICAgaWYgKHRvUmVtb3ZlLnNpemUoKSA+IHRpbGVzVG9SZW1vdmVDb3VudCkgeworICAgICAgICAg
ICAgc3RkOjpwb3BfaGVhcCh0b1JlbW92ZS5iZWdpbigpLCB0b1JlbW92ZS5lbmQoKSwgc3RkOjpw
dHJfZnVuKGlzRmFydGhlckF3YXk8VGlsZUluZGV4PikpOworICAgICAgICAgICAgdG9SZW1vdmUu
cmVtb3ZlTGFzdCgpOworICAgICAgICB9CisgICAgfQorICAgIHNpemVfdCByZW1vdmVDb3VudCA9
IHRvUmVtb3ZlLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBuID0gMDsgbiA8IHJlbW92ZUNvdW50
OyArK24pCisgICAgICAgIG1fdGlsZXMucmVtb3ZlKHRvUmVtb3ZlW25dLnNlY29uZCk7CisKKyAg
ICBpZiAoIXNob3J0ZXN0RGlzdGFuY2UpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0
dXJuIHRpbGVDb3VudCgpICogYnl0ZXNQZXJUaWxlICsgYnl0ZXNOZWVkZWQgPD0gbWF4aW11bUJ5
dGVzOworfQorCit2b2lkIFRpbGVHcmlkOjphZGRUaWxlc0NvdmVyaW5nUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0VG9Db3ZlcikKK3sKKyAgICAvLyBXZSBuZXZlciBkcmF3IGFueXRoaW5nIG91dHNp
ZGUgb2Ygb3VyIGJvdW5kcy4KKyAgICBJbnRSZWN0IHJlY3QocmVjdFRvQ292ZXIpOworICAgIHJl
Y3QuaW50ZXJzZWN0KGJvdW5kcygpKTsKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFRpbGVJbmRleCB0b3BMZWZ0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2lu
dCh0b3BMZWZ0KHJlY3QpKTsKKyAgICBUaWxlSW5kZXggYm90dG9tUmlnaHRJbmRleCA9IHRpbGVJ
bmRleEZvclBvaW50KGJvdHRvbVJpZ2h0KHJlY3QpKTsKKyAgICBmb3IgKGludCB5SW5kZXggPSB0
b3BMZWZ0SW5kZXgueSgpOyB5SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC55KCk7ICsreUluZGV4
KSB7CisgICAgICAgIGZvciAoaW50IHhJbmRleCA9IHRvcExlZnRJbmRleC54KCk7IHhJbmRleCA8
PSBib3R0b21SaWdodEluZGV4LngoKTsgKyt4SW5kZXgpIHsKKyAgICAgICAgICAgIFRpbGVJbmRl
eCBpbmRleCh4SW5kZXgsIHlJbmRleCk7CisgICAgICAgICAgICBpZiAoIXRpbGVGb3JJbmRleChp
bmRleCkpCisgICAgICAgICAgICAgICAgYWRkVGlsZUZvckluZGV4KGluZGV4KTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBUaWxlR3JpZDo6YWRkVGlsZUZvckluZGV4KGNvbnN0IFRpbGVJ
bmRleCYgaW5kZXgpCit7CisgICAgbV90aWxlcy5zZXQoaW5kZXgsIFRpbGVHcmlkVGlsZTo6Y3Jl
YXRlKHRoaXMsIHRpbGVSZWN0Rm9ySW5kZXgoaW5kZXgpKSk7Cit9CisKK0NBTGF5ZXIqIFRpbGVH
cmlkOjp0aWxlSG9zdExheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlSG9zdExheWVy
LmdldCgpOworfQorCitJbnRSZWN0IFRpbGVHcmlkOjpib3VuZHMoKSBjb25zdAoreworICAgIHJl
dHVybiBJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoW3RpbGVIb3N0TGF5ZXIoKSBzaXplXSkp
OworfQorCitQYXNzUmVmUHRyPFRpbGVHcmlkVGlsZT4gVGlsZUdyaWQ6OnRpbGVGb3JJbmRleChj
b25zdCBUaWxlSW5kZXgmIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBtX3RpbGVzLmdldChp
bmRleCk7Cit9CisKK0ludFJlY3QgVGlsZUdyaWQ6OnRpbGVSZWN0Rm9ySW5kZXgoY29uc3QgVGls
ZUluZGV4JiBpbmRleCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QoaW5kZXgueCgpICogbV90
aWxlU2l6ZS53aWR0aCgpIC0gKG1fb3JpZ2luLngoKSA/IG1fdGlsZVNpemUud2lkdGgoKSAtIG1f
b3JpZ2luLngoKSA6IDApLAorICAgICAgICAgICAgICAgICBpbmRleC55KCkgKiBtX3RpbGVTaXpl
LmhlaWdodCgpIC0gKG1fb3JpZ2luLnkoKSA/IG1fdGlsZVNpemUuaGVpZ2h0KCkgLSBtX29yaWdp
bi55KCkgOiAwKSwKKyAgICAgICAgICAgICAgICAgbV90aWxlU2l6ZS53aWR0aCgpLAorICAgICAg
ICAgICAgICAgICBtX3RpbGVTaXplLmhlaWdodCgpKTsKKyAgICByZWN0LmludGVyc2VjdChib3Vu
ZHMoKSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK1RpbGVHcmlkOjpUaWxlSW5kZXggVGlsZUdy
aWQ6OnRpbGVJbmRleEZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9vcmlnaW4ueCgpIDwgbV90aWxlU2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlQo
bV9vcmlnaW4ueSgpIDwgbV90aWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgaW50IHggPSAocG9pbnQu
eCgpICsgKG1fb3JpZ2luLngoKSA/IG1fdGlsZVNpemUud2lkdGgoKSAtIG1fb3JpZ2luLngoKSA6
IDApKSAvIG1fdGlsZVNpemUud2lkdGgoKTsKKyAgICBpbnQgeSA9IChwb2ludC55KCkgKyAobV9v
cmlnaW4ueSgpID8gbV90aWxlU2l6ZS5oZWlnaHQoKSAtIG1fb3JpZ2luLnkoKSA6IDApKSAvIG1f
dGlsZVNpemUuaGVpZ2h0KCk7CisgICAgcmV0dXJuIFRpbGVJbmRleChzdGQ6Om1heCh4LCAwKSwg
c3RkOjptYXgoeSwgMCkpOworfQorCit2b2lkIFRpbGVHcmlkOjpjZW50ZXJUaWxlR3JpZE9yaWdp
bihjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCkKK3sKKyAgICBpZiAodmlzaWJsZVJlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBtaW5pbXVtSG9yaXpvbnRh
bFRpbGVzID0gMSArICh2aXNpYmxlUmVjdC53aWR0aCgpIC0gMSkgLyBtX3RpbGVTaXplLndpZHRo
KCk7CisgICAgdW5zaWduZWQgbWluaW11bVZlcnRpY2FsVGlsZXMgPSAxICsgKHZpc2libGVSZWN0
LmhlaWdodCgpIC0gMSkgLyBtX3RpbGVTaXplLmhlaWdodCgpOworICAgIFRpbGVJbmRleCBjdXJy
ZW50VG9wTGVmdEluZGV4ID0gdGlsZUluZGV4Rm9yUG9pbnQodG9wTGVmdCh2aXNpYmxlUmVjdCkp
OworICAgIFRpbGVJbmRleCBjdXJyZW50Qm90dG9tUmlnaHRJbmRleCA9IHRpbGVJbmRleEZvclBv
aW50KGJvdHRvbVJpZ2h0KHZpc2libGVSZWN0KSk7CisgICAgdW5zaWduZWQgY3VycmVudEhvcml6
b250YWxUaWxlcyA9IGN1cnJlbnRCb3R0b21SaWdodEluZGV4LngoKSAtIGN1cnJlbnRUb3BMZWZ0
SW5kZXgueCgpICsgMTsKKyAgICB1bnNpZ25lZCBjdXJyZW50VmVydGljYWxUaWxlcyA9IGN1cnJl
bnRCb3R0b21SaWdodEluZGV4LnkoKSAtIGN1cnJlbnRUb3BMZWZ0SW5kZXgueSgpICsgMTsKKwor
ICAgIC8vIElmIHdlIGhhdmUgdGlsZXMgYWxyZWFkeSwgb25seSBjZW50ZXIgaWYgd2Ugd291bGQg
Z2V0IGJlbmVmaXRzIGZyb20gYm90aCBkaXJlY3Rpb25zIChhcyB3ZSBuZWVkIHRvIHRocm93IG91
dCBleGlzdGluZyB0aWxlcykuCisgICAgaWYgKHRpbGVDb3VudCgpICYmIChjdXJyZW50SG9yaXpv
bnRhbFRpbGVzID09IG1pbmltdW1Ib3Jpem9udGFsVGlsZXMgfHwgY3VycmVudFZlcnRpY2FsVGls
ZXMgPT0gbWluaW11bVZlcnRpY2FsVGlsZXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQ
b2ludCBuZXdPcmlnaW4oMCwgMCk7CisgICAgSW50U2l6ZSBzaXplID0gYm91bmRzKCkuc2l6ZSgp
OworICAgIGlmIChzaXplLndpZHRoKCkgPiBtX3RpbGVTaXplLndpZHRoKCkpIHsKKyAgICAgICAg
bmV3T3JpZ2luLnNldFgoKHZpc2libGVSZWN0LngoKSAtIChtaW5pbXVtSG9yaXpvbnRhbFRpbGVz
ICogbV90aWxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVJlY3Qud2lkdGgoKSkgLyAyKSAlIG1fdGls
ZVNpemUud2lkdGgoKSk7CisgICAgICAgIGlmIChuZXdPcmlnaW4ueCgpIDwgMCkKKyAgICAgICAg
ICAgIG5ld09yaWdpbi5zZXRYKDApOworICAgIH0KKyAgICBpZiAoc2l6ZS5oZWlnaHQoKSA+IG1f
dGlsZVNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgbmV3T3JpZ2luLnNldFkoKHZpc2libGVSZWN0
LnkoKSAtIChtaW5pbXVtVmVydGljYWxUaWxlcyAqIG1fdGlsZVNpemUuaGVpZ2h0KCkgLSB2aXNp
YmxlUmVjdC5oZWlnaHQoKSkgLyAyKSAlIG1fdGlsZVNpemUuaGVpZ2h0KCkpOworICAgICAgICBp
ZiAobmV3T3JpZ2luLnkoKSA8IDApCisgICAgICAgICAgICBuZXdPcmlnaW4uc2V0WSgwKTsKKyAg
ICB9CisKKyAgICAvLyBEcm9wIGFsbCBleGlzdGluZyB0aWxlcyBpZiB0aGUgb3JpZ2luIG1vdmVk
LgorICAgIGlmIChuZXdPcmlnaW4gPT0gbV9vcmlnaW4pCisgICAgICAgIHJldHVybjsKKyAgICBt
X3RpbGVzLmNsZWFyKCk7CisgICAgbV9vcmlnaW4gPSBuZXdPcmlnaW47Cit9CisKK1Bhc3NSZWZQ
dHI8VGlsZUdyaWRUaWxlPiBUaWxlR3JpZDo6dGlsZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBw
b2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGlsZUZvckluZGV4KHRpbGVJbmRleEZvclBvaW50
KHBvaW50KSk7Cit9CisKK2Jvb2wgVGlsZUdyaWQ6OnRpbGVzQ292ZXIoY29uc3QgSW50UmVjdCYg
cmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGlsZUZvclBvaW50KHJlY3QubG9jYXRpb24oKSkg
JiYgdGlsZUZvclBvaW50KEludFBvaW50KHJlY3QubWF4WCgpIC0gMSwgcmVjdC55KCkpKSAmJgor
ICAgIHRpbGVGb3JQb2ludChJbnRQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkgLSAxKSkgJiYg
dGlsZUZvclBvaW50KEludFBvaW50KHJlY3QubWF4WCgpIC0gMSwgcmVjdC5tYXhZKCkgLSAxKSk7
Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OnVwZGF0ZVRpbGVPcGFjaXR5KCkKK3sKKyAgICBUaWxlTWFw
OjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOworICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgW2l0LT52
YWx1ZS0+dGlsZUxheWVyKCkgc2V0T3BhcXVlOm1fdGlsZUNhY2hlLT50aWxlc09wYXF1ZSgpXTsK
K30KKwordm9pZCBUaWxlR3JpZDo6dXBkYXRlVGlsZUJvcmRlclZpc2liaWxpdHkoKQoreworICAg
IFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChUaWxlTWFw
OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICBpdC0+dmFsdWUtPnNob3dCb3JkZXIobV90aWxlQ2FjaGUtPnRpbGVCb3JkZXJzVmlzaWJsZSgp
KTsKK30KKwordW5zaWduZWQgVGlsZUdyaWQ6OnRpbGVDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdGlsZXMuc2l6ZSgpOworfQorCitib29sIFRpbGVHcmlkOjpjaGVja0RvU2luZ2xlVGls
ZUxheW91dCgpCit7CisgICAgSW50U2l6ZSBzaXplID0gYm91bmRzKCkuc2l6ZSgpOworICAgIGlm
IChzaXplLndpZHRoKCkgPiBtX3RpbGVTaXplLndpZHRoKCkgfHwgc2l6ZS5oZWlnaHQoKSA+IG1f
dGlsZVNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29y
aWdpbiAhPSBJbnRQb2ludCgwLCAwKSkgeworICAgICAgICBtX3RpbGVzLmNsZWFyKCk7CisgICAg
ICAgIG1fb3JpZ2luID0gSW50UG9pbnQoMCwgMCk7CisgICAgfQorCisgICAgZHJvcEludmFsaWRU
aWxlcygpOworCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVCghbV90
aWxlcy5nZXQoVGlsZUluZGV4KDAsIDApKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIFRpbGVJbmRleCBvcmlnaW5JbmRleCgwLCAwKTsKKyAgICBpZiAoIW1fdGlsZXMuZ2V0
KG9yaWdpbkluZGV4KSkKKyAgICAgICAgbV90aWxlcy5zZXQob3JpZ2luSW5kZXgsIFRpbGVHcmlk
VGlsZTo6Y3JlYXRlKHRoaXMsIHRpbGVSZWN0Rm9ySW5kZXgob3JpZ2luSW5kZXgpKSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUaWxlR3JpZDo6dXBkYXRlSG9zdExheWVyU2l6ZSgp
Cit7CisgICAgQ0FMYXllciogaG9zdExheWVyID0gbV90aWxlQ2FjaGUtPmhvc3RMYXllcigpOwor
ICAgIENHUmVjdCB0aWxlSG9zdEJvdW5kcyA9IFtob3N0TGF5ZXIgY29udmVydFJlY3Q6W2hvc3RM
YXllciBib3VuZHNdIHRvTGF5ZXI6dGlsZUhvc3RMYXllcigpXTsKKyAgICBDR1NpemUgdHJhbnNm
b3JtZWRTaXplOworICAgIHRyYW5zZm9ybWVkU2l6ZS53aWR0aCA9IENHUm91bmQodGlsZUhvc3RC
b3VuZHMuc2l6ZS53aWR0aCk7CisgICAgdHJhbnNmb3JtZWRTaXplLmhlaWdodCA9IENHUm91bmQo
dGlsZUhvc3RCb3VuZHMuc2l6ZS5oZWlnaHQpOworCisgICAgQ0dSZWN0IGJvdW5kcyA9IFt0aWxl
SG9zdExheWVyKCkgYm91bmRzXTsKKyAgICBpZiAoQ0dTaXplRXF1YWxUb1NpemUoYm91bmRzLnNp
emUsIHRyYW5zZm9ybWVkU2l6ZSkpCisgICAgICAgIHJldHVybjsKKyAgICBib3VuZHMuc2l6ZSA9
IHRyYW5zZm9ybWVkU2l6ZTsKKyAgICBbdGlsZUhvc3RMYXllcigpIHNldEJvdW5kczpib3VuZHNd
OworfQorCit2b2lkIFRpbGVHcmlkOjpkcm9wSW52YWxpZFRpbGVzKCkKK3sKKyAgICBJbnRSZWN0
IGJvdW5kcyA9IHRoaXMtPmJvdW5kcygpOworICAgIEludFJlY3QgZHJvcEJvdW5kcyA9IGludGVy
c2VjdGlvbihtX3ZhbGlkQm91bmRzLCBib3VuZHMpOworICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRv
UmVtb3ZlOworICAgIGZvciAoYXV0byB0aWxlIDogbV90aWxlcykgeworICAgICAgICBUaWxlSW5k
ZXgmIGluZGV4ID0gdGlsZS5rZXk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB0aWxlLnZh
bHVlLT5yZWN0KCk7CisgICAgICAgIEludFJlY3QgZXhwZWN0ZWRUaWxlUmVjdCA9IHRpbGVSZWN0
Rm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAoZXhwZWN0ZWRUaWxlUmVjdCAhPSB0aWxlUmVj
dCB8fCAhZHJvcEJvdW5kcy5jb250YWlucyh0aWxlUmVjdCkpCisgICAgICAgICAgICB0b1JlbW92
ZS5hcHBlbmQoaW5kZXgpOworICAgIH0KKyAgICB1bnNpZ25lZCByZW1vdmVDb3VudCA9IHRvUmVt
b3ZlLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcmVtb3ZlQ291bnQ7ICsr
bikKKyAgICAgICAgbV90aWxlcy5yZW1vdmUodG9SZW1vdmVbbl0pOworCisgICAgbV92YWxpZEJv
dW5kcyA9IGJvdW5kczsKK30KKwordm9pZCBUaWxlR3JpZDo6aW52YWxpZGF0ZVRpbGVzKGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBpZiAoIWhhc1RpbGVzKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEludFJlY3QgYm91bmRzID0gdGhpcy0+Ym91bmRzKCk7CisgICAgaWYgKGlu
dGVyc2VjdGlvbihib3VuZHMsIG1fdmFsaWRCb3VuZHMpICE9IG1fdmFsaWRCb3VuZHMpIHsKKyAg
ICAgICAgLy8gVGhlIGJvdW5kcyBoYXZlIGdvdCBzbWFsbGVyLiBFdmVyeXRoaW5nIG91dHNpZGUg
d2lsbCBhbHNvIGJlIGNvbnNpZGVyZWQgaW52YWxpZCBhbmQgd2lsbCBiZSBkcm9wcGVkIGJ5IGRy
b3BJbnZhbGlkVGlsZXMoKS4KKyAgICAgICAgLy8gRHVlIHRvIGRpcnR5UmVjdCBiZWluZyBsaW1p
dGVkIHRvIGN1cnJlbnQgYm91bmRzIHRoZSB0aWxlcyB0aGF0IGFyZSB0ZW1wb3JhcmlseSBvdXRz
aWRlIG1pZ2h0IG1pc3MgaW52YWxpZGF0aW9uIAorICAgICAgICAvLyBjb21wbGV0ZWx5IG90aHdl
cndpc2UuCisgICAgICAgIG1fdmFsaWRCb3VuZHMgPSBib3VuZHM7CisgICAgfQorCisgICAgVmVj
dG9yPFRpbGVJbmRleD4gaW52YWxpZGF0ZWRUaWxlczsKKworICAgIGlmIChkaXJ0eVJlY3Qud2lk
dGgoKSA+IG1fdGlsZVNpemUud2lkdGgoKSAqIDQgfHwgZGlydHlSZWN0LmhlaWdodCgpID4gbV90
aWxlU2l6ZS5oZWlnaHQoKSAqIDQpIHsKKyAgICAgICAgLy8gRm9yIGxhcmdlIGludmFsaWRhdGVz
LCBpdGVyYXRlIG92ZXIgbGl2ZSB0aWxlcy4KKyAgICAgICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5k
ID0gbV90aWxlcy5lbmQoKTsKKyAgICAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBUaWxlR3JpZFRp
bGUqIHRpbGUgPSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXRpbGUtPnJlY3Qo
KS5pbnRlcnNlY3RzKGRpcnR5UmVjdCkpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIHRpbGUtPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CisgICAgICAgICAgICBpbnZh
bGlkYXRlZFRpbGVzLmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIFRpbGVJbmRleCB0b3BMZWZ0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludCh0b3BMZWZ0
KGRpcnR5UmVjdCkpOworICAgICAgICBUaWxlSW5kZXggYm90dG9tUmlnaHRJbmRleCA9IHRpbGVJ
bmRleEZvclBvaW50KGJvdHRvbVJpZ2h0KGRpcnR5UmVjdCkpOworICAgICAgICBmb3IgKGludCB5
SW5kZXggPSB0b3BMZWZ0SW5kZXgueSgpOyB5SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC55KCk7
ICsreUluZGV4KSB7CisgICAgICAgICAgICBmb3IgKGludCB4SW5kZXggPSB0b3BMZWZ0SW5kZXgu
eCgpOyB4SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC54KCk7ICsreEluZGV4KSB7CisgICAgICAg
ICAgICAgICAgVGlsZUluZGV4IGluZGV4KHhJbmRleCwgeUluZGV4KTsKKyAgICAgICAgICAgICAg
ICBSZWZQdHI8VGlsZUdyaWRUaWxlPiB0aWxlID0gdGlsZUZvckluZGV4KGluZGV4KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXRpbGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIGlmICghdGlsZS0+cmVjdCgpLmludGVyc2VjdHMoZGlydHlSZWN0KSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdGlsZS0+aW52YWxp
ZGF0ZVJlY3QoZGlydHlSZWN0KTsKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlZFRpbGVzLmFw
cGVuZChpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGlu
dmFsaWRhdGVkVGlsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgLy8gV2hlbiB1
c2luZyBtaW5pbWFsIGNvdmVyYWdlLCBkcm9wIHNwZWN1bGF0aXZlIHRpbGVzIGluc3RlYWQgb2Yg
dXBkYXRpbmcgdGhlbS4KKyAgICBpZiAoIXNob3VsZFVzZU1pbmltYWxUaWxlQ292ZXJhZ2UoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3RpbGVDYWNoZS0+dGlsaW5nTW9kZSgpICE9IFRp
bGVDYWNoZTo6TWluaW1hbCAmJiBtX3RpbGVDYWNoZS0+dGlsaW5nTW9kZSgpICE9IFRpbGVDYWNo
ZTo6Tm9ybWFsKQorICAgICAgICByZXR1cm47CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHRo
aXMtPnZpc2libGVSZWN0KCk7CisgICAgdW5zaWduZWQgY291bnQgPSBpbnZhbGlkYXRlZFRpbGVz
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAg
ICAgICBSZWZQdHI8VGlsZUdyaWRUaWxlPiB0aWxlID0gdGlsZUZvckluZGV4KGludmFsaWRhdGVk
VGlsZXNbaV0pOworICAgICAgICBpZiAoIXRpbGUtPnJlY3QoKS5pbnRlcnNlY3RzKHZpc2libGVS
ZWN0KSkKKyAgICAgICAgICAgIG1fdGlsZXMucmVtb3ZlKGludmFsaWRhdGVkVGlsZXNbaV0pOwor
ICAgIH0KK30KKworYm9vbCBUaWxlR3JpZDo6c2hvdWxkVXNlTWluaW1hbFRpbGVDb3ZlcmFnZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZUNhY2hlLT50aWxpbmdNb2RlKCkgPT0gVGlsZUNh
Y2hlOjpNaW5pbWFsCisgICAgICAgIHx8ICFtX3RpbGVDYWNoZS0+aXNTcGVjdWxhdGl2ZVRpbGVD
cmVhdGlvbkVuYWJsZWQoKQorICAgICAgICB8fCBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5oYXNS
ZWNlaXZlZE1lbW9yeVByZXNzdXJlKCk7Cit9CisKK0ludFJlY3QgVGlsZUdyaWQ6OmFkanVzdENv
dmVyUmVjdEZvclBhZ2VCb3VuZHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICAv
LyBBZGp1c3QgdGhlIHJlY3Qgc28gdGhhdCBpdCBzdGF5cyB3aXRoaW4gdGhlIGJvdW5kcyBhbmQg
a2VlcHMgdGhlIHBpeGVsIHNpemUuCisgICAgSW50UmVjdCBib3VuZHMgPSB0aGlzLT5ib3VuZHMo
KTsKKyAgICBJbnRSZWN0IGFkanVzdGVkUmVjdCA9IHJlY3Q7CisgICAgYWRqdXN0ZWRSZWN0Lm1v
dmUocmVjdC54KCkgPCBib3VuZHMueCgpID8gYm91bmRzLngoKSAtIHJlY3QueCgpIDogMCwKKyAg
ICAgICAgICAgICAgcmVjdC55KCkgPCBib3VuZHMueSgpID8gYm91bmRzLnkoKSAtIHJlY3QueSgp
IDogMCk7CisgICAgYWRqdXN0ZWRSZWN0Lm1vdmUocmVjdC5tYXhYKCkgPiBib3VuZHMubWF4WCgp
ID8gYm91bmRzLm1heFgoKSAtIHJlY3QubWF4WCgpIDogMCwKKyAgICAgICAgICAgICAgcmVjdC5t
YXhZKCkgPiBib3VuZHMubWF4WSgpID8gYm91bmRzLm1heFkoKSAtIHJlY3QubWF4WSgpIDogMCk7
CisgICAgYWRqdXN0ZWRSZWN0ID0gaW50ZXJzZWN0aW9uKGJvdW5kcywgYWRqdXN0ZWRSZWN0KTsK
KyAgICBpZiAoYWRqdXN0ZWRSZWN0ID09IHJlY3QgfHwgYWRqdXN0ZWRSZWN0LmlzRW1wdHkoKSB8
fCBzaG91bGRVc2VNaW5pbWFsVGlsZUNvdmVyYWdlKCkpCisgICAgICAgIHJldHVybiBhZGp1c3Rl
ZFJlY3Q7CisgICAgaW50IHBpeGVscyA9IGFkanVzdGVkUmVjdC53aWR0aCgpICogYWRqdXN0ZWRS
ZWN0LmhlaWdodCgpOworICAgIGlmIChhZGp1c3RlZFJlY3Qud2lkdGgoKSAhPSByZWN0LndpZHRo
KCkpCisgICAgICAgIGFkanVzdGVkUmVjdC5pbmZsYXRlWSgocGl4ZWxzIC8gYWRqdXN0ZWRSZWN0
LndpZHRoKCkgLSBhZGp1c3RlZFJlY3QuaGVpZ2h0KCkpIC8gMik7CisgICAgZWxzZSBpZiAoYWRq
dXN0ZWRSZWN0LmhlaWdodCgpICE9IHJlY3QuaGVpZ2h0KCkpCisgICAgICAgIGFkanVzdGVkUmVj
dC5pbmZsYXRlWCgocGl4ZWxzIC8gYWRqdXN0ZWRSZWN0LmhlaWdodCgpIC0gYWRqdXN0ZWRSZWN0
LndpZHRoKCkpIC8gMik7CisgICAgcmV0dXJuIGludGVyc2VjdGlvbihhZGp1c3RlZFJlY3QsIGJv
dW5kcyk7Cit9CisKK0ludFJlY3QgVGlsZUdyaWQ6OmNhbGN1bGF0ZUNvdmVyUmVjdChjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlUmVjdCwgYm9vbCYgY2VudGVyR3JpZCkKK3sKKyAgICAvLyBVc2UgbWlu
aW11bSBjb3ZlclJlY3QgaWYgd2UgYXJlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KKyAgICBpZiAo
c2hvdWxkVXNlTWluaW1hbFRpbGVDb3ZlcmFnZSgpKSB7CisgICAgICAgIGNlbnRlckdyaWQgPSB0
cnVlOworICAgICAgICByZXR1cm4gdmlzaWJsZVJlY3Q7CisgICAgfQorICAgIEludFJlY3QgY292
ZXJSZWN0ID0gdmlzaWJsZVJlY3Q7CisgICAgY2VudGVyR3JpZCA9IGZhbHNlOworICAgIGNvdmVy
UmVjdC5pbmZsYXRlWCh2aXNpYmxlUmVjdC53aWR0aCgpIC8gMik7CisgICAgY292ZXJSZWN0Lmlu
ZmxhdGVZKHZpc2libGVSZWN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gYWRqdXN0Q292ZXJSZWN0
Rm9yUGFnZUJvdW5kcyhjb3ZlclJlY3QpOworfQorCitkb3VibGUgVGlsZUdyaWQ6OnRpbGVEaXN0
YW5jZTIoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0
KSBjb25zdAoreworICAgIC8vIFRoZSAiZGlzdGFuY2UiIGNhbGN1bGF0ZWQgaGVyZSBpcyB1c2Vk
IHRvIHBpY2sgd2hpY2ggdGlsZSB0byBjYWNoZSBuZXh0LiBUaGUgaWRlYSBpcyB0byBjcmVhdGUg
dGhvc2UKKyAgICAvLyBjbG9zZXN0IHRvIHRoZSBjdXJyZW50IHZpZXdwb3J0IGZpcnN0IHNvIHRo
ZSB1c2VyIGlzIG1vcmUgbGlrZWx5IHRvIHNlZSBhbHJlYWR5IHJlbmRlcmVkIGNvbnRlbnQgd2Ug
c2hlCisgICAgLy8gc2Nyb2xscy4gVGhlIGNhbGN1bGF0aW9uIGlzIHdlaWdodGVkIHRvIHByZWZl
ciB2ZXJ0aWNhbCBhbmQgZG93bndhcmQgZGlyZWN0aW9uLgorICAgIGlmICh2aXNpYmxlUmVjdC5p
bnRlcnNlY3RzKHRpbGVSZWN0KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgSW50UG9pbnQgdmlz
aWJsZUNlbnRlciA9IHZpc2libGVSZWN0LmxvY2F0aW9uKCkgKyBJbnRTaXplKHZpc2libGVSZWN0
LndpZHRoKCkgLyAyLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSAvIDIpOworICAgIEludFBvaW50IHRp
bGVDZW50ZXIgPSB0aWxlUmVjdC5sb2NhdGlvbigpICsgSW50U2l6ZSh0aWxlUmVjdC53aWR0aCgp
IC8gMiwgdGlsZVJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICAKKyAgICBkb3VibGUgaG9yaXpvbnRh
bEJpYXMgPSAxLjA7CisgICAgZG91YmxlIGxlZnR3YXJkQmlhcyA9IDEuMDsKKyAgICBkb3VibGUg
cmlnaHR3YXJkQmlhcyA9IDEuMDsKKworICAgIGRvdWJsZSB2ZXJ0aWNhbEJpYXMgPSAxLjA7Cisg
ICAgZG91YmxlIHVwd2FyZEJpYXMgPSAxLjA7CisgICAgZG91YmxlIGRvd253YXJkQmlhcyA9IDEu
MDsKKworICAgIGNvbnN0IGRvdWJsZSB0aWxpbmdCaWFzVmVyeUxpa2VseSA9IDAuODsKKyAgICBj
b25zdCBkb3VibGUgdGlsaW5nQmlhc0xpa2VseSA9IDAuOTsKKworICAgIHN3aXRjaCAobV90aWxl
Q2FjaGUtPnRpbGluZ0RpcmVjdGlvbigpKSB7CisgICAgY2FzZSBUaWxlQ2FjaGU6OlRpbGluZ0Rp
cmVjdGlvblVwOgorICAgICAgICB2ZXJ0aWNhbEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxpa2VseTsK
KyAgICAgICAgdXB3YXJkQmlhcyA9IHRpbGluZ0JpYXNMaWtlbHk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVGlsZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb25Eb3duOgorICAgICAgICB2ZXJ0aWNh
bEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxpa2VseTsKKyAgICAgICAgZG93bndhcmRCaWFzID0gdGls
aW5nQmlhc0xpa2VseTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUaWxlQ2FjaGU6OlRpbGlu
Z0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIGhvcml6b250YWxCaWFzID0gdGlsaW5nQmlhc1ZlcnlM
aWtlbHk7CisgICAgICAgIGxlZnR3YXJkQmlhcyA9IHRpbGluZ0JpYXNMaWtlbHk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVGlsZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb25SaWdodDoKKyAgICAg
ICAgaG9yaXpvbnRhbEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxpa2VseTsKKyAgICAgICAgcmlnaHR3
YXJkQmlhcyA9IHRpbGluZ0JpYXNMaWtlbHk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGRvdWJsZSB4U2NhbGUgPSBob3Jpem9udGFsQmlhcyAqIHZpc2libGVSZWN0LmhlaWdodCgpIC8g
dmlzaWJsZVJlY3Qud2lkdGgoKSAqICh0aWxlQ2VudGVyLngoKSA+PSB2aXNpYmxlQ2VudGVyLngo
KSA/IHJpZ2h0d2FyZEJpYXMgOiBsZWZ0d2FyZEJpYXMpOworICAgIGRvdWJsZSB5U2NhbGUgPSB2
ZXJ0aWNhbEJpYXMgKiB2aXNpYmxlUmVjdC53aWR0aCgpIC8gdmlzaWJsZVJlY3QuaGVpZ2h0KCkg
KiAodGlsZUNlbnRlci55KCkgPj0gdmlzaWJsZUNlbnRlci55KCkgPyBkb3dud2FyZEJpYXMgOiB1
cHdhcmRCaWFzKTsKKworICAgIGRvdWJsZSB4RGlzdGFuY2UgPSB4U2NhbGUgKiAodGlsZUNlbnRl
ci54KCkgLSB2aXNpYmxlQ2VudGVyLngoKSk7CisgICAgZG91YmxlIHlEaXN0YW5jZSA9IHlTY2Fs
ZSAqICh0aWxlQ2VudGVyLnkoKSAtIHZpc2libGVDZW50ZXIueSgpKTsKKworICAgIGRvdWJsZSBk
aXN0YW5jZTIgPSB4RGlzdGFuY2UgKiB4RGlzdGFuY2UgKyB5RGlzdGFuY2UgKiB5RGlzdGFuY2U7
CisgICAgcmV0dXJuIGRpc3RhbmNlMjsKK30KKwordm9pZCBUaWxlR3JpZDo6Y3JlYXRlVGlsZXMo
VGlsZUNhY2hlOjpTeW5jaHJvbm91c1RpbGVDcmVhdGlvbk1vZGUgY3JlYXRpb25Nb2RlKQorewor
ICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB0aGlzLT52aXNpYmxlUmVjdCgpOworICAgIGlmICh2
aXNpYmxlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERyb3AgdGls
ZXMgdGhhdCBhcmUgd3Jvbmcgc2l6ZSBvciBvdXRzaWRlIHRoZSBmcmFtZSAoYmVjYXVzZSB0aGUg
ZnJhbWUgaGFzIGJlZW4gcmVzaXplZCkuCisgICAgZHJvcEludmFsaWRUaWxlcygpOworCisgICAg
Ym9vbCBjZW50ZXJHcmlkOworICAgIEludFJlY3QgY292ZXJSZWN0ID0gY2FsY3VsYXRlQ292ZXJS
ZWN0KHZpc2libGVSZWN0LCBjZW50ZXJHcmlkKTsKKworICAgIC8vIElmIHRpbGUgc2l6ZSBpcyBi
aWdnZXIgdGhhbiB0aGUgdmlldywgY2VudGVyaW5nIG1pbmltaXplcyB0aGUgcGFpbnRpbmcgbmVl
ZGVkIHRvIGNvdmVyIHRoZSBzY3JlZW4uCisgICAgLy8gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1
bCBhZnRlciB6b29taW5nIAorICAgIGNlbnRlckdyaWQgPSBjZW50ZXJHcmlkIHx8ICF0aWxlQ291
bnQoKTsKKyAgICBpZiAoY2VudGVyR3JpZCkKKyAgICAgICAgY2VudGVyVGlsZUdyaWRPcmlnaW4o
dmlzaWJsZVJlY3QpOworCisgICAgZG91YmxlIHNob3J0ZXN0RGlzdGFuY2UgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7CisgICAgZG91YmxlIGNvdmVyZWREaXN0YW5j
ZSA9IDA7CisgICAgVmVjdG9yPFRpbGVHcmlkOjpUaWxlSW5kZXg+IHRpbGVzVG9DcmVhdGU7Cisg
ICAgdW5zaWduZWQgcGVuZGluZ1RpbGVDb3VudCA9IDA7CisKKyAgICBUaWxlR3JpZDo6VGlsZUlu
ZGV4IHRvcExlZnRJbmRleCA9IHRpbGVJbmRleEZvclBvaW50KHRvcExlZnQoY292ZXJSZWN0KSk7
CisgICAgVGlsZUdyaWQ6OlRpbGVJbmRleCBib3R0b21SaWdodEluZGV4ID0gdGlsZUluZGV4Rm9y
UG9pbnQoYm90dG9tUmlnaHQoY292ZXJSZWN0KSk7CisgICAgZm9yIChpbnQgeUluZGV4ID0gdG9w
TGVmdEluZGV4LnkoKTsgeUluZGV4IDw9IGJvdHRvbVJpZ2h0SW5kZXgueSgpOyArK3lJbmRleCkg
eworICAgICAgICBmb3IgKGludCB4SW5kZXggPSB0b3BMZWZ0SW5kZXgueCgpOyB4SW5kZXggPD0g
Ym90dG9tUmlnaHRJbmRleC54KCk7ICsreEluZGV4KSB7CisgICAgICAgICAgICBUaWxlR3JpZDo6
VGlsZUluZGV4IGluZGV4KHhJbmRleCwgeUluZGV4KTsKKyAgICAgICAgICAgIC8vIEN1cnJlbnRs
eSB2aXNpYmxlIHRpbGVzIGhhdmUgZGlzdGFuY2Ugb2YgMCBhbmQgZ2V0IGFsbCBjcmVhdGVkIGlu
IHRoZSBzYW1lIHRyYW5zYWN0aW9uLgorICAgICAgICAgICAgZG91YmxlIGRpc3RhbmNlID0gdGls
ZURpc3RhbmNlMih2aXNpYmxlUmVjdCwgdGlsZVJlY3RGb3JJbmRleChpbmRleCkpOworICAgICAg
ICAgICAgaWYgKGRpc3RhbmNlID4gY292ZXJlZERpc3RhbmNlKQorICAgICAgICAgICAgICAgIGNv
dmVyZWREaXN0YW5jZSA9IGRpc3RhbmNlOworICAgICAgICAgICAgaWYgKHRpbGVGb3JJbmRleChp
bmRleCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICArK3BlbmRpbmdU
aWxlQ291bnQ7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiBzaG9ydGVzdERpc3RhbmNlKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgc2hv
cnRlc3REaXN0YW5jZSkgeworICAgICAgICAgICAgICAgIHRpbGVzVG9DcmVhdGUuY2xlYXIoKTsK
KyAgICAgICAgICAgICAgICBzaG9ydGVzdERpc3RhbmNlID0gZGlzdGFuY2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aWxlc1RvQ3JlYXRlLmFwcGVuZChpbmRleCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzaXplX3QgdGlsZXNUb0NyZWF0ZUNvdW50ID0gdGlsZXNUb0NyZWF0ZS5z
aXplKCk7CisKKyAgICAvLyBUaWxlIGNyZWF0aW9uIHRpbWVyIHdpbGwgaW52b2tlIHRoaXMgZnVu
Y3Rpb24gYWdhaW4gaW4gQ292ZXJTcGVjdWxhdGl2ZSBtb2RlLgorICAgIGJvb2wgY2FuZGlkYXRl
VGlsZXNBcmVTcGVjdWxhdGl2ZSA9IHNob3J0ZXN0RGlzdGFuY2UgPiAwOworICAgIGlmIChjcmVh
dGlvbk1vZGUgPT0gVGlsZUNhY2hlOjpDb3ZlclZpc2libGVPbmx5ICYmIGNhbmRpZGF0ZVRpbGVz
QXJlU3BlY3VsYXRpdmUpCisgICAgICAgIHRpbGVzVG9DcmVhdGVDb3VudCA9IDA7CisKKyAgICAv
LyBFdmVuIGlmIHdlIGRvbid0IGNyZWF0ZSBhbnkgdGlsZXMsIHdlIHNob3VsZCBzdGlsbCBkcm9w
IGRpc3RhbnQgdGlsZXMKKyAgICAvLyBpbiBjYXNlIGNvdmVyUmVjdCBnb3Qgc21hbGxlci4KKyAg
ICBkb3VibGUga2VlcERpc3RhbmNlID0gc3RkOjptaW4oc2hvcnRlc3REaXN0YW5jZSwgY292ZXJl
ZERpc3RhbmNlKTsKKyAgICBpZiAoIWRyb3BEaXN0YW50VGlsZXModGlsZXNUb0NyZWF0ZUNvdW50
LCBrZWVwRGlzdGFuY2UpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGVuZGluZ1Rp
bGVDb3VudCA+PSB0aWxlc1RvQ3JlYXRlQ291bnQpOworICAgIGlmICghcGVuZGluZ1RpbGVDb3Vu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCB0aWxlc1Rv
Q3JlYXRlQ291bnQ7ICsrbikKKyAgICAgICAgYWRkVGlsZUZvckluZGV4KHRpbGVzVG9DcmVhdGVb
bl0pOworCisgICAgYm9vbCBkaWRDcmVhdGVUaWxlcyA9ICEhdGlsZXNUb0NyZWF0ZUNvdW50Owor
ICAgIGJvb2wgY3JlYXRlTW9yZVRpbGVzID0gcGVuZGluZ1RpbGVDb3VudCA+IHRpbGVzVG9DcmVh
dGVDb3VudDsKKyAgICBtX3RpbGVDYWNoZS0+ZmluaXNoZWRDcmVhdGluZ1RpbGVzKGRpZENyZWF0
ZVRpbGVzLCBjcmVhdGVNb3JlVGlsZXMpOworfQorCit2b2lkIFRpbGVHcmlkOjpkdW1wVGlsZXMo
KQoreworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB0aGlzLT52aXNpYmxlUmVjdCgpOworICAg
IE5TTG9nKEAidHJhbnNmb3JtZWQgdmlzaWJsZVJlY3QgPSBbJTZkICU2ZCAlNmQgJTZkXSIsIHZp
c2libGVSZWN0LngoKSwgdmlzaWJsZVJlY3QueSgpLCB2aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNp
YmxlUmVjdC5oZWlnaHQoKSk7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgVGlsZU1hcDo6aXRl
cmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVGlsZUluZGV4
JiBpbmRleCA9IGl0LT5rZXk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBpdC0+dmFsdWUt
PnJlY3QoKTsKKyAgICAgICAgTlNMb2coQCIjJS0zZCAoJTNkICUzZCkgLSBbJTZkICU2ZCAlNmQg
JTZkXSVAIiwgKytpLCBpbmRleC54KCksIGluZGV4LnkoKSwgdGlsZVJlY3QueCgpLCB0aWxlUmVj
dC55KCksIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCB0aWxlUmVjdC5pbnRl
cnNlY3RzKHZpc2libGVSZWN0KSA/IEAiICoiIDogQCIiKTsKKyAgICAgICAgTlNMb2coQCIgICAg
ICVAIiwgW2l0LT52YWx1ZS0+dGlsZUxheWVyKCkgY29udGVudHNdKTsKKyAgICB9Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYWQ5MjI4NWZk
OThkYjZhMjkzMjhhMmIzZTAwYzRmOTJkYWEwMWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkVGlsZS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFRpbGVHcmlkVGlsZV9oCisjZGVmaW5lIFRpbGVHcmlkVGlsZV9o
CisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCitAY2xhc3MgVGlsZUxheWVyOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFRpbGVHcmlkOworCisvLyBSZWZjb3VudCB0aGUgdGlsZXMgc28gdGhleSB3b3Jr
IG5pY2VseSBpbiB2ZWN0b3IgYW5kIHdlIGtub3cgd2hlbiB0byByZW1vdmUgdGhlIHRpbGUgbGF5
ZXIgZnJvbSB0aGUgcGFyZW50LgorY2xhc3MgVGlsZUdyaWRUaWxlIDogcHVibGljIFJlZkNvdW50
ZWQ8VGlsZUdyaWRUaWxlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGlsZUdy
aWRUaWxlPiBjcmVhdGUoVGlsZUdyaWQqIGdyaWQsIGNvbnN0IEludFJlY3QmIHJlY3QpIHsgcmV0
dXJuIGFkb3B0UmVmPFRpbGVHcmlkVGlsZT4obmV3IFRpbGVHcmlkVGlsZShncmlkLCByZWN0KSk7
IH0KKyAgICB+VGlsZUdyaWRUaWxlKCk7CisKKyAgICBUaWxlTGF5ZXIqIHRpbGVMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fdGlsZUxheWVyLmdldCgpOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0SW5TdXJmYWNlKTsKKyAgICBJbnRSZWN0IHJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgdGls
ZVJlY3QpOworICAgIHZvaWQgc2hvd0JvcmRlcihib29sKTsKKworcHJpdmF0ZToKKyAgICBUaWxl
R3JpZFRpbGUoVGlsZUdyaWQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICBUaWxlR3JpZCogbV90
aWxlR3JpZDsKKyAgICBSZXRhaW5QdHI8VGlsZUxheWVyPiBtX3RpbGVMYXllcjsKKyAgICBJbnRS
ZWN0IG1fcmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykKKyNlbmRpZiAvLyBUaWxlR3JpZFRpbGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkVGlsZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTYxODY3YTcxNzNiOGUyYzJj
MGZmNDlkZmYzZDUxNTI0ZGIzYmU2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUubW0KQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGlsZUdyaWQuaCIKKworI2lmIFBM
QVRGT1JNKElPUykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiVGlsZUNhY2hlLmgi
CisjaW5jbHVkZSAiVGlsZUdyaWRUaWxlLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyLmgiCisjaW5j
bHVkZSAiVGlsZUxheWVyUG9vbC5oIgorI2luY2x1ZGUgIldBS1dpbmRvdy5oIgorI2luY2x1ZGUg
PFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29y
ZVByaXZhdGUuaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgTE9HX1RJTElORworc3RhdGljIGludCB0b3Rh
bFRpbGVDb3VudDsKKyNlbmRpZgorCitUaWxlR3JpZFRpbGU6OlRpbGVHcmlkVGlsZShUaWxlR3Jp
ZCogdGlsZUdyaWQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQorICAgIDogbV90aWxlR3JpZCh0
aWxlR3JpZCkKKyAgICAsIG1fcmVjdCh0aWxlUmVjdCkKK3sKKyAgICBBU1NFUlQoIXRpbGVSZWN0
LmlzRW1wdHkoKSk7CisgICAgSW50U2l6ZSBwaXhlbFNpemUobV9yZWN0LnNpemUoKSk7CisgICAg
Y29uc3QgQ0dGbG9hdCBzY3JlZW5TY2FsZSA9IG1fdGlsZUdyaWQtPnRpbGVDYWNoZSgpLT5zY3Jl
ZW5TY2FsZSgpOworICAgIHBpeGVsU2l6ZS5zY2FsZShzY3JlZW5TY2FsZSk7CisgICAgbV90aWxl
TGF5ZXIgPSBUaWxlTGF5ZXJQb29sOjpzaGFyZWRQb29sKCktPnRha2VMYXllcldpdGhTaXplKHBp
eGVsU2l6ZSk7CisgICAgaWYgKCFtX3RpbGVMYXllcikgeworI2lmIExPR19USUxJTkcKKyAgICAg
ICAgTlNMb2coQCJ1bmFibGUgdG8gcmV1c2UgbGF5ZXIgd2l0aCBzaXplICVkIHggJWQsIGNyZWF0
aW5nIG9uZSIsIHBpeGVsU2l6ZS53aWR0aCgpLCBwaXhlbFNpemUuaGVpZ2h0KCkpOworI2VuZGlm
CisgICAgICAgIG1fdGlsZUxheWVyID0gYWRvcHROUyhbW1RpbGVMYXllciBhbGxvY10gaW5pdF0p
OworICAgIH0KKyAgICBUaWxlTGF5ZXIqIGxheWVyID0gbV90aWxlTGF5ZXIuZ2V0KCk7CisgICAg
W2xheWVyIHNldFRpbGVHcmlkOnRpbGVHcmlkXTsKKyAgICBbbGF5ZXIgc2V0T3BhcXVlOm1fdGls
ZUdyaWQtPnRpbGVDYWNoZSgpLT50aWxlc09wYXF1ZSgpXTsKKyAgICBbbGF5ZXIgc2V0RWRnZUFu
dGlhbGlhc2luZ01hc2s6MF07CisgICAgW2xheWVyIHNldE5lZWRzTGF5b3V0T25HZW9tZXRyeUNo
YW5nZTpOT107CisgICAgW2xheWVyIHNldENvbnRlbnRzU2NhbGU6c2NyZWVuU2NhbGVdOworICAg
IFtsYXllciBzZXRBY2NlbGVyYXRlc0RyYXdpbmc6bV90aWxlR3JpZC0+dGlsZUNhY2hlKCktPmFj
Y2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKV07CisKKyAgICAvLyBIb3N0IGxheWVyIG1heSBoYXZl
IG90aGVyIHN1YmxheWVycy4gS2VlcCB0aGUgdGlsZSBsYXllcnMgYXQgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgYXJyYXkKKyAgICAvLyBzbyB0aGV5IGFyZSBwYWludGVkIGJlaGluZCBldmVyeXRoaW5n
IGVsc2UuCisgICAgW3RpbGVHcmlkLT50aWxlSG9zdExheWVyKCkgaW5zZXJ0U3VibGF5ZXI6bGF5
ZXIgYXRJbmRleDp0aWxlR3JpZC0+dGlsZUNvdW50KCldOworICAgIFtsYXllciBzZXRGcmFtZTpt
X3JlY3RdOworICAgIGludmFsaWRhdGVSZWN0KG1fcmVjdCk7CisgICAgc2hvd0JvcmRlcihtX3Rp
bGVHcmlkLT50aWxlQ2FjaGUoKS0+dGlsZUJvcmRlcnNWaXNpYmxlKCkpOworCisjaWYgTE9HX1RJ
TElORworICAgICsrdG90YWxUaWxlQ291bnQ7CisgICAgTlNMb2coQCJuZXcgVGlsZSAoJWQsJWQp
ICVkICVkLCBjb3VudCAlZCIsIHRpbGVSZWN0LngoKSwgdGlsZVJlY3QueSgpLCB0aWxlUmVjdC53
aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwgdG90YWxUaWxlQ291bnQpOworI2VuZGlmCit9CisK
K1RpbGVHcmlkVGlsZTo6flRpbGVHcmlkVGlsZSgpIAoreworICAgIFt0aWxlTGF5ZXIoKSBzZXRU
aWxlR3JpZDowXTsKKyAgICBbdGlsZUxheWVyKCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAg
IFRpbGVMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRkTGF5ZXIodGlsZUxheWVyKCkpOworI2lm
IExPR19USUxJTkcKKyAgICAtLXRvdGFsVGlsZUNvdW50OworICAgIE5TTG9nKEAiZGVsZXRlIFRp
bGUgKCVkLCVkKSAlZCAlZCwgY291bnQgJWQiLCBtX3JlY3QueCgpLCBtX3JlY3QueSgpLCBtX3Jl
Y3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdodCgpLCB0b3RhbFRpbGVDb3VudCk7CisjZW5kaWYKK30K
Kwordm9pZCBUaWxlR3JpZFRpbGU6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHdpbmRv
d0RpcnR5UmVjdCkKK3sKKyAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGludGVyc2VjdGlvbih3aW5k
b3dEaXJ0eVJlY3QsIG1fcmVjdCk7CisgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBkaXJ0eVJlY3QubW92ZShJbnRQb2ludCgpIC0gbV9yZWN0LmxvY2F0
aW9uKCkpOworICAgIFt0aWxlTGF5ZXIoKSBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6ZGlydHlSZWN0
XTsKKworICAgIGlmIChtX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+dGlsZVBhaW50Q291bnRlcnNW
aXNpYmxlKCkpCisgICAgICAgIFt0aWxlTGF5ZXIoKSBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6Q0dS
ZWN0TWFrZSgwLCAwLCA0NiwgMjUpXTsKK30KKwordm9pZCBUaWxlR3JpZFRpbGU6OnNldFJlY3Qo
Y29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCit7CisgICAgaWYgKG1fcmVjdCA9PSB0aWxlUmVjdCkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fcmVjdCA9IHRpbGVSZWN0OworICAgIFRpbGVMYXllciog
bGF5ZXIgPSBtX3RpbGVMYXllci5nZXQoKTsKKyAgICBbbGF5ZXIgc2V0RnJhbWU6bV9yZWN0XTsK
KyAgICBbbGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKK30KKwordm9pZCBUaWxlR3JpZFRpbGU6OnNo
b3dCb3JkZXIoYm9vbCBmbGFnKQoreworICAgIFRpbGVMYXllciogbGF5ZXIgPSBtX3RpbGVMYXll
ci5nZXQoKTsKKyAgICBpZiAoZmxhZykgeworICAgICAgICBbbGF5ZXIgc2V0Qm9yZGVyQ29sb3I6
Y2FjaGVkQ0dDb2xvcihtX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+Y29sb3JGb3JHcmlkVGlsZUJv
cmRlcihtX3RpbGVHcmlkKSwgQ29sb3JTcGFjZURldmljZVJHQildOworICAgICAgICBbbGF5ZXIg
c2V0Qm9yZGVyV2lkdGg6MC41Zl07CisgICAgfSBlbHNlIHsKKyAgICAgICAgW2xheWVyIHNldEJv
cmRlckNvbG9yOm5pbF07CisgICAgICAgIFtsYXllciBzZXRCb3JkZXJXaWR0aDowXTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNGI4NTFk
YzhiNjUxN2E1MzY3MzVjNjNlNmVhOGM5YWUwZGNhZTBkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVMYXllci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFRpbGVMYXllcl9oCisjZGVmaW5lIFRpbGVMYXllcl9oCisKKyNp
ZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlIDxRdWFydHpDb3JlL0NBTGF5ZXIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGlsZUdyaWQ7Cit9OworCitAaW50ZXJmYWNlIFRpbGVM
YXllciA6IENBTGF5ZXIgeworICAgIFdlYkNvcmU6OlRpbGVHcmlkKiBfdGlsZUdyaWQ7CisgICAg
dW5zaWduZWQgX3BhaW50Q291bnQ7Cit9CitAcHJvcGVydHkgKG5vbmF0b21pYykgdW5zaWduZWQg
cGFpbnRDb3VudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBXZWJDb3JlOjpUaWxlR3JpZCogdGls
ZUdyaWQ7CisrIChUaWxlTGF5ZXIgKilsYXllckJlaW5nUGFpbnRlZDsKK0BlbmQKKworQGludGVy
ZmFjZSBUaWxlSG9zdExheWVyIDogQ0FMYXllciB7CisgICAgV2ViQ29yZTo6VGlsZUdyaWQqIF90
aWxlR3JpZDsKK30KKy0gKGlkKWluaXRXaXRoVGlsZUdyaWQ6KFdlYkNvcmU6OlRpbGVHcmlkKil0
aWxlR3JpZDsKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKyNlbmRpZiAvLyBUaWxl
TGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVMYXll
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzI4YmVjODVlN2U5ZmNjNjU1OWQ1NmYzNWI0OWMzYmMxMDUwYzY0NgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIubW0KQEAgLTAsMCAr
MSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGls
ZUxheWVyLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJUaWxlQ2FjaGUuaCIK
KyNpbmNsdWRlICJUaWxlR3JpZC5oIgorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKworQGlt
cGxlbWVudGF0aW9uIFRpbGVIb3N0TGF5ZXIKKy0gKGlkKWluaXRXaXRoVGlsZUdyaWQ6KFdlYkNv
cmU6OlRpbGVHcmlkKil0aWxlR3JpZAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAg
aWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIF90aWxlR3JpZCA9IHRpbGVHcmlk
OworICAgIFtzZWxmIHNldEFuY2hvclBvaW50OkNHUG9pbnRaZXJvXTsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAoaWQ8Q0FBY3Rpb24+KWFjdGlvbkZvcktleTooTlNTdHJpbmcgKilrZXkKK3sK
KyAgICBVTlVTRURfUEFSQU0oa2V5KTsKKyAgICAvLyBEaXNhYmxlIGFsbCBkZWZhdWx0IGFjdGlv
bnMKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKXJlbmRlckluQ29udGV4dDooQ0dDb250
ZXh0UmVmKWNvbnRleHQKK3sKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdl
YlRocmVhZExvY2soKTsKKyAgICBfdGlsZUdyaWQtPnRpbGVDYWNoZSgpLT5kb0xheW91dFRpbGVz
KCk7CisgICAgW3N1cGVyIHJlbmRlckluQ29udGV4dDpjb250ZXh0XTsKK30KK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFRpbGVMYXllcgorQHN5bnRoZXNpemUgcGFpbnRDb3VudCA9IF9wYWludENv
dW50OworQHN5bnRoZXNpemUgdGlsZUdyaWQgPSBfdGlsZUdyaWQ7CisKK3N0YXRpYyBUaWxlTGF5
ZXIgKmxheWVyQmVpbmdQYWludGVkOworCistICh2b2lkKXNldE5lZWRzRGlzcGxheUluUmVjdDoo
Q0dSZWN0KXJlY3QKK3sKKyAgICBbc2VsZiBzZXROZWVkc0xheW91dF07CisgICAgW3N1cGVyIHNl
dE5lZWRzRGlzcGxheUluUmVjdDpyZWN0XTsKK30KKworLSAodm9pZClsYXlvdXRTdWJsYXllcnMK
K3sKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRocmVhZExvY2soKTsK
KyAgICAvLyBUaGlzIG1heSB0cmlnZ2VyIFdlYktpdCBsYXlvdXQgYW5kIGdlbmVyYXRlIG1vcmUg
cmVwYWludCByZWN0cy4KKyAgICBpZiAoX3RpbGVHcmlkKQorICAgICAgICBfdGlsZUdyaWQtPnRp
bGVDYWNoZSgpLT5wcmVwYXJlVG9EcmF3KCk7Cit9CisKKy0gKHZvaWQpZHJhd0luQ29udGV4dDoo
Q0dDb250ZXh0UmVmKWNvbnRleHQKK3sKKyAgICBpZiAoX3RpbGVHcmlkKQorICAgICAgICBfdGls
ZUdyaWQtPnRpbGVDYWNoZSgpLT5kcmF3TGF5ZXIoc2VsZiwgY29udGV4dCk7Cit9CisKKy0gKGlk
PENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5Cit7CisgICAgVU5VU0VEX1BB
UkFNKGtleSk7CisgICAgLy8gRGlzYWJsZSBhbGwgZGVmYXVsdCBhY3Rpb25zCisgICAgcmV0dXJu
IG5pbDsKK30KKworKyAoVGlsZUxheWVyICopbGF5ZXJCZWluZ1BhaW50ZWQKK3sKKyAgICByZXR1
cm4gbGF5ZXJCZWluZ1BhaW50ZWQ7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXJQb29s
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNiMzFkN2I2NDRlNWVhYmM2MDQwOGUxMGFjNDIyMDMwZjI0YmMyYjIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5oCkBAIC0w
LDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRpbGVMYXllclBvb2xfaAorI2RlZmlu
ZSBUaWxlTGF5ZXJQb29sX2gKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkludFNp
emUuaCIKKyNpbmNsdWRlICJJbnRTaXplSGFzaC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK0BjbGFzcyBUaWxlTGF5ZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgVGlsZUxheWVyUG9vbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGlsZUxh
eWVyUG9vbCk7CitwdWJsaWM6CisgICAgc3RhdGljIFRpbGVMYXllclBvb2wqIHNoYXJlZFBvb2wo
KTsKKworICAgIHZvaWQgYWRkTGF5ZXIoY29uc3QgUmV0YWluUHRyPFRpbGVMYXllcj4mKTsKKyAg
ICBSZXRhaW5QdHI8VGlsZUxheWVyPiB0YWtlTGF5ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJik7
CisKKyAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGFsbCBxdWV1ZWQgbGF5ZXJzIGluIGJ5dGVz
LgorICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9jYXBhY2l0eTsgfQor
ICAgIHZvaWQgc2V0Q2FwYWNpdHkodW5zaWduZWQpOworICAgIHZvaWQgZHJhaW4oKTsKKworICAg
IHVuc2lnbmVkIGRlY2F5ZWRDYXBhY2l0eSgpIGNvbnN0OworCisgICAgc3RhdGljIHVuc2lnbmVk
IGJ5dGVzQmFja2luZ0xheWVyV2l0aFBpeGVsU2l6ZShjb25zdCBJbnRTaXplJik7CisKK3ByaXZh
dGU6CisgICAgVGlsZUxheWVyUG9vbCgpOworCisgICAgdHlwZWRlZiBEZXF1ZTxSZXRhaW5QdHI8
VGlsZUxheWVyPiA+IExheWVyTGlzdDsKKworICAgIGJvb2wgY2FuUmV1c2VMYXllcldpdGhTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWNpdHkgJiYgIXNpemUu
aXNFbXB0eSgpOyB9CisgICAgdm9pZCBzY2hlZHVsZVBydW5lKCk7CisgICAgdm9pZCBwcnVuZSgp
OworICAgIHR5cGVkZWYgZW51bSB7IExlYXZlVW5jaGFuZ2VkLCBNYXJrQXNVc2VkIH0gQWNjZXNz
VHlwZTsKKyAgICBMYXllckxpc3QmIGxpc3RPZkxheWVyc1dpdGhTaXplKGNvbnN0IEludFNpemUm
LCBBY2Nlc3NUeXBlID0gTGVhdmVVbmNoYW5nZWQpOworCisgICAgSGFzaE1hcDxJbnRTaXplLCBM
YXllckxpc3Q+IG1fcmV1c2VMaXN0czsKKyAgICAvLyBPcmRlcmVkIGJ5IHJlY2VudCB1c2UuIFRo
ZSBsYXN0IHNpemUgaXMgdGhlIG1vc3QgcmVjZW50bHkgdXNlZC4KKyAgICBWZWN0b3I8SW50U2l6
ZT4gbV9zaXplc0luUHJ1bmVPcmRlcjsKKyAgICB1bnNpZ25lZCBtX3RvdGFsQnl0ZXM7CisgICAg
dW5zaWduZWQgbV9jYXBhY2l0eTsKKyAgICBNdXRleCBtX2xheWVyUG9vbE11dGV4OworCisgICAg
ZG91YmxlIG1fbGFzdEFkZFRpbWU7CisgICAgYm9vbCBtX25lZWRzUHJ1bmU7CisKKyAgICBmcmll
bmQgTmV2ZXJEZXN0cm95ZWQ8VGlsZUxheWVyUG9vbD47Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisjZW5kaWYgLy8gVGlsZUxheWVyUG9v
bF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9v
bC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXJQb29sLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhlYzQ5MGM1Yzg5ODViODJiNDZjYjRlYjhiNTZhYTAyZjI2NzNjMTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5tbQpA
QCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUaWxlTGF5ZXJQb29sLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJM
b2dnaW5nLmgiCisjaW5jbHVkZSAiTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCisjaW5jbHVkZSAi
VGlsZUxheWVyLmgiCisjaW5jbHVkZSAiVGlsZUdyaWQuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgY29uc3QgZG91YmxlIGNhcGFjaXR5RGVjYXlUaW1lID0gNTsKKwor
VGlsZUxheWVyUG9vbDo6VGlsZUxheWVyUG9vbCgpCisgICAgOiBtX3RvdGFsQnl0ZXMoMCkKKyAg
ICAsIG1fY2FwYWNpdHkoMCkKKyAgICAsIG1fbGFzdEFkZFRpbWUoMCkKKyAgICAsIG1fbmVlZHNQ
cnVuZShmYWxzZSkKK3sKK30KKworVGlsZUxheWVyUG9vbCogVGlsZUxheWVyUG9vbDo6c2hhcmVk
UG9vbCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRpbGVMYXllclBvb2w+IHNoYXJl
ZFBvb2w7CisgICAgcmV0dXJuICZzaGFyZWRQb29sLmdldCgpOworfQorCit1bnNpZ25lZCBUaWxl
TGF5ZXJQb29sOjpieXRlc0JhY2tpbmdMYXllcldpdGhQaXhlbFNpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICByZXR1cm4gc2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7Cit9
CisKK1RpbGVMYXllclBvb2w6OkxheWVyTGlzdCYgVGlsZUxheWVyUG9vbDo6bGlzdE9mTGF5ZXJz
V2l0aFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQorewor
ICAgIEFTU0VSVCghbV9sYXllclBvb2xNdXRleC50cnlMb2NrKCkpOworICAgIEhhc2hNYXA8SW50
U2l6ZSwgTGF5ZXJMaXN0Pjo6aXRlcmF0b3IgaXQgPSBtX3JldXNlTGlzdHMuZmluZChzaXplKTsK
KyAgICBpZiAoaXQgPT0gbV9yZXVzZUxpc3RzLmVuZCgpKSB7CisgICAgICAgIGl0ID0gbV9yZXVz
ZUxpc3RzLmFkZChzaXplLCBMYXllckxpc3QoKSkuaXRlcmF0b3I7CisgICAgICAgIG1fc2l6ZXNJ
blBydW5lT3JkZXIuYXBwZW5kKHNpemUpOworICAgIH0gZWxzZSBpZiAoYWNjZXNzVHlwZSA9PSBN
YXJrQXNVc2VkKSB7CisgICAgICAgIG1fc2l6ZXNJblBydW5lT3JkZXIucmVtb3ZlKG1fc2l6ZXNJ
blBydW5lT3JkZXIucmV2ZXJzZUZpbmQoc2l6ZSkpOworICAgICAgICBtX3NpemVzSW5QcnVuZU9y
ZGVyLmFwcGVuZChzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKK30KKwordm9p
ZCBUaWxlTGF5ZXJQb29sOjphZGRMYXllcihjb25zdCBSZXRhaW5QdHI8VGlsZUxheWVyPiYgbGF5
ZXIpCit7CisgICAgSW50U2l6ZSBsYXllclNpemUoW2xheWVyLmdldCgpIGZyYW1lXS5zaXplKTsK
KyAgICBsYXllclNpemUuc2NhbGUoW2xheWVyLmdldCgpIGNvbnRlbnRzU2NhbGVdKTsKKyAgICBp
ZiAoIWNhblJldXNlTGF5ZXJXaXRoU2l6ZShsYXllclNpemUpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuaGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3Vy
ZSgpKSB7CisgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIlVuZGVyIG1lbW9yeSBwcmVzc3Vy
ZTogJXMsIHRvdGFsQnl0ZXM6ICVkIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgbV90b3RhbEJ5dGVz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xh
eWVyUG9vbE11dGV4KTsKKyAgICBsaXN0T2ZMYXllcnNXaXRoU2l6ZShsYXllclNpemUpLnByZXBl
bmQobGF5ZXIpOworICAgIG1fdG90YWxCeXRlcyArPSBieXRlc0JhY2tpbmdMYXllcldpdGhQaXhl
bFNpemUobGF5ZXJTaXplKTsKKworICAgIG1fbGFzdEFkZFRpbWUgPSBjdXJyZW50VGltZSgpOwor
ICAgIHNjaGVkdWxlUHJ1bmUoKTsKK30KKworUmV0YWluUHRyPFRpbGVMYXllcj4gVGlsZUxheWVy
UG9vbDo6dGFrZUxheWVyV2l0aFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAo
IWNhblJldXNlTGF5ZXJXaXRoU2l6ZShzaXplKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBN
dXRleExvY2tlciBsb2NrZXIobV9sYXllclBvb2xNdXRleCk7CisgICAgTGF5ZXJMaXN0JiByZXVz
ZUxpc3QgPSBsaXN0T2ZMYXllcnNXaXRoU2l6ZShzaXplLCBNYXJrQXNVc2VkKTsKKyAgICBpZiAo
cmV1c2VMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBtX3RvdGFsQnl0
ZXMgLT0gYnl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKHNpemUpOworICAgIHJldHVybiBy
ZXVzZUxpc3QudGFrZUZpcnN0KCk7Cit9CisKK3ZvaWQgVGlsZUxheWVyUG9vbDo6c2V0Q2FwYWNp
dHkodW5zaWduZWQgY2FwYWNpdHkpCit7CisgICAgTXV0ZXhMb2NrZXIgcmV1c2VMb2NrZXIobV9s
YXllclBvb2xNdXRleCk7CisgICAgaWYgKGNhcGFjaXR5IDwgbV9jYXBhY2l0eSkKKyAgICAgICAg
c2NoZWR1bGVQcnVuZSgpOworICAgIG1fY2FwYWNpdHkgPSBjYXBhY2l0eTsKK30KKyAgICAKK3Vu
c2lnbmVkIFRpbGVMYXllclBvb2w6OmRlY2F5ZWRDYXBhY2l0eSgpIGNvbnN0Cit7CisgICAgLy8g
RGVjYXkgdG8gb25lIHF1YXJ0ZXIgb3ZlciBjYXBhY2l0eURlY2F5VGltZQorICAgIGRvdWJsZSB0
aW1lU2luY2VMYXN0QWRkID0gY3VycmVudFRpbWUoKSAtIG1fbGFzdEFkZFRpbWU7CisgICAgaWYg
KHRpbWVTaW5jZUxhc3RBZGQgPiBjYXBhY2l0eURlY2F5VGltZSkKKyAgICAgICAgcmV0dXJuIG1f
Y2FwYWNpdHkgLyA0OworICAgIGZsb2F0IGRlY2F5UHJvZ2VzcyA9IGZsb2F0KHRpbWVTaW5jZUxh
c3RBZGQgLyBjYXBhY2l0eURlY2F5VGltZSk7CisgICAgcmV0dXJuIG1fY2FwYWNpdHkgLyA0ICsg
bV9jYXBhY2l0eSAqIDMgLyA0ICogKDEuZiAtIGRlY2F5UHJvZ2Vzcyk7Cit9CisKK3ZvaWQgVGls
ZUxheWVyUG9vbDo6c2NoZWR1bGVQcnVuZSgpCit7CisgICAgQVNTRVJUKCFtX2xheWVyUG9vbE11
dGV4LnRyeUxvY2soKSk7CisgICAgaWYgKG1fbmVlZHNQcnVuZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fbmVlZHNQcnVuZSA9IHRydWU7CisgICAgZGlzcGF0Y2hfdGltZV90IG5leHRQcnVuZVRp
bWUgPSBkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCAxICogTlNFQ19QRVJfU0VDKTsK
KyAgICBkaXNwYXRjaF9hZnRlcihuZXh0UHJ1bmVUaW1lLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1
ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeeworICAgICAgICBwcnVu
ZSgpOworICAgIH0pOworfQorCit2b2lkIFRpbGVMYXllclBvb2w6OnBydW5lKCkKK3sKKyAgICBN
dXRleExvY2tlciBsb2NrZXIobV9sYXllclBvb2xNdXRleCk7CisgICAgQVNTRVJUKG1fbmVlZHNQ
cnVuZSk7CisgICAgbV9uZWVkc1BydW5lID0gZmFsc2U7CisgICAgdW5zaWduZWQgc2hyaW5rVG8g
PSBkZWNheWVkQ2FwYWNpdHkoKTsKKyAgICB3aGlsZSAobV90b3RhbEJ5dGVzID4gc2hyaW5rVG8p
IHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemVzSW5QcnVuZU9yZGVyLmlzRW1wdHkoKSk7CisgICAg
ICAgIEludFNpemUgc2l6ZVRvRHJvcCA9IG1fc2l6ZXNJblBydW5lT3JkZXIuZmlyc3QoKTsKKyAg
ICAgICAgTGF5ZXJMaXN0JiBvbGRlc3RSZXVzZUxpc3QgPSBtX3JldXNlTGlzdHMuZmluZChzaXpl
VG9Ecm9wKS0+dmFsdWU7CisgICAgICAgIGlmIChvbGRlc3RSZXVzZUxpc3QuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBtX3JldXNlTGlzdHMucmVtb3ZlKHNpemVUb0Ryb3ApOworICAgICAgICAg
ICAgbV9zaXplc0luUHJ1bmVPcmRlci5yZW1vdmUoMCk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorI2lmIExPR19USUxJTkcKKyAgICAgICAgTlNMb2coQCJkcm9wcGluZyBsYXll
ciBvZiBzaXplICVkIHggJWQiLCBzaXplVG9Ecm9wLndpZHRoKCksIHNpemVUb0Ryb3AuaGVpZ2h0
KCkpOworI2VuZGlmCisgICAgICAgIG1fdG90YWxCeXRlcyAtPSBieXRlc0JhY2tpbmdMYXllcldp
dGhQaXhlbFNpemUoc2l6ZVRvRHJvcCk7CisgICAgICAgIC8vIFRoZSBsYXN0IGVsZW1lbnQgaW4g
dGhlIGxpc3QgaXMgdGhlIG9sZGVzdCwgaGVuY2UgbW9zdCBsaWtlbHkgbm90IHRvCisgICAgICAg
IC8vIHN0aWxsIGhhdmUgYSBiYWNraW5nIHN0b3JlLgorICAgICAgICBvbGRlc3RSZXVzZUxpc3Qu
cmVtb3ZlTGFzdCgpOworICAgIH0KKyAgICBpZiAoY3VycmVudFRpbWUoKSAtIG1fbGFzdEFkZFRp
bWUgPD0gY2FwYWNpdHlEZWNheVRpbWUpCisgICAgICAgIHNjaGVkdWxlUHJ1bmUoKTsKK30KKwor
dm9pZCBUaWxlTGF5ZXJQb29sOjpkcmFpbigpCit7CisgICAgTXV0ZXhMb2NrZXIgcmV1c2VMb2Nr
ZXIobV9sYXllclBvb2xNdXRleCk7CisgICAgbV9yZXVzZUxpc3RzLmNsZWFyKCk7CisgICAgbV9z
aXplc0luUHJ1bmVPcmRlci5jbGVhcigpOworICAgIG1fdG90YWxCeXRlcyA9IDA7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVNb3Rpb25NYW5hZ2VyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDk4YWRmMzM4OWUzMTYwMmRiODkzYWVmMzcxZmE2NmJkZmJmNzYzNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdl
ci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBXZWJDb3JlTW90aW9uTWFuYWdlcl9oCisjZGVmaW5lIFdlYkNv
cmVNb3Rpb25NYW5hZ2VyX2gKKworI2ltcG9ydCAiRGV2aWNlTW90aW9uQ2xpZW50SU9TLmgiCisj
aW1wb3J0ICJEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oIgorI2ltcG9ydCA8Q29yZUxvY2F0
aW9uL0NvcmVMb2NhdGlvbi5oPgorI2ltcG9ydCA8Q29yZU1vdGlvbi9Db3JlTW90aW9uLmg+Cisj
aW1wb3J0IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKworI2lmIFBMQVRGT1JNKElPUykKKworY29u
c3QgZmxvYXQga01vdGlvblVwZGF0ZUludGVydmFsID0gMC4wNWY7CisKK0BpbnRlcmZhY2UgV2Vi
Q29yZU1vdGlvbk1hbmFnZXIgOiBOU09iamVjdCB7CisgICAgQ01Nb3Rpb25NYW5hZ2VyKiBtX21v
dGlvbk1hbmFnZXI7CisgICAgQ0xMb2NhdGlvbk1hbmFnZXIqIG1fbG9jYXRpb25NYW5hZ2VyOwor
ICAgIEhhc2hTZXQ8V2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TKj4gbV9kZXZpY2VNb3Rp
b25DbGllbnRzOworICAgIEhhc2hTZXQ8V2ViQ29yZTo6RGV2aWNlT3JpZW50YXRpb25DbGllbnRJ
T1MqPiBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50czsKKyAgICBOU1RpbWVyKiBtX3VwZGF0ZVRp
bWVyOworICAgIEJPT0wgbV9neXJvQXZhaWxhYmxlOworICAgIEJPT0wgbV9oZWFkaW5nQXZhaWxh
YmxlOworfQorCisrIChXZWJDb3JlTW90aW9uTWFuYWdlciAqKXNoYXJlZE1hbmFnZXI7CistICh2
b2lkKWFkZE1vdGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TICopY2xp
ZW50OworLSAodm9pZClyZW1vdmVNb3Rpb25DbGllbnQ6KFdlYkNvcmU6OkRldmljZU1vdGlvbkNs
aWVudElPUyAqKWNsaWVudDsKKy0gKHZvaWQpYWRkT3JpZW50YXRpb25DbGllbnQ6KFdlYkNvcmU6
OkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TICopY2xpZW50OworLSAodm9pZClyZW1vdmVPcmll
bnRhdGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MgKiljbGll
bnQ7CistIChCT09MKWd5cm9BdmFpbGFibGU7CistIChCT09MKWhlYWRpbmdBdmFpbGFibGU7CitA
ZW5kCisKKyNlbmRpZgorCisjZW5kaWYgLy8gV2ViQ29yZU1vdGlvbk1hbmFnZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVNb3Rpb25NYW5hZ2VyLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFlNTg0MDZlMDA4MmFhYTYzMjRhMzdlOWM5Y2E0NTJmN2Y4ODg2OTYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZU1vdGlvbk1h
bmFnZXIubW0KQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJDb3JlTW90
aW9uTWFuYWdlci5oIgorCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCAiV2ViQ29y
ZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIKKyNpbXBvcnQgPENv
cmVMb2NhdGlvbi9Db3JlTG9jYXRpb24uaD4KKyNpbXBvcnQgPENvcmVNb3Rpb24vQ29yZU1vdGlv
bi5oPgorI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9NYXRoRXh0
cmFzLmg+CisjaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgorCisjaWYgUExBVEZPUk0oSU9TKQorCisvLyBHZXQgQ29yZUxvY2F0aW9uIGNsYXNzZXMK
K1NPRlRfTElOS19GUkFNRVdPUksoQ29yZUxvY2F0aW9uKQorCitTT0ZUX0xJTktfQ0xBU1MoQ29y
ZUxvY2F0aW9uLCBDTExvY2F0aW9uTWFuYWdlcikKK1NPRlRfTElOS19DTEFTUyhDb3JlTG9jYXRp
b24sIENMSGVhZGluZykKKworLy8gR2V0IENvcmVNb3Rpb24gY2xhc3NlcworU09GVF9MSU5LX0ZS
QU1FV09SSyhDb3JlTW90aW9uKQorCitTT0ZUX0xJTktfQ0xBU1MoQ29yZU1vdGlvbiwgQ01Nb3Rp
b25NYW5hZ2VyKQorU09GVF9MSU5LX0NMQVNTKENvcmVNb3Rpb24sIENNQWNjZWxlcm9tZXRlckRh
dGEpCitTT0ZUX0xJTktfQ0xBU1MoQ29yZU1vdGlvbiwgQ01EZXZpY2VNb3Rpb24pCisKK3N0YXRp
YyBjb25zdCBkb3VibGUga0dyYXZpdHkgPSA5LjgwNjY1OworCitAaW50ZXJmYWNlIFdlYkNvcmVN
b3Rpb25NYW5hZ2VyKFByaXZhdGUpCisKKy0gKHZvaWQpaW5pdGlhbGl6ZU9uTWFpblRocmVhZDsK
Ky0gKHZvaWQpY2hlY2tDbGllbnRTdGF0dXM7CistICh2b2lkKXVwZGF0ZTsKKy0gKHZvaWQpc2Vu
ZEFjY2VsZXJvbWV0ZXJEYXRhOihDTUFjY2VsZXJvbWV0ZXJEYXRhICopbmV3QWNjZWxlcmF0aW9u
OworLSAodm9pZClzZW5kTW90aW9uRGF0YTooQ01EZXZpY2VNb3Rpb24gKiluZXdNb3Rpb24gd2l0
aEhlYWRpbmc6KENMSGVhZGluZyAqKW5ld0hlYWRpbmc7CisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFdlYkNvcmVNb3Rpb25NYW5hZ2VyCisKKysgKFdlYkNvcmVNb3Rpb25NYW5hZ2VyICopc2hh
cmVkTWFuYWdlcgoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPFdlYkNvcmVN
b3Rpb25NYW5hZ2VyPiwgc2hhcmVkTW90aW9uTWFuYWdlciwgKFtbV2ViQ29yZU1vdGlvbk1hbmFn
ZXIgYWxsb2NdIGluaXRdKSk7CisgICAgcmV0dXJuIHNoYXJlZE1vdGlvbk1hbmFnZXIuZ2V0KCk7
Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmIChz
ZWxmKQorICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9y
KGluaXRpYWxpemVPbk1haW5UaHJlYWQpIHdpdGhPYmplY3Q6bmlsIHdhaXRVbnRpbERvbmU6Tk9d
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBpZiAoV2Vi
Q29yZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW1dlYkNvcmVNb3Rpb25NYW5h
Z2VyIGNsYXNzXSwgc2VsZikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghbV91cGRh
dGVUaW1lcik7CisKKyAgICBpZiAobV9oZWFkaW5nQXZhaWxhYmxlKQorICAgICAgICBbbV9sb2Nh
dGlvbk1hbmFnZXIgc3RvcFVwZGF0aW5nSGVhZGluZ107CisgICAgW21fbG9jYXRpb25NYW5hZ2Vy
IHJlbGVhc2VdOworCisgICAgaWYgKG1fZ3lyb0F2YWlsYWJsZSkKKyAgICAgICAgW21fbW90aW9u
TWFuYWdlciBzdG9wRGV2aWNlTW90aW9uVXBkYXRlc107CisgICAgZWxzZQorICAgICAgICBbbV9t
b3Rpb25NYW5hZ2VyIHN0b3BBY2NlbGVyb21ldGVyVXBkYXRlc107CisgICAgW21fbW90aW9uTWFu
YWdlciByZWxlYXNlXTsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClhZGRN
b3Rpb25DbGllbnQ6KFdlYkNvcmU6OkRldmljZU1vdGlvbkNsaWVudElPUyAqKWNsaWVudAorewor
ICAgIG1fZGV2aWNlTW90aW9uQ2xpZW50cy5hZGQoY2xpZW50KTsKKyAgICBbc2VsZiBjaGVja0Ns
aWVudFN0YXR1c107Cit9CisKKy0gKHZvaWQpcmVtb3ZlTW90aW9uQ2xpZW50OihXZWJDb3JlOjpE
ZXZpY2VNb3Rpb25DbGllbnRJT1MgKiljbGllbnQKK3sKKyAgICBtX2RldmljZU1vdGlvbkNsaWVu
dHMucmVtb3ZlKGNsaWVudCk7CisgICAgW3NlbGYgY2hlY2tDbGllbnRTdGF0dXNdOworfQorCist
ICh2b2lkKWFkZE9yaWVudGF0aW9uQ2xpZW50OihXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbkNs
aWVudElPUyAqKWNsaWVudAoreworICAgIG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzLmFkZChj
bGllbnQpOworICAgIFtzZWxmIGNoZWNrQ2xpZW50U3RhdHVzXTsKK30KKworLSAodm9pZClyZW1v
dmVPcmllbnRhdGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1Mg
KiljbGllbnQKK3sKKyAgICBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50cy5yZW1vdmUoY2xpZW50
KTsKKyAgICBbc2VsZiBjaGVja0NsaWVudFN0YXR1c107Cit9CisKKy0gKEJPT0wpZ3lyb0F2YWls
YWJsZQoreworICAgIHJldHVybiBtX2d5cm9BdmFpbGFibGU7Cit9CisKKy0gKEJPT0wpaGVhZGlu
Z0F2YWlsYWJsZQoreworICAgIHJldHVybiBtX2hlYWRpbmdBdmFpbGFibGU7Cit9CisKKy0gKHZv
aWQpaW5pdGlhbGl6ZU9uTWFpblRocmVhZAoreworICAgIEFTU0VSVCghV2ViVGhyZWFkSXNDdXJy
ZW50KCkpOworCisjZGVmaW5lIENNTW90aW9uTWFuYWdlciBnZXRDTU1vdGlvbk1hbmFnZXJDbGFz
cygpCisgICAgbV9tb3Rpb25NYW5hZ2VyID0gW1tDTU1vdGlvbk1hbmFnZXIgYWxsb2NdIGluaXRd
OworI3VuZGVmIENNTW90aW9uTWFuYWdlcgorCisgICAgbV9neXJvQXZhaWxhYmxlID0gbV9tb3Rp
b25NYW5hZ2VyLmRldmljZU1vdGlvbkF2YWlsYWJsZTsKKworICAgIGlmIChtX2d5cm9BdmFpbGFi
bGUpCisgICAgICAgIG1fbW90aW9uTWFuYWdlci5kZXZpY2VNb3Rpb25VcGRhdGVJbnRlcnZhbCA9
IGtNb3Rpb25VcGRhdGVJbnRlcnZhbDsKKyAgICBlbHNlCisgICAgICAgIG1fbW90aW9uTWFuYWdl
ci5hY2NlbGVyb21ldGVyVXBkYXRlSW50ZXJ2YWwgPSBrTW90aW9uVXBkYXRlSW50ZXJ2YWw7CisK
KyNkZWZpbmUgQ0xMb2NhdGlvbk1hbmFnZXIgZ2V0Q0xMb2NhdGlvbk1hbmFnZXJDbGFzcygpCisg
ICAgbV9sb2NhdGlvbk1hbmFnZXIgPSBbW0NMTG9jYXRpb25NYW5hZ2VyIGFsbG9jXSBpbml0XTsK
KyAgICBtX2hlYWRpbmdBdmFpbGFibGUgPSBbQ0xMb2NhdGlvbk1hbmFnZXIgaGVhZGluZ0F2YWls
YWJsZV07CisjdW5kZWYgQ0xMb2NhdGlvbk1hbmFnZXIKKworICAgIFtzZWxmIGNoZWNrQ2xpZW50
U3RhdHVzXTsKK30KKworLSAodm9pZCljaGVja0NsaWVudFN0YXR1cworeworICAgIGlmICghcHRo
cmVhZF9tYWluX25wKCkpIHsKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhy
ZWFkOl9jbWQgd2l0aE9iamVjdDpuaWwgd2FpdFVudGlsRG9uZTpOT107CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBTaW5jZSB0aGlzIG1ldGhvZCBleGVjdXRlcyBvbiB0aGUgbWFp
biB0aHJlYWQsIGl0IHNob3VsZCBhbHdheXMgYmUgY2FsbGVkCisgICAgLy8gYWZ0ZXIgdGhlIGlu
aXRpYWxpemVPbk1haW5UaHJlYWQgbWV0aG9kIGhhcyBydW4sIGFuZCBoZW5jZSB0aGVyZSBzaG91
bGQKKyAgICAvLyBiZSBubyBjaGFuY2UgdGhhdCBtX21vdGlvbk1hbmFnZXIgaGFzIG5vdCBiZWVu
IGNyZWF0ZWQuCisgICAgQVNTRVJUKG1fbW90aW9uTWFuYWdlcik7CisKKyAgICBpZiAobV9kZXZp
Y2VNb3Rpb25DbGllbnRzLnNpemUoKSB8fCBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50cy5zaXpl
KCkpIHsKKyAgICAgICAgaWYgKG1fZ3lyb0F2YWlsYWJsZSkKKyAgICAgICAgICAgIFttX21vdGlv
bk1hbmFnZXIgc3RhcnREZXZpY2VNb3Rpb25VcGRhdGVzXTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgW21fbW90aW9uTWFuYWdlciBzdGFydEFjY2VsZXJvbWV0ZXJVcGRhdGVzXTsKKworICAg
ICAgICBpZiAobV9oZWFkaW5nQXZhaWxhYmxlKQorICAgICAgICAgICAgW21fbG9jYXRpb25NYW5h
Z2VyIHN0YXJ0VXBkYXRpbmdIZWFkaW5nXTsKKworICAgICAgICBpZiAoIW1fdXBkYXRlVGltZXIp
IHsKKyAgICAgICAgICAgIG1fdXBkYXRlVGltZXIgPSBbW05TVGltZXIgc2NoZWR1bGVkVGltZXJX
aXRoVGltZUludGVydmFsOmtNb3Rpb25VcGRhdGVJbnRlcnZhbAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6c2VsZgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0b3I6QHNlbGVjdG9yKHVwZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVh
dHM6WUVTXSByZXRhaW5dOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgTlNUaW1l
ciAqdGltZXIgPSBtX3VwZGF0ZVRpbWVyOworICAgICAgICBtX3VwZGF0ZVRpbWVyID0gbmlsOwor
ICAgICAgICBbdGltZXIgaW52YWxpZGF0ZV07CisgICAgICAgIFt0aW1lciByZWxlYXNlXTsKKwor
ICAgICAgICBpZiAobV9neXJvQXZhaWxhYmxlKQorICAgICAgICAgICAgW21fbW90aW9uTWFuYWdl
ciBzdG9wRGV2aWNlTW90aW9uVXBkYXRlc107CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtt
X21vdGlvbk1hbmFnZXIgc3RvcEFjY2VsZXJvbWV0ZXJVcGRhdGVzXTsKKworICAgICAgICBpZiAo
bV9oZWFkaW5nQXZhaWxhYmxlKQorICAgICAgICAgICAgW21fbG9jYXRpb25NYW5hZ2VyIHN0b3BV
cGRhdGluZ0hlYWRpbmddOworICAgIH0KK30KKworLSAodm9pZCl1cGRhdGUKK3sKKyAgICAvLyBJ
dCdzIGV4dHJlbWVseSB1bmxpa2VseSB0aGF0IGFuIHVwZGF0ZSBoYXBwZW5zIHdpdGhvdXQgYW4g
YWN0aXZlCisgICAgLy8gbW90aW9uIG9yIGxvY2F0aW9uIG1hbmFnZXIsIGJ1dCB3ZSBzaG91bGQg
Z3VhcmQgZm9yIHRoaXMgY2FzZSBqdXN0IGluIGNhc2UuCisgICAgaWYgKCFtX21vdGlvbk1hbmFn
ZXIgfHwgIW1fbG9jYXRpb25NYW5hZ2VyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8g
V2Ugc2hvdWxkLCBob3dldmVyLCBndWFyZCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIG1hbmFnZXJz
IHJldHVybiBuaWwgZGF0YS4KKyAgICBDTURldmljZU1vdGlvbiAqZGV2aWNlTW90aW9uID0gbV9t
b3Rpb25NYW5hZ2VyLmRldmljZU1vdGlvbjsKKyAgICBpZiAobV9neXJvQXZhaWxhYmxlICYmIGRl
dmljZU1vdGlvbikKKyAgICAgICAgW3NlbGYgc2VuZE1vdGlvbkRhdGE6ZGV2aWNlTW90aW9uIHdp
dGhIZWFkaW5nOm1fbG9jYXRpb25NYW5hZ2VyLmhlYWRpbmddOworICAgIGVsc2UgeworICAgICAg
ICBpZiAoQ01BY2NlbGVyb21ldGVyRGF0YSAqYWNjZWxlcm9tZXRlckRhdGEgPSBtX21vdGlvbk1h
bmFnZXIuYWNjZWxlcm9tZXRlckRhdGEpCisgICAgICAgICAgICBbc2VsZiBzZW5kQWNjZWxlcm9t
ZXRlckRhdGE6YWNjZWxlcm9tZXRlckRhdGFdOworICAgIH0KK30KKworLSAodm9pZClzZW5kQWNj
ZWxlcm9tZXRlckRhdGE6KENNQWNjZWxlcm9tZXRlckRhdGEgKiluZXdBY2NlbGVyYXRpb24KK3sK
KyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgQ01BY2NlbGVyYXRpb24gYWNjZWwgPSBuZXdB
Y2NlbGVyYXRpb24uYWNjZWxlcmF0aW9uOworCisgICAgICAgIFZlY3RvcjxXZWJDb3JlOjpEZXZp
Y2VNb3Rpb25DbGllbnRJT1MqPiBjbGllbnRzOworICAgICAgICBjb3B5VG9WZWN0b3IobV9kZXZp
Y2VNb3Rpb25DbGllbnRzLCBjbGllbnRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjbGllbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY2xpZW50c1tpXS0+bW90aW9uQ2hh
bmdlZCgwLCAwLCAwLCBhY2NlbC54ICoga0dyYXZpdHksIGFjY2VsLnkgKiBrR3Jhdml0eSwgYWNj
ZWwueiAqIGtHcmF2aXR5LCAwLCAwLCAwKTsKKyAgICB9KTsKK30KKworLSAodm9pZClzZW5kTW90
aW9uRGF0YTooQ01EZXZpY2VNb3Rpb24gKiluZXdNb3Rpb24gd2l0aEhlYWRpbmc6KENMSGVhZGlu
ZyAqKW5ld0hlYWRpbmcKK3sKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgLy8gQWNjZWxl
cmF0aW9uIGlzIHVzZXIgKyBncmF2aXR5CisgICAgICAgIENNQWNjZWxlcmF0aW9uIHVzZXJBY2Nl
bCA9IG5ld01vdGlvbi51c2VyQWNjZWxlcmF0aW9uOworICAgICAgICBDTUFjY2VsZXJhdGlvbiBn
cmF2aXR5ID0gbmV3TW90aW9uLmdyYXZpdHk7CisgICAgICAgIENNQWNjZWxlcmF0aW9uIHRvdGFs
QWNjZWw7CisgICAgICAgIHRvdGFsQWNjZWwueCA9IHVzZXJBY2NlbC54ICsgZ3Jhdml0eS54Owor
ICAgICAgICB0b3RhbEFjY2VsLnkgPSB1c2VyQWNjZWwueSArIGdyYXZpdHkueTsKKyAgICAgICAg
dG90YWxBY2NlbC56ID0gdXNlckFjY2VsLnogKyBncmF2aXR5Lno7CisKKyAgICAgICAgQ01Sb3Rh
dGlvblJhdGUgcm90YXRpb25SYXRlID0gbmV3TW90aW9uLnJvdGF0aW9uUmF0ZTsKKworICAgICAg
ICBWZWN0b3I8V2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TKj4gbW90aW9uQ2xpZW50czsK
KyAgICAgICAgY29weVRvVmVjdG9yKG1fZGV2aWNlTW90aW9uQ2xpZW50cywgbW90aW9uQ2xpZW50
cyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbW90aW9uQ2xpZW50cy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgbW90aW9uQ2xpZW50c1tpXS0+bW90aW9uQ2hhbmdlZCh1c2Vy
QWNjZWwueCAqIGtHcmF2aXR5LCB1c2VyQWNjZWwueSAqIGtHcmF2aXR5LCB1c2VyQWNjZWwueiAq
IGtHcmF2aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b3RhbEFjY2VsLnggKiBrR3Jhdml0eSwgdG90YWxBY2NlbC55ICoga0dyYXZpdHksIHRvdGFsQWNj
ZWwueiAqIGtHcmF2aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByYWQyZGVnKHJvdGF0aW9uUmF0ZS54KSwgcmFkMmRlZyhyb3RhdGlvblJhdGUueSksIHJh
ZDJkZWcocm90YXRpb25SYXRlLnopKTsKKyAgICAgICAgfQorCisgICAgICAgIENNQXR0aXR1ZGUq
IGF0dGl0dWRlID0gbmV3TW90aW9uLmF0dGl0dWRlOworCisgICAgICAgIFZlY3RvcjxXZWJDb3Jl
OjpEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUyo+IG9yaWVudGF0aW9uQ2xpZW50czsKKyAgICAg
ICAgY29weVRvVmVjdG9yKG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzLCBvcmllbnRhdGlvbkNs
aWVudHMpOworCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgVzNDIERldmljZU9yaWVudGF0aW9u
IHNwZWNpZmljYXRpb24gbGFiZWxzIHRoZSBYIGF4aXMKKyAgICAgICAgLy8gYXMgcGFzc2luZyBi
ZXR3ZWVuIHRoZSBzaWRlcyBvZiB0aGUgZGV2aWNlLCBhbmQgdGhlIFkgYXhpcyBhcyBwYXNzaW5n
CisgICAgICAgIC8vIGZyb20gdG9wIHRvIGJvdHRvbSBvZiB0aGUgZGV2aWNlLiBDb252ZW50aW9u
YWwgVGFpdC1CcnlhbiBFdWxlciBhbmdsZXMKKyAgICAgICAgLy8gaGF2ZSB0aGUgWCBheGlzIHBv
aW50aW5nIGZvcndhcmQgKHRoZSBoZWFkaW5nIG9mIHRoZSBhaXJjcmFmdCwgZm9yCisgICAgICAg
IC8vIGV4YW1wbGUpLCB3aGljaCBpcyB3aGF0IHlvdSB3b3VsZCAicm9sbCIgYXJvdW5kLCBhbmQg
d2hhdCB0aGUgVzNDIHNheXMKKyAgICAgICAgLy8gaXMgdGhlIFkgYXhpcy4gVW5mb3J0dW5hdGVs
eSBDb3JlTW90aW9uIGRvZXNuJ3Qgbm9ybWFsaXplIGluIHRoZQorICAgICAgICAvLyBzYW1lIG9y
ZGVyIGFzIHRoZSBXM0MgcmVxdWVzdHMsIHNvIG91ciBiZXRhIGlzIFstOTAsIDkwXSBhbmQgZ2Ft
bWEgaXMKKyAgICAgICAgLy8gWy0xODAsIDE4MF0uIEZvciBtb3N0IHByYWN0aWNhbCB1c2VzIHRo
aXMgaXMgYWNjZXB0YWJsZS4KKyAgICAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS85NDE0NDU5
PiBOb3JtYWxpemUgb3VyIERldmljZU9yaWVudGF0aW9uIGJldGEvZ2FtbWEgcGVyIHNwZWMKKwor
ICAgICAgICAvLyBSb3RhdGlvbiBhcm91bmQgdGhlIFogYXhpcyAocG9pbnRpbmcgdXAsIG5vcm1h
bGl6ZWQgdG8gWzAsIDM2MF0gZGVnKS4KKyAgICAgICAgZG91YmxlIGFscGhhID0gcmFkMmRlZyhh
dHRpdHVkZS55YXcgPiAwID8gYXR0aXR1ZGUueWF3IDogKE1fUEkgKiAyICsgYXR0aXR1ZGUueWF3
KSk7CisgICAgICAgIC8vIFJvdGF0aW9uIGFyb3VuZCB0aGUgWCBheGlzIChzaWRlIHRvIHNpZGUp
LgorICAgICAgICBkb3VibGUgYmV0YSA9IHJhZDJkZWcoYXR0aXR1ZGUucGl0Y2gpOworICAgICAg
ICAvLyBSb3RhdGlvbiBhcm91bmQgdGhlIFkgYXhpcyAodG9wIHRvIGJvdHRvbSkuCisgICAgICAg
IGRvdWJsZSBnYW1tYSA9IHJhZDJkZWcoYXR0aXR1ZGUucm9sbCk7CisKKyAgICAgICAgZG91Ymxl
IGhlYWRpbmcgPSAobV9oZWFkaW5nQXZhaWxhYmxlICYmIG5ld0hlYWRpbmcpID8gbmV3SGVhZGlu
Zy5tYWduZXRpY0hlYWRpbmcgOiAwOworICAgICAgICBkb3VibGUgaGVhZGluZ0FjY3VyYWN5ID0g
KG1faGVhZGluZ0F2YWlsYWJsZSAmJiBuZXdIZWFkaW5nKSA/IG5ld0hlYWRpbmcuaGVhZGluZ0Fj
Y3VyYWN5IDogLTE7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcmllbnRhdGlv
bkNsaWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvcmllbnRhdGlvbkNsaWVudHNbaV0t
Pm9yaWVudGF0aW9uQ2hhbmdlZChhbHBoYSwgYmV0YSwgZ2FtbWEsIGhlYWRpbmcsIGhlYWRpbmdB
Y2N1cmFjeSk7CisgICAgfSk7Cit9CisKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44OGFkNTVmNjVhOTA4ZDQwNmExOWM5NzYxYzI1YmNhYjEzNzFkNDQxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRl
cmZhY2VJT1MuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdlYkNvcmVTeXN0ZW1J
bnRlcmZhY2VJT1NfaAorI2RlZmluZSBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TX2gKKworI2lu
Y2x1ZGUgPEF2YWlsYWJpbGl0eS5oPgorCit0eXBlZGVmIGVudW0geworICAgIHdrSU9TU3lzdGVt
VmVyc2lvbl8zXzAgPSBfX0lQSE9ORV8zXzAsCisgICAgd2tJT1NTeXN0ZW1WZXJzaW9uXzRfMiA9
IF9fSVBIT05FXzRfMiwKKyAgICB3a0lPU1N5c3RlbVZlcnNpb25fNV8wID0gX19JUEhPTkVfNV8w
LAorICAgIHdrSU9TU3lzdGVtVmVyc2lvbl82XzAgPSBfX0lQSE9ORV82XzAsCit9IHdrSU9TU3lz
dGVtVmVyc2lvbjsKKworYm9vbCBpb3NFeGVjdXRhYmxlV2FzTGlua2VkT25PckFmdGVyVmVyc2lv
bih3a0lPU1N5c3RlbVZlcnNpb24pOworCitleHRlcm4gYm9vbCAoKndrRXhlY3V0YWJsZVdhc0xp
bmtlZE9uT3JBZnRlcklPU1ZlcnNpb24pKGludCk7CisKK2V4dGVybiBib29sICgqd2tJc0dCMTgw
MzBDb21wbGlhbmNlUmVxdWlyZWQpKHZvaWQpOworCitpbmxpbmUgYm9vbCBpb3NFeGVjdXRhYmxl
V2FzTGlua2VkT25PckFmdGVyVmVyc2lvbih3a0lPU1N5c3RlbVZlcnNpb24gdmVyc2lvbikKK3sK
KyAgICByZXR1cm4gd2tFeGVjdXRhYmxlV2FzTGlua2VkT25PckFmdGVySU9TVmVyc2lvbih2ZXJz
aW9uKTsKK30KKwordHlwZWRlZiBlbnVtIHsKKyAgICB3a0RldmljZUNsYXNzSW52YWxpZCA9IC0x
LAorICAgIHdrRGV2aWNlQ2xhc3NpUGFkLAorICAgIHdrRGV2aWNlQ2xhc3NpUGhvbmUsCisgICAg
d2tEZXZpY2VDbGFzc2lQb2QsCit9IHdrRGV2aWNlQ2xhc3M7CitleHRlcm4gaW50ICgqd2tHZXRE
ZXZpY2VDbGFzcykodm9pZCk7CitpbmxpbmUgd2tEZXZpY2VDbGFzcyBpb3NEZXZpY2VDbGFzcyh2
b2lkKQoreworICAgIGludCBkZXZpY2VDbGFzcyA9IHdrR2V0RGV2aWNlQ2xhc3MoKTsKKyAgICBz
d2l0Y2ggKGRldmljZUNsYXNzKSB7CisgICAgY2FzZSB3a0RldmljZUNsYXNzSW52YWxpZDoKKyAg
ICBjYXNlIHdrRGV2aWNlQ2xhc3NpUGFkOgorICAgIGNhc2Ugd2tEZXZpY2VDbGFzc2lQaG9uZToK
KyAgICBjYXNlIHdrRGV2aWNlQ2xhc3NpUG9kOgorICAgICAgICByZXR1cm4gKHdrRGV2aWNlQ2xh
c3MpZGV2aWNlQ2xhc3M7CisgICAgfQorICAgIGFzc2VydChmYWxzZSk7CisgICAgcmV0dXJuIHdr
RGV2aWNlQ2xhc3NJbnZhbGlkOworfQorCitleHRlcm4gQ0ZTdHJpbmdSZWYgKCp3a0dldFVzZXJB
Z2VudCkodm9pZCk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgKCp3a0dldFBsYXRmb3JtTmFtZUZvck5h
dmlnYXRvcikodm9pZCk7CitleHRlcm4gQ0ZTdHJpbmdSZWYgKCp3a0dldFZlbmRvck5hbWVGb3JO
YXZpZ2F0b3IpKHZvaWQpOworCisjZW5kaWYgLy8gV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPU19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlU3lzdGVt
SW50ZXJmYWNlSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiNzY0YTVlNDNkZmE5ZjE3ZTMyYTk0ZjdiMTBk
NDUwODQ4NzAwNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5tbQpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAq
IENvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgorCit2b2lkICgqd2tDQUxheWVyRW51bWVyYXRlUmVjdHNCZWlu
Z0RyYXduV2l0aEJsb2NrKShDQUxheWVyICosIENHQ29udGV4dFJlZiBjb250ZXh0LCB2b2lkIChe
YmxvY2spKENHUmVjdCByZWN0KSk7CitCT09MICgqd2tDR0NvbnRleHRHZXRTaG91bGRTbW9vdGhG
b250cykoQ0dDb250ZXh0UmVmKTsKK0NHUGF0dGVyblJlZiAoKndrQ0dQYXR0ZXJuQ3JlYXRlV2l0
aEltYWdlQW5kVHJhbnNmb3JtKShDR0ltYWdlUmVmLCBDR0FmZmluZVRyYW5zZm9ybSwgaW50KTsK
K3ZvaWQgKCp3a0NHQ29udGV4dFJlc2V0Q2xpcCkoQ0dDb250ZXh0UmVmKTsgCitDRlN0cmluZ1Jl
ZiAoKndrQ29weUNGTG9jYWxpemF0aW9uUHJlZmVycmVkTmFtZSkoQ0ZTdHJpbmdSZWYpOwordm9p
ZCAoKndrQ2xlYXJHbHlwaFZlY3Rvcikodm9pZCogZ2x5cGhzKTsKK09TU3RhdHVzICgqd2tDb252
ZXJ0Q2hhclRvR2x5cGhzKSh2b2lkKiBzdHlsZUdyb3VwLCBjb25zdCBVbmlDaGFyKiwgdW5zaWdu
ZWQgbnVtQ2hhcmFjdGVycywgdm9pZCogZ2x5cGhzKTsKK05TU3RyaW5nKiAoKndrR2V0TUlNRVR5
cGVGb3JFeHRlbnNpb24pKE5TU3RyaW5nKik7CitOU0RhdGUgKigqd2tHZXROU1VSTFJlc3BvbnNl
TGFzdE1vZGlmaWVkRGF0ZSkoTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UpOwordm9pZCAoKndrU2V0
QmFzZUNUTSkoQ0dDb250ZXh0UmVmLCBDR0FmZmluZVRyYW5zZm9ybSk7Cit2b2lkICgqd2tTZXRQ
YXR0ZXJuUGhhc2VJblVzZXJTcGFjZSkoQ0dDb250ZXh0UmVmLCBDR1BvaW50IHBvaW50KTsKK0NH
QWZmaW5lVHJhbnNmb3JtICgqd2tHZXRVc2VyVG9CYXNlQ1RNKShDR0NvbnRleHRSZWYpOworYm9v
bCAoKndrQ0dDb250ZXh0SXNQREZDb250ZXh0KShDR0NvbnRleHRSZWYpOwordm9pZCAoKndrU2V0
VXBGb250Q2FjaGUpKCk7Cit2b2lkICgqd2tTaWduYWxDRlJlYWRTdHJlYW1FbmQpKENGUmVhZFN0
cmVhbVJlZiBzdHJlYW0pOwordm9pZCAoKndrU2lnbmFsQ0ZSZWFkU3RyZWFtSGFzQnl0ZXMpKENG
UmVhZFN0cmVhbVJlZiBzdHJlYW0pOwordm9pZCAoKndrU2lnbmFsQ0ZSZWFkU3RyZWFtRXJyb3Ip
KENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIENGU3RyZWFtRXJyb3IgKmVycm9yKTsKK0NGUmVhZFN0
cmVhbVJlZiAoKndrQ3JlYXRlQ3VzdG9tQ0ZSZWFkU3RyZWFtKSh2b2lkICooKmZvcm1DcmVhdGUp
KENGUmVhZFN0cmVhbVJlZiwgdm9pZCAqKSwgCisgICAgdm9pZCAoKmZvcm1GaW5hbGl6ZSkoQ0ZS
ZWFkU3RyZWFtUmVmLCB2b2lkICopLCAKKyAgICBCb29sZWFuICgqZm9ybU9wZW4pKENGUmVhZFN0
cmVhbVJlZiwgQ0ZTdHJlYW1FcnJvciAqLCBCb29sZWFuICosIHZvaWQgKiksIAorICAgIENGSW5k
ZXggKCpmb3JtUmVhZCkoQ0ZSZWFkU3RyZWFtUmVmLCBVSW50OCAqLCBDRkluZGV4LCBDRlN0cmVh
bUVycm9yICosIEJvb2xlYW4gKiwgdm9pZCAqKSwgCisgICAgQm9vbGVhbiAoKmZvcm1DYW5SZWFk
KShDRlJlYWRTdHJlYW1SZWYsIHZvaWQgKiksIAorICAgIHZvaWQgKCpmb3JtQ2xvc2UpKENGUmVh
ZFN0cmVhbVJlZiwgdm9pZCAqKSwgCisgICAgdm9pZCAoKmZvcm1TY2hlZHVsZSkoQ0ZSZWFkU3Ry
ZWFtUmVmLCBDRlJ1bkxvb3BSZWYsIENGU3RyaW5nUmVmLCB2b2lkICopLCAKKyAgICB2b2lkICgq
Zm9ybVVuc2NoZWR1bGUpKENGUmVhZFN0cmVhbVJlZiwgQ0ZSdW5Mb29wUmVmLCBDRlN0cmluZ1Jl
Ziwgdm9pZCAqKSwKKyAgICB2b2lkICpjb250ZXh0KTsKK05TU3RyaW5nKiAoKndrQ29weU5TVVJM
UmVzcG9uc2VTdGF0dXNMaW5lKShOU1VSTFJlc3BvbnNlKik7Cit2b2lkICgqd2tTZXROU1VSTENv
bm5lY3Rpb25EZWZlcnNDYWxsYmFja3MpKE5TVVJMQ29ubmVjdGlvbiAqLCBCT09MKTsKK3ZvaWQg
KCp3a1NldE5TVVJMUmVxdWVzdFNob3VsZENvbnRlbnRTbmlmZikoTlNNdXRhYmxlVVJMUmVxdWVz
dCAqLCBCT09MKTsKK2lkICgqd2tDcmVhdGVOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZVByb3h5KSh2
b2lkKTsKK3Vuc2lnbmVkICgqd2tJbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQ
ZXJIb3N0KSh1bnNpZ25lZCBwcmVmZXJyZWRDb25uZWN0aW9uQ291bnQpOworaW50ICgqd2tHZXRI
VFRQUGlwZWxpbmluZ1ByaW9yaXR5KShDRlVSTFJlcXVlc3RSZWYpOwordm9pZCAoKndrU2V0SFRU
UFBpcGVsaW5pbmdNYXhpbXVtUHJpb3JpdHkpKGludCBwcmlvcml0eSk7Cit2b2lkICgqd2tTZXRI
VFRQUGlwZWxpbmluZ1ByaW9yaXR5KShDRlVSTFJlcXVlc3RSZWYsIGludCBwcmlvcml0eSk7Cit2
b2lkICgqd2tTZXRIVFRQUGlwZWxpbmluZ01pbmltdW1GYXN0TGFuZVByaW9yaXR5KShpbnQgcHJp
b3JpdHkpOwordm9pZCAoKndrU2V0Q09OTkVDVFByb3h5Rm9yU3RyZWFtKShDRlJlYWRTdHJlYW1S
ZWYsIENGU3RyaW5nUmVmIHByb3h5SG9zdCwgQ0ZOdW1iZXJSZWYgcHJveHlQb3J0KTsKK3ZvaWQg
KCp3a1NldENPTk5FQ1RQcm94eUF1dGhvcml6YXRpb25Gb3JTdHJlYW0pKENGUmVhZFN0cmVhbVJl
ZiwgQ0ZTdHJpbmdSZWYgcHJveHlBdXRob3JpemF0aW9uU3RyaW5nKTsKK3ZvaWQgKCp3a1NldENv
b2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdFbmFibGVkKShCT09MKTsKK0NGSFRUUE1lc3NhZ2VS
ZWYgKCp3a0NvcHlDT05ORUNUUHJveHlSZXNwb25zZSkoQ0ZSZWFkU3RyZWFtUmVmLCBDRlVSTFJl
ZiByZXNwb25zZVVSTCwgQ0ZTdHJpbmdSZWYgcHJveHlIb3N0LCBDRk51bWJlclJlZiBwcm94eVBv
cnQpOworYm9vbCAoKndrRXhlY3V0YWJsZVdhc0xpbmtlZE9uT3JBZnRlcklPU1ZlcnNpb24pKGlu
dCk7CitpbnQgKCp3a0dldERldmljZUNsYXNzKSh2b2lkKTsKK0NHU2l6ZSAoKndrR2V0Vmlld3Bv
cnRTY3JlZW5TaXplKSh2b2lkKTsKK3ZvaWQgKCp3a1NldExheWVyQ29udGVudHNTY2FsZSkoQ0FM
YXllciAqKTsKK2Zsb2F0ICgqd2tHZXRTY3JlZW5TY2FsZUZhY3Rvcikodm9pZCk7Citib29sICgq
d2tJc0dCMTgwMzBDb21wbGlhbmNlUmVxdWlyZWQpKHZvaWQpOwordm9pZCAoKndrQ0dQYXRoQWRk
Um91bmRlZFJlY3QpKENHTXV0YWJsZVBhdGhSZWYgcGF0aCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zv
cm0qIG1hdHJpeCwgQ0dSZWN0IHJlY3QsIENHRmxvYXQgY29ybmVyV2lkdGgsIENHRmxvYXQgY29y
bmVySGVpZ2h0KTsgCit2b2lkICgqd2tDRlVSTFJlcXVlc3RBbGxvd0FsbFBvc3RDYWNoaW5nKShD
RlVSTFJlcXVlc3RSZWYpOworQ0ZBcnJheVJlZiAoKndrQ29weU5TVVJMUmVzcG9uc2VDZXJ0aWZp
Y2F0ZUNoYWluKShOU1VSTFJlc3BvbnNlKik7CisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorQ0ZIVFRQ
Q29va2llU3RvcmFnZVJlZiAoKndrR2V0RGVmYXVsdEhUVFBDb29raWVTdG9yYWdlKSgpOworV0tD
RlVSTENyZWRlbnRpYWxSZWYgKCp3a0NvcHlDcmVkZW50aWFsRnJvbUNGUGVyc2lzdGVudFN0b3Jh
Z2UpKENGVVJMUHJvdGVjdGlvblNwYWNlUmVmIHByb3RlY3Rpb25TcGFjZSk7Cit2b2lkICgqd2tT
ZXRDRlVSTFJlcXVlc3RTaG91bGRDb250ZW50U25pZmYpKENGTXV0YWJsZVVSTFJlcXVlc3RSZWYs
IGJvb2wpOworQ0ZBcnJheVJlZiAoKndrQ0ZVUkxSZXF1ZXN0Q29weUhUVFBSZXF1ZXN0Qm9keVBh
cnRzKShDRlVSTFJlcXVlc3RSZWYpOwordm9pZCAoKndrQ0ZVUkxSZXF1ZXN0U2V0SFRUUFJlcXVl
c3RCb2R5UGFydHMpKENGTXV0YWJsZVVSTFJlcXVlc3RSZWYsIENGQXJyYXlSZWYgYm9keVBhcnRz
KTsKK3ZvaWQgKCp3a1NldFJlcXVlc3RTdG9yYWdlU2Vzc2lvbikoQ0ZVUkxTdG9yYWdlU2Vzc2lv
blJlZiwgQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZik7CisjZW5kaWYKKworYm9vbCAoKndrR2V0VmVy
dGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKShDVEZvbnRSZWYsIGNvbnN0IFVuaUNoYXJbXSwgQ0dH
bHlwaFtdLCBzaXplX3QpOworQ1RMaW5lUmVmICgqd2tDcmVhdGVDVExpbmVXaXRoVW5pQ2hhclBy
b3ZpZGVyKShjb25zdCBVbmlDaGFyKiAoKnByb3ZpZGUpKENGSW5kZXggc3RyaW5nSW5kZXgsIENG
SW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiksIHZv
aWQgKCpkaXNwb3NlKShjb25zdCBVbmlDaGFyKiBjaGFycywgdm9pZCopLCB2b2lkKik7Citib29s
ICgqd2tDVEZvbnRUcmFuc2Zvcm1HbHlwaHMpKENURm9udFJlZiBmb250LCBDR0dseXBoIGdseXBo
c1tdLCBDR1NpemUgYWR2YW5jZXNbXSwgQ0ZJbmRleCBjb3VudCwgd2tDVEZvbnRUcmFuc2Zvcm1P
cHRpb25zIG9wdGlvbnMpOworCitDR1NpemUgKCp3a0NUUnVuR2V0SW5pdGlhbEFkdmFuY2UpKENU
UnVuUmVmKTsKKworQ1RUeXBlc2V0dGVyUmVmICgqd2tDcmVhdGVDVFR5cGVzZXR0ZXJXaXRoVW5p
Q2hhclByb3ZpZGVyQW5kT3B0aW9ucykoY29uc3QgVW5pQ2hhciogKCpwcm92aWRlKShDRkluZGV4
IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjaGFyQ291bnQsIENGRGljdGlvbmFyeVJlZiogYXR0cmli
dXRlcywgdm9pZCopLCB2b2lkICgqZGlzcG9zZSkoY29uc3QgVW5pQ2hhciogY2hhcnMsIHZvaWQq
KSwgdm9pZCosIENGRGljdGlvbmFyeVJlZiBvcHRpb25zKTsKKworI2lmICFQTEFURk9STShJT1Nf
U0lNVUxBVE9SKQorQ0dDb250ZXh0UmVmICgqd2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlKShJT1N1
cmZhY2VSZWYgc3VyZmFjZSwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgQ0dDb2xv
clNwYWNlUmVmIGNvbG9yU3BhY2UpOworQ0dJbWFnZVJlZiAoKndrSU9TdXJmYWNlQ29udGV4dENy
ZWF0ZUltYWdlKShDR0NvbnRleHRSZWYgY29udGV4dCk7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
U19TSU1VTEFUT1IpCisKK0NGVVJMU3RvcmFnZVNlc3Npb25SZWYgKCp3a0NyZWF0ZVByaXZhdGVT
dG9yYWdlU2Vzc2lvbikoQ0ZTdHJpbmdSZWYpOworTlNVUkxSZXF1ZXN0KiAoKndrQ29weVJlcXVl
c3RXaXRoU3RvcmFnZVNlc3Npb24pKENGVVJMU3RvcmFnZVNlc3Npb25SZWYsIE5TVVJMUmVxdWVz
dCopOworQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiAoKndrQ29weUhUVFBDb29raWVTdG9yYWdlKShD
RlVSTFN0b3JhZ2VTZXNzaW9uUmVmKTsKK3Vuc2lnbmVkICgqd2tHZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KShDRkhUVFBDb29raWVTdG9yYWdlUmVmKTsKK3ZvaWQgKCp3a1NldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3kpKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYsIHVuc2lnbmVkKTsKK05TQXJyYXkg
Kigqd2tIVFRQQ29va2llcykoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZik7CitOU0FycmF5ICooKndr
SFRUUENvb2tpZXNGb3JVUkwpKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYsIE5TVVJMICopOwordm9p
ZCAoKndrU2V0SFRUUENvb2tpZXNGb3JVUkwpKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYsIE5TQXJy
YXkgKiwgTlNVUkwgKiwgTlNVUkwgKik7Cit2b2lkICgqd2tEZWxldGVBbGxIVFRQQ29va2llcyko
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZik7Cit2b2lkICgqd2tEZWxldGVIVFRQQ29va2llKShDRkhU
VFBDb29raWVTdG9yYWdlUmVmLCBOU0hUVFBDb29raWUgKik7CisKK0NGU3RyaW5nUmVmICgqd2tH
ZXRDRlVSTFJlc3BvbnNlTUlNRVR5cGUpKENGVVJMUmVzcG9uc2VSZWYpOworQ0ZVUkxSZWYgKCp3
a0dldENGVVJMUmVzcG9uc2VVUkwpKENGVVJMUmVzcG9uc2VSZWYpOworQ0ZIVFRQTWVzc2FnZVJl
ZiAoKndrR2V0Q0ZVUkxSZXNwb25zZUhUVFBSZXNwb25zZSkoQ0ZVUkxSZXNwb25zZVJlZik7CitD
RlN0cmluZ1JlZiAoKndrQ29weUNGVVJMUmVzcG9uc2VTdWdnZXN0ZWRGaWxlbmFtZSkoQ0ZVUkxS
ZXNwb25zZVJlZik7Cit2b2lkICgqd2tTZXRDRlVSTFJlc3BvbnNlTUlNRVR5cGUpKENGVVJMUmVz
cG9uc2VSZWYsIENGU3RyaW5nUmVmIG1pbWVUeXBlKTsKKwordm9pZCgqd2tEZXN0cm95UmVuZGVy
aW5nUmVzb3VyY2VzKSh2b2lkKTsKKworYm9vbCAoKndrQ2FwdGlvbkFwcGVhcmFuY2VIYXNVc2Vy
UHJlZmVyZW5jZXMpKHZvaWQpOworYm9vbCAoKndrQ2FwdGlvbkFwcGVhcmFuY2VTaG93Q2FwdGlv
bnNXaGVuQXZhaWxhYmxlKSh2b2lkKTsKK0NHQ29sb3JSZWYoKndrQ2FwdGlvbkFwcGVhcmFuY2VD
b3B5Rm9yZWdyb3VuZENvbG9yKSh2b2lkKTsKK0NHQ29sb3JSZWYoKndrQ2FwdGlvbkFwcGVhcmFu
Y2VDb3B5QmFja2dyb3VuZENvbG9yKSh2b2lkKTsKK0NHQ29sb3JSZWYoKndrQ2FwdGlvbkFwcGVh
cmFuY2VDb3B5V2luZG93Q29sb3IpKHZvaWQpOworYm9vbCgqd2tDYXB0aW9uQXBwZWFyYW5jZUdl
dEZvcmVncm91bmRPcGFjaXR5KShDR0Zsb2F0Kik7Citib29sKCp3a0NhcHRpb25BcHBlYXJhbmNl
R2V0QmFja2dyb3VuZE9wYWNpdHkpKENHRmxvYXQqKTsKK2Jvb2woKndrQ2FwdGlvbkFwcGVhcmFu
Y2VHZXRXaW5kb3dPcGFjaXR5KShDR0Zsb2F0Kik7CitDR0ZvbnRSZWYoKndrQ2FwdGlvbkFwcGVh
cmFuY2VDb3B5Rm9udEZvclN0eWxlKShpbnQpOworYm9vbCgqd2tDYXB0aW9uQXBwZWFyYW5jZUdl
dFJlbGF0aXZlQ2hhcmFjdGVyU2l6ZSkoQ0dGbG9hdCopOworaW50KCp3a0NhcHRpb25BcHBlYXJh
bmNlR2V0VGV4dEVkZ2VTdHlsZSkodm9pZCk7CitDRlN0cmluZ1JlZigqd2tDYXB0aW9uQXBwZWFy
YW5jZUdldFNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbikodm9pZCk7CisKKyNpZiBFTkFCTEUo
UFVCTElDX1NVRkZJWF9MSVNUKQorYm9vbCAoKndrSXNQdWJsaWNTdWZmaXgpKE5TU3RyaW5nICpo
b3N0KTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKK0NGU3RyaW5n
UmVmICgqd2tDYWNoZVBhcnRpdGlvbktleSkodm9pZCk7CisjZW5kaWYKKworQ0ZTdHJpbmdSZWYg
KCp3a0dldFVzZXJBZ2VudCkodm9pZCk7CitDRlN0cmluZ1JlZiAoKndrR2V0UGxhdGZvcm1OYW1l
Rm9yTmF2aWdhdG9yKSh2b2lkKTsKK0NGU3RyaW5nUmVmICgqd2tHZXRWZW5kb3JOYW1lRm9yTmF2
aWdhdG9yKSh2b2lkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkV2ZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGY4Mjk5N2VmZTI4MWRmMzEyODI5Zjk5NTgyZWRkZDFjNDAwODA1MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJFdmVudC5oCkBAIC0wLDAg
KzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRklYTUU6IFJlbmFtZSB0aGlzIGZpbGUgdG8gV2Vi
RXZlbnRJT1MuaCBhZnRlciB3ZSB1cHN0cmVhbSB0aGUgaU9TIHBvcnQuCisjaWZuZGVmIFdlYkV2
ZW50SU9TX2gKKyNkZWZpbmUgV2ViRXZlbnRJT1NfaAorCisjaW1wb3J0IDxDb3JlR3JhcGhpY3Mv
Q29yZUdyYXBoaWNzLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKwordHlw
ZWRlZiBlbnVtIHsKKyAgICBXZWJFdmVudE1vdXNlRG93biwKKyAgICBXZWJFdmVudE1vdXNlVXAs
CisgICAgV2ViRXZlbnRNb3VzZU1vdmVkLAorICAgIAorICAgIFdlYkV2ZW50U2Nyb2xsV2hlZWws
CisgICAgCisgICAgV2ViRXZlbnRLZXlEb3duLAorICAgIFdlYkV2ZW50S2V5VXAsCisgICAgCisg
ICAgV2ViRXZlbnRUb3VjaEJlZ2luLAorICAgIFdlYkV2ZW50VG91Y2hDaGFuZ2UsCisgICAgV2Vi
RXZlbnRUb3VjaEVuZCwKKyAgICBXZWJFdmVudFRvdWNoQ2FuY2VsCit9IFdlYkV2ZW50VHlwZTsK
KwordHlwZWRlZiBlbnVtIHsKKyAgICBXZWJFdmVudFRvdWNoUGhhc2VCZWdhbiwKKyAgICBXZWJF
dmVudFRvdWNoUGhhc2VNb3ZlZCwKKyAgICBXZWJFdmVudFRvdWNoUGhhc2VTdGF0aW9uYXJ5LAor
ICAgIFdlYkV2ZW50VG91Y2hQaGFzZUVuZGVkLAorICAgIFdlYkV2ZW50VG91Y2hQaGFzZUNhbmNl
bGxlZAorfSBXZWJFdmVudFRvdWNoUGhhc2VUeXBlOworCisvLyBUaGVzZSBlbnVtIHZhbHVlcyBh
cmUgY29waWVkIGRpcmVjdGx5IGZyb20gR1NFdmVudCBmb3IgY29tcGF0aWJpbGl0eS4KK3R5cGVk
ZWYgZW51bSB7CisgICAgV2ViRXZlbnRGbGFnTWFza0FscGhhU2hpZnQgPSAweDAwMDEwMDAwLAor
ICAgIFdlYkV2ZW50RmxhZ01hc2tTaGlmdCAgICAgID0gMHgwMDAyMDAwMCwKKyAgICBXZWJFdmVu
dEZsYWdNYXNrQ29udHJvbCAgICA9IDB4MDAwNDAwMDAsCisgICAgV2ViRXZlbnRGbGFnTWFza0Fs
dGVybmF0ZSAgPSAweDAwMDgwMDAwLAorICAgIFdlYkV2ZW50RmxhZ01hc2tDb21tYW5kICAgID0g
MHgwMDEwMDAwMCwKK30gV2ViRXZlbnRGbGFnVmFsdWVzOwordHlwZWRlZiB1bnNpZ25lZCBXZWJF
dmVudEZsYWdzOworCisvLyBUaGVzZSBlbnVtIHZhbHVlcyBhcmUgY29waWVkIGRpcmVjdGx5IGZy
b20gR1NFdmVudCBmb3IgY29tcGF0aWJpbGl0eS4KK3R5cGVkZWYgZW51bSB7CisgICAgV2ViRXZl
bnRDaGFyYWN0ZXJTZXRBU0NJSSAgICAgICAgICAgPSAwLAorICAgIFdlYkV2ZW50Q2hhcmFjdGVy
U2V0U3ltYm9sICAgICAgICAgID0gMSwKKyAgICBXZWJFdmVudENoYXJhY3RlclNldERpbmdiYXRz
ICAgICAgICA9IDIsCisgICAgV2ViRXZlbnRDaGFyYWN0ZXJTZXRVbmljb2RlICAgICAgICAgPSAy
NTMsCisgICAgV2ViRXZlbnRDaGFyYWN0ZXJTZXRGdW5jdGlvbktleXMgICAgPSAyNTQsCit9IFdl
YkV2ZW50Q2hhcmFjdGVyU2V0OworCitAaW50ZXJmYWNlIFdlYkV2ZW50IDogTlNPYmplY3Qgewor
QHByaXZhdGUKKyAgICBXZWJFdmVudFR5cGUgX3R5cGU7CisgICAgQ0ZUaW1lSW50ZXJ2YWwgX3Rp
bWVzdGFtcDsKKyAgICAKKyAgICBDR1BvaW50IF9sb2NhdGlvbkluV2luZG93OworICAgIAorICAg
IE5TU3RyaW5nICpfY2hhcmFjdGVyczsKKyAgICBOU1N0cmluZyAqX2NoYXJhY3RlcnNJZ25vcmlu
Z01vZGlmaWVyczsKKyAgICBXZWJFdmVudEZsYWdzIF9tb2RpZmllckZsYWdzOworICAgIEJPT0wg
X2tleVJlcGVhdGluZzsKKyAgICBCT09MIF9wb3B1cFZhcmlhbnQ7IC8vIEZJWE1FOiB0byBiZSBy
ZW1vdmVkCisgICAgTlNVSW50ZWdlciBfa2V5Ym9hcmRGbGFnczsKKyAgICB1aW50MTZfdCBfa2V5
Q29kZTsKKyAgICBCT09MIF90YWJLZXk7CisgICAgV2ViRXZlbnRDaGFyYWN0ZXJTZXQgX2NoYXJh
Y3RlclNldDsKKyAgICAKKyAgICBmbG9hdCBfZGVsdGFYOworICAgIGZsb2F0IF9kZWx0YVk7Cisg
ICAgCisgICAgdW5zaWduZWQgX3RvdWNoQ291bnQ7CisgICAgTlNBcnJheSAqX3RvdWNoTG9jYXRp
b25zOworICAgIE5TQXJyYXkgKl90b3VjaElkZW50aWZpZXJzOworICAgIE5TQXJyYXkgKl90b3Vj
aFBoYXNlczsKKyAgICAKKyAgICBCT09MIF9pc0dlc3R1cmU7CisgICAgZmxvYXQgX2dlc3R1cmVT
Y2FsZTsKKyAgICBmbG9hdCBfZ2VzdHVyZVJvdGF0aW9uOworCisgICAgQk9PTCBfd2FzSGFuZGxl
ZDsKK30KKworLSAoV2ViRXZlbnQgKilpbml0V2l0aE1vdXNlRXZlbnRUeXBlOihXZWJFdmVudFR5
cGUpdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVN0YW1wOihDRlRpbWVJbnRl
cnZhbCl0aW1lU3RhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjooQ0dQ
b2ludClwb2ludDsKKworLSAoV2ViRXZlbnQgKilpbml0V2l0aFNjcm9sbFdoZWVsRXZlbnRXaXRo
VGltZVN0YW1wOihDRlRpbWVJbnRlcnZhbCl0aW1lU3RhbXAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjooQ0dQb2ludClwb2ludAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWDooZmxvYXQpZGVsdGFY
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFZOihm
bG9hdClkZWx0YVk7CisKKy0gKFdlYkV2ZW50ICopaW5pdFdpdGhUb3VjaEV2ZW50VHlwZTooV2Vi
RXZlbnRUeXBlKXR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVTdGFtcDooQ0ZU
aW1lSW50ZXJ2YWwpdGltZVN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRp
b246KENHUG9pbnQpcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczoo
V2ViRXZlbnRGbGFncyltb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdG91Y2hD
b3VudDoodW5zaWduZWQpdG91Y2hDb3VudAorICAgICAgICAgICAgICAgICAgICAgIHRvdWNoTG9j
YXRpb25zOihOU0FycmF5ICopdG91Y2hMb2NhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgdG91
Y2hJZGVudGlmaWVyczooTlNBcnJheSAqKXRvdWNoSWRlbnRpZmllcnMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICB0b3VjaFBoYXNlczooTlNBcnJheSAqKXRvdWNoUGhhc2VzIGlzR2VzdHVyZToo
Qk9PTClpc0dlc3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlc3R1cmVTY2FsZTooZmxv
YXQpZ2VzdHVyZVNjYWxlCisgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlUm90YXRpb246KGZs
b2F0KWdlc3R1cmVSb3RhdGlvbjsKKworLy8gRklYTUU6IHRoaXMgaXMgZGVwcmVjYXRlZC4gSXQg
d2lsbCBiZSByZW1vdmVkIHdoZW4gVUlLaXQgYWRvcHRzIHRoZSBuZXcgb25lIGJlbG93LgorLSAo
V2ViRXZlbnQgKilpbml0V2l0aEtleUV2ZW50VHlwZTooV2ViRXZlbnRUeXBlKXR5cGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lU3RhbXA6KENGVGltZUludGVydmFsKXRpbWVTdGFtcAor
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyczooTlNTdHJpbmcgKiljaGFyYWN0ZXJz
CisgICAgICAgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOihOU1N0cmluZyAqKWNoYXJhY3Rl
cnNJZ25vcmluZ01vZGlmaWVycworICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczoo
V2ViRXZlbnRGbGFncyltb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgaXNSZXBlYXRp
bmc6KEJPT0wpcmVwZWF0aW5nCisgICAgICAgICAgICAgICAgICAgIGlzUG9wdXBWYXJpYW50OihC
T09MKXBvcHVwVmFyaWFudAorICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29kZToodWlu
dDE2X3Qpa2V5Q29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RhYktleTooQk9PTCl0
YWJLZXkKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJTZXQ6KFdlYkV2ZW50Q2hhcmFj
dGVyU2V0KWNoYXJhY3RlclNldDsKKworLSAoV2ViRXZlbnQgKilpbml0V2l0aEtleUV2ZW50VHlw
ZTooV2ViRXZlbnRUeXBlKXR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RhbXA6
KENGVGltZUludGVydmFsKXRpbWVTdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFj
dGVyczooTlNTdHJpbmcgKiljaGFyYWN0ZXJzCisgICAgICAgY2hhcmFjdGVyc0lnbm9yaW5nTW9k
aWZpZXJzOihOU1N0cmluZyAqKWNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycworICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vZGlmaWVyczooV2ViRXZlbnRGbGFncyltb2RpZmllcnMKKyAgICAg
ICAgICAgICAgICAgICAgICAgaXNSZXBlYXRpbmc6KEJPT0wpcmVwZWF0aW5nCisgICAgICAgICAg
ICAgICAgICAgICAgICAgd2l0aEZsYWdzOihOU1VJbnRlZ2VyKWZsYWdzCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrZXlDb2RlOih1aW50MTZfdClrZXlDb2RlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlzVGFiS2V5OihCT09MKXRhYktleQorICAgICAgICAgICAgICAgICAgICAgIGNo
YXJhY3RlclNldDooV2ViRXZlbnRDaGFyYWN0ZXJTZXQpY2hhcmFjdGVyU2V0OworCitAcHJvcGVy
dHkobm9uYXRvbWljLCByZWFkb25seSkgV2ViRXZlbnRUeXBlIHR5cGU7CitAcHJvcGVydHkobm9u
YXRvbWljLCByZWFkb25seSkgQ0ZUaW1lSW50ZXJ2YWwgdGltZXN0YW1wOworCisvLyBNb3VzZQor
QHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIENHUG9pbnQgbG9jYXRpb25JbldpbmRvdzsK
KworLy8gS2V5Ym9hcmQKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5LCByZXRhaW4pIE5T
U3RyaW5nICpjaGFyYWN0ZXJzOworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHksIHJldGFp
bikgTlNTdHJpbmcgKmNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczsKK0Bwcm9wZXJ0eShub25h
dG9taWMsIHJlYWRvbmx5KSBXZWJFdmVudEZsYWdzIG1vZGlmaWVyRmxhZ3M7CitAcHJvcGVydHko
bm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyID0gaXNLZXlSZXBlYXRpbmcpIEJPT0wga2V5UmVw
ZWF0aW5nOworCisvLyBGSVhNRTogdGhpcyBpcyBkZXByZWNhdGVkLiBJdCB3aWxsIGJlIHJlbW92
ZWQgd2hlbiBVSUtpdCBhZG9wdHMgdGhlIG5ldyBpbml0V2l0aEtleUV2ZW50VHlwZS4KK0Bwcm9w
ZXJ0eShub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXIgPSBpc1BvcHVwVmFyaWFudCkgQk9PTCBw
b3B1cFZhcmlhbnQ7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgTlNVSW50ZWdlciBr
ZXlib2FyZEZsYWdzOworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIHVpbnQxNl90IGtl
eUNvZGU7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyID0gaXNUYWJLZXkp
IEJPT0wgdGFiS2V5OworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIFdlYkV2ZW50Q2hh
cmFjdGVyU2V0IGNoYXJhY3RlclNldDsKKworLy8gU2Nyb2xsIFdoZWVsCitAcHJvcGVydHkobm9u
YXRvbWljLCByZWFkb25seSkgZmxvYXQgZGVsdGFYOworQHByb3BlcnR5KG5vbmF0b21pYywgcmVh
ZG9ubHkpIGZsb2F0IGRlbHRhWTsKKworLy8gVG91Y2gKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJl
YWRvbmx5KSB1bnNpZ25lZCB0b3VjaENvdW50OworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9u
bHksIHJldGFpbikgTlNBcnJheSAqdG91Y2hMb2NhdGlvbnM7CitAcHJvcGVydHkobm9uYXRvbWlj
LCByZWFkb25seSwgcmV0YWluKSBOU0FycmF5ICp0b3VjaElkZW50aWZpZXJzOworQHByb3BlcnR5
KG5vbmF0b21pYywgcmVhZG9ubHksIHJldGFpbikgTlNBcnJheSAqdG91Y2hQaGFzZXM7CisKKy8v
IEdlc3R1cmUKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGlzR2VzdHVyZTsK
K0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBmbG9hdCBnZXN0dXJlU2NhbGU7CitAcHJv
cGVydHkobm9uYXRvbWljLCByZWFkb25seSkgZmxvYXQgZ2VzdHVyZVJvdGF0aW9uOworCitAcHJv
cGVydHkobm9uYXRvbWljKSBCT09MIHdhc0hhbmRsZWQ7CisKK0BlbmQKKworQGludGVyZmFjZSBX
ZWJJT1NFdmVudCA6IFdlYkV2ZW50CitAZW5kCisKKyNlbmRpZiAvLyBXZWJFdmVudElPU19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViRXZlbnQubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViRXZlbnQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjU1Nzg4NzMw
N2UzNzgzMTY4NDMzNjM5YTQ3OGNmMGQ3MjlmZjA5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJFdmVudC5tbQpAQCAtMCwwICsxLDQ5NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIEZJWE1FOiBSZW5hbWUgdGhpcyBmaWxlIHRvIFdlYkV2ZW50SU9T
Lm1tIGFmdGVyIHdlIHVwc3RyZWFtIHRoZSBpT1MgcG9ydC4KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJXZWJFdmVudC5oIgorCisjaW1wb3J0ICJLZXlFdmVudENvY29hLmgiCisjaW1w
b3J0IDxGb3VuZGF0aW9uL05TR2VvbWV0cnkuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitAaW1wbGVtZW50YXRpb24gV2ViRXZlbnQK
KworQHN5bnRoZXNpemUgdHlwZSA9IF90eXBlOworQHN5bnRoZXNpemUgdGltZXN0YW1wID0gX3Rp
bWVzdGFtcDsKK0BzeW50aGVzaXplIHdhc0hhbmRsZWQgPSBfd2FzSGFuZGxlZDsKKworLSAoV2Vi
RXZlbnQgKilpbml0V2l0aE1vdXNlRXZlbnRUeXBlOihXZWJFdmVudFR5cGUpdHlwZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZVN0YW1wOihDRlRpbWVJbnRlcnZhbCl0aW1lU3RhbXAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjooQ0dQb2ludClwb2ludAorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIAorICAgIF90eXBlID0gdHlwZTsKKyAgICBfdGltZXN0YW1wID0gdGltZVN0YW1w
OworCisgICAgX2xvY2F0aW9uSW5XaW5kb3cgPSBwb2ludDsKKyAgICAKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAoV2ViRXZlbnQgKilpbml0V2l0aFNjcm9sbFdoZWVsRXZlbnRXaXRoVGltZVN0
YW1wOihDRlRpbWVJbnRlcnZhbCl0aW1lU3RhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NhdGlvbjooQ0dQb2ludClwb2ludAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWDooZmxvYXQpZGVsdGFYCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFZOihmbG9hdClk
ZWx0YVkKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfdHlwZSA9IFdlYkV2ZW50U2Nyb2xsV2hlZWw7Cisg
ICAgX3RpbWVzdGFtcCA9IHRpbWVTdGFtcDsKKworICAgIF9sb2NhdGlvbkluV2luZG93ID0gcG9p
bnQ7CisgICAgX2RlbHRhWCA9IGRlbHRhWDsKKyAgICBfZGVsdGFZID0gZGVsdGFZOworICAgIAor
ICAgIHJldHVybiBzZWxmOworfQorCistIChXZWJFdmVudCAqKWluaXRXaXRoVG91Y2hFdmVudFR5
cGU6KFdlYkV2ZW50VHlwZSl0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3Rh
bXA6KENGVGltZUludGVydmFsKXRpbWVTdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvY2F0aW9uOihDR1BvaW50KXBvaW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rp
ZmllcnM6KFdlYkV2ZW50RmxhZ3MpbW9kaWZpZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvdWNoQ291bnQ6KHVuc2lnbmVkKXRvdWNoQ291bnQKKyAgICAgICAgICAgICAgICAgICAgICB0
b3VjaExvY2F0aW9uczooTlNBcnJheSAqKXRvdWNoTG9jYXRpb25zCisgICAgICAgICAgICAgICAg
ICAgIHRvdWNoSWRlbnRpZmllcnM6KE5TQXJyYXkgKil0b3VjaElkZW50aWZpZXJzCisgICAgICAg
ICAgICAgICAgICAgICAgICAgdG91Y2hQaGFzZXM6KE5TQXJyYXkgKil0b3VjaFBoYXNlcyBpc0dl
c3R1cmU6KEJPT0wpaXNHZXN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlU2Nh
bGU6KGZsb2F0KWdlc3R1cmVTY2FsZQorICAgICAgICAgICAgICAgICAgICAgZ2VzdHVyZVJvdGF0
aW9uOihmbG9hdClnZXN0dXJlUm90YXRpb24KK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF90eXBlID0gdHlwZTsK
KyAgICBfdGltZXN0YW1wID0gdGltZVN0YW1wOworICAgIF9tb2RpZmllckZsYWdzID0gbW9kaWZp
ZXJzOworCisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTg1Mjg0PiBUb3VjaEV2ZW50
cyBtYXkgYmUgaW4gbW9yZSB0aGFuIG9uZSB3aW5kb3cgc29tZSBkYXkuCisgICAgX2xvY2F0aW9u
SW5XaW5kb3cgPSBwb2ludDsKKyAgICBfdG91Y2hDb3VudCA9IHRvdWNoQ291bnQ7CisgICAgX3Rv
dWNoTG9jYXRpb25zID0gW3RvdWNoTG9jYXRpb25zIGNvcHldOworICAgIF90b3VjaElkZW50aWZp
ZXJzID0gW3RvdWNoSWRlbnRpZmllcnMgY29weV07CisgICAgX3RvdWNoUGhhc2VzID0gW3RvdWNo
UGhhc2VzIGNvcHldOworICAgIF9pc0dlc3R1cmUgPSBpc0dlc3R1cmU7CisgICAgX2dlc3R1cmVT
Y2FsZSA9IGdlc3R1cmVTY2FsZTsKKyAgICBfZ2VzdHVyZVJvdGF0aW9uID0gZ2VzdHVyZVJvdGF0
aW9uOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKK3N0YXRpYyBpbnQgd2luZG93c0tleUNvZGVG
b3JDaGFyQ29kZUlPUyh1bmljaGFyIGNoYXJDb2RlKQoreworICAgIC8vIGlQaG9uZSBTcGVjaWZp
YyBDYXNlcworICAgIC8vIDxyZGFyOi8vNzcwOTQwOD46IFdlIGdldCAxMCAoJ1xuJykgZnJvbSBV
SUtpdCB3aGVuIHVzaW5nIHRoZSBzb2Z0d2FyZSBrZXlib2FyZAorICAgIGlmIChjaGFyQ29kZSA9
PSAxMCkKKyAgICAgICAgcmV0dXJuIDB4MEQ7CisKKyAgICAvLyBHZW5lcmFsIENhc2UKKyAgICBy
ZXR1cm4gd2luZG93c0tleUNvZGVGb3JDaGFyQ29kZShjaGFyQ29kZSk7Cit9CisKKy0gKFdlYkV2
ZW50ICopaW5pdFdpdGhLZXlFdmVudFR5cGU6KFdlYkV2ZW50VHlwZSl0eXBlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZVN0YW1wOihDRlRpbWVJbnRlcnZhbCl0aW1lU3RhbXAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnM6KE5TU3RyaW5nICopY2hhcmFjdGVycworICAg
ICAgIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczooTlNTdHJpbmcgKiljaGFyYWN0ZXJzSWdu
b3JpbmdNb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnM6KFdlYkV2
ZW50RmxhZ3MpbW9kaWZpZXJzCisgICAgICAgICAgICAgICAgICAgICAgIGlzUmVwZWF0aW5nOihC
T09MKXJlcGVhdGluZworICAgICAgICAgICAgICAgICAgICBpc1BvcHVwVmFyaWFudDooQk9PTClw
b3B1cFZhcmlhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvZGU6KHVpbnQxNl90
KWtleUNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUYWJLZXk6KEJPT0wpdGFiS2V5
CisgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyU2V0OihXZWJFdmVudENoYXJhY3RlclNl
dCljaGFyYWN0ZXJTZXQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfdHlwZSA9IHR5cGU7CisgICAgX3Rp
bWVzdGFtcCA9IHRpbWVTdGFtcDsKKworICAgIF9jaGFyYWN0ZXJzID0gW2NoYXJhY3RlcnMgcmV0
YWluXTsKKyAgICBfY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzID0gW2NoYXJhY3RlcnNJZ25v
cmluZ01vZGlmaWVycyByZXRhaW5dOworICAgIF9tb2RpZmllckZsYWdzID0gbW9kaWZpZXJzOwor
ICAgIF9rZXlSZXBlYXRpbmcgPSByZXBlYXRpbmc7CisgICAgX3BvcHVwVmFyaWFudCA9IHBvcHVw
VmFyaWFudDsKKyAgICBfdGFiS2V5ID0gdGFiS2V5OworICAgIF9jaGFyYWN0ZXJTZXQgPSBjaGFy
YWN0ZXJTZXQ7CisKKyAgICBpZiAoa2V5Q29kZSkKKyAgICAgICAgX2tleUNvZGUgPSB3aW5kb3dz
S2V5Q29kZUZvcktleUNvZGUoa2V5Q29kZSk7CisKKyAgICAvLyBOT1RFOiB0aGlzIHByZXNlcnZl
cyB0aGUgb3JpZ2luYWwgc2VtYW50aWNzIHdoaWNoIHVzZWQgdGhlCisgICAgLy8gY2hhcmFjdGVy
cyBzdHJpbmcgZm9yIHRoZSBrZXlDb2RlLiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIGluIGlPUyA0
LjAgdG8KKyAgICAvLyBhbGxvdyB0aGUgY2xpZW50IHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBhIGtl
eUNvZGUsIG90aGVyd2lzZSBkZWZhdWx0IHRvCisgICAgLy8gbWFwcGluZyB0aGUgY2hhcmFjdGVy
cyBzdHJpbmcgdG8gYSBrZXlDb2RlLgorICAgIC8vIGUuZy4gYWRkIGFuICdlbHNlJyBiZWZvcmUg
dGhpcyAnaWYnLgorICAgIGlmIChbY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIGxlbmd0aF0g
PT0gMSkgeworICAgICAgICB1bmljaGFyIGNoID0gW2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVy
cyBjaGFyYWN0ZXJBdEluZGV4OjBdOworICAgICAgICBfa2V5Q29kZSA9IHdpbmRvd3NLZXlDb2Rl
Rm9yQ2hhckNvZGVJT1MoY2gpOworICAgIH0KKworICAgIHJldHVybiBzZWxmOworfQorCisKKy0g
KFdlYkV2ZW50ICopaW5pdFdpdGhLZXlFdmVudFR5cGU6KFdlYkV2ZW50VHlwZSl0eXBlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZVN0YW1wOihDRlRpbWVJbnRlcnZhbCl0aW1lU3RhbXAK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnM6KE5TU3RyaW5nICopY2hhcmFjdGVy
cworICAgICAgIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczooTlNTdHJpbmcgKiljaGFyYWN0
ZXJzSWdub3JpbmdNb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnM6
KFdlYkV2ZW50RmxhZ3MpbW9kaWZpZXJzCisgICAgICAgICAgICAgICAgICAgICAgIGlzUmVwZWF0
aW5nOihCT09MKXJlcGVhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhGbGFnczoo
TlNVSW50ZWdlcilmbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29kZToodWlu
dDE2X3Qpa2V5Q29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RhYktleTooQk9PTCl0
YWJLZXkKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJTZXQ6KFdlYkV2ZW50Q2hhcmFj
dGVyU2V0KWNoYXJhY3RlclNldAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF90eXBlID0gdHlwZTsKKyAg
ICBfdGltZXN0YW1wID0gdGltZVN0YW1wOworCisgICAgX2NoYXJhY3RlcnMgPSBbY2hhcmFjdGVy
cyByZXRhaW5dOworICAgIF9jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgPSBbY2hhcmFjdGVy
c0lnbm9yaW5nTW9kaWZpZXJzIHJldGFpbl07CisgICAgX21vZGlmaWVyRmxhZ3MgPSBtb2RpZmll
cnM7CisgICAgX2tleVJlcGVhdGluZyA9IHJlcGVhdGluZzsKKyAgICBfa2V5Ym9hcmRGbGFncyA9
IGZsYWdzOworICAgIF90YWJLZXkgPSB0YWJLZXk7CisgICAgX2NoYXJhY3RlclNldCA9IGNoYXJh
Y3RlclNldDsKKyAgICAKKyAgICBpZiAoa2V5Q29kZSkKKyAgICAgICAgX2tleUNvZGUgPSB3aW5k
b3dzS2V5Q29kZUZvcktleUNvZGUoa2V5Q29kZSk7CisKKyAgICAvLyBOT1RFOiB0aGlzIHByZXNl
cnZlcyB0aGUgb3JpZ2luYWwgc2VtYW50aWNzIHdoaWNoIHVzZWQgdGhlIAorICAgIC8vIGNoYXJh
Y3RlcnMgc3RyaW5nIGZvciB0aGUga2V5Q29kZS4gVGhpcyBzaG91bGQgYmUgY2hhbmdlZCBpbiBp
T1MgNC4wIHRvCisgICAgLy8gYWxsb3cgdGhlIGNsaWVudCB0byBleHBsaWNpdGx5IHNwZWNpZnkg
YSBrZXlDb2RlLCBvdGhlcndpc2UgZGVmYXVsdCB0byAKKyAgICAvLyBtYXBwaW5nIHRoZSBjaGFy
YWN0ZXJzIHN0cmluZyB0byBhIGtleUNvZGUuCisgICAgLy8gZS5nLiBhZGQgYW4gJ2Vsc2UnIGJl
Zm9yZSB0aGlzICdpZicuCisgICAgaWYgKFtjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgbGVu
Z3RoXSA9PSAxKSB7CisgICAgICAgIHVuaWNoYXIgY2ggPSBbY2hhcmFjdGVyc0lnbm9yaW5nTW9k
aWZpZXJzIGNoYXJhY3RlckF0SW5kZXg6MF07CisgICAgICAgIF9rZXlDb2RlID0gd2luZG93c0tl
eUNvZGVGb3JDaGFyQ29kZUlPUyhjaCk7CisgICAgfQorCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtfY2hhcmFjdGVycyByZWxlYXNlXTsKKyAgICBbX2No
YXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyByZWxlYXNlXTsKKworICAgIFtfdG91Y2hMb2NhdGlv
bnMgcmVsZWFzZV07CisgICAgW190b3VjaElkZW50aWZpZXJzIHJlbGVhc2VdOworICAgIFtfdG91
Y2hQaGFzZXMgcmVsZWFzZV07CisgICAgCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChO
U1N0cmluZyAqKV90eXBlRGVzY3JpcHRpb24KK3sKKyAgICBzd2l0Y2ggKF90eXBlKSB7CisgICAg
ICAgIGNhc2UgV2ViRXZlbnRNb3VzZURvd246CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVu
dE1vdXNlRG93biI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRNb3VzZVVwOgorICAgICAgICAgICAg
cmV0dXJuIEAiV2ViRXZlbnRNb3VzZVVwIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudE1vdXNlTW92
ZWQ6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudE1vdXNlTW92ZWQiOworICAgICAgICBj
YXNlIFdlYkV2ZW50U2Nyb2xsV2hlZWw6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFNj
cm9sbFdoZWVsIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudEtleURvd246CisgICAgICAgICAgICBy
ZXR1cm4gQCJXZWJFdmVudEtleURvd24iOworICAgICAgICBjYXNlIFdlYkV2ZW50S2V5VXA6Cisg
ICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudEtleVVwIjsKKyAgICAgICAgY2FzZSBXZWJFdmVu
dFRvdWNoQmVnaW46CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoQmVnaW4iOwor
ICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hDaGFuZ2U6CisgICAgICAgICAgICByZXR1cm4gQCJX
ZWJFdmVudFRvdWNoQ2hhbmdlIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoRW5kOgorICAg
ICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaEVuZCI7CisgICAgICAgIGNhc2UgV2ViRXZl
bnRUb3VjaENhbmNlbDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50VG91Y2hDYW5jZWwi
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorICAgIHJldHVybiBAIlVua25vd24iOworfQorCistIChOU1N0cmluZyAqKV9tb2RpZmVy
RmxhZ3NEZXNjcmlwdGlvbgoreworICAgIHN3aXRjaCAoX21vZGlmaWVyRmxhZ3MpIHsKKyAgICAg
ICAgY2FzZSBXZWJFdmVudE1vdXNlRG93bjoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50
TW91c2VEb3duIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudE1vdXNlVXA6CisgICAgICAgICAgICBy
ZXR1cm4gQCJXZWJFdmVudE1vdXNlVXAiOworICAgICAgICBjYXNlIFdlYkV2ZW50TW91c2VNb3Zl
ZDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50TW91c2VNb3ZlZCI7CisgICAgICAgIGNh
c2UgV2ViRXZlbnRTY3JvbGxXaGVlbDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50U2Ny
b2xsV2hlZWwiOworICAgICAgICBjYXNlIFdlYkV2ZW50S2V5RG93bjoKKyAgICAgICAgICAgIHJl
dHVybiBAIldlYkV2ZW50S2V5RG93biI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRLZXlVcDoKKyAg
ICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50S2V5VXAiOworICAgICAgICBjYXNlIFdlYkV2ZW50
VG91Y2hCZWdpbjoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50VG91Y2hCZWdpbiI7Cisg
ICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaENoYW5nZToKKyAgICAgICAgICAgIHJldHVybiBAIldl
YkV2ZW50VG91Y2hDaGFuZ2UiOworICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hFbmQ6CisgICAg
ICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoRW5kIjsKKyAgICAgICAgY2FzZSBXZWJFdmVu
dFRvdWNoQ2FuY2VsOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaENhbmNlbCI7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisgICAgcmV0dXJuIEAiVW5rbm93biI7Cit9CisKKy0gKE5TU3RyaW5nICopX2NoYXJhY3Rl
clNldERlc2NyaXB0aW9uCit7CisgICAgc3dpdGNoIChfY2hhcmFjdGVyU2V0KSB7CisgICAgICAg
IGNhc2UgV2ViRXZlbnRDaGFyYWN0ZXJTZXRBU0NJSToKKyAgICAgICAgICAgIHJldHVybiBAIldl
YkV2ZW50Q2hhcmFjdGVyU2V0QVNDSUkiOworICAgICAgICBjYXNlIFdlYkV2ZW50Q2hhcmFjdGVy
U2V0U3ltYm9sOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRDaGFyYWN0ZXJTZXRTeW1i
b2wiOworICAgICAgICBjYXNlIFdlYkV2ZW50Q2hhcmFjdGVyU2V0RGluZ2JhdHM6CisgICAgICAg
ICAgICByZXR1cm4gQCJXZWJFdmVudENoYXJhY3RlclNldERpbmdiYXRzIjsKKyAgICAgICAgY2Fz
ZSBXZWJFdmVudENoYXJhY3RlclNldFVuaWNvZGU6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJF
dmVudENoYXJhY3RlclNldFVuaWNvZGUiOworICAgICAgICBjYXNlIFdlYkV2ZW50Q2hhcmFjdGVy
U2V0RnVuY3Rpb25LZXlzOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRDaGFyYWN0ZXJT
ZXRGdW5jdGlvbktleXMiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBAIlVua25vd24iOworfQorCistIChOU1N0
cmluZyAqKV90b3VjaExvY2F0aW9uc0Rlc2NyaXB0aW9uOihOU0FycmF5ICopbG9jYXRpb25zCit7
CisgICAgQk9PTCBzaG91bGRBZGRDb21tYSA9IE5POworICAgIE5TTXV0YWJsZVN0cmluZyAqZGVz
Y3JpcHRpb24gPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisgICAgZm9yIChOU1ZhbHVlICp2
YWx1ZSBpbiBsb2NhdGlvbnMpIHsKKyAgICAgICAgQ0dQb2ludCBwb2ludCA9IFt2YWx1ZSBwb2lu
dFZhbHVlXTsKKyAgICAgICAgW2Rlc2NyaXB0aW9uIGFwcGVuZEZvcm1hdDpAIiVAKCVmLCAlZiki
LCAoc2hvdWxkQWRkQ29tbWEgPyBAIiwgIiA6IEAiIiksIHBvaW50LngsIHBvaW50LnldOworICAg
ICAgICBzaG91bGRBZGRDb21tYSA9IFlFUzsKKyAgICB9CisgICAgcmV0dXJuIGRlc2NyaXB0aW9u
OworfQorCistIChOU1N0cmluZyAqKV90b3VjaElkZW50aWZpZXJzRGVzY3JpcHRpb24KK3sKKyAg
ICBCT09MIHNob3VsZEFkZENvbW1hID0gTk87CisgICAgTlNNdXRhYmxlU3RyaW5nICpkZXNjcmlw
dGlvbiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgICBmb3IgKE5TTnVtYmVyICppZGVu
dGlmaWVyIGluIF90b3VjaElkZW50aWZpZXJzKSB7CisgICAgICAgIFtkZXNjcmlwdGlvbiBhcHBl
bmRGb3JtYXQ6QCIlQCV1IiwgKHNob3VsZEFkZENvbW1hID8gQCIsICIgOiBAIiIpLCBbaWRlbnRp
ZmllciB1bnNpZ25lZEludFZhbHVlXV07CisgICAgICAgIHNob3VsZEFkZENvbW1hID0gWUVTOwor
ICAgIH0KKyAgICByZXR1cm4gZGVzY3JpcHRpb247Cit9CisKKy0gKE5TU3RyaW5nICopX3RvdWNo
UGhhc2VEZXNjcmlwdGlvbjooV2ViRXZlbnRUb3VjaFBoYXNlVHlwZSlwaGFzZQoreworICAgIHN3
aXRjaCAocGhhc2UpIHsKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VCZWdhbjoKKyAg
ICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50VG91Y2hQaGFzZUJlZ2FuIjsKKyAgICAgICAgY2Fz
ZSBXZWJFdmVudFRvdWNoUGhhc2VNb3ZlZDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50
VG91Y2hQaGFzZU1vdmVkIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VTdGF0aW9u
YXJ5OgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaFBoYXNlU3RhdGlvbmFyeSI7
CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaFBoYXNlRW5kZWQ6CisgICAgICAgICAgICByZXR1
cm4gQCJXZWJFdmVudFRvdWNoUGhhc2VFbmRlZCI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3Vj
aFBoYXNlQ2FuY2VsbGVkOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaFBoYXNl
Q2FuY2VsbGVkIjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gQCJVbmtub3duIjsKK30KKworLSAoTlNTdHJpbmcg
KilfdG91Y2hQaGFzZXNEZXNjcmlwdGlvbgoreworICAgIEJPT0wgc2hvdWxkQWRkQ29tbWEgPSBO
TzsKKyAgICBOU011dGFibGVTdHJpbmcgKmRlc2NyaXB0aW9uID0gW05TTXV0YWJsZVN0cmluZyBz
dHJpbmddOworICAgIGZvciAoTlNOdW1iZXIgKnBoYXNlIGluIF90b3VjaFBoYXNlcykgeworICAg
ICAgICBbZGVzY3JpcHRpb24gYXBwZW5kRm9ybWF0OkAiJUAlQCIsIChzaG91bGRBZGRDb21tYSA/
IEAiLCAiIDogQCIiKSwgW3NlbGYgX3RvdWNoUGhhc2VEZXNjcmlwdGlvbjpzdGF0aWNfY2FzdDxX
ZWJFdmVudFRvdWNoUGhhc2VUeXBlPihbcGhhc2UgdW5zaWduZWRJbnRWYWx1ZV0pXV07CisgICAg
ICAgIHNob3VsZEFkZENvbW1hID0gWUVTOworICAgIH0KKyAgICByZXR1cm4gZGVzY3JpcHRpb247
Cit9CisKKy0gKE5TU3RyaW5nICopX2V2ZW50RGVzY3JpcHRpb24KK3sKKyAgICBzd2l0Y2ggKF90
eXBlKSB7CisgICAgICAgIGNhc2UgV2ViRXZlbnRNb3VzZURvd246CisgICAgICAgIGNhc2UgV2Vi
RXZlbnRNb3VzZVVwOgorICAgICAgICBjYXNlIFdlYkV2ZW50TW91c2VNb3ZlZDoKKyAgICAgICAg
ICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImxvY2F0aW9uOiAoJWYsICVm
KSIsIF9sb2NhdGlvbkluV2luZG93LngsIF9sb2NhdGlvbkluV2luZG93LnldOworICAgICAgICBj
YXNlIFdlYkV2ZW50U2Nyb2xsV2hlZWw6CisgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCJsb2NhdGlvbjogKCVmLCAlZikgZGVsdGFYOiAlZiBkZWx0YVk6ICVm
IiwgX2xvY2F0aW9uSW5XaW5kb3cueCwgX2xvY2F0aW9uSW5XaW5kb3cueSwgX2RlbHRhWCwgX2Rl
bHRhWV07CisgICAgICAgIGNhc2UgV2ViRXZlbnRLZXlEb3duOgorICAgICAgICBjYXNlIFdlYkV2
ZW50S2V5VXA6CisgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJjaGFyczogJUAgY2hhcnNOb01vZGlmaWVyczogJUAgZmxhZ3M6ICVkIHJlcGVhdGluZzogJWQg
a2V5Ym9hcmRGbGFnczogJWx1IGtleUNvZGUgJWQsIGlzVGFiOiAlZCBjaGFyU2V0OiAlQCIsIF9j
aGFyYWN0ZXJzLCBfY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzLCBfbW9kaWZpZXJGbGFncywg
X2tleVJlcGVhdGluZywgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX2tleWJvYXJkRmxhZ3Mp
LCBfa2V5Q29kZSwgX3RhYktleSwgW3NlbGYgX2NoYXJhY3RlclNldERlc2NyaXB0aW9uXV07Cisg
ICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaEJlZ2luOgorICAgICAgICBjYXNlIFdlYkV2ZW50VG91
Y2hDaGFuZ2U6CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaEVuZDoKKyAgICAgICAgY2FzZSBX
ZWJFdmVudFRvdWNoQ2FuY2VsOgorICAgICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAibG9jYXRpb246ICglZiwgJWYpIGNvdW50OiAlZCBsb2NhdGlvbnM6ICVAIGlk
ZW50aWZpZXJzOiAlQCBwaGFzZXM6ICVAIGlzR2VzdHVyZTogJWQgc2NhbGU6ICVmIHJvdGF0aW9u
OiAlZiIsIF9sb2NhdGlvbkluV2luZG93LngsIF9sb2NhdGlvbkluV2luZG93LnksIF90b3VjaENv
dW50LCBbc2VsZiBfdG91Y2hMb2NhdGlvbnNEZXNjcmlwdGlvbjpfdG91Y2hMb2NhdGlvbnNdLCBb
c2VsZiBfdG91Y2hJZGVudGlmaWVyc0Rlc2NyaXB0aW9uXSwgW3NlbGYgX3RvdWNoUGhhc2VzRGVz
Y3JpcHRpb25dLCAoX2lzR2VzdHVyZSA/IDEgOiAwKSwgX2dlc3R1cmVTY2FsZSwgX2dlc3R1cmVS
b3RhdGlvbl07CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisgICAgcmV0dXJuIEAiVW5rbm93biI7Cit9CisKKy0gKE5TU3RyaW5nICop
ZGVzY3JpcHRpb24KK3sKKyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIl
QCB0eXBlOiAlQCAtICVAIiwgW3N1cGVyIGRlc2NyaXB0aW9uXSwgW3NlbGYgX3R5cGVEZXNjcmlw
dGlvbl0sIFtzZWxmIF9ldmVudERlc2NyaXB0aW9uXV07Cit9CisKKy0gKENHUG9pbnQpbG9jYXRp
b25JbldpbmRvdworeworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoX3R5cGUgPT0gV2ViRXZlbnRN
b3VzZURvd24gfHwgX3R5cGUgPT0gV2ViRXZlbnRNb3VzZVVwIHx8IF90eXBlID09IFdlYkV2ZW50
TW91c2VNb3ZlZCB8fCBfdHlwZSA9PSBXZWJFdmVudFNjcm9sbFdoZWVsCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxODUyODQ+IFRvdWNoRXZlbnRz
IG1heSBiZSBpbiBtb3JlIHRoYW4gb25lIHdpbmRvdyBzb21lIGRheS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hCZWdpbiB8fCBfdHlwZSA9PSBXZWJF
dmVudFRvdWNoQ2hhbmdlIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hFbmQgfHwgX3R5cGUgPT0g
V2ViRXZlbnRUb3VjaENhbmNlbAorICAgICAgICAgICAgICAgICAgICAgICAgLCAiV2ViRXZlbnRU
eXBlOiAlZCIsIF90eXBlKTsKKyAgICByZXR1cm4gX2xvY2F0aW9uSW5XaW5kb3c7Cit9CisKKy0g
KE5TU3RyaW5nICopY2hhcmFjdGVycworeworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudEtl
eURvd24gfHwgX3R5cGUgPT0gV2ViRXZlbnRLZXlVcCk7CisgICAgcmV0dXJuIFtbX2NoYXJhY3Rl
cnMgcmV0YWluXSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKE5TU3RyaW5nICopY2hhcmFjdGVyc0ln
bm9yaW5nTW9kaWZpZXJzCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50S2V5RG93biB8
fCBfdHlwZSA9PSBXZWJFdmVudEtleVVwKTsKKyAgICByZXR1cm4gW1tfY2hhcmFjdGVyc0lnbm9y
aW5nTW9kaWZpZXJzIHJldGFpbl0gYXV0b3JlbGVhc2VdOworfQorCistIChXZWJFdmVudEZsYWdz
KW1vZGlmaWVyRmxhZ3MKK3sKKyAgICByZXR1cm4gX21vZGlmaWVyRmxhZ3M7Cit9CisKKy0gKEJP
T0wpaXNLZXlSZXBlYXRpbmcKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRLZXlEb3du
IHx8IF90eXBlID09IFdlYkV2ZW50S2V5VXApOworICAgIHJldHVybiBfa2V5UmVwZWF0aW5nOwor
fQorCisvLyBGSVhNRTogdG8gYmUgcmVtb3ZlZAorLSAoQk9PTClpc1BvcHVwVmFyaWFudAorewor
ICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudEtleURvd24gfHwgX3R5cGUgPT0gV2ViRXZlbnRL
ZXlVcCk7CisgICAgcmV0dXJuIF9wb3B1cFZhcmlhbnQ7Cit9CisKKy0gKE5TVUludGVnZXIpa2V5
Ym9hcmRGbGFncworeworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudEtleURvd24gfHwgX3R5
cGUgPT0gV2ViRXZlbnRLZXlVcCk7CisgICAgcmV0dXJuIF9rZXlib2FyZEZsYWdzOworfQorCist
ICh1aW50MTZfdClrZXlDb2RlCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50S2V5RG93
biB8fCBfdHlwZSA9PSBXZWJFdmVudEtleVVwKTsKKyAgICByZXR1cm4gX2tleUNvZGU7Cit9CisK
Ky0gKEJPT0wpaXNUYWJLZXkKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRLZXlEb3du
IHx8IF90eXBlID09IFdlYkV2ZW50S2V5VXApOworICAgIHJldHVybiBfdGFiS2V5OworfQorCist
IChXZWJFdmVudENoYXJhY3RlclNldCljaGFyYWN0ZXJTZXQKK3sKKyAgICBBU1NFUlQoX3R5cGUg
PT0gV2ViRXZlbnRLZXlEb3duIHx8IF90eXBlID09IFdlYkV2ZW50S2V5VXApOworICAgIHJldHVy
biBfY2hhcmFjdGVyU2V0OworfQorCistIChmbG9hdClkZWx0YVgKK3sKKyAgICBBU1NFUlQoX3R5
cGUgPT0gV2ViRXZlbnRTY3JvbGxXaGVlbCk7CisgICAgcmV0dXJuIF9kZWx0YVg7Cit9CisKKy0g
KGZsb2F0KWRlbHRhWQoreworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudFNjcm9sbFdoZWVs
KTsKKyAgICByZXR1cm4gX2RlbHRhWTsKK30KKworLy8gVG91Y2gKKy0gKHVuc2lnbmVkKXRvdWNo
Q291bnQKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEJlZ2luIHx8IF90eXBl
ID09IFdlYkV2ZW50VG91Y2hDaGFuZ2UgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEVuZCB8fCBf
dHlwZSA9PSBXZWJFdmVudFRvdWNoQ2FuY2VsKTsKKyAgICByZXR1cm4gX3RvdWNoQ291bnQ7Cit9
CisKKy0gKE5TQXJyYXkgKil0b3VjaExvY2F0aW9ucworeworICAgIEFTU0VSVChfdHlwZSA9PSBX
ZWJFdmVudFRvdWNoQmVnaW4gfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENoYW5nZSB8fCBfdHlw
ZSA9PSBXZWJFdmVudFRvdWNoRW5kIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDYW5jZWwpOwor
ICAgIHJldHVybiBfdG91Y2hMb2NhdGlvbnM7Cit9CisKKy0gKE5TQXJyYXkgKil0b3VjaElkZW50
aWZpZXJzCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50VG91Y2hCZWdpbiB8fCBfdHlw
ZSA9PSBXZWJFdmVudFRvdWNoQ2hhbmdlIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hFbmQgfHwg
X3R5cGUgPT0gV2ViRXZlbnRUb3VjaENhbmNlbCk7CisgICAgcmV0dXJuIF90b3VjaElkZW50aWZp
ZXJzOworfQorCistIChOU0FycmF5ICopdG91Y2hQaGFzZXMKK3sKKyAgICBBU1NFUlQoX3R5cGUg
PT0gV2ViRXZlbnRUb3VjaEJlZ2luIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDaGFuZ2UgfHwg
X3R5cGUgPT0gV2ViRXZlbnRUb3VjaEVuZCB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoQ2FuY2Vs
KTsKKyAgICByZXR1cm4gX3RvdWNoUGhhc2VzOworfQorCisvLyBHZXN0dXJlCistIChCT09MKWlz
R2VzdHVyZQoreworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudFRvdWNoQmVnaW4gfHwgX3R5
cGUgPT0gV2ViRXZlbnRUb3VjaENoYW5nZSB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoRW5kIHx8
IF90eXBlID09IFdlYkV2ZW50VG91Y2hDYW5jZWwpOworICAgIHJldHVybiBfaXNHZXN0dXJlOwor
fQorCistIChmbG9hdClnZXN0dXJlU2NhbGUKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZl
bnRUb3VjaEJlZ2luIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDaGFuZ2UgfHwgX3R5cGUgPT0g
V2ViRXZlbnRUb3VjaEVuZCB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoQ2FuY2VsKTsKKyAgICBy
ZXR1cm4gX2dlc3R1cmVTY2FsZTsKK30KKworLSAoZmxvYXQpZ2VzdHVyZVJvdGF0aW9uCit7Cisg
ICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50VG91Y2hCZWdpbiB8fCBfdHlwZSA9PSBXZWJFdmVu
dFRvdWNoQ2hhbmdlIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hFbmQgfHwgX3R5cGUgPT0gV2Vi
RXZlbnRUb3VjaENhbmNlbCk7CisgICAgcmV0dXJuIF9nZXN0dXJlUm90YXRpb247Cit9CisKK0Bl
bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5
OWU0MTIxZTdhOWNmOWQ2YWZiN2Y4NzBmZWE5NjdhNjQyNjg4MjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCkBAIC0wLDAgKzEsMjc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJXaWRnZXQuaCIKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJD
dXJzb3IuaCIKKyNpbXBvcnQgIkRvY3VtZW50LmgiCisjaW1wb3J0ICJGb250LmgiCisjaW1wb3J0
ICJGcmFtZS5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJQYWdlLmgi
CisjaW1wb3J0ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbXBvcnQgIlNjcm9sbFZpZXcuaCIK
KyNpbXBvcnQgIldBS1Njcm9sbFZpZXcuaCIKKyNpbXBvcnQgIldBS1ZpZXcuaCIKKyNpbXBvcnQg
IldBS1dpbmRvdy5oIgorI2ltcG9ydCAiV2ViQ29yZUZyYW1lVmlldy5oIgorI2ltcG9ydCAiV2Vi
Q29yZVZpZXcuaCIKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGludGVyZmFjZSBOU1Zp
ZXcgKFdlYlNldFNlbGVjdGVkTWV0aG9kcykKKy0gKHZvaWQpc2V0SXNTZWxlY3RlZDooQk9PTClp
c1NlbGVjdGVkOworLSAodm9pZCl3ZWJQbHVnSW5TZXRJc1NlbGVjdGVkOihCT09MKWlzU2VsZWN0
ZWQ7CitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgc2FmZVJlbW92
ZUZyb21TdXBlcnZpZXcoTlNWaWV3ICp2aWV3KQoreworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQg
cHJvYmFibHkgY2hhbmdlIHRoZSBmaXJzdCByZXNwb25kZXIgb2YgdGhlIHdpbmRvdyBpZgorICAg
IC8vIGl0IGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgdmlldyB3ZSByZW1vdmUuCisgICAgLy8gU2Vl
OiA8cmRhcjovL3Byb2JsZW0vMTAzNjAxODY+CisgICAgW3ZpZXcgcmVtb3ZlRnJvbVN1cGVydmll
d107Cit9CisKK1dpZGdldDo6V2lkZ2V0KE5TVmlldyogdmlldykKK3sKKyAgICBpbml0KHZpZXcp
OworfQorCitXaWRnZXQ6On5XaWRnZXQoKSAKK3sKKyAgICByZWxlYXNlUGxhdGZvcm1XaWRnZXQo
KTsKK30KKworLy8gRklYTUU6IFNob3VsZCBtb3ZlIHRoaXMgdG8gQ2hyb21lOyBiYWQgbGF5ZXJp
bmcgdGhhdCB0aGlzIGtub3dzIGFib3V0IEZyYW1lLgordm9pZCBXaWRnZXQ6OnNldEZvY3VzKGJv
b2wgZm9jdXNlZCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZm9jdXNlZCk7Cit9CisKK3ZvaWQgV2lk
Z2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikKK3sKK30KKwordm9pZCBXaWRnZXQ6OnNob3co
KQoreworICAgIGlmIChpc1NlbGZWaXNpYmxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNl
dFNlbGZWaXNpYmxlKHRydWUpOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
ICAgIFtnZXRPdXRlclZpZXcoKSBzZXRIaWRkZW46Tk9dOworICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Cit9CisKK3ZvaWQgV2lkZ2V0OjpoaWRlKCkKK3sKKyAgICBpZiAoIWlzU2VsZlZp
c2libGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOwor
CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIFtnZXRPdXRlclZpZXcoKSBz
ZXRIaWRkZW46WUVTXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitJbnRS
ZWN0IFdpZGdldDo6ZnJhbWVSZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0
KCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lOworICAgIAorICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChbZ2V0T3V0ZXJWaWV3KCkg
ZnJhbWVdKTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIHJldHVy
biBtX2ZyYW1lOworfQorCit2b2lkIFdpZGdldDo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3Qg
JnJlY3QpCit7CisgICAgbV9mcmFtZSA9IHJlY3Q7CisgICAgCisgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworICAgIE5TVmlldyAqdiA9IGdldE91dGVyVmlldygpOworICAgIE5TUmVj
dCBmID0gcmVjdDsKKyAgICBpZiAoIU5TRXF1YWxSZWN0cyhmLCBbdiBmcmFtZV0pKSB7CisgICAg
ICAgIFt2IHNldEZyYW1lOmZdOworICAgICAgICBbdiBzZXROZWVkc0Rpc3BsYXk6IE5PXTsKKyAg
ICB9CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworTlNWaWV3KiBXaWRnZXQ6
OmdldE91dGVyVmlldygpIGNvbnN0Cit7CisgICAgTlNWaWV3KiB2aWV3ID0gcGxhdGZvcm1XaWRn
ZXQoKTsKKworICAgIC8vIElmIHRoaXMgd2lkZ2V0J3MgdmlldyBpcyBhIFdlYkNvcmVGcmFtZVNj
cm9sbFZpZXcgdGhlbiB3ZQorICAgIC8vIHJlc2l6ZSBpdHMgY29udGFpbmluZyB2aWV3LCBhIFdl
YkZyYW1lVmlldy4KKyAgICBpZiAoW3ZpZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChX
ZWJDb3JlRnJhbWVTY3JvbGxWaWV3KV0pIHsKKyAgICAgICAgdmlldyA9IFt2aWV3IHN1cGVydmll
d107CisgICAgICAgIEFTU0VSVCh2aWV3KTsKKyAgICB9CisKKyAgICByZXR1cm4gdmlldzsKK30K
Kwordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgSW50UmVjdCYg
cikKK3sKKyAgICBpZiAocC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgTlNWaWV3ICp2aWV3ID0gZ2V0T3V0ZXJWaWV3KCk7CisKKyAgICBDR0NvbnRleHRS
ZWYgY2dDb250ZXh0ID0gcC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0U2F2ZUdT
dGF0ZShjZ0NvbnRleHQpOworCisgICAgTlNSZWN0IHZpZXdGcmFtZSA9IFt2aWV3IGZyYW1lXTsK
KyAgICBOU1JlY3Qgdmlld0JvdW5kcyA9IFt2aWV3IGJvdW5kc107CisgICAgQ0dDb250ZXh0VHJh
bnNsYXRlQ1RNKGNnQ29udGV4dCwgdmlld0ZyYW1lLm9yaWdpbi54IC0gdmlld0JvdW5kcy5vcmln
aW4ueCwgdmlld0ZyYW1lLm9yaWdpbi55IC0gdmlld0JvdW5kcy5vcmlnaW4ueSk7CisKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmlu
Z09wYWNpdHk6W3ZpZXcgY29udmVydFJlY3Q6ciBmcm9tVmlldzpbdmlldyBzdXBlcnZpZXddXSBp
bkNvbnRleHQ6Y2dDb250ZXh0XTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisg
ICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjZ0NvbnRleHQpOworfQorCit2b2lkIFdpZGdldDo6
c2V0SXNTZWxlY3RlZChib29sIC8qaXNTZWxlY3RlZCovKQoreworfQorCit2b2lkIFdpZGdldDo6
YWRkVG9TdXBlcnZpZXcoTlNWaWV3ICp2aWV3KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKKworICAgIEFTU0VSVCh2aWV3KTsKKyAgICBOU1ZpZXcgKnN1YnZpZXcgPSBnZXRP
dXRlclZpZXcoKTsKKworICAgIGlmICghc3VidmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUKCFbdmlldyBpc0Rlc2NlbmRhbnRPZjpzdWJ2aWV3XSk7CisgICAgCisgICAgaWYgKFtz
dWJ2aWV3IHN1cGVydmlld10gIT0gdmlldykKKyAgICAgICAgW3ZpZXcgYWRkU3VidmlldzpzdWJ2
aWV3XTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgV2lkZ2V0
OjpyZW1vdmVGcm9tU3VwZXJ2aWV3KCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisgICAgc2FmZVJlbW92ZUZyb21TdXBlcnZpZXcoZ2V0T3V0ZXJWaWV3KCkpOworICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0RnJv
bVJvb3RUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmICghcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkK
KyAgICAgICAgcmV0dXJuIHJlY3Q7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisgICAgQVNTRVJUKFtyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIGlzS2luZE9mQ2xhc3M6
W05TU2Nyb2xsVmlldyBjbGFzc11dKTsKKyAgICBXQUtTY3JvbGxWaWV3ICp2aWV3ID0gc3RhdGlj
X2Nhc3Q8V0FLU2Nyb2xsVmlldyAqPihyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKTsKKyAg
ICBpZiAoV0FLVmlldyAqZG9jdW1lbnRWaWV3ID0gW3ZpZXcgZG9jdW1lbnRWaWV3XSkKKyAgICAg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoW2RvY3VtZW50VmlldyBjb252ZXJ0UmVjdDpyZWN0
IHRvVmlldzpuaWxdKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChbdmlldyBjb252ZXJ0
UmVjdDpyZWN0IHRvVmlldzpuaWxdKTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRh
aW5pbmdXaW5kb3dUb1Jvb3QoY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIGlmICghcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkKKyAgICAg
ICAgcmV0dXJuIHJlY3Q7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAg
QVNTRVJUKFtyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIGlzS2luZE9mQ2xhc3M6W05TU2Ny
b2xsVmlldyBjbGFzc11dKTsKKyAgICBXQUtTY3JvbGxWaWV3ICp2aWV3ID0gc3RhdGljX2Nhc3Q8
V0FLU2Nyb2xsVmlldyAqPihyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKTsKKyAgICBpZiAo
V0FLVmlldyAqZG9jdW1lbnRWaWV3ID0gW3ZpZXcgZG9jdW1lbnRWaWV3XSkKKyAgICAgICAgcmV0
dXJuIGVuY2xvc2luZ0ludFJlY3QoW2RvY3VtZW50VmlldyBjb252ZXJ0UmVjdDpyZWN0IGZyb21W
aWV3Om5pbF0pOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KFt2aWV3IGNvbnZlcnRSZWN0
OnJlY3QgZnJvbVZpZXc6bmlsXSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKwor
ICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRGcm9tUm9vdFRv
Q29udGFpbmluZ1dpbmRvdyhjb25zdCBXaWRnZXQqIHJvb3RXaWRnZXQsIGNvbnN0IEludFBvaW50
JiBwb2ludCkKK3sKKyAgICBpZiAoIXJvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpCisgICAg
ICAgIHJldHVybiBwb2ludDsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAg
ICBBU1NFUlQoW3Jvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgaXNLaW5kT2ZDbGFzczpbTlNT
Y3JvbGxWaWV3IGNsYXNzXV0pOworICAgIFdBS1Njcm9sbFZpZXcgKnZpZXcgPSBzdGF0aWNfY2Fz
dDxXQUtTY3JvbGxWaWV3ICo+KHJvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpOworICAgIE5T
UG9pbnQgY29udmVydGVkUG9pbnQ7CisgICAgaWYgKFdBS1ZpZXcgKmRvY3VtZW50VmlldyA9IFt2
aWV3IGRvY3VtZW50Vmlld10pCisgICAgICAgIGNvbnZlcnRlZFBvaW50ID0gW2RvY3VtZW50Vmll
dyBjb252ZXJ0UG9pbnQ6cG9pbnQgdG9WaWV3Om5pbF07CisgICAgZWxzZQorICAgICAgICBjb252
ZXJ0ZWRQb2ludCA9IFt2aWV3IGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6bmlsXTsKKyAgICBy
ZXR1cm4gSW50UG9pbnQocm91bmRmKGNvbnZlcnRlZFBvaW50LngpLCByb3VuZGYoY29udmVydGVk
UG9pbnQueSkpOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4g
cG9pbnQ7Cit9CisKK0ludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93
VG9Sb290KGNvbnN0IFdpZGdldCogcm9vdFdpZGdldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQor
eworICAgIGlmICghcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJu
IHBvaW50OworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIEFTU0VSVChb
cm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSBpc0tpbmRPZkNsYXNzOltOU1Njcm9sbFZpZXcg
Y2xhc3NdXSk7CisgICAgV0FLU2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19jYXN0PFdBS1Njcm9s
bFZpZXcgKj4ocm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSk7CisgICAgTlNQb2ludCBjb252
ZXJ0ZWRQb2ludDsKKyAgICBpZiAoV0FLVmlldyAqZG9jdW1lbnRWaWV3ID0gW3ZpZXcgZG9jdW1l
bnRWaWV3XSkKKyAgICAgICAgY29udmVydGVkUG9pbnQgPSBJbnRQb2ludChbZG9jdW1lbnRWaWV3
IGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpuaWxdKTsKKyAgICBlbHNlCisgICAgICAgIGNv
bnZlcnRlZFBvaW50ID0gSW50UG9pbnQoW3ZpZXcgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3
Om5pbF0pOworICAgIHJldHVybiBJbnRQb2ludChyb3VuZGYoY29udmVydGVkUG9pbnQueCksIHJv
dW5kZihjb252ZXJ0ZWRQb2ludC55KSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KworICAgIHJldHVybiBwb2ludDsKK30KKworTlNWaWV3ICpXaWRnZXQ6OnBsYXRmb3JtV2lkZ2V0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93aWRnZXQuZ2V0KCk7Cit9CisKK3ZvaWQgV2lkZ2V0
OjpzZXRQbGF0Zm9ybVdpZGdldChOU1ZpZXcgKndpZGdldCkKK3sKKyAgICBpZiAod2lkZ2V0ID09
IG1fd2lkZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3dpZGdldCA9IHdpZGdldDsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVl
cERpc2FibGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBE
aXNhYmxlci5jcHAKaW5kZXggNWI5OTdjYWNhNzhmZTI4NzVkNDkzNGQxNWY0ZGNhZTc4NDgxM2E0
Mi4uYjM2YjY2ZDhlOGZiYTQyNDcyNThjMDg2YTk0YjRjZDgxMGY2Nzk5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERpc2FibGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuY3BwCkBA
IC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGlzcGxheVNs
ZWVwRGlzYWJsZXIuaCIKIAorI2lmICFQTEFURk9STShJT1MpCisKICNpbmNsdWRlIDxJT0tpdC9w
d3JfbWd0L0lPUE1MaWIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTU0LDMg
KzU2LDEyIEBAIERpc3BsYXlTbGVlcERpc2FibGVyOjp+RGlzcGxheVNsZWVwRGlzYWJsZXIoKQog
fQogCiB9CisKKyNlbHNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK0Rpc3BsYXlTbGVlcERpc2Fi
bGVyOjpEaXNwbGF5U2xlZXBEaXNhYmxlcihjb25zdCBjaGFyICopIHsgfQorRGlzcGxheVNsZWVw
RGlzYWJsZXI6On5EaXNwbGF5U2xlZXBEaXNhYmxlcigpIHsgfQorfQorCisjZW5kaWYgLy8gIVBM
QVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EaXNw
bGF5U2xlZXBEaXNhYmxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3BsYXlT
bGVlcERpc2FibGVyLmgKaW5kZXggMmM5YTE4NDJmNDkwYWQ5MDcxMzEwOTk0OTY2ZGFiYTY3ZjNl
NDI3Zi4uYTY5YmY4ZGQ5NDY4ZmY0NjMzN2IwNWI0MDIyNDA0OGY0NjAwY2YzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERpc2FibGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERpc2FibGVyLmgKQEAg
LTQwLDcgKzQwLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBEaXNwbGF5U2xlZXBEaXNhYmxl
cihjb25zdCBjaGFyKiByZWFzb24pOwogICAgIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgdWlu
dDMyX3QgbV9kaXNhYmxlRGlzcGxheVNsZWVwQXNzZXJ0aW9uOworI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RmlsZVN5c3RlbU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9GaWxlU3lzdGVt
TWFjLm1tCmluZGV4IDIxNmI2MDU5NThlMTM3YjI5YWEyODFlZGQ0ZjJjODNkNmFmOTAwZTAuLjY4
ZjZkZjZjNjU1YTY5MGVkNTkyMDI1ZGNjOWJhNjBhNmU1NmNjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9GaWxlU3lzdGVtTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9GaWxlU3lzdGVtTWFjLm1tCkBAIC02Nyw2ICs2Nyw4IEBAIFN0cmlu
ZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFu
ZGxlJiBwbGF0Zm9ybUZpbGVICiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcG9yYXJ5
RmlsZVBhdGguZGF0YSgpKTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCisKIHZvaWQgc2V0TWV0
YWRhdGFVUkwoU3RyaW5nJiBVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGNvbnN0
IFN0cmluZyYgcGF0aCkKIHsKICAgICBOU1VSTCAqVVJMID0gVVJMV2l0aFVzZXJUeXBlZFN0cmlu
ZyhVUkxTdHJpbmcsIG5pbCk7CkBAIC04Miw3ICs4NCw2IEBAIHZvaWQgc2V0TWV0YWRhdGFVUkwo
U3RyaW5nJiBVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGNvbnN0IFN0cmluZyYg
cGF0CiAgICAgfSk7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQogYm9vbCBjYW5FeGNsdWRlRnJv
bUJhY2t1cCgpCiB7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05NCw2ICs5NSw3IEBAIGJvb2wgZXhj
bHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIENTQmFja3VwU2V0SXRlbUV4
Y2x1ZGVkKHBhdGhBc1VSTChwYXRoKS5nZXQoKSwgVFJVRSwgRkFMU0UpOyAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9LaWxsUmluZ01hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9LaWxsUmluZ01hYy5tbQppbmRleCAzMmU3YzcyMjYyYTZlZTY0Mjk4
NjEzMDAxYmE1Nzc4NTg3ZDdhNDE5Li4xMDE1MDcwOGEzOTgzMTRlOTA2ZDg3N2ExYzkwOTZhZWI3
ZjkyNTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvS2lsbFJpbmdN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjLm1tCkBA
IC04MSwzICs4MSw0IEBAIHZvaWQgS2lsbFJpbmc6OnNldFRvWWFua2VkU3RhdGUoKQogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTWFjLm1tCmluZGV4IGFjOWQwY2ZhY2NkY2I0
YTMyOWQzYzI5ZmNkYzAwODI2OWY4MDkwOGQuLjkxNjM2NTNkZWNjMzMwOGU0MWFlM2M5MGZlNTc1
YjRiZmEzNzNlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9NZW1v
cnlQcmVzc3VyZUhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L01lbW9yeVByZXNzdXJlSGFuZGxlck1hYy5tbQpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIE1lbW9y
eVByZXNzdXJlSGFuZGxlcjo6aW5zdGFsbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0jaWYgTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmICFQTEFURk9STShJT1MpICYmIE1BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICAgICAgX2NhY2hlX2V2ZW50X3NvdXJj
ZSA9IHdrQ3JlYXRlTWVtb3J5U3RhdHVzUHJlc3N1cmVDcml0aWNhbERpc3BhdGNoT25NYWluUXVl
dWUoKTsKICNlbHNlCiAgICAgICAgIF9jYWNoZV9ldmVudF9zb3VyY2UgPSB3a0NyZWF0ZVZNUHJl
c3N1cmVEaXNwYXRjaE9uTWFpblF1ZXVlKCk7CkBAIC0xNTgsNyArMTU4LDkgQEAgdm9pZCBNZW1v
cnlQcmVzc3VyZUhhbmRsZXI6OnJlbGVhc2VNZW1vcnkoYm9vbCkKIAogICAgIG1lbW9yeUNhY2hl
KCktPnBydW5lVG9QZXJjZW50YWdlKDApOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBMYXll
clBvb2w6OnNoYXJlZFBvb2woKS0+ZHJhaW4oKTsKKyNlbmRpZgogCiAgICAgY3NzVmFsdWVQb29s
KCkuZHJhaW4oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bs
YXRmb3JtQ2xvY2tDTS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUNs
b2NrQ00ubW0KaW5kZXggMzNmNTRjOWExNGYzMGU0YTI1MmViNWI4MjBiNGVhYWE2NWM3ZTAzNS4u
MDc0MDA1ZWJhZDg0NDZjMWRjMDNlNGJhYWViYzM3MWE1NDM1YjUwYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtQ2xvY2tDTS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1DbG9ja0NNLm1tCkBAIC0zMSwxMSArMzEsMTkg
QEAKIAogI2ltcG9ydCAiTWVkaWFUaW1lTWFjLmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgor
I2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPENvcmVNZWRpYS9DTUF1ZGlvQ2xvY2suaD4KKyNl
bHNlCiAjaW1wb3J0IDxDb3JlTWVkaWEvQ01BdWRpb0RldmljZUNsb2NrLmg+CisjZW5kaWYKIAog
U09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChDb3JlTWVkaWEpCiAKKyNpZiBQTEFURk9STShJ
T1MpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTUF1ZGlvQ2xvY2tDcmVhdGUsIE9TU3RhdHVzLCAo
Q0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDTUNsb2NrUmVmICpjbG9ja091dCksIChhbGxvY2F0
b3IsIGNsb2NrT3V0KSkKKyNlbHNlCiBTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTUF1ZGlvRGV2aWNl
Q2xvY2tDcmVhdGUsIE9TU3RhdHVzLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDRlN0cmlu
Z1JlZiBkZXZpY2VVSUQsIENNQ2xvY2tSZWYgKmNsb2NrT3V0KSwgKGFsbG9jYXRvciwgZGV2aWNl
VUlELCBjbG9ja091dCkpCisjZW5kaWYKIFNPRlRfTElOSyhDb3JlTWVkaWEsIENNVGltZWJhc2VD
cmVhdGVXaXRoTWFzdGVyQ2xvY2ssIE9TU3RhdHVzLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9y
LCBDTUNsb2NrUmVmIG1hc3RlckNsb2NrLCBDTVRpbWViYXNlUmVmICp0aW1lYmFzZU91dCksIChh
bGxvY2F0b3IsIG1hc3RlckNsb2NrLCB0aW1lYmFzZU91dCkpCiBTT0ZUX0xJTksoQ29yZU1lZGlh
LCBDTVRpbWViYXNlU2V0VGltZSwgT1NTdGF0dXMsIChDTVRpbWViYXNlUmVmIHRpbWViYXNlLCBD
TVRpbWUgdGltZSksICh0aW1lYmFzZSwgdGltZSkpCiBTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRp
bWViYXNlR2V0VGltZSwgQ01UaW1lLCAoQ01UaW1lYmFzZVJlZiB0aW1lYmFzZSksICh0aW1lYmFz
ZSkpCkBAIC01NCw3ICs2MiwxMSBAQCBQbGF0Zm9ybUNsb2NrQ006OlBsYXRmb3JtQ2xvY2tDTSgp
CiAgICAgLCBtX3J1bm5pbmcoZmFsc2UpCiB7CiAgICAgQ01DbG9ja1JlZiByYXdDbG9ja1B0ciA9
IDA7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIENNQXVkaW9DbG9ja0NyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCAmcmF3Q2xvY2tQdHIpOworI2Vsc2UKICAgICBDTUF1ZGlvRGV2aWNlQ2xvY2tD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgTlVMTCwgJnJhd0Nsb2NrUHRyKTsKKyNlbmRpZgog
ICAgIFJldGFpblB0cjxDTUNsb2NrUmVmPiBjbG9jayA9IGFkb3B0Q0YocmF3Q2xvY2tQdHIpOwog
ICAgIGluaXRpYWxpemVXaXRoVGltaW5nU291cmNlKGNsb2NrLmdldCgpKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgKaW5kZXggZTk0NmIzZDlkZTUzOWRmZmNi
MzhlMzk1OGViODBhYmU1OWZlMTE2OC4uMjU3ZDgzZDA3MThkYzJiNTgxZTQwZTNlMjRkNmU2NWVj
MDBkMjY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5r
aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgKQEAg
LTI5LDYgKzI5LDEwIEBACiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCA8ZGxm
Y24uaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2Vu
ZGlmCisKICNkZWZpbmUgU09GVF9MSU5LX0xJQlJBUlkobGliKSBcCiAgICAgc3RhdGljIHZvaWQq
IGxpYiMjTGlicmFyeSgpIFwKICAgICB7IFwKQEAgLTYyLDYgKzY2LDE1IEBACiAgICAgICAgIHJl
dHVybiBmcmFtZXdvcmtMaWJyYXJ5OyBcCiAgICAgfQogCisjaWYgUExBVEZPUk0oSU9TKQorI2Rl
ZmluZSBTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoZnJhbWV3b3JrKSBcCisg
ICAgc3RhdGljIHZvaWQqIGZyYW1ld29yayMjTGlicmFyeSgpIFwKKyAgICB7IFwKKyAgICAgICAg
c3RhdGljIHZvaWQqIGZyYW1ld29ya0xpYnJhcnkgPSBkbG9wZW4oIi9TeXN0ZW0vTGlicmFyeS9Q
cml2YXRlRnJhbWV3b3Jrcy8iICNmcmFtZXdvcmsgIi5mcmFtZXdvcmsvIiAjZnJhbWV3b3JrLCBS
VExEX05PVyk7IFwKKyAgICAgICAgcmV0dXJuIGZyYW1ld29ya0xpYnJhcnk7IFwKKyAgICB9Cisj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiAjZGVmaW5lIFNPRlRfTElOS19TVEFHRURfRlJBTUVX
T1JLKGZyYW1ld29yaywgdW5zdGFnZWRMb2NhdGlvbiwgdmVyc2lvbikgXAogICAgIHN0YXRpYyB2
b2lkKiBmcmFtZXdvcmsjI0xpYnJhcnkoKSBcCiAgICAgeyBcCkBAIC05OSw2ICsxMTIsMzAgQEAK
ICAgICAgICAgcmV0dXJuIHNvZnRMaW5rIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7IFwK
ICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisjZGVmaW5lIFNPRlRfTElOS19NQVlfRkFJTChm
cmFtZXdvcmssIGZ1bmN0aW9uTmFtZSwgcmVzdWx0VHlwZSwgcGFyYW1ldGVyRGVjbGFyYXRpb25z
LCBwYXJhbWV0ZXJOYW1lcykgXAorICAgIHN0YXRpYyByZXN1bHRUeXBlICgqc29mdExpbmsjI2Z1
bmN0aW9uTmFtZSkgcGFyYW1ldGVyRGVjbGFyYXRpb25zID0gMDsgXAorICAgIFwKKyAgICBzdGF0
aWMgYm9vbCBpbml0IyNmdW5jdGlvbk5hbWUoKSBcCisgICAgeyBcCisgICAgICAgIEFTU0VSVCgh
c29mdExpbmsjI2Z1bmN0aW9uTmFtZSk7IFwKKyAgICAgICAgc29mdExpbmsjI2Z1bmN0aW9uTmFt
ZSA9IChyZXN1bHRUeXBlICgqKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMpIGRsc3ltKGZyYW1ld29y
ayMjTGlicmFyeSgpLCAjZnVuY3Rpb25OYW1lKTsgXAorICAgICAgICByZXR1cm4gISFzb2Z0TGlu
ayMjZnVuY3Rpb25OYW1lOyBcCisgICAgfSBcCisgICAgXAorICAgIHN0YXRpYyBib29sIGNhbkxv
YWQjI2Z1bmN0aW9uTmFtZSgpIFwKKyAgICB7IFwKKyAgICAgICAgc3RhdGljIGJvb2wgbG9hZGVk
ID0gaW5pdCMjZnVuY3Rpb25OYW1lKCk7IFwKKyAgICAgICAgcmV0dXJuIGxvYWRlZDsgXAorICAg
IH0gXAorICAgIFwKKyAgICByZXN1bHRUeXBlIGZ1bmN0aW9uTmFtZSBwYXJhbWV0ZXJEZWNsYXJh
dGlvbnMgXAorICAgIHsgXAorICAgICAgICBBU1NFUlQoc29mdExpbmsjI2Z1bmN0aW9uTmFtZSk7
IFwKKyAgICAgICAgcmV0dXJuIHNvZnRMaW5rIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7
IFwKKyAgICB9CisjZW5kaWYKKwogLyogY2FsbGluZ0NvbnZlbnRpb24gaXMgdW51c2VkIG9uIE1h
YyBidXQgaXMgaGVyZSB0byBrZWVwIHRoZSBtYWNybyBwcm90b3R5cGUgdGhlIHNhbWUgYmV0d2Vl
biBNYWMgYW5kIFdpbmRvd3MuICovCiAjZGVmaW5lIFNPRlRfTElOS19PUFRJT05BTChmcmFtZXdv
cmssIGZ1bmN0aW9uTmFtZSwgcmVzdWx0VHlwZSwgY2FsbGluZ0NvbnZlbnRpb24sIHBhcmFtZXRl
ckRlY2xhcmF0aW9ucykgXAogICAgIHR5cGVkZWYgcmVzdWx0VHlwZSAoKmZ1bmN0aW9uTmFtZSMj
UHRyVHlwZSkgcGFyYW1ldGVyRGVjbGFyYXRpb25zOyBcCkBAIC0yMDIsMyArMjM5LDMyIEBACiAg
ICAgICAgIGdldCMjbmFtZSA9IG5hbWUjI0Z1bmN0aW9uOyBcCiAgICAgICAgIHJldHVybiBjb25z
dGFudCMjbmFtZTsgXAogICAgIH0KKworI2lmIFBMQVRGT1JNKElPUykKKyNkZWZpbmUgU09GVF9M
SU5LX0NPTlNUQU5UX01BWV9GQUlMKGZyYW1ld29yaywgbmFtZSwgdHlwZSkgXAorICAgIHN0YXRp
YyBib29sIGluaXQjI25hbWUoKTsgXAorICAgIHN0YXRpYyB0eXBlICgqZ2V0IyNuYW1lKSgpID0g
MDsgXAorICAgIHN0YXRpYyB0eXBlIGNvbnN0YW50IyNuYW1lOyBcCisgICAgXAorICAgIHN0YXRp
YyB0eXBlIG5hbWUjI0Z1bmN0aW9uKCkgXAorICAgIHsgXAorICAgICAgICByZXR1cm4gY29uc3Rh
bnQjI25hbWU7IFwKKyAgICB9XAorICAgIFwKKyAgICBzdGF0aWMgYm9vbCBjYW5Mb2FkIyNuYW1l
KCkgXAorICAgIHsgXAorICAgICAgICBzdGF0aWMgYm9vbCBsb2FkZWQgPSBpbml0IyNuYW1lKCk7
IFwKKyAgICAgICAgcmV0dXJuIGxvYWRlZDsgXAorICAgIH0gXAorICAgIFwKKyAgICBzdGF0aWMg
Ym9vbCBpbml0IyNuYW1lKCkgXAorICAgIHsgXAorICAgICAgICBBU1NFUlQoIWdldCMjbmFtZSk7
IFwKKyAgICAgICAgdm9pZCogY29uc3RhbnQgPSBkbHN5bShmcmFtZXdvcmsjI0xpYnJhcnkoKSwg
I25hbWUpOyBcCisgICAgICAgIGlmICghY29uc3RhbnQpIFwKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgXAorICAgICAgICBjb25zdGFudCMjbmFtZSA9ICpzdGF0aWNfY2FzdDx0eXBlKj4oY29u
c3RhbnQpOyBcCisgICAgICAgIGdldCMjbmFtZSA9IG5hbWUjI0Z1bmN0aW9uOyBcCisgICAgICAg
IHJldHVybiB0cnVlOyBcCisgICAgfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU3lzdGVtVmVyc2lvbk1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TeXN0ZW1WZXJzaW9uTWFjLm1tCmluZGV4IGJjYzExYmE5YjU4OTkzZmQ1ODhhMTFj
OTk5MDU1YzlmNzZjMzJmY2QuLmVjZDU1ZTIyMzdjOTkwMTE5NjUyOGQ0MDM5NWFjNzJiYjFhYWVh
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TeXN0ZW1WZXJzaW9u
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TeXN0ZW1WZXJzaW9uTWFj
Lm1tCkBAIC0yNyw2ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFQTEFU
Rk9STShJT1MpCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAK
IHN0YXRpYyBOU1N0cmluZyAqY3JlYXRlU3lzdGVtTWFya2V0aW5nVmVyc2lvbigpCkBAIC02NCwx
MSArNjUsMTUgQEAgc3RhdGljIE5TU3RyaW5nICpjcmVhdGVTeXN0ZW1NYXJrZXRpbmdWZXJzaW9u
KCkKIAogI2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAog
Ci0KIE5TU3RyaW5nICpzeXN0ZW1NYXJrZXRpbmdWZXJzaW9uKCkKIHsKICAgICBzdGF0aWMgTlNT
dHJpbmcgKnZlcnNpb24gPSBjcmVhdGVTeXN0ZW1NYXJrZXRpbmdWZXJzaW9uKCk7CiAgICAgcmV0
dXJuIHZlcnNpb247CiB9CisjZWxzZQorCit9CisKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxT
Y3JlZW5QbGFjZWhvbGRlclZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJD
b3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oCmluZGV4IDdiMjQzYjBhMmYyNGMyMDU3Mzdh
YTM5NzhkMWE4YzZhZTRkYzQ0YzMuLjg3ZTY5OWFjZWMwYTY4MDg3ZWU5ZGVmZmRhNDA0MDg1MDhm
YzIzMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVs
bFNjcmVlblBsYWNlaG9sZGVyVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oCkBAIC0yMyw2ICsyMyw4IEBACiAg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmICFQTEFURk9STShJ
T1MpCisKICNpZm5kZWYgV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXdfaAogI2RlZmlu
ZSBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlld19oCiAKQEAgLTQwLDMgKzQyLDUgQEAK
IEBlbmQKIAogI2VuZGlmIC8vIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3X2gKKwor
I2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0KaW5k
ZXggYTk2ZGIwZTZiMWQxZGZhMzA3M2NjZjMyNGE5M2JmNDYyOGE2ZjFhMy4uMTNmNTYzZTkyODFl
N2E3YzJlNzVjNjYzNmEzYzlmMTU1OWJmZjljYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmll
dy5tbQpAQCAtMjQsNiArMjQsOCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpZiAh
UExBVEZPUk0oSU9TKQorCiAjaW5jbHVkZSAiV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZp
ZXcuaCIKIAogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKQEAgLTkzLDMgKzk1LDUgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB9CiAKIEBlbmQKKworI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1
bGxTY3JlZW5XYXJuaW5nVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNv
cmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcuaAppbmRleCBmNmVhOWFkNzg0ZWFlMmRlMDk1ZDFlMzBl
ZGQ3YzBjNTRmYTZjY2NkLi5lMmEzN2ZiNDI0MDgxMmIxOGRkMDhmMjNjM2JiODEyNzJjY2E2MTZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3Jl
ZW5XYXJuaW5nVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
RnVsbFNjcmVlbldhcm5pbmdWaWV3LmgKQEAgLTIzLDYgKzIzLDggQEAKICAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaWYgIVBMQVRGT1JNKElPUykKKwogI2lmbmRl
ZiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3X2gKICNkZWZpbmUgV2ViQ29yZUZ1bGxTY3Jl
ZW5XYXJuaW5nVmlld19oCiAKQEAgLTM5LDMgKzQxLDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLy8g
V2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlld19oCisKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9T
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2Ny
ZWVuV2FybmluZ1ZpZXcubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1
bGxTY3JlZW5XYXJuaW5nVmlldy5tbQppbmRleCBjNGUxZmEzMjkwYWQ0NDA0ZDYyZjJlMTE0YjBh
ZGZhMTZhZTE5MmMzLi4zNDk0Yjg4YWM5ZTQxNmJmZDViOWE5MDg3MjI3MDVlNGY2OTcxODdjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5X
YXJuaW5nVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1
bGxTY3JlZW5XYXJuaW5nVmlldy5tbQpAQCAtMjQsNiArMjQsOCBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaW5jbHVkZSAiV2ViQ29yZUZ1bGxT
Y3JlZW5XYXJuaW5nVmlldy5oIgogCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgpAQCAt
MTAzLDMgKzEwNSw1IEBAIHN0YXRpYyBjb25zdCBDR0Zsb2F0IFdhcm5pbmdWaWV3U2hhZG93UmFk
aXVzID0gNTsKICAgICByZXR1cm4gc2VsZjsKIH0KIEBlbmQKKworI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1
bGxTY3JlZW5XaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVs
bFNjcmVlbldpbmRvdy5oCmluZGV4IGRlNjM2NWE5NDE4MjE0NDQ0YzcxODFiNWUwY2RkZWRlNTk2
MThhYzAuLjYwMWUzNDhmMDA0NGMwMjNkZTUxYTAxODVhZTJiODVhNWIwYjc5YTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldpbmRv
dy5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFdlYkNvcmVGdWxsU2NyZWVuV2luZG93X2gK
ICNkZWZpbmUgV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3dfaAogCi0jaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgIVBMQVRGT1JNKElPUykKIAog
QGludGVyZmFjZSBXZWJDb3JlRnVsbFNjcmVlbldpbmRvdyA6IE5TV2luZG93CiBAZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5XaW5k
b3cubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5XaW5k
b3cubW0KaW5kZXggNTIwMjkyY2ZhYmViMDExYWU4MmRjY2YxMjY4ZjAyY2JkNTg0OTliMS4uNTMw
MmNkYTJlYTFlNDY3NWE5NzcyMTc5NWRkZmNkMTIxMmJmNjIzOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93Lm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5tbQpAQCAt
MjUsNyArMjUsNyBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmICFQTEFURk9STShJT1MpCiAK
ICNpbXBvcnQgIldlYkNvcmVGdWxsU2NyZWVuV2luZG93LmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TQ2VsbEV4dHJhcy5oCmluZGV4IDQ3ZWRmZjg2MWFl
YjRiYThkZjI5OGEwOGU4Yzg0MDg3ZGEzMGQ0NjAuLjlmZjc0NjJiMDc2NmMyNWFkMWE4NTAzZjkz
NjMyZTg2NTlmMTdiMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJDb3JlTlNDZWxsRXh0cmFzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YkNvcmVOU0NlbGxFeHRyYXMuaApAQCAtMjMsOCArMjMsMTIgQEAKICAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbXBvcnQgPEFw
cEtpdC9BcHBLaXQuaD4KIAogQGludGVyZmFjZSBOU0NlbGwgKFdlYkNvcmVGb2N1c1JpbmdEcmF3
aW5nKQogLSAodm9pZClfd2ViX2RyYXdGb2N1c1JpbmdXaXRoRnJhbWU6KE5TUmVjdCljZWxsRnJh
bWUgaW5WaWV3OihOU1ZpZXcgKiljb250cm9sVmlldzsKIEBlbmQKKworI2VuZGlmIC8vICFQTEFU
Rk9STShJT1MpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJD
b3JlTlNDZWxsRXh0cmFzLm0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5T
Q2VsbEV4dHJhcy5tCmluZGV4IGE1Njg5MzE3NGIzNzZkNzY5ZTVhOGQ3NTdiNjMwZTM0MDVkYzBk
MzIuLjBkNWIwZTcxNWNjM2E0MzRlYzVmNGJlOTkxOGMzNTlmYzBhMGEzODAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFzLm0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU0NlbGxFeHRyYXMubQpAQCAtMjYs
NiArMjYsOCBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXZWJDb3JlTlNDZWxsRXh0
cmFzLmgiCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiBAaW1wbGVtZW50YXRpb24gTlNDZWxsIChX
ZWJDb3JlRm9jdXNSaW5nRHJhd2luZykKIAogLSAodm9pZClfd2ViX2RyYXdGb2N1c1JpbmdXaXRo
RnJhbWU6KE5TUmVjdCljZWxsRnJhbWUgaW5WaWV3OihOU1ZpZXcgKiljb250cm9sVmlldwpAQCAt
NDAsMyArNDIsNiBAQCAtICh2b2lkKV93ZWJfZHJhd0ZvY3VzUmluZ1dpdGhGcmFtZTooTlNSZWN0
KWNlbGxGcmFtZSBpblZpZXc6KE5TVmlldyAqKWNvbnRyb2xWaQogfQogCiBAZW5kCisKKyNlbmRp
ZiAvLyAhUExBVEZPUk0oSU9TKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAppbmRleCA0YjQyNzA5MGM0ZjI2YmZkNDU0ZTM1
ZWZjZDIxM2ZhYmNhM2JmNzE5Li41MzMxMjg5NzM1OTNmYTQ1NmQ2NDE2NDRlMzFmZGNkYzJmYjA2
YTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgKQEAgLTI4LDYgKzI4LDEwIEBACiAKICNpbmNsdWRlIDxvYmpjL29iamMu
aD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
SU9TLmgiCisjZW5kaWYKKwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlN0cmluZyAqIENGU3Ry
aW5nUmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRk51bWJlciAqIENGTnVtYmVyUmVmOwog
dHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRpY3Rpb25hcnkgKiBDRkRpY3Rpb25hcnlSZWY7CkBA
IC01MywxNiArNTcsMjEgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVExpbmUgKiBDVExpbmVS
ZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NUUnVuICogQ1RSdW5SZWY7CiB0eXBlZGVmIGNv
bnN0IHN0cnVjdCBfX0NUVHlwZXNldHRlciAqIENUVHlwZXNldHRlclJlZjsKIHR5cGVkZWYgY29u
c3Qgc3RydWN0IF9fQVhVSUVsZW1lbnQgKkFYVUlFbGVtZW50UmVmOworI2lmICFQTEFURk9STShJ
T1MpCiB0eXBlZGVmIHN0cnVjdCBfTlNSYW5nZSBOU1JhbmdlOwogCiB0eXBlZGVmIFVJbnQzMiBG
TUZvbnQ7CiB0eXBlZGVmIEZNRm9udCBBVFNVRm9udElEOwogdHlwZWRlZiBVSW50MTYgQVRTR2x5
cGhSZWY7CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKENBKQorI2lmICFQTEFU
Rk9STShJT1NfU0lNVUxBVE9SKQogdHlwZWRlZiBzdHJ1Y3QgX19JT1N1cmZhY2UgKklPU3VyZmFj
ZVJlZjsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKICNlbmRpZgogCisjaWYg
IVBMQVRGT1JNKElPUykKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRS
WV9UWVBFUwogdHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50OwogdHlwZWRlZiBzdHJ1Y3Qg
Q0dSZWN0IE5TUmVjdDsKQEAgLTcwLDYgKzc5LDExIEBAIHR5cGVkZWYgc3RydWN0IENHUmVjdCBO
U1JlY3Q7CiB0eXBlZGVmIHN0cnVjdCBfTlNQb2ludCBOU1BvaW50OwogdHlwZWRlZiBzdHJ1Y3Qg
X05TUmVjdCBOU1JlY3Q7CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisjaWYg
UExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNl
bmRpZgogCiAjaWYgVVNFKENGTkVUV09SSykKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENv
b2tpZVN0b3JhZ2UqICBDRkhUVFBDb29raWVTdG9yYWdlUmVmOwpAQCAtMTE5LDcgKzEzMyw3IEBA
IHR5cGVkZWYgZW51bSB7CiAgICAgd2tQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nCiB9IHdr
UGF0dGVyblRpbGluZzsKIGV4dGVybiB2b2lkICgqd2tDR0NvbnRleHRSZXNldENsaXApKENHQ29u
dGV4dFJlZik7Ci0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCisj
aWYgIVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDgwCiBleHRlcm4gYm9vbCAoKndrQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNl
dHMpKENHQ29udGV4dFJlZik7CiAjZW5kaWYKIGV4dGVybiBDR1BhdHRlcm5SZWYgKCp3a0NHUGF0
dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9ybSkoQ0dJbWFnZVJlZiwgQ0dBZmZpbmVUcmFu
c2Zvcm0sIGludCk7CkBAIC0xMzUsNiArMTQ5LDcgQEAgZXh0ZXJuIENGUmVhZFN0cmVhbVJlZiAo
KndrQ3JlYXRlQ3VzdG9tQ0ZSZWFkU3RyZWFtKSh2b2lkICooKmZvcm1DcmVhdGUpKENGUmVhZFMK
IGV4dGVybiBDRlN0cmluZ1JlZiAoKndrQ29weUNGTG9jYWxpemF0aW9uUHJlZmVycmVkTmFtZSko
Q0ZTdHJpbmdSZWYpOwogZXh0ZXJuIE5TU3RyaW5nKiAoKndrQ29weU5TVVJMUmVzcG9uc2VTdGF0
dXNMaW5lKShOU1VSTFJlc3BvbnNlKik7CiBleHRlcm4gQ0ZBcnJheVJlZiAoKndrQ29weU5TVVJM
UmVzcG9uc2VDZXJ0aWZpY2F0ZUNoYWluKShOU1VSTFJlc3BvbnNlKik7CisjaWYgIVBMQVRGT1JN
KElPUykKIGV4dGVybiB2b2lkICgqd2tEcmF3QmV6ZWxlZFRleHRGaWVsZENlbGwpKE5TUmVjdCwg
Qk9PTCBlbmFibGVkKTsKIGV4dGVybiB2b2lkICgqd2tEcmF3VGV4dEZpZWxkQ2VsbEZvY3VzUmlu
ZykoTlNUZXh0RmllbGRDZWxsKiwgTlNSZWN0KTsKIGV4dGVybiB2b2lkICgqd2tEcmF3Q2Fwc0xv
Y2tJbmRpY2F0b3IpKENHQ29udGV4dFJlZiwgQ0dSZWN0KTsKQEAgLTE0MywxNiArMTU4LDIyIEBA
IGV4dGVybiB2b2lkICgqd2tEcmF3Rm9jdXNSaW5nKShDR0NvbnRleHRSZWYsIENHQ29sb3JSZWYs
IGludCByYWRpdXMpOwogZXh0ZXJuIE5TRm9udCogKCp3a0dldEZvbnRJbkxhbmd1YWdlRm9yUmFu
Z2UpKE5TRm9udCosIE5TU3RyaW5nKiwgTlNSYW5nZSk7CiBleHRlcm4gTlNGb250KiAoKndrR2V0
Rm9udEluTGFuZ3VhZ2VGb3JDaGFyYWN0ZXIpKE5TRm9udCosIFVuaUNoYXIpOwogZXh0ZXJuIEJP
T0wgKCp3a0dldEdseXBoVHJhbnNmb3JtZWRBZHZhbmNlcykoQ0dGb250UmVmLCBOU0ZvbnQqLCBD
R0FmZmluZVRyYW5zZm9ybSosIEFUU0dseXBoUmVmKiwgQ0dTaXplKiBhZHZhbmNlKTsKKyNlbmRp
ZgorI2lmICFQTEFURk9STShJT1MpCiBleHRlcm4gdm9pZCAoKndrRHJhd01lZGlhU2xpZGVyVHJh
Y2spKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1JlY3QgcmVjdCwgZmxvYXQgdGltZUxvYWRlZCwg
ZmxvYXQgY3VycmVudFRpbWUsCiAgICAgZmxvYXQgZHVyYXRpb24sIHVuc2lnbmVkIHN0YXRlKTsK
IGV4dGVybiB2b2lkICgqd2tEcmF3TWVkaWFVSVBhcnQpKGludCBwYXJ0LCBDR0NvbnRleHRSZWYg
Y29udGV4dCwgQ0dSZWN0IHJlY3QsIHVuc2lnbmVkIHN0YXRlKTsKIGV4dGVybiBDRlN0cmluZ1Jl
ZiAoKndrU2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKSh1bnNpZ25lZCBrZXlTaXpl
LCBDRlN0cmluZ1JlZiBjaGFsbGVuZ2UsIENGU3RyaW5nUmVmIGtleURlc2NyaXB0aW9uKTsKIGV4
dGVybiBOU1N0cmluZyogKCp3a0dldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKShOU1N0
cmluZyopOwogZXh0ZXJuIE5TQXJyYXkqICgqd2tHZXRFeHRlbnNpb25zRm9yTUlNRVR5cGUpKE5T
U3RyaW5nKik7CisjZW5kaWYKIGV4dGVybiBOU1N0cmluZyogKCp3a0dldE1JTUVUeXBlRm9yRXh0
ZW5zaW9uKShOU1N0cmluZyopOworI2lmICFQTEFURk9STShJT1MpCiBleHRlcm4gQVRTVUZvbnRJ
RCAoKndrR2V0TlNGb250QVRTVUZvbnRJZCkoTlNGb250Kik7CiBleHRlcm4gZG91YmxlICgqd2tH
ZXROU1VSTFJlc3BvbnNlQ2FsY3VsYXRlZEV4cGlyYXRpb24pKE5TVVJMUmVzcG9uc2UgKnJlc3Bv
bnNlKTsKKyNlbmRpZgogZXh0ZXJuIE5TRGF0ZSAqKCp3a0dldE5TVVJMUmVzcG9uc2VMYXN0TW9k
aWZpZWREYXRlKShOU1VSTFJlc3BvbnNlICpyZXNwb25zZSk7CisjaWYgIVBMQVRGT1JNKElPUykK
IGV4dGVybiBCT09MICgqd2tHZXROU1VSTFJlc3BvbnNlTXVzdFJldmFsaWRhdGUpKE5TVVJMUmVz
cG9uc2UgKnJlc3BvbnNlKTsKIGV4dGVybiB2b2lkICgqd2tHZXRXaGVlbEV2ZW50RGVsdGFzKShO
U0V2ZW50KiwgZmxvYXQqIGRlbHRhWCwgZmxvYXQqIGRlbHRhWSwgQk9PTCogY29udGludW91cyk7
CiBleHRlcm4gVUludDggKCp3a0dldE5TRXZlbnRLZXlDaGFyKShOU0V2ZW50ICopOwpAQCAtMTkx
LDcgKzIxMiw5IEBAIGV4dGVybiBOU0FycmF5ICooKndrUVRHZXRTaXRlc0luTWVkaWFEb3dubG9h
ZENhY2hlKSgpOwogZXh0ZXJuIHZvaWQgKCp3a1FUQ2xlYXJNZWRpYURvd25sb2FkQ2FjaGVGb3JT
aXRlKShOU1N0cmluZyAqc2l0ZSk7CiBleHRlcm4gdm9pZCAoKndrUVRDbGVhck1lZGlhRG93bmxv
YWRDYWNoZSkoKTsKIGV4dGVybiB2b2lkICgqd2tTZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKShDR0Nv
bnRleHRSZWYsIE5TRm9udCosIEJPT0wpOworZXh0ZXJuIHZvaWQgKCp3a1NldENvb2tpZVN0b3Jh
Z2VQcml2YXRlQnJvd3NpbmdFbmFibGVkKShCT09MKTsKIGV4dGVybiB2b2lkICgqd2tTZXREcmFn
SW1hZ2UpKE5TSW1hZ2UqLCBOU1BvaW50IG9mZnNldCk7CisjZW5kaWYKIGV4dGVybiB2b2lkICgq
d2tTZXROU1VSTENvbm5lY3Rpb25EZWZlcnNDYWxsYmFja3MpKE5TVVJMQ29ubmVjdGlvbiAqLCBC
T09MKTsKIGV4dGVybiB2b2lkICgqd2tTZXROU1VSTFJlcXVlc3RTaG91bGRDb250ZW50U25pZmYp
KE5TTXV0YWJsZVVSTFJlcXVlc3QgKiwgQk9PTCk7CiBleHRlcm4gdm9pZCAoKndrU2V0QmFzZUNU
TSkoQ0dDb250ZXh0UmVmLCBDR0FmZmluZVRyYW5zZm9ybSk7CkBAIC0yMTYsMTEgKzIzOSwxMyBA
QCBleHRlcm4gYm9vbCAoKndrR2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKShDVEZvbnRS
ZWYsIGNvbnN0IFVuaUNoYXJbXSwgQ0dHbAogCiBleHRlcm4gQk9PTCAoKndrVXNlU2hhcmVkTWVk
aWFVSSkoKTsKIAorI2lmICFQTEFURk9STShJT1MpCiBleHRlcm4gdm9pZCogd2tHZXRIeXBoZW5h
dGlvbkxvY2F0aW9uQmVmb3JlSW5kZXg7CisjZW5kaWYKIAogZXh0ZXJuIENUTGluZVJlZiAoKndr
Q3JlYXRlQ1RMaW5lV2l0aFVuaUNoYXJQcm92aWRlcikoY29uc3QgVW5pQ2hhciogKCpwcm92aWRl
KShDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjaGFyQ291bnQsIENGRGljdGlvbmFyeVJl
ZiogYXR0cmlidXRlcywgdm9pZCopLCB2b2lkICgqZGlzcG9zZSkoY29uc3QgVW5pQ2hhciogY2hh
cnMsIHZvaWQqKSwgdm9pZCopOwogCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDkwCisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwOTAKIGVudW0gewogICAgIHdrQ1RGb250VHJhbnNmb3JtQXBwbHlTaGFwaW5n
ID0gKDEgPDwgMCksCiAgICAgd2tDVEZvbnRUcmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nID0gKDEg
PDwgMSkKQEAgLTIzNSwxMSArMjYwLDEyIEBAIGV4dGVybiBDVFR5cGVzZXR0ZXJSZWYgKCp3a0Ny
ZWF0ZUNUVHlwZXNldHRlcldpdGhVbmlDaGFyUHJvdmlkZXJBbmRPcHRpb25zKShjb25zCiAKIGV4
dGVybiBDR1NpemUgKCp3a0NUUnVuR2V0SW5pdGlhbEFkdmFuY2UpKENUUnVuUmVmKTsKIAotI2lm
IFBMQVRGT1JNKE1BQykgJiYgVVNFKENBKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKENBKSAm
JiAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKIGV4dGVybiBDR0NvbnRleHRSZWYgKCp3a0lPU3Vy
ZmFjZUNvbnRleHRDcmVhdGUpKElPU3VyZmFjZVJlZiBzdXJmYWNlLCB1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0LCBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSk7CiBleHRlcm4gQ0dJ
bWFnZVJlZiAoKndrSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKShDR0NvbnRleHRSZWYgY29u
dGV4dCk7CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiBleHRlcm4gaW50ICgqd2tSZWNv
bW1lbmRlZFNjcm9sbGVyU3R5bGUpKHZvaWQpOwogCiBleHRlcm4gYm9vbCAoKndrRXhlY3V0YWJs
ZVdhc0xpbmtlZE9uT3JCZWZvcmVTbm93TGVvcGFyZCkodm9pZCk7CkBAIC0yNTAsNyArMjc2LDkg
QEAgZXh0ZXJuIHZvaWQgKCp3a1NldENyYXNoUmVwb3J0QXBwbGljYXRpb25TcGVjaWZpY0luZm9y
bWF0aW9uKShDRlN0cmluZ1JlZik7CiBleHRlcm4gTlNVUkwgKigqd2tBVkFzc2V0UmVzb2x2ZWRV
UkwpKEFWQXNzZXQqKTsKIAogZXh0ZXJuIE5TQ3Vyc29yICooKndrQ3Vyc29yKShjb25zdCBjaGFy
Kik7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKICAgICAKKyNpZiAhUExBVEZPUk0oSU9TKQog
I2lmIFBMQVRGT1JNKE1BQykKIGV4dGVybiBOU0FycmF5ICooKndrU3BlZWNoU3ludGhlc2lzR2V0
Vm9pY2VJZGVudGlmaWVycykodm9pZCk7CiBleHRlcm4gTlNTdHJpbmcgKigqd2tTcGVlY2hTeW50
aGVzaXNHZXREZWZhdWx0Vm9pY2VJZGVudGlmaWVyRm9yTG9jYWxlKShOU0xvY2FsZSAqKTsKQEAg
LTI2Niw2ICsyOTQsMTMgQEAgZXh0ZXJuIENGVHlwZVJlZiAoKndrQ29weUFYVGV4dE1hcmtlclJh
bmdlRW5kKShDRlR5cGVSZWYgcmFuZ2UpOwogZXh0ZXJuIENGVHlwZVJlZiAoKndrQ3JlYXRlQVhU
ZXh0TWFya2VyKShjb25zdCB2b2lkICpieXRlcywgc2l6ZV90IGxlbik7CiBleHRlcm4gQk9PTCAo
KndrR2V0Qnl0ZXNGcm9tQVhUZXh0TWFya2VyKShDRlR5cGVSZWYgdGV4dE1hcmtlciwgdm9pZCAq
Ynl0ZXMsIHNpemVfdCBsZW5ndGgpOwogZXh0ZXJuIEFYVUlFbGVtZW50UmVmICgqd2tDcmVhdGVB
WFVJRWxlbWVudFJlZikoaWQgZWxlbWVudCk7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKwor
I2lmIFBMQVRGT1JNKElPUykKK2V4dGVybiBDR1NpemUgKCp3a0dldFZpZXdwb3J0U2NyZWVuU2l6
ZSkodm9pZCk7CitleHRlcm4gdm9pZCAoKndrU2V0TGF5ZXJDb250ZW50c1NjYWxlKShDQUxheWVy
ICopOworZXh0ZXJuIGZsb2F0ICgqd2tHZXRTY3JlZW5TY2FsZUZhY3Rvcikodm9pZCk7CisjZW5k
aWYKIAogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVSTFN0b3JhZ2VTZXNzaW9uKiBDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmOwogZXh0ZXJuIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgKCp3a0NyZWF0
ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbikoQ0ZTdHJpbmdSZWYpOwpAQCAtMjk3LDE3ICszMzIsMjEg
QEAgZXh0ZXJuIENGQXJyYXlSZWYgKCp3a0NGVVJMUmVxdWVzdENvcHlIVFRQUmVxdWVzdEJvZHlQ
YXJ0cykoQ0ZVUkxSZXF1ZXN0UmVmKTsKIGV4dGVybiB2b2lkICgqd2tDRlVSTFJlcXVlc3RTZXRI
VFRQUmVxdWVzdEJvZHlQYXJ0cykoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZiwgQ0ZBcnJheVJlZiBi
b2R5UGFydHMpOwogZXh0ZXJuIHZvaWQgKCp3a1NldFJlcXVlc3RTdG9yYWdlU2Vzc2lvbikoQ0ZV
UkxTdG9yYWdlU2Vzc2lvblJlZiwgQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZik7CiAjZW5kaWYKKyNp
ZiAhUExBVEZPUk0oSU9TKQogZXh0ZXJuIHZvaWQgKCp3a1NldE1ldGFkYXRhVVJMKShOU1N0cmlu
ZyAqdXJsU3RyaW5nLCBOU1N0cmluZyAqcmVmZXJyZXIsIE5TU3RyaW5nICpwYXRoKTsKKyNlbmRp
ZgogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbXBvcnQgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CiAK
IGV4dGVybiBkaXNwYXRjaF9zb3VyY2VfdCAoKndrQ3JlYXRlVk1QcmVzc3VyZURpc3BhdGNoT25N
YWluUXVldWUpKHZvaWQpOworI2VuZGlmCiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwOTAKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwOTAKIGV4dGVybiBkaXNwYXRjaF9zb3VyY2VfdCAoKndrQ3JlYXRl
TWVtb3J5U3RhdHVzUHJlc3N1cmVDcml0aWNhbERpc3BhdGNoT25NYWluUXVldWUpKHZvaWQpOwog
I2VuZGlmCiAgICAgCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgw
CisjaWYgIVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDgwCiBleHRlcm4gYm9vbCAoKndrRXhlY3V0YWJsZVdhc0xpbmtlZE9uT3JCZWZvcmVMaW9u
KSh2b2lkKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2ViRm9udENhY2hlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkZvbnRD
YWNoZS5tbQppbmRleCBlNDA3NTNlNTk0M2IzY2ExNzMwNzU1NGUyMWQxODI3NzM4ODJmZGUzLi44
YzgyNjBiMDJiMmIwOThiOWVkZGViZTBhZWIxMzUyYzFmNGVlMDlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViRm9udENhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJGb250Q2FjaGUubW0KQEAgLTI4NywxMiArMjg3LDEwIEBAIHN0
YXRpYyBpbmxpbmUgRm9udFRyYWl0c01hc2sgdG9UcmFpdHNNYXNrKE5TRm9udFRyYWl0TWFzayBh
cHBLaXRUcmFpdHMsIE5TSW50ZWdlCiAgICAgcmV0dXJuIFtzZWxmIGludGVybmFsRm9udFdpdGhG
YW1pbHk6ZGVzaXJlZEZhbWlseSB0cmFpdHM6ZGVzaXJlZFRyYWl0cyB3ZWlnaHQ6ZGVzaXJlZFdl
aWdodCBzaXplOnNpemVdOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKICsgKE5TRm9udCAqKWZv
bnRXaXRoRmFtaWx5OihOU1N0cmluZyAqKWRlc2lyZWRGYW1pbHkgdHJhaXRzOihOU0ZvbnRUcmFp
dE1hc2spZGVzaXJlZFRyYWl0cyBzaXplOihmbG9hdClzaXplCiB7CiAgICAgaW50IGRlc2lyZWRX
ZWlnaHQgPSAoZGVzaXJlZFRyYWl0cyAmIE5TQm9sZEZvbnRNYXNrKSA/IDkgOiA1OwogICAgIHJl
dHVybiBbc2VsZiBmb250V2l0aEZhbWlseTpkZXNpcmVkRmFtaWx5IHRyYWl0czpkZXNpcmVkVHJh
aXRzIHdlaWdodDpkZXNpcmVkV2VpZ2h0IHNpemU6c2l6ZV07CiB9Ci0jZW5kaWYKIAogQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwCmlu
ZGV4IDVhYjA0MmYzNTc1MzI0OGE0ZjI2M2Y2MDE0ZWJiZjU5NmM2NDQzMTEuLjRhNjFkZjRjOTg4
NWRhN2MwYWNjODY0YjA1NjkzNzFhMjk1N2I3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5jcHAKQEAgLTMzLDYgKzMzLDEwIEBACiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
IAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBCbG9iUmVnaXN0cnkmIGJsb2JSZWdpc3RyeSgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUlt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBs
LmNwcAppbmRleCA2YmI1Y2FlNWJhYjRiYjA3MmY2NTZhOTgzYmRlYjA0MGE2ODg0OTIzLi4yMzFh
Zjc4YWFjM2JhZTIzNTYwZTM5YmFhMWIwN2M4OTYzMGE0NGE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTQzLDYg
KzQzLDEwIEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiV2ViQ29yZVRocmVh
ZC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQmxvYlJlZ2lzdHJ5SW1wbDo6
fkJsb2JSZWdpc3RyeUltcGwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9DcmVkZW50aWFsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Ny
ZWRlbnRpYWwuaAppbmRleCAxYTVhNDdlNTI5Zjc2MzhjOTE1M2M4ZmM3MmMxODNjM2E1Y2E0YzQ0
Li4yMTY2YjliZmE5NzM1NjA1MjJjODJlNjYzNTA3OTllZWI1ODkxZTJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuaApAQCAtMjcsNyArMjcsNyBAQAog
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNkZWZpbmUgQ0VSVElGSUNBVEVf
Q1JFREVOVElBTFNfU1VQUE9SVEVEIFBMQVRGT1JNKE1BQykKKyNkZWZpbmUgQ0VSVElGSUNBVEVf
Q1JFREVOVElBTFNfU1VQUE9SVEVEIChQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKE1BQykpCiAK
ICNpZiBDRVJUSUZJQ0FURV9DUkVERU5USUFMU19TVVBQT1JURUQKICNpbmNsdWRlIDxTZWN1cml0
eS9TZWNCYXNlLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0NyZWRlbnRpYWxTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbFN0b3JhZ2UuY3BwCmluZGV4IDk1OTU3MjQ4N2U5OTkzOTFmZTVjMGEzYTczZDdk
ZjU1ZjI2Yzg5ZWUuLmQ4NmZkODFjNGMwNmIxN2EzNmIzN2JlZjYzYzZjOWJhMTI0Mjg4MTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3Jh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0
b3JhZ2UuY3BwCkBAIC0zNiw2ICszNiwxMCBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2lu
Y2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHR5cGVkZWYgSGFzaE1hcDxQcm90ZWN0aW9uU3BhY2UsIENyZWRlbnRpYWw+IFByb3RlY3Rpb25T
cGFjZVRvQ3JlZGVudGlhbE1hcDsKQEAgLTkzLDYgKzk3LDExIEBAIHZvaWQgQ3JlZGVudGlhbFN0
b3JhZ2U6OnNldChjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsLCBjb25zdCBQcm90ZWN0aW9u
U3BhY2UmCiAgICAgQVNTRVJUKHByb3RlY3Rpb25TcGFjZS5pc1Byb3h5KCkgfHwgdXJsLmlzVmFs
aWQoKSk7CiAKICAgICBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXAoKS5zZXQocHJvdGVj
dGlvblNwYWNlLCBjcmVkZW50aWFsKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzYXZlVG9Q
ZXJzaXN0ZW50U3RvcmFnZShwcm90ZWN0aW9uU3BhY2UsIGNyZWRlbnRpYWwpOworI2VuZGlmCisK
ICAgICBpZiAoIXByb3RlY3Rpb25TcGFjZS5pc1Byb3h5KCkpIHsKICAgICAgICAgb3JpZ2luc1dp
dGhDcmVkZW50aWFscygpLmFkZChvcmlnaW5TdHJpbmdGcm9tVVJMKHVybCkpOwogCkBAIC0xNjMs
NiArMTcyLDE1IEBAIENyZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChjb25zdCBVUkwm
IHVybCkKICAgICByZXR1cm4gcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuZ2V0KGl0
ZXItPnZhbHVlKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgQ3JlZGVudGlhbFN0b3Jh
Z2U6OmNsZWFyQ3JlZGVudGlhbHMoKQoreworICAgIHBhdGhUb0RlZmF1bHRQcm90ZWN0aW9uU3Bh
Y2VNYXAoKS5jbGVhcigpOworICAgIG9yaWdpbnNXaXRoQ3JlZGVudGlhbHMoKS5jbGVhcigpOwor
ICAgIHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLmNsZWFyKCk7Cit9CisjZW5kaWYK
Kwogdm9pZCBDcmVkZW50aWFsU3RvcmFnZTo6c2V0UHJpdmF0ZU1vZGUoYm9vbCBtb2RlKQogewog
ICAgIGlmICghbW9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQ3JlZGVudGlhbFN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbFN0b3JhZ2UuaAppbmRleCBiM2JkMWZkNzgzOTJhMjY3ZTMwOWZmY2NjZjQ3YTIx
YWUwNmU4OTllLi4zYzhjNzQ4NzUyMDIwNTlmMTcxZDFkMjRhYmNhZDNmYzk1ZDg1NTQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFn
ZS5oCkBAIC00Miw2ICs0MiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gT1MgcGVyc2lzdGVudCBzdG9y
YWdlLgogICAgIHN0YXRpYyBDcmVkZW50aWFsIGdldEZyb21QZXJzaXN0ZW50U3RvcmFnZShjb25z
dCBQcm90ZWN0aW9uU3BhY2UmKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdGF0aWMgdm9p
ZCBzYXZlVG9QZXJzaXN0ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBjb25zdCBD
cmVkZW50aWFsJik7CisgICAgc3RhdGljIHZvaWQgY2xlYXJDcmVkZW50aWFscygpOworI2VuZGlm
CisKICAgICAvLyBUaGVzZSBtZXRob2RzIHdvcmsgZm9yIGF1dGhlbnRpY2F0aW9uIHNjaGVtZXMg
dGhhdCBzdXBwb3J0IHNlbmRpbmcgY3JlZGVudGlhbHMgd2l0aG91dCB3YWl0aW5nIGZvciBhIHJl
cXVlc3QuIEUuZy4sIGZvciBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uIHNjaGVtZQogICAgIC8v
IGEgY2xpZW50IHNob3VsZCBhc3N1bWUgdGhhdCBhbGwgcGF0aHMgYXQgb3IgZGVlcGVyIHRoYW4g
dGhlIGRlcHRoIG9mIGEga25vd24gcHJvdGVjdGVkIHJlc291cmNlIHNoYXJlIGFyZSB3aXRoaW4g
dGhlIHNhbWUgcHJvdGVjdGlvbiBzcGFjZS4KICAgICBzdGF0aWMgYm9vbCBzZXQoY29uc3QgQ3Jl
ZGVudGlhbCYsIGNvbnN0IFVSTCYpOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIFVSTCBjb3JyZXNw
b25kcyB0byBhIGtub3duIHByb3RlY3Rpb24gc3BhY2UsIHNvIGNyZWRlbnRpYWxzIGNvdWxkIGJl
IHVwZGF0ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05l
dHdvcmtTdGF0ZU5vdGlmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05l
dHdvcmtTdGF0ZU5vdGlmaWVyLmgKaW5kZXggMzMyNDdjOTdmYzkwMjkxZTE2NWMwNDVhMzZhNmY2
MzFhYWJmMzlhOS4uZjlmNjFkNWNlMzMxYzhhZTQ2OTIwMTA0NmRkYzE4MDcyZGRhNDkyZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3Rp
Zmllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRl
Tm90aWZpZXIuaApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTYyLDYgKzYyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IGFkZE5ldHdvcmtTdGF0ZUNoYW5nZUxpc3RlbmVyKE5ldHdvcmtTdGF0ZUNoYW5nZUxpc3RlbmVy
KTsKIAogICAgIGJvb2wgb25MaW5lKCkgY29uc3QgeyByZXR1cm4gbV9pc09uTGluZTsgfQorICAg
IAorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIHNldElzT25MaW5lKGJvb2wpOworI2VuZGlm
CiAKICNpZiBQTEFURk9STShCTEFDS0JFUlJZKQogICAgIHZvaWQgbmV0d29ya1N0YXRlQ2hhbmdl
KGJvb2wgb25saW5lKTsKQEAgLTc0LDcgKzc4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGlm
eU5ldHdvcmtTdGF0ZUNoYW5nZSgpOwogICAgIHZvaWQgdXBkYXRlU3RhdGUoKTsKIAotI2lmIFBM
QVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgdm9p
ZCBuZXR3b3JrU3RhdGVDaGFuZ2VUaW1lckZpcmVkKFRpbWVyPE5ldHdvcmtTdGF0ZU5vdGlmaWVy
PiopOwogCiAgICAgc3RhdGljIHZvaWQgZHluYW1pY1N0b3JlQ2FsbGJhY2soU0NEeW5hbWljU3Rv
cmVSZWYsIENGQXJyYXlSZWYgY2hhbmdlZEtleXMsIHZvaWQgKmluZm8pOyAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKaW5kZXggMGM4
NTJkYzJkYzZjNTBjYWE2YmI1ZmNhN2EyZTA1OWEyMTdiM2QzYS4uOTNlMGY5YTRjYjBjMzA4MTJm
YzkwMjMyZjJmMjhiZDE0NmZlOTdmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKQEAgLTM1LDYgKzM1LDEwIEBACiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNp
ZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIHNob3VsZEZvcmNlQ29udGVudFNuaWZm
aW5nOwpAQCAtNDIsNyArNDYsMTEgQEAgc3RhdGljIGJvb2wgc2hvdWxkRm9yY2VDb250ZW50U25p
ZmZpbmc7CiB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZXNvdXJjZUhhbmRsZTo6QnVp
bHRpbkNvbnN0cnVjdG9yPiBCdWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcDsKIHN0
YXRpYyBCdWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCYgYnVpbHRpblJlc291cmNl
SGFuZGxlQ29uc3RydWN0b3JNYXAoKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBBU1NFUlQo
V2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworI2Vsc2UKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworI2VuZGlmCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChCdWlsdGluUmVzb3Vy
Y2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCwgbWFwLCAoKSk7CiAgICAgcmV0dXJuIG1hcDsKIH0KQEAg
LTE1MSwyMyArMTU5LDIzIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudChSZXNvdXJj
ZUhhbmRsZUNsaWVudCogY2xpZW50KQogLy8gUmVzb3VyY2VIYW5kbGUgbmV2ZXIgdXNlcyBhc3lu
YyBjbGllbnQgY2FsbHMgb24gdGhlc2UgcGxhdGZvcm1zIHlldC4KIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCiB7Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKQogewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCkKIHsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiAj
aWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sKQog
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAj
ZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKaW5kZXggZWY0MjE5MzQzNTQ3OWU3YjlkY2FiNDQ5
M2E5ZDRjOGQ1MDgyNjJmMS4uMGVkODI4OTkzYTFkYjY5MjZhNDFmYjJjMGU1YTFlNTllNGI2MjNm
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
cXVlc3RCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuY3BwCkBAIC0zOCw2ICszOCwxMCBAQCBkb3VibGUgUmVzb3VyY2VSZXF1
ZXN0QmFzZTo6c19kZWZhdWx0VGltZW91dEludGVydmFsID0gSU5UX01BWDsKIGRvdWJsZSBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpzX2RlZmF1bHRUaW1lb3V0SW50ZXJ2YWwgPSAwOwogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShJT1MpCitib29sIFJlc291cmNlUmVxdWVzdEJhc2U6OnNfZGVmYXVsdEFs
bG93Q29va2llcyA9IHRydWU7CisjZW5kaWYKKwogaW5saW5lIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YXNSZXNvdXJjZVJlcXVlc3QoKSBjb25zdAogewogICAg
IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgUmVzb3VyY2VSZXF1ZXN0Kj4odGhpcyk7CkBAIC01
MjgsNCArNTMyLDE2IEBAIHVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25D
b3VudFBlckhvc3QoKQogfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIFJlc291
cmNlUmVxdWVzdEJhc2U6OnNldERlZmF1bHRBbGxvd0Nvb2tpZXMoYm9vbCBhbGxvd0Nvb2tpZXMp
Cit7CisgICAgc19kZWZhdWx0QWxsb3dDb29raWVzID0gYWxsb3dDb29raWVzOworfQorCitib29s
IFJlc291cmNlUmVxdWVzdEJhc2U6OmRlZmF1bHRBbGxvd0Nvb2tpZXMoKQoreworICAgIHJldHVy
biBzX2RlZmF1bHRBbGxvd0Nvb2tpZXM7Cit9CisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAppbmRleCAx
NDA1N2NiMjdmNGY4MjNlNTlhYmM0MmE4ODBmODQwMWM1ZTVhMGI5Li5hYTA2MDE5NTNkODA4NDU1
ZDQ0YjcwNWI2OWZiYWI1MGYwMGE2MDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaApAQCAtMTQyLDYgKzE0MiwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBkb3VibGUgZGVmYXVsdFRpbWVv
dXRJbnRlcnZhbCgpOyAvLyBNYXkgcmV0dXJuIDAgd2hlbiB1c2luZyBwbGF0Zm9ybSBkZWZhdWx0
LgogICAgICAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0VGltZW91dEludGVydmFsKGRvdWJsZSk7
CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHN0YXRpYyBib29sIGRlZmF1bHRBbGxvd0Nv
b2tpZXMoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdEFsbG93Q29va2llcyhib29s
KTsKKyNlbmRpZgorCiAgICAgICAgIHN0YXRpYyBib29sIGNvbXBhcmUoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0x
NjMsNyArMTY4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9jYWNo
ZVBvbGljeShwb2xpY3kpCiAgICAgICAgICAgICAsIG1fdGltZW91dEludGVydmFsKHNfZGVmYXVs
dFRpbWVvdXRJbnRlcnZhbCkKICAgICAgICAgICAgICwgbV9odHRwTWV0aG9kKEFTQ0lJTGl0ZXJh
bCgiR0VUIikpCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgICAgICwgbV9hbGxvd0Nvb2tp
ZXModHJ1ZSkKKyNlbHNlCisgICAgICAgICAgICAsIG1fYWxsb3dDb29raWVzKFJlc291cmNlUmVx
dWVzdEJhc2U6OmRlZmF1bHRBbGxvd0Nvb2tpZXMoKSkKKyNlbmRpZgogICAgICAgICAgICAgLCBt
X3Jlc291cmNlUmVxdWVzdFVwZGF0ZWQodHJ1ZSkKICAgICAgICAgICAgICwgbV9wbGF0Zm9ybVJl
cXVlc3RVcGRhdGVkKGZhbHNlKQogICAgICAgICAgICAgLCBtX3Jlc291cmNlUmVxdWVzdEJvZHlV
cGRhdGVkKHRydWUpCkBAIC0yMDQsNiArMjEzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGFzUmVzb3VyY2VSZXF1ZXN0KCkgY29uc3Q7CiAK
ICAgICAgICAgc3RhdGljIGRvdWJsZSBzX2RlZmF1bHRUaW1lb3V0SW50ZXJ2YWw7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgICAgICBzdGF0aWMgYm9vbCBzX2RlZmF1bHRBbGxvd0Nvb2tpZXM7Cisj
ZW5kaWYKICAgICB9OwogCiAgICAgYm9vbCBlcXVhbElnbm9yaW5nSGVhZGVyRmllbGRzKGNvbnN0
IFJlc291cmNlUmVxdWVzdEJhc2UmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJik7CkBAIC0y
MzAsNyArMjQyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAgICAgCiAgICAgdW5z
aWduZWQgaW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpOwotCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgaW5pdGlhbGl6ZUhUVFBDb25uZWN0aW9uU2V0dGlu
Z3NPblN0YXJ0dXAoKTsKKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gUmVzb3VyY2VSZXF1ZXN0QmFzZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL0NyZWRlbnRpYWxTdG9yYWdlQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9DcmVkZW50aWFsU3RvcmFnZUNGTmV0LmNwcAppbmRleCBj
MzRmNmY2NjVjYTc0NTIzMjk5YjkxYzE3NDE5MzBlNjcxNGJmY2I5Li5jNzI1MmMzODU0MDNlNjVj
NTUwN2U0OWU1MjVkZDMwM2FmMWIzY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL0NyZWRlbnRpYWxTdG9yYWdlQ0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ3JlZGVudGlhbFN0b3JhZ2VDRk5ldC5jcHAKQEAg
LTM5LDYgKzM5LDEwIEBACiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5
c3RlbUludGVyZmFjZS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8
Q0ZOZXR3b3JrL0NGVVJMQ3JlZGVudGlhbFN0b3JhZ2UuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIENyZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldEZyb21QZXJzaXN0
ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKQEAgLTQ4
LDYgKzUyLDIzIEBAIENyZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldEZyb21QZXJzaXN0
ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByCiAgICAgcmV0dXJuIGNvcmUoY3Jl
ZGVudGlhbENGLmdldCgpKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgQ3JlZGVudGlh
bFN0b3JhZ2U6OnNhdmVUb1BlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYg
cHJvdGVjdGlvblNwYWNlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQoreworICAgIFJl
dGFpblB0cjxDRlVSTENyZWRlbnRpYWxTdG9yYWdlUmVmPiBzdG9yYWdlQ0YgPSBhZG9wdENGKENG
VVJMQ3JlZGVudGlhbFN0b3JhZ2VDcmVhdGUoMCkpOworICAgIFJldGFpblB0cjxDRlVSTFByb3Rl
Y3Rpb25TcGFjZVJlZj4gcHJvdGVjdGlvblNwYWNlQ0YgPSBhZG9wdENGKGNyZWF0ZUNGKHByb3Rl
Y3Rpb25TcGFjZSkpOworCisgICAgaWYgKGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVk
ZW50aWFsUGVyc2lzdGVuY2VOb25lKSB7CisgICAgICAgIENyZWRlbnRpYWwgc2Vzc2lvbkNyZWRl
bnRpYWwoY3JlZGVudGlhbCwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbik7CisgICAg
ICAgIFJldGFpblB0cjxDRlVSTENyZWRlbnRpYWxSZWY+IHNlc3Npb25DcmVkZW50aWFsQ0YgPSBh
ZG9wdENGKGNyZWF0ZUNGKHNlc3Npb25DcmVkZW50aWFsKSk7CisgICAgICAgIENGVVJMQ3JlZGVu
dGlhbFN0b3JhZ2VTZXREZWZhdWx0Q3JlZGVudGlhbEZvclByb3RlY3Rpb25TcGFjZShzdG9yYWdl
Q0YuZ2V0KCksIHNlc3Npb25DcmVkZW50aWFsQ0YuZ2V0KCksIHByb3RlY3Rpb25TcGFjZUNGLmdl
dCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxDcmVkZW50aWFsUmVm
PiBjcmVkZW50aWFsQ0YgPSBhZG9wdENGKGNyZWF0ZUNGKGNyZWRlbnRpYWwpKTsKKyAgICAgICAg
Q0ZVUkxDcmVkZW50aWFsU3RvcmFnZVNldERlZmF1bHRDcmVkZW50aWFsRm9yUHJvdGVjdGlvblNw
YWNlKHN0b3JhZ2VDRi5nZXQoKSwgY3JlZGVudGlhbENGLmdldCgpLCBwcm90ZWN0aW9uU3BhY2VD
Ri5nZXQoKSk7CisgICAgfQorfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIFVTRShDRk5FVFdPUkspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL0ROU0NGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvRE5TQ0ZOZXQuY3BwCmluZGV4IDA3NWFhNmJjYTVlMjU2NDdhZWJlOWYxMmQ2OWQ2
YWI2YzgzZTQ2YzMuLmUzZjFjMmI5MTJjOGVjNWJkZGI2ODE4ZGU0YTc1MmY2YjE5NTUxYjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRE5TQ0ZOZXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRE5TQ0ZOZXQuY3BwCkBA
IC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8
Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgorI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4pCiAjaW5j
bHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5o
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Qcm94eVNl
cnZlckNGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUHJveHlT
ZXJ2ZXJDRk5ldC5jcHAKaW5kZXggNzExMThkMmVlYjFmZjk1MmExNTkyMzBjMGJjNDM4NjJkOTQ0
YTZmYS4uOWYxNDcxMjY5N2U0OWViNjU1ZDY4YTY4ZjJkNTc0M2JjMTkyZTY2OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Qcm94eVNlcnZlckNGTmV0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Byb3h5U2VydmVyQ0ZO
ZXQuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKFdJTikKKyNpZiBQTEFU
Rk9STShJT1MpIHx8IFBMQVRGT1JNKFdJTikKICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZOZXR3b3Jr
Lmg+CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZVJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VSZXF1ZXN0LmgKaW5kZXggNmNmMjZhYjRjM2VmODRhMDRjZWNlOGZhZGU5OGQ3
ZDhjYTIzNWQ3Mi4uM2I4OWYzYjQ0NjZkYzA1YjU5OGJkZDhkNjEyMWRjODM4YzViNmYzNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVl
c3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVx
dWVzdC5oCkBAIC00MywyMiArNDMsMzQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1Ymxp
YzoKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKSAKICAgICAgICAg
ICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZShVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBVc2VQ
cm90b2NvbENhY2hlUG9saWN5KQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgICwgbV9t
YWluUmVzb3VyY2VSZXF1ZXN0KGZhbHNlKQorI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQog
CiAgICAgICAgIFJlc291cmNlUmVxdWVzdChjb25zdCBVUkwmIHVybCkgCiAgICAgICAgICAgICA6
IFJlc291cmNlUmVxdWVzdEJhc2UodXJsLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorI2lmIFBM
QVRGT1JNKElPUykKKyAgICAgICAgICAgICwgbV9tYWluUmVzb3VyY2VSZXF1ZXN0KGZhbHNlKQor
I2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIFJlc291cmNlUmVxdWVzdChj
b25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgUmVzb3VyY2VSZXF1ZXN0Q2Fj
aGVQb2xpY3kgcG9saWN5ID0gVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkgCiAgICAgICAgICAgICA6
IFJlc291cmNlUmVxdWVzdEJhc2UodXJsLCBwb2xpY3kpCisjaWYgUExBVEZPUk0oSU9TKQorICAg
ICAgICAgICAgLCBtX21haW5SZXNvdXJjZVJlcXVlc3QoZmFsc2UpCisjZW5kaWYKICAgICAgICAg
ewogICAgICAgICAgICAgc2V0SFRUUFJlZmVycmVyKHJlZmVycmVyKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KCkKICAgICAgICAgICAgIDogUmVzb3VyY2VS
ZXF1ZXN0QmFzZShVUkwoKSwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgICAgICAsIG1fbWFpblJlc291cmNlUmVxdWVzdChmYWxzZSkKKyNlbmRpZgog
ICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC03MCw2ICs4Miw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICBSZXNvdXJjZVJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmIGNm
UmVxdWVzdCkKICAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSgpCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgICAgICAgICAgLCBtX21haW5SZXNvdXJjZVJlcXVlc3QoZmFsc2UpCisjZW5k
aWYKICAgICAgICAgICAgICwgbV9jZlJlcXVlc3QoY2ZSZXF1ZXN0KQogICAgICAgICB7CiAjaWYg
UExBVEZPUk0oTUFDKQpAQCAtNzksNiArOTQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZWxz
ZQogICAgICAgICBSZXNvdXJjZVJlcXVlc3QoTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3QpCiAgICAg
ICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAg
ICAgICAgICwgbV9tYWluUmVzb3VyY2VSZXF1ZXN0KGZhbHNlKQorI2VuZGlmCiAgICAgICAgICAg
ICAsIG1fbnNSZXF1ZXN0KG5zUmVxdWVzdCkKICAgICAgICAgewogICAgICAgICB9CkBAIC0xMDks
NiArMTI3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGJvb2wgdXNl
UXVpY2tMb29rUmVzb3VyY2VDYWNoaW5nUXVpcmtzKCk7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JN
KElPUykKKyAgICAgICAgdm9pZCBzZXRNYWluUmVzb3VyY2VSZXF1ZXN0KGJvb2wgaXNNYWluUmVz
b3VyY2VSZXF1ZXN0KSBjb25zdCB7IG1fbWFpblJlc291cmNlUmVxdWVzdCA9IGlzTWFpblJlc291
cmNlUmVxdWVzdDsgfQorICAgICAgICBib29sIGlzTWFpblJlc291cmNlUmVxdWVzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFpblJlc291cmNlUmVxdWVzdDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgbXV0YWJsZSBib29sIG1fbWFpblJlc291cmNlUmVxdWVzdDsKKyNlbmRpZgorCiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlUmVxdWVzdEJhc2U7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0
Q0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
cXVlc3RDRk5ldC5jcHAKaW5kZXggNjhmYmJmYWY5YjI0N2ViNzFjNjNhZmNkNmQwNWRjMDdmZDk1
ZTM4NS4uNGEyNjIzZmM2NjVjOGU0YjUyY2NjMTQzYmNlNjU2YWQzOTYxODhkNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5l
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
cXVlc3RDRk5ldC5jcHAKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlICJGb3JtRGF0YVN0cmVh
bUNGTmV0LmgiCiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGVVJMUmVxdWVzdFByaXYuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPENG
TmV0d29yay9DRk5ldHdvcmtDb25uZWN0aW9uQ2FjaGVQcml2Lmg+CisjZW5kaWYKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNTAsNyArNTMsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisjaWYgUExBVEZPUk0oSU9TKQorYm9vbCBSZXNvdXJjZVJlcXVlc3Q6OnNfaHR0cFBp
cGVsaW5pbmdFbmFibGVkID0gdHJ1ZTsKKyNlbHNlCiBib29sIFJlc291cmNlUmVxdWVzdDo6c19o
dHRwUGlwZWxpbmluZ0VuYWJsZWQgPSBmYWxzZTsKKyNlbmRpZgogCiAjaWYgVVNFKENGTkVUV09S
SykKIApAQCAtMjIyLDEwICsyMjksMzMgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRl
UGxhdGZvcm1IVFRQQm9keSgpCiAjZW5kaWYKIH0KIAordm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVw
ZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRIVFRQQm9keShjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIGRlbGVnYXRlUHJvdmlkZWRSZXF1ZXN0KQoreworICAgIFJlZlB0cjxGb3JtRGF0YT4gb2xk
SFRUUEJvZHkgPSBodHRwQm9keSgpOworCisgICAgKnRoaXMgPSBkZWxlZ2F0ZVByb3ZpZGVkUmVx
dWVzdDsKKyAgICBzZXRIVFRQQm9keShvbGRIVFRQQm9keS5yZWxlYXNlKCkpOworfQorCiB2b2lk
IFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVSZXNvdXJjZVJlcXVlc3QoKQogewogICAgIGlmICgh
bV9jZlJlcXVlc3QpIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIC8vIDxyZGFyOi8vcHJv
YmxlbS85OTEzNTI2PgorICAgICAgICAvLyBUaGlzIGlzIGEgaGFjayB0byBtaW1pYyB0aGUgc3Vi
dGxlIGJlaGF2aW91ciBvZiB0aGUgRm91bmRhdGlvbiBiYXNlZCBSZXNvdXJjZVJlcXVlc3QKKyAg
ICAgICAgLy8gY29kZS4gVGhhdCBjb2RlIGRvZXMgbm90IHJlc2V0IG1faHR0cE1ldGhvZCBpZiB0
aGUgTlNVUkxSZXF1ZXN0IGlzIG5pbC4gSSBmaWxlZAorICAgICAgICAvLyA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzM2PiB0byB0cmFjayB0aGF0LgorICAgICAg
ICAvLyBBbm90aGVyIHJlbGF0ZWQgYnVnIGlzIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjYzNTA+LiBGaXhpbmcgdGhhdAorICAgICAgICAvLyB3b3VsZCwgaWRlYWxs
eSwgYWxsb3cgdXMgdG8gbm90IGhhdmUgdGhpcyBoYWNrLiBCdXQgdW5mb3J0dW5hdGVseSB0aGF0
IGNhdXNlZCBsYXlvdXQgdGVzdAorICAgICAgICAvLyBmYWlsdXJlcy4KKyAgICAgICAgLy8gUmVt
b3ZhbCBvZiB0aGlzIGhhY2sgaXMgdHJhY2tlZCBieSA8cmRhcjovL3Byb2JsZW0vOTk3MDQ5OT4u
CisKKyAgICAgICAgU3RyaW5nIGh0dHBNZXRob2QgPSBtX2h0dHBNZXRob2Q7CiAgICAgICAgICp0
aGlzID0gUmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgICAgIG1faHR0cE1ldGhvZCA9IGh0dHBNZXRo
b2Q7CisjZWxzZQorICAgICAgICAqdGhpcyA9IFJlc291cmNlUmVxdWVzdCgpOworI2VuZGlmCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMwNyw4ICszMzcsMTAgQEAgdm9pZCBSZXNvdXJj
ZVJlcXVlc3Q6OnNldFN0b3JhZ2VTZXNzaW9uKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFn
ZVNlc3Npb24pCiAjaWYgUExBVEZPUk0oTUFDKQogdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmFwcGx5
V2ViQXJjaGl2ZUhhY2tGb3JNYWlsKCkKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIEhh
Y2sgYmVjYXVzZSBNYWlsIGNoZWNrcyBmb3IgdGhpcyBwcm9wZXJ0eSB0byBkZXRlY3QgZGF0YSAv
IGFyY2hpdmUgbG9hZHMKICAgICBfQ0ZVUkxSZXF1ZXN0U2V0UHJvdG9jb2xQcm9wZXJ0eShjZlVS
TFJlcXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9keSksIENGU1RSKCJXZWJEYXRhUmVxdWVzdCIpLCBD
RlNUUigiIikpOworI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMzgzLDUgKzQxNSwyMSBAQCB1bnNp
Z25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCkKIAogICAg
IHJldHVybiBtYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3Q7CiB9CisgICAgCisjaWYg
UExBVEZPUk0oSU9TKQordm9pZCBpbml0aWFsaXplSFRUUENvbm5lY3Rpb25TZXR0aW5nc09uU3Rh
cnR1cCgpCit7CisgICAgLy8gVGhpcyBuZWVkIHRvIGJlIGNhbGxlZCBmcm9tIFdlYktpdEluaXRp
YWxpemUgc28gdGhlIGNhbGxzIGhhcHBlbiBlYXJseSBlbm91Z2gsIGJlZm9yZSBhbnkgcmVxdWVz
dHMgYXJlIG1hZGUuIDxyZGFyOi8vcHJvYmxlbS85NjkxODcxPgorICAgIC8vIERlc2t0b3AgZG9l
c24ndCBoYXZlIGVhcmx5IGluaXRpYWxpemF0aW9uIHNvIGl0IGlzIG5vdCBjbGVhciBob3cgdGhp
cyBzaG91bGQgYmUgZG9uZSB0aGVyZS4gVGhlIENGTmV0d29yayBTUEkgcHJvYmFibHkKKyAgICAv
LyBuZWVkcyB0byBiZWNvbWUgbW9yZSBmb3JnaXZpbmcuCisgICAgLy8gV2UgY2FuJ3QgcmVhZCBz
ZXR0aW5ncyBoZXJlIGFzIHRoaXMgaXMgY2FsbGVkIHRvbyBlYXJseSBmb3IgdGhhdC4gQWxsIHZh
bHVlcyBuZWVkIHRvIGJlIGNvbnN0YW50cy4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcHJl
ZmVycmVkQ29ubmVjdGlvbkNvdW50ID0gNjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFz
dExhbmVDb25uZWN0aW9uQ291bnQgPSAxOworICAgIHdrSW5pdGlhbGl6ZU1heGltdW1IVFRQQ29u
bmVjdGlvbkNvdW50UGVySG9zdChwcmVmZXJyZWRDb25uZWN0aW9uQ291bnQpOworICAgIHdrU2V0
SFRUUFBpcGVsaW5pbmdNYXhpbXVtUHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0
KTsKKyAgICB3a1NldEhUVFBQaXBlbGluaW5nTWluaW11bUZhc3RMYW5lUHJpb3JpdHkoUmVzb3Vy
Y2VMb2FkUHJpb3JpdHlNZWRpdW0pOworICAgIF9DRk5ldHdvcmtIVFRQQ29ubmVjdGlvbkNhY2hl
U2V0TGltaXQoa0hUVFBOdW1GYXN0TGFuZXMsIGZhc3RMYW5lQ29ubmVjdGlvbkNvdW50KTsKK30K
KyNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQu
Y3BwCmluZGV4IGZjMmQyOGQ3MjQxODNmNTU0YWVjNzcyNzdlNDFhMzIwNWE5MDI5ZmYuLmI1ZWFj
NDVhN2E2YmJkYzgwOGE4ODQxMDgwMjFmMTQzYzdkNzFhNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxl
Q0ZOZXQuY3BwCkBAIC00MSw2ICs0MSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisj
aW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgorI2VuZGlmCisKICNpZiBQTEFURk9STShX
SU4pCiAjaW5jbHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NG
TmV0d29yay5oPgpAQCAtNTcxLDcgKzU3NSw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpy
ZXBvcnRFcnJvclRvQ2xpZW50KENGRXJyb3JSZWYgZXJyb3IpCiAgICAgQ0ZJbmRleCBlcnJvckNv
ZGUgPSBDRkVycm9yR2V0Q29kZShlcnJvcik7CiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOwogCi0j
aWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAog
I2lmIENPTVBJTEVSKENMQU5HKQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL05ldHdvcmtTdGF0ZU5v
dGlmaWVySU9TLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL05ldHdv
cmtTdGF0ZU5vdGlmaWVySU9TLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZWQ2YTA4Nzg1Y2VlOGRkZjQ3MDcw
ZGJlZjI2YTYxYzQ3YjgyZDM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9pb3MvTmV0d29ya1N0YXRlTm90aWZpZXJJT1MuY3BwCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTdGF0ZU5vdGlmaWVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworTmV0d29ya1N0YXRlTm90aWZpZXI6Ok5ldHdvcmtTdGF0ZU5v
dGlmaWVyKCkKKyAgICA6IG1faXNPbkxpbmUoZmFsc2UpCit7Cit9CisKK3ZvaWQgTmV0d29ya1N0
YXRlTm90aWZpZXI6OnNldElzT25MaW5lKGJvb2wgaXNPbkxpbmUpCit7CisgICAgaWYgKG1faXNP
bkxpbmUgPT0gaXNPbkxpbmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzT25MaW5lID0gaXNP
bkxpbmU7CisgICAgbm90aWZ5TmV0d29ya1N0YXRlQ2hhbmdlKCk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9vay5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YmUyNzU2ZGY0NTE4M2EwOTcxNGY5ZTlkZjhlYjZmZTRhMjI4YjkwZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9vay5oCkBAIC0w
LDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBRdWlja0xvb2tfaAorI2RlZmluZSBR
dWlja0xvb2tfaAorCisjaWYgVVNFKFFVSUNLX0xPT0spCisKKyNpbXBvcnQgIlJlc291cmNlUmVx
dWVzdC5oIgorI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9QYXNz
T3duUHRyLmg+CisKKyNpZmRlZiBfX09CSkNfXworQGNsYXNzIE5TRGF0YTsKK0BjbGFzcyBOU0Rp
Y3Rpb25hcnk7CitAY2xhc3MgTlNGaWxlSGFuZGxlOworQGNsYXNzIE5TU2V0OworQGNsYXNzIE5T
U3RyaW5nOworQGNsYXNzIE5TVVJMOworQGNsYXNzIE5TVVJMQ29ubmVjdGlvbjsKK0BjbGFzcyBO
U1VSTFJlc3BvbnNlOworI2Vsc2UKK2NsYXNzIE5TRGF0YTsKK2NsYXNzIE5TRGljdGlvbmFyeTsK
K2NsYXNzIE5TRmlsZUhhbmRsZTsKK2NsYXNzIE5TU2V0OworY2xhc3MgTlNTdHJpbmc7CitjbGFz
cyBOU1VSTDsKK2NsYXNzIE5TVVJMQ29ubmVjdGlvbjsKK2NsYXNzIE5TVVJMUmVzcG9uc2U7Cisj
ZW5kaWYKKworI2lmIFVTRShDRk5FVFdPUkspCit0eXBlZGVmIHN0cnVjdCBfQ0ZVUkxSZXNwb25z
ZSogQ0ZVUkxSZXNwb25zZVJlZjsKK3R5cGVkZWYgc3RydWN0IF9DRlVSTENvbm5lY3Rpb24qIENG
VVJMQ29ubmVjdGlvblJlZjsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFJlc291cmNlSGFuZGxlOworY2xhc3MgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOworCitDbGFzcyBRTFByZXZpZXdDb252ZXJ0ZXJDbGFzcygpOworTlNT
dHJpbmcgKlFMVHlwZUNvcHlCZXN0TWltZVR5cGVGb3JGaWxlTmFtZUFuZE1pbWVUeXBlKE5TU3Ry
aW5nICpmaWxlTmFtZSwgTlNTdHJpbmcgKm1pbWVUeXBlKTsKK05TU3RyaW5nICpRTFR5cGVDb3B5
QmVzdE1pbWVUeXBlRm9yVVJMQW5kTWltZVR5cGUoTlNVUkwgKiwgTlNTdHJpbmcgKm1pbWVUeXBl
KTsKKworTlNTZXQgKlFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpOworCisvLyBV
c2VkIGZvciBzZXR0aW5nIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgc2F2ZWQgUUwgY29udGVudAor
TlNEaWN0aW9uYXJ5ICpRTEZpbGVBdHRyaWJ1dGVzKCk7CitOU0RpY3Rpb25hcnkgKlFMRGlyZWN0
b3J5QXR0cmlidXRlcygpOworCit2b2lkIGFkZFFMUHJldmlld0NvbnZlcnRlcldpdGhGaWxlRm9y
VVJMKE5TVVJMICosIGlkIGNvbnZlcnRlciwgTlNTdHJpbmcgKmZpbGVOYW1lKTsKK05TU3RyaW5n
ICpxbFByZXZpZXdDb252ZXJ0ZXJGaWxlTmFtZUZvclVSTChOU1VSTCAqKTsKK05TU3RyaW5nICpx
bFByZXZpZXdDb252ZXJ0ZXJVVElGb3JVUkwoTlNVUkwgKik7Cit2b2lkIHJlbW92ZVFMUHJldmll
d0NvbnZlcnRlckZvclVSTChOU1VSTCAqKTsKKworUGFzc093blB0cjxSZXNvdXJjZVJlcXVlc3Q+
IHJlZ2lzdGVyUUxQcmV2aWV3Q29udmVydGVySWZOZWVkZWQoTlNVUkwgKiwgTlNTdHJpbmcgKm1p
bWVUeXBlLCBOU0RhdGEgKik7CisKK2NvbnN0IFVSTCBzYWZlUUxVUkxGb3JEb2N1bWVudFVSTEFu
ZFJlc291cmNlVVJMKGNvbnN0IFVSTCYgZG9jdW1lbnRVUkwsIGNvbnN0IFN0cmluZyYgcmVzb3Vy
Y2VVUkwpOworCitjb25zdCBjaGFyKiBRTFByZXZpZXdQcm90b2NvbCgpOworCisKK2NsYXNzIFF1
aWNrTG9va0hhbmRsZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUXVpY2tMb29rSGFuZGxl
KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxRdWlja0xvb2tIYW5kbGU+IGNyZWF0
ZShSZXNvdXJjZUhhbmRsZSosIE5TVVJMQ29ubmVjdGlvbiAqLCBOU1VSTFJlc3BvbnNlICosIGlk
IGRlbGVnYXRlKTsKKyNpZiBVU0UoQ0ZORVRXT1JLKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFF1
aWNrTG9va0hhbmRsZT4gY3JlYXRlKFJlc291cmNlSGFuZGxlKiwgU3luY2hyb25vdXNSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKiwgQ0ZVUkxSZXNwb25zZVJlZik7CisjZW5k
aWYKKyAgICB+UXVpY2tMb29rSGFuZGxlKCk7CisKKyAgICBib29sIGRpZFJlY2VpdmVEYXRhQXJy
YXkoQ0ZBcnJheVJlZik7CisgICAgYm9vbCBkaWRSZWNlaXZlRGF0YShDRkRhdGFSZWYpOworICAg
IGJvb2wgZGlkRmluaXNoTG9hZGluZygpOworICAgIHZvaWQgZGlkRmFpbCgpOworCisgICAgTlNV
UkxSZXNwb25zZSAqbnNSZXNwb25zZSgpOworI2lmIFVTRShDRk5FVFdPUkspCisgICAgQ0ZVUkxS
ZXNwb25zZVJlZiBjZlJlc3BvbnNlKCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBRdWlja0xv
b2tIYW5kbGUoUmVzb3VyY2VIYW5kbGUqLCBOU1VSTENvbm5lY3Rpb24gKiwgTlNVUkxSZXNwb25z
ZSAqLCBpZCBkZWxlZ2F0ZSk7CisjaWYgVVNFKENGTkVUV09SSykKKyAgICBRdWlja0xvb2tIYW5k
bGUoUmVzb3VyY2VIYW5kbGUqLCBDRlVSTFJlc3BvbnNlUmVmKTsKKyNlbmRpZgorCisgICAgUmVz
b3VyY2VIYW5kbGUqIG1faGFuZGxlOworICAgIFJldGFpblB0cjxpZD4gbV9jb252ZXJ0ZXI7Cisg
ICAgUmV0YWluUHRyPGlkPiBtX2RlbGVnYXRlOworICAgIGJvb2wgbV9maW5pc2hlZExvYWRpbmdE
YXRhSW50b0NvbnZlcnRlcjsKKyAgICBSZXRhaW5QdHI8TlNGaWxlSGFuZGxlICo+IG1fcXVpY2ts
b29rRmlsZUhhbmRsZTsKKyAgICBOU1VSTFJlc3BvbnNlICptX25zUmVzcG9uc2U7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoUVVJQ0tfTE9PSykKKworI2Vu
ZGlmIC8vIFF1aWNrTG9va19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2lvcy9RdWlja0xvb2subW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2lvcy9RdWlja0xvb2subW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2U3NjkwOTExZTE3ZDIwMDMxZDg5N2UxOWU2
NmE0ZDRhZDY1ZWZkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvaW9zL1F1aWNrTG9vay5tbQpAQCAtMCwwICsxLDQ2NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUXVpY2tMb29rLmgiCisKKyNpZiBVU0UoUVVJ
Q0tfTE9PSykKKworI2ltcG9ydCAiRmlsZVN5c3RlbUlPUy5oIgorI2ltcG9ydCAiTG9nZ2luZy5o
IgorI2ltcG9ydCAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrc0lPUy5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgIlN5bmNocm9u
b3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV2Vi
Q29yZVVSTFJlc3BvbnNlSU9TLmgiCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
KyNpbXBvcnQgPEZvdW5kYXRpb24vTlNGaWxlTWFuYWdlcl9OU1VSTEV4dHJhcy5oPgorI2ltcG9y
dCA8UXVpY2tMb29rL1FMUHJldmlld0NvbnZlcnRlci5oPgorI2ltcG9ydCA8UXVpY2tMb29rL1F1
aWNrTG9va1ByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9y
dCA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL1RocmVhZGluZy5oPgorI2ltcG9y
dCA8d3RmL1ZlY3Rvci5oPgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBV
U0UoQ0ZORVRXT1JLKQorI2ltcG9ydCA8Q0ZOZXR3b3JrL0NGVVJMQ29ubmVjdGlvbi5oPgorCitA
aW50ZXJmYWNlIE5TVVJMUmVzcG9uc2UgKFF1aWNrTG9va0RldGFpbHMpCisrKE5TVVJMUmVzcG9u
c2UgKilfcmVzcG9uc2VXaXRoQ0ZVUkxSZXNwb25zZTooQ0ZVUkxSZXNwb25zZVJlZilyZXNwb25z
ZTsKKy0oQ0ZVUkxSZXNwb25zZVJlZilfQ0ZVUkxSZXNwb25zZTsKK0BlbmQKKyNlbmRpZgorCitT
T0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKFF1aWNrTG9vaykKK1NPRlRfTElOS19DTEFTUyhR
dWlja0xvb2ssIFFMUHJldmlld0NvbnZlcnRlcikKK1NPRlRfTElOS19NQVlfRkFJTChRdWlja0xv
b2ssIFFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlcywgTlNTZXQgKiwgKCksICgpKQorU09G
VF9MSU5LX01BWV9GQUlMKFF1aWNrTG9vaywgUUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvckZpbGVO
YW1lQW5kTWltZVR5cGUsIE5TU3RyaW5nICosIChOU1N0cmluZyAqZmlsZU5hbWUsIE5TU3RyaW5n
ICptaW1lVHlwZSksIChmaWxlTmFtZSwgbWltZVR5cGUpKQorU09GVF9MSU5LX01BWV9GQUlMKFF1
aWNrTG9vaywgUUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvclVSTEFuZE1pbWVUeXBlLCBOU1N0cmlu
ZyAqLCAoTlNVUkwgKnVybCwgTlNTdHJpbmcgKm1pbWVUeXBlKSwgKHVybCwgbWltZVR5cGUpKQor
U09GVF9MSU5LX01BWV9GQUlMKFF1aWNrTG9vaywgUUxUeXBlQ29weVVUSUZvclVSTEFuZE1pbWVU
eXBlLCBOU1N0cmluZyAqLCAoTlNVUkwgKnVybCwgTlNTdHJpbmcgKm1pbWVUeXBlKSwgKHVybCwg
bWltZVR5cGUpKQorU09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMKFF1aWNrTG9vaywgUUxQcmV2
aWV3U2NoZW1lLCBOU1N0cmluZyAqKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgTlNTdHJp
bmcgKlFMVHlwZUNvcHlVVElGb3JVUkxBbmRNaW1lVHlwZShOU1VSTCAqdXJsLCBOU1N0cmluZyAq
bWltZVR5cGUpOworfQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQ2xhc3MgV2ViQ29y
ZTo6UUxQcmV2aWV3Q29udmVydGVyQ2xhc3MoKQoreworI2RlZmluZSBRTFByZXZpZXdDb252ZXJ0
ZXIgZ2V0UUxQcmV2aWV3Q29udmVydGVyQ2xhc3MoKQorICAgIHJldHVybiBRTFByZXZpZXdDb252
ZXJ0ZXI7CisjdW5kZWYgUUxQcmV2aWV3Q29udmVydGVyCit9CisKK05TU3RyaW5nICpXZWJDb3Jl
OjpRTFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yRmlsZU5hbWVBbmRNaW1lVHlwZShOU1N0cmluZyAq
ZmlsZU5hbWUsIE5TU3RyaW5nICptaW1lVHlwZSkKK3sKKyAgICBpZiAoIWNhbkxvYWRRTFR5cGVD
b3B5QmVzdE1pbWVUeXBlRm9yRmlsZU5hbWVBbmRNaW1lVHlwZSgpKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgcmV0dXJuIDo6UUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvckZpbGVOYW1lQW5k
TWltZVR5cGUoZmlsZU5hbWUsIG1pbWVUeXBlKTsKK30KKworTlNTdHJpbmcgKldlYkNvcmU6OlFM
VHlwZUNvcHlCZXN0TWltZVR5cGVGb3JVUkxBbmRNaW1lVHlwZShOU1VSTCAqdXJsLCBOU1N0cmlu
ZyAqbWltZVR5cGUpCit7CisgICAgaWYgKCFjYW5Mb2FkUUxUeXBlQ29weUJlc3RNaW1lVHlwZUZv
clVSTEFuZE1pbWVUeXBlKCkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gOjpR
TFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yVVJMQW5kTWltZVR5cGUodXJsLCBtaW1lVHlwZSk7Cit9
CisKK05TU2V0ICpXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKQor
eworICAgIGlmICghY2FuTG9hZFFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlcygpKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgc3RhdGljIE5TU2V0ICpzZXQgPSBhZG9wdE5TKDo6UUxQ
cmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzKCkpLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gc2V0
OworfQorCitOU1N0cmluZyAqV2ViQ29yZTo6UUxUeXBlQ29weVVUSUZvclVSTEFuZE1pbWVUeXBl
KE5TVVJMICp1cmwsIE5TU3RyaW5nICptaW1lVHlwZSkKK3sKKyAgICBpZiAoIWNhbkxvYWRRTFR5
cGVDb3B5VVRJRm9yVVJMQW5kTWltZVR5cGUoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IHJldHVybiA6OlFMVHlwZUNvcHlVVElGb3JVUkxBbmRNaW1lVHlwZSh1cmwsIG1pbWVUeXBlKTsK
K30KKworTlNEaWN0aW9uYXJ5ICpXZWJDb3JlOjpRTEZpbGVBdHRyaWJ1dGVzKCkKK3sKKyAgICAv
LyBTZXQgZmlsZSBwZXJtcyB0byBvd25lciByZWFkL3dyaXRlIG9ubHkKKyAgICBOU051bWJlciAq
ZmlsZVBPU0lYUGVybWlzc2lvbnMgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6KFdFQl9V
UkVBRCB8IFdFQl9VV1JJVEUpXTsKKyAgICBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5
ID0gYWRvcHROUyhbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VzZXJOYW1lKCksIE5T
RmlsZU93bmVyQWNjb3VudE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmlsZVBPU0lYUGVybWlzc2lvbnMsIE5TRmlsZVBvc2l4UGVybWlzc2lvbnMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cl0pLmxlYWtSZWYoKTsK
KyAgICByZXR1cm4gZGljdGlvbmFyeTsKK30KKworTlNEaWN0aW9uYXJ5ICpXZWJDb3JlOjpRTERp
cmVjdG9yeUF0dHJpYnV0ZXMoKQoreworICAgIC8vIFNldCBmaWxlIHBlcm1zIHRvIG93bmVyIHJl
YWQvd3JpdGUvZXhlY3V0ZSBvbmx5CisgICAgTlNOdW1iZXIgKmRpcmVjdG9yeVBPU0lYUGVybWlz
c2lvbnMgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6KFdFQl9VUkVBRCB8IFdFQl9VV1JJ
VEUgfCBXRUJfVUVYRUMpXTsKKyAgICBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0g
YWRvcHROUyhbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVXNlck5hbWUo
KSwgTlNGaWxlT3duZXJBY2NvdW50TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeVBPU0lYUGVybWlzc2lvbnMsIE5TRmlsZVBvc2l4
UGVybWlzc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudWxscHRyXSkubGVha1JlZigpOworICAgIHJldHVybiBkaWN0aW9uYXJ5OworfQorCitz
dGF0aWMgTXV0ZXgmIHFsUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnlNdXRleCgpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPE11dGV4PiBtdXRleDsKKyAgICByZXR1cm4gbXV0ZXg7Cit9
CisKK3N0YXRpYyBOU011dGFibGVEaWN0aW9uYXJ5ICpRTFByZXZpZXdDb252ZXJ0ZXJEaWN0aW9u
YXJ5KCkKK3sKKyAgICBzdGF0aWMgTlNNdXRhYmxlRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IGFk
b3B0TlMoW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV0pLmxlYWtSZWYoKTsKKyAgICBy
ZXR1cm4gZGljdGlvbmFyeTsKK30KKworc3RhdGljIE5TTXV0YWJsZURpY3Rpb25hcnkgKlFMQ29u
dGVudERpY3Rpb25hcnkoKQoreworICAgIHN0YXRpYyBOU011dGFibGVEaWN0aW9uYXJ5ICpjb250
ZW50RGljdGlvbmFyeSA9IGFkb3B0TlMoW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV0p
LmxlYWtSZWYoKTsKKyAgICByZXR1cm4gY29udGVudERpY3Rpb25hcnk7Cit9CisKK3ZvaWQgV2Vi
Q29yZTo6YWRkUUxQcmV2aWV3Q29udmVydGVyV2l0aEZpbGVGb3JVUkwoTlNVUkwgKnVybCwgaWQg
Y29udmVydGVyLCBOU1N0cmluZyAqZmlsZU5hbWUpCit7CisgICAgQVNTRVJUKHVybCk7CisgICAg
QVNTRVJUKGNvbnZlcnRlcik7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhxbFByZXZpZXdDb252ZXJ0
ZXJEaWN0aW9uYXJ5TXV0ZXgoKSk7CisgICAgW1FMUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnko
KSBzZXRPYmplY3Q6Y29udmVydGVyIGZvcktleTp1cmxdOworICAgIFtRTENvbnRlbnREaWN0aW9u
YXJ5KCkgc2V0T2JqZWN0OihmaWxlTmFtZSA/IGZpbGVOYW1lIDogQCIiKSBmb3JLZXk6dXJsXTsK
K30KKworTlNTdHJpbmcgKldlYkNvcmU6OnFsUHJldmlld0NvbnZlcnRlckZpbGVOYW1lRm9yVVJM
KE5TVVJMICp1cmwpCit7CisgICAgcmV0dXJuIFtRTENvbnRlbnREaWN0aW9uYXJ5KCkgb2JqZWN0
Rm9yS2V5OnVybF07Cit9CisKK05TU3RyaW5nICpXZWJDb3JlOjpxbFByZXZpZXdDb252ZXJ0ZXJV
VElGb3JVUkwoTlNVUkwgKnVybCkKK3sKKyAgICBpZCBjb252ZXJ0ZXIgPSBuaWw7CisgICAgewor
ICAgICAgICBNdXRleExvY2tlciBsb2NrKHFsUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnlNdXRl
eCgpKTsKKyAgICAgICAgY29udmVydGVyID0gW1FMUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnko
KSBvYmplY3RGb3JLZXk6dXJsXTsKKyAgICB9CisgICAgaWYgKCFjb252ZXJ0ZXIpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtjb252ZXJ0ZXIgcHJldmlld1VUSV07Cit9CisKK3Zv
aWQgV2ViQ29yZTo6cmVtb3ZlUUxQcmV2aWV3Q29udmVydGVyRm9yVVJMKE5TVVJMICp1cmwpCit7
CisgICAgTXV0ZXhMb2NrZXIgbG9jayhxbFByZXZpZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5TXV0ZXgo
KSk7CisgICAgW1FMUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnkoKSByZW1vdmVPYmplY3RGb3JL
ZXk6dXJsXTsKKworICAgIC8vIERlbGV0ZSB0aGUgZmlsZSB3aGVuIHdlIHJlbW92ZSB0aGUgcHJl
dmlldyBjb252ZXJ0ZXIKKyAgICBOU1N0cmluZyAqZmlsZW5hbWUgPSBxbFByZXZpZXdDb252ZXJ0
ZXJGaWxlTmFtZUZvclVSTCh1cmwpOworICAgIGlmIChbZmlsZW5hbWUgbGVuZ3RoXSkKKyAgICAg
ICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBfd2ViX3JlbW92ZUZpbGVPbmx5QXRQ
YXRoOmZpbGVuYW1lXTsKKyAgICBbUUxDb250ZW50RGljdGlvbmFyeSgpIHJlbW92ZU9iamVjdEZv
cktleTp1cmxdOworfQorCitQYXNzT3duUHRyPFJlc291cmNlUmVxdWVzdD4gV2ViQ29yZTo6cmVn
aXN0ZXJRTFByZXZpZXdDb252ZXJ0ZXJJZk5lZWRlZChOU1VSTCAqdXJsLCBOU1N0cmluZyAqbWlt
ZVR5cGUsIE5TRGF0YSAqZGF0YSkKK3sKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHVwZGF0ZWRN
SU1FVHlwZSA9IGFkb3B0TlMoV2ViQ29yZTo6UUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvclVSTEFu
ZE1pbWVUeXBlKHVybCwgbWltZVR5cGUpKTsKKworICAgIGlmIChbV2ViQ29yZTo6UUxQcmV2aWV3
R2V0U3VwcG9ydGVkTUlNRVR5cGVzU2V0KCkgY29udGFpbnNPYmplY3Q6dXBkYXRlZE1JTUVUeXBl
LmdldCgpXSkgeworICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHV0aSA9IGFkb3B0TlMoV2Vi
Q29yZTo6UUxUeXBlQ29weVVUSUZvclVSTEFuZE1pbWVUeXBlKHVybCwgdXBkYXRlZE1JTUVUeXBl
LmdldCgpKSk7CisKKyAgICAgICAgUmV0YWluUHRyPGlkPiBjb252ZXJ0ZXIgPSBhZG9wdE5TKFtb
UUxQcmV2aWV3Q29udmVydGVyQ2xhc3MoKSBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGEgbmFtZTpu
aWwgdXRpOnV0aS5nZXQoKSBvcHRpb25zOm5pbF0pOworICAgICAgICBOU1VSTFJlcXVlc3QgKnJl
cXVlc3QgPSBbY29udmVydGVyLmdldCgpIHByZXZpZXdSZXF1ZXN0XTsKKworICAgICAgICAvLyBX
ZSB1c2UgW3JlcXVlc3QgVVJMXSBoZXJlIGluc3RlYWQgb2YgdXJsIHNpbmNlIGl0IHdpbGwgYmUK
KyAgICAgICAgLy8gdGhlIFVSTCB0aGF0IHRoZSBXZWJEYXRhU291cmNlIHdpbGwgc2VlIGR1cmlu
ZyAtZGVhbGxvYy4KKyAgICAgICAgYWRkUUxQcmV2aWV3Q29udmVydGVyV2l0aEZpbGVGb3JVUkwo
W3JlcXVlc3QgVVJMXSwgY29udmVydGVyLmdldCgpLCBuaWwpOworCisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworY29uc3QgVVJMIFdlYkNvcmU6OnNhZmVRTFVSTEZvckRvY3VtZW50
VVJMQW5kUmVzb3VyY2VVUkwoY29uc3QgVVJMJiBkb2N1bWVudFVSTCwgY29uc3QgU3RyaW5nJiBy
ZXNvdXJjZVVSTCkKK3sKKyAgICBpZCBjb252ZXJ0ZXIgPSBuaWw7CisgICAgTlNVUkwgKm5zRG9j
dW1lbnRVUkwgPSBkb2N1bWVudFVSTDsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2so
cWxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeU11dGV4KCkpOworICAgICAgICBjb252ZXJ0ZXIg
PSBbUUxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeSgpIG9iamVjdEZvcktleTpuc0RvY3VtZW50
VVJMXTsKKyAgICB9CisKKyAgICBpZiAoIWNvbnZlcnRlcikKKyAgICAgICAgcmV0dXJuIFVSTChQ
YXJzZWRVUkxTdHJpbmcsIHJlc291cmNlVVJMKTsKKworICAgIFJldGFpblB0cjxOU1VSTFJlcXVl
c3Q+IHJlcXVlc3QgPSBhZG9wdE5TKFtbTlNVUkxSZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVSTDpb
TlNVUkwgVVJMV2l0aFN0cmluZzpyZXNvdXJjZVVSTF1dKTsKKyAgICBOU1VSTFJlcXVlc3QgKnNh
ZmVSZXF1ZXN0ID0gW2NvbnZlcnRlciBzYWZlUmVxdWVzdEZvclJlcXVlc3Q6cmVxdWVzdC5nZXQo
KV07CisgICAgcmV0dXJuIFtzYWZlUmVxdWVzdCBVUkxdOworfQorCitzdGF0aWMgVmVjdG9yPGNo
YXI+IGNyZWF0ZVFMUHJldmlld1Byb3RvY29sKCkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gcHJldmll
d1Byb3RvY29sOworI2RlZmluZSBRTFByZXZpZXdTY2hlbWUgZ2V0UUxQcmV2aWV3U2NoZW1lKCkK
KyAgICBjb25zdCBjaGFyKiBxbFByZXZpZXdTY2hlbWUgPSBbUUxQcmV2aWV3U2NoZW1lIFVURjhT
dHJpbmddOworI3VuZGVmIFFMUHJldmlld1NjaGVtZQorICAgIHByZXZpZXdQcm90b2NvbC5hcHBl
bmQocWxQcmV2aWV3U2NoZW1lLCBzdHJsZW4ocWxQcmV2aWV3U2NoZW1lKSArIDEpOworICAgIHJl
dHVybiBwcmV2aWV3UHJvdG9jb2w7Cit9CisKK2NvbnN0IGNoYXIqIFdlYkNvcmU6OlFMUHJldmll
d1Byb3RvY29sKCkKK3sKKyAgICBpZiAoIWNhbkxvYWRRTFByZXZpZXdTY2hlbWUoKSkKKyAgICAg
ICAgcmV0dXJuICIiOworCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxjaGFyPj4g
cHJldmlld1Byb3RvY29sKGNyZWF0ZVFMUHJldmlld1Byb3RvY29sKCkpOworICAgIHJldHVybiBw
cmV2aWV3UHJvdG9jb2wuZ2V0KCkuZGF0YSgpOworfQorCisjaWYgVVNFKENGTkVUV09SSykKKy8v
IFRoZSB3YXkgUXVpY2tMb29rIHdvcmtzIGlzIHdlIHBhc3MgaXQgYW4gTlNVUkxDb25uZWN0aW9u
RGVsZWdhdGUgY2FsbGJhY2sgb2JqZWN0IGF0IGNyZWF0aW9uCisvLyB0aW1lLiBUaGVuIHdlIHBh
c3MgaXQgYWxsIHRoZSBkYXRhIGFzIHdlIHJlY2VpdmUgaXQuIE9uY2Ugd2UndmUgZG93bmxvYWRl
ZCB0aGUgZnVsbCBVUkwsCisvLyBRdWlja0xvb2sgdHVybnMgYXJvdW5kIGFuZCBzZW5kIHVzLCB0
aHJvdWdoIHRoaXMgZGVsZWdhdGUsIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhlIGZpbGUgd2hpY2gg
d2UKKy8vIHBhc3Mgb24gdG8gV2ViQ29yZS4gVGhlIGZsYWcgbV9maW5pc2hlZExvYWRpbmdEYXRh
SW50b0NvbnZlcnRlciBpbiBRdWlja0xvb2tIYW5kbGUgZGVjaWRlcworLy8gd2hldGhlciB0byBw
YXNzIHRoZSBkYXRhIHRvIFF1aWNrTG9vayBvciBXZWJDb3JlLgorLy8KKy8vIFRoaXMgd29ya3Mg
ZmluZSB3aGVuIHVzaW5nIE5TIEFQSXMsIGJ1dCB3aGVuIHVzaW5nIENGTmV0d29yaywgd2UgZG9u
J3QgaGF2ZSBhIE5TVVJMQ29ubmVjdGlvbkRlbGVnYXRlLgorLy8gU28gd2UgY3JlYXRlIFdlYlF1
aWNrTG9va0hhbmRsZUFzRGVsZWdhdGUgYXMgYW4gaW50ZXJtZWRpYXRlIGRlbGVnYXRlIG9iamVj
dCBhbmQgcGFzcyBpdCB0bworLy8gUUxQcmV2aWV3Q29udmVydGVyLiBUaGUgcHJveHkgZGVsZWdh
dGUgdGhlbiBmb3J3YXJkcyB0aGUgbWVzc2FnZXMgb24gdG8gdGhlIENGTmV0d29yayBjb2RlLgor
QGludGVyZmFjZSBXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVnYXRlIDogTlNPYmplY3QgPE5TVVJM
Q29ubmVjdGlvbkRlbGVnYXRlPiB7CisgICAgUmVmUHRyPFN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZT4gbV9jb25uZWN0aW9uRGVsZWdhdGU7Cit9CisKKy0g
KGlkKWluaXRXaXRoQ29ubmVjdGlvbkRlbGVnYXRlOihTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUqKWNvbm5lY3Rpb25EZWxlZ2F0ZTsKKy0gKHZvaWQpY2xl
YXJIYW5kbGU7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJRdWlja0xvb2tIYW5kbGVBc0Rl
bGVnYXRlCistIChpZClpbml0V2l0aENvbm5lY3Rpb25EZWxlZ2F0ZTooU3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKiljb25uZWN0aW9uRGVsZWdhdGUKK3sK
KyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBtX2Nvbm5lY3Rpb25EZWxlZ2F0ZSA9IGNvbm5lY3Rpb25EZWxlZ2F0ZTsKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24g
Kiljb25uZWN0aW9uIGRpZFJlY2VpdmVEYXRhQXJyYXk6KE5TQXJyYXkgKilkYXRhQXJyYXkKK3sK
KyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb25EZWxl
Z2F0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIExPRyhOZXR3b3JrLCAiV2ViUXVpY2tMb29rSGFu
ZGxlQXNEZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGFBcnJheSgpIik7CisgICAgbV9jb25uZWN0aW9u
RGVsZWdhdGUtPmRpZFJlY2VpdmVEYXRhQXJyYXkocmVpbnRlcnByZXRfY2FzdDxDRkFycmF5UmVm
PihkYXRhQXJyYXkpKTsKK30KKworLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24g
Kiljb25uZWN0aW9uIGRpZFJlY2VpdmVEYXRhOihOU0RhdGEgKilkYXRhIGxlbmd0aFJlY2VpdmVk
Oihsb25nIGxvbmcpbGVuZ3RoUmVjZWl2ZWQKK3sKKyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlv
bik7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb25EZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworICAg
IExPRyhOZXR3b3JrLCAiV2ViUXVpY2tMb29rSGFuZGxlQXNEZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURh
dGEoKSAtIGRhdGEgbGVuZ3RoID0gJWxkIiwgKGxvbmcpW2RhdGEgbGVuZ3RoXSk7CisKKyAgICAv
LyBRdWlja0xvb2sgY29kZSBzZW5kcyB1cyBhIG5pbCBkYXRhIGF0IHRpbWVzLiBUaGUgY2hlY2sg
YmVsb3cgaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSBpbgorICAgIC8vIFJlc291cmNlSGFuZGxlTWFj
LmNwcCBhZGRlZCBmb3IgYSBkaWZmZXJlbnQgYnVnLgorICAgIGlmICghW2RhdGEgbGVuZ3RoXSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlLT5kaWRSZWNlaXZlRGF0
YShyZWludGVycHJldF9jYXN0PENGRGF0YVJlZj4oZGF0YSksIHN0YXRpY19jYXN0PGludD4obGVu
Z3RoUmVjZWl2ZWQpKTsKK30KKworLSAodm9pZCljb25uZWN0aW9uRGlkRmluaXNoTG9hZGluZzoo
TlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbgoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0
aW9uKTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbkRlbGVnYXRlKQorICAgICAgICByZXR1cm47Cisg
ICAgTE9HKE5ldHdvcmssICJXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVnYXRlOjpkaWRGaW5pc2hM
b2FkaW5nKCkiKTsKKyAgICBtX2Nvbm5lY3Rpb25EZWxlZ2F0ZS0+ZGlkRmluaXNoTG9hZGluZygp
OworfQorCistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24g
ZGlkRmFpbFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKGNv
bm5lY3Rpb24pOworICAgIGlmICghbV9jb25uZWN0aW9uRGVsZWdhdGUpCisgICAgICAgIHJldHVy
bjsKKyAgICBMT0coTmV0d29yaywgIldlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGU6OmRpZEZh
aWwoKSIpOworICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlLT5kaWRGYWlsKHJlaW50ZXJwcmV0X2Nh
c3Q8Q0ZFcnJvclJlZj4oZXJyb3IpKTsKK30KKworLSAodm9pZCljbGVhckhhbmRsZQoreworICAg
IG1fY29ubmVjdGlvbkRlbGVnYXRlID0gbnVsbHB0cjsKK30KK0BlbmQKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBOU1N0cmluZyAqY3JlYXRlVGVtcG9yYXJ5RmlsZUZv
clF1aWNrTG9vayhOU1N0cmluZyAqZmlsZU5hbWUpCit7CisgICAgTlNTdHJpbmcgKmRvd25sb2Fk
RGlyZWN0b3J5ID0gY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KEAiUXVpY2tMb29rQ29udGVudCIp
OworICAgIGlmICghZG93bmxvYWREaXJlY3RvcnkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBOU1N0cmluZyAqY29udGVudFBhdGggPSBbZG93bmxvYWREaXJlY3Rvcnkgc3RyaW5nQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OmZpbGVOYW1lXTsKKyAgICBOU0ZpbGVNYW5hZ2VyICpmaWxlTWFu
YWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKKyAgICBOU1N0cmluZyAqdW5p
cXVlQ29udGVudFBhdGggPSBbZmlsZU1hbmFnZXIgX3dlYl9wYXRoV2l0aFVuaXF1ZUZpbGVuYW1l
Rm9yUGF0aDpjb250ZW50UGF0aF07CisKKyAgICBCT09MIHN1Y2Nlc3MgPSBbZmlsZU1hbmFnZXIg
X3dlYl9jcmVhdGVGaWxlQXRQYXRoV2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOnVuaXF1ZUNv
bnRlbnRQYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50czpuaWwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGVzOlFMRmlsZUF0dHJpYnV0ZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeUF0dHJpYnV0ZXM6UUxEaXJl
Y3RvcnlBdHRyaWJ1dGVzKCldOworCisgICAgcmV0dXJuIHN1Y2Nlc3MgPyB1bmlxdWVDb250ZW50
UGF0aCA6IG5pbDsKK30KKworCitRdWlja0xvb2tIYW5kbGU6OlF1aWNrTG9va0hhbmRsZShSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBOU1VSTENvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIE5TVVJMUmVz
cG9uc2UgKm5zUmVzcG9uc2UsIGlkIGRlbGVnYXRlKQorICAgIDogbV9oYW5kbGUoaGFuZGxlKQor
ICAgICwgbV9jb252ZXJ0ZXIoYWRvcHROUyhbW1FMUHJldmlld0NvbnZlcnRlckNsYXNzKCkgYWxs
b2NdIGluaXRXaXRoQ29ubmVjdGlvbjpjb25uZWN0aW9uIGRlbGVnYXRlOmRlbGVnYXRlIHJlc3Bv
bnNlOm5zUmVzcG9uc2Ugb3B0aW9uczpuaWxdKSkKKyAgICAsIG1fZGVsZWdhdGUoYWRvcHROUyhb
ZGVsZWdhdGUgcmV0YWluXSkpCisgICAgLCBtX2ZpbmlzaGVkTG9hZGluZ0RhdGFJbnRvQ29udmVy
dGVyKGZhbHNlKQorICAgICwgbV9uc1Jlc3BvbnNlKFttX2NvbnZlcnRlci5nZXQoKSBwcmV2aWV3
UmVzcG9uc2VdKQoreworICAgIE5TVVJMICpwcmV2aWV3UmVxdWVzdFVSTCA9IFtbbV9jb252ZXJ0
ZXIuZ2V0KCkgcHJldmlld1JlcXVlc3RdIFVSTF07CisgICAgaWYgKCFhcHBsaWNhdGlvbklzTW9i
aWxlU2FmYXJpKCkpIHsKKyAgICAgICAgLy8gVGhpcyBrZWVwcyB0aGUgUUxQcmV2aWV3Q29udmVy
dGVyIGFsaXZlIHRvIHNlcnZlIGFueSBzdWJyZXNvdXJjZSByZXF1ZXN0cy4KKyAgICAgICAgLy8g
SXQgaXMgcmVtb3ZlZCBieSAtW1dlYkRhdGFTb3VyY2UgZGVhbGxvY10uCisgICAgICAgIGFkZFFM
UHJldmlld0NvbnZlcnRlcldpdGhGaWxlRm9yVVJMKHByZXZpZXdSZXF1ZXN0VVJMLCBtX2NvbnZl
cnRlci5nZXQoKSwgbmlsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFF1aWNr
TG9vayBjb25zdW1lcyB0aGUgaW5jb21pbmcgZGF0YSwgd2UgbmVlZCB0byBzdG9yZSBpdCBzbyB0
aGF0IGl0IGNhbiBiZSBvcGVuZWQgaW4gdGhlIGhhbmRsaW5nIGFwcGxpY2F0aW9uLgorICAgIE5T
U3RyaW5nICpxdWlja2xvb2tDb250ZW50UGF0aCA9IGNyZWF0ZVRlbXBvcmFyeUZpbGVGb3JRdWlj
a0xvb2soW21fY29udmVydGVyLmdldCgpIHByZXZpZXdGaWxlTmFtZV0pOworICAgIExPRyhOZXR3
b3JrLCAiUXVpY2tMb29rSGFuZGxlOjpRdWlja0xvb2tIYW5kbGUoKSAtIHF1aWNrbG9va0NvbnRl
bnRQYXRoOiAlcyIsIFtxdWlja2xvb2tDb250ZW50UGF0aCBVVEY4U3RyaW5nXSk7CisKKyAgICBp
ZiAocXVpY2tsb29rQ29udGVudFBhdGgpIHsKKyAgICAgICAgbV9xdWlja2xvb2tGaWxlSGFuZGxl
ID0gYWRvcHROUyhbW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlRm9yV3JpdGluZ0F0UGF0aDpxdWlj
a2xvb2tDb250ZW50UGF0aF0gcmV0YWluXSk7CisgICAgICAgIC8vIFdlIG11c3QgdXNlIHRoZSBn
ZW5lcmF0ZWQgVVJMIGZyb20gbV9jb252ZXJ0ZXIncyBOU1VSTFJlcXVlc3Qgb2JqZWN0CisgICAg
ICAgIC8vIHNvIHRoYXQgaXQgbWF0Y2hlcyB0aGUgVVJMIHJlbW92ZWQgZnJvbSAtW1dlYkRhdGFT
b3VyY2UgZGVhbGxvY10uCisgICAgICAgIGFkZFFMUHJldmlld0NvbnZlcnRlcldpdGhGaWxlRm9y
VVJMKHByZXZpZXdSZXF1ZXN0VVJMLCBtX2NvbnZlcnRlci5nZXQoKSwgcXVpY2tsb29rQ29udGVu
dFBhdGgpOworICAgIH0KK30KKworUGFzc093blB0cjxRdWlja0xvb2tIYW5kbGU+IFF1aWNrTG9v
a0hhbmRsZTo6Y3JlYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIE5TVVJMQ29ubmVjdGlvbiAq
Y29ubmVjdGlvbiwgTlNVUkxSZXNwb25zZSAqbnNSZXNwb25zZSwgaWQgZGVsZWdhdGUpCit7Cisg
ICAgaWYgKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaXNNYWluUmVzb3VyY2VSZXF1ZXN0KCkgJiYg
W1dlYkNvcmU6OlFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpIGNvbnRhaW5zT2Jq
ZWN0Oltuc1Jlc3BvbnNlIE1JTUVUeXBlXV0pCisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
UXVpY2tMb29rSGFuZGxlKGhhbmRsZSwgY29ubmVjdGlvbiwgbnNSZXNwb25zZSwgZGVsZWdhdGUp
KTsKKworICAgIHJldHVybiBudWxscHRyOworfQorCisjaWYgVVNFKENGTkVUV09SSykKK1Bhc3NP
d25QdHI8UXVpY2tMb29rSGFuZGxlPiBRdWlja0xvb2tIYW5kbGU6OmNyZWF0ZShSZXNvdXJjZUhh
bmRsZSogaGFuZGxlLCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGUqIGNvbm5lY3Rpb25EZWxlZ2F0ZSwgQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlKQor
eworICAgIGlmIChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmlzTWFpblJlc291cmNlUmVxdWVzdCgp
ICYmIFtXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWlu
c09iamVjdDooTlNTdHJpbmcgKilDRlVSTFJlc3BvbnNlR2V0TUlNRVR5cGUoY2ZSZXNwb25zZSld
KSB7CisgICAgICAgIE5TVVJMUmVzcG9uc2UgKm5zUmVzcG9uc2UgPSBbTlNVUkxSZXNwb25zZSBf
cmVzcG9uc2VXaXRoQ0ZVUkxSZXNwb25zZTpjZlJlc3BvbnNlXTsKKyAgICAgICAgV2ViUXVpY2tM
b29rSGFuZGxlQXNEZWxlZ2F0ZSAqZGVsZWdhdGUgPSBbW1tXZWJRdWlja0xvb2tIYW5kbGVBc0Rl
bGVnYXRlIGFsbG9jXSBpbml0V2l0aENvbm5lY3Rpb25EZWxlZ2F0ZTpjb25uZWN0aW9uRGVsZWdh
dGVdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBRdWlja0xvb2tI
YW5kbGUoaGFuZGxlLCBuaWwsIG5zUmVzcG9uc2UsIGRlbGVnYXRlKSk7CisgICAgfQorCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK0NGVVJMUmVzcG9uc2VSZWYgUXVpY2tMb29rSGFuZGxlOjpj
ZlJlc3BvbnNlKCkKK3sKKyAgICByZXR1cm4gW21fbnNSZXNwb25zZSBfQ0ZVUkxSZXNwb25zZV07
Cit9CisjZW5kaWYKKworTlNVUkxSZXNwb25zZSAqUXVpY2tMb29rSGFuZGxlOjpuc1Jlc3BvbnNl
KCkKK3sKKyAgICByZXR1cm4gbV9uc1Jlc3BvbnNlOworfQorCitib29sIFF1aWNrTG9va0hhbmRs
ZTo6ZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycmF5UmVmIGNmRGF0YUFycmF5KQoreworICAgIE5T
QXJyYXkgKiBjb25zdCBkYXRhQXJyYXkgPSAoTlNBcnJheSAqKWNmRGF0YUFycmF5OworCisgICAg
aWYgKG1fZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIExPRyhOZXR3b3JrLCAiUXVpY2tMb29rSGFuZGxlOjpkaWRSZWNlaXZlRGF0
YUFycmF5KCkiKTsKKyAgICBbbV9jb252ZXJ0ZXIuZ2V0KCkgYXBwZW5kRGF0YUFycmF5OmRhdGFB
cnJheV07CisgICAgaWYgKG1fcXVpY2tsb29rRmlsZUhhbmRsZSkgeworICAgICAgICBmb3IgKE5T
RGF0YSAqZGF0YSBpbiBkYXRhQXJyYXkpCisgICAgICAgICAgICBbbV9xdWlja2xvb2tGaWxlSGFu
ZGxlLmdldCgpIHdyaXRlRGF0YTpkYXRhXTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUXVpY2tMb29rSGFuZGxlOjpkaWRSZWNlaXZlRGF0YShDRkRhdGFSZWYgY2ZEYXRhKQor
eworICAgIE5TRGF0YSAqIGNvbnN0IGRhdGEgPSAoTlNEYXRhICopY2ZEYXRhOworCisgICAgaWYg
KG1fZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIExPRyhOZXR3b3JrLCAiUXVpY2tMb29rSGFuZGxlOjpkaWRSZWNlaXZlRGF0YSgp
Iik7CisgICAgW21fY29udmVydGVyLmdldCgpIGFwcGVuZERhdGE6ZGF0YV07CisgICAgaWYgKG1f
cXVpY2tsb29rRmlsZUhhbmRsZSkKKyAgICAgICAgW21fcXVpY2tsb29rRmlsZUhhbmRsZS5nZXQo
KSB3cml0ZURhdGE6ZGF0YV07CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUXVpY2tMb29r
SGFuZGxlOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBpZiAobV9maW5pc2hlZExvYWRpbmdE
YXRhSW50b0NvbnZlcnRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTE9HKE5ldHdv
cmssICJRdWlja0xvb2tIYW5kbGU6OmRpZEZpbmlzaExvYWRpbmcoKSIpOworICAgIG1fZmluaXNo
ZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXIgPSBZRVM7CisgICAgW21fY29udmVydGVyLmdldCgp
IGZpbmlzaGVkQXBwZW5kaW5nRGF0YV07CisgICAgaWYgKG1fcXVpY2tsb29rRmlsZUhhbmRsZSkK
KyAgICAgICAgW21fcXVpY2tsb29rRmlsZUhhbmRsZS5nZXQoKSBjbG9zZUZpbGVdOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFF1aWNrTG9va0hhbmRsZTo6ZGlkRmFpbCgpCit7CisgICAg
TE9HKE5ldHdvcmssICJRdWlja0xvb2tIYW5kbGU6OmRpZEZhaWwoKSIpOworICAgIG1fcXVpY2ts
b29rRmlsZUhhbmRsZSA9IG51bGxwdHI7CisgICAgLy8gcmVtb3ZlUUxQcmV2aWV3Q29udmVydGVy
Rm9yVVJMIGRlbGV0ZXMgdGhlIHRlbXBvcmFyeSBmaWxlIGNyZWF0ZWQuCisgICAgcmVtb3ZlUUxQ
cmV2aWV3Q29udmVydGVyRm9yVVJMKFttX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkubnNVUkxSZXF1
ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpIFVSTF0pOworICAgIFttX2NvbnZlcnRlci5nZXQoKSBm
aW5pc2hDb252ZXJ0aW5nXTsKKyAgICBtX2NvbnZlcnRlciA9IG51bGxwdHI7Cit9CisKK1F1aWNr
TG9va0hhbmRsZTo6flF1aWNrTG9va0hhbmRsZSgpCit7CisgICAgTE9HKE5ldHdvcmssICJRdWlj
a0xvb2tIYW5kbGU6On5RdWlja0xvb2tIYW5kbGUoKSIpOworICAgIGlmIChtX3F1aWNrbG9va0Zp
bGVIYW5kbGUpIHsKKyAgICAgICAgbV9xdWlja2xvb2tGaWxlSGFuZGxlID0gbnVsbHB0cjsKKyAg
ICAgICAgcmVtb3ZlUUxQcmV2aWV3Q29udmVydGVyRm9yVVJMKFttX2hhbmRsZS0+Zmlyc3RSZXF1
ZXN0KCkubnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpIFVSTF0pOworICAgIH0KKyAg
ICBtX2NvbnZlcnRlciA9IG51bGxwdHI7CisKKyAgICBbbV9kZWxlZ2F0ZS5nZXQoKSBjbGVhckhh
bmRsZV07Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShRVUlDS19MT09LKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUmVzb3VyY2VIYW5kbGVJT1MubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9SZXNvdXJjZUhhbmRsZUlPUy5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42NjdiOWIxODY2NzQ0MGRlYmZlZmRhMTgwNWI4NGNiNTQ3ODRjNTc5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUmVz
b3VyY2VIYW5kbGVJT1MubW0KQEAgLTAsMCArMSwzOSBAQAorLy8KKy8vICBSZXNvdXJjZUhhbmRs
ZUlQaG9uZS5tbQorLy8gIFdlYkNvcmUKKy8vCisvLyAgQ29weXJpZ2h0IDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorCisjaW1w
b3J0IDxDRk5ldHdvcmsvQ0ZTb2NrZXRTdHJlYW1Qcml2Lmg+CisjaW1wb3J0IDxGb3VuZGF0aW9u
L05TVVJMUmVxdWVzdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlU1NMUHJvcGVydGllc0Zyb21OU1VSTFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQoreworICAgIE5TU3RyaW5nICpob3N0ID0gcmVxdWVzdC51cmwoKS5ob3N0
KCk7CisgICAgTlNBcnJheSAqY2VydEFycmF5ID0gW05TVVJMUmVxdWVzdCBhbGxvd3NTcGVjaWZp
Y0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0Omhvc3RdOworICAgIEJPT0wgYWxsb3dzQW55Q2VydGlm
aWNhdGUgPSBbTlNVUkxSZXF1ZXN0IGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVGb3JIb3N0Omhv
c3RdOworICAgIGlmICghY2VydEFycmF5ICYmICFhbGxvd3NBbnlDZXJ0aWZpY2F0ZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIHNzbFByb3BzID0gQ0ZE
aWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURp
Y3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsK
KyAgICBpZiAoY2VydEFycmF5KQorICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShzc2xQcm9w
cywgX2tDRlN0cmVhbVNTTFRydXN0ZWRMZWFmQ2VydGlmaWNhdGVzLCAoQ0ZUeXBlUmVmKSBjZXJ0
QXJyYXkpOworCisgICAgaWYgKGFsbG93c0FueUNlcnRpZmljYXRlKQorICAgICAgICBDRkRpY3Rp
b25hcnlTZXRWYWx1ZShzc2xQcm9wcywga0NGU3RyZWFtU1NMVmFsaWRhdGVzQ2VydGlmaWNhdGVD
aGFpbiwga0NGQm9vbGVhbkZhbHNlKTsKKyAgICByZXR1cm4gc3NsUHJvcHM7Cit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9X
ZWJDb3JlVVJMUmVzcG9uc2VJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
aW9zL1dlYkNvcmVVUkxSZXNwb25zZUlPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEwMGRkOTBiNjAyYTE2YmMy
ZGFjODRlNjBhMWZhZDcwYjJlNTk0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9XZWJDb3JlVVJMUmVzcG9uc2VJT1MuaApAQCAtMCwwICsx
LDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYkNvcmVVUkxSZXNwb25zZUlPU19oCisjZGVmaW5lIFdlYkNv
cmVVUkxSZXNwb25zZUlPU19oCisKKyNpZmRlZiBfX09CSkNfXworI2luY2x1ZGUgIldlYkNvcmVV
UkxSZXNwb25zZS5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I2lmIFVTRShRVUlDS19MT09LKQorICAgIAoraW5saW5lIGJvb2wgc2hvdWxkVXNlUXVpY2tMb29r
Rm9yTUlNRVR5cGUoY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmICgoIU1J
TUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkgICAg
ICAgLy8gaWdub3JlIHN1cHBvcnRlZCBub24taW1hZ2UgTUlNRSB0eXBlcworICAgICAgICAgJiYg
IU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkgICAg
ICAgLy8gaWdub3JlIHN1cHBvcnRlZCBpbWFnZSBNSU1FIHR5cGVzCisgICAgICAgICAmJiBtaW1l
VHlwZSAhPSAidGV4dC9jc3MiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpZ25vcmUgY3NzCisgICAgICAgICAmJiBtaW1lVHlwZSAhPSAiYXBwbGljYXRpb24vcGRmIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgcGRmCisgICAgICAgICApCisg
ICAgICAgIHx8IG1pbWVUeXBlID09ICJ0ZXh0L3BsYWluIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBidXQga2VlcCB0ZXh0L3BsYWluIHdoaWNoIGlzIHRvbyBnZW5lcmlj
IGFuZCBjYW4gaGlkZSBzb21ldGhpbmcKKyAgICAgICAgfHwgKG1pbWVUeXBlID09ICJ0ZXh0L3ht
bCIgfHwgbWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3htbCIpKSAgIC8vIGFuZCBrZWVwIFhNTCB0
eXBlcyBmb3IgLm1vYmlsZWNvbmZpZyBmaWxlcworICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisjZW5kaWYgLy8gVVNFKFFVSUNLX0xP
T0spCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYkNvcmVVUkxSZXNw
b25zZUlPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lv
cy9XZWJDb3JlVVJMUmVzcG9uc2VJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2lvcy9XZWJDb3JlVVJMUmVzcG9uc2VJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWU3Y2JkZjI1NjQz
NDQ1YTJlZDBjMWE1YWY0NDhhYTZmMjk1NjZlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1dlYkNvcmVVUkxSZXNwb25zZUlPUy5tbQpAQCAt
MCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkNvcmVVUkxS
ZXNwb25zZUlPUy5oIgorI2ltcG9ydCAiVVRJVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlLmgiCisKKyNpbXBvcnQgIlF1aWNrTG9vay5oIgorI2ltcG9ydCAiU29m
dExpbmtpbmcuaCIKKyNpbXBvcnQgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2Vydmlj
ZXMuaD4KKworU09GVF9MSU5LX0ZSQU1FV09SSyhNb2JpbGVDb3JlU2VydmljZXMpCisKK1NPRlRf
TElOSyhNb2JpbGVDb3JlU2VydmljZXMsIFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50aWZpZXJG
b3JUYWcsIENGU3RyaW5nUmVmLCAoQ0ZTdHJpbmdSZWYgaW5UYWdDbGFzcywgQ0ZTdHJpbmdSZWYg
aW5UYWcsIENGU3RyaW5nUmVmIGluQ29uZm9ybWluZ1RvVVRJKSwgKGluVGFnQ2xhc3MsIGluVGFn
LCBpbkNvbmZvcm1pbmdUb1VUSSkpCisKK1NPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2Vy
dmljZXMsIGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24sIENGU3RyaW5nUmVmKQorCisjZGVm
aW5lIGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24gZ2V0a1VUVGFnQ2xhc3NGaWxlbmFtZUV4
dGVuc2lvbigpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBhZGp1c3RNSU1FVHlwZUlm
TmVjZXNzYXJ5KENGVVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25zZSkKK3sKKyAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IG1pbWVUeXBlID0gd2tHZXRDRlVSTFJlc3BvbnNlTUlNRVR5cGUoY2ZSZXNw
b25zZSk7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cGRhdGVkTUlNRVR5cGUgPSBtaW1l
VHlwZTsKKyAgICBpZiAoIXVwZGF0ZWRNSU1FVHlwZSkKKyAgICAgICAgdXBkYXRlZE1JTUVUeXBl
ID0gZGVmYXVsdE1JTUVUeXBlKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKKworI2lmIFVTRShRVUlDS19M
T09LKQorICAgIC8vIFdlIG11c3QgZW5zdXJlIHRoYXQgdGhlIE1JTUUgdHlwZSBpcyBjb3JyZWN0
LCBzbyB0aGF0IFF1aWNrTG9vaydzIHdlYiBwbHVnaW4gaXMgY2FsbGVkIHdoZW4gbmVlZGVkLgor
ICAgIC8vIFdlIGZpbHRlciB0aGUgYmFzaWMgTUlNRSB0eXBlcyBzbyB0aGF0IHdlIGRvbid0IGRv
IHVubmVjZXNzYXJ5IHdvcmsgaW4gc3RhbmRhcmQgYnJvd3Npbmcgc2l0dWF0aW9ucy4KKyAgICBp
ZiAoc2hvdWxkVXNlUXVpY2tMb29rRm9yTUlNRVR5cGUoKE5TU3RyaW5nICopdXBkYXRlZE1JTUVU
eXBlLmdldCgpKSkgeworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN1Z2dlc3RlZEZp
bGVuYW1lID0gYWRvcHRDRih3a0NvcHlDRlVSTFJlc3BvbnNlU3VnZ2VzdGVkRmlsZW5hbWUoY2ZS
ZXNwb25zZSkpOworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHF1aWNrTG9va01JTUVU
eXBlID0gYWRvcHRDRigoQ0ZTdHJpbmdSZWYpUUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvckZpbGVO
YW1lQW5kTWltZVR5cGUoKE5TU3RyaW5nICopc3VnZ2VzdGVkRmlsZW5hbWUuZ2V0KCksIChOU1N0
cmluZyAqKW1pbWVUeXBlLmdldCgpKSk7CisgICAgICAgIGlmICghcXVpY2tMb29rTUlNRVR5cGUp
IHsKKyAgICAgICAgICAgIENGVVJMUmVmIHVybCA9IHdrR2V0Q0ZVUkxSZXNwb25zZVVSTChjZlJl
c3BvbnNlKTsKKyAgICAgICAgICAgIE5TVVJMICpuc1VSTCA9IChOU1VSTCAqKXVybDsKKyAgICAg
ICAgICAgIGlmIChbbnNVUkwgaXNGaWxlVVJMXSkgeworICAgICAgICAgICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gZXh0ZW5zaW9uID0gYWRvcHRDRihDRlVSTENvcHlQYXRoRXh0ZW5zaW9u
KHVybCkpOworICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGkgPSBhZG9wdENGKFVUVHlwZUNyZWF0ZVBy
ZWZlcnJlZElkZW50aWZpZXJGb3JUYWcoa1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwgZXh0
ZW5zaW9uLmdldCgpLCBudWxscHRyKSk7CisgICAgICAgICAgICAgICAgICAgIHF1aWNrTG9va01J
TUVUeXBlID0gbWltZVR5cGVGcm9tVVRJVHJlZSh1dGkuZ2V0KCkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChxdWlja0xvb2tNSU1F
VHlwZSkKKyAgICAgICAgICAgIHVwZGF0ZWRNSU1FVHlwZSA9IHF1aWNrTG9va01JTUVUeXBlOwor
ICAgIH0KKyNlbmRpZiAvLyBVU0UoUVVJQ0tfTE9PSykKKyAgICBpZiAoIW1pbWVUeXBlIHx8IENG
U3RyaW5nQ29tcGFyZShtaW1lVHlwZS5nZXQoKSwgdXBkYXRlZE1JTUVUeXBlLmdldCgpLCBrQ0ZD
b21wYXJlQ2FzZUluc2Vuc2l0aXZlKSAhPSBrQ0ZDb21wYXJlRXF1YWxUbykKKyAgICAgICAgd2tT
ZXRDRlVSTFJlc3BvbnNlTUlNRVR5cGUoY2ZSZXNwb25zZSwgdXBkYXRlZE1JTUVUeXBlLmdldCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQXV0aGVudGljYXRpb25NYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbQppbmRleCAxZWM3
Nzc3ZDAwODBmMjI0M2U3ZjcwMjQ0NzBmYmUzOGE2MWUzMDA3Li5jOWMzMGY3YjY2MGNmNDFjMzEy
MTA3MWRkNGVjNTVhZjkxMjNlN2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbQpAQCAtNDMsNyArNDMsMTEg
QEAKIEBlbmQKIAogQGludGVyZmFjZSBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIChEZXRh
aWxzKQorI2lmIFBMQVRGT1JNKElPUykKKysoTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAq
KV9jcmVhdGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUZvckNGQXV0aENoYWxsZW5nZTooQ0ZVUkxB
dXRoQ2hhbGxlbmdlUmVmKWNmQ2hhbGxlbmdlIHNlbmRlcjooaWQgPE5TVVJMQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VTZW5kZXI+KXNlbmRlcjsKKyNlbHNlCiArKE5TVVJMQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UgKilfYXV0aGVudGljYXRpb25DaGFsbGVuZ2VGb3JDRkF1dGhDaGFsbGVuZ2U6KENG
VVJMQXV0aENoYWxsZW5nZVJlZiljZkNoYWxsZW5nZSBzZW5kZXI6KGlkIDxOU1VSTEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlU2VuZGVyPilzZW5kZXI7CisjZW5kaWYKIEBlbmQKIAogQGludGVyZmFj
ZSBOU1VSTENyZWRlbnRpYWwgKERldGFpbHMpCkBAIC0xNTQsNyArMTU4LDExIEBAIE5TVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgKm1hYyhjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y29yZUNoYWxsZW5nZSkKICAgICBpZiAoIWF1dGhDaGFsbGVuZ2UpCiAgICAgICAgIGF1dGhDaGFs
bGVuZ2UgPSBhZG9wdENGKGNyZWF0ZUNGKGNvcmVDaGFsbGVuZ2UpKTsKICAgICBbY2hhbGxlbmdl
U2VuZGVyLmdldCgpIHNldENGQ2hhbGxlbmdlOmF1dGhDaGFsbGVuZ2UuZ2V0KCldOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICByZXR1cm4gW1tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIF9j
cmVhdGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUZvckNGQXV0aENoYWxsZW5nZTphdXRoQ2hhbGxl
bmdlLmdldCgpIHNlbmRlcjpjaGFsbGVuZ2VTZW5kZXIuZ2V0KCldIGF1dG9yZWxlYXNlXTsKKyNl
bHNlCiAgICAgcmV0dXJuIFtbTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBfYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VGb3JDRkF1dGhDaGFsbGVuZ2U6YXV0aENoYWxsZW5nZS5nZXQoKSBzZW5k
ZXI6Y2hhbGxlbmdlU2VuZGVyLmdldCgpXSBhdXRvcmVsZWFzZV07CisjZW5kaWYKIH0KIAogTlNV
UkxDcmVkZW50aWFsICptYWMoY29uc3QgQ3JlZGVudGlhbCYgY29yZUNyZWRlbnRpYWwpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3Rv
cmFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0NyZWRlbnRp
YWxTdG9yYWdlTWFjLm1tCmluZGV4IGFhNWU3YWZmMjk0NTMzODViYzgzMWExY2I3ZDRlN2M4Yzhi
Yzg3M2YuLjAxMTMxNWIyOGI0NDViOWJkNzIyNWRmNmQ1OTY0ZjAxOGI3OWQ3NzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0NyZWRlbnRpYWxTdG9yYWdl
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0NyZWRlbnRp
YWxTdG9yYWdlTWFjLm1tCkBAIC0zOSw2ICszOSwxNyBAQCBDcmVkZW50aWFsIENyZWRlbnRpYWxT
dG9yYWdlOjpnZXRGcm9tUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBw
cgogICAgIHJldHVybiBjcmVkZW50aWFsID8gY29yZShjcmVkZW50aWFsKSA6IENyZWRlbnRpYWwo
KTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgQ3JlZGVudGlhbFN0b3JhZ2U6OnNhdmVU
b1BlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNl
LCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQoreworICAgIGlmIChjcmVkZW50aWFsLnBl
cnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSkgeworICAgICAgICBDcmVk
ZW50aWFsIHNlc3Npb25DcmVkZW50aWFsKGNyZWRlbnRpYWwsIENyZWRlbnRpYWxQZXJzaXN0ZW5j
ZUZvclNlc3Npb24pOworICAgICAgICBbW05TVVJMQ3JlZGVudGlhbFN0b3JhZ2Ugc2hhcmVkQ3Jl
ZGVudGlhbFN0b3JhZ2VdIHNldERlZmF1bHRDcmVkZW50aWFsOm1hYyhzZXNzaW9uQ3JlZGVudGlh
bCkgZm9yUHJvdGVjdGlvblNwYWNlOm1hYyhwcm90ZWN0aW9uU3BhY2UpXTsKKyAgICB9IGVsc2UK
KyAgICAgICAgW1tOU1VSTENyZWRlbnRpYWxTdG9yYWdlIHNoYXJlZENyZWRlbnRpYWxTdG9yYWdl
XSBzZXREZWZhdWx0Q3JlZGVudGlhbDptYWMoY3JlZGVudGlhbCkgZm9yUHJvdGVjdGlvblNwYWNl
Om1hYyhwcm90ZWN0aW9uU3BhY2UpXTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyAhVVNFKENGTkVUV09SSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlRXJyb3JNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUVycm9yTWFjLm1tCmluZGV4IGNlZjZj
ZGYzNDZlMGQyM2M3ZGYyYmM1NzBkMGEyYWM2NmYxNGQ0MmUuLmNjN2Y0NTQxNjZkNmQxZGU3ZTQ1
ZTc4YzkxYjZkNzJmZmIxZDljNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvbWFjL1Jlc291cmNlRXJyb3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VFcnJvck1hYy5tbQpAQCAtMzEsMTAgKzMxLDE0OCBA
QAogI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ0ZFcnJvci5oPgogI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxDRk5ldHdvcmsv
Q0ZTb2NrZXRTdHJlYW1Qcml2Lmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMRXJyb3IuaD4K
KyNlbmRpZgorCiBAaW50ZXJmYWNlIE5TRXJyb3IgKFdlYkV4dHJhcykKIC0gKE5TU3RyaW5nICop
X3dlYl9sb2NhbGl6ZWREZXNjcmlwdGlvbjsKIEBlbmQKIAorI2lmIFBMQVRGT1JNKElPUykKKwor
Ly8gVGhpcyB3b3JrYXJvdW5kIGNvZGUgZXhpc3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBjYWxs
IHRyYW5zbGF0ZVRvQ0ZFcnJvciBpbiBGb3VuZGF0aW9uLiBPbmNlIHdlCisvLyBoYXZlIHRoYXQs
IHdlIGNhbiByZW1vdmUgdGhpcyBjb2RlLiA8cmRhcjovL3Byb2JsZW0vOTgzNzQxNT4gTmVlZCBT
UEkgZm9yIHRyYW5zbGF0ZUNGRXJyb3IKKy8vIFRoZSBjb2RlIGlzIG1vc3RseSBpZGVudGljYWwg
dG8gRm91bmRhdGlvbiAtIEkgY2hhbmdlZCB0aGUgY2xhc3MgbmFtZSBhbmQgZml4ZWQgbWlub3Ig
Y29tcGlsZSBlcnJvcnMuCisvLyBXZSBuZWVkIHRoaXMgYmVjYXVzZSBjbGllbnQgY29kZSAoU2Fm
YXJpKSB3YW50cyBhbiBOU0Vycm9yIHdpdGggTlNVUkxFcnJvckRvbWFpbiBhcyBpdHMgZG9tYWlu
LgorLy8gVGhlIEZvdW5kYXRpb24gY29kZSBiZWxvdyBkb2VzIHRoYXQgYW5kIHNldHMgdXAgYXBw
cm9wcmlhdGUgY2VydGlmaWNhdGUga2V5cyBpbiB0aGUgTlNFcnJvci4KKworQGludGVyZmFjZSBX
ZWJDdXN0b21OU1VSTEVycm9yIDogTlNFcnJvcgorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
ZWJDdXN0b21OU1VSTEVycm9yCisKK3N0YXRpYyBOU0RpY3Rpb25hcnkqIGRpY3Rpb25hcnlUaGF0
Q2FuQ29kZShOU0RpY3Rpb25hcnkqIHNyYykKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG1ha2Vz
IGEgY29weSBvZiBpbnB1dCBkaWN0aW9uYXJ5LCBtb2RpZmllcyBpdCBzdWNoIHRoYXQgaXQgInNo
b3VsZCIgKGFzIG11Y2ggYXMgd2UgY2FuIGhlbHAgaXQpCisgICAgLy8gbm90IGNvbnRhaW4gYW55
IG9iamVjdHMgdGhhdCBkbyBub3QgY29uZm9ybSB0byBOU0NvZGluZyBwcm90b2NvbCwgYW5kIHJl
dHVybnMgaXQgYXV0b3JlbGVhc2VkLgorCisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSogZHN0ID0g
W3NyYyBtdXRhYmxlQ29weV07CisKKyAgICAvLyBLaWxsIHRoZSBrbm93biBwcm9ibGVtIGVudHJp
ZXMuCisgICAgW2RzdCByZW1vdmVPYmplY3RGb3JLZXk6QCJOU0Vycm9yUGVlckNlcnRpZmljYXRl
Q2hhaW5LZXkiXTsgLy8gTlNBcnJheSB3aXRoIFNlY0NlcnRpZmljYXRlUmVmIG9iamVjdHMKKyAg
ICBbZHN0IHJlbW92ZU9iamVjdEZvcktleTpAIk5TRXJyb3JDbGllbnRDZXJ0aWZpY2F0ZUNoYWlu
S2V5Il07IC8vIE5TQXJyYXkgd2l0aCBTZWNDZXJ0aWZpY2F0ZVJlZiBvYmplY3RzCisgICAgW2Rz
dCByZW1vdmVPYmplY3RGb3JLZXk6TlNVUkxFcnJvckZhaWxpbmdVUkxQZWVyVHJ1c3RFcnJvcktl
eV07IC8vIFNlY1RydXN0UmVmIG9iamVjdAorICAgIFtkc3QgcmVtb3ZlT2JqZWN0Rm9yS2V5Ok5T
VW5kZXJseWluZ0Vycm9yS2V5XTsgLy8gKEltbXV0YWJsZSkgQ0ZFcnJvciBjb250YWluaW5nIGtD
RiBlcXVpdmFsZW50IG9mIHRoZSBhYm92ZQorICAgIC8vIFdlIGNvdWxkIHJlY29uc3RpdHV0ZSB0
aGlzIGJ1dCBpdCdzIG1vcmUgdHJvdWJsZSB0aGFuIGl0J3Mgd29ydGgKKworICAgIC8vIE5vbi1j
b21wcmVoZW5zaXZlIHNhZmV0eSBjaGVjazogIEtpbGwgdG9wLWxldmVsIGRpY3Rpb25hcnkgZW50
cmllcyB0aGF0IGRvbid0IGNvbmZvcm0gdG8gTlNDb2RpbmcuCisgICAgLy8gV2UgbWF5IGhpdCBv
bmVzIHdlIGp1c3QgcmVtb3ZlZCwgYnV0IHRoYXQncyBmaW5lLgorICAgIC8vIFdlIGRvbid0IGhh
bmRsZSBhcmJpdHJhcnkgb2JqZWN0cyB0aGF0IGNsaWVudHMgaGF2ZSBzdHVmZmVkIGludG8gdGhl
IGRpY3Rpb25hcnksIHNpbmNlIHdlIG1heSBub3Qga25vdyBob3cgdG8KKyAgICAvLyBnZXQgYXQg
aXRzIGNvbmVudHMgKGUuZy4sIGEgQ0ZFcnJvciBvYmplY3QgLS0geW91J2QgaGF2ZSB0byBrbm93
IGl0IGhhZCBhIHVzZXJJbmZvIGRpY3Rpb25hcnkgYW5kIGtpbGwgdGhpbmdzCisgICAgLy8gaW5z
aWRlIGl0KS4KKyAgICBbc3JjIGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKGlk
IGtleSwgaWQgb2JqLCBCT09MKikgeworICAgICAgICBpZiAoISBbb2JqIGNvbmZvcm1zVG9Qcm90
b2NvbDpAcHJvdG9jb2woTlNDb2RpbmcpXSkgeworICAgICAgICAgICAgW2RzdCByZW1vdmVPYmpl
Y3RGb3JLZXk6a2V5XTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgZHJp
bGwgZG93biBpbnRvIHN1YmRpY3Rpb25hcmllcywgYnV0IGl0IHNlZW1zIG1vcmUgdHJvdWJsZSB0
aGFuIGl0J3Mgd29ydGgKKyAgICB9XTsKKworICAgIHJldHVybiBbZHN0IGF1dG9yZWxlYXNlXTsK
K30KKworLSAodm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2RlcgoreworICAgIE5T
RGljdGlvbmFyeSogbmV3VXNlckluZm8gPSBkaWN0aW9uYXJ5VGhhdENhbkNvZGUoW3NlbGYgdXNl
ckluZm9dKTsKKworICAgIFtbTlNFcnJvciBlcnJvcldpdGhEb21haW46W3NlbGYgZG9tYWluXSBj
b2RlOltzZWxmIGNvZGVdIHVzZXJJbmZvOm5ld1VzZXJJbmZvXSBlbmNvZGVXaXRoQ29kZXI6Y29k
ZXJdOworfQorCitAZW5kCisKKworI2lmIFVTRShDRk5FVFdPUkspCitzdGF0aWMgTlNFcnJvciAq
TlNFcnJvckZyb21DRkVycm9yKENGRXJyb3JSZWYgY2ZFcnJvciwgTlNVUkwgKnVybCkKK3sKKyAg
ICBDRkluZGV4IGVyckNvZGUgPSBDRkVycm9yR2V0Q29kZShjZkVycm9yKTsKKyAgICBpZiAoQ0ZF
cXVhbChDRkVycm9yR2V0RG9tYWluKGNmRXJyb3IpLCBrQ0ZFcnJvckRvbWFpbkNGTmV0d29yaykg
JiYgZXJyQ29kZSA8PSBrQ0ZVUkxFcnJvclVua25vd24gJiYgZXJyQ29kZSA+IC00MDAwKSB7Cisg
ICAgICAgIC8vIFRoaXMgaXMgYW4gVVJMIGVycm9yIGFuZCBuZWVkcyB0byBiZSB0cmFuc2xhdGVk
IHRvIHRoZSBOU1VSTEVycm9yRG9tYWluCisgICAgICAgIGlkIGtleXNbMTBdLCB2YWx1ZXNbMTBd
OworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgdXNlckluZm8gPSBDRkVycm9yQ29weVVzZXJJbmZv
KGNmRXJyb3IpOworICAgICAgICBOU0Vycm9yICpyZXN1bHQ7CisgICAgICAgIE5TSW50ZWdlciBj
b3VudCA9IDA7CisKKyAgICAgICAgaWYgKHVybCkgeworICAgICAgICAgICAga2V5c1tjb3VudF0g
PSBOU1VSTEVycm9yRmFpbGluZ1VSTEVycm9yS2V5OworICAgICAgICAgICAgdmFsdWVzW2NvdW50
XSA9IHVybDsKKyAgICAgICAgICAgIGNvdW50ICsrOworCisgICAgICAgICAgICBrZXlzW2NvdW50
XSA9IE5TVVJMRXJyb3JGYWlsaW5nVVJMU3RyaW5nRXJyb3JLZXk7CisgICAgICAgICAgICB2YWx1
ZXNbY291bnRdID0gW3VybCBhYnNvbHV0ZVN0cmluZ107CisgICAgICAgICAgICBjb3VudCArKzsK
KyAgICAgICAgfQorCisgICAgICAgIHZhbHVlc1tjb3VudF0gPSAoaWQpQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUodXNlckluZm8sIGtDRkVycm9yTG9jYWxpemVkRGVzY3JpcHRpb25LZXkpOworICAgICAg
ICBpZiAodmFsdWVzW2NvdW50XSkgeworICAgICAgICAgICAga2V5c1tjb3VudF0gPSBOU0xvY2Fs
aXplZERlc2NyaXB0aW9uS2V5OworICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKwor
ICAgICAgICB2YWx1ZXNbY291bnRdID0gKGlkKUNGRGljdGlvbmFyeUdldFZhbHVlKHVzZXJJbmZv
LCBrQ0ZFcnJvckxvY2FsaXplZEZhaWx1cmVSZWFzb25LZXkpOworICAgICAgICBpZiAodmFsdWVz
W2NvdW50XSkgeworICAgICAgICAgICAga2V5c1tjb3VudF0gPSBOU0xvY2FsaXplZEZhaWx1cmVS
ZWFzb25FcnJvcktleTsKKyAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICB9CisKKyAgICAg
ICAgdmFsdWVzW2NvdW50XSA9IChpZClDRkRpY3Rpb25hcnlHZXRWYWx1ZSh1c2VySW5mbywga0NG
RXJyb3JMb2NhbGl6ZWRSZWNvdmVyeVN1Z2dlc3Rpb25LZXkpOworICAgICAgICBpZiAodmFsdWVz
W2NvdW50XSkgeworICAgICAgICAgICAga2V5c1tjb3VudF0gPSBOU0xvY2FsaXplZFJlY292ZXJ5
U3VnZ2VzdGlvbkVycm9yS2V5OworICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKwor
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBp
Z25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgICAgICBpZiAodXNlckluZm8g
JiYgKHZhbHVlc1tjb3VudF0gPSAoaWQpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUodXNlckluZm8sIGtD
RlN0cmVhbVByb3BlcnR5U1NMUGVlckNlcnRpZmljYXRlcykpICE9IG5pbCkgeworICAgICAgICAg
ICAgLy8gTmVlZCB0byB0cmFuc2xhdGUgdGhlIGNlcnQKKyAgICAgICAgICAgIGtleXNbY291bnRd
ID0gQCJOU0Vycm9yUGVlckNlcnRpZmljYXRlQ2hhaW5LZXkiOworICAgICAgICAgICAgY291bnQg
Kys7CisKKyAgICAgICAgICAgIHZhbHVlc1tjb3VudF0gPSAoaWQpQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUodXNlckluZm8sIF9rQ0ZTdHJlYW1Qcm9wZXJ0eVNTTENsaWVudENlcnRpZmljYXRlcyk7Cisg
ICAgICAgICAgICBpZiAodmFsdWVzW2NvdW50XSkgeworICAgICAgICAgICAgICAgIGtleXNbY291
bnRdID0gQCJOU0Vycm9yQ2xpZW50Q2VydGlmaWNhdGVDaGFpbktleSI7CisgICAgICAgICAgICAg
ICAgY291bnQgKys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhbHVlc1tjb3VudF0g
PSAoaWQpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUodXNlckluZm8sIF9rQ0ZTdHJlYW1Qcm9wZXJ0eVNT
TENsaWVudENlcnRpZmljYXRlU3RhdGUpOworICAgICAgICAgICAgaWYgKHZhbHVlc1tjb3VudF0p
IHsKKyAgICAgICAgICAgICAgICBrZXlzW2NvdW50XSA9IEAiTlNFcnJvckNsaWVudENlcnRpZmlj
YXRlU3RhdGVLZXkiOworICAgICAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisKKyAgICAgICAgaWYgKHVz
ZXJJbmZvICYmICh2YWx1ZXNbY291bnRdID0gKGlkKUNGRGljdGlvbmFyeUdldFZhbHVlKHVzZXJJ
bmZvLCBrQ0ZTdHJlYW1Qcm9wZXJ0eVNTTFBlZXJUcnVzdCkpICE9IG5pbCkgeworICAgICAgICAg
ICAga2V5c1tjb3VudF0gPSBOU1VSTEVycm9yRmFpbGluZ1VSTFBlZXJUcnVzdEVycm9yS2V5Owor
ICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIGtleXNbY291bnRdID0g
TlNVbmRlcmx5aW5nRXJyb3JLZXk7CisgICAgICAgIHZhbHVlc1tjb3VudF0gPSAoaWQpY2ZFcnJv
cjsKKyAgICAgICAgY291bnQgKys7CisKKyAgICAgICAgcmVzdWx0ID0gW1dlYkN1c3RvbU5TVVJM
RXJyb3IgZXJyb3JXaXRoRG9tYWluOk5TVVJMRXJyb3JEb21haW4gY29kZTooZXJyQ29kZSA9PSBr
Q0ZVUkxFcnJvclVua25vd24gPyAoQ0ZJbmRleClOU1VSTEVycm9yVW5rbm93biA6IGVyckNvZGUp
IHVzZXJJbmZvOltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzOnZhbHVlcyBmb3JL
ZXlzOmtleXMgY291bnQ6Y291bnRdXTsKKyAgICAgICAgaWYgKHVzZXJJbmZvKQorICAgICAgICAg
ICAgQ0ZSZWxlYXNlKHVzZXJJbmZvKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgcmV0dXJuIChOU0Vycm9yICopY2ZFcnJvcjsKK30KKyNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JL
KQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyBSZXRhaW5QdHI8TlNFcnJvcj4gY3JlYXRlTlNFcnJvckZyb21SZXNvdXJjZUVycm9yQmFz
ZShjb25zdCBSZXNvdXJjZUVycm9yQmFzZSYgcmVzb3VyY2VFcnJvcikKQEAgLTc3LDYgKzIxNSwx
NCBAQCBOU0Vycm9yICpSZXNvdXJjZUVycm9yOjpuc0Vycm9yKCkgY29uc3QKICAgICBpZiAobV9w
bGF0Zm9ybUVycm9yKSB7CiAgICAgICAgIENGRXJyb3JSZWYgZXJyb3IgPSBtX3BsYXRmb3JtRXJy
b3IuZ2V0KCk7CiAgICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHVzZXJJbmZvID0g
YWRvcHRDRihDRkVycm9yQ29weVVzZXJJbmZvKGVycm9yKSk7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICAgICBtX3BsYXRmb3JtTlNFcnJvciA9IE5TRXJyb3JGcm9tQ0ZFcnJvcihlcnJvciwgKE5T
VVJMICopWyhOU0RpY3Rpb25hcnkgKil1c2VySW5mby5nZXQoKSBvYmplY3RGb3JLZXk6KGlkKSBr
Q0ZVUkxFcnJvckZhaWxpbmdVUkxFcnJvcktleV0pOworICAgICAgICAvLyBJZiBOU0Vycm9yRnJv
bUNGRXJyb3IgY3JlYXRlZCBhIG5ldyBOU0Vycm9yIGZvciB1cywgcmV0dXJuIHRoYXQuCisgICAg
ICAgIGlmIChtX3BsYXRmb3JtTlNFcnJvci5nZXQoKSAhPSAoTlNFcnJvciAqKWVycm9yKQorICAg
ICAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1OU0Vycm9yLmdldCgpOworCisgICAgICAgIC8vIE90
aGVyd2lzZSBmYWxsIHRocm91Z2ggdG8gY3JlYXRlIGEgbmV3IE5TRXJyb3IgZnJvbSB0aGUgQ0ZF
cnJvci4KKyNlbmRpZgogICAgICAgICBtX3BsYXRmb3JtTlNFcnJvciA9IGFkb3B0TlMoW1tOU0Vy
cm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjooTlNTdHJpbmcgKilDRkVycm9yR2V0RG9tYWluKGVy
cm9yKSBjb2RlOkNGRXJyb3JHZXRDb2RlKGVycm9yKSB1c2VySW5mbzooTlNEaWN0aW9uYXJ5ICop
dXNlckluZm8uZ2V0KCldKTsKICAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1OU0Vycm9yLmdldCgp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFj
L1Jlc291cmNlSGFuZGxlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9t
YWMvUmVzb3VyY2VIYW5kbGVNYWMubW0KaW5kZXggZTczYzY1ZDIyNzdkOTg5MjJlNjc4ZWM2NWJl
ZjhmOGM3YTkwZWI0Yi4uM2QwNDUxODEzMTcxYTFiNzgyM2IxMTZiZjM1ZGYxMTY5NWM1MjRjNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VI
YW5kbGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVz
b3VyY2VIYW5kbGVNYWMubW0KQEAgLTU2LDYgKzU2LDIxIEBACiAjaW1wb3J0IDx3dGYvdGV4dC9C
YXNlNjQuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElP
UykKKyNpbXBvcnQgPENGTmV0d29yay9DRlVSTFJlcXVlc3QuaD4KKworI2ltcG9ydCAiUnVudGlt
ZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgiCisjaW1wb3J0ICJXZWJDb3JlVGhyZWFkUnVuLmgiCisK
K0BpbnRlcmZhY2UgTlNVUkxSZXF1ZXN0IChpT1NEZXRhaWxzKQorLSAoQ0ZVUkxSZXF1ZXN0UmVm
KSBfQ0ZVUkxSZXF1ZXN0OworQGVuZAorI2VuZGlmCisKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyNp
bXBvcnQgIlF1aWNrTG9vay5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBAaW50ZXJmYWNlIE5TVVJMQ29ubmVjdGlvbiAoRGV0YWlscykKQEAgLTk0LDcgKzEwOSwxOSBA
QCBSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKCkKICAgICBMT0coTmV0d29yaywgIkhh
bmRsZSAlcCBkZXN0cm95ZWQiLCB0aGlzKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRp
YyBib29sIHN5bmNocm9ub3VzV2lsbFNlbmRSZXF1ZXN0RW5hYmxlZCgpCit7CisgICAgc3RhdGlj
IGJvb2wgZGlzYWJsZWQgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBi
b29sRm9yS2V5OkAiV2ViS2l0RGlzYWJsZVN5bmNocm9ub3VzV2lsbFNlbmRSZXF1ZXN0UHJlZmVy
ZW5jZUtleSJdOworICAgIHJldHVybiAhZGlzYWJsZWQ7Cit9CisjZW5kaWYKKworI2lmICFQTEFU
Rk9STShJT1MpCiB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVOU1VSTENvbm5lY3Rpb24oaWQg
ZGVsZWdhdGUsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGJvb2wgc2hvdWxkQ29u
dGVudFNuaWZmKQorI2Vsc2UKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVj
dGlvbihpZCBkZWxlZ2F0ZSwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbCBz
aG91bGRDb250ZW50U25pZmYsIE5TRGljdGlvbmFyeSAqY29ubmVjdGlvblByb3BlcnRpZXMpCisj
ZW5kaWYKIHsKICAgICAvLyBDcmVkZW50aWFscyBmb3IgZnRwIGNhbiBvbmx5IGJlIHBhc3NlZCBp
biBVUkwsIHRoZSBjb25uZWN0aW9uOmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTog
ZGVsZWdhdGUgY2FsbCB3b24ndCBiZSBtYWRlLgogICAgIGlmICgoIWQtPm1fdXNlci5pc0VtcHR5
KCkgfHwgIWQtPm1fcGFzcy5pc0VtcHR5KCkpICYmICFmaXJzdFJlcXVlc3QoKS51cmwoKS5wcm90
b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKQEAgLTEzNCwxOSArMTYxLDMzIEBAIHZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbihpZCBkZWxlZ2F0ZSwgYm9vbCBzaG91bGRV
c2VDcmVkZW50aWFsCiAKICAgICBBU1NFUlQoW05TVVJMQ29ubmVjdGlvbiBpbnN0YW5jZXNSZXNw
b25kVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2luaXRXaXRoUmVxdWVzdDpkZWxlZ2F0ZTp1c2VzQ2Fj
aGU6bWF4Q29udGVudExlbmd0aDpzdGFydEltbWVkaWF0ZWx5OmNvbm5lY3Rpb25Qcm9wZXJ0aWVz
OildKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBOU0RpY3Rpb25hcnkgKnN0cmVhbVByb3Bl
cnRpZXNGcm9tQ2xpZW50ID0gW2Nvbm5lY3Rpb25Qcm9wZXJ0aWVzIG9iamVjdEZvcktleTpAImtD
RlVSTENvbm5lY3Rpb25Tb2NrZXRTdHJlYW1Qcm9wZXJ0aWVzIl07CisgICAgTlNNdXRhYmxlRGlj
dGlvbmFyeSAqc3RyZWFtUHJvcGVydGllcyA9IHN0cmVhbVByb3BlcnRpZXNGcm9tQ2xpZW50ID8g
W1tzdHJlYW1Qcm9wZXJ0aWVzRnJvbUNsaWVudCBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdIDog
W05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07CisjZWxzZQogICAgIE5TTXV0YWJsZURp
Y3Rpb25hcnkgKnN0cmVhbVByb3BlcnRpZXMgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9u
YXJ5XTsKKyNlbmRpZgogCiAgICAgaWYgKCFzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKICAg
ICAgICAgW3N0cmVhbVByb3BlcnRpZXMgc2V0T2JqZWN0OkAiV2ViS2l0UHJpdmF0ZVNlc3Npb24i
IGZvcktleTpAIl9rQ0ZVUkxDb25uZWN0aW9uU2Vzc2lvbklEIl07CiAKLSNpZiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IHNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhID0gZC0+bV9jb250ZXh0LT5zb3VyY2VBcHBs
aWNhdGlvbkF1ZGl0RGF0YSgpOwogICAgIGlmIChzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSkK
ICAgICAgICAgW3N0cmVhbVByb3BlcnRpZXMgc2V0T2JqZWN0OihOU0RhdGEgKilzb3VyY2VBcHBs
aWNhdGlvbkF1ZGl0RGF0YS5nZXQoKSBmb3JLZXk6QCJrQ0ZTdHJlYW1Qcm9wZXJ0eVNvdXJjZUFw
cGxpY2F0aW9uIl07CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBOU011dGFibGVE
aWN0aW9uYXJ5ICpwcm9wZXJ0eURpY3Rpb25hcnkgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aERpY3Rpb25hcnk6Y29ubmVjdGlvblByb3BlcnRpZXNdOworICAgIFtwcm9wZXJ0
eURpY3Rpb25hcnkgc2V0T2JqZWN0OnN0cmVhbVByb3BlcnRpZXMgZm9yS2V5OkAia0NGVVJMQ29u
bmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMiXTsKKyAgICBjb25zdCBib29sIHVzZXNDYWNo
ZSA9IGZhbHNlOworICAgIGlmIChzeW5jaHJvbm91c1dpbGxTZW5kUmVxdWVzdEVuYWJsZWQoKSkK
KyAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0U2hvdWxkU3RhcnRTeW5jaHJvbm91c2x5KFtuc1JlcXVl
c3QgX0NGVVJMUmVxdWVzdF0sIDEpOworI2Vsc2UKICAgICBOU0RpY3Rpb25hcnkgKnByb3BlcnR5
RGljdGlvbmFyeSA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6c3RyZWFtUHJv
cGVydGllcyBmb3JLZXk6QCJrQ0ZVUkxDb25uZWN0aW9uU29ja2V0U3RyZWFtUHJvcGVydGllcyJd
OwotICAgIGQtPm1fY29ubmVjdGlvbiA9IGFkb3B0TlMoW1tOU1VSTENvbm5lY3Rpb24gYWxsb2Nd
IF9pbml0V2l0aFJlcXVlc3Q6bnNSZXF1ZXN0IGRlbGVnYXRlOmRlbGVnYXRlIHVzZXNDYWNoZTpZ
RVMgbWF4Q29udGVudExlbmd0aDowIHN0YXJ0SW1tZWRpYXRlbHk6Tk8gY29ubmVjdGlvblByb3Bl
cnRpZXM6cHJvcGVydHlEaWN0aW9uYXJ5XSk7CisgICAgY29uc3QgYm9vbCB1c2VzQ2FjaGUgPSB0
cnVlOworI2VuZGlmCisgICAgZC0+bV9jb25uZWN0aW9uID0gYWRvcHROUyhbW05TVVJMQ29ubmVj
dGlvbiBhbGxvY10gX2luaXRXaXRoUmVxdWVzdDpuc1JlcXVlc3QgZGVsZWdhdGU6ZGVsZWdhdGUg
dXNlc0NhY2hlOnVzZXNDYWNoZSBtYXhDb250ZW50TGVuZ3RoOjAgc3RhcnRJbW1lZGlhdGVseTpO
TyBjb25uZWN0aW9uUHJvcGVydGllczpwcm9wZXJ0eURpY3Rpb25hcnldKTsKIH0KIAogYm9vbCBS
ZXNvdXJjZUhhbmRsZTo6c3RhcnQoKQpAQCAtMTY4LDExICsyMDksMjQgQEAgYm9vbCBSZXNvdXJj
ZUhhbmRsZTo6c3RhcnQoKQogCiAgICAgZC0+bV9uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyA9IGQt
Pm1fY29udGV4dC0+bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKTsKIAorI2lmICFQTEFURk9STShJ
T1MpCiAgICAgY3JlYXRlTlNVUkxDb25uZWN0aW9uKAogICAgICAgICBSZXNvdXJjZUhhbmRsZTo6
ZGVsZWdhdGUoKSwKICAgICAgICAgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsCiAgICAgICAg
IGQtPm1fc2hvdWxkQ29udGVudFNuaWZmIHx8IGQtPm1fY29udGV4dC0+bG9jYWxGaWxlQ29udGVu
dFNuaWZmaW5nRW5hYmxlZCgpKTsKKyNlbHNlCisgICAgY3JlYXRlTlNVUkxDb25uZWN0aW9uKAor
ICAgICAgICBkLT5tX3Byb3h5LmdldCgpLAorICAgICAgICBzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZSwKKyAgICAgICAgZC0+bV9zaG91bGRDb250ZW50U25pZmYgfHwgZC0+bV9jb250ZXh0LT5s
b2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCksCisgICAgICAgIChOU0RpY3Rpb25hcnkg
KiljbGllbnQoKS0+Y29ubmVjdGlvblByb3BlcnRpZXModGhpcykpOworI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgTlNVUkxDb25uZWN0aW9uICp1cmxDb25uZWN0aW9uID0gY29ubmVj
dGlvbigpOworICAgIFt1cmxDb25uZWN0aW9uIHNjaGVkdWxlSW5SdW5Mb29wOldlYlRocmVhZE5T
UnVuTG9vcCgpIGZvck1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGVdOworICAgIFt1cmxDb25uZWN0
aW9uIHN0YXJ0XTsKKyNlbHNlCiAgICAgYm9vbCBzY2hlZHVsZWQgPSBmYWxzZTsKICAgICBpZiAo
U2NoZWR1bGVQYWlySGFzaFNldCogc2NoZWR1bGVkUGFpcnMgPSBkLT5tX2NvbnRleHQtPnNjaGVk
dWxlZFJ1bkxvb3BQYWlycygpKSB7CiAgICAgICAgIFNjaGVkdWxlUGFpckhhc2hTZXQ6Oml0ZXJh
dG9yIGVuZCA9IHNjaGVkdWxlZFBhaXJzLT5lbmQoKTsKQEAgLTE5Niw2ICsyNTAsNyBAQCBib29s
IFJlc291cmNlSGFuZGxlOjpzdGFydCgpCiAgICAgICAgIFtjb25uZWN0aW9uKCkgc3RhcnRdOwog
ICAgIGVsc2UKICAgICAgICAgZC0+bV9zdGFydFdoZW5TY2hlZHVsZWQgPSB0cnVlOworI2VuZGlm
CiAKICAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBzdGFydGluZyBjb25uZWN0aW9uICVwIGZv
ciAlQCIsIHRoaXMsIGNvbm5lY3Rpb24oKSwgZmlyc3RSZXF1ZXN0KCkubnNVUkxSZXF1ZXN0KERv
Tm90VXBkYXRlSFRUUEJvZHkpKTsKICAgICAKQEAgLTIzMCw2ICsyODUsNyBAQCB2b2lkIFJlc291
cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCiAKIHZvaWQg
UmVzb3VyY2VIYW5kbGU6OnNjaGVkdWxlKFNjaGVkdWxlUGFpciogcGFpcikKIHsKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIE5TUnVuTG9vcCAqcnVuTG9vcCA9IHBhaXItPm5zUnVuTG9vcCgpOwog
ICAgIGlmICghcnVuTG9vcCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4LDEyICsyOTQsMTkgQEAg
dm9pZCBSZXNvdXJjZUhhbmRsZTo6c2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBwYWlyKQogICAgICAg
ICBbZC0+bV9jb25uZWN0aW9uLmdldCgpIHN0YXJ0XTsKICAgICAgICAgZC0+bV9zdGFydFdoZW5T
Y2hlZHVsZWQgPSBmYWxzZTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWlyKTsK
KyNlbmRpZgogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjp1bnNjaGVkdWxlKFNjaGVkdWxlUGFp
ciogcGFpcikKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChOU1J1bkxvb3AgKnJ1bkxv
b3AgPSBwYWlyLT5uc1J1bkxvb3AoKSkKICAgICAgICAgW2QtPm1fY29ubmVjdGlvbi5nZXQoKSB1
bnNjaGVkdWxlRnJvbVJ1bkxvb3A6cnVuTG9vcCBmb3JNb2RlOihOU1N0cmluZyAqKXBhaXItPm1v
ZGUoKV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWlyKTsKKyNlbmRpZgogfQogCiBpZCBS
ZXNvdXJjZUhhbmRsZTo6ZGVsZWdhdGUoKQpAQCAtMjk5LDEwICszNjIsMTkgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmICFQTEFURk9STShJ
T1MpCiAgICAgaGFuZGxlLT5jcmVhdGVOU1VSTENvbm5lY3Rpb24oCiAgICAgICAgIGhhbmRsZS0+
ZGVsZWdhdGUoKSwKICAgICAgICAgc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVk
ZW50aWFscywKICAgICAgICAgaGFuZGxlLT5zaG91bGRDb250ZW50U25pZmYoKSB8fCBjb250ZXh0
LT5sb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkpOworI2Vsc2UKKyAgICBoYW5kbGUt
PmNyZWF0ZU5TVVJMQ29ubmVjdGlvbigKKyAgICAgICAgaGFuZGxlLT5kZWxlZ2F0ZSgpLCAvLyBB
IHN5bmNocm9ub3VzIHJlcXVlc3QgY2Fubm90IHR1cm4gaW50byBhIGRvd25sb2FkLCBzbyB0aGVy
ZSBpcyBubyBuZWVkIHRvIHByb3h5IHRoZSBkZWxlZ2F0ZS4KKyAgICAgICAgc3RvcmVkQ3JlZGVu
dGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscywKKyAgICAgICAgc2hvdWxkUmVsYXhUaGly
ZFBhcnR5Q29va2llUG9saWN5KGNvbnRleHQsIHJlcXVlc3QudXJsKCkpLAorICAgICAgICBoYW5k
bGUtPnNob3VsZENvbnRlbnRTbmlmZigpIHx8IChjb250ZXh0ICYmIGNvbnRleHQtPmxvY2FsRmls
ZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSksCisgICAgICAgIChOU0RpY3Rpb25hcnkgKiloYW5k
bGUtPmNsaWVudCgpLT5jb25uZWN0aW9uUHJvcGVydGllcyhoYW5kbGUuZ2V0KCkpKTsKKyNlbmRp
ZgogCiAgICAgW2hhbmRsZS0+Y29ubmVjdGlvbigpIHNjaGVkdWxlSW5SdW5Mb29wOltOU1J1bkxv
b3AgY3VycmVudFJ1bkxvb3BdIGZvck1vZGU6KE5TU3RyaW5nICopc3luY2hyb25vdXNMb2FkUnVu
TG9vcE1vZGUoKV07CiAgICAgW2hhbmRsZS0+Y29ubmVjdGlvbigpIHN0YXJ0XTsKQEAgLTQ5Miw2
ICs1NjQsMTkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGwKICAgICAgICAgfQogICAgIH0KIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBJZiB0aGUgY2hhbGxlbmdlIGlzIGZvciBhIHByb3h5
IHByb3RlY3Rpb24gc3BhY2UsIGxvb2sgZm9yIGRlZmF1bHQgY3JlZGVudGlhbHMgaW4KKyAgICAv
LyB0aGUga2V5Y2hhaW4uICBDRk5ldHdvcmsgdXNlZCB0byBoYW5kbGUgdGhpcyB1bnRpbCBXZWJD
b3JlIHdhcyBjaGFuZ2VkIHRvIGFsd2F5cworICAgIC8vIHJldHVybiBOTyB0byAtY29ubmVjdGlv
blNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlOiBmb3IgPHJkYXI6Ly9wcm9ibGVtLzc3MDQ5NDM+
LgorICAgIGlmICghY2hhbGxlbmdlLnByZXZpb3VzRmFpbHVyZUNvdW50KCkgJiYgY2hhbGxlbmdl
LnByb3RlY3Rpb25TcGFjZSgpLmlzUHJveHkoKSkgeworICAgICAgICBOU1VSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlICptYWNDaGFsbGVuZ2UgPSBtYWMoY2hhbGxlbmdlKTsKKyAgICAgICAgaWYg
KE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCA9IFtbTlNVUkxDcmVkZW50aWFsU3RvcmFnZSBz
aGFyZWRDcmVkZW50aWFsU3RvcmFnZV0gZGVmYXVsdENyZWRlbnRpYWxGb3JQcm90ZWN0aW9uU3Bh
Y2U6W21hY0NoYWxsZW5nZSBwcm90ZWN0aW9uU3BhY2VdXSkgeworICAgICAgICAgICAgW2NoYWxs
ZW5nZS5zZW5kZXIoKSB1c2VDcmVkZW50aWFsOmNyZWRlbnRpYWwgZm9yQXV0aGVudGljYXRpb25D
aGFsbGVuZ2U6bWFjQ2hhbGxlbmdlXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKICAgICBkLT5tX2N1cnJlbnRNYWNDaGFs
bGVuZ2UgPSBjaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpOwogICAgIGQt
Pm1fY3VycmVudFdlYkNoYWxsZW5nZSA9IGNvcmUoZC0+bV9jdXJyZW50TWFjQ2hhbGxlbmdlKTsK
ICAgICBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2Uuc2V0QXV0aGVudGljYXRpb25DbGllbnQodGhp
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNv
dXJjZVJlcXVlc3RNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9S
ZXNvdXJjZVJlcXVlc3RNYWMubW0KaW5kZXggODY5MTQwNTBmYmZkYjhhNmE1ZmU3YmJjOWEzODBm
ODgyOGZjNDEyMi4uM2M3OGM2ODYxMDU0MzJhZmJiMjhiYzNiMTdiMTdlODI4ZTQ5NjdiZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1
ZXN0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291
cmNlUmVxdWVzdE1hYy5tbQpAQCAtNTksNiArNTksOSBAQCBOU1VSTFJlcXVlc3QgKlJlc291cmNl
UmVxdWVzdDo6bnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5IGJvZHlQb2xpY3kpIGNv
bgogCiBSZXNvdXJjZVJlcXVlc3Q6OlJlc291cmNlUmVxdWVzdChOU1VSTFJlcXVlc3QgKm5zUmVx
dWVzdCkKICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoKQorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAsIG1fbWFpblJlc291cmNlUmVxdWVzdChmYWxzZSkKKyNlbmRpZgogICAgICwgbV9jZlJlcXVl
c3QoW25zUmVxdWVzdCBfQ0ZVUkxSZXF1ZXN0XSkKICAgICAsIG1fbnNSZXF1ZXN0KG5zUmVxdWVz
dCkKIHsKQEAgLTY2LDggKzY5LDI1IEBAIFJlc291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1ZXN0
KE5TVVJMUmVxdWVzdCAqbnNSZXF1ZXN0KQogCiB2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBkYXRl
TlNVUkxSZXF1ZXN0KCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gVGhlcmUgaXMgY2xp
ZW50IGNvZGUgdGhhdCBleHRlbmRzIE5TVVJMUmVxdWVzdCBhbmQgZXhwZWN0cyB0byBnZXQgYmFj
aywgaW4gdGhlIGRlbGVnYXRlCisgICAgLy8gY2FsbGJhY2tzLCBhbiBvYmplY3Qgb2YgdGhlIHNh
bWUgdHlwZSB0aGF0IHRoZXkgcGFzc2VkIGludG8gV2ViS2l0LiBUbyBrZWVwIHRoZW4gcnVubmlu
Zywgd2UKKyAgICAvLyBjcmVhdGUgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYW5kIHJldHVy
biB0aGF0LiBTZWUgPHJkYXI6Ly85ODQzNTgyPi4KKyAgICAvLyBBbHNvLCBkZXZlbG9wZXJzIHJl
YWxseSByZWFsbHkgd2FudCBhbiBOU011dGFibGVVUkxSZXF1ZXN0IHNvIHRyeSB0byBjcmVhdGUg
YW4KKyAgICAvLyBOU011dGFibGVVUkxSZXF1ZXN0IGluc3RlYWQgb2YgTlNVUkxSZXF1ZXN0Lgor
ICAgIHN0YXRpYyBDbGFzcyBuc1VSTFJlcXVlc3RDbGFzcyA9IFtOU1VSTFJlcXVlc3QgY2xhc3Nd
OworICAgIHN0YXRpYyBDbGFzcyBuc011dGFibGVVUkxSZXF1ZXN0Q2xhc3MgPSBbTlNNdXRhYmxl
VVJMUmVxdWVzdCBjbGFzc107CisgICAgQ2xhc3MgcmVxdWVzdENsYXNzID0gW21fbnNSZXF1ZXN0
LmdldCgpIGNsYXNzXTsKKworICAgIGlmICghcmVxdWVzdENsYXNzIHx8IHJlcXVlc3RDbGFzcyA9
PSBuc1VSTFJlcXVlc3RDbGFzcykKKyAgICAgICAgcmVxdWVzdENsYXNzID0gbnNNdXRhYmxlVVJM
UmVxdWVzdENsYXNzOworCisgICAgaWYgKG1fY2ZSZXF1ZXN0KQorICAgICAgICBtX25zUmVxdWVz
dCA9IGFkb3B0TlMoW1tyZXF1ZXN0Q2xhc3MgYWxsb2NdIF9pbml0V2l0aENGVVJMUmVxdWVzdDpt
X2NmUmVxdWVzdC5nZXQoKV0pOworI2Vsc2UKICAgICBpZiAobV9jZlJlcXVlc3QpCiAgICAgICAg
IG1fbnNSZXF1ZXN0ID0gYWRvcHROUyhbW05TVVJMUmVxdWVzdCBhbGxvY10gX2luaXRXaXRoQ0ZV
UkxSZXF1ZXN0Om1fY2ZSZXF1ZXN0LmdldCgpXSk7CisjZW5kaWYKIH0KIAogI2Vsc2UKQEAgLTIz
Miw4ICsyNTIsMTAgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZUZyb21EZWxlZ2F0ZVBy
ZXNlcnZpbmdPbGRIVFRQQm9keShjb25zdCBSZXNvdXJjZVJlcXUKIAogdm9pZCBSZXNvdXJjZVJl
cXVlc3Q6OmFwcGx5V2ViQXJjaGl2ZUhhY2tGb3JNYWlsKCkKIHsKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIC8vIEhhY2sgYmVjYXVzZSBNYWlsIGNoZWNrcyBmb3IgdGhpcyBwcm9wZXJ0eSB0byBk
ZXRlY3QgZGF0YSAvIGFyY2hpdmUgbG9hZHMKICAgICBbTlNVUkxQcm90b2NvbCBzZXRQcm9wZXJ0
eTpAIiIgZm9yS2V5OkAiV2ViRGF0YVJlcXVlc3QiIGluUmVxdWVzdDooTlNNdXRhYmxlVVJMUmVx
dWVzdCAqKW5zVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KV07CisjZW5kaWYKIH0KIAog
dm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnNldFN0b3JhZ2VTZXNzaW9uKENGVVJMU3RvcmFnZVNlc3Np
b25SZWYgc3RvcmFnZVNlc3Npb24pCkBAIC0yNDQsNiArMjY2LDcgQEAgdm9pZCBSZXNvdXJjZVJl
cXVlc3Q6OnNldFN0b3JhZ2VTZXNzaW9uKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNl
c3Npb24pCiAgICAgCiAjZW5kaWYgLy8gVVNFKENGTkVUV09SSykKIAorI2lmICFQTEFURk9STShJ
T1MpCiBzdGF0aWMgYm9vbCBpbml0UXVpY2tMb29rUmVzb3VyY2VDYWNoaW5nUXVpcmtzKCkKIHsK
ICAgICBpZiAoYXBwbGljYXRpb25Jc1NhZmFyaSgpKQpAQCAtMjYyLDExICsyODUsMTYgQEAgc3Rh
dGljIGJvb2wgaW5pdFF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcygpCiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiBib29sIFJlc291
cmNlUmVxdWVzdDo6dXNlUXVpY2tMb29rUmVzb3VyY2VDYWNoaW5nUXVpcmtzKCkKIHsKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgIHN0YXRpYyBib29sIGZsYWcgPSBpbml0UXVpY2tMb29rUmVzb3Vy
Y2VDYWNoaW5nUXVpcmtzKCk7CiAgICAgcmV0dXJuIGZsYWc7CisjZWxzZQorICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9VVElV
dGlsaXRpZXMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9VVElVdGls
aXRpZXMubW0KaW5kZXggNDI1OTI5ODAwZjVhYmZhN2Q2MmQ2M2JhMTRkOWU4ODEyYjYyZmYzMy4u
NjdiOGQ1ZTU1ZjA3NmY4MjNmNWU1NjFjZjQ1YzZmMzljZjM5ZDI2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvVVRJVXRpbGl0aWVzLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1VUSVV0aWxpdGllcy5tbQpAQCAtMzQs
NiArMzQsNyBAQCBTT0ZUX0xJTktfRlJBTUVXT1JLKE1vYmlsZUNvcmVTZXJ2aWNlcykKIAogU09G
VF9MSU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywgVVRUeXBlQ29weURlY2xhcmF0aW9uLCBDRkRpY3Rp
b25hcnlSZWYsIChDRlN0cmluZ1JlZiBpblVUSSksIChpblVUSSkpCiBTT0ZUX0xJTksoTW9iaWxl
Q29yZVNlcnZpY2VzLCBVVFR5cGVDb3B5UHJlZmVycmVkVGFnV2l0aENsYXNzLCBDRlN0cmluZ1Jl
ZiwgKENGU3RyaW5nUmVmIGluVVRJLCBDRlN0cmluZ1JlZiBpblRhZ0NsYXNzKSwgKGluVVRJLCBp
blRhZ0NsYXNzKSkKK1NPRlRfTElOSyhNb2JpbGVDb3JlU2VydmljZXMsIFVUVHlwZUNyZWF0ZVBy
ZWZlcnJlZElkZW50aWZpZXJGb3JUYWcsIENGU3RyaW5nUmVmLCAoQ0ZTdHJpbmdSZWYgaW5UYWdD
bGFzcywgQ0ZTdHJpbmdSZWYgaW5UYWcsIENGU3RyaW5nUmVmIGluQ29uZm9ybWluZ1RvVVRJKSwg
KGluVGFnQ2xhc3MsIGluVGFnLCBpbkNvbmZvcm1pbmdUb1VUSSkpCiAKIFNPRlRfTElOS19DT05T
VEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFR5cGVDb25mb3Jtc1RvS2V5LCBDRlN0cmluZ1Jl
ZikKIFNPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFRhZ0NsYXNzTUlN
RVR5cGUsIENGU3RyaW5nUmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdh
dGUubW0KaW5kZXggYjEzNGY1NWYxNmUxMGEyNTNlNmMyZWYwMDNmYjY4MzBhNzQxYzMwZS4uOTcz
YmE2MmM0ZDg4YTE4MDRjMDhjZGM3OGNjNjcyMDFmZDhiN2MzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxl
Z2F0ZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3Jl
UmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlLm1tCkBAIC05MywxMCArOTMsMTQgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKICAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBj
b25uZWN0aW9uU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U6JXAiLCBtX2hhbmRsZSwgY29ubmVj
dGlvbik7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIE5POworI2Vsc2UKICAgICBp
ZiAoIW1faGFuZGxlKQogICAgICAgICByZXR1cm4gTk87CiAKICAgICByZXR1cm4gbV9oYW5kbGUt
PnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7CisjZW5kaWYKIH0KIAogLSAodm9pZCljb25u
ZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZQpA
QCAtMTQxLDcgKzE0NSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAtICh2b2lkKWNv
bm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZVJlc3BvbnNl
OihOU1VSTFJlc3BvbnNlICopcgogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgVU5VU0VEX1BB
UkFNKGNvbm5lY3Rpb24pOworI2VuZGlmCiAKICAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBk
ZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGRpZFJlY2VpdmVSZXNwb25zZTolcCAoSFRUUCBzdGF0dXMg
JWQsIHJlcG9ydGVkIE1JTUVUeXBlICclcycpIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIHIsIFty
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc3RhdHVzQ29kZSldID8gWyhpZClyIHN0YXR1
c0NvZGVdIDogMCwgW1tyIE1JTUVUeXBlXSBVVEY4U3RyaW5nXSk7CiAKQEAgLTE1Myw4ICsxNTks
MTYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgaWYgKHN0YXR1c0NvZGUgIT0gMzA0
KQogICAgICAgICBhZGp1c3RNSU1FVHlwZUlmTmVjZXNzYXJ5KFtyIF9DRlVSTFJlc3BvbnNlXSk7
CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChbbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgp
Lm5zVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSBfcHJvcGVydHlGb3JLZXk6QCJGb3Jj
ZUhUTUxNSU1FVHlwZSJdKQogICAgICAgICBbciBfc2V0TUlNRVR5cGU6QCJ0ZXh0L2h0bWwiXTsK
KyNlbmRpZgorCisjaWYgVVNFKFFVSUNLX0xPT0spCisgICAgbV9oYW5kbGUtPnNldFF1aWNrTG9v
a0hhbmRsZShRdWlja0xvb2tIYW5kbGU6OmNyZWF0ZShtX2hhbmRsZSwgY29ubmVjdGlvbiwgciwg
c2VsZikpOworICAgIGlmIChtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCkpCisgICAgICAgIHIg
PSBtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCktPm5zUmVzcG9uc2UoKTsKKyNlbmRpZgogCiAg
ICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UobV9oYW5kbGUsIHIpOwog
fQpAQCAtMTcxLDYgKzE4NSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBpZiAo
IW1faGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKIAorI2lm
IFVTRShRVUlDS19MT09LKQorICAgIGlmIChtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCkgJiYg
bV9oYW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpLT5kaWRSZWNlaXZlRGF0YUFycmF5KHJlaW50ZXJw
cmV0X2Nhc3Q8Q0ZBcnJheVJlZj4oZGF0YUFycmF5KSkpCisgICAgICAgIHJldHVybjsKKyNlbmRp
ZgorCiAgICAgbV9oYW5kbGUtPmhhbmRsZURhdGFBcnJheShyZWludGVycHJldF9jYXN0PENGQXJy
YXlSZWY+KGRhdGFBcnJheSkpOwogICAgIC8vIFRoZSBjYWxsIHRvIGRpZFJlY2VpdmVEYXRhIGFi
b3ZlIGNhbiBjYW5jZWwgYSBsb2FkLCBhbmQgaWYgc28sIHRoZSBkZWxlZ2F0ZSAoc2VsZikgY291
bGQgaGF2ZSBiZWVuIGRlYWxsb2NhdGVkIGJ5IHRoaXMgcG9pbnQuCiB9CkBAIC0xODMsMTIgKzIw
MiwyMiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogICAgIExPRyhOZXR3b3JrLCAiSGFu
ZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgZGlkUmVjZWl2ZURhdGE6JXAgbGVuZ3RoUmVj
ZWl2ZWQ6JWxsZCIsIG1faGFuZGxlLCBjb25uZWN0aW9uLCBkYXRhLCBsZW5ndGhSZWNlaXZlZCk7
CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKFtkYXRhIGxlbmd0aF0gPT0gMCkgLy8gPHJk
YXI6Ly9wcm9ibGVtLzU1MzI5MzE+CisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgaWYg
KCFtX2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAg
Ly8gRklYTUU6IElmIHdlIGdldCBtb3JlIHRoYW4gMkIgYnl0ZXMgaW4gYSBzaW5nbGUgY2h1bmss
IHRoaXMgY29kZSB3b24ndCBkbyB0aGUgcmlnaHQgdGhpbmcuCiAgICAgLy8gSG93ZXZlciwgd2l0
aCB0b2RheSdzIGNvbXB1dGVycyBhbmQgbmV0d29ya2luZyBzcGVlZHMsIHRoaXMgd29uJ3QgaGFw
cGVuIGluIHByYWN0aWNlLgogICAgIC8vIENvdWxkIGJlIGFuIGlzc3VlIHdpdGggYSBnaWFudCBs
b2NhbCBmaWxlLgogCisjaWYgVVNFKFFVSUNLX0xPT0spCisgICAgaWYgKG1faGFuZGxlLT5xdWlj
a0xvb2tIYW5kbGUoKSAmJiBtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCktPmRpZFJlY2VpdmVE
YXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPihkYXRhKSkpCisgICAgICAgIHJldHVybjsK
KyNlbmRpZgorCiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTc5MwogICAgIC8vIC0xIG1lYW5zIHdlIGRvIG5vdCBwcm92aWRlIGFueSBkYXRh
IGFib3V0IHRyYW5zZmVyIHNpemUgdG8gaW5zcGVjdG9yIHNvIGl0IHdvdWxkIHVzZQogICAgIC8v
IENvbnRlbnQtTGVuZ3RoIGhlYWRlcnMgb3IgY29udGVudCBzaXplIHRvIHNob3cgdHJhbnNmZXIg
c2l6ZS4KQEAgLTIzMCw2ICsyNTksMTEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAg
aWYgKCFtX2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQogICAgICAgICByZXR1cm47CiAK
KyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBpZiAobV9oYW5kbGUtPnF1aWNrTG9va0hhbmRsZSgp
ICYmIG1faGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKS0+ZGlkRmluaXNoTG9hZGluZygpKQorICAg
ICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmluaXNo
TG9hZGluZyhtX2hhbmRsZSwgMCk7CiB9CiAKQEAgLTI0Miw2ICsyNzYsMTEgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAgICAgaWYgKCFtX2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgp
KQogICAgICAgICByZXR1cm47CiAKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBpZiAobV9oYW5k
bGUtPnF1aWNrTG9va0hhbmRsZSgpKQorICAgICAgICBtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxl
KCktPmRpZEZhaWwoKTsKKyNlbmRpZgorCiAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGYWls
KG1faGFuZGxlLCBlcnJvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZURhdGFiYXNlLmgKaW5kZXggZjE1NTA4YzQwYTBmOTFjZjkyZmU4ODcyMTEzZGMwZDQxYTE3
MWVmYi4uMWNkZjE3Nzk3NDViYTY5YjU3NzBkYzU5YzA5YjczZmZiOGJkNjg1OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKQEAgLTEwNyw3ICsxMDcs
OSBAQCBwdWJsaWM6CiAgICAgY29uc3QgY2hhciogbGFzdEVycm9yTXNnKCk7CiAgICAgCiAgICAg
c3FsaXRlMyogc3FsaXRlM0hhbmRsZSgpIGNvbnN0IHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
ICAgICBBU1NFUlQobV9zaGFyYWJsZSB8fCBjdXJyZW50VGhyZWFkKCkgPT0gbV9vcGVuaW5nVGhy
ZWFkIHx8ICFtX2RiKTsKKyNlbmRpZgogICAgICAgICByZXR1cm4gbV9kYjsKICAgICB9CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3Rl
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAK
aW5kZXggNzM1ZjBiNDFmNzhlMmMyMzNhN2M5YmJjZjg3ZTIxMTA0YzAxMzc2MC4uZTcwOTRiNGRh
NGU4NmUxNmQzNDIwN2EwYTIzMDE3ODFmMWJjZTMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcApAQCAtMzgsNiArMzgsMTAgQEAKICNp
bmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPHNxbGl0ZTMuaD4KIAorI2lmIFBMQVRGT1JN
KElPUykKKyNpbmNsdWRlIDxzcWxpdGUzX3ByaXZhdGUuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFNRTGl0ZUZpbGVTeXN0ZW06OlNRTGl0ZUZpbGVTeXN0ZW0oKQpAQCAtMTEw
LDYgKzExNCwxMyBAQCBib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShj
b25zdCBTdHJpbmcmIGZpbGVOYW1lKQogICAgIHJldHVybiBkZWxldGVGaWxlKGZpbGVOYW1lKTsK
IH0KIAorI2lmIFBMQVRGT1JNKElPUykKK2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6dHJ1bmNhdGVE
YXRhYmFzZUZpbGUoc3FsaXRlMyogZGF0YWJhc2UpCit7CisgICAgcmV0dXJuIHNxbGl0ZTNfZmls
ZV9jb250cm9sKGRhdGFiYXNlLCAwLCBTUUxJVEVfVFJVTkNBVEVfREFUQUJBU0UsIDApID09IFNR
TElURV9PSzsKK30KKyNlbmRpZgorICAgIAogbG9uZyBsb25nIFNRTGl0ZUZpbGVTeXN0ZW06Omdl
dERhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKIHsgICAgICAgIAogICAg
IGxvbmcgbG9uZyBzaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZUZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVG
aWxlU3lzdGVtLmgKaW5kZXggMTQwODViOTI5Yzg1Yjg3YWMwNTYyYmM5ZmVjN2EzZjFjNzcwMzE2
NC4uYTdlZjY1ZTY3NTFlNDYxOWM2NWVhM2MyMDRkMzA5N2M3ZDYwZGM2NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCkBAIC05OSw2ICs5OSwx
MyBAQCBwdWJsaWM6CiAgICAgLy8gZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLgogICAgIHN0YXRp
YyBib29sIGRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKIAorI2lm
IFBMQVRGT1JNKElPUykKKyAgICAvLyBUcnVuY2F0ZXMgYSBkYXRhYmFzZSBmaWxlLiBVc2VkIHdo
ZW4gTW9iaWxlU2FmYXJpU2V0dGluZ3MgZGVsZXRlcyBhIGRhdGFiYXNlIGZpbGUsCisgICAgLy8g
c2luY2UgZGVsZXRpbmcgdGhlIGZpbGUgbnVrZXMgdGhlIFBPU0lYIGZpbGUgbG9ja3Mgd2hpY2gg
d291bGQgcG90ZW50aWFsbHkgY2F1c2UgU2FmYXJpCisgICAgLy8gdG8gY29ycnVwdCB0aGUgbmV3
IGRiIGlmIGl0J3MgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZC4KKyAgICBzdGF0aWMgYm9vbCB0
cnVuY2F0ZURhdGFiYXNlRmlsZShzcWxpdGUzKiBkYXRhYmFzZSk7CisjZW5kaWYKKyAgICAKICAg
ICAvLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBkYXRhYmFzZSBmaWxlLgogICAgIC8vCiAgICAg
Ly8gZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHAKaW5kZXggNmY5MGVhYzA4OTRlNWZjMzExZGJh
M2YwNDc1MmQxY2UyYjkzOGI2MS4uZDE1Y2VkM2FlMGZiZGU0YTlhZDQ4YjUwMzlhNGYwOWIzZjA1
N2FhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVRyYW5z
YWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNh
Y3Rpb24uY3BwCkBAIC0yOCw2ICsyOCwxMCBAQAogCiAjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2Uu
aCIKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZVRyYWNrZXIu
aCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNRTGl0ZVRyYW5zYWN0aW9uOjpT
UUxpdGVUcmFuc2FjdGlvbihTUUxpdGVEYXRhYmFzZSYgZGIsIGJvb2wgcmVhZE9ubHkpCkBAIC01
NCwxMSArNTgsMTggQEAgdm9pZCBTUUxpdGVUcmFuc2FjdGlvbjo6YmVnaW4oKQogICAgICAgICAv
LyBhbnkgc3RhdGVtZW50cy4gSWYgdGhhdCBoYXBwZW5zLCB0aGlzIHRyYW5zYWN0aW9uIHdpbGwg
ZmFpbC4KICAgICAgICAgLy8gaHR0cDovL3d3dy5zcWxpdGUub3JnL2xhbmdfdHJhbnNhY3Rpb24u
aHRtbAogICAgICAgICAvLyBodHRwOi8vd3d3LnNxbGl0ZS5vcmcvbG9ja2luZ3YzLmh0bWwjbG9j
a2luZworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpp
bmNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOworI2VuZGlmCiAgICAgICAgIGlm
IChtX3JlYWRPbmx5KQogICAgICAgICAgICAgbV9pblByb2dyZXNzID0gbV9kYi5leGVjdXRlQ29t
bWFuZCgiQkVHSU4iKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9pblByb2dyZXNzID0g
bV9kYi5leGVjdXRlQ29tbWFuZCgiQkVHSU4gSU1NRURJQVRFIik7CiAgICAgICAgIG1fZGIubV90
cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBtX2luUHJvZ3Jlc3M7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICAgICBpZiAoIW1faW5Qcm9ncmVzcykKKyAgICAgICAgICAgIFNRTGl0ZURhdGFiYXNlVHJh
Y2tlcjo6ZGVjcmVtZW50VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnQoKTsKKyNlbmRpZgogICAg
IH0KIH0KIApAQCAtNjgsNiArNzksMTAgQEAgdm9pZCBTUUxpdGVUcmFuc2FjdGlvbjo6Y29tbWl0
KCkKICAgICAgICAgQVNTRVJUKG1fZGIubV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MpOwogICAgICAg
ICBtX2luUHJvZ3Jlc3MgPSAhbV9kYi5leGVjdXRlQ29tbWFuZCgiQ09NTUlUIik7CiAgICAgICAg
IG1fZGIubV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBtX2luUHJvZ3Jlc3M7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgICAgICBpZiAoIW1faW5Qcm9ncmVzcykKKyAgICAgICAgICAgIFNRTGl0ZURh
dGFiYXNlVHJhY2tlcjo6ZGVjcmVtZW50VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnQoKTsKKyNl
bmRpZgogICAgIH0KIH0KIApAQCAtODIsNiArOTcsOSBAQCB2b2lkIFNRTGl0ZVRyYW5zYWN0aW9u
Ojpyb2xsYmFjaygpCiAgICAgICAgIG1fZGIuZXhlY3V0ZUNvbW1hbmQoIlJPTExCQUNLIik7CiAg
ICAgICAgIG1faW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgICAgICBtX2RiLm1fdHJhbnNhY3Rpb25J
blByb2dyZXNzID0gZmFsc2U7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBTUUxpdGVEYXRh
YmFzZVRyYWNrZXI6OmRlY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KCk7CisjZW5k
aWYKICAgICB9CiB9CiAKQEAgLTkwLDYgKzEwOCw5IEBAIHZvaWQgU1FMaXRlVHJhbnNhY3Rpb246
OnN0b3AoKQogICAgIGlmIChtX2luUHJvZ3Jlc3MpIHsKICAgICAgICAgbV9pblByb2dyZXNzID0g
ZmFsc2U7CiAgICAgICAgIG1fZGIubV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgICAgIFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6ZGVjcmVtZW50
VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnQoKTsKKyNlbmRpZgogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRhYmFzZVRyYWNr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRhYmFzZVRy
YWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmNjIyZjRhNWQwNGI5ZmE0MGI1YjZhNWVkZDhhN2YyZTI4
YjEyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9z
L1NRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSBTUUxpdGVEYXRhYmFzZVRyYWNrZXIgeworCitzdGF0aWMgU1FMaXRlRGF0YWJhc2VU
cmFja2VyQ2xpZW50KiBzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCA9IDA7Citz
dGF0aWMgdW5zaWduZWQgc190cmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudGVyID0gMDsKKworc3Rh
dGljIE11dGV4JiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCgpCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPE11dGV4PiB0aXBNdXRleDsKKyAgICByZXR1cm4gdGlwTXV0ZXg7Cit9CisK
K3ZvaWQgc2V0Q2xpZW50KFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCogY2xpZW50KQorewor
ICAgIEFTU0VSVChjbGllbnQpOworICAgIEFTU0VSVCghc19zdGF0aWNTUUxpdGVEYXRhYmFzZVRy
YWNrZXJDbGllbnQgfHwgc19zdGF0aWNTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQgPT0gY2xp
ZW50KTsKKyAgICBzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCA9IGNsaWVudDsK
K30KKwordm9pZCBpbmNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpCit7CisgICAg
aWYgKCFzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCkKKyAgICAgICAgcmV0dXJu
OworICAgIE11dGV4TG9ja2VyIGxvY2sodHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgoKSk7CisK
KyAgICBzX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXIrKzsKKyAgICBpZiAoc190cmFuc2Fj
dGlvbkluUHJvZ3Jlc3NDb3VudGVyID09IDEpCisgICAgICAgIHNfc3RhdGljU1FMaXRlRGF0YWJh
c2VUcmFja2VyQ2xpZW50LT53aWxsQmVnaW5GaXJzdFRyYW5zYWN0aW9uKCk7Cit9CisKK3ZvaWQg
ZGVjcmVtZW50VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnQoKQoreworICAgIGlmICghc19zdGF0
aWNTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQpCisgICAgICAgIHJldHVybjsKKyAgICBNdXRl
eExvY2tlciBsb2NrKHRyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KCkpOworCisgICAgQVNTRVJU
KHNfdHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRlcik7CisgICAgc190cmFuc2FjdGlvbkluUHJv
Z3Jlc3NDb3VudGVyLS07CisKKyAgICBpZiAoIXNfdHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRl
cikKKyAgICAgICAgc19zdGF0aWNTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQtPmRpZEZpbmlz
aExhc3RUcmFuc2FjdGlvbigpOworfQorCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorYm9vbCBoYXNU
cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKQoreworICAgIHJldHVybiAhc19zdGF0aWNTUUxpdGVEYXRh
YmFzZVRyYWNrZXJDbGllbnQgfHwgc190cmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudGVyID4gMDsK
K30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisKK30gLy8gbmFtZXNwYWNlIFNRTGl0ZURh
dGFiYXNlVHJhY2tlcgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRhYmFzZVRyYWNrZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44NjFjNjQ2MzNlNjM4NDM5NDAxYmFmZDNlOGMxNDE1OTVkY2JkZDBmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRhYmFz
ZVRyYWNrZXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAy
MDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTUUxpdGVEYXRhYmFzZVRyYWNrZXJfaAor
I2RlZmluZSBTUUxpdGVEYXRhYmFzZVRyYWNrZXJfaAorCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJh
c2VUcmFja2VyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFNRTGl0ZURhdGFiYXNlVHJhY2tlciB7CisKK3Zv
aWQgZGVjcmVtZW50VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnQoKTsKK3ZvaWQgaW5jcmVtZW50
VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnQoKTsKKwordm9pZCBzZXRDbGllbnQoU1FMaXRlRGF0
YWJhc2VUcmFja2VyQ2xpZW50Kik7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECitib29sIGhhc1Ry
YW5zYWN0aW9uSW5Qcm9ncmVzcygpOworI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKworfTsK
KworY2xhc3MgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgeworcHVibGlj
OgorICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyKCkKKyAgICB7Cisg
ICAgICAgIFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aW5jcmVtZW50VHJhbnNhY3Rpb25JblByb2dy
ZXNzQ291bnQoKTsKKyAgICB9CisgICAgflNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9D
b3VudGVyKCkKKyAgICB7CisgICAgICAgIFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6ZGVjcmVtZW50
VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnQoKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTUUxpdGVEYXRhYmFzZVRyYWNrZXJfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRhYmFzZVRyYWNrZXJD
bGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9pb3MvU1FMaXRlRGF0YWJhc2VU
cmFja2VyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjFmM2QyYjliZmI3ODJmYWY4MzZmMjllZTRlNjNl
OWRhNTVjMzdmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9pb3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmgKQEAgLTAsMCArMSw0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU1FMaXRl
RGF0YWJhc2VUcmFja2VyQ2xpZW50X2gKKyNkZWZpbmUgU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xp
ZW50X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTUUxpdGVEYXRhYmFzZVRyYWNr
ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflNRTGl0ZURhdGFiYXNlVHJhY2tlckNs
aWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHdpbGxCZWdpbkZpcnN0VHJhbnNhY3Rpb24o
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExhc3RUcmFuc2FjdGlvbigpID0gMDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNRTGl0ZURhdGFiYXNl
VHJhY2tlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1BsYXRmb3JtTG9jYWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZv
cm1Mb2NhbGUuY3BwCmluZGV4IGQ3MzZjY2E3NGVhNDlhOTdlNDIyMzBlNTdkMTJhMDAwZTg0NWQ4
YzkuLjMwZjdhYjIwOWFjNWY3YmZlNmZiMzlmMTUyNWY5MzM1Y2Y4MTc5YzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuY3BwCkBAIC0zMjgsNiAr
MzI4LDcgQEAgU3RyaW5nIExvY2FsZTo6Y29udmVydEZyb21Mb2NhbGl6ZWROdW1iZXIoY29uc3Qg
U3RyaW5nJiBsb2NhbGl6ZWQpCiAKICNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9UWVBF
UykKIAorI2lmICFQTEFURk9STShJT1MpCiBTdHJpbmcgTG9jYWxlOjpmb3JtYXREYXRlVGltZShj
b25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZSwgRm9ybWF0VHlwZSBmb3JtYXRUeXBlKQogewogICAg
IGlmIChkYXRlLnR5cGUoKSA9PSBEYXRlQ29tcG9uZW50czo6SW52YWxpZCkKQEAgLTM2Myw2ICsz
NjQsOCBAQCBTdHJpbmcgTG9jYWxlOjpmb3JtYXREYXRlVGltZShjb25zdCBEYXRlQ29tcG9uZW50
cyYgZGF0ZSwgRm9ybWF0VHlwZSBmb3JtYXRUeXBlKQogICAgIH0KICAgICByZXR1cm4gYnVpbGRl
ci50b1N0cmluZygpOwogfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKICNlbmRpZgogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmgKaW5kZXgg
MWU5NzY5MDZiZTg2ODZiODk1YzZlMzMyOTMyNTU2ZTE1N2UyMDU2YS4uOWZjNjM5Y2VhNjBhNDkz
Nzc2M2ZjYjQzODcwNzY0ZGY2ZDNiMGRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvUGxhdGZvcm1Mb2NhbGUuaApAQCAtMzMsNiArMzMsMTAgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCisjaWYgUExBVEZPUk0oSU9TKQorY2xhc3MgRm9udDsKKyNlbmRpZgorCiBjbGFz
cyBMb2NhbGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2FsZSk7CiAKQEAgLTExMyw3
ICsxMTcsMTcgQEAgcHVibGljOgogICAgIC8vIGRpc3BsYXkgdG8gdGhlIHVzZXIuIElmIGFuIGlt
cGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydAogICAgIC8vIGxvY2FsaXplZCBkYXRlcyB0aGUg
ZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuCiAgICAgLy8gRm9ybWF0VHlw
ZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGlmIHlvdSB3YW50IHRoZSBzaG9ydCBmb3JtYXQuIAor
I2lmICFQTEFURk9STShJT1MpCiAgICAgU3RyaW5nIGZvcm1hdERhdGVUaW1lKGNvbnN0IERhdGVD
b21wb25lbnRzJiwgRm9ybWF0VHlwZSA9IEZvcm1hdFR5cGVVbnNwZWNpZmllZCk7CisjZWxzZQor
ICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1hdERhdGVUaW1lKGNvbnN0IERhdGVDb21wb25lbnRzJiwg
Rm9ybWF0VHlwZSA9IEZvcm1hdFR5cGVVbnNwZWNpZmllZCkgPSAwOworI2VuZGlmIC8vICFQTEFU
Rk9STShJT1MpCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogVGhp
cyBjb2RlIHNob3VsZCBiZSBtZXJnZWQgd2l0aCBPcGVuIFNvdXJjZSBpbiBhIHdheSB0aGF0IGlz
IGZ1dHVyZSBjb21wYXRpYmxlLgorICAgIC8vIE1heGltdW0gd2lkdGggZm9yIGEgZm9ybWF0dGVk
IGRhdGUgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWQgZm9udC4KKyAgICB2aXJ0dWFsIGZsb2F0IG1h
eGltdW1XaWR0aEZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlLCBjb25zdCBGb250Jikg
PSAwOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIH5Mb2NhbGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAKaW5kZXggNWUx
NGUzZjA4YWFlZjMzZjVkMzNlN2EyYzM3NmExMTFmMWE4OWI2Yy4uN2UwZTJkODM3NDkxNTJjM2M3
YmQwZGYxN2U5YzViMzYwMDk1Y2ZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAKQEAgLTU3MSw2ICs1NzEsNyBAQCBi
b29sIGlzV29yZFRleHRCcmVhayhUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IpCiAgICAgcmV0
dXJuIHJ1bGVTdGF0dXMgIT0gVUJSS19XT1JEX05PTkU7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzZXRVcEl0ZXJhdG9yV2l0aFJ1bGVzKGJvb2wm
IGNyZWF0ZWRJdGVyYXRvciwgVGV4dEJyZWFrSXRlcmF0b3IqJiBpdGVyYXRvciwKICAgICBjb25z
dCBjaGFyKiBicmVha1J1bGVzLCBjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQogewpA
QCAtNTk1LDkgKzU5NiwxMSBAQCBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHNldFVwSXRlcmF0
b3JXaXRoUnVsZXMoYm9vbCYgY3JlYXRlZEl0ZXJhdG9yLCBUZXh0QnJlYQogCiAgICAgcmV0dXJu
IGl0ZXJhdG9yOwogfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIFRleHRCcmVha0l0ZXJh
dG9yKiBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5n
dGgpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBUaGlzIHJ1bGUgc2V0IGlzIGJhc2Vk
IG9uIGNoYXJhY3Rlci1icmVhayBpdGVyYXRvciBydWxlcyBvZiBJQ1UgNC4wCiAgICAgLy8gPGh0
dHA6Ly9zb3VyY2UuaWN1LXByb2plY3Qub3JnL3JlcG9zL2ljdS9pY3UvdGFncy9yZWxlYXNlLTQt
MC9zb3VyY2UvZGF0YS9icmtpdHIvY2hhci50eHQ+LgogICAgIC8vIFRoZSBtYWpvciBkaWZmZXJl
bmNlcyBmcm9tIHRoZSBvcmlnaW5hbCBvbmVzIGFyZSBsaXN0ZWQgYmVsb3c6CkBAIC02ODMsNiAr
Njg2LDMwIEBAIFRleHRCcmVha0l0ZXJhdG9yKiBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKGNvbnN0
IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCiAgICAgc3RhdGljIGJvb2wgY3JlYXRlZEN1cnNv
ck1vdmVtZW50SXRlcmF0b3IgPSBmYWxzZTsKICAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3Iq
IHN0YXRpY0N1cnNvck1vdmVtZW50SXRlcmF0b3I7CiAgICAgcmV0dXJuIHNldFVwSXRlcmF0b3JX
aXRoUnVsZXMoY3JlYXRlZEN1cnNvck1vdmVtZW50SXRlcmF0b3IsIHN0YXRpY0N1cnNvck1vdmVt
ZW50SXRlcmF0b3IsIGtSdWxlcywgc3RyaW5nLCBsZW5ndGgpOworI2Vsc2UgLy8gUExBVEZPUk0o
SU9TKQorICAgIC8vIFVzZSB0aGUgc3BlY2lhbCBUaGFpIGNoYXJhY3RlciBicmVhayBpdGVyYXRv
ciBmb3IgYWxsIGxvY2FsZXMKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVkQ3Vyc29yQnJlYWtJdGVy
YXRvcjsKKyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY0N1cnNvckJyZWFrSXRl
cmF0b3I7CisKKyAgICBpZiAoIXN0cmluZykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBpZiAoIWNyZWF0ZWRDdXJzb3JCcmVha0l0ZXJhdG9yKSB7CisgICAgICAgIFVFcnJvckNvZGUg
b3BlblN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgc3RhdGljQ3Vyc29yQnJlYWtJdGVy
YXRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGV4dEJyZWFrSXRlcmF0b3IqPih1YnJrX29wZW4oVUJS
S19DSEFSQUNURVIsICJ0aCIsIDAsIDAsICZvcGVuU3RhdHVzKSk7CisgICAgICAgIGNyZWF0ZWRD
dXJzb3JCcmVha0l0ZXJhdG9yID0gdHJ1ZTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShV
X1NVQ0NFU1Mob3BlblN0YXR1cyksICJJQ1UgY291bGQgbm90IG9wZW4gYSBicmVhayBpdGVyYXRv
cjogJXMgKCVkKSIsIHVfZXJyb3JOYW1lKG9wZW5TdGF0dXMpLCBvcGVuU3RhdHVzKTsKKyAgICB9
CisgICAgaWYgKCFzdGF0aWNDdXJzb3JCcmVha0l0ZXJhdG9yKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIFVFcnJvckNvZGUgc2V0VGV4dFN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAg
ICB1YnJrX3NldFRleHQocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KHN0YXRpY0N1
cnNvckJyZWFrSXRlcmF0b3IpLCBzdHJpbmcsIGxlbmd0aCwgJnNldFRleHRTdGF0dXMpOworICAg
IGlmIChVX0ZBSUxVUkUoc2V0VGV4dFN0YXR1cykpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIHN0YXRpY0N1cnNvckJyZWFrSXRlcmF0b3I7CisjZW5kaWYgLy8gIVBMQVRG
T1JNKElPUykKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNJQ1UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNJQ1UuY3BwCmluZGV4IGI0YmIzOTA3ZjYxNDhjMzQ5M2Y2YTE3ZmFmOWU4MjAwN2UwMzYwMTUu
LmNjNmVhYTIxZjA0YWFkOGE0OTY1NjBhNjU4NTY2Mjc2YTRlOWViNTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAKQEAgLTQ0LDYgKzQ0LDE4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3Qgc2l6ZV90IENvbnZlcnNpb25CdWZmZXJTaXpl
ID0gMTYzODQ7CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgY29uc3QgY2hhciogdGV4dENv
ZGVjTWFjQWxpYXNlc1tdID0geworICAgICJtYWNvcy03XzMtMTAuMiIsIC8vIHhtYWNjeXJpbGxp
YywgbWFjY3lyaWxsaWMKKyAgICAibWFjb3MtNl8yLTEwLjQiLCAvLyB4bWFjZ3JlZWsKKyAgICAi
bWFjb3MtNi0xMC4yIiwgICAvLyBtYWNncmVlaworICAgICJtYWNvcy0yOS0xMC4yIiwgIC8vIHht
YWNjZW50cmFsZXVycm9tYW4sIG1hY2NlbnRyYWxldXJyb21hbgorICAgICJtYWNvcy0zNS0xMC4y
IiwgIC8vIHhtYWN0dXJraXNoLCBtYWN0dXJraXNoCisgICAgInNvZnRiYW5rLXNqaXMiLCAgLy8g
c29mdGJhbmtzamlzCisgICAgbnVsbHB0cgorfTsKKyNlbmRpZgorCiBJQ1VDb252ZXJ0ZXJXcmFw
cGVyOjp+SUNVQ29udmVydGVyV3JhcHBlcigpCiB7CiAgICAgaWYgKGNvbnZlcnRlcikKQEAgLTE4
MCw2ICsxOTIsMjkgQEAgdm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhF
bmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQogICAgIHJlZ2lzdHJhcigiSVNPODg1OS0x
NSIsICJJU08tODg1OS0xNSIpOwogICAgIC8vIE5vdCByZWdpc3RlcmluZyBJU084ODU5LTE2LCBi
ZWNhdXNlIEZpcmVmb3ggKGFzIG9mIHZlcnNpb24gMy42LjYpIGRvZXNuJ3Qga25vdyB0aGlzIHBh
cnRpY3VsYXIgYWxpYXMsCiAgICAgLy8gYW5kIGJlY2F1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgSUNV
IGRvbid0IHN1cHBvcnQgSVNPLTg4NTktMTYgZW5jb2RpbmcgYXQgYWxsLgorCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIC8vIEEuQi4gYWRkaW5nIGEgZmV3IG1vcmUgTWFjIGVuY29kaW5ncyBtaXNz
aW5nICdjYXVzZSB3ZSBkb24ndCBoYXZlIFRleHRDb2RlY01hYyByaWdodCBub3cKKyAgICAvLyBs
dWNraWx5LCB0aGV5IGFyZSBzdXBwb3J0ZWQgaW4gSUNVLCBqdXN0IG5lZWQgdG8gYWxpYXMgdGhl
bS4KKyAgICAvLyB0aGlzIGhhbmRsZXMgZW5jb2RpbmdzIHRoYXQgT1MgWCB1c2VzIFRFQyAoVGV4
dENvZGVjTWFjKQorICAgIC8vIDxodHRwOi8vcHVibGliLmJvdWxkZXIuaWJtLmNvbS9pbmZvY2Vu
dGVyL3dtYmhlbHAvdjZyMG0wL2luZGV4LmpzcD90b3BpYz0vY29tLmlibS5ldG9vbHMubWZ0LmVi
LmRvYy9hYzAwNDA4Xy5odG0+CisgICAgaW50MzJfdCBpID0gMDsKKyAgICBmb3IgKGNvbnN0IGNo
YXIqIG1hY0FsaWFzID0gdGV4dENvZGVjTWFjQWxpYXNlc1tpXTsgbWFjQWxpYXM7IG1hY0FsaWFz
ID0gdGV4dENvZGVjTWFjQWxpYXNlc1srK2ldKSB7CisgICAgICAgIHJlZ2lzdHJhcihtYWNBbGlh
cywgbWFjQWxpYXMpOworCisgICAgICAgIFVFcnJvckNvZGUgZXJyb3IgPSBVX1pFUk9fRVJST1I7
CisgICAgICAgIHVpbnQxNl90IG51bUFsaWFzZXMgPSB1Y252X2NvdW50QWxpYXNlcyhtYWNBbGlh
cywgJmVycm9yKTsKKyAgICAgICAgQVNTRVJUKFVfU1VDQ0VTUyhlcnJvcikpOworICAgICAgICBp
ZiAoVV9TVUNDRVNTKGVycm9yKSkKKyAgICAgICAgICAgIGZvciAodWludDE2X3QgaiA9IDA7IGog
PCBudW1BbGlhc2VzOyArK2opIHsKKyAgICAgICAgICAgICAgICBlcnJvciA9IFVfWkVST19FUlJP
UjsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhbGlhcyA9IHVjbnZfZ2V0QWxpYXMobWFj
QWxpYXMsIGosICZlcnJvcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKFVfU1VDQ0VTUyhlcnJv
cikpOworICAgICAgICAgICAgICAgIGlmIChVX1NVQ0NFU1MoZXJyb3IpICYmIHN0cmNtcChhbGlh
cywgbWFjQWxpYXMpKQorICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXIoYWxpYXMsIG1hY0Fs
aWFzKTsKKyAgICAgICAgICAgIH0KKyAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBUZXh0Q29kZWNJ
Q1U6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCkBAIC0yMTcs
NiArMjUyLDEzIEBAIHZvaWQgVGV4dENvZGVjSUNVOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNS
ZWdpc3RyYXIgcmVnaXN0cmFyKQogICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBhIGdvb2Qgd2F5IHRv
IGRldGVybWluZSB0aGUgbW9zdCB1cCB0byBkYXRlIHZhcmlhbnQgcHJvZ3JhbW1hdGljYWxseT8K
ICAgICByZWdpc3RyYXIoIndpbmRvd3MtODc0IiwgY3JlYXRlLCAid2luZG93cy04NzQtMjAwMCIp
OwogICAgIHJlZ2lzdHJhcigid2luZG93cy05NDkiLCBjcmVhdGUsICJ3aW5kb3dzLTk0OS0yMDAw
Iik7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gU2VlIGNvbW1lbnQgYWJvdmUgaW4gcmVn
aXN0ZXJFbmNvZGluZ05hbWVzKCkuCisgICAgaW50MzJfdCBpID0gMDsKKyAgICBmb3IgKGNvbnN0
IGNoYXIqIGFsaWFzID0gdGV4dENvZGVjTWFjQWxpYXNlc1tpXTsgYWxpYXM7IGFsaWFzID0gdGV4
dENvZGVjTWFjQWxpYXNlc1srK2ldKQorICAgICAgICByZWdpc3RyYXIoYWxpYXMsIGNyZWF0ZSwg
MCk7CisjZW5kaWYKIH0KIAogVGV4dENvZGVjSUNVOjpUZXh0Q29kZWNJQ1UoY29uc3QgY2hhciog
ZW5jb2RpbmcsIGNvbnN0IGNoYXIqIGNhbm9uaWNhbENvbnZlcnRlck5hbWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCmlu
ZGV4IGE1NzgyY2ZkNWY4NGY4M2I4YjkzOTE2MjAxZWI0ZjA5NjU2NzAxNjMuLmIxZmVlMzUwMzVm
OTIyM2QyM2FlYTA2ODllYTIwNTg0NmZlNmU5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCkBAIC00Miw3ICs0Miw3
IEBACiAjaWYgVVNFKElDVV9VTklDT0RFKQogI2luY2x1ZGUgIlRleHRDb2RlY0lDVS5oIgogI2Vu
ZGlmCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElP
UykKICNpbmNsdWRlICJUZXh0Q29kZWNNYWMuaCIKICNlbmRpZgogI2lmIE9TKFdJTkRPV1MpICYm
IFVTRShXQ0hBUl9VTklDT0RFKQpAQCAtMjg0LDcgKzI4NCw3IEBAIHN0YXRpYyB2b2lkIGV4dGVu
ZFRleHRDb2RlY01hcHMoKQogICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJDb2RlY3MoYWRkVG9U
ZXh0Q29kZWNNYXApOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0o
TUFDKSAmJiAhUExBVEZPUk0oSU9TKQogICAgIFRleHRDb2RlY01hYzo6cmVnaXN0ZXJFbmNvZGlu
Z05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjTWFjOjpyZWdp
c3RlckNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3BwCmluZGV4IDVhYzc5NGEzMTgz
YzdjNmZiNmQ0OWNlOTVkODhiNjZlN2ZjZDk2NDEuLjBkZWRhODdmY2M3YWJkOTc5OWI2YjRhYjgx
ZDAyNWRiYWZhZTZiZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
Y2YvSHlwaGVuYXRpb25DRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9j
Zi9IeXBoZW5hdGlvbkNGLmNwcApAQCAtNjAsNyArNjAsMTcgQEAgc3RhdGljIEF0b21pY1N0cmlu
Z0tleWVkTVJVQ2FjaGU8UmV0YWluUHRyPENGTG9jYWxlUmVmPj4mIGNmTG9jYWxlQ2FjaGUoKQog
CiBib29sIGNhbkh5cGhlbmF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIp
CiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gY2ZMb2NhbGVDYWNoZSgpLmdldChs
b2NhbGVJZGVudGlmaWVyKTsKKyNlbHNlCisjaWYgIShkZWZpbmVkKFdURl9BUk1fQVJDSF9WRVJT
SU9OKSAmJiBXVEZfQVJNX0FSQ0hfVkVSU0lPTiA9PSA2KQorICAgIHJldHVybiBjZkxvY2FsZUNh
Y2hlKCkuZ2V0KGxvY2FsZUlkZW50aWZpZXIpOworI2Vsc2UKKyAgICAvLyBIeXBoZW5hdGlvbiBp
cyBub3QgYXZhaWxhYmxlIG9uIGRldmljZXMgd2l0aCBBUk12NiBwcm9jZXNzb3JzLiBTZWUgPHJk
YXI6Ly84MzUyNTcwPi4KKyAgICBVTlVTRURfUEFSQU0obG9jYWxlSWRlbnRpZmllcik7CisgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogfQogCiBzaXpl
X3QgbGFzdEh5cGhlbkxvY2F0aW9uKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVu
Z3RoLCBzaXplX3QgYmVmb3JlSW5kZXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRp
ZmllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2Fs
aXplZERhdGVDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxp
emVkRGF0ZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ3MzBmYmUzMWJlNDU1NTE2NTZmNmNlNzQxMGZi
OTVmYTgzMDE5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExvY2FsaXplZERhdGVD
YWNoZV9oCisjZGVmaW5lIExvY2FsaXplZERhdGVDYWNoZV9oCisKKyNpbmNsdWRlICJEYXRlQ29t
cG9uZW50cy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMb2NhbGl6ZWREYXRlQ2FjaGUgewor
cHVibGljOgorICAgIE5TRGF0ZUZvcm1hdHRlciAqZm9ybWF0dGVyRm9yRGF0ZVR5cGUoRGF0ZUNv
bXBvbmVudHM6OlR5cGUpOworICAgIGZsb2F0IG1heGltdW1XaWR0aEZvckRhdGVUeXBlKERhdGVD
b21wb25lbnRzOjpUeXBlLCBjb25zdCBGb250Jik7CisgICAgdm9pZCBsb2NhbGVDaGFuZ2VkKCk7
CisKK3ByaXZhdGU6CisgICAgTG9jYWxpemVkRGF0ZUNhY2hlKCk7CisgICAgfkxvY2FsaXplZERh
dGVDYWNoZSgpOworCisgICAgTlNEYXRlRm9ybWF0dGVyICpjcmVhdGVGb3JtYXR0ZXJGb3JUeXBl
KERhdGVDb21wb25lbnRzOjpUeXBlKTsKKyAgICBmbG9hdCBjYWxjdWxhdGVNYXhpbXVtV2lkdGgo
RGF0ZUNvbXBvbmVudHM6OlR5cGUsIGNvbnN0IEZvbnQmKTsKKworICAgIC8vIFVzaW5nIGludCBp
bnN0ZWFkIG9mIERhdGVDb21wb25lbnRzOjpUeXBlIGZvciB0aGUga2V5IGJlY2F1c2UgdGhlIGVu
dW0KKyAgICAvLyBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCBoYXNoIGFuZCBoYXNoIHRyYWl0cy4g
VXNhZ2Ugb2YgdGhlIG1hcHMKKyAgICAvLyBjYXN0cyB0aGUgRGF0ZUNvbXBvbmVudHM6OlR5cGUg
aW50byBhbiBpbnQgYXMgdGhlIGtleS4KKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZXRhaW5Q
dHI8TlNEYXRlRm9ybWF0dGVyPj4gRGF0ZVR5cGVGb3JtYXR0ZXJNYXA7CisgICAgdHlwZWRlZiBI
YXNoTWFwPGludCwgZmxvYXQ+IERhdGVUeXBlTWF4V2lkdGhNYXA7CisgICAgRGF0ZVR5cGVGb3Jt
YXR0ZXJNYXAgbV9mb3JtYXR0ZXJNYXA7CisgICAgRGF0ZVR5cGVNYXhXaWR0aE1hcCBtX21heFdp
ZHRoTWFwOworICAgIEZvbnQgbV9mb250OworCisgICAgZnJpZW5kIExvY2FsaXplZERhdGVDYWNo
ZSYgbG9jYWxpemVkRGF0ZUNhY2hlKCk7CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPExvY2Fs
aXplZERhdGVDYWNoZT47Cit9OworCisvLyBTaW5nbGV0b24uCitMb2NhbGl6ZWREYXRlQ2FjaGUm
IGxvY2FsaXplZERhdGVDYWNoZSgpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBMb2NhbGl6ZWREYXRlQ2FjaGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3MTkxYTJl
NDUzOTIzM2FiMTNkYzY2MTc4ZTU4YTFiOGM4YzYzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUubW0KQEAgLTAs
MCArMSwxODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkxvY2FsaXplZERhdGVDYWNoZS5oIgorCisj
aW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJUZXh0UnVuLmgiCisjaW1wb3J0IDxtYXRoLmg+Cisj
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
I2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ0ZOb3RpZmljYXRpb25DZW50ZXIuaD4KKwordXNpbmcg
bmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMb2NhbGl6ZWREYXRlQ2Fj
aGUmIGxvY2FsaXplZERhdGVDYWNoZSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPExv
Y2FsaXplZERhdGVDYWNoZT4gY2FjaGU7CisgICAgcmV0dXJuIGNhY2hlOworfQorCitzdGF0aWMg
dm9pZCBfbG9jYWxlQ2hhbmdlZChDRk5vdGlmaWNhdGlvbkNlbnRlclJlZiwgdm9pZCosIENGU3Ry
aW5nUmVmLCBjb25zdCB2b2lkKiwgQ0ZEaWN0aW9uYXJ5UmVmKQoreworICAgIGxvY2FsaXplZERh
dGVDYWNoZSgpLmxvY2FsZUNoYW5nZWQoKTsKK30KKworTG9jYWxpemVkRGF0ZUNhY2hlOjpMb2Nh
bGl6ZWREYXRlQ2FjaGUoKQorICAgIDogbV9mb250KEZvbnQoKSkKK3sKKyAgICAvLyBMaXN0ZW4g
dG8gQ0YgTm90aWZpY2F0aW9ucyBmb3IgbG9jYWxlIGNoYW5nZSwgYW5kIGNsZWFyIHRoZSBjYWNo
ZSB3aGVuIGl0IGRvZXMuCisgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJBZGRPYnNlcnZlcihDRk5v
dGlmaWNhdGlvbkNlbnRlckdldExvY2FsQ2VudGVyKCksICh2b2lkKil0aGlzLCBfbG9jYWxlQ2hh
bmdlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDRkxvY2FsZUN1cnJl
bnRMb2NhbGVEaWRDaGFuZ2VOb3RpZmljYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMLCBDRk5vdGlmaWNhdGlvblN1c3BlbnNpb25CZWhhdmlvckRlbGl2ZXJJ
bW1lZGlhdGVseSk7Cit9CisKK0xvY2FsaXplZERhdGVDYWNoZTo6fkxvY2FsaXplZERhdGVDYWNo
ZSgpCit7CisgICAgLy8gTk9URTogU2luZ2xldG9uIGRvZXMgbm90IGV4cGVjdCB0byBiZSBkZWNv
bnN0cnVjdGVkLgorICAgIENGTm90aWZpY2F0aW9uQ2VudGVyUmVtb3ZlT2JzZXJ2ZXIoQ0ZOb3Rp
ZmljYXRpb25DZW50ZXJHZXRMb2NhbENlbnRlcigpLCAodm9pZCopdGhpcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDRkxvY2FsZUN1cnJlbnRMb2NhbGVEaWRDaGFu
Z2VOb3RpZmljYXRpb24sIE5VTEwpOworfQorCit2b2lkIExvY2FsaXplZERhdGVDYWNoZTo6bG9j
YWxlQ2hhbmdlZCgpCit7CisgICAgbV9tYXhXaWR0aE1hcC5jbGVhcigpOworICAgIG1fZm9ybWF0
dGVyTWFwLmNsZWFyKCk7Cit9CisKK05TRGF0ZUZvcm1hdHRlciAqTG9jYWxpemVkRGF0ZUNhY2hl
Ojpmb3JtYXR0ZXJGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSB0eXBlKQoreworICAg
IGludCBrZXkgPSBzdGF0aWNfY2FzdDxpbnQ+KHR5cGUpOworICAgIGlmIChtX2Zvcm1hdHRlck1h
cC5jb250YWlucyhrZXkpKQorICAgICAgICByZXR1cm4gbV9mb3JtYXR0ZXJNYXAuZ2V0KGtleSku
Z2V0KCk7CisKKyAgICBOU0RhdGVGb3JtYXR0ZXIgKmRhdGVGb3JtYXR0ZXIgPSBbY3JlYXRlRm9y
bWF0dGVyRm9yVHlwZSh0eXBlKSBhdXRvcmVsZWFzZV07CisgICAgbV9mb3JtYXR0ZXJNYXAuc2V0
KGtleSwgZGF0ZUZvcm1hdHRlcik7CisgICAgcmV0dXJuIGRhdGVGb3JtYXR0ZXI7Cit9CisKK2Zs
b2F0IExvY2FsaXplZERhdGVDYWNoZTo6bWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBv
bmVudHM6OlR5cGUgdHlwZSwgY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICBpbnQga2V5ID0gc3Rh
dGljX2Nhc3Q8aW50Pih0eXBlKTsKKyAgICBpZiAobV9mb250ID09IGZvbnQpIHsKKyAgICAgICAg
aWYgKG1fbWF4V2lkdGhNYXAuY29udGFpbnMoa2V5KSkKKyAgICAgICAgICAgIHJldHVybiBtX21h
eFdpZHRoTWFwLmdldChrZXkpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZm9udCA9IEZvbnQo
Zm9udCk7CisgICAgICAgIG1fbWF4V2lkdGhNYXAuY2xlYXIoKTsKKyAgICB9CisKKyAgICBmbG9h
dCBjYWxjdWxhdGVkTWF4aW11bSA9IGNhbGN1bGF0ZU1heGltdW1XaWR0aCh0eXBlLCBmb250KTsK
KyAgICBtX21heFdpZHRoTWFwLnNldChrZXksIGNhbGN1bGF0ZWRNYXhpbXVtKTsKKyAgICByZXR1
cm4gY2FsY3VsYXRlZE1heGltdW07Cit9CisKK05TRGF0ZUZvcm1hdHRlciAqTG9jYWxpemVkRGF0
ZUNhY2hlOjpjcmVhdGVGb3JtYXR0ZXJGb3JUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUp
Cit7CisgICAgTlNEYXRlRm9ybWF0dGVyICpkYXRlRm9ybWF0dGVyID0gW1tOU0RhdGVGb3JtYXR0
ZXIgYWxsb2NdIGluaXRdOworICAgIE5TTG9jYWxlICpjdXJyZW50TG9jYWxlID0gW05TTG9jYWxl
IGN1cnJlbnRMb2NhbGVdOworICAgIFtkYXRlRm9ybWF0dGVyIHNldExvY2FsZTpjdXJyZW50TG9j
YWxlXTsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6Oklu
dmFsaWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlOgorICAgICAgICBbZGF0ZUZvcm1hdHRlciBzZXRU
aW1lWm9uZTpbTlNUaW1lWm9uZSB0aW1lWm9uZUZvclNlY29uZHNGcm9tR01UOjBdXTsKKyAgICAg
ICAgW2RhdGVGb3JtYXR0ZXIgc2V0VGltZVN0eWxlOk5TRGF0ZUZvcm1hdHRlck5vU3R5bGVdOwor
ICAgICAgICBbZGF0ZUZvcm1hdHRlciBzZXREYXRlU3R5bGU6TlNEYXRlRm9ybWF0dGVyTWVkaXVt
U3R5bGVdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlVGlt
ZToKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0VGltZVpvbmU6W05TVGltZVpvbmUgbG9jYWxU
aW1lWm9uZV1dOworICAgICAgICBbZGF0ZUZvcm1hdHRlciBzZXRUaW1lU3R5bGU6TlNEYXRlRm9y
bWF0dGVyU2hvcnRTdHlsZV07CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldERhdGVTdHlsZTpO
U0RhdGVGb3JtYXR0ZXJNZWRpdW1TdHlsZV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGF0
ZUNvbXBvbmVudHM6OkRhdGVUaW1lTG9jYWw6CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldFRp
bWVab25lOltOU1RpbWVab25lIHRpbWVab25lRm9yU2Vjb25kc0Zyb21HTVQ6MF1dOworICAgICAg
ICBbZGF0ZUZvcm1hdHRlciBzZXRUaW1lU3R5bGU6TlNEYXRlRm9ybWF0dGVyU2hvcnRTdHlsZV07
CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldERhdGVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJNZWRp
dW1TdHlsZV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6Ok1vbnRo
OgorICAgICAgICBbZGF0ZUZvcm1hdHRlciBzZXRUaW1lWm9uZTpbTlNUaW1lWm9uZSB0aW1lWm9u
ZUZvclNlY29uZHNGcm9tR01UOjBdXTsKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0RGF0ZUZv
cm1hdDpbTlNEYXRlRm9ybWF0dGVyIGRhdGVGb3JtYXRGcm9tVGVtcGxhdGU6QCJNTU1NeXl5eSIg
b3B0aW9uczowIGxvY2FsZTpjdXJyZW50TG9jYWxlXV07CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRGF0ZUNvbXBvbmVudHM6OlRpbWU6CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldFRpbWVa
b25lOltOU1RpbWVab25lIHRpbWVab25lRm9yU2Vjb25kc0Zyb21HTVQ6MF1dOworICAgICAgICBb
ZGF0ZUZvcm1hdHRlciBzZXRUaW1lU3R5bGU6TlNEYXRlRm9ybWF0dGVyU2hvcnRTdHlsZV07Cisg
ICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldERhdGVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJOb1N0eWxl
XTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6V2VlazoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiBkYXRlRm9ybWF0dGVyOworfQorCisvLyBOT1RFOiBUaGlzIGRvZXMgbm90IGNoZWNrIGZv
ciB0aGUgd2lkZXN0IGRheSBvZiB0aGUgd2Vlay4KKy8vIFdlIGFzc3VtZSBubyBmb3JtYXR0ZXIg
b3B0aW9uIHNob3dzIHRoYXQgaW5mb3JtYXRpb24uCitmbG9hdCBMb2NhbGl6ZWREYXRlQ2FjaGU6
OmNhbGN1bGF0ZU1heGltdW1XaWR0aChEYXRlQ29tcG9uZW50czo6VHlwZSB0eXBlLCBjb25zdCBG
b250JiBmb250KQoreworICAgIGZsb2F0IG1heGltdW1XaWR0aCA9IDA7CisKKyAgICAvLyBHZXQg
dGhlIGZvcm1hdHRlciB3ZSB3b3VsZCB1c2UsIGNvcHkgaXQgYmVjYXVzZSB3ZSB3aWxsIGZvcmNl
IGl0cyB0aW1lIHpvbmUgdG8gYmUgVVRDLgorICAgIE5TRGF0ZUZvcm1hdHRlciAqZGF0ZUZvcm1h
dHRlciA9IFtbZm9ybWF0dGVyRm9yRGF0ZVR5cGUodHlwZSkgY29weV0gYXV0b3JlbGVhc2VdOwor
ICAgIFtkYXRlRm9ybWF0dGVyIHNldFRpbWVab25lOltOU1RpbWVab25lIHRpbWVab25lRm9yU2Vj
b25kc0Zyb21HTVQ6MF1dOworCisgICAgLy8gU2FtcGxlIGRhdGUgd2l0aCBhIDQgZGlnaXQgeWVh
ciBhbmQgMiBkaWdpdCBkYXksIGhvdXIsIGFuZCBtaW51dGUuIERpZ2l0cyBhcmUKKyAgICAvLyB0
eXBpY2FsbHkgYWxsIGVxdWFsbHkgd2lkZS4gRm9yY2UgVVRDIHRpbWV6b25lIGZvciB0aGUgdGVz
dCBkYXRlIGJlbG93IHNvIHRoZQorICAgIC8vIGRhdGUgZG9lc24ndCBhZGp1c3QgZm9yIHRoZSBj
dXJyZW50IHRpbWV6b25lLiBUaGlzIGlzIGFuIGFyYml0cmFyeSBkYXRlCisgICAgLy8gKHgtMjct
MjAwNykgYW5kIHRpbWUgKDEwOjQ1IFBNKS4KKyAgICBSZXRhaW5QdHI8TlNDYWxlbmRhcj4gZ3Jl
Z29yaWFuID0gYWRvcHROUyhbW05TQ2FsZW5kYXIgYWxsb2NdIGluaXRXaXRoQ2FsZW5kYXJJZGVu
dGlmaWVyOk5TQ2FsZW5kYXJJZGVudGlmaWVyR3JlZ29yaWFuXSk7CisgICAgW2dyZWdvcmlhbi5n
ZXQoKSBzZXRUaW1lWm9uZTpbTlNUaW1lWm9uZSB0aW1lWm9uZUZvclNlY29uZHNGcm9tR01UOjBd
XTsKKyAgICBSZXRhaW5QdHI8TlNEYXRlQ29tcG9uZW50cz4gY29tcG9uZW50cyA9IGFkb3B0TlMo
W1tOU0RhdGVDb21wb25lbnRzIGFsbG9jXSBpbml0XSk7CisgICAgW2NvbXBvbmVudHMuZ2V0KCkg
c2V0RGF5OjI3XTsKKyAgICBbY29tcG9uZW50cy5nZXQoKSBzZXRZZWFyOjIwMDddOworICAgIFtj
b21wb25lbnRzLmdldCgpIHNldEhvdXI6MjJdOworICAgIFtjb21wb25lbnRzLmdldCgpIHNldE1p
bnV0ZTo0NV07CisKKyAgICBzdGF0aWMgTlNVSW50ZWdlciBudW1iZXJPZkdyZWdvcmlhbk1vbnRo
cyA9IFtbZGF0ZUZvcm1hdHRlciBtb250aFN5bWJvbHNdIGNvdW50XTsKKyAgICBBU1NFUlQobnVt
YmVyT2ZHcmVnb3JpYW5Nb250aHMgPT0gMTIpOworCisgICAgLy8gRm9yIGVhY2ggbW9udGggKGlu
IHRoZSBHcmVnb3JpYW4gQ2FsZW5kYXIpLCBmb3JtYXQgYSBkYXRlIGFuZCBtZWFzdXJlIGl0cyBs
ZW5ndGguCisgICAgTlNVSW50ZWdlciB0b3RhbE1vbnRoc1RvVGVzdCA9IDE7CisgICAgaWYgKHR5
cGUgPT0gRGF0ZUNvbXBvbmVudHM6OkRhdGUKKyAgICAgICAgfHwgdHlwZSA9PSBEYXRlQ29tcG9u
ZW50czo6RGF0ZVRpbWUKKyAgICAgICAgfHwgdHlwZSA9PSBEYXRlQ29tcG9uZW50czo6RGF0ZVRp
bWVMb2NhbAorICAgICAgICB8fCB0eXBlID09IERhdGVDb21wb25lbnRzOjpNb250aCkKKyAgICAg
ICAgdG90YWxNb250aHNUb1Rlc3QgPSBudW1iZXJPZkdyZWdvcmlhbk1vbnRoczsKKyAgICBmb3Ig
KE5TVUludGVnZXIgaSA9IDA7IGkgPCB0b3RhbE1vbnRoc1RvVGVzdDsgKytpKSB7CisgICAgICAg
IFtjb21wb25lbnRzLmdldCgpIHNldE1vbnRoOihpICsgMSldOworICAgICAgICBOU0RhdGUgKmRh
dGUgPSBbZ3JlZ29yaWFuLmdldCgpIGRhdGVGcm9tQ29tcG9uZW50czpjb21wb25lbnRzLmdldCgp
XTsKKyAgICAgICAgTlNTdHJpbmcgKmZvcm1hdHRlZERhdGUgPSBbZGF0ZUZvcm1hdHRlciBzdHJp
bmdGcm9tRGF0ZTpkYXRlXTsKKyAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZyhmb3JtYXR0ZWRE
YXRlKTsKKyAgICAgICAgbWF4aW11bVdpZHRoID0gbWF4KG1heGltdW1XaWR0aCwgZm9udC53aWR0
aChzdHIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbWF4aW11bVdpZHRoOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L21hYy9DaGFyc2V0RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvQ2hh
cnNldERhdGEuaAppbmRleCA0NThjZWNiNTBmMWNmMWM5YmY1MzRiMzcyYmNlNTgyN2YzNWU0NjNk
Li5hNjA3MDQyOTVjZGVjMzdmYjA2Yzg2NGEzNzM5MjBiNzg1Mjk0OTJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9DaGFyc2V0RGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0NoYXJzZXREYXRhLmgKQEAgLTIzLDYgKzIzLDEw
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisjaWYgUExBVEZPUk0oSU9TKQordHlwZWRlZiBV
SW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRFbmNvZGluZzsKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAjZGVmaW5lIGtUZXh0RW5jb2RpbmdJU09MYXRpblRo
YWkga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpblRoYWkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9tYWMvTG9jYWxlTWFjLmgKaW5kZXggNzA3NDkwM2Y0MmQxZjZlODIzZDhkNDRjYThi
OTA3ZGU3MTgyMmI5Ni4uODRhOGZkYjk5NDJjYTg5MzkyYWYyNDA2NTk3NWU0Mzc1MzhmOTBjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLmgKQEAgLTUx
LDYgKzUxLDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbGVNYWM+IGNy
ZWF0ZShOU0xvY2FsZSopOwogICAgIH5Mb2NhbGVNYWMoKTsKIAorI2lmIFBMQVRGT1JNKElPUykK
KyAgICB2aXJ0dWFsIGZsb2F0IG1heGltdW1XaWR0aEZvckRhdGVUeXBlKERhdGVDb21wb25lbnRz
OjpUeXBlLCBjb25zdCBGb250JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0
RGF0ZVRpbWUoY29uc3QgRGF0ZUNvbXBvbmVudHMmLCBGb3JtYXRUeXBlID0gRm9ybWF0VHlwZVVu
c3BlY2lmaWVkKSBPVkVSUklERTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKERBVEVfQU5EX1RJTUVf
SU5QVVRfVFlQRVMpCiAgICAgdmlydHVhbCBTdHJpbmcgZGF0ZUZvcm1hdCgpIE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgU3RyaW5nIG1vbnRoRm9ybWF0KCkgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMubW0KaW5kZXggZGI0MzViZmEzZjcyM2Uy
YzQ5NjllOWUwMjIxZWQzM2E1NmQzY2ZlYy4uZDM3M2FkZDc5MTllNmY3ZGJkZmM2NGYzMWJjYzQ3
N2Q5Y2Y1OGNjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMv
TG9jYWxlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2Fs
ZU1hYy5tbQpAQCAtNDAsNiArNDAsMTAgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCisjaWYgUExBVEZPUk0oSU9TKQor
I2ltcG9ydCAiTG9jYWxpemVkRGF0ZUNhY2hlLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBzdGF0aWMgaW5saW5lIFN0cmluZyBsYW5ndWFnZUZyb21Mb2NhbGUoY29uc3QgU3Ry
aW5nJiBsb2NhbGUpCkBAIC0xMTYsNiArMTIwLDM1IEBAIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0
ZXI+IExvY2FsZU1hYzo6c2hvcnREYXRlRm9ybWF0dGVyKCkKICAgICByZXR1cm4gY3JlYXRlRGF0
ZVRpbWVGb3JtYXR0ZXIobV9sb2NhbGUuZ2V0KCksIG1fZ3JlZ29yaWFuQ2FsZW5kYXIuZ2V0KCks
IE5TRGF0ZUZvcm1hdHRlclNob3J0U3R5bGUsIE5TRGF0ZUZvcm1hdHRlck5vU3R5bGUpOwogfQog
CisjaWYgUExBVEZPUk0oSU9TKQorU3RyaW5nIExvY2FsZU1hYzo6Zm9ybWF0RGF0ZVRpbWUoY29u
c3QgRGF0ZUNvbXBvbmVudHMmIGRhdGVDb21wb25lbnRzLCBGb3JtYXRUeXBlKQoreworICAgIGRv
dWJsZSBtc2VjID0gZGF0ZUNvbXBvbmVudHMubWlsbGlzZWNvbmRzU2luY2VFcG9jaCgpOworICAg
IERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUgPSBkYXRlQ29tcG9uZW50cy50eXBlKCk7CisKKyAg
ICAvLyAid2VlayIgdHlwZSBub3Qgc3VwcG9ydGVkLgorICAgIEFTU0VSVCh0eXBlICE9IERhdGVD
b21wb25lbnRzOjpJbnZhbGlkKTsKKyAgICBpZiAodHlwZSA9PSBEYXRlQ29tcG9uZW50czo6V2Vl
aykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gSW5jb21pbmcgbXNlYyB2YWx1
ZSBpcyBtaWxsaXNlY29uZHMgc2luY2UgMTk3MC0wMS0wMSAwMDowMDowMCBVVEMuIFRoZSAxOTcw
IGVwb2NoLgorICAgIE5TVGltZUludGVydmFsIHNlY29uZHNTaW5jZTE5NzAgPSAobXNlYyAvIDEw
MDApOworICAgIE5TRGF0ZSAqZGF0ZSA9IFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5j
ZTE5NzA6c2Vjb25kc1NpbmNlMTk3MF07CisKKyAgICAvLyBSZXR1cm4gYSBmb3JtYXR0ZWQgc3Ry
aW5nLgorICAgIE5TRGF0ZUZvcm1hdHRlciAqZGF0ZUZvcm1hdHRlciA9IGxvY2FsaXplZERhdGVD
YWNoZSgpLmZvcm1hdHRlckZvckRhdGVUeXBlKHR5cGUpOworICAgIHJldHVybiBbZGF0ZUZvcm1h
dHRlciBzdHJpbmdGcm9tRGF0ZTpkYXRlXTsKK30KKworZmxvYXQgTG9jYWxlTWFjOjptYXhpbXVt
V2lkdGhGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSB0eXBlLCBjb25zdCBGb250JiBm
b250KQoreworICAgIEFTU0VSVCh0eXBlICE9IERhdGVDb21wb25lbnRzOjpJbnZhbGlkKTsKKyAg
ICBBU1NFUlQodHlwZSAhPSBEYXRlQ29tcG9uZW50czo6V2Vlayk7CisKKyAgICByZXR1cm4gbG9j
YWxpemVkRGF0ZUNhY2hlKCkubWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUodHlwZSwgZm9udCk7Cit9
CisjZW5kaWYKKwogI2lmIEVOQUJMRShEQVRFX0FORF9USU1FX0lOUFVUX1RZUEVTKQogY29uc3Qg
VmVjdG9yPFN0cmluZz4mIExvY2FsZU1hYzo6bW9udGhMYWJlbHMoKQogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dEJvdW5kYXJpZXMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbQppbmRleCAyZjky
MTdmMDdiYTE4M2NhN2Y5Y2ZkMWI5OTdjOWVmMGE1OTU4OTE1Li4zMzZkN2Y1ZTE2NjJiZTdhNzAx
YzRmYzA2Yjg2OTRmMjZmZjUzYzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbQpAQCAtMjYsMTAgKzI2LDE3NyBAQAogI2ltcG9y
dCAiY29uZmlnLmgiCiAjaW1wb3J0ICJUZXh0Qm91bmRhcmllcy5oIgogCisjaWYgUExBVEZPUk0o
SU9TKQorI2ltcG9ydCAiVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oIgorI2ltcG9ydCA8
Q29yZUZvdW5kYXRpb24vQ0ZTdHJpbmdUb2tlbml6ZXIuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgorI2ltcG9ydCA8dW5pY29kZS91YnJrLmg+CisjaW1wb3J0IDx1bmljb2Rl
L3VjaGFyLmg+CisjaW1wb3J0IDx1bmljb2RlL3VzdHJpbmcuaD4KKyNpbXBvcnQgPHVuaWNvZGUv
dXR5cGVzLmg+CisjaW1wb3J0IDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgorI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lm
IFBMQVRGT1JNKElPUykKKworc3RhdGljIGJvb2wgaXNTa2lwQ2hhcmFjdGVyKFVDaGFyMzIgYykK
K3sKKyAgICByZXR1cm4gYyA9PSAweEEwIHx8IAorICAgICAgICBjID09ICdcbicgfHwgCisgICAg
ICAgIGMgPT0gJy4nIHx8IAorICAgICAgICBjID09ICcsJyB8fCAKKyAgICAgICAgYyA9PSAnIScg
IHx8IAorICAgICAgICBjID09ICc/JyB8fCAKKyAgICAgICAgYyA9PSAnOycgfHwgCisgICAgICAg
IGMgPT0gJzonIHx8IAorICAgICAgICB1X2lzc3BhY2UoYyk7Cit9CisKK3N0YXRpYyBib29sIGlz
V2hpdGVzcGFjZUNoYXJhY3RlcihVQ2hhcjMyIGMpCit7CisgICAgcmV0dXJuIGMgPT0gMHhBMCB8
fCAKKyAgICAgICAgYyA9PSAnXG4nIHx8IAorICAgICAgICB1X2lzc3BhY2UoYyk7Cit9CisKK3N0
YXRpYyBib29sIGlzV29yZERlbGltaXRpbmdDaGFyYWN0ZXIoVUNoYXIzMiBjKQoreworICAgIENG
Q2hhcmFjdGVyU2V0UmVmIHNldCA9IENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFy
YWN0ZXJTZXRBbHBoYU51bWVyaWMpOworICAgIC8vIEFtcGVyc2FuZCBpcyBhbiBleGNlcHRpb24g
YWRkZWQgdG8gdHJlYXQgQVQmVCBhcyBhIHNpbmdsZSB3b3JkIChzZWUgPHJkYXI6Ly9wcm9ibGVt
LzUwMjIyNjQ+KS4KKyAgICByZXR1cm4gIUNGQ2hhcmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVt
YmVyKHNldCwgYykgJiYgYyAhPSAnJic7Cit9CisKK3N0YXRpYyBib29sIGlzU3ltYm9sQ2hhcmFj
dGVyKFVDaGFyMzIgYykKK3sKKyAgICBDRkNoYXJhY3RlclNldFJlZiBzZXQgPSBDRkNoYXJhY3Rl
clNldEdldFByZWRlZmluZWQoa0NGQ2hhcmFjdGVyU2V0U3ltYm9sKTsKKyAgICByZXR1cm4gQ0ZD
aGFyYWN0ZXJTZXRJc0xvbmdDaGFyYWN0ZXJNZW1iZXIoc2V0LCBjKTsKK30KKworc3RhdGljIGJv
b2wgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyAg
ICAvLyBUaGVzZSBhcmUgY2hhcmFjdGVycyB0aGF0IGNhbiBiZWhhdmUgYXMgd29yZCBib3VuZGFy
aWVzLCBidXQgY2FuIGFwcGVhciB3aXRoaW4gd29yZHMuCisgICAgcmV0dXJuIGNoYXJhY3RlciA9
PSAnXCcnIHx8IGNoYXJhY3RlciA9PSByaWdodFNpbmdsZVF1b3RhdGlvbk1hcmsgfHwgY2hhcmFj
dGVyID09IGhlYnJld1B1bmN0dWF0aW9uR2Vyc2hheWltOworfQorCitzdGF0aWMgQ0ZTdHJpbmdU
b2tlbml6ZXJSZWYgdG9rZW5pemVyRm9yU3RyaW5nKENGU3RyaW5nUmVmIHN0cikKK3sKKyAgICBz
dGF0aWMgQ0ZTdHJpbmdUb2tlbml6ZXJSZWYgdG9rZW5pemVyID0gbnVsbHB0cjsKKyAgICBzdGF0
aWMgQ0ZMb2NhbGVSZWYgbG9jYWxlID0gbnVsbHB0cjsKKworICAgIGlmICghbG9jYWxlKSB7Cisg
ICAgICAgIGNvbnN0IGNoYXIqIHRlbXAgPSBjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQoKTsKKyAg
ICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjdXJyZW50TG9jYWxlSUQgPSBhZG9wdENGKENG
U3RyaW5nQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgVUludDgqPih0ZW1wKSwgc3RybGVuKHRlbXApLCAga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSwg
ZmFsc2UsIGtDRkFsbG9jYXRvck51bGwpKTsKKyAgICAgICAgbG9jYWxlID0gQ0ZMb2NhbGVDcmVh
dGUobnVsbHB0ciwgY3VycmVudExvY2FsZUlELmdldCgpKTsKKyAgICAgICAgaWYgKCFsb2NhbGUp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBDRlJhbmdlIGVudGly
ZVJhbmdlID0gQ0ZSYW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyKSk7ICAgIAorCisg
ICAgaWYgKCF0b2tlbml6ZXIpCisgICAgICAgIHRva2VuaXplciA9IENGU3RyaW5nVG9rZW5pemVy
Q3JlYXRlKG51bGxwdHIsIHN0ciwgZW50aXJlUmFuZ2UsIGtDRlN0cmluZ1Rva2VuaXplclVuaXRX
b3JkQm91bmRhcnksIGxvY2FsZSk7CisgICAgZWxzZQorICAgICAgICBDRlN0cmluZ1Rva2VuaXpl
clNldFN0cmluZyh0b2tlbml6ZXIsIHN0ciwgZW50aXJlUmFuZ2UpOworICAgIHJldHVybiB0b2tl
bml6ZXI7Cit9CisKKworLy8gU2ltcGxlIGNhc2U6IGEgd29yZCBpcyBhIHN0cmVhbSBvZiBjaGFy
YWN0ZXJzCisvLyBkZWxpbWl0ZWQgYnkgYSBzcGVjaWFsIHNldCBvZiB3b3JkLWRlbGltaXRpbmcg
Y2hhcmFjdGVycy4KK3N0YXRpYyB2b2lkIGZpbmRTaW1wbGVXb3JkQm91bmRhcnkoY29uc3QgVUNo
YXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5kKQor
eworICAgIEFTU0VSVChwb3NpdGlvbiA+PSAwKTsKKyAgICBBU1NFUlQocG9zaXRpb24gPCBsZW4p
OworCisgICAgaW50IHN0YXJ0UG9zID0gcG9zaXRpb247CisgICAgd2hpbGUgKHN0YXJ0UG9zID4g
MCkgeworICAgICAgICBpbnQgaSA9IHN0YXJ0UG9zOworICAgICAgICBVQ2hhcjMyIGNoYXJhY3Rl
ckJlZm9yZVN0YXJ0UG9zOworICAgICAgICBVMTZfUFJFVihjaGFycywgMCwgaSwgY2hhcmFjdGVy
QmVmb3JlU3RhcnRQb3MpOworICAgICAgICBpZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3Rlcihj
aGFyYWN0ZXJCZWZvcmVTdGFydFBvcykpIHsKKyAgICAgICAgICAgIEFTU0VSVChpID49IDApOwor
ICAgICAgICAgICAgaWYgKCFpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICBpZiAoIWlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoY2hhcmFjdGVyQmVmb3JlU3RhcnRQ
b3MpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBVQ2hhcjMyIGNoYXJh
Y3RlckJlZm9yZUJlZm9yZVN0YXJ0UG9zOworICAgICAgICAgICAgVTE2X1BSRVYoY2hhcnMsIDAs
IGksIGNoYXJhY3RlckJlZm9yZUJlZm9yZVN0YXJ0UG9zKTsKKyAgICAgICAgICAgIGlmIChpc1dv
cmREZWxpbWl0aW5nQ2hhcmFjdGVyKGNoYXJhY3RlckJlZm9yZUJlZm9yZVN0YXJ0UG9zKSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBVMTZfQkFDS18xKGNoYXJz
LCAwLCBzdGFydFBvcyk7CisgICAgfQorICAgIAorICAgIGludCBlbmRQb3MgPSBwb3NpdGlvbjsK
KyAgICB3aGlsZSAoZW5kUG9zIDwgbGVuKSB7CisgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOwor
ICAgICAgICBVMTZfR0VUKGNoYXJzLCAwLCBlbmRQb3MsIGxlbiwgY2hhcmFjdGVyKTsKKyAgICAg
ICAgaWYgKGlzV29yZERlbGltaXRpbmdDaGFyYWN0ZXIoY2hhcmFjdGVyKSkgeworICAgICAgICAg
ICAgaW50IGkgPSBlbmRQb3M7CisgICAgICAgICAgICBVMTZfRldEXzEoY2hhcnMsIGksIGxlbik7
CisgICAgICAgICAgICBBU1NFUlQoaSA8PSBsZW4pOworICAgICAgICAgICAgaWYgKGkgPT0gbGVu
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXJB
ZnRlckVuZFBvczsKKyAgICAgICAgICAgIFUxNl9ORVhUKGNoYXJzLCBpLCBsZW4sIGNoYXJhY3Rl
ckFmdGVyRW5kUG9zKTsKKyAgICAgICAgICAgIGlmICghaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJh
Y3RlcihjaGFyYWN0ZXIpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYg
KGlzV29yZERlbGltaXRpbmdDaGFyYWN0ZXIoY2hhcmFjdGVyQWZ0ZXJFbmRQb3MpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFUxNl9GV0RfMShjaGFycywgZW5k
UG9zLCBsZW4pOworICAgIH0KKworICAgIC8vIFRoZSB0ZXh0IG1heSBjb25zaXN0IG9mIGFsbCBk
ZWxpbWl0ZXIgY2hhcmFjdGVycyAoZS5nLiAiKysrKysrKysiIG9yIGEgc2VyaWVzIG9mIGVtb2pp
KSwgYW5kIHJldHVybmluZyBhbiBlbXB0eSByYW5nZQorICAgIC8vIG1ha2VzIG5vIHNlbnNlIChh
bmQgZG9lc24ndCBtYXRjaCBmaW5kQ29tcGxleFdvcmRCb3VuZGFyeSgpIGJlaGF2aW9yKS4KKyAg
ICBpZiAoc3RhcnRQb3MgPT0gZW5kUG9zICYmIGVuZFBvcyA8IGxlbikgeworICAgICAgICBVQ2hh
cjMyIGNoYXJhY3RlcjsKKyAgICAgICAgVTE2X0dFVChjaGFycywgMCwgZW5kUG9zLCBsZW4sIGNo
YXJhY3Rlcik7CisgICAgICAgIGlmIChpc1N5bWJvbENoYXJhY3RlcihjaGFyYWN0ZXIpKQorICAg
ICAgICAgICAgVTE2X0ZXRF8xKGNoYXJzLCBlbmRQb3MsIGxlbik7CisgICAgfQorCisgICAgKnN0
YXJ0ID0gc3RhcnRQb3M7CisgICAgKmVuZCA9IGVuZFBvczsKK30KKworLy8gQ29tcGxleCBjYXNl
OiB1c2UgQ0ZTdHJpbmdUb2tlbml6ZXIgdG8gZmluZCB3b3JkIGJvdW5kYXJ5Lgorc3RhdGljIHZv
aWQgZmluZENvbXBsZXhXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBp
bnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5kKQoreworICAgIENGU3RyaW5nUmVmIGNo
YXJTdHJpbmcgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzTm9Db3B5KE5VTEwsIGNoYXJz
LCBsZW4sIGtDRkFsbG9jYXRvck51bGwpOworICAgIEFTU0VSVChjaGFyU3RyaW5nKTsKKyAgICAK
KyAgICBDRlN0cmluZ1Rva2VuaXplclJlZiB0b2tlbml6ZXIgPSB0b2tlbml6ZXJGb3JTdHJpbmco
Y2hhclN0cmluZyk7CisgICAgaWYgKHRva2VuaXplcikgeyAgICAgICAgCisgICAgICAgIENGU3Ry
aW5nVG9rZW5pemVyVG9rZW5UeXBlICB0b2tlbiA9IENGU3RyaW5nVG9rZW5pemVyR29Ub1Rva2Vu
QXRJbmRleCh0b2tlbml6ZXIsIHBvc2l0aW9uKTsKKyAgICAgICAgQ0ZSYW5nZSByZXN1bHQ7Cisg
ICAgICAgIGlmICh0b2tlbiAhPSBrQ0ZTdHJpbmdUb2tlbml6ZXJUb2tlbk5vbmUpIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IENGU3RyaW5nVG9rZW5pemVyR2V0Q3VycmVudFRva2VuUmFuZ2UodG9r
ZW5pemVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGlmIG5vIHRva2VuIGZv
dW5kOiBzZWxlY3QgZW50aXJlIGJsb2NrCisgICAgICAgICAgICAvLyBOQjogSSBuZXZlciBoaXQg
dGhpcyBzZWN0aW9uIGluIGFsbCBteSB0ZXN0aW5nLi4uCisgICAgICAgICAgICByZXN1bHQubG9j
YXRpb24gPSAwOworICAgICAgICAgICAgcmVzdWx0Lmxlbmd0aCA9IGxlbjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgKnN0YXJ0ID0gcmVzdWx0LmxvY2F0aW9uOworICAgICAgICAqZW5k
ID0gcmVzdWx0LmxvY2F0aW9uICsgcmVzdWx0Lmxlbmd0aDsKKyAgICB9IGVsc2UgeyAgICAvLyBl
cnJvciBjcmVhdGluZyB0b2tlbml6ZXIKKyAgICAgICAgZmluZFNpbXBsZVdvcmRCb3VuZGFyeShj
aGFycywgbGVuLCBwb3NpdGlvbiwgc3RhcnQsIGVuZCk7CisgICAgfQorCisgICAgQ0ZSZWxlYXNl
KGNoYXJTdHJpbmcpOworfQorI2VuZGlmCisKIHZvaWQgZmluZFdvcmRCb3VuZGFyeShjb25zdCBV
Q2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQp
CiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBOU1N0cmluZyogc3RyaW5nID0gW1tOU1N0cmlu
ZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5OmNvbnN0X2Nhc3Q8dW5pY2hhcio+KGNo
YXJzKQogICAgICAgICBsZW5ndGg6bGVuIGZyZWVXaGVuRG9uZTpOT107CiAgICAgTlNBdHRyaWJ1
dGVkU3RyaW5nKiBhdHRyID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3Ry
aW5nOnN0cmluZ107CkBAIC0zOCw2ICsyMDUsNDQgQEAgdm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNv
bnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQK
ICAgICBbc3RyaW5nIHJlbGVhc2VdOwogICAgICpzdGFydCA9IHJhbmdlLmxvY2F0aW9uOwogICAg
ICplbmQgPSByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aDsKKyNlbHNlCisgICAgaW50IHBv
cyA9IHBvc2l0aW9uOworICAgIGlmICggcG9zaXRpb24gPT0gbGVuICYmIHBvc2l0aW9uICE9IDAp
CisgICAgICAgIHBvcy0tOworICAgIAorICAgIC8vIEZvciBjb21wbGV4IHRleHQgKFRoYWksIEph
cGFuZXNlLCBDaGluZXNlKSwgdmlzaWJsZV91bml0cyB3aWxsIHBhc3MgdGhlIHRleHQgaW4gYXMg
YSAKKyAgICAvLyBzaW5nbGUgY29udGlndW91cyBydW4gb2YgY2hhcmFjdGVycywgcHJvdmlkaW5n
IGFzIG11Y2ggY29udGV4dCBhcyBpcyBwb3NzaWJsZS4KKyAgICAvLyBXZSBvbmx5IG5lZWQgb25l
IGNoYXJhY3RlciB0byBkZXRlcm1pbmUgaWYgdGhlIHRleHQgaXMgY29tcGxleC4KKyAgICBVQ2hh
cjMyIGNoOworICAgIGludCBpID0gcG9zOworICAgIFUxNl9ORVhUKGNoYXJzLGksbGVuLGNoKTsK
KyAgICBib29sIGlzQ29tcGxleCA9IHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShjaCk7
CisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgaW1wcm92ZXMgb3VyIHdvcmQgYm91bmRh
cnkgYmVoYXZpb3IsIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGdvIGZhciBlbm91Z2guCisgICAgLy8g
U2VlIDxyZGFyOi8vcHJvYmxlbS84ODUzOTUxPiBUYWtlIGNvbXBsZXggd29yZCBib3VuZGFyeSBm
aW5kaW5nIHBhdGggd2hlbiBuZWNlc3NhcnkKKyAgICBpZiAoIWlzQ29tcGxleCkgeworICAgICAg
ICAvLyBDaGVjayBhZ2FpbiBmb3IgY29tcGxleCB0ZXh0LCBhdCB0aGUgc3RhcnQgb2YgdGhlIHJ1
bi4KKyAgICAgICAgaSA9IDA7CisgICAgICAgIFUxNl9ORVhUKGNoYXJzLCBpLCBsZW4sIGNoKTsK
KyAgICAgICAgaXNDb21wbGV4ID0gcmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGNoKTsK
KyAgICB9CisgICAgCisgICAgaWYgKGlzQ29tcGxleCkgeworICAgICAgICBmaW5kQ29tcGxleFdv
cmRCb3VuZGFyeShjaGFycyxsZW4sIHBvc2l0aW9uLCBzdGFydCwgZW5kKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBmaW5kU2ltcGxlV29yZEJvdW5kYXJ5KGNoYXJzLGxlbiwgcG9zaXRpb24sIHN0
YXJ0LCBlbmQpOworICAgIH0KKworI2RlZmluZSBMT0dfV09SRF9CUkVBSyAwCisjaWYgTE9HX1dP
UkRfQlJFQUsKKyAgICBDRlN0cmluZ1JlZiB1bmlTdHJpbmcgPSBDRlN0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKE5VTEwsIGNoYXJzLCBsZW4pOworICAgIENGU3RyaW5nUmVmIGZvdW5kV29yZCA9
IENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoTlVMTCwgKGNvbnN0IFVuaUNoYXIgKikgY2hh
cnMgKyAqc3RhcnQsICplbmQgLSAqc3RhcnQpOyAgICAgICAgCisgICAgTlNMb2coQCIlc19CUkVB
SyAnJUAnICglZCwlZCkgaW4gJyVAJyAoJXApIGF0ICVkLCBsZW5ndGg9JWQiLCBpc0NvbXBsZXgg
PyAiQ09NUExFWCIgOiAiU0lNUExFIiwgZm91bmRXb3JkLCAqc3RhcnQsICplbmQsIHVuaVN0cmlu
ZywgdW5pU3RyaW5nLCBwb3NpdGlvbiwgbGVuKTsKKyAgICBDRlJlbGVhc2UoZm91bmRXb3JkKTsK
KyAgICBDRlJlbGVhc2UodW5pU3RyaW5nKTsKKyNlbmRpZgorICAgIAorI2VuZGlmCiB9CiAKIHZv
aWQgZmluZEVuZFdvcmRCb3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBw
b3NpdGlvbiwgaW50KiBlbmQpCkBAIC01Myw2ICsyNTgsNyBAQCB2b2lkIGZpbmRFbmRXb3JkQm91
bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogZW5k
KQogCiBpbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxl
biwgaW50IHBvc2l0aW9uLCBib29sIGZvcndhcmQpCiB7ICAgCisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICBOU1N0cmluZyogc3RyaW5nID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0
ZXJzTm9Db3B5OmNvbnN0X2Nhc3Q8dW5pY2hhcio+KGNoYXJzKQogICAgICAgICBsZW5ndGg6bGVu
IGZyZWVXaGVuRG9uZTpOT107CiAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyID0gW1tOU0F0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnN0cmluZ107CkBAIC02MCw2ICsy
NjYsMzUgQEAgaW50IGZpbmROZXh0V29yZEZyb21JbmRleChjb25zdCBVQ2hhciogY2hhcnMsIGlu
dCBsZW4sIGludCBwb3NpdGlvbiwgYm9vbCBmb3J3YXIKICAgICBbYXR0ciByZWxlYXNlXTsKICAg
ICBbc3RyaW5nIHJlbGVhc2VdOwogICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIC8vIFRo
aXMgdmVyeSBsaWtlbHkgd29uJ3QgYmVoYXZlIGV4YWN0bHkgbGlrZSB0aGUgbm9uLWlQaG9uZSB2
ZXJzaW9uLCBidXQgaXQgd29ya3MKKyAgICAvLyBmb3IgdGhlIGNvbnRleHRzIGluIHdoaWNoIGl0
IGlzIHVzZWQgb24gaVBob25lLCBhbmQgaW4gdGhlIGZ1dHVyZSB3aWxsIGJlCisgICAgLy8gdHVu
ZWQgdG8gaW1wcm92ZSB0aGUgaVBob25lLXNwZWNpZmljIGJlaGF2aW9yIGZvciB0aGUga2V5Ym9h
cmQgYW5kIHRleHQgZWRpdGluZy4KKyAgICBpbnQgcG9zID0gcG9zaXRpb247CisgICAgVUVycm9y
Q29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgVUJyZWFrSXRlcmF0b3IgKmJvdW5kYXJ5
ID0gdWJya19vcGVuKFVCUktfV09SRCwgY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCksIGNvbnN0
X2Nhc3Q8dW5pY2hhciAqPihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuaWNoYXIgKj4oY2hhcnMp
KSwgbGVuLCAmc3RhdHVzKTsKKworICAgIGlmIChib3VuZGFyeSAmJiBVX1NVQ0NFU1Moc3RhdHVz
KSkgeworICAgICAgICBpZiAoZm9yd2FyZCkgeworICAgICAgICAgICAgZG8geworICAgICAgICAg
ICAgICAgIHBvcyA9IHVicmtfZm9sbG93aW5nKGJvdW5kYXJ5LCBwb3MpOyAgICAKKyAgICAgICAg
ICAgICAgICBpZiAocG9zID09IFVCUktfRE9ORSkgeworICAgICAgICAgICAgICAgICAgICBwb3Mg
PSBsZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAocG9zIDwgbGVu
ICYmIChwb3MgPT0gMCB8fCAhaXNTa2lwQ2hhcmFjdGVyKGNoYXJzW3Bvcy0xXSkpICYmIGlzU2tp
cENoYXJhY3RlcihjaGFyc1twb3NdKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgcG9zID0gdWJya19wcmVjZWRpbmcoYm91bmRh
cnksIHBvcyk7CisgICAgICAgICAgICAgICAgaWYgKHBvcyA9PSBVQlJLX0RPTkUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcG9zID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IHdoaWxlIChwb3MgPiAwICYmIGlzU2tpcENoYXJhY3RlcihjaGFyc1twb3NdKSAmJiAhaXNXaGl0
ZXNwYWNlQ2hhcmFjdGVyKGNoYXJzW3Bvcy0xXSkpOworICAgICAgICB9CisgICAgICAgIHVicmtf
Y2xvc2UoYm91bmRhcnkpOworICAgIH0KKyAgICByZXR1cm4gcG9zOworI2VuZGlmIC8vICFQTEFU
Rk9STShJT1MpCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvbWFjL1RleHRDb2RlY01hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21h
Yy9UZXh0Q29kZWNNYWMuY3BwCmluZGV4IDQ4YTk3NzZhOWU1NWEzY2I0Y2NjZWEyYjVkNzkyMzIx
YWI0NDU3ZGQuLjczZWQ0ZTgxZGNlZmZhZmQ3NGM2OGFmMGQwZTVkZDY4M2I1ZDY5MDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmNwcApA
QCAtMjQsNiArMjQsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAorI2lmICFQTEFURk9STShJ
T1MpCisKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0Q29kZWNNYWMuaCIKIApA
QCAtMzI1LDMgKzMyNyw1IEBAIENTdHJpbmcgVGV4dENvZGVjTWFjOjplbmNvZGUoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlCiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5oCmluZGV4IDNlN2EyMzdjMTM3
ZTk5NzAwMzRhN2E4ZmFlMWJmZTA4NzQ1ZTI5MTMuLjQ2MDJiMWJhOGM2OWVlZThiMTM4NDgwNDI1
OGZjOGIxY2MwNzQzMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
bWFjL1RleHRDb2RlY01hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFj
L1RleHRDb2RlY01hYy5oCkBAIC0yNyw2ICsyNyw4IEBACiAjaWZuZGVmIFRleHRDb2RlY01hY19o
CiAjZGVmaW5lIFRleHRDb2RlY01hY19oCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaW5jbHVk
ZSAiVGV4dENvZGVjLmgiCiAjaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgog
CkBAIC03MCw0ICs3Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKwogI2VuZGlmIC8vIFRleHRDb2Rl
Y01hY19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220656</attachid>
            <date>2014-01-08 12:52:24 -0800</date>
            <delta_ts>2014-01-08 14:55:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126654-20140108125224.patch</filename>
            <type>text/plain</type>
            <size>994146</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDdlZDBhMjFhNGYxODdjMjk5YjkyNjNm
OGRiMDAxNmRlNWRmM2U2ZWMuLjQ1YTMwODVmNzZhNmNmYzY2ZmE5ZGI4YTgzY2JkNzVlMzVlYjRh
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMDEtMDggIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFVwc3RyZWFtIFdlYkNvcmUvcGxhdGZvcm0g
Y2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI2NjU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmNhbkFjY2Vzc1RocmVhZExvY2Fs
RGF0YUZvclRocmVhZCk6CisgICAgICAgICogd3RmL01haW5UaHJlYWQuaDoKKwogMjAxNC0wMS0w
NyAgRGF2aWQgRmFybGVyICA8ZGZhcmxlckBhcHBsZS5jb20+CiAKICAgICAgICAgW0FTQU5dIEJ1
aWxkaW5nIHdpdGggdHJ1bmsgY2xhbmcgY29ycnVwdHMgc2FuZGJveCBwcm9maWxlIHdpdGggY29t
bWVudCBmcm9tIENvbXBpbGVyLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYjhjOTkyZTYwYWY2NjE5NTkyZjBi
OTFiNGJkODBjMzVmZTdkZjUzLi5jMmNjMzFkNDBhZjI0ODBiYTNkMTRiYTM5NTNhOTIwZWQ1OWM4
OTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYyIEBACisyMDE0LTAxLTA4ICBEYW5pZWwgQmF0
ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBVcHN0cmVhbSBXZWJDb3Jl
L3BsYXRmb3JtIGNoYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNjY1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRlbnRGaWx0ZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9EcmFnRGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9v
c2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZpbGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWV0YWRhdGFVUkwpOgorICAg
ICAgICAqIHBsYXRmb3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9LaWxsUmlu
Z05vbmUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZmlsZUJ1dHRvbkNob29zZU1lZGlhRmlsZUxhYmVsKToKKyAgICAgICAg
KFdlYkNvcmU6OmZpbGVCdXR0b25DaG9vc2VNdWx0aXBsZU1lZGlhRmlsZXNMYWJlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpmaWxlQnV0dG9uTm9NZWRpYUZpbGVTZWxlY3RlZExhYmVsKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZpbGVCdXR0b25Ob01lZGlhRmlsZXNTZWxlY3RlZExhYmVsKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmg6CisgICAgICAgICogcGxhdGZvcm0vTG9n
Z2luZy5oOgorICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aW5pdGlhbGl6ZVN1cHBvcnRlZEltYWdlTUlNRVR5cGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmluaXRpYWxpemVTdXBwb3J0ZWROb25JbWFnZU1pbWVUeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjppbml0aWFsaXplVW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Bs
YXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpldmVudCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFp
bkJ1bmRsZUlzRXF1YWxUbyk6CisgICAgICAgICogcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzSU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1N0cmluZ1RydW5jYXRvci5oLgorICAgICAgICAqIHBsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrc0lPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVRvdWNoRXZlbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsVHlwZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
dzo6YWN0dWFsU2Nyb2xsWCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjphY3R1YWxT
Y3JvbGxZKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aXNQaW5uZWRJbkJvdGhEaXJlY3Rpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZEhvcml6b250YWxseUluRGlyZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZFZlcnRpY2Fs
bHlJbkRpcmVjdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc1RvdWNoU2Nyb2xsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aXNPdmVyZmxvd1Njcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZGlkU3RhcnRTY3JvbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWE6OmRpZEVuZFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxhYmxlQXJlYTo6ZGlkVXBkYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGFibGVBcmVhOjpzZXRJc1VzZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWE6OmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9NaW5pbXVtUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVk
VG9NYXhpbXVtUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Omlz
VmVydGljYWxTY3JvbGxlclBpbm5lZFRvTWluaW11bVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGFibGVBcmVhOjppc1ZlcnRpY2FsU2Nyb2xsZXJQaW5uZWRUb01heGltdW1Qb3Np
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGVQdXJnZWFibGVCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6c2hvdWxkVXNlUHVyZ2Vh
YmxlTWVtb3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TdWRkZW5UZXJtaW5hdGlvbi5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdXBw
bGVtZW50YWJsZTo6cHJvdmlkZVN1cHBsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3VwcGxl
bWVudGFibGU6OnJlbW92ZVN1cHBsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3VwcGxlbWVu
dGFibGU6OnJlcXVpcmVTdXBwbGVtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TeXN0ZW1NZW1v
cnkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5n
VHJ1bmNhdG9yLmguCisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkQ2hlY2suaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVh
ZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFk
R2xvYmFsRGF0YTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRh
OjpzZXRXZWJDb3JlVGhyZWFkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjp0aHJlYWRHbG9iYWxE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmg6CisgICAgICAgICog
cGxhdGZvcm0vVGhyZWFkVGltZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFRpbWVy
czo6VGhyZWFkVGltZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFRpbWVyczo6c2hhcmVk
VGltZXJGaXJlZEludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaW1lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUaW1lckJhc2U6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVy
QmFzZTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lckJhc2U6OnNldE5leHRGaXJlVGlt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vVGltZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVy
QmFzZTo6aXNBY3RpdmUpOgorICAgICAgICAqIHBsYXRmb3JtL1VSTC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjplbmFibGVVUkxTY2hlbWVDYW5vbmljYWxpemF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmVxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTDo6cGFyc2UpOgorICAgICAgICAqIHBs
YXRmb3JtL1VSTC5oOgorICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFjLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUF1ZGlvQnVmZmVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpkZXN0
cm95QXVkaW9CdWZmZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6
QXVkaW9GaWxlUmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6fkF1
ZGlvRmlsZVJlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OnJlYWRQ
cm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6Z2V0U2l6ZVByb2MpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUF1ZGlvRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2lv
cy9BdWRpb0ZpbGVSZWFkZXJJT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmguCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Zp
bGVSZWFkZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpkYXRh
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvU2Vzc2lvbklPUy5tbToK
KyAgICAgICAgKFNPRlRfTElOS19QT0lOVEVSKToKKyAgICAgICAgKC1bV2ViQXVkaW9TZXNzaW9u
SGVscGVyIGluaXRXaXRoQ2FsbGJhY2s6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1dlYkF1ZGlv
U2Vzc2lvbkhlbHBlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkF1ZGlvU2Vzc2lvbkhlbHBl
ciBpbnRlcnJ1cHRpb246XSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1Nlc3Npb246OnNldENh
dGVnb3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1h
Yy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZSk6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vYXVk
aW8vbWFjL01lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwOgorICAgICAgICAoTWVkaWFTZXNzaW9u
TWFuYWdlcjo6dXBkYXRlU2Vzc2lvblN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9TaGFy
ZWRCdWZmZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vY2YvVVJMQ0YuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2NvY29hL0tleUV2ZW50Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjp3aW5kb3dzS2V5
Q29kZUZvckNoYXJDb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lSW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6b3JpZ2luYWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpvcmlnaW5h
bFNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjplbnN1cmVG
cmFtZUluZm9Jc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lT3JpZW50YXRpb25BdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzdGFydEFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0RhcmspOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
RGlzcGxheVJlZnJlc2hNb25pdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Rm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp3
aWR0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6d29yZFNwYWNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6bGV0dGVy
U3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzZXRXb3JkU3BhY2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpzZXRMZXR0ZXJTcGFjaW5nKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOgorICAgICAgICAoaW5pdEZvbnRDYWNoZUxvY2tPbmNl
KToKKyAgICAgICAgKEZvbnRMb2NrZXI6OkZvbnRMb2NrZXIpOgorICAgICAgICAoRm9udExvY2tl
cjo6fkZvbnRMb2NrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udENhY2hlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0
UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3U2ltcGxlVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRHbHlwaHMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmZvbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cm91bmRzR2x5cGhBZHZhbmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjppbml0aWFsaXplUGFnZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdCaWRpVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBS
b3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmVtb2ppRHJh
d2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRFbW9q
aURyYXdpbmdFbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6Y29udGVudHNMYXllckZvck1lZGlhKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6OnBpeGVsQWxpZ25tZW50T2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6Omhhc0ZsYXR0ZW5lZFBlcnNwZWN0aXZlVHJhbnNmb3JtKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JY29uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdUaWxlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjppc1N1YnNhbXBsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFBvaW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbnN0YWxsZWRN
ZWRpYUVuZ2luZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmlzQ3VycmVudFBs
YXliYWNrVGFyZ2V0V2lyZWxlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6
aGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXI6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyOjpzZXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0
ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmN1cnJlbnRQbGF5YmFja1Rh
cmdldElzV2lyZWxlc3NDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpw
bGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXI6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXI6OnJlYWR5Rm9yUGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnZv
bHVtZUNoYW5nZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllckNsaWVudDo6bWVkaWFQbGF5ZXJDdXJyZW50
UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllckNsaWVudDo6bWVkaWFQbGF5ZXJQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5n
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjp2b2x1bWUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjppc0N1cnJlbnRQ
bGF5YmFja1RhcmdldFdpcmVsZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZTo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6aGFzV2lyZWxlc3NQbGF5YmFja1Rhcmdl
dHMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjp3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2U6OnNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6c2V0SGFzUGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlSW50ZXJmYWNlOjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6cmVhZHlGb3JQbGF5YmFjayk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1N0cmluZ1RydW5jYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjZW50ZXJUcnVuY2F0ZVRv
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0VHJ1bmNhdGVUb0J1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpyaWdodENsaXBUb0NoYXJhY3RlckJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpyaWdodENsaXBUb1dvcmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFRydW5j
YXRlVG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6dHJ1bmNhdGVTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJUcnVuY2F0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RyaW5nVHJ1bmNhdG9yOjpsZWZ0VHJ1bmNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3Ry
aW5nVHJ1bmNhdG9yOjpyaWdodENsaXBUb0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dHJpbmdUcnVuY2F0b3I6OnJpZ2h0Q2xpcFRvV29yZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OnN1cHBvcnRz
VHlwZXNldHRpbmdGZWF0dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL0FWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGwubW06CisgICAgICAgIChXZWJDb3JlOjpB
VlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsOjpsYWJlbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OnBsYXRmb3JtTWF4VGltZUxvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjp3a0FWQXNzZXRS
ZXNvbHZlZFVSTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250
QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzdXBwb3J0c0FjY2VsZXJhdGVkRmlsdGVyQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNvbnRlbnRzTGF5ZXJGb3JNZWRpYSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNvbXB1dGVWaXNpYmxlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdlb21ldHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNSZWN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9ybUFuaW1h
dGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
c2V0dXBDb250ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
bWVkaWFMYXllck11c3RCZVVwZGF0ZWRPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNBOjpjb21wdXRlUGl4ZWxBbGlnbm1lbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvUGxhdGZvcm1DQUxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3VycmVu
dFJ1bkxvb3ApOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxlcjo6c2NoZWR1
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMubW06CisgICAgICAgICgtW1dlYkFuaW1hdGlvbkRlbGVnYXRlIGFuaW1hdGlvbkRpZFN0YXJ0
Ol0pOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRDb250ZW50c1NjYWxlKToKKyAg
ICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6aXNXZWJMYXllcik6CisgICAgICAgIChQbGF0Zm9ybUNB
TGF5ZXI6OnNldEJvdW5kc09uTWFpblRocmVhZCk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6
OnNldFBvc2l0aW9uT25NYWluVGhyZWFkKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6c2V0
QW5jaG9yUG9pbnRPbk1haW5UaHJlYWQpOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjpzZXRU
aWxlU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9s
bGVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnBsYXRmb3JtQ0FMYXll
clBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnJlbW92
ZUFsbFRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpyZW1vdmVBbGxT
ZWNvbmRhcnlUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmVtb3Zl
VGlsZXNJbkNvaG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmV2YWxp
ZGF0ZVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpjcmVhdGVUaWxl
TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0Zv
clNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lQXRJbmRleCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVDR0NvbG9yV2l0aERldmljZVdoaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUNHQ29sb3JXaXRoRGV2aWNlUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29s
b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzUkdCQ29sb3JT
cGFjZVJlZik6CisgICAgICAgIChXZWJDb3JlOjpzZXRTdHJva2VBbmRGaWxsQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlSU9TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpqcGVnVVRJKToKKyAgICAgICAgKFdlYkNvcmU6OnV0aUZyb21NSU1FVHlwZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdQYXR0ZXJuQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpJbWFnZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjppbWFnZVNvdXJjZU9w
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmltYWdlU291cmNlT3B0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6b3JpZ2luYWxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW06CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW50UmVjdENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXpl
Q0cuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW06CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhQXNzaWduKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6OmFsbG93c0xpZ2F0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpjdEZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNwbGF5
UmVmcmVzaE1vbml0b3JpT1MubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yOjp+RGlzcGxheVJlZnJlc2hNb25pdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlSZWZyZXNoTW9uaXRvcjo6cmVxdWVzdFJlZnJlc2hDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I6OmRpc3BsYXlMaW5rRmlyZWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW06IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJT1MuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5tbTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250U2VydmljZXNJT1M6OkZvbnRTZXJ2aWNlc0lPUyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBoaWNzQ29udGV4dDNESU9TLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuY3Bw
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmguCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGSU9TOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUzo6aW50ZXJuYWxJRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRSZWN0TWFjLm1tLgorICAgICAgICAoV2Vi
Q29yZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUzo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRklPUyk6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9T
Ojp+SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUyk6CisgICAgICAgIChXZWJDb3JlOjpJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TOjpraW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9pb3MvTWVkaWFQbGF5ZXJQcml2YXRlSU9TLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2lvcy9NZWRpYVBsYXllclByaXZhdGVJT1MubW06IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZvbnRIYXNWZXJ0aWNhbEdseXBocyk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRUcmFja1JlcHJlc2VudGF0aW9u
LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25JT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xv
ck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjphZGp1
c3RHbHlwaHNBbmRBZHZhbmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW06CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1hYy5tbToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3
Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Zm9udERhdGFGb3JDb21iaW5p
bmdDaGFyYWN0ZXJTZXF1ZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hvd0xldHRlcnByZXNzZWRHbHlwaHNX
aXRoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFjLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2VGcm9tRHJhd2FibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRG90UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL21hYy9JY29uTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW06
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWMubW06CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFNpemVNYWMubW06CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJveHkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9XZWJHTExheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1dlYkdMTGF5ZXIubW06CisgICAgICAgICgtW1dlYkdMTGF5ZXIgY29weUltYWdlU25hcHNo
b3RXaXRoQ29sb3JTcGFjZTpdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBkaXNwbGF5XSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6ZHJhd0xheWVyQ29udGVudHMpOgorICAgICAgICAoLVtXZWJTaW1wbGVMYXllciBkaXNw
bGF5XSk6CisgICAgICAgICgtW1dlYlNpbXBsZUxheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIubW06CisgICAgICAgICgr
W1dlYlRpbGVkTGF5ZXIgc2hvdWxkRHJhd09uTWFpblRocmVhZF0pOgorICAgICAgICAoLVtXZWJU
aWxlZExheWVyIGRpc3BsYXldKToKKyAgICAgICAgKC1bV2ViVGlsZWRMYXllciBkcmF3SW5Db250
ZXh0Ol0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpibGl0RnJh
bWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpiaW5kVmVy
dGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBw
b3J0c0V4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmRy
YXdCdWZmZXJzRVhUKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1h
dGlvbk1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
bXVsdGlwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vaW9zL0NvbnRlbnRGaWx0
ZXJJT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRGaWx0
ZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvRGV2aWNlTW90aW9uQ2xpZW50SU9TLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TOjpjcmVhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9EZXZpY2VNb3Rpb25DbGllbnRJT1MubW06IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpjcmVhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5tbTog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL0tleUV2ZW50SU9TLm1tOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9NSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9pb3MvTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmQ6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJl
c291cmNlTUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVQbGFp
blRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpzdXBwb3J0ZWRJbWFnZVR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OnN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIu
aC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW06IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9pb3MvUGxhdGZvcm1TY3JlZW5JT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2lvcy9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1tOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9pb3MvU1NMS2V5R2VuZXJhdG9ySU9TLmNwcDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5oLgorICAgICAgICAqIHBsYXRm
b3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1Njcm9sbFZpZXdJT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TY3Jv
bGxiYXJUaGVtZUlPUy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvU2Nyb2xsYmFy
VGhlbWVJT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TZWxlY3Rpb25SZWN0
LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1NlbGVjdGlvblJlY3QuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1NvdW5kSU9TLm1tOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9DaGFyc2V0RGF0YS5oLgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9TeXN0ZW1NZW1vcnlJT1MuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvVGhlbWVJT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2ls
bFJpbmdOb25lLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGhlbWVJT1MubW06IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9uZS5jcHAuCisgICAgICAg
ICogcGxhdGZvcm0vaW9zL1RpbGVDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVDYWNoZTo6aXNTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9UaWxlQ2FjaGUubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9U
aWxlR3JpZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGlsZUdyaWQubW06IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZpbHRlci5oLgorICAgICAgICAqIHBsYXRm
b3JtL2lvcy9UaWxlR3JpZFRpbGUubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9U
aWxlTGF5ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3Bs
YXlTbGVlcERpc2FibGVyLmguCisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVMYXllci5tbTog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVMYXllclBvb2wubW06IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwLgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5tbTogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW06IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2lvcy9XZWJFdmVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvV2ViRXZlbnQubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XaWRnZXRJT1Mu
bW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5U2xlZXBEaXNhYmxlcjo6RGlzcGxheVNsZWVw
RGlzYWJsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVNsZWVwRGlzYWJsZXI6On5EaXNw
bGF5U2xlZXBEaXNhYmxlcik6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERp
c2FibGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW06CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlQ
cmVzc3VyZUhhbmRsZXI6Omluc3RhbGwpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5UHJlc3N1
cmVIYW5kbGVyOjpyZWxlYXNlTWVtb3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZv
cm1DbG9ja0NNLm1tOgorICAgICAgICAoUGxhdGZvcm1DbG9ja0NNOjpQbGF0Zm9ybUNsb2NrQ00p
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9TeXN0ZW1WZXJzaW9uTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJD
b3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9X
ZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJD
b3JlRnVsbFNjcmVlbldpbmRvdy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZU5T
Q2VsbEV4dHJhcy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFz
Lm06CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViRm9udENhY2hlLm1tOgorICAgICAgICAoK1tXZWJGb250
Q2FjaGUgZm9udFdpdGhGYW1pbHk6dHJhaXRzOnNpemU6XSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9CbG9iUmVnaXN0cnkuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5SW1wbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFs
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFnZTo6c2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpjbGVhckNyZWRlbnRpYWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbHRpblJlc291cmNlSGFu
ZGxlQ29uc3RydWN0b3JNYXApOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
Ojpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RGVm
YXVsdEFsbG93Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNl
OjpkZWZhdWx0QWxsb3dDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OlJlc291cmNlUmVxdWVzdEJhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvQ3Jl
ZGVudGlhbFN0b3JhZ2VDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3Rv
cmFnZTo6c2F2ZVRvUGVyc2lzdGVudFN0b3JhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY2YvRE5TQ0ZOZXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUHJveHlT
ZXJ2ZXJDRk5ldC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
cXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6c2V0TWFpblJlc291cmNl
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmlzTWFpblJlc291
cmNlUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVl
c3RDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZUZy
b21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRIVFRQQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3Q6OmRvVXBkYXRlUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdDo6YXBwbHlXZWJBcmNoaXZlSGFja0Zvck1haWwpOgorICAgICAgICAo
V2ViQ29yZTo6aW5pdGlhbGl6ZUhUVFBDb25uZWN0aW9uU2V0dGluZ3NPblN0YXJ0dXApOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZXBvcnRFcnJvclRvQ2xpZW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9OZXR3b3JrU3RhdGVOb3RpZmllcklP
Uy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9uZS5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RhdGVOb3RpZmllcjo6TmV0d29ya1N0YXRl
Tm90aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0YXRlTm90aWZpZXI6OnNldElz
T25MaW5lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xvb2suaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLm1tOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9SZXNvdXJjZUhhbmRsZUlPUy5tbTogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9pb3MvV2ViQ29yZVVSTFJlc3BvbnNlSU9T
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1Ry
dW5jYXRvci5oLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvaW9zL1dlYkNvcmVVUkxSZXNw
b25zZUlPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvQXV0aGVu
dGljYXRpb25NYWMubW06CisgICAgICAgIChXZWJDb3JlOjptYWMpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvbWFjL0NyZWRlbnRpYWxTdG9yYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OnNhdmVUb1BlcnNpc3RlbnRTdG9yYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUVycm9yTWFjLm1tOgorICAgICAgICAoZGlj
dGlvbmFyeVRoYXRDYW5Db2RlKToKKyAgICAgICAgKC1bV2ViQ3VzdG9tTlNVUkxFcnJvciBlbmNv
ZGVXaXRoQ29kZXI6XSk6CisgICAgICAgIChOU0Vycm9yRnJvbUNGRXJyb3IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VFcnJvcjo6bnNFcnJvcik6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzeW5jaHJv
bm91c1dpbGxTZW5kUmVxdWVzdEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNjaGVk
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp1bnNjaGVkdWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMv
UmVzb3VyY2VSZXF1ZXN0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
OjpSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp1
cGRhdGVOU1VSTFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojph
cHBseVdlYkFyY2hpdmVIYWNrRm9yTWFpbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3Q6OnVzZVF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcyk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9tYWMvVVRJVXRpbGl0aWVzLm1tOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUubW06CisgICAgICAgICgt
W1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUgY29ubmVjdGlvblNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlOl0pOgorICAgICAgICAoLVtXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVn
YXRlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZVJlc3BvbnNlOl0pOgorICAgICAgICAoLVtXZWJDb3Jl
UmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZURhdGFBcnJheTpd
KToKKyAgICAgICAgKC1bV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSBjb25uZWN0aW9u
OmRpZFJlY2VpdmVEYXRhOmxlbmd0aFJlY2VpdmVkOl0pOgorICAgICAgICAoLVtXZWJDb3JlUmVz
b3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5nOl0pOgorICAg
ICAgICAoLVtXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246ZGlkRmFp
bFdpdGhFcnJvcjpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzcWxpdGUzSGFuZGxlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVGaWxlU3lzdGVtOjp0cnVuY2F0ZURhdGFiYXNlRmlsZSk6CisgICAgICAgICogcGxh
dGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FM
aXRlVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb246
OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uOjpjb21taXQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb246OnJvbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uOjpzdG9wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9z
cWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3NxbC9pb3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAuCisgICAgICAgICogcGxh
dGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcC4KKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1Bs
YXRmb3JtTG9jYWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRv
cklDVS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQ29kZWNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFRleHRD
b2RlY01hcHMpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjYW5IeXBoZW5hdGUpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvbWFjL0NoYXJzZXREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxl
TWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6TG9jYWxlTWFjOjpmb3JtYXREYXRlVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2NhbGVNYWM6Om1heGltdW1XaWR0aEZvckRhdGVUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2tpcENo
YXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1doaXRlc3BhY2VDaGFyYWN0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNXb3JkRGVsaW1pdGluZ0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJD
b3JlOjppc1N5bWJvbENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc0FtYmlndW91c0Jv
dW5kYXJ5Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRva2VuaXplckZvclN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpmaW5kU2ltcGxlV29yZEJvdW5kYXJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRDb21wbGV4V29yZEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRX
b3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5leHRXb3JkRnJvbUluZGV4KToK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5oOgorCiAyMDE0LTAxLTA4ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgV2lu
ZG93cyBidWlsZCBmaXggYXR0ZW1wdCBhZnRlciByMTYxNDgxLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvTWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApp
bmRleCAwNDRhNjQ3MjA5Yzc0MjIxNjYwM2FlYjdhYzcyZjdkOGUxZWI2MjUxLi5mNTcyYTNmZjVi
N2E5Mjg4ZDA0YjBjMTI4ZDU4ZGViZjUyMzA3ZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9NYWluVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApAQCAt
MjY2LDYgKzI2NiwxMyBAQCBib29sIGlzTWFpblRocmVhZCgpCiB9CiAjZW5kaWYKIAorI2lmICFV
U0UoV0VCX1RIUkVBRCkKK2Jvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSWQpCit7CisgICAgcmV0dXJuIHRocmVhZElkID09IGN1cnJl
bnRUaHJlYWQoKTsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQogc3RhdGlj
IFRocmVhZFNwZWNpZmljPGJvb2w+KiBpc0dDVGhyZWFkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmggYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgK
aW5kZXggNTBkZWI5YTlkMTUwYjA2NDEzMjExZDZhZWY2MmQzN2MwYmM5M2Y2OS4uMTNmNTUyMDRi
ZTQ3MTJmNDEzYTdjYTY4NjExYWQ3ZTJjYWE4ZDdiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvTWFpblRocmVhZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaApAQCAtNTUs
MTMgKzU1LDE0IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1haW5UaHJlYWRDYWxsYmFj
a3NQYXVzZWQoYm9vbCBwYXVzZWQpOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc01haW5U
aHJlYWQoKTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxE
YXRhRm9yVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworCiAjaWYgVVNFKFdFQl9USFJFQUQpCiBX
VEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1dlYlRocmVhZCgpOwogV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgaXNVSVRocmVhZCgpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVdl
YlRocmVhZCgpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZUFwcGxpY2F0aW9u
VUlUaHJlYWRJZGVudGlmaWVyKCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXpl
V2ViVGhyZWFkSWRlbnRpZmllcigpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOwogdm9pZCBpbml0aWFs
aXplV2ViVGhyZWFkUGxhdGZvcm0oKTsKICNlbHNlCiBpbmxpbmUgYm9vbCBpc1dlYlRocmVhZCgp
IHsgcmV0dXJuIGlzTWFpblRocmVhZCgpOyB9CkBAIC0xMDIsMTEgKzEwMywxMyBAQCB1c2luZyBX
VEY6OmNhbmNlbENhbGxPbk1haW5UaHJlYWQ7CiB1c2luZyBXVEY6OnNldE1haW5UaHJlYWRDYWxs
YmFja3NQYXVzZWQ7CiB1c2luZyBXVEY6OmlzTWFpblRocmVhZDsKIHVzaW5nIFdURjo6aXNNYWlu
VGhyZWFkT3JHQ1RocmVhZDsKK3VzaW5nIFdURjo6Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkOwordXNpbmcgV1RGOjppc1VJVGhyZWFkOwordXNpbmcgV1RGOjppc1dlYlRocmVhZDsK
ICNpZiBVU0UoV0VCX1RIUkVBRCkKIHVzaW5nIFdURjo6aW5pdGlhbGl6ZVdlYlRocmVhZDsKIHVz
aW5nIFdURjo6aW5pdGlhbGl6ZUFwcGxpY2F0aW9uVUlUaHJlYWRJZGVudGlmaWVyOwogdXNpbmcg
V1RGOjppbml0aWFsaXplV2ViVGhyZWFkSWRlbnRpZmllcjsKLXVzaW5nIFdURjo6Y2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkOwogI2VuZGlmCiAKICNlbmRpZiAvLyBNYWluVGhyZWFk
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMGMxZmQyYzNiZWMyNGI5OTg1ZTcyYWU5MjI3Mzcz
ZmNmZWEyM2UzMS4uMjkzYWFjMTcyMjNkZTc0Y2E0MGU0MmVlMzgzM2FjNjhjZTVjYmI0ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KQEAgLTE5MTUsNiArMTkxNSw5IEBAIF93a1NpZ25hbENGUmVhZFN0
cmVhbUVuZAogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtRXJyb3IKIF93a1NpZ25hbENGUmVhZFN0cmVh
bUhhc0J5dGVzCiAKK19fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc0Fkb2JlSW5zdGFsbGVyRXYK
K19fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc01pY3Jvc29mdE15RGF5RXYKKwogI2lmICFQTEFU
Rk9STShJT1MpCiAub2JqY19jbGFzc19uYW1lX0RPTUF0dHIKIC5vYmpjX2NsYXNzX25hbWVfRE9N
Q0RBVEFTZWN0aW9uCkBAIC0yMDQzLDggKzIwNDYsNiBAQCBfX1pON1dlYkNvcmUyNmNvbnRleHRN
ZW51SXRlbVRhZ0ZvbnRNZW51RXYKIF9fWk43V2ViQ29yZTI2Y29udGV4dE1lbnVJdGVtVGFnT3Bl
bkxpbmtFdgogX19aTjdXZWJDb3JlMjZwZGZEb2N1bWVudFR5cGVEZXNjcmlwdGlvbkV2CiBfX1pO
N1dlYkNvcmUyNnVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yRXYKLV9fWk43V2ViQ29yZTI3YXBw
bGljYXRpb25Jc0Fkb2JlSW5zdGFsbGVyRXYKLV9fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc01p
Y3Jvc29mdE15RGF5RXYKIF9fWk43V2ViQ29yZTI3Y29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRz
RXYKIF9fWk43V2ViQ29yZTI3Y29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lRXYKIF9fWk43V2Vi
Q29yZTI4Y29udGV4dE1lbnVJdGVtVGFnQ2FwaXRhbGl6ZUV2CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTVlNzNjZTc2MTZmOTQ2
NDRmZjk4NjViYjg2NGFkYjIzZGI1MTNlMS4uMTdmZjYzYjkyMGYwMDQzZDIxZTFlNTZjNzNjNjRk
MGFjYmUyNjM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtNTQ5Miw2ICs1NDkyLDczIEBACiAJCUNFQ0FERkNFMTUzNzc5MUQw
MEUzNzA2OCAvKiBUZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQ0FERkNDMTUzNzc5MUQwMEUzNzA2OCAvKiBU
ZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuaCAqLzsgfTsKIAkJQ0VDQ0ZDM0IxNDE5NzNENTAwMkEw
QUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VDQ0ZDM0ExNDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVz
Y2FwZVNlcXVlbmNlcy5oICovOyB9OwogCQlDRURBMTJENzE1MkNBMUNCMDBEOUUwOEQgLyogQWx0
ZXJuYXRpdmVUZXh0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRURBMTJENjE1MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xp
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MjkwMzcxNjUxNkJBMTFCQzAwRkVGREYwIC8qIENvbnRlbnRGaWx0ZXJJT1MubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTAzNzE2NDE2QkExMUJDMDBG
RUZERjAgLyogQ29udGVudEZpbHRlcklPUy5tbSAqLzsgfTsKKwkJMzFFQUY5N0UxMjE0MzVBNDAw
RTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFFQUY5N0MxMjE0MzVBNDAwRTdDMUJGIC8qIERldmlj
ZU1vdGlvbkNsaWVudElPUy5oICovOyB9OworCQkzMUVBRjk3RjEyMTQzNUE0MDBFN0MxQkYgLyog
RGV2aWNlTW90aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzFFQUY5N0QxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlvbkNs
aWVudElPUy5tbSAqLzsgfTsKKwkJMzE0MDM3OUQxMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9y
aWVudGF0aW9uQ2xpZW50SU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTQwMzc5OTEyNEJFQTdGMDBBRjQwRTQgLyogRGV2aWNlT3JpZW50YXRpb25D
bGllbnRJT1MuaCAqLzsgfTsKKwkJMzE0MDM3OUUxMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9y
aWVudGF0aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzE0MDM3OUExMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9u
Q2xpZW50SU9TLm1tICovOyB9OworCQkxRjY4RDRBRTE0QkI5RENBMDA3QjVDNjIgLyogTWVtb3J5
UHJlc3N1cmVIYW5kbGVySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUY2OEQ0QUQxNEJCOURDQTAwN0I1QzYyIC8qIE1lbW9yeVByZXNzdXJlSGFu
ZGxlcklPUy5tbSAqLzsgfTsKKwkJRTQ1MzkwMUQwRUFGQ0FDQTAwMzY5NUM4IC8qIE1JTUVUeXBl
UmVnaXN0cnlJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDUzOTAxODBFQUZDQUNBMDAzNjk1QzggLyogTUlNRVR5cGVSZWdpc3RyeUlPUy5tbSAq
LzsgfTsKKwkJMjY2MDFFQkYxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5
SU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjYw
MUVCRDE0QjNCOUFEMDAxMkMwRkUgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkyNjYwMUVDMDE0QjNC
OUFEMDAxMkMwRkUgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjYwMUVCRTE0QjNCOUFEMDAxMkMwRkUg
LyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0gKi87IH07CisJCUU0NTM5MDQzMEVBRkQ2Mzcw
MDM2OTVDOCAvKiBQbGF0Zm9ybVNjcmVlbklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MDMyMEVBRkQ2MzcwMDM2OTVDOCAvKiBQbGF0Zm9y
bVNjcmVlbklPUy5tbSAqLzsgfTsKKwkJQUExMkRGNDkxNzQzREY4MzAwNERBRkRGIC8qIFBsYXRm
b3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBQUUzNzU1RDE3NDI5QkNDMDA2MjAwQzIgLyogUGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXplcklPUy5tbSAqLzsgfTsKKwkJMEYxNzc0ODAxMzc4Qjc3MjAwOURBNzZBIC8q
IFNjcm9sbEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1Mu
aCAqLzsgfTsKKwkJMEYxNzc0ODExMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNzc0
N0YxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLm1tICovOyB9OworCQk0NEM5
OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Qzk5MTg1MEYzRDFFQkUwMDU4NjY3
MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5oICovOyB9OworCQk0NEM5OTE4MjBGM0QxRTBEMDA1ODY2
NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NEM5OTE4MTBGM0QxRTBEMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhl
bWVJT1MubW0gKi87IH07CisJCUU0NTM5MDQ1MEVBRkQ2MzcwMDM2OTVDOCAvKiBTY3JvbGxWaWV3
SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1
MzkwMzQwRUFGRDYzNzAwMzY5NUM4IC8qIFNjcm9sbFZpZXdJT1MubW0gKi87IH07CisJCUJFQTgw
N0M4MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFQTgwN0M2MEY3MTRBMDMwMDUyNDE5OSAv
KiBTZWxlY3Rpb25SZWN0LmNwcCAqLzsgfTsKKwkJQkVBODA3QzkwRjcxNEEwMzAwNTI0MTk5IC8q
IFNlbGVjdGlvblJlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJFQTgwN0M3MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTQ1MzkwNDcwRUFG
RDYzNzAwMzY5NUM4IC8qIFNvdW5kSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQ1MzkwMzYwRUFGRDYzNzAwMzY5NUM4IC8qIFNvdW5kSU9TLm1t
ICovOyB9OworCQk0NDc2NTMxQjEzMzE3MDk5MDAwNkI3ODkgLyogU1NMS2V5R2VuZXJhdG9ySU9T
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NzY1
MzFBMTMzMTcwOTkwMDA2Qjc4OSAvKiBTU0xLZXlHZW5lcmF0b3JJT1MuY3BwICovOyB9OworCQlF
NDUzOTBBRTBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9TLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MEFEMEVBRkY0QjUwMDM2
OTVDOCAvKiBTeXN0ZW1NZW1vcnlJT1MuY3BwICovOyB9OworCQk0NEM5OTE5RjBGM0QyMTBFMDA1
ODY2NzAgLyogVGhlbWVJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0Qzk5MTlEMEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5oICovOyB9Owor
CQk0NEM5OTFBMDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEM5OTE5RTBGM0QyMTBFMDA1ODY2NzAg
LyogVGhlbWVJT1MubW0gKi87IH07CisJCUU0QzNCMUZBMEYwRTQxNjEwMDk2OTNGNiAvKiBUaWxl
Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
QzNCMUY5MEYwRTQxNjEwMDk2OTNGNiAvKiBUaWxlQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFNEMzQjFGQzBGMEU0MTcwMDA5NjkzRjYg
LyogVGlsZUNhY2hlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTRDM0IxRkIwRjBFNDE3MDAwOTY5M0Y2IC8qIFRpbGVDYWNoZS5tbSAqLzsgfTsKKwkJ
RTRCNjVBNTgxMzJGQThFNzAwNzBFN0JFIC8qIFRpbGVHcmlkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1NzEzMkZBOEU3MDA3MEU3QkUgLyog
VGlsZUdyaWQuaCAqLzsgfTsKKwkJRTRCNjVBNUExMzJGQUFGOTAwNzBFN0JFIC8qIFRpbGVHcmlk
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNjVB
NTkxMzJGQUFGOTAwNzBFN0JFIC8qIFRpbGVHcmlkLm1tICovOyB9OworCQlFNDI0QTM5RTEzMzBE
RjAxMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDI0QTM5RDEzMzBERjAxMDBDRjZEQzkgLyogVGlsZUdyaWRU
aWxlLmggKi87IH07CisJCUU0MjRBM0EwMTMzMERGMUUwMENGNkRDOSAvKiBUaWxlR3JpZFRpbGUu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDI0QTM5
RjEzMzBERjFFMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLm1tICovOyB9OworCQlFNEI2NUE1QzEz
MkZBQ0IwMDA3MEU3QkUgLyogVGlsZUxheWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1QjEzMkZBQ0IwMDA3MEU3QkUgLyogVGlsZUxheWVy
LmggKi87IH07CisJCUU0QjY1QTVFMTMyRkFEQjYwMDcwRTdCRSAvKiBUaWxlTGF5ZXIubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1RDEzMkZB
REI2MDA3MEU3QkUgLyogVGlsZUxheWVyLm1tICovOyB9OworCQlFNEUzOUFGQjEzMzBFRkE4MDAz
QUIyNzQgLyogVGlsZUxheWVyUG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTRFMzlBRkExMzMwRUZBODAwM0FCMjc0IC8qIFRpbGVMYXllclBvb2wu
aCAqLzsgfTsKKwkJRTRFMzlBRkQxMzMwRUZDNjAwM0FCMjc0IC8qIFRpbGVMYXllclBvb2wubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEUzOUFGQzEz
MzBFRkM1MDAzQUIyNzQgLyogVGlsZUxheWVyUG9vbC5tbSAqLzsgfTsKKwkJMzE0MDM3OUIxMjRC
RUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTQwMzc5NzEyNEJFQTdGMDBBRjQwRTQgLyog
V2ViQ29yZU1vdGlvbk1hbmFnZXIuaCAqLzsgfTsKKwkJMzE0MDM3OUMxMjRCRUE3RjAwQUY0MEU0
IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzE0MDM3OTgxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rp
b25NYW5hZ2VyLm1tICovOyB9OworCQk0NEMzQ0ZFODE1NTZCRTVEMDAwMTM2MDkgLyogV2ViQ29y
ZVN5c3RlbUludGVyZmFjZUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDRDM0NGRTcxNTU2QkU1RDAwMDEzNjA5IC8qIFdlYkNvcmVTeXN0ZW1JbnRl
cmZhY2VJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlFNDUzOTA0OTBFQUZENjM3MDAzNjk1QzggLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZUlP
Uy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5
MDM4MEVBRkQ2MzcwMDM2OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tICovOyB9
OworCQlGRTBEODRFOTEwNDg0MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ4NEU4MTA0ODQzNDgwMDFBMTc5
RSAvKiBXZWJFdmVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUZFMEQ4NEVCMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ4NEVBMTA0ODQzNkUw
MDFBMTc5RSAvKiBXZWJFdmVudC5tbSAqLzsgfTsKKwkJRTQ1MzkwNEQwRUFGRDYzNzAwMzY5NUM4
IC8qIFdpZGdldElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0NTM5MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gKi87IH07CisJ
CTBGOTdBNjU4MTU1REE4MUUwMEZBREQ0QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JpT1MubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk3QTY1NzE1
NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yaU9TLm1tICovOyB9OworCQkz
NzI3REZENTE0MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcyN0RGRDQxNDJBQUU0NTAwRDQ0OUNC
IC8qIEZvbnRDYWNoZUlPUy5tbSAqLzsgfTsKKwkJQzU4MzYxQTkxNzQ0NTIzRjAwMTczNTExIC8q
IEZvbnRTZXJ2aWNlc0lPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzU4MzYxQTcxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5oICov
OyB9OworCQlDNTgzNjFBQTE3NDQ1MjNGMDAxNzM1MTEgLyogRm9udFNlcnZpY2VzSU9TLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4MzYxQTgxNzQ0
NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5tbSAqLzsgfTsKKwkJMzFBQjUwMDAxMjI4
NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dDNESU9TLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUFCNEZGRjEyMjg3OEEyMDAxQTdEQjAgLyog
R3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLzsgfTsKKwkJRkVEMTNENDAwQ0VBOTM5NDAwRDg5NDY2
IC8qIEljb25JT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRUQxM0QzRjBDRUE5Mzk0MDBEODk0NjYgLyogSWNvbklPUy5tbSAqLzsgfTsKKwkJMDdF
RDM1QTMxNkQ2RENFMjAwMjI0OEYzIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MzU3Qzc2MTZE
MkRGMEQwMEVEOTlFNyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLmggKi87IH07CisJ
CTA3RUQzNUEyMTZENkRDQzkwMDIyNDhGMyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczNTdD
NzcxNkQyREYwRDAwRUQ5OUU3IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW0gKi87
IH07CisJCTA3NDMwMEE2MEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NDMwMEE0
MEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MuaCAqLzsgfTsKKwkJMDc0
MzAwQTUwRjRCOEJDRjAwODA3NkNEIC8qIE1lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NDMwMEEzMEY0QjhCQ0Yw
MDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MubW0gKi87IH07CisJCTM3RTY1OTUwMTYz
QjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBT
aW1wbGVGb250RGF0YUlPUy5tbSAqLzsgfTsKKwkJQ0RDQTgyOTYxNjc5MTAwRjAwODc1NzE0IC8q
IFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQTgyOTQxNjc5MTAwRjAwODc1NzE0IC8qIFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uSU9TLm1tICovOyB9OworCQlBNTE2RThCNzEzNkUwNERCMDA3NkMzQzAg
LyogTG9jYWxpemVkRGF0ZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTE2RThCNDEzNkUwNERCMDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNh
Y2hlLmggKi87IH07CisJCUE1MTZFOEI4MTM2RTA0REIwMDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRl
Q2FjaGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NTE2RThCNTEzNkUwNERCMDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLm1tICovOyB9Owor
CQlDRDU1OTY5MTE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9TLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTU5NjhGMTQ3NUI2
NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuY3BwICovOyB9OworCQlDRDU1OTY5MjE0
NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9TLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDU1OTY5MDE0NzVCNjc4MDAxRDBCRDAgLyog
QXVkaW9GaWxlUmVhZGVySU9TLmggKi87IH07CisJCTQ0QzM2M0YwMEZBQTdCQjMwMDk3RjhDQyAv
KiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QzM2M0VFMEZBQTdCQjMwMDk3RjhDQyAvKiBSdW50aW1l
QXBwbGljYXRpb25DaGVja3NJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk0NEMzNjNGMTBGQUE3QkIzMDA5N0Y4Q0MgLyogUnVudGltZUFwcGxp
Y2F0aW9uQ2hlY2tzSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDRDMzYzRUYwRkFBN0JCMzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNo
ZWNrc0lPUy5tbSAqLzsgfTsKKwkJNDQzRjA0MjcwRTc1QzhGQjAwN0U1NDA3IC8qIE5ldHdvcmtT
dGF0ZU5vdGlmaWVySU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0M0YwNDI2MEU3NUM4RkIwMDdFNTQwNyAvKiBOZXR3b3JrU3RhdGVOb3RpZmll
cklPUy5jcHAgKi87IH07CisJCTQ0MkFGN0E5MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MkFGN0E3
MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NDJBRjdBQTEwMkNEREVBMDA4RkQ0RDMgLyogUXVp
Y2tMb29rLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDQyQUY3QTgxMDJDRERFQTAwOEZENEQzIC8qIFF1aWNrTG9vay5tbSAqLzsgfTsKKwkJN0U0MjhD
RTUxM0UzNDA3RjAwM0I2NjFDIC8qIFJlc291cmNlSGFuZGxlSU9TLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0MjhDRTQxM0UzNDA3RjAwM0I2NjFD
IC8qIFJlc291cmNlSGFuZGxlSU9TLm1tICovOyB9OworCQk0NEEyMERCOTBGODQxNjZDMDBCM0Ux
RkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyMERCODBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVS
TFJlc3BvbnNlSU9TLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNDQ0RDRFMjMwRjcwOEIyRTAwMzE1OEUwIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlP
Uy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NEQ0
RTIxMEY3MDhCMkUwMDMxNThFMCAvKiBXZWJDb3JlVVJMUmVzcG9uc2VJT1MubW0gKi87IH07CisJ
CTdFNDc0RTIwMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0NzRFMUQxMjQ5
NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi87IH07CisJCTdFNDc0
RTFGMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNDc0RTFDMTI0OTREQzkwMDIz
NTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3RTQ3NEUxRTEyNDk0REM5MDAyMzUzNjQgLyogU1FM
aXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3RTQ3NEUxQjEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJh
c2VUcmFja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQ0VGNDE4Q0UxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFRjQx
OENDMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgKi87IH07CiAJCUNF
RjQxOENGMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VGNDE4Q0QxMTc5Njc4QzAwOUQx
MTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDAwMEVCQTIxMUJEQUZENDAwQzQ3NzI2IC8qIEZyYW1lTG9h
ZGVyU3RhdGVNYWNoaW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEQwMDBFQkEwMTFCREFGRDQwMEM0NzcyNiAvKiBGcmFtZUxvYWRlclN0YXRlTWFj
aGluZS5jcHAgKi87IH07CkBAIC0xMjY2NCw2ICsxMjczMSw3NCBAQAogCQlDRUNBREZDQzE1Mzc3
OTFEMDBFMzcwNjggLyogVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRUNDRkMzQTE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNj
YXBlU2VxdWVuY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY29kZUVz
Y2FwZVNlcXVlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRURBMTJENjE1
MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFsdGVybmF0aXZlVGV4dENsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyOTAzNzE2NDE2QkExMUJDMDBGRUZERjAgLyogQ29udGVudEZpbHRl
cklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IENvbnRlbnRG
aWx0ZXJJT1MubW07IHBhdGggPSBpb3MvQ29udGVudEZpbHRlcklPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzFFQUY5N0MxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlv
bkNsaWVudElPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEZXZpY2VNb3Rp
b25DbGllbnRJT1MuaDsgcGF0aCA9IGlvcy9EZXZpY2VNb3Rpb25DbGllbnRJT1MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFFQUY5N0QxMjE0MzVBNDAwRTdDMUJGIC8qIERldmlj
ZU1vdGlvbkNsaWVudElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IERldmljZU1vdGlvbkNsaWVudElPUy5tbTsgcGF0aCA9IGlvcy9EZXZpY2VNb3Rpb25DbGll
bnRJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNDAzNzk5MTI0QkVBN0Yw
MEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oOyBwYXRoID0gaW9z
L0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxNDAzNzlBMTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElP
Uy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IERldmljZU9yaWVu
dGF0aW9uQ2xpZW50SU9TLm1tOyBwYXRoID0gaW9zL0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9T
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxRjY4RDRBRDE0QkI5RENBMDA3QjVD
NjIgLyogTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tOyBwYXRoID0gaW9z
L01lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTQ1MzkwMTgwRUFGQ0FDQTAwMzY5NUM4IC8qIE1JTUVUeXBlUmVnaXN0cnlJT1MubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNSU1FVHlwZVJlZ2lzdHJ5SU9T
Lm1tOyBwYXRoID0gaW9zL01JTUVUeXBlUmVnaXN0cnlJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTI2NjAxRUJEMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFj
dG9yeUlPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybUV2ZW50
RmFjdG9yeUlPUy5oOyBwYXRoID0gaW9zL1BsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2NjAxRUJFMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0
Zm9ybUV2ZW50RmFjdG9yeUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tOyBwYXRoID0gaW9zL1BsYXRmb3JtRXZl
bnRGYWN0b3J5SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDUzOTAzMjBF
QUZENjM3MDAzNjk1QzggLyogUGxhdGZvcm1TY3JlZW5JT1MubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbGF0Zm9ybVNjcmVlbklPUy5tbTsgcGF0aCA9IGlvcy9Q
bGF0Zm9ybVNjcmVlbklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUFFMzc1
NUQxNzQyOUJDQzAwNjIwMEMyIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVySU9TLm1tOyBwYXRoID0gaW9zL1BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMTc3NDdFMTM3OEI3NzEwMDlEQTc2QSAv
KiBTY3JvbGxBbmltYXRvcklPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBT
Y3JvbGxBbmltYXRvcklPUy5oOyBwYXRoID0gaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMTc3NDdGMTM3OEI3NzIwMDlEQTc2QSAvKiBTY3Jv
bGxBbmltYXRvcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IFNjcm9sbEFuaW1hdG9ySU9TLm1tOyBwYXRoID0gaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEM5OTE4NTBGM0QxRUJFMDA1ODY2NzAgLyog
U2Nyb2xsYmFyVGhlbWVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2Ny
b2xsYmFyVGhlbWVJT1MuaDsgcGF0aCA9IGlvcy9TY3JvbGxiYXJUaGVtZUlPUy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0NEM5OTE4MTBGM0QxRTBEMDA1ODY2NzAgLyogU2Nyb2xs
YmFyVGhlbWVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBT
Y3JvbGxiYXJUaGVtZUlPUy5tbTsgcGF0aCA9IGlvcy9TY3JvbGxiYXJUaGVtZUlPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ1MzkwMzQwRUFGRDYzNzAwMzY5NUM4IC8qIFNj
cm9sbFZpZXdJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBT
Y3JvbGxWaWV3SU9TLm1tOyBwYXRoID0gaW9zL1Njcm9sbFZpZXdJT1MubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJFQTgwN0M2MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25S
ZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNlbGVjdGlvblJl
Y3QuY3BwOyBwYXRoID0gaW9zL1NlbGVjdGlvblJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCRUE4MDdDNzBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVjdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTZWxlY3Rpb25SZWN0Lmg7IHBhdGggPSBp
b3MvU2VsZWN0aW9uUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDUzOTAz
NjBFQUZENjM3MDAzNjk1QzggLyogU291bmRJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBTb3VuZElPUy5tbTsgcGF0aCA9IGlvcy9Tb3VuZElPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDQ3NjUzMUExMzMxNzA5OTAwMDZCNzg5IC8qIFNT
TEtleUdlbmVyYXRvcklPUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBTU0xLZXlHZW5lcmF0b3JJT1MuY3BwOyBwYXRoID0gaW9zL1NTTEtleUdlbmVyYXRvcklPUy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NTM5MEFEMEVBRkY0QjUwMDM2OTVD
OCAvKiBTeXN0ZW1NZW1vcnlJT1MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gU3lzdGVtTWVtb3J5SU9TLmNwcDsgcGF0aCA9IGlvcy9TeXN0ZW1NZW1vcnlJT1MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAg
LyogVGhlbWVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGhlbWVJT1Mu
aDsgcGF0aCA9IGlvcy9UaGVtZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
NEM5OTE5RTBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUaGVtZUlPUy5tbTsgcGF0aCA9IGlvcy9UaGVtZUlPUy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRDM0IxRjkwRjBFNDE2MTAwOTY5M0Y2
IC8qIFRpbGVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUaWxlQ2Fj
aGUuaDsgcGF0aCA9IGlvcy9UaWxlQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTRDM0IxRkIwRjBFNDE3MDAwOTY5M0Y2IC8qIFRpbGVDYWNoZS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFRpbGVDYWNoZS5tbTsgcGF0aCA9IGlvcy9UaWxl
Q2FjaGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QjY1QTU3MTMyRkE4RTcw
MDcwRTdCRSAvKiBUaWxlR3JpZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBU
aWxlR3JpZC5oOyBwYXRoID0gaW9zL1RpbGVHcmlkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUU0QjY1QTU5MTMyRkFBRjkwMDcwRTdCRSAvKiBUaWxlR3JpZC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFRpbGVHcmlkLm1tOyBwYXRoID0gaW9zL1Rp
bGVHcmlkLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDI0QTM5RDEzMzBERjAx
MDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFRpbGVHcmlkVGlsZS5oOyBwYXRoID0gaW9zL1RpbGVHcmlkVGlsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFNDI0QTM5RjEzMzBERjFFMDBDRjZEQzkgLyogVGlsZUdyaWRU
aWxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gVGlsZUdyaWRU
aWxlLm1tOyBwYXRoID0gaW9zL1RpbGVHcmlkVGlsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTRCNjVBNUIxMzJGQUNCMDAwNzBFN0JFIC8qIFRpbGVMYXllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUaWxlTGF5ZXIuaDsgcGF0aCA9IGlvcy9UaWxlTGF5
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRCNjVBNUQxMzJGQURCNjAwNzBF
N0JFIC8qIFRpbGVMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IFRpbGVMYXllci5tbTsgcGF0aCA9IGlvcy9UaWxlTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUU0RTM5QUZBMTMzMEVGQTgwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29s
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRpbGVMYXllclBvb2wuaDsgcGF0
aCA9IGlvcy9UaWxlTGF5ZXJQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0
RTM5QUZDMTMzMEVGQzUwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29sLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gVGlsZUxheWVyUG9vbC5tbTsgcGF0aCA9IGlvcy9U
aWxlTGF5ZXJQb29sLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTQwMzc5NzEy
NEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViQ29yZU1vdGlvbk1hbmFnZXIuaDsgcGF0aCA9IGlvcy9XZWJD
b3JlTW90aW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTQwMzc5
ODEyNEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJDb3JlTW90aW9uTWFuYWdlci5tbTsgcGF0
aCA9IGlvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDRDM0NGRTcxNTU2QkU1RDAwMDEzNjA5IC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJ
T1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQ29yZVN5c3RlbUludGVy
ZmFjZUlPUy5oOyBwYXRoID0gaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ1MzkwMzgwRUFGRDYzNzAwMzY5NUM4IC8qIFdlYkNv
cmVTeXN0ZW1JbnRlcmZhY2VJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tOyBwYXRoID0gaW9zL1dlYkNvcmVT
eXN0ZW1JbnRlcmZhY2VJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMEQ4
NEU4MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJFdmVudC5oOyBwYXRoID0gaW9zL1dlYkV2ZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYkV2ZW50Lm1tOyBw
YXRoID0gaW9zL1dlYkV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDUz
OTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gV2lkZ2V0SU9TLm1tOyBwYXRoID0gaW9zL1dpZGdldElPUy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5N0E2NTcxNTVEQTgxRTAwRkFERDRD
IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcmlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IERpc3BsYXlSZWZyZXNoTW9uaXRvcmlPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzcyN0RGRDQxNDJBQUU0NTAwRDQ0OUNCIC8qIEZvbnRDYWNoZUlP
Uy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZvbnRDYWNoZUlP
Uy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU4MzYxQTcxNzQ0NTIzRjAwMTcz
NTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGb250U2VydmljZXNJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU4MzYx
QTgxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZvbnRTZXJ2aWNlc0lPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzFBQjRGRkYxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29u
dGV4dDNESU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29u
dGV4dDNESU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFRDEzRDNGMENFQTkz
OTQwMEQ4OTQ2NiAvKiBJY29uSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gSWNvbklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDczNTdD
NzYxNkQyREYwRDAwRUQ5OUU3IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklP
Uy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzM1N0M3NzE2RDJERjBEMDBFRDk5
RTcgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3NDMwMEE0MEY0QjhCQ0YwMDgwNzZDRCAvKiBN
ZWRpYVBsYXllclByaXZhdGVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWVkaWFQbGF5ZXJQcml2YXRlSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3
NDMwMEEzMEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZWRpYVBsYXllclByaXZhdGVJT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3
NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDRUVDNjAzNDE4N0REOTYyMDAzRTQzQkIgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25J
T1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25JT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDQTgyOTQxNjc5MTAw
RjAwODc1NzE0IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1MTZFOEI0MTM2RTA0REIwMDc2QzNDMCAv
KiBMb2NhbGl6ZWREYXRlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TG9jYWxpemVkRGF0ZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1MTZF
OEI1MTM2RTA0REIwMDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbGl6ZWREYXRlQ2FjaGUubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNENTU5NjhGMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRp
b0ZpbGVSZWFkZXJJT1MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QXVkaW9GaWxlUmVhZGVySU9TLmNwcDsgcGF0aCA9IGlvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDU1OTY5MDE0NzVCNjc4MDAxRDBCRDAg
LyogQXVkaW9GaWxlUmVhZGVySU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEF1ZGlvRmlsZVJlYWRlcklPUy5oOyBwYXRoID0gaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEMzNjNFRTBGQUE3QkIzMDA5N0Y4Q0MgLyog
UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0NEMzNjNFRjBGQUE3QkIzMDA5N0Y4Q0MgLyogUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0NDNGMDQyNjBFNzVDOEZCMDA3RTU0MDcgLyogTmV0d29ya1N0YXRlTm90aWZpZXJJT1MuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya1N0YXRlTm90aWZp
ZXJJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDJBRjdBNzEwMkNEREVB
MDA4RkQ0RDMgLyogUXVpY2tMb29rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFF1aWNrTG9vay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDJBRjdBODEwMkNE
REVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gUXVpY2tMb29rLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
RTQyOENFNDEzRTM0MDdGMDAzQjY2MUMgLyogUmVzb3VyY2VIYW5kbGVJT1MubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXNvdXJjZUhhbmRsZUlPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDRBMjBEQjgwRjg0MTY2QzAwQjNFMUZFIC8qIFdl
YkNvcmVVUkxSZXNwb25zZUlPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJDb3JlVVJMUmVzcG9uc2VJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDQ0
RDRFMjEwRjcwOEIyRTAwMzE1OEUwIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZUlPUy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0U0NzRFMUQxMjQ5NERDOTAwMjM1MzY0
IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3RTQ3NEUxQzEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFj
a2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTGl0ZURhdGFiYXNlVHJh
Y2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3RTQ3NEUxQjEyNDk0REM5MDAy
MzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRUY0MThDQzExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRB
cmd1bWVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3Bv
cnRBcmd1bWVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUY0MThDRDEx
Nzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmlld3BvcnRBcmd1bWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRDAwMEVCQTAxMUJEQUZENDAwQzQ3NzI2IC8qIEZyYW1lTG9hZGVyU3RhdGVNYWNo
aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lTG9hZGVy
U3RhdGVNYWNoaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MzE0LDYg
KzE0NDQ5LDcgQEAKIAkJMUEyRTZFNTYwQ0M1NTFFMDAwNEEyMDYyIC8qIHNxbCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0U0NzRFMTkxMjQ5NERBOTAw
MjM1MzY0IC8qIGlvcyAqLywKIAkJCQkxQTJFNkU3ODBDQzU1NkQ1MDA0QTIwNjIgLyogU1FMaXRl
QXV0aG9yaXplci5jcHAgKi8sCiAJCQkJMUEyMjQ2NDMwQ0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0
ZURhdGFiYXNlLmNwcCAqLywKIAkJCQkxQTIyNDY0NDBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRl
RGF0YWJhc2UuaCAqLywKQEAgLTE1NTc3LDYgKzE1NzEzLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjJGMzRGRTcwRTgyRjgxNzAwRjYyN0NEIC8qIGNmICov
LAorCQkJCTQ0OTdENThDMEVCQTg1NEYwMEExMDU1MiAvKiBpb3MgKi8sCiAJCQkJNjU2Qjg0RTcw
QUVBMURBRTAwQTA5NUI0IC8qIG1hYyAqLywKIAkJCQk5MzRGNzEzNzBENUE2RUZGMDAwMThENjkg
LyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmNwcCAqLywKIAkJCQk5MzRGNzEzOTBENUE2
RjEwMDAwMThENjkgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmggKi8sCkBAIC0xNzU3
MSwxNyArMTc3MDgsNTkgQEAKIAkJQTU5RTNDMUIxMTU4MEYzNDAwNzI5MjhFIC8qIGlvcyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMjkwMzcxNjQxNkJB
MTFCQzAwRkVGREYwIC8qIENvbnRlbnRGaWx0ZXJJT1MubW0gKi8sCiAJCQkJMjY1NTQxNEIxNDg5
QUEyQjAwMERGQzVEIC8qIEN1cnNvcklPUy5jcHAgKi8sCisJCQkJMzFFQUY5N0MxMjE0MzVBNDAw
RTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElPUy5oICovLAorCQkJCTMxRUFGOTdEMTIxNDM1
QTQwMEU3QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGllbnRJT1MubW0gKi8sCisJCQkJMzE0MDM3OTkx
MjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmggKi8sCisJCQkJ
MzE0MDM3OUExMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1t
ICovLAogCQkJCTI2RjQwRDQ5MTQ5MDRBNjMwMENBNjdDNCAvKiBFdmVudExvb3BJT1MubW0gKi8s
CiAJCQkJMjZDMTdBM0MxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCAqLywKIAkJ
CQkyNkMxN0EzRDE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSAqLywKIAkJCQky
NjU1NDEzNzE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5oICovLAogCQkJCTI2
NTU0MTM4MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudElPUy5tbSAqLywKKwkJCQkxRjY4RDRB
RDE0QkI5RENBMDA3QjVDNjIgLyogTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tICovLAorCQkJ
CUU0NTM5MDE4MEVBRkNBQ0EwMDM2OTVDOCAvKiBNSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tICovLAog
CQkJCUU0NTM5MDE5MEVBRkNBQ0EwMDM2OTVDOCAvKiBQYXN0ZWJvYXJkSU9TLm1tICovLAorCQkJ
CTI2NjAxRUJEMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oICov
LAorCQkJCTI2NjAxRUJFMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlP
Uy5tbSAqLywKIAkJCQlDNTI3OEIwQjE3RjIxMkVBMDAzQTI5OTggLyogUGxhdGZvcm1QYXN0ZWJv
YXJkSU9TLm1tICovLAorCQkJCUU0NTM5MDMyMEVBRkQ2MzcwMDM2OTVDOCAvKiBQbGF0Zm9ybVNj
cmVlbklPUy5tbSAqLywKKwkJCQlBQUUzNzU1RDE3NDI5QkNDMDA2MjAwQzIgLyogUGxhdGZvcm1T
cGVlY2hTeW50aGVzaXplcklPUy5tbSAqLywKKwkJCQk0NEMzNjNFRTBGQUE3QkIzMDA5N0Y4Q0Mg
LyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmggKi8sCisJCQkJNDRDMzYzRUYwRkFBN0JC
MzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5tbSAqLywKKwkJCQkwRjE3
NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCAqLywKKwkJCQkwRjE3
NzQ3RjEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MubW0gKi8sCisJCQkJNDRD
OTkxODUwRjNEMUVCRTAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLmggKi8sCisJCQkJNDRD
OTkxODEwRjNEMUUwRDAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLm1tICovLAorCQkJCUU0
NTM5MDM0MEVBRkQ2MzcwMDM2OTVDOCAvKiBTY3JvbGxWaWV3SU9TLm1tICovLAorCQkJCUJFQTgw
N0M2MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmNwcCAqLywKKwkJCQlCRUE4MDdD
NzBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVjdC5oICovLAogCQkJCUU0NTM5MDM1MEVB
RkQ2MzcwMDM2OTVDOCAvKiBTaGFyZWRUaW1lcklPUy5tbSAqLywKKwkJCQlFNDUzOTAzNjBFQUZE
NjM3MDAzNjk1QzggLyogU291bmRJT1MubW0gKi8sCisJCQkJNDQ3NjUzMUExMzMxNzA5OTAwMDZC
Nzg5IC8qIFNTTEtleUdlbmVyYXRvcklPUy5jcHAgKi8sCisJCQkJRTQ1MzkwQUQwRUFGRjRCNTAw
MzY5NUM4IC8qIFN5c3RlbU1lbW9yeUlPUy5jcHAgKi8sCisJCQkJNDRDOTkxOUQwRjNEMjEwRTAw
NTg2NjcwIC8qIFRoZW1lSU9TLmggKi8sCisJCQkJNDRDOTkxOUUwRjNEMjEwRTAwNTg2NjcwIC8q
IFRoZW1lSU9TLm1tICovLAorCQkJCUU0QzNCMUY5MEYwRTQxNjEwMDk2OTNGNiAvKiBUaWxlQ2Fj
aGUuaCAqLywKKwkJCQlFNEMzQjFGQjBGMEU0MTcwMDA5NjkzRjYgLyogVGlsZUNhY2hlLm1tICov
LAorCQkJCUU0QjY1QTU3MTMyRkE4RTcwMDcwRTdCRSAvKiBUaWxlR3JpZC5oICovLAorCQkJCUU0
QjY1QTU5MTMyRkFBRjkwMDcwRTdCRSAvKiBUaWxlR3JpZC5tbSAqLywKKwkJCQlFNDI0QTM5RDEz
MzBERjAxMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLmggKi8sCisJCQkJRTQyNEEzOUYxMzMwREYx
RTAwQ0Y2REM5IC8qIFRpbGVHcmlkVGlsZS5tbSAqLywKKwkJCQlFNEI2NUE1QjEzMkZBQ0IwMDA3
MEU3QkUgLyogVGlsZUxheWVyLmggKi8sCisJCQkJRTRCNjVBNUQxMzJGQURCNjAwNzBFN0JFIC8q
IFRpbGVMYXllci5tbSAqLywKKwkJCQlFNEUzOUFGQTEzMzBFRkE4MDAzQUIyNzQgLyogVGlsZUxh
eWVyUG9vbC5oICovLAorCQkJCUU0RTM5QUZDMTMzMEVGQzUwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQ
b29sLm1tICovLAorCQkJCTMxNDAzNzk3MTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9u
TWFuYWdlci5oICovLAorCQkJCTMxNDAzNzk4MTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90
aW9uTWFuYWdlci5tbSAqLywKKwkJCQk0NEMzQ0ZFNzE1NTZCRTVEMDAwMTM2MDkgLyogV2ViQ29y
ZVN5c3RlbUludGVyZmFjZUlPUy5oICovLAorCQkJCUU0NTM5MDM4MEVBRkQ2MzcwMDM2OTVDOCAv
KiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tICovLAorCQkJCUZFMEQ4NEU4MTA0ODQzNDgw
MDFBMTc5RSAvKiBXZWJFdmVudC5oICovLAorCQkJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAv
KiBXZWJFdmVudC5tbSAqLywKIAkJCQlBNTAyQzVERDEzMDQ5QjM1MDBGQzdENTMgLyogV2ViU2Fm
ZUdDQWN0aXZpdHlDYWxsYmFja0lPUy5oICovLAogCQkJCUMyQzRDQjFEMTYxQTEzMTIwMEQyMTRE
QSAvKiBXZWJTYWZlSW5jcmVtZW50YWxTd2VlcGVySU9TLmggKi8sCisJCQkJRTQ1MzkwM0MwRUFG
RDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gaW9zOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE5NDA2LDYgKzE5NTg1LDcgQEAKIAkJCQk5
MzMyQUIzQjE2NTE1RDc3MDBEODI3RUMgLyogY3B1ICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAw
MDdGMjQ4MSAvKiBmaWx0ZXJzICovLAogCQkJCTQ5ODc3MEMxMTI0MkM1MEQwMDIyMjZCQSAvKiBn
cHUgKi8sCisJCQkJNDQxQUYwQTcwRUJBN0JCRjAwNDRFRDRCIC8qIGlvcyAqLywKIAkJCQlCMjc1
MzU0OTBCMDUzODE0MDAyQ0U2NEYgLyogbWFjICovLAogCQkJCUZCQzIyMEREMTIzN0ZCRUIwMEJD
Rjc4OCAvKiBvcGVuZ2wgKi8sCiAJCQkJRjRFQUY0QUIxMEM3NDI2ODAwOTEwMEQzIC8qIG9wZW50
eXBlICovLApAQCAtMTk1ODAsNiArMTk3NjAsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlCMkIyNjQ1OTBEMDBBNzdFMDAwQUNDMUQgLyogY2YgKi8sCisJCQkJ
QTUxNkU4QjIxMzZFMDRDMDAwNzZDM0MwIC8qIGlvcyAqLywKIAkJCQlCMkMzRDlGOTBEMDA2QzFE
MDBFRjZGMjYgLyogbWFjICovLAogCQkJCTM3QzYxRjAwMTIwOTVDODcwMDdBM0M2NyAvKiBBdG9t
aWNTdHJpbmdLZXllZE1SVUNhY2hlLmggKi8sCiAJCQkJQjJDM0Q5RjIwRDAwNkMxRDAwRUY2RjI2
IC8qIEJpZGlDb250ZXh0LmNwcCAqLywKQEAgLTIwNDg0LDYgKzIwNjY1LDggQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCUNEMEVFRTBCMTQ3NDNFMzUwMDNFQUZBMiAvKiBBdWRpb0Rlc3RpbmF0aW9u
SU9TLmNwcCAqLywKIAkJCQlDRDBFRUUwQTE0NzQzRTM0MDAzRUFGQTIgLyogQXVkaW9EZXN0aW5h
dGlvbklPUy5oICovLAorCQkJCUNENTU5NjhGMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVS
ZWFkZXJJT1MuY3BwICovLAorCQkJCUNENTU5NjkwMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0Zp
bGVSZWFkZXJJT1MuaCAqLywKIAkJCQlDREE3OTgyNTE3MEEyNzkwMDBENDVDNTUgLyogQXVkaW9T
ZXNzaW9uSU9TLm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSBpb3M7CkBAIC0yMDU5OSw2ICsyMDc4
Miw1OSBAQAogCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07
CisJCTQ0MUFGMEE3MEVCQTdCQkYwMDQ0RUQ0QiAvKiBpb3MgKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBGOTdBNjU3MTU1REE4MUUwMEZBREQ0QyAvKiBE
aXNwbGF5UmVmcmVzaE1vbml0b3JpT1MubW0gKi8sCisJCQkJMzcyN0RGRDQxNDJBQUU0NTAwRDQ0
OUNCIC8qIEZvbnRDYWNoZUlPUy5tbSAqLywKKwkJCQlDNTgzNjFBNzE3NDQ1MjNGMDAxNzM1MTEg
LyogRm9udFNlcnZpY2VzSU9TLmggKi8sCisJCQkJQzU4MzYxQTgxNzQ0NTIzRjAwMTczNTExIC8q
IEZvbnRTZXJ2aWNlc0lPUy5tbSAqLywKKwkJCQkzMUFCNEZGRjEyMjg3OEEyMDAxQTdEQjAgLyog
R3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLywKKwkJCQlGRUQxM0QzRjBDRUE5Mzk0MDBEODk0NjYg
LyogSWNvbklPUy5tbSAqLywKKwkJCQkwNzM1N0M3NjE2RDJERjBEMDBFRDk5RTcgLyogSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5oICovLAorCQkJCTA3MzU3Qzc3MTZEMkRGMEQwMEVEOTlF
NyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLm1tICovLAorCQkJCTA3NDMwMEE0MEY0
QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MuaCAqLywKKwkJCQkwNzQzMDBB
MzBGNEI4QkNGMDA4MDc2Q0QgLyogTWVkaWFQbGF5ZXJQcml2YXRlSU9TLm1tICovLAorCQkJCTM3
RTY1OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSAqLywKKwkJCQlD
RUVDNjAzNDE4N0REOTYyMDAzRTQzQkIgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaCAq
LywKKwkJCQlDRENBODI5NDE2NzkxMDBGMDA4NzU3MTQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25JT1MubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IGlvczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CisJCUE1MTZFOEIyMTM2RTA0QzAwMDc2QzNDMCAvKiBpb3MgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUE1MTZFOEI0MTM2RTA0REIw
MDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUuaCAqLywKKwkJCQlBNTE2RThCNTEzNkUwNERC
MDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBp
b3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk0NDk3RDU4QzBFQkE4NTRG
MDBBMTA1NTIgLyogaW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQk0NDNGMDQyNjBFNzVDOEZCMDA3RTU0MDcgLyogTmV0d29ya1N0YXRlTm90aWZpZXJJ
T1MuY3BwICovLAorCQkJCTQ0MkFGN0E3MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2suaCAq
LywKKwkJCQk0NDJBRjdBODEwMkNEREVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLm1tICovLAorCQkJ
CTdFNDI4Q0U0MTNFMzQwN0YwMDNCNjYxQyAvKiBSZXNvdXJjZUhhbmRsZUlPUy5tbSAqLywKKwkJ
CQk0NEEyMERCODBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggKi8s
CisJCQkJNDQ0RDRFMjEwRjcwOEIyRTAwMzE1OEUwIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5t
bSAqLywKKwkJCSk7CisJCQlwYXRoID0gaW9zOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKKwkJN0U0NzRFMTkxMjQ5NERBOTAwMjM1MzY0IC8qIGlvcyAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJN0U0NzRFMUQxMjQ5NERDOTAwMjM1MzY0
IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8sCisJCQkJN0U0NzRFMUMxMjQ5NERDOTAw
MjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5oICovLAorCQkJCTdFNDc0RTFCMTI0OTRE
QzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLywKKwkJCSk7CisJ
CQluYW1lID0gaW9zOworCQkJcGF0aCA9IHNxbC9pb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OwogCQlERjlBRkQ2RjEzRkMzMUIwMDAxNUZFQjcgLyogb2JqYyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMjI4Myw2ICsyMjUxOSw3IEBA
CiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAwRDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UwOEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFN0IyREIzMTU4NkFCQUQw
MDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZFMEQ4NEU5MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkQzMTYwM0UxMkIwMjY3NjAwQzFBMzU5IC8qIEFuYWx5c2VyTm9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0RFM0E4NTgxN0Y2MDIwNDAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRl
QVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDkwNzA3RTcxMjE5QzA0MzAwRDkwRTUxIC8q
IEFOR0xFV2ViS2l0QnJpZGdlLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNDI0LDYgKzIyNjYxLDcg
QEAKIAkJCQlCQ0IxNkMxQzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkSW1hZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxOUZCRDVGMTVEMkY0NjQwMDk2NDBBNiAvKiBDYWNoZWRJbWFnZUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwMTg0NjkwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hl
ZFBhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0MjRBMzlFMTMzMERGMDEwMENGNkRDOSAvKiBU
aWxlR3JpZFRpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUQwRURBNzc1MTQzRTMwM0MwMDI4RTM4
MyAvKiBDYWNoZWRSYXdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCNTMzNDkxNzE3
REVFMzAwRjIwNUY5IC8qIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0IxNkMyMDA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2UuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjI2MTcsNiArMjI4NTUsNyBAQAogCQkJCTA3OEUwOTE0MTdEMTREMUMwMDQy
MEFBMSAvKiBNZWRpYUNvbnN0cmFpbnRzSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZD
RTkwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTQ5QkQ5RkExMzFGRDJFRDAwM0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTRCNjVBNTgxMzJGQThFNzAwNzBFN0JFIC8qIFRpbGVHcmlkLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5MDAxRTlBQkMgLyogQ3Vyc29yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzIyNzJBMjBFODJFODdDMDBFN0Y5NzUgLyogQ3Vyc29yRGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODY4MTYwRDYxODc2NkExMzAwMjFFNzlEIC8qIFVzZXJBY3Rpdml0eS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yMzA1Nyw2ICsyMzI5Niw3IEBACiAJCQkJODU1MjZDRDIwQUIwQjdE
OTAwMDMwMkVBIC8qIERPTVRyZWVXYWxrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MEI0MUMz
MEFEOUU3RTcwMEE2RUQ0RiAvKiBET01UcmVlV2Fsa2VySW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg1QzdGNDkxMEFBRjc5REMwMDQwMTRERCAvKiBET01VSUV2ZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk0NEM5OTE5RjBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg1OTg5REQwMEFDQzhCQkQwMEEwQkM1MSAvKiBET01VSUV2ZW50SW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFMzdERkRCMTJEQkFGQjgwMEE2QjIzMyAvKiBET01V
UkwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE1Qzc3MEE2MTAwRDQxQ0QwMDVCQTI2NyAvKiBET01W
YWxpZGl0eVN0YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTIzMjI1LDYgKzIzNDY1LDcgQEAKIAkJ
CQk4NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwOEM5MjUxQTBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMTMxM0Y2NjE0NDNCMzVGMDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTQ0QzNDRkU4MTU1NkJFNUQwMDAxMzYwOSAvKiBXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlSU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI2RTE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI3
MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzcyQzAwRDkxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAq
LywKQEAgLTIzMzEyLDYgKzIzNTUzLDcgQEAKIAkJCQkwODczQjg2QjEzNjA2NEVBMDBBNTIyQzIg
LyogR2x5cGhQYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE2RTBEMDA2Q0Q2MDBFRjZG
MjYgLyogR2x5cGhQYWdlVHJlZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTNDNUY1MERB
NTZCOTIwMDIxRUI1RCAvKiBHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0U0NzRFMUUx
MjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjIyMjc5NjQwRDAwQkYyMjAwNzFCNzgyIC8qIEdyYWRpZW50QXR0cmlidXRl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBo
aWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3
IC8qIEdyYXBoaWNzQ29udGV4dDNELmggaW4gSGVhZGVycyAqLywKQEAgLTIzNDI4LDYgKzIzNjcw
LDcgQEAKIAkJCQlBODEzNjlEQzA5NzM3NEY2MDBENzQ0NjMgLyogSFRNTE9wdGlvbkVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTM2OURBMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MT3B0
aW9uc0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRBRDAxMDA5MTI3RTY0MkEwMDE1
MDM1RiAvKiBIVE1MT3V0cHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDRDMzYzRjAw
RkFBN0JCMzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTFENzE5RjgxODExMDZFMDAwMTZEQzUxIC8qIEluZGV4ZWREQi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThFQTdDQjUwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxQYXJhZ3JhcGhF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcxRDQ1ODBBMTI3Q0JDMDBCMTJBNjggLyog
SFRNTFBhcmFtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzUxNSw2ICsyMzc1OCw3IEBA
CiAJCQkJQkM3RjQ0QTgwQjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJENUE1OTMxMTUyNTI1RDAwMDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTI5MUU0QjEzNDE3MkM4MDBFNzUzREUgLyogSW1hZ2VS
ZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEMzQjFGQTBGMEU0MTYxMDA5Njkz
RjYgLyogVGlsZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjc1MzU3MTBCMDUzODE0MDAy
Q0U2NEYgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCMzQ4MDk0MEVFRjUw
RDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZGRTEx
ODBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLApA
QCAtMjM1ODYsNiArMjM4MzAsNyBAQAogCQkJCTdBRjExQTVBMTJFNzI3NDkwMDYxRjIzQyAvKiBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgyQUIxNzc0MTI1Qzgy
NjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
Mjg4OUI0RDEzQzYyMzkyMDA5QTYxNTYgLyogSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzMUVBRjk3RTEyMTQzNUE0MDBFN0MxQkYgLyogRGV2aWNlTW90aW9u
Q2xpZW50SU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTQxMzNBODEwMkUwMEU4MDAwNzVEMDAg
LyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc4REEyMEYx
NTIwRUJBMzAwNjE0MUMxIC8qIEluc3BlY3RvcldlYlR5cGVCdWlsZGVycy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRjM4MTBDMUMxMzY1QTQ5NjAwRUQ2RTMzIC8qIEluc3BlY3RvcldvcmtlckFnZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTIzNjQ1LDYgKzIzODkwLDcgQEAKIAkJCQk5NzVDQTJBMjEz
MDM2NzlEMDBFOTlBRDkgLyogSlNDcnlwdG8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDZDMUZC
MEMwRERDOEYwMDIwQ0ZDMyAvKiBKU0NTU0NoYXJzZXRSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MDlFQkRDMzE2QjdGM0E2MDBDQkEzRkMgLyogSlNDU1NGb250RmFjZUxvYWRFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJN0U0NzRFMUYxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFi
YXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0NkMxRkQwQzBEREM4RjAwMjBDRkMz
IC8qIEpTQ1NTRm9udEZhY2VSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQ2QzFGRjBDMERE
QzhGMDAyMENGQzMgLyogSlNDU1NJbXBvcnRSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQ2
QzIwMTBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NNZWRpYVJ1bGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMjM2NzEsNiArMjM5MTcsNyBAQAogCQkJCTMxRkIxQTY2MTIwQTVEM0YwMERDMDJBMCAvKiBK
U0RldmljZU1vdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1OUE4NjAwODExOURBRkEx
MDBERUYxRUYgLyogSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0U0Mzg5QzE0MEIxQkE4MDA1RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAq
LywKKwkJCQk0NEM5OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCBp
biBIZWFkZXJzICovLAogCQkJCUU0QUU3QzFBMTdEMjMyMzUwMDA5RkIzMSAvKiBFbGVtZW50QW5j
ZXN0b3JJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE0NkZFNzUxODQ0MjM3MDAwMUE5
MzdDIC8qIEpTT0VTVGV4dHVyZUZsb2F0TGluZWFyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTlE
REM4MzA5RTE5OEJBMDAxQkYzQzYgLyogSlNEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MzY5MSw2ICsyMzkzOCw3IEBACiAJCQkJRTE5QUMzRjMxODI0REM3OTAwMzQ5NDI2IC8qIENyeXB0
b0FsZ29yaXRobVNIQTM4NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkI5MTM5MkExNkFFNEZDMDAw
MUZFNjgyIC8qIEpTRE9NUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlEMjQ3RkYwRDc1N0U2
OTAwRkRGOTU5IC8qIEpTRE9NUGx1Z2luLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTQwMzc5QjEy
NEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE5RDI0ODAxMEQ3NTdFNjkwMEZERjk1OSAvKiBKU0RPTVBsdWdpbkFycmF5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTk3MjcxNjE4MjA1NDlFMDA1OTJENTEgLyogQ3J5cHRvS2V5VHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1QTg2QjYwQzMzNjdFODAwRUVBNjQ5IC8qIEpTRE9NU2Vs
ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTIzNzE5LDYgKzIzOTY3LDcgQEAKIAkJCQkzMzE0
QUNFQzEwODkyMDg2MDAwRjBFNTYgLyogSlNFeGNlcHRpb25CYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk2RUJGMEU3NzEyQTk4Njg4MDBEQjE3MEEgLyogSlNFWFREcmF3QnVmZmVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzcyODY5ODQxNEZEOUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEUzOUFGQjEzMzBFRkE4MDAz
QUIyNzQgLyogVGlsZUxheWVyUG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMEYwMTUwRTBB
MTg5NTAwRkQwNEUzIC8qIEpTRmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkUzQkMwQ0IxMTdE
M0UwODAwQjk0MDlBIC8qIEpTRmlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTg3ODVG
MTEyMkUxRTg3MDAzQUFCREEgLyogSlNGaWxlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKQEAg
LTIzNzMzLDYgKzIzOTgyLDcgQEAKIAkJCQlGRTgwREE2NjBFOUM0NzAzMDAwRDZGNzUgLyogSlNH
ZW9wb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc5NjlEQUMxN0QxNDE1MTAwN0ZGODQy
IC8qIEpTUlRDRGF0YUNoYW5uZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0ODJCNzUyMTE5OENC
NkIwMEJGQjAwNSAvKiBKU0hhc2hDaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkVB
ODA3QzkwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDOTREMTRGMEMyNzVDNjgwMDZCQzYxNyAvKiBKU0hpc3RvcnkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDOTdFNDEzMTA5MTU0RkEwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTRBMkRGMDBBMUI4NTJBMDBDODA3RjggLyogSlNIVE1MQW5j
aG9yRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzc5MSw2ICsyNDA0MSw3IEBACiAJCQkJ
MUE4NUIxRUIwQTFCMjQwNTAwRDhDODdDIC8qIEpTSFRNTE9MaXN0RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTgwRTdFOUIwQTFBODNFMzAwN0ZCOEM1IC8qIEpTSFRNTE9wdEdyb3VwRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTdFOTkwQTFBODNFMzAwN0ZCOEM1IC8qIEpT
SFRNTE9wdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUM1ODM2MUE5MTc0NDUyM0Yw
MDE3MzUxMSAvKiBGb250U2VydmljZXNJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0OEEyOUJG
MEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNEFEMDE3M0QxMjdFODI4NjAwMTUwMzVGIC8qIEpTSFRNTE91dHB1dEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTJBQkE3MEExQ0U5MDUwMEI0MkIyNSAvKiBKU0hUTUxQ
YXJhZ3JhcGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzODQxLDYgKzI0MDkyLDcgQEAK
IAkJCQk5MzVGNDU0MzBGN0MzQjVGMDBEN0MxRkIgLyogSlNMYXp5RXZlbnRMaXN0ZW5lci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNFMUM0M0MwRDk4MzBEMzAwM0IwMkYyIC8qIEpTTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUZEMjNBMTI2MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjY2MDFFQkYxNEIz
QjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDQ2MTQxOTBDRDY4MjY5MDBGQURBNzUgLyogSlNNZWRpYUVycm9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzNDMzlCNzBDMEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUQzQTk0QTQ3MTIyREM0MEYwMEEzN0JCQyAvKiBKU01lZGlhUXVlcnlM
aXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI0MTE2LDYgKzI0MzY4LDcgQEAKIAkJCQk2RTNGQUQz
OTE0NzMzRjQwMDBFNDIzMDYgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkVFOEE3NzMxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyQ0JGNEUxNDBGMUFCRDAwMzg3OUJF
IC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3NDMwMEE2MEY0
QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTZFM0ZBRDM5MTQ3MzNGNDAxMUU0MjMwNyAvKiBKU1dlYkdMRGVidWdSZW5kZXJlckluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTZFM0ZBRDM5MTQ3MzNGNDAyMkU0MjMwNyAvKiBKU1dlYkdM
RGVidWdTaGFkZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTNGQUQzOTE0NzMzRjQwMDBFNDIz
MDcgLyogSlNXZWJHTERlcHRoVGV4dHVyZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDEyOCw2ICsy
NDM4MSw3IEBACiAJCQkJNTFDOTYxMUIxODNEMkI4MDAwRDIwMDJFIC8qIElEQkRhdGFiYXNlTWV0
YWRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUEwN0QzMzU2MTUyQjYzMEUwMDFCNjM5MyAvKiBK
U1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlB
NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFRleHR1cmUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxNDAzNzlEMTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5MTUxN0QxNEQxQzAwNDIwQUExIC8qIE1lZGlhU3Ry
ZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQzQ1MzQyODEwQ0RCQkZBMDA4NjkxNTcgLyogSlNX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzdFRjYyRjQxMkY5REI3
NDAwQzc3QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNDM4OCw2ICsyNDY0Miw3IEBACiAJCQkJOTM3N0FCQTAxNURFRkVFRjAwMzFGRDA0IC8q
IFBhZ2luYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTA4ODUwNjdGMTFEQTA0NUIwMDE4MkI5
OCAvKiBQYWludEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTA4ODUwNjgwMTFEQTA0NUIwMDE4
MkI5OCAvKiBQYWludFBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwN0VEMzVBMzE2RDZEQ0Uy
MDAyMjQ4RjMgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTgwRTZDRkIwQTE5ODlDQTAwN0ZCOEM1IC8qIFBhaXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZEMzE2MEEzMTJCMDI2RjcwMEMxQTM1OSAvKiBQYW5uZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZEMzE2MDFBMTJCMDI2NzYwMEMxQTM1OSAvKiBQYW5uZXJOb2RlLmggaW4gSGVhZGVycyAq
LywKQEAgLTI0NjAzLDYgKzI0ODU4LDcgQEAKIAkJCQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0Ig
LyogUmVuZGVyU1ZHRWxsaXBzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDNDMDkyQkMxMkQ5RTRF
RTAwQTk4OUMzIC8qIFJlbmRlclNWR0ZvcmVpZ25PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQzNjcwOEM1MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxQUI1MDAwMTIyODc4QTIwMDFBN0RCMCAvKiBHcmFwaGljc0NvbnRl
eHQzRElPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4QzcxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4Qzkx
MkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0ltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
ODU0QjAxNTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVycyAq
LywKQEAgLTI0NjExLDYgKzI0ODY3LDcgQEAKIAkJCQlDRDNBNDk2MjE3QTlEMDFCMDAyNzRFNDIg
LyogU291cmNlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhDQjEyRDlDQTRCMDAw
NDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0ODk0
NEEzMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjE3NzQ4MDEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEREYxQUQ3MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRo
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTBCQjU4NTE0ODRFM0E3MDBCMkU4N0EgLyogUmVuZGVy
U1ZHUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4Q0QxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NzkzLDYgKzI1MDUwLDcg
QEAKIAkJCQlFMUI3ODM5QzE2Mzc0MEE3MDAwN0I2OTIgLyogU2hhcmVkV29ya2VyU3RyYXRlZ3ku
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxRDE2OEVFMTAyMjZFODkwMDlCQzgyNyAvKiBTaGFyZWRX
b3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTY1MEQwMDZDRDYwMEVGNkYy
NiAvKiBTaW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRCNjVBNUMxMzJGQUNC
MDAwNzBFN0JFIC8qIFRpbGVMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVBMUVBN0QxNTJC
Q0YwODAwNEQwMEI2IC8qIFNpbXBsaWZ5TWFya3VwQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzE3NDFBQUQxNjYzNjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkQwMEQ3QTUxNEEzRjYxOTAwNzM0MDExIC8qIFNpbmNSZXNhbXBs
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ4NjgsNiArMjUxMjYsNyBAQAogCQkJCTUxQkUzN0Uw
MERBRUUwMEUwMDEwODVGQyAvKiBTdG9yYWdlQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzUx
NjBFRUIxMDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1wbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzUxMDJFQ0YwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQ0Q1NTk2OTIxNDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRl
cklPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFMEJBQkIwREE1NTQ3MTAwQTlFNDE3IC8qIFN0
b3JhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU2NTc2RTgxN0RBOTRFMjAwQTU2QkRD
IC8qIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUVC
REQ4NDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNTAyNCw2ICsyNTI4Myw3IEBACiAJCQkJQjIyMjc5RkEwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR0ZFT2Zmc2V0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5RkQw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyMjI3QTAwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk0NEEyMERCOTBGODQxNjZDMDBCM0UxRkUgLyog
V2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwMzBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHRkVTcG90TGlnaHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwNzhFMDkxOTE3RDE0RDFDMDA0MjBBQTEgLyogTWVkaWFTdHJlYW1UcmFja0V2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyN0EwNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUaWxlRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTI0Nyw2ICsyNTUwNyw3IEBACiAJCQkJOTdCQzg0
QTUxMjM3MERDODAwMEM2MTYxIC8qIFRleHRWaWV3U291cmNlUGFyc2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0U2NThGRjBFQTkyNDhBMDA3RTQ1MzMgLyogVGhlbWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRTY1OUU2MEVBOTJGQjIwMDdFNDUzMyAvKiBUaGVtZU1hYy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNDQyQUY3QTkxMDJDRERFQTAwOEZENEQzIC8qIFF1aWNrTG9vay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNFNjU5QTkwRUE5MjdCOTAwN0U0NTMzIC8qIFRoZW1lVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3NkQ2Qzk1MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwQjkwNTYxQjBGMjU3OEJGMDA5NUZGNkEg
LyogVGhyZWFkYWJsZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTI2MSw2ICsyNTUyMiw3
IEBACiAJCQkJMUFGODlBNDIxNTE4RkRFQTAwRTU0N0I1IC8qIFRpbGVkQmFja2luZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDk4NzcwRjMxMjQyQzUzNTAwMjIyNkJBIC8qIFRpbGluZ0RhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCUY1NUIzRERDMTI1MUYxMkQwMDNFRjI2OSAvKiBUaW1lSW5wdXRU
eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNTE2RThCNzEzNkUwNERCMDA3NkMzQzAgLyogTG9j
YWxpemVkRGF0ZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTUzQ0ZFODEwOEY0NzNGMDBF
QTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3
MTlCNzE4MTEwNkUwMDAxNkRDNTEgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjU5MjgsNiArMjYxOTAsNyBAQAogCQkJCUZEOEM0NkVCMTU0NjA4RTcwMEE1
OTEwQyAvKiBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RkVENDgzOTBDRUQ2NkMzMjU1RjcyQzU5IC8qIE1hdGhNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDc4RTA5MDMxN0QxNENFRTAwNDIwQUExIC8qIE1lZGlhU3RyZWFtVHJh
Y2tFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0NDRENEUyMzBGNzA4QjJFMDAzMTU4RTAg
LyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBNzk4MjQx
NzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlD
REE3OTgyNzE3MEEyNzkxMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0Q1NERFNEIxNzQ2OUM2RDAwNUU1QjM2IC8qIEF1ZGlvU2Vzc2lvbk1hYy5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTI1OTM3LDYgKzI2MjAwLDcgQEAKIAkJCQlCRTg4RTBEODE3MTVE
MkEyMDA2NThEOTggLyogQXVkaW9UcmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRTg4RTBE
QjE3MTVEMkEyMDA2NThEOTggLyogQXVkaW9UcmFja0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkQzMTYwOEExMkIwMjZGNzAwQzFBMzU5IC8qIEF1ZGlvVXRpbGl0aWVzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTdFNDI4Q0U1MTNFMzQwN0YwMDNCNjYxQyAvKiBSZXNvdXJjZUhhbmRsZUlP
Uy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzNEY3MTM4MEQ1QTZFRkYwMDAxOEQ2OSAvKiBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NEQw
Q0U5MjM0RTAwN0VGM0NEIC8qIEF1dGhlbnRpY2F0aW9uTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDU4MzBENEQxNjc5QjRGODAwQUNGOEMzIC8qIEF1dG9zY3JvbGxDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjYwMDIsNiArMjYyNjYsNyBAQAogCQkJCTQ5QUUyRDk2MTM0RUU1
RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIx
ODI3NDkzMTM0Q0E0QzEwMEI5OEMyRCAvKiBDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTZFNEU5MUFDMTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmli
dXRlcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTQwMzc5QzEyNEJFQTdGMDBBRjQwRTQgLyog
V2ViQ29yZU1vdGlvbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk0OTQ4NEZDMTEwMkNG
MjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkI5
MTM5MjcxNkFFNEMzNDAwMUZFNjgyIC8qIENhbnZhc1BhdGhNZXRob2RzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQ5NDg0RkM0MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjYwNjgsMTIgKzI2MzMzLDE0IEBACiAJCQkJOTc2MjdCOEQxNEZC
M0NFRTAwMkNEQ0ExIC8qIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTA2NUFENEY2MEIwQzJFREEwMDVBMkIxRCAvKiBDb250ZXh0TWVudUNvbnRyb2xs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdEMDdCMTQxODM0MTU4ODAwQUJERDNDIC8qIEpT
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdFNDc0
RTIwMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMDYwMjdDQjMwQjFDQzAzRDAwODg0QjJEIC8qIENvbnRleHRNZW51SXRlbU1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzQjZBMEVBMEIwQkNBODQwMEY1MDI3QSAvKiBDb250
ZXh0TWVudU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI4MTJCMDI2NzYwMEMxQTM1
OSAvKiBDb252b2x2ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxNDI0QzkzMTY0QjUy
QzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE0MjRDOTAx
NjRCNDYwQjAwRjMyRDQwIC8qIENvb2tpZUphck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdF
RTY4NDYzMTJEMjZFMzgwMEU3OTQxNSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMzdFNjU5NTAxNjNCMTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRhSU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEzRjAxRjExMjcwRTE5MDAwREZCQTcxIC8qIENvb2tp
ZVN0b3JhZ2VNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzQ2QUYyMTE0RjREREU2MDAzRTdB
NzIgLyogQ29vcmRpbmF0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI5NTAwRTgyMDU2
QjAwQjI1OTY1IC8qIENvdW50ZXJEaXJlY3RpdmVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjYx
NzksNiArMjY0NDYsNyBAQAogCQkJCUZFNDU2RjE4MTY3N0Q3NEUwMDVFRERGOSAvKiBEYXRhYmFz
ZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVCMjZEMjgxNjdBOEYyQTAwRkREMjZC
IC8qIERhdGFiYXNlU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFREVGODQxMTY3OTcx
MDgwMDBFNDQ0QSAvKiBEYXRhYmFzZVN0cmF0ZWd5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0
RTM5QUZEMTMzMEVGQzYwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29sLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTdCQzZBMkExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlU3luYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5N0JDNkEyRDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUYXNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTJGMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFz
ZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2MzE0LDYgKzI2NTgyLDcgQEAKIAkJCQlG
NUMwNDFFNDBGRkNBOTZEMDA4MzlENEEgLyogRE9NSFRNTERhdGFMaXN0RWxlbWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUUxNTdBOEU4MTgxODRDNjcwMDlGODIxRCAvKiBKU0NyeXB0b0tleUN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzA1ODUyMzE3RkRDMTQwMDA1RjJCQ0IgLyog
TWVkaWFUcmFja0NvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFRDEzRDQwMENF
QTkzOTQwMEQ4OTQ2NiAvKiBJY29uSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNUY4MzEx
ODIyRjExQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRDM1OUQ3OTIxMjlDQTNDMDAwMDZFNUQyIC8qIERPTUhUTUxEZXRhaWxzRWxlbWVudC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTg1QkE0RDBDMEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1M
RGlyZWN0b3J5RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLApAQCAtMjYzNzUsNiArMjY2NDQsNyBA
QAogCQkJCTg1QkE0RDE4MEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MVUxpc3RFbGVtZW50Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTgxODVGM0UwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxl
bWVudGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzQzg0MUZGMDlDRTg1ODMwMERGRjVF
NSAvKiBET01JbXBsZW1lbnRhdGlvbkZyb250LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2NjAx
RUMwMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDMUEzN0JBMDk3QzcxNUYwMDE5RjNEOCAvKiBET01JbnRlcm5hbC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTg1RkYzMTVCMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2Fy
ZEV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwNjU2RkYwQUFCNDc2MzAwMkQxNUMwIC8q
IERPTU1lZGlhTGlzdC5tbSBpbiBTb3VyY2VzICovLApAQCAtMjY0NTcsNiArMjY3MjcsNyBAQAog
CQkJCTQ5ODc3MERCMTI0MkM1MzUwMDIyMjZCQSAvKiBEcmF3aW5nQnVmZmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUNEQzhCNUE2MTgwNDc0RjcwMDE2RTY4NSAvKiBNZWRpYVNvdXJjZVByaXZh
dGVBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk4NzcxNTMxMjQzRjlGQTAwMjIyNkJB
IC8qIERyYXdpbmdCdWZmZXJNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkzMUVBRjk3RjEyMTQz
NUE0MDBFN0MxQkYgLyogRGV2aWNlTW90aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDc4RTA5MTIxN0QxNENFRTAwNDIwQUExIC8qIFVzZXJNZWRpYUNvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkQ2RUQyQzcxMzZCOEU2NjAwM0NGMDcyIC8qIER5bmFtaWNzQ29t
cHJlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDUzNzM1NjEzN0I2NTNCMDAwMDhEQ0Ug
LyogRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY2NTgs
NiArMjY5MjksNyBAQAogCQkJCTA3OTY5REJEMTdEMTQxNTEwMDdGRjg0MiAvKiBKU1JUQ1Nlc3Np
b25EZXNjcmlwdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFERTI5MEEx
NTJBQzgwMEIxMkE2OCAvKiBIVE1MQm9keUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThDRkY3QTgwQTE1Njk3ODAwMEE0MjM0IC8qIEhUTUxCUkVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMUY2OEQ0QUUxNEJCOURDQTAwN0I1QzYyIC8qIE1lbW9yeVByZXNzdXJlSGFuZGxl
cklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4MTM2OUQzMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBI
VE1MQnV0dG9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFGRDA4MjQ1RTU5
MDAxRTlBQkMgLyogSFRNTENhbnZhc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThE
RjNGRDEwOTdGQTBGQzAwNTI5ODFCIC8qIEhUTUxDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMjY2NjksOCArMjY5NDEsMTAgQEAKIAkJCQlBOEVBN0NCMTBBMTkyQjlDMDBBOEVGNUYg
LyogSFRNTERpdkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThFQTc5RjUwQTE5MTZE
RjAwQThFRjVGIC8qIEhUTUxETGlzdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNG
MTlBOTEwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk0NEM5OTE4MjBGM0QxRTBEMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MubW0gaW4g
U291cmNlcyAqLywKIAkJCQk5NzdCMzg2NjEyMjg4M0U5MDBCODFGRjggLyogSFRNTERvY3VtZW50
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REU3MDk5RTY0OTIwMDU2RTU4MSAv
KiBodG1sZWRpdGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNTE2RThCODEzNkUwNERCMDA3
NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlB
OTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUUxNTdBOEYwMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3QzgxMjIwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVt
ZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2OTA2LDYgKzI3MTgwLDcgQEAKIAkJ
CQk3MEY1NDZFOEI4QjVEN0RDNTRFRTE0NEUgLyogSlNCZWZvcmVVbmxvYWRFdmVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGREYwOURDODEzOTlCNjIyMDA2ODhFNUIgLyogSlNCaXF1YWRGaWx0
ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEOEFBNjNDMTY5NTE0OEUwMEQyRUE2OCAv
KiBKU0JpcXVhZEZpbHRlck5vZGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzE0MDM3
OUUxMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkUyRDk5Q0QxMEUyQkJEQTAwNDk2MzM3IC8qIEpTQmxvYi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4OTMxREU1QjE0QzQ0QzQ0MDAwREM5RDIgLyogSlNCbG9iQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDlFMjg3MTA3RDREQjQwMEI1NzkzRiAvKiBKU0Nh
bGxiYWNrRGF0YS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2OTE0LDYgKzI3MTg5LDcgQEAKIAkJ
CQk2NURGMzIzQjA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNQYXR0ZXJuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQ5RUVEMTQyMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFRUQxNDQxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNE
Q0E4Mjk2MTY3OTEwMEYwMDg3NTcxNCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTQ5RUVEMTRFMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUVFRDE1MDEw
NTE5NzFBMDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzRjlCN0EwMEJBNjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2OTQ4LDYgKzI3MjI0LDcgQEAKIAkJCQlCQzQ2QzFF
RTBDMEREQkRGMDAyMENGQzMgLyogSlNDU1NSdWxlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4RDA1RkE3MEEyM0IzMDEwMDVFNzIwMyAvKiBKU0NTU1J1bGVMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTA3MDM2M0U1MTgxQTFDREMwMEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNv
dXJjZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5MEFFMEVBRkY0QjUwMDM2OTVDOCAvKiBT
eXN0ZW1NZW1vcnlJT1MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MjI2MkYxMDMyMTA4NDAw
NkU3RDVEIC8qIEpTQ1NTUnVsZUxpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
MDExQjYwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlGRkI2OThDRjE4MzQwMkJCMDAxNThBMzEgLyogTGluZUluZm8uY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0yNjk3NSw2ICsyNzI1Miw3IEBACiAJCQkJNTlBODYwMDYxMTlEQUY3
RjAwREVGMUVGIC8qIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1OTBFMUI0QjExRTRFRjcwMDA2OUY3ODQgLyogSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRTQzOEEyMTQwQzBEQzAwMDVFNDM3RSAv
KiBKU0RpY3Rpb25hcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDRDMzYzRjEwRkFBN0JCMzAw
OTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTY1OUREQzgyMDlFMTk4QkEwMDFCRjNDNiAvKiBKU0RvY3VtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQ5QzdCQThEMTA0MkY1QjEwMDA5RDQ0NyAvKiBKU0RvY3VtZW50Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBNDk0RURFMEExMjNGNEMwMEZEQUZDMSAvKiBKU0RvY3Vt
ZW50RnJhZ21lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjk4Niw2ICsyNzI2NCw3IEBACiAJ
CQkJMkUwODg4RDQxMTQ4ODQ4QTAwQUY0MjY1IC8qIEpTRE9NRm9ybURhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkUwODg4RTYxMTQ4ODRFMjAwQUY0MjY1IC8qIEpTRE9NRm9ybURhdGFDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFDMzZDQkQwRUIwODA2MjAwNzQxMEJDIC8qIEpT
RE9NR2xvYmFsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3RUQzNUEyMTZENkRDQzkw
MDIyNDhGMyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjVERjMxRjcwOUQxQ0M2MDAwMEJFMzI1IC8qIEpTRE9NSW1wbGVtZW50YXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTlEMjQ4MDYwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWlt
ZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlEMjQ4MDgwRDc1N0U3RDAwRkRGOTU5IC8q
IEpTRE9NTWltZVR5cGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MDI4LDYgKzI3MzA3
LDcgQEAKIAkJCQlCQzYwOTAyMDBFOTFCOEVDMDAwQzY4QjUgLyogSlNFdmVudFRhcmdldEN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMzE0QUNFQjEwODkyMDg2MDAwRjBFNTYgLyogSlNF
eGNlcHRpb25CYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFQkYwRTc2MTJBOTg2ODgwMERC
MTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5MDQ5
MEVBRkQ2MzcwMDM2OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzcyODY5ODMxNEZEOUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDBGMDE0MEUwQTE4OTUwMEZE
MDRFMyAvKiBKU0ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkUzQkMwQ0ExMTdEM0UwODAw
Qjk0MDlBIC8qIEpTRmlsZUVycm9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjcxNzYsNiArMjc0
NTYsNyBAQAogCQkJCUNEQTk4RTA0MTYwMzlFMUEwMEZFQTNCMSAvKiBKU01lZGlhS2V5cy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwNzk2OURDMzE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENTdGF0
c1Jlc3BvbnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQTk4RTA2MTYwMzlFMUYwMEZFQTNC
MSAvKiBKU01lZGlhS2V5U2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwNzQzMDBBNTBG
NEI4QkNGMDA4MDc2Q0QgLyogTWVkaWFQbGF5ZXJQcml2YXRlSU9TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkMzQzM5QjYwQzBEM0Q4RDAwNUY0RDdBIC8qIEpTTWVkaWFMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUQzQTk0QTQ2MTIyREM0MEYwMEEzN0JCQyAvKiBKU01lZGlhUXVlcnlMaXN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNENjQxRUJGMTgxOUIzNjAwMEVFNEM0MSAvKiBNZWRp
YVRpbWVNYWMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzI2NCw2ICsyNzU0NSw3IEBACiAJCQkJ
NTFEQ0U4MDIwQ0FDOUYxQzAwNDg4MzU4IC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUVBQzU2NzE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTlERDZBNjExOTAy
QTYyMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlBQTEyREY0OTE3NDNERjgzMDA0REFGREYgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXpl
cklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUI1OURENkFBMTE5MDJBNzEwMDdFOTY4NCAvKiBK
U1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2
MzgwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjU5REQ2OUUxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25DYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MzMxLDYgKzI3NjEzLDcgQEAKIAkJCQlCMkZBM0Q3
NjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDM1OEU4N0MxMzYwQTJFRTAwRTQ3NDhDIC8qIEpTU1ZHRkVEcm9wU2hh
ZG93RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q3ODBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdGRUZsb29kRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0NEM5OTFB
MDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkZB
M0Q3QTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRUZ1bmNBRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMkZBM0Q3QzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRUZ1bmNCRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q3RTBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdGRUZ1bmNHRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MzU0LDYgKzI3NjM3LDcg
QEAKIAkJCQlBODNCNzkwMzBDQ0FGRjE1MDAwQjA4MjUgLyogSlNTVkdGb250RmFjZU5hbWVFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4M0I3OEZGMENDQUZGMTUwMDBCMDgyNSAvKiBK
U1NWR0ZvbnRGYWNlU3JjRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODNCNzhGRDBD
Q0FGRjE1MDAwQjA4MjUgLyogSlNTVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTQ1MzkwNEQwRUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyRkEzRDk4MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZvcmVpZ25PYmpl
Y3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDlBMEFCNzVBNkYwMDBFNUFD
NCAvKiBKU1NWR0dFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyN0IyODI3MENFRjBD
MDcwMEQzOUQ1NCAvKiBKU1NWR0dseXBoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3
MzYzLDYgKzI3NjQ3LDcgQEAKIAkJCQk4NTE3NEVDMkJDQ0FGMTdFQUUzRjQ2RjggLyogSlNTVkdH
cmFwaGljc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQ4NTIyN0IxMTkwMTYyQzAw
NkVEQzdGIC8qIEpTU1ZHSEtlcm5FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEz
RDlFMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlFNDI0QTNBMDEzMzBERjFFMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjJGQTNEQTAwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGVuZ3RoLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA3NzY2NEZDMTgzRTZCNUMwMDEzM0I5MiAvKiBKU1F1aWNr
VGltZVBsdWdpblJlcGxhY2VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4RTRGRTQ2MEUy
QkQ0MTQwMEY0Q0FFMCAvKiBKU1NWR0xlbmd0aEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI3Mzg5LDYgKzI3Njc0LDcgQEAKIAkJCQlCMkZBM0RDMDBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzREMy
MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEQzQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNEI2NUE1
RTEzMkZBREI2MDA3MEU3QkUgLyogVGlsZUxheWVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJG
QTNEQzYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEQzgwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNE
Q0EwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhB
YnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzQzMiw2ICsyNzcxOCw3IEBACiAJCQkJQjJGQTNF
MEUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVFJlZkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMDcwMzYzRDYxODFBMTQ2NTAwQzA3NEE1IC8qIE1lZGlhU3RyZWFtU291cmNlU3RhdGVz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRTEwMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NW
R1RTcGFuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDUzOTA0MzBFQUZENjM3MDAz
Njk1QzggLyogUGxhdGZvcm1TY3JlZW5JT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Ux
MjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdVbml0VHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTEyNUY4NTExODI4M0E1NjAwRDg0Q0Q5IC8qIEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpX
Sy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0UxNDBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdVc2VFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc1MzEsNiArMjc4MTgsNyBAQAog
CQkJCUJDRUZFMUVBMERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNFRkUxRTUwRENBNUYzMzAwNzM5MjE5IC8qIEpTWFNMVFByb2Nlc3Nv
ckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTAzMUI0MzBBNDRFRkM3MDBGOTkyRTAg
LyogS2V5Ym9hcmRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDNTgzNjFBQTE3NDQ1MjNG
MDAxNzM1MTEgLyogRm9udFNlcnZpY2VzSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0Iz
RDgxMTRCMTY2QTAwMUM0MjlCIC8qIEtleUV2ZW50Q29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkyNjU1NDEzQTE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRJT1MubW0gaW4gU291cmNlcyAq
LywKIAkJCQk1MTFFRjJDMTE3RjBGRDM1MDBFNEZBMTYgLyogSlNJREJDdXJzb3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yNzU5MiwxMCArMjc4ODAsMTIgQEAKIAkJCQk1MTAxOTQ0NDE4MzZGN0U0
MDA5MjU1MjMgLyogSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkFCRTcyRjQxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkFCRTcyRkQxMDU5QzIxMTAwRDk5OUREIC8qIE1hdGhNTEVsZW1lbnRG
YWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJFQTgwN0M4MEY3MTRBMDMwMDUyNDE5OSAv
KiBTZWxlY3Rpb25SZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZBQkU3MkY2MTA1OUMxRUIw
MEQ5OTlERCAvKiBNYXRoTUxJbmxpbmVDb250YWluZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZBQkU3MkY4MTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxNYXRoRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGQUJFNzJGRTEwNTlDMjExMDBEOTk5REQgLyogTWF0aE1MTmFt
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkE2NTRBNkIxMTA4QUJFRDAwMjYxNUUwIC8qIE1h
dGhNTFRleHRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5MDQ1MEVBRkQ2Mzcw
MDM2OTVDOCAvKiBTY3JvbGxWaWV3SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlENURDMkIw
RjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQ5RTkxMUM2MEVGODZENDcwMDlEMENBRiAvKiBNYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE3MjUzQUExMzU0QkJCQzAwMzYwRjJB
IC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc2MzEsMTEg
KzI3OTIxLDEzIEBACiAJCQkJOTMzMDlERjkwOTlFNjQ5MjAwNTZFNTgxIC8qIE1lcmdlSWRlbnRp
Y2FsRWxlbWVudHNDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQURFQ0NGMEU3NkFE
OEIwMDRBMUE1RSAvKiBNZXNzYWdlQ2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NTc5
M0U4MzBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTQ0M0YwNDI3MEU3NUM4RkIwMDdFNTQwNyAvKiBOZXR3b3JrU3RhdGVOb3RpZmllcklPUy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUFERUNDMDBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2Fn
ZVBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4RTUyNkYxMzQ2QkQxNzAwQUQ5QzMxIC8q
IE1ldGVyU2hhZG93RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0REQ0Q5NDEzODQ0
RkQ1MDAwOEI3OTMgLyogTUlNRUhlYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzc3MkM0
RTBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzc3MkM1RTBDNEVCMzQ0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeU1hYy5tbSBp
biBTb3VyY2VzICovLAorCQkJCUU0NTM5MDQ3MEVBRkQ2MzcwMDM2OTVDOCAvKiBTb3VuZElPUy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTUyRjEwODY1MTYyQjZEQTQwMDlBQzgxRSAvKiBNaXhlZENv
bnRlbnRDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM2RDc0QUU0MDlBQTI5MEEwMDBC
MEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RjU1QjNEQzUxMjUxRjEyRDAwM0VGMjY5IC8qIE1vbnRoSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjc3MjMsNiArMjgwMTUsNyBAQAogCQkJCUUxMjg0QUVBMTA0NDdERUUwMEVBRUI1
MiAvKiBQYWdlVHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNjczMEEz
MTgyRDhGQkIwMDNGQUY1QyAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxRTFFQ0MyMEM5MUM5MDQwMERDMjU1QiAvKiBQYWdlVVJMUmVjb3JkLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTM3MjdERkQ1MTQyQUFFNDUwMEQ0NDlDQiAvKiBGb250Q2FjaGVJT1MubW0g
aW4gU291cmNlcyAqLywKIAkJCQlGRkQ1Qjk3QTEzNUNDOTc4MDBENUU5MkEgLyogUGFnZVZpc2li
aWxpdHlTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjBBMjEyQjAyNkY3MDBDMUEz
NTkgLyogUGFubmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDE5MTJCMDI2NzYwMEMx
QTM1OSAvKiBQYW5uZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc3NTEsNiArMjgwNDQs
NyBAQAogCQkJCTQ5NTg3ODIyMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlDREVBNzYzMDE0NjA4QTUzMDA4QjMxRjEgLyogUGxhdGZv
cm1DbG9ja0NBLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQUE4RDBBMTRENzFCMkUwMDYxRUE2
MCAvKiBQbGF0Zm9ybUNsb2NrQ00ubW0gaW4gU291cmNlcyAqLywKKwkJCQk0NDJBRjdBQTEwMkNE
REVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBQTQ4NkYx
NEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRjU0NEY3ODgxNUNGQjJBODAwQUYzM0E4IC8qIFBsYXRmb3JtTG9jYWxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxQkY3MDBGMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3ODM5LDYgKzI4MTMzLDcg
QEAKIAkJCQlCQ0VBNDg3NzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDRUE0ODc5MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMYXllci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU4MEQwMDBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5MDFEMEVBRkNBQ0EwMDM2
OTVDOCAvKiBNSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1ODBD
RkUwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MEQxMEQ5OTE1NDVGNTc2MDA5NkQyODggLyogUmVuZGVyTGF5ZXJGaWx0ZXJJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTNDMjQ0RkVCQTM3NUFDNjMzRjg4QkU2RiAvKiBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc4OTgsNiArMjgx
OTMsNyBAQAogCQkJCUE4REY0QUVBMDk4MEM0MkMwMDUyOTgxQiAvKiBSZW5kZXJUYWJsZUNlbGwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThERjRBRTgwOTgwQzQyQzAwNTI5ODFCIC8qIFJlbmRl
clRhYmxlQ29sLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4REY0QUYwMDk4MEM0MkMwMDUyOTgx
QiAvKiBSZW5kZXJUYWJsZVJvdy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNEI2NUE1QTEzMkZB
QUY5MDA3MEU3QkUgLyogVGlsZUdyaWQubW0gaW4gU291cmNlcyAqLywKIAkJCQlBOERGNEFFRDA5
ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDRUE0ODhCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUZXh0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUFCNjdEMUE4MDk3RjNBRTMwMEY5MzkyRSAvKiBSZW5kZXJUZXh0Q29udHJvbC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTI3OTk1LDYgKzI4MjkxLDcgQEAKIAkJCQkwRjYwNUFFQzE1
Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFGNjJFRTcxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBRjYyRUU2MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxp
bmdDb29yZGluYXRvck1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNENTU5NjkxMTQ3NUI2Nzgw
MDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTND
MzhCRkUxNjQ0NzNDNzAwMDkxRUIyIC8qIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzMUNCRDBDMTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0
ZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMxQ0JEMTMxNjFBNDRGODAwRTRDODc0IC8q
IFNjcm9sbGluZ1N0YXRlTm9kZU1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtMjgwMzMsNiArMjgz
MzAsNyBAQAogCQkJCUJDNUVCOEMzMEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE2RDE2OTYyMTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENDVBOTUzMTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFw
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyOTAzNzE2NTE2QkExMUJDMDBGRUZERjAgLyogQ29u
dGVudEZpbHRlcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZENDVBOTU0MTc1RDNGQjgwMEMy
MUVDOCAvKiBTaGFwZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ0NUE5NTUxNzVEM0ZC
ODAwQzIxRUM4IC8qIFNoYXBlSW5zaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDQ1
QTk1NjE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI4MjIzLDYgKzI4NTIxLDcgQEAKIAkJCQlDREUzQTg1NzE3RjYwMjA0MDBDNUJFMjAg
LyogQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5
QjMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0RvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyOEM2QTI3MEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYxNzc0ODExMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1h
dG9ySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5QjYwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgzM0M4NTIwQTJDRjUyODAwRDU3
NjY0IC8qIFNWR0VsZW1lbnRGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUI5
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdFbGVtZW50SW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0yODMxNSw2ICsyODYxNCw3IEBACiAJCQkJQjIyMjdBNTgwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1BhdGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0NzZDOUVGMTFERjZBNTgw
MDU1NUIwMiAvKiBTVkdQYXRoUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTgw
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlGRTBEODRFQjEwNDg0MzZFMDAxQTE3OUUgLyogV2ViRXZlbnQubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NDc2QzlFNTExREY2QTBCMDA1NTVCMDIgLyogU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUNERjJCMDE4MTgyMDU0MDcwMEYyQjQyNCAvKiBNb2NrVHJh
Y2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4RkYxMDIwMTI5NTBGNUEwMEYwMDI3NiAvKiBT
VkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4NDE3
LDYgKzI4NzE3LDcgQEAKIAkJCQk0OTg3NzBGMDEyNDJDNTM1MDAyMjI2QkEgLyogVGV4dHVyZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDODRBNDEyMzcwREM4MDAwQzYxNjEgLyogVGV4dFZp
ZXdTb3VyY2VQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNjVEMzIwRUFEMTIxMTAw
N0U0NTMzIC8qIFRoZW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0QzNCMUZDMEYwRTQxNzAw
MDk2OTNGNiAvKiBUaWxlQ2FjaGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0U2NTlFOTBFQTky
RkZBMDA3RTQ1MzMgLyogVGhlbWVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzZENkM5NDEy
MkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwQjkwNTYxRTBGMjU3RTkzMDA5NUZGNkEgLyogVGhyZWFkYWJsZUxvYWRlci5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTI4NTA1LDYgKzI4ODA2LDcgQEAKIAkJCQk3RTY2RTIzMzE2RDZF
QjZDMDBGN0U3RkYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3RTY2RTIzMzE3RTZFQjZDMDBGN0U3RkYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVBWUlRDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFM0ZBRThFMTQ3MzNGREIwMEU0MjMwNiAv
KiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjk3
QTY1ODE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yaU9TLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNkU0RTkxQUUxMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGNkYxRUQxMjdGNzBCMTAwNTVDQjA2
IC8qIFdlYkdMQ29udGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTAxRDNDRjgyMTRC
RDBBMzAwMEZFOTk3MCAvKiBXZWJHTENvbnRleHRHcm91cC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI4NjMwLDYgKzI4OTMyLDcgQEAKIAkJCQlFMUVDMjk5RjBCQjA0QzZCMDBFQTE4N0IgLyogWFBh
dGhOb2RlU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQjdGQzc1MEE4QjkyRUMwMEQ5RDM3
QiAvKiBYUGF0aE5TUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0ZDNzgwQThC
OTJFQzAwRDlEMzdCIC8qIFhQYXRoUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ0NzY1
MzFCMTMzMTcwOTkwMDA2Qjc4OSAvKiBTU0xLZXlHZW5lcmF0b3JJT1MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUFCN0ZDN0EwQThCOTJFQzAwRDlEMzdCIC8qIFhQYXRoUGF0aC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQUI3RkM3QzBBOEI5MkVDMDBEOUQzN0IgLyogWFBhdGhQcmVkaWNhdGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0ZDN0UwQThCOTJFQzAwRDlEMzdCIC8qIFhQYXRo
UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ29udGVudEZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZp
bHRlci5oCmluZGV4IDkzZjIwOWRiNjNlOWE5NjBiMjU1NjRkYmMzNjM5Y2U5NWY1NDY5MDAuLmQw
NWUyYWEyODdmNGMyYTYzOGQzYTc4M2I2ODZhMWFlM2VhM2NkZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Db250ZW50RmlsdGVyLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKKyNpZiBQTEFURk9S
TShJT1MpCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNlbmRpZgorCiAjaWYgUExBVEZP
Uk0oTUFDKQogT0JKQ19DTEFTUyBXZWJGaWx0ZXJFdmFsdWF0b3I7CiAjZW5kaWYKQEAgLTUxLDYg
KzU1LDExIEBAIHB1YmxpYzoKICAgICBib29sIGRpZEJsb2NrRGF0YSgpIGNvbnN0OwogICAgIGNv
bnN0IGNoYXIqIGdldFJlcGxhY2VtZW50RGF0YShpbnQmIGxlbmd0aCkgY29uc3Q7CiAgICAgCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzY2hlbWUoKTsKKyAgICB2
b2lkIHJlcXVlc3RVbmJsb2NrQW5kRGlzcGF0Y2hJZlN1Y2Nlc3NmdWwoRnVuY3Rpb248dm9pZCgp
Pik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDb250ZW50RmlsdGVyKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCmlu
ZGV4IGYzNTM1NmNiZDVkYTI4MDRhODY1MmE5MDJhOTUwMWY0OTA1MDMxZjMuLjUzNzliODY3MDZj
ODJjNzk5ZmM3MDQyZjkwMDRiZTY4YWMyZmE4NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0RyYWdEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0Rh
dGEuaApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykg
JiYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU1LDExICs1NSwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBEYXRhT2JqZWN0R3RrOwogfQogdHlwZWRlZiBXZWJDb3JlOjpEYXRhT2Jq
ZWN0R3RrKiBEcmFnRGF0YVJlZjsKLSNlbGlmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oQkxB
Q0tCRVJSWSkgfHwgUExBVEZPUk0oTklYKQorI2VsaWYgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9S
TShCTEFDS0JFUlJZKSB8fCBQTEFURk9STShOSVgpIHx8IFBMQVRGT1JNKElPUykKIHR5cGVkZWYg
dm9pZCogRHJhZ0RhdGFSZWY7CiAjZW5kaWYKIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEZyYW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29z
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCmluZGV4IGRj
OTcxYjM2ZTdhZWVlMjQyNGFiZTEzYzFhOTZmNzRjMmQ3YzhlMmQuLjRhMTBmMTZkMzNlZDVmY2Mz
NTQ4OTNlZmQ5YjZjZTcyY2QzMGU4NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0ZpbGVDaG9vc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hv
b3Nlci5jcHAKQEAgLTc1LDYgKzc1LDI1IEBAIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCiAgICAgbV9jbGllbnQtPmZpbGVzQ2hv
c2VuKGZpbGVzKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy8vIEZJWE1FOiBUaGlzIGZ1bmN0
aW9uIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gRmlsZUNob29zZXI6OmNob29zZUZpbGVzKCkuIFdl
IHNob3VsZCBtZXJnZSB0aGlzIGZ1bmN0aW9uCisvLyB3aXRoIEZpbGVDaG9vc2VyOjpjaG9vc2VG
aWxlcygpIGFuZCBoZW5jZSByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCit2b2lkIEZp
bGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFt
ZXMsIGNvbnN0IFN0cmluZyYgZGlzcGxheVN0cmluZywgSWNvbiogaWNvbikKK3sKKyAgICAvLyBG
SVhNRTogVGhpcyBpcyBpbmVsZWdhbnQuIFdlIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBzZXR0
aW5ncyBoZXJlLgorICAgIGlmIChtX3NldHRpbmdzLnNlbGVjdGVkRmlsZXMgPT0gZmlsZW5hbWVz
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4gZmlsZXM7CisgICAgZm9yIChhdXRv
IGZpbGVuYW1lIDogZmlsZW5hbWVzKQorICAgICAgICBmaWxlcy5hcHBlbmQoRmlsZUNob29zZXJG
aWxlSW5mbyhmaWxlbmFtZSkpOworICAgIG1fY2xpZW50LT5maWxlc0Nob3NlbihmaWxlcywgZGlz
cGxheVN0cmluZywgaWNvbik7Cit9CisjZW5kaWYKKwogdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3Nl
RmlsZXMoY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBmaWxlcykKIHsKICAgICAv
LyBGSVhNRTogVGhpcyBpcyBpbmVsZWdhbnQuIFdlIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBz
ZXR0aW5ncyBoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNo
b29zZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgKaW5kZXggNmMw
MjNlM2Q2ZGRkM2VkZDkwNzMxZDFjMWFhODljYTk3MzE3ODgwMC4uOGQ3NTllNjkzNzhjNmQwNjQ2
YzFlZWM5MTdmYmMyYTQ0ZmFmMTM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRmlsZUNob29zZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nl
ci5oCkBAIC0zNyw2ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbGVD
aG9vc2VyOworY2xhc3MgSWNvbjsKIAogc3RydWN0IEZpbGVDaG9vc2VyRmlsZUluZm8gewogICAg
IEZpbGVDaG9vc2VyRmlsZUluZm8oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lID0gU3RyaW5nKCkpCkBAIC03MCw2ICs3MSwxMSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB+RmlsZUNob29zZXJDbGllbnQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBmaWxlc0No
b3Nlbihjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mKSA9IDA7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIGFsbW9zdCBpZGVudGljYWwg
dG8gRmlsZUNob29zZXI6OmZpbGVzQ2hvc2VuKCkuIFdlIHNob3VsZCBtZXJnZSB0aGlzCisgICAg
Ly8gZnVuY3Rpb24gd2l0aCBGaWxlQ2hvb3Nlcjo6ZmlsZXNDaG9zZW4oKSBhbmQgaGVuY2UgcmVt
b3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgorICAgIHZpcnR1YWwgdm9pZCBmaWxlc0Nob3Nl
bihjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlTdHJpbmcsIEljb24qKSA9IDA7CisjZW5kaWYKIH07CiAKIGNsYXNzIEZpbGVDaG9vc2VyIDog
cHVibGljIFJlZkNvdW50ZWQ8RmlsZUNob29zZXI+IHsKQEAgLTgxLDYgKzg3LDExIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgY2hvb3NlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIHZvaWQg
Y2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgYWxtb3N0IGlkZW50aWNhbCB0byBG
aWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoKS4gV2Ugc2hvdWxkIG1lcmdlIHRoaXMKKyAgICAvLyBm
dW5jdGlvbiB3aXRoIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcygpIGFuZCBoZW5jZSByZW1vdmUg
dGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCisgICAgdm9pZCBjaG9vc2VNZWRpYUZpbGVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgU3RyaW5nJiBkaXNwbGF5U3RyaW5nLCBJY29u
Kik7CisjZW5kaWYgICAgCiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IGp1c3Qg
cGFzcyBmaWxlIHBhdGhzIHRoYXQgY291bGQgYmUgdmlydHVhbCBwYXRocyB3aXRoIHByb3BlciBk
aXNwbGF5IG5hbWVzIHJhdGhlciB0aGFuIHBhc3Npbmcgc3RydWN0cy4KICAgICB2b2lkIGNob29z
ZUZpbGVzKGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiYgZmlsZXMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAppbmRleCA0MDJmZjE3YWEwYTNkNzVjNGU2MWQ4
Y2JhYTBhNWM3NGI5ZDEyNWZmLi40ZTBkOWQ2NmNkNGI4ZTdhOTI4ZTQ2OWExZDFlMTcwY2FhZDUw
ZGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcApAQCAtOTcsNiArOTcs
MTAgQEAgU3RyaW5nIGVuY29kZUZvckZpbGVOYW1lKGNvbnN0IFN0cmluZyYgaW5wdXRTdHJpbmcp
CiAKICNpZiAhUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCiAKK3ZvaWQgc2V0TWV0YWRh
dGFVUkwoU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKK30KKwogYm9v
bCBjYW5FeGNsdWRlRnJvbUJhY2t1cCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRmlsZVN5c3RlbS5oCmluZGV4IDlhNWEzOWYzZTJlMDk0MjUyMWExZjZlNjkwNDgw
MGRlNTAzNDc4NWQuLjM0ZmUwYTQzMGY3ZTZhMzMzYzIzZmUzMDM1Y2Q5OWUxMTFmOTZhYWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKQEAgLTE1MSw2ICsxNTEsOCBAQCBTdHJp
bmcgaG9tZURpcmVjdG9yeVBhdGgoKTsKIFN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3Ry
aW5nJik7CiBTdHJpbmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmKTsKIAordm9pZCBzZXRN
ZXRhZGF0YVVSTChTdHJpbmcmIFVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29u
c3QgU3RyaW5nJiBwYXRoKTsKKwogYm9vbCBjYW5FeGNsdWRlRnJvbUJhY2t1cCgpOyAvLyBSZXR1
cm5zIHRydWUgaWYgYW55IGZpbGUgY2FuIGV2ZXIgYmUgZXhjbHVkZWQgZnJvbSBiYWNrdXAuCiBi
b29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0IFN0cmluZyYpOyAvLyBSZXR1cm5zIHRydWUgaWYg
c3VjY2Vzc2Z1bC4KIApAQCAtMTg5LDEwICsxOTEsNiBAQCBTdHJpbmcgZW5jb2RlRm9yRmlsZU5h
bWUoY29uc3QgU3RyaW5nJik7CiBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHBhdGhBc1VSTChjb25zdCBT
dHJpbmcmKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQotdm9pZCBzZXRNZXRhZGF0YVVS
TChTdHJpbmcmIFVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5n
JiBwYXRoKTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShOSVgpCiBT
dHJpbmcgZmlsZW5hbWVUb1N0cmluZyhjb25zdCBjaGFyKik7CiBTdHJpbmcgZmlsZW5hbWVGb3JE
aXNwbGF5KGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vS2lsbFJpbmdOb25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9u
ZS5jcHAKaW5kZXggMzEwYWEwODBjYjI1YTc0N2E2M2Q4ZTA2NDRjZjYwNzEyNWM0NTA5MS4uY2Q5
NDZhNGUyNGZmZDQyODk5NWQ3ZTU5OGRkNDE0ZTEwMTQ3MDE3NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwCkBAIC01MCwzICs1MCw0IEBAIHZvaWQgS2lsbFJpbmc6
OnNldFRvWWFua2VkU3RhdGUoKQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5jcHAKaW5kZXggNTk5MDExYjI2
MWI0NjAxNjNlZGQzNTA5MWE2YWYwMWVmMDBhOTNhMS4uYjgyMDdmOWMwYzQ2N2JkMjYzODBkZTJj
N2EzOWM5MDA3YjNhYjg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9j
YWxpemVkU3RyaW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVk
U3RyaW5ncy5jcHAKQEAgLTcxLDYgKzcxLDcgQEAgc3RhdGljIFN0cmluZyBmb3JtYXRMb2NhbGl6
ZWRTdHJpbmcoU3RyaW5nIGZvcm1hdCwgLi4uKQogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKIHN0YXRpYyBTdHJpbmcgdHJ1bmNhdGVkU3RyaW5nRm9yTG9va3VwTWVudUl0
ZW0oY29uc3QgU3RyaW5nJiBvcmlnaW5hbCkKIHsKICAgICBpZiAob3JpZ2luYWwuaXNFbXB0eSgp
KQpAQCAtODQsNiArODUsNyBAQCBzdGF0aWMgU3RyaW5nIHRydW5jYXRlZFN0cmluZ0Zvckxvb2t1
cE1lbnVJdGVtKGNvbnN0IFN0cmluZyYgb3JpZ2luYWwpCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZD
aGFyYWN0ZXJzID0gbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyh0cmltbWVkLCBtYXhO
dW1iZXJPZkdyYXBoZW1lQ2x1c3RlcnNJbkxvb2t1cE1lbnVJdGVtKTsKICAgICByZXR1cm4gbnVt
YmVyT2ZDaGFyYWN0ZXJzID09IHRyaW1tZWQubGVuZ3RoKCkgPyB0cmltbWVkIDogdHJpbW1lZC5s
ZWZ0KG51bWJlck9mQ2hhcmFjdGVycykgKyBlbGxpcHNpczsKIH0KKyNlbmRpZgogCiBTdHJpbmcg
aW5wdXRFbGVtZW50QWx0VGV4dCgpCiB7CkBAIC03OTcsNiArNzk5LDI2IEBAIFN0cmluZyBodG1s
U2VsZWN0TXVsdGlwbGVJdGVtcyhzaXplX3QgY291bnQpCiAgICAgICAgIHJldHVybiBmb3JtYXRM
b2NhbGl6ZWRTdHJpbmcoV0VCX1VJX1NUUklORygiJXp1IEl0ZW1zIiwgIlByZXNlbnQgdGhlIG51
bWJlciBvZiBzZWxlY3RlZCA8b3B0aW9uPiBpdGVtcyBpbiBhIDxzZWxlY3QgbXVsdGlwbGU+IGVs
ZW1lbnQgKGlPUyBvbmx5KSIpLCBjb3VudCk7CiAgICAgfQogfQorCitTdHJpbmcgZmlsZUJ1dHRv
bkNob29zZU1lZGlhRmlsZUxhYmVsKCkKK3sKKyAgICByZXR1cm4gV0VCX1VJX1NUUklORygiQ2hv
b3NlIE1lZGlhIChTaW5nbGUpIiwgIlRpdGxlIGZvciBmaWxlIGJ1dHRvbiB1c2VkIGluIEhUTUwg
Zm9ybXMgZm9yIG1lZGlhIGZpbGVzIik7Cit9CisKK1N0cmluZyBmaWxlQnV0dG9uQ2hvb3NlTXVs
dGlwbGVNZWRpYUZpbGVzTGFiZWwoKQoreworICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJDaG9v
c2UgTWVkaWEgKE11bHRpcGxlKSIsICJUaXRsZSBmb3IgZmlsZSBidXR0b24gdXNlZCBpbiBIVE1M
NSBmb3JtcyBmb3IgbXVsdGlwbGUgbWVkaWEgZmlsZXMiKTsKK30KKworU3RyaW5nIGZpbGVCdXR0
b25Ob01lZGlhRmlsZVNlbGVjdGVkTGFiZWwoKQoreworICAgIHJldHVybiBXRUJfVUlfU1RSSU5H
KCJubyBtZWRpYSBzZWxlY3RlZCAoc2luZ2xlKSIsICJUZXh0IHRvIGRpc3BsYXkgaW4gZmlsZSBi
dXR0b24gdXNlZCBpbiBIVE1MIGZvcm1zIGZvciBtZWRpYSBmaWxlcyB3aGVuIG5vIG1lZGlhIGZp
bGUgaXMgc2VsZWN0ZWQiKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25Ob01lZGlhRmlsZXNTZWxl
Y3RlZExhYmVsKCkKK3sKKyAgICByZXR1cm4gV0VCX1VJX1NUUklORygibm8gbWVkaWEgc2VsZWN0
ZWQgKG11bHRpcGxlKSIsICJUZXh0IHRvIGRpc3BsYXkgaW4gZmlsZSBidXR0b24gdXNlZCBpbiBI
VE1MIGZvcm1zIGZvciBtZWRpYSBmaWxlcyB3aGVuIG5vIG1lZGlhIGZpbGVzIGFyZSBzZWxlY3Rl
ZCBhbmQgdGhlIGJ1dHRvbiBhbGxvd3MgbXVsdGlwbGUgZmlsZXMgdG8gYmUgc2VsZWN0ZWQiKTsK
K30KICNlbmRpZgogCiBTdHJpbmcgaW1hZ2VUaXRsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBj
b25zdCBJbnRTaXplJiBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TG9jYWxpemVkU3RyaW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3Ry
aW5ncy5oCmluZGV4IGE4NzU3ZDRkZmM2ODY1OWU4ODU1NzI3NjRjMzJlN2FmZGY2MTFhYTguLmUz
ZjczY2IwZDJjMDE2OGJiYWZhNjFjMGU3OWYxYTRlMzc4YmY2N2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmgKQEAgLTE0NSw2ICsxNDUsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50
KCk7CiAjZW5kaWYgLy8gRU5BQkxFKENPTlRFWFRfTUVOVVMpCiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIFN0cmluZyBzZWFyY2hNZW51Tm9SZWNlbnRTZWFyY2hlc1RleHQoKTsKICAgICBTdHJp
bmcgc2VhcmNoTWVudVJlY2VudFNlYXJjaGVzVGV4dCgpOwogICAgIFN0cmluZyBzZWFyY2hNZW51
Q2xlYXJSZWNlbnRTZWFyY2hlc1RleHQoKTsKQEAgLTE3MSw2ICsxNzIsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgU3RyaW5nIEFYTWVudUxpc3RQb3B1cEFjdGlvblZlcmIoKTsKICAgICBT
dHJpbmcgQVhMaW5rQWN0aW9uVmVyYigpOwogICAgIFN0cmluZyBBWExpc3RJdGVtQWN0aW9uVmVy
YigpOworI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9XRUVLKQogICAgIC8vIHdlZWtG
b3JtYXRJbkxETUwoKSByZXR1cm5zIHdlZWsgYW5kIHllYXIgZm9ybWF0IGluIExETUwsIFVuaWNv
ZGUKQEAgLTIwNiw2ICsyMDgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIFN0cmluZyBodG1sU2VsZWN0TXVsdGlwbGVJdGVtcyhzaXplX3QgbnVtKTsK
KyAgICBTdHJpbmcgZmlsZUJ1dHRvbkNob29zZU1lZGlhRmlsZUxhYmVsKCk7CisgICAgU3RyaW5n
IGZpbGVCdXR0b25DaG9vc2VNdWx0aXBsZU1lZGlhRmlsZXNMYWJlbCgpOworICAgIFN0cmluZyBm
aWxlQnV0dG9uTm9NZWRpYUZpbGVTZWxlY3RlZExhYmVsKCk7CisgICAgU3RyaW5nIGZpbGVCdXR0
b25Ob01lZGlhRmlsZXNTZWxlY3RlZExhYmVsKCk7CiAjZW5kaWYKIAogICAgIFN0cmluZyBpbWFn
ZVRpdGxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IEludFNpemUmIHNpemUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTG9nZ2luZy5oCmluZGV4IDFiYWFiMzAzYTBlM2ZlYzVjMmUyNWJlNzA0NTIz
Y2VkM2I1YWI0NDcuLjRlZjIyZjYzMjY3NjQ2NjkwZmZkMmQ0NWIzY2YwNTExNTg5YTYyYTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKQEAgLTU0LDYgKzU0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIE0oTGl2ZUNvbm5lY3QpIFwKICAgICBNKExvYWRpbmcpIFwKICAgICBNKE1l
ZGlhKSBcCisgICAgTShNZW1vcnlQcmVzc3VyZSkgXAogICAgIE0oTmV0d29yaykgXAogICAgIE0o
Tm90WWV0SW1wbGVtZW50ZWQpIFwKICAgICBNKFBhZ2VDYWNoZSkgXApAQCAtNjEsNiArNjIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShQbHVnaW5zKSBcCiAgICAgTShQb3B1cEJsb2Nr
aW5nKSBcCiAgICAgTShQcm9ncmVzcykgXAorICAgIE0oUmVtb3RlSW5zcGVjdG9yKSBcCiAgICAg
TShSZXNvdXJjZUxvYWRpbmcpIFwKICAgICBNKFNRTERhdGFiYXNlKSBcCiAgICAgTShTcGVsbGlu
Z0FuZEdyYW1tYXIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVU
eXBlUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3Ry
eS5jcHAKaW5kZXggNzQ2NGUxOWVkMjQ1YjgxOGQ4MmFiYTRmYWQyNTIzMDI1MmQ2YzNjNC4uMGJi
NTA4YmRkNjBjYmE2ZDAxNjQ4NjU4OWJhNmI5ZTdlOWE2ZmU3MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKQEAgLTM2LDcgKzM2LDExIEBACiAKICNp
ZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2VDRy5oIgorI2lmICFQTEFURk9STShJT1Mp
CiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Cisj
ZWxzZQorI2luY2x1ZGUgPEltYWdlSU8vQ0dJbWFnZURlc3RpbmF0aW9uLmg+CisjZW5kaWYKICNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYKIApAQCAtMjI0LDYgKzIyOCwzNCBAQCBz
dGF0aWMgdm9pZCBpbml0aWFsaXplU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXMoKQogICAgIHN1cHBv
cnRlZEltYWdlTUlNRVR5cGVzLT5yZW1vdmUoImFwcGxpY2F0aW9uL3BkZiIpOwogICAgIHN1cHBv
cnRlZEltYWdlTUlNRVR5cGVzLT5yZW1vdmUoImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiKTsKIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBBZGQgbWFsZm9ybWVkIGltYWdlIG1pbWV0eXBlIGZv
ciBjb21wYXRpYmlsaXR5IHdpdGggTWFpbCBhbmQgdG8gaGFuZGxlIG1hbGZvcm1lZCBtaW1ldHlw
ZXMgZnJvbSB0aGUgbmV0CisgICAgLy8gVGhlc2Ugd2VyZSByZW1vdmVkIGZvciA8cmRhcjovL3By
b2JsZW0vNjU2NDUzOD4gUmUtZW5hYmxlIFVUSSBjb2RlIGluIFdlYkNvcmUgbm93IHRoYXQgTW9i
aWxlQ29yZVNlcnZpY2VzIGV4aXN0cworICAgIC8vIEJ1dCBNYWlsIHJlbGllcyBvbiBhdCBsZWFz
dCBpbWFnZS90aWYgcmVwb3J0ZWQgYXMgYmVpbmcgc3VwcG9ydGVkIChzaG91bGQgYmUgaW1hZ2Uv
dGlmZikuCisgICAgLy8gVGhpcyBjYW4gYmUgcmVtb3ZlZCB3aGVuIE1haWwgYWRkcmVzc2VzOgor
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83ODc5NTEwPiBNYWlsIHNob3VsZCB1c2Ugc3RhbmRhcmQg
aW1hZ2UgbWltZXR5cGVzIAorICAgIC8vIGFuZCB3ZSBmaXggc25pZmZpbmcgc28gdGhhdCBpdCBj
b3JyZWN0cyBpdGVtcyBzdWNoIGFzIGltYWdlL2pwZyAtPiBpbWFnZS9qcGVnLgorICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBtYWxmb3JtZWRNSU1FVHlwZXNbXSA9IHsKKyAgICAgICAgLy8gSlBFRyAo
aW1hZ2UvanBlZykKKyAgICAgICAgImltYWdlL2pwZyIsICJpbWFnZS9qcF8iLCAiaW1hZ2UvanBl
XyIsICJhcHBsaWNhdGlvbi9qcGciLCAiYXBwbGljYXRpb24veC1qcGciLCAiaW1hZ2UvcGlwZWci
LAorICAgICAgICAiaW1hZ2Uvdm5kLnN3aXRmdmlldy1qcGVnIiwgImltYWdlL3gteGJpdG1hcCIs
CisgICAgICAgIC8vIEdJRiAoaW1hZ2UvZ2lmKQorICAgICAgICAiaW1hZ2UvZ2lfIiwKKyAgICAg
ICAgLy8gUE5HIChpbWFnZS9wbmcpCisgICAgICAgICJhcHBsaWNhdGlvbi9wbmciLCAiYXBwbGlj
YXRpb24veC1wbmciLAorICAgICAgICAvLyBUSUZGIChpbWFnZS90aWZmKQorICAgICAgICAiaW1h
Z2UveC10aWYiLCAiaW1hZ2UvdGlmIiwgImltYWdlL3gtdGlmZiIsICJhcHBsaWNhdGlvbi90aWYi
LCAiYXBwbGljYXRpb24veC10aWYiLCAiYXBwbGljYXRpb24vdGlmZiIsCisgICAgICAgICJhcHBs
aWNhdGlvbi94LXRpZmYiLAorICAgICAgICAvLyBCTVAgKGltYWdlL2JtcCwgaW1hZ2UveC1iaXRt
YXApCisgICAgICAgICJpbWFnZS94LWJtcCIsICJpbWFnZS94LXdpbi1iaXRtYXAiLCAiaW1hZ2Uv
eC13aW5kb3dzLWJtcCIsICJpbWFnZS9tcy1ibXAiLCAiaW1hZ2UveC1tcy1ibXAiLAorICAgICAg
ICAiYXBwbGljYXRpb24vYm1wIiwgImFwcGxpY2F0aW9uL3gtYm1wIiwgImFwcGxpY2F0aW9uL3gt
d2luLWJpdG1hcCIsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJB
WV9MRU5HVEgobWFsZm9ybWVkTUlNRVR5cGVzKTsgKytpKSB7CisgICAgICAgIHN1cHBvcnRlZElt
YWdlTUlNRVR5cGVzLT5hZGQobWFsZm9ybWVkTUlNRVR5cGVzW2ldKTsKKyAgICAgICAgc3VwcG9y
dGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlcy0+YWRkKG1hbGZvcm1lZE1JTUVUeXBlc1tpXSk7Cisg
ICAgfQorI2VuZGlmCisKICNlbHNlCiAgICAgLy8gYXNzdW1lIHRoYXQgYWxsIGltcGxlbWVudGF0
aW9ucyBhdCBsZWFzdCBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgc3RhbmRhcmQKICAgICAvLyBpbWFn
ZSB0eXBlczoKQEAgLTMzMSw5ICszNjMsMTEgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1cHBv
cnRlZE5vbkltYWdlTWltZVR5cGVzKCkKICAgICAgICAgInRleHQvIiwKICAgICAgICAgImFwcGxp
Y2F0aW9uL3htbCIsCiAgICAgICAgICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLAorI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgICAgICJhcHBsaWNhdGlvbi92bmQud2FwLnhodG1sK3htbCIsCiAgICAg
ICAgICJhcHBsaWNhdGlvbi9yc3MreG1sIiwKICAgICAgICAgImFwcGxpY2F0aW9uL2F0b20reG1s
IiwKKyNlbmRpZgogICAgICAgICAiYXBwbGljYXRpb24vanNvbiIsCiAjaWYgRU5BQkxFKFNWRykK
ICAgICAgICAgImltYWdlL3N2Zyt4bWwiLApAQCAtNDQwLDcgKzQ3NCwxMSBAQCBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplVW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzKCkKICAgICAgICAgInRleHQveC1x
aWYiLAogICAgICAgICAidGV4dC94LWNzdiIsCiAgICAgICAgICJ0ZXh0L3gtdmNmIiwKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgICAgICAidGV4dC9ydGYiLAorI2Vsc2UKKyAgICAgICAgInRleHQv
dm5kLnN1bi5qMm1lLmFwcC1kZXNjcmlwdG9yIiwKKyNlbmRpZgogICAgIH07CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHR5cGVzKTsgKytpKQogICAgICAgdW5z
dXBwb3J0ZWRUZXh0TUlNRVR5cGVzLT5hZGQodHlwZXNbaV0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKaW5kZXggNWU4ZTdjYzNmYzIx
MGY2NjBiZTBkNmJhMTc0YjU4ODA3NGVkZDkyYi4uNjJlZTFhZDU2YTE5M2UzMTA0YTY4NDY4MzQ0
M2Q4OTM3ZGI1MTY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuY3BwCkBAIC00MCw2ICs0MCwxNCBAQCBNZW1vcnlQcmVzc3VyZUhhbmRs
ZXI6Ok1lbW9yeVByZXNzdXJlSGFuZGxlcigpCiAgICAgOiBtX2luc3RhbGxlZChmYWxzZSkKICAg
ICAsIG1fbGFzdFJlc3BvbmRUaW1lKDApCiAgICAgLCBtX2xvd01lbW9yeUhhbmRsZXIocmVsZWFz
ZU1lbW9yeSkKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IENhbiB3ZSBzaGFyZSBt
b3JlIG9mIHRoaXMgd2l0aCBPcGVuU291cmNlPworICAgICwgbV9yZWNlaXZlZE1lbW9yeVByZXNz
dXJlKDApCisgICAgLCBtX21lbW9yeVByZXNzdXJlUmVhc29uKE1lbW9yeVByZXNzdXJlUmVhc29u
Tm9uZSkKKyAgICAsIG1fY2xlYXJQcmVzc3VyZU9uTWVtb3J5UmVsZWFzZSh0cnVlKQorICAgICwg
bV9yZWxlYXNlTWVtb3J5QmxvY2soMCkKKyAgICAsIG1fb2JzZXJ2ZXIoMCkKKyNlbmRpZgogewog
fQogCkBAIC00OSw3ICs1Nyw5IEBAIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjppbnN0YWxs
KCkgeyB9CiB2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6dW5pbnN0YWxsKCkgeyB9CiB2b2lk
IE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6aG9sZE9mZih1bnNpZ25lZCkgeyB9CiB2b2lkIE1lbW9y
eVByZXNzdXJlSGFuZGxlcjo6cmVzcG9uZFRvTWVtb3J5UHJlc3N1cmUoKSB7IH0KKyNpZiAhUExB
VEZPUk0oSU9TKQogdm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnJlbGVhc2VNZW1vcnkoYm9v
bCkgeyB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKaW5kZXggOTUwYWU4NTJk
ZmUwOTA4ZWIzNDM4OWNmY2ZiNmI0MjZiOTRjNzk0Zi4uZWJmYjg0Y2ExMGI3ZmZlM2M5OTlkM2Jl
MTU1NDEzMWFiNjgzZjA3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVt
b3J5UHJlc3N1cmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmgKQEAgLTI5LDggKzI5LDIwIEBACiAjaW5jbHVkZSA8dGltZS5oPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKKyNpZiBQTEFURk9STShJT1MpCitlbnVtIE1lbW9yeVByZXNzdXJlUmVhc29uIHsKKyAg
ICBNZW1vcnlQcmVzc3VyZVJlYXNvbk5vbmUgPSAwIDw8IDAsCisgICAgTWVtb3J5UHJlc3N1cmVS
ZWFzb25WTVByZXNzdXJlID0gMSA8PCAwLAorICAgIE1lbW9yeVByZXNzdXJlUmVhc29uVk1TdGF0
dXMgPSAxIDw8IDEsCit9OworI2VuZGlmCisKIHR5cGVkZWYgdm9pZCAoKkxvd01lbW9yeUhhbmRs
ZXIpKGJvb2wgY3JpdGljYWwpOwogCiBjbGFzcyBNZW1vcnlQcmVzc3VyZUhhbmRsZXIgewpAQCAt
NDYsNiArNTgsMTYgQEAgcHVibGljOgogICAgICAgICBtX2xvd01lbW9yeUhhbmRsZXIgPSBoYW5k
bGVyOwogICAgIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogQ2FuIHdlIHNo
YXJlIG1vcmUgb2YgdGhpcyB3aXRoIE9wZW5Tb3VyY2U/CisgICAgdm9pZCBpbnN0YWxsTWVtb3J5
UmVsZWFzZUJsb2NrKHZvaWQgKF5yZWxlYXNlTWVtb3J5QmxvY2spKCksIGJvb2wgY2xlYXJQcmVz
c3VyZU9uTWVtb3J5UmVsZWFzZSA9IHRydWUpOworICAgIHZvaWQgc2V0UmVjZWl2ZWRNZW1vcnlQ
cmVzc3VyZShNZW1vcnlQcmVzc3VyZVJlYXNvbik7CisgICAgYm9vbCBoYXNSZWNlaXZlZE1lbW9y
eVByZXNzdXJlKCk7CisgICAgdm9pZCBjbGVhck1lbW9yeVByZXNzdXJlKCk7CisgICAgYm9vbCBz
aG91bGRXYWl0Rm9yTWVtb3J5Q2xlYXJNZXNzYWdlKCk7CisgICAgdm9pZCByZXNwb25kVG9NZW1v
cnlQcmVzc3VyZUlmTmVlZGVkKCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIHVuaW5z
dGFsbCgpOwogCkBAIC02MCw2ICs4MiwxNSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pbnN0YWxs
ZWQ7CiAgICAgdGltZV90IG1fbGFzdFJlc3BvbmRUaW1lOwogICAgIExvd01lbW9yeUhhbmRsZXIg
bV9sb3dNZW1vcnlIYW5kbGVyOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHVpbnQzMl90IG1f
cmVjZWl2ZWRNZW1vcnlQcmVzc3VyZTsKKyAgICB1aW50MzJfdCBtX21lbW9yeVByZXNzdXJlUmVh
c29uOworICAgIGJvb2wgbV9jbGVhclByZXNzdXJlT25NZW1vcnlSZWxlYXNlOworICAgIHZvaWQg
KF5tX3JlbGVhc2VNZW1vcnlCbG9jaykoKTsKKyAgICBDRlJ1bkxvb3BPYnNlcnZlclJlZiBtX29i
c2VydmVyOworICAgIE11dGV4IG1fb2JzZXJ2ZXJNdXRleDsKKyNlbmRpZgogfTsKICAKIC8vIEZ1
bmN0aW9uIHRvIG9idGFpbiB0aGUgZ2xvYmFsIG1lbW9yeSBwcmVzc3VyZSBvYmplY3QuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCmluZGV4IDU5
YmEyOWIzOWVhMDhkMGNlMjFhMWI2MDQ5ZGYwOGQwYTljZjA1ZGMuLmY3MzAzN2RjNmMxODI2MGUy
YTEyYjY2NzdhNzNiZWY0MTM2NmMyMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCkBAIC0zNiw2ICszNiwxNCBAQAogT0JKQ19DTEFTUyBO
U0V2ZW50OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisjaWZkZWYgX19PQkpDX18KK0Bj
bGFzcyBXZWJFdmVudDsKKyNlbHNlCitjbGFzcyBXZWJFdmVudDsKKyNlbmRpZgorI2VuZGlmCisK
ICNpZiBQTEFURk9STShHVEspCiB0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRL
ZXk7CiAjaW5jbHVkZSAiQ29tcG9zaXRpb25SZXN1bHRzLmgiCkBAIC0xMjcsNyArMTM1LDExIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQorI2lmICFQ
TEFURk9STShJT1MpCiAgICAgICAgIE5TRXZlbnQqIG1hY0V2ZW50KCkgY29uc3QgeyByZXR1cm4g
bV9tYWNFdmVudC5nZXQoKTsgfQorI2Vsc2UKKyAgICAgICAgV2ViRXZlbnQgKmV2ZW50KCkgY29u
c3QgeyByZXR1cm4gbV9FdmVudC5nZXQoKTsgfQorI2VuZGlmCiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKFdJTikKQEAgLTE3MCw3ICsxODIsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlm
CiAKICNpZiBQTEFURk9STShNQUMpCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgUmV0YWlu
UHRyPE5TRXZlbnQ+IG1fbWFjRXZlbnQ7CisjZWxzZQorICAgICAgICBSZXRhaW5QdHI8V2ViRXZl
bnQ+IG1fRXZlbnQ7CisjZW5kaWYKICNlbmRpZgogI2lmIFBMQVRGT1JNKEdUSykKICAgICAgICAg
R2RrRXZlbnRLZXkqIG1fZ2RrRXZlbnRLZXk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtTW91c2VFdmVudC5oCmluZGV4IDNhNDI1MzM2NTBlNjA0MDk5Y2RhMDE3N2ZiMTc3Yjli
OGViODYzZjMuLmQ2NGRkMjMwNzIzNTA4ODYwNTg2Nzk5ZDgwYWVmY2JkNGQxZjdiYjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCkBAIC01Nyw3ICs1
Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9idXR0b24oTm9CdXR0
b24pCiAgICAgICAgICAgICAsIG1fY2xpY2tDb3VudCgwKQogICAgICAgICAgICAgLCBtX21vZGlm
aWVyRmxhZ3MoMCkKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oSU9TKQogICAgICAgICAgICAgLCBtX2V2ZW50TnVtYmVyKDApCiAjZWxpZiBQTEFURk9S
TShXSU4pCiAgICAgICAgICAgICAsIG1fZGlkQWN0aXZhdGVXZWJWaWV3KGZhbHNlKQpAQCAtNzMs
NyArNzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fYnV0dG9uKGJ1
dHRvbikKICAgICAgICAgICAgICwgbV9jbGlja0NvdW50KGNsaWNrQ291bnQpCiAgICAgICAgICAg
ICAsIG1fbW9kaWZpZXJGbGFncygwKQotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShN
QUMpICYmICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICAsIG1fZXZlbnROdW1iZXIoMCkKICNl
bGlmIFBMQVRGT1JNKFdJTikKICAgICAgICAgICAgICwgbV9kaWRBY3RpdmF0ZVdlYlZpZXcoZmFs
c2UpCkBAIC0xMDUsNyArMTA1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQbGF0
Zm9ybU1vdXNlRXZlbnQoY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiwgSW50UG9pbnQpOwog
I2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZP
Uk0oSU9TKQogICAgICAgICBpbnQgZXZlbnROdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50
TnVtYmVyOyB9CiAjZW5kaWYKIApAQCAtMTI5LDcgKzEyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgaW50IG1fY2xpY2tDb3VudDsKICAgICAgICAgdW5zaWduZWQgbV9tb2RpZmll
ckZsYWdzOwogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRG
T1JNKElPUykKICAgICAgICAgaW50IG1fZXZlbnROdW1iZXI7CiAjZWxpZiBQTEFURk9STShXSU4p
CiAgICAgICAgIGJvb2wgbV9kaWRBY3RpdmF0ZVdlYlZpZXc7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1TY3JlZW4uaAppbmRleCA5MzM2YzdmNjQ1YWYwZmE5OTFmNGI1MzhmNmU0NDU5
NjU2NWQ1MzhmLi5hMjRlZGQ3OTFkOTM5N2JhYmVmODYyM2UzMDM5MTc5ODNlYmU1MDJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiBPQkpDX0NMQVNTIE5TU2NyZWVuOwogT0JKQ19D
TEFTUyBOU1dpbmRvdzsKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRS
WV9UWVBFUwpAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgRmxvYXRS
ZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kik7CiAgICAgdm9pZCBzY3JlZW5Db2xvclBy
b2ZpbGUoQ29sb3JQcm9maWxlJik7CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0o
TUFDKSAmJiAhUExBVEZPUk0oSU9TKQogICAgIE5TU2NyZWVuICpzY3JlZW5Gb3JXaW5kb3coTlNX
aW5kb3cgKik7CiAKICAgICBGbG9hdFJlY3QgdG9Vc2VyU3BhY2UoY29uc3QgTlNSZWN0JiwgTlNX
aW5kb3cgKmRlc3RpbmF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9S
dW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwCmluZGV4IGU5NDAwYTA5YzI4NmE0NDQwYzMyNjU5
ZTQ5ZTMwZTUwY2Q5ZTQ0ZGYuLjI2ZTQ5YmRiYjM5MmU2ZDE0OWFjNzc3NTcyYTkyNjQ3MDZjMmU5
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0
aW9uQ2hlY2tzLmNwcApAQCAtMzcsNyArMzcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
CiBzdGF0aWMgYm9vbCBtYWluQnVuZGxlSXNFcXVhbFRvKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRl
bnRpZmllclN0cmluZykKIHsKLSNpZiBVU0UoQ0YpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBj
b25zaWRlciBtZXJnaW5nIHRoaXMgZmlsZSB3aXRoIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lP
Uy5tbS4KKyAgICAvLyBUaGVuIHdlIGNhbiByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQu
CisjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oSU9TKQogICAgIENGQnVuZGxlUmVmIG1haW5CdW5k
bGUgPSBDRkJ1bmRsZUdldE1haW5CdW5kbGUoKTsKICAgICBpZiAoIW1haW5CdW5kbGUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1
bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGIzNzhiYWFkZGQwYjUxNWE4
ODZjYWY2MzFjOWJlMzI2YzRmZDZmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oCkBAIC0wLDAgKzEsNDkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1NfaAorI2RlZmluZSBS
dW50aW1lQXBwbGljYXRpb25DaGVja3NJT1NfaAorCisvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNp
ZGVyIG1lcmdpbmcgdGhpcyBmaWxlIHdpdGggUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmguCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgYXBwbGljYXRpb25Jc01vYmlsZU1haWwoKTsKK2Jv
b2wgYXBwbGljYXRpb25Jc01vYmlsZVNhZmFyaSgpOworYm9vbCBhcHBsaWNhdGlvbklzRHVtcFJl
bmRlclRyZWUoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc01vYmlsZVN0b3JlKCk7Citib29sIGFwcGxp
Y2F0aW9uSXNXZWJBcHAoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc09rQ3VwaWQoKTsKK2Jvb2wgYXBw
bGljYXRpb25Jc0ZhY2Vib29rKCk7Citib29sIGFwcGxpY2F0aW9uSXNFcGljdXJpb3VzKCk7Citi
b29sIGFwcGxpY2F0aW9uSXNEYWlqaXNlbkRpY3Rpb25hcnkoKTsKK2Jvb2wgYXBwbGljYXRpb25J
c05BU0FIRCgpOworYm9vbCBhcHBsaWNhdGlvbklzTUFTSCgpOworYm9vbCBhcHBsaWNhdGlvbklz
VGhlRWNvbm9taXN0T25JUGhvbmUoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc1dlYlByb2Nlc3MoKTsK
K2Jvb2wgYXBwbGljYXRpb25Jc0lCb29rc09uSU9TKCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPU19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWY0NDIwMzBjMjM1OWIzZmQxY2VkMTE1ZjU4MGM4MmVlMzZlNjBjMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrc0lPUy5tbQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIgorCisvLyBGSVhNRTog
V2Ugc2hvdWxkIGNvbnNpZGVyIG1lcmdpbmcgdGhpcyBmaWxlIHdpdGggUnVudGltZUFwcGxpY2F0
aW9uQ2hlY2tzLmNwcC4KKyNpZiBQTEFURk9STShJT1MpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworYm9vbCBhcHBsaWNhdGlvbklzTW9iaWxlTWFpbCgpCit7CisgICAgc3RhdGljIGJvb2wgaXNN
b2JpbGVNYWlsID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNF
cXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLm1vYmlsZW1haWwiXTsKKyAgICByZXR1cm4gaXNNb2Jp
bGVNYWlsOworfQorCitib29sIGFwcGxpY2F0aW9uSXNNb2JpbGVTYWZhcmkoKQoreworICAgIHN0
YXRpYyBib29sIGlzTW9iaWxlU2FmYXJpID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxl
SWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLm1vYmlsZXNhZmFyaSJdOwor
ICAgIHJldHVybiBpc01vYmlsZVNhZmFyaTsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzRHVtcFJl
bmRlclRyZWUoKQoreworICAgIHN0YXRpYyBib29sIGlzRHVtcFJlbmRlclRyZWUgPSBbW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20u
YXBwbGUuRHVtcFJlbmRlclRyZWUiXTsKKyAgICByZXR1cm4gaXNEdW1wUmVuZGVyVHJlZTsKK30K
KworYm9vbCBhcHBsaWNhdGlvbklzTW9iaWxlU3RvcmUoKQoreworICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzTW9iaWxlU3RvcmUgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlm
aWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uYXBwbGUuTW9iaWxlU3RvcmUiXTsKKyAgICByZXR1
cm4gaXNNb2JpbGVTdG9yZTsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzV2ViQXBwKCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBpc1dlYkFwcCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlk
ZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5hcHBsZS53ZWJhcHAiXTsKKyAgICByZXR1
cm4gaXNXZWJBcHA7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc09rQ3VwaWQoKQoreworICAgIHN0
YXRpYyBib29sIGlzT2tDdXBpZCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50
aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5va2N1cGlkLmFwcCJdOworICAgIHJldHVybiBp
c09rQ3VwaWQ7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc0ZhY2Vib29rKCkKK3sKKyAgICBzdGF0
aWMgYm9vbCBpc0ZhY2Vib29rID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRp
Zmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmZhY2Vib29rLkZhY2Vib29rIl07CisgICAgcmV0
dXJuIGlzRmFjZWJvb2s7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc0VwaWN1cmlvdXMoKQorewor
ICAgIHN0YXRpYyBib29sIGlzRXBpY3VyaW91cyA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1
bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5jb25kZW5ldC5FcGljdXJpb3Vz
Il07CisgICAgcmV0dXJuIGlzRXBpY3VyaW91czsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzRGFp
amlzZW5EaWN0aW9uYXJ5KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc0RhaWppc2VuRGljdGlvbmFy
eSA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0
cmluZzpAImpwLmNvLnNob2dha3VrYW4uZGFpamlzZW4yMDA5aSJdOworICAgIHJldHVybiBpc0Rh
aWppc2VuRGljdGlvbmFyeTsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzTkFTQUhEKCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBpc05BU0FIRCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlk
ZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImdvdi5uYXNhLk5BU0FIRCJdOworICAgIHJldHVy
biBpc05BU0FIRDsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzTUFTSCgpCit7CisgICAgc3RhdGlj
IGJvb2wgaXNNQVNIID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0g
aXNFcXVhbFRvU3RyaW5nOkAiY29tLm1hZ25hdGVpbnRlcmFjdGl2ZS5tYXNoZ2FtZSJdCisgICAg
ICAgIHx8IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxU
b1N0cmluZzpAImNvbS5tYWduYXRlaW50ZXJhY3RpdmUubWFzaGxpdGVnYW1lIl0KKyAgICAgICAg
fHwgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3Ry
aW5nOkAiY29tLm1hZ25hdGVpbnRlcmFjdGl2ZS5tYXNoY2hyaXN0bWFzIl0KKyAgICAgICAgfHwg
W1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5n
OkAiY29tLm1hZ25hdGVpbnRlcmFjdGl2ZS5tYXNoaGFsbG93ZWVuIl0KKyAgICAgICAgfHwgW1tb
TlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAi
Y29tLm1hZ25hdGVpbnRlcmFjdGl2ZS5tYXNodmFsZW50aW5lcyJdOworICAgIHJldHVybiBpc01B
U0g7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc1RoZUVjb25vbWlzdE9uSVBob25lKCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBpc1RoZUVjb25vbWlzdE9uSVBob25lID0gW1tbTlNCdW5kbGUgbWFpbkJ1
bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmVjb25vbWlzdC5p
cGhvbmUiXTsKKyAgICByZXR1cm4gaXNUaGVFY29ub21pc3RPbklQaG9uZTsKK30KKworLy8gRklY
TUU6IHRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB3aGVuIHRoZSBXZWJQcm9jZXNzIGlzIGNoYW5n
ZWQgdG8gYW4gWFBDIHNlcnZpY2UuCitib29sIGFwcGxpY2F0aW9uSXNXZWJQcm9jZXNzKCkKK3sK
KyAgICBzdGF0aWMgYm9vbCBpc1dlYlByb2Nlc3MgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBi
dW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uYXBwbGUuV2ViS2l0LldlYkNv
bnRlbnQiXSB8fCBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0Vx
dWFsVG9TdHJpbmc6QCJjb20uYXBwbGUuV2ViUHJvY2VzcyJdOworICAgIHJldHVybiBpc1dlYlBy
b2Nlc3M7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc0lCb29rc09uSU9TKCkKK3sKKyAgICBzdGF0
aWMgYm9vbCBpc0lCb29rc09uSU9TID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRl
bnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLmlCb29rcyJdOworICAgIHJldHVy
biBpc0lCb29rc09uSU9TOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5j
cHAKaW5kZXggNzg3ZmIxMjg0MzVkYjY0NzA0OWZiMzFiOGU1NzBmNmYwOGE5NzdlZC4uZjhkYjI1
MGMwMTg2ZjY0MGNmNjMyMmJmZmY0NDM5YzI4MzkwNGVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtMzksNyArMzksNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLSNpZiAhRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisjaWYgIUVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKSAmJiAhUExBVEZPUk0oSU9TKQogUGFzc093blB0cjxTY3JvbGxBbmlt
YXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFy
ZWEpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxl
QXJlYSkpOwpAQCAtMTIzLDYgKzEyMywxMyBAQCBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVX
aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKICAgICByZXR1cm4gaGFuZGxl
ZDsKIH0KIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCitib29sIFNjcm9sbEFuaW1hdG9yOjpo
YW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorI2VuZGlmCisKIHZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNldEN1cnJlbnRQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKIHsKICAgICBtX2N1cnJlbnRQb3NYID0g
cG9zaXRpb24ueCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5k
ZXggMjBlOWE1NmRkMjRjYmIzMmQzODY4NTEzNmUxYmQ3ZTVhM2I0NzdjMS4uZjBkYzk4NDYzOGRl
ODdlNDk5NjNlODdiZjkwNWU3OTMzMWQyY2JkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5oCkBAIC00MCw2ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBTY3Jv
bGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJhcjsKIApAQCAtNjIsNiArNjMsMTAgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50Jik7CiAKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpOworI2VuZGlmCisKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnRQaGFzZShQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSkgeyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxUeXBlcy5oCmluZGV4IGY2MzBkYWUyNjU4M2JjMDkyNTAyYWI3ODNjMjM5Y2NlYzZkNGRm
MmQuLjk2NDg2YTliZDJkNTA0NzhlMDczMDZkNzU5NDVmNWNlZGVjOWFjYTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaApAQCAtMjYsNiArMjYsOSBAQAogI2lmbmRlZiBTY3Jv
bGxUeXBlc19oCiAjZGVmaW5lIFNjcm9sbFR5cGVzX2gKIAorLy8gV1RGX1BMQVRGT1JNX0lPUwor
I2lmZGVmIF9fY3BsdXNwbHVzCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGVudW0gU2Ny
b2xsRGlyZWN0aW9uIHsKQEAgLTE3OCw0ICsxODEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgfTsKIH0KIAorI2VuZGlmIC8vIF9fY3BsdXNwbHVzCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAppbmRleCBmZjIyYzRkMGU5NjU0YjFiZGIzZTE0NjdkNGRj
OTc0ODgyMDcyOWQ5Li45YjMzYzMxZGFmMTc2ZDI1YTQ3MWIyZTQ3ZTcyNGJmNDU3ZjMyNzNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApAQCAtMjQxLDggKzI0MSwxMCBA
QCBJbnRTaXplIFNjcm9sbFZpZXc6OnVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKFZpc2libGVD
b250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYgogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAg
ICAgICByZXR1cm4gcGxhdGZvcm1WaXNpYmxlQ29udGVudFNpemUoc2Nyb2xsYmFySW5jbHVzaW9u
ID09IEluY2x1ZGVTY3JvbGxiYXJzKTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFt
X2ZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1fZml4
ZWRWaXNpYmxlQ29udGVudFJlY3Quc2l6ZSgpOworI2VuZGlmCiAKICAgICBpbnQgdmVydGljYWxT
Y3JvbGxiYXJXaWR0aCA9IDA7CiAgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAw
OwpAQCAtMjY0LDggKzI2NiwxMCBAQCBJbnRSZWN0IFNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50
UmVjdChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2NvbAogICAgIGlmIChw
bGF0Zm9ybVdpZGdldCgpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1WaXNpYmxlQ29udGVudFJl
Y3Qoc2NvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpOwogCisjaWYgIVBMQVRG
T1JNKElPUykKICAgICBpZiAoIW1fZml4ZWRWaXNpYmxlQ29udGVudFJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gbV9maXhlZFZpc2libGVDb250ZW50UmVjdDsKKyNlbmRpZgogCiAgICAg
RmxvYXRTaXplIHZpc2libGVDb250ZW50U2l6ZSA9IHVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXpl
KHNjb2xsYmFySW5jbHVzaW9uKTsKICAgICB2aXNpYmxlQ29udGVudFNpemUuc2NhbGUoMSAvIHZp
c2libGVDb250ZW50U2NhbGVGYWN0b3IoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3
LmgKaW5kZXggMjBjNjljZWVlYTZlMDUzYjQ3NjA3MTAzYmY3NGFlOTE3MTg4OTMwNS4uZTUyODVm
NGZkYmY0MzlkMGQ4NzMwMmExODc5MWRlZDY5NmIyZTc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuaApAQCAtMzUsNiArMzUsMjQgQEAKIAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBXQUtTY3Jv
bGxWaWV3OworQGNsYXNzIFdBS1ZpZXc7CisjZWxzZQorY2xhc3MgV0FLU2Nyb2xsVmlldzsKK2Ns
YXNzIFdBS1ZpZXc7CisjZW5kaWYKKworI2lmbmRlZiBOU1Njcm9sbFZpZXcKKyNkZWZpbmUgTlNT
Y3JvbGxWaWV3IFdBS1Njcm9sbFZpZXcKKyNlbmRpZgorCisjaWZuZGVmIE5TVmlldworI2RlZmlu
ZSBOU1ZpZXcgV0FLVmlldworI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiAjaWYg
UExBVEZPUk0oTUFDKSAmJiBkZWZpbmVkIF9fT0JKQ19fCiBAcHJvdG9jb2wgV2ViQ29yZUZyYW1l
U2Nyb2xsVmlldzsKICNlbmRpZgpAQCAtNDMsNiArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBUaWxlQ2FjaGU7
CiAKIGNsYXNzIFNjcm9sbFZpZXcgOiBwdWJsaWMgV2lkZ2V0LCBwdWJsaWMgU2Nyb2xsYWJsZUFy
ZWEgewogcHVibGljOgpAQCAtMTQxLDkgKzE2MCwyMCBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIHNl
dEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0IGluc3RlYWQgZm9yIHRoZSBtYWluZnJhbWUsIHRob3Vn
aCB0aGlzIG11c3QgYmUgdXBkYXRlZCBtYW51YWxseSwgZS5nIGp1c3QgYmVmb3JlIHJlc3VtaW5n
IHRoZSBwYWdlCiAgICAgLy8gd2hpY2ggdXN1YWxseSB3aWxsIGhhcHBlbiB3aGVuIHBhbm5pbmcs
IHBpbmNoaW5nIGFuZCByb3RhdGlvbiBlbmRzLCBvciB3aGVuIHNjYWxlIG9yIHBvc2l0aW9uIGFy
ZSBjaGFuZ2VkIG1hbnVhbGx5LgogICAgIHZpcnR1YWwgSW50UmVjdCB2aXNpYmxlQ29udGVudFJl
Y3QoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzID0gRXhjbHVkZVNjcm9sbGJh
cnMpIGNvbnN0IE9WRVJSSURFOworI2lmICFQTEFURk9STShJT1MpCiAgICAgdmlydHVhbCB2b2lk
IHNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50
UmVjdCkgeyBtX2ZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0OyB9
CiAgICAgSW50UmVjdCBmaXhlZFZpc2libGVDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Zml4ZWRWaXNpYmxlQ29udGVudFJlY3Q7IH0KKyNlbmRpZgogICAgIEludFNpemUgdmlzaWJsZVNp
emUoKSBjb25zdCB7IHJldHVybiB2aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCk7IH0KKyNpZiBQ
TEFURk9STShJT1MpCisgICAgLy8gVGhpcyBpcyB0aGUgYXJlYSB0aGF0IGlzIG5vdCBjb3ZlcmVk
IGJ5IFVJIGVsZW1lbnRzLgorICAgIEludFJlY3QgYWN0dWFsVmlzaWJsZUNvbnRlbnRSZWN0KCkg
Y29uc3Q7CisgICAgLy8gVGhpcyBpcyB0aGUgYXJlYSB0aGF0IGlzIHBhcnRpYWxseSBvciBmdWxs
eSBleHBvc2VkLCBhbmQgbWF5IGV4dGVuZCB1bmRlciBvdmVybGFwcGluZyBVSSBlbGVtZW50cy4K
KyAgICBJbnRSZWN0IHZpc2libGVFeHRlbnRDb250ZW50UmVjdCgpIGNvbnN0OworCisgICAgdm9p
ZCBzZXRBY3R1YWxTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOworICAgIFRpbGVDYWNo
ZSogdGlsZUNhY2hlKCk7CisjZW5kaWYKICAgICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiB2aXNpYmxlQ29udGVudFJlY3QoKS53aWR0aCgpOyB9CiAg
ICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHZp
c2libGVDb250ZW50UmVjdCgpLmhlaWdodCgpOyB9CiAKQEAgLTE4MSw2ICsyMTEsMTEgQEAgcHVi
bGljOgogICAgIGludCBzY3JvbGxYKCkgY29uc3QgeyByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS54
KCk7IH0KICAgICBpbnQgc2Nyb2xsWSgpIGNvbnN0IHsgcmV0dXJuIHNjcm9sbFBvc2l0aW9uKCku
eSgpOyB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgaW50IGFjdHVhbFNjcm9sbFgoKSBjb25z
dCB7IHJldHVybiBhY3R1YWxWaXNpYmxlQ29udGVudFJlY3QoKS54KCk7IH0KKyAgICBpbnQgYWN0
dWFsU2Nyb2xsWSgpIGNvbnN0IHsgcmV0dXJuIGFjdHVhbFZpc2libGVDb250ZW50UmVjdCgpLnko
KTsgfQorI2VuZGlmCisKICAgICAvLyBzY3JvbGxPZmZzZXQoKSBhbmNob3JzIGl0cyAoMCwwKSBw
b2ludCBhdCB0aGUgdG9wIGVuZCBvZiB0aGUgaGVhZGVyIGlmIHRoaXMgU2Nyb2xsYWJsZUFyZWEK
ICAgICAvLyBoYXMgYSBoZWFkZXIsIHNvIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSB0b3RhbENvbnRl
bnRzU2l6ZSgpLiBzY3JvbGxPZmZzZXRSZWxhdGl2ZVRvRG9jdW1lbnQoKQogICAgIC8vIGFuY2hv
cnMgKDAsMCkgYXQgdGhlIHRvcCBvZiB0aGUgRG9jdW1lbnQsIHdoaWNoIHdpbGwgYmUgYmVuZWF0
aCBhbnkgaGVhZGVycywgc28gaXQgaXMgcmVsYXRpdmUKQEAgLTM1NCw3ICszODksOSBAQCBwcml2
YXRlOgogICAgIC8vIHdoZXRoZXIgaXQgaXMgc2FmZSB0byBibGl0IG9uIHNjcm9sbC4KICAgICBi
b29sIG1fY2FuQmxpdE9uU2Nyb2xsOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBJbnRSZWN0
IG1fZml4ZWRWaXNpYmxlQ29udGVudFJlY3Q7CisjZW5kaWYKICAgICBJbnRTaXplIG1fc2Nyb2xs
T2Zmc2V0OyAvLyBGSVhNRTogV291bGQgcmF0aGVyIHN0b3JlIHRoaXMgYXMgYSBwb3NpdGlvbiwg
YnV0IHdlIHdpbGwgd2FpdCB0byBtYWtlIHRoaXMgY2hhbmdlIHVudGlsIG1vcmUgY29kZSBpcyBz
aGFyZWQuCiAgICAgSW50UG9pbnQgbV9jYWNoZWRTY3JvbGxQb3NpdGlvbjsKICAgICBJbnRTaXpl
IG1fZml4ZWRMYXlvdXRTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuY3BwCmluZGV4IGMxOGRlYTdlZGM0OTFhZDVmZDUyYjY2Y2QyM2Y5Y2JmNTgyZDRlOTkuLjJi
Yzg0YzVjMWIyOTQzYTMyMWI0MDhjNzg1M2UwYjk5NTJkMzZmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTE3Niw2ICsxNzYsMTMgQEAgYm9vbCBT
Y3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
IHdoZWVsRXZlbnQpCiAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCktPmhhbmRsZVdoZWVsRXZl
bnQod2hlZWxFdmVudCk7CiB9CiAKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorYm9vbCBTY3Jv
bGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRv
dWNoRXZlbnQpCit7CisgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCktPmhhbmRsZVRvdWNoRXZl
bnQodG91Y2hFdmVudCk7Cit9CisjZW5kaWYKKwogLy8gTk9URTogT25seSBjYWxsZWQgZnJvbSBJ
bnRlcm5hbHMgZm9yIHRlc3RpbmcuCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPZmZz
ZXRGcm9tSW50ZXJuYWxzKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7CkBAIC0zODksNiArMzk2
LDMxIEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNlcnZpY2VTY3JvbGxBbmltYXRpb25zKCkKICAg
ICAgICAgc2Nyb2xsQW5pbWF0b3ItPnNlcnZpY2VTY3JvbGxBbmltYXRpb25zKCk7CiB9CiAKKyNp
ZiBQTEFURk9STShJT1MpCitib29sIFNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZEluQm90aERpcmVj
dGlvbnMoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlz
UGlubmVkSG9yaXpvbnRhbGx5SW5EaXJlY3Rpb24oc2Nyb2xsRGVsdGEud2lkdGgoKSkgJiYgaXNQ
aW5uZWRWZXJ0aWNhbGx5SW5EaXJlY3Rpb24oc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpOworfQorCiti
b29sIFNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZEhvcml6b250YWxseUluRGlyZWN0aW9uKGludCBo
b3Jpem9udGFsU2Nyb2xsRGVsdGEpIGNvbnN0Cit7CisgICAgaWYgKGhvcml6b250YWxTY3JvbGxE
ZWx0YSA8IDAgJiYgaXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01pbmltdW1Qb3NpdGlvbigp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbERlbHRhID4g
MCAmJiBpc0hvcml6b250YWxTY3JvbGxlclBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxhYmxl
QXJlYTo6aXNQaW5uZWRWZXJ0aWNhbGx5SW5EaXJlY3Rpb24oaW50IHZlcnRpY2FsU2Nyb2xsRGVs
dGEpIGNvbnN0Cit7CisgICAgaWYgKHZlcnRpY2FsU2Nyb2xsRGVsdGEgPCAwICYmIGlzVmVydGlj
YWxTY3JvbGxlclBpbm5lZFRvTWluaW11bVBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGlmICh2ZXJ0aWNhbFNjcm9sbERlbHRhID4gMCAmJiBpc1ZlcnRpY2FsU2Nyb2xsZXJQ
aW5uZWRUb01heGltdW1Qb3NpdGlvbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiBJbnRQb2ludCBTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewogICAgIGludCB4ID0gaG9yaXpvbnRh
bFNjcm9sbGJhcigpID8gaG9yaXpvbnRhbFNjcm9sbGJhcigpLT52YWx1ZSgpIDogMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCmluZGV4IGUzMzczZTRjOTFjOWUyNWVl
MDMyNTdiNzRmNjhlZDRjY2JmODYzMjYuLmYxNzQ3MWQ0ZDdkMThlYWI0OWIyY2Q0NWE3YWM1N2Zj
NWYxYjVjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaApAQCAt
MzMsNiArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CiBj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBQ
bGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBTY3JvbGxBbmltYXRvcjsKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCkBAIC01Nyw2ICs1OCwxOSBAQCBwdWJsaWM6CiAKICAgICBib29s
IGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKKyNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorICAgIHZpcnR1YWwgYm9vbCBpc1RvdWNoU2Nyb2xsYWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZVRvdWNoRXZlbnQo
Y29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50Jik7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykK
KyAgICB2aXJ0dWFsIGJvb2wgaXNPdmVyZmxvd1Njcm9sbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGRpZEVuZFNjcm9sbCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVTY3JvbGwo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNVc2VyU2Nyb2xsKGJvb2wpIHsgfQorI2VuZGlm
CisKICAgICAvLyBGdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIGlmIHlvdSBjYW4gc2Nyb2xsIHBh
c3QgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuCiAgICAgYm9vbCBjb25zdHJhaW5zU2Nyb2xsaW5n
VG9Db250ZW50RWRnZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RyYWluc1Njcm9sbGluZ1RvQ29u
dGVudEVkZ2U7IH0KICAgICB2b2lkIHNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdl
KGJvb2wgY29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UpIHsgbV9jb25zdHJhaW5zU2Ny
b2xsaW5nVG9Db250ZW50RWRnZSA9IGNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlOyB9
CkBAIC0xODIsNiArMTk2LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVB
bmltYXRpb24oKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgc2VydmljZVNjcm9sbEFuaW1h
dGlvbnMoKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIGlzSG9yaXpvbnRhbFNjcm9s
bGVyUGlubmVkVG9NaW5pbXVtUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiAhaG9yaXpvbnRhbFNj
cm9sbGJhcigpIHx8IHNjcm9sbFBvc2l0aW9uKGhvcml6b250YWxTY3JvbGxiYXIoKSkgPD0gbWlu
aW11bVNjcm9sbFBvc2l0aW9uKCkueCgpOyB9CisgICAgYm9vbCBpc0hvcml6b250YWxTY3JvbGxl
clBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gIWhvcml6b250YWxTY3Jv
bGxiYXIoKSB8fCBzY3JvbGxQb3NpdGlvbihob3Jpem9udGFsU2Nyb2xsYmFyKCkpID49IG1heGlt
dW1TY3JvbGxQb3NpdGlvbigpLngoKTsgfQorICAgIGJvb2wgaXNWZXJ0aWNhbFNjcm9sbGVyUGlu
bmVkVG9NaW5pbXVtUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiAhdmVydGljYWxTY3JvbGxiYXIo
KSB8fCBzY3JvbGxQb3NpdGlvbih2ZXJ0aWNhbFNjcm9sbGJhcigpKSA8PSBtaW5pbXVtU2Nyb2xs
UG9zaXRpb24oKS55KCk7IH0KKyAgICBib29sIGlzVmVydGljYWxTY3JvbGxlclBpbm5lZFRvTWF4
aW11bVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gIXZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgc2Ny
b2xsUG9zaXRpb24odmVydGljYWxTY3JvbGxiYXIoKSkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkueSgpOyB9IAorCisgICAgYm9vbCBpc1Bpbm5lZEluQm90aERpcmVjdGlvbnMoY29uc3QgSW50
U2l6ZSYpIGNvbnN0OyAKKyAgICBib29sIGlzUGlubmVkSG9yaXpvbnRhbGx5SW5EaXJlY3Rpb24o
aW50IGhvcml6b250YWxTY3JvbGxEZWx0YSkgY29uc3Q7IAorICAgIGJvb2wgaXNQaW5uZWRWZXJ0
aWNhbGx5SW5EaXJlY3Rpb24oaW50IHZlcnRpY2FsU2Nyb2xsRGVsdGEpIGNvbnN0OworI2VuZGlm
CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBUaWxlZEJh
Y2tpbmcqIHRpbGVkQmFja2luZygpIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKaW5kZXggYjk4Y2NhMzExZTQ1NTM0ZjVhNGEyY2Q5Njlk
ZGNjMDRjODZjYTc2OS4uNDFmN2JhNDhlYzhlY2MyYjMzNjlhMWQ2ZGVkMTdiMjU0NzliZTQzZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCkBAIC0zMzQsNiArMzM0LDcgQEAg
dm9pZCBTY3JvbGxiYXI6OnNldFByZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQgcGFydCkKICAgICAg
ICAgdGhlbWUoKS0+aW52YWxpZGF0ZVBhcnQodGhpcywgbV9ob3ZlcmVkUGFydCk7CiB9CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAgICAgaWYgKG1fcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0
KSB7CkBAIC0zNzIsNiArMzczLDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZgog
CiB2b2lkIFNjcm9sbGJhcjo6bW91c2VFbnRlcmVkKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmgKaW5kZXggZTViMzI5ZGFiYjEyNTYyZDY5ZGUyZDYyNWJiZjQ4NDk5YjZkMmFmYy4u
Y2QxZTg5NzAzOGVlZWFiNWQxNzMzYTI1ZjU3NGZmYTU3MDE3MjhiOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyLmgKQEAgLTEyNSw3ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgLy8gVGhl
c2UgbWV0aG9kcyBhcmUgdXNlZCBmb3IgcGxhdGZvcm0gc2Nyb2xsYmFycyB0byBnaXZlIDpob3Zl
ciBmZWVkYmFjay4gIFRoZXkgd2lsbCBub3QgZ2V0IGNhbGxlZAogICAgIC8vIHdoZW4gdGhlIG1v
dXNlIHdlbnQgZG93biBpbiBhIHNjcm9sbGJhciwgc2luY2UgaXQgaXMgYXNzdW1lZCB0aGUgc2Ny
b2xsYmFyIHdpbGwgc3RhcnQKICAgICAvLyBncmFiYmluZyBhbGwgZXZlbnRzIGluIHRoYXQgY2Fz
ZSBhbnl3YXkuCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBib29sIG1vdXNlTW92ZWQoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisjZW5kaWYKICAgICB2b2lkIG1vdXNlRW50ZXJlZCgpOwog
ICAgIGJvb2wgbW91c2VFeGl0ZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5jcHAKaW5kZXggZGI4MjNjZDdmYjYyNGZmMDQwM2VmYWJmN2M2MmRlMmYwZmE3ZGRlNS4u
MWRhZDc4NzIzMmIzMDYxZDE5NjdjOWRlYjkzYjg2NjE3ODg1YzdiYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC02Niw2ICs2Niw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBmcmVlU2VnbWVudChjaGFyKiBwKQogCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZl
cigpCiAgICAgOiBtX3NpemUoMCkKKyAgICAsIG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGZh
bHNlKQogI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQogICAgICwgbV9pc01lbW9yeU1hcHBl
ZChmYWxzZSkKICAgICAsIG1fZGlza0ltYWdlQ2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxp
ZERpc2tDYWNoZUlkKQpAQCAtNzgsNiArNzksNyBAQCBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZl
cigpCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcih1bnNpZ25lZCBzaXplKQogICAgIDogbV9z
aXplKHNpemUpCiAgICAgLCBtX2J1ZmZlcihzaXplKQorICAgICwgbV9zaG91bGRVc2VQdXJnZWFi
bGVNZW1vcnkoZmFsc2UpCiAjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCiAgICAgLCBtX2lz
TWVtb3J5TWFwcGVkKGZhbHNlKQogICAgICwgbV9kaXNrSW1hZ2VDYWNoZUlkKERpc2tJbWFnZUNh
Y2hlOjppbnZhbGlkRGlza0NhY2hlSWQpCkBAIC04OSw2ICs5MSw3IEBAIFNoYXJlZEJ1ZmZlcjo6
U2hhcmVkQnVmZmVyKHVuc2lnbmVkIHNpemUpCiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVy
KGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUpCiAgICAgOiBtX3NpemUoMCkKKyAgICAs
IG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGZhbHNlKQogI2lmIEVOQUJMRShESVNLX0lNQUdF
X0NBQ0hFKQogICAgICwgbV9pc01lbW9yeU1hcHBlZChmYWxzZSkKICAgICAsIG1fZGlza0ltYWdl
Q2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlkKQpAQCAtMTAxLDYgKzEw
NCw3IEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2ln
bmVkIHNpemUpCiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVuc2lnbmVkIGNo
YXIqIGRhdGEsIHVuc2lnbmVkIHNpemUpCiAgICAgOiBtX3NpemUoMCkKKyAgICAsIG1fc2hvdWxk
VXNlUHVyZ2VhYmxlTWVtb3J5KGZhbHNlKQogI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQog
ICAgICwgbV9pc01lbW9yeU1hcHBlZChmYWxzZSkKICAgICAsIG1fZGlza0ltYWdlQ2FjaGVJZChE
aXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlkKQpAQCAtMjEwLDYgKzIxNCwxMiBAQCB2
b2lkIFNoYXJlZEJ1ZmZlcjo6c2V0TWVtb3J5TWFwcGVkTm90aWZpY2F0aW9uQ2FsbGJhY2soTWVt
b3J5TWFwcGVkTm90aWZ5Q2FsbGJhYwogfQogI2VuZGlmCiAKKy8vIFRyeSB0byBjcmVhdGUgYSBQ
dXJnZWFibGVCdWZmZXIuIFdlIGNhbiBmYWlsIHRvIGNyZWF0ZSBvbmUgZm9yIGFueSBvZiB0aGUK
Ky8vIGZvbGxvd2luZyByZWFzb25zOgorLy8gICAtIHNob3VsZFVzZVB1cmdlYWJsZU1lbW9yeSBp
cyBzZXQgdG8gZmFsc2UuCisvLyAgIC0gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyBsZXNzIHRo
YW4gdGhlIG1pbmltdW0gc2l6ZSByZXF1aXJlZCBieQorLy8gICAgIFB1cmdlYWJsZUJ1ZmZlciAo
Y3VycmVudGx5IDE2aykuCisvLyAgIC0gUHVyZ2VhYmxlQnVmZmVyOjpjcmVhdGVVbmluaXRpYWxp
emVkKCkgY2FsbCBmYWlscy4KIHZvaWQgU2hhcmVkQnVmZmVyOjpjcmVhdGVQdXJnZWFibGVCdWZm
ZXIoKSBjb25zdAogewogICAgIGlmIChtX3B1cmdlYWJsZUJ1ZmZlcikKQEAgLTIyNiw2ICsyMzYs
OSBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlUHVyZ2VhYmxlQnVmZmVyKCkgY29uc3QKICAg
ICBpZiAoIWhhc09uZVJlZigpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoIW1fc2hvdWxk
VXNlUHVyZ2VhYmxlTWVtb3J5KQorICAgICAgICByZXR1cm47CisKICAgICBjaGFyKiBkZXN0aW5h
dGlvbiA9IDA7CiAgICAgbV9wdXJnZWFibGVCdWZmZXIgPSBQdXJnZWFibGVCdWZmZXI6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQobV9zaXplLCBkZXN0aW5hdGlvbik7CiAgICAgaWYgKCFtX3B1cmdlYWJs
ZUJ1ZmZlcikKQEAgLTI1Myw3ICsyNjYsOSBAQCBjb25zdCBjaGFyKiBTaGFyZWRCdWZmZXI6OmRh
dGEoKSBjb25zdAogICAgIGlmIChjb25zdCBjaGFyKiBidWZmZXIgPSBzaW5nbGVEYXRhQXJyYXlC
dWZmZXIoKSkKICAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKICNlbmRpZgotICAgIAorCisgICAgY3Jl
YXRlUHVyZ2VhYmxlQnVmZmVyKCk7CisKICAgICBpZiAobV9wdXJnZWFibGVCdWZmZXIpCiAgICAg
ICAgIHJldHVybiBtX3B1cmdlYWJsZUJ1ZmZlci0+ZGF0YSgpOwogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCA4MjcxOGIzNWMwZDAzN2I5ZmI1ZWI1NmE4OWRk
MTUzNWI4NzQ5N2EyLi4xMDZjODMwZDY1MWY5ZWQ3ZTU2NmMwMTg4ZDJkNzBjNTMyYzY4MDI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtMTM4LDYgKzEzOCw4IEBA
IHB1YmxpYzoKICAgICAvLyAgICAgIH0KICAgICB1bnNpZ25lZCBnZXRTb21lRGF0YShjb25zdCBj
aGFyKiYgZGF0YSwgdW5zaWduZWQgcG9zaXRpb24gPSAwKSBjb25zdDsKIAorICAgIHZvaWQgc2hv
dWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGJvb2wgdXNlKSB7IG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVt
b3J5ID0gdXNlOyB9CisKICNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkKICAgICBlbnVtIE1l
bW9yeU1hcHBpbmdTdGF0ZSB7IFF1ZXVlZEZvck1hcHBpbmcsIFByZXZpb3VzbHlRdWV1ZWRGb3JN
YXBwaW5nLCBTdWNjZXNzQWxyZWFkeU1hcHBlZCwgRmFpbHVyZUNhY2hlRnVsbCB9OwogCkBAIC0x
ODcsNiArMTg5LDcgQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fc2l6ZTsKICAgICBtdXRh
YmxlIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKKyAgICBib29sIG1fc2hvdWxkVXNlUHVyZ2VhYmxl
TWVtb3J5OwogICAgIG11dGFibGUgT3duUHRyPFB1cmdlYWJsZUJ1ZmZlcj4gbV9wdXJnZWFibGVC
dWZmZXI7CiAjaWYgVVNFKE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKQogICAgIG11dGFi
bGUgVmVjdG9yPFJldGFpblB0cjxDRkRhdGFSZWY+PiBtX2RhdGFBcnJheTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1ZGRlblRlcm1pbmF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TdWRkZW5UZXJtaW5hdGlvbi5oCmluZGV4IDcyNTIxNDkwNjJmNDMzYWIz
M2M2ODgwYzk1NTRiOWIzYmRmYWRjOTIuLjgwOTY3YzZjMDhjOWZjNzJhMTEyZjFkMzBlYmNmMmYw
ODEyNWQzZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1ZGRlblRlcm1p
bmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VkZGVuVGVybWluYXRpb24u
aApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdm9pZCBkaXNhYmxl
U3VkZGVuVGVybWluYXRpb24oKTsKICAgICB2b2lkIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7
CiAKLSNpZiAhUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKElPUykgfHwgIVBMQVRGT1JNKE1B
QykKICAgICBpbmxpbmUgdm9pZCBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKSB7IH0KICAgICBp
bmxpbmUgdm9pZCBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpIHsgfQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdXBwbGVtZW50YWJsZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU3VwcGxlbWVudGFibGUuaAppbmRleCAyNzdhYWVmODBlZjZjYzdiYTNi
ZTJhOTg5YzJmNWZmM2RlZDJjNzUxLi5jMjAyZjJjNDIxZWUwODZiZDFjZmU0NmMwNzQzYWNlNjdm
Njc3NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdXBwbGVtZW50YWJs
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmgKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCkBAIC05OSwyMCArMTAwLDIw
IEBAIGNsYXNzIFN1cHBsZW1lbnRhYmxlIHsKIHB1YmxpYzoKICAgICB2b2lkIHByb3ZpZGVTdXBw
bGVtZW50KGNvbnN0IGNoYXIqIGtleSwgUGFzc093blB0cjxTdXBwbGVtZW50PFQ+PiBzdXBwbGVt
ZW50KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdGhyZWFkSWQgPT0gY3VycmVudFRocmVhZCgp
KTsKKyAgICAgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3Ro
cmVhZElkKSk7CiAgICAgICAgIEFTU0VSVCghbV9zdXBwbGVtZW50cy5nZXQoa2V5KSk7CiAgICAg
ICAgIG1fc3VwcGxlbWVudHMuc2V0KGtleSwgc3VwcGxlbWVudCk7CiAgICAgfQogCiAgICAgdm9p
ZCByZW1vdmVTdXBwbGVtZW50KGNvbnN0IGNoYXIqIGtleSkKICAgICB7Ci0gICAgICAgIEFTU0VS
VChtX3RocmVhZElkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAgIEFTU0VSVChjYW5BY2Nl
c3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90aHJlYWRJZCkpOwogICAgICAgICBtX3N1cHBs
ZW1lbnRzLnJlbW92ZShrZXkpOwogICAgIH0KIAogICAgIFN1cHBsZW1lbnQ8VD4qIHJlcXVpcmVT
dXBwbGVtZW50KGNvbnN0IGNoYXIqIGtleSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3RocmVh
ZElkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQobV90aHJlYWRJZCkpOwogICAgICAgICByZXR1cm4gbV9zdXBwbGVt
ZW50cy5nZXQoa2V5KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1N5c3RlbU1lbW9yeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3lzdGVtTWVtb3J5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTI3NjNjZDNhNmNkNzBkNjFiODc2YThhMzZkYjBmYTA0ZDVjZWYwYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N5c3RlbU1lbW9yeS5o
CkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3lzdGVtTWVtb3J5X2gKKyNkZWZpbmUgU3lzdGVt
TWVtb3J5X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworaW50IHN5c3RlbU1lbW9yeUxldmVsKCk7
IC8vIEluIFswLCAxMDBdCitzaXplX3Qgc3lzdGVtVG90YWxNZW1vcnkoKTsKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRDaGVjay5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkQ2hlY2suaAppbmRleCAwN2ViNDYzYjA1YmUyN2Rl
MTM1MmQwNjZlZTcyZGU3MTdiYmMzNzU5Li5mYmEzYWEyNmIzOTI1ZjYyMDAxNjFhZWU1ZjE0MDk4
NDkyZmFkNmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRDaGVj
ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZENoZWNrLmgKQEAgLTI2LDYg
KzI2LDcgQEAKICNpZm5kZWYgVGhyZWFkQ2hlY2tfaAogI2RlZmluZSBUaHJlYWRDaGVja19oCiAK
KyNpZiAhUExBVEZPUk0oSU9TKQogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGVudW0gVGhyZWFk
VmlvbGF0aW9uQmVoYXZpb3IgewogICAgICAgICBOb1RocmVhZENoZWNrLApAQCAtNDYsNSArNDcs
OSBAQCBleHRlcm4gIkMiIHZvaWQgV2ViQ29yZVJlcG9ydFRocmVhZFZpb2xhdGlvbihjb25zdCBj
aGFyKiBmdW5jdGlvbiwgV2ViQ29yZTo6VGhyZQogCiAjZGVmaW5lIFdlYkNvcmVUaHJlYWRWaW9s
YXRpb25DaGVja1JvdW5kT25lKCkgOjpXZWJDb3JlOjpyZXBvcnRUaHJlYWRWaW9sYXRpb24oV1RG
X1BSRVRUWV9GVU5DVElPTiwgV2ViQ29yZTo6VGhyZWFkVmlvbGF0aW9uUm91bmRPbmUpCiAjZGVm
aW5lIFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kVHdvKCkgOjpXZWJDb3JlOjpyZXBv
cnRUaHJlYWRWaW9sYXRpb24oV1RGX1BSRVRUWV9GVU5DVElPTiwgV2ViQ29yZTo6VGhyZWFkVmlv
bGF0aW9uUm91bmRUd28pCisjZWxzZQorI2RlZmluZSBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hl
Y2tSb3VuZE9uZSgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgV2ViQ29yZVRocmVhZFZpb2xh
dGlvbkNoZWNrUm91bmRUd28oKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVh
ZEdsb2JhbERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0
YS5jcHAKaW5kZXggMGQ4MzdiZjU2ZDc5YjkyYzQwOTE0NWQ3Nzc2NzdlYTdkMTJkYzIwNC4uY2Vm
YjE5ZGRjNzBlNWRhOTU1MTEyYTg5NmVjNjdjMTlkNTAyZTI0MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAKQEAgLTUwLDYgKzUwLDkgQEAgdXNpbmcg
bmFtZXNwYWNlIFdURjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVGhyZWFkU3BlY2lmaWM8VGhy
ZWFkR2xvYmFsRGF0YT4qIFRocmVhZEdsb2JhbERhdGE6OnN0YXRpY0RhdGE7CisjaWYgVVNFKFdF
Ql9USFJFQUQpCitUaHJlYWRHbG9iYWxEYXRhKiBUaHJlYWRHbG9iYWxEYXRhOjpzaGFyZWRNYWlu
VGhyZWFkU3RhdGljRGF0YTsKKyNlbmRpZgogCiBUaHJlYWRHbG9iYWxEYXRhOjpUaHJlYWRHbG9i
YWxEYXRhKCkKICAgICA6IG1fY2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycyhhZG9wdFB0
cihuZXcgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycykpCkBAIC02MSw3ICs2NCw3IEBA
IFRocmVhZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERhdGEoKQogI2lmIFVTRShJQ1VfVU5JQ09E
RSkKICAgICAsIG1fY2FjaGVkQ29udmVydGVySUNVKGFkb3B0UHRyKG5ldyBJQ1VDb252ZXJ0ZXJX
cmFwcGVyKSkKICNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYm
ICFQTEFURk9STShJT1MpCiAgICAgLCBtX2NhY2hlZENvbnZlcnRlclRFQyhhZG9wdFB0cihuZXcg
VEVDQ29udmVydGVyV3JhcHBlcikpCiAjZW5kaWYKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAt
ODIsNyArODUsNyBAQCBUaHJlYWRHbG9iYWxEYXRhOjp+VGhyZWFkR2xvYmFsRGF0YSgpCiAKIHZv
aWQgVGhyZWFkR2xvYmFsRGF0YTo6ZGVzdHJveSgpCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lm
IFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICBtX2NhY2hlZENvbnZlcnRlclRF
Qy5jbGVhcigpOwogI2VuZGlmCiAKQEAgLTk4LDExICsxMDEsMzUgQEAgdm9pZCBUaHJlYWRHbG9i
YWxEYXRhOjpkZXN0cm95KCkKICAgICBtX3RocmVhZFRpbWVycy5jbGVhcigpOwogfQogCisjaWYg
RU5BQkxFKFdPUktFUlMpICYmIFVTRShXRUJfVEhSRUFEKQordm9pZCBUaHJlYWRHbG9iYWxEYXRh
OjpzZXRXZWJDb3JlVGhyZWFkRGF0YSgpCit7CisgICAgQVNTRVJUKGlzV2ViVGhyZWFkKCkpOwor
ICAgIEFTU0VSVCgmdGhyZWFkR2xvYmFsRGF0YSgpICE9IFRocmVhZEdsb2JhbERhdGE6OnNoYXJl
ZE1haW5UaHJlYWRTdGF0aWNEYXRhKTsKKworICAgIC8vIFNldCBXZWJUaHJlYWQncyBUaHJlYWRH
bG9iYWxEYXRhIG9iamVjdCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgbWFpbiBVSSB0aHJlYWQuCisg
ICAgVGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0YS0+cmVwbGFjZShUaHJlYWRHbG9iYWxEYXRh
OjpzaGFyZWRNYWluVGhyZWFkU3RhdGljRGF0YSk7CisKKyAgICBBU1NFUlQoJnRocmVhZEdsb2Jh
bERhdGEoKSA9PSBUaHJlYWRHbG9iYWxEYXRhOjpzaGFyZWRNYWluVGhyZWFkU3RhdGljRGF0YSk7
Cit9CisjZW5kaWYKKwogVGhyZWFkR2xvYmFsRGF0YSYgdGhyZWFkR2xvYmFsRGF0YSgpIAogewor
I2lmIFVTRShXRUJfVEhSRUFEKQorICAgIGlmIChVTkxJS0VMWSghVGhyZWFkR2xvYmFsRGF0YTo6
c3RhdGljRGF0YSkpIHsKKyAgICAgICAgVGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0YSA9IG5l
dyBUaHJlYWRTcGVjaWZpYzxUaHJlYWRHbG9iYWxEYXRhPjsKKyAgICAgICAgLy8gV2ViVGhyZWFk
IGFuZCBtYWluIFVJIHRocmVhZCBuZWVkIHRvIHNoYXJlIHRoZSBzYW1lIG9iamVjdC4gU2F2ZSBp
dCBpbiBhIHN0YXRpYworICAgICAgICAvLyBoZXJlLCB0aGUgV2ViVGhyZWFkIHdpbGwgcGljayBp
dCB1cCBpbiBzZXRXZWJDb3JlVGhyZWFkRGF0YSgpLgorICAgICAgICBpZiAocHRocmVhZF9tYWlu
X25wKCkpCisgICAgICAgICAgICBUaHJlYWRHbG9iYWxEYXRhOjpzaGFyZWRNYWluVGhyZWFkU3Rh
dGljRGF0YSA9ICpUaHJlYWRHbG9iYWxEYXRhOjpzdGF0aWNEYXRhOworICAgIH0KKyAgICByZXR1
cm4gKipUaHJlYWRHbG9iYWxEYXRhOjpzdGF0aWNEYXRhOworI2Vsc2UKICAgICBpZiAoIVRocmVh
ZEdsb2JhbERhdGE6OnN0YXRpY0RhdGEpCiAgICAgICAgIFRocmVhZEdsb2JhbERhdGE6OnN0YXRp
Y0RhdGEgPSBuZXcgVGhyZWFkU3BlY2lmaWM8VGhyZWFkR2xvYmFsRGF0YT47CiAgICAgcmV0dXJu
ICoqVGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0YTsKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRH
bG9iYWxEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgK
aW5kZXggNzZjOWZhZmIxZTliMzI3Yjc4Y2E4NjkxZWU0MzgwNjQ2NmFhODk0Ni4uZmZiMDE4Yzdh
MjBmZTdlYTMwNzhlODUxN2UxZjhmMzE1MzI4ODY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RocmVhZEdsb2JhbERhdGEuaApAQCAtNjIsMTAgKzYyLDE0IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgSUNVQ29udmVydGVyV3JhcHBlciYgY2FjaGVkQ29udmVydGVySUNVKCkg
eyByZXR1cm4gKm1fY2FjaGVkQ29udmVydGVySUNVOyB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JN
KE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgICAgIFRFQ0Nv
bnZlcnRlcldyYXBwZXImIGNhY2hlZENvbnZlcnRlclRFQygpIHsgcmV0dXJuICptX2NhY2hlZENv
bnZlcnRlclRFQzsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV09SS0VSUykgJiYgVVNFKFdFQl9U
SFJFQUQpCisgICAgICAgIHZvaWQgc2V0V2ViQ29yZVRocmVhZERhdGEoKTsKKyNlbmRpZgorCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICAgICAgVGhyZWFkTG9jYWxJbnNwZWN0b3JDb3VudGVy
cyYgaW5zcGVjdG9yQ291bnRlcnMoKSB7IHJldHVybiAqbV9pbnNwZWN0b3JDb3VudGVyczsgfQog
I2VuZGlmCkBAIC04Myw3ICs4Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgT3du
UHRyPElDVUNvbnZlcnRlcldyYXBwZXI+IG1fY2FjaGVkQ29udmVydGVySUNVOwogI2VuZGlmCiAK
LSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQog
ICAgICAgICBPd25QdHI8VEVDQ29udmVydGVyV3JhcHBlcj4gbV9jYWNoZWRDb252ZXJ0ZXJURUM7
CiAjZW5kaWYKIApAQCAtOTIsMTAgKzk2LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRp
ZgogCiAgICAgICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxUaHJlYWRHbG9iYWxEYXRhPiogc3Rh
dGljRGF0YTsKKyNpZiBVU0UoV0VCX1RIUkVBRCkKKyAgICAgICAgc3RhdGljIFRocmVhZEdsb2Jh
bERhdGEqIHNoYXJlZE1haW5UaHJlYWRTdGF0aWNEYXRhOworI2VuZGlmCiAgICAgICAgIGZyaWVu
ZCBUaHJlYWRHbG9iYWxEYXRhJiB0aHJlYWRHbG9iYWxEYXRhKCk7CiAgICAgfTsKIAorI2lmIFVT
RShXRUJfVEhSRUFEKQorVGhyZWFkR2xvYmFsRGF0YSYgdGhyZWFkR2xvYmFsRGF0YSgpOworI2Vs
c2UKIFRocmVhZEdsb2JhbERhdGEmIHRocmVhZEdsb2JhbERhdGEoKSBQVVJFX0ZVTkNUSU9OOwor
I2VuZGlmCiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFRpbWVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9UaHJlYWRUaW1lcnMuY3BwCmluZGV4IDg0NjQ0MGZmMjVkY2IyZTM0NzlmNTRlZTIzYjYw
MzE2OGM1NmE0ZmMuLjc4OTM3OGNlM2ZlYjRlM2IwY2NmNDBiNzU3YmY1M2YxOGNjNTM5MzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFRpbWVycy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkVGltZXJzLmNwcApAQCAtMzMsNiArMzMsMTAg
QEAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZpcmUgdGltZXJzIGZvciB0aGlzIGxl
bmd0aCBvZiB0aW1lLCBhbmQgdGhlbiBxdWl0IHRvIGxldCB0aGUgcnVuIGxvb3AgcHJvY2VzcyB1
c2VyIGlucHV0IGV2ZW50cy4KQEAgLTU0LDcgKzU4LDcgQEAgVGhyZWFkVGltZXJzOjpUaHJlYWRU
aW1lcnMoKQogICAgICwgbV9maXJpbmdUaW1lcnMoZmFsc2UpCiAgICAgLCBtX3BlbmRpbmdTaGFy
ZWRUaW1lckZpcmVUaW1lKDApCiB7Ci0gICAgaWYgKGlzTWFpblRocmVhZCgpKQorICAgIGlmIChp
c1VJVGhyZWFkKCkpCiAgICAgICAgIHNldFNoYXJlZFRpbWVyKG1haW5UaHJlYWRTaGFyZWRUaW1l
cigpKTsKIH0KIApAQCAtMTA1LDYgKzEwOSw3IEBAIHZvaWQgVGhyZWFkVGltZXJzOjpzaGFyZWRU
aW1lckZpcmVkKCkKIAogdm9pZCBUaHJlYWRUaW1lcnM6OnNoYXJlZFRpbWVyRmlyZWRJbnRlcm5h
bCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpIHx8ICFpc1dlYlRocmVhZCgpICYmICFp
c1VJVGhyZWFkKCkpOwogICAgIC8vIERvIGEgcmUtZW50cmFuY3kgY2hlY2suCiAgICAgaWYgKG1f
ZmlyaW5nVGltZXJzKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9UaW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5jcHAK
aW5kZXggMzFhNDA1ZDcwMGRlM2QxOTdlNWZkYjExNTRkYmJmZTE2OWQ2ZDhhNi4uYTg3MzczMDQz
YmU0MWU4ODEzNzEwMGVmOTQ5OGZiZGI2ZmEwOWMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGltZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RpbWVy
LmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0yMDksNyArMjEwLDcgQEAgVGltZXJCYXNlOjp+VGltZXJCYXNlKCkKIAogdm9pZCBU
aW1lckJhc2U6OnN0YXJ0KGRvdWJsZSBuZXh0RmlyZUludGVydmFsLCBkb3VibGUgcmVwZWF0SW50
ZXJ2YWwpCiB7Ci0gICAgQVNTRVJUKG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAg
QVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RocmVhZCkpOwogCiAg
ICAgbV9yZXBlYXRJbnRlcnZhbCA9IHJlcGVhdEludGVydmFsOwogICAgIHNldE5leHRGaXJlVGlt
ZShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSArIG5leHRGaXJlSW50ZXJ2YWwpOwpAQCAt
MjE3LDcgKzIxOCw3IEBAIHZvaWQgVGltZXJCYXNlOjpzdGFydChkb3VibGUgbmV4dEZpcmVJbnRl
cnZhbCwgZG91YmxlIHJlcGVhdEludGVydmFsKQogCiB2b2lkIFRpbWVyQmFzZTo6c3RvcCgpCiB7
Ci0gICAgQVNTRVJUKG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgQVNTRVJUKGNh
bkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RocmVhZCkpOwogCiAgICAgbV9yZXBl
YXRJbnRlcnZhbCA9IDA7CiAgICAgc2V0TmV4dEZpcmVUaW1lKDApOwpAQCAtMzY4LDcgKzM2OSw3
IEBAIHZvaWQgVGltZXJCYXNlOjp1cGRhdGVIZWFwSWZOZWVkZWQoZG91YmxlIG9sZFRpbWUpCiAK
IHZvaWQgVGltZXJCYXNlOjpzZXROZXh0RmlyZVRpbWUoZG91YmxlIG5ld1VuYWxpZ25lZFRpbWUp
CiB7Ci0gICAgQVNTRVJUKG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgQVNTRVJU
KGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RocmVhZCkpOwogICAgIEFTU0VS
VCghbV93YXNEZWxldGVkKTsKIAogICAgIGlmIChtX3VuYWxpZ25lZE5leHRGaXJlVGltZSAhPSBu
ZXdVbmFsaWduZWRUaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGlt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmgKaW5kZXggNjllOWVkNTI3MTcw
ZGQzNWM4M2QxNDhhZGI5MDFjZjc3MDA0YzU4YS4uMTYxNGJkMTNhY2E1ZDI3NmEyNjFhNzQwYjk4
YzQ1ZmE3ZTM1OTA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGltZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5oCkBAIC0zMCw2ICszMCwxMCBA
QAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
KyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGltZSBpbnRlcnZhbHMgYXJlIGFsbCBpbiBzZWNv
bmRzLgpAQCAtMTIwLDcgKzEyNCwxOCBAQCBwcml2YXRlOgogCiBpbmxpbmUgYm9vbCBUaW1lckJh
c2U6OmlzQWN0aXZlKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogV3JpdGUgdGhpcyBpbiB0ZXJt
cyBvZiBVU0UoV0VCX1RIUkVBRCkgaW5zdGVhZCBvZiBQTEFURk9STShJT1MpLgorI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgQVNTRVJUKG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisjZWxz
ZQorICAgIC8vIE9uIGlPUyB0aW1lcnMgYXJlIGFsd2F5cyBydW4gb24gdGhlIG1haW4gdGhyZWFk
IG9yIHRoZSBXZWIgVGhyZWFkLgorICAgIC8vIFVubGVzcyB3ZSBoYXZlIHdvcmtlcnMgZW5hYmxl
ZCBpbiB3aGljaCBjYXNlIHRpbWVycyBjYW4gcnVuIG9uIG90aGVyIHRocmVhZHMuCisjaWYgRU5B
QkxFKFdPUktFUlMpCisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpIHx8IHB0aHJlYWRf
bWFpbl9ucCgpIHx8IG1fdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisjZWxzZQorICAgIEFT
U0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSB8fCBwdGhyZWFkX21haW5fbnAoKSk7CisjZW5kaWYK
KyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAgICAgcmV0dXJuIG1fbmV4dEZpcmVUaW1lOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vVVJMLmNwcAppbmRleCA1YjdjZDNhNTVhYTYwMzE2YWQ4OWJkNmEwNGM0
ZmEwMDQzOGE2MWI2Li4zMzc4NzhlODFiNjI5NGNjOTAwZTQyZjllMDg0Y2EwYjBhYTdmMThjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1VSTC5jcHAKQEAgLTk4Niw5ICs5ODYsMjcgQEAgdm9pZCBVUkw6OnBh
cnNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksICZzdHJp
bmcpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGJvb2wgc2hvdWxkQ2Fub25pY2Fs
aXplU2NoZW1lID0gdHJ1ZTsKKwordm9pZCBlbmFibGVVUkxTY2hlbWVDYW5vbmljYWxpemF0aW9u
KGJvb2wgZW5hYmxlU2NoZW1lQ2Fub25pY2FsaXphdGlvbikKK3sKKyAgICBzaG91bGRDYW5vbmlj
YWxpemVTY2hlbWUgPSBlbmFibGVTY2hlbWVDYW5vbmljYWxpemF0aW9uOworfQorI2VuZGlmCisK
IHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+CiBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWwoY29uc3Qg
Y2hhciogYSwgY29uc3QgY2hhciAoJmIpW2xlbmd0aF0pCiB7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIGlmICghc2hvdWxkQ2Fub25pY2FsaXplU2NoZW1lKSB7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh0b0FTQ0lJTG93ZXIo
YVtpXSkgIT0gYltpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI2Miw4ICsxMjgwLDE4IEBAIHZvaWQgVVJMOjpwYXJz
ZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IFN0cmluZyogb3JpZ2luYWxTdHJpbmcpCiAKICAgICAv
LyBjb3B5IGluIHRoZSBzY2hlbWUKICAgICBjb25zdCBjaGFyICpzY2hlbWVFbmRQdHIgPSB1cmwg
KyBzY2hlbWVFbmQ7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChzaG91bGRDYW5vbmljYWxp
emVTY2hlbWUgfHwgbV9wcm90b2NvbElzSW5IVFRQRmFtaWx5KSB7CisgICAgICAgIHdoaWxlIChz
dHJQdHIgPCBzY2hlbWVFbmRQdHIpCisgICAgICAgICAgICAqcCsrID0gdG9BU0NJSUxvd2VyKCpz
dHJQdHIrKyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2hpbGUgKHN0clB0ciA8IHNjaGVtZUVu
ZFB0cikKKyAgICAgICAgICAgICpwKysgPSAqc3RyUHRyKys7CisgICAgfQorI2Vsc2UKICAgICB3
aGlsZSAoc3RyUHRyIDwgc2NoZW1lRW5kUHRyKQogICAgICAgICAqcCsrID0gdG9BU0NJSUxvd2Vy
KCpzdHJQdHIrKyk7CisjZW5kaWYKICAgICBtX3NjaGVtZUVuZCA9IHAgLSBidWZmZXIuZGF0YSgp
OwogCiAgICAgYm9vbCBob3N0SXNMb2NhbEhvc3QgPSBwb3J0RW5kIC0gdXNlclN0YXJ0ID09IDkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVVJMLmgKaW5kZXggYzEzMjllYjRjMjMyZjRhYjEwOGJiNzdkZjk4ZGIwYzI2
NWIwYTQxNS4uNzEzYmRjZTkxODczZjBiNWJhZDAyNDBiZDIyYTc1M2I2OTVlMjQyNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVVJMLmgKQEAgLTMzMiw2ICszMzIsMTAgQEAgaW5saW5lIHVuc2lnbmVkIFVSTDo6
cGF0aEFmdGVyTGFzdFNsYXNoKCkgY29uc3QKICAgICByZXR1cm4gbV9wYXRoQWZ0ZXJMYXN0U2xh
c2g7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIGVuYWJsZVVSTFNjaGVtZUNhbm9uaWNh
bGl6YXRpb24oYm9vbCk7CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1l
c3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKaW5kZXggNDAwZjZlMGVmOTQ4YTlm
NTdhNWVhZjBlMTk5NzU2ZmVhNDY4ZDdlNS4uNjNiNjNmNTkxZGZlOTViYTAwZmI1Zjk4YmJkZDU2
ZDUzZWRkY2Y3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKQEAgLTI3LDYgKzI3LDEyIEBA
CiAjaWZuZGVmIFdpZGdldF9oCiAjZGVmaW5lIFdpZGdldF9oCiAKKyNpZiBQTEFURk9STShJT1Mp
CisjaWZuZGVmIE5TVmlldworI2RlZmluZSBOU1ZpZXcgV0FLVmlldworI2VuZGlmCisjZW5kaWYK
KwogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0xOTAsNiArMTk2LDkgQEAgcHVibGljOgogCiAgICAg
dm9pZCByZW1vdmVGcm9tU3VwZXJ2aWV3KCk7CiAjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgdm9pZCBhZGRUb1N1cGVydmlldyhOU1ZpZXcqKTsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0o
RUZMKQogICAgIHZvaWQgc2V0RXZhc09iamVjdChFdmFzX09iamVjdCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1Mu
Y3BwCmluZGV4IGY5MzI2ZWE5MjhhZWFjNzJjOWUzZDhmMzI4ODNkODMyNzllMTQ0N2MuLmJlZGY4
OGYwMDAzODdjOGIwZTE3ZjI4ZTA5Y2IxMmU5YjdhYjIxYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAK
QEAgLTI5LDkgKzI5LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFdF
Ql9BVURJTykKLQotI2lmIFBMQVRGT1JNKElPUykKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBQ
TEFURk9STShJT1MpCiAKICNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uSU9TLmgiCiAKQEAgLTI2
Miw2ICsyNjAsNSBAQCB2b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OmZyYW1lU2l6ZUNoYW5nZWRQ
cm9jKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXQsIEF1ZGlvVQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9B
VURJTykgJiYgUExBVEZPUk0oSU9TKQogCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0
aW9uSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5h
dGlvbklPUy5oCmluZGV4IGYwZWVlY2ExOTc4NmMyODRhZTYzNGI5YzdlYTkxNzI5ZDQ5MzM0MmQu
LjhiNjhhNmFjODM0ZTViNjgxNWJiYTJjODAwNDE1MDgzZTk0MjlkMzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1Mu
aApAQCAtNzYsMyArNzYsNCBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gQXVkaW9EZXN0aW5hdGlvbklPU19oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYmI4NTlmYjZiNjQ2YzQ0ZjI1ZTgxYzMyZjE5OWFhZDhkYzA4NzBmMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJ
T1MuY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
dWRpb0ZpbGVSZWFkZXJJT1MuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFBMQVRGT1JN
KElPUykKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVy
LmgiCisjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9D
b3JlRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworU09GVF9MSU5LX0ZSQU1FV09SSyhBdWRpb1Rvb2xi
b3gpCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0ZpbGVDbG9zZSwgT1NTdGF0dXMsIChB
dWRpb0ZpbGVJRCBpbkF1ZGlvRmlsZSksIChpbkF1ZGlvRmlsZSkpCitTT0ZUX0xJTksoQXVkaW9U
b29sYm94LCBBdWRpb0ZpbGVPcGVuV2l0aENhbGxiYWNrcywgT1NTdGF0dXMsICh2b2lkICppbkNs
aWVudERhdGEsIEF1ZGlvRmlsZV9SZWFkUHJvYyBpblJlYWRGdW5jLCBBdWRpb0ZpbGVfV3JpdGVQ
cm9jIGluV3JpdGVGdW5jLCBBdWRpb0ZpbGVfR2V0U2l6ZVByb2MgaW5HZXRTaXplRnVuYywgQXVk
aW9GaWxlX1NldFNpemVQcm9jIGluU2V0U2l6ZUZ1bmMsIEF1ZGlvRmlsZVR5cGVJRCBpbkZpbGVU
eXBlSGludCwgQXVkaW9GaWxlSUQgKm91dEF1ZGlvRmlsZSksIChpbkNsaWVudERhdGEsIGluUmVh
ZEZ1bmMsIGluV3JpdGVGdW5jLCBpbkdldFNpemVGdW5jLCBpblNldFNpemVGdW5jLCBpbkZpbGVU
eXBlSGludCwgb3V0QXVkaW9GaWxlKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlv
RmlsZURpc3Bvc2UsIE9TU3RhdHVzLCAoRXh0QXVkaW9GaWxlUmVmIGluRXh0QXVkaW9GaWxlKSwg
KGluRXh0QXVkaW9GaWxlKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlvRmlsZUdl
dFByb3BlcnR5LCBPU1N0YXR1cywgKEV4dEF1ZGlvRmlsZVJlZiBpbkV4dEF1ZGlvRmlsZSwgRXh0
QXVkaW9GaWxlUHJvcGVydHlJRCBpblByb3BlcnR5SUQsIFVJbnQzMiAqaW9Qcm9wZXJ0eURhdGFT
aXplLCB2b2lkICpvdXRQcm9wZXJ0eURhdGEpLCAoaW5FeHRBdWRpb0ZpbGUsIGluUHJvcGVydHlJ
RCwgaW9Qcm9wZXJ0eURhdGFTaXplLCBvdXRQcm9wZXJ0eURhdGEpKQorU09GVF9MSU5LKEF1ZGlv
VG9vbGJveCwgRXh0QXVkaW9GaWxlUmVhZCwgT1NTdGF0dXMsIChFeHRBdWRpb0ZpbGVSZWYgaW5F
eHRBdWRpb0ZpbGUsIFVJbnQzMiAqaW9OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCAqaW9E
YXRhKSwgKGluRXh0QXVkaW9GaWxlLCBpb051bWJlckZyYW1lcywgaW9EYXRhKSkKK1NPRlRfTElO
SyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlvRmlsZVNldFByb3BlcnR5LCBPU1N0YXR1cywgKEV4dEF1
ZGlvRmlsZVJlZiBpbkV4dEF1ZGlvRmlsZSwgRXh0QXVkaW9GaWxlUHJvcGVydHlJRCBpblByb3Bl
cnR5SUQsIFVJbnQzMiBpblByb3BlcnR5RGF0YVNpemUsIGNvbnN0IHZvaWQgKmluUHJvcGVydHlE
YXRhKSwgKGluRXh0QXVkaW9GaWxlLCBpblByb3BlcnR5SUQsIGluUHJvcGVydHlEYXRhU2l6ZSwg
aW5Qcm9wZXJ0eURhdGEpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlV3Jh
cEF1ZGlvRmlsZUlELCBPU1N0YXR1cywgKEF1ZGlvRmlsZUlEIGluRmlsZUlELCBCb29sZWFuIGlu
Rm9yV3JpdGluZywgRXh0QXVkaW9GaWxlUmVmICpvdXRFeHRBdWRpb0ZpbGUpLCAoaW5GaWxlSUQs
IGluRm9yV3JpdGluZywgb3V0RXh0QXVkaW9GaWxlKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gs
IEV4dEF1ZGlvRmlsZU9wZW5VUkwsIE9TU3RhdHVzLCAoQ0ZVUkxSZWYgaW5VUkwsIEV4dEF1ZGlv
RmlsZVJlZiogb3V0RXh0QXVkaW9GaWxlKSwgKGluVVJMLCBvdXRFeHRBdWRpb0ZpbGUpKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gQXVkaW9CdWZm
ZXJMaXN0KiBjcmVhdGVBdWRpb0J1ZmZlckxpc3Qoc2l6ZV90IG51bWJlck9mQnVmZmVycykKK3sK
KyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IGJ1ZmZlckxpc3RTaXplID0gc2l6
ZW9mKEF1ZGlvQnVmZmVyTGlzdCkgLSBzaXplb2YoQXVkaW9CdWZmZXIpOworICAgIGJ1ZmZlckxp
c3RTaXplICs9IG51bWJlck9mQnVmZmVycyAqIHNpemVvZihBdWRpb0J1ZmZlcik7CisKKyAgICBB
dWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxpc3QgPSBzdGF0aWNfY2FzdDxBdWRpb0J1ZmZlckxpc3Qq
PihjYWxsb2MoMSwgYnVmZmVyTGlzdFNpemUudW5zYWZlR2V0KCkpKTsKKyAgICBpZiAoYnVmZmVy
TGlzdCkKKyAgICAgICAgYnVmZmVyTGlzdC0+bU51bWJlckJ1ZmZlcnMgPSBudW1iZXJPZkJ1ZmZl
cnM7CisgICAgcmV0dXJuIGJ1ZmZlckxpc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0
cm95QXVkaW9CdWZmZXJMaXN0KEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCkKK3sKKyAgICBm
cmVlKGJ1ZmZlckxpc3QpOworfQorCitBdWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcihj
b25zdCBjaGFyKiBmaWxlUGF0aCkKKyAgICA6IG1fZGF0YSgwKQorICAgICwgbV9kYXRhU2l6ZSgw
KQorICAgICwgbV9hdWRpb0ZpbGVJRCgwKQorICAgICwgbV9leHRBdWRpb0ZpbGVSZWYobnVsbHB0
cikKK3sKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybFJlZiA9IGFkb3B0Q0YoQ0ZVUkxDcmVh
dGVGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGtDRkFsbG9jYXRvckRlZmF1bHQsIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihmaWxlUGF0aCksIHN0cmxlbihmaWxlUGF0aCksIGZh
bHNlKSk7CisgICAgaWYgKCF1cmxSZWYpCisgICAgICAgIHJldHVybjsKKyAgICBFeHRBdWRpb0Zp
bGVPcGVuVVJMKHVybFJlZi5nZXQoKSwgJm1fZXh0QXVkaW9GaWxlUmVmKTsKK30KKworQXVkaW9G
aWxlUmVhZGVyOjpBdWRpb0ZpbGVSZWFkZXIoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFT
aXplKQorICAgIDogbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFTaXplKGRhdGFTaXplKQorICAg
ICwgbV9hdWRpb0ZpbGVJRCgwKQorICAgICwgbV9leHRBdWRpb0ZpbGVSZWYobnVsbHB0cikKK3sK
KyAgICBpZiAoQXVkaW9GaWxlT3BlbldpdGhDYWxsYmFja3ModGhpcywgcmVhZFByb2MsIDAsIGdl
dFNpemVQcm9jLCAwLCAwLCAmbV9hdWRpb0ZpbGVJRCkgIT0gbm9FcnIpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChFeHRBdWRpb0ZpbGVXcmFwQXVkaW9GaWxlSUQobV9hdWRpb0ZpbGVJRCwg
ZmFsc2UsICZtX2V4dEF1ZGlvRmlsZVJlZikgIT0gbm9FcnIpCisgICAgICAgIG1fZXh0QXVkaW9G
aWxlUmVmID0gbnVsbHB0cjsKK30KKworQXVkaW9GaWxlUmVhZGVyOjp+QXVkaW9GaWxlUmVhZGVy
KCkKK3sKKyAgICBpZiAobV9leHRBdWRpb0ZpbGVSZWYpCisgICAgICAgIEV4dEF1ZGlvRmlsZURp
c3Bvc2UobV9leHRBdWRpb0ZpbGVSZWYpOworCisgICAgbV9leHRBdWRpb0ZpbGVSZWYgPSBudWxs
cHRyOworCisgICAgaWYgKG1fYXVkaW9GaWxlSUQpCisgICAgICAgIEF1ZGlvRmlsZUNsb3NlKG1f
YXVkaW9GaWxlSUQpOworCisgICAgbV9hdWRpb0ZpbGVJRCA9IDA7Cit9CisKK09TU3RhdHVzIEF1
ZGlvRmlsZVJlYWRlcjo6cmVhZFByb2Modm9pZCogY2xpZW50RGF0YSwgU0ludDY0IHBvc2l0aW9u
LCBVSW50MzIgcmVxdWVzdENvdW50LCB2b2lkKiBidWZmZXIsIFVJbnQzMiogYWN0dWFsQ291bnQp
Cit7CisgICAgQXVkaW9GaWxlUmVhZGVyKiBhdWRpb0ZpbGVSZWFkZXIgPSBzdGF0aWNfY2FzdDxB
dWRpb0ZpbGVSZWFkZXIqPihjbGllbnREYXRhKTsKKworICAgIHNpemVfdCBkYXRhU2l6ZSA9IGF1
ZGlvRmlsZVJlYWRlci0+ZGF0YVNpemUoKTsKKyAgICBjb25zdCB2b2lkKiBkYXRhID0gYXVkaW9G
aWxlUmVhZGVyLT5kYXRhKCk7CisgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gMDsKKworICAgIGlm
IChzdGF0aWNfY2FzdDxVSW50NjQ+KHBvc2l0aW9uKSA8IGRhdGFTaXplKSB7CisgICAgICAgIHNp
emVfdCBieXRlc0F2YWlsYWJsZSA9IGRhdGFTaXplIC0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihwb3Np
dGlvbik7CisgICAgICAgIGJ5dGVzVG9SZWFkID0gcmVxdWVzdENvdW50IDw9IGJ5dGVzQXZhaWxh
YmxlID8gcmVxdWVzdENvdW50IDogYnl0ZXNBdmFpbGFibGU7CisgICAgICAgIG1lbWNweShidWZm
ZXIsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSArIHBvc2l0aW9uLCBieXRlc1RvUmVh
ZCk7CisgICAgfQorCisgICAgaWYgKGFjdHVhbENvdW50KQorICAgICAgICAqYWN0dWFsQ291bnQg
PSBieXRlc1RvUmVhZDsKKworICAgIHJldHVybiBub0VycjsKK30KKworU0ludDY0IEF1ZGlvRmls
ZVJlYWRlcjo6Z2V0U2l6ZVByb2Modm9pZCogY2xpZW50RGF0YSkKK3sKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QXVkaW9GaWxlUmVhZGVyKj4oY2xpZW50RGF0YSktPmRhdGFTaXplKCk7Cit9CisK
K1Bhc3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNh
bXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vKQoreworICAgIGlmICghbV9leHRBdWRpb0ZpbGVSZWYp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gR2V0IGZpbGUncyBkYXRhIGZvcm1h
dAorICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKG1fZmlsZURhdGFGb3JtYXQpOworICAgIGlmIChF
eHRBdWRpb0ZpbGVHZXRQcm9wZXJ0eShtX2V4dEF1ZGlvRmlsZVJlZiwga0V4dEF1ZGlvRmlsZVBy
b3BlcnR5X0ZpbGVEYXRhRm9ybWF0LCAmc2l6ZSwgJm1fZmlsZURhdGFGb3JtYXQpICE9IG5vRXJy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHNpemVfdCBudW1iZXJPZkNoYW5uZWxz
ID0gbV9maWxlRGF0YUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZTsKKworICAgIC8vIE51bWJlciBv
ZiBmcmFtZXMKKyAgICBTSW50NjQgbnVtYmVyT2ZGcmFtZXM2NCA9IDA7CisgICAgc2l6ZSA9IHNp
emVvZihudW1iZXJPZkZyYW1lczY0KTsKKyAgICBpZiAoRXh0QXVkaW9GaWxlR2V0UHJvcGVydHko
bV9leHRBdWRpb0ZpbGVSZWYsIGtFeHRBdWRpb0ZpbGVQcm9wZXJ0eV9GaWxlTGVuZ3RoRnJhbWVz
LCAmc2l6ZSwgJm51bWJlck9mRnJhbWVzNjQpICE9IG5vRXJyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGRvdWJsZSBmaWxlU2FtcGxlUmF0ZSA9IG1fZmlsZURhdGFGb3JtYXQubVNh
bXBsZVJhdGU7CisKKyAgICAvLyBNYWtlIGNsaWVudCBmb3JtYXQgc2FtZSBudW1iZXIgb2YgY2hh
bm5lbHMgYXMgZmlsZSBmb3JtYXQsIGJ1dCB0d2VhayBhIGZldyB0aGluZ3MuCisgICAgLy8gQ2xp
ZW50IGZvcm1hdCB3aWxsIGJlIGxpbmVhciBQQ00gKGNhbm9uaWNhbCksIGFuZCBwb3RlbnRpYWxs
eSBjaGFuZ2Ugc2FtcGxlLXJhdGUuCisgICAgbV9jbGllbnREYXRhRm9ybWF0ID0gbV9maWxlRGF0
YUZvcm1hdDsKKworICAgIGNvbnN0IGludCBieXRlc1BlckZsb2F0ID0gc2l6ZW9mKEZsb2F0MzIp
OworICAgIGNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7CisgICAgbV9jbGllbnREYXRhRm9ybWF0
Lm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKKyAgICBtX2NsaWVudERhdGFGb3Jt
YXQubUZvcm1hdEZsYWdzID0ga0F1ZGlvRm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtB
dWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkOworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5t
Qnl0ZXNQZXJQYWNrZXQgPSBieXRlc1BlckZsb2F0OworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5t
RnJhbWVzUGVyUGFja2V0ID0gMTsKKyAgICBtX2NsaWVudERhdGFGb3JtYXQubUJ5dGVzUGVyRnJh
bWUgPSBieXRlc1BlckZsb2F0OworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tQ2hhbm5lbHNQZXJG
cmFtZSA9IG51bWJlck9mQ2hhbm5lbHM7CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1CaXRzUGVy
Q2hhbm5lbCA9IGJpdHNQZXJCeXRlICogYnl0ZXNQZXJGbG9hdDsKKworICAgIGlmIChzYW1wbGVS
YXRlKQorICAgICAgICBtX2NsaWVudERhdGFGb3JtYXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRl
OworCisgICAgaWYgKEV4dEF1ZGlvRmlsZVNldFByb3BlcnR5KG1fZXh0QXVkaW9GaWxlUmVmLCBr
RXh0QXVkaW9GaWxlUHJvcGVydHlfQ2xpZW50RGF0YUZvcm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFt
QmFzaWNEZXNjcmlwdGlvbiksICZtX2NsaWVudERhdGFGb3JtYXQpICE9IG5vRXJyKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIENoYW5nZSBudW1iZXJPZkZyYW1lczY0IHRvIGRl
c3RpbmF0aW9uIHNhbXBsZS1yYXRlCisgICAgbnVtYmVyT2ZGcmFtZXM2NCA9IG51bWJlck9mRnJh
bWVzNjQgKiAobV9jbGllbnREYXRhRm9ybWF0Lm1TYW1wbGVSYXRlIC8gZmlsZVNhbXBsZVJhdGUp
OworICAgIHNpemVfdCBudW1iZXJPZkZyYW1lcyA9IHN0YXRpY19jYXN0PHNpemVfdD4obnVtYmVy
T2ZGcmFtZXM2NCk7CisKKyAgICBzaXplX3QgYnVzQ2hhbm5lbENvdW50ID0gbWl4VG9Nb25vID8g
MSA6IG51bWJlck9mQ2hhbm5lbHM7CisKKyAgICAvLyBDcmVhdGUgQXVkaW9CdXMgd2hlcmUgd2Un
bGwgcHV0IHRoZSBQQ00gYXVkaW8gZGF0YQorICAgIFJlZlB0cjxBdWRpb0J1cz4gYXVkaW9CdXMg
PSBBdWRpb0J1czo6Y3JlYXRlKGJ1c0NoYW5uZWxDb3VudCwgbnVtYmVyT2ZGcmFtZXMpOworICAg
IGF1ZGlvQnVzLT5zZXRTYW1wbGVSYXRlKG1fY2xpZW50RGF0YUZvcm1hdC5tU2FtcGxlUmF0ZSk7
IC8vIHNhdmUgZm9yIGxhdGVyCisKKyAgICAvLyBPbmx5IGFsbG9jYXRlZCBpbiB0aGUgbWl4VG9N
b25vIGNhc2U7IGRlYWxsb2NhdGVkIG9uIGRlc3RydWN0aW9uLgorICAgIEF1ZGlvRmxvYXRBcnJh
eSBsZWZ0Q2hhbm5lbDsKKyAgICBBdWRpb0Zsb2F0QXJyYXkgcmlnaHRDaGFubmVsOworCisgICAg
QXVkaW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0ID0gY3JlYXRlQXVkaW9CdWZmZXJMaXN0KG51bWJl
ck9mQ2hhbm5lbHMpOworICAgIGlmICghYnVmZmVyTGlzdCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgY29uc3Qgc2l6ZV90IGJ1ZmZlclNpemUgPSBudW1iZXJPZkZyYW1lcyAqIHNpemVv
ZihmbG9hdCk7CisKKyAgICBpZiAobWl4VG9Nb25vICYmIG51bWJlck9mQ2hhbm5lbHMgPT0gMikg
eworICAgICAgICBsZWZ0Q2hhbm5lbC5hbGxvY2F0ZShudW1iZXJPZkZyYW1lcyk7CisgICAgICAg
IHJpZ2h0Q2hhbm5lbC5hbGxvY2F0ZShudW1iZXJPZkZyYW1lcyk7CisKKyAgICAgICAgYnVmZmVy
TGlzdC0+bUJ1ZmZlcnNbMF0ubU51bWJlckNoYW5uZWxzID0gMTsKKyAgICAgICAgYnVmZmVyTGlz
dC0+bUJ1ZmZlcnNbMF0ubURhdGFCeXRlU2l6ZSA9IGJ1ZmZlclNpemU7CisgICAgICAgIGJ1ZmZl
ckxpc3QtPm1CdWZmZXJzWzBdLm1EYXRhID0gbGVmdENoYW5uZWwuZGF0YSgpOworCisgICAgICAg
IGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1OdW1iZXJDaGFubmVscyA9IDE7CisgICAgICAgIGJ1
ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1EYXRhQnl0ZVNpemUgPSBidWZmZXJTaXplOworICAgICAg
ICBidWZmZXJMaXN0LT5tQnVmZmVyc1sxXS5tRGF0YSA9IHJpZ2h0Q2hhbm5lbC5kYXRhKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCFtaXhUb01vbm8gfHwgbnVtYmVyT2ZDaGFubmVs
cyA9PSAxKTsKKworICAgICAgICAvLyBGb3IgVHJ1ZS1zdGVyZW8gKG51bWJlck9mQ2hhbm5lbHMg
PT0gNCkKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyAr
K2kpIHsKKyAgICAgICAgICAgIGF1ZGlvQnVzLT5jaGFubmVsKGkpLT56ZXJvKCk7CisgICAgICAg
ICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tTnVtYmVyQ2hhbm5lbHMgPSAxOworICAgICAg
ICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSA9IGJ1ZmZlclNpemU7
CisgICAgICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YSA9IGF1ZGlvQnVzLT5j
aGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmVh
ZCBmcm9tIHRoZSBmaWxlIChvciBpbi1tZW1vcnkgdmVyc2lvbikKKyAgICBVSW50MzIgZnJhbWVz
VG9SZWFkID0gbnVtYmVyT2ZGcmFtZXM7CisgICAgaWYgKEV4dEF1ZGlvRmlsZVJlYWQobV9leHRB
dWRpb0ZpbGVSZWYsICZmcmFtZXNUb1JlYWQsIGJ1ZmZlckxpc3QpICE9IG5vRXJyKSB7CisgICAg
ICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoYnVmZmVyTGlzdCk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIGlmIChtaXhUb01vbm8gJiYgbnVtYmVyT2ZDaGFubmVscyA9
PSAyKSB7CisgICAgICAgIC8vIE1peCBzdGVyZW8gZG93biB0byBtb25vCisgICAgICAgIGZsb2F0
KiBkZXN0TCA9IGF1ZGlvQnVzLT5jaGFubmVsKDApLT5tdXRhYmxlRGF0YSgpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mRnJhbWVzOyArK2kpCisgICAgICAgICAgICBk
ZXN0TFtpXSA9IDAuNWYgKiAobGVmdENoYW5uZWxbaV0gKyByaWdodENoYW5uZWxbaV0pOworICAg
IH0KKworICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoYnVmZmVyTGlzdCk7CisKKyAgICByZXR1
cm4gYXVkaW9CdXMucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVC
dXNGcm9tQXVkaW9GaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoLCBib29sIG1peFRvTW9ubywgZmxv
YXQgc2FtcGxlUmF0ZSkKK3sKKyAgICBBdWRpb0ZpbGVSZWFkZXIgcmVhZGVyKGZpbGVQYXRoKTsK
KyAgICByZXR1cm4gcmVhZGVyLmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOworfQor
CitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUoY29u
c3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2Ft
cGxlUmF0ZSkKK3sKKyAgICBBdWRpb0ZpbGVSZWFkZXIgcmVhZGVyKGRhdGEsIGRhdGFTaXplKTsK
KyAgICByZXR1cm4gcmVhZGVyLmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOworfQor
Cit9IC8vIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pICYmIFBMQVRGT1JN
KElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRp
b0ZpbGVSZWFkZXJJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRp
b0ZpbGVSZWFkZXJJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZWY1NjkzM2VmZDdlYTg3YWQ1YmNlZTk3ODNh
MDM2YTA2OTY4OTk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBB
dWRpb0ZpbGVSZWFkZXJJT1NfaAorI2RlZmluZSBBdWRpb0ZpbGVSZWFkZXJJT1NfaAorCisjaW5j
bHVkZSA8QXVkaW9Ub29sYm94L0F1ZGlvRmlsZS5oPgorI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9F
eHRlbmRlZEF1ZGlvRmlsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9CdXM7CisKKy8vIFdyYXBwZXIgY2xhc3MgZm9y
IEF1ZGlvRmlsZSBhbmQgRXh0QXVkaW9GaWxlIENvcmVBdWRpbyBBUElzIGZvciByZWFkaW5nIGZp
bGVzIGFuZCBpbi1tZW1vcnkgdmVyc2lvbnMgb2YgdGhlbS4uLgorCitjbGFzcyBBdWRpb0ZpbGVS
ZWFkZXIgeworcHVibGljOgorICAgIEF1ZGlvRmlsZVJlYWRlcihjb25zdCBjaGFyKiBmaWxlUGF0
aCk7CisgICAgQXVkaW9GaWxlUmVhZGVyKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6
ZSk7CisgICAgfkF1ZGlvRmlsZVJlYWRlcigpOworCisgICAgUGFzc1JlZlB0cjxBdWRpb0J1cz4g
Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vKTsgLy8gUmV0dXJucyBu
dWxscHRyIG9uIGVycm9yCisKKyAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhOyB9CisgICAgc2l6ZV90IGRhdGFTaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhU2l6
ZTsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBPU1N0YXR1cyByZWFkUHJvYyh2b2lkKiBjbGll
bnREYXRhLCBTSW50NjQgcG9zaXRpb24sIFVJbnQzMiByZXF1ZXN0Q291bnQsIHZvaWQqIGJ1ZmZl
ciwgVUludDMyKiBhY3R1YWxDb3VudCk7CisgICAgc3RhdGljIFNJbnQ2NCBnZXRTaXplUHJvYyh2
b2lkKiBjbGllbnREYXRhKTsKKworICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKKyAgICBzaXplX3Qg
bV9kYXRhU2l6ZTsKKworICAgIEF1ZGlvRmlsZUlEIG1fYXVkaW9GaWxlSUQ7CisgICAgRXh0QXVk
aW9GaWxlUmVmIG1fZXh0QXVkaW9GaWxlUmVmOworCisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uIG1fZmlsZURhdGFGb3JtYXQ7CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
IG1fY2xpZW50RGF0YUZvcm1hdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEF1ZGlvRmlsZVJlYWRlcklPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9TZXNzaW9uSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vaW9zL0F1ZGlvU2Vzc2lvbklPUy5tbQppbmRleCA3OWUyNjFhYTBmOGE0Yjg3
NWNmNGNlNTI5ZmUzNTQ2NWI4NDMyYjc5Li4zNDljMWY1ZDgzOTNjNTNlZDQ4MDg5ZmM4ZTRkYTE1
YTNkODE2OGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3Mv
QXVkaW9TZXNzaW9uSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lv
cy9BdWRpb1Nlc3Npb25JT1MubW0KQEAgLTQyLDcgKzQyLDYgQEAgU09GVF9MSU5LX1BPSU5URVIo
QVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5UGxheWJhY2ssIE5TU3RyaW5nICop
CiBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlS
ZWNvcmQsIE5TU3RyaW5nICopCiBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVk
aW9TZXNzaW9uQ2F0ZWdvcnlQbGF5QW5kUmVjb3JkLCBOU1N0cmluZyAqKQogU09GVF9MSU5LX1BP
SU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5QXVkaW9Qcm9jZXNzaW5n
LCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vz
c2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiwgTlNTdHJpbmcgKikKIFNPRlRfTElOS19QT0lO
VEVSKEFWRm91bmRhdGlvbiwgQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25UeXBlS2V5LCBOU1N0
cmluZyAqKQogCiAjZGVmaW5lIEFWQXVkaW9TZXNzaW9uIGdldEFWQXVkaW9TZXNzaW9uQ2xhc3Mo
KQpAQCAtNTIsOSArNTEsMTQgQEAgU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1
ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXksIE5TU3RyaW5nICopCiAjZGVmaW5lIEFWQXVk
aW9TZXNzaW9uQ2F0ZWdvcnlSZWNvcmQgZ2V0QVZBdWRpb1Nlc3Npb25DYXRlZ29yeVJlY29yZCgp
CiAjZGVmaW5lIEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlQbGF5QW5kUmVjb3JkIGdldEFWQXVkaW9T
ZXNzaW9uQ2F0ZWdvcnlQbGF5QW5kUmVjb3JkKCkKICNkZWZpbmUgQVZBdWRpb1Nlc3Npb25DYXRl
Z29yeUF1ZGlvUHJvY2Vzc2luZyBnZXRBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5QXVkaW9Qcm9jZXNz
aW5nKCkKLSNkZWZpbmUgQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24gZ2V0
QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24oKQogI2RlZmluZSBBVkF1ZGlv
U2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXkgZ2V0QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25U
eXBlS2V5KCkKIAorc3RhdGljIE5TU3RyaW5nICogY29uc3QgV0NBVkF1ZGlvU2Vzc2lvbkludGVy
cnVwdGlvbk5vdGlmaWNhdGlvbiA9IEAiQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmlj
YXRpb24iOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorU09GVF9MSU5LX1BPSU5URVIoQVZGb3Vu
ZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiwgTlNTdHJpbmcg
KikKKyNlbmRpZgorCiBAaW50ZXJmYWNlIFdlYkF1ZGlvU2Vzc2lvbkhlbHBlciA6IE5TT2JqZWN0
IHsKICAgICBXZWJDb3JlOjpBdWRpb1Nlc3Npb24qIF9jYWxsYmFjazsKIH0KQEAgLTcxLDE5ICs3
NSwyNSBAQCBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uSW50
ZXJydXB0aW9uVHlwZUtleSwgTlNTdHJpbmcgKikKIAogICAgIF9jYWxsYmFjayA9IGNhbGxiYWNr
OwogCi0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZl
cjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihpbnRlcnJ1cHRpb246KSBuYW1lOkFWQXVkaW9TZXNz
aW9uSW50ZXJydXB0aW9uTm90aWZpY2F0aW9uIG9iamVjdDpbQVZBdWRpb1Nlc3Npb24gc2hhcmVk
SW5zdGFuY2VdXTsKKyAgICBBU1NFUlQoW1dDQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3Rp
ZmljYXRpb24gaXNFcXVhbFRvU3RyaW5nOmdldEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uTm90
aWZpY2F0aW9uKCldKTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaW50ZXJydXB0aW9uOikgbmFt
ZTpXQ0FWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwog
CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07CisgICAg
W1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxm
IG5hbWU6V0NBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiBvYmplY3Q6bmls
XTsKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKIC0gKHZvaWQpaW50ZXJydXB0aW9uOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogeworICAgIEFTU0VSVChbQVZBdWRpb1Nlc3Npb24g
c2hhcmVkSW5zdGFuY2VdID09IFtub3RpZmljYXRpb24gb2JqZWN0XSk7CisgICAgaWYgKFtBVkF1
ZGlvU2Vzc2lvbiBzaGFyZWRJbnN0YW5jZV0gIT0gW25vdGlmaWNhdGlvbiBvYmplY3RdKQorICAg
ICAgICByZXR1cm47CisKICAgICBOU1VJbnRlZ2VyIHR5cGUgPSBbW1tub3RpZmljYXRpb24gdXNl
ckluZm9dIG9iamVjdEZvcktleTpBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXldIHVu
c2lnbmVkSW50ZWdlclZhbHVlXTsKICAgICBpZiAodHlwZSA9PSBBVkF1ZGlvU2Vzc2lvbkludGVy
cnVwdGlvblR5cGVCZWdhbikKICAgICAgICAgX2NhbGxiYWNrLT5iZWdhbkF1ZGlvSW50ZXJydXB0
aW9uKCk7CkBAIC0xMzMsMTkgKzE0MywyNiBAQCB2b2lkIEF1ZGlvU2Vzc2lvbjo6c2V0Q2F0ZWdv
cnkoQ2F0ZWdvcnlUeXBlIG5ld0NhdGVnb3J5KQogICAgIHN3aXRjaCAobmV3Q2F0ZWdvcnkpIHsK
ICAgICBjYXNlIEFtYmllbnRTb3VuZDoKICAgICAgICAgY2F0ZWdvcnlTdHJpbmcgPSBBVkF1ZGlv
U2Vzc2lvbkNhdGVnb3J5QW1iaWVudDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTb2xvQW1i
aWVudFNvdW5kOgogICAgICAgICBjYXRlZ29yeVN0cmluZyA9IEFWQXVkaW9TZXNzaW9uQ2F0ZWdv
cnlTb2xvQW1iaWVudDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNZWRpYVBsYXliYWNrOgog
ICAgICAgICBjYXRlZ29yeVN0cmluZyA9IEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlQbGF5YmFjazsK
KyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZWNvcmRBdWRpbzoKICAgICAgICAgY2F0ZWdvcnlT
dHJpbmcgPSBBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5UmVjb3JkOworICAgICAgICBicmVhazsKICAg
ICBjYXNlIFBsYXlBbmRSZWNvcmQ6CiAgICAgICAgIGNhdGVnb3J5U3RyaW5nID0gQVZBdWRpb1Nl
c3Npb25DYXRlZ29yeVBsYXlBbmRSZWNvcmQ7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQXVk
aW9Qcm9jZXNzaW5nOgogICAgICAgICBjYXRlZ29yeVN0cmluZyA9IEFWQXVkaW9TZXNzaW9uQ2F0
ZWdvcnlBdWRpb1Byb2Nlc3Npbmc7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9uZToKICAg
ICBkZWZhdWx0OgogICAgICAgICBjYXRlZ29yeVN0cmluZyA9IG5pbDsKKyAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwogICAgIFtbQVZBdWRpb1Nlc3Npb24g
c2hhcmVkSW5zdGFuY2VdIHNldENhdGVnb3J5OmNhdGVnb3J5U3RyaW5nIGVycm9yOiZlcnJvcl07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0
aW5hdGlvbk1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9E
ZXN0aW5hdGlvbk1hYy5jcHAKaW5kZXggYjBlZGE4MTVlM2M1OTc0ZDVjYWNjMjc2NGIwNzJmYTZi
ODhkNjUzMS4uM2M3NmNmNTM0ZTk2MjVkM2EwOWUxZDY1NGMwZTMwYmI2ZjkxZmQ3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25N
YWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3Rp
bmF0aW9uTWFjLmNwcApAQCAtMzAsNiArMzAsOCBAQAogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykK
IAorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKKwogI2luY2x1ZGUgIkF1ZGlv
RGVzdGluYXRpb25NYWMuaCIKIAogI2luY2x1ZGUgIkF1ZGlvSU9DYWxsYmFjay5oIgpAQCAtMTgx
LDQgKzE4Myw2IEBAIE9TU3RhdHVzIEF1ZGlvRGVzdGluYXRpb25NYWM6OmlucHV0UHJvYyh2b2lk
KiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKKwogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwCmluZGV4IGVkMmVkNTVhOWUy
OTBiNzgxNmY2YzNlNGEyMWZiYTc3OWEyODdmN2MuLjdkMjU5NGM2NDkyYjUyNTZjZjcxOTY4YTdl
NmI1NWNjNTQ1YjEyY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAKICNp
ZiBFTkFCTEUoV0VCX0FVRElPKQogCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9T
KQorCiAjaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyTWFjLmgiCiAKICNpbmNsdWRlICJBdWRpb0J1
cy5oIgpAQCAtNTgsNyArNjAsNyBAQCBzdGF0aWMgdm9pZCBkZXN0cm95QXVkaW9CdWZmZXJMaXN0
KEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCkKIH0KIAogQXVkaW9GaWxlUmVhZGVyOjpBdWRp
b0ZpbGVSZWFkZXIoY29uc3QgY2hhciogZmlsZVBhdGgpCi0gICAgOiBtX2RhdGEoMCkKKyAgICA6
IG1fZGF0YShudWxscHRyKQogICAgICwgbV9kYXRhU2l6ZSgwKQogICAgICwgbV9hdWRpb0ZpbGVJ
RCgwKQogICAgICwgbV9leHRBdWRpb0ZpbGVSZWYoMCkKQEAgLTIzNywxNiArMjM5LDE2IEBAIFBh
c3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBs
ZVJhdGUsIGJvb2wgbWl4VG9Nb25vCiAKIFBhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zy
b21BdWRpb0ZpbGUoY29uc3QgY2hhciogZmlsZVBhdGgsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBz
YW1wbGVSYXRlKQogewotICAgIEF1ZGlvRmlsZVJlYWRlciByZWFkZXIoZmlsZVBhdGgpOwotICAg
IHJldHVybiByZWFkZXIuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CisgICAgcmV0
dXJuIEF1ZGlvRmlsZVJlYWRlcihmaWxlUGF0aCkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRv
TW9ubyk7CiB9CiAKIFBhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1
ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25v
LCBmbG9hdCBzYW1wbGVSYXRlKQogewotICAgIEF1ZGlvRmlsZVJlYWRlciByZWFkZXIoZGF0YSwg
ZGF0YVNpemUpOwotICAgIHJldHVybiByZWFkZXIuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRv
TW9ubyk7CisgICAgcmV0dXJuIEF1ZGlvRmlsZVJlYWRlcihkYXRhLCBkYXRhU2l6ZSkuY3JlYXRl
QnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CiB9CiAKLX0gLy8gV2ViQ29yZQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9T
KQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1Nlc3Npb25NYWMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5jcHAKaW5kZXggNzc4ODQ3MmNm
NGZiZTNmMGEzMjdiMWM2OTg2MmYyNjI1ZTFhNTllZS4uMzVlMjhhYjE4ZjU5M2Y4NjlmMTY5ODhh
N2I3MDBhYWY3MWRmZDEyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJBdWRpb1Nlc3Npb24uaCIKIAotI2lmIFVTRShBVURJT19T
RVNTSU9OKSAmJiBQTEFURk9STShNQUMpCisjaWYgVVNFKEFVRElPX1NFU1NJT04pICYmIFBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9NZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL21hYy9NZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcAppbmRleCBkYTA4
MmE2ZjIyMjk0ODE0OTVhNTUzOTg1YTJkMGViOTkxZTU4YjU2Li44YmU3ZTZlOGRhNDViYjM5ZDU4
YzJiYzNhNjJmZDUwZjUwNjYxZjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9tYWMvTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL01lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwCkBAIC00OCw3
ICs0OCw3IEBAIHZvaWQgTWVkaWFTZXNzaW9uTWFuYWdlcjo6dXBkYXRlU2Vzc2lvblN0YXRlKCkK
ICAgICAgICAgQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2V0UHJlZmVycmVkQnVmZmVy
U2l6ZShrV2ViQXVkaW9CdWZmZXJTaXplKTsKICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQu
b3JnL2IvMTE2NzI1PiBGaWd1cmUgb3V0IHdoeSBlbmFibGluZyB0aGUgY29kZSBiZWxvdwogICAg
IC8vIGNhdXNlcyBtZWRpYSBMYXlvdXRUZXN0cyB0byBmYWlsIG9uIDEwLjguCi0jaWYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgUExBVEZPUk0oSU9TKSB8fCBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICBlbHNlIGlmICgoaGFz
KE1lZGlhU2Vzc2lvbjo6VmlkZW8pIHx8IGhhcyhNZWRpYVNlc3Npb246OkF1ZGlvKSkgJiYgU2V0
dGluZ3M6Omxvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkKCkpCiAgICAgICAgIEF1
ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNldFByZWZlcnJlZEJ1ZmZlclNpemUoa0xvd1Bv
d2VyVmlkZW9CdWZmZXJTaXplKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2YvU2hhcmVkQnVmZmVyQ0YuY3BwCmluZGV4IDhlN2M3YTM3NTVhMDgxZmQ5NDdhNDY1ZmIzMmE1
YjI0Y2MxYjE5MjYuLmUxODU5MzkwMGM2MjllZTliMzk3MmExNWRhZjI4Nzc4OTQ1NTE2NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAKQEAgLTM4
LDEzICszOCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVk
QnVmZmVyKENGRGF0YVJlZiBjZkRhdGEpCiAgICAgOiBtX3NpemUoMCkKLSAgICAsIG1fY2ZEYXRh
KGNmRGF0YSkKKyAgICAsIG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGZhbHNlKQogI2lmIEVO
QUJMRShESVNLX0lNQUdFX0NBQ0hFKQogICAgICwgbV9pc01lbW9yeU1hcHBlZChmYWxzZSkKICAg
ICAsIG1fZGlza0ltYWdlQ2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlk
KQogICAgICwgbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFjayhudWxscHRyKQogICAgICwgbV9u
b3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFja0RhdGEobnVsbHB0cikKICNlbmRpZgorICAgICwgbV9j
ZkRhdGEoY2ZEYXRhKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jZi9VUkxDRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9VUkxDRi5jcHAKaW5k
ZXggYjNlY2I1MDMxOTIyMmEyZDQ0YWFhN2Q0OGNjYjEzNWJlZTM1MzljOS4uNWIxNjk0ODc2NmQz
MzhmZjM0OWM0ZWY1MjY0OGI1YzRhNDZjNzQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2YvVVJMQ0YuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1VS
TENGLmNwcApAQCAtMzAsNiArMzAsMTEgQEAKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlVS
TC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElPUykK
KyNpbmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCIKKyNpbmNsdWRlIDxDb3Jl
Rm91bmRhdGlvbi9DRlByaXYuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFVS
TDo6VVJMKENGVVJMUmVmIHVybCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL0tleUV2ZW50Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9L
ZXlFdmVudENvY29hLm1tCmluZGV4IGExMjViNmExMGY0N2I3MmU2MDU2ZGY3OTRiNmRlYWI1ZDQ3
NmYzNjkuLjFhM2Q4MzBkZDE5NGMwZDk2OTRjMjg1NjhiMzQ5MmRiMTNkOGNiOWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0tleUV2ZW50Q29jb2EubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvS2V5RXZlbnRDb2NvYS5tbQpAQCAtNTMxLDkg
KzUzMSw4IEBAIGludCB3aW5kb3dzS2V5Q29kZUZvckNoYXJDb2RlKHVuaWNoYXIgY2hhckNvZGUp
CiAgICAgICAgIGNhc2UgTlNQcmludEZ1bmN0aW9uS2V5OiByZXR1cm4gVktfUFJJTlQ7CiAgICAg
ICAgIGNhc2UgTlNFeGVjdXRlRnVuY3Rpb25LZXk6IHJldHVybiBWS19FWEVDVVRFOwogICAgICAg
ICBjYXNlIE5TUHJpbnRTY3JlZW5GdW5jdGlvbktleTogcmV0dXJuIFZLX1NOQVBTSE9UOwotICAg
ICAgICBjYXNlIE5TSW5zZXJ0RnVuY3Rpb25LZXk6IHJldHVybiBWS19JTlNFUlQ7CiAjaWYgUExB
VEZPUk0oSU9TKQotICAgICAgICBjYXNlIE5TSGVscEZ1bmN0aW9uS2V5OiByZXR1cm4gVktfSU5T
RVJUOworICAgICAgICBjYXNlIE5TSW5zZXJ0RnVuY3Rpb25LZXk6IGNhc2UgTlNIZWxwRnVuY3Rp
b25LZXk6IHJldHVybiBWS19JTlNFUlQ7CiAKICAgICAgICAgY2FzZSBOU0YxRnVuY3Rpb25LZXk6
IHJldHVybiBWS19GMTsKICAgICAgICAgY2FzZSBOU0YyRnVuY3Rpb25LZXk6IHJldHVybiBWS19G
MjsKQEAgLTU1NSw2ICs1NTQsOCBAQCBpbnQgd2luZG93c0tleUNvZGVGb3JDaGFyQ29kZSh1bmlj
aGFyIGNoYXJDb2RlKQogICAgICAgICBjYXNlIE5TRjE4RnVuY3Rpb25LZXk6IHJldHVybiBWS19G
MTg7CiAgICAgICAgIGNhc2UgTlNGMTlGdW5jdGlvbktleTogcmV0dXJuIFZLX0YxOTsKICAgICAg
ICAgY2FzZSBOU0YyMEZ1bmN0aW9uS2V5OiByZXR1cm4gVktfRjIwOworI2Vsc2UKKyAgICAgICAg
Y2FzZSBOU0luc2VydEZ1bmN0aW9uS2V5OiByZXR1cm4gVktfSU5TRVJUOwogI2VuZGlmCiAgICAg
ICAgIGNhc2UgTlNGMjFGdW5jdGlvbktleTogcmV0dXJuIFZLX0YyMTsKICAgICAgICAgY2FzZSBO
U0YyMkZ1bmN0aW9uS2V5OiByZXR1cm4gVktfRjIyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4IGM4OGFiNWU0OTk2YWM5OTcxZGVm
ZWYwYjFlODkzNjJhN2M3NzNhMTkuLjQ3MDA4MmVkNWM1ZWYwMmE3MzNlNmQ5NDEyMWMwNDkyMDVi
ZTBkMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5jcHAKQEAgLTM3LDggKzM3LDE0IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1
ZGUgPGxpbWl0cz4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBX
ZSBzaG91bGQgYmV0dGVyIGludGVncmF0ZSB0aGUgaU9TIGFuZCBub24taU9TIGNvZGUgaW4gdGhp
cyBjbGFzcy4gVW5saWtlIG90aGVyIHBvcnRzLCB0aGUKKy8vIGlPUyBwb3J0IGNhY2hlcyB0aGUg
bWV0YWRhdGEgZm9yIGEgZnJhbWUgd2l0aG91dCBkZWNvZGluZyB0aGUgaW1hZ2UuCiBCaXRtYXBJ
bWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShv
YnNlcnZlcikKICAgICAsIG1fY3VycmVudEZyYW1lKDApCkBAIC01MCw2ICs1NiwxMSBAQCBCaXRt
YXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgLCBtX2Rl
Y29kZWRTaXplKDApCiAgICAgLCBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSgwKQogICAgICwgbV9m
cmFtZUNvdW50KDApCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
ZXhwb3NlIGEgc2V0dGluZyB0byBlbmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIHJl
bW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKyAgICAsIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1
bmtUaW1lKDApCisgICAgLCBtX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQoMCkKKyNlbmRpZgog
ICAgICwgbV9pc1NvbGlkQ29sb3IoZmFsc2UpCiAgICAgLCBtX2NoZWNrZWRGb3JTb2xpZENvbG9y
KGZhbHNlKQogICAgICwgbV9hbmltYXRpb25GaW5pc2hlZChmYWxzZSkKQEAgLTEwMCw3ICsxMTEs
MTYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9v
bCBkZXN0cm95QWxsKQogewogICAgIC8vIEFuaW1hdGVkIGltYWdlcyA+NU1CIGFyZSBjb25zaWRl
cmVkIGxhcmdlIGVub3VnaCB0aGF0IHdlJ2xsIG9ubHkgaGFuZyBvbgogICAgIC8vIHRvIG9uZSBm
cmFtZSBhdCBhIHRpbWUuCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjTGFyZ2VBbmltYXRpb25DdXRvZmYgPSAyMDk3MTUyOworCisgICAgIC8vIElmIHdlIGhh
dmUgZGVjb2RlZCBmcmFtZXMgYnV0IHRoZXJlIGlzIG5vIGVuY29kZWQgZGF0YSwgd2Ugc2hvdWxk
bid0IGRlc3Ryb3kKKyAgICAgLy8gdGhlIGRlY29kZWQgaW1hZ2Ugc2luY2Ugd2Ugd29uJ3QgYmUg
YWJsZSB0byByZWNvbnN0cnVjdCBpdCBsYXRlci4KKyAgICAgaWYgKCFkYXRhKCkgJiYgbV9mcmFt
ZXMuc2l6ZSgpKQorICAgICAgICAgcmV0dXJuOworI2Vsc2UKICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgY0xhcmdlQW5pbWF0aW9uQ3V0b2ZmID0gNTI0Mjg4MDsKKyNlbmRpZgogCiAgICAgLy8g
SWYgd2UgaGF2ZSBkZWNvZGVkIGZyYW1lcyBidXQgdGhlcmUgaXMgbm8gZW5jb2RlZCBkYXRhLCB3
ZSBzaG91bGRuJ3QgZGVzdHJveQogICAgIC8vIHRoZSBkZWNvZGVkIGltYWdlIHNpbmNlIHdlIHdv
bid0IGJlIGFibGUgdG8gcmVjb25zdHJ1Y3QgaXQgbGF0ZXIuCkBAIC0xMzEsNyArMTUxLDExIEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lNZXRhZGF0YUFuZE5vdGlmeSh1bnNpZ25lZCBmcmFt
ZUJ5dGVzQ2xlYXJlZCkKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kZWNvZGVkU2l6ZUNoYW5n
ZWQodGhpcywgLXNhZmVDYXN0PGludD4oZnJhbWVCeXRlc0NsZWFyZWQpKTsKIH0KIAorI2lmIFBM
QVRGT1JNKElPUykKK3ZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBm
bG9hdCBzY2FsZUhpbnQpCisjZWxzZQogdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXpl
X3QgaW5kZXgpCisjZW5kaWYKIHsKICAgICBzaXplX3QgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgp
OwogICAgIEFTU0VSVChtX2RlY29kZWRTaXplID09IDAgfHwgbnVtRnJhbWVzID4gMSk7CkBAIC0x
MzksNyArMTYzLDEyIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4
KQogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkgPCBudW1GcmFtZXMpCiAgICAgICAgIG1fZnJhbWVz
Lmdyb3cobnVtRnJhbWVzKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2ZyYW1lc1tpbmRl
eF0ubV9mcmFtZSA9IG1fc291cmNlLmNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCwgJnNjYWxlSGlu
dCk7CisgICAgbV9mcmFtZXNbaW5kZXhdLm1fc2NhbGUgPSBzY2FsZUhpbnQ7CisjZWxzZQogICAg
IG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVBdEluZGV4KGlu
ZGV4KTsKKyNlbmRpZgogICAgIGlmIChudW1GcmFtZXMgPT0gMSAmJiBtX2ZyYW1lc1tpbmRleF0u
bV9mcmFtZSkKICAgICAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CiAKQEAgLTE2Niw2ICsxOTUs
MjMgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgpCiAgICAgfQog
fQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZUluZm8o
c2l6ZV90IGluZGV4KQoreworICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CisK
KyAgICBpZiAobV9mcmFtZXMuc2l6ZSgpIDwgbnVtRnJhbWVzKQorICAgICAgICBtX2ZyYW1lcy5y
ZXNpemUobnVtRnJhbWVzKTsKKworICAgIEFTU0VSVCghbV9mcmFtZXNbaW5kZXhdLm1faGF2ZUlu
Zm8pOworCisgICAgaWYgKHNob3VsZEFuaW1hdGUoKSkKKyAgICAgICAgbV9mcmFtZXNbaW5kZXhd
Lm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CisgICAg
bV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRl
eChpbmRleCk7CisgICAgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZUluZm8gPSB0cnVlOworfQorI2Vu
ZGlmCisKIHZvaWQgQml0bWFwSW1hZ2U6OmRpZERlY29kZVByb3BlcnRpZXMoKSBjb25zdAogewog
ICAgIGlmIChtX2RlY29kZWRTaXplKQpAQCAtMTkzLDYgKzIzOSwxMCBAQCB2b2lkIEJpdG1hcElt
YWdlOjp1cGRhdGVTaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikg
Y29uc3QKICAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NvdXJjZS5zaXplKElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbihSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZGVzY3Jp
cHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKSk7CiAgICAgbV9pbWFnZU9yaWVudGF0aW9uID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CiAgICAg
bV9zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihk
ZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpKTsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgbV9vcmlnaW5hbFNpemUgPSBtX3NvdXJjZS5vcmlnaW5hbFNpemUoKTsKKyAgICBtX29y
aWdpbmFsU2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc291cmNlLm9yaWdpbmFsU2l6ZShS
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7CisjZW5kaWYKICAgICBtX2hhdmVTaXplID0gdHJ1ZTsK
ICAgICBkaWREZWNvZGVQcm9wZXJ0aWVzKCk7CiB9CkBAIC0yMDksNiArMjU5LDIwIEBAIEludFNp
emUgQml0bWFwSW1hZ2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uIGRlc2NyCiAgICAgcmV0dXJuIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlv
bjsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK0ludFNpemUgQml0bWFwSW1hZ2U6Om9yaWdpbmFs
U2l6ZSgpIGNvbnN0Cit7CisgICAgdXBkYXRlU2l6ZSgpOworICAgIHJldHVybiBtX29yaWdpbmFs
U2l6ZTsKK30KKworSW50U2l6ZSBCaXRtYXBJbWFnZTo6b3JpZ2luYWxTaXplUmVzcGVjdGluZ09y
aWVudGF0aW9uKCkgY29uc3QKK3sKKyAgICB1cGRhdGVTaXplKCk7CisgICAgcmV0dXJuIG1fb3Jp
Z2luYWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9uOworfQorI2VuZGlmCisKIEludFNpemUgQml0
bWFwSW1hZ2U6OmN1cnJlbnRGcmFtZVNpemUoKSBjb25zdAogewogICAgIGlmICghbV9jdXJyZW50
RnJhbWUgfHwgbV9oYXNVbmlmb3JtRnJhbWVTaXplKQpAQCAtMjI3LDYgKzI5MSw5IEBAIGJvb2wg
Qml0bWFwSW1hZ2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0CiAKIGJvb2wg
Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogeworICAgIC8v
IEJlY2F1c2Ugd2UncmUgbW9kaWZ5aW5nIHRoZSBjdXJyZW50IGZyYW1lLCBjbGVhciBpdHMgKG5v
dyBwb3NzaWJseQorICAgIC8vIGluYWNjdXJhdGUpIG1ldGFkYXRhIGFzIHdlbGwuCisjaWYgIVBM
QVRGT1JNKElPUykKICAgICAvLyBDbGVhciBhbGwgcGFydGlhbGx5LWRlY29kZWQgZnJhbWVzLiBG
b3IgbW9zdCBpbWFnZSBmb3JtYXRzLCB0aGVyZSBpcyBvbmx5CiAgICAgLy8gb25lIGZyYW1lLCBi
dXQgYXQgbGVhc3QgR0lGIGFuZCBJQ08gY2FuIGhhdmUgbW9yZS4gV2l0aCBHSUZzLCB0aGUgZnJh
bWVzCiAgICAgLy8gY29tZSBpbiBvcmRlciBhbmQgd2UgYXNrIHRvIGRlY29kZSB0aGVtIGluIG9y
ZGVyLCB3YWl0aW5nIHRvIHJlcXVlc3QgYQpAQCAtMjU0LDExICszMjEsNDAgQEAgYm9vbCBCaXRt
YXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgICAgICAgICBm
cmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1ZSkgPyBmcmFtZUJ5dGVz
IDogMCk7CiAgICAgfQogICAgIGRlc3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xl
YXJlZCk7CisjZWxzZQorICAgIGludCBkZWx0YUJ5dGVzID0gMDsKKyAgICBpZiAoIW1fZnJhbWVz
LmlzRW1wdHkoKSkgeworICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXpl
KCkgLSAxXS5tX2ZyYW1lQnl0ZXM7CisgICAgICAgIGlmIChtX2ZyYW1lc1ttX2ZyYW1lcy5zaXpl
KCkgLSAxXS5jbGVhcih0cnVlKSkgeworICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsK
KyAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gbV9kZWNvZGVkUHJvcGVydGllc1NpemU7CisgICAg
ICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSA9IDA7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KGRlbHRhQnl0ZXMpOworI2VuZGlmCiAgICAgCiAg
ICAgLy8gRmVlZCBhbGwgdGhlIGRhdGEgd2UndmUgc2VlbiBzbyBmYXIgdG8gdGhlIGltYWdlIGRl
Y29kZXIuCiAgICAgbV9hbGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXhwb3NlIGEgc2V0dGluZyB0byBl
bmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIGFuZCBtYWtlIHRoaXMKKyAgICAvLyBj
b2RlIGNvbmRpdGlvbmFsIG9uIGl0LiBUaGVuIHdlIGNhbiByZW1vdmUgdGhlIFBMQVRGT1JNKElP
UyktZ3VhcmQuCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBjaHVua0xvYWRJbnRlcnZhbHNbXSA9
IHswLCAxLCAzLCA2LCAxNX07CisgICAgZG91YmxlIGludGVydmFsID0gY2h1bmtMb2FkSW50ZXJ2
YWxzW3N0ZDo6bWluKG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCwgc3RhdGljX2Nhc3Q8dWlu
dDE2X3Q+KDQpKV07CisKKyAgICBib29sIG5lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgaWYgKGN1
cnJlbnRUaW1lKCkgLSBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSA+IGludGVydmFsKSB7IC8v
IFRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIHRoZSBjaHVuayB0aW1lIHdpbGwgYmUgMCBhbmQgdGhl
IGltYWdlIHdpbGwgZ2V0IGFuIHVwZGF0ZS4KKyAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlOwor
ICAgICAgICBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAg
ICAgIEFTU0VSVChtX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQgPD0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MTZfdD46Om1heCgpKTsKKyAgICAgICAgKyttX3Byb2dyZXNzaXZlTG9hZENodW5r
Q291bnQ7CisgICAgfQorICAgIGlmIChuZWVkc1VwZGF0ZSB8fCBhbGxEYXRhUmVjZWl2ZWQpCisg
ICAgICAgIG1fc291cmNlLnNldERhdGEoZGF0YSgpLCBhbGxEYXRhUmVjZWl2ZWQpOworI2Vsc2UK
ICAgICBtX3NvdXJjZS5zZXREYXRhKGRhdGEoKSwgYWxsRGF0YVJlY2VpdmVkKTsKLSAgICAKKyNl
bmRpZgorCiAgICAgbV9oYXZlRnJhbWVDb3VudCA9IGZhbHNlOwogICAgIG1faGFzVW5pZm9ybUZy
YW1lU2l6ZSA9IHRydWU7CiAgICAgcmV0dXJuIGlzU2l6ZUF2YWlsYWJsZSgpOwpAQCAtMjkzLDYg
KzM4OSw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJu
IG1fc2l6ZUF2YWlsYWJsZTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiBib29sIEJpdG1hcElt
YWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXgg
Pj0gZnJhbWVDb3VudCgpKQpAQCAtMzAyLDI1ICszOTksNzUgQEAgYm9vbCBCaXRtYXBJbWFnZTo6
ZW5zdXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgpCiAgICAgICAgIGNhY2hlRnJhbWUoaW5k
ZXgpOwogICAgIHJldHVybiB0cnVlOwogfQorI2Vsc2UKK2Jvb2wgQml0bWFwSW1hZ2U6OmVuc3Vy
ZUZyYW1lSW5mb0lzQ2FjaGVkKHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXggPj0gZnJh
bWVDb3VudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaW5kZXggPj0gbV9m
cmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9oYXZlSW5mbykKKyAgICAgICAgY2Fj
aGVGcmFtZUluZm8oaW5kZXgpOworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCiAKIFBhc3NO
YXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIGZyYW1lQXRJbmRleChpbmRleCwgMS4wZik7
CisjZWxzZQogICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gbV9mcmFtZXNbaW5k
ZXhdLm1fZnJhbWU7CisjZW5kaWYKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK1Bhc3NOYXRpdmVJ
bWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgc2Nh
bGVIaW50KQoreworICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFt
ZXNbaW5kZXhdLm1fZnJhbWUpCisgICAgICAgIGNhY2hlRnJhbWUoaW5kZXgsIHNjYWxlSGludCk7
CisgICAgZWxzZSBpZiAoc3RkOjptaW4oMS4wZiwgc2NhbGVIaW50KSA+IG1fZnJhbWVzW2luZGV4
XS5tX3NjYWxlKSB7CisgICAgICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwg
YnV0IGF0IHRvbyBzbWFsbCBhIHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgorICAg
ICAgICBpbnQgc2l6ZUNoYW5nZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOworICAg
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihtX2RlY29kZWRTaXplKSArIHNpemVDaGFuZ2Ug
Pj0gMCk7CisgICAgICAgIG1fZnJhbWVzW2luZGV4XS5jbGVhcih0cnVlKTsKKyAgICAgICAgaW52
YWxpZGF0ZVBsYXRmb3JtRGF0YSgpOworICAgICAgICBtX2RlY29kZWRTaXplICs9IHNpemVDaGFu
Z2U7CisgICAgICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgICAgICBpbWFnZU9ic2Vy
dmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCBzaXplQ2hhbmdlKTsKKworICAgICAgICBj
YWNoZUZyYW1lKGluZGV4LCBzY2FsZUhpbnQpOworICAgIH0KKyAgICByZXR1cm4gbV9mcmFtZXNb
aW5kZXhdLm1fZnJhbWU7Cit9CisjZW5kaWYKKwogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IEZJWE1FOiBjYWNoZUZyYW1lSW5mbyBkb2VzIG5vdCBzZXQgbV9pc0NvbXBsZXRlLiBTaG91bGQg
aXQ/CisgICAgaWYgKCFlbnN1cmVGcmFtZUluZm9Jc0NhY2hlZChpbmRleCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyNlbHNlCiAgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4
XS5tX2lzQ29tcGxldGU7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJ
bmRleChzaXplX3QgaW5kZXgpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmICghZW5zdXJl
RnJhbWVJbmZvSXNDYWNoZWQoaW5kZXgpKQorICAgICAgICByZXR1cm4gMDsKKyNlbHNlCiAgICAg
aWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKICAgICAgICAgcmV0dXJuIDA7CisjZW5k
aWYKICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fZHVyYXRpb247CiB9CiAKQEAgLTMzMSw5
ICs0NzgsMTMgQEAgUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpCiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4
KHNpemVfdCBpbmRleCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKCFlbnN1cmVGcmFt
ZUluZm9Jc0NhY2hlZChpbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBGSVhNRTogV2h5
IHdvdWxkIGFuIGludmFsaWQgaW5kZXggcmV0dXJuIHRydWUgaGVyZT8KKyNlbHNlCiAgICAgaWYg
KG1fZnJhbWVzLnNpemUoKSA8PSBpbmRleCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0KKyNlbmRp
ZgogICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCiAgICAgICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKIApAQCAtMzQ3LDggKzQ5OCwxNCBAQCBib29s
IEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKQogCiBJbWFnZU9yaWVu
dGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgp
CiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBjYWNoZUZyYW1lSW5mbyBkb2Vz
IG5vdCBzZXQgbV9vcmllbnRhdGlvbi4gU2hvdWxkIGl0PworICAgIGlmICghZW5zdXJlRnJhbWVJ
bmZvSXNDYWNoZWQoaW5kZXgpKQorICAgICAgICByZXR1cm4gRGVmYXVsdEltYWdlT3JpZW50YXRp
b247CisjZWxzZQogICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCiAgICAgICAg
IHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKKyNlbmRpZgogCiAgICAgaWYgKG1fZnJh
bWVzW2luZGV4XS5tX2hhdmVNZXRhZGF0YSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4
XS5tX29yaWVudGF0aW9uOwpAQCAtMzYzLDggKzUyMCw2IEBAIGJvb2wgQml0bWFwSW1hZ2U6Om5v
dFNvbGlkQ29sb3IoKQogfQogI2VuZGlmCiAKLQotCiBpbnQgQml0bWFwSW1hZ2U6OnJlcGV0aXRp
b25Db3VudChib29sIGltYWdlS25vd25Ub0JlQ29tcGxldGUpCiB7CiAgICAgaWYgKChtX3JlcGV0
aXRpb25Db3VudFN0YXR1cyA9PSBVbmtub3duKSB8fCAoKG1fcmVwZXRpdGlvbkNvdW50U3RhdHVz
ID09IFVuY2VydGFpbikgJiYgaW1hZ2VLbm93blRvQmVDb21wbGV0ZSkpIHsKQEAgLTQxMiwxMiAr
NTY3LDE4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKGJvb2wgY2F0Y2hVcElm
TmVjZXNzYXJ5KQogICAgIGNvbnN0IGRvdWJsZSBjdXJyZW50RHVyYXRpb24gPSBmcmFtZUR1cmF0
aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CiAgICAgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUg
Kz0gY3VycmVudER1cmF0aW9uOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBXaGVuIGFu
IGFuaW1hdGVkIGltYWdlIGlzIG1vcmUgdGhhbiBmaXZlIG1pbnV0ZXMgb3V0IG9mIGRhdGUsIHRo
ZQogICAgIC8vIHVzZXIgcHJvYmFibHkgZG9lc24ndCBjYXJlIGFib3V0IHJlc3luY2luZyBhbmQg
d2UgY291bGQgYnVybiBhIGxvdCBvZgogICAgIC8vIHRpbWUgbG9vcGluZyB0aHJvdWdoIGZyYW1l
cyBiZWxvdy4gIEp1c3QgcmVzZXQgdGhlIHRpbWluZ3MuCiAgICAgY29uc3QgZG91YmxlIGNBbmlt
YXRpb25SZXN5bmNDdXRvZmYgPSA1ICogNjA7CiAgICAgaWYgKCh0aW1lIC0gbV9kZXNpcmVkRnJh
bWVTdGFydFRpbWUpID4gY0FuaW1hdGlvblJlc3luY0N1dG9mZikKICAgICAgICAgbV9kZXNpcmVk
RnJhbWVTdGFydFRpbWUgPSB0aW1lICsgY3VycmVudER1cmF0aW9uOworI2Vsc2UKKyAgICAvLyBN
YWludGFpbmluZyBmcmFtZS10by1mcmFtZSBkZWxheXMgaXMgbW9yZSBpbXBvcnRhbnQgdGhhbgor
ICAgIC8vIG1haW50YWluaW5nIGFic29sdXRlIGFuaW1hdGlvbiB0aW1pbmcsIHNvIHJlc2V0IHRo
ZSB0aW1pbmdzIGVhY2ggZnJhbWUuCisgICAgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUgPSB0aW1l
ICsgY3VycmVudER1cmF0aW9uOworI2VuZGlmCiAKICAgICAvLyBUaGUgaW1hZ2UgbWF5IGxvYWQg
bW9yZSBzbG93bHkgdGhhbiBpdCdzIHN1cHBvc2VkIHRvIGFuaW1hdGUsIHNvIHRoYXQgYnkKICAg
ICAvLyB0aGUgdGltZSB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBmaXJzdCByZXBldGl0aW9uLCB3
ZSdyZSB3ZWxsIGJlaGluZC4KQEAgLTU0OCwxMCArNzA5LDEyIEBAIGJvb2wgQml0bWFwSW1hZ2U6
OmludGVybmFsQWR2YW5jZUFuaW1hdGlvbihib29sIHNraXBwaW5nRnJhbWVzKQogICAgIC8vIFN0
b3AgdGhlIGFuaW1hdGlvbi4KICAgICBzdG9wQW5pbWF0aW9uKCk7CiAgICAgCisjaWYgIVBMQVRG
T1JNKElPUykKICAgICAvLyBTZWUgaWYgYW55b25lIGlzIHN0aWxsIHBheWluZyBhdHRlbnRpb24g
dG8gdGhpcyBhbmltYXRpb24uICBJZiBub3QsIHdlIGRvbid0CiAgICAgLy8gYWR2YW5jZSBhbmQg
d2lsbCByZW1haW4gc3VzcGVuZGVkIGF0IHRoZSBjdXJyZW50IGZyYW1lIHVudGlsIHRoZSBhbmlt
YXRpb24gaXMgcmVzdW1lZC4KICAgICBpZiAoIXNraXBwaW5nRnJhbWVzICYmIGltYWdlT2JzZXJ2
ZXIoKS0+c2hvdWxkUGF1c2VBbmltYXRpb24odGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgogCiAgICAgKyttX2N1cnJlbnRGcmFtZTsKICAgICBib29sIGFkdmFuY2VkQW5pbWF0
aW9uID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5oCmluZGV4IGI5ZGQ3YjNhNTIxNzg3NmMxM2M0MGM4OGJmN2M2Y2JmZTRhNzllNGYuLjg3
ZDhiOGM2NjIyZmI5ZmMzYzJiZjAwNDY1N2M3MDUzYmU0ZTlmM2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtMzYsNyArMzYsOSBAQAog
CiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpZiAhUExB
VEZPUk0oSU9TKQogT0JKQ19DTEFTUyBOU0ltYWdlOworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtNjcsNiArNjksMTAgQEAgcHVibGljOgog
ICAgIEZyYW1lRGF0YSgpCiAgICAgICAgIDogbV9mcmFtZSgwKQogICAgICAgICAsIG1fb3JpZW50
YXRpb24oRGVmYXVsdEltYWdlT3JpZW50YXRpb24pCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAg
ICAsIG1fc2NhbGUoMCkKKyAgICAgICAgLCBtX2hhdmVJbmZvKGZhbHNlKQorI2VuZGlmCiAgICAg
ICAgICwgbV9kdXJhdGlvbigwKQogICAgICAgICAsIG1faGF2ZU1ldGFkYXRhKGZhbHNlKQogICAg
ICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKQEAgLTg2LDYgKzkyLDEwIEBAIHB1YmxpYzoKIAog
ICAgIE5hdGl2ZUltYWdlUHRyIG1fZnJhbWU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVu
dGF0aW9uOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBmbG9hdCBtX3NjYWxlOworICAgIGJvb2wg
bV9oYXZlSW5mbzsKKyNlbmRpZgogICAgIGZsb2F0IG1fZHVyYXRpb247CiAgICAgYm9vbCBtX2hh
dmVNZXRhZGF0YSA6IDE7CiAgICAgYm9vbCBtX2lzQ29tcGxldGUgOiAxOwpAQCAtOTcsNiArMTA3
LDkgQEAgcHVibGljOgogLy8gQml0bWFwSW1hZ2UgQ2xhc3MKIC8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorLy8gRklYTUU6IFdlIHNob3VsZCBi
ZXR0ZXIgaW50ZWdyYXRlIHRoZSBpT1MgYW5kIG5vbi1pT1MgY29kZSBpbiB0aGlzIGNsYXNzLiBV
bmxpa2Ugb3RoZXIgcG9ydHMsIHRoZQorLy8gaU9TIHBvcnQgY2FjaGVzIHRoZSBtZXRhZGF0YSBm
b3IgYSBmcmFtZSB3aXRob3V0IGRlY29kaW5nIHRoZSBpbWFnZS4KKwogY2xhc3MgQml0bWFwSW1h
Z2UgRklOQUwgOiBwdWJsaWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFn
ZTsKICAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CkBAIC0xMjIsNiAr
MTM1LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgT1ZF
UlJJREU7CiAgICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKEltYWdlT3JpZW50
YXRpb25EZXNjcmlwdGlvbiA9IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCBJbnRTaXplIG9yaWdpbmFsU2l6ZSgpIGNv
bnN0OworICAgIEludFNpemUgb3JpZ2luYWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29u
c3Q7CisjZW5kaWYKICAgICBJbnRTaXplIGN1cnJlbnRGcmFtZVNpemUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgZ2V0SG90U3BvdChJbnRQb2ludCYpIGNvbnN0IE9WRVJSSURFOwogCkBAIC0x
NDEsNyArMTU4LDkgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIEFjY2Vz
c29ycyBmb3IgbmF0aXZlIGltYWdlIGZvcm1hdHMuCisjaWYgIVBMQVRGT1JNKElPUykKICAgICB2
aXJ0dWFsIE5TSW1hZ2UqIGdldE5TSW1hZ2UoKSBPVkVSUklERTsKKyNlbmRpZgogICAgIHZpcnR1
YWwgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIE9WRVJSSURFOwogI2VuZGlmCiAK
QEAgLTE5NSw2ICsyMTQsMTAgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKICAgICBzaXplX3QgY3Vy
cmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50RnJhbWU7IH0KKyNpZiBQTEFURk9S
TShJT1MpCisgICAgUGFzc05hdGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRleChzaXplX3QsIGZsb2F0
IHNjYWxlSGludCk7CisgICAgUGFzc05hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lQXRJ
bmRleChzaXplX3QpOworI2VuZGlmCiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKICAgICBQYXNz
TmF0aXZlSW1hZ2VQdHIgZnJhbWVBdEluZGV4KHNpemVfdCk7CiAgICAgYm9vbCBmcmFtZUlzQ29t
cGxldGVBdEluZGV4KHNpemVfdCk7CkBAIC0yMDMsOSArMjI2LDE4IEBAIHByb3RlY3RlZDoKICAg
ICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4KHNpemVfdCk7CiAKICAg
ICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMgYSBmcmFtZS4gTmV2ZXIgYWNjZXNzZWQgZXhjZXB0IGlu
dGVybmFsbHkuCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgY2FjaGVGcmFtZShzaXplX3Qg
aW5kZXgsIGZsb2F0IHNjYWxlSGludCk7CisKKyAgICAvLyBDYWNoZSBmcmFtZSBtZXRhZGF0YSB3
aXRob3V0IGRlY29kaW5nIGltYWdlLgorICAgIHZvaWQgY2FjaGVGcmFtZUluZm8oc2l6ZV90IGlu
ZGV4KTsKKyAgICAvLyBDYWxsZWQgYmVmb3JlIGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0gZm9y
IGluZm8gd2l0aG91dCBkZWNvZGluZy4gUmV0dXJucyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91
bmRzLgorICAgIGJvb2wgZW5zdXJlRnJhbWVJbmZvSXNDYWNoZWQoc2l6ZV90IGluZGV4KTsKKyNl
bHNlCiAgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRleCk7CiAgICAgLy8gQ2FsbGVkIGJl
Zm9yZSBhY2Nlc3NpbmcgbV9mcmFtZXNbaW5kZXhdLiBSZXR1cm5zIGZhbHNlIG9uIGluZGV4IG91
dCBvZiBib3VuZHMuCiAgICAgYm9vbCBlbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCk7
CisjZW5kaWYKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhLiAgV2hl
biB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50aXJlIGZy
YW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ryb3kKQEAg
LTI2OCw2ICszMDAsMTAgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1faW1hZ2VP
cmllbnRhdGlvbiA6IDQ7IC8vIEltYWdlT3JpZW50YXRpb25FbnVtCiAgICAgbXV0YWJsZSB1bnNp
Z25lZCBtX3Nob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uIDogMTsgLy8gUmVzcGVjdEltYWdl
T3JpZW50YXRpb25FbnVtCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgbXV0YWJsZSBJbnRTaXpl
IG1fb3JpZ2luYWxTaXplOyAvLyBUaGUgc2l6ZSBvZiB0aGUgdW5zdWJzYW1wbGVkIGltYWdlLgor
ICAgIG11dGFibGUgSW50U2l6ZSBtX29yaWdpbmFsU2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsK
KyNlbmRpZgogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZTsgLy8gVGhlIGluZGV4IG9mIHRoZSBj
dXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KICAgICBWZWN0b3I8RnJhbWVEYXRhLCAxPiBtX2Zy
YW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4g
V2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIApAQCAtMjc4
LDcgKzMxNCw5IEBAIHByaXZhdGU6CiAgICAgZG91YmxlIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1l
OyAgLy8gVGhlIHN5c3RlbSB0aW1lIGF0IHdoaWNoIHdlIGhvcGUgdG8gc2VlIHRoZSBuZXh0IGNh
bGwgdG8gc3RhcnRBbmltYXRpb24oKS4KIAogI2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIG11dGFibGUgUmV0YWluUHRyPE5TSW1hZ2U+IG1fbnNJbWFnZTsgLy8gQSBj
YWNoZWQgTlNJbWFnZSBvZiBmcmFtZSAwLiBPbmx5IGJ1aWx0IGxhemlseSBpZiBzb21lb25lIGFj
dHVhbGx5IHF1ZXJpZXMgZm9yIG9uZS4KKyNlbmRpZgogICAgIG11dGFibGUgUmV0YWluUHRyPENG
RGF0YVJlZj4gbV90aWZmUmVwOyAvLyBDYWNoZWQgVElGRiByZXAgZm9yIGZyYW1lIDAuICBPbmx5
IGJ1aWx0IGxhemlseSBpZiBzb21lb25lIHF1ZXJpZXMgZm9yIG9uZS4KICNlbmRpZgogCkBAIC0y
ODgsNiArMzI2LDEyIEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2RlY29kZWRQ
cm9wZXJ0aWVzU2l6ZTsgLy8gVGhlIHNpemUgb2YgZGF0YSBkZWNvZGVkIGJ5IHRoZSBzb3VyY2Ug
dG8gZGV0ZXJtaW5lIGltYWdlIHByb3BlcnRpZXMgKGUuZy4gc2l6ZSwgZnJhbWUgY291bnQsIGV0
YykuCiAgICAgc2l6ZV90IG1fZnJhbWVDb3VudDsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGV4cG9zZSBhIHNldHRpbmcgdG8gZW5hYmxlL2Rpc2FibGUgcHJv
Z3Jlc3NpdmUgbG9hZGluZyByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCisgICAgZG91
YmxlIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtUaW1lOworICAgIHVpbnQxNl90IG1fcHJvZ3Jlc3Np
dmVMb2FkQ2h1bmtDb3VudDsKKyNlbmRpZgorCiAgICAgYm9vbCBtX2lzU29saWRDb2xvciA6IDE7
IC8vIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBhIDF4MSBzb2xpZCBpbWFnZS4KICAgICBib29sIG1f
Y2hlY2tlZEZvclNvbGlkQ29sb3IgOiAxOyAvLyBXaGV0aGVyIHdlJ3ZlIGNoZWNrZWQgdGhlIGZy
YW1lIGZvciBzb2xpZCBjb2xvci4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuY3BwCmluZGV4IDIyYzhkYzFjMzMyZmNkNDliYmNiOTk3YzU2ZTEwMzlhNjYxNWY5MjUu
LjU5ZDM3NTk1ZGIzZGY2MjdhNjZlMDkyYWExMDg1MDBiYTk4M2Q4MzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTMxMCw2ICszMTAsMTcgQEAgQ29s
b3IgQ29sb3I6OmRhcmsoKSBjb25zdAogICAgICAgICAgICAgICAgICBhbHBoYSgpKTsKIH0KIAor
Ym9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKK3sKKyAgICBmbG9hdCByZWQ7CisgICAgZmxvYXQg
Z3JlZW47CisgICAgZmxvYXQgYmx1ZTsKKyAgICBmbG9hdCBhbHBoYTsKKyAgICBnZXRSR0JBKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICBmbG9hdCBsYXJnZXN0Tm9uQWxwaGFDaGFubmVs
ID0gc3RkOjptYXgocmVkLCBzdGQ6Om1heChncmVlbiwgYmx1ZSkpOworICAgIHJldHVybiBhbHBo
YSA+IDAuNSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41OworfQorCiBzdGF0aWMgaW50
IGJsZW5kQ29tcG9uZW50KGludCBjLCBpbnQgYSkKIHsKICAgICAvLyBXZSB1c2Ugd2hpdGUuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAppbmRleCA4ZTQwYzI0NGIyYWU3
NjA1ZTE3NjE3MzJkNjhlYzQ0YzllZDA3OTJjLi4yMDQ3YWQyNGMzN2E4MGIxMTc1OGY0NGQyZjhj
MGJlYzEyODU4MDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgK
QEAgLTM0LDYgKzM0LDkgQEAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgog
dHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvciogQ0dDb2xvclJlZjsKKyNpZiBQTEFURk9STShJT1MpCit0
eXBlZGVmIHN0cnVjdCBDR0NvbG9yU3BhY2UqIENHQ29sb3JTcGFjZVJlZjsKKyNlbmRpZiAvLyBQ
TEFURk9STShJT1MpCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTExOCw2ICsxMjEs
OCBAQCBwdWJsaWM6CiAgICAgQ29sb3IgbGlnaHQoKSBjb25zdDsKICAgICBDb2xvciBkYXJrKCkg
Y29uc3Q7CiAKKyAgICBib29sIGlzRGFyaygpIGNvbnN0OworCiAgICAgLy8gVGhpcyBpcyBhbiBp
bXBsZW1lbnRhdGlvbiBvZiBQb3J0ZXItRHVmZidzICJzb3VyY2Utb3ZlciIgZXF1YXRpb24KICAg
ICBDb2xvciBibGVuZChjb25zdCBDb2xvciYpIGNvbnN0OwogICAgIENvbG9yIGJsZW5kV2l0aFdo
aXRlKCkgY29uc3Q7CkBAIC0xNDUsNiArMTUwLDE1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3QgUkdCQTMyIGdyYXkgPSAweEZGQTBBMEEwOwogICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgbGln
aHRHcmF5ID0gMHhGRkMwQzBDMDsKICAgICBzdGF0aWMgY29uc3QgUkdCQTMyIHRyYW5zcGFyZW50
ID0gMHgwMDAwMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGN5YW4gPSAweEZGMDBGRkZG
OworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgdGFwID0gMHg0
RDFBMUExQTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGNvbG9yIHNob3VsZG4ndCBiZSBpT1Mtc3Bl
Y2lmaWMuIE9uY2Ugd2UgZml4IHVwIGl0cyB1c2FnZSBpbiBJbmxpbmVUZXh0Qm94OjpwYWludENv
bXBvc2l0aW9uQmFja2dyb3VuZCgpCisgICAgLy8gd2Ugc2hvdWxkIG1vdmUgaXQgb3V0c2lkZSB0
aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI2Mjk2Pi4KKyAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGNvbXBvc2l0aW9u
RmlsbCA9IDB4M0NBRkMwRTM7CisjZW5kaWYKIAogcHJpdmF0ZToKICAgICBSR0JBMzIgbV9jb2xv
cjsKQEAgLTIwMCw2ICsyMTQsOSBAQCBpbmxpbmUgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVp
bnQxNl90IHZhbHVlKQogCiAjaWYgVVNFKENHKQogQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKGNv
bnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CisjaWYgUExBVEZPUk0oSU9TKQorQ0dDb2xvclJlZiBj
cmVhdGVDR0NvbG9yV2l0aERldmljZVdoaXRlKENHRmxvYXQgd2hpdGUsIENHRmxvYXQgYWxwaGEp
OworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5
UmVmcmVzaE1vbml0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3Bs
YXlSZWZyZXNoTW9uaXRvci5oCmluZGV4IDhlMDU4MzEwOWE4ZjIwMTczMTAyODAwNjA5MTI4MDY4
MzRkMGI0ZTEuLmY4OTI5ZDY5ZmQ2NjMxZWQ2ZjhkY2JkMDkxYTUzMTJjMjVhNzFlMmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9u
aXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZy
ZXNoTW9uaXRvci5oCkBAIC0xMzEsMTIgKzEzMSwxOSBAQCBwcml2YXRlOgogICAgIHZvaWQgc3Rv
cEFuaW1hdGlvbkNsaWVudCgpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExB
VEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogcHVibGljOgogICAgIHZvaWQgZGlzcGxheUxp
bmtGaXJlZChkb3VibGUgbm93U2Vjb25kcywgZG91YmxlIG91dHB1dFRpbWVTZWNvbmRzKTsKIHBy
aXZhdGU6CiAgICAgQ1ZEaXNwbGF5TGlua1JlZiBtX2Rpc3BsYXlMaW5rOwogI2VuZGlmCisKKyNp
ZiBQTEFURk9STShJT1MpCitwdWJsaWM6CisgICAgdm9pZCBkaXNwbGF5TGlua0ZpcmVkKGRvdWJs
ZSBub3dTZWNvbmRzKTsKK3ByaXZhdGU6CisgICAgdm9pZCogbV9kaXNwbGF5TGluazsKKyNlbmRp
ZgogfTsKIAogLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9p
bnQuaAppbmRleCA5MjE2MTcxODU1YTY5MTk1OWYzNjEyNTdkMTQ3OTEyZTJhNDBlOWQ0Li4xNjBk
MDhmMjFkZmVkMTNjM2FjZDgwZDkzZDM3OGFiOWEyMmUzMjMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCkBAIC00MywxMyArNDMsMTMgQEAgY2xh
c3MgRmxvYXRQb2ludDsKIHR5cGVkZWYgc3RydWN0IENHUG9pbnQgQ0dQb2ludDsKICNlbmRpZgog
Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykK
ICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogdHlwZWRl
ZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50OwogI2Vsc2UKIHR5cGVkZWYgc3RydWN0IF9OU1BvaW50
IE5TUG9pbnQ7CiAjZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgIVBM
QVRGT1JNKElPUykKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMzksMTAgKzEzOSwxMiBA
QCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dQb2ludCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9U
WVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpCiAgICAgRmxvYXRQb2ludChjb25zdCBOU1Bv
aW50Jik7CiAgICAgb3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0OwogI2VuZGlmCisjZW5kaWYgLy8g
IVBMQVRGT1JNKElPUykKIAogI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgRmxvYXRQb2lu
dChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmxvYXRQb2ludCYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAppbmRleCAxY2UyMzllNWZmN2IzZGFi
MGJjYzljYzNjNmYyZjdlODJlYzQzNDM0Li5jYzlhMDNiZWY4MDIzNTFhY2M2MGRhZWQ0YWZjZmJi
NWFiNDIzNTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaApAQCAtMzAsMTcgKzMwLDIxIEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDb3JlR3Jh
cGhpY3MvQ0dHZW9tZXRyeS5oPgorI2VuZGlmCisKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVj
dCBDR1JlY3QgQ0dSZWN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9B
U19DR0dFT01FVFJZX1RZUEVTCiB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0OwogI2Vsc2UK
IHR5cGVkZWYgc3RydWN0IF9OU1JlY3QgTlNSZWN0OwogI2VuZGlmCi0jZW5kaWYKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAKICNpZiBQTEFURk9STShCTEFDS0JF
UlJZKQogbmFtZXNwYWNlIEJsYWNrQmVycnkgewpAQCAtMTgxLDEwICsxODUsMTIgQEAgcHVibGlj
OgogICAgIG9wZXJhdG9yIENHUmVjdCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0o
SU9TKQogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1F
X0FTX0NHR0VPTUVUUllfVFlQRVMpCiAgICAgRmxvYXRSZWN0KGNvbnN0IE5TUmVjdCYpOwogICAg
IG9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0OwogI2VuZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKIAogI2lmIFVTRShDQUlSTykKICAgICBGbG9hdFJlY3QoY29uc3QgY2Fpcm9fcmVjdGFuZ2xl
X3QmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
U2l6ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKaW5k
ZXggMGZhOGNjMWQ3NmIwYTEzYzkzNmVkNjFlZjA1OTRkMzkyNThjYjVjYy4uOTUyYTI5MDQ0YWRj
OTlhZWUxNzJjNmJkYjRkZjg1N2E0MTI4YmY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKQEAgLTM5LDE3ICszOSwyMSBAQCBjbGFzcyBGbG9hdFNp
emU7CiB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKKwogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0
IENHU2l6ZSBDR1NpemU7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9S
TShNQUMpICYmICFQTEFURk9STShJT1MpCiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FT
X0NHR0VPTUVUUllfVFlQRVMKIHR5cGVkZWYgc3RydWN0IENHU2l6ZSBOU1NpemU7CiAjZWxzZQog
dHlwZWRlZiBzdHJ1Y3QgX05TU2l6ZSBOU1NpemU7CiAjZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0xMjIsMTAgKzEyNiwxMiBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dTaXplKCkgY29u
c3Q7CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiAjaWYgKFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKQogICAg
IGV4cGxpY2l0IEZsb2F0U2l6ZShjb25zdCBOU1NpemUgJik7IC8vIGRvbid0IGRvIHRoaXMgaW1w
bGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgb3BlcmF0b3IgTlNTaXplKCkgY29uc3Q7CiAj
ZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
Y3BwCmluZGV4IGEyYjgwYTBlMTc5MmVkYWQ2YjU4NWNhZmNhZjZhMWIyNTkxYTZjMzQuLmYzYmJk
NzIxZDZiNWM2Yjc3OTQwOWE2OTJjZTA1ZDM0MzljOTRhOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC01MCw2ICs1MCw4IEBAIHRlbXBsYXRlIDw+IHZv
aWQgZGVsZXRlT3duZWRQdHI8V2ViQ29yZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91
dCogcHRyKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBQYXNzUmVmPEZvbnRHbHlw
aHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisKIGNvbnN0IHVpbnQ4X3QgRm9udDo6c19yb3Vu
ZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdID0gewogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDEgLypcdCovLCAxIC8qXG4qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKICAgICAxIC8qc3BhY2UqLywgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKi0qLywgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKj8qLywKQEAgLTEwNyw3ICsxMDks
MTUgQEAgRm9udDo6Rm9udCgpCiB7CiB9CiAKKworCisvLyBGSVhNRTogV2Ugc2hvdWxkIHJlY29u
Y2lsZSB0aGUgZGlmZmVyZW5jZSBpbiBkYXRhdHlwZSBiZXR3ZWVuIGlPUyBhbmQgT3BlblNvdXJj
ZS4gT24gaU9TIHdlIHdhbnQgbGV0dGVyLCB3b3JkIHNwYWNpbmcKKy8vIHRvIGJlIGZsb2F0IGZv
ciBzdWItcGl4ZWwga2VybmluZy4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA2MDY+LgorI2lmICFQTEFURk9STShJT1MpCiBGb250OjpGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZmQsIHNob3J0IGxldHRlclNwYWNpbmcsIHNob3J0IHdvcmRTcGFjaW5n
KSAKKyNlbHNlCitGb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxl
dHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKSAKKyNlbmRpZgogICAgIDogbV9mb250RGVz
Y3JpcHRpb24oZmQpCiAgICAgLCBtX2xldHRlclNwYWNpbmcobGV0dGVyU3BhY2luZykKICAgICAs
IG1fd29yZFNwYWNpbmcod29yZFNwYWNpbmcpCkBAIC0xMTYsNiArMTI2LDcgQEAgRm9udDo6Rm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mIGZkLCBzaG9ydCBsZXR0ZXJTcGFjaW5nLCBzaG9ydCB3
b3JkU3BhY2luZykKIHsKIH0KIAorLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3Ry
dWN0b3IgcGxhdGZvcm0taW5kZXBlbmRlbnQuCiBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZv
bnRTbW9vdGhpbmdNb2RlKQogICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxh
dGZvcm1Gb250KGZvbnREYXRhKSkKICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQpAQCAtMTI1LDgg
KzEzNiwzMiBAQCBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBi
b29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNbwogewogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQpOwogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldEZvbnRTbW9vdGhpbmcoZm9udFNtb290aGluZ01vZGUpOworI2lmIFBMQVRGT1JNKElP
UykKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUo
Zm9udERhdGEuZm9udCgpKSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7CisgICAgbV9mb250RGVzY3JpcHRpb24u
c2V0SXRhbGljKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RG
b250VHJhaXRJdGFsaWMpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250
R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8g
Rm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKKyNlbmRpZgogfQogCisvLyBGSVhN
RTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4K
KyNpZiBQTEFURk9STShJT1MpCitGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZv
bnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQorICAgIDogbV9n
bHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKKyAgICAs
IG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93b3JkU3BhY2luZygwKQorICAgICwgbV90eXBl
c2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7CisgICAgQ1RG
b250UmVmIHByaW1hcnlGb250ID0gZm9udERhdGEuZm9udCgpOworICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9udCkpOworICAgIG1f
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlGb250
KSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXRhbGljKENURm9udEdldFN5bWJvbGljVHJh
aXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgbV9mb250RGVzY3Jp
cHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBr
Q1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7Cisg
ICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmludGVy
Rm9udCgpKTsKKyAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKG1f
Zm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworfQorI2VuZGlmCisKIEZvbnQ6
OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCiAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbihvdGhlci5t
X2ZvbnREZXNjcmlwdGlvbikKICAgICAsIG1fZ2x5cGhzKG90aGVyLm1fZ2x5cGhzKQpAQCAtMjk3
LDE0ICszMzIsMTQgQEAgdm9pZCBGb250Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+
IGZvbnRTZWxlY3RvcikgY29uc3QKICAgICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgPSBjb21wdXRl
VHlwZXNldHRpbmdGZWF0dXJlcygpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbikgY29uc3QKK2Zsb2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnRO
b3RSZWFkeUFjdGlvbikgY29uc3QKIHsKICAgICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdoaWxl
IHdlIGFyZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9h
ZGluZywKICAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1lbnQgaXMgc2V0IHRvIHRy
dWUgKGluIHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawogICAgIC8vIGZvbnQpLgog
ICAgIGlmIChsb2FkaW5nQ3VzdG9tRm9udHMoKSAmJiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24g
PT0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAg
ICAgIHJldHVybiAwOworCiAgICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0byk7
CiAKICAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4KQpAQCAtMzQwLDcgKzM3NSw3IEBA
IGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvCiAgICAgfQogCiAgICAgYm9vbCBoYXNLZXJuaW5nT3JM
aWdhdHVyZXMgPSB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiAoS2VybmluZyB8IExpZ2F0dXJlcyk7
Ci0gICAgYm9vbCBoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZyA9IHdvcmRTcGFjaW5nKCkg
fCBsZXR0ZXJTcGFjaW5nKCk7CisgICAgYm9vbCBoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3BhY2lu
ZyA9IHdvcmRTcGFjaW5nKCkgfHwgbGV0dGVyU3BhY2luZygpOwogICAgIGZsb2F0KiBjYWNoZUVu
dHJ5ID0gbV9nbHlwaHMtPndpZHRoQ2FjaGUoKS5hZGQocnVuLCBzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6cXVpZXRfTmFOKCksIGhhc0tlcm5pbmdPckxpZ2F0dXJlcywgaGFzV29yZFNwYWNp
bmdPckxldHRlclNwYWNpbmcsIGdseXBoT3ZlcmZsb3cpOwogICAgIGlmIChjYWNoZUVudHJ5ICYm
ICFzdGQ6OmlzbmFuKCpjYWNoZUVudHJ5KSkKICAgICAgICAgcmV0dXJuICpjYWNoZUVudHJ5Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IGMzZjM3MDY2NjZiZGNm
YThmNDEzODU5NjJmMmNmZWRiMDU3YTk4ZTUuLjFlMTY0OGE5NDMwOTkzMTg3NThiZGNmNDJlM2Rm
MDExNGFkOGI4ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAg
LTc5LDkgKzc5LDIxIEBAIHN0cnVjdCBHbHlwaE92ZXJmbG93IHsKIGNsYXNzIEZvbnQgewogcHVi
bGljOgogICAgIEZvbnQoKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVjb25jaWxlIHRo
ZSBkaWZmZXJlbmNlIGluIGRhdGF0eXBlIGJldHdlZW4gaU9TIGFuZCBPcGVuU291cmNlLiBPbiBp
T1Mgd2Ugd2FudCBsZXR0ZXIsIHdvcmQgc3BhY2luZworICAgIC8vIHRvIGJlIGZsb2F0IGZvciBz
dWItcGl4ZWwga2VybmluZy4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA2MDY+LgorI2lmICFQTEFURk9STShJT1MpCiAgICAgRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBzaG9ydCBsZXR0ZXJTcGFjaW5nLCBzaG9ydCB3b3JkU3BhY2luZyk7CisjZWxz
ZQorICAgIEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgbGV0dGVyU3BhY2luZywg
ZmxvYXQgd29yZFNwYWNpbmcpOworI2VuZGlmCiAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBv
bmx5IHVzZWQgaWYgdGhlIHBsYXRmb3JtIHdhbnRzIHRvIHN0YXJ0IHdpdGggYSBuYXRpdmUgZm9u
dC4KICAgICBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzUHJpbnRpbmcsIEZv
bnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgUGFzc1JlZlB0cjxG
b250U2VsZWN0b3I+KTsKKyNlbmRpZgogICAgIH5Gb250KCk7CiAKICAgICBGb250KGNvbnN0IEZv
bnQmKTsKQEAgLTk4LDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZShQYXNzUmVm
UHRyPEZvbnRTZWxlY3Rvcj4pIGNvbnN0OwogCiAgICAgZW51bSBDdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24geyBEb05vdFBhaW50SWZGb250Tm90UmVhZHksIFVzZUZhbGxiYWNrSWZGb250Tm90UmVh
ZHkgfTsKLSAgICB2b2lkIGRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSwgQ3VzdG9tRm9u
dE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBjb25zdDsKKyAgICBm
bG9hdCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxv
YXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiA9IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CiAgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAt
MSkgY29uc3Q7CiAKICAgICBEYXNoQXJyYXkgZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0
KGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgZnJvbSwg
aW50IHRvLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRzKSBjb25zdDsKQEAgLTExNSwxMCAr
MTI3LDE5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTbWFsbENhcHMoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsgfQogCisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCByZWNvbmNpbGUgdGhlIGRpZmZlcmVuY2UgaW4gZGF0YXR5cGUgYmV0d2VlbiBpT1MgYW5k
IE9wZW5Tb3VyY2UuIE9uIGlPUyB3ZSB3YW50IGxldHRlciwgd29yZCBzcGFjaW5nCisgICAgLy8g
dG8gYmUgZmxvYXQgZm9yIHN1Yi1waXhlbCBrZXJuaW5nLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYwNj4uCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBz
aG9ydCB3b3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fd29yZFNwYWNpbmc7IH0KICAgICBz
aG9ydCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9CiAg
ICAgdm9pZCBzZXRXb3JkU3BhY2luZyhzaG9ydCBzKSB7IG1fd29yZFNwYWNpbmcgPSBzOyB9CiAg
ICAgdm9pZCBzZXRMZXR0ZXJTcGFjaW5nKHNob3J0IHMpIHsgbV9sZXR0ZXJTcGFjaW5nID0gczsg
fQorI2Vsc2UKKyAgICBmbG9hdCB3b3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fd29yZFNw
YWNpbmc7IH0KKyAgICBmbG9hdCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0
ZXJTcGFjaW5nOyB9CisgICAgdm9pZCBzZXRXb3JkU3BhY2luZyhmbG9hdCBzKSB7IG1fd29yZFNw
YWNpbmcgPSBzOyB9CisgICAgdm9pZCBzZXRMZXR0ZXJTcGFjaW5nKGZsb2F0IHMpIHsgbV9sZXR0
ZXJTcGFjaW5nID0gczsgfQorI2VuZGlmCiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsK
ICAgICBib29sIGlzUHJpbnRlckZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlv
bi51c2VQcmludGVyRm9udCgpOyB9CiAgICAgYm9vbCBpc1NWR0ZvbnQoKSBjb25zdCB7IHJldHVy
biBwcmltYXJ5Rm9udCgpLT5pc1NWR0ZvbnQoKTsgfQpAQCAtMTgwLDEwICsyMDEsMTAgQEAgcHJp
dmF0ZToKIAogICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCiAg
ICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4m
LCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0g
Tm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKLSAgICB2b2lkIGRyYXdTaW1wbGVUZXh0KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20s
IGludCB0bykgY29uc3Q7CisgICAgZmxvYXQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAgICAgdm9pZCBkcmF3R2x5cGhz
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZm
ZXImLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9p
ZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEdseXBoQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZvaWQgZHJhd0ds
eXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1
ZmZlciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0
IEF0b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICBmbG9hdCBmbG9h
dFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsK
ICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBm
bG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CkBAIC0xOTYs
NyArMjE3LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3Ry
ZWFtIGFkdmFuY2UuCiAgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0
RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICBmbG9hdCBkcmF3Q29tcGxleFRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Owog
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxv
dyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMp
IGNvbnN0OwpAQCAtMzA0LDggKzMyNSwxMyBAQCBwcml2YXRlOgogCiAgICAgRm9udERlc2NyaXB0
aW9uIG1fZm9udERlc2NyaXB0aW9uOwogICAgIG11dGFibGUgUmVmUHRyPEZvbnRHbHlwaHM+IG1f
Z2x5cGhzOworI2lmICFQTEFURk9STShJT1MpCiAgICAgc2hvcnQgbV9sZXR0ZXJTcGFjaW5nOwog
ICAgIHNob3J0IG1fd29yZFNwYWNpbmc7CisjZWxzZQorICAgIGZsb2F0IG1fbGV0dGVyU3BhY2lu
ZzsKKyAgICBmbG9hdCBtX3dvcmRTcGFjaW5nOworI2VuZGlmCiAgICAgbXV0YWJsZSBib29sIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3R5cGVzZXR0
aW5nRmVhdHVyZXMgOiAyOyAvLyAoVHlwZXNldHRpbmdGZWF0dXJlcykgQ2FjaGVzIHZhbHVlcyBj
b21wdXRlZCBmcm9tIG1fZm9udERlc2NyaXB0aW9uLgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCmluZGV4IGVkN2EyMDJkY2QwOTg5NjFjY2Y4
ZjY0YTBlZjdmNGQwODEzZGJmMWUuLmZiZThiZjQ0ZmQzN2RlY2Y0ZDkzNDRhODNiZmY0MDljOTA5
YjM2YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcApAQCAtNDUsMTQgKzQ1LDUwIEBACiAjaW5jbHVkZSAiT3BlblR5cGVWZXJ0aWNhbERhdGEu
aCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIk1lbW9yeVByZXNzdXJl
SGFuZGxlci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCisvLyBGSVhNRTogV2Ug
bWF5IGJlIGFibGUgdG8gc2ltcGxpZnkgdGhpcyBjb2RlIHVzaW5nIEMrKzExIHRocmVhZGluZyBw
cmltaXRpdmVzLCBpbmNsdWRpbmcgc3RkOjpjYWxsX29uY2UoKS4KK3N0YXRpYyBwdGhyZWFkX211
dGV4X3QgZm9udERhdGFMb2NrOworCitzdGF0aWMgdm9pZCBpbml0Rm9udENhY2hlTG9ja09uY2Uo
KQoreworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhBdHRyaWJ1dGU7CisgICAgcHRocmVh
ZF9tdXRleGF0dHJfaW5pdCgmbXV0ZXhBdHRyaWJ1dGUpOworICAgIHB0aHJlYWRfbXV0ZXhhdHRy
X3NldHR5cGUoJm11dGV4QXR0cmlidXRlLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7CisgICAg
cHRocmVhZF9tdXRleF9pbml0KCZmb250RGF0YUxvY2ssICZtdXRleEF0dHJpYnV0ZSk7CisgICAg
cHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmbXV0ZXhBdHRyaWJ1dGUpOworfQorCitzdGF0aWMg
cHRocmVhZF9vbmNlX3QgaW5pdEZvbnRMb2NrQ29udHJvbCA9IFBUSFJFQURfT05DRV9JTklUOwor
CitjbGFzcyBGb250TG9ja2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250TG9ja2Vy
KTsKK3B1YmxpYzoKKyAgICBGb250TG9ja2VyKCkKKyAgICB7CisgICAgICAgIHB0aHJlYWRfb25j
ZSgmaW5pdEZvbnRMb2NrQ29udHJvbCwgaW5pdEZvbnRDYWNoZUxvY2tPbmNlKTsKKyAgICAgICAg
aW50IGxvY2tjb2RlID0gcHRocmVhZF9tdXRleF9sb2NrKCZmb250RGF0YUxvY2spOworICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2NrY29kZSwgIWxvY2tjb2RlLCAiZm9udERh
dGFMb2NrIGxvY2sgZmFpbGVkIHdpdGggY29kZTolZCIsIGxvY2tjb2RlKTsgICAgCisgICAgfQor
ICAgIH5Gb250TG9ja2VyKCkKKyAgICB7CisgICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRf
bXV0ZXhfdW5sb2NrKCZmb250RGF0YUxvY2spOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
X1VOVVNFRChsb2NrY29kZSwgIWxvY2tjb2RlLCAiZm9udERhdGFMb2NrIHVubG9jayBmYWlsZWQg
d2l0aCBjb2RlOiVkIiwgbG9ja2NvZGUpOworICAgIH0KK307CisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQorCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8v
IEZJWE1FOiBXZSBzaG91bGQgcmV0dXJuIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVy
IHNpbmNlIHdlIG5ldmVyIHJldHVybiBhIG51bGxwdHIuCiBGb250Q2FjaGUqIGZvbnRDYWNoZSgp
CiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250Q2FjaGUsIGdsb2JhbEZvbnRDYWNoZSwg
KCkpOwotICAgIHJldHVybiAmZ2xvYmFsRm9udENhY2hlOworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxGb250Q2FjaGU+IGdsb2JhbEZvbnRDYWNoZTsKKyAgICByZXR1cm4gJmdsb2JhbEZvbnRD
YWNoZS5nZXQoKTsKIH0KIAogRm9udENhY2hlOjpGb250Q2FjaGUoKQpAQCAtMTg0LDYgKzIyMCwx
MCBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmbwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcGFzc2VkRmFt
aWx5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgRm9udExvY2tlciBmb250TG9ja2VyOworI2VuZGlmCisgICAgCiAjaWYgT1MoV0lORE9X
UykgJiYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQogICAgIC8vIExlYWRpbmcgIkAiIGluIHRo
ZSBmb250IG5hbWUgZW5hYmxlcyBXaW5kb3dzIHZlcnRpY2FsIGZsb3cgZmxhZyBmb3IgdGhlIGZv
bnQuCiAgICAgLy8gQmVjYXVzZSB3ZSBkbyB2ZXJ0aWNhbCBmbG93IGJ5IG91cnNlbHZlcywgd2Ug
ZG9uJ3Qgd2FudCB0byB1c2UgdGhlIFdpbmRvd3MgZmVhdHVyZS4KQEAgLTMxNyw4ICszNTcsMTUg
QEAgdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGEsIHN0ZDo6cGFpcjxSZWZQdHI8U2lt
cGxlRm9udERhdGE+LCB1bnNpZ25lZD4sIEYKIAogc3RhdGljIEZvbnREYXRhQ2FjaGUqIGdGb250
RGF0YUNhY2hlID0gMDsKIAorI2lmIFBMQVRGT1JNKElPUykKK2NvbnN0IGludCBjTWF4SW5hY3Rp
dmVGb250RGF0YSA9IDEyMDsKK2NvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDEw
MDsKK2NvbnN0IGludCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1
MDsKK2NvbnN0IGludCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEg
PSAzMDsKKyNlbHNlCiBjb25zdCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSAyMjU7CiBjb25z
dCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAyMDA7CisjZW5kaWYKIHN0YXRpYyBMaXN0
SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+PiogZ0luYWN0aXZlRm9udERhdGEgPSAwOwog
CiBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlseSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUsIFNob3VsZFJldGFpbiBzaG91
bGRSZXRhaW4pCkBAIC0zNDAsNiArMzg3LDEwIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSoKICAg
ICAgICAgQVNTRVJUKG1fcHVyZ2VQcmV2ZW50Q291bnQpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgRm9udExvY2tlciBmb250TG9ja2VyOworI2VuZGlmCisgICAgCiAgICAgaWYg
KCFnRm9udERhdGFDYWNoZSkgewogICAgICAgICBnRm9udERhdGFDYWNoZSA9IG5ldyBGb250RGF0
YUNhY2hlOwogICAgICAgICBnSW5hY3RpdmVGb250RGF0YSA9IG5ldyBMaXN0SGFzaFNldDxSZWZQ
dHI8U2ltcGxlRm9udERhdGE+PjsKQEAgLTM4MCw2ICs0MzEsMTAgQEAgdm9pZCBGb250Q2FjaGU6
OnJlbGVhc2VGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiAgICAgQVNT
RVJUKGdGb250RGF0YUNhY2hlKTsKICAgICBBU1NFUlQoIWZvbnREYXRhLT5pc0N1c3RvbUZvbnQo
KSk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgRm9udExvY2tlciBmb250TG9ja2VyOworI2Vu
ZGlmCisgICAgCiAgICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNo
ZS0+ZmluZChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwogICAgIEFTU0VSVChpdCAhPSBnRm9u
dERhdGFDYWNoZS0+ZW5kKCkpOwogICAgIGlmIChpdCA9PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkp
CkBAIC0zOTIsOCArNDQ3LDE3IEBAIHZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFj
dGl2ZUZvbnREYXRhSWZOZWVkZWQoKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIHVu
ZGVyTWVtb3J5UHJlc3N1cmUgPSBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5oYXNSZWNlaXZlZE1l
bW9yeVByZXNzdXJlKCk7CisgICAgaW50IGluYWN0aXZlRm9udERhdGFMaW1pdCA9IHVuZGVyTWVt
b3J5UHJlc3N1cmUgPyBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgOiBj
TWF4SW5hY3RpdmVGb250RGF0YTsKKyAgICBpbnQgdGFyZ2V0Rm9udERhdGFMaW1pdCA9IHVuZGVy
TWVtb3J5UHJlc3N1cmUgPyBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERh
dGEgOiBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YTsKKworICAgIGlmIChnSW5hY3RpdmVGb250RGF0
YSAmJiAhbV9wdXJnZVByZXZlbnRDb3VudCAmJiBnSW5hY3RpdmVGb250RGF0YS0+c2l6ZSgpID4g
aW5hY3RpdmVGb250RGF0YUxpbWl0KQorICAgICAgICBwdXJnZUluYWN0aXZlRm9udERhdGEoZ0lu
YWN0aXZlRm9udERhdGEtPnNpemUoKSAtIHRhcmdldEZvbnREYXRhTGltaXQpOworI2Vsc2UKICAg
ICBpZiAoZ0luYWN0aXZlRm9udERhdGEgJiYgIW1fcHVyZ2VQcmV2ZW50Q291bnQgJiYgZ0luYWN0
aXZlRm9udERhdGEtPnNpemUoKSA+IGNNYXhJbmFjdGl2ZUZvbnREYXRhKQogICAgICAgICBwdXJn
ZUluYWN0aXZlRm9udERhdGEoZ0luYWN0aXZlRm9udERhdGEtPnNpemUoKSAtIGNUYXJnZXRJbmFj
dGl2ZUZvbnREYXRhKTsKKyNlbmRpZgogfQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2
ZUZvbnREYXRhKGludCBjb3VudCkKQEAgLTQwOSw2ICs0NzMsMTAgQEAgdm9pZCBGb250Q2FjaGU6
OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgY291bnQpCiAKICAgICBpc1B1cmdpbmcgPSB0cnVl
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEZvbnRMb2NrZXIgZm9udExvY2tlcjsKKyNlbmRp
ZgorCiAgICAgVmVjdG9yPFJlZlB0cjxTaW1wbGVGb250RGF0YT4sIDIwPiBmb250RGF0YVRvRGVs
ZXRlOwogICAgIExpc3RIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4+OjppdGVyYXRvciBl
bmQgPSBnSW5hY3RpdmVGb250RGF0YS0+ZW5kKCk7CiAgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPFNp
bXBsZUZvbnREYXRhPj46Oml0ZXJhdG9yIGl0ID0gZ0luYWN0aXZlRm9udERhdGEtPmJlZ2luKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCmluZGV4IGI1
Y2YwOTE2Yzc3YjQzNTNlMzNjMzgxODJmOThlYTFkMWE2NDI4NTUuLjU2NzAyZWQzNDI5ZmRkNzFj
NjNjN2U4MzIwOWY4N2YyM2Q4NjY2MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0zMywxMiArMzMsMTcgQEAKICNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9V
bmljb2RlLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q29yZVRleHQvQ1RGb250
Lmg+CisjZW5kaWYKKwogI2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2lu
Y2x1ZGUgPG9iamlkbC5oPgpAQCAtMTAwLDkgKzEwNSw5IEBAIHN0cnVjdCBGb250RGVzY3JpcHRp
b25Gb250RGF0YUNhY2hlS2V5IHsKIH07CiAKIGNsYXNzIEZvbnRDYWNoZSB7Ci0gICAgZnJpZW5k
IGNsYXNzIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwotCiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRm9udENhY2hlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgZnJpZW5kIGNsYXNz
IEZvbnRDYWNoZVB1cmdlUHJldmVudGVyOworICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3ll
ZDxGb250Q2FjaGU+OwogcHVibGljOgogICAgIGZyaWVuZCBGb250Q2FjaGUqIGZvbnRDYWNoZSgp
OwogCkBAIC0xMTcsNiArMTIyLDkgQEAgcHVibGljOgogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQg
YnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CiAKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgc3RhdGljIGZsb2F0IHdlaWdodE9mQ1RGb250KENURm9udFJlZik7CisjZW5k
aWYKICNpZiBQTEFURk9STShXSU4pCiAgICAgSU1MYW5nRm9udExpbmtUeXBlKiBnZXRGb250TGlu
a0ludGVyZmFjZSgpOwogICAgIHN0YXRpYyB2b2lkIGNvbUluaXRpYWxpemUoKTsKQEAgLTE3OCw2
ICsxODYsMTAgQEAgcHJpdmF0ZToKICAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKIAogICAgIC8vIFRo
ZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdldEN1c3RvbUZhbGxiYWNrRm9udChjb25z
dCBVSW50MzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IGdldFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCk7CisjZW5kaWYKICAgICBQYXNzT3duUHRyPEZvbnRQbGF0Zm9ybURhdGE+
IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRv
bWljU3RyaW5nJiBmYW1pbHkpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBzaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mKTsKQEAgLTE5Myw2ICsyMDUsOSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgZnJpZW5kIGNs
YXNzIFNpbXBsZUZvbnREYXRhOyAvLyBGb3IgZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSopCiAgICAgZnJpZW5kIGNsYXNzIEZvbnRHbHlwaHM7CisjaWYgUExBVEZPUk0o
SU9TKQorICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXI7CisjZW5kaWYKIH07
CiAKIC8vIEdldCB0aGUgZ2xvYmFsIGZvbnRDYWNoZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCmluZGV4IDA3NDAxNzM1ZDczMWUyYmM0
YjFkYzQzYTM4YzQ1NjFjMzdhMzJkZTUuLjk1NjM0MzczZTk1NTdhNDk1MDI5YjJmOTBhMDRjMGFh
MzQwY2I2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRGYXN0UGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEZhc3RQYXRoLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQK
ICAgICByZXR1cm4gYmVmb3JlV2lkdGg7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd1NpbXBsZVRleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd1Np
bXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8v
IFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMrYWR2YW5jZXMrZm9udCBkYXRhIGZv
ciBlYWNoIGdseXBoLgogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwpAQCAtMTY2LDEwICsx
NjYsMTIgQEAgdm9pZCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmwKICAgICBmbG9hdCBzdGFydFggPSBwb2lu
dC54KCkgKyBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0bywg
Z2x5cGhCdWZmZXIpOwogCiAgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gMDsKIAogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChz
dGFydFgsIHBvaW50LnkoKSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5
cGhCdWZmZXIsIHN0YXJ0UG9pbnQpOworCisgICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3Rh
cnRYOwogfQogCiB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29u
c3QKQEAgLTE4Myw4ICsxODUsOCBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2lt
cGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdQogICAgIGRyYXdF
bXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQo
cG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOwogfQogCi12b2lkIEZvbnQ6
OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkgY29uc3QKLXsgICAKK3ZvaWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsIEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorewogI2lmICFFTkFCTEUoU1ZHX0ZP
TlRTKQogICAgIFVOVVNFRF9QQVJBTShydW4pOwogI2VuZGlmCkBAIC0yMjYsOSArMjI4LDExIEBA
IHZvaWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBpZiAo
cmVuZGVyaW5nQ29udGV4dCAmJiBmb250RGF0YS0+aXNTVkdGb250KCkpCiAgICAgICAgIHJlbmRl
cmluZ0NvbnRleHQtPmRyYXdTVkdHbHlwaHMoY29udGV4dCwgZm9udERhdGEsIGdseXBoQnVmZmVy
LCBsYXN0RnJvbSwgbmV4dEdseXBoIC0gbGFzdEZyb20sIHN0YXJ0UG9pbnQpOwotICAgIGVsc2UK
KyAgICBlbHNlIHsKICNlbmRpZgogICAgICAgICBkcmF3R2x5cGhzKGNvbnRleHQsIGZvbnREYXRh
LCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50
KTsKKyAgICAgICAgcG9pbnQuc2V0WChuZXh0WCk7CisgICAgfQogfQogCiBpbmxpbmUgc3RhdGlj
IGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwaChjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEsIEdseXBoIGdseXBoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udEdseXBocy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEdseXBocy5oCmluZGV4IDI5ZWRkZTc5MDlmNGQ2NDM0MjVjODJmNDI4MDlmM2JkMjEyZWM3NTku
LjRjNzBkN2RmMjdhOWZlNTZmZDE0NGZhZDc5MTc4ZTU3ZTE0YTMyNTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgKQEAgLTI3LDYgKzI3LDEwIEBA
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
CisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdseXBoUGFnZVRyZWVOb2RlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNw
cAppbmRleCAyMWJlYTM3MzU4NjMzZWVhMjc2YjY3ZjkzMGE0MDRiYWEwM2U1MjVjLi41MzA4ZWJk
ZmU1YzUyNTcwMWI5NWZhMzYxZWQzZTcwNTQxMjJhNmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcApAQCAtMzMsNiAr
MzMsOSBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSkKICAgICA6IG1fc3ludGhldGljQm9sZChmYWxzZSkKICAgICAsIG1f
c3ludGhldGljT2JsaXF1ZShmYWxzZSkKICAgICAsIG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkK
KyNpZiBQTEFURk9STShJT1MpCisgICAgLCBtX2lzRW1vamkoZmFsc2UpCisjZW5kaWYKICAgICAs
IG1fc2l6ZSgwKQogICAgICwgbV93aWR0aFZhcmlhbnQoUmVndWxhcldpZHRoKQogI2lmIFBMQVRG
T1JNKFdJTikKQEAgLTYwLDYgKzYzLDkgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YSgpCiAgICAgOiBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCiAgICAgLCBtX3N5bnRoZXRpY09i
bGlxdWUoZmFsc2UpCiAgICAgLCBtX29yaWVudGF0aW9uKEhvcml6b250YWwpCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgICwgbV9pc0Vtb2ppKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX3NpemUoMCkK
ICAgICAsIG1fd2lkdGhWYXJpYW50KFJlZ3VsYXJXaWR0aCkKICNpZiBPUyhEQVJXSU4pCkBAIC04
NSw2ICs5MSw5IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpCiAgICAgOiBtX3N5bnRoZXRpY0Jv
bGQoc3ludGhldGljQm9sZCkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShzeW50aGV0aWNPYmxp
cXVlKQogICAgICwgbV9vcmllbnRhdGlvbihvcmllbnRhdGlvbikKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgLCBtX2lzRW1vamkoZmFsc2UpCisjZW5kaWYKICAgICAsIG1fc2l6ZShzaXplKQogICAg
ICwgbV93aWR0aFZhcmlhbnQod2lkdGhWYXJpYW50KQogI2lmIE9TKERBUldJTikKQEAgLTExMSw2
ICsxMjAsOSBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiBj
Z0ZvbnQsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQgogICAgIDogbV9zeW50aGV0aWNCb2xk
KHN5bnRoZXRpY0JvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoc3ludGhldGljT2JsaXF1
ZSkKICAgICAsIG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24pCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICwgbV9pc0Vtb2ppKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAs
IG1fd2lkdGhWYXJpYW50KHdpZHRoVmFyaWFudCkKICAgICAsIG1fZm9udCgwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4
IDcwMGRiOTVkMDNlOWZlMzFjM2YxNjRhNDhiMDE5NTMxZjNjNWI5NTIuLjA1ZGZjYzMzYzgxODM1
NDY2OTVhNGY3NWE1NTdmNDYwNTA1MjQ2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTQ5LDYgKzQ5LDEwIEBACiAj
aWYgT1MoREFSV0lOKQogT0JKQ19DTEFTUyBOU0ZvbnQ7CiAKKyNpZiBQTEFURk9STShJT1MpCisj
aW1wb3J0IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKKwogdHlwZWRlZiBz
dHJ1Y3QgQ0dGb250KiBDR0ZvbnRSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NURm9udCog
Q1RGb250UmVmOwogI2VuZGlmCkBAIC03OSw3ICs4Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotI2lmIE9TKERB
UldJTikKKyNpZiBPUyhEQVJXSU4pICYmIFVTRShBUFBLSVQpCiBpbmxpbmUgQ1RGb250UmVmIHRv
Q1RGb250UmVmKE5TRm9udCAqbnNGb250KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PENURm9u
dFJlZj4obnNGb250KTsgfQogI2VuZGlmCiAKQEAgLTkyLDggKzk2LDE0IEBAIHB1YmxpYzoKICAg
ICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBz
eW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBGb250V2lkdGhW
YXJpYW50ID0gUmVndWxhcldpZHRoKTsKIAogI2lmIE9TKERBUldJTikKKyNpZiBVU0UoQVBQS0lU
KQogICAgIEZvbnRQbGF0Zm9ybURhdGEoTlNGb250KiwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50
ZXJGb250ID0gZmFsc2UsIGJvb2wgc3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRp
Y09ibGlxdWUgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgIEZvbnRPcmllbnRhdGlvbiA9
IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgpOworI2Vsc2UKKyAg
ICBGb250UGxhdGZvcm1EYXRhKENURm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJG
b250ID0gZmFsc2UsIGJvb2wgc3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY09i
bGlxdWUgPSBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgIEZvbnRPcmllbnRhdGlvbiA9IEhv
cml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgpOworI2VuZGlmCisKICNp
ZiBVU0UoQ0cpCiAgICAgRm9udFBsYXRmb3JtRGF0YShDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRpb24s
IEZvbnRXaWR0aFZhcmlhbnQpOwogI2VuZGlmCkBAIC0xMDcsMTEgKzExNywxOCBAQCBwdWJsaWM6
CiAjZW5kaWYKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEZvbnRQbGF0Zm9ybURh
dGEoQ1RGb250UmVmLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQgPSBmYWxzZSwgYm9v
bCBzeW50aGV0aWNPYmxpcXVlID0gZmFsc2UsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWws
IEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgpOworI2VuZGlmCisKICAgICB+Rm9udFBs
YXRmb3JtRGF0YSgpOwogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEhGT05UIGhmb250KCkgY29u
c3QgeyByZXR1cm4gbV9mb250ID8gbV9mb250LT5nZXQoKSA6IDA7IH0KICAgICBib29sIHVzZUdE
SSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlR0RJOyB9CisjZWxpZiBQTEFURk9STShJT1MpCisgICAg
Q1RGb250UmVmIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKyAgICB2b2lkIHNldEZv
bnQoQ1RGb250UmVmKTsKICNlbGlmIE9TKERBUldJTikKICAgICBOU0ZvbnQqIGZvbnQoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnQ7IH0KICAgICB2b2lkIHNldEZvbnQoTlNGb250Kik7CkBAIC0xMjIs
NyArMTM5LDEyIEBAIHB1YmxpYzoKICAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1
cm4gbV9jZ0ZvbnQuZ2V0KCk7IH0KICAgICBDVEZvbnRSZWYgY3RGb250KCkgY29uc3Q7CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIGJvb2wgcm91bmRzR2x5cGhBZHZhbmNlcygpIGNvbnN0Owor
I2Vsc2UKKyAgICBib29sIHJvdW5kc0dseXBoQWR2YW5jZXMoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKICAgICBib29sIGFsbG93c0xpZ2F0dXJl
cygpIGNvbnN0OwogI2Vsc2UKICAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1cm4g
bV9jZ0ZvbnQuZ2V0KCk7IH0KQEAgLTE1MywxMCArMTc1LDE1IEBAIHB1YmxpYzoKICNpZiBQTEFU
Rk9STShXSU4pICYmICFVU0UoQ0FJUk8pCiAgICAgICAgIHJldHVybiBtX2ZvbnQgPyBtX2ZvbnQt
Pmhhc2goKSA6IDA7CiAjZWxpZiBPUyhEQVJXSU4pCisjaWYgIVBMQVRGT1JNKElPUykKICNpZiBV
U0UoQ0cpCiAgICAgICAgIEFTU0VSVChtX2ZvbnQgfHwgIW1fY2dGb250KTsKICNlbmRpZgogICAg
ICAgICB1aW50cHRyX3QgaGFzaENvZGVzWzNdID0geyAodWludHB0cl90KW1fZm9udCwgbV93aWR0
aFZhcmlhbnQsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obV9pc1ByaW50ZXJGb250IDw8IDMgfCBt
X29yaWVudGF0aW9uIDw8IDIgfCBtX3N5bnRoZXRpY0JvbGQgPDwgMSB8IG1fc3ludGhldGljT2Js
aXF1ZSkgfTsKKyNlbHNlCisgICAgICAgIEFTU0VSVChtX2ZvbnQgfHwgIW1fY2dGb250IHx8IG1f
aXNFbW9qaSk7CisgICAgICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbM10gPSB7IHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oQ0ZIYXNoKG1fZm9udCkpLCBtX3dpZHRoVmFyaWFudCwgc3RhdGljX2Nhc3Q8
dWludHB0cl90PihtX2lzRW1vamkgPDwgNCB8IG1faXNQcmludGVyRm9udCA8PCAzIHwgbV9vcmll
bnRhdGlvbiA8PCAyIHwgbV9zeW50aGV0aWNCb2xkIDw8IDEgfCBtX3N5bnRoZXRpY09ibGlxdWUp
IH07CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKICAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hl
cjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKICNlbGlmIFVTRShD
QUlSTykKICAgICAgICAgcmV0dXJuIFB0ckhhc2g8Y2Fpcm9fc2NhbGVkX2ZvbnRfdCo+OjpoYXNo
KG1fc2NhbGVkRm9udCk7CkBAIC0yMDMsNyArMjMwLDkgQEAgcHJpdmF0ZToKICAgICBib29sIHBs
YXRmb3JtSXNFcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJikgY29uc3Q7CiAgICAgdm9pZCBw
bGF0Zm9ybURhdGFJbml0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKICAgICBjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGFBc3NpZ24oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYp
OwotI2lmIE9TKERBUldJTikKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhdGljIENURm9udFJl
ZiBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxD
VEZvbnRSZWY+KC0xKTsgfQorI2VsaWYgT1MoREFSV0lOKQogICAgIC8vIExvYWQgdmFyaW91cyBk
YXRhIGFib3V0IHRoZSBmb250IHNwZWNpZmllZCBieSB8bnNGb250fCB3aXRoIHRoZSBzaXplIGZv
bnRTaXplIGludG8gdGhlIGZvbGxvd2luZyBvdXRwdXQgcGFyYW10ZXJzOgogICAgIHZvaWQgbG9h
ZEZvbnQoTlNGb250KiwgZmxvYXQgZm9udFNpemUsIE5TRm9udComIG91dE5TRm9udCwgQ0dGb250
UmVmJik7CiAgICAgc3RhdGljIE5TRm9udCogaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKTsgfQpAQCAtMjE5LDExICsyNDgs
MTYgQEAgcHVibGljOgogICAgIGJvb2wgbV9zeW50aGV0aWNCb2xkOwogICAgIGJvb2wgbV9zeW50
aGV0aWNPYmxpcXVlOwogICAgIEZvbnRPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICBib29sIG1faXNFbW9qaTsKKyNlbmRpZgogICAgIGZsb2F0IG1fc2l6
ZTsKICAgICBGb250V2lkdGhWYXJpYW50IG1fd2lkdGhWYXJpYW50OwogCiBwcml2YXRlOgotI2lm
IE9TKERBUldJTikKKyNpZiBQTEFURk9STShJT1MpCisgICAgQ1RGb250UmVmIG1fZm9udDsKKyNl
bGlmIE9TKERBUldJTikKICAgICBOU0ZvbnQqIG1fZm9udDsKICNlbGlmIFBMQVRGT1JNKFdJTikK
ICAgICBSZWZQdHI8U2hhcmVkR0RJT2JqZWN0PEhGT05UPj4gbV9mb250OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCmlu
ZGV4IDY0NTRlNzNlNzZlOWRiOGYzYmVhM2E0YWYyM2M0N2U3OTNjZGNiMGEuLmNhZWY1ZTlkNjlk
YTJkZTRlMTQ2OTQ2MDY5NzYwZjhlZjVkYjg1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKQEAgLTIxMiw2ICsy
MTIsMTQgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6aW5pdGlhbGl6ZVBhZ2UoY29uc3QgRm9u
dERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBwYWdlTnUKICAgICAgICAgICAgICAgICAgICAgbV9w
YWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnREYXRhKHRoaXMpOwogICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgbV9wYWdlID0gR2x5cGhQYWdlOjpjcmVh
dGVGb3JTaW5nbGVGb250RGF0YSh0aGlzLCBzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KGZvbnREYXRhKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaW1lcyBOZXcgUm9tYW4gY29udGFpbnMgQXJhYmljIGdseXBocywgYnV0IENvcmUgVGV4
dCBkb2Vzbid0IGtub3cgaG93IHRvIHNoYXBlIHRoZW0uIFNlZSA8cmRhcjovL3Byb2JsZW0vOTgy
Mzk3NT4uCisgICAgICAgICAgICAgICAgLy8gT25jZSB3ZSBoYXZlIHRoZSBmaXggZm9yIDxyZGFy
Oi8vcHJvYmxlbS85ODIzOTc1PiB0aGVuIHJlbW92ZSB0aGlzIGNvZGUgdG9nZXRoZXIgd2l0aCBT
aW1wbGVGb250RGF0YTo6c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkKKyAgICAgICAgICAgICAg
ICAvLyBpbiA8cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+LgorICAgICAgICAgICAgICAgIGlmIChw
YWdlTnVtYmVyID09IDYgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihmb250
RGF0YSktPnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQorICAgICAgICAgICAgICAgICAgICBo
YXZlR2x5cGhzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmCiAgICAgICAg
ICAgICAgICAgaGF2ZUdseXBocyA9IGZpbGwobV9wYWdlLmdldCgpLCAwLCBHbHlwaFBhZ2U6OnNp
emUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KGZvbnREYXRhKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1f
cGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSh0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmlu
ZGV4IDBjNDVlYmUwNzcyMjgwN2MyNzM1MjBkODE4ZTU2YTRhOGJkYTExZTguLmYxMmYwMmE2ZjZm
ODU2NjlmZTJkN2IyYzAzOTA3YTVjMDNlMzg3OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNzYsMTIgKzc2LDIx
IEBAIHByaXZhdGU6CiAgICAgaW50IG1fb2Zmc2V0OwogfTsKIAorI2lmICFQTEFURk9STShJT1Mp
CiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQpCiAgICAgOiBtX3VwZGF0aW5nQ29udHJvbFRpbnRz
KGZhbHNlKQogICAgICwgbV90cmFuc3BhcmVuY3lDb3VudCgwKQogewogICAgIHBsYXRmb3JtSW5p
dChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7CiB9CisjZWxzZQorR3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0LCBib29sIHNob3VsZFVzZUNvbnRleHRDb2xvcnMpCisgICAgOiBtX3VwZGF0aW5nQ29u
dHJvbFRpbnRzKGZhbHNlKQorICAgICwgbV90cmFuc3BhcmVuY3lDb3VudCgwKQoreworICAgIHBs
YXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgc2hvdWxkVXNlQ29udGV4dENvbG9y
cyk7Cit9CisjZW5kaWYKIAogR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKIHsK
QEAgLTExNSw2ICsxMjQsMjggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQogICAg
IHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBDb2xvclNwYWNlIGVsbGlwc2VDb2xvclNwYWNlLCBj
b25zdCBDb2xvciYgc2hhZG93Q29sb3IsIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZSkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzYXZl
KCk7CisKKyAgICBzZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvciwgc2hhZG93Q29sb3JTcGFjZSk7
CisgICAgc2V0RmlsbENvbG9yKHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKKworICAg
IGRyYXdFbGxpcHNlKEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpKTsKKworICAgIHNldFN0cm9rZUNvbG9yKGVsbGlwc2VDb2xvciwg
ZWxsaXBzZUNvbG9yU3BhY2UpOworICAgIHNldEZpbGxDb2xvcihlbGxpcHNlQ29sb3IsIGVsbGlw
c2VDb2xvclNwYWNlKTsKKworICAgIGRyYXdFbGxpcHNlKHJlY3QpOyAgCisKKyAgICByZXN0b3Jl
KCk7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVRoaWNrbmVz
cyhmbG9hdCB0aGlja25lc3MpCiB7CiAgICAgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0aGlj
a25lc3M7CkBAIC00MDQsNiArNDM1LDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6OnBhaW50aW5n
RGlzYWJsZWQoKSBjb25zdAogICAgIHJldHVybiBtX3N0YXRlLnBhaW50aW5nRGlzYWJsZWQ7CiB9
CiAKKy8vIEZJWE1FOiBSZXBsYWNlIHRoZSBub24taU9TIGltcGxlbWVudGF0aW9uIHdpdGggdGhl
IGlPUyBpbXBsZW1lbnRhdGlvbiBzaW5jZSB0aGUgbGF0dGVyIGNvbXB1dGVzIHJldHVybnMKKy8v
IHRoZSB3aWR0aCBvZiB0aGUgZHJhd24gdGV4dC4gRW5zdXJlIHRoYXQgdGhlcmUgYXJlbid0IG5v
dGljZWFibGUgZGlmZmVyZW5jZXMgaW4gbGF5b3V0LgorI2lmICFQTEFURk9STShJT1MpCiAjaWYg
IVVTRShXSU5HREkpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZy
b20sIGludCB0bykKIHsKQEAgLTQxMyw2ICs0NDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXQKICAgICBmb250LmRyYXdUZXh0KHRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KICNl
bmRpZgorI2Vsc2UKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZy
b20sIGludCB0bykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBmb250LmRyYXdUZXh0KHRoaXMsIHJ1biwgcG9pbnQsIGZyb20s
IHRvKTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKQogewpAQCAtNDIyLDIxICs0NjUsNDQgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY28KICAgICBmb250LmRyYXdFbXBoYXNpc01hcmtzKHRoaXMsIHJ1biwgbWFyaywgcG9pbnQs
IGZyb20sIHRvKTsKIH0KIAorLy8gRklYTUU6IEJldHRlciBtZXJnZSB0aGUgaU9TIGFuZCBub24t
aU9TIGRpZmZlcmVuY2VzLiBJbiBwYXJ0aWN1bGFyLCBtYWtlIHRoaXMgbWV0aG9kIHVzZSB0aGUK
Ky8vIHJldHVybmVkIHdpZHRoIG9mIHRoZSBkcmF3biB0ZXh0LCBGb250OjpkcmF3VGV4dCgpLCBp
bnN0ZWFkIG9mIGNvbXB1dGluZyBpdC4gRW5zdXJlIHRoYXQgdGhlcmUKKy8vIGFyZW4ndCBub3Rp
Y2VhYmxlIGRpZmZlcmVuY2VzIGluIGxheW91dCB3aXRoIHN1Y2ggYSBjaGFuZ2UuCisjaWYgIVBM
QVRGT1JNKElPUykKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9u
dDo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKKyNl
bHNlCitmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBmb250
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250OjpDdXN0
b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uLCBCaWRpU3RhdHVz
KiBzdGF0dXMsIGludCBsZW5ndGgpCisjZW5kaWYKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgICAg
IHJldHVybiAwOworI2VuZGlmCiAKICAgICBCaWRpUmVzb2x2ZXI8VGV4dFJ1bkl0ZXJhdG9yLCBC
aWRpQ2hhcmFjdGVyUnVuPiBiaWRpUmVzb2x2ZXI7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBi
aWRpUmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGly
ZWN0aW9uYWxPdmVycmlkZSgpKSk7CisjZWxzZQorICAgIGJpZGlSZXNvbHZlci5zZXRTdGF0dXMo
c3RhdHVzID8gKnN0YXR1cyA6IEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0
aW9uYWxPdmVycmlkZSgpKSk7CisjZW5kaWYKICAgICBiaWRpUmVzb2x2ZXIuc2V0UG9zaXRpb25J
Z25vcmluZ05lc3RlZElzb2xhdGVzKFRleHRSdW5JdGVyYXRvcigmcnVuLCAwKSk7CiAKICAgICAv
LyBGSVhNRTogVGhpcyBvd25lcnNoaXAgc2hvdWxkIGJlIHJldmVyc2VkLiBXZSBzaG91bGQgcGFz
cyBCaWRpUnVuTGlzdAogICAgIC8vIHRvIEJpZGlSZXNvbHZlciBpbiBjcmVhdGVCaWRpUnVuc0Zv
ckxpbmUuCiAgICAgQmlkaVJ1bkxpc3Q8QmlkaUNoYXJhY3RlclJ1bj4mIGJpZGlSdW5zID0gYmlk
aVJlc29sdmVyLnJ1bnMoKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGJpZGlSZXNvbHZlci5j
cmVhdGVCaWRpUnVuc0ZvckxpbmUoVGV4dFJ1bkl0ZXJhdG9yKCZydW4sIHJ1bi5sZW5ndGgoKSkp
OworI2Vsc2UKKyAgICBiaWRpUmVzb2x2ZXIuY3JlYXRlQmlkaVJ1bnNGb3JMaW5lKFRleHRSdW5J
dGVyYXRvcigmcnVuLCBsZW5ndGggPCAwID8gcnVuLmxlbmd0aCgpIDogbGVuZ3RoKSk7CisjZW5k
aWYgICAgCiAgICAgaWYgKCFiaWRpUnVucy5ydW5Db3VudCgpKQorI2lmICFQTEFURk9STShJT1Mp
CiAgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgICAgIHJldHVybiAwOworI2VuZGlmCiAKICAg
ICBGbG9hdFBvaW50IGN1cnJQb2ludCA9IHBvaW50OwogICAgIEJpZGlDaGFyYWN0ZXJSdW4qIGJp
ZGlSdW4gPSBiaWRpUnVucy5maXJzdFJ1bigpOwpAQCAtNDQ2LDE1ICs1MTIsMzAgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEYKICAgICAgICAgc3VicnVuLnNldERpcmVjdGlvbihpc1JUTCA/IFJU
TCA6IExUUik7CiAgICAgICAgIHN1YnJ1bi5zZXREaXJlY3Rpb25hbE92ZXJyaWRlKGJpZGlSdW4t
PmRpck92ZXJyaWRlKGZhbHNlKSk7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBmb250
LmRyYXdUZXh0KHRoaXMsIHN1YnJ1biwgY3VyclBvaW50LCAwLCAtMSwgY3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uKTsKIAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgpOwogICAgICAg
ICAvLyBGSVhNRTogSGF2ZSBGb250OjpkcmF3VGV4dCByZXR1cm4gdGhlIHdpZHRoIG9mIHdoYXQg
aXQgZHJldyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtbWVhc3VyZSBoZXJlLgogICAgICAg
ICBpZiAoYmlkaVJ1bikKICAgICAgICAgICAgIGN1cnJQb2ludC5tb3ZlKGZvbnQud2lkdGgoc3Vi
cnVuKSwgMCk7CisjZWxzZQorICAgICAgICBmbG9hdCB3aWR0aCA9IGZvbnQuZHJhd1RleHQodGhp
cywgc3VicnVuLCBjdXJyUG9pbnQsIDAsIC0xLCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwor
ICAgICAgICBjdXJyUG9pbnQubW92ZSh3aWR0aCwgMCk7CisKKyAgICAgICAgYmlkaVJ1biA9IGJp
ZGlSdW4tPm5leHQoKTsKKyNlbmRpZgogICAgIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBp
ZiAoc3RhdHVzKQorICAgICAgICAqc3RhdHVzID0gYmlkaVJlc29sdmVyLnN0YXR1cygpOworI2Vu
ZGlmCiAgICAgYmlkaVJ1bnMuZGVsZXRlUnVucygpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IHJldHVybiBjdXJyUG9pbnQueCgpIC0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBvaW50LngoKSk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdIaWdobGlnaHRGb3JUZXh0KGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGludCBoLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGludCBmcm9tLCBpbnQgdG8pCkBAIC02MTUsNiArNjk2LDE4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgUm91bmRlZFJlY3QmIHJlY3QpCiAgICAg
Y2xpcChwYXRoKTsKIH0KIAorLy8gRklYTUU6IENvbnNpZGVyIHdyaXRpbmcgdGhpcyBpbiB0ZXJt
cyBvZiBhIHNwZWNpYWxpemVkIFJvdW5kZWRSZWN0IHRoYXQgdXNlcyBGbG9hdFJlY3QgYW5kIEZs
b2F0U2l6ZSByYWRpaS4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnQsIGNvbnN0IEZsb2F0
U2l6ZSYgdG9wUmlnaHQsCisgICAgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBG
bG9hdFNpemUmIGJvdHRvbVJpZ2h0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0
KHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7CisgICAg
Y2xpcChwYXRoKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVj
dChjb25zdCBSb3VuZGVkUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQpAQCAtNzMyLDYgKzgyNSwxOCBAQCBCbGVuZE1vZGUgR3JhcGhpY3NDb250ZXh0OjpibGVuZE1v
ZGVPcGVyYXRpb24oKSBjb25zdAogICAgIHJldHVybiBtX3N0YXRlLmJsZW5kTW9kZTsKIH0KIAor
I2lmIFBMQVRGT1JNKElPUykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0OjplbW9qaURyYXdpbmdFbmFi
bGVkKCkKK3sKKyAgICByZXR1cm4gbV9zdGF0ZS5lbW9qaURyYXdpbmdFbmFibGVkOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RW1vamlEcmF3aW5nRW5hYmxlZChib29sIGVtb2ppRHJh
d2luZ0VuYWJsZWQpCit7CisgICAgbV9zdGF0ZS5lbW9qaURyYXdpbmdFbmFibGVkID0gZW1vamlE
cmF3aW5nRW5hYmxlZDsKK30KKyNlbmRpZgorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RHJh
d0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykKIHsKICAgICBtX3N0YXRlLmRy
YXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDE3YzRjZTRkZDcz
MWUzMzQzODNmY2YxNGQ2N2I1NTNlZjMzZTJkM2MuLjRjYThlOTMwZGRmMTg0OWI3ZTU4ODQwMDQw
ZDUzZGY0OWVkMmRhMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC05Myw2ICs5Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKICAgICBjbGFzcyBUZXh0UnVuOwogICAg
IGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdHJ1
Y3QgQmlkaVN0YXR1czsKKyNlbmRpZgogCiAgICAgZW51bSBUZXh0RHJhd2luZ01vZGUgewogICAg
ICAgICBUZXh0TW9kZUZpbGwgPSAxIDw8IDAsCkBAIC0xMzYsNiArMTM5LDEwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgc2hhZG93Q29sb3JTcGFjZShDb2xvclNwYWNlRGV2
aWNlUkdCKQogICAgICAgICAgICAgLCBjb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVTb3VyY2VP
dmVyKQogICAgICAgICAgICAgLCBibGVuZE1vZGUoQmxlbmRNb2RlTm9ybWFsKQorI2lmIFBMQVRG
T1JNKElPUykKKyAgICAgICAgICAgICwgZW1vamlEcmF3aW5nRW5hYmxlZCh0cnVlKQorICAgICAg
ICAgICAgLCBzaG91bGRVc2VDb250ZXh0Q29sb3JzKHRydWUpCisjZW5kaWYKICAgICAgICAgICAg
ICwgc2hvdWxkQW50aWFsaWFzKHRydWUpCiAgICAgICAgICAgICAsIHNob3VsZFNtb290aEZvbnRz
KHRydWUpCiAgICAgICAgICAgICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyh0cnVlKQpA
QCAtMTc3LDYgKzE4NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yOwogICAgICAgICBCbGVuZE1vZGUgYmxlbmRNb2Rl
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBib29sIGVtb2ppRHJhd2luZ0VuYWJsZWQg
OiAxOworICAgICAgICBib29sIHNob3VsZFVzZUNvbnRleHRDb2xvcnMgOiAxOworI2VuZGlmCiAg
ICAgICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzIDogMTsKICAgICAgICAgYm9vbCBzaG91bGRTbW9v
dGhGb250cyA6IDE7CiAgICAgICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDog
MTsKQEAgLTE4OCwxMCArMTk5LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9v
bCBkcmF3THVtaW5hbmNlTWFzayA6IDE7CiAgICAgfTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICB2b2lkIHNldFN0cm9rZUFuZEZpbGxDb2xvcihQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCosIENH
Q29sb3JSZWYpOworI2VuZGlmCisKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQgewogICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKICAgICBwdWJsaWM6CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CisjZWxzZQorICAgICAgICBHcmFw
aGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqLCBib29sIHNob3VsZFVzZUNvbnRl
eHRDb2xvcnMgPSB0cnVlKTsKKyNlbmRpZgogICAgICAgICB+R3JhcGhpY3NDb250ZXh0KCk7CiAK
ICAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
OwpAQCAtMjQzLDcgKzI2MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
YXBwbHlGaWxsUGF0dGVybigpOwogICAgICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsK
IAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoUGFzc05h
dGl2ZUltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBmbG9hdCBzY2FsZSwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VP
dmVyLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb24gPSBEZWZh
dWx0SW1hZ2VPcmllbnRhdGlvbik7CisjZWxzZQogICAgICAgICB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShQYXNzTmF0aXZlSW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlciwg
QmxlbmRNb2RlID0gQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uID0gRGVmYXVsdElt
YWdlT3JpZW50YXRpb24pOworI2VuZGlmCiAKICAgICAgICAgLy8gQWxsb3cgZm9udCBzbW9vdGhp
bmcgKExDRCBhbnRpYWxpYXNpbmcpLiBOb3QgcGFydCBvZiB0aGUgZ3JhcGhpY3Mgc3RhdGUuCiAg
ICAgICAgIHZvaWQgc2V0QWxsb3dzRm9udFNtb290aGluZyhib29sKTsKQEAgLTI2NCw3ICsyODcs
MTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBzdHJva2UgY29sb3IpLgogICAg
ICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50Jik7CisKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgIHZvaWQgZHJhd0pvaW5lZExpbmVzKENHUG9pbnQgcG9pbnRzW10sIHVuc2lnbmVk
IGNvdW50LCBib29sIGFudGlhbGlhcywgQ0dMaW5lQ2FwID0ga0NHTGluZUNhcEJ1dHQpOworI2Vu
ZGlmCisKICAgICAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0Jik7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgICAgICB2b2lkIGRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJiBlbGxpcHNlQ29sb3IsIENvbG9yU3BhY2UgZWxsaXBzZUNvbG9yU3BhY2UsIGNvbnN0IENv
bG9yJiBzaGFkb3dDb2xvciwgQ29sb3JTcGFjZSBzaGFkb3dDb2xvclNwYWNlKTsKKyNlbmRpZgog
ICAgICAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZs
b2F0UG9pbnQqLCBib29sIHNob3VsZEFudGlhbGlhcyA9IGZhbHNlKTsKIAogICAgICAgICB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKQEAgLTMxMSw2ICszNDMsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIGNsaXAoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lk
IGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgICAgIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNv
bnN0IFJvdW5kZWRSZWN0Jik7CisKKyAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHdyaXRpbmcg
dGhpcyBpbiB0ZXJtcyBvZiBhIHNwZWNpYWxpemVkIFJvdW5kZWRSZWN0IHRoYXQgdXNlcyBGbG9h
dFJlY3QgYW5kIEZsb2F0U2l6ZSByYWRpaS4KKyAgICAgICAgdm9pZCBjbGlwUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0LCBjb25zdCBGbG9hdFNp
emUmIHRvcFJpZ2h0LCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEZsb2F0U2l6
ZSYgYm90dG9tUmlnaHQpOworCiAgICAgICAgIHZvaWQgY2xpcE91dChjb25zdCBJbnRSZWN0Jik7
CiAgICAgICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IFJvdW5kZWRSZWN0Jik7CiAg
ICAgICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKTsKQEAgLTMyMiw5ICsz
NTgsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBUZXh0RHJhd2luZ01vZGVGbGFn
cyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01v
ZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBi
b29sIGVtb2ppRHJhd2luZ0VuYWJsZWQoKTsKKyAgICAgICAgdm9pZCBzZXRFbW9qaURyYXdpbmdF
bmFibGVkKGJvb2wpOworI2VuZGlmCisgICAgICAgIAorI2lmICFQTEFURk9STShJT1MpCiAgICAg
ICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9h
dFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisjZWxzZQorICAgICAgICBmbG9h
dCBkcmF3VGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGRyYXdF
bXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiAsIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEp
OworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZv
bnQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnQ6OkN1c3RvbUZvbnRO
b3RSZWFkeUFjdGlvbiA9IEZvbnQ6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CisjZWxzZQor
ICAgICAgICBmbG9hdCBkcmF3QmlkaVRleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBGbG9hdFBvaW50JiwgRm9udDo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udDo6
RG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBCaWRpU3RhdHVzKiA9IDAsIGludCBsZW5ndGggPSAt
MSk7CisjZW5kaWYKICAgICAgICAgdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yVGV4dChjb25zdCBGb250
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaCwgY29uc3QgQ29sb3Im
IGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZSwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7
CiAKICAgICAgICAgZW51bSBSb3VuZGluZ01vZGUgewpAQCAtMzM2LDYgKzM4NSw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgRmxvYXRSZWN0IGNvbXB1dGVMaW5lQm91bmRzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpOwogICAgICAg
ICB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpOwogICAgICAgICBlbnVtIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VX
aXRoQWx0ZXJuYXRpdmVzTGluZVN0eWxlLAorI2VuZGlmCiAgICAgICAgICAgICBEb2N1bWVudE1h
cmtlclNwZWxsaW5nTGluZVN0eWxlLAogICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXJHcmFtbWFy
TGluZVN0eWxlLAogICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXJBdXRvY29ycmVjdGlvblJlcGxh
Y2VtZW50TGluZVN0eWxlLApAQCAtNDk2LDcgKzU0OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBv
aW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSk7
CiAKICAgICBwcml2YXRlOgorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIHZvaWQgcGxhdGZv
cm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CisjZWxzZQorICAgICAgICB2b2lkIHBs
YXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCosIGJvb2wgc2hvdWxkVXNlQ29udGV4
dENvbG9ycyk7CisjZW5kaWYKICAgICAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIAogI2lm
IFBMQVRGT1JNKFdJTikgJiYgIVVTRShXSU5HREkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCA5ZTI0NDkwNDI2ODcx
YzRhNGNlZWNlYjY5N2QzOWE4NTdhODQzYzVkLi44MTU4OGZmNTFiMjgyYjcwZTgxYWRiMTU2MmU0
MDVlMDE4MzUyODdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTU0LDYgKzU0LDEyIEBACiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8T3BlbkdMRVMvRVMy
L2dsLmg+CisjaWZkZWYgX19PQkpDX18KKyNpbXBvcnQgPE9wZW5HTEVTL0VBR0wuaD4KKyNlbmRp
ZiAvLyBfX09CSkNfXworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiBPQkpDX0NMQVNTIENBTGF5ZXI7CiBPQkpDX0NMQVNTIFdlYkdMTGF5ZXI7CkBA
IC02MSw3ICs2NywxMyBAQCBPQkpDX0NMQVNTIFdlYkdMTGF5ZXI7CiB0eXBlZGVmIHVuc2lnbmVk
IGludCBHTHVpbnQ7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJ
T1MpCisjaWZkZWYgX19PQkpDX18KK3R5cGVkZWYgRUFHTENvbnRleHQqIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0Q7CisjZWxzZQordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEOworI2VuZGlmIC8vIF9fT0JKQ19fCisjZWxpZiBQTEFURk9STShNQUMpCiB0eXBlZGVmIHN0
cnVjdCBfQ0dMQ29udGV4dE9iamVjdCAqQ0dMQ29udGV4dE9iajsKIAogdHlwZWRlZiBDR0xDb250
ZXh0T2JqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7CkBAIC03OTEsNiArODAzLDEwIEBAIHB1
YmxpYzoKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9J
bWFnZURhdGEoRHJhd2luZ0J1ZmZlciopOwogICAgIGJvb2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvQ2FudmFzKEltYWdlQnVmZmVyKik7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBl
bmRQYWludCgpOworI2VuZGlmCisKICNpZiBQTEFURk9STShCTEFDS0JFUlJZKQogICAgIGJvb2wg
cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogI2VuZGlmCkBAIC05MzMsNiArOTQ5LDEw
IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNz
YXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBw
aXhlbHMpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgYm9vbCBzZXRSZW5kZXJi
dWZmZXJTdG9yYWdlRnJvbURyYXdhYmxlKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCk7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgdm9pZCBsb2dGcmFt
ZUJ1ZmZlclN0YXR1cyhpbnQgbGluZSk7CiAgICAgdm9pZCByZWFkUGl4ZWxzSU1HKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSk7CkBAIC05NDcsNyArOTY3LDEwIEBA
IHByaXZhdGU6CiAgICAgaW50IG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQ7CiAgICAg
Ym9vbCBpc1Jlc291cmNlU2FmZSgpOwogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JN
KElPUykKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIG1fY29udGV4dE9iajsKKyAgICBS
ZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV93ZWJHTExheWVyOworI2VsaWYgUExBVEZPUk0oTUFD
KQogICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAgIFJldGFpblB0cjxXZWJHTExh
eWVyPiBtX3dlYkdMTGF5ZXI7CiAjZWxpZiBQTEFURk9STShXSU4pICYmIFVTRShDQSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5k
ZXggMmY3ZGU1ZWFjY2ExNDgzMGI3N2U5ZjkwZWFmNzA4MWM4Y2Y5OGQxMy4uNzE5ODM4MzkzYjQ1
MjU3Mjg1OTlhZmQ0OWU3ZDBiOGVkOTFmZjkxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKQEAgLTExNyw3ICsxMTcsNiBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCiAgICAgaWYgKG1fY2xpZW50KQog
ICAgICAgICBtX2NsaWVudC0+dmVyaWZ5Tm90UGFpbnRpbmcoKTsKICNlbmRpZgotCiAgICAgaWYg
KG1fcmVwbGljYUxheWVyKQogICAgICAgICBtX3JlcGxpY2FMYXllci0+c2V0UmVwbGljYXRlZExh
eWVyKDApOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyLmgKaW5kZXggNTFmZDc2MDEyNzI5ZGNhNzY4ZDIxMmViN2QzNmM4NGYxNjk0ZGI1Yi4u
Y2U2MDQxMDhmZTVlZTNlODg4MzBiM2M3NzJmYjdiY2YxZjlmZTExNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaApAQCAtMzg3LDYgKzM4
Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdl
KikgeyB9CiAgICAgdmlydHVhbCBib29sIHNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UoSW1h
Z2UqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
VG9NZWRpYShQbGF0Zm9ybUxheWVyKikgeyB9IC8vIHZpZGVvIG9yIHBsdWctaW4KKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyRm9yTWVk
aWEoKSBjb25zdCB7IHJldHVybiAwOyB9CisjZW5kaWYKICAgICAvLyBQYXNzIGFuIGludmFsaWQg
Y29sb3IgdG8gcmVtb3ZlIHRoZSBjb250ZW50cyBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3QgQ29sb3ImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKikgeyB9CkBAIC00MzcsNiArNDQwLDEw
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRNYWludGFpbnNQaXhlbEFsaWdubWVu
dChib29sIG1haW50YWluc0FsaWdubWVudCkgeyBtX21haW50YWluc1BpeGVsQWxpZ25tZW50ID0g
bWFpbnRhaW5zQWxpZ25tZW50OyB9CiAgICAgdmlydHVhbCBib29sIG1haW50YWluc1BpeGVsQWxp
Z25tZW50KCkgY29uc3QgeyByZXR1cm4gbV9tYWludGFpbnNQaXhlbEFsaWdubWVudDsgfQorI2lm
IFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBwaXhlbEFsaWdubWVudE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0U2l6ZSgpOyB9CisgICAgYm9vbCBoYXNGbGF0dGVuZWRQ
ZXJzcGVjdGl2ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuICFwcmVzZXJ2ZXMzRCgpICYmIG1f
Y2hpbGRyZW5UcmFuc2Zvcm0uaGFzUGVyc3BlY3RpdmUoKTsgfQorI2VuZGlmCiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIHNldEFwcGxpZXNQYWdlU2NhbGUoYm9vbCBhcHBsaWVzU2NhbGUgPSB0cnVl
KSB7IG1fYXBwbGllc1BhZ2VTY2FsZSA9IGFwcGxpZXNTY2FsZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBhcHBsaWVzUGFnZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBsaWVzUGFnZVNjYWxlOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKaW5kZXggMmFiN2NhMGYzYjI4
NjQ0ZWExMmEwYTdhOGJlMmJhYWNiYTVhZDAwZi4uODI3OThjMzA2OTUwODczYWI0ZWRhNzVlNWEw
NzI1MTcyMGZkNzFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSWNvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaApA
QCAtMjYsNyArMjYsMTEgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisjaW5j
bHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBo
aWNzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VsaWYgUExBVEZPUk0oTUFDKQog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIE9CSkNfQ0xBU1MgTlNJbWFnZTsKICNlbGlmIFBM
QVRGT1JNKFdJTikKQEAgLTUyLDggKzU2LDE2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJY29uPiBjcmVhdGUoSElDT04gaEljb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29u
KGhJY29uKSk7IH0KICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBN
YWtlIHRoaXMgd29yayBmb3Igbm9uLWlPUyBwb3J0cyBhbmQgcmVtb3ZlIHRoZSBQTEFURk9STShJ
T1MpLWd1YXJkLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEljb24+IGNyZWF0ZUljb25Gb3JJbWFn
ZShOYXRpdmVJbWFnZVB0cik7CisjZW5kaWYKKwogcHJpdmF0ZToKLSNpZiBQTEFURk9STShNQUMp
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEljb24oQ0dJbWFnZVJlZik7CisgICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IG1fY2dJbWFnZTsKKyNlbGlmIFBMQVRGT1JNKE1BQykKICAgICBJY29uKE5T
SW1hZ2UqKTsKICAgICBSZXRhaW5QdHI8TlNJbWFnZT4gbV9uc0ltYWdlOwogI2VsaWYgUExBVEZP
Uk0oV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCmluZGV4
IGU1MjgzNDI0NDM4MTg2ZTM2ZGY5YzVhMDllMjI2OGJlNTQwYjY4ZDYuLjBlMzY1MWEzY2ExNDFl
NDU2NGI1NjJhMjczYzc0NzZiOTI4NDIxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZS5jcHAKQEAgLTEzMCwxMSArMTMwLDY2IEBAIHZvaWQgSW1hZ2U6OmRyYXdU
aWxlZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAg
Ly8gV2hlbiB1c2luZyBhY2NlbGVyYXRlZCBkcmF3aW5nIG9uIGlPUywgaXQncyBmYXN0ZXIgdG8g
c3RyZXRjaCBhbiBpbWFnZSB0aGFuIHRvIHRpbGUgaXQuCisgICAgaWYgKGN0eHQtPmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpIHsKKyAgICAgICAgaWYgKHNpemUoKS53aWR0aCgpID09IDEgJiYgaW50
ZXJzZWN0aW9uKG9uZVRpbGVSZWN0LCBkZXN0UmVjdCkuaGVpZ2h0KCkgPT0gZGVzdFJlY3QuaGVp
Z2h0KCkpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlU3JjUmVjdDsKKyAgICAgICAg
ICAgIHZpc2libGVTcmNSZWN0LnNldFgoMCk7CisgICAgICAgICAgICB2aXNpYmxlU3JjUmVjdC5z
ZXRZKChkZXN0UmVjdC55KCkgLSBvbmVUaWxlUmVjdC55KCkpIC8gc2NhbGUuaGVpZ2h0KCkpOwor
ICAgICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0V2lkdGgoMSk7CisgICAgICAgICAgICB2aXNp
YmxlU3JjUmVjdC5zZXRIZWlnaHQoZGVzdFJlY3QuaGVpZ2h0KCkgLyBzY2FsZS5oZWlnaHQoKSk7
CisgICAgICAgICAgICBkcmF3KGN0eHQsIGRlc3RSZWN0LCB2aXNpYmxlU3JjUmVjdCwgc3R5bGVD
b2xvclNwYWNlLCBvcCwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRp
b24oKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNpemUo
KS5oZWlnaHQoKSA9PSAxICYmIGludGVyc2VjdGlvbihvbmVUaWxlUmVjdCwgZGVzdFJlY3QpLndp
ZHRoKCkgPT0gZGVzdFJlY3Qud2lkdGgoKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IHZpc2li
bGVTcmNSZWN0OworICAgICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0WCgoZGVzdFJlY3QueCgp
IC0gb25lVGlsZVJlY3QueCgpKSAvIHNjYWxlLndpZHRoKCkpOworICAgICAgICAgICAgdmlzaWJs
ZVNyY1JlY3Quc2V0WSgwKTsKKyAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFdpZHRoKGRl
c3RSZWN0LndpZHRoKCkgLyBzY2FsZS53aWR0aCgpKTsKKyAgICAgICAgICAgIHZpc2libGVTcmNS
ZWN0LnNldEhlaWdodCgxKTsKKyAgICAgICAgICAgIGRyYXcoY3R4dCwgZGVzdFJlY3QsIHZpc2li
bGVTcmNSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIENHUGF0dGVybiB1c2Vz
IGxvdHMgb2YgbWVtb3J5IGdvdCBjYWNoaW5nIHdoZW4gdGhlIHRpbGUgc2l6ZSBpcyBsYXJnZSAo
PHJkYXI6Ly9wcm9ibGVtLzQ2OTE4NTk+LAorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS82MjM5NTA1
PikuIE1lbW9yeSBjb25zdW1wdGlvbiBkZXBlbmRzIG9uIHRoZSB0cmFuc2Zvcm1lZCB0aWxlIHNp
emUgd2hpY2ggY2FuIGdldAorICAgIC8vIGxhcmdlciB0aGFuIHRoZSBvcmlnaW5hbCB0aWxlIGlm
IHVzZXIgem9vbXMgaW4gZW5vdWdoLgorICAgIGNvbnN0IGZsb2F0IG1heFBhdHRlcm5UaWxlUGl4
ZWxzID0gNTEyICogNTEyOworICAgIEZsb2F0UmVjdCB0cmFuc2Zvcm1lZFRpbGVTaXplID0gY3R4
dC0+Z2V0Q1RNKCkubWFwUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzY2FsZWRUaWxlU2l6
ZSkpOworICAgIGZsb2F0IHRyYW5zZm9ybWVkVGlsZVNpemVQaXhlbHMgPSB0cmFuc2Zvcm1lZFRp
bGVTaXplLndpZHRoKCkgKiB0cmFuc2Zvcm1lZFRpbGVTaXplLmhlaWdodCgpOworICAgIGlmICh0
cmFuc2Zvcm1lZFRpbGVTaXplUGl4ZWxzID4gbWF4UGF0dGVyblRpbGVQaXhlbHMpIHsKKyAgICAg
ICAgZmxvYXQgZnJvbVkgPSAoZGVzdFJlY3QueSgpIC0gb25lVGlsZVJlY3QueSgpKSAvIHNjYWxl
LmhlaWdodCgpOworICAgICAgICBmbG9hdCB0b1kgPSBvbmVUaWxlUmVjdC55KCk7CisgICAgICAg
IHdoaWxlICh0b1kgPCBDR1JlY3RHZXRNYXhZKGRlc3RSZWN0KSkgeworICAgICAgICAgICAgZmxv
YXQgZnJvbVggPSAoZGVzdFJlY3QueCgpIC0gb25lVGlsZVJlY3QueCgpKSAvIHNjYWxlLndpZHRo
KCk7CisgICAgICAgICAgICBmbG9hdCB0b1ggPSBvbmVUaWxlUmVjdC54KCk7CisgICAgICAgICAg
ICB3aGlsZSAodG9YIDwgQ0dSZWN0R2V0TWF4WChkZXN0UmVjdCkpIHsKKyAgICAgICAgICAgICAg
ICBDR1JlY3QgdG9SZWN0ID0gQ0dSZWN0SW50ZXJzZWN0aW9uKGRlc3RSZWN0LCBDR1JlY3RNYWtl
KHRvWCwgdG9ZLCBvbmVUaWxlUmVjdC53aWR0aCgpLCBvbmVUaWxlUmVjdC5oZWlnaHQoKSkpOwor
ICAgICAgICAgICAgICAgIENHUmVjdCBmcm9tUmVjdCA9IENHUmVjdE1ha2UoZnJvbVgsIGZyb21Z
LCB0b1JlY3Quc2l6ZS53aWR0aCAvIHNjYWxlLndpZHRoKCksIHRvUmVjdC5zaXplLmhlaWdodCAv
IHNjYWxlLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBkcmF3KGN0eHQsIHRvUmVjdCwgZnJv
bVJlY3QsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRh
dGlvbkRlc2NyaXB0aW9uKCkpOworICAgICAgICAgICAgICAgIHRvWCArPSBvbmVUaWxlUmVjdC53
aWR0aCgpOworICAgICAgICAgICAgICAgIGZyb21YID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRvWSArPSBvbmVUaWxlUmVjdC5oZWlnaHQoKTsKKyAgICAgICAgICAgIGZyb21ZID0g
MDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmICAgIAorCiAgICAg
QWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oKS5zY2Fs
ZU5vblVuaWZvcm0oc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogICAgIEZsb2F0UmVj
dCB0aWxlUmVjdChGbG9hdFBvaW50KCksIGludHJpbnNpY1RpbGVTaXplKTsKICAgICBkcmF3UGF0
dGVybihjdHh0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgb25lVGlsZVJlY3QubG9jYXRp
b24oKSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgc3RhcnRBbmltYXRpb24oZmFsc2UpOworI2Vsc2UKICAgICBzdGFy
dEFuaW1hdGlvbigpOworI2VuZGlmCiB9CiAKIC8vIEZJWE1FOiBNZXJnZSB3aXRoIHRoZSBvdGhl
ciBkcmF3VGlsZWQgZXZlbnR1YWxseSwgc2luY2Ugd2UgbmVlZCBhIGNvbWJpbmF0aW9uIG9mIGJv
dGggZm9yIHNvbWUgdGhpbmdzLgpAQCAtMTY4LDcgKzIyMywxMSBAQCB2b2lkIEltYWdlOjpkcmF3
VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsbwogICAgIAogICAgIGRyYXdQYXR0ZXJuKGN0eHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBhdHRlcm5QaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZHN0UmVjdCk7CiAKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgc3RhcnRBbmltYXRpb24oZmFsc2UpOworI2Vsc2UKICAgICBz
dGFydEFuaW1hdGlvbigpOworI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9E
T1dOX1NBTVBMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgKaW5kZXggM2M2MzI3ZmI3YWE2ZDFlNGRhYzQ0YTBmODc3NDU4YmZhMTM1YjNmNi4u
YWI3MTkwZTk5ZTc0YWM5NWQzYmRmZDFkYmM3ZjUxN2I5MWVkOGZiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0xMzUsNiArMTM1LDEx
IEBAIHB1YmxpYzoKICAgICBJbnRTaXplIHNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9u
ID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0OwogICAgIEludFNpemUgZnJh
bWVTaXplQXRJbmRleChzaXplX3QsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiA9IEltYWdl
T3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBJbnRTaXplIG9yaWdpbmFsU2l6ZShSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBEb05v
dFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsKKyAgICBib29sIGlzU3Vic2FtcGxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fYmFzZVN1YnNhbXBsaW5nOyB9CisjZW5kaWYKKwogICAgIGJvb2wg
Z2V0SG90U3BvdChJbnRQb2ludCYpIGNvbnN0OwogCiAgICAgc2l6ZV90IGJ5dGVzRGVjb2RlZFRv
RGV0ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFBvaW50LmgKaW5kZXggMTY5MjAzN2Q3NTM3NDllMmMyN2Q5MGRlNThiMTMwYjdk
NjMxNWM2NS4uZmUzM2Y0YzNmOGI4ZjFlMGU3YTIyMjYxNjhkZGJkM2Q5NDYzYTA2OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCkBAIC0zNCw2ICszNCw3
IEBAIHR5cGVkZWYgc3RydWN0IENHUG9pbnQgQ0dQb2ludDsKICNlbmRpZgogCiAKKyNpZiAhUExB
VEZPUk0oSU9TKQogI2lmIE9TKERBUldJTikKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVf
QVNfQ0dHRU9NRVRSWV9UWVBFUwogdHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50OwpAQCAt
NDEsNiArNDIsNyBAQCB0eXBlZGVmIHN0cnVjdCBDR1BvaW50IE5TUG9pbnQ7CiB0eXBlZGVmIHN0
cnVjdCBfTlNQb2ludCBOU1BvaW50OwogI2VuZGlmCiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZP
Uk0oSU9TKQogCiAjaWYgUExBVEZPUk0oV0lOKQogdHlwZWRlZiBzdHJ1Y3QgdGFnUE9JTlQgUE9J
TlQ7CkBAIC0xMTEsMTAgKzExMywxMiBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dQb2ludCgp
IGNvbnN0OwogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmIE9TKERBUldJTikgJiYg
IWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpCiAgICAg
ZXhwbGljaXQgSW50UG9pbnQoY29uc3QgTlNQb2ludCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxp
Y2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgIG9wZXJhdG9yIE5TUG9pbnQoKSBjb25zdDsKICNl
bmRpZgorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKICNpZiBQTEFURk9STShXSU4pCiAgICAg
SW50UG9pbnQoY29uc3QgUE9JTlQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuaAppbmRleCA1NjlhOTA4MTQ0NDk1OTE0ZDJkOWRmNGNkYTE1ZjkxMGVkNzNjNzlh
Li42MjIwNTI5MDdiMzQ5NzQxMzdjNTE1MzljZjQ3NzQyNWFhNzM1ZWJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCkBAIC0zMyw3ICszMyw3IEBACiB0eXBl
ZGVmIHN0cnVjdCBDR1JlY3QgQ0dSZWN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisj
aWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQ
RVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0
OwogI2Vsc2UKQEAgLTQxLDYgKzQxLDEyIEBAIHR5cGVkZWYgc3RydWN0IF9OU1JlY3QgTlNSZWN0
OwogI2VuZGlmCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpZm5kZWYgTlNSZWN0Cisj
ZGVmaW5lIE5TUmVjdCBDR1JlY3QKKyNlbmRpZgorI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4p
CiB0eXBlZGVmIHN0cnVjdCB0YWdSRUNUIFJFQ1Q7CiAjZWxpZiBQTEFURk9STShHVEspCkBAIC0x
OTIsOSArMTk4LDExIEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBDR1JlY3QoKSBjb25zdDsKICNl
bmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKICNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykpCiAgICAgb3BlcmF0
b3IgTlNSZWN0KCkgY29uc3Q7CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAj
aWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBJbnRSZWN0KGNvbnN0IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpJbnRSZWN0Jik7CkBAIC0yNTIsOSArMjYwLDExIEBAIGlubGluZSBib29sIEludFJl
Y3Q6OmlzSW5maW5pdGUoKSBjb25zdAogSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IENH
UmVjdCYpOwogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmIChQTEFURk9STShNQUMp
ICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKSkK
IEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBOU1JlY3QmKTsKICNlbmRpZgorI2VuZGlm
IC8vICFQTEFURk9STShJT1MpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCmluZGV4IGRiN2RiYTdlZGI1ODQxNzg3
YjVmNTg2MjQzYzFjZTEyM2Q3YjMzMzkuLjljN2U0ZGU4NzhjNGM4NzE2ZmViZWU5NzhhMjQxZWNj
YjYxZGEyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFNpemUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgK
QEAgLTMyLDcgKzMyLDcgQEAKIHR5cGVkZWYgc3RydWN0IENHU2l6ZSBDR1NpemU7CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1Mp
CiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5cGVk
ZWYgc3RydWN0IENHU2l6ZSBOU1NpemU7CiAjZWxzZQpAQCAtNDAsNiArNDAsMTIgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX05TU2l6ZSBOU1NpemU7CiAjZW5kaWYKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
SU9TKQorI2lmbmRlZiBOU1NpemUKKyNkZWZpbmUgTlNTaXplIENHU2l6ZQorI2VuZGlmCisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKFdJTikKIHR5cGVkZWYgc3RydWN0IHRhZ1NJWkUgU0laRTsKICNl
bGlmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCkBAIC0xMzAsMTAgKzEzNiwxMiBAQCBwdWJsaWM6CiAg
ICAgb3BlcmF0b3IgQ0dTaXplKCkgY29uc3Q7CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1Mp
ICAgIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1F
X0FTX0NHR0VPTUVUUllfVFlQRVMpCiAgICAgZXhwbGljaXQgSW50U2l6ZShjb25zdCBOU1NpemUg
Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgb3Bl
cmF0b3IgTlNTaXplKCkgY29uc3Q7CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQog
CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEludFNpemUoY29uc3QgU0laRSYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDA1NzA5
YTFiZmIyY2MzNGFhYjA2NTgwZjUzZTZiMGQ1N2Q0NTJhYTUuLjZlNDhhYmQ3ZDEzZThhNTA5MWZh
ZTY4OGZmYzY2N2MxZWU1MjU1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTU0LDcgKzU0LDEyIEBACiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TLmgiCisjZGVmaW5lIFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWUgTWVkaWFQ
bGF5ZXJQcml2YXRlSU9TCisjZWxzZQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
LmgiCisjZW5kaWYKICNpZiBVU0UoQVZGT1VOREFUSU9OKQogI2luY2x1ZGUgIk1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCIKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQpAQCAt
MjEyLDcgKzIxNyw3IEBAIHN0YXRpYyBWZWN0b3I8TWVkaWFQbGF5ZXJGYWN0b3J5Kj4mIGluc3Rh
bGxlZE1lZGlhRW5naW5lcyhSZXF1ZXJ5RW5naW5lT3B0aW9ucyByCiAKICNpZiBVU0UoQVZGT1VO
REFUSU9OKQogICAgICAgICBpZiAoU2V0dGluZ3M6OmlzQVZGb3VuZGF0aW9uRW5hYmxlZCgpKSB7
Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQog
ICAgICAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cmVnaXN0ZXJN
ZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKICAg
ICAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cmVnaXN0ZXJN
ZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CkBAIC0yMjMsMTAgKzIyOCwxMiBAQCBzdGF0aWMg
VmVjdG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+JiBpbnN0YWxsZWRNZWRpYUVuZ2luZXMoUmVxdWVy
eUVuZ2luZU9wdGlvbnMgcgogICAgICAgICB9CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1Mp
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBpZiAoU2V0dGluZ3M6OmlzUVRLaXRFbmFibGVk
KCkpCiAgICAgICAgICAgICBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cmVnaXN0ZXJNZWRpYUVu
Z2luZShhZGRNZWRpYUVuZ2luZSk7CiAjZW5kaWYKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChQbGF0
Zm9ybU1lZGlhRW5naW5lQ2xhc3NOYW1lKQogICAgICAgICBQbGF0Zm9ybU1lZGlhRW5naW5lQ2xh
c3NOYW1lOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKQEAgLTgzNyw2ICs4
NDQsNTAgQEAgdm9pZCBNZWRpYVBsYXllcjo6ZXhpdEZ1bGxzY3JlZW4oKQogfQogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCitib29sIE1lZGlhUGxheWVyOjppc0N1cnJlbnRQbGF5
YmFja1RhcmdldFdpcmVsZXNzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0N1
cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXI6OnNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcigpCit7CisgICAgbV9wcml2YXRlLT5zaG93UGxheWJhY2tU
YXJnZXRQaWNrZXIoKTsKK30KKworYm9vbCBNZWRpYVBsYXllcjo6aGFzV2lyZWxlc3NQbGF5YmFj
a1RhcmdldHMoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmhhc1dpcmVsZXNzUGxh
eWJhY2tUYXJnZXRzKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXI6OndpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT53aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyOjpzZXRXaXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZChib29sIGRpc2FibGVkKQoreworICAgIG1fcHJpdmF0ZS0+
c2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoZGlzYWJsZWQpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyOjpzZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhib29s
IGhhc0xpc3RlbmVycykKK3sKKyAgICBtX3ByaXZhdGUtPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5TGlzdGVuZXJzKGhhc0xpc3RlbmVycyk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXI6
OmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9t
ZWRpYVBsYXllckNsaWVudCkKKyAgICAgICAgbV9tZWRpYVBsYXllckNsaWVudC0+bWVkaWFQbGF5
ZXJDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCh0aGlzKTsKK30KKwordm9p
ZCBNZWRpYVBsYXllcjo6cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkKCkKK3sKKyAg
ICBpZiAobV9tZWRpYVBsYXllckNsaWVudCkKKyAgICAgICAgbV9tZWRpYVBsYXllckNsaWVudC0+
bWVkaWFQbGF5ZXJQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWQodGhpcyk7Cit9Cisj
ZW5kaWYKKwogI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKIGJvb2wgTWVkaWFQbGF5
ZXI6OmNhbkVudGVyRnVsbHNjcmVlbigpIGNvbnN0CiB7CkBAIC05NTYsNiArMTAwNywxOCBAQCB2
b2lkIE1lZGlhUGxheWVyOjpzZXRQcml2YXRlQnJvd3NpbmdNb2RlKGJvb2wgcHJpdmF0ZUJyb3dz
aW5nTW9kZSkKICAgICBtX3ByaXZhdGUtPnNldFByaXZhdGVCcm93c2luZ01vZGUobV9wcml2YXRl
QnJvd3NpbmcpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBNZWRpYVBsYXllcjo6YXR0
cmlidXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIAor
eworICAgIG1fcHJpdmF0ZS0+YXR0cmlidXRlQ2hhbmdlZChuYW1lLCB2YWx1ZSk7Cit9CisKK2Jv
b2wgTWVkaWFQbGF5ZXI6OnJlYWR5Rm9yUGxheWJhY2soKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPnJlYWR5Rm9yUGxheWJhY2soKTsKK30KKyNlbmRpZgorCiAvLyBDbGllbnQgY2Fs
bGJhY2tzLgogdm9pZCBNZWRpYVBsYXllcjo6bmV0d29ya1N0YXRlQ2hhbmdlZCgpCiB7CkBAIC05
ODEsNyArMTA0NCwxMiBAQCB2b2lkIE1lZGlhUGxheWVyOjpyZWFkeVN0YXRlQ2hhbmdlZCgpCiAK
IHZvaWQgTWVkaWFQbGF5ZXI6OnZvbHVtZUNoYW5nZWQoZG91YmxlIG5ld1ZvbHVtZSkKIHsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKG5ld1ZvbHVtZSk7CisgICAgbV92b2x1
bWUgPSBtX3ByaXZhdGUtPnZvbHVtZSgpOworI2Vsc2UKICAgICBtX3ZvbHVtZSA9IG5ld1ZvbHVt
ZTsKKyNlbmRpZgogICAgIGlmIChtX21lZGlhUGxheWVyQ2xpZW50KQogICAgICAgICBtX21lZGlh
UGxheWVyQ2xpZW50LT5tZWRpYVBsYXllclZvbHVtZUNoYW5nZWQodGhpcyk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCAxMjZkNWY2
N2RjZGU4OWQ3MTU1YzI5YTU1ODYwZTYwYWM3YzAzNGM4Li4yMjdlOWU3ZDliNmRhNDA3OTgzNDFh
NGU4NDdiYjVlYjQyNjdiZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyLmgKQEAgLTIyNCw2ICsyMjQsMTEgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBtZWRpYVBsYXllcktleU5lZWRlZChNZWRpYVBsYXllciosIFVpbnQ4QXJyYXkqKSB7
IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAgICAgCisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQor
ICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllckN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxl
c3NDaGFuZ2VkKE1lZGlhUGxheWVyKikgeyB9OworICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXll
clBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZChNZWRpYVBsYXllciopIHsgfTsKKyNl
bmRpZgorCiAgICAgdmlydHVhbCBTdHJpbmcgbWVkaWFQbGF5ZXJSZWZlcnJlcigpIGNvbnN0IHsg
cmV0dXJuIFN0cmluZygpOyB9CiAgICAgdmlydHVhbCBTdHJpbmcgbWVkaWFQbGF5ZXJVc2VyQWdl
bnQoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgQ09SU01vZGUgbWVk
aWFQbGF5ZXJDT1JTTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFVuc3BlY2lmaWVkOyB9CkBAIC00MzMs
NiArNDM4LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShJT1NfQUlSUExBWSkKKyAgICBib29sIGlzQ3VycmVudFBsYXliYWNrVGFy
Z2V0V2lyZWxlc3MoKSBjb25zdDsKKyAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcigp
OworCisgICAgYm9vbCBoYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cygpIGNvbnN0OworCisgICAg
Ym9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0
V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoYm9vbCk7CisKKyAgICB2b2lkIGN1cnJlbnRQ
bGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkKCk7CisgICAgdm9pZCBwbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUNoYW5nZWQoKTsKKworICAgIHZvaWQgc2V0SGFzUGxheWJhY2tUYXJnZXRB
dmFpbGFiaWxpdHlMaXN0ZW5lcnMoYm9vbCk7CisjZW5kaWYKKwogI2lmIFVTRShOQVRJVkVfRlVM
TFNDUkVFTl9WSURFTykKICAgICBib29sIGNhbkVudGVyRnVsbHNjcmVlbigpIGNvbnN0OwogI2Vu
ZGlmCkBAIC00ODYsNiArNTA2LDExIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBlbmdpbmVEZXNj
cmlwdGlvbigpIGNvbnN0OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgYXR0cmlidXRl
Q2hhbmdlZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIGJv
b2wgcmVhZHlGb3JQbGF5YmFjaygpIGNvbnN0OworI2VuZGlmCisKICAgICBDYWNoZWRSZXNvdXJj
ZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFD
SykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXJQcml2YXRlLmgKaW5kZXggY2Y3YjVmMjg4NWY1MTVmMjYzNDMwM2JlNjNhZTc1NWQyYjg0MzRk
OC4uZmJhZmQ3MGNkOWVmMzRhMDc4MDRhMjVhNzkyOTNiODc4MjM5YjM1MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgK
QEAgLTk3LDYgKzk3LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZShm
bG9hdCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZURvdWJsZShkb3VibGUgdm9sdW1l
KSB7IHJldHVybiBzZXRWb2x1bWUodm9sdW1lKTsgfQorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2
aXJ0dWFsIGZsb2F0IHZvbHVtZSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyNlbmRpZgogCiAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzTXV0aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoYm9vbCkgeyB9CkBAIC0xNDEsNiArMTQ0LDE4IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKSB7IH0KICNlbmRpZgogCisj
aWYgRU5BQkxFKElPU19BSVJQTEFZKQorICAgIHZpcnR1YWwgYm9vbCBpc0N1cnJlbnRQbGF5YmFj
a1RhcmdldFdpcmVsZXNzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
V2lyZWxlc3NQbGF5YmFja1RhcmdldHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
dmlydHVhbCBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWQoYm9vbCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SGFzUGxheWJhY2tUYXJnZXRB
dmFpbGFiaWxpdHlMaXN0ZW5lcnMoYm9vbCkgeyB9CisjZW5kaWYKKwogI2lmIFVTRShOQVRJVkVf
RlVMTFNDUkVFTl9WSURFTykKICAgICB2aXJ0dWFsIGJvb2wgY2FuRW50ZXJGdWxsc2NyZWVuKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtMjA5LDcgKzIyNCwxMiBAQCBwdWJs
aWM6CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICB2aXJ0dWFsIHZvaWQgc2ltdWxhdGVBdWRpb0lu
dGVycnVwdGlvbigpIHsgfQogI2VuZGlmCi0gICAgCisKKyNpZiBQTEFURk9STShJT1MpCisgICAg
dmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JikgeyB9CisgICAgdmlydHVhbCBib29sIHJlYWR5Rm9yUGxheWJhY2soKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgU3RyaW5nIGxhbmd1YWdlT2ZQcmltYXJ5
QXVkaW9UcmFjaygpIGNvbnN0IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KIAogICAgIHZpcnR1
YWwgc2l6ZV90IGV4dHJhTWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAppbmRl
eCAzMjM1YjQwZWY1MmQxNzJmNmE2YzY3YjZiYTYyYTUzMTEwOWQwYTE5Li5iMDYyN2FkMjQ0NzI3
M2E4YjUzMDM5MmI1MjlkMWE5MmYzNzJkODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCkBAIC04MCw2ICs4MCw5IEBAIFNp
bXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8QWRkaXRpb25hbEZv
bnREYXRhPiBmb250RGF0YSwgZmxvCiAgICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQogI2VuZGlmCiAg
ICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAs
IG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbHNlKQorI2VuZGlmCiB7CiAgICAgbV9mb250
RGF0YS0+aW5pdGlhbGl6ZUZvbnREYXRhKHRoaXMsIGZvbnRTaXplKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCmluZGV4IDQ1YTBm
NTVmYTA5NTJlOWZhMTcxZDgwMjdjZjJhNTg5ZjI0NDkyYWQuLjljZDMxNmYyNjY3NDUyYzdkZjZh
OGM2MWE1YzE1ZTg3MmEzZDRhNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaApAQCAtMTgwLDExICsxODAsMTUgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgT1ZFUlJJREU7CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBVU0UoQVBQS0lUKQogICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBnZXRDb21wb3NpdGVGb250UmVmZXJlbmNlRm9udERhdGEoTlNGb250ICprZXkpIGNv
bnN0OwogICAgIE5TRm9udCogZ2V0TlNGb250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURh
dGEuZm9udCgpOyB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBDVEZvbnRSZWYg
Z2V0Q1RGb250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9CisgICAg
Ym9vbCBzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE5v
dEJlVXNlZEZvckFyYWJpYzsgfTsKKyNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBDRkRp
Y3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZv
bnRPcmllbnRhdGlvbikgY29uc3Q7CiAjZW5kaWYKQEAgLTE5Nyw3ICsyMDEsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBpZiAoaXNTVkdGb250KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID4gMTA4MAorI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCiAgICAgICAgIHdrQ1RGb250VHJhbnNmb3Jt
T3B0aW9ucyBvcHRpb25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBLZXJuaW5nID8gd2tDVEZv
bnRUcmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIDogMCkgfCAodHlwZXNldHRpbmdGZWF0dXJlcyAm
IExpZ2F0dXJlcyA/IHdrQ1RGb250VHJhbnNmb3JtQXBwbHlTaGFwaW5nIDogMCk7CiAgICAgICAg
IHJldHVybiB3a0NURm9udFRyYW5zZm9ybUdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwg
Z2x5cGhzLCByZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGFkdmFuY2VzKSwgZ2x5cGhDb3VudCwg
b3B0aW9ucyk7CiAjZWxzZQpAQCAtMzE1LDYgKzMxOSw5IEBAIHByaXZhdGU6CiAgICAgbXV0YWJs
ZSBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CiAjZW5kaWYK
ICNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIG1fc2hvdWxkTm90QmVVc2VkRm9y
QXJhYmljOworI2VuZGlmCiB9OwogCiBBTFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBTaW1wbGVGb250
RGF0YTo6Ym91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcAppbmRleCBhNzJh
ZTRiN2E1YjkzNTRkNTZjZmFiZWM4NTk5YzA3MWE0YjI5ODFkLi5hNDY3MzlhM2FlMTBmMDFiMjk2
MTA4NWRlZjRjMTJjOGNiOTg0NzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjZGVmaW5lIFNUUklOR19CVUZGRVJfU0laRSAyMDQ4CiAKLXR5cGVk
ZWYgdW5zaWduZWQgVHJ1bmNhdGlvbkZ1bmN0aW9uKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQga2VlcENvdW50LCBVQ2hhciogYnVmZmVyKTsKK3R5cGVkZWYgdW5zaWdu
ZWQgVHJ1bmNhdGlvbkZ1bmN0aW9uKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxlbmd0aCwgdW5z
aWduZWQga2VlcENvdW50LCBVQ2hhciogYnVmZmVyLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lz
KTsKIAogc3RhdGljIGlubGluZSBpbnQgdGV4dEJyZWFrQXRPclByZWNlZGluZyhUZXh0QnJlYWtJ
dGVyYXRvciogaXQsIGludCBvZmZzZXQpCiB7CkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBpbmxp
bmUgaW50IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGl0LCBp
bnQgb2Zmc2V0LCBpCiAgICAgcmV0dXJuIHJlc3VsdCA9PSBUZXh0QnJlYWtEb25lID8gbGVuZ3Ro
IDogcmVzdWx0OwogfQogCi1zdGF0aWMgdW5zaWduZWQgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlcihj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQs
IFVDaGFyKiBidWZmZXIpCitzdGF0aWMgdW5zaWduZWQgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlcihj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQs
IFVDaGFyKiBidWZmZXIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMpCiB7CiAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oa2VlcENvdW50IDwgbGVuZ3RoKTsKICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihrZWVwQ291bnQgPCBTVFJJTkdfQlVGRkVSX1NJ
WkUpOwpAQCAtNjYsMzIgKzY2LDEyNSBAQCBzdGF0aWMgdW5zaWduZWQgY2VudGVyVHJ1bmNhdGVU
b0J1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bgogICAgIE5v
blNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoc3RyaW5nLmNoYXJhY3RlcnMoKSwgbGVu
Z3RoKTsKICAgICB1bnNpZ25lZCBvbWl0RW5kID0gYm91bmRlZFRleHRCcmVha0ZvbGxvd2luZyhp
dCwgb21pdFN0YXJ0ICsgKGxlbmd0aCAtIGtlZXBDb3VudCkgLSAxLCBsZW5ndGgpOwogICAgIG9t
aXRTdGFydCA9IHRleHRCcmVha0F0T3JQcmVjZWRpbmcoaXQsIG9taXRTdGFydCk7Ci0gICAgCi0g
ICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoID0gb21pdFN0YXJ0ICsgMSArIChsZW5ndGggLSBv
bWl0RW5kKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGd1
YXJkIHRoaXMgY29kZSBiZWhpbmQgYW4gZWRpdGluZyBiZWhhdmlvci4gVGhlbiB3ZSBjYW4gcmVt
b3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgorCisgICAgLy8gU3RyaXAgc2luZ2xlIGNoYXJh
Y3RlciBiZWZvcmUgZWxsaXBzaXMgY2hhcmFjdGVyLCB3aGVuIHRoYXQgY2hhcmFjdGVyIGlzIHBy
ZWNlZGVkIGJ5IGEgc3BhY2UKKyAgICBpZiAob21pdFN0YXJ0ID4gMSAmJiBzdHJpbmdbb21pdFN0
YXJ0IC0gMV0gIT0gc3BhY2UgJiYgb21pdFN0YXJ0ID4gMiAmJiBzdHJpbmdbb21pdFN0YXJ0IC0g
Ml0gPT0gc3BhY2UpCisgICAgICAgIC0tb21pdFN0YXJ0OworCisgICAgLy8gU3RyaXAgd2hpdGVz
cGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlbGxpcHNpcyBjaGFyYWN0ZXIKKyAgICB3aGlsZSAo
b21pdFN0YXJ0ID4gMSAmJiBzdHJpbmdbb21pdFN0YXJ0IC0gMV0gPT0gc3BhY2UpCisgICAgICAg
IC0tb21pdFN0YXJ0OworCisgICAgLy8gU3RyaXAgc2luZ2xlIGNoYXJhY3RlciBhZnRlciBlbGxp
cHNpcyBjaGFyYWN0ZXIsIHdoZW4gdGhhdCBjaGFyYWN0ZXIgaXMgZm9sbG93ZWQgYnkgYSBzcGFj
ZQorICAgIGlmICgobGVuZ3RoIC0gb21pdEVuZCkgPiAxICYmIHN0cmluZ1tvbWl0RW5kXSAhPSBz
cGFjZSAmJiAobGVuZ3RoIC0gb21pdEVuZCkgPiAyICYmIHN0cmluZ1tvbWl0RW5kICsgMV0gPT0g
c3BhY2UpCisgICAgICAgICsrb21pdEVuZDsKKworICAgIHdoaWxlICgobGVuZ3RoIC0gb21pdEVu
ZCkgPiAxICYmIHN0cmluZ1tvbWl0RW5kXSA9PSBzcGFjZSkKKyAgICAgICAgKytvbWl0RW5kOwor
I2VuZGlmCisKKyAgICB1bnNpZ25lZCB0cnVuY2F0ZWRMZW5ndGggPSBzaG91bGRJbnNlcnRFbGxp
cHNpcyA/IG9taXRTdGFydCArIDEgKyAobGVuZ3RoIC0gb21pdEVuZCkgOiBsZW5ndGggLSAob21p
dEVuZCAtIG9taXRTdGFydCk7CiAgICAgQVNTRVJUKHRydW5jYXRlZExlbmd0aCA8PSBsZW5ndGgp
OwogCiAgICAgbWVtY3B5KGJ1ZmZlciwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc2l6ZW9mKFVDaGFy
KSAqIG9taXRTdGFydCk7Ci0gICAgYnVmZmVyW29taXRTdGFydF0gPSBob3Jpem9udGFsRWxsaXBz
aXM7Ci0gICAgbWVtY3B5KCZidWZmZXJbb21pdFN0YXJ0ICsgMV0sICZzdHJpbmcuY2hhcmFjdGVy
cygpW29taXRFbmRdLCBzaXplb2YoVUNoYXIpICogKGxlbmd0aCAtIG9taXRFbmQpKTsKLSAgICAK
KyAgICBpZiAoc2hvdWxkSW5zZXJ0RWxsaXBzaXMpIHsKKyAgICAgICAgYnVmZmVyW29taXRTdGFy
dF0gPSBob3Jpem9udGFsRWxsaXBzaXM7CisgICAgICAgIG1lbWNweSgmYnVmZmVyW29taXRTdGFy
dCArIDFdLCAmc3RyaW5nLmNoYXJhY3RlcnMoKVtvbWl0RW5kXSwgc2l6ZW9mKFVDaGFyKSAqIChs
ZW5ndGggLSBvbWl0RW5kKSk7ICAgIAorICAgIH0gZWxzZQorICAgICAgICBtZW1jcHkoJmJ1ZmZl
cltvbWl0U3RhcnRdLCAmc3RyaW5nLmNoYXJhY3RlcnMoKVtvbWl0RW5kXSwgc2l6ZW9mKFVDaGFy
KSAqIChsZW5ndGggLSBvbWl0RW5kKSk7CiAgICAgcmV0dXJuIHRydW5jYXRlZExlbmd0aDsKIH0K
IAotc3RhdGljIHVuc2lnbmVkIHJpZ2h0VHJ1bmNhdGVUb0J1ZmZlcihjb25zdCBTdHJpbmcmIHN0
cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQsIFVDaGFyKiBidWZmZXIp
CitzdGF0aWMgdW5zaWduZWQgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGtlZXBDb3VudCwgVUNoYXIqIGJ1ZmZlciwg
Ym9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcykKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihrZWVwQ291bnQgPCBsZW5ndGgpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGtlZXBDb3VudCA8IFNUUklOR19CVUZGRVJfU0laRSk7Ci0gICAgCisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBndWFyZCB0aGlzIGNvZGUg
YmVoaW5kIGFuIGVkaXRpbmcgYmVoYXZpb3IuIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZP
Uk0oSU9TKS1ndWFyZC4KKworICAgIC8vIFN0cmlwIHNpbmdsZSBjaGFyYWN0ZXIgYmVmb3JlIGVs
bGlwc2lzIGNoYXJhY3Rlciwgd2hlbiB0aGF0IGNoYXJhY3RlciBpcyBwcmVjZWRlZCBieSBhIHNw
YWNlCisgICAgaWYgKGtlZXBDb3VudCA+IDEgJiYgc3RyaW5nW2tlZXBDb3VudCAtIDFdICE9IHNw
YWNlICYmIGtlZXBDb3VudCA+IDIgJiYgc3RyaW5nW2tlZXBDb3VudCAtIDJdID09IHNwYWNlKQor
ICAgICAgICAtLWtlZXBDb3VudDsKKworICAgIC8vIFN0cmlwIHdoaXRlc3BhY2UgYmVmb3JlIHRo
ZSBlbGxpcHNpcyBjaGFyYWN0ZXIKKyAgICB3aGlsZSAoa2VlcENvdW50ID4gMSAmJiBzdHJpbmdb
a2VlcENvdW50IC0gMV0gPT0gc3BhY2UpCisgICAgICAgIC0ta2VlcENvdW50OworI2VuZGlmCisK
ICAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmluZy5jaGFyYWN0ZXJz
KCksIGxlbmd0aCk7CiAgICAgdW5zaWduZWQga2VlcExlbmd0aCA9IHRleHRCcmVha0F0T3JQcmVj
ZWRpbmcoaXQsIGtlZXBDb3VudCk7Ci0gICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoID0ga2Vl
cExlbmd0aCArIDE7Ci0gICAgCisgICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoID0gc2hvdWxk
SW5zZXJ0RWxsaXBzaXMgPyBrZWVwTGVuZ3RoICsgMSA6IGtlZXBMZW5ndGg7CisKICAgICBtZW1j
cHkoYnVmZmVyLCBzdHJpbmcuY2hhcmFjdGVycygpLCBzaXplb2YoVUNoYXIpICoga2VlcExlbmd0
aCk7Ci0gICAgYnVmZmVyW2tlZXBMZW5ndGhdID0gaG9yaXpvbnRhbEVsbGlwc2lzOwotICAgIAor
ICAgIGlmIChzaG91bGRJbnNlcnRFbGxpcHNpcykKKyAgICAgICAgYnVmZmVyW2tlZXBMZW5ndGhd
ID0gaG9yaXpvbnRhbEVsbGlwc2lzOworCiAgICAgcmV0dXJuIHRydW5jYXRlZExlbmd0aDsKIH0K
IAorc3RhdGljIHVuc2lnbmVkIHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyQnVmZmVyKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGtlZXBDb3VudCwgVUNoYXIqIGJ1
ZmZlciwgYm9vbCkKK3sKKyAgICBBU1NFUlQoa2VlcENvdW50IDwgbGVuZ3RoKTsKKyAgICBBU1NF
UlQoa2VlcENvdW50IDwgU1RSSU5HX0JVRkZFUl9TSVpFKTsKKworICAgIE5vblNoYXJlZENoYXJh
Y3RlckJyZWFrSXRlcmF0b3IgaXQoc3RyaW5nLmNoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICB1
bnNpZ25lZCBrZWVwTGVuZ3RoID0gdGV4dEJyZWFrQXRPclByZWNlZGluZyhpdCwga2VlcENvdW50
KTsKKyAgICBtZW1jcHkoYnVmZmVyLCBzdHJpbmcuY2hhcmFjdGVycygpLCBzaXplb2YoVUNoYXIp
ICoga2VlcExlbmd0aCk7CisKKyAgICByZXR1cm4ga2VlcExlbmd0aDsKK30KKworc3RhdGljIHVu
c2lnbmVkIHJpZ2h0Q2xpcFRvV29yZEJ1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQsIFVDaGFyKiBidWZmZXIsIGJvb2wpCit7Cisg
ICAgQVNTRVJUKGtlZXBDb3VudCA8IGxlbmd0aCk7CisgICAgQVNTRVJUKGtlZXBDb3VudCA8IFNU
UklOR19CVUZGRVJfU0laRSk7CisKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJl
YWtJdGVyYXRvcihzdHJpbmcuY2hhcmFjdGVycygpLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGtl
ZXBMZW5ndGggPSB0ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKGl0LCBrZWVwQ291bnQpOworICAgIG1l
bWNweShidWZmZXIsIHN0cmluZy5jaGFyYWN0ZXJzKCksIHNpemVvZihVQ2hhcikgKiBrZWVwTGVu
Z3RoKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGd1YXJk
IHRoaXMgY29kZSBiZWhpbmQgYW4gZWRpdGluZyBiZWhhdmlvci4gVGhlbiB3ZSBjYW4gcmVtb3Zl
IHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgorICAgIC8vIE1vdGl2YXRlZCBieSA8cmRhcjovL3By
b2JsZW0vNzQzOTMyNz4gdHJ1bmNhdGlvbiBzaG91bGQgbm90IGluY2x1ZGUgYSB0cmFpbGluZyBz
cGFjZQorICAgIHdoaWxlICgoa2VlcExlbmd0aCA+IDApICYmIChzdHJpbmdba2VlcExlbmd0aCAt
IDFdID09IHNwYWNlKSkKKyAgICAgICAgLS1rZWVwTGVuZ3RoOworI2VuZGlmCisgICAgcmV0dXJu
IGtlZXBMZW5ndGg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsZWZ0VHJ1bmNhdGVUb0J1ZmZlcihj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQs
IFVDaGFyKiBidWZmZXIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMpCit7CisgICAgQVNTRVJU
KGtlZXBDb3VudCA8IGxlbmd0aCk7CisgICAgQVNTRVJUKGtlZXBDb3VudCA8IFNUUklOR19CVUZG
RVJfU0laRSk7CisKKyAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gbGVuZ3RoIC0ga2VlcENvdW50
OworCisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChzdHJpbmcuY2hhcmFj
dGVycygpLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGFkanVzdGVkU3RhcnRJbmRleCA9IHN0YXJ0
SW5kZXg7CisgICAgc3RhcnRJbmRleCA9IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHN0
YXJ0SW5kZXgsIGxlbmd0aCAtIHN0YXJ0SW5kZXgpOworCisgICAgLy8gU3RyaXAgc2luZ2xlIGNo
YXJhY3RlciBhZnRlciBlbGxpcHNpcyBjaGFyYWN0ZXIsIHdoZW4gdGhhdCBjaGFyYWN0ZXIgaXMg
cHJlY2VkZWQgYnkgYSBzcGFjZQorICAgIGlmIChhZGp1c3RlZFN0YXJ0SW5kZXggPCBsZW5ndGgg
JiYgc3RyaW5nW2FkanVzdGVkU3RhcnRJbmRleF0gIT0gc3BhY2UKKyAgICAgICAgJiYgYWRqdXN0
ZWRTdGFydEluZGV4IDwgbGVuZ3RoIC0gMSAmJiBzdHJpbmdbYWRqdXN0ZWRTdGFydEluZGV4ICsg
MV0gPT0gc3BhY2UpCisgICAgICAgICsrYWRqdXN0ZWRTdGFydEluZGV4OworCisgICAgLy8gU3Ry
aXAgd2hpdGVzcGFjZSBhZnRlciB0aGUgZWxsaXBzaXMgY2hhcmFjdGVyCisgICAgd2hpbGUgKGFk
anVzdGVkU3RhcnRJbmRleCA8IGxlbmd0aCAmJiBzdHJpbmdbYWRqdXN0ZWRTdGFydEluZGV4XSA9
PSBzcGFjZSkKKyAgICAgICAgKythZGp1c3RlZFN0YXJ0SW5kZXg7CisKKyAgICBpZiAoc2hvdWxk
SW5zZXJ0RWxsaXBzaXMpIHsKKyAgICAgICAgYnVmZmVyWzBdID0gaG9yaXpvbnRhbEVsbGlwc2lz
OworICAgICAgICBtZW1jcHkoJmJ1ZmZlclsxXSwgJnN0cmluZy5jaGFyYWN0ZXJzKClbYWRqdXN0
ZWRTdGFydEluZGV4XSwgc2l6ZW9mKFVDaGFyKSAqIChsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5k
ZXggKyAxKSk7CisgICAgICAgIHJldHVybiBsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5kZXggKyAx
OworICAgIH0KKyAgICBtZW1jcHkoJmJ1ZmZlclswXSwgJnN0cmluZy5jaGFyYWN0ZXJzKClbYWRq
dXN0ZWRTdGFydEluZGV4XSwgc2l6ZW9mKFVDaGFyKSAqIChsZW5ndGggLSBhZGp1c3RlZFN0YXJ0
SW5kZXggKyAxKSk7CisgICAgcmV0dXJuIGxlbmd0aCAtIGFkanVzdGVkU3RhcnRJbmRleDsKK30K
Kwogc3RhdGljIGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnQmIHJlbmRlcmVyLCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBib29sIGRpc2FibGVSb3VuZGluZ0hh
Y2tzKQogewogICAgIFRleHRSdW4gcnVuKGNoYXJhY3RlcnMsIGxlbmd0aCk7CkBAIC0xMDAsMjMg
KzE5MywyOSBAQCBzdGF0aWMgZmxvYXQgc3RyaW5nV2lkdGgoY29uc3QgRm9udCYgcmVuZGVyZXIs
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZAogICAgIHJldHVybiByZW5kZXJlci53
aWR0aChydW4pOwogfQogCi1zdGF0aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgVHJ1bmNhdGlvbkZ1
bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3MpCitzdGF0
aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhX
aWR0aCwgY29uc3QgRm9udCYgZm9udCwgVHJ1bmNhdGlvbkZ1bmN0aW9uIHRydW5jYXRlVG9CdWZm
ZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0KiByZXN1bHRXaWR0aCA9IG51bGxw
dHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCAgZmxvYXQgY3VzdG9tVHJ1bmNh
dGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJvb2wgYWx3YXlzVHJ1bmNhdGUgPSBmYWxzZSkKIHsKICAg
ICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHN0cmluZzsKLSAgICAKKwor
ICAgIGlmIChyZXN1bHRXaWR0aCkKKyAgICAgICAgKnJlc3VsdFdpZHRoID0gMDsKKwogICAgIEFT
U0VSVChtYXhXaWR0aCA+PSAwKTsKLSAgICAKLSAgICBmbG9hdCBjdXJyZW50RWxsaXBzaXNXaWR0
aCA9IHN0cmluZ1dpZHRoKGZvbnQsICZob3Jpem9udGFsRWxsaXBzaXMsIDEsIGRpc2FibGVSb3Vu
ZGluZ0hhY2tzKTsKLSAgICAKKworICAgIGZsb2F0IGN1cnJlbnRFbGxpcHNpc1dpZHRoID0gc2hv
dWxkSW5zZXJ0RWxsaXBzaXMgPyBzdHJpbmdXaWR0aChmb250LCAmaG9yaXpvbnRhbEVsbGlwc2lz
LCAxLCBkaXNhYmxlUm91bmRpbmdIYWNrcykgOiBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRo
OworCiAgICAgVUNoYXIgc3RyaW5nQnVmZmVyW1NUUklOR19CVUZGRVJfU0laRV07CiAgICAgdW5z
aWduZWQgdHJ1bmNhdGVkTGVuZ3RoOwogICAgIHVuc2lnbmVkIGtlZXBDb3VudDsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAKICAgICBpZiAobGVuZ3RoID4gU1RSSU5H
X0JVRkZFUl9TSVpFKSB7Ci0gICAgICAgIGtlZXBDb3VudCA9IFNUUklOR19CVUZGRVJfU0laRSAt
IDE7IC8vIG5lZWQgMSBjaGFyYWN0ZXIgZm9yIHRoZSBlbGxpcHNpcwotICAgICAgICB0cnVuY2F0
ZWRMZW5ndGggPSBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyKHN0cmluZywgbGVuZ3RoLCBrZWVwQ291
bnQsIHN0cmluZ0J1ZmZlcik7CisgICAgICAgIGlmIChzaG91bGRJbnNlcnRFbGxpcHNpcykKKyAg
ICAgICAgICAgIGtlZXBDb3VudCA9IFNUUklOR19CVUZGRVJfU0laRSAtIDE7IC8vIG5lZWQgMSBj
aGFyYWN0ZXIgZm9yIHRoZSBlbGxpcHNpcworICAgICAgICBlbHNlCisgICAgICAgICAgICBrZWVw
Q291bnQgPSAwOworICAgICAgICB0cnVuY2F0ZWRMZW5ndGggPSBjZW50ZXJUcnVuY2F0ZVRvQnVm
ZmVyKHN0cmluZywgbGVuZ3RoLCBrZWVwQ291bnQsIHN0cmluZ0J1ZmZlciwgc2hvdWxkSW5zZXJ0
RWxsaXBzaXMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGtlZXBDb3VudCA9IGxlbmd0aDsKICAg
ICAgICAgbWVtY3B5KHN0cmluZ0J1ZmZlciwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc2l6ZW9mKFVD
aGFyKSAqIGxlbmd0aCk7CkBAIC0xMjQsOCArMjIzLDEzIEBAIHN0YXRpYyBTdHJpbmcgdHJ1bmNh
dGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250
JiBmCiAgICAgfQogCiAgICAgZmxvYXQgd2lkdGggPSBzdHJpbmdXaWR0aChmb250LCBzdHJpbmdC
dWZmZXIsIHRydW5jYXRlZExlbmd0aCwgZGlzYWJsZVJvdW5kaW5nSGFja3MpOwotICAgIGlmICh3
aWR0aCA8PSBtYXhXaWR0aCkKKyAgICBpZiAoIXNob3VsZEluc2VydEVsbGlwc2lzICYmIGFsd2F5
c1RydW5jYXRlKQorICAgICAgICB3aWR0aCArPSBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRo
OworICAgIGlmICgod2lkdGggLSBtYXhXaWR0aCkgPCAwLjAwMDEpIHsgLy8gSWdub3JlIHJvdW5k
aW5nIGVycm9ycy4KKyAgICAgICAgaWYgKHJlc3VsdFdpZHRoKQorICAgICAgICAgICAgKnJlc3Vs
dFdpZHRoID0gd2lkdGg7CiAgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgfQogCiAgICAgdW5z
aWduZWQga2VlcENvdW50Rm9yTGFyZ2VzdEtub3duVG9GaXQgPSAwOwogICAgIGZsb2F0IHdpZHRo
Rm9yTGFyZ2VzdEtub3duVG9GaXQgPSBjdXJyZW50RWxsaXBzaXNXaWR0aDsKQEAgLTE1NiwxMyAr
MjYwLDE3IEBAIHN0YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmCiAgICAgICAgIEFTU0VSVChrZWVwQ291
bnQgPiAwKTsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oa2VlcENv
dW50IDwga2VlcENvdW50Rm9yU21hbGxlc3RLbm93blRvTm90Rml0KTsKICAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oa2VlcENvdW50ID4ga2VlcENvdW50Rm9yTGFyZ2Vz
dEtub3duVG9GaXQpOwotICAgICAgICAKLSAgICAgICAgdHJ1bmNhdGVkTGVuZ3RoID0gdHJ1bmNh
dGVUb0J1ZmZlcihzdHJpbmcsIGxlbmd0aCwga2VlcENvdW50LCBzdHJpbmdCdWZmZXIpOworCisg
ICAgICAgIHRydW5jYXRlZExlbmd0aCA9IHRydW5jYXRlVG9CdWZmZXIoc3RyaW5nLCBsZW5ndGgs
IGtlZXBDb3VudCwgc3RyaW5nQnVmZmVyLCBzaG91bGRJbnNlcnRFbGxpcHNpcyk7CiAKICAgICAg
ICAgd2lkdGggPSBzdHJpbmdXaWR0aChmb250LCBzdHJpbmdCdWZmZXIsIHRydW5jYXRlZExlbmd0
aCwgZGlzYWJsZVJvdW5kaW5nSGFja3MpOworICAgICAgICBpZiAoIXNob3VsZEluc2VydEVsbGlw
c2lzKQorICAgICAgICAgICAgd2lkdGggKz0gY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aDsK
ICAgICAgICAgaWYgKHdpZHRoIDw9IG1heFdpZHRoKSB7CiAgICAgICAgICAgICBrZWVwQ291bnRG
b3JMYXJnZXN0S25vd25Ub0ZpdCA9IGtlZXBDb3VudDsKICAgICAgICAgICAgIHdpZHRoRm9yTGFy
Z2VzdEtub3duVG9GaXQgPSB3aWR0aDsKKyAgICAgICAgICAgIGlmIChyZXN1bHRXaWR0aCkKKyAg
ICAgICAgICAgICAgICAqcmVzdWx0V2lkdGggPSB3aWR0aDsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGtlZXBDb3VudEZvclNtYWxsZXN0S25vd25Ub05vdEZpdCA9IGtlZXBDb3VudDsK
ICAgICAgICAgICAgIHdpZHRoRm9yU21hbGxlc3RLbm93blRvTm90Rml0ID0gd2lkdGg7CkBAIC0x
NzUsNyArMjgzLDcgQEAgc3RhdGljIFN0cmluZyB0cnVuY2F0ZVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGYKICAgICAKICAgICBpZiAoa2Vl
cENvdW50ICE9IGtlZXBDb3VudEZvckxhcmdlc3RLbm93blRvRml0KSB7CiAgICAgICAgIGtlZXBD
b3VudCA9IGtlZXBDb3VudEZvckxhcmdlc3RLbm93blRvRml0OwotICAgICAgICB0cnVuY2F0ZWRM
ZW5ndGggPSB0cnVuY2F0ZVRvQnVmZmVyKHN0cmluZywgbGVuZ3RoLCBrZWVwQ291bnQsIHN0cmlu
Z0J1ZmZlcik7CisgICAgICAgIHRydW5jYXRlZExlbmd0aCA9IHRydW5jYXRlVG9CdWZmZXIoc3Ry
aW5nLCBsZW5ndGgsIGtlZXBDb3VudCwgc3RyaW5nQnVmZmVyLCBzaG91bGRJbnNlcnRFbGxpcHNp
cyk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBTdHJpbmcoc3RyaW5nQnVmZmVyLCB0cnVuY2F0
ZWRMZW5ndGgpOwpAQCAtMTk2LDQgKzMwNCwyOSBAQCBmbG9hdCBTdHJpbmdUcnVuY2F0b3I6Ondp
ZHRoKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZAog
ICAgIHJldHVybiBzdHJpbmdXaWR0aChmb250LCBzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcu
bGVuZ3RoKCksICFlbmFibGVSb3VuZGluZ0hhY2tzKTsKIH0KIAorU3RyaW5nIFN0cmluZ1RydW5j
YXRvcjo6Y2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRo
LCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRp
bmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBm
bG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQoreworICAgIHJldHVybiB0cnVuY2F0
ZVN0cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyLCAh
ZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywg
Y3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7Cit9CisKK1N0cmluZyBTdHJpbmdUcnVuY2F0
b3I6OnJpZ2h0VHJ1bmNhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBj
b25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdI
YWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9h
dCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQoreworICAgIHJldHVybiB0cnVuY2F0ZVN0
cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCByaWdodFRydW5jYXRlVG9CdWZmZXIsICFlbmFi
bGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0
b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKK30KKworU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6
bGVmdFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3Qg
Rm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3Ms
IGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxvYXQgY3Vz
dG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK3sKKyAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmco
c3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgbGVmdFRydW5jYXRlVG9CdWZmZXIsICFlbmFibGVSb3Vu
ZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0b21UcnVu
Y2F0aW9uRWxlbWVudFdpZHRoKTsKK30KKworU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRD
bGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNr
cywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBj
dXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKQoreworICAgIHJldHVybiB0cnVuY2F0ZVN0cmlu
ZyhzdHJpbmcsIG1heFdpZHRoLCBmb250LCByaWdodENsaXBUb0NoYXJhY3RlckJ1ZmZlciwgIWVu
YWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGN1
c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOworfQorCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9y
OjpyaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBj
b25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdI
YWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCAgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCwgYm9vbCBhbHdheXNUcnVuY2F0ZSkKK3sK
KyAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRD
bGlwVG9Xb3JkQnVmZmVyLCAhZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91
bGRJbnNlcnRFbGxpcHNpcywgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCwgYWx3YXlzVHJ1
bmNhdGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCmluZGV4IDE0OTljMTA4NzQ0
NzNhZDQ2M2M0ZjM3YWIyMDRlZDAwNjc5ZGNkN2MuLjEzZDhlMTRhZjdlODY0OGE3MWNmNDc3MDQw
NjY2Mjg2OWUzOTdjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5oCkBAIC00MSw2ICs0MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgc3RhdGljIFN0cmluZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcm
LCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9
IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKICAgICAgICAgc3RhdGljIFN0cmluZyByaWdodFRydW5j
YXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91
bmRpbmdIYWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOworCisgICAgICAgIHN0YXRp
YyBTdHJpbmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNv
bnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwg
Ym9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25F
bGVtZW50V2lkdGggPSAwKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNv
bnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdI
YWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMg
PSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgICAg
IHN0YXRpYyBTdHJpbmcgbGVmdFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRo
LCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lk
dGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0
aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgcmlnaHRDbGlwVG9D
aGFyYWN0ZXIoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFi
bGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNl
cnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAw
KTsKKyAgICAgICAgc3RhdGljIFN0cmluZyByaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwg
ZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZs
b2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwLCBib29sIGFsd2F5c1RydW5jYXRlID0g
ZmFsc2UpOworCiAgICAgICAgIHN0YXRpYyBmbG9hdCB3aWR0aChjb25zdCBTdHJpbmcmLCBjb25z
dCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3Mp
OwogICAgIH07CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAKaW5kZXggNjhlNGMyZDRhMzA5
MzU1ZWE4MzQzNGVkYjVkOTgzN2VkN2ZhNTY1YS4uZDE3OGU1ODZmNzhmMjAxNjkwZWVjMzNmMjJh
MjYzNDkzYmExYWRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1RleHRUcmFja1JlcHJlc2VudGF0aW9uLmNwcApAQCAtNDIsMTAgKzQyLDEy
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFJlY3QgYm91bmRzKCkgY29uc3QgeyByZXR1cm4g
SW50UmVjdCgpOyB9CiB9OwogCisjaWYgIVBMQVRGT1JNKElPUykKIFBhc3NPd25QdHI8VGV4dFRy
YWNrUmVwcmVzZW50YXRpb24+IFRleHRUcmFja1JlcHJlc2VudGF0aW9uOjpjcmVhdGUoVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25DbGllbnQqKQogewogICAgIHJldHVybiBXVEY6OmFkb3B0UHRyKG5l
dyBOdWxsVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKSk7CiB9CisjZW5kaWYKIAogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKaW5kZXgg
YmY2MzVjOWNhNDdmNjQ0NjNhNjMyNGI3Zjg3NzlmNDM0MzkxYWE0Ny4uMTM0NGI5YWU2MTQyNGVi
MTM0NzdiMWJkNjI1NjgwMjMzNTFkYjZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1R5cGVzZXR0aW5nRmVhdHVyZXMoY29uc3QgRm9udCYg
Zm9udCkKICAgICB7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID4gMTA4MAorI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCiAgICAgICAgIGlmICghZm9u
dC5pc1ByaW50ZXJGb250KCkpCiAgICAgICAgICAgICByZXR1cm4gIWZvbnQudHlwZXNldHRpbmdG
ZWF0dXJlcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbC5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BVlRyYWNrUHJpdmF0ZUFWRk9iakNJ
bXBsLm1tCmluZGV4IDE2ZDA4MTE3NmQ3ODkxNTllNGE3MjhkNDc0OWI0MWI1Mzk5MzI3OTYuLjll
NDU1YjRlOTIwMDNmY2UyNmY0YjQwNWMyZjAzYjg5Yzk3MmFkZjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BVlRyYWNrUHJpdmF0ZUFW
Rk9iakNJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9BVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsLm1tCkBAIC0xMTUsNyArMTE1LDcgQEAg
QXRvbWljU3RyaW5nIEFWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGw6OmxhYmVsKCkgY29uc3QKICAg
ICAgICAgcmV0dXJuIGVtcHR5QXRvbTsKIAogICAgIC8vIElmIHBvc3NpYmxlLCByZXR1cm4gYSB0
aXRsZSBpbiBvbmUgb2YgdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2VzLgotI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAorI2lmIFBMQVRGT1JNKElPUykgfHwg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAgICAgTlNBcnJheSAqdGl0
bGVzRm9yUHJlZmVycmVkTGFuZ3VhZ2VzID0gW0FWTWV0YWRhdGFJdGVtIG1ldGFkYXRhSXRlbXNG
cm9tQXJyYXk6dGl0bGVzIGZpbHRlcmVkQW5kU29ydGVkQWNjb3JkaW5nVG9QcmVmZXJyZWRMYW5n
dWFnZXM6W05TTG9jYWxlIHByZWZlcnJlZExhbmd1YWdlc11dOwogI2Vsc2UKICAgICBOU0FycmF5
ICp0aXRsZXNGb3JQcmVmZXJyZWRMYW5ndWFnZXMgPSBbQVZNZXRhZGF0YUl0ZW0gbWV0YWRhdGFJ
dGVtc0Zyb21BcnJheTp0aXRsZXMgd2l0aExvY2FsZTpbTlNMb2NhbGUgY3VycmVudExvY2FsZV1d
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMubW0KaW5kZXggYTYzZWQ2NzVkMDU2MmI1MDM2Y2IyMTczOGI3
NTdjMjU5M2I1NWE4Zi4uOTk0ODZkN2ExNDZmZGJlYWM2ZmQxOGNhZWZjZGVjZTlmMjZjZDkxMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCkBAIC02Miw4ICs2MiwxMiBAQAogI2ltcG9ydCA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0aW9uLmg+
Ci0jaW1wb3J0IDxDb3JlTWVkaWEvQ29yZU1lZGlhLmg+CisjaWYgUExBVEZPUk0oSU9TKQorI2lt
cG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgorI2Vsc2UKICNpbXBvcnQgPFF1YXJ0ekNvcmUv
Q29yZUltYWdlLmg+CisjZW5kaWYKKyNpbXBvcnQgPENvcmVNZWRpYS9Db3JlTWVkaWEuaD4KIAog
I2lmIFVTRShWSURFT1RPT0xCT1gpCiAjaW1wb3J0IDxDb3JlVmlkZW8vQ29yZVZpZGVvLmg+CkBA
IC03NzksNyArNzgzLDcgQEAgZG91YmxlIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OnBsYXRmb3JtTWF4VGltZVNlZWthYmxlKCkgY29uc3QKIAogZmxvYXQgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1NYXhUaW1lTG9hZGVkKCkgY29uc3QKIHsK
LSNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0g
MTA4MAorI2lmICFQTEFURk9STShJT1MpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPD0gMTA4MAogICAgIC8vIEFWRm91bmRhdGlvbiBvbiBNb3VudGFpbiBMaW9uIHdpbGwgb2Nj
YXNpb25hbGx5IG5vdCBzZW5kIGEgS1ZPIG5vdGlmaWNhdGlvbgogICAgIC8vIHdoZW4gbG9hZGVk
VGltZVJhbmdlcyBjaGFuZ2VzIHdoZW4gdGhlcmUgaXMgbm8gdmlkZW8gb3V0cHV0LiBJbiB0aGF0
IGNhc2UKICAgICAvLyB1cGRhdGUgdGhlIGNhY2hlZCB2YWx1ZSBleHBsaWNpdGx5LgpAQCAtMTIz
Miw2ICsxMjM2LDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
c2l6ZUNoYW5nZWQoKQogICAgIHNldE5hdHVyYWxTaXplKEludFNpemUobmF0dXJhbFNpemUpKTsK
IH0KIAorI2lmIFBMQVRGT1JNKElPUykKKy8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIGlPUyBpbiBX
ZWJLaXQgU3lzdGVtIEludGVyZmFjZS4KK3N0YXRpYyBpbmxpbmUgTlNVUkwgKndrQVZBc3NldFJl
c29sdmVkVVJMKEFWQXNzZXQqKQoreworICAgIHJldHVybiBuaWw7Cit9CisjZW5kaWYKKwogYm9v
bCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpoYXNTaW5nbGVTZWN1cml0eU9y
aWdpbigpIGNvbnN0IAogewogICAgIGlmICghbV9hdkFzc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250QmxhY2tCZXJyeS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRCbGFja0Jl
cnJ5LmNwcAppbmRleCBlOTRjNzg3YzZjYTAxMTE1YzQ1YTkzNjk4MmMwNjQ1ZDM0NWZmOTE4Li41
YTZkYTE3ZmFjZjExMzk4NDUzOGQwMGRlZTdkM2FkYjExMjQyOTFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRCbGFja0JlcnJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRC
bGFja0JlcnJ5LmNwcApAQCAtMzgsMTAgKzM4LDEwIEBAIHN0YXRpYyBpbmxpbmUgRlNfRklYRUQg
RmxvYXRUb0ZTRml4ZWQoZmxvYXQgbikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RlNfRklYRUQ+KG4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIGlmICgh
cnVuLmxlbmd0aCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAwOwogCiAgICAg
R2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMs
IHJ1bik7CkBAIC00OSw4ICs0OSwxMCBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRgogICAgIGlm
ICghc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikpCiAgICAgICAgIHJldHVybjsKICAgICBGbG9h
dFBvaW50IGFkanVzdGVkUG9pbnQgPSBzaGFwZXIuYWRqdXN0U3RhcnRQb2ludChwb2ludCk7Cisg
ICAgZmxvYXQgc3RhcnRYID0gYWRqdXN0ZWRQb2ludC54KCk7CiAKICAgICBkcmF3R2x5cGhCdWZm
ZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgYWRqdXN0ZWRQb2ludCk7CisgICAgcmV0dXJu
IGFkanVzdGVkUG9pbnQueCgpIC0gc3RhcnRYOwogfQogCiBmbG9hdCBGb250OjpmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIC8qIGZhbGxiYWNrRm9udHMgKi8sIEdseXBoT3ZlcmZsb3cqIC8qIGdseXBoT3Zl
cmZsb3cgKi8pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCA2MjU5ZDMyYTQxM2U1M2I5Y2M2Y2Fm
ZDY5MWVjY2M0NGY1ZWVkZjAzLi5mZjU0MTEyMGYzNTYzZWMxZDRjYzU5M2YyN2NjYjlhY2VkOGYx
MTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTQ3LDYgKzQ3LDEwIEBACiAjaW5jbHVkZSA8d3RmL1Rl
bXBvcmFyeUNoYW5nZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYg
UExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgorCiAjaWYg
UExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllck1hYy5oIgogI2luY2x1ZGUg
IldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKQEAgLTYxLDcgKzY1LDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIC8vIFRoZSB0aHJlc2hvbGQgd2lkdGggb3IgaGVpZ2h0IGFib3ZlIHdoaWNoIGEg
dGlsZWQgbGF5ZXIgd2lsbCBiZSB1c2VkLiBUaGlzIHNob3VsZCBiZQogLy8gbGFyZ2UgZW5vdWdo
IHRvIGF2b2lkIHRpbGVkIGxheWVycyBmb3IgbW9zdCBHcmFwaGljc0xheWVycywgYnV0IGxlc3Mg
dGhhbiB0aGUgT3BlbkdMCiAvLyB0ZXh0dXJlIHNpemUgbGltaXQgb24gYWxsIHN1cHBvcnRlZCBo
YXJkd2FyZS4KKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgY29uc3QgaW50IGNNYXhQaXhlbERp
bWVuc2lvbiA9IDEyODA7CisjZWxzZQogc3RhdGljIGNvbnN0IGludCBjTWF4UGl4ZWxEaW1lbnNp
b24gPSAyMDAwOworI2VuZGlmCiAKIC8vIERlcml2ZWQgZW1waXJpY2FsbHk6IDxyZGFyOi8vcHJv
YmxlbS8xMzQwMTg2MT4KIHN0YXRpYyBjb25zdCBpbnQgY01heExheWVyVHJlZURlcHRoID0gMjUw
OwpAQCAtMjgyLDcgKzI5MCw3IEBAIHN0YXRpYyBmbG9hdCBtYXhTY2FsZUZyb21UcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCiBzdGF0aWMgaW5saW5lIGJvb2wgc3VwcG9y
dHNBY2NlbGVyYXRlZEZpbHRlckFuaW1hdGlvbnMoKQogewogLy8gPHJkYXI6Ly9wcm9ibGVtLzEw
OTA3MjUxPiAtIFdlYktpdDIgZG9lc24ndCBzdXBwb3J0IENBIGFuaW1hdGlvbnMgb2YgQ0kgZmls
dGVycyBvbiBMaW9uIGFuZCBiZWxvdwotI2lmIFBMQVRGT1JNKE1BQykgJiYgKFBMQVRGT1JNKElP
UykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwKQorI2lmIFBMQVRG
T1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDgwKQogICAgIHJldHVybiB0cnVlOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7
CkBAIC04NzEsNyArODc5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9J
bWFnZShJbWFnZSogaW1hZ2UpCiAgICAgICAgIG1fdW5jb3JyZWN0ZWRDb250ZW50c0ltYWdlID0g
bmV3SW1hZ2U7CiAgICAgICAgIG1fcGVuZGluZ0NvbnRlbnRzSW1hZ2UgPSBuZXdJbWFnZTsKIAot
I2lmICFQTEFURk9STShXSU4pCisjaWYgIVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKElPUykK
ICAgICAgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0ltYWdlR2V0Q29sb3JTcGFj
ZShtX3BlbmRpbmdDb250ZW50c0ltYWdlLmdldCgpKTsKIAogICAgICAgICBzdGF0aWMgQ0dDb2xv
clNwYWNlUmVmIGRldmljZVJHQiA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwpAQCAt
OTE2LDYgKzkyNCwxMyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb01lZGlh
KFBsYXRmb3JtTGF5ZXIqIG1lZGlhTGF5ZXIpCiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2Vk
KENvbnRlbnRzTWVkaWFMYXllckNoYW5nZWQpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorUGxh
dGZvcm1MYXllciogR3JhcGhpY3NMYXllckNBOjpjb250ZW50c0xheWVyRm9yTWVkaWEoKSBjb25z
dAoreworICAgIHJldHVybiBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID09IENvbnRlbnRzTGF5ZXJG
b3JNZWRpYSA/IG1fY29udGVudHNMYXllci0+cGxhdGZvcm1MYXllcigpIDogbnVsbHB0cjsKK30K
KyNlbmRpZgorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0
Zm9ybUxheWVyKiBjYW52YXNMYXllcikKIHsKICAgICBpZiAobV9jb250ZW50c0xheWVyICYmIGNh
bnZhc0xheWVyID09IG1fY29udGVudHNMYXllci0+cGxhdGZvcm1MYXllcigpKQpAQCAtMTEwMSw2
ICsxMTE2LDEwIEBAIEZsb2F0UmVjdCBHcmFwaGljc0xheWVyQ0E6OmNvbXB1dGVWaXNpYmxlUmVj
dChUcmFuc2Zvcm1TdGF0ZSYgc3RhdGUsIENvbXB1dGVWaXNpCiAgICAgYm9vbCBtYXBXYXNDbGFt
cGVkOwogICAgIEZsb2F0UmVjdCBjbGlwUmVjdEZvckNoaWxkcmVuID0gc3RhdGUubWFwcGVkUXVh
ZCgmbWFwV2FzQ2xhbXBlZCkuYm91bmRpbmdCb3goKTsKICAgICBGbG9hdFBvaW50IGJvdW5kc09y
aWdpbiA9IG1fYm91bmRzT3JpZ2luOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBVSUtpdCBt
YXkgYmUgY2hhbmdpbmcgbGF5ZXIgYm91bmRzIGJlaGluZCBvdXIgYmFjayBpbiBvdmVyZmxvdy1z
Y3JvbGwgbGF5ZXJzLCBzbyB1c2UgdGhlIGxheWVyJ3Mgb3JpZ2luLgorICAgIGJvdW5kc09yaWdp
biA9IG1fbGF5ZXItPmJvdW5kcygpLmxvY2F0aW9uKCk7CisjZW5kaWYKICAgICBjbGlwUmVjdEZv
ckNoaWxkcmVuLm1vdmUoYm91bmRzT3JpZ2luLngoKSwgYm91bmRzT3JpZ2luLnkoKSk7CiAgICAg
CiAgICAgRmxvYXRSZWN0IGNsaXBSZWN0Rm9yU2VsZihib3VuZHNPcmlnaW4sIG1fc2l6ZSk7CkBA
IC0xNDY4LDYgKzE0ODcsMTAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdlb21ldHJ5
KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG8KICAgICBGbG9hdFNp
emUgcGl4ZWxBbGlnbm1lbnRPZmZzZXQ7CiAgICAgY29tcHV0ZVBpeGVsQWxpZ25tZW50KHBhZ2VT
Y2FsZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSwgc2NhbGVkUG9zaXRpb24sIHNjYWxl
ZFNpemUsIHNjYWxlZEFuY2hvclBvaW50LCBwaXhlbEFsaWdubWVudE9mZnNldCk7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgbV9waXhlbEFsaWdubWVudE9mZnNldCA9IHBpeGVsQWxpZ25tZW50
T2Zmc2V0OworI2VuZGlmCisKICAgICBGbG9hdFJlY3QgYWRqdXN0ZWRCb3VuZHMobV9ib3VuZHNP
cmlnaW4gLSBwaXhlbEFsaWdubWVudE9mZnNldCwgc2NhbGVkU2l6ZSk7CiAKICAgICAvLyBVcGRh
dGUgcG9zaXRpb24uCkBAIC0xNDc3LDEwICsxNTAwLDIxIEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
Ojp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvCiAgICAgaWYgKG1fc3RydWN0dXJhbExheWVyKSB7CiAgICAgICAgIEZsb2F0UG9pbnQgbGF5
ZXJQb3NpdGlvbihtX3Bvc2l0aW9uLngoKSArIG1fYW5jaG9yUG9pbnQueCgpICogbV9zaXplLndp
ZHRoKCksIG1fcG9zaXRpb24ueSgpICsgbV9hbmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0
KCkpOwogICAgICAgICBGbG9hdFJlY3QgbGF5ZXJCb3VuZHMobV9ib3VuZHNPcmlnaW4sIG1fc2l6
ZSk7Ci0gICAgICAgIAorCisjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAg
ICAgIC8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgdGhlIG1haW4gdGhyZWFkIGxvZ2ljIGludG8g
UGxhdGZvcm1DQUxheWVyLgorICAgICAgICBpZiAobWVkaWFMYXllck11c3RCZVVwZGF0ZWRPbk1h
aW5UaHJlYWQoKSAmJiBXZWJUaHJlYWRJc0N1cnJlbnQoKSkgeworICAgICAgICAgICAgbV9zdHJ1
Y3R1cmFsTGF5ZXItPnNldFBvc2l0aW9uT25NYWluVGhyZWFkKGxheWVyUG9zaXRpb24pOworICAg
ICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNldEJvdW5kc09uTWFpblRocmVhZChsYXllckJv
dW5kcyk7CisgICAgICAgICAgICBtX3N0cnVjdHVyYWxMYXllci0+c2V0QW5jaG9yUG9pbnRPbk1h
aW5UaHJlYWQobV9hbmNob3JQb2ludCk7CisgICAgICAgIH0gZWxzZSB7CisjZW5kaWYKICAgICAg
ICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNldFBvc2l0aW9uKGxheWVyUG9zaXRpb24pOwogICAgICAg
ICBtX3N0cnVjdHVyYWxMYXllci0+c2V0Qm91bmRzKGxheWVyQm91bmRzKTsKICAgICAgICAgbV9z
dHJ1Y3R1cmFsTGF5ZXItPnNldEFuY2hvclBvaW50KG1fYW5jaG9yUG9pbnQpOworI2lmIEVOQUJM
RShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorICAgICAgICB9CisjZW5kaWYKIAogICAgICAgICBp
ZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX3N0cnVjdHVyYWxMYXllckNsb25lcy5nZXQo
KSkgewogICAgICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xv
bmVNYXAtPmVuZCgpOwpAQCAtMTUwNCwxMCArMTUzOCwyMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50
JiBwbwogICAgICAgICBzY2FsZWRBbmNob3JQb2ludCA9IEZsb2F0UG9pbnQoMC41ZiwgMC41Zik7
CiAgICAgICAgIGFkanVzdGVkUG9zaXRpb24gPSBGbG9hdFBvaW50KHNjYWxlZEFuY2hvclBvaW50
LngoKSAqIHNjYWxlZFNpemUud2lkdGgoKSAtIHBpeGVsQWxpZ25tZW50T2Zmc2V0LndpZHRoKCks
IHNjYWxlZEFuY2hvclBvaW50LnkoKSAqIHNjYWxlZFNpemUuaGVpZ2h0KCkgLSBwaXhlbEFsaWdu
bWVudE9mZnNldC5oZWlnaHQoKSk7CiAgICAgfQotICAgIAorCisjaWYgRU5BQkxFKFBMVUdJTl9Q
Uk9YWV9GT1JfVklERU8pCisgICAgLy8gRklYTUU6IENvbnNpZGVyIG1vdmluZyB0aGUgbWFpbiB0
aHJlYWQgbG9naWMgaW50byBQbGF0Zm9ybUNBTGF5ZXIuCisgICAgaWYgKG1lZGlhTGF5ZXJNdXN0
QmVVcGRhdGVkT25NYWluVGhyZWFkKCkgJiYgV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKKyAgICAg
ICAgbV9sYXllci0+c2V0UG9zaXRpb25Pbk1haW5UaHJlYWQoYWRqdXN0ZWRQb3NpdGlvbik7Cisg
ICAgICAgIG1fbGF5ZXItPnNldEJvdW5kc09uTWFpblRocmVhZChhZGp1c3RlZEJvdW5kcyk7Cisg
ICAgICAgIG1fbGF5ZXItPnNldEFuY2hvclBvaW50T25NYWluVGhyZWFkKHNjYWxlZEFuY2hvclBv
aW50KTsKKyAgICB9IGVsc2UgeworI2VuZGlmCiAgICAgbV9sYXllci0+c2V0UG9zaXRpb24oYWRq
dXN0ZWRQb3NpdGlvbik7CiAgICAgbV9sYXllci0+c2V0Qm91bmRzKGFkanVzdGVkQm91bmRzKTsK
ICAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludChzY2FsZWRBbmNob3JQb2ludCk7CisjaWYgRU5B
QkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAgfQorI2VuZGlmCiAKICAgICBpZiAoTGF5
ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBtX2xheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgIExh
eWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKQEAgLTE2
NzgsNyArMTcyMywxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExh
eWVyKFN0cnVjdHVyYWxMYXllclB1cnBvc2UgcHVycG9zZSkKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIAorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFJlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+IG9sZFByaW1hcnlMYXllciA9IG1fc3RydWN0dXJhbExheWVyID8gbV9zdHJ1
Y3R1cmFsTGF5ZXIuZ2V0KCkgOiBtX2xheWVyLmdldCgpOworI2VuZGlmCisKICAgICBib29sIHN0
cnVjdHVyYWxMYXllckNoYW5nZWQgPSBmYWxzZTsKICAgICAKICAgICBpZiAocHVycG9zZSA9PSBT
dHJ1Y3R1cmFsTGF5ZXJGb3JQcmVzZXJ2ZXMzRCkgewpAQCAtMTk3Nyw4ICsyMDI2LDE4IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3RzKCkKICAgICBpZiAoZ2FpbmVk
T3JMb3N0Q2xpcHBpbmdMYXllcikKICAgICAgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoRG9udFNj
aGVkdWxlRmx1c2gpOwogCisjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAg
Ly8gRklYTUU6IENvbnNpZGVyIG1vdmluZyB0aGUgbWFpbiB0aHJlYWQgbG9naWMgaW50byBQbGF0
Zm9ybUNBTGF5ZXIuCisgICAgaWYgKG1lZGlhTGF5ZXJNdXN0QmVVcGRhdGVkT25NYWluVGhyZWFk
KCkgJiYgV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLT5z
ZXRQb3NpdGlvbk9uTWFpblRocmVhZChjb250ZW50T3JpZ2luKTsKKyAgICAgICAgbV9jb250ZW50
c0xheWVyLT5zZXRCb3VuZHNPbk1haW5UaHJlYWQoY29udGVudEJvdW5kcyk7CisgICAgfSBlbHNl
IHsKKyNlbmRpZgogICAgIG1fY29udGVudHNMYXllci0+c2V0UG9zaXRpb24oY29udGVudE9yaWdp
bik7CiAgICAgbV9jb250ZW50c0xheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisjaWYg
RU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pIAorICAgIH0KKyNlbmRpZgogCiAgICAgaWYg
KG1fY29udGVudHNMYXllckNsb25lcykgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9jb250ZW50c0xheWVyQ2xvbmVzLT5lbmQoKTsKQEAgLTIzNjIsOCArMjQyMSwx
MSBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uc0Zyb21L
ZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZQogICAgIGJvb2wgaXNNYXRyaXhBbmltYXRpb24g
PSBsaXN0SW5kZXggPCAwOwogICAgIGludCBudW1BbmltYXRpb25zID0gaXNNYXRyaXhBbmltYXRp
b24gPyAxIDogb3BlcmF0aW9ucy0+c2l6ZSgpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJv
b2wgcmV2ZXJzZUFuaW1hdGlvbkxpc3QgPSBmYWxzZTsKKyNlbHNlCiAgICAgYm9vbCByZXZlcnNl
QW5pbWF0aW9uTGlzdCA9IHRydWU7Ci0jaWYgIVBMQVRGT1JNKElPUykgJiYgIVBMQVRGT1JNKFdJ
TikKKyNpZiAhUExBVEZPUk0oV0lOKQogICAgICAgICAvLyBPbGQgdmVyc2lvbnMgb2YgQ29yZSBB
bmltYXRpb24gYXBwbHkgYW5pbWF0aW9ucyBpbiByZXZlcnNlIG9yZGVyICg8cmRhcjovL3Byb2Js
ZW0vNzA5NTYzOD4pIHNvIHdlIG5lZWQgdG8gZmxpcCB0aGUgbGlzdC4KICAgICAgICAgLy8gdG8g
YmUgbm9uLWFkZGl0aXZlLiBGb3IgYmluYXJ5IGNvbXBhdGliaWxpdHksIHRoZSBjdXJyZW50IHZl
cnNpb24gb2YgQ29yZSBBbmltYXRpb24gcHJlc2VydmVzIHRoaXMgYmVoYXZpb3IgZm9yIGFwcGxp
Y2F0aW9ucyBsaW5rZWQKICAgICAgICAgLy8gb24gb3IgYmVmb3JlIFNub3cgTGVvcGFyZC4KQEAg
LTIzNzMsNiArMjQzNSw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpjcmVhdGVUcmFuc2Zvcm1B
bmltYXRpb25zRnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlCiAgICAgICAgIGlmICgh
ZXhlY3V0YWJsZVdhc0xpbmtlZE9uT3JCZWZvcmVTbm93TGVvcGFyZCkKICAgICAgICAgICAgIHJl
dmVyc2VBbmltYXRpb25MaXN0ID0gZmFsc2U7CiAjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCiAgICAgaWYgKHJldmVyc2VBbmltYXRpb25MaXN0KSB7CiAgICAgICAgIGZvciAoaW50IGFu
aW1hdGlvbkluZGV4ID0gbnVtQW5pbWF0aW9ucyAtIDE7IGFuaW1hdGlvbkluZGV4ID49IDA7IC0t
YW5pbWF0aW9uSW5kZXgpIHsKICAgICAgICAgICAgIGlmICghYXBwZW5kVG9VbmNvbW1pdHRlZEFu
aW1hdGlvbnModmFsdWVMaXN0LCBvcGVyYXRpb25zLCBhbmltYXRpb24sIGFuaW1hdGlvbk5hbWUs
IGJveFNpemUsIGFuaW1hdGlvbkluZGV4LCB0aW1lT2Zmc2V0LCBpc01hdHJpeEFuaW1hdGlvbikp
IHsKQEAgLTMwMzIsNyArMzA5NSw5IEBAIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0ZXNPcmllbnRhdGlvbiBHcmFwaGljc0xheWVyQ0E6OmRlZmF1bHRDb250ZW50CiB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6c2V0dXBDb250ZW50c0xheWVyKFBsYXRmb3JtQ0FMYXllciogY29udGVu
dHNMYXllcikKIHsKICAgICAvLyBUdXJuIG9mZiBpbXBsaWNpdCBhbmltYXRpb25zIG9uIHRoZSBp
bm5lciBsYXllci4KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGNvbnRlbnRzTGF5ZXItPnNldE1h
c2tzVG9Cb3VuZHModHJ1ZSk7CisjZW5kaWYKIAogICAgIGlmIChkZWZhdWx0Q29udGVudHNPcmll
bnRhdGlvbigpID09IENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNCb3R0b21VcCkgewogICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBmbGlwcGVyKApAQCAtMzA1MSw2ICszMTE2LDEzIEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjpzZXR1cENvbnRlbnRzTGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBjb250
ZW50c0xheWVyKQogICAgIH0KIH0KIAorI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVP
KQorYm9vbCBHcmFwaGljc0xheWVyQ0E6Om1lZGlhTGF5ZXJNdXN0QmVVcGRhdGVkT25NYWluVGhy
ZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZW50c0xheWVyUHVycG9zZSA9PSBDb250
ZW50c0xheWVyRm9yTWVkaWE7Cit9CisjZW5kaWYKKwogUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5
ZXI+IEdyYXBoaWNzTGF5ZXJDQTo6ZmluZE9yTWFrZUNsb25lKENsb25lSUQgY2xvbmVJRCwgUGxh
dGZvcm1DQUxheWVyICpzb3VyY2VMYXllciwgTGF5ZXJNYXAqIGNsb25lcywgQ2xvbmVMZXZlbCBj
bG9uZUxldmVsKQogewogICAgIGlmICghc291cmNlTGF5ZXIpCkBAIC0zMzI3LDEyICszMzk5LDE0
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpjb21wdXRlUGl4ZWxBbGlnbm1lbnQoZmxvYXQgcGFn
ZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvCiAgICAgCiAgICAgLy8gQ29udmVydCBiYWNrIHRv
IGxheWVyIGNvb3JkaW5hdGVzLgogICAgIGFsaWduZWRCb3VuZHMuc2NhbGUoMSAvIHBhZ2VTY2Fs
ZUZhY3Rvcik7Ci0gICAgCisKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIEVwc2lsb24gaXMg
bmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IGJhY2tpbmcgc3RvcmUgc2l6ZSBjb21wdXRhdGlvbiBp
biBDQSwgd2hpY2ggaW52b2x2ZXMgaW50ZWdlciB0cnVuY2F0aW9uLAogICAgIC8vIHdpbGwgbWF0
Y2ggb3VyIGFsaWduZWQgYm91bmRzLgogICAgIGNvbnN0IGZsb2F0IGVwc2lsb24gPSAxZS01ZjsK
ICAgICBhbGlnbmVkQm91bmRzLmV4cGFuZChlcHNpbG9uLCBlcHNpbG9uKTsKLSAgICAKKyNlbmRp
ZgorCiAgICAgYWxpZ25tZW50T2Zmc2V0ID0gYmFzZVJlbGF0aXZlQm91bmRzLmxvY2F0aW9uKCkg
LSBhbGlnbmVkQm91bmRzLmxvY2F0aW9uKCk7CiAgICAgcG9zaXRpb24gPSBtX3Bvc2l0aW9uIC0g
YWxpZ25tZW50T2Zmc2V0OwogICAgIHNpemUgPSBhbGlnbmVkQm91bmRzLnNpemUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNB
LmgKaW5kZXggMWMzN2QwMGZkYzM0NTZhNmFkMDFlNzE0MzczNDBhNjFjZDBiNmE1Yy4uOWIyYjM2
NTgzNDdhZTliZGZhZGI0ODkxM2E5Yzk0MWU1ZGI2ZDU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKQEAgLTEyMSw2
ICsxMjEsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxh
eWVyKik7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogY29u
dGVudHNMYXllckZvck1lZGlhKCkgY29uc3QgT1ZFUlJJREU7CisjZW5kaWYKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKik7CiAgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IENvbG9yJik7CiAKQEAgLTEzNyw2ICsx
NDAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxheWVyRGlkRGlzcGxheShQbGF0Zm9y
bUxheWVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQo
Ym9vbCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgRmxvYXRTaXplIHBpeGVsQWxp
Z25tZW50T2Zmc2V0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9waXhlbEFsaWdubWVudE9m
ZnNldDsgfQorI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9y
Q2hhbmdlZCgpOwogCiAgICAgc3RydWN0IENvbW1pdFN0YXRlIHsKQEAgLTI1Niw2ICsyNjIsMTAg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHNldHVwQ29udGVudHNMYXllcihQbGF0Zm9ybUNBTGF5ZXIq
KTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRzTGF5ZXIuZ2V0KCk7IH0KIAorI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJ
REVPKQorICAgIGJvb2wgbWVkaWFMYXllck11c3RCZVVwZGF0ZWRPbk1haW5UaHJlYWQoKSBjb25z
dDsKKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBo
aWNzTGF5ZXIqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXREZWJ1Z0JvcmRlckluZm8oQ29sb3Im
LCBmbG9hdCYgd2lkdGgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmgKaW5kZXggMjljY2VmNDdkMDI4YjM0
OWI2NGFlYTQzNWE2ZDI1Njg5MjlmODcwOC4uY2RhNzJjZWY3NDA3NTdkNWU1NDMzNjA5ZDJkYjM5
ZDMxMzQwZjdjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBRmlsdGVycy5oCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAi
UGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAorI2lmIFBMQVRGT1JNKElPUykgfHwg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAjZGVmaW5lIFVTRV9DQV9G
SUxURVJTIDEKICNlbHNlCiAjZGVmaW5lIFVTRV9DQV9GSUxURVJTIDAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKaW5kZXgg
ZmI3ZTYxMDFmNjcyNGY2NjkwNDM2MzEzYjQ4OGExYzE0MDZiYzQyMS4uMmE0NmJkNjY0MmY4NTlm
NThhMjNmYTI1NDhhYWI0YTNjMDMzMDA4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKQEAgLTIwNiw2ICsyMDYsMTQg
QEAgcHVibGljOgogI2VuZGlmIC8vIE5ERUJVRwogI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIGlzV2ViTGF5ZXIoKTsKKyAgICB2b2lkIHNldEJv
dW5kc09uTWFpblRocmVhZChDR1JlY3QpOworICAgIHZvaWQgc2V0UG9zaXRpb25Pbk1haW5UaHJl
YWQoQ0dQb2ludCk7CisgICAgdm9pZCBzZXRBbmNob3JQb2ludE9uTWFpblRocmVhZChGbG9hdFBv
aW50M0QpOworICAgIHZvaWQgc2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYpOworI2VuZGlmCisK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGVDb21wYXRpYmxl
TGF5ZXIoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CiAKICNp
ZiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAKaW5kZXgg
MTQ2MmQ1ZTNiNDdhNGRkNmIyMTgzOTQ2OTZiZTIxNWIyZjY4ODhmYy4uYmZjM2U1YWY2YzMwNmZi
ZDVlY2E2ODEwYzNiMDQ3MTE5OGVhYzcwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllckZsdXNoU2NoZWR1bGVy
TWFjLmNwcApAQCAtMzEsMTEgKzMxLDMxIEBACiAKICNpbmNsdWRlIDx3dGYvQXV0b2RyYWluZWRQ
b29sLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzSU9TLmgiCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZCdW5kbGUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1dlYkNvcmVUaHJlYWQuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBjb25zdCBDRkluZGV4IENvcmVBbmltYXRpb25SdW5Mb29wT3JkZXIgPSAy
MDAwMDAwOwogc3RhdGljIGNvbnN0IENGSW5kZXggTGF5ZXJGbHVzaFJ1bkxvb3BPcmRlciA9IENv
cmVBbmltYXRpb25SdW5Mb29wT3JkZXIgLSAxOwogCitzdGF0aWMgQ0ZSdW5Mb29wUmVmIGN1cnJl
bnRSdW5Mb29wKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gQSByYWNlIGNvbmRpdGlv
biBkdXJpbmcgV2ViVmlldyBkZWFsbG9jYXRpb24gY2FuIGxlYWQgdG8gYSBjcmFzaCBpZiB0aGUg
bGF5ZXIgc3luYyBydW4gbG9vcAorICAgIC8vIG9ic2VydmVyIGlzIGFkZGVkIHRvIHRoZSBtYWlu
IHJ1biBsb29wIDxyZGFyOi8vcHJvYmxlbS85Nzk4NTUwPi4gSG93ZXZlciwgZm9yIHJlc3BvbnNp
dmVuZXNzLAorICAgIC8vIHdlIHN0aWxsIGFsbG93IHRoaXMsIHNlZSA8cmRhcjovL3Byb2JsZW0v
NzQwMzMyOD4uIFNpbmNlIHRoZSByYWNlIGNvbmRpdGlvbiBhbmQgc3Vic2VxdWVudAorICAgIC8v
IGNyYXNoIGFyZSBlc3BlY2lhbGx5IHRyb3VibGVzb21lIGZvciBpQm9va3MsIHdlIG5ldmVyIGFs
bG93IHRoZSBvYnNlcnZlciB0byBiZSBhZGRlZCB0byB0aGUKKyAgICAvLyBtYWluIHJ1biBsb29w
IGluIGlCb29rcy4KKyAgICBpZiAoYXBwbGljYXRpb25Jc0lCb29rc09uSU9TKCkpCisgICAgICAg
IHJldHVybiBXZWJUaHJlYWRSdW5Mb29wKCk7CisjZW5kaWYKKyAgICByZXR1cm4gQ0ZSdW5Mb29w
R2V0Q3VycmVudCgpOworfQorCiBMYXllckZsdXNoU2NoZWR1bGVyOjpMYXllckZsdXNoU2NoZWR1
bGVyKExheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQqIGNsaWVudCkKICAgICA6IG1faXNTdXNwZW5k
ZWQoZmFsc2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCkBAIC02OCwxMCArODgsMTAgQEAgdm9p
ZCBMYXllckZsdXNoU2NoZWR1bGVyOjpzY2hlZHVsZSgpCiAgICAgaWYgKG1faXNTdXNwZW5kZWQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIENGUnVuTG9vcFJlZiBjdXJyZW50UnVuTG9vcCA9IENG
UnVuTG9vcEdldEN1cnJlbnQoKTsKKyAgICBDRlJ1bkxvb3BSZWYgcnVuTG9vcCA9IGN1cnJlbnRS
dW5Mb29wKCk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2Ugd2FrZSB1cCB0aGUgbG9vcCBvciB0aGUg
b2JzZXJ2ZXIgY291bGQgYmUgZGVsYXllZCB1bnRpbCBzb21lIG90aGVyIHNvdXJjZSBmaXJlcy4K
LSAgICBDRlJ1bkxvb3BXYWtlVXAoY3VycmVudFJ1bkxvb3ApOworICAgIENGUnVuTG9vcFdha2VV
cChydW5Mb29wKTsKIAogICAgIGlmIChtX3J1bkxvb3BPYnNlcnZlcikKICAgICAgICAgcmV0dXJu
OwpAQCAtNzksNyArOTksNyBAQCB2b2lkIExheWVyRmx1c2hTY2hlZHVsZXI6OnNjaGVkdWxlKCkK
ICAgICBDRlJ1bkxvb3BPYnNlcnZlckNvbnRleHQgY29udGV4dCA9IHsgMCwgdGhpcywgMCwgMCwg
MCB9OwogICAgIG1fcnVuTG9vcE9ic2VydmVyID0gYWRvcHRDRihDRlJ1bkxvb3BPYnNlcnZlckNy
ZWF0ZSgwLCBrQ0ZSdW5Mb29wQmVmb3JlV2FpdGluZyB8IGtDRlJ1bkxvb3BFeGl0LCB0cnVlLCBM
YXllckZsdXNoUnVuTG9vcE9yZGVyLCBydW5Mb29wT2JzZXJ2ZXJDYWxsYmFjaywgJmNvbnRleHQp
KTsKIAotICAgIENGUnVuTG9vcEFkZE9ic2VydmVyKGN1cnJlbnRSdW5Mb29wLCBtX3J1bkxvb3BP
YnNlcnZlci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKKyAgICBDRlJ1bkxvb3BBZGRP
YnNlcnZlcihydW5Mb29wLCBtX3J1bkxvb3BPYnNlcnZlci5nZXQoKSwga0NGUnVuTG9vcENvbW1v
bk1vZGVzKTsKIH0KIAogdm9pZCBMYXllckZsdXNoU2NoZWR1bGVyOjppbnZhbGlkYXRlKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9y
bUNBTGF5ZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
UGxhdGZvcm1DQUxheWVyTWFjLm1tCmluZGV4IDMxYjQ4MjQ5MThjY2Y4YTFlMGE3Yzc2ZTU4NDIx
MGY5ZWU1ODY4NDkuLmQ5OWJjZDlkZjdiYTYxYjNhZjU5MTlkNzRmZDE4Yjg2NTVkY2I4OWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9y
bUNBTGF5ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQpAQCAtNDgsNiArNDgsMTMgQEAKICNpbXBvcnQgPHd0
Zi9DdXJyZW50VGltZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCisjaWYgUExBVEZP
Uk0oSU9TKQorI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgorI2ltcG9ydCAiV2ViVGlsZWRMYXll
ci5oIgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0dlb21ldHJ5Lmg+CisjaW1wb3J0IDxRdWFydHpD
b3JlL0NBVGlsZWRMYXllclByaXZhdGUuaD4KKyNlbmRpZgorCiBTT0ZUX0xJTktfRlJBTUVXT1JL
X09QVElPTkFMKEFWRm91bmRhdGlvbikKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFW
UGxheWVyTGF5ZXIpCiAKQEAgLTk5LDYgKzEwNiw5IEBAIHN0YXRpYyBkb3VibGUgbWVkaWFUaW1l
VG9DdXJyZW50VGltZShDRlRpbWVJbnRlcnZhbCB0KQogCiAtICh2b2lkKWFuaW1hdGlvbkRpZFN0
YXJ0OihDQUFuaW1hdGlvbiAqKWFuaW1hdGlvbgogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBX
ZWJUaHJlYWRMb2NrKCk7CisjZW5kaWYKICAgICAvLyBoYXNOb25aZXJvQmVnaW5UaW1lIGlzIHN0
b3JlZCBpbiBhIGtleSBpbiB0aGUgYW5pbWF0aW9uCiAgICAgYm9vbCBoYXNOb25aZXJvQmVnaW5U
aW1lID0gW1thbmltYXRpb24gdmFsdWVGb3JLZXk6V0tOb25aZXJvQmVnaW5UaW1lRmxhZ10gYm9v
bFZhbHVlXTsKICAgICBDRlRpbWVJbnRlcnZhbCBzdGFydFRpbWU7CkBAIC03MjYsNiArNzM2LDE2
IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHZhbHVl
KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgp
IHNldENvbnRlbnRzU2NhbGU6dmFsdWVdOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBbbV9sYXll
ci5nZXQoKSBzZXRSYXN0ZXJpemF0aW9uU2NhbGU6dmFsdWVdOworCisgICAgaWYgKG1fbGF5ZXJU
eXBlID09IExheWVyVHlwZVdlYlRpbGVkTGF5ZXIpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGlu
dmFsaWRhdGUgYWxsIHRoZSB0aWxlcyBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCBzdGFsZSB0aWxl
cyB3aXRoIHRoZSB3cm9uZyBzY2FsZSBpbiB0aGUgd3JvbmcgcGxhY2UsCisgICAgICAgIC8vIHNl
ZSA8cmRhcjovL3Byb2JsZW0vOTQzNDc2NT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAg
IHN0YXRpYyBOU0RpY3Rpb25hcnkgKm9wdGlvbnNEaWN0aW9uYXJ5ID0gW1tOU0RpY3Rpb25hcnkg
YWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllF
U10sIGtDQVRpbGVkTGF5ZXJSZW1vdmVJbW1lZGlhdGVseSwgbmlsXTsKKyAgICAgICAgWyhDQVRp
bGVkTGF5ZXIgKiltX2xheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheUluUmVjdDpbbV9sYXllci5n
ZXQoKSBib3VuZHNdIGxldmVsT2ZEZXRhaWw6MCBvcHRpb25zOm9wdGlvbnNEaWN0aW9uYXJ5XTsK
KyAgICB9CisjZW5kaWYKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKQEAgLTc3
MCw2ICs3OTAsNTggQEAgVGlsZWRCYWNraW5nKiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnRpbGVkQmFj
a2luZygpCiAgICAgcmV0dXJuIFt0aWxlZEJhY2tpbmdMYXllciB0aWxlZEJhY2tpbmddOwogfQog
CisjaWYgUExBVEZPUk0oSU9TKQorYm9vbCBQbGF0Zm9ybUNBTGF5ZXI6OmlzV2ViTGF5ZXIoKQor
eworICAgIEJPT0wgcmVzdWx0ID0gTk87CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
CisgICAgcmVzdWx0ID0gW21fbGF5ZXIuZ2V0KCkgaXNLaW5kT2ZDbGFzczpbV2ViTGF5ZXIgc2Vs
Zl1dOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm91bmRzT25NYWluVGhyZWFkKENHUmVjdCBi
b3VuZHMpCit7CisgICAgQ0FMYXllciAqbGF5ZXIgPSBtX2xheWVyLmdldCgpOworICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUworICAgICAgICBbbGF5ZXIgc2V0Qm91bmRzOmJvdW5kc107Cisg
ICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICB9KTsKK30KKwordm9pZCBQbGF0
Zm9ybUNBTGF5ZXI6OnNldFBvc2l0aW9uT25NYWluVGhyZWFkKENHUG9pbnQgcG9zaXRpb24pCit7
CisgICAgQ0FMYXllciAqbGF5ZXIgPSBtX2xheWVyLmdldCgpOworICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUworICAgICAgICBbbGF5ZXIgc2V0UG9zaXRpb246cG9zaXRpb25dOworICAgICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyOjpzZXRBbmNob3JQb2ludE9uTWFpblRocmVhZChGbG9hdFBvaW50M0QgdmFsdWUpCit7
CisgICAgQ0FMYXllciAqbGF5ZXIgPSBtX2xheWVyLmdldCgpOworICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUworICAgICAgICBbbGF5ZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UodmFs
dWUueCgpLCB2YWx1ZS55KCkpXTsKKyAgICAgICAgW2xheWVyIHNldEFuY2hvclBvaW50Wjp2YWx1
ZS56KCldOworICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfSk7Cit9CisK
K3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiB0aWxlU2l6
ZSkKK3sKKyAgICBpZiAobV9sYXllclR5cGUgIT0gTGF5ZXJUeXBlV2ViVGlsZWRMYXllcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW3N0
YXRpY19jYXN0PFdlYlRpbGVkTGF5ZXIqPihtX2xheWVyLmdldCgpKSBzZXRUaWxlU2l6ZTp0aWxl
U2l6ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKKwogUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllck1h
Yzo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVy
VHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBjbGllbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKGxheWVyVHlwZSwgY2xpZW50KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxl
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJv
bGxlci5tbQppbmRleCAwMmZiOWY3OGI0MzhiNjdiZGFiMzNmODY1NjkzZjQ1NDAwZTljZGU0Li5l
YThlYjQzN2Y4NDE1MDU4NzYzY2QwYTZmMTdkMTVjNTA5MjFkMmQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvbnRyb2xsZXIubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVy
Lm1tCkBAIC0yOSw3ICsyOSw5IEBACiAjaW1wb3J0ICJJbnRSZWN0LmgiCiAjaW1wb3J0ICJQbGF0
Zm9ybUNBTGF5ZXIuaCIKICNpbXBvcnQgIlJlZ2lvbi5oIgorI2lmICFQTEFURk9STShJT1MpCiAj
aW1wb3J0ICJMYXllclBvb2wuaCIKKyNlbmRpZgogI2ltcG9ydCAiV2ViTGF5ZXIuaCIKICNpbXBv
cnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW1wb3J0IDx1dGlsaXR5PgpAQCAtMTY2LDYgKzE2OCwx
MSBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRUaWxlTmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IFRpbGVJbmRleCYgdGlsZUluZGV4LCBUaWxlSQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpwbGF0
Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxheWVy
LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmKQogeworI2lmIFBMQVRG
T1JNKElPUykKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRocmVhZExv
Y2soKTsKKyNlbmRpZgorCiAgICAgaWYgKHBsYXRmb3JtQ0FMYXllciA9PSBtX3RpbGVkU2Nyb2xs
aW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkpIHsKICAgICAgICAgZHJhd1RpbGVNYXBDb250ZW50cyhj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIt
PmJvdW5kcygpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjM3LDcgKzY0NCw5IEBAIHZvaWQgVGls
ZUNvbnRyb2xsZXI6OnJlbW92ZUFsbFRpbGVzKCkKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdGlsZXNUb1JlbW92ZS5zaXplKCk7ICsraSkgewogICAgICAgICBUaWxlSW5mbyB0aWxlSW5m
byA9IG1fdGlsZXMudGFrZSh0aWxlc1RvUmVtb3ZlW2ldKTsKKyNpZiAhUExBVEZPUk0oSU9TKQog
ICAgICAgICBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRkTGF5ZXIodGlsZUluZm8ubGF5ZXIp
OworI2VuZGlmCiAgICAgfQogfQogCkBAIC02NTUsNyArNjY0LDkgQEAgdm9pZCBUaWxlQ29udHJv
bGxlcjo6cmVtb3ZlQWxsU2Vjb25kYXJ5VGlsZXMoKQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFRpbGVJbmZvIHRpbGVJ
bmZvID0gbV90aWxlcy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pOworI2lmICFQTEFURk9STShJT1Mp
CiAgICAgICAgIExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5hZGRMYXllcih0aWxlSW5mby5sYXll
cik7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTY3NCw3ICs2ODUsOSBAQCB2b2lkIFRpbGVDb250
cm9sbGVyOjpyZW1vdmVUaWxlc0luQ29ob3J0KFRpbGVDb2hvcnQgY29ob3J0KQogCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IFRpbGVJbmZvIHRpbGVJbmZvID0gbV90aWxlcy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pOworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgICAgIExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5hZGRMYXll
cih0aWxlSW5mby5sYXllcik7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTgwNCw3ICs4MTcsOSBA
QCB2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZhbGlkYXRlVGlsZXMoVGlsZVZhbGlkYXRpb25Qb2xp
Y3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdAogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBz
aXplID0gdGlsZXNUb1JlbW92ZS5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAg
IFRpbGVJbmZvIHRpbGVJbmZvID0gbV90aWxlcy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pOworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRk
TGF5ZXIodGlsZUluZm8ubGF5ZXIpOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEw
ODAsNyArMTA5NSwxMSBAQCBpbnQgVGlsZUNvbnRyb2xsZXI6OnJpZ2h0TWFyZ2luV2lkdGgoKSBj
b25zdAogCiBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlVGls
ZUxheWVyKGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQogeworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBsYXllcjsKKyNlbHNlCiAgICAgUmVmUHRyPFBsYXRm
b3JtQ0FMYXllcj4gbGF5ZXIgPSBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+dGFrZUxheWVyV2l0
aFNpemUodGlsZVJlY3Quc2l6ZSgpKTsKKyNlbmRpZgogCiAgICAgaWYgKGxheWVyKSB7CiAgICAg
ICAgIG1fdGlsZVJlcGFpbnRDb3VudHMucmVtb3ZlKGxheWVyLmdldCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6
TkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHAKaW5kZXggOGQ1MDBmNGE1NTA1MGMwNTBiMTM5Y2FmMDZjZjQ2MTRiNzAx
YzdmYi4uMGM5NDBjNWQ2OWM3ZDkzNzRjMmQ5MDA4MzFmNDM5OGUxMDU0ODFkMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1
enpORy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9u
dENhaXJvSGFyZmJ1enpORy5jcHAKQEAgLTM3LDE0ICszNywxOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50LCBp
bnQpIGNvbnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQs
IGludCkgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBIYXJmQnV6
elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKLSAgICBpZiAoc2hhcGVyLnNoYXBlKCZnbHlwaEJ1
ZmZlcikpCi0gICAgICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVy
LCBwb2ludCk7Ci0gICAgZWxzZQotICAgICAgICBMT0dfRVJST1IoIlNoYXBlciBjb3VsZG4ndCBz
aGFwZSBnbHlwaEJ1ZmZlci4iKTsKKyAgICBpZiAoc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikp
IHsKKyAgICAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50ID0gcG9pbnQ7CisgICAgICAgIGZsb2F0
IHN0YXJ0WCA9IHN0YXJ0UG9pbnQueCgpOworICAgICAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4
dCwgcnVuLCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCk7CisgICAgICAgIHJldHVybiBzdGFydFBv
aW50LngoKSAtIHN0YXJ0WDsKKyAgICB9CisgICAgTE9HX0VSUk9SKCJTaGFwZXIgY291bGRuJ3Qg
c2hhcGUgZ2x5cGhCdWZmZXIuIik7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgRm9udDo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQg
Ki8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJr
ICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAv
KiB0byAqLykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKaW5kZXggMzZlOWYyZTA0MTYxZWYwYzEzYzY3NDU0Zjhm
YjBjZDIxOWNiNTgxZS4uMWU0YzAxMzU5MzUyM2ViZTY0MWI3OTY0OTYzMjZhNDIxNWIwMDRiNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1h
Z2VDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFw
SW1hZ2VDRy5jcHAKQEAgLTMyLDcgKzMyLDExIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
Q0cuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiU3ViaW1hZ2VDYWNo
ZVdpdGhUaW1lci5oIgorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25T
ZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9DR0NvbnRleHRQcml2YXRlLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC01Miw2ICs1NiwxMiBAQCBib29sIEZyYW1lRGF0
YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQogCiAgICAgbV9vcmllbnRhdGlvbiA9IERlZmF1
bHRJbWFnZU9yaWVudGF0aW9uOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIG1fZnJhbWVCeXRl
cyA9IDA7CisgICAgbV9zY2FsZSA9IDE7CisgICAgbV9oYXZlSW5mbyA9IGZhbHNlOworI2VuZGlm
CisKICAgICBpZiAobV9mcmFtZSkgewogI2lmIENBQ0hFX1NVQklNQUdFUwogICAgICAgICBzdWJp
bWFnZUNhY2hlKCkuY2xlYXJJbWFnZShtX2ZyYW1lKTsKQEAgLTkwLDExICsxMDAsMjAgQEAgQml0
bWFwSW1hZ2U6OkJpdG1hcEltYWdlKENHSW1hZ2VSZWYgY2dJbWFnZSwgSW1hZ2VPYnNlcnZlciog
b2JzZXJ2ZXIpCiAgICAgLy8gU2V0IG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiB0byBiZSB0
aGUgc2FtZSBhcyBtX3NpemUgc28gaXQncyBub3QgMHgwLgogICAgIG1fc2l6ZVJlc3BlY3RpbmdP
cmllbnRhdGlvbiA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgbV9vcmlnaW5hbFNpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIG1fb3Jp
Z2luYWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsK
KyNlbmRpZgorCiAgICAgbV9mcmFtZXMuZ3JvdygxKTsKICAgICBtX2ZyYW1lc1swXS5tX2ZyYW1l
ID0gQ0dJbWFnZVJldGFpbihjZ0ltYWdlKTsKICAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0g
dHJ1ZTsKICAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7CiAKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgbV9mcmFtZXNbMF0ubV9zY2FsZSA9IDE7CisjZW5kaWYKKwogICAgIGNo
ZWNrRm9yU29saWRDb2xvcigpOwogfQogCkBAIC0xMDgsMTAgKzEyNywyNCBAQCB2b2lkIEJpdG1h
cEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCisj
aWYgIVBMQVRGT1JNKElPUykKICAgICBDR0ltYWdlUmVmIGltYWdlID0gZnJhbWVBdEluZGV4KDAp
OwotICAgIAorI2Vsc2UKKyAgICAvLyBOb3RlLCBjaGVja0ZvclNvbGlkQ29sb3IoKSBtYXkgYmUg
Y2FsbGVkIGZyb20gZnJhbWVBdEluZGV4KCkuIE9uIGlPUyBmcmFtZUF0SW5kZXgoKSBnZXRzIHBh
c3NlZCBhIHNjYWxlSGludAorICAgIC8vIGFyZ3VtZW50IHdoaWNoIGl0IHVzZXMgdG8gdGVsbCBD
RyB0byBjcmVhdGUgYSBzY2FsZWQgZG93biBpbWFnZS4gU2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUg
c2NhbGVIaW50IGhlcmUsIGlmCisgICAgLy8gd2UgY2FsbCBmcmFtZUF0SW5kZXgoKSBhZ2Fpbiwg
d2Ugd291bGQgcGFzcyBpdCB0aGUgZGVmYXVsdCBzY2FsZSBvZiAxIGFuZCB3b3VsZCBlbmQgdXAg
cmVjcmVhdGluZyB0aGUgaW1hZ2UuCisgICAgLy8gU28gd2UgZG8gYSBxdWljayBjaGVjayBhbmQg
Y2FsbCBmcmFtZUF0SW5kZXgoMCkgb25seSBpZiB3ZSBoYXZlbid0IHlldCBjcmVhdGVkIGFuIGlt
YWdlLgorICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBudWxscHRyOworICAgIGlmIChtX2ZyYW1lcy5z
aXplKCkpCisgICAgICAgIGltYWdlID0gbV9mcmFtZXNbMF0ubV9mcmFtZTsKKworICAgIGlmICgh
aW1hZ2UpCisgICAgICAgIGltYWdlID0gZnJhbWVBdEluZGV4KDApOworI2VuZGlmCisKICAgICAv
LyBDdXJyZW50bHkgd2Ugb25seSBjaGVjayBmb3Igc29saWQgY29sb3IgaW4gdGhlIGltcG9ydGFu
dCBzcGVjaWFsIGNhc2Ugb2YgYSAxeDEgaW1hZ2UuCiAgICAgaWYgKGltYWdlICYmIENHSW1hZ2VH
ZXRXaWR0aChpbWFnZSkgPT0gMSAmJiBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSA9PSAxKSB7Cisj
aWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdC
QQogICAgICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBibWFwID0gYWRvcHRDRihDR0JpdG1h
cENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIGRldmljZVJHQkNv
bG9yU3BhY2VSZWYoKSwKICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7CkBAIC0xMjQsNiArMTU3LDIzIEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAgICAgICAgICAgICBtX3NvbGlkQ29s
b3IgPSBDb2xvcigwLCAwLCAwLCAwKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zb2xp
ZENvbG9yID0gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUg
LyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOworI2Vsc2UK
KyAgICAgICAgLy8gRklYTUU6IENhbiB3ZSBzaGFyZSBtb3JlIGNvZGUgd2l0aCB0aGUgTWFjIHBv
cnQ/IEZvcm1lcmx5IHRoZSBNYWMgcG9ydCBjcmVhdGVkIGEgZmxvYXRpbmcgcG9pbnQgYml0bWFw
IGNvbnRleHQsCisgICAgICAgIC8vIGJ1dCBzdWNoIGEgY29udGV4dCB3YXNuJ3Qgc3VwcG9ydCBv
biBpT1MgKHJkYXI6Ly9wcm9ibGVtLzUxMDY1MTQpLiBTbywgb24gaU9TIHdlIGNyZWF0ZWQgYW4g
aW50ZWdyYWwgYml0bWFwCisgICAgICAgIC8vIGNvbnRleHQuIFNpbmNlIDxodHRwczovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjM5Mzk+IHRoZSBNYWMgcG9ydCBjcmVhdGVzIGFuIGludGVn
cmFsIGJpdG1hcCBjb250ZXh0LgorICAgICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsWzRdID0gezAs
IDAsIDAsIDB9OyAvLyBSR0JBCisgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGJpdG1h
cCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2Yo
cGl4ZWwpLCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksCisgICAgICAgICAgICBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgaWYgKCFiaXRtYXApCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIEdyYXBoaWNzQ29udGV4dChiaXRtYXAuZ2V0KCkpLnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgQ0dSZWN0IGRlc3RpbmF0aW9u
UmVjdCA9IHsgezAsIDB9LCB7MSwgMX0gfTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJp
dG1hcC5nZXQoKSwgZGVzdGluYXRpb25SZWN0LCBpbWFnZSk7CisgICAgICAgIGlmICghcGl4ZWxb
M10pCisgICAgICAgICAgICBtX3NvbGlkQ29sb3IgPSBDb2xvcigwLCAwLCAwLCAwKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50
PihwaXhlbFswXSksIHN0YXRpY19jYXN0PGludD4ocGl4ZWxbMV0pLCBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVsWzJdKSwgc3RhdGljX2Nhc3Q8aW50PihwaXhlbFszXSkpOworI2VuZGlmCiAgICAgICAg
IG1faXNTb2xpZENvbG9yID0gdHJ1ZTsKICAgICB9CiB9CkBAIC0xNjIsOSArMjEyLDIxIEBAIFJl
dGFpblB0cjxDRkFycmF5UmVmPiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkKIAogdm9p
ZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRN
b2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCiB7CisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBzdGFydEFuaW1hdGlvbigpOwogCiAgICAgQ0dJbWFnZVJlZiBpbWFn
ZSA9IGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CisjZWxzZQorICAgIHN0YXJ0QW5pbWF0
aW9uKGZhbHNlKTsKKworICAgIENHUmVjdCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdCA9IENH
UmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRlc3RSZWN0LCBDR0NvbnRleHRHZXRDVE0oY3R4dC0+
cGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Cisg
ICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNv
bnRleHRzLgorICAgIGlmIChDR0NvbnRleHRHZXRUeXBlKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgp
KSA9PSBrQ0dDb250ZXh0VHlwZVBERikKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKGNvcHlVbnNj
YWxlZEZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpOworICAgIGVsc2UKKyAgICAgICAgaW1h
Z2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN0ZDo6bWluPGZsb2F0PigxLjBmLCBz
dGQ6Om1heCh0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLndpZHRoICAvIHNyY1JlY3Qu
d2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0
LmhlaWdodCgpKSkpOworI2VuZGlmCiAgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFy
bHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKICAgICAKQEAg
LTE3MywxOCArMjM1LDQxIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgZmxvYXQgc2NhbGUgPSBtX2ZyYW1l
c1ttX2N1cnJlbnRGcmFtZV0ubV9zY2FsZTsKKyNlbmRpZgogICAgIEZsb2F0U2l6ZSBzZWxmU2l6
ZSA9IGN1cnJlbnRGcmFtZVNpemUoKTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9u
OwogCiAgICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVz
cGVjdEltYWdlT3JpZW50YXRpb24pCiAgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRh
dGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGN0
eHQtPmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgc2VsZlNpemUsIHN0eWxlQ29sb3JTcGFj
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHNjYWxlLCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmll
bnRhdGlvbik7CisjZWxzZQogICAgIGN0eHQtPmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgc2VsZlNp
emUsIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIGNvbXBvc2l0ZU9wLCBibGVu
ZE1vZGUsIG9yaWVudGF0aW9uKTsKKyNlbmRpZgogCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkK
ICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQogCisjaWYgUExBVEZP
Uk0oSU9TKQorUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFt
ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNp
emUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUpCisgICAgICAgIGNhY2hlRnJhbWUoaW5k
ZXgsIDEpOworCisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX3NjYWxlID09IDEgJiYgIW1fc291
cmNlLmlzU3Vic2FtcGxlZCgpKQorICAgICAgICByZXR1cm4gQ0dJbWFnZVJldGFpbihtX2ZyYW1l
c1tpbmRleF0ubV9mcmFtZSk7CisKKyAgICByZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVBdElu
ZGV4KGluZGV4KTsKK30KKyNlbmRpZgorCiB9CiAKICNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCmluZGV4IGQ3NGI0
YjQ3MGM1YjQ5NmNmMzA2ZTYxNTEwM2I4YTA4MWQyYjAwYmIuLjkyMzY2ZTJhYmZjZWVjNDgxMzM5
M2U0N2I1MDcwZjYxOTliZDMwMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0NvbG9yQ0cuY3BwCkBAIC0zMSwxMCArMzEsMzggQEAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRp
b25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR0NvbG9yVHJhbnNmb3JtLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVH
cmFwaGljcy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNlbmRpZiAvLyAhUExB
VEZPUk0oSU9TKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShJT1MpCitD
R0NvbG9yUmVmIGNyZWF0ZUNHQ29sb3JXaXRoRGV2aWNlV2hpdGUoQ0dGbG9hdCB3aGl0ZSwgQ0dG
bG9hdCBhbHBoYSkKK3sKKyAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIGdyYXlTcGFjZSA9IENH
Q29sb3JTcGFjZUNyZWF0ZURldmljZUdyYXkoKTsKKyAgICBjb25zdCBDR0Zsb2F0IGNvbXBvbmVu
dHNbXSA9IHsgd2hpdGUsIGFscGhhIH07CisgICAgcmV0dXJuIENHQ29sb3JDcmVhdGUoZ3JheVNw
YWNlLCBjb21wb25lbnRzKTsKK30KKworc3RhdGljIENHQ29sb3JSZWYgY3JlYXRlQ0dDb2xvcldp
dGhEZXZpY2VSR0JBKENHQ29sb3JSZWYgc291cmNlQ29sb3IpCit7CisgICAgaWYgKCFzb3VyY2VD
b2xvciB8fCBDRkVxdWFsKENHQ29sb3JHZXRDb2xvclNwYWNlKHNvdXJjZUNvbG9yKSwgZGV2aWNl
UkdCQ29sb3JTcGFjZVJlZigpKSkKKyAgICAgICAgcmV0dXJuIENHQ29sb3JSZXRhaW4oc291cmNl
Q29sb3IpOworCisgICAgUmV0YWluUHRyPENHQ29sb3JUcmFuc2Zvcm1SZWY+IGNvbG9yVHJhbnNm
b3JtID0gYWRvcHRDRihDR0NvbG9yVHJhbnNmb3JtQ3JlYXRlKGRldmljZVJHQkNvbG9yU3BhY2VS
ZWYoKSwgbnVsbHB0cikpOworICAgIGlmICghY29sb3JUcmFuc2Zvcm0pCisgICAgICAgIHJldHVy
biBDR0NvbG9yUmV0YWluKHNvdXJjZUNvbG9yKTsKKworICAgIC8vIENHQ29sb3JUcmFuc2Zvcm1D
b252ZXJ0Q29sb3IoKSByZXR1cm5zIGEgKzEgcmV0YWluZWQgb2JqZWN0LgorICAgIHJldHVybiBD
R0NvbG9yVHJhbnNmb3JtQ29udmVydENvbG9yKGNvbG9yVHJhbnNmb3JtLmdldCgpLCBzb3VyY2VD
b2xvciwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQorCiBDb2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikKIHsKICAgICBpZiAoIWNvbG9y
KSB7CkBAIC00Myw4ICs3MSwxNyBAQCBDb2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgc2l6ZV90IG51
bUNvbXBvbmVudHMgPSBDR0NvbG9yR2V0TnVtYmVyT2ZDb21wb25lbnRzKGNvbG9yKTsKICAgICBj
b25zdCBDR0Zsb2F0KiBjb21wb25lbnRzID0gQ0dDb2xvckdldENvbXBvbmVudHMoY29sb3IpOwor
I2Vsc2UKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY29ycmVjdGVkQ29sb3IgPSBhZG9wdENG
KGNyZWF0ZUNHQ29sb3JXaXRoRGV2aWNlUkdCQShjb2xvcikpOworICAgIGlmICghY29ycmVjdGVk
Q29sb3IpCisgICAgICAgIGNvcnJlY3RlZENvbG9yID0gY29sb3I7CisKKyAgICBzaXplX3QgbnVt
Q29tcG9uZW50cyA9IENHQ29sb3JHZXROdW1iZXJPZkNvbXBvbmVudHMoY29ycmVjdGVkQ29sb3Iu
Z2V0KCkpOworICAgIGNvbnN0IENHRmxvYXQqIGNvbXBvbmVudHMgPSBDR0NvbG9yR2V0Q29tcG9u
ZW50cyhjb3JyZWN0ZWRDb2xvci5nZXQoKSk7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAog
ICAgIGZsb2F0IHIgPSAwOwogICAgIGZsb2F0IGcgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKaW5kZXggZjM3ZTA3ZjMx
OTg4OGUyNzVjNmY0NTkyYjI5YzE0MjdiOWQ2OGU1ZC4uMjUwZWQ1MDVkZmYyOWI5NTBmMmEwYTNm
MzFmY2IzY2VmNGE5Y2M1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9GbG9hdFBvaW50Q0cuY3BwCkBAIC0yOSw3ICsyOSwxMSBAQAogCiAjaWYgVVNF
KENHKQogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2Vz
L0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0Nv
cmVHcmFwaGljcy5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCmluZGV4
IDRlYTA4M2FlYTNmZWE1MjY0OTdkMWIxYTgwNDQwZGMyNmNjNWM1MzAuLjhhMGE1M2M2MWQyNjY3
ZWJmNGRjMGZkOWY0NDVlNWYzYzdmNjI3N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTI5LDcgKzI5LDExIEBACiAK
ICNpZiBVU0UoQ0cpCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9u
U2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3Jh
cGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVDRy5j
cHAKaW5kZXggMTRlMTRmYzJhMzk5ZGQxN2RiMTI1MjAyNjE0MTQ5MjlkMzZhOWY2MC4uNGYxZTEw
OGRlMzlhMGMwNTc2ZmY1MGZkM2NjNjljNWMxYjQ3MTgzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRTaXplQ0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcApAQCAtMjksNyArMjks
MTEgQEAKIAogI2lmIFVTRShDRykKIAorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBw
bGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YWRpZW50Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGll
bnRDRy5jcHAKaW5kZXggNDdkOWM3ZjYwOGJiMGFkMDQ1NGU5ZGZlMDUzNzcxOTM5OGE2OTgzMC4u
Mzg3MTBhMTczNTgwOWViZmJjZGJhYjczMzIzYTdkZWE1YmQ2MDE4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKQEAgLTI4LDcg
KzI4LDExIEBACiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggYTE5NzQ1ZTI4ZTI2NTIx
YmRmMDg0YzBkZGZjZDlkNjkyMjEwMTJkZS4uM2Q0ZDNhZjk2YTI2ZTg0OTZjMWMyNjQ5OTExMWU2
OWUwMWQ1Mjk3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtNTEsMTAgKzUxLDE3IEBACiAjaW5j
bHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2Vu
ZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4
dEdTdGF0ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjZW5kaWYKKworI2lmICFQTEFU
Rk9STShJT1MpCiBleHRlcm4gIkMiIHsKICAgICBDR19FWFRFUk4gdm9pZCBDR0NvbnRleHRTZXRD
VE0oQ0dDb250ZXh0UmVmLCBDR0FmZmluZVRyYW5zZm9ybSk7CiAgICAgQ0dfRVhURVJOIENHQWZm
aW5lVHJhbnNmb3JtIENHQ29udGV4dEdldEJhc2VDVE0oQ0dDb250ZXh0UmVmKTsKIH07CisjZW5k
aWYgLy8gIVBMQVRGT1JNKElPUykKIAogLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgdXNpbmcgZGVj
bGFyYXRpb24gc2hvdWxkIGJlIGluIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPi4KIHVzaW5nIFdURjo6
cGFpckludEhhc2g7CkBAIC04Miw2ICs4OSw5IEBAIENHQ29sb3JTcGFjZVJlZiBkZXZpY2VSR0JD
b2xvclNwYWNlUmVmKCkKIAogQ0dDb2xvclNwYWNlUmVmIHNSR0JDb2xvclNwYWNlUmVmKCkKIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKTsK
KyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAgICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBzUkdC
U3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQik7CiAj
aWYgUExBVEZPUk0oV0lOKQogICAgIC8vIE91dC1vZi1kYXRlIENHIGluc3RhbGxhdGlvbnMgd2ls
bCBub3QgaG9ub3Iga0NHQ29sb3JTcGFjZVNSR0IuIFRoaXMgbG9naWMgYXZvaWRzCkBAIC05Myw3
ICsxMDMsMTUgQEAgQ0dDb2xvclNwYWNlUmVmIHNSR0JDb2xvclNwYWNlUmVmKCkKICAgICByZXR1
cm4gc1JHQlNwYWNlOwogfQogCi0jaWYgUExBVEZPUk0oV0lOKQorI2lmIFBMQVRGT1JNKElPUykK
K3ZvaWQgc2V0U3Ryb2tlQW5kRmlsbENvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0NvbG9y
UmVmIGNvbG9yKQoreworICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRl
eHQsIGNvbG9yKTsKKyAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29udGV4dCwg
Y29sb3IpOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKworI2lmIFBMQVRGT1JNKFdJTikg
fHwgUExBVEZPUk0oSU9TKQogQ0dDb2xvclNwYWNlUmVmIGxpbmVhclJHQkNvbG9yU3BhY2VSZWYo
KQogewogICAgIC8vIEZJWE1FOiBXaW5kb3dzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBsaW5lYXIg
c1JHQiwgdGhpcyBpcyB0cmFja2VkIGJ5IGh0dHA6Ly93ZWJraXQub3JnL2IvODAwMDAuCkBAIC0x
MDEsMTEgKzExOSwyMCBAQCBDR0NvbG9yU3BhY2VSZWYgbGluZWFyUkdCQ29sb3JTcGFjZVJlZigp
CiB9CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Jbml0KENHQ29udGV4dFJlZiBjZ0NvbnRleHQpCisjZWxzZQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtSW5pdChDR0NvbnRleHRSZWYgY2dDb250ZXh0LCBib29sIHNob3Vs
ZFVzZUNvbnRleHRDb2xvcnMpCisjZW5kaWYKIHsKICAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCk7CiAgICAgc2V0UGFpbnRpbmdEaXNhYmxl
ZCghY2dDb250ZXh0KTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChjZ0NvbnRleHQpIHsK
KyNlbHNlCisgICAgbV9zdGF0ZS5zaG91bGRVc2VDb250ZXh0Q29sb3JzID0gc2hvdWxkVXNlQ29u
dGV4dENvbG9yczsKKyAgICBpZiAoY2dDb250ZXh0ICYmIHNob3VsZFVzZUNvbnRleHRDb2xvcnMp
IHsKKyNlbmRpZgogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5
bmMgd2l0aCBvdXIgc3RhdGUuCiAgICAgICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xv
cigpLCBmaWxsQ29sb3JTcGFjZSgpKTsKICAgICAgICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihz
dHJva2VDb2xvcigpLCBzdHJva2VDb2xvclNwYWNlKCkpOwpAQCAtMTQxLDExICsxNjgsMTkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKICAgICBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAor
I2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2Uo
UGFzc05hdGl2ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgZmxvYXQgc2NhbGUsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQorI2Vs
c2UKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdl
UHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdl
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCisjZW5kaWYKIHsKICAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2UoaW1hZ2VQdHIpOwogCiAgICAgZmxvYXQgY3VyckhlaWdodCA9IG9yaWVudGF0
aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpIDog
Q0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IFVuYXBwbHkgdGhlIHNjYWxpbmcgc2luY2Ugd2UgYXJlIGdldHRpbmcgdGhpcyBmcm9tIGEgc2Nh
bGVkIGJpdG1hcC4KKyAgICBjdXJySGVpZ2h0IC89IHNjYWxlOworI2VuZGlmCiAKICAgICBpZiAo
Y3VyckhlaWdodCA8PSBzcmNSZWN0LnkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUzLDYgKzE4
OCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJ
bWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRTaQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsK
IAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBBbnRpLWFsaWFzaW5nIGlzIG9uIGJ5IGRlZmF1
bHQgb24gdGhlIGlQaG9uZS4gTmVlZCB0byB0dXJuIGl0IG9mZiB3aGVuIGRyYXdpbmcgaW1hZ2Vz
LgorICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBmYWxzZSk7CisjZW5k
aWYKKwogICAgIGJvb2wgc2hvdWxkVXNlU3ViaW1hZ2UgPSBmYWxzZTsKIAogICAgIC8vIElmIHRo
ZSBzb3VyY2UgcmVjdCBpcyBhIHN1YnBvcnRpb24gb2YgdGhlIGltYWdlLCB0aGVuIHdlIGNvbXB1
dGUgYW4gaW5mbGF0ZWQgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdpbGwgaG9sZCB0aGUgZW50aXJl
IGltYWdlCkBAIC0xODIsNiArMjIyLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRp
dmVJbWFnZShQYXNzTmF0aXZlSW1hZ2VQdHIgaW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2kKICAgICAg
ICAgICAgIHN1YmltYWdlUmVjdC5zZXRIZWlnaHQoY2VpbGYoc3ViaW1hZ2VSZWN0LmhlaWdodCgp
ICsgdG9wUGFkZGluZykpOwogICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQo
c3ViaW1hZ2VSZWN0LmhlaWdodCgpIC8geVNjYWxlKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAgICAgICAgIHN1YmltYWdlUmVjdC5zY2FsZShzY2FsZSwgc2NhbGUpOworI2VuZGlmCiAjaWYg
Q0FDSEVfU1VCSU1BR0VTCiAgICAgICAgICAgICBpbWFnZSA9IHN1YmltYWdlQ2FjaGUoKS5nZXRT
dWJpbWFnZShpbWFnZS5nZXQoKSwgc3ViaW1hZ2VSZWN0KTsKICNlbHNlCkBAIC0yMDQsNiArMjQ3
LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUlt
YWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpCiAgICAgaWYgKCFzaG91bGRVc2VTdWJpbWFn
ZSAmJiBjdXJySGVpZ2h0IDwgaW1hZ2VTaXplLmhlaWdodCgpKQogICAgICAgICBhZGp1c3RlZERl
c3RSZWN0LnNldEhlaWdodChhZGp1c3RlZERlc3RSZWN0LmhlaWdodCgpICogY3VyckhlaWdodCAv
IGltYWdlU2l6ZS5oZWlnaHQoKSk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gQWxpZ24g
dG8gcGl4ZWwgYm91bmRhcmllcworICAgIGFkanVzdGVkRGVzdFJlY3QgPSByb3VuZFRvRGV2aWNl
UGl4ZWxzKGFkanVzdGVkRGVzdFJlY3QpOworI2VuZGlmCisKICAgICBzZXRQbGF0Zm9ybUNvbXBv
c2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKIAogICAgIC8vIEltYWdlT3JpZW50YXRpb24g
ZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKQpAQCAtMzIzLDggKzM3MSwxNCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50MSwgY29u
c3QgSW50UG9pbnQmIHBvaW50MikKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKLSAgICBpZiAoc2hvdWxkQW50aWFsaWFzKCkpCi0gICAgICAgIENHQ29u
dGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBmYWxzZSk7CisgICAgaWYgKHNob3VsZEFu
dGlhbGlhcygpKSB7CisgICAgICAgIGJvb2wgd2lsbEFudGlhbGlhcyA9IGZhbHNlOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICAgICAgLy8gRm9yY2UgYW50aWFsaWFzaW5nIG9uIGZvciBsaW5lIHBh
dHRlcm5zIGFzIHRoZXkgZG9uJ3QgbG9vayBnb29kIHdpdGggaXQgdHVybmVkIG9mZiAoPHJkYXI6
Ly9wcm9ibGVtLzU0NTk3NzI+KS4KKyAgICAgICAgd2lsbEFudGlhbGlhcyA9IHBhdFdpZHRoOwor
I2VuZGlmCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB3aWxs
QW50aWFsaWFzKTsKKyAgICB9CiAKICAgICBpZiAocGF0V2lkdGgpIHsKICAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKQEAgLTM4NSw2ICs0MzksMzYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50
JiBwb2ludDIpCiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB0
cnVlKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Sm9pbmVkTGluZXMoQ0dQb2ludCBwb2ludHNbXSwgdW5zaWduZWQgY291bnQsIGJvb2wgYW50aWFs
aWFzLCBDR0xpbmVDYXAgbGluZUNhcCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8
ICFjb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKKyAgICBmbG9hdCB3aWR0aCA9IENHQ29udGV4dEdldExpbmVXaWR0
aChjb250ZXh0KTsKKworICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisgICAgCisg
ICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIGFudGlhbGlhcyk7CisKKyAg
ICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgd2lkdGggPCAxID8gMSA6IHdpZHRoKTsK
KworICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICAKKyAgICBDR0NvbnRleHRT
ZXRMaW5lQ2FwKGNvbnRleHQsIGxpbmVDYXApOworICAgIAorICAgIENHQ29udGV4dE1vdmVUb1Bv
aW50KGNvbnRleHQsIHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIENHQ29udGV4dEFkZExpbmVU
b1BvaW50KGNvbnRleHQsIHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7CisKKyAgICBDR0NvbnRl
eHRTdHJva2VQYXRoKGNvbnRleHQpOworCisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250
ZXh0KTsKK30KKyNlbmRpZgorCiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0
aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3RWxsaXBzZShjb25zdCBJbnRSZWN0JiByZWN0KQogewpAQCAtMzk2LDYgKzQ4MCwzMSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKICAg
ICBkcmF3UGF0aChwYXRoKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQocGxhdGZvcm1Db250ZXh0KCkpOworCisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250
ZXh0KTsKKworICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGZpbGxDb2xvcigpLCBmaWxsQ29s
b3JTcGFjZSgpKTsKKyAgICBzZXRDR1N0cm9rZUNvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9yKCks
IHN0cm9rZUNvbG9yU3BhY2UoKSk7CisKKyAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4
dCwgc3Ryb2tlVGhpY2tuZXNzKCkpOworICAgIAorICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250
ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRFbGxpcHNlSW5SZWN0KGNvbnRleHQsIHJlY3QpOworCisg
ICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChj
b250ZXh0KTsKKyAgICAKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworfQor
I2VuZGlmCisKIHN0YXRpYyB2b2lkIGFkZENvbnZleFBvbHlnb25Ub1BhdGgoUGF0aCYgcGF0aCwg
c2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCiB7CiAgICAg
QVNTRVJUKG51bWJlck9mUG9pbnRzID4gMCk7CkBAIC05MDMsNyArMTAxMiwxMSBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKQogCiBzdGF0aWMgdm9p
ZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIENHRmxvYXQmIHhPZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCiB7Ci0jaWYg
IVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKGNvbnRl
eHQpOworICAgIFVOVVNFRF9QQVJBTSh4T2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oeU9mZnNl
dCk7CisjZWxzZQogICAgIGlmIChjb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMTIzNSw2ICsxMzQ4LDU5IEBAIEZsb2F0UmVjdCBHcmFwaGljc0Nv
bnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGlu
Z01vCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdo
dCAtIHJvdW5kZWRPcmlnaW4pOwogfQogCisvLyBGSVhNRTogV2Ugc2hvdWxkIGxvb2sgdG8gY29u
c29saWRhdGUgdGhlIGlPUyBhbmQgbm9uLWlPUyBpbXBsZW1lbnRhdGlvbnMgb2YKKy8vIGNvbXB1
dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoKSBhbmQgY29tcHV0ZUxpbmVC
b3VuZHNGb3JUZXh0KCkuCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIEZsb2F0UmVjdCBjb21w
dXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KEdyYXBoaWNzQ29udGV4dCYg
aW5pdGlhbENvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgYm9v
bCBwcmludGluZywgYm9vbCYgc2hvdWxkQW50aWFsaWFzLCBDb2xvciYgY29sb3IpCit7CisgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBpbml0aWFsQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsK
KyAgICBDR1BvaW50IG9yaWdpbjsKKyAgICBDR0Zsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KGlu
aXRpYWxDb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCAwLjVmKTsKKworICAgIHNob3VsZEFudGlh
bGlhcyA9IHRydWU7CisgICAgaWYgKHByaW50aW5nKQorICAgICAgICBvcmlnaW4gPSBDR1BvaW50
TWFrZShwb2ludC54KCksIHBvaW50LnkoKSk7CisgICAgZWxzZSB7CisgICAgICAgIENHQWZmaW5l
VHJhbnNmb3JtIHQgPSBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNmb3Jt
KGNvbnRleHQpOworICAgICAgICBpZiAoQWZmaW5lVHJhbnNmb3JtKHQpLnByZXNlcnZlc0F4aXNB
bGlnbm1lbnQoKSkKKyAgICAgICAgICAgIHNob3VsZEFudGlhbGlhcyA9IGZhbHNlOworCisgICAg
ICAgIC8vIFRoaXMgY29kZSBhbHdheXMgZHJhd3MgYSBsaW5lIHRoYXQgaXMgYXQgbGVhc3Qgb25l
LXBpeGVsIGxpbmUgaGlnaCwKKyAgICAgICAgLy8gd2hpY2ggdGVuZHMgdG8gdmlzdWFsbHkgb3Zl
cndoZWxtIHRleHQgYXQgc21hbGwgc2NhbGVzLiBUbyBjb3VudGVyIHRoaXMKKyAgICAgICAgLy8g
ZWZmZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRvIHRoZSB1bmRlcmxpbmUgY29sb3Igd2hlbiB0
ZXh0IGlzIGF0IHNtYWxsIHNjYWxlcy4KKworICAgICAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUg
aW4geCBkaW1lbnNpb24sIGFzc3VtaW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KKyAgICAg
ICAgQ0dGbG9hdCBzY2FsZSA9IHQuYiA/IHNxcnRmKHQuYSAqIHQuYSArIHQuYiAqIHQuYikgOiB0
LmE7CisgICAgICAgIGlmIChzY2FsZSA8IDEuMCkgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0IE1pblVuZGVybGluZUFscGhhID0gMC40ZjsKKyAgICAgICAgICAgIGZsb2F0IHNoYWRl
ID0gc2NhbGUgPiBNaW5VbmRlcmxpbmVBbHBoYSA/IHNjYWxlIDogTWluVW5kZXJsaW5lQWxwaGE7
CisgICAgICAgICAgICBpbnQgYWxwaGEgPSBjb2xvci5hbHBoYSgpICogc2hhZGU7CisgICAgICAg
ICAgICBjb2xvciA9IENvbG9yKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVl
KCksIGFscGhhKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERvbid0IG9mZnNldCBsaW5lIGZy
b20gYm90dG9tIG9mIHRleHQgaWYgc2NhbGUgaXMgbGVzcyB0aGFuIE9mZnNldFVuZGVybGluZVNj
YWxlLgorICAgICAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBPZmZzZXRVbmRlcmxpbmVTY2FsZSA9
IDAuNGY7CisgICAgICAgIENHRmxvYXQgZHkgPSBzY2FsZSA8IE9mZnNldFVuZGVybGluZVNjYWxl
ID8gMCA6IDE7CisKKyAgICAgICAgLy8gSWYgd2UndmUgaW5jcmVhc2VkIHRoZSB0aGlja25lc3Mg
b2YgdGhlIGxpbmUsIG1ha2Ugc3VyZSB0byBtb3ZlIHRoZSBsb2NhdGlvbiB0b28uCisgICAgICAg
IGlmICh0aGlja25lc3MgPiAxKQorICAgICAgICAgICAgZHkgKz0gcm91bmRmKHRoaWNrbmVzcykg
LSAxOworCisgICAgICAgIENHUG9pbnQgZGV2aWNlUG9pbnQgPSBDR1BvaW50QXBwbHlBZmZpbmVU
cmFuc2Zvcm0ocG9pbnQsIHQpOworICAgICAgICBDR1BvaW50IGRldmljZU9yaWdpbiA9IENHUG9p
bnRNYWtlKHJvdW5kZihkZXZpY2VQb2ludC54KSwgY2VpbGYoZGV2aWNlUG9pbnQueSkgKyBkeSk7
CisgICAgICAgIG9yaWdpbiA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShkZXZpY2VPcmln
aW4sIENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KHQpKTsKKyAgICAgICAgdGhpY2tuZXNzIC89IHNj
YWxlOworICAgIH0KKyAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbi54LCBvcmlnaW4ueSwgd2lk
dGgsIHRoaWNrbmVzcyk7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVM
aW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpCit7CisgICAgYm9vbCBkdW1teUJvb2w7CisgICAgQ29sb3IgZHVtbXlDb2xv
cjsKKyAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4
dCgqdGhpcywgcG9pbnQsIHdpZHRoLCBwcmludGluZywgZHVtbXlCb29sLCBkdW1teUNvbG9yKTsK
K30KKyNlbHNlCiBzdGF0aWMgRmxvYXRSZWN0IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFz
aW5nTW9kZUZvclRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcsIGJvb2wmIHNob3VsZEFudGlhbGlh
cykKIHsKICAgICBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOwpAQCAtMTI3MCw2ICsxNDM2LDcgQEAg
RmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG8KICAgICBib29sIGR1bW15OwogICAgIHJldHVybiBjb21w
dXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KCp0aGlzLCBwb2ludCwgd2lk
dGgsIHByaW50aW5nLCBkdW1teSk7CiB9CisjZW5kaWYKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpCiB7CkBAIC0xMjc5LDYgKzE0NDYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwg
Ym9vbAogICAgIGlmICh3aWR0aCA8PSAwKQogICAgICAgICByZXR1cm47CiAKKyNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzTGluZTsKICAgICBGbG9hdFJlY3QgYm91
bmRzID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCgqdGhpcywg
cG9pbnQsIHdpZHRoLCBwcmludGluZywgc2hvdWxkQW50aWFsaWFzTGluZSk7CiAKQEAgLTEyOTcs
MTAgKzE0NjUsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJvb2wKIAogICAgIGlmIChyZXN0b3Jl
QW50aWFsaWFzTW9kZSkKICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKHBsYXRm
b3JtQ29udGV4dCgpLCB0cnVlKTsKKyNlbHNlCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisg
ICAgQ29sb3IgY29sb3Ioc3Ryb2tlQ29sb3IoKSk7CisgICAgCisgICAgYm9vbCBzaG91bGRBbnRp
YWxpYXNMaW5lOworICAgIEZsb2F0UmVjdCByZWN0ID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRp
YWxpYXNpbmdNb2RlRm9yVGV4dCgqdGhpcywgcG9pbnQsIHdpZHRoLCBwcmludGluZywgc2hvdWxk
QW50aWFsaWFzTGluZSwgY29sb3IpOworCisgICAgaWYgKG1fc3RhdGUuc2hvdWxkVXNlQ29udGV4
dENvbG9ycykKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgY29sb3IsIHN0cm9rZUNv
bG9yU3BhY2UoKSk7CisgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgcmVjdCk7CisKKyAg
ICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworI2VuZGlmCiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgSW50UmVj
dCYgZGVzdFJlY3QpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEzMTksNiArMTUwMywxMCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KQogCiAgICAgQ0dQREZDb250ZXh0U2V0VVJMRm9yUmVjdChjb250ZXh0LCB1
cmxSZWYuZ2V0KCksCiAgICAgICAgIENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKHJlY3QsIENH
Q29udGV4dEdldENUTShjb250ZXh0KSkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obGluayk7
CisgICAgVU5VU0VEX1BBUkFNKGRlc3RSZWN0KTsKKyNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0
eSBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHLmNwcAppbmRleCBiMTNkMTIxMzQwYmIzMTEzOThhNjkyODc5NmQzODk5ZGVk
Y2ZjZWZjLi5lN2Q2ZjQzNmU0YzY3NmI4YzVkYjQ5YTRmZDY2MTliNDAwOGQ3OTA5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcApAQCAtMzMsOCArMzMsMTMgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgog
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNp
bmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNs
dWRlIDxtYXRoLmg+CisjaWYgIVBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNl
cnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2VuZGlm
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRo
bWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtNTAsMTAgKzU1LDE3IEBA
CiAjaW5jbHVkZSA8SU9TdXJmYWNlL0lPU3VyZmFjZS5oPgogI2VuZGlmCiAKKy8vIENBIHVzZXMg
QVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9w
dGltaXplZC4KKyNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1MpCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCisjaWYg
UExBVEZPUk0oSU9TKQorc3RhdGljIGNvbnN0IGludCBtYXhJT1N1cmZhY2VEaW1lbnNpb24gPSAy
MDQ4OworI2Vsc2UKIHN0YXRpYyBjb25zdCBpbnQgbWF4SU9TdXJmYWNlRGltZW5zaW9uID0gNDA5
NjsKKyNlbmRpZgogCiBzdGF0aWMgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4gY3JlYXRlSU9TdXJm
YWNlKGNvbnN0IEludFNpemUmIHNpemUpCiB7CkBAIC03MCw4ICs4MiwxMyBAQCBzdGF0aWMgUmV0
YWluUHRyPElPU3VyZmFjZVJlZj4gY3JlYXRlSU9TdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUp
CiAgICAgaWYgKCFhbGxvY1NpemUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3Qgdm9p
ZCAqa2V5c1s2XTsKLSAgICBjb25zdCB2b2lkICp2YWx1ZXNbNl07CisjaWYgIVBMQVRGT1JNKElP
UykKKyAgICBjb25zdCB2b2lkKiBrZXlzWzZdOworICAgIGNvbnN0IHZvaWQqIHZhbHVlc1s2XTsK
KyNlbHNlCisgICAgY29uc3Qgdm9pZCoga2V5c1s3XTsKKyAgICBjb25zdCB2b2lkKiB2YWx1ZXNb
N107CisjZW5kaWYKICAgICBrZXlzWzBdID0ga0lPU3VyZmFjZVdpZHRoOwogICAgIHZhbHVlc1sw
XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUsICZ3aWR0aCk7CiAgICAga2V5
c1sxXSA9IGtJT1N1cmZhY2VIZWlnaHQ7CkBAIC04NCw5ICsxMDEsMTQgQEAgc3RhdGljIFJldGFp
blB0cjxJT1N1cmZhY2VSZWY+IGNyZWF0ZUlPU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplKQog
ICAgIHZhbHVlc1s0XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxvbmdUeXBlLCAmYnl0
ZXNQZXJSb3cpOwogICAgIGtleXNbNV0gPSBrSU9TdXJmYWNlQWxsb2NTaXplOwogICAgIHZhbHVl
c1s1XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxvbmdUeXBlLCAmYWxsb2NTaXplKTsK
KyNpZiBQTEFURk9STShJT1MpCisgICAga2V5c1s2XSA9IGtJT1N1cmZhY2VDYWNoZU1vZGU7Cisg
ICAgaW50IGNhY2hlTW9kZSA9IGtJT01hcFdyaXRlQ29tYmluZUNhY2hlOworICAgIHZhbHVlc1s2
XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUsICZjYWNoZU1vZGUpOworI2Vu
ZGlmCiAKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBkaWN0ID0gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCA2LCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBkaWN0ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCBXVEZf
QVJSQVlfTEVOR1RIKHZhbHVlcyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpOyArK2kpCiAgICAgICAgIENGUmVsZWFzZSh2
YWx1ZXNbaV0pOwogCiAgICAgcmV0dXJuIGFkb3B0Q0YoSU9TdXJmYWNlQ3JlYXRlKGRpY3QuZ2V0
KCkpKTsKQEAgLTE2OSw3ICsxOTEsMTEgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0
IEludFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90
PihtX2RhdGEubV9kYXRhKSAmIDMpKTsKIAorI2lmIFVTRV9BUkdCMzIKKyAgICAgICAgbV9kYXRh
Lm1fYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRt
YXBCeXRlT3JkZXIzMkhvc3Q7CisjZWxzZQogICAgICAgICBtX2RhdGEubV9iaXRtYXBJbmZvID0g
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OworI2VuZGlmCiAgICAgICAgIGNnQ29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5tX2RhdGEsIG1fZGF0YS5t
X2JhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLm1fYmFja2luZ1N0b3JlU2l6ZS5oZWln
aHQoKSwgOCwgbV9kYXRhLm1fYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5tX2NvbG9y
U3BhY2UsIG1fZGF0YS5tX2JpdG1hcEluZm8pKTsKICAgICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBp
bWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgogICAgICAgICBtX2RhdGEubV9kYXRhUHJvdmlkZXIg
PSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLm1fZGF0YSwg
bnVtQnl0ZXMudW5zYWZlR2V0KCksIHJlbGVhc2VJbWFnZURhdGEpKTsKQEAgLTI3OCw3ICszMDQs
MTMgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwKIAogICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNy
Y1JlY3QgPSBzcmNSZWN0OwogICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LT5kcmF3TmF0aXZlSW1h
Z2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5tX2JhY2tpbmdTdG9yZVNpemUsIGNvbG9yU3BhY2UsIGRl
c3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBibGVuZE1vZGUpOworICAgIGRlc3RDb250ZXh0
LT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5tX2JhY2tpbmdTdG9yZVNpemUs
IGNvbG9yU3BhY2UsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsCisjaWYgUExBVEZPUk0oSU9T
KQorICAgICAgICAxLjBmLCAvLyBEZWZhdWx0IHNjYWxlIG9mIDEuMAorI2VuZGlmCisgICAgICAg
IG9wLAorICAgICAgICBibGVuZE1vZGUKKyAgICApOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKQEAgLTM3NSw3ICs0MDcsNyBA
QCB2b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoTXVsdGlwbHkgbXVsdGlwbGllZCwgVWlu
dDhDbGFtcGVkQXJyYXkqIHNvdXJjZSwgYwogCiBzdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpw
ZWdVVEkoKQogewotI2lmIFBMQVRGT1JNKFdJTikKKyNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRG
T1JNKFdJTikKICAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBDRlNU
UigicHVibGljLmpwZWciKTsKICNlbmRpZgogICAgIHJldHVybiBrVVRUeXBlSlBFRzsKQEAgLTM4
Myw3ICs0MTUsNyBAQCBzdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpwZWdVVEkoKQogICAgIAog
c3RhdGljIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYg
IVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gYWRvcHRDRihVVFR5cGVDcmVhdGVQcmVmZXJyZWRJ
ZGVudGlmaWVyRm9yVGFnKGtVVFRhZ0NsYXNzTUlNRVR5cGUsIG1pbWVUeXBlLmNyZWF0ZUNGU3Ry
aW5nKCkuZ2V0KCksIDApKTsKICNlbHNlCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8g
SXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCmlu
ZGV4IGRlNGMzODdlMTY3YTUxOTc4YWFmOGJhZjhjOWY1OWJlYjc5YTc1MzkuLjlmZDI4ZDQ1N2Zj
YjgwY2U0YjRhNTcwOWRmYTRjMTg5YjMyMjliNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKQEAgLTQ4
LDYgKzQ4LDkgQEAgc3RydWN0IFNjYW5saW5lRGF0YSB7CiB9OwogI2VuZGlmCiAKKy8vIENBIHVz
ZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlz
IG9wdGltaXplZC4KKyNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1MpCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50
U2l6ZSYpCkBAIC02MCw3ICs2Myw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRh
KGNvbnN0IEludFNpemUmKQogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCiAKLSNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQorI2lmIFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKIHN0YXRpYyB2b2lkIGNvbnZlcnRTY2FubGluZSh2b2lk
KiBkYXRhLCBzaXplX3QgdGlsZU51bWJlciwgYm9vbCBwcmVtdWx0aXBseSkKIHsKICAgICBTY2Fu
bGluZURhdGEqIHNjYW5saW5lRGF0YSA9IHN0YXRpY19jYXN0PFNjYW5saW5lRGF0YSo+KGRhdGEp
OwpAQCAtMTIyLDEzICsxMjUsMTMgQEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1h
Z2VCdWZmZXJEYXRhOjpnZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnMKICAgICAKICAg
ICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwogICAgIGludCBkZXN0eCA9IDA7Ci0gICAgaW50IGRl
c3R3ID0gcmVjdC53aWR0aCgpOworICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IHJlY3Qud2lkdGgo
KTsKICAgICBpZiAob3JpZ2lueCA8IDApIHsKICAgICAgICAgZGVzdHcgKz0gb3JpZ2lueDsKICAg
ICAgICAgZGVzdHggPSAtb3JpZ2lueDsKICAgICAgICAgb3JpZ2lueCA9IDA7CiAgICAgfQotICAg
IGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dywgY2VpbGYoc2l6ZS53aWR0aCgpIC8gcmVzb2x1
dGlvblNjYWxlKSAtIG9yaWdpbngpOworICAgIGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dy51
bnNhZmVHZXQoKSwgY2VpbGYoc2l6ZS53aWR0aCgpIC8gcmVzb2x1dGlvblNjYWxlKSAtIG9yaWdp
bngpOwogICAgIG9yaWdpbnggKj0gcmVzb2x1dGlvblNjYWxlOwogICAgIGlmIChlbmR4LnVuc2Fm
ZUdldCgpID4gc2l6ZS53aWR0aCgpKQogICAgICAgICBlbmR4ID0gc2l6ZS53aWR0aCgpOwpAQCAt
MTM2LDEzICsxMzksMTMgQEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXJEYXRhOjpnZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnMKICAgICAKICAgICBpbnQg
b3JpZ2lueSA9IHJlY3QueSgpOwogICAgIGludCBkZXN0eSA9IDA7Ci0gICAgaW50IGRlc3RoID0g
cmVjdC5oZWlnaHQoKTsKKyAgICBDaGVja2VkPGludD4gZGVzdGggPSByZWN0LmhlaWdodCgpOwog
ICAgIGlmIChvcmlnaW55IDwgMCkgewogICAgICAgICBkZXN0aCArPSBvcmlnaW55OwogICAgICAg
ICBkZXN0eSA9IC1vcmlnaW55OwogICAgICAgICBvcmlnaW55ID0gMDsKICAgICB9Ci0gICAgZGVz
dGggPSBzdGQ6Om1pbjxpbnQ+KGRlc3RoLCBjZWlsZihzaXplLmhlaWdodCgpIC8gcmVzb2x1dGlv
blNjYWxlKSAtIG9yaWdpbnkpOworICAgIGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0aC51bnNh
ZmVHZXQoKSwgY2VpbGYoc2l6ZS5oZWlnaHQoKSAvIHJlc29sdXRpb25TY2FsZSkgLSBvcmlnaW55
KTsKICAgICBvcmlnaW55ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBpZiAoZW5keS51bnNhZmVH
ZXQoKSA+IHNpemUuaGVpZ2h0KCkpCiAgICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwpAQCAt
MTYzLDYgKzE2NiwxNiBAQCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZl
ckRhdGE6OmdldERhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29ucwogICAgICAgICAKICNpZiBV
U0UoQUNDRUxFUkFURSkKICAgICAgICAgaWYgKHVubXVsdGlwbGllZCkgeworI2lmIFVTRV9BUkdC
MzIKKyAgICAgICAgICAgIFNjYW5saW5lRGF0YSBzY2FubGluZURhdGE7CisgICAgICAgICAgICBz
Y2FubGluZURhdGEuc2NhbmxpbmVXaWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOworICAgICAgICAg
ICAgc2NhbmxpbmVEYXRhLnNyY0RhdGEgPSBzcmNSb3dzOworICAgICAgICAgICAgc2NhbmxpbmVE
YXRhLnNyY1Jvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBzY2FubGluZURh
dGEuZGVzdERhdGEgPSBkZXN0Um93czsKKyAgICAgICAgICAgIHNjYW5saW5lRGF0YS5kZXN0Um93
Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7CisKKyAgICAgICAgICAgIGRpc3BhdGNoX2FwcGx5X2Yo
ZGVzdGgudW5zYWZlR2V0KCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVF
VUVfUFJJT1JJVFlfREVGQVVMVCwgMCksICZzY2FubGluZURhdGEsIHVucHJlbXVsdGl0cGx5U2Nh
bmxpbmUpOworI2Vsc2UKICAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwogICAgICAgICAg
ICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKICAgICAgICAgICAgIHNyYy53aWR0
aCA9IHdpZHRoLnVuc2FmZUdldCgpOwpAQCAtMTcwLDggKzE4Myw4IEBAIFBhc3NSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zCiAgICAgICAgICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZHN0OwotICAgICAgICAgICAgZHN0LmhlaWdodCA9
IGRlc3RoOwotICAgICAgICAgICAgZHN0LndpZHRoID0gZGVzdHc7CisgICAgICAgICAgICBkc3Qu
aGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7CisgICAgICAgICAgICBkc3Qud2lkdGggPSBkZXN0
dy51bnNhZmVHZXQoKTsKICAgICAgICAgICAgIGRzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJv
dzsKICAgICAgICAgICAgIGRzdC5kYXRhID0gZGVzdFJvd3M7CiAKQEAgLTE4NCwxMyArMTk3LDE0
IEBAIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0
YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkc3QsIGt2SW1hZ2VOb0Zs
YWdzKTsKKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAgICAg
ICAgIH0KICNlbmRpZgogICAgICAgICBpZiAocmVzb2x1dGlvblNjYWxlICE9IDEpIHsKICAgICAg
ICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IHNvdXJjZUNvbnRleHQgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZShzcmNSb3dzLCB3aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0LnVu
c2FmZUdldCgpLCA4LCBzcmNCeXRlc1BlclJvdywgbV9jb2xvclNwYWNlLCBrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZExhc3QpKTsKICAgICAgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBz
b3VyY2VJbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uoc291cmNlQ29u
dGV4dC5nZXQoKSkpOwotICAgICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gZGVzdGlu
YXRpb25Db250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGVzdFJvd3MsIGRl
c3R3LCBkZXN0aCwgOCwgZGVzdEJ5dGVzUGVyUm93LCBtX2NvbG9yU3BhY2UsIGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJl
Zj4gZGVzdGluYXRpb25Db250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGVz
dFJvd3MsIGRlc3R3LnVuc2FmZUdldCgpLCBkZXN0aC51bnNhZmVHZXQoKSwgOCwgZGVzdEJ5dGVz
UGVyUm93LCBtX2NvbG9yU3BhY2UsIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGRlc3RpbmF0aW9uQ29udGV4dC5nZXQo
KSwga0NHQmxlbmRNb2RlQ29weSk7CiAgICAgICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVz
dGluYXRpb25Db250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHdpZHRoLnVuc2FmZUdldCgp
IC8gcmVzb2x1dGlvblNjYWxlLCBoZWlnaHQudW5zYWZlR2V0KCkgLyByZXNvbHV0aW9uU2NhbGUp
LCBzb3VyY2VJbWFnZS5nZXQoKSk7IC8vIEZJWE1FOiBBZGQgc3VicGl4ZWwgdHJhbnNsYXRpb24u
CiAgICAgICAgICAgICBpZiAoIXVubXVsdGlwbGllZCkKQEAgLTIwOCw2ICsyMjIsMjAgQEAgUGFz
c1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnMKICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4
ID0geCAqIDQ7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNS
b3dzW2Jhc2V4ICsgM107CisjaWYgVVNFX0FSR0IzMgorICAgICAgICAgICAgICAgICAgICAvLyBC
eXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jh
c2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gc3JjUm93c1tiYXNleCArIDJdOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICAgICAg
fQorI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxw
aGE7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jv
d3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKQEAgLTIxNSwxNCArMjQzLDI1IEBAIFBhc3NS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDNdID0gYWxwaGE7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgp
WzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Cisj
ZW5kaWYKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNC
eXRlc1BlclJvdzsKICAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7CisjaWYgVVNFX0FSR0IzMgorICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykg
eworICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKKyAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOworICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOworICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07CisgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107
CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8ICh3aWR0aCAqIDQpLnVuc2FmZUdldCgpOyB4ICs9IDQpCiAgICAgICAgICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIHgpWzBdID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyB4KVswXTsKKyNlbmRpZgogICAgICAgICAg
ICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CiAgICAgICAgICAgICAgICAgZGVzdFJv
d3MgKz0gZGVzdEJ5dGVzUGVyUm93OwogICAgICAgICAgICAgfQpAQCAtMjQyLDggKzI4MSw4IEBA
IFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKIAog
ICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGg7
Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dzsKKyAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0
aC51bnNhZmVHZXQoKTsKKyAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwog
ICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwogICAgICAgICBkZXN0LmRh
dGEgPSBkZXN0Um93czsKIApAQCAtMjYzLDEzICszMDIsMTMgQEAgUGFzc1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnMKIAogICAgICAgICBpZiAodW5tdWx0aXBsaWVkKSB7CiAgICAgICAgICAgICBTY2FubGlu
ZURhdGEgc2NhbmxpbmVEYXRhOwotICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNjYW5saW5lV2lk
dGggPSB3aWR0aC51bnNhZmVHZXQoKTsKKyAgICAgICAgICAgIHNjYW5saW5lRGF0YS5zY2FubGlu
ZVdpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7CiAgICAgICAgICAgICBzY2FubGluZURhdGEuc3Jj
RGF0YSA9IHNyY1Jvd3M7CiAgICAgICAgICAgICBzY2FubGluZURhdGEuc3JjUm93Qnl0ZXMgPSBz
cmNCeXRlc1BlclJvdzsKICAgICAgICAgICAgIHNjYW5saW5lRGF0YS5kZXN0RGF0YSA9IGRlc3RS
b3dzOwogICAgICAgICAgICAgc2NhbmxpbmVEYXRhLmRlc3RSb3dCeXRlcyA9IGRlc3RCeXRlc1Bl
clJvdzsKIAotICAgICAgICAgICAgZGlzcGF0Y2hfYXBwbHlfZihoZWlnaHQudW5zYWZlR2V0KCks
IGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVM
VCwgMCksICZzY2FubGluZURhdGEsIHVucHJlbXVsdGl0cGx5U2NhbmxpbmUpOworICAgICAgICAg
ICAgZGlzcGF0Y2hfYXBwbHlfZihkZXN0aC51bnNhZmVHZXQoKSwgZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgJnNjYW5saW5lRGF0
YSwgdW5wcmVtdWx0aXRwbHlTY2FubGluZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gQkdSQSB0byBSR0JBLgogICAgICAgICAgICAg
Y29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKQEAgLTI3OSw3ICszMTgsNyBA
QCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29ucwogICAgICAgICBpZiAocmVzb2x1dGlvblNjYWxlICE9
IDEpIHsKICAgICAgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IHNvdXJjZUNvbnRleHQg
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShzcmNSb3dzLCB3aWR0aC51bnNhZmVHZXQo
KSwgaGVpZ2h0LnVuc2FmZUdldCgpLCA4LCBzcmNCeXRlc1BlclJvdywgbV9jb2xvclNwYWNlLCBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKICAgICAgICAgICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBzb3VyY2VJbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1h
Z2Uoc291cmNlQ29udGV4dC5nZXQoKSkpOwotICAgICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4
dFJlZj4gZGVzdGluYXRpb25Db250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUo
ZGVzdFJvd3MsIGRlc3R3LCBkZXN0aCwgOCwgZGVzdEJ5dGVzUGVyUm93LCBtX2NvbG9yU3BhY2Us
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICAgICAgUmV0YWluUHRy
PENHQ29udGV4dFJlZj4gZGVzdGluYXRpb25Db250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGUoZGVzdFJvd3MsIGRlc3R3LnVuc2FmZUdldCgpLCBkZXN0aC51bnNhZmVHZXQoKSwg
OCwgZGVzdEJ5dGVzUGVyUm93LCBtX2NvbG9yU3BhY2UsIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkTGFzdCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGRlc3RpbmF0aW9u
Q29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CiAgICAgICAgICAgICBDR0NvbnRleHRE
cmF3SW1hZ2UoZGVzdGluYXRpb25Db250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHdpZHRo
LnVuc2FmZUdldCgpIC8gcmVzb2x1dGlvblNjYWxlLCBoZWlnaHQudW5zYWZlR2V0KCkgLyByZXNv
bHV0aW9uU2NhbGUpLCBzb3VyY2VJbWFnZS5nZXQoKSk7IC8vIEZJWE1FOiBBZGQgc3VicGl4ZWwg
dHJhbnNsYXRpb24uCiAKQEAgLTM5MCw2ICs0MjksMTcgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6
OnB1dERhdGEoVWludDhDbGFtcGVkQXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVMKICAgICAgICAgCiAjaWYgIFVTRShBQ0NFTEVSQVRFKQogICAgICAgICBpZiAodW5tdWx0aXBs
aWVkKSB7CisjaWYgVVNFX0FSR0IzMgorICAgICAgICAgICAgLy8gRklYTUU6IEFyZSBzY2FubGlu
ZURhdGEuc2NhbmxpbmVXaWR0aCBhbmQgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmll
ZCB0byBkaXNwYXRjaF9hcHBseV9mKCkgY29ycmVjdD8KKyAgICAgICAgICAgIFNjYW5saW5lRGF0
YSBzY2FubGluZURhdGE7CisgICAgICAgICAgICBzY2FubGluZURhdGEuc2NhbmxpbmVXaWR0aCA9
IHdpZHRoLnVuc2FmZUdldCgpOworICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNyY0RhdGEgPSBz
cmNSb3dzOworICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNyY1Jvd0J5dGVzID0gc3JjQnl0ZXNQ
ZXJSb3c7CisgICAgICAgICAgICBzY2FubGluZURhdGEuZGVzdERhdGEgPSBkZXN0Um93czsKKyAg
ICAgICAgICAgIHNjYW5saW5lRGF0YS5kZXN0Um93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7CisK
KyAgICAgICAgICAgIGRpc3BhdGNoX2FwcGx5X2YoaGVpZ2h0LnVuc2FmZUdldCgpLCBkaXNwYXRj
aF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCAm
c2NhbmxpbmVEYXRhLCBwcmVtdWx0aXRwbHlTY2FubGluZSk7CisjZWxzZQogICAgICAgICAgICAg
dkltYWdlX0J1ZmZlciBzcmM7CiAgICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2Fm
ZUdldCgpOwogICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7CkBAIC00
MTEsNiArNDYxLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoVWludDhDbGFtcGVk
QXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVMKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkc3QsIGt2
SW1hZ2VOb0ZsYWdzKTsKKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAj
ZW5kaWYKQEAgLTQzMyw2ICs0ODQsMjAgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEo
VWludDhDbGFtcGVkQXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVMKICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewogICAg
ICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107CisjaWYgVVNFX0FSR0IzMgorICAgICAg
ICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZm
ZXJzIG9mIEFSR0IzMgorICAgICAgICAgICAgICAgIGlmICh1bm11bHRpcGxpZWQgJiYgYWxwaGEg
IT0gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dz
W2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8g
MjU1OworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3Nb
YmFzZXggKyAwXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAx
XTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFz
ZXhdOworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Cisg
ICAgICAgICAgICAgICAgfQorI2Vsc2UKICAgICAgICAgICAgICAgICBpZiAodW5tdWx0aXBsaWVk
ICYmIGFscGhhICE9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0g
PSAoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CiAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAy
NTQpIC8gMjU1OwpAQCAtNDQwLDYgKzUwNSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXRE
YXRhKFVpbnQ4Q2xhbXBlZEFycmF5KiYgc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTCiAg
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KHNyY1Jvd3MgKyBiYXNleClbMF07CisjZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3Jj
Qnl0ZXNQZXJSb3c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAppbmRleCBhNDE5MDZiYWI2MWVmZTYwMGQyNzRhZGU2
NjQ2YzFmZjM2MDY4Y2UwLi44OTYwZDAwZTRmMGMzMDgxZmIzYWQ4N2FhYzQ2YzQ0MjJmYzQ2OWVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckRhdGFDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmgKQEAgLTMxLDcgKzMxLDkgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CiAKICNpZiBQTEFURk9STShNQUMpICYmIFVTRShDQSkKKyNpZiAhUExBVEZPUk0oSU9T
X1NJTVVMQVRPUikKICNkZWZpbmUgV1RGX1VTRV9JT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUgMQorI2VuZGlmIC8vICFQTEFURk9STShJT1NfU0lNVUxBVE9SKQogI2VuZGlmCiAKIHR5cGVk
ZWYgc3RydWN0IF9fSU9TdXJmYWNlICpJT1N1cmZhY2VSZWY7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCmluZGV4IDY5YmEyZDYyYmUyNTM4NGE4
MzNhOWE5ZjI1MjAxZmFhNTA1MmEzMDcuLjQ5NWQ2NjJmZDQ0YTUyMDRhMzJiNTBkMzYyOWQ0Y2U2
ZmE4YWYxOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQ0cuY3BwCkBAIC0zMiw3ICszMiwxMSBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgor
I2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNh
dGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhp
Y3MuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRGT1JN
KE1BQykKQEAgLTcwLDcgKzc0LDEyIEBAIFJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZTo6aW1h
Z2VXaXRoQ29sb3JTcGFjZShDR0ltYWdlUmVmIG9yaWdpbmFsSW1hZ2UsIENvbG9yCiBzdGF0aWMg
dm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0
KQogewogICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSAoQ0dJbWFnZVJlZilpbmZvOwotICAgIENHQ29u
dGV4dERyYXdJbWFnZShjb250ZXh0LCBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0Rl
dmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFn
ZUdldEhlaWdodChpbWFnZSkpKSwgaW1hZ2UpOworICAgIENHRmxvYXQgaGVpZ2h0ID0gQ0dJbWFn
ZUdldEhlaWdodChpbWFnZSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIENHQ29udGV4dFNjYWxl
Q1RNKGNvbnRleHQsIDEsIC0xKTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwg
MCwgLWhlaWdodCk7CisjZW5kaWYKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3Jh
cGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KDAsIDAs
IENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIGhlaWdodCkpLCBpbWFnZSk7CiB9CiAKIHN0YXRpYyB2
b2lkIHBhdHRlcm5SZWxlYXNlT25NYWluVGhyZWFkQ2FsbGJhY2sodm9pZCogaW5mbykKQEAgLTEz
OCw2ICsxNDcsMTAgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdAogICAgICAgICBtYXRyaXggPSBD
R0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQ29udGV4dEdldENUTShjb250ZXh0KSk7
CiAgICAgICAgIC8vIFRoZSB0b3Agb2YgYSBwYXJ0aWFsbHktZGVjb2RlZCBpbWFnZSBpcyBkcmF3
biBhdCB0aGUgYm90dG9tIG9mIHRoZSB0aWxlLiBNYXAgaXQgdG8gdGhlIHRvcC4KICAgICAgICAg
bWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUobWF0cml4LCAwLCBzaXplKCkuaGVp
Z2h0KCkgLSBoKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIG1hdHJpeCA9IENHQWZmaW5l
VHJhbnNmb3JtU2NhbGUobWF0cml4LCAxLCAtMSk7CisgICAgICAgIG1hdHJpeCA9IENHQWZmaW5l
VHJhbnNmb3JtVHJhbnNsYXRlKG1hdHJpeCwgMCwgLWgpOworI2VuZGlmCiAgICAgICAgIENHSW1h
Z2VSZWYgcGxhdGZvcm1JbWFnZSA9IENHSW1hZ2VSZXRhaW4oc3ViSW1hZ2UuZ2V0KCkpOwogICAg
ICAgICBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBwYXR0ZXJuID0gYWRvcHRDRihDR1BhdHRlcm5D
cmVhdGUocGxhdGZvcm1JbWFnZSwgQ0dSZWN0TWFrZSgwLCAwLCB0aWxlUmVjdC53aWR0aCgpLCB0
aWxlUmVjdC5oZWlnaHQoKSksIG1hdHJpeCwKICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCkg
KyBzcGFjZVNpemUoKS53aWR0aCgpICogKDEgLyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRl
cm5UcmFuc2Zvcm0uYSgpKSksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCmluZGV4IGJmNjkyODJjN2EyNWMzNjIxYTdmM2Yw
ZjQ1OGFkMDJlZjE3NGJmZjUuLmJmNDUzMzYzY2ZiNjNiMmVkMmE5YTIxYTkzOGYxNWM1ZWNkNjkw
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
U291cmNlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlU291cmNlQ0cuY3BwCkBAIC0zNCw3ICszNCwxNSBAQAogI2luY2x1ZGUgIkludFNpemUuaCIK
ICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxp
Y2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2VQ
cml2YXRlLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1
ZGUgPEltYWdlSU8vQ0dJbWFnZVNvdXJjZVByaXZhdGUuaD4KKyNpbmNsdWRlIDxJbWFnZUlPL0lt
YWdlSU8uaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00Niw2ICs1NCwxMCBAQCBjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFn
ZVNvdXJjZVNraXBNZXRhZGF0YSA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YQog
Ly8gdGhhdCB3b24ndCBjb25mbGljdCB3aXRoIEltYWdlSU8ncyB2ZXJzaW9uIHdoZW4gaXQgaXMg
YXZhaWxhYmxlLgogY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUdJRlVu
Y2xhbXBlZERlbGF5VGltZSA9IENGU1RSKCJVbmNsYW1wZWREZWxheVRpbWUiKTsKIAorI2lmIFBM
QVRGT1JNKElPUykKK2Jvb2wgSW1hZ2VTb3VyY2U6OnNfYWNjZWxlcmF0ZWRJbWFnZURlY29kaW5n
OworI2VuZGlmCisKICNpZiAhUExBVEZPUk0oTUFDKQogc2l6ZV90IHNoYXJlZEJ1ZmZlckdldEJ5
dGVzQXRQb3NpdGlvbih2b2lkKiBpbmZvLCB2b2lkKiBidWZmZXIsIG9mZl90IHBvc2l0aW9uLCBz
aXplX3QgY291bnQpCiB7CkBAIC02OSw2ICs4MSwxMCBAQCB2b2lkIHNoYXJlZEJ1ZmZlclJlbGVh
c2Uodm9pZCogaW5mbykKIAogSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEltYWdlU291cmNlOjpB
bHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogICAg
IDogbV9kZWNvZGVyKDApCisjaWYgUExBVEZPUk0oSU9TKQorICAgICwgbV9iYXNlU3Vic2FtcGxp
bmcoMCkKKyAgICAsIG1faXNQcm9ncmVzc2l2ZShmYWxzZSkKKyNlbmRpZgogewogICAgIC8vIEZJ
WE1FOiBBbHBoYU9wdGlvbiBhbmQgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gYXJlIGlnbm9y
ZWQuCiB9CkBAIC05NCwxMyArMTEwLDE0IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wg
ZGVzdHJveUFsbEZyYW1lcywgc2l6ZV90LCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wKICAgICAg
ICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCi1zdGF0aWMgQ0ZEaWN0aW9u
YXJ5UmVmIGltYWdlU291cmNlT3B0aW9ucyhJbWFnZVNvdXJjZTo6U2hvdWxkU2tpcE1ldGFkYXRh
IHNraXBNZXRhZGF0YSkKKyNpZiAhUExBVEZPUk0oSU9TKQorc3RhdGljIENGRGljdGlvbmFyeVJl
ZiBpbWFnZVNvdXJjZU9wdGlvbnMoSW1hZ2VTb3VyY2U6OlNob3VsZFNraXBNZXRhZGF0YSBza2lw
TWV0YURhdGEpCiB7CiAgICAgc3RhdGljIENGRGljdGlvbmFyeVJlZiBvcHRpb25zOwogCiAgICAg
aWYgKCFvcHRpb25zKSB7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG51bU9wdGlvbnMgPSAzOwot
ICAgICAgICBjb25zdCBDRkJvb2xlYW5SZWYgaW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgPSAoc2tp
cE1ldGFkYXRhID09IEltYWdlU291cmNlOjpTa2lwTWV0YWRhdGEpID8ga0NGQm9vbGVhblRydWUg
OiBrQ0ZCb29sZWFuRmFsc2U7CisgICAgICAgIGNvbnN0IENGQm9vbGVhblJlZiBpbWFnZVNvdXJj
ZVNraXBNZXRhZGF0YSA9IChza2lwTWV0YURhdGEgPT0gSW1hZ2VTb3VyY2U6OlNraXBNZXRhZGF0
YSkgPyBrQ0ZCb29sZWFuVHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZTsKICAgICAgICAgY29uc3Qgdm9p
ZCoga2V5c1tudW1PcHRpb25zXSA9IHsga0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZSwga0NHSW1h
Z2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiwga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgfTsK
ICAgICAgICAgY29uc3Qgdm9pZCogdmFsdWVzW251bU9wdGlvbnNdID0geyBrQ0ZCb29sZWFuVHJ1
ZSwga0NGQm9vbGVhblRydWUsIGltYWdlU291cmNlU2tpcE1ldGFkYXRhIH07CiAgICAgICAgIG9w
dGlvbnMgPSBDRkRpY3Rpb25hcnlDcmVhdGUoTlVMTCwga2V5cywgdmFsdWVzLCBudW1PcHRpb25z
LCAKQEAgLTEwOCw2ICsxMjUsMjUgQEAgc3RhdGljIENGRGljdGlvbmFyeVJlZiBpbWFnZVNvdXJj
ZU9wdGlvbnMoSW1hZ2VTb3VyY2U6OlNob3VsZFNraXBNZXRhZGF0YSBza2lwTWUKICAgICB9CiAg
ICAgcmV0dXJuIG9wdGlvbnM7CiB9CisjZWxzZQorQ0ZEaWN0aW9uYXJ5UmVmIEltYWdlU291cmNl
OjppbWFnZVNvdXJjZU9wdGlvbnMoU2hvdWxkU2tpcE1ldGFkYXRhIHNraXBNZXRhRGF0YSwgaW50
IHJlcXVlc3RlZFN1YnNhbXBsaW5nKSBjb25zdAoreworICAgIHN0YXRpYyBDRkRpY3Rpb25hcnlS
ZWYgb3B0aW9uc1s0XSA9IHtudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyfTsKKyAg
ICBpbnQgc3Vic2FtcGxpbmcgPSBzdGQ6Om1pbigzLCBtX2lzUHJvZ3Jlc3NpdmUgfHwgcmVxdWVz
dGVkU3Vic2FtcGxpbmcgPCAwID8gMCA6IChyZXF1ZXN0ZWRTdWJzYW1wbGluZyArIG1fYmFzZVN1
YnNhbXBsaW5nKSk7CisKKyAgICBpZiAoIW9wdGlvbnNbc3Vic2FtcGxpbmddKSB7CisgICAgICAg
IGludCBzdWJzYW1wbGVJbnQgPSAxIDw8IHN1YnNhbXBsaW5nOyAvLyBbMC4uM10gPT4gWzEsIDIs
IDQsIDhdCisgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gc3Vic2FtcGxlTnVtYmVyID0g
YWRvcHRDRihDRk51bWJlckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVySW50VHlwZSwgICZzdWJz
YW1wbGVJbnQpKTsKKyAgICAgICAgY29uc3QgQ0ZJbmRleCBudW1PcHRpb25zID0gNTsKKyAgICAg
ICAgY29uc3QgQ0ZCb29sZWFuUmVmIGltYWdlU291cmNlU2tpcE1ldGFEYXRhID0gKHNraXBNZXRh
RGF0YSA9PSBJbWFnZVNvdXJjZTo6U2tpcE1ldGFkYXRhKSA/IGtDRkJvb2xlYW5UcnVlIDoga0NG
Qm9vbGVhbkZhbHNlOworICAgICAgICBjb25zdCBDRkJvb2xlYW5SZWYgYWNjZWxlcmF0ZWRJbWFn
ZURlY29kaW5nID0gSW1hZ2VTb3VyY2U6OnNfYWNjZWxlcmF0ZWRJbWFnZURlY29kaW5nID8ga0NG
Qm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2U7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleXNb
bnVtT3B0aW9uc10gPSB7IGtDR0ltYWdlU291cmNlU2hvdWxkQ2FjaGUsIGtDR0ltYWdlU291cmNl
U2hvdWxkUHJlZmVyUkdCMzIsIGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yLCBrQ0dJbWFn
ZVNvdXJjZVNraXBNZXRhZGF0YSwga0NHSW1hZ2VTb3VyY2VVc2VIYXJkd2FyZUFjY2VsZXJhdGlv
biB9OworICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZXNbbnVtT3B0aW9uc10gPSB7IGtDRkJvb2xl
YW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwgc3Vic2FtcGxlTnVtYmVyLmdldCgpLCBpbWFnZVNvdXJj
ZVNraXBNZXRhRGF0YSwgYWNjZWxlcmF0ZWRJbWFnZURlY29kaW5nIH07CisgICAgICAgIG9wdGlv
bnNbc3Vic2FtcGxpbmddID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKG51bGxwdHIsIGtleXMsIHZhbHVl
cywgbnVtT3B0aW9ucywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURp
Y3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgfQorICAgIHJldHVybiBvcHRpb25zW3N1YnNh
bXBsaW5nXTsKK30KKyNlbmRpZgogCiBib29sIEltYWdlU291cmNlOjppbml0aWFsaXplZCgpIGNv
bnN0CiB7CkBAIC0xOTcsNiArMjMzLDM4IEBAIEludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6
ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24KICAgICBp
ZiAobnVtKQogICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwg
JmgpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmICghbV9pc1Byb2dyZXNzaXZlKSB7Cisg
ICAgICAgIENGRGljdGlvbmFyeVJlZiBqZmlmUHJvcGVydGllcyA9IHN0YXRpY19jYXN0PENGRGlj
dGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1h
Z2VQcm9wZXJ0eUpGSUZEaWN0aW9uYXJ5KSk7CisgICAgICAgIGlmIChqZmlmUHJvcGVydGllcykg
eworICAgICAgICAgICAgQ0ZCb29sZWFuUmVmIGlzUHJvZ0NGQm9vbCA9IHN0YXRpY19jYXN0PENG
Qm9vbGVhblJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoamZpZlByb3BlcnRpZXMsIGtDR0ltYWdl
UHJvcGVydHlKRklGSXNQcm9ncmVzc2l2ZSkpOworICAgICAgICAgICAgaWYgKGlzUHJvZ0NGQm9v
bCkKKyAgICAgICAgICAgICAgICBtX2lzUHJvZ3Jlc3NpdmUgPSBDRkJvb2xlYW5HZXRWYWx1ZShp
c1Byb2dDRkJvb2wpOworICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9i
bGVtLzUxODQ2NTU+IC0gSGFuZyByZW5kZXJpbmcgdmVyeSBsYXJnZSBwcm9ncmVzc2l2ZSBKUEVH
LiBEZWNvZGluZyBwcm9ncmVzc2l2ZQorICAgICAgICAgICAgLy8gaW1hZ2VzIGhhbmdzIGZvciBh
IHZlcnkgbG9uZyB0aW1lIHJpZ2h0IG5vdy4gVW50aWwgdGhpcyBpcyBmaXhlZCwgZG9uJ3Qgc3Vi
LXNhbXBsZSBwcm9ncmVzc2l2ZSBpbWFnZXMuIFRoaXMKKyAgICAgICAgICAgIC8vIHdpbGwgY2F1
c2UgdGhlbSB0byBmYWlsIG91ciBsYXJnZSBpbWFnZSBjaGVjayBhbmQgdGhleSB3b24ndCBiZSBk
ZWNvZGVkLgorICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIHVuZGVybHlpbmcgaXNz
dWUgaXMgZml4ZWQgKDxyZGFyOi8vcHJvYmxlbS81MTkxNDE4PikKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICgobV9iYXNlU3Vic2FtcGxpbmcgPT0gMCkgJiYgIW1faXNQcm9ncmVzc2l2ZSkg
eworICAgICAgICBJbnRTaXplIHN1YnNhbXBsZWRTaXplKHcsIGgpOworICAgICAgICBjb25zdCBp
bnQgY01heGltdW1JbWFnZVNpemVCZWZvcmVTdWJzYW1wbGluZyA9IDUgKiAxMDI0ICogMTAyNDsK
KyAgICAgICAgd2hpbGUgKChtX2Jhc2VTdWJzYW1wbGluZyA8IDMpICYmIHN1YnNhbXBsZWRTaXpl
LndpZHRoKCkgKiBzdWJzYW1wbGVkU2l6ZS5oZWlnaHQoKSA+IGNNYXhpbXVtSW1hZ2VTaXplQmVm
b3JlU3Vic2FtcGxpbmcpIHsKKyAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIHNpemUsIGJ1dCB0
aGUgYWN0dWFsIGltYWdlIGlzIHZlcnkgbGFyZ2UgYW5kIHNob3VsZCBiZSBzdWItc2FtcGxlZC4K
KyAgICAgICAgICAgIC8vIEluY3JlYXNlIHRoZSBiYXNlIHN1YnNhbXBsaW5nIGFuZCBhc2sgZm9y
IHRoZSBzaXplIGFnYWluLiBJZiB0aGUgaW1hZ2UgY2FuIGJlIHN1YnNhbXBsZWQsIHRoZSBzaXpl
IHdpbGwgYmUKKyAgICAgICAgICAgIC8vIGdyZWF0bHkgcmVkdWNlZC4gNHggc3ViLXNhbXBsaW5n
IHdpbGwgbWFrZSB1cyBzdXBwb3J0IHVwIHRvIDMyME1QICg1TVAgKiA0XjMpIGltYWdlcywgd2hp
Y2ggc2hvdWxkIGJlIHBsZW50eS4KKyAgICAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gY2FsbGJhY2sg
ZnJvbSBJbWFnZUlPIHdoZW4gdGhlIHNpemUgaXMgYXZhaWxhYmxlLCBzbyB3ZSBkbyB0aGUgY2hl
Y2sgd2hlbiB3ZSBoYXBwZW4KKyAgICAgICAgICAgIC8vIHRvIGNoZWNrIHRoZSBzaXplIGFuZCBp
dHMgbm9uIC0gemVyby4KKyAgICAgICAgICAgIC8vIE5vdGU6IFNvbWUgY2xpZW50cyBvZiB0aGlz
IGNsYXNzIGRvbid0IGNhbGwgaXNTaXplQXZhaWxhYmxlKCkgc28gd2UgY2FuJ3QgcmVseSBvbiB0
aGF0LgorICAgICAgICAgICAgKyttX2Jhc2VTdWJzYW1wbGluZzsKKyAgICAgICAgICAgIHN1YnNh
bXBsZWRTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgZGVzY3JpcHRpb24ucmVzcGVjdElt
YWdlT3JpZW50YXRpb24oKSk7CisgICAgICAgIH0KKyAgICAgICAgdyA9IHN1YnNhbXBsZWRTaXpl
LndpZHRoKCk7CisgICAgICAgIGggPSBzdWJzYW1wbGVkU2l6ZS5oZWlnaHQoKTsKKyAgICB9Cisj
ZW5kaWYKKwogICAgIGlmICgoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9
PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgJiYgb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhw
cm9wZXJ0aWVzLmdldCgpKS51c2VzV2lkdGhBc0hlaWdodCgpKQogICAgICAgICByZXR1cm4gSW50
U2l6ZShoLCB3KTsKIApAQCAtMjEyLDYgKzI4MCwzMSBAQCBJbWFnZU9yaWVudGF0aW9uIEltYWdl
U291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHJldHVy
biBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkpOwogfQogCisjaWYg
UExBVEZPUk0oSU9TKQorSW50U2l6ZSBJbWFnZVNvdXJjZTo6b3JpZ2luYWxTaXplKFJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0T3JpZW50YXRpb24pIGNvbnN0Cit7Cisg
ICAgZnJhbWVTaXplQXRJbmRleCgwLCBzaG91bGRSZXNwZWN0T3JpZW50YXRpb24pOworICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3Vy
Y2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMo
U2tpcE1ldGFkYXRhLCAtMSkpKTsKKworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0
dXJuIEludFNpemUoKTsKKworICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7
CisgICAgQ0ZOdW1iZXJSZWYgbnVtYmVyID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZh
bHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKTsKKyAgICBp
ZiAobnVtYmVyKQorICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVtYmVySW50
VHlwZSwgJndpZHRoKTsKKyAgICBudW1iZXIgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVs
SGVpZ2h0KSk7CisgICAgaWYgKG51bWJlcikKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW1i
ZXIsIGtDRk51bWJlckludFR5cGUsICZoZWlnaHQpOworCisgICAgaWYgKChzaG91bGRSZXNwZWN0
T3JpZW50YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pICYmIG9yaWVudGF0aW9uRnJv
bVByb3BlcnRpZXMocHJvcGVydGllcy5nZXQoKSkudXNlc1dpZHRoQXNIZWlnaHQoKSkKKyAgICAg
ICAgcmV0dXJuIEludFNpemUoaGVpZ2h0LCB3aWR0aCk7CisKKyAgICByZXR1cm4gSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KTsKK30KKyNlbmRpZgorCiBJbnRTaXplIEltYWdlU291cmNlOjpzaXplKElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICByZXR1
cm4gZnJhbWVTaXplQXRJbmRleCgwLCBkZXNjcmlwdGlvbik7CkBAIC0yODYsNyArMzc5LDM2IEBA
IENHSW1hZ2VSZWYgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgs
IGZsb2F0KiBzY2FsZSkKICAgICBpZiAoIWluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybiAw
OwogCisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0oc2NhbGUpOwogICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUlt
YWdlQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoU2tpcE1ldGFk
YXRhKSkpOworI2Vsc2UKKyAgICAvLyBTdWJzYW1wbGluZyBjYW4gYmUgMSwgMiBvciAzLCB3aGlj
aCBtZWFucyBxdWFydGVyLSwgc2l4dGVlbnRoLSBhbmQgc2l4dHktZm91cnRoLXNpemUsIHJlc3Bl
Y3RpdmVseS4KKyAgICAvLyBBIHplcm8gb3IgbmVnYXRpdmUgdmFsdWUgbWVhbnMgbm8gc3Vic2Ft
cGxpbmcuCisgICAgaW50IHN1YnNhbXBsaW5nID0gc2NhbGUgPyBzdGF0aWNfY2FzdDxpbnQ+KGxv
ZzJmKDEuMGYgLyBzdGQ6Om1heCgwLjFmLCBzdGQ6Om1pbigxLjBmLCAqc2NhbGUpKSkpIDogLTE7
CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihDR0ltYWdlU291cmNl
Q3JlYXRlSW1hZ2VBdEluZGV4KG1fZGVjb2RlciwgaW5kZXgsIGltYWdlU291cmNlT3B0aW9ucyhT
a2lwTWV0YWRhdGEsIHN1YnNhbXBsaW5nKSkpOworCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzcz
NzExOTg+IC0gQ29yZUdyYXBoaWNzIGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlv
dXIgaW4gaU9TIDQuMCB0byBrQ0dJbWFnZUNhY2hpbmdUcmFuc2llbnQKKyAgICAvLyB3aGljaCBj
YXVzZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhh
ZCB0byBiZSByZXNhbXBsZWQvcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCisgICAgLy8g
Q0dDb250ZXh0RHJhd0ltYWdlLiBXZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1h
Z2VzLiBTZWUgYWxzbyA8cmRhcjovL3Byb2JsZW0vMTQzNjY3NTU+IC0KKyAgICAvLyBDb3JlR3Jh
cGhpY3MgbmVlZHMgdG8gdW4tZGVwcmVjYXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5j
ZSBpdCdzIHN0aWxsIG5vdCB0aGUgZGVmYXVsdC4KKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyNlbmRpZgorICAgIENHSW1hZ2VTZXRDYWNo
aW5nRmxhZ3MoaW1hZ2UuZ2V0KCksIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSk7CisjaWYgQ09N
UElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKyAgICBp
ZiAoc2NhbGUpIHsKKyAgICAgICAgaWYgKHN1YnNhbXBsaW5nID4gMCkKKyAgICAgICAgICAgICpz
Y2FsZSA9IHN0YXRpY19jYXN0PGZsb2F0PihDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpKSAv
IHNpemUoRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikud2lkdGgoKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihDR0ltYWdlR2V0V2lkdGgo
aW1hZ2UuZ2V0KCkpKSA9PSBzaXplKERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pLndpZHRo
KCkpOworICAgICAgICAgICAgKnNjYWxlID0gMTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAv
LyAhUExBVEZPUk0oSU9TKQogICAgIENGU3RyaW5nUmVmIGltYWdlVVRJID0gQ0dJbWFnZVNvdXJj
ZUdldFR5cGUobV9kZWNvZGVyKTsKICAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgeGJtVVRJ
ID0gQ0ZTVFIoInB1YmxpYy54Yml0bWFwLWltYWdlIik7CiAgICAgaWYgKCFpbWFnZVVUSSB8fCAh
Q0ZFcXVhbChpbWFnZVVUSSwgeGJtVVRJKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCmluZGV4IDk1M2JjYjlkMjhh
ZDBlYjc1YWIzODgxM2MzNDM5NDU1ZjEyNjJjNzYuLmVkZjllNDkwZTZmZmJlNTgwNjJlMDRiODdk
NmZmZDZiM2YzNzJiMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpAQCAtMjksNiArMjksMjEgQEAKICNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisj
aWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCisjaW5jbHVkZSA8TW9i
aWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgorCitTT0ZUX0xJTktfRlJBTUVX
T1JLKE1vYmlsZUNvcmVTZXJ2aWNlcykKKworU09GVF9MSU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywg
VVRUeXBlQ29weVByZWZlcnJlZFRhZ1dpdGhDbGFzcywgQ0ZTdHJpbmdSZWYsIChDRlN0cmluZ1Jl
ZiBpblVUSSwgQ0ZTdHJpbmdSZWYgaW5UYWdDbGFzcyksIChpblVUSSwgaW5UYWdDbGFzcykpCisK
K1NPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFRhZ0NsYXNzRmlsZW5h
bWVFeHRlbnNpb24sIENGU3RyaW5nUmVmKQorU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVT
ZXJ2aWNlcywga1VUVGFnQ2xhc3NNSU1FVHlwZSwgQ0ZTdHJpbmdSZWYpCisKKyNkZWZpbmUga1VU
VGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiBnZXRrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9u
KCkKKyNkZWZpbmUga1VUVGFnQ2xhc3NNSU1FVHlwZSBnZXRrVVRUYWdDbGFzc01JTUVUeXBlKCkK
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFN0cmluZyBNSU1FVHlwZUZvckltYWdl
U291cmNlVHlwZShjb25zdCBTdHJpbmcmIHV0aSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKaW5kZXggNzA4ZmNjMmUxZGZmZGE5Yzk0
MzI3NmU1MGFhNDQ4MDBmOWZkMmViOC4uYmQwNDU3NGM3ZDY5ZjVhZWIyMjdkNzBiNGY4ODViNTU1
YjIwMmQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW50UG9pbnRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW50UG9pbnRDRy5jcHAKQEAgLTI4LDcgKzI4LDExIEBACiAKICNpZiBVU0UoQ0cpCiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25T
ZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENHLmNwcAppbmRleCA4ZDEwMjA3YmY5Zjg3NWFh
MmQ3ZjZlNzBhYjNiN2NlYjYzZDk5NWQ0Li5kMWY3YjJlNTcwODhhOWJkYjRhYjQ0OGM4MDM2NTkx
ZmUxN2YyMmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbnRSZWN0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ludFJlY3RDRy5jcHAKQEAgLTI4LDcgKzI4LDExIEBACiAKICNpZiBVU0UoQ0cpCiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25T
ZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXplQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcAppbmRleCA0MWZiMzk5ZTM1NWNhMDEz
NjNjMDZmN2I0MTA3YjJkNmY5YmY4NGYyLi5lNWQwYjgyNGRkNmFjYTVhNmYyMzYwNjBiNGJjNjVk
NzMwOWMzYjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbnRTaXplQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ludFNpemVDRy5jcHAKQEAgLTI4LDcgKzI4LDExIEBACiAKICNpZiBVU0UoQ0cpCiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25T
ZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDU2
ZmRkNTk3NzQ5MTUwMDEwOGY5OWQ0ZjExODBjOGE4N2JkYmE2YjkuLjExM2ZhOTc5NzY0NzRiOTk4
NzFiMjY2NjkwODliODM2NjExM2Y3OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC0yOSw2ICsyOSwx
MyBAQAogCiAjaWYgVVNFKENHKQogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8Q29yZUdy
YXBoaWNzL0NHQ29udGV4dFByaXZhdGUuaD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0NvbnRl
eHRHU3RhdGUuaD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbXBv
cnQgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2VuZGlmCisKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCmlu
ZGV4IGZlOWY3ODQ0MDUzOGJhYWIyYzU5MDFmMmUxZWNiOThhYjNjMTRhYzIuLjMzYmQ4OTE3Yjcy
ZGMzYTcwMTY0Nzc0MjhmN2UzZjQxZjJmMjUwYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcApAQCAtMzQsNyArMzQsMTIgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiU3Ry
b2tlU3R5bGVBcHBsaWVyLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NHUGF0aFByaXZhdGUuaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdy
YXBoaWNzLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCmluZGV4
IDBjZDUyOWVhYmU5MWE1ODljYjg1YTYzM2RmNGY3OWFhN2UyMTNhODYuLjBjMDgwNDhjYjJiZjIy
YzE3MjI3YzZmMzk4NmY1ZmUyZDA4MzUxZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcApAQCAtMjksNyArMjksMTIgQEAKIAogI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
CisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxp
Y2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFw
aGljcy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogI2lmIFBMQVRG
T1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQppbmRleCBhOTE1ZDI3Y2UwODRm
ODA2ZDVkZTA4NjFkYWFkMWM5ZTY0ZTY3ZDMxLi43Yjc2MzJhZDQxMDA3Zjk2MjI5NTAyNzRjYzAz
ZmRiZDNmMGE4ODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC0yNSw3ICsy
NSwxMyBAQAogI2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0YS5oIgogCiAjaW1wb3J0ICJXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbXBvcnQgPEFwcEtpdC9O
U0ZvbnQuaD4KKyNlbHNlCisjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorI2ltcG9ydCA8
Q29yZUdyYXBoaWNzL0NHRm9udEluZm8uaD4KKyNlbmRpZgorCiAjaW1wb3J0IDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzMsMTQgKzM5LDE1IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIC8vIFRoZXNlIENvcmVUZXh0IFRleHQgU3BhY2luZyBmZWF0dXJl
IHNlbGVjdG9ycyBhcmUgbm90IGRlZmluZWQgaW4gQ29yZVRleHQuCiBlbnVtIFRleHRTcGFjaW5n
Q1RGZWF0dXJlU2VsZWN0b3IgeyBUZXh0U3BhY2luZ1Byb3BvcnRpb25hbCwgVGV4dFNwYWNpbmdG
dWxsV2lkdGgsIFRleHRTcGFjaW5nSGFsZldpZHRoLCBUZXh0U3BhY2luZ1RoaXJkV2lkdGgsIFRl
eHRTcGFjaW5nUXVhcnRlcldpZHRoIH07CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogdm9pZCBGb250UGxhdGZvcm1EYXRhOjpsb2FkRm9u
dChOU0ZvbnQqIG5zRm9udCwgZmxvYXQsIE5TRm9udComIG91dE5TRm9udCwgQ0dGb250UmVmJiBj
Z0ZvbnQpCiB7CiAgICAgb3V0TlNGb250ID0gbnNGb250OwogICAgIGNnRm9udCA9IENURm9udENv
cHlHcmFwaGljc0ZvbnQodG9DVEZvbnRSZWYobnNGb250KSwgMCk7CiB9Ci0jZW5kaWYgIC8vIFBM
QVRGT1JNKE1BQykKKyNlbmRpZiAgLy8gUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQog
CisjaWYgIVBMQVRGT1JNKElPUykKIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
TlNGb250ICpuc0ZvbnQsIGZsb2F0IHNpemUsIGJvb2wgaXNQcmludGVyRm9udCwgYm9vbCBzeW50
aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQpCiAgICAgOiBtX3N5bnRoZXRpY0Jv
bGQoc3ludGhldGljQm9sZCkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShzeW50aGV0aWNPYmxp
cXVlKQpAQCAtNDksOSArNTYsMjIgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShOU0ZvbnQgKm5zRm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJGb24KICAgICAsIG1f
d2lkdGhWYXJpYW50KHdpZHRoVmFyaWFudCkKICAgICAsIG1fZm9udChuc0ZvbnQpCiAgICAgLCBt
X2lzQ29sb3JCaXRtYXBGb250KGZhbHNlKQorI2Vsc2UKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEoQ1RGb250UmVmIGN0Rm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJG
b250LCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCkKKyAgICA6
IG1fc3ludGhldGljQm9sZChzeW50aGV0aWNCb2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVl
KHN5bnRoZXRpY09ibGlxdWUpCisgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQorICAg
ICwgbV9pc0Vtb2ppKGZhbHNlKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3dpZHRoVmFy
aWFudCh3aWR0aFZhcmlhbnQpCisgICAgLCBtX2ZvbnQoY3RGb250KQorICAgICwgbV9jZ0ZvbnQo
YWRvcHRDRihDVEZvbnRDb3B5R3JhcGhpY3NGb250KGN0Rm9udCwgTlVMTCkpKQorICAgICwgbV9p
c0NvbG9yQml0bWFwRm9udChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpICYga0NURm9u
dFRyYWl0Q29sb3JHbHlwaHMpCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKICAgICAsIG1faXND
b21wb3NpdGVGb250UmVmZXJlbmNlKGZhbHNlKQogICAgICwgbV9pc1ByaW50ZXJGb250KGlzUHJp
bnRlckZvbnQpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBBU1NFUlRfQVJHKG5zRm9udCwg
bnNGb250KTsKIAogICAgIENHRm9udFJlZiBjZ0ZvbnQgPSAwOwpAQCAtNjgsMTggKzg4LDM1IEBA
IEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoTlNGb250ICpuc0ZvbnQsIGZsb2F0
IHNpemUsIGJvb2wgaXNQcmludGVyRm9uCiAgICAgICAgIENGUmV0YWluKG1fZm9udCk7CiAKICAg
ICBtX2NnRm9udCA9IGFkb3B0Q0YoY2dGb250KTsKKyNlbHNlCisgICAgQVNTRVJUX0FSRyhjdEZv
bnQsIGN0Rm9udCk7CisKKyAgICBDRlJldGFpbihjdEZvbnQpOworI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCiB9CiAKLUZvbnRQbGF0Zm9ybURhdGE6OiB+Rm9udFBsYXRmb3JtRGF0YSgpCitGb250
UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCiB7CisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICBpZiAobV9mb250ICYmIG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PE5TRm9udCAqPigt
MSkpCiAgICAgICAgIENGUmVsZWFzZShtX2ZvbnQpOworI2Vsc2UKKyAgICBpZiAobV9mb250ICYm
IG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpKQorICAgICAgICBDRlJl
bGVhc2UobV9mb250KTsKKyNlbmRpZgogfQogCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRm
b3JtRGF0YUluaXQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZikKIHsKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgIG1fZm9udCA9IGYubV9mb250ICYmIGYubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nh
c3Q8TlNGb250ICo+KC0xKSA/IGNvbnN0X2Nhc3Q8TlNGb250ICo+KHN0YXRpY19jYXN0PGNvbnN0
IE5TRm9udCAqPihDRlJldGFpbihmLm1fZm9udCkpKSA6IGYubV9mb250OworI2Vsc2UKKyAgICBt
X2ZvbnQgPSBmLm1fZm9udCAmJiBmLm1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJl
Zj4oLTEpID8gc3RhdGljX2Nhc3Q8Q1RGb250UmVmPihjb25zdF9jYXN0PHZvaWQgKj4oQ0ZSZXRh
aW4oZi5tX2ZvbnQpKSkgOiBmLm1fZm9udDsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIG1faXNFbW9qaSA9IGYubV9pc0Vtb2ppOworI2VuZGlmCiAgICAgbV9jZ0ZvbnQgPSBmLm1f
Y2dGb250OwogICAgIG1fQ1RGb250ID0gZi5tX0NURm9udDsKIH0KQEAgLTg3LDEyICsxMjQsMjQg
QEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIGYpCiBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpw
bGF0Zm9ybURhdGFBc3NpZ24oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZikKIHsKICAgICBtX2Nn
Rm9udCA9IGYubV9jZ0ZvbnQ7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIG1faXNFbW9qaSA9IGYu
bV9pc0Vtb2ppOworI2VuZGlmCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAobV9mb250ID09
IGYubV9mb250KQogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgaWYgKGYubV9mb250ICYmIGYu
bV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKSkKICAgICAgICAgQ0ZSZXRh
aW4oZi5tX2ZvbnQpOwogICAgIGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nh
c3Q8TlNGb250ICo+KC0xKSkKICAgICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7CisjZWxzZQorICAg
IGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Q1RGb250UmVmPigtMSkg
JiYgZi5tX2ZvbnQgJiYgZi5tX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0x
KSAmJiBDRkVxdWFsKG1fZm9udCwgZi5tX2ZvbnQpKQorICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgaWYgKGYubV9mb250ICYmIGYubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Q1RGb250UmVm
PigtMSkpCisgICAgICAgIENGUmV0YWluKGYubV9mb250KTsKKyAgICBpZiAobV9mb250ICYmIG1f
Zm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpKQorICAgICAgICBDRlJlbGVh
c2UobV9mb250KTsKKyNlbmRpZgogICAgIG1fZm9udCA9IGYubV9mb250OwogICAgIG1fQ1RGb250
ID0gZi5tX0NURm9udDsKICAgICByZXR1cm4gKnRoaXM7CkBAIC0xMDAsMTEgKzE0OSwyOSBAQCBj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFBc3Np
Z24oY29uc3QgRm9udFBsYXRmb3JtRAogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3Jt
SXNFcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKIHsKLSAgICBpZiAo
bV9mb250IHx8IG90aGVyLm1fZm9udCkKLSAgICAgICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5t
X2ZvbnQ7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBpZiAobV9mb250IHx8IG90aGVy
Lm1fZm9udCkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgcmVzdWx0ID0gbV9mb250ICYm
IG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpICYmIG90aGVyLm1fZm9u
dCAmJiBvdGhlci5tX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSAmJiBD
RkVxdWFsKG1fZm9udCwgb3RoZXIubV9mb250KTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
ICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBBU1NFUlQobV9pc0Vtb2ppID09IG90aGVyLm1f
aXNFbW9qaSk7CisjZW5kaWYKKyNlbHNlCisgICAgICAgIHJlc3VsdCA9IG1fZm9udCA9PSBvdGhl
ci5tX2ZvbnQ7CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyNpZiBQTEFURk9STShJT1MpCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGlm
IChtX2NnRm9udCA9PSBvdGhlci5tX2NnRm9udCkKKyAgICAgICAgQVNTRVJUKG1faXNFbW9qaSA9
PSBvdGhlci5tX2lzRW1vamkpOworI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogICAg
IHJldHVybiBtX2NnRm9udCA9PSBvdGhlci5tX2NnRm9udDsKIH0KIAorI2lmICFQTEFURk9STShJ
T1MpCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldEZvbnQoTlNGb250ICpmb250KQogewogICAg
IEFTU0VSVF9BUkcoZm9udCwgZm9udCk7CkBAIC0xMzMsMTUgKzIwMCw0MyBAQCB2b2lkIEZvbnRQ
bGF0Zm9ybURhdGE6OnNldEZvbnQoTlNGb250ICpmb250KQogICAgIH0KICAgICBtX0NURm9udCA9
IDA7CiB9CisjZWxzZQordm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KENURm9udFJlZiBm
b250KQoreworICAgIEFTU0VSVF9BUkcoZm9udCwgZm9udCk7CisgICAgQVNTRVJUKG1fZm9udCAh
PSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpKTsKIAorICAgIGlmIChtX2ZvbnQgPT0g
Zm9udCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZSZXRhaW4oZm9udCk7CisgICAgaWYgKG1f
Zm9udCkKKyAgICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7CisgICAgbV9mb250ID0gZm9udDsKKyAg
ICBtX3NpemUgPSBDVEZvbnRHZXRTaXplKGZvbnQpOworICAgIG1fY2dGb250ID0gYWRvcHRDRihD
VEZvbnRDb3B5R3JhcGhpY3NGb250KGZvbnQsIG51bGxwdHIpKTsKKyAgICBtX2lzQ29sb3JCaXRt
YXBGb250ID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCkgJiBrQ1RGb250VHJhaXRDb2xv
ckdseXBoczsKK30KKyNlbmRpZgorCisjaWYgIVBMQVRGT1JNKElPUykKIGJvb2wgRm9udFBsYXRm
b3JtRGF0YTo6cm91bmRzR2x5cGhBZHZhbmNlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX2Zv
bnQgcmVuZGVyaW5nTW9kZV0gPT0gTlNGb250QW50aWFsaWFzZWRJbnRlZ2VyQWR2YW5jZW1lbnRz
UmVuZGVyaW5nTW9kZTsKIH0KKyNlbmRpZgogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OmFsbG93
c0xpZ2F0dXJlcygpIGNvbnN0CiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gIVtb
bV9mb250IGNvdmVyZWRDaGFyYWN0ZXJTZXRdIGNoYXJhY3RlcklzTWVtYmVyOidhJ107CisjZWxz
ZQorICAgIGlmICghbV9mb250KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5Q
dHI8Q0ZDaGFyYWN0ZXJTZXRSZWY+IGNoYXJhY3RlclNldCA9IGFkb3B0Q0YoQ1RGb250Q29weUNo
YXJhY3RlclNldChjdEZvbnQoKSkpOworICAgIHJldHVybiAhKGNoYXJhY3RlclNldC5nZXQoKSAm
JiBDRkNoYXJhY3RlclNldElzQ2hhcmFjdGVyTWVtYmVyKGNoYXJhY3RlclNldC5nZXQoKSwgJ2En
KSk7CisjZW5kaWYKIH0KIAogaW5saW5lIGludCBtYXBGb250V2lkdGhWYXJpYW50VG9DVEZlYXR1
cmVTZWxlY3RvcihGb250V2lkdGhWYXJpYW50IHZhcmlhbnQpCkBAIC0yMTcsNiArMzEyLDcgQEAg
Q1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0CiAgICAgaWYgKG1fQ1RG
b250KQogICAgICAgICByZXR1cm4gbV9DVEZvbnQuZ2V0KCk7CiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIG1fQ1RGb250ID0gdG9DVEZvbnRSZWYobV9mb250KTsKICAgICBpZiAobV9DVEZvbnQp
IHsKICAgICAgICAgQ1RGb250RGVzY3JpcHRvclJlZiBmb250RGVzY3JpcHRvcjsKQEAgLTIyOSw2
ICszMjUsMTcgQEAgQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0CiAg
ICAgICAgIG1fQ1RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMo
bV9DVEZvbnQuZ2V0KCksIG1fc2l6ZSwgMCwgZm9udERlc2NyaXB0b3IpKTsKICAgICB9IGVsc2UK
ICAgICAgICAgbV9DVEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQo
bV9jZ0ZvbnQuZ2V0KCksIG1fc2l6ZSwgMCwgY2FzY2FkZVRvTGFzdFJlc29ydEZvbnREZXNjcmlw
dG9yKCkpKTsKKyNlbHNlCisgICAgLy8gQXBwbGUgQ29sb3IgRW1vamkgc2l6ZSBpcyBhZGp1c3Rl
ZCAoYW5kIHRoZW4gcmUtYWRqdXN0ZWQgYnkgQ29yZSBUZXh0KSBhbmQgY2FwcGVkLgorICAgIENH
RmxvYXQgc2l6ZSA9ICFtX2lzRW1vamkgPyBtX3NpemUgOiBtX3NpemUgPD0gMTUgPyA0ICogKG1f
c2l6ZSArIDIpIC8gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oNSkgOiAxNjsKKyAgICBDVEZvbnREZXNj
cmlwdG9yUmVmIGZvbnREZXNjcmlwdG9yOworICAgIGNvbnN0IGNoYXIqIHBvc3RTY3JpcHROYW1l
ID0gQ0dGb250R2V0UG9zdFNjcmlwdE5hbWUobV9jZ0ZvbnQuZ2V0KCkpOworICAgIGlmIChwb3N0
U2NyaXB0TmFtZSAmJiAoIXN0cmNtcChwb3N0U2NyaXB0TmFtZSwgIkhvZWZsZXJUZXh0LUl0YWxp
YyIpIHx8ICFzdHJjbXAocG9zdFNjcmlwdE5hbWUsICJIb2VmbGVyVGV4dC1CbGFja0l0YWxpYyIp
KSkKKyAgICAgICAgZm9udERlc2NyaXB0b3IgPSBjYXNjYWRlVG9MYXN0UmVzb3J0QW5kRGlzYWJs
ZVN3YXNoZXNGb250RGVzY3JpcHRvcigpOworICAgIGVsc2UKKyAgICAgICAgZm9udERlc2NyaXB0
b3IgPSBjYXNjYWRlVG9MYXN0UmVzb3J0Rm9udERlc2NyaXB0b3IoKTsKKyAgICBtX0NURm9udCA9
IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEdyYXBoaWNzRm9udChtX2NnRm9udC5nZXQoKSwgc2l6
ZSwgMCwgZm9udERlc2NyaXB0b3IpKTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAgICAg
aWYgKG1fd2lkdGhWYXJpYW50ICE9IFJlZ3VsYXJXaWR0aCkgewogICAgICAgICBpbnQgZmVhdHVy
ZVR5cGVWYWx1ZSA9IGtUZXh0U3BhY2luZ1R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRGlzcGxheVJlZnJlc2hNb25pdG9yaU9TLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcmlP
Uy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ODA0M2NhYWVjYzgwNTViNDhiYzAyZmUwMzVjYmY2OWYyMTlhZWMw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9z
L0Rpc3BsYXlSZWZyZXNoTW9uaXRvcmlPUy5tbQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9O
SVRPUikKKworI2luY2x1ZGUgIkRpc3BsYXlSZWZyZXNoTW9uaXRvci5oIgorCisjaW5jbHVkZSA8
UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Cisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgor
CitAaW50ZXJmYWNlIFdlYkRpc3BsYXlMaW5rSGFuZGxlciA6IE5TT2JqZWN0Cit7CisgICAgV2Vi
Q29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yKiBtX21vbml0b3I7CisgICAgQ0FEaXNwbGF5TGlu
ayogbV9kaXNwbGF5TGluazsKK30KKworLSAoaWQpaW5pdFdpdGhNb25pdG9yOihXZWJDb3JlOjpE
aXNwbGF5UmVmcmVzaE1vbml0b3IqKW1vbml0b3I7CistICh2b2lkKWhhbmRsZURpc3BsYXlMaW5r
OihDQURpc3BsYXlMaW5rICopc2VuZGVyOworLSAodm9pZClpbnZhbGlkYXRlOworCitAZW5kCisK
K3N0YXRpYyBkb3VibGUgbWVkaWFUaW1lVG9DdXJyZW50VGltZShDRlRpbWVJbnRlcnZhbCB0KQor
eworICAgIHJldHVybiBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSArIHQgLSBDQUN1cnJl
bnRNZWRpYVRpbWUoKTsKK30KKworQGltcGxlbWVudGF0aW9uIFdlYkRpc3BsYXlMaW5rSGFuZGxl
cgorCistIChpZClpbml0V2l0aE1vbml0b3I6KFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRv
ciopbW9uaXRvcgoreworICAgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgICAgIG1f
bW9uaXRvciA9IG1vbml0b3I7CisgICAgICAgIC8vIE5vdGUgdGhhdCBDQURpc3BsYXlMaW5rIHJl
dGFpbnMgaXRzIHRhcmdldCAoc2VsZiksIHNvIGEgY2FsbCB0byAtaW52YWxpZGF0ZSBpcyBuZWVk
ZWQgb24gdGVhcmRvd24uCisgICAgICAgIG1fZGlzcGxheUxpbmsgPSBbQ0FEaXNwbGF5TGluayBk
aXNwbGF5TGlua1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaGFuZGxlRGlzcGxh
eUxpbms6KV07CisgICAgICAgIFttX2Rpc3BsYXlMaW5rIGFkZFRvUnVuTG9vcDpXZWJUaHJlYWRO
U1J1bkxvb3AoKSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKKyAgICB9CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VSVCghbV9kaXNwbGF5
TGluayk7IC8vIC1pbnZhbGlkYXRlIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGFscmVhZHkuCisg
ICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKWhhbmRsZURpc3BsYXlMaW5rOihDQURp
c3BsYXlMaW5rICopc2VuZGVyCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsK
KyAgICBtX21vbml0b3ItPmRpc3BsYXlMaW5rRmlyZWQoc2VuZGVyLnRpbWVzdGFtcCk7Cit9CisK
Ky0gKHZvaWQpaW52YWxpZGF0ZQoreworICAgIFttX2Rpc3BsYXlMaW5rIGludmFsaWRhdGVdOwor
ICAgIG1fZGlzcGxheUxpbmsgPSBudWxscHRyOworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKyAKK0Rpc3BsYXlSZWZyZXNoTW9uaXRvcjo6fkRpc3BsYXlSZWZyZXNoTW9uaXRvcigp
Cit7CisgICAgWyhXZWJEaXNwbGF5TGlua0hhbmRsZXIqKSBtX2Rpc3BsYXlMaW5rIGludmFsaWRh
dGVdOworICAgIFsoV2ViRGlzcGxheUxpbmtIYW5kbGVyKikgbV9kaXNwbGF5TGluayByZWxlYXNl
XTsKK30KKworYm9vbCBEaXNwbGF5UmVmcmVzaE1vbml0b3I6OnJlcXVlc3RSZWZyZXNoQ2FsbGJh
Y2soKQoreworICAgIGlmICghbV9hY3RpdmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgaWYgKCFtX2Rpc3BsYXlMaW5rKSB7CisgICAgICAgIG1fZGlzcGxheUxpbmsgPSBb
W1dlYkRpc3BsYXlMaW5rSGFuZGxlciBhbGxvY10gaW5pdFdpdGhNb25pdG9yOnRoaXNdOworICAg
ICAgICBtX2FjdGl2ZSA9IHRydWU7CisgICAgfQorCisgICAgbV9zY2hlZHVsZWQgPSB0cnVlOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRvcjo6ZGlzcGxh
eUxpbmtGaXJlZChkb3VibGUgbm93U2Vjb25kcykKK3sKKyAgICBpZiAoIW1fcHJldmlvdXNGcmFt
ZURvbmUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJldmlvdXNGcmFtZURvbmUgPSBmYWxz
ZTsKKyAgICBtX21vbm90b25pY0FuaW1hdGlvblN0YXJ0VGltZSA9IG1lZGlhVGltZVRvQ3VycmVu
dFRpbWUobm93U2Vjb25kcyk7CisKKyAgICBoYW5kbGVEaXNwbGF5UmVmcmVzaGVkTm90aWZpY2F0
aW9uT25NYWluVGhyZWFkKHRoaXMpOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVjMmY1
YjVhZmMyZDNhM2ZlZjkwM2RmNTY5NTkwNmE0NzAwZWRiZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KQEAgLTAs
MCArMSw2NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiRm9udENhY2hlLmgiCisKKyNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIlJlbmRlclRo
ZW1lSU9TLmgiCisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ0dGb250VW5pY29kZVN1cHBvcnQuaD4K
KyNpbXBvcnQgPENvcmVUZXh0L0NURm9udERlc2NyaXB0b3JQcml2Lmg+CisjaW1wb3J0IDxDb3Jl
VGV4dC9DVEZvbnRQcml2Lmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAg
ICB3a1NldFVwRm9udENhY2hlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZvbnRXZWln
aHRCb2xkKE5TSW50ZWdlciBmb250V2VpZ2h0KQoreworICAgIHJldHVybiBmb250V2VpZ2h0ID49
IEZvbnRXZWlnaHQ2MDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCByZXF1aXJlc0N1c3RvbUZh
bGxiYWNrRm9udChjb25zdCBVSW50MzIgY2hhcmFjdGVyKQoreworICAgIHJldHVybiBjaGFyYWN0
ZXIgPT0gQXBwbGVMb2dvIHx8IGNoYXJhY3RlciA9PSBibGFja0NpcmNsZTsKK30KKworc3RhdGlj
IENGQ2hhcmFjdGVyU2V0UmVmIGNvcHlGb250Q2hhcmFjdGVyU2V0KENGU3RyaW5nUmVmIGZvbnRO
YW1lKQoreworICAgIC8vIFRoZSBzaXplLCAxMCwgaXMgYXJiaXRyYXJ5LgorICAgIFJldGFpblB0
cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVz
Y3JpcHRvckNyZWF0ZVdpdGhOYW1lQW5kU2l6ZShmb250TmFtZSwgMTApKTsKKyAgICBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBmb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0
b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIDEwLCBudWxscHRyKSk7CisgICAgcmV0dXJuIChDRkNo
YXJhY3RlclNldFJlZilDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250RGVzY3JpcHRv
ci5nZXQoKSwga0NURm9udENoYXJhY3RlclNldEF0dHJpYnV0ZSk7Cit9CisKK3N0YXRpYyBDRkNo
YXJhY3RlclNldFJlZiBhcHBsZUNvbG9yRW1vamlDaGFyYWN0ZXJTZXQoKQoreworICAgIHN0YXRp
YyBDRkNoYXJhY3RlclNldFJlZiBjaGFyYWN0ZXJTZXQgPSBjb3B5Rm9udENoYXJhY3RlclNldChD
RlNUUigiQXBwbGVDb2xvckVtb2ppIikpOworICAgIHJldHVybiBjaGFyYWN0ZXJTZXQ7Cit9CisK
K3N0YXRpYyBDRkNoYXJhY3RlclNldFJlZiBwaG9uZUZhbGxiYWNrQ2hhcmFjdGVyU2V0KCkKK3sK
KyAgICBzdGF0aWMgQ0ZDaGFyYWN0ZXJTZXRSZWYgY2hhcmFjdGVyU2V0ID0gY29weUZvbnRDaGFy
YWN0ZXJTZXQoQ0ZTVFIoIi5QaG9uZUZhbGxiYWNrIikpOworICAgIHJldHVybiBjaGFyYWN0ZXJT
ZXQ7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U3lzdGVt
Rm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0YSwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCit7CisgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
cGxhdGZvcm1EYXRhID0gb3JpZ2luYWxGb250RGF0YS0+cGxhdGZvcm1EYXRhKCk7CisgICAgQ1RG
b250UmVmIGN0Rm9udCA9IHBsYXRmb3JtRGF0YS5mb250KCk7CisKKyAgICBDRkluZGV4IGNvdmVy
ZWRMZW5ndGggPSAwOworICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IHN1YnN0aXR1dGVGb250ID0g
YWRvcHRDRihDVEZvbnRDcmVhdGVQaHlzaWNhbEZvbnRGb3JDaGFyYWN0ZXJzV2l0aExhbmd1YWdl
KGN0Rm9udCwgKGNvbnN0IFVURjE2Q2hhciopY2hhcmFjdGVycywgKENGSW5kZXgpbGVuZ3RoLCAw
LCAmY292ZXJlZExlbmd0aCkpOworICAgIGlmICghc3Vic3RpdHV0ZUZvbnQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgb3JpZ2luYWxUcmFpdHMgPSBDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpOworICAgIENURm9udFN5bWJvbGljVHJhaXRzIGFj
dHVhbFRyYWl0cyA9IDA7CisgICAgaWYgKGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2Vp
Z2h0KCkpIHx8IGRlc2NyaXB0aW9uLml0YWxpYygpKQorICAgICAgICBhY3R1YWxUcmFpdHMgPSBD
VEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhzdWJzdGl0dXRlRm9udC5nZXQoKSk7CisKKyAgICBib29s
IHN5bnRoZXRpY0JvbGQgPSAob3JpZ2luYWxUcmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKSAmJiAh
KGFjdHVhbFRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpOworICAgIGJvb2wgc3ludGhldGljT2Js
aXF1ZSA9IChvcmlnaW5hbFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykgJiYgIShhY3R1YWxU
cmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOworCisgICAgRm9udFBsYXRmb3JtRGF0YSBhbHRl
cm5hdGVGb250KHN1YnN0aXR1dGVGb250LmdldCgpLCBwbGF0Zm9ybURhdGEuc2l6ZSgpLCBwbGF0
Zm9ybURhdGEuaXNQcmludGVyRm9udCgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVl
LCBwbGF0Zm9ybURhdGEubV9vcmllbnRhdGlvbik7CisgICAgYWx0ZXJuYXRlRm9udC5tX2lzRW1v
amkgPSBDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShzdWJzdGl0dXRlRm9udC5nZXQoKSk7CisKKyAg
ICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoJmFsdGVybmF0ZUZvbnQsIERvTm90UmV0YWluKTsK
K30KKworUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFj
a0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBpbnQgbGVuZ3RoKQoreworICAgIHN0YXRpYyBib29sIGlzR0IxODAzMENvbXBsaWFu
Y2VSZXF1aXJlZCA9IHdrSXNHQjE4MDMwQ29tcGxpYW5jZVJlcXVpcmVkKCk7CisKKyAgICAvLyBV
bmxpa2UgT1MgWCwgb3VyIGZhbGxiYWNrIGZvbnQgb24gaVBob25lIGlzIEFyaWFsIFVuaWNvZGUs
IHdoaWNoIGRvZXNuJ3QgaGF2ZSBzb21lIGFwcGxlLXNwZWNpZmljIGdseXBocyBsaWtlIEY4RkYu
CisgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBBcHBsZSBGYWxsYmFjayBmb250IGluIHRoaXMgY2Fz
ZS4KKyAgICBpZiAobGVuZ3RoID4gMCAmJiByZXF1aXJlc0N1c3RvbUZhbGxiYWNrRm9udCgqY2hh
cmFjdGVycykpCisgICAgICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShnZXRDdXN0b21GYWxs
YmFja0ZvbnQoKmNoYXJhY3RlcnMsIGRlc2NyaXB0aW9uKSwgRG9Ob3RSZXRhaW4pOworCisgICAg
VUNoYXIzMiBjID0gKmNoYXJhY3RlcnM7CisgICAgaWYgKGxlbmd0aCA+IDEgJiYgVTE2X0lTX0xF
QUQoYykgJiYgVTE2X0lTX1RSQUlMKGNoYXJhY3RlcnNbMV0pKQorICAgICAgICBjID0gVTE2X0dF
VF9TVVBQTEVNRU5UQVJZKGMsIGNoYXJhY3RlcnNbMV0pOworCisgICAgLy8gRm9yIHN5c3RlbSBm
b250cyB3ZSB1c2UgQ29yZVRleHQgZmFsbGJhY2sgbWVjaGFuaXNtLgorICAgIGlmIChsZW5ndGgp
IHsKKyAgICAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnREZXNjcmlwdG9y
ID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3Iob3JpZ2luYWxGb250RGF0YS0+Z2V0
Q1RGb250KCkpKTsKKyAgICAgICAgaWYgKENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9udChm
b250RGVzY3JpcHRvci5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZ2V0U3lzdGVtRm9udEZh
bGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlvbiwgb3JpZ2luYWxGb250RGF0YSwgY2hhcmFj
dGVycywgbGVuZ3RoKTsKKyAgICB9CisKKyAgICBib29sIHVzZUNKRm9udCA9IGZhbHNlOworICAg
IGJvb2wgdXNlS29yZWFuRm9udCA9IGZhbHNlOworICAgIGJvb2wgdXNlQ3lyaWxsaWNGb250ID0g
ZmFsc2U7CisgICAgYm9vbCB1c2VBcmFiaWNGb250ID0gZmFsc2U7CisgICAgYm9vbCB1c2VIZWJy
ZXdGb250ID0gZmFsc2U7CisgICAgYm9vbCB1c2VJbmRpY0ZvbnQgPSBmYWxzZTsKKyAgICBib29s
IHVzZVRoYWlGb250ID0gZmFsc2U7CisgICAgYm9vbCB1c2VUaWJldGFuRm9udCA9IGZhbHNlOwor
ICAgIGJvb2wgdXNlQ2FuYWRpYW5BYm9yaWdpbmFsU3lsbGFiaWNzRm9udCA9IGZhbHNlOworICAg
IGJvb2wgdXNlRW1vamlGb250ID0gZmFsc2U7CisgICAgaWYgKGxlbmd0aCA+IDApIHsKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgLy8gVGhpcyBpc24ndCBhIGxvb3AgYnV0IGEgd2F5IHRvIGVm
ZmljaWVudGx5IGNoZWNrIGZvciByYW5nZXMgb2YgY2hhcmFjdGVycy4KKworICAgICAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyByYW5nZXMgYXJlIEtvcmVhbiBIYW5ndWwgYW5kIHNob3VsZCBiZSBy
ZW5kZXJlZCBieSBBcHBsZVNER290aGljTmVvCisgICAgICAgICAgICAvLyBVKzExMDAgLSBVKzEx
RkYKKyAgICAgICAgICAgIC8vIFUrMzEzMCAtIFUrMzE4RgorICAgICAgICAgICAgLy8gVStBQzAw
IC0gVStEN0EzCisKKyAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBDeXJpbGxpYyBhbmQgc2hvdWxk
IGJlIHJlbmRlcmVkIGJ5IEhlbHZldGljYSBOZXVlCisgICAgICAgICAgICAvLyBVKzA0MDAgLSBV
KzA1MkYKKworICAgICAgICAgICAgaWYgKGMgPCAweDQwMCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmIChjIDw9IDB4NTJGKSB7CisgICAgICAgICAgICAgICAgdXNlQ3ly
aWxsaWNGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChjIDwgMHg1OTApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBpZiAoYyA8IDB4NjAwKSB7CisgICAgICAgICAgICAgICAgdXNlSGVicmV3Rm9udCA9
IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoYyA8PSAweDZGRikgeworICAgICAgICAgICAgICAgIHVzZUFyYWJpY0ZvbnQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGMgPCAweDkwMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDwg
MHhFMDApIHsKKyAgICAgICAgICAgICAgICB1c2VJbmRpY0ZvbnQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPD0gMHhFN0Yp
IHsKKyAgICAgICAgICAgICAgICB1c2VUaGFpRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA8IDB4MEYwMCkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDw9IDB4MEZGRikgeworICAgICAg
ICAgICAgICAgIHVzZVRpYmV0YW5Gb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDwgMHgxMTAwKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGMgPD0gMHgxMUZGKSB7CisgICAgICAgICAgICAg
ICAgdXNlS29yZWFuRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoYyA+IDB4MTQwMCAmJiBjIDwgMHgxNzgwKSB7CisgICAg
ICAgICAgICAgICAgdXNlQ2FuYWRpYW5BYm9yaWdpbmFsU3lsbGFiaWNzRm9udCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA8
IDB4MkU4MCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDwgMHgz
MTMwKSB7CisgICAgICAgICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDw9IDB4MzE4Rikgewor
ICAgICAgICAgICAgICAgIHVzZUtvcmVhbkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPCAweEFDMDApIHsKKyAgICAg
ICAgICAgICAgICB1c2VDSkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPD0gMHhEN0EzKSB7CisgICAgICAgICAgICAg
ICAgdXNlS29yZWFuRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIGMgPD0gMHhERkZGKSB7CisgICAgICAgICAgICAgICAg
dXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICggYyA8IDB4RTAwMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmICggYyA8IDB4RTYwMCkgeworICAgICAgICAgICAgICAgIGlmIChpc0dCMTgw
MzBDb21wbGlhbmNlUmVxdWlyZWQpCisgICAgICAgICAgICAgICAgICAgIHVzZUNKRm9udCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB1c2VFbW9qaUZv
bnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCBjIDw9IDB4RTg2NCAmJiBpc0dCMTgwMzBDb21wbGlhbmNlUmVxdWlyZWQpIHsK
KyAgICAgICAgICAgICAgICB1c2VDSkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPD0gMHhGOEZGKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGMgPCAweEZCMDApIHsKKyAgICAgICAgICAg
ICAgICB1c2VDSkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGMgPCAweEZCNTApCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAoYyA8PSAweEZERkYpIHsKKyAgICAgICAgICAgICAgICB1c2VBcmFi
aWNGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChjIDwgMHhGRTIwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgaWYgKGMgPCAweEZFNzApIHsKKyAgICAgICAgICAgICAgICB1c2VDSkZvbnQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGMgPCAweEZGMDApIHsKKyAgICAgICAgICAgICAgICB1c2VBcmFiaWNGb250ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDwg
MHhGRkYwKSB7CisgICAgICAgICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjID49MHgyMDAwMCAm
JiBjIDw9IDB4MkZGRkYpCisgICAgICAgICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAg
ICAgfSB3aGlsZSAoMCk7CisgICAgfQorCisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1w
bGVGb250RGF0YTsKKworICAgIGlmICh1c2VDSkZvbnQpIHsKKyAgICAgICAgLy8gQnkgZGVmYXVs
dCwgQ2hpbmVzZSBmb250IGlzIHByZWZlcnJlZCwgZmFsbCBiYWNrIG9uIEphcGFuZXNlLgorCisg
ICAgICAgIGVudW0gQ0pLRm9udFZhcmlhbnQgeworICAgICAgICAgICAga0NKS0ZvbnRVc2VIaXJh
Z2lubyA9IDAsCisgICAgICAgICAgICBrQ0pLRm9udFVzZVNUSGVpdGlTQywKKyAgICAgICAgICAg
IGtDSktGb250VXNlU1RIZWl0aVRDLAorICAgICAgICAgICAga0NKS0ZvbnRVc2VTVEhlaXRpSiwK
KyAgICAgICAgICAgIGtDSktGb250VXNlU1RIZWl0aUssCisgICAgICAgICAgICBrQ0pLRm9udHNV
c2VIS0dQVzNVSQorICAgICAgICB9OworCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9taWNTdHJpbmc+IHBsYWluSGlyYWdpbm8oIkhpcmFLYWt1UHJvTi1XMyIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBwbGFpblNUSGVpdGlTQygiU1RIZWl0aVNDLUxpZ2h0IiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IHBsYWluU1RIZWl0aVRDKCJTVEhlaXRpVEMtTGlnaHQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gcGxhaW5TVEhlaXRpSigiU1RIZWl0aUotTGlnaHQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gcGxhaW5TVEhlaXRpSygiU1RIZWl0aUstTGlnaHQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gcGxhaW5IS0dQVzNVSSgiSEtHUFczVUkiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIEF0b21pY1N0cmluZyogY2pr
UGxhaW5bXSA9IHsgICAgIAorICAgICAgICAgICAgJnBsYWluSGlyYWdpbm8uZ2V0KCksCisgICAg
ICAgICAgICAmcGxhaW5TVEhlaXRpU0MuZ2V0KCksCisgICAgICAgICAgICAmcGxhaW5TVEhlaXRp
VEMuZ2V0KCksCisgICAgICAgICAgICAmcGxhaW5TVEhlaXRpSi5nZXQoKSwKKyAgICAgICAgICAg
ICZwbGFpblNUSGVpdGlLLmdldCgpLAorICAgICAgICAgICAgJnBsYWluSEtHUFczVUkuZ2V0KCks
CisgICAgICAgIH07CisKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gYm9sZEhpcmFnaW5vKCJIaXJhS2FrdVByb04tVzYiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gYm9sZFNUSGVpdGlTQygiU1RIZWl0aVNDLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBib2xkU1RIZWl0aVRDKCJTVEhlaXRpVEMtTWVkaXVtIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGJvbGRTVEhlaXRpSigiU1RIZWl0aUotTWVkaXVtIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGJvbGRTVEhlaXRpSygiU1RIZWl0aUstTWVkaXVtIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGJvbGRIS0dQVzNVSSgiSEtHUFczVUkiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIEF0b21pY1N0cmluZyogY2prQm9sZFtdID0geyAg
CisgICAgICAgICAgICAmYm9sZEhpcmFnaW5vLmdldCgpLAorICAgICAgICAgICAgJmJvbGRTVEhl
aXRpU0MuZ2V0KCksCisgICAgICAgICAgICAmYm9sZFNUSGVpdGlUQy5nZXQoKSwKKyAgICAgICAg
ICAgICZib2xkU1RIZWl0aUouZ2V0KCksCisgICAgICAgICAgICAmYm9sZFNUSGVpdGlLLmdldCgp
LAorICAgICAgICAgICAgJmJvbGRIS0dQVzNVSS5nZXQoKSwKKyAgICAgICAgfTsKKworICAgICAg
ICAvLyBEZWZhdWx0IGJlbG93IGlzIGZvciBTaW1wbGlmaWVkIENoaW5lc2UgdXNlcjogemgtSGFu
cyAtIG5vdGUgdGhhdCBIaXJhZ2lubyBpcyB0aGUKKyAgICAgICAgLy8gdGhlIHNlY29uZGFyeSBm
b250IGFzIHdlIHdhbnQgaXRzIGZvciBIaXJhZ2FuYSBhbmQgS2F0YWthbmEuIFRoZSBvdGhlciBD
SksgZm9udHMKKyAgICAgICAgLy8gZG8gbm90LCBhbmQgc2hvdWxkIG5vdCwgY29udGFpbiBIaXJh
Z2FuYSBvciBLYXRha2FuYSBnbHlwaHMuCisgICAgICAgIHN0YXRpYyBDSktGb250VmFyaWFudCBw
cmVmZXJyZWRDSktGb250ID0ga0NKS0ZvbnRVc2VTVEhlaXRpU0M7CisgICAgICAgIHN0YXRpYyBD
SktGb250VmFyaWFudCBzZWNvbmRhcnlDSktGb250ID0ga0NKS0ZvbnRzVXNlSEtHUFczVUk7CisK
KyAgICAgICAgc3RhdGljIGJvb2wgQ0pLRm9udEluaXRpYWxpemVkOworICAgICAgICBpZiAoIUNK
S0ZvbnRJbml0aWFsaXplZCkgeworICAgICAgICAgICAgQ0pLRm9udEluaXRpYWxpemVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIC8vIFRlc3Rpbmc6IGxhbmd1YWdlTmFtZSA9IChDRlN0cmluZ1JlZilA
ImphIjsKKyAgICAgICAgICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CisgICAgICAgICAgICBOU0FycmF5ICpsYW5ndWFn
ZXMgPSBbZGVmYXVsdHMgc3RyaW5nQXJyYXlGb3JLZXk6QCJBcHBsZUxhbmd1YWdlcyJdOworCisg
ICAgICAgICAgICBpZiAobGFuZ3VhZ2VzKSB7CisgICAgICAgICAgICAgICAgZm9yIChOU1N0cmlu
ZyAqbGFuZ3VhZ2UgaW4gbGFuZ3VhZ2VzKSB7CisgICAgICAgICAgICAgICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gbGFuZ3VhZ2VOYW1lID0gYWRvcHRDRihDRkxvY2FsZUNyZWF0ZUNhbm9u
aWNhbExhbmd1YWdlSWRlbnRpZmllckZyb21TdHJpbmcobnVsbHB0ciwgKENGU3RyaW5nUmVmKWxh
bmd1YWdlKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChDRkVxdWFsKGxhbmd1YWdlTmFtZS5n
ZXQoKSwgQ0ZTVFIoInpoLUhhbnMiKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsg
Ly8gU2ltcGxpZmllZCBDaGluZXNlIC0gZGVmYXVsdCBzZXR0aW5ncworICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChDRkVxdWFsKGxhbmd1YWdlTmFtZS5nZXQoKSwgQ0ZTVFIoImphIikpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRDSktGb250ID0ga0NKS0ZvbnRVc2VI
aXJhZ2lubzsgLy8gSmFwYW5lc2UgLSBwcmVmZXIgSGlyYWdpbm8gYW5kIFNUSGVpdGkgSmFwYW5z
ZSBWYXJpYW50CisgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnlDSktGb250ID0ga0NK
S0ZvbnRVc2VTVEhlaXRpSjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKENGRXF1YWwobGFuZ3VhZ2VOYW1lLmdldCgpLCBDRlNU
Uigia28iKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZENKS0ZvbnQgPSBr
Q0pLRm9udFVzZVNUSGVpdGlLOyAvLyBLb3JlYW4gLSBwcmVmZXIgU1RIZWl0aSBLb3JlYW4gVmFy
aWFudCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKENGRXF1YWwobGFuZ3VhZ2VOYW1lLmdldCgpLCBDRlNUUigiemgtSGFudCIp
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ0pLRm9udCA9IGtDSktGb250
VXNlU1RIZWl0aVRDOyAvLyBUcmFkaXRpb25hbCBDaGluZXNlIC0gcHJlZmVyIFNUSGVpdGkgVHJh
ZGl0aW9uYWwgVmFyaWFudAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0
aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/ICpjamtCb2xkW3By
ZWZlcnJlZENKS0ZvbnRdIDogKmNqa1BsYWluW3ByZWZlcnJlZENKS0ZvbnRdLCBmYWxzZSwgRG9O
b3RSZXRhaW4pOworICAgICAgICBib29sIHVzZVNlY29uZGFyeUZvbnQgPSB0cnVlOworICAgICAg
ICBpZiAoc2ltcGxlRm9udERhdGEpIHsKKyAgICAgICAgICAgIENHR2x5cGggZ2x5cGhzWzJdOwor
ICAgICAgICAgICAgLy8gQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMgdGFrZXMgVVRGLTE2IGJ1
ZmZlci4gU2hvdWxkIG9ubHkgYmUgMSBjb2RlcG9pbnQgYnV0IHNpbmNlIHdlIG1heSBwYXNzIGlu
IHR3byBVVEYtMTYgY2hhcmFjdGVycywKKyAgICAgICAgICAgIC8vIG1ha2Ugcm9vbSBmb3IgMiBn
bHlwaHMganVzdCB0byBiZSBzYWZlLgorICAgICAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5p
Y2hhcnMoc2ltcGxlRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBjaGFyYWN0ZXJz
LCBnbHlwaHMsIGxlbmd0aCk7CisKKyAgICAgICAgICAgIHVzZVNlY29uZGFyeUZvbnQgPSAoZ2x5
cGhzWzBdID09IDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZVNlY29uZGFyeUZvbnQp
CisgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0
aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/ICpjamtCb2xkW3Nl
Y29uZGFyeUNKS0ZvbnRdIDogKmNqa1BsYWluW3NlY29uZGFyeUNKS0ZvbnRdLCBmYWxzZSwgRG9O
b3RSZXRhaW4pOworICAgIH0gZWxzZSBpZiAodXNlS29yZWFuRm9udCkgeworICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrb3JlYW5QbGFpbigiQXBwbGVTREdvdGhp
Y05lby1NZWRpdW0iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4ga29yZWFuQm9sZCgiQXBwbGVT
REdvdGhpY05lby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlz
Rm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8ga29yZWFuQm9sZCA6IGtvcmVh
blBsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSBpZiAodXNlQ3lyaWxsaWNG
b250KSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmls
bGljUGxhaW4oIkhlbHZldGljYU5ldWUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY3lyaWxs
aWNCb2xkKCJIZWx2ZXRpY2FOZXVlLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNj
cmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjeXJpbGxp
Y0JvbGQgOiBjeXJpbGxpY1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSBp
ZiAodXNlQXJhYmljRm9udCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBhcmFiaWNQbGFpbigiR2VlemFQcm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
YXJhYmljQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2Ny
aXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGFyYWJpY0Jv
bGQgOiBhcmFiaWNQbGFpbiwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICB9IGVsc2UgaWYgKHVz
ZUhlYnJld0ZvbnQpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gaGVicmV3UGxhaW4oIkFyaWFsSGVicmV3IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhl
YnJld0JvbGQoIkFyaWFsSGVicmV3LUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNj
cmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBoZWJyZXdC
b2xkIDogaGVicmV3UGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgfSBlbHNlIGlmICh1
c2VJbmRpY0ZvbnQpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gZGV2YW5hZ2FyaUZvbnQoIkRldmFuYWdhcmlTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBiZW5nYWxpRm9udCgiQmFuZ2xhU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gZ3VybXVraGlGb250KCJHdXJtdWtoaU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7IC8vIE1pZ2h0IGJlIHJlcGxhY2VkIGluIGEgZnV0dXJlIHJlbGVhc2Ugd2l0
aCBhIFNhbmdhbSB2ZXJzaW9uLgorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBndWphcmF0aUZvbnQoIkd1amFyYXRpU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gb3JpeWFGb250KCJPcml5YVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IHRhbWlsRm9udCgiVGFtaWxTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0
ZWx1Z3VGb250KCJUZWx1Z3VTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrYW5u
YWRhRm9udCgiS2FubmFkYVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1hbGF5
YWxhbUZvbnQoIk1hbGF5YWxhbVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNp
bmhhbGFGb250KCJTaW5oYWxhU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBk
ZXZhbmFnYXJpRm9udEJvbGQoIkRldmFuYWdhcmlTYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9taWNTdHJpbmc+IGJlbmdhbGlGb250Qm9sZCgiQmFuZ2xhU2FuZ2FtTU4tQm9sZCIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBndXJtdWtoaUZvbnRCb2xkKCJHdXJtdWtoaU1OLUJvbGQiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsgLy8gTWlnaHQgYmUgcmVwbGFjZWQg
aW4gYSBmdXR1cmUgcmVsZWFzZSB3aXRoIGEgU2FuZ2FtIHZlcnNpb24uCisgICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGd1amFyYXRpRm9udEJvbGQoIkd1amFyYXRp
U2FuZ2FtTU4tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBvcml5YUZvbnRCb2xkKCJP
cml5YVNhbmdhbU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGFtaWxGb250Qm9s
ZCgiVGFtaWxTYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRlbHVndUZv
bnRCb2xkKCJUZWx1Z3VTYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGth
bm5hZGFGb250Qm9sZCgiS2FubmFkYVNhbmdhbU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gbWFsYXlhbGFtRm9udEJvbGQoIk1hbGF5YWxhbVNhbmdhbU1OLUJvbGQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gc2luaGFsYUZvbnRCb2xkKCJTaW5oYWxhU2FuZ2FtTU4tQm9sZCIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworCisgICAgICAgIHN0YXRpYyBB
dG9taWNTdHJpbmcqIGluZGljVW5pY29kZVBhZ2VGb250c1tdID0geworICAgICAgICAgICAgJmRl
dmFuYWdhcmlGb250LmdldCgpLAorICAgICAgICAgICAgJmJlbmdhbGlGb250LmdldCgpLAorICAg
ICAgICAgICAgJmd1cm11a2hpRm9udC5nZXQoKSwKKyAgICAgICAgICAgICZndWphcmF0aUZvbnQu
Z2V0KCksCisgICAgICAgICAgICAmb3JpeWFGb250LmdldCgpLAorICAgICAgICAgICAgJnRhbWls
Rm9udC5nZXQoKSwKKyAgICAgICAgICAgICZ0ZWx1Z3VGb250LmdldCgpLAorICAgICAgICAgICAg
Jmthbm5hZGFGb250LmdldCgpLAorICAgICAgICAgICAgJm1hbGF5YWxhbUZvbnQuZ2V0KCksCisg
ICAgICAgICAgICAmc2luaGFsYUZvbnQuZ2V0KCkKKyAgICAgICAgfTsKKworICAgICAgICBzdGF0
aWMgQXRvbWljU3RyaW5nKiBpbmRpY1VuaWNvZGVQYWdlRm9udHNCb2xkW10gPSB7CisgICAgICAg
ICAgICAmZGV2YW5hZ2FyaUZvbnRCb2xkLmdldCgpLAorICAgICAgICAgICAgJmJlbmdhbGlGb250
Qm9sZC5nZXQoKSwKKyAgICAgICAgICAgICZndXJtdWtoaUZvbnRCb2xkLmdldCgpLAorICAgICAg
ICAgICAgJmd1amFyYXRpRm9udEJvbGQuZ2V0KCksCisgICAgICAgICAgICAmb3JpeWFGb250Qm9s
ZC5nZXQoKSwKKyAgICAgICAgICAgICZ0YW1pbEZvbnRCb2xkLmdldCgpLAorICAgICAgICAgICAg
JnRlbHVndUZvbnRCb2xkLmdldCgpLAorICAgICAgICAgICAgJmthbm5hZGFGb250Qm9sZC5nZXQo
KSwKKyAgICAgICAgICAgICZtYWxheWFsYW1Gb250Qm9sZC5nZXQoKSwKKyAgICAgICAgICAgICZz
aW5oYWxhRm9udEJvbGQuZ2V0KCkKKyAgICAgICAgfTsKKworICAgICAgICB1aW50MzJfdCBpbmRp
Y1BhZ2VPcmRlckluZGV4ID0gKGMgLSAweDA5MDApIC8gMHgwMDgwOyAvLyBJbmRpYyBzY3JpcHRz
IHN0YXJ0IGF0IDB4MDkwMCBpbiBVbmljb2RlLiBFYWNoIHNjcmlwdCBpcyBhbGxvY2FsdGVkIGEg
YmxvY2sgb2YgMHg4MCBjaGFyYWN0ZXJzLgorICAgICAgICBpZiAoaW5kaWNQYWdlT3JkZXJJbmRl
eCA8IChzaXplb2YoaW5kaWNVbmljb2RlUGFnZUZvbnRzKSAvIHNpemVvZihBdG9taWNTdHJpbmcq
KSkpIHsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyogaW5kaWNGb250U3RyaW5nID0gaXNGb250
V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBpbmRpY1VuaWNvZGVQYWdlRm9udHNC
b2xkW2luZGljUGFnZU9yZGVySW5kZXhdIDogaW5kaWNVbmljb2RlUGFnZUZvbnRzW2luZGljUGFn
ZU9yZGVySW5kZXhdOworICAgICAgICAgICAgaWYgKGluZGljRm9udFN0cmluZykKKyAgICAgICAg
ICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCAq
aW5kaWNGb250U3RyaW5nLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICB9CisgICAgfSBl
bHNlIGlmICh1c2VUaGFpRm9udCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiB0aGFpUGxhaW4oIlRob25idXJpIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+
IHRoYWlCb2xkKCJUaG9uYnVyaS1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhhaUJvbGQg
OiB0aGFpUGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgfSBlbHNlIGlmICh1c2VUaWJl
dGFuRm9udCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0
aWJldGFuUGxhaW4oIkthaWxhc2EiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGliZXRhbkJv
bGQoIkthaWxhc2EtQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwor
ICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBp
c0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IHRpYmV0YW5Cb2xkIDogdGli
ZXRhblBsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSBpZiAodXNlQ2FuYWRp
YW5BYm9yaWdpbmFsU3lsbGFiaWNzRm9udCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXRvbWljU3RyaW5nPiBjYXNQbGFpbigiRXVwaGVtaWFVQ0FTIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IGNhc0JvbGQoIkV1cGhlbWlhVUNBUy1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9u
dERhdGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkp
ID8gY2FzQm9sZCA6IGNhc1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSB7
CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGFwcGxlQ29sb3JF
bW9qaSgiQXBwbGVDb2xvckVtb2ppIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgICAgIGlmICghdXNlRW1vamlGb250KSB7CisgICAgICAgICAgICBpZiAoIUNGQ2hh
cmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKHBob25lRmFsbGJhY2tDaGFyYWN0ZXJTZXQo
KSwgYykpCisgICAgICAgICAgICAgICAgdXNlRW1vamlGb250ID0gQ0ZDaGFyYWN0ZXJTZXRJc0xv
bmdDaGFyYWN0ZXJNZW1iZXIoYXBwbGVDb2xvckVtb2ppQ2hhcmFjdGVyU2V0KCksIGMpOworICAg
ICAgICB9CisgICAgICAgIGlmICh1c2VFbW9qaUZvbnQpCisgICAgICAgICAgICBzaW1wbGVGb250
RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1vamksIGZh
bHNlLCBEb05vdFJldGFpbik7CisgICAgfQorCisgICAgaWYgKHNpbXBsZUZvbnREYXRhKQorICAg
ICAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgpOworCisgICAgcmV0dXJuIGdldE5v
blJldGFpbmVkTGFzdFJlc29ydEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbik7Cit9CisKK1Bhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICAvLyBBdHRlbXB0IHRv
IGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1hdGNoIGJhc2VkIG9uIHRoZSBwcmVz
ZW5jZSBvZiBrZXl3b3JkcyBpbgorICAgIC8vIHRoZSByZXF1ZXN0ZWQgbmFtZXMuIEZvciBleGFt
cGxlLCB3ZSdsbCBtYXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRhaW5zICJBcmFiaWMiIHRvIEdlZXph
IFByby4KKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnREYXRhOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOyArK2kpIHsK
KyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBkZXNjcmlwdGlvbi5mYW1pbHlB
dChpKTsKKyAgICAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAvLyBTdWJzdGl0dXRlIHRoZSBkZWZhdWx0IG1vbm9zcGFjZSBmb250IGZv
ciB3ZWxsLWtub3duIG1vbm9zcGFjZSBmb250cy4KKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gbW9uYWNvKCJtb25hY28iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gbWVubG8oIm1lbmxvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNvdXJpZXIoImNvdXJp
ZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbW9uYWNvKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1p
bHksIG1lbmxvKSkgeworICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250
RGF0YShkZXNjcmlwdGlvbiwgY291cmllcik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFN1YnN0aXR1dGUgVmVyZGFuYSBmb3IgTHVjaWRhIEdyYW5kZS4K
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbHVjaWRhR3JhbmRl
KCJsdWNpZGEgZ3JhbmRlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHZlcmRhbmEoInZlcmRh
bmEiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbHVjaWRhR3JhbmRlKSkgeworICAgICAgICAgICAgc2lt
cGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTdHJpbmc+IGFyYWJpYyhBU0NJSUxpdGVyYWwoIkFyYWJpYyIpKTsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gcGFzaHRvKEFTQ0lJTGl0ZXJhbCgiUGFzaHRv
IikpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB1cmR1KEFTQ0lJTGl0
ZXJhbCgiVXJkdSIpKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsg
JmFyYWJpYy5nZXQoKSwgJnBhc2h0by5nZXQoKSwgJnVyZHUuZ2V0KCkgfTsKKyAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2VlemFQbGFpbigiR2VlemFQcm8iLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgMyAmJiAhc2ltcGxlRm9udERhdGE7ICsraikKKyAgICAgICAgICAgIGlmIChmYW1pbHkuY29u
dGFpbnMoKm1hdGNoV29yZHNbal0sIGZhbHNlKSkKKyAgICAgICAgICAgICAgICBzaW1wbGVGb250
RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRl
c2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOworICAgIH0KKwor
ICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFp
bikKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBmYWxsYmFja0Zv
bnRGYW1pbHkoIi5QaG9uZUZhbGxiYWNrIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFs
bGJhY2tGb250RmFtaWx5LCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKK30KKworRm9udFBsYXRmb3Jt
RGF0YSogRm9udENhY2hlOjpnZXRDdXN0b21GYWxsYmFja0ZvbnQoY29uc3QgVUludDMyIGMsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgQVNTRVJUKHJlcXVpcmVz
Q3VzdG9tRmFsbGJhY2tGb250KGMpKTsKKyAgICBpZiAoYyA9PSBBcHBsZUxvZ28pIHsKKyAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gaGVsdmV0aWNhRmFtaWx5KCJI
ZWx2ZXRpY2EgTmV1ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAg
ICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgaGVsdmV0
aWNhRmFtaWx5KTsKKyAgICB9CisgICAgaWYgKGMgPT0gYmxhY2tDaXJjbGUpIHsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbG9ja0Nsb2NrRmFtaWx5KCJMb2Nr
Q2xvY2stTGlnaHQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAg
ICAgcmV0dXJuIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIGxvY2tDbG9j
a0ZhbWlseSk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgaW5saW5l
IEZvbnRUcmFpdHNNYXNrIHRvVHJhaXRzTWFzayhDVEZvbnRTeW1ib2xpY1RyYWl0cyBjdEZvbnRU
cmFpdHMpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigoKGN0Rm9u
dFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykgPyBGb250U3R5bGVJdGFsaWNNYXNrIDogRm9u
dFN0eWxlTm9ybWFsTWFzaykKKyAgICAgICAgfCBGb250VmFyaWFudE5vcm1hbE1hc2sKKyAgICAg
ICAgLy8gRm9udFdlaWdodDYwMCBvciBoaWdoZXIgaXMgYm9sZCBmb3IgQ1RGb250cywgc28gY2hv
b3NlIG1pZGRsZSB2YWx1ZXMgZm9yCisgICAgICAgIC8vIGJvbGQgKDYwMC05MDApIGFuZCBub24t
Ym9sZCAoMTAwLTUwMCkKKyAgICAgICAgfCAoKGN0Rm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEJv
bGQpID8gRm9udFdlaWdodDcwME1hc2sgOiBGb250V2VpZ2h0MzAwTWFzaykpOworfQorCit2b2lk
IEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlO
YW1lLCBWZWN0b3I8dW5zaWduZWQ+JiB0cmFpdHNNYXNrcykKK3sKKyAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGZhbWlseU5hbWVTdHIgPSBmYW1pbHlOYW1lLnN0cmluZygpLmNyZWF0ZUNGU3Ry
aW5nKCk7CisgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gQHsgKGlkKWtDVEZvbnRGYW1p
bHlOYW1lQXR0cmlidXRlOiAoTlNTdHJpbmcqKWZhbWlseU5hbWVTdHIuZ2V0KCkgfTsKKyAgICBS
ZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENU
Rm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcygoQ0ZEaWN0aW9uYXJ5UmVmKWF0dHJp
YnV0ZXMpKTsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gbWF0Y2hlZERlc2NyaXB0b3JzID0gYWRv
cHROUygoTlNBcnJheSAqKUNURm9udERlc2NyaXB0b3JDcmVhdGVNYXRjaGluZ0ZvbnREZXNjcmlw
dG9ycyhmb250RGVzY3JpcHRvci5nZXQoKSwgbnVsbHB0cikpOworCisgICAgTlNJbnRlZ2VyIG51
bU1hdGNoZXMgPSBbbWF0Y2hlZERlc2NyaXB0b3JzLmdldCgpIGNvdW50XTsKKyAgICBpZiAoIW1h
dGNoZWREZXNjcmlwdG9ycyB8fCAhbnVtTWF0Y2hlcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
Zm9yIChOU0ludGVnZXIgaSA9IDA7IGkgPCBudW1NYXRjaGVzOyArK2kpIHsKKyAgICAgICAgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4gdHJhaXRzID0gYWRvcHRDRigoQ0ZEaWN0aW9uYXJ5UmVm
KUNURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKChDVEZvbnREZXNjcmlwdG9yUmVmKVttYXRj
aGVkRGVzY3JpcHRvcnMuZ2V0KCkgb2JqZWN0QXRJbmRleDppXSwga0NURm9udFRyYWl0c0F0dHJp
YnV0ZSkpOworICAgICAgICBDRk51bWJlclJlZiByZXN1bHRSZWYgPSAoQ0ZOdW1iZXJSZWYpQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUodHJhaXRzLmdldCgpLCBrQ1RGb250U3ltYm9saWNUcmFpdCk7Cisg
ICAgICAgIGlmIChyZXN1bHRSZWYpIHsKKyAgICAgICAgICAgIENURm9udFN5bWJvbGljVHJhaXRz
IHN5bWJvbGljVHJhaXRzOworICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShyZXN1bHRSZWYs
IGtDRk51bWJlckludFR5cGUsICZzeW1ib2xpY1RyYWl0cyk7CisgICAgICAgICAgICB0cmFpdHNN
YXNrcy5hcHBlbmQodG9UcmFpdHNNYXNrKHN5bWJvbGljVHJhaXRzKSk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK2Zsb2F0IEZvbnRDYWNoZTo6d2VpZ2h0T2ZDVEZvbnQoQ1RGb250UmVmIGZvbnQp
Cit7CisgICAgZmxvYXQgcmVzdWx0ID0gMDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiB0cmFpdHMgPSBhZG9wdENGKENURm9udENvcHlUcmFpdHMoZm9udCkpOworICAgIGlmICghdHJh
aXRzKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgQ0ZOdW1iZXJSZWYgcmVzdWx0UmVm
ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHRyYWl0cy5nZXQoKSwga0NURm9u
dFdlaWdodFRyYWl0KTsKKyAgICBpZiAocmVzdWx0UmVmKQorICAgICAgICBDRk51bWJlckdldFZh
bHVlKHJlc3VsdFJlZiwga0NGTnVtYmVyRmxvYXRUeXBlLCAmcmVzdWx0KTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVEZvbnRSZWYgY3JlYXRlQ1RGb250V2l0aFRleHRTdHls
ZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIENURm9udFN5bWJvbGljVHJhaXRzIHRyYWl0cywg
Q0dGbG9hdCBzaXplKQoreworICAgIGlmIChmYW1pbHlOYW1lLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIENURm9udFN5bWJvbGljVHJhaXRzIHN5bWJvbGljVHJhaXRz
ID0gMDsKKyAgICBpZiAodHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkKKyAgICAgICAgc3ltYm9s
aWNUcmFpdHMgfD0ga0NURm9udEJvbGRUcmFpdDsKKyAgICBpZiAodHJhaXRzICYga0NURm9udFRy
YWl0SXRhbGljKQorICAgICAgICBzeW1ib2xpY1RyYWl0cyB8PSBrQ1RGb250VHJhaXRJdGFsaWM7
CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lU3RyID0gZmFtaWx5TmFtZS5j
cmVhdGVDRlN0cmluZygpOworICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250
RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUo
ZmFtaWx5TmFtZVN0ci5nZXQoKSwgUmVuZGVyVGhlbWVJT1M6OmNvbnRlbnRTaXplQ2F0ZWdvcnko
KSwgbnVsbHB0cikpOworICAgIGlmIChzeW1ib2xpY1RyYWl0cykKKyAgICAgICAgZm9udERlc2Ny
aXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5V2l0aFN5bWJvbGljVHJh
aXRzKGZvbnREZXNjcmlwdG9yLmdldCgpLCBzeW1ib2xpY1RyYWl0cywgc3ltYm9saWNUcmFpdHMp
KTsKKworICAgIHJldHVybiBDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERlc2Ny
aXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpOworfQorCitzdGF0aWMgQ1RGb250UmVmIGNyZWF0
ZUNURm9udFdpdGhGYW1pbHlOYW1lQW5kV2VpZ2h0KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwg
Q1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzLCBmbG9hdCBzaXplLCB1aW50MTZfdCB3ZWlnaHQp
Cit7CisgICAgaWYgKGZhbWlseU5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gc3lzdGVtVUlGb250
V2l0aFdlYktpdFByZWZpeCgiLXdlYmtpdC1zeXN0ZW0tZm9udCIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IHN5c3RlbVVJRm9udFdpdGhBcHBsZVByZWZpeCgiLWFwcGxlLXN5c3RlbS1mb250IiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGZhbWlseU5hbWUsIHN5c3RlbVVJRm9udFdpdGhXZWJLaXRQcmVmaXgpIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKGZhbWlseU5hbWUsIHN5c3RlbVVJRm9udFdpdGhBcHBsZVByZWZpeCkpIHsKKyAg
ICAgICAgQ1RGb250VUlGb250VHlwZSBmb250VHlwZSA9IGtDVEZvbnRVSUZvbnRTeXN0ZW07Cisg
ICAgICAgIGlmICh3ZWlnaHQgPiAzMDApIHsKKyAgICAgICAgICAgIC8vIFRoZSBjb21tZW50IGJl
bG93IGhhcyBiZWVuIGNvcGllZCBmcm9tIENvcmVUZXh0L1VJRm91bmRhdGlvbi4gSG93ZXZlciwg
aW4gV2ViS2l0IHdlIHN5bnRoZXNpemUgdGhlIG9ibGlxdWUsCisgICAgICAgICAgICAvLyBzbyB3
ZSBzaG91bGQgaW52ZXN0aWdhdGUgdGhlIHJlc3VsdCA8cmRhcjovL3Byb2JsZW0vMTQ0NDkzNDA+
OgorICAgICAgICAgICAgLy8gV2UgZG9uJ3QgZG8gYm9sZC1pdGFsaWMgZm9yIHN5c3RlbSBmb250
cy4gSWYgeW91IGFzayBmb3IgaXQsIHdlJ2xsIGFzc3VtZSB0aGF0IHlvdSdyZSBqdXN0IGtpZGRp
bmcgYW5kIHRoYXQgeW91IHJlYWxseSB3YW50IGJvbGQuIFRoaXMgaXMgYSBmZWF0dXJlLgorICAg
ICAgICAgICAgaWYgKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpCisgICAgICAgICAgICAgICAg
Zm9udFR5cGUgPSBrQ1RGb250VUlGb250RW1waGFzaXplZFN5c3RlbTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykKKyAgICAgICAgICAgICAgICBmb250
VHlwZSA9IHN0YXRpY19jYXN0PENURm9udFVJRm9udFR5cGU+KGtDVEZvbnRVSUZvbnRTeXN0ZW1J
dGFsaWMpOworICAgICAgICB9IGVsc2UgaWYgKHdlaWdodCA+IDI1MCkKKyAgICAgICAgICAgIGZv
bnRUeXBlID0gc3RhdGljX2Nhc3Q8Q1RGb250VUlGb250VHlwZT4oa0NURm9udFVJRm9udFN5c3Rl
bUxpZ2h0KTsKKyAgICAgICAgZWxzZSBpZiAod2VpZ2h0ID4gMTUwKQorICAgICAgICAgICAgZm9u
dFR5cGUgPSBzdGF0aWNfY2FzdDxDVEZvbnRVSUZvbnRUeXBlPihrQ1RGb250VUlGb250U3lzdGVt
VGhpbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvbnRUeXBlID0gc3RhdGljX2Nhc3Q8
Q1RGb250VUlGb250VHlwZT4oa0NURm9udFVJRm9udFN5c3RlbVVsdHJhTGlnaHQpOworICAgICAg
ICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENG
KENURm9udERlc2NyaXB0b3JDcmVhdGVGb3JVSVR5cGUoZm9udFR5cGUsIHNpemUsIG51bGxwdHIp
KTsKKyAgICAgICAgcmV0dXJuIENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVz
Y3JpcHRvci5nZXQoKSwgc2l6ZSwgbnVsbHB0cik7CisgICAgfQorCisgICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBmYW1pbHlOYW1lU3RyID0gZmFtaWx5TmFtZS5jcmVhdGVDRlN0cmluZygpOwor
ICAgIENURm9udFN5bWJvbGljVHJhaXRzIHJlcXVlc3RlZFRyYWl0cyA9IChDVEZvbnRTeW1ib2xp
Y1RyYWl0cykodHJhaXRzICYgKGtDVEZvbnRCb2xkVHJhaXQgfCBrQ1RGb250SXRhbGljVHJhaXQp
KTsKKyAgICByZXR1cm4gQ1RGb250Q3JlYXRlRm9yQ1NTKGZhbWlseU5hbWVTdHIuZ2V0KCksIHdl
aWdodCwgcmVxdWVzdGVkVHJhaXRzLCBzaXplKTsKK30KKworc3RhdGljIHVpbnQxNl90IHRvQ1RG
b250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKK3sKKyAgICBzd2l0Y2ggKGZvbnRXZWln
aHQpIHsKKyAgICBjYXNlIEZvbnRXZWlnaHQxMDA6CisgICAgICAgIHJldHVybiAxMDA7CisgICAg
Y2FzZSBGb250V2VpZ2h0MjAwOgorICAgICAgICByZXR1cm4gMjAwOworICAgIGNhc2UgRm9udFdl
aWdodDMwMDoKKyAgICAgICAgcmV0dXJuIDMwMDsKKyAgICBjYXNlIEZvbnRXZWlnaHQ0MDA6Cisg
ICAgICAgIHJldHVybiA0MDA7CisgICAgY2FzZSBGb250V2VpZ2h0NTAwOgorICAgICAgICByZXR1
cm4gNTAwOworICAgIGNhc2UgRm9udFdlaWdodDYwMDoKKyAgICAgICAgcmV0dXJuIDYwMDsKKyAg
ICBjYXNlIEZvbnRXZWlnaHQ3MDA6CisgICAgICAgIHJldHVybiA3MDA7CisgICAgY2FzZSBGb250
V2VpZ2h0ODAwOgorICAgICAgICByZXR1cm4gODAwOworICAgIGNhc2UgRm9udFdlaWdodDkwMDoK
KyAgICAgICAgcmV0dXJuIDkwMDsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gNDAwOwor
ICAgIH0KK30KKworUGFzc093blB0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQoreworICAgIC8vIFNwZWNpYWwgY2FzZSBmb3Ig
IkNvdXJpZXIiIGZvbnQuIFdlIHVzZWQgdG8gaGF2ZSBvbmx5IGFuIG9ibGlxdWUgdmFyaWFudCBv
biBpT1MsIHNvIHByaW9yIHRvCisgICAgLy8gaU9TIDYuMCwgd2UgZGlzYWxsb3dlZCBpdHMgdXNl
IGhlcmUuIFdlJ2xsIGZhbGwgYmFjayBvbiAiQ291cmllciBOZXciLiA8cmRhcjovL3Byb2JsZW0v
NTExNjQ3NyYxMDg1MDIyNz4KKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBjb3VyaWVyKCJDb3VyaWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgc3RhdGljIGJvb2wgc2hvdWxkRGlzYWxsb3dDb3VyaWVyID0gIWlvc0V4ZWN1dGFibGVX
YXNMaW5rZWRPbk9yQWZ0ZXJWZXJzaW9uKHdrSU9TU3lzdGVtVmVyc2lvbl82XzApOworICAgIGlm
IChzaG91bGREaXNhbGxvd0NvdXJpZXIgJiYgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBjb3Vy
aWVyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0
cyB0cmFpdHMgPSAwOworICAgIGlmIChmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCisgICAgICAg
IHRyYWl0cyB8PSBrQ1RGb250VHJhaXRJdGFsaWM7CisgICAgaWYgKGlzRm9udFdlaWdodEJvbGQo
Zm9udERlc2NyaXB0aW9uLndlaWdodCgpKSkKKyAgICAgICAgdHJhaXRzIHw9IGtDVEZvbnRUcmFp
dEJvbGQ7CisgICAgZmxvYXQgc2l6ZSA9IGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6
ZSgpOworCisgICAgUmV0YWluUHRyPENURm9udFJlZj4gY3RGb250OworICAgIGlmIChmYW1pbHku
c3RhcnRzV2l0aCgiVUlDVEZvbnRUZXh0U3R5bGUiKSkKKyAgICAgICAgY3RGb250ID0gYWRvcHRD
RihjcmVhdGVDVEZvbnRXaXRoVGV4dFN0eWxlKGZhbWlseSwgdHJhaXRzLCBzaXplKSk7CisgICAg
ZWxzZQorICAgICAgICBjdEZvbnQgPSBhZG9wdENGKGNyZWF0ZUNURm9udFdpdGhGYW1pbHlOYW1l
QW5kV2VpZ2h0KGZhbWlseSwgdHJhaXRzLCBzaXplLCB0b0NURm9udFdlaWdodChmb250RGVzY3Jp
cHRpb24ud2VpZ2h0KCkpKSk7CisgICAgaWYgKCFjdEZvbnQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgYWN0dWFsVHJhaXRzID0gMDsKKyAgICBp
ZiAoaXNGb250V2VpZ2h0Qm9sZChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkpIHx8IGZvbnREZXNj
cmlwdGlvbi5pdGFsaWMoKSkKKyAgICAgICAgYWN0dWFsVHJhaXRzID0gQ1RGb250R2V0U3ltYm9s
aWNUcmFpdHMoY3RGb250LmdldCgpKTsKKworICAgIGJvb2wgaXNBcHBsZUNvbG9yRW1vamkgPSBD
VEZvbnRJc0FwcGxlQ29sb3JFbW9qaShjdEZvbnQuZ2V0KCkpOworCisgICAgYm9vbCBzeW50aGV0
aWNCb2xkID0gKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpICYmICEoYWN0dWFsVHJhaXRzICYg
a0NURm9udFRyYWl0Qm9sZCkgJiYgIWlzQXBwbGVDb2xvckVtb2ppOworICAgIGJvb2wgc3ludGhl
dGljT2JsaXF1ZSA9ICh0cmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpICYmICEoYWN0dWFsVHJh
aXRzICYga0NURm9udFRyYWl0SXRhbGljKSAmJiAhaXNBcHBsZUNvbG9yRW1vamk7CisKKyAgICBG
b250UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBuZXcgRm9udFBsYXRmb3JtRGF0YShjdEZvbnQuZ2V0
KCksIHNpemUsIGZvbnREZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgpLCBzeW50aGV0aWNCb2xk
LCBzeW50aGV0aWNPYmxpcXVlLCBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwgZm9udERl
c2NyaXB0aW9uLndpZHRoVmFyaWFudCgpKTsKKyAgICBpZiAoaXNBcHBsZUNvbG9yRW1vamkpCisg
ICAgICAgIHJlc3VsdC0+bV9pc0Vtb2ppID0gdHJ1ZTsKKyAgICByZXR1cm4gYWRvcHRQdHIocmVz
dWx0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNjZjhiZGM5NDhmODg2YmRhZTMyYTQ3N2IxMDdhZjJkZWUyYjdkYzAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udFNlcnZpY2VzSU9T
LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBGb250U2VydmljZXNJT1NfaAorI2RlZmluZSBG
b250U2VydmljZXNJT1NfaAorCisjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRTZXJ2aWNlc0lPUyB7CitwdWJsaWM6CisgICAg
Rm9udFNlcnZpY2VzSU9TKENURm9udFJlZik7CisgICAgQ0dGbG9hdCBhc2NlbnQoKSB7IHJldHVy
biBtX2FzY2VudDsgfQorICAgIENHRmxvYXQgZGVzY2VudCgpIHsgcmV0dXJuIG1fZGVzY2VudDsg
fQorICAgIENHRmxvYXQgbGluZUdhcCgpIHsgcmV0dXJuIG1fbGluZUdhcDsgfQorICAgIENHRmxv
YXQgbGluZVNwYWNpbmcoKSB7IHJldHVybiBtX2xpbmVTcGFjaW5nOyB9CisgICAgQ0dGbG9hdCB4
SGVpZ2h0KCkgeyByZXR1cm4gbV94SGVpZ2h0OyB9CisgICAgdW5zaWduZWQgdW5pdHNQZXJFbSgp
IHsgcmV0dXJuIG1fdW5pdHNQZXJFbTsgfQorCitwcml2YXRlOgorICAgIENHRmxvYXQgbV9hc2Nl
bnQ7CisgICAgQ0dGbG9hdCBtX2Rlc2NlbnQ7CisgICAgQ0dGbG9hdCBtX2xpbmVHYXA7CisgICAg
Q0dGbG9hdCBtX2xpbmVTcGFjaW5nOworICAgIENHRmxvYXQgbV94SGVpZ2h0OworICAgIHVuc2ln
bmVkIG1fdW5pdHNQZXJFbTsKK307CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJT1MubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzIyMmI1MjUxY2VhOWMxZWFhNDcwZDYxYWM2NGQ0OTU2MjViMGYxMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJ
T1MubW0KQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJG
b250U2VydmljZXNJT1MuaCIKKworI2ltcG9ydCAiRm9udE1ldHJpY3MuaCIKKyNpbXBvcnQgPENv
cmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3NQcml2YXRlLmg+CisjaW1wb3J0IDxtYWNoLW8vZHlsZF9wcml2Lmg+CisjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGZs
b2F0IGtMaW5lSGVpZ2h0QWRqdXN0bWVudCA9IDAuMTVmOworCitzdGF0aWMgYm9vbCBzaG91bGRV
c2VBZGp1c3RtZW50KENURm9udFJlZiBmb250LCBib29sIGlzaU9TN09yTGF0ZXIpCit7CisgICAg
UmV0YWluUHRyPE5TU3RyaW5nPiBmYW1pbHlOYW1lID0gYWRvcHROUygoTlNTdHJpbmcgKilDVEZv
bnRDb3B5RmFtaWx5TmFtZShmb250KSk7CisgICAgaWYgKCFbZmFtaWx5TmFtZSBsZW5ndGhdKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoW2ZhbWlseU5hbWUuZ2V0KCkgY29tcGFy
ZTpAIlRpbWVzIiBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSA9PSBOU09yZGVyZWRT
YW1lCisgICAgICAgIHx8IFtmYW1pbHlOYW1lLmdldCgpIGNvbXBhcmU6QCJIZWx2ZXRpY2EiIG9w
dGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdID09IE5TT3JkZXJlZFNhbWUKKyAgICAgICAg
fHwgW2ZhbWlseU5hbWUuZ2V0KCkgY29tcGFyZTpAIi5IZWx2ZXRpY2EgTmV1ZVVJIiBvcHRpb25z
Ok5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSA9PSBOU09yZGVyZWRTYW1lKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAoIWlzaU9TN09yTGF0ZXIgJiYgW2ZhbWlseU5hbWUuZ2V0KCkgY29t
cGFyZTpAIi5IZWx2ZXRpY2EgTmV1ZVVJTGVnYWN5IiBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZl
U2VhcmNoXSA9PSBOU09yZGVyZWRTYW1lKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXNDb3VyaWVyKENURm9udFJlZiBmb250KQor
eworICAgIFJldGFpblB0cjxOU1N0cmluZz4gZmFtaWx5TmFtZSA9IGFkb3B0TlMoKE5TU3RyaW5n
ICopQ1RGb250Q29weUZhbWlseU5hbWUoZm9udCkpOworICAgIGlmICghW2ZhbWlseU5hbWUgbGVu
Z3RoXSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbZmFtaWx5TmFtZS5nZXQo
KSBjb21wYXJlOkAiQ291cmllciIgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0gPT0g
TlNPcmRlcmVkU2FtZTsKK30KKworRm9udFNlcnZpY2VzSU9TOjpGb250U2VydmljZXNJT1MoQ1RG
b250UmVmIGZvbnQpCit7CisgICAgQ0dGb250RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgIFJl
dGFpblB0cjxDR0ZvbnRSZWY+IGNnRm9udCA9IGFkb3B0Q0YoQ1RGb250Q29weUdyYXBoaWNzRm9u
dChmb250LCBOVUxMKSk7CisgICAgbV94SGVpZ2h0ID0gQ0dGb250R2V0RGVzY3JpcHRvcihjZ0Zv
bnQuZ2V0KCksICZkZXNjcmlwdG9yKSA/IChkZXNjcmlwdG9yLnhIZWlnaHQgLyAxMDAwKSAqIENU
Rm9udEdldFNpemUoZm9udCkgOiAwOworICAgIG1fdW5pdHNQZXJFbSA9IENURm9udEdldFVuaXRz
UGVyRW0oZm9udCk7CisgICAgQ0dGbG9hdCBsaW5lR2FwOworICAgIENHRmxvYXQgYXNjZW50Owor
ICAgIENHRmxvYXQgZGVzY2VudDsKKyAgICBzdGF0aWMgYm9vbCBpc2lPUzdPckxhdGVyID0gZHls
ZF9nZXRfcHJvZ3JhbV9zZGtfdmVyc2lvbigpID49IERZTERfSU9TX1ZFUlNJT05fN18wOworICAg
IGlmIChpc2lPUzdPckxhdGVyKSB7CisgICAgICAgIC8vIFVzZSBDb3JlVGV4dCBBUEkgaW4gaU9T
IDcuCisgICAgICAgIGFzY2VudCA9IENURm9udEdldEFzY2VudChmb250KTsKKyAgICAgICAgZGVz
Y2VudCA9IENURm9udEdldERlc2NlbnQoZm9udCk7CisgICAgICAgIGxpbmVHYXAgPSBDVEZvbnRH
ZXRMZWFkaW5nKGZvbnQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZsb2F0IHBvaW50U2l6ZSA9
IENURm9udEdldFNpemUoZm9udCk7CisgICAgICAgIGNvbnN0IENHRm9udEhNZXRyaWNzICptZXRy
aWNzID0gQ0dGb250R2V0SE1ldHJpY3MoY2dGb250LmdldCgpKTsKKyAgICAgICAgdW5zaWduZWQg
dW5pdHNQZXJFbSA9IENHRm9udEdldFVuaXRzUGVyRW0oY2dGb250LmdldCgpKTsKKworICAgICAg
ICBsaW5lR2FwID0gKGR5bGRfZ2V0X3Byb2dyYW1fc2RrX3ZlcnNpb24oKSA+PSBEWUxEX0lPU19W
RVJTSU9OXzNfMCkgPyBzY2FsZUVtVG9Vbml0cyhtZXRyaWNzLT5saW5lR2FwLCB1bml0c1BlckVt
KSAqIHBvaW50U2l6ZSA6IDAuMDsKKworICAgICAgICBib29sIGlzaU9TNk9yTGF0ZXIgPSBkeWxk
X2dldF9wcm9ncmFtX3Nka192ZXJzaW9uKCkgPj0gRFlMRF9JT1NfVkVSU0lPTl82XzA7CisgICAg
ICAgIGlmICghaXNpT1M2T3JMYXRlciB8fCAhaXNDb3VyaWVyKGZvbnQpKSB7CisgICAgICAgICAg
ICBhc2NlbnQgPSAoc2NhbGVFbVRvVW5pdHMobWV0cmljcy0+YXNjZW50LCB1bml0c1BlckVtKSAq
IHBvaW50U2l6ZSk7CisgICAgICAgICAgICBkZXNjZW50ID0gKC1zY2FsZUVtVG9Vbml0cyhtZXRy
aWNzLT5kZXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBGb3IgQ291cmllciwgd2UgdXNlIENvdXJpZXIgTmV3J3MgZXhhY3Qg
dmFsdWVzLCBiZWNhdXNlIGluIGlPUyA1LjEgYW5kIGVhcmxpZXIsCisgICAgICAgICAgICAvLyBD
b3VyaWVyIE5ldyB3YXMgc3Vic3RpdHV0ZWQgZm9yIENvdXJpZXIgYnkgV2ViS2l0LgorICAgICAg
ICAgICAgYXNjZW50ID0gKHNjYWxlRW1Ub1VuaXRzKDE3MDUsIDIwNDgpICogcG9pbnRTaXplKTsK
KyAgICAgICAgICAgIGRlc2NlbnQgPSAoc2NhbGVFbVRvVW5pdHMoNjE1LCAyMDQ4KSAqIHBvaW50
U2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgQ0dGbG9hdCBhZGp1c3RtZW50ID0gKHNob3Vs
ZFVzZUFkanVzdG1lbnQoZm9udCwgaXNpT1M3T3JMYXRlcikpID8gY2VpbCgoYXNjZW50ICsgZGVz
Y2VudCkgKiBrTGluZUhlaWdodEFkanVzdG1lbnQpIDogMDsKKworICAgIG1fYXNjZW50ID0gYXNj
ZW50ICsgYWRqdXN0bWVudDsKKyAgICBtX2Rlc2NlbnQgPSBkZXNjZW50OworICAgIG1fbGluZUdh
cCA9IGNlaWxmKGxpbmVHYXApOworICAgIG1fbGluZVNwYWNpbmcgPSBjZWlsKGFzY2VudCkgKyBh
ZGp1c3RtZW50ICsgY2VpbChkZXNjZW50KSArIG1fbGluZUdhcDsKK30KKworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvR3JhcGhpY3NDb250ZXh0M0RJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9HcmFwaGljc0NvbnRleHQzRElPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzM2JhMDlkNTk5
YzhmODVkNDUwZWRmZmZmYjI5M2QxYjc1YjQ2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvR3JhcGhpY3NDb250ZXh0M0RJT1MuaApAQCAt
MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRElPU19oCisj
ZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNESU9TX2gKKworI2RlZmluZSBnbEJpbmRGcmFtZWJ1ZmZl
ckVYVCBnbEJpbmRGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbEJpbmRSZW5kZXJidWZmZXJFWFQgZ2xC
aW5kUmVuZGVyYnVmZmVyCisjZGVmaW5lIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCBnbENo
ZWNrRnJhbWVidWZmZXJTdGF0dXMKKyNkZWZpbmUgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQgZ2xE
ZWxldGVGcmFtZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUIGdsRGVs
ZXRlUmVuZGVyYnVmZmVycworI2RlZmluZSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUIGds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVY
VCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJECisjZGVmaW5lIGdsR2VuZXJhdGVNaXBtYXBFWFQgZ2xH
ZW5lcmF0ZU1pcG1hcAorI2RlZmluZSBnbEdlbkZyYW1lYnVmZmVyc0VYVCBnbEdlbkZyYW1lYnVm
ZmVycworI2RlZmluZSBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQgZ2xHZW5SZW5kZXJidWZmZXJzCisj
ZGVmaW5lIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQgZ2xHZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdgorI2RlZmluZSBnbEdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlcml2RVhUIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYKKyNkZWZpbmUgZ2xJc0Zy
YW1lYnVmZmVyRVhUIGdsSXNGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbElzUmVuZGVyYnVmZmVyRVhU
IGdsSXNSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUIGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZQorI2RlZmluZSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUVYVCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFQUExFCisKKyNkZWZpbmUgR0xf
Q09MT1JfQVRUQUNITUVOVDBfRVhUIEdMX0NPTE9SX0FUVEFDSE1FTlQwCisjZGVmaW5lIEdMX0RF
UFRIMjRfU1RFTkNJTDhfRVhUIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTCisjZGVmaW5lIEdMX0RF
UFRIX0FUVEFDSE1FTlRfRVhUICBHTF9ERVBUSF9BVFRBQ0hNRU5UCisjZGVmaW5lIEdMX0RSQVdf
RlJBTUVCVUZGRVJfRVhUIEdMX0RSQVdfRlJBTUVCVUZGRVJfQVBQTEUKKyNkZWZpbmUgR0xfRlJB
TUVCVUZGRVJfQ09NUExFVEVfRVhUIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFCisjZGVmaW5lIEdM
X0ZSQU1FQlVGRkVSX0VYVCBHTF9GUkFNRUJVRkZFUgorI2RlZmluZSBHTF9NQVhfU0FNUExFU19F
WFQgR0xfTUFYX1NBTVBMRVNfQVBQTEUKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQg
R0xfUkVBRF9GUkFNRUJVRkZFUl9BUFBMRQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfRVhUIEdM
X1JFTkRFUkJVRkZFUgorI2lmbmRlZiBHTF9SR0I4CisjZGVmaW5lIEdMX1JHQjggR0xfUkdCCisj
ZW5kaWYKKyNpZm5kZWYgR0xfUkdCQTgKKyNkZWZpbmUgR0xfUkdCQTggR0xfUkdCQQorI2VuZGlm
CisjZGVmaW5lIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViBHTF9SR0JBCisKKyNlbmRpZiAv
LyBHcmFwaGljc0NvbnRleHQzRElPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9JY29uSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljNzI4ZWRiZmJkNzE1YThiZGZkYmVj
ZjcyMzA0ODgxNDZjODQ3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJJY29uLmgiCisKKyNpbXBvcnQgIkJpdG1hcEltYWdlLmgiCisjaW1wb3J0ICJHcmFw
aGljc0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorSWNvbjo6SWNvbihD
R0ltYWdlUmVmIGltYWdlKQorICAgIDogbV9jZ0ltYWdlKGltYWdlKQoreworfQorCitJY29uOjp+
SWNvbigpCit7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiAvKmZpbGVuYW1lcyovKQoreworICAgIHJldHVybiBudWxs
cHRyOworfQorCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JJbWFnZShOYXRp
dmVJbWFnZVB0ciBpbWFnZVJlZikKK3sKKyAgICBpZiAoIWltYWdlUmVmKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWNvbihpbWFnZVJlZikpOwor
fQorCit2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpCit7CisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpjb250ZXh0KTsKKworICAgIGZsb2F0IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKG1fY2dJ
bWFnZS5nZXQoKSk7CisgICAgZmxvYXQgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChtX2NnSW1h
Z2UuZ2V0KCkpOworICAgIEZsb2F0U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQpOworICAgIEZsb2F0
UmVjdCBzcmNSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgIENvbG9yU3BhY2UgY29sb3JT
cGFjZSA9IENvbG9yU3BhY2VEZXZpY2VSR0I7CisKKyAgICBjb250ZXh0LT5zZXRJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25IaWdoKTsKKyAgICBjb250ZXh0LT5kcmF3TmF0
aXZlSW1hZ2UobV9jZ0ltYWdlLmdldCgpLCBzaXplLCBjb2xvclNwYWNlLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgMS4wZiwgQ29tcG9zaXRlU291cmNlT3ZlciwgQmxlbmRNb2RlTm9ybWFsLCBEZWZhdWx0
SW1hZ2VPcmllbnRhdGlvbik7Cit9CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1YmU3M2NlOWEx
Y2ZkNDZhMzJlNTVlYTdkNzU1ZjQ5ZmUzYzAxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklP
Uy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluYmFuZFRleHRUcmFja1By
aXZhdGVBVkZJT1NfaAorI2RlZmluZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TX2gKKwor
I2lmIEVOQUJMRShWSURFTykgJiYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRi5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TIDogcHVi
bGljIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M+IGNyZWF0ZShBVkZJbmJhbmRUcmFj
a1BhcmVudCogcGFyZW50LCBpbnQgaW50ZXJuYWxJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MocGFyZW50LCBp
bnRlcm5hbElELCBuYW1lLCBsYW5ndWFnZSwgdHlwZSkpOworICAgIH0KKworICAgIH5JbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGSU9TKCk7CisKKyAgICB2aXJ0dWFsIEluYmFuZFRleHRUcmFja1By
aXZhdGU6OktpbmQga2luZCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgQXRvbWljU3Ry
aW5nIGxhYmVsKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgdmlydHVh
bCBBdG9taWNTdHJpbmcgbGFuZ3VhZ2UoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2xhbmd1
YWdlOyB9CisgICAgdmlydHVhbCBib29sIGlzTGVnYWN5Q2xvc2VkQ2FwdGlvbnNUcmFjaygpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgaW50IGludGVybmFsSUQoKSBjb25z
dCB7IHJldHVybiBtX2ludGVybmFsSUQ7IH0KKworcHJvdGVjdGVkOgorICAgIEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkZJT1MoQVZGSW5iYW5kVHJhY2tQYXJlbnQqLCBpbnQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSwgY29uc3QgU3RyaW5nJiB0eXBlKTsKKwor
ICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fbGFuZ3VhZ2U7CisgICAgU3RyaW5nIG1f
dHlwZTsKKyAgICBpbnQgbV9pbnRlcm5hbElEOworfTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShW
SURFTykgJiYgUExBVEZPUk0oSU9TKQorI2VuZGlmIC8vIEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9z
L0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9pb3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lM2FmYjI4MDAwOGE0OThlNDNkZjZlNWE3N2VkZjllM2I0OTczNDBkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0luYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkZJT1MubW0KQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQg
IkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaCIKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRp
b25zLmgiCisjaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbXBvcnQgIkluYmFuZFRleHRU
cmFja1ByaXZhdGUuaCIKKyNpbXBvcnQgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaCIKKyNp
bXBvcnQgIkxvZ2dpbmcuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUzo6SW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRklPUyhBVkZJbmJhbmRUcmFja1BhcmVudCogcGFyZW50LCBpbnQgaW50ZXJu
YWxJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBT
dHJpbmcmIHR5cGUpCisgICAgOiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKHBhcmVudCkKKyAg
ICAsIG1fbmFtZShuYW1lKQorICAgICwgbV9sYW5ndWFnZShsYW5ndWFnZSkKKyAgICAsIG1fdHlw
ZSh0eXBlKQorICAgICwgbV9pbnRlcm5hbElEKGludGVybmFsSUQpCit7Cit9CisKK0luYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkZJT1M6On5JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKCkKK3sK
K30KKworSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6S2luZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TOjpraW5kKCkgY29uc3QKK3sKKyAgICBpZiAoW21fdHlwZSBpc0VxdWFsVG9TdHJpbmc6
QCJjYXB0aW9ucyJdKQorICAgICAgICByZXR1cm4gQ2FwdGlvbnM7CisgICAgaWYgKFttX3R5cGUg
aXNFcXVhbFRvU3RyaW5nOkAic3VidGl0bGVzIl0pCisgICAgICAgIHJldHVybiBTdWJ0aXRsZXM7
CisKKyAgICByZXR1cm4gQ2FwdGlvbnM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
TWVkaWFQbGF5ZXJQcml2YXRlSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvTWVkaWFQbGF5ZXJQcml2YXRlSU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJhYzI1NzhjODY0ZWQx
ZGQ0MzFmNmQxMDYxYjU4OWI3YjI3MGUzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9NZWRpYVBsYXllclByaXZhdGVJT1MuaApAQCAtMCww
ICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTWVk
aWFQbGF5ZXJQcml2YXRlSU9TX2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlSU9TX2gKKwor
I2lmIEVOQUJMRShWSURFTykgJiYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRi5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAi
TWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcm94eS5oIgorI2lu
Y2x1ZGUgPG9iamMvcnVudGltZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsKK09CSkNf
Q0xBU1MgTlNNdXRhYmxlRGljdGlvbmFyeTsKK09CSkNfQ0xBU1MgTlNOdW1iZXI7CitPQkpDX0NM
QVNTIE5TT2JqZWN0OworT0JKQ19DTEFTUyBXZWJDb3JlTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25I
ZWxwZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRklPUzsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlSU9TIDogcHVibGljIE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSwgcHVibGljIEFWRkluYmFuZFRyYWNrUGFyZW50IHsKK3B1
YmxpYzoKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVS
ZWdpc3RyYXIpOworICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyUHJpdmF0ZUlPUygpOworCisgICAg
dmlydHVhbCB2b2lkIGRlbGl2ZXJOb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcm94eU5vdGlmaWNh
dGlvblR5cGUpIE9WRVJSSURFOworICAgIGJvb2wgY2FsbGJhY2tzRGVsYXllZCgpIHsgcmV0dXJu
IG1fZGVsYXlDYWxsYmFja3MgPiAwOyB9CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1BsYXko
KSBPVkVSUklERTsKKyAgICB2b2lkIHByb2Nlc3NEZWZlcnJlZFJlcXVlc3RzKCk7CisKKyNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCisgICAgdm9pZCBpbmJhbmRUZXh0VHJhY2tzQ2hhbmdlZChOU0Fy
cmF5ICopOworICAgIHZvaWQgcHJvY2Vzc0luYmFuZFRleHRUcmFja0N1ZShOU0FycmF5ICosIGRv
dWJsZSk7CisgICAgdm9pZCB0ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5UGx1Z2luKE5TRGljdGlvbmFy
eSAqKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIE1lZGlhUGxheWVyUHJpdmF0ZUlPUyhNZWRp
YVBsYXllciopOworCisgICAgLy8gRW5naW5lIHN1cHBvcnQKKyAgICBzdGF0aWMgUGFzc093blB0
cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IGNyZWF0ZShNZWRpYVBsYXllciopOworICAg
IHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpOwor
ICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBN
ZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFi
bGUoKTsKKworICAgIHZpcnR1YWwgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgYm9vbCBoYXNBdWRpbygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0Z1bGxzY3JlZW4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgY2FuTG9hZFBvc3RlcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zdGVyKGNvbnN0IFN0cmluZyYgdXJsKSBPVkVSUklE
RTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250cm9scyhib29sKSBPVkVSUklERTsKKworICAg
IHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW4oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhpdEZ1bGxzY3JlZW4oKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNDbG9z
ZWRDYXB0aW9ucygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDbG9zZWRD
YXB0aW9uc1Zpc2libGUoYm9vbCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChj
b25zdCBTdHJpbmcmIHVybCkgT1ZFUlJJREU7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPEhUTUxNZWRpYVNv
dXJjZT4pIE9WRVJSSURFIHsgfQorI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGNhbmNlbExvYWQo
KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHBhdXNlKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGF1c2VkKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25zdCBPVkVSUklE
RTsKKworICAgIHZpcnR1YWwgZmxvYXQgZHVyYXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2VlayhmbG9hdCB0aW1lKSBPVkVSUklERTsKKyAgICB2b2lkIHNldEVuZFRpbWUoZmxv
YXQpOworCisgICAgZmxvYXQgcmF0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRl
KGZsb2F0IGluUmF0ZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBmbG9hdCB2b2x1bWUoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vm9sdW1lKGZsb2F0IGluVm9sdW1lKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoYm9vbCBpbk11dGUpIE9WRVJSSURF
OworCisgICAgaW50IGRhdGFSYXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgCisgICAgZmxvYXQgbWF4VGltZUJ1ZmZlcmVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9h
dCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
Ym9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdCBPVkVSUklERTsKKyAgICBib29sIHRvdGFs
Qnl0ZXNLbm93bigpIGNvbnN0OworICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOwor
CisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQorICAgIHZpcnR1YWwgYm9vbCBpc0N1cnJlbnRQbGF5
YmFja1RhcmdldFdpcmVsZXNzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcigpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIGhh
c1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoYm9vbCkgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxp
dHlMaXN0ZW5lcnMoYm9vbCkgT1ZFUlJJREU7CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRl
cmluZygpIGNvbnN0IE9WRVJSSURFOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWVk
aWFQbGF5ZXJQcm94eShXZWJNZWRpYVBsYXllclByb3h5KikgT1ZFUlJJREU7CisgICAgdm9pZCBw
cm9jZXNzUGVuZGluZ1JlcXVlc3RzKCk7CisKKyAgICB2b2lkIHNldERlbGF5Q2FsbGJhY2tzKGJv
b2wgZG9EZWxheSkgeyBtX2RlbGF5Q2FsbGJhY2tzICs9IChkb0RlbGF5ID8gMSA6IC0xKTsgfQor
CisgICAgYm9vbCB1c2luZ05ldHdvcmsoKSBjb25zdCB7IHJldHVybiBtX3VzaW5nTmV0d29yazsg
fQorICAgIGJvb2wgaW5GdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9pbkZ1bGxTY3JlZW47
IH0KKworICAgIHZvaWQgYWRkRGVmZXJyZWRSZXF1ZXN0KE5TU3RyaW5nICpuYW1lLCBpZCB2YWx1
ZSk7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IHsgU3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgiaU9TIikpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRl
Q2hhbmdlZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCByZWFkeUZvclBsYXliYWNrKCkgY29uc3QgT1ZFUlJJREU7CisK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzVGV4dFRy
YWNrUmVwcmVzZW50YXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dFRyYWNr
UmVwcmVzZW50YXRpb24oVGV4dFRyYWNrUmVwcmVzZW50YXRpb24qKTsKKworICAgIHZvaWQgY2xl
YXJUZXh0VHJhY2tzKCk7CisgICAgdm9pZCBzZXRTZWxlY3RlZFRleHRUcmFjayhOU051bWJlciAq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhY2tNb2RlQ2hhbmdlZCgpIE9WRVJSSURFOworICAgIHZv
aWQgc2V0T3V0T2ZCYW5kVGV4dFRyYWNrcyhOU0FycmF5ICopOworCisgICAgdmlydHVhbCBib29s
IGltcGxlbWVudHNUZXh0VHJhY2tDb250cm9scygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlPiB0ZXh0
VHJhY2tNZW51KCk7CisKKyAgICB2b2lkIG91dE9mQmFuZFRleHRUcmFja3NDaGFuZ2VkKCk7Cisg
ICAgdm9pZCB0ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5TWVkaWFFbGVtZW50KFBhc3NSZWZQdHI8UGxh
dGZvcm1UZXh0VHJhY2s+KTsKKyNlbmRpZgorCitwcml2YXRlOgorCisgICAgY2xhc3MgUGxhdGZv
cm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlSU9TIDogcHVibGljIFBsYXRmb3JtVGV4dFRyYWNrTWVu
dUludGVyZmFjZSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0
Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1M+IGNyZWF0ZShNZWRpYVBsYXllclByaXZhdGVJ
T1MqIG93bmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBs
YXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUyhvd25lcikpOworICAgICAgICB9CisKKyAg
ICAgICAgdmlydHVhbCB+UGxhdGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlSU9TKCk7CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHRyYWNrc0RpZENoYW5nZSgpIE9WRVJSSURFCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX293bmVyKQorICAgICAgICAgICAgICAgIG1fb3duZXItPm91dE9m
QmFuZFRleHRUcmFja3NDaGFuZ2VkKCk7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZv
aWQgdHJhY2tXYXNTZWxlY3RlZChQYXNzUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiB0cmFjaykg
T1ZFUlJJREUKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fb3duZXIpCisgICAgICAgICAg
ICAgICAgbV9vd25lci0+dGV4dFRyYWNrV2FzU2VsZWN0ZWRCeU1lZGlhRWxlbWVudCh0cmFjayk7
CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KFBsYXRmb3JtVGV4
dFRyYWNrTWVudUNsaWVudCogY2xpZW50KSBPVkVSUklERSB7IG1fY2xpZW50ID0gY2xpZW50OyB9
CisgICAgICAgIFBsYXRmb3JtVGV4dFRyYWNrTWVudUNsaWVudCogY2xpZW50KCkgeyByZXR1cm4g
bV9jbGllbnQ7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFBsYXRmb3JtVGV4dFRyYWNrTWVu
dUludGVyZmFjZUlPUyhNZWRpYVBsYXllclByaXZhdGVJT1MqKTsKKworICAgICAgICBQbGF0Zm9y
bVRleHRUcmFja01lbnVDbGllbnQqIG1fY2xpZW50OworICAgICAgICBNZWRpYVBsYXllclByaXZh
dGVJT1MqIG1fb3duZXI7CisgICAgfTsKKworICAgIE1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVy
OworICAgIFJldGFpblB0cjxOU09iamVjdD4gbV9tZWRpYVBsYXllckhlbHBlcjsgLy8gVGhpcyBp
cyB0aGUgTWVkaWFQbGF5ZXJQcm94eS4KKyAgICBSZXRhaW5QdHI8V2ViQ29yZU1lZGlhUGxheWVy
Tm90aWZpY2F0aW9uSGVscGVyPiBtX29iamNIZWxwZXI7CisgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZURpY3Rpb25hcnk+IG1fZGVmZXJyZWRQcm9wZXJ0aWVzOworCisgICAgTWVkaWFQbGF5ZXI6Ok5l
dHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBt
X3JlYWR5U3RhdGU7CisKKyAgICBlbnVtIEJ1ZmZlcmluZ1N0YXRlIHsgRW1wdHksIFVubGlrZWxl
eVRvS2VlcFVwLCBMaWtlbGV5VG9LZWVwVXAsIEZ1bGwgfTsKKworI2lmIEVOQUJMRShWSURFT19U
UkFDSykKKyAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKiBtX2N1cnJlbnRUcmFjazsK
KyAgICBWZWN0b3I8UmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M+ID4gbV90ZXh0
VHJhY2tzOworICAgIFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1M+IG1f
bWVudUludGVyZmFjZTsKKyNlbmRpZgorCisgICAgaW50IG1fZGVsYXlDYWxsYmFja3M7CisgICAg
aW50IG1fY2hhbmdpbmdWb2x1bWU7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2J5dGVzTG9hZGVk
QXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzOworICAgIGZsb2F0IG1fcmVxdWVzdGVkUmF0ZTsKKyAg
ICBCdWZmZXJpbmdTdGF0ZSBtX2J1ZmZlcmluZ1N0YXRlOworICAgIGJvb2wgbV92aXNpYmxlIDog
MTsKKyAgICBib29sIG1fdXNpbmdOZXR3b3JrIDogMTsKKyAgICBib29sIG1faW5GdWxsU2NyZWVu
IDogMTsKKyAgICBib29sIG1fc2hvdWxkUHJlcGFyZVRvUGxheSA6IDE7CisgICAgYm9vbCBtX3By
ZXBhcmluZ1RvUGxheSA6IDE7CisgICAgYm9vbCBtX3BhdXNlUmVxdWVzdGVkIDogMTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYgLy8gTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvTWVkaWFQbGF5ZXJQcml2YXRlSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL01lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZWVhNzI3OWRh
ZWNmMDFjZDA5MTFlMTFlNTA0N2M0OTAxOGRkNjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL01lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbQpA
QCAtMCwwICsxLDEyNjMgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAx
MSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShJT1MpCisK
KyNpbXBvcnQgIk1lZGlhUGxheWVyUHJpdmF0ZUlPUy5oIgorCisjaW1wb3J0ICJHcmFwaGljc0xh
eWVyQ0EuaCIKKyNpbXBvcnQgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaCIKKyNpbXBv
cnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtVGV4dFRyYWNrLmgiCisjaW1wb3J0ICJU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5oIgorI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9y
dCAiVVJMLmgiCisjaW1wb3J0ICJXQUtBcHBLaXRTdHVicy5oIgorI2ltcG9ydCAiV2ViQ29yZVRo
cmVhZFJ1bi5oIgorI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2ltcG9y
dCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworQGludGVy
ZmFjZSBXZWJDb3JlTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25IZWxwZXIgOiBOU09iamVjdAorewor
ICAgIE1lZGlhUGxheWVyUHJpdmF0ZUlPUyogX2NsaWVudDsKKyAgICBCT09MIF9kZWZlcnJlZFBy
b3BlcnRpZXNTY2hlZHVsZWQ7Cit9CistIChpZClpbml0V2l0aENsaWVudDooTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TICopY2xpZW50OworLSAodm9pZClkaXNjb25uZWN0OworLSAodm9pZCljYW5jZWxQ
ZW5kaW5nUmVxdWVzdHM7CistICh2b2lkKWRlbGF5Tm90aWZpY2F0aW9uOihpbnQpbm90aWZpY2F0
aW9uOworLSAodm9pZClkZWxpdmVyTm90aWZpY2F0aW9uOihOU051bWJlciAqKW5vdGlmaWNhdGlv
bjsKKy0gKHZvaWQpc2NoZWR1bGVQcmVwYXJlVG9QbGF5V2l0aE9wdGlvbmFsRGVsYXk6KE5TTnVt
YmVyICopc2hvdWxkRGVsYXk7CistICh2b2lkKXNjaGVkdWxlRGVmZXJyZWRQcm9wZXJ0aWVzV2l0
aE9wdGlvbmFsRGVsYXk6KE5TTnVtYmVyICopc2hvdWxkRGVsYXk7CisKKy0gKHZvaWQpcGx1Z2lu
RWxlbWVudEluQmFuZEFsdGVybmF0ZVRleHRUcmFja3NEaWRDaGFuZ2U6KE5TQXJyYXkgKil0cmFj
a3M7CistICh2b2lkKXBsdWdpbkVsZW1lbnREaWRTZWxlY3RUZXh0VHJhY2s6KE5TU3RyaW5nICop
dHJhY2tJZDsKKy0gKHZvaWQpcGx1Z2luRWxlbWVudERpZE91dHB1dEF0dHJpYnV0ZWRTdHJpbmdz
OihOU0FycmF5ICopc3RyaW5ncyBuYXRpdmVTYW1wbGVCdWZmZXJzOihOU0FycmF5ICopYnVmZmVy
cyBmb3JUaW1lOihOU1RpbWVJbnRlcnZhbCl0aW1lOworQGVuZAorCisvLyBQcml2YXRlIHNlbGVj
dG9ycyBpbXBsZW1lbnRlZCBieSB0aGUgbWVkaWEgcGxheWVyIHByb3h5IG9iamVjdCByZXR1cm5l
ZCBieSB0aGUgcGx1Zy1pbi4KK0BpbnRlcmZhY2UgTlNPYmplY3QgKFdlYk1lZGlhUGxheWVyUHJv
eHlfRXh0cmFzKQorLSAodm9pZClfYXR0cmlidXRlQ2hhbmdlZDooTlNTdHJpbmcgKiluYW1lIHZh
bHVlOihOU1N0cmluZyAqKXZhbHVlOworLSAoQk9PTClfcmVhZHlGb3JQbGF5YmFjazsKK0BlbmQK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBpbnQga1JlcXVpcmVkSGVscGVySW50ZXJm
YWNlVmVyc2lvbiA9IDE7CisKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IERlZmVycmVkUHJvcGVy
dHlDb250cm9sc0tleSA9IEAiY29udHJvbHMiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgRGVm
ZXJyZWRQcm9wZXJ0eVBvc3RlcktleSA9IEAicG9zdGVyIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNv
bnN0IERlZmVycmVkUHJvcGVydHlTcmNLZXkgPSBAInNyYyI7CitzdGF0aWMgTlNTdHJpbmcgKiBj
b25zdCBEZWZlcnJlZFBsYXlLZXkgPSBAInBsYXkiOworc3RhdGljIE5TU3RyaW5nICogY29uc3Qg
RGVmZXJyZWRQcm9wZXJ0eVNlbGVjdGVkVHJhY2tLZXkgPSBAInNlbGVjdGVkdHJhY2siOworc3Rh
dGljIE5TU3RyaW5nICogY29uc3QgRGVmZXJyZWRQcm9wZXJ0eU91dE9mQmFuZFRyYWNrc0tleSA9
IEAib3V0b2ZiYW5kdHJhY2tzIjsKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCitzdGF0aWMgTlNT
dHJpbmcgKiBjb25zdCBEZWZlcnJlZFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkID0gQCJ3
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCI7CisjZW5kaWYKKworc3RhdGljIE5TU3RyaW5n
ICogY29uc3QgVGV4dFRyYWNrRGlzcGxheU5hbWVLZXkgPSBAImRpc3BsYXluYW1lIjsKK3N0YXRp
YyBOU1N0cmluZyAqIGNvbnN0IFRleHRUcmFja0xvY2FsZUlkZW50aWZpZXJLZXkgPSBAImxvY2Fs
ZWlkZW50aWZpZXIiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgVGV4dFRyYWNrU3VidGl0bGVz
S2V5ID0gQCJzdWJ0aXRsZXMiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgVGV4dFRyYWNrQ2Fw
dGlvbnNLZXkgPSBAImNhcHRpb25zIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFRleHRUcmFj
a1R5cGVLZXkgPSBAInR5cGUiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgVGV4dFRyYWNrSURL
ZXkgPSBAImlkIjsKKworY29uc3QgaW50IFRleHRUcmFja09mZk1lbnVJdGVtSUQgPSAtMTsKK2Nv
bnN0IGludCBUZXh0VHJhY2tBdXRvTWVudUl0ZW1JRCA9IC0yOworCitNZWRpYVBsYXllclByaXZh
dGVJT1M6OlBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUzo6UGxhdGZvcm1UZXh0VHJh
Y2tNZW51SW50ZXJmYWNlSU9TKE1lZGlhUGxheWVyUHJpdmF0ZUlPUyogb3duZXIpCisgICAgOiBt
X2NsaWVudChudWxscHRyKQorICAgICwgbV9vd25lcihvd25lcikKK3sKK30KKyAgICAgICAgCitN
ZWRpYVBsYXllclByaXZhdGVJT1M6OlBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUzo6
flBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUygpCit7CisgICAgbV9vd25lciA9IG51
bGxwdHI7CisgICAgbV9jbGllbnQgPSBudWxscHRyOworfQorCitQYXNzT3duUHRyPE1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpjcmVhdGUoTWVkaWFQ
bGF5ZXIqIHBsYXllcikKK3sgCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNZWRpYVBsYXllclBy
aXZhdGVJT1MocGxheWVyKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpyZWdp
c3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBp
ZiAoaXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVk
VHlwZXMsIHN1cHBvcnRzVHlwZSwgMCwgMCwgMCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZUlP
Uzo6TWVkaWFQbGF5ZXJQcml2YXRlSU9TKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBtX21l
ZGlhUGxheWVyKHBsYXllcikKKyAgICAsIG1fb2JqY0hlbHBlcihhZG9wdE5TKFtbV2ViQ29yZU1l
ZGlhUGxheWVyTm90aWZpY2F0aW9uSGVscGVyIGFsbG9jXSBpbml0V2l0aENsaWVudDp0aGlzXSkp
CisgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCisgICAgLCBtX3JlYWR5
U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICAsIG1fY3VycmVudFRyYWNrKG51bGxwdHIpCisjZW5kaWYKKyAgICAsIG1fZGVsYXlDYWxs
YmFja3MoMCkKKyAgICAsIG1fY2hhbmdpbmdWb2x1bWUoMCkKKyAgICAsIG1fYnl0ZXNMb2FkZWRB
dExhc3REaWRMb2FkaW5nUHJvZ3Jlc3MoMCkKKyAgICAsIG1fcmVxdWVzdGVkUmF0ZSgwKQorICAg
ICwgbV9idWZmZXJpbmdTdGF0ZShFbXB0eSkKKyAgICAsIG1fdmlzaWJsZShmYWxzZSkKKyAgICAs
IG1fdXNpbmdOZXR3b3JrKGZhbHNlKQorICAgICwgbV9pbkZ1bGxTY3JlZW4oZmFsc2UpCisgICAg
LCBtX3Nob3VsZFByZXBhcmVUb1BsYXkoZmFsc2UpCisgICAgLCBtX3ByZXBhcmluZ1RvUGxheShm
YWxzZSkKKyAgICAsIG1fcGF1c2VSZXF1ZXN0ZWQoZmFsc2UpCit7Cit9CisKK01lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6fk1lZGlhUGxheWVyUHJpdmF0ZUlPUygpCit7CisgICAgY2xlYXJUZXh0VHJh
Y2tzKCk7CisgICAgW21fb2JqY0hlbHBlci5nZXQoKSBkaXNjb25uZWN0XTsKKyAgICBpZiAoW21f
bWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfc2V0
RGVsZWdhdGU6KV0pCisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXREZWxl
Z2F0ZTpuaWxdOworICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9kaXNjb25uZWN0XTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldE1lZGlhUGxheWVyUHJveHkoV2Vi
TWVkaWFQbGF5ZXJQcm94eSAqcHJveHkpCit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXJIZWxwZXIp
CisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9kaXNjb25uZWN0XTsKKworICAg
IG1fbWVkaWFQbGF5ZXJIZWxwZXIgPSBudWxscHRyOworCisgICAgaWYgKHByb3h5KSB7CisgICAg
ICAgIC8vIGRvbid0IHRyeSB0byB1c2UgYSBoZWxwZXIgaWYgdGhlIGludGVyZmFjZSB2ZXJzaW9u
IGlzIHRvbyBsb3cKKyAgICAgICAgaWYgKFtwcm94eSBfaW50ZXJmYWNlVmVyc2lvbl0gPCAga1Jl
cXVpcmVkSGVscGVySW50ZXJmYWNlVmVyc2lvbikgeworICAgICAgICAgICAgTlNMb2coQCJNZWRp
YSBwbGF5ZXIgaGVscGVyIGludGVyZmFjZSB2ZXJzaW9uIHRvbyBsb3csIGV4aXRpbmcuIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9tZWRpYVBsYXllckhlbHBl
ciA9IGFkb3B0TlMoc3RhdGljX2Nhc3Q8TlNPYmplY3QgKj4oW3Byb3h5IHJldGFpbl0pKTsKKyAg
ICAgICAgaWYgKFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX3NldERlbGVnYXRlOildKQorICAgICAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxw
ZXIuZ2V0KCkgX3NldERlbGVnYXRlOm1fb2JqY0hlbHBlci5nZXQoKV07CisKKyAgICAgICAgYWNj
ZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBwcm9jZXNzUGVu
ZGluZ1JlcXVlc3RzKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpsb2FkKGNv
bnN0IFN0cmluZyYgdXJsKQoreworICAgIE5TVVJMICpuc1VSTCA9IFVSTChQYXJzZWRVUkxTdHJp
bmcsIHVybCk7CisKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpIHsKKyAgICAgICAgYWRk
RGVmZXJyZWRSZXF1ZXN0KERlZmVycmVkUHJvcGVydHlTcmNLZXksIFtuc1VSTCBhYnNvbHV0ZVN0
cmluZ10pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW21fZGVmZXJyZWRQcm9wZXJ0
aWVzLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpEZWZlcnJlZFByb3BlcnR5U3JjS2V5XTsKKyAg
ICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICB7CisgICAgICAgIGlmIChtX25ldHdvcmtT
dGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGluZykgeworICAgICAgICAgICAgbV9uZXR3b3JrU3Rh
dGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgICAgIG1fbWVkaWFQbGF5ZXItPm5l
dHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9yZWFkeVN0YXRl
ICE9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykgeworICAgICAgICAgICAgbV9yZWFkeVN0YXRl
ID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICAgICAgbV9tZWRpYVBsYXllci0+
cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fcGF1c2VSZXF1ZXN0
ZWQgPSBmYWxzZTsKKyAgICAgICAgbV9wcmVwYXJpbmdUb1BsYXkgPSBmYWxzZTsKKworICAgICAg
ICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfY2FuY2VsTG9hZF07CisgICAgICAgIFttX21l
ZGlhUGxheWVySGVscGVyLmdldCgpIF9sb2FkOm5zVVJMXTsKKyAgICB9CisgICAgc2V0RGVsYXlD
YWxsYmFja3MoZmFsc2UpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6Y2FuY2Vs
TG9hZCgpCit7CisgICAgW21fb2JqY0hlbHBlci5nZXQoKSBjYW5jZWxQZW5kaW5nUmVxdWVzdHNd
OworICAgIFttX2RlZmVycmVkUHJvcGVydGllcy5nZXQoKSByZW1vdmVBbGxPYmplY3RzXTsKKwor
ICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIFttX21l
ZGlhUGxheWVySGVscGVyLmdldCgpIF9jYW5jZWxMb2FkXTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVJT1M6OmFkZERlZmVycmVkUmVxdWVzdChOU1N0cmluZyAqbmFtZSwgaWQgdmFsdWUp
Cit7CisgICAgaWYgKCFtX2RlZmVycmVkUHJvcGVydGllcykKKyAgICAgICAgbV9kZWZlcnJlZFBy
b3BlcnRpZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwor
ICAgIFttX2RlZmVycmVkUHJvcGVydGllcy5nZXQoKSBzZXRPYmplY3Q6dmFsdWUgPyB2YWx1ZSA6
IEAiIiBmb3JLZXk6bmFtZV07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpwcm9j
ZXNzRGVmZXJyZWRSZXF1ZXN0cygpCit7CisgICAgaWYgKCFbbV9kZWZlcnJlZFByb3BlcnRpZXMu
Z2V0KCkgY291bnRdKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0
cnVlKTsKKyAgICB7CisgICAgICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGxvY2FsUHJvcGVy
dGllcyA9IGFkb3B0TlMoW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpt
X2RlZmVycmVkUHJvcGVydGllcy5nZXQoKV0pOworICAgICAgICBbbV9kZWZlcnJlZFByb3BlcnRp
ZXMuZ2V0KCkgcmVtb3ZlQWxsT2JqZWN0c107CisKKyAgICAgICAgLy8gQWx3YXlzIHNldCB0aGUg
c3JjIGZpcnN0LgorICAgICAgICBpZCB2YWx1ZSA9IFtsb2NhbFByb3BlcnRpZXMuZ2V0KCkgb2Jq
ZWN0Rm9yS2V5OkRlZmVycmVkUHJvcGVydHlTcmNLZXldOworICAgICAgICBpZiAodmFsdWUpCisg
ICAgICAgICAgICBsb2FkKHZhbHVlKTsKKworICAgICAgICBmb3IgKE5TU3RyaW5nICpuYW1lIGlu
IGxvY2FsUHJvcGVydGllcy5nZXQoKSkgeworICAgICAgICAgICAgdmFsdWUgPSBbbG9jYWxQcm9w
ZXJ0aWVzLmdldCgpIG9iamVjdEZvcktleTpuYW1lXTsKKworICAgICAgICAgICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpwcm9jZXNzRGVmZXJyZWRSZXF1ZXN0cyglcCkgLSBw
cm9jZXNzaW5nICVzIiwgdGhpcywgW25hbWUgVVRGOFN0cmluZ10pOworCisgICAgICAgICAgICBp
ZiAoW25hbWUgaXNFcXVhbFRvU3RyaW5nOkRlZmVycmVkUHJvcGVydHlQb3N0ZXJLZXldKQorICAg
ICAgICAgICAgICAgIHNldFBvc3Rlcih2YWx1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChbbmFt
ZSBpc0VxdWFsVG9TdHJpbmc6RGVmZXJyZWRQcm9wZXJ0eUNvbnRyb2xzS2V5XSkKKyAgICAgICAg
ICAgICAgICBzZXRDb250cm9scyhbdmFsdWUgYm9vbFZhbHVlXSk7CisgICAgICAgICAgICBlbHNl
IGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6RGVmZXJyZWRQbGF5S2V5XSkKKyAgICAgICAgICAg
ICAgICBwbGF5KCk7CisgICAgICAgICAgICBlbHNlIGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6
RGVmZXJyZWRQcm9wZXJ0eU91dE9mQmFuZFRyYWNrc0tleV0pCisgICAgICAgICAgICAgICAgc2V0
T3V0T2ZCYW5kVGV4dFRyYWNrcyh2YWx1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChbbmFtZSBp
c0VxdWFsVG9TdHJpbmc6RGVmZXJyZWRQcm9wZXJ0eVNlbGVjdGVkVHJhY2tLZXldKQorICAgICAg
ICAgICAgICAgIHNldFNlbGVjdGVkVGV4dFRyYWNrKHZhbHVlKTsKKyNpZiBFTkFCTEUoSU9TX0FJ
UlBMQVkpCisgICAgICAgICAgICBlbHNlIGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6RGVmZXJy
ZWRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZF0pCisgICAgICAgICAgICAgICAgc2V0V2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoW3ZhbHVlIGJvb2xWYWx1ZV0pOworI2VuZGlmCisg
ICAgICAgICAgICBlbHNlIGlmICghW25hbWUgaXNFcXVhbFRvU3RyaW5nOkRlZmVycmVkUHJvcGVy
dHlTcmNLZXldKQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQobmFtZSwgdmFsdWUp
OworICAgICAgICB9CisgICAgfQorICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldFBvc3Rlcihjb25zdCBTdHJpbmcmIHVybCkK
K3sKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICB7CisgICAgICAgIE5TVVJMICpu
c1VSTCA9IFVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7CisgICAgICAgIGlmIChtX21lZGlhUGxh
eWVySGVscGVyKSB7CisgICAgICAgICAgICBbbV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVt
b3ZlT2JqZWN0Rm9yS2V5OkRlZmVycmVkUHJvcGVydHlQb3N0ZXJLZXldOworICAgICAgICAgICAg
W21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldFBvc3Rlcjpuc1VSTF07CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkRGVmZXJyZWRSZXF1ZXN0KERlZmVycmVkUHJv
cGVydHlQb3N0ZXJLZXksIHVybCk7CisgICAgfQorICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNl
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldENvbnRyb2xzKGJvb2wgY29u
dHJvbHMpCit7CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgeworICAgICAgICBp
ZiAobV9tZWRpYVBsYXllckhlbHBlcikgeworICAgICAgICAgICAgW21fZGVmZXJyZWRQcm9wZXJ0
aWVzLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpEZWZlcnJlZFByb3BlcnR5Q29udHJvbHNLZXld
OworICAgICAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldENvbnRyb2xzOmNv
bnRyb2xzXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGREZWZlcnJl
ZFJlcXVlc3QoRGVmZXJyZWRQcm9wZXJ0eUNvbnRyb2xzS2V5LCBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6Y29udHJvbHNdKTsKKyAgICB9CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cygp
Cit7CisgICAgaWYgKG1fc2hvdWxkUHJlcGFyZVRvUGxheSAmJiAhbV9wcmVwYXJpbmdUb1BsYXkp
CisgICAgICAgIFttX29iamNIZWxwZXIuZ2V0KCkgc2NoZWR1bGVQcmVwYXJlVG9QbGF5V2l0aE9w
dGlvbmFsRGVsYXk6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU11dOworICAgIGlmIChbbV9k
ZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgY291bnRdKQorICAgICAgICBbbV9vYmpjSGVscGVyLmdl
dCgpIHNjaGVkdWxlRGVmZXJyZWRQcm9wZXJ0aWVzV2l0aE9wdGlvbmFsRGVsYXk6W05TTnVtYmVy
IG51bWJlcldpdGhCb29sOllFU11dOworICAgIG1fc2hvdWxkUHJlcGFyZVRvUGxheSA9IGZhbHNl
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cHJlcGFyZVRvUGxheSgpCit7Cisg
ICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKSB7CisgICAgICAgIC8vIE5vdCBob29rZWQgdXAg
dG8gdGhlIHBsdWctaW4geWV0LCByZW1lbWJlciB0aGlzIHJlcXVlc3QuCisgICAgICAgIG1fc2hv
dWxkUHJlcGFyZVRvUGxheSA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobV9wcmVwYXJpbmdUb1BsYXkgfHwgbV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZl
RnV0dXJlRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaG91bGRQcmVwYXJlVG9QbGF5
ID0gZmFsc2U7CisgICAgbV9wcmVwYXJpbmdUb1BsYXkgPSB0cnVlOworCisgICAgc2V0RGVsYXlD
YWxsYmFja3ModHJ1ZSk7CisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9wcmVw
YXJlRm9yUGxheWJhY2tdOworICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKworCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cGxheSgpCit7CisgICAgaWYgKCFtX21lZGlhUGxh
eWVySGVscGVyKSB7CisgICAgICAgIGFkZERlZmVycmVkUmVxdWVzdChEZWZlcnJlZFBsYXlLZXks
IG5pbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3BhdXNlUmVxdWVzdGVkID0g
ZmFsc2U7CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgICAgIFttX21lZGlhUGxh
eWVySGVscGVyLmdldCgpIF9wbGF5XTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpwYXVzZSgpCit7CisgICAgaWYgKCFtX21l
ZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhdXNlUmVxdWVzdGVk
ID0gdHJ1ZTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICAgICAgW21fbWVkaWFQ
bGF5ZXJIZWxwZXIuZ2V0KCkgX3BhdXNlXTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7
Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZHVyYXRpb24oKSBjb25zdAorewor
ICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZmxv
YXQgZHVyYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4oW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0
KCkgX2R1cmF0aW9uXSk7CisgICAgcmV0dXJuIGR1cmF0aW9uID09IC0xID8gbnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjppbmZpbml0eSgpIDogZHVyYXRpb247Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6Y3VycmVudFRpbWUoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXll
ckhlbHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
PihbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfY3VycmVudFRpbWVdKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnNlZWsoZmxvYXQgdGltZSkKK3sKKyAgICBpZiAoIW1fbWVk
aWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybjsKKyAgICBmbG9hdCBkdXJhdGlvbiA9IHRo
aXMtPmR1cmF0aW9uKCk7CisgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldEN1cnJl
bnRUaW1lOih0aW1lID4gZHVyYXRpb24gPyBkdXJhdGlvbiA6IHRpbWUpXTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnNldEVuZFRpbWUoZmxvYXQgdGltZSkKK3sKKyAgICBpZiAo
IW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybjsKKyAgICBbbV9tZWRpYVBsYXll
ckhlbHBlci5nZXQoKSBfc2V0RW5kVGltZTp0aW1lXTsKK30KKworYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVJT1M6OnBhdXNlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVy
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXJhdGUoKTsKK30KKworYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnNlZWtpbmcoKSBjb25zdAoreworICAgIGlmICghbV9tZWRp
YVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9tZWRp
YVBsYXllckhlbHBlci5nZXQoKSBfc2Vla2luZ107Cit9CisKK0ludFNpemUgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVy
SGVscGVyKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgTlNTaXplIHNpemUgPSBb
bV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfbmF0dXJhbFNpemVdOworICAgIHJldHVybiBJbnRT
aXplKHNpemUpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6aGFzVmlkZW8oKSBj
b25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfaGFzVmlkZW9dOwor
fQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6aGFzQXVkaW8oKSBjb25zdAoreworICAg
IGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfaGFzQXVkaW9dOworfQorCitmbG9hdCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnZvbHVtZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlh
UGxheWVySGVscGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFttX21lZGlh
UGxheWVySGVscGVyLmdldCgpIF92b2x1bWVdOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUlPUzo6c2V0Vm9sdW1lKGZsb2F0IGluVm9sdW1lKQoreworICAgIGlmICghbV9tZWRpYVBsYXll
ckhlbHBlciB8fCBtX2NoYW5naW5nVm9sdW1lKQorICAgICAgICByZXR1cm47CisgICAgW21fbWVk
aWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldFZvbHVtZTppblZvbHVtZV07Cit9CisKK2Zsb2F0IE1l
ZGlhUGxheWVyUHJpdmF0ZUlPUzo6cmF0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxh
eWVySGVscGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFttX21lZGlhUGxh
eWVySGVscGVyLmdldCgpIF9yYXRlXTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6
OnNldFJhdGUoZmxvYXQgaW5SYXRlKQoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikK
KyAgICAgICAgcmV0dXJuOworICAgIG1fcmVxdWVzdGVkUmF0ZSA9IGluUmF0ZTsKKyAgICBbbV9t
ZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2V0UmF0ZTppblJhdGVdOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUlPUzo6c2V0TXV0ZWQoYm9vbCBpbk11dGUpCit7CisgICAgaWYgKCFtX21l
ZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm47CisgICAgW21fbWVkaWFQbGF5ZXJIZWxw
ZXIuZ2V0KCkgX3NldE11dGVkOmluTXV0ZV07Cit9CisKK2ludCBNZWRpYVBsYXllclByaXZhdGVJ
T1M6OmRhdGFSYXRlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBf
ZGF0YVJhdGVdOworfQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6bmV0d29ya1N0YXRlKCkgY29uc3QgCit7IAorICAgIHJldHVybiBtX25ldHdvcmtT
dGF0ZTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlSU9T
OjpyZWFkeVN0YXRlKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKK30KKwor
ZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjptYXhUaW1lQnVmZmVyZWQoKSBjb25zdAorewor
ICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9tYXhUaW1lQnVmZmVyZWRdOworfQorCiti
b29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB1bnNpZ25lZCBjdXJyZW50Qnl0ZXNMb2FkZWQgPSBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQo
KSBfYnl0ZXNMb2FkZWRdOworICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzID0gY3VycmVudEJ5
dGVzTG9hZGVkICE9IG1fYnl0ZXNMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3M7CisgICAg
bV9ieXRlc0xvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzcyA9IGN1cnJlbnRCeXRlc0xvYWRl
ZDsKKyAgICByZXR1cm4gZGlkTG9hZGluZ1Byb2dyZXNzOworfQorCitib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6dG90YWxCeXRlc0tub3duKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdG90YWxC
eXRlcygpID4gMDsKK30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjp0b3RhbEJ5
dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfdG90YWxCeXRl
c107Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6bWF4VGltZVNlZWthYmxlKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiAw
LjBmOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfbWF4VGltZVNlZWth
YmxlXTsKK30KKworUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVJT1M6
OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9
IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOworCisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQor
ICAgICAgICByZXR1cm4gdGltZVJhbmdlcy5yZWxlYXNlKCk7CisKKyAgICBOU0FycmF5ICpyYW5n
ZXMgPSBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfYnVmZmVyZWRUaW1lUmFuZ2VzXTsKKyAg
ICBpZiAoIXJhbmdlcykKKyAgICAgICAgcmV0dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOworCisg
ICAgZmxvYXQgdGltZVJhbmdlWzJdOworICAgIGludCBjb3VudCA9IFtyYW5nZXMgY291bnRdOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU0RhdGEgKnJh
bmdlID0gW3JhbmdlcyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBbcmFuZ2UgZ2V0Qnl0ZXM6
dGltZVJhbmdlIGxlbmd0aDooTlNVSW50ZWdlcilzaXplb2YodGltZVJhbmdlKV07CisKKyAgICAg
ICAgdGltZVJhbmdlcy0+YWRkKHRpbWVSYW5nZVswXSwgdGltZVJhbmdlWzFdKTsKKyAgICB9CisK
KyAgICByZXR1cm4gdGltZVJhbmdlcy5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpzZXRTaXplKGNvbnN0IEludFNpemUmKQoreworICAgIC8vIEZJWE1FOiBEbyB3
ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmU/Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
SU9TOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVl
ZCB0byBkbyBhbnl0aGluZyBtb3JlIGhlcmU/CisgICAgaWYgKG1fdmlzaWJsZSAhPSB2aXNpYmxl
KQorICAgICAgICBtX3Zpc2libGUgPSB2aXNpYmxlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpCit7CisgICAg
Ly8gTm90aGluZyB0byBkbyBoZXJlLgorfQorCitzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVU
eXBlQ2FjaGUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+
IHR5cGVDYWNoZTsKKyAgICBzdGF0aWMgYm9vbCB0eXBlTGlzdEluaXRpYWxpemVkID0gZmFsc2U7
CisKKyAgICBpZiAodHlwZUxpc3RJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIHR5cGVDYWNo
ZTsKKworICAgIHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgLy8gRklYTUU6IFNo
b3VsZCBnZXQgdGhlc2UgZnJvbSB0aGUgaGVscGVyLCBidXQgd2UgZG9uJ3QgaGF2ZSBhbiBpbnN0
YW5jZSB3aGVuIHRoaXMgaXMgY2FsbGVkLgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0eXBlTGlz
dFtdID0geworICAgICAgICAiYXBwbGljYXRpb24veC1tcGVndXJsIiwKKyAgICAgICAgImFwcGxp
Y2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsIiwKKyAgICAgICAgImF1ZGlvLzNncHAiLAorICAgICAg
ICAiYXVkaW8vM2dwcDIiLAorICAgICAgICAiYXVkaW8vYWFjIiwKKyAgICAgICAgImF1ZGlvL2Fp
ZmYiLAorICAgICAgICAiYXVkaW8vYW1yIiwKKyAgICAgICAgImF1ZGlvL2Jhc2ljIiwKKyAgICAg
ICAgImF1ZGlvL21wMyIsCisgICAgICAgICJhdWRpby9tcDQiLAorICAgICAgICAiYXVkaW8vbXBl
ZyIsCisgICAgICAgICJhdWRpby9tcGVndXJsIiwKKyAgICAgICAgImF1ZGlvL21wZWczIiwKKyAg
ICAgICAgImF1ZGlvL3NjcGxzIiwKKyAgICAgICAgImF1ZGlvL3dhdiIsCisgICAgICAgICJhdWRp
by94LWFhYyIsCisgICAgICAgICJhdWRpby94LWFpZmYiLAorICAgICAgICAiYXVkaW8veC1jYWYi
LAorICAgICAgICAiYXVkaW8veC1tNGEiLAorICAgICAgICAiYXVkaW8veC1tNGIiLAorICAgICAg
ICAiYXVkaW8veC1tNHAiLAorICAgICAgICAiYXVkaW8veC1tNHIiLAorICAgICAgICAiYXVkaW8v
eC1tcDMiLAorICAgICAgICAiYXVkaW8veC1tcGVnIiwKKyAgICAgICAgImF1ZGlvL3gtbXBlZzMi
LAorICAgICAgICAiYXVkaW8veC1tcGVndXJsIiwKKyAgICAgICAgImF1ZGlvL3gtc2NwbHMiLAor
ICAgICAgICAiYXVkaW8veC13YXYiLAorICAgICAgICAidmlkZW8vM2dwcCIsCisgICAgICAgICJ2
aWRlby8zZ3BwMiIsCisgICAgICAgICJ2aWRlby9tcDQiLAorICAgICAgICAidmlkZW8vcXVpY2t0
aW1lIiwKKyAgICAgICAgInZpZGVvL3gtbTR2IiwKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBp
cyBhZGRlZCB0byByZXN0b3JlIG9sZCBiZWhhdmlvciBmb3I6CisgICAgICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS85NzkyOTY0PiBFbWJlZGRlZCB2aWRlb3MgZG9uJ3QgcGxheSBvbiBzcGllZ2VsLmRl
ICguaHRtbCBmaWxlIHJlZGlyZWN0cykKKyAgICAgICAgLy8gSG93ZXZlciwgYSBiZXR0ZXIgZml4
IGlzIHRyYWNrZWQgYnk6CisgICAgICAgIC8vIDxodHRwOi8vd2Via2l0Lm9yZy9iLzY0ODExPiA8
dmlkZW8+ICIuaHRtbCIgc3JjIHdpdGggYSAzMDEgcmVkaXJlY3QgZmFpbHMgdG8gbG9hZAorICAg
ICAgICAidGV4dC9odG1sIiwKKyAgICB9OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBX
VEZfQVJSQVlfTEVOR1RIKHR5cGVMaXN0KTsgKytpKQorICAgICAgICB0eXBlQ2FjaGUuZ2V0KCku
YWRkKHR5cGVMaXN0W2ldKTsKKworICAgIHJldHVybiB0eXBlQ2FjaGU7Cit9CisKK01lZGlhUGxh
eWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzdXBwb3J0c1R5cGUoY29u
c3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICAvLyBP
bmx5IHJldHVybiAiSXNTdXBwb3J0ZWQiIGlmIHRoZXJlIGlzIG5vIGNvZGVjcyBwYXJhbWV0ZXIg
Zm9yIG5vdyBhcyB0aGVyZSBpcyBubyB3YXkgdG8gYXNrIENvcmVNZWRpYQorICAgIC8vIGlmIGl0
IHN1cHBvcnRzIGFuIGV4dGVuZGVkIE1JTUUgdHlwZS4KKyAgICBpZiAoIXBhcmFtZXRlcnMudHlw
ZS5pc0VtcHR5KCkgJiYgbWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkp
CisgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXll
cjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7CisKKyAgICByZXR1
cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcykKK3sKKyAg
ICB0eXBlcyA9IG1pbWVUeXBlQ2FjaGUoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJ
T1M6OmlzQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShJ
T1NfQUlSUExBWSkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjppc0N1cnJlbnRQbGF5YmFj
a1RhcmdldFdpcmVsZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIu
Z2V0KCkgX2lzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxlc3NdOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUlPUzo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCkKK3sKKyAgICBzZXRE
ZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkg
X3Nob3dQbGF5YmFja1RhcmdldFBpY2tlcl07CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2Up
OworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6aGFzV2lyZWxlc3NQbGF5YmFja1Rh
cmdldHMoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfaGFz
V2lyZWxlc3NQbGF5YmFja1RhcmdldHNdOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlP
Uzo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdAoreworICAgIGlmICghbV9t
ZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9t
ZWRpYVBsYXllckhlbHBlci5nZXQoKSBfd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRdOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c2V0V2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKK3sKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsK
KyAgICB7CisgICAgICAgIGlmIChtX21lZGlhUGxheWVySGVscGVyKSB7CisgICAgICAgICAgICBb
bV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkRlZmVycmVkV2ly
ZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRdOworICAgICAgICAgICAgW21fbWVkaWFQbGF5ZXJI
ZWxwZXIuZ2V0KCkgX3NldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkOmRpc2FibGVkXTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBhZGREZWZlcnJlZFJlcXVlc3QoRGVmZXJyZWRX
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmRp
c2FibGVkXSk7CisgICAgfQorICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
TGlzdGVuZXJzKGJvb2wgaGFzTGlzdGVuZXJzKQoreworICAgIFttX21lZGlhUGxheWVySGVscGVy
LmdldCgpIF9zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVyczpoYXNMaXN0
ZW5lcnNdOworfQorI2VuZGlmCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiti
b29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVJT1M6OmVudGVyRnVsbHNjcmVlbigpCit7CisgICAgLy8gVGhlIGNvbnN0IGNhc3Qg
aXMgYSB3b3JrYXJvdW5kIGR1ZSB0byBPcGVuU291cmNlIGNoYW5naW5nIHRoZSBzaWduYXR1cmUg
dG8gY29uc3QuCisgICAgTWVkaWFQbGF5ZXJQcml2YXRlSU9TKiBtdXRhYmxlVGhpcyA9IGNvbnN0
X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlSU9TKj4odGhpcyk7CisgICAgbXV0YWJsZVRoaXMtPnNl
dERlbGF5Q2FsbGJhY2tzKHRydWUpOworICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9l
bnRlckZ1bGxTY3JlZW5dOworICAgIG11dGFibGVUaGlzLT5zZXREZWxheUNhbGxiYWNrcyhmYWxz
ZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpleGl0RnVsbHNjcmVlbigpCit7
CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIu
Z2V0KCkgX2V4aXRGdWxsU2NyZWVuXTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5
ZXJIZWxwZXIpIHsKKyAgICAgICAgYWRkRGVmZXJyZWRSZXF1ZXN0KG5hbWUsIHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0
KCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihfYXR0cmlidXRlQ2hhbmdlZDp2YWx1ZTop
XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAg
W21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2F0dHJpYnV0ZUNoYW5nZWQ6bmFtZSB2YWx1ZTp2
YWx1ZV07CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCitib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUlPUzo6cmVhZHlGb3JQbGF5YmFjaygpIGNvbnN0Cit7CisgICAgaWYgKFttX21l
ZGlhUGxheWVySGVscGVyLmdldCgpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3JlYWR5
Rm9yUGxheWJhY2spXSkKKyAgICAgICAgcmV0dXJuIFttX21lZGlhUGxheWVySGVscGVyLmdldCgp
IF9yZWFkeUZvclBsYXliYWNrXTsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlOjpyZWFkeUZvclBsYXliYWNrKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlSU9T
OjpoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX21lZGlhUGxheWVy
SGVscGVyLmdldCgpIF9oYXNDbG9zZWRDYXB0aW9uc107Cit9ICAgIAorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUlPUzo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wgZmxhZykKK3sKKyAg
ICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlOmZs
YWddOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZGVsaXZlck5vdGlmaWNhdGlv
bihNZWRpYVBsYXllclByb3h5Tm90aWZpY2F0aW9uVHlwZSBub3RpZmljYXRpb24pIAoreworICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZGVsaXZlck5vdGlmaWNhdGlvbigl
cCkgLSBub3RpZmljYXRpb24gPSAlaSwgZW50ZXJpbmcgd2l0aCBuZXR3b3JrU3RhdGUgPSAlaSwg
cmVhZHlTdGF0ZSA9ICVpIiwgCisgICAgICAgIHRoaXMsIHN0YXRpY19jYXN0PGludD4obm90aWZp
Y2F0aW9uKSwgc3RhdGljX2Nhc3Q8aW50PihtX25ldHdvcmtTdGF0ZSksIHN0YXRpY19jYXN0PGlu
dD4obV9yZWFkeVN0YXRlKSk7CisKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChjYWxsYmFja3NEZWxheWVkKCkpIHsKKyAgICAgICAgW21fb2JqY0hl
bHBlci5nZXQoKSBkZWxheU5vdGlmaWNhdGlvbjpub3RpZmljYXRpb25dOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3Rh
dGUgPSBtX25ldHdvcmtTdGF0ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFk
eVN0YXRlID0gbV9yZWFkeVN0YXRlOworCisgICAgc3dpdGNoIChub3RpZmljYXRpb24pIHsKKyAg
ICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uU3RhcnRVc2luZ05ldHdvcms6CisgICAgICAg
IG1fdXNpbmdOZXR3b3JrID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwgTWVk
aWFQbGF5ZXI6OkxvYWRpbmcpCisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpMb2FkaW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZp
Y2F0aW9uU3RvcFVzaW5nTmV0d29yazoKKyAgICAgICAgbV91c2luZ05ldHdvcmsgPSBmYWxzZTsK
KyAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGEg
JiYgbV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpCisgICAgICAgICAg
ICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxlOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25HYWluRm9jdXM6CisgICAgICAgIGlmICht
X25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxheWVyOjpMb2FkaW5nKQorICAgICAgICAgICAgbV9uZXR3
b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uTG9zZUZvY3VzOgorICAgICAgICBpZiAobV9uZXR3
b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpCisgICAgICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxlOworICAgICAgICBpZiAobV9yZWFkeVN0YXRlID4g
TWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSkKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRp
YVBsYXllck5vdGlmaWNhdGlvbkVudGVyZWRGdWxsc2NyZWVuOgorICAgICAgICBtX2luRnVsbFNj
cmVlbiA9IHRydWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlm
aWNhdGlvbkV4aXRlZEZ1bGxzY3JlZW46IHsKKyAgICAgICAgbV9pbkZ1bGxTY3JlZW4gPSBmYWxz
ZTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgICAgIHNldFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKDApOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVk
aWFQbGF5ZXJOb3RpZmljYXRpb25SZWFkeUZvckluc3BlY3Rpb246CisgICAgICAgIC8vIFRoZSBi
dWZmZXJpbmcgc3RhdGUgc29tZXRpbWVzIHJlYWNoZXMgImxpa2VseSB0byBrZWVwIHVwIiBvciAi
ZnVsbCIgYmVmb3JlIHRoZSBwbGF5ZXIgaXRlbSBpcworICAgICAgICAvLyByZWFkeSBmb3IgaW5z
cGVjdGlvbi4gSW4gdGhhdCBjYXNlIGFkdmFuY2UgZGlyZWN0bHkgdG8gSGF2ZUVub3VnaERhdGEu
CisgICAgICAgIGlmIChtX2J1ZmZlcmluZ1N0YXRlID4gVW5saWtlbGV5VG9LZWVwVXApCisgICAg
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlQ3Vy
cmVudERhdGE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNh
dGlvbk1lZGlhVmFsaWRhdGVkOgorICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBs
YXllcjo6SWRsZSAmJiAhbV9wcmVwYXJpbmdUb1BsYXkpCisgICAgICAgICAgICBtX25ldHdvcmtT
dGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxlOworICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3Rz
KCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvbk1l
ZGlhRmFpbGVkVG9WYWxpZGF0ZToKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXll
cjo6Rm9ybWF0RXJyb3I7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZl
Tm90aGluZzsgCisgICAgICAgIG1fdXNpbmdOZXR3b3JrID0gZmFsc2U7CisgICAgICAgIG1fcHJl
cGFyaW5nVG9QbGF5ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBs
YXllck5vdGlmaWNhdGlvblBsYXliYWNrRmFpbGVkOiB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBj
YW4ndCBjdXJyZW50bHkgdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIE5ldHdvcmtFcnJvciBh
bmQgRGVjb2RlRXJyb3IuCisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkRl
Y29kZUVycm9yOworCisgICAgICAgIC8vIERvbid0IHJlc2V0IHJlYWR5U3RhdGUsIHdoYXQgd2Ug
aGF2ZSBsb2FkZWQgYWxyZWFkeSBtYXkgYmUgcGxheWFibGUuCisgICAgICAgIG1fdXNpbmdOZXR3
b3JrID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVkaWFQbGF5
ZXJOb3RpZmljYXRpb25SZWFkeUZvclBsYXliYWNrOgorICAgICAgICBpZiAobV9uZXR3b3JrU3Rh
dGUgPCBNZWRpYVBsYXllcjo6TG9hZGluZykKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0g
TWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVy
OjpIYXZlRnV0dXJlRGF0YTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVy
Tm90aWZpY2F0aW9uRGlkUGxheVRvVGhlRW5kOgorICAgICAgICBtX21lZGlhUGxheWVyLT50aW1l
Q2hhbmdlZCgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmlj
YXRpb25TdHJlYW1MaWtlbHlUb0tlZXBVcDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwg
TWVkaWFQbGF5ZXI6OkxvYWRpbmcpCisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlh
UGxheWVyOjpMb2FkaW5nOworICAgICAgICBpZiAobV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6
OkhhdmVNZXRhZGF0YSAmJiBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERh
dGEpCisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERh
dGE7CisgICAgICAgIG1fYnVmZmVyaW5nU3RhdGUgPSBMaWtlbGV5VG9LZWVwVXA7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvblN0cmVhbUJ1ZmZlckZ1
bGw6CisgICAgICAgIC8vIFRoZSBtZWRpYSBidWZmZXJzIGFyZSBmdWxsIHNvIG5vIG1vcmUgZGF0
YSBjYW4gYmUgbG9hZGVkLiBUaGlzIGlzbid0IHJlYWxseSB0aGUgdGhlIHNhbWUgdGhpbmcgYXMg
CisgICAgICAgIC8vICJIYXZlRnV0dXJlRGF0YSIsIGJ1dCBub3RoaW5nIG1vcmUgd2lsbCBiZSBs
b2FkZWQgdW50aWwgcGxheWJhY2sgY29uc3VtZXMgc29tZSBvZiB0aGUgYnVmZmVyZWQgZGF0YQor
ICAgICAgICAvLyBzbyBidW1wIHRoZSByZWFkeVN0YXRlIHRvIGFsbG93IHBsYXliYWNrLgorICAg
ICAgICBpZiAobV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBtX3Jl
YWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpCisgICAgICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgIG1fbmV0d29y
a1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAgIG1fYnVmZmVyaW5nU3RhdGUgPSBG
dWxsOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25T
dHJlYW1SYW5Ecnk6CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRp
bmc7CisgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPiBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRh
KQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0
YTsKKyAgICAgICAgbV9idWZmZXJpbmdTdGF0ZSA9IEVtcHR5OworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25TdHJlYW1Vbmxpa2VseVRvS2VlcFVwOgor
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBp
ZiAobV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBtX3JlYWR5U3Rh
dGUgPCBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpCisgICAgICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgIG1fYnVmZmVyaW5nU3Rh
dGUgPSBVbmxpa2VsZXlUb0tlZXBVcDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlh
UGxheWVyTm90aWZpY2F0aW9uRmlsZUxvYWRlZDoKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBN
ZWRpYVBsYXllcjo6TG9hZGVkOworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZUVub3VnaERhdGE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5v
dGlmaWNhdGlvblRpbWVKdW1wZWQ6CisgICAgICAgIC8vIFNvbWV0aW1lcyBnZXQgYSBzcHVyaW91
cyAidGltZSBqdW1wZWQiIHdoZW4gdGhlIG1vdmllIGlzIGJlaW5nIHNldCB1cCBvciBpbW1lZGlh
dGVseSBhZnRlciBwYXVzaW5nLCAKKyAgICAgICAgLy8gZG9uJ3QgZmFsbCBmb3IgaXQuCisgICAg
ICAgIGlmIChtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YSkKKyAg
ICAgICAgICAgIG1fbWVkaWFQbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvbk11dGVkRGlkQ2hhbmdlOgorICAgIGNh
c2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25Wb2x1bWVEaWRDaGFuZ2U6CisgICAgICAgICsrbV9j
aGFuZ2luZ1ZvbHVtZTsKKyAgICAgICAgbV9tZWRpYVBsYXllci0+dm9sdW1lQ2hhbmdlZCh2b2x1
bWUoKSk7CisgICAgICAgIC0tbV9jaGFuZ2luZ1ZvbHVtZTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uU2l6ZURpZENoYW5nZToKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uUGxheVBhdXNlQnV0dG9uUHJl
c3NlZDoKKyAgICBjYXNlIE1lZGlhUGxheWVyUmVxdWVzdEJlZ2luUGxheWJhY2s6CisgICAgY2Fz
ZSBNZWRpYVBsYXllclJlcXVlc3RQYXVzZVBsYXliYWNrOgorICAgICAgICBicmVhazsKKworICAg
IGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25SYXRlRGlkQ2hhbmdlOgorICAgICAgICBtX3By
ZXBhcmluZ1RvUGxheSA9IGZhbHNlOworICAgICAgICBpZiAobV9wYXVzZVJlcXVlc3RlZCAmJiBy
YXRlKCkpCisgICAgICAgICAgICBtX3BhdXNlUmVxdWVzdGVkID0gZmFsc2U7CisgICAgICAgIGJy
ZWFrOworCisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQorICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3Rp
ZmljYXRpb25DdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZDoKKyAgICAgICAg
bV9tZWRpYVBsYXllci0+Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5nZWQoKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uUGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkOgorICAgICAgICBtX21lZGlhUGxheWVyLT5wbGF5
YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWQoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYK
KyAgICB9CisKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gb2xkTmV0d29ya1N0YXRlKQorICAg
ICAgICBtX21lZGlhUGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fcmVh
ZHlTdGF0ZSAhPSBvbGRSZWFkeVN0YXRlKQorICAgICAgICBtX21lZGlhUGxheWVyLT5yZWFkeVN0
YXRlQ2hhbmdlZCgpOworCisgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpk
ZWxpdmVyTm90aWZpY2F0aW9uKCVwKSAtIGV4aXRpbmcgd2l0aCBuZXR3b3JrU3RhdGUgPSAlaSwg
cmVhZHlTdGF0ZSA9ICVpIiwgCisgICAgICAgIHRoaXMsIHN0YXRpY19jYXN0PGludD4obV9uZXR3
b3JrU3RhdGUpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVhZHlTdGF0ZSkpOworfQorCisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQorYm9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnJlcXVpcmVzVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2luRnVsbFNjcmVl
bjsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKFRleHRUcmFja1JlcHJlc2VudGF0aW9uKiByZXByZXNlbnRhdGlvbikKK3sKKyAgICBb
bV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb246cmVw
cmVzZW50YXRpb24gPyByZXByZXNlbnRhdGlvbi0+cGxhdGZvcm1MYXllcigpIDogbnVsbHB0cl07
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjppbmJhbmRUZXh0VHJhY2tzQ2hhbmdl
ZChOU0FycmF5ICp0cmFja3MpCit7CisgICAgVmVjdG9yPFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGSU9TPiA+IHJlbW92ZWRUZXh0VHJhY2tzID0gbV90ZXh0VHJhY2tzOworCisgICAg
Zm9yIChOU0RpY3Rpb25hcnkgKnRyYWNrSW5mbyBpbiB0cmFja3MpIHsKKyAgICAgICAgYm9vbCBu
ZXdUcmFjayA9IHRydWU7CisgICAgICAgIE5TTnVtYmVyICp0cmFja0lEVmFsdWUgID0gW3RyYWNr
SW5mbyBvYmplY3RGb3JLZXk6VGV4dFRyYWNrSURLZXldOworCisgICAgICAgIGlmICghW3RyYWNr
SURWYWx1ZSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKSB7CisgICAgICAgICAgICBO
U0xvZyhAIlVuZXhwZWN0ZWQgdHJhY2sgSUQsIGlnbm9yaW5nLiIpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKworICAgICAgICBpbnQgdHJhY2tJRCA9IFt0cmFja0lEVmFsdWUg
aW50VmFsdWVdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZW1vdmVkVGV4dFRyYWNrcy5z
aXplKCk7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGSU9TPiB0cmFjayA9IHN0YXRpY19jYXN0PEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZJT1MqPihyZW1vdmVkVGV4dFRyYWNrc1tpIC0gMV0uZ2V0KCkpOworCisgICAgICAgICAgICBp
ZiAodHJhY2stPmludGVybmFsSUQoKSA9PSB0cmFja0lEKSB7CisgICAgICAgICAgICAgICAgcmVt
b3ZlZFRleHRUcmFja3MucmVtb3ZlKGkgLSAxKTsKKyAgICAgICAgICAgICAgICBuZXdUcmFjayA9
IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmICghbmV3VHJhY2spCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBOU1N0cmluZyAqbmFtZSA9IFt0cmFja0luZm8gb2JqZWN0Rm9yS2V5OlRleHRUcmFja0Rpc3Bs
YXlOYW1lS2V5XTsKKyAgICAgICAgTlNTdHJpbmcgKmxhbmd1YWdlID0gW3RyYWNrSW5mbyBvYmpl
Y3RGb3JLZXk6VGV4dFRyYWNrTG9jYWxlSWRlbnRpZmllcktleV07CisgICAgICAgIE5TU3RyaW5n
ICp0eXBlID0gW3RyYWNrSW5mbyBvYmplY3RGb3JLZXk6VGV4dFRyYWNrVHlwZUtleV07CisKKyAg
ICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjppbmJhbmRUZXh0VHJhY2tz
Q2hhbmdlZCglcCkgLSBhZGRpbmcgdHJhY2sgaWQgJWksIG5hbWUgPSAlcywgbGFuZ3VhZ2UgPSAl
cywgdHlwZSA9ICVzIiwgdGhpcywgdHJhY2tJRCwgW25hbWUgVVRGOFN0cmluZ10sIFtsYW5ndWFn
ZSBVVEY4U3RyaW5nXSwgW3R5cGUgVVRGOFN0cmluZ10pOworCisgICAgICAgIG1fdGV4dFRyYWNr
cy5hcHBlbmQoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUzo6Y3JlYXRlKHRoaXMsIHRyYWNr
SUQsIG5hbWUsIGxhbmd1YWdlLCB0eXBlKSk7CisgICAgfQorCisgICAgaWYgKHJlbW92ZWRUZXh0
VHJhY2tzLnNpemUoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RleHRUcmFja3Mu
c2l6ZSgpOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUz4gdHJhY2sgPSBzdGF0aWNfY2FzdDxJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TKj4obV90ZXh0VHJhY2tzW2kgLSAxXS5nZXQoKSk7CisKKyAgICAgICAgICAgIGlmICgh
cmVtb3ZlZFRleHRUcmFja3MuY29udGFpbnModHJhY2spKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBpZiAobV9jdXJyZW50VHJhY2sgPT0gdHJhY2suZ2V0KCkpCisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50VHJhY2sgPSBudWxscHRyOworICAgICAgICAgICAgbV9t
ZWRpYVBsYXllci0+cmVtb3ZlVGV4dFRyYWNrKHRyYWNrKTsKKyAgICAgICAgICAgIG1fdGV4dFRy
YWNrcy5yZW1vdmUoaSAtIDEpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdGV4dFRyYWNrcy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUz4gdHJhY2sgPSBzdGF0aWNfY2FzdDxJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGSU9TKj4obV90ZXh0VHJhY2tzW2ldLmdldCgpKTsKKworICAgICAg
ICB0cmFjay0+c2V0VGV4dFRyYWNrSW5kZXgoaSk7CisgICAgICAgIGlmICh0cmFjay0+aGFzQmVl
blJlcG9ydGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB0cmFjay0+c2V0
SGFzQmVlblJlcG9ydGVkKHRydWUpOworICAgICAgICBtX21lZGlhUGxheWVyLT5hZGRUZXh0VHJh
Y2sodHJhY2suZ2V0KCkpOworICAgIH0KKyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVJT1M6OmluYmFuZFRleHRUcmFja3NDaGFuZ2VkKCVwKSAtIGZvdW5kICVpIGluLWJhbmQgdHJh
Y2tzIiwgdGhpcywgbV90ZXh0VHJhY2tzLnNpemUoKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpzZXRTZWxlY3RlZFRleHRUcmFjayhOU051bWJlciAqdHJhY2tJRCkKK3sKKyAg
ICBpZiAoIVt0cmFja0lEIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pIHsKKyAgICAg
ICAgTlNMb2coQCJVbmV4cGVjdGVkIHRyYWNrIElELCBpZ25vcmluZy4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikgeworICAgICAgICBh
ZGREZWZlcnJlZFJlcXVlc3QoRGVmZXJyZWRQcm9wZXJ0eVNlbGVjdGVkVHJhY2tLZXksIHRyYWNr
SUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFbbV9tZWRpYVBsYXllckhl
bHBlci5nZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9zZXRTZWxlY3RlZFRleHRU
cmFjazopXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7
CisgICAgeworICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldEN1
cnJlbnRUcmFjayglcCkgLSBzZWxlY3RpbmcgdHJhY2sgaWQgJWkiLCB0aGlzLCBbdHJhY2tJRCBp
bnRWYWx1ZV0pOworICAgICAgICBbbV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVtb3ZlT2Jq
ZWN0Rm9yS2V5OkRlZmVycmVkUHJvcGVydHlTZWxlY3RlZFRyYWNrS2V5XTsKKyAgICAgICAgW21f
bWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldFNlbGVjdGVkVGV4dFRyYWNrOnRyYWNrSURdOwor
ICAgIH0KKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlSU9TOjp0cmFja01vZGVDaGFuZ2VkKCkKK3sKKyAgICBSZWZQdHI8SW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRj4gdHJhY2tUb0VuYWJsZTsKKworICAgIC8vIEFWRm91bmRhdGlvbiBj
YW4gb25seSBlbWl0IGN1ZXMgZm9yIG9uZSB0cmFjayBhdCBhIHRpbWUsIHNvIGVuYWJsZSB0aGUg
Zmlyc3QgdHJhY2sgdGhhdCBpcyBzaG93aW5nLCBvciB0aGUgZmlyc3QgdGhhdAorICAgIC8vIGlz
IGhpZGRlbiBpZiBub25lIGFyZSBzaG93aW5nLiBPdGhlcndpc2UgZGlzYWJsZSBhbGwgdHJhY2tz
LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RleHRUcmFja3Muc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M+IHRyYWNrID0g
bV90ZXh0VHJhY2tzW2ldOworICAgICAgICBpZiAodHJhY2stPm1vZGUoKSA9PSBJbmJhbmRUZXh0
VHJhY2tQcml2YXRlOjpTaG93aW5nKSB7CisgICAgICAgICAgICB0cmFja1RvRW5hYmxlID0gdHJh
Y2s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRyYWNrVG9F
bmFibGUgJiYgdHJhY2stPm1vZGUoKSA9PSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpIaWRkZW4p
CisgICAgICAgICAgICB0cmFja1RvRW5hYmxlID0gdHJhY2s7CisgICAgfQorCisgICAgSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRklPUyogdHJhY2tQcml2YXRlID0gc3RhdGljX2Nhc3Q8SW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRklPUyo+KHRyYWNrVG9FbmFibGUuZ2V0KCkpOworICAgIGlmICht
X2N1cnJlbnRUcmFjayA9PSB0cmFja1ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
Y3VycmVudFRyYWNrID0gdHJhY2tQcml2YXRlOworICAgIHNldFNlbGVjdGVkVGV4dFRyYWNrKHRy
YWNrUHJpdmF0ZSA/IFtOU051bWJlciBudW1iZXJXaXRoSW50OnRyYWNrUHJpdmF0ZS0+aW50ZXJu
YWxJRCgpXSA6IG5pbCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpjbGVhclRl
eHRUcmFja3MoKQoreworICAgIG1fY3VycmVudFRyYWNrID0gbnVsbHB0cjsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV90ZXh0VHJhY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJl
ZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TPiB0cmFjayA9IG1fdGV4dFRyYWNrc1tp
XTsKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cmVtb3ZlVGV4dFRyYWNrKHRyYWNrKTsKKyAgICAg
ICAgdHJhY2stPmRpc2Nvbm5lY3QoKTsKKyAgICB9CisgICAgbV90ZXh0VHJhY2tzLmNsZWFyKCk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpwcm9jZXNzSW5iYW5kVGV4dFRyYWNr
Q3VlKE5TQXJyYXkgKmF0dHJpYnV0ZWRTdHJpbmdzLCBkb3VibGUgdGltZSkKK3sKKyAgICBpZiAo
IW1fY3VycmVudFRyYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRUcmFjay0+
cHJvY2Vzc0N1ZShyZWludGVycHJldF9jYXN0PENGQXJyYXlSZWY+KGF0dHJpYnV0ZWRTdHJpbmdz
KSwgdGltZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRPdXRPZkJhbmRU
ZXh0VHJhY2tzKE5TQXJyYXkgKnRyYWNrc0FycmF5KQoreworICAgIGlmICghbV9tZWRpYVBsYXll
ckhlbHBlcikgeworICAgICAgICBhZGREZWZlcnJlZFJlcXVlc3QoRGVmZXJyZWRQcm9wZXJ0eU91
dE9mQmFuZFRyYWNrc0tleSwgdHJhY2tzQXJyYXkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKF9zZXRPdXRPZkJhbmRUZXh0VHJhY2tzOildKQorICAgICAgICByZXR1cm47CisK
KyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICB7CisgICAgICAgIFttX2RlZmVycmVk
UHJvcGVydGllcy5nZXQoKSByZW1vdmVPYmplY3RGb3JLZXk6RGVmZXJyZWRQcm9wZXJ0eU91dE9m
QmFuZFRyYWNrc0tleV07CisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXRP
dXRPZkJhbmRUZXh0VHJhY2tzOnRyYWNrc0FycmF5XTsKKyAgICB9CisgICAgc2V0RGVsYXlDYWxs
YmFja3MoZmFsc2UpOworfQorCitzdGF0aWMgaW50IHBsYXRmb3JtVHJhY2tJRChQbGF0Zm9ybVRl
eHRUcmFjayogcGxhdGZvcm1UcmFjaykKK3sKKyAgICBpZiAocGxhdGZvcm1UcmFjay0+dHlwZSgp
ID09IFBsYXRmb3JtVGV4dFRyYWNrOjpJbkJhbmQpIHsKKyAgICAgICAgSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUyogdHJhY2tQcml2YXRlID0gc3RhdGljX2Nhc3Q8SW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUyo+KHBsYXRmb3JtVHJhY2stPmNsaWVudCgpLT5wcml2YXRlVHJhY2soKSk7
CisgICAgICAgIHJldHVybiB0cmFja1ByaXZhdGUgPyB0cmFja1ByaXZhdGUtPmludGVybmFsSUQo
KSA6IDA7CisgICAgfQorCisgICAgcmV0dXJuIHBsYXRmb3JtVHJhY2stPnVuaXF1ZUlkKCk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpvdXRPZkJhbmRUZXh0VHJhY2tzQ2hhbmdl
ZCgpCit7CisgICAgaWYgKCFtX21lbnVJbnRlcmZhY2UtPmNsaWVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHRyYWNrc0FycmF5ID0gYWRvcHRO
UyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgVmVjdG9yPFJlZlB0cjxQbGF0
Zm9ybVRleHRUcmFjaz4gPiB0ZXh0VHJhY2tzID0gbV9tZW51SW50ZXJmYWNlLT5jbGllbnQoKS0+
cGxhdGZvcm1UZXh0VHJhY2tzKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4
dFRyYWNrcy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+
IHBsYXRmb3JtVHJhY2sgPSB0ZXh0VHJhY2tzW2ldOworCisgICAgICAgIGlmIChwbGF0Zm9ybVRy
YWNrLT50eXBlKCkgPT0gUGxhdGZvcm1UZXh0VHJhY2s6OkluQmFuZCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBpZiAocGxhdGZvcm1UcmFjay0+a2luZCgpICE9IFBsYXRmb3JtVGV4
dFRyYWNrOjpTdWJ0aXRsZSAmJiBwbGF0Zm9ybVRyYWNrLT5raW5kKCkgIT0gUGxhdGZvcm1UZXh0
VHJhY2s6OkNhcHRpb24pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gdHJhY2sgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlv
bmFyeSBhbGxvY10gaW5pdF0pOworCisgICAgICAgIFt0cmFjay5nZXQoKSBzZXRPYmplY3Q6cGxh
dGZvcm1UcmFjay0+bGFiZWwoKSBmb3JLZXk6VGV4dFRyYWNrRGlzcGxheU5hbWVLZXldOworCisg
ICAgICAgIGlmICghcGxhdGZvcm1UcmFjay0+bGFuZ3VhZ2UoKS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBbdHJhY2suZ2V0KCkgc2V0T2JqZWN0OnBsYXRmb3JtVHJhY2stPmxhbmd1YWdlKCkgZm9y
S2V5OlRleHRUcmFja0xvY2FsZUlkZW50aWZpZXJLZXldOworCisgICAgICAgIE5TU3RyaW5nICp0
eXBlID0gcGxhdGZvcm1UcmFjay0+a2luZCgpID09IFBsYXRmb3JtVGV4dFRyYWNrOjpTdWJ0aXRs
ZSA/IFRleHRUcmFja1N1YnRpdGxlc0tleSA6IFRleHRUcmFja0NhcHRpb25zS2V5OworICAgICAg
ICBbdHJhY2suZ2V0KCkgc2V0T2JqZWN0OnR5cGUgZm9yS2V5OlRleHRUcmFja1R5cGVLZXldOwor
CisgICAgICAgIFt0cmFjay5nZXQoKSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6
cGxhdGZvcm1UcmFja0lEKHBsYXRmb3JtVHJhY2suZ2V0KCkpXSBmb3JLZXk6VGV4dFRyYWNrSURL
ZXldOworCisgICAgICAgIFt0cmFja3NBcnJheSBhZGRPYmplY3Q6dHJhY2suZ2V0KCldOworICAg
IH0KKworICAgIGlmICghW3RyYWNrc0FycmF5LmdldCgpIGNvdW50XSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgc2V0T3V0T2ZCYW5kVGV4dFRyYWNrcyh0cmFja3NBcnJheS5nZXQoKSk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjp0ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5TWVkaWFF
bGVtZW50KFBhc3NSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+IHBsYXRmb3JtVHJhY2spCit7Cisg
ICAgc2V0U2VsZWN0ZWRUZXh0VHJhY2soW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6cGxhdGZvcm1U
cmFja0lEKHBsYXRmb3JtVHJhY2suZ2V0KCkpXSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlSU9TOjp0ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5UGx1Z2luKE5TRGljdGlvbmFyeSAqdHJhY2tJ
bmZvKQoreworICAgIGlmICghbV9tZW51SW50ZXJmYWNlIHx8ICFtX21lbnVJbnRlcmZhY2UtPmNs
aWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXRyYWNrSW5mbykgeworICAgICAg
ICBtX21lbnVJbnRlcmZhY2UtPmNsaWVudCgpLT5zZXRTZWxlY3RlZFRleHRUcmFjaygwKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4gdHJh
Y2tUb1NlbGVjdDsKKyAgICBOU051bWJlciAqdHJhY2tJRFRvU2VsZWN0ICA9IFt0cmFja0luZm8g
b2JqZWN0Rm9yS2V5OlRleHRUcmFja0lES2V5XTsKKyAgICBpZiAoIVt0cmFja0lEVG9TZWxlY3Qg
aXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkgeworICAgICAgICBOU0xvZyhAIlVuZXhw
ZWN0ZWQgdHJhY2sgSUQsIGlnbm9yaW5nLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaW50IHRyYWNrSUQgPSBbdHJhY2tJRFRvU2VsZWN0IGludFZhbHVlXTsKKyAgICBpZiAodHJh
Y2tJRCA9PSBUZXh0VHJhY2tPZmZNZW51SXRlbUlEKQorICAgICAgICB0cmFja1RvU2VsZWN0ID0g
UGxhdGZvcm1UZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpOworICAgIGVsc2UgaWYgKHRy
YWNrSUQgPT0gVGV4dFRyYWNrQXV0b01lbnVJdGVtSUQpCisgICAgICAgIHRyYWNrVG9TZWxlY3Qg
PSBQbGF0Zm9ybVRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7CisgICAgZWxz
ZSB7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+ID4gdGV4dFRyYWNr
cyA9IG1fbWVudUludGVyZmFjZS0+Y2xpZW50KCktPnBsYXRmb3JtVGV4dFRyYWNrcygpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dFRyYWNrcy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiBwbGF0Zm9ybVRyYWNrID0gdGV4
dFRyYWNrc1tpXTsKKworICAgICAgICAgICAgaWYgKHRyYWNrSUQgPT0gcGxhdGZvcm1UcmFja0lE
KHBsYXRmb3JtVHJhY2suZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgdHJhY2tUb1NlbGVjdCA9
IHBsYXRmb3JtVHJhY2s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXRyYWNrVG9TZWxlY3QpIHsKKyAgICAgICAgTlNM
b2coQCJUZXh0IHRyYWNrIElEICVpIGlzIHVua25vd24sIGlnbm9yaW5nLiIsIHRyYWNrSUQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9tZW51SW50ZXJmYWNlLT5jbGllbnQoKS0+
c2V0U2VsZWN0ZWRUZXh0VHJhY2sodHJhY2tUb1NlbGVjdCk7Cit9CisKK1Bhc3NSZWZQdHI8UGxh
dGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlPiBNZWRpYVBsYXllclByaXZhdGVJT1M6OnRleHRU
cmFja01lbnUoKQoreworICAgIGlmICghbV9tZW51SW50ZXJmYWNlKQorICAgICAgICBtX21lbnVJ
bnRlcmZhY2UgPSBQbGF0Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1M6OmNyZWF0ZSh0aGlz
KTsKKyAgICByZXR1cm4gbV9tZW51SW50ZXJmYWNlOworfQorI2VuZGlmIC8vIEVOQUJMRShWSURF
T19UUkFDSykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitAaW1wbGVtZW50YXRpb24gV2Vi
Q29yZU1lZGlhUGxheWVyTm90aWZpY2F0aW9uSGVscGVyCisKKy0gKGlkKWluaXRXaXRoQ2xpZW50
OihNZWRpYVBsYXllclByaXZhdGVJT1MgKiljbGllbnQKK3sKKyAgICBfY2xpZW50ID0gY2xpZW50
OworICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cit9CisKKy0gKHZvaWQpZGlzY29ubmVjdAorewor
ICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2Vs
Zl07CisgICAgX2NsaWVudCA9IDA7Cit9CisKKy0gKHZvaWQpY2FuY2VsUGVuZGluZ1JlcXVlc3Rz
Cit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdl
dDpzZWxmXTsKK30KKworLSAodm9pZClkZWxheU5vdGlmaWNhdGlvbjooaW50KW5vdGlmaWNhdGlv
bgoreworICAgIGlmIChfY2xpZW50KQorICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNl
bGVjdG9yKGRlbGl2ZXJOb3RpZmljYXRpb246KSB3aXRoT2JqZWN0OltOU051bWJlciBudW1iZXJX
aXRoSW50Om5vdGlmaWNhdGlvbl0gYWZ0ZXJEZWxheTowXTsKK30KKworLSAodm9pZClkZWxpdmVy
Tm90aWZpY2F0aW9uOihOU051bWJlciAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmICghX2NsaWVu
dCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChfY2xpZW50LT5jYWxsYmFja3NEZWxheWVkKCkp
CisgICAgICAgIFtzZWxmIGRlbGF5Tm90aWZpY2F0aW9uOltub3RpZmljYXRpb24gaW50VmFsdWVd
XTsKKyAgICBlbHNlCisgICAgICAgIF9jbGllbnQtPmRlbGl2ZXJOb3RpZmljYXRpb24oKE1lZGlh
UGxheWVyUHJveHlOb3RpZmljYXRpb25UeXBlKVtub3RpZmljYXRpb24gaW50VmFsdWVdKTsKK30K
KworLSAodm9pZClzY2hlZHVsZVByZXBhcmVUb1BsYXlXaXRoT3B0aW9uYWxEZWxheTooTlNOdW1i
ZXIgKilzaG91bGREZWxheQoreworICAgIGlmICghX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChbc2hvdWxkRGVsYXkgYm9vbFZhbHVlXSkKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNl
bGVjdG9yOkBzZWxlY3RvcihzY2hlZHVsZVByZXBhcmVUb1BsYXlXaXRoT3B0aW9uYWxEZWxheTop
IHdpdGhPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSBhZnRlckRlbGF5OjBdOwor
ICAgIGVsc2UKKyAgICAgICAgX2NsaWVudC0+cHJlcGFyZVRvUGxheSgpOworfQorCistICh2b2lk
KXNjaGVkdWxlRGVmZXJyZWRQcm9wZXJ0aWVzV2l0aE9wdGlvbmFsRGVsYXk6KE5TTnVtYmVyICop
c2hvdWxkRGVsYXkKK3sKKyAgICBpZiAoIV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChbc2hvdWxkRGVsYXkgYm9vbFZhbHVlXSkgeworICAgICAgICBpZiAoIV9kZWZlcnJlZFBy
b3BlcnRpZXNTY2hlZHVsZWQpIHsKKyAgICAgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpA
c2VsZWN0b3Ioc2NoZWR1bGVEZWZlcnJlZFByb3BlcnRpZXNXaXRoT3B0aW9uYWxEZWxheTopIHdp
dGhPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSBhZnRlckRlbGF5OjBdOworICAg
ICAgICAgICAgX2RlZmVycmVkUHJvcGVydGllc1NjaGVkdWxlZCA9IFlFUzsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgX2RlZmVycmVkUHJvcGVydGllc1NjaGVkdWxl
ZCA9IE5POworICAgIF9jbGllbnQtPnByb2Nlc3NEZWZlcnJlZFJlcXVlc3RzKCk7Cit9CisKKy0g
KHZvaWQpcGx1Z2luRWxlbWVudEluQmFuZEFsdGVybmF0ZVRleHRUcmFja3NEaWRDaGFuZ2U6KE5T
QXJyYXkgKil0cmFja3MKK3sKKyAgICBpZiAoIV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBpZiAoIV9jbGllbnQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIF9jbGllbnQtPmluYmFuZFRleHRUcmFja3NDaGFuZ2VkKHRyYWNrcyk7
CisgICAgfSk7Cit9CisKKy0gKHZvaWQpcGx1Z2luRWxlbWVudERpZFNlbGVjdFRleHRUcmFjazoo
TlNEaWN0aW9uYXJ5ICopdHJhY2tJbmZvCit7CisgICAgaWYgKCFfY2xpZW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKCFfY2xpZW50KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBfY2xpZW50LT50ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5
UGx1Z2luKHRyYWNrSW5mbyk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpcGx1Z2luRWxlbWVudERp
ZE91dHB1dEF0dHJpYnV0ZWRTdHJpbmdzOihOU0FycmF5ICopc3RyaW5ncyBuYXRpdmVTYW1wbGVC
dWZmZXJzOihOU0FycmF5ICopYnVmZmVycyBmb3JUaW1lOihOU1RpbWVJbnRlcnZhbCl0aW1lCit7
CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcnMpOworCisgICAgaWYgKCFfY2xpZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKCFfY2xpZW50KQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBfY2xpZW50LT5wcm9jZXNzSW5iYW5kVGV4dFRy
YWNrQ3VlKHN0cmluZ3MsIHRpbWUpOworICAgIH0pOworfQorCitAZW5kCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnRE
YXRhSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZv
bnREYXRhSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3NTBjNDllNWNlMzRiOTZkOTU5MmMyNjQ2MTMxOGQ3
ZjQ5NTJmMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0KQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgor
CisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQg
IkZvbnRDYWNoZS5oIgorI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCisjaW1wb3J0ICJGb250
U2VydmljZXNJT1MuaCIKKyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0ZvbnRHbHlwaFN1cHBvcnQu
aD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0ZvbnRJbmZvLmg+CisjaW1wb3J0IDxDb3JlR3Jh
cGhpY3MvQ0dGb250UmVuZGVyaW5nLmg+CisjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgor
I2ltcG9ydCA8ZmxvYXQuaD4KKyNpbXBvcnQgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFy
YWJpYyhDRlN0cmluZ1JlZiBmb250RmFtaWx5TmFtZSkKK3sKKyAgICBpZiAoIWZvbnRGYW1pbHlO
YW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaW1lcyBOZXcgUm9tYW4gY29u
dGFpbnMgQXJhYmljIGdseXBocywgYnV0IENvcmUgVGV4dCBkb2Vzbid0IGtub3cgaG93IHRvIHNo
YXBlIHRoZW0uIDxyZGFyOi8vcHJvYmxlbS85ODIzOTc1PgorICAgIC8vIEZJWE1FIDxyZGFyOi8v
cHJvYmxlbS8xMjA5NjgzNT4gcmVtb3ZlIHRoaXMgZnVuY3Rpb24gb25jZSB0aGUgYWJvdmUgYnVn
IGlzIGZpeGVkLgorICAgIC8vIEFyaWFsIGFuZCBUYWhvbWEgYXJlIGhhdmUgcGVyZm9ybWFuY2Ug
aXNzdWVzIHNvIGRvbid0IHVzZSB0aGVtIGFzIHdlbGwuCisgICAgcmV0dXJuIChDRlN0cmluZ0Nv
bXBhcmUoQ0ZTVFIoIlRpbWVzIE5ldyBSb21hbiIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NG
Q29tcGFyZUVxdWFsVG8pCisgICAgICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIkFy
aWFsIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKKyAgICAgICAg
ICAgfHwgKENGU3RyaW5nQ29tcGFyZShDRlNUUigiVGFob21hIiksIGZvbnRGYW1pbHlOYW1lLCAw
KSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyk7Cit9CisKK3N0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNh
bEdseXBocyhDVEZvbnRSZWYgY3RGb250KQoreworICAgIC8vIFRoZSBjaGVjayBkb2Vzbid0IGxv
b2sgbmVhdCBidXQgdGhpcyBpcyB3aGF0IEFwcEtpdCBkb2VzIGZvciB2ZXJ0aWNhbCB3cml0aW5n
Li4uCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHRhYmxlVGFncyA9IGFkb3B0Q0YoQ1RGb250
Q29weUF2YWlsYWJsZVRhYmxlcyhjdEZvbnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykp
OworICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQo
KSk7CisgICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5k
ZXgpIHsKKyAgICAgICAgQ1RGb250VGFibGVUYWcgdGFnID0gKENURm9udFRhYmxlVGFnKSh1aW50
cHRyX3QpQ0ZBcnJheUdldFZhbHVlQXRJbmRleCh0YWJsZVRhZ3MuZ2V0KCksIGluZGV4KTsKKyAg
ICAgICAgaWYgKHRhZyA9PSBrQ1RGb250VGFibGVWaGVhIHx8IHRhZyA9PSBrQ1RGb250VGFibGVW
T1JHKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX3N5bnRo
ZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyBjZWlsZiht
X3BsYXRmb3JtRGF0YS5zaXplKCkgIC8gMjQuMGYpIDogMC5mOworICAgIG1fc3BhY2VHbHlwaCA9
IDA7CisgICAgbV9zcGFjZVdpZHRoID0gMDsKKyAgICB1bnNpZ25lZCB1bml0c1BlckVtOworICAg
IGZsb2F0IGFzY2VudDsKKyAgICBmbG9hdCBkZXNjZW50OworICAgIGZsb2F0IGxpbmVHYXA7Cisg
ICAgZmxvYXQgbGluZVNwYWNpbmc7CisgICAgZmxvYXQgeEhlaWdodDsKKyAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWU7CisgICAgaWYgKENURm9udFJlZiBjdEZvbnQgPSBtX3Bs
YXRmb3JtRGF0YS5mb250KCkpIHsKKyAgICAgICAgRm9udFNlcnZpY2VzSU9TIGZvbnRTZXJ2aWNl
KGN0Rm9udCk7CisgICAgICAgIGFzY2VudCA9IGNlaWxmKGZvbnRTZXJ2aWNlLmFzY2VudCgpKTsK
KyAgICAgICAgZGVzY2VudCA9IGNlaWxmKGZvbnRTZXJ2aWNlLmRlc2NlbnQoKSk7CisgICAgICAg
IGxpbmVTcGFjaW5nID0gZm9udFNlcnZpY2UubGluZVNwYWNpbmcoKTsKKyAgICAgICAgbGluZUdh
cCA9IGZvbnRTZXJ2aWNlLmxpbmVHYXAoKTsKKyAgICAgICAgeEhlaWdodCA9IGZvbnRTZXJ2aWNl
LnhIZWlnaHQoKTsKKyAgICAgICAgdW5pdHNQZXJFbSA9IGZvbnRTZXJ2aWNlLnVuaXRzUGVyRW0o
KTsKKyAgICAgICAgZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RG
b250KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ0dGb250UmVmIGNnRm9udCA9IG1fcGxhdGZv
cm1EYXRhLmNnRm9udCgpOworCisgICAgICAgIHVuaXRzUGVyRW0gPSBDR0ZvbnRHZXRVbml0c1Bl
ckVtKGNnRm9udCk7CisKKyAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEu
c2l6ZSgpOworICAgICAgICBhc2NlbnQgPSBscm91bmRmKHNjYWxlRW1Ub1VuaXRzKENHRm9udEdl
dEFzY2VudChjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIGRlc2Nl
bnQgPSBscm91bmRmKC1zY2FsZUVtVG9Vbml0cygtYWJzKENHRm9udEdldERlc2NlbnQoY2dGb250
KSksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKKyAgICAgICAgbGluZUdhcCA9IGxyb3VuZGYo
c2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0TGVhZGluZyhjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBv
aW50U2l6ZSk7CisgICAgICAgIHhIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVp
Z2h0KGNnRm9udCksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworCisgICAgICAgIGxpbmVTcGFj
aW5nID0gYXNjZW50ICsgZGVzY2VudCArIGxpbmVHYXA7CisgICAgICAgIGZhbWlseU5hbWUgPSBh
ZG9wdENGKENHRm9udENvcHlGYW1pbHlOYW1lKGNnRm9udCkpOworICAgIH0KKworICAgIG1fZm9u
dE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNl
dEFzY2VudChhc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsK
KyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7CisgICAgbV9mb250TWV0cmlj
cy5zZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7CisgICAgbV9mb250TWV0cmljcy5zZXRYSGVp
Z2h0KHhIZWlnaHQpOworICAgIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljID0gZm9udEZhbWls
eVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhmYW1pbHlOYW1lLmdldCgpKTsKKworICAgIGlmIChw
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFpc1RleHRPcmllbnRh
dGlvbkZhbGxiYWNrKCkpCisgICAgICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSBmb250SGFzVmVy
dGljYWxHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCkpOworCisgICAgaWYgKCFtX3BsYXRm
b3JtRGF0YS5tX2lzRW1vamkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB0aGlyZE9mU2l6
ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAvIDM7CisgICAgbV9mb250TWV0cmljcy5zZXRBc2Nl
bnQodGhpcmRPZlNpemUpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudCh0aGlyZE9mU2l6
ZSk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKHRoaXJkT2ZTaXplKTsKKyAgICBtX2Zv
bnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKDApOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUNoYXJXaWR0aEluaXQoKQoreworICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKKyAgICBt
X21heENoYXJXaWR0aCA9IDA7CisKKyAgICAvLyBGYWxsYmFjayB0byBhIGNyb3NzLXBsYXRmb3Jt
IGVzdGltYXRlLCB3aGljaCB3aWxsIHBvcHVsYXRlIHRoZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBu
b24tcG9zaXRpdmUuCisgICAgaW5pdENoYXJXaWR0aHMoKTsKK30KKworUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Cit7CisgICAg
aWYgKGlzQ3VzdG9tRm9udCgpKSB7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9u
dERhdGEobV9wbGF0Zm9ybURhdGEpOworICAgICAgICBzY2FsZWRGb250RGF0YS5tX3NpemUgPSBz
Y2FsZWRGb250RGF0YS5tX3NpemUgKiBzY2FsZUZhY3RvcjsKKyAgICAgICAgcmV0dXJuIFNpbXBs
ZUZvbnREYXRhOjpjcmVhdGUoc2NhbGVkRm9udERhdGEsIHRydWUsIGZhbHNlKTsKKyAgICB9CisK
KyAgICBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICogc2NhbGVGYWN0b3I7Cisg
ICAgQ1RGb250U3ltYm9saWNUcmFpdHMgZm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJh
aXRzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0
b3JSZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3Io
bV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7CisgICAgUmV0YWluUHRyPENURm9udFJlZj4gc2NhbGVk
Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlw
dG9yLmdldCgpLCBzaXplLCBudWxscHRyKSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRG
b250RGF0YShzY2FsZWRGb250LmdldCgpLCBzaXplLCBtX3BsYXRmb3JtRGF0YS5pc1ByaW50ZXJG
b250KCksIGZhbHNlLCBmYWxzZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSk7CisKKyAg
ICBpZiAoc2NhbGVkRm9udERhdGEuZm9udCgpKSB7CisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0
YS5tX3N5bnRoZXRpY0JvbGQpCisgICAgICAgICAgICBmb250VHJhaXRzIHw9IGtDVEZvbnRCb2xk
VHJhaXQ7CisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY09ibGlxdWUpCisg
ICAgICAgICAgICBmb250VHJhaXRzIHw9IGtDVEZvbnRJdGFsaWNUcmFpdDsKKworICAgICAgICBD
VEZvbnRTeW1ib2xpY1RyYWl0cyBzY2FsZWRGb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMoc2NhbGVkRm9udERhdGEuZm9udCgpKTsKKyAgICAgICAgc2NhbGVkRm9udERhdGEubV9z
eW50aGV0aWNCb2xkID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250Qm9sZFRyYWl0KSAmJiAhKHNjYWxl
ZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKTsKKyAgICAgICAgc2NhbGVkRm9udERhdGEu
bV9zeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250SXRhbGljVHJhaXQpICYm
ICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisKKyAgICAgICAgcmV0
dXJuIGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgmc2NhbGVkRm9udERhdGEpOworICAg
IH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIFNpbXBsZUZvbnREYXRhOjpjb250
YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCBpbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAg
Q1RGb250UmVmIGN0Rm9udCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsKKyAgICBtX3RyZWF0QXNG
aXhlZFBpdGNoID0gZmFsc2U7CisgICAgaWYgKCFjdEZvbnQpCisgICAgICAgIHJldHVybjsgLy8g
Q1RGb250IGlzIG51bGwgaW4gdGhlIGNhc2Ugb2YgU1ZHIGZvbnRzIGZvciBleGFtcGxlLgorCisg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmdWxsTmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZ1
bGxOYW1lKGN0Rm9udCkpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZSA9
IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RGb250KSk7CisKKyAgICBtX3RyZWF0QXNG
aXhlZFBpdGNoID0gQ0dGb250SXNGaXhlZFBpdGNoKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKSB8
fCAoZnVsbE5hbWUgJiYgKENGU3RyaW5nQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk9z
YWthLU1vbm8iKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFs
VG8gfHwgQ0ZTdHJpbmdDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTVMtUEdvdGhpYyIp
LCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpOworICAg
IGlmIChmYW1pbHlOYW1lICYmIENGU3RyaW5nQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNU
UigiQ291cmllciBOZXciKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFy
ZUVxdWFsVG8pIHsKKyAgICAgICAgLy8gU3BlY2lhbCBjYXNlIENvdXJpZXIgTmV3IHRvIG5vdCBi
ZSB0cmVhdGVkIGFzIGZpeGVkIHBpdGNoLCBhcyB0aGlzIHdpbGwgbWFrZSB1c2Ugb2YgYSBoYWNr
ZWQgc3BhY2Ugd2lkdGggd2hpY2ggaXMgdW5kZXNpcmVhYmxlIGZvciBpUGhvbmUgKHNlZSByZGFy
Oi8vNjI2OTc4MykuCisgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKKyAgICB9
Cit9CisKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGgg
Z2x5cGgpIGNvbnN0Cit7CisgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOworICAgIGlm
IChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWwgfHwgbV9pc0Jyb2tl
bklkZW9ncmFwaEZhbGxiYWNrKSB7CisgICAgICAgIGlmIChwbGF0Zm9ybURhdGEoKS5tX2lzRW1v
amkpCisgICAgICAgICAgICBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhtX3BsYXRmb3JtRGF0
YS5jdEZvbnQoKSwga0NURm9udEhvcml6b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAmYWR2YW5j
ZSwgMSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gcGxh
dGZvcm1EYXRhKCkubV9zaXplOworICAgICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNm
b3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUpOwor
ICAgICAgICAgICAgc3RhdGljIGNvbnN0IENHRm9udFJlbmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0
eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmlu
Z1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVs
UXVhbnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJlZDsKKyAgICAg
ICAgICAgIGlmICghQ0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgp
LmNnRm9udCgpLCAmdHJhbnNmb3JtLCByZW5kZXJpbmdTdHlsZSwgJmdseXBoLCAxLCAmYWR2YW5j
ZSkpIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lID0g
YWRvcHRDRihDR0ZvbnRDb3B5RnVsbE5hbWUocGxhdGZvcm1EYXRhKCkuY2dGb250KCkpKTsKKyAg
ICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjYWNoZSBnbHlwaCB3aWR0aHMgZm9y
ICVAICVmIiwgZnVsbE5hbWUuZ2V0KCksIHBvaW50U2l6ZSk7CisgICAgICAgICAgICAgICAgYWR2
YW5jZS53aWR0aCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAg
ICAgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCks
IGtDVEZvbnRWZXJ0aWNhbE9yaWVudGF0aW9uLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsKKworICAg
IHJldHVybiBhZHZhbmNlLndpZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9pb3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ5ZThiNmU5MDIwM2IwMGFhMGM4MDhiODZkMzdmMjBhYTg4YmM3MTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25JT1MuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPU19oCisjZGVmaW5lIFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uSU9TX2gKKworI2lmIFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQor
CisjaW1wb3J0ICJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5oIgorI2ltcG9ydCA8UXVhcnR6Q29y
ZS9DQUxheWVyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK0BjbGFzcyBXZWJDb3Jl
VGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1NIZWxwZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MgOiBwdWJsaWMgVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24geworcHVibGljOgorICAgIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50Kik7CisgICAgdmlydHVhbCB+VGV4dFRyYWNrUmVw
cmVzZW50YXRpb25JT1MoKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBPVkVSUklERSB7IHJl
dHVybiBtX2xheWVyLmdldCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRTY2FsZShm
bG9hdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnRSZWN0IGJvdW5kcygpIGNvbnN0IE9WRVJS
SURFOworCisgICAgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25DbGllbnQqIGNsaWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKK3ByaXZhdGU6CisgICAgVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25DbGllbnQqIG1fY2xpZW50OworICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2xheWVyOwor
ICAgIFJldGFpblB0cjxXZWJDb3JlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1NIZWxwZXI+IG1f
ZGVsZWdhdGU7Cit9OworCit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpICYmIEVOQUJMRShW
SURFT19UUkFDSykKKworI2VuZGlmIC8vIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9UZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lv
cy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZTM1ZTQyYjg5OWM5
MTVjN2E1MmY4ZWZkODY2MjM2YWYwMmMwNGJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1t
CkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbklPUy5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCisj
aW5jbHVkZSAiV2ViQ29yZVRocmVhZFJ1bi5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbnRlcmZhY2UgV2ViQ29yZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSU9TSGVscGVyIDogTlNPYmplY3QgeworICAgIFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uSU9TKiBfcGFyZW50OworfQorLSAoaWQpaW5pdFdpdGhQYXJlbnQ6KFRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSU9TKilwYXJlbnQ7CitAcHJvcGVydHkgKGFzc2lnbikgVGV4dFRyYWNrUmVw
cmVzZW50YXRpb25JT1MqIHBhcmVudDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkNvcmVU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPU0hlbHBlcgorLSAoaWQpaW5pdFdpdGhQYXJlbnQ6KFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKilwYXJlbnQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYucGFyZW50ID0gcGFy
ZW50OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIHNl
bGYucGFyZW50ID0gbmlsOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRQ
YXJlbnQ6KFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKilwYXJlbnQKK3sKKyAgICBpZiAoX3Bh
cmVudCkKKyAgICAgICAgW19wYXJlbnQtPnBsYXRmb3JtTGF5ZXIoKSByZW1vdmVPYnNlcnZlcjpz
ZWxmIGZvcktleVBhdGg6QCJib3VuZHMiXTsKKworICAgIF9wYXJlbnQgPSBwYXJlbnQ7CisKKyAg
ICBpZiAoX3BhcmVudCkKKyAgICAgICAgW19wYXJlbnQtPnBsYXRmb3JtTGF5ZXIoKSBhZGRPYnNl
cnZlcjpzZWxmIGZvcktleVBhdGg6QCJib3VuZHMiIG9wdGlvbnM6bmlsIGNvbnRleHQ6MF07Cit9
CisKKy0gKFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKilwYXJlbnQKK3sKKyAgICByZXR1cm4g
X3BhcmVudDsKK30KKworLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAq
KWtleVBhdGggb2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5n
ZSBjb250ZXh0Oih2b2lkICopY29udGV4dAoreworICAgIFVOVVNFRF9QQVJBTShjaGFuZ2UpOwor
ICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAg
aWYgKF9wYXJlbnQgJiYgW2tleVBhdGggaXNFcXVhbDpAImJvdW5kcyJdICYmIG9iamVjdCA9PSBf
cGFyZW50LT5wbGF0Zm9ybUxheWVyKCkpCisgICAgICAgICAgICBfcGFyZW50LT5jbGllbnQoKS0+
dGV4dFRyYWNrUmVwcmVzZW50YXRpb25Cb3VuZHNDaGFuZ2VkKF9wYXJlbnQtPmJvdW5kcygpKTsK
KyAgICB9KTsKK30KKworLSAoaWQpYWN0aW9uRm9yTGF5ZXI6KENBTGF5ZXIgKilsYXllciBmb3JL
ZXk6KE5TU3RyaW5nICopZXZlbnQKK3sKKyAgICBVTlVTRURfUEFSQU0obGF5ZXIpOworICAgIFVO
VVNFRF9QQVJBTShldmVudCk7CisgICAgLy8gUmV0dXJuaW5nIGEgTlNOdWxsIGZyb20gdGhpcyBk
ZWxlZ2F0ZSBtZXRob2QgZGlzYWJsZXMgYWxsIGltcGxpY2l0IENBTGF5ZXIgYWN0aW9ucy4KKyAg
ICByZXR1cm4gW05TTnVsbCBudWxsXTsKK30KKworQGVuZAorCitQYXNzT3duUHRyPFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uPiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbjo6Y3JlYXRlKFRleHRUcmFj
a1JlcHJlc2VudGF0aW9uQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUyhjbGllbnQpKTsKK30KKworVGV4dFRyYWNrUmVw
cmVzZW50YXRpb25JT1M6OlRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKFRleHRUcmFja1JlcHJl
c2VudGF0aW9uQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBt
X2xheWVyKGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSkpCisgICAgLCBtX2RlbGVnYXRl
KGFkb3B0TlMoW1tXZWJDb3JlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1NIZWxwZXIgYWxsb2Nd
IGluaXRXaXRoUGFyZW50OnRoaXNdKSkKK3sKKyAgICBbbV9sYXllci5nZXQoKSBzZXREZWxlZ2F0
ZTptX2RlbGVnYXRlLmdldCgpXTsKKyAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50c0dyYXZp
dHk6a0NBR3Jhdml0eUJvdHRvbV07Cit9CisKK1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TOjp+
VGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MoKQoreworICAgIFttX2xheWVyLmdldCgpIHNldERl
bGVnYXRlOm5pbF07CisgICAgW21fZGVsZWdhdGUuZ2V0KCkgc2V0UGFyZW50OjBdOworfQorCit2
b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TOjp1cGRhdGUoKQoreworICAgIGlmIChSZWZQ
dHI8SW1hZ2U+IHJlcHJlc2VudGF0aW9uID0gbV9jbGllbnQtPmNyZWF0ZVRleHRUcmFja1JlcHJl
c2VudGF0aW9uSW1hZ2UoKSkKKyAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlk
KXJlcHJlc2VudGF0aW9uLT5nZXRDR0ltYWdlUmVmKCldOworfQorCit2b2lkIFRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSU9TOjpzZXRDb250ZW50U2NhbGUoZmxvYXQgc2NhbGUpCit7CisgICAgW21f
bGF5ZXIuZ2V0KCkgc2V0Q29udGVudHNTY2FsZTpzY2FsZV07Cit9CisKK0ludFJlY3QgVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25JT1M6OmJvdW5kcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QoRmxvYXRSZWN0KFttX2xheWVyLmdldCgpIGJvdW5kc10pKTsKK30KKworI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMuaAppbmRleCAyNDgyYjU5M2Ji
OGVlMjhhMmMwMDU4MjliNTNiMzcxYzkyNzY3OGIyLi4wMTNjMWU1NGRmOGQ2YmViM2M1YjM3MDky
YmRjNjJjZTcxM2NkNTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29sb3JNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29sb3JNYWMuaApAQCAtMzEsMTMgKzMxLDE3IEBACiAKICNpbmNsdWRlICJDb2xvci5o
IgogCisjaWYgIVBMQVRGT1JNKElPUykKIE9CSkNfQ0xBU1MgTlNDb2xvcjsKKyNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBUaGVz
ZSBmdW5jdGlvbnMgYXNzdW1lIE5TQ29sb3JzIGFyZSBpbiBEZXZpY2VSR0IgY29sb3JzcGFjZQog
ICAgIENvbG9yIGNvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqKTsKICAgICBOU0NvbG9yICpuc0Nv
bG9yKGNvbnN0IENvbG9yJik7CisjZW5kaWYKIAogICAgIGJvb2wgdXNlc1Rlc3RNb2RlRm9jdXNS
aW5nQ29sb3IoKTsKICAgICB2b2lkIHNldFVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKGJvb2wp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAppbmRleCA0OTcxZjRkYTIzNjFlYTZlMzQ3ODMz
OTc4ODkyMTdmMTQ2NTBmMjljLi42MDM5MTlmODlmNzQ4NWU5NWQwODU0ZDYwY2I2ZmE5MDFiZmEz
Nzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29t
cGxleFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcApAQCAtMzEsNyArMzEsMTEgQEAKICNp
bmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNp
bmNsdWRlICJUZXh0UnVuLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29y
ZVRleHQvQ29yZVRleHQuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCkBAIC01NzIsNiArNTc2
LDkgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2Vz
KCkKICAgICAgICAgQ29tcGxleFRleHRSdW4mIGNvbXBsZXhUZXh0UnVuID0gKm1fY29tcGxleFRl
eHRSdW5zW3JdOwogICAgICAgICB1bnNpZ25lZCBnbHlwaENvdW50ID0gY29tcGxleFRleHRSdW4u
Z2x5cGhDb3VudCgpOwogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBj
b21wbGV4VGV4dFJ1bi5mb250RGF0YSgpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgYm9v
bCBpc0Vtb2ppID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1faXNFbW9qaTsKKyNlbmRpZgog
CiAgICAgICAgIC8vIFJlcHJlc2VudCB0aGUgaW5pdGlhbCBhZHZhbmNlIGZvciBhIHRleHQgcnVu
IGJ5IGFkanVzdGluZyB0aGUgYWR2YW5jZQogICAgICAgICAvLyBvZiB0aGUgbGFzdCBnbHlwaCBv
ZiB0aGUgcHJldmlvdXMgdGV4dCBydW4gaW4gdGhlIGdseXBoIGJ1ZmZlci4KQEAgLTYyMCw2ICs2
MjcsMTAgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFu
Y2VzKCkKICAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNl
KGNoKTsKICAgICAgICAgICAgIENHR2x5cGggZ2x5cGggPSB0cmVhdEFzU3BhY2UgPyBmb250RGF0
YS0+c3BhY2VHbHlwaCgpIDogZ2x5cGhzW2ldOwogICAgICAgICAgICAgQ0dTaXplIGFkdmFuY2Ug
PSB0cmVhdEFzU3BhY2UgPyBDR1NpemVNYWtlKHNwYWNlV2lkdGgsIGFkdmFuY2VzW2ldLmhlaWdo
dCkgOiBhZHZhbmNlc1tpXTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICBpZiAoaXNF
bW9qaSAmJiBhZHZhbmNlLndpZHRoKQorICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBm
b250RGF0YS0+d2lkdGhGb3JHbHlwaChnbHlwaCk7CisjZW5kaWYKIAogICAgICAgICAgICAgaWYg
KGNoID09ICdcdCcgJiYgbV9ydW4uYWxsb3dUYWJzKCkpCiAgICAgICAgICAgICAgICAgYWR2YW5j
ZS53aWR0aCA9IG1fZm9udC50YWJXaWR0aCgqZm9udERhdGEsIG1fcnVuLnRhYlNpemUoKSwgbV9y
dW4ueFBvcygpICsgbV90b3RhbFdpZHRoICsgd2lkdGhTaW5jZUxhc3RDb21taXQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlckNvcmVUZXh0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCmluZGV4IDQ5NjBhNGQ0ZjA2YTM3YjYx
ZWQwNjQ2N2IzMmZlYzA2MDliZjQyNmIuLjQ0YzAyOTRmZDc3YzBmZjliMjhhMzgxMWZmNzE4YjBj
Y2UxZjAxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KQEAg
LTMxLDcgKzMxLDExIEBACiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDb3JlVGV4
dC9Db3JlVGV4dC5oPgorI2Vsc2UKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxp
Y2F0aW9uU2VydmljZXMuaD4KKyNlbmRpZgogCiBAaW50ZXJmYWNlIFdlYkNhc2NhZGVMaXN0IDog
TlNBcnJheSB7CiAgICAgQHByaXZhdGUKQEAgLTI2NiwxMiArMjcwLDE3IEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY3AsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNo
ZSgpLT5nZXRDYWNoZWRGb250RGF0YShtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1l
LmdldCgpLCBmYWxzZSwgRm9udENhY2hlOjpEb05vdFJldGFpbikuZ2V0KCk7CisjaWYgIVBMQVRG
T1JNKElPUykKICAgICAgICAgICAgICAgICAgICAgLy8gQ29yZSBUZXh0IG1heSBoYXZlIHVzZWQg
YSBmb250IHRoYXQgaXMgbm90IGtub3duIHRvIE5TRm9udE1hbmFnZXIuIEluIHRoYXQgY2FzZSwg
ZmFsbCBiYWNrIG9uCiAgICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSBmb250IGFzIHJl
dHVybmVkLCBldmVuIHRob3VnaCBpdCBtYXkgbm90IGhhdmUgdGhlIGJlc3QgTlNGb250UmVuZGVy
aW5nTW9kZS4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFydW5Gb250RGF0YSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBydW5Gb250UGxhdGZvcm1EYXRhKChO
U0ZvbnQgKilydW5Gb250LCBDVEZvbnRHZXRTaXplKHJ1bkZvbnQpLCBtX2ZvbnQuZm9udERlc2Ny
aXB0aW9uKCkudXNlUHJpbnRlckZvbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBydW5G
b250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgmcnVuRm9udFBsYXRmb3Jt
RGF0YSwgRm9udENhY2hlOjpEb05vdFJldGFpbikuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAg
IH0KKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBKdXN0IGFzc2VydCBmb3Ig
bm93LCB1bnRpbCB3ZSBjYW4gZGV2aXNlIGEgYmV0dGVyIGZpeCB0aGF0IHdvcmtzIHdpdGggaU9T
LgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQocnVuRm9udERhdGEpOworI2VuZGlmCiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgcnVu
Rm9udERhdGEgIT0gbV9mb250LnByaW1hcnlGb250KCkpCiAgICAgICAgICAgICAgICAgICAgIG1f
ZmFsbGJhY2tGb250cy0+YWRkKHJ1bkZvbnREYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0KaW5kZXggMmY3MzMxNGZh
MGI5ZGM0YWRjM2QyNWQ0MzlhZGRhMThhYTkxYjc3OS4uYWM5YmMzMWY5ZGMzMzNjMDUyNWY3ODRi
NjNlMTk1OGIxNjliMTgyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0KQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAKKyNpZiAhUExBVEZPUk0oSU9T
KQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1F
X0FTX0NHR0VPTUVUUllfVFlQRVMKQEAgLTQzLDMgKzQ1LDUgQEAgRmxvYXRQb2ludDo6b3BlcmF0
b3IgTlNQb2ludCgpIGNvbnN0CiAjZW5kaWYKIAogfQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9h
dFJlY3RNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRS
ZWN0TWFjLm1tCmluZGV4IDFkNmIwNDU3ODg3ZDIxYjg5MjM0ODZhMjYyZjEzNzM1OWFmZThiNmYu
LjllZmY5YjNhYjY3ODYwNDQ0YTE2ZDllMWE3NzRhYTA4MWIyZGEzZTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFJlY3RNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1hYy5tbQpAQCAt
MjksNiArMjksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogCiBG
bG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBOU1JlY3QmIHIpIDogbV9sb2NhdGlvbihyLm9yaWdp
biksIG1fc2l6ZShyLnNpemUpCkBAIC00MSw1ICs0Miw2IEBAIEZsb2F0UmVjdDo6b3BlcmF0b3Ig
TlNSZWN0KCkgY29uc3QKIH0KIAogI2VuZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0
U2l6ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNp
emVNYWMubW0KaW5kZXggMDFlZmJlOTFkYzQ4NTkzMGUxOTI5Mzk4MjJkZWE5YTMxNzRkZGYxYi4u
MTQwMWJmY2FlMWE4ZmFmYmIxNjkyY2I4ZmQ1MTgxMTczMTQxYTEzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tCkBAIC0y
OSw2ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFQTEFURk9STShJT1Mp
CiAjaWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiAKIEZs
b2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IE5TU2l6ZSYgcykgOiBtX3dpZHRoKHMud2lkdGgpLCBt
X2hlaWdodChzLmhlaWdodCkKQEAgLTQxLDUgKzQyLDYgQEAgRmxvYXRTaXplOjpvcGVyYXRvciBO
U1NpemUoKSBjb25zdAogfQogCiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENh
Y2hlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNo
ZU1hYy5tbQppbmRleCA1OTFmZTE2NzYwMjg1ZGY2NGRjZWU3ZWNlNmU3ODA3OTVhMDBjOTY2Li43
OWNmNWMxYWNiNmNlNjU2OTFlYzcyNzU2MmI1YzRmNmEwN2M5OGFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KQEAgLTMw
LDYgKzMwLDggQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRm9udENhY2hlLmgiCiAK
KyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJTaW1wbGVG
b250RGF0YS5oIgogI2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0YS5oIgpAQCAtMjIwLDMgKzIyMiw1
IEBAIFBhc3NPd25QdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCmluZGV4IGUw
OTM2ZjNiOWI0NWE2OTk4MjNhYmQ2MDQ0N2ZhYjkwMjhhZWRkODIuLjgyYWNmZmE4NWYxZjA0YzYy
YjQ5NzE3NjY1Yjc1ODcyZmJhMjI3ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCkBAIC03Nyw3
ICs3Nyw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50CiAgICAgcmV0dXJuIGluaXRpYWxBZHZh
bmNlOwogfQogCi12b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVy
IGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4K
ICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTg2LDExICs4NiwxMyBAQCB2b2lkIEZv
bnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgRgogCiAgICAgLy8gV2UgY291bGRuJ3QgZ2VuZXJhdGUgYW55IGdseXBo
cyBmb3IgdGhlIHJ1bi4gIEdpdmUgdXAuCiAgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIERyYXcgdGhlIGds
eXBoIGJ1ZmZlciBub3cgYXQgdGhlIHN0YXJ0aW5nIHBvaW50IHJldHVybmVkIGluIHN0YXJ0WC4K
ICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoc3RhcnRYLCBwb2ludC55KCkpOwogICAgIGRyYXdH
bHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBzdGFydFBvaW50KTsKKworICAg
IHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAogdm9pZCBGb250OjpkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdApAQCAtMTQxLDYgKzE0MywxMCBAQCBjb25z
dCBTaW1wbGVGb250RGF0YSogRm9udDo6Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1
ZW5jZShjb25zdCBVQ2hhciogYwogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIGZvciAoY29uc3Qg
Rm9udERhdGEqIGZvbnREYXRhID0gZm9udERhdGFBdCgwKTsgZm9udERhdGE7IGZvbnREYXRhID0g
Zm9udERhdGFBdCgrK2kpKSB7CiAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVG
b250RGF0YSA9IGZvbnREYXRhLT5mb250RGF0YUZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAm
JiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAmJiBzaW1wbGVGb250RGF0YS0+c2hvdWxkTm90QmVV
c2VkRm9yQXJhYmljKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgogICAgICAgICBp
ZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KSB7CiAgICAgICAgICAgICBpZiAoc2ltcGxlRm9u
dERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaXNDSktJZGVvZ3JhcGhPclN5bWJvbChiYXNlQ2hhcmFjdGVyKSAmJiAh
c2ltcGxlRm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmNwcAppbmRleCBmYTIzNTU3Y2ZmNjU2ZDAwODk3NDQ5MzQ4NWU1YjNhYWE5NjNiYzc3
Li4zNzZlMGQxMjRmZTUyODg1YjgyYjYyOWQ2NzdmNWFhMTExMmJkYzc0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuY3BwCkBAIC0yMyw3ICsyMywxMSBAQAogCiAjaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lmICFQTEFURk9STShJ
T1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+
CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ZvbnRNYWMubW0KaW5kZXggOThmYjc4Y2QwMjgzMDdjN2JlMjYyZDAxYzEyMTc2
NjA5Y2E4YmM3MC4uYWY2Mjg3ZjY2MmRmYTE1M2YxNTQ4MjYwMWI3NGVhNDQ2Yzg0YjI1OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KQEAg
LTEyNCwxMiArMTI0LDEyIEBAIHN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0
aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBTCiAKICAgICBbY2F0YWxv
ZyBkcmF3R2x5cGhzOmdseXBocyBhdFBvc2l0aW9uczpwb3NpdGlvbnMuZGF0YSgpIGluQ29udGV4
dDpjb250ZXh0IHdpdGhGb250OmN0Rm9udCBjb3VudDpjb3VudCBzdHlsZVByZXNldE5hbWU6QCJf
VUlLaXROZXdMZXR0ZXJwcmVzc1N0eWxlIiBzdHlsZUNvbmZpZ3VyYXRpb246c3R5bGVDb25maWd1
cmF0aW9uIGZvcmVncm91bmRDb2xvcjpDR0NvbnRleHRHZXRGaWxsQ29sb3JBc0NvbG9yKGNvbnRl
eHQpXTsKICNlbHNlCi1VTlVTRURfUEFSQU0ocG9pbnQpOwotVU5VU0VEX1BBUkFNKGZvbnQpOwot
VU5VU0VEX1BBUkFNKGNvbnRleHQpOwotVU5VU0VEX1BBUkFNKGdseXBocyk7Ci1VTlVTRURfUEFS
QU0oYWR2YW5jZXMpOwotVU5VU0VEX1BBUkFNKGNvdW50KTsKKyAgICBVTlVTRURfUEFSQU0ocG9p
bnQpOworICAgIFVOVVNFRF9QQVJBTShmb250KTsKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7
CisgICAgVU5VU0VEX1BBUkFNKGdseXBocyk7CisgICAgVU5VU0VEX1BBUkFNKGFkdmFuY2VzKTsK
KyAgICBVTlVTRURfUEFSQU0oY291bnQpOwogI2VuZGlmCiB9CiAKQEAgLTE3OSw3ICsxNzksNyBA
QCBzdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBjb25zdCBTaW1wbGVGb250RGF0YQogICAgIH0KIH0KIAotdm9pZCBGb250OjpkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBGb250OjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSBjb25zdAogewogICAgIGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpOwogICAgIGlmICghcGxh
dGZvcm1EYXRhLnNpemUoKSkKQEAgLTIyMSwxMSArMjIxLDEzIEBAIHZvaWQgRm9udDo6ZHJhd0ds
eXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
LCBjb25zCiAgICAgICAgIGNoYW5nZUZvbnRTbW9vdGhpbmcgPSB0cnVlOwogICAgIH0KIAorI2lm
ICFQTEFURk9STShJT1MpCiAgICAgYm9vbCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcg
PSBmYWxzZTsKICAgICBpZiAoY2hhbmdlRm9udFNtb290aGluZykgewogICAgICAgICBvcmlnaW5h
bFNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB3a0NHQ29udGV4dEdldFNob3VsZFNtb290aEZvbnRz
KGNnQ29udGV4dCk7CiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29u
dGV4dCwgc2hvdWxkU21vb3RoRm9udHMpOwogICAgIH0KKyNlbmRpZgogCiAjaWYgIVBMQVRGT1JN
KElPUykKICAgICBOU0ZvbnQqIGRyYXdGb250OwpAQCAtMjQ2LDkgKzI0OCwzOCBAQCB2b2lkIEZv
bnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgY29ucwogICAgIENHQ29udGV4dFNldEZvbnQoY2dDb250ZXh0LCBwbGF0Zm9y
bURhdGEuY2dGb250KCkpOwogCiAgICAgYm9vbCB1c2VMZXR0ZXJwcmVzc0VmZmVjdCA9IHNob3Vs
ZFVzZUxldHRlcnByZXNzRWZmZWN0KCpjb250ZXh0KTsKKyAgICBGbG9hdFBvaW50IHBvaW50ID0g
YW5jaG9yUG9pbnQ7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGZsb2F0IGZvbnRTaXplID0gcGxh
dGZvcm1EYXRhLnNpemUoKTsKICAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSB1c2VMZXR0
ZXJwcmVzc0VmZmVjdCB8fCBwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSA/IENHQWZm
aW5lVHJhbnNmb3JtSWRlbnRpdHkgOiBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShmb250U2l6
ZSwgZm9udFNpemUpOworICAgIGlmIChwbGF0Zm9ybURhdGEubV9pc0Vtb2ppKSB7CisgICAgICAg
IGlmICghY29udGV4dC0+ZW1vamlEcmF3aW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIC8vIE1pbWljIHRoZSBwb3NpdGlvaW5pbmcgb2Ygbm9uLWJpdG1hcCBnbHlw
aHMsIHdoaWNoIGFyZSBub3Qgc3VicGl4ZWwtcG9zaXRpb25lZC4KKyAgICAgICAgcG9pbnQuc2V0
WShjZWlsZihwb2ludC55KCkpKTsKKworICAgICAgICAvLyBFbW9qaSBnbHlwaHMgc25hcCB0byB0
aGUgQ1NTIHBpeGVsIGdyaWQuCisgICAgICAgIHBvaW50LnNldFgoZmxvb3JmKHBvaW50LngoKSkp
OworCisgICAgICAgIC8vIEVtb2ppIGdseXBocyBhcmUgb2Zmc2V0IG9uZSBDU1MgcGl4ZWwgdG8g
dGhlIHJpZ2h0LgorICAgICAgICBwb2ludC5tb3ZlKDEsIDApOworCisgICAgICAgIC8vIEVtb2pp
IGdseXBocyBhcmUgb2Zmc2V0IHZlcnRpY2FsbHkgYmFzZWQgb24gZm9udCBzaXplLgorICAgICAg
ICBmbG9hdCB5ID0gcG9pbnQueSgpOworICAgICAgICBpZiAoZm9udFNpemUgPD0gMTUpIHsKKyAg
ICAgICAgICAgIC8vIFVuZG8gQ29yZSBUZXh0J3MgeSBhZGp1c3RtZW50LgorICAgICAgICAgICAg
c3RhdGljIGZsb2F0IHlBZGp1c3RtZW50RmFjdG9yID0gaW9zRXhlY3V0YWJsZVdhc0xpbmtlZE9u
T3JBZnRlclZlcnNpb24od2tJT1NTeXN0ZW1WZXJzaW9uXzZfMCkgPyAuMTkgOiAuMTsKKyAgICAg
ICAgICAgIHBvaW50LnNldFkoZmxvb3JmKHkgLSB5QWRqdXN0bWVudEZhY3RvciAqIChmb250U2l6
ZSArIDIpICsgMikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGZvbnRTaXpl
IDwgMjYpCisgICAgICAgICAgICAgICAgeSAtPSAuMzVmICogZm9udFNpemUgLSAxMDsKKworICAg
ICAgICAgICAgLy8gVW5kbyBDb3JlIFRleHQncyB5IGFkanVzdG1lbnQuCisgICAgICAgICAgICBz
dGF0aWMgZmxvYXQgeUFkanVzdG1lbnQgPSBpb3NFeGVjdXRhYmxlV2FzTGlua2VkT25PckFmdGVy
VmVyc2lvbih3a0lPU1N5c3RlbVZlcnNpb25fNl8wKSA/IDMuOCA6IDI7CisgICAgICAgICAgICBw
b2ludC5zZXRZKGZsb29yZih5IC0geUFkanVzdG1lbnQpKTsKKyAgICAgICAgfQorICAgIH0KICNl
bHNlCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JZGVu
dGl0eTsKICAgICBpZiAoZHJhd0ZvbnQgJiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFwRm9u
dCgpKQpAQCAtMzAzLDcgKzMzNCwxMSBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29ucwogICAgICAg
ICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3Qg
YXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgog
ICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWln
aHQoKSAqIChjb250ZXh0LT5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKICAg
ICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFk
b3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0
aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUds
eXBocyk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZz
ZXQpCisjZWxzZQorICAgICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCAmJiAhcGxhdGZvcm1E
YXRhLm1faXNFbW9qaSkKKyNlbmRpZgogICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhGbG9hdFBvaW50KHNoYWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4
dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgc3RhdGljX2Nh
c3Q8Y29uc3QgQ0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMp
OwogICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBmaWxsQ29sb3JTcGFj
ZSk7CiAgICAgfQpAQCAtMzEyLDcgKzM0NywxMSBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29ucwog
ICAgICAgICBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwg
Y2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0IENH
U2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKICAgICBlbHNl
CiAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwg
Z2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlw
aEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUdseXBocyk7CisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKKyNlbHNlCisgICAgaWYgKHN5bnRoZXRpY0Jv
bGRPZmZzZXQgJiYgIXBsYXRmb3JtRGF0YS5tX2lzRW1vamkpCisjZW5kaWYKICAgICAgICAgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRP
ZmZzZXQsIHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZy
b20pLCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9t
KSksIG51bUdseXBocyk7CiAKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFj
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VUcmVl
Tm9kZU1hYy5jcHAKaW5kZXggYzBlNTRjYjQ4OThkYjc5NjA3OWQ5ZDI5MWNhNDcxN2Y1MjAwNjVj
NS4uNjEyYjQ1M2ZlZmE1YjNlMTY1NzYxZmM0ZGE2ZDNhNzNmZjU1MmIwZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFj
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdl
VHJlZU5vZGVNYWMuY3BwCkBAIC0zMiw3ICszMiwxMyBAQAogI2luY2x1ZGUgIkZvbnQuaCIKICNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZh
Y2UuaCIKKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dG
b250VW5pY29kZVN1cHBvcnQuaD4KKyNpbmNsdWRlIDxDb3JlVGV4dC9DVEZvbnRQcml2Lmg+Cisj
aW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTYzLDcgKzY5LDE2IEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBiCiAKICAgICBW
ZWN0b3I8Q0dHbHlwaCwgNTEyPiBnbHlwaHMoYnVmZmVyTGVuZ3RoKTsKICAgICBpZiAoIXNob3Vs
ZFVzZUNvcmVUZXh0KGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpIHsKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgICAgICB3a0dldEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpLmNnRm9udCgpLCBidWZmZXIsIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0
aCk7CisjZWxzZQorICAgICAgICAvLyBXZSBwYXNzIGluIGVpdGhlciAyNTYgb3IgNTEyIFVURi0x
NiBjaGFyYWN0ZXJzOiAyNTYgZm9yIFUrRkZGRiBhbmQgbGVzcywgNTEyIChkb3VibGUgY2hhcmFj
dGVyIHN1cnJvZ2F0ZXMpCisgICAgICAgIC8vIGZvciBVKzEwMDAwIGFuZCBhYm92ZS4gSXQgaXMg
aW5kZWVkIHBvc3NpYmxlIHRvIGdldCBiYWNrIDUxMiBnbHlwaHMgYmFjayBmcm9tIHRoZSBBUEks
IHNvIHRoZSBnbHlwaCBidWZmZXIKKyAgICAgICAgLy8gd2UgcGFzcyBpbiBtdXN0IGJlIDUxMi4g
SWYgd2UgZ2V0IGJhY2sgbW9yZSB0aGFuIDI1NiBnbHlwaHMgdGhvdWdoIHdlJ2xsIGlnbm9yZSBh
bGwgdGhlIG9uZXMgYWZ0ZXIgMjU2LAorICAgICAgICAvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVu
IGFzIHRoZSBvbmx5IHRpbWUgd2UgcGFzcyBpbiA1MTIgY2hhcmFjdGVycyBpcyB3aGVuIHRoZXkg
YXJlIHN1cnJvZ2F0ZXMuCisgICAgICAgIC8vIEZJWE1FOiBVc2Ugd2tHZXRHbHlwaHNGb3JDaGFy
YWN0ZXJzKCkgaW5zdGVhZCBvZiBDR0ZvbnRHZXRHbHlwaHNGb3JVbmljaGFycygpIG9uY2Ugd2Ug
dXBkYXRlIFdlYktpdCBTeXN0ZW0gSW50ZXJmYWNlIG9uIGlPUy4KKyAgICAgICAgQ0dGb250R2V0
R2x5cGhzRm9yVW5pY2hhcnMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBidWZm
ZXIsIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisjZW5kaWYKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIWdseXBo
c1tpXSkKICAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAw
LCAwKTsKQEAgLTE0NCw2ICsxNTksNyBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVG
b250RGF0YSogcnVuU2ltcGxlID0gZm9udERhdGEtPmdldENvbXBvc2l0ZUZvbnRSZWZlcmVuY2VG
b250RGF0YSgoTlNGb250ICopcnVuRm9udCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChydW5T
aW1wbGUpIHsKQEAgLTE1OCw2ICsxNzQsNyBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0K
aW5kZXggOTZhNjMxOTRlYWU2MDYzN2MzNDZlNDg2NjBkY2NlODc2NzNjNjI2Yy4uZTQ0YTEzZjRh
NTcwODNlYTlkN2I3MzAzYTNhZDFlMjZiMWRkNjc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5t
bQpAQCAtMjgsNiArMjgsOSBAQAogI2lmIFVTRSgzRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNESU9TLmgiCisjZW5kaWYKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAK
QEAgLTM5LDggKzQyLDE1IEBACiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaWYgUExB
VEZPUk0oSU9TKQorI2ltcG9ydCA8T3BlbkdMRVMvRVMyL2dsZXh0Lmg+CisjaW1wb3J0IDxPcGVu
R0xFUy9FQUdMLmg+CisjaW1wb3J0IDxPcGVuR0xFUy9FQUdMRHJhd2FibGUuaD4KKyNpbXBvcnQg
PFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2Vsc2UKICNpbmNsdWRlIDxPcGVuR0wvQ0dMUmVu
ZGVyZXJzLmg+CiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CisjZW5kaWYKICNpbmNsdWRlICJXZWJH
TExheWVyLmgiCiAjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0Fy
cmF5QnVmZmVyLmg+CkBAIC02MSw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICB+R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKCkgeyB9CiB9OwogCisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyB2b2lk
IHNldFBpeGVsRm9ybWF0KFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4mIGF0dHJpYnMs
IGludCBjb2xvckJpdHMsIGludCBkZXB0aEJpdHMsIGJvb2wgYWNjZWxlcmF0ZWQsIGJvb2wgc3Vw
ZXJzYW1wbGUsIGJvb2wgY2xvc2VzdCwgYm9vbCBhbnRpYWxpYXMpCiB7CiAgICAgYXR0cmlicy5j
bGVhcigpOwpAQCAtOTMsNiArMTA0LDcgQEAgc3RhdGljIHZvaWQgc2V0UGl4ZWxGb3JtYXQoVmVj
dG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPiYgYXR0cmlicywgaW50IGNvbG9yQmkKICAgICAg
ICAgCiAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1
dGU+KDApKTsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiBQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiB7CkBAIC0xMDcsNiArMTE5LDkgQEAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICA6IG1fY3VycmVudFdpZHRoKDApCiAgICAgLCBtX2N1
cnJlbnRIZWlnaHQoMCkKICAgICAsIG1fY29udGV4dE9iaigwKQorI2lmIFBMQVRGT1JNKElPUykK
KyAgICAsIG1fY29tcGlsZXIoU0hfRVNTTF9PVVRQVVQpCisjZW5kaWYKICAgICAsIG1fYXR0cnMo
YXR0cnMpCiAgICAgLCBtX3RleHR1cmUoMCkKICAgICAsIG1fY29tcG9zaXRvclRleHR1cmUoMCkK
QEAgLTEyMiw2ICsxMzcsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICBVTlVTRURf
UEFSQU0oaG9zdFdpbmRvdyk7CiAgICAgVU5VU0VEX1BBUkFNKHJlbmRlclN0eWxlKTsKIAorI2lm
IFBMQVRGT1JNKElPUykKKyAgICBtX2NvbnRleHRPYmogPSBbW0VBR0xDb250ZXh0IGFsbG9jXSBp
bml0V2l0aEFQSTprRUFHTFJlbmRlcmluZ0FQSU9wZW5HTEVTMl07CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisjZWxzZQogICAgIFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0
cmliczsKICAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9iaiA9IDA7CiAgICAgR0xp
bnQgbnVtUGl4ZWxGb3JtYXRzID0gMDsKQEAgLTE4NCwxMiArMjAzLDE2IEBAIEdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycywgSG9zdFdpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CisjZW5k
aWYgLy8gIVBMQVRGT1JNKElPUykKICAgICAKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAog
ICAgIC8vIENyZWF0ZSB0aGUgV2ViR0xMYXllcgogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwogICAgICAgICBtX3dlYkdMTGF5ZXIgPSBhZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10g
aW5pdFdpdGhHcmFwaGljc0NvbnRleHQzRDp0aGlzXSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
ICAgICBbbV93ZWJHTExheWVyLmdldCgpIHNldE9wYXF1ZTowXTsKKyNlbmRpZgogI2lmbmRlZiBO
REVCVUcKICAgICAgICAgW21fd2ViR0xMYXllci5nZXQoKSBzZXROYW1lOkAiV2ViR0wgTGF5ZXIi
XTsKICNlbmRpZiAgICAKQEAgLTE5OCw2ICsyMjEsOSBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RX
aQogICAgIGlmICh1c2VNdWx0aXNhbXBsaW5nKQogICAgICAgICA6OmdsRW5hYmxlKEdMX01VTFRJ
U0FNUExFKTsKICAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgOjpnbEdlblJlbmRlcmJ1ZmZl
cnMoMSwgJm1fdGV4dHVyZSk7CisjZWxzZQogICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gcmVu
ZGVyIGludG8KICAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAgICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CkBAIC0yMTIsNiArMjM4LDcgQEAg
R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVApOwogICAgIDo6Z2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUCk7CiAgICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworI2VuZGlmCiAgICAgCiAgICAgLy8gY3JlYXRl
IGFuIEZCTwogICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKQEAgLTI1Myw4
ICsyODAsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKIAogICAgIG1fY29tcGlsZXIuc2V0
UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKICAgICAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
IDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CiAgICAgOjpnbEVuYWJs
ZShHTF9QT0lOVF9TUFJJVEUpOworI2VuZGlmCiAKICAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAw
LCAwKTsKIH0KQEAgLTI2Miw5ICsyOTEsMTUgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKIEdy
YXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogewogICAgIGlmIChtX2NvbnRl
eHRPYmopIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV90ZXh0dXJlKTsKKyAgICAg
ICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2Vs
c2UKICAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICAgICAg
OjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogICAgICAgICA6OmdsRGVsZXRlVGV4
dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlmCiAgICAgICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcykgewogICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQo
MSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CiAgICAgICAgICAgICBpZiAobV9hdHRycy5z
dGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCkBAIC0yNzUsMjIgKzMxMCw1MSBAQCBHcmFwaGljc0Nv
bnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICAgICAgICAgICAgICA6OmdsRGVsZXRl
UmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwogICAgICAgICB9CiAg
ICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgICAgIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDowXTsKKyAgICAg
ICAgW3N0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obV9jb250ZXh0T2JqKSByZWxlYXNlXTsKKyNl
bHNlCiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwogICAgICAgICBDR0xEZXN0cm95
Q29udGV4dChtX2NvbnRleHRPYmopOworI2VuZGlmCiAgICAgfQogfQogCisjaWYgUExBVEZPUk0o
SU9TKQorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21E
cmF3YWJsZShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgW21fd2Vi
R0xMYXllci5nZXQoKSBzZXRCb3VuZHM6Q0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KV07
CisgICAgcmV0dXJuIFttX2NvbnRleHRPYmogcmVuZGVyYnVmZmVyU3RvcmFnZTpHTF9SRU5ERVJC
VUZGRVIgZnJvbURyYXdhYmxlOnN0YXRpY19jYXN0PE5TT2JqZWN0PEVBR0xEcmF3YWJsZT4qPiht
X3dlYkdMTGF5ZXIuZ2V0KCkpXTsKK30KKyNlbmRpZgorCiBib29sIEdyYXBoaWNzQ29udGV4dDNE
OjptYWtlQ29udGV4dEN1cnJlbnQoKQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKFtFQUdMQ29udGV4
dCBjdXJyZW50Q29udGV4dF0gIT0gbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm4gW0VBR0xD
b250ZXh0IHNldEN1cnJlbnRDb250ZXh0OnN0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obV9jb250
ZXh0T2JqKV07CisjZWxzZQogICAgIENHTENvbnRleHRPYmogY3VycmVudENvbnRleHQgPSBDR0xH
ZXRDdXJyZW50Q29udGV4dCgpOwogICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBtX2NvbnRleHRP
YmopCiAgICAgICAgIHJldHVybiBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopID09
IGtDR0xOb0Vycm9yOworI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBQTEFURk9S
TShJT1MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZsdXNoKCk7CisgICAgOjpnbEJpbmRSZW5kZXJidWZm
ZXIoR0xfUkVOREVSQlVGRkVSLCBtX3RleHR1cmUpOworICAgIFtzdGF0aWNfY2FzdDxFQUdMQ29u
dGV4dCo+KG1fY29udGV4dE9iaikgcHJlc2VudFJlbmRlcmJ1ZmZlcjpHTF9SRU5ERVJCVUZGRVJd
OworICAgIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpuaWxdOworfQorI2VuZGlmCisK
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogewogICAg
IHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCmluZGV4IDJjODM4NWQxZWE2ZTI2NjQ0
ODAwODFkOTBlNDM3YTM2ZDc2OGU1MmIuLjUzM2ViMGU2YTg1ZTJlMTAzYjE0YmFmODhhODAwYjA4
MjY1ZjNjY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9HcmFwaGljc0NvbnRleHRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQpAQCAtMjgsMTAgKzI4LDE5IEBACiAKICNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVDRy5oIgorI2lmIFVTRShBUFBLSVQpCiAjaW1wb3J0IDxBcHBLaXQvQXBwS2l0
Lmg+CisjZW5kaWYKICNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAorI2lmIFBMQVRGT1JN
KElPUykKKyNpbXBvcnQgIkNvbG9yLmgiCisjaW1wb3J0ICJXS0dyYXBoaWNzLmgiCisjZW5kaWYK
KworI2lmICFQTEFURk9STShJT1MpCiAjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQuaCIKKyNlbmRpZgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogCiBAY2xh
c3MgTlNDb2xvcjsKQEAgLTQ1LDYgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gY2Fs
bHMgaW4gdGhpcyBmaWxlIGFyZSBhbGwgZXhjZXB0aW9uLXNhZmUsIHNvIHdlIGRvbid0IGJsb2Nr
CiAvLyBleGNlcHRpb25zIGZvciB0aG9zZS4KIAorI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMg
dm9pZCBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhS
ZWYgZm9jdXNSaW5nUGF0aCwgQ0dDb2xvclJlZiBjb2xvciwgaW50IHJhZGl1cykKIHsKICAgICBD
R0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CkBAIC02NCw5ICs3NCwxMSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBpbnQgd2lkdGgsIGlu
dCAvKm9mZnNldCovLAogCiAgICAgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dChwbGF0Zm9ybUNvbnRl
eHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgY29sb3JSZWYsIHJhZGl1cyk7CiB9CisjZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTgwLDkgKzkyLDE2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGludCB3aWR0aCwgaW50CiAgICAgICAgIENHUGF0aEFkZFJlY3QoZm9jdXNSaW5nUGF0aC5nZXQo
KSwgMCwgQ0dSZWN0SW5zZXQocmVjdHNbaV0sIC1vZmZzZXQsIC1vZmZzZXQpKTsKIAogICAgIGRy
YXdGb2N1c1JpbmdUb0NvbnRleHQocGxhdGZvcm1Db250ZXh0KCksIGZvY3VzUmluZ1BhdGguZ2V0
KCksIGNvbG9yUmVmLCByYWRpdXMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVjdHMpOwor
ICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAg
VU5VU0VEX1BBUkFNKGNvbG9yKTsKKyNlbmRpZgogfQogCiAKKyNpZiAhUExBVEZPUk0oSU9TKQog
c3RhdGljIE5TQ29sb3IqIG1ha2VQYXR0ZXJuQ29sb3IoTlNTdHJpbmcqIGZpcnN0Q2hvaWNlTmFt
ZSwgTlNTdHJpbmcqIHNlY29uZENob2ljZU5hbWUsIE5TQ29sb3IqIGRlZmF1bHRDb2xvciwgYm9v
bCYgdXNpbmdEb3QpCiB7CiAgICAgLy8gRXZlbnR1YWxseSB3ZSBzaG91bGQgYmUgYWJsZSB0byBn
ZXQgcmlkIG9mIHRoZSBzZWNvbmRDaG9pY2VOYW1lLiBGb3IgdGhlIHRpbWUgYmVpbmcgd2UgbmVl
ZCBib3RoIHRvIGtlZXAKQEAgLTk4LDYgKzExNywxNSBAQCBzdGF0aWMgTlNDb2xvciogbWFrZVBh
dHRlcm5Db2xvcihOU1N0cmluZyogZmlyc3RDaG9pY2VOYW1lLCBOU1N0cmluZyogc2Vjb25kQ2hv
aQogICAgICAgICBjb2xvciA9IGRlZmF1bHRDb2xvcjsKICAgICByZXR1cm4gY29sb3I7CiB9Cisj
ZWxzZQorc3RhdGljIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IGNyZWF0ZURvdFBhdHRlcm4oYm9v
bCYgdXNpbmdEb3QsIGNvbnN0IGNoYXIqIHJlc291cmNlTmFtZSkKK3sKKyAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKFdLR3JhcGhpY3NDcmVhdGVJbWFnZUZyb21CdW5k
bGVXaXRoTmFtZShyZXNvdXJjZU5hbWUpKTsKKyAgICBBU1NFUlQoaW1hZ2UpOyAvLyBpZiBpbWFn
ZSBpcyBub3QgYXZhaWxhYmxlLCB3ZSB3YW50IHRvIGtub3cKKyAgICB1c2luZ0RvdCA9IHRydWU7
CisgICAgcmV0dXJuIGFkb3B0Q0YoV0tDcmVhdGVQYXR0ZXJuRnJvbUNHSW1hZ2UoaW1hZ2UuZ2V0
KCkpKTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiBzdGF0aWMgTlNDb2xvciAqc3Bl
bGxpbmdQYXR0ZXJuQ29sb3IgPSBudWxscHRyOwogc3RhdGljIE5TQ29sb3IgKmdyYW1tYXJQYXR0
ZXJuQ29sb3IgPSBudWxscHRyOwpAQCAtMTIxLDIwICsxNDksMzEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHcKICAgICBmbG9hdCBwYXR0ZXJuV2lkdGggPSBjTWlzc3BlbGxpbmdMaW5lUGF0dGVy
bldpZHRoOwogCiAgICAgYm9vbCB1c2luZ0RvdDsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIE5T
Q29sb3IgKnBhdHRlcm5Db2xvcjsKKyNlbHNlCisgICAgQ0dQYXR0ZXJuUmVmIGRvdFBhdHRlcm47
CisjZW5kaWYKICAgICBzd2l0Y2ggKHN0eWxlKSB7CiAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJr
ZXJTcGVsbGluZ0xpbmVTdHlsZToKICAgICAgICAgewogICAgICAgICAgICAgLy8gQ29uc3RhbnRz
IGZvciBzcGVsbGluZyBwYXR0ZXJuIGNvbG9yLgogICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNp
bmdEb3RGb3JTcGVsbGluZyA9IGZhbHNlOworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgICAg
ICBpZiAoIXNwZWxsaW5nUGF0dGVybkNvbG9yKQogICAgICAgICAgICAgICAgIHNwZWxsaW5nUGF0
dGVybkNvbG9yID0gW21ha2VQYXR0ZXJuQ29sb3IoQCJOU1NwZWxsaW5nRG90IiwgQCJTcGVsbGlu
Z0RvdCIsIFtOU0NvbG9yIHJlZENvbG9yXSwgdXNpbmdEb3RGb3JTcGVsbGluZykgcmV0YWluXTsK
ICAgICAgICAgICAgIHVzaW5nRG90ID0gdXNpbmdEb3RGb3JTcGVsbGluZzsKICAgICAgICAgICAg
IHBhdHRlcm5Db2xvciA9IHNwZWxsaW5nUGF0dGVybkNvbG9yOworI2Vsc2UKKyAgICAgICAgICAg
IHN0YXRpYyBDR1BhdHRlcm5SZWYgc3BlbGxpbmdQYXR0ZXJuID0gY3JlYXRlRG90UGF0dGVybih1
c2luZ0RvdEZvclNwZWxsaW5nLCAiU3BlbGxpbmdEb3QiKS5sZWFrUmVmKCk7CisgICAgICAgICAg
ICBkb3RQYXR0ZXJuID0gc3BlbGxpbmdQYXR0ZXJuOworI2VuZGlmCisgICAgICAgICAgICB1c2lu
Z0RvdCA9IHVzaW5nRG90Rm9yU3BlbGxpbmc7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyR3JhbW1hckxpbmVTdHlsZToKICAgICAgICAg
eworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICAvLyBDb25zdGFudHMgZm9yIGdyYW1t
YXIgcGF0dGVybiBjb2xvci4KICAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yR3Jh
bW1hciA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCFncmFtbWFyUGF0dGVybkNvbG9yKQpAQCAt
MTQyLDggKzE4MSwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdwogICAgICAgICAgICAgdXNp
bmdEb3QgPSB1c2luZ0RvdEZvckdyYW1tYXI7CiAgICAgICAgICAgICBwYXR0ZXJuQ29sb3IgPSBn
cmFtbWFyUGF0dGVybkNvbG9yOwogICAgICAgICAgICAgYnJlYWs7CisjZWxzZQorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisjZW5kaWYKICAg
ICAgICAgfQotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBQTEFURk9S
TShNQUMpCiAgICAgICAgIC8vIFRvIHN1cHBvcnQgY29ycmVjdGlvbiBwYW5lbC4KICAgICAgICAg
Y2FzZSBEb2N1bWVudE1hcmtlckF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnRMaW5lU3R5bGU6CiAg
ICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJEaWN0YXRpb25BbHRlcm5hdGl2ZXNMaW5lU3R5bGU6
CkBAIC0xNTcsNyArMjAwLDIxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogI2VuZGlmCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBj
YXNlIFRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNMaW5lU3R5bGU6
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yRGljdGF0aW9u
UGhyYXNlV2l0aEFsdGVybmF0aXZlcyA9IGZhbHNlOworICAgICAgICAgICAgc3RhdGljIENHUGF0
dGVyblJlZiBkaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzUGF0dGVybiA9IGNyZWF0ZURv
dFBhdHRlcm4odXNpbmdEb3RGb3JEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCAiRGlj
dGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc0RvdCIpLmxlYWtSZWYoKTsKKyAgICAgICAgICAg
IGRvdFBhdHRlcm4gPSBkaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzUGF0dGVybjsKKyAg
ICAgICAgICAgIHVzaW5nRG90ID0gdXNpbmdEb3RGb3JEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJu
YXRpdmVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCiAgICAgICAgIGRlZmF1bHQ6CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAg
Ly8gRklYTUU6IFNob3VsZCByZW1vdmUgZGVmYXVsdCBjYXNlIHNvIHdlIGdldCBjb21waWxlLXRp
bWUgZXJyb3JzLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTE4Miwy
MCArMjM5LDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3CiAgICAgLy8gZm9yIHRyYW5zZm9y
bXMuCiAKICAgICAvLyBEcmF3IHVuZGVybGluZS4KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQodGhpcyk7CiAgICAgTlNHcmFw
aGljc0NvbnRleHQgKmN1cnJlbnRDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRD
b250ZXh0XTsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IChDR0NvbnRleHRSZWYpW2N1cnJl
bnRDb250ZXh0IGdyYXBoaWNzUG9ydF07CisjZWxzZQorICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CisjZW5kaWYKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNv
bnRleHQpOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBbcGF0dGVybkNvbG9yIHNldF07Cisj
ZWxzZQorICAgIFdLU2V0UGF0dGVybihjb250ZXh0LCBkb3RQYXR0ZXJuLCBZRVMsIFlFUyk7Cisj
ZW5kaWYKIAogICAgIHdrU2V0UGF0dGVyblBoYXNlSW5Vc2VyU3BhY2UoY29udGV4dCwgb2Zmc2V0
UG9pbnQpOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBOU1JlY3RGaWxsVXNpbmdPcGVyYXRp
b24oTlNNYWtlUmVjdChvZmZzZXRQb2ludC54KCksIG9mZnNldFBvaW50LnkoKSwgd2lkdGgsIHBh
dHRlcm5IZWlnaHQpLCBOU0NvbXBvc2l0ZVNvdXJjZU92ZXIpOworI2Vsc2UKKyAgICBXS1JlY3RG
aWxsVXNpbmdPcGVyYXRpb24oY29udGV4dCwgQ0dSZWN0TWFrZShvZmZzZXRQb2ludC54KCksIG9m
ZnNldFBvaW50LnkoKSwgd2lkdGgsIHBhdHRlcm5IZWlnaHQpLCBrQ0dDb21wb3NpdGVTb3Zlcik7
CisjZW5kaWYKICAgICAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQog
CisjaWYgIVBMQVRGT1JNKElPUykKIENHQ29sb3JTcGFjZVJlZiBsaW5lYXJSR0JDb2xvclNwYWNl
UmVmKCkKIHsKICAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIGxpbmVhclNSR0JTcGFjZSA9IDA7
CkBAIC0yMTUsNSArMjg1LDYgQEAgQ0dDb2xvclNwYWNlUmVmIGxpbmVhclJHQkNvbG9yU3BhY2VS
ZWYoKQogCiAgICAgcmV0dXJuIGxpbmVhclNSR0JTcGFjZTsKIH0KKyNlbmRpZgogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCmluZGV4IGRj
YjI2OTQ2OTRkOWIyNTBlY2IyZmNmZmRhY2RiMjM3NDJlY2I2ODcuLmEwZDZlZWVlZDNjNGRiMzNl
YWJkOTI2MWNiY2ZhNDM1YWQyZDZiNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCkBAIC0xOCw2ICsxOCw4IEBACiAgKgogICovCiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQorCiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkljb24uaCIK
IApAQCAtODIsMyArODQsNSBAQCB2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIH0KIAogfQorCisjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9J
bWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1h
Yy5tbQppbmRleCAyNTFmNTc0OGJmOTAxZDRmYjg0NjlmYzNmNzBlNDk3YjNhYmI0N2QzLi4xMjA0
NThjMzMxMTU5MWY2YzAyYjYzMDU3N2RhY2UzMDY5NDM4M2E1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCkBAIC0zNyw2ICszNywxOCBA
QAogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVCdW5kbGVGaW5kZXIKIEBlbmQKIAorI2lmIFBMQVRG
T1JNKElPUykKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisKKyNpbXBvcnQgPENvcmVHcmFwaGlj
cy9Db3JlR3JhcGhpY3MuaD4KKyNpbXBvcnQgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2ltcG9ydCA8
TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgorCitTT0ZUX0xJTktfRlJB
TUVXT1JLKE1vYmlsZUNvcmVTZXJ2aWNlcykKK1NPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3Jl
U2VydmljZXMsIGtVVFR5cGVUSUZGLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1VUVHlwZVRJRkYg
Z2V0a1VUVHlwZVRJRkYoKQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBC
aXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpCkBAIC00NCw3ICs1Niw5IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQogICAgIGlmIChtX2ZyYW1l
cy5zaXplKCkgIT0gMSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBtX25zSW1hZ2UgPSAwOworI2VuZGlmCiAgICAgbV90aWZmUmVwID0gMDsKIH0KIApAQCAtMTAz
LDYgKzExNyw3IEBAIENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9u
KCkKICAgICByZXR1cm4gbV90aWZmUmVwLmdldCgpOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykK
IE5TSW1hZ2UqIEJpdG1hcEltYWdlOjpnZXROU0ltYWdlKCkKIHsKICAgICBpZiAobV9uc0ltYWdl
KQpAQCAtMTE1LDUgKzEzMCw2IEBAIE5TSW1hZ2UqIEJpdG1hcEltYWdlOjpnZXROU0ltYWdlKCkK
ICAgICBtX25zSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhEYXRhOihO
U0RhdGEqKWRhdGFdKTsKICAgICByZXR1cm4gbV9uc0ltYWdlLmdldCgpOwogfQorI2VuZGlmCiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQ
b2ludE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQb2lu
dE1hYy5tbQppbmRleCA3YTJlNzMwZWQ4ZTZiNzQ5NjU2ZjU2Y2FmZGUwZTcxMTQ2NjlkZjhjLi5j
MjljM2FlODY0ZDM4YWY3OWRjYzRhZTFjYmJjNWI0OWRhYzE2YTViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFBvaW50TWFjLm1tCkBAIC0yOCw2
ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFQTEFURk9STShJT1MpCiAj
aWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiAKIEludFBv
aW50OjpJbnRQb2ludChjb25zdCBOU1BvaW50JiBwKSA6IG1feChzdGF0aWNfY2FzdDxpbnQ+KHAu
eCkpLCBtX3koc3RhdGljX2Nhc3Q8aW50PihwLnkpKQpAQCAtNDAsNSArNDEsNiBAQCBJbnRQb2lu
dDo6b3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0CiB9CiAKICNlbmRpZgorI2VuZGlmIC8vICFQTEFU
Rk9STShJT1MpCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9JbnRSZWN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ludFJlY3RNYWMubW0KaW5kZXggNzM4NjE4YTE5ODNhYzc3NWMzNTk4YTU2MzQ1Yjk0ZGFl
NGIyNmExNC4uNzc0YTBiYTcwNGVlN2Q1ODNhZjhlMDQwMmI5NzFhYzM4ZjQzYmNhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWMubW0K
QEAgLTI4LDYgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIVBMQVRGT1JN
KElPUykKICNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMK
IAogSW50UmVjdDo6b3BlcmF0b3IgTlNSZWN0KCkgY29uc3QKQEAgLTQ1LDUgKzQ2LDYgQEAgSW50
UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IE5TUmVjdCYgcmVjdCkKIH0KIAogI2VuZGlmCisj
ZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ludFNpemVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
SW50U2l6ZU1hYy5tbQppbmRleCBjN2RjZDg4Yzg4ZTA3MTRjYWUxNTg2MzFhZThmMzMxOWIzZGNi
ZDZiLi45YTQ3NjY1MDlmYjNjZTQ2ODM0ODgxYTVjNmY4MzE0MjBmYThmOWNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50U2l6ZU1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50U2l6ZU1hYy5tbQpAQCAt
MjgsNiArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogCiBJ
bnRTaXplOjpJbnRTaXplKGNvbnN0IE5TU2l6ZSYgcykgOiBtX3dpZHRoKHN0YXRpY19jYXN0PGlu
dD4ocy53aWR0aCkpLCBtX2hlaWdodChzdGF0aWNfY2FzdDxpbnQ+KHMuaGVpZ2h0KSkKQEAgLTQw
LDUgKzQxLDYgQEAgSW50U2l6ZTo6b3BlcmF0b3IgTlNTaXplKCkgY29uc3QKIH0KIAogI2VuZGlm
CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJveHkuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByb3h5LmgKaW5kZXggYzU4NmZi
ODZmZWZhNDA2ODBmYTk1YTIzNTc3NjIzZDAzYTEyOWJiYi4uYzQxZThjZjg1MjNiZjU5NWFmZDk5
NWQzOTkzN2UyZjhhYzZkMGVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcm94eS5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiwyMSBAQAogI2lm
bmRlZiBNZWRpYVBsYXllclByb3h5X2gKICNkZWZpbmUgTWVkaWFQbGF5ZXJQcm94eV9oCiAKKyNp
ZiBQTEFURk9STShJT1MpCisjaWYgZGVmaW5lZChfX09CSkNfXykKKyNpbXBvcnQgPEZvdW5kYXRp
b24vTlNHZW9tZXRyeS5oPgorI2VuZGlmCisKKy8vIE5lZWRlZCBzaW5jZSB0aGlzIGlzIGEgV2Vi
S2l0IHByaXZhdGUgaGVhZGVyIG9uIGlPUy4KKyNpZm5kZWYgT0JKQ19DTEFTUworI2lmZGVmIF9f
T0JKQ19fCisjZGVmaW5lIE9CSkNfQ0xBU1MgQGNsYXNzCisjZWxzZQorI2RlZmluZSBPQkpDX0NM
QVNTIGNsYXNzCisjZW5kaWYKKyNlbmRpZiAvLyAhZGVmaW5lZChPQkpDX0NMQVNTKQorI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykKKwogT0JKQ19DTEFTUyBXZWJNZWRpYVBsYXllclByb3h5OwogCiBl
bnVtIE1lZGlhUGxheWVyUHJveHlOb3RpZmljYXRpb25UeXBlIHsKQEAgLTU3LDYgKzcyLDE2IEBA
IGVudW0gTWVkaWFQbGF5ZXJQcm94eU5vdGlmaWNhdGlvblR5cGUgewogICAgIE1lZGlhUGxheWVy
Tm90aWZpY2F0aW9uVGltZUp1bXBlZCwKICAgICAKICAgICBNZWRpYVBsYXllck5vdGlmaWNhdGlv
blBsYXlQYXVzZUJ1dHRvblByZXNzZWQsCisgICAgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25SYXRl
RGlkQ2hhbmdlLAorICAgIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uR2FpbkZvY3VzLAorICAgIE1l
ZGlhUGxheWVyTm90aWZpY2F0aW9uTG9zZUZvY3VzLAorICAgIE1lZGlhUGxheWVyUmVxdWVzdEJl
Z2luUGxheWJhY2ssCisgICAgTWVkaWFQbGF5ZXJSZXF1ZXN0UGF1c2VQbGF5YmFjaywKKworI2lm
IEVOQUJMRShJT1NfQUlSUExBWSkKKyAgICBNZWRpYVBsYXllck5vdGlmaWNhdGlvbkN1cnJlbnRQ
bGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkLAorICAgIE1lZGlhUGxheWVyTm90aWZpY2F0
aW9uUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkLAorI2VuZGlmCiB9OwogCiAjaWZk
ZWYgX19PQkpDX18KQEAgLTcxLDYgKzk2LDI1IEBAIGVudW0gTWVkaWFQbGF5ZXJQcm94eU5vdGlm
aWNhdGlvblR5cGUgewogCiAtICh2b2lkKV9zZXRQb3N0ZXI6KE5TVVJMICopdXJsOwogCistICh2
b2lkKV9zZXRDb250cm9sczooQk9PTCljb250cm9sczsKKy0gKHZvaWQpX3NldEF1dG9idWZmZXI6
KEJPT0wpYXV0b2J1ZmZlcjsKKworLSAodm9pZClfZW50ZXJGdWxsU2NyZWVuOworLSAodm9pZClf
ZXhpdEZ1bGxTY3JlZW47CisKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCistIChCT09MKV9pc0N1
cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzOworLSAodm9pZClfc2hvd1BsYXliYWNrVGFyZ2V0
UGlja2VyOworCistIChCT09MKV9oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0czsKKworLSAoQk9P
TClfd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ7CistICh2b2lkKV9zZXRXaXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZDooQk9PTClkaXNhYmxlZDsKKworLSAodm9pZClfc2V0SGFzUGxh
eWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnM6KEJPT0wpaGFzTGlzdGVuZXJzOworI2Vu
ZGlmCisKKy0gKHZvaWQpX3ByZXBhcmVGb3JQbGF5YmFjazsKIC0gKHZvaWQpX3BsYXk7CiAtICh2
b2lkKV9wYXVzZTsKIApAQCAtNzksNiArMTIzLDkgQEAgZW51bSBNZWRpYVBsYXllclByb3h5Tm90
aWZpY2F0aW9uVHlwZSB7CiAtIChCT09MKV9oYXNWaWRlbzsKIC0gKEJPT0wpX2hhc0F1ZGlvOwog
CistIChCT09MKV9oYXNDbG9zZWRDYXB0aW9uczsKKy0gKHZvaWQpX3NldENsb3NlZENhcHRpb25z
VmlzaWJsZTooQk9PTCl2aXNpYmxlOworCiAtIChOU1RpbWVJbnRlcnZhbClfZHVyYXRpb247CiAK
IC0gKGRvdWJsZSlfY3VycmVudFRpbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKaW5k
ZXggNzI5YmU2ZmFlNzcwZmRlZDA3OGY0OTk4MjE1ZTU0ODNjZWY1ZGFiMy4uMDgyOGJkODA4MmMx
ODMxZjkwNjYwYzJjZDVlMjJhZDRmNzU2ZWNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0
LmNwcApAQCAtMjcsNyArMjcsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29y
ZVRleHQvQ29yZVRleHQuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0
YU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250
RGF0YU1hYy5tbQppbmRleCAyMWVhNjExNjA3ODYxNDMxZTYzYjY0YTMwY2VkNzdhNzBmOWE5MDBj
Li4yNjQwY2M0Nzk1ODgyOGFiNTI4ZGM0MWFhODU5MzQ2NTk0NmI1ZTJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRh
TWFjLm1tCkBAIC0zNSwyMCArMzUsMjcgQEAKICNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgog
I2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
LmgiCisjaWYgVVNFKEFQUEtJVCkKICNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KICNpbXBvcnQg
PEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbXBv
cnQgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjZW5kaWYKICNpbXBvcnQgPGZsb2F0Lmg+CiAjaW1w
b3J0IDx1bmljb2RlL3VjaGFyLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2ltcG9y
dCA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCisjaWYg
IVBMQVRGT1JNKElPUykKIEBpbnRlcmZhY2UgTlNGb250IChXZWJBcHBLaXRTZWNyZXRBUEkpCiAt
IChCT09MKV9pc0Zha2VGaXhlZFBpdGNoOwogQGVuZAorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgCisKKyNpZiBVU0UoQVBQS0lUKQogc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2Fs
R2x5cGhzKENURm9udFJlZiBjdEZvbnQpCiB7CiAgICAgLy8gVGhlIGNoZWNrIGRvZXNuJ3QgbG9v
ayBuZWF0IGJ1dCB0aGlzIGlzIHdoYXQgQXBwS2l0IGRvZXMgZm9yIHZlcnRpY2FsIHdyaXRpbmcu
Li4KQEAgLTI1NSw2ICsyNjIsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJX
aWR0aEluaXQoKQogICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0aW1hdGUs
IHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1wb3NpdGl2
ZS4KICAgICBpbml0Q2hhcldpZHRocygpOwogfQorI2VuZGlmIC8vIFVTRShBUFBLSVQpCiAKIHZv
aWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiB7CkBAIC0yNjgsNiArMjc2LDcg
QEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKICAgICB9CiB9CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGlmIChpc0N1
c3RvbUZvbnQoKSkgewpAQCAtMzA0LDcgKzMxMyw5IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZv
CiAKICAgICByZXR1cm4gMDsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCisjaWYgIVBM
QVRGT1JNKElPUykKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKIHsKICAgICBOU1N0cmluZyAq
c3RyaW5nID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5OmNvbnN0
X2Nhc3Q8dW5pY2hhcio+KGNoYXJhY3RlcnMpIGxlbmd0aDpsZW5ndGggZnJlZVdoZW5Eb25lOk5P
XTsKQEAgLTMzNSw2ICszNDYsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRj
aCgpCiAgICAgICAgICAgIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJNUy1QR290aGlj
Il0gIT0gTlNPcmRlcmVkU2FtZSAmJgogICAgICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVD
b21wYXJlOkAiTW9ub3R5cGVDb3JzaXZhIl0gIT0gTlNPcmRlcmVkU2FtZTsKIH0KKyNlbmRpZiAv
LyAhUExBVEZPUk0oSU9TKQogCiBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91
bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CkBAIC0zNDcsNiArMzU5LDcgQEAgRmxv
YXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAogICAgIHJldHVybiBib3VuZGluZ0JveDsKIH0KIAorI2lmICFQTEFURk9STShJT1Mp
CiBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAogewogICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKQEAgLTM2Nyw2ICsz
ODAsNyBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdAogCiAgICAgcmV0dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0Jv
bGRPZmZzZXQ7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogc3RydWN0IFByb3ZpZGVy
SW5mbyB7CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIuaAppbmRleCA2NDQwYjcxYWY3MTk4
ODdmMzVmYTU4MDRmZTkwYzBhOTljNTIwODg2Li5lYWRlNTIwMzRjZGQ4MTBhNjAyZmU4MWZkYTI4
NDJiMjMxODZhMDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvV2ViR0xMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9XZWJHTExheWVyLmgKQEAgLTM1LDcgKzM1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIH0KIAotQGludGVyZmFjZSBXZWJHTExheWVy
IDogQ0FPcGVuR0xMYXllciAKKyNpZiBQTEFURk9STShJT1MpCitAaW50ZXJmYWNlIFdlYkdMTGF5
ZXIgOiBDQUVBR0xMYXllcgorI2Vsc2UKK0BpbnRlcmZhY2UgV2ViR0xMYXllciA6IENBT3BlbkdM
TGF5ZXIKKyNlbmRpZgogewogICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fbGF5ZXJPd25l
cjsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbQppbmRleCBk
NTEwYjYxOWRlOTk5NTVjNzMwNjFhYTRhODk2MjVjMThhN2NhYjMzLi42NDgyOTllNzU5NmMzNDU2
MmUxNTQ0NTBlNzdlYTI0YTc4MmIyMWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbQpAQCAtMzIsOCArMzIsMTAgQEAKIAogI2lt
cG9ydCAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKKyNp
ZiAhUExBVEZPUk0oSU9TKQogI2ltcG9ydCA8T3BlbkdML09wZW5HTC5oPgogI2ltcG9ydCA8T3Bl
bkdML2dsLmg+CisjZW5kaWYKICNpbXBvcnQgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CiAKQEAgLTQ4LDYgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLShDR0xQaXhl
bEZvcm1hdE9iailjb3B5Q0dMUGl4ZWxGb3JtYXRGb3JEaXNwbGF5TWFzazoodWludDMyX3QpbWFz
awogewogICAgIC8vIEZJWE1FOiBUaGUgbWFzayBwYXJhbSB0ZWxscyB5b3Ugd2hpY2ggZGlzcGxh
eSAob24gYSBtdWx0aS1kaXNwbGF5IHN5c3RlbSkKQEAgLTEwOCw5ICsxMTEsMTQgQEAgc3RhdGlj
IHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAq
LykKIHsKICAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQgKj4oZGF0YSkpOwogfQorI2VuZGlm
CiAKIC0oQ0dJbWFnZVJlZiljb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihDR0NvbG9y
U3BhY2VSZWYpY29sb3JTcGFjZQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFS
QU0oY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIDA7CisjZWxzZQogICAgIENHTFNldEN1cnJlbnRD
b250ZXh0KG1fY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKIAogICAgIFJl
dGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGltYWdlQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CkBA
IC0xMzgsMTEgKzE0NiwxNiBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZv
aWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOwogICAgIENH
RGF0YVByb3ZpZGVyUmVsZWFzZShwcm92aWRlcik7CiAgICAgcmV0dXJuIGltYWdlOworI2VuZGlm
CiB9CiAKIC0gKHZvaWQpZGlzcGxheQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2NvbnRl
eHQtPmVuZFBhaW50KCk7CisjZWxzZQogICAgIFtzdXBlciBkaXNwbGF5XTsKKyNlbmRpZgogICAg
IGlmIChtX2xheWVyT3duZXIpCiAgICAgICAgIG1fbGF5ZXJPd25lci0+bGF5ZXJEaWREaXNwbGF5
KHNlbGYpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1dlYkxheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YkxheWVyLm1tCmluZGV4IDA4Mjk2NDJkOTQ5ZDA2NGVkOWFhNmNhZWU0MGFlMDZlNDA0OWJjNGMu
LmE5MjRjZGY4Y2RlOGE5ODIwMTE4ZDAzYTlmOTExNDEwNGEyM2MzMjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KQEAgLTMyLDE1ICsz
MiwyOSBAQAogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0ICJHcmFwaGljc0xh
eWVyQ0EuaCIKICNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllci5oIgorI2lmICFQTEFURk9STShJT1Mp
CiAjaW1wb3J0ICJUaGVtZU1hYy5oIgorI2VuZGlmCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0
ekNvcmUuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIldLR3JhcGhpY3MuaCIKKyNp
bXBvcnQgIldBS1dpbmRvdy5oIgorI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmCisK
IEBpbnRlcmZhY2UgQ0FMYXllcihXZWJDb3JlQ0FMYXllclByaXZhdGUpCiAtICh2b2lkKXJlbG9h
ZFZhbHVlRm9yS2V5UGF0aDooTlNTdHJpbmcgKilrZXlQYXRoOwogQGVuZAogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAorI2lmIFBMQVRGT1JNKElPUykKK0BpbnRlcmZhY2UgV2ViTGF5ZXIo
UHJpdmF0ZSkKKy0gKHZvaWQpZHJhd1NjYWxlZENvbnRlbnRzSW5Db250ZXh0OihDR0NvbnRleHRS
ZWYpY29udGV4dDsKK0BlbmQKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlcGFp
bnRSZWN0TGlzdCBjb2xsZWN0UmVjdHNUb1BhaW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBQbGF0
Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllcikKQEAgLTc0LDE3ICs4OCwyNiBAQCB2b2lkIGRy
YXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXIqIHBsYXRmb3JtQwogICAgIGlmICghbGF5ZXJDb250ZW50cykKICAgICAgICAgcmV0dXJu
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFdLU2V0Q3VycmVudEdyYXBoaWNzQ29udGV4dChj
b250ZXh0KTsKKyNlbmRpZgorCiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAog
ICAgIC8vIFdlIG5ldmVyIHVzZSBDb21wb3NpdGluZ0Nvb3JkaW5hdGVzQm90dG9tVXAgb24gTWFj
LgogICAgIEFTU0VSVChsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVu
dGF0aW9uKCkgPT0gR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24p
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFdLRm9udEFudGlhbGlhc2luZ1N0YXRlU2F2ZXIg
Zm9udEFudGlhbGlhc2luZ1N0YXRlKGNvbnRleHQsIFtwbGF0Zm9ybUNBTGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSBpc09wYXF1ZV0pOworICAgIGZvbnRBbnRpYWxpYXNpbmdTdGF0ZS5zZXR1cChbV0FL
V2luZG93IGhhc0xhbmRzY2FwZU9yaWVudGF0aW9uXSk7CisjZWxzZQogICAgIFtOU0dyYXBoaWNz
Q29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07CiAKICAgICAvLyBTZXQgdXAgYW4gTlNHcmFwaGlj
c0NvbnRleHQgZm9yIHRoZSBjb250ZXh0LCBzbyB0aGF0IHBhcnRzIG9mIEFwcEtpdCB0aGF0IHJl
bHkgb24KICAgICAvLyB0aGUgY3VycmVudCBOU0dyYXBoaWNzQ29udGV4dCAoZS5nLiBOU0NlbGwg
ZHJhd2luZykgZ2V0IHRoZSByaWdodCBvbmUuCiAgICAgTlNHcmFwaGljc0NvbnRleHQqIGxheWVy
Q29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQ
b3J0OmNvbnRleHQgZmxpcHBlZDpZRVNdOwogICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJy
ZW50Q29udGV4dDpsYXllckNvbnRleHRdOworI2VuZGlmCiAKICAgICBHcmFwaGljc0NvbnRleHQg
Z3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5
ZXJDb250ZXh0KHRydWUpOwpAQCAtOTQsNyArMTE3LDggQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50
cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9y
bUMKICAgICAgICAgLy8gVHVybiBvZmYgZm9udCBzbW9vdGhpbmcgdG8gaW1wcm92ZSB0aGUgYXBw
ZWFyYW5jZSBvZiB0ZXh0IHJlbmRlcmVkIG9udG8gYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLgog
ICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hvdWxkU21vb3RoRm9udHMoZmFsc2UpOwogICAg
IH0KLSAgICAKKworI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8g
Z2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmlj
YW50bHkKICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBs
YXllcnMpCiAgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRp
bmdCb3goY29udGV4dCk7CkBAIC0xMDYsNiArMTMwLDcgQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50
cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9y
bUMKICAgICBmb2N1c1JpbmdDbGlwUmVjdCA9IHRyYW5zZm9ybS5tYXBSZWN0KGNsaXBCb3VuZHMp
OwogI2VuZGlmCiAgICAgVGhlbWVNYWM6OnNldEZvY3VzUmluZ0NsaXBSZWN0KGZvY3VzUmluZ0Ns
aXBSZWN0KTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAgICAgZm9yIChhdXRvIHJlY3Qg
OiBkaXJ0eVJlY3RzKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihncmFwaGljc0NvbnRleHQpOwpAQCAtMTE0LDkgKzEzOSwxMyBAQCB2b2lkIGRyYXdMYXll
ckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIq
IHBsYXRmb3JtQwogICAgICAgICBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENv
bnRlbnRzKHBsYXRmb3JtQ0FMYXllciwgZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0
KHJlY3QpKTsKICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgZm9udEFudGlhbGlhc2lu
Z1N0YXRlLnJlc3RvcmUoKTsKKyNlbHNlCiAgICAgVGhlbWVNYWM6OnNldEZvY3VzUmluZ0NsaXBS
ZWN0KEZsb2F0UmVjdCgpKTsKIAogICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhp
Y3NTdGF0ZV07CisjZW5kaWYKIAogICAgIC8vIFJlLWZldGNoIHRoZSBsYXllciBvd25lciwgc2lu
Y2UgPHJkYXI6Ly9wcm9ibGVtLzkxMjUxNTE+IGluZGljYXRlcyB0aGF0IGl0IG1pZ2h0IGhhdmUg
YmVlbiBkZXN0cm95ZWQgZHVyaW5nIHBhaW50aW5nLgogICAgIGxheWVyQ29udGVudHMgPSBwbGF0
Zm9ybUNBTGF5ZXItPm93bmVyKCk7CkBAIC0yMjQsNiArMjUzLDEwIEBAIHZvaWQgZHJhd1JlcGFp
bnRJbmRpY2F0b3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFBsYXRmb3JtQ0FMYXllciogcGxhdGZv
cm1DQUxheWVyCiAKIC0gKHZvaWQpZGlzcGxheQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBp
ZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRocmVhZExvY2soKTsKKyNlbmRpZgog
ICAgIFtzdXBlciBkaXNwbGF5XTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyID0gUGxhdGZv
cm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIoc2VsZik7CiAgICAgaWYgKGxheWVyICYmIGxheWVy
LT5vd25lcigpKQpAQCAtMjMyLDYgKzI2NSwxMCBAQCB2b2lkIGRyYXdSZXBhaW50SW5kaWNhdG9y
KENHQ29udGV4dFJlZiBjb250ZXh0LCBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllcgog
CiAtICh2b2lkKWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0CiB7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIGlmIChwdGhyZWFkX21haW5fbnAoKSkKKyAgICAgICAgV2ViVGhyZWFk
TG9jaygpOworI2VuZGlmCiAgICAgUGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FM
YXllcjo6cGxhdGZvcm1DQUxheWVyKHNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3du
ZXIoKSkgewogICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRp
bGVkTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViVGls
ZWRMYXllci5tbQppbmRleCAzY2FjNWU3YzMzMTI4ZGExZGZlY2Y5M2Q2MDM4YzExZTE5OWQyNWIz
Li5jODZhZmE2ODg0YmVjZDJmMzY4NDdmM2JkMjBkNzhkMDk0Y2EyMWVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViVGlsZWRMYXllci5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViVGlsZWRMYXllci5tbQpA
QCAtMzMsNiArMzMsMTEgQEAKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2ltcG9ydCAi
UGxhdGZvcm1DQUxheWVyLmgiCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJXZWJDb3Jl
VGhyZWFkLmgiCisjaW1wb3J0ICJXZWJDb3JlVGhyZWFkUnVuLmgiCisjZW5kaWYKKwogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJUaWxlZExheWVyCkBAIC00
Niw3ICs1MSwxNCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIC8vIE1ha2Ugc3VyZSB0aGF0
IHRpbGVzIGFyZSBkcmF3biBvbiB0aGUgbWFpbiB0aHJlYWQKICsgKEJPT0wpc2hvdWxkRHJhd09u
TWFpblRocmVhZAogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2ViS2l0MiBh
bHdheXMgd2FudHMgdG8gZHJhdyBvbiB0aGUgbWFpbiB0aHJlYWQsIGJ1dCB0aGVyZSBpcworICAg
IC8vIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBjaGVjayBmb3IgV2ViS2l0MiB0aGFuIHVzaW5n
IHRoZSBleGlzdGFuY2Ugb2YKKyAgICAvLyB0aGUgd2ViIHRocmVhZCBhcyBhIHByb3h5LgorICAg
IHJldHVybiAhV2ViVGhyZWFkSXNFbmFibGVkKCk7CisjZWxzZQogICAgIHJldHVybiBZRVM7Cisj
ZW5kaWYKIH0KIAogKyAodW5zaWduZWQgaW50KXByZWZldGNoZWRUaWxlcwpAQCAtOTgsNiArMTEw
LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogLSAodm9pZClkaXNwbGF5CiB7CiAgICAg
W3N1cGVyIGRpc3BsYXldOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBDQVRpbGVkTGF5ZXIg
bmV2ZXIgY2FsbHMgZGlzcGxheSBvbiBhIGJhY2tncm91bmQgdGhyZWFkLCBzbyBpdCdzIHNhZmUK
KyAgICAvLyB0byBhc3N1bWUgd2UncmUgZWl0aGVyIG9uIHRoZSBtYWluIHRocmVhZCBvciBvbiB0
aGUgd2ViIHRocmVhZC4KKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRo
cmVhZExvY2soKTsKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOwor
I2VuZGlmCiAgICAgUGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxh
dGZvcm1DQUxheWVyKHNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkKICAg
ICAgICAgbGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShzZWxm
KTsKQEAgLTEwNSw5ICsxMjQsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIC0gKHZv
aWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKIHsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgdm9pZCAoXmRyYXcpKCkgPSBeeworI2VuZGlmCiAgICAgUGxhdGZvcm1DQUxheWVy
KiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHNlbGYpOwogICAgIGlm
IChsYXllcikKICAgICAgICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4dCwgbGF5ZXIpOworI2lm
IFBMQVRGT1JNKElPUykKKyAgICB9OworICAgIGlmIChwdGhyZWFkX21haW5fbnAoKSkgeworICAg
ICAgICBXZWJUaHJlYWRMb2NrKCk7CisgICAgICAgIGRyYXcoKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgV2ViVGhyZWFkUnVuU3luYyhkcmF3KTsKKyNlbmRpZgogfQogCiBAZW5kIC8vIGltcGxlbWVu
dGF0aW9uIFdlYlRpbGVkTGF5ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKaW5kZXggZmEy
NzkwZDNhZjk1MGNmZjRkY2I1NmM1ZmNkM2I0ODY2YzJjM2M2NS4uMjg5YzNlMjljODAyMmU4ZGVm
ZGY1NGZjYjgzMjVkMWRiODI5NzY0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKQEAg
LTMyLDEzICszMiwyMCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKElPUykK
KyNpbmNsdWRlICJBTkdMRS9TaGFkZXJMYW5nLmgiCisjaW5jbHVkZSA8T3BlbkdMRVMvRVMyL2ds
ZXh0Lmg+CisjZWxpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSAiQU5HTEUvU2hhZGVyTGFuZy5o
IgogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklYKQogI2luY2x1ZGUgIk9wZW5H
TFNoaW1zLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRElPUy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRXh0ZW5z
aW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0woR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCkBAIC01Myw3ICs2MCwyMSBAQCBFeHRlbnNpb25zM0RPcGVuR0w6On5FeHRlbnNpb25zM0RP
cGVuR0woKQogCiB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcg
c3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxv
bmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5z
aWduZWQgbG9uZyBmaWx0ZXIpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFVOVVNFRF9QQVJB
TShzcmNYMCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kwKTsKKyAgICBVTlVTRURfUEFSQU0oc3Jj
WDEpOworICAgIFVOVVNFRF9QQVJBTShzcmNZMSk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFgwKTsK
KyAgICBVTlVTRURfUEFSQU0oZHN0WTApOworICAgIFVOVVNFRF9QQVJBTShkc3RYMSk7CisgICAg
VU5VU0VEX1BBUkFNKGRzdFkxKTsKKyAgICBVTlVTRURfUEFSQU0obWFzayk7CisgICAgVU5VU0VE
X1BBUkFNKGZpbHRlcik7CisgICAgOjpnbFJlc29sdmVNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQVBQ
TEUoKTsKKyNlbHNlCiAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVChzcmNYMCwgc3JjWTAsIHNy
Y1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7Cisj
ZW5kaWYKIH0KIAogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCkKQEAgLTEwNSw2ICsxMjYsMTAgQEAgR0MzRGJvb2xlYW4gRXh0ZW5zaW9u
czNET3BlbkdMOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCiAKIHZv
aWQgRXh0ZW5zaW9uczNET3BlbkdMOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCBhcnJheSkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKGFycmF5KTsK
KyNlbmRpZgorCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICNpZiAoUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0o
TklYKSkKICAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQpAQCAtMTg2LDEz
ICsyMTEsMTkgQEAgYm9vbCBFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgfQor
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChuYW1lID09ICJHTF9FWFRfcGFja2VkX2RlcHRo
X3N0ZW5jaWwiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5z
KCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIG1f
YXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKIH0KIAogdm9pZCBFeHRlbnNpb25z
M0RPcGVuR0w6OmRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSBuLCBjb25zdCBHQzNEZW51bSogYnVm
cykKIHsKICAgICAvLyAgRklYTUU6IGltcGxlbWVudCBzdXBwb3J0IGZvciBvdGhlciBwbGF0Zm9y
bXMuCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElP
UykKICAgICA6OmdsRHJhd0J1ZmZlcnNBUkIobiwgYnVmcyk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggZmU4
NGIzOWFlMzE5NWQwYWU0MzY4YzdkYzM5YjM0NWY4YzZhYjg4OC4uMDA2MDJlMzRlZjIwMzU0ZmE4
ZmQ1NGI0MzRlM2VmMmIzMTRmZTUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbi5jcHAKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1M
b2cuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPE9wZW5HTEVTL0VT
Mi9nbGV4dC5oPgorI2Vsc2UKICNpZiBVU0UoT1BFTkdMX0VTXzIpCiAjaW5jbHVkZSAiT3BlbkdM
RVNTaGltcy5oIgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgpAQCAtNDUsNiArNDgsNyBAQAogI2Vs
aWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExB
VEZPUk0oTklYKQogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjZW5kaWYKKyNlbmRpZgogCiAj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03
MSw3ICs3NSw3IEBAIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6RXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIGlmICh2ZW5kb3JDb21wb25l
bnRzLmNvbnRhaW5zKCJpbnRlbCIpKQogICAgICAgICBtX2lzSW50ZWwgPSB0cnVlOwogCi0jaWYg
UExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICBp
ZiAobV9pc0FNRCB8fCBtX2lzSW50ZWwpCiAgICAgICAgIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rp
b25FbXVsYXRpb24gPSB0cnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cAppbmRleCBkMDQ4NWJmMTg2MjU1Yjg1OTU4N2VmYmZiNjU0YTYxODA2N2JjNjQ1Li43OWM2ZmQ4
Mzg4ZDI5ZmQ0ZTkyMGQxMzRkZDkyYTE0ZjcwMzlkOTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTC5jcHAKQEAgLTI5LDYgKzI5LDkgQEAKICNpZiBVU0UoM0RfR1JBUEhJQ1Mp
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lmIFBMQVRGT1JNKElPUykKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRElPUy5oIgorI2VuZGlmCiAKICNpbmNsdWRlICJFeHRl
bnNpb25zM0RPcGVuR0wuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC00MSw3ICs0NCwxMiBA
QAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPE9w
ZW5HTEVTL0VTMi9nbGV4dC5oPgorLy8gRnJvbSA8T3BlbkdMRVMvZ2xleHQuaD4KKyNkZWZpbmUg
R0xfUkdCQTMyRl9BUkIgICAgICAgICAgICAgICAgICAgICAgMHg4ODE0CisjZGVmaW5lIEdMX1JH
QjMyRl9BUkIgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxNQorI2VsaWYgUExBVEZPUk0oTUFD
KQogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklYKQogI2luY2x1ZGUgIk9wZW5H
TFNoaW1zLmgiCkBAIC04Niw3ICs5NCwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNo
YXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICBpZiAoZXh0ZW5zaW9ucy0+c3Vw
cG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKQogICAgICAgICAgICAgaW50ZXJu
YWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKICAgICAgICAg
ZWxzZQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7CisjZWxzZQogICAgICAgICAgICAgaW50ZXJu
YWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7CisjZW5kaWYKICAgICB9
CiAKICAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CkBAIC0xMjcsNiArMTM5LDExIEBA
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUp
CiAgICAgfQogCiAgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
IDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKKyAgICA6
OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFD
SE1FTlQwLCBHTF9SRU5ERVJCVUZGRVIsIG1fdGV4dHVyZSk7CisgICAgc2V0UmVuZGVyYnVmZmVy
U3RvcmFnZUZyb21EcmF3YWJsZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKKyNl
bHNlCiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CiAgICAg
OjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7CiAgICAg
OjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1Jf
QVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwpAQCAtMTM2LDYg
KzE1Myw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNp
emUmIHNpemUpCiAgICAgICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50
ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lH
TkVEX0JZVEUsIDApOwogICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7
CiAgICAgfQorI2VuZGlmCiAKICAgICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJz
LnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkpIHsKICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZm
ZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwpAQCAtMTY3
LDE3ICsxODUsMjIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQogCiAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwot
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKKyAgICA6OmdsUmVz
b2x2ZU11bHRpc2FtcGxlRnJhbWVidWZmZXJBUFBMRSgpOworI2Vsc2UKICAgICBJbnRSZWN0IHJl
c29sdmVSZWN0ID0gcmVjdDsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJlc29s
dmVSZWN0ID0gSW50UmVjdCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsK
IAogICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQocmVzb2x2ZVJlY3QueCgpLCByZXNvbHZlUmVj
dC55KCksIHJlc29sdmVSZWN0Lm1heFgoKSwgcmVzb2x2ZVJlY3QubWF4WSgpLCByZXNvbHZlUmVj
dC54KCksIHJlc29sdmVSZWN0LnkoKSwgcmVzb2x2ZVJlY3QubWF4WCgpLCByZXNvbHZlUmVjdC5t
YXhZKCksIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisjZW5kaWYKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CiAgICAgY2FzZSBERVBUSF9TVEVOQ0lMOgogICAg
ICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOwpAQCAtMTkzLDYg
KzIxNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvCiAgICAgICAgIGludGVybmFsZm9ybWF0
ID0gR0xfUkdCOwogICAgICAgICBicmVhazsKICAgICB9CisjZW5kaWYKICAgICA6OmdsUmVuZGVy
YnVmZmVyU3RvcmFnZUVYVCh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
IH0KIApAQCAtMjA0LDYgKzIyOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVn
ZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKICAgICAvLyBUaGVyZWZvcmUsIHRo
ZSB2YWx1ZSByZXR1cm5lZCBieSBkZXNrdG9wIEdMIG5lZWRzIHRvIGJlIGRpdmlkZWQgYnkgNC4K
ICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBjYXNlIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CiAgICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTLCB2
YWx1ZSk7CiAgICAgICAgICp2YWx1ZSAvPSA0OwpAQCAtMjE2LDYgKzI0MSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1
ZSkKICAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywgdmFsdWUp
OwogICAgICAgICAqdmFsdWUgLz0gNDsKICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBkZWZh
dWx0OgogICAgICAgICA6OmdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKICAgICB9CkBAIC0y
NjYsNiArMjkyLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAgZWxzZSBpZiAo
Zm9ybWF0ID09IEdMX1JHQikKICAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xf
UkdCMzJGX0FSQjsKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMpIHsKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCiAgICAgICAg
ICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX1JHQkExNkZfQVJCOwogICAgICAgICBlbHNl
IGlmIChmb3JtYXQgPT0gR0xfUkdCKQpAQCAtMjc3LDYgKzMwNCw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlCiAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEp
CiAgICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX0xVTUlOQU5DRV9BTFBIQTE2
Rl9BUkI7CiAgICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKKyNlbmRpZgogICAgIH0K
ICAgICB0ZXhJbWFnZTJERGlyZWN0KHRhcmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTI4NSwxMyArMzEzLDIxIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0Rj
bGFtcGYgekZhcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgOjpnbERlcHRoUmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciksIHN0YXRp
Y19jYXN0PGZsb2F0Pih6RmFyKSk7CisjZWxzZQogICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6
RmFyKTsKKyNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdD
M0RjbGFtcGYgZGVwdGgpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIDo6Z2xDbGVhckRlcHRoZihzdGF0aWNfY2FzdDxmbG9hdD4oZGVwdGgpKTsK
KyNlbHNlCiAgICAgOjpnbENsZWFyRGVwdGgoZGVwdGgpOworI2VuZGlmCiB9CiAKIEV4dGVuc2lv
bnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggNzY4NzQ3MzJlOTcwYTFkMjEx
YjdkYTM0ZTlkYTJhNjU3ODdkZWViNy4uZjU0MWUwZTMzNzQ0Nzg3NmE1ZWI1YmMyYjg3YmEzNjAz
ZWFmNmY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24u
Y3BwCkBAIC0zMSw2ICszMSw5IEBACiAjaWYgVVNFKDNEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0RJT1MuaCIKKyNlbmRpZgogCiAjaWYgVVNFKE9QRU5HTF9FU18yKQogI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCkBAIC01NCw2ICs1NywxMiBAQAogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCisjaWYg
UExBVEZPUk0oSU9TKQorI2ltcG9ydCA8T3BlbkdMRVMvRVMyL2dsZXh0Lmg+CisvLyBGcm9tIDxP
cGVuR0xFUy9nbGV4dC5oPgorI2RlZmluZSBHTF9SR0JBMzJGX0FSQiAgICAgICAgICAgICAgICAg
ICAgICAweDg4MTQKKyNkZWZpbmUgR0xfUkdCMzJGX0FSQiAgICAgICAgICAgICAgICAgICAgICAg
MHg4ODE1CisjZWxzZQogI2lmIFVTRShPUEVOR0xfRVNfMikKICNpbmNsdWRlICJPcGVuR0xFU1No
aW1zLmgiCiAjZWxpZiBQTEFURk9STShNQUMpCkBAIC02MSw2ICs3MCw3IEBACiAjZWxpZiBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShO
SVgpCiAjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKICNlbmRpZgorI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShCTEFDS0JFUlJZKQogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgpAQCAt
MTYxLDYgKzE3MSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIsCiAgICAgcGFpbnRUb0NhbnZh
cyhwaXhlbHMuZ2V0KCksIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkud2lkdGgoKSwgaW1hZ2VCdWZm
ZXItPmludGVybmFsU2l6ZSgpLmhlaWdodCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0
Zm9ybUNvbnRleHQoKSk7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBlbmRQYWlu
dCgpOworI2VuZGlmCiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50Q29tcG9zaXRl
ZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRp
b25NYXRyaXguY3BwCmluZGV4IGJmNTA3NDUxMjc3M2JmN2MxN2UxNWYyYTgzYTM3YzkwYWNmNmMw
ZmIuLmRhZDIzNTk5YmUyYzU4MDEyNDhhNzBhNTFiZDI0NmM1OGU5Y2FhZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRp
b25NYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCkBAIC0xMDM1LDcgKzEwMzUsNzEgQEAgVHJh
bnNmb3JtYXRpb25NYXRyaXggVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiBmcm9tLCBjb24KIC8vIHRoaXMgPSBtYXQgKiB0aGlzLgogVHJhbnNmb3JtYXRp
b25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4OjptdWx0aXBseShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0KQogewotI2lmIENQVShBUFBMRV9BUk1WN1MpCisjaWYgQ1BVKEFSTTY0
KQorICAgIGRvdWJsZSogbGVmdE1hdHJpeCA9ICYobV9tYXRyaXhbMF1bMF0pOworICAgIGNvbnN0
IGRvdWJsZSogcmlnaHRNYXRyaXggPSAmKG1hdC5tX21hdHJpeFswXVswXSk7CisgICAgYXNtIHZv
bGF0aWxlICgKKyAgICAgICAgLy8gRmlyc3QsIGxvYWQgdGhlIGxlZnRNYXRyaXggY29tcGxldGVs
eSBpbiBtZW1vcnkuIFRoZSBsZWZ0TWF0cml4IGlzIGluIHYxNi12MjMuCisgICAgICAgICJtb3Yg
ICAgICB4NCwgJVtsZWZ0TWF0cml4XVxuXHQiCisgICAgICAgICJsZDEuMmQgICB7djE2LCB2MTcs
IHYxOCwgdjE5fSwgWyVbbGVmdE1hdHJpeF1dLCAjNjRcblx0IgorICAgICAgICAibGQxLjJkICAg
e3YyMCwgdjIxLCB2MjIsIHYyM30sIFslW2xlZnRNYXRyaXhdXVxuXHQiCisKKyAgICAgICAgLy8g
Rmlyc3Qgcm93LgorICAgICAgICAibGQ0ci4yZCAge3YyNCwgdjI1LCB2MjYsIHYyN30sIFslW3Jp
Z2h0TWF0cml4XV0sICMzMlxuXHQiCisgICAgICAgICJmbXVsLjJkICB2MjgsIHYyNCwgdjE2XG5c
dCIKKyAgICAgICAgImZtdWwuMmQgIHYyOSwgdjI0LCB2MTdcblx0IgorICAgICAgICAiZm1sYS4y
ZCAgdjI4LCB2MjUsIHYxOFxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MjksIHYyNSwgdjE5XG5c
dCIKKyAgICAgICAgImZtbGEuMmQgIHYyOCwgdjI2LCB2MjBcblx0IgorICAgICAgICAiZm1sYS4y
ZCAgdjI5LCB2MjYsIHYyMVxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MjgsIHYyNywgdjIyXG5c
dCIKKyAgICAgICAgImZtbGEuMmQgIHYyOSwgdjI3LCB2MjNcblx0IgorCisgICAgICAgICJsZDRy
LjJkICB7djAsIHYxLCB2MiwgdjN9LCBbJVtyaWdodE1hdHJpeF1dLCAjMzJcblx0IgorICAgICAg
ICAic3QxLjJkICB7djI4LCB2Mjl9LCBbeDRdLCAjMzJcblx0IgorCisgICAgICAgIC8vIFNlY29u
ZCByb3cuCisgICAgICAgICJmbXVsLjJkICB2MzAsIHYwLCB2MTZcblx0IgorICAgICAgICAiZm11
bC4yZCAgdjMxLCB2MCwgdjE3XG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYzMCwgdjEsIHYxOFxu
XHQiCisgICAgICAgICJmbWxhLjJkICB2MzEsIHYxLCB2MTlcblx0IgorICAgICAgICAiZm1sYS4y
ZCAgdjMwLCB2MiwgdjIwXG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYzMSwgdjIsIHYyMVxuXHQi
CisgICAgICAgICJmbWxhLjJkICB2MzAsIHYzLCB2MjJcblx0IgorICAgICAgICAiZm1sYS4yZCAg
djMxLCB2MywgdjIzXG5cdCIKKworICAgICAgICAibGQ0ci4yZCAge3YyNCwgdjI1LCB2MjYsIHYy
N30sIFslW3JpZ2h0TWF0cml4XV0sICMzMlxuXHQiCisgICAgICAgICJzdDEuMmQgICB7djMwLCB2
MzF9LCBbeDRdLCAjMzJcblx0IgorCisgICAgICAgIC8vIFRoaXJkIHJvdy4KKyAgICAgICAgImZt
dWwuMmQgIHYyOCwgdjI0LCB2MTZcblx0IgorICAgICAgICAiZm11bC4yZCAgdjI5LCB2MjQsIHYx
N1xuXHQiCisgICAgICAgICJmbWxhLjJkICB2MjgsIHYyNSwgdjE4XG5cdCIKKyAgICAgICAgImZt
bGEuMmQgIHYyOSwgdjI1LCB2MTlcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjI4LCB2MjYsIHYy
MFxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MjksIHYyNiwgdjIxXG5cdCIKKyAgICAgICAgImZt
bGEuMmQgIHYyOCwgdjI3LCB2MjJcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjI5LCB2MjcsIHYy
M1xuXHQiCisKKyAgICAgICAgImxkNHIuMmQgIHt2MCwgdjEsIHYyLCB2M30sIFslW3JpZ2h0TWF0
cml4XV0sICMzMlxuXHQiCisgICAgICAgICJzdDEuMmQgICB7djI4LCB2Mjl9LCBbeDRdLCAjMzJc
blx0IgorCisgICAgICAgIC8vIEZvdXJ0aCByb3cuCisgICAgICAgICJmbXVsLjJkICB2MzAsIHYw
LCB2MTZcblx0IgorICAgICAgICAiZm11bC4yZCAgdjMxLCB2MCwgdjE3XG5cdCIKKyAgICAgICAg
ImZtbGEuMmQgIHYzMCwgdjEsIHYxOFxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MzEsIHYxLCB2
MTlcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjMwLCB2MiwgdjIwXG5cdCIKKyAgICAgICAgImZt
bGEuMmQgIHYzMSwgdjIsIHYyMVxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MzAsIHYzLCB2MjJc
blx0IgorICAgICAgICAiZm1sYS4yZCAgdjMxLCB2MywgdjIzXG5cdCIKKworICAgICAgICAic3Qx
LjJkICB7djMwLCB2MzF9LCBbeDRdXG5cdCIKKworICAgICAgICA6IFtsZWZ0TWF0cml4XSIrciIo
bGVmdE1hdHJpeCksIFtyaWdodE1hdHJpeF0iK3IiKHJpZ2h0TWF0cml4KQorICAgICAgICA6Cisg
ICAgICAgIDogIm1lbW9yeSIsICJ4NCIsICJ2MCIsICJ2MSIsICJ2MiIsICJ2MyIsICJ2MTYiLCAi
djE3IiwgInYxOCIsICJ2MTkiLCAidjIwIiwgInYyMSIsICJ2MjIiLCAidjIzIiwgInYyNCIsICJ2
MjUiLCAidjI2IiwgInYyNyIsICJ2MjgiLCAidjI5IiwgInYzMCIsICJ2MzEiKTsKKyNlbGlmIENQ
VShBUFBMRV9BUk1WN1MpCiAgICAgZG91YmxlKiBsZWZ0TWF0cml4ID0gJihtX21hdHJpeFswXVsw
XSk7CiAgICAgY29uc3QgZG91YmxlKiByaWdodE1hdHJpeCA9ICYobWF0Lm1fbWF0cml4WzBdWzBd
KTsKICAgICBhc20gdm9sYXRpbGUgKC8vIEZpcnN0IHJvdyBvZiBsZWZ0TWF0cml4LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCmluZGV4IDky
MDkzZDA5MTdiMzQ5ZTYyMWFkZjJiZTRiMDgxNDA4MTY2YzgwN2MuLjU1NDhkZTAzMzdjODQyYjZi
NzRkNDU3OTY2ZTlmY2ZiYzRkODg1ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAKQEAgLTk0LDggKzk0LDcgQEAgZmxvYXQgRm9udDo6
Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGlu
dCBmcm9tLCBpbnQKICAgICByZXR1cm4gYmVmb3JlV2lkdGg7CiB9CiAKLXZvaWQgRm9udDo6ZHJh
d0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVm
ZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlw
aC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTEwNCwxMSArMTAzLDEyIEBAIHZv
aWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGCiAKICAgICAvLyBXZSBjb3VsZG4ndCBnZW5lcmF0ZSBhbnkg
Z2x5cGhzIGZvciB0aGUgcnVuLiAgR2l2ZSB1cC4KICAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRHJhdyB0
aGUgZ2x5cGggYnVmZmVyIG5vdyBhdCB0aGUgc3RhcnRpbmcgcG9pbnQgcmV0dXJuZWQgaW4gc3Rh
cnRYLgogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChzdGFydFgsIHBvaW50LnkoKSk7CiAgICAg
ZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQpOwor
ICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAogdm9pZCBGb250OjpkcmF3
RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5jcHAKaW5kZXggZWMxNTRlOGQ0
OTI1OWRmM2MyZGQ3YzVkZDMxNmY0MDcyZTE2Y2MxNS4uZGY1ODk3MzIyZDhlNTBkZjM5NzkyMzBi
ODJlY2IwYzI5MDQ3MTg2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9Gb250V2luQ0UuY3BwCkBAIC0yMDcsOCArMjA3LDcgQEAgc3RhdGljIGlu
dCBnZW5lcmF0ZUNvbXBvbmVudHMoVGV4dFJ1bkNvbXBvbmVudHMqIGNvbXBvbmVudHMsIGNvbnN0
IEZvbnQgJmZvbnQsIGMKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIEZvbnQ6OmRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBpZiAodG8gPCAwKQogICAgICAg
ICB0byA9IHJ1bi5sZW5ndGgoKTsKQEAgLTIxOCw2ICsyMTcsNyBAQCB2b2lkIEZvbnQ6OmRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRgogICAgIFRleHRSdW5Db21wb25lbnRzIGNvbXBvbmVudHM7CiAgICAgaW50IHcgPSBn
ZW5lcmF0ZUNvbXBvbmVudHMoJmNvbXBvbmVudHMsICp0aGlzLCBydW4pOwogCisgICAgZmxvYXQg
d2lkdGhPZkRyYXduVGV4dCA9IDA7CiAgICAgaW50IGN1clBvcyA9IDA7CiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAoaW50KWNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3Qg
VGV4dFJ1bkNvbXBvbmVudCYgY29tcCA9IGNvbXBvbmVudHMuYXQoaSk7CkBAIC0yMjksMTIgKzIy
OSwxMyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRgogICAgICAgICAgICAgICAgIHB0LnNldFgo
cG9pbnQueCgpICsgdyAtIGNvbXAubV9vZmZzZXQgLSBjb21wLm1fd2lkdGgpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIHB0LnNldFgocG9pbnQueCgpICsgY29tcC5tX29mZnNl
dCk7Ci0gICAgICAgICAgICBkcmF3U2ltcGxlVGV4dChjb250ZXh0LCBjb21wLm1fdGV4dFJ1biwg
cHQsIGZyb20gLSBjdXJQb3MsIHN0ZDo6bWluKHRvLCBjdXJFbmQpIC0gY3VyUG9zKTsKKyAgICAg
ICAgICAgIHdpZHRoT2ZEcmF3blRleHQgKz0gZHJhd1NpbXBsZVRleHQoY29udGV4dCwgY29tcC5t
X3RleHRSdW4sIHB0LCBmcm9tIC0gY3VyUG9zLCBzdGQ6Om1pbih0bywgY3VyRW5kKSAtIGN1clBv
cyk7CiAgICAgICAgIH0KICAgICAgICAgY3VyUG9zICs9IGxlbjsKICAgICAgICAgaWYgKGZyb20g
PCBjdXJQb3MpCiAgICAgICAgICAgICBmcm9tID0gY3VyUG9zOwogICAgIH0KKyAgICByZXR1cm4g
d2lkdGhPZkRyYXduVGV4dDsKIH0KIAogdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYg
LyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9p
bnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbnRlbnRGaWx0ZXJJT1MubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ29udGVudEZpbHRlcklPUy5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40OGMyNWIwMGRlM2ZmMzBhZWVkMjBkZGJlMTY4MmEzOTUyYmRjNjMzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbnRlbnRGaWx0ZXJJT1MubW0K
QEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiQ29udGVudEZpbHRlci5oIgorCisjaWYgUExBVEZPUk0oSU9TKSAmJiBVU0UoQ09OVEVOVF9G
SUxURVJJTkcpCisKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIKKworI2lmIGRlZmluZWQo
X19oYXNfaW5jbHVkZSkgJiYgX19oYXNfaW5jbHVkZSg8V2ViQ29udGVudEFuYWx5c2lzL1dlYkZp
bHRlckV2YWx1YXRvci5oPikKKyNpbXBvcnQgPFdlYkNvbnRlbnRBbmFseXNpcy9XZWJGaWx0ZXJF
dmFsdWF0b3IuaD4KKyNlbHNlCitAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJGaWx0ZXJFdmFsdWF0
b3JEZXRhaWxzKQorLSAodm9pZCl1bmJsb2NrV2l0aENvbXBsZXRpb246KHZvaWQgKF4pKEJPT0wg
dW5ibG9ja2VkLCBOU0Vycm9yICplcnJvcikpY29tcGxldGlvbjsKK0BlbmQKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGNoYXIqIENvbnRlbnRGaWx0ZXI6OnNjaGVtZSgp
Cit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgY29udGVudEZpbHRlclNjaGVtZVtdID0gIngtYXBw
bGUtY29udGVudC1maWx0ZXIiOworICAgIHJldHVybiBjb250ZW50RmlsdGVyU2NoZW1lOworfQor
ICAgIAordm9pZCBDb250ZW50RmlsdGVyOjpyZXF1ZXN0VW5ibG9ja0FuZERpc3BhdGNoSWZTdWNj
ZXNzZnVsKEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24pCit7CisgICAgW21fcGxhdGZvcm1Db250
ZW50RmlsdGVyIHVuYmxvY2tXaXRoQ29tcGxldGlvbjpeKEJPT0wgdW5ibG9ja2VkLCBOU0Vycm9y
ICopIHsKKyAgICAgICAgaWYgKHVuYmxvY2tlZCkgeworICAgICAgICAgICAgV2ViVGhyZWFkUnVu
KF57CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgfV07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykgJiYgVVNFKENPTlRFTlRfRklMVEVSSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZU1vdGlvbkNsaWVudElPUy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZU1vdGlvbkNsaWVudElPUy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4
NTk5MWYyMDA1MjhlNWFjYTllZTVlMjA2MjdkYzkwOThmOGExODUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlTW90aW9uQ2xpZW50SU9TLmgKQEAg
LTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZXZpY2VNb3Rpb25DbGllbnRJT1NfaAor
I2RlZmluZSBEZXZpY2VNb3Rpb25DbGllbnRJT1NfaAorCisjaW5jbHVkZSAiRGV2aWNlTW90aW9u
Q2xpZW50LmgiCisjaW5jbHVkZSAiRGV2aWNlTW90aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
IkRldmljZU1vdGlvbkRhdGEuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmZGVmIF9fT0JKQ19fCitAY2xhc3MgV2ViQ29yZU1vdGlv
bk1hbmFnZXI7CisjZWxzZQorY2xhc3MgV2ViQ29yZU1vdGlvbk1hbmFnZXI7CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEZXZpY2VNb3Rpb25DbGllbnRJT1MgOiBwdWJs
aWMgRGV2aWNlTW90aW9uQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxE
ZXZpY2VNb3Rpb25DbGllbnRJT1M+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IERldmljZU1vdGlvbkNsaWVudElPUygpKTsKKyAgICB9CisgICAgRGV2aWNlTW90
aW9uQ2xpZW50SU9TKCk7CisgICAgdmlydHVhbCB+RGV2aWNlTW90aW9uQ2xpZW50SU9TKCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRyb2xsZXIoRGV2aWNlTW90aW9uQ29udHJv
bGxlciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgRGV2aWNlTW90aW9uRGF0YSogbGFzdE1vdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkZXZpY2VNb3Rpb25Db250cm9sbGVyRGVzdHJveWVkKCkgT1ZFUlJJREU7CisK
KyAgICB2b2lkIG1vdGlvbkNoYW5nZWQoZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBk
b3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CisKK3ByaXZhdGU6CisgICAg
V2ViQ29yZU1vdGlvbk1hbmFnZXIqIG1fbW90aW9uTWFuYWdlcjsKKyAgICBEZXZpY2VNb3Rpb25D
b250cm9sbGVyKiBtX2NvbnRyb2xsZXI7CisgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE+IG1f
Y3VycmVudERldmljZU1vdGlvbkRhdGE7CisgICAgYm9vbCBtX3VwZGF0aW5nOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGV2aWNlTW90aW9uQ2xpZW50SU9TX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EZXZpY2VNb3Rpb25DbGll
bnRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlTW90aW9uQ2xpZW50
SU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjgyY2U5MWFiM2Q2NGQ5MTEyODgzMWI1MmQxODdjNGY2OTc1YWMy
OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNl
TW90aW9uQ2xpZW50SU9TLm1tCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaW1wb3J0
ICJEZXZpY2VNb3Rpb25DbGllbnRJT1MuaCIKKworI2ltcG9ydCAiV2ViQ29yZU1vdGlvbk1hbmFn
ZXIuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEZXZp
Y2VNb3Rpb25DbGllbnRJT1M6OkRldmljZU1vdGlvbkNsaWVudElPUygpCisgICAgOiBEZXZpY2VN
b3Rpb25DbGllbnQoKQorICAgICwgbV9tb3Rpb25NYW5hZ2VyKG51bGxwdHIpCisgICAgLCBtX3Vw
ZGF0aW5nKDApCit7Cit9CisKK0RldmljZU1vdGlvbkNsaWVudElPUzo6fkRldmljZU1vdGlvbkNs
aWVudElPUygpCit7Cit9CisKK3ZvaWQgRGV2aWNlTW90aW9uQ2xpZW50SU9TOjpzZXRDb250cm9s
bGVyKERldmljZU1vdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCit7CisgICAgbV9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKK30KKwordm9pZCBEZXZpY2VNb3Rpb25DbGllbnRJT1M6OnN0YXJ0
VXBkYXRpbmcoKQoreworICAgIG1fdXBkYXRpbmcgPSB0cnVlOworCisgICAgaWYgKCFtX21vdGlv
bk1hbmFnZXIpCisgICAgICAgIG1fbW90aW9uTWFuYWdlciA9IFtXZWJDb3JlTW90aW9uTWFuYWdl
ciBzaGFyZWRNYW5hZ2VyXTsKKworICAgIFttX21vdGlvbk1hbmFnZXIgYWRkTW90aW9uQ2xpZW50
OnRoaXNdOworfQorCit2b2lkIERldmljZU1vdGlvbkNsaWVudElPUzo6c3RvcFVwZGF0aW5nKCkK
K3sKKyAgICBtX3VwZGF0aW5nID0gZmFsc2U7CisKKyAgICAvLyBSZW1vdmUgb3Vyc2VsdmVzIGFz
IHRoZSBtb3Rpb24gY2xpZW50IHNvIHdlIHdvbid0IGdldCB1cGRhdGVzLgorICAgIFttX21vdGlv
bk1hbmFnZXIgcmVtb3ZlTW90aW9uQ2xpZW50OnRoaXNdOworfQorCitEZXZpY2VNb3Rpb25EYXRh
KiBEZXZpY2VNb3Rpb25DbGllbnRJT1M6Omxhc3RNb3Rpb24oKSBjb25zdAoreworICAgIHJldHVy
biBtX2N1cnJlbnREZXZpY2VNb3Rpb25EYXRhLmdldCgpOworfQorCit2b2lkIERldmljZU1vdGlv
bkNsaWVudElPUzo6ZGV2aWNlTW90aW9uQ29udHJvbGxlckRlc3Ryb3llZCgpCit7CisgICAgW21f
bW90aW9uTWFuYWdlciByZW1vdmVNb3Rpb25DbGllbnQ6dGhpc107Cit9CisKK3ZvaWQgRGV2aWNl
TW90aW9uQ2xpZW50SU9TOjptb3Rpb25DaGFuZ2VkKGRvdWJsZSB4QWNjZWxlcmF0aW9uLCBkb3Vi
bGUgeUFjY2VsZXJhdGlvbiwgZG91YmxlIHpBY2NlbGVyYXRpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgeEFjY2VsZXJhdGlvbkluY2x1ZGlu
Z0dyYXZpdHksIGRvdWJsZSB5QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgZG91YmxlIHpB
Y2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIHhSb3RhdGlvblJhdGUsIGRvdWJsZSB5Um90YXRpb25S
YXRlLCBkb3VibGUgelJvdGF0aW9uUmF0ZSkKK3sKKyAgICBpZiAoIW1fdXBkYXRpbmcpCisgICAg
ICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCisgICAgVU5VU0VEX1BB
UkFNKHhBY2NlbGVyYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh5QWNjZWxlcmF0aW9uKTsKKyAg
ICBVTlVTRURfUEFSQU0oekFjY2VsZXJhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHhBY2NlbGVy
YXRpb25JbmNsdWRpbmdHcmF2aXR5KTsKKyAgICBVTlVTRURfUEFSQU0oeUFjY2VsZXJhdGlvbklu
Y2x1ZGluZ0dyYXZpdHkpOworICAgIFVOVVNFRF9QQVJBTSh6QWNjZWxlcmF0aW9uSW5jbHVkaW5n
R3Jhdml0eSk7CisgICAgVU5VU0VEX1BBUkFNKHhSb3RhdGlvblJhdGUpOworICAgIFVOVVNFRF9Q
QVJBTSh5Um90YXRpb25SYXRlKTsKKyAgICBVTlVTRURfUEFSQU0oelJvdGF0aW9uUmF0ZSk7CisK
KyAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmF0aW9uPiBhY2NlbGVyYXRpb25J
bmNsdWRpbmdHcmF2aXR5ID0gRGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmF0aW9uOjpjcmVhdGUo
ZmFsc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMCk7CisgICAgUmVmUHRyPERldmljZU1vdGlvbkRh
dGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxlcmF0aW9uID0gRGV2aWNlTW90aW9uRGF0YTo6QWNjZWxl
cmF0aW9uOjpjcmVhdGUoZmFsc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFsc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmFsc2UsIDApOworICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlvblJhdGU+
IHJvdGF0aW9uUmF0ZSA9IERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uUmF0ZTo6Y3JlYXRlKGZh
bHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAwKTsKKyNl
bHNlCisgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxlcmF0
aW9uSW5jbHVkaW5nR3Jhdml0eSA9IERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbjo6Y3Jl
YXRlKHRydWUsIHhBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB5QWNjZWxlcmF0
aW9uSW5jbHVkaW5nR3Jhdml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgekFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkp
OworICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+IGFjY2VsZXJhdGlv
biA9IDA7CisgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uUmF0ZT4gcm90YXRp
b25SYXRlID0gMDsKKyAgICBpZiAoW21fbW90aW9uTWFuYWdlciBneXJvQXZhaWxhYmxlXSkgewor
ICAgICAgICBhY2NlbGVyYXRpb24gPSBEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb246OmNy
ZWF0ZSh0cnVlLCB4QWNjZWxlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB5QWNjZWxlcmF0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cnVlLCB6QWNjZWxlcmF0aW9uKTsKKyAgICAgICAgcm90YXRpb25SYXRlID0gRGV2aWNlTW90
aW9uRGF0YTo6Um90YXRpb25SYXRlOjpjcmVhdGUodHJ1ZSwgeFJvdGF0aW9uUmF0ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJ1ZSwgeVJvdGF0aW9uUmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgelJvdGF0aW9uUmF0ZSk7CisgICAgfQor
I2VuZGlmIC8vIFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCisKKyAgICBtX2N1cnJlbnREZXZpY2VN
b3Rpb25EYXRhID0gRGV2aWNlTW90aW9uRGF0YTo6Y3JlYXRlKGFjY2VsZXJhdGlvbiwgYWNjZWxl
cmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgcm90YXRpb25SYXRlLCB0cnVlLCBrTW90aW9uVXBkYXRl
SW50ZXJ2YWwpOworICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlRGV2aWNlTW90aW9uKG1fY3Vy
cmVudERldmljZU1vdGlvbkRhdGEuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVi
ZTdmNTFlMjgzMzg4MjI3MjlmMzU4ZDlkMGY2MzBkNjFhMWMxZmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1Mu
aApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERldmljZU9yaWVudGF0aW9uQ2xp
ZW50SU9TX2gKKyNkZWZpbmUgRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1NfaAorCisjaW5jbHVk
ZSAiRGV2aWNlT3JpZW50YXRpb25DbGllbnQuaCIKKyNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlv
bkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlvbkRhdGEuaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmZGVm
IF9fT0JKQ19fCitAY2xhc3MgV2ViQ29yZU1vdGlvbk1hbmFnZXI7CisjZWxzZQorY2xhc3MgV2Vi
Q29yZU1vdGlvbk1hbmFnZXI7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUyA6IHB1YmxpYyBEZXZpY2VPcmllbnRhdGlvbkNs
aWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RGV2aWNlT3JpZW50YXRpb25D
bGllbnRJT1M+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERl
dmljZU9yaWVudGF0aW9uQ2xpZW50SU9TKCkpOworICAgIH0KKyAgICBEZXZpY2VPcmllbnRhdGlv
bkNsaWVudElPUygpOworICAgIHZpcnR1YWwgfkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TKCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRyb2xsZXIoRGV2aWNlT3JpZW50YXRp
b25Db250cm9sbGVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmco
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBEZXZpY2VPcmllbnRhdGlvbkRhdGEqIGxhc3RPcmllbnRhdGlvbigpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXJE
ZXN0cm95ZWQoKSBPVkVSUklERTsKKworICAgIHZvaWQgb3JpZW50YXRpb25DaGFuZ2VkKGRvdWJs
ZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKKworcHJpdmF0ZToKKyAgICBXZWJD
b3JlTW90aW9uTWFuYWdlciogbV9tb3Rpb25NYW5hZ2VyOworICAgIERldmljZU9yaWVudGF0aW9u
Q29udHJvbGxlciogbV9jb250cm9sbGVyOworICAgIFJlZlB0cjxEZXZpY2VPcmllbnRhdGlvbkRh
dGE+IG1fY3VycmVudERldmljZU9yaWVudGF0aW9uOworICAgIGJvb2wgbV91cGRhdGluZzsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERldmljZU9yaWVudGF0aW9u
Q2xpZW50SU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EZXZp
Y2VPcmllbnRhdGlvbkNsaWVudElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9E
ZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMTZhNTY2YzI4MmFjYTFh
ZGFkODRmYWRmNDc5ZjU4ZDA5ODFjNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1tCkBAIC0wLDAgKzEs
MTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorCisjaW1wb3J0ICJEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5o
IgorCisjaW1wb3J0ICJXZWJDb3JlTW90aW9uTWFuYWdlci5oIgorCisjaWYgUExBVEZPUk0oSU9T
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpE
ZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUygpCisgICAgOiBEZXZpY2VPcmllbnRhdGlvbkNsaWVu
dCgpCisgICAgLCBtX21vdGlvbk1hbmFnZXIobnVsbHB0cikKKyAgICAsIG1fdXBkYXRpbmcoMCkK
K3sKK30KKworRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1M6On5EZXZpY2VPcmllbnRhdGlvbkNs
aWVudElPUygpCit7Cit9CisKK3ZvaWQgRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1M6OnNldENv
bnRyb2xsZXIoRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKiBjb250cm9sbGVyKQoreworICAg
IG1fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cit9CisKK3ZvaWQgRGV2aWNlT3JpZW50YXRpb25D
bGllbnRJT1M6OnN0YXJ0VXBkYXRpbmcoKQoreworICAgIG1fdXBkYXRpbmcgPSB0cnVlOworCisg
ICAgaWYgKCFtX21vdGlvbk1hbmFnZXIpCisgICAgICAgIG1fbW90aW9uTWFuYWdlciA9IFtXZWJD
b3JlTW90aW9uTWFuYWdlciBzaGFyZWRNYW5hZ2VyXTsKKworICAgIFttX21vdGlvbk1hbmFnZXIg
YWRkT3JpZW50YXRpb25DbGllbnQ6dGhpc107Cit9CisKK3ZvaWQgRGV2aWNlT3JpZW50YXRpb25D
bGllbnRJT1M6OnN0b3BVcGRhdGluZygpCit7CisgICAgbV91cGRhdGluZyA9IGZhbHNlOworCisg
ICAgLy8gUmVtb3ZlIG91cnNlbHZlcyBhcyB0aGUgb3JpZW50YXRpb24gY2xpZW50IHNvIHdlIHdv
bid0IGdldCB1cGRhdGVzLgorICAgIFttX21vdGlvbk1hbmFnZXIgcmVtb3ZlT3JpZW50YXRpb25D
bGllbnQ6dGhpc107Cit9CisKK0RldmljZU9yaWVudGF0aW9uRGF0YSogRGV2aWNlT3JpZW50YXRp
b25DbGllbnRJT1M6Omxhc3RPcmllbnRhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3Vy
cmVudERldmljZU9yaWVudGF0aW9uLmdldCgpOworfQorCit2b2lkIERldmljZU9yaWVudGF0aW9u
Q2xpZW50SU9TOjpkZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXJEZXN0cm95ZWQoKQoreworICAg
IFttX21vdGlvbk1hbmFnZXIgcmVtb3ZlT3JpZW50YXRpb25DbGllbnQ6dGhpc107Cit9CisgICAg
Cit2b2lkIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpvcmllbnRhdGlvbkNoYW5nZWQoZG91
YmxlIGFscGhhLCBkb3VibGUgYmV0YSwgZG91YmxlIGdhbW1hLCBkb3VibGUgY29tcGFzc0hlYWRp
bmcsIGRvdWJsZSBjb21wYXNzQWNjdXJhY3kpCit7CisgICAgaWYgKCFtX3VwZGF0aW5nKQorICAg
ICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1NfU0lNVUxBVE9SKQorICAgIFVOVVNFRF9Q
QVJBTShhbHBoYSk7CisgICAgVU5VU0VEX1BBUkFNKGJldGEpOworICAgIFVOVVNFRF9QQVJBTShn
YW1tYSk7CisgICAgVU5VU0VEX1BBUkFNKGNvbXBhc3NIZWFkaW5nKTsKKyAgICBVTlVTRURfUEFS
QU0oY29tcGFzc0FjY3VyYWN5KTsKKyAgICBtX2N1cnJlbnREZXZpY2VPcmllbnRhdGlvbiA9IERl
dmljZU9yaWVudGF0aW9uRGF0YTo6Y3JlYXRlKGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFs
c2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMCk7CisjZWxzZQorICAgIG1fY3VycmVudERl
dmljZU9yaWVudGF0aW9uID0gRGV2aWNlT3JpZW50YXRpb25EYXRhOjpjcmVhdGUodHJ1ZSwgYWxw
aGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRydWUsIGJldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGdhbW1hLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBjb21wYXNzSGVhZGlu
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ1ZSwgY29tcGFzc0FjY3VyYWN5KTsKKyNlbmRpZgorICAgIG1fY29udHJvbGxlci0+
ZGlkQ2hhbmdlRGV2aWNlT3JpZW50YXRpb24obV9jdXJyZW50RGV2aWNlT3JpZW50YXRpb24uZ2V0
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvS2V5RXZlbnRJT1Mu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvS2V5RXZlbnRJT1MubW0KaW5kZXggODI0
YWI3ZjFiY2IwNDYwMGE5NDYwYmYwZTM5MjAxMTY1YzQ1YTVmNC4uMzkxYjZhYTk5MzBiMWJhNGQy
MDUwMGQ3ZmE3NzZkMGQ1Mjc2Y2U4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL0tleUV2ZW50SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9L
ZXlFdmVudElPUy5tbQpAQCAtMjgsNTkgKzI4LDEyIEBACiAKICNpZiBQTEFURk9STShJT1MpCiAK
LSNpbXBvcnQgIktleUV2ZW50Q29jb2EuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW1wb3J0ICJXZWJFdmVudC5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBTdHJpbmcga2V5SWRlbnRp
ZmllckZvcktleUV2ZW50KFdlYkV2ZW50ICpldmVudCkKLXsKLSAgICBOU1N0cmluZyAqcyA9IGV2
ZW50LmNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczsKLSAgICBpZiAoW3MgbGVuZ3RoXSAhPSAx
KSB7Ci0gICAgICAgIExPRyhFdmVudHMsICJyZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG51bWJlciBv
ZiBjaGFyYWN0ZXJzIGluIGtleSBldmVudDogJXUiLCBbcyBsZW5ndGhdKTsKLSAgICAgICAgcmV0
dXJuICJVbmlkZW50aWZpZWQiOwotICAgIH0KLQotICAgIHVuaWNoYXIgYyA9IENGU3RyaW5nR2V0
Q2hhcmFjdGVyQXRJbmRleCgoQ0ZTdHJpbmdSZWYpcywgMCk7Ci0gICAgcmV0dXJuIGtleUlkZW50
aWZpZXJGb3JDaGFyQ29kZShjKTsKLX0KLQotUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9y
bUtleWJvYXJkRXZlbnQoV2ViRXZlbnQgKmV2ZW50KQotICAgIDogUGxhdGZvcm1FdmVudChldmVu
dC50eXBlID09IFdlYkV2ZW50S2V5VXAgPyBQbGF0Zm9ybUV2ZW50OjpLZXlVcCA6IFBsYXRmb3Jt
RXZlbnQ6OktleURvd24sIGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrU2hp
ZnQsIGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrQ29udHJvbCwgZXZlbnQu
bW9kaWZpZXJGbGFncyAmIFdlYkV2ZW50RmxhZ01hc2tBbHRlcm5hdGUsIGV2ZW50Lm1vZGlmaWVy
RmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrQ29tbWFuZCkKLSAgICAsIG1fdGV4dChldmVudC5jaGFy
YWN0ZXJzKQotICAgICwgbV91bm1vZGlmaWVkVGV4dChldmVudC5jaGFyYWN0ZXJzSWdub3JpbmdN
b2RpZmllcnMpCi0gICAgLCBtX2tleUlkZW50aWZpZXIoa2V5SWRlbnRpZmllckZvcktleUV2ZW50
KGV2ZW50KSkKLSAgICAsIG1fYXV0b1JlcGVhdChldmVudC5pc0tleVJlcGVhdGluZykKLSAgICAs
IG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlKGV2ZW50LmtleUNvZGUpCi0gICAgLCBtX2lzS2V5cGFk
KGZhbHNlKSAvLyBpUGhvbmUgZG9lcyBub3QgZGlzdGluZ3Vpc2ggdGhlIG51bXBhZCA8cmRhcjov
L3Byb2JsZW0vNzE5MDgzNT4KLSAgICAsIG1fRXZlbnQoZXZlbnQpCi17Ci0gICAgQVNTRVJUKGV2
ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlEb3duIHx8IGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlV
cCk7Ci0KLSAgICAvLyBBbHdheXMgdXNlIDEzIGZvciBFbnRlci9SZXR1cm4gLS0gd2UgZG9uJ3Qg
d2FudCB0byB1c2UgQXBwS2l0J3MgZGlmZmVyZW50IGNoYXJhY3RlciBmb3IgRW50ZXIuCi0gICAg
aWYgKG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID09ICdccicpIHsKLSAgICAgICAgbV90ZXh0ID0g
IlxyIjsKLSAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9ICJcciI7Ci0gICAgfQotCi0gICAgLy8g
VGhlIGFkanVzdG1lbnRzIGJlbG93IGFyZSBvbmx5IG5lZWRlZCBpbiBiYWNrd2FyZCBjb21wYXRp
YmlsaXR5IG1vZGUsIGJ1dCB3ZSBjYW5ub3QgdGVsbCB3aGF0IG1vZGUgd2UgYXJlIGluIGZyb20g
aGVyZS4KLQotICAgIC8vIFR1cm4gMHg3RiBpbnRvIDgsIGJlY2F1c2UgYmFja3NwYWNlIG5lZWRz
IHRvIGFsd2F5cyBiZSA4LgotICAgIGlmIChtX3RleHQgPT0gIlx4N0YiKQotICAgICAgICBtX3Rl
eHQgPSAiXHg4IjsKLSAgICBpZiAobV91bm1vZGlmaWVkVGV4dCA9PSAiXHg3RiIpCi0gICAgICAg
IG1fdW5tb2RpZmllZFRleHQgPSAiXHg4IjsKLSAgICAvLyBBbHdheXMgdXNlIDkgZm9yIHRhYiAt
LSB3ZSBkb24ndCB3YW50IHRvIHVzZSBBcHBLaXQncyBkaWZmZXJlbnQgY2hhcmFjdGVyIGZvciBz
aGlmdC10YWIuCi0gICAgaWYgKG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID09IDkpIHsKLSAgICAg
ICAgbV90ZXh0ID0gIlx4OSI7Ci0gICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHg5IjsKLSAg
ICB9Ci19Ci0KIHZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3du
RXZlbnQoVHlwZSB0eXBlLCBib29sIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCiB7CiAgICAg
Ly8gQ2FuIG9ubHkgY2hhbmdlIHR5cGUgZnJvbSBLZXlEb3duIHRvIFJhd0tleURvd24gb3IgQ2hh
ciwgYXMgd2UgbGFjayBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgY29udmVyc2lvbnMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTUlNRVR5cGVSZWdpc3RyeUlPUy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9NSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRmNDg1YTIwZDdjMWM3MjU4YWFhNWExMjViNmMyNjlmOWNjZTVmYzAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTUlNRVR5cGVSZWdpc3RyeUlP
Uy5tbQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKworI2luY2x1ZGUgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgCit7CitTdHJpbmcgTUlNRVR5
cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nICZleHQpCit7
CisgICAgcmV0dXJuIHdrR2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0KTsKK30KKworVmVjdG9y
PFN0cmluZz4gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0RXh0ZW5zaW9uc0Zvck1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgLyp0eXBlKi8pCit7CisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Cit9CisK
K1N0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIC8qdHlwZSovKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwor
Ym9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTWVtb3J5UHJlc3N1
cmVIYW5kbGVySU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiNDRmMjNiM2U1MWNlMWY3YThlYzkzNGE3MTcz
ZDRhNGQ5NWNjYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIKKworI2ltcG9ydCAiTG9nZ2luZy5o
IgorI2ltcG9ydCAiU3lzdGVtTWVtb3J5LmgiCisjaW1wb3J0ICJXZWJDb3JlVGhyZWFkLmgiCisj
aW1wb3J0IDxsaWJrZXJuL09TQXRvbWljLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIHZvaWQgcmVzcG9uZFRvTWVtb3J5UHJlc3N1cmVDYWxsYmFjayhDRlJ1bkxvb3BPYnNlcnZl
clJlZiBvYnNlcnZlciwgQ0ZSdW5Mb29wQWN0aXZpdHkgLyphY3Rpdml0eSovLCB2b2lkKiAvKmlu
Zm8qLykKK3sKKyAgICBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5yZXNwb25kVG9NZW1vcnlQcmVz
c3VyZUlmTmVlZGVkKCk7CisgICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJJbnZhbGlkYXRlKG9ic2VydmVy
KTsKKyAgICBDRlJlbGVhc2Uob2JzZXJ2ZXIpOworfQorCit2b2lkIE1lbW9yeVByZXNzdXJlSGFu
ZGxlcjo6aW5zdGFsbE1lbW9yeVJlbGVhc2VCbG9jayh2b2lkIChecmVsZWFzZU1lbW9yeUJsb2Nr
KSgpLCBib29sIGNsZWFyUHJlc3N1cmVPbk1lbW9yeVJlbGVhc2UpCit7CisgICAgaWYgKG1faW5z
dGFsbGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9yZWxlYXNlTWVtb3J5QmxvY2sgPSBCbG9j
a19jb3B5KHJlbGVhc2VNZW1vcnlCbG9jayk7CisgICAgbV9jbGVhclByZXNzdXJlT25NZW1vcnlS
ZWxlYXNlID0gY2xlYXJQcmVzc3VyZU9uTWVtb3J5UmVsZWFzZTsKKyAgICBtX2luc3RhbGxlZCA9
IHRydWU7Cit9CisKK3ZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzZXRSZWNlaXZlZE1lbW9y
eVByZXNzdXJlKE1lbW9yeVByZXNzdXJlUmVhc29uIHJlYXNvbikKK3sKKyAgICBPU0F0b21pY1Rl
c3RBbmRTZXQoMCwgJm1fcmVjZWl2ZWRNZW1vcnlQcmVzc3VyZSk7CisKKyAgICB7CisgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX29ic2VydmVyTXV0ZXgpOworICAgICAgICBpZiAoIW1fb2Jz
ZXJ2ZXIpIHsKKyAgICAgICAgICAgIG1fb2JzZXJ2ZXIgPSBDRlJ1bkxvb3BPYnNlcnZlckNyZWF0
ZShOVUxMLCBrQ0ZSdW5Mb29wQmVmb3JlV2FpdGluZyB8IGtDRlJ1bkxvb3BFeGl0LCBOTyAvKiBk
b24ndCByZXBlYXQgKi8sCisgICAgICAgICAgICAgICAgMCwgV2ViQ29yZTo6cmVzcG9uZFRvTWVt
b3J5UHJlc3N1cmVDYWxsYmFjaywgTlVMTCk7CisgICAgICAgICAgICBDRlJ1bkxvb3BBZGRPYnNl
cnZlcihXZWJUaHJlYWRSdW5Mb29wKCksIG1fb2JzZXJ2ZXIsIGtDRlJ1bkxvb3BDb21tb25Nb2Rl
cyk7CisgICAgICAgICAgICBDRlJ1bkxvb3BXYWtlVXAoV2ViVGhyZWFkUnVuTG9vcCgpKTsKKyAg
ICAgICAgfQorICAgICAgICBtX21lbW9yeVByZXNzdXJlUmVhc29uIHw9IHJlYXNvbjsKKyAgICB9
Cit9CisKK2Jvb2wgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpoYXNSZWNlaXZlZE1lbW9yeVByZXNz
dXJlKCkKK3sKKyAgICByZXR1cm4gT1NBdG9taWNPcjMyKDAsICZtX3JlY2VpdmVkTWVtb3J5UHJl
c3N1cmUpOworfQorCit2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6Y2xlYXJNZW1vcnlQcmVz
c3VyZSgpCit7CisgICAgT1NBdG9taWNUZXN0QW5kQ2xlYXIoMCwgJm1fcmVjZWl2ZWRNZW1vcnlQ
cmVzc3VyZSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29ic2VydmVy
TXV0ZXgpOworICAgICAgICBtX21lbW9yeVByZXNzdXJlUmVhc29uID0gTWVtb3J5UHJlc3N1cmVS
ZWFzb25Ob25lOworICAgIH0KK30KKworYm9vbCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNob3Vs
ZFdhaXRGb3JNZW1vcnlDbGVhck1lc3NhZ2UoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X29ic2VydmVyTXV0ZXgpOworICAgIHJldHVybiBtX21lbW9yeVByZXNzdXJlUmVhc29uICYgTWVt
b3J5UHJlc3N1cmVSZWFzb25WTVN0YXR1czsKK30KKwordm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRs
ZXI6OnJlc3BvbmRUb01lbW9yeVByZXNzdXJlSWZOZWVkZWQoKQoreworICAgIEFTU0VSVChXZWJU
aHJlYWRJc0xvY2tlZE9yRGlzYWJsZWQoKSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX29ic2VydmVyTXV0ZXgpOworICAgICAgICBtX29ic2VydmVyID0gMDsKKyAgICB9
CisKKyAgICBpZiAoaGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3VyZSgpKSB7CisgICAgICAgIEFTU0VS
VChtX3JlbGVhc2VNZW1vcnlCbG9jayk7CisgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIkhh
bmRsZSBtZW1vcnkgcHJlc3N1cmUgYXQgJXMiLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgICAg
ICAgbV9yZWxlYXNlTWVtb3J5QmxvY2soKTsKKyAgICAgICAgaWYgKG1fY2xlYXJQcmVzc3VyZU9u
TWVtb3J5UmVsZWFzZSkKKyAgICAgICAgICAgIGNsZWFyTWVtb3J5UHJlc3N1cmUoKTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Bhc3RlYm9hcmRJT1MubW0KaW5kZXggODdiNTUxNzkxYWQxY2QzYjgxNDc1ZTQ4MTNlMjE0
ZjhhYTcxN2U4ZC4uZjI1OTI3NThiYWUxNzkzZTUxYzEyNTVmM2QyMDJmNjViNjFlZjc2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KQEAgLTM1LDIw
ICszNSwyNCBAQAogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyLmgiCiAj
aW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2ltcG9ydCAiSFRNTENvbnZlcnRlci5oIgog
I2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxOYW1lcy5oIgogI2ltcG9ydCAi
SFRNTFBhcnNlcklkaW9tcy5oIgotI2ltcG9ydCAiVVJMLmgiCisjaW1wb3J0ICJJbWFnZS5oIgog
I2ltcG9ydCAiTGVnYWN5V2ViQXJjaGl2ZS5oIgogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAi
UGFzdGVib2FyZFN0cmF0ZWd5LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNp
bXBvcnQgIlJlbmRlckltYWdlLmgiCisjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3NJ
T1MuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIK
ICNpbXBvcnQgIlRleHQuaCIKKyNpbXBvcnQgIlVSTC5oIgorI2ltcG9ydCAiV2ViTlNBdHRyaWJ1
dGVkU3RyaW5nRXh0cmFzLmgiCiAjaW1wb3J0ICJodG1sZWRpdGluZy5oIgogI2ltcG9ydCAibWFy
a3VwLmgiCi0jaW1wb3J0ICJXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIKICNpbXBvcnQg
PE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KIAogQGludGVyZmFjZSBO
U0F0dHJpYnV0ZWRTdHJpbmcgKE5TQXR0cmlidXRlZFN0cmluZ0tpdEFkZGl0aW9ucykKQEAgLTEy
Niw5NyArMTMwLDI0IEBAIFBhc3NPd25QdHI8UGFzdGVib2FyZD4gUGFzdGVib2FyZDo6Y3JlYXRl
UHJpdmF0ZSgpCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYXN0ZWJvYXJkKTsKIH0KIAotdm9p
ZCBQYXN0ZWJvYXJkOjpzZXRGcmFtZShGcmFtZSogZnJhbWUpCit2b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KQogewotICAgIG1fZnJhbWUg
PSBmcmFtZTsKLSAgICBtX2NoYW5nZUNvdW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkt
PnBhc3RlYm9hcmRDaGFuZ2VDb3VudCgpOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVUb1Bhc3RlYm9hcmQoY29udGVudCk7CiB9CiAKLXZvaWQg
UGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgLypj
YW5TbWFydENvcHlPckRlbGV0ZSovLCBGcmFtZSAqZnJhbWUsIFNob3VsZFNlcmlhbGl6ZVNlbGVj
dGVkVGV4dEZvckNsaXBib2FyZCBzaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9h
cmQpCitTdHJpbmcgUGFzdGVib2FyZDo6cmVzb3VyY2VNSU1FVHlwZShjb25zdCBOU1N0cmluZyAq
bWltZVR5cGUpCiB7Ci0gICAgQVNTRVJUKHNlbGVjdGVkUmFuZ2UpOwotICAgIEFTU0VSVChmcmFt
ZSk7Ci0KLSAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgY29u
dGVudCBpbnNpZGUgYW4gYW5jaG9yIHRhZwotICAgIC8vIHdlIG1vdmUgdGhlIHNlbGVjdGlvbiBz
dGFydCB0byBpbmNsdWRlIHRoZSBhbmNob3IuCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBO
b2RlKiBjb21tb25BbmNlc3RvciA9IHNlbGVjdGVkUmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFp
bmVyKGVjKTsKLSAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3IpOwotICAgIE5vZGUqIGVuY2xvc2lu
Z0FuY2hvciA9IGVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9u
QW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFUYWcpOwotICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYg
Y29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoc2VsZWN0ZWRSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpLmFuY2hvck5vZGUoKSksIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSkgPj0gMCkKLSAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2V0U3RhcnQoZW5jbG9zaW5n
QW5jaG9yLCAwLCBlYyk7Ci0KLSAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRh
dGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotCi0g
ICAgLy8gUHV0IFdlYkFyY2hpdmUgb24gdGhlIHBhc3RlYm9hcmQuCi0gICAgUmVmUHRyPExlZ2Fj
eVdlYkFyY2hpdmU+IGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0
aW9uKGZyYW1lKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gYXJjaGl2ZSA/IGFy
Y2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpIDogMDsKLSAgICBpZiAoZGF0YSkKLSAgICAg
ICAgW3JlcHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTooTlNEYXRhICopZGF0YS5nZXQoKSBm
b3JLZXk6V2ViQXJjaGl2ZVBib2FyZFR5cGVdOwotCi0gICAgUmV0YWluUHRyPE5TSFRNTFJlYWRl
cj4gY29udmVydGVyID0gYWRvcHROUyhbW2dldE5TSFRNTFJlYWRlckNsYXNzKCkgYWxsb2NdIGlu
aXRXaXRoRE9NUmFuZ2U6a2l0KHNlbGVjdGVkUmFuZ2UpXSk7Ci0gICAgaWYgKGNvbnZlcnRlcikg
ewotICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbY29udmVy
dGVyLmdldCgpIGF0dHJpYnV0ZWRTdHJpbmddOwotICAgICAgICBOU0RhdGEqIFJURkREYXRhID0g
W2F0dHJpYnV0ZWRTdHJpbmcgUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRl
ZFN0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKLSAgICAgICAgaWYgKFJU
RkREYXRhKQotICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTpSVEZE
RGF0YSBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVJURkRdOwotICAgICAgICBpZiAoW2F0dHJp
YnV0ZWRTdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10pCi0gICAgICAgICAgICBhdHRyaWJ1dGVk
U3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNobWVudENoYXJhY3RlcnMo
YXR0cmlidXRlZFN0cmluZyk7Ci0gICAgICAgIE5TRGF0YSogUlRGRGF0YSA9IFthdHRyaWJ1dGVk
U3RyaW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmluZyBsZW5n
dGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKLSAgICAgICAgaWYgKFJURkRhdGEpCi0gICAg
ICAgICAgICBbcmVwcmVzZW50YXRpb25zLmdldCgpIHNldFZhbHVlOlJURkRhdGEgZm9yS2V5OihO
U1N0cmluZyAqKWtVVFR5cGVSVEZdOwotICAgIH0KLQotICAgIC8vIFB1dCBwbGFpbiBzdHJpbmcg
b24gdGhlIHBhc3RlYm9hcmQuCi0gICAgU3RyaW5nIHRleHQgPSBzaG91bGRTZXJpYWxpemVTZWxl
Y3RlZFRleHRGb3JDbGlwYm9hcmQgPT0gSW5jbHVkZUltYWdlQWx0VGV4dEZvckNsaXBib2FyZAot
ICAgICAgICA/IGZyYW1lLT5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKSA6IGZy
YW1lLT5lZGl0b3IoKS5zZWxlY3RlZFRleHQoKTsKLSAgICB0ZXh0LnJlcGxhY2Uobm9CcmVha1Nw
YWNlLCAnICcpOwotICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6dGV4dCBmb3JL
ZXk6KE5TU3RyaW5nICopa1VUVHlwZVRleHRdOwotCi0gICAgZnJhbWUtPmVkaXRvcigpLmNsaWVu
dCgpLT53cml0ZURhdGFUb1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25zLmdldCgpKTsKKyAgICBy
ZXR1cm4gU3RyaW5nKGFkb3B0Q0YoVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRh
ZyhrVVRUYWdDbGFzc01JTUVUeXBlLCAoQ0ZTdHJpbmdSZWYpbWltZVR5cGUsIE5VTEwpKS5nZXQo
KSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0
ZXh0LCBGcmFtZSAqZnJhbWUpCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9h
cmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKQogewotICAgIEFTU0VSVChmcmFtZSk7Ci0KLSAgICBS
ZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkg
c2V0VmFsdWU6dGV4dCBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVRleHRdOwotICAgIGZyYW1l
LT5lZGl0b3IoKS5jbGllbnQoKS0+d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9u
cy5nZXQoKSk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCBG
cmFtZSogZnJhbWUpCi17Ci0gICAgQVNTRVJUKG5vZGUpOwotCi0gICAgaWYgKCEobm9kZS0+cmVu
ZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdlKCkpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBSZW5kZXJJbWFnZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRl
cmVyKCkpOwotICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJ
bWFnZSgpOwotICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJy
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2Ut
PmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwotICAgIEFTU0VSVChpbWFnZSk7Ci0KLSAgICBS
ZXRhaW5QdHI8TlNEYXRhPiBpbWFnZURhdGEgPSBpbWFnZS0+ZGF0YSgpLT5jcmVhdGVOU0RhdGEo
KTsKLQotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gZGljdGlvbmFyeSA9IGFkb3B0TlMoW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgTlNTdHJpbmcgKm1pbWVUeXBlID0gY2FjaGVk
SW1hZ2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IHV0aSA9IGFkb3B0Q0YoVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZyhrVVRU
YWdDbGFzc01JTUVUeXBlLCAoQ0ZTdHJpbmdSZWYpbWltZVR5cGUsIE5VTEwpKTsKLSAgICBpZiAo
dXRpKSB7Ci0gICAgICAgIFtkaWN0aW9uYXJ5LmdldCgpIHNldE9iamVjdDppbWFnZURhdGEuZ2V0
KCkgZm9yS2V5OihOU1N0cmluZyAqKXV0aS5nZXQoKV07Ci0gICAgICAgIFtkaWN0aW9uYXJ5Lmdl
dCgpIHNldE9iamVjdDooTlNTdHJpbmcgKilub2RlLT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0
cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG5vZGUpLT5nZXRBdHRyaWJ1dGUoInNyYyIpKSkgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVV
UkxdOwotICAgIH0KLSAgICBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPndyaXRlRGF0YVRvUGFz
dGVib2FyZChkaWN0aW9uYXJ5LmdldCgpKTsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJkKHBhc3RlYm9hcmRJbWFnZSk7CiB9
CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiwgU21hcnRS
ZXBsYWNlT3B0aW9uKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJp
bmcmIHRleHQsIFNtYXJ0UmVwbGFjZU9wdGlvbikKIHsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJkKGtVVFR5cGVUZXh0LCB0
ZXh0KTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBhc3RlYm9hcmQoY29uc3QgUGFzdGVi
b2FyZCYpCkBAIC0yMzAsMjQxICsxNjEsODMgQEAgYm9vbCBQYXN0ZWJvYXJkOjpjYW5TbWFydFJl
cGxhY2UoKQogCiB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZFBsYWluVGV4dCYgdGV4
dCkKIHsKLSAgICBSZXRhaW5QdHI8TlNBcnJheT4gcGFzdGVib2FyZEl0ZW0gPSBtX2ZyYW1lLT5l
ZGl0b3IoKS5jbGllbnQoKS0+cmVhZERhdGFGcm9tUGFzdGVib2FyZCgoTlNTdHJpbmcgKilrVVRU
eXBlVGV4dCwgMCk7Ci0KLSAgICBpZiAoW3Bhc3RlYm9hcmRJdGVtLmdldCgpIGNvdW50XSA9PSAw
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZCB2YWx1ZSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQo
KSBvYmplY3RBdEluZGV4OjBdOwotICAgIEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNT
dHJpbmcgY2xhc3NdXSk7Ci0gICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBj
bGFzc11dKQotICAgICAgICB0ZXh0LnRleHQgPSAoTlNTdHJpbmcgKil2YWx1ZTsKKyAgICBQYXN0
ZWJvYXJkU3RyYXRlZ3kmIHN0cmF0ZWd5ID0gKnBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJv
YXJkU3RyYXRlZ3koKTsKKyAgICB0ZXh0LnRleHQgPSBzdHJhdGVneS5yZWFkU3RyaW5nRnJvbVBh
c3RlYm9hcmQoMCwga1VUVHlwZVRleHQpOwogfQogCiBzdGF0aWMgTlNBcnJheSogc3VwcG9ydGVk
SW1hZ2VUeXBlcygpCiB7Ci0gICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6KGlk
KWtVVFR5cGVQTkcsIChpZClrVVRUeXBlVElGRiwgKGlkKWtVVFR5cGVKUEVHLCAoaWQpa1VUVHlw
ZUdJRiwgbmlsXTsKKyAgICByZXR1cm4gQFsoaWQpa1VUVHlwZVBORywgKGlkKWtVVFR5cGVUSUZG
LCAoaWQpa1VUVHlwZUpQRUcsIChpZClrVVRUeXBlR0lGXTsKIH0KIAotTlNBcnJheSogUGFzdGVi
b2FyZDo6c3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzKCkKK3ZvaWQgUGFzdGVib2FyZDo6cmVhZChQ
YXN0ZWJvYXJkV2ViQ29udGVudFJlYWRlciYgcmVhZGVyKQogewotICAgIHJldHVybiBbTlNBcnJh
eSBhcnJheVdpdGhPYmplY3RzOihpZClXZWJBcmNoaXZlUGJvYXJkVHlwZSwgKGlkKWtVVFR5cGVQ
TkcsIChpZClrVVRUeXBlVElGRiwgKGlkKWtVVFR5cGVKUEVHLCAoaWQpa1VUVHlwZUdJRiwgKGlk
KWtVVFR5cGVVUkwsIChpZClrVVRUeXBlVGV4dCwgKGlkKWtVVFR5cGVSVEZELCAoaWQpa1VUVHlw
ZVJURiwgbmlsXTsKLX0KLQotI2RlZmluZSBXZWJEYXRhUHJvdG9jb2xTY2hlbWUgQCJ3ZWJraXQt
ZmFrZS11cmwiCi0KLXN0YXRpYyBOU1VSTCogdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChOU1N0
cmluZyAqcmVsYXRpdmVQYXJ0KQotewotICAgIENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZVVUlEQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOwotICAgIE5TU3RyaW5nICpVVUlEU3RyaW5nID0gKE5T
U3RyaW5nICopQ0ZVVUlEQ3JlYXRlU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVVSURSZWYp
OwotICAgIENGUmVsZWFzZShVVUlEUmVmKTsKLSAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTFdp
dGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDovLyVALyVAIiwgV2ViRGF0
YVByb3RvY29sU2NoZW1lLCBVVUlEU3RyaW5nLCByZWxhdGl2ZVBhcnRdXTsKLSAgICBDRlJlbGVh
c2UoVVVJRFN0cmluZyk7Ci0KLSAgICByZXR1cm4gVVJMOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UoRnJh
bWUqIGZyYW1lLCBQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2UpCi17Ci0gICAg
UmVmUHRyPEVsZW1lbnQ+IGltYWdlRWxlbWVudCA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVF
bGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBmYWxzZSk7Ci0KLSAgICBpZiAoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICBs
b2FkZXItPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZS5nZXQoKSk7Ci0KLSAgICBOU1VSTCAq
VVJMID0gcmVzb3VyY2UtPnVybCgpOwotICAgIGltYWdlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhU
TUxOYW1lczo6c3JjQXR0ciwgW1VSTCBpc0ZpbGVVUkxdID8gW1VSTCBhYnNvbHV0ZVN0cmluZ10g
OiByZXNvdXJjZS0+dXJsKCkpOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgZnJh
Z21lbnQtPmFwcGVuZENoaWxkKGltYWdlRWxlbWVudC5yZWxlYXNlKCkpOwotICAgIHJldHVybiBm
cmFnbWVudC5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGRvY3VtZW50RnJhZ21lbnRXaXRoTGluayhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKQotewotICAgIFJlZlB0cjxFbGVtZW50PiBhbmNob3JFbGVtZW50ID0g
ZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoSFRNTE5hbWVzOjphVGFnLCBmYWxzZSk7Ci0KLSAgICBh
bmNob3JFbGVtZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpocmVmQXR0ciwgdXJsU3RyaW5n
KTsKLSAgICBhbmNob3JFbGVtZW50LT5hcHBlbmRDaGlsZChkb2N1bWVudC0+Y3JlYXRlVGV4dE5v
ZGUodXJsU3RyaW5nKSk7Ci0KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBkb2N1bWVudC0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgIGZyYWdtZW50LT5hcHBl
bmRDaGlsZChhbmNob3JFbGVtZW50LnJlbGVhc2UoKSk7Ci0gICAgcmV0dXJuIGZyYWdtZW50LnJl
bGVhc2UoKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1l
bnRGcmFnbWVudFdpdGhSVEYoRnJhbWUqIGZyYW1lLCBOU1N0cmluZyAqcGFzdGVib2FyZFR5cGUs
IE5TRGF0YSogcGFzdGVib2FyZERhdGEpCi17Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmRv
Y3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZzsK
LSAgICBpZiAoW3Bhc3RlYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRU
eXBlUlRGRF0pCi0gICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFJURkQ6cGFzdGVib2FyZERhdGEgZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOwotCi0g
ICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFJURjpwYXN0ZWJvYXJkRGF0YSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07
Ci0KLSAgICBpZiAoIXN0cmluZykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIHdhc0Rl
ZmVycmluZ0NhbGxiYWNrcyA9IGZyYW1lLT5wYWdlKCktPmRlZmVyc0xvYWRpbmcoKTsKLSAgICBp
ZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykKLSAgICAgICAgZnJhbWUtPnBhZ2UoKS0+c2V0RGVm
ZXJzTG9hZGluZyh0cnVlKTsKKyAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kmIHN0cmF0ZWd5ID0gKnBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKTsKIAotICAgIFZlY3RvcjxS
ZWZQdHI8QXJjaGl2ZVJlc291cmNlPj4gcmVzb3VyY2VzOwotICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IGZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+ZG9jdW1lbnRGcmFn
bWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKHN0cmluZy5nZXQoKSwgcmVzb3VyY2VzKTsKKyAgICBp
bnQgbnVtYmVyT2ZJdGVtcyA9IHN0cmF0ZWd5LmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAK
LSAgICBzaXplX3Qgc2l6ZSA9IHJlc291cmNlcy5zaXplKCk7Ci0gICAgaWYgKHNpemUpIHsKLSAg
ICAgICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExv
YWRlcigpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgICAgIGxvYWRlci0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlc1tpXSk7Ci0gICAgfQor
ICAgIGlmICghbnVtYmVyT2ZJdGVtcykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCF3YXNE
ZWZlcnJpbmdDYWxsYmFja3MpCi0gICAgICAgIGZyYW1lLT5wYWdlKCktPnNldERlZmVyc0xvYWRp
bmcoZmFsc2UpOworICAgIE5TQXJyYXkgKnR5cGVzID0gc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVz
KCk7CisgICAgaW50IG51bWJlck9mVHlwZXMgPSBbdHlwZXMgY291bnRdOwogCi0gICAgcmV0dXJu
IGZyYWdtZW50LnJlbGVhc2UoKTsKLX0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9m
SXRlbXM7IGkrKykgeworICAgICAgICBmb3IgKGludCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXgg
PCBudW1iZXJPZlR5cGVzOyB0eXBlSW5kZXgrKykgeworICAgICAgICAgICAgTlNTdHJpbmcgKnR5
cGUgPSBbdHlwZXMgb2JqZWN0QXRJbmRleDp0eXBlSW5kZXhdOwogCi1QYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnRGb3JQYXN0ZWJvYXJkSXRl
bUF0SW5kZXgoRnJhbWUqIGZyYW1lLCBpbnQgaW5kZXgsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJv
b2wmIGNob3NlUGxhaW5UZXh0KQotewotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+ZG9jdW1lbnRGcmFnbWVudEZyb21EZWxl
Z2F0ZShpbmRleCk7Ci0gICAgaWYgKGZyYWdtZW50KQotICAgICAgICByZXR1cm4gZnJhZ21lbnQu
cmVsZWFzZSgpOwotCi0gICAgLy8gRmlyc3QgdHJ5IHRvIGFzayB0aGUgY2xpZW50IGFib3V0IHRo
ZSBzdXBwb3J0ZWQgdHlwZXMuIEl0IHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlIGNsaWVudAotICAg
IC8vIGhhcyBubyBzZWxlY3Rpb24uCi0gICAgTlNBcnJheSAqc3VwcG9ydGVkVHlwZXMgPSBmcmFt
ZS0+ZWRpdG9yKCkuY2xpZW50KCktPnN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlc0ZvckN1cnJlbnRT
ZWxlY3Rpb24oKTsKLSAgICBpZiAoIXN1cHBvcnRlZFR5cGVzKQotICAgICAgICBzdXBwb3J0ZWRU
eXBlcyA9IHN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlcygpOwotICAgIGludCBudW1iZXJPZlR5cGVz
ID0gW3N1cHBvcnRlZFR5cGVzIGNvdW50XTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
YmVyT2ZUeXBlczsgaSsrKSB7Ci0gICAgICAgIE5TU3RyaW5nICp0eXBlID0gW3N1cHBvcnRlZFR5
cGVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIFJldGFpblB0cjxOU0FycmF5PiBwYXN0ZWJv
YXJkSXRlbSA9IGZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+cmVhZERhdGFGcm9tUGFzdGVib2Fy
ZCh0eXBlLCBpbmRleCk7Ci0KLSAgICAgICAgaWYgKFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBjb3Vu
dF0gPT0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChbdHlwZSBpc0Vx
dWFsVG9TdHJpbmc6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7Ci0gICAgICAgICAgICBpZiAoIWZy
YW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAg
ICAvLyBXZSBwdXQgW1dlYkFyY2hpdmUgZGF0YV0gb24gdGhlIHBhc3RlYm9hcmQgaW4gLWNvcHk6
IGluc3RlYWQgb2YgdGhlIGFyY2hpdmUgaXRzZWxmIHVudGlsIHRoZXJlIGlzIEFQSSB0byBwcm92
aWRlIHRoZSBXZWJBcmNoaXZlLgotICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gW3Bhc3RlYm9h
cmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgICAgICAgICBSZWZQdHI8TGVnYWN5
V2ViQXJjaGl2ZT4gY29yZUFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoU2hhcmVk
QnVmZmVyOjp3cmFwTlNEYXRhKGRhdGEpLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChjb3JlQXJj
aGl2ZSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IG1haW5SZXNv
dXJjZSA9IGNvcmVBcmNoaXZlLT5tYWluUmVzb3VyY2UoKTsKLSAgICAgICAgICAgICAgICBpZiAo
bWFpblJlc291cmNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5TU3RyaW5nICpNSU1FVHlwZSA9
IG1haW5SZXNvdXJjZS0+bWltZVR5cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1l
LT5sb2FkZXIoKS5jbGllbnQoKS5jYW5TaG93TUlNRVR5cGVBc0hUTUwoTUlNRVR5cGUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IG1hcmt1cFN0cmluZyA9
IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOlttYWluUmVzb3VyY2UtPmRh
dGEoKS0+Y3JlYXRlTlNEYXRhKCkgYXV0b3JlbGVhc2VdIGVuY29kaW5nOk5TVVRGOFN0cmluZ0Vu
Y29kaW5nXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvYWRlci0+YWRkQWxsQXJjaGl2ZVJlc291cmNlcyhjb3JlQXJjaGl2ZS5n
ZXQoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRGcm9tTWFya3VwKCpmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwU3RyaW5nLmdldCgpLCBtYWlu
UmVzb3VyY2UtPnVybCgpLCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwotICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOldlYkFyY2hp
dmVQYm9hcmRUeXBlXSkgeworICAgICAgICAgICAgICAgIGlmIChSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXIgPSBzdHJhdGVneS5yZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQoaSwgV2ViQXJjaGl2
ZVBib2FyZFR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIucmVhZFdlYkFy
Y2hpdmUoYnVmZmVyLnJlbGVhc2UoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcg
KilrVVRUeXBlUlRGRF0pCi0gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRGcmFnbWVudFdpdGhS
VEYoZnJhbWUsIChOU1N0cmluZyAqKWtVVFR5cGVSVEZELCBbcGFzdGVib2FyZEl0ZW0uZ2V0KCkg
b2JqZWN0QXRJbmRleDowXSk7CiAKLSAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzoo
TlNTdHJpbmcgKilrVVRUeXBlUlRGXSkKLSAgICAgICAgICAgIHJldHVybiBkb2N1bWVudEZyYWdt
ZW50V2l0aFJURihmcmFtZSwgKE5TU3RyaW5nICopa1VUVHlwZVJURiwgW3Bhc3RlYm9hcmRJdGVt
LmdldCgpIG9iamVjdEF0SW5kZXg6MF0pOwotCi0gICAgICAgIGlmIChbc3VwcG9ydGVkSW1hZ2VU
eXBlcygpIGNvbnRhaW5zT2JqZWN0OnR5cGVdKSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNT
dHJpbmc+IGZpbGVuYW1lRXh0ZW5zaW9uID0gYWRvcHROUygoTlNTdHJpbmcgKilVVFR5cGVDb3B5
UHJlZmVycmVkVGFnV2l0aENsYXNzKChDRlN0cmluZ1JlZil0eXBlLCBrVVRUYWdDbGFzc0ZpbGVu
YW1lRXh0ZW5zaW9uKSk7Ci0gICAgICAgICAgICBOU1N0cmluZyAqcmVsYXRpdmVVUkxQYXJ0ID0g
W0AiaW1hZ2UiIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmZpbGVuYW1lRXh0ZW5zaW9uLmdldCgp
XTsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gbWltZVR5cGUgPSBhZG9wdE5TKChO
U1N0cmluZyAqKVVUVHlwZUNvcHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3MoKENGU3RyaW5nUmVmKXR5
cGUsIGtVVFRhZ0NsYXNzTUlNRVR5cGUpKTsKLSAgICAgICAgICAgIE5TRGF0YSAqZGF0YSA9IFtw
YXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOwotICAgICAgICAgICAgcmV0dXJu
IGRvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZShmcmFtZSwgQXJjaGl2ZVJlc291cmNl
OjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtbZGF0YSBjb3B5XSBhdXRvcmVsZWFz
ZV0pLCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KHJlbGF0aXZlVVJMUGFydCksIG1pbWVUeXBl
LmdldCgpLCAiIiwgIiIpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRv
U3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVVUkxdKSB7Ci0gICAgICAgICAgICBpZCB2YWx1ZSA9
IFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOwotICAgICAgICAgICAgaWYg
KCFbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNVUkwgY2xhc3NdXSkgewotICAgICAgICAgICAgICAg
IEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNVUkwgY2xhc3NdXSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzoo
TlNTdHJpbmcgKilrVVRUeXBlUlRGRF0pIHsKKyAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gYnVmZmVyID0gc3RyYXRlZ3kucmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGks
IGtVVFR5cGVSVEZEKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLnJlYWRSVEZE
KGJ1ZmZlci5yZWxlYXNlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgTlNVUkwgKnVybCA9IChO
U1VSTCAqKXZhbHVlOwogCi0gICAgICAgICAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS5jbGllbnQo
KS0+aGFzUmljaGx5RWRpdGFibGVTZWxlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChmcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSwgW3VybCBhYnNvbHV0ZVN0cmluZ10pOwotICAgICAgICAgICAgICAg
IGlmIChmcmFnbWVudCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVh
c2UoKTsKKyAgICAgICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICop
a1VUVHlwZVJURl0pIHsKKyAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
YnVmZmVyID0gc3RyYXRlZ3kucmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGksIGtVVFR5cGVSVEYp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIucmVhZFJURihidWZmZXIucmVsZWFz
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKFt1cmwgaXNGaWxlVVJMXSkgewotICAg
ICAgICAgICAgICAgIE5TU3RyaW5nICpsb2NhbFBhdGggPSBbdXJsIHJlbGF0aXZlUGF0aF07Ci0g
ICAgICAgICAgICAgICAgLy8gT25seSBhbGxvdyB1cmwgYXR0YWNobWVudHMgZnJvbSB+L01lZGlh
IGZvciBub3cuCi0gICAgICAgICAgICAgICAgaWYgKCFbbG9jYWxQYXRoIGhhc1ByZWZpeDpbKE5T
U3RyaW5nICopQ1BTaGFyZWRSZXNvdXJjZXNEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1N0
cmluZzpAIi9NZWRpYS9EQ0lNLyJdXSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGZpbGVUeXBlID0gYWRvcHROUygo
TlNTdHJpbmcgKilVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9yVGFnKGtVVFRhZ0Ns
YXNzRmlsZW5hbWVFeHRlbnNpb24sIChDRlN0cmluZ1JlZilbbG9jYWxQYXRoIHBhdGhFeHRlbnNp
b25dLCBOVUxMKSk7Ci0gICAgICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRh
V2l0aENvbnRlbnRzT2ZGaWxlOmxvY2FsUGF0aF07Ci0gICAgICAgICAgICAgICAgaWYgKFVUVHlw
ZUNvbmZvcm1zVG8oKENGU3RyaW5nUmVmKWZpbGVUeXBlLmdldCgpLCBrVVRUeXBlUE5HKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJj
ZShmcmFtZSwgQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRh
KFtbZGF0YSBjb3B5XSBhdXRvcmVsZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAi
aW1hZ2UucG5nIiksIEAiaW1hZ2UvcG5nIiwgIiIsICIiKSk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoVVRUeXBlQ29uZm9ybXNUbygoQ0ZTdHJpbmdSZWYpZmlsZVR5cGUuZ2V0KCksIGtVVFR5
cGVKUEVHKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnRXaXRo
SW1hZ2VSZXNvdXJjZShmcmFtZSwgQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVy
Ojp3cmFwTlNEYXRhKFtbZGF0YSBjb3B5XSBhdXRvcmVsZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVs
YXRpdmVQYXJ0KEAiaW1hZ2UuanBnIiksIEAiaW1hZ2UvanBnIiwgIiIsICIiKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGxpbmsgd2l0aCBVUkwg
dGV4dC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRGcmFnbWVudFdpdGhMaW5rKGZy
YW1lLT5kb2N1bWVudCgpLCBbdXJsIGFic29sdXRlU3RyaW5nXSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoW3N1cHBvcnRlZEltYWdlVHlwZXMoKSBjb250YWluc09iamVjdDp0eXBl
XSkgeworICAgICAgICAgICAgICAgIGlmIChSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBz
dHJhdGVneS5yZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQoaSwgdHlwZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlYWRlci5yZWFkSW1hZ2UoYnVmZmVyLnJlbGVhc2UoKSwgdHlwZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKGFsbG93UGxhaW5UZXh0ICYmIFt0eXBlIGlzRXF1YWxUb1N0cmluZzoo
TlNTdHJpbmcgKilrVVRUeXBlVGV4dF0pIHsKLSAgICAgICAgICAgIGlkIHZhbHVlID0gW3Bhc3Rl
Ym9hcmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgICAgICAgICBpZiAoIVt2YWx1
ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzoo
TlNTdHJpbmcgKilrVVRUeXBlVVJMXSkgeworICAgICAgICAgICAgICAgIFVSTCB1cmwgPSBzdHJh
dGVneS5yZWFkVVJMRnJvbVBhc3RlYm9hcmQoaSwga1VUVHlwZVVSTCk7CisgICAgICAgICAgICAg
ICAgaWYgKCF1cmwuaXNOdWxsKCkgJiYgcmVhZGVyLnJlYWRVUkwodXJsLCBTdHJpbmcoKSkpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVU
ZXh0XSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcgPSBzdHJhdGVneS5yZWFkU3Ry
aW5nRnJvbVBhc3RlYm9hcmQoaSwga1VUVHlwZVRleHQpOworICAgICAgICAgICAgICAgIGlmICgh
c3RyaW5nLmlzTnVsbCgpICYmIHJlYWRlci5yZWFkUGxhaW5UZXh0KHN0cmluZykpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjaG9zZVBs
YWluVGV4dCA9IHRydWU7Ci0gICAgICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJv
bVRleHQoZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIChOU1N0
cmluZyAqKXZhbHVlKTsKLSAgICAgICAgICAgIGlmIChmcmFnbWVudCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcmV0
dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9j
dW1lbnRGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+IC8qY29udGV4dCov
LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKK05TQXJyYXkqIFBh
c3RlYm9hcmQ6OnN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlcygpCiB7Ci0gICAgY2hvc2VQbGFpblRl
eHQgPSBmYWxzZTsKLQotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
aW50IG51bWJlck9mSXRlbXMgPSBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPmdldFBhc3RlYm9h
cmRJdGVtc0NvdW50KCk7Ci0KLSAgICBpZiAoIW51bWJlck9mSXRlbXMpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgLy8gSW4gdGhlIGNvbW1vbiBjYXNlIHRoZXJlIGlzIGp1c3Qgb25lIGl0ZW0g
b24gdGhlIHBhc3RlYm9hcmQsIGF2b2lkIHRoZSBleHBlbnNlIG9mIHRyYW5zZmVycmluZyB0aGUg
Y29udGVudCBvZgotICAgIC8vIGZyYWdtZW50Rm9yQ3VycmVudEl0ZW0gdG8gdGhlIG1haW4gZnJh
Z21lbnQuCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnRG
cmFnbWVudEZvclBhc3RlYm9hcmRJdGVtQXRJbmRleChmcmFtZSwgMCwgYWxsb3dQbGFpblRleHQs
IGNob3NlUGxhaW5UZXh0KTsKLQotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbnVtYmVyT2ZJdGVt
czsgaSsrKSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudEZvckN1
cnJlbnRJdGVtID0gZG9jdW1lbnRGcmFnbWVudEZvclBhc3RlYm9hcmRJdGVtQXRJbmRleChmcmFt
ZSwgaSwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKLSAgICAgICAgaWYgKCFmcmFn
bWVudCkKLSAgICAgICAgICAgIGZyYWdtZW50ID0gZnJhZ21lbnRGb3JDdXJyZW50SXRlbTsKLSAg
ICAgICAgZWxzZSBpZiAoZnJhZ21lbnRGb3JDdXJyZW50SXRlbSAmJiBmcmFnbWVudEZvckN1cnJl
bnRJdGVtLT5maXJzdENoaWxkKCkpIHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0g
ICAgICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoZnJhZ21lbnRGb3JDdXJyZW50SXRlbS0+
Zmlyc3RDaGlsZCgpLCBlYyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnQp
Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci0KLSAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gQFsoaWQpV2ViQXJjaGl2ZVBib2FyZFR5cGUsIChpZClrVVRUeXBlUE5HLCAoaWQp
a1VUVHlwZVRJRkYsIChpZClrVVRUeXBlSlBFRywgKGlkKWtVVFR5cGVHSUYsIChpZClrVVRUeXBl
VVJMLCAoaWQpa1VUVHlwZVRleHQsIChpZClrVVRUeXBlUlRGRCwgKGlkKWtVVFR5cGVSVEZdOwog
fQogCiBib29sIFBhc3RlYm9hcmQ6Omhhc0RhdGEoKQogewotICAgIHJldHVybiBtX2ZyYW1lLT5l
ZGl0b3IoKS5jbGllbnQoKS0+Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKSAhPSAwOworICAgIHJl
dHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFBhc3Rl
Ym9hcmRJdGVtc0NvdW50KCkgIT0gMDsKIH0KIAogc3RhdGljIFN0cmluZyB1dGlUeXBlRnJvbUNv
Y29hVHlwZShOU1N0cmluZyAqdHlwZSkKQEAgLTU0MCw3ICszMTMsNyBAQCBTdHJpbmcgUGFzdGVi
b2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgICAgICAgICBjb2NvYVZh
bHVlID0gWyhOU1N0cmluZyAqKXZhbHVlIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1h
cHBpbmddOzsKICAgICB9IGVsc2UgaWYgKGNvY29hVHlwZSkgewogICAgICAgICBpZiAoUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gc3RyYXRlZ3kucmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJk
KDAsIGNvY29hVHlwZS5nZXQoKSkpCi0gICAgICAgICAgICBjb2NvYVZhbHVlID0gW1tbTlNTdHJp
bmcgYWxsb2NdIGluaXRXaXRoRGF0YTpidWZmZXItPmNyZWF0ZU5TRGF0YSgpIGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICBjb2NvYVZhbHVl
ID0gW1tbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpidWZmZXItPmNyZWF0ZU5TRGF0YSgp
LmdldCgpIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBhdXRvcmVsZWFzZV07CiAgICAg
fQogCiAgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBX
ZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkzOWM4OWZlMTNmNjc4MGU5OWVlNzc3MWIyYmYxZGY2YjRiYmIyNDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZh
Y3RvcnlJT1MuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9y
bUV2ZW50RmFjdG9yeUlPU19oCisjZGVmaW5lIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TX2gKKwor
I2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgPFdl
YktpdEFkZGl0aW9ucy9QbGF0Zm9ybVRvdWNoRXZlbnRJT1MuaD4KKworQGNsYXNzIFdlYkV2ZW50
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtRXZlbnRGYWN0b3J5IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGxhdGZvcm1Nb3VzZUV2ZW50IGNyZWF0ZVBsYXRmb3JtTW91
c2VFdmVudChXZWJFdmVudCAqKTsKKyAgICBzdGF0aWMgUGxhdGZvcm1XaGVlbEV2ZW50IGNyZWF0
ZVBsYXRmb3JtV2hlZWxFdmVudChXZWJFdmVudCAqKTsKKyAgICBzdGF0aWMgUGxhdGZvcm1LZXli
b2FyZEV2ZW50IGNyZWF0ZVBsYXRmb3JtS2V5Ym9hcmRFdmVudChXZWJFdmVudCAqKTsKKyNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHN0YXRpYyBQbGF0Zm9ybVRvdWNoRXZlbnQgY3JlYXRl
UGxhdGZvcm1Ub3VjaEV2ZW50KFdlYkV2ZW50ICopOworI2VuZGlmCit9OworCitTdHJpbmcga2V5
SWRlbnRpZmllckZvcktleUV2ZW50KFdlYkV2ZW50ICopOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPU19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTQ5NTFkZTFjNTNmZTQ3OGJlY2Q4NGUzMTk4NTc4YmMyNTFmZTc1NwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybUV2ZW50RmFj
dG9yeUlPUy5tbQpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxhdGZv
cm1FdmVudEZhY3RvcnlJT1MuaCIKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0dlb21ldHJ5Lmg+
CisjaW1wb3J0IDxJbnRQb2ludC5oPgorI2ltcG9ydCA8S2V5RXZlbnRDb2NvYS5oPgorI2ltcG9y
dCA8TG9nZ2luZy5oPgorI2ltcG9ydCA8V2ViRXZlbnQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgdW5zaWduZWQgbW9kaWZpZXJzRm9yRXZlbnQoV2ViRXZlbnQgKmV2ZW50KQor
eworICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7CisKKyAgICBpZiAoZXZlbnQubW9kaWZpZXJG
bGFncyAmIFdlYkV2ZW50RmxhZ01hc2tTaGlmdCkKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRm
b3JtRXZlbnQ6OlNoaWZ0S2V5OworICAgIGlmIChldmVudC5tb2RpZmllckZsYWdzICYgV2ViRXZl
bnRGbGFnTWFza0NvbnRyb2wpCisgICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpD
dHJsS2V5OworICAgIGlmIChldmVudC5tb2RpZmllckZsYWdzICYgV2ViRXZlbnRGbGFnTWFza0Fs
dGVybmF0ZSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OkFsdEtleTsKKyAg
ICBpZiAoZXZlbnQubW9kaWZpZXJGbGFncyAmIFdlYkV2ZW50RmxhZ01hc2tDb21tYW5kKQorICAg
ICAgICBtb2RpZmllcnMgfD0gUGxhdGZvcm1FdmVudDo6TWV0YUtleTsKKworICAgIHJldHVybiBt
b2RpZmllcnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50UG9pbnQgcG9pbnRGb3JFdmVudChXZWJF
dmVudCAqZXZlbnQpCit7CisgICAgcmV0dXJuIEludFBvaW50KGV2ZW50LmxvY2F0aW9uSW5XaW5k
b3cpOworfQorCitzdGF0aWMgaW5saW5lIEludFBvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoV2Vi
RXZlbnQgKmV2ZW50KQoreworICAgIC8vIGlPUyBXZWJLaXQgd29ya3MgYXMgaWYgaXQgaXMgZnVs
bCBzY3JlZW4uIFRoZXJlZm9yZSBXZWIgY29vcmRzIGFyZSBHbG9iYWwgY29vcmRzLgorICAgIHJl
dHVybiBwb2ludEZvckV2ZW50KGV2ZW50KTsKK30KKworc3RhdGljIFBsYXRmb3JtRXZlbnQ6OlR5
cGUgbW91c2VFdmVudFR5cGUoV2ViRXZlbnQgKmV2ZW50KQoreworICAgIHN3aXRjaCAoZXZlbnQu
dHlwZSkgeworICAgIGNhc2UgV2ViRXZlbnRNb3VzZURvd246CisgICAgICAgIHJldHVybiBQbGF0
Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQ7CisgICAgY2FzZSBXZWJFdmVudE1vdXNlVXA6CisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkOworICAgIGNhc2UgV2ViRXZl
bnRNb3VzZU1vdmVkOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZDsK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZDsKKyAgICB9Cit9CisKK2NsYXNzIFBsYXRm
b3JtTW91c2VFdmVudEJ1aWxkZXIgOiBwdWJsaWMgUGxhdGZvcm1Nb3VzZUV2ZW50IHsKK3B1Ymxp
YzoKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKFdlYkV2ZW50ICpldmVudCkKKyAgICB7
CisgICAgICAgIG1fdHlwZSA9IG1vdXNlRXZlbnRUeXBlKGV2ZW50KTsKKyAgICAgICAgbV9tb2Rp
ZmllcnMgPSAwOworICAgICAgICBtX3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisKKyAgICAg
ICAgbV9wb3NpdGlvbiA9IHBvaW50Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX2dsb2JhbFBv
c2l0aW9uID0gZ2xvYmFsUG9pbnRGb3JFdmVudChldmVudCk7CisgICAgICAgIG1fYnV0dG9uID0g
TGVmdEJ1dHRvbjsgLy8gVGhpcyBoYXMgYWx3YXlzIGJlZW4gdGhlIExlZnRCdXR0b24gb24gaU9T
LgorICAgICAgICBtX2NsaWNrQ291bnQgPSAxOyAvLyBUaGlzIGhhcyBhbHdheXMgYmVlbiAxIG9u
IGlPUy4KKyAgICB9Cit9OworCitQbGF0Zm9ybU1vdXNlRXZlbnQgUGxhdGZvcm1FdmVudEZhY3Rv
cnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudChXZWJFdmVudCAqZXZlbnQpCit7CisgICAgcmV0
dXJuIFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIoZXZlbnQpOworfQorCitjbGFzcyBQbGF0Zm9y
bVdoZWVsRXZlbnRCdWlsZGVyIDogcHVibGljIFBsYXRmb3JtV2hlZWxFdmVudCB7CitwdWJsaWM6
CisgICAgUGxhdGZvcm1XaGVlbEV2ZW50QnVpbGRlcihXZWJFdmVudCAqZXZlbnQpCisgICAgewor
ICAgICAgICBBU1NFUlQoZXZlbnQudHlwZSA9PSBXZWJFdmVudFNjcm9sbFdoZWVsKTsKKworICAg
ICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpXaGVlbDsKKyAgICAgICAgbV9tb2RpZmllcnMg
PSAwOworICAgICAgICBtX3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisKKyAgICAgICAgbV9w
b3NpdGlvbiA9IHBvaW50Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX2dsb2JhbFBvc2l0aW9u
ID0gZ2xvYmFsUG9pbnRGb3JFdmVudChldmVudCk7CisgICAgICAgIG1fZGVsdGFYID0gZXZlbnQu
ZGVsdGFYOworICAgICAgICBtX2RlbHRhWSA9IGV2ZW50LmRlbHRhWTsKKyAgICAgICAgbV9ncmFu
dWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OyAvLyBpT1Mgb25seSBzdXBwb3J0cyBj
b250aW51b3VzIChwaXhlbC1tb2RlKSBzY3JvbGxpbmcuCisgICAgfQorfTsKKworUGxhdGZvcm1X
aGVlbEV2ZW50IFBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybVdoZWVsRXZlbnQo
V2ViRXZlbnQgKmV2ZW50KQoreworICAgIHJldHVybiBQbGF0Zm9ybVdoZWVsRXZlbnRCdWlsZGVy
KGV2ZW50KTsKK30KKworU3RyaW5nIGtleUlkZW50aWZpZXJGb3JLZXlFdmVudChXZWJFdmVudCAq
ZXZlbnQpCit7CisgICAgTlNTdHJpbmcgKnMgPSBldmVudC5jaGFyYWN0ZXJzSWdub3JpbmdNb2Rp
ZmllcnM7CisgICAgaWYgKFtzIGxlbmd0aF0gIT0gMSkgeworICAgICAgICBMT0coRXZlbnRzLCAi
cmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBrZXkgZXZlbnQ6
ICV1IiwgW3MgbGVuZ3RoXSk7CisgICAgICAgIHJldHVybiAiVW5pZGVudGlmaWVkIjsKKyAgICB9
CisKKyAgICByZXR1cm4ga2V5SWRlbnRpZmllckZvckNoYXJDb2RlKENGU3RyaW5nR2V0Q2hhcmFj
dGVyQXRJbmRleCgoQ0ZTdHJpbmdSZWYpcywgMCkpOworfQorCitjbGFzcyBQbGF0Zm9ybUtleWJv
YXJkRXZlbnRCdWlsZGVyIDogcHVibGljIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCB7CitwdWJsaWM6
CisgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlcihXZWJFdmVudCAqZXZlbnQpCisgICAg
eworICAgICAgICBBU1NFUlQoZXZlbnQudHlwZSA9PSBXZWJFdmVudEtleURvd24gfHwgZXZlbnQu
dHlwZSA9PSBXZWJFdmVudEtleVVwKTsKKworICAgICAgICBtX3R5cGUgPSAoZXZlbnQudHlwZSA9
PSBXZWJFdmVudEtleVVwID8gUGxhdGZvcm1FdmVudDo6S2V5VXAgOiBQbGF0Zm9ybUV2ZW50OjpL
ZXlEb3duKTsKKyAgICAgICAgbV9tb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7
CisgICAgICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKKworICAgICAgICBtX3RleHQg
PSBldmVudC5jaGFyYWN0ZXJzOworICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gZXZlbnQuY2hh
cmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOworICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJ
ZGVudGlmaWVyRm9yS2V5RXZlbnQoZXZlbnQpOworICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5
Q29kZSA9IGV2ZW50LmtleUNvZGU7CisgICAgICAgIG1fbWFjQ2hhckNvZGUgPSAwOworICAgICAg
ICBtX2F1dG9SZXBlYXQgPSBldmVudC5pc0tleVJlcGVhdGluZzsKKyAgICAgICAgbV9pc0tleXBh
ZCA9IGZhbHNlOyAvLyBpT1MgZG9lcyBub3QgZGlzdGluZ3Vpc2ggdGhlIG51bXBhZC4gU2VlIDxy
ZGFyOi8vcHJvYmxlbS83MTkwODM1Pi4KKyAgICAgICAgbV9pc1N5c3RlbUtleSA9IGZhbHNlOwor
ICAgICAgICBtX0V2ZW50ID0gZXZlbnQ7CisKKyAgICAgICAgLy8gQWx3YXlzIHVzZSAxMyBmb3Ig
RW50ZXIvUmV0dXJuIC0tIHdlIGRvbid0IHdhbnQgdG8gdXNlIEFwcEtpdCdzIGRpZmZlcmVudCBj
aGFyYWN0ZXIgZm9yIEVudGVyLgorICAgICAgICBpZiAobV93aW5kb3dzVmlydHVhbEtleUNvZGUg
PT0gJ1xyJykgeworICAgICAgICAgICAgbV90ZXh0ID0gIlxyIjsKKyAgICAgICAgICAgIG1fdW5t
b2RpZmllZFRleHQgPSAiXHIiOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIGFkanVzdG1l
bnRzIGJlbG93IGFyZSBvbmx5IG5lZWRlZCBpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUs
IGJ1dCB3ZSBjYW5ub3QgdGVsbCB3aGF0IG1vZGUgd2UgYXJlIGluIGZyb20gaGVyZS4KKworICAg
ICAgICAvLyBUdXJuIDB4N0YgaW50byA4LCBiZWNhdXNlIGJhY2tzcGFjZSBuZWVkcyB0byBhbHdh
eXMgYmUgOC4KKyAgICAgICAgaWYgKG1fdGV4dCA9PSAiXHg3RiIpCisgICAgICAgICAgICBtX3Rl
eHQgPSAiXHg4IjsKKyAgICAgICAgaWYgKG1fdW5tb2RpZmllZFRleHQgPT0gIlx4N0YiKQorICAg
ICAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9ICJceDgiOworICAgICAgICAvLyBBbHdheXMgdXNl
IDkgZm9yIHRhYiAtLSB3ZSBkb24ndCB3YW50IHRvIHVzZSBBcHBLaXQncyBkaWZmZXJlbnQgY2hh
cmFjdGVyIGZvciBzaGlmdC10YWIuCisgICAgICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29k
ZSA9PSA5KSB7CisgICAgICAgICAgICBtX3RleHQgPSAiXHg5IjsKKyAgICAgICAgICAgIG1fdW5t
b2RpZmllZFRleHQgPSAiXHg5IjsKKyAgICAgICAgfQorICAgIH0KK307CisKK1BsYXRmb3JtS2V5
Ym9hcmRFdmVudCBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1LZXlib2FyZEV2
ZW50KFdlYkV2ZW50ICpldmVudCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1LZXlib2FyZEV2ZW50
QnVpbGRlcihldmVudCk7Cit9CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorc3RhdGljIFBs
YXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQaGFzZVR5cGUgY29udmVydFRvdWNoUGhhc2UoTlNOdW1i
ZXIgKnRvdWNoUGhhc2VOdW1iZXIpCit7CisgICAgV2ViRXZlbnRUb3VjaFBoYXNlVHlwZSB0b3Vj
aFBoYXNlID0gc3RhdGljX2Nhc3Q8V2ViRXZlbnRUb3VjaFBoYXNlVHlwZT4oW3RvdWNoUGhhc2VO
dW1iZXIgdW5zaWduZWRJbnRWYWx1ZV0pOworICAgIHN3aXRjaCAodG91Y2hQaGFzZSkgeworICAg
IGNhc2UgV2ViRXZlbnRUb3VjaFBoYXNlQmVnYW46CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVRv
dWNoUG9pbnQ6OlRvdWNoUGhhc2VCZWdhbjsKKyAgICBjYXNlIFdlYkV2ZW50VG91Y2hQaGFzZU1v
dmVkOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlTW92ZWQ7
CisgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VTdGF0aW9uYXJ5OgorICAgICAgICByZXR1cm4g
UGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlU3RhdGlvbmFyeTsKKyAgICBjYXNlIFdlYkV2
ZW50VG91Y2hQaGFzZUVuZGVkOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1Ub3VjaFBvaW50OjpU
b3VjaFBoYXNlRW5kZWQ7CisgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VDYW5jZWxsZWQ6Cisg
ICAgICAgIHJldHVybiBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUGhhc2VDYW5jZWxsZWQ7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJl
dHVybiBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUGhhc2VCZWdhbjsKK30KKworc3RhdGljIFBs
YXRmb3JtRXZlbnQ6OlR5cGUgdG91Y2hFdmVudFR5cGUoV2ViRXZlbnQgKmV2ZW50KQoreworICAg
IHN3aXRjaCAoZXZlbnQudHlwZSkgeworICAgIGNhc2UgV2ViRXZlbnRUb3VjaEJlZ2luOgorICAg
ICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6VG91Y2hTdGFydDsKKyAgICBjYXNlIFdlYkV2ZW50
VG91Y2hFbmQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpUb3VjaEVuZDsKKyAgICBj
YXNlIFdlYkV2ZW50VG91Y2hDYW5jZWw6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpU
b3VjaENhbmNlbDsKKyAgICBjYXNlIFdlYkV2ZW50VG91Y2hDaGFuZ2U6CisgICAgICAgIHJldHVy
biBQbGF0Zm9ybUV2ZW50OjpUb3VjaE1vdmU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpUb3VjaENhbmNl
bDsKKyAgICB9Cit9CisKK2NsYXNzIFBsYXRmb3JtVG91Y2hQb2ludEJ1aWxkZXIgOiBwdWJsaWMg
UGxhdGZvcm1Ub3VjaFBvaW50IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybVRvdWNoUG9pbnRCdWls
ZGVyKHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IEludFBvaW50JiBsb2NhdGlvbiwgVG91Y2hQ
aGFzZVR5cGUgcGhhc2UpCisgICAgICAgIDogUGxhdGZvcm1Ub3VjaFBvaW50KGlkZW50aWZpZXIs
IGxvY2F0aW9uLCBwaGFzZSkKKyAgICB7CisgICAgfQorfTsKKworY2xhc3MgUGxhdGZvcm1Ub3Vj
aEV2ZW50QnVpbGRlciA6IHB1YmxpYyBQbGF0Zm9ybVRvdWNoRXZlbnQgeworcHVibGljOgorICAg
IFBsYXRmb3JtVG91Y2hFdmVudEJ1aWxkZXIoV2ViRXZlbnQgKmV2ZW50KQorICAgIHsKKyAgICAg
ICAgbV90eXBlID0gdG91Y2hFdmVudFR5cGUoZXZlbnQpOworICAgICAgICBtX21vZGlmaWVycyA9
IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV90aW1lc3RhbXAgPSBjdXJyZW50
VGltZSgpOworCisgICAgICAgIG1fZ2VzdHVyZVNjYWxlID0gZXZlbnQuZ2VzdHVyZVNjYWxlOwor
ICAgICAgICBtX2dlc3R1cmVSb3RhdGlvbiA9IGV2ZW50Lmdlc3R1cmVSb3RhdGlvbjsKKyAgICAg
ICAgbV9pc0dlc3R1cmUgPSBldmVudC5pc0dlc3R1cmU7CisgICAgICAgIG1fcG9zaXRpb24gPSBw
b2ludEZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IGdsb2JhbFBv
aW50Rm9yRXZlbnQoZXZlbnQpOworCisgICAgICAgIHVuc2lnbmVkIHRvdWNoQ291bnQgPSBldmVu
dC50b3VjaENvdW50OworICAgICAgICBtX3RvdWNoUG9pbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkodG91Y2hDb3VudCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3VjaENv
dW50OyArK2kpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBbKE5TTnVtYmVy
ICopW2V2ZW50LnRvdWNoSWRlbnRpZmllcnMgb2JqZWN0QXRJbmRleDppXSB1bnNpZ25lZEludFZh
bHVlXTsKKyAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uID0gSW50UG9pbnQoWyhOU1ZhbHVl
ICopW2V2ZW50LnRvdWNoTG9jYXRpb25zIG9iamVjdEF0SW5kZXg6aV0gcG9pbnRWYWx1ZV0pOwor
ICAgICAgICAgICAgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlVHlwZSB0b3VjaFBoYXNl
ID0gY29udmVydFRvdWNoUGhhc2UoW2V2ZW50LnRvdWNoUGhhc2VzIG9iamVjdEF0SW5kZXg6aV0p
OworICAgICAgICAgICAgbV90b3VjaFBvaW50cy51bmNoZWNrZWRBcHBlbmQoUGxhdGZvcm1Ub3Vj
aFBvaW50QnVpbGRlcihpZGVudGlmaWVyLCBsb2NhdGlvbiwgdG91Y2hQaGFzZSkpOworICAgICAg
ICB9CisgICAgfQorfTsKKworUGxhdGZvcm1Ub3VjaEV2ZW50IFBsYXRmb3JtRXZlbnRGYWN0b3J5
OjpjcmVhdGVQbGF0Zm9ybVRvdWNoRXZlbnQoV2ViRXZlbnQgKmV2ZW50KQoreworICAgIHJldHVy
biBQbGF0Zm9ybVRvdWNoRXZlbnRCdWlsZGVyKGV2ZW50KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQppbmRleCAzMjBl
YTUwNDk4ODUxNGU3N2U5MmFkYmExODViODFiYzk4ZjAzZGQyLi5lODM1YTUyMDljNWE5MDk1MWY3
MzliNGUyYTljOGVhMzBmZDMzN2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KQEAgLTI0LDEwICsyNCwxMyBAQAogICov
CiAKICNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxhdGZvcm1QYXN0ZWJvYXJkLmgiCisK
ICNpbXBvcnQgIkNvbG9yLmgiCiAjaW1wb3J0ICJVUkwuaCIKICNpbXBvcnQgIkltYWdlLmgiCi0j
aW1wb3J0ICJQbGF0Zm9ybVBhc3RlYm9hcmQuaCIKKyNpbXBvcnQgIlBhc3RlYm9hcmQuaCIKKyNp
bXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKIAogU09GVF9M
SU5LX0ZSQU1FV09SSyhVSUtpdCkKQEAgLTE1MiwxMiArMTU1LDEyIEBAIHZvaWQgUGxhdGZvcm1Q
YXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkKICAg
ICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwogCiAgICAgaWYgKGNvbnRlbnQuZGF0YUlu
V2ViQXJjaGl2ZUZvcm1hdCkKLSAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTooTlNE
YXRhICopY29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0LT5jcmVhdGVOU0RhdGEoKSBmb3JL
ZXk6V2ViQXJjaGl2ZVBib2FyZFR5cGVdOworICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZh
bHVlOihOU0RhdGEgKiljb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQtPmNyZWF0ZU5TRGF0
YSgpLmdldCgpIGZvcktleTpXZWJBcmNoaXZlUGJvYXJkVHlwZV07CiAKICAgICBpZiAoY29udGVu
dC5kYXRhSW5SVEZERm9ybWF0KQotICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmNv
bnRlbnQuZGF0YUluUlRGREZvcm1hdC0+Y3JlYXRlTlNEYXRhKCkgZm9yS2V5OihOU1N0cmluZyAq
KWtVVFR5cGVSVEZEXTsKKyAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTpjb250ZW50
LmRhdGFJblJURkRGb3JtYXQtPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGZvcktleTooTlNTdHJpbmcg
KilrVVRUeXBlUlRGRF07CiAgICAgaWYgKGNvbnRlbnQuZGF0YUluUlRGRm9ybWF0KQotICAgICAg
ICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmNvbnRlbnQuZGF0YUluUlRGRm9ybWF0LT5jcmVh
dGVOU0RhdGEoKSBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVJURl07CisgICAgICAgIFtyZXBy
ZXNlbnRhdGlvbnMgc2V0VmFsdWU6Y29udGVudC5kYXRhSW5SVEZGb3JtYXQtPmNyZWF0ZU5TRGF0
YSgpLmdldCgpIGZvcktleTooTlNTdHJpbmcgKilrVVRUeXBlUlRGXTsKICAgICBbcmVwcmVzZW50
YXRpb25zIHNldFZhbHVlOmNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0IGZvcktleTooTlNTdHJp
bmcgKilrVVRUeXBlVGV4dF07CiAgICAgW21fcGFzdGVib2FyZCBzZXRJdGVtczpAW3JlcHJlc2Vu
dGF0aW9ucy5nZXQoKV1dOwogfQpAQCAtMTY2LDcgKzE2OSw3IEBAIHZvaWQgUGxhdGZvcm1QYXN0
ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkSW1hZ2UmIHBhc3RlYm9hcmRJbWFnZSkKIHsK
ICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRv
cHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKICAgICBpZiAoIXBhc3Rl
Ym9hcmRJbWFnZS5yZXNvdXJjZU1JTUVUeXBlLmlzTnVsbCgpKSB7Ci0gICAgICAgIFtyZXByZXNl
bnRhdGlvbnMgc2V0T2JqZWN0OnBhc3RlYm9hcmRJbWFnZS5pbWFnZS0+ZGF0YSgpLT5jcmVhdGVO
U0RhdGEoKSBmb3JLZXk6cGFzdGVib2FyZEltYWdlLnJlc291cmNlTUlNRVR5cGVdOworICAgICAg
ICBbcmVwcmVzZW50YXRpb25zIHNldE9iamVjdDpwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2UtPmRhdGEo
KS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZm9yS2V5OnBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZU1J
TUVUeXBlXTsKICAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRPYmplY3Q6KE5TU3RyaW5nICop
cGFzdGVib2FyZEltYWdlLnVybC51cmwgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdOwog
ICAgIH0KICAgICBbbV9wYXN0ZWJvYXJkIHNldEl0ZW1zOkBbcmVwcmVzZW50YXRpb25zLmdldCgp
XV07CkBAIC0xNzcsNyArMTgwLDcgQEAgdm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICBSZXRh
aW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
RGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwogCiAgICAgaWYgKHBhc3RlYm9hcmRUeXBlID09IFN0
cmluZyhrVVRUeXBlVVJMKSkKLSAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTpbYWRv
cHROUyhbTlNVUkwgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHRdKS5nZXQoKSBmb3JLZXk6cGFz
dGVib2FyZFR5cGVdOworICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmFkb3B0TlMo
W1tOU1VSTCBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dF0pLmdldCgpIGZvcktleTpwYXN0ZWJv
YXJkVHlwZV07CiAgICAgZWxzZSBpZiAoIXBhc3RlYm9hcmRUeXBlLmlzTnVsbCgpKQogICAgICAg
ICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOnRleHQgZm9yS2V5OnBhc3RlYm9hcmRUeXBlXTsK
ICAgICBbbV9wYXN0ZWJvYXJkIHNldEl0ZW1zOkBbcmVwcmVzZW50YXRpb25zLmdldCgpXV07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TY3JlZW5JT1Mu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TY3JlZW5JT1MubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMmJmMjIxMGJjYTZlMDFkOTY5NTdmMjVhNDI0ZWIxM2EzNjdlNzZlNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVNjcmVlbklP
Uy5tbQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKKworI2ltcG9ydCAiRmxvYXRSZWN0Lmgi
CisjaW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQgIkludFJlY3QuaCIKKyNpbXBvcnQgIk5v
dEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJXQUtXaW5kb3cuaCIKKyNpbXBvcnQgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQgIldpZGdldC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2ludCBzY3JlZW5Ib3Jpem9udGFsRFBJKFdpZGdldCopCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHNjcmVlblZlcnRpY2FsRFBJKFdpZGdl
dCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHNj
cmVlbkRlcHRoKFdpZGdldCopCit7CisgICAgLy8gQXNzdW1lIDMyIGJpdHMgcGVyIHBpeGVsLiBT
ZWUgPHJkYXI6Ly9wcm9ibGVtLzkzNzg4Mjk+LgorICAgIHJldHVybiAzMjsKK30KKworaW50IHNj
cmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopCit7CisgICAgLy8gQXNzdW1lIHRoZSBzY3Jl
ZW4gZGVwdGggaXMgZXZlbmx5IGRpdmlkZWQgaW50byBmb3VyIGNvbG9yIGNvbXBvbmVudHMuIFNl
ZSA8cmRhcjovL3Byb2JsZW0vOTM3ODgyOT4uCisgICAgcmV0dXJuIHNjcmVlbkRlcHRoKDApIC8g
NDsKK30KKworYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KikKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKKy8vIFRoZXNlIGZ1bmN0aW9ucyBzY2FsZSBiZXR3ZWVuIHNjcmVlbiBhbmQg
cGFnZSBjb29yZGluYXRlcyBiZWNhdXNlIEphdmFTY3JpcHQvRE9NIG9wZXJhdGlvbnMgCisvLyBh
c3N1bWUgdGhhdCB0aGUgc2NyZWVuIGFuZCB0aGUgcGFnZSBzaGFyZSB0aGUgc2FtZSBjb29yZGlu
YXRlIHN5c3RlbS4KK0Zsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQoreworICAg
IGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKKyAgICBXQUtXaW5kb3cg
KndpbmRvdyA9IFt3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XTsKKyAgICBpZiAoIXdp
bmRvdykKKyAgICAgICAgcmV0dXJuIFt3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgZnJhbWVdOwor
ICAgIENHUmVjdCBzY3JlZW5SZWN0ID0geyBDR1BvaW50WmVybywgW3dpbmRvdyBzY3JlZW5TaXpl
XSB9OworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHNjcmVlblJlY3QpOworfQorCitGbG9h
dFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAoIXdp
ZGdldCkKKyAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CisgICAgV0FLV2luZG93ICp3aW5kb3cg
PSBbd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRvd107CisgICAgaWYgKCF3aW5kb3cpCisg
ICAgICAgIHJldHVybiBDR1JlY3RaZXJvOworICAgIENHUmVjdCBzY3JlZW5SZWN0ID0geyBDR1Bv
aW50WmVybywgW3dpbmRvdyBhdmFpbGFibGVTY3JlZW5TaXplXSB9OworICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KHNjcmVlblJlY3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXplcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVNwZWVj
aFN5bnRoZXNpemVySU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NDA1ZTc2NzZjMWRhZDdlOTNiYjcwZGQ2
ODVjNmMxNzgyMzBlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcklPUy5tbQpAQCAtMCwwICsxLDI3OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3BlZWNoU3ludGhlc2l6ZXIuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworI2lmIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgiCisj
aW5jbHVkZSAiU29mdExpbmtpbmcuaCIKKyNpbmNsdWRlIDxBVkZvdW5kYXRpb24vQVZTcGVlY2hT
eW50aGVzaXMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK1NPRlRfTElOS19GUkFN
RVdPUksoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZTcGVl
Y2hTeW50aGVzaXplcikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWU3BlZWNoVXR0
ZXJhbmNlKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZTcGVlY2hTeW50aGVzaXNW
b2ljZSkKKworU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91bmRhdGlvbiwgQVZTcGVlY2hVdHRlcmFu
Y2VEZWZhdWx0U3BlZWNoUmF0ZSwgZmxvYXQpCitTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0
aW9uLCBBVlNwZWVjaFV0dGVyYW5jZU1heGltdW1TcGVlY2hSYXRlLCBmbG9hdCkKKworI2RlZmlu
ZSBBVlNwZWVjaFV0dGVyYW5jZURlZmF1bHRTcGVlY2hSYXRlIGdldEFWU3BlZWNoVXR0ZXJhbmNl
RGVmYXVsdFNwZWVjaFJhdGUoKQorI2RlZmluZSBBVlNwZWVjaFV0dGVyYW5jZU1heGltdW1TcGVl
Y2hSYXRlIGdldEFWU3BlZWNoVXR0ZXJhbmNlTWF4aW11bVNwZWVjaFJhdGUoKQorCisjZGVmaW5l
IEFWU3BlZWNoU3ludGhlc2l6ZXJDbGFzcyBnZXRBVlNwZWVjaFN5bnRoZXNpemVyQ2xhc3MoKQor
I2RlZmluZSBBVlNwZWVjaFV0dGVyYW5jZUNsYXNzIGdldEFWU3BlZWNoVXR0ZXJhbmNlQ2xhc3Mo
KQorI2RlZmluZSBBVlNwZWVjaFN5bnRoZXNpc1ZvaWNlQ2xhc3MgZ2V0QVZTcGVlY2hTeW50aGVz
aXNWb2ljZUNsYXNzKCkKKworQGludGVyZmFjZSBXZWJTcGVlY2hTeW50aGVzaXNXcmFwcGVyIDog
TlNPYmplY3Q8QVZTcGVlY2hTeW50aGVzaXplckRlbGVnYXRlPgoreworICAgIFdlYkNvcmU6OlBs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIqIG1fc3ludGhlc2l6ZXJPYmplY3Q7CisgICAgLy8gSG9s
ZCBhIFJlZiB0byB0aGUgdXR0ZXJhbmNlIHNvIHRoYXQgaXQgd29uJ3QgZGlzYXBwZWFyIHVudGls
IHRoZSBzeW50aCBpcyBkb25lIHdpdGggaXQuCisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3Jt
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPiBtX3V0dGVyYW5jZTsKKyAgICAKKyAgICBSZXRhaW5Q
dHI8QVZTcGVlY2hTeW50aGVzaXplcj4gbV9zeW50aGVzaXplcjsKK30KKworLSAoV2ViU3BlZWNo
U3ludGhlc2lzV3JhcHBlciAqKWluaXRXaXRoU3BlZWNoU3ludGhlc2l6ZXI6KFdlYkNvcmU6OlBs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIqKXN5bnRoZXNpemVyOworLSAodm9pZClzcGVha1V0dGVy
YW5jZTooUGFzc1JlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZT4pdXR0ZXJhbmNlOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJTcGVlY2hTeW50aGVz
aXNXcmFwcGVyCisKKy0gKFdlYlNwZWVjaFN5bnRoZXNpc1dyYXBwZXIgKilpbml0V2l0aFNwZWVj
aFN5bnRoZXNpemVyOihXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyKilzeW50aGVz
aXplcgoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIAorICAgIG1fc3ludGhlc2l6ZXJPYmplY3QgPSBzeW50aGVzaXplcjsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAoZmxvYXQpbWFwU3BlZWNoUmF0ZVRvUGxhdGZvcm1SYXRlOihm
bG9hdClyYXRlCit7CisgICAgLy8gV2ViU3BlZWNoIHNheXMgdG8gZ28gZnJvbSAuMSAtPiAxMCAo
ZGVmYXVsdCAxKQorICAgIC8vIEFWU3BlZWNoU3ludGhlc2l6ZXIgYXNrcyBmb3IgMCAtPiAxIChk
ZWZhdWx0LiA1KQorICAgIGlmIChyYXRlIDwgMSkKKyAgICAgICAgcmF0ZSAqPSBBVlNwZWVjaFV0
dGVyYW5jZURlZmF1bHRTcGVlY2hSYXRlOworICAgIGVsc2UKKyAgICAgICAgcmF0ZSA9IEFWU3Bl
ZWNoVXR0ZXJhbmNlRGVmYXVsdFNwZWVjaFJhdGUgKyAoKHJhdGUgLSAxKSAqIChBVlNwZWVjaFV0
dGVyYW5jZU1heGltdW1TcGVlY2hSYXRlIC0gQVZTcGVlY2hVdHRlcmFuY2VEZWZhdWx0U3BlZWNo
UmF0ZSkpOworICAgIAorICAgIHJldHVybiByYXRlOworfQorCistICh2b2lkKXNwZWFrVXR0ZXJh
bmNlOihQYXNzUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNl
Pil1dHRlcmFuY2UKK3sKKyAgICAvLyBXaGVuIHNwZWFrIGlzIGNhbGxlZCB3ZSBzaG91bGQgbm90
IGhhdmUgYW4gZXhpc3Rpbmcgc3BlZWNoIHV0dGVyYW5jZSBvdXRzdGFuZGluZy4KKyAgICBBU1NF
UlQoIW1fdXR0ZXJhbmNlKTsKKyAgICBBU1NFUlQodXR0ZXJhbmNlKTsKKyAgICAKKyAgICBpZiAo
IXV0dGVyYW5jZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghbV9zeW50aGVzaXpl
cikgeworICAgICAgICBtX3N5bnRoZXNpemVyID0gYWRvcHROUyhbW0FWU3BlZWNoU3ludGhlc2l6
ZXJDbGFzcyBhbGxvY10gaW5pdF0pOworICAgICAgICBbbV9zeW50aGVzaXplciBzZXREZWxlZ2F0
ZTpzZWxmXTsKKyAgICB9CisKKyAgICAvLyBDaG9vc2UgdGhlIGJlc3Qgdm9pY2UsIGJ5IGZpcnN0
IGxvb2tpbmcgYXQgdGhlIHV0dGVyYW5jZSB2b2ljZSwgdGhlbiB0aGUgdXR0ZXJhbmNlIGxhbmd1
YWdlLAorICAgIC8vIHRoZW4gY2hvb3NlIHRoZSBkZWZhdWx0IGxhbmd1YWdlLgorICAgIFdlYkNv
cmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UqIHV0dGVyYW5jZVZvaWNlID0gdXR0ZXJh
bmNlLT52b2ljZSgpOworICAgIE5TU3RyaW5nICp2b2ljZUxhbmd1YWdlID0gbmlsOworICAgIGlm
ICghdXR0ZXJhbmNlVm9pY2UpIHsKKyAgICAgICAgaWYgKHV0dGVyYW5jZS0+bGFuZygpLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHZvaWNlTGFuZ3VhZ2UgPSBbQVZTcGVlY2hTeW50aGVzaXNWb2lj
ZUNsYXNzIGN1cnJlbnRMYW5ndWFnZUNvZGVdOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2
b2ljZUxhbmd1YWdlID0gdXR0ZXJhbmNlLT5sYW5nKCk7CisgICAgfSBlbHNlCisgICAgICAgIHZv
aWNlTGFuZ3VhZ2UgPSB1dHRlcmFuY2UtPnZvaWNlKCktPmxhbmcoKTsKKyAgICAKKyAgICBBVlNw
ZWVjaFN5bnRoZXNpc1ZvaWNlICphdlZvaWNlID0gbmlsOworICAgIGlmICh2b2ljZUxhbmd1YWdl
KQorICAgICAgICBhdlZvaWNlID0gW0FWU3BlZWNoU3ludGhlc2lzVm9pY2VDbGFzcyB2b2ljZVdp
dGhMYW5ndWFnZTp2b2ljZUxhbmd1YWdlXTsKKworICAgIEFWU3BlZWNoVXR0ZXJhbmNlICphdlV0
dGVyYW5jZSA9IFtBVlNwZWVjaFV0dGVyYW5jZUNsYXNzIHNwZWVjaFV0dGVyYW5jZVdpdGhTdHJp
bmc6dXR0ZXJhbmNlLT50ZXh0KCldOworCisgICAgW2F2VXR0ZXJhbmNlIHNldFJhdGU6W3NlbGYg
bWFwU3BlZWNoUmF0ZVRvUGxhdGZvcm1SYXRlOnV0dGVyYW5jZS0+cmF0ZSgpXV07CisgICAgW2F2
VXR0ZXJhbmNlIHNldFZvbHVtZTp1dHRlcmFuY2UtPnZvbHVtZSgpXTsKKyAgICBbYXZVdHRlcmFu
Y2Ugc2V0UGl0Y2hNdWx0aXBsaWVyOnV0dGVyYW5jZS0+cGl0Y2goKV07CisgICAgW2F2VXR0ZXJh
bmNlIHNldFZvaWNlOmF2Vm9pY2VdOworICAgIG1fdXR0ZXJhbmNlID0gdXR0ZXJhbmNlOworICAg
IAorICAgIFttX3N5bnRoZXNpemVyIHNwZWFrVXR0ZXJhbmNlOmF2VXR0ZXJhbmNlXTsKK30KKwor
LSAodm9pZClwYXVzZQoreworICAgIGlmICghbV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBbbV9zeW50aGVzaXplciBwYXVzZVNwZWFraW5nQXRCb3VuZGFyeTpBVlNwZWVj
aEJvdW5kYXJ5SW1tZWRpYXRlXTsKK30KKworLSAodm9pZClyZXN1bWUKK3sKKyAgICBpZiAoIW1f
dXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgW21fc3ludGhlc2l6ZXIgY29u
dGludWVTcGVha2luZ107Cit9CisKKy0gKHZvaWQpY2FuY2VsCit7CisgICAgaWYgKCFtX3V0dGVy
YW5jZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFttX3N5bnRoZXNpemVyIHN0b3BTcGVh
a2luZ0F0Qm91bmRhcnk6QVZTcGVlY2hCb3VuZGFyeUltbWVkaWF0ZV07Cit9CisKKy0gKHZvaWQp
c3BlZWNoU3ludGhlc2l6ZXI6KEFWU3BlZWNoU3ludGhlc2l6ZXIgKilzeW50aGVzaXplciBkaWRT
dGFydFNwZWVjaFV0dGVyYW5jZTooQVZTcGVlY2hVdHRlcmFuY2UgKil1dHRlcmFuY2UKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3ludGhlc2l6ZXIpOworICAgIFVOVVNFRF9QQVJBTSh1dHRlcmFuY2Up
OworICAgIGlmICghbV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX3N5
bnRoZXNpemVyT2JqZWN0LT5jbGllbnQoKS0+ZGlkU3RhcnRTcGVha2luZyhtX3V0dGVyYW5jZSk7
Cit9CisKKy0gKHZvaWQpc3BlZWNoU3ludGhlc2l6ZXI6KEFWU3BlZWNoU3ludGhlc2l6ZXIgKilz
eW50aGVzaXplciBkaWRGaW5pc2hTcGVlY2hVdHRlcmFuY2U6KEFWU3BlZWNoVXR0ZXJhbmNlICop
dXR0ZXJhbmNlCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bnRoZXNpemVyKTsKKyAgICBVTlVTRURf
UEFSQU0odXR0ZXJhbmNlKTsKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgLy8gQ2xlYXIgdGhlIG1fdXR0ZXJhbmNlIHZhcmlhYmxlIGluIGNhc2UgZmlu
aXNoIHNwZWFraW5nIGtpY2tzIG9mZiBhIG5ldyBzcGVha2luZyBqb2IgaW1tZWRpYXRlbHkuCisg
ICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPiBwbGF0
Zm9ybVV0dGVyYW5jZSA9IG1fdXR0ZXJhbmNlOworICAgIG1fdXR0ZXJhbmNlID0gMDsKKyAgICAK
KyAgICBtX3N5bnRoZXNpemVyT2JqZWN0LT5jbGllbnQoKS0+ZGlkRmluaXNoU3BlYWtpbmcocGxh
dGZvcm1VdHRlcmFuY2UpOworfQorCistICh2b2lkKXNwZWVjaFN5bnRoZXNpemVyOihBVlNwZWVj
aFN5bnRoZXNpemVyICopc3ludGhlc2l6ZXIgZGlkUGF1c2VTcGVlY2hVdHRlcmFuY2U6KEFWU3Bl
ZWNoVXR0ZXJhbmNlICopdXR0ZXJhbmNlCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bnRoZXNpemVy
KTsKKyAgICBVTlVTRURfUEFSQU0odXR0ZXJhbmNlKTsKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zeW50aGVzaXplck9iamVjdC0+Y2xpZW50KCkt
PmRpZFBhdXNlU3BlYWtpbmcobV91dHRlcmFuY2UpOworfQorCistICh2b2lkKXNwZWVjaFN5bnRo
ZXNpemVyOihBVlNwZWVjaFN5bnRoZXNpemVyICopc3ludGhlc2l6ZXIgZGlkQ29udGludWVTcGVl
Y2hVdHRlcmFuY2U6KEFWU3BlZWNoVXR0ZXJhbmNlICopdXR0ZXJhbmNlCit7CisgICAgVU5VU0VE
X1BBUkFNKHN5bnRoZXNpemVyKTsKKyAgICBVTlVTRURfUEFSQU0odXR0ZXJhbmNlKTsKKyAgICBp
ZiAoIW1fdXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zeW50aGVzaXpl
ck9iamVjdC0+Y2xpZW50KCktPmRpZFJlc3VtZVNwZWFraW5nKG1fdXR0ZXJhbmNlKTsKK30KKwor
LSAodm9pZClzcGVlY2hTeW50aGVzaXplcjooQVZTcGVlY2hTeW50aGVzaXplciAqKXN5bnRoZXNp
emVyIGRpZENhbmNlbFNwZWVjaFV0dGVyYW5jZTooQVZTcGVlY2hVdHRlcmFuY2UgKil1dHRlcmFu
Y2UKK3sKKyAgICBVTlVTRURfUEFSQU0oc3ludGhlc2l6ZXIpOworICAgIFVOVVNFRF9QQVJBTSh1
dHRlcmFuY2UpOworICAgIGlmICghbV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICAvLyBDbGVhciB0aGUgbV91dHRlcmFuY2UgdmFyaWFibGUgaW4gY2FzZSBmaW5pc2ggc3Bl
YWtpbmcga2lja3Mgb2ZmIGEgbmV3IHNwZWFraW5nIGpvYiBpbW1lZGlhdGVseS4KKyAgICBSZWZQ
dHI8V2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U+IHBsYXRmb3JtVXR0
ZXJhbmNlID0gbV91dHRlcmFuY2U7CisgICAgbV91dHRlcmFuY2UgPSAwOworICAgIAorICAgIG1f
c3ludGhlc2l6ZXJPYmplY3QtPmNsaWVudCgpLT5kaWRGaW5pc2hTcGVha2luZyhwbGF0Zm9ybVV0
dGVyYW5jZSk7Cit9CisKKy0gKHZvaWQpc3BlZWNoU3ludGhlc2l6ZXI6KEFWU3BlZWNoU3ludGhl
c2l6ZXIgKilzeW50aGVzaXplciB3aWxsU3BlYWtSYW5nZU9mU3BlZWNoU3RyaW5nOihOU1Jhbmdl
KWNoYXJhY3RlclJhbmdlIHV0dGVyYW5jZTooQVZTcGVlY2hVdHRlcmFuY2UgKil1dHRlcmFuY2UK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3ludGhlc2l6ZXIpOworICAgIFVOVVNFRF9QQVJBTSh1dHRl
cmFuY2UpOworICAgIAorICAgIGlmICghbV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICAvLyBpT1Mgb25seSBzdXBwb3J0cyB3b3JkIGJvdW5kYXJpZXMuCisgICAgbV9zeW50
aGVzaXplck9iamVjdC0+Y2xpZW50KCktPmJvdW5kYXJ5RXZlbnRPY2N1cnJlZChtX3V0dGVyYW5j
ZSwgV2ViQ29yZTo6U3BlZWNoV29yZEJvdW5kYXJ5LCBjaGFyYWN0ZXJSYW5nZS5sb2NhdGlvbik7
Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVyOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyKFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6
ZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fc3BlZWNoU3ludGhlc2l6ZXJDbGllbnQoY2xpZW50
KQoreworfQorCitQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjp+UGxhdGZvcm1TcGVlY2hTeW50
aGVzaXplcigpCit7Cit9CisKK3ZvaWQgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcjo6aW5pdGlh
bGl6ZVZvaWNlTGlzdCgpCit7CisgICAgZm9yIChBVlNwZWVjaFN5bnRoZXNpc1ZvaWNlICp2b2lj
ZSBpbiBbQVZTcGVlY2hTeW50aGVzaXNWb2ljZUNsYXNzIHNwZWVjaFZvaWNlc10pIHsKKyAgICAg
ICAgLy8gaU9TIFNwZWVjaCB2b2ljZXMgb25seSBleHBvc2UgdGhlaXIgbGFuZ3VhZ2UgYXMgYW4g
aWRlbnRpZnlpbmcgYXNwZWN0LgorICAgICAgICBOU1N0cmluZyAqbGFuZ3VhZ2UgPSBbdm9pY2Ug
bGFuZ3VhZ2VdOworICAgICAgICBOU1N0cmluZyAqdm9pY2VVUkkgPSBsYW5ndWFnZTsKKyAgICAg
ICAgTlNTdHJpbmcgKm5hbWUgPSBsYW5ndWFnZTsKKyAgICAgICAgYm9vbCBpc0RlZmF1bHQgPSB0
cnVlOworICAgICAgICAKKyAgICAgICAgbV92b2ljZUxpc3QuYXBwZW5kKFBsYXRmb3JtU3BlZWNo
U3ludGhlc2lzVm9pY2U6OmNyZWF0ZSh2b2ljZVVSSSwgbmFtZSwgbGFuZ3VhZ2UsIHRydWUsIGlz
RGVmYXVsdCkpOworICAgIH0KK30KKwordm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpw
YXVzZSgpCit7CisgICAgW21fcGxhdGZvcm1TcGVlY2hXcmFwcGVyLmdldCgpIHBhdXNlXTsKK30K
Kwordm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpyZXN1bWUoKQoreworICAgIFttX3Bs
YXRmb3JtU3BlZWNoV3JhcHBlci5nZXQoKSByZXN1bWVdOworfQorCit2b2lkIFBsYXRmb3JtU3Bl
ZWNoU3ludGhlc2l6ZXI6OnNwZWFrKFBhc3NSZWZQdHI8UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2U+IHV0dGVyYW5jZSkKK3sKKyAgICBpZiAoIW1fcGxhdGZvcm1TcGVlY2hXcmFwcGVy
KQorICAgICAgICBtX3BsYXRmb3JtU3BlZWNoV3JhcHBlciA9IGFkb3B0TlMoW1tXZWJTcGVlY2hT
eW50aGVzaXNXcmFwcGVyIGFsbG9jXSBpbml0V2l0aFNwZWVjaFN5bnRoZXNpemVyOnRoaXNdKTsK
KyAgICAKKyAgICBbbV9wbGF0Zm9ybVNwZWVjaFdyYXBwZXIuZ2V0KCkgc3BlYWtVdHRlcmFuY2U6
dXR0ZXJhbmNlLmdldCgpXTsKK30KKwordm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpj
YW5jZWwoKQoreworICAgIFttX3BsYXRmb3JtU3BlZWNoV3JhcHBlci5nZXQoKSBjYW5jZWxdOwor
fQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUVD
SF9TWU5USEVTSVMpCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU1NMS2V5R2VuZXJhdG9ySU9TLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9TU0xLZXlHZW5lcmF0b3JJT1MuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0
Y2NlMzdjOWU3Yzk3ZGU1MDJhZDJkYzQ3YWI4MGQ3N2FhN2UxMGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU1NMS2V5R2VuZXJhdG9ySU9TLmNwcApAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNTTEtleUdlbmVyYXRvci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgZ2V0U3VwcG9ydGVkS2V5U2l6ZXMoVmVjdG9yPFN0cmluZz4m
KQoreworfQorCitTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2ln
bmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nJiBjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IFVS
TCYpCit7CisgICAgVU5VU0VEX1BBUkFNKGtleVNpemVJbmRleCk7CisgICAgVU5VU0VEX1BBUkFN
KGNoYWxsZW5nZVN0cmluZyk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Ny
b2xsQW5pbWF0b3JJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmlt
YXRvcklPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwZDE5N2IzMDE2ZGE4YjJkNTU2ZDgzZWU1MjU5YzU4NTgw
ZDY5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Ny
b2xsQW5pbWF0b3JJT1MuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBT
Y3JvbGxBbmltYXRvcklPU19oCisjZGVmaW5lIFNjcm9sbEFuaW1hdG9ySU9TX2gKKworI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtVG91Y2hFdmVudDsKKworY2xhc3MgU2Nyb2xs
QW5pbWF0b3JJT1MgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgeworcHVibGljOgorICAgIFNjcm9s
bEFuaW1hdG9ySU9TKFNjcm9sbGFibGVBcmVhKik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0
b3JJT1MoKTsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdmlydHVhbCBib29sIGhh
bmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgT1ZFUlJJREU7CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGRldGVybWluZVNjcm9sbGFibGVBcmVhRm9yVG91Y2hT
ZXF1ZW5jZShjb25zdCBJbnRTaXplJiB0b3VjaERlbHRhKTsKKworICAgIC8vIFN0YXRlIGZvciBo
YW5kbGluZyBzZXF1ZW5jZXMgb2YgdG91Y2hlcyBpbiBkZWZhdWx0VG91Y2hFdmVudEhhbmRsZXIu
CisgICAgZW51bSBBeGlzTGF0Y2ggeworICAgICAgICBBeGlzTGF0Y2hOb3RDb21wdXRlZCwKKyAg
ICAgICAgQXhpc0xhdGNoTm9uZSwKKyAgICAgICAgQXhpc0xhdGNoSG9yaXpvbnRhbCwKKyAgICAg
ICAgQXhpc0xhdGNoVmVydGljYWwKKyAgICB9OworICAgIEF4aXNMYXRjaCBtX3RvdWNoU2Nyb2xs
QXhpc0xhdGNoOworICAgIGJvb2wgbV9pblRvdWNoU2VxdWVuY2U7CisgICAgYm9vbCBtX2NvbW1p
dHRlZFRvU2Nyb2xsQXhpczsKKyAgICBib29sIG1fc3RhcnRlZFNjcm9sbDsKKyAgICBJbnRQb2lu
dCBtX2ZpcnN0VG91Y2hQb2ludDsKKyAgICBJbnRQb2ludCBtX2xhc3RUb3VjaFBvaW50OworCisg
ICAgLy8gV2hlbiB3ZSdyZSBpbiBhIHRvdWNoIHNlcXVlbmNlLCB0aGlzIHdpbGwgcG9pbnQgdG8g
dGhlIHNjcm9sbGFibGUgYXJlYSB0aGF0CisgICAgLy8gc2hvdWxkIGFjdHVhbGx5IGJlIHNjcm9s
bGVkIGR1cmluZyB0aGUgc2VxdWVuY2UuCisgICAgU2Nyb2xsYWJsZUFyZWEqIG1fc2Nyb2xsYWJs
ZUFyZWFGb3JUb3VjaFNlcXVlbmNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gU2Nyb2xsQW5pbWF0b3JJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhZjUyMTI4YTUzYWQ3MTAw
MGE3MGQwZDE2YzM4YjQ3YjUxNDBlNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MubW0KQEAgLTAsMCArMSwxODQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JJ
T1MuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtVG91Y2hFdmVudElPUy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3du
UHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVh
KiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1h
dG9ySU9TKHNjcm9sbGFibGVBcmVhKSk7Cit9CisKK1Njcm9sbEFuaW1hdG9ySU9TOjpTY3JvbGxB
bmltYXRvcklPUyhTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCisgICAgOiBTY3JvbGxB
bmltYXRvcihzY3JvbGxhYmxlQXJlYSkKKyAgICAsIG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2goQXhp
c0xhdGNoTm90Q29tcHV0ZWQpCisgICAgLCBtX2luVG91Y2hTZXF1ZW5jZShmYWxzZSkKKyAgICAs
IG1fY29tbWl0dGVkVG9TY3JvbGxBeGlzKGZhbHNlKQorICAgICwgbV9zdGFydGVkU2Nyb2xsKGZh
bHNlKQorICAgICwgbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UoMCkKK3sKK30KKwor
U2Nyb2xsQW5pbWF0b3JJT1M6On5TY3JvbGxBbmltYXRvcklPUygpCit7Cit9CisKK2Jvb2wgU2Ny
b2xsQW5pbWF0b3JJT1M6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50
JiB0b3VjaEV2ZW50KQoreworICAgIGlmICh0b3VjaEV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2
ZW50OjpUb3VjaFN0YXJ0ICYmIHRvdWNoRXZlbnQudG91Y2hDb3VudCgpID09IDEpIHsKKyAgICAg
ICAgbV9maXJzdFRvdWNoUG9pbnQgPSB0b3VjaEV2ZW50LnRvdWNoTG9jYXRpb25BdEluZGV4KDAp
OworICAgICAgICBtX2xhc3RUb3VjaFBvaW50ID0gbV9maXJzdFRvdWNoUG9pbnQ7CisgICAgICAg
IG1faW5Ub3VjaFNlcXVlbmNlID0gdHJ1ZTsKKyAgICAgICAgbV9jb21taXR0ZWRUb1Njcm9sbEF4
aXMgPSBmYWxzZTsKKyAgICAgICAgbV9zdGFydGVkU2Nyb2xsID0gZmFsc2U7CisgICAgICAgIG1f
dG91Y2hTY3JvbGxBeGlzTGF0Y2ggPSBBeGlzTGF0Y2hOb3RDb21wdXRlZDsKKyAgICAgICAgLy8g
TmV2ZXIgY2xhaW0gdG8gaGF2ZSBoYW5kbGVkIHRoZSBUb3VjaFN0YXJ0LCBiZWNhdXNlIHRoYXQg
d2lsbCBraWxsIGRlZmF1bHQgc2Nyb2xsaW5nIGJlaGF2aW9yLgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFtX2luVG91Y2hTZXF1ZW5jZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKHRvdWNoRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6OlRv
dWNoRW5kIHx8IHRvdWNoRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6OlRvdWNoQ2FuY2Vs
KSB7CisgICAgICAgIG1faW5Ub3VjaFNlcXVlbmNlID0gZmFsc2U7CisgICAgICAgIG1fc2Nyb2xs
YWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlID0gMDsKKyAgICAgICAgaWYgKG1fc3RhcnRlZFNjcm9s
bCkKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhKCktPmRpZEVuZFNjcm9sbCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgYSBzZWNvbmQgdG91Y2ggYXBwZWFy
cywgYXNzdW1lIHRoYXQgdGhlIHVzZXIgaXMgdHJ5aW5nIHRvIHpvb20sIGFuZCBiYWlsIG9uIHRo
ZSBzY3JvbGxpbmcgc2VxdWVuY2UuCisgICAgLy8gRklYTUU6IGlmIHRoYXQgc2Vjb25kIHRvdWNo
IGlzIGluc2lkZSB0aGUgc2Nyb2xsYWJsZSBhcmVhLCBzaG91bGQgd2Uga2VlcCBzY3JvbGxpbmc/
CisgICAgaWYgKHRvdWNoRXZlbnQudG91Y2hDb3VudCgpICE9IDEpIHsKKyAgICAgICAgbV9pblRv
dWNoU2VxdWVuY2UgPSBmYWxzZTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2Vx
dWVuY2UgPSAwOworICAgICAgICBpZiAobV9zdGFydGVkU2Nyb2xsKQorICAgICAgICAgICAgc2Ny
b2xsYWJsZUFyZWEoKS0+ZGlkRW5kU2Nyb2xsKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgCisgICAgSW50UG9pbnQgY3VycmVudFBvaW50ID0gdG91Y2hFdmVudC50b3VjaExv
Y2F0aW9uQXRJbmRleCgwKTsKKworICAgIEludFNpemUgdG91Y2hEZWx0YSA9IG1fbGFzdFRvdWNo
UG9pbnQgLSBjdXJyZW50UG9pbnQ7CisgICAgbV9sYXN0VG91Y2hQb2ludCA9IGN1cnJlbnRQb2lu
dDsKKworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UpCisgICAgICAg
IGRldGVybWluZVNjcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZSh0b3VjaERlbHRhKTsKKwor
ICAgIGlmICghbV9jb21taXR0ZWRUb1Njcm9sbEF4aXMpIHsKKyAgICAgICAgYm9vbCBob3Jpem9u
dGFsbHlTY3JvbGxhYmxlID0gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShIb3Jpem9udGFs
U2Nyb2xsYmFyKTsKKyAgICAgICAgYm9vbCB2ZXJ0aWNhbGx5U2Nyb2xsYWJsZSA9IG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbFNpemUoVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgICAgIGlmICgh
aG9yaXpvbnRhbGx5U2Nyb2xsYWJsZSAmJiAhdmVydGljYWxseVNjcm9sbGFibGUpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgSW50U2l6ZSBkZWx0YUZyb21TdGFydCA9IG1f
Zmlyc3RUb3VjaFBvaW50IC0gY3VycmVudFBvaW50OworICAgIAorICAgICAgICBjb25zdCBpbnQg
bGF0Y2hBeGlzTW92ZW1lbnRUaHJlc2hvbGQgPSAxMDsKKyAgICAgICAgaWYgKCFob3Jpem9udGFs
bHlTY3JvbGxhYmxlICYmIHZlcnRpY2FsbHlTY3JvbGxhYmxlKSB7CisgICAgICAgICAgICBtX3Rv
dWNoU2Nyb2xsQXhpc0xhdGNoID0gQXhpc0xhdGNoVmVydGljYWw7CisgICAgICAgICAgICBpZiAo
YWJzKGRlbHRhRnJvbVN0YXJ0LmhlaWdodCgpKSA+PSBsYXRjaEF4aXNNb3ZlbWVudFRocmVzaG9s
ZCkKKyAgICAgICAgICAgICAgICBtX2NvbW1pdHRlZFRvU2Nyb2xsQXhpcyA9IHRydWU7CisgICAg
ICAgIH0gZWxzZSBpZiAoaG9yaXpvbnRhbGx5U2Nyb2xsYWJsZSAmJiAhdmVydGljYWxseVNjcm9s
bGFibGUpIHsKKyAgICAgICAgICAgIG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2ggPSBBeGlzTGF0Y2hI
b3Jpem9udGFsOworICAgICAgICAgICAgaWYgKGFicyhkZWx0YUZyb21TdGFydC53aWR0aCgpKSA+
PSBsYXRjaEF4aXNNb3ZlbWVudFRocmVzaG9sZCkKKyAgICAgICAgICAgICAgICBtX2NvbW1pdHRl
ZFRvU2Nyb2xsQXhpcyA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Nv
bW1pdHRlZFRvU2Nyb2xsQXhpcyA9IHRydWU7CisKKyAgICAgICAgICAgIGlmIChtX3RvdWNoU2Ny
b2xsQXhpc0xhdGNoID09IEF4aXNMYXRjaE5vdENvbXB1dGVkKSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgZmxvYXQgbG9ja0FuZ2xlRGVncmVlcyA9IDIwOworICAgICAgICAgICAgICAgIGlmIChk
ZWx0YUZyb21TdGFydC53aWR0aCgpICYmIGRlbHRhRnJvbVN0YXJ0LmhlaWdodCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IGRyYWdBbmdsZSA9IGF0YW5mKGZhYnNmKGRlbHRhRnJvbVN0
YXJ0LmhlaWdodCgpKSAvIGZhYnNmKGRlbHRhRnJvbVN0YXJ0LndpZHRoKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGRyYWdBbmdsZSA8PSBkZWcycmFkKGxvY2tBbmdsZURlZ3JlZXMpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbV90b3VjaFNjcm9sbEF4aXNMYXRjaCA9IEF4aXNMYXRj
aEhvcml6b250YWw7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRyYWdBbmdsZSA+PSBk
ZWcycmFkKDkwIC0gbG9ja0FuZ2xlRGVncmVlcykpCisgICAgICAgICAgICAgICAgICAgICAgICBt
X3RvdWNoU2Nyb2xsQXhpc0xhdGNoID0gQXhpc0xhdGNoVmVydGljYWw7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW1f
Y29tbWl0dGVkVG9TY3JvbGxBeGlzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIAorICAgIC8vIEhvcml6b250YWwKKyAg
ICBpZiAobV90b3VjaFNjcm9sbEF4aXNMYXRjaCAhPSBBeGlzTGF0Y2hWZXJ0aWNhbCkgeworICAg
ICAgICBpbnQgZGVsdGEgPSB0b3VjaERlbHRhLndpZHRoKCk7CisgICAgICAgIGhhbmRsZWQgfD0g
bV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UtPnNjcm9sbChkZWx0YSA8IDAgPyBTY3Jv
bGxMZWZ0IDogU2Nyb2xsUmlnaHQsIFNjcm9sbEJ5UGl4ZWwsIGZhYnNmKGRlbHRhKSk7CisgICAg
fQorICAgIAorICAgIC8vIFZlcnRpY2FsCisgICAgaWYgKG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2gg
IT0gQXhpc0xhdGNoSG9yaXpvbnRhbCkgeworICAgICAgICBpbnQgZGVsdGEgPSB0b3VjaERlbHRh
LmhlaWdodCgpOworICAgICAgICBoYW5kbGVkIHw9IG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNl
cXVlbmNlLT5zY3JvbGwoZGVsdGEgPCAwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxC
eVBpeGVsLCBmYWJzZihkZWx0YSkpOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm4gZmFsc2Ug
dW50aWwgd2UgbWFuYWdlIHRvIHNjcm9sbCBhdCBhbGwsIGFuZCB0aGVuIGtlZXAgcmV0dXJuaW5n
IHRydWUgdW50aWwgdGhlIGdlc3R1cmUgZW5kcy4KKyAgICBpZiAoIW1fc3RhcnRlZFNjcm9sbCkg
eworICAgICAgICBpZiAoIWhhbmRsZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIG1fc3RhcnRlZFNjcm9sbCA9IHRydWU7CisgICAgICAgIHNjcm9sbGFibGVBcmVhKCktPmRp
ZFN0YXJ0U2Nyb2xsKCk7CisgICAgfSBlbHNlIGlmIChoYW5kbGVkKQorICAgICAgICBzY3JvbGxh
YmxlQXJlYSgpLT5kaWRVcGRhdGVTY3JvbGwoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRvcklPUzo6ZGV0ZXJtaW5lU2Nyb2xsYWJsZUFyZWFGb3JUb3Vj
aFNlcXVlbmNlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIEFTU0VSVCghbV9z
Y3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UpOworCisgICAgU2Nyb2xsYWJsZUFyZWEqIHNj
cm9sbGFibGVBcmVhID0gbV9zY3JvbGxhYmxlQXJlYTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICBpZiAoIXNjcm9sbGFibGVBcmVhLT5pc1Bpbm5lZEluQm90aERpcmVjdGlvbnMoc2Nyb2xs
RGVsdGEpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWEqIGVu
Y2xvc2luZ0FyZWEgPSBzY3JvbGxhYmxlQXJlYS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKTsK
KyAgICAgICAgaWYgKCFlbmNsb3NpbmdBcmVhKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEgPSBlbmNsb3NpbmdBcmVhOworICAgIH0KKworICAgIEFTU0VSVChz
Y3JvbGxhYmxlQXJlYSk7CisgICAgbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UgPSBz
Y3JvbGxhYmxlQXJlYTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbFZpZXdJT1MubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsVmlld0lPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMGIwYWQxMzJi
YjQzZWJmMTZkMGI3ZjE0YWQ5NWRhYTc3OWZhNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbFZpZXdJT1MubW0KQEAgLTAsMCArMSwyNzEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlNjcm9sbFZpZXcuaCIKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJG
bG9hdFJlY3QuaCIKKyNpbXBvcnQgIkludFJlY3QuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNp
bXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJXQUtBcHBLaXRTdHVicy5oIgorI2lt
cG9ydCAiV0FLQ2xpcFZpZXcuaCIKKyNpbXBvcnQgIldBS1Njcm9sbFZpZXcuaCIKKyNpbXBvcnQg
IldBS1ZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXQUtXaW5kb3cuaCIKKyNpbXBvcnQgIldLVmll
d1ByaXZhdGUuaCIKKyNpbXBvcnQgIldlYkNvcmVGcmFtZVZpZXcuaCIKKwordXNpbmcgbmFtZXNw
YWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgTlNTY3JvbGxWaWV3PFdl
YkNvcmVGcmFtZVNjcm9sbFZpZXc+ICpTY3JvbGxWaWV3OjpzY3JvbGxWaWV3KCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoIXBsYXRmb3JtV2lkZ2V0KCkgfHwgW3BsYXRmb3JtV2lkZ2V0KCkgaXNLaW5k
T2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pOworICAgIEFTU0VSVCghcGxhdGZvcm1XaWRn
ZXQoKSB8fCBbcGxhdGZvcm1XaWRnZXQoKSBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdl
YkNvcmVGcmFtZVNjcm9sbFZpZXcpXSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5TU2Nyb2xs
VmlldzxXZWJDb3JlRnJhbWVTY3JvbGxWaWV3PiAqPihwbGF0Zm9ybVdpZGdldCgpKTsKK30KKwor
TlNWaWV3ICpTY3JvbGxWaWV3Ojpkb2N1bWVudFZpZXcoKSBjb25zdAoreworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gW3Njcm9sbFZpZXcoKSBkb2N1bWVudFZp
ZXddOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIG5pbDsKK30K
Kwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUFkZENoaWxkKFdpZGdldCogY2hpbGQpCit7Cisg
ICAgQVNTRVJUKGNoaWxkICE9IHRoaXMpOworCisgICAgY2hpbGQtPmFkZFRvU3VwZXJ2aWV3KGRv
Y3VtZW50VmlldygpKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVJlbW92ZUNoaWxk
KFdpZGdldCogY2hpbGQpCit7CisgICAgY2hpbGQtPnJlbW92ZUZyb21TdXBlcnZpZXcoKTsKK30K
Kwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbGJhck1vZGVzKCkKK3sKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW3Njcm9sbFZpZXcoKSBzZXRTY3JvbGxp
bmdNb2RlczptX2hvcml6b250YWxTY3JvbGxiYXJNb2RlIHZlcnRpY2FsOm1fdmVydGljYWxTY3Jv
bGxiYXJNb2RlIGFuZExvY2s6Tk9dOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JvbGxiYXJNb2RlcyhTY3JvbGxiYXJNb2Rl
JiBob3Jpem9udGFsLCBTY3JvbGxiYXJNb2RlJiB2ZXJ0aWNhbCkgY29uc3QKK3sKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW3Njcm9sbFZpZXcoKSBzY3JvbGxpbmdNb2Rl
czomaG9yaXpvbnRhbCB2ZXJ0aWNhbDomdmVydGljYWxdOworICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRDYW5CbGl0T25TY3Jv
bGwoYm9vbCBjYW5CbGl0T25TY3JvbGwpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOworICAgIFtbc2Nyb2xsVmlldygpIGNvbnRlbnRWaWV3XSBzZXRDb3BpZXNPblNjcm9sbDpj
YW5CbGl0T25TY3JvbGxdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK2Jv
b2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1DYW5CbGl0T25TY3JvbGwoKSBjb25zdAoreworICAgIHJl
dHVybiBbW3Njcm9sbFZpZXcoKSBjb250ZW50Vmlld10gY29waWVzT25TY3JvbGxdOworfQorCitJ
bnRSZWN0IFNjcm9sbFZpZXc6OmFjdHVhbFZpc2libGVDb250ZW50UmVjdCgpIGNvbnN0Cit7Cisg
ICAgQ0dSZWN0IHIgPSBDR1JlY3RaZXJvOworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKKyAgICBXQUtTY3JvbGxWaWV3ICp2aWV3ID0gc3RhdGljX2Nhc3Q8V0FLU2Nyb2xsVmlldyAq
PihwbGF0Zm9ybVdpZGdldCgpKTsKKyAgICByID0gW3ZpZXcgYWN0dWFsRG9jdW1lbnRWaXNpYmxl
UmVjdF07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdChyKTsKK30KKworSW50UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlRXh0ZW50Q29u
dGVudFJlY3QoKSBjb25zdAoreworICAgIE5TU2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19jYXN0
PE5TU2Nyb2xsVmlldyAqPihwbGF0Zm9ybVdpZGdldCgpKTsKKworICAgIENHUmVjdCByID0gQ0dS
ZWN0WmVybzsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgaWYgKFt2aWV3
IGlzS2luZE9mQ2xhc3M6W05TU2Nyb2xsVmlldyBjbGFzc11dKQorICAgICAgICByID0gW3ZpZXcg
ZG9jdW1lbnRWaXNpYmxlRXh0ZW50XTsKKyAgICBlbHNlIGlmICh2aWV3KSB7CisgICAgICAgIHIu
b3JpZ2luID0gW3ZpZXcgdmlzaWJsZVJlY3RdLm9yaWdpbjsKKyAgICAgICAgci5zaXplID0gW3Zp
ZXcgYm91bmRzXS5zaXplOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBXZWJLaXQy
IG9uIGlPUyBkb2Vzbid0IGluZm9ybSB0aGUgV2ViUHJvY2VzcyBvZiB0aGUgZXhwb3NlZCBhcmVh
LgorICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50c1NpemUoKSk7Cisg
ICAgfQorCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdChyKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRBY3R1YWxTY3JvbGxQb3Np
dGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCit7CisgICAgTlNTY3JvbGxWaWV3ICp2aWV3
ID0gc3RhdGljX2Nhc3Q8TlNTY3JvbGxWaWV3ICo+KHBsYXRmb3JtV2lkZ2V0KCkpOworCisgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNz
OltOU1Njcm9sbFZpZXcgY2xhc3NdXSkKKyAgICAgICAgW3ZpZXcgc2V0QWN0dWFsU2Nyb2xsUG9z
aXRpb246cG9zaXRpb25dOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK0lu
dFJlY3QgU2Nyb2xsVmlldzo6cGxhdGZvcm1WaXNpYmxlQ29udGVudFJlY3QoYm9vbCBpbmNsdWRl
U2Nyb2xsYmFycykgY29uc3QKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cisg
ICAgaWYgKGluY2x1ZGVTY3JvbGxiYXJzKSB7CisgICAgICAgIGlmIChOU1ZpZXcqIGRvY3VtZW50
VmlldyA9IHRoaXMtPmRvY3VtZW50VmlldygpKQorICAgICAgICAgICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QoW2RvY3VtZW50VmlldyB2aXNpYmxlUmVjdF0pOworICAgIH0KKyAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdChbc2Nyb2xsVmlldygpIGRvY3VtZW50VmlzaWJsZVJlY3RdKTsKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisK
K0ludFNpemUgU2Nyb2xsVmlldzo6cGxhdGZvcm1WaXNpYmxlQ29udGVudFNpemUoYm9vbCBpbmNs
dWRlU2Nyb2xsYmFycykgY29uc3QKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisgICAgaWYgKGluY2x1ZGVTY3JvbGxiYXJzKSB7CisgICAgICAgIGlmIChOU1ZpZXcqIGRvY3Vt
ZW50VmlldyA9IHRoaXMtPmRvY3VtZW50VmlldygpKQorICAgICAgICAgICAgcmV0dXJuIEludFNp
emUoW2RvY3VtZW50VmlldyB2aXNpYmxlUmVjdF0uc2l6ZSk7CisgICAgfQorCisgICAgcmV0dXJu
IGV4cGFuZGVkSW50U2l6ZShGbG9hdFNpemUoW3Njcm9sbFZpZXcoKSBkb2N1bWVudFZpc2libGVS
ZWN0XS5zaXplKSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4g
SW50U2l6ZSgpOworfQorCitUaWxlQ2FjaGUqIFNjcm9sbFZpZXc6OnRpbGVDYWNoZSgpCit7Cisg
ICAgLy8gTWFrZSB0aWxlIGNhY2hlIHBvaW50ZXIgYXZhaWxhYmxlIHZpYSB0aGUgbWFpbiBmcmFt
ZSBvbmx5LiBUaWxlIGNhY2hlIGludGVyYWN0aW9uIHNob3VsZCBiZSBtYW5hZ2VkIGJ5CisgICAg
Ly8gdGhlIG1haW4gZnJhbWUgYW5kIHRoaXMgYXZvaWRzIGhhdmluZyB0byBhZGQgcGFyZW50IGNo
ZWNrcyB0byBhbGwgY2FsbCBzaXRlcy4KKyAgICBpZiAocGFyZW50KCkpCisgICAgICAgIHJldHVy
biAwOworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBXQUtTY3JvbGxWaWV3
ICp2aWV3ID0gc3RhdGljX2Nhc3Q8V0FLU2Nyb2xsVmlldyAqPihwbGF0Zm9ybVdpZGdldCgpKTsK
KyAgICByZXR1cm4gW1t2aWV3IHdpbmRvd10gdGlsZUNhY2hlXTsKKyAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0Q29udGVudHNT
aXplKCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgaW50IHcgPSBt
X2NvbnRlbnRzU2l6ZS53aWR0aCgpOworICAgIGludCBoID0gbV9jb250ZW50c1NpemUuaGVpZ2h0
KCk7CisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBMT0coRnJhbWVzLCAiJXAgJUAgYXQgdyAlZCBo
ICVkXG4iLCBkb2N1bWVudFZpZXcoKSwgWyhpZClbZG9jdW1lbnRWaWV3KCkgY2xhc3NdIGNsYXNz
TmFtZV0sIHcsIGgpOyAgICAgICAgICAgIAorI2Vsc2UKKyAgICBMT0coRnJhbWVzLCAiJXAgJUAg
YXQgdyAlZCBoICVkXG4iLCBkb2N1bWVudFZpZXcoKSwgTlNTdHJpbmdGcm9tQ2xhc3MoW2RvY3Vt
ZW50VmlldygpIGNsYXNzXSksIHcsIGgpOworI2VuZGlmCisgICAgTlNTaXplIHRlbXBTaXplID0g
eyBzdGF0aWNfY2FzdDxDR0Zsb2F0PihtYXgoMCwgdykpLCBzdGF0aWNfY2FzdDxDR0Zsb2F0Piht
YXgoMCwgaCkpIH07IC8vIHdvcmthcm91bmQgZm9yIDQyMTMzMTQKKyAgICBbZG9jdW1lbnRWaWV3
KCkgc2V0Qm91bmRzU2l6ZTp0ZW1wU2l6ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbGJhcnNTdXBwcmVzc2Vk
KGJvb2wgcmVwYWludE9uVW5zdXBwcmVzcykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgW3Njcm9sbFZpZXcoKSBzZXRTY3JvbGxCYXJzU3VwcHJlc3NlZDptX3Njcm9s
bGJhcnNTdXBwcmVzc2VkCisgICAgICAgICAgICAgICAgICAgICAgcmVwYWludE9uVW5zdXBwcmVz
czpyZXBhaW50T25VbnN1cHByZXNzXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
fQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50
UG9pbnQmIHNjcm9sbFBvaW50KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KyAgICBOU1BvaW50IGZsb2F0UG9pbnQgPSBzY3JvbGxQb2ludDsKKyAgICBOU1BvaW50IHRlbXBQ
b2ludCA9IHsgbWF4KC1bc2Nyb2xsVmlldygpIHNjcm9sbE9yaWdpbl0ueCwgZmxvYXRQb2ludC54
KSwgbWF4KC1bc2Nyb2xsVmlldygpIHNjcm9sbE9yaWdpbl0ueSwgZmxvYXRQb2ludC55KSB9OyAg
Ly8gRG9uJ3QgdXNlIE5TTWFrZVBvaW50IHRvIHdvcmsgYXJvdW5kIDQyMTMzMTQuCisgICAgW2Rv
Y3VtZW50VmlldygpIHNjcm9sbFBvaW50OnRlbXBQb2ludF07CisgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKK30KKworYm9vbCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcm9sbChTY3JvbGxE
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5KQoreworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBi
ZSBuaWNlIHRvIGltcGxlbWVudCB0aGlzIHNvIHRoYXQgYWxsIG9mIHRoZSBjb2RlIGluIFdlYkZy
YW1lVmlldyBjb3VsZCBnbyBhd2F5LgorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtUmVwYWludENvbnRlbnRSZWN0
YW5nbGUoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCAvKm5vdyovKQoreworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5TVmlldyAqdmlldyA9IGRvY3VtZW50Vmlldygp
OworCisgICAgW3ZpZXcgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OnJlY3RdOyAgICAKKyAgICAvLyBG
SVhNRTogSGFuZGxlICJub3ciLgorCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30K
KworLy8gIkNvbnRhaW5pbmcgV2luZG93IiBtZWFucyB0aGUgTlNXaW5kb3cncyBjb29yZCBzeXN0
ZW0sIHdoaWNoIGlzIG9yaWdpbiBsb3dlciBsZWZ0CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6cGxh
dGZvcm1Db250ZW50c1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIGlmIChOU1ZpZXcqIGRvY3VtZW50Vmll
dyA9IHRoaXMtPmRvY3VtZW50VmlldygpKSB7CisgICAgICAgIE5TUmVjdCB0ZW1wUmVjdCA9IHJl
Y3Q7CisgICAgICAgIHRlbXBSZWN0ID0gW2RvY3VtZW50VmlldyBjb252ZXJ0UmVjdDp0ZW1wUmVj
dCB0b1ZpZXc6bmlsXTsKKyAgICAgICAgdGVtcFJlY3Qub3JpZ2luID0gW1tkb2N1bWVudFZpZXcg
d2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOnRlbXBSZWN0Lm9yaWdpbl07CisgICAgICAgIHJl
dHVybiBlbmNsb3NpbmdJbnRSZWN0KHRlbXBSZWN0KTsKKyAgICB9CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCitJbnRQb2ludCBTY3Jv
bGxWaWV3OjpwbGF0Zm9ybVNjcmVlblRvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBj
b25zdAoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBpZiAoTlNWaWV3
KiBkb2N1bWVudFZpZXcgPSB0aGlzLT5kb2N1bWVudFZpZXcoKSkgeworICAgICAgICBOU1BvaW50
IHdpbmRvd0Nvb3JkID0gW1tkb2N1bWVudFZpZXcgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNl
OiBwb2ludF07CisgICAgICAgIHJldHVybiBJbnRQb2ludChbZG9jdW1lbnRWaWV3IGNvbnZlcnRQ
b2ludDp3aW5kb3dDb29yZCBmcm9tVmlldzpuaWxdKTsKKyAgICB9CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gSW50UG9pbnQoKTsKK30KKworYm9vbCBTY3JvbGxW
aWV3OjpwbGF0Zm9ybUlzT2Zmc2NyZWVuKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogRERLOiBT
Y3JvbGxWaWV3TWFjLm1tIGFsc28gY2hlY2tzOiAhW1twbGF0Zm9ybVdpZGdldCgpIHdpbmRvd10g
aXNWaXNpYmxlXQorICAgIC8vIGJ1dCAtW1dBS1dpbmRvdyBpc1Zpc2libGVdIGRvZXNuJ3QgZXhp
c3QuCisgICAgcmV0dXJuICFbcGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddOworfQorCit2b2lkIFNj
cm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhck92ZXJs
YXlTdHlsZSkKK3sKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbE9yaWdp
bihjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBib29sIHVwZGF0ZVBvc2l0aW9uQWxsLCBib29sIHVw
ZGF0ZVBvc2l0aW9uU3luY2hyb25vdXNseSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgW3Njcm9sbFZpZXcoKSBzZXRTY3JvbGxPcmlnaW46c3RhdGljX2Nhc3Q8Q0dQ
b2ludD4ob3JpZ2luKSB1cGRhdGVQb3NpdGlvbkF0QWxsOnVwZGF0ZVBvc2l0aW9uQWxsIGltbWVk
aWF0ZWx5OnVwZGF0ZVBvc2l0aW9uU3luY2hyb25vdXNseV07CisgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Njcm9sbGJhclRoZW1lSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Ny
b2xsYmFyVGhlbWVJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTgxNjJhODFmYWU5NGQ1YTVmY2M1NTg0MzA0
MjI2MTM2OTVlMTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Njcm9sbGJhclRoZW1lSU9TLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjcm9sbGJhclRoZW1lSU9T
X2gKKyNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVJT1NfaAorCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhl
bWVDb21wb3NpdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXJU
aGVtZUlPUyA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSB7CitwdWJsaWM6CisgICAg
U2Nyb2xsYmFyVGhlbWVJT1MoKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZUlPUygpOwor
CisgICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFy
U2Nyb2xsYmFyKSBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250
cm9sVGludHMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFs
IGRvdWJsZSBpbml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxheSgpIE9WRVJSSURFOworCisgICAgdmlydHVh
bCBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQoKSBjb25zdCBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVt
ZUNsaWVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFy
KFNjcm9sbGJhclRoZW1lQ2xpZW50KikgT1ZFUlJJREU7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCopIE9WRVJSSURFOwor
CisgICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50
KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBT
Y3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBib29sIHBhaW50aW5n
ID0gZmFsc2UpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3Ro
KFNjcm9sbGJhclRoZW1lQ2xpZW50KikgT1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCBib29s
IHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmKSBPVkVSUklERTsKKyAgICAKK3B1YmxpYzoKKyAgICB2b2lkIHByZWZlcmVu
Y2VzQ2hhbmdlZCgpOworfTsKKworfQorCisjZW5kaWYgLy8gU2Nyb2xsYmFyVGhlbWVJT1NfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbGJhclRoZW1lSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbGJhclRoZW1lSU9TLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmEzNzc0NTI0ZDFjODJiYmJkOTVmZjM3MzM4ZjQ5NzI0MGE5YzAwZmUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsYmFyVGhlbWVJ
T1MubW0KQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lSU9TLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRS
ZWN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xs
YmFyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbGJhclRoZW1lKiBT
Y3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTY3JvbGxiYXJUaGVtZUlPUz4gdGhlbWU7CisgICAgcmV0dXJuICZ0aGVtZS5nZXQoKTsKK30K
Kwordm9pZCBTY3JvbGxiYXJUaGVtZUlPUzo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqKQoreworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lSU9TOjp1bnJlZ2lzdGVyU2Ny
b2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KikKK3sKK30KKworU2Nyb2xsYmFyVGhlbWVJT1M6
OlNjcm9sbGJhclRoZW1lSU9TKCkKK3sKK30KKworU2Nyb2xsYmFyVGhlbWVJT1M6On5TY3JvbGxi
YXJUaGVtZUlPUygpCit7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVJT1M6OnByZWZlcmVuY2Vz
Q2hhbmdlZCgpCit7Cit9CisKK2ludCBTY3JvbGxiYXJUaGVtZUlPUzo6c2Nyb2xsYmFyVGhpY2tu
ZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplKQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUg
U2Nyb2xsYmFyVGhlbWVJT1M6OmluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpCit7CisgICAg
cmV0dXJuIDA7Cit9CisKK2RvdWJsZSBTY3JvbGxiYXJUaGVtZUlPUzo6YXV0b3Njcm9sbFRpbWVy
RGVsYXkoKQoreworICAgIHJldHVybiAwOworfQorICAgIAorU2Nyb2xsYmFyQnV0dG9uc1BsYWNl
bWVudCBTY3JvbGxiYXJUaGVtZUlPUzo6YnV0dG9uc1BsYWNlbWVudCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFNjcm9sbGJhckJ1dHRvbnNOb25lOworfQorCitib29sIFNjcm9sbGJhclRoZW1lSU9T
OjpoYXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50KikKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVJT1M6Omhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xp
ZW50KikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVJ
T1M6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwg
Ym9vbCAvKnBhaW50aW5nKi8pCit7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworSW50UmVj
dCBTY3JvbGxiYXJUaGVtZUlPUzo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sIC8qcGFpbnRpbmcqLykKK3sKKyAgICByZXR1cm4gSW50
UmVjdCgpOworfQorCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lSU9TOjp0cmFja1JlY3QoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqLCBib29sIC8qcGFpbnRpbmcqLykKK3sKKyAgICByZXR1cm4gSW50UmVj
dCgpOworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVJT1M6Om1pbmltdW1UaHVtYkxlbmd0aChTY3Jv
bGxiYXJUaGVtZUNsaWVudCopCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgU2Nyb2xsYmFy
VGhlbWVJT1M6OnNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBT
Y3JvbGxiYXJUaGVtZUlPUzo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRSZWN0JiAvKmRhbWFnZVJlY3QqLykKK3sKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvblJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1NlbGVjdGlvblJlY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5NzFhYTU0MzUxZGFhYTM1MTk0
NTg4YjViNTI5MmFlNDhhY2E4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvU2VsZWN0aW9uUmVjdC5jcHAKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25SZWN0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworU2VsZWN0aW9uUmVjdDo6U2VsZWN0aW9uUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0LCBib29sIGlzSG9yaXpvbnRhbCwgaW50IGNvbHVtbk51bWJlcikKKyAgICA6
IG1fcmVjdChyZWN0KQorICAgICwgbV9kaXJlY3Rpb24oTFRSKQorICAgICwgbV9taW5YKDApCisg
ICAgLCBtX21heFgoMCkKKyAgICAsIG1fbWF4WSgwKQorICAgICwgbV9saW5lTnVtYmVyKDApCisg
ICAgLCBtX2lzTGluZUJyZWFrKGZhbHNlKQorICAgICwgbV9pc0ZpcnN0T25MaW5lKGZhbHNlKQor
ICAgICwgbV9pc0xhc3RPbkxpbmUoZmFsc2UpCisgICAgLCBtX2NvbnRhaW5zU3RhcnQoZmFsc2Up
CisgICAgLCBtX2NvbnRhaW5zRW5kKGZhbHNlKQorICAgICwgbV9pc0hvcml6b250YWwoaXNIb3Jp
em9udGFsKQorICAgICwgbV9pc0luRml4ZWRQb3NpdGlvbihmYWxzZSkKKyAgICAsIG1faXNSdWJ5
VGV4dChmYWxzZSkKKyAgICAsIG1fY29sdW1uTnVtYmVyKGNvbHVtbk51bWJlcikKK3sKK30KKwor
Ly8gRklYTUU6IFdlIHNob3VsZCBtb3ZlIHNvbWUgb2YgdGhlc2UgYXJndW1lbnRzIHRvIGFuIGF1
eGlsbGFyeSBzdHJ1Y3QuCitTZWxlY3Rpb25SZWN0OjpTZWxlY3Rpb25SZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbWluWCwgaW50IG1heFgsIGlu
dCBtYXhZLAorICAgIGludCBsaW5lTnVtYmVyLCBib29sIGlzTGluZUJyZWFrLCBib29sIGlzRmly
c3RPbkxpbmUsIGJvb2wgaXNMYXN0T25MaW5lLCBib29sIGNvbnRhaW5zU3RhcnQsIGJvb2wgY29u
dGFpbnNFbmQsCisgICAgYm9vbCBpc0hvcml6b250YWwsIGJvb2wgaXNJbkZpeGVkUG9zaXRpb24s
IGJvb2wgaXNSdWJ5VGV4dCwgaW50IGNvbHVtbk51bWJlcikKKyAgICA6IG1fcmVjdChyZWN0KQor
ICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQorICAgICwgbV9taW5YKG1pblgpCisgICAgLCBt
X21heFgobWF4WCkKKyAgICAsIG1fbWF4WShtYXhZKQorICAgICwgbV9saW5lTnVtYmVyKGxpbmVO
dW1iZXIpCisgICAgLCBtX2lzTGluZUJyZWFrKGlzTGluZUJyZWFrKQorICAgICwgbV9pc0ZpcnN0
T25MaW5lKGlzRmlyc3RPbkxpbmUpCisgICAgLCBtX2lzTGFzdE9uTGluZShpc0xhc3RPbkxpbmUp
CisgICAgLCBtX2NvbnRhaW5zU3RhcnQoY29udGFpbnNTdGFydCkKKyAgICAsIG1fY29udGFpbnNF
bmQoY29udGFpbnNFbmQpCisgICAgLCBtX2lzSG9yaXpvbnRhbChpc0hvcml6b250YWwpCisgICAg
LCBtX2lzSW5GaXhlZFBvc2l0aW9uKGlzSW5GaXhlZFBvc2l0aW9uKQorICAgICwgbV9pc1J1YnlU
ZXh0KGlzUnVieVRleHQpCisgICAgLCBtX2NvbHVtbk51bWJlcihjb2x1bW5OdW1iZXIpCit7Cit9
CisKK1NlbGVjdGlvblJlY3Q6OlNlbGVjdGlvblJlY3QoKQorICAgIDogbV9kaXJlY3Rpb24oTFRS
KQorICAgICwgbV9taW5YKDApCisgICAgLCBtX21heFgoMCkKKyAgICAsIG1fbWF4WSgwKQorICAg
ICwgbV9saW5lTnVtYmVyKDApCisgICAgLCBtX2lzTGluZUJyZWFrKGZhbHNlKQorICAgICwgbV9p
c0ZpcnN0T25MaW5lKGZhbHNlKQorICAgICwgbV9pc0xhc3RPbkxpbmUoZmFsc2UpCisgICAgLCBt
X2NvbnRhaW5zU3RhcnQoZmFsc2UpCisgICAgLCBtX2NvbnRhaW5zRW5kKGZhbHNlKQorICAgICwg
bV9pc0hvcml6b250YWwodHJ1ZSkKKyAgICAsIG1faXNJbkZpeGVkUG9zaXRpb24oZmFsc2UpCisg
ICAgLCBtX2lzUnVieVRleHQoZmFsc2UpCisgICAgLCBtX2NvbHVtbk51bWJlcigwKQoreworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvU2VsZWN0aW9uUmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Nl
bGVjdGlvblJlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZGM5MWZkZjFlN2M4MDU2ZGMwNjkyNWFmMGQyMmI0
NTMwZTc1MjlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1NlbGVjdGlvblJlY3QuaApAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U2VsZWN0aW9uUmVjdF9oCisjZGVmaW5lIFNlbGVjdGlvblJlY3RfaAorCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlbGVjdGlvblJlY3Qgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFNlbGVj
dGlvblJlY3QoY29uc3QgSW50UmVjdCYsIGJvb2wgaXNIb3Jpem9udGFsLCBpbnQgY29sdW1uTnVt
YmVyKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbW92ZSBzb21lIG9mIHRoZXNlIGFyZ3Vt
ZW50cyB0byBhbiBhdXhpbGxhcnkgc3RydWN0LgorICAgIFNlbGVjdGlvblJlY3QoY29uc3QgSW50
UmVjdCYsIFRleHREaXJlY3Rpb24sIGludCwgaW50LCBpbnQsIGludCwgYm9vbCwgYm9vbCwgYm9v
bCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgaW50KTsKKyAgICBTZWxlY3Rpb25SZWN0
KCk7CisgICAgflNlbGVjdGlvblJlY3QoKSB7IH0KKworICAgIEludFJlY3QgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgaW50IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1
cm4gbV9pc0hvcml6b250YWwgPyBtX3JlY3QueCgpIDogbV9yZWN0LnkoKTsgfQorICAgIGludCBs
b2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2lzSG9yaXpvbnRhbCA/IG1fcmVjdC53aWR0
aCgpIDogbV9yZWN0LmhlaWdodCgpOyB9CisgICAgaW50IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJl
dHVybiBtX2lzSG9yaXpvbnRhbCA/IG1fcmVjdC55KCkgOiBtX3JlY3QueCgpOyB9CisgICAgaW50
IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2lzSG9yaXpvbnRhbCA/IG1fcmVjdC5o
ZWlnaHQoKSA6IG1fcmVjdC53aWR0aCgpOyB9CisKKyAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CisgICAgaW50IG1pblgoKSBjb25zdCB7
IHJldHVybiBtX21pblg7IH0KKyAgICBpbnQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4WDsg
fQorICAgIGludCBtYXhZKCkgY29uc3QgeyByZXR1cm4gbV9tYXhZOyB9CisgICAgaW50IGxpbmVO
dW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xpbmVOdW1iZXI7IH0KKyAgICBib29sIGlzTGluZUJy
ZWFrKCkgY29uc3QgeyByZXR1cm4gbV9pc0xpbmVCcmVhazsgfQorICAgIGJvb2wgaXNGaXJzdE9u
TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXJzdE9uTGluZTsgfQorICAgIGJvb2wgaXNMYXN0
T25MaW5lKCkgY29uc3QgeyByZXR1cm4gbV9pc0xhc3RPbkxpbmU7IH0KKyAgICBib29sIGNvbnRh
aW5zU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zU3RhcnQ7IH0KKyAgICBib29sIGNv
bnRhaW5zRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0VuZDsgfQorICAgIGJvb2wgaXNI
b3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250YWw7IH0KKyAgICBib29sIGlz
SW5GaXhlZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0luRml4ZWRQb3NpdGlvbjsgfQor
ICAgIGJvb2wgaXNSdWJ5VGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNSdWJ5VGV4dDsgfQorICAg
IGludCBjb2x1bW5OdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbk51bWJlcjsgfQorCisg
ICAgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9yZWN0ID0gcmVjdDsgfQor
CisgICAgdm9pZCBzZXRMb2dpY2FsTGVmdChpbnQgbGVmdCkKKyAgICB7CisgICAgICAgIGlmICht
X2lzSG9yaXpvbnRhbCkKKyAgICAgICAgICAgIG1fcmVjdC5zZXRYKGxlZnQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX3JlY3Quc2V0WShsZWZ0KTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dExvZ2ljYWxXaWR0aChpbnQgd2lkdGgpCisgICAgeworICAgICAgICBpZiAobV9pc0hvcml6b250
YWwpCisgICAgICAgICAgICBtX3JlY3Quc2V0V2lkdGgod2lkdGgpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX3JlY3Quc2V0SGVpZ2h0KHdpZHRoKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dExvZ2ljYWxUb3AoaW50IHRvcCkKKyAgICB7CisgICAgICAgIGlmIChtX2lzSG9yaXpvbnRhbCkK
KyAgICAgICAgICAgIG1fcmVjdC5zZXRZKHRvcCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fcmVjdC5zZXRYKHRvcCk7CisgICAgfQorCisgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KGlu
dCBoZWlnaHQpCisgICAgeworICAgICAgICBpZiAobV9pc0hvcml6b250YWwpCisgICAgICAgICAg
ICBtX3JlY3Quc2V0SGVpZ2h0KGhlaWdodCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
cmVjdC5zZXRXaWR0aChoZWlnaHQpOworICAgIH0KKworICAgIHZvaWQgc2V0RGlyZWN0aW9uKFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uKSB7IG1fZGlyZWN0aW9uID0gZGlyZWN0aW9uOyB9CisgICAg
dm9pZCBzZXRNaW5YKGludCBtaW5YKSB7IG1fbWluWCA9IG1pblg7IH0KKyAgICB2b2lkIHNldE1h
eFgoaW50IG1heFgpIHsgbV9tYXhYID0gbWF4WDsgfQorICAgIHZvaWQgc2V0TWF4WShpbnQgbWF4
WSkgeyBtX21heFkgPSBtYXhZOyB9CisgICAgdm9pZCBzZXRMaW5lTnVtYmVyKGludCBsaW5lTnVt
YmVyKSB7IG1fbGluZU51bWJlciA9IGxpbmVOdW1iZXI7IH0KKyAgICB2b2lkIHNldElzTGluZUJy
ZWFrKGJvb2wgaXNMaW5lQnJlYWspIHsgbV9pc0xpbmVCcmVhayA9IGlzTGluZUJyZWFrOyB9Cisg
ICAgdm9pZCBzZXRJc0ZpcnN0T25MaW5lKGJvb2wgaXNGaXJzdE9uTGluZSkgeyBtX2lzRmlyc3RP
bkxpbmUgPSBpc0ZpcnN0T25MaW5lOyB9CisgICAgdm9pZCBzZXRJc0xhc3RPbkxpbmUoYm9vbCBp
c0xhc3RPbkxpbmUpIHsgbV9pc0xhc3RPbkxpbmUgPSBpc0xhc3RPbkxpbmU7IH0KKyAgICB2b2lk
IHNldENvbnRhaW5zU3RhcnQoYm9vbCBjb250YWluc1N0YXJ0KSB7IG1fY29udGFpbnNTdGFydCA9
IGNvbnRhaW5zU3RhcnQ7IH0KKyAgICB2b2lkIHNldENvbnRhaW5zRW5kKGJvb2wgY29udGFpbnNF
bmQpIHsgbV9jb250YWluc0VuZCA9IGNvbnRhaW5zRW5kOyB9CisgICAgdm9pZCBzZXRJc0hvcml6
b250YWwoYm9vbCBpc0hvcml6b250YWwpIHsgbV9pc0hvcml6b250YWwgPSBpc0hvcml6b250YWw7
IH0KKworcHJpdmF0ZToKKyAgICBJbnRSZWN0IG1fcmVjdDsKKyAgICBUZXh0RGlyZWN0aW9uIG1f
ZGlyZWN0aW9uOworICAgIGludCBtX21pblg7CisgICAgaW50IG1fbWF4WDsKKyAgICBpbnQgbV9t
YXhZOworICAgIGludCBtX2xpbmVOdW1iZXI7CisgICAgYm9vbCBtX2lzTGluZUJyZWFrOworICAg
IGJvb2wgbV9pc0ZpcnN0T25MaW5lOworICAgIGJvb2wgbV9pc0xhc3RPbkxpbmU7CisgICAgYm9v
bCBtX2NvbnRhaW5zU3RhcnQ7CisgICAgYm9vbCBtX2NvbnRhaW5zRW5kOworICAgIGJvb2wgbV9p
c0hvcml6b250YWw7CisgICAgYm9vbCBtX2lzSW5GaXhlZFBvc2l0aW9uOworICAgIGJvb2wgbV9p
c1J1YnlUZXh0OworICAgIGludCBtX2NvbHVtbk51bWJlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFNlbGVjdGlvblJlY3RfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NvdW5kSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1NvdW5kSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0ZDU0OTMzNDU0ZTAyMWQ1OTAwMWY4Zjgz
MmJjYzljNzE3ZDhiNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvU291bmRJT1MubW0KQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNvdW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordm9pZCBzeXN0ZW1CZWVwKCkgeyBOU0xvZyhAIldlYmNvcmUgTlNCZWVwKCkhIik7IH0g
ICAgCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9TeXN0ZW1NZW1vcnlJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1N5c3RlbU1lbW9yeUlPUy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQyMjBjNTA1MTg3YTU0ODdl
MWYzOTY0M2FkNDIwZGIxN2E3ZmFhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9TeXN0ZW1NZW1vcnlJT1MuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTeXN0ZW1NZW1vcnkuaCIKKworI2luY2x1ZGUgPG1h
Y2gvbWFjaC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2ludCBzeXN0ZW1NZW1vcnlMZXZlbCgpCit7CisjaWYgUExBVEZPUk0oSU9TX1NJTVVM
QVRPUikKKyAgICByZXR1cm4gMzU7CisjZWxzZQorICAgIHN0YXRpYyBpbnQgbWVtb3J5RnJlZUxl
dmVsID0gLTE7CisgICAgc3RhdGljIGRvdWJsZSBwcmV2aW91c0NoZWNrVGltZTsgCisgICAgZG91
YmxlIHRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIGlmICh0aW1lIC0gcHJldmlvdXNDaGVja1Rp
bWUgPCAwLjEpCisgICAgICAgIHJldHVybiBtZW1vcnlGcmVlTGV2ZWw7CisgICAgcHJldmlvdXND
aGVja1RpbWUgPSB0aW1lOworICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKG1lbW9yeUZyZWVMZXZl
bCk7CisgICAgc3lzY3RsYnluYW1lKCJrZXJuLm1lbW9yeXN0YXR1c19sZXZlbCIsICZtZW1vcnlG
cmVlTGV2ZWwsICZzaXplLCBudWxscHRyLCAwKTsKKyAgICByZXR1cm4gbWVtb3J5RnJlZUxldmVs
OworI2VuZGlmCit9CisKKyNpZiAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKK3N0YXRpYyBob3N0
X2Jhc2ljX2luZm9fZGF0YV90IGdIb3N0QmFzaWNJbmZvOworCitzdGF0aWMgdm9pZCBpbml0Q2Fw
YWJpbGl0aWVzKHZvaWQpCit7CisgICAgLy8gRGlzY292ZXIgb3VyIENQVSB0eXBlCisgICAgbWFj
aF9wb3J0X3QgaG9zdCA9IG1hY2hfaG9zdF9zZWxmKCk7CisgICAgbWFjaF9tc2dfdHlwZV9udW1i
ZXJfdCBjb3VudCA9IEhPU1RfQkFTSUNfSU5GT19DT1VOVDsKKyAgICBrZXJuX3JldHVybl90IHJl
dHVyblZhbHVlID0gaG9zdF9pbmZvKGhvc3QsIEhPU1RfQkFTSUNfSU5GTywgcmVpbnRlcnByZXRf
Y2FzdDxob3N0X2luZm9fdD4oJmdIb3N0QmFzaWNJbmZvKSwgJmNvdW50KTsKKyAgICBtYWNoX3Bv
cnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBob3N0KTsKKyAgICBpZiAocmV0dXJuVmFs
dWUgIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICBMT0dfRVJST1IoIiVzIDogaG9zdF9pbmZvKCVk
KSA6ICVzLlxuIiwgX19GVU5DVElPTl9fLCByZXR1cm5WYWx1ZSwgbWFjaF9lcnJvcl9zdHJpbmco
cmV0dXJuVmFsdWUpKTsKK30KKyNlbmRpZgorCitzaXplX3Qgc3lzdGVtVG90YWxNZW1vcnkoKQor
eworI2lmIFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCisgICAgcmV0dXJuIDUxMiAqIDEwMjQgKiAx
MDI0OworI2Vsc2UKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgQysrMTEgdGhyZWFkIHBy
aW1pdGl2ZXMuCisgICAgc3RhdGljIHB0aHJlYWRfb25jZV90IGluaXRDb250cm9sID0gUFRIUkVB
RF9PTkNFX0lOSVQ7CisKKyAgICBwdGhyZWFkX29uY2UoJmluaXRDb250cm9sLCBpbml0Q2FwYWJp
bGl0aWVzKTsKKyAgICAvLyBUaGUgdmFsdWUgaW4gZ0hvc3RCYXNpY0luZm8ubWF4X21lbSBpcyBv
ZnRlbiBsb3dlciB0aGFuIHRoZSBhbW91bnQgd2UncmUKKyAgICAvLyBpbnRlcmVzdGVkIGluIChl
LmcuLCBkb2VzIHRoaXMgZGV2aWNlIGhhdmUgYXQgbGVhc3QgMjU2TUIgb2YgUkFNPykKKyAgICAv
LyBSb3VuZCB0aGUgdmFsdWUgdG8gdGhlIG5lYXJlc3QgcG93ZXIgb2YgMi4KKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8c2l6ZV90PihleHAyKGNlaWwobG9nMihnSG9zdEJhc2ljSW5mby5tYXhfbWVt
KSkpKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGhlbWVJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9UaGVtZUlPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzY2M5YmE3M2Q5MTU2NGMwMzA2ZGZj
NmJhMWNhNWRiNDE5NzI5MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVGhlbWVJT1MuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVGhlbWVJT1NfaAorI2RlZmluZSBU
aGVtZUlPU19oCisKKyNpbmNsdWRlICJUaGVtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFRoZW1lSU9TIDogcHVibGljIFRoZW1lIHsKK3B1YmxpYzoKKyAgICBUaGVtZUlPUygp
IHsgfQorICAgIHZpcnR1YWwgflRoZW1lSU9TKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBUaGVtZUlPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
VGhlbWVJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjQ2ZmMzYWIyZDZjMWIyMmViNmY1ZjJlN2Q3MDA1NWEy
MTUzMjkwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9U
aGVtZUlPUy5tbQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGhlbWVJT1Mu
aCIKKworI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJTY3JvbGxWaWV3Lmgi
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIEZJWE1FOiBJbXBsZW1lbnQgYmVmb3JlIGVuYWJsaW5nIFVTRShORVdfVEhFTUUpLgorCitU
aGVtZSogcGxhdGZvcm1UaGVtZSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRoZW1l
SU9TPiB0aGVtZUlPUzsKKyAgICByZXR1cm4gJnRoZW1lSU9TLmdldCgpOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWUzYjk1NWE1Mzhj
NWFmMWQ0MTFkZTExNzdmYzdlYmM2ZThjYTYzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlQ2FjaGUuaApAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgVGlsZUNhY2hlX2gKKyNkZWZpbmUgVGlsZUNhY2hlX2gKKworI2lmIFBM
QVRGT1JNKElPUykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJU
aW1lci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZmRlZiBfX09CSkNfXworQGNsYXNz
IENBTGF5ZXI7CitAY2xhc3MgVGlsZUNhY2hlVG9tYnN0b25lOworQGNsYXNzIFRpbGVMYXllcjsK
K0BjbGFzcyBXQUtXaW5kb3c7CisjZWxzZQorY2xhc3MgQ0FMYXllcjsKK2NsYXNzIFRpbGVDYWNo
ZVRvbWJzdG9uZTsKK2NsYXNzIFRpbGVMYXllcjsKK2NsYXNzIFdBS1dpbmRvdzsKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRpbGVHcmlkOworCitjbGFzcyBUaWxlQ2Fj
aGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGVDYWNoZSk7CitwdWJsaWM6CisgICAg
VGlsZUNhY2hlKFdBS1dpbmRvdyopOworICAgIH5UaWxlQ2FjaGUoKTsKKworICAgIENHRmxvYXQg
c2NyZWVuU2NhbGUoKSBjb25zdDsKKworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAg
dm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIAorICAgIHZv
aWQgbGF5b3V0VGlsZXMoKTsKKyAgICB2b2lkIGxheW91dFRpbGVzTm93KCk7CisgICAgdm9pZCBs
YXlvdXRUaWxlc05vd0ZvclJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgcmVtb3ZlQWxs
Tm9uVmlzaWJsZVRpbGVzKCk7CisgICAgdm9pZCByZW1vdmVBbGxUaWxlcygpOworICAgIHZvaWQg
cmVtb3ZlRm9yZWdyb3VuZFRpbGVzKCk7CisKKyAgICAvLyBJZiAnY29udGVudFJlcGxhY2VtZW50
SW1hZ2UnIGlzIG5vdCBOVUxMLCBkcmF3TGF5ZXIoKSBkcmF3cworICAgIC8vIGNvbnRlbnRSZXBs
YWNlbWVudEltYWdlIGluc3RlYWQgb2YgdGhlIHBhZ2UgY29udGVudC4gV2UgYXNzdW1lIHRoZQor
ICAgIC8vIGltYWdlIGlzIHRvIGJlIGRyYXduIGF0IHRoZSBvcmlnaW4gYW5kIHNjYWxlZCB0byBt
YXRjaCBkZXZpY2UgcGl4ZWxzLgorICAgIHZvaWQgc2V0Q29udGVudFJlcGxhY2VtZW50SW1hZ2Uo
UmV0YWluUHRyPENHSW1hZ2VSZWY+KTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVu
dFJlcGxhY2VtZW50SW1hZ2UoKSBjb25zdDsKKworICAgIHZvaWQgc2V0VGlsZUJvcmRlcnNWaXNp
YmxlKGJvb2wpOworICAgIGJvb2wgdGlsZUJvcmRlcnNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4g
bV90aWxlQm9yZGVyc1Zpc2libGU7IH0KKworICAgIHZvaWQgc2V0VGlsZVBhaW50Q291bnRlcnNW
aXNpYmxlKGJvb2wpOworICAgIGJvb2wgdGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKCkgY29uc3Qg
eyByZXR1cm4gbV90aWxlUGFpbnRDb3VudGVyc1Zpc2libGU7IH0KKworICAgIHZvaWQgc2V0QWNj
ZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZERyYXdp
bmdFbmFibGVkID0gZW5hYmxlZDsgfQorICAgIGJvb2wgYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZDsgfQorCisgICAg
dm9pZCBzZXRLZWVwc1pvb21lZE91dFRpbGVzKGJvb2wpOworICAgIGJvb2wga2VlcHNab29tZWRP
dXRUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fa2VlcHNab29tZWRPdXRUaWxlczsgfQorCisgICAg
dm9pZCBzZXRab29tZWRPdXRTY2FsZShmbG9hdCk7CisgICAgZmxvYXQgem9vbWVkT3V0U2NhbGUo
KSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHNldEN1cnJlbnRTY2FsZShmbG9hdCk7CisgICAgZmxv
YXQgY3VycmVudFNjYWxlKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCB0aWxlc09wYXF1ZSgpIGNv
bnN0OworICAgIHZvaWQgc2V0VGlsZXNPcGFxdWUoYm9vbCk7CisgICAgCisgICAgZW51bSBUaWxp
bmdNb2RlIHsKKyAgICAgICAgTm9ybWFsLAorICAgICAgICBNaW5pbWFsLAorICAgICAgICBQYW5u
aW5nLAorICAgICAgICBab29taW5nLAorICAgICAgICBEaXNhYmxlZCwKKyAgICAgICAgU2Nyb2xs
VG9Ub3AKKyAgICB9OworICAgIFRpbGluZ01vZGUgdGlsaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGlsaW5nTW9kZTsgfQorICAgIHZvaWQgc2V0VGlsaW5nTW9kZShUaWxpbmdNb2RlKTsKKwor
ICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIFRpbGluZ0RpcmVjdGlvblVwLAorICAgICAgICBU
aWxpbmdEaXJlY3Rpb25Eb3duLAorICAgICAgICBUaWxpbmdEaXJlY3Rpb25MZWZ0LAorICAgICAg
ICBUaWxpbmdEaXJlY3Rpb25SaWdodCwKKyAgICB9IFRpbGluZ0RpcmVjdGlvbjsKKyAgICB2b2lk
IHNldFRpbGluZ0RpcmVjdGlvbihUaWxpbmdEaXJlY3Rpb24pOworICAgIFRpbGluZ0RpcmVjdGlv
biB0aWxpbmdEaXJlY3Rpb24oKSBjb25zdDsKKworICAgIGJvb2wgaGFzUGVuZGluZ0RyYXcoKSBj
b25zdDsKKworICAgIHZvaWQgaG9zdExheWVyU2l6ZUNoYW5nZWQoKTsKKworICAgIHN0YXRpYyB2
b2lkIHNldExheWVyUG9vbENhcGFjaXR5KHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgdm9pZCBkcmFp
bkxheWVyUG9vbCgpOworCisgICAgLy8gTG9nZ2luZworICAgIHZvaWQgZHVtcFRpbGVzKCk7CisK
KyAgICAvLyBJbnRlcm5hbAorICAgIHZvaWQgZG9MYXlvdXRUaWxlcygpOworICAgIHZvaWQgZHJh
d0xheWVyKFRpbGVMYXllciosIENHQ29udGV4dFJlZik7CisgICAgdm9pZCBwcmVwYXJlVG9EcmF3
KCk7CisgICAgdm9pZCBmaW5pc2hlZENyZWF0aW5nVGlsZXMoYm9vbCBkaWRDcmVhdGVUaWxlcywg
Ym9vbCBjcmVhdGVNb3JlKTsKKyAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3RJbkxheWVyKENBTGF5
ZXIgKikgY29uc3Q7CisgICAgQ0FMYXllciogaG9zdExheWVyKCkgY29uc3Q7CisgICAgdW5zaWdu
ZWQgdGlsZUNhcGFjaXR5Rm9yR3JpZChUaWxlR3JpZCopOworICAgIENvbG9yIGNvbG9yRm9yR3Jp
ZFRpbGVCb3JkZXIoVGlsZUdyaWQqKSBjb25zdDsKKworICAgIHZvaWQgZG9QZW5kaW5nUmVwYWlu
dHMoKTsKKworICAgIGJvb2wgaXNTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX2lzU3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkOyB9CisgICAgdm9p
ZCBzZXRTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQoYm9vbCk7CisgICAgCisgICAgZW51
bSBTeW5jaHJvbm91c1RpbGVDcmVhdGlvbk1vZGUgeyBDb3ZlclZpc2libGVPbmx5LCBDb3ZlclNw
ZWN1bGF0aXZlIH07CisKK3ByaXZhdGU6CisgICAgVGlsZUdyaWQqIGFjdGl2ZVRpbGVHcmlkKCkg
Y29uc3Q7CisgICAgVGlsZUdyaWQqIGluYWN0aXZlVGlsZUdyaWQoKSBjb25zdDsKKworICAgIHZv
aWQgdXBkYXRlVGlsaW5nTW9kZSgpOworICAgIGJvb2wgaXNUaWxlSW52YWxpZGF0aW9uU3VzcGVu
ZGVkKCkgY29uc3Q7CisgICAgYm9vbCBpc1RpbGVDcmVhdGlvblN1c3BlbmRlZCgpIGNvbnN0Owor
ICAgIHZvaWQgZmx1c2hTYXZlZERpc3BsYXlSZWN0cygpOworICAgIHZvaWQgaW52YWxpZGF0ZVRp
bGVzKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdm9pZCBzZXRab29tZWRPdXRTY2Fs
ZUludGVybmFsKGZsb2F0KTsKKyAgICB2b2lkIGNvbW1pdFNjYWxlQ2hhbmdlKCk7CisgICAgdm9p
ZCBicmluZ0FjdGl2ZVRpbGVHcmlkVG9Gcm9udCgpOworICAgIHZvaWQgYWRqdXN0VGlsZUdyaWRU
cmFuc2Zvcm1zKCk7CisgICAgdm9pZCByZW1vdmVBbGxOb25WaXNpYmxlVGlsZXNJbnRlcm5hbCgp
OworICAgIHZvaWQgY3JlYXRlVGlsZXNJbkFjdGl2ZUdyaWQoU3luY2hyb25vdXNUaWxlQ3JlYXRp
b25Nb2RlKTsKKyAgICB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50KCk7
CisKKyAgICB2b2lkIHRpbGVDcmVhdGlvblRpbWVyRmlyZWQoVGltZXI8VGlsZUNhY2hlPiopOwor
CisgICAgdm9pZCBkcmF3UmVwbGFjZW1lbnRJbWFnZShUaWxlTGF5ZXIqLCBDR0NvbnRleHRSZWYs
IENHSW1hZ2VSZWYpOworICAgIHZvaWQgZHJhd1dpbmRvd0NvbnRlbnQoVGlsZUxheWVyKiwgQ0dD
b250ZXh0UmVmLCBDR1JlY3QgZGlydHlSZWN0KTsKKworICAgIFdBS1dpbmRvdyogbV93aW5kb3c7
CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9jb250ZW50UmVwbGFjZW1lbnRJbWFnZTsK
KworICAgIGJvb2wgbV9rZWVwc1pvb21lZE91dFRpbGVzOworCisgICAgYm9vbCBtX2hhc1BlbmRp
bmdMYXlvdXRUaWxlczsKKyAgICBib29sIG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01vZGU7Cisg
ICAgLy8gRW5zdXJlIHRoZXJlIGFyZSBubyBhc3luYyBjYWxscyBvbiBhIGRlYWQgdGlsZSBjYWNo
ZS4KKyAgICBSZXRhaW5QdHI8VGlsZUNhY2hlVG9tYnN0b25lPiBtX3RvbWJzdG9uZTsKKworICAg
IFRpbGluZ01vZGUgbV90aWxpbmdNb2RlOworICAgIFRpbGluZ0RpcmVjdGlvbiBtX3RpbGluZ0Rp
cmVjdGlvbjsKKworICAgIEludFNpemUgbV90aWxlU2l6ZTsKKyAgICBib29sIG1fdGlsZXNPcGFx
dWU7CisKKyAgICBib29sIG1fdGlsZUJvcmRlcnNWaXNpYmxlOworICAgIGJvb2wgbV90aWxlUGFp
bnRDb3VudGVyc1Zpc2libGU7CisgICAgYm9vbCBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQ7
CisgICAgYm9vbCBtX2lzU3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkOworCisgICAgYm9v
bCBtX2RpZENhbGxXaWxsU3RhcnRTY3JvbGxpbmdPclpvb21pbmc7CisgICAgT3duUHRyPFRpbGVH
cmlkPiBtX3pvb21lZE91dFRpbGVHcmlkOworICAgIE93blB0cjxUaWxlR3JpZD4gbV96b29tZWRJ
blRpbGVHcmlkOworCisgICAgVGltZXI8VGlsZUNhY2hlPiBtX3RpbGVDcmVhdGlvblRpbWVyOwor
CisgICAgVmVjdG9yPEludFJlY3Q+IG1fc2F2ZWREaXNwbGF5UmVjdHM7CisKKyAgICBmbG9hdCBt
X2N1cnJlbnRTY2FsZTsKKworICAgIGZsb2F0IG1fcGVuZGluZ1NjYWxlOworICAgIGZsb2F0IG1f
cGVuZGluZ1pvb21lZE91dFNjYWxlOworCisgICAgbXV0YWJsZSBNdXRleCBtX3RpbGVNdXRleDsK
KyAgICBtdXRhYmxlIE11dGV4IG1fc2F2ZWREaXNwbGF5UmVjdE11dGV4OworICAgIG11dGFibGUg
TXV0ZXggbV9jb250ZW50UmVwbGFjZW1lbnRJbWFnZU11dGV4OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gVGlsZUNh
Y2hlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlQ2FjaGUu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjBjZWMwN2Q2YmUzYTg3ZmY3YWVjMWI4NTkyMzlmMzBkMDhmNWNjYTgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLm1tCkBAIC0wLDAgKzEs
ODIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRpbGVD
YWNoZS5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk1lbW9yeVByZXNzdXJlSGFuZGxlci5oIgorI2luY2x1ZGUgIlN5c3RlbU1lbW9yeS5o
IgorI2luY2x1ZGUgIlRpbGVHcmlkLmgiCisjaW5jbHVkZSAiVGlsZUdyaWRUaWxlLmgiCisjaW5j
bHVkZSAiVGlsZUxheWVyLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyUG9vbC5oIgorI2luY2x1ZGUg
IldBS1dpbmRvdy5oIgorI2luY2x1ZGUgIldLR3JhcGhpY3MuaCIKKyNpbmNsdWRlICJXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZFJ1bi5oIgorI2luY2x1
ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6
Q29yZVByaXZhdGUuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworQGludGVyZmFj
ZSBXQUtWaWV3IChXZWJWaWV3RXh0cmFzKQorLSAodm9pZClfZGlzcGF0Y2hUaWxlRGlkRHJhdzoo
Q0FMYXllciopdGlsZTsKKy0gKHZvaWQpX3dpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZzsKKy0g
KHZvaWQpX2RpZEZpbmlzaFNjcm9sbGluZ09yWm9vbWluZzsKKy0gKHZvaWQpX2Rpc3BhdGNoVGls
ZURpZERyYXc7CistICh2b2lkKV9zY2hlZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5nVGlsZUNhY2hl
UmVwYWludDsKK0BlbmQKKworQGludGVyZmFjZSBUaWxlQ2FjaGVUb21ic3RvbmUgOiBOU09iamVj
dCB7CisgICAgQk9PTCBkZWFkOworfQorQHByb3BlcnR5KGdldHRlcj1pc0RlYWQpIEJPT0wgZGVh
ZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGlsZUNhY2hlVG9tYnN0b25lCisKK0BzeW50
aGVzaXplIGRlYWQ7CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUaWxlQ2FjaGU6
OlRpbGVDYWNoZShXQUtXaW5kb3cqIHdpbmRvdykKKyAgICA6IG1fd2luZG93KHdpbmRvdykKKyAg
ICAsIG1fa2VlcHNab29tZWRPdXRUaWxlcyhmYWxzZSkKKyAgICAsIG1faGFzUGVuZGluZ0xheW91
dFRpbGVzKGZhbHNlKQorICAgICwgbV9oYXNQZW5kaW5nVXBkYXRlVGlsaW5nTW9kZShmYWxzZSkK
KyAgICAsIG1fdG9tYnN0b25lKGFkb3B0TlMoW1tUaWxlQ2FjaGVUb21ic3RvbmUgYWxsb2NdIGlu
aXRdKSkKKyAgICAsIG1fdGlsaW5nTW9kZShOb3JtYWwpCisgICAgLCBtX3RpbGluZ0RpcmVjdGlv
bihUaWxpbmdEaXJlY3Rpb25Eb3duKQorICAgICwgbV90aWxlU2l6ZSg1MTIsIDUxMikKKyAgICAs
IG1fdGlsZXNPcGFxdWUodHJ1ZSkKKyAgICAsIG1fdGlsZUJvcmRlcnNWaXNpYmxlKGZhbHNlKQor
ICAgICwgbV90aWxlUGFpbnRDb3VudGVyc1Zpc2libGUoZmFsc2UpCisgICAgLCBtX2FjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQoZmFsc2UpCisgICAgLCBtX2lzU3BlY3VsYXRpdmVUaWxlQ3JlYXRp
b25FbmFibGVkKHRydWUpCisgICAgLCBtX2RpZENhbGxXaWxsU3RhcnRTY3JvbGxpbmdPclpvb21p
bmcoZmFsc2UpCisgICAgLCBtX3pvb21lZE91dFRpbGVHcmlkKFBhc3NPd25QdHI8VGlsZUdyaWQ+
KCkpCisgICAgLCBtX3pvb21lZEluVGlsZUdyaWQoUGFzc093blB0cjxUaWxlR3JpZD4oKSkKKyAg
ICAsIG1fdGlsZUNyZWF0aW9uVGltZXIodGhpcywgJlRpbGVDYWNoZTo6dGlsZUNyZWF0aW9uVGlt
ZXJGaXJlZCkKKyAgICAsIG1fY3VycmVudFNjYWxlKDEuZikKKyAgICAsIG1fcGVuZGluZ1NjYWxl
KDApCisgICAgLCBtX3BlbmRpbmdab29tZWRPdXRTY2FsZSgwKQoreworICAgIG1fem9vbWVkT3V0
VGlsZUdyaWQgPSBUaWxlR3JpZDo6Y3JlYXRlKHRoaXMsIG1fdGlsZVNpemUpOworICAgIFtob3N0
TGF5ZXIoKSBpbnNlcnRTdWJsYXllcjptX3pvb21lZE91dFRpbGVHcmlkLT50aWxlSG9zdExheWVy
KCkgYXRJbmRleDowXTsKKyAgICBob3N0TGF5ZXJTaXplQ2hhbmdlZCgpOworfQorCitUaWxlQ2Fj
aGU6On5UaWxlQ2FjaGUoKQoreworICAgIFttX3RvbWJzdG9uZS5nZXQoKSBzZXREZWFkOnRydWVd
OworfQorCitDR0Zsb2F0IFRpbGVDYWNoZTo6c2NyZWVuU2NhbGUoKSBjb25zdAoreworICAgIHJl
dHVybiBbbV93aW5kb3cgc2NyZWVuU2NhbGVdOworfQorCitDQUxheWVyKiBUaWxlQ2FjaGU6Omhv
c3RMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX3dpbmRvdyBob3N0TGF5ZXJdOworfQor
CitGbG9hdFJlY3QgVGlsZUNhY2hlOjp2aXNpYmxlUmVjdEluTGF5ZXIoQ0FMYXllciAqbGF5ZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFtsYXllciBjb252ZXJ0UmVjdDpbbV93aW5kb3cgZXh0ZW5k
ZWRWaXNpYmxlUmVjdF0gZnJvbUxheWVyOmhvc3RMYXllcigpXTsKK30KKworYm9vbCBUaWxlQ2Fj
aGU6OnRpbGVzT3BhcXVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlc09wYXF1ZTsKK30K
KyAgICAKK1RpbGVHcmlkKiBUaWxlQ2FjaGU6OmFjdGl2ZVRpbGVHcmlkKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fa2VlcHNab29tZWRPdXRUaWxlcykKKyAgICAgICAgcmV0dXJuIG1fem9vbWVkT3V0
VGlsZUdyaWQuZ2V0KCk7CisgICAgaWYgKG1fdGlsaW5nTW9kZSA9PSBab29taW5nKQorICAgICAg
ICByZXR1cm4gbV96b29tZWRPdXRUaWxlR3JpZC5nZXQoKTsKKyAgICBpZiAobV96b29tZWRJblRp
bGVHcmlkICYmIG1fY3VycmVudFNjYWxlID09IG1fem9vbWVkSW5UaWxlR3JpZC0+c2NhbGUoKSkK
KyAgICAgICAgcmV0dXJuIG1fem9vbWVkSW5UaWxlR3JpZC5nZXQoKTsKKyAgICByZXR1cm4gbV96
b29tZWRPdXRUaWxlR3JpZC5nZXQoKTsKK30KKworVGlsZUdyaWQqIFRpbGVDYWNoZTo6aW5hY3Rp
dmVUaWxlR3JpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFjdGl2ZVRpbGVHcmlkKCkgPT0gbV96
b29tZWRPdXRUaWxlR3JpZCA/IG1fem9vbWVkSW5UaWxlR3JpZC5nZXQoKSA6IG1fem9vbWVkT3V0
VGlsZUdyaWQuZ2V0KCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlc09wYXF1ZShib29s
IG9wYXF1ZSkKK3sKKyAgICBpZiAobV90aWxlc09wYXF1ZSA9PSBvcGFxdWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisKKyAgICBtX3Rp
bGVzT3BhcXVlID0gb3BhcXVlOworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnVwZGF0ZVRpbGVP
cGFjaXR5KCk7CisgICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCkKKyAgICAgICAgbV96b29tZWRJ
blRpbGVHcmlkLT51cGRhdGVUaWxlT3BhY2l0eSgpOworfQorCit2b2lkIFRpbGVDYWNoZTo6ZG9M
YXlvdXRUaWxlcygpCit7CisgICAgaWYgKGlzVGlsZUNyZWF0aW9uU3VzcGVuZGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAg
VGlsZUdyaWQqIGFjdGl2ZUdyaWQgPSBhY3RpdmVUaWxlR3JpZCgpOworICAgIC8vIEV2ZW4gdGhv
dWdoIHdlIGFyZW4ndCBhY3R1YWxseSBjcmVhdGluZyB0aWxlcyBpbiB0aGUgaW5hY3RpdmUgZ3Jp
ZCwgd2UKKyAgICAvLyBzdGlsbCBuZWVkIHRvIGRyb3AgaW52YWxpZCB0aWxlcyBpbiByZXNwb25z
ZSB0byBhIGxheW91dC4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4Mzk4Njc+LgorICAg
IGlmIChUaWxlR3JpZCogaW5hY3RpdmVHcmlkID0gaW5hY3RpdmVUaWxlR3JpZCgpKQorICAgICAg
ICBpbmFjdGl2ZUdyaWQtPmRyb3BJbnZhbGlkVGlsZXMoKTsKKyAgICBpZiAoYWN0aXZlR3JpZC0+
Y2hlY2tEb1NpbmdsZVRpbGVMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNyZWF0ZVRp
bGVzSW5BY3RpdmVHcmlkKENvdmVyVmlzaWJsZU9ubHkpOworfQorCit2b2lkIFRpbGVDYWNoZTo6
aG9zdExheWVyU2l6ZUNoYW5nZWQoKQoreworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnVwZGF0
ZUhvc3RMYXllclNpemUoKTsKKyAgICBpZiAobV96b29tZWRJblRpbGVHcmlkKQorICAgICAgICBt
X3pvb21lZEluVGlsZUdyaWQtPnVwZGF0ZUhvc3RMYXllclNpemUoKTsKK30KKwordm9pZCBUaWxl
Q2FjaGU6OnNldEtlZXBzWm9vbWVkT3V0VGlsZXMoYm9vbCBrZWVwKQoreworICAgIG1fa2VlcHNa
b29tZWRPdXRUaWxlcyA9IGtlZXA7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRDdXJyZW50U2Nh
bGUoZmxvYXQgc2NhbGUpCit7CisgICAgQVNTRVJUKHNjYWxlID4gMCk7CisKKyAgICBpZiAoY3Vy
cmVudFNjYWxlKCkgPT0gc2NhbGUpIHsKKyAgICAgICAgbV9wZW5kaW5nU2NhbGUgPSAwOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIG1fcGVuZGluZ1NjYWxlID0gc2NhbGU7CisgICAgaWYg
KG1fdGlsaW5nTW9kZSA9PSBEaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIGNvbW1pdFNj
YWxlQ2hhbmdlKCk7CisKKyAgICBpZiAoIWtlZXBzWm9vbWVkT3V0VGlsZXMoKSAmJiAhaXNUaWxl
SW52YWxpZGF0aW9uU3VzcGVuZGVkKCkpIHsKKyAgICAgICAgLy8gVGlsZSBpbnZhbGlkYXRpb24g
aXMgbm9ybWFsbHkgc3VzcGVuZGVkIGR1cmluZyB6b29taW5nIGJ5IFVJS2l0IGJ1dCBzb21lIGFw
cGxpY2F0aW9ucworICAgICAgICAvLyB1c2luZyBjdXN0b20gc2Nyb2xsdmlld3MgbWF5IHpvb20g
d2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBjYWxsYmFja3MuIEludmFsaWRhdGUgdGhlIHRpbGVzIGV4
cGxpY2l0bHkuCisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAg
ICAgIGFjdGl2ZVRpbGVHcmlkKCktPmRyb3BBbGxUaWxlcygpOworICAgICAgICBhY3RpdmVUaWxl
R3JpZCgpLT5jcmVhdGVUaWxlcyhDb3ZlclZpc2libGVPbmx5KTsKKyAgICB9Cit9CisKK3ZvaWQg
VGlsZUNhY2hlOjpzZXRab29tZWRPdXRTY2FsZShmbG9hdCBzY2FsZSkKK3sKKyAgICBBU1NFUlQo
c2NhbGUgPiAwKTsKKworICAgIGlmICh6b29tZWRPdXRTY2FsZSgpID09IHNjYWxlKSB7CisgICAg
ICAgIG1fcGVuZGluZ1pvb21lZE91dFNjYWxlID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX3BlbmRpbmdab29tZWRPdXRTY2FsZSA9IHNjYWxlOworICAgIGlmIChtX3RpbGluZ01v
ZGUgPT0gRGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBjb21taXRTY2FsZUNoYW5nZSgp
OworfQorICAgIAordm9pZCBUaWxlQ2FjaGU6OmNvbW1pdFNjYWxlQ2hhbmdlKCkKK3sKKyAgICBB
U1NFUlQobV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUgfHwgbV9wZW5kaW5nU2NhbGUpOworICAgIEFT
U0VSVChtX3RpbGluZ01vZGUgIT0gRGlzYWJsZWQpOworICAgIAorICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3RpbGVNdXRleCk7CisKKyAgICBpZiAobV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUpIHsK
KyAgICAgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+c2V0U2NhbGUobV9wZW5kaW5nWm9vbWVkT3V0
U2NhbGUpOworICAgICAgICBtX3BlbmRpbmdab29tZWRPdXRTY2FsZSA9IDA7CisgICAgfQorICAg
IAorICAgIGlmICghbV9rZWVwc1pvb21lZE91dFRpbGVzKSB7CisgICAgICAgIEFTU0VSVChhY3Rp
dmVUaWxlR3JpZCgpID09IG1fem9vbWVkT3V0VGlsZUdyaWQpOworICAgICAgICBpZiAobV9wZW5k
aW5nU2NhbGUpIHsKKyAgICAgICAgICAgIG1fY3VycmVudFNjYWxlID0gbV9wZW5kaW5nU2NhbGU7
CisgICAgICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5zZXRTY2FsZShtX2N1cnJlbnRTY2Fs
ZSk7CisgICAgICAgIH0KKyAgICAgICAgbV9wZW5kaW5nU2NhbGUgPSAwOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKG1fcGVuZGluZ1NjYWxlKSB7CisgICAgICAgIG1fY3VycmVu
dFNjYWxlID0gbV9wZW5kaW5nU2NhbGU7CisgICAgICAgIG1fcGVuZGluZ1NjYWxlID0gMDsKKyAg
ICB9CisKKyAgICBpZiAobV9jdXJyZW50U2NhbGUgIT0gbV96b29tZWRPdXRUaWxlR3JpZC0+c2Nh
bGUoKSkgeworICAgICAgICBpZiAoIW1fem9vbWVkSW5UaWxlR3JpZCkgeworICAgICAgICAgICAg
bV96b29tZWRJblRpbGVHcmlkID0gVGlsZUdyaWQ6OmNyZWF0ZSh0aGlzLCBtX3RpbGVTaXplKTsK
KyAgICAgICAgICAgIFtob3N0TGF5ZXIoKSBhZGRTdWJsYXllcjptX3pvb21lZEluVGlsZUdyaWQt
PnRpbGVIb3N0TGF5ZXIoKV07CisgICAgICAgICAgICBob3N0TGF5ZXJTaXplQ2hhbmdlZCgpOwor
ICAgICAgICB9CisgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+c2V0U2NhbGUobV9jdXJyZW50
U2NhbGUpOworICAgIH0KKworICAgIC8vIEtlZXAgdGhlIGN1cnJlbnQgb3JkZXJpbmcgZHVyaW5n
IHpvb21pbmcuCisgICAgaWYgKG1fdGlsaW5nTW9kZSAhPSBab29taW5nKQorICAgICAgICBicmlu
Z0FjdGl2ZVRpbGVHcmlkVG9Gcm9udCgpOworCisgICAgYWRqdXN0VGlsZUdyaWRUcmFuc2Zvcm1z
KCk7CisgICAgbGF5b3V0VGlsZXMoKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmJyaW5nQWN0aXZl
VGlsZUdyaWRUb0Zyb250KCkKK3sKKyAgICBUaWxlR3JpZCogYWN0aXZlR3JpZCA9IGFjdGl2ZVRp
bGVHcmlkKCk7CisgICAgVGlsZUdyaWQqIG90aGVyR3JpZCA9IGluYWN0aXZlVGlsZUdyaWQoKTsK
KyAgICBpZiAoIW90aGVyR3JpZCkKKyAgICAgICAgcmV0dXJuOworICAgIENBTGF5ZXIqIGZyb250
TGF5ZXIgPSBhY3RpdmVHcmlkLT50aWxlSG9zdExheWVyKCk7CisgICAgQ0FMYXllciogb3RoZXJM
YXllciA9IG90aGVyR3JpZC0+dGlsZUhvc3RMYXllcigpOworICAgIFtob3N0TGF5ZXIoKSBpbnNl
cnRTdWJsYXllcjpmcm9udExheWVyIGFib3ZlOm90aGVyTGF5ZXJdOworfQorICAgIAordm9pZCBU
aWxlQ2FjaGU6OmFkanVzdFRpbGVHcmlkVHJhbnNmb3JtcygpCit7CisgICAgQ0FMYXllciogem9v
bWVkT3V0SG9zdExheWVyID0gbV96b29tZWRPdXRUaWxlR3JpZC0+dGlsZUhvc3RMYXllcigpOwor
ICAgIGZsb2F0IHRyYW5zZm9ybVNjYWxlID0gY3VycmVudFNjYWxlKCkgLyB6b29tZWRPdXRTY2Fs
ZSgpOworICAgIFt6b29tZWRPdXRIb3N0TGF5ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RN
YWtlU2NhbGUodHJhbnNmb3JtU2NhbGUsIHRyYW5zZm9ybVNjYWxlLCAxLjBmKV07CisgICAgbV96
b29tZWRPdXRUaWxlR3JpZC0+dXBkYXRlSG9zdExheWVyU2l6ZSgpOworfQorCit2b2lkIFRpbGVD
YWNoZTo6bGF5b3V0VGlsZXMoKQoreworICAgIGlmIChtX2hhc1BlbmRpbmdMYXlvdXRUaWxlcykK
KyAgICAgICAgcmV0dXJuOworICAgIG1faGFzUGVuZGluZ0xheW91dFRpbGVzID0gdHJ1ZTsKKwor
ICAgIFRpbGVDYWNoZVRvbWJzdG9uZSAqdG9tYnN0b25lID0gbV90b21ic3RvbmUuZ2V0KCk7Cisg
ICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlmIChbdG9tYnN0b25lIGlzRGVhZF0pCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIG1faGFzUGVuZGluZ0xheW91dFRpbGVzID0gZmFsc2U7
CisgICAgICAgIGRvTGF5b3V0VGlsZXMoKTsKKyAgICB9KTsKK30KKwordm9pZCBUaWxlQ2FjaGU6
OmxheW91dFRpbGVzTm93KCkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2Fi
bGVkKCkpOworCisgICAgLy8gbGF5b3V0VGlsZXNOb3coKSBpcyBjYWxsZWQgYWZ0ZXIgYSB6b29t
LCB3aGlsZSB0aGUgdGlsZSBtb2RlIGlzIHN0aWxsIHNldCB0byBab29taW5nLgorICAgIC8vIElm
IHdlIGNoZWNrZWQgZm9yIGlzVGlsZUNyZWF0aW9uU3VzcGVuZGVkIGhlcmUsIHRoYXQgd291bGQg
Y2F1c2UgPHJkYXI6Ly9wcm9ibGVtLzg0MzQxMTI+IChQYWdlIGZsYXNoZXMgYWZ0ZXIgem9vbWlu
ZyBpbi9vdXQpLgorICAgIGlmIChtX3RpbGluZ01vZGUgPT0gRGlzYWJsZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICAvLyBGSVhNRTogbGF5b3V0VGlsZXNOb3cgc2hvdWxkIGJlIGNhbGxl
ZCBhZnRlciBzdGF0ZSBoYXMgYmVlbiBzZXQgdG8gbm9uLXpvb21pbmcgYW5kIHRoZSBhY3RpdmUg
Z3JpZCBpcyB0aGUgZmluYWwgb25lLiAKKyAgICAvLyBGaXggdGhpcyBpbiBVSUtpdCBzaWRlIChw
ZXJoYXBzIGFsc28gZ2V0dGluZyByaWQgb2YgdGhpcyBjYWxsKSBhbmQgcmVtb3ZlIHRoaXMgY29k
ZSBhZnRlcndhcmRzLgorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS85NjcyOTkzPgorICAgIFRpbGlu
Z01vZGUgc2F2ZWRUaWxpbmdNb2RlID0gbV90aWxpbmdNb2RlOworICAgIGlmIChtX3RpbGluZ01v
ZGUgPT0gWm9vbWluZykKKyAgICAgICAgbV90aWxpbmdNb2RlID0gTWluaW1hbDsKKworICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAgVGlsZUdyaWQqIGFjdGl2ZUdyaWQg
PSBhY3RpdmVUaWxlR3JpZCgpOworICAgIGlmIChhY3RpdmVHcmlkLT5jaGVja0RvU2luZ2xlVGls
ZUxheW91dCgpKSB7CisgICAgICAgIG1fdGlsaW5nTW9kZSA9IHNhdmVkVGlsaW5nTW9kZTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjcmVhdGVUaWxlc0luQWN0aXZlR3JpZChDb3ZlclZp
c2libGVPbmx5KTsKKyAgICBtX3RpbGluZ01vZGUgPSBzYXZlZFRpbGluZ01vZGU7Cit9CisKK3Zv
aWQgVGlsZUNhY2hlOjpsYXlvdXRUaWxlc05vd0ZvclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisKKyAgICBhY3RpdmVUaWxlR3JpZCgpLT5hZGRU
aWxlc0NvdmVyaW5nUmVjdChyZWN0KTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OnJlbW92ZUFsbE5v
blZpc2libGVUaWxlcygpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsK
KyAgICByZW1vdmVBbGxOb25WaXNpYmxlVGlsZXNJbnRlcm5hbCgpOworfQorCit2b2lkIFRpbGVD
YWNoZTo6cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzSW50ZXJuYWwoKQoreworICAgIFRpbGVHcmlk
KiBhY3RpdmVHcmlkID0gYWN0aXZlVGlsZUdyaWQoKTsKKyAgICBpZiAoa2VlcHNab29tZWRPdXRU
aWxlcygpICYmIGFjdGl2ZUdyaWQgPT0gbV96b29tZWRJblRpbGVHcmlkICYmIGFjdGl2ZUdyaWQt
Pmhhc1RpbGVzKCkpCisgICAgICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPmRyb3BBbGxUaWxlcygp
OworCisgICAgSW50UmVjdCBhY3RpdmVUaWxlQm91bmRzID0gYWN0aXZlR3JpZC0+Ym91bmRzKCk7
CisgICAgaWYgKGFjdGl2ZVRpbGVCb3VuZHMud2lkdGgoKSA8PSBtX3RpbGVTaXplLndpZHRoKCkg
JiYgYWN0aXZlVGlsZUJvdW5kcy5oZWlnaHQoKSA8PSBtX3RpbGVTaXplLmhlaWdodCgpKSB7Cisg
ICAgICAgIC8vIElmIHRoZSB2aWV3IGlzIHNtYWxsZXIgdGhhbiBhIHRpbGUsIGtlZXAgdGhlIHRp
bGUgZXZlbiBpZiBpdCBpcyBub3QgdmlzaWJsZS4KKyAgICAgICAgYWN0aXZlR3JpZC0+ZHJvcFRp
bGVzT3V0c2lkZVJlY3QoYWN0aXZlVGlsZUJvdW5kcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBhY3RpdmVHcmlkLT5kcm9wVGlsZXNPdXRzaWRlUmVjdChhY3RpdmVHcmlkLT52aXNp
YmxlUmVjdCgpKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OnJlbW92ZUFsbFRpbGVzKCkKK3sKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAgIG1fem9vbWVkT3V0VGlsZUdy
aWQtPmRyb3BBbGxUaWxlcygpOworICAgIGlmIChtX3pvb21lZEluVGlsZUdyaWQpCisgICAgICAg
IG1fem9vbWVkSW5UaWxlR3JpZC0+ZHJvcEFsbFRpbGVzKCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hl
OjpyZW1vdmVGb3JlZ3JvdW5kVGlsZXMoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Rp
bGVNdXRleCk7CisgICAgaWYgKCFrZWVwc1pvb21lZE91dFRpbGVzKCkpCisgICAgICAgIG1fem9v
bWVkT3V0VGlsZUdyaWQtPmRyb3BBbGxUaWxlcygpOworICAgIGlmIChtX3pvb21lZEluVGlsZUdy
aWQpCisgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+ZHJvcEFsbFRpbGVzKCk7Cit9CisKK3Zv
aWQgVGlsZUNhY2hlOjpzZXRDb250ZW50UmVwbGFjZW1lbnRJbWFnZShSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gY29udGVudFJlcGxhY2VtZW50SW1hZ2UpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2VNdXRleCk7CisgICAgbV9jb250ZW50UmVwbGFjZW1l
bnRJbWFnZSA9IGNvbnRlbnRSZXBsYWNlbWVudEltYWdlOworfQorCitSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gVGlsZUNhY2hlOjpjb250ZW50UmVwbGFjZW1lbnRJbWFnZSgpIGNvbnN0Cit7CisgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2VNdXRleCk7CisgICAg
cmV0dXJuIG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2U7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpz
ZXRUaWxlQm9yZGVyc1Zpc2libGUoYm9vbCBmbGFnKQoreworICAgIGlmIChmbGFnID09IG1fdGls
ZUJvcmRlcnNWaXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RpbGVCb3JkZXJzVmlz
aWJsZSA9IGZsYWc7CisgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+dXBkYXRlVGlsZUJvcmRlclZp
c2liaWxpdHkoKTsKKyAgICBpZiAobV96b29tZWRJblRpbGVHcmlkKQorICAgICAgICBtX3pvb21l
ZEluVGlsZUdyaWQtPnVwZGF0ZVRpbGVCb3JkZXJWaXNpYmlsaXR5KCk7Cit9CisKK3ZvaWQgVGls
ZUNhY2hlOjpzZXRUaWxlUGFpbnRDb3VudGVyc1Zpc2libGUoYm9vbCBmbGFnKQoreworICAgIG1f
dGlsZVBhaW50Q291bnRlcnNWaXNpYmxlID0gZmxhZzsKKyAgICAvLyBUaGUgbnVtYmVycyB3aWxs
IHNob3cgdXAgdGhlIG5leHQgdGltZSB0aGUgdGlsZXMgcGFpbnQuCit9CisKK3ZvaWQgVGlsZUNh
Y2hlOjpmaW5pc2hlZENyZWF0aW5nVGlsZXMoYm9vbCBkaWRDcmVhdGVUaWxlcywgYm9vbCBjcmVh
dGVNb3JlKQoreworICAgIC8vIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYWxsIHRpbGVzIGFyZSBz
aG93aW5nIHRoZSBzYW1lIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQuCisgICAgaWYgKGRpZENyZWF0
ZVRpbGVzICYmICFtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgZmx1c2hT
YXZlZERpc3BsYXlSZWN0cygpOworCisgICAgaWYgKGtlZXBzWm9vbWVkT3V0VGlsZXMoKSkgewor
ICAgICAgICBpZiAobV96b29tZWRJblRpbGVHcmlkICYmIGFjdGl2ZVRpbGVHcmlkKCkgPT0gbV96
b29tZWRPdXRUaWxlR3JpZCAmJiBtX3RpbGluZ01vZGUgIT0gWm9vbWluZyAmJiBtX3pvb21lZElu
VGlsZUdyaWQtPmhhc1RpbGVzKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgQ0EgdHJhbnNhY3Rp
b24gd2lsbCBjb3ZlciB0aGUgc2NyZWVuIHdpdGggdG9wIGxldmVsIHRpbGVzLgorICAgICAgICAg
ICAgLy8gV2UgY2FuIHJlbW92ZSB6b29tZWQtaW4gdGlsZXMgd2l0aG91dCBmbGFzaGluZy4KKyAg
ICAgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+ZHJvcEFsbFRpbGVzKCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoYWN0aXZlVGlsZUdyaWQoKSA9PSBtX3pvb21lZEluVGlsZUdyaWQpIHsKKyAgICAg
ICAgICAgIC8vIFBhc3MgdGhlIG1pbmltdW0gcG9zc2libGUgZGlzdGFuY2UgdG8gY29uc2lkZXIg
YWxsIHRpbGVzLCBldmVuIHZpc2libGUgb25lcy4KKyAgICAgICAgICAgIG1fem9vbWVkT3V0VGls
ZUdyaWQtPmRyb3BEaXN0YW50VGlsZXMoMCwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpt
aW4oKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBLZWVwIGNyZWF0aW5nIHRpbGVzIHVu
dGlsIHRoZSB3aG9sZSBjb3ZlclJlY3QgaXMgY292ZXJlZC4KKyAgICBpZiAoY3JlYXRlTW9yZSkK
KyAgICAgICAgbV90aWxlQ3JlYXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQg
VGlsZUNhY2hlOjp0aWxlQ3JlYXRpb25UaW1lckZpcmVkKFRpbWVyPFRpbGVDYWNoZT4qKQorewor
ICAgIGlmIChpc1RpbGVDcmVhdGlvblN1c3BlbmRlZCgpKQorICAgICAgICByZXR1cm47CisgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKKyAgICBjcmVhdGVUaWxlc0luQWN0aXZl
R3JpZChDb3ZlclNwZWN1bGF0aXZlKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmNyZWF0ZVRpbGVz
SW5BY3RpdmVHcmlkKFN5bmNocm9ub3VzVGlsZUNyZWF0aW9uTW9kZSBtb2RlKQoreworICAgIGlm
IChtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5oYXNSZWNlaXZlZE1lbW9yeVByZXNzdXJlKCkpIHsK
KyAgICAgICAgTE9HKE1lbW9yeVByZXNzdXJlLCAiVW5kZXIgbWVtb3J5IHByZXNzdXJlIGF0OiAl
cyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgICAgICByZW1vdmVBbGxOb25WaXNpYmxlVGls
ZXNJbnRlcm5hbCgpOworICAgIH0KKyAgICBhY3RpdmVUaWxlR3JpZCgpLT5jcmVhdGVUaWxlcyht
b2RlKTsKK30KKwordW5zaWduZWQgVGlsZUNhY2hlOjp0aWxlQ2FwYWNpdHlGb3JHcmlkKFRpbGVH
cmlkKiBncmlkKQoreworICAgIHN0YXRpYyB1bnNpZ25lZCBjYXBhY2l0eTsKKyAgICBpZiAoIWNh
cGFjaXR5KSB7CisgICAgICAgIHNpemVfdCB0b3RhbE1lbW9yeSA9IHN5c3RlbVRvdGFsTWVtb3J5
KCk7CisgICAgICAgIHRvdGFsTWVtb3J5IC89IDEwMjQgKiAxMDI0OworICAgICAgICBpZiAodG90
YWxNZW1vcnkgPj0gMTAyNCkKKyAgICAgICAgICAgIGNhcGFjaXR5ID0gMTI4ICogMTAyNCAqIDEw
MjQ7CisgICAgICAgIGVsc2UgaWYgKHRvdGFsTWVtb3J5ID49IDUxMikKKyAgICAgICAgICAgIGNh
cGFjaXR5ID0gNjQgKiAxMDI0ICogMTAyNDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2Fw
YWNpdHkgPSAzMiAqIDEwMjQgKiAxMDI0OworICAgIH0KKworICAgIGludCBncmlkQ2FwYWNpdHk7
CisKKyAgICBpbnQgbWVtb3J5TGV2ZWwgPSBzeXN0ZW1NZW1vcnlMZXZlbCgpOworICAgIGlmICht
ZW1vcnlMZXZlbCA8IDE1KQorICAgICAgICBncmlkQ2FwYWNpdHkgPSBjYXBhY2l0eSAvIDQ7Cisg
ICAgZWxzZSBpZiAobWVtb3J5TGV2ZWwgPCAyMCkKKyAgICAgICAgZ3JpZENhcGFjaXR5ID0gY2Fw
YWNpdHkgLyAyOworICAgIGVsc2UgaWYgKG1lbW9yeUxldmVsIDwgMzApIAorICAgICAgICBncmlk
Q2FwYWNpdHkgPSBjYXBhY2l0eSAqIDMgLyA0OworICAgIGVsc2UKKyAgICAgICAgZ3JpZENhcGFj
aXR5ID0gY2FwYWNpdHk7CisKKyAgICBpZiAoa2VlcHNab29tZWRPdXRUaWxlcygpICYmIGdyaWQg
PT0gbV96b29tZWRPdXRUaWxlR3JpZCkgeworICAgICAgICBpZiAoYWN0aXZlVGlsZUdyaWQoKSA9
PSBtX3pvb21lZE91dFRpbGVHcmlkKQorICAgICAgICAgICAgcmV0dXJuIGdyaWRDYXBhY2l0eTsK
KyAgICAgICAgcmV0dXJuIGdyaWRDYXBhY2l0eSAvIDQ7CisgICAgfQorICAgIHJldHVybiBncmlk
Q2FwYWNpdHkgKiAzIC8gNDsKK30KKworQ29sb3IgVGlsZUNhY2hlOjpjb2xvckZvckdyaWRUaWxl
Qm9yZGVyKFRpbGVHcmlkKiBncmlkKSBjb25zdAoreworICAgIGlmIChncmlkID09IG1fem9vbWVk
T3V0VGlsZUdyaWQpCisgICAgICAgIHJldHVybiBDb2xvciguM2YsIC4wZiwgMC40ZiwgMC41Zik7
CisKKyAgICByZXR1cm4gQ29sb3IoLjBmLCAuMGYsIDAuNGYsIDAuNWYpOworfQorCitzdGF0aWMg
Ym9vbCBzaG91bGRSZXBhaW50SW5QaWVjZXMoY29uc3QgQ0dSZWN0JiBkaXJ0eVJlY3QsIENHU1Jl
Z2lvbk9iaiBkaXJ0eVJlZ2lvbiwgQ0dGbG9hdCBjb250ZW50c1NjYWxlKQoreworICAgIC8vIEVz
dGltYXRlIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCB1c2UgdGhlIHVuaW9uZWQgcmVjdCBvciB0
aGUgaW5kaXZpZHVhbCByZWN0cy4KKyAgICAvLyBXZSBkbyB0aGlzIGJ5IGNvbXB1dGluZyB0aGUg
cGVyY2VudGFnZSBvZiAid2FzdGVkIHNwYWNlIiBpbiB0aGUgdW5pb24uIElmIHRoYXQgd2FzdGVk
IHNwYWNlCisgICAgLy8gaXMgdG9vIGxhcmdlLCB0aGVuIHdlIHdpbGwgZG8gaW5kaXZpZHVhbCBy
ZWN0IHBhaW50aW5nIGluc3RlYWQuCisgICAgZmxvYXQgc2luZ2xlUGl4ZWxzID0gMDsKKyAgICB1
bnNpZ25lZCByZWN0Q291bnQgPSAwOworCisgICAgQ0dTUmVnaW9uRW51bWVyYXRvck9iaiBlbnVt
ZXJhdG9yID0gQ0dTUmVnaW9uRW51bWVyYXRvcihkaXJ0eVJlZ2lvbik7CisgICAgQ0dSZWN0ICpz
dWJSZWN0OworICAgIHdoaWxlICgoc3ViUmVjdCA9IENHU05leHRSZWN0KGVudW1lcmF0b3IpKSkg
eworICAgICAgICArK3JlY3RDb3VudDsKKyAgICAgICAgc2luZ2xlUGl4ZWxzICs9IHN1YlJlY3Qt
PnNpemUud2lkdGggKiBzdWJSZWN0LT5zaXplLmhlaWdodDsKKyAgICB9CisgICAgc2luZ2xlUGl4
ZWxzIC89IChjb250ZW50c1NjYWxlICogY29udGVudHNTY2FsZSk7CisgICAgQ0dTUmVsZWFzZVJl
Z2lvbkVudW1lcmF0b3IoZW51bWVyYXRvcik7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjUmVjdFRo
cmVzaG9sZCA9IDEwOworICAgIGlmIChyZWN0Q291bnQgPCAyIHx8IHJlY3RDb3VudCA+IGNSZWN0
VGhyZXNob2xkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBmbG9hdCBjV2Fz
dGVkU3BhY2VUaHJlc2hvbGQgPSAwLjUwZjsKKyAgICBmbG9hdCB1bmlvblBpeGVscyA9IGRpcnR5
UmVjdC5zaXplLndpZHRoICogZGlydHlSZWN0LnNpemUuaGVpZ2h0OworICAgIGZsb2F0IHdhc3Rl
ZFNwYWNlID0gMS5mIC0gKHNpbmdsZVBpeGVscyAvIHVuaW9uUGl4ZWxzKTsKKyAgICByZXR1cm4g
d2FzdGVkU3BhY2UgPiBjV2FzdGVkU3BhY2VUaHJlc2hvbGQ7Cit9CisKK3ZvaWQgVGlsZUNhY2hl
OjpkcmF3UmVwbGFjZW1lbnRJbWFnZShUaWxlTGF5ZXIqIGxheWVyLCBDR0NvbnRleHRSZWYgY29u
dGV4dCwgQ0dJbWFnZVJlZiBpbWFnZSkKK3sKKyAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3Io
Y29udGV4dCwgMSwgMSwgMSwgMSk7CisgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgQ0dD
b250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpKTsKKworICAgIENHRmxvYXQgY29udGVu
dHNTY2FsZSA9IFtsYXllciBjb250ZW50c1NjYWxlXTsKKyAgICBDR0NvbnRleHRTY2FsZUNUTShj
b250ZXh0LCAxIC8gY29udGVudHNTY2FsZSwgLTEgLyBjb250ZW50c1NjYWxlKTsKKyAgICBDR1Jl
Y3QgaW1hZ2VSZWN0ID0gQ0dSZWN0TWFrZSgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBD
R0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRl
eHQsIDAsIC1pbWFnZVJlY3Quc2l6ZS5oZWlnaHQpOworICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LCBpbWFnZVJlY3QsIGltYWdlKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmRyYXdXaW5k
b3dDb250ZW50KFRpbGVMYXllciogbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1JlY3Qg
ZGlydHlSZWN0KQoreworICAgIENHUmVjdCBmcmFtZSA9IFtsYXllciBmcmFtZV07CisgICAgV0tG
b250QW50aWFsaWFzaW5nU3RhdGVTYXZlciBmb250QW50aWFsaWFzaW5nU3RhdGUoY29udGV4dCwg
W21fd2luZG93IHVzZU9yaWVudGF0aW9uRGVwZW5kZW50Rm9udEFudGlhbGlhc2luZ10gJiYgW2xh
eWVyIGlzT3BhcXVlXSk7CisgICAgZm9udEFudGlhbGlhc2luZ1N0YXRlLnNldHVwKFtXQUtXaW5k
b3cgaGFzTGFuZHNjYXBlT3JpZW50YXRpb25dKTsKKworICAgIENHU1JlZ2lvbk9iaiBkcmF3UmVn
aW9uID0gKENHU1JlZ2lvbk9iailbbGF5ZXIgcmVnaW9uQmVpbmdEcmF3bl07CisgICAgQ0dGbG9h
dCBjb250ZW50c1NjYWxlID0gW2xheWVyIGNvbnRlbnRzU2NhbGVdOworICAgIGlmIChkcmF3UmVn
aW9uICYmIHNob3VsZFJlcGFpbnRJblBpZWNlcyhkaXJ0eVJlY3QsIGRyYXdSZWdpb24sIGNvbnRl
bnRzU2NhbGUpKSB7CisgICAgICAgIC8vIFVzZSBmaW5lIGdyYWluZWQgcmVwYWludCByZWN0YW5n
bGVzIHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgcGFpbnRlZCBwaXhlbHMuCisgICAgICAgIENH
U1JlZ2lvbkVudW1lcmF0b3JPYmogZW51bWVyYXRvciA9IENHU1JlZ2lvbkVudW1lcmF0b3IoZHJh
d1JlZ2lvbik7CisgICAgICAgIENHUmVjdCAqc3ViUmVjdDsKKyAgICAgICAgd2hpbGUgKChzdWJS
ZWN0ID0gQ0dTTmV4dFJlY3QoZW51bWVyYXRvcikpKSB7CisgICAgICAgICAgICBDR1JlY3QgYWRq
dXN0ZWRTdWJSZWN0ID0gKnN1YlJlY3Q7CisgICAgICAgICAgICBhZGp1c3RlZFN1YlJlY3Qub3Jp
Z2luLnggLz0gY29udGVudHNTY2FsZTsKKyAgICAgICAgICAgIGFkanVzdGVkU3ViUmVjdC5vcmln
aW4ueSA9IGZyYW1lLnNpemUuaGVpZ2h0IC0gKGFkanVzdGVkU3ViUmVjdC5vcmlnaW4ueSArIGFk
anVzdGVkU3ViUmVjdC5zaXplLmhlaWdodCkgLyBjb250ZW50c1NjYWxlOworICAgICAgICAgICAg
YWRqdXN0ZWRTdWJSZWN0LnNpemUud2lkdGggLz0gY29udGVudHNTY2FsZTsKKyAgICAgICAgICAg
IGFkanVzdGVkU3ViUmVjdC5zaXplLmhlaWdodCAvPSBjb250ZW50c1NjYWxlOworCisgICAgICAg
ICAgICBDR1JlY3Qgc3ViUmVjdEluU3VwZXIgPSBbaG9zdExheWVyKCkgY29udmVydFJlY3Q6YWRq
dXN0ZWRTdWJSZWN0IGZyb21MYXllcjpsYXllcl07CisgICAgICAgICAgICBbbV93aW5kb3cgZGlz
cGxheVJlY3Q6c3ViUmVjdEluU3VwZXJdOworICAgICAgICB9CisgICAgICAgIENHU1JlbGVhc2VS
ZWdpb25FbnVtZXJhdG9yKGVudW1lcmF0b3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFNp
bXBsZSByZXBhaW50CisgICAgICAgIENHUmVjdCBkaXJ0eVJlY3RJblN1cGVyID0gW2hvc3RMYXll
cigpIGNvbnZlcnRSZWN0OmRpcnR5UmVjdCBmcm9tTGF5ZXI6bGF5ZXJdOworICAgICAgICBbbV93
aW5kb3cgZGlzcGxheVJlY3Q6ZGlydHlSZWN0SW5TdXBlcl07CisgICAgfQorCisgICAgZm9udEFu
dGlhbGlhc2luZ1N0YXRlLnJlc3RvcmUoKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmRyYXdMYXll
cihUaWxlTGF5ZXIqIGxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICAvLyBUaGUg
d2ViIGxvY2sgdW5sb2NrIG9ic2VydmVyIHJ1bnMgYWZ0ZXIgQ0EgY29tbWl0IG9ic2VydmVyLgor
ICAgIGlmICghV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJEcmF3aW5nIHdpdGhvdXQgaG9sZGluZyB0aGUgd2ViIHRocmVhZCBsb2NrIik7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIFdLU2V0Q3VycmVudEdyYXBo
aWNzQ29udGV4dChjb250ZXh0KTsKKworICAgIENHUmVjdCBkaXJ0eVJlY3QgPSBDR0NvbnRleHRH
ZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCk7CisgICAgQ0dSZWN0IGZyYW1lID0gW2xheWVyIGZy
YW1lXTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgLWZyYW1lLm9yaWdpbi54
LCAtZnJhbWUub3JpZ2luLnkpOworICAgIENHUmVjdCBzY2FsZWRGcmFtZSA9IFtob3N0TGF5ZXIo
KSBjb252ZXJ0UmVjdDpbbGF5ZXIgYm91bmRzXSBmcm9tTGF5ZXI6bGF5ZXJdOworICAgIENHQ29u
dGV4dFNjYWxlQ1RNKGNvbnRleHQsIGZyYW1lLnNpemUud2lkdGggLyBzY2FsZWRGcmFtZS5zaXpl
LndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCAvIHNjYWxlZEZyYW1lLnNpemUuaGVpZ2h0KTsKKwor
ICAgIGlmIChSZXRhaW5QdHI8Q0dJbWFnZT4gY29udGVudFJlcGxhY2VtZW50SW1hZ2UgPSB0aGlz
LT5jb250ZW50UmVwbGFjZW1lbnRJbWFnZSgpKQorICAgICAgICBkcmF3UmVwbGFjZW1lbnRJbWFn
ZShsYXllciwgY29udGV4dCwgY29udGVudFJlcGxhY2VtZW50SW1hZ2UuZ2V0KCkpOworICAgIGVs
c2UKKyAgICAgICAgZHJhd1dpbmRvd0NvbnRlbnQobGF5ZXIsIGNvbnRleHQsIGRpcnR5UmVjdCk7
CisKKyAgICArK2xheWVyLnBhaW50Q291bnQ7CisgICAgaWYgKG1fdGlsZVBhaW50Q291bnRlcnNW
aXNpYmxlKSB7CisgICAgICAgIGNoYXIgdGV4dFsxNl07CisgICAgICAgIHNucHJpbnRmKHRleHQs
IHNpemVvZih0ZXh0KSwgIiVkIiwgbGF5ZXIucGFpbnRDb3VudCk7CisKKyAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKworICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0o
Y29udGV4dCwgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55KTsKKyAgICAgICAgQ0dDb250
ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNhY2hlZENHQ29sb3IoY29sb3JGb3JH
cmlkVGlsZUJvcmRlcihbbGF5ZXIgdGlsZUdyaWRdKSwgQ29sb3JTcGFjZURldmljZVJHQikpOwor
ICAgICAgICAKKyAgICAgICAgQ0dSZWN0IGxhYmVsQm91bmRzID0gW2xheWVyIGJvdW5kc107Cisg
ICAgICAgIGxhYmVsQm91bmRzLnNpemUud2lkdGggPSAxMCArIDEyICogc3RybGVuKHRleHQpOwor
ICAgICAgICBsYWJlbEJvdW5kcy5zaXplLmhlaWdodCA9IDI1OworICAgICAgICBDR0NvbnRleHRG
aWxsUmVjdChjb250ZXh0LCBsYWJlbEJvdW5kcyk7CisKKyAgICAgICAgaWYgKGFjY2VsZXJhdGVk
RHJhd2luZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihj
b250ZXh0LCAxLCAwLCAwLCAwLjRmKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQ0dDb250
ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEsIDEsIDEsIDAuNmYpOworI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Rl
cHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgICAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNv
bnRleHQsIENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKDEsIC0xKSk7CisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVw
cmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgICAgIENHQ29udGV4dFNlbGVjdEZvbnQoY29udGV4
dCwgIkhlbHZldGljYSIsIDI1LCBrQ0dFbmNvZGluZ01hY1JvbWFuKTsKKyAgICAgICAgQ0dDb250
ZXh0U2hvd1RleHRBdFBvaW50KGNvbnRleHQsIGxhYmVsQm91bmRzLm9yaWdpbi54ICsgMywgbGFi
ZWxCb3VuZHMub3JpZ2luLnkgKyAyMCwgdGV4dCwgc3RybGVuKHRleHQpKTsKKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwb3AKKyAgICAKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShj
b250ZXh0KTsgICAgICAgIAorICAgIH0KKworICAgIFdBS1ZpZXcqIHZpZXcgPSBbbV93aW5kb3cg
Y29udGVudFZpZXddOworICAgIFt2aWV3IHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX2Rpc3Bh
dGNoVGlsZURpZERyYXc6KSB3aXRoT2JqZWN0OmxheWVyIGFmdGVyRGVsYXk6MC4wXTsKK30KKwor
dm9pZCBUaWxlQ2FjaGU6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgc2V0TmVlZHNEaXNwbGF5
SW5SZWN0KEludFJlY3QoMCwgMCwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2No
ZWR1bGVMYXllckZsdXNoRm9yUGVuZGluZ1JlcGFpbnQoKQoreworICAgIFdBS1ZpZXcqIHZpZXcg
PSBbbV93aW5kb3cgY29udGVudFZpZXddOworICAgIFt2aWV3IF9zY2hlZHVsZUxheWVyRmx1c2hG
b3JQZW5kaW5nVGlsZUNhY2hlUmVwYWludF07Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX3NhdmVkRGlzcGxheVJlY3RNdXRleCk7CisgICAgYm9vbCBhZGRlZEZpcnN0
UmVjdCA9IG1fc2F2ZWREaXNwbGF5UmVjdHMuaXNFbXB0eSgpOworICAgIG1fc2F2ZWREaXNwbGF5
UmVjdHMuYXBwZW5kKGRpcnR5UmVjdCk7CisgICAgaWYgKCFhZGRlZEZpcnN0UmVjdCkKKyAgICAg
ICAgcmV0dXJuOworICAgIC8vIENvbXBvc2l0aW5nIGxheWVyIGZsdXNoIHdpbGwgY2FsbCBiYWNr
IHRvIGRvUGVuZGluZ1JlcGFpbnRzKCkuIFRoZSBmbHVzaCBtYXkgYmUgdGhyb3R0bGVkIGFuZCBu
b3QgaGFwcGVuIGltbWVkaWF0ZWx5LgorICAgIHNjaGVkdWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdS
ZXBhaW50KCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjppbnZhbGlkYXRlVGlsZXMoY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KQoreworICAgIEFTU0VSVCghbV90aWxlTXV0ZXgudHJ5TG9jaygpKTsK
KworICAgIFRpbGVHcmlkKiBhY3RpdmVHcmlkID0gYWN0aXZlVGlsZUdyaWQoKTsKKyAgICBpZiAo
IWtlZXBzWm9vbWVkT3V0VGlsZXMoKSkgeworICAgICAgICBhY3RpdmVHcmlkLT5pbnZhbGlkYXRl
VGlsZXMoZGlydHlSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGbG9hdFJlY3Qg
c2NhbGVkUmVjdCA9IGRpcnR5UmVjdDsKKyAgICBzY2FsZWRSZWN0LnNjYWxlKHpvb21lZE91dFNj
YWxlKCkgLyBjdXJyZW50U2NhbGUoKSk7CisgICAgSW50UmVjdCB6b29tZWRPdXREaXJ0eVJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KHNjYWxlZFJlY3QpOworICAgIGlmIChhY3RpdmVHcmlkID09IG1f
em9vbWVkT3V0VGlsZUdyaWQpIHsKKyAgICAgICAgYm9vbCBkdW1teTsKKyAgICAgICAgSW50UmVj
dCBjb3ZlclJlY3QgPSBtX3pvb21lZE91dFRpbGVHcmlkLT5jYWxjdWxhdGVDb3ZlclJlY3QobV96
b29tZWRPdXRUaWxlR3JpZC0+dmlzaWJsZVJlY3QoKSwgZHVtbXkpOworICAgICAgICAvLyBJbnN0
ZWFkIG9mIHJlcGFpbnRpbmcgYSB0aWxlIG91dHNpZGUgdGhlIGNvdmVyIHJlY3QsIGp1c3QgcmVt
b3ZlIGl0LgorICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9wVGlsZXNCZXR3ZWVuUmVj
dHMoem9vbWVkT3V0RGlydHlSZWN0LCBjb3ZlclJlY3QpOworICAgICAgICBtX3pvb21lZE91dFRp
bGVHcmlkLT5pbnZhbGlkYXRlVGlsZXMoem9vbWVkT3V0RGlydHlSZWN0KTsKKyAgICAgICAgLy8g
V2UgbmVlZCB0byBpbnZhbGlkYXRlIHpvb21lZCBpbiB0aWxlcyBhcyB3ZWxsIHdoaWxlIHpvb21p
bmcsIHNpbmNlCisgICAgICAgIC8vIHdlIGNvdWxkIHN3aXRjaCBiYWNrIHRvIHRoZSB6b29tZWQg
aW4gZ3JpZCB3aXRob3V0IGRyb3BwaW5nIGl0cworICAgICAgICAvLyB0aWxlcy4gIFNlZSA8cmRh
cjovL3Byb2JsZW0vOTk0Njc1OT4uCisgICAgICAgIGlmIChtX3RpbGluZ01vZGUgPT0gWm9vbWlu
ZyAmJiBtX3pvb21lZEluVGlsZUdyaWQpCisgICAgICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQt
PmludmFsaWRhdGVUaWxlcyhkaXJ0eVJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmICghbV96b29tZWRJblRpbGVHcmlkLT5oYXNUaWxlcygpKSB7CisgICAgICAgIC8vIElmIG5v
IHRpbGVzIGhhdmUgYmVlbiBjcmVhdGVkIHlldCBmb3IgdGhlIHpvb21lZCBpbiBncmlkLCB3ZSBj
YW4ndCBkcm9wIHRoZSB6b29tZWQgb3V0IHRpbGVzLgorICAgICAgICBtX3pvb21lZE91dFRpbGVH
cmlkLT5pbnZhbGlkYXRlVGlsZXMoem9vbWVkT3V0RGlydHlSZWN0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9wVGlsZXNJbnRlcnNlY3RpbmdS
ZWN0KHpvb21lZE91dERpcnR5UmVjdCk7CisgICAgbV96b29tZWRJblRpbGVHcmlkLT5pbnZhbGlk
YXRlVGlsZXMoZGlydHlSZWN0KTsKK30KKyAgICAKK2Jvb2wgVGlsZUNhY2hlOjppc1RpbGVDcmVh
dGlvblN1c3BlbmRlZCgpIGNvbnN0IAoreworICAgIHJldHVybiAoIWtlZXBzWm9vbWVkT3V0VGls
ZXMoKSAmJiBtX3RpbGluZ01vZGUgPT0gWm9vbWluZykgfHwgbV90aWxpbmdNb2RlID09IERpc2Fi
bGVkOworfQorCitib29sIFRpbGVDYWNoZTo6aXNUaWxlSW52YWxpZGF0aW9uU3VzcGVuZGVkKCkg
Y29uc3QgCit7IAorICAgIHJldHVybiBtX3RpbGluZ01vZGUgPT0gWm9vbWluZyB8fCBtX3RpbGlu
Z01vZGUgPT0gUGFubmluZyB8fCBtX3RpbGluZ01vZGUgPT0gU2Nyb2xsVG9Ub3AgfHwgbV90aWxp
bmdNb2RlID09IERpc2FibGVkOyAKK30KKwordm9pZCBUaWxlQ2FjaGU6OnVwZGF0ZVRpbGluZ01v
ZGUoKQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSB8fCAhV2ViVGhyZWFkSXNF
bmFibGVkKCkpOworCisgICAgV0FLVmlldyogdmlldyA9IFttX3dpbmRvdyBjb250ZW50Vmlld107
CisKKyAgICBpZiAobV90aWxpbmdNb2RlID09IFpvb21pbmcgfHwgbV90aWxpbmdNb2RlID09IFBh
bm5pbmcgfHwgbV90aWxpbmdNb2RlID09IFNjcm9sbFRvVG9wKSB7CisgICAgICAgIGlmICghbV9k
aWRDYWxsV2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nKSB7CisgICAgICAgICAgICBbdmlldyBf
d2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nXTsKKyAgICAgICAgICAgIG1fZGlkQ2FsbFdpbGxT
dGFydFNjcm9sbGluZ09yWm9vbWluZyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAobV9kaWRDYWxsV2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nKSB7CisgICAg
ICAgICAgICBbdmlldyBfZGlkRmluaXNoU2Nyb2xsaW5nT3Jab29taW5nXTsKKyAgICAgICAgICAg
IG1fZGlkQ2FsbFdpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZyA9IGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmIChtX3RpbGluZ01vZGUgPT0gRGlzYWJsZWQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKKyAgICAgICAg
Y3JlYXRlVGlsZXNJbkFjdGl2ZUdyaWQoQ292ZXJWaXNpYmxlT25seSk7CisKKyAgICAgICAgaWYg
KCFtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50KCk7CisgICAgfQorfQorCit2b2lkIFRpbGVDYWNoZTo6
c2V0VGlsaW5nTW9kZShUaWxpbmdNb2RlIHRpbGluZ01vZGUpCit7CisgICAgaWYgKHRpbGluZ01v
ZGUgPT0gbV90aWxpbmdNb2RlKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCB3YXNab29taW5n
ID0gKG1fdGlsaW5nTW9kZSA9PSBab29taW5nKTsKKyAgICBtX3RpbGluZ01vZGUgPSB0aWxpbmdN
b2RlOworCisgICAgaWYgKChtX3BlbmRpbmdab29tZWRPdXRTY2FsZSB8fCBtX3BlbmRpbmdTY2Fs
ZSkgJiYgbV90aWxpbmdNb2RlICE9IERpc2FibGVkKQorICAgICAgICBjb21taXRTY2FsZUNoYW5n
ZSgpOworICAgIGVsc2UgaWYgKHdhc1pvb21pbmcpIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fdGlsZU11dGV4KTsKKyAgICAgICAgYnJpbmdBY3RpdmVUaWxlR3JpZFRvRnJvbnQoKTsK
KyAgICB9CisKKyAgICBpZiAobV9oYXNQZW5kaW5nVXBkYXRlVGlsaW5nTW9kZSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01vZGUgPSB0cnVlOworCisgICAg
VGlsZUNhY2hlVG9tYnN0b25lICp0b21ic3RvbmUgPSBtX3RvbWJzdG9uZS5nZXQoKTsKKyAgICBX
ZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKFt0b21ic3RvbmUgaXNEZWFkXSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV9oYXNQZW5kaW5nVXBkYXRlVGlsaW5nTW9kZSA9IGZhbHNl
OworICAgICAgICB1cGRhdGVUaWxpbmdNb2RlKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgVGlsZUNh
Y2hlOjpzZXRUaWxpbmdEaXJlY3Rpb24oVGlsaW5nRGlyZWN0aW9uIHRpbGluZ0RpcmVjdGlvbikK
K3sKKyAgICBtX3RpbGluZ0RpcmVjdGlvbiA9IHRpbGluZ0RpcmVjdGlvbjsKK30KKworVGlsZUNh
Y2hlOjpUaWxpbmdEaXJlY3Rpb24gVGlsZUNhY2hlOjp0aWxpbmdEaXJlY3Rpb24oKSBjb25zdAor
eworICAgIHJldHVybiBtX3RpbGluZ0RpcmVjdGlvbjsKK30KKyAgICAKK2Zsb2F0IFRpbGVDYWNo
ZTo6em9vbWVkT3V0U2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3pvb21lZE91dFRpbGVH
cmlkLT5zY2FsZSgpOworfQorCitmbG9hdCBUaWxlQ2FjaGU6OmN1cnJlbnRTY2FsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fY3VycmVudFNjYWxlOworfQorCit2b2lkIFRpbGVDYWNoZTo6ZG9Q
ZW5kaW5nUmVwYWludHMoKQoreworICAgIGlmIChtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc1RpbGVJbnZhbGlkYXRpb25TdXNwZW5kZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7
CisgICAgZmx1c2hTYXZlZERpc3BsYXlSZWN0cygpOworfQorCit2b2lkIFRpbGVDYWNoZTo6Zmx1
c2hTYXZlZERpc3BsYXlSZWN0cygpCit7CisgICAgQVNTRVJUKCFtX3RpbGVNdXRleC50cnlMb2Nr
KCkpOworICAgIEFTU0VSVCghbV9zYXZlZERpc3BsYXlSZWN0cy5pc0VtcHR5KCkpOworCisgICAg
VmVjdG9yPEludFJlY3Q+IHJlY3RzOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fc2F2ZWREaXNwbGF5UmVjdE11dGV4KTsKKyAgICAgICAgbV9zYXZlZERpc3BsYXlSZWN0cy5z
d2FwKHJlY3RzKTsKKyAgICB9CisgICAgc2l6ZV90IHNpemUgPSByZWN0cy5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgbiA9IDA7IG4gPCBzaXplOyArK24pCisgICAgICAgIGludmFsaWRhdGVUaWxl
cyhyZWN0c1tuXSk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRTcGVjdWxhdGl2ZVRpbGVDcmVh
dGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtX2lzU3BlY3VsYXRpdmVUaWxl
Q3JlYXRpb25FbmFibGVkID09IGVuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzU3Bl
Y3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkID0gZW5hYmxlZDsKKyAgICBpZiAobV9pc1NwZWN1
bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCkKKyAgICAgICAgbV90aWxlQ3JlYXRpb25UaW1lci5z
dGFydE9uZVNob3QoMCk7Cit9CisKK2Jvb2wgVGlsZUNhY2hlOjpoYXNQZW5kaW5nRHJhdygpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKTsKK30KKwor
dm9pZCBUaWxlQ2FjaGU6OnByZXBhcmVUb0RyYXcoKQoreworICAgIC8vIFRoaXMgd2lsbCB0cmln
Z2VyIGRvY3VtZW50IHJlbGF5b3V0IGlmIG5lZWRlZC4KKyAgICBbW21fd2luZG93IGNvbnRlbnRW
aWV3XSB2aWV3V2lsbERyYXddOworCisgICAgaWYgKCFtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1w
dHkoKSkgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAgICAg
ICBmbHVzaFNhdmVkRGlzcGxheVJlY3RzKCk7CisgICAgfQorfQorCit2b2lkIFRpbGVDYWNoZTo6
c2V0TGF5ZXJQb29sQ2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHkpCit7CisgICAgVGlsZUxheWVy
UG9vbDo6c2hhcmVkUG9vbCgpLT5zZXRDYXBhY2l0eShjYXBhY2l0eSk7Cit9CisKK3ZvaWQgVGls
ZUNhY2hlOjpkcmFpbkxheWVyUG9vbCgpCit7CisgICAgVGlsZUxheWVyUG9vbDo6c2hhcmVkUG9v
bCgpLT5kcmFpbigpOworfQorCit2b2lkIFRpbGVDYWNoZTo6ZHVtcFRpbGVzKCkKK3sKKyAgICBO
U0xvZyhAIj09PT09PT09PT09PT09PT09Iik7CisgICAgTlNMb2coQCJaT09NRUQgT1VUIik7Cisg
ICAgaWYgKG1fem9vbWVkT3V0VGlsZUdyaWQgPT0gYWN0aXZlVGlsZUdyaWQoKSkKKyAgICAgICAg
TlNMb2coQCI8QUNUSVZFPiIpOworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPmR1bXBUaWxlcygp
OworICAgIE5TTG9nKEAiPT09PT09PT09PT09PT09PT0iKTsKKyAgICBpZiAobV96b29tZWRJblRp
bGVHcmlkKSB7CisgICAgICAgIE5TTG9nKEAiWk9PTUVEIElOIik7CisgICAgICAgIGlmIChtX3pv
b21lZEluVGlsZUdyaWQgPT0gYWN0aXZlVGlsZUdyaWQoKSkKKyAgICAgICAgICAgIE5TTG9nKEAi
PEFDVElWRT4iKTsKKyAgICAgICAgbV96b29tZWRJblRpbGVHcmlkLT5kdW1wVGlsZXMoKTsKKyAg
ICAgICAgTlNMb2coQCI9PT09PT09PT09PT09PT09PSIpOworICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVGlsZUdyaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTk5MGZjY2RkNjk3MGZkOThhZjg1ZWVm
NDNjMDNjNWJhMzdiZWUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1RpbGVHcmlkLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFRpbGVHcmlkX2gKKyNkZWZpbmUgVGlsZUdyaWRfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisj
aW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRQb2ludEhhc2guaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRpbGVDYWNoZS5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
KyNkZWZpbmUgTE9HX1RJTElORyAwCisKK0BjbGFzcyBDQUxheWVyOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFRpbGVHcmlkVGlsZTsKKworY2xhc3MgVGlsZUdyaWQgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFRpbGVHcmlkKTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludFBv
aW50IFRpbGVJbmRleDsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPFRpbGVHcmlkPiBjcmVhdGUo
VGlsZUNhY2hlKiBjYWNoZSwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpIHsgcmV0dXJuIGFkb3B0
UHRyKG5ldyBUaWxlR3JpZChjYWNoZSwgdGlsZVNpemUpKTsgfQorCisgICAgflRpbGVHcmlkKCk7
CisKKyAgICBUaWxlQ2FjaGUqIHRpbGVDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZUNhY2hl
OyB9CisKKyAgICBDQUxheWVyICp0aWxlSG9zdExheWVyKCkgY29uc3Q7CisgICAgSW50UmVjdCBi
b3VuZHMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCB0aWxlQ291bnQoKSBjb25zdDsKKworICAgIGZs
b2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQorICAgIHZvaWQgc2V0U2NhbGUo
ZmxvYXQgc2NhbGUpIHsgbV9zY2FsZSA9IHNjYWxlOyB9CisKKyAgICBJbnRSZWN0IHZpc2libGVS
ZWN0KCkgY29uc3Q7CisKKyAgICB2b2lkIGNyZWF0ZVRpbGVzKFRpbGVDYWNoZTo6U3luY2hyb25v
dXNUaWxlQ3JlYXRpb25Nb2RlKTsKKworICAgIHZvaWQgZHJvcEFsbFRpbGVzKCk7CisgICAgdm9p
ZCBkcm9wSW52YWxpZFRpbGVzKCk7CisgICAgdm9pZCBkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25z
dCBJbnRSZWN0Jik7CisgICAgdm9pZCBkcm9wVGlsZXNJbnRlcnNlY3RpbmdSZWN0KGNvbnN0IElu
dFJlY3QmKTsKKyAgICAvLyBEcm9wcyB0aWxlcyB0aGF0IGludGVyc2VjdCBkcm9wUmVjdCBidXQg
ZG8gbm90IGludGVyc2VjdCBrZWVwUmVjdC4KKyAgICB2b2lkIGRyb3BUaWxlc0JldHdlZW5SZWN0
cyhjb25zdCBJbnRSZWN0JiBkcm9wUmVjdCwgY29uc3QgSW50UmVjdCYga2VlcFJlY3QpOworICAg
IGJvb2wgZHJvcERpc3RhbnRUaWxlcyh1bnNpZ25lZCB0aWxlc05lZWRlZCwgZG91YmxlIHNob3J0
ZXN0RGlzdGFuY2UpOworCisgICAgdm9pZCBhZGRUaWxlc0NvdmVyaW5nUmVjdChjb25zdCBJbnRS
ZWN0Jik7CisKKyAgICBib29sIHRpbGVzQ292ZXIoY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAg
IHZvaWQgY2VudGVyVGlsZUdyaWRPcmlnaW4oY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOwor
ICAgIHZvaWQgaW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisKKyAg
ICB2b2lkIHVwZGF0ZVRpbGVPcGFjaXR5KCk7CisgICAgdm9pZCB1cGRhdGVUaWxlQm9yZGVyVmlz
aWJpbGl0eSgpOworICAgIHZvaWQgdXBkYXRlSG9zdExheWVyU2l6ZSgpOworICAgIGJvb2wgY2hl
Y2tEb1NpbmdsZVRpbGVMYXlvdXQoKTsKKworICAgIGJvb2wgaGFzVGlsZXMoKSBjb25zdCB7IHJl
dHVybiAhbV90aWxlcy5pc0VtcHR5KCk7IH0KKworICAgIEludFJlY3QgY2FsY3VsYXRlQ292ZXJS
ZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBib29sJiBjZW50ZXJHcmlkKTsKKworICAg
IC8vIExvZ2dpbmcKKyAgICB2b2lkIGR1bXBUaWxlcygpOworCitwcml2YXRlOgorICAgIGRvdWJs
ZSB0aWxlRGlzdGFuY2UyKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0
JiB0aWxlUmVjdCkgY29uc3Q7CisgICAgdW5zaWduZWQgdGlsZUJ5dGVTaXplKCkgY29uc3Q7CisK
KyAgICB2b2lkIGFkZFRpbGVGb3JJbmRleChjb25zdCBUaWxlSW5kZXgmKTsKKworICAgIFBhc3NS
ZWZQdHI8VGlsZUdyaWRUaWxlPiB0aWxlRm9ySW5kZXgoY29uc3QgVGlsZUluZGV4JikgY29uc3Q7
CisgICAgSW50UmVjdCB0aWxlUmVjdEZvckluZGV4KGNvbnN0IFRpbGVJbmRleCYpIGNvbnN0Owor
ICAgIFBhc3NSZWZQdHI8VGlsZUdyaWRUaWxlPiB0aWxlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQm
KSBjb25zdDsKKyAgICBUaWxlSW5kZXggdGlsZUluZGV4Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQm
KSBjb25zdDsKKworICAgIEludFJlY3QgYWRqdXN0Q292ZXJSZWN0Rm9yUGFnZUJvdW5kcyhjb25z
dCBJbnRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBzaG91bGRVc2VNaW5pbWFsVGlsZUNvdmVyYWdl
KCkgY29uc3Q7CisKK3ByaXZhdGU6ICAgICAgICAKKyAgICBUaWxlR3JpZChUaWxlQ2FjaGUqLCBj
b25zdCBJbnRTaXplJik7CisKKyAgICBUaWxlQ2FjaGUqIG1fdGlsZUNhY2hlOworICAgIFJldGFp
blB0cjxDQUxheWVyPiBtX3RpbGVIb3N0TGF5ZXI7CisKKyAgICBJbnRQb2ludCBtX29yaWdpbjsK
KyAgICBJbnRTaXplIG1fdGlsZVNpemU7CisKKyAgICBmbG9hdCBtX3NjYWxlOworCisgICAgdHlw
ZWRlZiBIYXNoTWFwPFRpbGVJbmRleCwgUmVmUHRyPFRpbGVHcmlkVGlsZT4+IFRpbGVNYXA7Cisg
ICAgVGlsZU1hcCBtX3RpbGVzOworCisgICAgSW50UmVjdCBtX3ZhbGlkQm91bmRzOworfTsKKwor
c3RhdGljIGlubGluZSBJbnRQb2ludCB0b3BMZWZ0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgcmV0dXJuIHJlY3QubG9jYXRpb24oKTsKK30KKworc3RhdGljIGlubGluZSBJbnRQb2ludCBi
b3R0b21SaWdodChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBJbnRQb2ludChy
ZWN0Lm1heFgoKSAtIDEsIHJlY3QubWF4WSgpIC0gMSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKyNlbmRpZiAvLyBUaWxlR3JpZF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWQubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2QxNzAxMzIx
ZTljNzQwZTQzNzI5NWRhNGNlY2Q2MzAwZmZjZDRlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZC5tbQpAQCAtMCwwICsxLDU2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaWxlR3JpZC5oIgorCisj
aWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCisj
aW5jbHVkZSAiU3lzdGVtTWVtb3J5LmgiCisjaW5jbHVkZSAiVGlsZUdyaWRUaWxlLmgiCisjaW5j
bHVkZSAiVGlsZUxheWVyLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyUG9vbC5oIgorI2luY2x1ZGUg
IldBS1dpbmRvdy5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3NQcml2YXRl
Lmg+CisjaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW5jbHVkZSA8UXVhcnR6
Q29yZS9RdWFydHpDb3JlUHJpdmF0ZS5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRl
IDxmdW5jdGlvbmFsPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RpbGVHcmlkOjpUaWxlR3Jp
ZChUaWxlQ2FjaGUqIHRpbGVDYWNoZSwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpCisgICAgOiBt
X3RpbGVDYWNoZSh0aWxlQ2FjaGUpCisgICAgLCBtX3RpbGVIb3N0TGF5ZXIoYWRvcHROUyhbW1Rp
bGVIb3N0TGF5ZXIgYWxsb2NdIGluaXRXaXRoVGlsZUdyaWQ6dGhpc10pKQorICAgICwgbV90aWxl
U2l6ZSh0aWxlU2l6ZSkKKyAgICAsIG1fc2NhbGUoMSkKKyAgICAsIG1fdmFsaWRCb3VuZHMoMCwg
MCwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSkgCit7Cit9CisgICAgCitUaWxlR3JpZDo6flRpbGVHcmlkKCkKK3sKKyAgICBb
bV90aWxlSG9zdExheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKK30KKworSW50UmVjdCBUaWxl
R3JpZDo6dmlzaWJsZVJlY3QoKSBjb25zdAoreworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KG1fdGlsZUNhY2hlLT52aXNpYmxlUmVjdEluTGF5ZXIobV90aWxlSG9z
dExheWVyLmdldCgpKSk7CisKKyAgICAvLyBXaGVuIGZhc3Qgc2Nyb2xsaW5nIHRvIHRoZSB0b3As
IG1vdmUgdGhlIHZpc2libGUgcmVjdCB0aGVyZSBpbW1lZGlhdGVseSBzbyB3ZSBoYXZlIHRpbGVz
IHdoZW4gdGhlIHNjcm9sbGluZyBjb21wbGV0ZXMuCisgICAgaWYgKG1fdGlsZUNhY2hlLT50aWxp
bmdNb2RlKCkgPT0gVGlsZUNhY2hlOjpTY3JvbGxUb1RvcCkKKyAgICAgICAgdmlzaWJsZVJlY3Qu
c2V0WSgwKTsKKworICAgIHJldHVybiB2aXNpYmxlUmVjdDsKK30KKwordm9pZCBUaWxlR3JpZDo6
ZHJvcEFsbFRpbGVzKCkKK3sKKyAgICBtX3RpbGVzLmNsZWFyKCk7Cit9CisKK3ZvaWQgVGlsZUdy
aWQ6OmRyb3BUaWxlc0ludGVyc2VjdGluZ1JlY3QoY29uc3QgSW50UmVjdCYgZHJvcFJlY3QpCit7
CisgICAgZHJvcFRpbGVzQmV0d2VlblJlY3RzKGRyb3BSZWN0LCBJbnRSZWN0KCkpOworfQorCit2
b2lkIFRpbGVHcmlkOjpkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25zdCBJbnRSZWN0JiBrZWVwUmVj
dCkKK3sKKyAgICBkcm9wVGlsZXNCZXR3ZWVuUmVjdHMoSW50UmVjdCgwLCAwLCBzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSwg
a2VlcFJlY3QpOworfQorCit2b2lkIFRpbGVHcmlkOjpkcm9wVGlsZXNCZXR3ZWVuUmVjdHMoY29u
c3QgSW50UmVjdCYgZHJvcFJlY3QsIGNvbnN0IEludFJlY3QmIGtlZXBSZWN0KQoreworICAgIFZl
Y3RvcjxUaWxlSW5kZXg+IHRvUmVtb3ZlOworICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
dGlsZXMuZW5kKCk7CisgICAgZm9yIChhdXRvIHRpbGUgOiBtX3RpbGVzKSB7CisgICAgICAgIFRp
bGVJbmRleCYgaW5kZXggPSB0aWxlLmtleTsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRp
bGUudmFsdWUtPnJlY3QoKTsKKyAgICAgICAgaWYgKHRpbGVSZWN0LmludGVyc2VjdHMoZHJvcFJl
Y3QpICYmICF0aWxlUmVjdC5pbnRlcnNlY3RzKGtlZXBSZWN0KSkKKyAgICAgICAgICAgIHRvUmVt
b3ZlLmFwcGVuZChpbmRleCk7CisgICAgfQorICAgIHVuc2lnbmVkIHJlbW92ZUNvdW50ID0gdG9S
ZW1vdmUuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCByZW1vdmVDb3VudDsg
KytuKQorICAgICAgICBtX3RpbGVzLnJlbW92ZSh0b1JlbW92ZVtuXSk7Cit9CisKK3Vuc2lnbmVk
IFRpbGVHcmlkOjp0aWxlQnl0ZVNpemUoKSBjb25zdAoreworICAgIEludFNpemUgdGlsZVBpeGVs
U2l6ZSA9IG1fdGlsZVNpemU7CisgICAgdGlsZVBpeGVsU2l6ZS5zY2FsZShtX3RpbGVDYWNoZS0+
c2NyZWVuU2NhbGUoKSk7CisgICAgcmV0dXJuIFRpbGVMYXllclBvb2w6OmJ5dGVzQmFja2luZ0xh
eWVyV2l0aFBpeGVsU2l6ZSh0aWxlUGl4ZWxTaXplKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitzdGF0aWMgYm9vbCBpc0ZhcnRoZXJBd2F5KGNvbnN0IHBhaXI8ZG91YmxlLCBUPiYgYSwg
Y29uc3QgcGFpcjxkb3VibGUsIFQ+JiBiKQoreworICAgIHJldHVybiBhLmZpcnN0ID4gYi5maXJz
dDsKK30KKworYm9vbCBUaWxlR3JpZDo6ZHJvcERpc3RhbnRUaWxlcyh1bnNpZ25lZCB0aWxlc05l
ZWRlZCwgZG91YmxlIHNob3J0ZXN0RGlzdGFuY2UpCit7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJU
aWxlID0gdGlsZUJ5dGVTaXplKCk7CisgICAgdW5zaWduZWQgYnl0ZXNOZWVkZWQgPSB0aWxlc05l
ZWRlZCAqIGJ5dGVzUGVyVGlsZTsKKyAgICB1bnNpZ25lZCBieXRlc1VzZWQgPSB0aWxlQ291bnQo
KSAqIGJ5dGVzUGVyVGlsZTsKKyAgICB1bnNpZ25lZCBtYXhpbXVtQnl0ZXMgPSBtX3RpbGVDYWNo
ZS0+dGlsZUNhcGFjaXR5Rm9yR3JpZCh0aGlzKTsKKworICAgIGludCBieXRlc1RvUmVjbGFpbSA9
IGludChieXRlc1VzZWQpIC0gKGludChtYXhpbXVtQnl0ZXMpIC0gYnl0ZXNOZWVkZWQpOworICAg
IGlmIChieXRlc1RvUmVjbGFpbSA8PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHVu
c2lnbmVkIHRpbGVzVG9SZW1vdmVDb3VudCA9IGJ5dGVzVG9SZWNsYWltIC8gYnl0ZXNQZXJUaWxl
OworCisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHRoaXMtPnZpc2libGVSZWN0KCk7CisgICAg
VmVjdG9yPHBhaXI8ZG91YmxlLCBUaWxlSW5kZXg+PiB0b1JlbW92ZTsKKyAgICBmb3IgKGF1dG8g
dGlsZSA6IG1fdGlsZXMpIHsKKyAgICAgICAgVGlsZUluZGV4JiBpbmRleCA9IHRpbGUua2V5Owor
ICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gdGlsZS52YWx1ZS0+cmVjdCgpOworICAgICAgICBk
b3VibGUgZGlzdGFuY2UgPSB0aWxlRGlzdGFuY2UyKHZpc2libGVSZWN0LCB0aWxlUmVjdCk7Cisg
ICAgICAgIGlmIChkaXN0YW5jZSA8PSBzaG9ydGVzdERpc3RhbmNlKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihkaXN0YW5jZSwg
aW5kZXgpKTsKKyAgICAgICAgc3RkOjpwdXNoX2hlYXAodG9SZW1vdmUuYmVnaW4oKSwgdG9SZW1v
dmUuZW5kKCksIHN0ZDo6cHRyX2Z1bihpc0ZhcnRoZXJBd2F5PFRpbGVJbmRleD4pKTsKKyAgICAg
ICAgaWYgKHRvUmVtb3ZlLnNpemUoKSA+IHRpbGVzVG9SZW1vdmVDb3VudCkgeworICAgICAgICAg
ICAgc3RkOjpwb3BfaGVhcCh0b1JlbW92ZS5iZWdpbigpLCB0b1JlbW92ZS5lbmQoKSwgc3RkOjpw
dHJfZnVuKGlzRmFydGhlckF3YXk8VGlsZUluZGV4PikpOworICAgICAgICAgICAgdG9SZW1vdmUu
cmVtb3ZlTGFzdCgpOworICAgICAgICB9CisgICAgfQorICAgIHNpemVfdCByZW1vdmVDb3VudCA9
IHRvUmVtb3ZlLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBuID0gMDsgbiA8IHJlbW92ZUNvdW50
OyArK24pCisgICAgICAgIG1fdGlsZXMucmVtb3ZlKHRvUmVtb3ZlW25dLnNlY29uZCk7CisKKyAg
ICBpZiAoIXNob3J0ZXN0RGlzdGFuY2UpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0
dXJuIHRpbGVDb3VudCgpICogYnl0ZXNQZXJUaWxlICsgYnl0ZXNOZWVkZWQgPD0gbWF4aW11bUJ5
dGVzOworfQorCit2b2lkIFRpbGVHcmlkOjphZGRUaWxlc0NvdmVyaW5nUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0VG9Db3ZlcikKK3sKKyAgICAvLyBXZSBuZXZlciBkcmF3IGFueXRoaW5nIG91dHNp
ZGUgb2Ygb3VyIGJvdW5kcy4KKyAgICBJbnRSZWN0IHJlY3QocmVjdFRvQ292ZXIpOworICAgIHJl
Y3QuaW50ZXJzZWN0KGJvdW5kcygpKTsKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFRpbGVJbmRleCB0b3BMZWZ0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2lu
dCh0b3BMZWZ0KHJlY3QpKTsKKyAgICBUaWxlSW5kZXggYm90dG9tUmlnaHRJbmRleCA9IHRpbGVJ
bmRleEZvclBvaW50KGJvdHRvbVJpZ2h0KHJlY3QpKTsKKyAgICBmb3IgKGludCB5SW5kZXggPSB0
b3BMZWZ0SW5kZXgueSgpOyB5SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC55KCk7ICsreUluZGV4
KSB7CisgICAgICAgIGZvciAoaW50IHhJbmRleCA9IHRvcExlZnRJbmRleC54KCk7IHhJbmRleCA8
PSBib3R0b21SaWdodEluZGV4LngoKTsgKyt4SW5kZXgpIHsKKyAgICAgICAgICAgIFRpbGVJbmRl
eCBpbmRleCh4SW5kZXgsIHlJbmRleCk7CisgICAgICAgICAgICBpZiAoIXRpbGVGb3JJbmRleChp
bmRleCkpCisgICAgICAgICAgICAgICAgYWRkVGlsZUZvckluZGV4KGluZGV4KTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBUaWxlR3JpZDo6YWRkVGlsZUZvckluZGV4KGNvbnN0IFRpbGVJ
bmRleCYgaW5kZXgpCit7CisgICAgbV90aWxlcy5zZXQoaW5kZXgsIFRpbGVHcmlkVGlsZTo6Y3Jl
YXRlKHRoaXMsIHRpbGVSZWN0Rm9ySW5kZXgoaW5kZXgpKSk7Cit9CisKK0NBTGF5ZXIqIFRpbGVH
cmlkOjp0aWxlSG9zdExheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlSG9zdExheWVy
LmdldCgpOworfQorCitJbnRSZWN0IFRpbGVHcmlkOjpib3VuZHMoKSBjb25zdAoreworICAgIHJl
dHVybiBJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoW3RpbGVIb3N0TGF5ZXIoKSBzaXplXSkp
OworfQorCitQYXNzUmVmUHRyPFRpbGVHcmlkVGlsZT4gVGlsZUdyaWQ6OnRpbGVGb3JJbmRleChj
b25zdCBUaWxlSW5kZXgmIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBtX3RpbGVzLmdldChp
bmRleCk7Cit9CisKK0ludFJlY3QgVGlsZUdyaWQ6OnRpbGVSZWN0Rm9ySW5kZXgoY29uc3QgVGls
ZUluZGV4JiBpbmRleCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QoaW5kZXgueCgpICogbV90
aWxlU2l6ZS53aWR0aCgpIC0gKG1fb3JpZ2luLngoKSA/IG1fdGlsZVNpemUud2lkdGgoKSAtIG1f
b3JpZ2luLngoKSA6IDApLAorICAgICAgICAgICAgICAgICBpbmRleC55KCkgKiBtX3RpbGVTaXpl
LmhlaWdodCgpIC0gKG1fb3JpZ2luLnkoKSA/IG1fdGlsZVNpemUuaGVpZ2h0KCkgLSBtX29yaWdp
bi55KCkgOiAwKSwKKyAgICAgICAgICAgICAgICAgbV90aWxlU2l6ZS53aWR0aCgpLAorICAgICAg
ICAgICAgICAgICBtX3RpbGVTaXplLmhlaWdodCgpKTsKKyAgICByZWN0LmludGVyc2VjdChib3Vu
ZHMoKSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK1RpbGVHcmlkOjpUaWxlSW5kZXggVGlsZUdy
aWQ6OnRpbGVJbmRleEZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9vcmlnaW4ueCgpIDwgbV90aWxlU2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlQo
bV9vcmlnaW4ueSgpIDwgbV90aWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgaW50IHggPSAocG9pbnQu
eCgpICsgKG1fb3JpZ2luLngoKSA/IG1fdGlsZVNpemUud2lkdGgoKSAtIG1fb3JpZ2luLngoKSA6
IDApKSAvIG1fdGlsZVNpemUud2lkdGgoKTsKKyAgICBpbnQgeSA9IChwb2ludC55KCkgKyAobV9v
cmlnaW4ueSgpID8gbV90aWxlU2l6ZS5oZWlnaHQoKSAtIG1fb3JpZ2luLnkoKSA6IDApKSAvIG1f
dGlsZVNpemUuaGVpZ2h0KCk7CisgICAgcmV0dXJuIFRpbGVJbmRleChzdGQ6Om1heCh4LCAwKSwg
c3RkOjptYXgoeSwgMCkpOworfQorCit2b2lkIFRpbGVHcmlkOjpjZW50ZXJUaWxlR3JpZE9yaWdp
bihjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCkKK3sKKyAgICBpZiAodmlzaWJsZVJlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBtaW5pbXVtSG9yaXpvbnRh
bFRpbGVzID0gMSArICh2aXNpYmxlUmVjdC53aWR0aCgpIC0gMSkgLyBtX3RpbGVTaXplLndpZHRo
KCk7CisgICAgdW5zaWduZWQgbWluaW11bVZlcnRpY2FsVGlsZXMgPSAxICsgKHZpc2libGVSZWN0
LmhlaWdodCgpIC0gMSkgLyBtX3RpbGVTaXplLmhlaWdodCgpOworICAgIFRpbGVJbmRleCBjdXJy
ZW50VG9wTGVmdEluZGV4ID0gdGlsZUluZGV4Rm9yUG9pbnQodG9wTGVmdCh2aXNpYmxlUmVjdCkp
OworICAgIFRpbGVJbmRleCBjdXJyZW50Qm90dG9tUmlnaHRJbmRleCA9IHRpbGVJbmRleEZvclBv
aW50KGJvdHRvbVJpZ2h0KHZpc2libGVSZWN0KSk7CisgICAgdW5zaWduZWQgY3VycmVudEhvcml6
b250YWxUaWxlcyA9IGN1cnJlbnRCb3R0b21SaWdodEluZGV4LngoKSAtIGN1cnJlbnRUb3BMZWZ0
SW5kZXgueCgpICsgMTsKKyAgICB1bnNpZ25lZCBjdXJyZW50VmVydGljYWxUaWxlcyA9IGN1cnJl
bnRCb3R0b21SaWdodEluZGV4LnkoKSAtIGN1cnJlbnRUb3BMZWZ0SW5kZXgueSgpICsgMTsKKwor
ICAgIC8vIElmIHdlIGhhdmUgdGlsZXMgYWxyZWFkeSwgb25seSBjZW50ZXIgaWYgd2Ugd291bGQg
Z2V0IGJlbmVmaXRzIGZyb20gYm90aCBkaXJlY3Rpb25zIChhcyB3ZSBuZWVkIHRvIHRocm93IG91
dCBleGlzdGluZyB0aWxlcykuCisgICAgaWYgKHRpbGVDb3VudCgpICYmIChjdXJyZW50SG9yaXpv
bnRhbFRpbGVzID09IG1pbmltdW1Ib3Jpem9udGFsVGlsZXMgfHwgY3VycmVudFZlcnRpY2FsVGls
ZXMgPT0gbWluaW11bVZlcnRpY2FsVGlsZXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQ
b2ludCBuZXdPcmlnaW4oMCwgMCk7CisgICAgSW50U2l6ZSBzaXplID0gYm91bmRzKCkuc2l6ZSgp
OworICAgIGlmIChzaXplLndpZHRoKCkgPiBtX3RpbGVTaXplLndpZHRoKCkpIHsKKyAgICAgICAg
bmV3T3JpZ2luLnNldFgoKHZpc2libGVSZWN0LngoKSAtIChtaW5pbXVtSG9yaXpvbnRhbFRpbGVz
ICogbV90aWxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVJlY3Qud2lkdGgoKSkgLyAyKSAlIG1fdGls
ZVNpemUud2lkdGgoKSk7CisgICAgICAgIGlmIChuZXdPcmlnaW4ueCgpIDwgMCkKKyAgICAgICAg
ICAgIG5ld09yaWdpbi5zZXRYKDApOworICAgIH0KKyAgICBpZiAoc2l6ZS5oZWlnaHQoKSA+IG1f
dGlsZVNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgbmV3T3JpZ2luLnNldFkoKHZpc2libGVSZWN0
LnkoKSAtIChtaW5pbXVtVmVydGljYWxUaWxlcyAqIG1fdGlsZVNpemUuaGVpZ2h0KCkgLSB2aXNp
YmxlUmVjdC5oZWlnaHQoKSkgLyAyKSAlIG1fdGlsZVNpemUuaGVpZ2h0KCkpOworICAgICAgICBp
ZiAobmV3T3JpZ2luLnkoKSA8IDApCisgICAgICAgICAgICBuZXdPcmlnaW4uc2V0WSgwKTsKKyAg
ICB9CisKKyAgICAvLyBEcm9wIGFsbCBleGlzdGluZyB0aWxlcyBpZiB0aGUgb3JpZ2luIG1vdmVk
LgorICAgIGlmIChuZXdPcmlnaW4gPT0gbV9vcmlnaW4pCisgICAgICAgIHJldHVybjsKKyAgICBt
X3RpbGVzLmNsZWFyKCk7CisgICAgbV9vcmlnaW4gPSBuZXdPcmlnaW47Cit9CisKK1Bhc3NSZWZQ
dHI8VGlsZUdyaWRUaWxlPiBUaWxlR3JpZDo6dGlsZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBw
b2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGlsZUZvckluZGV4KHRpbGVJbmRleEZvclBvaW50
KHBvaW50KSk7Cit9CisKK2Jvb2wgVGlsZUdyaWQ6OnRpbGVzQ292ZXIoY29uc3QgSW50UmVjdCYg
cmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGlsZUZvclBvaW50KHJlY3QubG9jYXRpb24oKSkg
JiYgdGlsZUZvclBvaW50KEludFBvaW50KHJlY3QubWF4WCgpIC0gMSwgcmVjdC55KCkpKSAmJgor
ICAgIHRpbGVGb3JQb2ludChJbnRQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkgLSAxKSkgJiYg
dGlsZUZvclBvaW50KEludFBvaW50KHJlY3QubWF4WCgpIC0gMSwgcmVjdC5tYXhZKCkgLSAxKSk7
Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OnVwZGF0ZVRpbGVPcGFjaXR5KCkKK3sKKyAgICBUaWxlTWFw
OjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOworICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgW2l0LT52
YWx1ZS0+dGlsZUxheWVyKCkgc2V0T3BhcXVlOm1fdGlsZUNhY2hlLT50aWxlc09wYXF1ZSgpXTsK
K30KKwordm9pZCBUaWxlR3JpZDo6dXBkYXRlVGlsZUJvcmRlclZpc2liaWxpdHkoKQoreworICAg
IFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChUaWxlTWFw
OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICBpdC0+dmFsdWUtPnNob3dCb3JkZXIobV90aWxlQ2FjaGUtPnRpbGVCb3JkZXJzVmlzaWJsZSgp
KTsKK30KKwordW5zaWduZWQgVGlsZUdyaWQ6OnRpbGVDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdGlsZXMuc2l6ZSgpOworfQorCitib29sIFRpbGVHcmlkOjpjaGVja0RvU2luZ2xlVGls
ZUxheW91dCgpCit7CisgICAgSW50U2l6ZSBzaXplID0gYm91bmRzKCkuc2l6ZSgpOworICAgIGlm
IChzaXplLndpZHRoKCkgPiBtX3RpbGVTaXplLndpZHRoKCkgfHwgc2l6ZS5oZWlnaHQoKSA+IG1f
dGlsZVNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29y
aWdpbiAhPSBJbnRQb2ludCgwLCAwKSkgeworICAgICAgICBtX3RpbGVzLmNsZWFyKCk7CisgICAg
ICAgIG1fb3JpZ2luID0gSW50UG9pbnQoMCwgMCk7CisgICAgfQorCisgICAgZHJvcEludmFsaWRU
aWxlcygpOworCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVCghbV90
aWxlcy5nZXQoVGlsZUluZGV4KDAsIDApKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIFRpbGVJbmRleCBvcmlnaW5JbmRleCgwLCAwKTsKKyAgICBpZiAoIW1fdGlsZXMuZ2V0
KG9yaWdpbkluZGV4KSkKKyAgICAgICAgbV90aWxlcy5zZXQob3JpZ2luSW5kZXgsIFRpbGVHcmlk
VGlsZTo6Y3JlYXRlKHRoaXMsIHRpbGVSZWN0Rm9ySW5kZXgob3JpZ2luSW5kZXgpKSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUaWxlR3JpZDo6dXBkYXRlSG9zdExheWVyU2l6ZSgp
Cit7CisgICAgQ0FMYXllciogaG9zdExheWVyID0gbV90aWxlQ2FjaGUtPmhvc3RMYXllcigpOwor
ICAgIENHUmVjdCB0aWxlSG9zdEJvdW5kcyA9IFtob3N0TGF5ZXIgY29udmVydFJlY3Q6W2hvc3RM
YXllciBib3VuZHNdIHRvTGF5ZXI6dGlsZUhvc3RMYXllcigpXTsKKyAgICBDR1NpemUgdHJhbnNm
b3JtZWRTaXplOworICAgIHRyYW5zZm9ybWVkU2l6ZS53aWR0aCA9IENHUm91bmQodGlsZUhvc3RC
b3VuZHMuc2l6ZS53aWR0aCk7CisgICAgdHJhbnNmb3JtZWRTaXplLmhlaWdodCA9IENHUm91bmQo
dGlsZUhvc3RCb3VuZHMuc2l6ZS5oZWlnaHQpOworCisgICAgQ0dSZWN0IGJvdW5kcyA9IFt0aWxl
SG9zdExheWVyKCkgYm91bmRzXTsKKyAgICBpZiAoQ0dTaXplRXF1YWxUb1NpemUoYm91bmRzLnNp
emUsIHRyYW5zZm9ybWVkU2l6ZSkpCisgICAgICAgIHJldHVybjsKKyAgICBib3VuZHMuc2l6ZSA9
IHRyYW5zZm9ybWVkU2l6ZTsKKyAgICBbdGlsZUhvc3RMYXllcigpIHNldEJvdW5kczpib3VuZHNd
OworfQorCit2b2lkIFRpbGVHcmlkOjpkcm9wSW52YWxpZFRpbGVzKCkKK3sKKyAgICBJbnRSZWN0
IGJvdW5kcyA9IHRoaXMtPmJvdW5kcygpOworICAgIEludFJlY3QgZHJvcEJvdW5kcyA9IGludGVy
c2VjdGlvbihtX3ZhbGlkQm91bmRzLCBib3VuZHMpOworICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRv
UmVtb3ZlOworICAgIGZvciAoYXV0byB0aWxlIDogbV90aWxlcykgeworICAgICAgICBUaWxlSW5k
ZXgmIGluZGV4ID0gdGlsZS5rZXk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB0aWxlLnZh
bHVlLT5yZWN0KCk7CisgICAgICAgIEludFJlY3QgZXhwZWN0ZWRUaWxlUmVjdCA9IHRpbGVSZWN0
Rm9ySW5kZXgoaW5kZXgpOworICAgICAgICBpZiAoZXhwZWN0ZWRUaWxlUmVjdCAhPSB0aWxlUmVj
dCB8fCAhZHJvcEJvdW5kcy5jb250YWlucyh0aWxlUmVjdCkpCisgICAgICAgICAgICB0b1JlbW92
ZS5hcHBlbmQoaW5kZXgpOworICAgIH0KKyAgICB1bnNpZ25lZCByZW1vdmVDb3VudCA9IHRvUmVt
b3ZlLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcmVtb3ZlQ291bnQ7ICsr
bikKKyAgICAgICAgbV90aWxlcy5yZW1vdmUodG9SZW1vdmVbbl0pOworCisgICAgbV92YWxpZEJv
dW5kcyA9IGJvdW5kczsKK30KKwordm9pZCBUaWxlR3JpZDo6aW52YWxpZGF0ZVRpbGVzKGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBpZiAoIWhhc1RpbGVzKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEludFJlY3QgYm91bmRzID0gdGhpcy0+Ym91bmRzKCk7CisgICAgaWYgKGlu
dGVyc2VjdGlvbihib3VuZHMsIG1fdmFsaWRCb3VuZHMpICE9IG1fdmFsaWRCb3VuZHMpIHsKKyAg
ICAgICAgLy8gVGhlIGJvdW5kcyBoYXZlIGdvdCBzbWFsbGVyLiBFdmVyeXRoaW5nIG91dHNpZGUg
d2lsbCBhbHNvIGJlIGNvbnNpZGVyZWQgaW52YWxpZCBhbmQgd2lsbCBiZSBkcm9wcGVkIGJ5IGRy
b3BJbnZhbGlkVGlsZXMoKS4KKyAgICAgICAgLy8gRHVlIHRvIGRpcnR5UmVjdCBiZWluZyBsaW1p
dGVkIHRvIGN1cnJlbnQgYm91bmRzIHRoZSB0aWxlcyB0aGF0IGFyZSB0ZW1wb3JhcmlseSBvdXRz
aWRlIG1pZ2h0IG1pc3MgaW52YWxpZGF0aW9uIAorICAgICAgICAvLyBjb21wbGV0ZWx5IG90aHdl
cndpc2UuCisgICAgICAgIG1fdmFsaWRCb3VuZHMgPSBib3VuZHM7CisgICAgfQorCisgICAgVmVj
dG9yPFRpbGVJbmRleD4gaW52YWxpZGF0ZWRUaWxlczsKKworICAgIGlmIChkaXJ0eVJlY3Qud2lk
dGgoKSA+IG1fdGlsZVNpemUud2lkdGgoKSAqIDQgfHwgZGlydHlSZWN0LmhlaWdodCgpID4gbV90
aWxlU2l6ZS5oZWlnaHQoKSAqIDQpIHsKKyAgICAgICAgLy8gRm9yIGxhcmdlIGludmFsaWRhdGVz
LCBpdGVyYXRlIG92ZXIgbGl2ZSB0aWxlcy4KKyAgICAgICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5k
ID0gbV90aWxlcy5lbmQoKTsKKyAgICAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBUaWxlR3JpZFRp
bGUqIHRpbGUgPSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXRpbGUtPnJlY3Qo
KS5pbnRlcnNlY3RzKGRpcnR5UmVjdCkpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIHRpbGUtPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CisgICAgICAgICAgICBpbnZh
bGlkYXRlZFRpbGVzLmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIFRpbGVJbmRleCB0b3BMZWZ0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludCh0b3BMZWZ0
KGRpcnR5UmVjdCkpOworICAgICAgICBUaWxlSW5kZXggYm90dG9tUmlnaHRJbmRleCA9IHRpbGVJ
bmRleEZvclBvaW50KGJvdHRvbVJpZ2h0KGRpcnR5UmVjdCkpOworICAgICAgICBmb3IgKGludCB5
SW5kZXggPSB0b3BMZWZ0SW5kZXgueSgpOyB5SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC55KCk7
ICsreUluZGV4KSB7CisgICAgICAgICAgICBmb3IgKGludCB4SW5kZXggPSB0b3BMZWZ0SW5kZXgu
eCgpOyB4SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC54KCk7ICsreEluZGV4KSB7CisgICAgICAg
ICAgICAgICAgVGlsZUluZGV4IGluZGV4KHhJbmRleCwgeUluZGV4KTsKKyAgICAgICAgICAgICAg
ICBSZWZQdHI8VGlsZUdyaWRUaWxlPiB0aWxlID0gdGlsZUZvckluZGV4KGluZGV4KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXRpbGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIGlmICghdGlsZS0+cmVjdCgpLmludGVyc2VjdHMoZGlydHlSZWN0KSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdGlsZS0+aW52YWxp
ZGF0ZVJlY3QoZGlydHlSZWN0KTsKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlZFRpbGVzLmFw
cGVuZChpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGlu
dmFsaWRhdGVkVGlsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgLy8gV2hlbiB1
c2luZyBtaW5pbWFsIGNvdmVyYWdlLCBkcm9wIHNwZWN1bGF0aXZlIHRpbGVzIGluc3RlYWQgb2Yg
dXBkYXRpbmcgdGhlbS4KKyAgICBpZiAoIXNob3VsZFVzZU1pbmltYWxUaWxlQ292ZXJhZ2UoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3RpbGVDYWNoZS0+dGlsaW5nTW9kZSgpICE9IFRp
bGVDYWNoZTo6TWluaW1hbCAmJiBtX3RpbGVDYWNoZS0+dGlsaW5nTW9kZSgpICE9IFRpbGVDYWNo
ZTo6Tm9ybWFsKQorICAgICAgICByZXR1cm47CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHRo
aXMtPnZpc2libGVSZWN0KCk7CisgICAgdW5zaWduZWQgY291bnQgPSBpbnZhbGlkYXRlZFRpbGVz
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAg
ICAgICBSZWZQdHI8VGlsZUdyaWRUaWxlPiB0aWxlID0gdGlsZUZvckluZGV4KGludmFsaWRhdGVk
VGlsZXNbaV0pOworICAgICAgICBpZiAoIXRpbGUtPnJlY3QoKS5pbnRlcnNlY3RzKHZpc2libGVS
ZWN0KSkKKyAgICAgICAgICAgIG1fdGlsZXMucmVtb3ZlKGludmFsaWRhdGVkVGlsZXNbaV0pOwor
ICAgIH0KK30KKworYm9vbCBUaWxlR3JpZDo6c2hvdWxkVXNlTWluaW1hbFRpbGVDb3ZlcmFnZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZUNhY2hlLT50aWxpbmdNb2RlKCkgPT0gVGlsZUNh
Y2hlOjpNaW5pbWFsCisgICAgICAgIHx8ICFtX3RpbGVDYWNoZS0+aXNTcGVjdWxhdGl2ZVRpbGVD
cmVhdGlvbkVuYWJsZWQoKQorICAgICAgICB8fCBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5oYXNS
ZWNlaXZlZE1lbW9yeVByZXNzdXJlKCk7Cit9CisKK0ludFJlY3QgVGlsZUdyaWQ6OmFkanVzdENv
dmVyUmVjdEZvclBhZ2VCb3VuZHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICAv
LyBBZGp1c3QgdGhlIHJlY3Qgc28gdGhhdCBpdCBzdGF5cyB3aXRoaW4gdGhlIGJvdW5kcyBhbmQg
a2VlcHMgdGhlIHBpeGVsIHNpemUuCisgICAgSW50UmVjdCBib3VuZHMgPSB0aGlzLT5ib3VuZHMo
KTsKKyAgICBJbnRSZWN0IGFkanVzdGVkUmVjdCA9IHJlY3Q7CisgICAgYWRqdXN0ZWRSZWN0Lm1v
dmUocmVjdC54KCkgPCBib3VuZHMueCgpID8gYm91bmRzLngoKSAtIHJlY3QueCgpIDogMCwKKyAg
ICAgICAgICAgICAgcmVjdC55KCkgPCBib3VuZHMueSgpID8gYm91bmRzLnkoKSAtIHJlY3QueSgp
IDogMCk7CisgICAgYWRqdXN0ZWRSZWN0Lm1vdmUocmVjdC5tYXhYKCkgPiBib3VuZHMubWF4WCgp
ID8gYm91bmRzLm1heFgoKSAtIHJlY3QubWF4WCgpIDogMCwKKyAgICAgICAgICAgICAgcmVjdC5t
YXhZKCkgPiBib3VuZHMubWF4WSgpID8gYm91bmRzLm1heFkoKSAtIHJlY3QubWF4WSgpIDogMCk7
CisgICAgYWRqdXN0ZWRSZWN0ID0gaW50ZXJzZWN0aW9uKGJvdW5kcywgYWRqdXN0ZWRSZWN0KTsK
KyAgICBpZiAoYWRqdXN0ZWRSZWN0ID09IHJlY3QgfHwgYWRqdXN0ZWRSZWN0LmlzRW1wdHkoKSB8
fCBzaG91bGRVc2VNaW5pbWFsVGlsZUNvdmVyYWdlKCkpCisgICAgICAgIHJldHVybiBhZGp1c3Rl
ZFJlY3Q7CisgICAgaW50IHBpeGVscyA9IGFkanVzdGVkUmVjdC53aWR0aCgpICogYWRqdXN0ZWRS
ZWN0LmhlaWdodCgpOworICAgIGlmIChhZGp1c3RlZFJlY3Qud2lkdGgoKSAhPSByZWN0LndpZHRo
KCkpCisgICAgICAgIGFkanVzdGVkUmVjdC5pbmZsYXRlWSgocGl4ZWxzIC8gYWRqdXN0ZWRSZWN0
LndpZHRoKCkgLSBhZGp1c3RlZFJlY3QuaGVpZ2h0KCkpIC8gMik7CisgICAgZWxzZSBpZiAoYWRq
dXN0ZWRSZWN0LmhlaWdodCgpICE9IHJlY3QuaGVpZ2h0KCkpCisgICAgICAgIGFkanVzdGVkUmVj
dC5pbmZsYXRlWCgocGl4ZWxzIC8gYWRqdXN0ZWRSZWN0LmhlaWdodCgpIC0gYWRqdXN0ZWRSZWN0
LndpZHRoKCkpIC8gMik7CisgICAgcmV0dXJuIGludGVyc2VjdGlvbihhZGp1c3RlZFJlY3QsIGJv
dW5kcyk7Cit9CisKK0ludFJlY3QgVGlsZUdyaWQ6OmNhbGN1bGF0ZUNvdmVyUmVjdChjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlUmVjdCwgYm9vbCYgY2VudGVyR3JpZCkKK3sKKyAgICAvLyBVc2UgbWlu
aW11bSBjb3ZlclJlY3QgaWYgd2UgYXJlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KKyAgICBpZiAo
c2hvdWxkVXNlTWluaW1hbFRpbGVDb3ZlcmFnZSgpKSB7CisgICAgICAgIGNlbnRlckdyaWQgPSB0
cnVlOworICAgICAgICByZXR1cm4gdmlzaWJsZVJlY3Q7CisgICAgfQorICAgIEludFJlY3QgY292
ZXJSZWN0ID0gdmlzaWJsZVJlY3Q7CisgICAgY2VudGVyR3JpZCA9IGZhbHNlOworICAgIGNvdmVy
UmVjdC5pbmZsYXRlWCh2aXNpYmxlUmVjdC53aWR0aCgpIC8gMik7CisgICAgY292ZXJSZWN0Lmlu
ZmxhdGVZKHZpc2libGVSZWN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gYWRqdXN0Q292ZXJSZWN0
Rm9yUGFnZUJvdW5kcyhjb3ZlclJlY3QpOworfQorCitkb3VibGUgVGlsZUdyaWQ6OnRpbGVEaXN0
YW5jZTIoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0
KSBjb25zdAoreworICAgIC8vIFRoZSAiZGlzdGFuY2UiIGNhbGN1bGF0ZWQgaGVyZSBpcyB1c2Vk
IHRvIHBpY2sgd2hpY2ggdGlsZSB0byBjYWNoZSBuZXh0LiBUaGUgaWRlYSBpcyB0byBjcmVhdGUg
dGhvc2UKKyAgICAvLyBjbG9zZXN0IHRvIHRoZSBjdXJyZW50IHZpZXdwb3J0IGZpcnN0IHNvIHRo
ZSB1c2VyIGlzIG1vcmUgbGlrZWx5IHRvIHNlZSBhbHJlYWR5IHJlbmRlcmVkIGNvbnRlbnQgd2Ug
c2hlCisgICAgLy8gc2Nyb2xscy4gVGhlIGNhbGN1bGF0aW9uIGlzIHdlaWdodGVkIHRvIHByZWZl
ciB2ZXJ0aWNhbCBhbmQgZG93bndhcmQgZGlyZWN0aW9uLgorICAgIGlmICh2aXNpYmxlUmVjdC5p
bnRlcnNlY3RzKHRpbGVSZWN0KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgSW50UG9pbnQgdmlz
aWJsZUNlbnRlciA9IHZpc2libGVSZWN0LmxvY2F0aW9uKCkgKyBJbnRTaXplKHZpc2libGVSZWN0
LndpZHRoKCkgLyAyLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSAvIDIpOworICAgIEludFBvaW50IHRp
bGVDZW50ZXIgPSB0aWxlUmVjdC5sb2NhdGlvbigpICsgSW50U2l6ZSh0aWxlUmVjdC53aWR0aCgp
IC8gMiwgdGlsZVJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICAKKyAgICBkb3VibGUgaG9yaXpvbnRh
bEJpYXMgPSAxLjA7CisgICAgZG91YmxlIGxlZnR3YXJkQmlhcyA9IDEuMDsKKyAgICBkb3VibGUg
cmlnaHR3YXJkQmlhcyA9IDEuMDsKKworICAgIGRvdWJsZSB2ZXJ0aWNhbEJpYXMgPSAxLjA7Cisg
ICAgZG91YmxlIHVwd2FyZEJpYXMgPSAxLjA7CisgICAgZG91YmxlIGRvd253YXJkQmlhcyA9IDEu
MDsKKworICAgIGNvbnN0IGRvdWJsZSB0aWxpbmdCaWFzVmVyeUxpa2VseSA9IDAuODsKKyAgICBj
b25zdCBkb3VibGUgdGlsaW5nQmlhc0xpa2VseSA9IDAuOTsKKworICAgIHN3aXRjaCAobV90aWxl
Q2FjaGUtPnRpbGluZ0RpcmVjdGlvbigpKSB7CisgICAgY2FzZSBUaWxlQ2FjaGU6OlRpbGluZ0Rp
cmVjdGlvblVwOgorICAgICAgICB2ZXJ0aWNhbEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxpa2VseTsK
KyAgICAgICAgdXB3YXJkQmlhcyA9IHRpbGluZ0JpYXNMaWtlbHk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVGlsZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb25Eb3duOgorICAgICAgICB2ZXJ0aWNh
bEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxpa2VseTsKKyAgICAgICAgZG93bndhcmRCaWFzID0gdGls
aW5nQmlhc0xpa2VseTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUaWxlQ2FjaGU6OlRpbGlu
Z0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIGhvcml6b250YWxCaWFzID0gdGlsaW5nQmlhc1ZlcnlM
aWtlbHk7CisgICAgICAgIGxlZnR3YXJkQmlhcyA9IHRpbGluZ0JpYXNMaWtlbHk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVGlsZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb25SaWdodDoKKyAgICAg
ICAgaG9yaXpvbnRhbEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxpa2VseTsKKyAgICAgICAgcmlnaHR3
YXJkQmlhcyA9IHRpbGluZ0JpYXNMaWtlbHk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGRvdWJsZSB4U2NhbGUgPSBob3Jpem9udGFsQmlhcyAqIHZpc2libGVSZWN0LmhlaWdodCgpIC8g
dmlzaWJsZVJlY3Qud2lkdGgoKSAqICh0aWxlQ2VudGVyLngoKSA+PSB2aXNpYmxlQ2VudGVyLngo
KSA/IHJpZ2h0d2FyZEJpYXMgOiBsZWZ0d2FyZEJpYXMpOworICAgIGRvdWJsZSB5U2NhbGUgPSB2
ZXJ0aWNhbEJpYXMgKiB2aXNpYmxlUmVjdC53aWR0aCgpIC8gdmlzaWJsZVJlY3QuaGVpZ2h0KCkg
KiAodGlsZUNlbnRlci55KCkgPj0gdmlzaWJsZUNlbnRlci55KCkgPyBkb3dud2FyZEJpYXMgOiB1
cHdhcmRCaWFzKTsKKworICAgIGRvdWJsZSB4RGlzdGFuY2UgPSB4U2NhbGUgKiAodGlsZUNlbnRl
ci54KCkgLSB2aXNpYmxlQ2VudGVyLngoKSk7CisgICAgZG91YmxlIHlEaXN0YW5jZSA9IHlTY2Fs
ZSAqICh0aWxlQ2VudGVyLnkoKSAtIHZpc2libGVDZW50ZXIueSgpKTsKKworICAgIGRvdWJsZSBk
aXN0YW5jZTIgPSB4RGlzdGFuY2UgKiB4RGlzdGFuY2UgKyB5RGlzdGFuY2UgKiB5RGlzdGFuY2U7
CisgICAgcmV0dXJuIGRpc3RhbmNlMjsKK30KKwordm9pZCBUaWxlR3JpZDo6Y3JlYXRlVGlsZXMo
VGlsZUNhY2hlOjpTeW5jaHJvbm91c1RpbGVDcmVhdGlvbk1vZGUgY3JlYXRpb25Nb2RlKQorewor
ICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB0aGlzLT52aXNpYmxlUmVjdCgpOworICAgIGlmICh2
aXNpYmxlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERyb3AgdGls
ZXMgdGhhdCBhcmUgd3Jvbmcgc2l6ZSBvciBvdXRzaWRlIHRoZSBmcmFtZSAoYmVjYXVzZSB0aGUg
ZnJhbWUgaGFzIGJlZW4gcmVzaXplZCkuCisgICAgZHJvcEludmFsaWRUaWxlcygpOworCisgICAg
Ym9vbCBjZW50ZXJHcmlkOworICAgIEludFJlY3QgY292ZXJSZWN0ID0gY2FsY3VsYXRlQ292ZXJS
ZWN0KHZpc2libGVSZWN0LCBjZW50ZXJHcmlkKTsKKworICAgIC8vIElmIHRpbGUgc2l6ZSBpcyBi
aWdnZXIgdGhhbiB0aGUgdmlldywgY2VudGVyaW5nIG1pbmltaXplcyB0aGUgcGFpbnRpbmcgbmVl
ZGVkIHRvIGNvdmVyIHRoZSBzY3JlZW4uCisgICAgLy8gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1
bCBhZnRlciB6b29taW5nIAorICAgIGNlbnRlckdyaWQgPSBjZW50ZXJHcmlkIHx8ICF0aWxlQ291
bnQoKTsKKyAgICBpZiAoY2VudGVyR3JpZCkKKyAgICAgICAgY2VudGVyVGlsZUdyaWRPcmlnaW4o
dmlzaWJsZVJlY3QpOworCisgICAgZG91YmxlIHNob3J0ZXN0RGlzdGFuY2UgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7CisgICAgZG91YmxlIGNvdmVyZWREaXN0YW5j
ZSA9IDA7CisgICAgVmVjdG9yPFRpbGVHcmlkOjpUaWxlSW5kZXg+IHRpbGVzVG9DcmVhdGU7Cisg
ICAgdW5zaWduZWQgcGVuZGluZ1RpbGVDb3VudCA9IDA7CisKKyAgICBUaWxlR3JpZDo6VGlsZUlu
ZGV4IHRvcExlZnRJbmRleCA9IHRpbGVJbmRleEZvclBvaW50KHRvcExlZnQoY292ZXJSZWN0KSk7
CisgICAgVGlsZUdyaWQ6OlRpbGVJbmRleCBib3R0b21SaWdodEluZGV4ID0gdGlsZUluZGV4Rm9y
UG9pbnQoYm90dG9tUmlnaHQoY292ZXJSZWN0KSk7CisgICAgZm9yIChpbnQgeUluZGV4ID0gdG9w
TGVmdEluZGV4LnkoKTsgeUluZGV4IDw9IGJvdHRvbVJpZ2h0SW5kZXgueSgpOyArK3lJbmRleCkg
eworICAgICAgICBmb3IgKGludCB4SW5kZXggPSB0b3BMZWZ0SW5kZXgueCgpOyB4SW5kZXggPD0g
Ym90dG9tUmlnaHRJbmRleC54KCk7ICsreEluZGV4KSB7CisgICAgICAgICAgICBUaWxlR3JpZDo6
VGlsZUluZGV4IGluZGV4KHhJbmRleCwgeUluZGV4KTsKKyAgICAgICAgICAgIC8vIEN1cnJlbnRs
eSB2aXNpYmxlIHRpbGVzIGhhdmUgZGlzdGFuY2Ugb2YgMCBhbmQgZ2V0IGFsbCBjcmVhdGVkIGlu
IHRoZSBzYW1lIHRyYW5zYWN0aW9uLgorICAgICAgICAgICAgZG91YmxlIGRpc3RhbmNlID0gdGls
ZURpc3RhbmNlMih2aXNpYmxlUmVjdCwgdGlsZVJlY3RGb3JJbmRleChpbmRleCkpOworICAgICAg
ICAgICAgaWYgKGRpc3RhbmNlID4gY292ZXJlZERpc3RhbmNlKQorICAgICAgICAgICAgICAgIGNv
dmVyZWREaXN0YW5jZSA9IGRpc3RhbmNlOworICAgICAgICAgICAgaWYgKHRpbGVGb3JJbmRleChp
bmRleCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICArK3BlbmRpbmdU
aWxlQ291bnQ7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiBzaG9ydGVzdERpc3RhbmNlKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgc2hv
cnRlc3REaXN0YW5jZSkgeworICAgICAgICAgICAgICAgIHRpbGVzVG9DcmVhdGUuY2xlYXIoKTsK
KyAgICAgICAgICAgICAgICBzaG9ydGVzdERpc3RhbmNlID0gZGlzdGFuY2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aWxlc1RvQ3JlYXRlLmFwcGVuZChpbmRleCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzaXplX3QgdGlsZXNUb0NyZWF0ZUNvdW50ID0gdGlsZXNUb0NyZWF0ZS5z
aXplKCk7CisKKyAgICAvLyBUaWxlIGNyZWF0aW9uIHRpbWVyIHdpbGwgaW52b2tlIHRoaXMgZnVu
Y3Rpb24gYWdhaW4gaW4gQ292ZXJTcGVjdWxhdGl2ZSBtb2RlLgorICAgIGJvb2wgY2FuZGlkYXRl
VGlsZXNBcmVTcGVjdWxhdGl2ZSA9IHNob3J0ZXN0RGlzdGFuY2UgPiAwOworICAgIGlmIChjcmVh
dGlvbk1vZGUgPT0gVGlsZUNhY2hlOjpDb3ZlclZpc2libGVPbmx5ICYmIGNhbmRpZGF0ZVRpbGVz
QXJlU3BlY3VsYXRpdmUpCisgICAgICAgIHRpbGVzVG9DcmVhdGVDb3VudCA9IDA7CisKKyAgICAv
LyBFdmVuIGlmIHdlIGRvbid0IGNyZWF0ZSBhbnkgdGlsZXMsIHdlIHNob3VsZCBzdGlsbCBkcm9w
IGRpc3RhbnQgdGlsZXMKKyAgICAvLyBpbiBjYXNlIGNvdmVyUmVjdCBnb3Qgc21hbGxlci4KKyAg
ICBkb3VibGUga2VlcERpc3RhbmNlID0gc3RkOjptaW4oc2hvcnRlc3REaXN0YW5jZSwgY292ZXJl
ZERpc3RhbmNlKTsKKyAgICBpZiAoIWRyb3BEaXN0YW50VGlsZXModGlsZXNUb0NyZWF0ZUNvdW50
LCBrZWVwRGlzdGFuY2UpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGVuZGluZ1Rp
bGVDb3VudCA+PSB0aWxlc1RvQ3JlYXRlQ291bnQpOworICAgIGlmICghcGVuZGluZ1RpbGVDb3Vu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCB0aWxlc1Rv
Q3JlYXRlQ291bnQ7ICsrbikKKyAgICAgICAgYWRkVGlsZUZvckluZGV4KHRpbGVzVG9DcmVhdGVb
bl0pOworCisgICAgYm9vbCBkaWRDcmVhdGVUaWxlcyA9ICEhdGlsZXNUb0NyZWF0ZUNvdW50Owor
ICAgIGJvb2wgY3JlYXRlTW9yZVRpbGVzID0gcGVuZGluZ1RpbGVDb3VudCA+IHRpbGVzVG9DcmVh
dGVDb3VudDsKKyAgICBtX3RpbGVDYWNoZS0+ZmluaXNoZWRDcmVhdGluZ1RpbGVzKGRpZENyZWF0
ZVRpbGVzLCBjcmVhdGVNb3JlVGlsZXMpOworfQorCit2b2lkIFRpbGVHcmlkOjpkdW1wVGlsZXMo
KQoreworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB0aGlzLT52aXNpYmxlUmVjdCgpOworICAg
IE5TTG9nKEAidHJhbnNmb3JtZWQgdmlzaWJsZVJlY3QgPSBbJTZkICU2ZCAlNmQgJTZkXSIsIHZp
c2libGVSZWN0LngoKSwgdmlzaWJsZVJlY3QueSgpLCB2aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNp
YmxlUmVjdC5oZWlnaHQoKSk7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgVGlsZU1hcDo6aXRl
cmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVGlsZUluZGV4
JiBpbmRleCA9IGl0LT5rZXk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBpdC0+dmFsdWUt
PnJlY3QoKTsKKyAgICAgICAgTlNMb2coQCIjJS0zZCAoJTNkICUzZCkgLSBbJTZkICU2ZCAlNmQg
JTZkXSVAIiwgKytpLCBpbmRleC54KCksIGluZGV4LnkoKSwgdGlsZVJlY3QueCgpLCB0aWxlUmVj
dC55KCksIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCB0aWxlUmVjdC5pbnRl
cnNlY3RzKHZpc2libGVSZWN0KSA/IEAiICoiIDogQCIiKTsKKyAgICAgICAgTlNMb2coQCIgICAg
ICVAIiwgW2l0LT52YWx1ZS0+dGlsZUxheWVyKCkgY29udGVudHNdKTsKKyAgICB9Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYWQ5MjI4NWZk
OThkYjZhMjkzMjhhMmIzZTAwYzRmOTJkYWEwMWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkVGlsZS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFRpbGVHcmlkVGlsZV9oCisjZGVmaW5lIFRpbGVHcmlkVGlsZV9o
CisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCitAY2xhc3MgVGlsZUxheWVyOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFRpbGVHcmlkOworCisvLyBSZWZjb3VudCB0aGUgdGlsZXMgc28gdGhleSB3b3Jr
IG5pY2VseSBpbiB2ZWN0b3IgYW5kIHdlIGtub3cgd2hlbiB0byByZW1vdmUgdGhlIHRpbGUgbGF5
ZXIgZnJvbSB0aGUgcGFyZW50LgorY2xhc3MgVGlsZUdyaWRUaWxlIDogcHVibGljIFJlZkNvdW50
ZWQ8VGlsZUdyaWRUaWxlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGlsZUdy
aWRUaWxlPiBjcmVhdGUoVGlsZUdyaWQqIGdyaWQsIGNvbnN0IEludFJlY3QmIHJlY3QpIHsgcmV0
dXJuIGFkb3B0UmVmPFRpbGVHcmlkVGlsZT4obmV3IFRpbGVHcmlkVGlsZShncmlkLCByZWN0KSk7
IH0KKyAgICB+VGlsZUdyaWRUaWxlKCk7CisKKyAgICBUaWxlTGF5ZXIqIHRpbGVMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fdGlsZUxheWVyLmdldCgpOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0SW5TdXJmYWNlKTsKKyAgICBJbnRSZWN0IHJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgdGls
ZVJlY3QpOworICAgIHZvaWQgc2hvd0JvcmRlcihib29sKTsKKworcHJpdmF0ZToKKyAgICBUaWxl
R3JpZFRpbGUoVGlsZUdyaWQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICBUaWxlR3JpZCogbV90
aWxlR3JpZDsKKyAgICBSZXRhaW5QdHI8VGlsZUxheWVyPiBtX3RpbGVMYXllcjsKKyAgICBJbnRS
ZWN0IG1fcmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykKKyNlbmRpZiAvLyBUaWxlR3JpZFRpbGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkVGlsZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTYxODY3YTcxNzNiOGUyYzJj
MGZmNDlkZmYzZDUxNTI0ZGIzYmU2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUubW0KQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGlsZUdyaWQuaCIKKworI2lmIFBM
QVRGT1JNKElPUykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiVGlsZUNhY2hlLmgi
CisjaW5jbHVkZSAiVGlsZUdyaWRUaWxlLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyLmgiCisjaW5j
bHVkZSAiVGlsZUxheWVyUG9vbC5oIgorI2luY2x1ZGUgIldBS1dpbmRvdy5oIgorI2luY2x1ZGUg
PFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29y
ZVByaXZhdGUuaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgTE9HX1RJTElORworc3RhdGljIGludCB0b3Rh
bFRpbGVDb3VudDsKKyNlbmRpZgorCitUaWxlR3JpZFRpbGU6OlRpbGVHcmlkVGlsZShUaWxlR3Jp
ZCogdGlsZUdyaWQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQorICAgIDogbV90aWxlR3JpZCh0
aWxlR3JpZCkKKyAgICAsIG1fcmVjdCh0aWxlUmVjdCkKK3sKKyAgICBBU1NFUlQoIXRpbGVSZWN0
LmlzRW1wdHkoKSk7CisgICAgSW50U2l6ZSBwaXhlbFNpemUobV9yZWN0LnNpemUoKSk7CisgICAg
Y29uc3QgQ0dGbG9hdCBzY3JlZW5TY2FsZSA9IG1fdGlsZUdyaWQtPnRpbGVDYWNoZSgpLT5zY3Jl
ZW5TY2FsZSgpOworICAgIHBpeGVsU2l6ZS5zY2FsZShzY3JlZW5TY2FsZSk7CisgICAgbV90aWxl
TGF5ZXIgPSBUaWxlTGF5ZXJQb29sOjpzaGFyZWRQb29sKCktPnRha2VMYXllcldpdGhTaXplKHBp
eGVsU2l6ZSk7CisgICAgaWYgKCFtX3RpbGVMYXllcikgeworI2lmIExPR19USUxJTkcKKyAgICAg
ICAgTlNMb2coQCJ1bmFibGUgdG8gcmV1c2UgbGF5ZXIgd2l0aCBzaXplICVkIHggJWQsIGNyZWF0
aW5nIG9uZSIsIHBpeGVsU2l6ZS53aWR0aCgpLCBwaXhlbFNpemUuaGVpZ2h0KCkpOworI2VuZGlm
CisgICAgICAgIG1fdGlsZUxheWVyID0gYWRvcHROUyhbW1RpbGVMYXllciBhbGxvY10gaW5pdF0p
OworICAgIH0KKyAgICBUaWxlTGF5ZXIqIGxheWVyID0gbV90aWxlTGF5ZXIuZ2V0KCk7CisgICAg
W2xheWVyIHNldFRpbGVHcmlkOnRpbGVHcmlkXTsKKyAgICBbbGF5ZXIgc2V0T3BhcXVlOm1fdGls
ZUdyaWQtPnRpbGVDYWNoZSgpLT50aWxlc09wYXF1ZSgpXTsKKyAgICBbbGF5ZXIgc2V0RWRnZUFu
dGlhbGlhc2luZ01hc2s6MF07CisgICAgW2xheWVyIHNldE5lZWRzTGF5b3V0T25HZW9tZXRyeUNo
YW5nZTpOT107CisgICAgW2xheWVyIHNldENvbnRlbnRzU2NhbGU6c2NyZWVuU2NhbGVdOworICAg
IFtsYXllciBzZXRBY2NlbGVyYXRlc0RyYXdpbmc6bV90aWxlR3JpZC0+dGlsZUNhY2hlKCktPmFj
Y2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKV07CisKKyAgICAvLyBIb3N0IGxheWVyIG1heSBoYXZl
IG90aGVyIHN1YmxheWVycy4gS2VlcCB0aGUgdGlsZSBsYXllcnMgYXQgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgYXJyYXkKKyAgICAvLyBzbyB0aGV5IGFyZSBwYWludGVkIGJlaGluZCBldmVyeXRoaW5n
IGVsc2UuCisgICAgW3RpbGVHcmlkLT50aWxlSG9zdExheWVyKCkgaW5zZXJ0U3VibGF5ZXI6bGF5
ZXIgYXRJbmRleDp0aWxlR3JpZC0+dGlsZUNvdW50KCldOworICAgIFtsYXllciBzZXRGcmFtZTpt
X3JlY3RdOworICAgIGludmFsaWRhdGVSZWN0KG1fcmVjdCk7CisgICAgc2hvd0JvcmRlcihtX3Rp
bGVHcmlkLT50aWxlQ2FjaGUoKS0+dGlsZUJvcmRlcnNWaXNpYmxlKCkpOworCisjaWYgTE9HX1RJ
TElORworICAgICsrdG90YWxUaWxlQ291bnQ7CisgICAgTlNMb2coQCJuZXcgVGlsZSAoJWQsJWQp
ICVkICVkLCBjb3VudCAlZCIsIHRpbGVSZWN0LngoKSwgdGlsZVJlY3QueSgpLCB0aWxlUmVjdC53
aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwgdG90YWxUaWxlQ291bnQpOworI2VuZGlmCit9CisK
K1RpbGVHcmlkVGlsZTo6flRpbGVHcmlkVGlsZSgpIAoreworICAgIFt0aWxlTGF5ZXIoKSBzZXRU
aWxlR3JpZDowXTsKKyAgICBbdGlsZUxheWVyKCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAg
IFRpbGVMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRkTGF5ZXIodGlsZUxheWVyKCkpOworI2lm
IExPR19USUxJTkcKKyAgICAtLXRvdGFsVGlsZUNvdW50OworICAgIE5TTG9nKEAiZGVsZXRlIFRp
bGUgKCVkLCVkKSAlZCAlZCwgY291bnQgJWQiLCBtX3JlY3QueCgpLCBtX3JlY3QueSgpLCBtX3Jl
Y3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdodCgpLCB0b3RhbFRpbGVDb3VudCk7CisjZW5kaWYKK30K
Kwordm9pZCBUaWxlR3JpZFRpbGU6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHdpbmRv
d0RpcnR5UmVjdCkKK3sKKyAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGludGVyc2VjdGlvbih3aW5k
b3dEaXJ0eVJlY3QsIG1fcmVjdCk7CisgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBkaXJ0eVJlY3QubW92ZShJbnRQb2ludCgpIC0gbV9yZWN0LmxvY2F0
aW9uKCkpOworICAgIFt0aWxlTGF5ZXIoKSBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6ZGlydHlSZWN0
XTsKKworICAgIGlmIChtX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+dGlsZVBhaW50Q291bnRlcnNW
aXNpYmxlKCkpCisgICAgICAgIFt0aWxlTGF5ZXIoKSBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6Q0dS
ZWN0TWFrZSgwLCAwLCA0NiwgMjUpXTsKK30KKwordm9pZCBUaWxlR3JpZFRpbGU6OnNldFJlY3Qo
Y29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCit7CisgICAgaWYgKG1fcmVjdCA9PSB0aWxlUmVjdCkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fcmVjdCA9IHRpbGVSZWN0OworICAgIFRpbGVMYXllciog
bGF5ZXIgPSBtX3RpbGVMYXllci5nZXQoKTsKKyAgICBbbGF5ZXIgc2V0RnJhbWU6bV9yZWN0XTsK
KyAgICBbbGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKK30KKwordm9pZCBUaWxlR3JpZFRpbGU6OnNo
b3dCb3JkZXIoYm9vbCBmbGFnKQoreworICAgIFRpbGVMYXllciogbGF5ZXIgPSBtX3RpbGVMYXll
ci5nZXQoKTsKKyAgICBpZiAoZmxhZykgeworICAgICAgICBbbGF5ZXIgc2V0Qm9yZGVyQ29sb3I6
Y2FjaGVkQ0dDb2xvcihtX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+Y29sb3JGb3JHcmlkVGlsZUJv
cmRlcihtX3RpbGVHcmlkKSwgQ29sb3JTcGFjZURldmljZVJHQildOworICAgICAgICBbbGF5ZXIg
c2V0Qm9yZGVyV2lkdGg6MC41Zl07CisgICAgfSBlbHNlIHsKKyAgICAgICAgW2xheWVyIHNldEJv
cmRlckNvbG9yOm5pbF07CisgICAgICAgIFtsYXllciBzZXRCb3JkZXJXaWR0aDowXTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNGI4NTFk
YzhiNjUxN2E1MzY3MzVjNjNlNmVhOGM5YWUwZGNhZTBkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVMYXllci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFRpbGVMYXllcl9oCisjZGVmaW5lIFRpbGVMYXllcl9oCisKKyNp
ZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlIDxRdWFydHpDb3JlL0NBTGF5ZXIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGlsZUdyaWQ7Cit9OworCitAaW50ZXJmYWNlIFRpbGVM
YXllciA6IENBTGF5ZXIgeworICAgIFdlYkNvcmU6OlRpbGVHcmlkKiBfdGlsZUdyaWQ7CisgICAg
dW5zaWduZWQgX3BhaW50Q291bnQ7Cit9CitAcHJvcGVydHkgKG5vbmF0b21pYykgdW5zaWduZWQg
cGFpbnRDb3VudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBXZWJDb3JlOjpUaWxlR3JpZCogdGls
ZUdyaWQ7CisrIChUaWxlTGF5ZXIgKilsYXllckJlaW5nUGFpbnRlZDsKK0BlbmQKKworQGludGVy
ZmFjZSBUaWxlSG9zdExheWVyIDogQ0FMYXllciB7CisgICAgV2ViQ29yZTo6VGlsZUdyaWQqIF90
aWxlR3JpZDsKK30KKy0gKGlkKWluaXRXaXRoVGlsZUdyaWQ6KFdlYkNvcmU6OlRpbGVHcmlkKil0
aWxlR3JpZDsKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKyNlbmRpZiAvLyBUaWxl
TGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVMYXll
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzI4YmVjODVlN2U5ZmNjNjU1OWQ1NmYzNWI0OWMzYmMxMDUwYzY0NgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIubW0KQEAgLTAsMCAr
MSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGls
ZUxheWVyLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJUaWxlQ2FjaGUuaCIK
KyNpbmNsdWRlICJUaWxlR3JpZC5oIgorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKworQGlt
cGxlbWVudGF0aW9uIFRpbGVIb3N0TGF5ZXIKKy0gKGlkKWluaXRXaXRoVGlsZUdyaWQ6KFdlYkNv
cmU6OlRpbGVHcmlkKil0aWxlR3JpZAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAg
aWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIF90aWxlR3JpZCA9IHRpbGVHcmlk
OworICAgIFtzZWxmIHNldEFuY2hvclBvaW50OkNHUG9pbnRaZXJvXTsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAoaWQ8Q0FBY3Rpb24+KWFjdGlvbkZvcktleTooTlNTdHJpbmcgKilrZXkKK3sK
KyAgICBVTlVTRURfUEFSQU0oa2V5KTsKKyAgICAvLyBEaXNhYmxlIGFsbCBkZWZhdWx0IGFjdGlv
bnMKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKXJlbmRlckluQ29udGV4dDooQ0dDb250
ZXh0UmVmKWNvbnRleHQKK3sKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdl
YlRocmVhZExvY2soKTsKKyAgICBfdGlsZUdyaWQtPnRpbGVDYWNoZSgpLT5kb0xheW91dFRpbGVz
KCk7CisgICAgW3N1cGVyIHJlbmRlckluQ29udGV4dDpjb250ZXh0XTsKK30KK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFRpbGVMYXllcgorQHN5bnRoZXNpemUgcGFpbnRDb3VudCA9IF9wYWludENv
dW50OworQHN5bnRoZXNpemUgdGlsZUdyaWQgPSBfdGlsZUdyaWQ7CisKK3N0YXRpYyBUaWxlTGF5
ZXIgKmxheWVyQmVpbmdQYWludGVkOworCistICh2b2lkKXNldE5lZWRzRGlzcGxheUluUmVjdDoo
Q0dSZWN0KXJlY3QKK3sKKyAgICBbc2VsZiBzZXROZWVkc0xheW91dF07CisgICAgW3N1cGVyIHNl
dE5lZWRzRGlzcGxheUluUmVjdDpyZWN0XTsKK30KKworLSAodm9pZClsYXlvdXRTdWJsYXllcnMK
K3sKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRocmVhZExvY2soKTsK
KyAgICAvLyBUaGlzIG1heSB0cmlnZ2VyIFdlYktpdCBsYXlvdXQgYW5kIGdlbmVyYXRlIG1vcmUg
cmVwYWludCByZWN0cy4KKyAgICBpZiAoX3RpbGVHcmlkKQorICAgICAgICBfdGlsZUdyaWQtPnRp
bGVDYWNoZSgpLT5wcmVwYXJlVG9EcmF3KCk7Cit9CisKKy0gKHZvaWQpZHJhd0luQ29udGV4dDoo
Q0dDb250ZXh0UmVmKWNvbnRleHQKK3sKKyAgICBpZiAoX3RpbGVHcmlkKQorICAgICAgICBfdGls
ZUdyaWQtPnRpbGVDYWNoZSgpLT5kcmF3TGF5ZXIoc2VsZiwgY29udGV4dCk7Cit9CisKKy0gKGlk
PENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5Cit7CisgICAgVU5VU0VEX1BB
UkFNKGtleSk7CisgICAgLy8gRGlzYWJsZSBhbGwgZGVmYXVsdCBhY3Rpb25zCisgICAgcmV0dXJu
IG5pbDsKK30KKworKyAoVGlsZUxheWVyICopbGF5ZXJCZWluZ1BhaW50ZWQKK3sKKyAgICByZXR1
cm4gbGF5ZXJCZWluZ1BhaW50ZWQ7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXJQb29s
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNiMzFkN2I2NDRlNWVhYmM2MDQwOGUxMGFjNDIyMDMwZjI0YmMyYjIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5oCkBAIC0w
LDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRpbGVMYXllclBvb2xfaAorI2RlZmlu
ZSBUaWxlTGF5ZXJQb29sX2gKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkludFNp
emUuaCIKKyNpbmNsdWRlICJJbnRTaXplSGFzaC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK0BjbGFzcyBUaWxlTGF5ZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgVGlsZUxheWVyUG9vbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGlsZUxh
eWVyUG9vbCk7CitwdWJsaWM6CisgICAgc3RhdGljIFRpbGVMYXllclBvb2wqIHNoYXJlZFBvb2wo
KTsKKworICAgIHZvaWQgYWRkTGF5ZXIoY29uc3QgUmV0YWluUHRyPFRpbGVMYXllcj4mKTsKKyAg
ICBSZXRhaW5QdHI8VGlsZUxheWVyPiB0YWtlTGF5ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJik7
CisKKyAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGFsbCBxdWV1ZWQgbGF5ZXJzIGluIGJ5dGVz
LgorICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9jYXBhY2l0eTsgfQor
ICAgIHZvaWQgc2V0Q2FwYWNpdHkodW5zaWduZWQpOworICAgIHZvaWQgZHJhaW4oKTsKKworICAg
IHVuc2lnbmVkIGRlY2F5ZWRDYXBhY2l0eSgpIGNvbnN0OworCisgICAgc3RhdGljIHVuc2lnbmVk
IGJ5dGVzQmFja2luZ0xheWVyV2l0aFBpeGVsU2l6ZShjb25zdCBJbnRTaXplJik7CisKK3ByaXZh
dGU6CisgICAgVGlsZUxheWVyUG9vbCgpOworCisgICAgdHlwZWRlZiBEZXF1ZTxSZXRhaW5QdHI8
VGlsZUxheWVyPiA+IExheWVyTGlzdDsKKworICAgIGJvb2wgY2FuUmV1c2VMYXllcldpdGhTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWNpdHkgJiYgIXNpemUu
aXNFbXB0eSgpOyB9CisgICAgdm9pZCBzY2hlZHVsZVBydW5lKCk7CisgICAgdm9pZCBwcnVuZSgp
OworICAgIHR5cGVkZWYgZW51bSB7IExlYXZlVW5jaGFuZ2VkLCBNYXJrQXNVc2VkIH0gQWNjZXNz
VHlwZTsKKyAgICBMYXllckxpc3QmIGxpc3RPZkxheWVyc1dpdGhTaXplKGNvbnN0IEludFNpemUm
LCBBY2Nlc3NUeXBlID0gTGVhdmVVbmNoYW5nZWQpOworCisgICAgSGFzaE1hcDxJbnRTaXplLCBM
YXllckxpc3Q+IG1fcmV1c2VMaXN0czsKKyAgICAvLyBPcmRlcmVkIGJ5IHJlY2VudCB1c2UuIFRo
ZSBsYXN0IHNpemUgaXMgdGhlIG1vc3QgcmVjZW50bHkgdXNlZC4KKyAgICBWZWN0b3I8SW50U2l6
ZT4gbV9zaXplc0luUHJ1bmVPcmRlcjsKKyAgICB1bnNpZ25lZCBtX3RvdGFsQnl0ZXM7CisgICAg
dW5zaWduZWQgbV9jYXBhY2l0eTsKKyAgICBNdXRleCBtX2xheWVyUG9vbE11dGV4OworCisgICAg
ZG91YmxlIG1fbGFzdEFkZFRpbWU7CisgICAgYm9vbCBtX25lZWRzUHJ1bmU7CisKKyAgICBmcmll
bmQgTmV2ZXJEZXN0cm95ZWQ8VGlsZUxheWVyUG9vbD47Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisjZW5kaWYgLy8gVGlsZUxheWVyUG9v
bF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9v
bC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXJQb29sLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhlYzQ5MGM1Yzg5ODViODJiNDZjYjRlYjhiNTZhYTAyZjI2NzNjMTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5tbQpA
QCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUaWxlTGF5ZXJQb29sLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJM
b2dnaW5nLmgiCisjaW5jbHVkZSAiTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCisjaW5jbHVkZSAi
VGlsZUxheWVyLmgiCisjaW5jbHVkZSAiVGlsZUdyaWQuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgY29uc3QgZG91YmxlIGNhcGFjaXR5RGVjYXlUaW1lID0gNTsKKwor
VGlsZUxheWVyUG9vbDo6VGlsZUxheWVyUG9vbCgpCisgICAgOiBtX3RvdGFsQnl0ZXMoMCkKKyAg
ICAsIG1fY2FwYWNpdHkoMCkKKyAgICAsIG1fbGFzdEFkZFRpbWUoMCkKKyAgICAsIG1fbmVlZHNQ
cnVuZShmYWxzZSkKK3sKK30KKworVGlsZUxheWVyUG9vbCogVGlsZUxheWVyUG9vbDo6c2hhcmVk
UG9vbCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRpbGVMYXllclBvb2w+IHNoYXJl
ZFBvb2w7CisgICAgcmV0dXJuICZzaGFyZWRQb29sLmdldCgpOworfQorCit1bnNpZ25lZCBUaWxl
TGF5ZXJQb29sOjpieXRlc0JhY2tpbmdMYXllcldpdGhQaXhlbFNpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICByZXR1cm4gc2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7Cit9
CisKK1RpbGVMYXllclBvb2w6OkxheWVyTGlzdCYgVGlsZUxheWVyUG9vbDo6bGlzdE9mTGF5ZXJz
V2l0aFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQorewor
ICAgIEFTU0VSVCghbV9sYXllclBvb2xNdXRleC50cnlMb2NrKCkpOworICAgIEhhc2hNYXA8SW50
U2l6ZSwgTGF5ZXJMaXN0Pjo6aXRlcmF0b3IgaXQgPSBtX3JldXNlTGlzdHMuZmluZChzaXplKTsK
KyAgICBpZiAoaXQgPT0gbV9yZXVzZUxpc3RzLmVuZCgpKSB7CisgICAgICAgIGl0ID0gbV9yZXVz
ZUxpc3RzLmFkZChzaXplLCBMYXllckxpc3QoKSkuaXRlcmF0b3I7CisgICAgICAgIG1fc2l6ZXNJ
blBydW5lT3JkZXIuYXBwZW5kKHNpemUpOworICAgIH0gZWxzZSBpZiAoYWNjZXNzVHlwZSA9PSBN
YXJrQXNVc2VkKSB7CisgICAgICAgIG1fc2l6ZXNJblBydW5lT3JkZXIucmVtb3ZlKG1fc2l6ZXNJ
blBydW5lT3JkZXIucmV2ZXJzZUZpbmQoc2l6ZSkpOworICAgICAgICBtX3NpemVzSW5QcnVuZU9y
ZGVyLmFwcGVuZChzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKK30KKwordm9p
ZCBUaWxlTGF5ZXJQb29sOjphZGRMYXllcihjb25zdCBSZXRhaW5QdHI8VGlsZUxheWVyPiYgbGF5
ZXIpCit7CisgICAgSW50U2l6ZSBsYXllclNpemUoW2xheWVyLmdldCgpIGZyYW1lXS5zaXplKTsK
KyAgICBsYXllclNpemUuc2NhbGUoW2xheWVyLmdldCgpIGNvbnRlbnRzU2NhbGVdKTsKKyAgICBp
ZiAoIWNhblJldXNlTGF5ZXJXaXRoU2l6ZShsYXllclNpemUpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuaGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3Vy
ZSgpKSB7CisgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIlVuZGVyIG1lbW9yeSBwcmVzc3Vy
ZTogJXMsIHRvdGFsQnl0ZXM6ICVkIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgbV90b3RhbEJ5dGVz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xh
eWVyUG9vbE11dGV4KTsKKyAgICBsaXN0T2ZMYXllcnNXaXRoU2l6ZShsYXllclNpemUpLnByZXBl
bmQobGF5ZXIpOworICAgIG1fdG90YWxCeXRlcyArPSBieXRlc0JhY2tpbmdMYXllcldpdGhQaXhl
bFNpemUobGF5ZXJTaXplKTsKKworICAgIG1fbGFzdEFkZFRpbWUgPSBjdXJyZW50VGltZSgpOwor
ICAgIHNjaGVkdWxlUHJ1bmUoKTsKK30KKworUmV0YWluUHRyPFRpbGVMYXllcj4gVGlsZUxheWVy
UG9vbDo6dGFrZUxheWVyV2l0aFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAo
IWNhblJldXNlTGF5ZXJXaXRoU2l6ZShzaXplKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBN
dXRleExvY2tlciBsb2NrZXIobV9sYXllclBvb2xNdXRleCk7CisgICAgTGF5ZXJMaXN0JiByZXVz
ZUxpc3QgPSBsaXN0T2ZMYXllcnNXaXRoU2l6ZShzaXplLCBNYXJrQXNVc2VkKTsKKyAgICBpZiAo
cmV1c2VMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBtX3RvdGFsQnl0
ZXMgLT0gYnl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKHNpemUpOworICAgIHJldHVybiBy
ZXVzZUxpc3QudGFrZUZpcnN0KCk7Cit9CisKK3ZvaWQgVGlsZUxheWVyUG9vbDo6c2V0Q2FwYWNp
dHkodW5zaWduZWQgY2FwYWNpdHkpCit7CisgICAgTXV0ZXhMb2NrZXIgcmV1c2VMb2NrZXIobV9s
YXllclBvb2xNdXRleCk7CisgICAgaWYgKGNhcGFjaXR5IDwgbV9jYXBhY2l0eSkKKyAgICAgICAg
c2NoZWR1bGVQcnVuZSgpOworICAgIG1fY2FwYWNpdHkgPSBjYXBhY2l0eTsKK30KKyAgICAKK3Vu
c2lnbmVkIFRpbGVMYXllclBvb2w6OmRlY2F5ZWRDYXBhY2l0eSgpIGNvbnN0Cit7CisgICAgLy8g
RGVjYXkgdG8gb25lIHF1YXJ0ZXIgb3ZlciBjYXBhY2l0eURlY2F5VGltZQorICAgIGRvdWJsZSB0
aW1lU2luY2VMYXN0QWRkID0gY3VycmVudFRpbWUoKSAtIG1fbGFzdEFkZFRpbWU7CisgICAgaWYg
KHRpbWVTaW5jZUxhc3RBZGQgPiBjYXBhY2l0eURlY2F5VGltZSkKKyAgICAgICAgcmV0dXJuIG1f
Y2FwYWNpdHkgLyA0OworICAgIGZsb2F0IGRlY2F5UHJvZ2VzcyA9IGZsb2F0KHRpbWVTaW5jZUxh
c3RBZGQgLyBjYXBhY2l0eURlY2F5VGltZSk7CisgICAgcmV0dXJuIG1fY2FwYWNpdHkgLyA0ICsg
bV9jYXBhY2l0eSAqIDMgLyA0ICogKDEuZiAtIGRlY2F5UHJvZ2Vzcyk7Cit9CisKK3ZvaWQgVGls
ZUxheWVyUG9vbDo6c2NoZWR1bGVQcnVuZSgpCit7CisgICAgQVNTRVJUKCFtX2xheWVyUG9vbE11
dGV4LnRyeUxvY2soKSk7CisgICAgaWYgKG1fbmVlZHNQcnVuZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fbmVlZHNQcnVuZSA9IHRydWU7CisgICAgZGlzcGF0Y2hfdGltZV90IG5leHRQcnVuZVRp
bWUgPSBkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9XLCAxICogTlNFQ19QRVJfU0VDKTsK
KyAgICBkaXNwYXRjaF9hZnRlcihuZXh0UHJ1bmVUaW1lLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1
ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeeworICAgICAgICBwcnVu
ZSgpOworICAgIH0pOworfQorCit2b2lkIFRpbGVMYXllclBvb2w6OnBydW5lKCkKK3sKKyAgICBN
dXRleExvY2tlciBsb2NrZXIobV9sYXllclBvb2xNdXRleCk7CisgICAgQVNTRVJUKG1fbmVlZHNQ
cnVuZSk7CisgICAgbV9uZWVkc1BydW5lID0gZmFsc2U7CisgICAgdW5zaWduZWQgc2hyaW5rVG8g
PSBkZWNheWVkQ2FwYWNpdHkoKTsKKyAgICB3aGlsZSAobV90b3RhbEJ5dGVzID4gc2hyaW5rVG8p
IHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemVzSW5QcnVuZU9yZGVyLmlzRW1wdHkoKSk7CisgICAg
ICAgIEludFNpemUgc2l6ZVRvRHJvcCA9IG1fc2l6ZXNJblBydW5lT3JkZXIuZmlyc3QoKTsKKyAg
ICAgICAgTGF5ZXJMaXN0JiBvbGRlc3RSZXVzZUxpc3QgPSBtX3JldXNlTGlzdHMuZmluZChzaXpl
VG9Ecm9wKS0+dmFsdWU7CisgICAgICAgIGlmIChvbGRlc3RSZXVzZUxpc3QuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBtX3JldXNlTGlzdHMucmVtb3ZlKHNpemVUb0Ryb3ApOworICAgICAgICAg
ICAgbV9zaXplc0luUHJ1bmVPcmRlci5yZW1vdmUoMCk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorI2lmIExPR19USUxJTkcKKyAgICAgICAgTlNMb2coQCJkcm9wcGluZyBsYXll
ciBvZiBzaXplICVkIHggJWQiLCBzaXplVG9Ecm9wLndpZHRoKCksIHNpemVUb0Ryb3AuaGVpZ2h0
KCkpOworI2VuZGlmCisgICAgICAgIG1fdG90YWxCeXRlcyAtPSBieXRlc0JhY2tpbmdMYXllcldp
dGhQaXhlbFNpemUoc2l6ZVRvRHJvcCk7CisgICAgICAgIC8vIFRoZSBsYXN0IGVsZW1lbnQgaW4g
dGhlIGxpc3QgaXMgdGhlIG9sZGVzdCwgaGVuY2UgbW9zdCBsaWtlbHkgbm90IHRvCisgICAgICAg
IC8vIHN0aWxsIGhhdmUgYSBiYWNraW5nIHN0b3JlLgorICAgICAgICBvbGRlc3RSZXVzZUxpc3Qu
cmVtb3ZlTGFzdCgpOworICAgIH0KKyAgICBpZiAoY3VycmVudFRpbWUoKSAtIG1fbGFzdEFkZFRp
bWUgPD0gY2FwYWNpdHlEZWNheVRpbWUpCisgICAgICAgIHNjaGVkdWxlUHJ1bmUoKTsKK30KKwor
dm9pZCBUaWxlTGF5ZXJQb29sOjpkcmFpbigpCit7CisgICAgTXV0ZXhMb2NrZXIgcmV1c2VMb2Nr
ZXIobV9sYXllclBvb2xNdXRleCk7CisgICAgbV9yZXVzZUxpc3RzLmNsZWFyKCk7CisgICAgbV9z
aXplc0luUHJ1bmVPcmRlci5jbGVhcigpOworICAgIG1fdG90YWxCeXRlcyA9IDA7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVNb3Rpb25NYW5hZ2VyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNmZkMDkxMzc2YjllNjQ1NDgwZjRlYmI5ODA3YzA0MGNlMjY2MjQ2YQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdl
ci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBXZWJDb3JlTW90aW9uTWFuYWdlcl9oCisjZGVmaW5lIFdlYkNv
cmVNb3Rpb25NYW5hZ2VyX2gKKworI2ltcG9ydCAiRGV2aWNlTW90aW9uQ2xpZW50SU9TLmgiCisj
aW1wb3J0ICJEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oIgorI2ltcG9ydCA8Q29yZUxvY2F0
aW9uL0NvcmVMb2NhdGlvbi5oPgorI2ltcG9ydCA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisKKyNp
ZiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgPENvcmVNb3Rpb24vQ29yZU1vdGlvbi5oPgorCitj
b25zdCBmbG9hdCBrTW90aW9uVXBkYXRlSW50ZXJ2YWwgPSAwLjA1ZjsKKworQGludGVyZmFjZSBX
ZWJDb3JlTW90aW9uTWFuYWdlciA6IE5TT2JqZWN0IHsKKyAgICBDTU1vdGlvbk1hbmFnZXIqIG1f
bW90aW9uTWFuYWdlcjsKKyAgICBDTExvY2F0aW9uTWFuYWdlciogbV9sb2NhdGlvbk1hbmFnZXI7
CisgICAgSGFzaFNldDxXZWJDb3JlOjpEZXZpY2VNb3Rpb25DbGllbnRJT1MqPiBtX2RldmljZU1v
dGlvbkNsaWVudHM7CisgICAgSGFzaFNldDxXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbkNsaWVu
dElPUyo+IG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzOworICAgIE5TVGltZXIqIG1fdXBkYXRl
VGltZXI7CisgICAgQk9PTCBtX2d5cm9BdmFpbGFibGU7CisgICAgQk9PTCBtX2hlYWRpbmdBdmFp
bGFibGU7Cit9CisKKysgKFdlYkNvcmVNb3Rpb25NYW5hZ2VyICopc2hhcmVkTWFuYWdlcjsKKy0g
KHZvaWQpYWRkTW90aW9uQ2xpZW50OihXZWJDb3JlOjpEZXZpY2VNb3Rpb25DbGllbnRJT1MgKilj
bGllbnQ7CistICh2b2lkKXJlbW92ZU1vdGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlTW90aW9u
Q2xpZW50SU9TICopY2xpZW50OworLSAodm9pZClhZGRPcmllbnRhdGlvbkNsaWVudDooV2ViQ29y
ZTo6RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MgKiljbGllbnQ7CistICh2b2lkKXJlbW92ZU9y
aWVudGF0aW9uQ2xpZW50OihXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUyAqKWNs
aWVudDsKKy0gKEJPT0wpZ3lyb0F2YWlsYWJsZTsKKy0gKEJPT0wpaGVhZGluZ0F2YWlsYWJsZTsK
K0BlbmQKKworI2VuZGlmCisKKyNlbmRpZiAvLyBXZWJDb3JlTW90aW9uTWFuYWdlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZU1vdGlvbk1hbmFnZXIu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZU1vdGlvbk1hbmFnZXIubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMWU1ODQwNmUwMDgyYWFhNjMyNGEzN2U5YzljYTQ1MmY3Zjg4ODY5NgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9u
TWFuYWdlci5tbQpAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkNvcmVN
b3Rpb25NYW5hZ2VyLmgiCisKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJXZWJD
b3JlT2JqQ0V4dHJhcy5oIgorI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgorI2ltcG9ydCA8
Q29yZUxvY2F0aW9uL0NvcmVMb2NhdGlvbi5oPgorI2ltcG9ydCA8Q29yZU1vdGlvbi9Db3JlTW90
aW9uLmg+CisjaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL01hdGhF
eHRyYXMuaD4KKyNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisKKy8vIEdldCBDb3JlTG9jYXRpb24gY2xhc3Nl
cworU09GVF9MSU5LX0ZSQU1FV09SSyhDb3JlTG9jYXRpb24pCisKK1NPRlRfTElOS19DTEFTUyhD
b3JlTG9jYXRpb24sIENMTG9jYXRpb25NYW5hZ2VyKQorU09GVF9MSU5LX0NMQVNTKENvcmVMb2Nh
dGlvbiwgQ0xIZWFkaW5nKQorCisvLyBHZXQgQ29yZU1vdGlvbiBjbGFzc2VzCitTT0ZUX0xJTktf
RlJBTUVXT1JLKENvcmVNb3Rpb24pCisKK1NPRlRfTElOS19DTEFTUyhDb3JlTW90aW9uLCBDTU1v
dGlvbk1hbmFnZXIpCitTT0ZUX0xJTktfQ0xBU1MoQ29yZU1vdGlvbiwgQ01BY2NlbGVyb21ldGVy
RGF0YSkKK1NPRlRfTElOS19DTEFTUyhDb3JlTW90aW9uLCBDTURldmljZU1vdGlvbikKKworc3Rh
dGljIGNvbnN0IGRvdWJsZSBrR3Jhdml0eSA9IDkuODA2NjU7CisKK0BpbnRlcmZhY2UgV2ViQ29y
ZU1vdGlvbk1hbmFnZXIoUHJpdmF0ZSkKKworLSAodm9pZClpbml0aWFsaXplT25NYWluVGhyZWFk
OworLSAodm9pZCljaGVja0NsaWVudFN0YXR1czsKKy0gKHZvaWQpdXBkYXRlOworLSAodm9pZClz
ZW5kQWNjZWxlcm9tZXRlckRhdGE6KENNQWNjZWxlcm9tZXRlckRhdGEgKiluZXdBY2NlbGVyYXRp
b247CistICh2b2lkKXNlbmRNb3Rpb25EYXRhOihDTURldmljZU1vdGlvbiAqKW5ld01vdGlvbiB3
aXRoSGVhZGluZzooQ0xIZWFkaW5nICopbmV3SGVhZGluZzsKKworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gV2ViQ29yZU1vdGlvbk1hbmFnZXIKKworKyAoV2ViQ29yZU1vdGlvbk1hbmFnZXIgKilz
aGFyZWRNYW5hZ2VyCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8V2ViQ29y
ZU1vdGlvbk1hbmFnZXI+LCBzaGFyZWRNb3Rpb25NYW5hZ2VyLCAoW1tXZWJDb3JlTW90aW9uTWFu
YWdlciBhbGxvY10gaW5pdF0pKTsKKyAgICByZXR1cm4gc2hhcmVkTW90aW9uTWFuYWdlci5nZXQo
KTsKK30KKworLSAoaWQpaW5pdAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYg
KHNlbGYpCisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpAc2VsZWN0
b3IoaW5pdGlhbGl6ZU9uTWFpblRocmVhZCkgd2l0aE9iamVjdDpuaWwgd2FpdFVudGlsRG9uZTpO
T107CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChX
ZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChbV2ViQ29yZU1vdGlvbk1h
bmFnZXIgY2xhc3NdLCBzZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFtX3Vw
ZGF0ZVRpbWVyKTsKKworICAgIGlmIChtX2hlYWRpbmdBdmFpbGFibGUpCisgICAgICAgIFttX2xv
Y2F0aW9uTWFuYWdlciBzdG9wVXBkYXRpbmdIZWFkaW5nXTsKKyAgICBbbV9sb2NhdGlvbk1hbmFn
ZXIgcmVsZWFzZV07CisKKyAgICBpZiAobV9neXJvQXZhaWxhYmxlKQorICAgICAgICBbbV9tb3Rp
b25NYW5hZ2VyIHN0b3BEZXZpY2VNb3Rpb25VcGRhdGVzXTsKKyAgICBlbHNlCisgICAgICAgIFtt
X21vdGlvbk1hbmFnZXIgc3RvcEFjY2VsZXJvbWV0ZXJVcGRhdGVzXTsKKyAgICBbbV9tb3Rpb25N
YW5hZ2VyIHJlbGVhc2VdOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKWFk
ZE1vdGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TICopY2xpZW50Cit7
CisgICAgbV9kZXZpY2VNb3Rpb25DbGllbnRzLmFkZChjbGllbnQpOworICAgIFtzZWxmIGNoZWNr
Q2xpZW50U3RhdHVzXTsKK30KKworLSAodm9pZClyZW1vdmVNb3Rpb25DbGllbnQ6KFdlYkNvcmU6
OkRldmljZU1vdGlvbkNsaWVudElPUyAqKWNsaWVudAoreworICAgIG1fZGV2aWNlTW90aW9uQ2xp
ZW50cy5yZW1vdmUoY2xpZW50KTsKKyAgICBbc2VsZiBjaGVja0NsaWVudFN0YXR1c107Cit9CisK
Ky0gKHZvaWQpYWRkT3JpZW50YXRpb25DbGllbnQ6KFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9u
Q2xpZW50SU9TICopY2xpZW50Cit7CisgICAgbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudHMuYWRk
KGNsaWVudCk7CisgICAgW3NlbGYgY2hlY2tDbGllbnRTdGF0dXNdOworfQorCistICh2b2lkKXJl
bW92ZU9yaWVudGF0aW9uQ2xpZW50OihXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbkNsaWVudElP
UyAqKWNsaWVudAoreworICAgIG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzLnJlbW92ZShjbGll
bnQpOworICAgIFtzZWxmIGNoZWNrQ2xpZW50U3RhdHVzXTsKK30KKworLSAoQk9PTClneXJvQXZh
aWxhYmxlCit7CisgICAgcmV0dXJuIG1fZ3lyb0F2YWlsYWJsZTsKK30KKworLSAoQk9PTCloZWFk
aW5nQXZhaWxhYmxlCit7CisgICAgcmV0dXJuIG1faGVhZGluZ0F2YWlsYWJsZTsKK30KKworLSAo
dm9pZClpbml0aWFsaXplT25NYWluVGhyZWFkCit7CisgICAgQVNTRVJUKCFXZWJUaHJlYWRJc0N1
cnJlbnQoKSk7CisKKyNkZWZpbmUgQ01Nb3Rpb25NYW5hZ2VyIGdldENNTW90aW9uTWFuYWdlckNs
YXNzKCkKKyAgICBtX21vdGlvbk1hbmFnZXIgPSBbW0NNTW90aW9uTWFuYWdlciBhbGxvY10gaW5p
dF07CisjdW5kZWYgQ01Nb3Rpb25NYW5hZ2VyCisKKyAgICBtX2d5cm9BdmFpbGFibGUgPSBtX21v
dGlvbk1hbmFnZXIuZGV2aWNlTW90aW9uQXZhaWxhYmxlOworCisgICAgaWYgKG1fZ3lyb0F2YWls
YWJsZSkKKyAgICAgICAgbV9tb3Rpb25NYW5hZ2VyLmRldmljZU1vdGlvblVwZGF0ZUludGVydmFs
ID0ga01vdGlvblVwZGF0ZUludGVydmFsOworICAgIGVsc2UKKyAgICAgICAgbV9tb3Rpb25NYW5h
Z2VyLmFjY2VsZXJvbWV0ZXJVcGRhdGVJbnRlcnZhbCA9IGtNb3Rpb25VcGRhdGVJbnRlcnZhbDsK
KworI2RlZmluZSBDTExvY2F0aW9uTWFuYWdlciBnZXRDTExvY2F0aW9uTWFuYWdlckNsYXNzKCkK
KyAgICBtX2xvY2F0aW9uTWFuYWdlciA9IFtbQ0xMb2NhdGlvbk1hbmFnZXIgYWxsb2NdIGluaXRd
OworICAgIG1faGVhZGluZ0F2YWlsYWJsZSA9IFtDTExvY2F0aW9uTWFuYWdlciBoZWFkaW5nQXZh
aWxhYmxlXTsKKyN1bmRlZiBDTExvY2F0aW9uTWFuYWdlcgorCisgICAgW3NlbGYgY2hlY2tDbGll
bnRTdGF0dXNdOworfQorCistICh2b2lkKWNoZWNrQ2xpZW50U3RhdHVzCit7CisgICAgaWYgKCFw
dGhyZWFkX21haW5fbnAoKSkgeworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5U
aHJlYWQ6X2NtZCB3aXRoT2JqZWN0Om5pbCB3YWl0VW50aWxEb25lOk5PXTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFNpbmNlIHRoaXMgbWV0aG9kIGV4ZWN1dGVzIG9uIHRoZSBt
YWluIHRocmVhZCwgaXQgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQKKyAgICAvLyBhZnRlciB0aGUg
aW5pdGlhbGl6ZU9uTWFpblRocmVhZCBtZXRob2QgaGFzIHJ1biwgYW5kIGhlbmNlIHRoZXJlIHNo
b3VsZAorICAgIC8vIGJlIG5vIGNoYW5jZSB0aGF0IG1fbW90aW9uTWFuYWdlciBoYXMgbm90IGJl
ZW4gY3JlYXRlZC4KKyAgICBBU1NFUlQobV9tb3Rpb25NYW5hZ2VyKTsKKworICAgIGlmIChtX2Rl
dmljZU1vdGlvbkNsaWVudHMuc2l6ZSgpIHx8IG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzLnNp
emUoKSkgeworICAgICAgICBpZiAobV9neXJvQXZhaWxhYmxlKQorICAgICAgICAgICAgW21fbW90
aW9uTWFuYWdlciBzdGFydERldmljZU1vdGlvblVwZGF0ZXNdOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBbbV9tb3Rpb25NYW5hZ2VyIHN0YXJ0QWNjZWxlcm9tZXRlclVwZGF0ZXNdOworCisg
ICAgICAgIGlmIChtX2hlYWRpbmdBdmFpbGFibGUpCisgICAgICAgICAgICBbbV9sb2NhdGlvbk1h
bmFnZXIgc3RhcnRVcGRhdGluZ0hlYWRpbmddOworCisgICAgICAgIGlmICghbV91cGRhdGVUaW1l
cikgeworICAgICAgICAgICAgbV91cGRhdGVUaW1lciA9IFtbTlNUaW1lciBzY2hlZHVsZWRUaW1l
cldpdGhUaW1lSW50ZXJ2YWw6a01vdGlvblVwZGF0ZUludGVydmFsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDpzZWxm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxlY3RvcjpAc2VsZWN0b3IodXBkYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVw
ZWF0czpZRVNdIHJldGFpbl07CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBOU1Rp
bWVyICp0aW1lciA9IG1fdXBkYXRlVGltZXI7CisgICAgICAgIG1fdXBkYXRlVGltZXIgPSBuaWw7
CisgICAgICAgIFt0aW1lciBpbnZhbGlkYXRlXTsKKyAgICAgICAgW3RpbWVyIHJlbGVhc2VdOwor
CisgICAgICAgIGlmIChtX2d5cm9BdmFpbGFibGUpCisgICAgICAgICAgICBbbV9tb3Rpb25NYW5h
Z2VyIHN0b3BEZXZpY2VNb3Rpb25VcGRhdGVzXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
W21fbW90aW9uTWFuYWdlciBzdG9wQWNjZWxlcm9tZXRlclVwZGF0ZXNdOworCisgICAgICAgIGlm
IChtX2hlYWRpbmdBdmFpbGFibGUpCisgICAgICAgICAgICBbbV9sb2NhdGlvbk1hbmFnZXIgc3Rv
cFVwZGF0aW5nSGVhZGluZ107CisgICAgfQorfQorCistICh2b2lkKXVwZGF0ZQoreworICAgIC8v
IEl0J3MgZXh0cmVtZWx5IHVubGlrZWx5IHRoYXQgYW4gdXBkYXRlIGhhcHBlbnMgd2l0aG91dCBh
biBhY3RpdmUKKyAgICAvLyBtb3Rpb24gb3IgbG9jYXRpb24gbWFuYWdlciwgYnV0IHdlIHNob3Vs
ZCBndWFyZCBmb3IgdGhpcyBjYXNlIGp1c3QgaW4gY2FzZS4KKyAgICBpZiAoIW1fbW90aW9uTWFu
YWdlciB8fCAhbV9sb2NhdGlvbk1hbmFnZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAv
LyBXZSBzaG91bGQsIGhvd2V2ZXIsIGd1YXJkIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgbWFuYWdl
cnMgcmV0dXJuIG5pbCBkYXRhLgorICAgIENNRGV2aWNlTW90aW9uICpkZXZpY2VNb3Rpb24gPSBt
X21vdGlvbk1hbmFnZXIuZGV2aWNlTW90aW9uOworICAgIGlmIChtX2d5cm9BdmFpbGFibGUgJiYg
ZGV2aWNlTW90aW9uKQorICAgICAgICBbc2VsZiBzZW5kTW90aW9uRGF0YTpkZXZpY2VNb3Rpb24g
d2l0aEhlYWRpbmc6bV9sb2NhdGlvbk1hbmFnZXIuaGVhZGluZ107CisgICAgZWxzZSB7CisgICAg
ICAgIGlmIChDTUFjY2VsZXJvbWV0ZXJEYXRhICphY2NlbGVyb21ldGVyRGF0YSA9IG1fbW90aW9u
TWFuYWdlci5hY2NlbGVyb21ldGVyRGF0YSkKKyAgICAgICAgICAgIFtzZWxmIHNlbmRBY2NlbGVy
b21ldGVyRGF0YTphY2NlbGVyb21ldGVyRGF0YV07CisgICAgfQorfQorCistICh2b2lkKXNlbmRB
Y2NlbGVyb21ldGVyRGF0YTooQ01BY2NlbGVyb21ldGVyRGF0YSAqKW5ld0FjY2VsZXJhdGlvbgor
eworICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBDTUFjY2VsZXJhdGlvbiBhY2NlbCA9IG5l
d0FjY2VsZXJhdGlvbi5hY2NlbGVyYXRpb247CisKKyAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkRl
dmljZU1vdGlvbkNsaWVudElPUyo+IGNsaWVudHM7CisgICAgICAgIGNvcHlUb1ZlY3RvcihtX2Rl
dmljZU1vdGlvbkNsaWVudHMsIGNsaWVudHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNsaWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjbGllbnRzW2ldLT5tb3Rpb25D
aGFuZ2VkKDAsIDAsIDAsIGFjY2VsLnggKiBrR3Jhdml0eSwgYWNjZWwueSAqIGtHcmF2aXR5LCBh
Y2NlbC56ICoga0dyYXZpdHksIDAsIDAsIDApOworICAgIH0pOworfQorCistICh2b2lkKXNlbmRN
b3Rpb25EYXRhOihDTURldmljZU1vdGlvbiAqKW5ld01vdGlvbiB3aXRoSGVhZGluZzooQ0xIZWFk
aW5nICopbmV3SGVhZGluZworeworICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICAvLyBBY2Nl
bGVyYXRpb24gaXMgdXNlciArIGdyYXZpdHkKKyAgICAgICAgQ01BY2NlbGVyYXRpb24gdXNlckFj
Y2VsID0gbmV3TW90aW9uLnVzZXJBY2NlbGVyYXRpb247CisgICAgICAgIENNQWNjZWxlcmF0aW9u
IGdyYXZpdHkgPSBuZXdNb3Rpb24uZ3Jhdml0eTsKKyAgICAgICAgQ01BY2NlbGVyYXRpb24gdG90
YWxBY2NlbDsKKyAgICAgICAgdG90YWxBY2NlbC54ID0gdXNlckFjY2VsLnggKyBncmF2aXR5Lng7
CisgICAgICAgIHRvdGFsQWNjZWwueSA9IHVzZXJBY2NlbC55ICsgZ3Jhdml0eS55OworICAgICAg
ICB0b3RhbEFjY2VsLnogPSB1c2VyQWNjZWwueiArIGdyYXZpdHkuejsKKworICAgICAgICBDTVJv
dGF0aW9uUmF0ZSByb3RhdGlvblJhdGUgPSBuZXdNb3Rpb24ucm90YXRpb25SYXRlOworCisgICAg
ICAgIFZlY3RvcjxXZWJDb3JlOjpEZXZpY2VNb3Rpb25DbGllbnRJT1MqPiBtb3Rpb25DbGllbnRz
OworICAgICAgICBjb3B5VG9WZWN0b3IobV9kZXZpY2VNb3Rpb25DbGllbnRzLCBtb3Rpb25DbGll
bnRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtb3Rpb25DbGllbnRzLnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICBtb3Rpb25DbGllbnRzW2ldLT5tb3Rpb25DaGFuZ2VkKHVz
ZXJBY2NlbC54ICoga0dyYXZpdHksIHVzZXJBY2NlbC55ICoga0dyYXZpdHksIHVzZXJBY2NlbC56
ICoga0dyYXZpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvdGFsQWNjZWwueCAqIGtHcmF2aXR5LCB0b3RhbEFjY2VsLnkgKiBrR3Jhdml0eSwgdG90YWxB
Y2NlbC56ICoga0dyYXZpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJhZDJkZWcocm90YXRpb25SYXRlLngpLCByYWQyZGVnKHJvdGF0aW9uUmF0ZS55KSwg
cmFkMmRlZyhyb3RhdGlvblJhdGUueikpOworICAgICAgICB9CisKKyAgICAgICAgQ01BdHRpdHVk
ZSogYXR0aXR1ZGUgPSBuZXdNb3Rpb24uYXR0aXR1ZGU7CisKKyAgICAgICAgVmVjdG9yPFdlYkNv
cmU6OkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TKj4gb3JpZW50YXRpb25DbGllbnRzOworICAg
ICAgICBjb3B5VG9WZWN0b3IobV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudHMsIG9yaWVudGF0aW9u
Q2xpZW50cyk7CisKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBXM0MgRGV2aWNlT3JpZW50YXRp
b24gc3BlY2lmaWNhdGlvbiBsYWJlbHMgdGhlIFggYXhpcworICAgICAgICAvLyBhcyBwYXNzaW5n
IGJldHdlZW4gdGhlIHNpZGVzIG9mIHRoZSBkZXZpY2UsIGFuZCB0aGUgWSBheGlzIGFzIHBhc3Np
bmcKKyAgICAgICAgLy8gZnJvbSB0b3AgdG8gYm90dG9tIG9mIHRoZSBkZXZpY2UuIENvbnZlbnRp
b25hbCBUYWl0LUJyeWFuIEV1bGVyIGFuZ2xlcworICAgICAgICAvLyBoYXZlIHRoZSBYIGF4aXMg
cG9pbnRpbmcgZm9yd2FyZCAodGhlIGhlYWRpbmcgb2YgdGhlIGFpcmNyYWZ0LCBmb3IKKyAgICAg
ICAgLy8gZXhhbXBsZSksIHdoaWNoIGlzIHdoYXQgeW91IHdvdWxkICJyb2xsIiBhcm91bmQsIGFu
ZCB3aGF0IHRoZSBXM0Mgc2F5cworICAgICAgICAvLyBpcyB0aGUgWSBheGlzLiBVbmZvcnR1bmF0
ZWx5IENvcmVNb3Rpb24gZG9lc24ndCBub3JtYWxpemUgaW4gdGhlCisgICAgICAgIC8vIHNhbWUg
b3JkZXIgYXMgdGhlIFczQyByZXF1ZXN0cywgc28gb3VyIGJldGEgaXMgWy05MCwgOTBdIGFuZCBn
YW1tYSBpcworICAgICAgICAvLyBbLTE4MCwgMTgwXS4gRm9yIG1vc3QgcHJhY3RpY2FsIHVzZXMg
dGhpcyBpcyBhY2NlcHRhYmxlLgorICAgICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk0MTQ0
NTk+IE5vcm1hbGl6ZSBvdXIgRGV2aWNlT3JpZW50YXRpb24gYmV0YS9nYW1tYSBwZXIgc3BlYwor
CisgICAgICAgIC8vIFJvdGF0aW9uIGFyb3VuZCB0aGUgWiBheGlzIChwb2ludGluZyB1cCwgbm9y
bWFsaXplZCB0byBbMCwgMzYwXSBkZWcpLgorICAgICAgICBkb3VibGUgYWxwaGEgPSByYWQyZGVn
KGF0dGl0dWRlLnlhdyA+IDAgPyBhdHRpdHVkZS55YXcgOiAoTV9QSSAqIDIgKyBhdHRpdHVkZS55
YXcpKTsKKyAgICAgICAgLy8gUm90YXRpb24gYXJvdW5kIHRoZSBYIGF4aXMgKHNpZGUgdG8gc2lk
ZSkuCisgICAgICAgIGRvdWJsZSBiZXRhID0gcmFkMmRlZyhhdHRpdHVkZS5waXRjaCk7CisgICAg
ICAgIC8vIFJvdGF0aW9uIGFyb3VuZCB0aGUgWSBheGlzICh0b3AgdG8gYm90dG9tKS4KKyAgICAg
ICAgZG91YmxlIGdhbW1hID0gcmFkMmRlZyhhdHRpdHVkZS5yb2xsKTsKKworICAgICAgICBkb3Vi
bGUgaGVhZGluZyA9IChtX2hlYWRpbmdBdmFpbGFibGUgJiYgbmV3SGVhZGluZykgPyBuZXdIZWFk
aW5nLm1hZ25ldGljSGVhZGluZyA6IDA7CisgICAgICAgIGRvdWJsZSBoZWFkaW5nQWNjdXJhY3kg
PSAobV9oZWFkaW5nQXZhaWxhYmxlICYmIG5ld0hlYWRpbmcpID8gbmV3SGVhZGluZy5oZWFkaW5n
QWNjdXJhY3kgOiAtMTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9yaWVudGF0
aW9uQ2xpZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG9yaWVudGF0aW9uQ2xpZW50c1tp
XS0+b3JpZW50YXRpb25DaGFuZ2VkKGFscGhhLCBiZXRhLCBnYW1tYSwgaGVhZGluZywgaGVhZGlu
Z0FjY3VyYWN5KTsKKyAgICB9KTsKK30KKworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjg4YWQ1NWY2NWE5MDhkNDA2YTE5Yzk3NjFjMjViY2FiMTM3MWQ0NDEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZUlPUy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViQ29yZVN5c3Rl
bUludGVyZmFjZUlPU19oCisjZGVmaW5lIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1NfaAorCisj
aW5jbHVkZSA8QXZhaWxhYmlsaXR5Lmg+CisKK3R5cGVkZWYgZW51bSB7CisgICAgd2tJT1NTeXN0
ZW1WZXJzaW9uXzNfMCA9IF9fSVBIT05FXzNfMCwKKyAgICB3a0lPU1N5c3RlbVZlcnNpb25fNF8y
ID0gX19JUEhPTkVfNF8yLAorICAgIHdrSU9TU3lzdGVtVmVyc2lvbl81XzAgPSBfX0lQSE9ORV81
XzAsCisgICAgd2tJT1NTeXN0ZW1WZXJzaW9uXzZfMCA9IF9fSVBIT05FXzZfMCwKK30gd2tJT1NT
eXN0ZW1WZXJzaW9uOworCitib29sIGlvc0V4ZWN1dGFibGVXYXNMaW5rZWRPbk9yQWZ0ZXJWZXJz
aW9uKHdrSU9TU3lzdGVtVmVyc2lvbik7CisKK2V4dGVybiBib29sICgqd2tFeGVjdXRhYmxlV2Fz
TGlua2VkT25PckFmdGVySU9TVmVyc2lvbikoaW50KTsKKworZXh0ZXJuIGJvb2wgKCp3a0lzR0Ix
ODAzMENvbXBsaWFuY2VSZXF1aXJlZCkodm9pZCk7CisKK2lubGluZSBib29sIGlvc0V4ZWN1dGFi
bGVXYXNMaW5rZWRPbk9yQWZ0ZXJWZXJzaW9uKHdrSU9TU3lzdGVtVmVyc2lvbiB2ZXJzaW9uKQor
eworICAgIHJldHVybiB3a0V4ZWN1dGFibGVXYXNMaW5rZWRPbk9yQWZ0ZXJJT1NWZXJzaW9uKHZl
cnNpb24pOworfQorCit0eXBlZGVmIGVudW0geworICAgIHdrRGV2aWNlQ2xhc3NJbnZhbGlkID0g
LTEsCisgICAgd2tEZXZpY2VDbGFzc2lQYWQsCisgICAgd2tEZXZpY2VDbGFzc2lQaG9uZSwKKyAg
ICB3a0RldmljZUNsYXNzaVBvZCwKK30gd2tEZXZpY2VDbGFzczsKK2V4dGVybiBpbnQgKCp3a0dl
dERldmljZUNsYXNzKSh2b2lkKTsKK2lubGluZSB3a0RldmljZUNsYXNzIGlvc0RldmljZUNsYXNz
KHZvaWQpCit7CisgICAgaW50IGRldmljZUNsYXNzID0gd2tHZXREZXZpY2VDbGFzcygpOworICAg
IHN3aXRjaCAoZGV2aWNlQ2xhc3MpIHsKKyAgICBjYXNlIHdrRGV2aWNlQ2xhc3NJbnZhbGlkOgor
ICAgIGNhc2Ugd2tEZXZpY2VDbGFzc2lQYWQ6CisgICAgY2FzZSB3a0RldmljZUNsYXNzaVBob25l
OgorICAgIGNhc2Ugd2tEZXZpY2VDbGFzc2lQb2Q6CisgICAgICAgIHJldHVybiAod2tEZXZpY2VD
bGFzcylkZXZpY2VDbGFzczsKKyAgICB9CisgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICByZXR1cm4g
d2tEZXZpY2VDbGFzc0ludmFsaWQ7Cit9CisKK2V4dGVybiBDRlN0cmluZ1JlZiAoKndrR2V0VXNl
ckFnZW50KSh2b2lkKTsKK2V4dGVybiBDRlN0cmluZ1JlZiAoKndrR2V0UGxhdGZvcm1OYW1lRm9y
TmF2aWdhdG9yKSh2b2lkKTsKK2V4dGVybiBDRlN0cmluZ1JlZiAoKndrR2V0VmVuZG9yTmFtZUZv
ck5hdmlnYXRvcikodm9pZCk7CisKKyNlbmRpZiAvLyBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9T
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlU3lzdGVt
SW50ZXJmYWNlSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0
ZW1JbnRlcmZhY2VJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWI3NjRhNWU0M2RmYTlmMTdlMzJhOTRmN2Ix
MGQ0NTA4NDg3MDA3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tCkBAIC0wLDAgKzEsMTQyIEBACisvKgor
ICogQ29weXJpZ2h0IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJD
b3JlU3lzdGVtSW50ZXJmYWNlLmgiCisKK3ZvaWQgKCp3a0NBTGF5ZXJFbnVtZXJhdGVSZWN0c0Jl
aW5nRHJhd25XaXRoQmxvY2spKENBTGF5ZXIgKiwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIHZvaWQg
KF5ibG9jaykoQ0dSZWN0IHJlY3QpKTsKK0JPT0wgKCp3a0NHQ29udGV4dEdldFNob3VsZFNtb290
aEZvbnRzKShDR0NvbnRleHRSZWYpOworQ0dQYXR0ZXJuUmVmICgqd2tDR1BhdHRlcm5DcmVhdGVX
aXRoSW1hZ2VBbmRUcmFuc2Zvcm0pKENHSW1hZ2VSZWYsIENHQWZmaW5lVHJhbnNmb3JtLCBpbnQp
Owordm9pZCAoKndrQ0dDb250ZXh0UmVzZXRDbGlwKShDR0NvbnRleHRSZWYpOyAKK0NGU3RyaW5n
UmVmICgqd2tDb3B5Q0ZMb2NhbGl6YXRpb25QcmVmZXJyZWROYW1lKShDRlN0cmluZ1JlZik7Cit2
b2lkICgqd2tDbGVhckdseXBoVmVjdG9yKSh2b2lkKiBnbHlwaHMpOworT1NTdGF0dXMgKCp3a0Nv
bnZlcnRDaGFyVG9HbHlwaHMpKHZvaWQqIHN0eWxlR3JvdXAsIGNvbnN0IFVuaUNoYXIqLCB1bnNp
Z25lZCBudW1DaGFyYWN0ZXJzLCB2b2lkKiBnbHlwaHMpOworTlNTdHJpbmcqICgqd2tHZXRNSU1F
VHlwZUZvckV4dGVuc2lvbikoTlNTdHJpbmcqKTsKK05TRGF0ZSAqKCp3a0dldE5TVVJMUmVzcG9u
c2VMYXN0TW9kaWZpZWREYXRlKShOU1VSTFJlc3BvbnNlICpyZXNwb25zZSk7Cit2b2lkICgqd2tT
ZXRCYXNlQ1RNKShDR0NvbnRleHRSZWYsIENHQWZmaW5lVHJhbnNmb3JtKTsKK3ZvaWQgKCp3a1Nl
dFBhdHRlcm5QaGFzZUluVXNlclNwYWNlKShDR0NvbnRleHRSZWYsIENHUG9pbnQgcG9pbnQpOwor
Q0dBZmZpbmVUcmFuc2Zvcm0gKCp3a0dldFVzZXJUb0Jhc2VDVE0pKENHQ29udGV4dFJlZik7Citi
b29sICgqd2tDR0NvbnRleHRJc1BERkNvbnRleHQpKENHQ29udGV4dFJlZik7Cit2b2lkICgqd2tT
ZXRVcEZvbnRDYWNoZSkoKTsKK3ZvaWQgKCp3a1NpZ25hbENGUmVhZFN0cmVhbUVuZCkoQ0ZSZWFk
U3RyZWFtUmVmIHN0cmVhbSk7Cit2b2lkICgqd2tTaWduYWxDRlJlYWRTdHJlYW1IYXNCeXRlcyko
Q0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSk7Cit2b2lkICgqd2tTaWduYWxDRlJlYWRTdHJlYW1FcnJv
cikoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgQ0ZTdHJlYW1FcnJvciAqZXJyb3IpOworQ0ZSZWFk
U3RyZWFtUmVmICgqd2tDcmVhdGVDdXN0b21DRlJlYWRTdHJlYW0pKHZvaWQgKigqZm9ybUNyZWF0
ZSkoQ0ZSZWFkU3RyZWFtUmVmLCB2b2lkICopLCAKKyAgICB2b2lkICgqZm9ybUZpbmFsaXplKShD
RlJlYWRTdHJlYW1SZWYsIHZvaWQgKiksIAorICAgIEJvb2xlYW4gKCpmb3JtT3BlbikoQ0ZSZWFk
U3RyZWFtUmVmLCBDRlN0cmVhbUVycm9yICosIEJvb2xlYW4gKiwgdm9pZCAqKSwgCisgICAgQ0ZJ
bmRleCAoKmZvcm1SZWFkKShDRlJlYWRTdHJlYW1SZWYsIFVJbnQ4ICosIENGSW5kZXgsIENGU3Ry
ZWFtRXJyb3IgKiwgQm9vbGVhbiAqLCB2b2lkICopLCAKKyAgICBCb29sZWFuICgqZm9ybUNhblJl
YWQpKENGUmVhZFN0cmVhbVJlZiwgdm9pZCAqKSwgCisgICAgdm9pZCAoKmZvcm1DbG9zZSkoQ0ZS
ZWFkU3RyZWFtUmVmLCB2b2lkICopLCAKKyAgICB2b2lkICgqZm9ybVNjaGVkdWxlKShDRlJlYWRT
dHJlYW1SZWYsIENGUnVuTG9vcFJlZiwgQ0ZTdHJpbmdSZWYsIHZvaWQgKiksIAorICAgIHZvaWQg
KCpmb3JtVW5zY2hlZHVsZSkoQ0ZSZWFkU3RyZWFtUmVmLCBDRlJ1bkxvb3BSZWYsIENGU3RyaW5n
UmVmLCB2b2lkICopLAorICAgIHZvaWQgKmNvbnRleHQpOworTlNTdHJpbmcqICgqd2tDb3B5TlNV
UkxSZXNwb25zZVN0YXR1c0xpbmUpKE5TVVJMUmVzcG9uc2UqKTsKK3ZvaWQgKCp3a1NldE5TVVJM
Q29ubmVjdGlvbkRlZmVyc0NhbGxiYWNrcykoTlNVUkxDb25uZWN0aW9uICosIEJPT0wpOwordm9p
ZCAoKndrU2V0TlNVUkxSZXF1ZXN0U2hvdWxkQ29udGVudFNuaWZmKShOU011dGFibGVVUkxSZXF1
ZXN0ICosIEJPT0wpOworaWQgKCp3a0NyZWF0ZU5TVVJMQ29ubmVjdGlvbkRlbGVnYXRlUHJveHkp
KHZvaWQpOwordW5zaWduZWQgKCp3a0luaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3Vu
dFBlckhvc3QpKHVuc2lnbmVkIHByZWZlcnJlZENvbm5lY3Rpb25Db3VudCk7CitpbnQgKCp3a0dl
dEhUVFBQaXBlbGluaW5nUHJpb3JpdHkpKENGVVJMUmVxdWVzdFJlZik7Cit2b2lkICgqd2tTZXRI
VFRQUGlwZWxpbmluZ01heGltdW1Qcmlvcml0eSkoaW50IHByaW9yaXR5KTsKK3ZvaWQgKCp3a1Nl
dEhUVFBQaXBlbGluaW5nUHJpb3JpdHkpKENGVVJMUmVxdWVzdFJlZiwgaW50IHByaW9yaXR5KTsK
K3ZvaWQgKCp3a1NldEhUVFBQaXBlbGluaW5nTWluaW11bUZhc3RMYW5lUHJpb3JpdHkpKGludCBw
cmlvcml0eSk7Cit2b2lkICgqd2tTZXRDT05ORUNUUHJveHlGb3JTdHJlYW0pKENGUmVhZFN0cmVh
bVJlZiwgQ0ZTdHJpbmdSZWYgcHJveHlIb3N0LCBDRk51bWJlclJlZiBwcm94eVBvcnQpOwordm9p
ZCAoKndrU2V0Q09OTkVDVFByb3h5QXV0aG9yaXphdGlvbkZvclN0cmVhbSkoQ0ZSZWFkU3RyZWFt
UmVmLCBDRlN0cmluZ1JlZiBwcm94eUF1dGhvcml6YXRpb25TdHJpbmcpOwordm9pZCAoKndrU2V0
Q29va2llU3RvcmFnZVByaXZhdGVCcm93c2luZ0VuYWJsZWQpKEJPT0wpOworQ0ZIVFRQTWVzc2Fn
ZVJlZiAoKndrQ29weUNPTk5FQ1RQcm94eVJlc3BvbnNlKShDRlJlYWRTdHJlYW1SZWYsIENGVVJM
UmVmIHJlc3BvbnNlVVJMLCBDRlN0cmluZ1JlZiBwcm94eUhvc3QsIENGTnVtYmVyUmVmIHByb3h5
UG9ydCk7Citib29sICgqd2tFeGVjdXRhYmxlV2FzTGlua2VkT25PckFmdGVySU9TVmVyc2lvbiko
aW50KTsKK2ludCAoKndrR2V0RGV2aWNlQ2xhc3MpKHZvaWQpOworQ0dTaXplICgqd2tHZXRWaWV3
cG9ydFNjcmVlblNpemUpKHZvaWQpOwordm9pZCAoKndrU2V0TGF5ZXJDb250ZW50c1NjYWxlKShD
QUxheWVyICopOworZmxvYXQgKCp3a0dldFNjcmVlblNjYWxlRmFjdG9yKSh2b2lkKTsKK2Jvb2wg
KCp3a0lzR0IxODAzMENvbXBsaWFuY2VSZXF1aXJlZCkodm9pZCk7Cit2b2lkICgqd2tDR1BhdGhB
ZGRSb3VuZGVkUmVjdCkoQ0dNdXRhYmxlUGF0aFJlZiBwYXRoLCBjb25zdCBDR0FmZmluZVRyYW5z
Zm9ybSogbWF0cml4LCBDR1JlY3QgcmVjdCwgQ0dGbG9hdCBjb3JuZXJXaWR0aCwgQ0dGbG9hdCBj
b3JuZXJIZWlnaHQpOyAKK3ZvaWQgKCp3a0NGVVJMUmVxdWVzdEFsbG93QWxsUG9zdENhY2hpbmcp
KENGVVJMUmVxdWVzdFJlZik7CitDRkFycmF5UmVmICgqd2tDb3B5TlNVUkxSZXNwb25zZUNlcnRp
ZmljYXRlQ2hhaW4pKE5TVVJMUmVzcG9uc2UqKTsKKworI2lmIFVTRShDRk5FVFdPUkspCitDRkhU
VFBDb29raWVTdG9yYWdlUmVmICgqd2tHZXREZWZhdWx0SFRUUENvb2tpZVN0b3JhZ2UpKCk7CitX
S0NGVVJMQ3JlZGVudGlhbFJlZiAoKndrQ29weUNyZWRlbnRpYWxGcm9tQ0ZQZXJzaXN0ZW50U3Rv
cmFnZSkoQ0ZVUkxQcm90ZWN0aW9uU3BhY2VSZWYgcHJvdGVjdGlvblNwYWNlKTsKK3ZvaWQgKCp3
a1NldENGVVJMUmVxdWVzdFNob3VsZENvbnRlbnRTbmlmZikoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJl
ZiwgYm9vbCk7CitDRkFycmF5UmVmICgqd2tDRlVSTFJlcXVlc3RDb3B5SFRUUFJlcXVlc3RCb2R5
UGFydHMpKENGVVJMUmVxdWVzdFJlZik7Cit2b2lkICgqd2tDRlVSTFJlcXVlc3RTZXRIVFRQUmVx
dWVzdEJvZHlQYXJ0cykoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZiwgQ0ZBcnJheVJlZiBib2R5UGFy
dHMpOwordm9pZCAoKndrU2V0UmVxdWVzdFN0b3JhZ2VTZXNzaW9uKShDRlVSTFN0b3JhZ2VTZXNz
aW9uUmVmLCBDRk11dGFibGVVUkxSZXF1ZXN0UmVmKTsKKyNlbmRpZgorCitib29sICgqd2tHZXRW
ZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3RlcnMpKENURm9udFJlZiwgY29uc3QgVW5pQ2hhcltdLCBD
R0dseXBoW10sIHNpemVfdCk7CitDVExpbmVSZWYgKCp3a0NyZWF0ZUNUTGluZVdpdGhVbmlDaGFy
UHJvdmlkZXIpKGNvbnN0IFVuaUNoYXIqICgqcHJvdmlkZSkoQ0ZJbmRleCBzdHJpbmdJbmRleCwg
Q0ZJbmRleCogY2hhckNvdW50LCBDRkRpY3Rpb25hcnlSZWYqIGF0dHJpYnV0ZXMsIHZvaWQqKSwg
dm9pZCAoKmRpc3Bvc2UpKGNvbnN0IFVuaUNoYXIqIGNoYXJzLCB2b2lkKiksIHZvaWQqKTsKK2Jv
b2wgKCp3a0NURm9udFRyYW5zZm9ybUdseXBocykoQ1RGb250UmVmIGZvbnQsIENHR2x5cGggZ2x5
cGhzW10sIENHU2l6ZSBhZHZhbmNlc1tdLCBDRkluZGV4IGNvdW50LCB3a0NURm9udFRyYW5zZm9y
bU9wdGlvbnMgb3B0aW9ucyk7CisKK0NHU2l6ZSAoKndrQ1RSdW5HZXRJbml0aWFsQWR2YW5jZSko
Q1RSdW5SZWYpOworCitDVFR5cGVzZXR0ZXJSZWYgKCp3a0NyZWF0ZUNUVHlwZXNldHRlcldpdGhV
bmlDaGFyUHJvdmlkZXJBbmRPcHRpb25zKShjb25zdCBVbmlDaGFyKiAoKnByb3ZpZGUpKENGSW5k
ZXggc3RyaW5nSW5kZXgsIENGSW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRy
aWJ1dGVzLCB2b2lkKiksIHZvaWQgKCpkaXNwb3NlKShjb25zdCBVbmlDaGFyKiBjaGFycywgdm9p
ZCopLCB2b2lkKiwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpOworCisjaWYgIVBMQVRGT1JNKElP
U19TSU1VTEFUT1IpCitDR0NvbnRleHRSZWYgKCp3a0lPU3VyZmFjZUNvbnRleHRDcmVhdGUpKElP
U3VyZmFjZVJlZiBzdXJmYWNlLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBDR0Nv
bG9yU3BhY2VSZWYgY29sb3JTcGFjZSk7CitDR0ltYWdlUmVmICgqd2tJT1N1cmZhY2VDb250ZXh0
Q3JlYXRlSW1hZ2UpKENHQ29udGV4dFJlZiBjb250ZXh0KTsKKyNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TX1NJTVVMQVRPUikKKworQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiAoKndrQ3JlYXRlUHJpdmF0
ZVN0b3JhZ2VTZXNzaW9uKShDRlN0cmluZ1JlZik7CitOU1VSTFJlcXVlc3QqICgqd2tDb3B5UmVx
dWVzdFdpdGhTdG9yYWdlU2Vzc2lvbikoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiwgTlNVUkxSZXF1
ZXN0Kik7CitDRkhUVFBDb29raWVTdG9yYWdlUmVmICgqd2tDb3B5SFRUUENvb2tpZVN0b3JhZ2Up
KENGVVJMU3RvcmFnZVNlc3Npb25SZWYpOwordW5zaWduZWQgKCp3a0dldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYpOwordm9pZCAoKndrU2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeSkoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiwgdW5zaWduZWQpOworTlNBcnJh
eSAqKCp3a0hUVFBDb29raWVzKShDRkhUVFBDb29raWVTdG9yYWdlUmVmKTsKK05TQXJyYXkgKigq
d2tIVFRQQ29va2llc0ZvclVSTCkoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiwgTlNVUkwgKik7Cit2
b2lkICgqd2tTZXRIVFRQQ29va2llc0ZvclVSTCkoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiwgTlNB
cnJheSAqLCBOU1VSTCAqLCBOU1VSTCAqKTsKK3ZvaWQgKCp3a0RlbGV0ZUFsbEhUVFBDb29raWVz
KShDRkhUVFBDb29raWVTdG9yYWdlUmVmKTsKK3ZvaWQgKCp3a0RlbGV0ZUhUVFBDb29raWUpKENG
SFRUUENvb2tpZVN0b3JhZ2VSZWYsIE5TSFRUUENvb2tpZSAqKTsKKworQ0ZTdHJpbmdSZWYgKCp3
a0dldENGVVJMUmVzcG9uc2VNSU1FVHlwZSkoQ0ZVUkxSZXNwb25zZVJlZik7CitDRlVSTFJlZiAo
KndrR2V0Q0ZVUkxSZXNwb25zZVVSTCkoQ0ZVUkxSZXNwb25zZVJlZik7CitDRkhUVFBNZXNzYWdl
UmVmICgqd2tHZXRDRlVSTFJlc3BvbnNlSFRUUFJlc3BvbnNlKShDRlVSTFJlc3BvbnNlUmVmKTsK
K0NGU3RyaW5nUmVmICgqd2tDb3B5Q0ZVUkxSZXNwb25zZVN1Z2dlc3RlZEZpbGVuYW1lKShDRlVS
TFJlc3BvbnNlUmVmKTsKK3ZvaWQgKCp3a1NldENGVVJMUmVzcG9uc2VNSU1FVHlwZSkoQ0ZVUkxS
ZXNwb25zZVJlZiwgQ0ZTdHJpbmdSZWYgbWltZVR5cGUpOworCit2b2lkKCp3a0Rlc3Ryb3lSZW5k
ZXJpbmdSZXNvdXJjZXMpKHZvaWQpOworCitib29sICgqd2tDYXB0aW9uQXBwZWFyYW5jZUhhc1Vz
ZXJQcmVmZXJlbmNlcykodm9pZCk7Citib29sICgqd2tDYXB0aW9uQXBwZWFyYW5jZVNob3dDYXB0
aW9uc1doZW5BdmFpbGFibGUpKHZvaWQpOworQ0dDb2xvclJlZigqd2tDYXB0aW9uQXBwZWFyYW5j
ZUNvcHlGb3JlZ3JvdW5kQ29sb3IpKHZvaWQpOworQ0dDb2xvclJlZigqd2tDYXB0aW9uQXBwZWFy
YW5jZUNvcHlCYWNrZ3JvdW5kQ29sb3IpKHZvaWQpOworQ0dDb2xvclJlZigqd2tDYXB0aW9uQXBw
ZWFyYW5jZUNvcHlXaW5kb3dDb2xvcikodm9pZCk7Citib29sKCp3a0NhcHRpb25BcHBlYXJhbmNl
R2V0Rm9yZWdyb3VuZE9wYWNpdHkpKENHRmxvYXQqKTsKK2Jvb2woKndrQ2FwdGlvbkFwcGVhcmFu
Y2VHZXRCYWNrZ3JvdW5kT3BhY2l0eSkoQ0dGbG9hdCopOworYm9vbCgqd2tDYXB0aW9uQXBwZWFy
YW5jZUdldFdpbmRvd09wYWNpdHkpKENHRmxvYXQqKTsKK0NHRm9udFJlZigqd2tDYXB0aW9uQXBw
ZWFyYW5jZUNvcHlGb250Rm9yU3R5bGUpKGludCk7Citib29sKCp3a0NhcHRpb25BcHBlYXJhbmNl
R2V0UmVsYXRpdmVDaGFyYWN0ZXJTaXplKShDR0Zsb2F0Kik7CitpbnQoKndrQ2FwdGlvbkFwcGVh
cmFuY2VHZXRUZXh0RWRnZVN0eWxlKSh2b2lkKTsKK0NGU3RyaW5nUmVmKCp3a0NhcHRpb25BcHBl
YXJhbmNlR2V0U2V0dGluZ3NDaGFuZ2VkTm90aWZpY2F0aW9uKSh2b2lkKTsKKworI2lmIEVOQUJM
RShQVUJMSUNfU1VGRklYX0xJU1QpCitib29sICgqd2tJc1B1YmxpY1N1ZmZpeCkoTlNTdHJpbmcg
Kmhvc3QpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorQ0ZTdHJp
bmdSZWYgKCp3a0NhY2hlUGFydGl0aW9uS2V5KSh2b2lkKTsKKyNlbmRpZgorCitDRlN0cmluZ1Jl
ZiAoKndrR2V0VXNlckFnZW50KSh2b2lkKTsKK0NGU3RyaW5nUmVmICgqd2tHZXRQbGF0Zm9ybU5h
bWVGb3JOYXZpZ2F0b3IpKHZvaWQpOworQ0ZTdHJpbmdSZWYgKCp3a0dldFZlbmRvck5hbWVGb3JO
YXZpZ2F0b3IpKHZvaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYkV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViRXZlbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wZjgyOTk3ZWZlMjgxZGYzMTI4MjlmOTk1ODJlZGRkMWM0MDA4MDUzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkV2ZW50LmgKQEAgLTAs
MCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBGSVhNRTogUmVuYW1lIHRoaXMgZmlsZSB0byBX
ZWJFdmVudElPUy5oIGFmdGVyIHdlIHVwc3RyZWFtIHRoZSBpT1MgcG9ydC4KKyNpZm5kZWYgV2Vi
RXZlbnRJT1NfaAorI2RlZmluZSBXZWJFdmVudElPU19oCisKKyNpbXBvcnQgPENvcmVHcmFwaGlj
cy9Db3JlR3JhcGhpY3MuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCit0
eXBlZGVmIGVudW0geworICAgIFdlYkV2ZW50TW91c2VEb3duLAorICAgIFdlYkV2ZW50TW91c2VV
cCwKKyAgICBXZWJFdmVudE1vdXNlTW92ZWQsCisgICAgCisgICAgV2ViRXZlbnRTY3JvbGxXaGVl
bCwKKyAgICAKKyAgICBXZWJFdmVudEtleURvd24sCisgICAgV2ViRXZlbnRLZXlVcCwKKyAgICAK
KyAgICBXZWJFdmVudFRvdWNoQmVnaW4sCisgICAgV2ViRXZlbnRUb3VjaENoYW5nZSwKKyAgICBX
ZWJFdmVudFRvdWNoRW5kLAorICAgIFdlYkV2ZW50VG91Y2hDYW5jZWwKK30gV2ViRXZlbnRUeXBl
OworCit0eXBlZGVmIGVudW0geworICAgIFdlYkV2ZW50VG91Y2hQaGFzZUJlZ2FuLAorICAgIFdl
YkV2ZW50VG91Y2hQaGFzZU1vdmVkLAorICAgIFdlYkV2ZW50VG91Y2hQaGFzZVN0YXRpb25hcnks
CisgICAgV2ViRXZlbnRUb3VjaFBoYXNlRW5kZWQsCisgICAgV2ViRXZlbnRUb3VjaFBoYXNlQ2Fu
Y2VsbGVkCit9IFdlYkV2ZW50VG91Y2hQaGFzZVR5cGU7CisKKy8vIFRoZXNlIGVudW0gdmFsdWVz
IGFyZSBjb3BpZWQgZGlyZWN0bHkgZnJvbSBHU0V2ZW50IGZvciBjb21wYXRpYmlsaXR5LgordHlw
ZWRlZiBlbnVtIHsKKyAgICBXZWJFdmVudEZsYWdNYXNrQWxwaGFTaGlmdCA9IDB4MDAwMTAwMDAs
CisgICAgV2ViRXZlbnRGbGFnTWFza1NoaWZ0ICAgICAgPSAweDAwMDIwMDAwLAorICAgIFdlYkV2
ZW50RmxhZ01hc2tDb250cm9sICAgID0gMHgwMDA0MDAwMCwKKyAgICBXZWJFdmVudEZsYWdNYXNr
QWx0ZXJuYXRlICA9IDB4MDAwODAwMDAsCisgICAgV2ViRXZlbnRGbGFnTWFza0NvbW1hbmQgICAg
PSAweDAwMTAwMDAwLAorfSBXZWJFdmVudEZsYWdWYWx1ZXM7Cit0eXBlZGVmIHVuc2lnbmVkIFdl
YkV2ZW50RmxhZ3M7CisKKy8vIFRoZXNlIGVudW0gdmFsdWVzIGFyZSBjb3BpZWQgZGlyZWN0bHkg
ZnJvbSBHU0V2ZW50IGZvciBjb21wYXRpYmlsaXR5LgordHlwZWRlZiBlbnVtIHsKKyAgICBXZWJF
dmVudENoYXJhY3RlclNldEFTQ0lJICAgICAgICAgICA9IDAsCisgICAgV2ViRXZlbnRDaGFyYWN0
ZXJTZXRTeW1ib2wgICAgICAgICAgPSAxLAorICAgIFdlYkV2ZW50Q2hhcmFjdGVyU2V0RGluZ2Jh
dHMgICAgICAgID0gMiwKKyAgICBXZWJFdmVudENoYXJhY3RlclNldFVuaWNvZGUgICAgICAgICA9
IDI1MywKKyAgICBXZWJFdmVudENoYXJhY3RlclNldEZ1bmN0aW9uS2V5cyAgICA9IDI1NCwKK30g
V2ViRXZlbnRDaGFyYWN0ZXJTZXQ7CisKK0BpbnRlcmZhY2UgV2ViRXZlbnQgOiBOU09iamVjdCB7
CitAcHJpdmF0ZQorICAgIFdlYkV2ZW50VHlwZSBfdHlwZTsKKyAgICBDRlRpbWVJbnRlcnZhbCBf
dGltZXN0YW1wOworICAgIAorICAgIENHUG9pbnQgX2xvY2F0aW9uSW5XaW5kb3c7CisgICAgCisg
ICAgTlNTdHJpbmcgKl9jaGFyYWN0ZXJzOworICAgIE5TU3RyaW5nICpfY2hhcmFjdGVyc0lnbm9y
aW5nTW9kaWZpZXJzOworICAgIFdlYkV2ZW50RmxhZ3MgX21vZGlmaWVyRmxhZ3M7CisgICAgQk9P
TCBfa2V5UmVwZWF0aW5nOworICAgIEJPT0wgX3BvcHVwVmFyaWFudDsgLy8gRklYTUU6IHRvIGJl
IHJlbW92ZWQKKyAgICBOU1VJbnRlZ2VyIF9rZXlib2FyZEZsYWdzOworICAgIHVpbnQxNl90IF9r
ZXlDb2RlOworICAgIEJPT0wgX3RhYktleTsKKyAgICBXZWJFdmVudENoYXJhY3RlclNldCBfY2hh
cmFjdGVyU2V0OworICAgIAorICAgIGZsb2F0IF9kZWx0YVg7CisgICAgZmxvYXQgX2RlbHRhWTsK
KyAgICAKKyAgICB1bnNpZ25lZCBfdG91Y2hDb3VudDsKKyAgICBOU0FycmF5ICpfdG91Y2hMb2Nh
dGlvbnM7CisgICAgTlNBcnJheSAqX3RvdWNoSWRlbnRpZmllcnM7CisgICAgTlNBcnJheSAqX3Rv
dWNoUGhhc2VzOworICAgIAorICAgIEJPT0wgX2lzR2VzdHVyZTsKKyAgICBmbG9hdCBfZ2VzdHVy
ZVNjYWxlOworICAgIGZsb2F0IF9nZXN0dXJlUm90YXRpb247CisKKyAgICBCT09MIF93YXNIYW5k
bGVkOworfQorCistIChXZWJFdmVudCAqKWluaXRXaXRoTW91c2VFdmVudFR5cGU6KFdlYkV2ZW50
VHlwZSl0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RhbXA6KENGVGltZUlu
dGVydmFsKXRpbWVTdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOihD
R1BvaW50KXBvaW50OworCistIChXZWJFdmVudCAqKWluaXRXaXRoU2Nyb2xsV2hlZWxFdmVudFdp
dGhUaW1lU3RhbXA6KENGVGltZUludGVydmFsKXRpbWVTdGFtcAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOihDR1BvaW50KXBvaW50CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFYOihmbG9hdClkZWx0
YVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YVk6
KGZsb2F0KWRlbHRhWTsKKworLSAoV2ViRXZlbnQgKilpbml0V2l0aFRvdWNoRXZlbnRUeXBlOihX
ZWJFdmVudFR5cGUpdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVN0YW1wOihD
RlRpbWVJbnRlcnZhbCl0aW1lU3RhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nh
dGlvbjooQ0dQb2ludClwb2ludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJz
OihXZWJFdmVudEZsYWdzKW1vZGlmaWVycworICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Vj
aENvdW50Oih1bnNpZ25lZCl0b3VjaENvdW50CisgICAgICAgICAgICAgICAgICAgICAgdG91Y2hM
b2NhdGlvbnM6KE5TQXJyYXkgKil0b3VjaExvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICB0
b3VjaElkZW50aWZpZXJzOihOU0FycmF5ICopdG91Y2hJZGVudGlmaWVycworICAgICAgICAgICAg
ICAgICAgICAgICAgIHRvdWNoUGhhc2VzOihOU0FycmF5ICopdG91Y2hQaGFzZXMgaXNHZXN0dXJl
OihCT09MKWlzR2VzdHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgZ2VzdHVyZVNjYWxlOihm
bG9hdClnZXN0dXJlU2NhbGUKKyAgICAgICAgICAgICAgICAgICAgIGdlc3R1cmVSb3RhdGlvbjoo
ZmxvYXQpZ2VzdHVyZVJvdGF0aW9uOworCisvLyBGSVhNRTogdGhpcyBpcyBkZXByZWNhdGVkLiBJ
dCB3aWxsIGJlIHJlbW92ZWQgd2hlbiBVSUtpdCBhZG9wdHMgdGhlIG5ldyBvbmUgYmVsb3cuCist
IChXZWJFdmVudCAqKWluaXRXaXRoS2V5RXZlbnRUeXBlOihXZWJFdmVudFR5cGUpdHlwZQorICAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbWVTdGFtcDooQ0ZUaW1lSW50ZXJ2YWwpdGltZVN0YW1w
CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzOihOU1N0cmluZyAqKWNoYXJhY3Rl
cnMKKyAgICAgICBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM6KE5TU3RyaW5nICopY2hhcmFj
dGVyc0lnbm9yaW5nTW9kaWZpZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJz
OihXZWJFdmVudEZsYWdzKW1vZGlmaWVycworICAgICAgICAgICAgICAgICAgICAgICBpc1JlcGVh
dGluZzooQk9PTClyZXBlYXRpbmcKKyAgICAgICAgICAgICAgICAgICAgaXNQb3B1cFZhcmlhbnQ6
KEJPT0wpcG9wdXBWYXJpYW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb2RlOih1
aW50MTZfdClrZXlDb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGFiS2V5OihCT09M
KXRhYktleQorICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlclNldDooV2ViRXZlbnRDaGFy
YWN0ZXJTZXQpY2hhcmFjdGVyU2V0OworCistIChXZWJFdmVudCAqKWluaXRXaXRoS2V5RXZlbnRU
eXBlOihXZWJFdmVudFR5cGUpdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVTdGFt
cDooQ0ZUaW1lSW50ZXJ2YWwpdGltZVN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
YWN0ZXJzOihOU1N0cmluZyAqKWNoYXJhY3RlcnMKKyAgICAgICBjaGFyYWN0ZXJzSWdub3JpbmdN
b2RpZmllcnM6KE5TU3RyaW5nICopY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzCisgICAgICAg
ICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzOihXZWJFdmVudEZsYWdzKW1vZGlmaWVycworICAg
ICAgICAgICAgICAgICAgICAgICBpc1JlcGVhdGluZzooQk9PTClyZXBlYXRpbmcKKyAgICAgICAg
ICAgICAgICAgICAgICAgICB3aXRoRmxhZ3M6KE5TVUludGVnZXIpZmxhZ3MKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtleUNvZGU6KHVpbnQxNl90KWtleUNvZGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXNUYWJLZXk6KEJPT0wpdGFiS2V5CisgICAgICAgICAgICAgICAgICAgICAg
Y2hhcmFjdGVyU2V0OihXZWJFdmVudENoYXJhY3RlclNldCljaGFyYWN0ZXJTZXQ7CisKK0Bwcm9w
ZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBXZWJFdmVudFR5cGUgdHlwZTsKK0Bwcm9wZXJ0eShu
b25hdG9taWMsIHJlYWRvbmx5KSBDRlRpbWVJbnRlcnZhbCB0aW1lc3RhbXA7CisKKy8vIE1vdXNl
CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgQ0dQb2ludCBsb2NhdGlvbkluV2luZG93
OworCisvLyBLZXlib2FyZAorQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHksIHJldGFpbikg
TlNTdHJpbmcgKmNoYXJhY3RlcnM7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSwgcmV0
YWluKSBOU1N0cmluZyAqY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOworQHByb3BlcnR5KG5v
bmF0b21pYywgcmVhZG9ubHkpIFdlYkV2ZW50RmxhZ3MgbW9kaWZpZXJGbGFnczsKK0Bwcm9wZXJ0
eShub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXIgPSBpc0tleVJlcGVhdGluZykgQk9PTCBrZXlS
ZXBlYXRpbmc7CisKKy8vIEZJWE1FOiB0aGlzIGlzIGRlcHJlY2F0ZWQuIEl0IHdpbGwgYmUgcmVt
b3ZlZCB3aGVuIFVJS2l0IGFkb3B0cyB0aGUgbmV3IGluaXRXaXRoS2V5RXZlbnRUeXBlLgorQHBy
b3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlciA9IGlzUG9wdXBWYXJpYW50KSBCT09M
IHBvcHVwVmFyaWFudDsKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2Vy
IGtleWJvYXJkRmxhZ3M7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgdWludDE2X3Qg
a2V5Q29kZTsKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXIgPSBpc1RhYktl
eSkgQk9PTCB0YWJLZXk7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgV2ViRXZlbnRD
aGFyYWN0ZXJTZXQgY2hhcmFjdGVyU2V0OworCisvLyBTY3JvbGwgV2hlZWwKK0Bwcm9wZXJ0eShu
b25hdG9taWMsIHJlYWRvbmx5KSBmbG9hdCBkZWx0YVg7CitAcHJvcGVydHkobm9uYXRvbWljLCBy
ZWFkb25seSkgZmxvYXQgZGVsdGFZOworCisvLyBUb3VjaAorQHByb3BlcnR5KG5vbmF0b21pYywg
cmVhZG9ubHkpIHVuc2lnbmVkIHRvdWNoQ291bnQ7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFk
b25seSwgcmV0YWluKSBOU0FycmF5ICp0b3VjaExvY2F0aW9uczsKK0Bwcm9wZXJ0eShub25hdG9t
aWMsIHJlYWRvbmx5LCByZXRhaW4pIE5TQXJyYXkgKnRvdWNoSWRlbnRpZmllcnM7CitAcHJvcGVy
dHkobm9uYXRvbWljLCByZWFkb25seSwgcmV0YWluKSBOU0FycmF5ICp0b3VjaFBoYXNlczsKKwor
Ly8gR2VzdHVyZQorQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgaXNHZXN0dXJl
OworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIGZsb2F0IGdlc3R1cmVTY2FsZTsKK0Bw
cm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBmbG9hdCBnZXN0dXJlUm90YXRpb247CisKK0Bw
cm9wZXJ0eShub25hdG9taWMpIEJPT0wgd2FzSGFuZGxlZDsKKworQGVuZAorCitAaW50ZXJmYWNl
IFdlYklPU0V2ZW50IDogV2ViRXZlbnQKK0BlbmQKKworI2VuZGlmIC8vIFdlYkV2ZW50SU9TX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJFdmVudC5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJFdmVudC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNTU3ODg3
MzA3ZTM3ODMxNjg0MzM2MzlhNDc4Y2YwZDcyOWZmMDkxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkV2ZW50Lm1tCkBAIC0wLDAgKzEsNDk1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRklYTUU6IFJlbmFtZSB0aGlzIGZpbGUgdG8gV2ViRXZlbnRJ
T1MubW0gYWZ0ZXIgd2UgdXBzdHJlYW0gdGhlIGlPUyBwb3J0LgorCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIldlYkV2ZW50LmgiCisKKyNpbXBvcnQgIktleUV2ZW50Q29jb2EuaCIKKyNp
bXBvcnQgPEZvdW5kYXRpb24vTlNHZW9tZXRyeS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJFdmVu
dAorCitAc3ludGhlc2l6ZSB0eXBlID0gX3R5cGU7CitAc3ludGhlc2l6ZSB0aW1lc3RhbXAgPSBf
dGltZXN0YW1wOworQHN5bnRoZXNpemUgd2FzSGFuZGxlZCA9IF93YXNIYW5kbGVkOworCistIChX
ZWJFdmVudCAqKWluaXRXaXRoTW91c2VFdmVudFR5cGU6KFdlYkV2ZW50VHlwZSl0eXBlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RhbXA6KENGVGltZUludGVydmFsKXRpbWVTdGFt
cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOihDR1BvaW50KXBvaW50Cit7
CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgCisgICAgX3R5cGUgPSB0eXBlOworICAgIF90aW1lc3RhbXAgPSB0aW1lU3Rh
bXA7CisKKyAgICBfbG9jYXRpb25JbldpbmRvdyA9IHBvaW50OworICAgIAorICAgIHJldHVybiBz
ZWxmOworfQorCistIChXZWJFdmVudCAqKWluaXRXaXRoU2Nyb2xsV2hlZWxFdmVudFdpdGhUaW1l
U3RhbXA6KENGVGltZUludGVydmFsKXRpbWVTdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOihDR1BvaW50KXBvaW50CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFYOihmbG9hdClkZWx0YVgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YVk6KGZsb2F0
KWRlbHRhWQoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF90eXBlID0gV2ViRXZlbnRTY3JvbGxXaGVlbDsK
KyAgICBfdGltZXN0YW1wID0gdGltZVN0YW1wOworCisgICAgX2xvY2F0aW9uSW5XaW5kb3cgPSBw
b2ludDsKKyAgICBfZGVsdGFYID0gZGVsdGFYOworICAgIF9kZWx0YVkgPSBkZWx0YVk7CisgICAg
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKFdlYkV2ZW50ICopaW5pdFdpdGhUb3VjaEV2ZW50
VHlwZTooV2ViRXZlbnRUeXBlKXR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVT
dGFtcDooQ0ZUaW1lSW50ZXJ2YWwpdGltZVN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9jYXRpb246KENHUG9pbnQpcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1v
ZGlmaWVyczooV2ViRXZlbnRGbGFncyltb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG91Y2hDb3VudDoodW5zaWduZWQpdG91Y2hDb3VudAorICAgICAgICAgICAgICAgICAgICAg
IHRvdWNoTG9jYXRpb25zOihOU0FycmF5ICopdG91Y2hMb2NhdGlvbnMKKyAgICAgICAgICAgICAg
ICAgICAgdG91Y2hJZGVudGlmaWVyczooTlNBcnJheSAqKXRvdWNoSWRlbnRpZmllcnMKKyAgICAg
ICAgICAgICAgICAgICAgICAgICB0b3VjaFBoYXNlczooTlNBcnJheSAqKXRvdWNoUGhhc2VzIGlz
R2VzdHVyZTooQk9PTClpc0dlc3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlc3R1cmVT
Y2FsZTooZmxvYXQpZ2VzdHVyZVNjYWxlCisgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlUm90
YXRpb246KGZsb2F0KWdlc3R1cmVSb3RhdGlvbgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3R5cGUgPSB0eXBl
OworICAgIF90aW1lc3RhbXAgPSB0aW1lU3RhbXA7CisgICAgX21vZGlmaWVyRmxhZ3MgPSBtb2Rp
ZmllcnM7CisKKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxODUyODQ+IFRvdWNoRXZl
bnRzIG1heSBiZSBpbiBtb3JlIHRoYW4gb25lIHdpbmRvdyBzb21lIGRheS4KKyAgICBfbG9jYXRp
b25JbldpbmRvdyA9IHBvaW50OworICAgIF90b3VjaENvdW50ID0gdG91Y2hDb3VudDsKKyAgICBf
dG91Y2hMb2NhdGlvbnMgPSBbdG91Y2hMb2NhdGlvbnMgY29weV07CisgICAgX3RvdWNoSWRlbnRp
ZmllcnMgPSBbdG91Y2hJZGVudGlmaWVycyBjb3B5XTsKKyAgICBfdG91Y2hQaGFzZXMgPSBbdG91
Y2hQaGFzZXMgY29weV07CisgICAgX2lzR2VzdHVyZSA9IGlzR2VzdHVyZTsKKyAgICBfZ2VzdHVy
ZVNjYWxlID0gZ2VzdHVyZVNjYWxlOworICAgIF9nZXN0dXJlUm90YXRpb24gPSBnZXN0dXJlUm90
YXRpb247CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RhdGljIGludCB3aW5kb3dzS2V5Q29k
ZUZvckNoYXJDb2RlSU9TKHVuaWNoYXIgY2hhckNvZGUpCit7CisgICAgLy8gaVBob25lIFNwZWNp
ZmljIENhc2VzCisgICAgLy8gPHJkYXI6Ly83NzA5NDA4PjogV2UgZ2V0IDEwICgnXG4nKSBmcm9t
IFVJS2l0IHdoZW4gdXNpbmcgdGhlIHNvZnR3YXJlIGtleWJvYXJkCisgICAgaWYgKGNoYXJDb2Rl
ID09IDEwKQorICAgICAgICByZXR1cm4gMHgwRDsKKworICAgIC8vIEdlbmVyYWwgQ2FzZQorICAg
IHJldHVybiB3aW5kb3dzS2V5Q29kZUZvckNoYXJDb2RlKGNoYXJDb2RlKTsKK30KKworLSAoV2Vi
RXZlbnQgKilpbml0V2l0aEtleUV2ZW50VHlwZTooV2ViRXZlbnRUeXBlKXR5cGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICB0aW1lU3RhbXA6KENGVGltZUludGVydmFsKXRpbWVTdGFtcAorICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyczooTlNTdHJpbmcgKiljaGFyYWN0ZXJzCisg
ICAgICAgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOihOU1N0cmluZyAqKWNoYXJhY3RlcnNJ
Z25vcmluZ01vZGlmaWVycworICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczooV2Vi
RXZlbnRGbGFncyltb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgaXNSZXBlYXRpbmc6
KEJPT0wpcmVwZWF0aW5nCisgICAgICAgICAgICAgICAgICAgIGlzUG9wdXBWYXJpYW50OihCT09M
KXBvcHVwVmFyaWFudAorICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29kZToodWludDE2
X3Qpa2V5Q29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RhYktleTooQk9PTCl0YWJL
ZXkKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJTZXQ6KFdlYkV2ZW50Q2hhcmFjdGVy
U2V0KWNoYXJhY3RlclNldAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF90eXBlID0gdHlwZTsKKyAgICBf
dGltZXN0YW1wID0gdGltZVN0YW1wOworCisgICAgX2NoYXJhY3RlcnMgPSBbY2hhcmFjdGVycyBy
ZXRhaW5dOworICAgIF9jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgPSBbY2hhcmFjdGVyc0ln
bm9yaW5nTW9kaWZpZXJzIHJldGFpbl07CisgICAgX21vZGlmaWVyRmxhZ3MgPSBtb2RpZmllcnM7
CisgICAgX2tleVJlcGVhdGluZyA9IHJlcGVhdGluZzsKKyAgICBfcG9wdXBWYXJpYW50ID0gcG9w
dXBWYXJpYW50OworICAgIF90YWJLZXkgPSB0YWJLZXk7CisgICAgX2NoYXJhY3RlclNldCA9IGNo
YXJhY3RlclNldDsKKworICAgIGlmIChrZXlDb2RlKQorICAgICAgICBfa2V5Q29kZSA9IHdpbmRv
d3NLZXlDb2RlRm9yS2V5Q29kZShrZXlDb2RlKTsKKworICAgIC8vIE5PVEU6IHRoaXMgcHJlc2Vy
dmVzIHRoZSBvcmlnaW5hbCBzZW1hbnRpY3Mgd2hpY2ggdXNlZCB0aGUKKyAgICAvLyBjaGFyYWN0
ZXJzIHN0cmluZyBmb3IgdGhlIGtleUNvZGUuIFRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgaW4gaU9T
IDQuMCB0bworICAgIC8vIGFsbG93IHRoZSBjbGllbnQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGEg
a2V5Q29kZSwgb3RoZXJ3aXNlIGRlZmF1bHQgdG8KKyAgICAvLyBtYXBwaW5nIHRoZSBjaGFyYWN0
ZXJzIHN0cmluZyB0byBhIGtleUNvZGUuCisgICAgLy8gZS5nLiBhZGQgYW4gJ2Vsc2UnIGJlZm9y
ZSB0aGlzICdpZicuCisgICAgaWYgKFtjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgbGVuZ3Ro
XSA9PSAxKSB7CisgICAgICAgIHVuaWNoYXIgY2ggPSBbY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZp
ZXJzIGNoYXJhY3RlckF0SW5kZXg6MF07CisgICAgICAgIF9rZXlDb2RlID0gd2luZG93c0tleUNv
ZGVGb3JDaGFyQ29kZUlPUyhjaCk7CisgICAgfQorCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKwor
LSAoV2ViRXZlbnQgKilpbml0V2l0aEtleUV2ZW50VHlwZTooV2ViRXZlbnRUeXBlKXR5cGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RhbXA6KENGVGltZUludGVydmFsKXRpbWVTdGFt
cAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyczooTlNTdHJpbmcgKiljaGFyYWN0
ZXJzCisgICAgICAgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOihOU1N0cmluZyAqKWNoYXJh
Y3RlcnNJZ25vcmluZ01vZGlmaWVycworICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVy
czooV2ViRXZlbnRGbGFncyltb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgaXNSZXBl
YXRpbmc6KEJPT0wpcmVwZWF0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEZsYWdz
OihOU1VJbnRlZ2VyKWZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb2RlOih1
aW50MTZfdClrZXlDb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGFiS2V5OihCT09M
KXRhYktleQorICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlclNldDooV2ViRXZlbnRDaGFy
YWN0ZXJTZXQpY2hhcmFjdGVyU2V0Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBp
ZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX3R5cGUgPSB0eXBlOwor
ICAgIF90aW1lc3RhbXAgPSB0aW1lU3RhbXA7CisKKyAgICBfY2hhcmFjdGVycyA9IFtjaGFyYWN0
ZXJzIHJldGFpbl07CisgICAgX2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyA9IFtjaGFyYWN0
ZXJzSWdub3JpbmdNb2RpZmllcnMgcmV0YWluXTsKKyAgICBfbW9kaWZpZXJGbGFncyA9IG1vZGlm
aWVyczsKKyAgICBfa2V5UmVwZWF0aW5nID0gcmVwZWF0aW5nOworICAgIF9rZXlib2FyZEZsYWdz
ID0gZmxhZ3M7CisgICAgX3RhYktleSA9IHRhYktleTsKKyAgICBfY2hhcmFjdGVyU2V0ID0gY2hh
cmFjdGVyU2V0OworICAgIAorICAgIGlmIChrZXlDb2RlKQorICAgICAgICBfa2V5Q29kZSA9IHdp
bmRvd3NLZXlDb2RlRm9yS2V5Q29kZShrZXlDb2RlKTsKKworICAgIC8vIE5PVEU6IHRoaXMgcHJl
c2VydmVzIHRoZSBvcmlnaW5hbCBzZW1hbnRpY3Mgd2hpY2ggdXNlZCB0aGUgCisgICAgLy8gY2hh
cmFjdGVycyBzdHJpbmcgZm9yIHRoZSBrZXlDb2RlLiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIGlu
IGlPUyA0LjAgdG8KKyAgICAvLyBhbGxvdyB0aGUgY2xpZW50IHRvIGV4cGxpY2l0bHkgc3BlY2lm
eSBhIGtleUNvZGUsIG90aGVyd2lzZSBkZWZhdWx0IHRvIAorICAgIC8vIG1hcHBpbmcgdGhlIGNo
YXJhY3RlcnMgc3RyaW5nIHRvIGEga2V5Q29kZS4KKyAgICAvLyBlLmcuIGFkZCBhbiAnZWxzZScg
YmVmb3JlIHRoaXMgJ2lmJy4KKyAgICBpZiAoW2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyBs
ZW5ndGhdID09IDEpIHsKKyAgICAgICAgdW5pY2hhciBjaCA9IFtjaGFyYWN0ZXJzSWdub3JpbmdN
b2RpZmllcnMgY2hhcmFjdGVyQXRJbmRleDowXTsKKyAgICAgICAgX2tleUNvZGUgPSB3aW5kb3dz
S2V5Q29kZUZvckNoYXJDb2RlSU9TKGNoKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19jaGFyYWN0ZXJzIHJlbGVhc2VdOworICAgIFtf
Y2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIHJlbGVhc2VdOworCisgICAgW190b3VjaExvY2F0
aW9ucyByZWxlYXNlXTsKKyAgICBbX3RvdWNoSWRlbnRpZmllcnMgcmVsZWFzZV07CisgICAgW190
b3VjaFBoYXNlcyByZWxlYXNlXTsKKyAgICAKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0g
KE5TU3RyaW5nICopX3R5cGVEZXNjcmlwdGlvbgoreworICAgIHN3aXRjaCAoX3R5cGUpIHsKKyAg
ICAgICAgY2FzZSBXZWJFdmVudE1vdXNlRG93bjoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2
ZW50TW91c2VEb3duIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudE1vdXNlVXA6CisgICAgICAgICAg
ICByZXR1cm4gQCJXZWJFdmVudE1vdXNlVXAiOworICAgICAgICBjYXNlIFdlYkV2ZW50TW91c2VN
b3ZlZDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50TW91c2VNb3ZlZCI7CisgICAgICAg
IGNhc2UgV2ViRXZlbnRTY3JvbGxXaGVlbDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50
U2Nyb2xsV2hlZWwiOworICAgICAgICBjYXNlIFdlYkV2ZW50S2V5RG93bjoKKyAgICAgICAgICAg
IHJldHVybiBAIldlYkV2ZW50S2V5RG93biI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRLZXlVcDoK
KyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50S2V5VXAiOworICAgICAgICBjYXNlIFdlYkV2
ZW50VG91Y2hCZWdpbjoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50VG91Y2hCZWdpbiI7
CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaENoYW5nZToKKyAgICAgICAgICAgIHJldHVybiBA
IldlYkV2ZW50VG91Y2hDaGFuZ2UiOworICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hFbmQ6Cisg
ICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoRW5kIjsKKyAgICAgICAgY2FzZSBXZWJF
dmVudFRvdWNoQ2FuY2VsOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaENhbmNl
bCI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisgICAgcmV0dXJuIEAiVW5rbm93biI7Cit9CisKKy0gKE5TU3RyaW5nICopX21vZGlm
ZXJGbGFnc0Rlc2NyaXB0aW9uCit7CisgICAgc3dpdGNoIChfbW9kaWZpZXJGbGFncykgeworICAg
ICAgICBjYXNlIFdlYkV2ZW50TW91c2VEb3duOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZl
bnRNb3VzZURvd24iOworICAgICAgICBjYXNlIFdlYkV2ZW50TW91c2VVcDoKKyAgICAgICAgICAg
IHJldHVybiBAIldlYkV2ZW50TW91c2VVcCI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRNb3VzZU1v
dmVkOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRNb3VzZU1vdmVkIjsKKyAgICAgICAg
Y2FzZSBXZWJFdmVudFNjcm9sbFdoZWVsOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRT
Y3JvbGxXaGVlbCI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRLZXlEb3duOgorICAgICAgICAgICAg
cmV0dXJuIEAiV2ViRXZlbnRLZXlEb3duIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudEtleVVwOgor
ICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRLZXlVcCI7CisgICAgICAgIGNhc2UgV2ViRXZl
bnRUb3VjaEJlZ2luOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaEJlZ2luIjsK
KyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoQ2hhbmdlOgorICAgICAgICAgICAgcmV0dXJuIEAi
V2ViRXZlbnRUb3VjaENoYW5nZSI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaEVuZDoKKyAg
ICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50VG91Y2hFbmQiOworICAgICAgICBjYXNlIFdlYkV2
ZW50VG91Y2hDYW5jZWw6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoQ2FuY2Vs
IjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyAgICByZXR1cm4gQCJVbmtub3duIjsKK30KKworLSAoTlNTdHJpbmcgKilfY2hhcmFj
dGVyU2V0RGVzY3JpcHRpb24KK3sKKyAgICBzd2l0Y2ggKF9jaGFyYWN0ZXJTZXQpIHsKKyAgICAg
ICAgY2FzZSBXZWJFdmVudENoYXJhY3RlclNldEFTQ0lJOgorICAgICAgICAgICAgcmV0dXJuIEAi
V2ViRXZlbnRDaGFyYWN0ZXJTZXRBU0NJSSI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRDaGFyYWN0
ZXJTZXRTeW1ib2w6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudENoYXJhY3RlclNldFN5
bWJvbCI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRDaGFyYWN0ZXJTZXREaW5nYmF0czoKKyAgICAg
ICAgICAgIHJldHVybiBAIldlYkV2ZW50Q2hhcmFjdGVyU2V0RGluZ2JhdHMiOworICAgICAgICBj
YXNlIFdlYkV2ZW50Q2hhcmFjdGVyU2V0VW5pY29kZToKKyAgICAgICAgICAgIHJldHVybiBAIldl
YkV2ZW50Q2hhcmFjdGVyU2V0VW5pY29kZSI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRDaGFyYWN0
ZXJTZXRGdW5jdGlvbktleXM6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudENoYXJhY3Rl
clNldEZ1bmN0aW9uS2V5cyI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIEAiVW5rbm93biI7Cit9CisKKy0gKE5T
U3RyaW5nICopX3RvdWNoTG9jYXRpb25zRGVzY3JpcHRpb246KE5TQXJyYXkgKilsb2NhdGlvbnMK
K3sKKyAgICBCT09MIHNob3VsZEFkZENvbW1hID0gTk87CisgICAgTlNNdXRhYmxlU3RyaW5nICpk
ZXNjcmlwdGlvbiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgICBmb3IgKE5TVmFsdWUg
KnZhbHVlIGluIGxvY2F0aW9ucykgeworICAgICAgICBDR1BvaW50IHBvaW50ID0gW3ZhbHVlIHBv
aW50VmFsdWVdOworICAgICAgICBbZGVzY3JpcHRpb24gYXBwZW5kRm9ybWF0OkAiJUAoJWYsICVm
KSIsIChzaG91bGRBZGRDb21tYSA/IEAiLCAiIDogQCIiKSwgcG9pbnQueCwgcG9pbnQueV07Cisg
ICAgICAgIHNob3VsZEFkZENvbW1hID0gWUVTOworICAgIH0KKyAgICByZXR1cm4gZGVzY3JpcHRp
b247Cit9CisKKy0gKE5TU3RyaW5nICopX3RvdWNoSWRlbnRpZmllcnNEZXNjcmlwdGlvbgorewor
ICAgIEJPT0wgc2hvdWxkQWRkQ29tbWEgPSBOTzsKKyAgICBOU011dGFibGVTdHJpbmcgKmRlc2Ny
aXB0aW9uID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOworICAgIGZvciAoTlNOdW1iZXIgKmlk
ZW50aWZpZXIgaW4gX3RvdWNoSWRlbnRpZmllcnMpIHsKKyAgICAgICAgW2Rlc2NyaXB0aW9uIGFw
cGVuZEZvcm1hdDpAIiVAJXUiLCAoc2hvdWxkQWRkQ29tbWEgPyBAIiwgIiA6IEAiIiksIFtpZGVu
dGlmaWVyIHVuc2lnbmVkSW50VmFsdWVdXTsKKyAgICAgICAgc2hvdWxkQWRkQ29tbWEgPSBZRVM7
CisgICAgfQorICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKworLSAoTlNTdHJpbmcgKilfdG91
Y2hQaGFzZURlc2NyaXB0aW9uOihXZWJFdmVudFRvdWNoUGhhc2VUeXBlKXBoYXNlCit7CisgICAg
c3dpdGNoIChwaGFzZSkgeworICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hQaGFzZUJlZ2FuOgor
ICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaFBoYXNlQmVnYW4iOworICAgICAgICBj
YXNlIFdlYkV2ZW50VG91Y2hQaGFzZU1vdmVkOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZl
bnRUb3VjaFBoYXNlTW92ZWQiOworICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hQaGFzZVN0YXRp
b25hcnk6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoUGhhc2VTdGF0aW9uYXJ5
IjsKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VFbmRlZDoKKyAgICAgICAgICAgIHJl
dHVybiBAIldlYkV2ZW50VG91Y2hQaGFzZUVuZGVkIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudFRv
dWNoUGhhc2VDYW5jZWxsZWQ6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoUGhh
c2VDYW5jZWxsZWQiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBAIlVua25vd24iOworfQorCistIChOU1N0cmlu
ZyAqKV90b3VjaFBoYXNlc0Rlc2NyaXB0aW9uCit7CisgICAgQk9PTCBzaG91bGRBZGRDb21tYSA9
IE5POworICAgIE5TTXV0YWJsZVN0cmluZyAqZGVzY3JpcHRpb24gPSBbTlNNdXRhYmxlU3RyaW5n
IHN0cmluZ107CisgICAgZm9yIChOU051bWJlciAqcGhhc2UgaW4gX3RvdWNoUGhhc2VzKSB7Cisg
ICAgICAgIFtkZXNjcmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCIlQCVAIiwgKHNob3VsZEFkZENvbW1h
ID8gQCIsICIgOiBAIiIpLCBbc2VsZiBfdG91Y2hQaGFzZURlc2NyaXB0aW9uOnN0YXRpY19jYXN0
PFdlYkV2ZW50VG91Y2hQaGFzZVR5cGU+KFtwaGFzZSB1bnNpZ25lZEludFZhbHVlXSldXTsKKyAg
ICAgICAgc2hvdWxkQWRkQ29tbWEgPSBZRVM7CisgICAgfQorICAgIHJldHVybiBkZXNjcmlwdGlv
bjsKK30KKworLSAoTlNTdHJpbmcgKilfZXZlbnREZXNjcmlwdGlvbgoreworICAgIHN3aXRjaCAo
X3R5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJFdmVudE1vdXNlRG93bjoKKyAgICAgICAgY2FzZSBX
ZWJFdmVudE1vdXNlVXA6CisgICAgICAgIGNhc2UgV2ViRXZlbnRNb3VzZU1vdmVkOgorICAgICAg
ICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAibG9jYXRpb246ICglZiwg
JWYpIiwgX2xvY2F0aW9uSW5XaW5kb3cueCwgX2xvY2F0aW9uSW5XaW5kb3cueV07CisgICAgICAg
IGNhc2UgV2ViRXZlbnRTY3JvbGxXaGVlbDoKKyAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAImxvY2F0aW9uOiAoJWYsICVmKSBkZWx0YVg6ICVmIGRlbHRhWTog
JWYiLCBfbG9jYXRpb25JbldpbmRvdy54LCBfbG9jYXRpb25JbldpbmRvdy55LCBfZGVsdGFYLCBf
ZGVsdGFZXTsKKyAgICAgICAgY2FzZSBXZWJFdmVudEtleURvd246CisgICAgICAgIGNhc2UgV2Vi
RXZlbnRLZXlVcDoKKyAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAImNoYXJzOiAlQCBjaGFyc05vTW9kaWZpZXJzOiAlQCBmbGFnczogJWQgcmVwZWF0aW5nOiAl
ZCBrZXlib2FyZEZsYWdzOiAlbHUga2V5Q29kZSAlZCwgaXNUYWI6ICVkIGNoYXJTZXQ6ICVAIiwg
X2NoYXJhY3RlcnMsIF9jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMsIF9tb2RpZmllckZsYWdz
LCBfa2V5UmVwZWF0aW5nLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfa2V5Ym9hcmRGbGFn
cyksIF9rZXlDb2RlLCBfdGFiS2V5LCBbc2VsZiBfY2hhcmFjdGVyU2V0RGVzY3JpcHRpb25dXTsK
KyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoQmVnaW46CisgICAgICAgIGNhc2UgV2ViRXZlbnRU
b3VjaENoYW5nZToKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoRW5kOgorICAgICAgICBjYXNl
IFdlYkV2ZW50VG91Y2hDYW5jZWw6CisgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCJsb2NhdGlvbjogKCVmLCAlZikgY291bnQ6ICVkIGxvY2F0aW9uczogJUAg
aWRlbnRpZmllcnM6ICVAIHBoYXNlczogJUAgaXNHZXN0dXJlOiAlZCBzY2FsZTogJWYgcm90YXRp
b246ICVmIiwgX2xvY2F0aW9uSW5XaW5kb3cueCwgX2xvY2F0aW9uSW5XaW5kb3cueSwgX3RvdWNo
Q291bnQsIFtzZWxmIF90b3VjaExvY2F0aW9uc0Rlc2NyaXB0aW9uOl90b3VjaExvY2F0aW9uc10s
IFtzZWxmIF90b3VjaElkZW50aWZpZXJzRGVzY3JpcHRpb25dLCBbc2VsZiBfdG91Y2hQaGFzZXNE
ZXNjcmlwdGlvbl0sIChfaXNHZXN0dXJlID8gMSA6IDApLCBfZ2VzdHVyZVNjYWxlLCBfZ2VzdHVy
ZVJvdGF0aW9uXTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gQCJVbmtub3duIjsKK30KKworLSAoTlNTdHJpbmcg
KilkZXNjcmlwdGlvbgoreworICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IiVAIHR5cGU6ICVAIC0gJUAiLCBbc3VwZXIgZGVzY3JpcHRpb25dLCBbc2VsZiBfdHlwZURlc2Ny
aXB0aW9uXSwgW3NlbGYgX2V2ZW50RGVzY3JpcHRpb25dXTsKK30KKworLSAoQ0dQb2ludClsb2Nh
dGlvbkluV2luZG93Cit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShfdHlwZSA9PSBXZWJFdmVu
dE1vdXNlRG93biB8fCBfdHlwZSA9PSBXZWJFdmVudE1vdXNlVXAgfHwgX3R5cGUgPT0gV2ViRXZl
bnRNb3VzZU1vdmVkIHx8IF90eXBlID09IFdlYkV2ZW50U2Nyb2xsV2hlZWwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE4NTI4ND4gVG91Y2hFdmVu
dHMgbWF5IGJlIGluIG1vcmUgdGhhbiBvbmUgd2luZG93IHNvbWUgZGF5LgorICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEJlZ2luIHx8IF90eXBlID09IFdl
YkV2ZW50VG91Y2hDaGFuZ2UgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEVuZCB8fCBfdHlwZSA9
PSBXZWJFdmVudFRvdWNoQ2FuY2VsCisgICAgICAgICAgICAgICAgICAgICAgICAsICJXZWJFdmVu
dFR5cGU6ICVkIiwgX3R5cGUpOworICAgIHJldHVybiBfbG9jYXRpb25JbldpbmRvdzsKK30KKwor
LSAoTlNTdHJpbmcgKiljaGFyYWN0ZXJzCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50
S2V5RG93biB8fCBfdHlwZSA9PSBXZWJFdmVudEtleVVwKTsKKyAgICByZXR1cm4gW1tfY2hhcmFj
dGVycyByZXRhaW5dIGF1dG9yZWxlYXNlXTsKK30KKworLSAoTlNTdHJpbmcgKiljaGFyYWN0ZXJz
SWdub3JpbmdNb2RpZmllcnMKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRLZXlEb3du
IHx8IF90eXBlID09IFdlYkV2ZW50S2V5VXApOworICAgIHJldHVybiBbW19jaGFyYWN0ZXJzSWdu
b3JpbmdNb2RpZmllcnMgcmV0YWluXSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKFdlYkV2ZW50Rmxh
Z3MpbW9kaWZpZXJGbGFncworeworICAgIHJldHVybiBfbW9kaWZpZXJGbGFnczsKK30KKworLSAo
Qk9PTClpc0tleVJlcGVhdGluZworeworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudEtleURv
d24gfHwgX3R5cGUgPT0gV2ViRXZlbnRLZXlVcCk7CisgICAgcmV0dXJuIF9rZXlSZXBlYXRpbmc7
Cit9CisKKy8vIEZJWE1FOiB0byBiZSByZW1vdmVkCistIChCT09MKWlzUG9wdXBWYXJpYW50Cit7
CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50S2V5RG93biB8fCBfdHlwZSA9PSBXZWJFdmVu
dEtleVVwKTsKKyAgICByZXR1cm4gX3BvcHVwVmFyaWFudDsKK30KKworLSAoTlNVSW50ZWdlcilr
ZXlib2FyZEZsYWdzCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50S2V5RG93biB8fCBf
dHlwZSA9PSBXZWJFdmVudEtleVVwKTsKKyAgICByZXR1cm4gX2tleWJvYXJkRmxhZ3M7Cit9CisK
Ky0gKHVpbnQxNl90KWtleUNvZGUKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRLZXlE
b3duIHx8IF90eXBlID09IFdlYkV2ZW50S2V5VXApOworICAgIHJldHVybiBfa2V5Q29kZTsKK30K
KworLSAoQk9PTClpc1RhYktleQoreworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudEtleURv
d24gfHwgX3R5cGUgPT0gV2ViRXZlbnRLZXlVcCk7CisgICAgcmV0dXJuIF90YWJLZXk7Cit9CisK
Ky0gKFdlYkV2ZW50Q2hhcmFjdGVyU2V0KWNoYXJhY3RlclNldAoreworICAgIEFTU0VSVChfdHlw
ZSA9PSBXZWJFdmVudEtleURvd24gfHwgX3R5cGUgPT0gV2ViRXZlbnRLZXlVcCk7CisgICAgcmV0
dXJuIF9jaGFyYWN0ZXJTZXQ7Cit9CisKKy0gKGZsb2F0KWRlbHRhWAoreworICAgIEFTU0VSVChf
dHlwZSA9PSBXZWJFdmVudFNjcm9sbFdoZWVsKTsKKyAgICByZXR1cm4gX2RlbHRhWDsKK30KKwor
LSAoZmxvYXQpZGVsdGFZCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50U2Nyb2xsV2hl
ZWwpOworICAgIHJldHVybiBfZGVsdGFZOworfQorCisvLyBUb3VjaAorLSAodW5zaWduZWQpdG91
Y2hDb3VudAoreworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudFRvdWNoQmVnaW4gfHwgX3R5
cGUgPT0gV2ViRXZlbnRUb3VjaENoYW5nZSB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoRW5kIHx8
IF90eXBlID09IFdlYkV2ZW50VG91Y2hDYW5jZWwpOworICAgIHJldHVybiBfdG91Y2hDb3VudDsK
K30KKworLSAoTlNBcnJheSAqKXRvdWNoTG9jYXRpb25zCit7CisgICAgQVNTRVJUKF90eXBlID09
IFdlYkV2ZW50VG91Y2hCZWdpbiB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoQ2hhbmdlIHx8IF90
eXBlID09IFdlYkV2ZW50VG91Y2hFbmQgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENhbmNlbCk7
CisgICAgcmV0dXJuIF90b3VjaExvY2F0aW9uczsKK30KKworLSAoTlNBcnJheSAqKXRvdWNoSWRl
bnRpZmllcnMKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEJlZ2luIHx8IF90
eXBlID09IFdlYkV2ZW50VG91Y2hDaGFuZ2UgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEVuZCB8
fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoQ2FuY2VsKTsKKyAgICByZXR1cm4gX3RvdWNoSWRlbnRp
ZmllcnM7Cit9CisKKy0gKE5TQXJyYXkgKil0b3VjaFBoYXNlcworeworICAgIEFTU0VSVChfdHlw
ZSA9PSBXZWJFdmVudFRvdWNoQmVnaW4gfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENoYW5nZSB8
fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoRW5kIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDYW5j
ZWwpOworICAgIHJldHVybiBfdG91Y2hQaGFzZXM7Cit9CisKKy8vIEdlc3R1cmUKKy0gKEJPT0wp
aXNHZXN0dXJlCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50VG91Y2hCZWdpbiB8fCBf
dHlwZSA9PSBXZWJFdmVudFRvdWNoQ2hhbmdlIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hFbmQg
fHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENhbmNlbCk7CisgICAgcmV0dXJuIF9pc0dlc3R1cmU7
Cit9CisKKy0gKGZsb2F0KWdlc3R1cmVTY2FsZQoreworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJF
dmVudFRvdWNoQmVnaW4gfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENoYW5nZSB8fCBfdHlwZSA9
PSBXZWJFdmVudFRvdWNoRW5kIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDYW5jZWwpOworICAg
IHJldHVybiBfZ2VzdHVyZVNjYWxlOworfQorCistIChmbG9hdClnZXN0dXJlUm90YXRpb24KK3sK
KyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEJlZ2luIHx8IF90eXBlID09IFdlYkV2
ZW50VG91Y2hDaGFuZ2UgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEVuZCB8fCBfdHlwZSA9PSBX
ZWJFdmVudFRvdWNoQ2FuY2VsKTsKKyAgICByZXR1cm4gX2dlc3R1cmVSb3RhdGlvbjsKK30KKwor
QGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDk5ZTQxMjFlN2E5Y2Y5ZDZhZmI3Zjg3MGZlYTk2N2E2NDI2ODgyOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0KQEAgLTAsMCArMSwy
NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIldpZGdldC5oIgorCisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQg
IkN1cnNvci5oIgorI2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIkZvbnQuaCIKKyNpbXBv
cnQgIkZyYW1lLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIlBhZ2Uu
aCIKKyNpbXBvcnQgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2ltcG9ydCAiU2Nyb2xsVmlldy5o
IgorI2ltcG9ydCAiV0FLU2Nyb2xsVmlldy5oIgorI2ltcG9ydCAiV0FLVmlldy5oIgorI2ltcG9y
dCAiV0FLV2luZG93LmgiCisjaW1wb3J0ICJXZWJDb3JlRnJhbWVWaWV3LmgiCisjaW1wb3J0ICJX
ZWJDb3JlVmlldy5oIgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitAaW50ZXJmYWNlIE5T
VmlldyAoV2ViU2V0U2VsZWN0ZWRNZXRob2RzKQorLSAodm9pZClzZXRJc1NlbGVjdGVkOihCT09M
KWlzU2VsZWN0ZWQ7CistICh2b2lkKXdlYlBsdWdJblNldElzU2VsZWN0ZWQ6KEJPT0wpaXNTZWxl
Y3RlZDsKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBzYWZlUmVt
b3ZlRnJvbVN1cGVydmlldyhOU1ZpZXcgKnZpZXcpCit7CisgICAgLy8gRklYTUU6IHdlIHNob3Vs
ZCBwcm9iYWJseSBjaGFuZ2UgdGhlIGZpcnN0IHJlc3BvbmRlciBvZiB0aGUgd2luZG93IGlmCisg
ICAgLy8gaXQgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSB2aWV3IHdlIHJlbW92ZS4KKyAgICAvLyBT
ZWU6IDxyZGFyOi8vcHJvYmxlbS8xMDM2MDE4Nj4KKyAgICBbdmlldyByZW1vdmVGcm9tU3VwZXJ2
aWV3XTsKK30KKworV2lkZ2V0OjpXaWRnZXQoTlNWaWV3KiB2aWV3KQoreworICAgIGluaXQodmll
dyk7Cit9CisKK1dpZGdldDo6fldpZGdldCgpIAoreworICAgIHJlbGVhc2VQbGF0Zm9ybVdpZGdl
dCgpOworfQorCisvLyBGSVhNRTogU2hvdWxkIG1vdmUgdGhpcyB0byBDaHJvbWU7IGJhZCBsYXll
cmluZyB0aGF0IHRoaXMga25vd3MgYWJvdXQgRnJhbWUuCit2b2lkIFdpZGdldDo6c2V0Rm9jdXMo
Ym9vbCBmb2N1c2VkKQoreworICAgIFVOVVNFRF9QQVJBTShmb2N1c2VkKTsKK30KKwordm9pZCBX
aWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImKQoreworfQorCit2b2lkIFdpZGdldDo6c2hv
dygpCit7CisgICAgaWYgKGlzU2VsZlZpc2libGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
c2V0U2VsZlZpc2libGUodHJ1ZSk7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisgICAgW2dldE91dGVyVmlldygpIHNldEhpZGRlbjpOT107CisgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKK30KKwordm9pZCBXaWRnZXQ6OmhpZGUoKQoreworICAgIGlmICghaXNTZWxm
VmlzaWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRTZWxmVmlzaWJsZShmYWxzZSk7
CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW2dldE91dGVyVmlldygp
IHNldEhpZGRlbjpZRVNdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK0lu
dFJlY3QgV2lkZ2V0OjpmcmFtZVJlY3QoKSBjb25zdAoreworICAgIGlmICghcGxhdGZvcm1XaWRn
ZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWU7CisgICAgCisgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KFtnZXRPdXRlclZpZXco
KSBmcmFtZV0pOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgcmV0
dXJuIG1fZnJhbWU7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVj
dCAmcmVjdCkKK3sKKyAgICBtX2ZyYW1lID0gcmVjdDsKKyAgICAKKyAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CisgICAgTlNWaWV3ICp2ID0gZ2V0T3V0ZXJWaWV3KCk7CisgICAgTlNS
ZWN0IGYgPSByZWN0OworICAgIGlmICghTlNFcXVhbFJlY3RzKGYsIFt2IGZyYW1lXSkpIHsKKyAg
ICAgICAgW3Ygc2V0RnJhbWU6Zl07CisgICAgICAgIFt2IHNldE5lZWRzRGlzcGxheTogTk9dOwor
ICAgIH0KKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitOU1ZpZXcqIFdpZGdl
dDo6Z2V0T3V0ZXJWaWV3KCkgY29uc3QKK3sKKyAgICBOU1ZpZXcqIHZpZXcgPSBwbGF0Zm9ybVdp
ZGdldCgpOworCisgICAgLy8gSWYgdGhpcyB3aWRnZXQncyB2aWV3IGlzIGEgV2ViQ29yZUZyYW1l
U2Nyb2xsVmlldyB0aGVuIHdlCisgICAgLy8gcmVzaXplIGl0cyBjb250YWluaW5nIHZpZXcsIGEg
V2ViRnJhbWVWaWV3LgorICAgIGlmIChbdmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29s
KFdlYkNvcmVGcmFtZVNjcm9sbFZpZXcpXSkgeworICAgICAgICB2aWV3ID0gW3ZpZXcgc3VwZXJ2
aWV3XTsKKyAgICAgICAgQVNTRVJUKHZpZXcpOworICAgIH0KKworICAgIHJldHVybiB2aWV3Owor
fQorCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBJbnRSZWN0
JiByKQoreworICAgIGlmIChwLT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBOU1ZpZXcgKnZpZXcgPSBnZXRPdXRlclZpZXcoKTsKKworICAgIENHQ29udGV4
dFJlZiBjZ0NvbnRleHQgPSBwLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRTYXZl
R1N0YXRlKGNnQ29udGV4dCk7CisKKyAgICBOU1JlY3Qgdmlld0ZyYW1lID0gW3ZpZXcgZnJhbWVd
OworICAgIE5TUmVjdCB2aWV3Qm91bmRzID0gW3ZpZXcgYm91bmRzXTsKKyAgICBDR0NvbnRleHRU
cmFuc2xhdGVDVE0oY2dDb250ZXh0LCB2aWV3RnJhbWUub3JpZ2luLnggLSB2aWV3Qm91bmRzLm9y
aWdpbi54LCB2aWV3RnJhbWUub3JpZ2luLnkgLSB2aWV3Qm91bmRzLm9yaWdpbi55KTsKKworICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBbdmlldyBkaXNwbGF5UmVjdElnbm9y
aW5nT3BhY2l0eTpbdmlldyBjb252ZXJ0UmVjdDpyIGZyb21WaWV3Olt2aWV3IHN1cGVydmlld11d
IGluQ29udGV4dDpjZ0NvbnRleHRdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisK
KyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNnQ29udGV4dCk7Cit9CisKK3ZvaWQgV2lkZ2V0
OjpzZXRJc1NlbGVjdGVkKGJvb2wgLyppc1NlbGVjdGVkKi8pCit7Cit9CisKK3ZvaWQgV2lkZ2V0
OjphZGRUb1N1cGVydmlldyhOU1ZpZXcgKnZpZXcpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOworCisgICAgQVNTRVJUKHZpZXcpOworICAgIE5TVmlldyAqc3VidmlldyA9IGdl
dE91dGVyVmlldygpOworCisgICAgaWYgKCFzdWJ2aWV3KQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQoIVt2aWV3IGlzRGVzY2VuZGFudE9mOnN1YnZpZXddKTsKKyAgICAKKyAgICBpZiAo
W3N1YnZpZXcgc3VwZXJ2aWV3XSAhPSB2aWV3KQorICAgICAgICBbdmlldyBhZGRTdWJ2aWV3OnN1
YnZpZXddOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKwordm9pZCBXaWRn
ZXQ6OnJlbW92ZUZyb21TdXBlcnZpZXcoKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKKyAgICBzYWZlUmVtb3ZlRnJvbVN1cGVydmlldyhnZXRPdXRlclZpZXcoKSk7CisgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworSW50UmVjdCBXaWRnZXQ6OmNvbnZlcnRG
cm9tUm9vdFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBXaWRnZXQqIHJvb3RXaWRnZXQsIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgp
KQorICAgICAgICByZXR1cm4gcmVjdDsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKKyAgICBBU1NFUlQoW3Jvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgaXNLaW5kT2ZDbGFz
czpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pOworICAgIFdBS1Njcm9sbFZpZXcgKnZpZXcgPSBzdGF0
aWNfY2FzdDxXQUtTY3JvbGxWaWV3ICo+KHJvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpOwor
ICAgIGlmIChXQUtWaWV3ICpkb2N1bWVudFZpZXcgPSBbdmlldyBkb2N1bWVudFZpZXddKQorICAg
ICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChbZG9jdW1lbnRWaWV3IGNvbnZlcnRSZWN0OnJl
Y3QgdG9WaWV3Om5pbF0pOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KFt2aWV3IGNvbnZl
cnRSZWN0OnJlY3QgdG9WaWV3Om5pbF0pOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisKKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UmVjdCBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1dpbmRvd1RvUm9vdChjb25zdCBXaWRnZXQqIHJvb3RXaWRnZXQsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgaWYgKCFyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQorICAg
ICAgICByZXR1cm4gcmVjdDsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAg
ICBBU1NFUlQoW3Jvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgaXNLaW5kT2ZDbGFzczpbTlNT
Y3JvbGxWaWV3IGNsYXNzXV0pOworICAgIFdBS1Njcm9sbFZpZXcgKnZpZXcgPSBzdGF0aWNfY2Fz
dDxXQUtTY3JvbGxWaWV3ICo+KHJvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpOworICAgIGlm
IChXQUtWaWV3ICpkb2N1bWVudFZpZXcgPSBbdmlldyBkb2N1bWVudFZpZXddKQorICAgICAgICBy
ZXR1cm4gZW5jbG9zaW5nSW50UmVjdChbZG9jdW1lbnRWaWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJv
bVZpZXc6bmlsXSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoW3ZpZXcgY29udmVydFJl
Y3Q6cmVjdCBmcm9tVmlldzpuaWxdKTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Sb290
VG9Db250YWluaW5nV2luZG93KGNvbnN0IFdpZGdldCogcm9vdFdpZGdldCwgY29uc3QgSW50UG9p
bnQmIHBvaW50KQoreworICAgIGlmICghcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkKKyAg
ICAgICAgcmV0dXJuIHBvaW50OworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
ICAgIEFTU0VSVChbcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSBpc0tpbmRPZkNsYXNzOltO
U1Njcm9sbFZpZXcgY2xhc3NdXSk7CisgICAgV0FLU2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19j
YXN0PFdBS1Njcm9sbFZpZXcgKj4ocm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSk7CisgICAg
TlNQb2ludCBjb252ZXJ0ZWRQb2ludDsKKyAgICBpZiAoV0FLVmlldyAqZG9jdW1lbnRWaWV3ID0g
W3ZpZXcgZG9jdW1lbnRWaWV3XSkKKyAgICAgICAgY29udmVydGVkUG9pbnQgPSBbZG9jdW1lbnRW
aWV3IGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6bmlsXTsKKyAgICBlbHNlCisgICAgICAgIGNv
bnZlcnRlZFBvaW50ID0gW3ZpZXcgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpuaWxdOworICAg
IHJldHVybiBJbnRQb2ludChyb3VuZGYoY29udmVydGVkUG9pbnQueCksIHJvdW5kZihjb252ZXJ0
ZWRQb2ludC55KSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHJldHVy
biBwb2ludDsKK30KKworSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5k
b3dUb1Jvb3QoY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQp
Cit7CisgICAgaWYgKCFyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1
cm4gcG9pbnQ7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgQVNTRVJU
KFtyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIGlzS2luZE9mQ2xhc3M6W05TU2Nyb2xsVmll
dyBjbGFzc11dKTsKKyAgICBXQUtTY3JvbGxWaWV3ICp2aWV3ID0gc3RhdGljX2Nhc3Q8V0FLU2Ny
b2xsVmlldyAqPihyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKTsKKyAgICBOU1BvaW50IGNv
bnZlcnRlZFBvaW50OworICAgIGlmIChXQUtWaWV3ICpkb2N1bWVudFZpZXcgPSBbdmlldyBkb2N1
bWVudFZpZXddKQorICAgICAgICBjb252ZXJ0ZWRQb2ludCA9IEludFBvaW50KFtkb2N1bWVudFZp
ZXcgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3Om5pbF0pOworICAgIGVsc2UKKyAgICAgICAg
Y29udmVydGVkUG9pbnQgPSBJbnRQb2ludChbdmlldyBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZp
ZXc6bmlsXSk7CisgICAgcmV0dXJuIEludFBvaW50KHJvdW5kZihjb252ZXJ0ZWRQb2ludC54KSwg
cm91bmRmKGNvbnZlcnRlZFBvaW50LnkpKTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworCisgICAgcmV0dXJuIHBvaW50OworfQorCitOU1ZpZXcgKldpZGdldDo6cGxhdGZvcm1XaWRn
ZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3dpZGdldC5nZXQoKTsKK30KKwordm9pZCBXaWRn
ZXQ6OnNldFBsYXRmb3JtV2lkZ2V0KE5TVmlldyAqd2lkZ2V0KQoreworICAgIGlmICh3aWRnZXQg
PT0gbV93aWRnZXQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2lkZ2V0ID0gd2lkZ2V0Owor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNs
ZWVwRGlzYWJsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVl
cERpc2FibGVyLmNwcAppbmRleCA1Yjk5N2NhY2E3OGZlMjg3NWQ0OTM0ZDE1ZjRkY2FlNzg0ODEz
YTQyLi5iMzZiNjZkOGU4ZmJhNDI0NzI1OGMwODZhOTRiNGNkODEwZjY3OTlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5jcHAK
QEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEaXNwbGF5
U2xlZXBEaXNhYmxlci5oIgogCisjaWYgIVBMQVRGT1JNKElPUykKKwogI2luY2x1ZGUgPElPS2l0
L3B3cl9tZ3QvSU9QTUxpYi5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtNTQs
MyArNTYsMTIgQEAgRGlzcGxheVNsZWVwRGlzYWJsZXI6On5EaXNwbGF5U2xlZXBEaXNhYmxlcigp
CiB9CiAKIH0KKworI2Vsc2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworRGlzcGxheVNsZWVwRGlz
YWJsZXI6OkRpc3BsYXlTbGVlcERpc2FibGVyKGNvbnN0IGNoYXIgKikgeyB9CitEaXNwbGF5U2xl
ZXBEaXNhYmxlcjo6fkRpc3BsYXlTbGVlcERpc2FibGVyKCkgeyB9Cit9CisKKyNlbmRpZiAvLyAh
UExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rp
c3BsYXlTbGVlcERpc2FibGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxh
eVNsZWVwRGlzYWJsZXIuaAppbmRleCAyYzlhMTg0MmY0OTBhZDkwNzEzMTA5OTQ5NjZkYWJhNjdm
M2U0MjdmLi5hNjliZjhkZDk0NjhmZjQ2MzM3YjA1YjQwMjI0MDQ4ZjQ2MDBjZjNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuaApA
QCAtNDAsNyArNDAsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIERpc3BsYXlTbGVlcERpc2Fi
bGVyKGNvbnN0IGNoYXIqIHJlYXNvbik7CiAgICAgCisjaWYgIVBMQVRGT1JNKElPUykKICAgICB1
aW50MzJfdCBtX2Rpc2FibGVEaXNwbGF5U2xlZXBBc3NlcnRpb247CisjZW5kaWYgLy8gIVBMQVRG
T1JNKElPUykKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9GaWxlU3lzdGVtTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0ZpbGVTeXN0
ZW1NYWMubW0KaW5kZXggMjE2YjYwNTk1OGUxMzdiMjlhYTI4MWVkZDRmMmM4M2Q2YWY5MDBlMC4u
NjhmNmRmNmM2NTVhNjkwZWQ1OTIwMjVkY2M5YmE2MGE2ZTU2Y2M1MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW0KQEAgLTY3LDYgKzY3LDggQEAgU3Ry
aW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZpbGVI
YW5kbGUmIHBsYXRmb3JtRmlsZUgKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCh0ZW1wb3Jh
cnlGaWxlUGF0aC5kYXRhKCkpOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKKwogdm9pZCBzZXRN
ZXRhZGF0YVVSTChTdHJpbmcmIFVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29u
c3QgU3RyaW5nJiBwYXRoKQogewogICAgIE5TVVJMICpVUkwgPSBVUkxXaXRoVXNlclR5cGVkU3Ry
aW5nKFVSTFN0cmluZywgbmlsKTsKQEAgLTgyLDcgKzg0LDYgQEAgdm9pZCBzZXRNZXRhZGF0YVVS
TChTdHJpbmcmIFVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5n
JiBwYXQKICAgICB9KTsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCiBib29sIGNhbkV4Y2x1ZGVG
cm9tQmFja3VwKCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk0LDYgKzk1LDcgQEAgYm9vbCBl
eGNsdWRlRnJvbUJhY2t1cChjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgQ1NCYWNrdXBTZXRJdGVt
RXhjbHVkZWQocGF0aEFzVVJMKHBhdGgpLmdldCgpLCBUUlVFLCBGQUxTRSk7IAogICAgIHJldHVy
biB0cnVlOwogfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjLm1tCmluZGV4IDMyZTdjNzIyNjJhNmVlNjQy
OTg2MTMwMDFiYTU3Nzg1ODdkN2E0MTkuLjEwMTUwNzA4YTM5ODMxNGU5MDZkODc3YTFjOTA5NmFl
YjdmOTI1OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9LaWxsUmlu
Z01hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvS2lsbFJpbmdNYWMubW0K
QEAgLTgxLDMgKzgxLDQgQEAgdm9pZCBLaWxsUmluZzo6c2V0VG9ZYW5rZWRTdGF0ZSgpCiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL01lbW9yeVByZXNzdXJlSGFuZGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMubW0KaW5kZXggYWM5ZDBjZmFjY2Rj
YjRhMzI5ZDNjMjlmY2RjMDA4MjY5ZjgwOTA4ZC4uOTE2MzY1M2RlY2MzMzA4ZTQxYWUzYzkwZmU1
NzViNGJmYTM3M2VhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL01l
bW9yeVByZXNzdXJlSGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTWFjLm1tCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgTWVt
b3J5UHJlc3N1cmVIYW5kbGVyOjppbnN0YWxsKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZGlz
cGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSNpZiBNQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgIVBMQVRGT1JNKElPUykgJiYgTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogICAgICAgICBfY2FjaGVfZXZlbnRfc291
cmNlID0gd2tDcmVhdGVNZW1vcnlTdGF0dXNQcmVzc3VyZUNyaXRpY2FsRGlzcGF0Y2hPbk1haW5R
dWV1ZSgpOwogI2Vsc2UKICAgICAgICAgX2NhY2hlX2V2ZW50X3NvdXJjZSA9IHdrQ3JlYXRlVk1Q
cmVzc3VyZURpc3BhdGNoT25NYWluUXVldWUoKTsKQEAgLTE1OCw3ICsxNTgsOSBAQCB2b2lkIE1l
bW9yeVByZXNzdXJlSGFuZGxlcjo6cmVsZWFzZU1lbW9yeShib29sKQogCiAgICAgbWVtb3J5Q2Fj
aGUoKS0+cHJ1bmVUb1BlcmNlbnRhZ2UoMCk7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIExh
eWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5kcmFpbigpOworI2VuZGlmCiAKICAgICBjc3NWYWx1ZVBv
b2woKS5kcmFpbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
UGxhdGZvcm1DbG9ja0NNLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3Jt
Q2xvY2tDTS5tbQppbmRleCAzM2Y1NGM5YTE0ZjMwZTRhMjUyZWI1YjgyMGI0ZWFhYTY1YzdlMDM1
Li4wNzQwMDVlYmFkODQ0NmMxZGMwM2U0YmFhZWJjMzcxYTU0MzViNTBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1DbG9ja0NNLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUNsb2NrQ00ubW0KQEAgLTMxLDExICszMSwx
OSBAQAogCiAjaW1wb3J0ICJNZWRpYVRpbWVNYWMuaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgi
CisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8Q29yZU1lZGlhL0NNQXVkaW9DbG9jay5oPgor
I2Vsc2UKICNpbXBvcnQgPENvcmVNZWRpYS9DTUF1ZGlvRGV2aWNlQ2xvY2suaD4KKyNlbmRpZgog
CiBTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKENvcmVNZWRpYSkKIAorI2lmIFBMQVRGT1JN
KElPUykKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNQXVkaW9DbG9ja0NyZWF0ZSwgT1NTdGF0dXMs
IChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENNQ2xvY2tSZWYgKmNsb2NrT3V0KSwgKGFsbG9j
YXRvciwgY2xvY2tPdXQpKQorI2Vsc2UKIFNPRlRfTElOSyhDb3JlTWVkaWEsIENNQXVkaW9EZXZp
Y2VDbG9ja0NyZWF0ZSwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENGU3Ry
aW5nUmVmIGRldmljZVVJRCwgQ01DbG9ja1JlZiAqY2xvY2tPdXQpLCAoYWxsb2NhdG9yLCBkZXZp
Y2VVSUQsIGNsb2NrT3V0KSkKKyNlbmRpZgogU09GVF9MSU5LKENvcmVNZWRpYSwgQ01UaW1lYmFz
ZUNyZWF0ZVdpdGhNYXN0ZXJDbG9jaywgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0
b3IsIENNQ2xvY2tSZWYgbWFzdGVyQ2xvY2ssIENNVGltZWJhc2VSZWYgKnRpbWViYXNlT3V0KSwg
KGFsbG9jYXRvciwgbWFzdGVyQ2xvY2ssIHRpbWViYXNlT3V0KSkKIFNPRlRfTElOSyhDb3JlTWVk
aWEsIENNVGltZWJhc2VTZXRUaW1lLCBPU1N0YXR1cywgKENNVGltZWJhc2VSZWYgdGltZWJhc2Us
IENNVGltZSB0aW1lKSwgKHRpbWViYXNlLCB0aW1lKSkKIFNPRlRfTElOSyhDb3JlTWVkaWEsIENN
VGltZWJhc2VHZXRUaW1lLCBDTVRpbWUsIChDTVRpbWViYXNlUmVmIHRpbWViYXNlKSwgKHRpbWVi
YXNlKSkKQEAgLTU0LDcgKzYyLDExIEBAIFBsYXRmb3JtQ2xvY2tDTTo6UGxhdGZvcm1DbG9ja0NN
KCkKICAgICAsIG1fcnVubmluZyhmYWxzZSkKIHsKICAgICBDTUNsb2NrUmVmIHJhd0Nsb2NrUHRy
ID0gMDsKKyNpZiBQTEFURk9STShJT1MpCisgICAgQ01BdWRpb0Nsb2NrQ3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsICZyYXdDbG9ja1B0cik7CisjZWxzZQogICAgIENNQXVkaW9EZXZpY2VDbG9j
a0NyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBOVUxMLCAmcmF3Q2xvY2tQdHIpOworI2VuZGlm
CiAgICAgUmV0YWluUHRyPENNQ2xvY2tSZWY+IGNsb2NrID0gYWRvcHRDRihyYXdDbG9ja1B0cik7
CiAgICAgaW5pdGlhbGl6ZVdpdGhUaW1pbmdTb3VyY2UoY2xvY2suZ2V0KCkpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaAppbmRleCBlOTQ2YjNkOWRlNTM5ZGZm
Y2IzOGUzOTU4ZWI4MGFiZTU5ZmUxMTY4Li4yNTdkODNkMDcxOGRjMmI1ODFlNDBlM2UyNGQ2ZTY1
ZWMwMGQyNjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU29mdExp
bmtpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaApA
QCAtMjksNiArMjksMTAgQEAKICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0IDxk
bGZjbi5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+Cisj
ZW5kaWYKKwogI2RlZmluZSBTT0ZUX0xJTktfTElCUkFSWShsaWIpIFwKICAgICBzdGF0aWMgdm9p
ZCogbGliIyNMaWJyYXJ5KCkgXAogICAgIHsgXApAQCAtNjIsNiArNjYsMTUgQEAKICAgICAgICAg
cmV0dXJuIGZyYW1ld29ya0xpYnJhcnk7IFwKICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisj
ZGVmaW5lIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05BTChmcmFtZXdvcmspIFwK
KyAgICBzdGF0aWMgdm9pZCogZnJhbWV3b3JrIyNMaWJyYXJ5KCkgXAorICAgIHsgXAorICAgICAg
ICBzdGF0aWMgdm9pZCogZnJhbWV3b3JrTGlicmFyeSA9IGRsb3BlbigiL1N5c3RlbS9MaWJyYXJ5
L1ByaXZhdGVGcmFtZXdvcmtzLyIgI2ZyYW1ld29yayAiLmZyYW1ld29yay8iICNmcmFtZXdvcmss
IFJUTERfTk9XKTsgXAorICAgICAgICByZXR1cm4gZnJhbWV3b3JrTGlicmFyeTsgXAorICAgIH0K
KyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKICNkZWZpbmUgU09GVF9MSU5LX1NUQUdFRF9GUkFN
RVdPUksoZnJhbWV3b3JrLCB1bnN0YWdlZExvY2F0aW9uLCB2ZXJzaW9uKSBcCiAgICAgc3RhdGlj
IHZvaWQqIGZyYW1ld29yayMjTGlicmFyeSgpIFwKICAgICB7IFwKQEAgLTk5LDYgKzExMiwzMCBA
QAogICAgICAgICByZXR1cm4gc29mdExpbmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsg
XAogICAgIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyNkZWZpbmUgU09GVF9MSU5LX01BWV9GQUlM
KGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBwYXJhbWV0ZXJEZWNsYXJhdGlv
bnMsIHBhcmFtZXRlck5hbWVzKSBcCisgICAgc3RhdGljIHJlc3VsdFR5cGUgKCpzb2Z0TGluayMj
ZnVuY3Rpb25OYW1lKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMgPSAwOyBcCisgICAgXAorICAgIHN0
YXRpYyBib29sIGluaXQjI2Z1bmN0aW9uTmFtZSgpIFwKKyAgICB7IFwKKyAgICAgICAgQVNTRVJU
KCFzb2Z0TGluayMjZnVuY3Rpb25OYW1lKTsgXAorICAgICAgICBzb2Z0TGluayMjZnVuY3Rpb25O
YW1lID0gKHJlc3VsdFR5cGUgKCopIHBhcmFtZXRlckRlY2xhcmF0aW9ucykgZGxzeW0oZnJhbWV3
b3JrIyNMaWJyYXJ5KCksICNmdW5jdGlvbk5hbWUpOyBcCisgICAgICAgIHJldHVybiAhIXNvZnRM
aW5rIyNmdW5jdGlvbk5hbWU7IFwKKyAgICB9IFwKKyAgICBcCisgICAgc3RhdGljIGJvb2wgY2Fu
TG9hZCMjZnVuY3Rpb25OYW1lKCkgXAorICAgIHsgXAorICAgICAgICBzdGF0aWMgYm9vbCBsb2Fk
ZWQgPSBpbml0IyNmdW5jdGlvbk5hbWUoKTsgXAorICAgICAgICByZXR1cm4gbG9hZGVkOyBcCisg
ICAgfSBcCisgICAgXAorICAgIHJlc3VsdFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xh
cmF0aW9ucyBcCisgICAgeyBcCisgICAgICAgIEFTU0VSVChzb2Z0TGluayMjZnVuY3Rpb25OYW1l
KTsgXAorICAgICAgICByZXR1cm4gc29mdExpbmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1l
czsgXAorICAgIH0KKyNlbmRpZgorCiAvKiBjYWxsaW5nQ29udmVudGlvbiBpcyB1bnVzZWQgb24g
TWFjIGJ1dCBpcyBoZXJlIHRvIGtlZXAgdGhlIG1hY3JvIHByb3RvdHlwZSB0aGUgc2FtZSBiZXR3
ZWVuIE1hYyBhbmQgV2luZG93cy4gKi8KICNkZWZpbmUgU09GVF9MSU5LX09QVElPTkFMKGZyYW1l
d29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBjYWxsaW5nQ29udmVudGlvbiwgcGFyYW1l
dGVyRGVjbGFyYXRpb25zKSBcCiAgICAgdHlwZWRlZiByZXN1bHRUeXBlICgqZnVuY3Rpb25OYW1l
IyNQdHJUeXBlKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnM7IFwKQEAgLTIwMiwzICsyMzksMzIgQEAK
ICAgICAgICAgZ2V0IyNuYW1lID0gbmFtZSMjRnVuY3Rpb247IFwKICAgICAgICAgcmV0dXJuIGNv
bnN0YW50IyNuYW1lOyBcCiAgICAgfQorCisjaWYgUExBVEZPUk0oSU9TKQorI2RlZmluZSBTT0ZU
X0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoZnJhbWV3b3JrLCBuYW1lLCB0eXBlKSBcCisgICAgc3Rh
dGljIGJvb2wgaW5pdCMjbmFtZSgpOyBcCisgICAgc3RhdGljIHR5cGUgKCpnZXQjI25hbWUpKCkg
PSAwOyBcCisgICAgc3RhdGljIHR5cGUgY29uc3RhbnQjI25hbWU7IFwKKyAgICBcCisgICAgc3Rh
dGljIHR5cGUgbmFtZSMjRnVuY3Rpb24oKSBcCisgICAgeyBcCisgICAgICAgIHJldHVybiBjb25z
dGFudCMjbmFtZTsgXAorICAgIH1cCisgICAgXAorICAgIHN0YXRpYyBib29sIGNhbkxvYWQjI25h
bWUoKSBcCisgICAgeyBcCisgICAgICAgIHN0YXRpYyBib29sIGxvYWRlZCA9IGluaXQjI25hbWUo
KTsgXAorICAgICAgICByZXR1cm4gbG9hZGVkOyBcCisgICAgfSBcCisgICAgXAorICAgIHN0YXRp
YyBib29sIGluaXQjI25hbWUoKSBcCisgICAgeyBcCisgICAgICAgIEFTU0VSVCghZ2V0IyNuYW1l
KTsgXAorICAgICAgICB2b2lkKiBjb25zdGFudCA9IGRsc3ltKGZyYW1ld29yayMjTGlicmFyeSgp
LCAjbmFtZSk7IFwKKyAgICAgICAgaWYgKCFjb25zdGFudCkgXAorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyBcCisgICAgICAgIGNvbnN0YW50IyNuYW1lID0gKnN0YXRpY19jYXN0PHR5cGUqPihj
b25zdGFudCk7IFwKKyAgICAgICAgZ2V0IyNuYW1lID0gbmFtZSMjRnVuY3Rpb247IFwKKyAgICAg
ICAgcmV0dXJuIHRydWU7IFwKKyAgICB9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9TeXN0ZW1WZXJzaW9uTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1N5c3RlbVZlcnNpb25NYWMubW0KaW5kZXggYmNjMTFiYTliNTg5OTNmZDU4OGEx
MWM5OTkwNTVjOWY3NmMzMmZjZC4uZWNkNTVlMjIzN2M5OTAxMTk2NTI4ZDQwMzk1YWM3MmJiMWFh
ZWFiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1N5c3RlbVZlcnNp
b25NYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1N5c3RlbVZlcnNpb25N
YWMubW0KQEAgLTI3LDYgKzI3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIVBM
QVRGT1JNKElPUykKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAK
IAogc3RhdGljIE5TU3RyaW5nICpjcmVhdGVTeXN0ZW1NYXJrZXRpbmdWZXJzaW9uKCkKQEAgLTY0
LDExICs2NSwxNSBAQCBzdGF0aWMgTlNTdHJpbmcgKmNyZWF0ZVN5c3RlbU1hcmtldGluZ1ZlcnNp
b24oKQogCiAjZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgw
CiAKLQogTlNTdHJpbmcgKnN5c3RlbU1hcmtldGluZ1ZlcnNpb24oKQogewogICAgIHN0YXRpYyBO
U1N0cmluZyAqdmVyc2lvbiA9IGNyZWF0ZVN5c3RlbU1hcmtldGluZ1ZlcnNpb24oKTsKICAgICBy
ZXR1cm4gdmVyc2lvbjsKIH0KKyNlbHNlCisKK30KKworI2VuZGlmIC8vICFQTEFURk9STShJT1Mp
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVs
bFNjcmVlblBsYWNlaG9sZGVyVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmgKaW5kZXggN2IyNDNiMGEyZjI0YzIwNTcz
N2FhMzk3OGQxYThjNmFlNGRjNDRjMy4uODdlNjk5YWNlYzBhNjgwODdlZTlkZWZmZGE0MDQwODUw
OGZjMjMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVG
dWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmgKQEAgLTIzLDYgKzIzLDggQEAK
ICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaWYgIVBMQVRGT1JN
KElPUykKKwogI2lmbmRlZiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlld19oCiAjZGVm
aW5lIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3X2gKIApAQCAtNDAsMyArNDIsNSBA
QAogQGVuZAogCiAjZW5kaWYgLy8gV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXdfaAor
CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbQpp
bmRleCBhOTZkYjBlNmIxZDFkZmEzMDczY2NmMzI0YTkzYmY0NjI4YTZmMWEzLi4xM2Y1NjNlOTI4
MWU3YTdjMmU3NWM2NjM2YTNjOWYxNTU5YmZmOWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJW
aWV3Lm1tCkBAIC0yNCw2ICsyNCw4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lm
ICFQTEFURk9STShJT1MpCisKICNpbmNsdWRlICJXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVy
Vmlldy5oIgogCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgpAQCAtOTMsMyArOTUsNSBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIH0KIAogQGVuZAorCisjZW5kaWYgLy8gIVBMQVRG
T1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
RnVsbFNjcmVlbldhcm5pbmdWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
Q29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5oCmluZGV4IGY2ZWE5YWQ3ODRlYWUyZGUwOTVkMWUz
MGVkZDdjMGM1NGZhNmNjY2QuLmUyYTM3ZmI0MjQwODEyYjE4ZGQwOGYyM2MzYmI4MTI3MmNjYTYx
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNj
cmVlbldhcm5pbmdWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNv
cmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcuaApAQCAtMjMsNiArMjMsOCBAQAogICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaWZu
ZGVmIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXdfaAogI2RlZmluZSBXZWJDb3JlRnVsbFNj
cmVlbldhcm5pbmdWaWV3X2gKIApAQCAtMzksMyArNDEsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAv
LyBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3X2gKKworI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxT
Y3JlZW5XYXJuaW5nVmlldy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
RnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tCmluZGV4IGM0ZTFmYTMyOTBhZDQ0MDRkNjJmMmUxMTRi
MGFkZmExNmFlMTkyYzMuLjM0OTRiODhhYzllNDE2YmZkNWI5YTkwODcyMjcwNWU0ZjY5NzE4N2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVl
bldhcm5pbmdWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
RnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tCkBAIC0yNCw2ICsyNCw4IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgorI2lmICFQTEFURk9STShJT1MpCisKICNpbmNsdWRlICJXZWJDb3JlRnVs
bFNjcmVlbldhcm5pbmdWaWV3LmgiCiAKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCkBA
IC0xMDMsMyArMTA1LDUgQEAgc3RhdGljIGNvbnN0IENHRmxvYXQgV2FybmluZ1ZpZXdTaGFkb3dS
YWRpdXMgPSA1OwogICAgIHJldHVybiBzZWxmOwogfQogQGVuZAorCisjZW5kaWYgLy8gIVBMQVRG
T1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
RnVsbFNjcmVlbldpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVG
dWxsU2NyZWVuV2luZG93LmgKaW5kZXggZGU2MzY1YTk0MTgyMTQ0NDRjNzE4MWI1ZTBjZGRlZGU1
OTYxOGFjMC4uNjAxZTM0OGYwMDQ0YzAyM2RlNTFhMDE4NWFlMmI4NWE1YjBiNzlhMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2lu
ZG93LmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3df
aAogI2RlZmluZSBXZWJDb3JlRnVsbFNjcmVlbldpbmRvd19oCiAKLSNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiAhUExBVEZPUk0oSU9TKQog
CiBAaW50ZXJmYWNlIFdlYkNvcmVGdWxsU2NyZWVuV2luZG93IDogTlNXaW5kb3cKIEBlbmQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldp
bmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldp
bmRvdy5tbQppbmRleCA1MjAyOTJjZmFiZWIwMTFhZTgyZGNjZjEyNjhmMDJjYmQ1ODQ5OWIxLi41
MzAyY2RhMmVhMWU0Njc1YTk3NzIxNzk1ZGRmY2QxMjEyYmY2MjM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93Lm1tCkBA
IC0yNSw3ICsyNSw3IEBACiAKICNpbXBvcnQgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgIVBMQVRGT1JNKElPUykK
IAogI2ltcG9ydCAiV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cuaCIKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU0NlbGxFeHRyYXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFzLmgKaW5kZXggNDdlZGZmODYx
YWViNGJhOGRmMjk4YTA4ZThjODQwODdkYTMwZDQ2MC4uOWZmNzQ2MmIwNzY2YzI1YWQxYTg1MDNm
OTM2MzJlODY1OWYxN2IxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYkNvcmVOU0NlbGxFeHRyYXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViQ29yZU5TQ2VsbEV4dHJhcy5oCkBAIC0yMyw4ICsyMywxMiBAQAogICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2ltcG9ydCA8
QXBwS2l0L0FwcEtpdC5oPgogCiBAaW50ZXJmYWNlIE5TQ2VsbCAoV2ViQ29yZUZvY3VzUmluZ0Ry
YXdpbmcpCiAtICh2b2lkKV93ZWJfZHJhd0ZvY3VzUmluZ1dpdGhGcmFtZTooTlNSZWN0KWNlbGxG
cmFtZSBpblZpZXc6KE5TVmlldyAqKWNvbnRyb2xWaWV3OwogQGVuZAorCisjZW5kaWYgLy8gIVBM
QVRGT1JNKElPUykKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YkNvcmVOU0NlbGxFeHRyYXMubSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
TlNDZWxsRXh0cmFzLm0KaW5kZXggYTU2ODkzMTc0YjM3NmQ3NjllNWE4ZDc1N2I2MzBlMzQwNWRj
MGQzMi4uMGQ1YjBlNzE1Y2MzYTQzNGVjNWY0YmU5OTE4YzM1OWZjMGEwYTM4MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU0NlbGxFeHRyYXMubQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TQ2VsbEV4dHJhcy5tCkBAIC0y
Niw2ICsyNiw4IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkNvcmVOU0NlbGxF
eHRyYXMuaCIKIAorI2lmICFQTEFURk9STShJT1MpCisKIEBpbXBsZW1lbnRhdGlvbiBOU0NlbGwg
KFdlYkNvcmVGb2N1c1JpbmdEcmF3aW5nKQogCiAtICh2b2lkKV93ZWJfZHJhd0ZvY3VzUmluZ1dp
dGhGcmFtZTooTlNSZWN0KWNlbGxGcmFtZSBpblZpZXc6KE5TVmlldyAqKWNvbnRyb2xWaWV3CkBA
IC00MCwzICs0Miw2IEBAIC0gKHZvaWQpX3dlYl9kcmF3Rm9jdXNSaW5nV2l0aEZyYW1lOihOU1Jl
Y3QpY2VsbEZyYW1lIGluVmlldzooTlNWaWV3ICopY29udHJvbFZpCiB9CiAKIEBlbmQKKworI2Vu
ZGlmIC8vICFQTEFURk9STShJT1MpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oCmluZGV4IDRiNDI3MDkwYzRmMjZiZmQ0NTRl
MzVlZmNkMjEzZmFiY2EzYmY3MTkuLjUzMzEyODk3MzU5M2ZhNDU2ZDY0MTY0NGUzMWZkY2RjMmZi
MDZhOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaApAQCAtMjgsNiArMjgsMTAgQEAKIAogI2luY2x1ZGUgPG9iamMvb2Jq
Yy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZh
Y2VJT1MuaCIKKyNlbmRpZgorCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGU3RyaW5nICogQ0ZT
dHJpbmdSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGTnVtYmVyICogQ0ZOdW1iZXJSZWY7
CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGRGljdGlvbmFyeSAqIENGRGljdGlvbmFyeVJlZjsK
QEAgLTUzLDE2ICs1NywyMSBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NUTGluZSAqIENUTGlu
ZVJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RSdW4gKiBDVFJ1blJlZjsKIHR5cGVkZWYg
Y29uc3Qgc3RydWN0IF9fQ1RUeXBlc2V0dGVyICogQ1RUeXBlc2V0dGVyUmVmOwogdHlwZWRlZiBj
b25zdCBzdHJ1Y3QgX19BWFVJRWxlbWVudCAqQVhVSUVsZW1lbnRSZWY7CisjaWYgIVBMQVRGT1JN
KElPUykKIHR5cGVkZWYgc3RydWN0IF9OU1JhbmdlIE5TUmFuZ2U7CiAKIHR5cGVkZWYgVUludDMy
IEZNRm9udDsKIHR5cGVkZWYgRk1Gb250IEFUU1VGb250SUQ7CiB0eXBlZGVmIFVJbnQxNiBBVFNH
bHlwaFJlZjsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQ0EpCisjaWYgIVBM
QVRGT1JNKElPU19TSU1VTEFUT1IpCiB0eXBlZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSAqSU9TdXJm
YWNlUmVmOworI2VuZGlmIC8vICFQTEFURk9STShJT1NfU0lNVUxBVE9SKQogI2VuZGlmCiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01F
VFJZX1RZUEVTCiB0eXBlZGVmIHN0cnVjdCBDR1BvaW50IE5TUG9pbnQ7CiB0eXBlZGVmIHN0cnVj
dCBDR1JlY3QgTlNSZWN0OwpAQCAtNzAsNiArNzksMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0
IE5TUmVjdDsKIHR5cGVkZWYgc3RydWN0IF9OU1BvaW50IE5TUG9pbnQ7CiB0eXBlZGVmIHN0cnVj
dCBfTlNSZWN0IE5TUmVjdDsKICNlbmRpZgorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyNp
ZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgor
I2VuZGlmCiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ0ZIVFRQ
Q29va2llU3RvcmFnZSogIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7CkBAIC0xMTksNyArMTMzLDcg
QEAgdHlwZWRlZiBlbnVtIHsKICAgICB3a1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcKIH0g
d2tQYXR0ZXJuVGlsaW5nOwogZXh0ZXJuIHZvaWQgKCp3a0NHQ29udGV4dFJlc2V0Q2xpcCkoQ0dD
b250ZXh0UmVmKTsKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAK
KyNpZiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwODAKIGV4dGVybiBib29sICgqd2tDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hhZG93T2Zm
c2V0cykoQ0dDb250ZXh0UmVmKTsKICNlbmRpZgogZXh0ZXJuIENHUGF0dGVyblJlZiAoKndrQ0dQ
YXR0ZXJuQ3JlYXRlV2l0aEltYWdlQW5kVHJhbnNmb3JtKShDR0ltYWdlUmVmLCBDR0FmZmluZVRy
YW5zZm9ybSwgaW50KTsKQEAgLTEzNSw2ICsxNDksNyBAQCBleHRlcm4gQ0ZSZWFkU3RyZWFtUmVm
ICgqd2tDcmVhdGVDdXN0b21DRlJlYWRTdHJlYW0pKHZvaWQgKigqZm9ybUNyZWF0ZSkoQ0ZSZWFk
UwogZXh0ZXJuIENGU3RyaW5nUmVmICgqd2tDb3B5Q0ZMb2NhbGl6YXRpb25QcmVmZXJyZWROYW1l
KShDRlN0cmluZ1JlZik7CiBleHRlcm4gTlNTdHJpbmcqICgqd2tDb3B5TlNVUkxSZXNwb25zZVN0
YXR1c0xpbmUpKE5TVVJMUmVzcG9uc2UqKTsKIGV4dGVybiBDRkFycmF5UmVmICgqd2tDb3B5TlNV
UkxSZXNwb25zZUNlcnRpZmljYXRlQ2hhaW4pKE5TVVJMUmVzcG9uc2UqKTsKKyNpZiAhUExBVEZP
Uk0oSU9TKQogZXh0ZXJuIHZvaWQgKCp3a0RyYXdCZXplbGVkVGV4dEZpZWxkQ2VsbCkoTlNSZWN0
LCBCT09MIGVuYWJsZWQpOwogZXh0ZXJuIHZvaWQgKCp3a0RyYXdUZXh0RmllbGRDZWxsRm9jdXNS
aW5nKShOU1RleHRGaWVsZENlbGwqLCBOU1JlY3QpOwogZXh0ZXJuIHZvaWQgKCp3a0RyYXdDYXBz
TG9ja0luZGljYXRvcikoQ0dDb250ZXh0UmVmLCBDR1JlY3QpOwpAQCAtMTQzLDE2ICsxNTgsMjIg
QEAgZXh0ZXJuIHZvaWQgKCp3a0RyYXdGb2N1c1JpbmcpKENHQ29udGV4dFJlZiwgQ0dDb2xvclJl
ZiwgaW50IHJhZGl1cyk7CiBleHRlcm4gTlNGb250KiAoKndrR2V0Rm9udEluTGFuZ3VhZ2VGb3JS
YW5nZSkoTlNGb250KiwgTlNTdHJpbmcqLCBOU1JhbmdlKTsKIGV4dGVybiBOU0ZvbnQqICgqd2tH
ZXRGb250SW5MYW5ndWFnZUZvckNoYXJhY3RlcikoTlNGb250KiwgVW5pQ2hhcik7CiBleHRlcm4g
Qk9PTCAoKndrR2V0R2x5cGhUcmFuc2Zvcm1lZEFkdmFuY2VzKShDR0ZvbnRSZWYsIE5TRm9udCos
IENHQWZmaW5lVHJhbnNmb3JtKiwgQVRTR2x5cGhSZWYqLCBDR1NpemUqIGFkdmFuY2UpOworI2Vu
ZGlmCisjaWYgIVBMQVRGT1JNKElPUykKIGV4dGVybiB2b2lkICgqd2tEcmF3TWVkaWFTbGlkZXJU
cmFjaykoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUmVjdCByZWN0LCBmbG9hdCB0aW1lTG9hZGVk
LCBmbG9hdCBjdXJyZW50VGltZSwKICAgICBmbG9hdCBkdXJhdGlvbiwgdW5zaWduZWQgc3RhdGUp
OwogZXh0ZXJuIHZvaWQgKCp3a0RyYXdNZWRpYVVJUGFydCkoaW50IHBhcnQsIENHQ29udGV4dFJl
ZiBjb250ZXh0LCBDR1JlY3QgcmVjdCwgdW5zaWduZWQgc3RhdGUpOwogZXh0ZXJuIENGU3RyaW5n
UmVmICgqd2tTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpKHVuc2lnbmVkIGtleVNp
emUsIENGU3RyaW5nUmVmIGNoYWxsZW5nZSwgQ0ZTdHJpbmdSZWYga2V5RGVzY3JpcHRpb24pOwog
ZXh0ZXJuIE5TU3RyaW5nKiAoKndrR2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUpKE5T
U3RyaW5nKik7CiBleHRlcm4gTlNBcnJheSogKCp3a0dldEV4dGVuc2lvbnNGb3JNSU1FVHlwZSko
TlNTdHJpbmcqKTsKKyNlbmRpZgogZXh0ZXJuIE5TU3RyaW5nKiAoKndrR2V0TUlNRVR5cGVGb3JF
eHRlbnNpb24pKE5TU3RyaW5nKik7CisjaWYgIVBMQVRGT1JNKElPUykKIGV4dGVybiBBVFNVRm9u
dElEICgqd2tHZXROU0ZvbnRBVFNVRm9udElkKShOU0ZvbnQqKTsKIGV4dGVybiBkb3VibGUgKCp3
a0dldE5TVVJMUmVzcG9uc2VDYWxjdWxhdGVkRXhwaXJhdGlvbikoTlNVUkxSZXNwb25zZSAqcmVz
cG9uc2UpOworI2VuZGlmCiBleHRlcm4gTlNEYXRlICooKndrR2V0TlNVUkxSZXNwb25zZUxhc3RN
b2RpZmllZERhdGUpKE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlKTsKKyNpZiAhUExBVEZPUk0oSU9T
KQogZXh0ZXJuIEJPT0wgKCp3a0dldE5TVVJMUmVzcG9uc2VNdXN0UmV2YWxpZGF0ZSkoTlNVUkxS
ZXNwb25zZSAqcmVzcG9uc2UpOwogZXh0ZXJuIHZvaWQgKCp3a0dldFdoZWVsRXZlbnREZWx0YXMp
KE5TRXZlbnQqLCBmbG9hdCogZGVsdGFYLCBmbG9hdCogZGVsdGFZLCBCT09MKiBjb250aW51b3Vz
KTsKIGV4dGVybiBVSW50OCAoKndrR2V0TlNFdmVudEtleUNoYXIpKE5TRXZlbnQgKik7CkBAIC0x
OTEsNyArMjEyLDkgQEAgZXh0ZXJuIE5TQXJyYXkgKigqd2tRVEdldFNpdGVzSW5NZWRpYURvd25s
b2FkQ2FjaGUpKCk7CiBleHRlcm4gdm9pZCAoKndrUVRDbGVhck1lZGlhRG93bmxvYWRDYWNoZUZv
clNpdGUpKE5TU3RyaW5nICpzaXRlKTsKIGV4dGVybiB2b2lkICgqd2tRVENsZWFyTWVkaWFEb3du
bG9hZENhY2hlKSgpOwogZXh0ZXJuIHZvaWQgKCp3a1NldENHRm9udFJlbmRlcmluZ01vZGUpKENH
Q29udGV4dFJlZiwgTlNGb250KiwgQk9PTCk7CitleHRlcm4gdm9pZCAoKndrU2V0Q29va2llU3Rv
cmFnZVByaXZhdGVCcm93c2luZ0VuYWJsZWQpKEJPT0wpOwogZXh0ZXJuIHZvaWQgKCp3a1NldERy
YWdJbWFnZSkoTlNJbWFnZSosIE5TUG9pbnQgb2Zmc2V0KTsKKyNlbmRpZgogZXh0ZXJuIHZvaWQg
KCp3a1NldE5TVVJMQ29ubmVjdGlvbkRlZmVyc0NhbGxiYWNrcykoTlNVUkxDb25uZWN0aW9uICos
IEJPT0wpOwogZXh0ZXJuIHZvaWQgKCp3a1NldE5TVVJMUmVxdWVzdFNob3VsZENvbnRlbnRTbmlm
ZikoTlNNdXRhYmxlVVJMUmVxdWVzdCAqLCBCT09MKTsKIGV4dGVybiB2b2lkICgqd2tTZXRCYXNl
Q1RNKShDR0NvbnRleHRSZWYsIENHQWZmaW5lVHJhbnNmb3JtKTsKQEAgLTIxNiwxMSArMjM5LDEz
IEBAIGV4dGVybiBib29sICgqd2tHZXRWZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3RlcnMpKENURm9u
dFJlZiwgY29uc3QgVW5pQ2hhcltdLCBDR0dsCiAKIGV4dGVybiBCT09MICgqd2tVc2VTaGFyZWRN
ZWRpYVVJKSgpOwogCisjaWYgIVBMQVRGT1JNKElPUykKIGV4dGVybiB2b2lkKiB3a0dldEh5cGhl
bmF0aW9uTG9jYXRpb25CZWZvcmVJbmRleDsKKyNlbmRpZgogCiBleHRlcm4gQ1RMaW5lUmVmICgq
d2tDcmVhdGVDVExpbmVXaXRoVW5pQ2hhclByb3ZpZGVyKShjb25zdCBVbmlDaGFyKiAoKnByb3Zp
ZGUpKENGSW5kZXggc3RyaW5nSW5kZXgsIENGSW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0aW9uYXJ5
UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiksIHZvaWQgKCpkaXNwb3NlKShjb25zdCBVbmlDaGFyKiBj
aGFycywgdm9pZCopLCB2b2lkKik7CiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwOTAKKyNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTA5MAogZW51bSB7CiAgICAgd2tDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBp
bmcgPSAoMSA8PCAwKSwKICAgICB3a0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgPSAo
MSA8PCAxKQpAQCAtMjM1LDExICsyNjAsMTIgQEAgZXh0ZXJuIENUVHlwZXNldHRlclJlZiAoKndr
Q3JlYXRlQ1RUeXBlc2V0dGVyV2l0aFVuaUNoYXJQcm92aWRlckFuZE9wdGlvbnMpKGNvbnMKIAog
ZXh0ZXJuIENHU2l6ZSAoKndrQ1RSdW5HZXRJbml0aWFsQWR2YW5jZSkoQ1RSdW5SZWYpOwogCi0j
aWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQ0EpCisjaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQ0Ep
ICYmICFQTEFURk9STShJT1NfU0lNVUxBVE9SKQogZXh0ZXJuIENHQ29udGV4dFJlZiAoKndrSU9T
dXJmYWNlQ29udGV4dENyZWF0ZSkoSU9TdXJmYWNlUmVmIHN1cmZhY2UsIHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlKTsKIGV4dGVybiBD
R0ltYWdlUmVmICgqd2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UpKENHQ29udGV4dFJlZiBj
b250ZXh0KTsKICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKIGV4dGVybiBpbnQgKCp3a1Jl
Y29tbWVuZGVkU2Nyb2xsZXJTdHlsZSkodm9pZCk7CiAKIGV4dGVybiBib29sICgqd2tFeGVjdXRh
YmxlV2FzTGlua2VkT25PckJlZm9yZVNub3dMZW9wYXJkKSh2b2lkKTsKQEAgLTI1MCw3ICsyNzYs
OSBAQCBleHRlcm4gdm9pZCAoKndrU2V0Q3Jhc2hSZXBvcnRBcHBsaWNhdGlvblNwZWNpZmljSW5m
b3JtYXRpb24pKENGU3RyaW5nUmVmKTsKIGV4dGVybiBOU1VSTCAqKCp3a0FWQXNzZXRSZXNvbHZl
ZFVSTCkoQVZBc3NldCopOwogCiBleHRlcm4gTlNDdXJzb3IgKigqd2tDdXJzb3IpKGNvbnN0IGNo
YXIqKTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogICAgIAorI2lmICFQTEFURk9STShJT1Mp
CiAjaWYgUExBVEZPUk0oTUFDKQogZXh0ZXJuIE5TQXJyYXkgKigqd2tTcGVlY2hTeW50aGVzaXNH
ZXRWb2ljZUlkZW50aWZpZXJzKSh2b2lkKTsKIGV4dGVybiBOU1N0cmluZyAqKCp3a1NwZWVjaFN5
bnRoZXNpc0dldERlZmF1bHRWb2ljZUlkZW50aWZpZXJGb3JMb2NhbGUpKE5TTG9jYWxlICopOwpA
QCAtMjY2LDYgKzI5NCwxMyBAQCBleHRlcm4gQ0ZUeXBlUmVmICgqd2tDb3B5QVhUZXh0TWFya2Vy
UmFuZ2VFbmQpKENGVHlwZVJlZiByYW5nZSk7CiBleHRlcm4gQ0ZUeXBlUmVmICgqd2tDcmVhdGVB
WFRleHRNYXJrZXIpKGNvbnN0IHZvaWQgKmJ5dGVzLCBzaXplX3QgbGVuKTsKIGV4dGVybiBCT09M
ICgqd2tHZXRCeXRlc0Zyb21BWFRleHRNYXJrZXIpKENGVHlwZVJlZiB0ZXh0TWFya2VyLCB2b2lk
ICpieXRlcywgc2l6ZV90IGxlbmd0aCk7CiBleHRlcm4gQVhVSUVsZW1lbnRSZWYgKCp3a0NyZWF0
ZUFYVUlFbGVtZW50UmVmKShpZCBlbGVtZW50KTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQor
CisjaWYgUExBVEZPUk0oSU9TKQorZXh0ZXJuIENHU2l6ZSAoKndrR2V0Vmlld3BvcnRTY3JlZW5T
aXplKSh2b2lkKTsKK2V4dGVybiB2b2lkICgqd2tTZXRMYXllckNvbnRlbnRzU2NhbGUpKENBTGF5
ZXIgKik7CitleHRlcm4gZmxvYXQgKCp3a0dldFNjcmVlblNjYWxlRmFjdG9yKSh2b2lkKTsKKyNl
bmRpZgogCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGVVJMU3RvcmFnZVNlc3Npb24qIENGVVJM
U3RvcmFnZVNlc3Npb25SZWY7CiBleHRlcm4gQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiAoKndrQ3Jl
YXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKShDRlN0cmluZ1JlZik7CkBAIC0yOTcsMTcgKzMzMiwy
MSBAQCBleHRlcm4gQ0ZBcnJheVJlZiAoKndrQ0ZVUkxSZXF1ZXN0Q29weUhUVFBSZXF1ZXN0Qm9k
eVBhcnRzKShDRlVSTFJlcXVlc3RSZWYpOwogZXh0ZXJuIHZvaWQgKCp3a0NGVVJMUmVxdWVzdFNl
dEhUVFBSZXF1ZXN0Qm9keVBhcnRzKShDRk11dGFibGVVUkxSZXF1ZXN0UmVmLCBDRkFycmF5UmVm
IGJvZHlQYXJ0cyk7CiBleHRlcm4gdm9pZCAoKndrU2V0UmVxdWVzdFN0b3JhZ2VTZXNzaW9uKShD
RlVSTFN0b3JhZ2VTZXNzaW9uUmVmLCBDRk11dGFibGVVUkxSZXF1ZXN0UmVmKTsKICNlbmRpZgor
I2lmICFQTEFURk9STShJT1MpCiBleHRlcm4gdm9pZCAoKndrU2V0TWV0YWRhdGFVUkwpKE5TU3Ry
aW5nICp1cmxTdHJpbmcsIE5TU3RyaW5nICpyZWZlcnJlciwgTlNTdHJpbmcgKnBhdGgpOworI2Vu
ZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2ltcG9ydCA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4K
IAogZXh0ZXJuIGRpc3BhdGNoX3NvdXJjZV90ICgqd2tDcmVhdGVWTVByZXNzdXJlRGlzcGF0Y2hP
bk1haW5RdWV1ZSkodm9pZCk7CisjZW5kaWYKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTA5MAorI2lmICFQTEFURk9STShJT1MpICYmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogZXh0ZXJuIGRpc3BhdGNoX3NvdXJjZV90ICgqd2tDcmVh
dGVNZW1vcnlTdGF0dXNQcmVzc3VyZUNyaXRpY2FsRGlzcGF0Y2hPbk1haW5RdWV1ZSkodm9pZCk7
CiAjZW5kaWYKICAgICAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
ODAKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwODAKIGV4dGVybiBib29sICgqd2tFeGVjdXRhYmxlV2FzTGlua2VkT25PckJlZm9yZUxp
b24pKHZvaWQpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJGb250Q2FjaGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViRm9u
dENhY2hlLm1tCmluZGV4IGU0MDc1M2U1OTQzYjNjYTE3MzA3NTU0ZTIxZDE4Mjc3Mzg4MmZkZTMu
LjhjODI2MGIwMmIyYjA5OGI5ZWRkZWJlMGFlYjEzNTJjMWY0ZWUwOWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJGb250Q2FjaGUubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYkZvbnRDYWNoZS5tbQpAQCAtMjg3LDEyICsyODcsMTAgQEAg
c3RhdGljIGlubGluZSBGb250VHJhaXRzTWFzayB0b1RyYWl0c01hc2soTlNGb250VHJhaXRNYXNr
IGFwcEtpdFRyYWl0cywgTlNJbnRlZ2UKICAgICByZXR1cm4gW3NlbGYgaW50ZXJuYWxGb250V2l0
aEZhbWlseTpkZXNpcmVkRmFtaWx5IHRyYWl0czpkZXNpcmVkVHJhaXRzIHdlaWdodDpkZXNpcmVk
V2VpZ2h0IHNpemU6c2l6ZV07CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQogKyAoTlNGb250ICop
Zm9udFdpdGhGYW1pbHk6KE5TU3RyaW5nICopZGVzaXJlZEZhbWlseSB0cmFpdHM6KE5TRm9udFRy
YWl0TWFzaylkZXNpcmVkVHJhaXRzIHNpemU6KGZsb2F0KXNpemUKIHsKICAgICBpbnQgZGVzaXJl
ZFdlaWdodCA9IChkZXNpcmVkVHJhaXRzICYgTlNCb2xkRm9udE1hc2spID8gOSA6IDU7CiAgICAg
cmV0dXJuIFtzZWxmIGZvbnRXaXRoRmFtaWx5OmRlc2lyZWRGYW1pbHkgdHJhaXRzOmRlc2lyZWRU
cmFpdHMgd2VpZ2h0OmRlc2lyZWRXZWlnaHQgc2l6ZTpzaXplXTsKIH0KLSNlbmRpZgogCiBAZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3Ry
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5jcHAK
aW5kZXggNWFiMDQyZjM1NzUzMjQ4YTRmMjYzZjYwMTRlYmJmNTk2YzY0NDMxMS4uNGE2MWRmNGM5
ODg1ZGE3YzBhY2M4NjRiMDU2OTM3MWEyOTU3YjcwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmNwcApAQCAtMzMsNiArMzMsMTAgQEAKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEJsb2JSZWdpc3RyeSYgYmxvYlJlZ2lzdHJ5KCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUlt
cGwuY3BwCmluZGV4IDZiYjVjYWU1YmFiNGJiMDcyZjY1NmE5ODNiZGViMDQwYTY4ODQ5MjMuLjIz
MWFmNzhhYWMzYmFlMjM1NjBlMzliYWExYjA3Yzg5NjMwYTQ0YTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcApAQCAtNDMs
NiArNDMsMTAgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJXZWJDb3JlVGhy
ZWFkLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBCbG9iUmVnaXN0cnlJbXBs
Ojp+QmxvYlJlZ2lzdHJ5SW1wbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0NyZWRlbnRpYWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Q3JlZGVudGlhbC5oCmluZGV4IDFhNWE0N2U1MjlmNzYzOGM5MTUzYzhmYzcyYzE4M2MzYTVjYTRj
NDQuLjIxNjZiOWJmYTk3MzU2MDUyMmM4MmU2NjM1MDc5OWVlYjU4OTFlMmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5oCkBAIC0yNyw3ICsyNyw3IEBA
CiAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2RlZmluZSBDRVJUSUZJQ0FU
RV9DUkVERU5USUFMU19TVVBQT1JURUQgUExBVEZPUk0oTUFDKQorI2RlZmluZSBDRVJUSUZJQ0FU
RV9DUkVERU5USUFMU19TVVBQT1JURUQgKFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oTUFDKSkK
IAogI2lmIENFUlRJRklDQVRFX0NSRURFTlRJQUxTX1NVUFBPUlRFRAogI2luY2x1ZGUgPFNlY3Vy
aXR5L1NlY0Jhc2UuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKaW5kZXggOTU5NTcyNDg3ZTk5OTM5MWZlNWMwYTNhNzNk
N2RmNTVmMjZjODllZS4uZDg2ZmQ4MWM0YzA2YjE3YTM2YjM3YmVmNjNjNmM5YmExMjQyODgxNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3Rv
cmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFs
U3RvcmFnZS5jcHAKQEAgLTM2LDYgKzM2LDEwIEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisj
aW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdHlwZWRlZiBIYXNoTWFwPFByb3RlY3Rpb25TcGFjZSwgQ3JlZGVudGlhbD4gUHJvdGVjdGlv
blNwYWNlVG9DcmVkZW50aWFsTWFwOwpAQCAtOTMsNiArOTcsMTEgQEAgdm9pZCBDcmVkZW50aWFs
U3RvcmFnZTo6c2V0KGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwsIGNvbnN0IFByb3RlY3Rp
b25TcGFjZSYKICAgICBBU1NFUlQocHJvdGVjdGlvblNwYWNlLmlzUHJveHkoKSB8fCB1cmwuaXNW
YWxpZCgpKTsKIAogICAgIHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLnNldChwcm90
ZWN0aW9uU3BhY2UsIGNyZWRlbnRpYWwpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHNhdmVU
b1BlcnNpc3RlbnRTdG9yYWdlKHByb3RlY3Rpb25TcGFjZSwgY3JlZGVudGlhbCk7CisjZW5kaWYK
KwogICAgIGlmICghcHJvdGVjdGlvblNwYWNlLmlzUHJveHkoKSkgewogICAgICAgICBvcmlnaW5z
V2l0aENyZWRlbnRpYWxzKCkuYWRkKG9yaWdpblN0cmluZ0Zyb21VUkwodXJsKSk7CiAKQEAgLTE2
Myw2ICsxNzIsMTUgQEAgQ3JlZGVudGlhbCBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0KGNvbnN0IFVS
TCYgdXJsKQogICAgIHJldHVybiBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXAoKS5nZXQo
aXRlci0+dmFsdWUpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBDcmVkZW50aWFsU3Rv
cmFnZTo6Y2xlYXJDcmVkZW50aWFscygpCit7CisgICAgcGF0aFRvRGVmYXVsdFByb3RlY3Rpb25T
cGFjZU1hcCgpLmNsZWFyKCk7CisgICAgb3JpZ2luc1dpdGhDcmVkZW50aWFscygpLmNsZWFyKCk7
CisgICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuY2xlYXIoKTsKK30KKyNlbmRp
ZgorCiB2b2lkIENyZWRlbnRpYWxTdG9yYWdlOjpzZXRQcml2YXRlTW9kZShib29sIG1vZGUpCiB7
CiAgICAgaWYgKCFtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9DcmVkZW50aWFsU3RvcmFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9DcmVkZW50aWFsU3RvcmFnZS5oCmluZGV4IGIzYmQxZmQ3ODM5MmEyNjdlMzA5ZmZjY2NmNDdh
MjFhZTA2ZTg5OWUuLjNjOGM3NDg3NTIwMjA1OWYxNzFkMWQyNGFiY2FkM2ZjOTVkODU1NDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3Jh
Z2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9y
YWdlLmgKQEAgLTQyLDYgKzQyLDExIEBAIHB1YmxpYzoKICAgICAvLyBPUyBwZXJzaXN0ZW50IHN0
b3JhZ2UuCiAgICAgc3RhdGljIENyZWRlbnRpYWwgZ2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdlKGNv
bnN0IFByb3RlY3Rpb25TcGFjZSYpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyB2
b2lkIHNhdmVUb1BlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYsIGNvbnN0
IENyZWRlbnRpYWwmKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCk7CisjZW5k
aWYKKwogICAgIC8vIFRoZXNlIG1ldGhvZHMgd29yayBmb3IgYXV0aGVudGljYXRpb24gc2NoZW1l
cyB0aGF0IHN1cHBvcnQgc2VuZGluZyBjcmVkZW50aWFscyB3aXRob3V0IHdhaXRpbmcgZm9yIGEg
cmVxdWVzdC4gRS5nLiwgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24gc2NoZW1lCiAgICAg
Ly8gYSBjbGllbnQgc2hvdWxkIGFzc3VtZSB0aGF0IGFsbCBwYXRocyBhdCBvciBkZWVwZXIgdGhh
biB0aGUgZGVwdGggb2YgYSBrbm93biBwcm90ZWN0ZWQgcmVzb3VyY2Ugc2hhcmUgYXJlIHdpdGhp
biB0aGUgc2FtZSBwcm90ZWN0aW9uIHNwYWNlLgogICAgIHN0YXRpYyBib29sIHNldChjb25zdCBD
cmVkZW50aWFsJiwgY29uc3QgVVJMJik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgVVJMIGNvcnJl
c3BvbmRzIHRvIGEga25vd24gcHJvdGVjdGlvbiBzcGFjZSwgc28gY3JlZGVudGlhbHMgY291bGQg
YmUgdXBkYXRlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
TmV0d29ya1N0YXRlTm90aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
TmV0d29ya1N0YXRlTm90aWZpZXIuaAppbmRleCAzMzI0N2M5N2ZjOTAyOTFlMTY1YzA0NWEzNmE2
ZjYzMWFhYmYzOWE5Li5mOWY2MWQ1Y2UzMzFjOGFlNDY5MjAxMDQ2ZGRjMTgwNzJkZGE0OTJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5v
dGlmaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3Rh
dGVOb3RpZmllci5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBM
QVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KICNpbmNsdWRlICJUaW1lci5oIgpAQCAtNjIsNiArNjIsMTAgQEAgcHVibGljOgogICAgIHZv
aWQgYWRkTmV0d29ya1N0YXRlQ2hhbmdlTGlzdGVuZXIoTmV0d29ya1N0YXRlQ2hhbmdlTGlzdGVu
ZXIpOwogCiAgICAgYm9vbCBvbkxpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzT25MaW5lOyB9Cisg
ICAgCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgc2V0SXNPbkxpbmUoYm9vbCk7CisjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgdm9pZCBuZXR3b3JrU3RhdGVDaGFu
Z2UoYm9vbCBvbmxpbmUpOwpAQCAtNzQsNyArNzgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbm90
aWZ5TmV0d29ya1N0YXRlQ2hhbmdlKCk7CiAgICAgdm9pZCB1cGRhdGVTdGF0ZSgpOwogCi0jaWYg
UExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICB2
b2lkIG5ldHdvcmtTdGF0ZUNoYW5nZVRpbWVyRmlyZWQoVGltZXI8TmV0d29ya1N0YXRlTm90aWZp
ZXI+Kik7CiAKICAgICBzdGF0aWMgdm9pZCBkeW5hbWljU3RvcmVDYWxsYmFjayhTQ0R5bmFtaWNT
dG9yZVJlZiwgQ0ZBcnJheVJlZiBjaGFuZ2VkS2V5cywgdm9pZCAqaW5mbyk7IApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAppbmRleCAw
Yzg1MmRjMmRjNmM1MGNhYTZiYjVmY2E3YTJlMDU5YTIxN2IzZDNhLi45M2UwZjlhNGNiMGMzMDgx
MmZjOTAyMzJmMmYyOGJkMTQ2ZmU5N2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAor
I2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGJvb2wgc2hvdWxkRm9yY2VDb250ZW50U25p
ZmZpbmc7CkBAIC00Miw3ICs0NiwxMSBAQCBzdGF0aWMgYm9vbCBzaG91bGRGb3JjZUNvbnRlbnRT
bmlmZmluZzsKIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlc291cmNlSGFuZGxlOjpC
dWlsdGluQ29uc3RydWN0b3I+IEJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwOwog
c3RhdGljIEJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwJiBidWlsdGluUmVzb3Vy
Y2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCgpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEFTU0VS
VChXZWJUaHJlYWRJc0xvY2tlZE9yRGlzYWJsZWQoKSk7CisjZWxzZQogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisjZW5kaWYKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEJ1aWx0aW5SZXNv
dXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwLCBtYXAsICgpKTsKICAgICByZXR1cm4gbWFwOwogfQpA
QCAtMTUxLDIzICsxNTksMjMgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50KFJlc291
cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQpCiAvLyBSZXNvdXJjZUhhbmRsZSBuZXZlciB1c2VzIGFz
eW5jIGNsaWVudCBjYWxscyBvbiB0aGVzZSBwbGF0Zm9ybXMgeWV0Lgogdm9pZCBSZXNvdXJjZUhh
bmRsZTo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKIHsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2
b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpCiB7Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShib29sKQog
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
ICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogdm9pZCBSZXNvdXJjZUhh
bmRsZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wp
CiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
ICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAppbmRleCBlZjQyMTkzNDM1NDc5ZTdiOWRjYWI0
NDkzYTlkNGM4ZDUwODI2MmYxLi4wZWQ4Mjg5OTNhMWRiNjkyNmE0MWZiMmMwZTVhMWU1OWU0YjYy
M2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVxdWVzdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXF1ZXN0QmFzZS5jcHAKQEAgLTM4LDYgKzM4LDEwIEBAIGRvdWJsZSBSZXNvdXJjZVJl
cXVlc3RCYXNlOjpzX2RlZmF1bHRUaW1lb3V0SW50ZXJ2YWwgPSBJTlRfTUFYOwogZG91YmxlIFJl
c291cmNlUmVxdWVzdEJhc2U6OnNfZGVmYXVsdFRpbWVvdXRJbnRlcnZhbCA9IDA7CiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKElPUykKK2Jvb2wgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c19kZWZhdWx0
QWxsb3dDb29raWVzID0gdHJ1ZTsKKyNlbmRpZgorCiBpbmxpbmUgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiBSZXNvdXJjZVJlcXVlc3RCYXNlOjphc1Jlc291cmNlUmVxdWVzdCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBSZXNvdXJjZVJlcXVlc3QqPih0aGlzKTsKQEAg
LTUyOCw0ICs1MzIsMTYgQEAgdW5zaWduZWQgaW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlv
bkNvdW50UGVySG9zdCgpCiB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgUmVz
b3VyY2VSZXF1ZXN0QmFzZTo6c2V0RGVmYXVsdEFsbG93Q29va2llcyhib29sIGFsbG93Q29va2ll
cykKK3sKKyAgICBzX2RlZmF1bHRBbGxvd0Nvb2tpZXMgPSBhbGxvd0Nvb2tpZXM7Cit9CisKK2Jv
b2wgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZGVmYXVsdEFsbG93Q29va2llcygpCit7CisgICAgcmV0
dXJuIHNfZGVmYXVsdEFsbG93Q29va2llczsKK30KKyNlbmRpZgorCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCmluZGV4
IDE0MDU3Y2IyN2Y0ZjgyM2U1OWFiYzQyYTg4MGY4NDAxYzVlNWEwYjkuLmFhMDYwMTk1M2Q4MDg0
NTVkNDRiNzA1YjY5ZmJhYjUwZjAwYTYwNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCkBAIC0xNDIsNiArMTQyLDEx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGRvdWJsZSBkZWZhdWx0VGlt
ZW91dEludGVydmFsKCk7IC8vIE1heSByZXR1cm4gMCB3aGVuIHVzaW5nIHBsYXRmb3JtIGRlZmF1
bHQuCiAgICAgICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRUaW1lb3V0SW50ZXJ2YWwoZG91Ymxl
KTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgc3RhdGljIGJvb2wgZGVmYXVsdEFsbG93
Q29va2llcygpOworICAgICAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0QWxsb3dDb29raWVzKGJv
b2wpOworI2VuZGlmCisKICAgICAgICAgc3RhdGljIGJvb2wgY29tcGFyZShjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAogICAgIHByb3RlY3RlZDoKQEAg
LTE2Myw3ICsxNjgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX2Nh
Y2hlUG9saWN5KHBvbGljeSkKICAgICAgICAgICAgICwgbV90aW1lb3V0SW50ZXJ2YWwoc19kZWZh
dWx0VGltZW91dEludGVydmFsKQogICAgICAgICAgICAgLCBtX2h0dHBNZXRob2QoQVNDSUlMaXRl
cmFsKCJHRVQiKSkKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgLCBtX2FsbG93Q29v
a2llcyh0cnVlKQorI2Vsc2UKKyAgICAgICAgICAgICwgbV9hbGxvd0Nvb2tpZXMoUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6ZGVmYXVsdEFsbG93Q29va2llcygpKQorI2VuZGlmCiAgICAgICAgICAgICAs
IG1fcmVzb3VyY2VSZXF1ZXN0VXBkYXRlZCh0cnVlKQogICAgICAgICAgICAgLCBtX3BsYXRmb3Jt
UmVxdWVzdFVwZGF0ZWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcmVzb3VyY2VSZXF1ZXN0Qm9k
eVVwZGF0ZWQodHJ1ZSkKQEAgLTIwNCw2ICsyMTMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgYXNSZXNvdXJjZVJlcXVlc3QoKSBjb25zdDsK
IAogICAgICAgICBzdGF0aWMgZG91YmxlIHNfZGVmYXVsdFRpbWVvdXRJbnRlcnZhbDsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgICAgIHN0YXRpYyBib29sIHNfZGVmYXVsdEFsbG93Q29va2llczsK
KyNlbmRpZgogICAgIH07CiAKICAgICBib29sIGVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYsIGNvbnN0IFJlc291cmNlUmVxdWVzdEJhc2UmKTsKQEAg
LTIzMCw3ICsyNDIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfTsKICAgICAKICAgICB1
bnNpZ25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCk7Ci0K
KyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBpbml0aWFsaXplSFRUUENvbm5lY3Rpb25TZXR0
aW5nc09uU3RhcnR1cCgpOworI2VuZGlmCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBSZXNvdXJjZVJlcXVlc3RCYXNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvQ3JlZGVudGlhbFN0b3JhZ2VDRk5ldC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NyZWRlbnRpYWxTdG9yYWdlQ0ZOZXQuY3BwCmluZGV4
IGMzNGY2ZjY2NWNhNzQ1MjMyOTliOTFjMTc0MTkzMGU2NzE0YmZjYjkuLmM3MjUyYzM4NTQwM2U2
NWM1NTA3ZTQ5ZTUyNWRkMzAzYWYxYjNjYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvQ3JlZGVudGlhbFN0b3JhZ2VDRk5ldC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DcmVkZW50aWFsU3RvcmFnZUNGTmV0LmNwcApA
QCAtMzksNiArMzksMTAgQEAKICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0
U3lzdGVtSW50ZXJmYWNlLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRl
IDxDRk5ldHdvcmsvQ0ZVUkxDcmVkZW50aWFsU3RvcmFnZS5oPgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogQ3JlZGVudGlhbCBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0RnJvbVBlcnNp
c3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQpAQCAt
NDgsNiArNTIsMjMgQEAgQ3JlZGVudGlhbCBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0RnJvbVBlcnNp
c3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHIKICAgICByZXR1cm4gY29yZShj
cmVkZW50aWFsQ0YuZ2V0KCkpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBDcmVkZW50
aWFsU3RvcmFnZTo6c2F2ZVRvUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNl
JiBwcm90ZWN0aW9uU3BhY2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCit7CisgICAg
UmV0YWluUHRyPENGVVJMQ3JlZGVudGlhbFN0b3JhZ2VSZWY+IHN0b3JhZ2VDRiA9IGFkb3B0Q0Yo
Q0ZVUkxDcmVkZW50aWFsU3RvcmFnZUNyZWF0ZSgwKSk7CisgICAgUmV0YWluUHRyPENGVVJMUHJv
dGVjdGlvblNwYWNlUmVmPiBwcm90ZWN0aW9uU3BhY2VDRiA9IGFkb3B0Q0YoY3JlYXRlQ0YocHJv
dGVjdGlvblNwYWNlKSk7CisKKyAgICBpZiAoY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpID09IENy
ZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpIHsKKyAgICAgICAgQ3JlZGVudGlhbCBzZXNzaW9uQ3Jl
ZGVudGlhbChjcmVkZW50aWFsLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uKTsKKyAg
ICAgICAgUmV0YWluUHRyPENGVVJMQ3JlZGVudGlhbFJlZj4gc2Vzc2lvbkNyZWRlbnRpYWxDRiA9
IGFkb3B0Q0YoY3JlYXRlQ0Yoc2Vzc2lvbkNyZWRlbnRpYWwpKTsKKyAgICAgICAgQ0ZVUkxDcmVk
ZW50aWFsU3RvcmFnZVNldERlZmF1bHRDcmVkZW50aWFsRm9yUHJvdGVjdGlvblNwYWNlKHN0b3Jh
Z2VDRi5nZXQoKSwgc2Vzc2lvbkNyZWRlbnRpYWxDRi5nZXQoKSwgcHJvdGVjdGlvblNwYWNlQ0Yu
Z2V0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJldGFpblB0cjxDRlVSTENyZWRlbnRpYWxS
ZWY+IGNyZWRlbnRpYWxDRiA9IGFkb3B0Q0YoY3JlYXRlQ0YoY3JlZGVudGlhbCkpOworICAgICAg
ICBDRlVSTENyZWRlbnRpYWxTdG9yYWdlU2V0RGVmYXVsdENyZWRlbnRpYWxGb3JQcm90ZWN0aW9u
U3BhY2Uoc3RvcmFnZUNGLmdldCgpLCBjcmVkZW50aWFsQ0YuZ2V0KCksIHByb3RlY3Rpb25TcGFj
ZUNGLmdldCgpKTsKKyAgICB9Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gVVNFKENGTkVUV09SSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvRE5TQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9ETlNDRk5ldC5jcHAKaW5kZXggMDc1YWE2YmNhNWUyNTY0N2FlYmU5ZjEyZDY5
ZDZhYjZjODNlNDZjMy4uZTNmMWMyYjkxMmM4ZWM1YmRkYjY4MThkZTRhNzUyZjZiMTk1NTFiNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5jcHAK
QEAgLTM3LDYgKzM3LDEwIEBACiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRl
IDxDRk5ldHdvcmsvQ0ZOZXR3b3JrLmg+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICNp
bmNsdWRlICJMb2FkZXJSdW5Mb29wQ0YuaCIKICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZOZXR3b3Jr
Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Byb3h5
U2VydmVyQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Qcm94
eVNlcnZlckNGTmV0LmNwcAppbmRleCA3MTExOGQyZWViMWZmOTUyYTE1OTIzMGMwYmM0Mzg2MmQ5
NDRhNmZhLi45ZjE0NzEyNjk3ZTQ5ZWI2NTVkNjhhNjhmMmQ1NzQzYmMxOTJlNjY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Byb3h5U2VydmVyQ0ZOZXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUHJveHlTZXJ2ZXJD
Rk5ldC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0jaWYgUExBVEZPUk0oV0lOKQorI2lmIFBM
QVRGT1JNKElPUykgfHwgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUgPENGTmV0d29yay9DRk5ldHdv
cmsuaD4KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZVJlcXVlc3QuaAppbmRleCA2Y2YyNmFiNGMzZWY4NGEwNGNlY2U4ZmFkZTk4
ZDdkOGNhMjM1ZDcyLi4zYjg5ZjNiNDQ2NmRjMDViNTk4YmRkOGQ2MTIxZGM4MzhjNWI2ZjM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVx
dWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VS
ZXF1ZXN0LmgKQEAgLTQzLDIyICs0MywzNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVi
bGljOgogICAgICAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwpIAogICAgICAg
ICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKFVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIFVz
ZVByb3RvY29sQ2FjaGVQb2xpY3kpCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgLCBt
X21haW5SZXNvdXJjZVJlcXVlc3QoZmFsc2UpCisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9
CiAKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFVSTCYgdXJsKSAKICAgICAgICAgICAg
IDogUmVzb3VyY2VSZXF1ZXN0QmFzZSh1cmwsIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisjaWYg
UExBVEZPUk0oSU9TKQorICAgICAgICAgICAgLCBtX21haW5SZXNvdXJjZVJlcXVlc3QoZmFsc2Up
CisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBSZXNvdXJjZVJlcXVlc3RD
YWNoZVBvbGljeSBwb2xpY3kgPSBVc2VQcm90b2NvbENhY2hlUG9saWN5KSAKICAgICAgICAgICAg
IDogUmVzb3VyY2VSZXF1ZXN0QmFzZSh1cmwsIHBvbGljeSkKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgICAgICAgICAsIG1fbWFpblJlc291cmNlUmVxdWVzdChmYWxzZSkKKyNlbmRpZgogICAgICAg
ICB7CiAgICAgICAgICAgICBzZXRIVFRQUmVmZXJyZXIocmVmZXJyZXIpOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBSZXNvdXJjZVJlcXVlc3QoKQogICAgICAgICAgICAgOiBSZXNvdXJj
ZVJlcXVlc3RCYXNlKFVSTCgpLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorI2lmIFBMQVRGT1JN
KElPUykKKyAgICAgICAgICAgICwgbV9tYWluUmVzb3VyY2VSZXF1ZXN0KGZhbHNlKQorI2VuZGlm
CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKQEAgLTcwLDYgKzgyLDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIFJlc291cmNlUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYg
Y2ZSZXF1ZXN0KQogICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKCkKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgICAgICAgICAsIG1fbWFpblJlc291cmNlUmVxdWVzdChmYWxzZSkKKyNl
bmRpZgogICAgICAgICAgICAgLCBtX2NmUmVxdWVzdChjZlJlcXVlc3QpCiAgICAgICAgIHsKICNp
ZiBQTEFURk9STShNQUMpCkBAIC03OSw2ICs5NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNl
bHNlCiAgICAgICAgIFJlc291cmNlUmVxdWVzdChOU1VSTFJlcXVlc3QgKm5zUmVxdWVzdCkKICAg
ICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSgpCisjaWYgUExBVEZPUk0oSU9TKQorICAg
ICAgICAgICAgLCBtX21haW5SZXNvdXJjZVJlcXVlc3QoZmFsc2UpCisjZW5kaWYKICAgICAgICAg
ICAgICwgbV9uc1JlcXVlc3QobnNSZXF1ZXN0KQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTEw
OSw2ICsxMjcsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgYm9vbCB1
c2VRdWlja0xvb2tSZXNvdXJjZUNhY2hpbmdRdWlya3MoKTsKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgICAgICB2b2lkIHNldE1haW5SZXNvdXJjZVJlcXVlc3QoYm9vbCBpc01haW5S
ZXNvdXJjZVJlcXVlc3QpIGNvbnN0IHsgbV9tYWluUmVzb3VyY2VSZXF1ZXN0ID0gaXNNYWluUmVz
b3VyY2VSZXF1ZXN0OyB9CisgICAgICAgIGJvb2wgaXNNYWluUmVzb3VyY2VSZXF1ZXN0KCkgY29u
c3QgeyByZXR1cm4gbV9tYWluUmVzb3VyY2VSZXF1ZXN0OyB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBtdXRhYmxlIGJvb2wgbV9tYWluUmVzb3VyY2VSZXF1ZXN0OworI2VuZGlmCisKICAgICBw
cml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0QmFzZTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVl
c3RDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNl
UmVxdWVzdENGTmV0LmNwcAppbmRleCA2OGZiYmZhZjliMjQ3ZWI3MWM2M2FmY2Q2ZDA1ZGMwN2Zk
OTVlMzg1Li40YTI2MjNmYzY2NWM4ZTRiNTJjY2MxNDNiY2U2NTZhZDM5NjE4OGQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENG
TmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNl
UmVxdWVzdENGTmV0LmNwcApAQCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgIkZvcm1EYXRhU3Ry
ZWFtQ0ZOZXQuaCIKICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxSZXF1ZXN0UHJpdi5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8
Q0ZOZXR3b3JrL0NGTmV0d29ya0Nvbm5lY3Rpb25DYWNoZVByaXYuaD4KKyNlbmRpZgogI2VuZGlm
CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC01MCw3ICs1MywxMSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKKyNpZiBQTEFURk9STShJT1MpCitib29sIFJlc291cmNlUmVxdWVzdDo6c19odHRw
UGlwZWxpbmluZ0VuYWJsZWQgPSB0cnVlOworI2Vsc2UKIGJvb2wgUmVzb3VyY2VSZXF1ZXN0Ojpz
X2h0dHBQaXBlbGluaW5nRW5hYmxlZCA9IGZhbHNlOworI2VuZGlmCiAKICNpZiBVU0UoQ0ZORVRX
T1JLKQogCkBAIC0yMjIsMTAgKzIyOSwzMyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRh
dGVQbGF0Zm9ybUhUVFBCb2R5KCkKICNlbmRpZgogfQogCit2b2lkIFJlc291cmNlUmVxdWVzdDo6
dXBkYXRlRnJvbURlbGVnYXRlUHJlc2VydmluZ09sZEhUVFBCb2R5KGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgZGVsZWdhdGVQcm92aWRlZFJlcXVlc3QpCit7CisgICAgUmVmUHRyPEZvcm1EYXRhPiBv
bGRIVFRQQm9keSA9IGh0dHBCb2R5KCk7CisKKyAgICAqdGhpcyA9IGRlbGVnYXRlUHJvdmlkZWRS
ZXF1ZXN0OworICAgIHNldEhUVFBCb2R5KG9sZEhUVFBCb2R5LnJlbGVhc2UoKSk7Cit9CisKIHZv
aWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlUmVxdWVzdCgpCiB7CiAgICAgaWYg
KCFtX2NmUmVxdWVzdCkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgLy8gPHJkYXI6Ly9w
cm9ibGVtLzk5MTM1MjY+CisgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1pbWljIHRoZSBz
dWJ0bGUgYmVoYXZpb3VyIG9mIHRoZSBGb3VuZGF0aW9uIGJhc2VkIFJlc291cmNlUmVxdWVzdAor
ICAgICAgICAvLyBjb2RlLiBUaGF0IGNvZGUgZG9lcyBub3QgcmVzZXQgbV9odHRwTWV0aG9kIGlm
IHRoZSBOU1VSTFJlcXVlc3QgaXMgbmlsLiBJIGZpbGVkCisgICAgICAgIC8vIDxodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzMzY+IHRvIHRyYWNrIHRoYXQuCisgICAg
ICAgIC8vIEFub3RoZXIgcmVsYXRlZCBidWcgaXMgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NjM1MD4uIEZpeGluZyB0aGF0CisgICAgICAgIC8vIHdvdWxkLCBpZGVh
bGx5LCBhbGxvdyB1cyB0byBub3QgaGF2ZSB0aGlzIGhhY2suIEJ1dCB1bmZvcnR1bmF0ZWx5IHRo
YXQgY2F1c2VkIGxheW91dCB0ZXN0CisgICAgICAgIC8vIGZhaWx1cmVzLgorICAgICAgICAvLyBS
ZW1vdmFsIG9mIHRoaXMgaGFjayBpcyB0cmFja2VkIGJ5IDxyZGFyOi8vcHJvYmxlbS85OTcwNDk5
Pi4KKworICAgICAgICBTdHJpbmcgaHR0cE1ldGhvZCA9IG1faHR0cE1ldGhvZDsKICAgICAgICAg
KnRoaXMgPSBSZXNvdXJjZVJlcXVlc3QoKTsKKyAgICAgICAgbV9odHRwTWV0aG9kID0gaHR0cE1l
dGhvZDsKKyNlbHNlCisgICAgICAgICp0aGlzID0gUmVzb3VyY2VSZXF1ZXN0KCk7CisjZW5kaWYK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzA3LDggKzMzNywxMCBAQCB2b2lkIFJlc291
cmNlUmVxdWVzdDo6c2V0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9y
YWdlU2Vzc2lvbikKICNpZiBQTEFURk9STShNQUMpCiB2b2lkIFJlc291cmNlUmVxdWVzdDo6YXBw
bHlXZWJBcmNoaXZlSGFja0Zvck1haWwoKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8g
SGFjayBiZWNhdXNlIE1haWwgY2hlY2tzIGZvciB0aGlzIHByb3BlcnR5IHRvIGRldGVjdCBkYXRh
IC8gYXJjaGl2ZSBsb2FkcwogICAgIF9DRlVSTFJlcXVlc3RTZXRQcm90b2NvbFByb3BlcnR5KGNm
VVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSwgQ0ZTVFIoIldlYkRhdGFSZXF1ZXN0Iiks
IENGU1RSKCIiKSk7CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0zODMsNSArNDE1LDIxIEBAIHVu
c2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKQogCiAg
ICAgcmV0dXJuIG1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdDsKIH0KKyAgICAKKyNp
ZiBQTEFURk9STShJT1MpCit2b2lkIGluaXRpYWxpemVIVFRQQ29ubmVjdGlvblNldHRpbmdzT25T
dGFydHVwKCkKK3sKKyAgICAvLyBUaGlzIG5lZWQgdG8gYmUgY2FsbGVkIGZyb20gV2ViS2l0SW5p
dGlhbGl6ZSBzbyB0aGUgY2FsbHMgaGFwcGVuIGVhcmx5IGVub3VnaCwgYmVmb3JlIGFueSByZXF1
ZXN0cyBhcmUgbWFkZS4gPHJkYXI6Ly9wcm9ibGVtLzk2OTE4NzE+CisgICAgLy8gRGVza3RvcCBk
b2Vzbid0IGhhdmUgZWFybHkgaW5pdGlhbGl6YXRpb24gc28gaXQgaXMgbm90IGNsZWFyIGhvdyB0
aGlzIHNob3VsZCBiZSBkb25lIHRoZXJlLiBUaGUgQ0ZOZXR3b3JrIFNQSSBwcm9iYWJseQorICAg
IC8vIG5lZWRzIHRvIGJlY29tZSBtb3JlIGZvcmdpdmluZy4KKyAgICAvLyBXZSBjYW4ndCByZWFk
IHNldHRpbmdzIGhlcmUgYXMgdGhpcyBpcyBjYWxsZWQgdG9vIGVhcmx5IGZvciB0aGF0LiBBbGwg
dmFsdWVzIG5lZWQgdG8gYmUgY29uc3RhbnRzLgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBw
cmVmZXJyZWRDb25uZWN0aW9uQ291bnQgPSA2OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBm
YXN0TGFuZUNvbm5lY3Rpb25Db3VudCA9IDE7CisgICAgd2tJbml0aWFsaXplTWF4aW11bUhUVFBD
b25uZWN0aW9uQ291bnRQZXJIb3N0KHByZWZlcnJlZENvbm5lY3Rpb25Db3VudCk7CisgICAgd2tT
ZXRIVFRQUGlwZWxpbmluZ01heGltdW1Qcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2hl
c3QpOworICAgIHdrU2V0SFRUUFBpcGVsaW5pbmdNaW5pbXVtRmFzdExhbmVQcmlvcml0eShSZXNv
dXJjZUxvYWRQcmlvcml0eU1lZGl1bSk7CisgICAgX0NGTmV0d29ya0hUVFBDb25uZWN0aW9uQ2Fj
aGVTZXRMaW1pdChrSFRUUE51bUZhc3RMYW5lcywgZmFzdExhbmVDb25uZWN0aW9uQ291bnQpOwor
fQorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5l
dC5jcHAKaW5kZXggZmMyZDI4ZDcyNDE4M2Y1NTRhZWM3NzI3N2U0MWEzMjA1YTkwMjlmZi4uYjVl
YWM0NWE3YTZiYmRjODA4YTg4NDEwODAyMWYxNDNjN2Q3MWE1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5k
bGVDRk5ldC5jcHAKQEAgLTQxLDYgKzQxLDEwIEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElPUykK
KyNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZOZXR3b3JrLmg+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JN
KFdJTikKICNpbmNsdWRlICJMb2FkZXJSdW5Mb29wQ0YuaCIKICNpbmNsdWRlIDxDRk5ldHdvcmsv
Q0ZOZXR3b3JrLmg+CkBAIC01NzEsNyArNTc1LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6
OnJlcG9ydEVycm9yVG9DbGllbnQoQ0ZFcnJvclJlZiBlcnJvcikKICAgICBDRkluZGV4IGVycm9y
Q29kZSA9IENGRXJyb3JHZXRDb2RlKGVycm9yKTsKICAgICBTdHJpbmcgZGVzY3JpcHRpb247CiAK
LSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQog
CiAjaWYgQ09NUElMRVIoQ0xBTkcpCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvTmV0d29ya1N0YXRl
Tm90aWZpZXJJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvTmV0
d29ya1N0YXRlTm90aWZpZXJJT1MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllZDZhMDg3ODVjZWU4ZGRmNDcw
NzBkYmVmMjZhNjFjNDdiODJkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2lvcy9OZXR3b3JrU3RhdGVOb3RpZmllcklPUy5jcHAKQEAgLTAsMCAr
MSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0YXRlTm90aWZpZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitOZXR3b3JrU3RhdGVOb3RpZmllcjo6TmV0d29ya1N0YXRl
Tm90aWZpZXIoKQorICAgIDogbV9pc09uTGluZShmYWxzZSkKK3sKK30KKwordm9pZCBOZXR3b3Jr
U3RhdGVOb3RpZmllcjo6c2V0SXNPbkxpbmUoYm9vbCBpc09uTGluZSkKK3sKKyAgICBpZiAobV9p
c09uTGluZSA9PSBpc09uTGluZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faXNPbkxpbmUgPSBp
c09uTGluZTsKKyAgICBub3RpZnlOZXR3b3JrU3RhdGVDaGFuZ2UoKTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xvb2suaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iZTI3NTZkZjQ1MTgzYTA5NzE0ZjllOWRmOGViNmZlNGEyMjhiOTBmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLmgKQEAg
LTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFF1aWNrTG9va19oCisjZGVmaW5l
IFF1aWNrTG9va19oCisKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKworI2ltcG9ydCAiUmVzb3VyY2VS
ZXF1ZXN0LmgiCisjaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL1Bh
c3NPd25QdHIuaD4KKworI2lmZGVmIF9fT0JKQ19fCitAY2xhc3MgTlNEYXRhOworQGNsYXNzIE5T
RGljdGlvbmFyeTsKK0BjbGFzcyBOU0ZpbGVIYW5kbGU7CitAY2xhc3MgTlNTZXQ7CitAY2xhc3Mg
TlNTdHJpbmc7CitAY2xhc3MgTlNVUkw7CitAY2xhc3MgTlNVUkxDb25uZWN0aW9uOworQGNsYXNz
IE5TVVJMUmVzcG9uc2U7CisjZWxzZQorY2xhc3MgTlNEYXRhOworY2xhc3MgTlNEaWN0aW9uYXJ5
OworY2xhc3MgTlNGaWxlSGFuZGxlOworY2xhc3MgTlNTZXQ7CitjbGFzcyBOU1N0cmluZzsKK2Ns
YXNzIE5TVVJMOworY2xhc3MgTlNVUkxDb25uZWN0aW9uOworY2xhc3MgTlNVUkxSZXNwb25zZTsK
KyNlbmRpZgorCisjaWYgVVNFKENGTkVUV09SSykKK3R5cGVkZWYgc3RydWN0IF9DRlVSTFJlc3Bv
bnNlKiBDRlVSTFJlc3BvbnNlUmVmOwordHlwZWRlZiBzdHJ1Y3QgX0NGVVJMQ29ubmVjdGlvbiog
Q0ZVUkxDb25uZWN0aW9uUmVmOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgUmVzb3VyY2VIYW5kbGU7CitjbGFzcyBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGU7CisKK0NsYXNzIFFMUHJldmlld0NvbnZlcnRlckNsYXNzKCk7CitO
U1N0cmluZyAqUUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvckZpbGVOYW1lQW5kTWltZVR5cGUoTlNT
dHJpbmcgKmZpbGVOYW1lLCBOU1N0cmluZyAqbWltZVR5cGUpOworTlNTdHJpbmcgKlFMVHlwZUNv
cHlCZXN0TWltZVR5cGVGb3JVUkxBbmRNaW1lVHlwZShOU1VSTCAqLCBOU1N0cmluZyAqbWltZVR5
cGUpOworCitOU1NldCAqUUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzU2V0KCk7CisKKy8v
IFVzZWQgZm9yIHNldHRpbmcgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSBzYXZlZCBRTCBjb250ZW50
CitOU0RpY3Rpb25hcnkgKlFMRmlsZUF0dHJpYnV0ZXMoKTsKK05TRGljdGlvbmFyeSAqUUxEaXJl
Y3RvcnlBdHRyaWJ1dGVzKCk7CisKK3ZvaWQgYWRkUUxQcmV2aWV3Q29udmVydGVyV2l0aEZpbGVG
b3JVUkwoTlNVUkwgKiwgaWQgY29udmVydGVyLCBOU1N0cmluZyAqZmlsZU5hbWUpOworTlNTdHJp
bmcgKnFsUHJldmlld0NvbnZlcnRlckZpbGVOYW1lRm9yVVJMKE5TVVJMICopOworTlNTdHJpbmcg
KnFsUHJldmlld0NvbnZlcnRlclVUSUZvclVSTChOU1VSTCAqKTsKK3ZvaWQgcmVtb3ZlUUxQcmV2
aWV3Q29udmVydGVyRm9yVVJMKE5TVVJMICopOworCitQYXNzT3duUHRyPFJlc291cmNlUmVxdWVz
dD4gcmVnaXN0ZXJRTFByZXZpZXdDb252ZXJ0ZXJJZk5lZWRlZChOU1VSTCAqLCBOU1N0cmluZyAq
bWltZVR5cGUsIE5TRGF0YSAqKTsKKworY29uc3QgVVJMIHNhZmVRTFVSTEZvckRvY3VtZW50VVJM
QW5kUmVzb3VyY2VVUkwoY29uc3QgVVJMJiBkb2N1bWVudFVSTCwgY29uc3QgU3RyaW5nJiByZXNv
dXJjZVVSTCk7CisKK2NvbnN0IGNoYXIqIFFMUHJldmlld1Byb3RvY29sKCk7CisKKworY2xhc3Mg
UXVpY2tMb29rSGFuZGxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShRdWlja0xvb2tIYW5k
bGUpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFF1aWNrTG9va0hhbmRsZT4gY3Jl
YXRlKFJlc291cmNlSGFuZGxlKiwgTlNVUkxDb25uZWN0aW9uICosIE5TVVJMUmVzcG9uc2UgKiwg
aWQgZGVsZWdhdGUpOworI2lmIFVTRShDRk5FVFdPUkspCisgICAgc3RhdGljIFBhc3NPd25QdHI8
UXVpY2tMb29rSGFuZGxlPiBjcmVhdGUoUmVzb3VyY2VIYW5kbGUqLCBTeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUqLCBDRlVSTFJlc3BvbnNlUmVmKTsKKyNl
bmRpZgorICAgIH5RdWlja0xvb2tIYW5kbGUoKTsKKworICAgIGJvb2wgZGlkUmVjZWl2ZURhdGFB
cnJheShDRkFycmF5UmVmKTsKKyAgICBib29sIGRpZFJlY2VpdmVEYXRhKENGRGF0YVJlZik7Cisg
ICAgYm9vbCBkaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgdm9pZCBkaWRGYWlsKCk7CisKKyAgICBO
U1VSTFJlc3BvbnNlICpuc1Jlc3BvbnNlKCk7CisjaWYgVVNFKENGTkVUV09SSykKKyAgICBDRlVS
TFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UoKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFF1aWNr
TG9va0hhbmRsZShSZXNvdXJjZUhhbmRsZSosIE5TVVJMQ29ubmVjdGlvbiAqLCBOU1VSTFJlc3Bv
bnNlICosIGlkIGRlbGVnYXRlKTsKKyNpZiBVU0UoQ0ZORVRXT1JLKQorICAgIFF1aWNrTG9va0hh
bmRsZShSZXNvdXJjZUhhbmRsZSosIENGVVJMUmVzcG9uc2VSZWYpOworI2VuZGlmCisKKyAgICBS
ZXNvdXJjZUhhbmRsZSogbV9oYW5kbGU7CisgICAgUmV0YWluUHRyPGlkPiBtX2NvbnZlcnRlcjsK
KyAgICBSZXRhaW5QdHI8aWQ+IG1fZGVsZWdhdGU7CisgICAgYm9vbCBtX2ZpbmlzaGVkTG9hZGlu
Z0RhdGFJbnRvQ29udmVydGVyOworICAgIFJldGFpblB0cjxOU0ZpbGVIYW5kbGUgKj4gbV9xdWlj
a2xvb2tGaWxlSGFuZGxlOworICAgIE5TVVJMUmVzcG9uc2UgKm1fbnNSZXNwb25zZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShRVUlDS19MT09LKQorCisj
ZW5kaWYgLy8gUXVpY2tMb29rX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvaW9zL1F1aWNrTG9vay5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvaW9zL1F1aWNrTG9vay5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTc2OTA5MTFlMTdkMjAwMzFkODk3ZTE5
ZTY2YTRkNGFkNjVlZmRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9pb3MvUXVpY2tMb29rLm1tCkBAIC0wLDAgKzEsNDY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJRdWlja0xvb2suaCIKKworI2lmIFVTRShR
VUlDS19MT09LKQorCisjaW1wb3J0ICJGaWxlU3lzdGVtSU9TLmgiCisjaW1wb3J0ICJMb2dnaW5n
LmgiCisjaW1wb3J0ICJSZXNvdXJjZUhhbmRsZS5oIgorI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0
aW9uQ2hlY2tzSU9TLmgiCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCAiU3luY2hy
b25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgiCisjaW1wb3J0ICJX
ZWJDb3JlVVJMUmVzcG9uc2VJT1MuaCIKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0ZpbGVNYW5hZ2VyX05TVVJMRXh0cmFzLmg+CisjaW1w
b3J0IDxRdWlja0xvb2svUUxQcmV2aWV3Q29udmVydGVyLmg+CisjaW1wb3J0IDxRdWlja0xvb2sv
UXVpY2tMb29rUHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1w
b3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CisjaW1w
b3J0IDx3dGYvVmVjdG9yLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lm
IFVTRShDRk5FVFdPUkspCisjaW1wb3J0IDxDRk5ldHdvcmsvQ0ZVUkxDb25uZWN0aW9uLmg+CisK
K0BpbnRlcmZhY2UgTlNVUkxSZXNwb25zZSAoUXVpY2tMb29rRGV0YWlscykKKysoTlNVUkxSZXNw
b25zZSAqKV9yZXNwb25zZVdpdGhDRlVSTFJlc3BvbnNlOihDRlVSTFJlc3BvbnNlUmVmKXJlc3Bv
bnNlOworLShDRlVSTFJlc3BvbnNlUmVmKV9DRlVSTFJlc3BvbnNlOworQGVuZAorI2VuZGlmCisK
K1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoUXVpY2tMb29rKQorU09GVF9MSU5LX0NMQVNT
KFF1aWNrTG9vaywgUUxQcmV2aWV3Q29udmVydGVyKQorU09GVF9MSU5LX01BWV9GQUlMKFF1aWNr
TG9vaywgUUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzLCBOU1NldCAqLCAoKSwgKCkpCitT
T0ZUX0xJTktfTUFZX0ZBSUwoUXVpY2tMb29rLCBRTFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yRmls
ZU5hbWVBbmRNaW1lVHlwZSwgTlNTdHJpbmcgKiwgKE5TU3RyaW5nICpmaWxlTmFtZSwgTlNTdHJp
bmcgKm1pbWVUeXBlKSwgKGZpbGVOYW1lLCBtaW1lVHlwZSkpCitTT0ZUX0xJTktfTUFZX0ZBSUwo
UXVpY2tMb29rLCBRTFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yVVJMQW5kTWltZVR5cGUsIE5TU3Ry
aW5nICosIChOU1VSTCAqdXJsLCBOU1N0cmluZyAqbWltZVR5cGUpLCAodXJsLCBtaW1lVHlwZSkp
CitTT0ZUX0xJTktfTUFZX0ZBSUwoUXVpY2tMb29rLCBRTFR5cGVDb3B5VVRJRm9yVVJMQW5kTWlt
ZVR5cGUsIE5TU3RyaW5nICosIChOU1VSTCAqdXJsLCBOU1N0cmluZyAqbWltZVR5cGUpLCAodXJs
LCBtaW1lVHlwZSkpCitTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoUXVpY2tMb29rLCBRTFBy
ZXZpZXdTY2hlbWUsIE5TU3RyaW5nICopCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBOU1N0
cmluZyAqUUxUeXBlQ29weVVUSUZvclVSTEFuZE1pbWVUeXBlKE5TVVJMICp1cmwsIE5TU3RyaW5n
ICptaW1lVHlwZSk7Cit9CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitDbGFzcyBXZWJD
b3JlOjpRTFByZXZpZXdDb252ZXJ0ZXJDbGFzcygpCit7CisjZGVmaW5lIFFMUHJldmlld0NvbnZl
cnRlciBnZXRRTFByZXZpZXdDb252ZXJ0ZXJDbGFzcygpCisgICAgcmV0dXJuIFFMUHJldmlld0Nv
bnZlcnRlcjsKKyN1bmRlZiBRTFByZXZpZXdDb252ZXJ0ZXIKK30KKworTlNTdHJpbmcgKldlYkNv
cmU6OlFMVHlwZUNvcHlCZXN0TWltZVR5cGVGb3JGaWxlTmFtZUFuZE1pbWVUeXBlKE5TU3RyaW5n
ICpmaWxlTmFtZSwgTlNTdHJpbmcgKm1pbWVUeXBlKQoreworICAgIGlmICghY2FuTG9hZFFMVHlw
ZUNvcHlCZXN0TWltZVR5cGVGb3JGaWxlTmFtZUFuZE1pbWVUeXBlKCkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICByZXR1cm4gOjpRTFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yRmlsZU5hbWVB
bmRNaW1lVHlwZShmaWxlTmFtZSwgbWltZVR5cGUpOworfQorCitOU1N0cmluZyAqV2ViQ29yZTo6
UUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvclVSTEFuZE1pbWVUeXBlKE5TVVJMICp1cmwsIE5TU3Ry
aW5nICptaW1lVHlwZSkKK3sKKyAgICBpZiAoIWNhbkxvYWRRTFR5cGVDb3B5QmVzdE1pbWVUeXBl
Rm9yVVJMQW5kTWltZVR5cGUoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiA6
OlFMVHlwZUNvcHlCZXN0TWltZVR5cGVGb3JVUkxBbmRNaW1lVHlwZSh1cmwsIG1pbWVUeXBlKTsK
K30KKworTlNTZXQgKldlYkNvcmU6OlFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldCgp
Cit7CisgICAgaWYgKCFjYW5Mb2FkUUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzKCkpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzdGF0aWMgTlNTZXQgKnNldCA9IGFkb3B0TlMoOjpR
TFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXMoKSkubGVha1JlZigpOworICAgIHJldHVybiBz
ZXQ7Cit9CisKK05TU3RyaW5nICpXZWJDb3JlOjpRTFR5cGVDb3B5VVRJRm9yVVJMQW5kTWltZVR5
cGUoTlNVUkwgKnVybCwgTlNTdHJpbmcgKm1pbWVUeXBlKQoreworICAgIGlmICghY2FuTG9hZFFM
VHlwZUNvcHlVVElGb3JVUkxBbmRNaW1lVHlwZSgpKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgcmV0dXJuIDo6UUxUeXBlQ29weVVUSUZvclVSTEFuZE1pbWVUeXBlKHVybCwgbWltZVR5cGUp
OworfQorCitOU0RpY3Rpb25hcnkgKldlYkNvcmU6OlFMRmlsZUF0dHJpYnV0ZXMoKQoreworICAg
IC8vIFNldCBmaWxlIHBlcm1zIHRvIG93bmVyIHJlYWQvd3JpdGUgb25seQorICAgIE5TTnVtYmVy
ICpmaWxlUE9TSVhQZXJtaXNzaW9ucyA9IFtOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjooV0VC
X1VSRUFEIHwgV0VCX1VXUklURSldOworICAgIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmRpY3Rpb25h
cnkgPSBhZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNBbmRLZXlz
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVXNlck5hbWUoKSwg
TlNGaWxlT3duZXJBY2NvdW50TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaWxlUE9TSVhQZXJtaXNzaW9ucywgTlNGaWxlUG9zaXhQZXJtaXNzaW9ucywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyXSkubGVha1JlZigp
OworICAgIHJldHVybiBkaWN0aW9uYXJ5OworfQorCitOU0RpY3Rpb25hcnkgKldlYkNvcmU6OlFM
RGlyZWN0b3J5QXR0cmlidXRlcygpCit7CisgICAgLy8gU2V0IGZpbGUgcGVybXMgdG8gb3duZXIg
cmVhZC93cml0ZS9leGVjdXRlIG9ubHkKKyAgICBOU051bWJlciAqZGlyZWN0b3J5UE9TSVhQZXJt
aXNzaW9ucyA9IFtOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjooV0VCX1VSRUFEIHwgV0VCX1VX
UklURSB8IFdFQl9VRVhFQyldOworICAgIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkg
PSBhZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNVc2VyTmFt
ZSgpLCBOU0ZpbGVPd25lckFjY291bnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5UE9TSVhQZXJtaXNzaW9ucywgTlNGaWxlUG9z
aXhQZXJtaXNzaW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG51bGxwdHJdKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuIGRpY3Rpb25hcnk7Cit9CisK
K3N0YXRpYyBNdXRleCYgcWxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeU11dGV4KCkKK3sKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TXV0ZXg+IG11dGV4OworICAgIHJldHVybiBtdXRleDsK
K30KKworc3RhdGljIE5TTXV0YWJsZURpY3Rpb25hcnkgKlFMUHJldmlld0NvbnZlcnRlckRpY3Rp
b25hcnkoKQoreworICAgIHN0YXRpYyBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0g
YWRvcHROUyhbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XSkubGVha1JlZigpOworICAg
IHJldHVybiBkaWN0aW9uYXJ5OworfQorCitzdGF0aWMgTlNNdXRhYmxlRGljdGlvbmFyeSAqUUxD
b250ZW50RGljdGlvbmFyeSgpCit7CisgICAgc3RhdGljIE5TTXV0YWJsZURpY3Rpb25hcnkgKmNv
bnRlbnREaWN0aW9uYXJ5ID0gYWRvcHROUyhbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5
XSkubGVha1JlZigpOworICAgIHJldHVybiBjb250ZW50RGljdGlvbmFyeTsKK30KKwordm9pZCBX
ZWJDb3JlOjphZGRRTFByZXZpZXdDb252ZXJ0ZXJXaXRoRmlsZUZvclVSTChOU1VSTCAqdXJsLCBp
ZCBjb252ZXJ0ZXIsIE5TU3RyaW5nICpmaWxlTmFtZSkKK3sKKyAgICBBU1NFUlQodXJsKTsKKyAg
ICBBU1NFUlQoY29udmVydGVyKTsKKyAgICBNdXRleExvY2tlciBsb2NrKHFsUHJldmlld0NvbnZl
cnRlckRpY3Rpb25hcnlNdXRleCgpKTsKKyAgICBbUUxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFy
eSgpIHNldE9iamVjdDpjb252ZXJ0ZXIgZm9yS2V5OnVybF07CisgICAgW1FMQ29udGVudERpY3Rp
b25hcnkoKSBzZXRPYmplY3Q6KGZpbGVOYW1lID8gZmlsZU5hbWUgOiBAIiIpIGZvcktleTp1cmxd
OworfQorCitOU1N0cmluZyAqV2ViQ29yZTo6cWxQcmV2aWV3Q29udmVydGVyRmlsZU5hbWVGb3JV
UkwoTlNVUkwgKnVybCkKK3sKKyAgICByZXR1cm4gW1FMQ29udGVudERpY3Rpb25hcnkoKSBvYmpl
Y3RGb3JLZXk6dXJsXTsKK30KKworTlNTdHJpbmcgKldlYkNvcmU6OnFsUHJldmlld0NvbnZlcnRl
clVUSUZvclVSTChOU1VSTCAqdXJsKQoreworICAgIGlkIGNvbnZlcnRlciA9IG5pbDsKKyAgICB7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2socWxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeU11
dGV4KCkpOworICAgICAgICBjb252ZXJ0ZXIgPSBbUUxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFy
eSgpIG9iamVjdEZvcktleTp1cmxdOworICAgIH0KKyAgICBpZiAoIWNvbnZlcnRlcikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW2NvbnZlcnRlciBwcmV2aWV3VVRJXTsKK30KKwor
dm9pZCBXZWJDb3JlOjpyZW1vdmVRTFByZXZpZXdDb252ZXJ0ZXJGb3JVUkwoTlNVUkwgKnVybCkK
K3sKKyAgICBNdXRleExvY2tlciBsb2NrKHFsUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnlNdXRl
eCgpKTsKKyAgICBbUUxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeSgpIHJlbW92ZU9iamVjdEZv
cktleTp1cmxdOworCisgICAgLy8gRGVsZXRlIHRoZSBmaWxlIHdoZW4gd2UgcmVtb3ZlIHRoZSBw
cmV2aWV3IGNvbnZlcnRlcgorICAgIE5TU3RyaW5nICpmaWxlbmFtZSA9IHFsUHJldmlld0NvbnZl
cnRlckZpbGVOYW1lRm9yVVJMKHVybCk7CisgICAgaWYgKFtmaWxlbmFtZSBsZW5ndGhdKQorICAg
ICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIF93ZWJfcmVtb3ZlRmlsZU9ubHlB
dFBhdGg6ZmlsZW5hbWVdOworICAgIFtRTENvbnRlbnREaWN0aW9uYXJ5KCkgcmVtb3ZlT2JqZWN0
Rm9yS2V5OnVybF07Cit9CisKK1Bhc3NPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBXZWJDb3JlOjpy
ZWdpc3RlclFMUHJldmlld0NvbnZlcnRlcklmTmVlZGVkKE5TVVJMICp1cmwsIE5TU3RyaW5nICpt
aW1lVHlwZSwgTlNEYXRhICpkYXRhKQoreworICAgIFJldGFpblB0cjxOU1N0cmluZz4gdXBkYXRl
ZE1JTUVUeXBlID0gYWRvcHROUyhXZWJDb3JlOjpRTFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yVVJM
QW5kTWltZVR5cGUodXJsLCBtaW1lVHlwZSkpOworCisgICAgaWYgKFtXZWJDb3JlOjpRTFByZXZp
ZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWluc09iamVjdDp1cGRhdGVkTUlNRVR5
cGUuZ2V0KCldKSB7CisgICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gdXRpID0gYWRvcHROUyhX
ZWJDb3JlOjpRTFR5cGVDb3B5VVRJRm9yVVJMQW5kTWltZVR5cGUodXJsLCB1cGRhdGVkTUlNRVR5
cGUuZ2V0KCkpKTsKKworICAgICAgICBSZXRhaW5QdHI8aWQ+IGNvbnZlcnRlciA9IGFkb3B0TlMo
W1tRTFByZXZpZXdDb252ZXJ0ZXJDbGFzcygpIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YSBuYW1l
Om5pbCB1dGk6dXRpLmdldCgpIG9wdGlvbnM6bmlsXSk7CisgICAgICAgIE5TVVJMUmVxdWVzdCAq
cmVxdWVzdCA9IFtjb252ZXJ0ZXIuZ2V0KCkgcHJldmlld1JlcXVlc3RdOworCisgICAgICAgIC8v
IFdlIHVzZSBbcmVxdWVzdCBVUkxdIGhlcmUgaW5zdGVhZCBvZiB1cmwgc2luY2UgaXQgd2lsbCBi
ZQorICAgICAgICAvLyB0aGUgVVJMIHRoYXQgdGhlIFdlYkRhdGFTb3VyY2Ugd2lsbCBzZWUgZHVy
aW5nIC1kZWFsbG9jLgorICAgICAgICBhZGRRTFByZXZpZXdDb252ZXJ0ZXJXaXRoRmlsZUZvclVS
TChbcmVxdWVzdCBVUkxdLCBjb252ZXJ0ZXIuZ2V0KCksIG5pbCk7CisKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCkpOworICAgIH0KKworICAgIHJl
dHVybiBudWxscHRyOworfQorCitjb25zdCBVUkwgV2ViQ29yZTo6c2FmZVFMVVJMRm9yRG9jdW1l
bnRVUkxBbmRSZXNvdXJjZVVSTChjb25zdCBVUkwmIGRvY3VtZW50VVJMLCBjb25zdCBTdHJpbmcm
IHJlc291cmNlVVJMKQoreworICAgIGlkIGNvbnZlcnRlciA9IG5pbDsKKyAgICBOU1VSTCAqbnNE
b2N1bWVudFVSTCA9IGRvY3VtZW50VVJMOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
ayhxbFByZXZpZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5TXV0ZXgoKSk7CisgICAgICAgIGNvbnZlcnRl
ciA9IFtRTFByZXZpZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5KCkgb2JqZWN0Rm9yS2V5Om5zRG9jdW1l
bnRVUkxdOworICAgIH0KKworICAgIGlmICghY29udmVydGVyKQorICAgICAgICByZXR1cm4gVVJM
KFBhcnNlZFVSTFN0cmluZywgcmVzb3VyY2VVUkwpOworCisgICAgUmV0YWluUHRyPE5TVVJMUmVx
dWVzdD4gcmVxdWVzdCA9IGFkb3B0TlMoW1tOU1VSTFJlcXVlc3QgYWxsb2NdIGluaXRXaXRoVVJM
OltOU1VSTCBVUkxXaXRoU3RyaW5nOnJlc291cmNlVVJMXV0pOworICAgIE5TVVJMUmVxdWVzdCAq
c2FmZVJlcXVlc3QgPSBbY29udmVydGVyIHNhZmVSZXF1ZXN0Rm9yUmVxdWVzdDpyZXF1ZXN0Lmdl
dCgpXTsKKyAgICByZXR1cm4gW3NhZmVSZXF1ZXN0IFVSTF07Cit9CisKK3N0YXRpYyBWZWN0b3I8
Y2hhcj4gY3JlYXRlUUxQcmV2aWV3UHJvdG9jb2woKQoreworICAgIFZlY3RvcjxjaGFyPiBwcmV2
aWV3UHJvdG9jb2w7CisjZGVmaW5lIFFMUHJldmlld1NjaGVtZSBnZXRRTFByZXZpZXdTY2hlbWUo
KQorICAgIGNvbnN0IGNoYXIqIHFsUHJldmlld1NjaGVtZSA9IFtRTFByZXZpZXdTY2hlbWUgVVRG
OFN0cmluZ107CisjdW5kZWYgUUxQcmV2aWV3U2NoZW1lCisgICAgcHJldmlld1Byb3RvY29sLmFw
cGVuZChxbFByZXZpZXdTY2hlbWUsIHN0cmxlbihxbFByZXZpZXdTY2hlbWUpICsgMSk7CisgICAg
cmV0dXJuIHByZXZpZXdQcm90b2NvbDsKK30KKworY29uc3QgY2hhciogV2ViQ29yZTo6UUxQcmV2
aWV3UHJvdG9jb2woKQoreworICAgIGlmICghY2FuTG9hZFFMUHJldmlld1NjaGVtZSgpKQorICAg
ICAgICByZXR1cm4gIiI7CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPGNoYXI+
PiBwcmV2aWV3UHJvdG9jb2woY3JlYXRlUUxQcmV2aWV3UHJvdG9jb2woKSk7CisgICAgcmV0dXJu
IHByZXZpZXdQcm90b2NvbC5nZXQoKS5kYXRhKCk7Cit9CisKKyNpZiBVU0UoQ0ZORVRXT1JLKQor
Ly8gVGhlIHdheSBRdWlja0xvb2sgd29ya3MgaXMgd2UgcGFzcyBpdCBhbiBOU1VSTENvbm5lY3Rp
b25EZWxlZ2F0ZSBjYWxsYmFjayBvYmplY3QgYXQgY3JlYXRpb24KKy8vIHRpbWUuIFRoZW4gd2Ug
cGFzcyBpdCBhbGwgdGhlIGRhdGEgYXMgd2UgcmVjZWl2ZSBpdC4gT25jZSB3ZSd2ZSBkb3dubG9h
ZGVkIHRoZSBmdWxsIFVSTCwKKy8vIFF1aWNrTG9vayB0dXJucyBhcm91bmQgYW5kIHNlbmQgdXMs
IHRocm91Z2ggdGhpcyBkZWxlZ2F0ZSwgdGhlIEhUTUwgdmVyc2lvbiBvZiB0aGUgZmlsZSB3aGlj
aCB3ZQorLy8gcGFzcyBvbiB0byBXZWJDb3JlLiBUaGUgZmxhZyBtX2ZpbmlzaGVkTG9hZGluZ0Rh
dGFJbnRvQ29udmVydGVyIGluIFF1aWNrTG9va0hhbmRsZSBkZWNpZGVzCisvLyB3aGV0aGVyIHRv
IHBhc3MgdGhlIGRhdGEgdG8gUXVpY2tMb29rIG9yIFdlYkNvcmUuCisvLworLy8gVGhpcyB3b3Jr
cyBmaW5lIHdoZW4gdXNpbmcgTlMgQVBJcywgYnV0IHdoZW4gdXNpbmcgQ0ZOZXR3b3JrLCB3ZSBk
b24ndCBoYXZlIGEgTlNVUkxDb25uZWN0aW9uRGVsZWdhdGUuCisvLyBTbyB3ZSBjcmVhdGUgV2Vi
UXVpY2tMb29rSGFuZGxlQXNEZWxlZ2F0ZSBhcyBhbiBpbnRlcm1lZGlhdGUgZGVsZWdhdGUgb2Jq
ZWN0IGFuZCBwYXNzIGl0IHRvCisvLyBRTFByZXZpZXdDb252ZXJ0ZXIuIFRoZSBwcm94eSBkZWxl
Z2F0ZSB0aGVuIGZvcndhcmRzIHRoZSBtZXNzYWdlcyBvbiB0byB0aGUgQ0ZOZXR3b3JrIGNvZGUu
CitAaW50ZXJmYWNlIFdlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGUgOiBOU09iamVjdCA8TlNV
UkxDb25uZWN0aW9uRGVsZWdhdGU+IHsKKyAgICBSZWZQdHI8U3luY2hyb25vdXNSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlPiBtX2Nvbm5lY3Rpb25EZWxlZ2F0ZTsKK30KKwor
LSAoaWQpaW5pdFdpdGhDb25uZWN0aW9uRGVsZWdhdGU6KFN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSopY29ubmVjdGlvbkRlbGVnYXRlOworLSAodm9pZClj
bGVhckhhbmRsZTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlF1aWNrTG9va0hhbmRsZUFz
RGVsZWdhdGUKKy0gKGlkKWluaXRXaXRoQ29ubmVjdGlvbkRlbGVnYXRlOihTeW5jaHJvbm91c1Jl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUqKWNvbm5lY3Rpb25EZWxlZ2F0ZQor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlID0gY29ubmVjdGlvbkRlbGVnYXRlOwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlv
biAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZURhdGFBcnJheTooTlNBcnJheSAqKWRhdGFBcnJheQor
eworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbkRl
bGVnYXRlKQorICAgICAgICByZXR1cm47CisgICAgTE9HKE5ldHdvcmssICJXZWJRdWlja0xvb2tI
YW5kbGVBc0RlbGVnYXRlOjpkaWRSZWNlaXZlRGF0YUFycmF5KCkiKTsKKyAgICBtX2Nvbm5lY3Rp
b25EZWxlZ2F0ZS0+ZGlkUmVjZWl2ZURhdGFBcnJheShyZWludGVycHJldF9jYXN0PENGQXJyYXlS
ZWY+KGRhdGFBcnJheSkpOworfQorCistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlv
biAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZURhdGE6KE5TRGF0YSAqKWRhdGEgbGVuZ3RoUmVjZWl2
ZWQ6KGxvbmcgbG9uZylsZW5ndGhSZWNlaXZlZAoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0
aW9uKTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbkRlbGVnYXRlKQorICAgICAgICByZXR1cm47Cisg
ICAgTE9HKE5ldHdvcmssICJXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVnYXRlOjpkaWRSZWNlaXZl
RGF0YSgpIC0gZGF0YSBsZW5ndGggPSAlbGQiLCAobG9uZylbZGF0YSBsZW5ndGhdKTsKKworICAg
IC8vIFF1aWNrTG9vayBjb2RlIHNlbmRzIHVzIGEgbmlsIGRhdGEgYXQgdGltZXMuIFRoZSBjaGVj
ayBiZWxvdyBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIGluCisgICAgLy8gUmVzb3VyY2VIYW5kbGVN
YWMuY3BwIGFkZGVkIGZvciBhIGRpZmZlcmVudCBidWcuCisgICAgaWYgKCFbZGF0YSBsZW5ndGhd
KQorICAgICAgICByZXR1cm47CisgICAgbV9jb25uZWN0aW9uRGVsZWdhdGUtPmRpZFJlY2VpdmVE
YXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPihkYXRhKSwgc3RhdGljX2Nhc3Q8aW50Pihs
ZW5ndGhSZWNlaXZlZCkpOworfQorCistICh2b2lkKWNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5n
OihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbm5l
Y3Rpb24pOworICAgIGlmICghbV9jb25uZWN0aW9uRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsK
KyAgICBMT0coTmV0d29yaywgIldlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGU6OmRpZEZpbmlz
aExvYWRpbmcoKSIpOworICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlLT5kaWRGaW5pc2hMb2FkaW5n
KCk7Cit9CisKKy0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlv
biBkaWRGYWlsV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKK3sKKyAgICBVTlVTRURfUEFSQU0o
Y29ubmVjdGlvbik7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb25EZWxlZ2F0ZSkKKyAgICAgICAgcmV0
dXJuOworICAgIExPRyhOZXR3b3JrLCAiV2ViUXVpY2tMb29rSGFuZGxlQXNEZWxlZ2F0ZTo6ZGlk
RmFpbCgpIik7CisgICAgbV9jb25uZWN0aW9uRGVsZWdhdGUtPmRpZEZhaWwocmVpbnRlcnByZXRf
Y2FzdDxDRkVycm9yUmVmPihlcnJvcikpOworfQorCistICh2b2lkKWNsZWFySGFuZGxlCit7Cisg
ICAgbV9jb25uZWN0aW9uRGVsZWdhdGUgPSBudWxscHRyOworfQorQGVuZAorI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIE5TU3RyaW5nICpjcmVhdGVUZW1wb3JhcnlGaWxl
Rm9yUXVpY2tMb29rKE5TU3RyaW5nICpmaWxlTmFtZSkKK3sKKyAgICBOU1N0cmluZyAqZG93bmxv
YWREaXJlY3RvcnkgPSBjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoQCJRdWlja0xvb2tDb250ZW50
Iik7CisgICAgaWYgKCFkb3dubG9hZERpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIE5TU3RyaW5nICpjb250ZW50UGF0aCA9IFtkb3dubG9hZERpcmVjdG9yeSBzdHJpbmdCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6ZmlsZU5hbWVdOworICAgIE5TRmlsZU1hbmFnZXIgKmZpbGVN
YW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOworICAgIE5TU3RyaW5nICp1
bmlxdWVDb250ZW50UGF0aCA9IFtmaWxlTWFuYWdlciBfd2ViX3BhdGhXaXRoVW5pcXVlRmlsZW5h
bWVGb3JQYXRoOmNvbnRlbnRQYXRoXTsKKworICAgIEJPT0wgc3VjY2VzcyA9IFtmaWxlTWFuYWdl
ciBfd2ViX2NyZWF0ZUZpbGVBdFBhdGhXaXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6dW5pcXVl
Q29udGVudFBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOm5pbAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZXM6UUxGaWxlQXR0cmlidXRlcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5QXR0cmlidXRlczpRTERp
cmVjdG9yeUF0dHJpYnV0ZXMoKV07CisKKyAgICByZXR1cm4gc3VjY2VzcyA/IHVuaXF1ZUNvbnRl
bnRQYXRoIDogbmlsOworfQorCisKK1F1aWNrTG9va0hhbmRsZTo6UXVpY2tMb29rSGFuZGxlKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUsIE5TVVJMQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgTlNVUkxS
ZXNwb25zZSAqbnNSZXNwb25zZSwgaWQgZGVsZWdhdGUpCisgICAgOiBtX2hhbmRsZShoYW5kbGUp
CisgICAgLCBtX2NvbnZlcnRlcihhZG9wdE5TKFtbUUxQcmV2aWV3Q29udmVydGVyQ2xhc3MoKSBh
bGxvY10gaW5pdFdpdGhDb25uZWN0aW9uOmNvbm5lY3Rpb24gZGVsZWdhdGU6ZGVsZWdhdGUgcmVz
cG9uc2U6bnNSZXNwb25zZSBvcHRpb25zOm5pbF0pKQorICAgICwgbV9kZWxlZ2F0ZShhZG9wdE5T
KFtkZWxlZ2F0ZSByZXRhaW5dKSkKKyAgICAsIG1fZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252
ZXJ0ZXIoZmFsc2UpCisgICAgLCBtX25zUmVzcG9uc2UoW21fY29udmVydGVyLmdldCgpIHByZXZp
ZXdSZXNwb25zZV0pCit7CisgICAgTlNVUkwgKnByZXZpZXdSZXF1ZXN0VVJMID0gW1ttX2NvbnZl
cnRlci5nZXQoKSBwcmV2aWV3UmVxdWVzdF0gVVJMXTsKKyAgICBpZiAoIWFwcGxpY2F0aW9uSXNN
b2JpbGVTYWZhcmkoKSkgeworICAgICAgICAvLyBUaGlzIGtlZXBzIHRoZSBRTFByZXZpZXdDb252
ZXJ0ZXIgYWxpdmUgdG8gc2VydmUgYW55IHN1YnJlc291cmNlIHJlcXVlc3RzLgorICAgICAgICAv
LyBJdCBpcyByZW1vdmVkIGJ5IC1bV2ViRGF0YVNvdXJjZSBkZWFsbG9jXS4KKyAgICAgICAgYWRk
UUxQcmV2aWV3Q29udmVydGVyV2l0aEZpbGVGb3JVUkwocHJldmlld1JlcXVlc3RVUkwsIG1fY29u
dmVydGVyLmdldCgpLCBuaWwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUXVp
Y2tMb29rIGNvbnN1bWVzIHRoZSBpbmNvbWluZyBkYXRhLCB3ZSBuZWVkIHRvIHN0b3JlIGl0IHNv
IHRoYXQgaXQgY2FuIGJlIG9wZW5lZCBpbiB0aGUgaGFuZGxpbmcgYXBwbGljYXRpb24uCisgICAg
TlNTdHJpbmcgKnF1aWNrbG9va0NvbnRlbnRQYXRoID0gY3JlYXRlVGVtcG9yYXJ5RmlsZUZvclF1
aWNrTG9vayhbbV9jb252ZXJ0ZXIuZ2V0KCkgcHJldmlld0ZpbGVOYW1lXSk7CisgICAgTE9HKE5l
dHdvcmssICJRdWlja0xvb2tIYW5kbGU6OlF1aWNrTG9va0hhbmRsZSgpIC0gcXVpY2tsb29rQ29u
dGVudFBhdGg6ICVzIiwgW3F1aWNrbG9va0NvbnRlbnRQYXRoIFVURjhTdHJpbmddKTsKKworICAg
IGlmIChxdWlja2xvb2tDb250ZW50UGF0aCkgeworICAgICAgICBtX3F1aWNrbG9va0ZpbGVIYW5k
bGUgPSBhZG9wdE5TKFtbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVGb3JXcml0aW5nQXRQYXRoOnF1
aWNrbG9va0NvbnRlbnRQYXRoXSByZXRhaW5dKTsKKyAgICAgICAgLy8gV2UgbXVzdCB1c2UgdGhl
IGdlbmVyYXRlZCBVUkwgZnJvbSBtX2NvbnZlcnRlcidzIE5TVVJMUmVxdWVzdCBvYmplY3QKKyAg
ICAgICAgLy8gc28gdGhhdCBpdCBtYXRjaGVzIHRoZSBVUkwgcmVtb3ZlZCBmcm9tIC1bV2ViRGF0
YVNvdXJjZSBkZWFsbG9jXS4KKyAgICAgICAgYWRkUUxQcmV2aWV3Q29udmVydGVyV2l0aEZpbGVG
b3JVUkwocHJldmlld1JlcXVlc3RVUkwsIG1fY29udmVydGVyLmdldCgpLCBxdWlja2xvb2tDb250
ZW50UGF0aCk7CisgICAgfQorfQorCitQYXNzT3duUHRyPFF1aWNrTG9va0hhbmRsZT4gUXVpY2tM
b29rSGFuZGxlOjpjcmVhdGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgTlNVUkxDb25uZWN0aW9u
ICpjb25uZWN0aW9uLCBOU1VSTFJlc3BvbnNlICpuc1Jlc3BvbnNlLCBpZCBkZWxlZ2F0ZSkKK3sK
KyAgICBpZiAoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5pc01haW5SZXNvdXJjZVJlcXVlc3QoKSAm
JiBbV2ViQ29yZTo6UUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzU2V0KCkgY29udGFpbnNP
YmplY3Q6W25zUmVzcG9uc2UgTUlNRVR5cGVdXSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBRdWlja0xvb2tIYW5kbGUoaGFuZGxlLCBjb25uZWN0aW9uLCBuc1Jlc3BvbnNlLCBkZWxlZ2F0
ZSkpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorUGFz
c093blB0cjxRdWlja0xvb2tIYW5kbGU+IFF1aWNrTG9va0hhbmRsZTo6Y3JlYXRlKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZSogY29ubmVjdGlvbkRlbGVnYXRlLCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2Up
Cit7CisgICAgaWYgKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaXNNYWluUmVzb3VyY2VSZXF1ZXN0
KCkgJiYgW1dlYkNvcmU6OlFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpIGNvbnRh
aW5zT2JqZWN0OihOU1N0cmluZyAqKUNGVVJMUmVzcG9uc2VHZXRNSU1FVHlwZShjZlJlc3BvbnNl
KV0pIHsKKyAgICAgICAgTlNVUkxSZXNwb25zZSAqbnNSZXNwb25zZSA9IFtOU1VSTFJlc3BvbnNl
IF9yZXNwb25zZVdpdGhDRlVSTFJlc3BvbnNlOmNmUmVzcG9uc2VdOworICAgICAgICBXZWJRdWlj
a0xvb2tIYW5kbGVBc0RlbGVnYXRlICpkZWxlZ2F0ZSA9IFtbW1dlYlF1aWNrTG9va0hhbmRsZUFz
RGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoQ29ubmVjdGlvbkRlbGVnYXRlOmNvbm5lY3Rpb25EZWxl
Z2F0ZV0gYXV0b3JlbGVhc2VdOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFF1aWNrTG9v
a0hhbmRsZShoYW5kbGUsIG5pbCwgbnNSZXNwb25zZSwgZGVsZWdhdGUpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworQ0ZVUkxSZXNwb25zZVJlZiBRdWlja0xvb2tIYW5kbGU6
OmNmUmVzcG9uc2UoKQoreworICAgIHJldHVybiBbbV9uc1Jlc3BvbnNlIF9DRlVSTFJlc3BvbnNl
XTsKK30KKyNlbmRpZgorCitOU1VSTFJlc3BvbnNlICpRdWlja0xvb2tIYW5kbGU6Om5zUmVzcG9u
c2UoKQoreworICAgIHJldHVybiBtX25zUmVzcG9uc2U7Cit9CisKK2Jvb2wgUXVpY2tMb29rSGFu
ZGxlOjpkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJyYXlSZWYgY2ZEYXRhQXJyYXkpCit7CisgICAg
TlNBcnJheSAqIGNvbnN0IGRhdGFBcnJheSA9IChOU0FycmF5ICopY2ZEYXRhQXJyYXk7CisKKyAg
ICBpZiAobV9maW5pc2hlZExvYWRpbmdEYXRhSW50b0NvbnZlcnRlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgTE9HKE5ldHdvcmssICJRdWlja0xvb2tIYW5kbGU6OmRpZFJlY2VpdmVE
YXRhQXJyYXkoKSIpOworICAgIFttX2NvbnZlcnRlci5nZXQoKSBhcHBlbmREYXRhQXJyYXk6ZGF0
YUFycmF5XTsKKyAgICBpZiAobV9xdWlja2xvb2tGaWxlSGFuZGxlKSB7CisgICAgICAgIGZvciAo
TlNEYXRhICpkYXRhIGluIGRhdGFBcnJheSkKKyAgICAgICAgICAgIFttX3F1aWNrbG9va0ZpbGVI
YW5kbGUuZ2V0KCkgd3JpdGVEYXRhOmRhdGFdOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBRdWlja0xvb2tIYW5kbGU6OmRpZFJlY2VpdmVEYXRhKENGRGF0YVJlZiBjZkRhdGEp
Cit7CisgICAgTlNEYXRhICogY29uc3QgZGF0YSA9IChOU0RhdGEgKiljZkRhdGE7CisKKyAgICBp
ZiAobV9maW5pc2hlZExvYWRpbmdEYXRhSW50b0NvbnZlcnRlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgTE9HKE5ldHdvcmssICJRdWlja0xvb2tIYW5kbGU6OmRpZFJlY2VpdmVEYXRh
KCkiKTsKKyAgICBbbV9jb252ZXJ0ZXIuZ2V0KCkgYXBwZW5kRGF0YTpkYXRhXTsKKyAgICBpZiAo
bV9xdWlja2xvb2tGaWxlSGFuZGxlKQorICAgICAgICBbbV9xdWlja2xvb2tGaWxlSGFuZGxlLmdl
dCgpIHdyaXRlRGF0YTpkYXRhXTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBRdWlja0xv
b2tIYW5kbGU6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIGlmIChtX2ZpbmlzaGVkTG9hZGlu
Z0RhdGFJbnRvQ29udmVydGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMT0coTmV0
d29yaywgIlF1aWNrTG9va0hhbmRsZTo6ZGlkRmluaXNoTG9hZGluZygpIik7CisgICAgbV9maW5p
c2hlZExvYWRpbmdEYXRhSW50b0NvbnZlcnRlciA9IFlFUzsKKyAgICBbbV9jb252ZXJ0ZXIuZ2V0
KCkgZmluaXNoZWRBcHBlbmRpbmdEYXRhXTsKKyAgICBpZiAobV9xdWlja2xvb2tGaWxlSGFuZGxl
KQorICAgICAgICBbbV9xdWlja2xvb2tGaWxlSGFuZGxlLmdldCgpIGNsb3NlRmlsZV07CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUXVpY2tMb29rSGFuZGxlOjpkaWRGYWlsKCkKK3sKKyAg
ICBMT0coTmV0d29yaywgIlF1aWNrTG9va0hhbmRsZTo6ZGlkRmFpbCgpIik7CisgICAgbV9xdWlj
a2xvb2tGaWxlSGFuZGxlID0gbnVsbHB0cjsKKyAgICAvLyByZW1vdmVRTFByZXZpZXdDb252ZXJ0
ZXJGb3JVUkwgZGVsZXRlcyB0aGUgdGVtcG9yYXJ5IGZpbGUgY3JlYXRlZC4KKyAgICByZW1vdmVR
TFByZXZpZXdDb252ZXJ0ZXJGb3JVUkwoW21faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5uc1VSTFJl
cXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9keSkgVVJMXSk7CisgICAgW21fY29udmVydGVyLmdldCgp
IGZpbmlzaENvbnZlcnRpbmddOworICAgIG1fY29udmVydGVyID0gbnVsbHB0cjsKK30KKworUXVp
Y2tMb29rSGFuZGxlOjp+UXVpY2tMb29rSGFuZGxlKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlF1
aWNrTG9va0hhbmRsZTo6flF1aWNrTG9va0hhbmRsZSgpIik7CisgICAgaWYgKG1fcXVpY2tsb29r
RmlsZUhhbmRsZSkgeworICAgICAgICBtX3F1aWNrbG9va0ZpbGVIYW5kbGUgPSBudWxscHRyOwor
ICAgICAgICByZW1vdmVRTFByZXZpZXdDb252ZXJ0ZXJGb3JVUkwoW21faGFuZGxlLT5maXJzdFJl
cXVlc3QoKS5uc1VSTFJlcXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9keSkgVVJMXSk7CisgICAgfQor
ICAgIG1fY29udmVydGVyID0gbnVsbHB0cjsKKworICAgIFttX2RlbGVnYXRlLmdldCgpIGNsZWFy
SGFuZGxlXTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKFFVSUNLX0xPT0spCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9SZXNvdXJjZUhhbmRsZUlPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1Jlc291cmNlSGFuZGxlSU9T
Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjY2N2I5YjE4NjY3NDQwZGViZmVmZGExODA1Yjg0Y2I1NDc4NGM1NzkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9S
ZXNvdXJjZUhhbmRsZUlPUy5tbQpAQCAtMCwwICsxLDM5IEBACisvLworLy8gIFJlc291cmNlSGFu
ZGxlSVBob25lLm1tCisvLyAgV2ViQ29yZQorLy8KKy8vICBDb3B5cmlnaHQgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKworI2lmIFVTRShDRk5FVFdPUkspCisKKyNp
bXBvcnQgPENGTmV0d29yay9DRlNvY2tldFN0cmVhbVByaXYuaD4KKyNpbXBvcnQgPEZvdW5kYXRp
b24vTlNVUkxSZXF1ZXN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitDRk11dGFibGVEaWN0aW9uYXJ5UmVmIFJlc291cmNlSGFu
ZGxlOjpjcmVhdGVTU0xQcm9wZXJ0aWVzRnJvbU5TVVJMUmVxdWVzdChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCit7CisgICAgTlNTdHJpbmcgKmhvc3QgPSByZXF1ZXN0LnVybCgpLmhv
c3QoKTsKKyAgICBOU0FycmF5ICpjZXJ0QXJyYXkgPSBbTlNVUkxSZXF1ZXN0IGFsbG93c1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3Q6aG9zdF07CisgICAgQk9PTCBhbGxvd3NBbnlDZXJ0
aWZpY2F0ZSA9IFtOU1VSTFJlcXVlc3QgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3Q6
aG9zdF07CisgICAgaWYgKCFjZXJ0QXJyYXkgJiYgIWFsbG93c0FueUNlcnRpZmljYXRlKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgc3NsUHJvcHMgPSBD
RkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBl
RGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3Mp
OworICAgIGlmIChjZXJ0QXJyYXkpCisgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHNzbFBy
b3BzLCBfa0NGU3RyZWFtU1NMVHJ1c3RlZExlYWZDZXJ0aWZpY2F0ZXMsIChDRlR5cGVSZWYpIGNl
cnRBcnJheSk7CisKKyAgICBpZiAoYWxsb3dzQW55Q2VydGlmaWNhdGUpCisgICAgICAgIENGRGlj
dGlvbmFyeVNldFZhbHVlKHNzbFByb3BzLCBrQ0ZTdHJlYW1TU0xWYWxpZGF0ZXNDZXJ0aWZpY2F0
ZUNoYWluLCBrQ0ZCb29sZWFuRmFsc2UpOworICAgIHJldHVybiBzc2xQcm9wczsKK30KKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9z
L1dlYkNvcmVVUkxSZXNwb25zZUlPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9pb3MvV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTAwZGQ5MGI2MDJhMTZi
YzJkYWM4NGU2MGExZmFkNzBiMmU1OTQ0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1dlYkNvcmVVUkxSZXNwb25zZUlPUy5oCkBAIC0wLDAg
KzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29yZVVSTFJlc3BvbnNlSU9TX2gKKyNkZWZpbmUgV2Vi
Q29yZVVSTFJlc3BvbnNlSU9TX2gKKworI2lmZGVmIF9fT0JKQ19fCisjaW5jbHVkZSAiV2ViQ29y
ZVVSTFJlc3BvbnNlLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisjaWYgVVNFKFFVSUNLX0xPT0spCisgICAgCitpbmxpbmUgYm9vbCBzaG91bGRVc2VRdWlja0xv
b2tGb3JNSU1FVHlwZShjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKCgh
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKG1pbWVUeXBlKSAg
ICAgICAvLyBpZ25vcmUgc3VwcG9ydGVkIG5vbi1pbWFnZSBNSU1FIHR5cGVzCisgICAgICAgICAm
JiAhTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKG1pbWVUeXBlKSAg
ICAgICAvLyBpZ25vcmUgc3VwcG9ydGVkIGltYWdlIE1JTUUgdHlwZXMKKyAgICAgICAgICYmIG1p
bWVUeXBlICE9ICJ0ZXh0L2NzcyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGlnbm9yZSBjc3MKKyAgICAgICAgICYmIG1pbWVUeXBlICE9ICJhcHBsaWNhdGlvbi9wZGYi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBwZGYKKyAgICAgICAgICkK
KyAgICAgICAgfHwgbWltZVR5cGUgPT0gInRleHQvcGxhaW4iICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGJ1dCBrZWVwIHRleHQvcGxhaW4gd2hpY2ggaXMgdG9vIGdlbmVy
aWMgYW5kIGNhbiBoaWRlIHNvbWV0aGluZworICAgICAgICB8fCAobWltZVR5cGUgPT0gInRleHQv
eG1sIiB8fCBtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veG1sIikpICAgLy8gYW5kIGtlZXAgWE1M
IHR5cGVzIGZvciAubW9iaWxlY29uZmlnIGZpbGVzCisgICAgeworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNlbmRpZiAvLyBVU0UoUVVJQ0tf
TE9PSykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViQ29yZVVSTFJl
c3BvbnNlSU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
aW9zL1dlYkNvcmVVUkxSZXNwb25zZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvaW9zL1dlYkNvcmVVUkxSZXNwb25zZUlPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTdjYmRmMjU2
NDM0NDVhMmVkMGMxYTVhZjQ0OGFhNmYyOTU2NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvV2ViQ29yZVVSTFJlc3BvbnNlSU9TLm1tCkBA
IC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViQ29yZVVS
TFJlc3BvbnNlSU9TLmgiCisjaW1wb3J0ICJVVElVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIldlYkNv
cmVTeXN0ZW1JbnRlcmZhY2UuaCIKKworI2ltcG9ydCAiUXVpY2tMb29rLmgiCisjaW1wb3J0ICJT
b2Z0TGlua2luZy5oIgorI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2
aWNlcy5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKE1vYmlsZUNvcmVTZXJ2aWNlcykKKworU09G
VF9MSU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywgVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmll
ckZvclRhZywgQ0ZTdHJpbmdSZWYsIChDRlN0cmluZ1JlZiBpblRhZ0NsYXNzLCBDRlN0cmluZ1Jl
ZiBpblRhZywgQ0ZTdHJpbmdSZWYgaW5Db25mb3JtaW5nVG9VVEkpLCAoaW5UYWdDbGFzcywgaW5U
YWcsIGluQ29uZm9ybWluZ1RvVVRJKSkKKworU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVT
ZXJ2aWNlcywga1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwgQ0ZTdHJpbmdSZWYpCisKKyNk
ZWZpbmUga1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiBnZXRrVVRUYWdDbGFzc0ZpbGVuYW1l
RXh0ZW5zaW9uKCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIGFkanVzdE1JTUVUeXBl
SWZOZWNlc3NhcnkoQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlKQoreworICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gbWltZVR5cGUgPSB3a0dldENGVVJMUmVzcG9uc2VNSU1FVHlwZShjZlJl
c3BvbnNlKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVwZGF0ZWRNSU1FVHlwZSA9IG1p
bWVUeXBlOworICAgIGlmICghdXBkYXRlZE1JTUVUeXBlKQorICAgICAgICB1cGRhdGVkTUlNRVR5
cGUgPSBkZWZhdWx0TUlNRVR5cGUoKS5jcmVhdGVDRlN0cmluZygpOworCisjaWYgVVNFKFFVSUNL
X0xPT0spCisgICAgLy8gV2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgTUlNRSB0eXBlIGlzIGNvcnJl
Y3QsIHNvIHRoYXQgUXVpY2tMb29rJ3Mgd2ViIHBsdWdpbiBpcyBjYWxsZWQgd2hlbiBuZWVkZWQu
CisgICAgLy8gV2UgZmlsdGVyIHRoZSBiYXNpYyBNSU1FIHR5cGVzIHNvIHRoYXQgd2UgZG9uJ3Qg
ZG8gdW5uZWNlc3Nhcnkgd29yayBpbiBzdGFuZGFyZCBicm93c2luZyBzaXR1YXRpb25zLgorICAg
IGlmIChzaG91bGRVc2VRdWlja0xvb2tGb3JNSU1FVHlwZSgoTlNTdHJpbmcgKil1cGRhdGVkTUlN
RVR5cGUuZ2V0KCkpKSB7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3VnZ2VzdGVk
RmlsZW5hbWUgPSBhZG9wdENGKHdrQ29weUNGVVJMUmVzcG9uc2VTdWdnZXN0ZWRGaWxlbmFtZShj
ZlJlc3BvbnNlKSk7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcXVpY2tMb29rTUlN
RVR5cGUgPSBhZG9wdENGKChDRlN0cmluZ1JlZilRTFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yRmls
ZU5hbWVBbmRNaW1lVHlwZSgoTlNTdHJpbmcgKilzdWdnZXN0ZWRGaWxlbmFtZS5nZXQoKSwgKE5T
U3RyaW5nICopbWltZVR5cGUuZ2V0KCkpKTsKKyAgICAgICAgaWYgKCFxdWlja0xvb2tNSU1FVHlw
ZSkgeworICAgICAgICAgICAgQ0ZVUkxSZWYgdXJsID0gd2tHZXRDRlVSTFJlc3BvbnNlVVJMKGNm
UmVzcG9uc2UpOworICAgICAgICAgICAgTlNVUkwgKm5zVVJMID0gKE5TVVJMICopdXJsOworICAg
ICAgICAgICAgaWYgKFtuc1VSTCBpc0ZpbGVVUkxdKSB7CisgICAgICAgICAgICAgICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBleHRlbnNpb24gPSBhZG9wdENGKENGVVJMQ29weVBhdGhFeHRlbnNp
b24odXJsKSk7CisgICAgICAgICAgICAgICAgaWYgKGV4dGVuc2lvbikgeworICAgICAgICAgICAg
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aSA9IGFkb3B0Q0YoVVRUeXBlQ3JlYXRl
UHJlZmVycmVkSWRlbnRpZmllckZvclRhZyhrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9uLCBl
eHRlbnNpb24uZ2V0KCksIG51bGxwdHIpKTsKKyAgICAgICAgICAgICAgICAgICAgcXVpY2tMb29r
TUlNRVR5cGUgPSBtaW1lVHlwZUZyb21VVElUcmVlKHV0aS5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHF1aWNrTG9va01J
TUVUeXBlKQorICAgICAgICAgICAgdXBkYXRlZE1JTUVUeXBlID0gcXVpY2tMb29rTUlNRVR5cGU7
CisgICAgfQorI2VuZGlmIC8vIFVTRShRVUlDS19MT09LKQorICAgIGlmICghbWltZVR5cGUgfHwg
Q0ZTdHJpbmdDb21wYXJlKG1pbWVUeXBlLmdldCgpLCB1cGRhdGVkTUlNRVR5cGUuZ2V0KCksIGtD
RkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpICE9IGtDRkNvbXBhcmVFcXVhbFRvKQorICAgICAgICB3
a1NldENGVVJMUmVzcG9uc2VNSU1FVHlwZShjZlJlc3BvbnNlLCB1cGRhdGVkTUlNRVR5cGUuZ2V0
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1tCmluZGV4IDFl
Yzc3NzdkMDA4MGYyMjQzZTdmNzAyNDQ3MGZiZTM4YTYxZTMwMDcuLmM5YzMwZjdiNjYwY2Y0MWMz
MTIxMDcxZGQ0ZWM1NWFmOTEyM2U3YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1tCkBAIC00Myw3ICs0Mywx
MSBAQAogQGVuZAogCiBAaW50ZXJmYWNlIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKERl
dGFpbHMpCisjaWYgUExBVEZPUk0oSU9TKQorKyhOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
ICopX2NyZWF0ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRm9yQ0ZBdXRoQ2hhbGxlbmdlOihDRlVS
TEF1dGhDaGFsbGVuZ2VSZWYpY2ZDaGFsbGVuZ2Ugc2VuZGVyOihpZCA8TlNVUkxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVNlbmRlcj4pc2VuZGVyOworI2Vsc2UKICsoTlNVUkxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSAqKV9hdXRoZW50aWNhdGlvbkNoYWxsZW5nZUZvckNGQXV0aENoYWxsZW5nZToo
Q0ZVUkxBdXRoQ2hhbGxlbmdlUmVmKWNmQ2hhbGxlbmdlIHNlbmRlcjooaWQgPE5TVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VTZW5kZXI+KXNlbmRlcjsKKyNlbmRpZgogQGVuZAogCiBAaW50ZXJm
YWNlIE5TVVJMQ3JlZGVudGlhbCAoRGV0YWlscykKQEAgLTE1NCw3ICsxNTgsMTEgQEAgTlNVUkxB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqbWFjKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiBjb3JlQ2hhbGxlbmdlKQogICAgIGlmICghYXV0aENoYWxsZW5nZSkKICAgICAgICAgYXV0aENo
YWxsZW5nZSA9IGFkb3B0Q0YoY3JlYXRlQ0YoY29yZUNoYWxsZW5nZSkpOwogICAgIFtjaGFsbGVu
Z2VTZW5kZXIuZ2V0KCkgc2V0Q0ZDaGFsbGVuZ2U6YXV0aENoYWxsZW5nZS5nZXQoKV07CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIHJldHVybiBbW05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2Ug
X2NyZWF0ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRm9yQ0ZBdXRoQ2hhbGxlbmdlOmF1dGhDaGFs
bGVuZ2UuZ2V0KCkgc2VuZGVyOmNoYWxsZW5nZVNlbmRlci5nZXQoKV0gYXV0b3JlbGVhc2VdOwor
I2Vsc2UKICAgICByZXR1cm4gW1tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIF9hdXRoZW50
aWNhdGlvbkNoYWxsZW5nZUZvckNGQXV0aENoYWxsZW5nZTphdXRoQ2hhbGxlbmdlLmdldCgpIHNl
bmRlcjpjaGFsbGVuZ2VTZW5kZXIuZ2V0KCldIGF1dG9yZWxlYXNlXTsKKyNlbmRpZgogfQogCiBO
U1VSTENyZWRlbnRpYWwgKm1hYyhjb25zdCBDcmVkZW50aWFsJiBjb3JlQ3JlZGVudGlhbCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0NyZWRlbnRpYWxT
dG9yYWdlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ3JlZGVu
dGlhbFN0b3JhZ2VNYWMubW0KaW5kZXggYWE1ZTdhZmYyOTQ1MzM4NWJjODMxYTFjYjdkNGU3Yzhj
OGJjODczZi4uMDExMzE1YjI4YjQ0NWI5YmQ3MjI1ZGY2ZDU5NjRmMDE4Yjc5ZDc3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ3JlZGVudGlhbFN0b3Jh
Z2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ3JlZGVu
dGlhbFN0b3JhZ2VNYWMubW0KQEAgLTM5LDYgKzM5LDE3IEBAIENyZWRlbnRpYWwgQ3JlZGVudGlh
bFN0b3JhZ2U6OmdldEZyb21QZXJzaXN0ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3BhY2Um
IHByCiAgICAgcmV0dXJuIGNyZWRlbnRpYWwgPyBjb3JlKGNyZWRlbnRpYWwpIDogQ3JlZGVudGlh
bCgpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBDcmVkZW50aWFsU3RvcmFnZTo6c2F2
ZVRvUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3Bh
Y2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCit7CisgICAgaWYgKGNyZWRlbnRpYWwu
cGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSB7CisgICAgICAgIENy
ZWRlbnRpYWwgc2Vzc2lvbkNyZWRlbnRpYWwoY3JlZGVudGlhbCwgQ3JlZGVudGlhbFBlcnNpc3Rl
bmNlRm9yU2Vzc2lvbik7CisgICAgICAgIFtbTlNVUkxDcmVkZW50aWFsU3RvcmFnZSBzaGFyZWRD
cmVkZW50aWFsU3RvcmFnZV0gc2V0RGVmYXVsdENyZWRlbnRpYWw6bWFjKHNlc3Npb25DcmVkZW50
aWFsKSBmb3JQcm90ZWN0aW9uU3BhY2U6bWFjKHByb3RlY3Rpb25TcGFjZSldOworICAgIH0gZWxz
ZQorICAgICAgICBbW05TVVJMQ3JlZGVudGlhbFN0b3JhZ2Ugc2hhcmVkQ3JlZGVudGlhbFN0b3Jh
Z2VdIHNldERlZmF1bHRDcmVkZW50aWFsOm1hYyhjcmVkZW50aWFsKSBmb3JQcm90ZWN0aW9uU3Bh
Y2U6bWFjKHByb3RlY3Rpb25TcGFjZSldOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vICFVU0UoQ0ZORVRXT1JLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VFcnJvck1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlRXJyb3JNYWMubW0KaW5kZXggY2Vm
NmNkZjM0NmUwZDIzYzdkZjJiYzU3MGQwYTJhYzY2ZjE0ZDQyZS4uY2M3ZjQ1NDE2NmQ2ZDFkZTdl
NDVlNzhjOTFiNmQ3MmZmYjFkOWM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9tYWMvUmVzb3VyY2VFcnJvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUVycm9yTWFjLm1tCkBAIC0zMSwxMCArMzEsMTQ4
IEBACiAjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9DRkVycm9yLmg+CiAjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPENGTmV0d29y
ay9DRlNvY2tldFN0cmVhbVByaXYuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxFcnJvci5o
PgorI2VuZGlmCisKIEBpbnRlcmZhY2UgTlNFcnJvciAoV2ViRXh0cmFzKQogLSAoTlNTdHJpbmcg
Kilfd2ViX2xvY2FsaXplZERlc2NyaXB0aW9uOwogQGVuZAogCisjaWYgUExBVEZPUk0oSU9TKQor
CisvLyBUaGlzIHdvcmthcm91bmQgY29kZSBleGlzdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGNh
bGwgdHJhbnNsYXRlVG9DRkVycm9yIGluIEZvdW5kYXRpb24uIE9uY2Ugd2UKKy8vIGhhdmUgdGhh
dCwgd2UgY2FuIHJlbW92ZSB0aGlzIGNvZGUuIDxyZGFyOi8vcHJvYmxlbS85ODM3NDE1PiBOZWVk
IFNQSSBmb3IgdHJhbnNsYXRlQ0ZFcnJvcgorLy8gVGhlIGNvZGUgaXMgbW9zdGx5IGlkZW50aWNh
bCB0byBGb3VuZGF0aW9uIC0gSSBjaGFuZ2VkIHRoZSBjbGFzcyBuYW1lIGFuZCBmaXhlZCBtaW5v
ciBjb21waWxlIGVycm9ycy4KKy8vIFdlIG5lZWQgdGhpcyBiZWNhdXNlIGNsaWVudCBjb2RlIChT
YWZhcmkpIHdhbnRzIGFuIE5TRXJyb3Igd2l0aCBOU1VSTEVycm9yRG9tYWluIGFzIGl0cyBkb21h
aW4uCisvLyBUaGUgRm91bmRhdGlvbiBjb2RlIGJlbG93IGRvZXMgdGhhdCBhbmQgc2V0cyB1cCBh
cHByb3ByaWF0ZSBjZXJ0aWZpY2F0ZSBrZXlzIGluIHRoZSBOU0Vycm9yLgorCitAaW50ZXJmYWNl
IFdlYkN1c3RvbU5TVVJMRXJyb3IgOiBOU0Vycm9yCisKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFdlYkN1c3RvbU5TVVJMRXJyb3IKKworc3RhdGljIE5TRGljdGlvbmFyeSogZGljdGlvbmFyeVRo
YXRDYW5Db2RlKE5TRGljdGlvbmFyeSogc3JjKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gbWFr
ZXMgYSBjb3B5IG9mIGlucHV0IGRpY3Rpb25hcnksIG1vZGlmaWVzIGl0IHN1Y2ggdGhhdCBpdCAi
c2hvdWxkIiAoYXMgbXVjaCBhcyB3ZSBjYW4gaGVscCBpdCkKKyAgICAvLyBub3QgY29udGFpbiBh
bnkgb2JqZWN0cyB0aGF0IGRvIG5vdCBjb25mb3JtIHRvIE5TQ29kaW5nIHByb3RvY29sLCBhbmQg
cmV0dXJucyBpdCBhdXRvcmVsZWFzZWQuCisKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5KiBkc3Qg
PSBbc3JjIG11dGFibGVDb3B5XTsKKworICAgIC8vIEtpbGwgdGhlIGtub3duIHByb2JsZW0gZW50
cmllcy4KKyAgICBbZHN0IHJlbW92ZU9iamVjdEZvcktleTpAIk5TRXJyb3JQZWVyQ2VydGlmaWNh
dGVDaGFpbktleSJdOyAvLyBOU0FycmF5IHdpdGggU2VjQ2VydGlmaWNhdGVSZWYgb2JqZWN0cwor
ICAgIFtkc3QgcmVtb3ZlT2JqZWN0Rm9yS2V5OkAiTlNFcnJvckNsaWVudENlcnRpZmljYXRlQ2hh
aW5LZXkiXTsgLy8gTlNBcnJheSB3aXRoIFNlY0NlcnRpZmljYXRlUmVmIG9iamVjdHMKKyAgICBb
ZHN0IHJlbW92ZU9iamVjdEZvcktleTpOU1VSTEVycm9yRmFpbGluZ1VSTFBlZXJUcnVzdEVycm9y
S2V5XTsgLy8gU2VjVHJ1c3RSZWYgb2JqZWN0CisgICAgW2RzdCByZW1vdmVPYmplY3RGb3JLZXk6
TlNVbmRlcmx5aW5nRXJyb3JLZXldOyAvLyAoSW1tdXRhYmxlKSBDRkVycm9yIGNvbnRhaW5pbmcg
a0NGIGVxdWl2YWxlbnQgb2YgdGhlIGFib3ZlCisgICAgLy8gV2UgY291bGQgcmVjb25zdGl0dXRl
IHRoaXMgYnV0IGl0J3MgbW9yZSB0cm91YmxlIHRoYW4gaXQncyB3b3J0aAorCisgICAgLy8gTm9u
LWNvbXByZWhlbnNpdmUgc2FmZXR5IGNoZWNrOiAgS2lsbCB0b3AtbGV2ZWwgZGljdGlvbmFyeSBl
bnRyaWVzIHRoYXQgZG9uJ3QgY29uZm9ybSB0byBOU0NvZGluZy4KKyAgICAvLyBXZSBtYXkgaGl0
IG9uZXMgd2UganVzdCByZW1vdmVkLCBidXQgdGhhdCdzIGZpbmUuCisgICAgLy8gV2UgZG9uJ3Qg
aGFuZGxlIGFyYml0cmFyeSBvYmplY3RzIHRoYXQgY2xpZW50cyBoYXZlIHN0dWZmZWQgaW50byB0
aGUgZGljdGlvbmFyeSwgc2luY2Ugd2UgbWF5IG5vdCBrbm93IGhvdyB0bworICAgIC8vIGdldCBh
dCBpdHMgY29uZW50cyAoZS5nLiwgYSBDRkVycm9yIG9iamVjdCAtLSB5b3UnZCBoYXZlIHRvIGtu
b3cgaXQgaGFkIGEgdXNlckluZm8gZGljdGlvbmFyeSBhbmQga2lsbCB0aGluZ3MKKyAgICAvLyBp
bnNpZGUgaXQpLgorICAgIFtzcmMgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4o
aWQga2V5LCBpZCBvYmosIEJPT0wqKSB7CisgICAgICAgIGlmICghIFtvYmogY29uZm9ybXNUb1By
b3RvY29sOkBwcm90b2NvbChOU0NvZGluZyldKSB7CisgICAgICAgICAgICBbZHN0IHJlbW92ZU9i
amVjdEZvcktleTprZXldOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBk
cmlsbCBkb3duIGludG8gc3ViZGljdGlvbmFyaWVzLCBidXQgaXQgc2VlbXMgbW9yZSB0cm91Ymxl
IHRoYW4gaXQncyB3b3J0aAorICAgIH1dOworCisgICAgcmV0dXJuIFtkc3QgYXV0b3JlbGVhc2Vd
OworfQorCistICh2b2lkKWVuY29kZVdpdGhDb2RlcjooTlNDb2RlciAqKWNvZGVyCit7CisgICAg
TlNEaWN0aW9uYXJ5KiBuZXdVc2VySW5mbyA9IGRpY3Rpb25hcnlUaGF0Q2FuQ29kZShbc2VsZiB1
c2VySW5mb10pOworCisgICAgW1tOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpbc2VsZiBkb21haW5d
IGNvZGU6W3NlbGYgY29kZV0gdXNlckluZm86bmV3VXNlckluZm9dIGVuY29kZVdpdGhDb2Rlcjpj
b2Rlcl07Cit9CisKK0BlbmQKKworCisjaWYgVVNFKENGTkVUV09SSykKK3N0YXRpYyBOU0Vycm9y
ICpOU0Vycm9yRnJvbUNGRXJyb3IoQ0ZFcnJvclJlZiBjZkVycm9yLCBOU1VSTCAqdXJsKQorewor
ICAgIENGSW5kZXggZXJyQ29kZSA9IENGRXJyb3JHZXRDb2RlKGNmRXJyb3IpOworICAgIGlmIChD
RkVxdWFsKENGRXJyb3JHZXREb21haW4oY2ZFcnJvciksIGtDRkVycm9yRG9tYWluQ0ZOZXR3b3Jr
KSAmJiBlcnJDb2RlIDw9IGtDRlVSTEVycm9yVW5rbm93biAmJiBlcnJDb2RlID4gLTQwMDApIHsK
KyAgICAgICAgLy8gVGhpcyBpcyBhbiBVUkwgZXJyb3IgYW5kIG5lZWRzIHRvIGJlIHRyYW5zbGF0
ZWQgdG8gdGhlIE5TVVJMRXJyb3JEb21haW4KKyAgICAgICAgaWQga2V5c1sxMF0sIHZhbHVlc1sx
MF07CisgICAgICAgIENGRGljdGlvbmFyeVJlZiB1c2VySW5mbyA9IENGRXJyb3JDb3B5VXNlcklu
Zm8oY2ZFcnJvcik7CisgICAgICAgIE5TRXJyb3IgKnJlc3VsdDsKKyAgICAgICAgTlNJbnRlZ2Vy
IGNvdW50ID0gMDsKKworICAgICAgICBpZiAodXJsKSB7CisgICAgICAgICAgICBrZXlzW2NvdW50
XSA9IE5TVVJMRXJyb3JGYWlsaW5nVVJMRXJyb3JLZXk7CisgICAgICAgICAgICB2YWx1ZXNbY291
bnRdID0gdXJsOworICAgICAgICAgICAgY291bnQgKys7CisKKyAgICAgICAgICAgIGtleXNbY291
bnRdID0gTlNVUkxFcnJvckZhaWxpbmdVUkxTdHJpbmdFcnJvcktleTsKKyAgICAgICAgICAgIHZh
bHVlc1tjb3VudF0gPSBbdXJsIGFic29sdXRlU3RyaW5nXTsKKyAgICAgICAgICAgIGNvdW50ICsr
OworICAgICAgICB9CisKKyAgICAgICAgdmFsdWVzW2NvdW50XSA9IChpZClDRkRpY3Rpb25hcnlH
ZXRWYWx1ZSh1c2VySW5mbywga0NGRXJyb3JMb2NhbGl6ZWREZXNjcmlwdGlvbktleSk7CisgICAg
ICAgIGlmICh2YWx1ZXNbY291bnRdKSB7CisgICAgICAgICAgICBrZXlzW2NvdW50XSA9IE5TTG9j
YWxpemVkRGVzY3JpcHRpb25LZXk7CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfQor
CisgICAgICAgIHZhbHVlc1tjb3VudF0gPSAoaWQpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUodXNlcklu
Zm8sIGtDRkVycm9yTG9jYWxpemVkRmFpbHVyZVJlYXNvbktleSk7CisgICAgICAgIGlmICh2YWx1
ZXNbY291bnRdKSB7CisgICAgICAgICAgICBrZXlzW2NvdW50XSA9IE5TTG9jYWxpemVkRmFpbHVy
ZVJlYXNvbkVycm9yS2V5OworICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKworICAg
ICAgICB2YWx1ZXNbY291bnRdID0gKGlkKUNGRGljdGlvbmFyeUdldFZhbHVlKHVzZXJJbmZvLCBr
Q0ZFcnJvckxvY2FsaXplZFJlY292ZXJ5U3VnZ2VzdGlvbktleSk7CisgICAgICAgIGlmICh2YWx1
ZXNbY291bnRdKSB7CisgICAgICAgICAgICBrZXlzW2NvdW50XSA9IE5TTG9jYWxpemVkUmVjb3Zl
cnlTdWdnZXN0aW9uRXJyb3JLZXk7CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfQor
CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgICAgIGlmICh1c2VySW5m
byAmJiAodmFsdWVzW2NvdW50XSA9IChpZClDRkRpY3Rpb25hcnlHZXRWYWx1ZSh1c2VySW5mbywg
a0NGU3RyZWFtUHJvcGVydHlTU0xQZWVyQ2VydGlmaWNhdGVzKSkgIT0gbmlsKSB7CisgICAgICAg
ICAgICAvLyBOZWVkIHRvIHRyYW5zbGF0ZSB0aGUgY2VydAorICAgICAgICAgICAga2V5c1tjb3Vu
dF0gPSBAIk5TRXJyb3JQZWVyQ2VydGlmaWNhdGVDaGFpbktleSI7CisgICAgICAgICAgICBjb3Vu
dCArKzsKKworICAgICAgICAgICAgdmFsdWVzW2NvdW50XSA9IChpZClDRkRpY3Rpb25hcnlHZXRW
YWx1ZSh1c2VySW5mbywgX2tDRlN0cmVhbVByb3BlcnR5U1NMQ2xpZW50Q2VydGlmaWNhdGVzKTsK
KyAgICAgICAgICAgIGlmICh2YWx1ZXNbY291bnRdKSB7CisgICAgICAgICAgICAgICAga2V5c1tj
b3VudF0gPSBAIk5TRXJyb3JDbGllbnRDZXJ0aWZpY2F0ZUNoYWluS2V5IjsKKyAgICAgICAgICAg
ICAgICBjb3VudCArKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFsdWVzW2NvdW50
XSA9IChpZClDRkRpY3Rpb25hcnlHZXRWYWx1ZSh1c2VySW5mbywgX2tDRlN0cmVhbVByb3BlcnR5
U1NMQ2xpZW50Q2VydGlmaWNhdGVTdGF0ZSk7CisgICAgICAgICAgICBpZiAodmFsdWVzW2NvdW50
XSkgeworICAgICAgICAgICAgICAgIGtleXNbY291bnRdID0gQCJOU0Vycm9yQ2xpZW50Q2VydGlm
aWNhdGVTdGF0ZUtleSI7CisgICAgICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKworICAgICAgICBpZiAo
dXNlckluZm8gJiYgKHZhbHVlc1tjb3VudF0gPSAoaWQpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUodXNl
ckluZm8sIGtDRlN0cmVhbVByb3BlcnR5U1NMUGVlclRydXN0KSkgIT0gbmlsKSB7CisgICAgICAg
ICAgICBrZXlzW2NvdW50XSA9IE5TVVJMRXJyb3JGYWlsaW5nVVJMUGVlclRydXN0RXJyb3JLZXk7
CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisKKyAgICAgICAga2V5c1tjb3VudF0g
PSBOU1VuZGVybHlpbmdFcnJvcktleTsKKyAgICAgICAgdmFsdWVzW2NvdW50XSA9IChpZCljZkVy
cm9yOworICAgICAgICBjb3VudCArKzsKKworICAgICAgICByZXN1bHQgPSBbV2ViQ3VzdG9tTlNV
UkxFcnJvciBlcnJvcldpdGhEb21haW46TlNVUkxFcnJvckRvbWFpbiBjb2RlOihlcnJDb2RlID09
IGtDRlVSTEVycm9yVW5rbm93biA/IChDRkluZGV4KU5TVVJMRXJyb3JVbmtub3duIDogZXJyQ29k
ZSkgdXNlckluZm86W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHM6dmFsdWVzIGZv
cktleXM6a2V5cyBjb3VudDpjb3VudF1dOworICAgICAgICBpZiAodXNlckluZm8pCisgICAgICAg
ICAgICBDRlJlbGVhc2UodXNlckluZm8pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICByZXR1cm4gKE5TRXJyb3IgKiljZkVycm9yOworfQorI2VuZGlmIC8vIFVTRShDRk5FVFdP
UkspCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RhdGljIFJldGFpblB0cjxOU0Vycm9yPiBjcmVhdGVOU0Vycm9yRnJvbVJlc291cmNlRXJyb3JC
YXNlKGNvbnN0IFJlc291cmNlRXJyb3JCYXNlJiByZXNvdXJjZUVycm9yKQpAQCAtNzcsNiArMjE1
LDE0IEBAIE5TRXJyb3IgKlJlc291cmNlRXJyb3I6Om5zRXJyb3IoKSBjb25zdAogICAgIGlmICht
X3BsYXRmb3JtRXJyb3IpIHsKICAgICAgICAgQ0ZFcnJvclJlZiBlcnJvciA9IG1fcGxhdGZvcm1F
cnJvci5nZXQoKTsKICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gdXNlckluZm8g
PSBhZG9wdENGKENGRXJyb3JDb3B5VXNlckluZm8oZXJyb3IpKTsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgIG1fcGxhdGZvcm1OU0Vycm9yID0gTlNFcnJvckZyb21DRkVycm9yKGVycm9yLCAo
TlNVUkwgKilbKE5TRGljdGlvbmFyeSAqKXVzZXJJbmZvLmdldCgpIG9iamVjdEZvcktleTooaWQp
IGtDRlVSTEVycm9yRmFpbGluZ1VSTEVycm9yS2V5XSk7CisgICAgICAgIC8vIElmIE5TRXJyb3JG
cm9tQ0ZFcnJvciBjcmVhdGVkIGEgbmV3IE5TRXJyb3IgZm9yIHVzLCByZXR1cm4gdGhhdC4KKyAg
ICAgICAgaWYgKG1fcGxhdGZvcm1OU0Vycm9yLmdldCgpICE9IChOU0Vycm9yICopZXJyb3IpCisg
ICAgICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybU5TRXJyb3IuZ2V0KCk7CisKKyAgICAgICAgLy8g
T3RoZXJ3aXNlIGZhbGwgdGhyb3VnaCB0byBjcmVhdGUgYSBuZXcgTlNFcnJvciBmcm9tIHRoZSBD
RkVycm9yLgorI2VuZGlmCiAgICAgICAgIG1fcGxhdGZvcm1OU0Vycm9yID0gYWRvcHROUyhbW05T
RXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOihOU1N0cmluZyAqKUNGRXJyb3JHZXREb21haW4o
ZXJyb3IpIGNvZGU6Q0ZFcnJvckdldENvZGUoZXJyb3IpIHVzZXJJbmZvOihOU0RpY3Rpb25hcnkg
Kil1c2VySW5mby5nZXQoKV0pOwogICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybU5TRXJyb3IuZ2V0
KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9t
YWMvUmVzb3VyY2VIYW5kbGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQppbmRleCBlNzNjNjVkMjI3N2Q5ODkyMmU2NzhlYzY1
YmVmOGY4YzdhOTBlYjRiLi4zZDA0NTE4MTMxNzFhMWI3ODIzYjExNmJmMzVkZjExNjk1YzUyNGM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJj
ZUhhbmRsZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9S
ZXNvdXJjZUhhbmRsZU1hYy5tbQpAQCAtNTYsNiArNTYsMjEgQEAKICNpbXBvcnQgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgogCisjaWYgUExBVEZPUk0o
SU9TKQorI2ltcG9ydCA8Q0ZOZXR3b3JrL0NGVVJMUmVxdWVzdC5oPgorCisjaW1wb3J0ICJSdW50
aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCIKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIK
KworQGludGVyZmFjZSBOU1VSTFJlcXVlc3QgKGlPU0RldGFpbHMpCistIChDRlVSTFJlcXVlc3RS
ZWYpIF9DRlVSTFJlcXVlc3Q7CitAZW5kCisjZW5kaWYKKworI2lmIFVTRShRVUlDS19MT09LKQor
I2ltcG9ydCAiUXVpY2tMb29rLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKIEBpbnRlcmZhY2UgTlNVUkxDb25uZWN0aW9uIChEZXRhaWxzKQpAQCAtOTQsNyArMTA5LDE5
IEBAIFJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQogICAgIExPRyhOZXR3b3JrLCAi
SGFuZGxlICVwIGRlc3Ryb3llZCIsIHRoaXMpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorc3Rh
dGljIGJvb2wgc3luY2hyb25vdXNXaWxsU2VuZFJlcXVlc3RFbmFibGVkKCkKK3sKKyAgICBzdGF0
aWMgYm9vbCBkaXNhYmxlZCA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
IGJvb2xGb3JLZXk6QCJXZWJLaXREaXNhYmxlU3luY2hyb25vdXNXaWxsU2VuZFJlcXVlc3RQcmVm
ZXJlbmNlS2V5Il07CisgICAgcmV0dXJuICFkaXNhYmxlZDsKK30KKyNlbmRpZgorCisjaWYgIVBM
QVRGT1JNKElPUykKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbihp
ZCBkZWxlZ2F0ZSwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbCBzaG91bGRD
b250ZW50U25pZmYpCisjZWxzZQordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlTlNVUkxDb25u
ZWN0aW9uKGlkIGRlbGVnYXRlLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29s
IHNob3VsZENvbnRlbnRTbmlmZiwgTlNEaWN0aW9uYXJ5ICpjb25uZWN0aW9uUHJvcGVydGllcykK
KyNlbmRpZgogewogICAgIC8vIENyZWRlbnRpYWxzIGZvciBmdHAgY2FuIG9ubHkgYmUgcGFzc2Vk
IGluIFVSTCwgdGhlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
OiBkZWxlZ2F0ZSBjYWxsIHdvbid0IGJlIG1hZGUuCiAgICAgaWYgKCghZC0+bV91c2VyLmlzRW1w
dHkoKSB8fCAhZC0+bV9wYXNzLmlzRW1wdHkoKSkgJiYgIWZpcnN0UmVxdWVzdCgpLnVybCgpLnBy
b3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgewpAQCAtMTM0LDE5ICsxNjEsMzMgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6Y3JlYXRlTlNVUkxDb25uZWN0aW9uKGlkIGRlbGVnYXRlLCBib29sIHNob3Vs
ZFVzZUNyZWRlbnRpYWwKIAogICAgIEFTU0VSVChbTlNVUkxDb25uZWN0aW9uIGluc3RhbmNlc1Jl
c3BvbmRUb1NlbGVjdG9yOkBzZWxlY3RvcihfaW5pdFdpdGhSZXF1ZXN0OmRlbGVnYXRlOnVzZXND
YWNoZTptYXhDb250ZW50TGVuZ3RoOnN0YXJ0SW1tZWRpYXRlbHk6Y29ubmVjdGlvblByb3BlcnRp
ZXM6KV0pOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIE5TRGljdGlvbmFyeSAqc3RyZWFtUHJv
cGVydGllc0Zyb21DbGllbnQgPSBbY29ubmVjdGlvblByb3BlcnRpZXMgb2JqZWN0Rm9yS2V5OkAi
a0NGVVJMQ29ubmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMiXTsKKyAgICBOU011dGFibGVE
aWN0aW9uYXJ5ICpzdHJlYW1Qcm9wZXJ0aWVzID0gc3RyZWFtUHJvcGVydGllc0Zyb21DbGllbnQg
PyBbW3N0cmVhbVByb3BlcnRpZXNGcm9tQ2xpZW50IG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV0g
OiBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKyNlbHNlCiAgICAgTlNNdXRhYmxl
RGljdGlvbmFyeSAqc3RyZWFtUHJvcGVydGllcyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rp
b25hcnldOworI2VuZGlmCiAKICAgICBpZiAoIXNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQog
ICAgICAgICBbc3RyZWFtUHJvcGVydGllcyBzZXRPYmplY3Q6QCJXZWJLaXRQcml2YXRlU2Vzc2lv
biIgZm9yS2V5OkAiX2tDRlVSTENvbm5lY3Rpb25TZXNzaW9uSUQiXTsKIAotI2lmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmIFBMQVRGT1JNKElPUykgfHwgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAgICAgUmV0YWluUHRyPENGRGF0
YVJlZj4gc291cmNlQXBwbGljYXRpb25BdWRpdERhdGEgPSBkLT5tX2NvbnRleHQtPnNvdXJjZUFw
cGxpY2F0aW9uQXVkaXREYXRhKCk7CiAgICAgaWYgKHNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRh
KQogICAgICAgICBbc3RyZWFtUHJvcGVydGllcyBzZXRPYmplY3Q6KE5TRGF0YSAqKXNvdXJjZUFw
cGxpY2F0aW9uQXVkaXREYXRhLmdldCgpIGZvcktleTpAImtDRlN0cmVhbVByb3BlcnR5U291cmNl
QXBwbGljYXRpb24iXTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIE5TTXV0YWJs
ZURpY3Rpb25hcnkgKnByb3BlcnR5RGljdGlvbmFyeSA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoRGljdGlvbmFyeTpjb25uZWN0aW9uUHJvcGVydGllc107CisgICAgW3Byb3Bl
cnR5RGljdGlvbmFyeSBzZXRPYmplY3Q6c3RyZWFtUHJvcGVydGllcyBmb3JLZXk6QCJrQ0ZVUkxD
b25uZWN0aW9uU29ja2V0U3RyZWFtUHJvcGVydGllcyJdOworICAgIGNvbnN0IGJvb2wgdXNlc0Nh
Y2hlID0gZmFsc2U7CisgICAgaWYgKHN5bmNocm9ub3VzV2lsbFNlbmRSZXF1ZXN0RW5hYmxlZCgp
KQorICAgICAgICBDRlVSTFJlcXVlc3RTZXRTaG91bGRTdGFydFN5bmNocm9ub3VzbHkoW25zUmVx
dWVzdCBfQ0ZVUkxSZXF1ZXN0XSwgMSk7CisjZWxzZQogICAgIE5TRGljdGlvbmFyeSAqcHJvcGVy
dHlEaWN0aW9uYXJ5ID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpzdHJlYW1Q
cm9wZXJ0aWVzIGZvcktleTpAImtDRlVSTENvbm5lY3Rpb25Tb2NrZXRTdHJlYW1Qcm9wZXJ0aWVz
Il07Ci0gICAgZC0+bV9jb25uZWN0aW9uID0gYWRvcHROUyhbW05TVVJMQ29ubmVjdGlvbiBhbGxv
Y10gX2luaXRXaXRoUmVxdWVzdDpuc1JlcXVlc3QgZGVsZWdhdGU6ZGVsZWdhdGUgdXNlc0NhY2hl
OllFUyBtYXhDb250ZW50TGVuZ3RoOjAgc3RhcnRJbW1lZGlhdGVseTpOTyBjb25uZWN0aW9uUHJv
cGVydGllczpwcm9wZXJ0eURpY3Rpb25hcnldKTsKKyAgICBjb25zdCBib29sIHVzZXNDYWNoZSA9
IHRydWU7CisjZW5kaWYKKyAgICBkLT5tX2Nvbm5lY3Rpb24gPSBhZG9wdE5TKFtbTlNVUkxDb25u
ZWN0aW9uIGFsbG9jXSBfaW5pdFdpdGhSZXF1ZXN0Om5zUmVxdWVzdCBkZWxlZ2F0ZTpkZWxlZ2F0
ZSB1c2VzQ2FjaGU6dXNlc0NhY2hlIG1heENvbnRlbnRMZW5ndGg6MCBzdGFydEltbWVkaWF0ZWx5
Ok5PIGNvbm5lY3Rpb25Qcm9wZXJ0aWVzOnByb3BlcnR5RGljdGlvbmFyeV0pOwogfQogCiBib29s
IFJlc291cmNlSGFuZGxlOjpzdGFydCgpCkBAIC0xNjgsMTEgKzIwOSwyNCBAQCBib29sIFJlc291
cmNlSGFuZGxlOjpzdGFydCgpCiAKICAgICBkLT5tX25lZWRzU2l0ZVNwZWNpZmljUXVpcmtzID0g
ZC0+bV9jb250ZXh0LT5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpOwogCisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBjcmVhdGVOU1VSTENvbm5lY3Rpb24oCiAgICAgICAgIFJlc291cmNlSGFuZGxl
OjpkZWxlZ2F0ZSgpLAogICAgICAgICBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwKICAgICAg
ICAgZC0+bV9zaG91bGRDb250ZW50U25pZmYgfHwgZC0+bV9jb250ZXh0LT5sb2NhbEZpbGVDb250
ZW50U25pZmZpbmdFbmFibGVkKCkpOworI2Vsc2UKKyAgICBjcmVhdGVOU1VSTENvbm5lY3Rpb24o
CisgICAgICAgIGQtPm1fcHJveHkuZ2V0KCksCisgICAgICAgIHNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlLAorICAgICAgICBkLT5tX3Nob3VsZENvbnRlbnRTbmlmZiB8fCBkLT5tX2NvbnRleHQt
PmxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSwKKyAgICAgICAgKE5TRGljdGlvbmFy
eSAqKWNsaWVudCgpLT5jb25uZWN0aW9uUHJvcGVydGllcyh0aGlzKSk7CisjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKElPUykKKyAgICBOU1VSTENvbm5lY3Rpb24gKnVybENvbm5lY3Rpb24gPSBjb25u
ZWN0aW9uKCk7CisgICAgW3VybENvbm5lY3Rpb24gc2NoZWR1bGVJblJ1bkxvb3A6V2ViVGhyZWFk
TlNSdW5Mb29wKCkgZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07CisgICAgW3VybENvbm5l
Y3Rpb24gc3RhcnRdOworI2Vsc2UKICAgICBib29sIHNjaGVkdWxlZCA9IGZhbHNlOwogICAgIGlm
IChTY2hlZHVsZVBhaXJIYXNoU2V0KiBzY2hlZHVsZWRQYWlycyA9IGQtPm1fY29udGV4dC0+c2No
ZWR1bGVkUnVuTG9vcFBhaXJzKCkpIHsKICAgICAgICAgU2NoZWR1bGVQYWlySGFzaFNldDo6aXRl
cmF0b3IgZW5kID0gc2NoZWR1bGVkUGFpcnMtPmVuZCgpOwpAQCAtMTk2LDYgKzI1MCw3IEBAIGJv
b2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KCkKICAgICAgICAgW2Nvbm5lY3Rpb24oKSBzdGFydF07
CiAgICAgZWxzZQogICAgICAgICBkLT5tX3N0YXJ0V2hlblNjaGVkdWxlZCA9IHRydWU7CisjZW5k
aWYKIAogICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIHN0YXJ0aW5nIGNvbm5lY3Rpb24gJXAg
Zm9yICVAIiwgdGhpcywgY29ubmVjdGlvbigpLCBmaXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3Qo
RG9Ob3RVcGRhdGVIVFRQQm9keSkpOwogICAgIApAQCAtMjMwLDYgKzI4NSw3IEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKIAogdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6c2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBwYWlyKQogeworI2lmICFQ
TEFURk9STShJT1MpCiAgICAgTlNSdW5Mb29wICpydW5Mb29wID0gcGFpci0+bnNSdW5Mb29wKCk7
CiAgICAgaWYgKCFydW5Mb29wKQogICAgICAgICByZXR1cm47CkBAIC0yMzgsMTIgKzI5NCwxOSBA
QCB2b2lkIFJlc291cmNlSGFuZGxlOjpzY2hlZHVsZShTY2hlZHVsZVBhaXIqIHBhaXIpCiAgICAg
ICAgIFtkLT5tX2Nvbm5lY3Rpb24uZ2V0KCkgc3RhcnRdOwogICAgICAgICBkLT5tX3N0YXJ0V2hl
blNjaGVkdWxlZCA9IGZhbHNlOwogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhaXIp
OworI2VuZGlmCiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnVuc2NoZWR1bGUoU2NoZWR1bGVQ
YWlyKiBwYWlyKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKE5TUnVuTG9vcCAqcnVu
TG9vcCA9IHBhaXItPm5zUnVuTG9vcCgpKQogICAgICAgICBbZC0+bV9jb25uZWN0aW9uLmdldCgp
IHVuc2NoZWR1bGVGcm9tUnVuTG9vcDpydW5Mb29wIGZvck1vZGU6KE5TU3RyaW5nICopcGFpci0+
bW9kZSgpXTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhaXIpOworI2VuZGlmCiB9CiAKIGlk
IFJlc291cmNlSGFuZGxlOjpkZWxlZ2F0ZSgpCkBAIC0yOTksMTAgKzM2MiwxOSBAQCB2b2lkIFJl
c291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleAogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBoYW5kbGUtPmNyZWF0ZU5TVVJMQ29ubmVjdGlvbigKICAgICAgICAgaGFuZGxl
LT5kZWxlZ2F0ZSgpLAogICAgICAgICBzdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENy
ZWRlbnRpYWxzLAogICAgICAgICBoYW5kbGUtPnNob3VsZENvbnRlbnRTbmlmZigpIHx8IGNvbnRl
eHQtPmxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSk7CisjZWxzZQorICAgIGhhbmRs
ZS0+Y3JlYXRlTlNVUkxDb25uZWN0aW9uKAorICAgICAgICBoYW5kbGUtPmRlbGVnYXRlKCksIC8v
IEEgc3luY2hyb25vdXMgcmVxdWVzdCBjYW5ub3QgdHVybiBpbnRvIGEgZG93bmxvYWQsIHNvIHRo
ZXJlIGlzIG5vIG5lZWQgdG8gcHJveHkgdGhlIGRlbGVnYXRlLgorICAgICAgICBzdG9yZWRDcmVk
ZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLAorICAgICAgICBzaG91bGRSZWxheFRo
aXJkUGFydHlDb29raWVQb2xpY3koY29udGV4dCwgcmVxdWVzdC51cmwoKSksCisgICAgICAgIGhh
bmRsZS0+c2hvdWxkQ29udGVudFNuaWZmKCkgfHwgKGNvbnRleHQgJiYgY29udGV4dC0+bG9jYWxG
aWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpKSwKKyAgICAgICAgKE5TRGljdGlvbmFyeSAqKWhh
bmRsZS0+Y2xpZW50KCktPmNvbm5lY3Rpb25Qcm9wZXJ0aWVzKGhhbmRsZS5nZXQoKSkpOworI2Vu
ZGlmCiAKICAgICBbaGFuZGxlLT5jb25uZWN0aW9uKCkgc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVu
TG9vcCBjdXJyZW50UnVuTG9vcF0gZm9yTW9kZTooTlNTdHJpbmcgKilzeW5jaHJvbm91c0xvYWRS
dW5Mb29wTW9kZSgpXTsKICAgICBbaGFuZGxlLT5jb25uZWN0aW9uKCkgc3RhcnRdOwpAQCAtNDky
LDYgKzU2NCwxOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbAogICAgICAgICB9CiAgICAgfQog
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIElmIHRoZSBjaGFsbGVuZ2UgaXMgZm9yIGEgcHJv
eHkgcHJvdGVjdGlvbiBzcGFjZSwgbG9vayBmb3IgZGVmYXVsdCBjcmVkZW50aWFscyBpbgorICAg
IC8vIHRoZSBrZXljaGFpbi4gIENGTmV0d29yayB1c2VkIHRvIGhhbmRsZSB0aGlzIHVudGlsIFdl
YkNvcmUgd2FzIGNoYW5nZWQgdG8gYWx3YXlzCisgICAgLy8gcmV0dXJuIE5PIHRvIC1jb25uZWN0
aW9uU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U6IGZvciA8cmRhcjovL3Byb2JsZW0vNzcwNDk0
Mz4uCisgICAgaWYgKCFjaGFsbGVuZ2UucHJldmlvdXNGYWlsdXJlQ291bnQoKSAmJiBjaGFsbGVu
Z2UucHJvdGVjdGlvblNwYWNlKCkuaXNQcm94eSgpKSB7CisgICAgICAgIE5TVVJMQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UgKm1hY0NoYWxsZW5nZSA9IG1hYyhjaGFsbGVuZ2UpOworICAgICAgICBp
ZiAoTlNVUkxDcmVkZW50aWFsICpjcmVkZW50aWFsID0gW1tOU1VSTENyZWRlbnRpYWxTdG9yYWdl
IHNoYXJlZENyZWRlbnRpYWxTdG9yYWdlXSBkZWZhdWx0Q3JlZGVudGlhbEZvclByb3RlY3Rpb25T
cGFjZTpbbWFjQ2hhbGxlbmdlIHByb3RlY3Rpb25TcGFjZV1dKSB7CisgICAgICAgICAgICBbY2hh
bGxlbmdlLnNlbmRlcigpIHVzZUNyZWRlbnRpYWw6Y3JlZGVudGlhbCBmb3JBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTptYWNDaGFsbGVuZ2VdOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogICAgIGQtPm1fY3VycmVudE1hY0No
YWxsZW5nZSA9IGNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCk7CiAgICAg
ZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlID0gY29yZShkLT5tX2N1cnJlbnRNYWNDaGFsbGVuZ2Up
OwogICAgIGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZS5zZXRBdXRoZW50aWNhdGlvbkNsaWVudCh0
aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jl
c291cmNlUmVxdWVzdE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFj
L1Jlc291cmNlUmVxdWVzdE1hYy5tbQppbmRleCA4NjkxNDA1MGZiZmRiOGE2YTVmZTdiYmM5YTM4
MGY4ODI4ZmM0MTIyLi4zYzc4YzY4NjEwNTQzMmFmYmIyOGJjM2IxN2IxN2U4MjhlNDk2N2JlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJl
cXVlc3RNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVz
b3VyY2VSZXF1ZXN0TWFjLm1tCkBAIC01OSw2ICs1OSw5IEBAIE5TVVJMUmVxdWVzdCAqUmVzb3Vy
Y2VSZXF1ZXN0Ojpuc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3kgYm9keVBvbGljeSkg
Y29uCiAKIFJlc291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1ZXN0KE5TVVJMUmVxdWVzdCAqbnNS
ZXF1ZXN0KQogICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSgpCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICwgbV9tYWluUmVzb3VyY2VSZXF1ZXN0KGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX2NmUmVx
dWVzdChbbnNSZXF1ZXN0IF9DRlVSTFJlcXVlc3RdKQogICAgICwgbV9uc1JlcXVlc3QobnNSZXF1
ZXN0KQogewpAQCAtNjYsOCArNjksMjUgQEAgUmVzb3VyY2VSZXF1ZXN0OjpSZXNvdXJjZVJlcXVl
c3QoTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3QpCiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojp1cGRh
dGVOU1VSTFJlcXVlc3QoKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBUaGVyZSBpcyBj
bGllbnQgY29kZSB0aGF0IGV4dGVuZHMgTlNVUkxSZXF1ZXN0IGFuZCBleHBlY3RzIHRvIGdldCBi
YWNrLCBpbiB0aGUgZGVsZWdhdGUKKyAgICAvLyBjYWxsYmFja3MsIGFuIG9iamVjdCBvZiB0aGUg
c2FtZSB0eXBlIHRoYXQgdGhleSBwYXNzZWQgaW50byBXZWJLaXQuIFRvIGtlZXAgdGhlbiBydW5u
aW5nLCB3ZQorICAgIC8vIGNyZWF0ZSBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhbmQgcmV0
dXJuIHRoYXQuIFNlZSA8cmRhcjovLzk4NDM1ODI+LgorICAgIC8vIEFsc28sIGRldmVsb3BlcnMg
cmVhbGx5IHJlYWxseSB3YW50IGFuIE5TTXV0YWJsZVVSTFJlcXVlc3Qgc28gdHJ5IHRvIGNyZWF0
ZSBhbgorICAgIC8vIE5TTXV0YWJsZVVSTFJlcXVlc3QgaW5zdGVhZCBvZiBOU1VSTFJlcXVlc3Qu
CisgICAgc3RhdGljIENsYXNzIG5zVVJMUmVxdWVzdENsYXNzID0gW05TVVJMUmVxdWVzdCBjbGFz
c107CisgICAgc3RhdGljIENsYXNzIG5zTXV0YWJsZVVSTFJlcXVlc3RDbGFzcyA9IFtOU011dGFi
bGVVUkxSZXF1ZXN0IGNsYXNzXTsKKyAgICBDbGFzcyByZXF1ZXN0Q2xhc3MgPSBbbV9uc1JlcXVl
c3QuZ2V0KCkgY2xhc3NdOworCisgICAgaWYgKCFyZXF1ZXN0Q2xhc3MgfHwgcmVxdWVzdENsYXNz
ID09IG5zVVJMUmVxdWVzdENsYXNzKQorICAgICAgICByZXF1ZXN0Q2xhc3MgPSBuc011dGFibGVV
UkxSZXF1ZXN0Q2xhc3M7CisKKyAgICBpZiAobV9jZlJlcXVlc3QpCisgICAgICAgIG1fbnNSZXF1
ZXN0ID0gYWRvcHROUyhbW3JlcXVlc3RDbGFzcyBhbGxvY10gX2luaXRXaXRoQ0ZVUkxSZXF1ZXN0
Om1fY2ZSZXF1ZXN0LmdldCgpXSk7CisjZWxzZQogICAgIGlmIChtX2NmUmVxdWVzdCkKICAgICAg
ICAgbV9uc1JlcXVlc3QgPSBhZG9wdE5TKFtbTlNVUkxSZXF1ZXN0IGFsbG9jXSBfaW5pdFdpdGhD
RlVSTFJlcXVlc3Q6bV9jZlJlcXVlc3QuZ2V0KCldKTsKKyNlbmRpZgogfQogCiAjZWxzZQpAQCAt
MjMyLDggKzI1MiwxMCBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBkYXRlRnJvbURlbGVnYXRl
UHJlc2VydmluZ09sZEhUVFBCb2R5KGNvbnN0IFJlc291cmNlUmVxdQogCiB2b2lkIFJlc291cmNl
UmVxdWVzdDo6YXBwbHlXZWJBcmNoaXZlSGFja0Zvck1haWwoKQogeworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgLy8gSGFjayBiZWNhdXNlIE1haWwgY2hlY2tzIGZvciB0aGlzIHByb3BlcnR5IHRv
IGRldGVjdCBkYXRhIC8gYXJjaGl2ZSBsb2FkcwogICAgIFtOU1VSTFByb3RvY29sIHNldFByb3Bl
cnR5OkAiIiBmb3JLZXk6QCJXZWJEYXRhUmVxdWVzdCIgaW5SZXF1ZXN0OihOU011dGFibGVVUkxS
ZXF1ZXN0ICopbnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpXTsKKyNlbmRpZgogfQog
CiB2b2lkIFJlc291cmNlUmVxdWVzdDo6c2V0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9yYWdlU2Vz
c2lvblJlZiBzdG9yYWdlU2Vzc2lvbikKQEAgLTI0NCw2ICsyNjYsNyBAQCB2b2lkIFJlc291cmNl
UmVxdWVzdDo6c2V0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdl
U2Vzc2lvbikKICAgICAKICNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JLKQogCisjaWYgIVBMQVRGT1JN
KElPUykKIHN0YXRpYyBib29sIGluaXRRdWlja0xvb2tSZXNvdXJjZUNhY2hpbmdRdWlya3MoKQog
ewogICAgIGlmIChhcHBsaWNhdGlvbklzU2FmYXJpKCkpCkBAIC0yNjIsMTEgKzI4NSwxNiBAQCBz
dGF0aWMgYm9vbCBpbml0UXVpY2tMb29rUmVzb3VyY2VDYWNoaW5nUXVpcmtzKCkKICAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIGJvb2wgUmVz
b3VyY2VSZXF1ZXN0Ojp1c2VRdWlja0xvb2tSZXNvdXJjZUNhY2hpbmdRdWlya3MoKQogeworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgc3RhdGljIGJvb2wgZmxhZyA9IGluaXRRdWlja0xvb2tSZXNv
dXJjZUNhY2hpbmdRdWlya3MoKTsKICAgICByZXR1cm4gZmxhZzsKKyNlbHNlCisgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1VU
SVV0aWxpdGllcy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1VUSVV0
aWxpdGllcy5tbQppbmRleCA0MjU5Mjk4MDBmNWFiZmE3ZDYyZDYzYmExNGQ5ZTg4MTJiNjJmZjMz
Li42N2I4ZDVlNTVmMDc2ZjgyM2Y1ZTU2MWNmNDVjNmYzOWNmMzlkMjY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9VVElVdGlsaXRpZXMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvVVRJVXRpbGl0aWVzLm1tCkBAIC0z
NCw2ICszNCw3IEBAIFNPRlRfTElOS19GUkFNRVdPUksoTW9iaWxlQ29yZVNlcnZpY2VzKQogCiBT
T0ZUX0xJTksoTW9iaWxlQ29yZVNlcnZpY2VzLCBVVFR5cGVDb3B5RGVjbGFyYXRpb24sIENGRGlj
dGlvbmFyeVJlZiwgKENGU3RyaW5nUmVmIGluVVRJKSwgKGluVVRJKSkKIFNPRlRfTElOSyhNb2Jp
bGVDb3JlU2VydmljZXMsIFVUVHlwZUNvcHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3MsIENGU3RyaW5n
UmVmLCAoQ0ZTdHJpbmdSZWYgaW5VVEksIENGU3RyaW5nUmVmIGluVGFnQ2xhc3MpLCAoaW5VVEks
IGluVGFnQ2xhc3MpKQorU09GVF9MSU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywgVVRUeXBlQ3JlYXRl
UHJlZmVycmVkSWRlbnRpZmllckZvclRhZywgQ0ZTdHJpbmdSZWYsIChDRlN0cmluZ1JlZiBpblRh
Z0NsYXNzLCBDRlN0cmluZ1JlZiBpblRhZywgQ0ZTdHJpbmdSZWYgaW5Db25mb3JtaW5nVG9VVEkp
LCAoaW5UYWdDbGFzcywgaW5UYWcsIGluQ29uZm9ybWluZ1RvVVRJKSkKIAogU09GVF9MSU5LX0NP
TlNUQU5UKE1vYmlsZUNvcmVTZXJ2aWNlcywga1VUVHlwZUNvbmZvcm1zVG9LZXksIENGU3RyaW5n
UmVmKQogU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVTZXJ2aWNlcywga1VUVGFnQ2xhc3NN
SU1FVHlwZSwgQ0ZTdHJpbmdSZWYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxl
Z2F0ZS5tbQppbmRleCBiMTM0ZjU1ZjE2ZTEwYTI1M2U2YzJlZjAwM2ZiNjgzMGE3NDFjMzBlLi45
NzNiYTYyYzRkODhhMTgwNGMwOGNkYzc4Y2M2NzIwMWZkOGI3YzNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0Rl
bGVnYXRlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1dlYkNv
cmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUubW0KQEAgLTkzLDEwICs5MywxNCBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRl
IGNvbm5lY3Rpb25TaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZTolcCIsIG1faGFuZGxlLCBjb25u
ZWN0aW9uKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4gTk87CisjZWxzZQogICAg
IGlmICghbV9oYW5kbGUpCiAgICAgICAgIHJldHVybiBOTzsKIAogICAgIHJldHVybiBtX2hhbmRs
ZS0+c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKKyNlbmRpZgogfQogCiAtICh2b2lkKWNv
bm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxlbmdl
CkBAIC0xNDEsNyArMTQ1LDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIC0gKHZvaWQp
Y29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNlaXZlUmVzcG9u
c2U6KE5TVVJMUmVzcG9uc2UgKilyCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBVTlVTRURf
UEFSQU0oY29ubmVjdGlvbik7CisjZW5kaWYKIAogICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVw
IGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgZGlkUmVjZWl2ZVJlc3BvbnNlOiVwIChIVFRQIHN0YXR1
cyAlZCwgcmVwb3J0ZWQgTUlNRVR5cGUgJyVzJykiLCBtX2hhbmRsZSwgY29ubmVjdGlvbiwgciwg
W3IgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzdGF0dXNDb2RlKV0gPyBbKGlkKXIgc3Rh
dHVzQ29kZV0gOiAwLCBbW3IgTUlNRVR5cGVdIFVURjhTdHJpbmddKTsKIApAQCAtMTUzLDggKzE1
OSwxNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBpZiAoc3RhdHVzQ29kZSAhPSAz
MDQpCiAgICAgICAgIGFkanVzdE1JTUVUeXBlSWZOZWNlc3NhcnkoW3IgX0NGVVJMUmVzcG9uc2Vd
KTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKFttX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0
KCkubnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpIF9wcm9wZXJ0eUZvcktleTpAIkZv
cmNlSFRNTE1JTUVUeXBlIl0pCiAgICAgICAgIFtyIF9zZXRNSU1FVHlwZTpAInRleHQvaHRtbCJd
OworI2VuZGlmCisKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBtX2hhbmRsZS0+c2V0UXVpY2tM
b29rSGFuZGxlKFF1aWNrTG9va0hhbmRsZTo6Y3JlYXRlKG1faGFuZGxlLCBjb25uZWN0aW9uLCBy
LCBzZWxmKSk7CisgICAgaWYgKG1faGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKSkKKyAgICAgICAg
ciA9IG1faGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKS0+bnNSZXNwb25zZSgpOworI2VuZGlmCiAK
ICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZShtX2hhbmRsZSwgcik7
CiB9CkBAIC0xNzEsNiArMTg1LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIGlm
ICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogCisj
aWYgVVNFKFFVSUNLX0xPT0spCisgICAgaWYgKG1faGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKSAm
JiBtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCktPmRpZFJlY2VpdmVEYXRhQXJyYXkocmVpbnRl
cnByZXRfY2FzdDxDRkFycmF5UmVmPihkYXRhQXJyYXkpKSkKKyAgICAgICAgcmV0dXJuOworI2Vu
ZGlmCisKICAgICBtX2hhbmRsZS0+aGFuZGxlRGF0YUFycmF5KHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZB
cnJheVJlZj4oZGF0YUFycmF5KSk7CiAgICAgLy8gVGhlIGNhbGwgdG8gZGlkUmVjZWl2ZURhdGEg
YWJvdmUgY2FuIGNhbmNlbCBhIGxvYWQsIGFuZCBpZiBzbywgdGhlIGRlbGVnYXRlIChzZWxmKSBj
b3VsZCBoYXZlIGJlZW4gZGVhbGxvY2F0ZWQgYnkgdGhpcyBwb2ludC4KIH0KQEAgLTE4MywxMiAr
MjAyLDIyIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAgICAgTE9HKE5ldHdvcmssICJI
YW5kbGUgJXAgZGVsZWdhdGUgY29ubmVjdGlvbjolcCBkaWRSZWNlaXZlRGF0YTolcCBsZW5ndGhS
ZWNlaXZlZDolbGxkIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIGRhdGEsIGxlbmd0aFJlY2VpdmVk
KTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoW2RhdGEgbGVuZ3RoXSA9PSAwKSAvLyA8
cmRhcjovL3Byb2JsZW0vNTUzMjkzMT4KKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICBp
ZiAoIW1faGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAvLyBGSVhNRTogSWYgd2UgZ2V0IG1vcmUgdGhhbiAyQiBieXRlcyBpbiBhIHNpbmdsZSBjaHVu
aywgdGhpcyBjb2RlIHdvbid0IGRvIHRoZSByaWdodCB0aGluZy4KICAgICAvLyBIb3dldmVyLCB3
aXRoIHRvZGF5J3MgY29tcHV0ZXJzIGFuZCBuZXR3b3JraW5nIHNwZWVkcywgdGhpcyB3b24ndCBo
YXBwZW4gaW4gcHJhY3RpY2UuCiAgICAgLy8gQ291bGQgYmUgYW4gaXNzdWUgd2l0aCBhIGdpYW50
IGxvY2FsIGZpbGUuCiAKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBpZiAobV9oYW5kbGUtPnF1
aWNrTG9va0hhbmRsZSgpICYmIG1faGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKS0+ZGlkUmVjZWl2
ZURhdGEocmVpbnRlcnByZXRfY2FzdDxDRkRhdGFSZWY+KGRhdGEpKSkKKyAgICAgICAgcmV0dXJu
OworI2VuZGlmCisKICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NzkzCiAgICAgLy8gLTEgbWVhbnMgd2UgZG8gbm90IHByb3ZpZGUgYW55IGRh
dGEgYWJvdXQgdHJhbnNmZXIgc2l6ZSB0byBpbnNwZWN0b3Igc28gaXQgd291bGQgdXNlCiAgICAg
Ly8gQ29udGVudC1MZW5ndGggaGVhZGVycyBvciBjb250ZW50IHNpemUgdG8gc2hvdyB0cmFuc2Zl
ciBzaXplLgpAQCAtMjMwLDYgKzI1OSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAg
ICBpZiAoIW1faGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgIHJldHVybjsK
IAorI2lmIFVTRShRVUlDS19MT09LKQorICAgIGlmIChtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxl
KCkgJiYgbV9oYW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpLT5kaWRGaW5pc2hMb2FkaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGaW5p
c2hMb2FkaW5nKG1faGFuZGxlLCAwKTsKIH0KIApAQCAtMjQyLDYgKzI3NiwxMSBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKICAgICBpZiAoIW1faGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAorI2lmIFVTRShRVUlDS19MT09LKQorICAgIGlmIChtX2hh
bmRsZS0+cXVpY2tMb29rSGFuZGxlKCkpCisgICAgICAgIG1faGFuZGxlLT5xdWlja0xvb2tIYW5k
bGUoKS0+ZGlkRmFpbCgpOworI2VuZGlmCisKICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZEZh
aWwobV9oYW5kbGUsIGVycm9yKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlRGF0YWJhc2UuaAppbmRleCBmMTU1MDhjNDBhMGY5MWNmOTJmZTg4NzIxMTNkYzBkNDFh
MTcxZWZiLi4xY2RmMTc3OTc0NWJhNjliNTc3MGRjNTljMDliNzNmZmI4YmQ2ODU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaApAQCAtMTA3LDcgKzEw
Nyw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBjaGFyKiBsYXN0RXJyb3JNc2coKTsKICAgICAKICAg
ICBzcWxpdGUzKiBzcWxpdGUzSGFuZGxlKCkgY29uc3QgeworI2lmICFQTEFURk9STShJT1MpCiAg
ICAgICAgIEFTU0VSVChtX3NoYXJhYmxlIHx8IGN1cnJlbnRUaHJlYWQoKSA9PSBtX29wZW5pbmdU
aHJlYWQgfHwgIW1fZGIpOworI2VuZGlmCiAgICAgICAgIHJldHVybiBtX2RiOwogICAgIH0KICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lz
dGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNw
cAppbmRleCA3MzVmMGI0MWY3OGUyYzIzM2E3YzliYmNmODdlMjExMDRjMDEzNzYwLi5lNzA5NGI0
ZGE0ZTg2ZTE2ZDM0MjA3YTBhMjMwMTc4MWYxYmNlMzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCkBAIC0zOCw2ICszOCwxMCBAQAog
I2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8c3FsaXRlMy5oPgogCisjaWYgUExBVEZP
Uk0oSU9TKQorI2luY2x1ZGUgPHNxbGl0ZTNfcHJpdmF0ZS5oPgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogU1FMaXRlRmlsZVN5c3RlbTo6U1FMaXRlRmlsZVN5c3RlbSgpCkBAIC0x
MTAsNiArMTE0LDEzIEBAIGJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxl
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCiAgICAgcmV0dXJuIGRlbGV0ZUZpbGUoZmlsZU5hbWUp
OwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjp0cnVuY2F0
ZURhdGFiYXNlRmlsZShzcWxpdGUzKiBkYXRhYmFzZSkKK3sKKyAgICByZXR1cm4gc3FsaXRlM19m
aWxlX2NvbnRyb2woZGF0YWJhc2UsIDAsIFNRTElURV9UUlVOQ0FURV9EQVRBQkFTRSwgMCkgPT0g
U1FMSVRFX09LOworfQorI2VuZGlmCisgICAgCiBsb25nIGxvbmcgU1FMaXRlRmlsZVN5c3RlbTo6
Z2V0RGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQogeyAgICAgICAgCiAg
ICAgbG9uZyBsb25nIHNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0
ZUZpbGVTeXN0ZW0uaAppbmRleCAxNDA4NWI5MjljODViODdhYzA1NjJiYzlmZWM3YTNmMWM3NzAz
MTY0Li5hN2VmNjVlNjc1MWU0NjE5YzY1ZWEzYzIwNGQzMDk3YzdkNjBkYzY2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKQEAgLTk5LDYgKzk5
LDEzIEBAIHB1YmxpYzoKICAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuCiAgICAgc3Rh
dGljIGJvb2wgZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOwogCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIC8vIFRydW5jYXRlcyBhIGRhdGFiYXNlIGZpbGUuIFVzZWQg
d2hlbiBNb2JpbGVTYWZhcmlTZXR0aW5ncyBkZWxldGVzIGEgZGF0YWJhc2UgZmlsZSwKKyAgICAv
LyBzaW5jZSBkZWxldGluZyB0aGUgZmlsZSBudWtlcyB0aGUgUE9TSVggZmlsZSBsb2NrcyB3aGlj
aCB3b3VsZCBwb3RlbnRpYWxseSBjYXVzZSBTYWZhcmkKKyAgICAvLyB0byBjb3JydXB0IHRoZSBu
ZXcgZGIgaWYgaXQncyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kLgorICAgIHN0YXRpYyBib29s
IHRydW5jYXRlRGF0YWJhc2VGaWxlKHNxbGl0ZTMqIGRhdGFiYXNlKTsKKyNlbmRpZgorICAgIAog
ICAgIC8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGRhdGFiYXNlIGZpbGUuCiAgICAgLy8KICAg
ICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZVRyYW5zYWN0aW9uLmNwcAppbmRleCA2ZjkwZWFjMDg5NGU1ZmMzMTFk
YmEzZjA0NzUyZDFjZTJiOTM4YjYxLi5kMTVjZWQzYWUwZmJkZTRhOWFkNDhiNTAzOWE0ZjA5YjNm
MDU3YWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJh
bnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVUcmFu
c2FjdGlvbi5jcHAKQEAgLTI4LDYgKzI4LDEwIEBACiAKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFz
ZS5oIgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlVHJhY2tl
ci5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1FMaXRlVHJhbnNhY3Rpb246
OlNRTGl0ZVRyYW5zYWN0aW9uKFNRTGl0ZURhdGFiYXNlJiBkYiwgYm9vbCByZWFkT25seSkKQEAg
LTU0LDExICs1OCwxOCBAQCB2b2lkIFNRTGl0ZVRyYW5zYWN0aW9uOjpiZWdpbigpCiAgICAgICAg
IC8vIGFueSBzdGF0ZW1lbnRzLiBJZiB0aGF0IGhhcHBlbnMsIHRoaXMgdHJhbnNhY3Rpb24gd2ls
bCBmYWlsLgogICAgICAgICAvLyBodHRwOi8vd3d3LnNxbGl0ZS5vcmcvbGFuZ190cmFuc2FjdGlv
bi5odG1sCiAgICAgICAgIC8vIGh0dHA6Ly93d3cuc3FsaXRlLm9yZy9sb2NraW5ndjMuaHRtbCNs
b2NraW5nCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBTUUxpdGVEYXRhYmFzZVRyYWNrZXI6
OmluY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KCk7CisjZW5kaWYKICAgICAgICAg
aWYgKG1fcmVhZE9ubHkpCiAgICAgICAgICAgICBtX2luUHJvZ3Jlc3MgPSBtX2RiLmV4ZWN1dGVD
b21tYW5kKCJCRUdJTiIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2luUHJvZ3Jlc3Mg
PSBtX2RiLmV4ZWN1dGVDb21tYW5kKCJCRUdJTiBJTU1FRElBVEUiKTsKICAgICAgICAgbV9kYi5t
X3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IG1faW5Qcm9ncmVzczsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgIGlmICghbV9pblByb2dyZXNzKQorICAgICAgICAgICAgU1FMaXRlRGF0YWJhc2VU
cmFja2VyOjpkZWNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOworI2VuZGlmCiAg
ICAgfQogfQogCkBAIC02OCw2ICs3OSwxMCBAQCB2b2lkIFNRTGl0ZVRyYW5zYWN0aW9uOjpjb21t
aXQoKQogICAgICAgICBBU1NFUlQobV9kYi5tX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyk7CiAgICAg
ICAgIG1faW5Qcm9ncmVzcyA9ICFtX2RiLmV4ZWN1dGVDb21tYW5kKCJDT01NSVQiKTsKICAgICAg
ICAgbV9kYi5tX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IG1faW5Qcm9ncmVzczsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgICAgIGlmICghbV9pblByb2dyZXNzKQorICAgICAgICAgICAgU1FMaXRl
RGF0YWJhc2VUcmFja2VyOjpkZWNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOwor
I2VuZGlmCiAgICAgfQogfQogCkBAIC04Miw2ICs5Nyw5IEBAIHZvaWQgU1FMaXRlVHJhbnNhY3Rp
b246OnJvbGxiYWNrKCkKICAgICAgICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiUk9MTEJBQ0siKTsK
ICAgICAgICAgbV9pblByb2dyZXNzID0gZmFsc2U7CiAgICAgICAgIG1fZGIubV90cmFuc2FjdGlv
bkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIFNRTGl0ZURh
dGFiYXNlVHJhY2tlcjo6ZGVjcmVtZW50VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnQoKTsKKyNl
bmRpZgogICAgIH0KIH0KIApAQCAtOTAsNiArMTA4LDkgQEAgdm9pZCBTUUxpdGVUcmFuc2FjdGlv
bjo6c3RvcCgpCiAgICAgaWYgKG1faW5Qcm9ncmVzcykgewogICAgICAgICBtX2luUHJvZ3Jlc3Mg
PSBmYWxzZTsKICAgICAgICAgbV9kYi5tX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOwor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpkZWNyZW1l
bnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOworI2VuZGlmCiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJh
Y2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURhdGFiYXNl
VHJhY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmY2MjJmNGE1ZDA0YjlmYTQwYjViNmE1ZWRkOGE3ZjJl
MjhiMTJjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9p
b3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oIgorCisjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIFNRTGl0ZURhdGFiYXNlVHJhY2tlciB7CisKK3N0YXRpYyBTUUxpdGVEYXRhYmFz
ZVRyYWNrZXJDbGllbnQqIHNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50ID0gMDsK
K3N0YXRpYyB1bnNpZ25lZCBzX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXIgPSAwOworCitz
dGF0aWMgTXV0ZXgmIHRyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8TXV0ZXg+IHRpcE11dGV4OworICAgIHJldHVybiB0aXBNdXRleDsKK30K
Kwordm9pZCBzZXRDbGllbnQoU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KiBjbGllbnQpCit7
CisgICAgQVNTRVJUKGNsaWVudCk7CisgICAgQVNTRVJUKCFzX3N0YXRpY1NRTGl0ZURhdGFiYXNl
VHJhY2tlckNsaWVudCB8fCBzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCA9PSBj
bGllbnQpOworICAgIHNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50ID0gY2xpZW50
OworfQorCit2b2lkIGluY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KCkKK3sKKyAg
ICBpZiAoIXNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KQorICAgICAgICByZXR1
cm47CisgICAgTXV0ZXhMb2NrZXIgbG9jayh0cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCgpKTsK
KworICAgIHNfdHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRlcisrOworICAgIGlmIChzX3RyYW5z
YWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXIgPT0gMSkKKyAgICAgICAgc19zdGF0aWNTUUxpdGVEYXRh
YmFzZVRyYWNrZXJDbGllbnQtPndpbGxCZWdpbkZpcnN0VHJhbnNhY3Rpb24oKTsKK30KKwordm9p
ZCBkZWNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpCit7CisgICAgaWYgKCFzX3N0
YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIE11
dGV4TG9ja2VyIGxvY2sodHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgoKSk7CisKKyAgICBBU1NF
UlQoc190cmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudGVyKTsKKyAgICBzX3RyYW5zYWN0aW9uSW5Q
cm9ncmVzc0NvdW50ZXItLTsKKworICAgIGlmICghc190cmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3Vu
dGVyKQorICAgICAgICBzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC0+ZGlkRmlu
aXNoTGFzdFRyYW5zYWN0aW9uKCk7Cit9CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECitib29sIGhh
c1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpCit7CisgICAgcmV0dXJuICFzX3N0YXRpY1NRTGl0ZURh
dGFiYXNlVHJhY2tlckNsaWVudCB8fCBzX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXIgPiAw
OworfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKworfSAvLyBuYW1lc3BhY2UgU1FMaXRl
RGF0YWJhc2VUcmFja2VyCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9pb3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjg2MWM2NDYzM2U2Mzg0Mzk0MDFiYWZkM2U4YzE0MTU5NWRjYmRkMGYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURhdGFi
YXNlVHJhY2tlci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNRTGl0ZURhdGFiYXNlVHJhY2tlcl9o
CisjZGVmaW5lIFNRTGl0ZURhdGFiYXNlVHJhY2tlcl9oCisKKyNpbmNsdWRlICJTUUxpdGVEYXRh
YmFzZVRyYWNrZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgU1FMaXRlRGF0YWJhc2VUcmFja2VyIHsKKwor
dm9pZCBkZWNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOwordm9pZCBpbmNyZW1l
bnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOworCit2b2lkIHNldENsaWVudChTUUxpdGVE
YXRhYmFzZVRyYWNrZXJDbGllbnQqKTsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKK2Jvb2wgaGFz
VHJhbnNhY3Rpb25JblByb2dyZXNzKCk7CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorCit9
OworCitjbGFzcyBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB7CitwdWJs
aWM6CisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIoKQorICAgIHsK
KyAgICAgICAgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjppbmNyZW1lbnRUcmFuc2FjdGlvbkluUHJv
Z3Jlc3NDb3VudCgpOworICAgIH0KKyAgICB+U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0
b0NvdW50ZXIoKQorICAgIHsKKyAgICAgICAgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpkZWNyZW1l
bnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNRTGl0ZURhdGFiYXNlVHJhY2tlcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tl
ckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRhYmFz
ZVRyYWNrZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MWYzZDJiOWJmYjc4MmZhZjgzNmYyOWVlNGU2
M2U5ZGE1NWMzN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3FsL2lvcy9TUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaApAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTUUxp
dGVEYXRhYmFzZVRyYWNrZXJDbGllbnRfaAorI2RlZmluZSBTUUxpdGVEYXRhYmFzZVRyYWNrZXJD
bGllbnRfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNRTGl0ZURhdGFiYXNlVHJh
Y2tlckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U1FMaXRlRGF0YWJhc2VUcmFja2Vy
Q2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlZ2luRmlyc3RUcmFuc2FjdGlv
bigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTGFzdFRyYW5zYWN0aW9uKCkgPSAw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU1FMaXRlRGF0YWJh
c2VUcmFja2VyQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvUGxhdGZvcm1Mb2NhbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0
Zm9ybUxvY2FsZS5jcHAKaW5kZXggZDczNmNjYTc0ZWE0OWE5N2U0MjIzMGU1N2QxMmEwMDBlODQ1
ZDhjOS4uMzBmN2FiMjA5YWM1ZjdiZmU2ZmIzOWYxNTI1ZjkzMzVjZjgxNzljMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAKQEAgLTMyOCw2
ICszMjgsNyBAQCBTdHJpbmcgTG9jYWxlOjpjb252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcihjb25z
dCBTdHJpbmcmIGxvY2FsaXplZCkKIAogI2lmIEVOQUJMRShEQVRFX0FORF9USU1FX0lOUFVUX1RZ
UEVTKQogCisjaWYgIVBMQVRGT1JNKElPUykKIFN0cmluZyBMb2NhbGU6OmZvcm1hdERhdGVUaW1l
KGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlLCBGb3JtYXRUeXBlIGZvcm1hdFR5cGUpCiB7CiAg
ICAgaWYgKGRhdGUudHlwZSgpID09IERhdGVDb21wb25lbnRzOjpJbnZhbGlkKQpAQCAtMzYzLDYg
KzM2NCw4IEBAIFN0cmluZyBMb2NhbGU6OmZvcm1hdERhdGVUaW1lKGNvbnN0IERhdGVDb21wb25l
bnRzJiBkYXRlLCBGb3JtYXRUeXBlIGZvcm1hdFR5cGUpCiAgICAgfQogICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKwogI2VuZGlmCiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2Nh
bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAppbmRl
eCAxZTk3NjkwNmJlODY4NmI4OTVjNmUzMzI5MzI1NTZlMTU3ZTIwNTZhLi45ZmM2MzljZWE2MGE0
OTM3NzYzZmNiNDM4NzA3NjRkZjZkM2IwZGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5oCkBAIC0zMyw2ICszMywxMCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShJT1MpCitjbGFzcyBGb250OworI2VuZGlmCisKIGNs
YXNzIExvY2FsZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9jYWxlKTsKIApAQCAtMTEz
LDcgKzExNywxNyBAQCBwdWJsaWM6CiAgICAgLy8gZGlzcGxheSB0byB0aGUgdXNlci4gSWYgYW4g
aW1wbGVtZW50YXRpb24gZG9lc24ndCBzdXBwb3J0CiAgICAgLy8gbG9jYWxpemVkIGRhdGVzIHRo
ZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4KICAgICAvLyBGb3JtYXRU
eXBlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgaWYgeW91IHdhbnQgdGhlIHNob3J0IGZvcm1hdC4g
CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBTdHJpbmcgZm9ybWF0RGF0ZVRpbWUoY29uc3QgRGF0
ZUNvbXBvbmVudHMmLCBGb3JtYXRUeXBlID0gRm9ybWF0VHlwZVVuc3BlY2lmaWVkKTsKKyNlbHNl
CisgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0RGF0ZVRpbWUoY29uc3QgRGF0ZUNvbXBvbmVudHMm
LCBGb3JtYXRUeXBlID0gRm9ybWF0VHlwZVVuc3BlY2lmaWVkKSA9IDA7CisjZW5kaWYgLy8gIVBM
QVRGT1JNKElPUykKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBU
aGlzIGNvZGUgc2hvdWxkIGJlIG1lcmdlZCB3aXRoIE9wZW4gU291cmNlIGluIGEgd2F5IHRoYXQg
aXMgZnV0dXJlIGNvbXBhdGlibGUuCisgICAgLy8gTWF4aW11bSB3aWR0aCBmb3IgYSBmb3JtYXR0
ZWQgZGF0ZSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBmb250LgorICAgIHZpcnR1YWwgZmxvYXQg
bWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUsIGNvbnN0IEZvbnQm
KSA9IDA7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgfkxvY2FsZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAppbmRleCA1
ZTE0ZTNmMDhhYWVmMzNmNWQzM2U3YTJjMzc2YTExMWYxYTg5YjZjLi43ZTBlMmQ4Mzc0OTE1MmMz
YzdiZDBkZjE3ZTljNWIzNjAwOTVjZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcApAQCAtNTcxLDYgKzU3MSw3IEBA
IGJvb2wgaXNXb3JkVGV4dEJyZWFrKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvcikKICAgICBy
ZXR1cm4gcnVsZVN0YXR1cyAhPSBVQlJLX1dPUkRfTk9ORTsKIH0KIAorI2lmICFQTEFURk9STShJ
T1MpCiBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHNldFVwSXRlcmF0b3JXaXRoUnVsZXMoYm9v
bCYgY3JlYXRlZEl0ZXJhdG9yLCBUZXh0QnJlYWtJdGVyYXRvciomIGl0ZXJhdG9yLAogICAgIGNv
bnN0IGNoYXIqIGJyZWFrUnVsZXMsIGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCiB7
CkBAIC01OTUsOSArNTk2LDExIEBAIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc2V0VXBJdGVy
YXRvcldpdGhSdWxlcyhib29sJiBjcmVhdGVkSXRlcmF0b3IsIFRleHRCcmVhCiAKICAgICByZXR1
cm4gaXRlcmF0b3I7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogVGV4dEJyZWFrSXRl
cmF0b3IqIGN1cnNvck1vdmVtZW50SXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxl
bmd0aCkKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIFRoaXMgcnVsZSBzZXQgaXMgYmFz
ZWQgb24gY2hhcmFjdGVyLWJyZWFrIGl0ZXJhdG9yIHJ1bGVzIG9mIElDVSA0LjAKICAgICAvLyA8
aHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1L2ljdS90YWdzL3JlbGVhc2Ut
NC0wL3NvdXJjZS9kYXRhL2Jya2l0ci9jaGFyLnR4dD4uCiAgICAgLy8gVGhlIG1ham9yIGRpZmZl
cmVuY2VzIGZyb20gdGhlIG9yaWdpbmFsIG9uZXMgYXJlIGxpc3RlZCBiZWxvdzoKQEAgLTY4Myw2
ICs2ODYsMzAgQEAgVGV4dEJyZWFrSXRlcmF0b3IqIGN1cnNvck1vdmVtZW50SXRlcmF0b3IoY29u
c3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVkQ3Vy
c29yTW92ZW1lbnRJdGVyYXRvciA9IGZhbHNlOwogICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRv
ciogc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRvcjsKICAgICByZXR1cm4gc2V0VXBJdGVyYXRv
cldpdGhSdWxlcyhjcmVhdGVkQ3Vyc29yTW92ZW1lbnRJdGVyYXRvciwgc3RhdGljQ3Vyc29yTW92
ZW1lbnRJdGVyYXRvciwga1J1bGVzLCBzdHJpbmcsIGxlbmd0aCk7CisjZWxzZSAvLyBQTEFURk9S
TShJT1MpCisgICAgLy8gVXNlIHRoZSBzcGVjaWFsIFRoYWkgY2hhcmFjdGVyIGJyZWFrIGl0ZXJh
dG9yIGZvciBhbGwgbG9jYWxlcworICAgIHN0YXRpYyBib29sIGNyZWF0ZWRDdXJzb3JCcmVha0l0
ZXJhdG9yOworICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljQ3Vyc29yQnJlYWtJ
dGVyYXRvcjsKKworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGlmICghY3JlYXRlZEN1cnNvckJyZWFrSXRlcmF0b3IpIHsKKyAgICAgICAgVUVycm9yQ29k
ZSBvcGVuU3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICBzdGF0aWNDdXJzb3JCcmVha0l0
ZXJhdG9yID0gcmVpbnRlcnByZXRfY2FzdDxUZXh0QnJlYWtJdGVyYXRvcio+KHVicmtfb3BlbihV
QlJLX0NIQVJBQ1RFUiwgInRoIiwgMCwgMCwgJm9wZW5TdGF0dXMpKTsKKyAgICAgICAgY3JlYXRl
ZEN1cnNvckJyZWFrSXRlcmF0b3IgPSB0cnVlOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KFVfU1VDQ0VTUyhvcGVuU3RhdHVzKSwgIklDVSBjb3VsZCBub3Qgb3BlbiBhIGJyZWFrIGl0ZXJh
dG9yOiAlcyAoJWQpIiwgdV9lcnJvck5hbWUob3BlblN0YXR1cyksIG9wZW5TdGF0dXMpOworICAg
IH0KKyAgICBpZiAoIXN0YXRpY0N1cnNvckJyZWFrSXRlcmF0b3IpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgVUVycm9yQ29kZSBzZXRUZXh0U3RhdHVzID0gVV9aRVJPX0VSUk9SOwor
ICAgIHVicmtfc2V0VGV4dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oc3RhdGlj
Q3Vyc29yQnJlYWtJdGVyYXRvciksIHN0cmluZywgbGVuZ3RoLCAmc2V0VGV4dFN0YXR1cyk7Cisg
ICAgaWYgKFVfRkFJTFVSRShzZXRUZXh0U3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gc3RhdGljQ3Vyc29yQnJlYWtJdGVyYXRvcjsKKyNlbmRpZiAvLyAhUExB
VEZPUk0oSU9TKQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY0lDVS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY0lDVS5jcHAKaW5kZXggYjRiYjM5MDdmNjE0OGMzNDkzZjZhMTdmYWY5ZTgyMDA3ZTAzNjAx
NS4uY2M2ZWFhMjFmMDRhYWQ4YTQ5NjU2MGE2NTg1NjYyNzZhNGU5ZWI1MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcApAQCAtNDQsNiArNDQsMTgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25zdCBzaXplX3QgQ29udmVyc2lvbkJ1ZmZlclNp
emUgPSAxNjM4NDsKIAorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRpYyBjb25zdCBjaGFyKiB0ZXh0
Q29kZWNNYWNBbGlhc2VzW10gPSB7CisgICAgIm1hY29zLTdfMy0xMC4yIiwgLy8geG1hY2N5cmls
bGljLCBtYWNjeXJpbGxpYworICAgICJtYWNvcy02XzItMTAuNCIsIC8vIHhtYWNncmVlaworICAg
ICJtYWNvcy02LTEwLjIiLCAgIC8vIG1hY2dyZWVrCisgICAgIm1hY29zLTI5LTEwLjIiLCAgLy8g
eG1hY2NlbnRyYWxldXJyb21hbiwgbWFjY2VudHJhbGV1cnJvbWFuCisgICAgIm1hY29zLTM1LTEw
LjIiLCAgLy8geG1hY3R1cmtpc2gsIG1hY3R1cmtpc2gKKyAgICAic29mdGJhbmstc2ppcyIsICAv
LyBzb2Z0YmFua3NqaXMKKyAgICBudWxscHRyCit9OworI2VuZGlmCisKIElDVUNvbnZlcnRlcldy
YXBwZXI6On5JQ1VDb252ZXJ0ZXJXcmFwcGVyKCkKIHsKICAgICBpZiAoY29udmVydGVyKQpAQCAt
MTgwLDYgKzE5MiwyOSBAQCB2b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFbmNvZGluZ05hbWVz
KEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiAgICAgcmVnaXN0cmFyKCJJU084ODU5
LTE1IiwgIklTTy04ODU5LTE1Iik7CiAgICAgLy8gTm90IHJlZ2lzdGVyaW5nIElTTzg4NTktMTYs
IGJlY2F1c2UgRmlyZWZveCAoYXMgb2YgdmVyc2lvbiAzLjYuNikgZG9lc24ndCBrbm93IHRoaXMg
cGFydGljdWxhciBhbGlhcywKICAgICAvLyBhbmQgYmVjYXVzZSBvbGRlciB2ZXJzaW9ucyBvZiBJ
Q1UgZG9uJ3Qgc3VwcG9ydCBJU08tODg1OS0xNiBlbmNvZGluZyBhdCBhbGwuCisKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgLy8gQS5CLiBhZGRpbmcgYSBmZXcgbW9yZSBNYWMgZW5jb2RpbmdzIG1p
c3NpbmcgJ2NhdXNlIHdlIGRvbid0IGhhdmUgVGV4dENvZGVjTWFjIHJpZ2h0IG5vdworICAgIC8v
IGx1Y2tpbHksIHRoZXkgYXJlIHN1cHBvcnRlZCBpbiBJQ1UsIGp1c3QgbmVlZCB0byBhbGlhcyB0
aGVtLgorICAgIC8vIHRoaXMgaGFuZGxlcyBlbmNvZGluZ3MgdGhhdCBPUyBYIHVzZXMgVEVDIChU
ZXh0Q29kZWNNYWMpCisgICAgLy8gPGh0dHA6Ly9wdWJsaWIuYm91bGRlci5pYm0uY29tL2luZm9j
ZW50ZXIvd21iaGVscC92NnIwbTAvaW5kZXguanNwP3RvcGljPS9jb20uaWJtLmV0b29scy5tZnQu
ZWIuZG9jL2FjMDA0MDhfLmh0bT4KKyAgICBpbnQzMl90IGkgPSAwOworICAgIGZvciAoY29uc3Qg
Y2hhciogbWFjQWxpYXMgPSB0ZXh0Q29kZWNNYWNBbGlhc2VzW2ldOyBtYWNBbGlhczsgbWFjQWxp
YXMgPSB0ZXh0Q29kZWNNYWNBbGlhc2VzWysraV0pIHsKKyAgICAgICAgcmVnaXN0cmFyKG1hY0Fs
aWFzLCBtYWNBbGlhcyk7CisKKyAgICAgICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJP
UjsKKyAgICAgICAgdWludDE2X3QgbnVtQWxpYXNlcyA9IHVjbnZfY291bnRBbGlhc2VzKG1hY0Fs
aWFzLCAmZXJyb3IpOworICAgICAgICBBU1NFUlQoVV9TVUNDRVNTKGVycm9yKSk7CisgICAgICAg
IGlmIChVX1NVQ0NFU1MoZXJyb3IpKQorICAgICAgICAgICAgZm9yICh1aW50MTZfdCBqID0gMDsg
aiA8IG51bUFsaWFzZXM7ICsraikgeworICAgICAgICAgICAgICAgIGVycm9yID0gVV9aRVJPX0VS
Uk9SOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFsaWFzID0gdWNudl9nZXRBbGlhcyht
YWNBbGlhcywgaiwgJmVycm9yKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoVV9TVUNDRVNTKGVy
cm9yKSk7CisgICAgICAgICAgICAgICAgaWYgKFVfU1VDQ0VTUyhlcnJvcikgJiYgc3RyY21wKGFs
aWFzLCBtYWNBbGlhcykpCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcywgbWFj
QWxpYXMpOworICAgICAgICAgICAgfQorICAgIH0KKyNlbmRpZgogfQogCiB2b2lkIFRleHRDb2Rl
Y0lDVTo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKQEAgLTIx
Nyw2ICsyNTIsMTMgQEAgdm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2Rl
Y1JlZ2lzdHJhciByZWdpc3RyYXIpCiAgICAgLy8gRklYTUU6IElzIHRoZXJlIGEgZ29vZCB3YXkg
dG8gZGV0ZXJtaW5lIHRoZSBtb3N0IHVwIHRvIGRhdGUgdmFyaWFudCBwcm9ncmFtbWF0aWNhbGx5
PwogICAgIHJlZ2lzdHJhcigid2luZG93cy04NzQiLCBjcmVhdGUsICJ3aW5kb3dzLTg3NC0yMDAw
Iik7CiAgICAgcmVnaXN0cmFyKCJ3aW5kb3dzLTk0OSIsIGNyZWF0ZSwgIndpbmRvd3MtOTQ5LTIw
MDAiKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBTZWUgY29tbWVudCBhYm92ZSBpbiBy
ZWdpc3RlckVuY29kaW5nTmFtZXMoKS4KKyAgICBpbnQzMl90IGkgPSAwOworICAgIGZvciAoY29u
c3QgY2hhciogYWxpYXMgPSB0ZXh0Q29kZWNNYWNBbGlhc2VzW2ldOyBhbGlhczsgYWxpYXMgPSB0
ZXh0Q29kZWNNYWNBbGlhc2VzWysraV0pCisgICAgICAgIHJlZ2lzdHJhcihhbGlhcywgY3JlYXRl
LCAwKTsKKyNlbmRpZgogfQogCiBUZXh0Q29kZWNJQ1U6OlRleHRDb2RlY0lDVShjb25zdCBjaGFy
KiBlbmNvZGluZywgY29uc3QgY2hhciogY2Fub25pY2FsQ29udmVydGVyTmFtZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAK
aW5kZXggYTU3ODJjZmQ1Zjg0ZjgzYjhiOTM5MTYyMDFlYjRmMDk2NTY3MDE2My4uYjFmZWUzNTAz
NWY5MjIzZDIzYWVhMDY4OWVhMjA1ODQ2ZmU2ZTlhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKQEAgLTQyLDcgKzQy
LDcgQEAKICNpZiBVU0UoSUNVX1VOSUNPREUpCiAjaW5jbHVkZSAiVGV4dENvZGVjSUNVLmgiCiAj
ZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0o
SU9TKQogI2luY2x1ZGUgIlRleHRDb2RlY01hYy5oIgogI2VuZGlmCiAjaWYgT1MoV0lORE9XUykg
JiYgVVNFKFdDSEFSX1VOSUNPREUpCkBAIC0yODQsNyArMjg0LDcgQEAgc3RhdGljIHZvaWQgZXh0
ZW5kVGV4dENvZGVjTWFwcygpCiAgICAgVGV4dENvZGVjSUNVOjpyZWdpc3RlckNvZGVjcyhhZGRU
b1RleHRDb2RlY01hcCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9S
TShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgVGV4dENvZGVjTWFjOjpyZWdpc3RlckVuY29k
aW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNNYWM6OnJl
Z2lzdGVyQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAKaW5kZXggNWFjNzk0YTMx
ODNjN2M2ZmI2ZDQ5Y2U5NWQ4OGI2NmU3ZmNkOTY0MS4uMGRlZGE4N2ZjYzdhYmQ5Nzk5YjZiNGFi
ODFkMDI1ZGJhZmFlNmJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9jZi9IeXBoZW5hdGlvbkNGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L2NmL0h5cGhlbmF0aW9uQ0YuY3BwCkBAIC02MCw3ICs2MCwxNyBAQCBzdGF0aWMgQXRvbWljU3Ry
aW5nS2V5ZWRNUlVDYWNoZTxSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+PiYgY2ZMb2NhbGVDYWNoZSgp
CiAKIGJvb2wgY2FuSHlwaGVuYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmll
cikKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHJldHVybiBjZkxvY2FsZUNhY2hlKCkuZ2V0
KGxvY2FsZUlkZW50aWZpZXIpOworI2Vsc2UKKyNpZiAhKGRlZmluZWQoV1RGX0FSTV9BUkNIX1ZF
UlNJT04pICYmIFdURl9BUk1fQVJDSF9WRVJTSU9OID09IDYpCisgICAgcmV0dXJuIGNmTG9jYWxl
Q2FjaGUoKS5nZXQobG9jYWxlSWRlbnRpZmllcik7CisjZWxzZQorICAgIC8vIEh5cGhlbmF0aW9u
IGlzIG5vdCBhdmFpbGFibGUgb24gZGV2aWNlcyB3aXRoIEFSTXY2IHByb2Nlc3NvcnMuIFNlZSA8
cmRhcjovLzgzNTI1NzA+LgorICAgIFVOVVNFRF9QQVJBTShsb2NhbGVJZGVudGlmaWVyKTsKKyAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiB9CiAKIHNp
emVfdCBsYXN0SHlwaGVuTG9jYXRpb24oY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgsIHNpemVfdCBiZWZvcmVJbmRleCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVu
dGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9j
YWxpemVkRGF0ZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2Nh
bGl6ZWREYXRlQ2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDczMGZiZTMxYmU0NTU1MTY1NmY2Y2U3NDEw
ZmI5NWZhODMwMTkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTG9jYWxpemVkRGF0
ZUNhY2hlX2gKKyNkZWZpbmUgTG9jYWxpemVkRGF0ZUNhY2hlX2gKKworI2luY2x1ZGUgIkRhdGVD
b21wb25lbnRzLmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExvY2FsaXplZERhdGVDYWNoZSB7
CitwdWJsaWM6CisgICAgTlNEYXRlRm9ybWF0dGVyICpmb3JtYXR0ZXJGb3JEYXRlVHlwZShEYXRl
Q29tcG9uZW50czo6VHlwZSk7CisgICAgZmxvYXQgbWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0
ZUNvbXBvbmVudHM6OlR5cGUsIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIGxvY2FsZUNoYW5nZWQo
KTsKKworcHJpdmF0ZToKKyAgICBMb2NhbGl6ZWREYXRlQ2FjaGUoKTsKKyAgICB+TG9jYWxpemVk
RGF0ZUNhY2hlKCk7CisKKyAgICBOU0RhdGVGb3JtYXR0ZXIgKmNyZWF0ZUZvcm1hdHRlckZvclR5
cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUpOworICAgIGZsb2F0IGNhbGN1bGF0ZU1heGltdW1XaWR0
aChEYXRlQ29tcG9uZW50czo6VHlwZSwgY29uc3QgRm9udCYpOworCisgICAgLy8gVXNpbmcgaW50
IGluc3RlYWQgb2YgRGF0ZUNvbXBvbmVudHM6OlR5cGUgZm9yIHRoZSBrZXkgYmVjYXVzZSB0aGUg
ZW51bQorICAgIC8vIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IGhhc2ggYW5kIGhhc2ggdHJhaXRz
LiBVc2FnZSBvZiB0aGUgbWFwcworICAgIC8vIGNhc3RzIHRoZSBEYXRlQ29tcG9uZW50czo6VHlw
ZSBpbnRvIGFuIGludCBhcyB0aGUga2V5LgorICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJldGFp
blB0cjxOU0RhdGVGb3JtYXR0ZXI+PiBEYXRlVHlwZUZvcm1hdHRlck1hcDsKKyAgICB0eXBlZGVm
IEhhc2hNYXA8aW50LCBmbG9hdD4gRGF0ZVR5cGVNYXhXaWR0aE1hcDsKKyAgICBEYXRlVHlwZUZv
cm1hdHRlck1hcCBtX2Zvcm1hdHRlck1hcDsKKyAgICBEYXRlVHlwZU1heFdpZHRoTWFwIG1fbWF4
V2lkdGhNYXA7CisgICAgRm9udCBtX2ZvbnQ7CisKKyAgICBmcmllbmQgTG9jYWxpemVkRGF0ZUNh
Y2hlJiBsb2NhbGl6ZWREYXRlQ2FjaGUoKTsKKyAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8TG9j
YWxpemVkRGF0ZUNhY2hlPjsKK307CisKKy8vIFNpbmdsZXRvbi4KK0xvY2FsaXplZERhdGVDYWNo
ZSYgbG9jYWxpemVkRGF0ZUNhY2hlKCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIExvY2FsaXplZERhdGVDYWNoZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODcxOTFh
MmU0NTM5MjMzYWIxM2RjNjYxNzhlNThhMWI4YzhjNjM5YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5tbQpAQCAt
MCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTG9jYWxpemVkRGF0ZUNhY2hlLmgiCisK
KyNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIlRleHRSdW4uaCIKKyNpbXBvcnQgPG1hdGguaD4K
KyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+
CisjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9DRk5vdGlmaWNhdGlvbkNlbnRlci5oPgorCit1c2lu
ZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xvY2FsaXplZERhdGVD
YWNoZSYgbG9jYWxpemVkRGF0ZUNhY2hlKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
TG9jYWxpemVkRGF0ZUNhY2hlPiBjYWNoZTsKKyAgICByZXR1cm4gY2FjaGU7Cit9CisKK3N0YXRp
YyB2b2lkIF9sb2NhbGVDaGFuZ2VkKENGTm90aWZpY2F0aW9uQ2VudGVyUmVmLCB2b2lkKiwgQ0ZT
dHJpbmdSZWYsIGNvbnN0IHZvaWQqLCBDRkRpY3Rpb25hcnlSZWYpCit7CisgICAgbG9jYWxpemVk
RGF0ZUNhY2hlKCkubG9jYWxlQ2hhbmdlZCgpOworfQorCitMb2NhbGl6ZWREYXRlQ2FjaGU6Okxv
Y2FsaXplZERhdGVDYWNoZSgpCisgICAgOiBtX2ZvbnQoRm9udCgpKQoreworICAgIC8vIExpc3Rl
biB0byBDRiBOb3RpZmljYXRpb25zIGZvciBsb2NhbGUgY2hhbmdlLCBhbmQgY2xlYXIgdGhlIGNh
Y2hlIHdoZW4gaXQgZG9lcy4KKyAgICBDRk5vdGlmaWNhdGlvbkNlbnRlckFkZE9ic2VydmVyKENG
Tm90aWZpY2F0aW9uQ2VudGVyR2V0TG9jYWxDZW50ZXIoKSwgKHZvaWQqKXRoaXMsIF9sb2NhbGVD
aGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NGTG9jYWxlQ3Vy
cmVudExvY2FsZURpZENoYW5nZU5vdGlmaWNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5VTEwsIENGTm90aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2aW9yRGVsaXZl
ckltbWVkaWF0ZWx5KTsKK30KKworTG9jYWxpemVkRGF0ZUNhY2hlOjp+TG9jYWxpemVkRGF0ZUNh
Y2hlKCkKK3sKKyAgICAvLyBOT1RFOiBTaW5nbGV0b24gZG9lcyBub3QgZXhwZWN0IHRvIGJlIGRl
Y29uc3RydWN0ZWQuCisgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJSZW1vdmVPYnNlcnZlcihDRk5v
dGlmaWNhdGlvbkNlbnRlckdldExvY2FsQ2VudGVyKCksICh2b2lkKil0aGlzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NGTG9jYWxlQ3VycmVudExvY2FsZURpZENo
YW5nZU5vdGlmaWNhdGlvbiwgTlVMTCk7Cit9CisKK3ZvaWQgTG9jYWxpemVkRGF0ZUNhY2hlOjps
b2NhbGVDaGFuZ2VkKCkKK3sKKyAgICBtX21heFdpZHRoTWFwLmNsZWFyKCk7CisgICAgbV9mb3Jt
YXR0ZXJNYXAuY2xlYXIoKTsKK30KKworTlNEYXRlRm9ybWF0dGVyICpMb2NhbGl6ZWREYXRlQ2Fj
aGU6OmZvcm1hdHRlckZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUpCit7Cisg
ICAgaW50IGtleSA9IHN0YXRpY19jYXN0PGludD4odHlwZSk7CisgICAgaWYgKG1fZm9ybWF0dGVy
TWFwLmNvbnRhaW5zKGtleSkpCisgICAgICAgIHJldHVybiBtX2Zvcm1hdHRlck1hcC5nZXQoa2V5
KS5nZXQoKTsKKworICAgIE5TRGF0ZUZvcm1hdHRlciAqZGF0ZUZvcm1hdHRlciA9IFtjcmVhdGVG
b3JtYXR0ZXJGb3JUeXBlKHR5cGUpIGF1dG9yZWxlYXNlXTsKKyAgICBtX2Zvcm1hdHRlck1hcC5z
ZXQoa2V5LCBkYXRlRm9ybWF0dGVyKTsKKyAgICByZXR1cm4gZGF0ZUZvcm1hdHRlcjsKK30KKwor
ZmxvYXQgTG9jYWxpemVkRGF0ZUNhY2hlOjptYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29t
cG9uZW50czo6VHlwZSB0eXBlLCBjb25zdCBGb250JiBmb250KQoreworICAgIGludCBrZXkgPSBz
dGF0aWNfY2FzdDxpbnQ+KHR5cGUpOworICAgIGlmIChtX2ZvbnQgPT0gZm9udCkgeworICAgICAg
ICBpZiAobV9tYXhXaWR0aE1hcC5jb250YWlucyhrZXkpKQorICAgICAgICAgICAgcmV0dXJuIG1f
bWF4V2lkdGhNYXAuZ2V0KGtleSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9mb250ID0gRm9u
dChmb250KTsKKyAgICAgICAgbV9tYXhXaWR0aE1hcC5jbGVhcigpOworICAgIH0KKworICAgIGZs
b2F0IGNhbGN1bGF0ZWRNYXhpbXVtID0gY2FsY3VsYXRlTWF4aW11bVdpZHRoKHR5cGUsIGZvbnQp
OworICAgIG1fbWF4V2lkdGhNYXAuc2V0KGtleSwgY2FsY3VsYXRlZE1heGltdW0pOworICAgIHJl
dHVybiBjYWxjdWxhdGVkTWF4aW11bTsKK30KKworTlNEYXRlRm9ybWF0dGVyICpMb2NhbGl6ZWRE
YXRlQ2FjaGU6OmNyZWF0ZUZvcm1hdHRlckZvclR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUgdHlw
ZSkKK3sKKyAgICBOU0RhdGVGb3JtYXR0ZXIgKmRhdGVGb3JtYXR0ZXIgPSBbW05TRGF0ZUZvcm1h
dHRlciBhbGxvY10gaW5pdF07CisgICAgTlNMb2NhbGUgKmN1cnJlbnRMb2NhbGUgPSBbTlNMb2Nh
bGUgY3VycmVudExvY2FsZV07CisgICAgW2RhdGVGb3JtYXR0ZXIgc2V0TG9jYWxlOmN1cnJlbnRM
b2NhbGVdOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6
SW52YWxpZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OkRhdGU6CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNl
dFRpbWVab25lOltOU1RpbWVab25lIHRpbWVab25lRm9yU2Vjb25kc0Zyb21HTVQ6MF1dOworICAg
ICAgICBbZGF0ZUZvcm1hdHRlciBzZXRUaW1lU3R5bGU6TlNEYXRlRm9ybWF0dGVyTm9TdHlsZV07
CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldERhdGVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJNZWRp
dW1TdHlsZV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OkRhdGVU
aW1lOgorICAgICAgICBbZGF0ZUZvcm1hdHRlciBzZXRUaW1lWm9uZTpbTlNUaW1lWm9uZSBsb2Nh
bFRpbWVab25lXV07CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldFRpbWVTdHlsZTpOU0RhdGVG
b3JtYXR0ZXJTaG9ydFN0eWxlXTsKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0RGF0ZVN0eWxl
Ok5TRGF0ZUZvcm1hdHRlck1lZGl1bVN0eWxlXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBE
YXRlQ29tcG9uZW50czo6RGF0ZVRpbWVMb2NhbDoKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0
VGltZVpvbmU6W05TVGltZVpvbmUgdGltZVpvbmVGb3JTZWNvbmRzRnJvbUdNVDowXV07CisgICAg
ICAgIFtkYXRlRm9ybWF0dGVyIHNldFRpbWVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJTaG9ydFN0eWxl
XTsKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0RGF0ZVN0eWxlOk5TRGF0ZUZvcm1hdHRlck1l
ZGl1bVN0eWxlXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6TW9u
dGg6CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldFRpbWVab25lOltOU1RpbWVab25lIHRpbWVa
b25lRm9yU2Vjb25kc0Zyb21HTVQ6MF1dOworICAgICAgICBbZGF0ZUZvcm1hdHRlciBzZXREYXRl
Rm9ybWF0OltOU0RhdGVGb3JtYXR0ZXIgZGF0ZUZvcm1hdEZyb21UZW1wbGF0ZTpAIk1NTU15eXl5
IiBvcHRpb25zOjAgbG9jYWxlOmN1cnJlbnRMb2NhbGVdXTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBEYXRlQ29tcG9uZW50czo6VGltZToKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0VGlt
ZVpvbmU6W05TVGltZVpvbmUgdGltZVpvbmVGb3JTZWNvbmRzRnJvbUdNVDowXV07CisgICAgICAg
IFtkYXRlRm9ybWF0dGVyIHNldFRpbWVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlXTsK
KyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0RGF0ZVN0eWxlOk5TRGF0ZUZvcm1hdHRlck5vU3R5
bGVdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERhdGVDb21wb25lbnRzOjpXZWVrOgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIGRhdGVGb3JtYXR0ZXI7Cit9CisKKy8vIE5PVEU6IFRoaXMgZG9lcyBub3QgY2hlY2sg
Zm9yIHRoZSB3aWRlc3QgZGF5IG9mIHRoZSB3ZWVrLgorLy8gV2UgYXNzdW1lIG5vIGZvcm1hdHRl
ciBvcHRpb24gc2hvd3MgdGhhdCBpbmZvcm1hdGlvbi4KK2Zsb2F0IExvY2FsaXplZERhdGVDYWNo
ZTo6Y2FsY3VsYXRlTWF4aW11bVdpZHRoKERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUsIGNvbnN0
IEZvbnQmIGZvbnQpCit7CisgICAgZmxvYXQgbWF4aW11bVdpZHRoID0gMDsKKworICAgIC8vIEdl
dCB0aGUgZm9ybWF0dGVyIHdlIHdvdWxkIHVzZSwgY29weSBpdCBiZWNhdXNlIHdlIHdpbGwgZm9y
Y2UgaXRzIHRpbWUgem9uZSB0byBiZSBVVEMuCisgICAgTlNEYXRlRm9ybWF0dGVyICpkYXRlRm9y
bWF0dGVyID0gW1tmb3JtYXR0ZXJGb3JEYXRlVHlwZSh0eXBlKSBjb3B5XSBhdXRvcmVsZWFzZV07
CisgICAgW2RhdGVGb3JtYXR0ZXIgc2V0VGltZVpvbmU6W05TVGltZVpvbmUgdGltZVpvbmVGb3JT
ZWNvbmRzRnJvbUdNVDowXV07CisKKyAgICAvLyBTYW1wbGUgZGF0ZSB3aXRoIGEgNCBkaWdpdCB5
ZWFyIGFuZCAyIGRpZ2l0IGRheSwgaG91ciwgYW5kIG1pbnV0ZS4gRGlnaXRzIGFyZQorICAgIC8v
IHR5cGljYWxseSBhbGwgZXF1YWxseSB3aWRlLiBGb3JjZSBVVEMgdGltZXpvbmUgZm9yIHRoZSB0
ZXN0IGRhdGUgYmVsb3cgc28gdGhlCisgICAgLy8gZGF0ZSBkb2Vzbid0IGFkanVzdCBmb3IgdGhl
IGN1cnJlbnQgdGltZXpvbmUuIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IGRhdGUKKyAgICAvLyAoeC0y
Ny0yMDA3KSBhbmQgdGltZSAoMTA6NDUgUE0pLgorICAgIFJldGFpblB0cjxOU0NhbGVuZGFyPiBn
cmVnb3JpYW4gPSBhZG9wdE5TKFtbTlNDYWxlbmRhciBhbGxvY10gaW5pdFdpdGhDYWxlbmRhcklk
ZW50aWZpZXI6TlNDYWxlbmRhcklkZW50aWZpZXJHcmVnb3JpYW5dKTsKKyAgICBbZ3JlZ29yaWFu
LmdldCgpIHNldFRpbWVab25lOltOU1RpbWVab25lIHRpbWVab25lRm9yU2Vjb25kc0Zyb21HTVQ6
MF1dOworICAgIFJldGFpblB0cjxOU0RhdGVDb21wb25lbnRzPiBjb21wb25lbnRzID0gYWRvcHRO
UyhbW05TRGF0ZUNvbXBvbmVudHMgYWxsb2NdIGluaXRdKTsKKyAgICBbY29tcG9uZW50cy5nZXQo
KSBzZXREYXk6MjddOworICAgIFtjb21wb25lbnRzLmdldCgpIHNldFllYXI6MjAwN107CisgICAg
W2NvbXBvbmVudHMuZ2V0KCkgc2V0SG91cjoyMl07CisgICAgW2NvbXBvbmVudHMuZ2V0KCkgc2V0
TWludXRlOjQ1XTsKKworICAgIHN0YXRpYyBOU1VJbnRlZ2VyIG51bWJlck9mR3JlZ29yaWFuTW9u
dGhzID0gW1tkYXRlRm9ybWF0dGVyIG1vbnRoU3ltYm9sc10gY291bnRdOworICAgIEFTU0VSVChu
dW1iZXJPZkdyZWdvcmlhbk1vbnRocyA9PSAxMik7CisKKyAgICAvLyBGb3IgZWFjaCBtb250aCAo
aW4gdGhlIEdyZWdvcmlhbiBDYWxlbmRhciksIGZvcm1hdCBhIGRhdGUgYW5kIG1lYXN1cmUgaXRz
IGxlbmd0aC4KKyAgICBOU1VJbnRlZ2VyIHRvdGFsTW9udGhzVG9UZXN0ID0gMTsKKyAgICBpZiAo
dHlwZSA9PSBEYXRlQ29tcG9uZW50czo6RGF0ZQorICAgICAgICB8fCB0eXBlID09IERhdGVDb21w
b25lbnRzOjpEYXRlVGltZQorICAgICAgICB8fCB0eXBlID09IERhdGVDb21wb25lbnRzOjpEYXRl
VGltZUxvY2FsCisgICAgICAgIHx8IHR5cGUgPT0gRGF0ZUNvbXBvbmVudHM6Ok1vbnRoKQorICAg
ICAgICB0b3RhbE1vbnRoc1RvVGVzdCA9IG51bWJlck9mR3JlZ29yaWFuTW9udGhzOworICAgIGZv
ciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IHRvdGFsTW9udGhzVG9UZXN0OyArK2kpIHsKKyAgICAg
ICAgW2NvbXBvbmVudHMuZ2V0KCkgc2V0TW9udGg6KGkgKyAxKV07CisgICAgICAgIE5TRGF0ZSAq
ZGF0ZSA9IFtncmVnb3JpYW4uZ2V0KCkgZGF0ZUZyb21Db21wb25lbnRzOmNvbXBvbmVudHMuZ2V0
KCldOworICAgICAgICBOU1N0cmluZyAqZm9ybWF0dGVkRGF0ZSA9IFtkYXRlRm9ybWF0dGVyIHN0
cmluZ0Zyb21EYXRlOmRhdGVdOworICAgICAgICBTdHJpbmcgc3RyID0gU3RyaW5nKGZvcm1hdHRl
ZERhdGUpOworICAgICAgICBtYXhpbXVtV2lkdGggPSBtYXgobWF4aW11bVdpZHRoLCBmb250Lndp
ZHRoKHN0cikpOworICAgIH0KKworICAgIHJldHVybiBtYXhpbXVtV2lkdGg7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvbWFjL0NoYXJzZXREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9D
aGFyc2V0RGF0YS5oCmluZGV4IDQ1OGNlY2I1MGYxY2YxYzliZjUzNGIzNzJiY2U1ODI3ZjM1ZTQ2
M2QuLmE2MDcwNDI5NWNkZWMzN2ZiMDZjODY0YTM3MzkyMGI3ODUyOTQ5MmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0NoYXJzZXREYXRhLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvQ2hhcnNldERhdGEuaApAQCAtMjMsNiArMjMs
MTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKyNpZiBQTEFURk9STShJT1MpCit0eXBlZGVm
IFVJbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEVuY29kaW5nOworI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICNkZWZpbmUga1RleHRFbmNvZGluZ0lTT0xhdGlu
VGhhaSBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluVGhhaQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaAppbmRleCA3MDc0OTAzZjQyZDFmNmU4MjNkOGQ0NGNh
OGI5MDdkZTcxODIyYjk2Li44NGE4ZmRiOTk0MmNhODkzOTJhZjI0MDY1OTc1ZTQzNzUzOGY5MGMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaApAQCAt
NTEsNiArNTEsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsZU1hYz4g
Y3JlYXRlKE5TTG9jYWxlKik7CiAgICAgfkxvY2FsZU1hYygpOwogCisjaWYgUExBVEZPUk0oSU9T
KQorICAgIHZpcnR1YWwgZmxvYXQgbWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVu
dHM6OlR5cGUsIGNvbnN0IEZvbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBmb3Jt
YXREYXRlVGltZShjb25zdCBEYXRlQ29tcG9uZW50cyYsIEZvcm1hdFR5cGUgPSBGb3JtYXRUeXBl
VW5zcGVjaWZpZWQpIE9WRVJSSURFOworI2VuZGlmCisKICNpZiBFTkFCTEUoREFURV9BTkRfVElN
RV9JTlBVVF9UWVBFUykKICAgICB2aXJ0dWFsIFN0cmluZyBkYXRlRm9ybWF0KCkgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCBTdHJpbmcgbW9udGhGb3JtYXQoKSBPVkVSUklERTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbQppbmRleCBkYjQzNWJmYTNmNzIz
ZTJjNDk2OWU5ZTAyMjFlZDMzYTU2ZDNjZmVjLi5kMzczYWRkNzkxOWU2ZjdkYmRmYzY0ZjMxYmNj
NDc3ZDljZjU4Y2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21h
Yy9Mb2NhbGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9j
YWxlTWFjLm1tCkBAIC00MCw2ICs0MCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBQTEFURk9STShJT1Mp
CisjaW1wb3J0ICJMb2NhbGl6ZWREYXRlQ2FjaGUuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyBpbmxpbmUgU3RyaW5nIGxhbmd1YWdlRnJvbUxvY2FsZShjb25zdCBT
dHJpbmcmIGxvY2FsZSkKQEAgLTExNiw2ICsxMjAsMzUgQEAgUmV0YWluUHRyPE5TRGF0ZUZvcm1h
dHRlcj4gTG9jYWxlTWFjOjpzaG9ydERhdGVGb3JtYXR0ZXIoKQogICAgIHJldHVybiBjcmVhdGVE
YXRlVGltZUZvcm1hdHRlcihtX2xvY2FsZS5nZXQoKSwgbV9ncmVnb3JpYW5DYWxlbmRhci5nZXQo
KSwgTlNEYXRlRm9ybWF0dGVyU2hvcnRTdHlsZSwgTlNEYXRlRm9ybWF0dGVyTm9TdHlsZSk7CiB9
CiAKKyNpZiBQTEFURk9STShJT1MpCitTdHJpbmcgTG9jYWxlTWFjOjpmb3JtYXREYXRlVGltZShj
b25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZUNvbXBvbmVudHMsIEZvcm1hdFR5cGUpCit7CisgICAg
ZG91YmxlIG1zZWMgPSBkYXRlQ29tcG9uZW50cy5taWxsaXNlY29uZHNTaW5jZUVwb2NoKCk7Cisg
ICAgRGF0ZUNvbXBvbmVudHM6OlR5cGUgdHlwZSA9IGRhdGVDb21wb25lbnRzLnR5cGUoKTsKKwor
ICAgIC8vICJ3ZWVrIiB0eXBlIG5vdCBzdXBwb3J0ZWQuCisgICAgQVNTRVJUKHR5cGUgIT0gRGF0
ZUNvbXBvbmVudHM6OkludmFsaWQpOworICAgIGlmICh0eXBlID09IERhdGVDb21wb25lbnRzOjpX
ZWVrKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyBJbmNvbWluZyBtc2VjIHZh
bHVlIGlzIG1pbGxpc2Vjb25kcyBzaW5jZSAxOTcwLTAxLTAxIDAwOjAwOjAwIFVUQy4gVGhlIDE5
NzAgZXBvY2guCisgICAgTlNUaW1lSW50ZXJ2YWwgc2Vjb25kc1NpbmNlMTk3MCA9IChtc2VjIC8g
MTAwMCk7CisgICAgTlNEYXRlICpkYXRlID0gW05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNp
bmNlMTk3MDpzZWNvbmRzU2luY2UxOTcwXTsKKworICAgIC8vIFJldHVybiBhIGZvcm1hdHRlZCBz
dHJpbmcuCisgICAgTlNEYXRlRm9ybWF0dGVyICpkYXRlRm9ybWF0dGVyID0gbG9jYWxpemVkRGF0
ZUNhY2hlKCkuZm9ybWF0dGVyRm9yRGF0ZVR5cGUodHlwZSk7CisgICAgcmV0dXJuIFtkYXRlRm9y
bWF0dGVyIHN0cmluZ0Zyb21EYXRlOmRhdGVdOworfQorCitmbG9hdCBMb2NhbGVNYWM6Om1heGlt
dW1XaWR0aEZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUsIGNvbnN0IEZvbnQm
IGZvbnQpCit7CisgICAgQVNTRVJUKHR5cGUgIT0gRGF0ZUNvbXBvbmVudHM6OkludmFsaWQpOwor
ICAgIEFTU0VSVCh0eXBlICE9IERhdGVDb21wb25lbnRzOjpXZWVrKTsKKworICAgIHJldHVybiBs
b2NhbGl6ZWREYXRlQ2FjaGUoKS5tYXhpbXVtV2lkdGhGb3JEYXRlVHlwZSh0eXBlLCBmb250KTsK
K30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKERBVEVfQU5EX1RJTUVfSU5QVVRfVFlQRVMpCiBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlTWFjOjptb250aExhYmVscygpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRCb3VuZGFyaWVzLm1tCmluZGV4IDJm
OTIxN2YwN2JhMTgzY2E3ZjljZmQxYjk5N2M5ZWYwYTU5NTg5MTUuLjMzNmQ3ZjVlMTY2MmJlN2E3
MDFjNGZjMDZiODY5NGYyNmZmNTNjNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvbWFjL1RleHRCb3VuZGFyaWVzLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvbWFjL1RleHRCb3VuZGFyaWVzLm1tCkBAIC0yNiwxMCArMjYsMTc3IEBACiAjaW1w
b3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlRleHRCb3VuZGFyaWVzLmgiCiAKKyNpZiBQTEFURk9S
TShJT1MpCisjaW1wb3J0ICJUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgiCisjaW1wb3J0
IDxDb3JlRm91bmRhdGlvbi9DRlN0cmluZ1Rva2VuaXplci5oPgorI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDx1bmljb2RlL3VicmsuaD4KKyNpbXBvcnQgPHVuaWNv
ZGUvdWNoYXIuaD4KKyNpbXBvcnQgPHVuaWNvZGUvdXN0cmluZy5oPgorI2ltcG9ydCA8dW5pY29k
ZS91dHlwZXMuaD4KKyNpbXBvcnQgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CisjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCisj
aWYgUExBVEZPUk0oSU9TKQorCitzdGF0aWMgYm9vbCBpc1NraXBDaGFyYWN0ZXIoVUNoYXIzMiBj
KQoreworICAgIHJldHVybiBjID09IDB4QTAgfHwgCisgICAgICAgIGMgPT0gJ1xuJyB8fCAKKyAg
ICAgICAgYyA9PSAnLicgfHwgCisgICAgICAgIGMgPT0gJywnIHx8IAorICAgICAgICBjID09ICch
JyAgfHwgCisgICAgICAgIGMgPT0gJz8nIHx8IAorICAgICAgICBjID09ICc7JyB8fCAKKyAgICAg
ICAgYyA9PSAnOicgfHwgCisgICAgICAgIHVfaXNzcGFjZShjKTsKK30KKworc3RhdGljIGJvb2wg
aXNXaGl0ZXNwYWNlQ2hhcmFjdGVyKFVDaGFyMzIgYykKK3sKKyAgICByZXR1cm4gYyA9PSAweEEw
IHx8IAorICAgICAgICBjID09ICdcbicgfHwgCisgICAgICAgIHVfaXNzcGFjZShjKTsKK30KKwor
c3RhdGljIGJvb2wgaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihVQ2hhcjMyIGMpCit7CisgICAg
Q0ZDaGFyYWN0ZXJTZXRSZWYgc2V0ID0gQ0ZDaGFyYWN0ZXJTZXRHZXRQcmVkZWZpbmVkKGtDRkNo
YXJhY3RlclNldEFscGhhTnVtZXJpYyk7CisgICAgLy8gQW1wZXJzYW5kIGlzIGFuIGV4Y2VwdGlv
biBhZGRlZCB0byB0cmVhdCBBVCZUIGFzIGEgc2luZ2xlIHdvcmQgKHNlZSA8cmRhcjovL3Byb2Js
ZW0vNTAyMjI2ND4pLgorICAgIHJldHVybiAhQ0ZDaGFyYWN0ZXJTZXRJc0xvbmdDaGFyYWN0ZXJN
ZW1iZXIoc2V0LCBjKSAmJiBjICE9ICcmJzsKK30KKworc3RhdGljIGJvb2wgaXNTeW1ib2xDaGFy
YWN0ZXIoVUNoYXIzMiBjKQoreworICAgIENGQ2hhcmFjdGVyU2V0UmVmIHNldCA9IENGQ2hhcmFj
dGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFyYWN0ZXJTZXRTeW1ib2wpOworICAgIHJldHVybiBD
RkNoYXJhY3RlclNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihzZXQsIGMpOworfQorCitzdGF0aWMg
Ym9vbCBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKQorewor
ICAgIC8vIFRoZXNlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlaGF2ZSBhcyB3b3JkIGJvdW5k
YXJpZXMsIGJ1dCBjYW4gYXBwZWFyIHdpdGhpbiB3b3Jkcy4KKyAgICByZXR1cm4gY2hhcmFjdGVy
ID09ICdcJycgfHwgY2hhcmFjdGVyID09IHJpZ2h0U2luZ2xlUXVvdGF0aW9uTWFyayB8fCBjaGFy
YWN0ZXIgPT0gaGVicmV3UHVuY3R1YXRpb25HZXJzaGF5aW07Cit9CisKK3N0YXRpYyBDRlN0cmlu
Z1Rva2VuaXplclJlZiB0b2tlbml6ZXJGb3JTdHJpbmcoQ0ZTdHJpbmdSZWYgc3RyKQoreworICAg
IHN0YXRpYyBDRlN0cmluZ1Rva2VuaXplclJlZiB0b2tlbml6ZXIgPSBudWxscHRyOworICAgIHN0
YXRpYyBDRkxvY2FsZVJlZiBsb2NhbGUgPSBudWxscHRyOworCisgICAgaWYgKCFsb2NhbGUpIHsK
KyAgICAgICAgY29uc3QgY2hhciogdGVtcCA9IGN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJRCgpOwor
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGN1cnJlbnRMb2NhbGVJRCA9IGFkb3B0Q0Yo
Q0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXNOb0NvcHkobnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVSW50OCo+KHRlbXApLCBzdHJsZW4odGVtcCksICBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJ
LCBmYWxzZSwga0NGQWxsb2NhdG9yTnVsbCkpOworICAgICAgICBsb2NhbGUgPSBDRkxvY2FsZUNy
ZWF0ZShudWxscHRyLCBjdXJyZW50TG9jYWxlSUQuZ2V0KCkpOworICAgICAgICBpZiAoIWxvY2Fs
ZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIENGUmFuZ2UgZW50
aXJlUmFuZ2UgPSBDRlJhbmdlTWFrZSgwLCBDRlN0cmluZ0dldExlbmd0aChzdHIpKTsgICAgCisK
KyAgICBpZiAoIXRva2VuaXplcikKKyAgICAgICAgdG9rZW5pemVyID0gQ0ZTdHJpbmdUb2tlbml6
ZXJDcmVhdGUobnVsbHB0ciwgc3RyLCBlbnRpcmVSYW5nZSwga0NGU3RyaW5nVG9rZW5pemVyVW5p
dFdvcmRCb3VuZGFyeSwgbG9jYWxlKTsKKyAgICBlbHNlCisgICAgICAgIENGU3RyaW5nVG9rZW5p
emVyU2V0U3RyaW5nKHRva2VuaXplciwgc3RyLCBlbnRpcmVSYW5nZSk7CisgICAgcmV0dXJuIHRv
a2VuaXplcjsKK30KKworCisvLyBTaW1wbGUgY2FzZTogYSB3b3JkIGlzIGEgc3RyZWFtIG9mIGNo
YXJhY3RlcnMKKy8vIGRlbGltaXRlZCBieSBhIHNwZWNpYWwgc2V0IG9mIHdvcmQtZGVsaW1pdGlu
ZyBjaGFyYWN0ZXJzLgorc3RhdGljIHZvaWQgZmluZFNpbXBsZVdvcmRCb3VuZGFyeShjb25zdCBV
Q2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQp
Cit7CisgICAgQVNTRVJUKHBvc2l0aW9uID49IDApOworICAgIEFTU0VSVChwb3NpdGlvbiA8IGxl
bik7CisKKyAgICBpbnQgc3RhcnRQb3MgPSBwb3NpdGlvbjsKKyAgICB3aGlsZSAoc3RhcnRQb3Mg
PiAwKSB7CisgICAgICAgIGludCBpID0gc3RhcnRQb3M7CisgICAgICAgIFVDaGFyMzIgY2hhcmFj
dGVyQmVmb3JlU3RhcnRQb3M7CisgICAgICAgIFUxNl9QUkVWKGNoYXJzLCAwLCBpLCBjaGFyYWN0
ZXJCZWZvcmVTdGFydFBvcyk7CisgICAgICAgIGlmIChpc1dvcmREZWxpbWl0aW5nQ2hhcmFjdGVy
KGNoYXJhY3RlckJlZm9yZVN0YXJ0UG9zKSkgeworICAgICAgICAgICAgQVNTRVJUKGkgPj0gMCk7
CisgICAgICAgICAgICBpZiAoIWkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIGlmICghaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3RlcihjaGFyYWN0ZXJCZWZvcmVTdGFy
dFBvcykpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIFVDaGFyMzIgY2hh
cmFjdGVyQmVmb3JlQmVmb3JlU3RhcnRQb3M7CisgICAgICAgICAgICBVMTZfUFJFVihjaGFycywg
MCwgaSwgY2hhcmFjdGVyQmVmb3JlQmVmb3JlU3RhcnRQb3MpOworICAgICAgICAgICAgaWYgKGlz
V29yZERlbGltaXRpbmdDaGFyYWN0ZXIoY2hhcmFjdGVyQmVmb3JlQmVmb3JlU3RhcnRQb3MpKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFUxNl9CQUNLXzEoY2hh
cnMsIDAsIHN0YXJ0UG9zKTsKKyAgICB9CisgICAgCisgICAgaW50IGVuZFBvcyA9IHBvc2l0aW9u
OworICAgIHdoaWxlIChlbmRQb3MgPCBsZW4pIHsKKyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7
CisgICAgICAgIFUxNl9HRVQoY2hhcnMsIDAsIGVuZFBvcywgbGVuLCBjaGFyYWN0ZXIpOworICAg
ICAgICBpZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXIpKSB7CisgICAgICAg
ICAgICBpbnQgaSA9IGVuZFBvczsKKyAgICAgICAgICAgIFUxNl9GV0RfMShjaGFycywgaSwgbGVu
KTsKKyAgICAgICAgICAgIEFTU0VSVChpIDw9IGxlbik7CisgICAgICAgICAgICBpZiAoaSA9PSBs
ZW4pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3Rl
ckFmdGVyRW5kUG9zOworICAgICAgICAgICAgVTE2X05FWFQoY2hhcnMsIGksIGxlbiwgY2hhcmFj
dGVyQWZ0ZXJFbmRQb3MpOworICAgICAgICAgICAgaWYgKCFpc0FtYmlndW91c0JvdW5kYXJ5Q2hh
cmFjdGVyKGNoYXJhY3RlcikpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBp
ZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXJBZnRlckVuZFBvcykpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgVTE2X0ZXRF8xKGNoYXJzLCBl
bmRQb3MsIGxlbik7CisgICAgfQorCisgICAgLy8gVGhlIHRleHQgbWF5IGNvbnNpc3Qgb2YgYWxs
IGRlbGltaXRlciBjaGFyYWN0ZXJzIChlLmcuICIrKysrKysrKyIgb3IgYSBzZXJpZXMgb2YgZW1v
amkpLCBhbmQgcmV0dXJuaW5nIGFuIGVtcHR5IHJhbmdlCisgICAgLy8gbWFrZXMgbm8gc2Vuc2Ug
KGFuZCBkb2Vzbid0IG1hdGNoIGZpbmRDb21wbGV4V29yZEJvdW5kYXJ5KCkgYmVoYXZpb3IpLgor
ICAgIGlmIChzdGFydFBvcyA9PSBlbmRQb3MgJiYgZW5kUG9zIDwgbGVuKSB7CisgICAgICAgIFVD
aGFyMzIgY2hhcmFjdGVyOworICAgICAgICBVMTZfR0VUKGNoYXJzLCAwLCBlbmRQb3MsIGxlbiwg
Y2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKGlzU3ltYm9sQ2hhcmFjdGVyKGNoYXJhY3RlcikpCisg
ICAgICAgICAgICBVMTZfRldEXzEoY2hhcnMsIGVuZFBvcywgbGVuKTsKKyAgICB9CisKKyAgICAq
c3RhcnQgPSBzdGFydFBvczsKKyAgICAqZW5kID0gZW5kUG9zOworfQorCisvLyBDb21wbGV4IGNh
c2U6IHVzZSBDRlN0cmluZ1Rva2VuaXplciB0byBmaW5kIHdvcmQgYm91bmRhcnkuCitzdGF0aWMg
dm9pZCBmaW5kQ29tcGxleFdvcmRCb3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4s
IGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQpCit7CisgICAgQ0ZTdHJpbmdSZWYg
Y2hhclN0cmluZyA9IENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnNOb0NvcHkoTlVMTCwgY2hh
cnMsIGxlbiwga0NGQWxsb2NhdG9yTnVsbCk7CisgICAgQVNTRVJUKGNoYXJTdHJpbmcpOworICAg
IAorICAgIENGU3RyaW5nVG9rZW5pemVyUmVmIHRva2VuaXplciA9IHRva2VuaXplckZvclN0cmlu
ZyhjaGFyU3RyaW5nKTsKKyAgICBpZiAodG9rZW5pemVyKSB7ICAgICAgICAKKyAgICAgICAgQ0ZT
dHJpbmdUb2tlbml6ZXJUb2tlblR5cGUgIHRva2VuID0gQ0ZTdHJpbmdUb2tlbml6ZXJHb1RvVG9r
ZW5BdEluZGV4KHRva2VuaXplciwgcG9zaXRpb24pOworICAgICAgICBDRlJhbmdlIHJlc3VsdDsK
KyAgICAgICAgaWYgKHRva2VuICE9IGtDRlN0cmluZ1Rva2VuaXplclRva2VuTm9uZSkgeworICAg
ICAgICAgICAgcmVzdWx0ID0gQ0ZTdHJpbmdUb2tlbml6ZXJHZXRDdXJyZW50VG9rZW5SYW5nZSh0
b2tlbml6ZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gaWYgbm8gdG9rZW4g
Zm91bmQ6IHNlbGVjdCBlbnRpcmUgYmxvY2sKKyAgICAgICAgICAgIC8vIE5COiBJIG5ldmVyIGhp
dCB0aGlzIHNlY3Rpb24gaW4gYWxsIG15IHRlc3RpbmcuLi4KKyAgICAgICAgICAgIHJlc3VsdC5s
b2NhdGlvbiA9IDA7CisgICAgICAgICAgICByZXN1bHQubGVuZ3RoID0gbGVuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAqc3RhcnQgPSByZXN1bHQubG9jYXRpb247CisgICAgICAgICpl
bmQgPSByZXN1bHQubG9jYXRpb24gKyByZXN1bHQubGVuZ3RoOworICAgIH0gZWxzZSB7ICAgIC8v
IGVycm9yIGNyZWF0aW5nIHRva2VuaXplcgorICAgICAgICBmaW5kU2ltcGxlV29yZEJvdW5kYXJ5
KGNoYXJzLCBsZW4sIHBvc2l0aW9uLCBzdGFydCwgZW5kKTsKKyAgICB9CisKKyAgICBDRlJlbGVh
c2UoY2hhclN0cmluZyk7Cit9CisjZW5kaWYKKwogdm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNvbnN0
IFVDaGFyKiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVu
ZCkKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIE5TU3RyaW5nKiBzdHJpbmcgPSBbW05TU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnNOb0NvcHk6Y29uc3RfY2FzdDx1bmljaGFyKj4o
Y2hhcnMpCiAgICAgICAgIGxlbmd0aDpsZW4gZnJlZVdoZW5Eb25lOk5PXTsKICAgICBOU0F0dHJp
YnV0ZWRTdHJpbmcqIGF0dHIgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhT
dHJpbmc6c3RyaW5nXTsKQEAgLTM4LDYgKzIwNSw0NCBAQCB2b2lkIGZpbmRXb3JkQm91bmRhcnko
Y29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGlu
dAogICAgIFtzdHJpbmcgcmVsZWFzZV07CiAgICAgKnN0YXJ0ID0gcmFuZ2UubG9jYXRpb247CiAg
ICAgKmVuZCA9IHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoOworI2Vsc2UKKyAgICBpbnQg
cG9zID0gcG9zaXRpb247CisgICAgaWYgKCBwb3NpdGlvbiA9PSBsZW4gJiYgcG9zaXRpb24gIT0g
MCkKKyAgICAgICAgcG9zLS07CisgICAgCisgICAgLy8gRm9yIGNvbXBsZXggdGV4dCAoVGhhaSwg
SmFwYW5lc2UsIENoaW5lc2UpLCB2aXNpYmxlX3VuaXRzIHdpbGwgcGFzcyB0aGUgdGV4dCBpbiBh
cyBhIAorICAgIC8vIHNpbmdsZSBjb250aWd1b3VzIHJ1biBvZiBjaGFyYWN0ZXJzLCBwcm92aWRp
bmcgYXMgbXVjaCBjb250ZXh0IGFzIGlzIHBvc3NpYmxlLgorICAgIC8vIFdlIG9ubHkgbmVlZCBv
bmUgY2hhcmFjdGVyIHRvIGRldGVybWluZSBpZiB0aGUgdGV4dCBpcyBjb21wbGV4LgorICAgIFVD
aGFyMzIgY2g7CisgICAgaW50IGkgPSBwb3M7CisgICAgVTE2X05FWFQoY2hhcnMsaSxsZW4sY2gp
OworICAgIGJvb2wgaXNDb21wbGV4ID0gcmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGNo
KTsKKyAgICAKKyAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpbXByb3ZlcyBvdXIgd29yZCBib3Vu
ZGFyeSBiZWhhdmlvciwgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZ28gZmFyIGVub3VnaC4KKyAgICAv
LyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzg4NTM5NTE+IFRha2UgY29tcGxleCB3b3JkIGJvdW5kYXJ5
IGZpbmRpbmcgcGF0aCB3aGVuIG5lY2Vzc2FyeQorICAgIGlmICghaXNDb21wbGV4KSB7CisgICAg
ICAgIC8vIENoZWNrIGFnYWluIGZvciBjb21wbGV4IHRleHQsIGF0IHRoZSBzdGFydCBvZiB0aGUg
cnVuLgorICAgICAgICBpID0gMDsKKyAgICAgICAgVTE2X05FWFQoY2hhcnMsIGksIGxlbiwgY2gp
OworICAgICAgICBpc0NvbXBsZXggPSByZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2gp
OworICAgIH0KKyAgICAKKyAgICBpZiAoaXNDb21wbGV4KSB7CisgICAgICAgIGZpbmRDb21wbGV4
V29yZEJvdW5kYXJ5KGNoYXJzLGxlbiwgcG9zaXRpb24sIHN0YXJ0LCBlbmQpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGZpbmRTaW1wbGVXb3JkQm91bmRhcnkoY2hhcnMsbGVuLCBwb3NpdGlvbiwg
c3RhcnQsIGVuZCk7CisgICAgfQorCisjZGVmaW5lIExPR19XT1JEX0JSRUFLIDAKKyNpZiBMT0df
V09SRF9CUkVBSworICAgIENGU3RyaW5nUmVmIHVuaVN0cmluZyA9IENGU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoTlVMTCwgY2hhcnMsIGxlbik7CisgICAgQ0ZTdHJpbmdSZWYgZm91bmRXb3Jk
ID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhOVUxMLCAoY29uc3QgVW5pQ2hhciAqKSBj
aGFycyArICpzdGFydCwgKmVuZCAtICpzdGFydCk7ICAgICAgICAKKyAgICBOU0xvZyhAIiVzX0JS
RUFLICclQCcgKCVkLCVkKSBpbiAnJUAnICglcCkgYXQgJWQsIGxlbmd0aD0lZCIsIGlzQ29tcGxl
eCA/ICJDT01QTEVYIiA6ICJTSU1QTEUiLCBmb3VuZFdvcmQsICpzdGFydCwgKmVuZCwgdW5pU3Ry
aW5nLCB1bmlTdHJpbmcsIHBvc2l0aW9uLCBsZW4pOworICAgIENGUmVsZWFzZShmb3VuZFdvcmQp
OworICAgIENGUmVsZWFzZSh1bmlTdHJpbmcpOworI2VuZGlmCisgICAgCisjZW5kaWYKIH0KIAog
dm9pZCBmaW5kRW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwgaW50
IHBvc2l0aW9uLCBpbnQqIGVuZCkKQEAgLTUzLDYgKzI1OCw3IEBAIHZvaWQgZmluZEVuZFdvcmRC
b3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBl
bmQpCiAKIGludCBmaW5kTmV4dFdvcmRGcm9tSW5kZXgoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQg
bGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCkKIHsgICAKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIE5TU3RyaW5nKiBzdHJpbmcgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENoYXJh
Y3RlcnNOb0NvcHk6Y29uc3RfY2FzdDx1bmljaGFyKj4oY2hhcnMpCiAgICAgICAgIGxlbmd0aDps
ZW4gZnJlZVdoZW5Eb25lOk5PXTsKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcqIGF0dHIgPSBbW05T
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6c3RyaW5nXTsKQEAgLTYwLDYg
KzI2NiwzNSBAQCBpbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KGNvbnN0IFVDaGFyKiBjaGFycywg
aW50IGxlbiwgaW50IHBvc2l0aW9uLCBib29sIGZvcndhcgogICAgIFthdHRyIHJlbGVhc2VdOwog
ICAgIFtzdHJpbmcgcmVsZWFzZV07CiAgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgLy8g
VGhpcyB2ZXJ5IGxpa2VseSB3b24ndCBiZWhhdmUgZXhhY3RseSBsaWtlIHRoZSBub24taVBob25l
IHZlcnNpb24sIGJ1dCBpdCB3b3JrcworICAgIC8vIGZvciB0aGUgY29udGV4dHMgaW4gd2hpY2gg
aXQgaXMgdXNlZCBvbiBpUGhvbmUsIGFuZCBpbiB0aGUgZnV0dXJlIHdpbGwgYmUKKyAgICAvLyB0
dW5lZCB0byBpbXByb3ZlIHRoZSBpUGhvbmUtc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHRoZSBrZXli
b2FyZCBhbmQgdGV4dCBlZGl0aW5nLgorICAgIGludCBwb3MgPSBwb3NpdGlvbjsKKyAgICBVRXJy
b3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBVQnJlYWtJdGVyYXRvciAqYm91bmRh
cnkgPSB1YnJrX29wZW4oVUJSS19XT1JELCBjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQoKSwgY29u
c3RfY2FzdDx1bmljaGFyICo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5pY2hhciAqPihjaGFy
cykpLCBsZW4sICZzdGF0dXMpOworCisgICAgaWYgKGJvdW5kYXJ5ICYmIFVfU1VDQ0VTUyhzdGF0
dXMpKSB7CisgICAgICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgICAgICBkbyB7CisgICAgICAg
ICAgICAgICAgcG9zID0gdWJya19mb2xsb3dpbmcoYm91bmRhcnksIHBvcyk7ICAgIAorICAgICAg
ICAgICAgICAgIGlmIChwb3MgPT0gVUJSS19ET05FKSB7CisgICAgICAgICAgICAgICAgICAgIHBv
cyA9IGxlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IHdoaWxlIChwb3MgPCBs
ZW4gJiYgKHBvcyA9PSAwIHx8ICFpc1NraXBDaGFyYWN0ZXIoY2hhcnNbcG9zLTFdKSkgJiYgaXNT
a2lwQ2hhcmFjdGVyKGNoYXJzW3Bvc10pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBwb3MgPSB1YnJrX3ByZWNlZGluZyhib3Vu
ZGFyeSwgcG9zKTsKKyAgICAgICAgICAgICAgICBpZiAocG9zID09IFVCUktfRE9ORSkgeworICAg
ICAgICAgICAgICAgICAgICBwb3MgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gd2hpbGUgKHBvcyA+IDAgJiYgaXNTa2lwQ2hhcmFjdGVyKGNoYXJzW3Bvc10pICYmICFpc1do
aXRlc3BhY2VDaGFyYWN0ZXIoY2hhcnNbcG9zLTFdKSk7CisgICAgICAgIH0KKyAgICAgICAgdWJy
a19jbG9zZShib3VuZGFyeSk7CisgICAgfQorICAgIHJldHVybiBwb3M7CisjZW5kaWYgLy8gIVBM
QVRGT1JNKElPUykKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9tYWMvVGV4dENvZGVjTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
bWFjL1RleHRDb2RlY01hYy5jcHAKaW5kZXggNDhhOTc3NmE5ZTU1YTNjYjRjY2NlYTJiNWQ3OTIz
MjFhYjQ0NTdkZC4uNzNlZDRlODFkY2VmZmFmZDc0YzY4YWYwZDBlNWRkNjgzYjVkNjkwOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuY3Bw
CkBAIC0yNCw2ICsyNCw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisjaWYgIVBMQVRGT1JN
KElPUykKKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHRDb2RlY01hYy5oIgog
CkBAIC0zMjUsMyArMzI3LDUgQEAgQ1N0cmluZyBUZXh0Q29kZWNNYWM6OmVuY29kZShjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGUKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmgKaW5kZXggM2U3YTIzN2Mx
MzdlOTk3MDAzNGE3YThmYWUxYmZlMDg3NDVlMjkxMy4uNDYwMmIxYmE4YzY5ZWVlOGIxMzg0ODA0
MjU4ZmM4YjFjYzA3NDMzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9tYWMvVGV4dENvZGVjTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9t
YWMvVGV4dENvZGVjTWFjLmgKQEAgLTI3LDYgKzI3LDggQEAKICNpZm5kZWYgVGV4dENvZGVjTWFj
X2gKICNkZWZpbmUgVGV4dENvZGVjTWFjX2gKIAorI2lmICFQTEFURk9STShJT1MpCisKICNpbmNs
dWRlICJUZXh0Q29kZWMuaCIKICNpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+
CiAKQEAgLTcwLDQgKzcyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCiAjZW5kaWYgLy8gVGV4dENv
ZGVjTWFjX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220670</attachid>
            <date>2014-01-08 14:55:36 -0800</date>
            <delta_ts>2014-01-08 20:47:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126654-20140108145535.patch</filename>
            <type>text/plain</type>
            <size>1060472</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDdlZDBhMjFhNGYxODdjMjk5YjkyNjNm
OGRiMDAxNmRlNWRmM2U2ZWMuLjQ1YTMwODVmNzZhNmNmYzY2ZmE5ZGI4YTgzY2JkNzVlMzVlYjRh
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMDEtMDggIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFVwc3RyZWFtIFdlYkNvcmUvcGxhdGZvcm0g
Y2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI2NjU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmNhbkFjY2Vzc1RocmVhZExvY2Fs
RGF0YUZvclRocmVhZCk6CisgICAgICAgICogd3RmL01haW5UaHJlYWQuaDoKKwogMjAxNC0wMS0w
NyAgRGF2aWQgRmFybGVyICA8ZGZhcmxlckBhcHBsZS5jb20+CiAKICAgICAgICAgW0FTQU5dIEJ1
aWxkaW5nIHdpdGggdHJ1bmsgY2xhbmcgY29ycnVwdHMgc2FuZGJveCBwcm9maWxlIHdpdGggY29t
bWVudCBmcm9tIENvbXBpbGVyLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYjhjOTkyZTYwYWY2NjE5NTkyZjBi
OTFiNGJkODBjMzVmZTdkZjUzLi5lMzIwNDdhOWJhNDMzZGRkMGFmMTU1OWVjNGI2MzZmNjhiMjQw
NGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYyIEBACisyMDE0LTAxLTA4ICBEYW5pZWwgQmF0
ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBVcHN0cmVhbSBXZWJDb3Jl
L3BsYXRmb3JtIGNoYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNjY1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRlbnRGaWx0ZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9EcmFnRGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9v
c2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZpbGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWV0YWRhdGFVUkwpOgorICAg
ICAgICAqIHBsYXRmb3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9LaWxsUmlu
Z05vbmUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZmlsZUJ1dHRvbkNob29zZU1lZGlhRmlsZUxhYmVsKToKKyAgICAgICAg
KFdlYkNvcmU6OmZpbGVCdXR0b25DaG9vc2VNdWx0aXBsZU1lZGlhRmlsZXNMYWJlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpmaWxlQnV0dG9uTm9NZWRpYUZpbGVTZWxlY3RlZExhYmVsKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZpbGVCdXR0b25Ob01lZGlhRmlsZXNTZWxlY3RlZExhYmVsKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmg6CisgICAgICAgICogcGxhdGZvcm0vTG9n
Z2luZy5oOgorICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aW5pdGlhbGl6ZVN1cHBvcnRlZEltYWdlTUlNRVR5cGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmluaXRpYWxpemVTdXBwb3J0ZWROb25JbWFnZU1pbWVUeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjppbml0aWFsaXplVW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Bs
YXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpldmVudCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFp
bkJ1bmRsZUlzRXF1YWxUbyk6CisgICAgICAgICogcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzSU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1N0cmluZ1RydW5jYXRvci5oLgorICAgICAgICAqIHBsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrc0lPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVRvdWNoRXZlbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsVHlwZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
dzo6YWN0dWFsU2Nyb2xsWCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjphY3R1YWxT
Y3JvbGxZKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aXNQaW5uZWRJbkJvdGhEaXJlY3Rpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZEhvcml6b250YWxseUluRGlyZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZFZlcnRpY2Fs
bHlJbkRpcmVjdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc1RvdWNoU2Nyb2xsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aXNPdmVyZmxvd1Njcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZGlkU3RhcnRTY3JvbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWE6OmRpZEVuZFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxhYmxlQXJlYTo6ZGlkVXBkYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGFibGVBcmVhOjpzZXRJc1VzZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWE6OmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9NaW5pbXVtUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVk
VG9NYXhpbXVtUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Omlz
VmVydGljYWxTY3JvbGxlclBpbm5lZFRvTWluaW11bVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGFibGVBcmVhOjppc1ZlcnRpY2FsU2Nyb2xsZXJQaW5uZWRUb01heGltdW1Qb3Np
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGVQdXJnZWFibGVCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6c2hvdWxkVXNlUHVyZ2Vh
YmxlTWVtb3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TdWRkZW5UZXJtaW5hdGlvbi5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdXBw
bGVtZW50YWJsZTo6cHJvdmlkZVN1cHBsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3VwcGxl
bWVudGFibGU6OnJlbW92ZVN1cHBsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3VwcGxlbWVu
dGFibGU6OnJlcXVpcmVTdXBwbGVtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TeXN0ZW1NZW1v
cnkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5n
VHJ1bmNhdG9yLmguCisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkQ2hlY2suaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVh
ZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFk
R2xvYmFsRGF0YTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRh
OjpzZXRXZWJDb3JlVGhyZWFkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjp0aHJlYWRHbG9iYWxE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmg6CisgICAgICAgICog
cGxhdGZvcm0vVGhyZWFkVGltZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFRpbWVy
czo6VGhyZWFkVGltZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFRpbWVyczo6c2hhcmVk
VGltZXJGaXJlZEludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaW1lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUaW1lckJhc2U6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVy
QmFzZTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpUaW1lckJhc2U6OnNldE5leHRGaXJlVGlt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vVGltZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVy
QmFzZTo6aXNBY3RpdmUpOgorICAgICAgICAqIHBsYXRmb3JtL1VSTC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjplbmFibGVVUkxTY2hlbWVDYW5vbmljYWxpemF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmVxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTDo6cGFyc2UpOgorICAgICAgICAqIHBs
YXRmb3JtL1VSTC5oOgorICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFjLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUF1ZGlvQnVmZmVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpkZXN0
cm95QXVkaW9CdWZmZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6
QXVkaW9GaWxlUmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6fkF1
ZGlvRmlsZVJlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OnJlYWRQ
cm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6Z2V0U2l6ZVByb2MpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUF1ZGlvRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2lv
cy9BdWRpb0ZpbGVSZWFkZXJJT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmguCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Zp
bGVSZWFkZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpkYXRh
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvU2Vzc2lvbklPUy5tbToK
KyAgICAgICAgKFNPRlRfTElOS19QT0lOVEVSKToKKyAgICAgICAgKC1bV2ViQXVkaW9TZXNzaW9u
SGVscGVyIGluaXRXaXRoQ2FsbGJhY2s6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1dlYkF1ZGlv
U2Vzc2lvbkhlbHBlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkF1ZGlvU2Vzc2lvbkhlbHBl
ciBpbnRlcnJ1cHRpb246XSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1Nlc3Npb246OnNldENh
dGVnb3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1h
Yy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZSk6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vYXVk
aW8vbWFjL01lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwOgorICAgICAgICAoTWVkaWFTZXNzaW9u
TWFuYWdlcjo6dXBkYXRlU2Vzc2lvblN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9TaGFy
ZWRCdWZmZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vY2YvVVJMQ0YuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2NvY29hL0tleUV2ZW50Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjp3aW5kb3dzS2V5
Q29kZUZvckNoYXJDb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lSW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6b3JpZ2luYWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpvcmlnaW5h
bFNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjplbnN1cmVG
cmFtZUluZm9Jc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lT3JpZW50YXRpb25BdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzdGFydEFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0RhcmspOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
RGlzcGxheVJlZnJlc2hNb25pdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Rm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp3
aWR0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6d29yZFNwYWNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6bGV0dGVy
U3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzZXRXb3JkU3BhY2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpzZXRMZXR0ZXJTcGFjaW5nKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOgorICAgICAgICAoaW5pdEZvbnRDYWNoZUxvY2tPbmNl
KToKKyAgICAgICAgKEZvbnRMb2NrZXI6OkZvbnRMb2NrZXIpOgorICAgICAgICAoRm9udExvY2tl
cjo6fkZvbnRMb2NrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udENhY2hlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0
UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3U2ltcGxlVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRHbHlwaHMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmZvbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cm91bmRzR2x5cGhBZHZhbmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjppbml0aWFsaXplUGFnZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdCaWRpVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBS
b3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmVtb2ppRHJh
d2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRFbW9q
aURyYXdpbmdFbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6Y29udGVudHNMYXllckZvck1lZGlhKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6OnBpeGVsQWxpZ25tZW50T2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6Omhhc0ZsYXR0ZW5lZFBlcnNwZWN0aXZlVHJhbnNmb3JtKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JY29uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdUaWxlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjppc1N1YnNhbXBsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFBvaW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbnN0YWxsZWRN
ZWRpYUVuZ2luZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmlzQ3VycmVudFBs
YXliYWNrVGFyZ2V0V2lyZWxlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6
aGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXI6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyOjpzZXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0
ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmN1cnJlbnRQbGF5YmFja1Rh
cmdldElzV2lyZWxlc3NDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpw
bGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXI6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXI6OnJlYWR5Rm9yUGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnZv
bHVtZUNoYW5nZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllckNsaWVudDo6bWVkaWFQbGF5ZXJDdXJyZW50
UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllckNsaWVudDo6bWVkaWFQbGF5ZXJQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5n
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjp2b2x1bWUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjppc0N1cnJlbnRQ
bGF5YmFja1RhcmdldFdpcmVsZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZTo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6aGFzV2lyZWxlc3NQbGF5YmFja1Rhcmdl
dHMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjp3aXJl
bGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2U6OnNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6c2V0SGFzUGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlSW50ZXJmYWNlOjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6cmVhZHlGb3JQbGF5YmFjayk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1N0cmluZ1RydW5jYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjZW50ZXJUcnVuY2F0ZVRv
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0VHJ1bmNhdGVUb0J1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpyaWdodENsaXBUb0NoYXJhY3RlckJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpyaWdodENsaXBUb1dvcmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFRydW5j
YXRlVG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6dHJ1bmNhdGVTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJUcnVuY2F0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RyaW5nVHJ1bmNhdG9yOjpsZWZ0VHJ1bmNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3Ry
aW5nVHJ1bmNhdG9yOjpyaWdodENsaXBUb0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dHJpbmdUcnVuY2F0b3I6OnJpZ2h0Q2xpcFRvV29yZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OnN1cHBvcnRz
VHlwZXNldHRpbmdGZWF0dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL0FWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGwubW06CisgICAgICAgIChXZWJDb3JlOjpB
VlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsOjpsYWJlbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OnBsYXRmb3JtTWF4VGltZUxvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjp3a0FWQXNzZXRS
ZXNvbHZlZFVSTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250
QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzdXBwb3J0c0FjY2VsZXJhdGVkRmlsdGVyQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNvbnRlbnRzTGF5ZXJGb3JNZWRpYSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNvbXB1dGVWaXNpYmxlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdlb21ldHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNSZWN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9ybUFuaW1h
dGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
c2V0dXBDb250ZW50c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
bWVkaWFMYXllck11c3RCZVVwZGF0ZWRPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNBOjpjb21wdXRlUGl4ZWxBbGlnbm1lbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvUGxhdGZvcm1DQUxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3VycmVu
dFJ1bkxvb3ApOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxlcjo6c2NoZWR1
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMubW06CisgICAgICAgICgtW1dlYkFuaW1hdGlvbkRlbGVnYXRlIGFuaW1hdGlvbkRpZFN0YXJ0
Ol0pOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRDb250ZW50c1NjYWxlKToKKyAg
ICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6aXNXZWJMYXllcik6CisgICAgICAgIChQbGF0Zm9ybUNB
TGF5ZXI6OnNldEJvdW5kc09uTWFpblRocmVhZCk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6
OnNldFBvc2l0aW9uT25NYWluVGhyZWFkKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6c2V0
QW5jaG9yUG9pbnRPbk1haW5UaHJlYWQpOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjpzZXRU
aWxlU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9s
bGVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnBsYXRmb3JtQ0FMYXll
clBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnJlbW92
ZUFsbFRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpyZW1vdmVBbGxT
ZWNvbmRhcnlUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmVtb3Zl
VGlsZXNJbkNvaG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmV2YWxp
ZGF0ZVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpjcmVhdGVUaWxl
TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0Zv
clNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lQXRJbmRleCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVDR0NvbG9yV2l0aERldmljZVdoaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUNHQ29sb3JXaXRoRGV2aWNlUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29s
b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzUkdCQ29sb3JT
cGFjZVJlZik6CisgICAgICAgIChXZWJDb3JlOjpzZXRTdHJva2VBbmRGaWxsQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlSU9TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpqcGVnVVRJKToKKyAgICAgICAgKFdlYkNvcmU6OnV0aUZyb21NSU1FVHlwZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdQYXR0ZXJuQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpJbWFnZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjppbWFnZVNvdXJjZU9w
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmltYWdlU291cmNlT3B0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6b3JpZ2luYWxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW06CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW50UmVjdENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXpl
Q0cuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW06CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhQXNzaWduKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6OmFsbG93c0xpZ2F0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpjdEZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNwbGF5
UmVmcmVzaE1vbml0b3JJT1MubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yOjp+RGlzcGxheVJlZnJlc2hNb25pdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlSZWZyZXNoTW9uaXRvcjo6cmVxdWVzdFJlZnJlc2hDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I6OmRpc3BsYXlMaW5rRmlyZWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW06IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJT1MuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5tbTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250U2VydmljZXNJT1M6OkZvbnRTZXJ2aWNlc0lPUyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBoaWNzQ29udGV4dDNESU9TLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuY3Bw
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmguCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGSU9TOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUzo6aW50ZXJuYWxJRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRSZWN0TWFjLm1tLgorICAgICAgICAoV2Vi
Q29yZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUzo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRklPUyk6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9T
Ojp+SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUyk6CisgICAgICAgIChXZWJDb3JlOjpJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TOjpraW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9pb3MvTWVkaWFQbGF5ZXJQcml2YXRlSU9TLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2lvcy9NZWRpYVBsYXllclByaXZhdGVJT1MubW06IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZvbnRIYXNWZXJ0aWNhbEdseXBocyk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRUcmFja1JlcHJlc2VudGF0aW9u
LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25JT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xv
ck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjphZGp1
c3RHbHlwaHNBbmRBZHZhbmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW06CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1hYy5tbToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3
Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Zm9udERhdGFGb3JDb21iaW5p
bmdDaGFyYWN0ZXJTZXF1ZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hvd0xldHRlcnByZXNzZWRHbHlwaHNX
aXRoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFjLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2VGcm9tRHJhd2FibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRG90UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL21hYy9JY29uTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW06
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWMubW06CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFNpemVNYWMubW06CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJveHkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9XZWJHTExheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1dlYkdMTGF5ZXIubW06CisgICAgICAgICgtW1dlYkdMTGF5ZXIgY29weUltYWdlU25hcHNo
b3RXaXRoQ29sb3JTcGFjZTpdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBkaXNwbGF5XSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6ZHJhd0xheWVyQ29udGVudHMpOgorICAgICAgICAoLVtXZWJTaW1wbGVMYXllciBkaXNw
bGF5XSk6CisgICAgICAgICgtW1dlYlNpbXBsZUxheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIubW06CisgICAgICAgICgr
W1dlYlRpbGVkTGF5ZXIgc2hvdWxkRHJhd09uTWFpblRocmVhZF0pOgorICAgICAgICAoLVtXZWJU
aWxlZExheWVyIGRpc3BsYXldKToKKyAgICAgICAgKC1bV2ViVGlsZWRMYXllciBkcmF3SW5Db250
ZXh0Ol0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpibGl0RnJh
bWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpiaW5kVmVy
dGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBw
b3J0c0V4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmRy
YXdCdWZmZXJzRVhUKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1h
dGlvbk1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
bXVsdGlwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vaW9zL0NvbnRlbnRGaWx0
ZXJJT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRGaWx0
ZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvRGV2aWNlTW90aW9uQ2xpZW50SU9TLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TOjpjcmVhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9EZXZpY2VNb3Rpb25DbGllbnRJT1MubW06IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpjcmVhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5tbTog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL0tleUV2ZW50SU9TLm1tOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9NSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9pb3MvTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmQ6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJl
c291cmNlTUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVQbGFp
blRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpzdXBwb3J0ZWRJbWFnZVR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OnN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIu
aC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW06IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9pb3MvUGxhdGZvcm1TY3JlZW5JT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2lvcy9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1tOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9pb3MvU1NMS2V5R2VuZXJhdG9ySU9TLmNwcDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5oLgorICAgICAgICAqIHBsYXRm
b3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1Njcm9sbFZpZXdJT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TY3Jv
bGxiYXJUaGVtZUlPUy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvU2Nyb2xsYmFy
VGhlbWVJT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TZWxlY3Rpb25SZWN0
LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1NlbGVjdGlvblJlY3QuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1NvdW5kSU9TLm1tOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9DaGFyc2V0RGF0YS5oLgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9TeXN0ZW1NZW1vcnlJT1MuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9pb3MvVGhlbWVJT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2ls
bFJpbmdOb25lLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGhlbWVJT1MubW06IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9uZS5jcHAuCisgICAgICAg
ICogcGxhdGZvcm0vaW9zL1RpbGVDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVDYWNoZTo6aXNTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9UaWxlQ2FjaGUubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9U
aWxlR3JpZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGlsZUdyaWQubW06IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZpbHRlci5oLgorICAgICAgICAqIHBsYXRm
b3JtL2lvcy9UaWxlR3JpZFRpbGUubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9U
aWxlTGF5ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3Bs
YXlTbGVlcERpc2FibGVyLmguCisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVMYXllci5tbTog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVMYXllclBvb2wubW06IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwLgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5tbTogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW06IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2lvcy9XZWJFdmVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvV2ViRXZlbnQubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XaWRnZXRJT1Mu
bW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5U2xlZXBEaXNhYmxlcjo6RGlzcGxheVNsZWVw
RGlzYWJsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVNsZWVwRGlzYWJsZXI6On5EaXNw
bGF5U2xlZXBEaXNhYmxlcik6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERp
c2FibGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW06CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlQ
cmVzc3VyZUhhbmRsZXI6Omluc3RhbGwpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5UHJlc3N1
cmVIYW5kbGVyOjpyZWxlYXNlTWVtb3J5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZv
cm1DbG9ja0NNLm1tOgorICAgICAgICAoUGxhdGZvcm1DbG9ja0NNOjpQbGF0Zm9ybUNsb2NrQ00p
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9TeXN0ZW1WZXJzaW9uTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJD
b3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9X
ZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJD
b3JlRnVsbFNjcmVlbldpbmRvdy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29yZU5T
Q2VsbEV4dHJhcy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFz
Lm06CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViRm9udENhY2hlLm1tOgorICAgICAgICAoK1tXZWJGb250
Q2FjaGUgZm9udFdpdGhGYW1pbHk6dHJhaXRzOnNpemU6XSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9CbG9iUmVnaXN0cnkuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5SW1wbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFs
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFnZTo6c2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpjbGVhckNyZWRlbnRpYWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbHRpblJlc291cmNlSGFu
ZGxlQ29uc3RydWN0b3JNYXApOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
Ojpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RGVm
YXVsdEFsbG93Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNl
OjpkZWZhdWx0QWxsb3dDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OlJlc291cmNlUmVxdWVzdEJhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvQ3Jl
ZGVudGlhbFN0b3JhZ2VDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3Rv
cmFnZTo6c2F2ZVRvUGVyc2lzdGVudFN0b3JhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY2YvRE5TQ0ZOZXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUHJveHlT
ZXJ2ZXJDRk5ldC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
cXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6c2V0TWFpblJlc291cmNl
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmlzTWFpblJlc291
cmNlUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVl
c3RDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZUZy
b21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRIVFRQQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3Q6OmRvVXBkYXRlUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdDo6YXBwbHlXZWJBcmNoaXZlSGFja0Zvck1haWwpOgorICAgICAgICAo
V2ViQ29yZTo6aW5pdGlhbGl6ZUhUVFBDb25uZWN0aW9uU2V0dGluZ3NPblN0YXJ0dXApOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZXBvcnRFcnJvclRvQ2xpZW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9OZXR3b3JrU3RhdGVOb3RpZmllcklP
Uy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9uZS5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RhdGVOb3RpZmllcjo6TmV0d29ya1N0YXRl
Tm90aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0YXRlTm90aWZpZXI6OnNldElz
T25MaW5lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xvb2suaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLm1tOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2lvcy9SZXNvdXJjZUhhbmRsZUlPUy5tbTogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9pb3MvV2ViQ29yZVVSTFJlc3BvbnNlSU9T
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1Ry
dW5jYXRvci5oLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvaW9zL1dlYkNvcmVVUkxSZXNw
b25zZUlPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvQXV0aGVu
dGljYXRpb25NYWMubW06CisgICAgICAgIChXZWJDb3JlOjptYWMpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvbWFjL0NyZWRlbnRpYWxTdG9yYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OnNhdmVUb1BlcnNpc3RlbnRTdG9yYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUVycm9yTWFjLm1tOgorICAgICAgICAoZGlj
dGlvbmFyeVRoYXRDYW5Db2RlKToKKyAgICAgICAgKC1bV2ViQ3VzdG9tTlNVUkxFcnJvciBlbmNv
ZGVXaXRoQ29kZXI6XSk6CisgICAgICAgIChOU0Vycm9yRnJvbUNGRXJyb3IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VFcnJvcjo6bnNFcnJvcik6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzeW5jaHJv
bm91c1dpbGxTZW5kUmVxdWVzdEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNjaGVk
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp1bnNjaGVkdWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMv
UmVzb3VyY2VSZXF1ZXN0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
OjpSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp1
cGRhdGVOU1VSTFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojph
cHBseVdlYkFyY2hpdmVIYWNrRm9yTWFpbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3Q6OnVzZVF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcyk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9tYWMvVVRJVXRpbGl0aWVzLm1tOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUubW06CisgICAgICAgICgt
W1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUgY29ubmVjdGlvblNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlOl0pOgorICAgICAgICAoLVtXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVn
YXRlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZVJlc3BvbnNlOl0pOgorICAgICAgICAoLVtXZWJDb3Jl
UmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZURhdGFBcnJheTpd
KToKKyAgICAgICAgKC1bV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSBjb25uZWN0aW9u
OmRpZFJlY2VpdmVEYXRhOmxlbmd0aFJlY2VpdmVkOl0pOgorICAgICAgICAoLVtXZWJDb3JlUmVz
b3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5nOl0pOgorICAg
ICAgICAoLVtXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246ZGlkRmFp
bFdpdGhFcnJvcjpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpzcWxpdGUzSGFuZGxlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxpdGVGaWxlU3lzdGVtOjp0cnVuY2F0ZURhdGFiYXNlRmlsZSk6CisgICAgICAgICogcGxh
dGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FM
aXRlVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb246
OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uOjpjb21taXQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb246OnJvbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uOjpzdG9wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9z
cWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3NxbC9pb3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAuCisgICAgICAgICogcGxh
dGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcC4KKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1Bs
YXRmb3JtTG9jYWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRv
cklDVS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQ29kZWNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFRleHRD
b2RlY01hcHMpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjYW5IeXBoZW5hdGUpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvbWFjL0NoYXJzZXREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxl
TWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6TG9jYWxlTWFjOjpmb3JtYXREYXRlVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2NhbGVNYWM6Om1heGltdW1XaWR0aEZvckRhdGVUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2tpcENo
YXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1doaXRlc3BhY2VDaGFyYWN0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNXb3JkRGVsaW1pdGluZ0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJD
b3JlOjppc1N5bWJvbENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc0FtYmlndW91c0Jv
dW5kYXJ5Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRva2VuaXplckZvclN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpmaW5kU2ltcGxlV29yZEJvdW5kYXJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRDb21wbGV4V29yZEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRX
b3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5leHRXb3JkRnJvbUluZGV4KToK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5oOgorCiAyMDE0LTAxLTA4ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgV2lu
ZG93cyBidWlsZCBmaXggYXR0ZW1wdCBhZnRlciByMTYxNDgxLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvTWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApp
bmRleCAwNDRhNjQ3MjA5Yzc0MjIxNjYwM2FlYjdhYzcyZjdkOGUxZWI2MjUxLi5mNTcyYTNmZjVi
N2E5Mjg4ZDA0YjBjMTI4ZDU4ZGViZjUyMzA3ZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9NYWluVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApAQCAt
MjY2LDYgKzI2NiwxMyBAQCBib29sIGlzTWFpblRocmVhZCgpCiB9CiAjZW5kaWYKIAorI2lmICFV
U0UoV0VCX1RIUkVBRCkKK2Jvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSWQpCit7CisgICAgcmV0dXJuIHRocmVhZElkID09IGN1cnJl
bnRUaHJlYWQoKTsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQogc3RhdGlj
IFRocmVhZFNwZWNpZmljPGJvb2w+KiBpc0dDVGhyZWFkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmggYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgK
aW5kZXggNTBkZWI5YTlkMTUwYjA2NDEzMjExZDZhZWY2MmQzN2MwYmM5M2Y2OS4uMTNmNTUyMDRi
ZTQ3MTJmNDEzYTdjYTY4NjExYWQ3ZTJjYWE4ZDdiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvTWFpblRocmVhZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaApAQCAtNTUs
MTMgKzU1LDE0IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1haW5UaHJlYWRDYWxsYmFj
a3NQYXVzZWQoYm9vbCBwYXVzZWQpOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc01haW5U
aHJlYWQoKTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxE
YXRhRm9yVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworCiAjaWYgVVNFKFdFQl9USFJFQUQpCiBX
VEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1dlYlRocmVhZCgpOwogV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgaXNVSVRocmVhZCgpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVdl
YlRocmVhZCgpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZUFwcGxpY2F0aW9u
VUlUaHJlYWRJZGVudGlmaWVyKCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXpl
V2ViVGhyZWFkSWRlbnRpZmllcigpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOwogdm9pZCBpbml0aWFs
aXplV2ViVGhyZWFkUGxhdGZvcm0oKTsKICNlbHNlCiBpbmxpbmUgYm9vbCBpc1dlYlRocmVhZCgp
IHsgcmV0dXJuIGlzTWFpblRocmVhZCgpOyB9CkBAIC0xMDIsMTEgKzEwMywxMyBAQCB1c2luZyBX
VEY6OmNhbmNlbENhbGxPbk1haW5UaHJlYWQ7CiB1c2luZyBXVEY6OnNldE1haW5UaHJlYWRDYWxs
YmFja3NQYXVzZWQ7CiB1c2luZyBXVEY6OmlzTWFpblRocmVhZDsKIHVzaW5nIFdURjo6aXNNYWlu
VGhyZWFkT3JHQ1RocmVhZDsKK3VzaW5nIFdURjo6Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkOwordXNpbmcgV1RGOjppc1VJVGhyZWFkOwordXNpbmcgV1RGOjppc1dlYlRocmVhZDsK
ICNpZiBVU0UoV0VCX1RIUkVBRCkKIHVzaW5nIFdURjo6aW5pdGlhbGl6ZVdlYlRocmVhZDsKIHVz
aW5nIFdURjo6aW5pdGlhbGl6ZUFwcGxpY2F0aW9uVUlUaHJlYWRJZGVudGlmaWVyOwogdXNpbmcg
V1RGOjppbml0aWFsaXplV2ViVGhyZWFkSWRlbnRpZmllcjsKLXVzaW5nIFdURjo6Y2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkOwogI2VuZGlmCiAKICNlbmRpZiAvLyBNYWluVGhyZWFk
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMGMxZmQyYzNiZWMyNGI5OTg1ZTcyYWU5MjI3Mzcz
ZmNmZWEyM2UzMS4uMjkzYWFjMTcyMjNkZTc0Y2E0MGU0MmVlMzgzM2FjNjhjZTVjYmI0ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KQEAgLTE5MTUsNiArMTkxNSw5IEBAIF93a1NpZ25hbENGUmVhZFN0
cmVhbUVuZAogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtRXJyb3IKIF93a1NpZ25hbENGUmVhZFN0cmVh
bUhhc0J5dGVzCiAKK19fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc0Fkb2JlSW5zdGFsbGVyRXYK
K19fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc01pY3Jvc29mdE15RGF5RXYKKwogI2lmICFQTEFU
Rk9STShJT1MpCiAub2JqY19jbGFzc19uYW1lX0RPTUF0dHIKIC5vYmpjX2NsYXNzX25hbWVfRE9N
Q0RBVEFTZWN0aW9uCkBAIC0yMDQzLDggKzIwNDYsNiBAQCBfX1pON1dlYkNvcmUyNmNvbnRleHRN
ZW51SXRlbVRhZ0ZvbnRNZW51RXYKIF9fWk43V2ViQ29yZTI2Y29udGV4dE1lbnVJdGVtVGFnT3Bl
bkxpbmtFdgogX19aTjdXZWJDb3JlMjZwZGZEb2N1bWVudFR5cGVEZXNjcmlwdGlvbkV2CiBfX1pO
N1dlYkNvcmUyNnVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yRXYKLV9fWk43V2ViQ29yZTI3YXBw
bGljYXRpb25Jc0Fkb2JlSW5zdGFsbGVyRXYKLV9fWk43V2ViQ29yZTI3YXBwbGljYXRpb25Jc01p
Y3Jvc29mdE15RGF5RXYKIF9fWk43V2ViQ29yZTI3Y29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRz
RXYKIF9fWk43V2ViQ29yZTI3Y29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lRXYKIF9fWk43V2Vi
Q29yZTI4Y29udGV4dE1lbnVJdGVtVGFnQ2FwaXRhbGl6ZUV2CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTVlNzNjZTc2MTZmOTQ2
NDRmZjk4NjViYjg2NGFkYjIzZGI1MTNlMS4uMGQ1MGNmY2QzN2Y4OWNjNGE5OTYyN2ViYWY1ZmZm
YjFjNGY1M2M1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTcwLDYgKzE3MCw4IEBACiAJCTA3M0JFMzRFMTdEMTgwQjIwMDJC
RDQzMSAvKiBSVENTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjIxQkFCMTdDRjBBRDQwMDg0OEU1
MSAvKiBSVENTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmNwcCAqLzsgfTsKIAkJMDczQkUz
NEYxN0QxODE4MzAwMkJENDMxIC8qIFJUQ0ljZUNhbmRpZGF0ZURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMjFCQTYxN0NGMEFE
NDAwODQ4RTUxIC8qIFJUQ0ljZUNhbmRpZGF0ZURlc2NyaXB0b3IuY3BwICovOyB9OwogCQkwNzNC
RTM1MDE3RDE4MUE2MDAyQkQ0MzEgLyogUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjIxQkE4MTdDRjBB
RDQwMDg0OEU1MSAvKiBSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwICovOyB9OworCQkwNzQz
MDBBNTBGNEI4QkNGMDA4MDc2Q0QgLyogTWVkaWFQbGF5ZXJQcml2YXRlSU9TLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc0MzAwQTMwRjRCOEJDRjAw
ODA3NkNEIC8qIE1lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbSAqLzsgfTsKKwkJMDc0MzAwQTYwRjRC
OEJDRjAwODA3NkNEIC8qIE1lZGlhUGxheWVyUHJpdmF0ZUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc0MzAwQTQwRjRCOEJDRjAwODA3NkNEIC8q
IE1lZGlhUGxheWVyUHJpdmF0ZUlPUy5oICovOyB9OwogCQkwNzUzODYwMjE0NDg5RTk4MDBCNzg0
NTIgLyogQ2FjaGVkVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3NTM4NjAwMTQ0ODlFOTgwMEI3ODQ1MiAvKiBDYWNoZWRUZXh0VHJh
Y2suY3BwICovOyB9OwogCQkwNzUzODYwMzE0NDg5RTk4MDBCNzg0NTIgLyogQ2FjaGVkVGV4dFRy
YWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzUz
ODYwMTE0NDg5RTk4MDBCNzg0NTIgLyogQ2FjaGVkVGV4dFRyYWNrLmggKi87IH07CiAJCTA3NjMw
NkQwMTdFMTQ3OEQwMDVBN0M0RSAvKiBNZWRpYVN0cmVhbVRyYWNrU291cmNlc0NhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzYzMDZDQzE3
RTE0NzhEMDA1QTdDNEUgLyogTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNDYWxsYmFjay5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMzMsNiArMzM1
LDggQEAKIAkJMDdEQzVGRDQxN0QzRUVFOTAwOTlGODkwIC8qIEpTUlRDU3RhdHNSZXNwb25zZUN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
N0RDNUZEMzE3RDNFRUU5MDA5OUY4OTAgLyogSlNSVENTdGF0c1Jlc3BvbnNlQ3VzdG9tLmNwcCAq
LzsgfTsKIAkJMDdFMTE2QjExNDg5QzlBMTAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RTExNkIw
MTQ4OUM5QTEwMEVDNUFDRSAvKiBKU1RleHRUcmFja0N1c3RvbS5jcHAgKi87IH07CiAJCTA3RTEx
NzA3MTQ4OUVCRUIwMEVDNUFDRSAvKiBKU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0UxMTcwNjE0ODlFQkVCMDBF
QzVBQ0UgLyogSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwICovOyB9OworCQkwN0VEMzVBMjE2RDZE
Q0M5MDAyMjQ4RjMgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MzU3Qzc3MTZEMkRGMEQwMEVE
OTlFNyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLm1tICovOyB9OworCQkwN0VEMzVB
MzE2RDZEQ0UyMDAyMjQ4RjMgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczNTdDNzYxNkQyREYw
RDAwRUQ5OUU3IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaCAqLzsgfTsKIAkJMDdG
OTQ0MTYxODY0RDA0NjAwNUQzMUNCIC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUU4QzA4MTc0NkI5NTcwMDUz
MkQ3OCAvKiBNZWRpYVNlc3Npb25NYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDdGRkRFNjgxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA3RkZERTY2MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZS5jcHAgKi87IH07CiAJCTA3RkZERTY5MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDdGRkRFNjcxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlLmggKi87IH07CkBAIC00NTEsNiArNDU1LDggQEAKIAkJMEYxMzE2M0UxNkVEMENDODAwMzVD
QzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYzRDE2RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZp
bHRlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjEzMTY0MDE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYzRjE2RUQw
Q0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gKi87IH07CiAJCTBGMTVEQThB
MEYzQUFFRTcwMDAwQ0U0NyAvKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNURBODkwRjNBQUVFNzAw
MDBDRTQ3IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggKi87IH07CisJCTBGMTc3NDgw
MTM3OEI3NzIwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRvcklPUy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNzc0N0UxMzc4Qjc3MTAwOURBNzZBIC8q
IFNjcm9sbEFuaW1hdG9ySU9TLmggKi87IH07CisJCTBGMTc3NDgxMTM3OEI3NzIwMDlEQTc2QSAv
KiBTY3JvbGxBbmltYXRvcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMTc3NDdGMTM3OEI3NzIwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRvcklP
Uy5tbSAqLzsgfTsKIAkJMEYyOUMxNkUxMzAwQzJFMjAwMkQ3OTRFIC8qIEFjY2Vzc2liaWxpdHlB
bGxJbk9uZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjI5QzE2RDEzMDBDMkUyMDAyRDc5NEUgLyogQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcCAq
LzsgfTsKIAkJMEYzREQ0NEYxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzREQ0NEQxMkY1RUEx
QjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovOyB9OwogCQkwRjNERDQ1MDEyRjVFQTFCMDAw
RDkxOTAgLyogU2hhZG93Qmx1ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLzsg
fTsKQEAgLTQ3NSw2ICs0ODEsNyBAQAogCQkwRjYwNUFFRDE1Rjk0ODQ4MDA0REYwQzAgLyogU2Ny
b2xsaW5nQ29uc3RyYWludHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjA1QUVCMTVGOTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NjM4M0REMTg2MTVCMjkwMDNFNURCNSAvKiBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MzgzREIxODYxNUIy
OTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAgKi87IH07CiAJCTBGNjM4M0RF
MTg2MTVCMjkwMDNFNURCNSAvKiBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM4M0RDMTg2MTVCMjkwMDNFNURC
NSAvKiBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjk3QTY1ODE1NURBODFFMDBGQURENEMgLyogRGlzcGxh
eVJlZnJlc2hNb25pdG9ySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5N0E2NTcxNTVEQTgxRTAwRkFERDRDIC8qIERpc3BsYXlSZWZyZXNoTW9u
aXRvcklPUy5tbSAqLzsgfTsKIAkJMEZBMjRENzkxNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNz
TGF5ZXJVcGRhdGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQTI0RDc3MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5j
cHAgKi87IH07CiAJCTBGQTI0RDdBMTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBk
YXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZB
MjRENzgxNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNzTGF5ZXJVcGRhdGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZBODhFQkQxNkE4RDFC
RDAwRjk5OTg0IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZU1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTg4RUJDMTZBOEQxQkQwMEY5
OTk4NCAvKiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGVNYWMubW0gKi87IH07CkBAIC04ODYs
NiArODkzLDcgQEAKIAkJMUYzQzNCRUExMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUYzQzNC
RTgxMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuY3BwICovOyB9OwogCQkxRjNDM0JF
QjEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUYzQzNCRTkxMzVDQUYzQzAwQjhDMUFDIC8qIE1l
ZGlhQ29udHJvbHMuaCAqLzsgfTsKIAkJMUYzRjE5NTMxNDk5Q0E3NjAwQTVBRUE3IC8qIFBPREZy
ZWVMaXN0QXJlbmEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFGM0YxOTUyMTQ5OUNBNzYwMEE1QUVBNyAvKiBQT0RGcmVlTGlzdEFyZW5hLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMUY2OEQ0QUUxNEJC
OURDQTAwN0I1QzYyIC8qIE1lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGNjhENEFEMTRCQjlEQ0EwMDdCNUM2
MiAvKiBNZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW0gKi87IH07CiAJCTFGQUZCRjE4MTVBNUZB
NkUwMDA4M0EyMCAvKiBVVElVdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxRkFGQkYxNzE1QTVGQTUyMDAwODNBMjAgLyogVVRJVXRpbGl0
aWVzLm1tICovOyB9OwogCQkxRkFGQkYxOTE1QTVGQTc0MDAwODNBMjAgLyogVVRJVXRpbGl0aWVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRkFGQkYx
NjE1QTVGQTUyMDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmggKi87IH07CiAJCTFGQzQwRkI5MTY1
NUNDQjYwMDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGQzQwRkI4MTY1NUM1OTEwMDQwRjI5
RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcCAqLzsgfTsKQEAgLTkxNyw2ICs5MjUsOCBA
QAogCQkyNjU1NDEzOTE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY1NTQxMzcxNDg5ODEx
QzAwMERGQzVEIC8qIEtleUV2ZW50Q29kZXNJT1MuaCAqLzsgfTsKIAkJMjY1NTQxM0ExNDg5ODEx
QzAwMERGQzVEIC8qIEtleUV2ZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjY1NTQxMzgxNDg5ODExQzAwMERGQzVEIC8qIEtleUV2ZW50SU9T
Lm1tICovOyB9OwogCQkyNjU1NDE1MjE0ODlCMjMzMDAwREZDNUQgLyogQ3Vyc29ySU9TLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2NTU0MTRCMTQ4
OUFBMkIwMDBERkM1RCAvKiBDdXJzb3JJT1MuY3BwICovOyB9OworCQkyNjYwMUVCRjE0QjNCOUFE
MDAxMkMwRkUgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2NjAxRUJEMTRCM0I5QUQwMDEyQzBGRSAvKiBQ
bGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTI2NjAxRUMwMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2
ZW50RmFjdG9yeUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI2NjAxRUJFMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlP
Uy5tbSAqLzsgfTsKIAkJMjY5MjM5OTYxNTA1RTFBQTAwOUU1N0ZDIC8qIEpTSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyNjkyMzk5MjE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAq
LzsgfTsKIAkJMjZCOTk5OEYxODAzQUU3MjAwRDAxMTIxIC8qIFJlZ2lzdGVyQWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkI5OTk4RTE4
MDNBRTcyMDBEMDExMjEgLyogUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLzsgfTsKIAkJMjZCOTk5OTEx
ODAzQjNDOTAwRDAxMTIxIC8qIFN0YWNrQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkI5OTk5MDE4MDNCM0M5MDBEMDExMjEgLyogU3Rh
Y2tBbGxvY2F0b3IuaCAqLzsgfTsKQEAgLTkzMyw2ICs5NDMsNyBAQAogCQkyNkZBRTRDRDE4NTJF
M0E1MDA0QzhDNDYgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZGQUU0QzkxODUy
RTNBNTAwNEM4QzQ2IC8qIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaCAq
LzsgfTsKIAkJMjZGQUU0Q0UxODUyRTNBNTAwNEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkZBRTRDQTE4NTJFM0E1MDA0QzhDNDYgLyogU3luY2hy
b25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcCAqLzsgfTsKIAkJ
MjZGQUU0Q0YxODUyRTNBNTAwNEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjZGQUU0Q0IxODUyRTNBNTAwNEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oICovOyB9OworCQkyOTAzNzE2NTE2QkEx
MUJDMDBGRUZERjAgLyogQ29udGVudEZpbHRlcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5MDM3MTY0MTZCQTExQkMwMEZFRkRGMCAvKiBDb250
ZW50RmlsdGVySU9TLm1tICovOyB9OwogCQkyOTE3QjU2MTE0NzM0OTZDMDA1MkM5RDAgLyogTGF5
ZXJGbHVzaFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyOTE3QjU1RTE0NzM0OTZDMDA1MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxl
ci5jcHAgKi87IH07CiAJCTI5MTdCNTYyMTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNoU2No
ZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
OTE3QjU1RjE0NzM0OTZDMDA1MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI5MTdCNTYzMTQ3MzQ5
NkMwMDUyQzlEMCAvKiBMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTE3QjU2MDE0NzM0OTZDMDA1MkM5RDAg
LyogTGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDg1LDYgKzEwOTYsMTAgQEAKIAkJMzEzMTNGNjUx
NDQzQjM1RjAwNkUyQTkwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMzEzRjYzMTQ0M0IzNUUwMDZFMkE5
MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi87IH07CiAJCTMxMzEzRjY2MTQ0M0IzNUYw
MDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzMTNGNjQxNDQzQjM1RTAwNkUyQTkwIC8qIEZpbHRl
ckVmZmVjdFJlbmRlcmVyLmggKi87IH07CiAJCTMxMzhBOUU1MTQ3NDQzNDYwMEIwRUQxMiAvKiBT
dHlsZVNoYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzEzOEE5RTQxNDc0NDM0NjAwQjBFRDEyIC8qIFN0eWxlU2hhZGVyLmggKi87IH07CisJCTMx
NDAzNzlCMTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9uTWFuYWdlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE0MDM3OTcxMjRCRUE3RjAw
QUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLmggKi87IH07CisJCTMxNDAzNzlDMTI0QkVB
N0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9uTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNDAzNzk4MTI0QkVBN0YwMEFGNDBFNCAvKiBX
ZWJDb3JlTW90aW9uTWFuYWdlci5tbSAqLzsgfTsKKwkJMzE0MDM3OUQxMjRCRUE3RjAwQUY0MEU0
IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTQwMzc5OTEyNEJFQTdGMDBBRjQwRTQgLyogRGV2aWNl
T3JpZW50YXRpb25DbGllbnRJT1MuaCAqLzsgfTsKKwkJMzE0MDM3OUUxMjRCRUE3RjAwQUY0MEU0
IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE0MDM3OUExMjRCRUE3RjAwQUY0MEU0IC8qIERldmlj
ZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1tICovOyB9OwogCQkzMTQ2RkU2RTE4NDQyMEE4MDAxQTkz
N0MgLyogT0VTVGV4dHVyZUZsb2F0TGluZWFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTQ2RkU2NjE4NDQyMDg3MDAxQTkzN0MgLyogT0VTVGV4dHVy
ZUZsb2F0TGluZWFyLmggKi87IH07CiAJCTMxNDZGRTZGMTg0NDIwQUEwMDFBOTM3QyAvKiBPRVNU
ZXh0dXJlRmxvYXRMaW5lYXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzE0NkZFNjUxODQ0MjA4NzAwMUE5MzdDIC8qIE9FU1RleHR1cmVGbG9hdExp
bmVhci5jcHAgKi87IH07CiAJCTMxNDZGRTc0MTg0NDIzNzAwMDFBOTM3QyAvKiBKU09FU1RleHR1
cmVGbG9hdExpbmVhci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTQ2RkU3MDE4NDQyMzY3MDAxQTkzN0MgLyogSlNPRVNUZXh0dXJlRmxvYXRMaW5l
YXIuY3BwICovOyB9OwpAQCAtMTEyMiw2ICsxMTM3LDcgQEAKIAkJMzE5QUUwNjMxNDJENkIyNDAw
NjU2M0ExIC8qIFN0eWxlRmlsdGVyRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTlBRTA2MTE0MkQ2QjI0MDA2NTYzQTEgLyogU3R5bGVGaWx0
ZXJEYXRhLmNwcCAqLzsgfTsKIAkJMzE5QUUwNjQxNDJENkIyNDAwNjU2M0ExIC8qIFN0eWxlRmls
dGVyRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzE5QUUwNjIxNDJENkIyNDAwNjU2M0ExIC8qIFN0eWxlRmlsdGVyRGF0YS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMxOUZCRDVGMTVEMkY0NjQw
MDk2NDBBNiAvKiBDYWNoZWRJbWFnZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzE5RkJENUQxNUQyRjQ0NDAwOTY0MEE2IC8qIENhY2hlZElt
YWdlQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMzFBQjUwMDAxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dDNESU9TLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUFCNEZGRjEy
Mjg3OEEyMDAxQTdEQjAgLyogR3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLzsgfTsKIAkJMzFDMEZG
MjEwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjFCMEU0Q0VCNkUwMDdE
NkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5jcHAgKi87IH07CiAJCTMxQzBGRjIyMEU0Q0VC
NkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGMUMwRTRDRUI2RTAwN0Q2RkU1IC8qIFdl
YktpdEFuaW1hdGlvbkV2ZW50LmggKi87IH07CiAJCTMxQzBGRjI0MEU0Q0VCNkUwMDdENkZFNSAv
KiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGMUUwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdFRyYW5z
aXRpb25FdmVudC5jcHAgKi87IH07CkBAIC0xMTM3LDYgKzExNTMsOCBAQAogCQkzMUMwRkY0RDBF
NENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGNDcwRTRDRUZERDAwN0Q2
RkU1IC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudC5tbSAqLzsgfTsKIAkJMzFDMEZGNEUwRTRD
RUZERDAwN0Q2RkU1IC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudEludGVybmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkY0ODBFNENFRkRE
MDA3RDZGRTUgLyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50SW50ZXJuYWwuaCAqLzsgfTsKIAkJ
MzFENTkxQjMxNjY5N0E2QzAwRTZCRjAyIC8qIFBsdWdJbkNsaWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFENTkxQjExNjY5N0E2QzAwRTZCRjAy
IC8qIFBsdWdJbkNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTMxRUFGOTdFMTIxNDM1QTQwMEU3QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGll
bnRJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
RUFGOTdDMTIxNDM1QTQwMEU3QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGllbnRJT1MuaCAqLzsgfTsK
KwkJMzFFQUY5N0YxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElPUy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRUFGOTdEMTIx
NDM1QTQwMEU3QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGllbnRJT1MubW0gKi87IH07CiAJCTMxRUMx
RTI4MTRGRjYwRUUwMEM5NDY2MiAvKiBKU05vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUVDMUUy
NjE0RkY2MEVFMDBDOTQ2NjIgLyogSlNOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2suY3Bw
ICovOyB9OwogCQkzMUVDMUUyOTE0RkY2MEVFMDBDOTQ2NjIgLyogSlNOb3RpZmljYXRpb25QZXJt
aXNzaW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxRUMxRTI3MTRGRjYwRUUwMEM5NDY2MiAvKiBKU05vdGlmaWNhdGlvblBlcm1pc3Np
b25DYWxsYmFjay5oICovOyB9OwogCQkzMUZCMUE1NzEyMEE1RDA2MDBEQzAyQTAgLyogRGV2aWNl
TW90aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMUZCMUE0RjEyMEE1RDA2MDBEQzAyQTAgLyogRGV2aWNlTW90aW9uQ2xpZW50LmggKi87
IH07CkBAIC0xMTc3LDYgKzExOTUsNyBAQAogCQkzNzFGNTNFOTBEMjcwNEY5MDBFQ0UwRDUgLyog
Q1NTVW5pY29kZVJhbmdlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3MUY1M0U3MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmljb2RlUmFuZ2VW
YWx1ZS5oICovOyB9OwogCQkzNzFGNTNFQTBEMjcwNEY5MDBFQ0UwRDUgLyogQ1NTVW5pY29kZVJh
bmdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzcxRjUzRTgwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcCAq
LzsgfTsKIAkJMzcyMDIxOTkxMDYyMTNDNjAwRjI1QzRCIC8qIEZvbnRTbW9vdGhpbmdNb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzIwMjE5ODEw
NjIxM0M2MDBGMjVDNEIgLyogRm9udFNtb290aGluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzNzI3REZENTE0MkFBRTQ1MDBENDQ5Q0Ig
LyogRm9udENhY2hlSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzcyN0RGRDQxNDJBQUU0NTAwRDQ0OUNCIC8qIEZvbnRDYWNoZUlPUy5tbSAqLzsg
fTsKIAkJMzcyQzAwQzQxMjk2MTFGMTAwNUM5NTc1IC8qIFRleHRCb3VuZGFyaWVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MkMwMEMzMTI5NjEx
RjEwMDVDOTU3NSAvKiBUZXh0Qm91bmRhcmllcy5jcHAgKi87IH07CiAJCTM3MkMwMEQ5MTI5NjE5
RjgwMDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzcyQzAwRDgxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25z
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzc0
NDU3MEYwREIwNUZBNTAwQUUwOTkyIC8qIFNWR0dseXBoTWFwLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzQ0NTcwRTBEQjA1RkE1MDBBRTA5OTIgLyog
U1ZHR2x5cGhNYXAuaCAqLzsgfTsKQEAgLTEyMTEsNiArMTIzMCw3IEBACiAJCTM3RERDREE3MTM4
NDUwMUMwMDA4Qjc5MyAvKiBNSFRNTFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzdERENEQTMxMzg0NTAxQzAwMDhCNzkzIC8qIE1IVE1MUGFy
c2VyLmggKi87IH07CiAJCTM3RTM1MjRCMTI0NTBDNTIwMEJBRjVEOSAvKiBJbnB1dFR5cGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdFMzUyNEEx
MjQ1MEM1MjAwQkFGNUQ5IC8qIElucHV0VHlwZS5jcHAgKi87IH07CiAJCTM3RTM1MjREMTI0NTBD
NjYwMEJBRjVEOSAvKiBJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3RTM1MjRDMTI0NTBDNjYwMEJBRjVEOSAvKiBJbnB1dFR5cGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzN0U2NTk1
MDE2M0IxMEMyMDBFQjQ1NzQgLyogU2ltcGxlRm9udERhdGFJT1MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0U2NTk0RjE2M0IxMEMyMDBFQjQ1NzQg
LyogU2ltcGxlRm9udERhdGFJT1MubW0gKi87IH07CiAJCTM3RjU2N0NFMTY1MzU4RjQwMERERTky
QiAvKiBQb3B1cE9wZW5pbmdPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3Blbmlu
Z09ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMzdGODE4RkQwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkIwRDY1
NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3RjgxOEZFMEQ2NTc2MDYwMDVFMUYwNSAv
KiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3Bv
bnNlLm1tICovOyB9OwpAQCAtMTM5NSwxMSArMTQxNSwxNiBAQAogCQk0NDFCMDU1RTBDRDc3QTQ4
MDA3QzFGMTggLyogRE9NSFRNTElGcmFtZUVsZW1lbnRQcml2YXRlLmggaW4gQ29weSBHZW5lcmF0
ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDI5QUFGRDBD
Qjg0RUE1MDA3NjQ3QzUgLyogRE9NSFRNTElGcmFtZUVsZW1lbnRQcml2YXRlLmggKi87IH07CiAJ
CTQ0MUIwNTYwMENENzdBNjUwMDdDMUYxOCAvKiBET01IVE1MT2JqZWN0RWxlbWVudFByaXZhdGUu
aCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ0MjlBQUZGMENCODRFQzMwMDc2NDdDNSAvKiBET01IVE1MT2JqZWN0RWxlbWVudFBy
aXZhdGUuaCAqLzsgfTsKIAkJNDQyQUJDRDYxN0Q5MjYyRjAwRDMwNzE1IC8qIFN5bmNocm9ub3Vz
TG9hZGVyQ2xpZW50Q0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDQyQUJDRDUxN0Q5MjYyRjAwRDMwNzE1IC8qIFN5bmNocm9ub3VzTG9hZGVy
Q2xpZW50Q0ZOZXQuY3BwICovOyB9OworCQk0NDJBRjdBOTEwMkNEREVBMDA4RkQ0RDMgLyogUXVp
Y2tMb29rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NDJBRjdBNzEwMkNEREVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNDQyQUY3QUExMDJDRERFQTAwOEZENEQz
IC8qIFF1aWNrTG9vay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ0MkFGN0E4MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2subW0gKi87IH07CiAJ
CTQ0MzExQ0Q2MTJFNEUyMkQwMDBBOEQxOSAvKiBET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQzMTFDRDQx
MkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3VtZW50RnJhZ21lbnRQcml2YXRlLmggKi87IH07CiAJ
CTQ0MzExQ0Q3MTJFNEUyMkQwMDBBOEQxOSAvKiBET01Eb2N1bWVudFByaXZhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MzExQ0Q1MTJFNEUyMkQw
MDBBOEQxOSAvKiBET01Eb2N1bWVudFByaXZhdGUuaCAqLzsgfTsKIAkJNDQzMTFDRDgxMkU0RTI0
QjAwMEE4RDE5IC8qIERPTURvY3VtZW50UHJpdmF0ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQzMTFDRDUxMkU0RTIyRDAw
MEE4RDE5IC8qIERPTURvY3VtZW50UHJpdmF0ZS5oICovOyB9OwogCQk0NDMxMUNEOTEyRTRFMjU3
MDAwQThEMTkgLyogRE9NRG9jdW1lbnRGcmFnbWVudFByaXZhdGUuaCBpbiBDb3B5IEdlbmVyYXRl
ZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MzExQ0Q0MTJF
NEUyMkQwMDBBOEQxOSAvKiBET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oICovOyB9OwogCQk0
NDMxMUY4MjEyRTRFNjZDMDAwQThEMTkgLyogRE9NRG9jdW1lbnRGcmFnbWVudEludGVybmFsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUU3MTE0NTBB
QzVENTM0MDA1MzI3MEYgLyogRE9NRG9jdW1lbnRGcmFnbWVudEludGVybmFsLmggKi87IH07CisJ
CTQ0M0YwNDI3MEU3NUM4RkIwMDdFNTQwNyAvKiBOZXR3b3JrU3RhdGVOb3RpZmllcklPUy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDNGMDQyNjBF
NzVDOEZCMDA3RTU0MDcgLyogTmV0d29ya1N0YXRlTm90aWZpZXJJT1MuY3BwICovOyB9OworCQk0
NDRENEUyMzBGNzA4QjJFMDAzMTU4RTAgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ0RDRFMjEwRjcwOEIy
RTAwMzE1OEUwIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5tbSAqLzsgfTsKKwkJNDQ3NjUzMUIx
MzMxNzA5OTAwMDZCNzg5IC8qIFNTTEtleUdlbmVyYXRvcklPUy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDc2NTMxQTEzMzE3MDk5MDAwNkI3ODkg
LyogU1NMS2V5R2VuZXJhdG9ySU9TLmNwcCAqLzsgfTsKIAkJNDQ3OTU4MDQxNjQzQjQ5QTAwMUUw
QTdGIC8qIFBhcnNlZENvbnRlbnRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NDc5NTgwMzE2NDNCNDdCMDAxRTBBN0YgLyogUGFyc2VkQ29udGVu
dFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk0NDc5NTgwNTE2NDNCNEIyMDAxRTBBN0YgLyogUGFyc2VkQ29udGVudFR5cGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ3OTU4MDIxNjQzQjQ3
QjAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRUeXBlLmNwcCAqLzsgfTsKIAkJNDQ4QTI5QkYwQTQ2
RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDhBMjlCRDBBNDZEOUNCMDAzMDc1OUYg
LyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCAqLzsgfTsKQEAgLTE0MTEsOCArMTQzNiwxNiBA
QAogCQk0NDk2RTNBMDEzOTgxM0E1MDAzRUUzMkEgLyogSlNTVkdNUGF0aEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OTZFMzlGMTM5ODEz
QTUwMDNFRTMyQSAvKiBKU1NWR01QYXRoRWxlbWVudC5oICovOyB9OwogCQk0NDk2RTNBMjEzOTgx
M0NCMDAzRUUzMkEgLyogSlNTVkdNUGF0aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ5NkUzQTExMzk4MTNDQjAwM0VFMzJBIC8qIEpT
U1ZHTVBhdGhFbGVtZW50LmNwcCAqLzsgfTsKIAkJNDQ5QjE5RjUwRkE3MkVDRTAwMTVDQTRBIC8q
IEhUTUxQYXJzZXJRdWlya3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0OUIxOUYzMEZBNzJFQ0UwMDE1Q0E0QSAvKiBIVE1MUGFyc2VyUXVpcmtzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNDRBMjBE
QjkwRjg0MTY2QzAwQjNFMUZFIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRBMjBEQjgwRjg0MTY2QzAwQjNF
MUZFIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ0QTI4QUFDMTJERkI4QUMwMEFFOTIzQiAvKiBNYXRo
TUxFbGVtZW50RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDRBMjhBQUIxMkRGQjhBQzAwQUU5MjNCIC8qIE1hdGhNTEVsZW1lbnRGYWN0b3J5
LmggKi87IH07CiAJCTQ0QTI4QUFGMTJERkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRBMjhBQUUxMkRG
QjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi87IH07CisJCTQ0QzM2M0YwMEZBQTdCQjMw
MDk3RjhDQyAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QzM2M0VFMEZBQTdCQjMwMDk3RjhDQyAv
KiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NEMzNjNGMTBGQUE3QkIzMDA5N0Y4Q0MgLyogUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDRDMzYzRUYwRkFBN0JCMzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBs
aWNhdGlvbkNoZWNrc0lPUy5tbSAqLzsgfTsKKwkJNDRDM0NGRTgxNTU2QkU1RDAwMDEzNjA5IC8q
IFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QzNDRkU3MTU1NkJFNUQwMDAxMzYwOSAvKiBXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlSU9TLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNDRDOTkxODIwRjNEMUUwRDAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRDOTkx
ODEwRjNEMUUwRDAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLm1tICovOyB9OworCQk0NEM5
OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Qzk5MTg1MEYzRDFFQkUwMDU4NjY3
MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5oICovOyB9OworCQk0NEM5OTE5RjBGM0QyMTBFMDA1ODY2
NzAgLyogVGhlbWVJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ0Qzk5MTlEMEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5oICovOyB9OworCQk0
NEM5OTFBMDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEM5OTE5RTBGM0QyMTBFMDA1ODY2NzAgLyog
VGhlbWVJT1MubW0gKi87IH07CiAJCTQ0REFCNUIxMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNp
b25zM0RPcGVuR0xDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDREQUI1QUYxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbi5jcHAgKi87IH07CiAJCTQ0REFCNUIyMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNp
b25zM0RPcGVuR0xDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0REFCNUIwMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xD
b21tb24uaCAqLzsgfTsKIAkJNDUwOTlDNDExMzcwQTc4MDAwNThENTEzIC8qIEljb25VUkwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUwOTlDNDAx
MzcwQTc4MDAwNThENTEzIC8qIEljb25VUkwuY3BwICovOyB9OwpAQCAtMjI0Miw4ICsyMjc1LDEy
IEBACiAJCTdFMTJFOTEwMTVGQTVEM0EwMDVFNDEyNiAvKiBDdXN0b21GaWx0ZXJNZXNoR2VuZXJh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdF
MTJFOTBFMTVGQTVEM0EwMDVFNDEyNiAvKiBDdXN0b21GaWx0ZXJNZXNoR2VuZXJhdG9yLmNwcCAq
LzsgfTsKIAkJN0UzM0NEMDExMjdGMzQwRDAwQkU4RjE3IC8qIFB1cmdlUHJpb3JpdHkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFMzNDRDAwMTI3RjM0
MEQwMEJFOEYxNyAvKiBQdXJnZVByaW9yaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0UzN0VGMkUxMzM5MjA4ODAwQjI5MjUwIC8qIFN1YnJl
c291cmNlTG9hZGVyQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0UzN0VGMkQxMzM5MjA4ODAwQjI5MjUwIC8qIFN1YnJlc291cmNlTG9hZGVyQ0Yu
Y3BwICovOyB9OworCQk3RTQyOENFNTEzRTM0MDdGMDAzQjY2MUMgLyogUmVzb3VyY2VIYW5kbGVJ
T1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTQy
OENFNDEzRTM0MDdGMDAzQjY2MUMgLyogUmVzb3VyY2VIYW5kbGVJT1MubW0gKi87IH07CiAJCTdF
NDZGNkZBMTYyN0EyQ0EwMDA2MjIyMyAvKiBKU09FU0VsZW1lbnRJbmRleFVpbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0NkY2RjgxNjI3QTJD
OTAwMDYyMjIzIC8qIEpTT0VTRWxlbWVudEluZGV4VWludC5jcHAgKi87IH07CiAJCTdFNDZGNkZC
MTYyN0EyQ0EwMDA2MjIyMyAvKiBKU09FU0VsZW1lbnRJbmRleFVpbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNDZGNkY5MTYyN0EyQzkwMDA2MjIy
MyAvKiBKU09FU0VsZW1lbnRJbmRleFVpbnQuaCAqLzsgfTsKKwkJN0U0NzRFMUUxMjQ5NERDOTAw
MjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0NzRFMUIxMjQ5NERDOTAwMjM1MzY0IC8q
IFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTdFNDc0RTFGMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxp
dGVEYXRhYmFzZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdFNDc0RTFDMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNr
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
RTQ3NEUyMDEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNDc0RTFEMTI0OTRE
QzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwICovOyB9OwogCQk3RTVEN0E3
NjE2MUQzRjhGMDA4OTZDMzQgLyogT0VTRWxlbWVudEluZGV4VWludC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTVEN0E3MzE2MUQzRjhGMDA4OTZD
MzQgLyogT0VTRWxlbWVudEluZGV4VWludC5jcHAgKi87IH07CiAJCTdFNUQ3QTc3MTYxRDNGOEYw
MDg5NkMzNCAvKiBPRVNFbGVtZW50SW5kZXhVaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTVEN0E3NDE2MUQzRjhGMDA4OTZDMzQgLyogT0VTRWxl
bWVudEluZGV4VWludC5oICovOyB9OwogCQk3RTY2RTIzMzE2RDZFQjZDMDBGN0U3RkYgLyogV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3RTY2RTIzMTE2RDZFQjZDMDBGN0U3RkYgLyogV2ViR0xDb21wcmVz
c2VkVGV4dHVyZUFUQy5jcHAgKi87IH07CkBAIC0zNTQxLDYgKzM1NzgsOCBAQAogCQlBNTAyQzVE
RjEzMDQ5QjM1MDBGQzdENTMgLyogV2ViU2FmZUdDQWN0aXZpdHlDYWxsYmFja0lPUy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUwMkM1REQxMzA0OUIz
NTAwRkM3RDUzIC8qIFdlYlNhZmVHQ0FjdGl2aXR5Q2FsbGJhY2tJT1MuaCAqLzsgfTsKIAkJQTUx
M0IzRDcxMTRCMTY2NjAwMUM0MjlCIC8qIEtleUV2ZW50Q29jb2EuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1Qzk3NENGMTE0ODVGRjEwMDY2RjJBQiAv
KiBLZXlFdmVudENvY29hLmggKi87IH07CiAJCUE1MTNCM0Q4MTE0QjE2NkEwMDFDNDI5QiAvKiBL
ZXlFdmVudENvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTVDOTc0RDAxMTQ4NUZGMTAwNjZGMkFCIC8qIEtleUV2ZW50Q29jb2EubW0gKi87IH07
CisJCUE1MTZFOEI3MTM2RTA0REIwMDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MTZFOEI0MTM2RTA0
REIwMDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUuaCAqLzsgfTsKKwkJQTUxNkU4QjgxMzZF
MDREQjAwNzZDM0MwIC8qIExvY2FsaXplZERhdGVDYWNoZS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MTZFOEI1MTM2RTA0REIwMDc2QzNDMCAvKiBM
b2NhbGl6ZWREYXRlQ2FjaGUubW0gKi87IH07CiAJCUE1NEE4MkVDMTUyMjhEMkYwMEM3MkJBNiAv
KiBET01Ob2RlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTU0QTgyRUExNTIyOENBMzAwQzcyQkE2IC8qIERPTU5vZGVQcml2YXRlLmggKi87
IH07CiAJCUE1NEE4MkYxMTUyMjhERjYwMEM3MkJBNiAvKiBET01Ob2RlUHJpdmF0ZS5oIGluIENv
cHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTU0QTgyRUExNTIyOENBMzAwQzcyQkE2IC8qIERPTU5vZGVQcml2YXRlLmggKi87IH07CiAJCUE1
NzMyQjBBMTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTczMkIwODEzNkExNjFEMDA1QzhE
N0MgLyogRGF0ZUNvbXBvbmVudHMuY3BwICovOyB9OwpAQCAtNDAxMSw2ICs0MDUwLDcgQEAKIAkJ
QTlEMjQ4MDcwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5RDI0ODAzMEQ3NTdFN0QwMEZERjk1
OSAvKiBKU0RPTU1pbWVUeXBlLmggKi87IH07CiAJCUE5RDI0ODA4MEQ3NTdFN0QwMEZERjk1OSAv
KiBKU0RPTU1pbWVUeXBlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTlEMjQ4MDQwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGVB
cnJheS5jcHAgKi87IH07CiAJCUE5RDI0ODA5MEQ3NTdFN0QwMEZERjk1OSAvKiBKU0RPTU1pbWVU
eXBlQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE5RDI0ODA1MEQ3NTdFN0QwMEZERjk1OSAvKiBKU0RPTU1pbWVUeXBlQXJyYXkuaCAqLzsgfTsK
KwkJQUExMkRGNDkxNzQzREY4MzAwNERBRkRGIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJJ
T1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQUUz
NzU1RDE3NDI5QkNDMDA2MjAwQzIgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcklPUy5tbSAq
LzsgfTsKIAkJQUEyMUVDQ0EwQUJGMEZCQTAwMkI4MzRDIC8qIENTU0N1cnNvckltYWdlVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUEwOTc4
RUQwQUJBQTZFMTAwODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUuY3BwICovOyB9OwogCQlB
QTIxRUNDRDBBQkYwRkM2MDAyQjgzNEMgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUEwOTc4RUUwQUJBQTZFMTAw
ODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBQTJBNUFDRDE2QTQ4NUZBMDA5NzVBMjUgLyogU3Bl
ZWNoU3ludGhlc2lzVm9pY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUEyQTVBQzYxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc1Zv
aWNlLmNwcCAqLzsgfTsKQEAgLTUyNjQsNiArNTMwNCw4IEBACiAJCUJFOEVGMDRDMTcxQzkwMTQw
MDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2tMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFOEVGMDQ4MTcxQzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVv
VHJhY2tMaXN0LmNwcCAqLzsgfTsKIAkJQkU4RUYwNEQxNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlk
ZW9UcmFja0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJFOEVGMDQ5MTcxQzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2tMaXN0LmggKi87IH07
CiAJCUJFOTEzRDgwMTgxRUY5MjQwMERDQjA5RSAvKiBUcmFja1ByaXZhdGVCYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCRTkxM0Q3RjE4MUVGOEU1
MDBEQ0IwOUUgLyogVHJhY2tQcml2YXRlQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUJFQTgwN0M4MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxl
Y3Rpb25SZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJFQTgwN0M2MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmNwcCAqLzsgfTsK
KwkJQkVBODA3QzkwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFQTgwN0M3MEY3MTRBMDMwMDUy
NDE5OSAvKiBTZWxlY3Rpb25SZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQkVGMjlFRUIxNzE1REQwOTAwQzRCNEM5IC8qIEF1ZGlvVHJhY2tQ
cml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
RUYyOUVFOTE3MTVERDA5MDBDNEI0QzkgLyogQXVkaW9UcmFja1ByaXZhdGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCRUYyOUVFQzE3MTVERDA5
MDBDNEI0QzkgLyogVmlkZW9UcmFja1ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFRjI5RUVBMTcxNUREMDkwMEM0QjRDOSAvKiBWaWRlb1Ry
YWNrUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUMwNDZFMUFDMTIwOEE5RkUwMEJBMkNGNyAvKiBMb2NhbGl6ZWRTdHJpbmdzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwNDZFMUFCMTIw
OEE5RkUwMEJBMkNGNyAvKiBMb2NhbGl6ZWRTdHJpbmdzLmNwcCAqLzsgfTsKQEAgLTUzMDcsNiAr
NTM0OSw4IEBACiAJCUM1NUUzOEMwMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNl
SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTVFMzhCQzEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwICovOyB9
OwogCQlDNTcyRUUxRjEyMDFDOUJDMDA3RDhGODIgLyogSlNJREJJbmRleC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3MkVFMUQxMjAxQzlCQzAwN0Q4
RjgyIC8qIEpTSURCSW5kZXguaCAqLzsgfTsKIAkJQzU3RkVERTExMjEyRUU5QzAwOTdCRTY1IC8q
IEZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzU3RkVERTAxMjEyRUU5QzAwOTdCRTY1IC8qIEZpbGVTeXN0ZW0uY3BwICovOyB9Owor
CQlDNTgzNjFBOTE3NDQ1MjNGMDAxNzM1MTEgLyogRm9udFNlcnZpY2VzSU9TLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTgzNjFBNzE3NDQ1MjNGMDAx
NzM1MTEgLyogRm9udFNlcnZpY2VzSU9TLmggKi87IH07CisJCUM1ODM2MUFBMTc0NDUyM0YwMDE3
MzUxMSAvKiBGb250U2VydmljZXNJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNTgzNjFBODE3NDQ1MjNGMDAxNzM1MTEgLyogRm9udFNlcnZpY2Vz
SU9TLm1tICovOyB9OwogCQlDNTg1QTY2MjExRDRGQUM1MDA0QzNFNEIgLyogSURCQmluZGluZ1V0
aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNTg1QTY2MDExRDRGQUM1MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5jcHAgKi87
IH07CiAJCUM1ODVBNjYzMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTY2MTEx
RDRGQUM1MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5oICovOyB9OwogCQlDNTg1QTY3
RDExRDRGQjA4MDA0QzNFNEIgLyogSlNJREJBbnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNjY1MTFENEZCMDcwMDRDM0U0QiAvKiBKU0lEQkFu
eS5oICovOyB9OwpAQCAtNTM4MCw2ICs1NDI0LDggQEAKIAkJQ0Q1NEE3NjMxODBGOUY3MDAwQjA3
NkM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDU0QTc2MTE4MEY5RjcwMDBCMDc2
QzkgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKIAkJQ0Q1
NERFNDcxNzQ2OEI2RjAwNUU1QjM2IC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1NERFNDUxNzQ2OEI2
RjAwNUU1QjM2IC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwICovOyB9OwogCQlDRDU0REU0
QjE3NDY5QzZEMDA1RTVCMzYgLyogQXVkaW9TZXNzaW9uTWFjLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTRERTQ5MTc0NjlDNkQwMDVFNUIzNiAv
KiBBdWRpb1Nlc3Npb25NYWMuY3BwICovOyB9OworCQlDRDU1OTY5MTE0NzVCNjc4MDAxRDBCRDAg
LyogQXVkaW9GaWxlUmVhZGVySU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENENTU5NjhGMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFk
ZXJJT1MuY3BwICovOyB9OworCQlDRDU1OTY5MjE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxl
UmVhZGVySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRDU1OTY5MDE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9TLmggKi87IH07
CiAJCUNENjFGRTY3MTc5NEFBREIwMDQxMDFFQiAvKiBNZWRpYVNvdXJjZVJlZ2lzdHJ5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxQTk0MkUxMTVC
NUNFMjIwMEQ1MjVEMSAvKiBNZWRpYVNvdXJjZVJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJQ0Q2MUZF
NjgxNzk0QUFEQjAwNDEwMUVCIC8qIE1lZGlhU291cmNlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxQTk0MkUyMTVCNUNFMjIwMEQ1MjVE
MSAvKiBNZWRpYVNvdXJjZVJlZ2lzdHJ5LmggKi87IH07CiAJCUNENjQxRUIzMTgxOEY1RUQwMEVF
NEM0MSAvKiBNZWRpYVNvdXJjZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENENjQxRUIxMTgxOEY1RUQwMEVFNEM0MSAvKiBNZWRpYVNvdXJj
ZVByaXZhdGUuaCAqLzsgfTsKQEAgLTU0NDQsNiArNTQ5MCw3IEBACiAJCUNEQzhCNUFBMTgwNDdG
RjEwMDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUE4MTgwNDdGRjEwMDE2RTY4
NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbSAqLzsgfTsKIAkJQ0RDOEI1QUIxODA0
N0ZGMTAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBOTE4MDQ3RkYxMDAxNkU2
ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCAqLzsgfTsKIAkJQ0RDOEI1QUQxODA0
QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUFDMTgwNEFFNUQwMDE2RTY4
NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmggKi87IH07CisJCUNEQ0E4Mjk2MTY3OTEw
MEYwMDg3NTcxNCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0E4Mjk0MTY3OTEwMEYwMDg3NTcx
NCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbSAqLzsgfTsKIAkJQ0RENTI1RDcxNDVC
NkREMDAwOEQyMDREIC8qIEpTSFRNTE1lZGlhRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY2NUNDQzE0NUI2QUZFMDBDNEM3
QUEgLyogSlNIVE1MTWVkaWFFbGVtZW50Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQ0RENzA4OTYxODM1
OUY2RjAwMkIzREM2IC8qIFNhbXBsZU1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREQ3MDg5NDE4MzU5RjZFMDAyQjNEQzYgLyogU2FtcGxlTWFw
LmNwcCAqLzsgfTsKIAkJQ0RENzA4OTcxODM1OUY2RjAwMkIzREM2IC8qIFNhbXBsZU1hcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RENzA4OTUxODM1
OUY2RjAwMkIzREM2IC8qIFNhbXBsZU1hcC5oICovOyB9OwpAQCAtNTgwMCw2ICs1ODQ3LDggQEAK
IAkJRTFGRjhGNkMxODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRkY4RjZB
MTgwREI1QkUwMDEzMjY3NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAgKi87IH07CiAJ
CUUxRkY4RjZEMTgwREI1QkUwMDEzMjY3NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGRjhGNkIxODBE
QjVCRTAwMTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmggKi87IH07CiAJCUU0MDFD
Mjc1MTdDRTUzRUMwMEM0MUEzNSAvKiBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDAxQzI3NDE3Q0U1M0VD
MDBDNDFBMzUgLyogRWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oICovOyB9OworCQlFNDI0QTM5
RTEzMzBERjAxMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDI0QTM5RDEzMzBERjAxMDBDRjZEQzkgLyogVGls
ZUdyaWRUaWxlLmggKi87IH07CisJCUU0MjRBM0EwMTMzMERGMUUwMENGNkRDOSAvKiBUaWxlR3Jp
ZFRpbGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NDI0QTM5RjEzMzBERjFFMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLm1tICovOyB9OwogCQlFNDI1
QTQ5QTE4MjkyQjg0MDAyMENGQ0YgLyogQ29sbGVjdGlvbkluZGV4Q2FjaGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MjVBNDk5MTgyOTJCODQwMDIw
Q0ZDRiAvKiBDb2xsZWN0aW9uSW5kZXhDYWNoZS5oICovOyB9OwogCQlFNDI5NUZBNDEyQjA2MTRF
MDBEMUFDRTAgLyogUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0Mjk1RkEzMTJCMDYxNEUwMEQxQUNFMCAvKiBSZXNv
dXJjZUxvYWRQcmlvcml0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUU0MzEwNUI4MTY3NTBGMEMwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MzEwNUI3
MTY3NTBGMEMwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmNwcCAqLzsgfTsKQEAgLTU4NDUsOCAr
NTg5NCwxNSBAQAogCQlFNDRFRTNBODE3NTc3RUJEMDBFRUU4Q0YgLyogRm9udEdlbmVyaWNGYW1p
bGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NDRFRTNBNjE3NTc2RTU1MDBFRUU4Q0YgLyogRm9udEdlbmVyaWNGYW1pbGllcy5jcHAgKi87IH07
CiAJCUU0NTMyMkFCMTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTMyMkE5MTQwQ0UyNjcw
MDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmNwcCAqLzsgfTsKIAkJRTQ1MzIyQUMxNDBDRTI2NzAw
NUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0NTMyMkFBMTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5
LmggKi87IH07CisJCUU0NTM5MDFEMEVBRkNBQ0EwMDM2OTVDOCAvKiBNSU1FVHlwZVJlZ2lzdHJ5
SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1
MzkwMTgwRUFGQ0FDQTAwMzY5NUM4IC8qIE1JTUVUeXBlUmVnaXN0cnlJT1MubW0gKi87IH07CiAJ
CUU0NTM5MDFFMEVBRkNBQ0EwMDM2OTVDOCAvKiBQYXN0ZWJvYXJkSU9TLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1MzkwMTkwRUFGQ0FDQTAwMzY5
NUM4IC8qIFBhc3RlYm9hcmRJT1MubW0gKi87IH07CisJCUU0NTM5MDQzMEVBRkQ2MzcwMDM2OTVD
OCAvKiBQbGF0Zm9ybVNjcmVlbklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0NTM5MDMyMEVBRkQ2MzcwMDM2OTVDOCAvKiBQbGF0Zm9ybVNjcmVl
bklPUy5tbSAqLzsgfTsKKwkJRTQ1MzkwNDUwRUFGRDYzNzAwMzY5NUM4IC8qIFNjcm9sbFZpZXdJ
T1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUz
OTAzNDBFQUZENjM3MDAzNjk1QzggLyogU2Nyb2xsVmlld0lPUy5tbSAqLzsgfTsKIAkJRTQ1Mzkw
NDYwRUFGRDYzNzAwMzY5NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1MzkwMzUwRUFGRDYzNzAwMzY5NUM4IC8q
IFNoYXJlZFRpbWVySU9TLm1tICovOyB9OworCQlFNDUzOTA0NzBFQUZENjM3MDAzNjk1QzggLyog
U291bmRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDUzOTAzNjBFQUZENjM3MDAzNjk1QzggLyogU291bmRJT1MubW0gKi87IH07CisJCUU0NTM5
MDQ5MEVBRkQ2MzcwMDM2OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1MzkwMzgwRUFGRDYz
NzAwMzY5NUM4IC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW0gKi87IH07CisJCUU0NTM5
MDREMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUzOTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lk
Z2V0SU9TLm1tICovOyB9OworCQlFNDUzOTBBRTBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVt
b3J5SU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0NTM5MEFEMEVBRkY0QjUwMDM2OTVDOCAvKiBTeXN0ZW1NZW1vcnlJT1MuY3BwICovOyB9Owog
CQlFNDYyQTRBMTExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQy
MjAgLyogSW50UG9pbnRIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTQ2QTJCMUMxN0NBNjVCOTAwMERCQ0Q4IC8qIEVsZW1lbnREZXNjZW5k
YW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0NkEyQjFCMTdDQTY1QjkwMDBEQkNEOCAvKiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9y
LmggKi87IH07CiAJCUU0NkEyQjFFMTdDQTc2QjEwMDBEQkNEOCAvKiBFbGVtZW50Q2hpbGRJdGVy
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2
QTJCMUQxN0NBNzZCMTAwMERCQ0Q4IC8qIEVsZW1lbnRDaGlsZEl0ZXJhdG9yLmggKi87IH07CkBA
IC01ODczLDYgKzU5MjksMTAgQEAKIAkJRTRBRkQwMEUwREFGMzM1NTAwRjVGNTVDIC8qIFNNSUxU
aW1lQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNEFGRDAwODBEQUYzMzU0MDBGNUY1NUMgLyogU01JTFRpbWVDb250YWluZXIuaCAqLzsg
fTsKIAkJRTRBRkQwMEYwREFGMzM1NTAwRjVGNTVDIC8qIFNWR1NNSUxFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUZEMDA5MERBRjMz
NTQwMEY1RjU1QyAvKiBTVkdTTUlMRWxlbWVudC5jcHAgKi87IH07CiAJCUU0QUZEMDEwMERBRjMz
NTUwMEY1RjU1QyAvKiBTVkdTTUlMRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRkQwMEEwREFGMzM1NDAwRjVGNTVDIC8qIFNWR1NNSUxF
bGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRTRCNjVBNTgxMzJGQThFNzAwNzBFN0JFIC8qIFRpbGVHcmlkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1NzEzMkZBOEU3MDA3MEU3QkUg
LyogVGlsZUdyaWQuaCAqLzsgfTsKKwkJRTRCNjVBNUExMzJGQUFGOTAwNzBFN0JFIC8qIFRpbGVH
cmlkLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRC
NjVBNTkxMzJGQUFGOTAwNzBFN0JFIC8qIFRpbGVHcmlkLm1tICovOyB9OworCQlFNEI2NUE1QzEz
MkZBQ0IwMDA3MEU3QkUgLyogVGlsZUxheWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1QjEzMkZBQ0IwMDA3MEU3QkUgLyogVGlsZUxheWVy
LmggKi87IH07CisJCUU0QjY1QTVFMTMyRkFEQjYwMDcwRTdCRSAvKiBUaWxlTGF5ZXIubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1RDEzMkZB
REI2MDA3MEU3QkUgLyogVGlsZUxheWVyLm1tICovOyB9OwogCQlFNEJCRUQwRTE0RjQwMjVEMDAz
RjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QkJFRDBDMTRGNDAyNUQwMDNGMEI5
OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwICovOyB9OwogCQlFNEJCRUQw
RjE0RjQwMjVEMDAzRjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEJCRUQwRDE0RjQw
MjVEMDAzRjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmggKi87IH07CiAJ
CUU0QkJFRDRDMTRGQ0RCQTEwMDNGMEI5OCAvKiBTdHlsZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCQkVENEExNEZDREJBMTAwM0YwQjk4
IC8qIFN0eWxlUnVsZS5jcHAgKi87IH07CkBAIC01ODgxLDYgKzU5NDEsOCBAQAogCQlFNEMxNzg5
QjBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMxNzg5NjBFRTY5MDM4MDA4MjRENjkgLyog
Q1NTU2VsZWN0b3JMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTRDMjc5NTgwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzI3OTU2MENG
OTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgKi87IH07CiAJCUU0QzI3OTU5MENGOTc0
MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlh
LmggKi87IH07CisJCUU0QzNCMUZBMEYwRTQxNjEwMDk2OTNGNiAvKiBUaWxlQ2FjaGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzNCMUY5MEYwRTQx
NjEwMDk2OTNGNiAvKiBUaWxlQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlFNEMzQjFGQzBGMEU0MTcwMDA5NjkzRjYgLyogVGlsZUNhY2hl
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDM0Ix
RkIwRjBFNDE3MDAwOTY5M0Y2IC8qIFRpbGVDYWNoZS5tbSAqLzsgfTsKIAkJRTRDOTFBMEUxODAy
MzQzMTAwQTE3RjZEIC8qIFRleHRQYWludFN0eWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEM5MUEwRDE4MDIzNDMxMDBBMTdGNkQgLyogVGV4dFBh
aW50U3R5bGUuaCAqLzsgfTsKIAkJRTRDOTFBMTAxODAyMzQzOTAwQTE3RjZEIC8qIFRleHRQYWlu
dFN0eWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0QzkxQTBGMTgwMjM0MzkwMEExN0Y2RCAvKiBUZXh0UGFpbnRTdHlsZS5jcHAgKi87IH07CiAJ
CUU0QzkxQTE2MTgwOTk5RjEwMEExN0Y2RCAvKiBSZW5kZXJUZXh0TGluZUJveGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEM5MUExNTE4MDk5OUYx
MDBBMTdGNkQgLyogUmVuZGVyVGV4dExpbmVCb3hlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01ODk2LDYgKzU5NTgsOCBAQAogCQlFNEQ5ODhC
NjE3QkZFQjIxMDA4NEZCODggLyogVGV4dE5vZGVUcmF2ZXJzYWwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTREOTg4QjUxN0JGRUIyMTAwODRGQjg4
IC8qIFRleHROb2RlVHJhdmVyc2FsLmNwcCAqLzsgfTsKIAkJRTRERUFBMTcxN0E5M0RDMzAwMEUw
NDMwIC8qIFN0eWxlUmVzb2x2ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTRERUFBMTUxN0E5M0RDMzAwMEUwNDMwIC8qIFN0eWxlUmVzb2x2
ZVRyZWUuY3BwICovOyB9OwogCQlFNERFQUExODE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVSZXNv
bHZlVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRERUFBMTYxN0E5M0RDMzAwMEUwNDMwIC8qIFN0eWxlUmVzb2x2ZVRyZWUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFNEUzOUFGQjEzMzBFRkE4
MDAzQUIyNzQgLyogVGlsZUxheWVyUG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTRFMzlBRkExMzMwRUZBODAwM0FCMjc0IC8qIFRpbGVMYXllclBv
b2wuaCAqLzsgfTsKKwkJRTRFMzlBRkQxMzMwRUZDNjAwM0FCMjc0IC8qIFRpbGVMYXllclBvb2wu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEUzOUFG
QzEzMzBFRkM1MDAzQUIyNzQgLyogVGlsZUxheWVyUG9vbC5tbSAqLzsgfTsKIAkJRTRFOUIxMTkx
ODEwOTE2RjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRFOUIxMTgxODEwOTE2RjAwM0FD
Q0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oICovOyB9OwogCQlFNEU5QjExQjE4MTQ1
NjkyMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU5QjExQTE4MTQ1NjkyMDAzQUND
REYgLyogU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAgKi87IH07CiAJCUU0RTlCMTFEMTgx
NDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU5QjExQzE4MTQ1NjlDMDAzQUND
REYgLyogU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oICovOyB9OwpAQCAtNjMyNSw2ICs2Mzg5
LDggQEAKIAkJRkRGN0U5QzMxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREY3
RTlDMTEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmNwcCAqLzsgfTsK
IAkJRkRGN0U5QzQxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRGN0U5QzIxM0FD
MjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oICovOyB9OwogCQlGRTA5REI0
OTE2OUUyRDZFMDA2MjI1NTcgLyogRGF0YWJhc2VFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwOURCNDYxNjlFMkQ2RTAwNjIyNTU3IC8qIERh
dGFiYXNlRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlGRTBEODRFOTEwNDg0MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ4NEU4MTA0ODQzNDgwMDFB
MTc5RSAvKiBXZWJFdmVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZFMEQ4NEVCMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ4NEVBMTA0ODQz
NkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSAqLzsgfTsKIAkJRkUxMTVGQUIxNjc5ODhDRDAwMjQ5
MTM0IC8qIEFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTE1RkE5MTY3OTg4Q0QwMDI0OTEzNCAvKiBBYnN0cmFj
dERhdGFiYXNlU2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRkUxNkNGRDMxNjlEMURFRDAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTE2Q0ZD
RjE2OUQxREVDMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kLmNwcCAqLzsgfTsKIAkJRkUxNkNG
RDQxNjlEMURFRDAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxNkNGRDAxNjlEMURFQzAwRDNBMEM3IC8q
IERhdGFiYXNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC02MzYzLDYgKzY0MjksNyBAQAogCQlGRUJDNUYzMjE2QkQwQ0MzMDA2NTlC
RDMgLyogRGF0YWJhc2VCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRUJDNUYzMDE2QkQwQ0MzMDA2NTlCRDMgLyogRGF0YWJhc2VCYXNlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVEMTNEM0Ew
Q0VBOTM0NjAwRDg5NDY2IC8qIEVkaXRvcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDEzRDM5MENFQTkzNDYwMEQ4OTQ2NiAvKiBFZGl0b3JJ
T1MubW0gKi87IH07CiAJCUZFRDEzRDNEMENFQTkzNkEwMEQ4OTQ2NiAvKiBGcmFtZUlPUy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDEzRDNCMENF
QTkzNkEwMEQ4OTQ2NiAvKiBGcmFtZUlPUy5tbSAqLzsgfTsKKwkJRkVEMTNENDAwQ0VBOTM5NDAw
RDg5NDY2IC8qIEljb25JT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRUQxM0QzRjBDRUE5Mzk0MDBEODk0NjYgLyogSWNvbklPUy5tbSAqLzsgfTsK
IAkJRkVEMTNENTIwQ0VBOTQ5NzAwRDg5NDY2IC8qIFJlbmRlclRoZW1lSU9TLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQxM0Q1MDBDRUE5NDk3MDBE
ODk0NjYgLyogUmVuZGVyVGhlbWVJT1MuaCAqLzsgfTsKIAkJRkVENDgzOTBDRUQ2NkMzMjU1Rjcy
QzU5IC8qIE1hdGhNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjc1QTA1OUFGMTcwRDhGQUE1QjhDQUJFIC8qIE1hdGhNTFNl
bGVjdEVsZW1lbnQuY3BwICovOyB9OwogCQlGRURFRjg0MTE2Nzk3MTA4MDAwRTQ0NEEgLyogRGF0
YWJhc2VTdHJhdGVneS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRURFRjgzRjE2Nzk3MTA4MDAwRTQ0NEEgLyogRGF0YWJhc2VTdHJhdGVneS5jcHAg
Ki87IH07CkBAIC02ODQwLDYgKzY5MDcsOCBAQAogCQkwNzJBRTFFMzE4M0MwNzQxMDAwQTU5ODgg
LyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9
IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmlkbDsgcGF0aCA9IHBsdWdpbnMvUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzJB
RTFFNDE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuanMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IG5hbWUgPSBRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5qczsgcGF0aCA9IHBsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuanM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MkNBODYwMTZDQjREQzMwMDhBRTEzMSAv
KiBDYXB0aW9uVXNlclByZWZlcmVuY2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwNzM1N0M3NjE2RDJERjBEMDBFRDk5RTcgLyogSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRklPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MzU3
Qzc3MTZEMkRGMEQwMEVEOTlFNyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDczNUVFNjkwRjQw
QzVFNDAwNEEyNjA0IC8qIE1lZGlhUGxheWVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWVkaWFQbGF5ZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwNzM2N0RERDE3MkNBNjdGMDBEODYxQjkgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUxl
Z2FjeUFWRk9iakMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUxlZ2FjeUFWRk9iakMuaDsgcGF0aCA9IG9iamMvSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUxlZ2FjeUFWRk9iakMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcz
NjdEREUxNzJDQTY3RjAwRDg2MUI5IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVMZWdhY3lBVkZP
YmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUxlZ2FjeUFWRk9iakMubW07IHBhdGggPSBvYmpjL0luYmFuZFRleHRUcmFj
a1ByaXZhdGVMZWdhY3lBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
Njg1NCw2ICs2OTIzLDggQEAKIAkJMDczQkUzNDUxN0QxN0U3QTAwMkJENDMxIC8qIEpTTmF2aWdh
dG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU05hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDczQkUzNDYxN0QxN0U3QTAwMkJENDMxIC8qIEpTTmF2aWdhdG9yVXNl
ck1lZGlhU3VjY2Vzc0NhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTTmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDczQkUzNDcxN0QxN0U3QTAwMkJENDMxIC8qIEpTTmF2aWdh
dG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTTmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTA3NDMwMEEzMEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXll
clByaXZhdGVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBN
ZWRpYVBsYXllclByaXZhdGVJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3
NDMwMEE0MEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5ZXJQcml2YXRlSU9TLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NTM4NjAwMTQ0ODlFOTgwMEI3ODQ1MiAvKiBDYWNo
ZWRUZXh0VHJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2Fj
aGVkVGV4dFRyYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc1Mzg2MDEx
NDQ4OUU5ODAwQjc4NDUyIC8qIENhY2hlZFRleHRUcmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDYWNoZWRUZXh0VHJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDc2MzA2Q0MxN0UxNDc4RDAwNUE3QzRFIC8qIE1lZGlhU3RyZWFtVHJhY2tTb3VyY2Vz
Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTdHJlYW1U
cmFja1NvdXJjZXNDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzA5
MCw2ICs3MTYxLDggQEAKIAkJMEYxMzE2M0QxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FG
aWx0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsYXRmb3JtQ0FGaWx0
ZXJzLmg7IHBhdGggPSBjYS9QbGF0Zm9ybUNBRmlsdGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbGF0Zm9ybUNB
RmlsdGVyc01hYy5tbTsgcGF0aCA9IGNhL21hYy9QbGF0Zm9ybUNBRmlsdGVyc01hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNURBODkwRjNBQUVFNzAwMDBDRTQ3IC8qIEFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmg7IHBhdGggPSBhbmltYXRpb24vQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYx
Nzc0N0UxMzc4Qjc3MTAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNjcm9sbEFuaW1hdG9ySU9TLmg7IHBhdGggPSBpb3MvU2Ny
b2xsQW5pbWF0b3JJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxNzc0N0Yx
Mzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gU2Nyb2xsQW5pbWF0b3JJT1MubW07IHBhdGggPSBpb3Mv
U2Nyb2xsQW5pbWF0b3JJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjlD
MTZEMTMwMEMyRTIwMDJENzk0RSAvKiBBY2Nlc3NpYmlsaXR5QWxsSW5PbmUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8q
IFNoYWRvd0JsdXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hh
ZG93Qmx1ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0RENDRFMTJGNUVB
MUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNoYWRvd0JsdXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcxMTQsNiAr
NzE4Nyw3IEBACiAJCTBGNjA1QUVCMTVGOTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJh
aW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdDb25zdHJh
aW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzODNEQjE4NjE1QjI5MDAz
RTVEQjUgLyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNjM4M0RDMTg2MTVCMjkwMDNFNURCNSAvKiBUaHJlYWRlZFNjcm9s
bGluZ1RyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkZWRTY3Jv
bGxpbmdUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTdBNjU3MTU1REE4
MUUwMEZBREQ0QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTI0RDc3MTYyREY5MTkwMEEzRjRDMCAvKiBH
cmFwaGljc0xheWVyVXBkYXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBHcmFwaGljc0xheWVyVXBkYXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQTI0RDc4MTYyREY5MTkwMEEzRjRDMCAvKiBHcmFwaGljc0xheWVyVXBkYXRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0xheWVyVXBkYXRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE4OEVCQzE2QThEMUJEMDBGOTk5ODQgLyog
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzU2MCw2ICs3NjM0LDcgQEAKIAkJMUYzQzNCRTgx
MzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFDb250cm9scy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFGM0MzQkU5MTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhQ29udHJvbHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUYzRjE5NTIxNDk5Q0E3NjAwQTVBRUE3IC8qIFBPREZyZWVM
aXN0QXJlbmEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUE9ERnJlZUxpc3RB
cmVuYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxRjY4RDRBRDE0QkI5RENBMDA3
QjVDNjIgLyogTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tOyBwYXRoID0g
aW9zL01lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUZBRkJGMTYxNUE1RkE1MjAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVVElVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUZBRkJGMTcxNUE1RkE1MjAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFVUSVV0aWxpdGllcy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUZDNDBGQjcxNjU1QzU5MTAwNDBGMjlF
IC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNzU5OSw2ICs3Njc0LDggQEAKIAkJMjY1NTQxMzcxNDg5ODExQzAwMERGQzVEIC8qIEtl
eUV2ZW50Q29kZXNJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gS2V5RXZl
bnRDb2Rlc0lPUy5oOyBwYXRoID0gaW9zL0tleUV2ZW50Q29kZXNJT1MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjY1NTQxMzgxNDg5ODExQzAwMERGQzVEIC8qIEtleUV2ZW50SU9T
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gS2V5RXZlbnRJT1Mu
bW07IHBhdGggPSBpb3MvS2V5RXZlbnRJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTI2NTU0MTRCMTQ4OUFBMkIwMDBERkM1RCAvKiBDdXJzb3JJT1MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3Vyc29ySU9TLmNwcDsgcGF0aCA9IGlvcy9DdXJz
b3JJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNjYwMUVCRDE0QjNCOUFE
MDAxMkMwRkUgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaDsgcGF0aCA9IGlvcy9QbGF0
Zm9ybUV2ZW50RmFjdG9yeUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNjYw
MUVCRTE0QjNCOUFEMDAxMkMwRkUgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlP
Uy5tbTsgcGF0aCA9IGlvcy9QbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjY5MjM5OTExNTA1RTFBQTAwOUU1N0ZDIC8qIEpTSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
SURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MjY5MjM5OTIxNTA1RTFBQTAwOUU1N0ZDIC8qIEpTSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2Qjk5OThFMTgwM0FFNzIwMEQwMTEyMSAv
KiBSZWdpc3RlckFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBS
ZWdpc3RlckFsbG9jYXRvci5oOyBwYXRoID0gY3Nzaml0L1JlZ2lzdGVyQWxsb2NhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NjE2LDYgKzc2OTMsNyBAQAogCQkyNkZBRTRD
OTE4NTJFM0E1MDA0QzhDNDYgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2RkFF
NENBMTg1MkUzQTUwMDRDOEM0NiAvKiBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZGQUU0Q0IxODUyRTNBNTAwNEM4QzQ2IC8qIFN5
bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjkwMzcx
NjQxNkJBMTFCQzAwRkVGREYwIC8qIENvbnRlbnRGaWx0ZXJJT1MubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBDb250ZW50RmlsdGVySU9TLm1tOyBwYXRoID0gaW9z
L0NvbnRlbnRGaWx0ZXJJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5MTdC
NTVFMTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNoU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExheWVyRmx1c2hTY2hlZHVsZXIuY3BwOyBwYXRo
ID0gY2EvTGF5ZXJGbHVzaFNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTI5MTdCNTVGMTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNoU2NoZWR1bGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExheWVyRmx1c2hTY2hlZHVsZXIuaDsgcGF0
aCA9IGNhL0xheWVyRmx1c2hTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjkxN0I1NjAxNDczNDk2QzAwNTJDOUQwIC8qIExheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGF5ZXJGbHVzaFNjaGVkdWxlckNs
aWVudC5oOyBwYXRoID0gY2EvTGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNzc5MCw2ICs3ODY4LDEwIEBACiAJCTMxMzEzRjYzMTQ0M0Iz
NUUwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxMzEzRjY0MTQ0M0IzNUUwMDZFMkE5MCAvKiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZl
Y3RSZW5kZXJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTM4QTlFNDE0NzQ0
MzQ2MDBCMEVEMTIgLyogU3R5bGVTaGFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gU3R5bGVTaGFkZXIuaDsgcGF0aCA9IHN0eWxlL1N0eWxlU2hhZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNDAzNzk3MTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3Jl
TW90aW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJDb3Jl
TW90aW9uTWFuYWdlci5oOyBwYXRoID0gaW9zL1dlYkNvcmVNb3Rpb25NYW5hZ2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNDAzNzk4MTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJD
b3JlTW90aW9uTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IFdlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tOyBwYXRoID0gaW9zL1dlYkNvcmVNb3Rpb25NYW5h
Z2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTQwMzc5OTEyNEJFQTdGMDBB
RjQwRTQgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaDsgcGF0aCA9IGlvcy9E
ZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTQwMzc5QTEyNEJFQTdGMDBBRjQwRTQgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1Mu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBEZXZpY2VPcmllbnRh
dGlvbkNsaWVudElPUy5tbTsgcGF0aCA9IGlvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE0NkZFNjUxODQ0MjA4NzAwMUE5MzdD
IC8qIE9FU1RleHR1cmVGbG9hdExpbmVhci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBPRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwOyBwYXRoID0gY2FudmFzL09FU1Rl
eHR1cmVGbG9hdExpbmVhci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNDZG
RTY2MTg0NDIwODcwMDFBOTM3QyAvKiBPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gT0VTVGV4dHVyZUZsb2F0TGluZWFyLmg7IHBhdGggPSBj
YW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMxNDZGRTY3MTg0NDIwODcwMDFBOTM3QyAvKiBPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IE9FU1RleHR1cmVGbG9hdExpbmVhci5pZGw7IHBhdGgg
PSBjYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTc4MzAsNiArNzkxMiw3IEBACiAJCTMxOUFFMDYxMTQyRDZCMjQwMDY1NjNBMSAv
KiBTdHlsZUZpbHRlckRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gU3R5bGVGaWx0ZXJEYXRhLmNwcDsgcGF0aCA9IHN0eWxlL1N0eWxlRmlsdGVyRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxOUFFMDYyMTQyRDZCMjQwMDY1NjNBMSAv
KiBTdHlsZUZpbHRlckRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3R5
bGVGaWx0ZXJEYXRhLmg7IHBhdGggPSBzdHlsZS9TdHlsZUZpbHRlckRhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE5RkJENUQxNUQyRjQ0NDAwOTY0MEE2IC8qIENhY2hlZElt
YWdlQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZEltYWdl
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxQUI0RkZGMTIyODc4QTIw
MDFBN0RCMCAvKiBHcmFwaGljc0NvbnRleHQzRElPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRElPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzMUMwRkYxQjBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0QW5pbWF0aW9u
RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUMwRkYxQzBFNENFQjZF
MDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViS2l0QW5pbWF0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzFDMEZGMUQwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRBbmltYXRpb25FdmVudC5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODQ5LDYgKzc5MzIsOCBAQAogCQkzMUQ1OTFC
MTE2Njk3QTZDMDBFNkJGMDIgLyogUGx1Z0luQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsdWdJbkNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzMUU4RDhCQTE2MEJDOTRCMDA0Q0U4RjUgLyogUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU25hcHNob3R0ZWRQ
bHVnSW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUU4RDhCQjE2MEJDOTRD
MDA0Q0U4RjUgLyogUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzFFQUY5N0MxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlvbkNs
aWVudElPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEZXZpY2VNb3Rpb25D
bGllbnRJT1MuaDsgcGF0aCA9IGlvcy9EZXZpY2VNb3Rpb25DbGllbnRJT1MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFFQUY5N0QxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1v
dGlvbkNsaWVudElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IERldmljZU1vdGlvbkNsaWVudElPUy5tbTsgcGF0aCA9IGlvcy9EZXZpY2VNb3Rpb25DbGllbnRJ
T1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRUMxRDUwMTRGRUZEMDgwMEM5
NDY2MiAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2suaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IE5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxRUMxREFDMTRGRjI2RUEwMEM5NDY2MiAvKiBOb3RpZmljYXRp
b25QZXJtaXNzaW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90aWZpY2F0aW9uUGVybWlz
c2lvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRUMxRTI2MTRG
RjYwRUUwMEM5NDY2MiAvKiBKU05vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU05vdGlmaWNhdGlvblBlcm1pc3Np
b25DYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODk0LDYgKzc5
NzksNyBAQAogCQkzNzFGNTNFNzBEMjcwNEY5MDBFQ0UwRDUgLyogQ1NTVW5pY29kZVJhbmdlVmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTVW5pY29kZVJhbmdlVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxRjUzRTgwRDI3MDRGOTAwRUNF
MEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzcyMDIxOTgxMDYyMTNDNjAwRjI1QzRCIC8qIEZvbnRTbW9vdGhpbmdNb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRTbW9vdGhpbmdNb2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3MjdERkQ0MTQyQUFFNDUwMEQ0NDlDQiAv
KiBGb250Q2FjaGVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBGb250Q2FjaGVJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MkMwMEMz
MTI5NjExRjEwMDVDOTU3NSAvKiBUZXh0Qm91bmRhcmllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Qm91bmRhcmllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTM3MkMwMEQ4MTI5NjE5RjgwMDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kT3B0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzNzQ0NTcwRTBEQjA1RkE1MDBBRTA5OTIgLyogU1ZHR2x5cGhN
YXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHR2x5cGhNYXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc5MzEsNiArODAxNyw3IEBACiAJCTM3RERDREEz
MTM4NDUwMUMwMDA4Qjc5MyAvKiBNSFRNTFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNSFRNTFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
N0UzNTI0QTEyNDUwQzUyMDBCQUY1RDkgLyogSW5wdXRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTM3RTM1MjRDMTI0NTBDNjYwMEJBRjVEOSAvKiBJbnB1dFR5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlP
Uy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNpbXBsZUZvbnRE
YXRhSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0Y4MThGQjBENjU3NjA2
MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNl
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDOTZEQTExMDRFRDcxMDAzRTFG
QUQgLyogVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtODE1Myw4ICs4MjQwLDEzIEBACiAJCTQ0MjlBQUZGMENCODRFQzMw
MDc2NDdDNSAvKiBET01IVE1MT2JqZWN0RWxlbWVudFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERPTUhUTUxPYmplY3RFbGVtZW50UHJpdmF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0NDI5QUIwNzBDQjg0RjgxMDA3NjQ3QzUgLyogRE9NVGV4
dEV2ZW50SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVRl
eHRFdmVudEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MkFCQ0Q1
MTdEOTI2MkYwMEQzMDcxNSAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudENGTmV0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50
Q0ZOZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDJBRjdBNzEwMkNEREVB
MDA4RkQ0RDMgLyogUXVpY2tMb29rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFF1aWNrTG9vay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDJBRjdBODEwMkNE
REVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gUXVpY2tMb29rLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
NDMxMUNENDEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1lbnRGcmFnbWVudFByaXZhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRG9jdW1lbnRGcmFnbWVudFByaXZh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQzMTFDRDUxMkU0RTIyRDAwMEE4
RDE5IC8qIERPTURvY3VtZW50UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBET01Eb2N1bWVudFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDQzRjA0MjYwRTc1QzhGQjAwN0U1NDA3IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVySU9TLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtTdGF0ZU5vdGlmaWVy
SU9TLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDQ0RDRFMjEwRjcwOEIyRTAw
MzE1OEUwIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZUlPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDQ3NjUzMUExMzMxNzA5OTAwMDZCNzg5IC8qIFNTTEtleUdlbmVy
YXRvcklPUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTU0xLZXlH
ZW5lcmF0b3JJT1MuY3BwOyBwYXRoID0gaW9zL1NTTEtleUdlbmVyYXRvcklPUy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0Nzk1ODAyMTY0M0I0N0IwMDFFMEE3RiAvKiBQYXJz
ZWRDb250ZW50VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
YXJzZWRDb250ZW50VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0Nzk1
ODAzMTY0M0I0N0IwMDFFMEE3RiAvKiBQYXJzZWRDb250ZW50VHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZWRDb250ZW50VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NDhBMjlCRDBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0Nv
bGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTE9wdGlv
bnNDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTY3LDggKzgy
NTksMTYgQEAKIAkJNDQ5NkUzOUYxMzk4MTNBNTAwM0VFMzJBIC8qIEpTU1ZHTVBhdGhFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHTVBhdGhFbGVtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0OTZFM0ExMTM5ODEzQ0IwMDNFRTMyQSAv
KiBKU1NWR01QYXRoRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1NWR01QYXRoRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ0OUIxOUYzMEZBNzJFQ0UwMDE1Q0E0QSAvKiBIVE1MUGFyc2VyUXVpcmtzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxQYXJzZXJRdWlya3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDRBMjBEQjgwRjg0MTY2QzAwQjNFMUZFIC8qIFdlYkNvcmVVUkxS
ZXNwb25zZUlPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVVJM
UmVzcG9uc2VJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRBMjhBQUIxMkRG
QjhBQzAwQUU5MjNCIC8qIE1hdGhNTEVsZW1lbnRGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1hdGhNTEVsZW1lbnRGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ0QTI4QUFFMTJERkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXRoTUxOYW1lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0NEMzNjNFRTBGQUE3QkIzMDA5N0Y4Q0MgLyogUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1
bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0NEMzNjNFRjBGQUE3QkIzMDA5N0Y4Q0MgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9T
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUnVudGltZUFwcGxp
Y2F0aW9uQ2hlY2tzSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEMzQ0ZF
NzE1NTZCRTVEMDAwMTM2MDkgLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLmg7IHBh
dGggPSBpb3MvV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0NEM5OTE4MTBGM0QxRTBEMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1Mu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBTY3JvbGxiYXJUaGVt
ZUlPUy5tbTsgcGF0aCA9IGlvcy9TY3JvbGxiYXJUaGVtZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDRDOTkxODUwRjNEMUVCRTAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1l
SU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNjcm9sbGJhclRoZW1lSU9T
Lmg7IHBhdGggPSBpb3MvU2Nyb2xsYmFyVGhlbWVJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDRDOTkxOUQwRjNEMjEwRTAwNTg2NjcwIC8qIFRoZW1lSU9TLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRoZW1lSU9TLmg7IHBhdGggPSBpb3MvVGhlbWVJT1Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDRDOTkxOUUwRjNEMjEwRTAwNTg2Njcw
IC8qIFRoZW1lSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
VGhlbWVJT1MubW07IHBhdGggPSBpb3MvVGhlbWVJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ0RDhEQTk4MTM5NTQ1QkUwMDMzN0I3NSAvKiBTVkdNUGF0aEVsZW1lbnQuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR01QYXRoRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ0RDhEQTlBMTM5NTQ1Q0QwMDMzN0I3NSAvKiBTVkdBbmltYXRl
TW90aW9uRWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NERBQjVBRjE1QTYy
MzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MDg0LDggKzkxODQsMTIgQEAKIAkJN0UxMkU5
MEUxNUZBNUQzQTAwNUU0MTI2IC8qIEN1c3RvbUZpbHRlck1lc2hHZW5lcmF0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3VzdG9tRmlsdGVyTWVzaEdlbmVyYXRv
ci5jcHA7IHBhdGggPSBmaWx0ZXJzL0N1c3RvbUZpbHRlck1lc2hHZW5lcmF0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RTMzQ0QwMDEyN0YzNDBEMDBCRThGMTcgLyogUHVy
Z2VQcmlvcml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXJnZVByaW9y
aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFMzdFRjJEMTMzOTIwODgwMEIy
OTI1MCAvKiBTdWJyZXNvdXJjZUxvYWRlckNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFN1YnJlc291cmNlTG9hZGVyQ0YuY3BwOyBwYXRoID0gY2YvU3VicmVzb3Vy
Y2VMb2FkZXJDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdFNDI4Q0U0MTNF
MzQwN0YwMDNCNjYxQyAvKiBSZXNvdXJjZUhhbmRsZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlc291cmNlSGFuZGxlSU9TLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3RTQ2RjZGODE2MjdBMkM5MDAwNjIyMjMgLyogSlNPRVNFbGVtZW50
SW5kZXhVaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT0VT
RWxlbWVudEluZGV4VWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFNDZG
NkY5MTYyN0EyQzkwMDA2MjIyMyAvKiBKU09FU0VsZW1lbnRJbmRleFVpbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPRVNFbGVtZW50SW5kZXhVaW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTdFNDc0RTFCMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVE
YXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTdFNDc0RTFDMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMaXRlRGF0YWJhc2VUcmFja2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdFNDc0RTFEMTI0OTREQzkwMDIzNTM2NCAv
KiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0U1RDdBNzMxNjFEM0Y4RjAwODk2QzM0IC8qIE9FU0VsZW1lbnRJbmRleFVpbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT0VTRWxlbWVudEluZGV4
VWludC5jcHA7IHBhdGggPSBjYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFNUQ3QTc0MTYxRDNGOEYwMDg5NkMzNCAvKiBPRVNFbGVt
ZW50SW5kZXhVaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE9FU0VsZW1l
bnRJbmRleFVpbnQuaDsgcGF0aCA9IGNhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFNjZFMjMxMTZENkVCNkMwMEY3RTdGRiAvKiBXZWJH
TENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVBVEMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTA0MDIsNiArMTA1MDYsOCBAQAogCQlBNDU2RkEyNTExQUQ0QTgzMDAyMEI0MjAgLyogTGFiZWxz
Tm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGFiZWxzTm9kZUxp
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUwMTkyMEMxMzJFQkYyRTAwOEJG
RTU1IC8qIEF1dG9jYXBpdGFsaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEF1dG9jYXBpdGFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MDJDNURE
MTMwNDlCMzUwMEZDN0Q1MyAvKiBXZWJTYWZlR0NBY3Rpdml0eUNhbGxiYWNrSU9TLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlNhZmVHQ0FjdGl2aXR5Q2FsbGJhY2tJT1Mu
aDsgcGF0aCA9IGlvcy9XZWJTYWZlR0NBY3Rpdml0eUNhbGxiYWNrSU9TLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUE1MTZFOEI0MTM2RTA0REIwMDc2QzNDMCAvKiBMb2NhbGl6ZWRE
YXRlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jYWxpemVkRGF0
ZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1MTZFOEI1MTM2RTA0REIw
MDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBMb2NhbGl6ZWREYXRlQ2FjaGUubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE1MTgyMjUzMTdFMjhDRjEwMEE5QkExRCAvKiBTY3JpcHRzICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZm9sZGVyOyBwYXRoID0g
U2NyaXB0czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUxODIyNTQxN0UyQTBENDAw
QTlCQTFEIC8qIEluc3BlY3Rvck92ZXJsYXlQYWdlLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gSW5zcGVjdG9yT3Zl
cmxheVBhZ2UuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTE4MjI1NTE3RTJB
MEQ0MDBBOUJBMUQgLyogSW5zcGVjdG9yT3ZlcmxheVBhZ2UuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBh
dGggPSBJbnNwZWN0b3JPdmVybGF5UGFnZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEwOTc4LDYgKzExMDg0LDcgQEAKIAkJQUFENzY2RUExNTdFNTAyRjAwRTg1NDIzIC8qIElu
c3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnNwZWN0b3JDYW52YXNJbnN0cnVtZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQUFFMjdCNzQxNkNCRkMwRDAwNjIzMDQzIC8qIFBsYXRmb3JtU3BlZWNo
U3ludGhlc2l6ZXJNb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJNb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUFFMjdCNzUxNkNCRkMwRDAwNjIzMDQzIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhl
c2l6ZXJNb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtU3Bl
ZWNoU3ludGhlc2l6ZXJNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBRTM3
NTVEMTc0MjlCQ0MwMDYyMDBDMiAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXplcklPUy5tbTsgcGF0aCA9IGlvcy9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQUY1QjdCMTE1MjRCNEJEMDAwNENCNDkg
LyogV2ViU29ja2V0RnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViU29ja2V0RnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQjIz
QTMyNTA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUIyM0EzMjYwOUJCQTdEMDAwNjdD
QzUzIC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTIzODAsNiArMTI0ODcsOCBAQAogCQlCRTkxRkM4QjA2MTMzNjY2MDA1RTM3
OTAgLyogUG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUJFOTFGQzhDMDYxMzM2NjYwMDVFMzc5MCAvKiBQb3Np
dGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQb3NpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwogCQlCRTk4M0Q5NTA1MkEyRTBBMDA4OTJEODUgLyogV2ViQ29y
ZUtleWJvYXJkVUlNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYkNvcmVLZXlib2FyZFVJTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJQkVBODA3QzYwRjcxNEEwMzAw
NTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gU2VsZWN0aW9uUmVjdC5jcHA7IHBhdGggPSBpb3MvU2VsZWN0aW9uUmVjdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJFQTgwN0M3MEY3MTRBMDMwMDUyNDE5OSAv
KiBTZWxlY3Rpb25SZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNlbGVj
dGlvblJlY3QuaDsgcGF0aCA9IGlvcy9TZWxlY3Rpb25SZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJFRjI5RUU5MTcxNUREMDkwMEM0QjRDOSAvKiBBdWRpb1RyYWNrUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1RyYWNrUHJpdmF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCRUYyOUVFQTE3MTVERDA5MDBDNEI0Qzkg
LyogVmlkZW9UcmFja1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlkZW9UcmFja1ByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzA0NkUx
QUIxMjA4QTlGRTAwQkEyQ0Y3IC8qIExvY2FsaXplZFN0cmluZ3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9jYWxpemVkU3RyaW5ncy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjQyNCw2ICsxMjUzMyw4IEBACiAJCUM1NUUzOEJDMTAwNDBE
NUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUM1NzJFRTFEMTIwMUM5QkMwMDdEOEY4MiAvKiBKU0lEQkluZGV4
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURCSW5kZXguaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU3RkVERTAxMjEyRUU5QzAwOTdCRTY1IC8qIEZpbGVT
eXN0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsZVN5c3Rl
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1ODM2MUE3MTc0NDUyM0YwMDE3
MzUxMSAvKiBGb250U2VydmljZXNJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRm9udFNlcnZpY2VzSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1ODM2
MUE4MTc0NDUyM0YwMDE3MzUxMSAvKiBGb250U2VydmljZXNJT1MubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGb250U2VydmljZXNJT1MubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUM1ODVBNjYwMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5n
VXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkJp
bmRpbmdVdGlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTg1QTY2
MTExRDRGQUM1MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJREJCaW5kaW5nVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUM1ODVBNjY1MTFENEZCMDcwMDRDM0U0QiAvKiBKU0lEQkFueS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lEQkFueS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTI1MTMsNiArMTI2MjQsOCBAQAogCQlDRDU0QTc2MTE4MEY5Rjcw
MDBCMDc2QzkgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMuaDsgcGF0aCA9IG9iamMvQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q1NERFNDUxNzQ2OEI2RjAwNUU1QjM2
IC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNENTRERTQ5MTc0NjlDNkQwMDVFNUIzNiAvKiBBdWRpb1Nlc3Npb25NYWMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9TZXNzaW9uTWFj
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q1NTk2OEYxNDc1QjY3ODAwMUQw
QkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBBdWRpb0ZpbGVSZWFkZXJJT1MuY3BwOyBwYXRoID0gaW9zL0F1ZGlvRmlsZVJl
YWRlcklPUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNENTU5NjkwMTQ3NUI2
NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQXVkaW9GaWxlUmVhZGVySU9TLmg7IHBhdGggPSBpb3MvQXVkaW9GaWxlUmVh
ZGVySU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENjQxRUIxMTgxOEY1RUQw
MEVFNEM0MSAvKiBNZWRpYVNvdXJjZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWVkaWFTb3VyY2VQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNENjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUJ1ZmZlclByaXZhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q2NDFFQkQxODE5QjM1OTAwRUU0QzQxIC8qIE1l
ZGlhVGltZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVRpbWVNYWMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI2MDgsNiArMTI3MjEsNyBAQAogCQlDREM4QjVB
ODE4MDQ3RkYxMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBTb3VyY2VCdWZmZXJQcml2YXRlQVZG
T2JqQy5tbTsgcGF0aCA9IG9iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzhCNUE5MTgwNDdGRjEwMDE2RTY4NSAvKiBTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oOyBwYXRoID0gb2JqYy9Tb3VyY2VCdWZmZXJQ
cml2YXRlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREM4QjVBQzE4
MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQ0E4Mjk0MTY3OTEwMEYwMDg3NTcxNCAvKiBUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDRENFNUNEMDE0NjMzQkM5MDBENDdDQ0EgLyogRXZlbnRUYXJnZXRGYWN0
b3J5LmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEV2ZW50VGFyZ2V0RmFjdG9yeS5pbjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0REMUU1MjUxNjdCQTU2NDAwQ0U4MjBCIC8qIFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRUcmFja1JlcHJlc2VudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNERDcwODk0MTgzNTlGNkUwMDJCM0RDNiAvKiBTYW1wbGVNYXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEyNjY0LDYgKzEyNzc4LDcgQEAKIAkJQ0VDQURGQ0MxNTM3NzkxRDAwRTM3
MDY4IC8qIFRleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0VDQ0ZDM0ExNDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVl
bmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWNvZGVFc2NhcGVTZXF1
ZW5jZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VEQTEyRDYxNTJDQTFDQjAw
RDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBbHRlcm5hdGl2ZVRleHRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0VFQzYwMzQxODdERDk2MjAwM0U0M0JCIC8qIFRleHRUcmFja1JlcHJlc2VudGF0
aW9uSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRUcmFja1JlcHJl
c2VudGF0aW9uSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFRjQxOENDMTE3
OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBWaWV3cG9ydEFyZ3VtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNFRjQxOENEMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3Vt
ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3cG9ydEFyZ3VtZW50
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDAwRUJBMDExQkRBRkQ0MDBDNDc3
MjYgLyogRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTMwMDAsNiArMTMxMTUsOCBAQAogCQlFNDA2RjNGQjExOTgzMDdE
MDA5RDU5RDYgLyogQ29sb3JEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENvbG9yRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MUVB
MDM4MTE5ODM2REIwMDcxMEJDNSAvKiBDU1NQcm9wZXJ0eU5hbWVzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1Byb3BlcnR5TmFtZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNDFFQTAzOTExOTgzNzQ5MDA3MTBCQzUgLyogQ1NTVmFsdWVL
ZXl3b3Jkcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NWYWx1
ZUtleXdvcmRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQyNEEzOUQxMzMw
REYwMTAwQ0Y2REM5IC8qIFRpbGVHcmlkVGlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBUaWxlR3JpZFRpbGUuaDsgcGF0aCA9IGlvcy9UaWxlR3JpZFRpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQyNEEzOUYxMzMwREYxRTAwQ0Y2REM5IC8qIFRpbGVH
cmlkVGlsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFRpbGVH
cmlkVGlsZS5tbTsgcGF0aCA9IGlvcy9UaWxlR3JpZFRpbGUubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0MjVBNDk5MTgyOTJCODQwMDIwQ0ZDRiAvKiBDb2xsZWN0aW9uSW5kZXhD
YWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xsZWN0aW9uSW5kZXhD
YWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDI5NUZBMzEyQjA2MTRFMDBE
MUFDRTAgLyogUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVzb3VyY2VMb2FkUHJpb3JpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTQzMTA1QjcxNjc1MEYwQzAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTm9kZVRyYXZlcnNhbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzAzNyw4ICsxMzE1NCwxNSBAQAogCQlFNDRFRTNB
NzE3NTc2RTU1MDBFRUU4Q0YgLyogRm9udEdlbmVyaWNGYW1pbGllcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGb250R2VuZXJpY0ZhbWlsaWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
NTMyMkE5MTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdG9yUXVlcnkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDUzMjJBQTE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVy
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWxlY3RvclF1ZXJ5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NTM5MDE4MEVBRkNBQ0EwMDM2OTVDOCAvKiBN
SU1FVHlwZVJlZ2lzdHJ5SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBu
YW1lID0gTUlNRVR5cGVSZWdpc3RyeUlPUy5tbTsgcGF0aCA9IGlvcy9NSU1FVHlwZVJlZ2lzdHJ5
SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDUzOTAxOTBFQUZDQUNBMDAz
Njk1QzggLyogUGFzdGVib2FyZElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IFBhc3RlYm9hcmRJT1MubW07IHBhdGggPSBpb3MvUGFzdGVib2FyZElPUy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ1MzkwMzIwRUFGRDYzNzAwMzY5NUM4IC8q
IFBsYXRmb3JtU2NyZWVuSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBu
YW1lID0gUGxhdGZvcm1TY3JlZW5JT1MubW07IHBhdGggPSBpb3MvUGxhdGZvcm1TY3JlZW5JT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NTM5MDM0MEVBRkQ2MzcwMDM2OTVD
OCAvKiBTY3JvbGxWaWV3SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBu
YW1lID0gU2Nyb2xsVmlld0lPUy5tbTsgcGF0aCA9IGlvcy9TY3JvbGxWaWV3SU9TLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDUzOTAzNTBFQUZENjM3MDAzNjk1QzggLyogU2hh
cmVkVGltZXJJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBT
aGFyZWRUaW1lcklPUy5tbTsgcGF0aCA9IGlvcy9TaGFyZWRUaW1lcklPUy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ1MzkwMzYwRUFGRDYzNzAwMzY5NUM4IC8qIFNvdW5kSU9T
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gU291bmRJT1MubW07
IHBhdGggPSBpb3MvU291bmRJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0
NTM5MDM4MEVBRkQ2MzcwMDM2OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViQ29yZVN5c3RlbUludGVy
ZmFjZUlPUy5tbTsgcGF0aCA9IGlvcy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDUzOTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lk
Z2V0SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2lkZ2V0
SU9TLm1tOyBwYXRoID0gaW9zL1dpZGdldElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTQ1MzkwQUQwRUFGRjRCNTAwMzY5NUM4IC8qIFN5c3RlbU1lbW9yeUlPUy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTeXN0ZW1NZW1vcnlJT1MuY3BwOyBw
YXRoID0gaW9zL1N5c3RlbU1lbW9yeUlPUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0NjJBNEEwMTEzRTcxQkUwMDRBNDIyMCAvKiBJbnRQb2ludEhhc2guaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50UG9pbnRIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0NkEyQjFCMTdDQTY1QjkwMDBEQkNEOCAvKiBFbGVtZW50RGVzY2VuZGFu
dEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnREZXNj
ZW5kYW50SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ2QTJCMUQx
N0NBNzZCMTAwMERCQ0Q4IC8qIEVsZW1lbnRDaGlsZEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRDaGlsZEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMzA4Miw2ICsxMzIwNiwxMCBAQAogCQlFNEI0MjM4MDBDQkZCNzND
MDBBRjJFQ0UgLyogSlNIVE1MTWVkaWFFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTSFRNTE1lZGlhRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNEI0MjM4NTBDQkZCNzNDMDBBRjJFQ0UgLyogSlNQcm9ncmVzc0V2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJvZ3Jlc3NFdmVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QjQyMzg2MENCRkI3M0MwMEFGMkVDRSAvKiBK
U1Byb2dyZXNzRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9n
cmVzc0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QjY1QTU3MTMyRkE4
RTcwMDcwRTdCRSAvKiBUaWxlR3JpZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBUaWxlR3JpZC5oOyBwYXRoID0gaW9zL1RpbGVHcmlkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUU0QjY1QTU5MTMyRkFBRjkwMDcwRTdCRSAvKiBUaWxlR3JpZC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFRpbGVHcmlkLm1tOyBwYXRoID0gaW9z
L1RpbGVHcmlkLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEI2NUE1QjEzMkZB
Q0IwMDA3MEU3QkUgLyogVGlsZUxheWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFRpbGVMYXllci5oOyBwYXRoID0gaW9zL1RpbGVMYXllci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFNEI2NUE1RDEzMkZBREI2MDA3MEU3QkUgLyogVGlsZUxheWVyLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gVGlsZUxheWVyLm1tOyBwYXRo
ID0gaW9zL1RpbGVMYXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRCQkVE
MEMxNEY0MDI1RDAwM0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEJCRUQwRDE0
RjQwMjVEMDAzRjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEJCRUQ0QTE0RkNEQkExMDAzRjBC
OTggLyogU3R5bGVSdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0eWxlUnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzA5MCw2ICsx
MzIxOCw4IEBACiAJCUU0QzE3ODk2MEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTU2VsZWN0b3JMaXN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QzI3OTU2MENGOTc0MTkwMEU5N0I5OCAvKiBS
ZW5kZXJNZWRpYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJNZWRpYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QzI3OTU3MENGOTc0
MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJNZWRpYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEMzQjFG
OTBGMEU0MTYxMDA5NjkzRjYgLyogVGlsZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFRpbGVDYWNoZS5oOyBwYXRoID0gaW9zL1RpbGVDYWNoZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFNEMzQjFGQjBGMEU0MTcwMDA5NjkzRjYgLyogVGlsZUNhY2hl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gVGlsZUNhY2hlLm1t
OyBwYXRoID0gaW9zL1RpbGVDYWNoZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTRDOTFBMEQxODAyMzQzMTAwQTE3RjZEIC8qIFRleHRQYWludFN0eWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRQYWludFN0eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0QzkxQTBGMTgwMjM0MzkwMEExN0Y2RCAvKiBUZXh0UGFpbnRTdHlsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0UGFpbnRTdHlsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QzkxQTE1MTgwOTk5RjEwMEExN0Y2
RCAvKiBSZW5kZXJUZXh0TGluZUJveGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlclRleHRMaW5lQm94ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEzMTA1LDYgKzEzMjM1LDggQEAKIAkJRTREOTg4QjUxN0JGRUIyMTAwODRGQjg4IC8qIFRleHRO
b2RlVHJhdmVyc2FsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRl
eHROb2RlVHJhdmVyc2FsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRERUFB
MTUxN0E5M0RDMzAwMEUwNDMwIC8qIFN0eWxlUmVzb2x2ZVRyZWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZXNvbHZlVHJlZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0REVBQTE2MTdBOTNEQzMwMDBFMDQzMCAvKiBTdHlsZVJlc29s
dmVUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVzb2x2ZVRy
ZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRFMzlBRkExMzMwRUZBODAwM0FC
Mjc0IC8qIFRpbGVMYXllclBvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
VGlsZUxheWVyUG9vbC5oOyBwYXRoID0gaW9zL1RpbGVMYXllclBvb2wuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTRFMzlBRkMxMzMwRUZDNTAwM0FCMjc0IC8qIFRpbGVMYXllclBv
b2wubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUaWxlTGF5ZXJQ
b29sLm1tOyBwYXRoID0gaW9zL1RpbGVMYXllclBvb2wubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0RTlCMTE4MTgxMDkxNkYwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVz
b2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91
dFJlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RTlCMTFBMTgxNDU2
OTIwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEU5QjExQzE4MTQ1NjlDMDAzQUNDREYgLyog
U2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMzU5Miw2ICsxMzcyNCw4IEBACiAJCUZERjdFOUMxMTNBQzIxREIwMEE1MUVBQyAv
KiBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkRGN0U5QzIxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFj
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0F1ZGlvQnVmZmVyQ2FsbGJh
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwOURCNDYxNjlFMkQ2RTAwNjIy
NTU3IC8qIERhdGFiYXNlRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGF0YWJhc2VFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTBEODRFODEw
NDg0MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV2ViRXZlbnQuaDsgcGF0aCA9IGlvcy9XZWJFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRTBEODRFQTEwNDg0MzZFMDAxQTE3OUUgLyogV2ViRXZlbnQubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJFdmVudC5tbTsgcGF0aCA9
IGlvcy9XZWJFdmVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxMTVGQTkx
Njc5ODhDRDAwMjQ5MTM0IC8qIEFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTE2Q0ZDRjE2OUQxREVDMDBEM0EwQzcgLyogRGF0YWJhc2VC
YWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFiYXNl
QmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTZDRkQwMTY5RDFE
RUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGF0YWJhc2VCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMzYzMCw2ICsxMzc2NCw3IEBACiAJCUZFQkM1RjMwMTZCRDBDQzMwMDY1OUJEMyAvKiBEYXRh
YmFzZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VCYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRDEzRDM5MENFQTkzNDYwMEQ4OTQ2
NiAvKiBFZGl0b3JJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBFZGl0b3JJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRDEzRDNCMENF
QTkzNkEwMEQ4OTQ2NiAvKiBGcmFtZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEZyYW1lSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RUQxM0QzRjBDRUE5Mzk0MDBEODk0NjYgLyogSWNvbklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEljb25JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFRDEzRDUwMENFQTk0OTcwMEQ4OTQ2NiAvKiBSZW5kZXJUaGVtZUlPUy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUaGVtZUlPUy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRURFRjgzRjE2Nzk3MTA4MDAwRTQ0NEEgLyogRGF0YWJhc2VT
dHJhdGVneS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhYmFz
ZVN0cmF0ZWd5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVERUY4NDAxNjc5
NzEwODAwMEU0NDRBIC8qIERhdGFiYXNlU3RyYXRlZ3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGF0YWJhc2VTdHJhdGVneS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTQzMTQsNiArMTQ0NDksNyBAQAogCQkxQTJFNkU1NjBDQzU1MUUwMDA0QTIwNjIgLyog
c3FsICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3RTQ3
NEUxOTEyNDk0REE5MDAyMzUzNjQgLyogaW9zICovLAogCQkJCTFBMkU2RTc4MENDNTU2RDUwMDRB
MjA2MiAvKiBTUUxpdGVBdXRob3JpemVyLmNwcCAqLywKIAkJCQkxQTIyNDY0MzBDQzk4RERCMDBD
MDUyNDAgLyogU1FMaXRlRGF0YWJhc2UuY3BwICovLAogCQkJCTFBMjI0NjQ0MENDOThEREIwMEMw
NTI0MCAvKiBTUUxpdGVEYXRhYmFzZS5oICovLApAQCAtMTUwNjIsNiArMTUxOTgsMjYgQEAKIAkJ
CW5hbWUgPSBtYXRobWw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk0NDFB
RjBBNzBFQkE3QkJGMDA0NEVENEIgLyogaW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQkwRjk3QTY1NzE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJl
ZnJlc2hNb25pdG9ySU9TLm1tICovLAorCQkJCTM3MjdERkQ0MTQyQUFFNDUwMEQ0NDlDQiAvKiBG
b250Q2FjaGVJT1MubW0gKi8sCisJCQkJQzU4MzYxQTcxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRT
ZXJ2aWNlc0lPUy5oICovLAorCQkJCUM1ODM2MUE4MTc0NDUyM0YwMDE3MzUxMSAvKiBGb250U2Vy
dmljZXNJT1MubW0gKi8sCisJCQkJMzFBQjRGRkYxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNz
Q29udGV4dDNESU9TLmggKi8sCisJCQkJRkVEMTNEM0YwQ0VBOTM5NDAwRDg5NDY2IC8qIEljb25J
T1MubW0gKi8sCisJCQkJMDczNTdDNzYxNkQyREYwRDAwRUQ5OUU3IC8qIEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkZJT1MuaCAqLywKKwkJCQkwNzM1N0M3NzE2RDJERjBEMDBFRDk5RTcgLyogSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5tbSAqLywKKwkJCQkwNzQzMDBBNDBGNEI4QkNGMDA4
MDc2Q0QgLyogTWVkaWFQbGF5ZXJQcml2YXRlSU9TLmggKi8sCisJCQkJMDc0MzAwQTMwRjRCOEJD
RjAwODA3NkNEIC8qIE1lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbSAqLywKKwkJCQkzN0U2NTk0RjE2
M0IxMEMyMDBFQjQ1NzQgLyogU2ltcGxlRm9udERhdGFJT1MubW0gKi8sCisJCQkJQ0VFQzYwMzQx
ODdERDk2MjAwM0U0M0JCIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLmggKi8sCisJCQkJ
Q0RDQTgyOTQxNjc5MTAwRjAwODc1NzE0IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1t
ICovLAorCQkJKTsKKwkJCXBhdGggPSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OwogCQk0NDMyOTJDMTBFQkE2RDczMDBFNjIwMTYgLyogaW9zICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE1MDc5LDYgKzE1MjM1LDE5IEBACiAJCQlu
YW1lID0gRXhwb3J0czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTQ0OTdE
NThDMEVCQTg1NEYwMEExMDU1MiAvKiBpb3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJ
CWNoaWxkcmVuID0gKAorCQkJCTQ0M0YwNDI2MEU3NUM4RkIwMDdFNTQwNyAvKiBOZXR3b3JrU3Rh
dGVOb3RpZmllcklPUy5jcHAgKi8sCisJCQkJNDQyQUY3QTcxMDJDRERFQTAwOEZENEQzIC8qIFF1
aWNrTG9vay5oICovLAorCQkJCTQ0MkFGN0E4MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2su
bW0gKi8sCisJCQkJN0U0MjhDRTQxM0UzNDA3RjAwM0I2NjFDIC8qIFJlc291cmNlSGFuZGxlSU9T
Lm1tICovLAorCQkJCTQ0QTIwREI4MEY4NDE2NkMwMEIzRTFGRSAvKiBXZWJDb3JlVVJMUmVzcG9u
c2VJT1MuaCAqLywKKwkJCQk0NDRENEUyMTBGNzA4QjJFMDAzMTU4RTAgLyogV2ViQ29yZVVSTFJl
c3BvbnNlSU9TLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBpb3M7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OwogCQk0OTQ4NEZBRTEwMkNGMDFFMDAxODdERDMgLyogY2FudmFzICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE1NTc3LDYgKzE1
NzQ2LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjJGMzRG
RTcwRTgyRjgxNzAwRjYyN0NEIC8qIGNmICovLAorCQkJCTQ0OTdENThDMEVCQTg1NEYwMEExMDU1
MiAvKiBpb3MgKi8sCiAJCQkJNjU2Qjg0RTcwQUVBMURBRTAwQTA5NUI0IC8qIG1hYyAqLywKIAkJ
CQk5MzRGNzEzNzBENUE2RUZGMDAwMThENjkgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNl
LmNwcCAqLywKIAkJCQk5MzRGNzEzOTBENUE2RjEwMDAwMThENjkgLyogQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VCYXNlLmggKi8sCkBAIC0xNTk2Miw2ICsxNjEzMiwxNyBAQAogCQkJdGFiV2lkdGgg
PSA0OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9OworCQk3RTQ3NEUxOTEyNDk0REE5MDAyMzUzNjQg
LyogaW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3
RTQ3NEUxRDEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcCAqLywK
KwkJCQk3RTQ3NEUxQzEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFja2VyLmgg
Ki8sCisJCQkJN0U0NzRFMUIxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tl
ckNsaWVudC5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBpb3M7CisJCQlwYXRoID0gc3FsL2lvczsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdFRTY4NDczMTJEMjZFNTUwMEU3
OTQxNSAvKiBjZiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBA
IC0xNzU2OCwyMCArMTc3NDksNzEgQEAKIAkJCW5hbWUgPSBwYXJzZXI7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OworCQlBNTE2RThCMjEzNkUwNEMwMDA3NkMzQzAgLyogaW9zICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBNTE2RThCNDEz
NkUwNERCMDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLmggKi8sCisJCQkJQTUxNkU4QjUx
MzZFMDREQjAwNzZDM0MwIC8qIExvY2FsaXplZERhdGVDYWNoZS5tbSAqLywKKwkJCSk7CisJCQlw
YXRoID0gaW9zOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQTU5RTNDMUIx
MTU4MEYzNDAwNzI5MjhFIC8qIGlvcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJMjkwMzcxNjQxNkJBMTFCQzAwRkVGREYwIC8qIENvbnRlbnRGaWx0ZXJJ
T1MubW0gKi8sCiAJCQkJMjY1NTQxNEIxNDg5QUEyQjAwMERGQzVEIC8qIEN1cnNvcklPUy5jcHAg
Ki8sCisJCQkJMzFFQUY5N0MxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElP
Uy5oICovLAorCQkJCTMxRUFGOTdEMTIxNDM1QTQwMEU3QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGll
bnRJT1MubW0gKi8sCisJCQkJMzE0MDM3OTkxMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVu
dGF0aW9uQ2xpZW50SU9TLmggKi8sCisJCQkJMzE0MDM3OUExMjRCRUE3RjAwQUY0MEU0IC8qIERl
dmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1tICovLAogCQkJCTI2RjQwRDQ5MTQ5MDRBNjMwMENB
NjdDNCAvKiBFdmVudExvb3BJT1MubW0gKi8sCiAJCQkJMjZDMTdBM0MxNDkxRDJENDAwRDEyQkEy
IC8qIEZpbGVTeXN0ZW1JT1MuaCAqLywKIAkJCQkyNkMxN0EzRDE0OTFEMkQ0MDBEMTJCQTIgLyog
RmlsZVN5c3RlbUlPUy5tbSAqLywKIAkJCQkyNjU1NDEzNzE0ODk4MTFDMDAwREZDNUQgLyogS2V5
RXZlbnRDb2Rlc0lPUy5oICovLAogCQkJCTI2NTU0MTM4MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlF
dmVudElPUy5tbSAqLywKKwkJCQkxRjY4RDRBRDE0QkI5RENBMDA3QjVDNjIgLyogTWVtb3J5UHJl
c3N1cmVIYW5kbGVySU9TLm1tICovLAorCQkJCUU0NTM5MDE4MEVBRkNBQ0EwMDM2OTVDOCAvKiBN
SU1FVHlwZVJlZ2lzdHJ5SU9TLm1tICovLAogCQkJCUU0NTM5MDE5MEVBRkNBQ0EwMDM2OTVDOCAv
KiBQYXN0ZWJvYXJkSU9TLm1tICovLAorCQkJCTI2NjAxRUJEMTRCM0I5QUQwMDEyQzBGRSAvKiBQ
bGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oICovLAorCQkJCTI2NjAxRUJFMTRCM0I5QUQwMDEyQzBG
RSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5tbSAqLywKIAkJCQlDNTI3OEIwQjE3RjIxMkVB
MDAzQTI5OTggLyogUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tICovLAorCQkJCUU0NTM5MDMyMEVB
RkQ2MzcwMDM2OTVDOCAvKiBQbGF0Zm9ybVNjcmVlbklPUy5tbSAqLywKKwkJCQlBQUUzNzU1RDE3
NDI5QkNDMDA2MjAwQzIgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcklPUy5tbSAqLywKKwkJ
CQk0NEMzNjNFRTBGQUE3QkIzMDA5N0Y4Q0MgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9T
LmggKi8sCisJCQkJNDRDMzYzRUYwRkFBN0JCMzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrc0lPUy5tbSAqLywKKwkJCQkwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xs
QW5pbWF0b3JJT1MuaCAqLywKKwkJCQkwRjE3NzQ3RjEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xs
QW5pbWF0b3JJT1MubW0gKi8sCisJCQkJNDRDOTkxODUwRjNEMUVCRTAwNTg2NjcwIC8qIFNjcm9s
bGJhclRoZW1lSU9TLmggKi8sCisJCQkJNDRDOTkxODEwRjNEMUUwRDAwNTg2NjcwIC8qIFNjcm9s
bGJhclRoZW1lSU9TLm1tICovLAorCQkJCUU0NTM5MDM0MEVBRkQ2MzcwMDM2OTVDOCAvKiBTY3Jv
bGxWaWV3SU9TLm1tICovLAorCQkJCUJFQTgwN0M2MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rp
b25SZWN0LmNwcCAqLywKKwkJCQlCRUE4MDdDNzBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9u
UmVjdC5oICovLAogCQkJCUU0NTM5MDM1MEVBRkQ2MzcwMDM2OTVDOCAvKiBTaGFyZWRUaW1lcklP
Uy5tbSAqLywKKwkJCQlFNDUzOTAzNjBFQUZENjM3MDAzNjk1QzggLyogU291bmRJT1MubW0gKi8s
CisJCQkJNDQ3NjUzMUExMzMxNzA5OTAwMDZCNzg5IC8qIFNTTEtleUdlbmVyYXRvcklPUy5jcHAg
Ki8sCisJCQkJRTQ1MzkwQUQwRUFGRjRCNTAwMzY5NUM4IC8qIFN5c3RlbU1lbW9yeUlPUy5jcHAg
Ki8sCisJCQkJNDRDOTkxOUQwRjNEMjEwRTAwNTg2NjcwIC8qIFRoZW1lSU9TLmggKi8sCisJCQkJ
NDRDOTkxOUUwRjNEMjEwRTAwNTg2NjcwIC8qIFRoZW1lSU9TLm1tICovLAorCQkJCUU0QzNCMUY5
MEYwRTQxNjEwMDk2OTNGNiAvKiBUaWxlQ2FjaGUuaCAqLywKKwkJCQlFNEMzQjFGQjBGMEU0MTcw
MDA5NjkzRjYgLyogVGlsZUNhY2hlLm1tICovLAorCQkJCUU0QjY1QTU3MTMyRkE4RTcwMDcwRTdC
RSAvKiBUaWxlR3JpZC5oICovLAorCQkJCUU0QjY1QTU5MTMyRkFBRjkwMDcwRTdCRSAvKiBUaWxl
R3JpZC5tbSAqLywKKwkJCQlFNDI0QTM5RDEzMzBERjAxMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxl
LmggKi8sCisJCQkJRTQyNEEzOUYxMzMwREYxRTAwQ0Y2REM5IC8qIFRpbGVHcmlkVGlsZS5tbSAq
LywKKwkJCQlFNEI2NUE1QjEzMkZBQ0IwMDA3MEU3QkUgLyogVGlsZUxheWVyLmggKi8sCisJCQkJ
RTRCNjVBNUQxMzJGQURCNjAwNzBFN0JFIC8qIFRpbGVMYXllci5tbSAqLywKKwkJCQlFNEUzOUFG
QTEzMzBFRkE4MDAzQUIyNzQgLyogVGlsZUxheWVyUG9vbC5oICovLAorCQkJCUU0RTM5QUZDMTMz
MEVGQzUwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29sLm1tICovLAorCQkJCTMxNDAzNzk3MTI0QkVB
N0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9uTWFuYWdlci5oICovLAorCQkJCTMxNDAzNzk4MTI0
QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9uTWFuYWdlci5tbSAqLywKKwkJCQk0NEMzQ0ZF
NzE1NTZCRTVEMDAwMTM2MDkgLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5oICovLAorCQkJ
CUU0NTM5MDM4MEVBRkQ2MzcwMDM2OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1t
ICovLAorCQkJCUZFMEQ4NEU4MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oICovLAorCQkJ
CUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSAqLywKIAkJCQlBNTAyQzVE
RDEzMDQ5QjM1MDBGQzdENTMgLyogV2ViU2FmZUdDQWN0aXZpdHlDYWxsYmFja0lPUy5oICovLAog
CQkJCUMyQzRDQjFEMTYxQTEzMTIwMEQyMTREQSAvKiBXZWJTYWZlSW5jcmVtZW50YWxTd2VlcGVy
SU9TLmggKi8sCisJCQkJRTQ1MzkwM0MwRUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSAq
LywKIAkJCSk7CiAJCQluYW1lID0gaW9zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTE5NDA2LDYgKzE5NjM4LDcgQEAKIAkJCQk5MzMyQUIzQjE2NTE1RDc3MDBEODI3RUMgLyogY3B1
ICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICovLAogCQkJCTQ5
ODc3MEMxMTI0MkM1MEQwMDIyMjZCQSAvKiBncHUgKi8sCisJCQkJNDQxQUYwQTcwRUJBN0JCRjAw
NDRFRDRCIC8qIGlvcyAqLywKIAkJCQlCMjc1MzU0OTBCMDUzODE0MDAyQ0U2NEYgLyogbWFjICov
LAogCQkJCUZCQzIyMEREMTIzN0ZCRUIwMEJDRjc4OCAvKiBvcGVuZ2wgKi8sCiAJCQkJRjRFQUY0
QUIxMEM3NDI2ODAwOTEwMEQzIC8qIG9wZW50eXBlICovLApAQCAtMTk1ODAsNiArMTk4MTMsNyBA
QAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlCMkIyNjQ1OTBEMDBB
NzdFMDAwQUNDMUQgLyogY2YgKi8sCisJCQkJQTUxNkU4QjIxMzZFMDRDMDAwNzZDM0MwIC8qIGlv
cyAqLywKIAkJCQlCMkMzRDlGOTBEMDA2QzFEMDBFRjZGMjYgLyogbWFjICovLAogCQkJCTM3QzYx
RjAwMTIwOTVDODcwMDdBM0M2NyAvKiBBdG9taWNTdHJpbmdLZXllZE1SVUNhY2hlLmggKi8sCiAJ
CQkJQjJDM0Q5RjIwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0LmNwcCAqLywKQEAgLTIw
NDg0LDYgKzIwNzE4LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUNEMEVFRTBCMTQ3NDNFMzUw
MDNFQUZBMiAvKiBBdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcCAqLywKIAkJCQlDRDBFRUUwQTE0NzQz
RTM0MDAzRUFGQTIgLyogQXVkaW9EZXN0aW5hdGlvbklPUy5oICovLAorCQkJCUNENTU5NjhGMTQ3
NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuY3BwICovLAorCQkJCUNENTU5Njkw
MTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuaCAqLywKIAkJCQlDREE3OTgy
NTE3MEEyNzkwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tICovLAogCQkJKTsKIAkJCW5h
bWUgPSBpb3M7CkBAIC0yMjI4Myw2ICsyMjUxOSw3IEBACiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAw
RDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Uw
OEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFN0IyREIzMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRl
eHRVSUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMEQ4NEU5MTA0ODQzNDgwMDFB
MTc5RSAvKiBXZWJFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwM0UxMkIwMjY3NjAw
QzFBMzU5IC8qIEFuYWx5c2VyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RFM0E4NTgxN0Y2
MDIwNDAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDkwNzA3RTcxMjE5QzA0MzAwRDkwRTUxIC8qIEFOR0xFV2ViS2l0QnJpZGdlLmggaW4g
SGVhZGVycyAqLywKQEAgLTIyNDI0LDYgKzIyNjYxLDcgQEAKIAkJCQlCQ0IxNkMxQzA5NzlDM0JE
MDA0Njc3NDEgLyogQ2FjaGVkSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOUZCRDVGMTVE
MkY0NjQwMDk2NDBBNiAvKiBDYWNoZWRJbWFnZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTEwMTg0NjkwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCUU0MjRBMzlFMTMzMERGMDEwMENGNkRDOSAvKiBUaWxlR3JpZFRpbGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUQwRURBNzc1MTQzRTMwM0MwMDI4RTM4MyAvKiBDYWNoZWRSYXdSZXNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCNTMzNDkxNzE3REVFMzAwRjIwNUY5IC8qIENhY2hlZFJh
d1Jlc291cmNlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0IxNkMyMDA5NzlDM0JEMDA0
Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMjI2MTcsNiArMjI4
NTUsNyBAQAogCQkJCTA3OEUwOTE0MTdEMTREMUMwMDQyMEFBMSAvKiBNZWRpYUNvbnN0cmFpbnRz
SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRTkwQTE5ODlDQTAwN0ZCOEM1IC8qIENT
U1ZhbHVlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5QkQ5RkExMzFGRDJFRDAwM0M1NkYw
IC8qIENTU1ZhbHVlUG9vbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRCNjVBNTgxMzJGQThFNzAw
NzBFN0JFIC8qIFRpbGVHcmlkLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5
MDAxRTlBQkMgLyogQ3Vyc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzIyNzJBMjBFODJFODdD
MDBFN0Y5NzUgLyogQ3Vyc29yRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY4MTYwRDYxODc2
NkExMzAwMjFFNzlEIC8qIFVzZXJBY3Rpdml0eS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzA1Nyw2
ICsyMzI5Niw3IEBACiAJCQkJODU1MjZDRDIwQUIwQjdEOTAwMDMwMkVBIC8qIERPTVRyZWVXYWxr
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MEI0MUMzMEFEOUU3RTcwMEE2RUQ0RiAvKiBET01U
cmVlV2Fsa2VySW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QzdGNDkxMEFBRjc5REMw
MDQwMTRERCAvKiBET01VSUV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk0NEM5OTE5RjBGM0Qy
MTBFMDA1ODY2NzAgLyogVGhlbWVJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1OTg5REQwMEFD
QzhCQkQwMEEwQkM1MSAvKiBET01VSUV2ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJFMzdERkRCMTJEQkFGQjgwMEE2QjIzMyAvKiBET01VUkwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE1Qzc3MEE2MTAwRDQxQ0QwMDVCQTI2NyAvKiBET01WYWxpZGl0eVN0YXRlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTIzMjI1LDYgKzIzNDY1LDcgQEAKIAkJCQk4NDVFNzJGODBGRDI2MUVFMDBBODdE
NzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEM5MjUxQTBGQ0M3QzRBMDA0ODBE
RUMgLyogRmlsdGVyRWZmZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTMxM0Y2NjE0NDNCMzVG
MDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ0
QzNDRkU4MTU1NkJFNUQwMDAxMzYwOSAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0OUVDRUI2RTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI3MDE0OTk3OTBEMDBDREQzQTQgLyogRmls
dGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzcyQzAwRDkxMjk2MTlGODAwNUM5
NTc1IC8qIEZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLywKQEAgLTIzMzEyLDYgKzIzNTUzLDcg
QEAKIAkJCQkwODczQjg2QjEzNjA2NEVBMDBBNTIyQzIgLyogR2x5cGhQYWdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMkMzREE2RTBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhQYWdlVHJlZU5vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTNDNUY1MERBNTZCOTIwMDIxRUI1RCAvKiBHcmFkaWVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0U0NzRFMUUxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0
ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5NjQwRDAw
QkYyMjAwNzFCNzgyIC8qIEdyYWRpZW50QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNELmgg
aW4gSGVhZGVycyAqLywKQEAgLTIzNDI4LDYgKzIzNjcwLDcgQEAKIAkJCQlBODEzNjlEQzA5NzM3
NEY2MDBENzQ0NjMgLyogSFRNTE9wdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
MTM2OURBMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTRBRDAxMDA5MTI3RTY0MkEwMDE1MDM1RiAvKiBIVE1MT3V0cHV0RWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDRDMzYzRjAwRkFBN0JCMzAwOTdGOENDIC8qIFJ1bnRp
bWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFENzE5RjgxODEx
MDZFMDAwMTZEQzUxIC8qIEluZGV4ZWREQi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTdDQjUw
QTE5MkI5QzAwQThFRjVGIC8qIEhUTUxQYXJhZ3JhcGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODcxRDQ1ODBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTFBhcmFtRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yMzUxNSw2ICsyMzc1OCw3IEBACiAJCQkJQkM3RjQ0QTgwQjlFMzI0RTAw
QTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENUE1OTMxMTUy
NTI1RDAwMDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
OTI5MUU0QjEzNDE3MkM4MDBFNzUzREUgLyogSW1hZ2VSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlFNEMzQjFGQTBGMEU0MTYxMDA5NjkzRjYgLyogVGlsZUNhY2hlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMjc1MzU3MTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTRCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJj
ZUNHLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODggLyogSW1w
bGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjM1ODYsNiArMjM4MzAsNyBAQAog
CQkJCTdBRjExQTVBMTJFNzI3NDkwMDYxRjIzQyAvKiBJbnNwZWN0b3JSdW50aW1lQWdlbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTgyQUIxNzc0MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JT
dHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Mjg4OUI0RDEzQzYyMzkyMDA5QTYxNTYg
LyogSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMUVBRjk3
RTEyMTQzNUE0MDBFN0MxQkYgLyogRGV2aWNlTW90aW9uQ2xpZW50SU9TLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3NTQxMzNBODEwMkUwMEU4MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc4REEyMEYxNTIwRUJBMzAwNjE0MUMxIC8qIEluc3Bl
Y3RvcldlYlR5cGVCdWlsZGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM4MTBDMUMxMzY1QTQ5
NjAwRUQ2RTMzIC8qIEluc3BlY3RvcldvcmtlckFnZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIz
NjQ1LDYgKzIzODkwLDcgQEAKIAkJCQk5NzVDQTJBMjEzMDM2NzlEMDBFOTlBRDkgLyogSlNDcnlw
dG8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDZDMUZCMEMwRERDOEYwMDIwQ0ZDMyAvKiBKU0NT
U0NoYXJzZXRSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MDlFQkRDMzE2QjdGM0E2MDBDQkEz
RkMgLyogSlNDU1NGb250RmFjZUxvYWRFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0U0NzRF
MUYxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM0NkMxRkQwQzBEREM4RjAwMjBDRkMzIC8qIEpTQ1NTRm9udEZhY2VSdWxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzQ2QzFGRjBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NJbXBv
cnRSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQ2QzIwMTBDMEREQzhGMDAyMENGQzMgLyog
SlNDU1NNZWRpYVJ1bGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjM2NzEsNiArMjM5MTcsNyBAQAog
CQkJCTMxRkIxQTY2MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1OUE4NjAwODExOURBRkExMDBERUYxRUYgLyogSlNEZXZpY2VPcmll
bnRhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U0Mzg5QzE0MEIxQkE4MDA1RTQz
N0UgLyogSlNEaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQk0NEM5OTE4NjBGM0QxRUJF
MDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QUU3
QzFBMTdEMjMyMzUwMDA5RkIzMSAvKiBFbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE0NkZFNzUxODQ0MjM3MDAwMUE5MzdDIC8qIEpTT0VTVGV4dHVyZUZsb2F0
TGluZWFyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTlEREM4MzA5RTE5OEJBMDAxQkYzQzYgLyog
SlNEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzY5MSw2ICsyMzkzOCw3IEBACiAJCQkJ
RTE5QUMzRjMxODI0REM3OTAwMzQ5NDI2IC8qIENyeXB0b0FsZ29yaXRobVNIQTM4NC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkI5MTM5MkExNkFFNEZDMDAwMUZFNjgyIC8qIEpTRE9NUGF0aC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTlEMjQ3RkYwRDc1N0U2OTAwRkRGOTU5IC8qIEpTRE9NUGx1Z2lu
LmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTQwMzc5QjEyNEJFQTdGMDBBRjQwRTQgLyogV2ViQ29y
ZU1vdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE5RDI0ODAxMEQ3NTdFNjkwMEZE
Rjk1OSAvKiBKU0RPTVBsdWdpbkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTk3MjcxNjE4
MjA1NDlFMDA1OTJENTEgLyogQ3J5cHRvS2V5VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1
QTg2QjYwQzMzNjdFODAwRUVBNjQ5IC8qIEpTRE9NU2VsZWN0aW9uLmggaW4gSGVhZGVycyAqLywK
QEAgLTIzNzE5LDYgKzIzOTY3LDcgQEAKIAkJCQkzMzE0QUNFQzEwODkyMDg2MDAwRjBFNTYgLyog
SlNFeGNlcHRpb25CYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUJGMEU3NzEyQTk4Njg4MDBE
QjE3MEEgLyogSlNFWFREcmF3QnVmZmVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzcyODY5ODQx
NEZEOUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlFNEUzOUFGQjEzMzBFRkE4MDAzQUIyNzQgLyogVGlsZUxheWVyUG9vbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMEYwMTUwRTBBMTg5NTAwRkQwNEUzIC8qIEpTRmlsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkUzQkMwQ0IxMTdEM0UwODAwQjk0MDlBIC8qIEpTRmlsZUVy
cm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTg3ODVGMTEyMkUxRTg3MDAzQUFCREEgLyogSlNG
aWxlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTIzNzMzLDYgKzIzOTgyLDcgQEAKIAkJ
CQlGRTgwREE2NjBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9wb3NpdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDc5NjlEQUMxN0QxNDE1MTAwN0ZGODQyIC8qIEpTUlRDRGF0YUNoYW5uZWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTg0ODJCNzUyMTE5OENCNkIwMEJGQjAwNSAvKiBKU0hhc2hDaGFu
Z2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkVBODA3QzkwRjcxNEEwMzAwNTI0MTk5IC8q
IFNlbGVjdGlvblJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTREMTRGMEMyNzVDNjgwMDZC
QzYxNyAvKiBKU0hpc3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTdFNDEzMTA5MTU0RkEw
MDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRB
MkRGMDBBMUI4NTJBMDBDODA3RjggLyogSlNIVE1MQW5jaG9yRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yMzc5MSw2ICsyNDA0MSw3IEBACiAJCQkJMUE4NUIxRUIwQTFCMjQwNTAwRDhDODdD
IC8qIEpTSFRNTE9MaXN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTdFOUIwQTFB
ODNFMzAwN0ZCOEM1IC8qIEpTSFRNTE9wdEdyb3VwRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTgwRTdFOTkwQTFBODNFMzAwN0ZCOEM1IC8qIEpTSFRNTE9wdGlvbkVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUM1ODM2MUE5MTc0NDUyM0YwMDE3MzUxMSAvKiBGb250U2VydmljZXNJ
T1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0OEEyOUJGMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hU
TUxPcHRpb25zQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEFEMDE3M0QxMjdFODI4
NjAwMTUwMzVGIC8qIEpTSFRNTE91dHB1dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
RTJBQkE3MEExQ0U5MDUwMEI0MkIyNSAvKiBKU0hUTUxQYXJhZ3JhcGhFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKQEAgLTIzODQxLDYgKzI0MDkyLDcgQEAKIAkJCQk5MzVGNDU0MzBGN0MzQjVGMDBE
N0MxRkIgLyogSlNMYXp5RXZlbnRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFMUM0
M0MwRDk4MzBEMzAwM0IwMkYyIC8qIEpTTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZE
MjNBMTI2MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMjY2MDFFQkYxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3Jt
RXZlbnRGYWN0b3J5SU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQ2MTQxOTBDRDY4MjY5MDBG
QURBNzUgLyogSlNNZWRpYUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzNDMzlCNzBDMEQz
RDhEMDA1RjREN0EgLyogSlNNZWRpYUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUQzQTk0QTQ3
MTIyREM0MEYwMEEzN0JCQyAvKiBKU01lZGlhUXVlcnlMaXN0LmggaW4gSGVhZGVycyAqLywKQEAg
LTI0MTE2LDYgKzI0MzY4LDcgQEAKIAkJCQk2RTNGQUQzOTE0NzMzRjQwMDBFNDIzMDYgLyogSlNX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkVFOEE3NzMx
MEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMyQ0JGNEUxNDBGMUFCRDAwMzg3OUJFIC8qIEpTV2ViR0xDb250ZXh0RXZlbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTA3NDMwMEE2MEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBs
YXllclByaXZhdGVJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFM0ZBRDM5MTQ3MzNGNDAxMUU0
MjMwNyAvKiBKU1dlYkdMRGVidWdSZW5kZXJlckluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTZF
M0ZBRDM5MTQ3MzNGNDAyMkU0MjMwNyAvKiBKU1dlYkdMRGVidWdTaGFkZXJzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk2RTNGQUQzOTE0NzMzRjQwMDBFNDIzMDcgLyogSlNXZWJHTERlcHRoVGV4dHVy
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDEyOCw2ICsyNDM4MSw3IEBACiAJCQkJNTFDOTYxMUIx
ODNEMkI4MDAwRDIwMDJFIC8qIElEQkRhdGFiYXNlTWV0YWRhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCUEwN0QzMzU2MTUyQjYzMEUwMDFCNjM5MyAvKiBKU1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9y
bWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlBNTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNX
ZWJHTFRleHR1cmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxNDAzNzlEMTI0QkVBN0YwMEFGNDBF
NCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4
RTA5MTUxN0QxNEQxQzAwNDIwQUExIC8qIE1lZGlhU3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwQzQ1MzQyODEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzdFRjYyRjQxMkY5REI3NDAwQzc3QkQyIC8qIEpTV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDM4OCw2ICsyNDY0Miw3IEBA
CiAJCQkJOTM3N0FCQTAxNURFRkVFRjAwMzFGRDA0IC8qIFBhZ2luYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA4ODUwNjdGMTFEQTA0NUIwMDE4MkI5OCAvKiBQYWludEluZm8uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA4ODUwNjgwMTFEQTA0NUIwMDE4MkI5OCAvKiBQYWludFBoYXNlLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwN0VEMzVBMzE2RDZEQ0UyMDAyMjQ4RjMgLyogSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRklPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRkIwQTE5ODlDQTAw
N0ZCOEM1IC8qIFBhaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MEEzMTJCMDI2RjcwMEMx
QTM1OSAvKiBQYW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDFBMTJCMDI2NzYwMEMx
QTM1OSAvKiBQYW5uZXJOb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NjAzLDYgKzI0ODU4LDcg
QEAKIAkJCQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0IgLyogUmVuZGVyU1ZHRWxsaXBzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDNDMDkyQkMxMkQ5RTRFRTAwQTk4OUMzIC8qIFJlbmRlclNWR0Zv
cmVpZ25PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOEM1MTJEOUNBNEIwMDA0NDIz
NCAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxQUI1MDAw
MTIyODc4QTIwMDFBN0RCMCAvKiBHcmFwaGljc0NvbnRleHQzRElPUy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDM2NzA4QzcxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4QzkxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRl
clNWR0ltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODU0QjAxNTEyNTVFNEU2MDBCOUNERDAg
LyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NjExLDYgKzI0ODY3LDcg
QEAKIAkJCQlDRDNBNDk2MjE3QTlEMDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzY3MDhDQjEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0ODk0NEEzMTgwQjU3RDgwMEYxNjVEOCAvKiBT
aW1wbGVMaW5lTGF5b3V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjE3NzQ4MDEzNzhCNzcyMDA5
REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEREYxQUQ3
MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MTBCQjU4NTE0ODRFM0E3MDBCMkU4N0EgLyogUmVuZGVyU1ZHUmVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDM2NzA4Q0QxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlLmggaW4g
SGVhZGVycyAqLywKQEAgLTI0NzkzLDYgKzI1MDUwLDcgQEAKIAkJCQlFMUI3ODM5QzE2Mzc0MEE3
MDAwN0I2OTIgLyogU2hhcmVkV29ya2VyU3RyYXRlZ3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTQx
RDE2OEVFMTAyMjZFODkwMDlCQzgyNyAvKiBTaGFyZWRXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUIyQzNEQTY1MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTRCNjVBNUMxMzJGQUNCMDAwNzBFN0JFIC8qIFRpbGVMYXllci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzVBMUVBN0QxNTJCQ0YwODAwNEQwMEI2IC8qIFNpbXBsaWZ5
TWFya3VwQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE3NDFBQUQxNjYzNjYwOTAwOEE1
QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQwMEQ3
QTUxNEEzRjYxOTAwNzM0MDExIC8qIFNpbmNSZXNhbXBsZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
MjQ4NjgsNiArMjUxMjYsNyBAQAogCQkJCTUxQkUzN0UwMERBRUUwMEUwMDEwODVGQyAvKiBTdG9y
YWdlQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzUxNjBFRUIxMDA0NTQzQTAwQTdDRUUyIC8q
IFN0b3JhZ2VBcmVhSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzUxMDJFQ0YwRkQ5RUY4QzAw
RkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0Q1NTk2OTIx
NDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTFFMEJBQkIwREE1NTQ3MTAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjU2NTc2RTgxN0RBOTRFMjAwQTU2QkRDIC8qIERPTUNvbnN0cnVjdG9yV2l0aERv
Y3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUVCREQ4NDEwNUVEREVDMDA1NjgxNkYgLyog
U3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTAyNCw2ICsyNTI4
Myw3IEBACiAJCQkJQjIyMjc5RkEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFT2Zmc2V0RWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5RkQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZF
UG9pbnRMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTAwMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQk0NEEyMERCOTBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVTcG90
TGlnaHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzhFMDkxOTE3RDE0RDFDMDA0MjBB
QTEgLyogTWVkaWFTdHJlYW1UcmFja0V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0Ew
NjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUaWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNTI0Nyw2ICsyNTUwNyw3IEBACiAJCQkJOTdCQzg0QTUxMjM3MERDODAwMEM2MTYxIC8qIFRl
eHRWaWV3U291cmNlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U2NThGRjBFQTkyNDhB
MDA3RTQ1MzMgLyogVGhlbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTY1OUU2MEVBOTJGQjIw
MDdFNDUzMyAvKiBUaGVtZU1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDQyQUY3QTkxMDJDRERF
QTAwOEZENEQzIC8qIFF1aWNrTG9vay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNjU5QTkwRUE5
MjdCOTAwN0U0NTMzIC8qIFRoZW1lVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkQ2Qzk1
MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwQjkwNTYxQjBGMjU3OEJGMDA5NUZGNkEgLyogVGhyZWFkYWJsZUxvYWRlci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNTI2MSw2ICsyNTUyMiw3IEBACiAJCQkJMUFGODlBNDIxNTE4RkRF
QTAwRTU0N0I1IC8qIFRpbGVkQmFja2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk4NzcwRjMx
MjQyQzUzNTAwMjIyNkJBIC8qIFRpbGluZ0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIz
RERDMTI1MUYxMkQwMDNFRjI2OSAvKiBUaW1lSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBNTE2RThCNzEzNkUwNERCMDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRG
YWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3MTlCNzE4MTEwNkUwMDAxNkRDNTEgLyog
RE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzA1QjI0RDA5
OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjU5MjgsNiArMjYx
OTAsNyBAQAogCQkJCUZEOEM0NkVCMTU0NjA4RTcwMEE1OTEwQyAvKiBBdWRpb1NjaGVkdWxlZFNv
dXJjZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVENDgzOTBDRUQ2NkMzMjU1RjcyQzU5
IC8qIE1hdGhNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc4RTA5MDMx
N0QxNENFRTAwNDIwQUExIC8qIE1lZGlhU3RyZWFtVHJhY2tFdmVudC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0NDRENEUyMzBGNzA4QjJFMDAzMTU4RTAgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBNzk4MjQxNzBBMjU4MzAwRDQ1QzU1IC8qIEF1ZGlv
U2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREE3OTgyNzE3MEEyNzkxMDBENDVDNTUg
LyogQXVkaW9TZXNzaW9uSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q1NERFNEIxNzQ2OUM2
RDAwNUU1QjM2IC8qIEF1ZGlvU2Vzc2lvbk1hYy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1OTM3
LDYgKzI2MjAwLDcgQEAKIAkJCQlCRTg4RTBEODE3MTVEMkEyMDA2NThEOTggLyogQXVkaW9UcmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRTg4RTBEQjE3MTVEMkEyMDA2NThEOTggLyogQXVk
aW9UcmFja0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwOEExMkIwMjZGNzAwQzFB
MzU5IC8qIEF1ZGlvVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdFNDI4Q0U1MTNF
MzQwN0YwMDNCNjYxQyAvKiBSZXNvdXJjZUhhbmRsZUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTkzNEY3MTM4MEQ1QTZFRkYwMDAxOEQ2OSAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NEQwQ0U5MjM0RTAwN0VGM0NEIC8qIEF1dGhl
bnRpY2F0aW9uTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDU4MzBENEQxNjc5QjRGODAwQUNG
OEMzIC8qIEF1dG9zY3JvbGxDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjYwMDIs
NiArMjYyNjYsNyBAQAogCQkJCTQ5QUUyRDk2MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlv
blZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIxODI3NDkzMTM0Q0E0QzEwMEI5OEMyRCAv
KiBDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFNEU5MUFDMTBGN0ZC
MzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkzMTQwMzc5QzEyNEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIubW0g
aW4gU291cmNlcyAqLywKIAkJCQk0OTQ4NEZDMTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3Jh
ZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkI5MTM5MjcxNkFFNEMzNDAwMUZFNjgyIC8q
IENhbnZhc1BhdGhNZXRob2RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5NDg0RkM0MTAyQ0Yy
M0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjYwNjgs
MTIgKzI2MzMzLDE0IEBACiAJCQkJOTc2MjdCOEQxNEZCM0NFRTAwMkNEQ0ExIC8qIENvbnRleHRE
ZXN0cnVjdGlvbk9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA2NUFENEY2MEIwQzJF
REEwMDVBMkIxRCAvKiBDb250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDdEMDdCMTQxODM0MTU4ODAwQUJERDNDIC8qIEpTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdFNDc0RTIwMTI0OTREQzkwMDIzNTM2NCAvKiBT
UUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDYwMjdDQjMwQjFD
QzAzRDAwODg0QjJEIC8qIENvbnRleHRNZW51SXRlbU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTkzQjZBMEVBMEIwQkNBODQwMEY1MDI3QSAvKiBDb250ZXh0TWVudU1hYy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUZEMzE2MDI4MTJCMDI2NzYwMEMxQTM1OSAvKiBDb252b2x2ZXJOb2RlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxNDI0QzkzMTY0QjUyQzgwMEYzMkQ0MCAvKiBDb29raWVKYXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE0MjRDOTAxNjRCNDYwQjAwRjMyRDQwIC8qIENvb2tp
ZUphck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdFRTY4NDYzMTJEMjZFMzgwMEU3OTQxNSAv
KiBDb29raWVTdG9yYWdlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzdFNjU5NTAxNjNC
MTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRhSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTEzRjAxRjExMjcwRTE5MDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2VNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk5NzQ2QUYyMTE0RjREREU2MDAzRTdBNzIgLyogQ29vcmRpbmF0ZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI5NTAwRTgyMDU2QjAwQjI1OTY1IC8qIENvdW50ZXJEaXJl
Y3RpdmVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjYxNzksNiArMjY0NDYsNyBAQAogCQkJCUZF
NDU2RjE4MTY3N0Q3NEUwMDVFRERGOSAvKiBEYXRhYmFzZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRkVCMjZEMjgxNjdBOEYyQTAwRkREMjZCIC8qIERhdGFiYXNlU2VydmVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZFREVGODQxMTY3OTcxMDgwMDBFNDQ0QSAvKiBEYXRhYmFzZVN0
cmF0ZWd5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0RTM5QUZEMTMzMEVGQzYwMDNBQjI3NCAv
KiBUaWxlTGF5ZXJQb29sLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBMkExNTA1RjA4MTAw
MUI3NEFDIC8qIERhdGFiYXNlU3luYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNkEyRDE1
MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUYXNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3
QkM2QTJGMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRocmVhZC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI2MzE0LDYgKzI2NTgyLDcgQEAKIAkJCQlGNUMwNDFFNDBGRkNBOTZEMDA4MzlENEEg
LyogRE9NSFRNTERhdGFMaXN0RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxNTdBOEU4
MTgxODRDNjcwMDlGODIxRCAvKiBKU0NyeXB0b0tleUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwNzA1ODUyMzE3RkRDMTQwMDA1RjJCQ0IgLyogTWVkaWFUcmFja0NvbnN0cmFpbnRzLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZFRDEzRDQwMENFQTkzOTQwMEQ4OTQ2NiAvKiBJY29uSU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNUY4MzExODIyRjExQjAwRDg0Q0Q5IC8qIENyeXB0
b0FsZ29yaXRobUhNQUMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDM1OUQ3OTIxMjlDQTNDMDAw
MDZFNUQyIC8qIERPTUhUTUxEZXRhaWxzRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1
QkE0RDBDMEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MRGlyZWN0b3J5RWxlbWVudC5tbSBpbiBT
b3VyY2VzICovLApAQCAtMjYzNzUsNiArMjY2NDQsNyBAQAogCQkJCTg1QkE0RDE4MEFBNjg4Njgw
MDg4MDUyRCAvKiBET01IVE1MVUxpc3RFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgx
ODVGM0UwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzQzg0MUZGMDlDRTg1ODMwMERGRjVFNSAvKiBET01JbXBsZW1lbnRhdGlvbkZy
b250LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2NjAxRUMwMTRCM0I5QUQwMDEyQzBGRSAvKiBQ
bGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMUEzN0JBMDk3
QzcxNUYwMDE5RjNEOCAvKiBET01JbnRlcm5hbC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1RkYz
MTVCMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJODUwNjU2RkYwQUFCNDc2MzAwMkQxNUMwIC8qIERPTU1lZGlhTGlzdC5tbSBpbiBTb3Vy
Y2VzICovLApAQCAtMjY0NTcsNiArMjY3MjcsNyBAQAogCQkJCTQ5ODc3MERCMTI0MkM1MzUwMDIy
MjZCQSAvKiBEcmF3aW5nQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQzhCNUE2MTgw
NDc0RjcwMDE2RTY4NSAvKiBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDk4NzcxNTMxMjQzRjlGQTAwMjIyNkJBIC8qIERyYXdpbmdCdWZmZXJNYWMubW0g
aW4gU291cmNlcyAqLywKKwkJCQkzMUVBRjk3RjEyMTQzNUE0MDBFN0MxQkYgLyogRGV2aWNlTW90
aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc4RTA5MTIxN0QxNENFRTAwNDIw
QUExIC8qIFVzZXJNZWRpYUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ2RUQy
QzcxMzZCOEU2NjAwM0NGMDcyIC8qIER5bmFtaWNzQ29tcHJlc3Nvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGRDUzNzM1NjEzN0I2NTNCMDAwMDhEQ0UgLyogRHluYW1pY3NDb21wcmVzc29yS2Vy
bmVsLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY2NTgsNiArMjY5MjksNyBAQAogCQkJCTA3OTY5
REJEMTdEMTQxNTEwMDdGRjg0MiAvKiBKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFERTI5MEExNTJBQzgwMEIxMkE2OCAvKiBIVE1MQm9k
eUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkY3QTgwQTE1Njk3ODAwMEE0MjM0
IC8qIEhUTUxCUkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUY2OEQ0QUUxNEJCOURD
QTAwN0I1QzYyIC8qIE1lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUE4MTM2OUQzMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MQnV0dG9uRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5M0YxOUFGRDA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThERjNGRDEwOTdGQTBGQzAwNTI5ODFCIC8q
IEhUTUxDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY2NjksOCArMjY5NDEsMTAg
QEAKIAkJCQlBOEVBN0NCMTBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTERpdkVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThFQTc5RjUwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxETGlzdEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBOTEwODI0NUU1OTAwMUU5QUJDIC8q
IEhUTUxEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0NEM5OTE4MjBGM0QxRTBEMDA1
ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzdCMzg2
NjEyMjg4M0U5MDBCODFGRjggLyogSFRNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzMzA5REU3MDk5RTY0OTIwMDU2RTU4MSAvKiBodG1sZWRpdGluZy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBNTE2RThCODEzNkUwNERCMDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNh
Y2hlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhU
TUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxNTdBOEYwMTgxODU0MjUwMDlGODIx
RCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3
QzgxMjIwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI2OTA2LDYgKzI3MTgwLDcgQEAKIAkJCQk3MEY1NDZFOEI4QjVEN0RDNTRFRTE0
NEUgLyogSlNCZWZvcmVVbmxvYWRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGREYwOURD
ODEzOTlCNjIyMDA2ODhFNUIgLyogSlNCaXF1YWRGaWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZEOEFBNjNDMTY5NTE0OEUwMEQyRUE2OCAvKiBKU0JpcXVhZEZpbHRlck5vZGVDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzE0MDM3OUUxMjRCRUE3RjAwQUY0MEU0IC8qIERl
dmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkUyRDk5Q0Qx
MEUyQkJEQTAwNDk2MzM3IC8qIEpTQmxvYi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4OTMxREU1
QjE0QzQ0QzQ0MDAwREM5RDIgLyogSlNCbG9iQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NDlFMjg3MTA3RDREQjQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI2OTE0LDYgKzI3MTg5LDcgQEAKIAkJCQk2NURGMzIzQjA5RDFERTY1MDAwQkUz
MjUgLyogSlNDYW52YXNQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUVEMTQyMTA1
MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDlFRUQxNDQxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNEQ0E4Mjk2MTY3OTEwMEYwMDg3NTcxNCAv
KiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUVE
MTRFMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUVFRDE1MDEwNTE5NzFBMDAwOTlGQUIgLyogSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjlCN0Ew
MEJBNjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI2OTQ4LDYgKzI3MjI0LDcgQEAKIAkJCQlCQzQ2QzFFRTBDMEREQkRGMDAyMENGQzMgLyogSlND
U1NSdWxlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4RDA1RkE3MEEyM0IzMDEwMDVF
NzIwMyAvKiBKU0NTU1J1bGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MDM2M0U1MTgx
QTFDREMwMEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbSBpbiBTb3VyY2VzICovLAor
CQkJCUU0NTM5MEFFMEVBRkY0QjUwMDM2OTVDOCAvKiBTeXN0ZW1NZW1vcnlJT1MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTM5MjI2MkYxMDMyMTA4NDAwNkU3RDVEIC8qIEpTQ1NTUnVsZUxpc3RD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyMDExQjYwQTAwMzEzMzAwODMwM0Y5IC8q
IEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRkI2OThDRjE4
MzQwMkJCMDAxNThBMzEgLyogTGluZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjk3NSw2
ICsyNzI1Miw3IEBACiAJCQkJNTlBODYwMDYxMTlEQUY3RjAwREVGMUVGIC8qIEpTRGV2aWNlT3Jp
ZW50YXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1OTBFMUI0QjExRTRFRjcwMDA2
OUY3ODQgLyogSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDRTQzOEEyMTQwQzBEQzAwMDVFNDM3RSAvKiBKU0RpY3Rpb25hcnkuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNDRDMzYzRjEwRkFBN0JCMzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrc0lPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTY1OUREQzgyMDlFMTk4QkEwMDFC
RjNDNiAvKiBKU0RvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCQThEMTA0MkY1
QjEwMDA5RDQ0NyAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
NDk0RURFMEExMjNGNEMwMEZEQUZDMSAvKiBKU0RvY3VtZW50RnJhZ21lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yNjk4Niw2ICsyNzI2NCw3IEBACiAJCQkJMkUwODg4RDQxMTQ4ODQ4QTAwQUY0
MjY1IC8qIEpTRE9NRm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkUwODg4RTYxMTQ4
ODRFMjAwQUY0MjY1IC8qIEpTRE9NRm9ybURhdGFDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTFDMzZDQkQwRUIwODA2MjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTA3RUQzNUEyMTZENkRDQzkwMDIyNDhGMyAvKiBJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlQVZGSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVERjMxRjcwOUQxQ0M2MDAw
MEJFMzI1IC8qIEpTRE9NSW1wbGVtZW50YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlE
MjQ4MDYwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTlEMjQ4MDgwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGVBcnJheS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTI3MDI4LDYgKzI3MzA3LDcgQEAKIAkJCQlCQzYwOTAyMDBFOTFC
OEVDMDAwQzY4QjUgLyogSlNFdmVudFRhcmdldEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMzE0QUNFQjEwODkyMDg2MDAwRjBFNTYgLyogSlNFeGNlcHRpb25CYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTZFQkYwRTc2MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJz
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5MDQ5MEVBRkQ2MzcwMDM2OTVDOCAvKiBXZWJD
b3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNzcyODY5ODMxNEZE
OUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDMDBGMDE0MEUwQTE4OTUwMEZEMDRFMyAvKiBKU0ZpbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkUzQkMwQ0ExMTdEM0UwODAwQjk0MDlBIC8qIEpTRmlsZUVycm9yLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMjcxNzYsNiArMjc0NTYsNyBAQAogCQkJCUNEQTk4RTA0MTYw
MzlFMUEwMEZFQTNCMSAvKiBKU01lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzk2
OURDMzE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENTdGF0c1Jlc3BvbnNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUNEQTk4RTA2MTYwMzlFMUYwMEZFQTNCMSAvKiBKU01lZGlhS2V5U2Vzc2lvbi5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwNzQzMDBBNTBGNEI4QkNGMDA4MDc2Q0QgLyogTWVkaWFQ
bGF5ZXJQcml2YXRlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzQzM5QjYwQzBEM0Q4RDAw
NUY0RDdBIC8qIEpTTWVkaWFMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQzQTk0QTQ2MTIy
REM0MEYwMEEzN0JCQyAvKiBKU01lZGlhUXVlcnlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUNENjQxRUJGMTgxOUIzNjAwMEVFNEM0MSAvKiBNZWRpYVRpbWVNYWMuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0yNzI2NCw2ICsyNzU0NSw3IEBACiAJCQkJNTFEQ0U4MDIwQ0FDOUYxQzAwNDg4MzU4
IC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MUVBQzU2NzE4MTVFRDNFMDA0RjFCQTQgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCNTlERDZBNjExOTAyQTYyMDA3RTk2ODQgLyogSlNTUUxTdGF0
ZW1lbnRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBQTEyREY0OTE3NDNERjgzMDA0
REFGREYgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcklPUy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUI1OURENkFBMTE5MDJBNzEwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2MzgwQ0U5MjI1RTAwN0VGM0NEIC8qIEpT
U1FMVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU5REQ2OUUxMTkwMkE0MjAw
N0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI3MzMxLDYgKzI3NjEzLDcgQEAKIAkJCQlCMkZBM0Q3NjBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM1OEU4N0Mx
MzYwQTJFRTAwRTQ3NDhDIC8qIEpTU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMkZBM0Q3ODBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRUZsb29kRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0NEM5OTFBMDBGM0QyMTBFMDA1ODY2NzAgLyogVGhl
bWVJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q3QTBBQjc1QTZGMDAwRTVBQzQgLyog
SlNTVkdGRUZ1bmNBRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q3QzBBQjc1
QTZGMDAwRTVBQzQgLyogSlNTVkdGRUZ1bmNCRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMkZBM0Q3RTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdGRUZ1bmNHRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTI3MzU0LDYgKzI3NjM3LDcgQEAKIAkJCQlBODNCNzkwMzBDQ0FGRjE1
MDAwQjA4MjUgLyogSlNTVkdGb250RmFjZU5hbWVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4M0I3OEZGMENDQUZGMTUwMDBCMDgyNSAvKiBKU1NWR0ZvbnRGYWNlU3JjRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBODNCNzhGRDBDQ0FGRjE1MDAwQjA4MjUgLyogSlNTVkdG
b250RmFjZVVyaUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ1MzkwNEQwRUFGRDYz
NzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDk4MEFC
NzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyRkEzRDlBMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0dFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyN0IyODI3MENFRjBDMDcwMEQzOUQ1NCAvKiBKU1NWR0dseXBo
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MzYzLDYgKzI3NjQ3LDcgQEAKIAkJCQk4
NTE3NEVDMkJDQ0FGMTdFQUUzRjQ2RjggLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODQ4NTIyN0IxMTkwMTYyQzAwNkVEQzdGIC8qIEpTU1ZHSEtlcm5FbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDlFMEFCNzVBNkYwMDBFNUFDNCAvKiBK
U1NWR0ltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDI0QTNBMDEzMzBERjFF
MDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEQTAw
QUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTGVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3
NzY2NEZDMTgzRTZCNUMwMDEzM0I5MiAvKiBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA4RTRGRTQ2MEUyQkQ0MTQwMEY0Q0FFMCAvKiBKU1NWR0xl
bmd0aEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3Mzg5LDYgKzI3Njc0LDcgQEAKIAkJ
CQlCMkZBM0RDMDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVs
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzREMyMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJG
QTNEQzQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJl
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNEI2NUE1RTEzMkZBREI2MDA3MEU3QkUgLyogVGls
ZUxheWVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEQzYwQUI3NUE2RjAwMEU1QUM0IC8q
IEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjJGQTNEQzgwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNS
ZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEQ0EwQUI3NUE2RjAwMEU1QUM0IC8qIEpT
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yNzQzMiw2ICsyNzcxOCw3IEBACiAJCQkJQjJGQTNFMEUwQUI3NUE2RjAwMEU1QUM0IC8qIEpT
U1ZHVFJlZkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwMzYzRDYxODFBMTQ2NTAw
QzA3NEE1IC8qIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyRkEzRTEwMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RTcGFuRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlFNDUzOTA0MzBFQUZENjM3MDAzNjk1QzggLyogUGxhdGZvcm1TY3JlZW5J
T1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0UxMjBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdVbml0VHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNUY4NTExODI4M0E1NjAwRDg0
Q0Q5IC8qIEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMkZBM0UxNDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdVc2VFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMjc1MzEsNiArMjc4MTgsNyBAQAogCQkJCUJDRUZFMUVBMERDQTVGNjQwMDcz
OTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFRkUxRTUw
RENBNUYzMzAwNzM5MjE5IC8qIEpTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NTAzMUI0MzBBNDRFRkM3MDBGOTkyRTAgLyogS2V5Ym9hcmRFdmVudC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlDNTgzNjFBQTE3NDQ1MjNGMDAxNzM1MTEgLyogRm9udFNlcnZpY2Vz
SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0IzRDgxMTRCMTY2QTAwMUM0MjlCIC8qIEtl
eUV2ZW50Q29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQkyNjU1NDEzQTE0ODk4MTFDMDAwREZD
NUQgLyogS2V5RXZlbnRJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTFFRjJDMTE3RjBGRDM1
MDBFNEZBMTYgLyogSlNJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzU5MiwxMCAr
Mjc4ODAsMTIgQEAKIAkJCQk1MTAxOTQ0NDE4MzZGN0U0MDA5MjU1MjMgLyogSURCQ3Vyc29yQmFj
a2VuZE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkFCRTcyRjQxMDU5QzFFQjAw
RDk5OUREIC8qIE1hdGhNTEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkFCRTcyRkQx
MDU5QzIxMTAwRDk5OUREIC8qIE1hdGhNTEVsZW1lbnRGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUJFQTgwN0M4MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZBQkU3MkY2MTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxJbmxpbmVD
b250YWluZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZBQkU3MkY4MTA1OUMxRUIw
MEQ5OTlERCAvKiBNYXRoTUxNYXRoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQUJF
NzJGRTEwNTlDMjExMDBEOTk5REQgLyogTWF0aE1MTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkE2NTRBNkIxMTA4QUJFRDAwMjYxNUUwIC8qIE1hdGhNTFRleHRFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUU0NTM5MDQ1MEVBRkQ2MzcwMDM2OTVDOCAvKiBTY3JvbGxWaWV3SU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlENURDMkIwRjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RTkxMUM2MEVG
ODZENDcwMDlEMENBRiAvKiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDE3MjUzQUExMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc2MzEsMTEgKzI3OTIxLDEzIEBACiAJCQkJOTMzMDlE
RjkwOTlFNjQ5MjAwNTZFNTgxIC8qIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxQURFQ0NGMEU3NkFEOEIwMDRBMUE1RSAvKiBNZXNzYWdlQ2hh
bm5lbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NTc5M0U4MzBEMENFMEIzMDA3RkMwQUMgLyog
TWVzc2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ0M0YwNDI3MEU3NUM4RkIwMDdF
NTQwNyAvKiBOZXR3b3JrU3RhdGVOb3RpZmllcklPUy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MUFERUNDMDBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTc4RTUyNkYxMzQ2QkQxNzAwQUQ5QzMxIC8qIE1ldGVyU2hhZG93RWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzN0REQ0Q5NDEzODQ0RkQ1MDAwOEI3OTMgLyogTUlNRUhlYWRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzc3MkM0RTBDNEVCMzA0MDA4MzI4NUYgLyogTUlN
RVR5cGVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzc3MkM1RTBDNEVCMzQ0MDA4
MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5
MDQ3MEVBRkQ2MzcwMDM2OTVDOCAvKiBTb3VuZElPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUy
RjEwODY1MTYyQjZEQTQwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUM2RDc0QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25M
aXN0TGV2ZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEQzUxMjUxRjEyRDAwM0VGMjY5
IC8qIE1vbnRoSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc3MjMsNiArMjgwMTUs
NyBAQAogCQkJCUUxMjg0QUVBMTA0NDdERUUwMEVBRUI1MiAvKiBQYWdlVHJhbnNpdGlvbkV2ZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNjczMEEzMTgyRDhGQkIwMDNGQUY1QyAvKiBJREJD
dXJzb3JCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTFFQ0MyMEM5MUM5MDQwMERD
MjU1QiAvKiBQYWdlVVJMUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTM3MjdERkQ1MTQy
QUFFNDUwMEQ0NDlDQiAvKiBGb250Q2FjaGVJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlGRkQ1
Qjk3QTEzNUNDOTc4MDBENUU5MkEgLyogUGFnZVZpc2liaWxpdHlTdGF0ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRDMxNjBBMjEyQjAyNkY3MDBDMUEzNTkgLyogUGFubmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUZEMzE2MDE5MTJCMDI2NzYwMEMxQTM1OSAvKiBQYW5uZXJOb2RlLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjc3NTEsNiArMjgwNDQsNyBAQAogCQkJCTQ5NTg3ODIyMTJBNTdE
REYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlD
REVBNzYzMDE0NjA4QTUzMDA4QjMxRjEgLyogUGxhdGZvcm1DbG9ja0NBLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUNEQUE4RDBBMTRENzFCMkUwMDYxRUE2MCAvKiBQbGF0Zm9ybUNsb2NrQ00ubW0g
aW4gU291cmNlcyAqLywKKwkJCQk0NDJBRjdBQTEwMkNEREVBMDA4RkQ0RDMgLyogUXVpY2tMb29r
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBQTQ4NkYxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRm
b3JtRXZlbnRGYWN0b3J5TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU0NEY3ODgxNUNGQjJB
ODAwQUYzM0E4IC8qIFBsYXRmb3JtTG9jYWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxQkY3
MDBGMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTI3ODM5LDYgKzI4MTMzLDcgQEAKIAkJCQlCQ0VBNDg3NzA5N0Q5MzAy
MDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODc5
MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMYXllci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjU4MEQwMDBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUU0NTM5MDFEMEVBRkNBQ0EwMDM2OTVDOCAvKiBNSU1FVHlwZVJlZ2lzdHJ5
SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1ODBDRkUwRjEyREU5QjAwNTFENjg5IC8qIFJl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MEQxMEQ5OTE1NDVG
NTc2MDA5NkQyODggLyogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTNDMjQ0RkVCQTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMjc4OTgsNiArMjgxOTMsNyBAQAogCQkJCUE4REY0QUVBMDk4
MEM0MkMwMDUyOTgxQiAvKiBSZW5kZXJUYWJsZUNlbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThERjRBRTgwOTgwQzQyQzAwNTI5ODFCIC8qIFJlbmRlclRhYmxlQ29sLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE4REY0QUYwMDk4MEM0MkMwMDUyOTgxQiAvKiBSZW5kZXJUYWJsZVJvdy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlFNEI2NUE1QTEzMkZBQUY5MDA3MEU3QkUgLyogVGlsZUdyaWQu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlBOERGNEFFRDA5ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVy
VGFibGVTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODhCMDk3RDkzMDIwMDk0
QzlFNCAvKiBSZW5kZXJUZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFCNjdEMUE4MDk3RjNB
RTMwMEY5MzkyRSAvKiBSZW5kZXJUZXh0Q29udHJvbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3
OTk1LDYgKzI4MjkxLDcgQEAKIAkJCQkwRjYwNUFFQzE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xs
aW5nQ29uc3RyYWludHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNjJFRTcxNERBMjJBNzAw
NDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
RjYyRUU2MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbSBpbiBT
b3VyY2VzICovLAorCQkJCUNENTU5NjkxMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFk
ZXJJT1MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNDMzhCRkUxNjQ0NzNDNzAwMDkxRUIyIC8q
IFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMUNCRDBD
MTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTMxQ0JEMTMxNjFBNDRGODAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlTm9kZU1hYy5t
bSBpbiBTb3VyY2VzICovLApAQCAtMjgwMzMsNiArMjgzMzAsNyBAQAogCQkJCUJDNUVCOEMzMEU4
MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE2RDE2
OTYyMTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZENDVBOTUzMTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkyOTAzNzE2NTE2QkExMUJDMDBGRUZERjAgLyogQ29udGVudEZpbHRlcklPUy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUZENDVBOTU0MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZUluZm8uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkQ0NUE5NTUxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlSW5zaWRl
SW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDQ1QTk1NjE3NUQzRkI4MDBDMjFFQzggLyog
U2hhcGVPdXRzaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4MjIzLDYgKzI4NTIxLDcg
QEAKIAkJCQlDREUzQTg1NzE3RjYwMjA0MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkZP
YmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5QjMwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0RvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyOEM2QTI3MEQwMEM0NDgwMDMzNEFB
NCAvKiBTVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxNzc0
ODExMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjIyMjc5QjYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0VsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTgzM0M4NTIwQTJDRjUyODAwRDU3NjY0IC8qIFNWR0VsZW1lbnRGYWN0b3J5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUI5MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdF
bGVtZW50SW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODMxNSw2ICsyODYxNCw3IEBA
CiAJCQkJQjIyMjdBNTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg0NzZDOUVGMTFERjZBNTgwMDU1NUIwMiAvKiBTVkdQYXRoUGFyc2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTgwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQ
YXRoU2VnTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTBEODRFQjEwNDg0MzZFMDAxQTE3
OUUgLyogV2ViRXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NDc2QzlFNTExREY2QTBCMDA1
NTVCMDIgLyogU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNE
RjJCMDE4MTgyMDU0MDcwMEYyQjQyNCAvKiBNb2NrVHJhY2tzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTA4RkYxMDIwMTI5NTBGNUEwMEYwMDI3NiAvKiBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVh
ck9mZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4NDE3LDYgKzI4NzE3LDcgQEAKIAkJCQk0OTg3
NzBGMDEyNDJDNTM1MDAyMjI2QkEgLyogVGV4dHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
N0JDODRBNDEyMzcwREM4MDAwQzYxNjEgLyogVGV4dFZpZXdTb3VyY2VQYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNFNjVEMzIwRUFEMTIxMTAwN0U0NTMzIC8qIFRoZW1lLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUU0QzNCMUZDMEYwRTQxNzAwMDk2OTNGNiAvKiBUaWxlQ2FjaGUubW0g
aW4gU291cmNlcyAqLywKIAkJCQlCQ0U2NTlFOTBFQTkyRkZBMDA3RTQ1MzMgLyogVGhlbWVNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzZENkM5NDEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwQjkwNTYxRTBGMjU3RTkz
MDA5NUZGNkEgLyogVGhyZWFkYWJsZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4NTA1
LDYgKzI4ODA2LDcgQEAKIAkJCQk3RTY2RTIzMzE2RDZFQjZDMDBGN0U3RkYgLyogV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUFUQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTY2RTIzMzE3RTZFQjZD
MDBGN0U3RkYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTZFM0ZBRThFMTQ3MzNGREIwMEU0MjMwNiAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJl
UzNUQy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjk3QTY1ODE1NURBODFFMDBGQURENEMgLyog
RGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNkU0RTkxQUUx
MEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTNGNkYxRUQxMjdGNzBCMTAwNTVDQjA2IC8qIFdlYkdMQ29udGV4dEV2ZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTAxRDNDRjgyMTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTENv
bnRleHRHcm91cC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4NjMwLDYgKzI4OTMyLDcgQEAKIAkJ
CQlFMUVDMjk5RjBCQjA0QzZCMDBFQTE4N0IgLyogWFBhdGhOb2RlU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBQjdGQzc1MEE4QjkyRUMwMEQ5RDM3QiAvKiBYUGF0aE5TUmVzb2x2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0ZDNzgwQThCOTJFQzAwRDlEMzdCIC8qIFhQYXRoUGFy
c2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ0NzY1MzFCMTMzMTcwOTkwMDA2Qjc4OSAvKiBT
U0xLZXlHZW5lcmF0b3JJT1MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0ZDN0EwQThCOTJF
QzAwRDlEMzdCIC8qIFhQYXRoUGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUI3RkM3QzBB
OEI5MkVDMDBEOUQzN0IgLyogWFBhdGhQcmVkaWNhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUFCN0ZDN0UwQThCOTJFQzAwRDlEMzdCIC8qIFhQYXRoUmVzdWx0LmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZpbHRlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZpbHRlci5oCmluZGV4IDkzZjIwOWRiNjNl
OWE5NjBiMjU1NjRkYmMzNjM5Y2U5NWY1NDY5MDAuLmQwNWUyYWEyODdmNGMyYTYzOGQzYTc4M2I2
ODZhMWFlM2VhM2NkZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRl
bnRGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50RmlsdGVyLmgK
QEAgLTMyLDYgKzMyLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uYWwuaD4KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKQogT0JKQ19DTEFTUyBXZWJG
aWx0ZXJFdmFsdWF0b3I7CiAjZW5kaWYKQEAgLTUxLDYgKzU1LDExIEBAIHB1YmxpYzoKICAgICBi
b29sIGRpZEJsb2NrRGF0YSgpIGNvbnN0OwogICAgIGNvbnN0IGNoYXIqIGdldFJlcGxhY2VtZW50
RGF0YShpbnQmIGxlbmd0aCkgY29uc3Q7CiAgICAgCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBzY2hlbWUoKTsKKyAgICB2b2lkIHJlcXVlc3RVbmJsb2NrQW5kRGlz
cGF0Y2hJZlN1Y2Nlc3NmdWwoRnVuY3Rpb248dm9pZCgpPik7CisjZW5kaWYKKwogcHJpdmF0ZToK
ICAgICBleHBsaWNpdCBDb250ZW50RmlsdGVyKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCmluZGV4IGYzNTM1NmNiZDVkYTI4MDRhODY1
MmE5MDJhOTUwMWY0OTA1MDMxZjMuLjUzNzliODY3MDZjODJjNzk5ZmM3MDQyZjkwMDRiZTY4YWMy
ZmE4NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaApAQCAtMzQsNyArMzQsNyBAQAog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYg
UExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
QEAgLTU1LDExICs1NSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEYXRhT2JqZWN0
R3RrOwogfQogdHlwZWRlZiBXZWJDb3JlOjpEYXRhT2JqZWN0R3RrKiBEcmFnRGF0YVJlZjsKLSNl
bGlmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkgfHwgUExBVEZPUk0oTklY
KQorI2VsaWYgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKSB8fCBQTEFURk9S
TShOSVgpIHx8IFBMQVRGT1JNKElPUykKIHR5cGVkZWYgdm9pZCogRHJhZ0RhdGFSZWY7CiAjZW5k
aWYKIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZyYW1lOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCmluZGV4IGRjOTcxYjM2ZTdhZWVlMjQyNGFiZTEzYzFh
OTZmNzRjMmQ3YzhlMmQuLjRhMTBmMTZkMzNlZDVmY2MzNTQ4OTNlZmQ5YjZjZTcyY2QzMGU4NTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKQEAgLTc1LDYgKzc1LDI1
IEBAIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBm
aWxlbmFtZXMpCiAgICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKGZpbGVzKTsKIH0KIAorI2lmIFBM
QVRGT1JNKElPUykKKy8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIGFsbW9zdCBpZGVudGljYWwg
dG8gRmlsZUNob29zZXI6OmNob29zZUZpbGVzKCkuIFdlIHNob3VsZCBtZXJnZSB0aGlzIGZ1bmN0
aW9uCisvLyB3aXRoIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcygpIGFuZCBoZW5jZSByZW1vdmUg
dGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCit2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZp
bGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IFN0cmluZyYgZGlzcGxh
eVN0cmluZywgSWNvbiogaWNvbikKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVsZWdhbnQu
IFdlIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBzZXR0aW5ncyBoZXJlLgorICAgIGlmIChtX3Nl
dHRpbmdzLnNlbGVjdGVkRmlsZXMgPT0gZmlsZW5hbWVzKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8RmlsZUNob29z
ZXJGaWxlSW5mbz4gZmlsZXM7CisgICAgZm9yIChhdXRvIGZpbGVuYW1lIDogZmlsZW5hbWVzKQor
ICAgICAgICBmaWxlcy5hcHBlbmQoRmlsZUNob29zZXJGaWxlSW5mbyhmaWxlbmFtZSkpOworICAg
IG1fY2xpZW50LT5maWxlc0Nob3NlbihmaWxlcywgZGlzcGxheVN0cmluZywgaWNvbik7Cit9Cisj
ZW5kaWYKKwogdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPEZpbGVD
aG9vc2VyRmlsZUluZm8+JiBmaWxlcykKIHsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVsZWdh
bnQuIFdlIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBzZXR0aW5ncyBoZXJlLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgKaW5kZXggNmMwMjNlM2Q2ZGRkM2VkZDkwNzMxZDFjMWFh
ODljYTk3MzE3ODgwMC4uOGQ3NTllNjkzNzhjNmQwNjQ2YzFlZWM5MTdmYmMyYTQ0ZmFmMTM1NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oCkBAIC0zNyw2ICszNyw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbGVDaG9vc2VyOworY2xhc3MgSWNvbjsKIAog
c3RydWN0IEZpbGVDaG9vc2VyRmlsZUluZm8gewogICAgIEZpbGVDaG9vc2VyRmlsZUluZm8oY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lID0gU3RyaW5nKCkpCkBA
IC03MCw2ICs3MSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RmlsZUNob29zZXJDbGllbnQo
KSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBmaWxlc0Nob3Nlbihjb25zdCBWZWN0b3I8RmlsZUNo
b29zZXJGaWxlSW5mbz4mKSA9IDA7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBU
aGlzIGZ1bmN0aW9uIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gRmlsZUNob29zZXI6OmZpbGVzQ2hv
c2VuKCkuIFdlIHNob3VsZCBtZXJnZSB0aGlzCisgICAgLy8gZnVuY3Rpb24gd2l0aCBGaWxlQ2hv
b3Nlcjo6ZmlsZXNDaG9zZW4oKSBhbmQgaGVuY2UgcmVtb3ZlIHRoZSBQTEFURk9STShJT1MpLWd1
YXJkLgorICAgIHZpcnR1YWwgdm9pZCBmaWxlc0Nob3Nlbihjb25zdCBWZWN0b3I8RmlsZUNob29z
ZXJGaWxlSW5mbz4mLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlTdHJpbmcsIEljb24qKSA9IDA7Cisj
ZW5kaWYKIH07CiAKIGNsYXNzIEZpbGVDaG9vc2VyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZUNo
b29zZXI+IHsKQEAgLTgxLDYgKzg3LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2hvb3NlRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIHZvaWQgY2hvb3NlRmlsZXMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhdGhzKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFRoaXMg
ZnVuY3Rpb24gaXMgYWxtb3N0IGlkZW50aWNhbCB0byBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMo
KS4gV2Ugc2hvdWxkIG1lcmdlIHRoaXMKKyAgICAvLyBmdW5jdGlvbiB3aXRoIEZpbGVDaG9vc2Vy
OjpjaG9vc2VGaWxlcygpIGFuZCBoZW5jZSByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQu
CisgICAgdm9pZCBjaG9vc2VNZWRpYUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywg
Y29uc3QgU3RyaW5nJiBkaXNwbGF5U3RyaW5nLCBJY29uKik7CisjZW5kaWYgICAgCiAKICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgcGFzcyBmaWxlIHBhdGhzIHRoYXQgY291
bGQgYmUgdmlydHVhbCBwYXRocyB3aXRoIHByb3BlciBkaXNwbGF5IG5hbWVzIHJhdGhlciB0aGFu
IHBhc3Npbmcgc3RydWN0cy4KICAgICB2b2lkIGNob29zZUZpbGVzKGNvbnN0IFZlY3RvcjxGaWxl
Q2hvb3NlckZpbGVJbmZvPiYgZmlsZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVt
LmNwcAppbmRleCA0MDJmZjE3YWEwYTNkNzVjNGU2MWQ4Y2JhYTBhNWM3NGI5ZDEyNWZmLi40ZTBk
OWQ2NmNkNGI4ZTdhOTI4ZTQ2OWExZDFlMTcwY2FhZDUwZGJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9GaWxlU3lzdGVtLmNwcApAQCAtOTcsNiArOTcsMTAgQEAgU3RyaW5nIGVuY29kZUZvckZp
bGVOYW1lKGNvbnN0IFN0cmluZyYgaW5wdXRTdHJpbmcpCiAKICNpZiAhUExBVEZPUk0oTUFDKSB8
fCBQTEFURk9STShJT1MpCiAKK3ZvaWQgc2V0TWV0YWRhdGFVUkwoU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJikKK3sKK30KKwogYm9vbCBjYW5FeGNsdWRlRnJvbUJhY2t1cCgp
CiB7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCmlu
ZGV4IDlhNWEzOWYzZTJlMDk0MjUyMWExZjZlNjkwNDgwMGRlNTAzNDc4NWQuLjM0ZmUwYTQzMGY3
ZTZhMzMzYzIzZmUzMDM1Y2Q5OWUxMTFmOTZhYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
U3lzdGVtLmgKQEAgLTE1MSw2ICsxNTEsOCBAQCBTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKTsK
IFN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJik7CiBTdHJpbmcgZGlyZWN0b3J5
TmFtZShjb25zdCBTdHJpbmcmKTsKIAordm9pZCBzZXRNZXRhZGF0YVVSTChTdHJpbmcmIFVSTFN0
cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5nJiBwYXRoKTsKKwogYm9v
bCBjYW5FeGNsdWRlRnJvbUJhY2t1cCgpOyAvLyBSZXR1cm5zIHRydWUgaWYgYW55IGZpbGUgY2Fu
IGV2ZXIgYmUgZXhjbHVkZWQgZnJvbSBiYWNrdXAuCiBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNv
bnN0IFN0cmluZyYpOyAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bC4KIApAQCAtMTg5LDEw
ICsxOTEsNiBAQCBTdHJpbmcgZW5jb2RlRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJik7CiBSZXRh
aW5QdHI8Q0ZVUkxSZWY+IHBhdGhBc1VSTChjb25zdCBTdHJpbmcmKTsKICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oTUFDKQotdm9pZCBzZXRNZXRhZGF0YVVSTChTdHJpbmcmIFVSTFN0cmluZywgY29u
c3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5nJiBwYXRoKTsKLSNlbmRpZgotCiAjaWYg
UExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShOSVgpCiBTdHJpbmcgZmlsZW5hbWVUb1N0cmluZyhj
b25zdCBjaGFyKik7CiBTdHJpbmcgZmlsZW5hbWVGb3JEaXNwbGF5KGNvbnN0IFN0cmluZyYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9uZS5jcHAKaW5kZXggMzEwYWEwODBjYjI1
YTc0N2E2M2Q4ZTA2NDRjZjYwNzEyNWM0NTA5MS4uY2Q5NDZhNGUyNGZmZDQyODk5NWQ3ZTU5OGRk
NDE0ZTEwMTQ3MDE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJp
bmdOb25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LaWxsUmluZ05vbmUuY3Bw
CkBAIC01MCwzICs1MCw0IEBAIHZvaWQgS2lsbFJpbmc6OnNldFRvWWFua2VkU3RhdGUoKQogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9j
YWxpemVkU3RyaW5ncy5jcHAKaW5kZXggNTk5MDExYjI2MWI0NjAxNjNlZGQzNTA5MWE2YWYwMWVm
MDBhOTNhMS4uYjgyMDdmOWMwYzQ2N2JkMjYzODBkZTJjN2EzOWM5MDA3YjNhYjg0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5jcHAKQEAgLTcxLDYgKzcx
LDcgQEAgc3RhdGljIFN0cmluZyBmb3JtYXRMb2NhbGl6ZWRTdHJpbmcoU3RyaW5nIGZvcm1hdCwg
Li4uKQogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKIHN0YXRpYyBTdHJp
bmcgdHJ1bmNhdGVkU3RyaW5nRm9yTG9va3VwTWVudUl0ZW0oY29uc3QgU3RyaW5nJiBvcmlnaW5h
bCkKIHsKICAgICBpZiAob3JpZ2luYWwuaXNFbXB0eSgpKQpAQCAtODQsNiArODUsNyBAQCBzdGF0
aWMgU3RyaW5nIHRydW5jYXRlZFN0cmluZ0Zvckxvb2t1cE1lbnVJdGVtKGNvbnN0IFN0cmluZyYg
b3JpZ2luYWwpCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFyYWN0ZXJzID0gbnVtQ2hhcmFjdGVy
c0luR3JhcGhlbWVDbHVzdGVycyh0cmltbWVkLCBtYXhOdW1iZXJPZkdyYXBoZW1lQ2x1c3RlcnNJ
bkxvb2t1cE1lbnVJdGVtKTsKICAgICByZXR1cm4gbnVtYmVyT2ZDaGFyYWN0ZXJzID09IHRyaW1t
ZWQubGVuZ3RoKCkgPyB0cmltbWVkIDogdHJpbW1lZC5sZWZ0KG51bWJlck9mQ2hhcmFjdGVycykg
KyBlbGxpcHNpczsKIH0KKyNlbmRpZgogCiBTdHJpbmcgaW5wdXRFbGVtZW50QWx0VGV4dCgpCiB7
CkBAIC03OTcsNiArNzk5LDI2IEBAIFN0cmluZyBodG1sU2VsZWN0TXVsdGlwbGVJdGVtcyhzaXpl
X3QgY291bnQpCiAgICAgICAgIHJldHVybiBmb3JtYXRMb2NhbGl6ZWRTdHJpbmcoV0VCX1VJX1NU
UklORygiJXp1IEl0ZW1zIiwgIlByZXNlbnQgdGhlIG51bWJlciBvZiBzZWxlY3RlZCA8b3B0aW9u
PiBpdGVtcyBpbiBhIDxzZWxlY3QgbXVsdGlwbGU+IGVsZW1lbnQgKGlPUyBvbmx5KSIpLCBjb3Vu
dCk7CiAgICAgfQogfQorCitTdHJpbmcgZmlsZUJ1dHRvbkNob29zZU1lZGlhRmlsZUxhYmVsKCkK
K3sKKyAgICByZXR1cm4gV0VCX1VJX1NUUklORygiQ2hvb3NlIE1lZGlhIChTaW5nbGUpIiwgIlRp
dGxlIGZvciBmaWxlIGJ1dHRvbiB1c2VkIGluIEhUTUwgZm9ybXMgZm9yIG1lZGlhIGZpbGVzIik7
Cit9CisKK1N0cmluZyBmaWxlQnV0dG9uQ2hvb3NlTXVsdGlwbGVNZWRpYUZpbGVzTGFiZWwoKQor
eworICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJDaG9vc2UgTWVkaWEgKE11bHRpcGxlKSIsICJU
aXRsZSBmb3IgZmlsZSBidXR0b24gdXNlZCBpbiBIVE1MNSBmb3JtcyBmb3IgbXVsdGlwbGUgbWVk
aWEgZmlsZXMiKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25Ob01lZGlhRmlsZVNlbGVjdGVkTGFi
ZWwoKQoreworICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJubyBtZWRpYSBzZWxlY3RlZCAoc2lu
Z2xlKSIsICJUZXh0IHRvIGRpc3BsYXkgaW4gZmlsZSBidXR0b24gdXNlZCBpbiBIVE1MIGZvcm1z
IGZvciBtZWRpYSBmaWxlcyB3aGVuIG5vIG1lZGlhIGZpbGUgaXMgc2VsZWN0ZWQiKTsKK30KKwor
U3RyaW5nIGZpbGVCdXR0b25Ob01lZGlhRmlsZXNTZWxlY3RlZExhYmVsKCkKK3sKKyAgICByZXR1
cm4gV0VCX1VJX1NUUklORygibm8gbWVkaWEgc2VsZWN0ZWQgKG11bHRpcGxlKSIsICJUZXh0IHRv
IGRpc3BsYXkgaW4gZmlsZSBidXR0b24gdXNlZCBpbiBIVE1MIGZvcm1zIGZvciBtZWRpYSBmaWxl
cyB3aGVuIG5vIG1lZGlhIGZpbGVzIGFyZSBzZWxlY3RlZCBhbmQgdGhlIGJ1dHRvbiBhbGxvd3Mg
bXVsdGlwbGUgZmlsZXMgdG8gYmUgc2VsZWN0ZWQiKTsKK30KICNlbmRpZgogCiBTdHJpbmcgaW1h
Z2VUaXRsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBJbnRTaXplJiBzaXplKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oCmluZGV4IGE4NzU3ZDRkZmM2
ODY1OWU4ODU1NzI3NjRjMzJlN2FmZGY2MTFhYTguLmUzZjczY2IwZDJjMDE2OGJiYWZhNjFjMGU3
OWYxYTRlMzc4YmY2N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2Fs
aXplZFN0cmluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJp
bmdzLmgKQEAgLTE0NSw2ICsxNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCk7CiAjZW5kaWYgLy8gRU5BQkxFKENP
TlRFWFRfTUVOVVMpCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIFN0cmluZyBzZWFyY2hNZW51
Tm9SZWNlbnRTZWFyY2hlc1RleHQoKTsKICAgICBTdHJpbmcgc2VhcmNoTWVudVJlY2VudFNlYXJj
aGVzVGV4dCgpOwogICAgIFN0cmluZyBzZWFyY2hNZW51Q2xlYXJSZWNlbnRTZWFyY2hlc1RleHQo
KTsKQEAgLTE3MSw2ICsxNzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgU3RyaW5nIEFY
TWVudUxpc3RQb3B1cEFjdGlvblZlcmIoKTsKICAgICBTdHJpbmcgQVhMaW5rQWN0aW9uVmVyYigp
OwogICAgIFN0cmluZyBBWExpc3RJdGVtQWN0aW9uVmVyYigpOworI2VuZGlmCiAKICNpZiBFTkFC
TEUoSU5QVVRfVFlQRV9XRUVLKQogICAgIC8vIHdlZWtGb3JtYXRJbkxETUwoKSByZXR1cm5zIHdl
ZWsgYW5kIHllYXIgZm9ybWF0IGluIExETUwsIFVuaWNvZGUKQEAgLTIwNiw2ICsyMDgsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFN0cmluZyBodG1s
U2VsZWN0TXVsdGlwbGVJdGVtcyhzaXplX3QgbnVtKTsKKyAgICBTdHJpbmcgZmlsZUJ1dHRvbkNo
b29zZU1lZGlhRmlsZUxhYmVsKCk7CisgICAgU3RyaW5nIGZpbGVCdXR0b25DaG9vc2VNdWx0aXBs
ZU1lZGlhRmlsZXNMYWJlbCgpOworICAgIFN0cmluZyBmaWxlQnV0dG9uTm9NZWRpYUZpbGVTZWxl
Y3RlZExhYmVsKCk7CisgICAgU3RyaW5nIGZpbGVCdXR0b25Ob01lZGlhRmlsZXNTZWxlY3RlZExh
YmVsKCk7CiAjZW5kaWYKIAogICAgIFN0cmluZyBpbWFnZVRpdGxlKGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUsIGNvbnN0IEludFNpemUmIHNpemUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTG9nZ2luZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oCmlu
ZGV4IDFiYWFiMzAzYTBlM2ZlYzVjMmUyNWJlNzA0NTIzY2VkM2I1YWI0NDcuLjRlZjIyZjYzMjY3
NjQ2NjkwZmZkMmQ0NWIzY2YwNTExNTg5YTYyYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0xvZ2dpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5n
LmgKQEAgLTU0LDYgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIE0oTGl2ZUNvbm5l
Y3QpIFwKICAgICBNKExvYWRpbmcpIFwKICAgICBNKE1lZGlhKSBcCisgICAgTShNZW1vcnlQcmVz
c3VyZSkgXAogICAgIE0oTmV0d29yaykgXAogICAgIE0oTm90WWV0SW1wbGVtZW50ZWQpIFwKICAg
ICBNKFBhZ2VDYWNoZSkgXApAQCAtNjEsNiArNjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgTShQbHVnaW5zKSBcCiAgICAgTShQb3B1cEJsb2NraW5nKSBcCiAgICAgTShQcm9ncmVzcykg
XAorICAgIE0oUmVtb3RlSW5zcGVjdG9yKSBcCiAgICAgTShSZXNvdXJjZUxvYWRpbmcpIFwKICAg
ICBNKFNRTERhdGFiYXNlKSBcCiAgICAgTShTcGVsbGluZ0FuZEdyYW1tYXIpIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKaW5kZXggNzQ2NGUxOWVkMjQ1
YjgxOGQ4MmFiYTRmYWQyNTIzMDI1MmQ2YzNjNC4uMGJiNTA4YmRkNjBjYmE2ZDAxNjQ4NjU4OWJh
NmI5ZTdlOWE2ZmU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5
cGVSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdp
c3RyeS5jcHAKQEAgLTM2LDcgKzM2LDExIEBACiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1h
Z2VTb3VyY2VDRy5oIgorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25T
ZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPEltYWdlSU8v
Q0dJbWFnZURlc3RpbmF0aW9uLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CiAjZW5kaWYKIApAQCAtMjI0LDYgKzIyOCwzNCBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplU3Vw
cG9ydGVkSW1hZ2VNSU1FVHlwZXMoKQogICAgIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzLT5yZW1v
dmUoImFwcGxpY2F0aW9uL3BkZiIpOwogICAgIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzLT5yZW1v
dmUoImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAv
LyBBZGQgbWFsZm9ybWVkIGltYWdlIG1pbWV0eXBlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggTWFp
bCBhbmQgdG8gaGFuZGxlIG1hbGZvcm1lZCBtaW1ldHlwZXMgZnJvbSB0aGUgbmV0CisgICAgLy8g
VGhlc2Ugd2VyZSByZW1vdmVkIGZvciA8cmRhcjovL3Byb2JsZW0vNjU2NDUzOD4gUmUtZW5hYmxl
IFVUSSBjb2RlIGluIFdlYkNvcmUgbm93IHRoYXQgTW9iaWxlQ29yZVNlcnZpY2VzIGV4aXN0cwor
ICAgIC8vIEJ1dCBNYWlsIHJlbGllcyBvbiBhdCBsZWFzdCBpbWFnZS90aWYgcmVwb3J0ZWQgYXMg
YmVpbmcgc3VwcG9ydGVkIChzaG91bGQgYmUgaW1hZ2UvdGlmZikuCisgICAgLy8gVGhpcyBjYW4g
YmUgcmVtb3ZlZCB3aGVuIE1haWwgYWRkcmVzc2VzOgorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83
ODc5NTEwPiBNYWlsIHNob3VsZCB1c2Ugc3RhbmRhcmQgaW1hZ2UgbWltZXR5cGVzIAorICAgIC8v
IGFuZCB3ZSBmaXggc25pZmZpbmcgc28gdGhhdCBpdCBjb3JyZWN0cyBpdGVtcyBzdWNoIGFzIGlt
YWdlL2pwZyAtPiBpbWFnZS9qcGVnLgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBtYWxmb3JtZWRN
SU1FVHlwZXNbXSA9IHsKKyAgICAgICAgLy8gSlBFRyAoaW1hZ2UvanBlZykKKyAgICAgICAgImlt
YWdlL2pwZyIsICJpbWFnZS9qcF8iLCAiaW1hZ2UvanBlXyIsICJhcHBsaWNhdGlvbi9qcGciLCAi
YXBwbGljYXRpb24veC1qcGciLCAiaW1hZ2UvcGlwZWciLAorICAgICAgICAiaW1hZ2Uvdm5kLnN3
aXRmdmlldy1qcGVnIiwgImltYWdlL3gteGJpdG1hcCIsCisgICAgICAgIC8vIEdJRiAoaW1hZ2Uv
Z2lmKQorICAgICAgICAiaW1hZ2UvZ2lfIiwKKyAgICAgICAgLy8gUE5HIChpbWFnZS9wbmcpCisg
ICAgICAgICJhcHBsaWNhdGlvbi9wbmciLCAiYXBwbGljYXRpb24veC1wbmciLAorICAgICAgICAv
LyBUSUZGIChpbWFnZS90aWZmKQorICAgICAgICAiaW1hZ2UveC10aWYiLCAiaW1hZ2UvdGlmIiwg
ImltYWdlL3gtdGlmZiIsICJhcHBsaWNhdGlvbi90aWYiLCAiYXBwbGljYXRpb24veC10aWYiLCAi
YXBwbGljYXRpb24vdGlmZiIsCisgICAgICAgICJhcHBsaWNhdGlvbi94LXRpZmYiLAorICAgICAg
ICAvLyBCTVAgKGltYWdlL2JtcCwgaW1hZ2UveC1iaXRtYXApCisgICAgICAgICJpbWFnZS94LWJt
cCIsICJpbWFnZS94LXdpbi1iaXRtYXAiLCAiaW1hZ2UveC13aW5kb3dzLWJtcCIsICJpbWFnZS9t
cy1ibXAiLCAiaW1hZ2UveC1tcy1ibXAiLAorICAgICAgICAiYXBwbGljYXRpb24vYm1wIiwgImFw
cGxpY2F0aW9uL3gtYm1wIiwgImFwcGxpY2F0aW9uL3gtd2luLWJpdG1hcCIsCisgICAgfTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgobWFsZm9ybWVkTUlNRVR5
cGVzKTsgKytpKSB7CisgICAgICAgIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzLT5hZGQobWFsZm9y
bWVkTUlNRVR5cGVzW2ldKTsKKyAgICAgICAgc3VwcG9ydGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBl
cy0+YWRkKG1hbGZvcm1lZE1JTUVUeXBlc1tpXSk7CisgICAgfQorI2VuZGlmCisKICNlbHNlCiAg
ICAgLy8gYXNzdW1lIHRoYXQgYWxsIGltcGxlbWVudGF0aW9ucyBhdCBsZWFzdCBzdXBwb3J0IHRo
ZSBmb2xsb3dpbmcgc3RhbmRhcmQKICAgICAvLyBpbWFnZSB0eXBlczoKQEAgLTMzMSw5ICszNjMs
MTEgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZE5vbkltYWdlTWltZVR5cGVzKCkK
ICAgICAgICAgInRleHQvIiwKICAgICAgICAgImFwcGxpY2F0aW9uL3htbCIsCiAgICAgICAgICJh
cHBsaWNhdGlvbi94aHRtbCt4bWwiLAorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgICJhcHBs
aWNhdGlvbi92bmQud2FwLnhodG1sK3htbCIsCiAgICAgICAgICJhcHBsaWNhdGlvbi9yc3MreG1s
IiwKICAgICAgICAgImFwcGxpY2F0aW9uL2F0b20reG1sIiwKKyNlbmRpZgogICAgICAgICAiYXBw
bGljYXRpb24vanNvbiIsCiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgImltYWdlL3N2Zyt4bWwi
LApAQCAtNDQwLDcgKzQ3NCwxMSBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplVW5zdXBwb3J0ZWRU
ZXh0TUlNRVR5cGVzKCkKICAgICAgICAgInRleHQveC1xaWYiLAogICAgICAgICAidGV4dC94LWNz
diIsCiAgICAgICAgICJ0ZXh0L3gtdmNmIiwKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICAi
dGV4dC9ydGYiLAorI2Vsc2UKKyAgICAgICAgInRleHQvdm5kLnN1bi5qMm1lLmFwcC1kZXNjcmlw
dG9yIiwKKyNlbmRpZgogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJS
QVlfTEVOR1RIKHR5cGVzKTsgKytpKQogICAgICAgdW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzLT5h
ZGQodHlwZXNbaV0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNz
dXJlSGFuZGxlci5jcHAKaW5kZXggNWU4ZTdjYzNmYzIxMGY2NjBiZTBkNmJhMTc0YjU4ODA3NGVk
ZDkyYi4uNjJlZTFhZDU2YTE5M2UzMTA0YTY4NDY4MzQ0M2Q4OTM3ZGI1MTY2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCkBAIC00
MCw2ICs0MCwxNCBAQCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6Ok1lbW9yeVByZXNzdXJlSGFuZGxl
cigpCiAgICAgOiBtX2luc3RhbGxlZChmYWxzZSkKICAgICAsIG1fbGFzdFJlc3BvbmRUaW1lKDAp
CiAgICAgLCBtX2xvd01lbW9yeUhhbmRsZXIocmVsZWFzZU1lbW9yeSkKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgLy8gRklYTUU6IENhbiB3ZSBzaGFyZSBtb3JlIG9mIHRoaXMgd2l0aCBPcGVuU291
cmNlPworICAgICwgbV9yZWNlaXZlZE1lbW9yeVByZXNzdXJlKDApCisgICAgLCBtX21lbW9yeVBy
ZXNzdXJlUmVhc29uKE1lbW9yeVByZXNzdXJlUmVhc29uTm9uZSkKKyAgICAsIG1fY2xlYXJQcmVz
c3VyZU9uTWVtb3J5UmVsZWFzZSh0cnVlKQorICAgICwgbV9yZWxlYXNlTWVtb3J5QmxvY2soMCkK
KyAgICAsIG1fb2JzZXJ2ZXIoMCkKKyNlbmRpZgogewogfQogCkBAIC00OSw3ICs1Nyw5IEBAIHZv
aWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjppbnN0YWxsKCkgeyB9CiB2b2lkIE1lbW9yeVByZXNz
dXJlSGFuZGxlcjo6dW5pbnN0YWxsKCkgeyB9CiB2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6
aG9sZE9mZih1bnNpZ25lZCkgeyB9CiB2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6cmVzcG9u
ZFRvTWVtb3J5UHJlc3N1cmUoKSB7IH0KKyNpZiAhUExBVEZPUk0oSU9TKQogdm9pZCBNZW1vcnlQ
cmVzc3VyZUhhbmRsZXI6OnJlbGVhc2VNZW1vcnkoYm9vbCkgeyB9CisjZW5kaWYgLy8gIVBMQVRG
T1JNKElPUykKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L01lbW9yeVByZXNzdXJlSGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmgKaW5kZXggOTUwYWU4NTJkZmUwOTA4ZWIzNDM4OWNmY2ZiNmI0MjZi
OTRjNzk0Zi4uZWJmYjg0Y2ExMGI3ZmZlM2M5OTlkM2JlMTU1NDEzMWFiNjgzZjA3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKQEAgLTI5
LDggKzI5LDIwIEBACiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2
ZXMuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShJT1Mp
CitlbnVtIE1lbW9yeVByZXNzdXJlUmVhc29uIHsKKyAgICBNZW1vcnlQcmVzc3VyZVJlYXNvbk5v
bmUgPSAwIDw8IDAsCisgICAgTWVtb3J5UHJlc3N1cmVSZWFzb25WTVByZXNzdXJlID0gMSA8PCAw
LAorICAgIE1lbW9yeVByZXNzdXJlUmVhc29uVk1TdGF0dXMgPSAxIDw8IDEsCit9OworI2VuZGlm
CisKIHR5cGVkZWYgdm9pZCAoKkxvd01lbW9yeUhhbmRsZXIpKGJvb2wgY3JpdGljYWwpOwogCiBj
bGFzcyBNZW1vcnlQcmVzc3VyZUhhbmRsZXIgewpAQCAtNDYsNiArNTgsMTYgQEAgcHVibGljOgog
ICAgICAgICBtX2xvd01lbW9yeUhhbmRsZXIgPSBoYW5kbGVyOwogICAgIH0KIAorI2lmIFBMQVRG
T1JNKElPUykKKyAgICAvLyBGSVhNRTogQ2FuIHdlIHNoYXJlIG1vcmUgb2YgdGhpcyB3aXRoIE9w
ZW5Tb3VyY2U/CisgICAgdm9pZCBpbnN0YWxsTWVtb3J5UmVsZWFzZUJsb2NrKHZvaWQgKF5yZWxl
YXNlTWVtb3J5QmxvY2spKCksIGJvb2wgY2xlYXJQcmVzc3VyZU9uTWVtb3J5UmVsZWFzZSA9IHRy
dWUpOworICAgIHZvaWQgc2V0UmVjZWl2ZWRNZW1vcnlQcmVzc3VyZShNZW1vcnlQcmVzc3VyZVJl
YXNvbik7CisgICAgYm9vbCBoYXNSZWNlaXZlZE1lbW9yeVByZXNzdXJlKCk7CisgICAgdm9pZCBj
bGVhck1lbW9yeVByZXNzdXJlKCk7CisgICAgYm9vbCBzaG91bGRXYWl0Rm9yTWVtb3J5Q2xlYXJN
ZXNzYWdlKCk7CisgICAgdm9pZCByZXNwb25kVG9NZW1vcnlQcmVzc3VyZUlmTmVlZGVkKCk7Cisj
ZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIHVuaW5zdGFsbCgpOwogCkBAIC02MCw2ICs4Miwx
NSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pbnN0YWxsZWQ7CiAgICAgdGltZV90IG1fbGFzdFJl
c3BvbmRUaW1lOwogICAgIExvd01lbW9yeUhhbmRsZXIgbV9sb3dNZW1vcnlIYW5kbGVyOworCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIHVpbnQzMl90IG1fcmVjZWl2ZWRNZW1vcnlQcmVzc3VyZTsK
KyAgICB1aW50MzJfdCBtX21lbW9yeVByZXNzdXJlUmVhc29uOworICAgIGJvb2wgbV9jbGVhclBy
ZXNzdXJlT25NZW1vcnlSZWxlYXNlOworICAgIHZvaWQgKF5tX3JlbGVhc2VNZW1vcnlCbG9jayko
KTsKKyAgICBDRlJ1bkxvb3BPYnNlcnZlclJlZiBtX29ic2VydmVyOworICAgIE11dGV4IG1fb2Jz
ZXJ2ZXJNdXRleDsKKyNlbmRpZgogfTsKICAKIC8vIEZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgZ2xv
YmFsIG1lbW9yeSBwcmVzc3VyZSBvYmplY3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCmluZGV4IDU5YmEyOWIzOWVhMDhkMGNlMjFhMWI2MDQ5
ZGYwOGQwYTljZjA1ZGMuLmY3MzAzN2RjNmMxODI2MGUyYTEyYjY2NzdhNzNiZWY0MTM2NmMyMmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5o
CkBAIC0zNiw2ICszNiwxNCBAQAogT0JKQ19DTEFTUyBOU0V2ZW50OwogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShJT1MpCisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBXZWJFdmVudDsKKyNlbHNlCitj
bGFzcyBXZWJFdmVudDsKKyNlbmRpZgorI2VuZGlmCisKICNpZiBQTEFURk9STShHVEspCiB0eXBl
ZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRLZXk7CiAjaW5jbHVkZSAiQ29tcG9zaXRp
b25SZXN1bHRzLmgiCkBAIC0xMjcsNyArMTM1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIE5T
RXZlbnQqIG1hY0V2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9tYWNFdmVudC5nZXQoKTsgfQorI2Vs
c2UKKyAgICAgICAgV2ViRXZlbnQgKmV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9FdmVudC5nZXQo
KTsgfQorI2VuZGlmCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKQEAgLTE3MCw3ICsxODIs
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCisj
aWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgUmV0YWluUHRyPE5TRXZlbnQ+IG1fbWFjRXZlbnQ7
CisjZWxzZQorICAgICAgICBSZXRhaW5QdHI8V2ViRXZlbnQ+IG1fRXZlbnQ7CisjZW5kaWYKICNl
bmRpZgogI2lmIFBMQVRGT1JNKEdUSykKICAgICAgICAgR2RrRXZlbnRLZXkqIG1fZ2RrRXZlbnRL
ZXk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCmluZGV4
IDNhNDI1MzM2NTBlNjA0MDk5Y2RhMDE3N2ZiMTc3YjliOGViODYzZjMuLmQ2NGRkMjMwNzIzNTA4
ODYwNTg2Nzk5ZDgwYWVmY2JkNGQxZjdiYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtTW91c2VFdmVudC5oCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgICAgICwgbV9idXR0b24oTm9CdXR0b24pCiAgICAgICAgICAgICAsIG1fY2xp
Y2tDb3VudCgwKQogICAgICAgICAgICAgLCBtX21vZGlmaWVyRmxhZ3MoMCkKLSNpZiBQTEFURk9S
TShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogICAgICAgICAgICAg
LCBtX2V2ZW50TnVtYmVyKDApCiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgICAgICAgICAsIG1f
ZGlkQWN0aXZhdGVXZWJWaWV3KGZhbHNlKQpAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgICAgICAsIG1fYnV0dG9uKGJ1dHRvbikKICAgICAgICAgICAgICwgbV9j
bGlja0NvdW50KGNsaWNrQ291bnQpCiAgICAgICAgICAgICAsIG1fbW9kaWZpZXJGbGFncygwKQot
I2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAg
ICAgICAgICAgICAsIG1fZXZlbnROdW1iZXIoMCkKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICAg
ICAgICAgICwgbV9kaWRBY3RpdmF0ZVdlYlZpZXcoZmFsc2UpCkBAIC0xMDUsNyArMTA1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQoY29uc3QgRXZh
c19FdmVudF9Nb3VzZV9Nb3ZlKiwgSW50UG9pbnQpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShN
QUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogICAgICAgICBpbnQgZXZl
bnROdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50TnVtYmVyOyB9CiAjZW5kaWYKIApAQCAt
MTI5LDcgKzEyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IG1fY2xpY2tD
b3VudDsKICAgICAgICAgdW5zaWduZWQgbV9tb2RpZmllckZsYWdzOwogCi0jaWYgUExBVEZPUk0o
TUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICAgICAgaW50IG1f
ZXZlbnROdW1iZXI7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgICAgIGJvb2wgbV9kaWRBY3Rp
dmF0ZVdlYlZpZXc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVNjcmVlbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaAppbmRl
eCA5MzM2YzdmNjQ1YWYwZmE5OTFmNGI1MzhmNmU0NDU5NjU2NWQ1MzhmLi5hMjRlZGQ3OTFkOTM5
N2JhYmVmODYyM2UzMDM5MTc5ODNlYmU1MDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtU2NyZWVuLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJ
T1MpCiBPQkpDX0NMQVNTIE5TU2NyZWVuOwogT0JKQ19DTEFTUyBOU1dpbmRvdzsKICNpZmRlZiBO
U0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwpAQCAtNTcsNyArNTcsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3Qo
V2lkZ2V0Kik7CiAgICAgdm9pZCBzY3JlZW5Db2xvclByb2ZpbGUoQ29sb3JQcm9maWxlJik7CiAK
LSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQog
ICAgIE5TU2NyZWVuICpzY3JlZW5Gb3JXaW5kb3coTlNXaW5kb3cgKik7CiAKICAgICBGbG9hdFJl
Y3QgdG9Vc2VyU3BhY2UoY29uc3QgTlNSZWN0JiwgTlNXaW5kb3cgKmRlc3RpbmF0aW9uKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNr
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3Mu
Y3BwCmluZGV4IGU5NDAwYTA5YzI4NmE0NDQwYzMyNjU5ZTQ5ZTMwZTUwY2Q5ZTQ0ZGYuLjI2ZTQ5
YmRiYjM5MmU2ZDE0OWFjNzc3NTcyYTkyNjQ3MDZjMmU5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmNwcApAQCAtMzcsNyAr
MzcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBzdGF0aWMgYm9vbCBtYWluQnVuZGxl
SXNFcXVhbFRvKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllclN0cmluZykKIHsKLSNpZiBV
U0UoQ0YpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBtZXJnaW5nIHRoaXMgZmls
ZSB3aXRoIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5tbS4KKyAgICAvLyBUaGVuIHdlIGNh
biByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCisjaWYgVVNFKENGKSAmJiAhUExBVEZP
Uk0oSU9TKQogICAgIENGQnVuZGxlUmVmIG1haW5CdW5kbGUgPSBDRkJ1bmRsZUdldE1haW5CdW5k
bGUoKTsKICAgICBpZiAoIW1haW5CdW5kbGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lP
Uy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9T
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNGIzNzhiYWFkZGQwYjUxNWE4ODZjYWY2MzFjOWJlMzI2YzRmZDZmYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrc0lPUy5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSdW50aW1l
QXBwbGljYXRpb25DaGVja3NJT1NfaAorI2RlZmluZSBSdW50aW1lQXBwbGljYXRpb25DaGVja3NJ
T1NfaAorCisvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIG1lcmdpbmcgdGhpcyBmaWxlIHdp
dGggUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmguCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jv
b2wgYXBwbGljYXRpb25Jc01vYmlsZU1haWwoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc01vYmlsZVNh
ZmFyaSgpOworYm9vbCBhcHBsaWNhdGlvbklzRHVtcFJlbmRlclRyZWUoKTsKK2Jvb2wgYXBwbGlj
YXRpb25Jc01vYmlsZVN0b3JlKCk7Citib29sIGFwcGxpY2F0aW9uSXNXZWJBcHAoKTsKK2Jvb2wg
YXBwbGljYXRpb25Jc09rQ3VwaWQoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc0ZhY2Vib29rKCk7Citi
b29sIGFwcGxpY2F0aW9uSXNFcGljdXJpb3VzKCk7Citib29sIGFwcGxpY2F0aW9uSXNEYWlqaXNl
bkRpY3Rpb25hcnkoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc05BU0FIRCgpOworYm9vbCBhcHBsaWNh
dGlvbklzTUFTSCgpOworYm9vbCBhcHBsaWNhdGlvbklzVGhlRWNvbm9taXN0T25JUGhvbmUoKTsK
K2Jvb2wgYXBwbGljYXRpb25Jc1dlYlByb2Nlc3MoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc0lCb29r
c09uSU9TKCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJ1bnRpbWVB
cHBsaWNhdGlvbkNoZWNrc0lPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9SdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9SdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY0NDIwMzBjMjM1
OWIzZmQxY2VkMTE1ZjU4MGM4MmVlMzZlNjBjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5tbQpAQCAtMCwwICsx
LDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJ1bnRpbWVBcHBs
aWNhdGlvbkNoZWNrc0lPUy5oIgorCisvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIG1lcmdp
bmcgdGhpcyBmaWxlIHdpdGggUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmNwcC4KKyNpZiBQTEFU
Rk9STShJT1MpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBhcHBsaWNhdGlvbklzTW9i
aWxlTWFpbCgpCit7CisgICAgc3RhdGljIGJvb2wgaXNNb2JpbGVNYWlsID0gW1tbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxl
Lm1vYmlsZW1haWwiXTsKKyAgICByZXR1cm4gaXNNb2JpbGVNYWlsOworfQorCitib29sIGFwcGxp
Y2F0aW9uSXNNb2JpbGVTYWZhcmkoKQoreworICAgIHN0YXRpYyBib29sIGlzTW9iaWxlU2FmYXJp
ID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3Ry
aW5nOkAiY29tLmFwcGxlLm1vYmlsZXNhZmFyaSJdOworICAgIHJldHVybiBpc01vYmlsZVNhZmFy
aTsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzRHVtcFJlbmRlclRyZWUoKQoreworICAgIHN0YXRp
YyBib29sIGlzRHVtcFJlbmRlclRyZWUgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJ
ZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uYXBwbGUuRHVtcFJlbmRlclRyZWUiXTsK
KyAgICByZXR1cm4gaXNEdW1wUmVuZGVyVHJlZTsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzTW9i
aWxlU3RvcmUoKQoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlzTW9iaWxlU3RvcmUgPSBbW1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJj
b20uYXBwbGUuTW9iaWxlU3RvcmUiXTsKKyAgICByZXR1cm4gaXNNb2JpbGVTdG9yZTsKK30KKwor
Ym9vbCBhcHBsaWNhdGlvbklzV2ViQXBwKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc1dlYkFwcCA9
IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmlu
ZzpAImNvbS5hcHBsZS53ZWJhcHAiXTsKKyAgICByZXR1cm4gaXNXZWJBcHA7Cit9CisKK2Jvb2wg
YXBwbGljYXRpb25Jc09rQ3VwaWQoKQoreworICAgIHN0YXRpYyBib29sIGlzT2tDdXBpZCA9IFtb
W05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpA
ImNvbS5va2N1cGlkLmFwcCJdOworICAgIHJldHVybiBpc09rQ3VwaWQ7Cit9CisKK2Jvb2wgYXBw
bGljYXRpb25Jc0ZhY2Vib29rKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc0ZhY2Vib29rID0gW1tb
TlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAi
Y29tLmZhY2Vib29rLkZhY2Vib29rIl07CisgICAgcmV0dXJuIGlzRmFjZWJvb2s7Cit9CisKK2Jv
b2wgYXBwbGljYXRpb25Jc0VwaWN1cmlvdXMoKQoreworICAgIHN0YXRpYyBib29sIGlzRXBpY3Vy
aW91cyA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxU
b1N0cmluZzpAImNvbS5jb25kZW5ldC5FcGljdXJpb3VzIl07CisgICAgcmV0dXJuIGlzRXBpY3Vy
aW91czsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzRGFpamlzZW5EaWN0aW9uYXJ5KCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBpc0RhaWppc2VuRGljdGlvbmFyeSA9IFtbW05TQnVuZGxlIG1haW5CdW5k
bGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImpwLmNvLnNob2dha3VrYW4u
ZGFpamlzZW4yMDA5aSJdOworICAgIHJldHVybiBpc0RhaWppc2VuRGljdGlvbmFyeTsKK30KKwor
Ym9vbCBhcHBsaWNhdGlvbklzTkFTQUhEKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc05BU0FIRCA9
IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmlu
ZzpAImdvdi5uYXNhLk5BU0FIRCJdOworICAgIHJldHVybiBpc05BU0FIRDsKK30KKworYm9vbCBh
cHBsaWNhdGlvbklzTUFTSCgpCit7CisgICAgc3RhdGljIGJvb2wgaXNNQVNIID0gW1tbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLm1h
Z25hdGVpbnRlcmFjdGl2ZS5tYXNoZ2FtZSJdCisgICAgICAgIHx8IFtbW05TQnVuZGxlIG1haW5C
dW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5tYWduYXRlaW50
ZXJhY3RpdmUubWFzaGxpdGVnYW1lIl0KKyAgICAgICAgfHwgW1tbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLm1hZ25hdGVpbnRlcmFj
dGl2ZS5tYXNoY2hyaXN0bWFzIl0KKyAgICAgICAgfHwgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
YnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLm1hZ25hdGVpbnRlcmFjdGl2
ZS5tYXNoaGFsbG93ZWVuIl0KKyAgICAgICAgfHwgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVu
ZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLm1hZ25hdGVpbnRlcmFjdGl2ZS5t
YXNodmFsZW50aW5lcyJdOworICAgIHJldHVybiBpc01BU0g7Cit9CisKK2Jvb2wgYXBwbGljYXRp
b25Jc1RoZUVjb25vbWlzdE9uSVBob25lKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc1RoZUVjb25v
bWlzdE9uSVBob25lID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0g
aXNFcXVhbFRvU3RyaW5nOkAiY29tLmVjb25vbWlzdC5pcGhvbmUiXTsKKyAgICByZXR1cm4gaXNU
aGVFY29ub21pc3RPbklQaG9uZTsKK30KKworLy8gRklYTUU6IHRoaXMgbmVlZHMgdG8gYmUgY2hh
bmdlZCB3aGVuIHRoZSBXZWJQcm9jZXNzIGlzIGNoYW5nZWQgdG8gYW4gWFBDIHNlcnZpY2UuCiti
b29sIGFwcGxpY2F0aW9uSXNXZWJQcm9jZXNzKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc1dlYlBy
b2Nlc3MgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFs
VG9TdHJpbmc6QCJjb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQiXSB8fCBbW1tOU0J1bmRsZSBt
YWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uYXBwbGUu
V2ViUHJvY2VzcyJdOworICAgIHJldHVybiBpc1dlYlByb2Nlc3M7Cit9CisKK2Jvb2wgYXBwbGlj
YXRpb25Jc0lCb29rc09uSU9TKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc0lCb29rc09uSU9TID0g
W1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5n
OkAiY29tLmFwcGxlLmlCb29rcyJdOworICAgIHJldHVybiBpc0lCb29rc09uSU9TOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKaW5kZXggNzg3ZmIxMjg0MzVkYjY0
NzA0OWZiMzFiOGU1NzBmNmYwOGE5NzdlZC4uZjhkYjI1MGMwMTg2ZjY0MGNmNjMyMmJmZmY0NDM5
YzI4MzkwNGVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNw
cApAQCAtMzksNyArMzksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiAhRU5BQkxF
KFNNT09USF9TQ1JPTExJTkcpCisjaWYgIUVOQUJMRShTTU9PVEhfU0NST0xMSU5HKSAmJiAhUExB
VEZPUk0oSU9TKQogUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNy
ZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCiB7CiAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkpOwpAQCAtMTIzLDYgKzEyMywx
MyBAQCBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYgZSkKICAgICByZXR1cm4gaGFuZGxlZDsKIH0KIAorI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCitib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBs
YXRmb3JtVG91Y2hFdmVudCYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIHZv
aWQgU2Nyb2xsQW5pbWF0b3I6OnNldEN1cnJlbnRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBw
b3NpdGlvbikKIHsKICAgICBtX2N1cnJlbnRQb3NYID0gcG9zaXRpb24ueCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggMjBlOWE1NmRkMjRjYmIzMmQzODY4
NTEzNmUxYmQ3ZTVhM2I0NzdjMS4uZjBkYzk4NDYzOGRlODdlNDk5NjNlODdiZjkwNWU3OTMzMWQy
Y2JkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC00MCw2
ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CitjbGFz
cyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9s
bGJhcjsKIApAQCAtNjIsNiArNjMsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGhh
bmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBs
YXRmb3JtVG91Y2hFdmVudCYpOworI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAgICAgdmly
dHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSkg
eyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5
cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oCmluZGV4IGY2MzBk
YWUyNjU4M2JjMDkyNTAyYWI3ODNjMjM5Y2NlYzZkNGRmMmQuLjk2NDg2YTliZDJkNTA0NzhlMDcz
MDZkNzU5NDVmNWNlZGVjOWFjYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFR5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMu
aApAQCAtMjYsNiArMjYsOSBAQAogI2lmbmRlZiBTY3JvbGxUeXBlc19oCiAjZGVmaW5lIFNjcm9s
bFR5cGVzX2gKIAorLy8gV1RGX1BMQVRGT1JNX0lPUworI2lmZGVmIF9fY3BsdXNwbHVzCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGVudW0gU2Nyb2xsRGlyZWN0aW9uIHsKQEAgLTE3OCw0
ICsxODEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfTsKIH0KIAorI2VuZGlmIC8vIF9f
Y3BsdXNwbHVzCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApp
bmRleCBmZjIyYzRkMGU5NjU0YjFiZGIzZTE0NjdkNGRjOTc0ODgyMDcyOWQ5Li45YjMzYzMxZGFm
MTc2ZDI1YTQ3MWIyZTQ3ZTcyNGJmNDU3ZjMyNzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxWaWV3LmNwcApAQCAtMjQxLDggKzI0MSwxMCBAQCBJbnRTaXplIFNjcm9sbFZpZXc6OnVu
c2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xs
YgogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1WaXNp
YmxlQ29udGVudFNpemUoc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKTsK
IAorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFtX2ZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1fZml4ZWRWaXNpYmxlQ29udGVudFJlY3Quc2l6
ZSgpOworI2VuZGlmCiAKICAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IDA7CiAgICAg
aW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAwOwpAQCAtMjY0LDggKzI2NiwxMCBAQCBJ
bnRSZWN0IFNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdChWaXNpYmxlQ29udGVudFJlY3RJ
bmNsdWRlc1Njcm9sbGJhcnMgc2NvbAogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAgICAg
ICByZXR1cm4gcGxhdGZvcm1WaXNpYmxlQ29udGVudFJlY3Qoc2NvbGxiYXJJbmNsdXNpb24gPT0g
SW5jbHVkZVNjcm9sbGJhcnMpOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoIW1fZml4
ZWRWaXNpYmxlQ29udGVudFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9maXhlZFZp
c2libGVDb250ZW50UmVjdDsKKyNlbmRpZgogCiAgICAgRmxvYXRTaXplIHZpc2libGVDb250ZW50
U2l6ZSA9IHVuc2NhbGVkVmlzaWJsZUNvbnRlbnRTaXplKHNjb2xsYmFySW5jbHVzaW9uKTsKICAg
ICB2aXNpYmxlQ29udGVudFNpemUuc2NhbGUoMSAvIHZpc2libGVDb250ZW50U2NhbGVGYWN0b3Io
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKaW5kZXggMjBjNjljZWVlYTZlMDUz
YjQ3NjA3MTAzYmY3NGFlOTE3MTg4OTMwNS4uZTUyODVmNGZkYmY0MzlkMGQ4NzMwMmExODc5MWRl
ZDY5NmIyZTc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaApAQCAtMzUsNiAr
MzUsMjQgQEAKIAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKKyNpZiBQTEFURk9STShJT1Mp
CisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBXQUtTY3JvbGxWaWV3OworQGNsYXNzIFdBS1ZpZXc7
CisjZWxzZQorY2xhc3MgV0FLU2Nyb2xsVmlldzsKK2NsYXNzIFdBS1ZpZXc7CisjZW5kaWYKKwor
I2lmbmRlZiBOU1Njcm9sbFZpZXcKKyNkZWZpbmUgTlNTY3JvbGxWaWV3IFdBS1Njcm9sbFZpZXcK
KyNlbmRpZgorCisjaWZuZGVmIE5TVmlldworI2RlZmluZSBOU1ZpZXcgV0FLVmlldworI2VuZGlm
CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBkZWZpbmVk
IF9fT0JKQ19fCiBAcHJvdG9jb2wgV2ViQ29yZUZyYW1lU2Nyb2xsVmlldzsKICNlbmRpZgpAQCAt
NDMsNiArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhvc3RXaW5kb3c7CiBj
bGFzcyBTY3JvbGxiYXI7CitjbGFzcyBUaWxlQ2FjaGU7CiAKIGNsYXNzIFNjcm9sbFZpZXcgOiBw
dWJsaWMgV2lkZ2V0LCBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgewogcHVibGljOgpAQCAtMTQxLDkg
KzE2MCwyMCBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIHNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0
IGluc3RlYWQgZm9yIHRoZSBtYWluZnJhbWUsIHRob3VnaCB0aGlzIG11c3QgYmUgdXBkYXRlZCBt
YW51YWxseSwgZS5nIGp1c3QgYmVmb3JlIHJlc3VtaW5nIHRoZSBwYWdlCiAgICAgLy8gd2hpY2gg
dXN1YWxseSB3aWxsIGhhcHBlbiB3aGVuIHBhbm5pbmcsIHBpbmNoaW5nIGFuZCByb3RhdGlvbiBl
bmRzLCBvciB3aGVuIHNjYWxlIG9yIHBvc2l0aW9uIGFyZSBjaGFuZ2VkIG1hbnVhbGx5LgogICAg
IHZpcnR1YWwgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3QoVmlzaWJsZUNvbnRlbnRSZWN0SW5j
bHVkZXNTY3JvbGxiYXJzID0gRXhjbHVkZVNjcm9sbGJhcnMpIGNvbnN0IE9WRVJSSURFOworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgdmlydHVhbCB2b2lkIHNldEZpeGVkVmlzaWJsZUNvbnRlbnRS
ZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkgeyBtX2ZpeGVkVmlzaWJsZUNv
bnRlbnRSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0OyB9CiAgICAgSW50UmVjdCBmaXhlZFZpc2li
bGVDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRWaXNpYmxlQ29udGVudFJlY3Q7
IH0KKyNlbmRpZgogICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCB7IHJldHVybiB2aXNp
YmxlQ29udGVudFJlY3QoKS5zaXplKCk7IH0KKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gVGhp
cyBpcyB0aGUgYXJlYSB0aGF0IGlzIG5vdCBjb3ZlcmVkIGJ5IFVJIGVsZW1lbnRzLgorICAgIElu
dFJlY3QgYWN0dWFsVmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3Q7CisgICAgLy8gVGhpcyBpcyB0
aGUgYXJlYSB0aGF0IGlzIHBhcnRpYWxseSBvciBmdWxseSBleHBvc2VkLCBhbmQgbWF5IGV4dGVu
ZCB1bmRlciBvdmVybGFwcGluZyBVSSBlbGVtZW50cy4KKyAgICBJbnRSZWN0IHZpc2libGVFeHRl
bnRDb250ZW50UmVjdCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRBY3R1YWxTY3JvbGxQb3NpdGlv
bihjb25zdCBJbnRQb2ludCYpOworICAgIFRpbGVDYWNoZSogdGlsZUNhY2hlKCk7CisjZW5kaWYK
ICAgICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB2
aXNpYmxlQ29udGVudFJlY3QoKS53aWR0aCgpOyB9CiAgICAgdmlydHVhbCBpbnQgdmlzaWJsZUhl
aWdodCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHZpc2libGVDb250ZW50UmVjdCgpLmhlaWdo
dCgpOyB9CiAKQEAgLTE4MSw2ICsyMTEsMTEgQEAgcHVibGljOgogICAgIGludCBzY3JvbGxYKCkg
Y29uc3QgeyByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS54KCk7IH0KICAgICBpbnQgc2Nyb2xsWSgp
IGNvbnN0IHsgcmV0dXJuIHNjcm9sbFBvc2l0aW9uKCkueSgpOyB9CiAKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgaW50IGFjdHVhbFNjcm9sbFgoKSBjb25zdCB7IHJldHVybiBhY3R1YWxWaXNpYmxl
Q29udGVudFJlY3QoKS54KCk7IH0KKyAgICBpbnQgYWN0dWFsU2Nyb2xsWSgpIGNvbnN0IHsgcmV0
dXJuIGFjdHVhbFZpc2libGVDb250ZW50UmVjdCgpLnkoKTsgfQorI2VuZGlmCisKICAgICAvLyBz
Y3JvbGxPZmZzZXQoKSBhbmNob3JzIGl0cyAoMCwwKSBwb2ludCBhdCB0aGUgdG9wIGVuZCBvZiB0
aGUgaGVhZGVyIGlmIHRoaXMgU2Nyb2xsYWJsZUFyZWEKICAgICAvLyBoYXMgYSBoZWFkZXIsIHNv
IGl0IGlzIHJlbGF0aXZlIHRvIHRoZSB0b3RhbENvbnRlbnRzU2l6ZSgpLiBzY3JvbGxPZmZzZXRS
ZWxhdGl2ZVRvRG9jdW1lbnQoKQogICAgIC8vIGFuY2hvcnMgKDAsMCkgYXQgdGhlIHRvcCBvZiB0
aGUgRG9jdW1lbnQsIHdoaWNoIHdpbGwgYmUgYmVuZWF0aCBhbnkgaGVhZGVycywgc28gaXQgaXMg
cmVsYXRpdmUKQEAgLTM1NCw3ICszODksOSBAQCBwcml2YXRlOgogICAgIC8vIHdoZXRoZXIgaXQg
aXMgc2FmZSB0byBibGl0IG9uIHNjcm9sbC4KICAgICBib29sIG1fY2FuQmxpdE9uU2Nyb2xsOwog
CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBJbnRSZWN0IG1fZml4ZWRWaXNpYmxlQ29udGVudFJl
Y3Q7CisjZW5kaWYKICAgICBJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OyAvLyBGSVhNRTogV291bGQg
cmF0aGVyIHN0b3JlIHRoaXMgYXMgYSBwb3NpdGlvbiwgYnV0IHdlIHdpbGwgd2FpdCB0byBtYWtl
IHRoaXMgY2hhbmdlIHVudGlsIG1vcmUgY29kZSBpcyBzaGFyZWQuCiAgICAgSW50UG9pbnQgbV9j
YWNoZWRTY3JvbGxQb3NpdGlvbjsKICAgICBJbnRTaXplIG1fZml4ZWRMYXlvdXRTaXplOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IGMxOGRlYTdlZGM0
OTFhZDVmZDUyYjY2Y2QyM2Y5Y2JmNTgyZDRlOTkuLjJiYzg0YzVjMWIyOTQzYTMyMWI0MDhjNzg1
M2UwYjk5NTJkMzZmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5jcHAKQEAgLTE3Niw2ICsxNzYsMTMgQEAgYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiAgICAgcmV0dXJu
IHNjcm9sbEFuaW1hdG9yKCktPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CiB9CiAKKyNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hF
dmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCit7CisgICAgcmV0dXJu
IHNjcm9sbEFuaW1hdG9yKCktPmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cit9CisjZW5k
aWYKKwogLy8gTk9URTogT25seSBjYWxsZWQgZnJvbSBJbnRlcm5hbHMgZm9yIHRlc3RpbmcuCiB2
b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPZmZzZXRGcm9tSW50ZXJuYWxzKGNvbnN0IElu
dFBvaW50JiBvZmZzZXQpCiB7CkBAIC0zODksNiArMzk2LDMxIEBAIHZvaWQgU2Nyb2xsYWJsZUFy
ZWE6OnNlcnZpY2VTY3JvbGxBbmltYXRpb25zKCkKICAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPnNl
cnZpY2VTY3JvbGxBbmltYXRpb25zKCk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitib29sIFNj
cm9sbGFibGVBcmVhOjppc1Bpbm5lZEluQm90aERpcmVjdGlvbnMoY29uc3QgSW50U2l6ZSYgc2Ny
b2xsRGVsdGEpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzUGlubmVkSG9yaXpvbnRhbGx5SW5EaXJl
Y3Rpb24oc2Nyb2xsRGVsdGEud2lkdGgoKSkgJiYgaXNQaW5uZWRWZXJ0aWNhbGx5SW5EaXJlY3Rp
b24oc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpOworfQorCitib29sIFNjcm9sbGFibGVBcmVhOjppc1Bp
bm5lZEhvcml6b250YWxseUluRGlyZWN0aW9uKGludCBob3Jpem9udGFsU2Nyb2xsRGVsdGEpIGNv
bnN0Cit7CisgICAgaWYgKGhvcml6b250YWxTY3JvbGxEZWx0YSA8IDAgJiYgaXNIb3Jpem9udGFs
U2Nyb2xsZXJQaW5uZWRUb01pbmltdW1Qb3NpdGlvbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbERlbHRhID4gMCAmJiBpc0hvcml6b250YWxTY3JvbGxl
clBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxhYmxlQXJlYTo6aXNQaW5uZWRWZXJ0aWNhbGx5
SW5EaXJlY3Rpb24oaW50IHZlcnRpY2FsU2Nyb2xsRGVsdGEpIGNvbnN0Cit7CisgICAgaWYgKHZl
cnRpY2FsU2Nyb2xsRGVsdGEgPCAwICYmIGlzVmVydGljYWxTY3JvbGxlclBpbm5lZFRvTWluaW11
bVBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICh2ZXJ0aWNhbFNjcm9s
bERlbHRhID4gMCAmJiBpc1ZlcnRpY2FsU2Nyb2xsZXJQaW5uZWRUb01heGltdW1Qb3NpdGlvbigp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQorCiBJbnRQb2ludCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsUG9zaXRpb24o
KSBjb25zdAogewogICAgIGludCB4ID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpID8gaG9yaXpvbnRh
bFNjcm9sbGJhcigpLT52YWx1ZSgpIDogMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxh
YmxlQXJlYS5oCmluZGV4IGUzMzczZTRjOTFjOWUyNWVlMDMyNTdiNzRmNjhlZDRjY2JmODYzMjYu
LmYxNzQ3MWQ0ZDdkMThlYWI0OWIyY2Q0NWE3YWM1N2ZjNWYxYjVjZWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaApAQCAtMzMsNiArMzMsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Citj
bGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFz
cyBTY3JvbGxBbmltYXRvcjsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC01
Nyw2ICs1OCwxOSBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHZp
cnR1YWwgYm9vbCBpc1RvdWNoU2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50
Jik7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIGJvb2wgaXNPdmVy
Zmxvd1Njcm9sbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGRp
ZFN0YXJ0U2Nyb2xsKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEVuZFNjcm9sbCgpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVTY3JvbGwoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0SXNVc2VyU2Nyb2xsKGJvb2wpIHsgfQorI2VuZGlmCisKICAgICAvLyBGdW5jdGlvbnMgZm9y
IGNvbnRyb2xsaW5nIGlmIHlvdSBjYW4gc2Nyb2xsIHBhc3QgdGhlIGVuZCBvZiB0aGUgZG9jdW1l
bnQuCiAgICAgYm9vbCBjb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2U7IH0KICAgICB2b2lkIHNl
dENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGJvb2wgY29uc3RyYWluc1Njcm9sbGlu
Z1RvQ29udGVudEVkZ2UpIHsgbV9jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSA9IGNv
bnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlOyB9CkBAIC0xODIsNiArMTk2LDE3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVBbmltYXRpb24oKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZvaWQgc2VydmljZVNjcm9sbEFuaW1hdGlvbnMoKTsKIAorI2lmIFBMQVRGT1JN
KElPUykKKyAgICBib29sIGlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9NaW5pbXVtUG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiAhaG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IHNjcm9sbFBvc2l0
aW9uKGhvcml6b250YWxTY3JvbGxiYXIoKSkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueCgp
OyB9CisgICAgYm9vbCBpc0hvcml6b250YWxTY3JvbGxlclBpbm5lZFRvTWF4aW11bVBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gIWhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxQb3NpdGlv
bihob3Jpem9udGFsU2Nyb2xsYmFyKCkpID49IG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKTsg
fQorICAgIGJvb2wgaXNWZXJ0aWNhbFNjcm9sbGVyUGlubmVkVG9NaW5pbXVtUG9zaXRpb24oKSBj
b25zdCB7IHJldHVybiAhdmVydGljYWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxQb3NpdGlvbih2ZXJ0
aWNhbFNjcm9sbGJhcigpKSA8PSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCk7IH0KKyAgICBi
b29sIGlzVmVydGljYWxTY3JvbGxlclBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gIXZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsUG9zaXRpb24odmVydGljYWxTY3Jv
bGxiYXIoKSkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueSgpOyB9IAorCisgICAgYm9vbCBp
c1Bpbm5lZEluQm90aERpcmVjdGlvbnMoY29uc3QgSW50U2l6ZSYpIGNvbnN0OyAKKyAgICBib29s
IGlzUGlubmVkSG9yaXpvbnRhbGx5SW5EaXJlY3Rpb24oaW50IGhvcml6b250YWxTY3JvbGxEZWx0
YSkgY29uc3Q7IAorICAgIGJvb2wgaXNQaW5uZWRWZXJ0aWNhbGx5SW5EaXJlY3Rpb24oaW50IHZl
cnRpY2FsU2Nyb2xsRGVsdGEpIGNvbnN0OworI2VuZGlmCisKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpIHsg
cmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAK
aW5kZXggYjk4Y2NhMzExZTQ1NTM0ZjVhNGEyY2Q5NjlkZGNjMDRjODZjYTc2OS4uNDFmN2JhNDhl
YzhlY2MyYjMzNjlhMWQ2ZGVkMTdiMjU0NzliZTQzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXIuY3BwCkBAIC0zMzQsNiArMzM0LDcgQEAgdm9pZCBTY3JvbGxiYXI6OnNldFByZXNz
ZWRQYXJ0KFNjcm9sbGJhclBhcnQgcGFydCkKICAgICAgICAgdGhlbWUoKS0+aW52YWxpZGF0ZVBh
cnQodGhpcywgbV9ob3ZlcmVkUGFydCk7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogYm9vbCBT
Y3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAg
ICAgaWYgKG1fcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KSB7CkBAIC0zNzIsNiArMzczLDcgQEAg
Ym9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQp
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZgogCiB2b2lkIFNjcm9sbGJhcjo6bW91c2VF
bnRlcmVkKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJh
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKaW5kZXggZTViMzI5ZGFi
YjEyNTYyZDY5ZGUyZDYyNWJiZjQ4NDk5YjZkMmFmYy4uY2QxZTg5NzAzOGVlZWFiNWQxNzMzYTI1
ZjU3NGZmYTU3MDE3MjhiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKQEAgLTEy
NSw3ICsxMjUsOSBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCBmb3Ig
cGxhdGZvcm0gc2Nyb2xsYmFycyB0byBnaXZlIDpob3ZlciBmZWVkYmFjay4gIFRoZXkgd2lsbCBu
b3QgZ2V0IGNhbGxlZAogICAgIC8vIHdoZW4gdGhlIG1vdXNlIHdlbnQgZG93biBpbiBhIHNjcm9s
bGJhciwgc2luY2UgaXQgaXMgYXNzdW1lZCB0aGUgc2Nyb2xsYmFyIHdpbGwgc3RhcnQKICAgICAv
LyBncmFiYmluZyBhbGwgZXZlbnRzIGluIHRoYXQgY2FzZSBhbnl3YXkuCisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBib29sIG1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7Cisj
ZW5kaWYKICAgICB2b2lkIG1vdXNlRW50ZXJlZCgpOwogICAgIGJvb2wgbW91c2VFeGl0ZWQoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggZGI4MjNjZDdm
YjYyNGZmMDQwM2VmYWJmN2M2MmRlMmYwZmE3ZGRlNS4uMWRhZDc4NzIzMmIzMDYxZDE5NjdjOWRl
YjkzYjg2NjE3ODg1YzdiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwCkBAIC02Niw2ICs2Niw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlU2VnbWVudChjaGFy
KiBwKQogCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcigpCiAgICAgOiBtX3NpemUoMCkKKyAg
ICAsIG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGZhbHNlKQogI2lmIEVOQUJMRShESVNLX0lN
QUdFX0NBQ0hFKQogICAgICwgbV9pc01lbW9yeU1hcHBlZChmYWxzZSkKICAgICAsIG1fZGlza0lt
YWdlQ2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlkKQpAQCAtNzgsNiAr
NzksNyBAQCBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcigpCiBTaGFyZWRCdWZmZXI6OlNoYXJl
ZEJ1ZmZlcih1bnNpZ25lZCBzaXplKQogICAgIDogbV9zaXplKHNpemUpCiAgICAgLCBtX2J1ZmZl
cihzaXplKQorICAgICwgbV9zaG91bGRVc2VQdXJnZWFibGVNZW1vcnkoZmFsc2UpCiAjaWYgRU5B
QkxFKERJU0tfSU1BR0VfQ0FDSEUpCiAgICAgLCBtX2lzTWVtb3J5TWFwcGVkKGZhbHNlKQogICAg
ICwgbV9kaXNrSW1hZ2VDYWNoZUlkKERpc2tJbWFnZUNhY2hlOjppbnZhbGlkRGlza0NhY2hlSWQp
CkBAIC04OSw2ICs5MSw3IEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKHVuc2lnbmVkIHNp
emUpCiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2ln
bmVkIHNpemUpCiAgICAgOiBtX3NpemUoMCkKKyAgICAsIG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVt
b3J5KGZhbHNlKQogI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQogICAgICwgbV9pc01lbW9y
eU1hcHBlZChmYWxzZSkKICAgICAsIG1fZGlza0ltYWdlQ2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6
aW52YWxpZERpc2tDYWNoZUlkKQpAQCAtMTAxLDYgKzEwNCw3IEBAIFNoYXJlZEJ1ZmZlcjo6U2hh
cmVkQnVmZmVyKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUpCiAKIFNoYXJlZEJ1ZmZl
cjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUp
CiAgICAgOiBtX3NpemUoMCkKKyAgICAsIG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGZhbHNl
KQogI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQogICAgICwgbV9pc01lbW9yeU1hcHBlZChm
YWxzZSkKICAgICAsIG1fZGlza0ltYWdlQ2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERp
c2tDYWNoZUlkKQpAQCAtMjEwLDYgKzIxNCwxMiBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6c2V0TWVt
b3J5TWFwcGVkTm90aWZpY2F0aW9uQ2FsbGJhY2soTWVtb3J5TWFwcGVkTm90aWZ5Q2FsbGJhYwog
fQogI2VuZGlmCiAKKy8vIFRyeSB0byBjcmVhdGUgYSBQdXJnZWFibGVCdWZmZXIuIFdlIGNhbiBm
YWlsIHRvIGNyZWF0ZSBvbmUgZm9yIGFueSBvZiB0aGUKKy8vIGZvbGxvd2luZyByZWFzb25zOgor
Ly8gICAtIHNob3VsZFVzZVB1cmdlYWJsZU1lbW9yeSBpcyBzZXQgdG8gZmFsc2UuCisvLyAgIC0g
dGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyBsZXNzIHRoYW4gdGhlIG1pbmltdW0gc2l6ZSByZXF1
aXJlZCBieQorLy8gICAgIFB1cmdlYWJsZUJ1ZmZlciAoY3VycmVudGx5IDE2aykuCisvLyAgIC0g
UHVyZ2VhYmxlQnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKCkgY2FsbCBmYWlscy4KIHZvaWQg
U2hhcmVkQnVmZmVyOjpjcmVhdGVQdXJnZWFibGVCdWZmZXIoKSBjb25zdAogewogICAgIGlmICht
X3B1cmdlYWJsZUJ1ZmZlcikKQEAgLTIyNiw2ICsyMzYsOSBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlUHVyZ2VhYmxlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoIWhhc09uZVJlZigpKQogICAg
ICAgICByZXR1cm47CiAKKyAgICBpZiAoIW1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KQorICAg
ICAgICByZXR1cm47CisKICAgICBjaGFyKiBkZXN0aW5hdGlvbiA9IDA7CiAgICAgbV9wdXJnZWFi
bGVCdWZmZXIgPSBQdXJnZWFibGVCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9zaXplLCBk
ZXN0aW5hdGlvbik7CiAgICAgaWYgKCFtX3B1cmdlYWJsZUJ1ZmZlcikKQEAgLTI1Myw3ICsyNjYs
OSBAQCBjb25zdCBjaGFyKiBTaGFyZWRCdWZmZXI6OmRhdGEoKSBjb25zdAogICAgIGlmIChjb25z
dCBjaGFyKiBidWZmZXIgPSBzaW5nbGVEYXRhQXJyYXlCdWZmZXIoKSkKICAgICAgICAgcmV0dXJu
IGJ1ZmZlcjsKICNlbmRpZgotICAgIAorCisgICAgY3JlYXRlUHVyZ2VhYmxlQnVmZmVyKCk7CisK
ICAgICBpZiAobV9wdXJnZWFibGVCdWZmZXIpCiAgICAgICAgIHJldHVybiBtX3B1cmdlYWJsZUJ1
ZmZlci0+ZGF0YSgpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApp
bmRleCA4MjcxOGIzNWMwZDAzN2I5ZmI1ZWI1NmE4OWRkMTUzNWI4NzQ5N2EyLi4xMDZjODMwZDY1
MWY5ZWQ3ZTU2NmMwMTg4ZDJkNzBjNTMyYzY4MDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
aGFyZWRCdWZmZXIuaApAQCAtMTM4LDYgKzEzOCw4IEBAIHB1YmxpYzoKICAgICAvLyAgICAgIH0K
ICAgICB1bnNpZ25lZCBnZXRTb21lRGF0YShjb25zdCBjaGFyKiYgZGF0YSwgdW5zaWduZWQgcG9z
aXRpb24gPSAwKSBjb25zdDsKIAorICAgIHZvaWQgc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5KGJv
b2wgdXNlKSB7IG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5ID0gdXNlOyB9CisKICNpZiBFTkFC
TEUoRElTS19JTUFHRV9DQUNIRSkKICAgICBlbnVtIE1lbW9yeU1hcHBpbmdTdGF0ZSB7IFF1ZXVl
ZEZvck1hcHBpbmcsIFByZXZpb3VzbHlRdWV1ZWRGb3JNYXBwaW5nLCBTdWNjZXNzQWxyZWFkeU1h
cHBlZCwgRmFpbHVyZUNhY2hlRnVsbCB9OwogCkBAIC0xODcsNiArMTg5LDcgQEAgcHJpdmF0ZToK
IAogICAgIHVuc2lnbmVkIG1fc2l6ZTsKICAgICBtdXRhYmxlIFZlY3RvcjxjaGFyPiBtX2J1ZmZl
cjsKKyAgICBib29sIG1fc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5OwogICAgIG11dGFibGUgT3du
UHRyPFB1cmdlYWJsZUJ1ZmZlcj4gbV9wdXJnZWFibGVCdWZmZXI7CiAjaWYgVVNFKE5FVFdPUktf
Q0ZEQVRBX0FSUkFZX0NBTExCQUNLKQogICAgIG11dGFibGUgVmVjdG9yPFJldGFpblB0cjxDRkRh
dGFSZWY+PiBtX2RhdGFBcnJheTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1N1ZGRlblRlcm1pbmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdWRkZW5UZXJt
aW5hdGlvbi5oCmluZGV4IDcyNTIxNDkwNjJmNDMzYWIzM2M2ODgwYzk1NTRiOWIzYmRmYWRjOTIu
LjgwOTY3YzZjMDhjOWZjNzJhMTEyZjFkMzBlYmNmMmYwODEyNWQzZTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1ZGRlblRlcm1pbmF0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU3VkZGVuVGVybWluYXRpb24uaApAQCAtMzQsNyArMzQsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgdm9pZCBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKICAg
ICB2b2lkIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CiAKLSNpZiAhUExBVEZPUk0oTUFDKQor
I2lmIFBMQVRGT1JNKElPUykgfHwgIVBMQVRGT1JNKE1BQykKICAgICBpbmxpbmUgdm9pZCBkaXNh
YmxlU3VkZGVuVGVybWluYXRpb24oKSB7IH0KICAgICBpbmxpbmUgdm9pZCBlbmFibGVTdWRkZW5U
ZXJtaW5hdGlvbigpIHsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TdXBwbGVtZW50YWJsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VwcGxlbWVu
dGFibGUuaAppbmRleCAyNzdhYWVmODBlZjZjYzdiYTNiZTJhOTg5YzJmNWZmM2RlZDJjNzUxLi5j
MjAyZjJjNDIxZWUwODZiZDFjZmU0NmMwNzQzYWNlNjdmNjc3NjJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TdXBwbGVtZW50YWJsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgogCkBAIC05OSwyMCArMTAwLDIwIEBAIGNsYXNzIFN1cHBsZW1lbnRhYmxl
IHsKIHB1YmxpYzoKICAgICB2b2lkIHByb3ZpZGVTdXBwbGVtZW50KGNvbnN0IGNoYXIqIGtleSwg
UGFzc093blB0cjxTdXBwbGVtZW50PFQ+PiBzdXBwbGVtZW50KQogICAgIHsKLSAgICAgICAgQVNT
RVJUKG1fdGhyZWFkSWQgPT0gY3VycmVudFRocmVhZCgpKTsKKyAgICAgICAgQVNTRVJUKGNhbkFj
Y2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RocmVhZElkKSk7CiAgICAgICAgIEFTU0VS
VCghbV9zdXBwbGVtZW50cy5nZXQoa2V5KSk7CiAgICAgICAgIG1fc3VwcGxlbWVudHMuc2V0KGtl
eSwgc3VwcGxlbWVudCk7CiAgICAgfQogCiAgICAgdm9pZCByZW1vdmVTdXBwbGVtZW50KGNvbnN0
IGNoYXIqIGtleSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3RocmVhZElkID09IGN1cnJlbnRU
aHJlYWQoKSk7CisgICAgICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJl
YWQobV90aHJlYWRJZCkpOwogICAgICAgICBtX3N1cHBsZW1lbnRzLnJlbW92ZShrZXkpOwogICAg
IH0KIAogICAgIFN1cHBsZW1lbnQ8VD4qIHJlcXVpcmVTdXBwbGVtZW50KGNvbnN0IGNoYXIqIGtl
eSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3RocmVhZElkID09IGN1cnJlbnRUaHJlYWQoKSk7
CisgICAgICAgIEFTU0VSVChjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQobV90aHJl
YWRJZCkpOwogICAgICAgICByZXR1cm4gbV9zdXBwbGVtZW50cy5nZXQoa2V5KTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N5c3RlbU1lbW9yeS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3lzdGVtTWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI3NjNjZDNh
NmNkNzBkNjFiODc2YThhMzZkYjBmYTA0ZDVjZWYwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1N5c3RlbU1lbW9yeS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgU3lzdGVtTWVtb3J5X2gKKyNkZWZpbmUgU3lzdGVtTWVtb3J5X2gKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworaW50IHN5c3RlbU1lbW9yeUxldmVsKCk7IC8vIEluIFswLCAxMDBdCitzaXplX3Qg
c3lzdGVtVG90YWxNZW1vcnkoKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9UaHJlYWRDaGVjay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhy
ZWFkQ2hlY2suaAppbmRleCAwN2ViNDYzYjA1YmUyN2RlMTM1MmQwNjZlZTcyZGU3MTdiYmMzNzU5
Li5mYmEzYWEyNmIzOTI1ZjYyMDAxNjFhZWU1ZjE0MDk4NDkyZmFkNmUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRDaGVjay5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1RocmVhZENoZWNrLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgVGhyZWFk
Q2hlY2tfaAogI2RlZmluZSBUaHJlYWRDaGVja19oCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGVudW0gVGhyZWFkVmlvbGF0aW9uQmVoYXZpb3IgewogICAg
ICAgICBOb1RocmVhZENoZWNrLApAQCAtNDYsNSArNDcsOSBAQCBleHRlcm4gIkMiIHZvaWQgV2Vi
Q29yZVJlcG9ydFRocmVhZFZpb2xhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbiwgV2ViQ29yZTo6
VGhyZQogCiAjZGVmaW5lIFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kT25lKCkgOjpX
ZWJDb3JlOjpyZXBvcnRUaHJlYWRWaW9sYXRpb24oV1RGX1BSRVRUWV9GVU5DVElPTiwgV2ViQ29y
ZTo6VGhyZWFkVmlvbGF0aW9uUm91bmRPbmUpCiAjZGVmaW5lIFdlYkNvcmVUaHJlYWRWaW9sYXRp
b25DaGVja1JvdW5kVHdvKCkgOjpXZWJDb3JlOjpyZXBvcnRUaHJlYWRWaW9sYXRpb24oV1RGX1BS
RVRUWV9GVU5DVElPTiwgV2ViQ29yZTo6VGhyZWFkVmlvbGF0aW9uUm91bmRUd28pCisjZWxzZQor
I2RlZmluZSBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgpIGRvIHsgfSB3aGls
ZSAoMCkKKyNkZWZpbmUgV2ViQ29yZVRocmVhZFZpb2xhdGlvbkNoZWNrUm91bmRUd28oKSBkbyB7
IH0gd2hpbGUgKDApCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAKaW5kZXggMGQ4MzdiZjU2ZDc5
YjkyYzQwOTE0NWQ3Nzc2NzdlYTdkMTJkYzIwNC4uY2VmYjE5ZGRjNzBlNWRhOTU1MTEyYTg5NmVj
NjdjMTlkNTAyZTI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFk
R2xvYmFsRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFs
RGF0YS5jcHAKQEAgLTUwLDYgKzUwLDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogVGhyZWFkU3BlY2lmaWM8VGhyZWFkR2xvYmFsRGF0YT4qIFRocmVhZEds
b2JhbERhdGE6OnN0YXRpY0RhdGE7CisjaWYgVVNFKFdFQl9USFJFQUQpCitUaHJlYWRHbG9iYWxE
YXRhKiBUaHJlYWRHbG9iYWxEYXRhOjpzaGFyZWRNYWluVGhyZWFkU3RhdGljRGF0YTsKKyNlbmRp
ZgogCiBUaHJlYWRHbG9iYWxEYXRhOjpUaHJlYWRHbG9iYWxEYXRhKCkKICAgICA6IG1fY2FjaGVk
UmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycyhhZG9wdFB0cihuZXcgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0SW5pdGlhdG9ycykpCkBAIC02MSw3ICs2NCw3IEBAIFRocmVhZEdsb2JhbERhdGE6OlRocmVh
ZEdsb2JhbERhdGEoKQogI2lmIFVTRShJQ1VfVU5JQ09ERSkKICAgICAsIG1fY2FjaGVkQ29udmVy
dGVySUNVKGFkb3B0UHRyKG5ldyBJQ1VDb252ZXJ0ZXJXcmFwcGVyKSkKICNlbmRpZgotI2lmIFBM
QVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgLCBt
X2NhY2hlZENvbnZlcnRlclRFQyhhZG9wdFB0cihuZXcgVEVDQ29udmVydGVyV3JhcHBlcikpCiAj
ZW5kaWYKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtODIsNyArODUsNyBAQCBUaHJlYWRHbG9i
YWxEYXRhOjp+VGhyZWFkR2xvYmFsRGF0YSgpCiAKIHZvaWQgVGhyZWFkR2xvYmFsRGF0YTo6ZGVz
dHJveSgpCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRG
T1JNKElPUykKICAgICBtX2NhY2hlZENvbnZlcnRlclRFQy5jbGVhcigpOwogI2VuZGlmCiAKQEAg
LTk4LDExICsxMDEsMzUgQEAgdm9pZCBUaHJlYWRHbG9iYWxEYXRhOjpkZXN0cm95KCkKICAgICBt
X3RocmVhZFRpbWVycy5jbGVhcigpOwogfQogCisjaWYgRU5BQkxFKFdPUktFUlMpICYmIFVTRShX
RUJfVEhSRUFEKQordm9pZCBUaHJlYWRHbG9iYWxEYXRhOjpzZXRXZWJDb3JlVGhyZWFkRGF0YSgp
Cit7CisgICAgQVNTRVJUKGlzV2ViVGhyZWFkKCkpOworICAgIEFTU0VSVCgmdGhyZWFkR2xvYmFs
RGF0YSgpICE9IFRocmVhZEdsb2JhbERhdGE6OnNoYXJlZE1haW5UaHJlYWRTdGF0aWNEYXRhKTsK
KworICAgIC8vIFNldCBXZWJUaHJlYWQncyBUaHJlYWRHbG9iYWxEYXRhIG9iamVjdCB0byBiZSB0
aGUgc2FtZSBhcyB0aGUgbWFpbiBVSSB0aHJlYWQuCisgICAgVGhyZWFkR2xvYmFsRGF0YTo6c3Rh
dGljRGF0YS0+cmVwbGFjZShUaHJlYWRHbG9iYWxEYXRhOjpzaGFyZWRNYWluVGhyZWFkU3RhdGlj
RGF0YSk7CisKKyAgICBBU1NFUlQoJnRocmVhZEdsb2JhbERhdGEoKSA9PSBUaHJlYWRHbG9iYWxE
YXRhOjpzaGFyZWRNYWluVGhyZWFkU3RhdGljRGF0YSk7Cit9CisjZW5kaWYKKwogVGhyZWFkR2xv
YmFsRGF0YSYgdGhyZWFkR2xvYmFsRGF0YSgpIAogeworI2lmIFVTRShXRUJfVEhSRUFEKQorICAg
IGlmIChVTkxJS0VMWSghVGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0YSkpIHsKKyAgICAgICAg
VGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0YSA9IG5ldyBUaHJlYWRTcGVjaWZpYzxUaHJlYWRH
bG9iYWxEYXRhPjsKKyAgICAgICAgLy8gV2ViVGhyZWFkIGFuZCBtYWluIFVJIHRocmVhZCBuZWVk
IHRvIHNoYXJlIHRoZSBzYW1lIG9iamVjdC4gU2F2ZSBpdCBpbiBhIHN0YXRpYworICAgICAgICAv
LyBoZXJlLCB0aGUgV2ViVGhyZWFkIHdpbGwgcGljayBpdCB1cCBpbiBzZXRXZWJDb3JlVGhyZWFk
RGF0YSgpLgorICAgICAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgICAgICBUaHJl
YWRHbG9iYWxEYXRhOjpzaGFyZWRNYWluVGhyZWFkU3RhdGljRGF0YSA9ICpUaHJlYWRHbG9iYWxE
YXRhOjpzdGF0aWNEYXRhOworICAgIH0KKyAgICByZXR1cm4gKipUaHJlYWRHbG9iYWxEYXRhOjpz
dGF0aWNEYXRhOworI2Vsc2UKICAgICBpZiAoIVRocmVhZEdsb2JhbERhdGE6OnN0YXRpY0RhdGEp
CiAgICAgICAgIFRocmVhZEdsb2JhbERhdGE6OnN0YXRpY0RhdGEgPSBuZXcgVGhyZWFkU3BlY2lm
aWM8VGhyZWFkR2xvYmFsRGF0YT47CiAgICAgcmV0dXJuICoqVGhyZWFkR2xvYmFsRGF0YTo6c3Rh
dGljRGF0YTsKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgKaW5kZXggNzZjOWZhZmIxZTliMzI3Yjc4
Y2E4NjkxZWU0MzgwNjQ2NmFhODk0Ni4uZmZiMDE4YzdhMjBmZTdlYTMwNzhlODUxN2UxZjhmMzE1
MzI4ODY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFs
RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuaApA
QCAtNjIsMTAgKzYyLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgSUNVQ29udmVy
dGVyV3JhcHBlciYgY2FjaGVkQ29udmVydGVySUNVKCkgeyByZXR1cm4gKm1fY2FjaGVkQ29udmVy
dGVySUNVOyB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMp
ICYmICFQTEFURk9STShJT1MpCiAgICAgICAgIFRFQ0NvbnZlcnRlcldyYXBwZXImIGNhY2hlZENv
bnZlcnRlclRFQygpIHsgcmV0dXJuICptX2NhY2hlZENvbnZlcnRlclRFQzsgfQogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoV09SS0VSUykgJiYgVVNFKFdFQl9USFJFQUQpCisgICAgICAgIHZvaWQgc2V0
V2ViQ29yZVRocmVhZERhdGEoKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAg
ICAgICAgVGhyZWFkTG9jYWxJbnNwZWN0b3JDb3VudGVycyYgaW5zcGVjdG9yQ291bnRlcnMoKSB7
IHJldHVybiAqbV9pbnNwZWN0b3JDb3VudGVyczsgfQogI2VuZGlmCkBAIC04Myw3ICs4Nyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgT3duUHRyPElDVUNvbnZlcnRlcldyYXBwZXI+
IG1fY2FjaGVkQ29udmVydGVySUNVOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYg
UExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogICAgICAgICBPd25QdHI8VEVDQ29udmVy
dGVyV3JhcHBlcj4gbV9jYWNoZWRDb252ZXJ0ZXJURUM7CiAjZW5kaWYKIApAQCAtOTIsMTAgKzk2
LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAgICAgICAgIHN0YXRpYyBUaHJl
YWRTcGVjaWZpYzxUaHJlYWRHbG9iYWxEYXRhPiogc3RhdGljRGF0YTsKKyNpZiBVU0UoV0VCX1RI
UkVBRCkKKyAgICAgICAgc3RhdGljIFRocmVhZEdsb2JhbERhdGEqIHNoYXJlZE1haW5UaHJlYWRT
dGF0aWNEYXRhOworI2VuZGlmCiAgICAgICAgIGZyaWVuZCBUaHJlYWRHbG9iYWxEYXRhJiB0aHJl
YWRHbG9iYWxEYXRhKCk7CiAgICAgfTsKIAorI2lmIFVTRShXRUJfVEhSRUFEKQorVGhyZWFkR2xv
YmFsRGF0YSYgdGhyZWFkR2xvYmFsRGF0YSgpOworI2Vsc2UKIFRocmVhZEdsb2JhbERhdGEmIHRo
cmVhZEdsb2JhbERhdGEoKSBQVVJFX0ZVTkNUSU9OOworI2VuZGlmCiAgICAgCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVh
ZFRpbWVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRUaW1lcnMuY3BwCmlu
ZGV4IDg0NjQ0MGZmMjVkY2IyZTM0NzlmNTRlZTIzYjYwMzE2OGM1NmE0ZmMuLjc4OTM3OGNlM2Zl
YjRlM2IwY2NmNDBiNzU3YmY1M2YxOGNjNTM5MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1RocmVhZFRpbWVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGhyZWFkVGltZXJzLmNwcApAQCAtMzMsNiArMzMsMTAgQEAKICNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCisjaWYgUExBVEZPUk0oSU9T
KQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIC8vIEZpcmUgdGltZXJzIGZvciB0aGlzIGxlbmd0aCBvZiB0aW1lLCBhbmQgdGhlbiBx
dWl0IHRvIGxldCB0aGUgcnVuIGxvb3AgcHJvY2VzcyB1c2VyIGlucHV0IGV2ZW50cy4KQEAgLTU0
LDcgKzU4LDcgQEAgVGhyZWFkVGltZXJzOjpUaHJlYWRUaW1lcnMoKQogICAgICwgbV9maXJpbmdU
aW1lcnMoZmFsc2UpCiAgICAgLCBtX3BlbmRpbmdTaGFyZWRUaW1lckZpcmVUaW1lKDApCiB7Ci0g
ICAgaWYgKGlzTWFpblRocmVhZCgpKQorICAgIGlmIChpc1VJVGhyZWFkKCkpCiAgICAgICAgIHNl
dFNoYXJlZFRpbWVyKG1haW5UaHJlYWRTaGFyZWRUaW1lcigpKTsKIH0KIApAQCAtMTA1LDYgKzEw
OSw3IEBAIHZvaWQgVGhyZWFkVGltZXJzOjpzaGFyZWRUaW1lckZpcmVkKCkKIAogdm9pZCBUaHJl
YWRUaW1lcnM6OnNoYXJlZFRpbWVyRmlyZWRJbnRlcm5hbCgpCiB7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpIHx8ICFpc1dlYlRocmVhZCgpICYmICFpc1VJVGhyZWFkKCkpOwogICAgIC8vIERv
IGEgcmUtZW50cmFuY3kgY2hlY2suCiAgICAgaWYgKG1fZmlyaW5nVGltZXJzKQogICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5jcHAKaW5kZXggMzFhNDA1ZDcwMGRlM2QxOTdl
NWZkYjExNTRkYmJmZTE2OWQ2ZDhhNi4uYTg3MzczMDQzYmU0MWU4ODEzNzEwMGVmOTQ5OGZiZGI2
ZmEwOWMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGltZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmNwcApAQCAtMzUsNiArMzUsNyBAQAog
I2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMDksNyArMjEwLDcgQEAg
VGltZXJCYXNlOjp+VGltZXJCYXNlKCkKIAogdm9pZCBUaW1lckJhc2U6OnN0YXJ0KGRvdWJsZSBu
ZXh0RmlyZUludGVydmFsLCBkb3VibGUgcmVwZWF0SW50ZXJ2YWwpCiB7Ci0gICAgQVNTRVJUKG1f
dGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExv
Y2FsRGF0YUZvclRocmVhZChtX3RocmVhZCkpOwogCiAgICAgbV9yZXBlYXRJbnRlcnZhbCA9IHJl
cGVhdEludGVydmFsOwogICAgIHNldE5leHRGaXJlVGltZShtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKSArIG5leHRGaXJlSW50ZXJ2YWwpOwpAQCAtMjE3LDcgKzIxOCw3IEBAIHZvaWQgVGlt
ZXJCYXNlOjpzdGFydChkb3VibGUgbmV4dEZpcmVJbnRlcnZhbCwgZG91YmxlIHJlcGVhdEludGVy
dmFsKQogCiB2b2lkIFRpbWVyQmFzZTo6c3RvcCgpCiB7Ci0gICAgQVNTRVJUKG1fdGhyZWFkID09
IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZv
clRocmVhZChtX3RocmVhZCkpOwogCiAgICAgbV9yZXBlYXRJbnRlcnZhbCA9IDA7CiAgICAgc2V0
TmV4dEZpcmVUaW1lKDApOwpAQCAtMzY4LDcgKzM2OSw3IEBAIHZvaWQgVGltZXJCYXNlOjp1cGRh
dGVIZWFwSWZOZWVkZWQoZG91YmxlIG9sZFRpbWUpCiAKIHZvaWQgVGltZXJCYXNlOjpzZXROZXh0
RmlyZVRpbWUoZG91YmxlIG5ld1VuYWxpZ25lZFRpbWUpCiB7Ci0gICAgQVNTRVJUKG1fdGhyZWFk
ID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0
YUZvclRocmVhZChtX3RocmVhZCkpOwogICAgIEFTU0VSVCghbV93YXNEZWxldGVkKTsKIAogICAg
IGlmIChtX3VuYWxpZ25lZE5leHRGaXJlVGltZSAhPSBuZXdVbmFsaWduZWRUaW1lKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGltZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1RpbWVyLmgKaW5kZXggNjllOWVkNTI3MTcwZGQzNWM4M2QxNDhhZGI5MDFjZjc3MDA0
YzU4YS4uMTYxNGJkMTNhY2E1ZDI3NmEyNjFhNzQwYjk4YzQ1ZmE3ZTM1OTA3YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGltZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9UaW1lci5oCkBAIC0zMCw2ICszMCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5j
bHVkZSAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Ly8gVGltZSBpbnRlcnZhbHMgYXJlIGFsbCBpbiBzZWNvbmRzLgpAQCAtMTIwLDcgKzEyNCwxOCBA
QCBwcml2YXRlOgogCiBpbmxpbmUgYm9vbCBUaW1lckJhc2U6OmlzQWN0aXZlKCkgY29uc3QKIHsK
KyAgICAvLyBGSVhNRTogV3JpdGUgdGhpcyBpbiB0ZXJtcyBvZiBVU0UoV0VCX1RIUkVBRCkgaW5z
dGVhZCBvZiBQTEFURk9STShJT1MpLgorI2lmICFQTEFURk9STShJT1MpCiAgICAgQVNTRVJUKG1f
dGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisjZWxzZQorICAgIC8vIE9uIGlPUyB0aW1lcnMg
YXJlIGFsd2F5cyBydW4gb24gdGhlIG1haW4gdGhyZWFkIG9yIHRoZSBXZWIgVGhyZWFkLgorICAg
IC8vIFVubGVzcyB3ZSBoYXZlIHdvcmtlcnMgZW5hYmxlZCBpbiB3aGljaCBjYXNlIHRpbWVycyBj
YW4gcnVuIG9uIG90aGVyIHRocmVhZHMuCisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgQVNTRVJU
KFdlYlRocmVhZElzQ3VycmVudCgpIHx8IHB0aHJlYWRfbWFpbl9ucCgpIHx8IG1fdGhyZWFkID09
IGN1cnJlbnRUaHJlYWQoKSk7CisjZWxzZQorICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQo
KSB8fCBwdGhyZWFkX21haW5fbnAoKSk7CisjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShJT1Mp
CiAgICAgcmV0dXJuIG1fbmV4dEZpcmVUaW1lOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9VUkwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmNwcApp
bmRleCA1YjdjZDNhNTVhYTYwMzE2YWQ4OWJkNmEwNGM0ZmEwMDQzOGE2MWI2Li4zMzc4NzhlODFi
NjI5NGNjOTAwZTQyZjllMDg0Y2EwYjBhYTdmMThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9VUkwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5jcHAK
QEAgLTk4Niw5ICs5ODYsMjcgQEAgdm9pZCBVUkw6OnBhcnNlKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQogICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksICZzdHJpbmcpOwogfQogCisjaWYgUExBVEZPUk0o
SU9TKQorc3RhdGljIGJvb2wgc2hvdWxkQ2Fub25pY2FsaXplU2NoZW1lID0gdHJ1ZTsKKwordm9p
ZCBlbmFibGVVUkxTY2hlbWVDYW5vbmljYWxpemF0aW9uKGJvb2wgZW5hYmxlU2NoZW1lQ2Fub25p
Y2FsaXphdGlvbikKK3sKKyAgICBzaG91bGRDYW5vbmljYWxpemVTY2hlbWUgPSBlbmFibGVTY2hl
bWVDYW5vbmljYWxpemF0aW9uOworfQorI2VuZGlmCisKIHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+
CiBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgY2hhciogYSwgY29uc3QgY2hhciAoJmIp
W2xlbmd0aF0pCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmICghc2hvdWxkQ2Fub25pY2Fs
aXplU2NoZW1lKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIGlmICh0b0FTQ0lJTG93ZXIoYVtpXSkgIT0gYltpXSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorI2VuZGlmCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTI2Miw4ICsxMjgwLDE4IEBAIHZvaWQgVVJMOjpwYXJzZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0
IFN0cmluZyogb3JpZ2luYWxTdHJpbmcpCiAKICAgICAvLyBjb3B5IGluIHRoZSBzY2hlbWUKICAg
ICBjb25zdCBjaGFyICpzY2hlbWVFbmRQdHIgPSB1cmwgKyBzY2hlbWVFbmQ7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIGlmIChzaG91bGRDYW5vbmljYWxpemVTY2hlbWUgfHwgbV9wcm90b2NvbElz
SW5IVFRQRmFtaWx5KSB7CisgICAgICAgIHdoaWxlIChzdHJQdHIgPCBzY2hlbWVFbmRQdHIpCisg
ICAgICAgICAgICAqcCsrID0gdG9BU0NJSUxvd2VyKCpzdHJQdHIrKyk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgd2hpbGUgKHN0clB0ciA8IHNjaGVtZUVuZFB0cikKKyAgICAgICAgICAgICpwKysg
PSAqc3RyUHRyKys7CisgICAgfQorI2Vsc2UKICAgICB3aGlsZSAoc3RyUHRyIDwgc2NoZW1lRW5k
UHRyKQogICAgICAgICAqcCsrID0gdG9BU0NJSUxvd2VyKCpzdHJQdHIrKyk7CisjZW5kaWYKICAg
ICBtX3NjaGVtZUVuZCA9IHAgLSBidWZmZXIuZGF0YSgpOwogCiAgICAgYm9vbCBob3N0SXNMb2Nh
bEhvc3QgPSBwb3J0RW5kIC0gdXNlclN0YXJ0ID09IDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1VSTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmgKaW5kZXgg
YzEzMjllYjRjMjMyZjRhYjEwOGJiNzdkZjk4ZGIwYzI2NWIwYTQxNS4uNzEzYmRjZTkxODczZjBi
NWJhZDAyNDBiZDIyYTc1M2I2OTVlMjQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVVJMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmgKQEAgLTMzMiw2
ICszMzIsMTAgQEAgaW5saW5lIHVuc2lnbmVkIFVSTDo6cGF0aEFmdGVyTGFzdFNsYXNoKCkgY29u
c3QKICAgICByZXR1cm4gbV9wYXRoQWZ0ZXJMYXN0U2xhc2g7CiB9CiAKKyNpZiBQTEFURk9STShJ
T1MpCit2b2lkIGVuYWJsZVVSTFNjaGVtZUNhbm9uaWNhbGl6YXRpb24oYm9vbCk7CisjZW5kaWYK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vV2lkZ2V0LmgKaW5kZXggNDAwZjZlMGVmOTQ4YTlmNTdhNWVhZjBlMTk5NzU2ZmVhNDY4ZDdl
NS4uNjNiNjNmNTkxZGZlOTViYTAwZmI1Zjk4YmJkZDU2ZDUzZWRkY2Y3NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vV2lkZ2V0LmgKQEAgLTI3LDYgKzI3LDEyIEBACiAjaWZuZGVmIFdpZGdldF9oCiAjZGVm
aW5lIFdpZGdldF9oCiAKKyNpZiBQTEFURk9STShJT1MpCisjaWZuZGVmIE5TVmlldworI2RlZmlu
ZSBOU1ZpZXcgV0FLVmlldworI2VuZGlmCisjZW5kaWYKKwogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBA
IC0xOTAsNiArMTk2LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCByZW1vdmVGcm9tU3VwZXJ2aWV3
KCk7CiAjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBhZGRUb1N1cGVydmlldyhO
U1ZpZXcqKTsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oRUZMKQogICAgIHZvaWQgc2V0RXZhc09i
amVjdChFdmFzX09iamVjdCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3BwCmluZGV4IGY5MzI2ZWE5MjhhZWFj
NzJjOWUzZDhmMzI4ODNkODMyNzllMTQ0N2MuLmJlZGY4OGYwMDAzODdjOGIwZTE3ZjI4ZTA5Y2Ix
MmU5YjdhYjIxYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lv
cy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAKQEAgLTI5LDkgKzI5LDcgQEAKIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2lmIFBMQVRGT1JN
KElPUykKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBQTEFURk9STShJT1MpCiAKICNpbmNsdWRl
ICJBdWRpb0Rlc3RpbmF0aW9uSU9TLmgiCiAKQEAgLTI2Miw2ICsyNjAsNSBAQCB2b2lkIEF1ZGlv
RGVzdGluYXRpb25JT1M6OmZyYW1lU2l6ZUNoYW5nZWRQcm9jKHZvaWQgKmluUmVmQ29uLCBBdWRp
b1VuaXQsIEF1ZGlvVQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBQTEFU
Rk9STShJT1MpCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykgJiYgUExBVEZPUk0oSU9TKQog
Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5oCmluZGV4IGYwZWVlY2Ex
OTc4NmMyODRhZTYzNGI5YzdlYTkxNzI5ZDQ5MzM0MmQuLjhiNjhhNmFjODM0ZTViNjgxNWJiYTJj
ODAwNDE1MDgzZTk0MjlkMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuaApAQCAtNzYsMyArNzYsNCBAQCBwcml2
YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQXVkaW9EZXN0aW5hdGlv
bklPU19oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9B
dWRpb0ZpbGVSZWFkZXJJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9z
L0F1ZGlvRmlsZVJlYWRlcklPUy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmI4NTlmYjZiNjQ2YzQ0ZjI1ZTgx
YzMyZjE5OWFhZDhkYzA4NzBmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuY3BwCkBAIC0wLDAgKzEsMjQ4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXJJT1MuaCIKKwor
I2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkF1ZGlv
QnVzLmgiCisjaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyLmgiCisjaW5jbHVkZSAiU29mdExpbmtp
bmcuaCIKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2luY2x1
ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KworU09GVF9MSU5LX0ZSQU1FV09SSyhBdWRpb1Rvb2xib3gpCitTT0ZUX0xJTksoQXVkaW9Ub29s
Ym94LCBBdWRpb0ZpbGVDbG9zZSwgT1NTdGF0dXMsIChBdWRpb0ZpbGVJRCBpbkF1ZGlvRmlsZSks
IChpbkF1ZGlvRmlsZSkpCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0ZpbGVPcGVuV2l0
aENhbGxiYWNrcywgT1NTdGF0dXMsICh2b2lkICppbkNsaWVudERhdGEsIEF1ZGlvRmlsZV9SZWFk
UHJvYyBpblJlYWRGdW5jLCBBdWRpb0ZpbGVfV3JpdGVQcm9jIGluV3JpdGVGdW5jLCBBdWRpb0Zp
bGVfR2V0U2l6ZVByb2MgaW5HZXRTaXplRnVuYywgQXVkaW9GaWxlX1NldFNpemVQcm9jIGluU2V0
U2l6ZUZ1bmMsIEF1ZGlvRmlsZVR5cGVJRCBpbkZpbGVUeXBlSGludCwgQXVkaW9GaWxlSUQgKm91
dEF1ZGlvRmlsZSksIChpbkNsaWVudERhdGEsIGluUmVhZEZ1bmMsIGluV3JpdGVGdW5jLCBpbkdl
dFNpemVGdW5jLCBpblNldFNpemVGdW5jLCBpbkZpbGVUeXBlSGludCwgb3V0QXVkaW9GaWxlKSkK
K1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlvRmlsZURpc3Bvc2UsIE9TU3RhdHVzLCAo
RXh0QXVkaW9GaWxlUmVmIGluRXh0QXVkaW9GaWxlKSwgKGluRXh0QXVkaW9GaWxlKSkKK1NPRlRf
TElOSyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlvRmlsZUdldFByb3BlcnR5LCBPU1N0YXR1cywgKEV4
dEF1ZGlvRmlsZVJlZiBpbkV4dEF1ZGlvRmlsZSwgRXh0QXVkaW9GaWxlUHJvcGVydHlJRCBpblBy
b3BlcnR5SUQsIFVJbnQzMiAqaW9Qcm9wZXJ0eURhdGFTaXplLCB2b2lkICpvdXRQcm9wZXJ0eURh
dGEpLCAoaW5FeHRBdWRpb0ZpbGUsIGluUHJvcGVydHlJRCwgaW9Qcm9wZXJ0eURhdGFTaXplLCBv
dXRQcm9wZXJ0eURhdGEpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlUmVh
ZCwgT1NTdGF0dXMsIChFeHRBdWRpb0ZpbGVSZWYgaW5FeHRBdWRpb0ZpbGUsIFVJbnQzMiAqaW9O
dW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCAqaW9EYXRhKSwgKGluRXh0QXVkaW9GaWxlLCBp
b051bWJlckZyYW1lcywgaW9EYXRhKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlv
RmlsZVNldFByb3BlcnR5LCBPU1N0YXR1cywgKEV4dEF1ZGlvRmlsZVJlZiBpbkV4dEF1ZGlvRmls
ZSwgRXh0QXVkaW9GaWxlUHJvcGVydHlJRCBpblByb3BlcnR5SUQsIFVJbnQzMiBpblByb3BlcnR5
RGF0YVNpemUsIGNvbnN0IHZvaWQgKmluUHJvcGVydHlEYXRhKSwgKGluRXh0QXVkaW9GaWxlLCBp
blByb3BlcnR5SUQsIGluUHJvcGVydHlEYXRhU2l6ZSwgaW5Qcm9wZXJ0eURhdGEpKQorU09GVF9M
SU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlV3JhcEF1ZGlvRmlsZUlELCBPU1N0YXR1cywg
KEF1ZGlvRmlsZUlEIGluRmlsZUlELCBCb29sZWFuIGluRm9yV3JpdGluZywgRXh0QXVkaW9GaWxl
UmVmICpvdXRFeHRBdWRpb0ZpbGUpLCAoaW5GaWxlSUQsIGluRm9yV3JpdGluZywgb3V0RXh0QXVk
aW9GaWxlKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlvRmlsZU9wZW5VUkwsIE9T
U3RhdHVzLCAoQ0ZVUkxSZWYgaW5VUkwsIEV4dEF1ZGlvRmlsZVJlZiogb3V0RXh0QXVkaW9GaWxl
KSwgKGluVVJMLCBvdXRFeHRBdWRpb0ZpbGUpKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gQXVkaW9CdWZmZXJMaXN0KiBjcmVhdGVBdWRpb0J1ZmZl
ckxpc3Qoc2l6ZV90IG51bWJlck9mQnVmZmVycykKK3sKKyAgICBDaGVja2VkPHNpemVfdCwgUmVj
b3JkT3ZlcmZsb3c+IGJ1ZmZlckxpc3RTaXplID0gc2l6ZW9mKEF1ZGlvQnVmZmVyTGlzdCkgLSBz
aXplb2YoQXVkaW9CdWZmZXIpOworICAgIGJ1ZmZlckxpc3RTaXplICs9IG51bWJlck9mQnVmZmVy
cyAqIHNpemVvZihBdWRpb0J1ZmZlcik7CisKKyAgICBBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxp
c3QgPSBzdGF0aWNfY2FzdDxBdWRpb0J1ZmZlckxpc3QqPihjYWxsb2MoMSwgYnVmZmVyTGlzdFNp
emUudW5zYWZlR2V0KCkpKTsKKyAgICBpZiAoYnVmZmVyTGlzdCkKKyAgICAgICAgYnVmZmVyTGlz
dC0+bU51bWJlckJ1ZmZlcnMgPSBudW1iZXJPZkJ1ZmZlcnM7CisgICAgcmV0dXJuIGJ1ZmZlckxp
c3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95QXVkaW9CdWZmZXJMaXN0KEF1ZGlv
QnVmZmVyTGlzdCogYnVmZmVyTGlzdCkKK3sKKyAgICBmcmVlKGJ1ZmZlckxpc3QpOworfQorCitB
dWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcihjb25zdCBjaGFyKiBmaWxlUGF0aCkKKyAg
ICA6IG1fZGF0YSgwKQorICAgICwgbV9kYXRhU2l6ZSgwKQorICAgICwgbV9hdWRpb0ZpbGVJRCgw
KQorICAgICwgbV9leHRBdWRpb0ZpbGVSZWYobnVsbHB0cikKK3sKKyAgICBSZXRhaW5QdHI8Q0ZV
UkxSZWY+IHVybFJlZiA9IGFkb3B0Q0YoQ0ZVUkxDcmVhdGVGcm9tRmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uKGtDRkFsbG9jYXRvckRlZmF1bHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgq
PihmaWxlUGF0aCksIHN0cmxlbihmaWxlUGF0aCksIGZhbHNlKSk7CisgICAgaWYgKCF1cmxSZWYp
CisgICAgICAgIHJldHVybjsKKyAgICBFeHRBdWRpb0ZpbGVPcGVuVVJMKHVybFJlZi5nZXQoKSwg
Jm1fZXh0QXVkaW9GaWxlUmVmKTsKK30KKworQXVkaW9GaWxlUmVhZGVyOjpBdWRpb0ZpbGVSZWFk
ZXIoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQorICAgIDogbV9kYXRhKGRhdGEp
CisgICAgLCBtX2RhdGFTaXplKGRhdGFTaXplKQorICAgICwgbV9hdWRpb0ZpbGVJRCgwKQorICAg
ICwgbV9leHRBdWRpb0ZpbGVSZWYobnVsbHB0cikKK3sKKyAgICBpZiAoQXVkaW9GaWxlT3Blbldp
dGhDYWxsYmFja3ModGhpcywgcmVhZFByb2MsIDAsIGdldFNpemVQcm9jLCAwLCAwLCAmbV9hdWRp
b0ZpbGVJRCkgIT0gbm9FcnIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChFeHRBdWRpb0Zp
bGVXcmFwQXVkaW9GaWxlSUQobV9hdWRpb0ZpbGVJRCwgZmFsc2UsICZtX2V4dEF1ZGlvRmlsZVJl
ZikgIT0gbm9FcnIpCisgICAgICAgIG1fZXh0QXVkaW9GaWxlUmVmID0gbnVsbHB0cjsKK30KKwor
QXVkaW9GaWxlUmVhZGVyOjp+QXVkaW9GaWxlUmVhZGVyKCkKK3sKKyAgICBpZiAobV9leHRBdWRp
b0ZpbGVSZWYpCisgICAgICAgIEV4dEF1ZGlvRmlsZURpc3Bvc2UobV9leHRBdWRpb0ZpbGVSZWYp
OworCisgICAgbV9leHRBdWRpb0ZpbGVSZWYgPSBudWxscHRyOworCisgICAgaWYgKG1fYXVkaW9G
aWxlSUQpCisgICAgICAgIEF1ZGlvRmlsZUNsb3NlKG1fYXVkaW9GaWxlSUQpOworCisgICAgbV9h
dWRpb0ZpbGVJRCA9IDA7Cit9CisKK09TU3RhdHVzIEF1ZGlvRmlsZVJlYWRlcjo6cmVhZFByb2Mo
dm9pZCogY2xpZW50RGF0YSwgU0ludDY0IHBvc2l0aW9uLCBVSW50MzIgcmVxdWVzdENvdW50LCB2
b2lkKiBidWZmZXIsIFVJbnQzMiogYWN0dWFsQ291bnQpCit7CisgICAgQXVkaW9GaWxlUmVhZGVy
KiBhdWRpb0ZpbGVSZWFkZXIgPSBzdGF0aWNfY2FzdDxBdWRpb0ZpbGVSZWFkZXIqPihjbGllbnRE
YXRhKTsKKworICAgIHNpemVfdCBkYXRhU2l6ZSA9IGF1ZGlvRmlsZVJlYWRlci0+ZGF0YVNpemUo
KTsKKyAgICBjb25zdCB2b2lkKiBkYXRhID0gYXVkaW9GaWxlUmVhZGVyLT5kYXRhKCk7CisgICAg
c2l6ZV90IGJ5dGVzVG9SZWFkID0gMDsKKworICAgIGlmIChzdGF0aWNfY2FzdDxVSW50NjQ+KHBv
c2l0aW9uKSA8IGRhdGFTaXplKSB7CisgICAgICAgIHNpemVfdCBieXRlc0F2YWlsYWJsZSA9IGRh
dGFTaXplIC0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihwb3NpdGlvbik7CisgICAgICAgIGJ5dGVzVG9S
ZWFkID0gcmVxdWVzdENvdW50IDw9IGJ5dGVzQXZhaWxhYmxlID8gcmVxdWVzdENvdW50IDogYnl0
ZXNBdmFpbGFibGU7CisgICAgICAgIG1lbWNweShidWZmZXIsIHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihkYXRhKSArIHBvc2l0aW9uLCBieXRlc1RvUmVhZCk7CisgICAgfQorCisgICAgaWYgKGFj
dHVhbENvdW50KQorICAgICAgICAqYWN0dWFsQ291bnQgPSBieXRlc1RvUmVhZDsKKworICAgIHJl
dHVybiBub0VycjsKK30KKworU0ludDY0IEF1ZGlvRmlsZVJlYWRlcjo6Z2V0U2l6ZVByb2Modm9p
ZCogY2xpZW50RGF0YSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXVkaW9GaWxlUmVhZGVy
Kj4oY2xpZW50RGF0YSktPmRhdGFTaXplKCk7Cit9CisKK1Bhc3NSZWZQdHI8QXVkaW9CdXM+IEF1
ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25v
KQoreworICAgIGlmICghbV9leHRBdWRpb0ZpbGVSZWYpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgLy8gR2V0IGZpbGUncyBkYXRhIGZvcm1hdAorICAgIFVJbnQzMiBzaXplID0gc2l6
ZW9mKG1fZmlsZURhdGFGb3JtYXQpOworICAgIGlmIChFeHRBdWRpb0ZpbGVHZXRQcm9wZXJ0eSht
X2V4dEF1ZGlvRmlsZVJlZiwga0V4dEF1ZGlvRmlsZVByb3BlcnR5X0ZpbGVEYXRhRm9ybWF0LCAm
c2l6ZSwgJm1fZmlsZURhdGFGb3JtYXQpICE9IG5vRXJyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzID0gbV9maWxlRGF0YUZvcm1hdC5tQ2hh
bm5lbHNQZXJGcmFtZTsKKworICAgIC8vIE51bWJlciBvZiBmcmFtZXMKKyAgICBTSW50NjQgbnVt
YmVyT2ZGcmFtZXM2NCA9IDA7CisgICAgc2l6ZSA9IHNpemVvZihudW1iZXJPZkZyYW1lczY0KTsK
KyAgICBpZiAoRXh0QXVkaW9GaWxlR2V0UHJvcGVydHkobV9leHRBdWRpb0ZpbGVSZWYsIGtFeHRB
dWRpb0ZpbGVQcm9wZXJ0eV9GaWxlTGVuZ3RoRnJhbWVzLCAmc2l6ZSwgJm51bWJlck9mRnJhbWVz
NjQpICE9IG5vRXJyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGRvdWJsZSBmaWxl
U2FtcGxlUmF0ZSA9IG1fZmlsZURhdGFGb3JtYXQubVNhbXBsZVJhdGU7CisKKyAgICAvLyBNYWtl
IGNsaWVudCBmb3JtYXQgc2FtZSBudW1iZXIgb2YgY2hhbm5lbHMgYXMgZmlsZSBmb3JtYXQsIGJ1
dCB0d2VhayBhIGZldyB0aGluZ3MuCisgICAgLy8gQ2xpZW50IGZvcm1hdCB3aWxsIGJlIGxpbmVh
ciBQQ00gKGNhbm9uaWNhbCksIGFuZCBwb3RlbnRpYWxseSBjaGFuZ2Ugc2FtcGxlLXJhdGUuCisg
ICAgbV9jbGllbnREYXRhRm9ybWF0ID0gbV9maWxlRGF0YUZvcm1hdDsKKworICAgIGNvbnN0IGlu
dCBieXRlc1BlckZsb2F0ID0gc2l6ZW9mKEZsb2F0MzIpOworICAgIGNvbnN0IGludCBiaXRzUGVy
Qnl0ZSA9IDg7CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1h
dExpbmVhclBDTTsKKyAgICBtX2NsaWVudERhdGFGb3JtYXQubUZvcm1hdEZsYWdzID0ga0F1ZGlv
Rm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVy
bGVhdmVkOworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBieXRlc1Bl
ckZsb2F0OworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tRnJhbWVzUGVyUGFja2V0ID0gMTsKKyAg
ICBtX2NsaWVudERhdGFGb3JtYXQubUJ5dGVzUGVyRnJhbWUgPSBieXRlc1BlckZsb2F0OworICAg
IG1fY2xpZW50RGF0YUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZSA9IG51bWJlck9mQ2hhbm5lbHM7
CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1CaXRzUGVyQ2hhbm5lbCA9IGJpdHNQZXJCeXRlICog
Ynl0ZXNQZXJGbG9hdDsKKworICAgIGlmIChzYW1wbGVSYXRlKQorICAgICAgICBtX2NsaWVudERh
dGFGb3JtYXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOworCisgICAgaWYgKEV4dEF1ZGlvRmls
ZVNldFByb3BlcnR5KG1fZXh0QXVkaW9GaWxlUmVmLCBrRXh0QXVkaW9GaWxlUHJvcGVydHlfQ2xp
ZW50RGF0YUZvcm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiksICZtX2Ns
aWVudERhdGFGb3JtYXQpICE9IG5vRXJyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IC8vIENoYW5nZSBudW1iZXJPZkZyYW1lczY0IHRvIGRlc3RpbmF0aW9uIHNhbXBsZS1yYXRlCisg
ICAgbnVtYmVyT2ZGcmFtZXM2NCA9IG51bWJlck9mRnJhbWVzNjQgKiAobV9jbGllbnREYXRhRm9y
bWF0Lm1TYW1wbGVSYXRlIC8gZmlsZVNhbXBsZVJhdGUpOworICAgIHNpemVfdCBudW1iZXJPZkZy
YW1lcyA9IHN0YXRpY19jYXN0PHNpemVfdD4obnVtYmVyT2ZGcmFtZXM2NCk7CisKKyAgICBzaXpl
X3QgYnVzQ2hhbm5lbENvdW50ID0gbWl4VG9Nb25vID8gMSA6IG51bWJlck9mQ2hhbm5lbHM7CisK
KyAgICAvLyBDcmVhdGUgQXVkaW9CdXMgd2hlcmUgd2UnbGwgcHV0IHRoZSBQQ00gYXVkaW8gZGF0
YQorICAgIFJlZlB0cjxBdWRpb0J1cz4gYXVkaW9CdXMgPSBBdWRpb0J1czo6Y3JlYXRlKGJ1c0No
YW5uZWxDb3VudCwgbnVtYmVyT2ZGcmFtZXMpOworICAgIGF1ZGlvQnVzLT5zZXRTYW1wbGVSYXRl
KG1fY2xpZW50RGF0YUZvcm1hdC5tU2FtcGxlUmF0ZSk7IC8vIHNhdmUgZm9yIGxhdGVyCisKKyAg
ICAvLyBPbmx5IGFsbG9jYXRlZCBpbiB0aGUgbWl4VG9Nb25vIGNhc2U7IGRlYWxsb2NhdGVkIG9u
IGRlc3RydWN0aW9uLgorICAgIEF1ZGlvRmxvYXRBcnJheSBsZWZ0Q2hhbm5lbDsKKyAgICBBdWRp
b0Zsb2F0QXJyYXkgcmlnaHRDaGFubmVsOworCisgICAgQXVkaW9CdWZmZXJMaXN0KiBidWZmZXJM
aXN0ID0gY3JlYXRlQXVkaW9CdWZmZXJMaXN0KG51bWJlck9mQ2hhbm5lbHMpOworICAgIGlmICgh
YnVmZmVyTGlzdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY29uc3Qgc2l6ZV90IGJ1
ZmZlclNpemUgPSBudW1iZXJPZkZyYW1lcyAqIHNpemVvZihmbG9hdCk7CisKKyAgICBpZiAobWl4
VG9Nb25vICYmIG51bWJlck9mQ2hhbm5lbHMgPT0gMikgeworICAgICAgICBsZWZ0Q2hhbm5lbC5h
bGxvY2F0ZShudW1iZXJPZkZyYW1lcyk7CisgICAgICAgIHJpZ2h0Q2hhbm5lbC5hbGxvY2F0ZShu
dW1iZXJPZkZyYW1lcyk7CisKKyAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMF0ubU51bWJl
ckNoYW5uZWxzID0gMTsKKyAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMF0ubURhdGFCeXRl
U2l6ZSA9IGJ1ZmZlclNpemU7CisgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzBdLm1EYXRh
ID0gbGVmdENoYW5uZWwuZGF0YSgpOworCisgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzFd
Lm1OdW1iZXJDaGFubmVscyA9IDE7CisgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1E
YXRhQnl0ZVNpemUgPSBidWZmZXJTaXplOworICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1sx
XS5tRGF0YSA9IHJpZ2h0Q2hhbm5lbC5kYXRhKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNT
RVJUKCFtaXhUb01vbm8gfHwgbnVtYmVyT2ZDaGFubmVscyA9PSAxKTsKKworICAgICAgICAvLyBG
b3IgVHJ1ZS1zdGVyZW8gKG51bWJlck9mQ2hhbm5lbHMgPT0gNCkKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgICAgIGF1ZGlv
QnVzLT5jaGFubmVsKGkpLT56ZXJvKCk7CisgICAgICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVy
c1tpXS5tTnVtYmVyQ2hhbm5lbHMgPSAxOworICAgICAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZl
cnNbaV0ubURhdGFCeXRlU2l6ZSA9IGJ1ZmZlclNpemU7CisgICAgICAgICAgICBidWZmZXJMaXN0
LT5tQnVmZmVyc1tpXS5tRGF0YSA9IGF1ZGlvQnVzLT5jaGFubmVsKGkpLT5tdXRhYmxlRGF0YSgp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmVhZCBmcm9tIHRoZSBmaWxlIChvciBpbi1t
ZW1vcnkgdmVyc2lvbikKKyAgICBVSW50MzIgZnJhbWVzVG9SZWFkID0gbnVtYmVyT2ZGcmFtZXM7
CisgICAgaWYgKEV4dEF1ZGlvRmlsZVJlYWQobV9leHRBdWRpb0ZpbGVSZWYsICZmcmFtZXNUb1Jl
YWQsIGJ1ZmZlckxpc3QpICE9IG5vRXJyKSB7CisgICAgICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxp
c3QoYnVmZmVyTGlzdCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlm
IChtaXhUb01vbm8gJiYgbnVtYmVyT2ZDaGFubmVscyA9PSAyKSB7CisgICAgICAgIC8vIE1peCBz
dGVyZW8gZG93biB0byBtb25vCisgICAgICAgIGZsb2F0KiBkZXN0TCA9IGF1ZGlvQnVzLT5jaGFu
bmVsKDApLT5tdXRhYmxlRGF0YSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bWJlck9mRnJhbWVzOyArK2kpCisgICAgICAgICAgICBkZXN0TFtpXSA9IDAuNWYgKiAobGVmdENo
YW5uZWxbaV0gKyByaWdodENoYW5uZWxbaV0pOworICAgIH0KKworICAgIGRlc3Ryb3lBdWRpb0J1
ZmZlckxpc3QoYnVmZmVyTGlzdCk7CisKKyAgICByZXR1cm4gYXVkaW9CdXMucmVsZWFzZSgpOwor
fQorCitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKGNvbnN0IGNo
YXIqIGZpbGVQYXRoLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAgICBB
dWRpb0ZpbGVSZWFkZXIgcmVhZGVyKGZpbGVQYXRoKTsKKyAgICByZXR1cm4gcmVhZGVyLmNyZWF0
ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOworfQorCitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBj
cmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRh
dGFTaXplLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAgICBBdWRpb0Zp
bGVSZWFkZXIgcmVhZGVyKGRhdGEsIGRhdGFTaXplKTsKKyAgICByZXR1cm4gcmVhZGVyLmNyZWF0
ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOworfQorCit9IC8vIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShXRUJfQVVESU8pICYmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lZWY1NjkzM2VmZDdlYTg3YWQ1YmNlZTk3ODNhMDM2YTA2OTY4OTk3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRl
cklPUy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb0ZpbGVSZWFkZXJJT1NfaAorI2Rl
ZmluZSBBdWRpb0ZpbGVSZWFkZXJJT1NfaAorCisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0F1ZGlv
RmlsZS5oPgorI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9FeHRlbmRlZEF1ZGlvRmlsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
QXVkaW9CdXM7CisKKy8vIFdyYXBwZXIgY2xhc3MgZm9yIEF1ZGlvRmlsZSBhbmQgRXh0QXVkaW9G
aWxlIENvcmVBdWRpbyBBUElzIGZvciByZWFkaW5nIGZpbGVzIGFuZCBpbi1tZW1vcnkgdmVyc2lv
bnMgb2YgdGhlbS4uLgorCitjbGFzcyBBdWRpb0ZpbGVSZWFkZXIgeworcHVibGljOgorICAgIEF1
ZGlvRmlsZVJlYWRlcihjb25zdCBjaGFyKiBmaWxlUGF0aCk7CisgICAgQXVkaW9GaWxlUmVhZGVy
KGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSk7CisgICAgfkF1ZGlvRmlsZVJlYWRl
cigpOworCisgICAgUGFzc1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJh
dGUsIGJvb2wgbWl4VG9Nb25vKTsgLy8gUmV0dXJucyBudWxscHRyIG9uIGVycm9yCisKKyAgICBj
b25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgc2l6ZV90IGRh
dGFTaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhU2l6ZTsgfQorCitwcml2YXRlOgorICAgIHN0
YXRpYyBPU1N0YXR1cyByZWFkUHJvYyh2b2lkKiBjbGllbnREYXRhLCBTSW50NjQgcG9zaXRpb24s
IFVJbnQzMiByZXF1ZXN0Q291bnQsIHZvaWQqIGJ1ZmZlciwgVUludDMyKiBhY3R1YWxDb3VudCk7
CisgICAgc3RhdGljIFNJbnQ2NCBnZXRTaXplUHJvYyh2b2lkKiBjbGllbnREYXRhKTsKKworICAg
IGNvbnN0IHZvaWQqIG1fZGF0YTsKKyAgICBzaXplX3QgbV9kYXRhU2l6ZTsKKworICAgIEF1ZGlv
RmlsZUlEIG1fYXVkaW9GaWxlSUQ7CisgICAgRXh0QXVkaW9GaWxlUmVmIG1fZXh0QXVkaW9GaWxl
UmVmOworCisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIG1fZmlsZURhdGFGb3JtYXQ7
CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIG1fY2xpZW50RGF0YUZvcm1hdDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvRmlsZVJlYWRlcklP
U19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9T
ZXNzaW9uSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvU2Vz
c2lvbklPUy5tbQppbmRleCA3OWUyNjFhYTBmOGE0Yjg3NWNmNGNlNTI5ZmUzNTQ2NWI4NDMyYjc5
Li4zNDljMWY1ZDgzOTNjNTNlZDQ4MDg5ZmM4ZTRkYTE1YTNkODE2OGNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9TZXNzaW9uSU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb1Nlc3Npb25JT1MubW0KQEAg
LTQyLDcgKzQyLDYgQEAgU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vz
c2lvbkNhdGVnb3J5UGxheWJhY2ssIE5TU3RyaW5nICopCiBTT0ZUX0xJTktfUE9JTlRFUihBVkZv
dW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlSZWNvcmQsIE5TU3RyaW5nICopCiBTT0ZU
X0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlQbGF5QW5k
UmVjb3JkLCBOU1N0cmluZyAqKQogU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1
ZGlvU2Vzc2lvbkNhdGVnb3J5QXVkaW9Qcm9jZXNzaW5nLCBOU1N0cmluZyAqKQotU09GVF9MSU5L
X1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNh
dGlvbiwgTlNTdHJpbmcgKikKIFNPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZBdWRp
b1Nlc3Npb25JbnRlcnJ1cHRpb25UeXBlS2V5LCBOU1N0cmluZyAqKQogCiAjZGVmaW5lIEFWQXVk
aW9TZXNzaW9uIGdldEFWQXVkaW9TZXNzaW9uQ2xhc3MoKQpAQCAtNTIsOSArNTEsMTQgQEAgU09G
VF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5
cGVLZXksIE5TU3RyaW5nICopCiAjZGVmaW5lIEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlSZWNvcmQg
Z2V0QVZBdWRpb1Nlc3Npb25DYXRlZ29yeVJlY29yZCgpCiAjZGVmaW5lIEFWQXVkaW9TZXNzaW9u
Q2F0ZWdvcnlQbGF5QW5kUmVjb3JkIGdldEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlQbGF5QW5kUmVj
b3JkKCkKICNkZWZpbmUgQVZBdWRpb1Nlc3Npb25DYXRlZ29yeUF1ZGlvUHJvY2Vzc2luZyBnZXRB
VkF1ZGlvU2Vzc2lvbkNhdGVnb3J5QXVkaW9Qcm9jZXNzaW5nKCkKLSNkZWZpbmUgQVZBdWRpb1Nl
c3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24gZ2V0QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRp
b25Ob3RpZmljYXRpb24oKQogI2RlZmluZSBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVL
ZXkgZ2V0QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25UeXBlS2V5KCkKIAorc3RhdGljIE5TU3Ry
aW5nICogY29uc3QgV0NBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiA9IEAi
QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24iOworCisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbklu
dGVycnVwdGlvbk5vdGlmaWNhdGlvbiwgTlNTdHJpbmcgKikKKyNlbmRpZgorCiBAaW50ZXJmYWNl
IFdlYkF1ZGlvU2Vzc2lvbkhlbHBlciA6IE5TT2JqZWN0IHsKICAgICBXZWJDb3JlOjpBdWRpb1Nl
c3Npb24qIF9jYWxsYmFjazsKIH0KQEAgLTcxLDE5ICs3NSwyNSBAQCBTT0ZUX0xJTktfUE9JTlRF
UihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uVHlwZUtleSwgTlNTdHJp
bmcgKikKIAogICAgIF9jYWxsYmFjayA9IGNhbGxiYWNrOwogCi0gICAgW1tOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rv
cihpbnRlcnJ1cHRpb246KSBuYW1lOkFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uTm90aWZpY2F0
aW9uIG9iamVjdDpbQVZBdWRpb1Nlc3Npb24gc2hhcmVkSW5zdGFuY2VdXTsKKyAgICBBU1NFUlQo
W1dDQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24gaXNFcXVhbFRvU3RyaW5n
OmdldEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uTm90aWZpY2F0aW9uKCldKTsKKworICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IoaW50ZXJydXB0aW9uOikgbmFtZTpXQ0FWQXVkaW9TZXNzaW9uSW50ZXJy
dXB0aW9uTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwogCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAK
IC0gKHZvaWQpZGVhbGxvYwogewotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6V0NBVkF1ZGlvU2Vzc2lvbklu
dGVycnVwdGlvbk5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKICAgICBbc3VwZXIgZGVhbGxvY107
CiB9CiAKIC0gKHZvaWQpaW50ZXJydXB0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgogeworICAgIEFTU0VSVChbQVZBdWRpb1Nlc3Npb24gc2hhcmVkSW5zdGFuY2VdID09IFtub3Rp
ZmljYXRpb24gb2JqZWN0XSk7CisgICAgaWYgKFtBVkF1ZGlvU2Vzc2lvbiBzaGFyZWRJbnN0YW5j
ZV0gIT0gW25vdGlmaWNhdGlvbiBvYmplY3RdKQorICAgICAgICByZXR1cm47CisKICAgICBOU1VJ
bnRlZ2VyIHR5cGUgPSBbW1tub3RpZmljYXRpb24gdXNlckluZm9dIG9iamVjdEZvcktleTpBVkF1
ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXldIHVuc2lnbmVkSW50ZWdlclZhbHVlXTsKICAg
ICBpZiAodHlwZSA9PSBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVCZWdhbikKICAgICAg
ICAgX2NhbGxiYWNrLT5iZWdhbkF1ZGlvSW50ZXJydXB0aW9uKCk7CkBAIC0xMzMsMTkgKzE0Mywy
NiBAQCB2b2lkIEF1ZGlvU2Vzc2lvbjo6c2V0Q2F0ZWdvcnkoQ2F0ZWdvcnlUeXBlIG5ld0NhdGVn
b3J5KQogICAgIHN3aXRjaCAobmV3Q2F0ZWdvcnkpIHsKICAgICBjYXNlIEFtYmllbnRTb3VuZDoK
ICAgICAgICAgY2F0ZWdvcnlTdHJpbmcgPSBBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5QW1iaWVudDsK
KyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTb2xvQW1iaWVudFNvdW5kOgogICAgICAgICBjYXRl
Z29yeVN0cmluZyA9IEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlTb2xvQW1iaWVudDsKKyAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBNZWRpYVBsYXliYWNrOgogICAgICAgICBjYXRlZ29yeVN0cmluZyA9
IEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlQbGF5YmFjazsKKyAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBSZWNvcmRBdWRpbzoKICAgICAgICAgY2F0ZWdvcnlTdHJpbmcgPSBBVkF1ZGlvU2Vzc2lvbkNh
dGVnb3J5UmVjb3JkOworICAgICAgICBicmVhazsKICAgICBjYXNlIFBsYXlBbmRSZWNvcmQ6CiAg
ICAgICAgIGNhdGVnb3J5U3RyaW5nID0gQVZBdWRpb1Nlc3Npb25DYXRlZ29yeVBsYXlBbmRSZWNv
cmQ7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQXVkaW9Qcm9jZXNzaW5nOgogICAgICAgICBj
YXRlZ29yeVN0cmluZyA9IEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlBdWRpb1Byb2Nlc3Npbmc7Cisg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9uZToKICAgICBkZWZhdWx0OgogICAgICAgICBjYXRl
Z29yeVN0cmluZyA9IG5pbDsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIE5TRXJyb3IgKmVy
cm9yID0gbmlsOwogICAgIFtbQVZBdWRpb1Nlc3Npb24gc2hhcmVkSW5zdGFuY2VdIHNldENhdGVn
b3J5OmNhdGVnb3J5U3RyaW5nIGVycm9yOiZlcnJvcl07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHAKaW5kZXgg
YjBlZGE4MTVlM2M1OTc0ZDVjYWNjMjc2NGIwNzJmYTZiODhkNjUzMS4uM2M3NmNmNTM0ZTk2MjVk
M2EwOWUxZDY1NGMwZTMwYmI2ZjkxZmQ3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcApAQCAtMzAsNiAr
MzAsOCBAQAogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKIAorI2lmIFBMQVRGT1JNKE1BQykgJiYg
IVBMQVRGT1JNKElPUykKKwogI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25NYWMuaCIKIAogI2lu
Y2x1ZGUgIkF1ZGlvSU9DYWxsYmFjay5oIgpAQCAtMTgxLDQgKzE4Myw2IEBAIE9TU3RhdHVzIEF1
ZGlvRGVzdGluYXRpb25NYWM6OmlucHV0UHJvYyh2b2lkKiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVu
ZGVyQWN0aW9uRmxhCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKKwogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxl
UmVhZGVyTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Zp
bGVSZWFkZXJNYWMuY3BwCmluZGV4IGVkMmVkNTVhOWUyOTBiNzgxNmY2YzNlNGEyMWZiYTc3OWEy
ODdmN2MuLjdkMjU5NGM2NDkyYjUyNTZjZjcxOTY4YTdlNmI1NWNjNTQ1YjEyY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFk
ZXJNYWMuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQogCisj
aWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQorCiAjaW5jbHVkZSAiQXVkaW9GaWxl
UmVhZGVyTWFjLmgiCiAKICNpbmNsdWRlICJBdWRpb0J1cy5oIgpAQCAtNTgsNyArNjAsNyBAQCBz
dGF0aWMgdm9pZCBkZXN0cm95QXVkaW9CdWZmZXJMaXN0KEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVy
TGlzdCkKIH0KIAogQXVkaW9GaWxlUmVhZGVyOjpBdWRpb0ZpbGVSZWFkZXIoY29uc3QgY2hhciog
ZmlsZVBhdGgpCi0gICAgOiBtX2RhdGEoMCkKKyAgICA6IG1fZGF0YShudWxscHRyKQogICAgICwg
bV9kYXRhU2l6ZSgwKQogICAgICwgbV9hdWRpb0ZpbGVJRCgwKQogICAgICwgbV9leHRBdWRpb0Zp
bGVSZWYoMCkKQEAgLTIzNywxNiArMjM5LDE2IEBAIFBhc3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlv
RmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vCiAK
IFBhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUoY29uc3QgY2hhciog
ZmlsZVBhdGgsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQogewotICAgIEF1ZGlv
RmlsZVJlYWRlciByZWFkZXIoZmlsZVBhdGgpOwotICAgIHJldHVybiByZWFkZXIuY3JlYXRlQnVz
KHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CisgICAgcmV0dXJuIEF1ZGlvRmlsZVJlYWRlcihmaWxl
UGF0aCkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CiB9CiAKIFBhc3NSZWZQdHI8
QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRh
LCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQogewot
ICAgIEF1ZGlvRmlsZVJlYWRlciByZWFkZXIoZGF0YSwgZGF0YVNpemUpOwotICAgIHJldHVybiBy
ZWFkZXIuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CisgICAgcmV0dXJuIEF1ZGlv
RmlsZVJlYWRlcihkYXRhLCBkYXRhU2l6ZSkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9u
byk7CiB9CiAKLX0gLy8gV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9B
dWRpb1Nlc3Npb25NYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1
ZGlvU2Vzc2lvbk1hYy5jcHAKaW5kZXggNzc4ODQ3MmNmNGZiZTNmMGEzMjdiMWM2OTg2MmYyNjI1
ZTFhNTllZS4uMzVlMjhhYjE4ZjU5M2Y4NjlmMTY5ODhhN2I3MDBhYWY3MWRmZDEyOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2Vzc2lvbk1h
Yy5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJB
dWRpb1Nlc3Npb24uaCIKIAotI2lmIFVTRShBVURJT19TRVNTSU9OKSAmJiBQTEFURk9STShNQUMp
CisjaWYgVVNFKEFVRElPX1NFU1NJT04pICYmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElP
UykKIAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9NZWRpYVNlc3Np
b25NYW5hZ2VyTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9NZWRp
YVNlc3Npb25NYW5hZ2VyTWFjLmNwcAppbmRleCBkYTA4MmE2ZjIyMjk0ODE0OTVhNTUzOTg1YTJk
MGViOTkxZTU4YjU2Li44YmU3ZTZlOGRhNDViYjM5ZDU4YzJiYzNhNjJmZDUwZjUwNjYxZjM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvTWVkaWFTZXNzaW9u
TWFuYWdlck1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL01l
ZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwCkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgTWVkaWFTZXNz
aW9uTWFuYWdlcjo6dXBkYXRlU2Vzc2lvblN0YXRlKCkKICAgICAgICAgQXVkaW9TZXNzaW9uOjpz
aGFyZWRTZXNzaW9uKCkuc2V0UHJlZmVycmVkQnVmZmVyU2l6ZShrV2ViQXVkaW9CdWZmZXJTaXpl
KTsKICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE2NzI1PiBGaWd1cmUgb3V0
IHdoeSBlbmFibGluZyB0aGUgY29kZSBiZWxvdwogICAgIC8vIGNhdXNlcyBtZWRpYSBMYXlvdXRU
ZXN0cyB0byBmYWlsIG9uIDEwLjguCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDkwCisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwOTAKICAgICBlbHNlIGlmICgoaGFzKE1lZGlhU2Vzc2lvbjo6VmlkZW8pIHx8
IGhhcyhNZWRpYVNlc3Npb246OkF1ZGlvKSkgJiYgU2V0dGluZ3M6Omxvd1Bvd2VyVmlkZW9BdWRp
b0J1ZmZlclNpemVFbmFibGVkKCkpCiAgICAgICAgIEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lv
bigpLnNldFByZWZlcnJlZEJ1ZmZlclNpemUoa0xvd1Bvd2VyVmlkZW9CdWZmZXJTaXplKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVy
Q0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCmlu
ZGV4IDhlN2M3YTM3NTVhMDgxZmQ5NDdhNDY1ZmIzMmE1YjI0Y2MxYjE5MjYuLmUxODU5MzkwMGM2
MjllZTliMzk3MmExNWRhZjI4Nzc4OTQ1NTE2NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAKQEAgLTM4LDEzICszOCwxNCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKENGRGF0YVJlZiBjZkRhdGEp
CiAgICAgOiBtX3NpemUoMCkKLSAgICAsIG1fY2ZEYXRhKGNmRGF0YSkKKyAgICAsIG1fc2hvdWxk
VXNlUHVyZ2VhYmxlTWVtb3J5KGZhbHNlKQogI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQog
ICAgICwgbV9pc01lbW9yeU1hcHBlZChmYWxzZSkKICAgICAsIG1fZGlza0ltYWdlQ2FjaGVJZChE
aXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlkKQogICAgICwgbV9ub3RpZnlNZW1vcnlN
YXBwZWRDYWxsYmFjayhudWxscHRyKQogICAgICwgbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFj
a0RhdGEobnVsbHB0cikKICNlbmRpZgorICAgICwgbV9jZkRhdGEoY2ZEYXRhKQogewogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9VUkxDRi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jZi9VUkxDRi5jcHAKaW5kZXggYjNlY2I1MDMxOTIyMmEyZDQ0YWFh
N2Q0OGNjYjEzNWJlZTM1MzljOS4uNWIxNjk0ODc2NmQzMzhmZjM0OWM0ZWY1MjY0OGI1YzRhNDZj
NzQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvVVJMQ0YuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1VSTENGLmNwcApAQCAtMzAsNiArMzAsMTEg
QEAKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlVSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJSdW50aW1lQXBwbGlj
YXRpb25DaGVja3NJT1MuaCIKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlByaXYuaD4KKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFVSTDo6VVJMKENGVVJMUmVmIHVybCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0tleUV2ZW50Q29jb2EubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9LZXlFdmVudENvY29hLm1tCmluZGV4IGEx
MjViNmExMGY0N2I3MmU2MDU2ZGY3OTRiNmRlYWI1ZDQ3NmYzNjkuLjFhM2Q4MzBkZDE5NGMwZDk2
OTRjMjg1NjhiMzQ5MmRiMTNkOGNiOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL0tleUV2ZW50Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvS2V5RXZlbnRDb2NvYS5tbQpAQCAtNTMxLDkgKzUzMSw4IEBAIGludCB3aW5kb3dzS2V5
Q29kZUZvckNoYXJDb2RlKHVuaWNoYXIgY2hhckNvZGUpCiAgICAgICAgIGNhc2UgTlNQcmludEZ1
bmN0aW9uS2V5OiByZXR1cm4gVktfUFJJTlQ7CiAgICAgICAgIGNhc2UgTlNFeGVjdXRlRnVuY3Rp
b25LZXk6IHJldHVybiBWS19FWEVDVVRFOwogICAgICAgICBjYXNlIE5TUHJpbnRTY3JlZW5GdW5j
dGlvbktleTogcmV0dXJuIFZLX1NOQVBTSE9UOwotICAgICAgICBjYXNlIE5TSW5zZXJ0RnVuY3Rp
b25LZXk6IHJldHVybiBWS19JTlNFUlQ7CiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBjYXNl
IE5TSGVscEZ1bmN0aW9uS2V5OiByZXR1cm4gVktfSU5TRVJUOworICAgICAgICBjYXNlIE5TSW5z
ZXJ0RnVuY3Rpb25LZXk6IGNhc2UgTlNIZWxwRnVuY3Rpb25LZXk6IHJldHVybiBWS19JTlNFUlQ7
CiAKICAgICAgICAgY2FzZSBOU0YxRnVuY3Rpb25LZXk6IHJldHVybiBWS19GMTsKICAgICAgICAg
Y2FzZSBOU0YyRnVuY3Rpb25LZXk6IHJldHVybiBWS19GMjsKQEAgLTU1NSw2ICs1NTQsOCBAQCBp
bnQgd2luZG93c0tleUNvZGVGb3JDaGFyQ29kZSh1bmljaGFyIGNoYXJDb2RlKQogICAgICAgICBj
YXNlIE5TRjE4RnVuY3Rpb25LZXk6IHJldHVybiBWS19GMTg7CiAgICAgICAgIGNhc2UgTlNGMTlG
dW5jdGlvbktleTogcmV0dXJuIFZLX0YxOTsKICAgICAgICAgY2FzZSBOU0YyMEZ1bmN0aW9uS2V5
OiByZXR1cm4gVktfRjIwOworI2Vsc2UKKyAgICAgICAgY2FzZSBOU0luc2VydEZ1bmN0aW9uS2V5
OiByZXR1cm4gVktfSU5TRVJUOwogI2VuZGlmCiAgICAgICAgIGNhc2UgTlNGMjFGdW5jdGlvbktl
eTogcmV0dXJuIFZLX0YyMTsKICAgICAgICAgY2FzZSBOU0YyMkZ1bmN0aW9uS2V5OiByZXR1cm4g
VktfRjIyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwCmluZGV4IGM4OGFiNWU0OTk2YWM5OTcxZGVmZWYwYjFlODkzNjJhN2M3NzNhMTkuLjQ3
MDA4MmVkNWM1ZWYwMmE3MzNlNmQ5NDEyMWMwNDkyMDViZTBkMGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKQEAgLTM3LDggKzM3LDE0
IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPGxpbWl0cz4KKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBXZSBzaG91bGQgYmV0dGVyIGludGVncmF0
ZSB0aGUgaU9TIGFuZCBub24taU9TIGNvZGUgaW4gdGhpcyBjbGFzcy4gVW5saWtlIG90aGVyIHBv
cnRzLCB0aGUKKy8vIGlPUyBwb3J0IGNhY2hlcyB0aGUgbWV0YWRhdGEgZm9yIGEgZnJhbWUgd2l0
aG91dCBkZWNvZGluZyB0aGUgaW1hZ2UuCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VP
YnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikKICAgICAsIG1fY3VycmVu
dEZyYW1lKDApCkBAIC01MCw2ICs1NiwxMSBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1h
Z2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgLCBtX2RlY29kZWRTaXplKDApCiAgICAgLCBtX2Rl
Y29kZWRQcm9wZXJ0aWVzU2l6ZSgwKQogICAgICwgbV9mcmFtZUNvdW50KDApCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXhwb3NlIGEgc2V0dGluZyB0byBlbmFi
bGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1n
dWFyZC4KKyAgICAsIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtUaW1lKDApCisgICAgLCBtX3Byb2dy
ZXNzaXZlTG9hZENodW5rQ291bnQoMCkKKyNlbmRpZgogICAgICwgbV9pc1NvbGlkQ29sb3IoZmFs
c2UpCiAgICAgLCBtX2NoZWNrZWRGb3JTb2xpZENvbG9yKGZhbHNlKQogICAgICwgbV9hbmltYXRp
b25GaW5pc2hlZChmYWxzZSkKQEAgLTEwMCw3ICsxMTEsMTYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6
ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9vbCBkZXN0cm95QWxsKQogewogICAgIC8v
IEFuaW1hdGVkIGltYWdlcyA+NU1CIGFyZSBjb25zaWRlcmVkIGxhcmdlIGVub3VnaCB0aGF0IHdl
J2xsIG9ubHkgaGFuZyBvbgogICAgIC8vIHRvIG9uZSBmcmFtZSBhdCBhIHRpbWUuCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjTGFyZ2VBbmltYXRpb25DdXRv
ZmYgPSAyMDk3MTUyOworCisgICAgIC8vIElmIHdlIGhhdmUgZGVjb2RlZCBmcmFtZXMgYnV0IHRo
ZXJlIGlzIG5vIGVuY29kZWQgZGF0YSwgd2Ugc2hvdWxkbid0IGRlc3Ryb3kKKyAgICAgLy8gdGhl
IGRlY29kZWQgaW1hZ2Ugc2luY2Ugd2Ugd29uJ3QgYmUgYWJsZSB0byByZWNvbnN0cnVjdCBpdCBs
YXRlci4KKyAgICAgaWYgKCFkYXRhKCkgJiYgbV9mcmFtZXMuc2l6ZSgpKQorICAgICAgICAgcmV0
dXJuOworI2Vsc2UKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY0xhcmdlQW5pbWF0aW9uQ3V0
b2ZmID0gNTI0Mjg4MDsKKyNlbmRpZgogCiAgICAgLy8gSWYgd2UgaGF2ZSBkZWNvZGVkIGZyYW1l
cyBidXQgdGhlcmUgaXMgbm8gZW5jb2RlZCBkYXRhLCB3ZSBzaG91bGRuJ3QgZGVzdHJveQogICAg
IC8vIHRoZSBkZWNvZGVkIGltYWdlIHNpbmNlIHdlIHdvbid0IGJlIGFibGUgdG8gcmVjb25zdHJ1
Y3QgaXQgbGF0ZXIuCkBAIC0xMzEsNyArMTUxLDExIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ry
b3lNZXRhZGF0YUFuZE5vdGlmeSh1bnNpZ25lZCBmcmFtZUJ5dGVzQ2xlYXJlZCkKICAgICAgICAg
aW1hZ2VPYnNlcnZlcigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgLXNhZmVDYXN0PGludD4o
ZnJhbWVCeXRlc0NsZWFyZWQpKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgQml0bWFw
SW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBmbG9hdCBzY2FsZUhpbnQpCisjZWxzZQog
dm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgpCisjZW5kaWYKIHsKICAg
ICBzaXplX3QgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIEFTU0VSVChtX2RlY29kZWRT
aXplID09IDAgfHwgbnVtRnJhbWVzID4gMSk7CkBAIC0xMzksNyArMTYzLDEyIEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4KQogICAgIGlmIChtX2ZyYW1lcy5zaXpl
KCkgPCBudW1GcmFtZXMpCiAgICAgICAgIG1fZnJhbWVzLmdyb3cobnVtRnJhbWVzKTsKIAorI2lm
IFBMQVRGT1JNKElPUykKKyAgICBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSA9IG1fc291cmNlLmNy
ZWF0ZUZyYW1lQXRJbmRleChpbmRleCwgJnNjYWxlSGludCk7CisgICAgbV9mcmFtZXNbaW5kZXhd
Lm1fc2NhbGUgPSBzY2FsZUhpbnQ7CisjZWxzZQogICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1l
ID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVBdEluZGV4KGluZGV4KTsKKyNlbmRpZgogICAgIGlmIChu
dW1GcmFtZXMgPT0gMSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKICAgICAgICAgY2hlY2tG
b3JTb2xpZENvbG9yKCk7CiAKQEAgLTE2Niw2ICsxOTUsMjMgQEAgdm9pZCBCaXRtYXBJbWFnZTo6
Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgpCiAgICAgfQogfQogCisjaWYgUExBVEZPUk0oSU9TKQor
dm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZUluZm8oc2l6ZV90IGluZGV4KQoreworICAgIHNp
emVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CisKKyAgICBpZiAobV9mcmFtZXMuc2l6ZSgp
IDwgbnVtRnJhbWVzKQorICAgICAgICBtX2ZyYW1lcy5yZXNpemUobnVtRnJhbWVzKTsKKworICAg
IEFTU0VSVCghbV9mcmFtZXNbaW5kZXhdLm1faGF2ZUluZm8pOworCisgICAgaWYgKHNob3VsZEFu
aW1hdGUoKSkKKyAgICAgICAgbV9mcmFtZXNbaW5kZXhdLm1fZHVyYXRpb24gPSBtX3NvdXJjZS5m
cmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CisgICAgbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxw
aGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CisgICAgbV9mcmFtZXNb
aW5kZXhdLm1faGF2ZUluZm8gPSB0cnVlOworfQorI2VuZGlmCisKIHZvaWQgQml0bWFwSW1hZ2U6
OmRpZERlY29kZVByb3BlcnRpZXMoKSBjb25zdAogewogICAgIGlmIChtX2RlY29kZWRTaXplKQpA
QCAtMTkzLDYgKzIzOSwxMCBAQCB2b2lkIEJpdG1hcEltYWdlOjp1cGRhdGVTaXplKEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QKICAgICBtX3NpemVSZXNwZWN0
aW5nT3JpZW50YXRpb24gPSBtX3NvdXJjZS5zaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlv
bihSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigp
KSk7CiAgICAgbV9pbWFnZU9yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2Ny
aXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CiAgICAgbV9zaG91bGRSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbigpKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgbV9vcmlnaW5hbFNpemUgPSBt
X3NvdXJjZS5vcmlnaW5hbFNpemUoKTsKKyAgICBtX29yaWdpbmFsU2l6ZVJlc3BlY3RpbmdPcmll
bnRhdGlvbiA9IG1fc291cmNlLm9yaWdpbmFsU2l6ZShSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7
CisjZW5kaWYKICAgICBtX2hhdmVTaXplID0gdHJ1ZTsKICAgICBkaWREZWNvZGVQcm9wZXJ0aWVz
KCk7CiB9CkBAIC0yMDksNiArMjU5LDIwIEBAIEludFNpemUgQml0bWFwSW1hZ2U6OnNpemVSZXNw
ZWN0aW5nT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyCiAgICAg
cmV0dXJuIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsKIH0KIAorI2lmIFBMQVRGT1JNKElP
UykKK0ludFNpemUgQml0bWFwSW1hZ2U6Om9yaWdpbmFsU2l6ZSgpIGNvbnN0Cit7CisgICAgdXBk
YXRlU2l6ZSgpOworICAgIHJldHVybiBtX29yaWdpbmFsU2l6ZTsKK30KKworSW50U2l6ZSBCaXRt
YXBJbWFnZTo6b3JpZ2luYWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3QKK3sKKyAg
ICB1cGRhdGVTaXplKCk7CisgICAgcmV0dXJuIG1fb3JpZ2luYWxTaXplUmVzcGVjdGluZ09yaWVu
dGF0aW9uOworfQorI2VuZGlmCisKIEludFNpemUgQml0bWFwSW1hZ2U6OmN1cnJlbnRGcmFtZVNp
emUoKSBjb25zdAogewogICAgIGlmICghbV9jdXJyZW50RnJhbWUgfHwgbV9oYXNVbmlmb3JtRnJh
bWVTaXplKQpAQCAtMjI3LDYgKzI5MSw5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhvdFNwb3Qo
SW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0CiAKIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2Vk
KGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogeworICAgIC8vIEJlY2F1c2Ugd2UncmUgbW9kaWZ5aW5n
IHRoZSBjdXJyZW50IGZyYW1lLCBjbGVhciBpdHMgKG5vdyBwb3NzaWJseQorICAgIC8vIGluYWNj
dXJhdGUpIG1ldGFkYXRhIGFzIHdlbGwuCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBDbGVh
ciBhbGwgcGFydGlhbGx5LWRlY29kZWQgZnJhbWVzLiBGb3IgbW9zdCBpbWFnZSBmb3JtYXRzLCB0
aGVyZSBpcyBvbmx5CiAgICAgLy8gb25lIGZyYW1lLCBidXQgYXQgbGVhc3QgR0lGIGFuZCBJQ08g
Y2FuIGhhdmUgbW9yZS4gV2l0aCBHSUZzLCB0aGUgZnJhbWVzCiAgICAgLy8gY29tZSBpbiBvcmRl
ciBhbmQgd2UgYXNrIHRvIGRlY29kZSB0aGVtIGluIG9yZGVyLCB3YWl0aW5nIHRvIHJlcXVlc3Qg
YQpAQCAtMjU0LDExICszMjEsNDAgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9m
cmFtZXNbaV0uY2xlYXIodHJ1ZSkgPyBmcmFtZUJ5dGVzIDogMCk7CiAgICAgfQogICAgIGRlc3Ry
b3lNZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xlYXJlZCk7CisjZWxzZQorICAgIGludCBk
ZWx0YUJ5dGVzID0gMDsKKyAgICBpZiAoIW1fZnJhbWVzLmlzRW1wdHkoKSkgeworICAgICAgICBp
bnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5tX2ZyYW1lQnl0ZXM7Cisg
ICAgICAgIGlmIChtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVhcih0cnVlKSkgewor
ICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsKKyAgICAgICAgICAgIGRlbHRhQnl0ZXMg
Kz0gbV9kZWNvZGVkUHJvcGVydGllc1NpemU7CisgICAgICAgICAgICBtX2RlY29kZWRQcm9wZXJ0
aWVzU2l6ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgZGVzdHJveU1ldGFkYXRhQW5kTm90
aWZ5KGRlbHRhQnl0ZXMpOworI2VuZGlmCiAgICAgCiAgICAgLy8gRmVlZCBhbGwgdGhlIGRhdGEg
d2UndmUgc2VlbiBzbyBmYXIgdG8gdGhlIGltYWdlIGRlY29kZXIuCiAgICAgbV9hbGxEYXRhUmVj
ZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgZXhwb3NlIGEgc2V0dGluZyB0byBlbmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2
ZSBsb2FkaW5nIGFuZCBtYWtlIHRoaXMKKyAgICAvLyBjb2RlIGNvbmRpdGlvbmFsIG9uIGl0LiBU
aGVuIHdlIGNhbiByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCisgICAgc3RhdGljIGNv
bnN0IGRvdWJsZSBjaHVua0xvYWRJbnRlcnZhbHNbXSA9IHswLCAxLCAzLCA2LCAxNX07CisgICAg
ZG91YmxlIGludGVydmFsID0gY2h1bmtMb2FkSW50ZXJ2YWxzW3N0ZDo6bWluKG1fcHJvZ3Jlc3Np
dmVMb2FkQ2h1bmtDb3VudCwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KDQpKV07CisKKyAgICBib29s
IG5lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgaWYgKGN1cnJlbnRUaW1lKCkgLSBtX3Byb2dyZXNz
aXZlTG9hZENodW5rVGltZSA+IGludGVydmFsKSB7IC8vIFRoZSBmaXJzdCB0aW1lIHRocm91Z2gs
IHRoZSBjaHVuayB0aW1lIHdpbGwgYmUgMCBhbmQgdGhlIGltYWdlIHdpbGwgZ2V0IGFuIHVwZGF0
ZS4KKyAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlOworICAgICAgICBtX3Byb2dyZXNzaXZlTG9h
ZENodW5rVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgICAgIEFTU0VSVChtX3Byb2dyZXNzaXZl
TG9hZENodW5rQ291bnQgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKTsK
KyAgICAgICAgKyttX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQ7CisgICAgfQorICAgIGlmIChu
ZWVkc1VwZGF0ZSB8fCBhbGxEYXRhUmVjZWl2ZWQpCisgICAgICAgIG1fc291cmNlLnNldERhdGEo
ZGF0YSgpLCBhbGxEYXRhUmVjZWl2ZWQpOworI2Vsc2UKICAgICBtX3NvdXJjZS5zZXREYXRhKGRh
dGEoKSwgYWxsRGF0YVJlY2VpdmVkKTsKLSAgICAKKyNlbmRpZgorCiAgICAgbV9oYXZlRnJhbWVD
b3VudCA9IGZhbHNlOwogICAgIG1faGFzVW5pZm9ybUZyYW1lU2l6ZSA9IHRydWU7CiAgICAgcmV0
dXJuIGlzU2l6ZUF2YWlsYWJsZSgpOwpAQCAtMjkzLDYgKzM4OSw3IEBAIGJvb2wgQml0bWFwSW1h
Z2U6OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsKIH0KIAor
I2lmICFQTEFURk9STShJT1MpCiBib29sIEJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVk
KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQpAQCAtMzAy
LDI1ICszOTksNzUgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZChzaXpl
X3QgaW5kZXgpCiAgICAgICAgIGNhY2hlRnJhbWUoaW5kZXgpOwogICAgIHJldHVybiB0cnVlOwog
fQorI2Vsc2UKK2Jvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSW5mb0lzQ2FjaGVkKHNpemVf
dCBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1l
c1tpbmRleF0ubV9oYXZlSW5mbykKKyAgICAgICAgY2FjaGVGcmFtZUluZm8oaW5kZXgpOworICAg
IHJldHVybiB0cnVlOworfQorI2VuZGlmCiAKIFBhc3NOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFn
ZTo6ZnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
cmV0dXJuIGZyYW1lQXRJbmRleChpbmRleCwgMS4wZik7CisjZWxzZQogICAgIGlmICghZW5zdXJl
RnJhbWVJc0NhY2hlZChpbmRleCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWU7CisjZW5kaWYKIH0K
IAorI2lmIFBMQVRGT1JNKElPUykKK1Bhc3NOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJh
bWVBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgc2NhbGVIaW50KQoreworICAgIGlmIChpbmRl
eCA+PSBmcmFtZUNvdW50KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGlu
ZGV4ID49IG1fZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUpCisgICAg
ICAgIGNhY2hlRnJhbWUoaW5kZXgsIHNjYWxlSGludCk7CisgICAgZWxzZSBpZiAoc3RkOjptaW4o
MS4wZiwgc2NhbGVIaW50KSA+IG1fZnJhbWVzW2luZGV4XS5tX3NjYWxlKSB7CisgICAgICAgIC8v
IElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwgYnV0IGF0IHRvbyBzbWFsbCBhIHNpemUs
IHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgorICAgICAgICBpbnQgc2l6ZUNoYW5nZSA9IC1t
X2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
aW50PihtX2RlY29kZWRTaXplKSArIHNpemVDaGFuZ2UgPj0gMCk7CisgICAgICAgIG1fZnJhbWVz
W2luZGV4XS5jbGVhcih0cnVlKTsKKyAgICAgICAgaW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpOwor
ICAgICAgICBtX2RlY29kZWRTaXplICs9IHNpemVDaGFuZ2U7CisgICAgICAgIGlmIChpbWFnZU9i
c2VydmVyKCkpCisgICAgICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRlY29kZWRTaXplQ2hhbmdl
ZCh0aGlzLCBzaXplQ2hhbmdlKTsKKworICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCBzY2FsZUhp
bnQpOworICAgIH0KKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWU7Cit9CisjZW5k
aWYKKwogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5k
ZXgpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBjYWNoZUZyYW1lSW5mbyBk
b2VzIG5vdCBzZXQgbV9pc0NvbXBsZXRlLiBTaG91bGQgaXQ/CisgICAgaWYgKCFlbnN1cmVGcmFt
ZUluZm9Jc0NhY2hlZChpbmRleCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCiAgICAg
aWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCiAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2lzQ29tcGxldGU7CiB9CiAKIGZs
b2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIGlmICghZW5zdXJlRnJhbWVJbmZvSXNDYWNoZWQoaW5kZXgp
KQorICAgICAgICByZXR1cm4gMDsKKyNlbHNlCiAgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVk
KGluZGV4KSkKICAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKICAgICByZXR1cm4gbV9mcmFtZXNb
aW5kZXhdLm1fZHVyYXRpb247CiB9CiAKQEAgLTMzMSw5ICs0NzgsMTMgQEAgUGFzc05hdGl2ZUlt
YWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiAKIGJvb2wg
Qml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgaWYgKCFlbnN1cmVGcmFtZUluZm9Jc0NhY2hlZChpbmRleCkpCisg
ICAgICAgIHJldHVybiB0cnVlOyAvLyBGSVhNRTogV2h5IHdvdWxkIGFuIGludmFsaWQgaW5kZXgg
cmV0dXJuIHRydWUgaGVyZT8KKyNlbHNlCiAgICAgaWYgKG1fZnJhbWVzLnNpemUoKSA8PSBpbmRl
eCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0KKyNlbmRpZgogICAgIGlmIChtX2ZyYW1lc1tpbmRl
eF0ubV9oYXZlTWV0YWRhdGEpCiAgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9oYXNB
bHBoYTsKIApAQCAtMzQ3LDggKzQ5OCwxNCBAQCBib29sIEJpdG1hcEltYWdlOjpjdXJyZW50RnJh
bWVLbm93blRvQmVPcGFxdWUoKQogCiBJbWFnZU9yaWVudGF0aW9uIEJpdG1hcEltYWdlOjpmcmFt
ZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIC8vIEZJWE1FOiBjYWNoZUZyYW1lSW5mbyBkb2VzIG5vdCBzZXQgbV9vcmllbnRhdGlvbi4g
U2hvdWxkIGl0PworICAgIGlmICghZW5zdXJlRnJhbWVJbmZvSXNDYWNoZWQoaW5kZXgpKQorICAg
ICAgICByZXR1cm4gRGVmYXVsdEltYWdlT3JpZW50YXRpb247CisjZWxzZQogICAgIGlmICghZW5z
dXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCiAgICAgICAgIHJldHVybiBEZWZhdWx0SW1hZ2VPcmll
bnRhdGlvbjsKKyNlbmRpZgogCiAgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2hhdmVNZXRhZGF0
YSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX29yaWVudGF0aW9uOwpAQCAtMzYz
LDggKzUyMCw2IEBAIGJvb2wgQml0bWFwSW1hZ2U6Om5vdFNvbGlkQ29sb3IoKQogfQogI2VuZGlm
CiAKLQotCiBpbnQgQml0bWFwSW1hZ2U6OnJlcGV0aXRpb25Db3VudChib29sIGltYWdlS25vd25U
b0JlQ29tcGxldGUpCiB7CiAgICAgaWYgKChtX3JlcGV0aXRpb25Db3VudFN0YXR1cyA9PSBVbmtu
b3duKSB8fCAoKG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzID09IFVuY2VydGFpbikgJiYgaW1hZ2VL
bm93blRvQmVDb21wbGV0ZSkpIHsKQEAgLTQxMiwxMiArNTY3LDE4IEBAIHZvaWQgQml0bWFwSW1h
Z2U6OnN0YXJ0QW5pbWF0aW9uKGJvb2wgY2F0Y2hVcElmTmVjZXNzYXJ5KQogICAgIGNvbnN0IGRv
dWJsZSBjdXJyZW50RHVyYXRpb24gPSBmcmFtZUR1cmF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSk7CiAgICAgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUgKz0gY3VycmVudER1cmF0aW9uOwogCisj
aWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBXaGVuIGFuIGFuaW1hdGVkIGltYWdlIGlzIG1vcmUg
dGhhbiBmaXZlIG1pbnV0ZXMgb3V0IG9mIGRhdGUsIHRoZQogICAgIC8vIHVzZXIgcHJvYmFibHkg
ZG9lc24ndCBjYXJlIGFib3V0IHJlc3luY2luZyBhbmQgd2UgY291bGQgYnVybiBhIGxvdCBvZgog
ICAgIC8vIHRpbWUgbG9vcGluZyB0aHJvdWdoIGZyYW1lcyBiZWxvdy4gIEp1c3QgcmVzZXQgdGhl
IHRpbWluZ3MuCiAgICAgY29uc3QgZG91YmxlIGNBbmltYXRpb25SZXN5bmNDdXRvZmYgPSA1ICog
NjA7CiAgICAgaWYgKCh0aW1lIC0gbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUpID4gY0FuaW1hdGlv
blJlc3luY0N1dG9mZikKICAgICAgICAgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUgPSB0aW1lICsg
Y3VycmVudER1cmF0aW9uOworI2Vsc2UKKyAgICAvLyBNYWludGFpbmluZyBmcmFtZS10by1mcmFt
ZSBkZWxheXMgaXMgbW9yZSBpbXBvcnRhbnQgdGhhbgorICAgIC8vIG1haW50YWluaW5nIGFic29s
dXRlIGFuaW1hdGlvbiB0aW1pbmcsIHNvIHJlc2V0IHRoZSB0aW1pbmdzIGVhY2ggZnJhbWUuCisg
ICAgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUgPSB0aW1lICsgY3VycmVudER1cmF0aW9uOworI2Vu
ZGlmCiAKICAgICAvLyBUaGUgaW1hZ2UgbWF5IGxvYWQgbW9yZSBzbG93bHkgdGhhbiBpdCdzIHN1
cHBvc2VkIHRvIGFuaW1hdGUsIHNvIHRoYXQgYnkKICAgICAvLyB0aGUgdGltZSB3ZSByZWFjaCB0
aGUgZW5kIG9mIHRoZSBmaXJzdCByZXBldGl0aW9uLCB3ZSdyZSB3ZWxsIGJlaGluZC4KQEAgLTU0
OCwxMCArNzA5LDEyIEBAIGJvb2wgQml0bWFwSW1hZ2U6OmludGVybmFsQWR2YW5jZUFuaW1hdGlv
bihib29sIHNraXBwaW5nRnJhbWVzKQogICAgIC8vIFN0b3AgdGhlIGFuaW1hdGlvbi4KICAgICBz
dG9wQW5pbWF0aW9uKCk7CiAgICAgCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBTZWUgaWYg
YW55b25lIGlzIHN0aWxsIHBheWluZyBhdHRlbnRpb24gdG8gdGhpcyBhbmltYXRpb24uICBJZiBu
b3QsIHdlIGRvbid0CiAgICAgLy8gYWR2YW5jZSBhbmQgd2lsbCByZW1haW4gc3VzcGVuZGVkIGF0
IHRoZSBjdXJyZW50IGZyYW1lIHVudGlsIHRoZSBhbmltYXRpb24gaXMgcmVzdW1lZC4KICAgICBp
ZiAoIXNraXBwaW5nRnJhbWVzICYmIGltYWdlT2JzZXJ2ZXIoKS0+c2hvdWxkUGF1c2VBbmltYXRp
b24odGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogCiAgICAgKyttX2N1cnJl
bnRGcmFtZTsKICAgICBib29sIGFkdmFuY2VkQW5pbWF0aW9uID0gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IGI5ZGQ3YjNhNTIx
Nzg3NmMxM2M0MGM4OGJmN2M2Y2JmZTRhNzllNGYuLjg3ZDhiOGM2NjIyZmI5ZmMzYzJiZjAwNDY1
N2M3MDUzYmU0ZTlmM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuaApAQCAtMzYsNyArMzYsOSBAQAogCiAjaWYgUExBVEZPUk0oTUFDKQogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpZiAhUExBVEZPUk0oSU9TKQogT0JKQ19DTEFTUyBO
U0ltYWdlOworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
V0lOKQpAQCAtNjcsNiArNjksMTAgQEAgcHVibGljOgogICAgIEZyYW1lRGF0YSgpCiAgICAgICAg
IDogbV9mcmFtZSgwKQogICAgICAgICAsIG1fb3JpZW50YXRpb24oRGVmYXVsdEltYWdlT3JpZW50
YXRpb24pCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAsIG1fc2NhbGUoMCkKKyAgICAgICAg
LCBtX2hhdmVJbmZvKGZhbHNlKQorI2VuZGlmCiAgICAgICAgICwgbV9kdXJhdGlvbigwKQogICAg
ICAgICAsIG1faGF2ZU1ldGFkYXRhKGZhbHNlKQogICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxz
ZSkKQEAgLTg2LDYgKzkyLDEwIEBAIHB1YmxpYzoKIAogICAgIE5hdGl2ZUltYWdlUHRyIG1fZnJh
bWU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOworI2lmIFBMQVRGT1JNKElP
UykKKyAgICBmbG9hdCBtX3NjYWxlOworICAgIGJvb2wgbV9oYXZlSW5mbzsKKyNlbmRpZgogICAg
IGZsb2F0IG1fZHVyYXRpb247CiAgICAgYm9vbCBtX2hhdmVNZXRhZGF0YSA6IDE7CiAgICAgYm9v
bCBtX2lzQ29tcGxldGUgOiAxOwpAQCAtOTcsNiArMTA3LDkgQEAgcHVibGljOgogLy8gQml0bWFw
SW1hZ2UgQ2xhc3MKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KIAorLy8gRklYTUU6IFdlIHNob3VsZCBiZXR0ZXIgaW50ZWdyYXRlIHRoZSBpT1Mg
YW5kIG5vbi1pT1MgY29kZSBpbiB0aGlzIGNsYXNzLiBVbmxpa2Ugb3RoZXIgcG9ydHMsIHRoZQor
Ly8gaU9TIHBvcnQgY2FjaGVzIHRoZSBtZXRhZGF0YSBmb3IgYSBmcmFtZSB3aXRob3V0IGRlY29k
aW5nIHRoZSBpbWFnZS4KKwogY2xhc3MgQml0bWFwSW1hZ2UgRklOQUwgOiBwdWJsaWMgSW1hZ2Ug
ewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKICAgICBmcmllbmQgY2xhc3MgQ3Jv
c3NmYWRlR2VuZXJhdGVkSW1hZ2U7CkBAIC0xMjIsNiArMTM1LDEwIEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgSW50U2l6ZSBzaXpl
UmVzcGVjdGluZ09yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiA9IEltYWdl
T3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
dmlydHVhbCBJbnRTaXplIG9yaWdpbmFsU2l6ZSgpIGNvbnN0OworICAgIEludFNpemUgb3JpZ2lu
YWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3Q7CisjZW5kaWYKICAgICBJbnRTaXpl
IGN1cnJlbnRGcmFtZVNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SG90U3BvdChJ
bnRQb2ludCYpIGNvbnN0IE9WRVJSSURFOwogCkBAIC0xNDEsNyArMTU4LDkgQEAgcHVibGljOgog
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIEFjY2Vzc29ycyBmb3IgbmF0aXZlIGltYWdlIGZv
cm1hdHMuCisjaWYgIVBMQVRGT1JNKElPUykKICAgICB2aXJ0dWFsIE5TSW1hZ2UqIGdldE5TSW1h
Z2UoKSBPVkVSUklERTsKKyNlbmRpZgogICAgIHZpcnR1YWwgQ0ZEYXRhUmVmIGdldFRJRkZSZXBy
ZXNlbnRhdGlvbigpIE9WRVJSSURFOwogI2VuZGlmCiAKQEAgLTE5NSw2ICsyMTQsMTAgQEAgcHJv
dGVjdGVkOgogI2VuZGlmCiAKICAgICBzaXplX3QgY3VycmVudEZyYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9jdXJyZW50RnJhbWU7IH0KKyNpZiBQTEFURk9STShJT1MpCisgICAgUGFzc05hdGl2ZUlt
YWdlUHRyIGZyYW1lQXRJbmRleChzaXplX3QsIGZsb2F0IHNjYWxlSGludCk7CisgICAgUGFzc05h
dGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lQXRJbmRleChzaXplX3QpOworI2VuZGlmCiAg
ICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKICAgICBQYXNzTmF0aXZlSW1hZ2VQdHIgZnJhbWVBdElu
ZGV4KHNpemVfdCk7CiAgICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCk7CkBA
IC0yMDMsOSArMjI2LDE4IEBAIHByb3RlY3RlZDoKICAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1l
T3JpZW50YXRpb25BdEluZGV4KHNpemVfdCk7CiAKICAgICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMg
YSBmcmFtZS4gTmV2ZXIgYWNjZXNzZWQgZXhjZXB0IGludGVybmFsbHkuCisjaWYgUExBVEZPUk0o
SU9TKQorICAgIHZvaWQgY2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIGZsb2F0IHNjYWxlSGludCk7
CisKKyAgICAvLyBDYWNoZSBmcmFtZSBtZXRhZGF0YSB3aXRob3V0IGRlY29kaW5nIGltYWdlLgor
ICAgIHZvaWQgY2FjaGVGcmFtZUluZm8oc2l6ZV90IGluZGV4KTsKKyAgICAvLyBDYWxsZWQgYmVm
b3JlIGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0gZm9yIGluZm8gd2l0aG91dCBkZWNvZGluZy4g
UmV0dXJucyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91bmRzLgorICAgIGJvb2wgZW5zdXJlRnJh
bWVJbmZvSXNDYWNoZWQoc2l6ZV90IGluZGV4KTsKKyNlbHNlCiAgICAgdm9pZCBjYWNoZUZyYW1l
KHNpemVfdCBpbmRleCk7CiAgICAgLy8gQ2FsbGVkIGJlZm9yZSBhY2Nlc3NpbmcgbV9mcmFtZXNb
aW5kZXhdLiBSZXR1cm5zIGZhbHNlIG9uIGluZGV4IG91dCBvZiBib3VuZHMuCiAgICAgYm9vbCBl
bnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCk7CisjZW5kaWYKIAogICAgIC8vIENhbGxl
ZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhLiAgV2hlbiB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwg
d2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVs
bCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ryb3kKQEAgLTI2OCw2ICszMDAsMTAgQEAgcHJpdmF0
ZToKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1faW1hZ2VPcmllbnRhdGlvbiA6IDQ7IC8vIEltYWdl
T3JpZW50YXRpb25FbnVtCiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3Nob3VsZFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uIDogMTsgLy8gUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtCiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgbXV0YWJsZSBJbnRTaXplIG1fb3JpZ2luYWxTaXplOyAvLyBUaGUg
c2l6ZSBvZiB0aGUgdW5zdWJzYW1wbGVkIGltYWdlLgorICAgIG11dGFibGUgSW50U2l6ZSBtX29y
aWdpbmFsU2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsKKyNlbmRpZgogICAgIHNpemVfdCBtX2N1
cnJlbnRGcmFtZTsgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlv
bi4KICAgICBWZWN0b3I8RnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhl
IGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRv
IHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIApAQCAtMjc4LDcgKzMxNCw5IEBAIHByaXZhdGU6CiAg
ICAgZG91YmxlIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lOyAgLy8gVGhlIHN5c3RlbSB0aW1lIGF0
IHdoaWNoIHdlIGhvcGUgdG8gc2VlIHRoZSBuZXh0IGNhbGwgdG8gc3RhcnRBbmltYXRpb24oKS4K
IAogI2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIG11dGFibGUgUmV0
YWluUHRyPE5TSW1hZ2U+IG1fbnNJbWFnZTsgLy8gQSBjYWNoZWQgTlNJbWFnZSBvZiBmcmFtZSAw
LiBPbmx5IGJ1aWx0IGxhemlseSBpZiBzb21lb25lIGFjdHVhbGx5IHF1ZXJpZXMgZm9yIG9uZS4K
KyNlbmRpZgogICAgIG11dGFibGUgUmV0YWluUHRyPENGRGF0YVJlZj4gbV90aWZmUmVwOyAvLyBD
YWNoZWQgVElGRiByZXAgZm9yIGZyYW1lIDAuICBPbmx5IGJ1aWx0IGxhemlseSBpZiBzb21lb25l
IHF1ZXJpZXMgZm9yIG9uZS4KICNlbmRpZgogCkBAIC0yODgsNiArMzI2LDEyIEBAIHByaXZhdGU6
CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZTsgLy8gVGhlIHNp
emUgb2YgZGF0YSBkZWNvZGVkIGJ5IHRoZSBzb3VyY2UgdG8gZGV0ZXJtaW5lIGltYWdlIHByb3Bl
cnRpZXMgKGUuZy4gc2l6ZSwgZnJhbWUgY291bnQsIGV0YykuCiAgICAgc2l6ZV90IG1fZnJhbWVD
b3VudDsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV4cG9z
ZSBhIHNldHRpbmcgdG8gZW5hYmxlL2Rpc2FibGUgcHJvZ3Jlc3NpdmUgbG9hZGluZyByZW1vdmUg
dGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCisgICAgZG91YmxlIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1
bmtUaW1lOworICAgIHVpbnQxNl90IG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudDsKKyNlbmRp
ZgorCiAgICAgYm9vbCBtX2lzU29saWRDb2xvciA6IDE7IC8vIFdoZXRoZXIgb3Igbm90IHdlIGFy
ZSBhIDF4MSBzb2xpZCBpbWFnZS4KICAgICBib29sIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgOiAx
OyAvLyBXaGV0aGVyIHdlJ3ZlIGNoZWNrZWQgdGhlIGZyYW1lIGZvciBzb2xpZCBjb2xvci4KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDIyYzhkYzFj
MzMyZmNkNDliYmNiOTk3YzU2ZTEwMzlhNjYxNWY5MjUuLjU5ZDM3NTk1ZGIzZGY2MjdhNjZlMDky
YWExMDg1MDBiYTk4M2Q4MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAKQEAgLTMxMCw2ICszMTAsMTcgQEAgQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdAog
ICAgICAgICAgICAgICAgICBhbHBoYSgpKTsKIH0KIAorYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29u
c3QKK3sKKyAgICBmbG9hdCByZWQ7CisgICAgZmxvYXQgZ3JlZW47CisgICAgZmxvYXQgYmx1ZTsK
KyAgICBmbG9hdCBhbHBoYTsKKyAgICBnZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsK
KyAgICBmbG9hdCBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsID0gc3RkOjptYXgocmVkLCBzdGQ6Om1h
eChncmVlbiwgYmx1ZSkpOworICAgIHJldHVybiBhbHBoYSA+IDAuNSAmJiBsYXJnZXN0Tm9uQWxw
aGFDaGFubmVsIDwgMC41OworfQorCiBzdGF0aWMgaW50IGJsZW5kQ29tcG9uZW50KGludCBjLCBp
bnQgYSkKIHsKICAgICAvLyBXZSB1c2Ugd2hpdGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaAppbmRleCA4ZTQwYzI0NGIyYWU3NjA1ZTE3NjE3MzJkNjhlYzQ0YzllZDA3
OTJjLi4yMDQ3YWQyNGMzN2E4MGIxMTc1OGY0NGQyZjhjMGJlYzEyODU4MDZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKQEAgLTM0LDYgKzM0LDkgQEAKICNpZiBV
U0UoQ0cpCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogdHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvciog
Q0dDb2xvclJlZjsKKyNpZiBQTEFURk9STShJT1MpCit0eXBlZGVmIHN0cnVjdCBDR0NvbG9yU3Bh
Y2UqIENHQ29sb3JTcGFjZVJlZjsKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKEdUSykKQEAgLTExOCw2ICsxMjEsOCBAQCBwdWJsaWM6CiAgICAgQ29sb3Ig
bGlnaHQoKSBjb25zdDsKICAgICBDb2xvciBkYXJrKCkgY29uc3Q7CiAKKyAgICBib29sIGlzRGFy
aygpIGNvbnN0OworCiAgICAgLy8gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBQb3J0ZXIt
RHVmZidzICJzb3VyY2Utb3ZlciIgZXF1YXRpb24KICAgICBDb2xvciBibGVuZChjb25zdCBDb2xv
ciYpIGNvbnN0OwogICAgIENvbG9yIGJsZW5kV2l0aFdoaXRlKCkgY29uc3Q7CkBAIC0xNDUsNiAr
MTUwLDE1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGdyYXkgPSAweEZGQTBB
MEEwOwogICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgbGlnaHRHcmF5ID0gMHhGRkMwQzBDMDsKICAg
ICBzdGF0aWMgY29uc3QgUkdCQTMyIHRyYW5zcGFyZW50ID0gMHgwMDAwMDAwMDsKKyAgICBzdGF0
aWMgY29uc3QgUkdCQTMyIGN5YW4gPSAweEZGMDBGRkZGOworCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgdGFwID0gMHg0RDFBMUExQTsKKworICAgIC8vIEZJWE1F
OiBUaGlzIGNvbG9yIHNob3VsZG4ndCBiZSBpT1Mtc3BlY2lmaWMuIE9uY2Ugd2UgZml4IHVwIGl0
cyB1c2FnZSBpbiBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCgpCisg
ICAgLy8gd2Ugc2hvdWxkIG1vdmUgaXQgb3V0c2lkZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4g
U2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2Mjk2Pi4KKyAg
ICBzdGF0aWMgY29uc3QgUkdCQTMyIGNvbXBvc2l0aW9uRmlsbCA9IDB4M0NBRkMwRTM7CisjZW5k
aWYKIAogcHJpdmF0ZToKICAgICBSR0JBMzIgbV9jb2xvcjsKQEAgLTIwMCw2ICsyMTQsOSBAQCBp
bmxpbmUgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogCiAjaWYgVVNF
KENHKQogQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7
CisjaWYgUExBVEZPUk0oSU9TKQorQ0dDb2xvclJlZiBjcmVhdGVDR0NvbG9yV2l0aERldmljZVdo
aXRlKENHRmxvYXQgd2hpdGUsIENHRmxvYXQgYWxwaGEpOworI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCmluZGV4
IDhlMDU4MzEwOWE4ZjIwMTczMTAyODAwNjA5MTI4MDY4MzRkMGI0ZTEuLmY4OTI5ZDY5ZmQ2NjMx
ZWQ2ZjhkY2JkMDkxYTUzMTJjMjVhNzFlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCkBAIC0xMzEsMTIg
KzEzMSwxOSBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RvcEFuaW1hdGlvbkNsaWVudCgpOwogI2Vu
ZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0o
SU9TKQogcHVibGljOgogICAgIHZvaWQgZGlzcGxheUxpbmtGaXJlZChkb3VibGUgbm93U2Vjb25k
cywgZG91YmxlIG91dHB1dFRpbWVTZWNvbmRzKTsKIHByaXZhdGU6CiAgICAgQ1ZEaXNwbGF5TGlu
a1JlZiBtX2Rpc3BsYXlMaW5rOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCitwdWJsaWM6
CisgICAgdm9pZCBkaXNwbGF5TGlua0ZpcmVkKGRvdWJsZSBub3dTZWNvbmRzKTsKK3ByaXZhdGU6
CisgICAgdm9pZCogbV9kaXNwbGF5TGluazsKKyNlbmRpZgogfTsKIAogLy8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAppbmRleCA5MjE2MTcxODU1YTY5
MTk1OWYzNjEyNTdkMTQ3OTEyZTJhNDBlOWQ0Li4xNjBkMDhmMjFkZmVkMTNjM2FjZDgwZDkzZDM3
OGFiOWEyMmUzMjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5oCkBAIC00MywxMyArNDMsMTMgQEAgY2xhc3MgRmxvYXRQb2ludDsKIHR5cGVkZWYg
c3RydWN0IENHUG9pbnQgQ0dQb2ludDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lm
IFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVT
X1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogdHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50
OwogI2Vsc2UKIHR5cGVkZWYgc3RydWN0IF9OU1BvaW50IE5TUG9pbnQ7CiAjZW5kaWYKLSNlbmRp
ZgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC0xMzksMTAgKzEzOSwxMiBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3Ig
Q0dQb2ludCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllf
VFlQRVMpCiAgICAgRmxvYXRQb2ludChjb25zdCBOU1BvaW50Jik7CiAgICAgb3BlcmF0b3IgTlNQ
b2ludCgpIGNvbnN0OwogI2VuZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogI2lmIFBM
QVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgRmxvYXRQb2ludChjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6RmxvYXRQb2ludCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaAppbmRleCAxY2UyMzllNWZmN2IzZGFiMGJjYzljYzNjNmYyZjdlODJlYzQzNDM0
Li5jYzlhMDNiZWY4MDIzNTFhY2M2MGRhZWQ0YWZjZmJiNWFiNDIzNTkzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaApAQCAtMzAsMTcgKzMwLDIxIEBA
CiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lm
IFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dHZW9tZXRyeS5oPgorI2Vu
ZGlmCisKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgQ0dSZWN0OwogI2VuZGlm
CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9T
KQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiB0eXBl
ZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0OwogI2Vsc2UKIHR5cGVkZWYgc3RydWN0IF9OU1JlY3Qg
TlNSZWN0OwogI2VuZGlmCi0jZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmICFQTEFU
Rk9STShJT1MpCiAKICNpZiBQTEFURk9STShCTEFDS0JFUlJZKQogbmFtZXNwYWNlIEJsYWNrQmVy
cnkgewpAQCAtMTgxLDEwICsxODUsMTIgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIENHUmVjdCgp
IGNvbnN0OwogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpCiAg
ICAgRmxvYXRSZWN0KGNvbnN0IE5TUmVjdCYpOwogICAgIG9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0
OwogI2VuZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogI2lmIFVTRShDQUlSTykKICAg
ICBGbG9hdFJlY3QoY29uc3QgY2Fpcm9fcmVjdGFuZ2xlX3QmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKaW5kZXggMGZhOGNjMWQ3NmIwYTEzYzkzNmVk
NjFlZjA1OTRkMzkyNThjYjVjYy4uOTUyYTI5MDQ0YWRjOTlhZWUxNzJjNmJkYjRkZjg1N2E0MTI4
YmY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRT
aXplLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgK
QEAgLTM5LDE3ICszOSwyMSBAQCBjbGFzcyBGbG9hdFNpemU7CiB9CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKElPUykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5k
aWYKKwogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHU2l6ZSBDR1NpemU7CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1Mp
CiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5cGVk
ZWYgc3RydWN0IENHU2l6ZSBOU1NpemU7CiAjZWxzZQogdHlwZWRlZiBzdHJ1Y3QgX05TU2l6ZSBO
U1NpemU7CiAjZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRG
T1JNKElPUykKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMjIsMTAgKzEyNiwxMiBAQCBw
dWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dTaXplKCkgY29uc3Q7CiAjZW5kaWYKIAorI2lmICFQTEFU
Rk9STShJT1MpCiAjaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBF
U19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKQogICAgIGV4cGxpY2l0IEZsb2F0U2l6ZShjb25z
dCBOU1NpemUgJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5
CiAgICAgb3BlcmF0b3IgTlNTaXplKCkgY29uc3Q7CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZP
Uk0oSU9TKQogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IGEyYjgwYTBlMTc5MmVk
YWQ2YjU4NWNhZmNhZjZhMWIyNTkxYTZjMzQuLmYzYmJkNzIxZDZiNWM2Yjc3OTQwOWE2OTJjZTA1
ZDM0MzljOTRhOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
CkBAIC01MCw2ICs1MCw4IEBAIHRlbXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQdHI8V2ViQ29y
ZTo6VGV4dExheW91dD4oV2ViQ29yZTo6VGV4dExheW91dCogcHRyKQogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK3N0YXRpYyBQYXNzUmVmPEZvbnRHbHlwaHM+IHJldHJpZXZlT3JBZGRDYWNoZWRG
b250R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9y
Pik7CisKIGNvbnN0IHVpbnQ4X3QgRm9udDo6c19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsy
NTZdID0gewogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgLypcdCovLCAxIC8qXG4q
LywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwKICAgICAxIC8qc3BhY2UqLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMSAvKi0qLywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMSAvKj8qLywKQEAgLTEwNyw3ICsxMDksMTUgQEAgRm9udDo6Rm9udCgpCiB7CiB9
CiAKKworCisvLyBGSVhNRTogV2Ugc2hvdWxkIHJlY29uY2lsZSB0aGUgZGlmZmVyZW5jZSBpbiBk
YXRhdHlwZSBiZXR3ZWVuIGlPUyBhbmQgT3BlblNvdXJjZS4gT24gaU9TIHdlIHdhbnQgbGV0dGVy
LCB3b3JkIHNwYWNpbmcKKy8vIHRvIGJlIGZsb2F0IGZvciBzdWItcGl4ZWwga2VybmluZy4gU2Vl
IDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MDY+LgorI2lmICFQ
TEFURk9STShJT1MpCiBGb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIHNob3J0
IGxldHRlclNwYWNpbmcsIHNob3J0IHdvcmRTcGFjaW5nKSAKKyNlbHNlCitGb250OjpGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRT
cGFjaW5nKSAKKyNlbmRpZgogICAgIDogbV9mb250RGVzY3JpcHRpb24oZmQpCiAgICAgLCBtX2xl
dHRlclNwYWNpbmcobGV0dGVyU3BhY2luZykKICAgICAsIG1fd29yZFNwYWNpbmcod29yZFNwYWNp
bmcpCkBAIC0xMTYsNiArMTI2LDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGZkLCBzaG9ydCBsZXR0ZXJTcGFjaW5nLCBzaG9ydCB3b3JkU3BhY2luZykKIHsKIH0KIAorLy8g
RklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5kZXBlbmRl
bnQuCiBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29sIGlz
UHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogICAgIDog
bV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKICAg
ICAsIG1fbGV0dGVyU3BhY2luZygwKQpAQCAtMTI1LDggKzEzNiwzMiBAQCBGb250OjpGb250KGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZvbnQsIEZvbnRT
bW9vdGhpbmdNbwogewogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGlz
UHJpbnRlckZvbnQpOwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldEZvbnRTbW9vdGhpbmcoZm9u
dFNtb290aGluZ01vZGUpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2ZvbnREZXNjcmlwdGlv
bi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7CisgICAg
bV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEu
Zm9udCgpKSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXRhbGljKENURm9udEdldFN5bWJv
bGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRJdGFsaWMpOworICAgIG1f
Zm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERh
dGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2Vp
Z2h0Tm9ybWFsKTsKKyNlbmRpZgogfQogCisvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBj
b25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KKyNpZiBQTEFURk9STShJT1MpCitGb250
OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRT
ZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQorICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRl
Rm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKKyAgICAsIG1fbGV0dGVyU3BhY2luZygwKQorICAg
ICwgbV93b3JkU3BhY2luZygwKQorICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVU
eXBlc2V0dGluZ0ZlYXR1cmVzKCkpCit7CisgICAgQ1RGb250UmVmIHByaW1hcnlGb250ID0gZm9u
dERhdGEuZm9udCgpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RG
b250R2V0U2l6ZShwcmltYXJ5Rm9udCkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlGb250KSk7CisgICAgbV9mb250RGVzY3JpcHRp
b24uc2V0SXRhbGljKENURm9udEdldFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZv
bnRUcmFpdEl0YWxpYyk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRH
ZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRX
ZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0
VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmludGVyRm9udCgpKTsKKyAgICBtX2dseXBocyA9
IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2Vs
ZWN0b3IuZ2V0KCkpOworfQorI2VuZGlmCisKIEZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIp
CiAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbihvdGhlci5tX2ZvbnREZXNjcmlwdGlvbikKICAgICAs
IG1fZ2x5cGhzKG90aGVyLm1fZ2x5cGhzKQpAQCAtMjk3LDE0ICszMzIsMTQgQEAgdm9pZCBGb250
Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikgY29uc3QKICAg
ICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgPSBjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpOwog
fQogCi12b2lkIEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bywg
Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikgY29uc3QK
K2Zsb2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bywgQ3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikgY29uc3QKIHsK
ICAgICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdoaWxlIHdlIGFyZSB1c2luZyBjdXN0b20gZm9u
dHMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9hZGluZywKICAgICAvLyBleGNlcHQgaWYg
dGhlICdmb3JjZScgYXJndW1lbnQgaXMgc2V0IHRvIHRydWUgKGluIHdoaWNoIGNhc2UgaXQgd2ls
bCB1c2UgYSBmYWxsYmFjawogICAgIC8vIGZvbnQpLgogICAgIGlmIChsb2FkaW5nQ3VzdG9tRm9u
dHMoKSAmJiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPT0gRG9Ob3RQYWludElmRm9udE5vdFJl
YWR5KQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgICAgIHJldHVybiAwOworCiAgICAgdG8g
PSAodG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0byk7CiAKICAgICBpZiAoY29kZVBhdGgocnVu
KSAhPSBDb21wbGV4KQpAQCAtMzQwLDcgKzM3NSw3IEBAIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0
IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
CiAgICAgfQogCiAgICAgYm9vbCBoYXNLZXJuaW5nT3JMaWdhdHVyZXMgPSB0eXBlc2V0dGluZ0Zl
YXR1cmVzKCkgJiAoS2VybmluZyB8IExpZ2F0dXJlcyk7Ci0gICAgYm9vbCBoYXNXb3JkU3BhY2lu
Z09yTGV0dGVyU3BhY2luZyA9IHdvcmRTcGFjaW5nKCkgfCBsZXR0ZXJTcGFjaW5nKCk7CisgICAg
Ym9vbCBoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZyA9IHdvcmRTcGFjaW5nKCkgfHwgbGV0
dGVyU3BhY2luZygpOwogICAgIGZsb2F0KiBjYWNoZUVudHJ5ID0gbV9nbHlwaHMtPndpZHRoQ2Fj
aGUoKS5hZGQocnVuLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCksIGhh
c0tlcm5pbmdPckxpZ2F0dXJlcywgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcsIGdseXBo
T3ZlcmZsb3cpOwogICAgIGlmIChjYWNoZUVudHJ5ICYmICFzdGQ6OmlzbmFuKCpjYWNoZUVudHJ5
KSkKICAgICAgICAgcmV0dXJuICpjYWNoZUVudHJ5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5oCmluZGV4IGMzZjM3MDY2NjZiZGNmYThmNDEzODU5NjJmMmNmZWRiMDU3YTk4
ZTUuLjFlMTY0OGE5NDMwOTkzMTg3NThiZGNmNDJlM2RmMDExNGFkOGI4ZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTc5LDkgKzc5LDIxIEBAIHN0cnVjdCBH
bHlwaE92ZXJmbG93IHsKIGNsYXNzIEZvbnQgewogcHVibGljOgogICAgIEZvbnQoKTsKKworICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgcmVjb25jaWxlIHRoZSBkaWZmZXJlbmNlIGluIGRhdGF0eXBl
IGJldHdlZW4gaU9TIGFuZCBPcGVuU291cmNlLiBPbiBpT1Mgd2Ugd2FudCBsZXR0ZXIsIHdvcmQg
c3BhY2luZworICAgIC8vIHRvIGJlIGZsb2F0IGZvciBzdWItcGl4ZWwga2VybmluZy4gU2VlIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MDY+LgorI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaG9ydCBsZXR0ZXJT
cGFjaW5nLCBzaG9ydCB3b3JkU3BhY2luZyk7CisjZWxzZQorICAgIEZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpOworI2Vu
ZGlmCiAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBvbmx5IHVzZWQgaWYgdGhlIHBsYXRmb3Jt
IHdhbnRzIHRvIHN0YXJ0IHdpdGggYSBuYXRpdmUgZm9udC4KICAgICBGb250KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmLCBib29sIGlzUHJpbnRpbmcsIEZvbnRTbW9vdGhpbmdNb2RlID0gQXV0b1Nt
b290aGluZyk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3Rv
ciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KKyNpZiBQTEFURk9STShJT1MpCisgICAgRm9udChjb25z
dCBGb250UGxhdGZvcm1EYXRhJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKKyNlbmRpZgog
ICAgIH5Gb250KCk7CiAKICAgICBGb250KGNvbnN0IEZvbnQmKTsKQEAgLTk4LDcgKzExMCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pIGNvbnN0
OwogCiAgICAgZW51bSBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24geyBEb05vdFBhaW50SWZGb250
Tm90UmVhZHksIFVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkgfTsKLSAgICB2b2lkIGRyYXdUZXh0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50
IGZyb20gPSAwLCBpbnQgdG8gPSAtMSwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQ
YWludElmRm9udE5vdFJlYWR5KSBjb25zdDsKKyAgICBmbG9hdCBkcmF3VGV4dChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwg
aW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IERvTm90UGFpbnRJZkZvbnRO
b3RSZWFkeSkgY29uc3Q7CiAgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CiAKICAgICBEYXNoQXJy
YXkgZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFJlY3Qm
IGxpbmVFeHRlbnRzKSBjb25zdDsKQEAgLTExNSwxMCArMTI3LDE5IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNTbWFsbENhcHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5zbWFs
bENhcHMoKTsgfQogCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWNvbmNpbGUgdGhlIGRpZmZl
cmVuY2UgaW4gZGF0YXR5cGUgYmV0d2VlbiBpT1MgYW5kIE9wZW5Tb3VyY2UuIE9uIGlPUyB3ZSB3
YW50IGxldHRlciwgd29yZCBzcGFjaW5nCisgICAgLy8gdG8gYmUgZmxvYXQgZm9yIHN1Yi1waXhl
bCBrZXJuaW5nLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDYwNj4uCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBzaG9ydCB3b3JkU3BhY2luZygpIGNvbnN0
IHsgcmV0dXJuIG1fd29yZFNwYWNpbmc7IH0KICAgICBzaG9ydCBsZXR0ZXJTcGFjaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9CiAgICAgdm9pZCBzZXRXb3JkU3BhY2luZyhz
aG9ydCBzKSB7IG1fd29yZFNwYWNpbmcgPSBzOyB9CiAgICAgdm9pZCBzZXRMZXR0ZXJTcGFjaW5n
KHNob3J0IHMpIHsgbV9sZXR0ZXJTcGFjaW5nID0gczsgfQorI2Vsc2UKKyAgICBmbG9hdCB3b3Jk
U3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fd29yZFNwYWNpbmc7IH0KKyAgICBmbG9hdCBsZXR0
ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9CisgICAgdm9pZCBz
ZXRXb3JkU3BhY2luZyhmbG9hdCBzKSB7IG1fd29yZFNwYWNpbmcgPSBzOyB9CisgICAgdm9pZCBz
ZXRMZXR0ZXJTcGFjaW5nKGZsb2F0IHMpIHsgbV9sZXR0ZXJTcGFjaW5nID0gczsgfQorI2VuZGlm
CiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKICAgICBib29sIGlzUHJpbnRlckZvbnQo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgpOyB9CiAg
ICAgYm9vbCBpc1NWR0ZvbnQoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udCgpLT5pc1NWR0Zv
bnQoKTsgfQpAQCAtMTgwLDEwICsyMDEsMTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIFJldHVybnMg
dGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCiAgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2
YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlw
aEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25z
dDsKLSAgICB2b2lkIGRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgZmxv
YXQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGlu
dCB0bykgY29uc3Q7CiAgICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IHRvLCBj
b25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3QgRmxv
YXRQb2ludCYpIGNvbnN0OworICAgIHZvaWQgZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIEZsb2F0UG9pbnQmKSBjb25z
dDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdDsKICAgICBmbG9hdCBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25z
dCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRz
ID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRp
b25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNs
dWRlUGFydGlhbEdseXBocykgY29uc3Q7CkBAIC0xOTYsNyArMjE3LDcgQEAgcHJpdmF0ZToKIAog
ICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCiAgICAgZmxvYXQg
Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZy
b20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRl
eHRFbXBoYXNpcykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdDsKKyAgICBmbG9hdCBkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsK
ICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQ
b2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBpbnQg
b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9z
aXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwpAQCAtMzA0LDggKzMyNSwx
MyBAQCBwcml2YXRlOgogCiAgICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9uOwog
ICAgIG11dGFibGUgUmVmUHRyPEZvbnRHbHlwaHM+IG1fZ2x5cGhzOworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgc2hvcnQgbV9sZXR0ZXJTcGFjaW5nOwogICAgIHNob3J0IG1fd29yZFNwYWNpbmc7
CisjZWxzZQorICAgIGZsb2F0IG1fbGV0dGVyU3BhY2luZzsKKyAgICBmbG9hdCBtX3dvcmRTcGFj
aW5nOworI2VuZGlmCiAgICAgbXV0YWJsZSBib29sIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7
CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgOiAyOyAvLyAoVHlw
ZXNldHRpbmdGZWF0dXJlcykgQ2FjaGVzIHZhbHVlcyBjb21wdXRlZCBmcm9tIG1fZm9udERlc2Ny
aXB0aW9uLgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuY3BwCmluZGV4IGVkN2EyMDJkY2QwOTg5NjFjY2Y4ZjY0YTBlZjdmNGQwODEzZGJmMWUuLmZi
ZThiZjQ0ZmQzN2RlY2Y0ZDkzNDRhODNiZmY0MDljOTA5YjM2YmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcApAQCAtNDUsMTQgKzQ1LDUwIEBA
CiAjaW5jbHVkZSAiT3BlblR5cGVWZXJ0aWNhbERhdGEuaCIKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oSU9TKQorI2luY2x1ZGUgIk1lbW9yeVByZXNzdXJlSGFuZGxlci5oIgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorCisvLyBGSVhNRTogV2UgbWF5IGJlIGFibGUgdG8gc2ltcGxpZnkg
dGhpcyBjb2RlIHVzaW5nIEMrKzExIHRocmVhZGluZyBwcmltaXRpdmVzLCBpbmNsdWRpbmcgc3Rk
OjpjYWxsX29uY2UoKS4KK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgZm9udERhdGFMb2NrOworCitz
dGF0aWMgdm9pZCBpbml0Rm9udENhY2hlTG9ja09uY2UoKQoreworICAgIHB0aHJlYWRfbXV0ZXhh
dHRyX3QgbXV0ZXhBdHRyaWJ1dGU7CisgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmbXV0ZXhB
dHRyaWJ1dGUpOworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJm11dGV4QXR0cmlidXRl
LCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7CisgICAgcHRocmVhZF9tdXRleF9pbml0KCZmb250
RGF0YUxvY2ssICZtdXRleEF0dHJpYnV0ZSk7CisgICAgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJv
eSgmbXV0ZXhBdHRyaWJ1dGUpOworfQorCitzdGF0aWMgcHRocmVhZF9vbmNlX3QgaW5pdEZvbnRM
b2NrQ29udHJvbCA9IFBUSFJFQURfT05DRV9JTklUOworCitjbGFzcyBGb250TG9ja2VyIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250TG9ja2VyKTsKK3B1YmxpYzoKKyAgICBGb250TG9j
a2VyKCkKKyAgICB7CisgICAgICAgIHB0aHJlYWRfb25jZSgmaW5pdEZvbnRMb2NrQ29udHJvbCwg
aW5pdEZvbnRDYWNoZUxvY2tPbmNlKTsKKyAgICAgICAgaW50IGxvY2tjb2RlID0gcHRocmVhZF9t
dXRleF9sb2NrKCZmb250RGF0YUxvY2spOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VO
VVNFRChsb2NrY29kZSwgIWxvY2tjb2RlLCAiZm9udERhdGFMb2NrIGxvY2sgZmFpbGVkIHdpdGgg
Y29kZTolZCIsIGxvY2tjb2RlKTsgICAgCisgICAgfQorICAgIH5Gb250TG9ja2VyKCkKKyAgICB7
CisgICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZmb250RGF0YUxv
Y2spOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2NrY29kZSwgIWxvY2tj
b2RlLCAiZm9udERhdGFMb2NrIHVubG9jayBmYWlsZWQgd2l0aCBjb2RlOiVkIiwgbG9ja2NvZGUp
OworICAgIH0KK307CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiB1c2luZyBuYW1lc3BhY2Ug
V1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBXZSBzaG91bGQgcmV0dXJu
IGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyIHNpbmNlIHdlIG5ldmVyIHJldHVybiBh
IG51bGxwdHIuCiBGb250Q2FjaGUqIGZvbnRDYWNoZSgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChGb250Q2FjaGUsIGdsb2JhbEZvbnRDYWNoZSwgKCkpOwotICAgIHJldHVybiAmZ2xvYmFs
Rm9udENhY2hlOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FjaGU+IGdsb2JhbEZv
bnRDYWNoZTsKKyAgICByZXR1cm4gJmdsb2JhbEZvbnRDYWNoZS5nZXQoKTsKIH0KIAogRm9udENh
Y2hlOjpGb250Q2FjaGUoKQpAQCAtMTg0LDYgKzIyMCwxMCBAQCBGb250UGxhdGZvcm1EYXRhKiBG
b250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcGFzc2VkRmFtaWx5TmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNoZWNraW5nQWx0
ZXJuYXRlTmFtZSkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgRm9udExvY2tlciBmb250TG9j
a2VyOworI2VuZGlmCisgICAgCiAjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE9QRU5UWVBFX1ZF
UlRJQ0FMKQogICAgIC8vIExlYWRpbmcgIkAiIGluIHRoZSBmb250IG5hbWUgZW5hYmxlcyBXaW5k
b3dzIHZlcnRpY2FsIGZsb3cgZmxhZyBmb3IgdGhlIGZvbnQuCiAgICAgLy8gQmVjYXVzZSB3ZSBk
byB2ZXJ0aWNhbCBmbG93IGJ5IG91cnNlbHZlcywgd2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIFdp
bmRvd3MgZmVhdHVyZS4KQEAgLTMxNyw4ICszNTcsMTUgQEAgdHlwZWRlZiBIYXNoTWFwPEZvbnRQ
bGF0Zm9ybURhdGEsIHN0ZDo6cGFpcjxSZWZQdHI8U2ltcGxlRm9udERhdGE+LCB1bnNpZ25lZD4s
IEYKIAogc3RhdGljIEZvbnREYXRhQ2FjaGUqIGdGb250RGF0YUNhY2hlID0gMDsKIAorI2lmIFBM
QVRGT1JNKElPUykKK2NvbnN0IGludCBjTWF4SW5hY3RpdmVGb250RGF0YSA9IDEyMDsKK2NvbnN0
IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDEwMDsKK2NvbnN0IGludCBjTWF4VW5kZXJN
ZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsKK2NvbnN0IGludCBjVGFyZ2V0VW5k
ZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsKKyNlbHNlCiBjb25zdCBpbnQg
Y01heEluYWN0aXZlRm9udERhdGEgPSAyMjU7CiBjb25zdCBpbnQgY1RhcmdldEluYWN0aXZlRm9u
dERhdGEgPSAyMDA7CisjZW5kaWYKIHN0YXRpYyBMaXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9u
dERhdGE+PiogZ0luYWN0aXZlRm9udERhdGEgPSAwOwogCiBQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgYm9vbCBjaGVja2lu
Z0FsdGVybmF0ZU5hbWUsIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCkBAIC0zNDAsNiArMzg3
LDEwIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9u
dERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSoKICAgICAgICAgQVNTRVJUKG1fcHVyZ2VQcmV2
ZW50Q291bnQpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgRm9udExvY2tlciBm
b250TG9ja2VyOworI2VuZGlmCisgICAgCiAgICAgaWYgKCFnRm9udERhdGFDYWNoZSkgewogICAg
ICAgICBnRm9udERhdGFDYWNoZSA9IG5ldyBGb250RGF0YUNhY2hlOwogICAgICAgICBnSW5hY3Rp
dmVGb250RGF0YSA9IG5ldyBMaXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+PjsKQEAg
LTM4MCw2ICs0MzEsMTAgQEAgdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEpCiAgICAgQVNTRVJUKGdGb250RGF0YUNhY2hlKTsKICAg
ICBBU1NFUlQoIWZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7CiAKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgRm9udExvY2tlciBmb250TG9ja2VyOworI2VuZGlmCisgICAgCiAgICAgRm9udERhdGFD
YWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+ZmluZChmb250RGF0YS0+cGxhdGZv
cm1EYXRhKCkpOwogICAgIEFTU0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpOwogICAg
IGlmIChpdCA9PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpCkBAIC0zOTIsOCArNDQ3LDE3IEBAIHZv
aWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKQog
eworI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIHVuZGVyTWVtb3J5UHJlc3N1cmUgPSBtZW1v
cnlQcmVzc3VyZUhhbmRsZXIoKS5oYXNSZWNlaXZlZE1lbW9yeVByZXNzdXJlKCk7CisgICAgaW50
IGluYWN0aXZlRm9udERhdGFMaW1pdCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUgPyBjTWF4VW5kZXJN
ZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgOiBjTWF4SW5hY3RpdmVGb250RGF0YTsKKyAg
ICBpbnQgdGFyZ2V0Rm9udERhdGFMaW1pdCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUgPyBjVGFyZ2V0
VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgOiBjVGFyZ2V0SW5hY3RpdmVGb250
RGF0YTsKKworICAgIGlmIChnSW5hY3RpdmVGb250RGF0YSAmJiAhbV9wdXJnZVByZXZlbnRDb3Vu
dCAmJiBnSW5hY3RpdmVGb250RGF0YS0+c2l6ZSgpID4gaW5hY3RpdmVGb250RGF0YUxpbWl0KQor
ICAgICAgICBwdXJnZUluYWN0aXZlRm9udERhdGEoZ0luYWN0aXZlRm9udERhdGEtPnNpemUoKSAt
IHRhcmdldEZvbnREYXRhTGltaXQpOworI2Vsc2UKICAgICBpZiAoZ0luYWN0aXZlRm9udERhdGEg
JiYgIW1fcHVyZ2VQcmV2ZW50Q291bnQgJiYgZ0luYWN0aXZlRm9udERhdGEtPnNpemUoKSA+IGNN
YXhJbmFjdGl2ZUZvbnREYXRhKQogICAgICAgICBwdXJnZUluYWN0aXZlRm9udERhdGEoZ0luYWN0
aXZlRm9udERhdGEtPnNpemUoKSAtIGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhKTsKKyNlbmRpZgog
fQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBjb3VudCkKQEAg
LTQwOSw2ICs0NzMsMTAgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShp
bnQgY291bnQpCiAKICAgICBpc1B1cmdpbmcgPSB0cnVlOwogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIEZvbnRMb2NrZXIgZm9udExvY2tlcjsKKyNlbmRpZgorCiAgICAgVmVjdG9yPFJlZlB0cjxT
aW1wbGVGb250RGF0YT4sIDIwPiBmb250RGF0YVRvRGVsZXRlOwogICAgIExpc3RIYXNoU2V0PFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4+OjppdGVyYXRvciBlbmQgPSBnSW5hY3RpdmVGb250RGF0YS0+
ZW5kKCk7CiAgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPFNpbXBsZUZvbnREYXRhPj46Oml0ZXJhdG9y
IGl0ID0gZ0luYWN0aXZlRm9udERhdGEtPmJlZ2luKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCmluZGV4IGI1Y2YwOTE2Yzc3YjQzNTNlMzNjMzgxODJm
OThlYTFkMWE2NDI4NTUuLjU2NzAyZWQzNDI5ZmRkNzFjNjNjN2U4MzIwOWY4N2YyM2Q4NjY2MDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0z
MywxMiArMzMsMTcgQEAKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlIDxs
aW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKKyNpZiBQTEFURk9S
TShJT1MpCisjaW5jbHVkZSA8Q29yZVRleHQvQ1RGb250Lmg+CisjZW5kaWYKKwogI2lmIE9TKFdJ
TkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPG9iamlkbC5oPgpAQCAtMTAw
LDkgKzEwNSw5IEBAIHN0cnVjdCBGb250RGVzY3JpcHRpb25Gb250RGF0YUNhY2hlS2V5IHsKIH07
CiAKIGNsYXNzIEZvbnRDYWNoZSB7Ci0gICAgZnJpZW5kIGNsYXNzIEZvbnRDYWNoZVB1cmdlUHJl
dmVudGVyOwotCiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udENhY2hlKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgZnJpZW5kIGNsYXNzIEZvbnRDYWNoZVB1cmdlUHJldmVudGVy
OworICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxGb250Q2FjaGU+OwogcHVibGljOgog
ICAgIGZyaWVuZCBGb250Q2FjaGUqIGZvbnRDYWNoZSgpOwogCkBAIC0xMTcsNiArMTIyLDkgQEAg
cHVibGljOgogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIHZv
aWQgcGxhdGZvcm1Jbml0KCk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhdGljIGZsb2F0
IHdlaWdodE9mQ1RGb250KENURm9udFJlZik7CisjZW5kaWYKICNpZiBQTEFURk9STShXSU4pCiAg
ICAgSU1MYW5nRm9udExpbmtUeXBlKiBnZXRGb250TGlua0ludGVyZmFjZSgpOwogICAgIHN0YXRp
YyB2b2lkIGNvbUluaXRpYWxpemUoKTsKQEAgLTE3OCw2ICsxODYsMTAgQEAgcHJpdmF0ZToKICAg
ICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0
ZXJuYXRlTmFtZSA9IGZhbHNlKTsKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVu
dGVkIGJ5IGVhY2ggcGxhdGZvcm0uCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEZvbnRQbGF0Zm9y
bURhdGEqIGdldEN1c3RvbUZhbGxiYWNrRm9udChjb25zdCBVSW50MzIsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYpOworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldFN5c3RlbUZvbnRG
YWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU2ltcGxl
Rm9udERhdGEqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCk7CisjZW5kaWYK
ICAgICBQYXNzT3duUHRyPEZvbnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOwogI2lm
IFBMQVRGT1JNKE1BQykKICAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1pbGFyRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKTsKQEAgLTE5Myw2ICsyMDUsOSBA
QCBwcml2YXRlOgogI2VuZGlmCiAgICAgZnJpZW5kIGNsYXNzIFNpbXBsZUZvbnREYXRhOyAvLyBG
b3IgZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSopCiAgICAgZnJpZW5k
IGNsYXNzIEZvbnRHbHlwaHM7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGZyaWVuZCBjbGFzcyBD
b21wbGV4VGV4dENvbnRyb2xsZXI7CisjZW5kaWYKIH07CiAKIC8vIEdldCB0aGUgZ2xvYmFsIGZv
bnRDYWNoZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRGYXN0UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFz
dFBhdGguY3BwCmluZGV4IDA3NDAxNzM1ZDczMWUyYmM0YjFkYzQzYTM4YzQ1NjFjMzdhMzJkZTUu
Ljk1NjM0MzczZTk1NTdhNDk1MDI5YjJmOTBhMDRjMGFhMzQwY2I2MGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcApAQCAtMTU4LDcg
KzE1OCw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQKICAgICByZXR1cm4gYmVmb3JlV2lkdGg7
CiB9CiAKLXZvaWQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRz
IG91ciBnbHlwaHMrYWR2YW5jZXMrZm9udCBkYXRhIGZvciBlYWNoIGdseXBoLgogICAgIEdseXBo
QnVmZmVyIGdseXBoQnVmZmVyOwpAQCAtMTY2LDEwICsxNjYsMTIgQEAgdm9pZCBGb250OjpkcmF3
U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmwKICAgICBmbG9hdCBzdGFydFggPSBwb2ludC54KCkgKyBnZXRHbHlwaHNBbmRBZHZh
bmNlc0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIpOwogCiAgICAgaWYg
KGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
MDsKIAogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChzdGFydFgsIHBvaW50LnkoKSk7CiAgICAg
ZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQpOwor
CisgICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3RhcnRYOwogfQogCiB2b2lkIEZvbnQ6OmRy
YXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKQEAgLTE4Myw4ICsxODUsOCBAQCB2
b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFRleHRSdQogICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1
biwgZ2x5cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFu
Y2UsIHBvaW50LnkoKSkpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLXsgICAKK3ZvaWQg
Rm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZsb2F0UG9pbnQmIHBv
aW50KSBjb25zdAorewogI2lmICFFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIFVOVVNFRF9QQVJBTShy
dW4pOwogI2VuZGlmCkBAIC0yMjYsOSArMjI4LDExIEBAIHZvaWQgRm9udDo6ZHJhd0dseXBoQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBH
CiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCAmJiBmb250
RGF0YS0+aXNTVkdGb250KCkpCiAgICAgICAgIHJlbmRlcmluZ0NvbnRleHQtPmRyYXdTVkdHbHlw
aHMoY29udGV4dCwgZm9udERhdGEsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0g
bGFzdEZyb20sIHN0YXJ0UG9pbnQpOwotICAgIGVsc2UKKyAgICBlbHNlIHsKICNlbmRpZgogICAg
ICAgICBkcmF3R2x5cGhzKGNvbnRleHQsIGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20s
IG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50KTsKKyAgICAgICAgcG9pbnQuc2V0WChu
ZXh0WCk7CisgICAgfQogfQogCiBpbmxpbmUgc3RhdGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZH
bHlwaChjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIEdseXBoIGdseXBoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCmluZGV4IDI5ZWRkZTc5
MDlmNGQ2NDM0MjVjODJmNDI4MDlmM2JkMjEyZWM3NTkuLjRjNzBkN2RmMjdhOWZlNTZmZDE0NGZh
ZDc5MTc4ZTU3ZTE0YTMyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRHbHlwaHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250R2x5cGhzLmgKQEAgLTI3LDYgKzI3LDEwIEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2lu
Y2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEdseXBoUGFnZVRyZWVOb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAppbmRleCAyMWJlYTM3MzU4NjMzZWVh
Mjc2YjY3ZjkzMGE0MDRiYWEwM2U1MjVjLi41MzA4ZWJkZmU1YzUyNTcwMWI5NWZhMzYxZWQzZTcw
NTQxMjJhNmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250UGxhdGZvcm1EYXRhLmNwcApAQCAtMzMsNiArMzMsOSBAQCBGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKICAgICA6
IG1fc3ludGhldGljQm9sZChmYWxzZSkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkK
ICAgICAsIG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkKKyNpZiBQTEFURk9STShJT1MpCisgICAg
LCBtX2lzRW1vamkoZmFsc2UpCisjZW5kaWYKICAgICAsIG1fc2l6ZSgwKQogICAgICwgbV93aWR0
aFZhcmlhbnQoUmVndWxhcldpZHRoKQogI2lmIFBMQVRGT1JNKFdJTikKQEAgLTYwLDYgKzYzLDkg
QEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSgpCiAgICAgOiBtX3N5bnRoZXRp
Y0JvbGQoZmFsc2UpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCiAgICAgLCBtX29y
aWVudGF0aW9uKEhvcml6b250YWwpCisjaWYgUExBVEZPUk0oSU9TKQorICAgICwgbV9pc0Vtb2pp
KGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX3NpemUoMCkKICAgICAsIG1fd2lkdGhWYXJpYW50KFJl
Z3VsYXJXaWR0aCkKICNpZiBPUyhEQVJXSU4pCkBAIC04NSw2ICs5MSw5IEBAIEZvbnRQbGF0Zm9y
bURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpCiAgICAgOiBtX3N5bnRoZXRpY0JvbGQoc3ludGhldGljQm9sZCkKICAgICAs
IG1fc3ludGhldGljT2JsaXF1ZShzeW50aGV0aWNPYmxpcXVlKQogICAgICwgbV9vcmllbnRhdGlv
bihvcmllbnRhdGlvbikKKyNpZiBQTEFURk9STShJT1MpCisgICAgLCBtX2lzRW1vamkoZmFsc2Up
CisjZW5kaWYKICAgICAsIG1fc2l6ZShzaXplKQogICAgICwgbV93aWR0aFZhcmlhbnQod2lkdGhW
YXJpYW50KQogI2lmIE9TKERBUldJTikKQEAgLTExMSw2ICsxMjAsOSBAQCBGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiBjZ0ZvbnQsIGZsb2F0IHNpemUsIGJvb2wg
c3ludGhldGljQgogICAgIDogbV9zeW50aGV0aWNCb2xkKHN5bnRoZXRpY0JvbGQpCiAgICAgLCBt
X3N5bnRoZXRpY09ibGlxdWUoc3ludGhldGljT2JsaXF1ZSkKICAgICAsIG1fb3JpZW50YXRpb24o
b3JpZW50YXRpb24pCisjaWYgUExBVEZPUk0oSU9TKQorICAgICwgbV9pc0Vtb2ppKGZhbHNlKQor
I2VuZGlmCiAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAsIG1fd2lkdGhWYXJpYW50KHdpZHRoVmFy
aWFudCkKICAgICAsIG1fZm9udCgwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDcwMGRiOTVkMDNlOWZlMzFjM2YxNjRh
NDhiMDE5NTMxZjNjNWI5NTIuLjA1ZGZjYzMzYzgxODM1NDY2OTVhNGY3NWE1NTdmNDYwNTA1MjQ2
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0
Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxh
dGZvcm1EYXRhLmgKQEAgLTQ5LDYgKzQ5LDEwIEBACiAjaWYgT1MoREFSV0lOKQogT0JKQ19DTEFT
UyBOU0ZvbnQ7CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ29y
ZUdyYXBoaWNzLmg+CisjZW5kaWYKKwogdHlwZWRlZiBzdHJ1Y3QgQ0dGb250KiBDR0ZvbnRSZWY7
CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NURm9udCogQ1RGb250UmVmOwogI2VuZGlmCkBAIC03
OSw3ICs4Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotI2lmIE9TKERBUldJTikKKyNpZiBPUyhEQVJXSU4pICYm
IFVTRShBUFBLSVQpCiBpbmxpbmUgQ1RGb250UmVmIHRvQ1RGb250UmVmKE5TRm9udCAqbnNGb250
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PENURm9udFJlZj4obnNGb250KTsgfQogI2VuZGlm
CiAKQEAgLTkyLDggKzk2LDE0IEBAIHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0
IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250T3Jp
ZW50YXRpb24gPSBIb3Jpem9udGFsLCBGb250V2lkdGhWYXJpYW50ID0gUmVndWxhcldpZHRoKTsK
IAogI2lmIE9TKERBUldJTikKKyNpZiBVU0UoQVBQS0lUKQogICAgIEZvbnRQbGF0Zm9ybURhdGEo
TlNGb250KiwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJGb250ID0gZmFsc2UsIGJvb2wgc3lu
dGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBmYWxzZSwKICAgICAg
ICAgICAgICAgICAgICAgIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZh
cmlhbnQgPSBSZWd1bGFyV2lkdGgpOworI2Vsc2UKKyAgICBGb250UGxhdGZvcm1EYXRhKENURm9u
dFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJGb250ID0gZmFsc2UsIGJvb2wgc3ludGhl
dGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBmYWxzZSwKKyAgICAgICAg
ICAgICAgICAgICAgIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlh
bnQgPSBSZWd1bGFyV2lkdGgpOworI2VuZGlmCisKICNpZiBVU0UoQ0cpCiAgICAgRm9udFBsYXRm
b3JtRGF0YShDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBz
eW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQpOwogI2Vu
ZGlmCkBAIC0xMDcsMTEgKzExNywxOCBAQCBwdWJsaWM6CiAjZW5kaWYKICNlbmRpZgogCisjaWYg
UExBVEZPUk0oSU9TKQorICAgIEZvbnRQbGF0Zm9ybURhdGEoQ1RGb250UmVmLCBmbG9hdCBzaXpl
LCBib29sIHN5bnRoZXRpY0JvbGQgPSBmYWxzZSwgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gZmFs
c2UsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1
bGFyV2lkdGgpOworI2VuZGlmCisKICAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOwogCiAjaWYgUExB
VEZPUk0oV0lOKQogICAgIEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250ID8gbV9m
b250LT5nZXQoKSA6IDA7IH0KICAgICBib29sIHVzZUdESSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
R0RJOyB9CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgQ1RGb250UmVmIGZvbnQoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnQ7IH0KKyAgICB2b2lkIHNldEZvbnQoQ1RGb250UmVmKTsKICNlbGlmIE9T
KERBUldJTikKICAgICBOU0ZvbnQqIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KICAg
ICB2b2lkIHNldEZvbnQoTlNGb250Kik7CkBAIC0xMjIsNyArMTM5LDEyIEBAIHB1YmxpYzoKICAg
ICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1cm4gbV9jZ0ZvbnQuZ2V0KCk7IH0KICAg
ICBDVEZvbnRSZWYgY3RGb250KCkgY29uc3Q7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGJv
b2wgcm91bmRzR2x5cGhBZHZhbmNlcygpIGNvbnN0OworI2Vsc2UKKyAgICBib29sIHJvdW5kc0ds
eXBoQWR2YW5jZXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCisKICAgICBib29sIGFsbG93c0xpZ2F0dXJlcygpIGNvbnN0OwogI2Vsc2UKICAgICBD
R0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1cm4gbV9jZ0ZvbnQuZ2V0KCk7IH0KQEAgLTE1
MywxMCArMTc1LDE1IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShXSU4pICYmICFVU0UoQ0FJUk8p
CiAgICAgICAgIHJldHVybiBtX2ZvbnQgPyBtX2ZvbnQtPmhhc2goKSA6IDA7CiAjZWxpZiBPUyhE
QVJXSU4pCisjaWYgIVBMQVRGT1JNKElPUykKICNpZiBVU0UoQ0cpCiAgICAgICAgIEFTU0VSVCht
X2ZvbnQgfHwgIW1fY2dGb250KTsKICNlbmRpZgogICAgICAgICB1aW50cHRyX3QgaGFzaENvZGVz
WzNdID0geyAodWludHB0cl90KW1fZm9udCwgbV93aWR0aFZhcmlhbnQsIHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4obV9pc1ByaW50ZXJGb250IDw8IDMgfCBtX29yaWVudGF0aW9uIDw8IDIgfCBtX3N5
bnRoZXRpY0JvbGQgPDwgMSB8IG1fc3ludGhldGljT2JsaXF1ZSkgfTsKKyNlbHNlCisgICAgICAg
IEFTU0VSVChtX2ZvbnQgfHwgIW1fY2dGb250IHx8IG1faXNFbW9qaSk7CisgICAgICAgIHVpbnRw
dHJfdCBoYXNoQ29kZXNbM10gPSB7IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oQ0ZIYXNoKG1fZm9u
dCkpLCBtX3dpZHRoVmFyaWFudCwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihtX2lzRW1vamkgPDwg
NCB8IG1faXNQcmludGVyRm9udCA8PCAzIHwgbV9vcmllbnRhdGlvbiA8PCAyIHwgbV9zeW50aGV0
aWNCb2xkIDw8IDEgfCBtX3N5bnRoZXRpY09ibGlxdWUpIH07CisjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKICAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFz
aENvZGVzKT4oaGFzaENvZGVzKTsKICNlbGlmIFVTRShDQUlSTykKICAgICAgICAgcmV0dXJuIFB0
ckhhc2g8Y2Fpcm9fc2NhbGVkX2ZvbnRfdCo+OjpoYXNoKG1fc2NhbGVkRm9udCk7CkBAIC0yMDMs
NyArMjMwLDkgQEAgcHJpdmF0ZToKICAgICBib29sIHBsYXRmb3JtSXNFcXVhbChjb25zdCBGb250
UGxhdGZvcm1EYXRhJikgY29uc3Q7CiAgICAgdm9pZCBwbGF0Zm9ybURhdGFJbml0KGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmKTsKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGFBc3NpZ24oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotI2lmIE9TKERBUldJTikKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgc3RhdGljIENURm9udFJlZiBoYXNoVGFibGVEZWxldGVkRm9udFZh
bHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKTsgfQorI2VsaWYg
T1MoREFSV0lOKQogICAgIC8vIExvYWQgdmFyaW91cyBkYXRhIGFib3V0IHRoZSBmb250IHNwZWNp
ZmllZCBieSB8bnNGb250fCB3aXRoIHRoZSBzaXplIGZvbnRTaXplIGludG8gdGhlIGZvbGxvd2lu
ZyBvdXRwdXQgcGFyYW10ZXJzOgogICAgIHZvaWQgbG9hZEZvbnQoTlNGb250KiwgZmxvYXQgZm9u
dFNpemUsIE5TRm9udComIG91dE5TRm9udCwgQ0dGb250UmVmJik7CiAgICAgc3RhdGljIE5TRm9u
dCogaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
TlNGb250ICo+KC0xKTsgfQpAQCAtMjE5LDExICsyNDgsMTYgQEAgcHVibGljOgogICAgIGJvb2wg
bV9zeW50aGV0aWNCb2xkOwogICAgIGJvb2wgbV9zeW50aGV0aWNPYmxpcXVlOwogICAgIEZvbnRP
cmllbnRhdGlvbiBtX29yaWVudGF0aW9uOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIG1f
aXNFbW9qaTsKKyNlbmRpZgogICAgIGZsb2F0IG1fc2l6ZTsKICAgICBGb250V2lkdGhWYXJpYW50
IG1fd2lkdGhWYXJpYW50OwogCiBwcml2YXRlOgotI2lmIE9TKERBUldJTikKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgQ1RGb250UmVmIG1fZm9udDsKKyNlbGlmIE9TKERBUldJTikKICAgICBOU0Zv
bnQqIG1fZm9udDsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICBSZWZQdHI8U2hhcmVkR0RJT2Jq
ZWN0PEhGT05UPj4gbV9mb250OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCmluZGV4IDY0NTRlNzNlNzZlOWRiOGYzYmVh
M2E0YWYyM2M0N2U3OTNjZGNiMGEuLmNhZWY1ZTlkNjlkYTJkZTRlMTQ2OTQ2MDY5NzYwZjhlZjVk
Yjg1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZVRyZWVOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaFBhZ2VUcmVlTm9kZS5jcHAKQEAgLTIxMiw2ICsyMTIsMTQgQEAgdm9pZCBHbHlwaFBhZ2VU
cmVlTm9kZTo6aW5pdGlhbGl6ZVBhZ2UoY29uc3QgRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25l
ZCBwYWdlTnUKICAgICAgICAgICAgICAgICAgICAgbV9wYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVG
b3JNaXhlZEZvbnREYXRhKHRoaXMpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgbV9wYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250RGF0YSh0aGlz
LCBzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KGZvbnREYXRhKSk7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaW1lcyBOZXcgUm9tYW4gY29u
dGFpbnMgQXJhYmljIGdseXBocywgYnV0IENvcmUgVGV4dCBkb2Vzbid0IGtub3cgaG93IHRvIHNo
YXBlIHRoZW0uIFNlZSA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4uCisgICAgICAgICAgICAgICAg
Ly8gT25jZSB3ZSBoYXZlIHRoZSBmaXggZm9yIDxyZGFyOi8vcHJvYmxlbS85ODIzOTc1PiB0aGVu
IHJlbW92ZSB0aGlzIGNvZGUgdG9nZXRoZXIgd2l0aCBTaW1wbGVGb250RGF0YTo6c2hvdWxkTm90
QmVVc2VkRm9yQXJhYmljKCkKKyAgICAgICAgICAgICAgICAvLyBpbiA8cmRhcjovL3Byb2JsZW0v
MTIwOTY4MzU+LgorICAgICAgICAgICAgICAgIGlmIChwYWdlTnVtYmVyID09IDYgJiYgc3RhdGlj
X2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihmb250RGF0YSktPnNob3VsZE5vdEJlVXNlZEZv
ckFyYWJpYygpKQorICAgICAgICAgICAgICAgICAgICBoYXZlR2x5cGhzID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgZWxzZQorI2VuZGlmCiAgICAgICAgICAgICAgICAgaGF2ZUdseXBocyA9IGZp
bGwobV9wYWdlLmdldCgpLCAwLCBHbHlwaFBhZ2U6OnNpemUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3Ro
LCBzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KGZvbnREYXRhKSk7CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1fcGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRl
Rm9yTWl4ZWRGb250RGF0YSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDBjNDVlYmUwNzcyMjgwN2MyNzM1
MjBkODE4ZTU2YTRhOGJkYTExZTguLmYxMmYwMmE2ZjZmODU2NjlmZTJkN2IyYzAzOTA3YTVjMDNl
Mzg3OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcApAQCAtNzYsMTIgKzc2LDIxIEBAIHByaXZhdGU6CiAgICAgaW50IG1f
b2Zmc2V0OwogfTsKIAorI2lmICFQTEFURk9STShJT1MpCiBHcmFwaGljc0NvbnRleHQ6OkdyYXBo
aWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQpCiAgICAgOiBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZhbHNlKQogICAgICwgbV90cmFuc3Bh
cmVuY3lDb3VudCgwKQogewogICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCk7CiB9CisjZWxzZQorR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LCBib29sIHNob3VsZFVzZUNv
bnRleHRDb2xvcnMpCisgICAgOiBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZhbHNlKQorICAgICwg
bV90cmFuc3BhcmVuY3lDb3VudCgwKQoreworICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCwgc2hvdWxkVXNlQ29udGV4dENvbG9ycyk7Cit9CisjZW5kaWYKIAogR3JhcGhp
Y3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKIHsKQEAgLTExNSw2ICsxMjQsMjggQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQogICAgIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7
CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNl
ZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9y
LCBDb2xvclNwYWNlIGVsbGlwc2VDb2xvclNwYWNlLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3Is
IENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzYXZlKCk7CisKKyAgICBzZXRTdHJva2VDb2xv
cihzaGFkb3dDb2xvciwgc2hhZG93Q29sb3JTcGFjZSk7CisgICAgc2V0RmlsbENvbG9yKHNoYWRv
d0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKKworICAgIGRyYXdFbGxpcHNlKEZsb2F0UmVjdChy
ZWN0LngoKSwgcmVjdC55KCkgKyAxLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKKwor
ICAgIHNldFN0cm9rZUNvbG9yKGVsbGlwc2VDb2xvciwgZWxsaXBzZUNvbG9yU3BhY2UpOworICAg
IHNldEZpbGxDb2xvcihlbGxpcHNlQ29sb3IsIGVsbGlwc2VDb2xvclNwYWNlKTsKKworICAgIGRy
YXdFbGxpcHNlKHJlY3QpOyAgCisKKyAgICByZXN0b3JlKCk7Cit9CisjZW5kaWYKKwogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiB7CiAg
ICAgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0aGlja25lc3M7CkBAIC00MDQsNiArNDM1LDkg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6OnBhaW50aW5nRGlzYWJsZWQoKSBjb25zdAogICAgIHJl
dHVybiBtX3N0YXRlLnBhaW50aW5nRGlzYWJsZWQ7CiB9CiAKKy8vIEZJWE1FOiBSZXBsYWNlIHRo
ZSBub24taU9TIGltcGxlbWVudGF0aW9uIHdpdGggdGhlIGlPUyBpbXBsZW1lbnRhdGlvbiBzaW5j
ZSB0aGUgbGF0dGVyIGNvbXB1dGVzIHJldHVybnMKKy8vIHRoZSB3aWR0aCBvZiB0aGUgZHJhd24g
dGV4dC4gRW5zdXJlIHRoYXQgdGhlcmUgYXJlbid0IG5vdGljZWFibGUgZGlmZmVyZW5jZXMgaW4g
bGF5b3V0LgorI2lmICFQTEFURk9STShJT1MpCiAjaWYgIVVTRShXSU5HREkpCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKIHsKQEAgLTQxMyw2
ICs0NDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXQKICAgICBmb250LmRyYXdUZXh0KHRo
aXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KICNlbmRpZgorI2Vsc2UKK2Zsb2F0IEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBmb250
LmRyYXdUZXh0KHRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKK30KKyNlbmRpZiAvLyAhUExB
VEZPUk0oSU9TKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQogewpAQCAtNDIy
LDIxICs0NjUsNDQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY28KICAgICBmb250LmRyYXdFbXBo
YXNpc01hcmtzKHRoaXMsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAorLy8gRklY
TUU6IEJldHRlciBtZXJnZSB0aGUgaU9TIGFuZCBub24taU9TIGRpZmZlcmVuY2VzLiBJbiBwYXJ0
aWN1bGFyLCBtYWtlIHRoaXMgbWV0aG9kIHVzZSB0aGUKKy8vIHJldHVybmVkIHdpZHRoIG9mIHRo
ZSBkcmF3biB0ZXh0LCBGb250OjpkcmF3VGV4dCgpLCBpbnN0ZWFkIG9mIGNvbXB1dGluZyBpdC4g
RW5zdXJlIHRoYXQgdGhlcmUKKy8vIGFyZW4ndCBub3RpY2VhYmxlIGRpZmZlcmVuY2VzIGluIGxh
eW91dCB3aXRoIHN1Y2ggYSBjaGFuZ2UuCisjaWYgIVBMQVRGT1JNKElPUykKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udDo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKKyNlbHNlCitmbG9hdCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250OjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uLCBCaWRpU3RhdHVzKiBzdGF0dXMsIGludCBsZW5ndGgpCisj
ZW5kaWYKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorI2lmICFQTEFURk9STShJT1Mp
CiAgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgICAgIHJldHVybiAwOworI2VuZGlmCiAKICAg
ICBCaWRpUmVzb2x2ZXI8VGV4dFJ1bkl0ZXJhdG9yLCBCaWRpQ2hhcmFjdGVyUnVuPiBiaWRpUmVz
b2x2ZXI7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBiaWRpUmVzb2x2ZXIuc2V0U3RhdHVzKEJp
ZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpKSk7Cisj
ZWxzZQorICAgIGJpZGlSZXNvbHZlci5zZXRTdGF0dXMoc3RhdHVzID8gKnN0YXR1cyA6IEJpZGlT
dGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpKSk7CisjZW5k
aWYKICAgICBiaWRpUmVzb2x2ZXIuc2V0UG9zaXRpb25JZ25vcmluZ05lc3RlZElzb2xhdGVzKFRl
eHRSdW5JdGVyYXRvcigmcnVuLCAwKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBvd25lcnNoaXAg
c2hvdWxkIGJlIHJldmVyc2VkLiBXZSBzaG91bGQgcGFzcyBCaWRpUnVuTGlzdAogICAgIC8vIHRv
IEJpZGlSZXNvbHZlciBpbiBjcmVhdGVCaWRpUnVuc0ZvckxpbmUuCiAgICAgQmlkaVJ1bkxpc3Q8
QmlkaUNoYXJhY3RlclJ1bj4mIGJpZGlSdW5zID0gYmlkaVJlc29sdmVyLnJ1bnMoKTsKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgIGJpZGlSZXNvbHZlci5jcmVhdGVCaWRpUnVuc0ZvckxpbmUoVGV4
dFJ1bkl0ZXJhdG9yKCZydW4sIHJ1bi5sZW5ndGgoKSkpOworI2Vsc2UKKyAgICBiaWRpUmVzb2x2
ZXIuY3JlYXRlQmlkaVJ1bnNGb3JMaW5lKFRleHRSdW5JdGVyYXRvcigmcnVuLCBsZW5ndGggPCAw
ID8gcnVuLmxlbmd0aCgpIDogbGVuZ3RoKSk7CisjZW5kaWYgICAgCiAgICAgaWYgKCFiaWRpUnVu
cy5ydW5Db3VudCgpKQorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIHJldHVybjsKKyNlbHNl
CisgICAgICAgIHJldHVybiAwOworI2VuZGlmCiAKICAgICBGbG9hdFBvaW50IGN1cnJQb2ludCA9
IHBvaW50OwogICAgIEJpZGlDaGFyYWN0ZXJSdW4qIGJpZGlSdW4gPSBiaWRpUnVucy5maXJzdFJ1
bigpOwpAQCAtNDQ2LDE1ICs1MTIsMzAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRp
VGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEYKICAgICAg
ICAgc3VicnVuLnNldERpcmVjdGlvbihpc1JUTCA/IFJUTCA6IExUUik7CiAgICAgICAgIHN1YnJ1
bi5zZXREaXJlY3Rpb25hbE92ZXJyaWRlKGJpZGlSdW4tPmRpck92ZXJyaWRlKGZhbHNlKSk7CiAK
KyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBmb250LmRyYXdUZXh0KHRoaXMsIHN1YnJ1biwg
Y3VyclBvaW50LCAwLCAtMSwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKIAogICAgICAgICBi
aWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgpOwogICAgICAgICAvLyBGSVhNRTogSGF2ZSBGb250Ojpk
cmF3VGV4dCByZXR1cm4gdGhlIHdpZHRoIG9mIHdoYXQgaXQgZHJldyBzbyB0aGF0IHdlIGRvbid0
IGhhdmUgdG8gcmUtbWVhc3VyZSBoZXJlLgogICAgICAgICBpZiAoYmlkaVJ1bikKICAgICAgICAg
ICAgIGN1cnJQb2ludC5tb3ZlKGZvbnQud2lkdGgoc3VicnVuKSwgMCk7CisjZWxzZQorICAgICAg
ICBmbG9hdCB3aWR0aCA9IGZvbnQuZHJhd1RleHQodGhpcywgc3VicnVuLCBjdXJyUG9pbnQsIDAs
IC0xLCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOworICAgICAgICBjdXJyUG9pbnQubW92ZSh3
aWR0aCwgMCk7CisKKyAgICAgICAgYmlkaVJ1biA9IGJpZGlSdW4tPm5leHQoKTsKKyNlbmRpZgog
ICAgIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICAqc3Rh
dHVzID0gYmlkaVJlc29sdmVyLnN0YXR1cygpOworI2VuZGlmCiAgICAgYmlkaVJ1bnMuZGVsZXRl
UnVucygpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHJldHVybiBjdXJyUG9pbnQueCgpIC0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBvaW50LngoKSk7CisjZW5kaWYKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdIaWdobGlnaHRGb3JUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoLCBjb25zdCBDb2xvciYg
YmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGludCBmcm9tLCBpbnQgdG8p
CkBAIC02MTUsNiArNjk2LDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJl
Y3QoY29uc3QgUm91bmRlZFJlY3QmIHJlY3QpCiAgICAgY2xpcChwYXRoKTsKIH0KIAorLy8gRklY
TUU6IENvbnNpZGVyIHdyaXRpbmcgdGhpcyBpbiB0ZXJtcyBvZiBhIHNwZWNpYWxpemVkIFJvdW5k
ZWRSZWN0IHRoYXQgdXNlcyBGbG9hdFJlY3QgYW5kIEZsb2F0U2l6ZSByYWRpaS4KK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBGbG9hdFNpemUmIHRvcExlZnQsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHQsCisgICAgY29u
c3QgRmxvYXRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0KQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFBh
dGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0
LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7CisgICAgY2xpcChwYXRoKTsKK30KKwogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBSb3VuZGVkUmVjdCYgcmVj
dCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtNzMyLDYgKzgyNSwxOCBAQCBC
bGVuZE1vZGUgR3JhcGhpY3NDb250ZXh0OjpibGVuZE1vZGVPcGVyYXRpb24oKSBjb25zdAogICAg
IHJldHVybiBtX3N0YXRlLmJsZW5kTW9kZTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0OjplbW9qaURyYXdpbmdFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gbV9z
dGF0ZS5lbW9qaURyYXdpbmdFbmFibGVkOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
RW1vamlEcmF3aW5nRW5hYmxlZChib29sIGVtb2ppRHJhd2luZ0VuYWJsZWQpCit7CisgICAgbV9z
dGF0ZS5lbW9qaURyYXdpbmdFbmFibGVkID0gZW1vamlEcmF3aW5nRW5hYmxlZDsKK30KKyNlbmRp
ZgorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3
THVtaW5hbmNlTWFzaykKIHsKICAgICBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1
bWluYW5jZU1hc2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCmluZGV4IDE3YzRjZTRkZDczMWUzMzQzODNmY2YxNGQ2N2I1NTNlZjMz
ZTJkM2MuLjRjYThlOTMwZGRmMTg0OWI3ZTU4ODQwMDQwZDUzZGY0OWVkMmRhMGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBA
IC05Myw2ICs5Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKICAgICBjbGFzcyBUZXh0UnVuOwogICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0
cml4OworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdHJ1Y3QgQmlkaVN0YXR1czsKKyNlbmRpZgog
CiAgICAgZW51bSBUZXh0RHJhd2luZ01vZGUgewogICAgICAgICBUZXh0TW9kZUZpbGwgPSAxIDw8
IDAsCkBAIC0xMzYsNiArMTM5LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAg
ICwgc2hhZG93Q29sb3JTcGFjZShDb2xvclNwYWNlRGV2aWNlUkdCKQogICAgICAgICAgICAgLCBj
b21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVTb3VyY2VPdmVyKQogICAgICAgICAgICAgLCBibGVu
ZE1vZGUoQmxlbmRNb2RlTm9ybWFsKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgICwg
ZW1vamlEcmF3aW5nRW5hYmxlZCh0cnVlKQorICAgICAgICAgICAgLCBzaG91bGRVc2VDb250ZXh0
Q29sb3JzKHRydWUpCisjZW5kaWYKICAgICAgICAgICAgICwgc2hvdWxkQW50aWFsaWFzKHRydWUp
CiAgICAgICAgICAgICAsIHNob3VsZFNtb290aEZvbnRzKHRydWUpCiAgICAgICAgICAgICAsIHNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyh0cnVlKQpAQCAtMTc3LDYgKzE4NCwxMCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJh
dG9yOwogICAgICAgICBCbGVuZE1vZGUgYmxlbmRNb2RlOwogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICAgICBib29sIGVtb2ppRHJhd2luZ0VuYWJsZWQgOiAxOworICAgICAgICBib29sIHNob3Vs
ZFVzZUNvbnRleHRDb2xvcnMgOiAxOworI2VuZGlmCiAgICAgICAgIGJvb2wgc2hvdWxkQW50aWFs
aWFzIDogMTsKICAgICAgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cyA6IDE7CiAgICAgICAgIGJv
b2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDogMTsKQEAgLTE4OCwxMCArMTk5LDE4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzayA6IDE7
CiAgICAgfTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIHNldFN0cm9rZUFuZEZpbGxD
b2xvcihQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCosIENHQ29sb3JSZWYpOworI2VuZGlmCisKICAg
ICBjbGFzcyBHcmFwaGljc0NvbnRleHQgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShH
cmFwaGljc0NvbnRleHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6Cisj
aWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0Kik7CisjZWxzZQorICAgICAgICBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqLCBib29sIHNob3VsZFVzZUNvbnRleHRDb2xvcnMgPSB0cnVlKTsKKyNlbmRp
ZgogICAgICAgICB+R3JhcGhpY3NDb250ZXh0KCk7CiAKICAgICAgICAgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwpAQCAtMjQzLDcgKzI2MiwxMSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpOwogICAg
ICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyLCBjb25zdCBGbG9h
dFNpemUmIHNlbGZTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBmbG9hdCBzY2FsZSwgQ29t
cG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBCbGVuZE1vZGUgPSBCbGVuZE1v
ZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb24gPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbik7Cisj
ZWxzZQogICAgICAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShQYXNzTmF0aXZlSW1hZ2VQdHIsIGNv
bnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0
ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlTm9y
bWFsLCBJbWFnZU9yaWVudGF0aW9uID0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pOworI2VuZGlm
CiAKICAgICAgICAgLy8gQWxsb3cgZm9udCBzbW9vdGhpbmcgKExDRCBhbnRpYWxpYXNpbmcpLiBO
b3QgcGFydCBvZiB0aGUgZ3JhcGhpY3Mgc3RhdGUuCiAgICAgICAgIHZvaWQgc2V0QWxsb3dzRm9u
dFNtb290aGluZyhib29sKTsKQEAgLTI2NCw3ICsyODcsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAvLyBzdHJva2UgY29sb3IpLgogICAgICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0
IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBkcmF3TGluZShjb25zdCBJbnRQb2ludCYsIGNvbnN0
IEludFBvaW50Jik7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHZvaWQgZHJhd0pvaW5l
ZExpbmVzKENHUG9pbnQgcG9pbnRzW10sIHVuc2lnbmVkIGNvdW50LCBib29sIGFudGlhbGlhcywg
Q0dMaW5lQ2FwID0ga0NHTGluZUNhcEJ1dHQpOworI2VuZGlmCisKICAgICAgICAgdm9pZCBkcmF3
RWxsaXBzZShjb25zdCBJbnRSZWN0Jik7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICB2b2lk
IGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOworICAgICAgICB2b2lkIGRyYXdSYWlzZWRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIENvbG9y
U3BhY2UgZWxsaXBzZUNvbG9yU3BhY2UsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgQ29sb3JT
cGFjZSBzaGFkb3dDb2xvclNwYWNlKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGRyYXdDb252ZXhQ
b2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBib29sIHNob3VsZEFu
dGlhbGlhcyA9IGZhbHNlKTsKIAogICAgICAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKTsK
QEAgLTMxMSw2ICszNDMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNs
aXAoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7
CiAgICAgICAgIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IFJvdW5kZWRSZWN0Jik7CisKKyAg
ICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHdyaXRpbmcgdGhpcyBpbiB0ZXJtcyBvZiBhIHNwZWNp
YWxpemVkIFJvdW5kZWRSZWN0IHRoYXQgdXNlcyBGbG9hdFJlY3QgYW5kIEZsb2F0U2l6ZSByYWRp
aS4KKyAgICAgICAgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRTaXplJiB0b3BMZWZ0LCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0LCBjb25zdCBGbG9h
dFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHQpOworCiAgICAg
ICAgIHZvaWQgY2xpcE91dChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgY2xpcE91dFJv
dW5kZWRSZWN0KGNvbnN0IFJvdW5kZWRSZWN0Jik7CiAgICAgICAgIHZvaWQgY2xpcFBhdGgoY29u
c3QgUGF0aCYsIFdpbmRSdWxlKTsKQEAgLTMyMiw5ICszNTgsMjIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25z
dDsKICAgICAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3Mp
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBib29sIGVtb2ppRHJhd2luZ0VuYWJsZWQo
KTsKKyAgICAgICAgdm9pZCBzZXRFbW9qaURyYXdpbmdFbmFibGVkKGJvb2wpOworI2VuZGlmCisg
ICAgICAgIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3Qg
Rm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBp
bnQgdG8gPSAtMSk7CisjZWxzZQorICAgICAgICBmbG9hdCBkcmF3VGV4dChjb25zdCBGb250Jiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9
IC0xKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQm
LCBjb25zdCBUZXh0UnVuJiAsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQ
b2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOworI2lmICFQTEFURk9STShJT1MpCiAg
ICAgICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgRmxvYXRQb2ludCYsIEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnQ6OkRv
Tm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CisjZWxzZQorICAgICAgICBmbG9hdCBkcmF3QmlkaVRl
eHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udDo6
Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udDo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5
LCBCaWRpU3RhdHVzKiA9IDAsIGludCBsZW5ndGggPSAtMSk7CisjZW5kaWYKICAgICAgICAgdm9p
ZCBkcmF3SGlnaGxpZ2h0Rm9yVGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBpbnQgaCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvciwgQ29sb3JT
cGFjZSwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CiAKICAgICAgICAgZW51bSBSb3VuZGlu
Z01vZGUgewpAQCAtMzM2LDYgKzM4NSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
RmxvYXRSZWN0IGNvbXB1dGVMaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxv
YXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpOwogICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpOwogICAgICAgICBl
bnVtIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAg
ICAgICBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTGluZVN0eWxl
LAorI2VuZGlmCiAgICAgICAgICAgICBEb2N1bWVudE1hcmtlclNwZWxsaW5nTGluZVN0eWxlLAog
ICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXJHcmFtbWFyTGluZVN0eWxlLAogICAgICAgICAgICAg
RG9jdW1lbnRNYXJrZXJBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50TGluZVN0eWxlLApAQCAtNDk2
LDcgKzU0OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGFk
anVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIs
IGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSk7CiAKICAgICBwcml2YXRlOgorI2lmICFQ
TEFURk9STShJT1MpCiAgICAgICAgIHZvaWQgcGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0Kik7CisjZWxzZQorICAgICAgICB2b2lkIHBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCosIGJvb2wgc2hvdWxkVXNlQ29udGV4dENvbG9ycyk7CisjZW5kaWYKICAgICAg
ICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIAogI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShX
SU5HREkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaAppbmRleCA5ZTI0NDkwNDI2ODcxYzRhNGNlZWNlYjY5N2QzOWE4NTdhODQz
YzVkLi44MTU4OGZmNTFiMjgyYjcwZTgxYWRiMTU2MmU0MDVlMDE4MzUyODdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgK
QEAgLTU0LDYgKzU0LDEyIEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFU
Rk9STShJT1MpCisjaW5jbHVkZSA8T3BlbkdMRVMvRVMyL2dsLmg+CisjaWZkZWYgX19PQkpDX18K
KyNpbXBvcnQgPE9wZW5HTEVTL0VBR0wuaD4KKyNlbmRpZiAvLyBfX09CSkNfXworI2VuZGlmIC8v
IFBMQVRGT1JNKElPUykKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiBPQkpDX0NMQVNTIENB
TGF5ZXI7CiBPQkpDX0NMQVNTIFdlYkdMTGF5ZXI7CkBAIC02MSw3ICs2NywxMyBAQCBPQkpDX0NM
QVNTIFdlYkdMTGF5ZXI7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBHTHVpbnQ7CiAjZW5kaWYKIAot
I2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisjaWZkZWYgX19PQkpDX18KK3R5
cGVkZWYgRUFHTENvbnRleHQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7CisjZWxzZQordHlw
ZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOworI2VuZGlmIC8vIF9fT0JKQ19f
CisjZWxpZiBQTEFURk9STShNQUMpCiB0eXBlZGVmIHN0cnVjdCBfQ0dMQ29udGV4dE9iamVjdCAq
Q0dMQ29udGV4dE9iajsKIAogdHlwZWRlZiBDR0xDb250ZXh0T2JqIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0Q7CkBAIC03OTEsNiArODAzLDEwIEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElt
YWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciop
OwogICAgIGJvb2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKik7
CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBlbmRQYWludCgpOworI2VuZGlmCisKICNp
ZiBQTEFURk9STShCTEFDS0JFUlJZKQogICAgIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigp
IGNvbnN0OwogI2VuZGlmCkBAIC05MzMsNiArOTQ5LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBy
ZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpOwogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgYm9vbCBzZXRSZW5kZXJidWZmZXJTdG9yYWdlRnJvbURyYXdhYmxl
KEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisjZW5kaWYKKwogI2lmIFBMQVRG
T1JNKEJMQUNLQkVSUlkpCiAgICAgdm9pZCBsb2dGcmFtZUJ1ZmZlclN0YXR1cyhpbnQgbGluZSk7
CiAgICAgdm9pZCByZWFkUGl4ZWxzSU1HKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
dm9pZCogZGF0YSk7CkBAIC05NDcsNyArOTY3LDEwIEBAIHByaXZhdGU6CiAgICAgaW50IG1fY3Vy
cmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQ7CiAgICAgYm9vbCBpc1Jlc291cmNlU2FmZSgpOwog
Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEIG1fY29udGV4dE9iajsKKyAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4g
bV93ZWJHTExheWVyOworI2VsaWYgUExBVEZPUk0oTUFDKQogICAgIENHTENvbnRleHRPYmogbV9j
b250ZXh0T2JqOwogICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBtX3dlYkdMTGF5ZXI7CiAjZWxp
ZiBQTEFURk9STShXSU4pICYmIFVTRShDQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5kZXggMmY3ZGU1ZWFjY2ExNDgzMGI3N2U5
ZjkwZWFmNzA4MWM4Y2Y5OGQxMy4uNzE5ODM4MzkzYjQ1MjU3Mjg1OTlhZmQ0OWU3ZDBiOGVkOTFm
ZjkxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5jcHAKQEAgLTExNyw3ICsxMTcsNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXI6OndpbGxC
ZURlc3Ryb3llZCgpCiAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICBtX2NsaWVudC0+dmVyaWZ5
Tm90UGFpbnRpbmcoKTsKICNlbmRpZgotCiAgICAgaWYgKG1fcmVwbGljYUxheWVyKQogICAgICAg
ICBtX3JlcGxpY2FMYXllci0+c2V0UmVwbGljYXRlZExheWVyKDApOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKaW5kZXggNTFmZDc2MDEy
NzI5ZGNhNzY4ZDIxMmViN2QzNmM4NGYxNjk0ZGI1Yi4uY2U2MDQxMDhmZTVlZTNlODg4MzBiM2M3
NzJmYjdiY2YxZjlmZTExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuaApAQCAtMzg3LDYgKzM4Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKikgeyB9CiAgICAgdmlydHVhbCBib29s
IHNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UoSW1hZ2UqKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKikg
eyB9IC8vIHZpZGVvIG9yIHBsdWctaW4KKyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCBQ
bGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyRm9yTWVkaWEoKSBjb25zdCB7IHJldHVybiAwOyB9
CisjZW5kaWYKICAgICAvLyBQYXNzIGFuIGludmFsaWQgY29sb3IgdG8gcmVtb3ZlIHRoZSBjb250
ZW50cyBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29u
c3QgQ29sb3ImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0
Zm9ybUxheWVyKikgeyB9CkBAIC00MzcsNiArNDQwLDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCBzZXRNYWludGFpbnNQaXhlbEFsaWdubWVudChib29sIG1haW50YWluc0FsaWdubWVu
dCkgeyBtX21haW50YWluc1BpeGVsQWxpZ25tZW50ID0gbWFpbnRhaW5zQWxpZ25tZW50OyB9CiAg
ICAgdmlydHVhbCBib29sIG1haW50YWluc1BpeGVsQWxpZ25tZW50KCkgY29uc3QgeyByZXR1cm4g
bV9tYWludGFpbnNQaXhlbEFsaWdubWVudDsgfQorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0
dWFsIEZsb2F0U2l6ZSBwaXhlbEFsaWdubWVudE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0
U2l6ZSgpOyB9CisgICAgYm9vbCBoYXNGbGF0dGVuZWRQZXJzcGVjdGl2ZVRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuICFwcmVzZXJ2ZXMzRCgpICYmIG1fY2hpbGRyZW5UcmFuc2Zvcm0uaGFzUGVy
c3BlY3RpdmUoKTsgfQorI2VuZGlmCiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHNldEFwcGxpZXNQ
YWdlU2NhbGUoYm9vbCBhcHBsaWVzU2NhbGUgPSB0cnVlKSB7IG1fYXBwbGllc1BhZ2VTY2FsZSA9
IGFwcGxpZXNTY2FsZTsgfQogICAgIHZpcnR1YWwgYm9vbCBhcHBsaWVzUGFnZVNjYWxlKCkgY29u
c3QgeyByZXR1cm4gbV9hcHBsaWVzUGFnZVNjYWxlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JY29uLmgKaW5kZXggMmFiN2NhMGYzYjI4NjQ0ZWExMmEwYTdhOGJlMmJhYWNiYTVh
ZDAwZi4uODI3OThjMzA2OTUwODczYWI0ZWRhNzVlNWEwNzI1MTcyMGZkNzFjYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaApAQCAtMjYsNyArMjYsMTEgQEAKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotI2lmIFBMQVRG
T1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIK
KyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorI2VsaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KIE9CSkNfQ0xBU1MgTlNJbWFnZTsKICNlbGlmIFBMQVRGT1JNKFdJTikKQEAgLTUyLDggKzU2
LDE2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJY29uPiBjcmVhdGUoSElDT04g
aEljb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29uKGhJY29uKSk7IH0KICNlbmRpZgogCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgd29yayBmb3Igbm9uLWlP
UyBwb3J0cyBhbmQgcmVtb3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEljb24+IGNyZWF0ZUljb25Gb3JJbWFnZShOYXRpdmVJbWFnZVB0cik7CisjZW5k
aWYKKwogcHJpdmF0ZToKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IEljb24oQ0dJbWFnZVJlZik7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1fY2dJbWFnZTsK
KyNlbGlmIFBMQVRGT1JNKE1BQykKICAgICBJY29uKE5TSW1hZ2UqKTsKICAgICBSZXRhaW5QdHI8
TlNJbWFnZT4gbV9uc0ltYWdlOwogI2VsaWYgUExBVEZPUk0oV0lOKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCmluZGV4IGU1MjgzNDI0NDM4MTg2ZTM2ZGY5YzVh
MDllMjI2OGJlNTQwYjY4ZDYuLjBlMzY1MWEzY2ExNDFlNDU2NGI1NjJhMjczYzc0NzZiOTI4NDIx
OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKQEAgLTEz
MCwxMSArMTMwLDY2IEBAIHZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gV2hlbiB1c2luZyBhY2NlbGVyYXRl
ZCBkcmF3aW5nIG9uIGlPUywgaXQncyBmYXN0ZXIgdG8gc3RyZXRjaCBhbiBpbWFnZSB0aGFuIHRv
IHRpbGUgaXQuCisgICAgaWYgKGN0eHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKKyAgICAg
ICAgaWYgKHNpemUoKS53aWR0aCgpID09IDEgJiYgaW50ZXJzZWN0aW9uKG9uZVRpbGVSZWN0LCBk
ZXN0UmVjdCkuaGVpZ2h0KCkgPT0gZGVzdFJlY3QuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIEZs
b2F0UmVjdCB2aXNpYmxlU3JjUmVjdDsKKyAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFgo
MCk7CisgICAgICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRZKChkZXN0UmVjdC55KCkgLSBvbmVU
aWxlUmVjdC55KCkpIC8gc2NhbGUuaGVpZ2h0KCkpOworICAgICAgICAgICAgdmlzaWJsZVNyY1Jl
Y3Quc2V0V2lkdGgoMSk7CisgICAgICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRIZWlnaHQoZGVz
dFJlY3QuaGVpZ2h0KCkgLyBzY2FsZS5oZWlnaHQoKSk7CisgICAgICAgICAgICBkcmF3KGN0eHQs
IGRlc3RSZWN0LCB2aXNpYmxlU3JjUmVjdCwgc3R5bGVDb2xvclNwYWNlLCBvcCwgQmxlbmRNb2Rl
Tm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNpemUoKS5oZWlnaHQoKSA9PSAxICYmIGludGVy
c2VjdGlvbihvbmVUaWxlUmVjdCwgZGVzdFJlY3QpLndpZHRoKCkgPT0gZGVzdFJlY3Qud2lkdGgo
KSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVTcmNSZWN0OworICAgICAgICAgICAg
dmlzaWJsZVNyY1JlY3Quc2V0WCgoZGVzdFJlY3QueCgpIC0gb25lVGlsZVJlY3QueCgpKSAvIHNj
YWxlLndpZHRoKCkpOworICAgICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0WSgwKTsKKyAgICAg
ICAgICAgIHZpc2libGVTcmNSZWN0LnNldFdpZHRoKGRlc3RSZWN0LndpZHRoKCkgLyBzY2FsZS53
aWR0aCgpKTsKKyAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldEhlaWdodCgxKTsKKyAgICAg
ICAgICAgIGRyYXcoY3R4dCwgZGVzdFJlY3QsIHZpc2libGVTcmNSZWN0LCBzdHlsZUNvbG9yU3Bh
Y2UsIG9wLCBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIC8vIENHUGF0dGVybiB1c2VzIGxvdHMgb2YgbWVtb3J5IGdvdCBjYWNo
aW5nIHdoZW4gdGhlIHRpbGUgc2l6ZSBpcyBsYXJnZSAoPHJkYXI6Ly9wcm9ibGVtLzQ2OTE4NTk+
LAorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS82MjM5NTA1PikuIE1lbW9yeSBjb25zdW1wdGlvbiBk
ZXBlbmRzIG9uIHRoZSB0cmFuc2Zvcm1lZCB0aWxlIHNpemUgd2hpY2ggY2FuIGdldAorICAgIC8v
IGxhcmdlciB0aGFuIHRoZSBvcmlnaW5hbCB0aWxlIGlmIHVzZXIgem9vbXMgaW4gZW5vdWdoLgor
ICAgIGNvbnN0IGZsb2F0IG1heFBhdHRlcm5UaWxlUGl4ZWxzID0gNTEyICogNTEyOworICAgIEZs
b2F0UmVjdCB0cmFuc2Zvcm1lZFRpbGVTaXplID0gY3R4dC0+Z2V0Q1RNKCkubWFwUmVjdChGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBzY2FsZWRUaWxlU2l6ZSkpOworICAgIGZsb2F0IHRyYW5zZm9y
bWVkVGlsZVNpemVQaXhlbHMgPSB0cmFuc2Zvcm1lZFRpbGVTaXplLndpZHRoKCkgKiB0cmFuc2Zv
cm1lZFRpbGVTaXplLmhlaWdodCgpOworICAgIGlmICh0cmFuc2Zvcm1lZFRpbGVTaXplUGl4ZWxz
ID4gbWF4UGF0dGVyblRpbGVQaXhlbHMpIHsKKyAgICAgICAgZmxvYXQgZnJvbVkgPSAoZGVzdFJl
Y3QueSgpIC0gb25lVGlsZVJlY3QueSgpKSAvIHNjYWxlLmhlaWdodCgpOworICAgICAgICBmbG9h
dCB0b1kgPSBvbmVUaWxlUmVjdC55KCk7CisgICAgICAgIHdoaWxlICh0b1kgPCBDR1JlY3RHZXRN
YXhZKGRlc3RSZWN0KSkgeworICAgICAgICAgICAgZmxvYXQgZnJvbVggPSAoZGVzdFJlY3QueCgp
IC0gb25lVGlsZVJlY3QueCgpKSAvIHNjYWxlLndpZHRoKCk7CisgICAgICAgICAgICBmbG9hdCB0
b1ggPSBvbmVUaWxlUmVjdC54KCk7CisgICAgICAgICAgICB3aGlsZSAodG9YIDwgQ0dSZWN0R2V0
TWF4WChkZXN0UmVjdCkpIHsKKyAgICAgICAgICAgICAgICBDR1JlY3QgdG9SZWN0ID0gQ0dSZWN0
SW50ZXJzZWN0aW9uKGRlc3RSZWN0LCBDR1JlY3RNYWtlKHRvWCwgdG9ZLCBvbmVUaWxlUmVjdC53
aWR0aCgpLCBvbmVUaWxlUmVjdC5oZWlnaHQoKSkpOworICAgICAgICAgICAgICAgIENHUmVjdCBm
cm9tUmVjdCA9IENHUmVjdE1ha2UoZnJvbVgsIGZyb21ZLCB0b1JlY3Quc2l6ZS53aWR0aCAvIHNj
YWxlLndpZHRoKCksIHRvUmVjdC5zaXplLmhlaWdodCAvIHNjYWxlLmhlaWdodCgpKTsKKyAgICAg
ICAgICAgICAgICBkcmF3KGN0eHQsIHRvUmVjdCwgZnJvbVJlY3QsIHN0eWxlQ29sb3JTcGFjZSwg
b3AsIEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpOworICAg
ICAgICAgICAgICAgIHRvWCArPSBvbmVUaWxlUmVjdC53aWR0aCgpOworICAgICAgICAgICAgICAg
IGZyb21YID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRvWSArPSBvbmVUaWxlUmVj
dC5oZWlnaHQoKTsKKyAgICAgICAgICAgIGZyb21ZID0gMDsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm47CisgICAgfQorI2VuZGlmICAgIAorCiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5U
cmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oKS5zY2FsZU5vblVuaWZvcm0oc2NhbGUud2lkdGgo
KSwgc2NhbGUuaGVpZ2h0KCkpOwogICAgIEZsb2F0UmVjdCB0aWxlUmVjdChGbG9hdFBvaW50KCks
IGludHJpbnNpY1RpbGVTaXplKTsKICAgICBkcmF3UGF0dGVybihjdHh0LCB0aWxlUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgb25lVGlsZVJlY3QubG9jYXRpb24oKSwgc3R5bGVDb2xvclNwYWNlLCBv
cCwgZGVzdFJlY3QsIGJsZW5kTW9kZSk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhcnRB
bmltYXRpb24oZmFsc2UpOworI2Vsc2UKICAgICBzdGFydEFuaW1hdGlvbigpOworI2VuZGlmCiB9
CiAKIC8vIEZJWE1FOiBNZXJnZSB3aXRoIHRoZSBvdGhlciBkcmF3VGlsZWQgZXZlbnR1YWxseSwg
c2luY2Ugd2UgbmVlZCBhIGNvbWJpbmF0aW9uIG9mIGJvdGggZm9yIHNvbWUgdGhpbmdzLgpAQCAt
MTY4LDcgKzIyMywxMSBAQCB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsbwogICAgIAogICAgIGRyYXdQ
YXR0ZXJuKGN0eHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBhdHRlcm5QaGFzZSwgc3R5
bGVDb2xvclNwYWNlLCBvcCwgZHN0UmVjdCk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3Rh
cnRBbmltYXRpb24oZmFsc2UpOworI2Vsc2UKICAgICBzdGFydEFuaW1hdGlvbigpOworI2VuZGlm
CiB9CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXggM2M2MzI3ZmI3
YWE2ZDFlNGRhYzQ0YTBmODc3NDU4YmZhMTM1YjNmNi4uYWI3MTkwZTk5ZTc0YWM5NWQzYmRmZDFk
YmM3ZjUxN2I5MWVkOGZiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5oCkBAIC0xMzUsNiArMTM1LDExIEBAIHB1YmxpYzoKICAgICBJbnRTaXpl
IHNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2Ny
aXB0aW9uKCkpIGNvbnN0OwogICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiA9IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigp
KSBjb25zdDsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZShS
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KSBjb25zdDsKKyAgICBib29sIGlzU3Vic2FtcGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVN1
YnNhbXBsaW5nOyB9CisjZW5kaWYKKwogICAgIGJvb2wgZ2V0SG90U3BvdChJbnRQb2ludCYpIGNv
bnN0OwogCiAgICAgc2l6ZV90IGJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpIGNv
bnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9p
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKaW5kZXgg
MTY5MjAzN2Q3NTM3NDllMmMyN2Q5MGRlNThiMTMwYjdkNjMxNWM2NS4uZmUzM2Y0YzNmOGI4ZjFl
MGU3YTIyMjYxNjhkZGJkM2Q5NDYzYTA2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRQb2ludC5oCkBAIC0zNCw2ICszNCw3IEBAIHR5cGVkZWYgc3RydWN0IENHUG9p
bnQgQ0dQb2ludDsKICNlbmRpZgogCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmIE9TKERBUldJ
TikKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogdHlw
ZWRlZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50OwpAQCAtNDEsNiArNDIsNyBAQCB0eXBlZGVmIHN0
cnVjdCBDR1BvaW50IE5TUG9pbnQ7CiB0eXBlZGVmIHN0cnVjdCBfTlNQb2ludCBOU1BvaW50Owog
I2VuZGlmCiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAjaWYgUExBVEZPUk0o
V0lOKQogdHlwZWRlZiBzdHJ1Y3QgdGFnUE9JTlQgUE9JTlQ7CkBAIC0xMTEsMTAgKzExMywxMiBA
QCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dQb2ludCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2lmIE9TKERBUldJTikgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBF
U19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpCiAgICAgZXhwbGljaXQgSW50UG9pbnQoY29uc3Qg
TlNQb2ludCYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQog
ICAgIG9wZXJhdG9yIE5TUG9pbnQoKSBjb25zdDsKICNlbmRpZgorI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCiAKICNpZiBQTEFURk9STShXSU4pCiAgICAgSW50UG9pbnQoY29uc3QgUE9JTlQmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAppbmRleCA1NjlhOTA4
MTQ0NDk1OTE0ZDJkOWRmNGNkYTE1ZjkxMGVkNzNjNzlhLi42MjIwNTI5MDdiMzQ5NzQxMzdjNTE1
MzljZjQ3NzQyNWFhNzM1ZWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UmVjdC5oCkBAIC0zMyw3ICszMyw3IEBACiB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgQ0dSZWN0
OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oSU9TKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZ
UEVTCiB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0OwogI2Vsc2UKQEAgLTQxLDYgKzQxLDEy
IEBAIHR5cGVkZWYgc3RydWN0IF9OU1JlY3QgTlNSZWN0OwogI2VuZGlmCiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKElPUykKKyNpZm5kZWYgTlNSZWN0CisjZGVmaW5lIE5TUmVjdCBDR1JlY3QKKyNl
bmRpZgorI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIHN0cnVjdCB0YWdSRUNU
IFJFQ1Q7CiAjZWxpZiBQTEFURk9STShHVEspCkBAIC0xOTIsOSArMTk4LDExIEBAIHB1YmxpYzoK
ICAgICBvcGVyYXRvciBDR1JlY3QoKSBjb25zdDsKICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElP
UykKICNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVf
QVNfQ0dHRU9NRVRSWV9UWVBFUykpCiAgICAgb3BlcmF0b3IgTlNSZWN0KCkgY29uc3Q7CiAjZW5k
aWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkK
ICAgICBJbnRSZWN0KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0Jik7CkBAIC0y
NTIsOSArMjYwLDExIEBAIGlubGluZSBib29sIEludFJlY3Q6OmlzSW5maW5pdGUoKSBjb25zdAog
SW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IENHUmVjdCYpOwogI2VuZGlmCiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2lmIChQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllf
VFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKSkKIEludFJlY3QgZW5jbG9zaW5nSW50UmVj
dChjb25zdCBOU1JlY3QmKTsKICNlbmRpZgorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50U2l6ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50U2l6ZS5oCmluZGV4IGRiN2RiYTdlZGI1ODQxNzg3YjVmNTg2MjQzYzFjZTEyM2Q3YjMzMzku
LjljN2U0ZGU4NzhjNGM4NzE2ZmViZWU5NzhhMjQxZWNjYjYxZGEyMmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKQEAgLTMyLDcgKzMyLDcgQEAKIHR5cGVk
ZWYgc3RydWN0IENHU2l6ZSBDR1NpemU7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNp
ZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBF
U19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5cGVkZWYgc3RydWN0IENHU2l6ZSBOU1NpemU7
CiAjZWxzZQpAQCAtNDAsNiArNDAsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgX05TU2l6ZSBOU1NpemU7
CiAjZW5kaWYKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorI2lmbmRlZiBOU1NpemUKKyNk
ZWZpbmUgTlNTaXplIENHU2l6ZQorI2VuZGlmCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikK
IHR5cGVkZWYgc3RydWN0IHRhZ1NJWkUgU0laRTsKICNlbGlmIFBMQVRGT1JNKEJMQUNLQkVSUlkp
CkBAIC0xMzAsMTAgKzEzNiwxMiBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dTaXplKCkgY29u
c3Q7CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpICAgIAogI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpCiAg
ICAgZXhwbGljaXQgSW50U2l6ZShjb25zdCBOU1NpemUgJik7IC8vIGRvbid0IGRvIHRoaXMgaW1w
bGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgb3BlcmF0b3IgTlNTaXplKCkgY29uc3Q7CiAj
ZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAjaWYgUExBVEZPUk0oV0lOKQogICAg
IEludFNpemUoY29uc3QgU0laRSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDA1NzA5YTFiZmIyY2MzNGFhYjA2NTgwZjUzZTZi
MGQ1N2Q0NTJhYTUuLjZlNDhhYmQ3ZDEzZThhNTA5MWZhZTY4OGZmYzY2N2MxZWU1MjU1ZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAK
QEAgLTU0LDcgKzU0LDEyIEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFU
Rk9STShJT1MpCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlSU9TLmgiCisjZGVmaW5lIFBs
YXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWUgTWVkaWFQbGF5ZXJQcml2YXRlSU9TCisjZWxzZQog
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgiCisjZW5kaWYKICNpZiBVU0UoQVZG
T1VOREFUSU9OKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
aCIKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQpAQCAtMjEyLDcgKzIxNyw3IEBAIHN0YXRpYyBW
ZWN0b3I8TWVkaWFQbGF5ZXJGYWN0b3J5Kj4mIGluc3RhbGxlZE1lZGlhRW5naW5lcyhSZXF1ZXJ5
RW5naW5lT3B0aW9ucyByCiAKICNpZiBVU0UoQVZGT1VOREFUSU9OKQogICAgICAgICBpZiAoU2V0
dGluZ3M6OmlzQVZGb3VuZGF0aW9uRW5hYmxlZCgpKSB7Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQ
TEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICAgICAgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2lu
ZSk7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKICAgICAgICAgICAgIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2lu
ZSk7CkBAIC0yMjMsMTAgKzIyOCwxMiBAQCBzdGF0aWMgVmVjdG9yPE1lZGlhUGxheWVyRmFjdG9y
eSo+JiBpbnN0YWxsZWRNZWRpYUVuZ2luZXMoUmVxdWVyeUVuZ2luZU9wdGlvbnMgcgogICAgICAg
ICB9CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiAjaWYgUExBVEZPUk0oTUFDKQogICAg
ICAgICBpZiAoU2V0dGluZ3M6OmlzUVRLaXRFbmFibGVkKCkpCiAgICAgICAgICAgICBNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CiAj
ZW5kaWYKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChQbGF0Zm9ybU1lZGlhRW5naW5lQ2xhc3NOYW1l
KQogICAgICAgICBQbGF0Zm9ybU1lZGlhRW5naW5lQ2xhc3NOYW1lOjpyZWdpc3Rlck1lZGlhRW5n
aW5lKGFkZE1lZGlhRW5naW5lKTsKQEAgLTgzNyw2ICs4NDQsNTAgQEAgdm9pZCBNZWRpYVBsYXll
cjo6ZXhpdEZ1bGxzY3JlZW4oKQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkp
Citib29sIE1lZGlhUGxheWVyOjppc0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVs
ZXNzKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXI6OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcigp
Cit7CisgICAgbV9wcml2YXRlLT5zaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoKTsKK30KKworYm9v
bCBNZWRpYVBsYXllcjo6aGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMoKSBjb25zdAoreworICAg
IHJldHVybiBtX3ByaXZhdGUtPmhhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKCk7Cit9CisKK2Jv
b2wgTWVkaWFQbGF5ZXI6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyOjpzZXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZChi
b29sIGRpc2FibGVkKQoreworICAgIG1fcHJpdmF0ZS0+c2V0V2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWQoZGlzYWJsZWQpOworfQorCit2b2lkIE1lZGlhUGxheWVyOjpzZXRIYXNQbGF5YmFj
a1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhib29sIGhhc0xpc3RlbmVycykKK3sKKyAgICBt
X3ByaXZhdGUtPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKGhhc0xp
c3RlbmVycyk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXI6OmN1cnJlbnRQbGF5YmFja1RhcmdldElz
V2lyZWxlc3NDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllckNsaWVudCkKKyAgICAg
ICAgbV9tZWRpYVBsYXllckNsaWVudC0+bWVkaWFQbGF5ZXJDdXJyZW50UGxheWJhY2tUYXJnZXRJ
c1dpcmVsZXNzQ2hhbmdlZCh0aGlzKTsKK30KKwordm9pZCBNZWRpYVBsYXllcjo6cGxheWJhY2tU
YXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllckNsaWVu
dCkKKyAgICAgICAgbV9tZWRpYVBsYXllckNsaWVudC0+bWVkaWFQbGF5ZXJQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUNoYW5nZWQodGhpcyk7Cit9CisjZW5kaWYKKwogI2lmIFVTRShOQVRJVkVf
RlVMTFNDUkVFTl9WSURFTykKIGJvb2wgTWVkaWFQbGF5ZXI6OmNhbkVudGVyRnVsbHNjcmVlbigp
IGNvbnN0CiB7CkBAIC05NTYsNiArMTAwNywxOCBAQCB2b2lkIE1lZGlhUGxheWVyOjpzZXRQcml2
YXRlQnJvd3NpbmdNb2RlKGJvb2wgcHJpdmF0ZUJyb3dzaW5nTW9kZSkKICAgICBtX3ByaXZhdGUt
PnNldFByaXZhdGVCcm93c2luZ01vZGUobV9wcml2YXRlQnJvd3NpbmcpOwogfQogCisjaWYgUExB
VEZPUk0oSU9TKQordm9pZCBNZWRpYVBsYXllcjo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIAoreworICAgIG1fcHJpdmF0ZS0+YXR0cmli
dXRlQ2hhbmdlZChuYW1lLCB2YWx1ZSk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXI6OnJlYWR5Rm9y
UGxheWJhY2soKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnJlYWR5Rm9yUGxheWJh
Y2soKTsKK30KKyNlbmRpZgorCiAvLyBDbGllbnQgY2FsbGJhY2tzLgogdm9pZCBNZWRpYVBsYXll
cjo6bmV0d29ya1N0YXRlQ2hhbmdlZCgpCiB7CkBAIC05ODEsNyArMTA0NCwxMiBAQCB2b2lkIE1l
ZGlhUGxheWVyOjpyZWFkeVN0YXRlQ2hhbmdlZCgpCiAKIHZvaWQgTWVkaWFQbGF5ZXI6OnZvbHVt
ZUNoYW5nZWQoZG91YmxlIG5ld1ZvbHVtZSkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgVU5V
U0VEX1BBUkFNKG5ld1ZvbHVtZSk7CisgICAgbV92b2x1bWUgPSBtX3ByaXZhdGUtPnZvbHVtZSgp
OworI2Vsc2UKICAgICBtX3ZvbHVtZSA9IG5ld1ZvbHVtZTsKKyNlbmRpZgogICAgIGlmIChtX21l
ZGlhUGxheWVyQ2xpZW50KQogICAgICAgICBtX21lZGlhUGxheWVyQ2xpZW50LT5tZWRpYVBsYXll
clZvbHVtZUNoYW5nZWQodGhpcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCAxMjZkNWY2N2RjZGU4OWQ3MTU1YzI5YTU1ODYwZTYw
YWM3YzAzNGM4Li4yMjdlOWU3ZDliNmRhNDA3OTgzNDFhNGU4NDdiYjVlYjQyNjdiZTJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKQEAgLTIy
NCw2ICsyMjQsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBtZWRpYVBsYXllcktleU5l
ZWRlZChNZWRpYVBsYXllciosIFVpbnQ4QXJyYXkqKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlm
CiAgICAgCisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQorICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBs
YXllckN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkKE1lZGlhUGxheWVyKikg
eyB9OworICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllclBsYXliYWNrVGFyZ2V0QXZhaWxhYmls
aXR5Q2hhbmdlZChNZWRpYVBsYXllciopIHsgfTsKKyNlbmRpZgorCiAgICAgdmlydHVhbCBTdHJp
bmcgbWVkaWFQbGF5ZXJSZWZlcnJlcigpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAg
dmlydHVhbCBTdHJpbmcgbWVkaWFQbGF5ZXJVc2VyQWdlbnQoKSBjb25zdCB7IHJldHVybiBTdHJp
bmcoKTsgfQogICAgIHZpcnR1YWwgQ09SU01vZGUgbWVkaWFQbGF5ZXJDT1JTTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIFVuc3BlY2lmaWVkOyB9CkBAIC00MzMsNiArNDM4LDIxIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShJT1NfQUlSUExB
WSkKKyAgICBib29sIGlzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxlc3MoKSBjb25zdDsKKyAg
ICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcigpOworCisgICAgYm9vbCBoYXNXaXJlbGVz
c1BsYXliYWNrVGFyZ2V0cygpIGNvbnN0OworCisgICAgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJh
Y2tEaXNhYmxlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWQoYm9vbCk7CisKKyAgICB2b2lkIGN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3ND
aGFuZ2VkKCk7CisgICAgdm9pZCBwbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWQoKTsK
KworICAgIHZvaWQgc2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMoYm9v
bCk7CisjZW5kaWYKKwogI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKICAgICBib29s
IGNhbkVudGVyRnVsbHNjcmVlbigpIGNvbnN0OwogI2VuZGlmCkBAIC00ODYsNiArNTA2LDExIEBA
IHB1YmxpYzoKIAogICAgIFN0cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0OwogCisjaWYg
UExBVEZPUk0oSU9TKQorICAgIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIGJvb2wgcmVhZHlGb3JQbGF5YmFjaygpIGNv
bnN0OworI2VuZGlmCisKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VM
b2FkZXIoKTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKaW5kZXggY2Y3YjVm
Mjg4NWY1MTVmMjYzNDMwM2JlNjNhZTc1NWQyYjg0MzRkOC4uZmJhZmQ3MGNkOWVmMzRhMDc4MDRh
MjVhNzkyOTNiODc4MjM5YjM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKQEAgLTk3LDYgKzk3LDkgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZShmbG9hdCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldFZvbHVtZURvdWJsZShkb3VibGUgdm9sdW1lKSB7IHJldHVybiBzZXRWb2x1bWUodm9s
dW1lKTsgfQorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIGZsb2F0IHZvbHVtZSgpIGNv
bnN0IHsgcmV0dXJuIDE7IH0KKyNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTXV0
aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TXV0ZWQo
Ym9vbCkgeyB9CkBAIC0xNDEsNiArMTQ0LDE4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZXhpdEZ1bGxzY3JlZW4oKSB7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQor
ICAgIHZpcnR1YWwgYm9vbCBpc0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlj
a2VyKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBib29sIHdpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoYm9vbCkgeyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMoYm9v
bCkgeyB9CisjZW5kaWYKKwogI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKICAgICB2
aXJ0dWFsIGJvb2wgY2FuRW50ZXJGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICNlbmRpZgpAQCAtMjA5LDcgKzIyNCwxMiBAQCBwdWJsaWM6CiAjaWYgVVNFKEdTVFJFQU1FUikK
ICAgICB2aXJ0dWFsIHZvaWQgc2ltdWxhdGVBdWRpb0ludGVycnVwdGlvbigpIHsgfQogI2VuZGlm
Ci0gICAgCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9CisgICAgdmlydHVhbCBib29s
IHJlYWR5Rm9yUGxheWJhY2soKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisjZW5kaWYKKwogICAg
IHZpcnR1YWwgU3RyaW5nIGxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjaygpIGNvbnN0IHsgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7IH0KIAogICAgIHZpcnR1YWwgc2l6ZV90IGV4dHJhTWVtb3J5Q29z
dCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAppbmRleCAzMjM1YjQwZWY1MmQxNzJmNmE2YzY3
YjZiYTYyYTUzMTEwOWQwYTE5Li5iMDYyN2FkMjQ0NzI3M2E4YjUzMDM5MmI1MjlkMWE5MmYzNzJk
ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Rm9udERhdGEuY3BwCkBAIC04MCw2ICs4MCw5IEBAIFNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250
RGF0YShzdGQ6OnVuaXF1ZV9wdHI8QWRkaXRpb25hbEZvbnREYXRhPiBmb250RGF0YSwgZmxvCiAg
ICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQogI2VuZGlmCiAgICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhz
KGZhbHNlKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJh
YmljKGZhbHNlKQorI2VuZGlmCiB7CiAgICAgbV9mb250RGF0YS0+aW5pdGlhbGl6ZUZvbnREYXRh
KHRoaXMsIGZvbnRTaXplKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5oCmluZGV4IDQ1YTBmNTVmYTA5NTJlOWZhMTcxZDgwMjdjZjJh
NTg5ZjI0NDkyYWQuLjljZDMxNmYyNjY3NDUyYzdkZjZhOGM2MWE1YzE1ZTg3MmEzZDRhNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRh
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
aApAQCAtMTgwLDExICsxODAsMTUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGRlc2Ny
aXB0aW9uKCkgY29uc3QgT1ZFUlJJREU7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNp
ZiBVU0UoQVBQS0lUKQogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBnZXRDb21wb3NpdGVGb250
UmVmZXJlbmNlRm9udERhdGEoTlNGb250ICprZXkpIGNvbnN0OwogICAgIE5TRm9udCogZ2V0TlNG
b250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICBDVEZvbnRSZWYgZ2V0Q1RGb250KCkgY29uc3QgeyByZXR1
cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9CisgICAgYm9vbCBzaG91bGROb3RCZVVzZWRGb3JB
cmFiaWMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYzsgfTsKKyNl
bmRpZgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBDRkRpY3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdB
dHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlvbikgY29uc3Q7CiAj
ZW5kaWYKQEAgLTE5Nyw3ICsyMDEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoaXNT
VkdGb250KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MAorI2lmIFBMQVRGT1JNKElP
UykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
IDEwODApCiAgICAgICAgIHdrQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKHR5cGVz
ZXR0aW5nRmVhdHVyZXMgJiBLZXJuaW5nID8gd2tDVEZvbnRUcmFuc2Zvcm1BcHBseVBvc2l0aW9u
aW5nIDogMCkgfCAodHlwZXNldHRpbmdGZWF0dXJlcyAmIExpZ2F0dXJlcyA/IHdrQ1RGb250VHJh
bnNmb3JtQXBwbHlTaGFwaW5nIDogMCk7CiAgICAgICAgIHJldHVybiB3a0NURm9udFRyYW5zZm9y
bUdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCByZWludGVycHJldF9jYXN0
PENHU2l6ZSo+KGFkdmFuY2VzKSwgZ2x5cGhDb3VudCwgb3B0aW9ucyk7CiAjZWxzZQpAQCAtMzE1
LDYgKzMxOSw5IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBTQ1JJUFRfRk9OVFBST1BFUlRJRVMq
IG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CiAjZW5kaWYKICNlbmRpZgorI2lmIFBMQVRGT1JNKElP
UykKKyAgICBib29sIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljOworI2VuZGlmCiB9OwogCiBB
TFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR2x5cGgoR2x5
cGggZ2x5cGgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU3RyaW5nVHJ1bmNhdG9yLmNwcAppbmRleCBhNzJhZTRiN2E1YjkzNTRkNTZjZmFiZWM4NTk5
YzA3MWE0YjI5ODFkLi5hNDY3MzlhM2FlMTBmMDFiMjk2MTA4NWRlZjRjMTJjOGNiOTg0NzViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5j
YXRvci5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjZGVmaW5l
IFNUUklOR19CVUZGRVJfU0laRSAyMDQ4CiAKLXR5cGVkZWYgdW5zaWduZWQgVHJ1bmNhdGlvbkZ1
bmN0aW9uKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQga2VlcENvdW50
LCBVQ2hhciogYnVmZmVyKTsKK3R5cGVkZWYgdW5zaWduZWQgVHJ1bmNhdGlvbkZ1bmN0aW9uKGNv
bnN0IFN0cmluZyYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQga2VlcENvdW50LCBVQ2hhciog
YnVmZmVyLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzKTsKIAogc3RhdGljIGlubGluZSBpbnQg
dGV4dEJyZWFrQXRPclByZWNlZGluZyhUZXh0QnJlYWtJdGVyYXRvciogaXQsIGludCBvZmZzZXQp
CiB7CkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJvdW5kZWRUZXh0QnJlYWtG
b2xsb3dpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGl0LCBpbnQgb2Zmc2V0LCBpCiAgICAgcmV0dXJu
IHJlc3VsdCA9PSBUZXh0QnJlYWtEb25lID8gbGVuZ3RoIDogcmVzdWx0OwogfQogCi1zdGF0aWMg
dW5zaWduZWQgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQsIFVDaGFyKiBidWZmZXIpCitzdGF0aWMg
dW5zaWduZWQgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQsIFVDaGFyKiBidWZmZXIsIGJvb2wgc2hv
dWxkSW5zZXJ0RWxsaXBzaXMpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oa2VlcENvdW50IDwgbGVuZ3RoKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihrZWVwQ291bnQgPCBTVFJJTkdfQlVGRkVSX1NJWkUpOwpAQCAtNjYsMzIgKzY2LDEyNSBA
QCBzdGF0aWMgdW5zaWduZWQgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlcihjb25zdCBTdHJpbmcmIHN0
cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bgogICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRl
cmF0b3IgaXQoc3RyaW5nLmNoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKICAgICB1bnNpZ25lZCBvbWl0
RW5kID0gYm91bmRlZFRleHRCcmVha0ZvbGxvd2luZyhpdCwgb21pdFN0YXJ0ICsgKGxlbmd0aCAt
IGtlZXBDb3VudCkgLSAxLCBsZW5ndGgpOwogICAgIG9taXRTdGFydCA9IHRleHRCcmVha0F0T3JQ
cmVjZWRpbmcoaXQsIG9taXRTdGFydCk7Ci0gICAgCi0gICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVu
Z3RoID0gb21pdFN0YXJ0ICsgMSArIChsZW5ndGggLSBvbWl0RW5kKTsKKworI2lmIFBMQVRGT1JN
KElPUykKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGd1YXJkIHRoaXMgY29kZSBiZWhpbmQgYW4g
ZWRpdGluZyBiZWhhdmlvci4gVGhlbiB3ZSBjYW4gcmVtb3ZlIHRoZSBQTEFURk9STShJT1MpLWd1
YXJkLgorCisgICAgLy8gU3RyaXAgc2luZ2xlIGNoYXJhY3RlciBiZWZvcmUgZWxsaXBzaXMgY2hh
cmFjdGVyLCB3aGVuIHRoYXQgY2hhcmFjdGVyIGlzIHByZWNlZGVkIGJ5IGEgc3BhY2UKKyAgICBp
ZiAob21pdFN0YXJ0ID4gMSAmJiBzdHJpbmdbb21pdFN0YXJ0IC0gMV0gIT0gc3BhY2UgJiYgb21p
dFN0YXJ0ID4gMiAmJiBzdHJpbmdbb21pdFN0YXJ0IC0gMl0gPT0gc3BhY2UpCisgICAgICAgIC0t
b21pdFN0YXJ0OworCisgICAgLy8gU3RyaXAgd2hpdGVzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRo
ZSBlbGxpcHNpcyBjaGFyYWN0ZXIKKyAgICB3aGlsZSAob21pdFN0YXJ0ID4gMSAmJiBzdHJpbmdb
b21pdFN0YXJ0IC0gMV0gPT0gc3BhY2UpCisgICAgICAgIC0tb21pdFN0YXJ0OworCisgICAgLy8g
U3RyaXAgc2luZ2xlIGNoYXJhY3RlciBhZnRlciBlbGxpcHNpcyBjaGFyYWN0ZXIsIHdoZW4gdGhh
dCBjaGFyYWN0ZXIgaXMgZm9sbG93ZWQgYnkgYSBzcGFjZQorICAgIGlmICgobGVuZ3RoIC0gb21p
dEVuZCkgPiAxICYmIHN0cmluZ1tvbWl0RW5kXSAhPSBzcGFjZSAmJiAobGVuZ3RoIC0gb21pdEVu
ZCkgPiAyICYmIHN0cmluZ1tvbWl0RW5kICsgMV0gPT0gc3BhY2UpCisgICAgICAgICsrb21pdEVu
ZDsKKworICAgIHdoaWxlICgobGVuZ3RoIC0gb21pdEVuZCkgPiAxICYmIHN0cmluZ1tvbWl0RW5k
XSA9PSBzcGFjZSkKKyAgICAgICAgKytvbWl0RW5kOworI2VuZGlmCisKKyAgICB1bnNpZ25lZCB0
cnVuY2F0ZWRMZW5ndGggPSBzaG91bGRJbnNlcnRFbGxpcHNpcyA/IG9taXRTdGFydCArIDEgKyAo
bGVuZ3RoIC0gb21pdEVuZCkgOiBsZW5ndGggLSAob21pdEVuZCAtIG9taXRTdGFydCk7CiAgICAg
QVNTRVJUKHRydW5jYXRlZExlbmd0aCA8PSBsZW5ndGgpOwogCiAgICAgbWVtY3B5KGJ1ZmZlciwg
c3RyaW5nLmNoYXJhY3RlcnMoKSwgc2l6ZW9mKFVDaGFyKSAqIG9taXRTdGFydCk7Ci0gICAgYnVm
ZmVyW29taXRTdGFydF0gPSBob3Jpem9udGFsRWxsaXBzaXM7Ci0gICAgbWVtY3B5KCZidWZmZXJb
b21pdFN0YXJ0ICsgMV0sICZzdHJpbmcuY2hhcmFjdGVycygpW29taXRFbmRdLCBzaXplb2YoVUNo
YXIpICogKGxlbmd0aCAtIG9taXRFbmQpKTsKLSAgICAKKyAgICBpZiAoc2hvdWxkSW5zZXJ0RWxs
aXBzaXMpIHsKKyAgICAgICAgYnVmZmVyW29taXRTdGFydF0gPSBob3Jpem9udGFsRWxsaXBzaXM7
CisgICAgICAgIG1lbWNweSgmYnVmZmVyW29taXRTdGFydCArIDFdLCAmc3RyaW5nLmNoYXJhY3Rl
cnMoKVtvbWl0RW5kXSwgc2l6ZW9mKFVDaGFyKSAqIChsZW5ndGggLSBvbWl0RW5kKSk7ICAgIAor
ICAgIH0gZWxzZQorICAgICAgICBtZW1jcHkoJmJ1ZmZlcltvbWl0U3RhcnRdLCAmc3RyaW5nLmNo
YXJhY3RlcnMoKVtvbWl0RW5kXSwgc2l6ZW9mKFVDaGFyKSAqIChsZW5ndGggLSBvbWl0RW5kKSk7
CiAgICAgcmV0dXJuIHRydW5jYXRlZExlbmd0aDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHJpZ2h0
VHJ1bmNhdGVUb0J1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1
bnNpZ25lZCBrZWVwQ291bnQsIFVDaGFyKiBidWZmZXIpCitzdGF0aWMgdW5zaWduZWQgcmlnaHRU
cnVuY2F0ZVRvQnVmZmVyKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIHVu
c2lnbmVkIGtlZXBDb3VudCwgVUNoYXIqIGJ1ZmZlciwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNp
cykKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihrZWVwQ291bnQgPCBs
ZW5ndGgpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGtlZXBDb3VudCA8
IFNUUklOR19CVUZGRVJfU0laRSk7Ci0gICAgCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBndWFyZCB0aGlzIGNvZGUgYmVoaW5kIGFuIGVkaXRpbmcgYmVoYXZp
b3IuIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKworICAgIC8v
IFN0cmlwIHNpbmdsZSBjaGFyYWN0ZXIgYmVmb3JlIGVsbGlwc2lzIGNoYXJhY3Rlciwgd2hlbiB0
aGF0IGNoYXJhY3RlciBpcyBwcmVjZWRlZCBieSBhIHNwYWNlCisgICAgaWYgKGtlZXBDb3VudCA+
IDEgJiYgc3RyaW5nW2tlZXBDb3VudCAtIDFdICE9IHNwYWNlICYmIGtlZXBDb3VudCA+IDIgJiYg
c3RyaW5nW2tlZXBDb3VudCAtIDJdID09IHNwYWNlKQorICAgICAgICAtLWtlZXBDb3VudDsKKwor
ICAgIC8vIFN0cmlwIHdoaXRlc3BhY2UgYmVmb3JlIHRoZSBlbGxpcHNpcyBjaGFyYWN0ZXIKKyAg
ICB3aGlsZSAoa2VlcENvdW50ID4gMSAmJiBzdHJpbmdba2VlcENvdW50IC0gMV0gPT0gc3BhY2Up
CisgICAgICAgIC0ta2VlcENvdW50OworI2VuZGlmCisKICAgICBOb25TaGFyZWRDaGFyYWN0ZXJC
cmVha0l0ZXJhdG9yIGl0KHN0cmluZy5jaGFyYWN0ZXJzKCksIGxlbmd0aCk7CiAgICAgdW5zaWdu
ZWQga2VlcExlbmd0aCA9IHRleHRCcmVha0F0T3JQcmVjZWRpbmcoaXQsIGtlZXBDb3VudCk7Ci0g
ICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoID0ga2VlcExlbmd0aCArIDE7Ci0gICAgCisgICAg
dW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoID0gc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPyBrZWVwTGVu
Z3RoICsgMSA6IGtlZXBMZW5ndGg7CisKICAgICBtZW1jcHkoYnVmZmVyLCBzdHJpbmcuY2hhcmFj
dGVycygpLCBzaXplb2YoVUNoYXIpICoga2VlcExlbmd0aCk7Ci0gICAgYnVmZmVyW2tlZXBMZW5n
dGhdID0gaG9yaXpvbnRhbEVsbGlwc2lzOwotICAgIAorICAgIGlmIChzaG91bGRJbnNlcnRFbGxp
cHNpcykKKyAgICAgICAgYnVmZmVyW2tlZXBMZW5ndGhdID0gaG9yaXpvbnRhbEVsbGlwc2lzOwor
CiAgICAgcmV0dXJuIHRydW5jYXRlZExlbmd0aDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIHJpZ2h0
Q2xpcFRvQ2hhcmFjdGVyQnVmZmVyKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIGtlZXBDb3VudCwgVUNoYXIqIGJ1ZmZlciwgYm9vbCkKK3sKKyAgICBBU1NF
UlQoa2VlcENvdW50IDwgbGVuZ3RoKTsKKyAgICBBU1NFUlQoa2VlcENvdW50IDwgU1RSSU5HX0JV
RkZFUl9TSVpFKTsKKworICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoc3Ry
aW5nLmNoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBrZWVwTGVuZ3RoID0gdGV4
dEJyZWFrQXRPclByZWNlZGluZyhpdCwga2VlcENvdW50KTsKKyAgICBtZW1jcHkoYnVmZmVyLCBz
dHJpbmcuY2hhcmFjdGVycygpLCBzaXplb2YoVUNoYXIpICoga2VlcExlbmd0aCk7CisKKyAgICBy
ZXR1cm4ga2VlcExlbmd0aDsKK30KKworc3RhdGljIHVuc2lnbmVkIHJpZ2h0Q2xpcFRvV29yZEJ1
ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVw
Q291bnQsIFVDaGFyKiBidWZmZXIsIGJvb2wpCit7CisgICAgQVNTRVJUKGtlZXBDb3VudCA8IGxl
bmd0aCk7CisgICAgQVNTRVJUKGtlZXBDb3VudCA8IFNUUklOR19CVUZGRVJfU0laRSk7CisKKyAg
ICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihzdHJpbmcuY2hhcmFj
dGVycygpLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGtlZXBMZW5ndGggPSB0ZXh0QnJlYWtBdE9y
UHJlY2VkaW5nKGl0LCBrZWVwQ291bnQpOworICAgIG1lbWNweShidWZmZXIsIHN0cmluZy5jaGFy
YWN0ZXJzKCksIHNpemVvZihVQ2hhcikgKiBrZWVwTGVuZ3RoKTsKKworI2lmIFBMQVRGT1JNKElP
UykKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGd1YXJkIHRoaXMgY29kZSBiZWhpbmQgYW4gZWRp
dGluZyBiZWhhdmlvci4gVGhlbiB3ZSBjYW4gcmVtb3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJk
LgorICAgIC8vIE1vdGl2YXRlZCBieSA8cmRhcjovL3Byb2JsZW0vNzQzOTMyNz4gdHJ1bmNhdGlv
biBzaG91bGQgbm90IGluY2x1ZGUgYSB0cmFpbGluZyBzcGFjZQorICAgIHdoaWxlICgoa2VlcExl
bmd0aCA+IDApICYmIChzdHJpbmdba2VlcExlbmd0aCAtIDFdID09IHNwYWNlKSkKKyAgICAgICAg
LS1rZWVwTGVuZ3RoOworI2VuZGlmCisgICAgcmV0dXJuIGtlZXBMZW5ndGg7Cit9CisKK3N0YXRp
YyB1bnNpZ25lZCBsZWZ0VHJ1bmNhdGVUb0J1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQsIFVDaGFyKiBidWZmZXIsIGJvb2wgc2hv
dWxkSW5zZXJ0RWxsaXBzaXMpCit7CisgICAgQVNTRVJUKGtlZXBDb3VudCA8IGxlbmd0aCk7Cisg
ICAgQVNTRVJUKGtlZXBDb3VudCA8IFNUUklOR19CVUZGRVJfU0laRSk7CisKKyAgICB1bnNpZ25l
ZCBzdGFydEluZGV4ID0gbGVuZ3RoIC0ga2VlcENvdW50OworCisgICAgTm9uU2hhcmVkQ2hhcmFj
dGVyQnJlYWtJdGVyYXRvciBpdChzdHJpbmcuY2hhcmFjdGVycygpLCBsZW5ndGgpOworICAgIHVu
c2lnbmVkIGFkanVzdGVkU3RhcnRJbmRleCA9IHN0YXJ0SW5kZXg7CisgICAgc3RhcnRJbmRleCA9
IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHN0YXJ0SW5kZXgsIGxlbmd0aCAtIHN0YXJ0
SW5kZXgpOworCisgICAgLy8gU3RyaXAgc2luZ2xlIGNoYXJhY3RlciBhZnRlciBlbGxpcHNpcyBj
aGFyYWN0ZXIsIHdoZW4gdGhhdCBjaGFyYWN0ZXIgaXMgcHJlY2VkZWQgYnkgYSBzcGFjZQorICAg
IGlmIChhZGp1c3RlZFN0YXJ0SW5kZXggPCBsZW5ndGggJiYgc3RyaW5nW2FkanVzdGVkU3RhcnRJ
bmRleF0gIT0gc3BhY2UKKyAgICAgICAgJiYgYWRqdXN0ZWRTdGFydEluZGV4IDwgbGVuZ3RoIC0g
MSAmJiBzdHJpbmdbYWRqdXN0ZWRTdGFydEluZGV4ICsgMV0gPT0gc3BhY2UpCisgICAgICAgICsr
YWRqdXN0ZWRTdGFydEluZGV4OworCisgICAgLy8gU3RyaXAgd2hpdGVzcGFjZSBhZnRlciB0aGUg
ZWxsaXBzaXMgY2hhcmFjdGVyCisgICAgd2hpbGUgKGFkanVzdGVkU3RhcnRJbmRleCA8IGxlbmd0
aCAmJiBzdHJpbmdbYWRqdXN0ZWRTdGFydEluZGV4XSA9PSBzcGFjZSkKKyAgICAgICAgKythZGp1
c3RlZFN0YXJ0SW5kZXg7CisKKyAgICBpZiAoc2hvdWxkSW5zZXJ0RWxsaXBzaXMpIHsKKyAgICAg
ICAgYnVmZmVyWzBdID0gaG9yaXpvbnRhbEVsbGlwc2lzOworICAgICAgICBtZW1jcHkoJmJ1ZmZl
clsxXSwgJnN0cmluZy5jaGFyYWN0ZXJzKClbYWRqdXN0ZWRTdGFydEluZGV4XSwgc2l6ZW9mKFVD
aGFyKSAqIChsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5kZXggKyAxKSk7CisgICAgICAgIHJldHVy
biBsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5kZXggKyAxOworICAgIH0KKyAgICBtZW1jcHkoJmJ1
ZmZlclswXSwgJnN0cmluZy5jaGFyYWN0ZXJzKClbYWRqdXN0ZWRTdGFydEluZGV4XSwgc2l6ZW9m
KFVDaGFyKSAqIChsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5kZXggKyAxKSk7CisgICAgcmV0dXJu
IGxlbmd0aCAtIGFkanVzdGVkU3RhcnRJbmRleDsKK30KKwogc3RhdGljIGZsb2F0IHN0cmluZ1dp
ZHRoKGNvbnN0IEZvbnQmIHJlbmRlcmVyLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoLCBib29sIGRpc2FibGVSb3VuZGluZ0hhY2tzKQogewogICAgIFRleHRSdW4gcnVu
KGNoYXJhY3RlcnMsIGxlbmd0aCk7CkBAIC0xMDAsMjMgKzE5MywyOSBAQCBzdGF0aWMgZmxvYXQg
c3RyaW5nV2lkdGgoY29uc3QgRm9udCYgcmVuZGVyZXIsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZAogICAgIHJldHVybiByZW5kZXJlci53aWR0aChydW4pOwogfQogCi1zdGF0aWMg
U3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0
aCwgY29uc3QgRm9udCYgZm9udCwgVHJ1bmNhdGlvbkZ1bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIs
IGJvb2wgZGlzYWJsZVJvdW5kaW5nSGFja3MpCitzdGF0aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5n
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwg
VHJ1bmNhdGlvbkZ1bmN0aW9uIHRydW5jYXRlVG9CdWZmZXIsIGJvb2wgZGlzYWJsZVJvdW5kaW5n
SGFja3MsIGZsb2F0KiByZXN1bHRXaWR0aCA9IG51bGxwdHIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxs
aXBzaXMgPSB0cnVlLCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDAsIGJv
b2wgYWx3YXlzVHJ1bmNhdGUgPSBmYWxzZSkKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIHN0cmluZzsKLSAgICAKKworICAgIGlmIChyZXN1bHRXaWR0aCkKKyAg
ICAgICAgKnJlc3VsdFdpZHRoID0gMDsKKwogICAgIEFTU0VSVChtYXhXaWR0aCA+PSAwKTsKLSAg
ICAKLSAgICBmbG9hdCBjdXJyZW50RWxsaXBzaXNXaWR0aCA9IHN0cmluZ1dpZHRoKGZvbnQsICZo
b3Jpem9udGFsRWxsaXBzaXMsIDEsIGRpc2FibGVSb3VuZGluZ0hhY2tzKTsKLSAgICAKKworICAg
IGZsb2F0IGN1cnJlbnRFbGxpcHNpc1dpZHRoID0gc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPyBzdHJp
bmdXaWR0aChmb250LCAmaG9yaXpvbnRhbEVsbGlwc2lzLCAxLCBkaXNhYmxlUm91bmRpbmdIYWNr
cykgOiBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoOworCiAgICAgVUNoYXIgc3RyaW5nQnVm
ZmVyW1NUUklOR19CVUZGRVJfU0laRV07CiAgICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoOwog
ICAgIHVuc2lnbmVkIGtlZXBDb3VudDsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCk7CiAKICAgICBpZiAobGVuZ3RoID4gU1RSSU5HX0JVRkZFUl9TSVpFKSB7Ci0gICAgICAg
IGtlZXBDb3VudCA9IFNUUklOR19CVUZGRVJfU0laRSAtIDE7IC8vIG5lZWQgMSBjaGFyYWN0ZXIg
Zm9yIHRoZSBlbGxpcHNpcwotICAgICAgICB0cnVuY2F0ZWRMZW5ndGggPSBjZW50ZXJUcnVuY2F0
ZVRvQnVmZmVyKHN0cmluZywgbGVuZ3RoLCBrZWVwQ291bnQsIHN0cmluZ0J1ZmZlcik7CisgICAg
ICAgIGlmIChzaG91bGRJbnNlcnRFbGxpcHNpcykKKyAgICAgICAgICAgIGtlZXBDb3VudCA9IFNU
UklOR19CVUZGRVJfU0laRSAtIDE7IC8vIG5lZWQgMSBjaGFyYWN0ZXIgZm9yIHRoZSBlbGxpcHNp
cworICAgICAgICBlbHNlCisgICAgICAgICAgICBrZWVwQ291bnQgPSAwOworICAgICAgICB0cnVu
Y2F0ZWRMZW5ndGggPSBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyKHN0cmluZywgbGVuZ3RoLCBrZWVw
Q291bnQsIHN0cmluZ0J1ZmZlciwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGtlZXBDb3VudCA9IGxlbmd0aDsKICAgICAgICAgbWVtY3B5KHN0cmluZ0J1ZmZl
ciwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc2l6ZW9mKFVDaGFyKSAqIGxlbmd0aCk7CkBAIC0xMjQs
OCArMjIzLDEzIEBAIHN0YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmCiAgICAgfQogCiAgICAgZmxvYXQg
d2lkdGggPSBzdHJpbmdXaWR0aChmb250LCBzdHJpbmdCdWZmZXIsIHRydW5jYXRlZExlbmd0aCwg
ZGlzYWJsZVJvdW5kaW5nSGFja3MpOwotICAgIGlmICh3aWR0aCA8PSBtYXhXaWR0aCkKKyAgICBp
ZiAoIXNob3VsZEluc2VydEVsbGlwc2lzICYmIGFsd2F5c1RydW5jYXRlKQorICAgICAgICB3aWR0
aCArPSBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoOworICAgIGlmICgod2lkdGggLSBtYXhX
aWR0aCkgPCAwLjAwMDEpIHsgLy8gSWdub3JlIHJvdW5kaW5nIGVycm9ycy4KKyAgICAgICAgaWYg
KHJlc3VsdFdpZHRoKQorICAgICAgICAgICAgKnJlc3VsdFdpZHRoID0gd2lkdGg7CiAgICAgICAg
IHJldHVybiBzdHJpbmc7CisgICAgfQogCiAgICAgdW5zaWduZWQga2VlcENvdW50Rm9yTGFyZ2Vz
dEtub3duVG9GaXQgPSAwOwogICAgIGZsb2F0IHdpZHRoRm9yTGFyZ2VzdEtub3duVG9GaXQgPSBj
dXJyZW50RWxsaXBzaXNXaWR0aDsKQEAgLTE1NiwxMyArMjYwLDE3IEBAIHN0YXRpYyBTdHJpbmcg
dHJ1bmNhdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25z
dCBGb250JiBmCiAgICAgICAgIEFTU0VSVChrZWVwQ291bnQgPiAwKTsKICAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oa2VlcENvdW50IDwga2VlcENvdW50Rm9yU21hbGxl
c3RLbm93blRvTm90Rml0KTsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oa2VlcENvdW50ID4ga2VlcENvdW50Rm9yTGFyZ2VzdEtub3duVG9GaXQpOwotICAgICAgICAK
LSAgICAgICAgdHJ1bmNhdGVkTGVuZ3RoID0gdHJ1bmNhdGVUb0J1ZmZlcihzdHJpbmcsIGxlbmd0
aCwga2VlcENvdW50LCBzdHJpbmdCdWZmZXIpOworCisgICAgICAgIHRydW5jYXRlZExlbmd0aCA9
IHRydW5jYXRlVG9CdWZmZXIoc3RyaW5nLCBsZW5ndGgsIGtlZXBDb3VudCwgc3RyaW5nQnVmZmVy
LCBzaG91bGRJbnNlcnRFbGxpcHNpcyk7CiAKICAgICAgICAgd2lkdGggPSBzdHJpbmdXaWR0aChm
b250LCBzdHJpbmdCdWZmZXIsIHRydW5jYXRlZExlbmd0aCwgZGlzYWJsZVJvdW5kaW5nSGFja3Mp
OworICAgICAgICBpZiAoIXNob3VsZEluc2VydEVsbGlwc2lzKQorICAgICAgICAgICAgd2lkdGgg
Kz0gY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aDsKICAgICAgICAgaWYgKHdpZHRoIDw9IG1h
eFdpZHRoKSB7CiAgICAgICAgICAgICBrZWVwQ291bnRGb3JMYXJnZXN0S25vd25Ub0ZpdCA9IGtl
ZXBDb3VudDsKICAgICAgICAgICAgIHdpZHRoRm9yTGFyZ2VzdEtub3duVG9GaXQgPSB3aWR0aDsK
KyAgICAgICAgICAgIGlmIChyZXN1bHRXaWR0aCkKKyAgICAgICAgICAgICAgICAqcmVzdWx0V2lk
dGggPSB3aWR0aDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGtlZXBDb3VudEZvclNt
YWxsZXN0S25vd25Ub05vdEZpdCA9IGtlZXBDb3VudDsKICAgICAgICAgICAgIHdpZHRoRm9yU21h
bGxlc3RLbm93blRvTm90Rml0ID0gd2lkdGg7CkBAIC0xNzUsNyArMjgzLDcgQEAgc3RhdGljIFN0
cmluZyB0cnVuY2F0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgs
IGNvbnN0IEZvbnQmIGYKICAgICAKICAgICBpZiAoa2VlcENvdW50ICE9IGtlZXBDb3VudEZvckxh
cmdlc3RLbm93blRvRml0KSB7CiAgICAgICAgIGtlZXBDb3VudCA9IGtlZXBDb3VudEZvckxhcmdl
c3RLbm93blRvRml0OwotICAgICAgICB0cnVuY2F0ZWRMZW5ndGggPSB0cnVuY2F0ZVRvQnVmZmVy
KHN0cmluZywgbGVuZ3RoLCBrZWVwQ291bnQsIHN0cmluZ0J1ZmZlcik7CisgICAgICAgIHRydW5j
YXRlZExlbmd0aCA9IHRydW5jYXRlVG9CdWZmZXIoc3RyaW5nLCBsZW5ndGgsIGtlZXBDb3VudCwg
c3RyaW5nQnVmZmVyLCBzaG91bGRJbnNlcnRFbGxpcHNpcyk7CiAgICAgfQogICAgIAogICAgIHJl
dHVybiBTdHJpbmcoc3RyaW5nQnVmZmVyLCB0cnVuY2F0ZWRMZW5ndGgpOwpAQCAtMTk2LDQgKzMw
NCwyOSBAQCBmbG9hdCBTdHJpbmdUcnVuY2F0b3I6OndpZHRoKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3VuZAogICAgIHJldHVybiBzdHJpbmdXaWR0aChm
b250LCBzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCksICFlbmFibGVSb3VuZGlu
Z0hhY2tzKTsKIH0KIAorU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1bmNhdGUoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmb250LCBFbmFi
bGVSb3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdp
ZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxl
bWVudFdpZHRoKQoreworICAgIHJldHVybiB0cnVuY2F0ZVN0cmluZyhzdHJpbmcsIG1heFdpZHRo
LCBmb250LCBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyLCAhZW5hYmxlUm91bmRpbmdIYWNrcywgJnJl
c3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRX
aWR0aCk7Cit9CisKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmb250LCBFbmFibGVS
b3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRo
LCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVu
dFdpZHRoKQoreworICAgIHJldHVybiB0cnVuY2F0ZVN0cmluZyhzdHJpbmcsIG1heFdpZHRoLCBm
b250LCByaWdodFRydW5jYXRlVG9CdWZmZXIsICFlbmFibGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0
V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRo
KTsKK30KKworU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6bGVmdFRydW5jYXRlKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRp
bmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9v
bCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0
aCkKK3sKKyAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwg
bGVmdFRydW5jYXRlVG9CdWZmZXIsICFlbmFibGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgs
IHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKK30K
KworU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmb250LCBFbmFibGVSb3Vu
ZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRoLCBi
b29sIHNob3VsZEluc2VydEVsbGlwc2lzLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdp
ZHRoKQoreworICAgIHJldHVybiB0cnVuY2F0ZVN0cmluZyhzdHJpbmcsIG1heFdpZHRoLCBmb250
LCByaWdodENsaXBUb0NoYXJhY3RlckJ1ZmZlciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1
bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lk
dGgpOworfQorCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdodENsaXBUb1dvcmQoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmb250LCBFbmFibGVS
b3VuZGluZ0hhY2tzT3JOb3QgZW5hYmxlUm91bmRpbmdIYWNrcywgZmxvYXQmIHJlc3VsdFdpZHRo
LCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzLCAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1l
bnRXaWR0aCwgYm9vbCBhbHdheXNUcnVuY2F0ZSkKK3sKKyAgICByZXR1cm4gdHJ1bmNhdGVTdHJp
bmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRDbGlwVG9Xb3JkQnVmZmVyLCAhZW5hYmxl
Um91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywgY3VzdG9t
VHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCwgYWx3YXlzVHJ1bmNhdGUpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TdHJpbmdUcnVuY2F0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0
cmluZ1RydW5jYXRvci5oCmluZGV4IDE0OTljMTA4NzQ0NzNhZDQ2M2M0ZjM3YWIyMDRlZDAwNjc5
ZGNkN2MuLjEzZDhlMTRhZjdlODY0OGE3MWNmNDc3MDQwNjY2Mjg2OWUzOTdjNGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCkBA
IC00MSw2ICs0MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIFN0
cmluZyBjZW50ZXJUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3Qg
Rm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsK
ICAgICAgICAgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0
IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90ID0gRGlzYWJs
ZVJvdW5kaW5nSGFja3MpOworCisgICAgICAgIHN0YXRpYyBTdHJpbmcgY2VudGVyVHJ1bmNhdGUo
Y29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGlu
Z0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNp
cyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKKyAgICAg
ICAgc3RhdGljIFN0cmluZyByaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0
V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVu
Y2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgbGVmdFRydW5j
YXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91
bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxs
aXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7Cisg
ICAgICAgIHN0YXRpYyBTdHJpbmcgcmlnaHRDbGlwVG9DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiwg
ZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZs
b2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwKTsKKyAgICAgICAgc3RhdGljIFN0cmlu
ZyByaWdodENsaXBUb1dvcmQoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZv
bnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBz
aG91bGRJbnNlcnRFbGxpcHNpcyA9IHRydWUsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50
V2lkdGggPSAwLCBib29sIGFsd2F5c1RydW5jYXRlID0gZmFsc2UpOworCiAgICAgICAgIHN0YXRp
YyBmbG9hdCB3aWR0aChjb25zdCBTdHJpbmcmLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdI
YWNrc09yTm90ID0gRGlzYWJsZVJvdW5kaW5nSGFja3MpOwogICAgIH07CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0VHJhY2tSZXByZXNlbnRh
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbi5jcHAKaW5kZXggNjhlNGMyZDRhMzA5MzU1ZWE4MzQzNGVkYjVkOTgzN2VkN2Zh
NTY1YS4uZDE3OGU1ODZmNzhmMjAxNjkwZWVjMzNmMjJhMjYzNDkzYmExYWRlOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFRyYWNrUmVwcmVzZW50YXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRUcmFja1Jl
cHJlc2VudGF0aW9uLmNwcApAQCAtNDIsMTAgKzQyLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IEludFJlY3QgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgpOyB9CiB9OwogCisjaWYg
IVBMQVRGT1JNKElPUykKIFBhc3NPd25QdHI8VGV4dFRyYWNrUmVwcmVzZW50YXRpb24+IFRleHRU
cmFja1JlcHJlc2VudGF0aW9uOjpjcmVhdGUoVGV4dFRyYWNrUmVwcmVzZW50YXRpb25DbGllbnQq
KQogewogICAgIHJldHVybiBXVEY6OmFkb3B0UHRyKG5ldyBOdWxsVGV4dFRyYWNrUmVwcmVzZW50
YXRpb24oKSk7CiB9CisjZW5kaWYKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKaW5kZXggYmY2MzVjOWNhNDdmNjQ0NjNhNjMyNGI3
Zjg3NzlmNDM0MzkxYWE0Ny4uMTM0NGI5YWU2MTQyNGViMTM0NzdiMWJkNjI1NjgwMjMzNTFkYjZl
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0
b3IuaApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c1R5cGVzZXR0aW5nRmVhdHVyZXMoY29uc3QgRm9udCYgZm9udCkKICAgICB7Ci0jaWYgUExBVEZP
Uk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MAorI2lmIFBM
QVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+IDEwODApCiAgICAgICAgIGlmICghZm9udC5pc1ByaW50ZXJGb250KCkpCiAgICAg
ICAgICAgICByZXR1cm4gIWZvbnQudHlwZXNldHRpbmdGZWF0dXJlcygpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQVZUcmFja1By
aXZhdGVBVkZPYmpDSW1wbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9BVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsLm1tCmluZGV4IDE2ZDA4MTE3NmQ3
ODkxNTllNGE3MjhkNDc0OWI0MWI1Mzk5MzI3OTYuLjllNDU1YjRlOTIwMDNmY2UyNmY0YjQwNWMy
ZjAzYjg5Yzk3MmFkZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9BVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BVlRyYWNrUHJpdmF0ZUFW
Rk9iakNJbXBsLm1tCkBAIC0xMTUsNyArMTE1LDcgQEAgQXRvbWljU3RyaW5nIEFWVHJhY2tQcml2
YXRlQVZGT2JqQ0ltcGw6OmxhYmVsKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGVtcHR5QXRvbTsK
IAogICAgIC8vIElmIHBvc3NpYmxlLCByZXR1cm4gYSB0aXRsZSBpbiBvbmUgb2YgdGhlIHVzZXIn
cyBwcmVmZXJyZWQgbGFuZ3VhZ2VzLgotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTA4MAorI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMDgwCiAgICAgTlNBcnJheSAqdGl0bGVzRm9yUHJlZmVycmVkTGFuZ3VhZ2Vz
ID0gW0FWTWV0YWRhdGFJdGVtIG1ldGFkYXRhSXRlbXNGcm9tQXJyYXk6dGl0bGVzIGZpbHRlcmVk
QW5kU29ydGVkQWNjb3JkaW5nVG9QcmVmZXJyZWRMYW5ndWFnZXM6W05TTG9jYWxlIHByZWZlcnJl
ZExhbmd1YWdlc11dOwogI2Vsc2UKICAgICBOU0FycmF5ICp0aXRsZXNGb3JQcmVmZXJyZWRMYW5n
dWFnZXMgPSBbQVZNZXRhZGF0YUl0ZW0gbWV0YWRhdGFJdGVtc0Zyb21BcnJheTp0aXRsZXMgd2l0
aExvY2FsZTpbTlNMb2NhbGUgY3VycmVudExvY2FsZV1dOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0K
aW5kZXggYTYzZWQ2NzVkMDU2MmI1MDM2Y2IyMTczOGI3NTdjMjU5M2I1NWE4Zi4uOTk0ODZkN2Ex
NDZmZGJlYWM2ZmQxOGNhZWZjZGVjZTlmMjZjZDkxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1t
CkBAIC02Miw4ICs2MiwxMiBAQAogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaW1w
b3J0IDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0aW9uLmg+Ci0jaW1wb3J0IDxDb3JlTWVkaWEvQ29y
ZU1lZGlhLmg+CisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFn
ZS5oPgorI2Vsc2UKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CisjZW5kaWYKKyNp
bXBvcnQgPENvcmVNZWRpYS9Db3JlTWVkaWEuaD4KIAogI2lmIFVTRShWSURFT1RPT0xCT1gpCiAj
aW1wb3J0IDxDb3JlVmlkZW8vQ29yZVZpZGVvLmg+CkBAIC03NzksNyArNzgzLDcgQEAgZG91Ymxl
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtTWF4VGltZVNlZWth
YmxlKCkgY29uc3QKIAogZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
cGxhdGZvcm1NYXhUaW1lTG9hZGVkKCkgY29uc3QKIHsKLSNpZiBQTEFURk9STShNQUMpICYmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0gMTA4MAorI2lmICFQTEFURk9STShJT1Mp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0gMTA4MAogICAgIC8vIEFWRm91
bmRhdGlvbiBvbiBNb3VudGFpbiBMaW9uIHdpbGwgb2NjYXNpb25hbGx5IG5vdCBzZW5kIGEgS1ZP
IG5vdGlmaWNhdGlvbgogICAgIC8vIHdoZW4gbG9hZGVkVGltZVJhbmdlcyBjaGFuZ2VzIHdoZW4g
dGhlcmUgaXMgbm8gdmlkZW8gb3V0cHV0LiBJbiB0aGF0IGNhc2UKICAgICAvLyB1cGRhdGUgdGhl
IGNhY2hlZCB2YWx1ZSBleHBsaWNpdGx5LgpAQCAtMTIzMiw2ICsxMjM2LDE0IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2l6ZUNoYW5nZWQoKQogICAgIHNldE5h
dHVyYWxTaXplKEludFNpemUobmF0dXJhbFNpemUpKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykK
Ky8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIGlPUyBpbiBXZWJLaXQgU3lzdGVtIEludGVyZmFjZS4K
K3N0YXRpYyBpbmxpbmUgTlNVUkwgKndrQVZBc3NldFJlc29sdmVkVVJMKEFWQXNzZXQqKQorewor
ICAgIHJldHVybiBuaWw7Cit9CisjZW5kaWYKKwogYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IAogewogICAgIGlm
ICghbV9hdkFzc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9Gb250QmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRCbGFja0JlcnJ5LmNwcAppbmRleCBlOTRjNzg3YzZj
YTAxMTE1YzQ1YTkzNjk4MmMwNjQ1ZDM0NWZmOTE4Li41YTZkYTE3ZmFjZjExMzk4NDUzOGQwMGRl
ZTdkM2FkYjExMjQyOTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0ZvbnRCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRCbGFja0JlcnJ5LmNwcApAQCAtMzgsMTAg
KzM4LDEwIEBAIHN0YXRpYyBpbmxpbmUgRlNfRklYRUQgRmxvYXRUb0ZTRml4ZWQoZmxvYXQgbikg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8RlNfRklYRUQ+KG4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQg
dG8pIGNvbnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIGlmICghcnVuLmxlbmd0aCgpKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiAwOwogCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7
CiAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CkBAIC00OSw4ICs0OSwxMCBA
QCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRgogICAgIGlmICghc2hhcGVyLnNoYXBlKCZnbHlwaEJ1
ZmZlcikpCiAgICAgICAgIHJldHVybjsKICAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9pbnQgPSBz
aGFwZXIuYWRqdXN0U3RhcnRQb2ludChwb2ludCk7CisgICAgZmxvYXQgc3RhcnRYID0gYWRqdXN0
ZWRQb2ludC54KCk7CiAKICAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1
ZmZlciwgYWRqdXN0ZWRQb2ludCk7CisgICAgcmV0dXJuIGFkanVzdGVkUG9pbnQueCgpIC0gc3Rh
cnRYOwogfQogCiBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIC8qIGZhbGxiYWNrRm9u
dHMgKi8sIEdseXBoT3ZlcmZsb3cqIC8qIGdseXBoT3ZlcmZsb3cgKi8pIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNB
LmNwcAppbmRleCA2MjU5ZDMyYTQxM2U1M2I5Y2M2Y2FmZDY5MWVjY2M0NGY1ZWVkZjAzLi5mZjU0
MTEyMGYzNTYzZWMxZDRjYzU5M2YyN2NjYjlhY2VkOGYxMTYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAg
LTQ3LDYgKzQ3LDEwIEBACiAjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUg
IldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUg
IlBsYXRmb3JtQ0FMYXllck1hYy5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uu
aCIKQEAgLTYxLDcgKzY1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIFRoZSB0aHJlc2hv
bGQgd2lkdGggb3IgaGVpZ2h0IGFib3ZlIHdoaWNoIGEgdGlsZWQgbGF5ZXIgd2lsbCBiZSB1c2Vk
LiBUaGlzIHNob3VsZCBiZQogLy8gbGFyZ2UgZW5vdWdoIHRvIGF2b2lkIHRpbGVkIGxheWVycyBm
b3IgbW9zdCBHcmFwaGljc0xheWVycywgYnV0IGxlc3MgdGhhbiB0aGUgT3BlbkdMCiAvLyB0ZXh0
dXJlIHNpemUgbGltaXQgb24gYWxsIHN1cHBvcnRlZCBoYXJkd2FyZS4KKyNpZiBQTEFURk9STShJ
T1MpCitzdGF0aWMgY29uc3QgaW50IGNNYXhQaXhlbERpbWVuc2lvbiA9IDEyODA7CisjZWxzZQog
c3RhdGljIGNvbnN0IGludCBjTWF4UGl4ZWxEaW1lbnNpb24gPSAyMDAwOworI2VuZGlmCiAKIC8v
IERlcml2ZWQgZW1waXJpY2FsbHk6IDxyZGFyOi8vcHJvYmxlbS8xMzQwMTg2MT4KIHN0YXRpYyBj
b25zdCBpbnQgY01heExheWVyVHJlZURlcHRoID0gMjUwOwpAQCAtMjgyLDcgKzI5MCw3IEBAIHN0
YXRpYyBmbG9hdCBtYXhTY2FsZUZyb21UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHQpCiBzdGF0aWMgaW5saW5lIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZEZpbHRlckFuaW1h
dGlvbnMoKQogewogLy8gPHJkYXI6Ly9wcm9ibGVtLzEwOTA3MjUxPiAtIFdlYktpdDIgZG9lc24n
dCBzdXBwb3J0IENBIGFuaW1hdGlvbnMgb2YgQ0kgZmlsdGVycyBvbiBMaW9uIGFuZCBiZWxvdwot
I2lmIFBMQVRGT1JNKE1BQykgJiYgKFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDgwKQorI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1B
QykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwKQogICAgIHJldHVy
biB0cnVlOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CkBAIC04NzEsNyArODc5LDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAgICAg
ICAgIG1fdW5jb3JyZWN0ZWRDb250ZW50c0ltYWdlID0gbmV3SW1hZ2U7CiAgICAgICAgIG1fcGVu
ZGluZ0NvbnRlbnRzSW1hZ2UgPSBuZXdJbWFnZTsKIAotI2lmICFQTEFURk9STShXSU4pCisjaWYg
IVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKElPUykKICAgICAgICAgQ0dDb2xvclNwYWNlUmVm
IGNvbG9yU3BhY2UgPSBDR0ltYWdlR2V0Q29sb3JTcGFjZShtX3BlbmRpbmdDb250ZW50c0ltYWdl
LmdldCgpKTsKIAogICAgICAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIGRldmljZVJHQiA9IENH
Q29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwpAQCAtOTE2LDYgKzkyNCwxMyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIG1lZGlhTGF5
ZXIpCiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKENvbnRlbnRzTWVkaWFMYXllckNoYW5n
ZWQpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXll
ckNBOjpjb250ZW50c0xheWVyRm9yTWVkaWEoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRl
bnRzTGF5ZXJQdXJwb3NlID09IENvbnRlbnRzTGF5ZXJGb3JNZWRpYSA/IG1fY29udGVudHNMYXll
ci0+cGxhdGZvcm1MYXllcigpIDogbnVsbHB0cjsKK30KKyNlbmRpZgorCiB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBjYW52YXNMYXllcikK
IHsKICAgICBpZiAobV9jb250ZW50c0xheWVyICYmIGNhbnZhc0xheWVyID09IG1fY29udGVudHNM
YXllci0+cGxhdGZvcm1MYXllcigpKQpAQCAtMTEwMSw2ICsxMTE2LDEwIEBAIEZsb2F0UmVjdCBH
cmFwaGljc0xheWVyQ0E6OmNvbXB1dGVWaXNpYmxlUmVjdChUcmFuc2Zvcm1TdGF0ZSYgc3RhdGUs
IENvbXB1dGVWaXNpCiAgICAgYm9vbCBtYXBXYXNDbGFtcGVkOwogICAgIEZsb2F0UmVjdCBjbGlw
UmVjdEZvckNoaWxkcmVuID0gc3RhdGUubWFwcGVkUXVhZCgmbWFwV2FzQ2xhbXBlZCkuYm91bmRp
bmdCb3goKTsKICAgICBGbG9hdFBvaW50IGJvdW5kc09yaWdpbiA9IG1fYm91bmRzT3JpZ2luOwor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBVSUtpdCBtYXkgYmUgY2hhbmdpbmcgbGF5ZXIgYm91
bmRzIGJlaGluZCBvdXIgYmFjayBpbiBvdmVyZmxvdy1zY3JvbGwgbGF5ZXJzLCBzbyB1c2UgdGhl
IGxheWVyJ3Mgb3JpZ2luLgorICAgIGJvdW5kc09yaWdpbiA9IG1fbGF5ZXItPmJvdW5kcygpLmxv
Y2F0aW9uKCk7CisjZW5kaWYKICAgICBjbGlwUmVjdEZvckNoaWxkcmVuLm1vdmUoYm91bmRzT3Jp
Z2luLngoKSwgYm91bmRzT3JpZ2luLnkoKSk7CiAgICAgCiAgICAgRmxvYXRSZWN0IGNsaXBSZWN0
Rm9yU2VsZihib3VuZHNPcmlnaW4sIG1fc2l6ZSk7CkBAIC0xNDY4LDYgKzE0ODcsMTAgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdlb21ldHJ5KGZsb2F0IHBhZ2VTY2FsZUZhY3Rvciwg
Y29uc3QgRmxvYXRQb2ludCYgcG8KICAgICBGbG9hdFNpemUgcGl4ZWxBbGlnbm1lbnRPZmZzZXQ7
CiAgICAgY29tcHV0ZVBpeGVsQWxpZ25tZW50KHBhZ2VTY2FsZUZhY3RvciwgcG9zaXRpb25SZWxh
dGl2ZVRvQmFzZSwgc2NhbGVkUG9zaXRpb24sIHNjYWxlZFNpemUsIHNjYWxlZEFuY2hvclBvaW50
LCBwaXhlbEFsaWdubWVudE9mZnNldCk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgbV9waXhl
bEFsaWdubWVudE9mZnNldCA9IHBpeGVsQWxpZ25tZW50T2Zmc2V0OworI2VuZGlmCisKICAgICBG
bG9hdFJlY3QgYWRqdXN0ZWRCb3VuZHMobV9ib3VuZHNPcmlnaW4gLSBwaXhlbEFsaWdubWVudE9m
ZnNldCwgc2NhbGVkU2l6ZSk7CiAKICAgICAvLyBVcGRhdGUgcG9zaXRpb24uCkBAIC0xNDc3LDEw
ICsxNTAwLDIxIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBw
YWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvCiAgICAgaWYgKG1fc3RydWN0dXJh
bExheWVyKSB7CiAgICAgICAgIEZsb2F0UG9pbnQgbGF5ZXJQb3NpdGlvbihtX3Bvc2l0aW9uLngo
KSArIG1fYW5jaG9yUG9pbnQueCgpICogbV9zaXplLndpZHRoKCksIG1fcG9zaXRpb24ueSgpICsg
bV9hbmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0KCkpOwogICAgICAgICBGbG9hdFJlY3Qg
bGF5ZXJCb3VuZHMobV9ib3VuZHNPcmlnaW4sIG1fc2l6ZSk7Ci0gICAgICAgIAorCisjaWYgRU5B
QkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBt
b3ZpbmcgdGhlIG1haW4gdGhyZWFkIGxvZ2ljIGludG8gUGxhdGZvcm1DQUxheWVyLgorICAgICAg
ICBpZiAobWVkaWFMYXllck11c3RCZVVwZGF0ZWRPbk1haW5UaHJlYWQoKSAmJiBXZWJUaHJlYWRJ
c0N1cnJlbnQoKSkgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNldFBvc2l0aW9u
T25NYWluVGhyZWFkKGxheWVyUG9zaXRpb24pOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5
ZXItPnNldEJvdW5kc09uTWFpblRocmVhZChsYXllckJvdW5kcyk7CisgICAgICAgICAgICBtX3N0
cnVjdHVyYWxMYXllci0+c2V0QW5jaG9yUG9pbnRPbk1haW5UaHJlYWQobV9hbmNob3JQb2ludCk7
CisgICAgICAgIH0gZWxzZSB7CisjZW5kaWYKICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNl
dFBvc2l0aW9uKGxheWVyUG9zaXRpb24pOwogICAgICAgICBtX3N0cnVjdHVyYWxMYXllci0+c2V0
Qm91bmRzKGxheWVyQm91bmRzKTsKICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNldEFuY2hv
clBvaW50KG1fYW5jaG9yUG9pbnQpOworI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVP
KQorICAgICAgICB9CisjZW5kaWYKIAogICAgICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVN
YXAgPSBtX3N0cnVjdHVyYWxMYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICAgICAgTGF5ZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwpAQCAtMTUwNCwx
MCArMTUzOCwyMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkoZmxvYXQg
cGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwbwogICAgICAgICBzY2FsZWRBbmNo
b3JQb2ludCA9IEZsb2F0UG9pbnQoMC41ZiwgMC41Zik7CiAgICAgICAgIGFkanVzdGVkUG9zaXRp
b24gPSBGbG9hdFBvaW50KHNjYWxlZEFuY2hvclBvaW50LngoKSAqIHNjYWxlZFNpemUud2lkdGgo
KSAtIHBpeGVsQWxpZ25tZW50T2Zmc2V0LndpZHRoKCksIHNjYWxlZEFuY2hvclBvaW50LnkoKSAq
IHNjYWxlZFNpemUuaGVpZ2h0KCkgLSBwaXhlbEFsaWdubWVudE9mZnNldC5oZWlnaHQoKSk7CiAg
ICAgfQotICAgIAorCisjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAgLy8g
RklYTUU6IENvbnNpZGVyIG1vdmluZyB0aGUgbWFpbiB0aHJlYWQgbG9naWMgaW50byBQbGF0Zm9y
bUNBTGF5ZXIuCisgICAgaWYgKG1lZGlhTGF5ZXJNdXN0QmVVcGRhdGVkT25NYWluVGhyZWFkKCkg
JiYgV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKKyAgICAgICAgbV9sYXllci0+c2V0UG9zaXRpb25P
bk1haW5UaHJlYWQoYWRqdXN0ZWRQb3NpdGlvbik7CisgICAgICAgIG1fbGF5ZXItPnNldEJvdW5k
c09uTWFpblRocmVhZChhZGp1c3RlZEJvdW5kcyk7CisgICAgICAgIG1fbGF5ZXItPnNldEFuY2hv
clBvaW50T25NYWluVGhyZWFkKHNjYWxlZEFuY2hvclBvaW50KTsKKyAgICB9IGVsc2UgeworI2Vu
ZGlmCiAgICAgbV9sYXllci0+c2V0UG9zaXRpb24oYWRqdXN0ZWRQb3NpdGlvbik7CiAgICAgbV9s
YXllci0+c2V0Qm91bmRzKGFkanVzdGVkQm91bmRzKTsKICAgICBtX2xheWVyLT5zZXRBbmNob3JQ
b2ludChzY2FsZWRBbmNob3JQb2ludCk7CisjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklE
RU8pCisgICAgfQorI2VuZGlmCiAKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBt
X2xheWVyQ2xvbmVzLmdldCgpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKQEAgLTE2NzgsNyArMTcyMywxMSBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6ZW5zdXJlU3RydWN0dXJhbExheWVyKFN0cnVjdHVyYWxMYXllclB1cnBv
c2UgcHVycG9zZSkKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IG9sZFByaW1hcnlM
YXllciA9IG1fc3RydWN0dXJhbExheWVyID8gbV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkgOiBtX2xh
eWVyLmdldCgpOworI2VuZGlmCisKICAgICBib29sIHN0cnVjdHVyYWxMYXllckNoYW5nZWQgPSBm
YWxzZTsKICAgICAKICAgICBpZiAocHVycG9zZSA9PSBTdHJ1Y3R1cmFsTGF5ZXJGb3JQcmVzZXJ2
ZXMzRCkgewpAQCAtMTk3Nyw4ICsyMDI2LDE4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRh
dGVDb250ZW50c1JlY3RzKCkKICAgICBpZiAoZ2FpbmVkT3JMb3N0Q2xpcHBpbmdMYXllcikKICAg
ICAgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoRG9udFNjaGVkdWxlRmx1c2gpOwogCisjaWYgRU5B
QkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAgLy8gRklYTUU6IENvbnNpZGVyIG1vdmlu
ZyB0aGUgbWFpbiB0aHJlYWQgbG9naWMgaW50byBQbGF0Zm9ybUNBTGF5ZXIuCisgICAgaWYgKG1l
ZGlhTGF5ZXJNdXN0QmVVcGRhdGVkT25NYWluVGhyZWFkKCkgJiYgV2ViVGhyZWFkSXNDdXJyZW50
KCkpIHsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRQb3NpdGlvbk9uTWFpblRocmVhZChj
b250ZW50T3JpZ2luKTsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRCb3VuZHNPbk1haW5U
aHJlYWQoY29udGVudEJvdW5kcyk7CisgICAgfSBlbHNlIHsKKyNlbmRpZgogICAgIG1fY29udGVu
dHNMYXllci0+c2V0UG9zaXRpb24oY29udGVudE9yaWdpbik7CiAgICAgbV9jb250ZW50c0xheWVy
LT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1Jf
VklERU8pIAorICAgIH0KKyNlbmRpZgogCiAgICAgaWYgKG1fY29udGVudHNMYXllckNsb25lcykg
ewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jb250ZW50c0xheWVy
Q2xvbmVzLT5lbmQoKTsKQEAgLTIzNjIsOCArMjQyMSwxMSBAQCBib29sIEdyYXBoaWNzTGF5ZXJD
QTo6Y3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uc0Zyb21LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVW
YWx1ZQogICAgIGJvb2wgaXNNYXRyaXhBbmltYXRpb24gPSBsaXN0SW5kZXggPCAwOwogICAgIGlu
dCBudW1BbmltYXRpb25zID0gaXNNYXRyaXhBbmltYXRpb24gPyAxIDogb3BlcmF0aW9ucy0+c2l6
ZSgpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJvb2wgcmV2ZXJzZUFuaW1hdGlvbkxpc3Qg
PSBmYWxzZTsKKyNlbHNlCiAgICAgYm9vbCByZXZlcnNlQW5pbWF0aW9uTGlzdCA9IHRydWU7Ci0j
aWYgIVBMQVRGT1JNKElPUykgJiYgIVBMQVRGT1JNKFdJTikKKyNpZiAhUExBVEZPUk0oV0lOKQog
ICAgICAgICAvLyBPbGQgdmVyc2lvbnMgb2YgQ29yZSBBbmltYXRpb24gYXBwbHkgYW5pbWF0aW9u
cyBpbiByZXZlcnNlIG9yZGVyICg8cmRhcjovL3Byb2JsZW0vNzA5NTYzOD4pIHNvIHdlIG5lZWQg
dG8gZmxpcCB0aGUgbGlzdC4KICAgICAgICAgLy8gdG8gYmUgbm9uLWFkZGl0aXZlLiBGb3IgYmlu
YXJ5IGNvbXBhdGliaWxpdHksIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgQ29yZSBBbmltYXRpb24g
cHJlc2VydmVzIHRoaXMgYmVoYXZpb3IgZm9yIGFwcGxpY2F0aW9ucyBsaW5rZWQKICAgICAgICAg
Ly8gb24gb3IgYmVmb3JlIFNub3cgTGVvcGFyZC4KQEAgLTIzNzMsNiArMjQzNSw3IEBAIGJvb2wg
R3JhcGhpY3NMYXllckNBOjpjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25zRnJvbUtleWZyYW1lcyhj
b25zdCBLZXlmcmFtZVZhbHVlCiAgICAgICAgIGlmICghZXhlY3V0YWJsZVdhc0xpbmtlZE9uT3JC
ZWZvcmVTbm93TGVvcGFyZCkKICAgICAgICAgICAgIHJldmVyc2VBbmltYXRpb25MaXN0ID0gZmFs
c2U7CiAjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAgICAgaWYgKHJldmVyc2VBbmlt
YXRpb25MaXN0KSB7CiAgICAgICAgIGZvciAoaW50IGFuaW1hdGlvbkluZGV4ID0gbnVtQW5pbWF0
aW9ucyAtIDE7IGFuaW1hdGlvbkluZGV4ID49IDA7IC0tYW5pbWF0aW9uSW5kZXgpIHsKICAgICAg
ICAgICAgIGlmICghYXBwZW5kVG9VbmNvbW1pdHRlZEFuaW1hdGlvbnModmFsdWVMaXN0LCBvcGVy
YXRpb25zLCBhbmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIGJveFNpemUsIGFuaW1hdGlvbkluZGV4
LCB0aW1lT2Zmc2V0LCBpc01hdHJpeEFuaW1hdGlvbikpIHsKQEAgLTMwMzIsNyArMzA5NSw5IEBA
IEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBHcmFwaGlj
c0xheWVyQ0E6OmRlZmF1bHRDb250ZW50CiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0dXBDb250
ZW50c0xheWVyKFBsYXRmb3JtQ0FMYXllciogY29udGVudHNMYXllcikKIHsKICAgICAvLyBUdXJu
IG9mZiBpbXBsaWNpdCBhbmltYXRpb25zIG9uIHRoZSBpbm5lciBsYXllci4KKyNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIGNvbnRlbnRzTGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisjZW5k
aWYKIAogICAgIGlmIChkZWZhdWx0Q29udGVudHNPcmllbnRhdGlvbigpID09IENvbXBvc2l0aW5n
Q29vcmRpbmF0ZXNCb3R0b21VcCkgewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmbGlw
cGVyKApAQCAtMzA1MSw2ICszMTE2LDEzIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXR1cENv
bnRlbnRzTGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBjb250ZW50c0xheWVyKQogICAgIH0KIH0KIAor
I2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorYm9vbCBHcmFwaGljc0xheWVyQ0E6
Om1lZGlhTGF5ZXJNdXN0QmVVcGRhdGVkT25NYWluVGhyZWFkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9jb250ZW50c0xheWVyUHVycG9zZSA9PSBDb250ZW50c0xheWVyRm9yTWVkaWE7Cit9Cisj
ZW5kaWYKKwogUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IEdyYXBoaWNzTGF5ZXJDQTo6Zmlu
ZE9yTWFrZUNsb25lKENsb25lSUQgY2xvbmVJRCwgUGxhdGZvcm1DQUxheWVyICpzb3VyY2VMYXll
ciwgTGF5ZXJNYXAqIGNsb25lcywgQ2xvbmVMZXZlbCBjbG9uZUxldmVsKQogewogICAgIGlmICgh
c291cmNlTGF5ZXIpCkBAIC0zMzI3LDEyICszMzk5LDE0IEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
Ojpjb21wdXRlUGl4ZWxBbGlnbm1lbnQoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9h
dFBvCiAgICAgCiAgICAgLy8gQ29udmVydCBiYWNrIHRvIGxheWVyIGNvb3JkaW5hdGVzLgogICAg
IGFsaWduZWRCb3VuZHMuc2NhbGUoMSAvIHBhZ2VTY2FsZUZhY3Rvcik7Ci0gICAgCisKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgIC8vIEVwc2lsb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0
IGJhY2tpbmcgc3RvcmUgc2l6ZSBjb21wdXRhdGlvbiBpbiBDQSwgd2hpY2ggaW52b2x2ZXMgaW50
ZWdlciB0cnVuY2F0aW9uLAogICAgIC8vIHdpbGwgbWF0Y2ggb3VyIGFsaWduZWQgYm91bmRzLgog
ICAgIGNvbnN0IGZsb2F0IGVwc2lsb24gPSAxZS01ZjsKICAgICBhbGlnbmVkQm91bmRzLmV4cGFu
ZChlcHNpbG9uLCBlcHNpbG9uKTsKLSAgICAKKyNlbmRpZgorCiAgICAgYWxpZ25tZW50T2Zmc2V0
ID0gYmFzZVJlbGF0aXZlQm91bmRzLmxvY2F0aW9uKCkgLSBhbGlnbmVkQm91bmRzLmxvY2F0aW9u
KCk7CiAgICAgcG9zaXRpb24gPSBtX3Bvc2l0aW9uIC0gYWxpZ25tZW50T2Zmc2V0OwogICAgIHNp
emUgPSBhbGlnbmVkQm91bmRzLnNpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKaW5kZXggMWMzN2QwMGZkYzM0NTZh
NmFkMDFlNzE0MzczNDBhNjFjZDBiNmE1Yy4uOWIyYjM2NTgzNDdhZTliZGZhZGI0ODkxM2E5Yzk0
MWU1ZGI2ZDU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvR3JhcGhpY3NMYXllckNBLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvR3JhcGhpY3NMYXllckNBLmgKQEAgLTEyMSw2ICsxMjEsOSBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CiAgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKik7CisjaWYgUExBVEZPUk0oSU9T
KQorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogY29udGVudHNMYXllckZvck1lZGlhKCkgY29u
c3QgT1ZFUlJJREU7CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZh
cyhQbGF0Zm9ybUxheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9Tb2xpZENv
bG9yKGNvbnN0IENvbG9yJik7CiAKQEAgLTEzNyw2ICsxNDAsOSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGxheWVyRGlkRGlzcGxheShQbGF0Zm9ybUxheWVyKik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgc2V0TWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQoYm9vbCk7CisjaWYgUExBVEZPUk0oSU9T
KQorICAgIHZpcnR1YWwgRmxvYXRTaXplIHBpeGVsQWxpZ25tZW50T2Zmc2V0KCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gbV9waXhlbEFsaWdubWVudE9mZnNldDsgfQorI2VuZGlmCiAgICAgdmly
dHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogCiAgICAgc3RydWN0
IENvbW1pdFN0YXRlIHsKQEAgLTI1Niw2ICsyNjIsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNl
dHVwQ29udGVudHNMYXllcihQbGF0Zm9ybUNBTGF5ZXIqKTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIq
IGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXIuZ2V0KCk7IH0K
IAorI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorICAgIGJvb2wgbWVkaWFMYXll
ck11c3RCZVVwZGF0ZWRPbk1haW5UaHJlYWQoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgdmlydHVh
bCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBnZXREZWJ1Z0JvcmRlckluZm8oQ29sb3ImLCBmbG9hdCYgd2lkdGgpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1D
QUZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3Jt
Q0FGaWx0ZXJzLmgKaW5kZXggMjljY2VmNDdkMDI4YjM0OWI2NGFlYTQzNWE2ZDI1Njg5MjlmODcw
OC4uY2RhNzJjZWY3NDA3NTdkNWU1NDMzNjA5ZDJkYjM5ZDMxMzQwZjdjNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBRmlsdGVy
cy5oCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTA4MAorI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMDgwCiAjZGVmaW5lIFVTRV9DQV9GSUxURVJTIDEKICNlbHNlCiAjZGVmaW5l
IFVTRV9DQV9GSUxURVJTIDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKaW5kZXggZmI3ZTYxMDFmNjcyNGY2NjkwNDM2MzEz
YjQ4OGExYzE0MDZiYzQyMS4uMmE0NmJkNjY0MmY4NTlmNThhMjNmYTI1NDhhYWI0YTNjMDMzMDA4
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZv
cm1DQUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxh
dGZvcm1DQUxheWVyLmgKQEAgLTIwNiw2ICsyMDYsMTQgQEAgcHVibGljOgogI2VuZGlmIC8vIE5E
RUJVRwogI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBi
b29sIGlzV2ViTGF5ZXIoKTsKKyAgICB2b2lkIHNldEJvdW5kc09uTWFpblRocmVhZChDR1JlY3Qp
OworICAgIHZvaWQgc2V0UG9zaXRpb25Pbk1haW5UaHJlYWQoQ0dQb2ludCk7CisgICAgdm9pZCBz
ZXRBbmNob3JQb2ludE9uTWFpblRocmVhZChGbG9hdFBvaW50M0QpOworICAgIHZvaWQgc2V0VGls
ZVNpemUoY29uc3QgSW50U2l6ZSYpOworI2VuZGlmCisKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
UGxhdGZvcm1DQUxheWVyPiBjcmVhdGVDb21wYXRpYmxlTGF5ZXIoTGF5ZXJUeXBlLCBQbGF0Zm9y
bUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CiAKICNpZiBQTEFURk9STShNQUMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJGbHVzaFNj
aGVkdWxlck1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
TGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAKaW5kZXggMTQ2MmQ1ZTNiNDdhNGRkNmIyMTgzOTQ2
OTZiZTIxNWIyZjY4ODhmYy4uYmZjM2U1YWY2YzMwNmZiZDVlY2E2ODEwYzNiMDQ3MTE5OGVhYzcw
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xh
eWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL21hYy9MYXllckZsdXNoU2NoZWR1bGVyTWFjLmNwcApAQCAtMzEsMTEgKzMxLDMx
IEBACiAKICNpbmNsdWRlIDx3dGYvQXV0b2RyYWluZWRQb29sLmg+CiAKKyNpZiBQTEFURk9STShJ
T1MpCisjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgiCisjaW5jbHVkZSA8
Q29yZUZvdW5kYXRpb24vQ0ZCdW5kbGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVUaHJl
YWQuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBDRklu
ZGV4IENvcmVBbmltYXRpb25SdW5Mb29wT3JkZXIgPSAyMDAwMDAwOwogc3RhdGljIGNvbnN0IENG
SW5kZXggTGF5ZXJGbHVzaFJ1bkxvb3BPcmRlciA9IENvcmVBbmltYXRpb25SdW5Mb29wT3JkZXIg
LSAxOwogCitzdGF0aWMgQ0ZSdW5Mb29wUmVmIGN1cnJlbnRSdW5Mb29wKCkKK3sKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgLy8gQSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgV2ViVmlldyBkZWFsbG9j
YXRpb24gY2FuIGxlYWQgdG8gYSBjcmFzaCBpZiB0aGUgbGF5ZXIgc3luYyBydW4gbG9vcAorICAg
IC8vIG9ic2VydmVyIGlzIGFkZGVkIHRvIHRoZSBtYWluIHJ1biBsb29wIDxyZGFyOi8vcHJvYmxl
bS85Nzk4NTUwPi4gSG93ZXZlciwgZm9yIHJlc3BvbnNpdmVuZXNzLAorICAgIC8vIHdlIHN0aWxs
IGFsbG93IHRoaXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNzQwMzMyOD4uIFNpbmNlIHRoZSByYWNl
IGNvbmRpdGlvbiBhbmQgc3Vic2VxdWVudAorICAgIC8vIGNyYXNoIGFyZSBlc3BlY2lhbGx5IHRy
b3VibGVzb21lIGZvciBpQm9va3MsIHdlIG5ldmVyIGFsbG93IHRoZSBvYnNlcnZlciB0byBiZSBh
ZGRlZCB0byB0aGUKKyAgICAvLyBtYWluIHJ1biBsb29wIGluIGlCb29rcy4KKyAgICBpZiAoYXBw
bGljYXRpb25Jc0lCb29rc09uSU9TKCkpCisgICAgICAgIHJldHVybiBXZWJUaHJlYWRSdW5Mb29w
KCk7CisjZW5kaWYKKyAgICByZXR1cm4gQ0ZSdW5Mb29wR2V0Q3VycmVudCgpOworfQorCiBMYXll
ckZsdXNoU2NoZWR1bGVyOjpMYXllckZsdXNoU2NoZWR1bGVyKExheWVyRmx1c2hTY2hlZHVsZXJD
bGllbnQqIGNsaWVudCkKICAgICA6IG1faXNTdXNwZW5kZWQoZmFsc2UpCiAgICAgLCBtX2NsaWVu
dChjbGllbnQpCkBAIC02OCwxMCArODgsMTAgQEAgdm9pZCBMYXllckZsdXNoU2NoZWR1bGVyOjpz
Y2hlZHVsZSgpCiAgICAgaWYgKG1faXNTdXNwZW5kZWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IENGUnVuTG9vcFJlZiBjdXJyZW50UnVuTG9vcCA9IENGUnVuTG9vcEdldEN1cnJlbnQoKTsKKyAg
ICBDRlJ1bkxvb3BSZWYgcnVuTG9vcCA9IGN1cnJlbnRSdW5Mb29wKCk7CiAKICAgICAvLyBNYWtl
IHN1cmUgd2Ugd2FrZSB1cCB0aGUgbG9vcCBvciB0aGUgb2JzZXJ2ZXIgY291bGQgYmUgZGVsYXll
ZCB1bnRpbCBzb21lIG90aGVyIHNvdXJjZSBmaXJlcy4KLSAgICBDRlJ1bkxvb3BXYWtlVXAoY3Vy
cmVudFJ1bkxvb3ApOworICAgIENGUnVuTG9vcFdha2VVcChydW5Mb29wKTsKIAogICAgIGlmICht
X3J1bkxvb3BPYnNlcnZlcikKICAgICAgICAgcmV0dXJuOwpAQCAtNzksNyArOTksNyBAQCB2b2lk
IExheWVyRmx1c2hTY2hlZHVsZXI6OnNjaGVkdWxlKCkKICAgICBDRlJ1bkxvb3BPYnNlcnZlckNv
bnRleHQgY29udGV4dCA9IHsgMCwgdGhpcywgMCwgMCwgMCB9OwogICAgIG1fcnVuTG9vcE9ic2Vy
dmVyID0gYWRvcHRDRihDRlJ1bkxvb3BPYnNlcnZlckNyZWF0ZSgwLCBrQ0ZSdW5Mb29wQmVmb3Jl
V2FpdGluZyB8IGtDRlJ1bkxvb3BFeGl0LCB0cnVlLCBMYXllckZsdXNoUnVuTG9vcE9yZGVyLCBy
dW5Mb29wT2JzZXJ2ZXJDYWxsYmFjaywgJmNvbnRleHQpKTsKIAotICAgIENGUnVuTG9vcEFkZE9i
c2VydmVyKGN1cnJlbnRSdW5Mb29wLCBtX3J1bkxvb3BPYnNlcnZlci5nZXQoKSwga0NGUnVuTG9v
cENvbW1vbk1vZGVzKTsKKyAgICBDRlJ1bkxvb3BBZGRPYnNlcnZlcihydW5Mb29wLCBtX3J1bkxv
b3BPYnNlcnZlci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKIH0KIAogdm9pZCBMYXll
ckZsdXNoU2NoZWR1bGVyOjppbnZhbGlkYXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCmlu
ZGV4IDMxYjQ4MjQ5MThjY2Y4YTFlMGE3Yzc2ZTU4NDIxMGY5ZWU1ODY4NDkuLmQ5OWJjZDlkZjdi
YTYxYjNhZjU5MTlkNzRmZDE4Yjg2NTVkY2I4OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5t
bQpAQCAtNDgsNiArNDgsMTMgQEAKICNpbXBvcnQgPHd0Zi9DdXJyZW50VGltZS5oPgogI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCAiV2ViQ29y
ZVRocmVhZC5oIgorI2ltcG9ydCAiV2ViVGlsZWRMYXllci5oIgorI2ltcG9ydCA8Rm91bmRhdGlv
bi9OU0dlb21ldHJ5Lmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL0NBVGlsZWRMYXllclByaXZhdGUu
aD4KKyNlbmRpZgorCiBTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWRm91bmRhdGlvbikK
IFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCiAKQEAgLTk5LDYg
KzEwNiw5IEBAIHN0YXRpYyBkb3VibGUgbWVkaWFUaW1lVG9DdXJyZW50VGltZShDRlRpbWVJbnRl
cnZhbCB0KQogCiAtICh2b2lkKWFuaW1hdGlvbkRpZFN0YXJ0OihDQUFuaW1hdGlvbiAqKWFuaW1h
dGlvbgogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBXZWJUaHJlYWRMb2NrKCk7CisjZW5kaWYK
ICAgICAvLyBoYXNOb25aZXJvQmVnaW5UaW1lIGlzIHN0b3JlZCBpbiBhIGtleSBpbiB0aGUgYW5p
bWF0aW9uCiAgICAgYm9vbCBoYXNOb25aZXJvQmVnaW5UaW1lID0gW1thbmltYXRpb24gdmFsdWVG
b3JLZXk6V0tOb25aZXJvQmVnaW5UaW1lRmxhZ10gYm9vbFZhbHVlXTsKICAgICBDRlRpbWVJbnRl
cnZhbCBzdGFydFRpbWU7CkBAIC03MjYsNiArNzM2LDE2IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVy
TWFjOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzU2NhbGU6dmFsdWVd
OworI2lmIFBMQVRGT1JNKElPUykKKyAgICBbbV9sYXllci5nZXQoKSBzZXRSYXN0ZXJpemF0aW9u
U2NhbGU6dmFsdWVdOworCisgICAgaWYgKG1fbGF5ZXJUeXBlID09IExheWVyVHlwZVdlYlRpbGVk
TGF5ZXIpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGludmFsaWRhdGUgYWxsIHRoZSB0aWxlcyBz
byB3ZSB3b24ndCBlbmQgdXAgd2l0aCBzdGFsZSB0aWxlcyB3aXRoIHRoZSB3cm9uZyBzY2FsZSBp
biB0aGUgd3JvbmcgcGxhY2UsCisgICAgICAgIC8vIHNlZSA8cmRhcjovL3Byb2JsZW0vOTQzNDc2
NT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIHN0YXRpYyBOU0RpY3Rpb25hcnkgKm9w
dGlvbnNEaWN0aW9uYXJ5ID0gW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0Fu
ZEtleXM6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIGtDQVRpbGVkTGF5ZXJSZW1vdmVJ
bW1lZGlhdGVseSwgbmlsXTsKKyAgICAgICAgWyhDQVRpbGVkTGF5ZXIgKiltX2xheWVyLmdldCgp
IHNldE5lZWRzRGlzcGxheUluUmVjdDpbbV9sYXllci5nZXQoKSBib3VuZHNdIGxldmVsT2ZEZXRh
aWw6MCBvcHRpb25zOm9wdGlvbnNEaWN0aW9uYXJ5XTsKKyAgICB9CisjZW5kaWYKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKQEAgLTc3MCw2ICs3OTAsNTggQEAgVGlsZWRCYWNr
aW5nKiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnRpbGVkQmFja2luZygpCiAgICAgcmV0dXJuIFt0aWxl
ZEJhY2tpbmdMYXllciB0aWxlZEJhY2tpbmddOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorYm9v
bCBQbGF0Zm9ybUNBTGF5ZXI6OmlzV2ViTGF5ZXIoKQoreworICAgIEJPT0wgcmVzdWx0ID0gTk87
CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgcmVzdWx0ID0gW21fbGF5ZXIu
Z2V0KCkgaXNLaW5kT2ZDbGFzczpbV2ViTGF5ZXIgc2VsZl1dOworICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXll
cjo6c2V0Qm91bmRzT25NYWluVGhyZWFkKENHUmVjdCBib3VuZHMpCit7CisgICAgQ0FMYXllciAq
bGF5ZXIgPSBtX2xheWVyLmdldCgpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIF57CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAg
ICAgICBbbGF5ZXIgc2V0Qm91bmRzOmJvdW5kc107CisgICAgICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKKyAgICB9KTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldFBvc2l0aW9u
T25NYWluVGhyZWFkKENHUG9pbnQgcG9zaXRpb24pCit7CisgICAgQ0FMYXllciAqbGF5ZXIgPSBt
X2xheWVyLmdldCgpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgICAgICBbbGF5
ZXIgc2V0UG9zaXRpb246cG9zaXRpb25dOworICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCisgICAgfSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRBbmNob3JQb2ludE9u
TWFpblRocmVhZChGbG9hdFBvaW50M0QgdmFsdWUpCit7CisgICAgQ0FMYXllciAqbGF5ZXIgPSBt
X2xheWVyLmdldCgpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgICAgICBbbGF5
ZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UodmFsdWUueCgpLCB2YWx1ZS55KCkpXTsKKyAg
ICAgICAgW2xheWVyIHNldEFuY2hvclBvaW50Wjp2YWx1ZS56KCldOworICAgICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TCisgICAgfSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpz
ZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSkKK3sKKyAgICBpZiAobV9sYXllclR5
cGUgIT0gTGF5ZXJUeXBlV2ViVGlsZWRMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW3N0YXRpY19jYXN0PFdlYlRpbGVkTGF5ZXIq
PihtX2xheWVyLmdldCgpKSBzZXRUaWxlU2l6ZTp0aWxlU2l6ZV07CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogUGFzc1JlZlB0cjxQ
bGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlQ29tcGF0aWJsZUxheWVy
KFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBjbGllbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllck1hYzo6Y3Jl
YXRlKGxheWVyVHlwZSwgY2xpZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbQppbmRleCAwMmZiOWY3OGI0
MzhiNjdiZGFiMzNmODY1NjkzZjQ1NDAwZTljZGU0Li5lYThlYjQzN2Y4NDE1MDU4NzYzY2QwYTZm
MTdkMTVjNTA5MjFkMmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvVGlsZUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVyLm1tCkBAIC0yOSw3ICsyOSw5IEBACiAj
aW1wb3J0ICJJbnRSZWN0LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNpbXBvcnQg
IlJlZ2lvbi5oIgorI2lmICFQTEFURk9STShJT1MpCiAjaW1wb3J0ICJMYXllclBvb2wuaCIKKyNl
bmRpZgogI2ltcG9ydCAiV2ViTGF5ZXIuaCIKICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAj
aW1wb3J0IDx1dGlsaXR5PgpAQCAtMTY2LDYgKzE2OCwxMSBAQCB2b2lkIFRpbGVDb250cm9sbGVy
OjpzZXRUaWxlTmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4LCBU
aWxlSQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRz
KFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxheWVyLCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAocHRocmVh
ZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRocmVhZExvY2soKTsKKyNlbmRpZgorCiAgICAgaWYg
KHBsYXRmb3JtQ0FMYXllciA9PSBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkp
IHsKICAgICAgICAgZHJhd1RpbGVNYXBDb250ZW50cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
LCBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXItPmJvdW5kcygpKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtNjM3LDcgKzY0NCw5IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnJlbW92ZUFsbFRp
bGVzKCkKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1JlbW92ZS5zaXplKCk7
ICsraSkgewogICAgICAgICBUaWxlSW5mbyB0aWxlSW5mbyA9IG1fdGlsZXMudGFrZSh0aWxlc1Rv
UmVtb3ZlW2ldKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBMYXllclBvb2w6OnNoYXJl
ZFBvb2woKS0+YWRkTGF5ZXIodGlsZUluZm8ubGF5ZXIpOworI2VuZGlmCiAgICAgfQogfQogCkBA
IC02NTUsNyArNjY0LDkgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6cmVtb3ZlQWxsU2Vjb25kYXJ5
VGlsZXMoKQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIFRpbGVJbmZvIHRpbGVJbmZvID0gbV90aWxlcy50YWtlKHRpbGVz
VG9SZW1vdmVbaV0pOworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIExheWVyUG9vbDo6c2hh
cmVkUG9vbCgpLT5hZGRMYXllcih0aWxlSW5mby5sYXllcik7CisjZW5kaWYKICAgICB9CiB9CiAK
QEAgLTY3NCw3ICs2ODUsOSBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpyZW1vdmVUaWxlc0luQ29o
b3J0KFRpbGVDb2hvcnQgY29ob3J0KQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxl
c1RvUmVtb3ZlLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFRpbGVJbmZvIHRpbGVJbmZvID0gbV90
aWxlcy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pOworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAg
IExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5hZGRMYXllcih0aWxlSW5mby5sYXllcik7CisjZW5k
aWYKICAgICB9CiB9CiAKQEAgLTgwNCw3ICs4MTcsOSBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpy
ZXZhbGlkYXRlVGlsZXMoVGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRh
dAogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gdGlsZXNUb1JlbW92ZS5zaXpl
KCk7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgIFRpbGVJbmZvIHRpbGVJbmZvID0gbV90
aWxlcy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pOworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAg
ICAgICBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRkTGF5ZXIodGlsZUluZm8ubGF5ZXIpOwor
I2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwODAsNyArMTA5NSwxMSBAQCBpbnQgVGls
ZUNvbnRyb2xsZXI6OnJpZ2h0TWFyZ2luV2lkdGgoKSBjb25zdAogCiBSZWZQdHI8UGxhdGZvcm1D
QUxheWVyPiBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlVGlsZUxheWVyKGNvbnN0IEludFJlY3QmIHRp
bGVSZWN0KQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVy
PiBsYXllcjsKKyNlbHNlCiAgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbGF5ZXIgPSBMYXll
clBvb2w6OnNoYXJlZFBvb2woKS0+dGFrZUxheWVyV2l0aFNpemUodGlsZVJlY3Quc2l6ZSgpKTsK
KyNlbmRpZgogCiAgICAgaWYgKGxheWVyKSB7CiAgICAgICAgIG1fdGlsZVJlcGFpbnRDb3VudHMu
cmVtb3ZlKGxheWVyLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKaW5kZXggOGQ1
MDBmNGE1NTA1MGMwNTBiMTM5Y2FmMDZjZjQ2MTRiNzAxYzdmYi4uMGM5NDBjNWQ2OWM3ZDkzNzRj
MmQ5MDA4MzFmNDM5OGUxMDU0ODFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKQEAg
LTM3LDE0ICszNywxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgRm9udDo6ZHJh
d0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50LCBpbnQpIGNvbnN0CitmbG9hdCBGb250Ojpk
cmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQsIGludCkgY29uc3QKIHsKICAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVu
KTsKLSAgICBpZiAoc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikpCi0gICAgICAgIGRyYXdHbHlw
aEJ1ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBwb2ludCk7Ci0gICAgZWxzZQotICAg
ICAgICBMT0dfRVJST1IoIlNoYXBlciBjb3VsZG4ndCBzaGFwZSBnbHlwaEJ1ZmZlci4iKTsKKyAg
ICBpZiAoc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikpIHsKKyAgICAgICAgRmxvYXRQb2ludCBz
dGFydFBvaW50ID0gcG9pbnQ7CisgICAgICAgIGZsb2F0IHN0YXJ0WCA9IHN0YXJ0UG9pbnQueCgp
OworICAgICAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgc3Rh
cnRQb2ludCk7CisgICAgICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKKyAgICB9
CisgICAgTE9HX0VSUk9SKCJTaGFwZXIgY291bGRuJ3Qgc2hhcGUgZ2x5cGhCdWZmZXIuIik7Cisg
ICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1
biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAv
KiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAK
aW5kZXggMzZlOWYyZTA0MTYxZWYwYzEzYzY3NDU0ZjhmYjBjZDIxOWNiNTgxZS4uMWU0YzAxMzU5
MzUyM2ViZTY0MWI3OTY0OTYzMjZhNDIxNWIwMDRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKQEAgLTMyLDcgKzMy
LDExIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbWFnZU9i
c2VydmVyLmgiCiAjaW5jbHVkZSAiU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oIgorI2lmICFQTEFU
Rk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZp
Y2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHRQcml2YXRlLmg+
CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKICNpZiBQTEFURk9STShNQUMp
CkBAIC01Miw2ICs1NiwxMiBAQCBib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFk
YXRhKQogCiAgICAgbV9vcmllbnRhdGlvbiA9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOwogCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIG1fZnJhbWVCeXRlcyA9IDA7CisgICAgbV9zY2FsZSA9IDE7
CisgICAgbV9oYXZlSW5mbyA9IGZhbHNlOworI2VuZGlmCisKICAgICBpZiAobV9mcmFtZSkgewog
I2lmIENBQ0hFX1NVQklNQUdFUwogICAgICAgICBzdWJpbWFnZUNhY2hlKCkuY2xlYXJJbWFnZSht
X2ZyYW1lKTsKQEAgLTkwLDExICsxMDAsMjAgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKENH
SW1hZ2VSZWYgY2dJbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgLy8gU2V0IG1f
c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2FtZSBhcyBtX3NpemUgc28gaXQn
cyBub3QgMHgwLgogICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IEludFNpemUod2lk
dGgsIGhlaWdodCk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgbV9vcmlnaW5hbFNpemUgPSBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIG1fb3JpZ2luYWxTaXplUmVzcGVjdGluZ09yaWVu
dGF0aW9uID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyNlbmRpZgorCiAgICAgbV9mcmFtZXMu
Z3JvdygxKTsKICAgICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0gQ0dJbWFnZVJldGFpbihjZ0ltYWdl
KTsKICAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gdHJ1ZTsKICAgICBtX2ZyYW1lc1swXS5t
X2hhdmVNZXRhZGF0YSA9IHRydWU7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgbV9mcmFtZXNb
MF0ubV9zY2FsZSA9IDE7CisjZW5kaWYKKwogICAgIGNoZWNrRm9yU29saWRDb2xvcigpOwogfQog
CkBAIC0xMDgsMTAgKzEyNywyNCBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29s
b3IoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBD
R0ltYWdlUmVmIGltYWdlID0gZnJhbWVBdEluZGV4KDApOwotICAgIAorI2Vsc2UKKyAgICAvLyBO
b3RlLCBjaGVja0ZvclNvbGlkQ29sb3IoKSBtYXkgYmUgY2FsbGVkIGZyb20gZnJhbWVBdEluZGV4
KCkuIE9uIGlPUyBmcmFtZUF0SW5kZXgoKSBnZXRzIHBhc3NlZCBhIHNjYWxlSGludAorICAgIC8v
IGFyZ3VtZW50IHdoaWNoIGl0IHVzZXMgdG8gdGVsbCBDRyB0byBjcmVhdGUgYSBzY2FsZWQgZG93
biBpbWFnZS4gU2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgc2NhbGVIaW50IGhlcmUsIGlmCisgICAg
Ly8gd2UgY2FsbCBmcmFtZUF0SW5kZXgoKSBhZ2Fpbiwgd2Ugd291bGQgcGFzcyBpdCB0aGUgZGVm
YXVsdCBzY2FsZSBvZiAxIGFuZCB3b3VsZCBlbmQgdXAgcmVjcmVhdGluZyB0aGUgaW1hZ2UuCisg
ICAgLy8gU28gd2UgZG8gYSBxdWljayBjaGVjayBhbmQgY2FsbCBmcmFtZUF0SW5kZXgoMCkgb25s
eSBpZiB3ZSBoYXZlbid0IHlldCBjcmVhdGVkIGFuIGltYWdlLgorICAgIENHSW1hZ2VSZWYgaW1h
Z2UgPSBudWxscHRyOworICAgIGlmIChtX2ZyYW1lcy5zaXplKCkpCisgICAgICAgIGltYWdlID0g
bV9mcmFtZXNbMF0ubV9mcmFtZTsKKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIGltYWdlID0g
ZnJhbWVBdEluZGV4KDApOworI2VuZGlmCisKICAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBjaGVj
ayBmb3Igc29saWQgY29sb3IgaW4gdGhlIGltcG9ydGFudCBzcGVjaWFsIGNhc2Ugb2YgYSAxeDEg
aW1hZ2UuCiAgICAgaWYgKGltYWdlICYmIENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgPT0gMSAmJiBD
R0ltYWdlR2V0SGVpZ2h0KGltYWdlKSA9PSAxKSB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAg
ICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdCQQogICAgICAgICBSZXRhaW5QdHI8Q0dD
b250ZXh0UmVmPiBibWFwID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEs
IDEsIDgsIHNpemVvZihwaXhlbCksIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKSwKICAgICAgICAg
ICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMy
QmlnKSk7CkBAIC0xMjQsNiArMTU3LDIzIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29s
aWRDb2xvcigpCiAgICAgICAgICAgICBtX3NvbGlkQ29sb3IgPSBDb2xvcigwLCAwLCAwLCAwKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IocGl4ZWxbMF0g
KiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAy
NTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOworI2Vsc2UKKyAgICAgICAgLy8gRklYTUU6IENhbiB3
ZSBzaGFyZSBtb3JlIGNvZGUgd2l0aCB0aGUgTWFjIHBvcnQ/IEZvcm1lcmx5IHRoZSBNYWMgcG9y
dCBjcmVhdGVkIGEgZmxvYXRpbmcgcG9pbnQgYml0bWFwIGNvbnRleHQsCisgICAgICAgIC8vIGJ1
dCBzdWNoIGEgY29udGV4dCB3YXNuJ3Qgc3VwcG9ydCBvbiBpT1MgKHJkYXI6Ly9wcm9ibGVtLzUx
MDY1MTQpLiBTbywgb24gaU9TIHdlIGNyZWF0ZWQgYW4gaW50ZWdyYWwgYml0bWFwCisgICAgICAg
IC8vIGNvbnRleHQuIFNpbmNlIDxodHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjM5
Mzk+IHRoZSBNYWMgcG9ydCBjcmVhdGVzIGFuIGludGVncmFsIGJpdG1hcCBjb250ZXh0LgorICAg
ICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsWzRdID0gezAsIDAsIDAsIDB9OyAvLyBSR0JBCisgICAg
ICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGJpdG1hcCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBkZXZpY2VSR0JDb2xvclNw
YWNlUmVmKCksCisgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsK
KyAgICAgICAgaWYgKCFiaXRtYXApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dChiaXRtYXAuZ2V0KCkpLnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVD
b3B5KTsKKyAgICAgICAgQ0dSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IHsgezAsIDB9LCB7MSwgMX0g
fTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcC5nZXQoKSwgZGVzdGluYXRpb25S
ZWN0LCBpbWFnZSk7CisgICAgICAgIGlmICghcGl4ZWxbM10pCisgICAgICAgICAgICBtX3NvbGlk
Q29sb3IgPSBDb2xvcigwLCAwLCAwLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9z
b2xpZENvbG9yID0gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50PihwaXhlbFswXSksIHN0YXRpY19jYXN0
PGludD4ocGl4ZWxbMV0pLCBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsWzJdKSwgc3RhdGljX2Nhc3Q8
aW50PihwaXhlbFszXSkpOworI2VuZGlmCiAgICAgICAgIG1faXNTb2xpZENvbG9yID0gdHJ1ZTsK
ICAgICB9CiB9CkBAIC0xNjIsOSArMjEyLDIxIEBAIFJldGFpblB0cjxDRkFycmF5UmVmPiBCaXRt
YXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkKIAogdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFw
aGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVz
Y3JpcHRpb24gZGVzY3JpcHRpb24pCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBzdGFydEFu
aW1hdGlvbigpOwogCiAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGZyYW1lQXRJbmRleChtX2N1cnJl
bnRGcmFtZSk7CisjZWxzZQorICAgIHN0YXJ0QW5pbWF0aW9uKGZhbHNlKTsKKworICAgIENHUmVj
dCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3Jt
KGRlc3RSZWN0LCBDR0NvbnRleHRHZXRDVE0oY3R4dC0+cGxhdGZvcm1Db250ZXh0KCkpKTsKKyAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBs
ZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRleHRzLgorICAgIGlmIChDR0NvbnRl
eHRHZXRUeXBlKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpKSA9PSBrQ0dDb250ZXh0VHlwZVBERikK
KyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKGNvcHlVbnNjYWxlZEZyYW1lQXRJbmRleChtX2N1cnJl
bnRGcmFtZSkpOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJy
ZW50RnJhbWUsIHN0ZDo6bWluPGZsb2F0PigxLjBmLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERlc3Rp
bmF0aW9uUmVjdC5zaXplLndpZHRoICAvIHNyY1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0
aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0LmhlaWdodCgpKSkpOworI2VuZGlmCiAg
ICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFn
ZSB5ZXQuCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTE3MywxOCArMjM1LDQxIEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgZmxvYXQgc2NhbGUgPSBtX2ZyYW1lc1ttX2N1cnJlbnRGcmFtZV0ubV9zY2Fs
ZTsKKyNlbmRpZgogICAgIEZsb2F0U2l6ZSBzZWxmU2l6ZSA9IGN1cnJlbnRGcmFtZVNpemUoKTsK
ICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwogCiAgICAgaWYgKGRlc2NyaXB0aW9u
LnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCiAg
ICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJh
bWUpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGN0eHQtPmRyYXdOYXRpdmVJbWFnZShpbWFn
ZS5nZXQoKSwgc2VsZlNpemUsIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHNj
YWxlLCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbik7CisjZWxzZQogICAgIGN0
eHQtPmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgc2VsZlNpemUsIHN0eWxlQ29sb3JTcGFjZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIGNvbXBvc2l0ZU9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKTsKKyNl
bmRpZgogCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKICAgICAgICAgaW1hZ2VPYnNlcnZlcigp
LT5kaWREcmF3KHRoaXMpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorUGFzc05hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQor
eworICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhd
Lm1fZnJhbWUpCisgICAgICAgIGNhY2hlRnJhbWUoaW5kZXgsIDEpOworCisgICAgaWYgKG1fZnJh
bWVzW2luZGV4XS5tX3NjYWxlID09IDEgJiYgIW1fc291cmNlLmlzU3Vic2FtcGxlZCgpKQorICAg
ICAgICByZXR1cm4gQ0dJbWFnZVJldGFpbihtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSk7CisKKyAg
ICByZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVBdEluZGV4KGluZGV4KTsKK30KKyNlbmRpZgor
CiB9CiAKICNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0NvbG9yQ0cuY3BwCmluZGV4IGQ3NGI0YjQ3MGM1YjQ5NmNmMzA2ZTYxNTEwM2I4
YTA4MWQyYjAwYmIuLjkyMzY2ZTJhYmZjZWVjNDgxMzM5M2U0N2I1MDcwZjYxOTliZDMwMTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCkBA
IC0zMSwxMCArMzEsMzggQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2lmICFQ
TEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNl
cnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbG9yVHJhbnNmb3Jt
Lmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShJT1MpCitDR0NvbG9yUmVmIGNyZWF0ZUNHQ29sb3JX
aXRoRGV2aWNlV2hpdGUoQ0dGbG9hdCB3aGl0ZSwgQ0dGbG9hdCBhbHBoYSkKK3sKKyAgICBzdGF0
aWMgQ0dDb2xvclNwYWNlUmVmIGdyYXlTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZUdy
YXkoKTsKKyAgICBjb25zdCBDR0Zsb2F0IGNvbXBvbmVudHNbXSA9IHsgd2hpdGUsIGFscGhhIH07
CisgICAgcmV0dXJuIENHQ29sb3JDcmVhdGUoZ3JheVNwYWNlLCBjb21wb25lbnRzKTsKK30KKwor
c3RhdGljIENHQ29sb3JSZWYgY3JlYXRlQ0dDb2xvcldpdGhEZXZpY2VSR0JBKENHQ29sb3JSZWYg
c291cmNlQ29sb3IpCit7CisgICAgaWYgKCFzb3VyY2VDb2xvciB8fCBDRkVxdWFsKENHQ29sb3JH
ZXRDb2xvclNwYWNlKHNvdXJjZUNvbG9yKSwgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpKSkKKyAg
ICAgICAgcmV0dXJuIENHQ29sb3JSZXRhaW4oc291cmNlQ29sb3IpOworCisgICAgUmV0YWluUHRy
PENHQ29sb3JUcmFuc2Zvcm1SZWY+IGNvbG9yVHJhbnNmb3JtID0gYWRvcHRDRihDR0NvbG9yVHJh
bnNmb3JtQ3JlYXRlKGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKSwgbnVsbHB0cikpOworICAgIGlm
ICghY29sb3JUcmFuc2Zvcm0pCisgICAgICAgIHJldHVybiBDR0NvbG9yUmV0YWluKHNvdXJjZUNv
bG9yKTsKKworICAgIC8vIENHQ29sb3JUcmFuc2Zvcm1Db252ZXJ0Q29sb3IoKSByZXR1cm5zIGEg
KzEgcmV0YWluZWQgb2JqZWN0LgorICAgIHJldHVybiBDR0NvbG9yVHJhbnNmb3JtQ29udmVydENv
bG9yKGNvbG9yVHJhbnNmb3JtLmdldCgpLCBzb3VyY2VDb2xvciwga0NHUmVuZGVyaW5nSW50ZW50
RGVmYXVsdCk7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiBDb2xvcjo6Q29sb3IoQ0dD
b2xvclJlZiBjb2xvcikKIHsKICAgICBpZiAoIWNvbG9yKSB7CkBAIC00Myw4ICs3MSwxNyBAQCBD
b2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAor
I2lmICFQTEFURk9STShJT1MpCiAgICAgc2l6ZV90IG51bUNvbXBvbmVudHMgPSBDR0NvbG9yR2V0
TnVtYmVyT2ZDb21wb25lbnRzKGNvbG9yKTsKICAgICBjb25zdCBDR0Zsb2F0KiBjb21wb25lbnRz
ID0gQ0dDb2xvckdldENvbXBvbmVudHMoY29sb3IpOworI2Vsc2UKKyAgICBSZXRhaW5QdHI8Q0dD
b2xvclJlZj4gY29ycmVjdGVkQ29sb3IgPSBhZG9wdENGKGNyZWF0ZUNHQ29sb3JXaXRoRGV2aWNl
UkdCQShjb2xvcikpOworICAgIGlmICghY29ycmVjdGVkQ29sb3IpCisgICAgICAgIGNvcnJlY3Rl
ZENvbG9yID0gY29sb3I7CisKKyAgICBzaXplX3QgbnVtQ29tcG9uZW50cyA9IENHQ29sb3JHZXRO
dW1iZXJPZkNvbXBvbmVudHMoY29ycmVjdGVkQ29sb3IuZ2V0KCkpOworICAgIGNvbnN0IENHRmxv
YXQqIGNvbXBvbmVudHMgPSBDR0NvbG9yR2V0Q29tcG9uZW50cyhjb3JyZWN0ZWRDb2xvci5nZXQo
KSk7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogICAgIGZsb2F0IHIgPSAwOwogICAgIGZs
b2F0IGcgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvRmxvYXRQb2ludENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0Zsb2F0UG9pbnRDRy5jcHAKaW5kZXggZjM3ZTA3ZjMxOTg4OGUyNzVjNmY0NTkyYjI5YzE0Mjdi
OWQ2OGU1ZC4uMjUwZWQ1MDVkZmYyOWI5NTBmMmEwYTNmMzFmY2IzY2VmNGE5Y2M1NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBvaW50Q0cu
Y3BwCkBAIC0yOSw3ICsyOSwxMSBAQAogCiAjaWYgVVNFKENHKQogCisjaWYgIVBMQVRGT1JNKElP
UykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4K
KyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCmluZGV4IDRlYTA4M2FlYTNmZWE1MjY0OTdkMWIx
YTgwNDQwZGMyNmNjNWM1MzAuLjhhMGE1M2M2MWQyNjY3ZWJmNGRjMGZkOWY0NDVlNWYzYzdmNjI3
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0
UmVjdENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9h
dFJlY3RDRy5jcHAKQEAgLTI5LDcgKzI5LDExIEBACiAKICNpZiBVU0UoQ0cpCiAKKyNpZiAhUExB
VEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2
aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Cisj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVDRy5jcHAKaW5kZXggMTRlMTRmYzJhMzk5ZGQx
N2RiMTI1MjAyNjE0MTQ5MjlkMzZhOWY2MC4uNGYxZTEwOGRlMzlhMGMwNTc2ZmY1MGZkM2NjNjlj
NWMxYjQ3MTgzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvRmxvYXRTaXplQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0Zsb2F0U2l6ZUNHLmNwcApAQCAtMjksNyArMjksMTEgQEAKIAogI2lmIFVTRShDRykKIAor
I2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNh
dGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhp
Y3MuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKaW5kZXggNDdkOWM3ZjYw
OGJiMGFkMDQ1NGU5ZGZlMDUzNzcxOTM5OGE2OTgzMC4uMzg3MTBhMTczNTgwOWViZmJjZGJhYjcz
MzIzYTdkZWE1YmQ2MDE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKQEAgLTI4LDcgKzI4LDExIEBACiAjaW5jbHVkZSAiR3Jh
ZGllbnQuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaWYgIVBMQVRGT1JN
KElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMu
aD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2VuZGlm
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAKaW5kZXggYTE5NzQ1ZTI4ZTI2NTIxYmRmMDg0YzBkZGZjZDlkNjkyMjEwMTJk
ZS4uM2Q0ZDNhZjk2YTI2ZTg0OTZjMWMyNjQ5OTExMWU2OWUwMWQ1Mjk3MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcApAQCAtNTEsMTAgKzUxLDE3IEBACiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJm
YWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1Mp
CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dEdTdGF0ZS5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjZW5kaWYKKworI2lmICFQTEFURk9STShJT1MpCiBleHRlcm4gIkMiIHsK
ICAgICBDR19FWFRFUk4gdm9pZCBDR0NvbnRleHRTZXRDVE0oQ0dDb250ZXh0UmVmLCBDR0FmZmlu
ZVRyYW5zZm9ybSk7CiAgICAgQ0dfRVhURVJOIENHQWZmaW5lVHJhbnNmb3JtIENHQ29udGV4dEdl
dEJhc2VDVE0oQ0dDb250ZXh0UmVmKTsKIH07CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAog
Ly8gRklYTUU6IFRoZSBmb2xsb3dpbmcgdXNpbmcgZGVjbGFyYXRpb24gc2hvdWxkIGJlIGluIDx3
dGYvSGFzaEZ1bmN0aW9ucy5oPi4KIHVzaW5nIFdURjo6cGFpckludEhhc2g7CkBAIC04Miw2ICs4
OSw5IEBAIENHQ29sb3JTcGFjZVJlZiBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCkKIAogQ0dDb2xv
clNwYWNlUmVmIHNSR0JDb2xvclNwYWNlUmVmKCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
cmV0dXJuIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKTsKKyNlbmRpZiAvLyBQTEFURk9STShJT1Mp
CiAgICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBzUkdCU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVh
dGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQik7CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIC8v
IE91dC1vZi1kYXRlIENHIGluc3RhbGxhdGlvbnMgd2lsbCBub3QgaG9ub3Iga0NHQ29sb3JTcGFj
ZVNSR0IuIFRoaXMgbG9naWMgYXZvaWRzCkBAIC05Myw3ICsxMDMsMTUgQEAgQ0dDb2xvclNwYWNl
UmVmIHNSR0JDb2xvclNwYWNlUmVmKCkKICAgICByZXR1cm4gc1JHQlNwYWNlOwogfQogCi0jaWYg
UExBVEZPUk0oV0lOKQorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgc2V0U3Ryb2tlQW5kRmlsbENv
bG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0NvbG9yUmVmIGNvbG9yKQoreworICAgIENHQ29u
dGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNvbG9yKTsKKyAgICBDR0NvbnRl
eHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY29sb3IpOworfQorI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykKKworI2lmIFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oSU9TKQogQ0dDb2xv
clNwYWNlUmVmIGxpbmVhclJHQkNvbG9yU3BhY2VSZWYoKQogewogICAgIC8vIEZJWE1FOiBXaW5k
b3dzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBsaW5lYXIgc1JHQiwgdGhpcyBpcyB0cmFja2VkIGJ5
IGh0dHA6Ly93ZWJraXQub3JnL2IvODAwMDAuCkBAIC0xMDEsMTEgKzExOSwyMCBAQCBDR0NvbG9y
U3BhY2VSZWYgbGluZWFyUkdCQ29sb3JTcGFjZVJlZigpCiB9CiAjZW5kaWYKIAorI2lmICFQTEFU
Rk9STShJT1MpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KENHQ29udGV4dFJl
ZiBjZ0NvbnRleHQpCisjZWxzZQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChD
R0NvbnRleHRSZWYgY2dDb250ZXh0LCBib29sIHNob3VsZFVzZUNvbnRleHRDb2xvcnMpCisjZW5k
aWYKIHsKICAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNn
Q29udGV4dCk7CiAgICAgc2V0UGFpbnRpbmdEaXNhYmxlZCghY2dDb250ZXh0KTsKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIGlmIChjZ0NvbnRleHQpIHsKKyNlbHNlCisgICAgbV9zdGF0ZS5zaG91
bGRVc2VDb250ZXh0Q29sb3JzID0gc2hvdWxkVXNlQ29udGV4dENvbG9yczsKKyAgICBpZiAoY2dD
b250ZXh0ICYmIHNob3VsZFVzZUNvbnRleHRDb2xvcnMpIHsKKyNlbmRpZgogICAgICAgICAvLyBN
YWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUuCiAgICAg
ICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpLCBmaWxsQ29sb3JTcGFjZSgpKTsK
ICAgICAgICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpLCBzdHJva2VDb2xv
clNwYWNlKCkpOwpAQCAtMTQxLDExICsxNjgsMTkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJl
c3RvcmVQbGF0Zm9ybVN0YXRlKCkKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3Jt
S25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyIGltYWdl
UHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
ZmxvYXQgc2NhbGUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJ
bWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQorI2Vsc2UKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24p
CisjZW5kaWYKIHsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UoaW1hZ2VQdHIpOwog
CiAgICAgZmxvYXQgY3VyckhlaWdodCA9IG9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkg
PyBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpIDogQ0dJbWFnZUdldEhlaWdodChpbWFnZS5n
ZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIFVuYXBwbHkgdGhlIHNjYWxpbmcgc2lu
Y2Ugd2UgYXJlIGdldHRpbmcgdGhpcyBmcm9tIGEgc2NhbGVkIGJpdG1hcC4KKyAgICBjdXJySGVp
Z2h0IC89IHNjYWxlOworI2VuZGlmCiAKICAgICBpZiAoY3VyckhlaWdodCA8PSBzcmNSZWN0Lnko
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUzLDYgKzE4OCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29uc3Qg
RmxvYXRTaQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAg
ICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAvLyBBbnRpLWFsaWFzaW5nIGlzIG9uIGJ5IGRlZmF1bHQgb24gdGhlIGlQaG9uZS4gTmVlZCB0
byB0dXJuIGl0IG9mZiB3aGVuIGRyYXdpbmcgaW1hZ2VzLgorICAgIENHQ29udGV4dFNldFNob3Vs
ZEFudGlhbGlhcyhjb250ZXh0LCBmYWxzZSk7CisjZW5kaWYKKwogICAgIGJvb2wgc2hvdWxkVXNl
U3ViaW1hZ2UgPSBmYWxzZTsKIAogICAgIC8vIElmIHRoZSBzb3VyY2UgcmVjdCBpcyBhIHN1YnBv
cnRpb24gb2YgdGhlIGltYWdlLCB0aGVuIHdlIGNvbXB1dGUgYW4gaW5mbGF0ZWQgZGVzdGluYXRp
b24gcmVjdCB0aGF0IHdpbGwgaG9sZCB0aGUgZW50aXJlIGltYWdlCkBAIC0xODIsNiArMjIyLDkg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZShQYXNzTmF0aXZlSW1hZ2VQ
dHIgaW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2kKICAgICAgICAgICAgIHN1YmltYWdlUmVjdC5zZXRI
ZWlnaHQoY2VpbGYoc3ViaW1hZ2VSZWN0LmhlaWdodCgpICsgdG9wUGFkZGluZykpOwogICAgICAg
ICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQoc3ViaW1hZ2VSZWN0LmhlaWdodCgpIC8g
eVNjYWxlKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgIHN1YmltYWdlUmVjdC5z
Y2FsZShzY2FsZSwgc2NhbGUpOworI2VuZGlmCiAjaWYgQ0FDSEVfU1VCSU1BR0VTCiAgICAgICAg
ICAgICBpbWFnZSA9IHN1YmltYWdlQ2FjaGUoKS5nZXRTdWJpbWFnZShpbWFnZS5nZXQoKSwgc3Vi
aW1hZ2VSZWN0KTsKICNlbHNlCkBAIC0yMDQsNiArMjQ3LDExIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBG
bG9hdFNpCiAgICAgaWYgKCFzaG91bGRVc2VTdWJpbWFnZSAmJiBjdXJySGVpZ2h0IDwgaW1hZ2VT
aXplLmhlaWdodCgpKQogICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChhZGp1c3Rl
ZERlc3RSZWN0LmhlaWdodCgpICogY3VyckhlaWdodCAvIGltYWdlU2l6ZS5oZWlnaHQoKSk7CiAK
KyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gQWxpZ24gdG8gcGl4ZWwgYm91bmRhcmllcworICAg
IGFkanVzdGVkRGVzdFJlY3QgPSByb3VuZFRvRGV2aWNlUGl4ZWxzKGFkanVzdGVkRGVzdFJlY3Qp
OworI2VuZGlmCisKICAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRN
b2RlKTsKIAogICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJl
IGF0ICgwLCAwKQpAQCAtMzIzLDggKzM3MSwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50MSwgY29uc3QgSW50UG9pbnQmIHBvaW50MikKIAog
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAo
c2hvdWxkQW50aWFsaWFzKCkpCi0gICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhj
b250ZXh0LCBmYWxzZSk7CisgICAgaWYgKHNob3VsZEFudGlhbGlhcygpKSB7CisgICAgICAgIGJv
b2wgd2lsbEFudGlhbGlhcyA9IGZhbHNlOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgLy8g
Rm9yY2UgYW50aWFsaWFzaW5nIG9uIGZvciBsaW5lIHBhdHRlcm5zIGFzIHRoZXkgZG9uJ3QgbG9v
ayBnb29kIHdpdGggaXQgdHVybmVkIG9mZiAoPHJkYXI6Ly9wcm9ibGVtLzU0NTk3NzI+KS4KKyAg
ICAgICAgd2lsbEFudGlhbGlhcyA9IHBhdFdpZHRoOworI2VuZGlmCisgICAgICAgIENHQ29udGV4
dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB3aWxsQW50aWFsaWFzKTsKKyAgICB9CiAKICAg
ICBpZiAocGF0V2lkdGgpIHsKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsK
QEAgLTM4NSw2ICs0MzksMzYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0
IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50JiBwb2ludDIpCiAgICAgICAgIENHQ29u
dGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB0cnVlKTsKIH0KIAorI2lmIFBMQVRGT1JN
KElPUykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Sm9pbmVkTGluZXMoQ0dQb2ludCBwb2lu
dHNbXSwgdW5zaWduZWQgY291bnQsIGJvb2wgYW50aWFsaWFzLCBDR0xpbmVDYXAgbGluZUNhcCkK
K3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFjb3VudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBm
bG9hdCB3aWR0aCA9IENHQ29udGV4dEdldExpbmVXaWR0aChjb250ZXh0KTsKKworICAgIENHQ29u
dGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisgICAgCisgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50
aWFsaWFzKGNvbnRleHQsIGFudGlhbGlhcyk7CisKKyAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgo
Y29udGV4dCwgd2lkdGggPCAxID8gMSA6IHdpZHRoKTsKKworICAgIENHQ29udGV4dEJlZ2luUGF0
aChjb250ZXh0KTsKKyAgICAKKyAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGxpbmVD
YXApOworICAgIAorICAgIENHQ29udGV4dE1vdmVUb1BvaW50KGNvbnRleHQsIHBvaW50c1swXS54
LCBwb2ludHNbMF0ueSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50
OyArK2kpCisgICAgICAgIENHQ29udGV4dEFkZExpbmVUb1BvaW50KGNvbnRleHQsIHBvaW50c1tp
XS54LCBwb2ludHNbaV0ueSk7CisKKyAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwor
CisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKK30KKyNlbmRpZgorCiAvLyBU
aGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBp
biBsaXN0cy4KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0
JiByZWN0KQogewpAQCAtMzk2LDYgKzQ4MCwzMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBkcmF3UGF0aChwYXRoKTsKIH0KIAor
I2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQocGxhdGZvcm1Db250ZXh0KCkp
OworCisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKworICAgIHNldENHRmlsbENv
bG9yKGNvbnRleHQsIGZpbGxDb2xvcigpLCBmaWxsQ29sb3JTcGFjZSgpKTsKKyAgICBzZXRDR1N0
cm9rZUNvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9yKCksIHN0cm9rZUNvbG9yU3BhY2UoKSk7CisK
KyAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgc3Ryb2tlVGhpY2tuZXNzKCkpOwor
ICAgIAorICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRF
bGxpcHNlSW5SZWN0KGNvbnRleHQsIHJlY3QpOworCisgICAgQ0dDb250ZXh0RmlsbFBhdGgoY29u
dGV4dCk7CisgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKKyAgICAKKyAgICBDR0Nv
bnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIGFk
ZENvbnZleFBvbHlnb25Ub1BhdGgoUGF0aCYgcGF0aCwgc2l6ZV90IG51bWJlck9mUG9pbnRzLCBj
b25zdCBGbG9hdFBvaW50KiBwb2ludHMpCiB7CiAgICAgQVNTRVJUKG51bWJlck9mUG9pbnRzID4g
MCk7CkBAIC05MDMsNyArMTAxMiwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNU
cmFuc3BhcmVuY3lMYXllcnMoKQogCiBzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmth
cm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENHRmxvYXQmIHhP
ZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIFVOVVNFRF9QQVJBTSh4
T2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0oeU9mZnNldCk7CisjZWxzZQogICAgIGlmIChjb250
ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTIzNSw2
ICsxMzQ4LDU5IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhl
bHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vCiAgICAgcmV0dXJuIEZsb2F0UmVj
dChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4pOwogfQog
CisvLyBGSVhNRTogV2Ugc2hvdWxkIGxvb2sgdG8gY29uc29saWRhdGUgdGhlIGlPUyBhbmQgbm9u
LWlPUyBpbXBsZW1lbnRhdGlvbnMgb2YKKy8vIGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFz
aW5nTW9kZUZvclRleHQoKSBhbmQgY29tcHV0ZUxpbmVCb3VuZHNGb3JUZXh0KCkuCisjaWYgUExB
VEZPUk0oSU9TKQorc3RhdGljIEZsb2F0UmVjdCBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlh
c2luZ01vZGVGb3JUZXh0KEdyYXBoaWNzQ29udGV4dCYgaW5pdGlhbENvbnRleHQsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZywgYm9vbCYgc2hvdWxk
QW50aWFsaWFzLCBDb2xvciYgY29sb3IpCit7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBp
bml0aWFsQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR1BvaW50IG9yaWdpbjsKKyAg
ICBDR0Zsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KGluaXRpYWxDb250ZXh0LnN0cm9rZVRoaWNr
bmVzcygpLCAwLjVmKTsKKworICAgIHNob3VsZEFudGlhbGlhcyA9IHRydWU7CisgICAgaWYgKHBy
aW50aW5nKQorICAgICAgICBvcmlnaW4gPSBDR1BvaW50TWFrZShwb2ludC54KCksIHBvaW50Lnko
KSk7CisgICAgZWxzZSB7CisgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHQgPSBDR0NvbnRleHRH
ZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNmb3JtKGNvbnRleHQpOworICAgICAgICBpZiAo
QWZmaW5lVHJhbnNmb3JtKHQpLnByZXNlcnZlc0F4aXNBbGlnbm1lbnQoKSkKKyAgICAgICAgICAg
IHNob3VsZEFudGlhbGlhcyA9IGZhbHNlOworCisgICAgICAgIC8vIFRoaXMgY29kZSBhbHdheXMg
ZHJhd3MgYSBsaW5lIHRoYXQgaXMgYXQgbGVhc3Qgb25lLXBpeGVsIGxpbmUgaGlnaCwKKyAgICAg
ICAgLy8gd2hpY2ggdGVuZHMgdG8gdmlzdWFsbHkgb3ZlcndoZWxtIHRleHQgYXQgc21hbGwgc2Nh
bGVzLiBUbyBjb3VudGVyIHRoaXMKKyAgICAgICAgLy8gZWZmZWN0LCBhbiBhbHBoYSBpcyBhcHBs
aWVkIHRvIHRoZSB1bmRlcmxpbmUgY29sb3Igd2hlbiB0ZXh0IGlzIGF0IHNtYWxsIHNjYWxlcy4K
KworICAgICAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFzc3VtaW5n
IHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KKyAgICAgICAgQ0dGbG9hdCBzY2FsZSA9IHQuYiA/
IHNxcnRmKHQuYSAqIHQuYSArIHQuYiAqIHQuYikgOiB0LmE7CisgICAgICAgIGlmIChzY2FsZSA8
IDEuMCkgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IE1pblVuZGVybGluZUFscGhh
ID0gMC40ZjsKKyAgICAgICAgICAgIGZsb2F0IHNoYWRlID0gc2NhbGUgPiBNaW5VbmRlcmxpbmVB
bHBoYSA/IHNjYWxlIDogTWluVW5kZXJsaW5lQWxwaGE7CisgICAgICAgICAgICBpbnQgYWxwaGEg
PSBjb2xvci5hbHBoYSgpICogc2hhZGU7CisgICAgICAgICAgICBjb2xvciA9IENvbG9yKGNvbG9y
LnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIGFscGhhKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIERvbid0IG9mZnNldCBsaW5lIGZyb20gYm90dG9tIG9mIHRleHQgaWYgc2Nh
bGUgaXMgbGVzcyB0aGFuIE9mZnNldFVuZGVybGluZVNjYWxlLgorICAgICAgICBzdGF0aWMgY29u
c3QgQ0dGbG9hdCBPZmZzZXRVbmRlcmxpbmVTY2FsZSA9IDAuNGY7CisgICAgICAgIENHRmxvYXQg
ZHkgPSBzY2FsZSA8IE9mZnNldFVuZGVybGluZVNjYWxlID8gMCA6IDE7CisKKyAgICAgICAgLy8g
SWYgd2UndmUgaW5jcmVhc2VkIHRoZSB0aGlja25lc3Mgb2YgdGhlIGxpbmUsIG1ha2Ugc3VyZSB0
byBtb3ZlIHRoZSBsb2NhdGlvbiB0b28uCisgICAgICAgIGlmICh0aGlja25lc3MgPiAxKQorICAg
ICAgICAgICAgZHkgKz0gcm91bmRmKHRoaWNrbmVzcykgLSAxOworCisgICAgICAgIENHUG9pbnQg
ZGV2aWNlUG9pbnQgPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocG9pbnQsIHQpOworICAg
ICAgICBDR1BvaW50IGRldmljZU9yaWdpbiA9IENHUG9pbnRNYWtlKHJvdW5kZihkZXZpY2VQb2lu
dC54KSwgY2VpbGYoZGV2aWNlUG9pbnQueSkgKyBkeSk7CisgICAgICAgIG9yaWdpbiA9IENHUG9p
bnRBcHBseUFmZmluZVRyYW5zZm9ybShkZXZpY2VPcmlnaW4sIENHQWZmaW5lVHJhbnNmb3JtSW52
ZXJ0KHQpKTsKKyAgICAgICAgdGhpY2tuZXNzIC89IHNjYWxlOworICAgIH0KKyAgICByZXR1cm4g
RmxvYXRSZWN0KG9yaWdpbi54LCBvcmlnaW4ueSwgd2lkdGgsIHRoaWNrbmVzcyk7Cit9CisKK0Zs
b2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpCit7CisgICAgYm9v
bCBkdW1teUJvb2w7CisgICAgQ29sb3IgZHVtbXlDb2xvcjsKKyAgICByZXR1cm4gY29tcHV0ZUxp
bmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCgqdGhpcywgcG9pbnQsIHdpZHRoLCBw
cmludGluZywgZHVtbXlCb29sLCBkdW1teUNvbG9yKTsKK30KKyNlbHNlCiBzdGF0aWMgRmxvYXRS
ZWN0IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcsIGJvb2wmIHNob3VsZEFudGlhbGlhcykKIHsKICAgICBzaG91bGRBbnRpYWxp
YXMgPSB0cnVlOwpAQCAtMTI3MCw2ICsxNDM2LDcgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4
dDo6Y29tcHV0ZUxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG8K
ICAgICBib29sIGR1bW15OwogICAgIHJldHVybiBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlh
c2luZ01vZGVGb3JUZXh0KCp0aGlzLCBwb2ludCwgd2lkdGgsIHByaW50aW5nLCBkdW1teSk7CiB9
CisjZW5kaWYKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpCiB7CkBAIC0xMjc5
LDYgKzE0NDYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgYm9vbAogICAgIGlmICh3aWR0aCA8PSAw
KQogICAgICAgICByZXR1cm47CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGJvb2wgc2hvdWxk
QW50aWFsaWFzTGluZTsKICAgICBGbG9hdFJlY3QgYm91bmRzID0gY29tcHV0ZUxpbmVCb3VuZHNB
bmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCgqdGhpcywgcG9pbnQsIHdpZHRoLCBwcmludGluZywg
c2hvdWxkQW50aWFsaWFzTGluZSk7CiAKQEAgLTEyOTcsMTAgKzE0NjUsMjYgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxv
YXQgd2lkdGgsIGJvb2wKIAogICAgIGlmIChyZXN0b3JlQW50aWFsaWFzTW9kZSkKICAgICAgICAg
Q0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKHBsYXRmb3JtQ29udGV4dCgpLCB0cnVlKTsKKyNl
bHNlCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBD
R0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisgICAgQ29sb3IgY29sb3Ioc3Ryb2tlQ29s
b3IoKSk7CisgICAgCisgICAgYm9vbCBzaG91bGRBbnRpYWxpYXNMaW5lOworICAgIEZsb2F0UmVj
dCByZWN0ID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCgqdGhp
cywgcG9pbnQsIHdpZHRoLCBwcmludGluZywgc2hvdWxkQW50aWFsaWFzTGluZSwgY29sb3IpOwor
CisgICAgaWYgKG1fc3RhdGUuc2hvdWxkVXNlQ29udGV4dENvbG9ycykKKyAgICAgICAgc2V0Q0dG
aWxsQ29sb3IoY29udGV4dCwgY29sb3IsIHN0cm9rZUNvbG9yU3BhY2UoKSk7CisgICAgQ0dDb250
ZXh0RmlsbFJlY3QoY29udGV4dCwgcmVjdCk7CisKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRl
KGNvbnRleHQpOworI2VuZGlmCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JS
ZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiB7CisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAKQEAgLTEzMTksNiArMTUwMywxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9y
UmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQogCiAgICAgQ0dQ
REZDb250ZXh0U2V0VVJMRm9yUmVjdChjb250ZXh0LCB1cmxSZWYuZ2V0KCksCiAgICAgICAgIENH
UmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKHJlY3QsIENHQ29udGV4dEdldENUTShjb250ZXh0KSkp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obGluayk7CisgICAgVU5VU0VEX1BBUkFNKGRlc3RS
ZWN0KTsKKyNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBtb2RlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAppbmRleCBi
MTNkMTIxMzQwYmIzMTEzOThhNjkyODc5NmQzODk5ZGVkY2ZjZWZjLi5lN2Q2ZjQzNmU0YzY3NmI4
YzVkYjQ5YTRmZDY2MTliNDAwOGQ3OTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApAQCAtMzMsOCArMzMsMTMgQEAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgog
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNsdWRlIDxtYXRoLmg+CisjaWYgIVBMQVRG
T1JNKElPUykKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vydmlj
ZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2lu
Y2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgpAQCAtNTAsMTAgKzU1LDE3IEBACiAjaW5jbHVkZSA8SU9TdXJmYWNlL0lP
U3VyZmFjZS5oPgogI2VuZGlmCiAKKy8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQg
QVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KKyNkZWZpbmUgVVNFX0FS
R0IzMiBQTEFURk9STShJT1MpCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGNv
bnN0IGludCBtYXhJT1N1cmZhY2VEaW1lbnNpb24gPSAyMDQ4OworI2Vsc2UKIHN0YXRpYyBjb25z
dCBpbnQgbWF4SU9TdXJmYWNlRGltZW5zaW9uID0gNDA5NjsKKyNlbmRpZgogCiBzdGF0aWMgUmV0
YWluUHRyPElPU3VyZmFjZVJlZj4gY3JlYXRlSU9TdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUp
CiB7CkBAIC03MCw4ICs4MiwxMyBAQCBzdGF0aWMgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4gY3Jl
YXRlSU9TdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgaWYgKCFhbGxvY1NpemUpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3Qgdm9pZCAqa2V5c1s2XTsKLSAgICBjb25zdCB2
b2lkICp2YWx1ZXNbNl07CisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBjb25zdCB2b2lkKiBrZXlz
WzZdOworICAgIGNvbnN0IHZvaWQqIHZhbHVlc1s2XTsKKyNlbHNlCisgICAgY29uc3Qgdm9pZCog
a2V5c1s3XTsKKyAgICBjb25zdCB2b2lkKiB2YWx1ZXNbN107CisjZW5kaWYKICAgICBrZXlzWzBd
ID0ga0lPU3VyZmFjZVdpZHRoOwogICAgIHZhbHVlc1swXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtD
Rk51bWJlckludFR5cGUsICZ3aWR0aCk7CiAgICAga2V5c1sxXSA9IGtJT1N1cmZhY2VIZWlnaHQ7
CkBAIC04NCw5ICsxMDEsMTQgQEAgc3RhdGljIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IGNyZWF0
ZUlPU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIHZhbHVlc1s0XSA9IENGTnVtYmVy
Q3JlYXRlKDAsIGtDRk51bWJlckxvbmdUeXBlLCAmYnl0ZXNQZXJSb3cpOwogICAgIGtleXNbNV0g
PSBrSU9TdXJmYWNlQWxsb2NTaXplOwogICAgIHZhbHVlc1s1XSA9IENGTnVtYmVyQ3JlYXRlKDAs
IGtDRk51bWJlckxvbmdUeXBlLCAmYWxsb2NTaXplKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
a2V5c1s2XSA9IGtJT1N1cmZhY2VDYWNoZU1vZGU7CisgICAgaW50IGNhY2hlTW9kZSA9IGtJT01h
cFdyaXRlQ29tYmluZUNhY2hlOworICAgIHZhbHVlc1s2XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtD
Rk51bWJlckludFR5cGUsICZjYWNoZU1vZGUpOworI2VuZGlmCiAKLSAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBkaWN0ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywg
dmFsdWVzLCA2LCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDY7IGkr
KykKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBkaWN0ID0gYWRvcHRDRihDRkRpY3Rp
b25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKHZhbHVlcyksICZr
Q0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxs
QmFja3MpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSCh2
YWx1ZXMpOyArK2kpCiAgICAgICAgIENGUmVsZWFzZSh2YWx1ZXNbaV0pOwogCiAgICAgcmV0dXJu
IGFkb3B0Q0YoSU9TdXJmYWNlQ3JlYXRlKGRpY3QuZ2V0KCkpKTsKQEAgLTE2OSw3ICsxOTEsMTEg
QEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBB
U1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2RhdGEubV9kYXRhKSAmIDMpKTsK
IAorI2lmIFVTRV9BUkdCMzIKKyAgICAgICAgbV9kYXRhLm1fYml0bWFwSW5mbyA9IGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7CisjZWxz
ZQogICAgICAgICBtX2RhdGEubV9iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRMYXN0OworI2VuZGlmCiAgICAgICAgIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlKG1fZGF0YS5tX2RhdGEsIG1fZGF0YS5tX2JhY2tpbmdTdG9yZVNpemUud2lkdGgo
KSwgbV9kYXRhLm1fYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgbV9kYXRhLm1fYnl0ZXNQ
ZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5tX2NvbG9yU3BhY2UsIG1fZGF0YS5tX2JpdG1hcElu
Zm8pKTsKICAgICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRh
LgogICAgICAgICBtX2RhdGEubV9kYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVy
Q3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLm1fZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCksIHJl
bGVhc2VJbWFnZURhdGEpKTsKQEAgLTI3OCw3ICszMDQsMTMgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6
ZHJhdyhHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwKIAogICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwogICAgIGFk
anVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUp
OwotICAgIGRlc3RDb250ZXh0LT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5t
X2JhY2tpbmdTdG9yZVNpemUsIGNvbG9yU3BhY2UsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3Qs
IG9wLCBibGVuZE1vZGUpOworICAgIGRlc3RDb250ZXh0LT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2Uu
Z2V0KCksIG1fZGF0YS5tX2JhY2tpbmdTdG9yZVNpemUsIGNvbG9yU3BhY2UsIGRlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAxLjBmLCAvLyBEZWZh
dWx0IHNjYWxlIG9mIDEuMAorI2VuZGlmCisgICAgICAgIG9wLAorICAgICAgICBibGVuZE1vZGUK
KyAgICApOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCkKQEAgLTM3NSw3ICs0MDcsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRC
eXRlQXJyYXkoTXVsdGlwbHkgbXVsdGlwbGllZCwgVWludDhDbGFtcGVkQXJyYXkqIHNvdXJjZSwg
YwogCiBzdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpwZWdVVEkoKQogewotI2lmIFBMQVRGT1JN
KFdJTikKKyNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKFdJTikKICAgICBzdGF0aWMgY29u
c3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsKICNlbmRp
ZgogICAgIHJldHVybiBrVVRUeXBlSlBFRzsKQEAgLTM4Myw3ICs0MTUsNyBAQCBzdGF0aWMgaW5s
aW5lIENGU3RyaW5nUmVmIGpwZWdVVEkoKQogICAgIAogc3RhdGljIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gdXRpRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0jaWYgUExB
VEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICByZXR1
cm4gYWRvcHRDRihVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9yVGFnKGtVVFRhZ0Ns
YXNzTUlNRVR5cGUsIG1pbWVUeXBlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIDApKTsKICNlbHNl
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBp
cyB0aHJlYWRzYWZlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCmluZGV4IGRlNGMzODdlMTY3YTUxOTc4YWFm
OGJhZjhjOWY1OWJlYjc5YTc1MzkuLjlmZDI4ZDQ1N2ZjYjgwY2U0YjRhNTcwOWRmYTRjMTg5YjMy
MjliNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKQEAgLTQ4LDYgKzQ4LDkgQEAgc3RydWN0IFNjYW5s
aW5lRGF0YSB7CiB9OwogI2VuZGlmCiAKKy8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBh
bmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KKyNkZWZpbmUgVVNF
X0FSR0IzMiBQTEFURk9STShJT1MpCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSW1hZ2VCdWZm
ZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpCkBAIC02MCw3ICs2Myw3IEBA
IEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmKQogCiAjaWYg
VVNFKEFDQ0VMRVJBVEUpCiAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQorI2lmIFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkK
IHN0YXRpYyB2b2lkIGNvbnZlcnRTY2FubGluZSh2b2lkKiBkYXRhLCBzaXplX3QgdGlsZU51bWJl
ciwgYm9vbCBwcmVtdWx0aXBseSkKIHsKICAgICBTY2FubGluZURhdGEqIHNjYW5saW5lRGF0YSA9
IHN0YXRpY19jYXN0PFNjYW5saW5lRGF0YSo+KGRhdGEpOwpAQCAtMTIyLDEzICsxMjUsMTMgQEAg
UGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKGNv
bnN0IEludFJlY3QmIHJlY3QsIGNvbnMKICAgICAKICAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgp
OwogICAgIGludCBkZXN0eCA9IDA7Ci0gICAgaW50IGRlc3R3ID0gcmVjdC53aWR0aCgpOworICAg
IENoZWNrZWQ8aW50PiBkZXN0dyA9IHJlY3Qud2lkdGgoKTsKICAgICBpZiAob3JpZ2lueCA8IDAp
IHsKICAgICAgICAgZGVzdHcgKz0gb3JpZ2lueDsKICAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsK
ICAgICAgICAgb3JpZ2lueCA9IDA7CiAgICAgfQotICAgIGRlc3R3ID0gc3RkOjptaW48aW50Pihk
ZXN0dywgY2VpbGYoc2l6ZS53aWR0aCgpIC8gcmVzb2x1dGlvblNjYWxlKSAtIG9yaWdpbngpOwor
ICAgIGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dy51bnNhZmVHZXQoKSwgY2VpbGYoc2l6ZS53
aWR0aCgpIC8gcmVzb2x1dGlvblNjYWxlKSAtIG9yaWdpbngpOwogICAgIG9yaWdpbnggKj0gcmVz
b2x1dGlvblNjYWxlOwogICAgIGlmIChlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpKQog
ICAgICAgICBlbmR4ID0gc2l6ZS53aWR0aCgpOwpAQCAtMTM2LDEzICsxMzksMTMgQEAgUGFzc1Jl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnMKICAgICAKICAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwogICAg
IGludCBkZXN0eSA9IDA7Ci0gICAgaW50IGRlc3RoID0gcmVjdC5oZWlnaHQoKTsKKyAgICBDaGVj
a2VkPGludD4gZGVzdGggPSByZWN0LmhlaWdodCgpOwogICAgIGlmIChvcmlnaW55IDwgMCkgewog
ICAgICAgICBkZXN0aCArPSBvcmlnaW55OwogICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwogICAg
ICAgICBvcmlnaW55ID0gMDsKICAgICB9Ci0gICAgZGVzdGggPSBzdGQ6Om1pbjxpbnQ+KGRlc3Ro
LCBjZWlsZihzaXplLmhlaWdodCgpIC8gcmVzb2x1dGlvblNjYWxlKSAtIG9yaWdpbnkpOworICAg
IGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0aC51bnNhZmVHZXQoKSwgY2VpbGYoc2l6ZS5oZWln
aHQoKSAvIHJlc29sdXRpb25TY2FsZSkgLSBvcmlnaW55KTsKICAgICBvcmlnaW55ICo9IHJlc29s
dXRpb25TY2FsZTsKICAgICBpZiAoZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCiAg
ICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwpAQCAtMTYzLDYgKzE2NiwxNiBAQCBQYXNzUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoY29uc3QgSW50
UmVjdCYgcmVjdCwgY29ucwogICAgICAgICAKICNpZiBVU0UoQUNDRUxFUkFURSkKICAgICAgICAg
aWYgKHVubXVsdGlwbGllZCkgeworI2lmIFVTRV9BUkdCMzIKKyAgICAgICAgICAgIFNjYW5saW5l
RGF0YSBzY2FubGluZURhdGE7CisgICAgICAgICAgICBzY2FubGluZURhdGEuc2NhbmxpbmVXaWR0
aCA9IGRlc3R3LnVuc2FmZUdldCgpOworICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNyY0RhdGEg
PSBzcmNSb3dzOworICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNyY1Jvd0J5dGVzID0gc3JjQnl0
ZXNQZXJSb3c7CisgICAgICAgICAgICBzY2FubGluZURhdGEuZGVzdERhdGEgPSBkZXN0Um93czsK
KyAgICAgICAgICAgIHNjYW5saW5lRGF0YS5kZXN0Um93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7
CisKKyAgICAgICAgICAgIGRpc3BhdGNoX2FwcGx5X2YoZGVzdGgudW5zYWZlR2V0KCksIGRpc3Bh
dGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCks
ICZzY2FubGluZURhdGEsIHVucHJlbXVsdGl0cGx5U2NhbmxpbmUpOworI2Vsc2UKICAgICAgICAg
ICAgIHZJbWFnZV9CdWZmZXIgc3JjOwogICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51
bnNhZmVHZXQoKTsKICAgICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwpA
QCAtMTcwLDggKzE4Myw4IEBAIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVm
ZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgICAgICBz
cmMuZGF0YSA9IHNyY1Jvd3M7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHZJbWFnZV9CdWZm
ZXIgZHN0OwotICAgICAgICAgICAgZHN0LmhlaWdodCA9IGRlc3RoOwotICAgICAgICAgICAgZHN0
LndpZHRoID0gZGVzdHc7CisgICAgICAgICAgICBkc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0
KCk7CisgICAgICAgICAgICBkc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKICAgICAgICAg
ICAgIGRzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKICAgICAgICAgICAgIGRzdC5kYXRh
ID0gZGVzdFJvd3M7CiAKQEAgLTE4NCwxMyArMTk3LDE0IEBAIFBhc3NSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRh
X1JHQkE4ODg4KCZzcmMsICZkc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbmRpZgogICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICBp
ZiAocmVzb2x1dGlvblNjYWxlICE9IDEpIHsKICAgICAgICAgICAgIFJldGFpblB0cjxDR0NvbnRl
eHRSZWY+IHNvdXJjZUNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShzcmNS
b3dzLCB3aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0LnVuc2FmZUdldCgpLCA4LCBzcmNCeXRlc1Bl
clJvdywgbV9jb2xvclNwYWNlLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKICAg
ICAgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzb3VyY2VJbWFnZSA9IGFkb3B0Q0YoQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uoc291cmNlQ29udGV4dC5nZXQoKSkpOwotICAgICAgICAg
ICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gZGVzdGluYXRpb25Db250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUoZGVzdFJvd3MsIGRlc3R3LCBkZXN0aCwgOCwgZGVzdEJ5dGVz
UGVyUm93LCBtX2NvbG9yU3BhY2UsIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwor
ICAgICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gZGVzdGluYXRpb25Db250ZXh0ID0g
YWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGVzdFJvd3MsIGRlc3R3LnVuc2FmZUdldCgp
LCBkZXN0aC51bnNhZmVHZXQoKSwgOCwgZGVzdEJ5dGVzUGVyUm93LCBtX2NvbG9yU3BhY2UsIGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0
QmxlbmRNb2RlKGRlc3RpbmF0aW9uQ29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CiAg
ICAgICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVzdGluYXRpb25Db250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIHdpZHRoLnVuc2FmZUdldCgpIC8gcmVzb2x1dGlvblNjYWxlLCBoZWln
aHQudW5zYWZlR2V0KCkgLyByZXNvbHV0aW9uU2NhbGUpLCBzb3VyY2VJbWFnZS5nZXQoKSk7IC8v
IEZJWE1FOiBBZGQgc3VicGl4ZWwgdHJhbnNsYXRpb24uCiAgICAgICAgICAgICBpZiAoIXVubXVs
dGlwbGllZCkKQEAgLTIwOCw2ICsyMjIsMjAgQEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnMKICAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4Kysp
IHsKICAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7CiAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107CisjaWYgVVNF
X0FSR0IzMgorICAgICAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBh
cyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGFscGhhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3Jj
Um93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOworICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7
CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3Nb
YmFzZXhdICogMjU1KSAvIGFscGhhOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFz
ZXggKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBz
cmNSb3dzW2Jhc2V4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgfQorI2Vsc2UKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFscGhhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eF0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBh
bHBoYTsKQEAgLTIxNSwxNCArMjQzLDI1IEBAIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zCiAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7CiAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07CisjZW5kaWYKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKICAgICAgICAgICAg
ICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVH
ZXQoKTsgKyt5KSB7CisjaWYgVVNFX0FSR0IzMgorICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgeworICAgICAgICAgICAgICAgICAgICBp
bnQgYmFzZXggPSB4ICogNDsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0g
c3JjUm93c1tiYXNleCArIDJdOworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDFdID0gc3JjUm93c1tiYXNleCArIDFdOworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDJdID0gc3JjUm93c1tiYXNleF07CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107CisgICAgICAgICAgICAgICAgfQorI2Vs
c2UKICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8ICh3aWR0aCAqIDQpLnVuc2Fm
ZUdldCgpOyB4ICs9IDQpCiAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3QqPihkZXN0Um93cyArIHgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNy
Y1Jvd3MgKyB4KVswXTsKKyNlbmRpZgogICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0
ZXNQZXJSb3c7CiAgICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93Owog
ICAgICAgICAgICAgfQpAQCAtMjQyLDggKzI4MSw4IEBAIFBhc3NSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25z
CiAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKIAogICAgICAgICB2SW1hZ2VfQnVmZmVyIGRl
c3Q7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGg7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBk
ZXN0dzsKKyAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKKyAgICAgICAg
ZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwogICAgICAgICBkZXN0LnJvd0J5dGVzID0g
ZGVzdEJ5dGVzUGVyUm93OwogICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKIApAQCAtMjYz
LDEzICszMDIsMTMgQEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJE
YXRhOjpnZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnMKIAogICAgICAgICBpZiAodW5t
dWx0aXBsaWVkKSB7CiAgICAgICAgICAgICBTY2FubGluZURhdGEgc2NhbmxpbmVEYXRhOwotICAg
ICAgICAgICAgc2NhbmxpbmVEYXRhLnNjYW5saW5lV2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsK
KyAgICAgICAgICAgIHNjYW5saW5lRGF0YS5zY2FubGluZVdpZHRoID0gZGVzdHcudW5zYWZlR2V0
KCk7CiAgICAgICAgICAgICBzY2FubGluZURhdGEuc3JjRGF0YSA9IHNyY1Jvd3M7CiAgICAgICAg
ICAgICBzY2FubGluZURhdGEuc3JjUm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKICAgICAgICAg
ICAgIHNjYW5saW5lRGF0YS5kZXN0RGF0YSA9IGRlc3RSb3dzOwogICAgICAgICAgICAgc2Nhbmxp
bmVEYXRhLmRlc3RSb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKIAotICAgICAgICAgICAgZGlz
cGF0Y2hfYXBwbHlfZihoZWlnaHQudW5zYWZlR2V0KCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVl
dWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksICZzY2FubGluZURhdGEsIHVu
cHJlbXVsdGl0cGx5U2NhbmxpbmUpOworICAgICAgICAgICAgZGlzcGF0Y2hfYXBwbHlfZihkZXN0
aC51bnNhZmVHZXQoKSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9Q
UklPUklUWV9ERUZBVUxULCAwKSwgJnNjYW5saW5lRGF0YSwgdW5wcmVtdWx0aXRwbHlTY2FubGlu
ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxz
IGZyb20gQkdSQSB0byBSR0JBLgogICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7
IDIsIDEsIDAsIDMgfTsKQEAgLTI3OSw3ICszMTgsNyBAQCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
cwogICAgICAgICBpZiAocmVzb2x1dGlvblNjYWxlICE9IDEpIHsKICAgICAgICAgICAgIFJldGFp
blB0cjxDR0NvbnRleHRSZWY+IHNvdXJjZUNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZShzcmNSb3dzLCB3aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0LnVuc2FmZUdldCgpLCA4
LCBzcmNCeXRlc1BlclJvdywgbV9jb2xvclNwYWNlLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3QpKTsKICAgICAgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzb3VyY2VJbWFnZSA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uoc291cmNlQ29udGV4dC5nZXQoKSkp
OwotICAgICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gZGVzdGluYXRpb25Db250ZXh0
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGVzdFJvd3MsIGRlc3R3LCBkZXN0aCwg
OCwgZGVzdEJ5dGVzUGVyUm93LCBtX2NvbG9yU3BhY2UsIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkTGFzdCkpOworICAgICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gZGVzdGluYXRp
b25Db250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGVzdFJvd3MsIGRlc3R3
LnVuc2FmZUdldCgpLCBkZXN0aC51bnNhZmVHZXQoKSwgOCwgZGVzdEJ5dGVzUGVyUm93LCBtX2Nv
bG9yU3BhY2UsIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwogICAgICAgICAgICAg
Q0dDb250ZXh0U2V0QmxlbmRNb2RlKGRlc3RpbmF0aW9uQ29udGV4dC5nZXQoKSwga0NHQmxlbmRN
b2RlQ29weSk7CiAgICAgICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVzdGluYXRpb25Db250
ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHdpZHRoLnVuc2FmZUdldCgpIC8gcmVzb2x1dGlv
blNjYWxlLCBoZWlnaHQudW5zYWZlR2V0KCkgLyByZXNvbHV0aW9uU2NhbGUpLCBzb3VyY2VJbWFn
ZS5nZXQoKSk7IC8vIEZJWE1FOiBBZGQgc3VicGl4ZWwgdHJhbnNsYXRpb24uCiAKQEAgLTM5MCw2
ICs0MjksMTcgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoVWludDhDbGFtcGVkQXJy
YXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVMKICAgICAgICAgCiAjaWYgIFVTRShB
Q0NFTEVSQVRFKQogICAgICAgICBpZiAodW5tdWx0aXBsaWVkKSB7CisjaWYgVVNFX0FSR0IzMgor
ICAgICAgICAgICAgLy8gRklYTUU6IEFyZSBzY2FubGluZURhdGEuc2NhbmxpbmVXaWR0aCBhbmQg
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHNwZWNpZmllZCB0byBkaXNwYXRjaF9hcHBseV9mKCkg
Y29ycmVjdD8KKyAgICAgICAgICAgIFNjYW5saW5lRGF0YSBzY2FubGluZURhdGE7CisgICAgICAg
ICAgICBzY2FubGluZURhdGEuc2NhbmxpbmVXaWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOworICAg
ICAgICAgICAgc2NhbmxpbmVEYXRhLnNyY0RhdGEgPSBzcmNSb3dzOworICAgICAgICAgICAgc2Nh
bmxpbmVEYXRhLnNyY1Jvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBzY2Fu
bGluZURhdGEuZGVzdERhdGEgPSBkZXN0Um93czsKKyAgICAgICAgICAgIHNjYW5saW5lRGF0YS5k
ZXN0Um93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7CisKKyAgICAgICAgICAgIGRpc3BhdGNoX2Fw
cGx5X2YoaGVpZ2h0LnVuc2FmZUdldCgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BB
VENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCAmc2NhbmxpbmVEYXRhLCBwcmVtdWx0aXRw
bHlTY2FubGluZSk7CisjZWxzZQogICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7CiAgICAg
ICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwogICAgICAgICAgICAgc3Jj
LndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7CkBAIC00MTEsNiArNDYxLDcgQEAgdm9pZCBJbWFn
ZUJ1ZmZlckRhdGE6OnB1dERhdGEoVWludDhDbGFtcGVkQXJyYXkqJiBzb3VyY2UsIGNvbnN0IElu
dFNpemUmIHNvdXJjZVMKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdkltYWdlUHJlbXVs
dGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbmRpZgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTQzMyw2ICs0ODQsMjAg
QEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoVWludDhDbGFtcGVkQXJyYXkqJiBzb3Vy
Y2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVMKICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewogICAgICAgICAgICAgICAgIGludCBiYXNleCA9
IHggKiA0OwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNSb3dzW2Jh
c2V4ICsgM107CisjaWYgVVNFX0FSR0IzMgorICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIg
aXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgorICAgICAgICAg
ICAgICAgIGlmICh1bm11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3Jj
Um93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAwXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhh
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKKyAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOworICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7CisgICAgICAgICAgICAgICAgfQorI2Vsc2UK
ICAgICAgICAgICAgICAgICBpZiAodW5tdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewogICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiBhbHBo
YSArIDI1NCkgLyAyNTU7CiAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0g
PSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwpAQCAtNDQwLDYgKzUw
NSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKFVpbnQ4Q2xhbXBlZEFycmF5KiYg
c291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTCiAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgp
WzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Cisj
ZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1Bl
clJvdzsKICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cu
aAppbmRleCBhNDE5MDZiYWI2MWVmZTYwMGQyNzRhZGU2NjQ2YzFmZjM2MDY4Y2UwLi44OTYwZDAw
ZTRmMGMzMDgxZmIzYWQ4N2FhYzQ2YzQ0MjJmYzQ2OWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKQEAgLTMx
LDcgKzMxLDkgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKICNpZiBQTEFURk9STShN
QUMpICYmIFVTRShDQSkKKyNpZiAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKICNkZWZpbmUgV1RG
X1VTRV9JT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUgMQorI2VuZGlmIC8vICFQTEFURk9S
TShJT1NfU0lNVUxBVE9SKQogI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlICpJ
T1N1cmZhY2VSZWY7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQ0cuY3BwCmluZGV4IDY5YmEyZDYyYmUyNTM4NGE4MzNhOWE5ZjI1MjAxZmFhNTA1MmEzMDcu
LjQ5NWQ2NjJmZDQ0YTUyMDRhMzJiNTBkMzYyOWQ0Y2U2ZmE4YWYxOTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCkBAIC0zMiw3ICszMiwx
MSBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENH
LmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgorI2lmICFQTEFURk9STShJT1MpCiAjaW5j
bHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQor
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTcwLDcgKzc0LDEyIEBA
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZTo6aW1hZ2VXaXRoQ29sb3JTcGFjZShDR0ltYWdl
UmVmIG9yaWdpbmFsSW1hZ2UsIENvbG9yCiBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNhbGxiYWNr
KHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIENHSW1hZ2VSZWYgaW1h
Z2UgPSAoQ0dJbWFnZVJlZilpbmZvOwotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBH
cmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwg
MCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpKSwgaW1h
Z2UpOworICAgIENHRmxvYXQgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSk7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKKyAg
ICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLWhlaWdodCk7CisjZW5kaWYKKyAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJv
dW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSks
IGhlaWdodCkpLCBpbWFnZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhdHRlcm5SZWxlYXNlT25NYWlu
VGhyZWFkQ2FsbGJhY2sodm9pZCogaW5mbykKQEAgLTEzOCw2ICsxNDcsMTAgQEAgdm9pZCBJbWFn
ZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdAogICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdCht
YXRyaXgsIENHQ29udGV4dEdldENUTShjb250ZXh0KSk7CiAgICAgICAgIC8vIFRoZSB0b3Agb2Yg
YSBwYXJ0aWFsbHktZGVjb2RlZCBpbWFnZSBpcyBkcmF3biBhdCB0aGUgYm90dG9tIG9mIHRoZSB0
aWxlLiBNYXAgaXQgdG8gdGhlIHRvcC4KICAgICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zv
cm1UcmFuc2xhdGUobWF0cml4LCAwLCBzaXplKCkuaGVpZ2h0KCkgLSBoKTsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtU2NhbGUobWF0cml4LCAx
LCAtMSk7CisgICAgICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtVHJhbnNsYXRlKG1hdHJp
eCwgMCwgLWgpOworI2VuZGlmCiAgICAgICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IENH
SW1hZ2VSZXRhaW4oc3ViSW1hZ2UuZ2V0KCkpOwogICAgICAgICBSZXRhaW5QdHI8Q0dQYXR0ZXJu
UmVmPiBwYXR0ZXJuID0gYWRvcHRDRihDR1BhdHRlcm5DcmVhdGUocGxhdGZvcm1JbWFnZSwgQ0dS
ZWN0TWFrZSgwLCAwLCB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSksIG1hdHJp
eCwKICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCkgKyBzcGFjZVNpemUoKS53aWR0aCgpICog
KDEgLyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uYSgpKSksCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNH
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cu
Y3BwCmluZGV4IGJmNjkyODJjN2EyNWMzNjIxYTdmM2YwZjQ1OGFkMDJlZjE3NGJmZjUuLmJmNDUz
MzYzY2ZiNjNiMmVkMmE5YTIxYTkzOGYxNWM1ZWNkNjkwNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCkBAIC0zNCw3
ICszNCwxNSBAQAogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lz
dHJ5LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNp
bmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNl
CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2VQcml2YXRlLmg+CisjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPEltYWdlSU8vQ0dJbWFnZVNvdXJj
ZVByaXZhdGUuaD4KKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Niw2ICs1
NCwxMCBAQCBjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSA9IENG
U1RSKCJrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YQogLy8gdGhhdCB3b24ndCBjb25mbGljdCB3
aXRoIEltYWdlSU8ncyB2ZXJzaW9uIHdoZW4gaXQgaXMgYXZhaWxhYmxlLgogY29uc3QgQ0ZTdHJp
bmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUdJRlVuY2xhbXBlZERlbGF5VGltZSA9IENGU1RS
KCJVbmNsYW1wZWREZWxheVRpbWUiKTsKIAorI2lmIFBMQVRGT1JNKElPUykKK2Jvb2wgSW1hZ2VT
b3VyY2U6OnNfYWNjZWxlcmF0ZWRJbWFnZURlY29kaW5nOworI2VuZGlmCisKICNpZiAhUExBVEZP
Uk0oTUFDKQogc2l6ZV90IHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbih2b2lkKiBpbmZv
LCB2b2lkKiBidWZmZXIsIG9mZl90IHBvc2l0aW9uLCBzaXplX3QgY291bnQpCiB7CkBAIC02OSw2
ICs4MSwxMCBAQCB2b2lkIHNoYXJlZEJ1ZmZlclJlbGVhc2Uodm9pZCogaW5mbykKIAogSW1hZ2VT
b3VyY2U6OkltYWdlU291cmNlKEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6
OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogICAgIDogbV9kZWNvZGVyKDApCisjaWYgUExB
VEZPUk0oSU9TKQorICAgICwgbV9iYXNlU3Vic2FtcGxpbmcoMCkKKyAgICAsIG1faXNQcm9ncmVz
c2l2ZShmYWxzZSkKKyNlbmRpZgogewogICAgIC8vIEZJWE1FOiBBbHBoYU9wdGlvbiBhbmQgR2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb24gYXJlIGlnbm9yZWQuCiB9CkBAIC05NCwxMyArMTEwLDE0
IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFsbEZyYW1lcywgc2l6ZV90
LCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wKICAgICAgICAgc2V0RGF0YShkYXRhLCBhbGxEYXRh
UmVjZWl2ZWQpOwogfQogCi1zdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIGltYWdlU291cmNlT3B0aW9u
cyhJbWFnZVNvdXJjZTo6U2hvdWxkU2tpcE1ldGFkYXRhIHNraXBNZXRhZGF0YSkKKyNpZiAhUExB
VEZPUk0oSU9TKQorc3RhdGljIENGRGljdGlvbmFyeVJlZiBpbWFnZVNvdXJjZU9wdGlvbnMoSW1h
Z2VTb3VyY2U6OlNob3VsZFNraXBNZXRhZGF0YSBza2lwTWV0YURhdGEpCiB7CiAgICAgc3RhdGlj
IENGRGljdGlvbmFyeVJlZiBvcHRpb25zOwogCiAgICAgaWYgKCFvcHRpb25zKSB7CiAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIG51bU9wdGlvbnMgPSAzOwotICAgICAgICBjb25zdCBDRkJvb2xlYW5S
ZWYgaW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgPSAoc2tpcE1ldGFkYXRhID09IEltYWdlU291cmNl
OjpTa2lwTWV0YWRhdGEpID8ga0NGQm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2U7CisgICAg
ICAgIGNvbnN0IENGQm9vbGVhblJlZiBpbWFnZVNvdXJjZVNraXBNZXRhZGF0YSA9IChza2lwTWV0
YURhdGEgPT0gSW1hZ2VTb3VyY2U6OlNraXBNZXRhZGF0YSkgPyBrQ0ZCb29sZWFuVHJ1ZSA6IGtD
RkJvb2xlYW5GYWxzZTsKICAgICAgICAgY29uc3Qgdm9pZCoga2V5c1tudW1PcHRpb25zXSA9IHsg
a0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZSwga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0Iz
Miwga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgfTsKICAgICAgICAgY29uc3Qgdm9pZCogdmFs
dWVzW251bU9wdGlvbnNdID0geyBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUsIGltYWdl
U291cmNlU2tpcE1ldGFkYXRhIH07CiAgICAgICAgIG9wdGlvbnMgPSBDRkRpY3Rpb25hcnlDcmVh
dGUoTlVMTCwga2V5cywgdmFsdWVzLCBudW1PcHRpb25zLCAKQEAgLTEwOCw2ICsxMjUsMjUgQEAg
c3RhdGljIENGRGljdGlvbmFyeVJlZiBpbWFnZVNvdXJjZU9wdGlvbnMoSW1hZ2VTb3VyY2U6OlNo
b3VsZFNraXBNZXRhZGF0YSBza2lwTWUKICAgICB9CiAgICAgcmV0dXJuIG9wdGlvbnM7CiB9Cisj
ZWxzZQorQ0ZEaWN0aW9uYXJ5UmVmIEltYWdlU291cmNlOjppbWFnZVNvdXJjZU9wdGlvbnMoU2hv
dWxkU2tpcE1ldGFkYXRhIHNraXBNZXRhRGF0YSwgaW50IHJlcXVlc3RlZFN1YnNhbXBsaW5nKSBj
b25zdAoreworICAgIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgb3B0aW9uc1s0XSA9IHtudWxscHRy
LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyfTsKKyAgICBpbnQgc3Vic2FtcGxpbmcgPSBzdGQ6
Om1pbigzLCBtX2lzUHJvZ3Jlc3NpdmUgfHwgcmVxdWVzdGVkU3Vic2FtcGxpbmcgPCAwID8gMCA6
IChyZXF1ZXN0ZWRTdWJzYW1wbGluZyArIG1fYmFzZVN1YnNhbXBsaW5nKSk7CisKKyAgICBpZiAo
IW9wdGlvbnNbc3Vic2FtcGxpbmddKSB7CisgICAgICAgIGludCBzdWJzYW1wbGVJbnQgPSAxIDw8
IHN1YnNhbXBsaW5nOyAvLyBbMC4uM10gPT4gWzEsIDIsIDQsIDhdCisgICAgICAgIFJldGFpblB0
cjxDRk51bWJlclJlZj4gc3Vic2FtcGxlTnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShu
dWxscHRyLCAga0NGTnVtYmVySW50VHlwZSwgICZzdWJzYW1wbGVJbnQpKTsKKyAgICAgICAgY29u
c3QgQ0ZJbmRleCBudW1PcHRpb25zID0gNTsKKyAgICAgICAgY29uc3QgQ0ZCb29sZWFuUmVmIGlt
YWdlU291cmNlU2tpcE1ldGFEYXRhID0gKHNraXBNZXRhRGF0YSA9PSBJbWFnZVNvdXJjZTo6U2tp
cE1ldGFkYXRhKSA/IGtDRkJvb2xlYW5UcnVlIDoga0NGQm9vbGVhbkZhbHNlOworICAgICAgICBj
b25zdCBDRkJvb2xlYW5SZWYgYWNjZWxlcmF0ZWRJbWFnZURlY29kaW5nID0gSW1hZ2VTb3VyY2U6
OnNfYWNjZWxlcmF0ZWRJbWFnZURlY29kaW5nID8ga0NGQm9vbGVhblRydWUgOiBrQ0ZCb29sZWFu
RmFsc2U7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleXNbbnVtT3B0aW9uc10gPSB7IGtDR0ltYWdl
U291cmNlU2hvdWxkQ2FjaGUsIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIsIGtDR0lt
YWdlU291cmNlU3Vic2FtcGxlRmFjdG9yLCBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSwga0NH
SW1hZ2VTb3VyY2VVc2VIYXJkd2FyZUFjY2VsZXJhdGlvbiB9OworICAgICAgICBjb25zdCB2b2lk
KiB2YWx1ZXNbbnVtT3B0aW9uc10gPSB7IGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwg
c3Vic2FtcGxlTnVtYmVyLmdldCgpLCBpbWFnZVNvdXJjZVNraXBNZXRhRGF0YSwgYWNjZWxlcmF0
ZWRJbWFnZURlY29kaW5nIH07CisgICAgICAgIG9wdGlvbnNbc3Vic2FtcGxpbmddID0gQ0ZEaWN0
aW9uYXJ5Q3JlYXRlKG51bGxwdHIsIGtleXMsIHZhbHVlcywgbnVtT3B0aW9ucywgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7
CisgICAgfQorICAgIHJldHVybiBvcHRpb25zW3N1YnNhbXBsaW5nXTsKK30KKyNlbmRpZgogCiBi
b29sIEltYWdlU291cmNlOjppbml0aWFsaXplZCgpIGNvbnN0CiB7CkBAIC0xOTcsNiArMjMzLDM4
IEBAIEludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBJ
bWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24KICAgICBpZiAobnVtKQogICAgICAgICBDRk51bWJl
ckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmgpOwogCisjaWYgUExBVEZPUk0oSU9T
KQorICAgIGlmICghbV9pc1Byb2dyZXNzaXZlKSB7CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBq
ZmlmUHJvcGVydGllcyA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUpGSUZEaWN0aW9uYXJ5
KSk7CisgICAgICAgIGlmIChqZmlmUHJvcGVydGllcykgeworICAgICAgICAgICAgQ0ZCb29sZWFu
UmVmIGlzUHJvZ0NGQm9vbCA9IHN0YXRpY19jYXN0PENGQm9vbGVhblJlZj4oQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUoamZpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlKRklGSXNQcm9ncmVzc2l2
ZSkpOworICAgICAgICAgICAgaWYgKGlzUHJvZ0NGQm9vbCkKKyAgICAgICAgICAgICAgICBtX2lz
UHJvZ3Jlc3NpdmUgPSBDRkJvb2xlYW5HZXRWYWx1ZShpc1Byb2dDRkJvb2wpOworICAgICAgICAg
ICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUxODQ2NTU+IC0gSGFuZyByZW5k
ZXJpbmcgdmVyeSBsYXJnZSBwcm9ncmVzc2l2ZSBKUEVHLiBEZWNvZGluZyBwcm9ncmVzc2l2ZQor
ICAgICAgICAgICAgLy8gaW1hZ2VzIGhhbmdzIGZvciBhIHZlcnkgbG9uZyB0aW1lIHJpZ2h0IG5v
dy4gVW50aWwgdGhpcyBpcyBmaXhlZCwgZG9uJ3Qgc3ViLXNhbXBsZSBwcm9ncmVzc2l2ZSBpbWFn
ZXMuIFRoaXMKKyAgICAgICAgICAgIC8vIHdpbGwgY2F1c2UgdGhlbSB0byBmYWlsIG91ciBsYXJn
ZSBpbWFnZSBjaGVjayBhbmQgdGhleSB3b24ndCBiZSBkZWNvZGVkLgorICAgICAgICAgICAgLy8g
RklYTUU6IFJlbW92ZSBvbmNlIHVuZGVybHlpbmcgaXNzdWUgaXMgZml4ZWQgKDxyZGFyOi8vcHJv
YmxlbS81MTkxNDE4PikKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgobV9iYXNlU3Vic2Ft
cGxpbmcgPT0gMCkgJiYgIW1faXNQcm9ncmVzc2l2ZSkgeworICAgICAgICBJbnRTaXplIHN1YnNh
bXBsZWRTaXplKHcsIGgpOworICAgICAgICBjb25zdCBpbnQgY01heGltdW1JbWFnZVNpemVCZWZv
cmVTdWJzYW1wbGluZyA9IDUgKiAxMDI0ICogMTAyNDsKKyAgICAgICAgd2hpbGUgKChtX2Jhc2VT
dWJzYW1wbGluZyA8IDMpICYmIHN1YnNhbXBsZWRTaXplLndpZHRoKCkgKiBzdWJzYW1wbGVkU2l6
ZS5oZWlnaHQoKSA+IGNNYXhpbXVtSW1hZ2VTaXplQmVmb3JlU3Vic2FtcGxpbmcpIHsKKyAgICAg
ICAgICAgIC8vIFdlIGtub3cgdGhlIHNpemUsIGJ1dCB0aGUgYWN0dWFsIGltYWdlIGlzIHZlcnkg
bGFyZ2UgYW5kIHNob3VsZCBiZSBzdWItc2FtcGxlZC4KKyAgICAgICAgICAgIC8vIEluY3JlYXNl
IHRoZSBiYXNlIHN1YnNhbXBsaW5nIGFuZCBhc2sgZm9yIHRoZSBzaXplIGFnYWluLiBJZiB0aGUg
aW1hZ2UgY2FuIGJlIHN1YnNhbXBsZWQsIHRoZSBzaXplIHdpbGwgYmUKKyAgICAgICAgICAgIC8v
IGdyZWF0bHkgcmVkdWNlZC4gNHggc3ViLXNhbXBsaW5nIHdpbGwgbWFrZSB1cyBzdXBwb3J0IHVw
IHRvIDMyME1QICg1TVAgKiA0XjMpIGltYWdlcywgd2hpY2ggc2hvdWxkIGJlIHBsZW50eS4KKyAg
ICAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gY2FsbGJhY2sgZnJvbSBJbWFnZUlPIHdoZW4gdGhlIHNp
emUgaXMgYXZhaWxhYmxlLCBzbyB3ZSBkbyB0aGUgY2hlY2sgd2hlbiB3ZSBoYXBwZW4KKyAgICAg
ICAgICAgIC8vIHRvIGNoZWNrIHRoZSBzaXplIGFuZCBpdHMgbm9uIC0gemVyby4KKyAgICAgICAg
ICAgIC8vIE5vdGU6IFNvbWUgY2xpZW50cyBvZiB0aGlzIGNsYXNzIGRvbid0IGNhbGwgaXNTaXpl
QXZhaWxhYmxlKCkgc28gd2UgY2FuJ3QgcmVseSBvbiB0aGF0LgorICAgICAgICAgICAgKyttX2Jh
c2VTdWJzYW1wbGluZzsKKyAgICAgICAgICAgIHN1YnNhbXBsZWRTaXplID0gZnJhbWVTaXplQXRJ
bmRleChpbmRleCwgZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSk7CisgICAg
ICAgIH0KKyAgICAgICAgdyA9IHN1YnNhbXBsZWRTaXplLndpZHRoKCk7CisgICAgICAgIGggPSBz
dWJzYW1wbGVkU2l6ZS5oZWlnaHQoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIGlmICgoZGVzY3Jp
cHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlv
bikgJiYgb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLmdldCgpKS51c2VzV2lk
dGhBc0hlaWdodCgpKQogICAgICAgICByZXR1cm4gSW50U2l6ZShoLCB3KTsKIApAQCAtMjEyLDYg
KzI4MCwzMSBAQCBJbWFnZU9yaWVudGF0aW9uIEltYWdlU291cmNlOjpvcmllbnRhdGlvbkF0SW5k
ZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHJldHVybiBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0
aWVzKHByb3BlcnRpZXMuZ2V0KCkpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorSW50U2l6ZSBJ
bWFnZVNvdXJjZTo6b3JpZ2luYWxTaXplKFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSBzaG91
bGRSZXNwZWN0T3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgZnJhbWVTaXplQXRJbmRleCgwLCBz
aG91bGRSZXNwZWN0T3JpZW50YXRpb24pOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgo
bV9kZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoU2tpcE1ldGFkYXRhLCAtMSkpKTsKKwor
ICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIGlu
dCB3aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7CisgICAgQ0ZOdW1iZXJSZWYgbnVtYmVy
ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtD
R0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKTsKKyAgICBpZiAobnVtYmVyKQorICAgICAgICBDRk51
bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKKyAgICBudW1i
ZXIgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVy
dGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsSGVpZ2h0KSk7CisgICAgaWYgKG51bWJl
cikKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJlckludFR5cGUsICZo
ZWlnaHQpOworCisgICAgaWYgKChzaG91bGRSZXNwZWN0T3JpZW50YXRpb24gPT0gUmVzcGVjdElt
YWdlT3JpZW50YXRpb24pICYmIG9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMocHJvcGVydGllcy5n
ZXQoKSkudXNlc1dpZHRoQXNIZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoaGVpZ2h0
LCB3aWR0aCk7CisKKyAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKK30KKyNlbmRp
ZgorCiBJbnRTaXplIEltYWdlU291cmNlOjpzaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlv
biBkZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgwLCBk
ZXNjcmlwdGlvbik7CkBAIC0yODYsNyArMzc5LDM2IEBAIENHSW1hZ2VSZWYgSW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgsIGZsb2F0KiBzY2FsZSkKICAgICBpZiAo
IWluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCisjaWYgIVBMQVRGT1JNKElPUykK
KyAgICBVTlVTRURfUEFSQU0oc2NhbGUpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFn
ZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUltYWdlQXRJbmRleChtX2RlY29kZXIsIGlu
ZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoU2tpcE1ldGFkYXRhKSkpOworI2Vsc2UKKyAgICAvLyBT
dWJzYW1wbGluZyBjYW4gYmUgMSwgMiBvciAzLCB3aGljaCBtZWFucyBxdWFydGVyLSwgc2l4dGVl
bnRoLSBhbmQgc2l4dHktZm91cnRoLXNpemUsIHJlc3BlY3RpdmVseS4KKyAgICAvLyBBIHplcm8g
b3IgbmVnYXRpdmUgdmFsdWUgbWVhbnMgbm8gc3Vic2FtcGxpbmcuCisgICAgaW50IHN1YnNhbXBs
aW5nID0gc2NhbGUgPyBzdGF0aWNfY2FzdDxpbnQ+KGxvZzJmKDEuMGYgLyBzdGQ6Om1heCgwLjFm
LCBzdGQ6Om1pbigxLjBmLCAqc2NhbGUpKSkpIDogLTE7CisgICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGltYWdlID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlSW1hZ2VBdEluZGV4KG1fZGVj
b2RlciwgaW5kZXgsIGltYWdlU291cmNlT3B0aW9ucyhTa2lwTWV0YWRhdGEsIHN1YnNhbXBsaW5n
KSkpOworCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzczNzExOTg+IC0gQ29yZUdyYXBoaWNzIGNo
YW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlvdXIgaW4gaU9TIDQuMCB0byBrQ0dJbWFn
ZUNhY2hpbmdUcmFuc2llbnQKKyAgICAvLyB3aGljaCBjYXVzZWQgYSBwZXJmb3JtYW5jZSByZWdy
ZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhhZCB0byBiZSByZXNhbXBsZWQvcmVjcmVh
dGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCisgICAgLy8gQ0dDb250ZXh0RHJhd0ltYWdlLiBXZSBu
b3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1hZ2VzLiBTZWUgYWxzbyA8cmRhcjovL3By
b2JsZW0vMTQzNjY3NTU+IC0KKyAgICAvLyBDb3JlR3JhcGhpY3MgbmVlZHMgdG8gdW4tZGVwcmVj
YXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5jZSBpdCdzIHN0aWxsIG5vdCB0aGUgZGVm
YXVsdC4KKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNo
CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0
aW9ucyIKKyNlbmRpZgorICAgIENHSW1hZ2VTZXRDYWNoaW5nRmxhZ3MoaW1hZ2UuZ2V0KCksIGtD
R0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSk7CisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKyAgICBpZiAoc2NhbGUpIHsKKyAgICAgICAgaWYg
KHN1YnNhbXBsaW5nID4gMCkKKyAgICAgICAgICAgICpzY2FsZSA9IHN0YXRpY19jYXN0PGZsb2F0
PihDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpKSAvIHNpemUoRG9Ob3RSZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbikud2lkdGgoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8aW50PihDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpKSA9PSBzaXplKERv
Tm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pLndpZHRoKCkpOworICAgICAgICAgICAgKnNjYWxl
ID0gMTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogICAgIENG
U3RyaW5nUmVmIGltYWdlVVRJID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9kZWNvZGVyKTsKICAg
ICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgeGJtVVRJID0gQ0ZTVFIoInB1YmxpYy54Yml0bWFw
LWltYWdlIik7CiAgICAgaWYgKCFpbWFnZVVUSSB8fCAhQ0ZFcXVhbChpbWFnZVVUSSwgeGJtVVRJ
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
U291cmNlQ0dNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZVNvdXJjZUNHTWFjLm1tCmluZGV4IDk1M2JjYjlkMjhhZDBlYjc1YWIzODgxM2MzNDM5NDU1ZjEy
NjJjNzYuLmVkZjllNDkwZTZmZmJlNTgwNjJlMDRiODdkNmZmZDZiM2YzNzJiMDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VD
R01hYy5tbQpAQCAtMjksNiArMjksMjEgQEAKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNp
bXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1
ZGUgIlNvZnRMaW5raW5nLmgiCisjaW5jbHVkZSA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNv
cmVTZXJ2aWNlcy5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKE1vYmlsZUNvcmVTZXJ2aWNlcykK
KworU09GVF9MSU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywgVVRUeXBlQ29weVByZWZlcnJlZFRhZ1dp
dGhDbGFzcywgQ0ZTdHJpbmdSZWYsIChDRlN0cmluZ1JlZiBpblVUSSwgQ0ZTdHJpbmdSZWYgaW5U
YWdDbGFzcyksIChpblVUSSwgaW5UYWdDbGFzcykpCisKK1NPRlRfTElOS19DT05TVEFOVChNb2Jp
bGVDb3JlU2VydmljZXMsIGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24sIENGU3RyaW5nUmVm
KQorU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVTZXJ2aWNlcywga1VUVGFnQ2xhc3NNSU1F
VHlwZSwgQ0ZTdHJpbmdSZWYpCisKKyNkZWZpbmUga1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lv
biBnZXRrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9uKCkKKyNkZWZpbmUga1VUVGFnQ2xhc3NN
SU1FVHlwZSBnZXRrVVRUYWdDbGFzc01JTUVUeXBlKCkKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFN0cmluZyBNSU1FVHlwZUZvckltYWdlU291cmNlVHlwZShjb25zdCBTdHJpbmcm
IHV0aSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lu
dFBvaW50Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9p
bnRDRy5jcHAKaW5kZXggNzA4ZmNjMmUxZGZmZGE5Yzk0MzI3NmU1MGFhNDQ4MDBmOWZkMmViOC4u
YmQwNDU3NGM3ZDY5ZjVhZWIyMjdkNzBiNGY4ODViNTU1YjIwMmQ2YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKQEAgLTI4LDcg
KzI4LDExIEBACiAKICNpZiBVU0UoQ0cpCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUg
PEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbnRSZWN0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50
UmVjdENHLmNwcAppbmRleCA4ZDEwMjA3YmY5Zjg3NWFhMmQ3ZjZlNzBhYjNiN2NlYjYzZDk5NWQ0
Li5kMWY3YjJlNTcwODhhOWJkYjRhYjQ0OGM4MDM2NTkxZmUxN2YyMmIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFJlY3RDRy5jcHAKQEAgLTI4LDcg
KzI4LDExIEBACiAKICNpZiBVU0UoQ0cpCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUg
PEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbnRTaXplQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50
U2l6ZUNHLmNwcAppbmRleCA0MWZiMzk5ZTM1NWNhMDEzNjNjMDZmN2I0MTA3YjJkNmY5YmY4NGYy
Li5lNWQwYjgyNGRkNmFjYTVhNmYyMzYwNjBiNGJjNjVkNzMwOWMzYjhlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXplQ0cuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFNpemVDRy5jcHAKQEAgLTI4LDcg
KzI4LDExIEBACiAKICNpZiBVU0UoQ0cpCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUg
PEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDU2ZmRkNTk3NzQ5MTUwMDEwOGY5OWQ0ZjEx
ODBjOGE4N2JkYmE2YjkuLjExM2ZhOTc5NzY0NzRiOTk4NzFiMjY2NjkwODliODM2NjExM2Y3OGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3Vt
ZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuY3BwCkBAIC0yOSw2ICsyOSwxMyBAQAogCiAjaWYgVVNFKENHKQogCisj
aWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dFByaXZhdGUu
aD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0NvbnRleHRHU3RhdGUuaD4KKyNpbXBvcnQgPENv
cmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbXBvcnQgPEltYWdlSU8vSW1hZ2VJTy5oPgor
I2VuZGlmCisKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCmluZGV4IGZlOWY3ODQ0MDUzOGJhYWIyYzU5
MDFmMmUxZWNiOThhYjNjMTRhYzIuLjMzYmQ4OTE3YjcyZGMzYTcwMTY0Nzc0MjhmN2UzZjQxZjJm
MjUwYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1Bh
dGhDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENH
LmNwcApAQCAtMzQsNyArMzQsMTIgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCisjaWYg
IVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9u
U2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHUGF0aFByaXZhdGUu
aD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCmluZGV4IDBjZDUyOWVhYmU5MWE1ODljYjg1YTYz
M2RmNGY3OWFhN2UyMTNhODYuLjBjMDgwNDhjYjJiZjIyYzE3MjI3YzZmMzk4NmY1ZmUyZDA4MzUx
ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRl
cm5DRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVy
bkNHLmNwcApAQCAtMjksNyArMjksMTIgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCisjaWYgIVBMQVRGT1JNKElPUykKICNp
bmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNl
CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9y
bURhdGFDb2NvYS5tbQppbmRleCBhOTE1ZDI3Y2UwODRmODA2ZDVkZTA4NjFkYWFkMWM5ZTY0ZTY3
ZDMxLi43Yjc2MzJhZDQxMDA3Zjk2MjI5NTAyNzRjYzAzZmRiZDNmMGE4ODQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRh
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC0yNSw3ICsyNSwxMyBAQAogI2ltcG9ydCAiRm9udFBs
YXRmb3JtRGF0YS5oIgogCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaWYg
IVBMQVRGT1JNKElPUykKICNpbXBvcnQgPEFwcEtpdC9OU0ZvbnQuaD4KKyNlbHNlCisjaW1wb3J0
IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NHRm9udEluZm8u
aD4KKyNlbmRpZgorCiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMzMsMTQgKzM5LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIFRo
ZXNlIENvcmVUZXh0IFRleHQgU3BhY2luZyBmZWF0dXJlIHNlbGVjdG9ycyBhcmUgbm90IGRlZmlu
ZWQgaW4gQ29yZVRleHQuCiBlbnVtIFRleHRTcGFjaW5nQ1RGZWF0dXJlU2VsZWN0b3IgeyBUZXh0
U3BhY2luZ1Byb3BvcnRpb25hbCwgVGV4dFNwYWNpbmdGdWxsV2lkdGgsIFRleHRTcGFjaW5nSGFs
ZldpZHRoLCBUZXh0U3BhY2luZ1RoaXJkV2lkdGgsIFRleHRTcGFjaW5nUXVhcnRlcldpZHRoIH07
CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9T
KQogdm9pZCBGb250UGxhdGZvcm1EYXRhOjpsb2FkRm9udChOU0ZvbnQqIG5zRm9udCwgZmxvYXQs
IE5TRm9udComIG91dE5TRm9udCwgQ0dGb250UmVmJiBjZ0ZvbnQpCiB7CiAgICAgb3V0TlNGb250
ID0gbnNGb250OwogICAgIGNnRm9udCA9IENURm9udENvcHlHcmFwaGljc0ZvbnQodG9DVEZvbnRS
ZWYobnNGb250KSwgMCk7CiB9Ci0jZW5kaWYgIC8vIFBMQVRGT1JNKE1BQykKKyNlbmRpZiAgLy8g
UExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogCisjaWYgIVBMQVRGT1JNKElPUykKIEZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoTlNGb250ICpuc0ZvbnQsIGZsb2F0IHNp
emUsIGJvb2wgaXNQcmludGVyRm9udCwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3
aWR0aFZhcmlhbnQpCiAgICAgOiBtX3N5bnRoZXRpY0JvbGQoc3ludGhldGljQm9sZCkKICAgICAs
IG1fc3ludGhldGljT2JsaXF1ZShzeW50aGV0aWNPYmxpcXVlKQpAQCAtNDksOSArNTYsMjIgQEAg
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShOU0ZvbnQgKm5zRm9udCwgZmxvYXQg
c2l6ZSwgYm9vbCBpc1ByaW50ZXJGb24KICAgICAsIG1fd2lkdGhWYXJpYW50KHdpZHRoVmFyaWFu
dCkKICAgICAsIG1fZm9udChuc0ZvbnQpCiAgICAgLCBtX2lzQ29sb3JCaXRtYXBGb250KGZhbHNl
KQorI2Vsc2UKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoQ1RGb250UmVmIGN0
Rm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJGb250LCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBGb250
V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCkKKyAgICA6IG1fc3ludGhldGljQm9sZChzeW50aGV0
aWNCb2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKHN5bnRoZXRpY09ibGlxdWUpCisgICAg
LCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQorICAgICwgbV9pc0Vtb2ppKGZhbHNlKQorICAg
ICwgbV9zaXplKHNpemUpCisgICAgLCBtX3dpZHRoVmFyaWFudCh3aWR0aFZhcmlhbnQpCisgICAg
LCBtX2ZvbnQoY3RGb250KQorICAgICwgbV9jZ0ZvbnQoYWRvcHRDRihDVEZvbnRDb3B5R3JhcGhp
Y3NGb250KGN0Rm9udCwgTlVMTCkpKQorICAgICwgbV9pc0NvbG9yQml0bWFwRm9udChDVEZvbnRH
ZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpICYga0NURm9udFRyYWl0Q29sb3JHbHlwaHMpCisjZW5k
aWYgLy8gIVBMQVRGT1JNKElPUykKICAgICAsIG1faXNDb21wb3NpdGVGb250UmVmZXJlbmNlKGZh
bHNlKQogICAgICwgbV9pc1ByaW50ZXJGb250KGlzUHJpbnRlckZvbnQpCiB7CisjaWYgIVBMQVRG
T1JNKElPUykKICAgICBBU1NFUlRfQVJHKG5zRm9udCwgbnNGb250KTsKIAogICAgIENHRm9udFJl
ZiBjZ0ZvbnQgPSAwOwpAQCAtNjgsMTggKzg4LDM1IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEoTlNGb250ICpuc0ZvbnQsIGZsb2F0IHNpemUsIGJvb2wgaXNQcmludGVyRm9u
CiAgICAgICAgIENGUmV0YWluKG1fZm9udCk7CiAKICAgICBtX2NnRm9udCA9IGFkb3B0Q0YoY2dG
b250KTsKKyNlbHNlCisgICAgQVNTRVJUX0FSRyhjdEZvbnQsIGN0Rm9udCk7CisKKyAgICBDRlJl
dGFpbihjdEZvbnQpOworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiB9CiAKLUZvbnRQbGF0Zm9y
bURhdGE6OiB+Rm9udFBsYXRmb3JtRGF0YSgpCitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRm
b3JtRGF0YSgpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAobV9mb250ICYmIG1fZm9u
dCAhPSByZWludGVycHJldF9jYXN0PE5TRm9udCAqPigtMSkpCiAgICAgICAgIENGUmVsZWFzZSht
X2ZvbnQpOworI2Vsc2UKKyAgICBpZiAobV9mb250ICYmIG1fZm9udCAhPSByZWludGVycHJldF9j
YXN0PENURm9udFJlZj4oLTEpKQorICAgICAgICBDRlJlbGVhc2UobV9mb250KTsKKyNlbmRpZgog
fQogCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgZikKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIG1fZm9udCA9IGYubV9m
b250ICYmIGYubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKSA/IGNvbnN0
X2Nhc3Q8TlNGb250ICo+KHN0YXRpY19jYXN0PGNvbnN0IE5TRm9udCAqPihDRlJldGFpbihmLm1f
Zm9udCkpKSA6IGYubV9mb250OworI2Vsc2UKKyAgICBtX2ZvbnQgPSBmLm1fZm9udCAmJiBmLm1f
Zm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpID8gc3RhdGljX2Nhc3Q8Q1RG
b250UmVmPihjb25zdF9jYXN0PHZvaWQgKj4oQ0ZSZXRhaW4oZi5tX2ZvbnQpKSkgOiBmLm1fZm9u
dDsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIG1faXNFbW9qaSA9IGYubV9pc0Vt
b2ppOworI2VuZGlmCiAgICAgbV9jZ0ZvbnQgPSBmLm1fY2dGb250OwogICAgIG1fQ1RGb250ID0g
Zi5tX0NURm9udDsKIH0KQEAgLTg3LDEyICsxMjQsMjQgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRh
OjpwbGF0Zm9ybURhdGFJbml0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGYpCiBjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFBc3NpZ24oY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgZikKIHsKICAgICBtX2NnRm9udCA9IGYubV9jZ0ZvbnQ7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIG1faXNFbW9qaSA9IGYubV9pc0Vtb2ppOworI2VuZGlmCisjaWYg
IVBMQVRGT1JNKElPUykKICAgICBpZiAobV9mb250ID09IGYubV9mb250KQogICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgaWYgKGYubV9mb250ICYmIGYubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nh
c3Q8TlNGb250ICo+KC0xKSkKICAgICAgICAgQ0ZSZXRhaW4oZi5tX2ZvbnQpOwogICAgIGlmICht
X2ZvbnQgJiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKSkKICAgICAg
ICAgQ0ZSZWxlYXNlKG1fZm9udCk7CisjZWxzZQorICAgIGlmIChtX2ZvbnQgJiYgbV9mb250ICE9
IHJlaW50ZXJwcmV0X2Nhc3Q8Q1RGb250UmVmPigtMSkgJiYgZi5tX2ZvbnQgJiYgZi5tX2ZvbnQg
IT0gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSAmJiBDRkVxdWFsKG1fZm9udCwgZi5t
X2ZvbnQpKQorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgaWYgKGYubV9mb250ICYmIGYubV9m
b250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Q1RGb250UmVmPigtMSkpCisgICAgICAgIENGUmV0YWlu
KGYubV9mb250KTsKKyAgICBpZiAobV9mb250ICYmIG1fZm9udCAhPSByZWludGVycHJldF9jYXN0
PENURm9udFJlZj4oLTEpKQorICAgICAgICBDRlJlbGVhc2UobV9mb250KTsKKyNlbmRpZgogICAg
IG1fZm9udCA9IGYubV9mb250OwogICAgIG1fQ1RGb250ID0gZi5tX0NURm9udDsKICAgICByZXR1
cm4gKnRoaXM7CkBAIC0xMDAsMTEgKzE0OSwyOSBAQCBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBG
b250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFBc3NpZ24oY29uc3QgRm9udFBsYXRmb3JtRAog
CiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBvdGhlcikgY29uc3QKIHsKLSAgICBpZiAobV9mb250IHx8IG90aGVyLm1fZm9udCkK
LSAgICAgICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5tX2ZvbnQ7CisgICAgYm9vbCByZXN1bHQg
PSBmYWxzZTsKKyAgICBpZiAobV9mb250IHx8IG90aGVyLm1fZm9udCkgeworI2lmIFBMQVRGT1JN
KElPUykKKyAgICAgICAgcmVzdWx0ID0gbV9mb250ICYmIG1fZm9udCAhPSByZWludGVycHJldF9j
YXN0PENURm9udFJlZj4oLTEpICYmIG90aGVyLm1fZm9udCAmJiBvdGhlci5tX2ZvbnQgIT0gcmVp
bnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSAmJiBDRkVxdWFsKG1fZm9udCwgb3RoZXIubV9m
b250KTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAg
ICAgICBBU1NFUlQobV9pc0Vtb2ppID09IG90aGVyLm1faXNFbW9qaSk7CisjZW5kaWYKKyNlbHNl
CisgICAgICAgIHJlc3VsdCA9IG1fZm9udCA9PSBvdGhlci5tX2ZvbnQ7CisjZW5kaWYgLy8gUExB
VEZPUk0oSU9TKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNpZiBQTEFURk9STShJ
T1MpCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGlmIChtX2NnRm9udCA9PSBvdGhlci5tX2Nn
Rm9udCkKKyAgICAgICAgQVNTRVJUKG1faXNFbW9qaSA9PSBvdGhlci5tX2lzRW1vamkpOworI2Vu
ZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogICAgIHJldHVybiBtX2NnRm9udCA9PSBvdGhl
ci5tX2NnRm9udDsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiB2b2lkIEZvbnRQbGF0Zm9ybURh
dGE6OnNldEZvbnQoTlNGb250ICpmb250KQogewogICAgIEFTU0VSVF9BUkcoZm9udCwgZm9udCk7
CkBAIC0xMzMsMTUgKzIwMCw0MyBAQCB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldEZvbnQoTlNG
b250ICpmb250KQogICAgIH0KICAgICBtX0NURm9udCA9IDA7CiB9CisjZWxzZQordm9pZCBGb250
UGxhdGZvcm1EYXRhOjpzZXRGb250KENURm9udFJlZiBmb250KQoreworICAgIEFTU0VSVF9BUkco
Zm9udCwgZm9udCk7CisgICAgQVNTRVJUKG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9u
dFJlZj4oLTEpKTsKIAorICAgIGlmIChtX2ZvbnQgPT0gZm9udCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQ0ZSZXRhaW4oZm9udCk7CisgICAgaWYgKG1fZm9udCkKKyAgICAgICAgQ0ZSZWxlYXNl
KG1fZm9udCk7CisgICAgbV9mb250ID0gZm9udDsKKyAgICBtX3NpemUgPSBDVEZvbnRHZXRTaXpl
KGZvbnQpOworICAgIG1fY2dGb250ID0gYWRvcHRDRihDVEZvbnRDb3B5R3JhcGhpY3NGb250KGZv
bnQsIG51bGxwdHIpKTsKKyAgICBtX2lzQ29sb3JCaXRtYXBGb250ID0gQ1RGb250R2V0U3ltYm9s
aWNUcmFpdHMoZm9udCkgJiBrQ1RGb250VHJhaXRDb2xvckdseXBoczsKK30KKyNlbmRpZgorCisj
aWYgIVBMQVRGT1JNKElPUykKIGJvb2wgRm9udFBsYXRmb3JtRGF0YTo6cm91bmRzR2x5cGhBZHZh
bmNlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX2ZvbnQgcmVuZGVyaW5nTW9kZV0gPT0gTlNG
b250QW50aWFsaWFzZWRJbnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5nTW9kZTsKIH0KKyNlbmRp
ZgogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OmFsbG93c0xpZ2F0dXJlcygpIGNvbnN0CiB7Cisj
aWYgIVBMQVRGT1JNKElPUykKICAgICByZXR1cm4gIVtbbV9mb250IGNvdmVyZWRDaGFyYWN0ZXJT
ZXRdIGNoYXJhY3RlcklzTWVtYmVyOidhJ107CisjZWxzZQorICAgIGlmICghbV9mb250KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0ZDaGFyYWN0ZXJTZXRSZWY+IGNo
YXJhY3RlclNldCA9IGFkb3B0Q0YoQ1RGb250Q29weUNoYXJhY3RlclNldChjdEZvbnQoKSkpOwor
ICAgIHJldHVybiAhKGNoYXJhY3RlclNldC5nZXQoKSAmJiBDRkNoYXJhY3RlclNldElzQ2hhcmFj
dGVyTWVtYmVyKGNoYXJhY3RlclNldC5nZXQoKSwgJ2EnKSk7CisjZW5kaWYKIH0KIAogaW5saW5l
IGludCBtYXBGb250V2lkdGhWYXJpYW50VG9DVEZlYXR1cmVTZWxlY3RvcihGb250V2lkdGhWYXJp
YW50IHZhcmlhbnQpCkBAIC0yMTcsNiArMzEyLDcgQEAgQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURh
dGE6OmN0Rm9udCgpIGNvbnN0CiAgICAgaWYgKG1fQ1RGb250KQogICAgICAgICByZXR1cm4gbV9D
VEZvbnQuZ2V0KCk7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIG1fQ1RGb250ID0gdG9DVEZv
bnRSZWYobV9mb250KTsKICAgICBpZiAobV9DVEZvbnQpIHsKICAgICAgICAgQ1RGb250RGVzY3Jp
cHRvclJlZiBmb250RGVzY3JpcHRvcjsKQEAgLTIyOSw2ICszMjUsMTcgQEAgQ1RGb250UmVmIEZv
bnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0CiAgICAgICAgIG1fQ1RGb250ID0gYWRvcHRD
RihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMobV9DVEZvbnQuZ2V0KCksIG1fc2l6ZSwg
MCwgZm9udERlc2NyaXB0b3IpKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9DVEZvbnQgPSBhZG9w
dENGKENURm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQobV9jZ0ZvbnQuZ2V0KCksIG1fc2l6ZSwg
MCwgY2FzY2FkZVRvTGFzdFJlc29ydEZvbnREZXNjcmlwdG9yKCkpKTsKKyNlbHNlCisgICAgLy8g
QXBwbGUgQ29sb3IgRW1vamkgc2l6ZSBpcyBhZGp1c3RlZCAoYW5kIHRoZW4gcmUtYWRqdXN0ZWQg
YnkgQ29yZSBUZXh0KSBhbmQgY2FwcGVkLgorICAgIENHRmxvYXQgc2l6ZSA9ICFtX2lzRW1vamkg
PyBtX3NpemUgOiBtX3NpemUgPD0gMTUgPyA0ICogKG1fc2l6ZSArIDIpIC8gc3RhdGljX2Nhc3Q8
Q0dGbG9hdD4oNSkgOiAxNjsKKyAgICBDVEZvbnREZXNjcmlwdG9yUmVmIGZvbnREZXNjcmlwdG9y
OworICAgIGNvbnN0IGNoYXIqIHBvc3RTY3JpcHROYW1lID0gQ0dGb250R2V0UG9zdFNjcmlwdE5h
bWUobV9jZ0ZvbnQuZ2V0KCkpOworICAgIGlmIChwb3N0U2NyaXB0TmFtZSAmJiAoIXN0cmNtcChw
b3N0U2NyaXB0TmFtZSwgIkhvZWZsZXJUZXh0LUl0YWxpYyIpIHx8ICFzdHJjbXAocG9zdFNjcmlw
dE5hbWUsICJIb2VmbGVyVGV4dC1CbGFja0l0YWxpYyIpKSkKKyAgICAgICAgZm9udERlc2NyaXB0
b3IgPSBjYXNjYWRlVG9MYXN0UmVzb3J0QW5kRGlzYWJsZVN3YXNoZXNGb250RGVzY3JpcHRvcigp
OworICAgIGVsc2UKKyAgICAgICAgZm9udERlc2NyaXB0b3IgPSBjYXNjYWRlVG9MYXN0UmVzb3J0
Rm9udERlc2NyaXB0b3IoKTsKKyAgICBtX0NURm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0
aEdyYXBoaWNzRm9udChtX2NnRm9udC5nZXQoKSwgc2l6ZSwgMCwgZm9udERlc2NyaXB0b3IpKTsK
KyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAgICAgaWYgKG1fd2lkdGhWYXJpYW50ICE9IFJl
Z3VsYXJXaWR0aCkgewogICAgICAgICBpbnQgZmVhdHVyZVR5cGVWYWx1ZSA9IGtUZXh0U3BhY2lu
Z1R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
RGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ODA0M2Nh
YWVjYzgwNTViNDhiYzAyZmUwMzVjYmY2OWYyMTlhZWMwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcklP
Uy5tbQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKKworI2luY2x1ZGUgIkRpc3Bs
YXlSZWZyZXNoTW9uaXRvci5oIgorCisjaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+
CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KKworI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgorCitAaW50ZXJmYWNlIFdlYkRpc3BsYXlM
aW5rSGFuZGxlciA6IE5TT2JqZWN0Cit7CisgICAgV2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25p
dG9yKiBtX21vbml0b3I7CisgICAgQ0FEaXNwbGF5TGluayogbV9kaXNwbGF5TGluazsKK30KKwor
LSAoaWQpaW5pdFdpdGhNb25pdG9yOihXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3IqKW1v
bml0b3I7CistICh2b2lkKWhhbmRsZURpc3BsYXlMaW5rOihDQURpc3BsYXlMaW5rICopc2VuZGVy
OworLSAodm9pZClpbnZhbGlkYXRlOworCitAZW5kCisKK3N0YXRpYyBkb3VibGUgbWVkaWFUaW1l
VG9DdXJyZW50VGltZShDRlRpbWVJbnRlcnZhbCB0KQoreworICAgIHJldHVybiBtb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWUoKSArIHQgLSBDQUN1cnJlbnRNZWRpYVRpbWUoKTsKK30KKworQGlt
cGxlbWVudGF0aW9uIFdlYkRpc3BsYXlMaW5rSGFuZGxlcgorCistIChpZClpbml0V2l0aE1vbml0
b3I6KFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvciopbW9uaXRvcgoreworICAgIGlmIChz
ZWxmID0gW3N1cGVyIGluaXRdKSB7CisgICAgICAgIG1fbW9uaXRvciA9IG1vbml0b3I7CisgICAg
ICAgIC8vIE5vdGUgdGhhdCBDQURpc3BsYXlMaW5rIHJldGFpbnMgaXRzIHRhcmdldCAoc2VsZiks
IHNvIGEgY2FsbCB0byAtaW52YWxpZGF0ZSBpcyBuZWVkZWQgb24gdGVhcmRvd24uCisgICAgICAg
IG1fZGlzcGxheUxpbmsgPSBbQ0FEaXNwbGF5TGluayBkaXNwbGF5TGlua1dpdGhUYXJnZXQ6c2Vs
ZiBzZWxlY3RvcjpAc2VsZWN0b3IoaGFuZGxlRGlzcGxheUxpbms6KV07CisgICAgICAgIFttX2Rp
c3BsYXlMaW5rIGFkZFRvUnVuTG9vcDpXZWJUaHJlYWROU1J1bkxvb3AoKSBmb3JNb2RlOk5TRGVm
YXVsdFJ1bkxvb3BNb2RlXTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
ZGVhbGxvYworeworICAgIEFTU0VSVCghbV9kaXNwbGF5TGluayk7IC8vIC1pbnZhbGlkYXRlIHNo
b3VsZCBoYXZlIGJlZW4gY2FsbGVkIGFscmVhZHkuCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQor
CistICh2b2lkKWhhbmRsZURpc3BsYXlMaW5rOihDQURpc3BsYXlMaW5rICopc2VuZGVyCit7Cisg
ICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsKKyAgICBtX21vbml0b3ItPmRpc3BsYXlM
aW5rRmlyZWQoc2VuZGVyLnRpbWVzdGFtcCk7Cit9CisKKy0gKHZvaWQpaW52YWxpZGF0ZQorewor
ICAgIFttX2Rpc3BsYXlMaW5rIGludmFsaWRhdGVdOworICAgIG1fZGlzcGxheUxpbmsgPSBudWxs
cHRyOworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAKK0Rpc3BsYXlSZWZyZXNo
TW9uaXRvcjo6fkRpc3BsYXlSZWZyZXNoTW9uaXRvcigpCit7CisgICAgWyhXZWJEaXNwbGF5TGlu
a0hhbmRsZXIqKSBtX2Rpc3BsYXlMaW5rIGludmFsaWRhdGVdOworICAgIFsoV2ViRGlzcGxheUxp
bmtIYW5kbGVyKikgbV9kaXNwbGF5TGluayByZWxlYXNlXTsKK30KKworYm9vbCBEaXNwbGF5UmVm
cmVzaE1vbml0b3I6OnJlcXVlc3RSZWZyZXNoQ2FsbGJhY2soKQoreworICAgIGlmICghbV9hY3Rp
dmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgaWYgKCFtX2Rpc3BsYXlM
aW5rKSB7CisgICAgICAgIG1fZGlzcGxheUxpbmsgPSBbW1dlYkRpc3BsYXlMaW5rSGFuZGxlciBh
bGxvY10gaW5pdFdpdGhNb25pdG9yOnRoaXNdOworICAgICAgICBtX2FjdGl2ZSA9IHRydWU7Cisg
ICAgfQorCisgICAgbV9zY2hlZHVsZWQgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRvcjo6ZGlzcGxheUxpbmtGaXJlZChkb3VibGUgbm93U2Vj
b25kcykKK3sKKyAgICBpZiAoIW1fcHJldmlvdXNGcmFtZURvbmUpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fcHJldmlvdXNGcmFtZURvbmUgPSBmYWxzZTsKKyAgICBtX21vbm90b25pY0FuaW1h
dGlvblN0YXJ0VGltZSA9IG1lZGlhVGltZVRvQ3VycmVudFRpbWUobm93U2Vjb25kcyk7CisKKyAg
ICBoYW5kbGVEaXNwbGF5UmVmcmVzaGVkTm90aWZpY2F0aW9uT25NYWluVGhyZWFkKHRoaXMpOwor
fQorCit9CisKKyNlbmRpZiAvLyBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9N
T05JVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9z
L0ZvbnRDYWNoZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9G
b250Q2FjaGVJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVjMmY1YjVhZmMyZDNhM2ZlZjkwM2RmNTY5NTkw
NmE0NzAwZWRiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KQEAgLTAsMCArMSw2NjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRm9udENhY2hlLmgiCisKKyNp
bXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIlJlbmRlclRoZW1lSU9TLmgiCisjaW1wb3J0IDxDb3Jl
R3JhcGhpY3MvQ0dGb250VW5pY29kZVN1cHBvcnQuaD4KKyNpbXBvcnQgPENvcmVUZXh0L0NURm9u
dERlc2NyaXB0b3JQcml2Lmg+CisjaW1wb3J0IDxDb3JlVGV4dC9DVEZvbnRQcml2Lmg+CisjaW1w
b3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNp
bXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lk
IEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICB3a1NldFVwRm9udENhY2hlKCk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZvbnRXZWlnaHRCb2xkKE5TSW50ZWdlciBmb250V2Vp
Z2h0KQoreworICAgIHJldHVybiBmb250V2VpZ2h0ID49IEZvbnRXZWlnaHQ2MDA7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCByZXF1aXJlc0N1c3RvbUZhbGxiYWNrRm9udChjb25zdCBVSW50MzIg
Y2hhcmFjdGVyKQoreworICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gQXBwbGVMb2dvIHx8IGNoYXJh
Y3RlciA9PSBibGFja0NpcmNsZTsKK30KKworc3RhdGljIENGQ2hhcmFjdGVyU2V0UmVmIGNvcHlG
b250Q2hhcmFjdGVyU2V0KENGU3RyaW5nUmVmIGZvbnROYW1lKQoreworICAgIC8vIFRoZSBzaXpl
LCAxMCwgaXMgYXJiaXRyYXJ5LgorICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBm
b250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhOYW1lQW5k
U2l6ZShmb250TmFtZSwgMTApKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250ID0gYWRv
cHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCks
IDEwLCBudWxscHRyKSk7CisgICAgcmV0dXJuIChDRkNoYXJhY3RlclNldFJlZilDVEZvbnREZXNj
cmlwdG9yQ29weUF0dHJpYnV0ZShmb250RGVzY3JpcHRvci5nZXQoKSwga0NURm9udENoYXJhY3Rl
clNldEF0dHJpYnV0ZSk7Cit9CisKK3N0YXRpYyBDRkNoYXJhY3RlclNldFJlZiBhcHBsZUNvbG9y
RW1vamlDaGFyYWN0ZXJTZXQoKQoreworICAgIHN0YXRpYyBDRkNoYXJhY3RlclNldFJlZiBjaGFy
YWN0ZXJTZXQgPSBjb3B5Rm9udENoYXJhY3RlclNldChDRlNUUigiQXBwbGVDb2xvckVtb2ppIikp
OworICAgIHJldHVybiBjaGFyYWN0ZXJTZXQ7Cit9CisKK3N0YXRpYyBDRkNoYXJhY3RlclNldFJl
ZiBwaG9uZUZhbGxiYWNrQ2hhcmFjdGVyU2V0KCkKK3sKKyAgICBzdGF0aWMgQ0ZDaGFyYWN0ZXJT
ZXRSZWYgY2hhcmFjdGVyU2V0ID0gY29weUZvbnRDaGFyYWN0ZXJTZXQoQ0ZTVFIoIi5QaG9uZUZh
bGxiYWNrIikpOworICAgIHJldHVybiBjaGFyYWN0ZXJTZXQ7Cit9CisKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVy
cyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0
YSogb3JpZ2luYWxGb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgp
Cit7CisgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gb3JpZ2luYWxG
b250RGF0YS0+cGxhdGZvcm1EYXRhKCk7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9IHBsYXRmb3Jt
RGF0YS5mb250KCk7CisKKyAgICBDRkluZGV4IGNvdmVyZWRMZW5ndGggPSAwOworICAgIFJldGFp
blB0cjxDVEZvbnRSZWY+IHN1YnN0aXR1dGVGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVQaHlz
aWNhbEZvbnRGb3JDaGFyYWN0ZXJzV2l0aExhbmd1YWdlKGN0Rm9udCwgKGNvbnN0IFVURjE2Q2hh
ciopY2hhcmFjdGVycywgKENGSW5kZXgpbGVuZ3RoLCAwLCAmY292ZXJlZExlbmd0aCkpOworICAg
IGlmICghc3Vic3RpdHV0ZUZvbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ1RGb250U3lt
Ym9saWNUcmFpdHMgb3JpZ2luYWxUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZv
bnQpOworICAgIENURm9udFN5bWJvbGljVHJhaXRzIGFjdHVhbFRyYWl0cyA9IDA7CisgICAgaWYg
KGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpIHx8IGRlc2NyaXB0aW9uLml0
YWxpYygpKQorICAgICAgICBhY3R1YWxUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhz
dWJzdGl0dXRlRm9udC5nZXQoKSk7CisKKyAgICBib29sIHN5bnRoZXRpY0JvbGQgPSAob3JpZ2lu
YWxUcmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKSAmJiAhKGFjdHVhbFRyYWl0cyAmIGtDVEZvbnRU
cmFpdEJvbGQpOworICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9IChvcmlnaW5hbFRyYWl0cyAm
IGtDVEZvbnRUcmFpdEl0YWxpYykgJiYgIShhY3R1YWxUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFs
aWMpOworCisgICAgRm9udFBsYXRmb3JtRGF0YSBhbHRlcm5hdGVGb250KHN1YnN0aXR1dGVGb250
LmdldCgpLCBwbGF0Zm9ybURhdGEuc2l6ZSgpLCBwbGF0Zm9ybURhdGEuaXNQcmludGVyRm9udCgp
LCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBwbGF0Zm9ybURhdGEubV9vcmllbnRh
dGlvbik7CisgICAgYWx0ZXJuYXRlRm9udC5tX2lzRW1vamkgPSBDVEZvbnRJc0FwcGxlQ29sb3JF
bW9qaShzdWJzdGl0dXRlRm9udC5nZXQoKSk7CisKKyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERh
dGEoJmFsdGVybmF0ZUZvbnQsIERvTm90UmV0YWluKTsKK30KKworUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFs
Rm9udERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorewor
ICAgIHN0YXRpYyBib29sIGlzR0IxODAzMENvbXBsaWFuY2VSZXF1aXJlZCA9IHdrSXNHQjE4MDMw
Q29tcGxpYW5jZVJlcXVpcmVkKCk7CisKKyAgICAvLyBVbmxpa2UgT1MgWCwgb3VyIGZhbGxiYWNr
IGZvbnQgb24gaVBob25lIGlzIEFyaWFsIFVuaWNvZGUsIHdoaWNoIGRvZXNuJ3QgaGF2ZSBzb21l
IGFwcGxlLXNwZWNpZmljIGdseXBocyBsaWtlIEY4RkYuCisgICAgLy8gRmFsbCBiYWNrIHRvIHRo
ZSBBcHBsZSBGYWxsYmFjayBmb250IGluIHRoaXMgY2FzZS4KKyAgICBpZiAobGVuZ3RoID4gMCAm
JiByZXF1aXJlc0N1c3RvbUZhbGxiYWNrRm9udCgqY2hhcmFjdGVycykpCisgICAgICAgIHJldHVy
biBnZXRDYWNoZWRGb250RGF0YShnZXRDdXN0b21GYWxsYmFja0ZvbnQoKmNoYXJhY3RlcnMsIGRl
c2NyaXB0aW9uKSwgRG9Ob3RSZXRhaW4pOworCisgICAgVUNoYXIzMiBjID0gKmNoYXJhY3RlcnM7
CisgICAgaWYgKGxlbmd0aCA+IDEgJiYgVTE2X0lTX0xFQUQoYykgJiYgVTE2X0lTX1RSQUlMKGNo
YXJhY3RlcnNbMV0pKQorICAgICAgICBjID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGMsIGNoYXJh
Y3RlcnNbMV0pOworCisgICAgLy8gRm9yIHN5c3RlbSBmb250cyB3ZSB1c2UgQ29yZVRleHQgZmFs
bGJhY2sgbWVjaGFuaXNtLgorICAgIGlmIChsZW5ndGgpIHsKKyAgICAgICAgUmV0YWluUHRyPENU
Rm9udERlc2NyaXB0b3JSZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9u
dERlc2NyaXB0b3Iob3JpZ2luYWxGb250RGF0YS0+Z2V0Q1RGb250KCkpKTsKKyAgICAgICAgaWYg
KENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9udChmb250RGVzY3JpcHRvci5nZXQoKSkpCisg
ICAgICAgICAgICByZXR1cm4gZ2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNj
cmlwdGlvbiwgb3JpZ2luYWxGb250RGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICB9CisK
KyAgICBib29sIHVzZUNKRm9udCA9IGZhbHNlOworICAgIGJvb2wgdXNlS29yZWFuRm9udCA9IGZh
bHNlOworICAgIGJvb2wgdXNlQ3lyaWxsaWNGb250ID0gZmFsc2U7CisgICAgYm9vbCB1c2VBcmFi
aWNGb250ID0gZmFsc2U7CisgICAgYm9vbCB1c2VIZWJyZXdGb250ID0gZmFsc2U7CisgICAgYm9v
bCB1c2VJbmRpY0ZvbnQgPSBmYWxzZTsKKyAgICBib29sIHVzZVRoYWlGb250ID0gZmFsc2U7Cisg
ICAgYm9vbCB1c2VUaWJldGFuRm9udCA9IGZhbHNlOworICAgIGJvb2wgdXNlQ2FuYWRpYW5BYm9y
aWdpbmFsU3lsbGFiaWNzRm9udCA9IGZhbHNlOworICAgIGJvb2wgdXNlRW1vamlGb250ID0gZmFs
c2U7CisgICAgaWYgKGxlbmd0aCA+IDApIHsKKyAgICAgICAgZG8geworICAgICAgICAgICAgLy8g
VGhpcyBpc24ndCBhIGxvb3AgYnV0IGEgd2F5IHRvIGVmZmljaWVudGx5IGNoZWNrIGZvciByYW5n
ZXMgb2YgY2hhcmFjdGVycy4KKworICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyByYW5nZXMg
YXJlIEtvcmVhbiBIYW5ndWwgYW5kIHNob3VsZCBiZSByZW5kZXJlZCBieSBBcHBsZVNER290aGlj
TmVvCisgICAgICAgICAgICAvLyBVKzExMDAgLSBVKzExRkYKKyAgICAgICAgICAgIC8vIFUrMzEz
MCAtIFUrMzE4RgorICAgICAgICAgICAgLy8gVStBQzAwIC0gVStEN0EzCisKKyAgICAgICAgICAg
IC8vIFRoZXNlIGFyZSBDeXJpbGxpYyBhbmQgc2hvdWxkIGJlIHJlbmRlcmVkIGJ5IEhlbHZldGlj
YSBOZXVlCisgICAgICAgICAgICAvLyBVKzA0MDAgLSBVKzA1MkYKKworICAgICAgICAgICAgaWYg
KGMgPCAweDQwMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDw9
IDB4NTJGKSB7CisgICAgICAgICAgICAgICAgdXNlQ3lyaWxsaWNGb250ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDwgMHg1
OTApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoYyA8IDB4NjAwKSB7
CisgICAgICAgICAgICAgICAgdXNlSGVicmV3Rm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA8PSAweDZGRikgeworICAg
ICAgICAgICAgICAgIHVzZUFyYWJpY0ZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPCAweDkwMCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDwgMHhFMDApIHsKKyAgICAgICAgICAgICAg
ICB1c2VJbmRpY0ZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGMgPD0gMHhFN0YpIHsKKyAgICAgICAgICAgICAgICB1c2VU
aGFpRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoYyA8IDB4MEYwMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGlmIChjIDw9IDB4MEZGRikgeworICAgICAgICAgICAgICAgIHVzZVRpYmV0YW5Gb250
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChjIDwgMHgxMTAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
aWYgKGMgPD0gMHgxMUZGKSB7CisgICAgICAgICAgICAgICAgdXNlS29yZWFuRm9udCA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
YyA+IDB4MTQwMCAmJiBjIDwgMHgxNzgwKSB7CisgICAgICAgICAgICAgICAgdXNlQ2FuYWRpYW5B
Ym9yaWdpbmFsU3lsbGFiaWNzRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA8IDB4MkU4MCkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDwgMHgzMTMwKSB7CisgICAgICAgICAgICAgICAg
dXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChjIDw9IDB4MzE4RikgeworICAgICAgICAgICAgICAgIHVzZUtvcmVh
bkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGMgPCAweEFDMDApIHsKKyAgICAgICAgICAgICAgICB1c2VDSkZvbnQgPSB0
cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGMgPD0gMHhEN0EzKSB7CisgICAgICAgICAgICAgICAgdXNlS29yZWFuRm9udCA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
IGMgPD0gMHhERkZGKSB7CisgICAgICAgICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggYyA8IDB4
RTAwMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICggYyA8IDB4RTYw
MCkgeworICAgICAgICAgICAgICAgIGlmIChpc0dCMTgwMzBDb21wbGlhbmNlUmVxdWlyZWQpCisg
ICAgICAgICAgICAgICAgICAgIHVzZUNKRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICB1c2VFbW9qaUZvbnQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBjIDw9IDB4RTg2NCAm
JiBpc0dCMTgwMzBDb21wbGlhbmNlUmVxdWlyZWQpIHsKKyAgICAgICAgICAgICAgICB1c2VDSkZv
bnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGMgPD0gMHhGOEZGKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKGMgPCAweEZCMDApIHsKKyAgICAgICAgICAgICAgICB1c2VDSkZvbnQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMg
PCAweEZCNTApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoYyA8PSAw
eEZERkYpIHsKKyAgICAgICAgICAgICAgICB1c2VBcmFiaWNGb250ID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDwgMHhGRTIw
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGMgPCAweEZFNzApIHsK
KyAgICAgICAgICAgICAgICB1c2VDSkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPCAweEZGMDApIHsKKyAgICAgICAg
ICAgICAgICB1c2VBcmFiaWNGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDwgMHhGRkYwKSB7CisgICAgICAgICAgICAg
ICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChjID49MHgyMDAwMCAmJiBjIDw9IDB4MkZGRkYpCisgICAgICAg
ICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgfSB3aGlsZSAoMCk7CisgICAgfQor
CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YTsKKworICAgIGlmICh1
c2VDSkZvbnQpIHsKKyAgICAgICAgLy8gQnkgZGVmYXVsdCwgQ2hpbmVzZSBmb250IGlzIHByZWZl
cnJlZCwgZmFsbCBiYWNrIG9uIEphcGFuZXNlLgorCisgICAgICAgIGVudW0gQ0pLRm9udFZhcmlh
bnQgeworICAgICAgICAgICAga0NKS0ZvbnRVc2VIaXJhZ2lubyA9IDAsCisgICAgICAgICAgICBr
Q0pLRm9udFVzZVNUSGVpdGlTQywKKyAgICAgICAgICAgIGtDSktGb250VXNlU1RIZWl0aVRDLAor
ICAgICAgICAgICAga0NKS0ZvbnRVc2VTVEhlaXRpSiwKKyAgICAgICAgICAgIGtDSktGb250VXNl
U1RIZWl0aUssCisgICAgICAgICAgICBrQ0pLRm9udHNVc2VIS0dQVzNVSQorICAgICAgICB9Owor
CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHBsYWluSGlyYWdp
bm8oIkhpcmFLYWt1UHJvTi1XMyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBwbGFpblNUSGVp
dGlTQygiU1RIZWl0aVNDLUxpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHBsYWluU1RI
ZWl0aVRDKCJTVEhlaXRpVEMtTGlnaHQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gcGxhaW5T
VEhlaXRpSigiU1RIZWl0aUotTGlnaHQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gcGxhaW5T
VEhlaXRpSygiU1RIZWl0aUstTGlnaHQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gcGxhaW5I
S0dQVzNVSSgiSEtHUFczVUkiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
KyAgICAgICAgc3RhdGljIEF0b21pY1N0cmluZyogY2prUGxhaW5bXSA9IHsgICAgIAorICAgICAg
ICAgICAgJnBsYWluSGlyYWdpbm8uZ2V0KCksCisgICAgICAgICAgICAmcGxhaW5TVEhlaXRpU0Mu
Z2V0KCksCisgICAgICAgICAgICAmcGxhaW5TVEhlaXRpVEMuZ2V0KCksCisgICAgICAgICAgICAm
cGxhaW5TVEhlaXRpSi5nZXQoKSwKKyAgICAgICAgICAgICZwbGFpblNUSGVpdGlLLmdldCgpLAor
ICAgICAgICAgICAgJnBsYWluSEtHUFczVUkuZ2V0KCksCisgICAgICAgIH07CisKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gYm9sZEhpcmFnaW5vKCJIaXJhS2Fr
dVByb04tVzYiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gYm9sZFNUSGVpdGlTQygiU1RIZWl0
aVNDLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBib2xkU1RIZWl0aVRDKCJTVEhl
aXRpVEMtTWVkaXVtIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGJvbGRTVEhlaXRpSigiU1RI
ZWl0aUotTWVkaXVtIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGJvbGRTVEhlaXRpSygiU1RI
ZWl0aUstTWVkaXVtIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGJvbGRIS0dQVzNVSSgiSEtH
UFczVUkiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3Rh
dGljIEF0b21pY1N0cmluZyogY2prQm9sZFtdID0geyAgCisgICAgICAgICAgICAmYm9sZEhpcmFn
aW5vLmdldCgpLAorICAgICAgICAgICAgJmJvbGRTVEhlaXRpU0MuZ2V0KCksCisgICAgICAgICAg
ICAmYm9sZFNUSGVpdGlUQy5nZXQoKSwKKyAgICAgICAgICAgICZib2xkU1RIZWl0aUouZ2V0KCks
CisgICAgICAgICAgICAmYm9sZFNUSGVpdGlLLmdldCgpLAorICAgICAgICAgICAgJmJvbGRIS0dQ
VzNVSS5nZXQoKSwKKyAgICAgICAgfTsKKworICAgICAgICAvLyBEZWZhdWx0IGJlbG93IGlzIGZv
ciBTaW1wbGlmaWVkIENoaW5lc2UgdXNlcjogemgtSGFucyAtIG5vdGUgdGhhdCBIaXJhZ2lubyBp
cyB0aGUKKyAgICAgICAgLy8gdGhlIHNlY29uZGFyeSBmb250IGFzIHdlIHdhbnQgaXRzIGZvciBI
aXJhZ2FuYSBhbmQgS2F0YWthbmEuIFRoZSBvdGhlciBDSksgZm9udHMKKyAgICAgICAgLy8gZG8g
bm90LCBhbmQgc2hvdWxkIG5vdCwgY29udGFpbiBIaXJhZ2FuYSBvciBLYXRha2FuYSBnbHlwaHMu
CisgICAgICAgIHN0YXRpYyBDSktGb250VmFyaWFudCBwcmVmZXJyZWRDSktGb250ID0ga0NKS0Zv
bnRVc2VTVEhlaXRpU0M7CisgICAgICAgIHN0YXRpYyBDSktGb250VmFyaWFudCBzZWNvbmRhcnlD
SktGb250ID0ga0NKS0ZvbnRzVXNlSEtHUFczVUk7CisKKyAgICAgICAgc3RhdGljIGJvb2wgQ0pL
Rm9udEluaXRpYWxpemVkOworICAgICAgICBpZiAoIUNKS0ZvbnRJbml0aWFsaXplZCkgeworICAg
ICAgICAgICAgQ0pLRm9udEluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFRlc3Rp
bmc6IGxhbmd1YWdlTmFtZSA9IChDRlN0cmluZ1JlZilAImphIjsKKyAgICAgICAgICAgIE5TVXNl
ckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0
c107CisgICAgICAgICAgICBOU0FycmF5ICpsYW5ndWFnZXMgPSBbZGVmYXVsdHMgc3RyaW5nQXJy
YXlGb3JLZXk6QCJBcHBsZUxhbmd1YWdlcyJdOworCisgICAgICAgICAgICBpZiAobGFuZ3VhZ2Vz
KSB7CisgICAgICAgICAgICAgICAgZm9yIChOU1N0cmluZyAqbGFuZ3VhZ2UgaW4gbGFuZ3VhZ2Vz
KSB7CisgICAgICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbGFuZ3VhZ2VO
YW1lID0gYWRvcHRDRihDRkxvY2FsZUNyZWF0ZUNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllckZy
b21TdHJpbmcobnVsbHB0ciwgKENGU3RyaW5nUmVmKWxhbmd1YWdlKSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChDRkVxdWFsKGxhbmd1YWdlTmFtZS5nZXQoKSwgQ0ZTVFIoInpoLUhhbnMiKSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gU2ltcGxpZmllZCBDaGluZXNlIC0g
ZGVmYXVsdCBzZXR0aW5ncworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChDRkVxdWFsKGxh
bmd1YWdlTmFtZS5nZXQoKSwgQ0ZTVFIoImphIikpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwcmVmZXJyZWRDSktGb250ID0ga0NKS0ZvbnRVc2VIaXJhZ2lubzsgLy8gSmFwYW5lc2UgLSBw
cmVmZXIgSGlyYWdpbm8gYW5kIFNUSGVpdGkgSmFwYW5zZSBWYXJpYW50CisgICAgICAgICAgICAg
ICAgICAgICAgICBzZWNvbmRhcnlDSktGb250ID0ga0NKS0ZvbnRVc2VTVEhlaXRpSjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KENGRXF1YWwobGFuZ3VhZ2VOYW1lLmdldCgpLCBDRlNUUigia28iKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHByZWZlcnJlZENKS0ZvbnQgPSBrQ0pLRm9udFVzZVNUSGVpdGlLOyAvLyBL
b3JlYW4gLSBwcmVmZXIgU1RIZWl0aSBLb3JlYW4gVmFyaWFudCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKENGRXF1YWwobGFu
Z3VhZ2VOYW1lLmdldCgpLCBDRlNUUigiemgtSGFudCIpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcHJlZmVycmVkQ0pLRm9udCA9IGtDSktGb250VXNlU1RIZWl0aVRDOyAvLyBUcmFkaXRp
b25hbCBDaGluZXNlIC0gcHJlZmVyIFNUSGVpdGkgVHJhZGl0aW9uYWwgVmFyaWFudAorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzaW1wbGVGb250
RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRl
c2NyaXB0aW9uLndlaWdodCgpKSA/ICpjamtCb2xkW3ByZWZlcnJlZENKS0ZvbnRdIDogKmNqa1Bs
YWluW3ByZWZlcnJlZENKS0ZvbnRdLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICBib29s
IHVzZVNlY29uZGFyeUZvbnQgPSB0cnVlOworICAgICAgICBpZiAoc2ltcGxlRm9udERhdGEpIHsK
KyAgICAgICAgICAgIENHR2x5cGggZ2x5cGhzWzJdOworICAgICAgICAgICAgLy8gQ0dGb250R2V0
R2x5cGhzRm9yVW5pY2hhcnMgdGFrZXMgVVRGLTE2IGJ1ZmZlci4gU2hvdWxkIG9ubHkgYmUgMSBj
b2RlcG9pbnQgYnV0IHNpbmNlIHdlIG1heSBwYXNzIGluIHR3byBVVEYtMTYgY2hhcmFjdGVycywK
KyAgICAgICAgICAgIC8vIG1ha2Ugcm9vbSBmb3IgMiBnbHlwaHMganVzdCB0byBiZSBzYWZlLgor
ICAgICAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoc2ltcGxlRm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpLmNnRm9udCgpLCBjaGFyYWN0ZXJzLCBnbHlwaHMsIGxlbmd0aCk7CisKKyAg
ICAgICAgICAgIHVzZVNlY29uZGFyeUZvbnQgPSAoZ2x5cGhzWzBdID09IDApOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHVzZVNlY29uZGFyeUZvbnQpCisgICAgICAgICAgICBzaW1wbGVGb250
RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRl
c2NyaXB0aW9uLndlaWdodCgpKSA/ICpjamtCb2xkW3NlY29uZGFyeUNKS0ZvbnRdIDogKmNqa1Bs
YWluW3NlY29uZGFyeUNKS0ZvbnRdLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSBp
ZiAodXNlS29yZWFuRm9udCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBrb3JlYW5QbGFpbigiQXBwbGVTREdvdGhpY05lby1NZWRpdW0iLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4ga29yZWFuQm9sZCgiQXBwbGVTREdvdGhpY05lby1Cb2xkIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0g
Z2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRp
b24ud2VpZ2h0KCkpID8ga29yZWFuQm9sZCA6IGtvcmVhblBsYWluLCBmYWxzZSwgRG9Ob3RSZXRh
aW4pOworICAgIH0gZWxzZSBpZiAodXNlQ3lyaWxsaWNGb250KSB7CisgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmlsbGljUGxhaW4oIkhlbHZldGljYU5ldWUi
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY3lyaWxsaWNCb2xkKCJIZWx2ZXRpY2FOZXVlLUJv
bGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9s
ZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjeXJpbGxpY0JvbGQgOiBjeXJpbGxpY1BsYWluLCBm
YWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSBpZiAodXNlQXJhYmljRm9udCkgeworICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBhcmFiaWNQbGFpbigiR2Vl
emFQcm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gYXJhYmljQm9sZCgiR2VlemFQcm8tQm9s
ZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzaW1wbGVG
b250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xk
KGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGFyYWJpY0JvbGQgOiBhcmFiaWNQbGFpbiwgZmFsc2Us
IERvTm90UmV0YWluKTsKKyAgICB9IGVsc2UgaWYgKHVzZUhlYnJld0ZvbnQpIHsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gaGVicmV3UGxhaW4oIkFyaWFsSGVi
cmV3IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhlYnJld0JvbGQoIkFyaWFsSGVicmV3LUJv
bGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9s
ZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBoZWJyZXdCb2xkIDogaGVicmV3UGxhaW4sIGZhbHNl
LCBEb05vdFJldGFpbik7CisgICAgfSBlbHNlIGlmICh1c2VJbmRpY0ZvbnQpIHsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZGV2YW5hZ2FyaUZvbnQoIkRldmFu
YWdhcmlTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBiZW5nYWxpRm9udCgiQmFu
Z2xhU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ3VybXVraGlGb250KCJHdXJt
dWtoaU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7IC8vIE1pZ2h0IGJl
IHJlcGxhY2VkIGluIGEgZnV0dXJlIHJlbGVhc2Ugd2l0aCBhIFNhbmdhbSB2ZXJzaW9uLgorICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBndWphcmF0aUZvbnQoIkd1
amFyYXRpU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAg
ICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gb3JpeWFGb250KCJPcml5
YVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRhbWlsRm9udCgiVGFtaWxTYW5n
YW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0ZWx1Z3VGb250KCJUZWx1Z3VTYW5nYW1N
TiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrYW5uYWRhRm9udCgiS2FubmFkYVNhbmdhbU1O
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1hbGF5YWxhbUZvbnQoIk1hbGF5YWxhbVNhbmdh
bU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNpbmhhbGFGb250KCJTaW5oYWxhU2FuZ2Ft
TU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKworICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBkZXZhbmFnYXJpRm9udEJvbGQoIkRldmFu
YWdhcmlTYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGJlbmdhbGlGb250
Qm9sZCgiQmFuZ2xhU2FuZ2FtTU4tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBndXJt
dWtoaUZvbnRCb2xkKCJHdXJtdWtoaU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsgLy8gTWlnaHQgYmUgcmVwbGFjZWQgaW4gYSBmdXR1cmUgcmVsZWFzZSB3aXRo
IGEgU2FuZ2FtIHZlcnNpb24uCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGd1amFyYXRpRm9udEJvbGQoIkd1amFyYXRpU2FuZ2FtTU4tQm9sZCIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXRvbWljU3RyaW5nPiBvcml5YUZvbnRCb2xkKCJPcml5YVNhbmdhbU1OLUJvbGQiLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gdGFtaWxGb250Qm9sZCgiVGFtaWxTYW5nYW1NTi1Cb2xkIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRlbHVndUZvbnRCb2xkKCJUZWx1Z3VTYW5nYW1NTi1C
b2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGthbm5hZGFGb250Qm9sZCgiS2FubmFkYVNh
bmdhbU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbWFsYXlhbGFtRm9udEJvbGQo
Ik1hbGF5YWxhbVNhbmdhbU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gc2luaGFs
YUZvbnRCb2xkKCJTaW5oYWxhU2FuZ2FtTU4tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOworCisgICAgICAgIHN0YXRpYyBBdG9taWNTdHJpbmcqIGluZGljVW5pY29k
ZVBhZ2VGb250c1tdID0geworICAgICAgICAgICAgJmRldmFuYWdhcmlGb250LmdldCgpLAorICAg
ICAgICAgICAgJmJlbmdhbGlGb250LmdldCgpLAorICAgICAgICAgICAgJmd1cm11a2hpRm9udC5n
ZXQoKSwKKyAgICAgICAgICAgICZndWphcmF0aUZvbnQuZ2V0KCksCisgICAgICAgICAgICAmb3Jp
eWFGb250LmdldCgpLAorICAgICAgICAgICAgJnRhbWlsRm9udC5nZXQoKSwKKyAgICAgICAgICAg
ICZ0ZWx1Z3VGb250LmdldCgpLAorICAgICAgICAgICAgJmthbm5hZGFGb250LmdldCgpLAorICAg
ICAgICAgICAgJm1hbGF5YWxhbUZvbnQuZ2V0KCksCisgICAgICAgICAgICAmc2luaGFsYUZvbnQu
Z2V0KCkKKyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWMgQXRvbWljU3RyaW5nKiBpbmRpY1Vu
aWNvZGVQYWdlRm9udHNCb2xkW10gPSB7CisgICAgICAgICAgICAmZGV2YW5hZ2FyaUZvbnRCb2xk
LmdldCgpLAorICAgICAgICAgICAgJmJlbmdhbGlGb250Qm9sZC5nZXQoKSwKKyAgICAgICAgICAg
ICZndXJtdWtoaUZvbnRCb2xkLmdldCgpLAorICAgICAgICAgICAgJmd1amFyYXRpRm9udEJvbGQu
Z2V0KCksCisgICAgICAgICAgICAmb3JpeWFGb250Qm9sZC5nZXQoKSwKKyAgICAgICAgICAgICZ0
YW1pbEZvbnRCb2xkLmdldCgpLAorICAgICAgICAgICAgJnRlbHVndUZvbnRCb2xkLmdldCgpLAor
ICAgICAgICAgICAgJmthbm5hZGFGb250Qm9sZC5nZXQoKSwKKyAgICAgICAgICAgICZtYWxheWFs
YW1Gb250Qm9sZC5nZXQoKSwKKyAgICAgICAgICAgICZzaW5oYWxhRm9udEJvbGQuZ2V0KCkKKyAg
ICAgICAgfTsKKworICAgICAgICB1aW50MzJfdCBpbmRpY1BhZ2VPcmRlckluZGV4ID0gKGMgLSAw
eDA5MDApIC8gMHgwMDgwOyAvLyBJbmRpYyBzY3JpcHRzIHN0YXJ0IGF0IDB4MDkwMCBpbiBVbmlj
b2RlLiBFYWNoIHNjcmlwdCBpcyBhbGxvY2FsdGVkIGEgYmxvY2sgb2YgMHg4MCBjaGFyYWN0ZXJz
LgorICAgICAgICBpZiAoaW5kaWNQYWdlT3JkZXJJbmRleCA8IChzaXplb2YoaW5kaWNVbmljb2Rl
UGFnZUZvbnRzKSAvIHNpemVvZihBdG9taWNTdHJpbmcqKSkpIHsKKyAgICAgICAgICAgIEF0b21p
Y1N0cmluZyogaW5kaWNGb250U3RyaW5nID0gaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53
ZWlnaHQoKSkgPyBpbmRpY1VuaWNvZGVQYWdlRm9udHNCb2xkW2luZGljUGFnZU9yZGVySW5kZXhd
IDogaW5kaWNVbmljb2RlUGFnZUZvbnRzW2luZGljUGFnZU9yZGVySW5kZXhdOworICAgICAgICAg
ICAgaWYgKGluZGljRm9udFN0cmluZykKKyAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9
IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCAqaW5kaWNGb250U3RyaW5nLCBmYWxzZSwg
RG9Ob3RSZXRhaW4pOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh1c2VUaGFpRm9udCkgewor
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0aGFpUGxhaW4oIlRo
b25idXJpIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRoYWlCb2xkKCJUaG9uYnVyaS1Cb2xk
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHNpbXBsZUZv
bnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQo
ZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhhaUJvbGQgOiB0aGFpUGxhaW4sIGZhbHNlLCBEb05v
dFJldGFpbik7CisgICAgfSBlbHNlIGlmICh1c2VUaWJldGFuRm9udCkgeworICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0aWJldGFuUGxhaW4oIkthaWxhc2EiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGliZXRhbkJvbGQoIkthaWxhc2EtQm9sZCIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzaW1wbGVGb250RGF0YSA9
IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0
aW9uLndlaWdodCgpKSA/IHRpYmV0YW5Cb2xkIDogdGliZXRhblBsYWluLCBmYWxzZSwgRG9Ob3RS
ZXRhaW4pOworICAgIH0gZWxzZSBpZiAodXNlQ2FuYWRpYW5BYm9yaWdpbmFsU3lsbGFiaWNzRm9u
dCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjYXNQbGFp
bigiRXVwaGVtaWFVQ0FTIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNhc0JvbGQoIkV1cGhl
bWlhVUNBUy1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
ICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlzRm9u
dFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY2FzQm9sZCA6IGNhc1BsYWluLCBm
YWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IGFwcGxlQ29sb3JFbW9qaSgiQXBwbGVDb2xvckVtb2ppIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIGlmICghdXNlRW1v
amlGb250KSB7CisgICAgICAgICAgICBpZiAoIUNGQ2hhcmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVy
TWVtYmVyKHBob25lRmFsbGJhY2tDaGFyYWN0ZXJTZXQoKSwgYykpCisgICAgICAgICAgICAgICAg
dXNlRW1vamlGb250ID0gQ0ZDaGFyYWN0ZXJTZXRJc0xvbmdDaGFyYWN0ZXJNZW1iZXIoYXBwbGVD
b2xvckVtb2ppQ2hhcmFjdGVyU2V0KCksIGMpOworICAgICAgICB9CisgICAgICAgIGlmICh1c2VF
bW9qaUZvbnQpCisgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRh
KGRlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1vamksIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAg
fQorCisgICAgaWYgKHNpbXBsZUZvbnREYXRhKQorICAgICAgICByZXR1cm4gc2ltcGxlRm9udERh
dGEucmVsZWFzZSgpOworCisgICAgcmV0dXJuIGdldE5vblJldGFpbmVkTGFzdFJlc29ydEZhbGxi
YWNrRm9udChkZXNjcmlwdGlvbik7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6c2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKK3sKKyAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9u
dCB1c2luZyBhIG1hdGNoIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbgorICAg
IC8vIHRoZSByZXF1ZXN0ZWQgbmFtZXMuIEZvciBleGFtcGxlLCB3ZSdsbCBtYXRjaCBhbnkgbmFt
ZSB0aGF0IGNvbnRhaW5zICJBcmFiaWMiIHRvIEdlZXphIFByby4KKyAgICBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IHNpbXBsZUZvbnREYXRhOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
ZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHkgPSBkZXNjcmlwdGlvbi5mYW1pbHlBdChpKTsKKyAgICAgICAgaWYgKGZhbWls
eS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBTdWJzdGl0
dXRlIHRoZSBkZWZhdWx0IG1vbm9zcGFjZSBmb250IGZvciB3ZWxsLWtub3duIG1vbm9zcGFjZSBm
b250cy4KKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbW9uYWNv
KCJtb25hY28iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbWVubG8oIm1lbmxvIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IGNvdXJpZXIoImNvdXJpZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwg
bW9uYWNvKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1lbmxvKSkgeworICAgICAgICAg
ICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgY291cmll
cik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN1YnN0
aXR1dGUgVmVyZGFuYSBmb3IgTHVjaWRhIEdyYW5kZS4KKyAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gbHVjaWRhR3JhbmRlKCJsdWNpZGEgZ3JhbmRlIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IHZlcmRhbmEoInZlcmRhbmEiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwg
bHVjaWRhR3JhbmRlKSkgeworICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRG
b250RGF0YShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFyYWJpYyhB
U0NJSUxpdGVyYWwoIkFyYWJpYyIpKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gcGFzaHRvKEFTQ0lJTGl0ZXJhbCgiUGFzaHRvIikpOworICAgICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiB1cmR1KEFTQ0lJTGl0ZXJhbCgiVXJkdSIpKTsKKyAgICAgICAg
c3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsgJmFyYWJpYy5nZXQoKSwgJnBhc2h0by5n
ZXQoKSwgJnVyZHUuZ2V0KCkgfTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gZ2VlemFQbGFpbigiR2VlemFQcm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
Z2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMyAmJiAhc2ltcGxlRm9udERhdGE7
ICsraikKKyAgICAgICAgICAgIGlmIChmYW1pbHkuY29udGFpbnMoKm1hdGNoV29yZHNbal0sIGZh
bHNlKSkKKyAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRh
KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdl
ZXphQm9sZCA6IGdlZXphUGxhaW4pOworICAgIH0KKworICAgIHJldHVybiBzaW1wbGVGb250RGF0
YS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6
Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK3sKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBmYWxsYmFja0ZvbnRGYW1pbHkoIi5QaG9uZUZhbGxiYWNr
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIGdldENh
Y2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250RmFtaWx5LCBmYWxzZSwg
c2hvdWxkUmV0YWluKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDdXN0
b21GYWxsYmFja0ZvbnQoY29uc3QgVUludDMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCit7CisgICAgQVNTRVJUKHJlcXVpcmVzQ3VzdG9tRmFsbGJhY2tGb250KGMpKTsK
KyAgICBpZiAoYyA9PSBBcHBsZUxvZ28pIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4gaGVsdmV0aWNhRmFtaWx5KCJIZWx2ZXRpY2EgTmV1ZSIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9u
dFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgaGVsdmV0aWNhRmFtaWx5KTsKKyAgICB9CisgICAg
aWYgKGMgPT0gYmxhY2tDaXJjbGUpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4gbG9ja0Nsb2NrRmFtaWx5KCJMb2NrQ2xvY2stTGlnaHQiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgcmV0dXJuIGdldENhY2hlZEZvbnRQ
bGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIGxvY2tDbG9ja0ZhbWlseSk7CisgICAgfQorICAgIHJl
dHVybiBudWxscHRyOworfQorCitzdGF0aWMgaW5saW5lIEZvbnRUcmFpdHNNYXNrIHRvVHJhaXRz
TWFzayhDVEZvbnRTeW1ib2xpY1RyYWl0cyBjdEZvbnRUcmFpdHMpCit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigoKGN0Rm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0
YWxpYykgPyBGb250U3R5bGVJdGFsaWNNYXNrIDogRm9udFN0eWxlTm9ybWFsTWFzaykKKyAgICAg
ICAgfCBGb250VmFyaWFudE5vcm1hbE1hc2sKKyAgICAgICAgLy8gRm9udFdlaWdodDYwMCBvciBo
aWdoZXIgaXMgYm9sZCBmb3IgQ1RGb250cywgc28gY2hvb3NlIG1pZGRsZSB2YWx1ZXMgZm9yCisg
ICAgICAgIC8vIGJvbGQgKDYwMC05MDApIGFuZCBub24tYm9sZCAoMTAwLTUwMCkKKyAgICAgICAg
fCAoKGN0Rm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodDcwME1hc2sg
OiBGb250V2VpZ2h0MzAwTWFzaykpOworfQorCit2b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5G
YW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0b3I8dW5zaWduZWQ+JiB0
cmFpdHNNYXNrcykKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWVTdHIg
PSBmYW1pbHlOYW1lLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgTlNEaWN0aW9uYXJ5
ICphdHRyaWJ1dGVzID0gQHsgKGlkKWtDVEZvbnRGYW1pbHlOYW1lQXR0cmlidXRlOiAoTlNTdHJp
bmcqKWZhbWlseU5hbWVTdHIuZ2V0KCkgfTsKKyAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRv
clJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRo
QXR0cmlidXRlcygoQ0ZEaWN0aW9uYXJ5UmVmKWF0dHJpYnV0ZXMpKTsKKyAgICBSZXRhaW5QdHI8
TlNBcnJheT4gbWF0Y2hlZERlc2NyaXB0b3JzID0gYWRvcHROUygoTlNBcnJheSAqKUNURm9udERl
c2NyaXB0b3JDcmVhdGVNYXRjaGluZ0ZvbnREZXNjcmlwdG9ycyhmb250RGVzY3JpcHRvci5nZXQo
KSwgbnVsbHB0cikpOworCisgICAgTlNJbnRlZ2VyIG51bU1hdGNoZXMgPSBbbWF0Y2hlZERlc2Ny
aXB0b3JzLmdldCgpIGNvdW50XTsKKyAgICBpZiAoIW1hdGNoZWREZXNjcmlwdG9ycyB8fCAhbnVt
TWF0Y2hlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChOU0ludGVnZXIgaSA9IDA7IGkg
PCBudW1NYXRjaGVzOyArK2kpIHsKKyAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
dHJhaXRzID0gYWRvcHRDRigoQ0ZEaWN0aW9uYXJ5UmVmKUNURm9udERlc2NyaXB0b3JDb3B5QXR0
cmlidXRlKChDVEZvbnREZXNjcmlwdG9yUmVmKVttYXRjaGVkRGVzY3JpcHRvcnMuZ2V0KCkgb2Jq
ZWN0QXRJbmRleDppXSwga0NURm9udFRyYWl0c0F0dHJpYnV0ZSkpOworICAgICAgICBDRk51bWJl
clJlZiByZXN1bHRSZWYgPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUodHJhaXRz
LmdldCgpLCBrQ1RGb250U3ltYm9saWNUcmFpdCk7CisgICAgICAgIGlmIChyZXN1bHRSZWYpIHsK
KyAgICAgICAgICAgIENURm9udFN5bWJvbGljVHJhaXRzIHN5bWJvbGljVHJhaXRzOworICAgICAg
ICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShyZXN1bHRSZWYsIGtDRk51bWJlckludFR5cGUsICZzeW1i
b2xpY1RyYWl0cyk7CisgICAgICAgICAgICB0cmFpdHNNYXNrcy5hcHBlbmQodG9UcmFpdHNNYXNr
KHN5bWJvbGljVHJhaXRzKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Zsb2F0IEZvbnRDYWNo
ZTo6d2VpZ2h0T2ZDVEZvbnQoQ1RGb250UmVmIGZvbnQpCit7CisgICAgZmxvYXQgcmVzdWx0ID0g
MDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiB0cmFpdHMgPSBhZG9wdENGKENURm9u
dENvcHlUcmFpdHMoZm9udCkpOworICAgIGlmICghdHJhaXRzKQorICAgICAgICByZXR1cm4gcmVz
dWx0OworCisgICAgQ0ZOdW1iZXJSZWYgcmVzdWx0UmVmID0gKENGTnVtYmVyUmVmKUNGRGljdGlv
bmFyeUdldFZhbHVlKHRyYWl0cy5nZXQoKSwga0NURm9udFdlaWdodFRyYWl0KTsKKyAgICBpZiAo
cmVzdWx0UmVmKQorICAgICAgICBDRk51bWJlckdldFZhbHVlKHJlc3VsdFJlZiwga0NGTnVtYmVy
RmxvYXRUeXBlLCAmcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBD
VEZvbnRSZWYgY3JlYXRlQ1RGb250V2l0aFRleHRTdHlsZShjb25zdCBTdHJpbmcmIGZhbWlseU5h
bWUsIENURm9udFN5bWJvbGljVHJhaXRzIHRyYWl0cywgQ0dGbG9hdCBzaXplKQoreworICAgIGlm
IChmYW1pbHlOYW1lLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENU
Rm9udFN5bWJvbGljVHJhaXRzIHN5bWJvbGljVHJhaXRzID0gMDsKKyAgICBpZiAodHJhaXRzICYg
a0NURm9udEJvbGRUcmFpdCkKKyAgICAgICAgc3ltYm9saWNUcmFpdHMgfD0ga0NURm9udEJvbGRU
cmFpdDsKKyAgICBpZiAodHJhaXRzICYga0NURm9udFRyYWl0SXRhbGljKQorICAgICAgICBzeW1i
b2xpY1RyYWl0cyB8PSBrQ1RGb250VHJhaXRJdGFsaWM7CisgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBmYW1pbHlOYW1lU3RyID0gZmFtaWx5TmFtZS5jcmVhdGVDRlN0cmluZygpOworICAgIFJl
dGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RG
b250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUoZmFtaWx5TmFtZVN0ci5nZXQoKSwgUmVu
ZGVyVGhlbWVJT1M6OmNvbnRlbnRTaXplQ2F0ZWdvcnkoKSwgbnVsbHB0cikpOworICAgIGlmIChz
eW1ib2xpY1RyYWl0cykKKyAgICAgICAgZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERl
c2NyaXB0b3JDcmVhdGVDb3B5V2l0aFN5bWJvbGljVHJhaXRzKGZvbnREZXNjcmlwdG9yLmdldCgp
LCBzeW1ib2xpY1RyYWl0cywgc3ltYm9saWNUcmFpdHMpKTsKKworICAgIHJldHVybiBDVEZvbnRD
cmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxw
dHIpOworfQorCitzdGF0aWMgQ1RGb250UmVmIGNyZWF0ZUNURm9udFdpdGhGYW1pbHlOYW1lQW5k
V2VpZ2h0KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJh
aXRzLCBmbG9hdCBzaXplLCB1aW50MTZfdCB3ZWlnaHQpCit7CisgICAgaWYgKGZhbWlseU5hbWUu
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gc3lzdGVtVUlGb250V2l0aFdlYktpdFByZWZpeCgiLXdlYmtp
dC1zeXN0ZW0tZm9udCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHN5c3RlbVVJRm9udFdpdGhBcHBs
ZVByZWZpeCgiLWFwcGxlLXN5c3RlbS1mb250IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWUsIHN5c3RlbVVJ
Rm9udFdpdGhXZWJLaXRQcmVmaXgpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWUsIHN5
c3RlbVVJRm9udFdpdGhBcHBsZVByZWZpeCkpIHsKKyAgICAgICAgQ1RGb250VUlGb250VHlwZSBm
b250VHlwZSA9IGtDVEZvbnRVSUZvbnRTeXN0ZW07CisgICAgICAgIGlmICh3ZWlnaHQgPiAzMDAp
IHsKKyAgICAgICAgICAgIC8vIFRoZSBjb21tZW50IGJlbG93IGhhcyBiZWVuIGNvcGllZCBmcm9t
IENvcmVUZXh0L1VJRm91bmRhdGlvbi4gSG93ZXZlciwgaW4gV2ViS2l0IHdlIHN5bnRoZXNpemUg
dGhlIG9ibGlxdWUsCisgICAgICAgICAgICAvLyBzbyB3ZSBzaG91bGQgaW52ZXN0aWdhdGUgdGhl
IHJlc3VsdCA8cmRhcjovL3Byb2JsZW0vMTQ0NDkzNDA+OgorICAgICAgICAgICAgLy8gV2UgZG9u
J3QgZG8gYm9sZC1pdGFsaWMgZm9yIHN5c3RlbSBmb250cy4gSWYgeW91IGFzayBmb3IgaXQsIHdl
J2xsIGFzc3VtZSB0aGF0IHlvdSdyZSBqdXN0IGtpZGRpbmcgYW5kIHRoYXQgeW91IHJlYWxseSB3
YW50IGJvbGQuIFRoaXMgaXMgYSBmZWF0dXJlLgorICAgICAgICAgICAgaWYgKHRyYWl0cyAmIGtD
VEZvbnRUcmFpdEJvbGQpCisgICAgICAgICAgICAgICAgZm9udFR5cGUgPSBrQ1RGb250VUlGb250
RW1waGFzaXplZFN5c3RlbTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRyYWl0cyAmIGtDVEZvbnRU
cmFpdEl0YWxpYykKKyAgICAgICAgICAgICAgICBmb250VHlwZSA9IHN0YXRpY19jYXN0PENURm9u
dFVJRm9udFR5cGU+KGtDVEZvbnRVSUZvbnRTeXN0ZW1JdGFsaWMpOworICAgICAgICB9IGVsc2Ug
aWYgKHdlaWdodCA+IDI1MCkKKyAgICAgICAgICAgIGZvbnRUeXBlID0gc3RhdGljX2Nhc3Q8Q1RG
b250VUlGb250VHlwZT4oa0NURm9udFVJRm9udFN5c3RlbUxpZ2h0KTsKKyAgICAgICAgZWxzZSBp
ZiAod2VpZ2h0ID4gMTUwKQorICAgICAgICAgICAgZm9udFR5cGUgPSBzdGF0aWNfY2FzdDxDVEZv
bnRVSUZvbnRUeXBlPihrQ1RGb250VUlGb250U3lzdGVtVGhpbik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGZvbnRUeXBlID0gc3RhdGljX2Nhc3Q8Q1RGb250VUlGb250VHlwZT4oa0NURm9u
dFVJRm9udFN5c3RlbVVsdHJhTGlnaHQpOworICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3Jp
cHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVG
b3JVSVR5cGUoZm9udFR5cGUsIHNpemUsIG51bGxwdHIpKTsKKyAgICAgICAgcmV0dXJuIENURm9u
dENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgc2l6ZSwgbnVs
bHB0cik7CisgICAgfQorCisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lU3Ry
ID0gZmFtaWx5TmFtZS5jcmVhdGVDRlN0cmluZygpOworICAgIENURm9udFN5bWJvbGljVHJhaXRz
IHJlcXVlc3RlZFRyYWl0cyA9IChDVEZvbnRTeW1ib2xpY1RyYWl0cykodHJhaXRzICYgKGtDVEZv
bnRCb2xkVHJhaXQgfCBrQ1RGb250SXRhbGljVHJhaXQpKTsKKyAgICByZXR1cm4gQ1RGb250Q3Jl
YXRlRm9yQ1NTKGZhbWlseU5hbWVTdHIuZ2V0KCksIHdlaWdodCwgcmVxdWVzdGVkVHJhaXRzLCBz
aXplKTsKK30KKworc3RhdGljIHVpbnQxNl90IHRvQ1RGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9u
dFdlaWdodCkKK3sKKyAgICBzd2l0Y2ggKGZvbnRXZWlnaHQpIHsKKyAgICBjYXNlIEZvbnRXZWln
aHQxMDA6CisgICAgICAgIHJldHVybiAxMDA7CisgICAgY2FzZSBGb250V2VpZ2h0MjAwOgorICAg
ICAgICByZXR1cm4gMjAwOworICAgIGNhc2UgRm9udFdlaWdodDMwMDoKKyAgICAgICAgcmV0dXJu
IDMwMDsKKyAgICBjYXNlIEZvbnRXZWlnaHQ0MDA6CisgICAgICAgIHJldHVybiA0MDA7CisgICAg
Y2FzZSBGb250V2VpZ2h0NTAwOgorICAgICAgICByZXR1cm4gNTAwOworICAgIGNhc2UgRm9udFdl
aWdodDYwMDoKKyAgICAgICAgcmV0dXJuIDYwMDsKKyAgICBjYXNlIEZvbnRXZWlnaHQ3MDA6Cisg
ICAgICAgIHJldHVybiA3MDA7CisgICAgY2FzZSBGb250V2VpZ2h0ODAwOgorICAgICAgICByZXR1
cm4gODAwOworICAgIGNhc2UgRm9udFdlaWdodDkwMDoKKyAgICAgICAgcmV0dXJuIDkwMDsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gNDAwOworICAgIH0KK30KKworUGFzc093blB0cjxG
b250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5KQoreworICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgIkNvdXJpZXIiIGZvbnQuIFdlIHVzZWQg
dG8gaGF2ZSBvbmx5IGFuIG9ibGlxdWUgdmFyaWFudCBvbiBpT1MsIHNvIHByaW9yIHRvCisgICAg
Ly8gaU9TIDYuMCwgd2UgZGlzYWxsb3dlZCBpdHMgdXNlIGhlcmUuIFdlJ2xsIGZhbGwgYmFjayBv
biAiQ291cmllciBOZXciLiA8cmRhcjovL3Byb2JsZW0vNTExNjQ3NyYxMDg1MDIyNz4KKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjb3VyaWVyKCJDb3VyaWVyIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIGJvb2wgc2hvdWxk
RGlzYWxsb3dDb3VyaWVyID0gIWlvc0V4ZWN1dGFibGVXYXNMaW5rZWRPbk9yQWZ0ZXJWZXJzaW9u
KHdrSU9TU3lzdGVtVmVyc2lvbl82XzApOworICAgIGlmIChzaG91bGREaXNhbGxvd0NvdXJpZXIg
JiYgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBjb3VyaWVyKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMgPSAwOworICAgIGlmIChm
b250RGVzY3JpcHRpb24uaXRhbGljKCkpCisgICAgICAgIHRyYWl0cyB8PSBrQ1RGb250VHJhaXRJ
dGFsaWM7CisgICAgaWYgKGlzRm9udFdlaWdodEJvbGQoZm9udERlc2NyaXB0aW9uLndlaWdodCgp
KSkKKyAgICAgICAgdHJhaXRzIHw9IGtDVEZvbnRUcmFpdEJvbGQ7CisgICAgZmxvYXQgc2l6ZSA9
IGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpOworCisgICAgUmV0YWluUHRyPENU
Rm9udFJlZj4gY3RGb250OworICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgiVUlDVEZvbnRUZXh0
U3R5bGUiKSkKKyAgICAgICAgY3RGb250ID0gYWRvcHRDRihjcmVhdGVDVEZvbnRXaXRoVGV4dFN0
eWxlKGZhbWlseSwgdHJhaXRzLCBzaXplKSk7CisgICAgZWxzZQorICAgICAgICBjdEZvbnQgPSBh
ZG9wdENGKGNyZWF0ZUNURm9udFdpdGhGYW1pbHlOYW1lQW5kV2VpZ2h0KGZhbWlseSwgdHJhaXRz
LCBzaXplLCB0b0NURm9udFdlaWdodChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkpKSk7CisgICAg
aWYgKCFjdEZvbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ1RGb250U3ltYm9s
aWNUcmFpdHMgYWN0dWFsVHJhaXRzID0gMDsKKyAgICBpZiAoaXNGb250V2VpZ2h0Qm9sZChmb250
RGVzY3JpcHRpb24ud2VpZ2h0KCkpIHx8IGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSkKKyAgICAg
ICAgYWN0dWFsVHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoY3RGb250LmdldCgpKTsK
KworICAgIGJvb2wgaXNBcHBsZUNvbG9yRW1vamkgPSBDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShj
dEZvbnQuZ2V0KCkpOworCisgICAgYm9vbCBzeW50aGV0aWNCb2xkID0gKHRyYWl0cyAmIGtDVEZv
bnRUcmFpdEJvbGQpICYmICEoYWN0dWFsVHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCkgJiYgIWlz
QXBwbGVDb2xvckVtb2ppOworICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9ICh0cmFpdHMgJiBr
Q1RGb250VHJhaXRJdGFsaWMpICYmICEoYWN0dWFsVHJhaXRzICYga0NURm9udFRyYWl0SXRhbGlj
KSAmJiAhaXNBcHBsZUNvbG9yRW1vamk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQg
PSBuZXcgRm9udFBsYXRmb3JtRGF0YShjdEZvbnQuZ2V0KCksIHNpemUsIGZvbnREZXNjcmlwdGlv
bi51c2VQcmludGVyRm9udCgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBmb250
RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwgZm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgp
KTsKKyAgICBpZiAoaXNBcHBsZUNvbG9yRW1vamkpCisgICAgICAgIHJlc3VsdC0+bV9pc0Vtb2pp
ID0gdHJ1ZTsKKyAgICByZXR1cm4gYWRvcHRQdHIocmVzdWx0KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0ZvbnRTZXJ2aWNlc0lPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0ZvbnRTZXJ2aWNlc0lPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjZjhiZGM5NDhmODg2YmRhZTMyYTQ3
N2IxMDdhZjJkZWUyYjdkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9pb3MvRm9udFNlcnZpY2VzSU9TLmgKQEAgLTAsMCArMSw1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lm
bmRlZiBGb250U2VydmljZXNJT1NfaAorI2RlZmluZSBGb250U2VydmljZXNJT1NfaAorCisjaW1w
b3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZvbnRTZXJ2aWNlc0lPUyB7CitwdWJsaWM6CisgICAgRm9udFNlcnZpY2VzSU9TKENURm9udFJl
Zik7CisgICAgQ0dGbG9hdCBhc2NlbnQoKSB7IHJldHVybiBtX2FzY2VudDsgfQorICAgIENHRmxv
YXQgZGVzY2VudCgpIHsgcmV0dXJuIG1fZGVzY2VudDsgfQorICAgIENHRmxvYXQgbGluZUdhcCgp
IHsgcmV0dXJuIG1fbGluZUdhcDsgfQorICAgIENHRmxvYXQgbGluZVNwYWNpbmcoKSB7IHJldHVy
biBtX2xpbmVTcGFjaW5nOyB9CisgICAgQ0dGbG9hdCB4SGVpZ2h0KCkgeyByZXR1cm4gbV94SGVp
Z2h0OyB9CisgICAgdW5zaWduZWQgdW5pdHNQZXJFbSgpIHsgcmV0dXJuIG1fdW5pdHNQZXJFbTsg
fQorCitwcml2YXRlOgorICAgIENHRmxvYXQgbV9hc2NlbnQ7CisgICAgQ0dGbG9hdCBtX2Rlc2Nl
bnQ7CisgICAgQ0dGbG9hdCBtX2xpbmVHYXA7CisgICAgQ0dGbG9hdCBtX2xpbmVTcGFjaW5nOwor
ICAgIENHRmxvYXQgbV94SGVpZ2h0OworICAgIHVuc2lnbmVkIG1fdW5pdHNQZXJFbTsKK307CisK
K30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0ZvbnRTZXJ2aWNlc0lPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2lvcy9Gb250U2VydmljZXNJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzIyMmI1MjUxY2VhOWMxZWFhNDcw
ZDYxYWM2NGQ0OTU2MjViMGYxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJT1MubW0KQEAgLTAsMCArMSwxMDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJGb250U2VydmljZXNJT1MuaCIKKworI2lt
cG9ydCAiRm9udE1ldHJpY3MuaCIKKyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3Mu
aD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3NQcml2YXRlLmg+CisjaW1wb3J0
IDxtYWNoLW8vZHlsZF9wcml2Lmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGZsb2F0IGtMaW5lSGVpZ2h0QWRqdXN0bWVu
dCA9IDAuMTVmOworCitzdGF0aWMgYm9vbCBzaG91bGRVc2VBZGp1c3RtZW50KENURm9udFJlZiBm
b250LCBib29sIGlzaU9TN09yTGF0ZXIpCit7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBmYW1p
bHlOYW1lID0gYWRvcHROUygoTlNTdHJpbmcgKilDVEZvbnRDb3B5RmFtaWx5TmFtZShmb250KSk7
CisgICAgaWYgKCFbZmFtaWx5TmFtZSBsZW5ndGhdKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoW2ZhbWlseU5hbWUuZ2V0KCkgY29tcGFyZTpAIlRpbWVzIiBvcHRpb25zOk5TQ2Fz
ZUluc2Vuc2l0aXZlU2VhcmNoXSA9PSBOU09yZGVyZWRTYW1lCisgICAgICAgIHx8IFtmYW1pbHlO
YW1lLmdldCgpIGNvbXBhcmU6QCJIZWx2ZXRpY2EiIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVT
ZWFyY2hdID09IE5TT3JkZXJlZFNhbWUKKyAgICAgICAgfHwgW2ZhbWlseU5hbWUuZ2V0KCkgY29t
cGFyZTpAIi5IZWx2ZXRpY2EgTmV1ZVVJIiBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNo
XSA9PSBOU09yZGVyZWRTYW1lKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWlzaU9T
N09yTGF0ZXIgJiYgW2ZhbWlseU5hbWUuZ2V0KCkgY29tcGFyZTpAIi5IZWx2ZXRpY2EgTmV1ZVVJ
TGVnYWN5IiBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSA9PSBOU09yZGVyZWRTYW1l
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IGJvb2wgaXNDb3VyaWVyKENURm9udFJlZiBmb250KQoreworICAgIFJldGFpblB0cjxOU1N0cmlu
Zz4gZmFtaWx5TmFtZSA9IGFkb3B0TlMoKE5TU3RyaW5nICopQ1RGb250Q29weUZhbWlseU5hbWUo
Zm9udCkpOworICAgIGlmICghW2ZhbWlseU5hbWUgbGVuZ3RoXSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBbZmFtaWx5TmFtZS5nZXQoKSBjb21wYXJlOkAiQ291cmllciIgb3B0
aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0gPT0gTlNPcmRlcmVkU2FtZTsKK30KKworRm9u
dFNlcnZpY2VzSU9TOjpGb250U2VydmljZXNJT1MoQ1RGb250UmVmIGZvbnQpCit7CisgICAgQ0dG
b250RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+IGNnRm9u
dCA9IGFkb3B0Q0YoQ1RGb250Q29weUdyYXBoaWNzRm9udChmb250LCBOVUxMKSk7CisgICAgbV94
SGVpZ2h0ID0gQ0dGb250R2V0RGVzY3JpcHRvcihjZ0ZvbnQuZ2V0KCksICZkZXNjcmlwdG9yKSA/
IChkZXNjcmlwdG9yLnhIZWlnaHQgLyAxMDAwKSAqIENURm9udEdldFNpemUoZm9udCkgOiAwOwor
ICAgIG1fdW5pdHNQZXJFbSA9IENURm9udEdldFVuaXRzUGVyRW0oZm9udCk7CisgICAgQ0dGbG9h
dCBsaW5lR2FwOworICAgIENHRmxvYXQgYXNjZW50OworICAgIENHRmxvYXQgZGVzY2VudDsKKyAg
ICBzdGF0aWMgYm9vbCBpc2lPUzdPckxhdGVyID0gZHlsZF9nZXRfcHJvZ3JhbV9zZGtfdmVyc2lv
bigpID49IERZTERfSU9TX1ZFUlNJT05fN18wOworICAgIGlmIChpc2lPUzdPckxhdGVyKSB7Cisg
ICAgICAgIC8vIFVzZSBDb3JlVGV4dCBBUEkgaW4gaU9TIDcuCisgICAgICAgIGFzY2VudCA9IENU
Rm9udEdldEFzY2VudChmb250KTsKKyAgICAgICAgZGVzY2VudCA9IENURm9udEdldERlc2NlbnQo
Zm9udCk7CisgICAgICAgIGxpbmVHYXAgPSBDVEZvbnRHZXRMZWFkaW5nKGZvbnQpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGZsb2F0IHBvaW50U2l6ZSA9IENURm9udEdldFNpemUoZm9udCk7Cisg
ICAgICAgIGNvbnN0IENHRm9udEhNZXRyaWNzICptZXRyaWNzID0gQ0dGb250R2V0SE1ldHJpY3Mo
Y2dGb250LmdldCgpKTsKKyAgICAgICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IENHRm9udEdldFVu
aXRzUGVyRW0oY2dGb250LmdldCgpKTsKKworICAgICAgICBsaW5lR2FwID0gKGR5bGRfZ2V0X3By
b2dyYW1fc2RrX3ZlcnNpb24oKSA+PSBEWUxEX0lPU19WRVJTSU9OXzNfMCkgPyBzY2FsZUVtVG9V
bml0cyhtZXRyaWNzLT5saW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSA6IDAuMDsKKwor
ICAgICAgICBib29sIGlzaU9TNk9yTGF0ZXIgPSBkeWxkX2dldF9wcm9ncmFtX3Nka192ZXJzaW9u
KCkgPj0gRFlMRF9JT1NfVkVSU0lPTl82XzA7CisgICAgICAgIGlmICghaXNpT1M2T3JMYXRlciB8
fCAhaXNDb3VyaWVyKGZvbnQpKSB7CisgICAgICAgICAgICBhc2NlbnQgPSAoc2NhbGVFbVRvVW5p
dHMobWV0cmljcy0+YXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgICAg
ICBkZXNjZW50ID0gKC1zY2FsZUVtVG9Vbml0cyhtZXRyaWNzLT5kZXNjZW50LCB1bml0c1BlckVt
KSAqIHBvaW50U2l6ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGb3IgQ291
cmllciwgd2UgdXNlIENvdXJpZXIgTmV3J3MgZXhhY3QgdmFsdWVzLCBiZWNhdXNlIGluIGlPUyA1
LjEgYW5kIGVhcmxpZXIsCisgICAgICAgICAgICAvLyBDb3VyaWVyIE5ldyB3YXMgc3Vic3RpdHV0
ZWQgZm9yIENvdXJpZXIgYnkgV2ViS2l0LgorICAgICAgICAgICAgYXNjZW50ID0gKHNjYWxlRW1U
b1VuaXRzKDE3MDUsIDIwNDgpICogcG9pbnRTaXplKTsKKyAgICAgICAgICAgIGRlc2NlbnQgPSAo
c2NhbGVFbVRvVW5pdHMoNjE1LCAyMDQ4KSAqIHBvaW50U2l6ZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgQ0dGbG9hdCBhZGp1c3RtZW50ID0gKHNob3VsZFVzZUFkanVzdG1lbnQoZm9udCwgaXNp
T1M3T3JMYXRlcikpID8gY2VpbCgoYXNjZW50ICsgZGVzY2VudCkgKiBrTGluZUhlaWdodEFkanVz
dG1lbnQpIDogMDsKKworICAgIG1fYXNjZW50ID0gYXNjZW50ICsgYWRqdXN0bWVudDsKKyAgICBt
X2Rlc2NlbnQgPSBkZXNjZW50OworICAgIG1fbGluZUdhcCA9IGNlaWxmKGxpbmVHYXApOworICAg
IG1fbGluZVNwYWNpbmcgPSBjZWlsKGFzY2VudCkgKyBhZGp1c3RtZW50ICsgY2VpbChkZXNjZW50
KSArIG1fbGluZUdhcDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvR3JhcGhpY3NDb250ZXh0M0RJ
T1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9HcmFwaGljc0NvbnRl
eHQzRElPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzM2JhMDlkNTk5YzhmODVkNDUwZWRmZmZmYjI5M2QxYjc1
YjQ2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvR3JhcGhpY3NDb250ZXh0M0RJT1MuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRElPU19oCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNE
SU9TX2gKKworI2RlZmluZSBnbEJpbmRGcmFtZWJ1ZmZlckVYVCBnbEJpbmRGcmFtZWJ1ZmZlcgor
I2RlZmluZSBnbEJpbmRSZW5kZXJidWZmZXJFWFQgZ2xCaW5kUmVuZGVyYnVmZmVyCisjZGVmaW5l
IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMKKyNk
ZWZpbmUgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMKKyNkZWZp
bmUgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUIGdsRGVsZXRlUmVuZGVyYnVmZmVycworI2RlZmlu
ZSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIK
KyNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
CisjZGVmaW5lIGdsR2VuZXJhdGVNaXBtYXBFWFQgZ2xHZW5lcmF0ZU1pcG1hcAorI2RlZmluZSBn
bEdlbkZyYW1lYnVmZmVyc0VYVCBnbEdlbkZyYW1lYnVmZmVycworI2RlZmluZSBnbEdlblJlbmRl
cmJ1ZmZlcnNFWFQgZ2xHZW5SZW5kZXJidWZmZXJzCisjZGVmaW5lIGdsR2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyaXZFWFQgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdgorI2RlZmluZSBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUIGdsR2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaXYKKyNkZWZpbmUgZ2xJc0ZyYW1lYnVmZmVyRVhUIGdsSXNGcmFtZWJ1
ZmZlcgorI2RlZmluZSBnbElzUmVuZGVyYnVmZmVyRVhUIGdsSXNSZW5kZXJidWZmZXIKKyNkZWZp
bmUgZ2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorI2RlZmlu
ZSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCBnbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZUFQUExFCisKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUIEdM
X0NPTE9SX0FUVEFDSE1FTlQwCisjZGVmaW5lIEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUIEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTCisjZGVmaW5lIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhUICBHTF9E
RVBUSF9BVFRBQ0hNRU5UCisjZGVmaW5lIEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhUIEdMX0RSQVdf
RlJBTUVCVUZGRVJfQVBQTEUKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUIEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0VYVCBHTF9GUkFN
RUJVRkZFUgorI2RlZmluZSBHTF9NQVhfU0FNUExFU19FWFQgR0xfTUFYX1NBTVBMRVNfQVBQTEUK
KyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQgR0xfUkVBRF9GUkFNRUJVRkZFUl9BUFBM
RQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfRVhUIEdMX1JFTkRFUkJVRkZFUgorI2lmbmRlZiBH
TF9SR0I4CisjZGVmaW5lIEdMX1JHQjggR0xfUkdCCisjZW5kaWYKKyNpZm5kZWYgR0xfUkdCQTgK
KyNkZWZpbmUgR0xfUkdCQTggR0xfUkdCQQorI2VuZGlmCisjZGVmaW5lIEdMX1NURU5DSUxfQVRU
QUNITUVOVF9FWFQgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lO
VF84XzhfOF84X1JFViBHTF9SR0JBCisKKyNlbmRpZiAvLyBHcmFwaGljc0NvbnRleHQzRElPU19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklP
Uy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjljNzI4ZWRiZmJkNzE1YThiZGZkYmVjZjcyMzA0ODgxNDZjODQ3MGQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklP
Uy5tbQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIFBMQVRG
T1JNKElPUykKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJJY29uLmgiCisKKyNpbXBv
cnQgIkJpdG1hcEltYWdlLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIAorSWNvbjo6SWNvbihDR0ltYWdlUmVmIGltYWdlKQorICAgIDog
bV9jZ0ltYWdlKGltYWdlKQoreworfQorCitJY29uOjp+SWNvbigpCit7Cit9CisKK1Bhc3NSZWZQ
dHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiAv
KmZpbGVuYW1lcyovKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitQYXNzUmVmUHRyPElj
b24+IEljb246OmNyZWF0ZUljb25Gb3JJbWFnZShOYXRpdmVJbWFnZVB0ciBpbWFnZVJlZikKK3sK
KyAgICBpZiAoIWltYWdlUmVmKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSWNvbihpbWFnZVJlZikpOworfQorCit2b2lkIEljb246OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit7CisgICAg
aWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKKworICAgIGZs
b2F0IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKG1fY2dJbWFnZS5nZXQoKSk7CisgICAgZmxvYXQg
aGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChtX2NnSW1hZ2UuZ2V0KCkpOworICAgIEZsb2F0U2l6
ZSBzaXplKHdpZHRoLCBoZWlnaHQpOworICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAsIHdpZHRo
LCBoZWlnaHQpOworICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZpY2VS
R0I7CisKKyAgICBjb250ZXh0LT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9s
YXRpb25IaWdoKTsKKyAgICBjb250ZXh0LT5kcmF3TmF0aXZlSW1hZ2UobV9jZ0ltYWdlLmdldCgp
LCBzaXplLCBjb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgMS4wZiwgQ29tcG9zaXRlU291
cmNlT3ZlciwgQmxlbmRNb2RlTm9ybWFsLCBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbik7Cit9CisK
K30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRklPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1YmU3M2NlOWExY2ZkNDZhMzJlNTVlYTdkNzU1ZjQ5ZmUz
YzAxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1NfaAorI2RlZmluZSBJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TX2gKKworI2lmIEVOQUJMRShWSURFTykgJiYgUExB
VEZPUk0oSU9TKQorCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5oIgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TIDogcHVibGljIEluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkYgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluYmFuZFRleHRUcmFja1By
aXZhdGVBVkZJT1M+IGNyZWF0ZShBVkZJbmJhbmRUcmFja1BhcmVudCogcGFyZW50LCBpbnQgaW50
ZXJuYWxJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlLCBjb25z
dCBTdHJpbmcmIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkZJT1MocGFyZW50LCBpbnRlcm5hbElELCBuYW1lLCBsYW5ndWFn
ZSwgdHlwZSkpOworICAgIH0KKworICAgIH5JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKCk7
CisKKyAgICB2aXJ0dWFsIEluYmFuZFRleHRUcmFja1ByaXZhdGU6OktpbmQga2luZCgpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgQXRvbWljU3RyaW5nIGxhYmVsKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgdmlydHVhbCBBdG9taWNTdHJpbmcgbGFuZ3VhZ2Uo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2xhbmd1YWdlOyB9CisgICAgdmlydHVhbCBib29s
IGlzTGVnYWN5Q2xvc2VkQ2FwdGlvbnNUcmFjaygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgaW50IGludGVybmFsSUQoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsSUQ7
IH0KKworcHJvdGVjdGVkOgorICAgIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MoQVZGSW5i
YW5kVHJhY2tQYXJlbnQqLCBpbnQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBs
YW5ndWFnZSwgY29uc3QgU3RyaW5nJiB0eXBlKTsKKworICAgIFN0cmluZyBtX25hbWU7CisgICAg
U3RyaW5nIG1fbGFuZ3VhZ2U7CisgICAgU3RyaW5nIG1fdHlwZTsKKyAgICBpbnQgbV9pbnRlcm5h
bElEOworfTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgUExBVEZPUk0oSU9TKQor
I2VuZGlmIC8vIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1NfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0luYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lM2FmYjI4MDAwOGE0OThlNDNkZjZl
NWE3N2VkZjllM2I0OTczNDBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW0KQEAgLTAs
MCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFZJ
REVPKSAmJiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgIkluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZJT1MuaCIKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJGbG9hdENv
bnZlcnNpb24uaCIKKyNpbXBvcnQgIkluYmFuZFRleHRUcmFja1ByaXZhdGUuaCIKKyNpbXBvcnQg
IkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRklPUzo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUyhBVkZJbmJh
bmRUcmFja1BhcmVudCogcGFyZW50LCBpbnQgaW50ZXJuYWxJRCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgOiBJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGKHBhcmVudCkKKyAgICAsIG1fbmFtZShuYW1lKQorICAgICwg
bV9sYW5ndWFnZShsYW5ndWFnZSkKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9pbnRlcm5h
bElEKGludGVybmFsSUQpCit7Cit9CisKK0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M6On5J
bmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKCkKK3sKK30KKworSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZTo6S2luZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TOjpraW5kKCkgY29uc3QKK3sK
KyAgICBpZiAoW21fdHlwZSBpc0VxdWFsVG9TdHJpbmc6QCJjYXB0aW9ucyJdKQorICAgICAgICBy
ZXR1cm4gQ2FwdGlvbnM7CisgICAgaWYgKFttX3R5cGUgaXNFcXVhbFRvU3RyaW5nOkAic3VidGl0
bGVzIl0pCisgICAgICAgIHJldHVybiBTdWJ0aXRsZXM7CisKKyAgICByZXR1cm4gQ2FwdGlvbnM7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvTWVkaWFQbGF5ZXJQcml2YXRlSU9TLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvTWVkaWFQbGF5ZXJQcml2YXRl
SU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGJhYzI1NzhjODY0ZWQxZGQ0MzFmNmQxMDYxYjU4OWI3YjI3MGUz
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lv
cy9NZWRpYVBsYXllclByaXZhdGVJT1MuaApAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlSU9TX2gKKyNk
ZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlSU9TX2gKKworI2lmIEVOQUJMRShWSURFTykgJiYgUExB
VEZPUk0oSU9TKQorCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5oIgorI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcm94eS5oIgorI2luY2x1ZGUgPG9iamMvcnVudGltZS5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
CitPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsKK09CSkNfQ0xBU1MgTlNNdXRhYmxlRGljdGlvbmFy
eTsKK09CSkNfQ0xBU1MgTlNOdW1iZXI7CitPQkpDX0NMQVNTIE5TT2JqZWN0OworT0JKQ19DTEFT
UyBXZWJDb3JlTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25IZWxwZXI7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUzsKKworY2xhc3MgTWVk
aWFQbGF5ZXJQcml2YXRlSU9TIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSwg
cHVibGljIEFWRkluYmFuZFRyYWNrUGFyZW50IHsKK3B1YmxpYzoKKworICAgIHN0YXRpYyB2b2lk
IHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOworICAgIHZpcnR1YWwg
fk1lZGlhUGxheWVyUHJpdmF0ZUlPUygpOworCisgICAgdmlydHVhbCB2b2lkIGRlbGl2ZXJOb3Rp
ZmljYXRpb24oTWVkaWFQbGF5ZXJQcm94eU5vdGlmaWNhdGlvblR5cGUpIE9WRVJSSURFOworICAg
IGJvb2wgY2FsbGJhY2tzRGVsYXllZCgpIHsgcmV0dXJuIG1fZGVsYXlDYWxsYmFja3MgPiAwOyB9
CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1BsYXkoKSBPVkVSUklERTsKKyAgICB2b2lkIHBy
b2Nlc3NEZWZlcnJlZFJlcXVlc3RzKCk7CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAg
dm9pZCBpbmJhbmRUZXh0VHJhY2tzQ2hhbmdlZChOU0FycmF5ICopOworICAgIHZvaWQgcHJvY2Vz
c0luYmFuZFRleHRUcmFja0N1ZShOU0FycmF5ICosIGRvdWJsZSk7CisgICAgdm9pZCB0ZXh0VHJh
Y2tXYXNTZWxlY3RlZEJ5UGx1Z2luKE5TRGljdGlvbmFyeSAqKTsKKyNlbmRpZgorCitwcml2YXRl
OgorICAgIE1lZGlhUGxheWVyUHJpdmF0ZUlPUyhNZWRpYVBsYXllciopOworCisgICAgLy8gRW5n
aW5lIHN1cHBvcnQKKyAgICBzdGF0aWMgUGFzc093blB0cjxNZWRpYVBsYXllclByaXZhdGVJbnRl
cmZhY2U+IGNyZWF0ZShNZWRpYVBsYXllciopOworICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRl
ZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpOworICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6
U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0
ZXJzJik7CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKworICAgIHZpcnR1YWwgSW50
U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBoYXNW
aWRlbygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBoYXNBdWRpbygpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuTG9hZFBvc3Rl
cigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
UG9zdGVyKGNvbnN0IFN0cmluZyYgdXJsKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250cm9scyhib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxz
Y3JlZW4oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKSBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCkgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCkgT1ZFUlJJ
REU7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25z
dCBTdHJpbmcmLCBQYXNzUmVmUHRyPEhUTUxNZWRpYVNvdXJjZT4pIE9WRVJSSURFIHsgfQorI2Vu
ZGlmCisgICAgdmlydHVhbCB2b2lkIGNhbmNlbExvYWQoKSBPVkVSUklERTsKKworICAgIHZpcnR1
YWwgdm9pZCBwbGF5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgT1ZFUlJJ
REU7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGF1c2VkKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBib29sIHNlZWtpbmcoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgZmxvYXQg
ZHVyYXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRUaW1l
KCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2VlayhmbG9hdCB0aW1lKSBP
VkVSUklERTsKKyAgICB2b2lkIHNldEVuZFRpbWUoZmxvYXQpOworCisgICAgZmxvYXQgcmF0ZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGZsb2F0IGluUmF0ZSkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBmbG9hdCB2b2x1bWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0Vm9sdW1lKGZsb2F0IGluVm9sdW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TXV0ZWQoYm9vbCBpbk11dGUpIE9WRVJSSURFOworCisgICAgaW50IGRhdGFSYXRlKCkg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0
YXRlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSByZWFkeVN0YXRlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgCisgICAgZmxvYXQgbWF4VGltZUJ1
ZmZlcmVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQo
KSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3Mo
KSBjb25zdCBPVkVSUklERTsKKyAgICBib29sIHRvdGFsQnl0ZXNLbm93bigpIGNvbnN0OworICAg
IHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNp
YmxlKGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEludFNp
emUmKSBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworCisjaWYgRU5BQkxFKElPU19BSVJQTEFZ
KQorICAgIHZpcnR1YWwgYm9vbCBpc0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCkgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcigp
IE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIGhhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRz
KCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoYm9vbCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMoYm9vbCkgT1ZFUlJJ
REU7CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IE9WRVJSSURFOwor
I2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWVkaWFQbGF5ZXJQcm94eShXZWJNZWRpYVBs
YXllclByb3h5KikgT1ZFUlJJREU7CisgICAgdm9pZCBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKCk7
CisKKyAgICB2b2lkIHNldERlbGF5Q2FsbGJhY2tzKGJvb2wgZG9EZWxheSkgeyBtX2RlbGF5Q2Fs
bGJhY2tzICs9IChkb0RlbGF5ID8gMSA6IC0xKTsgfQorCisgICAgYm9vbCB1c2luZ05ldHdvcmso
KSBjb25zdCB7IHJldHVybiBtX3VzaW5nTmV0d29yazsgfQorICAgIGJvb2wgaW5GdWxsc2NyZWVu
KCkgY29uc3QgeyByZXR1cm4gbV9pbkZ1bGxTY3JlZW47IH0KKworICAgIHZvaWQgYWRkRGVmZXJy
ZWRSZXF1ZXN0KE5TU3RyaW5nICpuYW1lLCBpZCB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IHsgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiaU9TIikp
OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCByZWFk
eUZvclBsYXliYWNrKCkgY29uc3QgT1ZFUlJJREU7CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24oVGV4dFRyYWNr
UmVwcmVzZW50YXRpb24qKTsKKworICAgIHZvaWQgY2xlYXJUZXh0VHJhY2tzKCk7CisgICAgdm9p
ZCBzZXRTZWxlY3RlZFRleHRUcmFjayhOU051bWJlciAqKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJh
Y2tNb2RlQ2hhbmdlZCgpIE9WRVJSSURFOworICAgIHZvaWQgc2V0T3V0T2ZCYW5kVGV4dFRyYWNr
cyhOU0FycmF5ICopOworCisgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNUZXh0VHJhY2tDb250
cm9scygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxh
dGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlPiB0ZXh0VHJhY2tNZW51KCk7CisKKyAgICB2b2lk
IG91dE9mQmFuZFRleHRUcmFja3NDaGFuZ2VkKCk7CisgICAgdm9pZCB0ZXh0VHJhY2tXYXNTZWxl
Y3RlZEJ5TWVkaWFFbGVtZW50KFBhc3NSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+KTsKKyNlbmRp
ZgorCitwcml2YXRlOgorCisgICAgY2xhc3MgUGxhdGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNl
SU9TIDogcHVibGljIFBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZSB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybVRleHRUcmFja01lbnVJbnRlcmZh
Y2VJT1M+IGNyZWF0ZShNZWRpYVBsYXllclByaXZhdGVJT1MqIG93bmVyKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVy
ZmFjZUlPUyhvd25lcikpOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB+UGxhdGZvcm1U
ZXh0VHJhY2tNZW51SW50ZXJmYWNlSU9TKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHRyYWNr
c0RpZENoYW5nZSgpIE9WRVJSSURFCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX293bmVy
KQorICAgICAgICAgICAgICAgIG1fb3duZXItPm91dE9mQmFuZFRleHRUcmFja3NDaGFuZ2VkKCk7
CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgdHJhY2tXYXNTZWxlY3RlZChQYXNz
UmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiB0cmFjaykgT1ZFUlJJREUKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG1fb3duZXIpCisgICAgICAgICAgICAgICAgbV9vd25lci0+dGV4dFRyYWNr
V2FzU2VsZWN0ZWRCeU1lZGlhRWxlbWVudCh0cmFjayk7CisgICAgICAgIH0KKworICAgICAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KFBsYXRmb3JtVGV4dFRyYWNrTWVudUNsaWVudCogY2xpZW50
KSBPVkVSUklERSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CisgICAgICAgIFBsYXRmb3JtVGV4dFRy
YWNrTWVudUNsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIFBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUyhNZWRpYVBsYXll
clByaXZhdGVJT1MqKTsKKworICAgICAgICBQbGF0Zm9ybVRleHRUcmFja01lbnVDbGllbnQqIG1f
Y2xpZW50OworICAgICAgICBNZWRpYVBsYXllclByaXZhdGVJT1MqIG1fb3duZXI7CisgICAgfTsK
KworICAgIE1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVyOworICAgIFJldGFpblB0cjxOU09iamVj
dD4gbV9tZWRpYVBsYXllckhlbHBlcjsgLy8gVGhpcyBpcyB0aGUgTWVkaWFQbGF5ZXJQcm94eS4K
KyAgICBSZXRhaW5QdHI8V2ViQ29yZU1lZGlhUGxheWVyTm90aWZpY2F0aW9uSGVscGVyPiBtX29i
amNIZWxwZXI7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IG1fZGVmZXJyZWRQ
cm9wZXJ0aWVzOworCisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0
ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisKKyAgICBlbnVt
IEJ1ZmZlcmluZ1N0YXRlIHsgRW1wdHksIFVubGlrZWxleVRvS2VlcFVwLCBMaWtlbGV5VG9LZWVw
VXAsIEZ1bGwgfTsKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlQVZGSU9TKiBtX2N1cnJlbnRUcmFjazsKKyAgICBWZWN0b3I8UmVmUHRyPEluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkZJT1M+ID4gbV90ZXh0VHJhY2tzOworICAgIFJlZlB0cjxQbGF0
Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1M+IG1fbWVudUludGVyZmFjZTsKKyNlbmRpZgor
CisgICAgaW50IG1fZGVsYXlDYWxsYmFja3M7CisgICAgaW50IG1fY2hhbmdpbmdWb2x1bWU7Cisg
ICAgbXV0YWJsZSB1bnNpZ25lZCBtX2J5dGVzTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNz
OworICAgIGZsb2F0IG1fcmVxdWVzdGVkUmF0ZTsKKyAgICBCdWZmZXJpbmdTdGF0ZSBtX2J1ZmZl
cmluZ1N0YXRlOworICAgIGJvb2wgbV92aXNpYmxlIDogMTsKKyAgICBib29sIG1fdXNpbmdOZXR3
b3JrIDogMTsKKyAgICBib29sIG1faW5GdWxsU2NyZWVuIDogMTsKKyAgICBib29sIG1fc2hvdWxk
UHJlcGFyZVRvUGxheSA6IDE7CisgICAgYm9vbCBtX3ByZXBhcmluZ1RvUGxheSA6IDE7CisgICAg
Ym9vbCBtX3BhdXNlUmVxdWVzdGVkIDogMTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCisjZW5kaWYgLy8gTWVkaWFQbGF5ZXJQcml2YXRlSU9TCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvTWVkaWFQbGF5ZXJQcml2YXRlSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL01lZGlhUGxheWVyUHJp
dmF0ZUlPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZWVhNzI3OWRhZWNmMDFjZDA5MTFlMTFlNTA0N2M0OTAx
OGRkNjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL01lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbQpAQCAtMCwwICsxLDEyNjMgQEAKKworLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgIk1lZGlhUGxheWVyUHJp
dmF0ZUlPUy5oIgorCisjaW1wb3J0ICJHcmFwaGljc0xheWVyQ0EuaCIKKyNpbXBvcnQgIkluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQg
IlBsYXRmb3JtVGV4dFRyYWNrLmgiCisjaW1wb3J0ICJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5o
IgorI2ltcG9ydCAiVGltZVJhbmdlcy5oIgorI2ltcG9ydCAiVVJMLmgiCisjaW1wb3J0ICJXQUtB
cHBLaXRTdHVicy5oIgorI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgorI2ltcG9ydCA8Q29y
ZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworQGludGVyZmFjZSBXZWJDb3JlTWVkaWFQbGF5ZXJO
b3RpZmljYXRpb25IZWxwZXIgOiBOU09iamVjdAoreworICAgIE1lZGlhUGxheWVyUHJpdmF0ZUlP
UyogX2NsaWVudDsKKyAgICBCT09MIF9kZWZlcnJlZFByb3BlcnRpZXNTY2hlZHVsZWQ7Cit9Cist
IChpZClpbml0V2l0aENsaWVudDooTWVkaWFQbGF5ZXJQcml2YXRlSU9TICopY2xpZW50OworLSAo
dm9pZClkaXNjb25uZWN0OworLSAodm9pZCljYW5jZWxQZW5kaW5nUmVxdWVzdHM7CistICh2b2lk
KWRlbGF5Tm90aWZpY2F0aW9uOihpbnQpbm90aWZpY2F0aW9uOworLSAodm9pZClkZWxpdmVyTm90
aWZpY2F0aW9uOihOU051bWJlciAqKW5vdGlmaWNhdGlvbjsKKy0gKHZvaWQpc2NoZWR1bGVQcmVw
YXJlVG9QbGF5V2l0aE9wdGlvbmFsRGVsYXk6KE5TTnVtYmVyICopc2hvdWxkRGVsYXk7CistICh2
b2lkKXNjaGVkdWxlRGVmZXJyZWRQcm9wZXJ0aWVzV2l0aE9wdGlvbmFsRGVsYXk6KE5TTnVtYmVy
ICopc2hvdWxkRGVsYXk7CisKKy0gKHZvaWQpcGx1Z2luRWxlbWVudEluQmFuZEFsdGVybmF0ZVRl
eHRUcmFja3NEaWRDaGFuZ2U6KE5TQXJyYXkgKil0cmFja3M7CistICh2b2lkKXBsdWdpbkVsZW1l
bnREaWRTZWxlY3RUZXh0VHJhY2s6KE5TU3RyaW5nICopdHJhY2tJZDsKKy0gKHZvaWQpcGx1Z2lu
RWxlbWVudERpZE91dHB1dEF0dHJpYnV0ZWRTdHJpbmdzOihOU0FycmF5ICopc3RyaW5ncyBuYXRp
dmVTYW1wbGVCdWZmZXJzOihOU0FycmF5ICopYnVmZmVycyBmb3JUaW1lOihOU1RpbWVJbnRlcnZh
bCl0aW1lOworQGVuZAorCisvLyBQcml2YXRlIHNlbGVjdG9ycyBpbXBsZW1lbnRlZCBieSB0aGUg
bWVkaWEgcGxheWVyIHByb3h5IG9iamVjdCByZXR1cm5lZCBieSB0aGUgcGx1Zy1pbi4KK0BpbnRl
cmZhY2UgTlNPYmplY3QgKFdlYk1lZGlhUGxheWVyUHJveHlfRXh0cmFzKQorLSAodm9pZClfYXR0
cmlidXRlQ2hhbmdlZDooTlNTdHJpbmcgKiluYW1lIHZhbHVlOihOU1N0cmluZyAqKXZhbHVlOwor
LSAoQk9PTClfcmVhZHlGb3JQbGF5YmFjazsKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citjb25zdCBpbnQga1JlcXVpcmVkSGVscGVySW50ZXJmYWNlVmVyc2lvbiA9IDE7CisKK3N0YXRp
YyBOU1N0cmluZyAqIGNvbnN0IERlZmVycmVkUHJvcGVydHlDb250cm9sc0tleSA9IEAiY29udHJv
bHMiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgRGVmZXJyZWRQcm9wZXJ0eVBvc3RlcktleSA9
IEAicG9zdGVyIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IERlZmVycmVkUHJvcGVydHlTcmNL
ZXkgPSBAInNyYyI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBEZWZlcnJlZFBsYXlLZXkgPSBA
InBsYXkiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgRGVmZXJyZWRQcm9wZXJ0eVNlbGVjdGVk
VHJhY2tLZXkgPSBAInNlbGVjdGVkdHJhY2siOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgRGVm
ZXJyZWRQcm9wZXJ0eU91dE9mQmFuZFRyYWNrc0tleSA9IEAib3V0b2ZiYW5kdHJhY2tzIjsKKyNp
ZiBFTkFCTEUoSU9TX0FJUlBMQVkpCitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBEZWZlcnJlZFdp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkID0gQCJ3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZCI7CisjZW5kaWYKKworc3RhdGljIE5TU3RyaW5nICogY29uc3QgVGV4dFRyYWNrRGlzcGxh
eU5hbWVLZXkgPSBAImRpc3BsYXluYW1lIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFRleHRU
cmFja0xvY2FsZUlkZW50aWZpZXJLZXkgPSBAImxvY2FsZWlkZW50aWZpZXIiOworc3RhdGljIE5T
U3RyaW5nICogY29uc3QgVGV4dFRyYWNrU3VidGl0bGVzS2V5ID0gQCJzdWJ0aXRsZXMiOworc3Rh
dGljIE5TU3RyaW5nICogY29uc3QgVGV4dFRyYWNrQ2FwdGlvbnNLZXkgPSBAImNhcHRpb25zIjsK
K3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFRleHRUcmFja1R5cGVLZXkgPSBAInR5cGUiOworc3Rh
dGljIE5TU3RyaW5nICogY29uc3QgVGV4dFRyYWNrSURLZXkgPSBAImlkIjsKKworY29uc3QgaW50
IFRleHRUcmFja09mZk1lbnVJdGVtSUQgPSAtMTsKK2NvbnN0IGludCBUZXh0VHJhY2tBdXRvTWVu
dUl0ZW1JRCA9IC0yOworCitNZWRpYVBsYXllclByaXZhdGVJT1M6OlBsYXRmb3JtVGV4dFRyYWNr
TWVudUludGVyZmFjZUlPUzo6UGxhdGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlSU9TKE1lZGlh
UGxheWVyUHJpdmF0ZUlPUyogb3duZXIpCisgICAgOiBtX2NsaWVudChudWxscHRyKQorICAgICwg
bV9vd25lcihvd25lcikKK3sKK30KKyAgICAgICAgCitNZWRpYVBsYXllclByaXZhdGVJT1M6OlBs
YXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUzo6flBsYXRmb3JtVGV4dFRyYWNrTWVudUlu
dGVyZmFjZUlPUygpCit7CisgICAgbV9vd25lciA9IG51bGxwdHI7CisgICAgbV9jbGllbnQgPSBu
dWxscHRyOworfQorCitQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gTWVk
aWFQbGF5ZXJQcml2YXRlSU9TOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKK3sgCisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBNZWRpYVBsYXllclByaXZhdGVJT1MocGxheWVyKSk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5n
aW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBpZiAoaXNBdmFpbGFibGUoKSkKKyAgICAg
ICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgMCwg
MCwgMCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZUlPUzo6TWVkaWFQbGF5ZXJQcml2YXRlSU9T
KE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBtX21lZGlhUGxheWVyKHBsYXllcikKKyAgICAs
IG1fb2JqY0hlbHBlcihhZG9wdE5TKFtbV2ViQ29yZU1lZGlhUGxheWVyTm90aWZpY2F0aW9uSGVs
cGVyIGFsbG9jXSBpbml0V2l0aENsaWVudDp0aGlzXSkpCisgICAgLCBtX25ldHdvcmtTdGF0ZShN
ZWRpYVBsYXllcjo6RW1wdHkpCisgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVO
b3RoaW5nKQorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICAsIG1fY3VycmVudFRyYWNrKG51
bGxwdHIpCisjZW5kaWYKKyAgICAsIG1fZGVsYXlDYWxsYmFja3MoMCkKKyAgICAsIG1fY2hhbmdp
bmdWb2x1bWUoMCkKKyAgICAsIG1fYnl0ZXNMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3Mo
MCkKKyAgICAsIG1fcmVxdWVzdGVkUmF0ZSgwKQorICAgICwgbV9idWZmZXJpbmdTdGF0ZShFbXB0
eSkKKyAgICAsIG1fdmlzaWJsZShmYWxzZSkKKyAgICAsIG1fdXNpbmdOZXR3b3JrKGZhbHNlKQor
ICAgICwgbV9pbkZ1bGxTY3JlZW4oZmFsc2UpCisgICAgLCBtX3Nob3VsZFByZXBhcmVUb1BsYXko
ZmFsc2UpCisgICAgLCBtX3ByZXBhcmluZ1RvUGxheShmYWxzZSkKKyAgICAsIG1fcGF1c2VSZXF1
ZXN0ZWQoZmFsc2UpCit7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZUlPUzo6fk1lZGlhUGxheWVy
UHJpdmF0ZUlPUygpCit7CisgICAgY2xlYXJUZXh0VHJhY2tzKCk7CisgICAgW21fb2JqY0hlbHBl
ci5nZXQoKSBkaXNjb25uZWN0XTsKKyAgICBpZiAoW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfc2V0RGVsZWdhdGU6KV0pCisgICAgICAgIFtt
X21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXREZWxlZ2F0ZTpuaWxdOworICAgIFttX21lZGlh
UGxheWVySGVscGVyLmdldCgpIF9kaXNjb25uZWN0XTsKK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVJT1M6OnNldE1lZGlhUGxheWVyUHJveHkoV2ViTWVkaWFQbGF5ZXJQcm94eSAqcHJveHkp
Cit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIFttX21lZGlhUGxheWVy
SGVscGVyLmdldCgpIF9kaXNjb25uZWN0XTsKKworICAgIG1fbWVkaWFQbGF5ZXJIZWxwZXIgPSBu
dWxscHRyOworCisgICAgaWYgKHByb3h5KSB7CisgICAgICAgIC8vIGRvbid0IHRyeSB0byB1c2Ug
YSBoZWxwZXIgaWYgdGhlIGludGVyZmFjZSB2ZXJzaW9uIGlzIHRvbyBsb3cKKyAgICAgICAgaWYg
KFtwcm94eSBfaW50ZXJmYWNlVmVyc2lvbl0gPCAga1JlcXVpcmVkSGVscGVySW50ZXJmYWNlVmVy
c2lvbikgeworICAgICAgICAgICAgTlNMb2coQCJNZWRpYSBwbGF5ZXIgaGVscGVyIGludGVyZmFj
ZSB2ZXJzaW9uIHRvbyBsb3csIGV4aXRpbmcuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgbV9tZWRpYVBsYXllckhlbHBlciA9IGFkb3B0TlMoc3RhdGljX2Nhc3Q8
TlNPYmplY3QgKj4oW3Byb3h5IHJldGFpbl0pKTsKKyAgICAgICAgaWYgKFttX21lZGlhUGxheWVy
SGVscGVyLmdldCgpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3NldERlbGVnYXRlOild
KQorICAgICAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldERlbGVnYXRlOm1f
b2JqY0hlbHBlci5nZXQoKV07CisKKyAgICAgICAgYWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNo
YW5nZWQoKTsKKyAgICB9CisKKyAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAg
IE5TVVJMICpuc1VSTCA9IFVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7CisKKyAgICBpZiAoIW1f
bWVkaWFQbGF5ZXJIZWxwZXIpIHsKKyAgICAgICAgYWRkRGVmZXJyZWRSZXF1ZXN0KERlZmVycmVk
UHJvcGVydHlTcmNLZXksIFtuc1VSTCBhYnNvbHV0ZVN0cmluZ10pOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgW21fZGVmZXJyZWRQcm9wZXJ0aWVzLmdldCgpIHJlbW92ZU9iamVjdEZv
cktleTpEZWZlcnJlZFByb3BlcnR5U3JjS2V5XTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVl
KTsKKyAgICB7CisgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9h
ZGluZykgeworICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGlu
ZzsKKyAgICAgICAgICAgIG1fbWVkaWFQbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobV9yZWFkeVN0YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlTm90
aGluZykgeworICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3Ro
aW5nOworICAgICAgICAgICAgbV9tZWRpYVBsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fcGF1c2VSZXF1ZXN0ZWQgPSBmYWxzZTsKKyAgICAgICAgbV9w
cmVwYXJpbmdUb1BsYXkgPSBmYWxzZTsKKworICAgICAgICBbbV9tZWRpYVBsYXllckhlbHBlci5n
ZXQoKSBfY2FuY2VsTG9hZF07CisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9s
b2FkOm5zVVJMXTsKKyAgICB9CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6Y2FuY2VsTG9hZCgpCit7CisgICAgW21fb2JqY0hl
bHBlci5nZXQoKSBjYW5jZWxQZW5kaW5nUmVxdWVzdHNdOworICAgIFttX2RlZmVycmVkUHJvcGVy
dGllcy5nZXQoKSByZW1vdmVBbGxPYmplY3RzXTsKKworICAgIGlmICghbV9tZWRpYVBsYXllckhl
bHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9j
YW5jZWxMb2FkXTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OmFkZERlZmVycmVk
UmVxdWVzdChOU1N0cmluZyAqbmFtZSwgaWQgdmFsdWUpCit7CisgICAgaWYgKCFtX2RlZmVycmVk
UHJvcGVydGllcykKKyAgICAgICAgbV9kZWZlcnJlZFByb3BlcnRpZXMgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOworICAgIFttX2RlZmVycmVkUHJvcGVydGll
cy5nZXQoKSBzZXRPYmplY3Q6dmFsdWUgPyB2YWx1ZSA6IEAiIiBmb3JLZXk6bmFtZV07Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpwcm9jZXNzRGVmZXJyZWRSZXF1ZXN0cygpCit7
CisgICAgaWYgKCFbbV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgY291bnRdKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICB7CisgICAgICAgIFJl
dGFpblB0cjxOU0RpY3Rpb25hcnk+IGxvY2FsUHJvcGVydGllcyA9IGFkb3B0TlMoW1tOU0RpY3Rp
b25hcnkgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTptX2RlZmVycmVkUHJvcGVydGllcy5nZXQo
KV0pOworICAgICAgICBbbV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVtb3ZlQWxsT2JqZWN0
c107CisKKyAgICAgICAgLy8gQWx3YXlzIHNldCB0aGUgc3JjIGZpcnN0LgorICAgICAgICBpZCB2
YWx1ZSA9IFtsb2NhbFByb3BlcnRpZXMuZ2V0KCkgb2JqZWN0Rm9yS2V5OkRlZmVycmVkUHJvcGVy
dHlTcmNLZXldOworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBsb2FkKHZhbHVlKTsK
KworICAgICAgICBmb3IgKE5TU3RyaW5nICpuYW1lIGluIGxvY2FsUHJvcGVydGllcy5nZXQoKSkg
eworICAgICAgICAgICAgdmFsdWUgPSBbbG9jYWxQcm9wZXJ0aWVzLmdldCgpIG9iamVjdEZvcktl
eTpuYW1lXTsKKworICAgICAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlSU9T
Ojpwcm9jZXNzRGVmZXJyZWRSZXF1ZXN0cyglcCkgLSBwcm9jZXNzaW5nICVzIiwgdGhpcywgW25h
bWUgVVRGOFN0cmluZ10pOworCisgICAgICAgICAgICBpZiAoW25hbWUgaXNFcXVhbFRvU3RyaW5n
OkRlZmVycmVkUHJvcGVydHlQb3N0ZXJLZXldKQorICAgICAgICAgICAgICAgIHNldFBvc3Rlcih2
YWx1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6RGVmZXJy
ZWRQcm9wZXJ0eUNvbnRyb2xzS2V5XSkKKyAgICAgICAgICAgICAgICBzZXRDb250cm9scyhbdmFs
dWUgYm9vbFZhbHVlXSk7CisgICAgICAgICAgICBlbHNlIGlmIChbbmFtZSBpc0VxdWFsVG9TdHJp
bmc6RGVmZXJyZWRQbGF5S2V5XSkKKyAgICAgICAgICAgICAgICBwbGF5KCk7CisgICAgICAgICAg
ICBlbHNlIGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6RGVmZXJyZWRQcm9wZXJ0eU91dE9mQmFu
ZFRyYWNrc0tleV0pCisgICAgICAgICAgICAgICAgc2V0T3V0T2ZCYW5kVGV4dFRyYWNrcyh2YWx1
ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6RGVmZXJyZWRQ
cm9wZXJ0eVNlbGVjdGVkVHJhY2tLZXldKQorICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkVGV4
dFRyYWNrKHZhbHVlKTsKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCisgICAgICAgICAgICBlbHNl
IGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6RGVmZXJyZWRXaXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZF0pCisgICAgICAgICAgICAgICAgc2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWQoW3ZhbHVlIGJvb2xWYWx1ZV0pOworI2VuZGlmCisgICAgICAgICAgICBlbHNlIGlmICghW25h
bWUgaXNFcXVhbFRvU3RyaW5nOkRlZmVycmVkUHJvcGVydHlTcmNLZXldKQorICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZUNoYW5nZWQobmFtZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorICAg
IHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJ
T1M6OnNldFBvc3Rlcihjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBzZXREZWxheUNhbGxiYWNr
cyh0cnVlKTsKKyAgICB7CisgICAgICAgIE5TVVJMICpuc1VSTCA9IFVSTChQYXJzZWRVUkxTdHJp
bmcsIHVybCk7CisgICAgICAgIGlmIChtX21lZGlhUGxheWVySGVscGVyKSB7CisgICAgICAgICAg
ICBbbV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkRlZmVycmVk
UHJvcGVydHlQb3N0ZXJLZXldOworICAgICAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0
KCkgX3NldFBvc3Rlcjpuc1VSTF07CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgYWRkRGVmZXJyZWRSZXF1ZXN0KERlZmVycmVkUHJvcGVydHlQb3N0ZXJLZXksIHVybCk7Cisg
ICAgfQorICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVJT1M6OnNldENvbnRyb2xzKGJvb2wgY29udHJvbHMpCit7CisgICAgc2V0RGVsYXlD
YWxsYmFja3ModHJ1ZSk7CisgICAgeworICAgICAgICBpZiAobV9tZWRpYVBsYXllckhlbHBlcikg
eworICAgICAgICAgICAgW21fZGVmZXJyZWRQcm9wZXJ0aWVzLmdldCgpIHJlbW92ZU9iamVjdEZv
cktleTpEZWZlcnJlZFByb3BlcnR5Q29udHJvbHNLZXldOworICAgICAgICAgICAgW21fbWVkaWFQ
bGF5ZXJIZWxwZXIuZ2V0KCkgX3NldENvbnRyb2xzOmNvbnRyb2xzXTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBhZGREZWZlcnJlZFJlcXVlc3QoRGVmZXJyZWRQcm9wZXJ0
eUNvbnRyb2xzS2V5LCBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Y29udHJvbHNdKTsKKyAgICB9
CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cygpCit7CisgICAgaWYgKG1fc2hvdWxkUHJl
cGFyZVRvUGxheSAmJiAhbV9wcmVwYXJpbmdUb1BsYXkpCisgICAgICAgIFttX29iamNIZWxwZXIu
Z2V0KCkgc2NoZWR1bGVQcmVwYXJlVG9QbGF5V2l0aE9wdGlvbmFsRGVsYXk6W05TTnVtYmVyIG51
bWJlcldpdGhCb29sOllFU11dOworICAgIGlmIChbbV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkg
Y291bnRdKQorICAgICAgICBbbV9vYmpjSGVscGVyLmdldCgpIHNjaGVkdWxlRGVmZXJyZWRQcm9w
ZXJ0aWVzV2l0aE9wdGlvbmFsRGVsYXk6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU11dOwor
ICAgIG1fc2hvdWxkUHJlcGFyZVRvUGxheSA9IGZhbHNlOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6cHJlcGFyZVRvUGxheSgpCit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVs
cGVyKSB7CisgICAgICAgIC8vIE5vdCBob29rZWQgdXAgdG8gdGhlIHBsdWctaW4geWV0LCByZW1l
bWJlciB0aGlzIHJlcXVlc3QuCisgICAgICAgIG1fc2hvdWxkUHJlcGFyZVRvUGxheSA9IHRydWU7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wcmVwYXJpbmdUb1BsYXkgfHwg
bV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9zaG91bGRQcmVwYXJlVG9QbGF5ID0gZmFsc2U7CisgICAgbV9wcmVwYXJp
bmdUb1BsYXkgPSB0cnVlOworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgICAg
IFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9wcmVwYXJlRm9yUGxheWJhY2tdOworICAgIHNl
dERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKworCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlP
Uzo6cGxheSgpCit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKSB7CisgICAgICAgIGFk
ZERlZmVycmVkUmVxdWVzdChEZWZlcnJlZFBsYXlLZXksIG5pbCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX3BhdXNlUmVxdWVzdGVkID0gZmFsc2U7CisgICAgc2V0RGVsYXlDYWxs
YmFja3ModHJ1ZSk7CisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9wbGF5XTsK
KyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlSU9TOjpwYXVzZSgpCit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3BhdXNlUmVxdWVzdGVkID0gdHJ1ZTsKKyAgICBzZXREZWxheUNh
bGxiYWNrcyh0cnVlKTsKKyAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3BhdXNl
XTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6ZHVyYXRpb24oKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhl
bHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZmxvYXQgZHVyYXRpb24gPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2R1cmF0aW9uXSk7CisgICAgcmV0
dXJuIGR1cmF0aW9uID09IC0xID8gbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpIDog
ZHVyYXRpb247Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6Y3VycmVudFRpbWUo
KSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihbbV9tZWRpYVBsYXllckhlbHBlci5n
ZXQoKSBfY3VycmVudFRpbWVdKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNl
ZWsoZmxvYXQgdGltZSkKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAg
IHJldHVybjsKKyAgICBmbG9hdCBkdXJhdGlvbiA9IHRoaXMtPmR1cmF0aW9uKCk7CisgICAgW21f
bWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldEN1cnJlbnRUaW1lOih0aW1lID4gZHVyYXRpb24g
PyBkdXJhdGlvbiA6IHRpbWUpXTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNl
dEVuZFRpbWUoZmxvYXQgdGltZSkKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2V0RW5kVGlt
ZTp0aW1lXTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnBhdXNlZCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gIXJhdGUoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNl
ZWtpbmcoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2Vl
a2luZ107Cit9CisKK0ludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpuYXR1cmFsU2l6ZSgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm4g
SW50U2l6ZSgpOworCisgICAgTlNTaXplIHNpemUgPSBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQo
KSBfbmF0dXJhbFNpemVdOworICAgIHJldHVybiBJbnRTaXplKHNpemUpOworfQorCitib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUlPUzo6aGFzVmlkZW8oKSBjb25zdAoreworICAgIGlmICghbV9tZWRp
YVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9tZWRp
YVBsYXllckhlbHBlci5nZXQoKSBfaGFzVmlkZW9dOworfQorCitib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6aGFzQXVkaW8oKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBl
ci5nZXQoKSBfaGFzQXVkaW9dOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnZv
bHVtZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF92b2x1
bWVdOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c2V0Vm9sdW1lKGZsb2F0IGlu
Vm9sdW1lKQoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlciB8fCBtX2NoYW5naW5nVm9s
dW1lKQorICAgICAgICByZXR1cm47CisgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3Nl
dFZvbHVtZTppblZvbHVtZV07Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cmF0
ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9yYXRlXTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldFJhdGUoZmxvYXQgaW5SYXRlKQor
eworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIG1f
cmVxdWVzdGVkUmF0ZSA9IGluUmF0ZTsKKyAgICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBf
c2V0UmF0ZTppblJhdGVdOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c2V0TXV0
ZWQoYm9vbCBpbk11dGUpCit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQorICAgICAg
ICByZXR1cm47CisgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldE11dGVkOmluTXV0
ZV07Cit9CisKK2ludCBNZWRpYVBsYXllclByaXZhdGVJT1M6OmRhdGFSYXRlKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfZGF0YVJhdGVdOworfQorCitNZWRpYVBs
YXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6bmV0d29ya1N0YXRlKCkg
Y29uc3QgCit7IAorICAgIHJldHVybiBtX25ldHdvcmtTdGF0ZTsKK30KKworTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpyZWFkeVN0YXRlKCkgY29uc3QgCit7
CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRl
SU9TOjptYXhUaW1lQnVmZmVyZWQoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhl
bHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIFttX21lZGlhUGxheWVySGVscGVy
LmdldCgpIF9tYXhUaW1lQnVmZmVyZWRdOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlP
Uzo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJI
ZWxwZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB1bnNpZ25lZCBjdXJyZW50Qnl0ZXNM
b2FkZWQgPSBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfYnl0ZXNMb2FkZWRdOworICAgIGJv
b2wgZGlkTG9hZGluZ1Byb2dyZXNzID0gY3VycmVudEJ5dGVzTG9hZGVkICE9IG1fYnl0ZXNMb2Fk
ZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3M7CisgICAgbV9ieXRlc0xvYWRlZEF0TGFzdERpZExv
YWRpbmdQcm9ncmVzcyA9IGN1cnJlbnRCeXRlc0xvYWRlZDsKKyAgICByZXR1cm4gZGlkTG9hZGlu
Z1Byb2dyZXNzOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6dG90YWxCeXRlc0tu
b3duKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdG90YWxCeXRlcygpID4gMDsKK30KKwordW5zaWdu
ZWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjp0b3RhbEJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBbbV9t
ZWRpYVBsYXllckhlbHBlci5nZXQoKSBfdG90YWxCeXRlc107Cit9CisKK2Zsb2F0IE1lZGlhUGxh
eWVyUHJpdmF0ZUlPUzo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVk
aWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiAwLjBmOworICAgIHJldHVybiBbbV9tZWRp
YVBsYXllckhlbHBlci5nZXQoKSBfbWF4VGltZVNlZWthYmxlXTsKK30KKworUGFzc1JlZlB0cjxU
aW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVJT1M6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAg
ICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwor
CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm4gdGltZVJhbmdl
cy5yZWxlYXNlKCk7CisKKyAgICBOU0FycmF5ICpyYW5nZXMgPSBbbV9tZWRpYVBsYXllckhlbHBl
ci5nZXQoKSBfYnVmZmVyZWRUaW1lUmFuZ2VzXTsKKyAgICBpZiAoIXJhbmdlcykKKyAgICAgICAg
cmV0dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOworCisgICAgZmxvYXQgdGltZVJhbmdlWzJdOwor
ICAgIGludCBjb3VudCA9IFtyYW5nZXMgY291bnRdOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgeworICAgICAgICBOU0RhdGEgKnJhbmdlID0gW3JhbmdlcyBvYmplY3RBdElu
ZGV4OmldOworICAgICAgICBbcmFuZ2UgZ2V0Qnl0ZXM6dGltZVJhbmdlIGxlbmd0aDooTlNVSW50
ZWdlcilzaXplb2YodGltZVJhbmdlKV07CisKKyAgICAgICAgdGltZVJhbmdlcy0+YWRkKHRpbWVS
YW5nZVswXSwgdGltZVJhbmdlWzFdKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGltZVJhbmdlcy5y
ZWxlYXNlKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRTaXplKGNvbnN0
IEludFNpemUmKQoreworICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGhl
cmU/Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRWaXNpYmxlKGJvb2wgdmlz
aWJsZSkKK3sKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBkbyBhbnl0aGluZyBtb3JlIGhl
cmU/CisgICAgaWYgKG1fdmlzaWJsZSAhPSB2aXNpYmxlKQorICAgICAgICBtX3Zpc2libGUgPSB2
aXNpYmxlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYpCit7CisgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLgor
fQorCitzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IHR5cGVDYWNoZTsKKyAgICBzdGF0aWMg
Ym9vbCB0eXBlTGlzdEluaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICBpZiAodHlwZUxpc3RJbml0
aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIHR5cGVDYWNoZTsKKworICAgIHR5cGVMaXN0SW5pdGlh
bGl6ZWQgPSB0cnVlOworCisgICAgLy8gRklYTUU6IFNob3VsZCBnZXQgdGhlc2UgZnJvbSB0aGUg
aGVscGVyLCBidXQgd2UgZG9uJ3QgaGF2ZSBhbiBpbnN0YW5jZSB3aGVuIHRoaXMgaXMgY2FsbGVk
LgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0eXBlTGlzdFtdID0geworICAgICAgICAiYXBwbGlj
YXRpb24veC1tcGVndXJsIiwKKyAgICAgICAgImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJs
IiwKKyAgICAgICAgImF1ZGlvLzNncHAiLAorICAgICAgICAiYXVkaW8vM2dwcDIiLAorICAgICAg
ICAiYXVkaW8vYWFjIiwKKyAgICAgICAgImF1ZGlvL2FpZmYiLAorICAgICAgICAiYXVkaW8vYW1y
IiwKKyAgICAgICAgImF1ZGlvL2Jhc2ljIiwKKyAgICAgICAgImF1ZGlvL21wMyIsCisgICAgICAg
ICJhdWRpby9tcDQiLAorICAgICAgICAiYXVkaW8vbXBlZyIsCisgICAgICAgICJhdWRpby9tcGVn
dXJsIiwKKyAgICAgICAgImF1ZGlvL21wZWczIiwKKyAgICAgICAgImF1ZGlvL3NjcGxzIiwKKyAg
ICAgICAgImF1ZGlvL3dhdiIsCisgICAgICAgICJhdWRpby94LWFhYyIsCisgICAgICAgICJhdWRp
by94LWFpZmYiLAorICAgICAgICAiYXVkaW8veC1jYWYiLAorICAgICAgICAiYXVkaW8veC1tNGEi
LAorICAgICAgICAiYXVkaW8veC1tNGIiLAorICAgICAgICAiYXVkaW8veC1tNHAiLAorICAgICAg
ICAiYXVkaW8veC1tNHIiLAorICAgICAgICAiYXVkaW8veC1tcDMiLAorICAgICAgICAiYXVkaW8v
eC1tcGVnIiwKKyAgICAgICAgImF1ZGlvL3gtbXBlZzMiLAorICAgICAgICAiYXVkaW8veC1tcGVn
dXJsIiwKKyAgICAgICAgImF1ZGlvL3gtc2NwbHMiLAorICAgICAgICAiYXVkaW8veC13YXYiLAor
ICAgICAgICAidmlkZW8vM2dwcCIsCisgICAgICAgICJ2aWRlby8zZ3BwMiIsCisgICAgICAgICJ2
aWRlby9tcDQiLAorICAgICAgICAidmlkZW8vcXVpY2t0aW1lIiwKKyAgICAgICAgInZpZGVvL3gt
bTR2IiwKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhZGRlZCB0byByZXN0b3JlIG9sZCBi
ZWhhdmlvciBmb3I6CisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS85NzkyOTY0PiBFbWJlZGRl
ZCB2aWRlb3MgZG9uJ3QgcGxheSBvbiBzcGllZ2VsLmRlICguaHRtbCBmaWxlIHJlZGlyZWN0cykK
KyAgICAgICAgLy8gSG93ZXZlciwgYSBiZXR0ZXIgZml4IGlzIHRyYWNrZWQgYnk6CisgICAgICAg
IC8vIDxodHRwOi8vd2Via2l0Lm9yZy9iLzY0ODExPiA8dmlkZW8+ICIuaHRtbCIgc3JjIHdpdGgg
YSAzMDEgcmVkaXJlY3QgZmFpbHMgdG8gbG9hZAorICAgICAgICAidGV4dC9odG1sIiwKKyAgICB9
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHR5cGVMaXN0
KTsgKytpKQorICAgICAgICB0eXBlQ2FjaGUuZ2V0KCkuYWRkKHR5cGVMaXN0W2ldKTsKKworICAg
IHJldHVybiB0eXBlQ2FjaGU7Cit9CisKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQ
bGF5ZXJQcml2YXRlSU9TOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFy
YW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICAvLyBPbmx5IHJldHVybiAiSXNTdXBwb3J0ZWQi
IGlmIHRoZXJlIGlzIG5vIGNvZGVjcyBwYXJhbWV0ZXIgZm9yIG5vdyBhcyB0aGVyZSBpcyBubyB3
YXkgdG8gYXNrIENvcmVNZWRpYQorICAgIC8vIGlmIGl0IHN1cHBvcnRzIGFuIGV4dGVuZGVkIE1J
TUUgdHlwZS4KKyAgICBpZiAoIXBhcmFtZXRlcnMudHlwZS5pc0VtcHR5KCkgJiYgbWltZVR5cGVD
YWNoZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkpCisgICAgICAgIHJldHVybiBwYXJhbWV0
ZXJzLmNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRp
YVBsYXllcjo6SXNTdXBwb3J0ZWQ7CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3Vw
cG9ydGVkOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6Z2V0U3VwcG9ydGVkVHlw
ZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcykKK3sKKyAgICB0eXBlcyA9IG1pbWVUeXBlQ2FjaGUo
KTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6OmlzQXZhaWxhYmxlKCkKK3sKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShJT1NfQUlSUExBWSkKK2Jvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlSU9TOjppc0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2lzQ3VycmVudFBsYXliYWNr
VGFyZ2V0V2lyZWxlc3NdOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c2hvd1Bs
YXliYWNrVGFyZ2V0UGlja2VyKCkKK3sKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAg
ICAgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3Nob3dQbGF5YmFja1RhcmdldFBpY2tl
cl07CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCitib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6aGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMoKSBjb25zdAoreworICAgIGlm
ICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfaGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHNd
OworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6d2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWQoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBf
d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRdOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6c2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkK
K3sKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICB7CisgICAgICAgIGlmIChtX21l
ZGlhUGxheWVySGVscGVyKSB7CisgICAgICAgICAgICBbbV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0
KCkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkRlZmVycmVkV2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWRdOworICAgICAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldFdpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkOmRpc2FibGVkXTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBhZGREZWZlcnJlZFJlcXVlc3QoRGVmZXJyZWRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZCwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmRpc2FibGVkXSk7CisgICAgfQorICAgIHNl
dERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6
OnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKGJvb2wgaGFzTGlzdGVu
ZXJzKQoreworICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXRIYXNQbGF5YmFja1Rh
cmdldEF2YWlsYWJpbGl0eUxpc3RlbmVyczpoYXNMaXN0ZW5lcnNdOworfQorI2VuZGlmCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlP
Uzo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisjZW5kaWYKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OmVudGVyRnVsbHNj
cmVlbigpCit7CisgICAgLy8gVGhlIGNvbnN0IGNhc3QgaXMgYSB3b3JrYXJvdW5kIGR1ZSB0byBP
cGVuU291cmNlIGNoYW5naW5nIHRoZSBzaWduYXR1cmUgdG8gY29uc3QuCisgICAgTWVkaWFQbGF5
ZXJQcml2YXRlSU9TKiBtdXRhYmxlVGhpcyA9IGNvbnN0X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRl
SU9TKj4odGhpcyk7CisgICAgbXV0YWJsZVRoaXMtPnNldERlbGF5Q2FsbGJhY2tzKHRydWUpOwor
ICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9lbnRlckZ1bGxTY3JlZW5dOworICAgIG11
dGFibGVUaGlzLT5zZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlSU9TOjpleGl0RnVsbHNjcmVlbigpCit7CisgICAgc2V0RGVsYXlDYWxsYmFja3Mo
dHJ1ZSk7CisgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2V4aXRGdWxsU2NyZWVuXTsK
KyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlSU9TOjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpIHsKKyAgICAgICAgYWRk
RGVmZXJyZWRSZXF1ZXN0KG5hbWUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihfYXR0cmlidXRlQ2hhbmdlZDp2YWx1ZTopXSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0
KCkgX2F0dHJpYnV0ZUNoYW5nZWQ6bmFtZSB2YWx1ZTp2YWx1ZV07CisgICAgc2V0RGVsYXlDYWxs
YmFja3MoZmFsc2UpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cmVhZHlGb3JQ
bGF5YmFjaygpIGNvbnN0Cit7CisgICAgaWYgKFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3JlYWR5Rm9yUGxheWJhY2spXSkKKyAgICAgICAg
cmV0dXJuIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9yZWFkeUZvclBsYXliYWNrXTsKKyAg
ICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpyZWFkeUZvclBsYXliYWNrKCk7
Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpoYXNDbG9zZWRDYXB0aW9ucygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9oYXNDbG9zZWRD
YXB0aW9uc107Cit9ICAgIAorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c2V0Q2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKGJvb2wgZmxhZykKK3sKKyAgICBbbV9tZWRpYVBsYXllckhlbHBlci5n
ZXQoKSBfc2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlOmZsYWddOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUlPUzo6ZGVsaXZlck5vdGlmaWNhdGlvbihNZWRpYVBsYXllclByb3h5Tm90aWZp
Y2F0aW9uVHlwZSBub3RpZmljYXRpb24pIAoreworICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6ZGVsaXZlck5vdGlmaWNhdGlvbiglcCkgLSBub3RpZmljYXRpb24gPSAlaSwg
ZW50ZXJpbmcgd2l0aCBuZXR3b3JrU3RhdGUgPSAlaSwgcmVhZHlTdGF0ZSA9ICVpIiwgCisgICAg
ICAgIHRoaXMsIHN0YXRpY19jYXN0PGludD4obm90aWZpY2F0aW9uKSwgc3RhdGljX2Nhc3Q8aW50
PihtX25ldHdvcmtTdGF0ZSksIHN0YXRpY19jYXN0PGludD4obV9yZWFkeVN0YXRlKSk7CisKKyAg
ICBpZiAoIW1fbWVkaWFQbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjYWxsYmFj
a3NEZWxheWVkKCkpIHsKKyAgICAgICAgW21fb2JqY0hlbHBlci5nZXQoKSBkZWxheU5vdGlmaWNh
dGlvbjpub3RpZmljYXRpb25dOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWVkaWFQ
bGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsKKyAg
ICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOwor
CisgICAgc3dpdGNoIChub3RpZmljYXRpb24pIHsKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZp
Y2F0aW9uU3RhcnRVc2luZ05ldHdvcms6CisgICAgICAgIG1fdXNpbmdOZXR3b3JrID0gdHJ1ZTsK
KyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwgTWVkaWFQbGF5ZXI6OkxvYWRpbmcpCisgICAg
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uU3RvcFVzaW5nTmV0d29yazoK
KyAgICAgICAgbV91c2luZ05ldHdvcmsgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fcmVhZHlTdGF0
ZSA8IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGEgJiYgbV9uZXR3b3JrU3RhdGUgPCBNZWRp
YVBsYXllcjo6Rm9ybWF0RXJyb3IpCisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlh
UGxheWVyOjpJZGxlOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3Rp
ZmljYXRpb25HYWluRm9jdXM6CisgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxh
eWVyOjpMb2FkaW5nKQorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6
TG9hZGluZzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0
aW9uTG9zZUZvY3VzOgorICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6
Rm9ybWF0RXJyb3IpCisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpJ
ZGxlOworICAgICAgICBpZiAobV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0
YSkKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvbkVudGVy
ZWRGdWxsc2NyZWVuOgorICAgICAgICBtX2luRnVsbFNjcmVlbiA9IHRydWU7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvbkV4aXRlZEZ1bGxzY3JlZW46
IHsKKyAgICAgICAgbV9pbkZ1bGxTY3JlZW4gPSBmYWxzZTsKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCisgICAgICAgIHNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKDApOworI2VuZGlmCisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25SZWFk
eUZvckluc3BlY3Rpb246CisgICAgICAgIC8vIFRoZSBidWZmZXJpbmcgc3RhdGUgc29tZXRpbWVz
IHJlYWNoZXMgImxpa2VseSB0byBrZWVwIHVwIiBvciAiZnVsbCIgYmVmb3JlIHRoZSBwbGF5ZXIg
aXRlbSBpcworICAgICAgICAvLyByZWFkeSBmb3IgaW5zcGVjdGlvbi4gSW4gdGhhdCBjYXNlIGFk
dmFuY2UgZGlyZWN0bHkgdG8gSGF2ZUVub3VnaERhdGEuCisgICAgICAgIGlmIChtX2J1ZmZlcmlu
Z1N0YXRlID4gVW5saWtlbGV5VG9LZWVwVXApCisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
cmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGE7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvbk1lZGlhVmFsaWRhdGVkOgorICAg
ICAgICBpZiAobV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6SWRsZSAmJiAhbV9wcmVwYXJp
bmdUb1BsYXkpCisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxl
OworICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvbk1lZGlhRmFpbGVkVG9WYWxpZGF0ZToKKyAg
ICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7CisgICAgICAg
IG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsgCisgICAgICAgIG1fdXNp
bmdOZXR3b3JrID0gZmFsc2U7CisgICAgICAgIG1fcHJlcGFyaW5nVG9QbGF5ID0gZmFsc2U7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvblBsYXliYWNr
RmFpbGVkOiB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4ndCBjdXJyZW50bHkgdGVsbCB0aGUg
ZGlmZmVyZW5jZSBiZXR3ZWVuIE5ldHdvcmtFcnJvciBhbmQgRGVjb2RlRXJyb3IuCisgICAgICAg
IG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkRlY29kZUVycm9yOworCisgICAgICAgIC8v
IERvbid0IHJlc2V0IHJlYWR5U3RhdGUsIHdoYXQgd2UgaGF2ZSBsb2FkZWQgYWxyZWFkeSBtYXkg
YmUgcGxheWFibGUuCisgICAgICAgIG1fdXNpbmdOZXR3b3JrID0gZmFsc2U7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25SZWFkeUZvclBs
YXliYWNrOgorICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6TG9hZGlu
ZykKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Cisg
ICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uRGlkUGxheVRvVGhl
RW5kOgorICAgICAgICBtX21lZGlhUGxheWVyLT50aW1lQ2hhbmdlZCgpOworICAgICAgICBicmVh
azsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25TdHJlYW1MaWtlbHlUb0tlZXBV
cDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwgTWVkaWFQbGF5ZXI6OkxvYWRpbmcpCisg
ICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAg
ICBpZiAobV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBtX3JlYWR5
U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpCisgICAgICAgICAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgIG1fYnVmZmVyaW5n
U3RhdGUgPSBMaWtlbGV5VG9LZWVwVXA7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRp
YVBsYXllck5vdGlmaWNhdGlvblN0cmVhbUJ1ZmZlckZ1bGw6CisgICAgICAgIC8vIFRoZSBtZWRp
YSBidWZmZXJzIGFyZSBmdWxsIHNvIG5vIG1vcmUgZGF0YSBjYW4gYmUgbG9hZGVkLiBUaGlzIGlz
bid0IHJlYWxseSB0aGUgdGhlIHNhbWUgdGhpbmcgYXMgCisgICAgICAgIC8vICJIYXZlRnV0dXJl
RGF0YSIsIGJ1dCBub3RoaW5nIG1vcmUgd2lsbCBiZSBsb2FkZWQgdW50aWwgcGxheWJhY2sgY29u
c3VtZXMgc29tZSBvZiB0aGUgYnVmZmVyZWQgZGF0YQorICAgICAgICAvLyBzbyBidW1wIHRoZSBy
ZWFkeVN0YXRlIHRvIGFsbG93IHBsYXliYWNrLgorICAgICAgICBpZiAobV9yZWFkeVN0YXRlID4g
TWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6
SGF2ZUVub3VnaERhdGEpCisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Oklk
bGU7CisgICAgICAgIG1fYnVmZmVyaW5nU3RhdGUgPSBGdWxsOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25TdHJlYW1SYW5Ecnk6CisgICAgICAgIG1f
bmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIGlmIChtX3JlYWR5
U3RhdGUgPiBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhKQorICAgICAgICAgICAgbV9yZWFkeVN0
YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YTsKKyAgICAgICAgbV9idWZmZXJpbmdT
dGF0ZSA9IEVtcHR5OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3Rp
ZmljYXRpb25TdHJlYW1Vbmxpa2VseVRvS2VlcFVwOgorICAgICAgICBtX25ldHdvcmtTdGF0ZSA9
IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBpZiAobV9yZWFkeVN0YXRlID4gTWVkaWFQ
bGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUVu
b3VnaERhdGEpCisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1
dHVyZURhdGE7CisgICAgICAgIG1fYnVmZmVyaW5nU3RhdGUgPSBVbmxpa2VsZXlUb0tlZXBVcDsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uRmlsZUxv
YWRlZDoKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOworICAg
ICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvblRpbWVKdW1wZWQ6Cisg
ICAgICAgIC8vIFNvbWV0aW1lcyBnZXQgYSBzcHVyaW91cyAidGltZSBqdW1wZWQiIHdoZW4gdGhl
IG1vdmllIGlzIGJlaW5nIHNldCB1cCBvciBpbW1lZGlhdGVseSBhZnRlciBwYXVzaW5nLCAKKyAg
ICAgICAgLy8gZG9uJ3QgZmFsbCBmb3IgaXQuCisgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPj0g
TWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YSkKKyAgICAgICAgICAgIG1fbWVkaWFQbGF5ZXIt
PnRpbWVDaGFuZ2VkKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5v
dGlmaWNhdGlvbk11dGVkRGlkQ2hhbmdlOgorICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRp
b25Wb2x1bWVEaWRDaGFuZ2U6CisgICAgICAgICsrbV9jaGFuZ2luZ1ZvbHVtZTsKKyAgICAgICAg
bV9tZWRpYVBsYXllci0+dm9sdW1lQ2hhbmdlZCh2b2x1bWUoKSk7CisgICAgICAgIC0tbV9jaGFu
Z2luZ1ZvbHVtZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZp
Y2F0aW9uU2l6ZURpZENoYW5nZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxh
eWVyTm90aWZpY2F0aW9uUGxheVBhdXNlQnV0dG9uUHJlc3NlZDoKKyAgICBjYXNlIE1lZGlhUGxh
eWVyUmVxdWVzdEJlZ2luUGxheWJhY2s6CisgICAgY2FzZSBNZWRpYVBsYXllclJlcXVlc3RQYXVz
ZVBsYXliYWNrOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmlj
YXRpb25SYXRlRGlkQ2hhbmdlOgorICAgICAgICBtX3ByZXBhcmluZ1RvUGxheSA9IGZhbHNlOwor
ICAgICAgICBpZiAobV9wYXVzZVJlcXVlc3RlZCAmJiByYXRlKCkpCisgICAgICAgICAgICBtX3Bh
dXNlUmVxdWVzdGVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisjaWYgRU5BQkxFKElPU19B
SVJQTEFZKQorICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25DdXJyZW50UGxheWJhY2tU
YXJnZXRJc1dpcmVsZXNzQ2hhbmdlZDoKKyAgICAgICAgbV9tZWRpYVBsYXllci0+Y3VycmVudFBs
YXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5nZWQoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFu
Z2VkOgorICAgICAgICBtX21lZGlhUGxheWVyLT5wbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNo
YW5nZWQoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAobV9uZXR3
b3JrU3RhdGUgIT0gb2xkTmV0d29ya1N0YXRlKQorICAgICAgICBtX21lZGlhUGxheWVyLT5uZXR3
b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBvbGRSZWFkeVN0YXRl
KQorICAgICAgICBtX21lZGlhUGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworCisgICAgTE9H
KE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpkZWxpdmVyTm90aWZpY2F0aW9uKCVwKSAt
IGV4aXRpbmcgd2l0aCBuZXR3b3JrU3RhdGUgPSAlaSwgcmVhZHlTdGF0ZSA9ICVpIiwgCisgICAg
ICAgIHRoaXMsIHN0YXRpY19jYXN0PGludD4obV9uZXR3b3JrU3RhdGUpLCBzdGF0aWNfY2FzdDxp
bnQ+KG1fcmVhZHlTdGF0ZSkpOworfQorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnJlcXVpcmVzVGV4dFRyYWNrUmVwcmVzZW50YXRpb24oKSBj
b25zdAoreworICAgIHJldHVybiBtX2luRnVsbFNjcmVlbjsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVJT1M6OnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKiByZXByZXNlbnRhdGlvbikKK3sKKyAgICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQo
KSBfc2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb246cmVwcmVzZW50YXRpb24gPyByZXByZXNlbnRh
dGlvbi0+cGxhdGZvcm1MYXllcigpIDogbnVsbHB0cl07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjppbmJhbmRUZXh0VHJhY2tzQ2hhbmdlZChOU0FycmF5ICp0cmFja3MpCit7Cisg
ICAgVmVjdG9yPFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TPiA+IHJlbW92ZWRU
ZXh0VHJhY2tzID0gbV90ZXh0VHJhY2tzOworCisgICAgZm9yIChOU0RpY3Rpb25hcnkgKnRyYWNr
SW5mbyBpbiB0cmFja3MpIHsKKyAgICAgICAgYm9vbCBuZXdUcmFjayA9IHRydWU7CisgICAgICAg
IE5TTnVtYmVyICp0cmFja0lEVmFsdWUgID0gW3RyYWNrSW5mbyBvYmplY3RGb3JLZXk6VGV4dFRy
YWNrSURLZXldOworCisgICAgICAgIGlmICghW3RyYWNrSURWYWx1ZSBpc0tpbmRPZkNsYXNzOltO
U051bWJlciBjbGFzc11dKSB7CisgICAgICAgICAgICBOU0xvZyhAIlVuZXhwZWN0ZWQgdHJhY2sg
SUQsIGlnbm9yaW5nLiIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICBpbnQgdHJhY2tJRCA9IFt0cmFja0lEVmFsdWUgaW50VmFsdWVdOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSByZW1vdmVkVGV4dFRyYWNrcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKKyAg
ICAgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TPiB0cmFjayA9IHN0
YXRpY19jYXN0PEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MqPihyZW1vdmVkVGV4dFRyYWNr
c1tpIC0gMV0uZ2V0KCkpOworCisgICAgICAgICAgICBpZiAodHJhY2stPmludGVybmFsSUQoKSA9
PSB0cmFja0lEKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlZFRleHRUcmFja3MucmVtb3ZlKGkg
LSAxKTsKKyAgICAgICAgICAgICAgICBuZXdUcmFjayA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghbmV3VHJhY2sp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBOU1N0cmluZyAqbmFtZSA9IFt0cmFj
a0luZm8gb2JqZWN0Rm9yS2V5OlRleHRUcmFja0Rpc3BsYXlOYW1lS2V5XTsKKyAgICAgICAgTlNT
dHJpbmcgKmxhbmd1YWdlID0gW3RyYWNrSW5mbyBvYmplY3RGb3JLZXk6VGV4dFRyYWNrTG9jYWxl
SWRlbnRpZmllcktleV07CisgICAgICAgIE5TU3RyaW5nICp0eXBlID0gW3RyYWNrSW5mbyBvYmpl
Y3RGb3JLZXk6VGV4dFRyYWNrVHlwZUtleV07CisKKyAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQ
bGF5ZXJQcml2YXRlSU9TOjppbmJhbmRUZXh0VHJhY2tzQ2hhbmdlZCglcCkgLSBhZGRpbmcgdHJh
Y2sgaWQgJWksIG5hbWUgPSAlcywgbGFuZ3VhZ2UgPSAlcywgdHlwZSA9ICVzIiwgdGhpcywgdHJh
Y2tJRCwgW25hbWUgVVRGOFN0cmluZ10sIFtsYW5ndWFnZSBVVEY4U3RyaW5nXSwgW3R5cGUgVVRG
OFN0cmluZ10pOworCisgICAgICAgIG1fdGV4dFRyYWNrcy5hcHBlbmQoSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUzo6Y3JlYXRlKHRoaXMsIHRyYWNrSUQsIG5hbWUsIGxhbmd1YWdlLCB0eXBl
KSk7CisgICAgfQorCisgICAgaWYgKHJlbW92ZWRUZXh0VHJhY2tzLnNpemUoKSkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RleHRUcmFja3Muc2l6ZSgpOyBpID4gMDsgLS1pKSB7Cisg
ICAgICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUz4gdHJhY2sgPSBz
dGF0aWNfY2FzdDxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKj4obV90ZXh0VHJhY2tzW2kg
LSAxXS5nZXQoKSk7CisKKyAgICAgICAgICAgIGlmICghcmVtb3ZlZFRleHRUcmFja3MuY29udGFp
bnModHJhY2spKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAo
bV9jdXJyZW50VHJhY2sgPT0gdHJhY2suZ2V0KCkpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50
VHJhY2sgPSBudWxscHRyOworICAgICAgICAgICAgbV9tZWRpYVBsYXllci0+cmVtb3ZlVGV4dFRy
YWNrKHRyYWNrKTsKKyAgICAgICAgICAgIG1fdGV4dFRyYWNrcy5yZW1vdmUoaSAtIDEpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGV4dFRyYWNr
cy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFW
RklPUz4gdHJhY2sgPSBzdGF0aWNfY2FzdDxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKj4o
bV90ZXh0VHJhY2tzW2ldLmdldCgpKTsKKworICAgICAgICB0cmFjay0+c2V0VGV4dFRyYWNrSW5k
ZXgoaSk7CisgICAgICAgIGlmICh0cmFjay0+aGFzQmVlblJlcG9ydGVkKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICB0cmFjay0+c2V0SGFzQmVlblJlcG9ydGVkKHRydWUpOwor
ICAgICAgICBtX21lZGlhUGxheWVyLT5hZGRUZXh0VHJhY2sodHJhY2suZ2V0KCkpOworICAgIH0K
KyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVJT1M6OmluYmFuZFRleHRUcmFja3ND
aGFuZ2VkKCVwKSAtIGZvdW5kICVpIGluLWJhbmQgdHJhY2tzIiwgdGhpcywgbV90ZXh0VHJhY2tz
LnNpemUoKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRTZWxlY3RlZFRl
eHRUcmFjayhOU051bWJlciAqdHJhY2tJRCkKK3sKKyAgICBpZiAoIVt0cmFja0lEIGlzS2luZE9m
Q2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pIHsKKyAgICAgICAgTlNMb2coQCJVbmV4cGVjdGVkIHRy
YWNrIElELCBpZ25vcmluZy4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgh
bV9tZWRpYVBsYXllckhlbHBlcikgeworICAgICAgICBhZGREZWZlcnJlZFJlcXVlc3QoRGVmZXJy
ZWRQcm9wZXJ0eVNlbGVjdGVkVHJhY2tLZXksIHRyYWNrSUQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKF9zZXRTZWxlY3RlZFRleHRUcmFjazopXSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgeworICAgICAgICBMT0coTWVk
aWEsICJNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldEN1cnJlbnRUcmFjayglcCkgLSBzZWxlY3Rp
bmcgdHJhY2sgaWQgJWkiLCB0aGlzLCBbdHJhY2tJRCBpbnRWYWx1ZV0pOworICAgICAgICBbbV9k
ZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkRlZmVycmVkUHJvcGVy
dHlTZWxlY3RlZFRyYWNrS2V5XTsKKyAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkg
X3NldFNlbGVjdGVkVGV4dFRyYWNrOnRyYWNrSURdOworICAgIH0KKyAgICBzZXREZWxheUNhbGxi
YWNrcyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjp0cmFja01vZGVD
aGFuZ2VkKCkKK3sKKyAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRj4gdHJhY2tU
b0VuYWJsZTsKKworICAgIC8vIEFWRm91bmRhdGlvbiBjYW4gb25seSBlbWl0IGN1ZXMgZm9yIG9u
ZSB0cmFjayBhdCBhIHRpbWUsIHNvIGVuYWJsZSB0aGUgZmlyc3QgdHJhY2sgdGhhdCBpcyBzaG93
aW5nLCBvciB0aGUgZmlyc3QgdGhhdAorICAgIC8vIGlzIGhpZGRlbiBpZiBub25lIGFyZSBzaG93
aW5nLiBPdGhlcndpc2UgZGlzYWJsZSBhbGwgdHJhY2tzLgorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3RleHRUcmFja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPEluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkZJT1M+IHRyYWNrID0gbV90ZXh0VHJhY2tzW2ldOworICAgICAg
ICBpZiAodHJhY2stPm1vZGUoKSA9PSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpTaG93aW5nKSB7
CisgICAgICAgICAgICB0cmFja1RvRW5hYmxlID0gdHJhY2s7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIXRyYWNrVG9FbmFibGUgJiYgdHJhY2stPm1vZGUoKSA9
PSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpIaWRkZW4pCisgICAgICAgICAgICB0cmFja1RvRW5h
YmxlID0gdHJhY2s7CisgICAgfQorCisgICAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUyog
dHJhY2tQcml2YXRlID0gc3RhdGljX2Nhc3Q8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUyo+
KHRyYWNrVG9FbmFibGUuZ2V0KCkpOworICAgIGlmIChtX2N1cnJlbnRUcmFjayA9PSB0cmFja1By
aXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVudFRyYWNrID0gdHJhY2tQcml2
YXRlOworICAgIHNldFNlbGVjdGVkVGV4dFRyYWNrKHRyYWNrUHJpdmF0ZSA/IFtOU051bWJlciBu
dW1iZXJXaXRoSW50OnRyYWNrUHJpdmF0ZS0+aW50ZXJuYWxJRCgpXSA6IG5pbCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpjbGVhclRleHRUcmFja3MoKQoreworICAgIG1fY3Vy
cmVudFRyYWNrID0gbnVsbHB0cjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90ZXh0
VHJhY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2
YXRlQVZGSU9TPiB0cmFjayA9IG1fdGV4dFRyYWNrc1tpXTsKKyAgICAgICAgbV9tZWRpYVBsYXll
ci0+cmVtb3ZlVGV4dFRyYWNrKHRyYWNrKTsKKyAgICAgICAgdHJhY2stPmRpc2Nvbm5lY3QoKTsK
KyAgICB9CisgICAgbV90ZXh0VHJhY2tzLmNsZWFyKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpwcm9jZXNzSW5iYW5kVGV4dFRyYWNrQ3VlKE5TQXJyYXkgKmF0dHJpYnV0ZWRT
dHJpbmdzLCBkb3VibGUgdGltZSkKK3sKKyAgICBpZiAoIW1fY3VycmVudFRyYWNrKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRUcmFjay0+cHJvY2Vzc0N1ZShyZWludGVycHJldF9j
YXN0PENGQXJyYXlSZWY+KGF0dHJpYnV0ZWRTdHJpbmdzKSwgdGltZSk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRPdXRPZkJhbmRUZXh0VHJhY2tzKE5TQXJyYXkgKnRyYWNr
c0FycmF5KQoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikgeworICAgICAgICBhZGRE
ZWZlcnJlZFJlcXVlc3QoRGVmZXJyZWRQcm9wZXJ0eU91dE9mQmFuZFRyYWNrc0tleSwgdHJhY2tz
QXJyYXkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFbbV9tZWRpYVBsYXll
ckhlbHBlci5nZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9zZXRPdXRPZkJhbmRU
ZXh0VHJhY2tzOildKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0
cnVlKTsKKyAgICB7CisgICAgICAgIFttX2RlZmVycmVkUHJvcGVydGllcy5nZXQoKSByZW1vdmVP
YmplY3RGb3JLZXk6RGVmZXJyZWRQcm9wZXJ0eU91dE9mQmFuZFRyYWNrc0tleV07CisgICAgICAg
IFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXRPdXRPZkJhbmRUZXh0VHJhY2tzOnRyYWNr
c0FycmF5XTsKKyAgICB9CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCitzdGF0
aWMgaW50IHBsYXRmb3JtVHJhY2tJRChQbGF0Zm9ybVRleHRUcmFjayogcGxhdGZvcm1UcmFjaykK
K3sKKyAgICBpZiAocGxhdGZvcm1UcmFjay0+dHlwZSgpID09IFBsYXRmb3JtVGV4dFRyYWNrOjpJ
bkJhbmQpIHsKKyAgICAgICAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUyogdHJhY2tQcml2
YXRlID0gc3RhdGljX2Nhc3Q8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUyo+KHBsYXRmb3Jt
VHJhY2stPmNsaWVudCgpLT5wcml2YXRlVHJhY2soKSk7CisgICAgICAgIHJldHVybiB0cmFja1By
aXZhdGUgPyB0cmFja1ByaXZhdGUtPmludGVybmFsSUQoKSA6IDA7CisgICAgfQorCisgICAgcmV0
dXJuIHBsYXRmb3JtVHJhY2stPnVuaXF1ZUlkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlSU9TOjpvdXRPZkJhbmRUZXh0VHJhY2tzQ2hhbmdlZCgpCit7CisgICAgaWYgKCFtX21lbnVJ
bnRlcmZhY2UtPmNsaWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHRyYWNrc0FycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XSk7CisgICAgVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4gPiB0ZXh0VHJh
Y2tzID0gbV9tZW51SW50ZXJmYWNlLT5jbGllbnQoKS0+cGxhdGZvcm1UZXh0VHJhY2tzKCk7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dFRyYWNrcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+IHBsYXRmb3JtVHJhY2sgPSB0ZXh0VHJh
Y2tzW2ldOworCisgICAgICAgIGlmIChwbGF0Zm9ybVRyYWNrLT50eXBlKCkgPT0gUGxhdGZvcm1U
ZXh0VHJhY2s6OkluQmFuZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAocGxh
dGZvcm1UcmFjay0+a2luZCgpICE9IFBsYXRmb3JtVGV4dFRyYWNrOjpTdWJ0aXRsZSAmJiBwbGF0
Zm9ybVRyYWNrLT5raW5kKCkgIT0gUGxhdGZvcm1UZXh0VHJhY2s6OkNhcHRpb24pCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4g
dHJhY2sgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOworCisg
ICAgICAgIFt0cmFjay5nZXQoKSBzZXRPYmplY3Q6cGxhdGZvcm1UcmFjay0+bGFiZWwoKSBmb3JL
ZXk6VGV4dFRyYWNrRGlzcGxheU5hbWVLZXldOworCisgICAgICAgIGlmICghcGxhdGZvcm1UcmFj
ay0+bGFuZ3VhZ2UoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBbdHJhY2suZ2V0KCkgc2V0T2Jq
ZWN0OnBsYXRmb3JtVHJhY2stPmxhbmd1YWdlKCkgZm9yS2V5OlRleHRUcmFja0xvY2FsZUlkZW50
aWZpZXJLZXldOworCisgICAgICAgIE5TU3RyaW5nICp0eXBlID0gcGxhdGZvcm1UcmFjay0+a2lu
ZCgpID09IFBsYXRmb3JtVGV4dFRyYWNrOjpTdWJ0aXRsZSA/IFRleHRUcmFja1N1YnRpdGxlc0tl
eSA6IFRleHRUcmFja0NhcHRpb25zS2V5OworICAgICAgICBbdHJhY2suZ2V0KCkgc2V0T2JqZWN0
OnR5cGUgZm9yS2V5OlRleHRUcmFja1R5cGVLZXldOworCisgICAgICAgIFt0cmFjay5nZXQoKSBz
ZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6cGxhdGZvcm1UcmFja0lEKHBsYXRmb3Jt
VHJhY2suZ2V0KCkpXSBmb3JLZXk6VGV4dFRyYWNrSURLZXldOworCisgICAgICAgIFt0cmFja3NB
cnJheSBhZGRPYmplY3Q6dHJhY2suZ2V0KCldOworICAgIH0KKworICAgIGlmICghW3RyYWNrc0Fy
cmF5LmdldCgpIGNvdW50XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0T3V0T2ZCYW5kVGV4
dFRyYWNrcyh0cmFja3NBcnJheS5nZXQoKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
SU9TOjp0ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5TWVkaWFFbGVtZW50KFBhc3NSZWZQdHI8UGxhdGZv
cm1UZXh0VHJhY2s+IHBsYXRmb3JtVHJhY2spCit7CisgICAgc2V0U2VsZWN0ZWRUZXh0VHJhY2so
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6cGxhdGZvcm1UcmFja0lEKHBsYXRmb3JtVHJhY2suZ2V0
KCkpXSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjp0ZXh0VHJhY2tXYXNTZWxl
Y3RlZEJ5UGx1Z2luKE5TRGljdGlvbmFyeSAqdHJhY2tJbmZvKQoreworICAgIGlmICghbV9tZW51
SW50ZXJmYWNlIHx8ICFtX21lbnVJbnRlcmZhY2UtPmNsaWVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIXRyYWNrSW5mbykgeworICAgICAgICBtX21lbnVJbnRlcmZhY2UtPmNsaWVu
dCgpLT5zZXRTZWxlY3RlZFRleHRUcmFjaygwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4gdHJhY2tUb1NlbGVjdDsKKyAgICBOU051bWJl
ciAqdHJhY2tJRFRvU2VsZWN0ICA9IFt0cmFja0luZm8gb2JqZWN0Rm9yS2V5OlRleHRUcmFja0lE
S2V5XTsKKyAgICBpZiAoIVt0cmFja0lEVG9TZWxlY3QgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIg
Y2xhc3NdXSkgeworICAgICAgICBOU0xvZyhAIlVuZXhwZWN0ZWQgdHJhY2sgSUQsIGlnbm9yaW5n
LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IHRyYWNrSUQgPSBbdHJhY2tJ
RFRvU2VsZWN0IGludFZhbHVlXTsKKyAgICBpZiAodHJhY2tJRCA9PSBUZXh0VHJhY2tPZmZNZW51
SXRlbUlEKQorICAgICAgICB0cmFja1RvU2VsZWN0ID0gUGxhdGZvcm1UZXh0VHJhY2s6OmNhcHRp
b25NZW51T2ZmSXRlbSgpOworICAgIGVsc2UgaWYgKHRyYWNrSUQgPT0gVGV4dFRyYWNrQXV0b01l
bnVJdGVtSUQpCisgICAgICAgIHRyYWNrVG9TZWxlY3QgPSBQbGF0Zm9ybVRleHRUcmFjazo6Y2Fw
dGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7CisgICAgZWxzZSB7CisgICAgICAgIFZlY3RvcjxSZWZQ
dHI8UGxhdGZvcm1UZXh0VHJhY2s+ID4gdGV4dFRyYWNrcyA9IG1fbWVudUludGVyZmFjZS0+Y2xp
ZW50KCktPnBsYXRmb3JtVGV4dFRyYWNrcygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdGV4dFRyYWNrcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgUmVmUHRyPFBsYXRm
b3JtVGV4dFRyYWNrPiBwbGF0Zm9ybVRyYWNrID0gdGV4dFRyYWNrc1tpXTsKKworICAgICAgICAg
ICAgaWYgKHRyYWNrSUQgPT0gcGxhdGZvcm1UcmFja0lEKHBsYXRmb3JtVHJhY2suZ2V0KCkpKSB7
CisgICAgICAgICAgICAgICAgdHJhY2tUb1NlbGVjdCA9IHBsYXRmb3JtVHJhY2s7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoIXRyYWNrVG9TZWxlY3QpIHsKKyAgICAgICAgTlNMb2coQCJUZXh0IHRyYWNrIElEICVpIGlz
IHVua25vd24sIGlnbm9yaW5nLiIsIHRyYWNrSUQpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV9tZW51SW50ZXJmYWNlLT5jbGllbnQoKS0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodHJh
Y2tUb1NlbGVjdCk7Cit9CisKK1Bhc3NSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2tNZW51SW50ZXJm
YWNlPiBNZWRpYVBsYXllclByaXZhdGVJT1M6OnRleHRUcmFja01lbnUoKQoreworICAgIGlmICgh
bV9tZW51SW50ZXJmYWNlKQorICAgICAgICBtX21lbnVJbnRlcmZhY2UgPSBQbGF0Zm9ybVRleHRU
cmFja01lbnVJbnRlcmZhY2VJT1M6OmNyZWF0ZSh0aGlzKTsKKyAgICByZXR1cm4gbV9tZW51SW50
ZXJmYWNlOworfQorI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCitAaW1wbGVtZW50YXRpb24gV2ViQ29yZU1lZGlhUGxheWVyTm90aWZpY2F0
aW9uSGVscGVyCisKKy0gKGlkKWluaXRXaXRoQ2xpZW50OihNZWRpYVBsYXllclByaXZhdGVJT1Mg
KiljbGllbnQKK3sKKyAgICBfY2xpZW50ID0gY2xpZW50OworICAgIHJldHVybiBbc3VwZXIgaW5p
dF07Cit9CisKKy0gKHZvaWQpZGlzY29ubmVjdAoreworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2
aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZl07CisgICAgX2NsaWVudCA9IDA7Cit9
CisKKy0gKHZvaWQpY2FuY2VsUGVuZGluZ1JlcXVlc3RzCit7CisgICAgW05TT2JqZWN0IGNhbmNl
bFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmXTsKK30KKworLSAodm9pZClk
ZWxheU5vdGlmaWNhdGlvbjooaW50KW5vdGlmaWNhdGlvbgoreworICAgIGlmIChfY2xpZW50KQor
ICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGRlbGl2ZXJOb3RpZmljYXRp
b246KSB3aXRoT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50Om5vdGlmaWNhdGlvbl0gYWZ0
ZXJEZWxheTowXTsKK30KKworLSAodm9pZClkZWxpdmVyTm90aWZpY2F0aW9uOihOU051bWJlciAq
KW5vdGlmaWNhdGlvbgoreworICAgIGlmICghX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChfY2xpZW50LT5jYWxsYmFja3NEZWxheWVkKCkpCisgICAgICAgIFtzZWxmIGRlbGF5Tm90
aWZpY2F0aW9uOltub3RpZmljYXRpb24gaW50VmFsdWVdXTsKKyAgICBlbHNlCisgICAgICAgIF9j
bGllbnQtPmRlbGl2ZXJOb3RpZmljYXRpb24oKE1lZGlhUGxheWVyUHJveHlOb3RpZmljYXRpb25U
eXBlKVtub3RpZmljYXRpb24gaW50VmFsdWVdKTsKK30KKworLSAodm9pZClzY2hlZHVsZVByZXBh
cmVUb1BsYXlXaXRoT3B0aW9uYWxEZWxheTooTlNOdW1iZXIgKilzaG91bGREZWxheQoreworICAg
IGlmICghX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChbc2hvdWxkRGVsYXkgYm9v
bFZhbHVlXSkKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihzY2hlZHVs
ZVByZXBhcmVUb1BsYXlXaXRoT3B0aW9uYWxEZWxheTopIHdpdGhPYmplY3Q6W05TTnVtYmVyIG51
bWJlcldpdGhCb29sOk5PXSBhZnRlckRlbGF5OjBdOworICAgIGVsc2UKKyAgICAgICAgX2NsaWVu
dC0+cHJlcGFyZVRvUGxheSgpOworfQorCistICh2b2lkKXNjaGVkdWxlRGVmZXJyZWRQcm9wZXJ0
aWVzV2l0aE9wdGlvbmFsRGVsYXk6KE5TTnVtYmVyICopc2hvdWxkRGVsYXkKK3sKKyAgICBpZiAo
IV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChbc2hvdWxkRGVsYXkgYm9vbFZh
bHVlXSkgeworICAgICAgICBpZiAoIV9kZWZlcnJlZFByb3BlcnRpZXNTY2hlZHVsZWQpIHsKKyAg
ICAgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Ioc2NoZWR1bGVEZWZlcnJl
ZFByb3BlcnRpZXNXaXRoT3B0aW9uYWxEZWxheTopIHdpdGhPYmplY3Q6W05TTnVtYmVyIG51bWJl
cldpdGhCb29sOk5PXSBhZnRlckRlbGF5OjBdOworICAgICAgICAgICAgX2RlZmVycmVkUHJvcGVy
dGllc1NjaGVkdWxlZCA9IFlFUzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgX2RlZmVycmVkUHJvcGVydGllc1NjaGVkdWxlZCA9IE5POworICAgIF9jbGllbnQtPnBy
b2Nlc3NEZWZlcnJlZFJlcXVlc3RzKCk7Cit9CisKKy0gKHZvaWQpcGx1Z2luRWxlbWVudEluQmFu
ZEFsdGVybmF0ZVRleHRUcmFja3NEaWRDaGFuZ2U6KE5TQXJyYXkgKil0cmFja3MKK3sKKyAgICBp
ZiAoIV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYlRocmVhZFJ1biheeworICAg
ICAgICBpZiAoIV9jbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIF9jbGllbnQt
PmluYmFuZFRleHRUcmFja3NDaGFuZ2VkKHRyYWNrcyk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQp
cGx1Z2luRWxlbWVudERpZFNlbGVjdFRleHRUcmFjazooTlNEaWN0aW9uYXJ5ICopdHJhY2tJbmZv
Cit7CisgICAgaWYgKCFfY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJUaHJlYWRS
dW4oXnsKKyAgICAgICAgaWYgKCFfY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBfY2xpZW50LT50ZXh0VHJhY2tXYXNTZWxlY3RlZEJ5UGx1Z2luKHRyYWNrSW5mbyk7CisgICAg
fSk7Cit9CisKKy0gKHZvaWQpcGx1Z2luRWxlbWVudERpZE91dHB1dEF0dHJpYnV0ZWRTdHJpbmdz
OihOU0FycmF5ICopc3RyaW5ncyBuYXRpdmVTYW1wbGVCdWZmZXJzOihOU0FycmF5ICopYnVmZmVy
cyBmb3JUaW1lOihOU1RpbWVJbnRlcnZhbCl0aW1lCit7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZl
cnMpOworCisgICAgaWYgKCFfY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJUaHJl
YWRSdW4oXnsKKyAgICAgICAgaWYgKCFfY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBfY2xpZW50LT5wcm9jZXNzSW5iYW5kVGV4dFRyYWNrQ3VlKHN0cmluZ3MsIHRpbWUpOwor
ICAgIH0pOworfQorCitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljc3NTBjNDllNWNlMzRiOTZkOTU5MmMyNjQ2MTMxOGQ3ZjQ5NTJmMWIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJ
T1MubW0KQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYs
IDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgorCisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlv
bnMuaCIKKyNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRDYWNoZS5oIgorI2ltcG9ydCAi
Rm9udERlc2NyaXB0aW9uLmgiCisjaW1wb3J0ICJGb250U2VydmljZXNJT1MuaCIKKyNpbXBvcnQg
PENvcmVHcmFwaGljcy9DR0ZvbnRHbHlwaFN1cHBvcnQuaD4KKyNpbXBvcnQgPENvcmVHcmFwaGlj
cy9DR0ZvbnRJbmZvLmg+CisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ0dGb250UmVuZGVyaW5nLmg+
CisjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorI2ltcG9ydCA8ZmxvYXQuaD4KKyNpbXBv
cnQgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJv
b2wgZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhDRlN0cmluZ1JlZiBmb250RmFt
aWx5TmFtZSkKK3sKKyAgICBpZiAoIWZvbnRGYW1pbHlOYW1lKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBUaW1lcyBOZXcgUm9tYW4gY29udGFpbnMgQXJhYmljIGdseXBocywgYnV0
IENvcmUgVGV4dCBkb2Vzbid0IGtub3cgaG93IHRvIHNoYXBlIHRoZW0uIDxyZGFyOi8vcHJvYmxl
bS85ODIzOTc1PgorICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMjA5NjgzNT4gcmVtb3Zl
IHRoaXMgZnVuY3Rpb24gb25jZSB0aGUgYWJvdmUgYnVnIGlzIGZpeGVkLgorICAgIC8vIEFyaWFs
IGFuZCBUYWhvbWEgYXJlIGhhdmUgcGVyZm9ybWFuY2UgaXNzdWVzIHNvIGRvbid0IHVzZSB0aGVt
IGFzIHdlbGwuCisgICAgcmV0dXJuIChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIlRpbWVzIE5ldyBS
b21hbiIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pCisgICAgICAg
ICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIkFyaWFsIiksIGZvbnRGYW1pbHlOYW1lLCAw
KSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKKyAgICAgICAgICAgfHwgKENGU3RyaW5nQ29tcGFyZShD
RlNUUigiVGFob21hIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyk7
Cit9CisKK3N0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgY3RGb250
KQoreworICAgIC8vIFRoZSBjaGVjayBkb2Vzbid0IGxvb2sgbmVhdCBidXQgdGhpcyBpcyB3aGF0
IEFwcEtpdCBkb2VzIGZvciB2ZXJ0aWNhbCB3cml0aW5nLi4uCisgICAgUmV0YWluUHRyPENGQXJy
YXlSZWY+IHRhYmxlVGFncyA9IGFkb3B0Q0YoQ1RGb250Q29weUF2YWlsYWJsZVRhYmxlcyhjdEZv
bnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOworICAgIENGSW5kZXggbnVtVGFibGVz
ID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGlu
ZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgpIHsKKyAgICAgICAgQ1RGb250VGFi
bGVUYWcgdGFnID0gKENURm9udFRhYmxlVGFnKSh1aW50cHRyX3QpQ0ZBcnJheUdldFZhbHVlQXRJ
bmRleCh0YWJsZVRhZ3MuZ2V0KCksIGluZGV4KTsKKyAgICAgICAgaWYgKHRhZyA9PSBrQ1RGb250
VGFibGVWaGVhIHx8IHRhZyA9PSBrQ1RGb250VGFibGVWT1JHKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRm
b3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyBjZWlsZihtX3BsYXRmb3JtRGF0YS5zaXplKCkgIC8g
MjQuMGYpIDogMC5mOworICAgIG1fc3BhY2VHbHlwaCA9IDA7CisgICAgbV9zcGFjZVdpZHRoID0g
MDsKKyAgICB1bnNpZ25lZCB1bml0c1BlckVtOworICAgIGZsb2F0IGFzY2VudDsKKyAgICBmbG9h
dCBkZXNjZW50OworICAgIGZsb2F0IGxpbmVHYXA7CisgICAgZmxvYXQgbGluZVNwYWNpbmc7Cisg
ICAgZmxvYXQgeEhlaWdodDsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWU7
CisgICAgaWYgKENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCkpIHsKKyAg
ICAgICAgRm9udFNlcnZpY2VzSU9TIGZvbnRTZXJ2aWNlKGN0Rm9udCk7CisgICAgICAgIGFzY2Vu
dCA9IGNlaWxmKGZvbnRTZXJ2aWNlLmFzY2VudCgpKTsKKyAgICAgICAgZGVzY2VudCA9IGNlaWxm
KGZvbnRTZXJ2aWNlLmRlc2NlbnQoKSk7CisgICAgICAgIGxpbmVTcGFjaW5nID0gZm9udFNlcnZp
Y2UubGluZVNwYWNpbmcoKTsKKyAgICAgICAgbGluZUdhcCA9IGZvbnRTZXJ2aWNlLmxpbmVHYXAo
KTsKKyAgICAgICAgeEhlaWdodCA9IGZvbnRTZXJ2aWNlLnhIZWlnaHQoKTsKKyAgICAgICAgdW5p
dHNQZXJFbSA9IGZvbnRTZXJ2aWNlLnVuaXRzUGVyRW0oKTsKKyAgICAgICAgZmFtaWx5TmFtZSA9
IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RGb250KSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgQ0dGb250UmVmIGNnRm9udCA9IG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpOworCisgICAg
ICAgIHVuaXRzUGVyRW0gPSBDR0ZvbnRHZXRVbml0c1BlckVtKGNnRm9udCk7CisKKyAgICAgICAg
ZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOworICAgICAgICBhc2NlbnQg
PSBscm91bmRmKHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldEFzY2VudChjZ0ZvbnQpLCB1bml0c1Bl
ckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIGRlc2NlbnQgPSBscm91bmRmKC1zY2FsZUVtVG9V
bml0cygtYWJzKENHRm9udEdldERlc2NlbnQoY2dGb250KSksIHVuaXRzUGVyRW0pICogcG9pbnRT
aXplKTsKKyAgICAgICAgbGluZUdhcCA9IGxyb3VuZGYoc2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0
TGVhZGluZyhjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIHhIZWln
aHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KGNnRm9udCksIHVuaXRzUGVyRW0p
ICogcG9pbnRTaXplOworCisgICAgICAgIGxpbmVTcGFjaW5nID0gYXNjZW50ICsgZGVzY2VudCAr
IGxpbmVHYXA7CisgICAgICAgIGZhbWlseU5hbWUgPSBhZG9wdENGKENHRm9udENvcHlGYW1pbHlO
YW1lKGNnRm9udCkpOworICAgIH0KKworICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1
bml0c1BlckVtKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOworICAgIG1f
Zm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExp
bmVHYXAobGluZUdhcCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhsaW5lU3Bh
Y2luZyk7CisgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOworICAgIG1fc2hv
dWxkTm90QmVVc2VkRm9yQXJhYmljID0gZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJp
YyhmYW1pbHlOYW1lLmdldCgpKTsKKworICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlv
bigpID09IFZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisgICAgICAg
IG1faGFzVmVydGljYWxHbHlwaHMgPSBmb250SGFzVmVydGljYWxHbHlwaHMobV9wbGF0Zm9ybURh
dGEuY3RGb250KCkpOworCisgICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5tX2lzRW1vamkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGludCB0aGlyZE9mU2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUo
KSAvIDM7CisgICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQodGhpcmRPZlNpemUpOworICAgIG1f
Zm9udE1ldHJpY3Muc2V0RGVzY2VudCh0aGlyZE9mU2l6ZSk7CisgICAgbV9mb250TWV0cmljcy5z
ZXRMaW5lR2FwKHRoaXJkT2ZTaXplKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5n
KDApOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQor
eworICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKKyAgICBtX21heENoYXJXaWR0aCA9IDA7CisKKyAg
ICAvLyBGYWxsYmFjayB0byBhIGNyb3NzLXBsYXRmb3JtIGVzdGltYXRlLCB3aGljaCB3aWxsIHBv
cHVsYXRlIHRoZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBub24tcG9zaXRpdmUuCisgICAgaW5pdENo
YXJXaWR0aHMoKTsKK30KKworUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
ZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Cit7CisgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7Cisg
ICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEobV9wbGF0Zm9ybURhdGEpOwor
ICAgICAgICBzY2FsZWRGb250RGF0YS5tX3NpemUgPSBzY2FsZWRGb250RGF0YS5tX3NpemUgKiBz
Y2FsZUZhY3RvcjsKKyAgICAgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoc2NhbGVk
Rm9udERhdGEsIHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICBmbG9hdCBzaXplID0gbV9wbGF0
Zm9ybURhdGEuc2l6ZSgpICogc2NhbGVGYWN0b3I7CisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMg
Zm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKG1fcGxhdGZvcm1EYXRhLmZvbnQo
KSk7CisgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnREZXNjcmlwdG9yID0g
YWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7
CisgICAgUmV0YWluUHRyPENURm9udFJlZj4gc2NhbGVkRm9udCA9IGFkb3B0Q0YoQ1RGb250Q3Jl
YXRlV2l0aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yLmdldCgpLCBzaXplLCBudWxscHRy
KSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShzY2FsZWRGb250LmdldCgp
LCBzaXplLCBtX3BsYXRmb3JtRGF0YS5pc1ByaW50ZXJGb250KCksIGZhbHNlLCBmYWxzZSwgbV9w
bGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSk7CisKKyAgICBpZiAoc2NhbGVkRm9udERhdGEuZm9u
dCgpKSB7CisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQpCisgICAg
ICAgICAgICBmb250VHJhaXRzIHw9IGtDVEZvbnRCb2xkVHJhaXQ7CisgICAgICAgIGlmIChtX3Bs
YXRmb3JtRGF0YS5tX3N5bnRoZXRpY09ibGlxdWUpCisgICAgICAgICAgICBmb250VHJhaXRzIHw9
IGtDVEZvbnRJdGFsaWNUcmFpdDsKKworICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBzY2Fs
ZWRGb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoc2NhbGVkRm9udERhdGEuZm9u
dCgpKTsKKyAgICAgICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNCb2xkID0gKGZvbnRUcmFp
dHMgJiBrQ1RGb250Qm9sZFRyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJh
aXRCb2xkKTsKKyAgICAgICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNPYmxpcXVlID0gKGZv
bnRUcmFpdHMgJiBrQ1RGb250SXRhbGljVHJhaXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtD
VEZvbnRUcmFpdEl0YWxpYyk7CisKKyAgICAgICAgcmV0dXJuIGZvbnRDYWNoZSgpLT5nZXRDYWNo
ZWRGb250RGF0YSgmc2NhbGVkRm9udERhdGEpOworICAgIH0KKworICAgIHJldHVybiBudWxscHRy
OworfQorCitib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNo
YXIqLCBpbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNpbXBsZUZv
bnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9IG1fcGxh
dGZvcm1EYXRhLmZvbnQoKTsKKyAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7CisgICAg
aWYgKCFjdEZvbnQpCisgICAgICAgIHJldHVybjsgLy8gQ1RGb250IGlzIG51bGwgaW4gdGhlIGNh
c2Ugb2YgU1ZHIGZvbnRzIGZvciBleGFtcGxlLgorCisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBmdWxsTmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZ1bGxOYW1lKGN0Rm9udCkpOworICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWls
eU5hbWUoY3RGb250KSk7CisKKyAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gQ0dGb250SXNGaXhl
ZFBpdGNoKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKSB8fCAoZnVsbE5hbWUgJiYgKENGU3RyaW5n
Q29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk9zYWthLU1vbm8iKSwga0NGQ29tcGFyZUNh
c2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG8gfHwgQ0ZTdHJpbmdDb21wYXJlKGZ1
bGxOYW1lLmdldCgpLCBDRlNUUigiTVMtUEdvdGhpYyIpLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0
aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpOworICAgIGlmIChmYW1pbHlOYW1lICYmIENGU3Ry
aW5nQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiQ291cmllciBOZXciKSwga0NGQ29t
cGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pIHsKKyAgICAgICAgLy8g
U3BlY2lhbCBjYXNlIENvdXJpZXIgTmV3IHRvIG5vdCBiZSB0cmVhdGVkIGFzIGZpeGVkIHBpdGNo
LCBhcyB0aGlzIHdpbGwgbWFrZSB1c2Ugb2YgYSBoYWNrZWQgc3BhY2Ugd2lkdGggd2hpY2ggaXMg
dW5kZXNpcmVhYmxlIGZvciBpUGhvbmUgKHNlZSByZGFyOi8vNjI2OTc4MykuCisgICAgICAgIG1f
dHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKKyAgICB9Cit9CisKK2Zsb2F0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgQ0dT
aXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOworICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWwgfHwgbV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrKSB7Cisg
ICAgICAgIGlmIChwbGF0Zm9ybURhdGEoKS5tX2lzRW1vamkpCisgICAgICAgICAgICBDVEZvbnRH
ZXRBZHZhbmNlc0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwga0NURm9udEhvcml6
b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAmYWR2YW5jZSwgMSk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gcGxhdGZvcm1EYXRhKCkubV9zaXplOworICAg
ICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1N
YWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0
IENHRm9udFJlbmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0
eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmlu
ZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uIHwga0NHRm9udEFu
dGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJlZDsKKyAgICAgICAgICAgIGlmICghQ0dGb250R2V0R2x5
cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCAmdHJhbnNmb3JtLCBy
ZW5kZXJpbmdTdHlsZSwgJmdseXBoLCAxLCAmYWR2YW5jZSkpIHsKKyAgICAgICAgICAgICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDR0ZvbnRDb3B5RnVsbE5h
bWUocGxhdGZvcm1EYXRhKCkuY2dGb250KCkpKTsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBjYWNoZSBnbHlwaCB3aWR0aHMgZm9yICVAICVmIiwgZnVsbE5hbWUuZ2V0KCks
IHBvaW50U2l6ZSk7CisgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IDA7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgQ1RGb250R2V0QWR2YW5jZXNG
b3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGtDVEZvbnRWZXJ0aWNhbE9yaWVudGF0
aW9uLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsKKworICAgIHJldHVybiBhZHZhbmNlLndpZHRoICsg
bV9zeW50aGV0aWNCb2xkT2Zmc2V0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvVGV4dFRyYWNrUmVw
cmVzZW50YXRpb25JT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9U
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5ZThiNmU5MDIwM2IwMGFh
MGM4MDhiODZkMzdmMjBhYTg4YmM3MTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaApAQCAt
MCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bklPU19oCisjZGVmaW5lIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TX2gKKworI2lmIFBMQVRG
T1JNKElPUykgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW1wb3J0ICJUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbi5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9DQUxheWVyLmg+CisjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CisKK0BjbGFzcyBXZWJDb3JlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25J
T1NIZWxwZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb25JT1MgOiBwdWJsaWMgVGV4dFRyYWNrUmVwcmVzZW50YXRpb24geworcHVibGljOgor
ICAgIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xp
ZW50Kik7CisgICAgdmlydHVhbCB+VGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MoKTsKKworICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGUoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBPVkVSUklERSB7IHJldHVybiBtX2xheWVyLmdldCgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRTY2FsZShmbG9hdCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBJbnRSZWN0IGJvdW5kcygpIGNvbnN0IE9WRVJSSURFOworCisgICAgVGV4dFRyYWNrUmVw
cmVzZW50YXRpb25DbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisK
K3ByaXZhdGU6CisgICAgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25DbGllbnQqIG1fY2xpZW50Owor
ICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2xheWVyOworICAgIFJldGFpblB0cjxXZWJDb3JlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JT1NIZWxwZXI+IG1fZGVsZWdhdGU7Cit9OworCit9CisKKyNl
bmRpZiAvLyBQTEFURk9STShJT1MpICYmIEVOQUJMRShWSURFT19UUkFDSykKKworI2VuZGlmIC8v
IFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlv
bklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45ZTM1ZTQyYjg5OWM5MTVjN2E1MmY4ZWZkODY2MjM2YWYwMmMw
NGJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tCkBAIC0wLDAgKzEsMTM2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgUExBVEZPUk0oSU9TKSAmJiBFTkFC
TEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5o
IgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cu
aCIKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZFJ1
bi5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK0BpbnRlcmZhY2UgV2ViQ29yZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TSGVscGVyIDog
TlNPYmplY3QgeworICAgIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKiBfcGFyZW50OworfQor
LSAoaWQpaW5pdFdpdGhQYXJlbnQ6KFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKilwYXJlbnQ7
CitAcHJvcGVydHkgKGFzc2lnbikgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MqIHBhcmVudDsK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkNvcmVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklP
U0hlbHBlcgorLSAoaWQpaW5pdFdpdGhQYXJlbnQ6KFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9T
KilwYXJlbnQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIHNlbGYucGFyZW50ID0gcGFyZW50OworCisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIHNlbGYucGFyZW50ID0gbmlsOworICAgIFtz
dXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRQYXJlbnQ6KFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uSU9TKilwYXJlbnQKK3sKKyAgICBpZiAoX3BhcmVudCkKKyAgICAgICAgW19wYXJlbnQt
PnBsYXRmb3JtTGF5ZXIoKSByZW1vdmVPYnNlcnZlcjpzZWxmIGZvcktleVBhdGg6QCJib3VuZHMi
XTsKKworICAgIF9wYXJlbnQgPSBwYXJlbnQ7CisKKyAgICBpZiAoX3BhcmVudCkKKyAgICAgICAg
W19wYXJlbnQtPnBsYXRmb3JtTGF5ZXIoKSBhZGRPYnNlcnZlcjpzZWxmIGZvcktleVBhdGg6QCJi
b3VuZHMiIG9wdGlvbnM6bmlsIGNvbnRleHQ6MF07Cit9CisKKy0gKFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uSU9TKilwYXJlbnQKK3sKKyAgICByZXR1cm4gX3BhcmVudDsKK30KKworLSAodm9pZClv
YnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGggb2ZPYmplY3Q6KGlkKW9i
amVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5nZSBjb250ZXh0Oih2b2lkICopY29udGV4
dAoreworICAgIFVOVVNFRF9QQVJBTShjaGFuZ2UpOworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0
KTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKF9wYXJlbnQgJiYgW2tleVBhdGgg
aXNFcXVhbDpAImJvdW5kcyJdICYmIG9iamVjdCA9PSBfcGFyZW50LT5wbGF0Zm9ybUxheWVyKCkp
CisgICAgICAgICAgICBfcGFyZW50LT5jbGllbnQoKS0+dGV4dFRyYWNrUmVwcmVzZW50YXRpb25C
b3VuZHNDaGFuZ2VkKF9wYXJlbnQtPmJvdW5kcygpKTsKKyAgICB9KTsKK30KKworLSAoaWQpYWN0
aW9uRm9yTGF5ZXI6KENBTGF5ZXIgKilsYXllciBmb3JLZXk6KE5TU3RyaW5nICopZXZlbnQKK3sK
KyAgICBVTlVTRURfUEFSQU0obGF5ZXIpOworICAgIFVOVVNFRF9QQVJBTShldmVudCk7CisgICAg
Ly8gUmV0dXJuaW5nIGEgTlNOdWxsIGZyb20gdGhpcyBkZWxlZ2F0ZSBtZXRob2QgZGlzYWJsZXMg
YWxsIGltcGxpY2l0IENBTGF5ZXIgYWN0aW9ucy4KKyAgICByZXR1cm4gW05TTnVsbCBudWxsXTsK
K30KKworQGVuZAorCitQYXNzT3duUHRyPFRleHRUcmFja1JlcHJlc2VudGF0aW9uPiBUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbjo6Y3JlYXRlKFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50KiBj
bGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bklPUyhjbGllbnQpKTsKK30KKworVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1M6OlRleHRUcmFj
a1JlcHJlc2VudGF0aW9uSU9TKFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50KiBjbGllbnQp
CisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2xheWVyKGFkb3B0TlMoW1tDQUxheWVy
IGFsbG9jXSBpbml0XSkpCisgICAgLCBtX2RlbGVnYXRlKGFkb3B0TlMoW1tXZWJDb3JlVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25JT1NIZWxwZXIgYWxsb2NdIGluaXRXaXRoUGFyZW50OnRoaXNdKSkK
K3sKKyAgICBbbV9sYXllci5nZXQoKSBzZXREZWxlZ2F0ZTptX2RlbGVnYXRlLmdldCgpXTsKKyAg
ICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50c0dyYXZpdHk6a0NBR3Jhdml0eUJvdHRvbV07Cit9
CisKK1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TOjp+VGV4dFRyYWNrUmVwcmVzZW50YXRpb25J
T1MoKQoreworICAgIFttX2xheWVyLmdldCgpIHNldERlbGVnYXRlOm5pbF07CisgICAgW21fZGVs
ZWdhdGUuZ2V0KCkgc2V0UGFyZW50OjBdOworfQorCit2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0
aW9uSU9TOjp1cGRhdGUoKQoreworICAgIGlmIChSZWZQdHI8SW1hZ2U+IHJlcHJlc2VudGF0aW9u
ID0gbV9jbGllbnQtPmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKSkKKyAgICAg
ICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5nZXRDR0lt
YWdlUmVmKCldOworfQorCit2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TOjpzZXRDb250
ZW50U2NhbGUoZmxvYXQgc2NhbGUpCit7CisgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHNT
Y2FsZTpzY2FsZV07Cit9CisKK0ludFJlY3QgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1M6OmJv
dW5kcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KFtt
X2xheWVyLmdldCgpIGJvdW5kc10pKTsKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgJiYg
RU5BQkxFKFZJREVPX1RSQUNLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbG9yTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29sb3JNYWMuaAppbmRleCAyNDgyYjU5M2JiOGVlMjhhMmMwMDU4MjliNTNiMzcxYzky
NzY3OGIyLi4wMTNjMWU1NGRmOGQ2YmViM2M1YjM3MDkyYmRjNjJjZTcxM2NkNTg4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMuaApAQCAtMzEs
MTMgKzMxLDE3IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogCisjaWYgIVBMQVRGT1JNKElPUykK
IE9CSkNfQ0xBU1MgTlNDb2xvcjsKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXNzdW1lIE5TQ29s
b3JzIGFyZSBpbiBEZXZpY2VSR0IgY29sb3JzcGFjZQogICAgIENvbG9yIGNvbG9yRnJvbU5TQ29s
b3IoTlNDb2xvciAqKTsKICAgICBOU0NvbG9yICpuc0NvbG9yKGNvbnN0IENvbG9yJik7CisjZW5k
aWYKIAogICAgIGJvb2wgdXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3IoKTsKICAgICB2b2lkIHNl
dFVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
LmNwcAppbmRleCA0OTcxZjRkYTIzNjFlYTZlMzQ3ODMzOTc4ODkyMTdmMTQ2NTBmMjljLi42MDM5
MTlmODlmNzQ4NWU5NWQwODU0ZDYwY2I2ZmE5MDFiZmEzNzk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250
cm9sbGVyLmNwcApAQCAtMzEsNyArMzEsMTEgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAj
aW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCisjaWYg
IVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9u
U2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNlbmRp
ZgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9D
aGFyYWN0ZXJOYW1lcy5oPgogCkBAIC01NzIsNiArNTc2LDkgQEAgdm9pZCBDb21wbGV4VGV4dENv
bnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2VzKCkKICAgICAgICAgQ29tcGxleFRleHRS
dW4mIGNvbXBsZXhUZXh0UnVuID0gKm1fY29tcGxleFRleHRSdW5zW3JdOwogICAgICAgICB1bnNp
Z25lZCBnbHlwaENvdW50ID0gY29tcGxleFRleHRSdW4uZ2x5cGhDb3VudCgpOwogICAgICAgICBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBjb21wbGV4VGV4dFJ1bi5mb250RGF0YSgp
OworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgYm9vbCBpc0Vtb2ppID0gZm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpLm1faXNFbW9qaTsKKyNlbmRpZgogCiAgICAgICAgIC8vIFJlcHJlc2VudCB0
aGUgaW5pdGlhbCBhZHZhbmNlIGZvciBhIHRleHQgcnVuIGJ5IGFkanVzdGluZyB0aGUgYWR2YW5j
ZQogICAgICAgICAvLyBvZiB0aGUgbGFzdCBnbHlwaCBvZiB0aGUgcHJldmlvdXMgdGV4dCBydW4g
aW4gdGhlIGdseXBoIGJ1ZmZlci4KQEAgLTYyMCw2ICs2MjcsMTAgQEAgdm9pZCBDb21wbGV4VGV4
dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2VzKCkKICAgICAgICAgICAgIGJvb2wg
dHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGNoKTsKICAgICAgICAgICAgIENHR2x5
cGggZ2x5cGggPSB0cmVhdEFzU3BhY2UgPyBmb250RGF0YS0+c3BhY2VHbHlwaCgpIDogZ2x5cGhz
W2ldOwogICAgICAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSB0cmVhdEFzU3BhY2UgPyBDR1NpemVN
YWtlKHNwYWNlV2lkdGgsIGFkdmFuY2VzW2ldLmhlaWdodCkgOiBhZHZhbmNlc1tpXTsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgICAgICAgICBpZiAoaXNFbW9qaSAmJiBhZHZhbmNlLndpZHRoKQor
ICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBmb250RGF0YS0+d2lkdGhGb3JHbHlwaChn
bHlwaCk7CisjZW5kaWYKIAogICAgICAgICAgICAgaWYgKGNoID09ICdcdCcgJiYgbV9ydW4uYWxs
b3dUYWJzKCkpCiAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IG1fZm9udC50YWJXaWR0
aCgqZm9udERhdGEsIG1fcnVuLnRhYlNpemUoKSwgbV9ydW4ueFBvcygpICsgbV90b3RhbFdpZHRo
ICsgd2lkdGhTaW5jZUxhc3RDb21taXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNv
cmVUZXh0Lm1tCmluZGV4IDQ5NjBhNGQ0ZjA2YTM3YjYxZWQwNjQ2N2IzMmZlYzA2MDliZjQyNmIu
LjQ0YzAyOTRmZDc3YzBmZjliMjhhMzgxMWZmNzE4YjBjY2UxZjAxMWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJD
b3JlVGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29t
cGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KQEAgLTMxLDcgKzMxLDExIEBACiAjaW5jbHVk
ZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKIAorI2lm
IFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorI2Vsc2UKICNp
bmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbmRp
ZgogCiBAaW50ZXJmYWNlIFdlYkNhc2NhZGVMaXN0IDogTlNBcnJheSB7CiAgICAgQHByaXZhdGUK
QEAgLTI2NiwxMiArMjcwLDE3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0
Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY3AsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSht
X2ZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1lLmdldCgpLCBmYWxzZSwgRm9udENhY2hl
OjpEb05vdFJldGFpbikuZ2V0KCk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgICAgICAg
ICAgICAgLy8gQ29yZSBUZXh0IG1heSBoYXZlIHVzZWQgYSBmb250IHRoYXQgaXMgbm90IGtub3du
IHRvIE5TRm9udE1hbmFnZXIuIEluIHRoYXQgY2FzZSwgZmFsbCBiYWNrIG9uCiAgICAgICAgICAg
ICAgICAgICAgIC8vIHVzaW5nIHRoZSBmb250IGFzIHJldHVybmVkLCBldmVuIHRob3VnaCBpdCBt
YXkgbm90IGhhdmUgdGhlIGJlc3QgTlNGb250UmVuZGVyaW5nTW9kZS4KICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFydW5Gb250RGF0YSkgewogICAgICAgICAgICAgICAgICAgICAgICAgRm9udFBs
YXRmb3JtRGF0YSBydW5Gb250UGxhdGZvcm1EYXRhKChOU0ZvbnQgKilydW5Gb250LCBDVEZvbnRH
ZXRTaXplKHJ1bkZvbnQpLCBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkudXNlUHJpbnRlckZvbnQo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNoZSgpLT5n
ZXRDYWNoZWRGb250RGF0YSgmcnVuRm9udFBsYXRmb3JtRGF0YSwgRm9udENhY2hlOjpEb05vdFJl
dGFpbikuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBKdXN0IGFzc2VydCBmb3Igbm93LCB1bnRpbCB3ZSBjYW4gZGV2aXNl
IGEgYmV0dGVyIGZpeCB0aGF0IHdvcmtzIHdpdGggaU9TLgorICAgICAgICAgICAgICAgICAgICBB
U1NFUlQocnVuRm9udERhdGEpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udERhdGEgIT0gbV9mb250LnByaW1h
cnlGb250KCkpCiAgICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKHJ1bkZv
bnREYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9GbG9hdFBvaW50TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0Zsb2F0UG9pbnRNYWMubW0KaW5kZXggMmY3MzMxNGZhMGI5ZGM0YWRjM2QyNWQ0MzlhZGRhMThh
YTkxYjc3OS4uYWM5YmMzMWY5ZGMzMzNjMDUyNWY3ODRiNjNlMTk1OGIxNjliMTgyOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRN
YWMubW0KQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKQEAg
LTQzLDMgKzQ1LDUgQEAgRmxvYXRQb2ludDo6b3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0CiAjZW5k
aWYKIAogfQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFJlY3RNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRSZWN0TWFjLm1tCmluZGV4IDFkNmIwNDU3
ODg3ZDIxYjg5MjM0ODZhMjYyZjEzNzM1OWFmZThiNmYuLjllZmY5YjNhYjY3ODYwNDQ0YTE2ZDll
MWE3NzRhYTA4MWIyZGEzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9GbG9hdFJlY3RNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1hYy5tbQpAQCAtMjksNiArMjksNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmbmRlZiBOU0dFT01FVFJZX1RZ
UEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogCiBGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25z
dCBOU1JlY3QmIHIpIDogbV9sb2NhdGlvbihyLm9yaWdpbiksIG1fc2l6ZShyLnNpemUpCkBAIC00
MSw1ICs0Miw2IEBAIEZsb2F0UmVjdDo6b3BlcmF0b3IgTlNSZWN0KCkgY29uc3QKIH0KIAogI2Vu
ZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNpemVNYWMubW0KaW5kZXggMDFlZmJlOTFk
YzQ4NTkzMGUxOTI5Mzk4MjJkZWE5YTMxNzRkZGYxYi4uMTQwMWJmY2FlMWE4ZmFmYmIxNjkyY2I4
ZmQ1MTgxMTczMTQxYTEzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorI2lmICFQTEFURk9STShJT1MpCiAjaWZuZGVmIE5TR0VPTUVUUllfVFlQ
RVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiAKIEZsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0
IE5TU2l6ZSYgcykgOiBtX3dpZHRoKHMud2lkdGgpLCBtX2hlaWdodChzLmhlaWdodCkKQEAgLTQx
LDUgKzQyLDYgQEAgRmxvYXRTaXplOjpvcGVyYXRvciBOU1NpemUoKSBjb25zdAogfQogCiAjZW5k
aWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQppbmRleCA1OTFmZTE2NzYw
Mjg1ZGY2NGRjZWU3ZWNlNmU3ODA3OTVhMDBjOTY2Li43OWNmNWMxYWNiNmNlNjU2OTFlYzcyNzU2
MmI1YzRmNmEwN2M5OGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRm9udENhY2hlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KQEAgLTMwLDYgKzMwLDggQEAKICNpbXBvcnQgImNv
bmZpZy5oIgogI2ltcG9ydCAiRm9udENhY2hlLmgiCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAj
aW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiRm9u
dFBsYXRmb3JtRGF0YS5oIgpAQCAtMjIwLDMgKzIyMiw1IEBAIFBhc3NPd25QdHI8Rm9udFBsYXRm
b3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNj
cmlwCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9u
dENvbXBsZXhUZXh0TWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250Q29tcGxleFRleHRNYWMuY3BwCmluZGV4IGUwOTM2ZjNiOWI0NWE2OTk4MjNhYmQ2MDQ0
N2ZhYjkwMjhhZWRkODIuLjgyYWNmZmE4NWYxZjA0YzYyYjQ5NzE3NjY1Yjc1ODcyZmJhMjI3ZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29t
cGxleFRleHRNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250Q29tcGxleFRleHRNYWMuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIGZsb2F0IEZvbnQ6Omdl
dEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQg
ZnJvbSwgaW50CiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi12b2lkIEZvbnQ6OmRy
YXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CitmbG9h
dCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZh
bmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1
ZmZlcjsKQEAgLTg2LDExICs4NiwxMyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRgogCiAgICAg
Ly8gV2UgY291bGRuJ3QgZ2VuZXJhdGUgYW55IGdseXBocyBmb3IgdGhlIHJ1bi4gIEdpdmUgdXAu
CiAgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gMDsKIAogICAgIC8vIERyYXcgdGhlIGdseXBoIGJ1ZmZlciBub3cgYXQgdGhlIHN0
YXJ0aW5nIHBvaW50IHJldHVybmVkIGluIHN0YXJ0WC4KICAgICBGbG9hdFBvaW50IHN0YXJ0UG9p
bnQoc3RhcnRYLCBwb2ludC55KCkpOwogICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4s
IGdseXBoQnVmZmVyLCBzdGFydFBvaW50KTsKKworICAgIHJldHVybiBzdGFydFBvaW50LngoKSAt
IHN0YXJ0WDsKIH0KIAogdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdApAQCAtMTQxLDYgKzE0MywxMCBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udDo6
Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogYwogICAg
IHVuc2lnbmVkIGkgPSAwOwogICAgIGZvciAoY29uc3QgRm9udERhdGEqIGZvbnREYXRhID0gZm9u
dERhdGFBdCgwKTsgZm9udERhdGE7IGZvbnREYXRhID0gZm9udERhdGFBdCgrK2kpKSB7CiAgICAg
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IGZvbnREYXRhLT5mb250
RGF0YUZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
ICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZm
ZiAmJiBzaW1wbGVGb250RGF0YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyNlbmRpZgogICAgICAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJp
YW50KSB7CiAgICAgICAgICAgICBpZiAoc2ltcGxlRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9y
aWVudGF0aW9uKCkgPT0gVmVydGljYWwpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNDSktJZGVv
Z3JhcGhPclN5bWJvbChiYXNlQ2hhcmFjdGVyKSAmJiAhc2ltcGxlRm9udERhdGEtPmhhc1ZlcnRp
Y2FsR2x5cGhzKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAppbmRleCBmYTIzNTU3
Y2ZmNjU2ZDAwODk3NDQ5MzQ4NWU1YjNhYWE5NjNiYzc3Li4zNzZlMGQxMjRmZTUyODg1YjgyYjYy
OWQ2NzdmNWFhMTExMmJkYzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCkBAIC0y
Myw3ICsyMywxMSBAQAogCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRp
b25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KaW5k
ZXggOThmYjc4Y2QwMjgzMDdjN2JlMjYyZDAxYzEyMTc2NjA5Y2E4YmM3MC4uYWY2Mjg3ZjY2MmRm
YTE1M2YxNTQ4MjYwMWI3NGVhNDQ2Yzg0YjI1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KQEAgLTEyNCwxMiArMTI0LDEyIEBAIHN0YXRp
YyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBjb25zdCBTCiAKICAgICBbY2F0YWxvZyBkcmF3R2x5cGhzOmdseXBocyBhdFBv
c2l0aW9uczpwb3NpdGlvbnMuZGF0YSgpIGluQ29udGV4dDpjb250ZXh0IHdpdGhGb250OmN0Rm9u
dCBjb3VudDpjb3VudCBzdHlsZVByZXNldE5hbWU6QCJfVUlLaXROZXdMZXR0ZXJwcmVzc1N0eWxl
IiBzdHlsZUNvbmZpZ3VyYXRpb246c3R5bGVDb25maWd1cmF0aW9uIGZvcmVncm91bmRDb2xvcjpD
R0NvbnRleHRHZXRGaWxsQ29sb3JBc0NvbG9yKGNvbnRleHQpXTsKICNlbHNlCi1VTlVTRURfUEFS
QU0ocG9pbnQpOwotVU5VU0VEX1BBUkFNKGZvbnQpOwotVU5VU0VEX1BBUkFNKGNvbnRleHQpOwot
VU5VU0VEX1BBUkFNKGdseXBocyk7Ci1VTlVTRURfUEFSQU0oYWR2YW5jZXMpOwotVU5VU0VEX1BB
UkFNKGNvdW50KTsKKyAgICBVTlVTRURfUEFSQU0ocG9pbnQpOworICAgIFVOVVNFRF9QQVJBTShm
b250KTsKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGdseXBo
cyk7CisgICAgVU5VU0VEX1BBUkFNKGFkdmFuY2VzKTsKKyAgICBVTlVTRURfUEFSQU0oY291bnQp
OwogI2VuZGlmCiB9CiAKQEAgLTE3OSw3ICsxNzksNyBAQCBzdGF0aWMgdm9pZCBzaG93R2x5cGhz
V2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0
YQogICAgIH0KIH0KIAotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KSBjb25zdAordm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50
KSBjb25zdAogewogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZv
bnQtPnBsYXRmb3JtRGF0YSgpOwogICAgIGlmICghcGxhdGZvcm1EYXRhLnNpemUoKSkKQEAgLTIy
MSwxMSArMjIxLDEzIEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zCiAgICAgICAgIGNoYW5nZUZv
bnRTbW9vdGhpbmcgPSB0cnVlOwogICAgIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgYm9v
bCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBmYWxzZTsKICAgICBpZiAoY2hhbmdl
Rm9udFNtb290aGluZykgewogICAgICAgICBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcg
PSB3a0NHQ29udGV4dEdldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCk7CiAgICAgICAgIENH
Q29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgc2hvdWxkU21vb3RoRm9udHMp
OwogICAgIH0KKyNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBOU0ZvbnQqIGRyYXdG
b250OwpAQCAtMjQ2LDkgKzI0OCwzOCBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29ucwogICAgIENH
Q29udGV4dFNldEZvbnQoY2dDb250ZXh0LCBwbGF0Zm9ybURhdGEuY2dGb250KCkpOwogCiAgICAg
Ym9vbCB1c2VMZXR0ZXJwcmVzc0VmZmVjdCA9IHNob3VsZFVzZUxldHRlcnByZXNzRWZmZWN0KCpj
b250ZXh0KTsKKyAgICBGbG9hdFBvaW50IHBvaW50ID0gYW5jaG9yUG9pbnQ7CiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIGZsb2F0IGZvbnRTaXplID0gcGxhdGZvcm1EYXRhLnNpemUoKTsKICAgICBD
R0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSB1c2VMZXR0ZXJwcmVzc0VmZmVjdCB8fCBwbGF0Zm9y
bURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSA/IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHkgOiBD
R0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShmb250U2l6ZSwgZm9udFNpemUpOworICAgIGlmIChw
bGF0Zm9ybURhdGEubV9pc0Vtb2ppKSB7CisgICAgICAgIGlmICghY29udGV4dC0+ZW1vamlEcmF3
aW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIE1pbWljIHRo
ZSBwb3NpdGlvaW5pbmcgb2Ygbm9uLWJpdG1hcCBnbHlwaHMsIHdoaWNoIGFyZSBub3Qgc3VicGl4
ZWwtcG9zaXRpb25lZC4KKyAgICAgICAgcG9pbnQuc2V0WShjZWlsZihwb2ludC55KCkpKTsKKwor
ICAgICAgICAvLyBFbW9qaSBnbHlwaHMgc25hcCB0byB0aGUgQ1NTIHBpeGVsIGdyaWQuCisgICAg
ICAgIHBvaW50LnNldFgoZmxvb3JmKHBvaW50LngoKSkpOworCisgICAgICAgIC8vIEVtb2ppIGds
eXBocyBhcmUgb2Zmc2V0IG9uZSBDU1MgcGl4ZWwgdG8gdGhlIHJpZ2h0LgorICAgICAgICBwb2lu
dC5tb3ZlKDEsIDApOworCisgICAgICAgIC8vIEVtb2ppIGdseXBocyBhcmUgb2Zmc2V0IHZlcnRp
Y2FsbHkgYmFzZWQgb24gZm9udCBzaXplLgorICAgICAgICBmbG9hdCB5ID0gcG9pbnQueSgpOwor
ICAgICAgICBpZiAoZm9udFNpemUgPD0gMTUpIHsKKyAgICAgICAgICAgIC8vIFVuZG8gQ29yZSBU
ZXh0J3MgeSBhZGp1c3RtZW50LgorICAgICAgICAgICAgc3RhdGljIGZsb2F0IHlBZGp1c3RtZW50
RmFjdG9yID0gaW9zRXhlY3V0YWJsZVdhc0xpbmtlZE9uT3JBZnRlclZlcnNpb24od2tJT1NTeXN0
ZW1WZXJzaW9uXzZfMCkgPyAuMTkgOiAuMTsKKyAgICAgICAgICAgIHBvaW50LnNldFkoZmxvb3Jm
KHkgLSB5QWRqdXN0bWVudEZhY3RvciAqIChmb250U2l6ZSArIDIpICsgMikpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKGZvbnRTaXplIDwgMjYpCisgICAgICAgICAgICAgICAg
eSAtPSAuMzVmICogZm9udFNpemUgLSAxMDsKKworICAgICAgICAgICAgLy8gVW5kbyBDb3JlIFRl
eHQncyB5IGFkanVzdG1lbnQuCisgICAgICAgICAgICBzdGF0aWMgZmxvYXQgeUFkanVzdG1lbnQg
PSBpb3NFeGVjdXRhYmxlV2FzTGlua2VkT25PckFmdGVyVmVyc2lvbih3a0lPU1N5c3RlbVZlcnNp
b25fNl8wKSA/IDMuOCA6IDI7CisgICAgICAgICAgICBwb2ludC5zZXRZKGZsb29yZih5IC0geUFk
anVzdG1lbnQpKTsKKyAgICAgICAgfQorICAgIH0KICNlbHNlCiAgICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eTsKICAgICBpZiAoZHJhd0ZvbnQg
JiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFwRm9udCgpKQpAQCAtMzAzLDcgKzMzNCwxMSBA
QCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udCwgY29ucwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25v
cmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRl
IGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0
WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChjb250ZXh0LT5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZh
bmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4
dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUdseXBocyk7CisjaWYgIVBMQVRGT1JNKElP
UykKICAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCisjZWxzZQorICAgICAgICBpZiAo
c3ludGhldGljQm9sZE9mZnNldCAmJiAhcGxhdGZvcm1EYXRhLm1faXNFbW9qaSkKKyNlbmRpZgog
ICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRY
ICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGds
eXBoQnVmZmVyLmdseXBocyhmcm9tKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ0dTaXplKj4oZ2x5cGhC
dWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMpOwogICAgICAgICBjb250ZXh0LT5zZXRG
aWxsQ29sb3IoZmlsbENvbG9yLCBmaWxsQ29sb3JTcGFjZSk7CiAgICAgfQpAQCAtMzEyLDcgKzM0
NywxMSBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29ucwogICAgICAgICBzaG93TGV0dGVycHJlc3Nl
ZEdseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5n
bHlwaHMoZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFu
Y2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKICAgICBlbHNlCiAgICAgICAgIHNob3dHbHlwaHNXaXRo
QWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20p
LCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSks
IG51bUdseXBocyk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoc3ludGhldGljQm9sZE9m
ZnNldCkKKyNlbHNlCisgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQgJiYgIXBsYXRmb3JtRGF0
YS5tX2lzRW1vamkpCisjZW5kaWYKICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9h
dFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50LnkoKSksIGZvbnQs
IGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0aWNfY2FzdDxjb25zdCBD
R1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUdseXBocyk7CiAKICAgICBp
ZiAoaGFzU2ltcGxlU2hhZG93KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VUcmVlTm9kZU1hYy5jcHAKaW5kZXggYzBlNTRj
YjQ4OThkYjc5NjA3OWQ5ZDI5MWNhNDcxN2Y1MjAwNjVjNS4uNjEyYjQ1M2ZlZmE1YjNlMTY1NzYx
ZmM0ZGE2ZDNhNzNmZjU1MmIwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlVHJlZU5vZGVNYWMuY3BwCkBAIC0zMiw3
ICszMiwxMyBAQAogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5o
IgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpZiAhUExBVEZPUk0oSU9T
KQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgor
I2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dGb250VW5pY29kZVN1cHBvcnQuaD4KKyNp
bmNsdWRlIDxDb3JlVGV4dC9DVEZvbnRQcml2Lmg+CisjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRl
eHQuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYzLDcgKzY5LDE2IEBA
IGJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBV
Q2hhciogYnVmZmVyLCB1bnNpZ25lZCBiCiAKICAgICBWZWN0b3I8Q0dHbHlwaCwgNTEyPiBnbHlw
aHMoYnVmZmVyTGVuZ3RoKTsKICAgICBpZiAoIXNob3VsZFVzZUNvcmVUZXh0KGJ1ZmZlciwgYnVm
ZmVyTGVuZ3RoLCBmb250RGF0YSkpIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICB3a0dl
dEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBi
dWZmZXIsIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisjZWxzZQorICAgICAgICAvLyBX
ZSBwYXNzIGluIGVpdGhlciAyNTYgb3IgNTEyIFVURi0xNiBjaGFyYWN0ZXJzOiAyNTYgZm9yIFUr
RkZGRiBhbmQgbGVzcywgNTEyIChkb3VibGUgY2hhcmFjdGVyIHN1cnJvZ2F0ZXMpCisgICAgICAg
IC8vIGZvciBVKzEwMDAwIGFuZCBhYm92ZS4gSXQgaXMgaW5kZWVkIHBvc3NpYmxlIHRvIGdldCBi
YWNrIDUxMiBnbHlwaHMgYmFjayBmcm9tIHRoZSBBUEksIHNvIHRoZSBnbHlwaCBidWZmZXIKKyAg
ICAgICAgLy8gd2UgcGFzcyBpbiBtdXN0IGJlIDUxMi4gSWYgd2UgZ2V0IGJhY2sgbW9yZSB0aGFu
IDI1NiBnbHlwaHMgdGhvdWdoIHdlJ2xsIGlnbm9yZSBhbGwgdGhlIG9uZXMgYWZ0ZXIgMjU2LAor
ICAgICAgICAvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVuIGFzIHRoZSBvbmx5IHRpbWUgd2UgcGFz
cyBpbiA1MTIgY2hhcmFjdGVycyBpcyB3aGVuIHRoZXkgYXJlIHN1cnJvZ2F0ZXMuCisgICAgICAg
IC8vIEZJWE1FOiBVc2Ugd2tHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKCkgaW5zdGVhZCBvZiBDR0Zv
bnRHZXRHbHlwaHNGb3JVbmljaGFycygpIG9uY2Ugd2UgdXBkYXRlIFdlYktpdCBTeXN0ZW0gSW50
ZXJmYWNlIG9uIGlPUy4KKyAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoZm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBidWZmZXIsIGdseXBocy5kYXRhKCksIGJ1ZmZl
ckxlbmd0aCk7CisjZW5kaWYKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIWdseXBoc1tpXSkKICAgICAgICAgICAgICAgICBz
ZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKQEAgLTE0NCw2ICsxNTksNyBA
QCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
VUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhh
dmVHbHlwaHMgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogcnVuU2ltcGxlID0gZm9u
dERhdGEtPmdldENvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YSgoTlNGb250ICopcnVuRm9u
dCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChydW5TaW1wbGUpIHsKQEAgLTE1OCw2ICsxNzQs
NyBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQorI2Vu
ZGlmIC8vICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KaW5kZXggOTZhNjMxOTRlYWU2MDYzN2Mz
NDZlNDg2NjBkY2NlODc2NzNjNjI2Yy4uZTQ0YTEzZjRhNTcwODNlYTlkN2I3MzAzYTNhZDFlMjZi
MWRkNjc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQpAQCAtMjgsNiArMjgsOSBAQAogI2lm
IFVTRSgzRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaWYg
UExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNESU9TLmgiCisjZW5kaWYK
IAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAKQEAgLTM5LDggKzQyLDE1IEBACiAjaW5j
bHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8T3Bl
bkdMRVMvRVMyL2dsZXh0Lmg+CisjaW1wb3J0IDxPcGVuR0xFUy9FQUdMLmg+CisjaW1wb3J0IDxP
cGVuR0xFUy9FQUdMRHJhd2FibGUuaD4KKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5o
PgorI2Vsc2UKICNpbmNsdWRlIDxPcGVuR0wvQ0dMUmVuZGVyZXJzLmg+CiAjaW5jbHVkZSA8T3Bl
bkdML2dsLmg+CisjZW5kaWYKICNpbmNsdWRlICJXZWJHTExheWVyLmgiCiAjaW5jbHVkZSAiV2Vi
R0xPYmplY3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+CkBAIC02MSw2ICs3
MSw3IEBAIHB1YmxpYzoKICAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkgeyB9CiB9Owog
CisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyB2b2lkIHNldFBpeGVsRm9ybWF0KFZlY3RvcjxD
R0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4mIGF0dHJpYnMsIGludCBjb2xvckJpdHMsIGludCBkZXB0
aEJpdHMsIGJvb2wgYWNjZWxlcmF0ZWQsIGJvb2wgc3VwZXJzYW1wbGUsIGJvb2wgY2xvc2VzdCwg
Ym9vbCBhbnRpYWxpYXMpCiB7CiAgICAgYXR0cmlicy5jbGVhcigpOwpAQCAtOTMsNiArMTA0LDcg
QEAgc3RhdGljIHZvaWQgc2V0UGl4ZWxGb3JtYXQoVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0cmli
dXRlPiYgYXR0cmlicywgaW50IGNvbG9yQmkKICAgICAgICAgCiAgICAgYXR0cmlicy5hcHBlbmQo
c3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDApKTsKIH0KKyNlbmRpZiAvLyAh
UExBVEZPUk0oSU9TKQogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0
V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVy
U3R5bGUpCiB7CkBAIC0xMDcsNiArMTE5LDkgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAg
ICA6IG1fY3VycmVudFdpZHRoKDApCiAgICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKICAgICAsIG1f
Y29udGV4dE9iaigwKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1fY29tcGlsZXIoU0hfRVNT
TF9PVVRQVVQpCisjZW5kaWYKICAgICAsIG1fYXR0cnMoYXR0cnMpCiAgICAgLCBtX3RleHR1cmUo
MCkKICAgICAsIG1fY29tcG9zaXRvclRleHR1cmUoMCkKQEAgLTEyMiw2ICsxMzcsMTAgQEAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7CiAgICAg
VU5VU0VEX1BBUkFNKHJlbmRlclN0eWxlKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2Nv
bnRleHRPYmogPSBbW0VBR0xDb250ZXh0IGFsbG9jXSBpbml0V2l0aEFQSTprRUFHTFJlbmRlcmlu
Z0FQSU9wZW5HTEVTMl07CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjZWxzZQogICAgIFZl
Y3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0cmliczsKICAgICBDR0xQaXhlbEZvcm1h
dE9iaiBwaXhlbEZvcm1hdE9iaiA9IDA7CiAgICAgR0xpbnQgbnVtUGl4ZWxGb3JtYXRzID0gMDsK
QEAgLTE4NCwxMiArMjAzLDE2IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKICAg
ICAKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgV2ViR0xM
YXllcgogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgICAgICBtX3dlYkdMTGF5
ZXIgPSBhZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10gaW5pdFdpdGhHcmFwaGljc0NvbnRleHQz
RDp0aGlzXSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBbbV93ZWJHTExheWVyLmdldCgp
IHNldE9wYXF1ZTowXTsKKyNlbmRpZgogI2lmbmRlZiBOREVCVUcKICAgICAgICAgW21fd2ViR0xM
YXllci5nZXQoKSBzZXROYW1lOkAiV2ViR0wgTGF5ZXIiXTsKICNlbmRpZiAgICAKQEAgLTE5OCw2
ICsyMjEsOSBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgIGlmICh1c2VNdWx0aXNhbXBs
aW5nKQogICAgICAgICA6OmdsRW5hYmxlKEdMX01VTFRJU0FNUExFKTsKICAgICAKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fdGV4dHVyZSk7CisjZWxz
ZQogICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8KICAgICA6OmdsR2VuVGV4
dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IG1fdGV4dHVyZSk7CkBAIC0yMTIsNiArMjM4LDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBo
aWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kK
ICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywg
R0xfQ0xBTVApOwogICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9ULCBHTF9DTEFNUCk7CiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IDApOworI2VuZGlmCiAgICAgCiAgICAgLy8gY3JlYXRlIGFuIEZCTwogICAgIDo6Z2xHZW5GcmFt
ZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKQEAgLTI1Myw4ICsyODAsMTAgQEAgR3JhcGhpY3NDb250
ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJzLCBIb3N0V2kKIAogICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2Vz
KTsKICAgICAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BS
T0dSQU1fUE9JTlRfU0laRSk7CiAgICAgOjpnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOworI2Vu
ZGlmCiAKICAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIH0KQEAgLTI2Miw5ICsyOTEs
MTUgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhp
Y3NDb250ZXh0M0QoKQogewogICAgIGlmIChtX2NvbnRleHRPYmopIHsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICA6OmdsRGVsZXRlUmVu
ZGVyYnVmZmVycygxLCAmbV90ZXh0dXJlKTsKKyAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZl
cnMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2Vsc2UKICAgICAgICAgQ0dMU2V0Q3VycmVu
dENvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZt
X3RleHR1cmUpOwogICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRl
eHR1cmUpOworI2VuZGlmCiAgICAgICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewogICAgICAg
ICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1
ZmZlcik7CiAgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgp
CkBAIC0yNzUsMjIgKzMxMCw1MSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4
dDNEKCkKICAgICAgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOwogICAgICAgICB9CiAgICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1
ZmZlcnNFWFQoMSwgJm1fZmJvKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIFtFQUdMQ29u
dGV4dCBzZXRDdXJyZW50Q29udGV4dDowXTsKKyAgICAgICAgW3N0YXRpY19jYXN0PEVBR0xDb250
ZXh0Kj4obV9jb250ZXh0T2JqKSByZWxlYXNlXTsKKyNlbHNlCiAgICAgICAgIENHTFNldEN1cnJl
bnRDb250ZXh0KDApOwogICAgICAgICBDR0xEZXN0cm95Q29udGV4dChtX2NvbnRleHRPYmopOwor
I2VuZGlmCiAgICAgfQogfQogCisjaWYgUExBVEZPUk0oSU9TKQorYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZShHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgW21fd2ViR0xMYXllci5nZXQoKSBzZXRCb3VuZHM6
Q0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KV07CisgICAgcmV0dXJuIFttX2NvbnRleHRP
YmogcmVuZGVyYnVmZmVyU3RvcmFnZTpHTF9SRU5ERVJCVUZGRVIgZnJvbURyYXdhYmxlOnN0YXRp
Y19jYXN0PE5TT2JqZWN0PEVBR0xEcmF3YWJsZT4qPihtX3dlYkdMTGF5ZXIuZ2V0KCkpXTsKK30K
KyNlbmRpZgorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQog
ewogICAgIGlmICghbV9jb250ZXh0T2JqKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgaWYgKFtFQUdMQ29udGV4dCBjdXJyZW50Q29udGV4dF0gIT0gbV9j
b250ZXh0T2JqKQorICAgICAgICByZXR1cm4gW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0
OnN0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obV9jb250ZXh0T2JqKV07CisjZWxzZQogICAgIENH
TENvbnRleHRPYmogY3VycmVudENvbnRleHQgPSBDR0xHZXRDdXJyZW50Q29udGV4dCgpOwogICAg
IGlmIChjdXJyZW50Q29udGV4dCAhPSBtX2NvbnRleHRPYmopCiAgICAgICAgIHJldHVybiBDR0xT
ZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopID09IGtDR0xOb0Vycm9yOworI2VuZGlmCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjplbmRQYWludCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bEZsdXNoKCk7CisgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3Rl
eHR1cmUpOworICAgIFtzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCo+KG1fY29udGV4dE9iaikgcHJl
c2VudFJlbmRlcmJ1ZmZlcjpHTF9SRU5ERVJCVUZGRVJdOworICAgIFtFQUdMQ29udGV4dCBzZXRD
dXJyZW50Q29udGV4dDpuaWxdOworfQorI2VuZGlmCisKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250
ZXh0TWFjLm1tCmluZGV4IDJjODM4NWQxZWE2ZTI2NjQ0ODAwODFkOTBlNDM3YTM2ZDc2OGU1MmIu
LjUzM2ViMGU2YTg1ZTJlMTAzYjE0YmFmODhhODAwYjA4MjY1ZjNjY2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4
dE1hYy5tbQpAQCAtMjgsMTAgKzI4LDE5IEBACiAKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENH
LmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgorI2lmIFVT
RShBUFBLSVQpCiAjaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+CisjZW5kaWYKICNpbXBvcnQgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIkNvbG9yLmgi
CisjaW1wb3J0ICJXS0dyYXBoaWNzLmgiCisjZW5kaWYKKworI2lmICFQTEFURk9STShJT1MpCiAj
aW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIKKyNlbmRpZgogI2ltcG9ydCAi
V2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogCiBAY2xhc3MgTlNDb2xvcjsKQEAgLTQ1LDYgKzU0
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gY2FsbHMgaW4gdGhpcyBmaWxlIGFyZSBhbGwg
ZXhjZXB0aW9uLXNhZmUsIHNvIHdlIGRvbid0IGJsb2NrCiAvLyBleGNlcHRpb25zIGZvciB0aG9z
ZS4KIAorI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMgdm9pZCBkcmF3Rm9jdXNSaW5nVG9Db250
ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aCwgQ0dDb2xv
clJlZiBjb2xvciwgaW50IHJhZGl1cykKIHsKICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4
dCk7CkBAIC02NCw5ICs3NCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiBwYXRoLCBpbnQgd2lkdGgsIGludCAvKm9mZnNldCovLAogCiAgICAgZHJh
d0ZvY3VzUmluZ1RvQ29udGV4dChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgo
KSwgY29sb3JSZWYsIHJhZGl1cyk7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBy
ZWN0cywgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CisjaWYg
IVBMQVRGT1JNKElPUykKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKQEAgLTgwLDkgKzkyLDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNS
aW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3aWR0aCwgaW50CiAgICAgICAg
IENHUGF0aEFkZFJlY3QoZm9jdXNSaW5nUGF0aC5nZXQoKSwgMCwgQ0dSZWN0SW5zZXQocmVjdHNb
aV0sIC1vZmZzZXQsIC1vZmZzZXQpKTsKIAogICAgIGRyYXdGb2N1c1JpbmdUb0NvbnRleHQocGxh
dGZvcm1Db250ZXh0KCksIGZvY3VzUmluZ1BhdGguZ2V0KCksIGNvbG9yUmVmLCByYWRpdXMpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVjdHMpOworICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7
CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKGNvbG9yKTsKKyNl
bmRpZgogfQogCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGljIE5TQ29sb3IqIG1ha2VQYXR0
ZXJuQ29sb3IoTlNTdHJpbmcqIGZpcnN0Q2hvaWNlTmFtZSwgTlNTdHJpbmcqIHNlY29uZENob2lj
ZU5hbWUsIE5TQ29sb3IqIGRlZmF1bHRDb2xvciwgYm9vbCYgdXNpbmdEb3QpCiB7CiAgICAgLy8g
RXZlbnR1YWxseSB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgcmlkIG9mIHRoZSBzZWNvbmRDaG9p
Y2VOYW1lLiBGb3IgdGhlIHRpbWUgYmVpbmcgd2UgbmVlZCBib3RoIHRvIGtlZXAKQEAgLTk4LDYg
KzExNywxNSBAQCBzdGF0aWMgTlNDb2xvciogbWFrZVBhdHRlcm5Db2xvcihOU1N0cmluZyogZmly
c3RDaG9pY2VOYW1lLCBOU1N0cmluZyogc2Vjb25kQ2hvaQogICAgICAgICBjb2xvciA9IGRlZmF1
bHRDb2xvcjsKICAgICByZXR1cm4gY29sb3I7CiB9CisjZWxzZQorc3RhdGljIFJldGFpblB0cjxD
R1BhdHRlcm5SZWY+IGNyZWF0ZURvdFBhdHRlcm4oYm9vbCYgdXNpbmdEb3QsIGNvbnN0IGNoYXIq
IHJlc291cmNlTmFtZSkKK3sKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9w
dENGKFdLR3JhcGhpY3NDcmVhdGVJbWFnZUZyb21CdW5kbGVXaXRoTmFtZShyZXNvdXJjZU5hbWUp
KTsKKyAgICBBU1NFUlQoaW1hZ2UpOyAvLyBpZiBpbWFnZSBpcyBub3QgYXZhaWxhYmxlLCB3ZSB3
YW50IHRvIGtub3cKKyAgICB1c2luZ0RvdCA9IHRydWU7CisgICAgcmV0dXJuIGFkb3B0Q0YoV0tD
cmVhdGVQYXR0ZXJuRnJvbUNHSW1hZ2UoaW1hZ2UuZ2V0KCkpKTsKK30KKyNlbmRpZiAvLyAhUExB
VEZPUk0oSU9TKQogCiBzdGF0aWMgTlNDb2xvciAqc3BlbGxpbmdQYXR0ZXJuQ29sb3IgPSBudWxs
cHRyOwogc3RhdGljIE5TQ29sb3IgKmdyYW1tYXJQYXR0ZXJuQ29sb3IgPSBudWxscHRyOwpAQCAt
MTIxLDIwICsxNDksMzEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHcKICAgICBmbG9hdCBwYXR0
ZXJuV2lkdGggPSBjTWlzc3BlbGxpbmdMaW5lUGF0dGVybldpZHRoOwogCiAgICAgYm9vbCB1c2lu
Z0RvdDsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIE5TQ29sb3IgKnBhdHRlcm5Db2xvcjsKKyNl
bHNlCisgICAgQ0dQYXR0ZXJuUmVmIGRvdFBhdHRlcm47CisjZW5kaWYKICAgICBzd2l0Y2ggKHN0
eWxlKSB7CiAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJTcGVsbGluZ0xpbmVTdHlsZToKICAg
ICAgICAgewogICAgICAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBzcGVsbGluZyBwYXR0ZXJuIGNv
bG9yLgogICAgICAgICAgICAgc3RhdGljIGJvb2wgdXNpbmdEb3RGb3JTcGVsbGluZyA9IGZhbHNl
OworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICBpZiAoIXNwZWxsaW5nUGF0dGVybkNv
bG9yKQogICAgICAgICAgICAgICAgIHNwZWxsaW5nUGF0dGVybkNvbG9yID0gW21ha2VQYXR0ZXJu
Q29sb3IoQCJOU1NwZWxsaW5nRG90IiwgQCJTcGVsbGluZ0RvdCIsIFtOU0NvbG9yIHJlZENvbG9y
XSwgdXNpbmdEb3RGb3JTcGVsbGluZykgcmV0YWluXTsKICAgICAgICAgICAgIHVzaW5nRG90ID0g
dXNpbmdEb3RGb3JTcGVsbGluZzsKICAgICAgICAgICAgIHBhdHRlcm5Db2xvciA9IHNwZWxsaW5n
UGF0dGVybkNvbG9yOworI2Vsc2UKKyAgICAgICAgICAgIHN0YXRpYyBDR1BhdHRlcm5SZWYgc3Bl
bGxpbmdQYXR0ZXJuID0gY3JlYXRlRG90UGF0dGVybih1c2luZ0RvdEZvclNwZWxsaW5nLCAiU3Bl
bGxpbmdEb3QiKS5sZWFrUmVmKCk7CisgICAgICAgICAgICBkb3RQYXR0ZXJuID0gc3BlbGxpbmdQ
YXR0ZXJuOworI2VuZGlmCisgICAgICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yU3BlbGxp
bmc7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIERvY3VtZW50
TWFya2VyR3JhbW1hckxpbmVTdHlsZToKICAgICAgICAgeworI2lmICFQTEFURk9STShJT1MpCiAg
ICAgICAgICAgICAvLyBDb25zdGFudHMgZm9yIGdyYW1tYXIgcGF0dGVybiBjb2xvci4KICAgICAg
ICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yR3JhbW1hciA9IGZhbHNlOwogICAgICAgICAg
ICAgaWYgKCFncmFtbWFyUGF0dGVybkNvbG9yKQpAQCAtMTQyLDggKzE4MSwxMiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgdwogICAgICAgICAgICAgdXNpbmdEb3QgPSB1c2luZ0RvdEZvckdyYW1t
YXI7CiAgICAgICAgICAgICBwYXR0ZXJuQ29sb3IgPSBncmFtbWFyUGF0dGVybkNvbG9yOwogICAg
ICAgICAgICAgYnJlYWs7CisjZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICByZXR1cm47CisjZW5kaWYKICAgICAgICAgfQotI2lmIFBMQVRGT1JNKE1B
QykKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBQTEFURk9STShNQUMpCiAgICAgICAgIC8vIFRvIHN1
cHBvcnQgY29ycmVjdGlvbiBwYW5lbC4KICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlckF1dG9j
b3JyZWN0aW9uUmVwbGFjZW1lbnRMaW5lU3R5bGU6CiAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJr
ZXJEaWN0YXRpb25BbHRlcm5hdGl2ZXNMaW5lU3R5bGU6CkBAIC0xNTcsNyArMjAwLDIxIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB3CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2Vu
ZGlmCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBjYXNlIFRleHRDaGVja2luZ0RpY3RhdGlv
blBocmFzZVdpdGhBbHRlcm5hdGl2ZXNMaW5lU3R5bGU6CisgICAgICAgIHsKKyAgICAgICAgICAg
IHN0YXRpYyBib29sIHVzaW5nRG90Rm9yRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcyA9
IGZhbHNlOworICAgICAgICAgICAgc3RhdGljIENHUGF0dGVyblJlZiBkaWN0YXRpb25QaHJhc2VX
aXRoQWx0ZXJuYXRpdmVzUGF0dGVybiA9IGNyZWF0ZURvdFBhdHRlcm4odXNpbmdEb3RGb3JEaWN0
YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCAiRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0
aXZlc0RvdCIpLmxlYWtSZWYoKTsKKyAgICAgICAgICAgIGRvdFBhdHRlcm4gPSBkaWN0YXRpb25Q
aHJhc2VXaXRoQWx0ZXJuYXRpdmVzUGF0dGVybjsKKyAgICAgICAgICAgIHVzaW5nRG90ID0gdXNp
bmdEb3RGb3JEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAgICAgICAgIGRlZmF1bHQ6
CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCByZW1vdmUg
ZGVmYXVsdCBjYXNlIHNvIHdlIGdldCBjb21waWxlLXRpbWUgZXJyb3JzLgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTE4MiwyMCArMjM5LDMzIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBmbG9hdCB3CiAgICAgLy8gZm9yIHRyYW5zZm9ybXMuCiAKICAgICAvLyBEcmF3IHVuZGVy
bGluZS4KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4
dCBsb2NhbENvbnRleHQodGhpcyk7CiAgICAgTlNHcmFwaGljc0NvbnRleHQgKmN1cnJlbnRDb250
ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IChDR0NvbnRleHRSZWYpW2N1cnJlbnRDb250ZXh0IGdyYXBoaWNzUG9ydF07
CisjZWxzZQorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Cisj
ZW5kaWYKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogCisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBbcGF0dGVybkNvbG9yIHNldF07CisjZWxzZQorICAgIFdLU2V0UGF0dGVybihj
b250ZXh0LCBkb3RQYXR0ZXJuLCBZRVMsIFlFUyk7CisjZW5kaWYKIAogICAgIHdrU2V0UGF0dGVy
blBoYXNlSW5Vc2VyU3BhY2UoY29udGV4dCwgb2Zmc2V0UG9pbnQpOwogCisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBOU1JlY3RGaWxsVXNpbmdPcGVyYXRpb24oTlNNYWtlUmVjdChvZmZzZXRQb2lu
dC54KCksIG9mZnNldFBvaW50LnkoKSwgd2lkdGgsIHBhdHRlcm5IZWlnaHQpLCBOU0NvbXBvc2l0
ZVNvdXJjZU92ZXIpOworI2Vsc2UKKyAgICBXS1JlY3RGaWxsVXNpbmdPcGVyYXRpb24oY29udGV4
dCwgQ0dSZWN0TWFrZShvZmZzZXRQb2ludC54KCksIG9mZnNldFBvaW50LnkoKSwgd2lkdGgsIHBh
dHRlcm5IZWlnaHQpLCBrQ0dDb21wb3NpdGVTb3Zlcik7CisjZW5kaWYKICAgICAKICAgICBDR0Nv
bnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIENH
Q29sb3JTcGFjZVJlZiBsaW5lYXJSR0JDb2xvclNwYWNlUmVmKCkKIHsKICAgICBzdGF0aWMgQ0dD
b2xvclNwYWNlUmVmIGxpbmVhclNSR0JTcGFjZSA9IDA7CkBAIC0yMTUsNSArMjg1LDYgQEAgQ0dD
b2xvclNwYWNlUmVmIGxpbmVhclJHQkNvbG9yU3BhY2VSZWYoKQogCiAgICAgcmV0dXJuIGxpbmVh
clNSR0JTcGFjZTsKIH0KKyNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCmluZGV4IGRjYjI2OTQ2OTRkOWIyNTBlY2IyZmNmZmRh
Y2RiMjM3NDJlY2I2ODcuLmEwZDZlZWVlZDNjNGRiMzNlYWJkOTI2MWNiY2ZhNDM1YWQyZDZiNTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1t
CkBAIC0xOCw2ICsxOCw4IEBACiAgKgogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaW1w
b3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkljb24uaCIKIApAQCAtODIsMyArODQsNSBAQCB2b2lk
IEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVj
dCkKIH0KIAogfQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQppbmRleCAyNTFmNTc0OGJmOTAx
ZDRmYjg0NjlmYzNmNzBlNDk3YjNhYmI0N2QzLi4xMjA0NThjMzMxMTU5MWY2YzAyYjYzMDU3N2Rh
Y2UzMDY5NDM4M2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvSW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ltYWdlTWFjLm1tCkBAIC0zNyw2ICszNywxOCBAQAogQGltcGxlbWVudGF0aW9uIFdlYkNv
cmVCdW5kbGVGaW5kZXIKIEBlbmQKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIlNvZnRM
aW5raW5nLmgiCisKKyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbXBv
cnQgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmls
ZUNvcmVTZXJ2aWNlcy5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKE1vYmlsZUNvcmVTZXJ2aWNl
cykKK1NPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFR5cGVUSUZGLCBD
RlN0cmluZ1JlZikKKyNkZWZpbmUga1VUVHlwZVRJRkYgZ2V0a1VUVHlwZVRJRkYoKQorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBs
YXRmb3JtRGF0YSgpCkBAIC00NCw3ICs1Niw5IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRh
dGVQbGF0Zm9ybURhdGEoKQogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkgIT0gMSkKICAgICAgICAg
cmV0dXJuOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBtX25zSW1hZ2UgPSAwOworI2VuZGlm
CiAgICAgbV90aWZmUmVwID0gMDsKIH0KIApAQCAtMTAzLDYgKzExNyw3IEBAIENGRGF0YVJlZiBC
aXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkKICAgICByZXR1cm4gbV90aWZmUmVw
LmdldCgpOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIE5TSW1hZ2UqIEJpdG1hcEltYWdlOjpn
ZXROU0ltYWdlKCkKIHsKICAgICBpZiAobV9uc0ltYWdlKQpAQCAtMTE1LDUgKzEzMCw2IEBAIE5T
SW1hZ2UqIEJpdG1hcEltYWdlOjpnZXROU0ltYWdlKCkKICAgICBtX25zSW1hZ2UgPSBhZG9wdE5T
KFtbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhEYXRhOihOU0RhdGEqKWRhdGFdKTsKICAgICByZXR1
cm4gbV9uc0ltYWdlLmdldCgpOwogfQorI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQb2ludE1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQb2ludE1hYy5tbQppbmRleCA3YTJlNzMwZWQ4
ZTZiNzQ5NjU2ZjU2Y2FmZGUwZTcxMTQ2NjlkZjhjLi5jMjljM2FlODY0ZDM4YWY3OWRjYzRhZTFj
YmJjNWI0OWRhYzE2YTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvSW50UG9pbnRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ludFBvaW50TWFjLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorI2lmICFQTEFURk9STShJT1MpCiAjaWZuZGVmIE5TR0VPTUVUUllfVFlQRVNf
U0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiAKIEludFBvaW50OjpJbnRQb2ludChjb25zdCBOU1Bv
aW50JiBwKSA6IG1feChzdGF0aWNfY2FzdDxpbnQ+KHAueCkpLCBtX3koc3RhdGljX2Nhc3Q8aW50
PihwLnkpKQpAQCAtNDAsNSArNDEsNiBAQCBJbnRQb2ludDo6b3BlcmF0b3IgTlNQb2ludCgpIGNv
bnN0CiB9CiAKICNlbmRpZgorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRSZWN0TWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWMubW0KaW5kZXgg
NzM4NjE4YTE5ODNhYzc3NWMzNTk4YTU2MzQ1Yjk0ZGFlNGIyNmExNC4uNzc0YTBiYTcwNGVlN2Q1
ODNhZjhlMDQwMmI5NzFhYzM4ZjQzYmNhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWMubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIVBMQVRGT1JNKElPUykKICNpZm5kZWYgTlNHRU9NRVRS
WV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIAogSW50UmVjdDo6b3BlcmF0b3IgTlNS
ZWN0KCkgY29uc3QKQEAgLTQ1LDUgKzQ2LDYgQEAgSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNv
bnN0IE5TUmVjdCYgcmVjdCkKIH0KIAogI2VuZGlmCisjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFNpemVNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50U2l6ZU1hYy5tbQppbmRleCBjN2Rj
ZDg4Yzg4ZTA3MTRjYWUxNTg2MzFhZThmMzMxOWIzZGNiZDZiLi45YTQ3NjY1MDlmYjNjZTQ2ODM0
ODgxYTVjNmY4MzE0MjBmYThmOWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvSW50U2l6ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvSW50U2l6ZU1hYy5tbQpAQCAtMjgsNiArMjgsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmbmRlZiBOU0dFT01FVFJZX1RZ
UEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogCiBJbnRTaXplOjpJbnRTaXplKGNvbnN0IE5T
U2l6ZSYgcykgOiBtX3dpZHRoKHN0YXRpY19jYXN0PGludD4ocy53aWR0aCkpLCBtX2hlaWdodChz
dGF0aWNfY2FzdDxpbnQ+KHMuaGVpZ2h0KSkKQEAgLTQwLDUgKzQxLDYgQEAgSW50U2l6ZTo6b3Bl
cmF0b3IgTlNTaXplKCkgY29uc3QKIH0KIAogI2VuZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L01lZGlhUGxheWVyUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9NZWRpYVBsYXllclByb3h5LmgKaW5kZXggYzU4NmZiODZmZWZhNDA2ODBmYTk1YTIzNTc3NjIz
ZDAzYTEyOWJiYi4uYzQxZThjZjg1MjNiZjU5NWFmZDk5NWQzOTkzN2UyZjhhYzZkMGVlYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVy
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQ
bGF5ZXJQcm94eS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiw2ICsyNiwyMSBAQAogI2lmbmRlZiBNZWRpYVBsYXllclByb3h5X2gK
ICNkZWZpbmUgTWVkaWFQbGF5ZXJQcm94eV9oCiAKKyNpZiBQTEFURk9STShJT1MpCisjaWYgZGVm
aW5lZChfX09CSkNfXykKKyNpbXBvcnQgPEZvdW5kYXRpb24vTlNHZW9tZXRyeS5oPgorI2VuZGlm
CisKKy8vIE5lZWRlZCBzaW5jZSB0aGlzIGlzIGEgV2ViS2l0IHByaXZhdGUgaGVhZGVyIG9uIGlP
Uy4KKyNpZm5kZWYgT0JKQ19DTEFTUworI2lmZGVmIF9fT0JKQ19fCisjZGVmaW5lIE9CSkNfQ0xB
U1MgQGNsYXNzCisjZWxzZQorI2RlZmluZSBPQkpDX0NMQVNTIGNsYXNzCisjZW5kaWYKKyNlbmRp
ZiAvLyAhZGVmaW5lZChPQkpDX0NMQVNTKQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogT0JK
Q19DTEFTUyBXZWJNZWRpYVBsYXllclByb3h5OwogCiBlbnVtIE1lZGlhUGxheWVyUHJveHlOb3Rp
ZmljYXRpb25UeXBlIHsKQEAgLTU3LDYgKzcyLDE2IEBAIGVudW0gTWVkaWFQbGF5ZXJQcm94eU5v
dGlmaWNhdGlvblR5cGUgewogICAgIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uVGltZUp1bXBlZCwK
ICAgICAKICAgICBNZWRpYVBsYXllck5vdGlmaWNhdGlvblBsYXlQYXVzZUJ1dHRvblByZXNzZWQs
CisgICAgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25SYXRlRGlkQ2hhbmdlLAorICAgIE1lZGlhUGxh
eWVyTm90aWZpY2F0aW9uR2FpbkZvY3VzLAorICAgIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uTG9z
ZUZvY3VzLAorICAgIE1lZGlhUGxheWVyUmVxdWVzdEJlZ2luUGxheWJhY2ssCisgICAgTWVkaWFQ
bGF5ZXJSZXF1ZXN0UGF1c2VQbGF5YmFjaywKKworI2lmIEVOQUJMRShJT1NfQUlSUExBWSkKKyAg
ICBNZWRpYVBsYXllck5vdGlmaWNhdGlvbkN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3ND
aGFuZ2VkLAorICAgIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uUGxheWJhY2tUYXJnZXRBdmFpbGFi
aWxpdHlDaGFuZ2VkLAorI2VuZGlmCiB9OwogCiAjaWZkZWYgX19PQkpDX18KQEAgLTcxLDYgKzk2
LDI1IEBAIGVudW0gTWVkaWFQbGF5ZXJQcm94eU5vdGlmaWNhdGlvblR5cGUgewogCiAtICh2b2lk
KV9zZXRQb3N0ZXI6KE5TVVJMICopdXJsOwogCistICh2b2lkKV9zZXRDb250cm9sczooQk9PTClj
b250cm9sczsKKy0gKHZvaWQpX3NldEF1dG9idWZmZXI6KEJPT0wpYXV0b2J1ZmZlcjsKKworLSAo
dm9pZClfZW50ZXJGdWxsU2NyZWVuOworLSAodm9pZClfZXhpdEZ1bGxTY3JlZW47CisKKyNpZiBF
TkFCTEUoSU9TX0FJUlBMQVkpCistIChCT09MKV9pc0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVs
ZXNzOworLSAodm9pZClfc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyOworCistIChCT09MKV9oYXNX
aXJlbGVzc1BsYXliYWNrVGFyZ2V0czsKKworLSAoQk9PTClfd2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWQ7CistICh2b2lkKV9zZXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZDooQk9P
TClkaXNhYmxlZDsKKworLSAodm9pZClfc2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlM
aXN0ZW5lcnM6KEJPT0wpaGFzTGlzdGVuZXJzOworI2VuZGlmCisKKy0gKHZvaWQpX3ByZXBhcmVG
b3JQbGF5YmFjazsKIC0gKHZvaWQpX3BsYXk7CiAtICh2b2lkKV9wYXVzZTsKIApAQCAtNzksNiAr
MTIzLDkgQEAgZW51bSBNZWRpYVBsYXllclByb3h5Tm90aWZpY2F0aW9uVHlwZSB7CiAtIChCT09M
KV9oYXNWaWRlbzsKIC0gKEJPT0wpX2hhc0F1ZGlvOwogCistIChCT09MKV9oYXNDbG9zZWRDYXB0
aW9uczsKKy0gKHZvaWQpX3NldENsb3NlZENhcHRpb25zVmlzaWJsZTooQk9PTCl2aXNpYmxlOwor
CiAtIChOU1RpbWVJbnRlcnZhbClfZHVyYXRpb247CiAKIC0gKGRvdWJsZSlfY3VycmVudFRpbWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxl
Rm9udERhdGFDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKaW5kZXggNzI5YmU2ZmFlNzcwZmRlZDA3OGY0
OTk4MjE1ZTU0ODNjZWY1ZGFiMy4uMDgyOGJkODA4MmMxODMxZjkwNjYwYzJjZDVlMjJhZDRmNzU2
ZWNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1Np
bXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcApAQCAtMjcsNyArMjcsMTEgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCisjaWYg
IVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9u
U2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNlbmRp
ZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQppbmRleCAyMWVhNjEx
NjA3ODYxNDMxZTYzYjY0YTMwY2VkNzdhNzBmOWE5MDBjLi4yNjQwY2M0Nzk1ODgyOGFiNTI4ZGM0
MWFhODU5MzQ2NTk0NmI1ZTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCkBAIC0zNSwyMCArMzUsMjcg
QEAKICNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgi
CiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaWYgVVNFKEFQUEtJVCkKICNp
bXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KICNpbXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBw
bGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbXBvcnQgPENvcmVUZXh0L0NvcmVUZXh0Lmg+
CisjZW5kaWYKICNpbXBvcnQgPGZsb2F0Lmg+CiAjaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+CiAj
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCisjaWYgIVBMQVRGT1JNKElPUykKIEBpbnRlcmZh
Y2UgTlNGb250IChXZWJBcHBLaXRTZWNyZXRBUEkpCiAtIChCT09MKV9pc0Zha2VGaXhlZFBpdGNo
OwogQGVuZAorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgCisKKyNpZiBVU0UoQVBQ
S0lUKQogc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udFJlZiBjdEZvbnQp
CiB7CiAgICAgLy8gVGhlIGNoZWNrIGRvZXNuJ3QgbG9vayBuZWF0IGJ1dCB0aGlzIGlzIHdoYXQg
QXBwS2l0IGRvZXMgZm9yIHZlcnRpY2FsIHdyaXRpbmcuLi4KQEAgLTI1NSw2ICsyNjIsNyBAQCB2
b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQogICAgIC8vIEZhbGxi
YWNrIHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0aW1hdGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhl
c2UgdmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1wb3NpdGl2ZS4KICAgICBpbml0Q2hhcldpZHRocygp
OwogfQorI2VuZGlmIC8vIFVTRShBUFBLSVQpCiAKIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtRGVzdHJveSgpCiB7CkBAIC0yNjgsNiArMjc2LDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1EZXN0cm95KCkKICAgICB9CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVk
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNj
YWxlRmFjdG9yKSBjb25zdAogewogICAgIGlmIChpc0N1c3RvbUZvbnQoKSkgewpAQCAtMzA0LDcg
KzMxMyw5IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvCiAKICAgICByZXR1cm4gMDsKIH0KKyNl
bmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCisjaWYgIVBMQVRGT1JNKElPUykKIGJvb2wgU2ltcGxl
Rm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50
IGxlbmd0aCkgY29uc3QKIHsKICAgICBOU1N0cmluZyAqc3RyaW5nID0gW1tOU1N0cmluZyBhbGxv
Y10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5OmNvbnN0X2Nhc3Q8dW5pY2hhcio+KGNoYXJhY3Rl
cnMpIGxlbmd0aDpsZW5ndGggZnJlZVdoZW5Eb25lOk5PXTsKQEAgLTMzNSw2ICszNDYsNyBAQCB2
b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgICAgICAgIFtuYW1lIGNh
c2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJNUy1QR290aGljIl0gIT0gTlNPcmRlcmVkU2FtZSAmJgog
ICAgICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTW9ub3R5cGVDb3JzaXZh
Il0gIT0gTlNPcmRlcmVkU2FtZTsKIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiBGbG9h
dFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgp
IGNvbnN0CiB7CkBAIC0zNDcsNiArMzU5LDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogICAgIHJldHVybiBib3Vu
ZGluZ0JveDsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiBmbG9hdCBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIENHU2l6ZSBh
ZHZhbmNlID0gQ0dTaXplWmVybzsKQEAgLTM2Nyw2ICszODAsNyBAQCBmbG9hdCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogCiAgICAgcmV0
dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7CiB9CisjZW5kaWYgLy8g
IVBMQVRGT1JNKElPUykKIAogc3RydWN0IFByb3ZpZGVySW5mbyB7CiAgICAgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvV2ViR0xMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L1dlYkdMTGF5ZXIuaAppbmRleCA2NDQwYjcxYWY3MTk4ODdmMzVmYTU4MDRmZTkwYzBhOTljNTIw
ODg2Li5lYWRlNTIwMzRjZGQ4MTBhNjAyZmU4MWZkYTI4NDJiMjMxODZhMDllIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJHTExheWVyLmgKQEAgLTM1
LDcgKzM1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRl
eHQzRDsKIH0KIAotQGludGVyZmFjZSBXZWJHTExheWVyIDogQ0FPcGVuR0xMYXllciAKKyNpZiBQ
TEFURk9STShJT1MpCitAaW50ZXJmYWNlIFdlYkdMTGF5ZXIgOiBDQUVBR0xMYXllcgorI2Vsc2UK
K0BpbnRlcmZhY2UgV2ViR0xMYXllciA6IENBT3BlbkdMTGF5ZXIKKyNlbmRpZgogewogICAgIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fbGF5ZXJPd25lcjsKICAgICBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRCogbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvV2ViR0xMYXllci5tbQppbmRleCBkNTEwYjYxOWRlOTk5NTVjNzMwNjFhYTRh
ODk2MjVjMThhN2NhYjMzLi42NDgyOTllNzU5NmMzNDU2MmUxNTQ0NTBlNzdlYTI0YTc4MmIyMWVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xM
YXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xM
YXllci5tbQpAQCAtMzIsOCArMzIsMTAgQEAKIAogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpZiAhUExBVEZPUk0oSU9TKQogI2ltcG9y
dCA8T3BlbkdML09wZW5HTC5oPgogI2ltcG9ydCA8T3BlbkdML2dsLmg+CisjZW5kaWYKICNpbXBv
cnQgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTQ4
LDYgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgcmV0dXJuIHNlbGY7CiB9
CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogLShDR0xQaXhlbEZvcm1hdE9iailjb3B5Q0dMUGl4ZWxG
b3JtYXRGb3JEaXNwbGF5TWFzazoodWludDMyX3QpbWFzawogewogICAgIC8vIEZJWE1FOiBUaGUg
bWFzayBwYXJhbSB0ZWxscyB5b3Ugd2hpY2ggZGlzcGxheSAob24gYSBtdWx0aS1kaXNwbGF5IHN5
c3RlbSkKQEAgLTEwOCw5ICsxMTEsMTQgQEAgc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBj
b25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAqLykKIHsKICAgICBmYXN0RnJlZShjb25z
dF9jYXN0PHZvaWQgKj4oZGF0YSkpOwogfQorI2VuZGlmCiAKIC0oQ0dJbWFnZVJlZiljb3B5SW1h
Z2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihDR0NvbG9yU3BhY2VSZWYpY29sb3JTcGFjZQogewor
I2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisgICAgcmV0
dXJuIDA7CisjZWxzZQogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dC0+cGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCgpKTsKIAogICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+
IGltYWdlQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CkBAIC0xMzgsMTEgKzE0NiwxNiBAQCBzdGF0
aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBzaXpl
ICovKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtD
R1JlbmRlcmluZ0ludGVudERlZmF1bHQpOwogICAgIENHRGF0YVByb3ZpZGVyUmVsZWFzZShwcm92
aWRlcik7CiAgICAgcmV0dXJuIGltYWdlOworI2VuZGlmCiB9CiAKIC0gKHZvaWQpZGlzcGxheQog
eworI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2NvbnRleHQtPmVuZFBhaW50KCk7CisjZWxzZQog
ICAgIFtzdXBlciBkaXNwbGF5XTsKKyNlbmRpZgogICAgIGlmIChtX2xheWVyT3duZXIpCiAgICAg
ICAgIG1fbGF5ZXJPd25lci0+bGF5ZXJEaWREaXNwbGF5KHNlbGYpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCmluZGV4IDA4Mjk2NDJk
OTQ5ZDA2NGVkOWFhNmNhZWU0MGFlMDZlNDA0OWJjNGMuLmE5MjRjZGY4Y2RlOGE5ODIwMTE4ZDAz
YTlmOTExNDEwNGEyM2MzMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9XZWJMYXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvV2ViTGF5ZXIubW0KQEAgLTMyLDE1ICszMiwyOSBAQAogI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW1wb3J0ICJHcmFwaGljc0xheWVyQ0EuaCIKICNpbXBvcnQgIlBsYXRm
b3JtQ0FMYXllci5oIgorI2lmICFQTEFURk9STShJT1MpCiAjaW1wb3J0ICJUaGVtZU1hYy5oIgor
I2VuZGlmCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KIAorI2lmIFBMQVRGT1JN
KElPUykKKyNpbXBvcnQgIldLR3JhcGhpY3MuaCIKKyNpbXBvcnQgIldBS1dpbmRvdy5oIgorI2lt
cG9ydCAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmCisKIEBpbnRlcmZhY2UgQ0FMYXllcihXZWJD
b3JlQ0FMYXllclByaXZhdGUpCiAtICh2b2lkKXJlbG9hZFZhbHVlRm9yS2V5UGF0aDooTlNTdHJp
bmcgKilrZXlQYXRoOwogQGVuZAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorI2lmIFBM
QVRGT1JNKElPUykKK0BpbnRlcmZhY2UgV2ViTGF5ZXIoUHJpdmF0ZSkKKy0gKHZvaWQpZHJhd1Nj
YWxlZENvbnRlbnRzSW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dDsKK0BlbmQKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlcGFpbnRSZWN0TGlzdCBjb2xsZWN0UmVjdHNU
b1BhaW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FM
YXllcikKQEAgLTc0LDE3ICs4OCwyNiBAQCB2b2lkIGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4
dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQwogICAgIGlm
ICghbGF5ZXJDb250ZW50cykKICAgICAgICAgcmV0dXJuOwogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIFdLU2V0Q3VycmVudEdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyNlbmRpZgorCiAgICAg
Q0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAogICAgIC8vIFdlIG5ldmVyIHVzZSBDb21w
b3NpdGluZ0Nvb3JkaW5hdGVzQm90dG9tVXAgb24gTWFjLgogICAgIEFTU0VSVChsYXllckNvbnRl
bnRzLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCkgPT0gR3JhcGhpY3NMYXll
cjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24pOwogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIFdLRm9udEFudGlhbGlhc2luZ1N0YXRlU2F2ZXIgZm9udEFudGlhbGlhc2luZ1N0YXRlKGNv
bnRleHQsIFtwbGF0Zm9ybUNBTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSBpc09wYXF1ZV0pOworICAg
IGZvbnRBbnRpYWxpYXNpbmdTdGF0ZS5zZXR1cChbV0FLV2luZG93IGhhc0xhbmRzY2FwZU9yaWVu
dGF0aW9uXSk7CisjZWxzZQogICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0
ZV07CiAKICAgICAvLyBTZXQgdXAgYW4gTlNHcmFwaGljc0NvbnRleHQgZm9yIHRoZSBjb250ZXh0
LCBzbyB0aGF0IHBhcnRzIG9mIEFwcEtpdCB0aGF0IHJlbHkgb24KICAgICAvLyB0aGUgY3VycmVu
dCBOU0dyYXBoaWNzQ29udGV4dCAoZS5nLiBOU0NlbGwgZHJhd2luZykgZ2V0IHRoZSByaWdodCBv
bmUuCiAgICAgTlNHcmFwaGljc0NvbnRleHQqIGxheWVyQ29udGV4dCA9IFtOU0dyYXBoaWNzQ29u
dGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0OmNvbnRleHQgZmxpcHBlZDpZRVNd
OwogICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpsYXllckNvbnRleHRd
OworI2VuZGlmCiAKICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQp
OwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUpOwpAQCAtOTQs
NyArMTE3LDggQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwg
V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUMKICAgICAgICAgLy8gVHVybiBvZmYg
Zm9udCBzbW9vdGhpbmcgdG8gaW1wcm92ZSB0aGUgYXBwZWFyYW5jZSBvZiB0ZXh0IHJlbmRlcmVk
IG9udG8gYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLgogICAgICAgICBncmFwaGljc0NvbnRleHQu
c2V0U2hvdWxkU21vb3RoRm9udHMoZmFsc2UpOwogICAgIH0KLSAgICAKKworI2lmICFQTEFURk9S
TShJT1MpCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNv
bnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmljYW50bHkKICAgICAvLyBzbWFsbGVyIHRo
YW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCiAgICAgRmxvYXRSZWN0IGNs
aXBCb3VuZHMgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCk7CkBAIC0xMDYs
NiArMTMwLDcgQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwg
V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUMKICAgICBmb2N1c1JpbmdDbGlwUmVj
dCA9IHRyYW5zZm9ybS5tYXBSZWN0KGNsaXBCb3VuZHMpOwogI2VuZGlmCiAgICAgVGhlbWVNYWM6
OnNldEZvY3VzUmluZ0NsaXBSZWN0KGZvY3VzUmluZ0NsaXBSZWN0KTsKKyNlbmRpZiAvLyAhUExB
VEZPUk0oSU9TKQogCiAgICAgZm9yIChhdXRvIHJlY3QgOiBkaXJ0eVJlY3RzKSB7CiAgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwpA
QCAtMTE0LDkgKzEzOSwxMyBAQCB2b2lkIGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBj
b250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQwogICAgICAgICBsYXll
ckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKHBsYXRmb3JtQ0FMYXllciwg
Z3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKICAgICB9CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgZm9udEFudGlhbGlhc2luZ1N0YXRlLnJlc3RvcmUoKTsKKyNlbHNl
CiAgICAgVGhlbWVNYWM6OnNldEZvY3VzUmluZ0NsaXBSZWN0KEZsb2F0UmVjdCgpKTsKIAogICAg
IFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07CisjZW5kaWYKIAogICAg
IC8vIFJlLWZldGNoIHRoZSBsYXllciBvd25lciwgc2luY2UgPHJkYXI6Ly9wcm9ibGVtLzkxMjUx
NTE+IGluZGljYXRlcyB0aGF0IGl0IG1pZ2h0IGhhdmUgYmVlbiBkZXN0cm95ZWQgZHVyaW5nIHBh
aW50aW5nLgogICAgIGxheWVyQ29udGVudHMgPSBwbGF0Zm9ybUNBTGF5ZXItPm93bmVyKCk7CkBA
IC0yMjQsNiArMjUzLDEwIEBAIHZvaWQgZHJhd1JlcGFpbnRJbmRpY2F0b3IoQ0dDb250ZXh0UmVm
IGNvbnRleHQsIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxheWVyCiAKIC0gKHZvaWQpZGlz
cGxheQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisg
ICAgICAgIFdlYlRocmVhZExvY2soKTsKKyNlbmRpZgogICAgIFtzdXBlciBkaXNwbGF5XTsKICAg
ICBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5
ZXIoc2VsZik7CiAgICAgaWYgKGxheWVyICYmIGxheWVyLT5vd25lcigpKQpAQCAtMjMyLDYgKzI2
NSwxMCBAQCB2b2lkIGRyYXdSZXBhaW50SW5kaWNhdG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBQ
bGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllcgogCiAtICh2b2lkKWRyYXdJbkNvbnRleHQ6
KENHQ29udGV4dFJlZiljb250ZXh0CiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChwdGhy
ZWFkX21haW5fbnAoKSkKKyAgICAgICAgV2ViVGhyZWFkTG9jaygpOworI2VuZGlmCiAgICAgUGxh
dGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHNl
bGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkgewogICAgICAgICBHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViVGlsZWRMYXllci5tbQppbmRleCAzY2FjNWU3
YzMzMTI4ZGExZGZlY2Y5M2Q2MDM4YzExZTE5OWQyNWIzLi5jODZhZmE2ODg0YmVjZDJmMzY4NDdm
M2JkMjBkNzhkMDk0Y2EyMWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvV2ViVGlsZWRMYXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvV2ViVGlsZWRMYXllci5tbQpAQCAtMzMsNiArMzMsMTEgQEAKICNpbXBv
cnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyLmgiCiAKKyNp
ZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJXZWJDb3JlVGhyZWFkLmgiCisjaW1wb3J0ICJXZWJD
b3JlVGhyZWFkUnVuLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBp
bXBsZW1lbnRhdGlvbiBXZWJUaWxlZExheWVyCkBAIC00Niw3ICs1MSwxNCBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIC8vIE1ha2Ugc3VyZSB0aGF0IHRpbGVzIGFyZSBkcmF3biBvbiB0aGUg
bWFpbiB0aHJlYWQKICsgKEJPT0wpc2hvdWxkRHJhd09uTWFpblRocmVhZAogeworI2lmIFBMQVRG
T1JNKElPUykKKyAgICAvLyBGSVhNRTogV2ViS2l0MiBhbHdheXMgd2FudHMgdG8gZHJhdyBvbiB0
aGUgbWFpbiB0aHJlYWQsIGJ1dCB0aGVyZSBpcworICAgIC8vIHByb2JhYmx5IGEgYmV0dGVyIHdh
eSB0byBjaGVjayBmb3IgV2ViS2l0MiB0aGFuIHVzaW5nIHRoZSBleGlzdGFuY2Ugb2YKKyAgICAv
LyB0aGUgd2ViIHRocmVhZCBhcyBhIHByb3h5LgorICAgIHJldHVybiAhV2ViVGhyZWFkSXNFbmFi
bGVkKCk7CisjZWxzZQogICAgIHJldHVybiBZRVM7CisjZW5kaWYKIH0KIAogKyAodW5zaWduZWQg
aW50KXByZWZldGNoZWRUaWxlcwpAQCAtOTgsNiArMTEwLDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogLSAodm9pZClkaXNwbGF5CiB7CiAgICAgW3N1cGVyIGRpc3BsYXldOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICAvLyBDQVRpbGVkTGF5ZXIgbmV2ZXIgY2FsbHMgZGlzcGxheSBvbiBh
IGJhY2tncm91bmQgdGhyZWFkLCBzbyBpdCdzIHNhZmUKKyAgICAvLyB0byBhc3N1bWUgd2UncmUg
ZWl0aGVyIG9uIHRoZSBtYWluIHRocmVhZCBvciBvbiB0aGUgd2ViIHRocmVhZC4KKyAgICBpZiAo
cHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRocmVhZExvY2soKTsKKyAgICBBU1NFUlQo
V2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworI2VuZGlmCiAgICAgUGxhdGZvcm1DQUxh
eWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHNlbGYpOwogICAg
IGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkKICAgICAgICAgbGF5ZXItPm93bmVyKCktPnBs
YXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShzZWxmKTsKQEAgLTEwNSw5ICsxMjQsMjAgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIC0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250
ZXh0UmVmKWNvbnRleHQKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCAoXmRyYXcpKCkg
PSBeeworI2VuZGlmCiAgICAgUGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXll
cjo6cGxhdGZvcm1DQUxheWVyKHNlbGYpOwogICAgIGlmIChsYXllcikKICAgICAgICAgZHJhd0xh
eWVyQ29udGVudHMoY29udGV4dCwgbGF5ZXIpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICB9Owor
ICAgIGlmIChwdGhyZWFkX21haW5fbnAoKSkgeworICAgICAgICBXZWJUaHJlYWRMb2NrKCk7Cisg
ICAgICAgIGRyYXcoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgV2ViVGhyZWFkUnVuU3luYyhkcmF3
KTsKKyNlbmRpZgogfQogCiBAZW5kIC8vIGltcGxlbWVudGF0aW9uIFdlYlRpbGVkTGF5ZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zM0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKaW5kZXggZmEyNzkwZDNhZjk1MGNmZjRkY2I1NmM1ZmNk
M2I0ODY2YzJjM2M2NS4uMjg5YzNlMjljODAyMmU4ZGVmZGY1NGZjYjgzMjVkMWRiODI5NzY0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKQEAgLTMyLDEzICszMiwyMCBAQAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYg
UExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJBTkdMRS9TaGFkZXJM
YW5nLmgiCisjaW5jbHVkZSA8T3BlbkdMRVMvRVMyL2dsZXh0Lmg+CisjZWxpZiBQTEFURk9STShN
QUMpCiAjaW5jbHVkZSAiQU5HTEUvU2hhZGVyTGFuZy5oIgogI2luY2x1ZGUgPE9wZW5HTC9nbC5o
PgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFdJTikg
fHwgUExBVEZPUk0oTklYKQogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRElPUy5oIgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRXh0ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25z
M0RPcGVuR0woR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCkBAIC01Myw3ICs2MCwyMSBAQCBF
eHRlbnNpb25zM0RPcGVuR0w6On5FeHRlbnNpb25zM0RPcGVuR0woKQogCiB2b2lkIEV4dGVuc2lv
bnMzRE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcg
c3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxv
bmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpCiB7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIFVOVVNFRF9QQVJBTShzcmNYMCk7CisgICAgVU5VU0VEX1BB
UkFNKHNyY1kwKTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWDEpOworICAgIFVOVVNFRF9QQVJBTShz
cmNZMSk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFgwKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WTAp
OworICAgIFVOVVNFRF9QQVJBTShkc3RYMSk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFkxKTsKKyAg
ICBVTlVTRURfUEFSQU0obWFzayk7CisgICAgVU5VU0VEX1BBUkFNKGZpbHRlcik7CisgICAgOjpn
bFJlc29sdmVNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQVBQTEUoKTsKKyNlbHNlCiAgICAgOjpnbEJs
aXRGcmFtZWJ1ZmZlckVYVChzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkw
LCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CisjZW5kaWYKIH0KIAogdm9pZCBFeHRlbnNp
b25zM0RPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9y
bWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKQEAgLTEwNSw2
ICsxMjYsMTAgQEAgR0MzRGJvb2xlYW4gRXh0ZW5zaW9uczNET3BlbkdMOjppc1ZlcnRleEFycmF5
T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCiAKIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpi
aW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKIHsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgVU5VU0VEX1BBUkFNKGFycmF5KTsKKyNlbmRpZgorCiAgICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICNpZiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShF
RkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklYKSkKICAgICBpZiAoaXNWZXJ0ZXhB
cnJheU9iamVjdFN1cHBvcnRlZCgpKQpAQCAtMTg2LDEzICsyMTEsMTkgQEAgYm9vbCBFeHRlbnNp
b25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgfQorCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IGlmIChuYW1lID09ICJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKQorICAgICAgICByZXR1
cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0
ZW5jaWwiKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250
YWlucyhuYW1lKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmRyYXdCdWZmZXJzRVhU
KEdDM0RzaXplaSBuLCBjb25zdCBHQzNEZW51bSogYnVmcykKIHsKICAgICAvLyAgRklYTUU6IGlt
cGxlbWVudCBzdXBwb3J0IGZvciBvdGhlciBwbGF0Zm9ybXMuCi0jaWYgUExBVEZPUk0oTUFDKQor
I2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICA6OmdsRHJhd0J1ZmZlcnNB
UkIobiwgYnVmcyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShuKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xD
b21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggZmU4NGIzOWFlMzE5NWQwYWU0MzY4YzdkYzM5
YjM0NWY4YzZhYjg4OC4uMDA2MDJlMzRlZjIwMzU0ZmE4ZmQ1NGI0MzRlM2VmMmIzMTRmZTUxZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTM2LDYgKzM2LDkg
QEAKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KICNlbmRpZgogCisjaWYgUExB
VEZPUk0oSU9TKQorI2luY2x1ZGUgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgorI2Vsc2UKICNpZiBV
U0UoT1BFTkdMX0VTXzIpCiAjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgogI2luY2x1ZGUgPEdM
RVMyL2dsMi5oPgpAQCAtNDUsNiArNDgsNyBAQAogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklYKQogI2luY2x1ZGUgIk9w
ZW5HTFNoaW1zLmgiCiAjZW5kaWYKKyNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03MSw3ICs3NSw3IEBAIEV4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbjo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KQogICAgIGlmICh2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJpbnRlbCIpKQog
ICAgICAgICBtX2lzSW50ZWwgPSB0cnVlOwogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICBpZiAobV9pc0FNRCB8fCBtX2lzSW50ZWwp
CiAgICAgICAgIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb24gPSB0cnVlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCBkMDQ4NWJmMTg2MjU1Yjg1
OTU4N2VmYmZiNjU0YTYxODA2N2JjNjQ1Li43OWM2ZmQ4Mzg4ZDI5ZmQ0ZTkyMGQxMzRkZDkyYTE0
ZjcwMzlkOTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTI5
LDYgKzI5LDkgQEAKICNpZiBVU0UoM0RfR1JBUEhJQ1MpCiAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RElPUy5oIgorI2VuZGlmCiAKICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCkBAIC00MSw3ICs0NCwxMiBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0jaWYgUExBVEZPUk0oTUFD
KQorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgorLy8g
RnJvbSA8T3BlbkdMRVMvZ2xleHQuaD4KKyNkZWZpbmUgR0xfUkdCQTMyRl9BUkIgICAgICAgICAg
ICAgICAgICAgICAgMHg4ODE0CisjZGVmaW5lIEdMX1JHQjMyRl9BUkIgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODgxNQorI2VsaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPE9wZW5HTC9nbC5o
PgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFdJTikg
fHwgUExBVEZPUk0oTklYKQogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCkBAIC04Niw3ICs5NCwx
MSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBz
aXplKQogICAgICAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVw
dGhfc3RlbmNpbCIpKQogICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBH
TF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKICAgICAgICAgZWxzZQorI2lmIFBMQVRGT1JNKElPUykK
KyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9O
RU5UMTY7CisjZWxzZQogICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBH
TF9ERVBUSF9DT01QT05FTlQ7CisjZW5kaWYKICAgICB9CiAKICAgICBib29sIG11c3RSZXN0b3Jl
RkJPID0gZmFsc2U7CkBAIC0xMjcsNiArMTM5LDExIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgfQogCiAgICAgQVNTRVJUKG1f
dGV4dHVyZSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdM
X1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9SRU5ERVJCVUZGRVIs
IG1fdGV4dHVyZSk7CisgICAgc2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZShtX2N1
cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKKyNlbHNlCiAgICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CiAgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVS
RV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZv
cm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7CiAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhU
VVJFXzJELCBtX3RleHR1cmUsIDApOwpAQCAtMTM2LDYgKzE1Myw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgICAgIDo6Z2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwogICAgICAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CiAgICAgfQorI2VuZGlmCiAKICAgICBp
ZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0
aCkpIHsKICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwpAQCAtMTY3LDE3ICsxODUsMjIgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRS
ZWN0JiByZWN0KQogCiAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVG
RkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IFVOVVNFRF9QQVJBTShyZWN0KTsKKyAgICA6OmdsUmVzb2x2ZU11bHRpc2FtcGxlRnJhbWVidWZm
ZXJBUFBMRSgpOworI2Vsc2UKICAgICBJbnRSZWN0IHJlc29sdmVSZWN0ID0gcmVjdDsKICAgICBp
ZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJlc29sdmVSZWN0ID0gSW50UmVjdCgwLCAwLCBt
X2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKIAogICAgIDo6Z2xCbGl0RnJhbWVidWZm
ZXJFWFQocmVzb2x2ZVJlY3QueCgpLCByZXNvbHZlUmVjdC55KCksIHJlc29sdmVSZWN0Lm1heFgo
KSwgcmVzb2x2ZVJlY3QubWF4WSgpLCByZXNvbHZlUmVjdC54KCksIHJlc29sdmVSZWN0LnkoKSwg
cmVzb2x2ZVJlY3QubWF4WCgpLCByZXNvbHZlUmVjdC5tYXhZKCksIEdMX0NPTE9SX0JVRkZFUl9C
SVQsIEdMX0xJTkVBUik7CisjZW5kaWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0
KSB7CiAgICAgY2FzZSBERVBUSF9TVEVOQ0lMOgogICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdM
X0RFUFRIMjRfU1RFTkNJTDhfRVhUOwpAQCAtMTkzLDYgKzIxNiw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBp
bnRlcm5hbGZvCiAgICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfUkdCOwogICAgICAgICBicmVh
azsKICAgICB9CisjZW5kaWYKICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCh0YXJnZXQs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIApAQCAtMjA0LDYgKzIyOCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkKICAgICAvLyBUaGVyZWZvcmUsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBkZXNr
dG9wIEdMIG5lZWRzIHRvIGJlIGRpdmlkZWQgYnkgNC4KICAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBjYXNlIE1B
WF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CiAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9N
QVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTLCB2YWx1ZSk7CiAgICAgICAgICp2YWx1ZSAv
PSA0OwpAQCAtMjE2LDYgKzI0MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVn
ZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKICAgICAgICAgOjpnbEdldEludGVn
ZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywgdmFsdWUpOwogICAgICAgICAqdmFsdWUgLz0gNDsK
ICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICA6OmdsR2V0SW50
ZWdlcnYocG5hbWUsIHZhbHVlKTsKICAgICB9CkBAIC0yNjYsNiArMjkyLDcgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGUKICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX1JHQikKICAgICAg
ICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfUkdCMzJGX0FSQjsKICAgICB9IGVsc2Ug
aWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMpIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAg
ICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCiAgICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1h
dCA9IEdMX1JHQkExNkZfQVJCOwogICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfUkdCKQpA
QCAtMjc3LDYgKzMwNCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAgICAgIGVsc2Ug
aWYgKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEpCiAgICAgICAgICAgICBvcGVuR0xJbnRl
cm5hbEZvcm1hdCA9IEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9BUkI7CiAgICAgICAgIHR5cGUgPSBH
TF9IQUxGX0ZMT0FUX0FSQjsKKyNlbmRpZgogICAgIH0KICAgICB0ZXhJbWFnZTJERGlyZWN0KHRh
cmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI4NSwxMyArMzEz
LDIxIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpk
ZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKIHsKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgOjpnbERlcHRoUmFuZ2Vm
KHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciksIHN0YXRpY19jYXN0PGZsb2F0Pih6RmFyKSk7Cisj
ZWxzZQogICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKKyNlbmRpZgogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCiB7CiAgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIDo6Z2xDbGVhckRl
cHRoZihzdGF0aWNfY2FzdDxmbG9hdD4oZGVwdGgpKTsKKyNlbHNlCiAgICAgOjpnbENsZWFyRGVw
dGgoZGVwdGgpOworI2VuZGlmCiB9CiAKIEV4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEV4dGVuc2lvbnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAKaW5kZXggNzY4NzQ3MzJlOTcwYTFkMjExYjdkYTM0ZTlkYTJhNjU3ODdkZWViNy4u
ZjU0MWUwZTMzNzQ0Nzg3NmE1ZWI1YmMyYjg3YmEzNjAzZWFmNmY1YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC0zMSw2ICszMSw5IEBACiAj
aWYgVVNFKDNEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNp
ZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJT1MuaCIKKyNlbmRp
ZgogCiAjaWYgVVNFKE9QRU5HTF9FU18yKQogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVT
LmgiCkBAIC01NCw2ICs1NywxMiBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8
T3BlbkdMRVMvRVMyL2dsZXh0Lmg+CisvLyBGcm9tIDxPcGVuR0xFUy9nbGV4dC5oPgorI2RlZmlu
ZSBHTF9SR0JBMzJGX0FSQiAgICAgICAgICAgICAgICAgICAgICAweDg4MTQKKyNkZWZpbmUgR0xf
UkdCMzJGX0FSQiAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE1CisjZWxzZQogI2lmIFVTRShP
UEVOR0xfRVNfMikKICNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCiAjZWxpZiBQTEFURk9STShN
QUMpCkBAIC02MSw2ICs3MCw3IEBACiAjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVG
TCkgfHwgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShOSVgpCiAjaW5jbHVkZSAiT3BlbkdMU2hp
bXMuaCIKICNlbmRpZgorI2VuZGlmCiAKICNpZiBQTEFURk9STShCTEFDS0JFUlJZKQogI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgpAQCAtMTYxLDYgKzE3MSwxMCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIsCiAgICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIG1fY3VycmVu
dFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsCiAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+
aW50ZXJuYWxTaXplKCkud2lkdGgoKSwgaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLmhlaWdo
dCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAjZW5kaWYK
KworI2lmIFBMQVRGT1JNKElPUykKKyAgICBlbmRQYWludCgpOworI2VuZGlmCiB9CiAKIGJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1
ZmZlciopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCmluZGV4IGJmNTA3
NDUxMjc3M2JmN2MxN2UxNWYyYTgzYTM3YzkwYWNmNmMwZmIuLmRhZDIzNTk5YmUyYzU4MDEyNDhh
NzBhNTFiZDI0NmM1OGU5Y2FhZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRy
aXguY3BwCkBAIC0xMDM1LDcgKzEwMzUsNzEgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggVHJhbnNm
b3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoY29uc3QgRmxvYXRSZWN0JiBmcm9tLCBjb24KIC8v
IHRoaXMgPSBtYXQgKiB0aGlzLgogVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9u
TWF0cml4OjptdWx0aXBseShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0KQogewotI2lm
IENQVShBUFBMRV9BUk1WN1MpCisjaWYgQ1BVKEFSTTY0KQorICAgIGRvdWJsZSogbGVmdE1hdHJp
eCA9ICYobV9tYXRyaXhbMF1bMF0pOworICAgIGNvbnN0IGRvdWJsZSogcmlnaHRNYXRyaXggPSAm
KG1hdC5tX21hdHJpeFswXVswXSk7CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgLy8gRmly
c3QsIGxvYWQgdGhlIGxlZnRNYXRyaXggY29tcGxldGVseSBpbiBtZW1vcnkuIFRoZSBsZWZ0TWF0
cml4IGlzIGluIHYxNi12MjMuCisgICAgICAgICJtb3YgICAgICB4NCwgJVtsZWZ0TWF0cml4XVxu
XHQiCisgICAgICAgICJsZDEuMmQgICB7djE2LCB2MTcsIHYxOCwgdjE5fSwgWyVbbGVmdE1hdHJp
eF1dLCAjNjRcblx0IgorICAgICAgICAibGQxLjJkICAge3YyMCwgdjIxLCB2MjIsIHYyM30sIFsl
W2xlZnRNYXRyaXhdXVxuXHQiCisKKyAgICAgICAgLy8gRmlyc3Qgcm93LgorICAgICAgICAibGQ0
ci4yZCAge3YyNCwgdjI1LCB2MjYsIHYyN30sIFslW3JpZ2h0TWF0cml4XV0sICMzMlxuXHQiCisg
ICAgICAgICJmbXVsLjJkICB2MjgsIHYyNCwgdjE2XG5cdCIKKyAgICAgICAgImZtdWwuMmQgIHYy
OSwgdjI0LCB2MTdcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjI4LCB2MjUsIHYxOFxuXHQiCisg
ICAgICAgICJmbWxhLjJkICB2MjksIHYyNSwgdjE5XG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYy
OCwgdjI2LCB2MjBcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjI5LCB2MjYsIHYyMVxuXHQiCisg
ICAgICAgICJmbWxhLjJkICB2MjgsIHYyNywgdjIyXG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYy
OSwgdjI3LCB2MjNcblx0IgorCisgICAgICAgICJsZDRyLjJkICB7djAsIHYxLCB2MiwgdjN9LCBb
JVtyaWdodE1hdHJpeF1dLCAjMzJcblx0IgorICAgICAgICAic3QxLjJkICB7djI4LCB2Mjl9LCBb
eDRdLCAjMzJcblx0IgorCisgICAgICAgIC8vIFNlY29uZCByb3cuCisgICAgICAgICJmbXVsLjJk
ICB2MzAsIHYwLCB2MTZcblx0IgorICAgICAgICAiZm11bC4yZCAgdjMxLCB2MCwgdjE3XG5cdCIK
KyAgICAgICAgImZtbGEuMmQgIHYzMCwgdjEsIHYxOFxuXHQiCisgICAgICAgICJmbWxhLjJkICB2
MzEsIHYxLCB2MTlcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjMwLCB2MiwgdjIwXG5cdCIKKyAg
ICAgICAgImZtbGEuMmQgIHYzMSwgdjIsIHYyMVxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MzAs
IHYzLCB2MjJcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjMxLCB2MywgdjIzXG5cdCIKKworICAg
ICAgICAibGQ0ci4yZCAge3YyNCwgdjI1LCB2MjYsIHYyN30sIFslW3JpZ2h0TWF0cml4XV0sICMz
MlxuXHQiCisgICAgICAgICJzdDEuMmQgICB7djMwLCB2MzF9LCBbeDRdLCAjMzJcblx0IgorCisg
ICAgICAgIC8vIFRoaXJkIHJvdy4KKyAgICAgICAgImZtdWwuMmQgIHYyOCwgdjI0LCB2MTZcblx0
IgorICAgICAgICAiZm11bC4yZCAgdjI5LCB2MjQsIHYxN1xuXHQiCisgICAgICAgICJmbWxhLjJk
ICB2MjgsIHYyNSwgdjE4XG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYyOSwgdjI1LCB2MTlcblx0
IgorICAgICAgICAiZm1sYS4yZCAgdjI4LCB2MjYsIHYyMFxuXHQiCisgICAgICAgICJmbWxhLjJk
ICB2MjksIHYyNiwgdjIxXG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYyOCwgdjI3LCB2MjJcblx0
IgorICAgICAgICAiZm1sYS4yZCAgdjI5LCB2MjcsIHYyM1xuXHQiCisKKyAgICAgICAgImxkNHIu
MmQgIHt2MCwgdjEsIHYyLCB2M30sIFslW3JpZ2h0TWF0cml4XV0sICMzMlxuXHQiCisgICAgICAg
ICJzdDEuMmQgICB7djI4LCB2Mjl9LCBbeDRdLCAjMzJcblx0IgorCisgICAgICAgIC8vIEZvdXJ0
aCByb3cuCisgICAgICAgICJmbXVsLjJkICB2MzAsIHYwLCB2MTZcblx0IgorICAgICAgICAiZm11
bC4yZCAgdjMxLCB2MCwgdjE3XG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYzMCwgdjEsIHYxOFxu
XHQiCisgICAgICAgICJmbWxhLjJkICB2MzEsIHYxLCB2MTlcblx0IgorICAgICAgICAiZm1sYS4y
ZCAgdjMwLCB2MiwgdjIwXG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYzMSwgdjIsIHYyMVxuXHQi
CisgICAgICAgICJmbWxhLjJkICB2MzAsIHYzLCB2MjJcblx0IgorICAgICAgICAiZm1sYS4yZCAg
djMxLCB2MywgdjIzXG5cdCIKKworICAgICAgICAic3QxLjJkICB7djMwLCB2MzF9LCBbeDRdXG5c
dCIKKworICAgICAgICA6IFtsZWZ0TWF0cml4XSIrciIobGVmdE1hdHJpeCksIFtyaWdodE1hdHJp
eF0iK3IiKHJpZ2h0TWF0cml4KQorICAgICAgICA6CisgICAgICAgIDogIm1lbW9yeSIsICJ4NCIs
ICJ2MCIsICJ2MSIsICJ2MiIsICJ2MyIsICJ2MTYiLCAidjE3IiwgInYxOCIsICJ2MTkiLCAidjIw
IiwgInYyMSIsICJ2MjIiLCAidjIzIiwgInYyNCIsICJ2MjUiLCAidjI2IiwgInYyNyIsICJ2Mjgi
LCAidjI5IiwgInYzMCIsICJ2MzEiKTsKKyNlbGlmIENQVShBUFBMRV9BUk1WN1MpCiAgICAgZG91
YmxlKiBsZWZ0TWF0cml4ID0gJihtX21hdHJpeFswXVswXSk7CiAgICAgY29uc3QgZG91YmxlKiBy
aWdodE1hdHJpeCA9ICYobWF0Lm1fbWF0cml4WzBdWzBdKTsKICAgICBhc20gdm9sYXRpbGUgKC8v
IEZpcnN0IHJvdyBvZiBsZWZ0TWF0cml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCmluZGV4IDkyMDkzZDA5MTdiMzQ5ZTYyMWFkZjJiZTRi
MDgxNDA4MTY2YzgwN2MuLjU1NDhkZTAzMzdjODQyYjZiNzRkNDU3OTY2ZTlmY2ZiYzRkODg1ODgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5j
cHAKQEAgLTk0LDggKzk0LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQKICAgICByZXR1cm4g
YmVmb3JlV2lkdGg7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Citm
bG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBh
ZHZhbmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlw
aEJ1ZmZlcjsKQEAgLTEwNCwxMSArMTAzLDEyIEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGCiAK
ICAgICAvLyBXZSBjb3VsZG4ndCBnZW5lcmF0ZSBhbnkgZ2x5cGhzIGZvciB0aGUgcnVuLiAgR2l2
ZSB1cC4KICAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRHJhdyB0aGUgZ2x5cGggYnVmZmVyIG5vdyBhdCB0
aGUgc3RhcnRpbmcgcG9pbnQgcmV0dXJuZWQgaW4gc3RhcnRYLgogICAgIEZsb2F0UG9pbnQgc3Rh
cnRQb2ludChzdGFydFgsIHBvaW50LnkoKSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQs
IHJ1biwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQpOworICAgIHJldHVybiBzdGFydFBvaW50Lngo
KSAtIHN0YXJ0WDsKIH0KIAogdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhU
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBB
dG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvRm9udFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ZvbnRXaW5DRS5jcHAKaW5kZXggZWMxNTRlOGQ0OTI1OWRmM2MyZGQ3YzVkZDMxNmY0MDcy
ZTE2Y2MxNS4uZGY1ODk3MzIyZDhlNTBkZjM5NzkyMzBiODJlY2IwYzI5MDQ3MTg2MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNFLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2luQ0Uu
Y3BwCkBAIC0yMDcsOCArMjA3LDcgQEAgc3RhdGljIGludCBnZW5lcmF0ZUNvbXBvbmVudHMoVGV4
dFJ1bkNvbXBvbmVudHMqIGNvbXBvbmVudHMsIGNvbnN0IEZvbnQgJmZvbnQsIGMKICAgICByZXR1
cm4gb2Zmc2V0OwogfQogCi12b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxv
YXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykg
Y29uc3QKIHsKICAgICBpZiAodG8gPCAwKQogICAgICAgICB0byA9IHJ1bi5sZW5ndGgoKTsKQEAg
LTIxOCw2ICsyMTcsNyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRgogICAgIFRleHRSdW5Db21w
b25lbnRzIGNvbXBvbmVudHM7CiAgICAgaW50IHcgPSBnZW5lcmF0ZUNvbXBvbmVudHMoJmNvbXBv
bmVudHMsICp0aGlzLCBydW4pOwogCisgICAgZmxvYXQgd2lkdGhPZkRyYXduVGV4dCA9IDA7CiAg
ICAgaW50IGN1clBvcyA9IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KWNvbXBvbmVu
dHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgVGV4dFJ1bkNvbXBvbmVudCYgY29tcCA9
IGNvbXBvbmVudHMuYXQoaSk7CkBAIC0yMjksMTIgKzIyOSwxMyBAQCB2b2lkIEZvbnQ6OmRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRgogICAgICAgICAgICAgICAgIHB0LnNldFgocG9pbnQueCgpICsgdyAtIGNvbXAubV9v
ZmZzZXQgLSBjb21wLm1fd2lkdGgpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IHB0LnNldFgocG9pbnQueCgpICsgY29tcC5tX29mZnNldCk7Ci0gICAgICAgICAgICBkcmF3U2lt
cGxlVGV4dChjb250ZXh0LCBjb21wLm1fdGV4dFJ1biwgcHQsIGZyb20gLSBjdXJQb3MsIHN0ZDo6
bWluKHRvLCBjdXJFbmQpIC0gY3VyUG9zKTsKKyAgICAgICAgICAgIHdpZHRoT2ZEcmF3blRleHQg
Kz0gZHJhd1NpbXBsZVRleHQoY29udGV4dCwgY29tcC5tX3RleHRSdW4sIHB0LCBmcm9tIC0gY3Vy
UG9zLCBzdGQ6Om1pbih0bywgY3VyRW5kKSAtIGN1clBvcyk7CiAgICAgICAgIH0KICAgICAgICAg
Y3VyUG9zICs9IGxlbjsKICAgICAgICAgaWYgKGZyb20gPCBjdXJQb3MpCiAgICAgICAgICAgICBm
cm9tID0gY3VyUG9zOwogICAgIH0KKyAgICByZXR1cm4gd2lkdGhPZkRyYXduVGV4dDsKIH0KIAog
dm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4
dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNT
dHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyog
ZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL0NvbnRlbnRGaWx0ZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvQ29udGVudEZpbHRlcklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OGMyNWIwMGRlM2ZmMzBhZWVk
MjBkZGJlMTY4MmEzOTUyYmRjNjMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL0NvbnRlbnRGaWx0ZXJJT1MubW0KQEAgLTAsMCArMSw2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiQ29udGVudEZpbHRlci5oIgorCisj
aWYgUExBVEZPUk0oSU9TKSAmJiBVU0UoQ09OVEVOVF9GSUxURVJJTkcpCisKKyNpbXBvcnQgIldl
YkNvcmVUaHJlYWRSdW4uaCIKKworI2lmIGRlZmluZWQoX19oYXNfaW5jbHVkZSkgJiYgX19oYXNf
aW5jbHVkZSg8V2ViQ29udGVudEFuYWx5c2lzL1dlYkZpbHRlckV2YWx1YXRvci5oPikKKyNpbXBv
cnQgPFdlYkNvbnRlbnRBbmFseXNpcy9XZWJGaWx0ZXJFdmFsdWF0b3IuaD4KKyNlbHNlCitAaW50
ZXJmYWNlIE5TT2JqZWN0IChXZWJGaWx0ZXJFdmFsdWF0b3JEZXRhaWxzKQorLSAodm9pZCl1bmJs
b2NrV2l0aENvbXBsZXRpb246KHZvaWQgKF4pKEJPT0wgdW5ibG9ja2VkLCBOU0Vycm9yICplcnJv
cikpY29tcGxldGlvbjsKK0BlbmQKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Nv
bnN0IGNoYXIqIENvbnRlbnRGaWx0ZXI6OnNjaGVtZSgpCit7CisgICAgc3RhdGljIGNvbnN0IGNo
YXIgY29udGVudEZpbHRlclNjaGVtZVtdID0gIngtYXBwbGUtY29udGVudC1maWx0ZXIiOworICAg
IHJldHVybiBjb250ZW50RmlsdGVyU2NoZW1lOworfQorICAgIAordm9pZCBDb250ZW50RmlsdGVy
OjpyZXF1ZXN0VW5ibG9ja0FuZERpc3BhdGNoSWZTdWNjZXNzZnVsKEZ1bmN0aW9uPHZvaWQoKT4g
ZnVuY3Rpb24pCit7CisgICAgW21fcGxhdGZvcm1Db250ZW50RmlsdGVyIHVuYmxvY2tXaXRoQ29t
cGxldGlvbjpeKEJPT0wgdW5ibG9ja2VkLCBOU0Vycm9yICopIHsKKyAgICAgICAgaWYgKHVuYmxv
Y2tlZCkgeworICAgICAgICAgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgICAgICAgICAgZnVu
Y3Rpb24oKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfV07Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgJiYgVVNFKENPTlRF
TlRfRklMVEVSSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0Rl
dmljZU1vdGlvbkNsaWVudElPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0Rldmlj
ZU1vdGlvbkNsaWVudElPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4NTk5MWYyMDA1MjhlNWFjYTllZTVlMjA2
MjdkYzkwOThmOGExODUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvRGV2aWNlTW90aW9uQ2xpZW50SU9TLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVS
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBEZXZpY2VNb3Rpb25DbGllbnRJT1NfaAorI2RlZmluZSBEZXZpY2VNb3Rpb25DbGll
bnRJT1NfaAorCisjaW5jbHVkZSAiRGV2aWNlTW90aW9uQ2xpZW50LmgiCisjaW5jbHVkZSAiRGV2
aWNlTW90aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkRldmljZU1vdGlvbkRhdGEuaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lm
ZGVmIF9fT0JKQ19fCitAY2xhc3MgV2ViQ29yZU1vdGlvbk1hbmFnZXI7CisjZWxzZQorY2xhc3Mg
V2ViQ29yZU1vdGlvbk1hbmFnZXI7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBEZXZpY2VNb3Rpb25DbGllbnRJT1MgOiBwdWJsaWMgRGV2aWNlTW90aW9uQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxEZXZpY2VNb3Rpb25DbGllbnRJT1M+IGNy
ZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERldmljZU1vdGlvbkNs
aWVudElPUygpKTsKKyAgICB9CisgICAgRGV2aWNlTW90aW9uQ2xpZW50SU9TKCk7CisgICAgdmly
dHVhbCB+RGV2aWNlTW90aW9uQ2xpZW50SU9TKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHNldENvbnRyb2xsZXIoRGV2aWNlTW90aW9uQ29udHJvbGxlciopIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0
b3BVcGRhdGluZygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgRGV2aWNlTW90aW9uRGF0YSogbGFz
dE1vdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VNb3Rpb25D
b250cm9sbGVyRGVzdHJveWVkKCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIG1vdGlvbkNoYW5nZWQo
ZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBk
b3VibGUsIGRvdWJsZSk7CisKK3ByaXZhdGU6CisgICAgV2ViQ29yZU1vdGlvbk1hbmFnZXIqIG1f
bW90aW9uTWFuYWdlcjsKKyAgICBEZXZpY2VNb3Rpb25Db250cm9sbGVyKiBtX2NvbnRyb2xsZXI7
CisgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE+IG1fY3VycmVudERldmljZU1vdGlvbkRhdGE7
CisgICAgYm9vbCBtX3VwZGF0aW5nOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRGV2aWNlTW90aW9uQ2xpZW50SU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9EZXZpY2VNb3Rpb25DbGllbnRJT1MubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvRGV2aWNlTW90aW9uQ2xpZW50SU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyY2U5
MWFiM2Q2NGQ5MTEyODgzMWI1MmQxODdjNGY2OTc1YWMyOGMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlTW90aW9uQ2xpZW50SU9TLm1tCkBAIC0w
LDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaW1wb3J0ICJEZXZpY2VNb3Rpb25DbGllbnRJT1Mu
aCIKKworI2ltcG9ydCAiV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCIKKworI2lmIFBMQVRGT1JNKElP
UykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEZXZpY2VNb3Rpb25DbGllbnRJT1M6OkRldmlj
ZU1vdGlvbkNsaWVudElPUygpCisgICAgOiBEZXZpY2VNb3Rpb25DbGllbnQoKQorICAgICwgbV9t
b3Rpb25NYW5hZ2VyKG51bGxwdHIpCisgICAgLCBtX3VwZGF0aW5nKDApCit7Cit9CisKK0Rldmlj
ZU1vdGlvbkNsaWVudElPUzo6fkRldmljZU1vdGlvbkNsaWVudElPUygpCit7Cit9CisKK3ZvaWQg
RGV2aWNlTW90aW9uQ2xpZW50SU9TOjpzZXRDb250cm9sbGVyKERldmljZU1vdGlvbkNvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIpCit7CisgICAgbV9jb250cm9sbGVyID0gY29udHJvbGxlcjsKK30KKwor
dm9pZCBEZXZpY2VNb3Rpb25DbGllbnRJT1M6OnN0YXJ0VXBkYXRpbmcoKQoreworICAgIG1fdXBk
YXRpbmcgPSB0cnVlOworCisgICAgaWYgKCFtX21vdGlvbk1hbmFnZXIpCisgICAgICAgIG1fbW90
aW9uTWFuYWdlciA9IFtXZWJDb3JlTW90aW9uTWFuYWdlciBzaGFyZWRNYW5hZ2VyXTsKKworICAg
IFttX21vdGlvbk1hbmFnZXIgYWRkTW90aW9uQ2xpZW50OnRoaXNdOworfQorCit2b2lkIERldmlj
ZU1vdGlvbkNsaWVudElPUzo6c3RvcFVwZGF0aW5nKCkKK3sKKyAgICBtX3VwZGF0aW5nID0gZmFs
c2U7CisKKyAgICAvLyBSZW1vdmUgb3Vyc2VsdmVzIGFzIHRoZSBtb3Rpb24gY2xpZW50IHNvIHdl
IHdvbid0IGdldCB1cGRhdGVzLgorICAgIFttX21vdGlvbk1hbmFnZXIgcmVtb3ZlTW90aW9uQ2xp
ZW50OnRoaXNdOworfQorCitEZXZpY2VNb3Rpb25EYXRhKiBEZXZpY2VNb3Rpb25DbGllbnRJT1M6
Omxhc3RNb3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2N1cnJlbnREZXZpY2VNb3Rpb25E
YXRhLmdldCgpOworfQorCit2b2lkIERldmljZU1vdGlvbkNsaWVudElPUzo6ZGV2aWNlTW90aW9u
Q29udHJvbGxlckRlc3Ryb3llZCgpCit7CisgICAgW21fbW90aW9uTWFuYWdlciByZW1vdmVNb3Rp
b25DbGllbnQ6dGhpc107Cit9CisKK3ZvaWQgRGV2aWNlTW90aW9uQ2xpZW50SU9TOjptb3Rpb25D
aGFuZ2VkKGRvdWJsZSB4QWNjZWxlcmF0aW9uLCBkb3VibGUgeUFjY2VsZXJhdGlvbiwgZG91Ymxl
IHpBY2NlbGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgeEFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIGRvdWJsZSB5QWNjZWxl
cmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgZG91YmxlIHpBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2
aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
IHhSb3RhdGlvblJhdGUsIGRvdWJsZSB5Um90YXRpb25SYXRlLCBkb3VibGUgelJvdGF0aW9uUmF0
ZSkKK3sKKyAgICBpZiAoIW1fdXBkYXRpbmcpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRG
T1JNKElPU19TSU1VTEFUT1IpCisgICAgVU5VU0VEX1BBUkFNKHhBY2NlbGVyYXRpb24pOworICAg
IFVOVVNFRF9QQVJBTSh5QWNjZWxlcmF0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oekFjY2VsZXJh
dGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHhBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5KTsK
KyAgICBVTlVTRURfUEFSQU0oeUFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkpOworICAgIFVO
VVNFRF9QQVJBTSh6QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSk7CisgICAgVU5VU0VEX1BB
UkFNKHhSb3RhdGlvblJhdGUpOworICAgIFVOVVNFRF9QQVJBTSh5Um90YXRpb25SYXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0oelJvdGF0aW9uUmF0ZSk7CisKKyAgICBSZWZQdHI8RGV2aWNlTW90aW9u
RGF0YTo6QWNjZWxlcmF0aW9uPiBhY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5ID0gRGV2aWNl
TW90aW9uRGF0YTo6QWNjZWxlcmF0aW9uOjpjcmVhdGUoZmFsc2UsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxz
ZSwgMCk7CisgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxl
cmF0aW9uID0gRGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmF0aW9uOjpjcmVhdGUoZmFsc2UsIDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIDApOworICAgIFJlZlB0
cjxEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlvblJhdGU+IHJvdGF0aW9uUmF0ZSA9IERldmljZU1v
dGlvbkRhdGE6OlJvdGF0aW9uUmF0ZTo6Y3JlYXRlKGZhbHNlLCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZhbHNlLCAwKTsKKyNlbHNlCisgICAgUmVmUHRyPERldmljZU1v
dGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSA9IERl
dmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbjo6Y3JlYXRlKHRydWUsIHhBY2NlbGVyYXRpb25J
bmNsdWRpbmdHcmF2aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cnVlLCB5QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1
ZSwgekFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkpOworICAgIFJlZlB0cjxEZXZpY2VNb3Rp
b25EYXRhOjpBY2NlbGVyYXRpb24+IGFjY2VsZXJhdGlvbiA9IDA7CisgICAgUmVmUHRyPERldmlj
ZU1vdGlvbkRhdGE6OlJvdGF0aW9uUmF0ZT4gcm90YXRpb25SYXRlID0gMDsKKyAgICBpZiAoW21f
bW90aW9uTWFuYWdlciBneXJvQXZhaWxhYmxlXSkgeworICAgICAgICBhY2NlbGVyYXRpb24gPSBE
ZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb246OmNyZWF0ZSh0cnVlLCB4QWNjZWxlcmF0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cnVlLCB5QWNjZWxlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB6QWNjZWxlcmF0aW9uKTsK
KyAgICAgICAgcm90YXRpb25SYXRlID0gRGV2aWNlTW90aW9uRGF0YTo6Um90YXRpb25SYXRlOjpj
cmVhdGUodHJ1ZSwgeFJvdGF0aW9uUmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgeVJvdGF0aW9uUmF0ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ1ZSwgelJvdGF0aW9uUmF0ZSk7CisgICAgfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPU19T
SU1VTEFUT1IpCisKKyAgICBtX2N1cnJlbnREZXZpY2VNb3Rpb25EYXRhID0gRGV2aWNlTW90aW9u
RGF0YTo6Y3JlYXRlKGFjY2VsZXJhdGlvbiwgYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwg
cm90YXRpb25SYXRlLCB0cnVlLCBrTW90aW9uVXBkYXRlSW50ZXJ2YWwpOworICAgIG1fY29udHJv
bGxlci0+ZGlkQ2hhbmdlRGV2aWNlTW90aW9uKG1fY3VycmVudERldmljZU1vdGlvbkRhdGEuZ2V0
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlT3JpZW50
YXRpb25DbGllbnRJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EZXZpY2VPcmll
bnRhdGlvbkNsaWVudElPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViZTdmNTFlMjgzMzg4MjI3MjlmMzU4ZDlk
MGY2MzBkNjFhMWMxZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaApAQCAtMCwwICsxLDY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
T1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TX2gKKyNkZWZpbmUgRGV2aWNl
T3JpZW50YXRpb25DbGllbnRJT1NfaAorCisjaW5jbHVkZSAiRGV2aWNlT3JpZW50YXRpb25DbGll
bnQuaCIKKyNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJEZXZpY2VPcmllbnRhdGlvbkRhdGEuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmZGVmIF9fT0JKQ19fCitAY2xhc3MgV2ViQ29y
ZU1vdGlvbk1hbmFnZXI7CisjZWxzZQorY2xhc3MgV2ViQ29yZU1vdGlvbk1hbmFnZXI7CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEZXZpY2VPcmllbnRhdGlvbkNsaWVu
dElPUyA6IHB1YmxpYyBEZXZpY2VPcmllbnRhdGlvbkNsaWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1M+IGNyZWF0ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9T
KCkpOworICAgIH0KKyAgICBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUygpOworICAgIHZpcnR1
YWwgfkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldENvbnRyb2xsZXIoRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RvcFVwZGF0aW5nKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBEZXZpY2VPcmllbnRh
dGlvbkRhdGEqIGxhc3RPcmllbnRhdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBkZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXJEZXN0cm95ZWQoKSBPVkVSUklERTsKKwor
ICAgIHZvaWQgb3JpZW50YXRpb25DaGFuZ2VkKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJs
ZSwgZG91YmxlKTsKKworcHJpdmF0ZToKKyAgICBXZWJDb3JlTW90aW9uTWFuYWdlciogbV9tb3Rp
b25NYW5hZ2VyOworICAgIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciogbV9jb250cm9sbGVy
OworICAgIFJlZlB0cjxEZXZpY2VPcmllbnRhdGlvbkRhdGE+IG1fY3VycmVudERldmljZU9yaWVu
dGF0aW9uOworICAgIGJvb2wgbV91cGRhdGluZzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElP
Uy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yMTZhNTY2YzI4MmFjYTFhZGFkODRmYWRmNDc5ZjU4ZDA5ODFjNTg3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZU9y
aWVudGF0aW9uQ2xpZW50SU9TLm1tCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaW1w
b3J0ICJEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oIgorCisjaW1wb3J0ICJXZWJDb3JlTW90
aW9uTWFuYWdlci5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpEZXZpY2VPcmllbnRhdGlvbkNsaWVudElP
UygpCisgICAgOiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudCgpCisgICAgLCBtX21vdGlvbk1hbmFn
ZXIobnVsbHB0cikKKyAgICAsIG1fdXBkYXRpbmcoMCkKK3sKK30KKworRGV2aWNlT3JpZW50YXRp
b25DbGllbnRJT1M6On5EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUygpCit7Cit9CisKK3ZvaWQg
RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1M6OnNldENvbnRyb2xsZXIoRGV2aWNlT3JpZW50YXRp
b25Db250cm9sbGVyKiBjb250cm9sbGVyKQoreworICAgIG1fY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7Cit9CisKK3ZvaWQgRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1M6OnN0YXJ0VXBkYXRpbmco
KQoreworICAgIG1fdXBkYXRpbmcgPSB0cnVlOworCisgICAgaWYgKCFtX21vdGlvbk1hbmFnZXIp
CisgICAgICAgIG1fbW90aW9uTWFuYWdlciA9IFtXZWJDb3JlTW90aW9uTWFuYWdlciBzaGFyZWRN
YW5hZ2VyXTsKKworICAgIFttX21vdGlvbk1hbmFnZXIgYWRkT3JpZW50YXRpb25DbGllbnQ6dGhp
c107Cit9CisKK3ZvaWQgRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1M6OnN0b3BVcGRhdGluZygp
Cit7CisgICAgbV91cGRhdGluZyA9IGZhbHNlOworCisgICAgLy8gUmVtb3ZlIG91cnNlbHZlcyBh
cyB0aGUgb3JpZW50YXRpb24gY2xpZW50IHNvIHdlIHdvbid0IGdldCB1cGRhdGVzLgorICAgIFtt
X21vdGlvbk1hbmFnZXIgcmVtb3ZlT3JpZW50YXRpb25DbGllbnQ6dGhpc107Cit9CisKK0Rldmlj
ZU9yaWVudGF0aW9uRGF0YSogRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1M6Omxhc3RPcmllbnRh
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3VycmVudERldmljZU9yaWVudGF0aW9uLmdl
dCgpOworfQorCit2b2lkIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpkZXZpY2VPcmllbnRh
dGlvbkNvbnRyb2xsZXJEZXN0cm95ZWQoKQoreworICAgIFttX21vdGlvbk1hbmFnZXIgcmVtb3Zl
T3JpZW50YXRpb25DbGllbnQ6dGhpc107Cit9CisgICAgCit2b2lkIERldmljZU9yaWVudGF0aW9u
Q2xpZW50SU9TOjpvcmllbnRhdGlvbkNoYW5nZWQoZG91YmxlIGFscGhhLCBkb3VibGUgYmV0YSwg
ZG91YmxlIGdhbW1hLCBkb3VibGUgY29tcGFzc0hlYWRpbmcsIGRvdWJsZSBjb21wYXNzQWNjdXJh
Y3kpCit7CisgICAgaWYgKCFtX3VwZGF0aW5nKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFU
Rk9STShJT1NfU0lNVUxBVE9SKQorICAgIFVOVVNFRF9QQVJBTShhbHBoYSk7CisgICAgVU5VU0VE
X1BBUkFNKGJldGEpOworICAgIFVOVVNFRF9QQVJBTShnYW1tYSk7CisgICAgVU5VU0VEX1BBUkFN
KGNvbXBhc3NIZWFkaW5nKTsKKyAgICBVTlVTRURfUEFSQU0oY29tcGFzc0FjY3VyYWN5KTsKKyAg
ICBtX2N1cnJlbnREZXZpY2VPcmllbnRhdGlvbiA9IERldmljZU9yaWVudGF0aW9uRGF0YTo6Y3Jl
YXRlKGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmYWxzZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
YWxzZSwgMCk7CisjZWxzZQorICAgIG1fY3VycmVudERldmljZU9yaWVudGF0aW9uID0gRGV2aWNl
T3JpZW50YXRpb25EYXRhOjpjcmVhdGUodHJ1ZSwgYWxwaGEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGJldGEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
dWUsIGdhbW1hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlLCBjb21wYXNzSGVhZGluZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgY29tcGFzc0FjY3Vy
YWN5KTsKKyNlbmRpZgorICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlRGV2aWNlT3JpZW50YXRp
b24obV9jdXJyZW50RGV2aWNlT3JpZW50YXRpb24uZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvS2V5RXZlbnRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvS2V5RXZlbnRJT1MubW0KaW5kZXggODI0YWI3ZjFiY2IwNDYwMGE5NDYwYmYwZTM5
MjAxMTY1YzQ1YTVmNC4uMzkxYjZhYTk5MzBiMWJhNGQyMDUwMGQ3ZmE3NzZkMGQ1Mjc2Y2U4MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0tleUV2ZW50SU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9LZXlFdmVudElPUy5tbQpAQCAtMjgsNTkg
KzI4LDEyIEBACiAKICNpZiBQTEFURk9STShJT1MpCiAKLSNpbXBvcnQgIktleUV2ZW50Q29jb2Eu
aCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCi0jaW1w
b3J0ICJXZWJFdmVudC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZvcktleUV2ZW50KFdlYkV2ZW50
ICpldmVudCkKLXsKLSAgICBOU1N0cmluZyAqcyA9IGV2ZW50LmNoYXJhY3RlcnNJZ25vcmluZ01v
ZGlmaWVyczsKLSAgICBpZiAoW3MgbGVuZ3RoXSAhPSAxKSB7Ci0gICAgICAgIExPRyhFdmVudHMs
ICJyZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGtleSBldmVu
dDogJXUiLCBbcyBsZW5ndGhdKTsKLSAgICAgICAgcmV0dXJuICJVbmlkZW50aWZpZWQiOwotICAg
IH0KLQotICAgIHVuaWNoYXIgYyA9IENGU3RyaW5nR2V0Q2hhcmFjdGVyQXRJbmRleCgoQ0ZTdHJp
bmdSZWYpcywgMCk7Ci0gICAgcmV0dXJuIGtleUlkZW50aWZpZXJGb3JDaGFyQ29kZShjKTsKLX0K
LQotUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoV2ViRXZlbnQg
KmV2ZW50KQotICAgIDogUGxhdGZvcm1FdmVudChldmVudC50eXBlID09IFdlYkV2ZW50S2V5VXAg
PyBQbGF0Zm9ybUV2ZW50OjpLZXlVcCA6IFBsYXRmb3JtRXZlbnQ6OktleURvd24sIGV2ZW50Lm1v
ZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrU2hpZnQsIGV2ZW50Lm1vZGlmaWVyRmxhZ3Mg
JiBXZWJFdmVudEZsYWdNYXNrQ29udHJvbCwgZXZlbnQubW9kaWZpZXJGbGFncyAmIFdlYkV2ZW50
RmxhZ01hc2tBbHRlcm5hdGUsIGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNr
Q29tbWFuZCkKLSAgICAsIG1fdGV4dChldmVudC5jaGFyYWN0ZXJzKQotICAgICwgbV91bm1vZGlm
aWVkVGV4dChldmVudC5jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMpCi0gICAgLCBtX2tleUlk
ZW50aWZpZXIoa2V5SWRlbnRpZmllckZvcktleUV2ZW50KGV2ZW50KSkKLSAgICAsIG1fYXV0b1Jl
cGVhdChldmVudC5pc0tleVJlcGVhdGluZykKLSAgICAsIG1fd2luZG93c1ZpcnR1YWxLZXlDb2Rl
KGV2ZW50LmtleUNvZGUpCi0gICAgLCBtX2lzS2V5cGFkKGZhbHNlKSAvLyBpUGhvbmUgZG9lcyBu
b3QgZGlzdGluZ3Vpc2ggdGhlIG51bXBhZCA8cmRhcjovL3Byb2JsZW0vNzE5MDgzNT4KLSAgICAs
IG1fRXZlbnQoZXZlbnQpCi17Ci0gICAgQVNTRVJUKGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlE
b3duIHx8IGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlVcCk7Ci0KLSAgICAvLyBBbHdheXMgdXNl
IDEzIGZvciBFbnRlci9SZXR1cm4gLS0gd2UgZG9uJ3Qgd2FudCB0byB1c2UgQXBwS2l0J3MgZGlm
ZmVyZW50IGNoYXJhY3RlciBmb3IgRW50ZXIuCi0gICAgaWYgKG1fd2luZG93c1ZpcnR1YWxLZXlD
b2RlID09ICdccicpIHsKLSAgICAgICAgbV90ZXh0ID0gIlxyIjsKLSAgICAgICAgbV91bm1vZGlm
aWVkVGV4dCA9ICJcciI7Ci0gICAgfQotCi0gICAgLy8gVGhlIGFkanVzdG1lbnRzIGJlbG93IGFy
ZSBvbmx5IG5lZWRlZCBpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUsIGJ1dCB3ZSBjYW5u
b3QgdGVsbCB3aGF0IG1vZGUgd2UgYXJlIGluIGZyb20gaGVyZS4KLQotICAgIC8vIFR1cm4gMHg3
RiBpbnRvIDgsIGJlY2F1c2UgYmFja3NwYWNlIG5lZWRzIHRvIGFsd2F5cyBiZSA4LgotICAgIGlm
IChtX3RleHQgPT0gIlx4N0YiKQotICAgICAgICBtX3RleHQgPSAiXHg4IjsKLSAgICBpZiAobV91
bm1vZGlmaWVkVGV4dCA9PSAiXHg3RiIpCi0gICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHg4
IjsKLSAgICAvLyBBbHdheXMgdXNlIDkgZm9yIHRhYiAtLSB3ZSBkb24ndCB3YW50IHRvIHVzZSBB
cHBLaXQncyBkaWZmZXJlbnQgY2hhcmFjdGVyIGZvciBzaGlmdC10YWIuCi0gICAgaWYgKG1fd2lu
ZG93c1ZpcnR1YWxLZXlDb2RlID09IDkpIHsKLSAgICAgICAgbV90ZXh0ID0gIlx4OSI7Ci0gICAg
ICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHg5IjsKLSAgICB9Ci19Ci0KIHZvaWQgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sIGJh
Y2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCiB7CiAgICAgLy8gQ2FuIG9ubHkgY2hhbmdlIHR5cGUg
ZnJvbSBLZXlEb3duIHRvIFJhd0tleURvd24gb3IgQ2hhciwgYXMgd2UgbGFjayBpbmZvcm1hdGlv
biBmb3Igb3RoZXIgY29udmVyc2lvbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvTUlNRVR5cGVSZWdpc3RyeUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9NSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmNDg1YTIwZDdjMWM3MjU4
YWFhNWExMjViNmMyNjlmOWNjZTVmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvTUlNRVR5cGVSZWdpc3RyeUlPUy5tbQpAQCAtMCwwICsxLDUzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKKworI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgCit7CitTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVG
b3JFeHRlbnNpb24oY29uc3QgU3RyaW5nICZleHQpCit7CisgICAgcmV0dXJuIHdrR2V0TUlNRVR5
cGVGb3JFeHRlbnNpb24oZXh0KTsKK30KKworVmVjdG9yPFN0cmluZz4gTUlNRVR5cGVSZWdpc3Ry
eTo6Z2V0RXh0ZW5zaW9uc0Zvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgLyp0eXBlKi8pCit7Cisg
ICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Cit9CisKK1N0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5
OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIC8qdHlwZSov
KQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojpp
c0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5cGUoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjdiNDRmMjNiM2U1MWNlMWY3YThlYzkzNGE3MTczZDRhNGQ5NWNjYzAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTWVtb3J5UHJlc3N1cmVIYW5kbGVy
SU9TLm1tCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJNZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuaCIKKworI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiU3lzdGVtTWVtb3J5
LmgiCisjaW1wb3J0ICJXZWJDb3JlVGhyZWFkLmgiCisjaW1wb3J0IDxsaWJrZXJuL09TQXRvbWlj
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgcmVzcG9uZFRvTWVtb3J5
UHJlc3N1cmVDYWxsYmFjayhDRlJ1bkxvb3BPYnNlcnZlclJlZiBvYnNlcnZlciwgQ0ZSdW5Mb29w
QWN0aXZpdHkgLyphY3Rpdml0eSovLCB2b2lkKiAvKmluZm8qLykKK3sKKyAgICBtZW1vcnlQcmVz
c3VyZUhhbmRsZXIoKS5yZXNwb25kVG9NZW1vcnlQcmVzc3VyZUlmTmVlZGVkKCk7CisgICAgQ0ZS
dW5Mb29wT2JzZXJ2ZXJJbnZhbGlkYXRlKG9ic2VydmVyKTsKKyAgICBDRlJlbGVhc2Uob2JzZXJ2
ZXIpOworfQorCit2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6aW5zdGFsbE1lbW9yeVJlbGVh
c2VCbG9jayh2b2lkIChecmVsZWFzZU1lbW9yeUJsb2NrKSgpLCBib29sIGNsZWFyUHJlc3N1cmVP
bk1lbW9yeVJlbGVhc2UpCit7CisgICAgaWYgKG1faW5zdGFsbGVkKQorICAgICAgICByZXR1cm47
CisgICAgbV9yZWxlYXNlTWVtb3J5QmxvY2sgPSBCbG9ja19jb3B5KHJlbGVhc2VNZW1vcnlCbG9j
ayk7CisgICAgbV9jbGVhclByZXNzdXJlT25NZW1vcnlSZWxlYXNlID0gY2xlYXJQcmVzc3VyZU9u
TWVtb3J5UmVsZWFzZTsKKyAgICBtX2luc3RhbGxlZCA9IHRydWU7Cit9CisKK3ZvaWQgTWVtb3J5
UHJlc3N1cmVIYW5kbGVyOjpzZXRSZWNlaXZlZE1lbW9yeVByZXNzdXJlKE1lbW9yeVByZXNzdXJl
UmVhc29uIHJlYXNvbikKK3sKKyAgICBPU0F0b21pY1Rlc3RBbmRTZXQoMCwgJm1fcmVjZWl2ZWRN
ZW1vcnlQcmVzc3VyZSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29i
c2VydmVyTXV0ZXgpOworICAgICAgICBpZiAoIW1fb2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgIG1f
b2JzZXJ2ZXIgPSBDRlJ1bkxvb3BPYnNlcnZlckNyZWF0ZShOVUxMLCBrQ0ZSdW5Mb29wQmVmb3Jl
V2FpdGluZyB8IGtDRlJ1bkxvb3BFeGl0LCBOTyAvKiBkb24ndCByZXBlYXQgKi8sCisgICAgICAg
ICAgICAgICAgMCwgV2ViQ29yZTo6cmVzcG9uZFRvTWVtb3J5UHJlc3N1cmVDYWxsYmFjaywgTlVM
TCk7CisgICAgICAgICAgICBDRlJ1bkxvb3BBZGRPYnNlcnZlcihXZWJUaHJlYWRSdW5Mb29wKCks
IG1fb2JzZXJ2ZXIsIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgICAgICAgICBDRlJ1bkxv
b3BXYWtlVXAoV2ViVGhyZWFkUnVuTG9vcCgpKTsKKyAgICAgICAgfQorICAgICAgICBtX21lbW9y
eVByZXNzdXJlUmVhc29uIHw9IHJlYXNvbjsKKyAgICB9Cit9CisKK2Jvb2wgTWVtb3J5UHJlc3N1
cmVIYW5kbGVyOjpoYXNSZWNlaXZlZE1lbW9yeVByZXNzdXJlKCkKK3sKKyAgICByZXR1cm4gT1NB
dG9taWNPcjMyKDAsICZtX3JlY2VpdmVkTWVtb3J5UHJlc3N1cmUpOworfQorCit2b2lkIE1lbW9y
eVByZXNzdXJlSGFuZGxlcjo6Y2xlYXJNZW1vcnlQcmVzc3VyZSgpCit7CisgICAgT1NBdG9taWNU
ZXN0QW5kQ2xlYXIoMCwgJm1fcmVjZWl2ZWRNZW1vcnlQcmVzc3VyZSk7CisKKyAgICB7CisgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29ic2VydmVyTXV0ZXgpOworICAgICAgICBtX21lbW9y
eVByZXNzdXJlUmVhc29uID0gTWVtb3J5UHJlc3N1cmVSZWFzb25Ob25lOworICAgIH0KK30KKwor
Ym9vbCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNob3VsZFdhaXRGb3JNZW1vcnlDbGVhck1lc3Nh
Z2UoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29ic2VydmVyTXV0ZXgpOworICAgIHJl
dHVybiBtX21lbW9yeVByZXNzdXJlUmVhc29uICYgTWVtb3J5UHJlc3N1cmVSZWFzb25WTVN0YXR1
czsKK30KKwordm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnJlc3BvbmRUb01lbW9yeVByZXNz
dXJlSWZOZWVkZWQoKQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0xvY2tlZE9yRGlzYWJsZWQo
KSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29ic2VydmVyTXV0ZXgp
OworICAgICAgICBtX29ic2VydmVyID0gMDsKKyAgICB9CisKKyAgICBpZiAoaGFzUmVjZWl2ZWRN
ZW1vcnlQcmVzc3VyZSgpKSB7CisgICAgICAgIEFTU0VSVChtX3JlbGVhc2VNZW1vcnlCbG9jayk7
CisgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIkhhbmRsZSBtZW1vcnkgcHJlc3N1cmUgYXQg
JXMiLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgICAgICAgbV9yZWxlYXNlTWVtb3J5QmxvY2so
KTsKKyAgICAgICAgaWYgKG1fY2xlYXJQcmVzc3VyZU9uTWVtb3J5UmVsZWFzZSkKKyAgICAgICAg
ICAgIGNsZWFyTWVtb3J5UHJlc3N1cmUoKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJk
SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KaW5k
ZXggODdiNTUxNzkxYWQxY2QzYjgxNDc1ZTQ4MTNlMjE0ZjhhYTcxN2U4ZC4uZjI1OTI3NThiYWUx
NzkzZTUxYzEyNTVmM2QyMDJmNjViNjFlZjc2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KQEAgLTM1LDIwICszNSwyNCBAQAogI2ltcG9ydCAiRnJh
bWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVu
dC5oIgorI2ltcG9ydCAiSFRNTENvbnZlcnRlci5oIgogI2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIK
ICNpbXBvcnQgIkhUTUxOYW1lcy5oIgogI2ltcG9ydCAiSFRNTFBhcnNlcklkaW9tcy5oIgotI2lt
cG9ydCAiVVJMLmgiCisjaW1wb3J0ICJJbWFnZS5oIgogI2ltcG9ydCAiTGVnYWN5V2ViQXJjaGl2
ZS5oIgogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAiUGFzdGVib2FyZFN0cmF0ZWd5LmgiCiAj
aW1wb3J0ICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCisj
aW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1
ZmZlci5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKICNpbXBvcnQgIlRleHQuaCIKKyNpbXBv
cnQgIlVSTC5oIgorI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgiCiAjaW1w
b3J0ICJodG1sZWRpdGluZy5oIgogI2ltcG9ydCAibWFya3VwLmgiCi0jaW1wb3J0ICJXZWJOU0F0
dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIKICNpbXBvcnQgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2Jp
bGVDb3JlU2VydmljZXMuaD4KIAogQGludGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKE5TQXR0
cmlidXRlZFN0cmluZ0tpdEFkZGl0aW9ucykKQEAgLTEyNiw5NyArMTMwLDI0IEBAIFBhc3NPd25Q
dHI8UGFzdGVib2FyZD4gUGFzdGVib2FyZDo6Y3JlYXRlUHJpdmF0ZSgpCiAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBQYXN0ZWJvYXJkKTsKIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjpzZXRGcmFtZShG
cmFtZSogZnJhbWUpCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJD
b250ZW50JiBjb250ZW50KQogewotICAgIG1fZnJhbWUgPSBmcmFtZTsKLSAgICBtX2NoYW5nZUNv
dW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnBhc3RlYm9hcmRDaGFuZ2VDb3VudCgp
OworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVU
b1Bhc3RlYm9hcmQoY29udGVudCk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rp
b24oUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgLypjYW5TbWFydENvcHlPckRlbGV0ZSovLCBG
cmFtZSAqZnJhbWUsIFNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCBzaG91
bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQpCitTdHJpbmcgUGFzdGVib2FyZDo6
cmVzb3VyY2VNSU1FVHlwZShjb25zdCBOU1N0cmluZyAqbWltZVR5cGUpCiB7Ci0gICAgQVNTRVJU
KHNlbGVjdGVkUmFuZ2UpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KLSAgICAvLyBJZiB0aGUgc2Vs
ZWN0aW9uIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgY29udGVudCBpbnNpZGUgYW4gYW5jaG9yIHRh
ZwotICAgIC8vIHdlIG1vdmUgdGhlIHNlbGVjdGlvbiBzdGFydCB0byBpbmNsdWRlIHRoZSBhbmNo
b3IuCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IHNl
bGVjdGVkUmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGVjKTsKLSAgICBBU1NFUlQoY29t
bW9uQW5jZXN0b3IpOwotICAgIE5vZGUqIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ05vZGVX
aXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uQW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFU
YWcpOwotICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYgY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUoc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLmFuY2hv
ck5vZGUoKSksIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgPj0gMCkKLSAgICAgICAg
c2VsZWN0ZWRSYW5nZS0+c2V0U3RhcnQoZW5jbG9zaW5nQW5jaG9yLCAwLCBlYyk7Ci0KLSAgICBS
ZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotCi0gICAgLy8gUHV0IFdlYkFyY2hpdmUgb24g
dGhlIHBhc3RlYm9hcmQuCi0gICAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGFyY2hpdmUgPSBM
ZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKGZyYW1lKTsKLSAgICBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBkYXRhID0gYXJjaGl2ZSA/IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRh
dGlvbigpIDogMDsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgW3JlcHJlc2VudGF0aW9ucy5nZXQo
KSBzZXRWYWx1ZTooTlNEYXRhICopZGF0YS5nZXQoKSBmb3JLZXk6V2ViQXJjaGl2ZVBib2FyZFR5
cGVdOwotCi0gICAgUmV0YWluUHRyPE5TSFRNTFJlYWRlcj4gY29udmVydGVyID0gYWRvcHROUyhb
W2dldE5TSFRNTFJlYWRlckNsYXNzKCkgYWxsb2NdIGluaXRXaXRoRE9NUmFuZ2U6a2l0KHNlbGVj
dGVkUmFuZ2UpXSk7Ci0gICAgaWYgKGNvbnZlcnRlcikgewotICAgICAgICBOU0F0dHJpYnV0ZWRT
dHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbY29udmVydGVyLmdldCgpIGF0dHJpYnV0ZWRTdHJp
bmddOwotICAgICAgICBOU0RhdGEqIFJURkREYXRhID0gW2F0dHJpYnV0ZWRTdHJpbmcgUlRGREZy
b21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBkb2N1bWVu
dEF0dHJpYnV0ZXM6bmlsXTsKLSAgICAgICAgaWYgKFJURkREYXRhKQotICAgICAgICAgICAgW3Jl
cHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTpSVEZERGF0YSBmb3JLZXk6KE5TU3RyaW5nICop
a1VUVHlwZVJURkRdOwotICAgICAgICBpZiAoW2F0dHJpYnV0ZWRTdHJpbmcgY29udGFpbnNBdHRh
Y2htZW50c10pCi0gICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmlu
Z0J5U3RyaXBwaW5nQXR0YWNobWVudENoYXJhY3RlcnMoYXR0cmlidXRlZFN0cmluZyk7Ci0gICAg
ICAgIE5TRGF0YSogUlRGRGF0YSA9IFthdHRyaWJ1dGVkU3RyaW5nIFJURkZyb21SYW5nZTpOU01h
a2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6
bmlsXTsKLSAgICAgICAgaWYgKFJURkRhdGEpCi0gICAgICAgICAgICBbcmVwcmVzZW50YXRpb25z
LmdldCgpIHNldFZhbHVlOlJURkRhdGEgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVSVEZdOwot
ICAgIH0KLQotICAgIC8vIFB1dCBwbGFpbiBzdHJpbmcgb24gdGhlIHBhc3RlYm9hcmQuCi0gICAg
U3RyaW5nIHRleHQgPSBzaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQgPT0g
SW5jbHVkZUltYWdlQWx0VGV4dEZvckNsaXBib2FyZAotICAgICAgICA/IGZyYW1lLT5lZGl0b3Io
KS5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKSA6IGZyYW1lLT5lZGl0b3IoKS5zZWxlY3RlZFRl
eHQoKTsKLSAgICB0ZXh0LnJlcGxhY2Uobm9CcmVha1NwYWNlLCAnICcpOwotICAgIFtyZXByZXNl
bnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6dGV4dCBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVRl
eHRdOwotCi0gICAgZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT53cml0ZURhdGFUb1Bhc3RlYm9h
cmQocmVwcmVzZW50YXRpb25zLmdldCgpKTsKKyAgICByZXR1cm4gU3RyaW5nKGFkb3B0Q0YoVVRU
eXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZyhrVVRUYWdDbGFzc01JTUVUeXBlLCAo
Q0ZTdHJpbmdSZWYpbWltZVR5cGUsIE5VTEwpKS5nZXQoKSk7CiB9CiAKLXZvaWQgUGFzdGVib2Fy
ZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBGcmFtZSAqZnJhbWUpCit2b2lk
IFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdl
KQogewotICAgIEFTU0VSVChmcmFtZSk7Ci0KLSAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBy
ZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5p
dF0pOwotICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6dGV4dCBmb3JLZXk6KE5T
U3RyaW5nICopa1VUVHlwZVRleHRdOwotICAgIGZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+d3Jp
dGVEYXRhVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9ucy5nZXQoKSk7Ci19Ci0KLXZvaWQgUGFz
dGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgQVNT
RVJUKG5vZGUpOwotCi0gICAgaWYgKCEobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJl
cigpLT5pc0ltYWdlKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJJbWFnZSogcmVu
ZGVyZXIgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRlcmVyKCkpOwotICAgIENhY2hlZEltYWdl
KiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpOwotICAgIGlmICghY2FjaGVk
SW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVy
ZXIpOwotICAgIEFTU0VSVChpbWFnZSk7Ci0KLSAgICBSZXRhaW5QdHI8TlNEYXRhPiBpbWFnZURh
dGEgPSBpbWFnZS0+ZGF0YSgpLT5jcmVhdGVOU0RhdGEoKTsKLQotICAgIGlmICghaW1hZ2VEYXRh
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4g
ZGljdGlvbmFyeSA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7
Ci0gICAgTlNTdHJpbmcgKm1pbWVUeXBlID0gY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkubWltZVR5
cGUoKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aSA9IGFkb3B0Q0YoVVRUeXBlQ3Jl
YXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZyhrVVRUYWdDbGFzc01JTUVUeXBlLCAoQ0ZTdHJp
bmdSZWYpbWltZVR5cGUsIE5VTEwpKTsKLSAgICBpZiAodXRpKSB7Ci0gICAgICAgIFtkaWN0aW9u
YXJ5LmdldCgpIHNldE9iamVjdDppbWFnZURhdGEuZ2V0KCkgZm9yS2V5OihOU1N0cmluZyAqKXV0
aS5nZXQoKV07Ci0gICAgICAgIFtkaWN0aW9uYXJ5LmdldCgpIHNldE9iamVjdDooTlNTdHJpbmcg
Kilub2RlLT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRN
TFNwYWNlcyhzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoInNy
YyIpKSkgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdOwotICAgIH0KLSAgICBmcmFtZS0+
ZWRpdG9yKCkuY2xpZW50KCktPndyaXRlRGF0YVRvUGFzdGVib2FyZChkaWN0aW9uYXJ5LmdldCgp
KTsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRl
VG9QYXN0ZWJvYXJkKHBhc3RlYm9hcmRJbWFnZSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3Jp
dGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiwgU21hcnRSZXBsYWNlT3B0aW9uKQordm9pZCBQYXN0
ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFNtYXJ0UmVwbGFjZU9w
dGlvbikKIHsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCkt
PndyaXRlVG9QYXN0ZWJvYXJkKGtVVFR5cGVUZXh0LCB0ZXh0KTsKIH0KIAogdm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZVBhc3RlYm9hcmQoY29uc3QgUGFzdGVib2FyZCYpCkBAIC0yMzAsMjQxICsxNjEs
ODMgQEAgYm9vbCBQYXN0ZWJvYXJkOjpjYW5TbWFydFJlcGxhY2UoKQogCiB2b2lkIFBhc3RlYm9h
cmQ6OnJlYWQoUGFzdGVib2FyZFBsYWluVGV4dCYgdGV4dCkKIHsKLSAgICBSZXRhaW5QdHI8TlNB
cnJheT4gcGFzdGVib2FyZEl0ZW0gPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+cmVhZERh
dGFGcm9tUGFzdGVib2FyZCgoTlNTdHJpbmcgKilrVVRUeXBlVGV4dCwgMCk7Ci0KLSAgICBpZiAo
W3Bhc3RlYm9hcmRJdGVtLmdldCgpIGNvdW50XSA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZCB2YWx1ZSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOwotICAg
IEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7Ci0gICAgaWYg
KFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQotICAgICAgICB0ZXh0LnRl
eHQgPSAoTlNTdHJpbmcgKil2YWx1ZTsKKyAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kmIHN0cmF0ZWd5
ID0gKnBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKTsKKyAgICB0ZXh0
LnRleHQgPSBzdHJhdGVneS5yZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoMCwga1VUVHlwZVRleHQp
OwogfQogCiBzdGF0aWMgTlNBcnJheSogc3VwcG9ydGVkSW1hZ2VUeXBlcygpCiB7Ci0gICAgcmV0
dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6KGlkKWtVVFR5cGVQTkcsIChpZClrVVRUeXBl
VElGRiwgKGlkKWtVVFR5cGVKUEVHLCAoaWQpa1VUVHlwZUdJRiwgbmlsXTsKKyAgICByZXR1cm4g
QFsoaWQpa1VUVHlwZVBORywgKGlkKWtVVFR5cGVUSUZGLCAoaWQpa1VUVHlwZUpQRUcsIChpZClr
VVRUeXBlR0lGXTsKIH0KIAotTlNBcnJheSogUGFzdGVib2FyZDo6c3VwcG9ydGVkUGFzdGVib2Fy
ZFR5cGVzKCkKK3ZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkV2ViQ29udGVudFJlYWRl
ciYgcmVhZGVyKQogewotICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOihpZClX
ZWJBcmNoaXZlUGJvYXJkVHlwZSwgKGlkKWtVVFR5cGVQTkcsIChpZClrVVRUeXBlVElGRiwgKGlk
KWtVVFR5cGVKUEVHLCAoaWQpa1VUVHlwZUdJRiwgKGlkKWtVVFR5cGVVUkwsIChpZClrVVRUeXBl
VGV4dCwgKGlkKWtVVFR5cGVSVEZELCAoaWQpa1VUVHlwZVJURiwgbmlsXTsKLX0KLQotI2RlZmlu
ZSBXZWJEYXRhUHJvdG9jb2xTY2hlbWUgQCJ3ZWJraXQtZmFrZS11cmwiCi0KLXN0YXRpYyBOU1VS
TCogdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChOU1N0cmluZyAqcmVsYXRpdmVQYXJ0KQotewot
ICAgIENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZVVUlEQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQp
OwotICAgIE5TU3RyaW5nICpVVUlEU3RyaW5nID0gKE5TU3RyaW5nICopQ0ZVVUlEQ3JlYXRlU3Ry
aW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVVSURSZWYpOwotICAgIENGUmVsZWFzZShVVUlEUmVm
KTsKLSAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIlQDovLyVALyVAIiwgV2ViRGF0YVByb3RvY29sU2NoZW1lLCBVVUlEU3Ry
aW5nLCByZWxhdGl2ZVBhcnRdXTsKLSAgICBDRlJlbGVhc2UoVVVJRFN0cmluZyk7Ci0KLSAgICBy
ZXR1cm4gVVJMOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1
bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPEFy
Y2hpdmVSZXNvdXJjZT4gcmVzb3VyY2UpCi17Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGltYWdlRWxl
bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KEhUTUxOYW1lczo6aW1nVGFn
LCBmYWxzZSk7Ci0KLSAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2Fk
ZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICBsb2FkZXItPmFkZEFyY2hpdmVSZXNvdXJj
ZShyZXNvdXJjZS5nZXQoKSk7Ci0KLSAgICBOU1VSTCAqVVJMID0gcmVzb3VyY2UtPnVybCgpOwot
ICAgIGltYWdlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0ciwgW1VSTCBp
c0ZpbGVVUkxdID8gW1VSTCBhYnNvbHV0ZVN0cmluZ10gOiByZXNvdXJjZS0+dXJsKCkpOwotICAg
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGZyYW1lLT5kb2N1bWVudCgpLT5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGltYWdl
RWxlbWVudC5yZWxlYXNlKCkpOwotICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci19Ci0K
LXN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50RnJhZ21lbnRXaXRo
TGluayhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAg
IFJlZlB0cjxFbGVtZW50PiBhbmNob3JFbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQo
SFRNTE5hbWVzOjphVGFnLCBmYWxzZSk7Ci0KLSAgICBhbmNob3JFbGVtZW50LT5zZXRBdHRyaWJ1
dGUoSFRNTE5hbWVzOjpocmVmQXR0ciwgdXJsU3RyaW5nKTsKLSAgICBhbmNob3JFbGVtZW50LT5h
cHBlbmRDaGlsZChkb2N1bWVudC0+Y3JlYXRlVGV4dE5vZGUodXJsU3RyaW5nKSk7Ci0KLSAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRG9jdW1l
bnRGcmFnbWVudCgpOwotICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChhbmNob3JFbGVtZW50LnJl
bGVhc2UoKSk7Ci0gICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudFdpdGhSVEYoRnJhbWUq
IGZyYW1lLCBOU1N0cmluZyAqcGFzdGVib2FyZFR5cGUsIE5TRGF0YSogcGFzdGVib2FyZERhdGEp
Ci17Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmRvY3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1
bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJldGFp
blB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZzsKLSAgICBpZiAoW3Bhc3RlYm9hcmRUeXBl
IGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRUeXBlUlRGRF0pCi0gICAgICAgIHN0cmlu
ZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6cGFzdGVib2FyZERh
dGEgZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOwotCi0gICAgaWYgKCFzdHJpbmcpCi0gICAgICAg
IHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpwYXN0ZWJv
YXJkRGF0YSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07Ci0KLSAgICBpZiAoIXN0cmluZykKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIHdhc0RlZmVycmluZ0NhbGxiYWNrcyA9IGZyYW1l
LT5wYWdlKCktPmRlZmVyc0xvYWRpbmcoKTsKLSAgICBpZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNr
cykKLSAgICAgICAgZnJhbWUtPnBhZ2UoKS0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAgICBQ
YXN0ZWJvYXJkU3RyYXRlZ3kmIHN0cmF0ZWd5ID0gKnBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8QXJjaGl2ZVJlc291cmNlPj4g
cmVzb3VyY2VzOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGZyYW1l
LT5lZGl0b3IoKS5jbGllbnQoKS0+ZG9jdW1lbnRGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3RyaW5n
KHN0cmluZy5nZXQoKSwgcmVzb3VyY2VzKTsKKyAgICBpbnQgbnVtYmVyT2ZJdGVtcyA9IHN0cmF0
ZWd5LmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAKLSAgICBzaXplX3Qgc2l6ZSA9IHJlc291
cmNlcy5zaXplKCk7Ci0gICAgaWYgKHNpemUpIHsKLSAgICAgICAgRG9jdW1lbnRMb2FkZXIqIGxv
YWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIGxvYWRlci0+YWRkQXJjaGl2
ZVJlc291cmNlKHJlc291cmNlc1tpXSk7Ci0gICAgfQorICAgIGlmICghbnVtYmVyT2ZJdGVtcykK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCF3YXNEZWZlcnJpbmdDYWxsYmFja3MpCi0gICAg
ICAgIGZyYW1lLT5wYWdlKCktPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOworICAgIE5TQXJyYXkg
KnR5cGVzID0gc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzKCk7CisgICAgaW50IG51bWJlck9mVHlw
ZXMgPSBbdHlwZXMgY291bnRdOwogCi0gICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKLX0K
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9mSXRlbXM7IGkrKykgeworICAgICAgICBm
b3IgKGludCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBudW1iZXJPZlR5cGVzOyB0eXBlSW5k
ZXgrKykgeworICAgICAgICAgICAgTlNTdHJpbmcgKnR5cGUgPSBbdHlwZXMgb2JqZWN0QXRJbmRl
eDp0eXBlSW5kZXhdOwogCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6
OmRvY3VtZW50RnJhZ21lbnRGb3JQYXN0ZWJvYXJkSXRlbUF0SW5kZXgoRnJhbWUqIGZyYW1lLCBp
bnQgaW5kZXgsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQotewot
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGZyYW1lLT5lZGl0b3IoKS5j
bGllbnQoKS0+ZG9jdW1lbnRGcmFnbWVudEZyb21EZWxlZ2F0ZShpbmRleCk7Ci0gICAgaWYgKGZy
YWdtZW50KQotICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwotCi0gICAgLy8gRmly
c3QgdHJ5IHRvIGFzayB0aGUgY2xpZW50IGFib3V0IHRoZSBzdXBwb3J0ZWQgdHlwZXMuIEl0IHdp
bGwgcmV0dXJuIG51bGwgaWYgdGhlIGNsaWVudAotICAgIC8vIGhhcyBubyBzZWxlY3Rpb24uCi0g
ICAgTlNBcnJheSAqc3VwcG9ydGVkVHlwZXMgPSBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnN1
cHBvcnRlZFBhc3RlYm9hcmRUeXBlc0ZvckN1cnJlbnRTZWxlY3Rpb24oKTsKLSAgICBpZiAoIXN1
cHBvcnRlZFR5cGVzKQotICAgICAgICBzdXBwb3J0ZWRUeXBlcyA9IHN1cHBvcnRlZFBhc3RlYm9h
cmRUeXBlcygpOwotICAgIGludCBudW1iZXJPZlR5cGVzID0gW3N1cHBvcnRlZFR5cGVzIGNvdW50
XTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZUeXBlczsgaSsrKSB7Ci0gICAg
ICAgIE5TU3RyaW5nICp0eXBlID0gW3N1cHBvcnRlZFR5cGVzIG9iamVjdEF0SW5kZXg6aV07Ci0g
ICAgICAgIFJldGFpblB0cjxOU0FycmF5PiBwYXN0ZWJvYXJkSXRlbSA9IGZyYW1lLT5lZGl0b3Io
KS5jbGllbnQoKS0+cmVhZERhdGFGcm9tUGFzdGVib2FyZCh0eXBlLCBpbmRleCk7Ci0KLSAgICAg
ICAgaWYgKFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBjb3VudF0gPT0gMCkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6V2ViQXJjaGl2ZVBi
b2FyZFR5cGVdKSB7Ci0gICAgICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgICAvLyBXZSBwdXQgW1dlYkFyY2hpdmUg
ZGF0YV0gb24gdGhlIHBhc3RlYm9hcmQgaW4gLWNvcHk6IGluc3RlYWQgb2YgdGhlIGFyY2hpdmUg
aXRzZWxmIHVudGlsIHRoZXJlIGlzIEFQSSB0byBwcm92aWRlIHRoZSBXZWJBcmNoaXZlLgotICAg
ICAgICAgICAgTlNEYXRhICpkYXRhID0gW3Bhc3RlYm9hcmRJdGVtLmdldCgpIG9iamVjdEF0SW5k
ZXg6MF07Ci0gICAgICAgICAgICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY29yZUFyY2hpdmUg
PSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKGRhdGEp
LmdldCgpKTsKLSAgICAgICAgICAgIGlmIChjb3JlQXJjaGl2ZSkgewotICAgICAgICAgICAgICAg
IFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IG1haW5SZXNvdXJjZSA9IGNvcmVBcmNoaXZlLT5tYWlu
UmVzb3VyY2UoKTsKLSAgICAgICAgICAgICAgICBpZiAobWFpblJlc291cmNlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIE5TU3RyaW5nICpNSU1FVHlwZSA9IG1haW5SZXNvdXJjZS0+bWltZVR5cGUo
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5jYW5T
aG93TUlNRVR5cGVBc0hUTUwoTUlNRVR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBS
ZXRhaW5QdHI8TlNTdHJpbmc+IG1hcmt1cFN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxv
Y10gaW5pdFdpdGhEYXRhOlttYWluUmVzb3VyY2UtPmRhdGEoKS0+Y3JlYXRlTlNEYXRhKCkgYXV0
b3JlbGVhc2VdIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5k
b2N1bWVudExvYWRlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci0+YWRk
QWxsQXJjaGl2ZVJlc291cmNlcyhjb3JlQXJjaGl2ZS5nZXQoKSk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFtZS0+ZG9j
dW1lbnQoKSwgbWFya3VwU3RyaW5nLmdldCgpLCBtYWluUmVzb3VyY2UtPnVybCgpLCBEaXNhbGxv
d1NjcmlwdGluZ0NvbnRlbnQpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOldlYkFyY2hpdmVQYm9hcmRUeXBlXSkgeworICAgICAg
ICAgICAgICAgIGlmIChSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBzdHJhdGVneS5yZWFk
QnVmZmVyRnJvbVBhc3RlYm9hcmQoaSwgV2ViQXJjaGl2ZVBib2FyZFR5cGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChyZWFkZXIucmVhZFdlYkFyY2hpdmUoYnVmZmVyLnJlbGVhc2UoKSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaWYgKGZyYWdtZW50KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJh
Z21lbnQucmVsZWFzZSgpOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KFt0eXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRUeXBlUlRGRF0pCi0gICAgICAg
ICAgICByZXR1cm4gZG9jdW1lbnRGcmFnbWVudFdpdGhSVEYoZnJhbWUsIChOU1N0cmluZyAqKWtV
VFR5cGVSVEZELCBbcGFzdGVib2FyZEl0ZW0uZ2V0KCkgb2JqZWN0QXRJbmRleDowXSk7CiAKLSAg
ICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRUeXBlUlRGXSkK
LSAgICAgICAgICAgIHJldHVybiBkb2N1bWVudEZyYWdtZW50V2l0aFJURihmcmFtZSwgKE5TU3Ry
aW5nICopa1VUVHlwZVJURiwgW3Bhc3RlYm9hcmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF0p
OwotCi0gICAgICAgIGlmIChbc3VwcG9ydGVkSW1hZ2VUeXBlcygpIGNvbnRhaW5zT2JqZWN0OnR5
cGVdKSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGZpbGVuYW1lRXh0ZW5zaW9u
ID0gYWRvcHROUygoTlNTdHJpbmcgKilVVFR5cGVDb3B5UHJlZmVycmVkVGFnV2l0aENsYXNzKChD
RlN0cmluZ1JlZil0eXBlLCBrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9uKSk7Ci0gICAgICAg
ICAgICBOU1N0cmluZyAqcmVsYXRpdmVVUkxQYXJ0ID0gW0AiaW1hZ2UiIHN0cmluZ0J5QXBwZW5k
aW5nU3RyaW5nOmZpbGVuYW1lRXh0ZW5zaW9uLmdldCgpXTsKLSAgICAgICAgICAgIFJldGFpblB0
cjxOU1N0cmluZz4gbWltZVR5cGUgPSBhZG9wdE5TKChOU1N0cmluZyAqKVVUVHlwZUNvcHlQcmVm
ZXJyZWRUYWdXaXRoQ2xhc3MoKENGU3RyaW5nUmVmKXR5cGUsIGtVVFRhZ0NsYXNzTUlNRVR5cGUp
KTsKLSAgICAgICAgICAgIE5TRGF0YSAqZGF0YSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmpl
Y3RBdEluZGV4OjBdOwotICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnRXaXRoSW1h
Z2VSZXNvdXJjZShmcmFtZSwgQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3
cmFwTlNEYXRhKFtbZGF0YSBjb3B5XSBhdXRvcmVsZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVsYXRp
dmVQYXJ0KHJlbGF0aXZlVVJMUGFydCksIG1pbWVUeXBlLmdldCgpLCAiIiwgIiIpKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtVVFR5
cGVVUkxdKSB7Ci0gICAgICAgICAgICBpZCB2YWx1ZSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBv
YmplY3RBdEluZGV4OjBdOwotICAgICAgICAgICAgaWYgKCFbdmFsdWUgaXNLaW5kT2ZDbGFzczpb
TlNVUkwgY2xhc3NdXSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZD
bGFzczpbTlNVUkwgY2xhc3NdXSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRUeXBlUlRGRF0p
IHsKKyAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gc3Ry
YXRlZ3kucmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGksIGtVVFR5cGVSVEZEKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAocmVhZGVyLnJlYWRSVEZEKGJ1ZmZlci5yZWxlYXNlKCkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgTlNVUkwgKnVybCA9IChOU1VSTCAqKXZhbHVlOwogCi0gICAgICAg
ICAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+aGFzUmljaGx5RWRpdGFibGVTZWxl
Y3Rpb24oKSkgewotICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dChmcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgW3VybCBh
YnNvbHV0ZVN0cmluZ10pOwotICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKKyAgICAgICAgICAgIGlmIChb
dHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICopa1VUVHlwZVJURl0pIHsKKyAgICAgICAg
ICAgICAgICBpZiAoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gc3RyYXRlZ3kucmVhZEJ1
ZmZlckZyb21QYXN0ZWJvYXJkKGksIGtVVFR5cGVSVEYpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChyZWFkZXIucmVhZFJURihidWZmZXIucmVsZWFzZSgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKFt1cmwgaXNGaWxlVVJMXSkgewotICAgICAgICAgICAgICAgIE5TU3RyaW5nICps
b2NhbFBhdGggPSBbdXJsIHJlbGF0aXZlUGF0aF07Ci0gICAgICAgICAgICAgICAgLy8gT25seSBh
bGxvdyB1cmwgYXR0YWNobWVudHMgZnJvbSB+L01lZGlhIGZvciBub3cuCi0gICAgICAgICAgICAg
ICAgaWYgKCFbbG9jYWxQYXRoIGhhc1ByZWZpeDpbKE5TU3RyaW5nICopQ1BTaGFyZWRSZXNvdXJj
ZXNEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIi9NZWRpYS9EQ0lNLyJdXSkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBSZXRhaW5Q
dHI8TlNTdHJpbmc+IGZpbGVUeXBlID0gYWRvcHROUygoTlNTdHJpbmcgKilVVFR5cGVDcmVhdGVQ
cmVmZXJyZWRJZGVudGlmaWVyRm9yVGFnKGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24sIChD
RlN0cmluZ1JlZilbbG9jYWxQYXRoIHBhdGhFeHRlbnNpb25dLCBOVUxMKSk7Ci0gICAgICAgICAg
ICAgICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZGaWxlOmxvY2Fs
UGF0aF07Ci0gICAgICAgICAgICAgICAgaWYgKFVUVHlwZUNvbmZvcm1zVG8oKENGU3RyaW5nUmVm
KWZpbGVUeXBlLmdldCgpLCBrVVRUeXBlUE5HKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGRvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZShmcmFtZSwgQXJjaGl2ZVJlc291cmNl
OjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtbZGF0YSBjb3B5XSBhdXRvcmVsZWFz
ZV0pLCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UucG5nIiksIEAiaW1hZ2UvcG5n
IiwgIiIsICIiKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoVVRUeXBlQ29uZm9ybXNUbygo
Q0ZTdHJpbmdSZWYpZmlsZVR5cGUuZ2V0KCksIGtVVFR5cGVKUEVHKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZShmcmFtZSwgQXJj
aGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtbZGF0YSBjb3B5
XSBhdXRvcmVsZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UuanBnIiks
IEAiaW1hZ2UvanBnIiwgIiIsICIiKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIC8vIENyZWF0ZSBhIGxpbmsgd2l0aCBVUkwgdGV4dC4KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZG9jdW1lbnRGcmFnbWVudFdpdGhMaW5rKGZyYW1lLT5kb2N1bWVudCgpLCBbdXJsIGFi
c29sdXRlU3RyaW5nXSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoW3N1cHBvcnRl
ZEltYWdlVHlwZXMoKSBjb250YWluc09iamVjdDp0eXBlXSkgeworICAgICAgICAgICAgICAgIGlm
IChSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBzdHJhdGVneS5yZWFkQnVmZmVyRnJvbVBh
c3RlYm9hcmQoaSwgdHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRlci5yZWFk
SW1hZ2UoYnVmZmVyLnJlbGVhc2UoKSwgdHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGFsbG93UGxh
aW5UZXh0ICYmIFt0eXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRUeXBlVGV4dF0p
IHsKLSAgICAgICAgICAgIGlkIHZhbHVlID0gW3Bhc3RlYm9hcmRJdGVtLmdldCgpIG9iamVjdEF0
SW5kZXg6MF07Ci0gICAgICAgICAgICBpZiAoIVt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmlu
ZyBjbGFzc11dKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKFt2YWx1ZSBpc0tpbmRPZkNsYXNz
OltOU1N0cmluZyBjbGFzc11dKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAg
ICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRUeXBlVVJMXSkg
eworICAgICAgICAgICAgICAgIFVSTCB1cmwgPSBzdHJhdGVneS5yZWFkVVJMRnJvbVBhc3RlYm9h
cmQoaSwga1VUVHlwZVVSTCk7CisgICAgICAgICAgICAgICAgaWYgKCF1cmwuaXNOdWxsKCkgJiYg
cmVhZGVyLnJlYWRVUkwodXJsLCBTdHJpbmcoKSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoW3R5cGUgaXNF
cXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVUZXh0XSkgeworICAgICAgICAgICAgICAg
IFN0cmluZyBzdHJpbmcgPSBzdHJhdGVneS5yZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoaSwga1VU
VHlwZVRleHQpOworICAgICAgICAgICAgICAgIGlmICghc3RyaW5nLmlzTnVsbCgpICYmIHJlYWRl
ci5yZWFkUGxhaW5UZXh0KHN0cmluZykpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBjaG9zZVBsYWluVGV4dCA9IHRydWU7Ci0gICAgICAg
ICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoZnJhbWUtPnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIChOU1N0cmluZyAqKXZhbHVlKTsKLSAgICAgICAg
ICAgIGlmIChmcmFnbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFz
ZSgpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSogZnJh
bWUsIFBhc3NSZWZQdHI8UmFuZ2U+IC8qY29udGV4dCovLCBib29sIGFsbG93UGxhaW5UZXh0LCBi
b29sJiBjaG9zZVBsYWluVGV4dCkKK05TQXJyYXkqIFBhc3RlYm9hcmQ6OnN1cHBvcnRlZFBhc3Rl
Ym9hcmRUeXBlcygpCiB7Ci0gICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKLQotICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IG51bWJlck9mSXRlbXMgPSBmcmFt
ZS0+ZWRpdG9yKCkuY2xpZW50KCktPmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7Ci0KLSAgICBp
ZiAoIW51bWJlck9mSXRlbXMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gSW4gdGhlIGNv
bW1vbiBjYXNlIHRoZXJlIGlzIGp1c3Qgb25lIGl0ZW0gb24gdGhlIHBhc3RlYm9hcmQsIGF2b2lk
IHRoZSBleHBlbnNlIG9mIHRyYW5zZmVycmluZyB0aGUgY29udGVudCBvZgotICAgIC8vIGZyYWdt
ZW50Rm9yQ3VycmVudEl0ZW0gdG8gdGhlIG1haW4gZnJhZ21lbnQuCi0gICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudEZvclBhc3RlYm9hcmRJdGVt
QXRJbmRleChmcmFtZSwgMCwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKLQotICAg
IGZvciAoaW50IGkgPSAxOyBpIDwgbnVtYmVyT2ZJdGVtczsgaSsrKSB7Ci0gICAgICAgIFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudEZvckN1cnJlbnRJdGVtID0gZG9jdW1lbnRGcmFn
bWVudEZvclBhc3RlYm9hcmRJdGVtQXRJbmRleChmcmFtZSwgaSwgYWxsb3dQbGFpblRleHQsIGNo
b3NlUGxhaW5UZXh0KTsKLSAgICAgICAgaWYgKCFmcmFnbWVudCkKLSAgICAgICAgICAgIGZyYWdt
ZW50ID0gZnJhZ21lbnRGb3JDdXJyZW50SXRlbTsKLSAgICAgICAgZWxzZSBpZiAoZnJhZ21lbnRG
b3JDdXJyZW50SXRlbSAmJiBmcmFnbWVudEZvckN1cnJlbnRJdGVtLT5maXJzdENoaWxkKCkpIHsK
LSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgICAgICBmcmFnbWVudC0+YXBw
ZW5kQ2hpbGQoZnJhZ21lbnRGb3JDdXJyZW50SXRlbS0+Zmlyc3RDaGlsZCgpLCBlYyk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnQpCi0gICAgICAgIHJldHVybiBmcmFnbWVu
dC5yZWxlYXNlKCk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gQFsoaWQpV2ViQXJjaGl2
ZVBib2FyZFR5cGUsIChpZClrVVRUeXBlUE5HLCAoaWQpa1VUVHlwZVRJRkYsIChpZClrVVRUeXBl
SlBFRywgKGlkKWtVVFR5cGVHSUYsIChpZClrVVRUeXBlVVJMLCAoaWQpa1VUVHlwZVRleHQsIChp
ZClrVVRUeXBlUlRGRCwgKGlkKWtVVFR5cGVSVEZdOwogfQogCiBib29sIFBhc3RlYm9hcmQ6Omhh
c0RhdGEoKQogewotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+Z2V0UGFz
dGVib2FyZEl0ZW1zQ291bnQoKSAhPSAwOworICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCkgIT0gMDsK
IH0KIAogc3RhdGljIFN0cmluZyB1dGlUeXBlRnJvbUNvY29hVHlwZShOU1N0cmluZyAqdHlwZSkK
QEAgLTU0MCw3ICszMTMsNyBAQCBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBT
dHJpbmcmIHR5cGUpCiAgICAgICAgICAgICBjb2NvYVZhbHVlID0gWyhOU1N0cmluZyAqKXZhbHVl
IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOzsKICAgICB9IGVsc2UgaWYg
KGNvY29hVHlwZSkgewogICAgICAgICBpZiAoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0g
c3RyYXRlZ3kucmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKDAsIGNvY29hVHlwZS5nZXQoKSkpCi0g
ICAgICAgICAgICBjb2NvYVZhbHVlID0gW1tbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpi
dWZmZXItPmNyZWF0ZU5TRGF0YSgpIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBhdXRv
cmVsZWFzZV07CisgICAgICAgICAgICBjb2NvYVZhbHVlID0gW1tbTlNTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoRGF0YTpidWZmZXItPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGVuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nXSBhdXRvcmVsZWFzZV07CiAgICAgfQogCiAgICAgLy8gRW5mb3JjZSBjaGFu
Z2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBhZnRlciByZWFkaW5nIGlu
c3RlYWQgb2YgYmVmb3JlIHRvIGJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9QbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzOWM4OWZlMTNmNjc4
MGU5OWVlNzc3MWIyYmYxZGY2YjRiYmIyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaApAQCAtMCwwICsxLDUy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPU19oCisjZGVm
aW5lIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9QbGF0Zm9ybVRv
dWNoRXZlbnRJT1MuaD4KKworQGNsYXNzIFdlYkV2ZW50OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFBsYXRmb3JtRXZlbnRGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGxh
dGZvcm1Nb3VzZUV2ZW50IGNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudChXZWJFdmVudCAqKTsKKyAg
ICBzdGF0aWMgUGxhdGZvcm1XaGVlbEV2ZW50IGNyZWF0ZVBsYXRmb3JtV2hlZWxFdmVudChXZWJF
dmVudCAqKTsKKyAgICBzdGF0aWMgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGNyZWF0ZVBsYXRmb3Jt
S2V5Ym9hcmRFdmVudChXZWJFdmVudCAqKTsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAg
IHN0YXRpYyBQbGF0Zm9ybVRvdWNoRXZlbnQgY3JlYXRlUGxhdGZvcm1Ub3VjaEV2ZW50KFdlYkV2
ZW50ICopOworI2VuZGlmCit9OworCitTdHJpbmcga2V5SWRlbnRpZmllckZvcktleUV2ZW50KFdl
YkV2ZW50ICopOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQbGF0Zm9y
bUV2ZW50RmFjdG9yeUlPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTQ5NTFkZTFjNTNmZTQ3
OGJlY2Q4NGUzMTk4NTc4YmMyNTFmZTc1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5tbQpAQCAtMCwwICsxLDI1
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaCIKKwor
I2ltcG9ydCA8Rm91bmRhdGlvbi9OU0dlb21ldHJ5Lmg+CisjaW1wb3J0IDxJbnRQb2ludC5oPgor
I2ltcG9ydCA8S2V5RXZlbnRDb2NvYS5oPgorI2ltcG9ydCA8TG9nZ2luZy5oPgorI2ltcG9ydCA8
V2ViRXZlbnQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdW5zaWduZWQgbW9k
aWZpZXJzRm9yRXZlbnQoV2ViRXZlbnQgKmV2ZW50KQoreworICAgIHVuc2lnbmVkIG1vZGlmaWVy
cyA9IDA7CisKKyAgICBpZiAoZXZlbnQubW9kaWZpZXJGbGFncyAmIFdlYkV2ZW50RmxhZ01hc2tT
aGlmdCkKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OlNoaWZ0S2V5OworICAg
IGlmIChldmVudC5tb2RpZmllckZsYWdzICYgV2ViRXZlbnRGbGFnTWFza0NvbnRyb2wpCisgICAg
ICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpDdHJsS2V5OworICAgIGlmIChldmVudC5t
b2RpZmllckZsYWdzICYgV2ViRXZlbnRGbGFnTWFza0FsdGVybmF0ZSkKKyAgICAgICAgbW9kaWZp
ZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OkFsdEtleTsKKyAgICBpZiAoZXZlbnQubW9kaWZpZXJGbGFn
cyAmIFdlYkV2ZW50RmxhZ01hc2tDb21tYW5kKQorICAgICAgICBtb2RpZmllcnMgfD0gUGxhdGZv
cm1FdmVudDo6TWV0YUtleTsKKworICAgIHJldHVybiBtb2RpZmllcnM7Cit9CisKK3N0YXRpYyBp
bmxpbmUgSW50UG9pbnQgcG9pbnRGb3JFdmVudChXZWJFdmVudCAqZXZlbnQpCit7CisgICAgcmV0
dXJuIEludFBvaW50KGV2ZW50LmxvY2F0aW9uSW5XaW5kb3cpOworfQorCitzdGF0aWMgaW5saW5l
IEludFBvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoV2ViRXZlbnQgKmV2ZW50KQoreworICAgIC8v
IGlPUyBXZWJLaXQgd29ya3MgYXMgaWYgaXQgaXMgZnVsbCBzY3JlZW4uIFRoZXJlZm9yZSBXZWIg
Y29vcmRzIGFyZSBHbG9iYWwgY29vcmRzLgorICAgIHJldHVybiBwb2ludEZvckV2ZW50KGV2ZW50
KTsKK30KKworc3RhdGljIFBsYXRmb3JtRXZlbnQ6OlR5cGUgbW91c2VFdmVudFR5cGUoV2ViRXZl
bnQgKmV2ZW50KQoreworICAgIHN3aXRjaCAoZXZlbnQudHlwZSkgeworICAgIGNhc2UgV2ViRXZl
bnRNb3VzZURvd246CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQ7
CisgICAgY2FzZSBXZWJFdmVudE1vdXNlVXA6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50
OjpNb3VzZVJlbGVhc2VkOworICAgIGNhc2UgV2ViRXZlbnRNb3VzZU1vdmVkOgorICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6Ok1vdXNl
UHJlc3NlZDsKKyAgICB9Cit9CisKK2NsYXNzIFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIgOiBw
dWJsaWMgUGxhdGZvcm1Nb3VzZUV2ZW50IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybU1vdXNlRXZl
bnRCdWlsZGVyKFdlYkV2ZW50ICpldmVudCkKKyAgICB7CisgICAgICAgIG1fdHlwZSA9IG1vdXNl
RXZlbnRUeXBlKGV2ZW50KTsKKyAgICAgICAgbV9tb2RpZmllcnMgPSAwOworICAgICAgICBtX3Rp
bWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisKKyAgICAgICAgbV9wb3NpdGlvbiA9IHBvaW50Rm9y
RXZlbnQoZXZlbnQpOworICAgICAgICBtX2dsb2JhbFBvc2l0aW9uID0gZ2xvYmFsUG9pbnRGb3JF
dmVudChldmVudCk7CisgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsgLy8gVGhpcyBoYXMg
YWx3YXlzIGJlZW4gdGhlIExlZnRCdXR0b24gb24gaU9TLgorICAgICAgICBtX2NsaWNrQ291bnQg
PSAxOyAvLyBUaGlzIGhhcyBhbHdheXMgYmVlbiAxIG9uIGlPUy4KKyAgICB9Cit9OworCitQbGF0
Zm9ybU1vdXNlRXZlbnQgUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VF
dmVudChXZWJFdmVudCAqZXZlbnQpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtTW91c2VFdmVudEJ1
aWxkZXIoZXZlbnQpOworfQorCitjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnRCdWlsZGVyIDogcHVi
bGljIFBsYXRmb3JtV2hlZWxFdmVudCB7CitwdWJsaWM6CisgICAgUGxhdGZvcm1XaGVlbEV2ZW50
QnVpbGRlcihXZWJFdmVudCAqZXZlbnQpCisgICAgeworICAgICAgICBBU1NFUlQoZXZlbnQudHlw
ZSA9PSBXZWJFdmVudFNjcm9sbFdoZWVsKTsKKworICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2
ZW50OjpXaGVlbDsKKyAgICAgICAgbV9tb2RpZmllcnMgPSAwOworICAgICAgICBtX3RpbWVzdGFt
cCA9IGN1cnJlbnRUaW1lKCk7CisKKyAgICAgICAgbV9wb3NpdGlvbiA9IHBvaW50Rm9yRXZlbnQo
ZXZlbnQpOworICAgICAgICBtX2dsb2JhbFBvc2l0aW9uID0gZ2xvYmFsUG9pbnRGb3JFdmVudChl
dmVudCk7CisgICAgICAgIG1fZGVsdGFYID0gZXZlbnQuZGVsdGFYOworICAgICAgICBtX2RlbHRh
WSA9IGV2ZW50LmRlbHRhWTsKKyAgICAgICAgbV9ncmFudWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWxX
aGVlbEV2ZW50OyAvLyBpT1Mgb25seSBzdXBwb3J0cyBjb250aW51b3VzIChwaXhlbC1tb2RlKSBz
Y3JvbGxpbmcuCisgICAgfQorfTsKKworUGxhdGZvcm1XaGVlbEV2ZW50IFBsYXRmb3JtRXZlbnRG
YWN0b3J5OjpjcmVhdGVQbGF0Zm9ybVdoZWVsRXZlbnQoV2ViRXZlbnQgKmV2ZW50KQoreworICAg
IHJldHVybiBQbGF0Zm9ybVdoZWVsRXZlbnRCdWlsZGVyKGV2ZW50KTsKK30KKworU3RyaW5nIGtl
eUlkZW50aWZpZXJGb3JLZXlFdmVudChXZWJFdmVudCAqZXZlbnQpCit7CisgICAgTlNTdHJpbmcg
KnMgPSBldmVudC5jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM7CisgICAgaWYgKFtzIGxlbmd0
aF0gIT0gMSkgeworICAgICAgICBMT0coRXZlbnRzLCAicmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBu
dW1iZXIgb2YgY2hhcmFjdGVycyBpbiBrZXkgZXZlbnQ6ICV1IiwgW3MgbGVuZ3RoXSk7CisgICAg
ICAgIHJldHVybiAiVW5pZGVudGlmaWVkIjsKKyAgICB9CisKKyAgICByZXR1cm4ga2V5SWRlbnRp
ZmllckZvckNoYXJDb2RlKENGU3RyaW5nR2V0Q2hhcmFjdGVyQXRJbmRleCgoQ0ZTdHJpbmdSZWYp
cywgMCkpOworfQorCitjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnRCdWlsZGVyIDogcHVibGlj
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCB7CitwdWJsaWM6CisgICAgUGxhdGZvcm1LZXlib2FyZEV2
ZW50QnVpbGRlcihXZWJFdmVudCAqZXZlbnQpCisgICAgeworICAgICAgICBBU1NFUlQoZXZlbnQu
dHlwZSA9PSBXZWJFdmVudEtleURvd24gfHwgZXZlbnQudHlwZSA9PSBXZWJFdmVudEtleVVwKTsK
KworICAgICAgICBtX3R5cGUgPSAoZXZlbnQudHlwZSA9PSBXZWJFdmVudEtleVVwID8gUGxhdGZv
cm1FdmVudDo6S2V5VXAgOiBQbGF0Zm9ybUV2ZW50OjpLZXlEb3duKTsKKyAgICAgICAgbV9tb2Rp
ZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7CisgICAgICAgIG1fdGltZXN0YW1wID0g
Y3VycmVudFRpbWUoKTsKKworICAgICAgICBtX3RleHQgPSBldmVudC5jaGFyYWN0ZXJzOworICAg
ICAgICBtX3VubW9kaWZpZWRUZXh0ID0gZXZlbnQuY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJz
OworICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9yS2V5RXZlbnQoZXZl
bnQpOworICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7Cisg
ICAgICAgIG1fbWFjQ2hhckNvZGUgPSAwOworICAgICAgICBtX2F1dG9SZXBlYXQgPSBldmVudC5p
c0tleVJlcGVhdGluZzsKKyAgICAgICAgbV9pc0tleXBhZCA9IGZhbHNlOyAvLyBpT1MgZG9lcyBu
b3QgZGlzdGluZ3Vpc2ggdGhlIG51bXBhZC4gU2VlIDxyZGFyOi8vcHJvYmxlbS83MTkwODM1Pi4K
KyAgICAgICAgbV9pc1N5c3RlbUtleSA9IGZhbHNlOworICAgICAgICBtX0V2ZW50ID0gZXZlbnQ7
CisKKyAgICAgICAgLy8gQWx3YXlzIHVzZSAxMyBmb3IgRW50ZXIvUmV0dXJuIC0tIHdlIGRvbid0
IHdhbnQgdG8gdXNlIEFwcEtpdCdzIGRpZmZlcmVudCBjaGFyYWN0ZXIgZm9yIEVudGVyLgorICAg
ICAgICBpZiAobV93aW5kb3dzVmlydHVhbEtleUNvZGUgPT0gJ1xyJykgeworICAgICAgICAgICAg
bV90ZXh0ID0gIlxyIjsKKyAgICAgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHIiOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gVGhlIGFkanVzdG1lbnRzIGJlbG93IGFyZSBvbmx5IG5lZWRl
ZCBpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUsIGJ1dCB3ZSBjYW5ub3QgdGVsbCB3aGF0
IG1vZGUgd2UgYXJlIGluIGZyb20gaGVyZS4KKworICAgICAgICAvLyBUdXJuIDB4N0YgaW50byA4
LCBiZWNhdXNlIGJhY2tzcGFjZSBuZWVkcyB0byBhbHdheXMgYmUgOC4KKyAgICAgICAgaWYgKG1f
dGV4dCA9PSAiXHg3RiIpCisgICAgICAgICAgICBtX3RleHQgPSAiXHg4IjsKKyAgICAgICAgaWYg
KG1fdW5tb2RpZmllZFRleHQgPT0gIlx4N0YiKQorICAgICAgICAgICAgbV91bm1vZGlmaWVkVGV4
dCA9ICJceDgiOworICAgICAgICAvLyBBbHdheXMgdXNlIDkgZm9yIHRhYiAtLSB3ZSBkb24ndCB3
YW50IHRvIHVzZSBBcHBLaXQncyBkaWZmZXJlbnQgY2hhcmFjdGVyIGZvciBzaGlmdC10YWIuCisg
ICAgICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9PSA5KSB7CisgICAgICAgICAgICBt
X3RleHQgPSAiXHg5IjsKKyAgICAgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHg5IjsKKyAg
ICAgICAgfQorICAgIH0KK307CisKK1BsYXRmb3JtS2V5Ym9hcmRFdmVudCBQbGF0Zm9ybUV2ZW50
RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1LZXlib2FyZEV2ZW50KFdlYkV2ZW50ICpldmVudCkKK3sK
KyAgICByZXR1cm4gUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlcihldmVudCk7Cit9CisKKyNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorc3RhdGljIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQ
aGFzZVR5cGUgY29udmVydFRvdWNoUGhhc2UoTlNOdW1iZXIgKnRvdWNoUGhhc2VOdW1iZXIpCit7
CisgICAgV2ViRXZlbnRUb3VjaFBoYXNlVHlwZSB0b3VjaFBoYXNlID0gc3RhdGljX2Nhc3Q8V2Vi
RXZlbnRUb3VjaFBoYXNlVHlwZT4oW3RvdWNoUGhhc2VOdW1iZXIgdW5zaWduZWRJbnRWYWx1ZV0p
OworICAgIHN3aXRjaCAodG91Y2hQaGFzZSkgeworICAgIGNhc2UgV2ViRXZlbnRUb3VjaFBoYXNl
QmVnYW46CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUGhhc2VCZWdh
bjsKKyAgICBjYXNlIFdlYkV2ZW50VG91Y2hQaGFzZU1vdmVkOgorICAgICAgICByZXR1cm4gUGxh
dGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlTW92ZWQ7CisgICAgY2FzZSBXZWJFdmVudFRvdWNo
UGhhc2VTdGF0aW9uYXJ5OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3Vj
aFBoYXNlU3RhdGlvbmFyeTsKKyAgICBjYXNlIFdlYkV2ZW50VG91Y2hQaGFzZUVuZGVkOgorICAg
ICAgICByZXR1cm4gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlRW5kZWQ7CisgICAgY2Fz
ZSBXZWJFdmVudFRvdWNoUGhhc2VDYW5jZWxsZWQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVRv
dWNoUG9pbnQ6OlRvdWNoUGhhc2VDYW5jZWxsZWQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBQbGF0Zm9ybVRvdWNoUG9pbnQ6
OlRvdWNoUGhhc2VCZWdhbjsKK30KKworc3RhdGljIFBsYXRmb3JtRXZlbnQ6OlR5cGUgdG91Y2hF
dmVudFR5cGUoV2ViRXZlbnQgKmV2ZW50KQoreworICAgIHN3aXRjaCAoZXZlbnQudHlwZSkgewor
ICAgIGNhc2UgV2ViRXZlbnRUb3VjaEJlZ2luOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVu
dDo6VG91Y2hTdGFydDsKKyAgICBjYXNlIFdlYkV2ZW50VG91Y2hFbmQ6CisgICAgICAgIHJldHVy
biBQbGF0Zm9ybUV2ZW50OjpUb3VjaEVuZDsKKyAgICBjYXNlIFdlYkV2ZW50VG91Y2hDYW5jZWw6
CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpUb3VjaENhbmNlbDsKKyAgICBjYXNlIFdl
YkV2ZW50VG91Y2hDaGFuZ2U6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpUb3VjaE1v
dmU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBQbGF0Zm9ybUV2ZW50OjpUb3VjaENhbmNlbDsKKyAgICB9Cit9CisKK2NsYXNzIFBs
YXRmb3JtVG91Y2hQb2ludEJ1aWxkZXIgOiBwdWJsaWMgUGxhdGZvcm1Ub3VjaFBvaW50IHsKK3B1
YmxpYzoKKyAgICBQbGF0Zm9ybVRvdWNoUG9pbnRCdWlsZGVyKHVuc2lnbmVkIGlkZW50aWZpZXIs
IGNvbnN0IEludFBvaW50JiBsb2NhdGlvbiwgVG91Y2hQaGFzZVR5cGUgcGhhc2UpCisgICAgICAg
IDogUGxhdGZvcm1Ub3VjaFBvaW50KGlkZW50aWZpZXIsIGxvY2F0aW9uLCBwaGFzZSkKKyAgICB7
CisgICAgfQorfTsKKworY2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50QnVpbGRlciA6IHB1YmxpYyBQ
bGF0Zm9ybVRvdWNoRXZlbnQgeworcHVibGljOgorICAgIFBsYXRmb3JtVG91Y2hFdmVudEJ1aWxk
ZXIoV2ViRXZlbnQgKmV2ZW50KQorICAgIHsKKyAgICAgICAgbV90eXBlID0gdG91Y2hFdmVudFR5
cGUoZXZlbnQpOworICAgICAgICBtX21vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50
KTsKKyAgICAgICAgbV90aW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOworCisgICAgICAgIG1fZ2Vz
dHVyZVNjYWxlID0gZXZlbnQuZ2VzdHVyZVNjYWxlOworICAgICAgICBtX2dlc3R1cmVSb3RhdGlv
biA9IGV2ZW50Lmdlc3R1cmVSb3RhdGlvbjsKKyAgICAgICAgbV9pc0dlc3R1cmUgPSBldmVudC5p
c0dlc3R1cmU7CisgICAgICAgIG1fcG9zaXRpb24gPSBwb2ludEZvckV2ZW50KGV2ZW50KTsKKyAg
ICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IGdsb2JhbFBvaW50Rm9yRXZlbnQoZXZlbnQpOworCisg
ICAgICAgIHVuc2lnbmVkIHRvdWNoQ291bnQgPSBldmVudC50b3VjaENvdW50OworICAgICAgICBt
X3RvdWNoUG9pbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodG91Y2hDb3VudCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3VjaENvdW50OyArK2kpIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGlkZW50aWZpZXIgPSBbKE5TTnVtYmVyICopW2V2ZW50LnRvdWNoSWRlbnRpZmll
cnMgb2JqZWN0QXRJbmRleDppXSB1bnNpZ25lZEludFZhbHVlXTsKKyAgICAgICAgICAgIEludFBv
aW50IGxvY2F0aW9uID0gSW50UG9pbnQoWyhOU1ZhbHVlICopW2V2ZW50LnRvdWNoTG9jYXRpb25z
IG9iamVjdEF0SW5kZXg6aV0gcG9pbnRWYWx1ZV0pOworICAgICAgICAgICAgUGxhdGZvcm1Ub3Vj
aFBvaW50OjpUb3VjaFBoYXNlVHlwZSB0b3VjaFBoYXNlID0gY29udmVydFRvdWNoUGhhc2UoW2V2
ZW50LnRvdWNoUGhhc2VzIG9iamVjdEF0SW5kZXg6aV0pOworICAgICAgICAgICAgbV90b3VjaFBv
aW50cy51bmNoZWNrZWRBcHBlbmQoUGxhdGZvcm1Ub3VjaFBvaW50QnVpbGRlcihpZGVudGlmaWVy
LCBsb2NhdGlvbiwgdG91Y2hQaGFzZSkpOworICAgICAgICB9CisgICAgfQorfTsKKworUGxhdGZv
cm1Ub3VjaEV2ZW50IFBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybVRvdWNoRXZl
bnQoV2ViRXZlbnQgKmV2ZW50KQoreworICAgIHJldHVybiBQbGF0Zm9ybVRvdWNoRXZlbnRCdWls
ZGVyKGV2ZW50KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
UGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bs
YXRmb3JtUGFzdGVib2FyZElPUy5tbQppbmRleCAzMjBlYTUwNDk4ODUxNGU3N2U5MmFkYmExODVi
ODFiYzk4ZjAzZGQyLi5lODM1YTUyMDljNWE5MDk1MWY3MzliNGUyYTljOGVhMzBmZDMzN2Y1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJk
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9h
cmRJT1MubW0KQEAgLTI0LDEwICsyNCwxMyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiUGxhdGZvcm1QYXN0ZWJvYXJkLmgiCisKICNpbXBvcnQgIkNvbG9yLmgiCiAjaW1w
b3J0ICJVUkwuaCIKICNpbXBvcnQgIkltYWdlLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybVBhc3RlYm9h
cmQuaCIKKyNpbXBvcnQgIlBhc3RlYm9hcmQuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgog
I2ltcG9ydCAiU29mdExpbmtpbmcuaCIKIAogU09GVF9MSU5LX0ZSQU1FV09SSyhVSUtpdCkKQEAg
LTE1MiwxMiArMTU1LDEyIEBAIHZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQ
YXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkKICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5
PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdF0pOwogCiAgICAgaWYgKGNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCkKLSAgICAg
ICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTooTlNEYXRhICopY29udGVudC5kYXRhSW5XZWJB
cmNoaXZlRm9ybWF0LT5jcmVhdGVOU0RhdGEoKSBmb3JLZXk6V2ViQXJjaGl2ZVBib2FyZFR5cGVd
OworICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOihOU0RhdGEgKiljb250ZW50LmRh
dGFJbldlYkFyY2hpdmVGb3JtYXQtPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGZvcktleTpXZWJBcmNo
aXZlUGJvYXJkVHlwZV07CiAKICAgICBpZiAoY29udGVudC5kYXRhSW5SVEZERm9ybWF0KQotICAg
ICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmNvbnRlbnQuZGF0YUluUlRGREZvcm1hdC0+
Y3JlYXRlTlNEYXRhKCkgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVSVEZEXTsKKyAgICAgICAg
W3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTpjb250ZW50LmRhdGFJblJURkRGb3JtYXQtPmNyZWF0
ZU5TRGF0YSgpLmdldCgpIGZvcktleTooTlNTdHJpbmcgKilrVVRUeXBlUlRGRF07CiAgICAgaWYg
KGNvbnRlbnQuZGF0YUluUlRGRm9ybWF0KQotICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZh
bHVlOmNvbnRlbnQuZGF0YUluUlRGRm9ybWF0LT5jcmVhdGVOU0RhdGEoKSBmb3JLZXk6KE5TU3Ry
aW5nICopa1VUVHlwZVJURl07CisgICAgICAgIFtyZXByZXNlbnRhdGlvbnMgc2V0VmFsdWU6Y29u
dGVudC5kYXRhSW5SVEZGb3JtYXQtPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGZvcktleTooTlNTdHJp
bmcgKilrVVRUeXBlUlRGXTsKICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmNvbnRlbnQu
ZGF0YUluU3RyaW5nRm9ybWF0IGZvcktleTooTlNTdHJpbmcgKilrVVRUeXBlVGV4dF07CiAgICAg
W21fcGFzdGVib2FyZCBzZXRJdGVtczpAW3JlcHJlc2VudGF0aW9ucy5nZXQoKV1dOwogfQpAQCAt
MTY2LDcgKzE2OSw3IEBAIHZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0
ZWJvYXJkSW1hZ2UmIHBhc3RlYm9hcmRJbWFnZSkKIHsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
RGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25h
cnkgYWxsb2NdIGluaXRdKTsKICAgICBpZiAoIXBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZU1JTUVU
eXBlLmlzTnVsbCgpKSB7Ci0gICAgICAgIFtyZXByZXNlbnRhdGlvbnMgc2V0T2JqZWN0OnBhc3Rl
Ym9hcmRJbWFnZS5pbWFnZS0+ZGF0YSgpLT5jcmVhdGVOU0RhdGEoKSBmb3JLZXk6cGFzdGVib2Fy
ZEltYWdlLnJlc291cmNlTUlNRVR5cGVdOworICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldE9i
amVjdDpwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2UtPmRhdGEoKS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkg
Zm9yS2V5OnBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZU1JTUVUeXBlXTsKICAgICAgICAgW3JlcHJl
c2VudGF0aW9ucyBzZXRPYmplY3Q6KE5TU3RyaW5nICopcGFzdGVib2FyZEltYWdlLnVybC51cmwg
Zm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdOwogICAgIH0KICAgICBbbV9wYXN0ZWJvYXJk
IHNldEl0ZW1zOkBbcmVwcmVzZW50YXRpb25zLmdldCgpXV07CkBAIC0xNzcsNyArMTgwLDcgQEAg
dm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXBy
ZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0p
OwogCiAgICAgaWYgKHBhc3RlYm9hcmRUeXBlID09IFN0cmluZyhrVVRUeXBlVVJMKSkKLSAgICAg
ICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTpbYWRvcHROUyhbTlNVUkwgYWxsb2NdIGluaXRX
aXRoU3RyaW5nOnRleHRdKS5nZXQoKSBmb3JLZXk6cGFzdGVib2FyZFR5cGVdOworICAgICAgICBb
cmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmFkb3B0TlMoW1tOU1VSTCBhbGxvY10gaW5pdFdpdGhT
dHJpbmc6dGV4dF0pLmdldCgpIGZvcktleTpwYXN0ZWJvYXJkVHlwZV07CiAgICAgZWxzZSBpZiAo
IXBhc3RlYm9hcmRUeXBlLmlzTnVsbCgpKQogICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZh
bHVlOnRleHQgZm9yS2V5OnBhc3RlYm9hcmRUeXBlXTsKICAgICBbbV9wYXN0ZWJvYXJkIHNldEl0
ZW1zOkBbcmVwcmVzZW50YXRpb25zLmdldCgpXV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TY3JlZW5JT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvUGxhdGZvcm1TY3JlZW5JT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmJmMjIxMGJjYTZlMDFk
OTY5NTdmMjVhNDI0ZWIxM2EzNjdlNzZlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVNjcmVlbklPUy5tbQpAQCAtMCwwICsxLDkyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxhdGZvcm1T
Y3JlZW4uaCIKKworI2ltcG9ydCAiRmxvYXRSZWN0LmgiCisjaW1wb3J0ICJGcmFtZVZpZXcuaCIK
KyNpbXBvcnQgIkludFJlY3QuaCIKKyNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCisjaW1wb3J0
ICJXQUtXaW5kb3cuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBv
cnQgIldpZGdldC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2ludCBzY3JlZW5Ib3Jpem9u
dGFsRFBJKFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworaW50IHNjcmVlblZlcnRpY2FsRFBJKFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHNjcmVlbkRlcHRoKFdpZGdldCopCit7Cisg
ICAgLy8gQXNzdW1lIDMyIGJpdHMgcGVyIHBpeGVsLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzkzNzg4
Mjk+LgorICAgIHJldHVybiAzMjsKK30KKworaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdp
ZGdldCopCit7CisgICAgLy8gQXNzdW1lIHRoZSBzY3JlZW4gZGVwdGggaXMgZXZlbmx5IGRpdmlk
ZWQgaW50byBmb3VyIGNvbG9yIGNvbXBvbmVudHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vOTM3ODgy
OT4uCisgICAgcmV0dXJuIHNjcmVlbkRlcHRoKDApIC8gNDsKK30KKworYm9vbCBzY3JlZW5Jc01v
bm9jaHJvbWUoV2lkZ2V0KikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoZXNlIGZ1
bmN0aW9ucyBzY2FsZSBiZXR3ZWVuIHNjcmVlbiBhbmQgcGFnZSBjb29yZGluYXRlcyBiZWNhdXNl
IEphdmFTY3JpcHQvRE9NIG9wZXJhdGlvbnMgCisvLyBhc3N1bWUgdGhhdCB0aGUgc2NyZWVuIGFu
ZCB0aGUgcGFnZSBzaGFyZSB0aGUgc2FtZSBjb29yZGluYXRlIHN5c3RlbS4KK0Zsb2F0UmVjdCBz
Y3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQoreworICAgIGlmICghd2lkZ2V0KQorICAgICAgICBy
ZXR1cm4gQ0dSZWN0WmVybzsKKyAgICBXQUtXaW5kb3cgKndpbmRvdyA9IFt3aWRnZXQtPnBsYXRm
b3JtV2lkZ2V0KCkgd2luZG93XTsKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuIFt3
aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgZnJhbWVdOworICAgIENHUmVjdCBzY3JlZW5SZWN0ID0g
eyBDR1BvaW50WmVybywgW3dpbmRvdyBzY3JlZW5TaXplXSB9OworICAgIHJldHVybiBlbmNsb3Np
bmdJbnRSZWN0KHNjcmVlblJlY3QpOworfQorCitGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVj
dChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAoIXdpZGdldCkKKyAgICAgICAgcmV0dXJuIENH
UmVjdFplcm87CisgICAgV0FLV2luZG93ICp3aW5kb3cgPSBbd2lkZ2V0LT5wbGF0Zm9ybVdpZGdl
dCgpIHdpbmRvd107CisgICAgaWYgKCF3aW5kb3cpCisgICAgICAgIHJldHVybiBDR1JlY3RaZXJv
OworICAgIENHUmVjdCBzY3JlZW5SZWN0ID0geyBDR1BvaW50WmVybywgW3dpbmRvdyBhdmFpbGFi
bGVTY3JlZW5TaXplXSB9OworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHNjcmVlblJlY3Qp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcklPUy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjI2NDA1ZTc2NzZjMWRhZDdlOTNiYjcwZGQ2ODVjNmMxNzgyMzBlZGUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXplcklPUy5tbQpAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuaCIK
KworI2lmIFBMQVRGT1JNKElPUykKKworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCisj
aW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgiCisjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIK
KyNpbmNsdWRlIDxBVkZvdW5kYXRpb24vQVZTcGVlY2hTeW50aGVzaXMuaD4KKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisKK1NPRlRfTElOS19GUkFNRVdPUksoQVZGb3VuZGF0aW9uKQorU09G
VF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZTcGVlY2hTeW50aGVzaXplcikKK1NPRlRfTElO
S19DTEFTUyhBVkZvdW5kYXRpb24sIEFWU3BlZWNoVXR0ZXJhbmNlKQorU09GVF9MSU5LX0NMQVNT
KEFWRm91bmRhdGlvbiwgQVZTcGVlY2hTeW50aGVzaXNWb2ljZSkKKworU09GVF9MSU5LX0NPTlNU
QU5UKEFWRm91bmRhdGlvbiwgQVZTcGVlY2hVdHRlcmFuY2VEZWZhdWx0U3BlZWNoUmF0ZSwgZmxv
YXQpCitTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVlNwZWVjaFV0dGVyYW5jZU1h
eGltdW1TcGVlY2hSYXRlLCBmbG9hdCkKKworI2RlZmluZSBBVlNwZWVjaFV0dGVyYW5jZURlZmF1
bHRTcGVlY2hSYXRlIGdldEFWU3BlZWNoVXR0ZXJhbmNlRGVmYXVsdFNwZWVjaFJhdGUoKQorI2Rl
ZmluZSBBVlNwZWVjaFV0dGVyYW5jZU1heGltdW1TcGVlY2hSYXRlIGdldEFWU3BlZWNoVXR0ZXJh
bmNlTWF4aW11bVNwZWVjaFJhdGUoKQorCisjZGVmaW5lIEFWU3BlZWNoU3ludGhlc2l6ZXJDbGFz
cyBnZXRBVlNwZWVjaFN5bnRoZXNpemVyQ2xhc3MoKQorI2RlZmluZSBBVlNwZWVjaFV0dGVyYW5j
ZUNsYXNzIGdldEFWU3BlZWNoVXR0ZXJhbmNlQ2xhc3MoKQorI2RlZmluZSBBVlNwZWVjaFN5bnRo
ZXNpc1ZvaWNlQ2xhc3MgZ2V0QVZTcGVlY2hTeW50aGVzaXNWb2ljZUNsYXNzKCkKKworQGludGVy
ZmFjZSBXZWJTcGVlY2hTeW50aGVzaXNXcmFwcGVyIDogTlNPYmplY3Q8QVZTcGVlY2hTeW50aGVz
aXplckRlbGVnYXRlPgoreworICAgIFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIq
IG1fc3ludGhlc2l6ZXJPYmplY3Q7CisgICAgLy8gSG9sZCBhIFJlZiB0byB0aGUgdXR0ZXJhbmNl
IHNvIHRoYXQgaXQgd29uJ3QgZGlzYXBwZWFyIHVudGlsIHRoZSBzeW50aCBpcyBkb25lIHdpdGgg
aXQuCisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNl
PiBtX3V0dGVyYW5jZTsKKyAgICAKKyAgICBSZXRhaW5QdHI8QVZTcGVlY2hTeW50aGVzaXplcj4g
bV9zeW50aGVzaXplcjsKK30KKworLSAoV2ViU3BlZWNoU3ludGhlc2lzV3JhcHBlciAqKWluaXRX
aXRoU3BlZWNoU3ludGhlc2l6ZXI6KFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIq
KXN5bnRoZXNpemVyOworLSAodm9pZClzcGVha1V0dGVyYW5jZTooUGFzc1JlZlB0cjxXZWJDb3Jl
OjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZT4pdXR0ZXJhbmNlOworCitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBXZWJTcGVlY2hTeW50aGVzaXNXcmFwcGVyCisKKy0gKFdlYlNwZWVj
aFN5bnRoZXNpc1dyYXBwZXIgKilpbml0V2l0aFNwZWVjaFN5bnRoZXNpemVyOihXZWJDb3JlOjpQ
bGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyKilzeW50aGVzaXplcgoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIG1fc3ludGhl
c2l6ZXJPYmplY3QgPSBzeW50aGVzaXplcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoZmxv
YXQpbWFwU3BlZWNoUmF0ZVRvUGxhdGZvcm1SYXRlOihmbG9hdClyYXRlCit7CisgICAgLy8gV2Vi
U3BlZWNoIHNheXMgdG8gZ28gZnJvbSAuMSAtPiAxMCAoZGVmYXVsdCAxKQorICAgIC8vIEFWU3Bl
ZWNoU3ludGhlc2l6ZXIgYXNrcyBmb3IgMCAtPiAxIChkZWZhdWx0LiA1KQorICAgIGlmIChyYXRl
IDwgMSkKKyAgICAgICAgcmF0ZSAqPSBBVlNwZWVjaFV0dGVyYW5jZURlZmF1bHRTcGVlY2hSYXRl
OworICAgIGVsc2UKKyAgICAgICAgcmF0ZSA9IEFWU3BlZWNoVXR0ZXJhbmNlRGVmYXVsdFNwZWVj
aFJhdGUgKyAoKHJhdGUgLSAxKSAqIChBVlNwZWVjaFV0dGVyYW5jZU1heGltdW1TcGVlY2hSYXRl
IC0gQVZTcGVlY2hVdHRlcmFuY2VEZWZhdWx0U3BlZWNoUmF0ZSkpOworICAgIAorICAgIHJldHVy
biByYXRlOworfQorCistICh2b2lkKXNwZWFrVXR0ZXJhbmNlOihQYXNzUmVmUHRyPFdlYkNvcmU6
OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPil1dHRlcmFuY2UKK3sKKyAgICAvLyBX
aGVuIHNwZWFrIGlzIGNhbGxlZCB3ZSBzaG91bGQgbm90IGhhdmUgYW4gZXhpc3Rpbmcgc3BlZWNo
IHV0dGVyYW5jZSBvdXRzdGFuZGluZy4KKyAgICBBU1NFUlQoIW1fdXR0ZXJhbmNlKTsKKyAgICBB
U1NFUlQodXR0ZXJhbmNlKTsKKyAgICAKKyAgICBpZiAoIXV0dGVyYW5jZSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGlmICghbV9zeW50aGVzaXplcikgeworICAgICAgICBtX3N5bnRoZXNp
emVyID0gYWRvcHROUyhbW0FWU3BlZWNoU3ludGhlc2l6ZXJDbGFzcyBhbGxvY10gaW5pdF0pOwor
ICAgICAgICBbbV9zeW50aGVzaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICB9CisKKyAgICAv
LyBDaG9vc2UgdGhlIGJlc3Qgdm9pY2UsIGJ5IGZpcnN0IGxvb2tpbmcgYXQgdGhlIHV0dGVyYW5j
ZSB2b2ljZSwgdGhlbiB0aGUgdXR0ZXJhbmNlIGxhbmd1YWdlLAorICAgIC8vIHRoZW4gY2hvb3Nl
IHRoZSBkZWZhdWx0IGxhbmd1YWdlLgorICAgIFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhl
c2lzVm9pY2UqIHV0dGVyYW5jZVZvaWNlID0gdXR0ZXJhbmNlLT52b2ljZSgpOworICAgIE5TU3Ry
aW5nICp2b2ljZUxhbmd1YWdlID0gbmlsOworICAgIGlmICghdXR0ZXJhbmNlVm9pY2UpIHsKKyAg
ICAgICAgaWYgKHV0dGVyYW5jZS0+bGFuZygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHZvaWNl
TGFuZ3VhZ2UgPSBbQVZTcGVlY2hTeW50aGVzaXNWb2ljZUNsYXNzIGN1cnJlbnRMYW5ndWFnZUNv
ZGVdOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2b2ljZUxhbmd1YWdlID0gdXR0ZXJhbmNl
LT5sYW5nKCk7CisgICAgfSBlbHNlCisgICAgICAgIHZvaWNlTGFuZ3VhZ2UgPSB1dHRlcmFuY2Ut
PnZvaWNlKCktPmxhbmcoKTsKKyAgICAKKyAgICBBVlNwZWVjaFN5bnRoZXNpc1ZvaWNlICphdlZv
aWNlID0gbmlsOworICAgIGlmICh2b2ljZUxhbmd1YWdlKQorICAgICAgICBhdlZvaWNlID0gW0FW
U3BlZWNoU3ludGhlc2lzVm9pY2VDbGFzcyB2b2ljZVdpdGhMYW5ndWFnZTp2b2ljZUxhbmd1YWdl
XTsKKworICAgIEFWU3BlZWNoVXR0ZXJhbmNlICphdlV0dGVyYW5jZSA9IFtBVlNwZWVjaFV0dGVy
YW5jZUNsYXNzIHNwZWVjaFV0dGVyYW5jZVdpdGhTdHJpbmc6dXR0ZXJhbmNlLT50ZXh0KCldOwor
CisgICAgW2F2VXR0ZXJhbmNlIHNldFJhdGU6W3NlbGYgbWFwU3BlZWNoUmF0ZVRvUGxhdGZvcm1S
YXRlOnV0dGVyYW5jZS0+cmF0ZSgpXV07CisgICAgW2F2VXR0ZXJhbmNlIHNldFZvbHVtZTp1dHRl
cmFuY2UtPnZvbHVtZSgpXTsKKyAgICBbYXZVdHRlcmFuY2Ugc2V0UGl0Y2hNdWx0aXBsaWVyOnV0
dGVyYW5jZS0+cGl0Y2goKV07CisgICAgW2F2VXR0ZXJhbmNlIHNldFZvaWNlOmF2Vm9pY2VdOwor
ICAgIG1fdXR0ZXJhbmNlID0gdXR0ZXJhbmNlOworICAgIAorICAgIFttX3N5bnRoZXNpemVyIHNw
ZWFrVXR0ZXJhbmNlOmF2VXR0ZXJhbmNlXTsKK30KKworLSAodm9pZClwYXVzZQoreworICAgIGlm
ICghbV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBbbV9zeW50aGVzaXpl
ciBwYXVzZVNwZWFraW5nQXRCb3VuZGFyeTpBVlNwZWVjaEJvdW5kYXJ5SW1tZWRpYXRlXTsKK30K
KworLSAodm9pZClyZXN1bWUKK3sKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgW21fc3ludGhlc2l6ZXIgY29udGludWVTcGVha2luZ107Cit9CisKKy0g
KHZvaWQpY2FuY2VsCit7CisgICAgaWYgKCFtX3V0dGVyYW5jZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFttX3N5bnRoZXNpemVyIHN0b3BTcGVha2luZ0F0Qm91bmRhcnk6QVZTcGVlY2hC
b3VuZGFyeUltbWVkaWF0ZV07Cit9CisKKy0gKHZvaWQpc3BlZWNoU3ludGhlc2l6ZXI6KEFWU3Bl
ZWNoU3ludGhlc2l6ZXIgKilzeW50aGVzaXplciBkaWRTdGFydFNwZWVjaFV0dGVyYW5jZTooQVZT
cGVlY2hVdHRlcmFuY2UgKil1dHRlcmFuY2UKK3sKKyAgICBVTlVTRURfUEFSQU0oc3ludGhlc2l6
ZXIpOworICAgIFVOVVNFRF9QQVJBTSh1dHRlcmFuY2UpOworICAgIGlmICghbV91dHRlcmFuY2Up
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX3N5bnRoZXNpemVyT2JqZWN0LT5jbGllbnQo
KS0+ZGlkU3RhcnRTcGVha2luZyhtX3V0dGVyYW5jZSk7Cit9CisKKy0gKHZvaWQpc3BlZWNoU3lu
dGhlc2l6ZXI6KEFWU3BlZWNoU3ludGhlc2l6ZXIgKilzeW50aGVzaXplciBkaWRGaW5pc2hTcGVl
Y2hVdHRlcmFuY2U6KEFWU3BlZWNoVXR0ZXJhbmNlICopdXR0ZXJhbmNlCit7CisgICAgVU5VU0VE
X1BBUkFNKHN5bnRoZXNpemVyKTsKKyAgICBVTlVTRURfUEFSQU0odXR0ZXJhbmNlKTsKKyAgICBp
ZiAoIW1fdXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ2xlYXIgdGhl
IG1fdXR0ZXJhbmNlIHZhcmlhYmxlIGluIGNhc2UgZmluaXNoIHNwZWFraW5nIGtpY2tzIG9mZiBh
IG5ldyBzcGVha2luZyBqb2IgaW1tZWRpYXRlbHkuCisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRm
b3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPiBwbGF0Zm9ybVV0dGVyYW5jZSA9IG1fdXR0ZXJh
bmNlOworICAgIG1fdXR0ZXJhbmNlID0gMDsKKyAgICAKKyAgICBtX3N5bnRoZXNpemVyT2JqZWN0
LT5jbGllbnQoKS0+ZGlkRmluaXNoU3BlYWtpbmcocGxhdGZvcm1VdHRlcmFuY2UpOworfQorCist
ICh2b2lkKXNwZWVjaFN5bnRoZXNpemVyOihBVlNwZWVjaFN5bnRoZXNpemVyICopc3ludGhlc2l6
ZXIgZGlkUGF1c2VTcGVlY2hVdHRlcmFuY2U6KEFWU3BlZWNoVXR0ZXJhbmNlICopdXR0ZXJhbmNl
Cit7CisgICAgVU5VU0VEX1BBUkFNKHN5bnRoZXNpemVyKTsKKyAgICBVTlVTRURfUEFSQU0odXR0
ZXJhbmNlKTsKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgbV9zeW50aGVzaXplck9iamVjdC0+Y2xpZW50KCktPmRpZFBhdXNlU3BlYWtpbmcobV91dHRl
cmFuY2UpOworfQorCistICh2b2lkKXNwZWVjaFN5bnRoZXNpemVyOihBVlNwZWVjaFN5bnRoZXNp
emVyICopc3ludGhlc2l6ZXIgZGlkQ29udGludWVTcGVlY2hVdHRlcmFuY2U6KEFWU3BlZWNoVXR0
ZXJhbmNlICopdXR0ZXJhbmNlCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bnRoZXNpemVyKTsKKyAg
ICBVTlVTRURfUEFSQU0odXR0ZXJhbmNlKTsKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgbV9zeW50aGVzaXplck9iamVjdC0+Y2xpZW50KCktPmRpZFJl
c3VtZVNwZWFraW5nKG1fdXR0ZXJhbmNlKTsKK30KKworLSAodm9pZClzcGVlY2hTeW50aGVzaXpl
cjooQVZTcGVlY2hTeW50aGVzaXplciAqKXN5bnRoZXNpemVyIGRpZENhbmNlbFNwZWVjaFV0dGVy
YW5jZTooQVZTcGVlY2hVdHRlcmFuY2UgKil1dHRlcmFuY2UKK3sKKyAgICBVTlVTRURfUEFSQU0o
c3ludGhlc2l6ZXIpOworICAgIFVOVVNFRF9QQVJBTSh1dHRlcmFuY2UpOworICAgIGlmICghbV91
dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBDbGVhciB0aGUgbV91dHRl
cmFuY2UgdmFyaWFibGUgaW4gY2FzZSBmaW5pc2ggc3BlYWtpbmcga2lja3Mgb2ZmIGEgbmV3IHNw
ZWFraW5nIGpvYiBpbW1lZGlhdGVseS4KKyAgICBSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXNVdHRlcmFuY2U+IHBsYXRmb3JtVXR0ZXJhbmNlID0gbV91dHRlcmFuY2U7Cisg
ICAgbV91dHRlcmFuY2UgPSAwOworICAgIAorICAgIG1fc3ludGhlc2l6ZXJPYmplY3QtPmNsaWVu
dCgpLT5kaWRGaW5pc2hTcGVha2luZyhwbGF0Zm9ybVV0dGVyYW5jZSk7Cit9CisKKy0gKHZvaWQp
c3BlZWNoU3ludGhlc2l6ZXI6KEFWU3BlZWNoU3ludGhlc2l6ZXIgKilzeW50aGVzaXplciB3aWxs
U3BlYWtSYW5nZU9mU3BlZWNoU3RyaW5nOihOU1JhbmdlKWNoYXJhY3RlclJhbmdlIHV0dGVyYW5j
ZTooQVZTcGVlY2hVdHRlcmFuY2UgKil1dHRlcmFuY2UKK3sKKyAgICBVTlVTRURfUEFSQU0oc3lu
dGhlc2l6ZXIpOworICAgIFVOVVNFRF9QQVJBTSh1dHRlcmFuY2UpOworICAgIAorICAgIGlmICgh
bV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBpT1Mgb25seSBzdXBw
b3J0cyB3b3JkIGJvdW5kYXJpZXMuCisgICAgbV9zeW50aGVzaXplck9iamVjdC0+Y2xpZW50KCkt
PmJvdW5kYXJ5RXZlbnRPY2N1cnJlZChtX3V0dGVyYW5jZSwgV2ViQ29yZTo6U3BlZWNoV29yZEJv
dW5kYXJ5LCBjaGFyYWN0ZXJSYW5nZS5sb2NhdGlvbik7Cit9CisKK0BlbmQKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpQbGF0Zm9ybVNwZWVjaFN5
bnRoZXNpemVyKFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJDbGllbnQqIGNsaWVudCkKKyAgICA6
IG1fc3BlZWNoU3ludGhlc2l6ZXJDbGllbnQoY2xpZW50KQoreworfQorCitQbGF0Zm9ybVNwZWVj
aFN5bnRoZXNpemVyOjp+UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcigpCit7Cit9CisKK3ZvaWQg
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcjo6aW5pdGlhbGl6ZVZvaWNlTGlzdCgpCit7CisgICAg
Zm9yIChBVlNwZWVjaFN5bnRoZXNpc1ZvaWNlICp2b2ljZSBpbiBbQVZTcGVlY2hTeW50aGVzaXNW
b2ljZUNsYXNzIHNwZWVjaFZvaWNlc10pIHsKKyAgICAgICAgLy8gaU9TIFNwZWVjaCB2b2ljZXMg
b25seSBleHBvc2UgdGhlaXIgbGFuZ3VhZ2UgYXMgYW4gaWRlbnRpZnlpbmcgYXNwZWN0LgorICAg
ICAgICBOU1N0cmluZyAqbGFuZ3VhZ2UgPSBbdm9pY2UgbGFuZ3VhZ2VdOworICAgICAgICBOU1N0
cmluZyAqdm9pY2VVUkkgPSBsYW5ndWFnZTsKKyAgICAgICAgTlNTdHJpbmcgKm5hbWUgPSBsYW5n
dWFnZTsKKyAgICAgICAgYm9vbCBpc0RlZmF1bHQgPSB0cnVlOworICAgICAgICAKKyAgICAgICAg
bV92b2ljZUxpc3QuYXBwZW5kKFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZSh2
b2ljZVVSSSwgbmFtZSwgbGFuZ3VhZ2UsIHRydWUsIGlzRGVmYXVsdCkpOworICAgIH0KK30KKwor
dm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpwYXVzZSgpCit7CisgICAgW21fcGxhdGZv
cm1TcGVlY2hXcmFwcGVyLmdldCgpIHBhdXNlXTsKK30KKwordm9pZCBQbGF0Zm9ybVNwZWVjaFN5
bnRoZXNpemVyOjpyZXN1bWUoKQoreworICAgIFttX3BsYXRmb3JtU3BlZWNoV3JhcHBlci5nZXQo
KSByZXN1bWVdOworfQorCit2b2lkIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXI6OnNwZWFrKFBh
c3NSZWZQdHI8UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U+IHV0dGVyYW5jZSkKK3sK
KyAgICBpZiAoIW1fcGxhdGZvcm1TcGVlY2hXcmFwcGVyKQorICAgICAgICBtX3BsYXRmb3JtU3Bl
ZWNoV3JhcHBlciA9IGFkb3B0TlMoW1tXZWJTcGVlY2hTeW50aGVzaXNXcmFwcGVyIGFsbG9jXSBp
bml0V2l0aFNwZWVjaFN5bnRoZXNpemVyOnRoaXNdKTsKKyAgICAKKyAgICBbbV9wbGF0Zm9ybVNw
ZWVjaFdyYXBwZXIuZ2V0KCkgc3BlYWtVdHRlcmFuY2U6dXR0ZXJhbmNlLmdldCgpXTsKK30KKwor
dm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpjYW5jZWwoKQoreworICAgIFttX3BsYXRm
b3JtU3BlZWNoV3JhcHBlci5nZXQoKSBjYW5jZWxdOworfQorICAgIAorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
U1NMS2V5R2VuZXJhdG9ySU9TLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TU0xL
ZXlHZW5lcmF0b3JJT1MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0Y2NlMzdjOWU3Yzk3ZGU1MDJhZDJkYzQ3
YWI4MGQ3N2FhN2UxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvU1NMS2V5R2VuZXJhdG9ySU9TLmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNTTEtleUdlbmVyYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgZ2V0
U3VwcG9ydGVkS2V5U2l6ZXMoVmVjdG9yPFN0cmluZz4mKQoreworfQorCitTdHJpbmcgc2lnbmVk
UHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3Qg
U3RyaW5nJiBjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IFVSTCYpCit7CisgICAgVU5VU0VEX1BBUkFN
KGtleVNpemVJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGNoYWxsZW5nZVN0cmluZyk7CisgICAg
cmV0dXJuIFN0cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgw
ZDE5N2IzMDE2ZGE4YjJkNTU2ZDgzZWU1MjU5YzU4NTgwZDY5ZmEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MuaApAQCAtMCww
ICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvcklPU19oCisjZGVm
aW5lIFNjcm9sbEFuaW1hdG9ySU9TX2gKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisK
KyNpbmNsdWRlICJJbnRQb2ludC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBs
YXRmb3JtVG91Y2hFdmVudDsKKworY2xhc3MgU2Nyb2xsQW5pbWF0b3JJT1MgOiBwdWJsaWMgU2Ny
b2xsQW5pbWF0b3IgeworcHVibGljOgorICAgIFNjcm9sbEFuaW1hdG9ySU9TKFNjcm9sbGFibGVB
cmVhKik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JJT1MoKTsKKworI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCisgICAgdmlydHVhbCBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxh
dGZvcm1Ub3VjaEV2ZW50JikgT1ZFUlJJREU7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lk
IGRldGVybWluZVNjcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZShjb25zdCBJbnRTaXplJiB0
b3VjaERlbHRhKTsKKworICAgIC8vIFN0YXRlIGZvciBoYW5kbGluZyBzZXF1ZW5jZXMgb2YgdG91
Y2hlcyBpbiBkZWZhdWx0VG91Y2hFdmVudEhhbmRsZXIuCisgICAgZW51bSBBeGlzTGF0Y2ggewor
ICAgICAgICBBeGlzTGF0Y2hOb3RDb21wdXRlZCwKKyAgICAgICAgQXhpc0xhdGNoTm9uZSwKKyAg
ICAgICAgQXhpc0xhdGNoSG9yaXpvbnRhbCwKKyAgICAgICAgQXhpc0xhdGNoVmVydGljYWwKKyAg
ICB9OworICAgIEF4aXNMYXRjaCBtX3RvdWNoU2Nyb2xsQXhpc0xhdGNoOworICAgIGJvb2wgbV9p
blRvdWNoU2VxdWVuY2U7CisgICAgYm9vbCBtX2NvbW1pdHRlZFRvU2Nyb2xsQXhpczsKKyAgICBi
b29sIG1fc3RhcnRlZFNjcm9sbDsKKyAgICBJbnRQb2ludCBtX2ZpcnN0VG91Y2hQb2ludDsKKyAg
ICBJbnRQb2ludCBtX2xhc3RUb3VjaFBvaW50OworCisgICAgLy8gV2hlbiB3ZSdyZSBpbiBhIHRv
dWNoIHNlcXVlbmNlLCB0aGlzIHdpbGwgcG9pbnQgdG8gdGhlIHNjcm9sbGFibGUgYXJlYSB0aGF0
CisgICAgLy8gc2hvdWxkIGFjdHVhbGx5IGJlIHNjcm9sbGVkIGR1cmluZyB0aGUgc2VxdWVuY2Uu
CisgICAgU2Nyb2xsYWJsZUFyZWEqIG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xsQW5pbWF0b3JJ
T1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1h
dG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9T
Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjBhZjUyMTI4YTUzYWQ3MTAwMGE3MGQwZDE2YzM4YjQ3YjUxNDBlNTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5p
bWF0b3JJT1MubW0KQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JJT1MuaCIKKworI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtVG91Y2hFdmVudElPUy5o
IgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBTY3Jv
bGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9ySU9TKHNjcm9sbGFibGVBcmVhKSk7
Cit9CisKK1Njcm9sbEFuaW1hdG9ySU9TOjpTY3JvbGxBbmltYXRvcklPUyhTY3JvbGxhYmxlQXJl
YSogc2Nyb2xsYWJsZUFyZWEpCisgICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkK
KyAgICAsIG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2goQXhpc0xhdGNoTm90Q29tcHV0ZWQpCisgICAg
LCBtX2luVG91Y2hTZXF1ZW5jZShmYWxzZSkKKyAgICAsIG1fY29tbWl0dGVkVG9TY3JvbGxBeGlz
KGZhbHNlKQorICAgICwgbV9zdGFydGVkU2Nyb2xsKGZhbHNlKQorICAgICwgbV9zY3JvbGxhYmxl
QXJlYUZvclRvdWNoU2VxdWVuY2UoMCkKK3sKK30KKworU2Nyb2xsQW5pbWF0b3JJT1M6On5TY3Jv
bGxBbmltYXRvcklPUygpCit7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JJT1M6OmhhbmRsZVRv
dWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIGlm
ICh0b3VjaEV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpUb3VjaFN0YXJ0ICYmIHRvdWNo
RXZlbnQudG91Y2hDb3VudCgpID09IDEpIHsKKyAgICAgICAgbV9maXJzdFRvdWNoUG9pbnQgPSB0
b3VjaEV2ZW50LnRvdWNoTG9jYXRpb25BdEluZGV4KDApOworICAgICAgICBtX2xhc3RUb3VjaFBv
aW50ID0gbV9maXJzdFRvdWNoUG9pbnQ7CisgICAgICAgIG1faW5Ub3VjaFNlcXVlbmNlID0gdHJ1
ZTsKKyAgICAgICAgbV9jb21taXR0ZWRUb1Njcm9sbEF4aXMgPSBmYWxzZTsKKyAgICAgICAgbV9z
dGFydGVkU2Nyb2xsID0gZmFsc2U7CisgICAgICAgIG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2ggPSBB
eGlzTGF0Y2hOb3RDb21wdXRlZDsKKyAgICAgICAgLy8gTmV2ZXIgY2xhaW0gdG8gaGF2ZSBoYW5k
bGVkIHRoZSBUb3VjaFN0YXJ0LCBiZWNhdXNlIHRoYXQgd2lsbCBraWxsIGRlZmF1bHQgc2Nyb2xs
aW5nIGJlaGF2aW9yLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFt
X2luVG91Y2hTZXF1ZW5jZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHRvdWNo
RXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6OlRvdWNoRW5kIHx8IHRvdWNoRXZlbnQudHlw
ZSgpID09IFBsYXRmb3JtRXZlbnQ6OlRvdWNoQ2FuY2VsKSB7CisgICAgICAgIG1faW5Ub3VjaFNl
cXVlbmNlID0gZmFsc2U7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNl
ID0gMDsKKyAgICAgICAgaWYgKG1fc3RhcnRlZFNjcm9sbCkKKyAgICAgICAgICAgIHNjcm9sbGFi
bGVBcmVhKCktPmRpZEVuZFNjcm9sbCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gSWYgYSBzZWNvbmQgdG91Y2ggYXBwZWFycywgYXNzdW1lIHRoYXQgdGhlIHVzZXIg
aXMgdHJ5aW5nIHRvIHpvb20sIGFuZCBiYWlsIG9uIHRoZSBzY3JvbGxpbmcgc2VxdWVuY2UuCisg
ICAgLy8gRklYTUU6IGlmIHRoYXQgc2Vjb25kIHRvdWNoIGlzIGluc2lkZSB0aGUgc2Nyb2xsYWJs
ZSBhcmVhLCBzaG91bGQgd2Uga2VlcCBzY3JvbGxpbmc/CisgICAgaWYgKHRvdWNoRXZlbnQudG91
Y2hDb3VudCgpICE9IDEpIHsKKyAgICAgICAgbV9pblRvdWNoU2VxdWVuY2UgPSBmYWxzZTsKKyAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UgPSAwOworICAgICAgICBpZiAo
bV9zdGFydGVkU2Nyb2xsKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEoKS0+ZGlkRW5kU2Ny
b2xsKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgSW50UG9pbnQg
Y3VycmVudFBvaW50ID0gdG91Y2hFdmVudC50b3VjaExvY2F0aW9uQXRJbmRleCgwKTsKKworICAg
IEludFNpemUgdG91Y2hEZWx0YSA9IG1fbGFzdFRvdWNoUG9pbnQgLSBjdXJyZW50UG9pbnQ7Cisg
ICAgbV9sYXN0VG91Y2hQb2ludCA9IGN1cnJlbnRQb2ludDsKKworICAgIGlmICghbV9zY3JvbGxh
YmxlQXJlYUZvclRvdWNoU2VxdWVuY2UpCisgICAgICAgIGRldGVybWluZVNjcm9sbGFibGVBcmVh
Rm9yVG91Y2hTZXF1ZW5jZSh0b3VjaERlbHRhKTsKKworICAgIGlmICghbV9jb21taXR0ZWRUb1Nj
cm9sbEF4aXMpIHsKKyAgICAgICAgYm9vbCBob3Jpem9udGFsbHlTY3JvbGxhYmxlID0gbV9zY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICAgICAgYm9v
bCB2ZXJ0aWNhbGx5U2Nyb2xsYWJsZSA9IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUoVmVy
dGljYWxTY3JvbGxiYXIpOworCisgICAgICAgIGlmICghaG9yaXpvbnRhbGx5U2Nyb2xsYWJsZSAm
JiAhdmVydGljYWxseVNjcm9sbGFibGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgSW50U2l6ZSBkZWx0YUZyb21TdGFydCA9IG1fZmlyc3RUb3VjaFBvaW50IC0gY3VycmVu
dFBvaW50OworICAgIAorICAgICAgICBjb25zdCBpbnQgbGF0Y2hBeGlzTW92ZW1lbnRUaHJlc2hv
bGQgPSAxMDsKKyAgICAgICAgaWYgKCFob3Jpem9udGFsbHlTY3JvbGxhYmxlICYmIHZlcnRpY2Fs
bHlTY3JvbGxhYmxlKSB7CisgICAgICAgICAgICBtX3RvdWNoU2Nyb2xsQXhpc0xhdGNoID0gQXhp
c0xhdGNoVmVydGljYWw7CisgICAgICAgICAgICBpZiAoYWJzKGRlbHRhRnJvbVN0YXJ0LmhlaWdo
dCgpKSA+PSBsYXRjaEF4aXNNb3ZlbWVudFRocmVzaG9sZCkKKyAgICAgICAgICAgICAgICBtX2Nv
bW1pdHRlZFRvU2Nyb2xsQXhpcyA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoaG9yaXpvbnRh
bGx5U2Nyb2xsYWJsZSAmJiAhdmVydGljYWxseVNjcm9sbGFibGUpIHsKKyAgICAgICAgICAgIG1f
dG91Y2hTY3JvbGxBeGlzTGF0Y2ggPSBBeGlzTGF0Y2hIb3Jpem9udGFsOworICAgICAgICAgICAg
aWYgKGFicyhkZWx0YUZyb21TdGFydC53aWR0aCgpKSA+PSBsYXRjaEF4aXNNb3ZlbWVudFRocmVz
aG9sZCkKKyAgICAgICAgICAgICAgICBtX2NvbW1pdHRlZFRvU2Nyb2xsQXhpcyA9IHRydWU7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2NvbW1pdHRlZFRvU2Nyb2xsQXhpcyA9IHRy
dWU7CisKKyAgICAgICAgICAgIGlmIChtX3RvdWNoU2Nyb2xsQXhpc0xhdGNoID09IEF4aXNMYXRj
aE5vdENvbXB1dGVkKSB7CisgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgbG9ja0FuZ2xlRGVn
cmVlcyA9IDIwOworICAgICAgICAgICAgICAgIGlmIChkZWx0YUZyb21TdGFydC53aWR0aCgpICYm
IGRlbHRhRnJvbVN0YXJ0LmhlaWdodCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRy
YWdBbmdsZSA9IGF0YW5mKGZhYnNmKGRlbHRhRnJvbVN0YXJ0LmhlaWdodCgpKSAvIGZhYnNmKGRl
bHRhRnJvbVN0YXJ0LndpZHRoKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRyYWdBbmds
ZSA8PSBkZWcycmFkKGxvY2tBbmdsZURlZ3JlZXMpKQorICAgICAgICAgICAgICAgICAgICAgICAg
bV90b3VjaFNjcm9sbEF4aXNMYXRjaCA9IEF4aXNMYXRjaEhvcml6b250YWw7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGRyYWdBbmdsZSA+PSBkZWcycmFkKDkwIC0gbG9ja0FuZ2xlRGVn
cmVlcykpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3RvdWNoU2Nyb2xsQXhpc0xhdGNoID0g
QXhpc0xhdGNoVmVydGljYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW1fY29tbWl0dGVkVG9TY3JvbGxBeGlzKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgaGFuZGxlZCA9IGZh
bHNlOworICAgIAorICAgIC8vIEhvcml6b250YWwKKyAgICBpZiAobV90b3VjaFNjcm9sbEF4aXNM
YXRjaCAhPSBBeGlzTGF0Y2hWZXJ0aWNhbCkgeworICAgICAgICBpbnQgZGVsdGEgPSB0b3VjaERl
bHRhLndpZHRoKCk7CisgICAgICAgIGhhbmRsZWQgfD0gbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNo
U2VxdWVuY2UtPnNjcm9sbChkZWx0YSA8IDAgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsUmlnaHQsIFNj
cm9sbEJ5UGl4ZWwsIGZhYnNmKGRlbHRhKSk7CisgICAgfQorICAgIAorICAgIC8vIFZlcnRpY2Fs
CisgICAgaWYgKG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2ggIT0gQXhpc0xhdGNoSG9yaXpvbnRhbCkg
eworICAgICAgICBpbnQgZGVsdGEgPSB0b3VjaERlbHRhLmhlaWdodCgpOworICAgICAgICBoYW5k
bGVkIHw9IG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlLT5zY3JvbGwoZGVsdGEgPCAw
ID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxCeVBpeGVsLCBmYWJzZihkZWx0YSkpOwor
ICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm4gZmFsc2UgdW50aWwgd2UgbWFuYWdlIHRvIHNjcm9s
bCBhdCBhbGwsIGFuZCB0aGVuIGtlZXAgcmV0dXJuaW5nIHRydWUgdW50aWwgdGhlIGdlc3R1cmUg
ZW5kcy4KKyAgICBpZiAoIW1fc3RhcnRlZFNjcm9sbCkgeworICAgICAgICBpZiAoIWhhbmRsZWQp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fc3RhcnRlZFNjcm9sbCA9IHRy
dWU7CisgICAgICAgIHNjcm9sbGFibGVBcmVhKCktPmRpZFN0YXJ0U2Nyb2xsKCk7CisgICAgfSBl
bHNlIGlmIChoYW5kbGVkKQorICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLT5kaWRVcGRhdGVTY3Jv
bGwoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcklP
Uzo6ZGV0ZXJtaW5lU2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlKGNvbnN0IEludFNpemUm
IHNjcm9sbERlbHRhKQoreworICAgIEFTU0VSVCghbV9zY3JvbGxhYmxlQXJlYUZvclRvdWNoU2Vx
dWVuY2UpOworCisgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhID0gbV9zY3JvbGxh
YmxlQXJlYTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAoIXNjcm9sbGFibGVBcmVh
LT5pc1Bpbm5lZEluQm90aERpcmVjdGlvbnMoc2Nyb2xsRGVsdGEpKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ0FyZWEgPSBzY3JvbGxhYmxl
QXJlYS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgaWYgKCFlbmNsb3NpbmdB
cmVhKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBlbmNs
b3NpbmdBcmVhOworICAgIH0KKworICAgIEFTU0VSVChzY3JvbGxhYmxlQXJlYSk7CisgICAgbV9z
Y3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UgPSBzY3JvbGxhYmxlQXJlYTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Njcm9sbFZpZXdJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xs
Vmlld0lPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMGIwYWQxMzJiYjQzZWJmMTZkMGI3ZjE0YWQ5NWRhYTc3
OWZhNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Nj
cm9sbFZpZXdJT1MubW0KQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNjcm9sbFZpZXcuaCIKKworI2ltcG9y
dCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJGbG9hdFJlY3QuaCIKKyNpbXBvcnQgIklu
dFJlY3QuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgi
CisjaW1wb3J0ICJXQUtBcHBLaXRTdHVicy5oIgorI2ltcG9ydCAiV0FLQ2xpcFZpZXcuaCIKKyNp
bXBvcnQgIldBS1Njcm9sbFZpZXcuaCIKKyNpbXBvcnQgIldBS1ZpZXdQcml2YXRlLmgiCisjaW1w
b3J0ICJXQUtXaW5kb3cuaCIKKyNpbXBvcnQgIldLVmlld1ByaXZhdGUuaCIKKyNpbXBvcnQgIldl
YkNvcmVGcmFtZVZpZXcuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitpbmxpbmUgTlNTY3JvbGxWaWV3PFdlYkNvcmVGcmFtZVNjcm9sbFZpZXc+ICpT
Y3JvbGxWaWV3OjpzY3JvbGxWaWV3KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIXBsYXRmb3JtV2lk
Z2V0KCkgfHwgW3BsYXRmb3JtV2lkZ2V0KCkgaXNLaW5kT2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNs
YXNzXV0pOworICAgIEFTU0VSVCghcGxhdGZvcm1XaWRnZXQoKSB8fCBbcGxhdGZvcm1XaWRnZXQo
KSBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdlYkNvcmVGcmFtZVNjcm9sbFZpZXcpXSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5TU2Nyb2xsVmlldzxXZWJDb3JlRnJhbWVTY3JvbGxW
aWV3PiAqPihwbGF0Zm9ybVdpZGdldCgpKTsKK30KKworTlNWaWV3ICpTY3JvbGxWaWV3Ojpkb2N1
bWVudFZpZXcoKSBjb25zdAoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAg
ICByZXR1cm4gW3Njcm9sbFZpZXcoKSBkb2N1bWVudFZpZXddOworICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIG5pbDsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0
Zm9ybUFkZENoaWxkKFdpZGdldCogY2hpbGQpCit7CisgICAgQVNTRVJUKGNoaWxkICE9IHRoaXMp
OworCisgICAgY2hpbGQtPmFkZFRvU3VwZXJ2aWV3KGRvY3VtZW50VmlldygpKTsKK30KKwordm9p
ZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVJlbW92ZUNoaWxkKFdpZGdldCogY2hpbGQpCit7CisgICAg
Y2hpbGQtPnJlbW92ZUZyb21TdXBlcnZpZXcoKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0
Zm9ybVNldFNjcm9sbGJhck1vZGVzKCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisgICAgW3Njcm9sbFZpZXcoKSBzZXRTY3JvbGxpbmdNb2RlczptX2hvcml6b250YWxTY3Jv
bGxiYXJNb2RlIHZlcnRpY2FsOm1fdmVydGljYWxTY3JvbGxiYXJNb2RlIGFuZExvY2s6Tk9dOwor
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxh
dGZvcm1TY3JvbGxiYXJNb2RlcyhTY3JvbGxiYXJNb2RlJiBob3Jpem9udGFsLCBTY3JvbGxiYXJN
b2RlJiB2ZXJ0aWNhbCkgY29uc3QKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisgICAgW3Njcm9sbFZpZXcoKSBzY3JvbGxpbmdNb2RlczomaG9yaXpvbnRhbCB2ZXJ0aWNhbDom
dmVydGljYWxdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgU2Ny
b2xsVmlldzo6cGxhdGZvcm1TZXRDYW5CbGl0T25TY3JvbGwoYm9vbCBjYW5CbGl0T25TY3JvbGwp
Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIFtbc2Nyb2xsVmlldygp
IGNvbnRlbnRWaWV3XSBzZXRDb3BpZXNPblNjcm9sbDpjYW5CbGl0T25TY3JvbGxdOworICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1D
YW5CbGl0T25TY3JvbGwoKSBjb25zdAoreworICAgIHJldHVybiBbW3Njcm9sbFZpZXcoKSBjb250
ZW50Vmlld10gY29waWVzT25TY3JvbGxdOworfQorCitJbnRSZWN0IFNjcm9sbFZpZXc6OmFjdHVh
bFZpc2libGVDb250ZW50UmVjdCgpIGNvbnN0Cit7CisgICAgQ0dSZWN0IHIgPSBDR1JlY3RaZXJv
OworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBXQUtTY3JvbGxWaWV3ICp2
aWV3ID0gc3RhdGljX2Nhc3Q8V0FLU2Nyb2xsVmlldyAqPihwbGF0Zm9ybVdpZGdldCgpKTsKKyAg
ICByID0gW3ZpZXcgYWN0dWFsRG9jdW1lbnRWaXNpYmxlUmVjdF07CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChyKTsKK30KKworSW50
UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlRXh0ZW50Q29udGVudFJlY3QoKSBjb25zdAoreworICAg
IE5TU2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19jYXN0PE5TU2Nyb2xsVmlldyAqPihwbGF0Zm9y
bVdpZGdldCgpKTsKKworICAgIENHUmVjdCByID0gQ0dSZWN0WmVybzsKKyAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisgICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W05TU2Nyb2xs
VmlldyBjbGFzc11dKQorICAgICAgICByID0gW3ZpZXcgZG9jdW1lbnRWaXNpYmxlRXh0ZW50XTsK
KyAgICBlbHNlIGlmICh2aWV3KSB7CisgICAgICAgIHIub3JpZ2luID0gW3ZpZXcgdmlzaWJsZVJl
Y3RdLm9yaWdpbjsKKyAgICAgICAgci5zaXplID0gW3ZpZXcgYm91bmRzXS5zaXplOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBXZWJLaXQyIG9uIGlPUyBkb2Vzbid0IGluZm9ybSB0
aGUgV2ViUHJvY2VzcyBvZiB0aGUgZXhwb3NlZCBhcmVhLgorICAgICAgICByZXR1cm4gSW50UmVj
dChJbnRQb2ludCgpLCBjb250ZW50c1NpemUoKSk7CisgICAgfQorCisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChyKTsKK30KKwordm9p
ZCBTY3JvbGxWaWV3OjpzZXRBY3R1YWxTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9z
aXRpb24pCit7CisgICAgTlNTY3JvbGxWaWV3ICp2aWV3ID0gc3RhdGljX2Nhc3Q8TlNTY3JvbGxW
aWV3ICo+KHBsYXRmb3JtV2lkZ2V0KCkpOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOworICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltOU1Njcm9sbFZpZXcgY2xhc3NdXSkK
KyAgICAgICAgW3ZpZXcgc2V0QWN0dWFsU2Nyb2xsUG9zaXRpb246cG9zaXRpb25dOworICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6cGxhdGZv
cm1WaXNpYmxlQ29udGVudFJlY3QoYm9vbCBpbmNsdWRlU2Nyb2xsYmFycykgY29uc3QKK3sKKyAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgaWYgKGluY2x1ZGVTY3JvbGxiYXJz
KSB7CisgICAgICAgIGlmIChOU1ZpZXcqIGRvY3VtZW50VmlldyA9IHRoaXMtPmRvY3VtZW50Vmll
dygpKQorICAgICAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoW2RvY3VtZW50VmlldyB2
aXNpYmxlUmVjdF0pOworICAgIH0KKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChbc2Nyb2xs
VmlldygpIGRvY3VtZW50VmlzaWJsZVJlY3RdKTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisKK0ludFNpemUgU2Nyb2xsVmlldzo6cGxh
dGZvcm1WaXNpYmxlQ29udGVudFNpemUoYm9vbCBpbmNsdWRlU2Nyb2xsYmFycykgY29uc3QKK3sK
KyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgaWYgKGluY2x1ZGVTY3JvbGxi
YXJzKSB7CisgICAgICAgIGlmIChOU1ZpZXcqIGRvY3VtZW50VmlldyA9IHRoaXMtPmRvY3VtZW50
VmlldygpKQorICAgICAgICAgICAgcmV0dXJuIEludFNpemUoW2RvY3VtZW50VmlldyB2aXNpYmxl
UmVjdF0uc2l6ZSk7CisgICAgfQorCisgICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShGbG9hdFNp
emUoW3Njcm9sbFZpZXcoKSBkb2N1bWVudFZpc2libGVSZWN0XS5zaXplKSk7CisgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gSW50U2l6ZSgpOworfQorCitUaWxlQ2Fj
aGUqIFNjcm9sbFZpZXc6OnRpbGVDYWNoZSgpCit7CisgICAgLy8gTWFrZSB0aWxlIGNhY2hlIHBv
aW50ZXIgYXZhaWxhYmxlIHZpYSB0aGUgbWFpbiBmcmFtZSBvbmx5LiBUaWxlIGNhY2hlIGludGVy
YWN0aW9uIHNob3VsZCBiZSBtYW5hZ2VkIGJ5CisgICAgLy8gdGhlIG1haW4gZnJhbWUgYW5kIHRo
aXMgYXZvaWRzIGhhdmluZyB0byBhZGQgcGFyZW50IGNoZWNrcyB0byBhbGwgY2FsbCBzaXRlcy4K
KyAgICBpZiAocGFyZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICBXQUtTY3JvbGxWaWV3ICp2aWV3ID0gc3RhdGljX2Nhc3Q8V0FL
U2Nyb2xsVmlldyAqPihwbGF0Zm9ybVdpZGdldCgpKTsKKyAgICByZXR1cm4gW1t2aWV3IHdpbmRv
d10gdGlsZUNhY2hlXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCit2b2lk
IFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0Q29udGVudHNTaXplKCkKK3sKKyAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisgICAgaW50IHcgPSBtX2NvbnRlbnRzU2l6ZS53aWR0aCgpOwor
ICAgIGludCBoID0gbV9jb250ZW50c1NpemUuaGVpZ2h0KCk7CisjaWYgIVBMQVRGT1JNKElPUykK
KyAgICBMT0coRnJhbWVzLCAiJXAgJUAgYXQgdyAlZCBoICVkXG4iLCBkb2N1bWVudFZpZXcoKSwg
WyhpZClbZG9jdW1lbnRWaWV3KCkgY2xhc3NdIGNsYXNzTmFtZV0sIHcsIGgpOyAgICAgICAgICAg
IAorI2Vsc2UKKyAgICBMT0coRnJhbWVzLCAiJXAgJUAgYXQgdyAlZCBoICVkXG4iLCBkb2N1bWVu
dFZpZXcoKSwgTlNTdHJpbmdGcm9tQ2xhc3MoW2RvY3VtZW50VmlldygpIGNsYXNzXSksIHcsIGgp
OworI2VuZGlmCisgICAgTlNTaXplIHRlbXBTaXplID0geyBzdGF0aWNfY2FzdDxDR0Zsb2F0Piht
YXgoMCwgdykpLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihtYXgoMCwgaCkpIH07IC8vIHdvcmthcm91
bmQgZm9yIDQyMTMzMTQKKyAgICBbZG9jdW1lbnRWaWV3KCkgc2V0Qm91bmRzU2l6ZTp0ZW1wU2l6
ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKwordm9pZCBTY3JvbGxWaWV3
OjpwbGF0Zm9ybVNldFNjcm9sbGJhcnNTdXBwcmVzc2VkKGJvb2wgcmVwYWludE9uVW5zdXBwcmVz
cykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW3Njcm9sbFZpZXco
KSBzZXRTY3JvbGxCYXJzU3VwcHJlc3NlZDptX3Njcm9sbGJhcnNTdXBwcmVzc2VkCisgICAgICAg
ICAgICAgICAgICAgICAgcmVwYWludE9uVW5zdXBwcmVzczpyZXBhaW50T25VbnN1cHByZXNzXTsK
KyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBs
YXRmb3JtU2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvaW50KQorewor
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBOU1BvaW50IGZsb2F0UG9pbnQg
PSBzY3JvbGxQb2ludDsKKyAgICBOU1BvaW50IHRlbXBQb2ludCA9IHsgbWF4KC1bc2Nyb2xsVmll
dygpIHNjcm9sbE9yaWdpbl0ueCwgZmxvYXRQb2ludC54KSwgbWF4KC1bc2Nyb2xsVmlldygpIHNj
cm9sbE9yaWdpbl0ueSwgZmxvYXRQb2ludC55KSB9OyAgLy8gRG9uJ3QgdXNlIE5TTWFrZVBvaW50
IHRvIHdvcmsgYXJvdW5kIDQyMTMzMTQuCisgICAgW2RvY3VtZW50VmlldygpIHNjcm9sbFBvaW50
OnRlbXBQb2ludF07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworYm9vbCBT
Y3JvbGxWaWV3OjpwbGF0Zm9ybVNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFy
aXR5KQoreworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIGltcGxlbWVudCB0aGlz
IHNvIHRoYXQgYWxsIG9mIHRoZSBjb2RlIGluIFdlYkZyYW1lVmlldyBjb3VsZCBnbyBhd2F5Lgor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNjcm9s
bFZpZXc6OnBsYXRmb3JtUmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYgcmVj
dCwgYm9vbCAvKm5vdyovKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKwor
ICAgIE5TVmlldyAqdmlldyA9IGRvY3VtZW50VmlldygpOworCisgICAgW3ZpZXcgc2V0TmVlZHNE
aXNwbGF5SW5SZWN0OnJlY3RdOyAgICAKKyAgICAvLyBGSVhNRTogSGFuZGxlICJub3ciLgorCisg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworLy8gIkNvbnRhaW5pbmcgV2luZG93
IiBtZWFucyB0aGUgTlNXaW5kb3cncyBjb29yZCBzeXN0ZW0sIHdoaWNoIGlzIG9yaWdpbiBsb3dl
ciBsZWZ0CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6cGxhdGZvcm1Db250ZW50c1RvU2NyZWVuKGNv
bnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOworICAgIGlmIChOU1ZpZXcqIGRvY3VtZW50VmlldyA9IHRoaXMtPmRvY3VtZW50Vmlldygp
KSB7CisgICAgICAgIE5TUmVjdCB0ZW1wUmVjdCA9IHJlY3Q7CisgICAgICAgIHRlbXBSZWN0ID0g
W2RvY3VtZW50VmlldyBjb252ZXJ0UmVjdDp0ZW1wUmVjdCB0b1ZpZXc6bmlsXTsKKyAgICAgICAg
dGVtcFJlY3Qub3JpZ2luID0gW1tkb2N1bWVudFZpZXcgd2luZG93XSBjb252ZXJ0QmFzZVRvU2Ny
ZWVuOnRlbXBSZWN0Lm9yaWdpbl07CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHRl
bXBSZWN0KTsKKyAgICB9CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1
cm4gSW50UmVjdCgpOworfQorCitJbnRQb2ludCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcmVlblRv
Q29udGVudHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKKyAgICBpZiAoTlNWaWV3KiBkb2N1bWVudFZpZXcgPSB0aGlzLT5k
b2N1bWVudFZpZXcoKSkgeworICAgICAgICBOU1BvaW50IHdpbmRvd0Nvb3JkID0gW1tkb2N1bWVu
dFZpZXcgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOiBwb2ludF07CisgICAgICAgIHJldHVy
biBJbnRQb2ludChbZG9jdW1lbnRWaWV3IGNvbnZlcnRQb2ludDp3aW5kb3dDb29yZCBmcm9tVmll
dzpuaWxdKTsKKyAgICB9CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1
cm4gSW50UG9pbnQoKTsKK30KKworYm9vbCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUlzT2Zmc2NyZWVu
KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogRERLOiBTY3JvbGxWaWV3TWFjLm1tIGFsc28gY2hl
Y2tzOiAhW1twbGF0Zm9ybVdpZGdldCgpIHdpbmRvd10gaXNWaXNpYmxlXQorICAgIC8vIGJ1dCAt
W1dBS1dpbmRvdyBpc1Zpc2libGVdIGRvZXNuJ3QgZXhpc3QuCisgICAgcmV0dXJuICFbcGxhdGZv
cm1XaWRnZXQoKSB3aW5kb3ddOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Ny
b2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhck92ZXJsYXlTdHlsZSkKK3sKK30KKwordm9pZCBT
Y3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbE9yaWdpbihjb25zdCBJbnRQb2ludCYgb3JpZ2lu
LCBib29sIHVwZGF0ZVBvc2l0aW9uQWxsLCBib29sIHVwZGF0ZVBvc2l0aW9uU3luY2hyb25vdXNs
eSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW3Njcm9sbFZpZXco
KSBzZXRTY3JvbGxPcmlnaW46c3RhdGljX2Nhc3Q8Q0dQb2ludD4ob3JpZ2luKSB1cGRhdGVQb3Np
dGlvbkF0QWxsOnVwZGF0ZVBvc2l0aW9uQWxsIGltbWVkaWF0ZWx5OnVwZGF0ZVBvc2l0aW9uU3lu
Y2hyb25vdXNseV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbGJhclRoZW1lSU9TLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsYmFyVGhlbWVJT1MuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44NTgxNjJhODFmYWU5NGQ1YTVmY2M1NTg0MzA0MjI2MTM2OTVlMTQ4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbGJhclRoZW1lSU9TLmgK
QEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFNjcm9sbGJhclRoZW1lSU9TX2gKKyNkZWZpbmUgU2Nyb2xsYmFyVGhl
bWVJT1NfaAorCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXJUaGVtZUlPUyA6IHB1YmxpYyBTY3JvbGxi
YXJUaGVtZUNvbXBvc2l0ZSB7CitwdWJsaWM6CisgICAgU2Nyb2xsYmFyVGhlbWVJT1MoKTsKKyAg
ICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZUlPUygpOworCisgICAgdmlydHVhbCBib29sIHBhaW50
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlja25l
c3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKSBPVkVSUklERTsKKyAg
ICAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBpbml0aWFsQXV0b3Njcm9s
bFRpbWVyRGVsYXkoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGlt
ZXJEZWxheSgpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBTY3JvbGxiYXJCdXR0b25zUGxhY2Vt
ZW50IGJ1dHRvbnNQbGFjZW1lbnQoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50Kikg
T1ZFUlJJREU7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3Jv
bGxiYXJUaGVtZUNsaWVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBoYXNUaHVtYihT
Y3JvbGxiYXJUaGVtZUNsaWVudCopIE9WRVJSSURFOworCisgICAgdmlydHVhbCBJbnRSZWN0IGJh
Y2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBw
YWludGluZyA9IGZhbHNlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1
dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50
aW5nID0gZmFsc2UpIE9WRVJSSURFOworICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqLCBib29sIHBhaW50aW5nID0gZmFsc2UpIE9WRVJSSURFOworCisg
ICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kikg
T1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSBPVkVSUklERTsK
KyAgICAKK3B1YmxpYzoKKyAgICB2b2lkIHByZWZlcmVuY2VzQ2hhbmdlZCgpOworfTsKKworfQor
CisjZW5kaWYgLy8gU2Nyb2xsYmFyVGhlbWVJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1Njcm9sbGJhclRoZW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1Njcm9sbGJhclRoZW1lSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEzNzc0NTI0ZDFjODJi
YmJkOTVmZjM3MzM4ZjQ5NzI0MGE5YzAwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsYmFyVGhlbWVJT1MubW0KQEAgLTAsMCArMSwxMjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lSU9TLmgiCisKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1Njcm9sbGJhclRoZW1lKiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhl
bWUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTY3JvbGxiYXJUaGVtZUlPUz4gdGhl
bWU7CisgICAgcmV0dXJuICZ0aGVtZS5nZXQoKTsKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUlP
Uzo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKQoreworfQorCit2b2lk
IFNjcm9sbGJhclRoZW1lSU9TOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xp
ZW50KikKK3sKK30KKworU2Nyb2xsYmFyVGhlbWVJT1M6OlNjcm9sbGJhclRoZW1lSU9TKCkKK3sK
K30KKworU2Nyb2xsYmFyVGhlbWVJT1M6On5TY3JvbGxiYXJUaGVtZUlPUygpCit7Cit9CisKK3Zv
aWQgU2Nyb2xsYmFyVGhlbWVJT1M6OnByZWZlcmVuY2VzQ2hhbmdlZCgpCit7Cit9CisKK2ludCBT
Y3JvbGxiYXJUaGVtZUlPUzo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXpl
KQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUgU2Nyb2xsYmFyVGhlbWVJT1M6OmluaXRp
YWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBT
Y3JvbGxiYXJUaGVtZUlPUzo6YXV0b3Njcm9sbFRpbWVyRGVsYXkoKQoreworICAgIHJldHVybiAw
OworfQorICAgIAorU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBTY3JvbGxiYXJUaGVtZUlPUzo6
YnV0dG9uc1BsYWNlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNjcm9sbGJhckJ1dHRvbnNO
b25lOworfQorCitib29sIFNjcm9sbGJhclRoZW1lSU9TOjpoYXNCdXR0b25zKFNjcm9sbGJhclRo
ZW1lQ2xpZW50KikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU2Nyb2xsYmFyVGhl
bWVJT1M6Omhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KikKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVJT1M6OmJhY2tCdXR0b25SZWN0KFNjcm9s
bGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCAvKnBhaW50aW5nKi8pCit7Cisg
ICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworSW50UmVjdCBTY3JvbGxiYXJUaGVtZUlPUzo6Zm9y
d2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBib29s
IC8qcGFpbnRpbmcqLykKK3sKKyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCitJbnRSZWN0IFNj
cm9sbGJhclRoZW1lSU9TOjp0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBib29sIC8q
cGFpbnRpbmcqLykKK3sKKyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCitpbnQgU2Nyb2xsYmFy
VGhlbWVJT1M6Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCopCit7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVJT1M6OnNob3VsZENlbnRlck9u
VGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxiYXJUaGVtZUlPUzo6cGFpbnQo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiAv
KmRhbWFnZVJlY3QqLykKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlv
blJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvblJlY3QuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY5NzFhYTU0MzUxZGFhYTM1MTk0NTg4YjViNTI5MmFlNDhhY2E4YWEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2VsZWN0aW9uUmVj
dC5jcHAKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTZWxlY3Rpb25SZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Vs
ZWN0aW9uUmVjdDo6U2VsZWN0aW9uUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIGlzSG9y
aXpvbnRhbCwgaW50IGNvbHVtbk51bWJlcikKKyAgICA6IG1fcmVjdChyZWN0KQorICAgICwgbV9k
aXJlY3Rpb24oTFRSKQorICAgICwgbV9taW5YKDApCisgICAgLCBtX21heFgoMCkKKyAgICAsIG1f
bWF4WSgwKQorICAgICwgbV9saW5lTnVtYmVyKDApCisgICAgLCBtX2lzTGluZUJyZWFrKGZhbHNl
KQorICAgICwgbV9pc0ZpcnN0T25MaW5lKGZhbHNlKQorICAgICwgbV9pc0xhc3RPbkxpbmUoZmFs
c2UpCisgICAgLCBtX2NvbnRhaW5zU3RhcnQoZmFsc2UpCisgICAgLCBtX2NvbnRhaW5zRW5kKGZh
bHNlKQorICAgICwgbV9pc0hvcml6b250YWwoaXNIb3Jpem9udGFsKQorICAgICwgbV9pc0luRml4
ZWRQb3NpdGlvbihmYWxzZSkKKyAgICAsIG1faXNSdWJ5VGV4dChmYWxzZSkKKyAgICAsIG1fY29s
dW1uTnVtYmVyKGNvbHVtbk51bWJlcikKK3sKK30KKworLy8gRklYTUU6IFdlIHNob3VsZCBtb3Zl
IHNvbWUgb2YgdGhlc2UgYXJndW1lbnRzIHRvIGFuIGF1eGlsbGFyeSBzdHJ1Y3QuCitTZWxlY3Rp
b25SZWN0OjpTZWxlY3Rpb25SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uLCBpbnQgbWluWCwgaW50IG1heFgsIGludCBtYXhZLAorICAgIGludCBsaW5lTnVt
YmVyLCBib29sIGlzTGluZUJyZWFrLCBib29sIGlzRmlyc3RPbkxpbmUsIGJvb2wgaXNMYXN0T25M
aW5lLCBib29sIGNvbnRhaW5zU3RhcnQsIGJvb2wgY29udGFpbnNFbmQsCisgICAgYm9vbCBpc0hv
cml6b250YWwsIGJvb2wgaXNJbkZpeGVkUG9zaXRpb24sIGJvb2wgaXNSdWJ5VGV4dCwgaW50IGNv
bHVtbk51bWJlcikKKyAgICA6IG1fcmVjdChyZWN0KQorICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0
aW9uKQorICAgICwgbV9taW5YKG1pblgpCisgICAgLCBtX21heFgobWF4WCkKKyAgICAsIG1fbWF4
WShtYXhZKQorICAgICwgbV9saW5lTnVtYmVyKGxpbmVOdW1iZXIpCisgICAgLCBtX2lzTGluZUJy
ZWFrKGlzTGluZUJyZWFrKQorICAgICwgbV9pc0ZpcnN0T25MaW5lKGlzRmlyc3RPbkxpbmUpCisg
ICAgLCBtX2lzTGFzdE9uTGluZShpc0xhc3RPbkxpbmUpCisgICAgLCBtX2NvbnRhaW5zU3RhcnQo
Y29udGFpbnNTdGFydCkKKyAgICAsIG1fY29udGFpbnNFbmQoY29udGFpbnNFbmQpCisgICAgLCBt
X2lzSG9yaXpvbnRhbChpc0hvcml6b250YWwpCisgICAgLCBtX2lzSW5GaXhlZFBvc2l0aW9uKGlz
SW5GaXhlZFBvc2l0aW9uKQorICAgICwgbV9pc1J1YnlUZXh0KGlzUnVieVRleHQpCisgICAgLCBt
X2NvbHVtbk51bWJlcihjb2x1bW5OdW1iZXIpCit7Cit9CisKK1NlbGVjdGlvblJlY3Q6OlNlbGVj
dGlvblJlY3QoKQorICAgIDogbV9kaXJlY3Rpb24oTFRSKQorICAgICwgbV9taW5YKDApCisgICAg
LCBtX21heFgoMCkKKyAgICAsIG1fbWF4WSgwKQorICAgICwgbV9saW5lTnVtYmVyKDApCisgICAg
LCBtX2lzTGluZUJyZWFrKGZhbHNlKQorICAgICwgbV9pc0ZpcnN0T25MaW5lKGZhbHNlKQorICAg
ICwgbV9pc0xhc3RPbkxpbmUoZmFsc2UpCisgICAgLCBtX2NvbnRhaW5zU3RhcnQoZmFsc2UpCisg
ICAgLCBtX2NvbnRhaW5zRW5kKGZhbHNlKQorICAgICwgbV9pc0hvcml6b250YWwodHJ1ZSkKKyAg
ICAsIG1faXNJbkZpeGVkUG9zaXRpb24oZmFsc2UpCisgICAgLCBtX2lzUnVieVRleHQoZmFsc2Up
CisgICAgLCBtX2NvbHVtbk51bWJlcigwKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2VsZWN0aW9uUmVjdC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvblJlY3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45ZGM5MWZkZjFlN2M4MDU2ZGMwNjkyNWFmMGQyMmI0NTMwZTc1MjlkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvblJlY3QuaApAQCAtMCww
ICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2VsZWN0aW9uUmVjdF9oCisjZGVmaW5l
IFNlbGVjdGlvblJlY3RfaAorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlRleHRE
aXJlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFNlbGVjdGlvblJlY3QgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFNlbGVjdGlvblJlY3QoY29uc3QgSW50UmVjdCYs
IGJvb2wgaXNIb3Jpem9udGFsLCBpbnQgY29sdW1uTnVtYmVyKTsKKworICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbW92ZSBzb21lIG9mIHRoZXNlIGFyZ3VtZW50cyB0byBhbiBhdXhpbGxhcnkgc3Ry
dWN0LgorICAgIFNlbGVjdGlvblJlY3QoY29uc3QgSW50UmVjdCYsIFRleHREaXJlY3Rpb24sIGlu
dCwgaW50LCBpbnQsIGludCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9v
bCwgYm9vbCwgaW50KTsKKyAgICBTZWxlY3Rpb25SZWN0KCk7CisgICAgflNlbGVjdGlvblJlY3Qo
KSB7IH0KKworICAgIEludFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCisg
ICAgaW50IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250YWwgPyBtX3Jl
Y3QueCgpIDogbV9yZWN0LnkoKTsgfQorICAgIGludCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX2lzSG9yaXpvbnRhbCA/IG1fcmVjdC53aWR0aCgpIDogbV9yZWN0LmhlaWdodCgpOyB9
CisgICAgaW50IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX2lzSG9yaXpvbnRhbCA/IG1f
cmVjdC55KCkgOiBtX3JlY3QueCgpOyB9CisgICAgaW50IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtX2lzSG9yaXpvbnRhbCA/IG1fcmVjdC5oZWlnaHQoKSA6IG1fcmVjdC53aWR0aCgp
OyB9CisKKyAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGly
ZWN0aW9uOyB9CisgICAgaW50IG1pblgoKSBjb25zdCB7IHJldHVybiBtX21pblg7IH0KKyAgICBp
bnQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4WDsgfQorICAgIGludCBtYXhZKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhZOyB9CisgICAgaW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBt
X2xpbmVOdW1iZXI7IH0KKyAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV9p
c0xpbmVCcmVhazsgfQorICAgIGJvb2wgaXNGaXJzdE9uTGluZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNGaXJzdE9uTGluZTsgfQorICAgIGJvb2wgaXNMYXN0T25MaW5lKCkgY29uc3QgeyByZXR1cm4g
bV9pc0xhc3RPbkxpbmU7IH0KKyAgICBib29sIGNvbnRhaW5zU3RhcnQoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRhaW5zU3RhcnQ7IH0KKyAgICBib29sIGNvbnRhaW5zRW5kKCkgY29uc3QgeyByZXR1
cm4gbV9jb250YWluc0VuZDsgfQorICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1
cm4gbV9pc0hvcml6b250YWw7IH0KKyAgICBib29sIGlzSW5GaXhlZFBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0luRml4ZWRQb3NpdGlvbjsgfQorICAgIGJvb2wgaXNSdWJ5VGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNSdWJ5VGV4dDsgfQorICAgIGludCBjb2x1bW5OdW1iZXIoKSBjb25z
dCB7IHJldHVybiBtX2NvbHVtbk51bWJlcjsgfQorCisgICAgdm9pZCBzZXRSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpIHsgbV9yZWN0ID0gcmVjdDsgfQorCisgICAgdm9pZCBzZXRMb2dpY2FsTGVm
dChpbnQgbGVmdCkKKyAgICB7CisgICAgICAgIGlmIChtX2lzSG9yaXpvbnRhbCkKKyAgICAgICAg
ICAgIG1fcmVjdC5zZXRYKGxlZnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3JlY3Qu
c2V0WShsZWZ0KTsKKyAgICB9CisKKyAgICB2b2lkIHNldExvZ2ljYWxXaWR0aChpbnQgd2lkdGgp
CisgICAgeworICAgICAgICBpZiAobV9pc0hvcml6b250YWwpCisgICAgICAgICAgICBtX3JlY3Qu
c2V0V2lkdGgod2lkdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3JlY3Quc2V0SGVp
Z2h0KHdpZHRoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldExvZ2ljYWxUb3AoaW50IHRvcCkKKyAg
ICB7CisgICAgICAgIGlmIChtX2lzSG9yaXpvbnRhbCkKKyAgICAgICAgICAgIG1fcmVjdC5zZXRZ
KHRvcCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcmVjdC5zZXRYKHRvcCk7CisgICAg
fQorCisgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KGludCBoZWlnaHQpCisgICAgeworICAgICAg
ICBpZiAobV9pc0hvcml6b250YWwpCisgICAgICAgICAgICBtX3JlY3Quc2V0SGVpZ2h0KGhlaWdo
dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcmVjdC5zZXRXaWR0aChoZWlnaHQpOwor
ICAgIH0KKworICAgIHZvaWQgc2V0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKSB7
IG1fZGlyZWN0aW9uID0gZGlyZWN0aW9uOyB9CisgICAgdm9pZCBzZXRNaW5YKGludCBtaW5YKSB7
IG1fbWluWCA9IG1pblg7IH0KKyAgICB2b2lkIHNldE1heFgoaW50IG1heFgpIHsgbV9tYXhYID0g
bWF4WDsgfQorICAgIHZvaWQgc2V0TWF4WShpbnQgbWF4WSkgeyBtX21heFkgPSBtYXhZOyB9Cisg
ICAgdm9pZCBzZXRMaW5lTnVtYmVyKGludCBsaW5lTnVtYmVyKSB7IG1fbGluZU51bWJlciA9IGxp
bmVOdW1iZXI7IH0KKyAgICB2b2lkIHNldElzTGluZUJyZWFrKGJvb2wgaXNMaW5lQnJlYWspIHsg
bV9pc0xpbmVCcmVhayA9IGlzTGluZUJyZWFrOyB9CisgICAgdm9pZCBzZXRJc0ZpcnN0T25MaW5l
KGJvb2wgaXNGaXJzdE9uTGluZSkgeyBtX2lzRmlyc3RPbkxpbmUgPSBpc0ZpcnN0T25MaW5lOyB9
CisgICAgdm9pZCBzZXRJc0xhc3RPbkxpbmUoYm9vbCBpc0xhc3RPbkxpbmUpIHsgbV9pc0xhc3RP
bkxpbmUgPSBpc0xhc3RPbkxpbmU7IH0KKyAgICB2b2lkIHNldENvbnRhaW5zU3RhcnQoYm9vbCBj
b250YWluc1N0YXJ0KSB7IG1fY29udGFpbnNTdGFydCA9IGNvbnRhaW5zU3RhcnQ7IH0KKyAgICB2
b2lkIHNldENvbnRhaW5zRW5kKGJvb2wgY29udGFpbnNFbmQpIHsgbV9jb250YWluc0VuZCA9IGNv
bnRhaW5zRW5kOyB9CisgICAgdm9pZCBzZXRJc0hvcml6b250YWwoYm9vbCBpc0hvcml6b250YWwp
IHsgbV9pc0hvcml6b250YWwgPSBpc0hvcml6b250YWw7IH0KKworcHJpdmF0ZToKKyAgICBJbnRS
ZWN0IG1fcmVjdDsKKyAgICBUZXh0RGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAgIGludCBtX21p
blg7CisgICAgaW50IG1fbWF4WDsKKyAgICBpbnQgbV9tYXhZOworICAgIGludCBtX2xpbmVOdW1i
ZXI7CisgICAgYm9vbCBtX2lzTGluZUJyZWFrOworICAgIGJvb2wgbV9pc0ZpcnN0T25MaW5lOwor
ICAgIGJvb2wgbV9pc0xhc3RPbkxpbmU7CisgICAgYm9vbCBtX2NvbnRhaW5zU3RhcnQ7CisgICAg
Ym9vbCBtX2NvbnRhaW5zRW5kOworICAgIGJvb2wgbV9pc0hvcml6b250YWw7CisgICAgYm9vbCBt
X2lzSW5GaXhlZFBvc2l0aW9uOworICAgIGJvb2wgbV9pc1J1YnlUZXh0OworICAgIGludCBtX2Nv
bHVtbk51bWJlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNl
bGVjdGlvblJlY3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Nv
dW5kSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NvdW5kSU9TLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE0ZDU0OTMzNDU0ZTAyMWQ1OTAwMWY4ZjgzMmJjYzljNzE3ZDhiNWUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU291bmRJT1MubW0KQEAgLTAs
MCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlNvdW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBzeXN0ZW1CZWVwKCkg
eyBOU0xvZyhAIldlYmNvcmUgTlNCZWVwKCkhIik7IH0gICAgCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TeXN0ZW1NZW1v
cnlJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1N5c3RlbU1lbW9yeUlPUy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjQyMjBjNTA1MTg3YTU0ODdlMWYzOTY0M2FkNDIwZGIxN2E3ZmFhZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TeXN0ZW1NZW1v
cnlJT1MuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTeXN0ZW1NZW1vcnkuaCIKKworI2luY2x1ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPHN5
cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2ludCBzeXN0ZW1NZW1vcnlM
ZXZlbCgpCit7CisjaWYgUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKKyAgICByZXR1cm4gMzU7Cisj
ZWxzZQorICAgIHN0YXRpYyBpbnQgbWVtb3J5RnJlZUxldmVsID0gLTE7CisgICAgc3RhdGljIGRv
dWJsZSBwcmV2aW91c0NoZWNrVGltZTsgCisgICAgZG91YmxlIHRpbWUgPSBjdXJyZW50VGltZSgp
OworICAgIGlmICh0aW1lIC0gcHJldmlvdXNDaGVja1RpbWUgPCAwLjEpCisgICAgICAgIHJldHVy
biBtZW1vcnlGcmVlTGV2ZWw7CisgICAgcHJldmlvdXNDaGVja1RpbWUgPSB0aW1lOworICAgIHNp
emVfdCBzaXplID0gc2l6ZW9mKG1lbW9yeUZyZWVMZXZlbCk7CisgICAgc3lzY3RsYnluYW1lKCJr
ZXJuLm1lbW9yeXN0YXR1c19sZXZlbCIsICZtZW1vcnlGcmVlTGV2ZWwsICZzaXplLCBudWxscHRy
LCAwKTsKKyAgICByZXR1cm4gbWVtb3J5RnJlZUxldmVsOworI2VuZGlmCit9CisKKyNpZiAhUExB
VEZPUk0oSU9TX1NJTVVMQVRPUikKK3N0YXRpYyBob3N0X2Jhc2ljX2luZm9fZGF0YV90IGdIb3N0
QmFzaWNJbmZvOworCitzdGF0aWMgdm9pZCBpbml0Q2FwYWJpbGl0aWVzKHZvaWQpCit7CisgICAg
Ly8gRGlzY292ZXIgb3VyIENQVSB0eXBlCisgICAgbWFjaF9wb3J0X3QgaG9zdCA9IG1hY2hfaG9z
dF9zZWxmKCk7CisgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBjb3VudCA9IEhPU1RfQkFTSUNf
SU5GT19DT1VOVDsKKyAgICBrZXJuX3JldHVybl90IHJldHVyblZhbHVlID0gaG9zdF9pbmZvKGhv
c3QsIEhPU1RfQkFTSUNfSU5GTywgcmVpbnRlcnByZXRfY2FzdDxob3N0X2luZm9fdD4oJmdIb3N0
QmFzaWNJbmZvKSwgJmNvdW50KTsKKyAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tf
c2VsZigpLCBob3N0KTsKKyAgICBpZiAocmV0dXJuVmFsdWUgIT0gS0VSTl9TVUNDRVNTKQorICAg
ICAgICBMT0dfRVJST1IoIiVzIDogaG9zdF9pbmZvKCVkKSA6ICVzLlxuIiwgX19GVU5DVElPTl9f
LCByZXR1cm5WYWx1ZSwgbWFjaF9lcnJvcl9zdHJpbmcocmV0dXJuVmFsdWUpKTsKK30KKyNlbmRp
ZgorCitzaXplX3Qgc3lzdGVtVG90YWxNZW1vcnkoKQoreworI2lmIFBMQVRGT1JNKElPU19TSU1V
TEFUT1IpCisgICAgcmV0dXJuIDUxMiAqIDEwMjQgKiAxMDI0OworI2Vsc2UKKyAgICAvLyBGSVhN
RTogQ29uc2lkZXIgdXNpbmcgQysrMTEgdGhyZWFkIHByaW1pdGl2ZXMuCisgICAgc3RhdGljIHB0
aHJlYWRfb25jZV90IGluaXRDb250cm9sID0gUFRIUkVBRF9PTkNFX0lOSVQ7CisKKyAgICBwdGhy
ZWFkX29uY2UoJmluaXRDb250cm9sLCBpbml0Q2FwYWJpbGl0aWVzKTsKKyAgICAvLyBUaGUgdmFs
dWUgaW4gZ0hvc3RCYXNpY0luZm8ubWF4X21lbSBpcyBvZnRlbiBsb3dlciB0aGFuIHRoZSBhbW91
bnQgd2UncmUKKyAgICAvLyBpbnRlcmVzdGVkIGluIChlLmcuLCBkb2VzIHRoaXMgZGV2aWNlIGhh
dmUgYXQgbGVhc3QgMjU2TUIgb2YgUkFNPykKKyAgICAvLyBSb3VuZCB0aGUgdmFsdWUgdG8gdGhl
IG5lYXJlc3QgcG93ZXIgb2YgMi4KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihleHAy
KGNlaWwobG9nMihnSG9zdEJhc2ljSW5mby5tYXhfbWVtKSkpKTsKKyNlbmRpZgorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvVGhlbWVJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaGVtZUlPUy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmYzY2M5YmE3M2Q5MTU2NGMwMzA2ZGZjNmJhMWNhNWRiNDE5NzI5MzMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGhlbWVJT1MuaApAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgVGhlbWVJT1NfaAorI2RlZmluZSBUaGVtZUlPU19oCisKKyNpbmNsdWRlICJU
aGVtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRoZW1lSU9TIDogcHVibGlj
IFRoZW1lIHsKK3B1YmxpYzoKKyAgICBUaGVtZUlPUygpIHsgfQorICAgIHZpcnR1YWwgflRoZW1l
SU9TKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUaGVt
ZUlPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGhlbWVJT1Mu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGhlbWVJT1MubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjQ2ZmMzYWIyZDZjMWIyMmViNmY1ZjJlN2Q3MDA1NWEyMTUzMjkwYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaGVtZUlPUy5tbQpAQCAtMCwwICsxLDQ2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGhlbWVJT1MuaCIKKworI2ltcG9ydCAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCit1c2luZyBuYW1lc3Bh
Y2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiBJbXBsZW1lbnQgYmVm
b3JlIGVuYWJsaW5nIFVTRShORVdfVEhFTUUpLgorCitUaGVtZSogcGxhdGZvcm1UaGVtZSgpCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRoZW1lSU9TPiB0aGVtZUlPUzsKKyAgICByZXR1
cm4gJnRoZW1lSU9TLmdldCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvVGlsZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGls
ZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMWUzYjk1NWE1MzhjNWFmMWQ0MTFkZTExNzdmYzdlYmM2ZThj
YTYzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxl
Q2FjaGUuaApAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGlsZUNhY2hl
X2gKKyNkZWZpbmUgVGlsZUNhY2hlX2gKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUg
IkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgor
I2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKKyNpZmRlZiBfX09CSkNfXworQGNsYXNzIENBTGF5ZXI7CitAY2xhc3MgVGlsZUNh
Y2hlVG9tYnN0b25lOworQGNsYXNzIFRpbGVMYXllcjsKK0BjbGFzcyBXQUtXaW5kb3c7CisjZWxz
ZQorY2xhc3MgQ0FMYXllcjsKK2NsYXNzIFRpbGVDYWNoZVRvbWJzdG9uZTsKK2NsYXNzIFRpbGVM
YXllcjsKK2NsYXNzIFdBS1dpbmRvdzsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFRpbGVHcmlkOworCitjbGFzcyBUaWxlQ2FjaGUgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFRpbGVDYWNoZSk7CitwdWJsaWM6CisgICAgVGlsZUNhY2hlKFdBS1dpbmRvdyopOwor
ICAgIH5UaWxlQ2FjaGUoKTsKKworICAgIENHRmxvYXQgc2NyZWVuU2NhbGUoKSBjb25zdDsKKwor
ICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJl
Y3QoY29uc3QgSW50UmVjdCYpOworICAgIAorICAgIHZvaWQgbGF5b3V0VGlsZXMoKTsKKyAgICB2
b2lkIGxheW91dFRpbGVzTm93KCk7CisgICAgdm9pZCBsYXlvdXRUaWxlc05vd0ZvclJlY3QoY29u
c3QgSW50UmVjdCYpOworICAgIHZvaWQgcmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzKCk7CisgICAg
dm9pZCByZW1vdmVBbGxUaWxlcygpOworICAgIHZvaWQgcmVtb3ZlRm9yZWdyb3VuZFRpbGVzKCk7
CisKKyAgICAvLyBJZiAnY29udGVudFJlcGxhY2VtZW50SW1hZ2UnIGlzIG5vdCBOVUxMLCBkcmF3
TGF5ZXIoKSBkcmF3cworICAgIC8vIGNvbnRlbnRSZXBsYWNlbWVudEltYWdlIGluc3RlYWQgb2Yg
dGhlIHBhZ2UgY29udGVudC4gV2UgYXNzdW1lIHRoZQorICAgIC8vIGltYWdlIGlzIHRvIGJlIGRy
YXduIGF0IHRoZSBvcmlnaW4gYW5kIHNjYWxlZCB0byBtYXRjaCBkZXZpY2UgcGl4ZWxzLgorICAg
IHZvaWQgc2V0Q29udGVudFJlcGxhY2VtZW50SW1hZ2UoUmV0YWluUHRyPENHSW1hZ2VSZWY+KTsK
KyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudFJlcGxhY2VtZW50SW1hZ2UoKSBjb25z
dDsKKworICAgIHZvaWQgc2V0VGlsZUJvcmRlcnNWaXNpYmxlKGJvb2wpOworICAgIGJvb2wgdGls
ZUJvcmRlcnNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV90aWxlQm9yZGVyc1Zpc2libGU7IH0K
KworICAgIHZvaWQgc2V0VGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKGJvb2wpOworICAgIGJvb2wg
dGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV90aWxlUGFpbnRDb3Vu
dGVyc1Zpc2libGU7IH0KKworICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChi
b29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkID0gZW5hYmxlZDsgfQor
ICAgIGJvb2wgYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNj
ZWxlcmF0ZWREcmF3aW5nRW5hYmxlZDsgfQorCisgICAgdm9pZCBzZXRLZWVwc1pvb21lZE91dFRp
bGVzKGJvb2wpOworICAgIGJvb2wga2VlcHNab29tZWRPdXRUaWxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fa2VlcHNab29tZWRPdXRUaWxlczsgfQorCisgICAgdm9pZCBzZXRab29tZWRPdXRTY2FsZShm
bG9hdCk7CisgICAgZmxvYXQgem9vbWVkT3V0U2NhbGUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lk
IHNldEN1cnJlbnRTY2FsZShmbG9hdCk7CisgICAgZmxvYXQgY3VycmVudFNjYWxlKCkgY29uc3Q7
CisgICAgCisgICAgYm9vbCB0aWxlc09wYXF1ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VGlsZXNP
cGFxdWUoYm9vbCk7CisgICAgCisgICAgZW51bSBUaWxpbmdNb2RlIHsKKyAgICAgICAgTm9ybWFs
LAorICAgICAgICBNaW5pbWFsLAorICAgICAgICBQYW5uaW5nLAorICAgICAgICBab29taW5nLAor
ICAgICAgICBEaXNhYmxlZCwKKyAgICAgICAgU2Nyb2xsVG9Ub3AKKyAgICB9OworICAgIFRpbGlu
Z01vZGUgdGlsaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsaW5nTW9kZTsgfQorICAgIHZv
aWQgc2V0VGlsaW5nTW9kZShUaWxpbmdNb2RlKTsKKworICAgIHR5cGVkZWYgZW51bSB7CisgICAg
ICAgIFRpbGluZ0RpcmVjdGlvblVwLAorICAgICAgICBUaWxpbmdEaXJlY3Rpb25Eb3duLAorICAg
ICAgICBUaWxpbmdEaXJlY3Rpb25MZWZ0LAorICAgICAgICBUaWxpbmdEaXJlY3Rpb25SaWdodCwK
KyAgICB9IFRpbGluZ0RpcmVjdGlvbjsKKyAgICB2b2lkIHNldFRpbGluZ0RpcmVjdGlvbihUaWxp
bmdEaXJlY3Rpb24pOworICAgIFRpbGluZ0RpcmVjdGlvbiB0aWxpbmdEaXJlY3Rpb24oKSBjb25z
dDsKKworICAgIGJvb2wgaGFzUGVuZGluZ0RyYXcoKSBjb25zdDsKKworICAgIHZvaWQgaG9zdExh
eWVyU2l6ZUNoYW5nZWQoKTsKKworICAgIHN0YXRpYyB2b2lkIHNldExheWVyUG9vbENhcGFjaXR5
KHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgdm9pZCBkcmFpbkxheWVyUG9vbCgpOworCisgICAgLy8g
TG9nZ2luZworICAgIHZvaWQgZHVtcFRpbGVzKCk7CisKKyAgICAvLyBJbnRlcm5hbAorICAgIHZv
aWQgZG9MYXlvdXRUaWxlcygpOworICAgIHZvaWQgZHJhd0xheWVyKFRpbGVMYXllciosIENHQ29u
dGV4dFJlZik7CisgICAgdm9pZCBwcmVwYXJlVG9EcmF3KCk7CisgICAgdm9pZCBmaW5pc2hlZENy
ZWF0aW5nVGlsZXMoYm9vbCBkaWRDcmVhdGVUaWxlcywgYm9vbCBjcmVhdGVNb3JlKTsKKyAgICBG
bG9hdFJlY3QgdmlzaWJsZVJlY3RJbkxheWVyKENBTGF5ZXIgKikgY29uc3Q7CisgICAgQ0FMYXll
ciogaG9zdExheWVyKCkgY29uc3Q7CisgICAgdW5zaWduZWQgdGlsZUNhcGFjaXR5Rm9yR3JpZChU
aWxlR3JpZCopOworICAgIENvbG9yIGNvbG9yRm9yR3JpZFRpbGVCb3JkZXIoVGlsZUdyaWQqKSBj
b25zdDsKKworICAgIHZvaWQgZG9QZW5kaW5nUmVwYWludHMoKTsKKworICAgIGJvb2wgaXNTcGVj
dWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU3BlY3VsYXRp
dmVUaWxlQ3JlYXRpb25FbmFibGVkOyB9CisgICAgdm9pZCBzZXRTcGVjdWxhdGl2ZVRpbGVDcmVh
dGlvbkVuYWJsZWQoYm9vbCk7CisgICAgCisgICAgZW51bSBTeW5jaHJvbm91c1RpbGVDcmVhdGlv
bk1vZGUgeyBDb3ZlclZpc2libGVPbmx5LCBDb3ZlclNwZWN1bGF0aXZlIH07CisKK3ByaXZhdGU6
CisgICAgVGlsZUdyaWQqIGFjdGl2ZVRpbGVHcmlkKCkgY29uc3Q7CisgICAgVGlsZUdyaWQqIGlu
YWN0aXZlVGlsZUdyaWQoKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlVGlsaW5nTW9kZSgpOwor
ICAgIGJvb2wgaXNUaWxlSW52YWxpZGF0aW9uU3VzcGVuZGVkKCkgY29uc3Q7CisgICAgYm9vbCBp
c1RpbGVDcmVhdGlvblN1c3BlbmRlZCgpIGNvbnN0OworICAgIHZvaWQgZmx1c2hTYXZlZERpc3Bs
YXlSZWN0cygpOworICAgIHZvaWQgaW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCk7CisgICAgdm9pZCBzZXRab29tZWRPdXRTY2FsZUludGVybmFsKGZsb2F0KTsKKyAgICB2
b2lkIGNvbW1pdFNjYWxlQ2hhbmdlKCk7CisgICAgdm9pZCBicmluZ0FjdGl2ZVRpbGVHcmlkVG9G
cm9udCgpOworICAgIHZvaWQgYWRqdXN0VGlsZUdyaWRUcmFuc2Zvcm1zKCk7CisgICAgdm9pZCBy
ZW1vdmVBbGxOb25WaXNpYmxlVGlsZXNJbnRlcm5hbCgpOworICAgIHZvaWQgY3JlYXRlVGlsZXNJ
bkFjdGl2ZUdyaWQoU3luY2hyb25vdXNUaWxlQ3JlYXRpb25Nb2RlKTsKKyAgICB2b2lkIHNjaGVk
dWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50KCk7CisKKyAgICB2b2lkIHRpbGVDcmVhdGlv
blRpbWVyRmlyZWQoVGltZXI8VGlsZUNhY2hlPiopOworCisgICAgdm9pZCBkcmF3UmVwbGFjZW1l
bnRJbWFnZShUaWxlTGF5ZXIqLCBDR0NvbnRleHRSZWYsIENHSW1hZ2VSZWYpOworICAgIHZvaWQg
ZHJhd1dpbmRvd0NvbnRlbnQoVGlsZUxheWVyKiwgQ0dDb250ZXh0UmVmLCBDR1JlY3QgZGlydHlS
ZWN0KTsKKworICAgIFdBS1dpbmRvdyogbV93aW5kb3c7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gbV9jb250ZW50UmVwbGFjZW1lbnRJbWFnZTsKKworICAgIGJvb2wgbV9rZWVwc1pvb21l
ZE91dFRpbGVzOworCisgICAgYm9vbCBtX2hhc1BlbmRpbmdMYXlvdXRUaWxlczsKKyAgICBib29s
IG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01vZGU7CisgICAgLy8gRW5zdXJlIHRoZXJlIGFyZSBu
byBhc3luYyBjYWxscyBvbiBhIGRlYWQgdGlsZSBjYWNoZS4KKyAgICBSZXRhaW5QdHI8VGlsZUNh
Y2hlVG9tYnN0b25lPiBtX3RvbWJzdG9uZTsKKworICAgIFRpbGluZ01vZGUgbV90aWxpbmdNb2Rl
OworICAgIFRpbGluZ0RpcmVjdGlvbiBtX3RpbGluZ0RpcmVjdGlvbjsKKworICAgIEludFNpemUg
bV90aWxlU2l6ZTsKKyAgICBib29sIG1fdGlsZXNPcGFxdWU7CisKKyAgICBib29sIG1fdGlsZUJv
cmRlcnNWaXNpYmxlOworICAgIGJvb2wgbV90aWxlUGFpbnRDb3VudGVyc1Zpc2libGU7CisgICAg
Ym9vbCBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQ7CisgICAgYm9vbCBtX2lzU3BlY3VsYXRp
dmVUaWxlQ3JlYXRpb25FbmFibGVkOworCisgICAgYm9vbCBtX2RpZENhbGxXaWxsU3RhcnRTY3Jv
bGxpbmdPclpvb21pbmc7CisgICAgT3duUHRyPFRpbGVHcmlkPiBtX3pvb21lZE91dFRpbGVHcmlk
OworICAgIE93blB0cjxUaWxlR3JpZD4gbV96b29tZWRJblRpbGVHcmlkOworCisgICAgVGltZXI8
VGlsZUNhY2hlPiBtX3RpbGVDcmVhdGlvblRpbWVyOworCisgICAgVmVjdG9yPEludFJlY3Q+IG1f
c2F2ZWREaXNwbGF5UmVjdHM7CisKKyAgICBmbG9hdCBtX2N1cnJlbnRTY2FsZTsKKworICAgIGZs
b2F0IG1fcGVuZGluZ1NjYWxlOworICAgIGZsb2F0IG1fcGVuZGluZ1pvb21lZE91dFNjYWxlOwor
CisgICAgbXV0YWJsZSBNdXRleCBtX3RpbGVNdXRleDsKKyAgICBtdXRhYmxlIE11dGV4IG1fc2F2
ZWREaXNwbGF5UmVjdE11dGV4OworICAgIG11dGFibGUgTXV0ZXggbV9jb250ZW50UmVwbGFjZW1l
bnRJbWFnZU11dGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gVGlsZUNhY2hlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlQ2FjaGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVGlsZUNhY2hlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBjZWMwN2Q2YmUzYTg3ZmY3YWVjMWI4
NTkyMzlmMzBkMDhmNWNjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVGlsZUNhY2hlLm1tCkBAIC0wLDAgKzEsODIyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRpbGVDYWNoZS5oIgorCisjaWYgUExBVEZPUk0o
SU9TKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lbW9yeVByZXNzdXJlSGFu
ZGxlci5oIgorI2luY2x1ZGUgIlN5c3RlbU1lbW9yeS5oIgorI2luY2x1ZGUgIlRpbGVHcmlkLmgi
CisjaW5jbHVkZSAiVGlsZUdyaWRUaWxlLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyLmgiCisjaW5j
bHVkZSAiVGlsZUxheWVyUG9vbC5oIgorI2luY2x1ZGUgIldBS1dpbmRvdy5oIgorI2luY2x1ZGUg
IldLR3JhcGhpY3MuaCIKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaW5j
bHVkZSAiV2ViQ29yZVRocmVhZFJ1bi5oIgorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29y
ZS5oPgorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZVByaXZhdGUuaD4KKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KKworQGludGVyZmFjZSBXQUtWaWV3IChXZWJWaWV3RXh0cmFz
KQorLSAodm9pZClfZGlzcGF0Y2hUaWxlRGlkRHJhdzooQ0FMYXllciopdGlsZTsKKy0gKHZvaWQp
X3dpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZzsKKy0gKHZvaWQpX2RpZEZpbmlzaFNjcm9sbGlu
Z09yWm9vbWluZzsKKy0gKHZvaWQpX2Rpc3BhdGNoVGlsZURpZERyYXc7CistICh2b2lkKV9zY2hl
ZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5nVGlsZUNhY2hlUmVwYWludDsKK0BlbmQKKworQGludGVy
ZmFjZSBUaWxlQ2FjaGVUb21ic3RvbmUgOiBOU09iamVjdCB7CisgICAgQk9PTCBkZWFkOworfQor
QHByb3BlcnR5KGdldHRlcj1pc0RlYWQpIEJPT0wgZGVhZDsKKworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gVGlsZUNhY2hlVG9tYnN0b25lCisKK0BzeW50aGVzaXplIGRlYWQ7CisKK0BlbmQKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitUaWxlQ2FjaGU6OlRpbGVDYWNoZShXQUtXaW5kb3cqIHdp
bmRvdykKKyAgICA6IG1fd2luZG93KHdpbmRvdykKKyAgICAsIG1fa2VlcHNab29tZWRPdXRUaWxl
cyhmYWxzZSkKKyAgICAsIG1faGFzUGVuZGluZ0xheW91dFRpbGVzKGZhbHNlKQorICAgICwgbV9o
YXNQZW5kaW5nVXBkYXRlVGlsaW5nTW9kZShmYWxzZSkKKyAgICAsIG1fdG9tYnN0b25lKGFkb3B0
TlMoW1tUaWxlQ2FjaGVUb21ic3RvbmUgYWxsb2NdIGluaXRdKSkKKyAgICAsIG1fdGlsaW5nTW9k
ZShOb3JtYWwpCisgICAgLCBtX3RpbGluZ0RpcmVjdGlvbihUaWxpbmdEaXJlY3Rpb25Eb3duKQor
ICAgICwgbV90aWxlU2l6ZSg1MTIsIDUxMikKKyAgICAsIG1fdGlsZXNPcGFxdWUodHJ1ZSkKKyAg
ICAsIG1fdGlsZUJvcmRlcnNWaXNpYmxlKGZhbHNlKQorICAgICwgbV90aWxlUGFpbnRDb3VudGVy
c1Zpc2libGUoZmFsc2UpCisgICAgLCBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoZmFsc2Up
CisgICAgLCBtX2lzU3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkKHRydWUpCisgICAgLCBt
X2RpZENhbGxXaWxsU3RhcnRTY3JvbGxpbmdPclpvb21pbmcoZmFsc2UpCisgICAgLCBtX3pvb21l
ZE91dFRpbGVHcmlkKFBhc3NPd25QdHI8VGlsZUdyaWQ+KCkpCisgICAgLCBtX3pvb21lZEluVGls
ZUdyaWQoUGFzc093blB0cjxUaWxlR3JpZD4oKSkKKyAgICAsIG1fdGlsZUNyZWF0aW9uVGltZXIo
dGhpcywgJlRpbGVDYWNoZTo6dGlsZUNyZWF0aW9uVGltZXJGaXJlZCkKKyAgICAsIG1fY3VycmVu
dFNjYWxlKDEuZikKKyAgICAsIG1fcGVuZGluZ1NjYWxlKDApCisgICAgLCBtX3BlbmRpbmdab29t
ZWRPdXRTY2FsZSgwKQoreworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQgPSBUaWxlR3JpZDo6Y3Jl
YXRlKHRoaXMsIG1fdGlsZVNpemUpOworICAgIFtob3N0TGF5ZXIoKSBpbnNlcnRTdWJsYXllcjpt
X3pvb21lZE91dFRpbGVHcmlkLT50aWxlSG9zdExheWVyKCkgYXRJbmRleDowXTsKKyAgICBob3N0
TGF5ZXJTaXplQ2hhbmdlZCgpOworfQorCitUaWxlQ2FjaGU6On5UaWxlQ2FjaGUoKQoreworICAg
IFttX3RvbWJzdG9uZS5nZXQoKSBzZXREZWFkOnRydWVdOworfQorCitDR0Zsb2F0IFRpbGVDYWNo
ZTo6c2NyZWVuU2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBbbV93aW5kb3cgc2NyZWVuU2Nh
bGVdOworfQorCitDQUxheWVyKiBUaWxlQ2FjaGU6Omhvc3RMYXllcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFttX3dpbmRvdyBob3N0TGF5ZXJdOworfQorCitGbG9hdFJlY3QgVGlsZUNhY2hlOjp2
aXNpYmxlUmVjdEluTGF5ZXIoQ0FMYXllciAqbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIFts
YXllciBjb252ZXJ0UmVjdDpbbV93aW5kb3cgZXh0ZW5kZWRWaXNpYmxlUmVjdF0gZnJvbUxheWVy
Omhvc3RMYXllcigpXTsKK30KKworYm9vbCBUaWxlQ2FjaGU6OnRpbGVzT3BhcXVlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV90aWxlc09wYXF1ZTsKK30KKyAgICAKK1RpbGVHcmlkKiBUaWxlQ2Fj
aGU6OmFjdGl2ZVRpbGVHcmlkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fa2VlcHNab29tZWRPdXRU
aWxlcykKKyAgICAgICAgcmV0dXJuIG1fem9vbWVkT3V0VGlsZUdyaWQuZ2V0KCk7CisgICAgaWYg
KG1fdGlsaW5nTW9kZSA9PSBab29taW5nKQorICAgICAgICByZXR1cm4gbV96b29tZWRPdXRUaWxl
R3JpZC5nZXQoKTsKKyAgICBpZiAobV96b29tZWRJblRpbGVHcmlkICYmIG1fY3VycmVudFNjYWxl
ID09IG1fem9vbWVkSW5UaWxlR3JpZC0+c2NhbGUoKSkKKyAgICAgICAgcmV0dXJuIG1fem9vbWVk
SW5UaWxlR3JpZC5nZXQoKTsKKyAgICByZXR1cm4gbV96b29tZWRPdXRUaWxlR3JpZC5nZXQoKTsK
K30KKworVGlsZUdyaWQqIFRpbGVDYWNoZTo6aW5hY3RpdmVUaWxlR3JpZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGFjdGl2ZVRpbGVHcmlkKCkgPT0gbV96b29tZWRPdXRUaWxlR3JpZCA/IG1fem9v
bWVkSW5UaWxlR3JpZC5nZXQoKSA6IG1fem9vbWVkT3V0VGlsZUdyaWQuZ2V0KCk7Cit9CisKK3Zv
aWQgVGlsZUNhY2hlOjpzZXRUaWxlc09wYXF1ZShib29sIG9wYXF1ZSkKK3sKKyAgICBpZiAobV90
aWxlc09wYXF1ZSA9PSBvcGFxdWUpCisgICAgICAgIHJldHVybjsKKworICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3RpbGVNdXRleCk7CisKKyAgICBtX3RpbGVzT3BhcXVlID0gb3BhcXVlOworICAg
IG1fem9vbWVkT3V0VGlsZUdyaWQtPnVwZGF0ZVRpbGVPcGFjaXR5KCk7CisgICAgaWYgKG1fem9v
bWVkSW5UaWxlR3JpZCkKKyAgICAgICAgbV96b29tZWRJblRpbGVHcmlkLT51cGRhdGVUaWxlT3Bh
Y2l0eSgpOworfQorCit2b2lkIFRpbGVDYWNoZTo6ZG9MYXlvdXRUaWxlcygpCit7CisgICAgaWYg
KGlzVGlsZUNyZWF0aW9uU3VzcGVuZGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAgVGlsZUdyaWQqIGFjdGl2ZUdyaWQgPSBh
Y3RpdmVUaWxlR3JpZCgpOworICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGFyZW4ndCBhY3R1YWxseSBj
cmVhdGluZyB0aWxlcyBpbiB0aGUgaW5hY3RpdmUgZ3JpZCwgd2UKKyAgICAvLyBzdGlsbCBuZWVk
IHRvIGRyb3AgaW52YWxpZCB0aWxlcyBpbiByZXNwb25zZSB0byBhIGxheW91dC4KKyAgICAvLyBT
ZWUgPHJkYXI6Ly9wcm9ibGVtLzk4Mzk4Njc+LgorICAgIGlmIChUaWxlR3JpZCogaW5hY3RpdmVH
cmlkID0gaW5hY3RpdmVUaWxlR3JpZCgpKQorICAgICAgICBpbmFjdGl2ZUdyaWQtPmRyb3BJbnZh
bGlkVGlsZXMoKTsKKyAgICBpZiAoYWN0aXZlR3JpZC0+Y2hlY2tEb1NpbmdsZVRpbGVMYXlvdXQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGNyZWF0ZVRpbGVzSW5BY3RpdmVHcmlkKENvdmVyVmlz
aWJsZU9ubHkpOworfQorCit2b2lkIFRpbGVDYWNoZTo6aG9zdExheWVyU2l6ZUNoYW5nZWQoKQor
eworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnVwZGF0ZUhvc3RMYXllclNpemUoKTsKKyAgICBp
ZiAobV96b29tZWRJblRpbGVHcmlkKQorICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPnVwZGF0
ZUhvc3RMYXllclNpemUoKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OnNldEtlZXBzWm9vbWVkT3V0
VGlsZXMoYm9vbCBrZWVwKQoreworICAgIG1fa2VlcHNab29tZWRPdXRUaWxlcyA9IGtlZXA7Cit9
CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRDdXJyZW50U2NhbGUoZmxvYXQgc2NhbGUpCit7CisgICAg
QVNTRVJUKHNjYWxlID4gMCk7CisKKyAgICBpZiAoY3VycmVudFNjYWxlKCkgPT0gc2NhbGUpIHsK
KyAgICAgICAgbV9wZW5kaW5nU2NhbGUgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1fcGVuZGluZ1NjYWxlID0gc2NhbGU7CisgICAgaWYgKG1fdGlsaW5nTW9kZSA9PSBEaXNhYmxl
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIGNvbW1pdFNjYWxlQ2hhbmdlKCk7CisKKyAgICBpZiAo
IWtlZXBzWm9vbWVkT3V0VGlsZXMoKSAmJiAhaXNUaWxlSW52YWxpZGF0aW9uU3VzcGVuZGVkKCkp
IHsKKyAgICAgICAgLy8gVGlsZSBpbnZhbGlkYXRpb24gaXMgbm9ybWFsbHkgc3VzcGVuZGVkIGR1
cmluZyB6b29taW5nIGJ5IFVJS2l0IGJ1dCBzb21lIGFwcGxpY2F0aW9ucworICAgICAgICAvLyB1
c2luZyBjdXN0b20gc2Nyb2xsdmlld3MgbWF5IHpvb20gd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBj
YWxsYmFja3MuIEludmFsaWRhdGUgdGhlIHRpbGVzIGV4cGxpY2l0bHkuCisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAgICAgIGFjdGl2ZVRpbGVHcmlkKCktPmRy
b3BBbGxUaWxlcygpOworICAgICAgICBhY3RpdmVUaWxlR3JpZCgpLT5jcmVhdGVUaWxlcyhDb3Zl
clZpc2libGVPbmx5KTsKKyAgICB9Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRab29tZWRPdXRT
Y2FsZShmbG9hdCBzY2FsZSkKK3sKKyAgICBBU1NFUlQoc2NhbGUgPiAwKTsKKworICAgIGlmICh6
b29tZWRPdXRTY2FsZSgpID09IHNjYWxlKSB7CisgICAgICAgIG1fcGVuZGluZ1pvb21lZE91dFNj
YWxlID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BlbmRpbmdab29tZWRPdXRT
Y2FsZSA9IHNjYWxlOworICAgIGlmIChtX3RpbGluZ01vZGUgPT0gRGlzYWJsZWQpCisgICAgICAg
IHJldHVybjsKKyAgICBjb21taXRTY2FsZUNoYW5nZSgpOworfQorICAgIAordm9pZCBUaWxlQ2Fj
aGU6OmNvbW1pdFNjYWxlQ2hhbmdlKCkKK3sKKyAgICBBU1NFUlQobV9wZW5kaW5nWm9vbWVkT3V0
U2NhbGUgfHwgbV9wZW5kaW5nU2NhbGUpOworICAgIEFTU0VSVChtX3RpbGluZ01vZGUgIT0gRGlz
YWJsZWQpOworICAgIAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisKKyAg
ICBpZiAobV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUpIHsKKyAgICAgICAgbV96b29tZWRPdXRUaWxl
R3JpZC0+c2V0U2NhbGUobV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUpOworICAgICAgICBtX3BlbmRp
bmdab29tZWRPdXRTY2FsZSA9IDA7CisgICAgfQorICAgIAorICAgIGlmICghbV9rZWVwc1pvb21l
ZE91dFRpbGVzKSB7CisgICAgICAgIEFTU0VSVChhY3RpdmVUaWxlR3JpZCgpID09IG1fem9vbWVk
T3V0VGlsZUdyaWQpOworICAgICAgICBpZiAobV9wZW5kaW5nU2NhbGUpIHsKKyAgICAgICAgICAg
IG1fY3VycmVudFNjYWxlID0gbV9wZW5kaW5nU2NhbGU7CisgICAgICAgICAgICBtX3pvb21lZE91
dFRpbGVHcmlkLT5zZXRTY2FsZShtX2N1cnJlbnRTY2FsZSk7CisgICAgICAgIH0KKyAgICAgICAg
bV9wZW5kaW5nU2NhbGUgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
cGVuZGluZ1NjYWxlKSB7CisgICAgICAgIG1fY3VycmVudFNjYWxlID0gbV9wZW5kaW5nU2NhbGU7
CisgICAgICAgIG1fcGVuZGluZ1NjYWxlID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9jdXJyZW50
U2NhbGUgIT0gbV96b29tZWRPdXRUaWxlR3JpZC0+c2NhbGUoKSkgeworICAgICAgICBpZiAoIW1f
em9vbWVkSW5UaWxlR3JpZCkgeworICAgICAgICAgICAgbV96b29tZWRJblRpbGVHcmlkID0gVGls
ZUdyaWQ6OmNyZWF0ZSh0aGlzLCBtX3RpbGVTaXplKTsKKyAgICAgICAgICAgIFtob3N0TGF5ZXIo
KSBhZGRTdWJsYXllcjptX3pvb21lZEluVGlsZUdyaWQtPnRpbGVIb3N0TGF5ZXIoKV07CisgICAg
ICAgICAgICBob3N0TGF5ZXJTaXplQ2hhbmdlZCgpOworICAgICAgICB9CisgICAgICAgIG1fem9v
bWVkSW5UaWxlR3JpZC0+c2V0U2NhbGUobV9jdXJyZW50U2NhbGUpOworICAgIH0KKworICAgIC8v
IEtlZXAgdGhlIGN1cnJlbnQgb3JkZXJpbmcgZHVyaW5nIHpvb21pbmcuCisgICAgaWYgKG1fdGls
aW5nTW9kZSAhPSBab29taW5nKQorICAgICAgICBicmluZ0FjdGl2ZVRpbGVHcmlkVG9Gcm9udCgp
OworCisgICAgYWRqdXN0VGlsZUdyaWRUcmFuc2Zvcm1zKCk7CisgICAgbGF5b3V0VGlsZXMoKTsK
K30KKwordm9pZCBUaWxlQ2FjaGU6OmJyaW5nQWN0aXZlVGlsZUdyaWRUb0Zyb250KCkKK3sKKyAg
ICBUaWxlR3JpZCogYWN0aXZlR3JpZCA9IGFjdGl2ZVRpbGVHcmlkKCk7CisgICAgVGlsZUdyaWQq
IG90aGVyR3JpZCA9IGluYWN0aXZlVGlsZUdyaWQoKTsKKyAgICBpZiAoIW90aGVyR3JpZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIENBTGF5ZXIqIGZyb250TGF5ZXIgPSBhY3RpdmVHcmlkLT50aWxl
SG9zdExheWVyKCk7CisgICAgQ0FMYXllciogb3RoZXJMYXllciA9IG90aGVyR3JpZC0+dGlsZUhv
c3RMYXllcigpOworICAgIFtob3N0TGF5ZXIoKSBpbnNlcnRTdWJsYXllcjpmcm9udExheWVyIGFi
b3ZlOm90aGVyTGF5ZXJdOworfQorICAgIAordm9pZCBUaWxlQ2FjaGU6OmFkanVzdFRpbGVHcmlk
VHJhbnNmb3JtcygpCit7CisgICAgQ0FMYXllciogem9vbWVkT3V0SG9zdExheWVyID0gbV96b29t
ZWRPdXRUaWxlR3JpZC0+dGlsZUhvc3RMYXllcigpOworICAgIGZsb2F0IHRyYW5zZm9ybVNjYWxl
ID0gY3VycmVudFNjYWxlKCkgLyB6b29tZWRPdXRTY2FsZSgpOworICAgIFt6b29tZWRPdXRIb3N0
TGF5ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RNYWtlU2NhbGUodHJhbnNmb3JtU2NhbGUs
IHRyYW5zZm9ybVNjYWxlLCAxLjBmKV07CisgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+dXBkYXRl
SG9zdExheWVyU2l6ZSgpOworfQorCit2b2lkIFRpbGVDYWNoZTo6bGF5b3V0VGlsZXMoKQorewor
ICAgIGlmIChtX2hhc1BlbmRpbmdMYXlvdXRUaWxlcykKKyAgICAgICAgcmV0dXJuOworICAgIG1f
aGFzUGVuZGluZ0xheW91dFRpbGVzID0gdHJ1ZTsKKworICAgIFRpbGVDYWNoZVRvbWJzdG9uZSAq
dG9tYnN0b25lID0gbV90b21ic3RvbmUuZ2V0KCk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAg
ICAgIGlmIChbdG9tYnN0b25lIGlzRGVhZF0pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IG1faGFzUGVuZGluZ0xheW91dFRpbGVzID0gZmFsc2U7CisgICAgICAgIGRvTGF5b3V0VGlsZXMo
KTsKKyAgICB9KTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmxheW91dFRpbGVzTm93KCkKK3sKKyAg
ICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworCisgICAgLy8gbGF5b3V0
VGlsZXNOb3coKSBpcyBjYWxsZWQgYWZ0ZXIgYSB6b29tLCB3aGlsZSB0aGUgdGlsZSBtb2RlIGlz
IHN0aWxsIHNldCB0byBab29taW5nLgorICAgIC8vIElmIHdlIGNoZWNrZWQgZm9yIGlzVGlsZUNy
ZWF0aW9uU3VzcGVuZGVkIGhlcmUsIHRoYXQgd291bGQgY2F1c2UgPHJkYXI6Ly9wcm9ibGVtLzg0
MzQxMTI+IChQYWdlIGZsYXNoZXMgYWZ0ZXIgem9vbWluZyBpbi9vdXQpLgorICAgIGlmIChtX3Rp
bGluZ01vZGUgPT0gRGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBGSVhN
RTogbGF5b3V0VGlsZXNOb3cgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBzdGF0ZSBoYXMgYmVlbiBz
ZXQgdG8gbm9uLXpvb21pbmcgYW5kIHRoZSBhY3RpdmUgZ3JpZCBpcyB0aGUgZmluYWwgb25lLiAK
KyAgICAvLyBGaXggdGhpcyBpbiBVSUtpdCBzaWRlIChwZXJoYXBzIGFsc28gZ2V0dGluZyByaWQg
b2YgdGhpcyBjYWxsKSBhbmQgcmVtb3ZlIHRoaXMgY29kZSBhZnRlcndhcmRzLgorICAgIC8vIDxy
ZGFyOi8vcHJvYmxlbS85NjcyOTkzPgorICAgIFRpbGluZ01vZGUgc2F2ZWRUaWxpbmdNb2RlID0g
bV90aWxpbmdNb2RlOworICAgIGlmIChtX3RpbGluZ01vZGUgPT0gWm9vbWluZykKKyAgICAgICAg
bV90aWxpbmdNb2RlID0gTWluaW1hbDsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVN
dXRleCk7CisgICAgVGlsZUdyaWQqIGFjdGl2ZUdyaWQgPSBhY3RpdmVUaWxlR3JpZCgpOworICAg
IGlmIChhY3RpdmVHcmlkLT5jaGVja0RvU2luZ2xlVGlsZUxheW91dCgpKSB7CisgICAgICAgIG1f
dGlsaW5nTW9kZSA9IHNhdmVkVGlsaW5nTW9kZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjcmVhdGVUaWxlc0luQWN0aXZlR3JpZChDb3ZlclZpc2libGVPbmx5KTsKKyAgICBtX3RpbGlu
Z01vZGUgPSBzYXZlZFRpbGluZ01vZGU7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpsYXlvdXRUaWxl
c05vd0ZvclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFk
SXNMb2NrZWRPckRpc2FibGVkKCkpOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRl
eCk7CisKKyAgICBhY3RpdmVUaWxlR3JpZCgpLT5hZGRUaWxlc0NvdmVyaW5nUmVjdChyZWN0KTsK
K30KKwordm9pZCBUaWxlQ2FjaGU6OnJlbW92ZUFsbE5vblZpc2libGVUaWxlcygpCit7CisgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKKyAgICByZW1vdmVBbGxOb25WaXNpYmxl
VGlsZXNJbnRlcm5hbCgpOworfQorCit2b2lkIFRpbGVDYWNoZTo6cmVtb3ZlQWxsTm9uVmlzaWJs
ZVRpbGVzSW50ZXJuYWwoKQoreworICAgIFRpbGVHcmlkKiBhY3RpdmVHcmlkID0gYWN0aXZlVGls
ZUdyaWQoKTsKKyAgICBpZiAoa2VlcHNab29tZWRPdXRUaWxlcygpICYmIGFjdGl2ZUdyaWQgPT0g
bV96b29tZWRJblRpbGVHcmlkICYmIGFjdGl2ZUdyaWQtPmhhc1RpbGVzKCkpCisgICAgICAgIG1f
em9vbWVkT3V0VGlsZUdyaWQtPmRyb3BBbGxUaWxlcygpOworCisgICAgSW50UmVjdCBhY3RpdmVU
aWxlQm91bmRzID0gYWN0aXZlR3JpZC0+Ym91bmRzKCk7CisgICAgaWYgKGFjdGl2ZVRpbGVCb3Vu
ZHMud2lkdGgoKSA8PSBtX3RpbGVTaXplLndpZHRoKCkgJiYgYWN0aXZlVGlsZUJvdW5kcy5oZWln
aHQoKSA8PSBtX3RpbGVTaXplLmhlaWdodCgpKSB7CisgICAgICAgIC8vIElmIHRoZSB2aWV3IGlz
IHNtYWxsZXIgdGhhbiBhIHRpbGUsIGtlZXAgdGhlIHRpbGUgZXZlbiBpZiBpdCBpcyBub3Qgdmlz
aWJsZS4KKyAgICAgICAgYWN0aXZlR3JpZC0+ZHJvcFRpbGVzT3V0c2lkZVJlY3QoYWN0aXZlVGls
ZUJvdW5kcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhY3RpdmVHcmlkLT5kcm9w
VGlsZXNPdXRzaWRlUmVjdChhY3RpdmVHcmlkLT52aXNpYmxlUmVjdCgpKTsKK30KKwordm9pZCBU
aWxlQ2FjaGU6OnJlbW92ZUFsbFRpbGVzKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90
aWxlTXV0ZXgpOworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPmRyb3BBbGxUaWxlcygpOworICAg
IGlmIChtX3pvb21lZEluVGlsZUdyaWQpCisgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+ZHJv
cEFsbFRpbGVzKCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpyZW1vdmVGb3JlZ3JvdW5kVGlsZXMo
KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAgaWYgKCFrZWVw
c1pvb21lZE91dFRpbGVzKCkpCisgICAgICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPmRyb3BBbGxU
aWxlcygpOworICAgIGlmIChtX3pvb21lZEluVGlsZUdyaWQpCisgICAgICAgIG1fem9vbWVkSW5U
aWxlR3JpZC0+ZHJvcEFsbFRpbGVzKCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRDb250ZW50
UmVwbGFjZW1lbnRJbWFnZShSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudFJlcGxhY2VtZW50
SW1hZ2UpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fY29udGVudFJlcGxhY2VtZW50SW1h
Z2VNdXRleCk7CisgICAgbV9jb250ZW50UmVwbGFjZW1lbnRJbWFnZSA9IGNvbnRlbnRSZXBsYWNl
bWVudEltYWdlOworfQorCitSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gVGlsZUNhY2hlOjpjb250ZW50
UmVwbGFjZW1lbnRJbWFnZSgpIGNvbnN0Cit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fY29u
dGVudFJlcGxhY2VtZW50SW1hZ2VNdXRleCk7CisgICAgcmV0dXJuIG1fY29udGVudFJlcGxhY2Vt
ZW50SW1hZ2U7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlQm9yZGVyc1Zpc2libGUoYm9v
bCBmbGFnKQoreworICAgIGlmIChmbGFnID09IG1fdGlsZUJvcmRlcnNWaXNpYmxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3RpbGVCb3JkZXJzVmlzaWJsZSA9IGZsYWc7CisgICAgbV96b29t
ZWRPdXRUaWxlR3JpZC0+dXBkYXRlVGlsZUJvcmRlclZpc2liaWxpdHkoKTsKKyAgICBpZiAobV96
b29tZWRJblRpbGVHcmlkKQorICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPnVwZGF0ZVRpbGVC
b3JkZXJWaXNpYmlsaXR5KCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlUGFpbnRDb3Vu
dGVyc1Zpc2libGUoYm9vbCBmbGFnKQoreworICAgIG1fdGlsZVBhaW50Q291bnRlcnNWaXNpYmxl
ID0gZmxhZzsKKyAgICAvLyBUaGUgbnVtYmVycyB3aWxsIHNob3cgdXAgdGhlIG5leHQgdGltZSB0
aGUgdGlsZXMgcGFpbnQuCit9CisKK3ZvaWQgVGlsZUNhY2hlOjpmaW5pc2hlZENyZWF0aW5nVGls
ZXMoYm9vbCBkaWRDcmVhdGVUaWxlcywgYm9vbCBjcmVhdGVNb3JlKQoreworICAgIC8vIFdlIG5l
ZWQgdG8gZW5zdXJlIHRoYXQgYWxsIHRpbGVzIGFyZSBzaG93aW5nIHRoZSBzYW1lIHZlcnNpb24g
b2YgdGhlIGNvbnRlbnQuCisgICAgaWYgKGRpZENyZWF0ZVRpbGVzICYmICFtX3NhdmVkRGlzcGxh
eVJlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgZmx1c2hTYXZlZERpc3BsYXlSZWN0cygpOworCisg
ICAgaWYgKGtlZXBzWm9vbWVkT3V0VGlsZXMoKSkgeworICAgICAgICBpZiAobV96b29tZWRJblRp
bGVHcmlkICYmIGFjdGl2ZVRpbGVHcmlkKCkgPT0gbV96b29tZWRPdXRUaWxlR3JpZCAmJiBtX3Rp
bGluZ01vZGUgIT0gWm9vbWluZyAmJiBtX3pvb21lZEluVGlsZUdyaWQtPmhhc1RpbGVzKCkpIHsK
KyAgICAgICAgICAgIC8vIFRoaXMgQ0EgdHJhbnNhY3Rpb24gd2lsbCBjb3ZlciB0aGUgc2NyZWVu
IHdpdGggdG9wIGxldmVsIHRpbGVzLgorICAgICAgICAgICAgLy8gV2UgY2FuIHJlbW92ZSB6b29t
ZWQtaW4gdGlsZXMgd2l0aG91dCBmbGFzaGluZy4KKyAgICAgICAgICAgIG1fem9vbWVkSW5UaWxl
R3JpZC0+ZHJvcEFsbFRpbGVzKCk7CisgICAgICAgIH0gZWxzZSBpZiAoYWN0aXZlVGlsZUdyaWQo
KSA9PSBtX3pvb21lZEluVGlsZUdyaWQpIHsKKyAgICAgICAgICAgIC8vIFBhc3MgdGhlIG1pbmlt
dW0gcG9zc2libGUgZGlzdGFuY2UgdG8gY29uc2lkZXIgYWxsIHRpbGVzLCBldmVuIHZpc2libGUg
b25lcy4KKyAgICAgICAgICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPmRyb3BEaXN0YW50VGlsZXMo
MCwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptaW4oKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBLZWVwIGNyZWF0aW5nIHRpbGVzIHVudGlsIHRoZSB3aG9sZSBjb3ZlclJlY3Qg
aXMgY292ZXJlZC4KKyAgICBpZiAoY3JlYXRlTW9yZSkKKyAgICAgICAgbV90aWxlQ3JlYXRpb25U
aW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjp0aWxlQ3JlYXRpb25U
aW1lckZpcmVkKFRpbWVyPFRpbGVDYWNoZT4qKQoreworICAgIGlmIChpc1RpbGVDcmVhdGlvblN1
c3BlbmRlZCgpKQorICAgICAgICByZXR1cm47CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGls
ZU11dGV4KTsKKyAgICBjcmVhdGVUaWxlc0luQWN0aXZlR3JpZChDb3ZlclNwZWN1bGF0aXZlKTsK
K30KKwordm9pZCBUaWxlQ2FjaGU6OmNyZWF0ZVRpbGVzSW5BY3RpdmVHcmlkKFN5bmNocm9ub3Vz
VGlsZUNyZWF0aW9uTW9kZSBtb2RlKQoreworICAgIGlmIChtZW1vcnlQcmVzc3VyZUhhbmRsZXIo
KS5oYXNSZWNlaXZlZE1lbW9yeVByZXNzdXJlKCkpIHsKKyAgICAgICAgTE9HKE1lbW9yeVByZXNz
dXJlLCAiVW5kZXIgbWVtb3J5IHByZXNzdXJlIGF0OiAlcyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18p
OworICAgICAgICByZW1vdmVBbGxOb25WaXNpYmxlVGlsZXNJbnRlcm5hbCgpOworICAgIH0KKyAg
ICBhY3RpdmVUaWxlR3JpZCgpLT5jcmVhdGVUaWxlcyhtb2RlKTsKK30KKwordW5zaWduZWQgVGls
ZUNhY2hlOjp0aWxlQ2FwYWNpdHlGb3JHcmlkKFRpbGVHcmlkKiBncmlkKQoreworICAgIHN0YXRp
YyB1bnNpZ25lZCBjYXBhY2l0eTsKKyAgICBpZiAoIWNhcGFjaXR5KSB7CisgICAgICAgIHNpemVf
dCB0b3RhbE1lbW9yeSA9IHN5c3RlbVRvdGFsTWVtb3J5KCk7CisgICAgICAgIHRvdGFsTWVtb3J5
IC89IDEwMjQgKiAxMDI0OworICAgICAgICBpZiAodG90YWxNZW1vcnkgPj0gMTAyNCkKKyAgICAg
ICAgICAgIGNhcGFjaXR5ID0gMTI4ICogMTAyNCAqIDEwMjQ7CisgICAgICAgIGVsc2UgaWYgKHRv
dGFsTWVtb3J5ID49IDUxMikKKyAgICAgICAgICAgIGNhcGFjaXR5ID0gNjQgKiAxMDI0ICogMTAy
NDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FwYWNpdHkgPSAzMiAqIDEwMjQgKiAxMDI0
OworICAgIH0KKworICAgIGludCBncmlkQ2FwYWNpdHk7CisKKyAgICBpbnQgbWVtb3J5TGV2ZWwg
PSBzeXN0ZW1NZW1vcnlMZXZlbCgpOworICAgIGlmIChtZW1vcnlMZXZlbCA8IDE1KQorICAgICAg
ICBncmlkQ2FwYWNpdHkgPSBjYXBhY2l0eSAvIDQ7CisgICAgZWxzZSBpZiAobWVtb3J5TGV2ZWwg
PCAyMCkKKyAgICAgICAgZ3JpZENhcGFjaXR5ID0gY2FwYWNpdHkgLyAyOworICAgIGVsc2UgaWYg
KG1lbW9yeUxldmVsIDwgMzApIAorICAgICAgICBncmlkQ2FwYWNpdHkgPSBjYXBhY2l0eSAqIDMg
LyA0OworICAgIGVsc2UKKyAgICAgICAgZ3JpZENhcGFjaXR5ID0gY2FwYWNpdHk7CisKKyAgICBp
ZiAoa2VlcHNab29tZWRPdXRUaWxlcygpICYmIGdyaWQgPT0gbV96b29tZWRPdXRUaWxlR3JpZCkg
eworICAgICAgICBpZiAoYWN0aXZlVGlsZUdyaWQoKSA9PSBtX3pvb21lZE91dFRpbGVHcmlkKQor
ICAgICAgICAgICAgcmV0dXJuIGdyaWRDYXBhY2l0eTsKKyAgICAgICAgcmV0dXJuIGdyaWRDYXBh
Y2l0eSAvIDQ7CisgICAgfQorICAgIHJldHVybiBncmlkQ2FwYWNpdHkgKiAzIC8gNDsKK30KKwor
Q29sb3IgVGlsZUNhY2hlOjpjb2xvckZvckdyaWRUaWxlQm9yZGVyKFRpbGVHcmlkKiBncmlkKSBj
b25zdAoreworICAgIGlmIChncmlkID09IG1fem9vbWVkT3V0VGlsZUdyaWQpCisgICAgICAgIHJl
dHVybiBDb2xvciguM2YsIC4wZiwgMC40ZiwgMC41Zik7CisKKyAgICByZXR1cm4gQ29sb3IoLjBm
LCAuMGYsIDAuNGYsIDAuNWYpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRSZXBhaW50SW5QaWVj
ZXMoY29uc3QgQ0dSZWN0JiBkaXJ0eVJlY3QsIENHU1JlZ2lvbk9iaiBkaXJ0eVJlZ2lvbiwgQ0dG
bG9hdCBjb250ZW50c1NjYWxlKQoreworICAgIC8vIEVzdGltYXRlIHdoZXRoZXIgb3Igbm90IHdl
IHNob3VsZCB1c2UgdGhlIHVuaW9uZWQgcmVjdCBvciB0aGUgaW5kaXZpZHVhbCByZWN0cy4KKyAg
ICAvLyBXZSBkbyB0aGlzIGJ5IGNvbXB1dGluZyB0aGUgcGVyY2VudGFnZSBvZiAid2FzdGVkIHNw
YWNlIiBpbiB0aGUgdW5pb24uIElmIHRoYXQgd2FzdGVkIHNwYWNlCisgICAgLy8gaXMgdG9vIGxh
cmdlLCB0aGVuIHdlIHdpbGwgZG8gaW5kaXZpZHVhbCByZWN0IHBhaW50aW5nIGluc3RlYWQuCisg
ICAgZmxvYXQgc2luZ2xlUGl4ZWxzID0gMDsKKyAgICB1bnNpZ25lZCByZWN0Q291bnQgPSAwOwor
CisgICAgQ0dTUmVnaW9uRW51bWVyYXRvck9iaiBlbnVtZXJhdG9yID0gQ0dTUmVnaW9uRW51bWVy
YXRvcihkaXJ0eVJlZ2lvbik7CisgICAgQ0dSZWN0ICpzdWJSZWN0OworICAgIHdoaWxlICgoc3Vi
UmVjdCA9IENHU05leHRSZWN0KGVudW1lcmF0b3IpKSkgeworICAgICAgICArK3JlY3RDb3VudDsK
KyAgICAgICAgc2luZ2xlUGl4ZWxzICs9IHN1YlJlY3QtPnNpemUud2lkdGggKiBzdWJSZWN0LT5z
aXplLmhlaWdodDsKKyAgICB9CisgICAgc2luZ2xlUGl4ZWxzIC89IChjb250ZW50c1NjYWxlICog
Y29udGVudHNTY2FsZSk7CisgICAgQ0dTUmVsZWFzZVJlZ2lvbkVudW1lcmF0b3IoZW51bWVyYXRv
cik7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjUmVjdFRocmVzaG9sZCA9IDEwOworICAgIGlmIChy
ZWN0Q291bnQgPCAyIHx8IHJlY3RDb3VudCA+IGNSZWN0VGhyZXNob2xkKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBjb25zdCBmbG9hdCBjV2FzdGVkU3BhY2VUaHJlc2hvbGQgPSAwLjUw
ZjsKKyAgICBmbG9hdCB1bmlvblBpeGVscyA9IGRpcnR5UmVjdC5zaXplLndpZHRoICogZGlydHlS
ZWN0LnNpemUuaGVpZ2h0OworICAgIGZsb2F0IHdhc3RlZFNwYWNlID0gMS5mIC0gKHNpbmdsZVBp
eGVscyAvIHVuaW9uUGl4ZWxzKTsKKyAgICByZXR1cm4gd2FzdGVkU3BhY2UgPiBjV2FzdGVkU3Bh
Y2VUaHJlc2hvbGQ7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpkcmF3UmVwbGFjZW1lbnRJbWFnZShU
aWxlTGF5ZXIqIGxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dJbWFnZVJlZiBpbWFnZSkK
K3sKKyAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMSwgMSwgMSk7Cisg
ICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94
KGNvbnRleHQpKTsKKworICAgIENHRmxvYXQgY29udGVudHNTY2FsZSA9IFtsYXllciBjb250ZW50
c1NjYWxlXTsKKyAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxIC8gY29udGVudHNTY2Fs
ZSwgLTEgLyBjb250ZW50c1NjYWxlKTsKKyAgICBDR1JlY3QgaW1hZ2VSZWN0ID0gQ0dSZWN0TWFr
ZSgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7
CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1pbWFnZVJlY3Quc2l6ZS5o
ZWlnaHQpOworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBpbWFnZVJlY3QsIGltYWdl
KTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmRyYXdXaW5kb3dDb250ZW50KFRpbGVMYXllciogbGF5
ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1JlY3QgZGlydHlSZWN0KQoreworICAgIENHUmVj
dCBmcmFtZSA9IFtsYXllciBmcmFtZV07CisgICAgV0tGb250QW50aWFsaWFzaW5nU3RhdGVTYXZl
ciBmb250QW50aWFsaWFzaW5nU3RhdGUoY29udGV4dCwgW21fd2luZG93IHVzZU9yaWVudGF0aW9u
RGVwZW5kZW50Rm9udEFudGlhbGlhc2luZ10gJiYgW2xheWVyIGlzT3BhcXVlXSk7CisgICAgZm9u
dEFudGlhbGlhc2luZ1N0YXRlLnNldHVwKFtXQUtXaW5kb3cgaGFzTGFuZHNjYXBlT3JpZW50YXRp
b25dKTsKKworICAgIENHU1JlZ2lvbk9iaiBkcmF3UmVnaW9uID0gKENHU1JlZ2lvbk9iailbbGF5
ZXIgcmVnaW9uQmVpbmdEcmF3bl07CisgICAgQ0dGbG9hdCBjb250ZW50c1NjYWxlID0gW2xheWVy
IGNvbnRlbnRzU2NhbGVdOworICAgIGlmIChkcmF3UmVnaW9uICYmIHNob3VsZFJlcGFpbnRJblBp
ZWNlcyhkaXJ0eVJlY3QsIGRyYXdSZWdpb24sIGNvbnRlbnRzU2NhbGUpKSB7CisgICAgICAgIC8v
IFVzZSBmaW5lIGdyYWluZWQgcmVwYWludCByZWN0YW5nbGVzIHRvIG1pbmltaXplIHRoZSBhbW91
bnQgb2YgcGFpbnRlZCBwaXhlbHMuCisgICAgICAgIENHU1JlZ2lvbkVudW1lcmF0b3JPYmogZW51
bWVyYXRvciA9IENHU1JlZ2lvbkVudW1lcmF0b3IoZHJhd1JlZ2lvbik7CisgICAgICAgIENHUmVj
dCAqc3ViUmVjdDsKKyAgICAgICAgd2hpbGUgKChzdWJSZWN0ID0gQ0dTTmV4dFJlY3QoZW51bWVy
YXRvcikpKSB7CisgICAgICAgICAgICBDR1JlY3QgYWRqdXN0ZWRTdWJSZWN0ID0gKnN1YlJlY3Q7
CisgICAgICAgICAgICBhZGp1c3RlZFN1YlJlY3Qub3JpZ2luLnggLz0gY29udGVudHNTY2FsZTsK
KyAgICAgICAgICAgIGFkanVzdGVkU3ViUmVjdC5vcmlnaW4ueSA9IGZyYW1lLnNpemUuaGVpZ2h0
IC0gKGFkanVzdGVkU3ViUmVjdC5vcmlnaW4ueSArIGFkanVzdGVkU3ViUmVjdC5zaXplLmhlaWdo
dCkgLyBjb250ZW50c1NjYWxlOworICAgICAgICAgICAgYWRqdXN0ZWRTdWJSZWN0LnNpemUud2lk
dGggLz0gY29udGVudHNTY2FsZTsKKyAgICAgICAgICAgIGFkanVzdGVkU3ViUmVjdC5zaXplLmhl
aWdodCAvPSBjb250ZW50c1NjYWxlOworCisgICAgICAgICAgICBDR1JlY3Qgc3ViUmVjdEluU3Vw
ZXIgPSBbaG9zdExheWVyKCkgY29udmVydFJlY3Q6YWRqdXN0ZWRTdWJSZWN0IGZyb21MYXllcjps
YXllcl07CisgICAgICAgICAgICBbbV93aW5kb3cgZGlzcGxheVJlY3Q6c3ViUmVjdEluU3VwZXJd
OworICAgICAgICB9CisgICAgICAgIENHU1JlbGVhc2VSZWdpb25FbnVtZXJhdG9yKGVudW1lcmF0
b3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFNpbXBsZSByZXBhaW50CisgICAgICAgIENH
UmVjdCBkaXJ0eVJlY3RJblN1cGVyID0gW2hvc3RMYXllcigpIGNvbnZlcnRSZWN0OmRpcnR5UmVj
dCBmcm9tTGF5ZXI6bGF5ZXJdOworICAgICAgICBbbV93aW5kb3cgZGlzcGxheVJlY3Q6ZGlydHlS
ZWN0SW5TdXBlcl07CisgICAgfQorCisgICAgZm9udEFudGlhbGlhc2luZ1N0YXRlLnJlc3RvcmUo
KTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmRyYXdMYXllcihUaWxlTGF5ZXIqIGxheWVyLCBDR0Nv
bnRleHRSZWYgY29udGV4dCkKK3sKKyAgICAvLyBUaGUgd2ViIGxvY2sgdW5sb2NrIG9ic2VydmVy
IHJ1bnMgYWZ0ZXIgQ0EgY29tbWl0IG9ic2VydmVyLgorICAgIGlmICghV2ViVGhyZWFkSXNMb2Nr
ZWRPckRpc2FibGVkKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJEcmF3aW5nIHdpdGhvdXQgaG9s
ZGluZyB0aGUgd2ViIHRocmVhZCBsb2NrIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKworICAgIFdLU2V0Q3VycmVudEdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKwor
ICAgIENHUmVjdCBkaXJ0eVJlY3QgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4
dCk7CisgICAgQ0dSZWN0IGZyYW1lID0gW2xheWVyIGZyYW1lXTsKKyAgICBDR0NvbnRleHRUcmFu
c2xhdGVDVE0oY29udGV4dCwgLWZyYW1lLm9yaWdpbi54LCAtZnJhbWUub3JpZ2luLnkpOworICAg
IENHUmVjdCBzY2FsZWRGcmFtZSA9IFtob3N0TGF5ZXIoKSBjb252ZXJ0UmVjdDpbbGF5ZXIgYm91
bmRzXSBmcm9tTGF5ZXI6bGF5ZXJdOworICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIGZy
YW1lLnNpemUud2lkdGggLyBzY2FsZWRGcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdo
dCAvIHNjYWxlZEZyYW1lLnNpemUuaGVpZ2h0KTsKKworICAgIGlmIChSZXRhaW5QdHI8Q0dJbWFn
ZT4gY29udGVudFJlcGxhY2VtZW50SW1hZ2UgPSB0aGlzLT5jb250ZW50UmVwbGFjZW1lbnRJbWFn
ZSgpKQorICAgICAgICBkcmF3UmVwbGFjZW1lbnRJbWFnZShsYXllciwgY29udGV4dCwgY29udGVu
dFJlcGxhY2VtZW50SW1hZ2UuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgZHJhd1dpbmRvd0Nv
bnRlbnQobGF5ZXIsIGNvbnRleHQsIGRpcnR5UmVjdCk7CisKKyAgICArK2xheWVyLnBhaW50Q291
bnQ7CisgICAgaWYgKG1fdGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKSB7CisgICAgICAgIGNoYXIg
dGV4dFsxNl07CisgICAgICAgIHNucHJpbnRmKHRleHQsIHNpemVvZih0ZXh0KSwgIiVkIiwgbGF5
ZXIucGFpbnRDb3VudCk7CisKKyAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsK
KworICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgZnJhbWUub3JpZ2luLngs
IGZyYW1lLm9yaWdpbi55KTsKKyAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9y
KGNvbnRleHQsIGNhY2hlZENHQ29sb3IoY29sb3JGb3JHcmlkVGlsZUJvcmRlcihbbGF5ZXIgdGls
ZUdyaWRdKSwgQ29sb3JTcGFjZURldmljZVJHQikpOworICAgICAgICAKKyAgICAgICAgQ0dSZWN0
IGxhYmVsQm91bmRzID0gW2xheWVyIGJvdW5kc107CisgICAgICAgIGxhYmVsQm91bmRzLnNpemUu
d2lkdGggPSAxMCArIDEyICogc3RybGVuKHRleHQpOworICAgICAgICBsYWJlbEJvdW5kcy5zaXpl
LmhlaWdodCA9IDI1OworICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBsYWJlbEJv
dW5kcyk7CisKKyAgICAgICAgaWYgKGFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSkKKyAgICAg
ICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLCAwLCAwLCAwLjRmKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRl
eHQsIDEsIDEsIDEsIDAuNmYpOworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgor
ICAgICAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNvbnRleHQsIENHQWZmaW5lVHJhbnNmb3Jt
TWFrZVNjYWxlKDEsIC0xKSk7CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisg
ICAgICAgIENHQ29udGV4dFNlbGVjdEZvbnQoY29udGV4dCwgIkhlbHZldGljYSIsIDI1LCBrQ0dF
bmNvZGluZ01hY1JvbWFuKTsKKyAgICAgICAgQ0dDb250ZXh0U2hvd1RleHRBdFBvaW50KGNvbnRl
eHQsIGxhYmVsQm91bmRzLm9yaWdpbi54ICsgMywgbGFiZWxCb3VuZHMub3JpZ2luLnkgKyAyMCwg
dGV4dCwgc3RybGVuKHRleHQpKTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyAgICAK
KyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsgICAgICAgIAorICAgIH0K
KworICAgIFdBS1ZpZXcqIHZpZXcgPSBbbV93aW5kb3cgY29udGVudFZpZXddOworICAgIFt2aWV3
IHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX2Rpc3BhdGNoVGlsZURpZERyYXc6KSB3aXRoT2Jq
ZWN0OmxheWVyIGFmdGVyRGVsYXk6MC4wXTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OnNldE5lZWRz
RGlzcGxheSgpCit7CisgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KEludFJlY3QoMCwgMCwgc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkpOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2NoZWR1bGVMYXllckZsdXNoRm9yUGVuZGlu
Z1JlcGFpbnQoKQoreworICAgIFdBS1ZpZXcqIHZpZXcgPSBbbV93aW5kb3cgY29udGVudFZpZXdd
OworICAgIFt2aWV3IF9zY2hlZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5nVGlsZUNhY2hlUmVwYWlu
dF07Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NhdmVkRGlzcGxh
eVJlY3RNdXRleCk7CisgICAgYm9vbCBhZGRlZEZpcnN0UmVjdCA9IG1fc2F2ZWREaXNwbGF5UmVj
dHMuaXNFbXB0eSgpOworICAgIG1fc2F2ZWREaXNwbGF5UmVjdHMuYXBwZW5kKGRpcnR5UmVjdCk7
CisgICAgaWYgKCFhZGRlZEZpcnN0UmVjdCkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIENvbXBv
c2l0aW5nIGxheWVyIGZsdXNoIHdpbGwgY2FsbCBiYWNrIHRvIGRvUGVuZGluZ1JlcGFpbnRzKCku
IFRoZSBmbHVzaCBtYXkgYmUgdGhyb3R0bGVkIGFuZCBub3QgaGFwcGVuIGltbWVkaWF0ZWx5Lgor
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50KCk7Cit9CisKK3ZvaWQgVGls
ZUNhY2hlOjppbnZhbGlkYXRlVGlsZXMoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAg
IEFTU0VSVCghbV90aWxlTXV0ZXgudHJ5TG9jaygpKTsKKworICAgIFRpbGVHcmlkKiBhY3RpdmVH
cmlkID0gYWN0aXZlVGlsZUdyaWQoKTsKKyAgICBpZiAoIWtlZXBzWm9vbWVkT3V0VGlsZXMoKSkg
eworICAgICAgICBhY3RpdmVHcmlkLT5pbnZhbGlkYXRlVGlsZXMoZGlydHlSZWN0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBGbG9hdFJlY3Qgc2NhbGVkUmVjdCA9IGRpcnR5UmVjdDsK
KyAgICBzY2FsZWRSZWN0LnNjYWxlKHpvb21lZE91dFNjYWxlKCkgLyBjdXJyZW50U2NhbGUoKSk7
CisgICAgSW50UmVjdCB6b29tZWRPdXREaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNjYWxl
ZFJlY3QpOworICAgIGlmIChhY3RpdmVHcmlkID09IG1fem9vbWVkT3V0VGlsZUdyaWQpIHsKKyAg
ICAgICAgYm9vbCBkdW1teTsKKyAgICAgICAgSW50UmVjdCBjb3ZlclJlY3QgPSBtX3pvb21lZE91
dFRpbGVHcmlkLT5jYWxjdWxhdGVDb3ZlclJlY3QobV96b29tZWRPdXRUaWxlR3JpZC0+dmlzaWJs
ZVJlY3QoKSwgZHVtbXkpOworICAgICAgICAvLyBJbnN0ZWFkIG9mIHJlcGFpbnRpbmcgYSB0aWxl
IG91dHNpZGUgdGhlIGNvdmVyIHJlY3QsIGp1c3QgcmVtb3ZlIGl0LgorICAgICAgICBtX3pvb21l
ZE91dFRpbGVHcmlkLT5kcm9wVGlsZXNCZXR3ZWVuUmVjdHMoem9vbWVkT3V0RGlydHlSZWN0LCBj
b3ZlclJlY3QpOworICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5pbnZhbGlkYXRlVGlsZXMo
em9vbWVkT3V0RGlydHlSZWN0KTsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBpbnZhbGlkYXRlIHpv
b21lZCBpbiB0aWxlcyBhcyB3ZWxsIHdoaWxlIHpvb21pbmcsIHNpbmNlCisgICAgICAgIC8vIHdl
IGNvdWxkIHN3aXRjaCBiYWNrIHRvIHRoZSB6b29tZWQgaW4gZ3JpZCB3aXRob3V0IGRyb3BwaW5n
IGl0cworICAgICAgICAvLyB0aWxlcy4gIFNlZSA8cmRhcjovL3Byb2JsZW0vOTk0Njc1OT4uCisg
ICAgICAgIGlmIChtX3RpbGluZ01vZGUgPT0gWm9vbWluZyAmJiBtX3pvb21lZEluVGlsZUdyaWQp
CisgICAgICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPmludmFsaWRhdGVUaWxlcyhkaXJ0eVJl
Y3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghbV96b29tZWRJblRpbGVHcmlk
LT5oYXNUaWxlcygpKSB7CisgICAgICAgIC8vIElmIG5vIHRpbGVzIGhhdmUgYmVlbiBjcmVhdGVk
IHlldCBmb3IgdGhlIHpvb21lZCBpbiBncmlkLCB3ZSBjYW4ndCBkcm9wIHRoZSB6b29tZWQgb3V0
IHRpbGVzLgorICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5pbnZhbGlkYXRlVGlsZXMoem9v
bWVkT3V0RGlydHlSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3pvb21lZE91
dFRpbGVHcmlkLT5kcm9wVGlsZXNJbnRlcnNlY3RpbmdSZWN0KHpvb21lZE91dERpcnR5UmVjdCk7
CisgICAgbV96b29tZWRJblRpbGVHcmlkLT5pbnZhbGlkYXRlVGlsZXMoZGlydHlSZWN0KTsKK30K
KyAgICAKK2Jvb2wgVGlsZUNhY2hlOjppc1RpbGVDcmVhdGlvblN1c3BlbmRlZCgpIGNvbnN0IAor
eworICAgIHJldHVybiAoIWtlZXBzWm9vbWVkT3V0VGlsZXMoKSAmJiBtX3RpbGluZ01vZGUgPT0g
Wm9vbWluZykgfHwgbV90aWxpbmdNb2RlID09IERpc2FibGVkOworfQorCitib29sIFRpbGVDYWNo
ZTo6aXNUaWxlSW52YWxpZGF0aW9uU3VzcGVuZGVkKCkgY29uc3QgCit7IAorICAgIHJldHVybiBt
X3RpbGluZ01vZGUgPT0gWm9vbWluZyB8fCBtX3RpbGluZ01vZGUgPT0gUGFubmluZyB8fCBtX3Rp
bGluZ01vZGUgPT0gU2Nyb2xsVG9Ub3AgfHwgbV90aWxpbmdNb2RlID09IERpc2FibGVkOyAKK30K
Kwordm9pZCBUaWxlQ2FjaGU6OnVwZGF0ZVRpbGluZ01vZGUoKQoreworICAgIEFTU0VSVChXZWJU
aHJlYWRJc0N1cnJlbnQoKSB8fCAhV2ViVGhyZWFkSXNFbmFibGVkKCkpOworCisgICAgV0FLVmll
dyogdmlldyA9IFttX3dpbmRvdyBjb250ZW50Vmlld107CisKKyAgICBpZiAobV90aWxpbmdNb2Rl
ID09IFpvb21pbmcgfHwgbV90aWxpbmdNb2RlID09IFBhbm5pbmcgfHwgbV90aWxpbmdNb2RlID09
IFNjcm9sbFRvVG9wKSB7CisgICAgICAgIGlmICghbV9kaWRDYWxsV2lsbFN0YXJ0U2Nyb2xsaW5n
T3Jab29taW5nKSB7CisgICAgICAgICAgICBbdmlldyBfd2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29t
aW5nXTsKKyAgICAgICAgICAgIG1fZGlkQ2FsbFdpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZyA9
IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9kaWRDYWxsV2ls
bFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nKSB7CisgICAgICAgICAgICBbdmlldyBfZGlkRmluaXNo
U2Nyb2xsaW5nT3Jab29taW5nXTsKKyAgICAgICAgICAgIG1fZGlkQ2FsbFdpbGxTdGFydFNjcm9s
bGluZ09yWm9vbWluZyA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChtX3RpbGluZ01v
ZGUgPT0gRGlzYWJsZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKKyAgICAgICAgY3JlYXRlVGlsZXNJbkFjdGl2ZUdyaWQo
Q292ZXJWaXNpYmxlT25seSk7CisKKyAgICAgICAgaWYgKCFtX3NhdmVkRGlzcGxheVJlY3RzLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50
KCk7CisgICAgfQorfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0VGlsaW5nTW9kZShUaWxpbmdNb2Rl
IHRpbGluZ01vZGUpCit7CisgICAgaWYgKHRpbGluZ01vZGUgPT0gbV90aWxpbmdNb2RlKQorICAg
ICAgICByZXR1cm47CisgICAgYm9vbCB3YXNab29taW5nID0gKG1fdGlsaW5nTW9kZSA9PSBab29t
aW5nKTsKKyAgICBtX3RpbGluZ01vZGUgPSB0aWxpbmdNb2RlOworCisgICAgaWYgKChtX3BlbmRp
bmdab29tZWRPdXRTY2FsZSB8fCBtX3BlbmRpbmdTY2FsZSkgJiYgbV90aWxpbmdNb2RlICE9IERp
c2FibGVkKQorICAgICAgICBjb21taXRTY2FsZUNoYW5nZSgpOworICAgIGVsc2UgaWYgKHdhc1pv
b21pbmcpIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKKyAgICAg
ICAgYnJpbmdBY3RpdmVUaWxlR3JpZFRvRnJvbnQoKTsKKyAgICB9CisKKyAgICBpZiAobV9oYXNQ
ZW5kaW5nVXBkYXRlVGlsaW5nTW9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faGFzUGVuZGlu
Z1VwZGF0ZVRpbGluZ01vZGUgPSB0cnVlOworCisgICAgVGlsZUNhY2hlVG9tYnN0b25lICp0b21i
c3RvbmUgPSBtX3RvbWJzdG9uZS5nZXQoKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAg
aWYgKFt0b21ic3RvbmUgaXNEZWFkXSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9o
YXNQZW5kaW5nVXBkYXRlVGlsaW5nTW9kZSA9IGZhbHNlOworICAgICAgICB1cGRhdGVUaWxpbmdN
b2RlKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRUaWxpbmdEaXJlY3Rpb24o
VGlsaW5nRGlyZWN0aW9uIHRpbGluZ0RpcmVjdGlvbikKK3sKKyAgICBtX3RpbGluZ0RpcmVjdGlv
biA9IHRpbGluZ0RpcmVjdGlvbjsKK30KKworVGlsZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb24gVGls
ZUNhY2hlOjp0aWxpbmdEaXJlY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3RpbGluZ0Rp
cmVjdGlvbjsKK30KKyAgICAKK2Zsb2F0IFRpbGVDYWNoZTo6em9vbWVkT3V0U2NhbGUoKSBjb25z
dAoreworICAgIHJldHVybiBtX3pvb21lZE91dFRpbGVHcmlkLT5zY2FsZSgpOworfQorCitmbG9h
dCBUaWxlQ2FjaGU6OmN1cnJlbnRTY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3VycmVu
dFNjYWxlOworfQorCit2b2lkIFRpbGVDYWNoZTo6ZG9QZW5kaW5nUmVwYWludHMoKQoreworICAg
IGlmIChtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChpc1RpbGVJbnZhbGlkYXRpb25TdXNwZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAgZmx1c2hTYXZlZERpc3BsYXlS
ZWN0cygpOworfQorCit2b2lkIFRpbGVDYWNoZTo6Zmx1c2hTYXZlZERpc3BsYXlSZWN0cygpCit7
CisgICAgQVNTRVJUKCFtX3RpbGVNdXRleC50cnlMb2NrKCkpOworICAgIEFTU0VSVCghbV9zYXZl
ZERpc3BsYXlSZWN0cy5pc0VtcHR5KCkpOworCisgICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOwor
ICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2F2ZWREaXNwbGF5UmVjdE11dGV4
KTsKKyAgICAgICAgbV9zYXZlZERpc3BsYXlSZWN0cy5zd2FwKHJlY3RzKTsKKyAgICB9CisgICAg
c2l6ZV90IHNpemUgPSByZWN0cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCBz
aXplOyArK24pCisgICAgICAgIGludmFsaWRhdGVUaWxlcyhyZWN0c1tuXSk7Cit9CisKK3ZvaWQg
VGlsZUNhY2hlOjpzZXRTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVk
KQoreworICAgIGlmIChtX2lzU3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkID09IGVuYWJs
ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzU3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFi
bGVkID0gZW5hYmxlZDsKKyAgICBpZiAobV9pc1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxl
ZCkKKyAgICAgICAgbV90aWxlQ3JlYXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK2Jv
b2wgVGlsZUNhY2hlOjpoYXNQZW5kaW5nRHJhdygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3Nh
dmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OnByZXBhcmVU
b0RyYXcoKQoreworICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGRvY3VtZW50IHJlbGF5b3V0IGlm
IG5lZWRlZC4KKyAgICBbW21fd2luZG93IGNvbnRlbnRWaWV3XSB2aWV3V2lsbERyYXddOworCisg
ICAgaWYgKCFtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKSkgeworICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAgICAgICBmbHVzaFNhdmVkRGlzcGxheVJlY3Rz
KCk7CisgICAgfQorfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0TGF5ZXJQb29sQ2FwYWNpdHkodW5z
aWduZWQgY2FwYWNpdHkpCit7CisgICAgVGlsZUxheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5zZXRD
YXBhY2l0eShjYXBhY2l0eSk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpkcmFpbkxheWVyUG9vbCgp
Cit7CisgICAgVGlsZUxheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5kcmFpbigpOworfQorCit2b2lk
IFRpbGVDYWNoZTo6ZHVtcFRpbGVzKCkKK3sKKyAgICBOU0xvZyhAIj09PT09PT09PT09PT09PT09
Iik7CisgICAgTlNMb2coQCJaT09NRUQgT1VUIik7CisgICAgaWYgKG1fem9vbWVkT3V0VGlsZUdy
aWQgPT0gYWN0aXZlVGlsZUdyaWQoKSkKKyAgICAgICAgTlNMb2coQCI8QUNUSVZFPiIpOworICAg
IG1fem9vbWVkT3V0VGlsZUdyaWQtPmR1bXBUaWxlcygpOworICAgIE5TTG9nKEAiPT09PT09PT09
PT09PT09PT0iKTsKKyAgICBpZiAobV96b29tZWRJblRpbGVHcmlkKSB7CisgICAgICAgIE5TTG9n
KEAiWk9PTUVEIElOIik7CisgICAgICAgIGlmIChtX3pvb21lZEluVGlsZUdyaWQgPT0gYWN0aXZl
VGlsZUdyaWQoKSkKKyAgICAgICAgICAgIE5TTG9nKEAiPEFDVElWRT4iKTsKKyAgICAgICAgbV96
b29tZWRJblRpbGVHcmlkLT5kdW1wVGlsZXMoKTsKKyAgICAgICAgTlNMb2coQCI9PT09PT09PT09
PT09PT09PSIpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1RpbGVHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45OTk5MGZjY2RkNjk3MGZkOThhZjg1ZWVmNDNjMDNjNWJhMzdiZWUyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkLmgKQEAgLTAs
MCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRpbGVHcmlkX2gKKyNkZWZpbmUgVGls
ZUdyaWRfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNp
bmNsdWRlICJJbnRQb2ludEhhc2guaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
SW50U2l6ZS5oIgorI2luY2x1ZGUgIlRpbGVDYWNoZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKyNkZWZpbmUgTE9HX1RJTElORyAwCisK
K0BjbGFzcyBDQUxheWVyOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRpbGVHcmlk
VGlsZTsKKworY2xhc3MgVGlsZUdyaWQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGVH
cmlkKTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludFBvaW50IFRpbGVJbmRleDsKKworICAgIHN0
YXRpYyBQYXNzT3duUHRyPFRpbGVHcmlkPiBjcmVhdGUoVGlsZUNhY2hlKiBjYWNoZSwgY29uc3Qg
SW50U2l6ZSYgdGlsZVNpemUpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUaWxlR3JpZChjYWNoZSwg
dGlsZVNpemUpKTsgfQorCisgICAgflRpbGVHcmlkKCk7CisKKyAgICBUaWxlQ2FjaGUqIHRpbGVD
YWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZUNhY2hlOyB9CisKKyAgICBDQUxheWVyICp0aWxl
SG9zdExheWVyKCkgY29uc3Q7CisgICAgSW50UmVjdCBib3VuZHMoKSBjb25zdDsKKyAgICB1bnNp
Z25lZCB0aWxlQ291bnQoKSBjb25zdDsKKworICAgIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zY2FsZTsgfQorICAgIHZvaWQgc2V0U2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9zY2FsZSA9
IHNjYWxlOyB9CisKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0KCkgY29uc3Q7CisKKyAgICB2b2lk
IGNyZWF0ZVRpbGVzKFRpbGVDYWNoZTo6U3luY2hyb25vdXNUaWxlQ3JlYXRpb25Nb2RlKTsKKwor
ICAgIHZvaWQgZHJvcEFsbFRpbGVzKCk7CisgICAgdm9pZCBkcm9wSW52YWxpZFRpbGVzKCk7Cisg
ICAgdm9pZCBkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBk
cm9wVGlsZXNJbnRlcnNlY3RpbmdSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAvLyBEcm9wcyB0
aWxlcyB0aGF0IGludGVyc2VjdCBkcm9wUmVjdCBidXQgZG8gbm90IGludGVyc2VjdCBrZWVwUmVj
dC4KKyAgICB2b2lkIGRyb3BUaWxlc0JldHdlZW5SZWN0cyhjb25zdCBJbnRSZWN0JiBkcm9wUmVj
dCwgY29uc3QgSW50UmVjdCYga2VlcFJlY3QpOworICAgIGJvb2wgZHJvcERpc3RhbnRUaWxlcyh1
bnNpZ25lZCB0aWxlc05lZWRlZCwgZG91YmxlIHNob3J0ZXN0RGlzdGFuY2UpOworCisgICAgdm9p
ZCBhZGRUaWxlc0NvdmVyaW5nUmVjdChjb25zdCBJbnRSZWN0Jik7CisKKyAgICBib29sIHRpbGVz
Q292ZXIoY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZvaWQgY2VudGVyVGlsZUdyaWRPcmln
aW4oY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOworICAgIHZvaWQgaW52YWxpZGF0ZVRpbGVz
KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisKKyAgICB2b2lkIHVwZGF0ZVRpbGVPcGFjaXR5
KCk7CisgICAgdm9pZCB1cGRhdGVUaWxlQm9yZGVyVmlzaWJpbGl0eSgpOworICAgIHZvaWQgdXBk
YXRlSG9zdExheWVyU2l6ZSgpOworICAgIGJvb2wgY2hlY2tEb1NpbmdsZVRpbGVMYXlvdXQoKTsK
KworICAgIGJvb2wgaGFzVGlsZXMoKSBjb25zdCB7IHJldHVybiAhbV90aWxlcy5pc0VtcHR5KCk7
IH0KKworICAgIEludFJlY3QgY2FsY3VsYXRlQ292ZXJSZWN0KGNvbnN0IEludFJlY3QmIHZpc2li
bGVSZWN0LCBib29sJiBjZW50ZXJHcmlkKTsKKworICAgIC8vIExvZ2dpbmcKKyAgICB2b2lkIGR1
bXBUaWxlcygpOworCitwcml2YXRlOgorICAgIGRvdWJsZSB0aWxlRGlzdGFuY2UyKGNvbnN0IElu
dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkgY29uc3Q7CisgICAg
dW5zaWduZWQgdGlsZUJ5dGVTaXplKCkgY29uc3Q7CisKKyAgICB2b2lkIGFkZFRpbGVGb3JJbmRl
eChjb25zdCBUaWxlSW5kZXgmKTsKKworICAgIFBhc3NSZWZQdHI8VGlsZUdyaWRUaWxlPiB0aWxl
Rm9ySW5kZXgoY29uc3QgVGlsZUluZGV4JikgY29uc3Q7CisgICAgSW50UmVjdCB0aWxlUmVjdEZv
ckluZGV4KGNvbnN0IFRpbGVJbmRleCYpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8VGlsZUdyaWRU
aWxlPiB0aWxlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICBUaWxlSW5kZXgg
dGlsZUluZGV4Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKworICAgIEludFJlY3Qg
YWRqdXN0Q292ZXJSZWN0Rm9yUGFnZUJvdW5kcyhjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAg
Ym9vbCBzaG91bGRVc2VNaW5pbWFsVGlsZUNvdmVyYWdlKCkgY29uc3Q7CisKK3ByaXZhdGU6ICAg
ICAgICAKKyAgICBUaWxlR3JpZChUaWxlQ2FjaGUqLCBjb25zdCBJbnRTaXplJik7CisKKyAgICBU
aWxlQ2FjaGUqIG1fdGlsZUNhY2hlOworICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3RpbGVIb3N0
TGF5ZXI7CisKKyAgICBJbnRQb2ludCBtX29yaWdpbjsKKyAgICBJbnRTaXplIG1fdGlsZVNpemU7
CisKKyAgICBmbG9hdCBtX3NjYWxlOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVJbmRleCwg
UmVmUHRyPFRpbGVHcmlkVGlsZT4+IFRpbGVNYXA7CisgICAgVGlsZU1hcCBtX3RpbGVzOworCisg
ICAgSW50UmVjdCBtX3ZhbGlkQm91bmRzOworfTsKKworc3RhdGljIGlubGluZSBJbnRQb2ludCB0
b3BMZWZ0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHJlY3QubG9jYXRpb24o
KTsKK30KKworc3RhdGljIGlubGluZSBJbnRQb2ludCBib3R0b21SaWdodChjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIHJldHVybiBJbnRQb2ludChyZWN0Lm1heFgoKSAtIDEsIHJlY3QubWF4
WSgpIC0gMSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKKyNlbmRpZiAvLyBUaWxlR3JpZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
VGlsZUdyaWQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2QxNzAxMzIxZTljNzQwZTQzNzI5NWRhNGNlY2Q2MzAw
ZmZjZDRlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9U
aWxlR3JpZC5tbQpAQCAtMCwwICsxLDU2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUaWxlR3JpZC5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5j
bHVkZSAiTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCisjaW5jbHVkZSAiU3lzdGVtTWVtb3J5Lmgi
CisjaW5jbHVkZSAiVGlsZUdyaWRUaWxlLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyLmgiCisjaW5j
bHVkZSAiVGlsZUxheWVyUG9vbC5oIgorI2luY2x1ZGUgIldBS1dpbmRvdy5oIgorI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3NQcml2YXRlLmg+CisjaW5jbHVkZSA8UXVhcnR6Q29y
ZS9RdWFydHpDb3JlLmg+CisjaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlUHJpdmF0ZS5o
PgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1RpbGVHcmlkOjpUaWxlR3JpZChUaWxlQ2FjaGUqIHRpbGVDYWNoZSwg
Y29uc3QgSW50U2l6ZSYgdGlsZVNpemUpCisgICAgOiBtX3RpbGVDYWNoZSh0aWxlQ2FjaGUpCisg
ICAgLCBtX3RpbGVIb3N0TGF5ZXIoYWRvcHROUyhbW1RpbGVIb3N0TGF5ZXIgYWxsb2NdIGluaXRX
aXRoVGlsZUdyaWQ6dGhpc10pKQorICAgICwgbV90aWxlU2l6ZSh0aWxlU2l6ZSkKKyAgICAsIG1f
c2NhbGUoMSkKKyAgICAsIG1fdmFsaWRCb3VuZHMoMCwgMCwgc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkgCit7Cit9CisgICAg
CitUaWxlR3JpZDo6flRpbGVHcmlkKCkKK3sKKyAgICBbbV90aWxlSG9zdExheWVyIHJlbW92ZUZy
b21TdXBlcmxheWVyXTsKK30KKworSW50UmVjdCBUaWxlR3JpZDo6dmlzaWJsZVJlY3QoKSBjb25z
dAoreworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fdGlsZUNh
Y2hlLT52aXNpYmxlUmVjdEluTGF5ZXIobV90aWxlSG9zdExheWVyLmdldCgpKSk7CisKKyAgICAv
LyBXaGVuIGZhc3Qgc2Nyb2xsaW5nIHRvIHRoZSB0b3AsIG1vdmUgdGhlIHZpc2libGUgcmVjdCB0
aGVyZSBpbW1lZGlhdGVseSBzbyB3ZSBoYXZlIHRpbGVzIHdoZW4gdGhlIHNjcm9sbGluZyBjb21w
bGV0ZXMuCisgICAgaWYgKG1fdGlsZUNhY2hlLT50aWxpbmdNb2RlKCkgPT0gVGlsZUNhY2hlOjpT
Y3JvbGxUb1RvcCkKKyAgICAgICAgdmlzaWJsZVJlY3Quc2V0WSgwKTsKKworICAgIHJldHVybiB2
aXNpYmxlUmVjdDsKK30KKwordm9pZCBUaWxlR3JpZDo6ZHJvcEFsbFRpbGVzKCkKK3sKKyAgICBt
X3RpbGVzLmNsZWFyKCk7Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OmRyb3BUaWxlc0ludGVyc2VjdGlu
Z1JlY3QoY29uc3QgSW50UmVjdCYgZHJvcFJlY3QpCit7CisgICAgZHJvcFRpbGVzQmV0d2VlblJl
Y3RzKGRyb3BSZWN0LCBJbnRSZWN0KCkpOworfQorCit2b2lkIFRpbGVHcmlkOjpkcm9wVGlsZXNP
dXRzaWRlUmVjdChjb25zdCBJbnRSZWN0JiBrZWVwUmVjdCkKK3sKKyAgICBkcm9wVGlsZXNCZXR3
ZWVuUmVjdHMoSW50UmVjdCgwLCAwLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpLCBz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSwga2VlcFJlY3QpOworfQorCit2b2lkIFRp
bGVHcmlkOjpkcm9wVGlsZXNCZXR3ZWVuUmVjdHMoY29uc3QgSW50UmVjdCYgZHJvcFJlY3QsIGNv
bnN0IEludFJlY3QmIGtlZXBSZWN0KQoreworICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRvUmVtb3Zl
OworICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChh
dXRvIHRpbGUgOiBtX3RpbGVzKSB7CisgICAgICAgIFRpbGVJbmRleCYgaW5kZXggPSB0aWxlLmtl
eTsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGUudmFsdWUtPnJlY3QoKTsKKyAgICAg
ICAgaWYgKHRpbGVSZWN0LmludGVyc2VjdHMoZHJvcFJlY3QpICYmICF0aWxlUmVjdC5pbnRlcnNl
Y3RzKGtlZXBSZWN0KSkKKyAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChpbmRleCk7CisgICAg
fQorICAgIHVuc2lnbmVkIHJlbW92ZUNvdW50ID0gdG9SZW1vdmUuc2l6ZSgpOworICAgIGZvciAo
dW5zaWduZWQgbiA9IDA7IG4gPCByZW1vdmVDb3VudDsgKytuKQorICAgICAgICBtX3RpbGVzLnJl
bW92ZSh0b1JlbW92ZVtuXSk7Cit9CisKK3Vuc2lnbmVkIFRpbGVHcmlkOjp0aWxlQnl0ZVNpemUo
KSBjb25zdAoreworICAgIEludFNpemUgdGlsZVBpeGVsU2l6ZSA9IG1fdGlsZVNpemU7CisgICAg
dGlsZVBpeGVsU2l6ZS5zY2FsZShtX3RpbGVDYWNoZS0+c2NyZWVuU2NhbGUoKSk7CisgICAgcmV0
dXJuIFRpbGVMYXllclBvb2w6OmJ5dGVzQmFja2luZ0xheWVyV2l0aFBpeGVsU2l6ZSh0aWxlUGl4
ZWxTaXplKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgYm9vbCBpc0ZhcnRo
ZXJBd2F5KGNvbnN0IHBhaXI8ZG91YmxlLCBUPiYgYSwgY29uc3QgcGFpcjxkb3VibGUsIFQ+JiBi
KQoreworICAgIHJldHVybiBhLmZpcnN0ID4gYi5maXJzdDsKK30KKworYm9vbCBUaWxlR3JpZDo6
ZHJvcERpc3RhbnRUaWxlcyh1bnNpZ25lZCB0aWxlc05lZWRlZCwgZG91YmxlIHNob3J0ZXN0RGlz
dGFuY2UpCit7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJUaWxlID0gdGlsZUJ5dGVTaXplKCk7Cisg
ICAgdW5zaWduZWQgYnl0ZXNOZWVkZWQgPSB0aWxlc05lZWRlZCAqIGJ5dGVzUGVyVGlsZTsKKyAg
ICB1bnNpZ25lZCBieXRlc1VzZWQgPSB0aWxlQ291bnQoKSAqIGJ5dGVzUGVyVGlsZTsKKyAgICB1
bnNpZ25lZCBtYXhpbXVtQnl0ZXMgPSBtX3RpbGVDYWNoZS0+dGlsZUNhcGFjaXR5Rm9yR3JpZCh0
aGlzKTsKKworICAgIGludCBieXRlc1RvUmVjbGFpbSA9IGludChieXRlc1VzZWQpIC0gKGludCht
YXhpbXVtQnl0ZXMpIC0gYnl0ZXNOZWVkZWQpOworICAgIGlmIChieXRlc1RvUmVjbGFpbSA8PSAw
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHVuc2lnbmVkIHRpbGVzVG9SZW1vdmVDb3Vu
dCA9IGJ5dGVzVG9SZWNsYWltIC8gYnl0ZXNQZXJUaWxlOworCisgICAgSW50UmVjdCB2aXNpYmxl
UmVjdCA9IHRoaXMtPnZpc2libGVSZWN0KCk7CisgICAgVmVjdG9yPHBhaXI8ZG91YmxlLCBUaWxl
SW5kZXg+PiB0b1JlbW92ZTsKKyAgICBmb3IgKGF1dG8gdGlsZSA6IG1fdGlsZXMpIHsKKyAgICAg
ICAgVGlsZUluZGV4JiBpbmRleCA9IHRpbGUua2V5OworICAgICAgICBJbnRSZWN0IHRpbGVSZWN0
ID0gdGlsZS52YWx1ZS0+cmVjdCgpOworICAgICAgICBkb3VibGUgZGlzdGFuY2UgPSB0aWxlRGlz
dGFuY2UyKHZpc2libGVSZWN0LCB0aWxlUmVjdCk7CisgICAgICAgIGlmIChkaXN0YW5jZSA8PSBz
aG9ydGVzdERpc3RhbmNlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHRvUmVtb3Zl
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihkaXN0YW5jZSwgaW5kZXgpKTsKKyAgICAgICAgc3RkOjpw
dXNoX2hlYXAodG9SZW1vdmUuYmVnaW4oKSwgdG9SZW1vdmUuZW5kKCksIHN0ZDo6cHRyX2Z1bihp
c0ZhcnRoZXJBd2F5PFRpbGVJbmRleD4pKTsKKyAgICAgICAgaWYgKHRvUmVtb3ZlLnNpemUoKSA+
IHRpbGVzVG9SZW1vdmVDb3VudCkgeworICAgICAgICAgICAgc3RkOjpwb3BfaGVhcCh0b1JlbW92
ZS5iZWdpbigpLCB0b1JlbW92ZS5lbmQoKSwgc3RkOjpwdHJfZnVuKGlzRmFydGhlckF3YXk8VGls
ZUluZGV4PikpOworICAgICAgICAgICAgdG9SZW1vdmUucmVtb3ZlTGFzdCgpOworICAgICAgICB9
CisgICAgfQorICAgIHNpemVfdCByZW1vdmVDb3VudCA9IHRvUmVtb3ZlLnNpemUoKTsKKyAgICBm
b3IgKHNpemVfdCBuID0gMDsgbiA8IHJlbW92ZUNvdW50OyArK24pCisgICAgICAgIG1fdGlsZXMu
cmVtb3ZlKHRvUmVtb3ZlW25dLnNlY29uZCk7CisKKyAgICBpZiAoIXNob3J0ZXN0RGlzdGFuY2Up
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIHRpbGVDb3VudCgpICogYnl0ZXNQ
ZXJUaWxlICsgYnl0ZXNOZWVkZWQgPD0gbWF4aW11bUJ5dGVzOworfQorCit2b2lkIFRpbGVHcmlk
OjphZGRUaWxlc0NvdmVyaW5nUmVjdChjb25zdCBJbnRSZWN0JiByZWN0VG9Db3ZlcikKK3sKKyAg
ICAvLyBXZSBuZXZlciBkcmF3IGFueXRoaW5nIG91dHNpZGUgb2Ygb3VyIGJvdW5kcy4KKyAgICBJ
bnRSZWN0IHJlY3QocmVjdFRvQ292ZXIpOworICAgIHJlY3QuaW50ZXJzZWN0KGJvdW5kcygpKTsK
KyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFRpbGVJbmRl
eCB0b3BMZWZ0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludCh0b3BMZWZ0KHJlY3QpKTsKKyAgICBU
aWxlSW5kZXggYm90dG9tUmlnaHRJbmRleCA9IHRpbGVJbmRleEZvclBvaW50KGJvdHRvbVJpZ2h0
KHJlY3QpKTsKKyAgICBmb3IgKGludCB5SW5kZXggPSB0b3BMZWZ0SW5kZXgueSgpOyB5SW5kZXgg
PD0gYm90dG9tUmlnaHRJbmRleC55KCk7ICsreUluZGV4KSB7CisgICAgICAgIGZvciAoaW50IHhJ
bmRleCA9IHRvcExlZnRJbmRleC54KCk7IHhJbmRleCA8PSBib3R0b21SaWdodEluZGV4LngoKTsg
Kyt4SW5kZXgpIHsKKyAgICAgICAgICAgIFRpbGVJbmRleCBpbmRleCh4SW5kZXgsIHlJbmRleCk7
CisgICAgICAgICAgICBpZiAoIXRpbGVGb3JJbmRleChpbmRleCkpCisgICAgICAgICAgICAgICAg
YWRkVGlsZUZvckluZGV4KGluZGV4KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUaWxl
R3JpZDo6YWRkVGlsZUZvckluZGV4KGNvbnN0IFRpbGVJbmRleCYgaW5kZXgpCit7CisgICAgbV90
aWxlcy5zZXQoaW5kZXgsIFRpbGVHcmlkVGlsZTo6Y3JlYXRlKHRoaXMsIHRpbGVSZWN0Rm9ySW5k
ZXgoaW5kZXgpKSk7Cit9CisKK0NBTGF5ZXIqIFRpbGVHcmlkOjp0aWxlSG9zdExheWVyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV90aWxlSG9zdExheWVyLmdldCgpOworfQorCitJbnRSZWN0IFRp
bGVHcmlkOjpib3VuZHMoKSBjb25zdAoreworICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCks
IEludFNpemUoW3RpbGVIb3N0TGF5ZXIoKSBzaXplXSkpOworfQorCitQYXNzUmVmUHRyPFRpbGVH
cmlkVGlsZT4gVGlsZUdyaWQ6OnRpbGVGb3JJbmRleChjb25zdCBUaWxlSW5kZXgmIGluZGV4KSBj
b25zdAoreworICAgIHJldHVybiBtX3RpbGVzLmdldChpbmRleCk7Cit9CisKK0ludFJlY3QgVGls
ZUdyaWQ6OnRpbGVSZWN0Rm9ySW5kZXgoY29uc3QgVGlsZUluZGV4JiBpbmRleCkgY29uc3QKK3sK
KyAgICBJbnRSZWN0IHJlY3QoaW5kZXgueCgpICogbV90aWxlU2l6ZS53aWR0aCgpIC0gKG1fb3Jp
Z2luLngoKSA/IG1fdGlsZVNpemUud2lkdGgoKSAtIG1fb3JpZ2luLngoKSA6IDApLAorICAgICAg
ICAgICAgICAgICBpbmRleC55KCkgKiBtX3RpbGVTaXplLmhlaWdodCgpIC0gKG1fb3JpZ2luLnko
KSA/IG1fdGlsZVNpemUuaGVpZ2h0KCkgLSBtX29yaWdpbi55KCkgOiAwKSwKKyAgICAgICAgICAg
ICAgICAgbV90aWxlU2l6ZS53aWR0aCgpLAorICAgICAgICAgICAgICAgICBtX3RpbGVTaXplLmhl
aWdodCgpKTsKKyAgICByZWN0LmludGVyc2VjdChib3VuZHMoKSk7CisgICAgcmV0dXJuIHJlY3Q7
Cit9CisKK1RpbGVHcmlkOjpUaWxlSW5kZXggVGlsZUdyaWQ6OnRpbGVJbmRleEZvclBvaW50KGNv
bnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9vcmlnaW4ueCgpIDwg
bV90aWxlU2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlQobV9vcmlnaW4ueSgpIDwgbV90aWxlU2l6
ZS5oZWlnaHQoKSk7CisgICAgaW50IHggPSAocG9pbnQueCgpICsgKG1fb3JpZ2luLngoKSA/IG1f
dGlsZVNpemUud2lkdGgoKSAtIG1fb3JpZ2luLngoKSA6IDApKSAvIG1fdGlsZVNpemUud2lkdGgo
KTsKKyAgICBpbnQgeSA9IChwb2ludC55KCkgKyAobV9vcmlnaW4ueSgpID8gbV90aWxlU2l6ZS5o
ZWlnaHQoKSAtIG1fb3JpZ2luLnkoKSA6IDApKSAvIG1fdGlsZVNpemUuaGVpZ2h0KCk7CisgICAg
cmV0dXJuIFRpbGVJbmRleChzdGQ6Om1heCh4LCAwKSwgc3RkOjptYXgoeSwgMCkpOworfQorCit2
b2lkIFRpbGVHcmlkOjpjZW50ZXJUaWxlR3JpZE9yaWdpbihjb25zdCBJbnRSZWN0JiB2aXNpYmxl
UmVjdCkKK3sKKyAgICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICB1bnNpZ25lZCBtaW5pbXVtSG9yaXpvbnRhbFRpbGVzID0gMSArICh2aXNpYmxlUmVj
dC53aWR0aCgpIC0gMSkgLyBtX3RpbGVTaXplLndpZHRoKCk7CisgICAgdW5zaWduZWQgbWluaW11
bVZlcnRpY2FsVGlsZXMgPSAxICsgKHZpc2libGVSZWN0LmhlaWdodCgpIC0gMSkgLyBtX3RpbGVT
aXplLmhlaWdodCgpOworICAgIFRpbGVJbmRleCBjdXJyZW50VG9wTGVmdEluZGV4ID0gdGlsZUlu
ZGV4Rm9yUG9pbnQodG9wTGVmdCh2aXNpYmxlUmVjdCkpOworICAgIFRpbGVJbmRleCBjdXJyZW50
Qm90dG9tUmlnaHRJbmRleCA9IHRpbGVJbmRleEZvclBvaW50KGJvdHRvbVJpZ2h0KHZpc2libGVS
ZWN0KSk7CisgICAgdW5zaWduZWQgY3VycmVudEhvcml6b250YWxUaWxlcyA9IGN1cnJlbnRCb3R0
b21SaWdodEluZGV4LngoKSAtIGN1cnJlbnRUb3BMZWZ0SW5kZXgueCgpICsgMTsKKyAgICB1bnNp
Z25lZCBjdXJyZW50VmVydGljYWxUaWxlcyA9IGN1cnJlbnRCb3R0b21SaWdodEluZGV4LnkoKSAt
IGN1cnJlbnRUb3BMZWZ0SW5kZXgueSgpICsgMTsKKworICAgIC8vIElmIHdlIGhhdmUgdGlsZXMg
YWxyZWFkeSwgb25seSBjZW50ZXIgaWYgd2Ugd291bGQgZ2V0IGJlbmVmaXRzIGZyb20gYm90aCBk
aXJlY3Rpb25zIChhcyB3ZSBuZWVkIHRvIHRocm93IG91dCBleGlzdGluZyB0aWxlcykuCisgICAg
aWYgKHRpbGVDb3VudCgpICYmIChjdXJyZW50SG9yaXpvbnRhbFRpbGVzID09IG1pbmltdW1Ib3Jp
em9udGFsVGlsZXMgfHwgY3VycmVudFZlcnRpY2FsVGlsZXMgPT0gbWluaW11bVZlcnRpY2FsVGls
ZXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBuZXdPcmlnaW4oMCwgMCk7Cisg
ICAgSW50U2l6ZSBzaXplID0gYm91bmRzKCkuc2l6ZSgpOworICAgIGlmIChzaXplLndpZHRoKCkg
PiBtX3RpbGVTaXplLndpZHRoKCkpIHsKKyAgICAgICAgbmV3T3JpZ2luLnNldFgoKHZpc2libGVS
ZWN0LngoKSAtIChtaW5pbXVtSG9yaXpvbnRhbFRpbGVzICogbV90aWxlU2l6ZS53aWR0aCgpIC0g
dmlzaWJsZVJlY3Qud2lkdGgoKSkgLyAyKSAlIG1fdGlsZVNpemUud2lkdGgoKSk7CisgICAgICAg
IGlmIChuZXdPcmlnaW4ueCgpIDwgMCkKKyAgICAgICAgICAgIG5ld09yaWdpbi5zZXRYKDApOwor
ICAgIH0KKyAgICBpZiAoc2l6ZS5oZWlnaHQoKSA+IG1fdGlsZVNpemUuaGVpZ2h0KCkpIHsKKyAg
ICAgICAgbmV3T3JpZ2luLnNldFkoKHZpc2libGVSZWN0LnkoKSAtIChtaW5pbXVtVmVydGljYWxU
aWxlcyAqIG1fdGlsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgLyAyKSAl
IG1fdGlsZVNpemUuaGVpZ2h0KCkpOworICAgICAgICBpZiAobmV3T3JpZ2luLnkoKSA8IDApCisg
ICAgICAgICAgICBuZXdPcmlnaW4uc2V0WSgwKTsKKyAgICB9CisKKyAgICAvLyBEcm9wIGFsbCBl
eGlzdGluZyB0aWxlcyBpZiB0aGUgb3JpZ2luIG1vdmVkLgorICAgIGlmIChuZXdPcmlnaW4gPT0g
bV9vcmlnaW4pCisgICAgICAgIHJldHVybjsKKyAgICBtX3RpbGVzLmNsZWFyKCk7CisgICAgbV9v
cmlnaW4gPSBuZXdPcmlnaW47Cit9CisKK1Bhc3NSZWZQdHI8VGlsZUdyaWRUaWxlPiBUaWxlR3Jp
ZDo6dGlsZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1
cm4gdGlsZUZvckluZGV4KHRpbGVJbmRleEZvclBvaW50KHBvaW50KSk7Cit9CisKK2Jvb2wgVGls
ZUdyaWQ6OnRpbGVzQ292ZXIoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICByZXR1
cm4gdGlsZUZvclBvaW50KHJlY3QubG9jYXRpb24oKSkgJiYgdGlsZUZvclBvaW50KEludFBvaW50
KHJlY3QubWF4WCgpIC0gMSwgcmVjdC55KCkpKSAmJgorICAgIHRpbGVGb3JQb2ludChJbnRQb2lu
dChyZWN0LngoKSwgcmVjdC5tYXhZKCkgLSAxKSkgJiYgdGlsZUZvclBvaW50KEludFBvaW50KHJl
Y3QubWF4WCgpIC0gMSwgcmVjdC5tYXhZKCkgLSAxKSk7Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OnVw
ZGF0ZVRpbGVPcGFjaXR5KCkKK3sKKyAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVz
LmVuZCgpOworICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgW2l0LT52YWx1ZS0+dGlsZUxheWVyKCkgc2V0T3Bh
cXVlOm1fdGlsZUNhY2hlLT50aWxlc09wYXF1ZSgpXTsKK30KKwordm9pZCBUaWxlR3JpZDo6dXBk
YXRlVGlsZUJvcmRlclZpc2liaWxpdHkoKQoreworICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUtPnNob3dCb3JkZXIo
bV90aWxlQ2FjaGUtPnRpbGVCb3JkZXJzVmlzaWJsZSgpKTsKK30KKwordW5zaWduZWQgVGlsZUdy
aWQ6OnRpbGVDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZXMuc2l6ZSgpOworfQor
Citib29sIFRpbGVHcmlkOjpjaGVja0RvU2luZ2xlVGlsZUxheW91dCgpCit7CisgICAgSW50U2l6
ZSBzaXplID0gYm91bmRzKCkuc2l6ZSgpOworICAgIGlmIChzaXplLndpZHRoKCkgPiBtX3RpbGVT
aXplLndpZHRoKCkgfHwgc2l6ZS5oZWlnaHQoKSA+IG1fdGlsZVNpemUuaGVpZ2h0KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX29yaWdpbiAhPSBJbnRQb2ludCgwLCAwKSkg
eworICAgICAgICBtX3RpbGVzLmNsZWFyKCk7CisgICAgICAgIG1fb3JpZ2luID0gSW50UG9pbnQo
MCwgMCk7CisgICAgfQorCisgICAgZHJvcEludmFsaWRUaWxlcygpOworCisgICAgaWYgKHNpemUu
aXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVCghbV90aWxlcy5nZXQoVGlsZUluZGV4KDAsIDAp
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFRpbGVJbmRleCBvcmlnaW5J
bmRleCgwLCAwKTsKKyAgICBpZiAoIW1fdGlsZXMuZ2V0KG9yaWdpbkluZGV4KSkKKyAgICAgICAg
bV90aWxlcy5zZXQob3JpZ2luSW5kZXgsIFRpbGVHcmlkVGlsZTo6Y3JlYXRlKHRoaXMsIHRpbGVS
ZWN0Rm9ySW5kZXgob3JpZ2luSW5kZXgpKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBUaWxlR3JpZDo6dXBkYXRlSG9zdExheWVyU2l6ZSgpCit7CisgICAgQ0FMYXllciogaG9zdExh
eWVyID0gbV90aWxlQ2FjaGUtPmhvc3RMYXllcigpOworICAgIENHUmVjdCB0aWxlSG9zdEJvdW5k
cyA9IFtob3N0TGF5ZXIgY29udmVydFJlY3Q6W2hvc3RMYXllciBib3VuZHNdIHRvTGF5ZXI6dGls
ZUhvc3RMYXllcigpXTsKKyAgICBDR1NpemUgdHJhbnNmb3JtZWRTaXplOworICAgIHRyYW5zZm9y
bWVkU2l6ZS53aWR0aCA9IENHUm91bmQodGlsZUhvc3RCb3VuZHMuc2l6ZS53aWR0aCk7CisgICAg
dHJhbnNmb3JtZWRTaXplLmhlaWdodCA9IENHUm91bmQodGlsZUhvc3RCb3VuZHMuc2l6ZS5oZWln
aHQpOworCisgICAgQ0dSZWN0IGJvdW5kcyA9IFt0aWxlSG9zdExheWVyKCkgYm91bmRzXTsKKyAg
ICBpZiAoQ0dTaXplRXF1YWxUb1NpemUoYm91bmRzLnNpemUsIHRyYW5zZm9ybWVkU2l6ZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICBib3VuZHMuc2l6ZSA9IHRyYW5zZm9ybWVkU2l6ZTsKKyAgICBb
dGlsZUhvc3RMYXllcigpIHNldEJvdW5kczpib3VuZHNdOworfQorCit2b2lkIFRpbGVHcmlkOjpk
cm9wSW52YWxpZFRpbGVzKCkKK3sKKyAgICBJbnRSZWN0IGJvdW5kcyA9IHRoaXMtPmJvdW5kcygp
OworICAgIEludFJlY3QgZHJvcEJvdW5kcyA9IGludGVyc2VjdGlvbihtX3ZhbGlkQm91bmRzLCBi
b3VuZHMpOworICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRvUmVtb3ZlOworICAgIGZvciAoYXV0byB0
aWxlIDogbV90aWxlcykgeworICAgICAgICBUaWxlSW5kZXgmIGluZGV4ID0gdGlsZS5rZXk7Cisg
ICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB0aWxlLnZhbHVlLT5yZWN0KCk7CisgICAgICAgIElu
dFJlY3QgZXhwZWN0ZWRUaWxlUmVjdCA9IHRpbGVSZWN0Rm9ySW5kZXgoaW5kZXgpOworICAgICAg
ICBpZiAoZXhwZWN0ZWRUaWxlUmVjdCAhPSB0aWxlUmVjdCB8fCAhZHJvcEJvdW5kcy5jb250YWlu
cyh0aWxlUmVjdCkpCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaW5kZXgpOworICAgIH0K
KyAgICB1bnNpZ25lZCByZW1vdmVDb3VudCA9IHRvUmVtb3ZlLnNpemUoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIG4gPSAwOyBuIDwgcmVtb3ZlQ291bnQ7ICsrbikKKyAgICAgICAgbV90aWxlcy5yZW1v
dmUodG9SZW1vdmVbbl0pOworCisgICAgbV92YWxpZEJvdW5kcyA9IGJvdW5kczsKK30KKwordm9p
ZCBUaWxlR3JpZDo6aW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sK
KyAgICBpZiAoIWhhc1RpbGVzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgYm91
bmRzID0gdGhpcy0+Ym91bmRzKCk7CisgICAgaWYgKGludGVyc2VjdGlvbihib3VuZHMsIG1fdmFs
aWRCb3VuZHMpICE9IG1fdmFsaWRCb3VuZHMpIHsKKyAgICAgICAgLy8gVGhlIGJvdW5kcyBoYXZl
IGdvdCBzbWFsbGVyLiBFdmVyeXRoaW5nIG91dHNpZGUgd2lsbCBhbHNvIGJlIGNvbnNpZGVyZWQg
aW52YWxpZCBhbmQgd2lsbCBiZSBkcm9wcGVkIGJ5IGRyb3BJbnZhbGlkVGlsZXMoKS4KKyAgICAg
ICAgLy8gRHVlIHRvIGRpcnR5UmVjdCBiZWluZyBsaW1pdGVkIHRvIGN1cnJlbnQgYm91bmRzIHRo
ZSB0aWxlcyB0aGF0IGFyZSB0ZW1wb3JhcmlseSBvdXRzaWRlIG1pZ2h0IG1pc3MgaW52YWxpZGF0
aW9uIAorICAgICAgICAvLyBjb21wbGV0ZWx5IG90aHdlcndpc2UuCisgICAgICAgIG1fdmFsaWRC
b3VuZHMgPSBib3VuZHM7CisgICAgfQorCisgICAgVmVjdG9yPFRpbGVJbmRleD4gaW52YWxpZGF0
ZWRUaWxlczsKKworICAgIGlmIChkaXJ0eVJlY3Qud2lkdGgoKSA+IG1fdGlsZVNpemUud2lkdGgo
KSAqIDQgfHwgZGlydHlSZWN0LmhlaWdodCgpID4gbV90aWxlU2l6ZS5oZWlnaHQoKSAqIDQpIHsK
KyAgICAgICAgLy8gRm9yIGxhcmdlIGludmFsaWRhdGVzLCBpdGVyYXRlIG92ZXIgbGl2ZSB0aWxl
cy4KKyAgICAgICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICAg
ICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICAgICBUaWxlR3JpZFRpbGUqIHRpbGUgPSBpdC0+dmFsdWUuZ2V0
KCk7CisgICAgICAgICAgICBpZiAoIXRpbGUtPnJlY3QoKS5pbnRlcnNlY3RzKGRpcnR5UmVjdCkp
CisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRpbGUtPmludmFsaWRhdGVS
ZWN0KGRpcnR5UmVjdCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlZFRpbGVzLmFwcGVuZChpdC0+
a2V5KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFRpbGVJbmRleCB0b3BMZWZ0
SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludCh0b3BMZWZ0KGRpcnR5UmVjdCkpOworICAgICAgICBU
aWxlSW5kZXggYm90dG9tUmlnaHRJbmRleCA9IHRpbGVJbmRleEZvclBvaW50KGJvdHRvbVJpZ2h0
KGRpcnR5UmVjdCkpOworICAgICAgICBmb3IgKGludCB5SW5kZXggPSB0b3BMZWZ0SW5kZXgueSgp
OyB5SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC55KCk7ICsreUluZGV4KSB7CisgICAgICAgICAg
ICBmb3IgKGludCB4SW5kZXggPSB0b3BMZWZ0SW5kZXgueCgpOyB4SW5kZXggPD0gYm90dG9tUmln
aHRJbmRleC54KCk7ICsreEluZGV4KSB7CisgICAgICAgICAgICAgICAgVGlsZUluZGV4IGluZGV4
KHhJbmRleCwgeUluZGV4KTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8VGlsZUdyaWRUaWxlPiB0
aWxlID0gdGlsZUZvckluZGV4KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIXRpbGUpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmICghdGlsZS0+
cmVjdCgpLmludGVyc2VjdHMoZGlydHlSZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgdGlsZS0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKKyAg
ICAgICAgICAgICAgICBpbnZhbGlkYXRlZFRpbGVzLmFwcGVuZChpbmRleCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGludmFsaWRhdGVkVGlsZXMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisgICAgLy8gV2hlbiB1c2luZyBtaW5pbWFsIGNvdmVyYWdlLCBk
cm9wIHNwZWN1bGF0aXZlIHRpbGVzIGluc3RlYWQgb2YgdXBkYXRpbmcgdGhlbS4KKyAgICBpZiAo
IXNob3VsZFVzZU1pbmltYWxUaWxlQ292ZXJhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChtX3RpbGVDYWNoZS0+dGlsaW5nTW9kZSgpICE9IFRpbGVDYWNoZTo6TWluaW1hbCAmJiBtX3Rp
bGVDYWNoZS0+dGlsaW5nTW9kZSgpICE9IFRpbGVDYWNoZTo6Tm9ybWFsKQorICAgICAgICByZXR1
cm47CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHRoaXMtPnZpc2libGVSZWN0KCk7CisgICAg
dW5zaWduZWQgY291bnQgPSBpbnZhbGlkYXRlZFRpbGVzLnNpemUoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBSZWZQdHI8VGlsZUdyaWRUaWxl
PiB0aWxlID0gdGlsZUZvckluZGV4KGludmFsaWRhdGVkVGlsZXNbaV0pOworICAgICAgICBpZiAo
IXRpbGUtPnJlY3QoKS5pbnRlcnNlY3RzKHZpc2libGVSZWN0KSkKKyAgICAgICAgICAgIG1fdGls
ZXMucmVtb3ZlKGludmFsaWRhdGVkVGlsZXNbaV0pOworICAgIH0KK30KKworYm9vbCBUaWxlR3Jp
ZDo6c2hvdWxkVXNlTWluaW1hbFRpbGVDb3ZlcmFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
dGlsZUNhY2hlLT50aWxpbmdNb2RlKCkgPT0gVGlsZUNhY2hlOjpNaW5pbWFsCisgICAgICAgIHx8
ICFtX3RpbGVDYWNoZS0+aXNTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQoKQorICAgICAg
ICB8fCBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5oYXNSZWNlaXZlZE1lbW9yeVByZXNzdXJlKCk7
Cit9CisKK0ludFJlY3QgVGlsZUdyaWQ6OmFkanVzdENvdmVyUmVjdEZvclBhZ2VCb3VuZHMoY29u
c3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICAvLyBBZGp1c3QgdGhlIHJlY3Qgc28gdGhh
dCBpdCBzdGF5cyB3aXRoaW4gdGhlIGJvdW5kcyBhbmQga2VlcHMgdGhlIHBpeGVsIHNpemUuCisg
ICAgSW50UmVjdCBib3VuZHMgPSB0aGlzLT5ib3VuZHMoKTsKKyAgICBJbnRSZWN0IGFkanVzdGVk
UmVjdCA9IHJlY3Q7CisgICAgYWRqdXN0ZWRSZWN0Lm1vdmUocmVjdC54KCkgPCBib3VuZHMueCgp
ID8gYm91bmRzLngoKSAtIHJlY3QueCgpIDogMCwKKyAgICAgICAgICAgICAgcmVjdC55KCkgPCBi
b3VuZHMueSgpID8gYm91bmRzLnkoKSAtIHJlY3QueSgpIDogMCk7CisgICAgYWRqdXN0ZWRSZWN0
Lm1vdmUocmVjdC5tYXhYKCkgPiBib3VuZHMubWF4WCgpID8gYm91bmRzLm1heFgoKSAtIHJlY3Qu
bWF4WCgpIDogMCwKKyAgICAgICAgICAgICAgcmVjdC5tYXhZKCkgPiBib3VuZHMubWF4WSgpID8g
Ym91bmRzLm1heFkoKSAtIHJlY3QubWF4WSgpIDogMCk7CisgICAgYWRqdXN0ZWRSZWN0ID0gaW50
ZXJzZWN0aW9uKGJvdW5kcywgYWRqdXN0ZWRSZWN0KTsKKyAgICBpZiAoYWRqdXN0ZWRSZWN0ID09
IHJlY3QgfHwgYWRqdXN0ZWRSZWN0LmlzRW1wdHkoKSB8fCBzaG91bGRVc2VNaW5pbWFsVGlsZUNv
dmVyYWdlKCkpCisgICAgICAgIHJldHVybiBhZGp1c3RlZFJlY3Q7CisgICAgaW50IHBpeGVscyA9
IGFkanVzdGVkUmVjdC53aWR0aCgpICogYWRqdXN0ZWRSZWN0LmhlaWdodCgpOworICAgIGlmIChh
ZGp1c3RlZFJlY3Qud2lkdGgoKSAhPSByZWN0LndpZHRoKCkpCisgICAgICAgIGFkanVzdGVkUmVj
dC5pbmZsYXRlWSgocGl4ZWxzIC8gYWRqdXN0ZWRSZWN0LndpZHRoKCkgLSBhZGp1c3RlZFJlY3Qu
aGVpZ2h0KCkpIC8gMik7CisgICAgZWxzZSBpZiAoYWRqdXN0ZWRSZWN0LmhlaWdodCgpICE9IHJl
Y3QuaGVpZ2h0KCkpCisgICAgICAgIGFkanVzdGVkUmVjdC5pbmZsYXRlWCgocGl4ZWxzIC8gYWRq
dXN0ZWRSZWN0LmhlaWdodCgpIC0gYWRqdXN0ZWRSZWN0LndpZHRoKCkpIC8gMik7CisgICAgcmV0
dXJuIGludGVyc2VjdGlvbihhZGp1c3RlZFJlY3QsIGJvdW5kcyk7Cit9CisKK0ludFJlY3QgVGls
ZUdyaWQ6OmNhbGN1bGF0ZUNvdmVyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgYm9v
bCYgY2VudGVyR3JpZCkKK3sKKyAgICAvLyBVc2UgbWluaW11bSBjb3ZlclJlY3QgaWYgd2UgYXJl
IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KKyAgICBpZiAoc2hvdWxkVXNlTWluaW1hbFRpbGVDb3Zl
cmFnZSgpKSB7CisgICAgICAgIGNlbnRlckdyaWQgPSB0cnVlOworICAgICAgICByZXR1cm4gdmlz
aWJsZVJlY3Q7CisgICAgfQorICAgIEludFJlY3QgY292ZXJSZWN0ID0gdmlzaWJsZVJlY3Q7Cisg
ICAgY2VudGVyR3JpZCA9IGZhbHNlOworICAgIGNvdmVyUmVjdC5pbmZsYXRlWCh2aXNpYmxlUmVj
dC53aWR0aCgpIC8gMik7CisgICAgY292ZXJSZWN0LmluZmxhdGVZKHZpc2libGVSZWN0LmhlaWdo
dCgpKTsKKyAgICByZXR1cm4gYWRqdXN0Q292ZXJSZWN0Rm9yUGFnZUJvdW5kcyhjb3ZlclJlY3Qp
OworfQorCitkb3VibGUgVGlsZUdyaWQ6OnRpbGVEaXN0YW5jZTIoY29uc3QgSW50UmVjdCYgdmlz
aWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KSBjb25zdAoreworICAgIC8vIFRoZSAi
ZGlzdGFuY2UiIGNhbGN1bGF0ZWQgaGVyZSBpcyB1c2VkIHRvIHBpY2sgd2hpY2ggdGlsZSB0byBj
YWNoZSBuZXh0LiBUaGUgaWRlYSBpcyB0byBjcmVhdGUgdGhvc2UKKyAgICAvLyBjbG9zZXN0IHRv
IHRoZSBjdXJyZW50IHZpZXdwb3J0IGZpcnN0IHNvIHRoZSB1c2VyIGlzIG1vcmUgbGlrZWx5IHRv
IHNlZSBhbHJlYWR5IHJlbmRlcmVkIGNvbnRlbnQgd2Ugc2hlCisgICAgLy8gc2Nyb2xscy4gVGhl
IGNhbGN1bGF0aW9uIGlzIHdlaWdodGVkIHRvIHByZWZlciB2ZXJ0aWNhbCBhbmQgZG93bndhcmQg
ZGlyZWN0aW9uLgorICAgIGlmICh2aXNpYmxlUmVjdC5pbnRlcnNlY3RzKHRpbGVSZWN0KSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgSW50UG9pbnQgdmlzaWJsZUNlbnRlciA9IHZpc2libGVSZWN0
LmxvY2F0aW9uKCkgKyBJbnRTaXplKHZpc2libGVSZWN0LndpZHRoKCkgLyAyLCB2aXNpYmxlUmVj
dC5oZWlnaHQoKSAvIDIpOworICAgIEludFBvaW50IHRpbGVDZW50ZXIgPSB0aWxlUmVjdC5sb2Nh
dGlvbigpICsgSW50U2l6ZSh0aWxlUmVjdC53aWR0aCgpIC8gMiwgdGlsZVJlY3QuaGVpZ2h0KCkg
LyAyKTsKKyAgICAKKyAgICBkb3VibGUgaG9yaXpvbnRhbEJpYXMgPSAxLjA7CisgICAgZG91Ymxl
IGxlZnR3YXJkQmlhcyA9IDEuMDsKKyAgICBkb3VibGUgcmlnaHR3YXJkQmlhcyA9IDEuMDsKKwor
ICAgIGRvdWJsZSB2ZXJ0aWNhbEJpYXMgPSAxLjA7CisgICAgZG91YmxlIHVwd2FyZEJpYXMgPSAx
LjA7CisgICAgZG91YmxlIGRvd253YXJkQmlhcyA9IDEuMDsKKworICAgIGNvbnN0IGRvdWJsZSB0
aWxpbmdCaWFzVmVyeUxpa2VseSA9IDAuODsKKyAgICBjb25zdCBkb3VibGUgdGlsaW5nQmlhc0xp
a2VseSA9IDAuOTsKKworICAgIHN3aXRjaCAobV90aWxlQ2FjaGUtPnRpbGluZ0RpcmVjdGlvbigp
KSB7CisgICAgY2FzZSBUaWxlQ2FjaGU6OlRpbGluZ0RpcmVjdGlvblVwOgorICAgICAgICB2ZXJ0
aWNhbEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxpa2VseTsKKyAgICAgICAgdXB3YXJkQmlhcyA9IHRp
bGluZ0JpYXNMaWtlbHk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGlsZUNhY2hlOjpUaWxp
bmdEaXJlY3Rpb25Eb3duOgorICAgICAgICB2ZXJ0aWNhbEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxp
a2VseTsKKyAgICAgICAgZG93bndhcmRCaWFzID0gdGlsaW5nQmlhc0xpa2VseTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBUaWxlQ2FjaGU6OlRpbGluZ0RpcmVjdGlvbkxlZnQ6CisgICAgICAg
IGhvcml6b250YWxCaWFzID0gdGlsaW5nQmlhc1ZlcnlMaWtlbHk7CisgICAgICAgIGxlZnR3YXJk
QmlhcyA9IHRpbGluZ0JpYXNMaWtlbHk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGlsZUNh
Y2hlOjpUaWxpbmdEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgaG9yaXpvbnRhbEJpYXMgPSB0aWxp
bmdCaWFzVmVyeUxpa2VseTsKKyAgICAgICAgcmlnaHR3YXJkQmlhcyA9IHRpbGluZ0JpYXNMaWtl
bHk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRvdWJsZSB4U2NhbGUgPSBob3Jpem9u
dGFsQmlhcyAqIHZpc2libGVSZWN0LmhlaWdodCgpIC8gdmlzaWJsZVJlY3Qud2lkdGgoKSAqICh0
aWxlQ2VudGVyLngoKSA+PSB2aXNpYmxlQ2VudGVyLngoKSA/IHJpZ2h0d2FyZEJpYXMgOiBsZWZ0
d2FyZEJpYXMpOworICAgIGRvdWJsZSB5U2NhbGUgPSB2ZXJ0aWNhbEJpYXMgKiB2aXNpYmxlUmVj
dC53aWR0aCgpIC8gdmlzaWJsZVJlY3QuaGVpZ2h0KCkgKiAodGlsZUNlbnRlci55KCkgPj0gdmlz
aWJsZUNlbnRlci55KCkgPyBkb3dud2FyZEJpYXMgOiB1cHdhcmRCaWFzKTsKKworICAgIGRvdWJs
ZSB4RGlzdGFuY2UgPSB4U2NhbGUgKiAodGlsZUNlbnRlci54KCkgLSB2aXNpYmxlQ2VudGVyLngo
KSk7CisgICAgZG91YmxlIHlEaXN0YW5jZSA9IHlTY2FsZSAqICh0aWxlQ2VudGVyLnkoKSAtIHZp
c2libGVDZW50ZXIueSgpKTsKKworICAgIGRvdWJsZSBkaXN0YW5jZTIgPSB4RGlzdGFuY2UgKiB4
RGlzdGFuY2UgKyB5RGlzdGFuY2UgKiB5RGlzdGFuY2U7CisgICAgcmV0dXJuIGRpc3RhbmNlMjsK
K30KKwordm9pZCBUaWxlR3JpZDo6Y3JlYXRlVGlsZXMoVGlsZUNhY2hlOjpTeW5jaHJvbm91c1Rp
bGVDcmVhdGlvbk1vZGUgY3JlYXRpb25Nb2RlKQoreworICAgIEludFJlY3QgdmlzaWJsZVJlY3Qg
PSB0aGlzLT52aXNpYmxlUmVjdCgpOworICAgIGlmICh2aXNpYmxlUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIERyb3AgdGlsZXMgdGhhdCBhcmUgd3Jvbmcgc2l6ZSBv
ciBvdXRzaWRlIHRoZSBmcmFtZSAoYmVjYXVzZSB0aGUgZnJhbWUgaGFzIGJlZW4gcmVzaXplZCku
CisgICAgZHJvcEludmFsaWRUaWxlcygpOworCisgICAgYm9vbCBjZW50ZXJHcmlkOworICAgIElu
dFJlY3QgY292ZXJSZWN0ID0gY2FsY3VsYXRlQ292ZXJSZWN0KHZpc2libGVSZWN0LCBjZW50ZXJH
cmlkKTsKKworICAgIC8vIElmIHRpbGUgc2l6ZSBpcyBiaWdnZXIgdGhhbiB0aGUgdmlldywgY2Vu
dGVyaW5nIG1pbmltaXplcyB0aGUgcGFpbnRpbmcgbmVlZGVkIHRvIGNvdmVyIHRoZSBzY3JlZW4u
CisgICAgLy8gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBhZnRlciB6b29taW5nIAorICAgIGNl
bnRlckdyaWQgPSBjZW50ZXJHcmlkIHx8ICF0aWxlQ291bnQoKTsKKyAgICBpZiAoY2VudGVyR3Jp
ZCkKKyAgICAgICAgY2VudGVyVGlsZUdyaWRPcmlnaW4odmlzaWJsZVJlY3QpOworCisgICAgZG91
YmxlIHNob3J0ZXN0RGlzdGFuY2UgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmlu
aXR5KCk7CisgICAgZG91YmxlIGNvdmVyZWREaXN0YW5jZSA9IDA7CisgICAgVmVjdG9yPFRpbGVH
cmlkOjpUaWxlSW5kZXg+IHRpbGVzVG9DcmVhdGU7CisgICAgdW5zaWduZWQgcGVuZGluZ1RpbGVD
b3VudCA9IDA7CisKKyAgICBUaWxlR3JpZDo6VGlsZUluZGV4IHRvcExlZnRJbmRleCA9IHRpbGVJ
bmRleEZvclBvaW50KHRvcExlZnQoY292ZXJSZWN0KSk7CisgICAgVGlsZUdyaWQ6OlRpbGVJbmRl
eCBib3R0b21SaWdodEluZGV4ID0gdGlsZUluZGV4Rm9yUG9pbnQoYm90dG9tUmlnaHQoY292ZXJS
ZWN0KSk7CisgICAgZm9yIChpbnQgeUluZGV4ID0gdG9wTGVmdEluZGV4LnkoKTsgeUluZGV4IDw9
IGJvdHRvbVJpZ2h0SW5kZXgueSgpOyArK3lJbmRleCkgeworICAgICAgICBmb3IgKGludCB4SW5k
ZXggPSB0b3BMZWZ0SW5kZXgueCgpOyB4SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC54KCk7ICsr
eEluZGV4KSB7CisgICAgICAgICAgICBUaWxlR3JpZDo6VGlsZUluZGV4IGluZGV4KHhJbmRleCwg
eUluZGV4KTsKKyAgICAgICAgICAgIC8vIEN1cnJlbnRseSB2aXNpYmxlIHRpbGVzIGhhdmUgZGlz
dGFuY2Ugb2YgMCBhbmQgZ2V0IGFsbCBjcmVhdGVkIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLgor
ICAgICAgICAgICAgZG91YmxlIGRpc3RhbmNlID0gdGlsZURpc3RhbmNlMih2aXNpYmxlUmVjdCwg
dGlsZVJlY3RGb3JJbmRleChpbmRleCkpOworICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gY292
ZXJlZERpc3RhbmNlKQorICAgICAgICAgICAgICAgIGNvdmVyZWREaXN0YW5jZSA9IGRpc3RhbmNl
OworICAgICAgICAgICAgaWYgKHRpbGVGb3JJbmRleChpbmRleCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICArK3BlbmRpbmdUaWxlQ291bnQ7CisgICAgICAgICAgICBp
ZiAoZGlzdGFuY2UgPiBzaG9ydGVzdERpc3RhbmNlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgc2hvcnRlc3REaXN0YW5jZSkgeworICAgICAg
ICAgICAgICAgIHRpbGVzVG9DcmVhdGUuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBzaG9ydGVz
dERpc3RhbmNlID0gZGlzdGFuY2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aWxlc1Rv
Q3JlYXRlLmFwcGVuZChpbmRleCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzaXplX3QgdGls
ZXNUb0NyZWF0ZUNvdW50ID0gdGlsZXNUb0NyZWF0ZS5zaXplKCk7CisKKyAgICAvLyBUaWxlIGNy
ZWF0aW9uIHRpbWVyIHdpbGwgaW52b2tlIHRoaXMgZnVuY3Rpb24gYWdhaW4gaW4gQ292ZXJTcGVj
dWxhdGl2ZSBtb2RlLgorICAgIGJvb2wgY2FuZGlkYXRlVGlsZXNBcmVTcGVjdWxhdGl2ZSA9IHNo
b3J0ZXN0RGlzdGFuY2UgPiAwOworICAgIGlmIChjcmVhdGlvbk1vZGUgPT0gVGlsZUNhY2hlOjpD
b3ZlclZpc2libGVPbmx5ICYmIGNhbmRpZGF0ZVRpbGVzQXJlU3BlY3VsYXRpdmUpCisgICAgICAg
IHRpbGVzVG9DcmVhdGVDb3VudCA9IDA7CisKKyAgICAvLyBFdmVuIGlmIHdlIGRvbid0IGNyZWF0
ZSBhbnkgdGlsZXMsIHdlIHNob3VsZCBzdGlsbCBkcm9wIGRpc3RhbnQgdGlsZXMKKyAgICAvLyBp
biBjYXNlIGNvdmVyUmVjdCBnb3Qgc21hbGxlci4KKyAgICBkb3VibGUga2VlcERpc3RhbmNlID0g
c3RkOjptaW4oc2hvcnRlc3REaXN0YW5jZSwgY292ZXJlZERpc3RhbmNlKTsKKyAgICBpZiAoIWRy
b3BEaXN0YW50VGlsZXModGlsZXNUb0NyZWF0ZUNvdW50LCBrZWVwRGlzdGFuY2UpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQocGVuZGluZ1RpbGVDb3VudCA+PSB0aWxlc1RvQ3JlYXRl
Q291bnQpOworICAgIGlmICghcGVuZGluZ1RpbGVDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCB0aWxlc1RvQ3JlYXRlQ291bnQ7ICsrbikKKyAgICAg
ICAgYWRkVGlsZUZvckluZGV4KHRpbGVzVG9DcmVhdGVbbl0pOworCisgICAgYm9vbCBkaWRDcmVh
dGVUaWxlcyA9ICEhdGlsZXNUb0NyZWF0ZUNvdW50OworICAgIGJvb2wgY3JlYXRlTW9yZVRpbGVz
ID0gcGVuZGluZ1RpbGVDb3VudCA+IHRpbGVzVG9DcmVhdGVDb3VudDsKKyAgICBtX3RpbGVDYWNo
ZS0+ZmluaXNoZWRDcmVhdGluZ1RpbGVzKGRpZENyZWF0ZVRpbGVzLCBjcmVhdGVNb3JlVGlsZXMp
OworfQorCit2b2lkIFRpbGVHcmlkOjpkdW1wVGlsZXMoKQoreworICAgIEludFJlY3QgdmlzaWJs
ZVJlY3QgPSB0aGlzLT52aXNpYmxlUmVjdCgpOworICAgIE5TTG9nKEAidHJhbnNmb3JtZWQgdmlz
aWJsZVJlY3QgPSBbJTZkICU2ZCAlNmQgJTZkXSIsIHZpc2libGVSZWN0LngoKSwgdmlzaWJsZVJl
Y3QueSgpLCB2aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSk7CisgICAg
dW5zaWduZWQgaSA9IDA7CisgICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQo
KTsKKyAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVGlsZUluZGV4JiBpbmRleCA9IGl0LT5rZXk7CisgICAg
ICAgIEludFJlY3QgdGlsZVJlY3QgPSBpdC0+dmFsdWUtPnJlY3QoKTsKKyAgICAgICAgTlNMb2co
QCIjJS0zZCAoJTNkICUzZCkgLSBbJTZkICU2ZCAlNmQgJTZkXSVAIiwgKytpLCBpbmRleC54KCks
IGluZGV4LnkoKSwgdGlsZVJlY3QueCgpLCB0aWxlUmVjdC55KCksIHRpbGVSZWN0LndpZHRoKCks
IHRpbGVSZWN0LmhlaWdodCgpLCB0aWxlUmVjdC5pbnRlcnNlY3RzKHZpc2libGVSZWN0KSA/IEAi
ICoiIDogQCIiKTsKKyAgICAgICAgTlNMb2coQCIgICAgICVAIiwgW2l0LT52YWx1ZS0+dGlsZUxh
eWVyKCkgY29udGVudHNdKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9UaWxlR3JpZFRpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxl
R3JpZFRpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYWQ5MjI4NWZkOThkYjZhMjkzMjhhMmIzZTAwYzRmOTJk
YWEwMWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Rp
bGVHcmlkVGlsZS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRpbGVH
cmlkVGlsZV9oCisjZGVmaW5lIFRpbGVHcmlkVGlsZV9oCisKKyNpZiBQTEFURk9STShJT1MpCisK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAY2xhc3Mg
VGlsZUxheWVyOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRpbGVHcmlkOworCisv
LyBSZWZjb3VudCB0aGUgdGlsZXMgc28gdGhleSB3b3JrIG5pY2VseSBpbiB2ZWN0b3IgYW5kIHdl
IGtub3cgd2hlbiB0byByZW1vdmUgdGhlIHRpbGUgbGF5ZXIgZnJvbSB0aGUgcGFyZW50LgorY2xh
c3MgVGlsZUdyaWRUaWxlIDogcHVibGljIFJlZkNvdW50ZWQ8VGlsZUdyaWRUaWxlPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGlsZUdyaWRUaWxlPiBjcmVhdGUoVGlsZUdyaWQq
IGdyaWQsIGNvbnN0IEludFJlY3QmIHJlY3QpIHsgcmV0dXJuIGFkb3B0UmVmPFRpbGVHcmlkVGls
ZT4obmV3IFRpbGVHcmlkVGlsZShncmlkLCByZWN0KSk7IH0KKyAgICB+VGlsZUdyaWRUaWxlKCk7
CisKKyAgICBUaWxlTGF5ZXIqIHRpbGVMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZUxheWVy
LmdldCgpOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0SW5T
dXJmYWNlKTsKKyAgICBJbnRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAg
ICB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpOworICAgIHZvaWQgc2hvd0Jv
cmRlcihib29sKTsKKworcHJpdmF0ZToKKyAgICBUaWxlR3JpZFRpbGUoVGlsZUdyaWQqLCBjb25z
dCBJbnRSZWN0Jik7CisKKyAgICBUaWxlR3JpZCogbV90aWxlR3JpZDsKKyAgICBSZXRhaW5QdHI8
VGlsZUxheWVyPiBtX3RpbGVMYXllcjsKKyAgICBJbnRSZWN0IG1fcmVjdDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKyNlbmRpZiAvLyBU
aWxlR3JpZFRpbGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Rp
bGVHcmlkVGlsZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTYxODY3YTcxNzNiOGUyYzJjMGZmNDlkZmYzZDUxNTI0ZGIzYmU2NQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRp
bGUubW0KQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGlsZUdyaWQuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUg
IkNvbG9yLmgiCisjaW5jbHVkZSAiVGlsZUNhY2hlLmgiCisjaW5jbHVkZSAiVGlsZUdyaWRUaWxl
LmgiCisjaW5jbHVkZSAiVGlsZUxheWVyLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyUG9vbC5oIgor
I2luY2x1ZGUgIldBS1dpbmRvdy5oIgorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5o
PgorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZVByaXZhdGUuaD4KKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisjaWYgTE9HX1RJTElORworc3RhdGljIGludCB0b3RhbFRpbGVDb3VudDsKKyNlbmRpZgorCitU
aWxlR3JpZFRpbGU6OlRpbGVHcmlkVGlsZShUaWxlR3JpZCogdGlsZUdyaWQsIGNvbnN0IEludFJl
Y3QmIHRpbGVSZWN0KQorICAgIDogbV90aWxlR3JpZCh0aWxlR3JpZCkKKyAgICAsIG1fcmVjdCh0
aWxlUmVjdCkKK3sKKyAgICBBU1NFUlQoIXRpbGVSZWN0LmlzRW1wdHkoKSk7CisgICAgSW50U2l6
ZSBwaXhlbFNpemUobV9yZWN0LnNpemUoKSk7CisgICAgY29uc3QgQ0dGbG9hdCBzY3JlZW5TY2Fs
ZSA9IG1fdGlsZUdyaWQtPnRpbGVDYWNoZSgpLT5zY3JlZW5TY2FsZSgpOworICAgIHBpeGVsU2l6
ZS5zY2FsZShzY3JlZW5TY2FsZSk7CisgICAgbV90aWxlTGF5ZXIgPSBUaWxlTGF5ZXJQb29sOjpz
aGFyZWRQb29sKCktPnRha2VMYXllcldpdGhTaXplKHBpeGVsU2l6ZSk7CisgICAgaWYgKCFtX3Rp
bGVMYXllcikgeworI2lmIExPR19USUxJTkcKKyAgICAgICAgTlNMb2coQCJ1bmFibGUgdG8gcmV1
c2UgbGF5ZXIgd2l0aCBzaXplICVkIHggJWQsIGNyZWF0aW5nIG9uZSIsIHBpeGVsU2l6ZS53aWR0
aCgpLCBwaXhlbFNpemUuaGVpZ2h0KCkpOworI2VuZGlmCisgICAgICAgIG1fdGlsZUxheWVyID0g
YWRvcHROUyhbW1RpbGVMYXllciBhbGxvY10gaW5pdF0pOworICAgIH0KKyAgICBUaWxlTGF5ZXIq
IGxheWVyID0gbV90aWxlTGF5ZXIuZ2V0KCk7CisgICAgW2xheWVyIHNldFRpbGVHcmlkOnRpbGVH
cmlkXTsKKyAgICBbbGF5ZXIgc2V0T3BhcXVlOm1fdGlsZUdyaWQtPnRpbGVDYWNoZSgpLT50aWxl
c09wYXF1ZSgpXTsKKyAgICBbbGF5ZXIgc2V0RWRnZUFudGlhbGlhc2luZ01hc2s6MF07CisgICAg
W2xheWVyIHNldE5lZWRzTGF5b3V0T25HZW9tZXRyeUNoYW5nZTpOT107CisgICAgW2xheWVyIHNl
dENvbnRlbnRzU2NhbGU6c2NyZWVuU2NhbGVdOworICAgIFtsYXllciBzZXRBY2NlbGVyYXRlc0Ry
YXdpbmc6bV90aWxlR3JpZC0+dGlsZUNhY2hlKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQo
KV07CisKKyAgICAvLyBIb3N0IGxheWVyIG1heSBoYXZlIG90aGVyIHN1YmxheWVycy4gS2VlcCB0
aGUgdGlsZSBsYXllcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkKKyAgICAvLyBzbyB0
aGV5IGFyZSBwYWludGVkIGJlaGluZCBldmVyeXRoaW5nIGVsc2UuCisgICAgW3RpbGVHcmlkLT50
aWxlSG9zdExheWVyKCkgaW5zZXJ0U3VibGF5ZXI6bGF5ZXIgYXRJbmRleDp0aWxlR3JpZC0+dGls
ZUNvdW50KCldOworICAgIFtsYXllciBzZXRGcmFtZTptX3JlY3RdOworICAgIGludmFsaWRhdGVS
ZWN0KG1fcmVjdCk7CisgICAgc2hvd0JvcmRlcihtX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+dGls
ZUJvcmRlcnNWaXNpYmxlKCkpOworCisjaWYgTE9HX1RJTElORworICAgICsrdG90YWxUaWxlQ291
bnQ7CisgICAgTlNMb2coQCJuZXcgVGlsZSAoJWQsJWQpICVkICVkLCBjb3VudCAlZCIsIHRpbGVS
ZWN0LngoKSwgdGlsZVJlY3QueSgpLCB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQo
KSwgdG90YWxUaWxlQ291bnQpOworI2VuZGlmCit9CisKK1RpbGVHcmlkVGlsZTo6flRpbGVHcmlk
VGlsZSgpIAoreworICAgIFt0aWxlTGF5ZXIoKSBzZXRUaWxlR3JpZDowXTsKKyAgICBbdGlsZUxh
eWVyKCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIFRpbGVMYXllclBvb2w6OnNoYXJlZFBv
b2woKS0+YWRkTGF5ZXIodGlsZUxheWVyKCkpOworI2lmIExPR19USUxJTkcKKyAgICAtLXRvdGFs
VGlsZUNvdW50OworICAgIE5TTG9nKEAiZGVsZXRlIFRpbGUgKCVkLCVkKSAlZCAlZCwgY291bnQg
JWQiLCBtX3JlY3QueCgpLCBtX3JlY3QueSgpLCBtX3JlY3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdo
dCgpLCB0b3RhbFRpbGVDb3VudCk7CisjZW5kaWYKK30KKwordm9pZCBUaWxlR3JpZFRpbGU6Omlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHdpbmRvd0RpcnR5UmVjdCkKK3sKKyAgICBJbnRS
ZWN0IGRpcnR5UmVjdCA9IGludGVyc2VjdGlvbih3aW5kb3dEaXJ0eVJlY3QsIG1fcmVjdCk7Cisg
ICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBkaXJ0eVJl
Y3QubW92ZShJbnRQb2ludCgpIC0gbV9yZWN0LmxvY2F0aW9uKCkpOworICAgIFt0aWxlTGF5ZXIo
KSBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6ZGlydHlSZWN0XTsKKworICAgIGlmIChtX3RpbGVHcmlk
LT50aWxlQ2FjaGUoKS0+dGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKCkpCisgICAgICAgIFt0aWxl
TGF5ZXIoKSBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6Q0dSZWN0TWFrZSgwLCAwLCA0NiwgMjUpXTsK
K30KKwordm9pZCBUaWxlR3JpZFRpbGU6OnNldFJlY3QoY29uc3QgSW50UmVjdCYgdGlsZVJlY3Qp
Cit7CisgICAgaWYgKG1fcmVjdCA9PSB0aWxlUmVjdCkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
cmVjdCA9IHRpbGVSZWN0OworICAgIFRpbGVMYXllciogbGF5ZXIgPSBtX3RpbGVMYXllci5nZXQo
KTsKKyAgICBbbGF5ZXIgc2V0RnJhbWU6bV9yZWN0XTsKKyAgICBbbGF5ZXIgc2V0TmVlZHNEaXNw
bGF5XTsKK30KKwordm9pZCBUaWxlR3JpZFRpbGU6OnNob3dCb3JkZXIoYm9vbCBmbGFnKQorewor
ICAgIFRpbGVMYXllciogbGF5ZXIgPSBtX3RpbGVMYXllci5nZXQoKTsKKyAgICBpZiAoZmxhZykg
eworICAgICAgICBbbGF5ZXIgc2V0Qm9yZGVyQ29sb3I6Y2FjaGVkQ0dDb2xvcihtX3RpbGVHcmlk
LT50aWxlQ2FjaGUoKS0+Y29sb3JGb3JHcmlkVGlsZUJvcmRlcihtX3RpbGVHcmlkKSwgQ29sb3JT
cGFjZURldmljZVJHQildOworICAgICAgICBbbGF5ZXIgc2V0Qm9yZGVyV2lkdGg6MC41Zl07Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgW2xheWVyIHNldEJvcmRlckNvbG9yOm5pbF07CisgICAgICAg
IFtsYXllciBzZXRCb3JkZXJXaWR0aDowXTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9UaWxlTGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNGI4NTFkYzhiNjUxN2E1MzY3MzVjNjNlNmVhOGM5
YWUwZGNhZTBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1RpbGVMYXllci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRpbGVM
YXllcl9oCisjZGVmaW5lIFRpbGVMYXllcl9oCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNs
dWRlIDxRdWFydHpDb3JlL0NBTGF5ZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
VGlsZUdyaWQ7Cit9OworCitAaW50ZXJmYWNlIFRpbGVMYXllciA6IENBTGF5ZXIgeworICAgIFdl
YkNvcmU6OlRpbGVHcmlkKiBfdGlsZUdyaWQ7CisgICAgdW5zaWduZWQgX3BhaW50Q291bnQ7Cit9
CitAcHJvcGVydHkgKG5vbmF0b21pYykgdW5zaWduZWQgcGFpbnRDb3VudDsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljKSBXZWJDb3JlOjpUaWxlR3JpZCogdGlsZUdyaWQ7CisrIChUaWxlTGF5ZXIgKils
YXllckJlaW5nUGFpbnRlZDsKK0BlbmQKKworQGludGVyZmFjZSBUaWxlSG9zdExheWVyIDogQ0FM
YXllciB7CisgICAgV2ViQ29yZTo6VGlsZUdyaWQqIF90aWxlR3JpZDsKK30KKy0gKGlkKWluaXRX
aXRoVGlsZUdyaWQ6KFdlYkNvcmU6OlRpbGVHcmlkKil0aWxlR3JpZDsKK0BlbmQKKworI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykKKyNlbmRpZiAvLyBUaWxlTGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9UaWxlTGF5ZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzI4YmVjODVlN2U5ZmNjNjU1OWQ1
NmYzNWI0OWMzYmMxMDUwYzY0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9UaWxlTGF5ZXIubW0KQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyLmgiCisKKyNpZiBQTEFURk9S
TShJT1MpCisKKyNpbmNsdWRlICJUaWxlQ2FjaGUuaCIKKyNpbmNsdWRlICJUaWxlR3JpZC5oIgor
I2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKworQGltcGxlbWVudGF0aW9uIFRpbGVIb3N0TGF5
ZXIKKy0gKGlkKWluaXRXaXRoVGlsZUdyaWQ6KFdlYkNvcmU6OlRpbGVHcmlkKil0aWxlR3JpZAor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIF90aWxlR3JpZCA9IHRpbGVHcmlkOworICAgIFtzZWxmIHNldEFuY2hvclBv
aW50OkNHUG9pbnRaZXJvXTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaWQ8Q0FBY3Rpb24+
KWFjdGlvbkZvcktleTooTlNTdHJpbmcgKilrZXkKK3sKKyAgICBVTlVTRURfUEFSQU0oa2V5KTsK
KyAgICAvLyBEaXNhYmxlIGFsbCBkZWZhdWx0IGFjdGlvbnMKKyAgICByZXR1cm4gbmlsOworfQor
CistICh2b2lkKXJlbmRlckluQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKK3sKKyAgICBp
ZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRocmVhZExvY2soKTsKKyAgICBfdGls
ZUdyaWQtPnRpbGVDYWNoZSgpLT5kb0xheW91dFRpbGVzKCk7CisgICAgW3N1cGVyIHJlbmRlcklu
Q29udGV4dDpjb250ZXh0XTsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRpbGVMYXllcgor
QHN5bnRoZXNpemUgcGFpbnRDb3VudCA9IF9wYWludENvdW50OworQHN5bnRoZXNpemUgdGlsZUdy
aWQgPSBfdGlsZUdyaWQ7CisKK3N0YXRpYyBUaWxlTGF5ZXIgKmxheWVyQmVpbmdQYWludGVkOwor
CistICh2b2lkKXNldE5lZWRzRGlzcGxheUluUmVjdDooQ0dSZWN0KXJlY3QKK3sKKyAgICBbc2Vs
ZiBzZXROZWVkc0xheW91dF07CisgICAgW3N1cGVyIHNldE5lZWRzRGlzcGxheUluUmVjdDpyZWN0
XTsKK30KKworLSAodm9pZClsYXlvdXRTdWJsYXllcnMKK3sKKyAgICBpZiAocHRocmVhZF9tYWlu
X25wKCkpCisgICAgICAgIFdlYlRocmVhZExvY2soKTsKKyAgICAvLyBUaGlzIG1heSB0cmlnZ2Vy
IFdlYktpdCBsYXlvdXQgYW5kIGdlbmVyYXRlIG1vcmUgcmVwYWludCByZWN0cy4KKyAgICBpZiAo
X3RpbGVHcmlkKQorICAgICAgICBfdGlsZUdyaWQtPnRpbGVDYWNoZSgpLT5wcmVwYXJlVG9EcmF3
KCk7Cit9CisKKy0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKK3sK
KyAgICBpZiAoX3RpbGVHcmlkKQorICAgICAgICBfdGlsZUdyaWQtPnRpbGVDYWNoZSgpLT5kcmF3
TGF5ZXIoc2VsZiwgY29udGV4dCk7Cit9CisKKy0gKGlkPENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6
KE5TU3RyaW5nICopa2V5Cit7CisgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAgLy8gRGlzYWJs
ZSBhbGwgZGVmYXVsdCBhY3Rpb25zCisgICAgcmV0dXJuIG5pbDsKK30KKworKyAoVGlsZUxheWVy
ICopbGF5ZXJCZWluZ1BhaW50ZWQKK3sKKyAgICByZXR1cm4gbGF5ZXJCZWluZ1BhaW50ZWQ7Cit9
CisKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXJQb29sLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiMzFkN2I2NDRlNWVhYmM2MDQw
OGUxMGFjNDIyMDMwZjI0YmMyYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFRpbGVMYXllclBvb2xfaAorI2RlZmluZSBUaWxlTGF5ZXJQb29sX2gKKworI2lm
IFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJJbnRTaXpl
SGFzaC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK0BjbGFzcyBU
aWxlTGF5ZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGlsZUxheWVyUG9vbCB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGlsZUxheWVyUG9vbCk7CitwdWJsaWM6CisgICAg
c3RhdGljIFRpbGVMYXllclBvb2wqIHNoYXJlZFBvb2woKTsKKworICAgIHZvaWQgYWRkTGF5ZXIo
Y29uc3QgUmV0YWluUHRyPFRpbGVMYXllcj4mKTsKKyAgICBSZXRhaW5QdHI8VGlsZUxheWVyPiB0
YWtlTGF5ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJik7CisKKyAgICAvLyBUaGUgbWF4aW11bSBz
aXplIG9mIGFsbCBxdWV1ZWQgbGF5ZXJzIGluIGJ5dGVzLgorICAgIHVuc2lnbmVkIGNhcGFjaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9jYXBhY2l0eTsgfQorICAgIHZvaWQgc2V0Q2FwYWNpdHkodW5z
aWduZWQpOworICAgIHZvaWQgZHJhaW4oKTsKKworICAgIHVuc2lnbmVkIGRlY2F5ZWRDYXBhY2l0
eSgpIGNvbnN0OworCisgICAgc3RhdGljIHVuc2lnbmVkIGJ5dGVzQmFja2luZ0xheWVyV2l0aFBp
eGVsU2l6ZShjb25zdCBJbnRTaXplJik7CisKK3ByaXZhdGU6CisgICAgVGlsZUxheWVyUG9vbCgp
OworCisgICAgdHlwZWRlZiBEZXF1ZTxSZXRhaW5QdHI8VGlsZUxheWVyPiA+IExheWVyTGlzdDsK
KworICAgIGJvb2wgY2FuUmV1c2VMYXllcldpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUpIGNv
bnN0IHsgcmV0dXJuIG1fY2FwYWNpdHkgJiYgIXNpemUuaXNFbXB0eSgpOyB9CisgICAgdm9pZCBz
Y2hlZHVsZVBydW5lKCk7CisgICAgdm9pZCBwcnVuZSgpOworICAgIHR5cGVkZWYgZW51bSB7IExl
YXZlVW5jaGFuZ2VkLCBNYXJrQXNVc2VkIH0gQWNjZXNzVHlwZTsKKyAgICBMYXllckxpc3QmIGxp
c3RPZkxheWVyc1dpdGhTaXplKGNvbnN0IEludFNpemUmLCBBY2Nlc3NUeXBlID0gTGVhdmVVbmNo
YW5nZWQpOworCisgICAgSGFzaE1hcDxJbnRTaXplLCBMYXllckxpc3Q+IG1fcmV1c2VMaXN0czsK
KyAgICAvLyBPcmRlcmVkIGJ5IHJlY2VudCB1c2UuIFRoZSBsYXN0IHNpemUgaXMgdGhlIG1vc3Qg
cmVjZW50bHkgdXNlZC4KKyAgICBWZWN0b3I8SW50U2l6ZT4gbV9zaXplc0luUHJ1bmVPcmRlcjsK
KyAgICB1bnNpZ25lZCBtX3RvdGFsQnl0ZXM7CisgICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKKyAg
ICBNdXRleCBtX2xheWVyUG9vbE11dGV4OworCisgICAgZG91YmxlIG1fbGFzdEFkZFRpbWU7Cisg
ICAgYm9vbCBtX25lZWRzUHJ1bmU7CisKKyAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8VGlsZUxh
eWVyUG9vbD47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFU
Rk9STShJT1MpCisjZW5kaWYgLy8gVGlsZUxheWVyUG9vbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9UaWxlTGF5ZXJQb29sLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlYzQ5MGM1Yzg5ODViODJi
NDZjYjRlYjhiNTZhYTAyZjI2NzNjMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5tbQpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaWxlTGF5ZXJQb29sLmgiCisK
KyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVt
b3J5UHJlc3N1cmVIYW5kbGVyLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyLmgiCisjaW5jbHVkZSAi
VGlsZUdyaWQuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3Qg
ZG91YmxlIGNhcGFjaXR5RGVjYXlUaW1lID0gNTsKKworVGlsZUxheWVyUG9vbDo6VGlsZUxheWVy
UG9vbCgpCisgICAgOiBtX3RvdGFsQnl0ZXMoMCkKKyAgICAsIG1fY2FwYWNpdHkoMCkKKyAgICAs
IG1fbGFzdEFkZFRpbWUoMCkKKyAgICAsIG1fbmVlZHNQcnVuZShmYWxzZSkKK3sKK30KKworVGls
ZUxheWVyUG9vbCogVGlsZUxheWVyUG9vbDo6c2hhcmVkUG9vbCgpCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFRpbGVMYXllclBvb2w+IHNoYXJlZFBvb2w7CisgICAgcmV0dXJuICZzaGFy
ZWRQb29sLmdldCgpOworfQorCit1bnNpZ25lZCBUaWxlTGF5ZXJQb29sOjpieXRlc0JhY2tpbmdM
YXllcldpdGhQaXhlbFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gc2l6
ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7Cit9CisKK1RpbGVMYXllclBvb2w6OkxheWVy
TGlzdCYgVGlsZUxheWVyUG9vbDo6bGlzdE9mTGF5ZXJzV2l0aFNpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQoreworICAgIEFTU0VSVCghbV9sYXllclBvb2xN
dXRleC50cnlMb2NrKCkpOworICAgIEhhc2hNYXA8SW50U2l6ZSwgTGF5ZXJMaXN0Pjo6aXRlcmF0
b3IgaXQgPSBtX3JldXNlTGlzdHMuZmluZChzaXplKTsKKyAgICBpZiAoaXQgPT0gbV9yZXVzZUxp
c3RzLmVuZCgpKSB7CisgICAgICAgIGl0ID0gbV9yZXVzZUxpc3RzLmFkZChzaXplLCBMYXllckxp
c3QoKSkuaXRlcmF0b3I7CisgICAgICAgIG1fc2l6ZXNJblBydW5lT3JkZXIuYXBwZW5kKHNpemUp
OworICAgIH0gZWxzZSBpZiAoYWNjZXNzVHlwZSA9PSBNYXJrQXNVc2VkKSB7CisgICAgICAgIG1f
c2l6ZXNJblBydW5lT3JkZXIucmVtb3ZlKG1fc2l6ZXNJblBydW5lT3JkZXIucmV2ZXJzZUZpbmQo
c2l6ZSkpOworICAgICAgICBtX3NpemVzSW5QcnVuZU9yZGVyLmFwcGVuZChzaXplKTsKKyAgICB9
CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKK30KKwordm9pZCBUaWxlTGF5ZXJQb29sOjphZGRMYXll
cihjb25zdCBSZXRhaW5QdHI8VGlsZUxheWVyPiYgbGF5ZXIpCit7CisgICAgSW50U2l6ZSBsYXll
clNpemUoW2xheWVyLmdldCgpIGZyYW1lXS5zaXplKTsKKyAgICBsYXllclNpemUuc2NhbGUoW2xh
eWVyLmdldCgpIGNvbnRlbnRzU2NhbGVdKTsKKyAgICBpZiAoIWNhblJldXNlTGF5ZXJXaXRoU2l6
ZShsYXllclNpemUpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobWVtb3J5UHJlc3N1cmVI
YW5kbGVyKCkuaGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3VyZSgpKSB7CisgICAgICAgIExPRyhNZW1v
cnlQcmVzc3VyZSwgIlVuZGVyIG1lbW9yeSBwcmVzc3VyZTogJXMsIHRvdGFsQnl0ZXM6ICVkIiwg
X19QUkVUVFlfRlVOQ1RJT05fXywgbV90b3RhbEJ5dGVzKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xheWVyUG9vbE11dGV4KTsKKyAgICBsaXN0
T2ZMYXllcnNXaXRoU2l6ZShsYXllclNpemUpLnByZXBlbmQobGF5ZXIpOworICAgIG1fdG90YWxC
eXRlcyArPSBieXRlc0JhY2tpbmdMYXllcldpdGhQaXhlbFNpemUobGF5ZXJTaXplKTsKKworICAg
IG1fbGFzdEFkZFRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIHNjaGVkdWxlUHJ1bmUoKTsKK30K
KworUmV0YWluUHRyPFRpbGVMYXllcj4gVGlsZUxheWVyUG9vbDo6dGFrZUxheWVyV2l0aFNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIWNhblJldXNlTGF5ZXJXaXRoU2l6ZShz
aXplKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9sYXll
clBvb2xNdXRleCk7CisgICAgTGF5ZXJMaXN0JiByZXVzZUxpc3QgPSBsaXN0T2ZMYXllcnNXaXRo
U2l6ZShzaXplLCBNYXJrQXNVc2VkKTsKKyAgICBpZiAocmV1c2VMaXN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICBtX3RvdGFsQnl0ZXMgLT0gYnl0ZXNCYWNraW5nTGF5ZXJX
aXRoUGl4ZWxTaXplKHNpemUpOworICAgIHJldHVybiByZXVzZUxpc3QudGFrZUZpcnN0KCk7Cit9
CisKK3ZvaWQgVGlsZUxheWVyUG9vbDo6c2V0Q2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHkpCit7
CisgICAgTXV0ZXhMb2NrZXIgcmV1c2VMb2NrZXIobV9sYXllclBvb2xNdXRleCk7CisgICAgaWYg
KGNhcGFjaXR5IDwgbV9jYXBhY2l0eSkKKyAgICAgICAgc2NoZWR1bGVQcnVuZSgpOworICAgIG1f
Y2FwYWNpdHkgPSBjYXBhY2l0eTsKK30KKyAgICAKK3Vuc2lnbmVkIFRpbGVMYXllclBvb2w6OmRl
Y2F5ZWRDYXBhY2l0eSgpIGNvbnN0Cit7CisgICAgLy8gRGVjYXkgdG8gb25lIHF1YXJ0ZXIgb3Zl
ciBjYXBhY2l0eURlY2F5VGltZQorICAgIGRvdWJsZSB0aW1lU2luY2VMYXN0QWRkID0gY3VycmVu
dFRpbWUoKSAtIG1fbGFzdEFkZFRpbWU7CisgICAgaWYgKHRpbWVTaW5jZUxhc3RBZGQgPiBjYXBh
Y2l0eURlY2F5VGltZSkKKyAgICAgICAgcmV0dXJuIG1fY2FwYWNpdHkgLyA0OworICAgIGZsb2F0
IGRlY2F5UHJvZ2VzcyA9IGZsb2F0KHRpbWVTaW5jZUxhc3RBZGQgLyBjYXBhY2l0eURlY2F5VGlt
ZSk7CisgICAgcmV0dXJuIG1fY2FwYWNpdHkgLyA0ICsgbV9jYXBhY2l0eSAqIDMgLyA0ICogKDEu
ZiAtIGRlY2F5UHJvZ2Vzcyk7Cit9CisKK3ZvaWQgVGlsZUxheWVyUG9vbDo6c2NoZWR1bGVQcnVu
ZSgpCit7CisgICAgQVNTRVJUKCFtX2xheWVyUG9vbE11dGV4LnRyeUxvY2soKSk7CisgICAgaWYg
KG1fbmVlZHNQcnVuZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbmVlZHNQcnVuZSA9IHRydWU7
CisgICAgZGlzcGF0Y2hfdGltZV90IG5leHRQcnVuZVRpbWUgPSBkaXNwYXRjaF90aW1lKERJU1BB
VENIX1RJTUVfTk9XLCAxICogTlNFQ19QRVJfU0VDKTsKKyAgICBkaXNwYXRjaF9hZnRlcihuZXh0
UHJ1bmVUaW1lLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9S
SVRZX0RFRkFVTFQsIDApLCBeeworICAgICAgICBwcnVuZSgpOworICAgIH0pOworfQorCit2b2lk
IFRpbGVMYXllclBvb2w6OnBydW5lKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9sYXll
clBvb2xNdXRleCk7CisgICAgQVNTRVJUKG1fbmVlZHNQcnVuZSk7CisgICAgbV9uZWVkc1BydW5l
ID0gZmFsc2U7CisgICAgdW5zaWduZWQgc2hyaW5rVG8gPSBkZWNheWVkQ2FwYWNpdHkoKTsKKyAg
ICB3aGlsZSAobV90b3RhbEJ5dGVzID4gc2hyaW5rVG8pIHsKKyAgICAgICAgQVNTRVJUKCFtX3Np
emVzSW5QcnVuZU9yZGVyLmlzRW1wdHkoKSk7CisgICAgICAgIEludFNpemUgc2l6ZVRvRHJvcCA9
IG1fc2l6ZXNJblBydW5lT3JkZXIuZmlyc3QoKTsKKyAgICAgICAgTGF5ZXJMaXN0JiBvbGRlc3RS
ZXVzZUxpc3QgPSBtX3JldXNlTGlzdHMuZmluZChzaXplVG9Ecm9wKS0+dmFsdWU7CisgICAgICAg
IGlmIChvbGRlc3RSZXVzZUxpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX3JldXNlTGlz
dHMucmVtb3ZlKHNpemVUb0Ryb3ApOworICAgICAgICAgICAgbV9zaXplc0luUHJ1bmVPcmRlci5y
ZW1vdmUoMCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2lmIExPR19USUxJ
TkcKKyAgICAgICAgTlNMb2coQCJkcm9wcGluZyBsYXllciBvZiBzaXplICVkIHggJWQiLCBzaXpl
VG9Ecm9wLndpZHRoKCksIHNpemVUb0Ryb3AuaGVpZ2h0KCkpOworI2VuZGlmCisgICAgICAgIG1f
dG90YWxCeXRlcyAtPSBieXRlc0JhY2tpbmdMYXllcldpdGhQaXhlbFNpemUoc2l6ZVRvRHJvcCk7
CisgICAgICAgIC8vIFRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGxpc3QgaXMgdGhlIG9sZGVzdCwg
aGVuY2UgbW9zdCBsaWtlbHkgbm90IHRvCisgICAgICAgIC8vIHN0aWxsIGhhdmUgYSBiYWNraW5n
IHN0b3JlLgorICAgICAgICBvbGRlc3RSZXVzZUxpc3QucmVtb3ZlTGFzdCgpOworICAgIH0KKyAg
ICBpZiAoY3VycmVudFRpbWUoKSAtIG1fbGFzdEFkZFRpbWUgPD0gY2FwYWNpdHlEZWNheVRpbWUp
CisgICAgICAgIHNjaGVkdWxlUHJ1bmUoKTsKK30KKwordm9pZCBUaWxlTGF5ZXJQb29sOjpkcmFp
bigpCit7CisgICAgTXV0ZXhMb2NrZXIgcmV1c2VMb2NrZXIobV9sYXllclBvb2xNdXRleCk7Cisg
ICAgbV9yZXVzZUxpc3RzLmNsZWFyKCk7CisgICAgbV9zaXplc0luUHJ1bmVPcmRlci5jbGVhcigp
OworICAgIG1fdG90YWxCeXRlcyA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1dlYkNvcmVNb3Rpb25NYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmZkMDkxMzc2YjllNjQ1NDgw
ZjRlYmI5ODA3YzA0MGNlMjY2MjQ2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXZWJD
b3JlTW90aW9uTWFuYWdlcl9oCisjZGVmaW5lIFdlYkNvcmVNb3Rpb25NYW5hZ2VyX2gKKworI2lt
cG9ydCAiRGV2aWNlTW90aW9uQ2xpZW50SU9TLmgiCisjaW1wb3J0ICJEZXZpY2VPcmllbnRhdGlv
bkNsaWVudElPUy5oIgorI2ltcG9ydCA8Q29yZUxvY2F0aW9uL0NvcmVMb2NhdGlvbi5oPgorI2lt
cG9ydCA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbXBv
cnQgPENvcmVNb3Rpb24vQ29yZU1vdGlvbi5oPgorCitjb25zdCBmbG9hdCBrTW90aW9uVXBkYXRl
SW50ZXJ2YWwgPSAwLjA1ZjsKKworQGludGVyZmFjZSBXZWJDb3JlTW90aW9uTWFuYWdlciA6IE5T
T2JqZWN0IHsKKyAgICBDTU1vdGlvbk1hbmFnZXIqIG1fbW90aW9uTWFuYWdlcjsKKyAgICBDTExv
Y2F0aW9uTWFuYWdlciogbV9sb2NhdGlvbk1hbmFnZXI7CisgICAgSGFzaFNldDxXZWJDb3JlOjpE
ZXZpY2VNb3Rpb25DbGllbnRJT1MqPiBtX2RldmljZU1vdGlvbkNsaWVudHM7CisgICAgSGFzaFNl
dDxXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUyo+IG1fZGV2aWNlT3JpZW50YXRp
b25DbGllbnRzOworICAgIE5TVGltZXIqIG1fdXBkYXRlVGltZXI7CisgICAgQk9PTCBtX2d5cm9B
dmFpbGFibGU7CisgICAgQk9PTCBtX2hlYWRpbmdBdmFpbGFibGU7Cit9CisKKysgKFdlYkNvcmVN
b3Rpb25NYW5hZ2VyICopc2hhcmVkTWFuYWdlcjsKKy0gKHZvaWQpYWRkTW90aW9uQ2xpZW50OihX
ZWJDb3JlOjpEZXZpY2VNb3Rpb25DbGllbnRJT1MgKiljbGllbnQ7CistICh2b2lkKXJlbW92ZU1v
dGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TICopY2xpZW50OworLSAo
dm9pZClhZGRPcmllbnRhdGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlT3JpZW50YXRpb25DbGll
bnRJT1MgKiljbGllbnQ7CistICh2b2lkKXJlbW92ZU9yaWVudGF0aW9uQ2xpZW50OihXZWJDb3Jl
OjpEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUyAqKWNsaWVudDsKKy0gKEJPT0wpZ3lyb0F2YWls
YWJsZTsKKy0gKEJPT0wpaGVhZGluZ0F2YWlsYWJsZTsKK0BlbmQKKworI2VuZGlmCisKKyNlbmRp
ZiAvLyBXZWJDb3JlTW90aW9uTWFuYWdlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvV2ViQ29yZU1vdGlvbk1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvV2ViQ29yZU1vdGlvbk1hbmFnZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzNhOTgyYWQyNjVl
MGFmZTdkNzQzOGE3ZmZiYjE2MWU0NWQxYzEyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5tbQpAQCAtMCwwICsxLDI4
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkNvcmVNb3Rpb25NYW5hZ2VyLmgiCisKKyNpbXBv
cnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJXZWJDb3JlT2JqQ0V4dHJhcy5oIgorI2ltcG9y
dCA8Q29yZUxvY2F0aW9uL0NvcmVMb2NhdGlvbi5oPgorI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRp
bWUuaD4KKyNpbXBvcnQgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvUGFzc1JlZlB0
ci5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCisjaWYgUExBVEZPUk0oSU9TKQorCisj
aW1wb3J0ICJXZWJDb3JlVGhyZWFkUnVuLmgiCisjaW1wb3J0IDxDb3JlTW90aW9uL0NvcmVNb3Rp
b24uaD4KKworLy8gR2V0IENvcmVMb2NhdGlvbiBjbGFzc2VzCitTT0ZUX0xJTktfRlJBTUVXT1JL
KENvcmVMb2NhdGlvbikKKworU09GVF9MSU5LX0NMQVNTKENvcmVMb2NhdGlvbiwgQ0xMb2NhdGlv
bk1hbmFnZXIpCitTT0ZUX0xJTktfQ0xBU1MoQ29yZUxvY2F0aW9uLCBDTEhlYWRpbmcpCisKKy8v
IEdldCBDb3JlTW90aW9uIGNsYXNzZXMKK1NPRlRfTElOS19GUkFNRVdPUksoQ29yZU1vdGlvbikK
KworU09GVF9MSU5LX0NMQVNTKENvcmVNb3Rpb24sIENNTW90aW9uTWFuYWdlcikKK1NPRlRfTElO
S19DTEFTUyhDb3JlTW90aW9uLCBDTUFjY2VsZXJvbWV0ZXJEYXRhKQorU09GVF9MSU5LX0NMQVNT
KENvcmVNb3Rpb24sIENNRGV2aWNlTW90aW9uKQorCitzdGF0aWMgY29uc3QgZG91YmxlIGtHcmF2
aXR5ID0gOS44MDY2NTsKKworQGludGVyZmFjZSBXZWJDb3JlTW90aW9uTWFuYWdlcihQcml2YXRl
KQorCistICh2b2lkKWluaXRpYWxpemVPbk1haW5UaHJlYWQ7CistICh2b2lkKWNoZWNrQ2xpZW50
U3RhdHVzOworLSAodm9pZCl1cGRhdGU7CistICh2b2lkKXNlbmRBY2NlbGVyb21ldGVyRGF0YToo
Q01BY2NlbGVyb21ldGVyRGF0YSAqKW5ld0FjY2VsZXJhdGlvbjsKKy0gKHZvaWQpc2VuZE1vdGlv
bkRhdGE6KENNRGV2aWNlTW90aW9uICopbmV3TW90aW9uIHdpdGhIZWFkaW5nOihDTEhlYWRpbmcg
KiluZXdIZWFkaW5nOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJDb3JlTW90aW9uTWFu
YWdlcgorCisrIChXZWJDb3JlTW90aW9uTWFuYWdlciAqKXNoYXJlZE1hbmFnZXIKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxXZWJDb3JlTW90aW9uTWFuYWdlcj4sIHNoYXJl
ZE1vdGlvbk1hbmFnZXIsIChbW1dlYkNvcmVNb3Rpb25NYW5hZ2VyIGFsbG9jXSBpbml0XSkpOwor
ICAgIHJldHVybiBzaGFyZWRNb3Rpb25NYW5hZ2VyLmdldCgpOworfQorCistIChpZClpbml0Cit7
CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoc2VsZikKKyAgICAgICAgW3NlbGYg
cGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOkBzZWxlY3Rvcihpbml0aWFsaXplT25NYWluVGhy
ZWFkKSB3aXRoT2JqZWN0Om5pbCB3YWl0VW50aWxEb25lOk5PXTsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFs
bG9jYXRlT25NYWluVGhyZWFkKFtXZWJDb3JlTW90aW9uTWFuYWdlciBjbGFzc10sIHNlbGYpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIW1fdXBkYXRlVGltZXIpOworCisgICAgaWYg
KG1faGVhZGluZ0F2YWlsYWJsZSkKKyAgICAgICAgW21fbG9jYXRpb25NYW5hZ2VyIHN0b3BVcGRh
dGluZ0hlYWRpbmddOworICAgIFttX2xvY2F0aW9uTWFuYWdlciByZWxlYXNlXTsKKworICAgIGlm
IChtX2d5cm9BdmFpbGFibGUpCisgICAgICAgIFttX21vdGlvbk1hbmFnZXIgc3RvcERldmljZU1v
dGlvblVwZGF0ZXNdOworICAgIGVsc2UKKyAgICAgICAgW21fbW90aW9uTWFuYWdlciBzdG9wQWNj
ZWxlcm9tZXRlclVwZGF0ZXNdOworICAgIFttX21vdGlvbk1hbmFnZXIgcmVsZWFzZV07CisKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpYWRkTW90aW9uQ2xpZW50OihXZWJDb3Jl
OjpEZXZpY2VNb3Rpb25DbGllbnRJT1MgKiljbGllbnQKK3sKKyAgICBtX2RldmljZU1vdGlvbkNs
aWVudHMuYWRkKGNsaWVudCk7CisgICAgW3NlbGYgY2hlY2tDbGllbnRTdGF0dXNdOworfQorCist
ICh2b2lkKXJlbW92ZU1vdGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9T
ICopY2xpZW50Cit7CisgICAgbV9kZXZpY2VNb3Rpb25DbGllbnRzLnJlbW92ZShjbGllbnQpOwor
ICAgIFtzZWxmIGNoZWNrQ2xpZW50U3RhdHVzXTsKK30KKworLSAodm9pZClhZGRPcmllbnRhdGlv
bkNsaWVudDooV2ViQ29yZTo6RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MgKiljbGllbnQKK3sK
KyAgICBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50cy5hZGQoY2xpZW50KTsKKyAgICBbc2VsZiBj
aGVja0NsaWVudFN0YXR1c107Cit9CisKKy0gKHZvaWQpcmVtb3ZlT3JpZW50YXRpb25DbGllbnQ6
KFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TICopY2xpZW50Cit7CisgICAgbV9k
ZXZpY2VPcmllbnRhdGlvbkNsaWVudHMucmVtb3ZlKGNsaWVudCk7CisgICAgW3NlbGYgY2hlY2tD
bGllbnRTdGF0dXNdOworfQorCistIChCT09MKWd5cm9BdmFpbGFibGUKK3sKKyAgICByZXR1cm4g
bV9neXJvQXZhaWxhYmxlOworfQorCistIChCT09MKWhlYWRpbmdBdmFpbGFibGUKK3sKKyAgICBy
ZXR1cm4gbV9oZWFkaW5nQXZhaWxhYmxlOworfQorCistICh2b2lkKWluaXRpYWxpemVPbk1haW5U
aHJlYWQKK3sKKyAgICBBU1NFUlQoIVdlYlRocmVhZElzQ3VycmVudCgpKTsKKworI2RlZmluZSBD
TU1vdGlvbk1hbmFnZXIgZ2V0Q01Nb3Rpb25NYW5hZ2VyQ2xhc3MoKQorICAgIG1fbW90aW9uTWFu
YWdlciA9IFtbQ01Nb3Rpb25NYW5hZ2VyIGFsbG9jXSBpbml0XTsKKyN1bmRlZiBDTU1vdGlvbk1h
bmFnZXIKKworICAgIG1fZ3lyb0F2YWlsYWJsZSA9IG1fbW90aW9uTWFuYWdlci5kZXZpY2VNb3Rp
b25BdmFpbGFibGU7CisKKyAgICBpZiAobV9neXJvQXZhaWxhYmxlKQorICAgICAgICBtX21vdGlv
bk1hbmFnZXIuZGV2aWNlTW90aW9uVXBkYXRlSW50ZXJ2YWwgPSBrTW90aW9uVXBkYXRlSW50ZXJ2
YWw7CisgICAgZWxzZQorICAgICAgICBtX21vdGlvbk1hbmFnZXIuYWNjZWxlcm9tZXRlclVwZGF0
ZUludGVydmFsID0ga01vdGlvblVwZGF0ZUludGVydmFsOworCisjZGVmaW5lIENMTG9jYXRpb25N
YW5hZ2VyIGdldENMTG9jYXRpb25NYW5hZ2VyQ2xhc3MoKQorICAgIG1fbG9jYXRpb25NYW5hZ2Vy
ID0gW1tDTExvY2F0aW9uTWFuYWdlciBhbGxvY10gaW5pdF07CisgICAgbV9oZWFkaW5nQXZhaWxh
YmxlID0gW0NMTG9jYXRpb25NYW5hZ2VyIGhlYWRpbmdBdmFpbGFibGVdOworI3VuZGVmIENMTG9j
YXRpb25NYW5hZ2VyCisKKyAgICBbc2VsZiBjaGVja0NsaWVudFN0YXR1c107Cit9CisKKy0gKHZv
aWQpY2hlY2tDbGllbnRTdGF0dXMKK3sKKyAgICBpZiAoIXB0aHJlYWRfbWFpbl9ucCgpKSB7Cisg
ICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpfY21kIHdpdGhPYmplY3Q6
bmlsIHdhaXRVbnRpbERvbmU6Tk9dOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
U2luY2UgdGhpcyBtZXRob2QgZXhlY3V0ZXMgb24gdGhlIG1haW4gdGhyZWFkLCBpdCBzaG91bGQg
YWx3YXlzIGJlIGNhbGxlZAorICAgIC8vIGFmdGVyIHRoZSBpbml0aWFsaXplT25NYWluVGhyZWFk
IG1ldGhvZCBoYXMgcnVuLCBhbmQgaGVuY2UgdGhlcmUgc2hvdWxkCisgICAgLy8gYmUgbm8gY2hh
bmNlIHRoYXQgbV9tb3Rpb25NYW5hZ2VyIGhhcyBub3QgYmVlbiBjcmVhdGVkLgorICAgIEFTU0VS
VChtX21vdGlvbk1hbmFnZXIpOworCisgICAgaWYgKG1fZGV2aWNlTW90aW9uQ2xpZW50cy5zaXpl
KCkgfHwgbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudHMuc2l6ZSgpKSB7CisgICAgICAgIGlmICht
X2d5cm9BdmFpbGFibGUpCisgICAgICAgICAgICBbbV9tb3Rpb25NYW5hZ2VyIHN0YXJ0RGV2aWNl
TW90aW9uVXBkYXRlc107CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFttX21vdGlvbk1hbmFn
ZXIgc3RhcnRBY2NlbGVyb21ldGVyVXBkYXRlc107CisKKyAgICAgICAgaWYgKG1faGVhZGluZ0F2
YWlsYWJsZSkKKyAgICAgICAgICAgIFttX2xvY2F0aW9uTWFuYWdlciBzdGFydFVwZGF0aW5nSGVh
ZGluZ107CisKKyAgICAgICAgaWYgKCFtX3VwZGF0ZVRpbWVyKSB7CisgICAgICAgICAgICBtX3Vw
ZGF0ZVRpbWVyID0gW1tOU1RpbWVyIHNjaGVkdWxlZFRpbWVyV2l0aFRpbWVJbnRlcnZhbDprTW90
aW9uVXBkYXRlSW50ZXJ2YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OnNlbGYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOkBzZWxlY3Rv
cih1cGRhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1c2VySW5mbzpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRzOllFU10gcmV0YWluXTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIE5TVGltZXIgKnRpbWVyID0gbV91cGRhdGVU
aW1lcjsKKyAgICAgICAgbV91cGRhdGVUaW1lciA9IG5pbDsKKyAgICAgICAgW3RpbWVyIGludmFs
aWRhdGVdOworICAgICAgICBbdGltZXIgcmVsZWFzZV07CisKKyAgICAgICAgaWYgKG1fZ3lyb0F2
YWlsYWJsZSkKKyAgICAgICAgICAgIFttX21vdGlvbk1hbmFnZXIgc3RvcERldmljZU1vdGlvblVw
ZGF0ZXNdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbbV9tb3Rpb25NYW5hZ2VyIHN0b3BB
Y2NlbGVyb21ldGVyVXBkYXRlc107CisKKyAgICAgICAgaWYgKG1faGVhZGluZ0F2YWlsYWJsZSkK
KyAgICAgICAgICAgIFttX2xvY2F0aW9uTWFuYWdlciBzdG9wVXBkYXRpbmdIZWFkaW5nXTsKKyAg
ICB9Cit9CisKKy0gKHZvaWQpdXBkYXRlCit7CisgICAgLy8gSXQncyBleHRyZW1lbHkgdW5saWtl
bHkgdGhhdCBhbiB1cGRhdGUgaGFwcGVucyB3aXRob3V0IGFuIGFjdGl2ZQorICAgIC8vIG1vdGlv
biBvciBsb2NhdGlvbiBtYW5hZ2VyLCBidXQgd2Ugc2hvdWxkIGd1YXJkIGZvciB0aGlzIGNhc2Ug
anVzdCBpbiBjYXNlLgorICAgIGlmICghbV9tb3Rpb25NYW5hZ2VyIHx8ICFtX2xvY2F0aW9uTWFu
YWdlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFdlIHNob3VsZCwgaG93ZXZlciwg
Z3VhcmQgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBtYW5hZ2VycyByZXR1cm4gbmlsIGRhdGEuCisg
ICAgQ01EZXZpY2VNb3Rpb24gKmRldmljZU1vdGlvbiA9IG1fbW90aW9uTWFuYWdlci5kZXZpY2VN
b3Rpb247CisgICAgaWYgKG1fZ3lyb0F2YWlsYWJsZSAmJiBkZXZpY2VNb3Rpb24pCisgICAgICAg
IFtzZWxmIHNlbmRNb3Rpb25EYXRhOmRldmljZU1vdGlvbiB3aXRoSGVhZGluZzptX2xvY2F0aW9u
TWFuYWdlci5oZWFkaW5nXTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKENNQWNjZWxlcm9tZXRl
ckRhdGEgKmFjY2VsZXJvbWV0ZXJEYXRhID0gbV9tb3Rpb25NYW5hZ2VyLmFjY2VsZXJvbWV0ZXJE
YXRhKQorICAgICAgICAgICAgW3NlbGYgc2VuZEFjY2VsZXJvbWV0ZXJEYXRhOmFjY2VsZXJvbWV0
ZXJEYXRhXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2VuZEFjY2VsZXJvbWV0ZXJEYXRhOihDTUFj
Y2VsZXJvbWV0ZXJEYXRhICopbmV3QWNjZWxlcmF0aW9uCit7CisgICAgV2ViVGhyZWFkUnVuKF57
CisgICAgICAgIENNQWNjZWxlcmF0aW9uIGFjY2VsID0gbmV3QWNjZWxlcmF0aW9uLmFjY2VsZXJh
dGlvbjsKKworICAgICAgICBWZWN0b3I8V2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TKj4g
Y2xpZW50czsKKyAgICAgICAgY29weVRvVmVjdG9yKG1fZGV2aWNlTW90aW9uQ2xpZW50cywgY2xp
ZW50cyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xpZW50cy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIGNsaWVudHNbaV0tPm1vdGlvbkNoYW5nZWQoMCwgMCwgMCwgYWNjZWwu
eCAqIGtHcmF2aXR5LCBhY2NlbC55ICoga0dyYXZpdHksIGFjY2VsLnogKiBrR3Jhdml0eSwgMCwg
MCwgMCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpc2VuZE1vdGlvbkRhdGE6KENNRGV2aWNlTW90
aW9uICopbmV3TW90aW9uIHdpdGhIZWFkaW5nOihDTEhlYWRpbmcgKiluZXdIZWFkaW5nCit7Cisg
ICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIC8vIEFjY2VsZXJhdGlvbiBpcyB1c2VyICsgZ3Jh
dml0eQorICAgICAgICBDTUFjY2VsZXJhdGlvbiB1c2VyQWNjZWwgPSBuZXdNb3Rpb24udXNlckFj
Y2VsZXJhdGlvbjsKKyAgICAgICAgQ01BY2NlbGVyYXRpb24gZ3Jhdml0eSA9IG5ld01vdGlvbi5n
cmF2aXR5OworICAgICAgICBDTUFjY2VsZXJhdGlvbiB0b3RhbEFjY2VsOworICAgICAgICB0b3Rh
bEFjY2VsLnggPSB1c2VyQWNjZWwueCArIGdyYXZpdHkueDsKKyAgICAgICAgdG90YWxBY2NlbC55
ID0gdXNlckFjY2VsLnkgKyBncmF2aXR5Lnk7CisgICAgICAgIHRvdGFsQWNjZWwueiA9IHVzZXJB
Y2NlbC56ICsgZ3Jhdml0eS56OworCisgICAgICAgIENNUm90YXRpb25SYXRlIHJvdGF0aW9uUmF0
ZSA9IG5ld01vdGlvbi5yb3RhdGlvblJhdGU7CisKKyAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkRl
dmljZU1vdGlvbkNsaWVudElPUyo+IG1vdGlvbkNsaWVudHM7CisgICAgICAgIGNvcHlUb1ZlY3Rv
cihtX2RldmljZU1vdGlvbkNsaWVudHMsIG1vdGlvbkNsaWVudHMpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1vdGlvbkNsaWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IG1vdGlvbkNsaWVudHNbaV0tPm1vdGlvbkNoYW5nZWQodXNlckFjY2VsLnggKiBrR3Jhdml0eSwg
dXNlckFjY2VsLnkgKiBrR3Jhdml0eSwgdXNlckFjY2VsLnogKiBrR3Jhdml0eSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxBY2NlbC54ICoga0dyYXZp
dHksIHRvdGFsQWNjZWwueSAqIGtHcmF2aXR5LCB0b3RhbEFjY2VsLnogKiBrR3Jhdml0eSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkMmRlZyhyb3RhdGlv
blJhdGUueCksIHJhZDJkZWcocm90YXRpb25SYXRlLnkpLCByYWQyZGVnKHJvdGF0aW9uUmF0ZS56
KSk7CisgICAgICAgIH0KKworICAgICAgICBDTUF0dGl0dWRlKiBhdHRpdHVkZSA9IG5ld01vdGlv
bi5hdHRpdHVkZTsKKworICAgICAgICBWZWN0b3I8V2ViQ29yZTo6RGV2aWNlT3JpZW50YXRpb25D
bGllbnRJT1MqPiBvcmllbnRhdGlvbkNsaWVudHM7CisgICAgICAgIGNvcHlUb1ZlY3RvcihtX2Rl
dmljZU9yaWVudGF0aW9uQ2xpZW50cywgb3JpZW50YXRpb25DbGllbnRzKTsKKworICAgICAgICAv
LyBOb3RlIHRoYXQgdGhlIFczQyBEZXZpY2VPcmllbnRhdGlvbiBzcGVjaWZpY2F0aW9uIGxhYmVs
cyB0aGUgWCBheGlzCisgICAgICAgIC8vIGFzIHBhc3NpbmcgYmV0d2VlbiB0aGUgc2lkZXMgb2Yg
dGhlIGRldmljZSwgYW5kIHRoZSBZIGF4aXMgYXMgcGFzc2luZworICAgICAgICAvLyBmcm9tIHRv
cCB0byBib3R0b20gb2YgdGhlIGRldmljZS4gQ29udmVudGlvbmFsIFRhaXQtQnJ5YW4gRXVsZXIg
YW5nbGVzCisgICAgICAgIC8vIGhhdmUgdGhlIFggYXhpcyBwb2ludGluZyBmb3J3YXJkICh0aGUg
aGVhZGluZyBvZiB0aGUgYWlyY3JhZnQsIGZvcgorICAgICAgICAvLyBleGFtcGxlKSwgd2hpY2gg
aXMgd2hhdCB5b3Ugd291bGQgInJvbGwiIGFyb3VuZCwgYW5kIHdoYXQgdGhlIFczQyBzYXlzCisg
ICAgICAgIC8vIGlzIHRoZSBZIGF4aXMuIFVuZm9ydHVuYXRlbHkgQ29yZU1vdGlvbiBkb2Vzbid0
IG5vcm1hbGl6ZSBpbiB0aGUKKyAgICAgICAgLy8gc2FtZSBvcmRlciBhcyB0aGUgVzNDIHJlcXVl
c3RzLCBzbyBvdXIgYmV0YSBpcyBbLTkwLCA5MF0gYW5kIGdhbW1hIGlzCisgICAgICAgIC8vIFst
MTgwLCAxODBdLiBGb3IgbW9zdCBwcmFjdGljYWwgdXNlcyB0aGlzIGlzIGFjY2VwdGFibGUuCisg
ICAgICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vOTQxNDQ1OT4gTm9ybWFsaXplIG91ciBEZXZp
Y2VPcmllbnRhdGlvbiBiZXRhL2dhbW1hIHBlciBzcGVjCisKKyAgICAgICAgLy8gUm90YXRpb24g
YXJvdW5kIHRoZSBaIGF4aXMgKHBvaW50aW5nIHVwLCBub3JtYWxpemVkIHRvIFswLCAzNjBdIGRl
ZykuCisgICAgICAgIGRvdWJsZSBhbHBoYSA9IHJhZDJkZWcoYXR0aXR1ZGUueWF3ID4gMCA/IGF0
dGl0dWRlLnlhdyA6IChNX1BJICogMiArIGF0dGl0dWRlLnlhdykpOworICAgICAgICAvLyBSb3Rh
dGlvbiBhcm91bmQgdGhlIFggYXhpcyAoc2lkZSB0byBzaWRlKS4KKyAgICAgICAgZG91YmxlIGJl
dGEgPSByYWQyZGVnKGF0dGl0dWRlLnBpdGNoKTsKKyAgICAgICAgLy8gUm90YXRpb24gYXJvdW5k
IHRoZSBZIGF4aXMgKHRvcCB0byBib3R0b20pLgorICAgICAgICBkb3VibGUgZ2FtbWEgPSByYWQy
ZGVnKGF0dGl0dWRlLnJvbGwpOworCisgICAgICAgIGRvdWJsZSBoZWFkaW5nID0gKG1faGVhZGlu
Z0F2YWlsYWJsZSAmJiBuZXdIZWFkaW5nKSA/IG5ld0hlYWRpbmcubWFnbmV0aWNIZWFkaW5nIDog
MDsKKyAgICAgICAgZG91YmxlIGhlYWRpbmdBY2N1cmFjeSA9IChtX2hlYWRpbmdBdmFpbGFibGUg
JiYgbmV3SGVhZGluZykgPyBuZXdIZWFkaW5nLmhlYWRpbmdBY2N1cmFjeSA6IC0xOworCisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3JpZW50YXRpb25DbGllbnRzLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgb3JpZW50YXRpb25DbGllbnRzW2ldLT5vcmllbnRhdGlvbkNoYW5nZWQo
YWxwaGEsIGJldGEsIGdhbW1hLCBoZWFkaW5nLCBoZWFkaW5nQWNjdXJhY3kpOworICAgIH0pOwor
fQorCitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODhhZDU1ZjY1YTkw
OGQ0MDZhMTljOTc2MWMyNWJjYWIxMzcxZDQ0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLmgKQEAgLTAsMCAr
MSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TX2gKKyNkZWZp
bmUgV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPU19oCisKKyNpbmNsdWRlIDxBdmFpbGFiaWxpdHku
aD4KKwordHlwZWRlZiBlbnVtIHsKKyAgICB3a0lPU1N5c3RlbVZlcnNpb25fM18wID0gX19JUEhP
TkVfM18wLAorICAgIHdrSU9TU3lzdGVtVmVyc2lvbl80XzIgPSBfX0lQSE9ORV80XzIsCisgICAg
d2tJT1NTeXN0ZW1WZXJzaW9uXzVfMCA9IF9fSVBIT05FXzVfMCwKKyAgICB3a0lPU1N5c3RlbVZl
cnNpb25fNl8wID0gX19JUEhPTkVfNl8wLAorfSB3a0lPU1N5c3RlbVZlcnNpb247CisKK2Jvb2wg
aW9zRXhlY3V0YWJsZVdhc0xpbmtlZE9uT3JBZnRlclZlcnNpb24od2tJT1NTeXN0ZW1WZXJzaW9u
KTsKKworZXh0ZXJuIGJvb2wgKCp3a0V4ZWN1dGFibGVXYXNMaW5rZWRPbk9yQWZ0ZXJJT1NWZXJz
aW9uKShpbnQpOworCitleHRlcm4gYm9vbCAoKndrSXNHQjE4MDMwQ29tcGxpYW5jZVJlcXVpcmVk
KSh2b2lkKTsKKworaW5saW5lIGJvb2wgaW9zRXhlY3V0YWJsZVdhc0xpbmtlZE9uT3JBZnRlclZl
cnNpb24od2tJT1NTeXN0ZW1WZXJzaW9uIHZlcnNpb24pCit7CisgICAgcmV0dXJuIHdrRXhlY3V0
YWJsZVdhc0xpbmtlZE9uT3JBZnRlcklPU1ZlcnNpb24odmVyc2lvbik7Cit9CisKK3R5cGVkZWYg
ZW51bSB7CisgICAgd2tEZXZpY2VDbGFzc0ludmFsaWQgPSAtMSwKKyAgICB3a0RldmljZUNsYXNz
aVBhZCwKKyAgICB3a0RldmljZUNsYXNzaVBob25lLAorICAgIHdrRGV2aWNlQ2xhc3NpUG9kLAor
fSB3a0RldmljZUNsYXNzOworZXh0ZXJuIGludCAoKndrR2V0RGV2aWNlQ2xhc3MpKHZvaWQpOwor
aW5saW5lIHdrRGV2aWNlQ2xhc3MgaW9zRGV2aWNlQ2xhc3Modm9pZCkKK3sKKyAgICBpbnQgZGV2
aWNlQ2xhc3MgPSB3a0dldERldmljZUNsYXNzKCk7CisgICAgc3dpdGNoIChkZXZpY2VDbGFzcykg
eworICAgIGNhc2Ugd2tEZXZpY2VDbGFzc0ludmFsaWQ6CisgICAgY2FzZSB3a0RldmljZUNsYXNz
aVBhZDoKKyAgICBjYXNlIHdrRGV2aWNlQ2xhc3NpUGhvbmU6CisgICAgY2FzZSB3a0RldmljZUNs
YXNzaVBvZDoKKyAgICAgICAgcmV0dXJuICh3a0RldmljZUNsYXNzKWRldmljZUNsYXNzOworICAg
IH0KKyAgICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiB3a0RldmljZUNsYXNzSW52YWxpZDsK
K30KKworZXh0ZXJuIENGU3RyaW5nUmVmICgqd2tHZXRVc2VyQWdlbnQpKHZvaWQpOworZXh0ZXJu
IENGU3RyaW5nUmVmICgqd2tHZXRQbGF0Zm9ybU5hbWVGb3JOYXZpZ2F0b3IpKHZvaWQpOworZXh0
ZXJuIENGU3RyaW5nUmVmICgqd2tHZXRWZW5kb3JOYW1lRm9yTmF2aWdhdG9yKSh2b2lkKTsKKwor
I2VuZGlmIC8vIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hYjc2NGE1ZTQzZGZhOWYxN2UzMmE5NGY3YjEwZDQ1MDg0ODcwMDcyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRl
cmZhY2VJT1MubW0KQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIK
Kwordm9pZCAoKndrQ0FMYXllckVudW1lcmF0ZVJlY3RzQmVpbmdEcmF3bldpdGhCbG9jaykoQ0FM
YXllciAqLCBDR0NvbnRleHRSZWYgY29udGV4dCwgdm9pZCAoXmJsb2NrKShDR1JlY3QgcmVjdCkp
OworQk9PTCAoKndrQ0dDb250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMpKENHQ29udGV4dFJlZik7
CitDR1BhdHRlcm5SZWYgKCp3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9ybSko
Q0dJbWFnZVJlZiwgQ0dBZmZpbmVUcmFuc2Zvcm0sIGludCk7Cit2b2lkICgqd2tDR0NvbnRleHRS
ZXNldENsaXApKENHQ29udGV4dFJlZik7IAorQ0ZTdHJpbmdSZWYgKCp3a0NvcHlDRkxvY2FsaXph
dGlvblByZWZlcnJlZE5hbWUpKENGU3RyaW5nUmVmKTsKK3ZvaWQgKCp3a0NsZWFyR2x5cGhWZWN0
b3IpKHZvaWQqIGdseXBocyk7CitPU1N0YXR1cyAoKndrQ29udmVydENoYXJUb0dseXBocykodm9p
ZCogc3R5bGVHcm91cCwgY29uc3QgVW5pQ2hhciosIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIHZv
aWQqIGdseXBocyk7CitOU1N0cmluZyogKCp3a0dldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKShOU1N0
cmluZyopOworTlNEYXRlICooKndrR2V0TlNVUkxSZXNwb25zZUxhc3RNb2RpZmllZERhdGUpKE5T
VVJMUmVzcG9uc2UgKnJlc3BvbnNlKTsKK3ZvaWQgKCp3a1NldEJhc2VDVE0pKENHQ29udGV4dFJl
ZiwgQ0dBZmZpbmVUcmFuc2Zvcm0pOwordm9pZCAoKndrU2V0UGF0dGVyblBoYXNlSW5Vc2VyU3Bh
Y2UpKENHQ29udGV4dFJlZiwgQ0dQb2ludCBwb2ludCk7CitDR0FmZmluZVRyYW5zZm9ybSAoKndr
R2V0VXNlclRvQmFzZUNUTSkoQ0dDb250ZXh0UmVmKTsKK2Jvb2wgKCp3a0NHQ29udGV4dElzUERG
Q29udGV4dCkoQ0dDb250ZXh0UmVmKTsKK3ZvaWQgKCp3a1NldFVwRm9udENhY2hlKSgpOwordm9p
ZCAoKndrU2lnbmFsQ0ZSZWFkU3RyZWFtRW5kKShDRlJlYWRTdHJlYW1SZWYgc3RyZWFtKTsKK3Zv
aWQgKCp3a1NpZ25hbENGUmVhZFN0cmVhbUhhc0J5dGVzKShDRlJlYWRTdHJlYW1SZWYgc3RyZWFt
KTsKK3ZvaWQgKCp3a1NpZ25hbENGUmVhZFN0cmVhbUVycm9yKShDRlJlYWRTdHJlYW1SZWYgc3Ry
ZWFtLCBDRlN0cmVhbUVycm9yICplcnJvcik7CitDRlJlYWRTdHJlYW1SZWYgKCp3a0NyZWF0ZUN1
c3RvbUNGUmVhZFN0cmVhbSkodm9pZCAqKCpmb3JtQ3JlYXRlKShDRlJlYWRTdHJlYW1SZWYsIHZv
aWQgKiksIAorICAgIHZvaWQgKCpmb3JtRmluYWxpemUpKENGUmVhZFN0cmVhbVJlZiwgdm9pZCAq
KSwgCisgICAgQm9vbGVhbiAoKmZvcm1PcGVuKShDRlJlYWRTdHJlYW1SZWYsIENGU3RyZWFtRXJy
b3IgKiwgQm9vbGVhbiAqLCB2b2lkICopLCAKKyAgICBDRkluZGV4ICgqZm9ybVJlYWQpKENGUmVh
ZFN0cmVhbVJlZiwgVUludDggKiwgQ0ZJbmRleCwgQ0ZTdHJlYW1FcnJvciAqLCBCb29sZWFuICos
IHZvaWQgKiksIAorICAgIEJvb2xlYW4gKCpmb3JtQ2FuUmVhZCkoQ0ZSZWFkU3RyZWFtUmVmLCB2
b2lkICopLCAKKyAgICB2b2lkICgqZm9ybUNsb3NlKShDRlJlYWRTdHJlYW1SZWYsIHZvaWQgKiks
IAorICAgIHZvaWQgKCpmb3JtU2NoZWR1bGUpKENGUmVhZFN0cmVhbVJlZiwgQ0ZSdW5Mb29wUmVm
LCBDRlN0cmluZ1JlZiwgdm9pZCAqKSwgCisgICAgdm9pZCAoKmZvcm1VbnNjaGVkdWxlKShDRlJl
YWRTdHJlYW1SZWYsIENGUnVuTG9vcFJlZiwgQ0ZTdHJpbmdSZWYsIHZvaWQgKiksCisgICAgdm9p
ZCAqY29udGV4dCk7CitOU1N0cmluZyogKCp3a0NvcHlOU1VSTFJlc3BvbnNlU3RhdHVzTGluZSko
TlNVUkxSZXNwb25zZSopOwordm9pZCAoKndrU2V0TlNVUkxDb25uZWN0aW9uRGVmZXJzQ2FsbGJh
Y2tzKShOU1VSTENvbm5lY3Rpb24gKiwgQk9PTCk7Cit2b2lkICgqd2tTZXROU1VSTFJlcXVlc3RT
aG91bGRDb250ZW50U25pZmYpKE5TTXV0YWJsZVVSTFJlcXVlc3QgKiwgQk9PTCk7CitpZCAoKndr
Q3JlYXRlTlNVUkxDb25uZWN0aW9uRGVsZWdhdGVQcm94eSkodm9pZCk7Cit1bnNpZ25lZCAoKndr
SW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCkodW5zaWduZWQgcHJl
ZmVycmVkQ29ubmVjdGlvbkNvdW50KTsKK2ludCAoKndrR2V0SFRUUFBpcGVsaW5pbmdQcmlvcml0
eSkoQ0ZVUkxSZXF1ZXN0UmVmKTsKK3ZvaWQgKCp3a1NldEhUVFBQaXBlbGluaW5nTWF4aW11bVBy
aW9yaXR5KShpbnQgcHJpb3JpdHkpOwordm9pZCAoKndrU2V0SFRUUFBpcGVsaW5pbmdQcmlvcml0
eSkoQ0ZVUkxSZXF1ZXN0UmVmLCBpbnQgcHJpb3JpdHkpOwordm9pZCAoKndrU2V0SFRUUFBpcGVs
aW5pbmdNaW5pbXVtRmFzdExhbmVQcmlvcml0eSkoaW50IHByaW9yaXR5KTsKK3ZvaWQgKCp3a1Nl
dENPTk5FQ1RQcm94eUZvclN0cmVhbSkoQ0ZSZWFkU3RyZWFtUmVmLCBDRlN0cmluZ1JlZiBwcm94
eUhvc3QsIENGTnVtYmVyUmVmIHByb3h5UG9ydCk7Cit2b2lkICgqd2tTZXRDT05ORUNUUHJveHlB
dXRob3JpemF0aW9uRm9yU3RyZWFtKShDRlJlYWRTdHJlYW1SZWYsIENGU3RyaW5nUmVmIHByb3h5
QXV0aG9yaXphdGlvblN0cmluZyk7Cit2b2lkICgqd2tTZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZCkoQk9PTCk7CitDRkhUVFBNZXNzYWdlUmVmICgqd2tDb3B5Q09OTkVDVFBy
b3h5UmVzcG9uc2UpKENGUmVhZFN0cmVhbVJlZiwgQ0ZVUkxSZWYgcmVzcG9uc2VVUkwsIENGU3Ry
aW5nUmVmIHByb3h5SG9zdCwgQ0ZOdW1iZXJSZWYgcHJveHlQb3J0KTsKK2Jvb2wgKCp3a0V4ZWN1
dGFibGVXYXNMaW5rZWRPbk9yQWZ0ZXJJT1NWZXJzaW9uKShpbnQpOworaW50ICgqd2tHZXREZXZp
Y2VDbGFzcykodm9pZCk7CitDR1NpemUgKCp3a0dldFZpZXdwb3J0U2NyZWVuU2l6ZSkodm9pZCk7
Cit2b2lkICgqd2tTZXRMYXllckNvbnRlbnRzU2NhbGUpKENBTGF5ZXIgKik7CitmbG9hdCAoKndr
R2V0U2NyZWVuU2NhbGVGYWN0b3IpKHZvaWQpOworYm9vbCAoKndrSXNHQjE4MDMwQ29tcGxpYW5j
ZVJlcXVpcmVkKSh2b2lkKTsKK3ZvaWQgKCp3a0NHUGF0aEFkZFJvdW5kZWRSZWN0KShDR011dGFi
bGVQYXRoUmVmIHBhdGgsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiBtYXRyaXgsIENHUmVjdCBy
ZWN0LCBDR0Zsb2F0IGNvcm5lcldpZHRoLCBDR0Zsb2F0IGNvcm5lckhlaWdodCk7IAordm9pZCAo
KndrQ0ZVUkxSZXF1ZXN0QWxsb3dBbGxQb3N0Q2FjaGluZykoQ0ZVUkxSZXF1ZXN0UmVmKTsKK0NG
QXJyYXlSZWYgKCp3a0NvcHlOU1VSTFJlc3BvbnNlQ2VydGlmaWNhdGVDaGFpbikoTlNVUkxSZXNw
b25zZSopOworCisjaWYgVVNFKENGTkVUV09SSykKK0NGSFRUUENvb2tpZVN0b3JhZ2VSZWYgKCp3
a0dldERlZmF1bHRIVFRQQ29va2llU3RvcmFnZSkoKTsKK1dLQ0ZVUkxDcmVkZW50aWFsUmVmICgq
d2tDb3B5Q3JlZGVudGlhbEZyb21DRlBlcnNpc3RlbnRTdG9yYWdlKShDRlVSTFByb3RlY3Rpb25T
cGFjZVJlZiBwcm90ZWN0aW9uU3BhY2UpOwordm9pZCAoKndrU2V0Q0ZVUkxSZXF1ZXN0U2hvdWxk
Q29udGVudFNuaWZmKShDRk11dGFibGVVUkxSZXF1ZXN0UmVmLCBib29sKTsKK0NGQXJyYXlSZWYg
KCp3a0NGVVJMUmVxdWVzdENvcHlIVFRQUmVxdWVzdEJvZHlQYXJ0cykoQ0ZVUkxSZXF1ZXN0UmVm
KTsKK3ZvaWQgKCp3a0NGVVJMUmVxdWVzdFNldEhUVFBSZXF1ZXN0Qm9keVBhcnRzKShDRk11dGFi
bGVVUkxSZXF1ZXN0UmVmLCBDRkFycmF5UmVmIGJvZHlQYXJ0cyk7Cit2b2lkICgqd2tTZXRSZXF1
ZXN0U3RvcmFnZVNlc3Npb24pKENGVVJMU3RvcmFnZVNlc3Npb25SZWYsIENGTXV0YWJsZVVSTFJl
cXVlc3RSZWYpOworI2VuZGlmCisKK2Jvb2wgKCp3a0dldFZlcnRpY2FsR2x5cGhzRm9yQ2hhcmFj
dGVycykoQ1RGb250UmVmLCBjb25zdCBVbmlDaGFyW10sIENHR2x5cGhbXSwgc2l6ZV90KTsKK0NU
TGluZVJlZiAoKndrQ3JlYXRlQ1RMaW5lV2l0aFVuaUNoYXJQcm92aWRlcikoY29uc3QgVW5pQ2hh
ciogKCpwcm92aWRlKShDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjaGFyQ291bnQsIENG
RGljdGlvbmFyeVJlZiogYXR0cmlidXRlcywgdm9pZCopLCB2b2lkICgqZGlzcG9zZSkoY29uc3Qg
VW5pQ2hhciogY2hhcnMsIHZvaWQqKSwgdm9pZCopOworYm9vbCAoKndrQ1RGb250VHJhbnNmb3Jt
R2x5cGhzKShDVEZvbnRSZWYgZm9udCwgQ0dHbHlwaCBnbHlwaHNbXSwgQ0dTaXplIGFkdmFuY2Vz
W10sIENGSW5kZXggY291bnQsIHdrQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zKTsKKwor
Q0dTaXplICgqd2tDVFJ1bkdldEluaXRpYWxBZHZhbmNlKShDVFJ1blJlZik7CisKK0NUVHlwZXNl
dHRlclJlZiAoKndrQ3JlYXRlQ1RUeXBlc2V0dGVyV2l0aFVuaUNoYXJQcm92aWRlckFuZE9wdGlv
bnMpKGNvbnN0IFVuaUNoYXIqICgqcHJvdmlkZSkoQ0ZJbmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRl
eCogY2hhckNvdW50LCBDRkRpY3Rpb25hcnlSZWYqIGF0dHJpYnV0ZXMsIHZvaWQqKSwgdm9pZCAo
KmRpc3Bvc2UpKGNvbnN0IFVuaUNoYXIqIGNoYXJzLCB2b2lkKiksIHZvaWQqLCBDRkRpY3Rpb25h
cnlSZWYgb3B0aW9ucyk7CisKKyNpZiAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKK0NHQ29udGV4
dFJlZiAoKndrSU9TdXJmYWNlQ29udGV4dENyZWF0ZSkoSU9TdXJmYWNlUmVmIHN1cmZhY2UsIHVu
c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNl
KTsKK0NHSW1hZ2VSZWYgKCp3a0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZSkoQ0dDb250ZXh0
UmVmIGNvbnRleHQpOworI2VuZGlmIC8vICFQTEFURk9STShJT1NfU0lNVUxBVE9SKQorCitDRlVS
TFN0b3JhZ2VTZXNzaW9uUmVmICgqd2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24pKENGU3Ry
aW5nUmVmKTsKK05TVVJMUmVxdWVzdCogKCp3a0NvcHlSZXF1ZXN0V2l0aFN0b3JhZ2VTZXNzaW9u
KShDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmLCBOU1VSTFJlcXVlc3QqKTsKK0NGSFRUUENvb2tpZVN0
b3JhZ2VSZWYgKCp3a0NvcHlIVFRQQ29va2llU3RvcmFnZSkoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJl
Zik7Cit1bnNpZ25lZCAoKndrR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSkoQ0ZIVFRQQ29va2ll
U3RvcmFnZVJlZik7Cit2b2lkICgqd2tTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KShDRkhUVFBD
b29raWVTdG9yYWdlUmVmLCB1bnNpZ25lZCk7CitOU0FycmF5ICooKndrSFRUUENvb2tpZXMpKENG
SFRUUENvb2tpZVN0b3JhZ2VSZWYpOworTlNBcnJheSAqKCp3a0hUVFBDb29raWVzRm9yVVJMKShD
RkhUVFBDb29raWVTdG9yYWdlUmVmLCBOU1VSTCAqKTsKK3ZvaWQgKCp3a1NldEhUVFBDb29raWVz
Rm9yVVJMKShDRkhUVFBDb29raWVTdG9yYWdlUmVmLCBOU0FycmF5ICosIE5TVVJMICosIE5TVVJM
ICopOwordm9pZCAoKndrRGVsZXRlQWxsSFRUUENvb2tpZXMpKENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWYpOwordm9pZCAoKndrRGVsZXRlSFRUUENvb2tpZSkoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiwg
TlNIVFRQQ29va2llICopOworCitDRlN0cmluZ1JlZiAoKndrR2V0Q0ZVUkxSZXNwb25zZU1JTUVU
eXBlKShDRlVSTFJlc3BvbnNlUmVmKTsKK0NGVVJMUmVmICgqd2tHZXRDRlVSTFJlc3BvbnNlVVJM
KShDRlVSTFJlc3BvbnNlUmVmKTsKK0NGSFRUUE1lc3NhZ2VSZWYgKCp3a0dldENGVVJMUmVzcG9u
c2VIVFRQUmVzcG9uc2UpKENGVVJMUmVzcG9uc2VSZWYpOworQ0ZTdHJpbmdSZWYgKCp3a0NvcHlD
RlVSTFJlc3BvbnNlU3VnZ2VzdGVkRmlsZW5hbWUpKENGVVJMUmVzcG9uc2VSZWYpOwordm9pZCAo
KndrU2V0Q0ZVUkxSZXNwb25zZU1JTUVUeXBlKShDRlVSTFJlc3BvbnNlUmVmLCBDRlN0cmluZ1Jl
ZiBtaW1lVHlwZSk7CisKK3ZvaWQoKndrRGVzdHJveVJlbmRlcmluZ1Jlc291cmNlcykodm9pZCk7
CisKK2Jvb2wgKCp3a0NhcHRpb25BcHBlYXJhbmNlSGFzVXNlclByZWZlcmVuY2VzKSh2b2lkKTsK
K2Jvb2wgKCp3a0NhcHRpb25BcHBlYXJhbmNlU2hvd0NhcHRpb25zV2hlbkF2YWlsYWJsZSkodm9p
ZCk7CitDR0NvbG9yUmVmKCp3a0NhcHRpb25BcHBlYXJhbmNlQ29weUZvcmVncm91bmRDb2xvciko
dm9pZCk7CitDR0NvbG9yUmVmKCp3a0NhcHRpb25BcHBlYXJhbmNlQ29weUJhY2tncm91bmRDb2xv
cikodm9pZCk7CitDR0NvbG9yUmVmKCp3a0NhcHRpb25BcHBlYXJhbmNlQ29weVdpbmRvd0NvbG9y
KSh2b2lkKTsKK2Jvb2woKndrQ2FwdGlvbkFwcGVhcmFuY2VHZXRGb3JlZ3JvdW5kT3BhY2l0eSko
Q0dGbG9hdCopOworYm9vbCgqd2tDYXB0aW9uQXBwZWFyYW5jZUdldEJhY2tncm91bmRPcGFjaXR5
KShDR0Zsb2F0Kik7Citib29sKCp3a0NhcHRpb25BcHBlYXJhbmNlR2V0V2luZG93T3BhY2l0eSko
Q0dGbG9hdCopOworQ0dGb250UmVmKCp3a0NhcHRpb25BcHBlYXJhbmNlQ29weUZvbnRGb3JTdHls
ZSkoaW50KTsKK2Jvb2woKndrQ2FwdGlvbkFwcGVhcmFuY2VHZXRSZWxhdGl2ZUNoYXJhY3RlclNp
emUpKENHRmxvYXQqKTsKK2ludCgqd2tDYXB0aW9uQXBwZWFyYW5jZUdldFRleHRFZGdlU3R5bGUp
KHZvaWQpOworQ0ZTdHJpbmdSZWYoKndrQ2FwdGlvbkFwcGVhcmFuY2VHZXRTZXR0aW5nc0NoYW5n
ZWROb3RpZmljYXRpb24pKHZvaWQpOworCisjaWYgRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkK
K2Jvb2wgKCp3a0lzUHVibGljU3VmZml4KShOU1N0cmluZyAqaG9zdCk7CisjZW5kaWYKKworI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCitDRlN0cmluZ1JlZiAoKndrQ2FjaGVQYXJ0aXRp
b25LZXkpKHZvaWQpOworI2VuZGlmCisKK0NGU3RyaW5nUmVmICgqd2tHZXRVc2VyQWdlbnQpKHZv
aWQpOworQ0ZTdHJpbmdSZWYgKCp3a0dldFBsYXRmb3JtTmFtZUZvck5hdmlnYXRvcikodm9pZCk7
CitDRlN0cmluZ1JlZiAoKndrR2V0VmVuZG9yTmFtZUZvck5hdmlnYXRvcikodm9pZCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViRXZlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJFdmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmODI5OTdlZmUyODFk
ZjMxMjgyOWY5OTU4MmVkZGQxYzQwMDgwNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViRXZlbnQuaApAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIEZJWE1FOiBSZW5hbWUgdGhpcyBmaWxlIHRvIFdlYkV2ZW50SU9TLmggYWZ0ZXIgd2Ug
dXBzdHJlYW0gdGhlIGlPUyBwb3J0LgorI2lmbmRlZiBXZWJFdmVudElPU19oCisjZGVmaW5lIFdl
YkV2ZW50SU9TX2gKKworI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK3R5cGVkZWYgZW51bSB7CisgICAgV2Vi
RXZlbnRNb3VzZURvd24sCisgICAgV2ViRXZlbnRNb3VzZVVwLAorICAgIFdlYkV2ZW50TW91c2VN
b3ZlZCwKKyAgICAKKyAgICBXZWJFdmVudFNjcm9sbFdoZWVsLAorICAgIAorICAgIFdlYkV2ZW50
S2V5RG93biwKKyAgICBXZWJFdmVudEtleVVwLAorICAgIAorICAgIFdlYkV2ZW50VG91Y2hCZWdp
biwKKyAgICBXZWJFdmVudFRvdWNoQ2hhbmdlLAorICAgIFdlYkV2ZW50VG91Y2hFbmQsCisgICAg
V2ViRXZlbnRUb3VjaENhbmNlbAorfSBXZWJFdmVudFR5cGU7CisKK3R5cGVkZWYgZW51bSB7Cisg
ICAgV2ViRXZlbnRUb3VjaFBoYXNlQmVnYW4sCisgICAgV2ViRXZlbnRUb3VjaFBoYXNlTW92ZWQs
CisgICAgV2ViRXZlbnRUb3VjaFBoYXNlU3RhdGlvbmFyeSwKKyAgICBXZWJFdmVudFRvdWNoUGhh
c2VFbmRlZCwKKyAgICBXZWJFdmVudFRvdWNoUGhhc2VDYW5jZWxsZWQKK30gV2ViRXZlbnRUb3Vj
aFBoYXNlVHlwZTsKKworLy8gVGhlc2UgZW51bSB2YWx1ZXMgYXJlIGNvcGllZCBkaXJlY3RseSBm
cm9tIEdTRXZlbnQgZm9yIGNvbXBhdGliaWxpdHkuCit0eXBlZGVmIGVudW0geworICAgIFdlYkV2
ZW50RmxhZ01hc2tBbHBoYVNoaWZ0ID0gMHgwMDAxMDAwMCwKKyAgICBXZWJFdmVudEZsYWdNYXNr
U2hpZnQgICAgICA9IDB4MDAwMjAwMDAsCisgICAgV2ViRXZlbnRGbGFnTWFza0NvbnRyb2wgICAg
PSAweDAwMDQwMDAwLAorICAgIFdlYkV2ZW50RmxhZ01hc2tBbHRlcm5hdGUgID0gMHgwMDA4MDAw
MCwKKyAgICBXZWJFdmVudEZsYWdNYXNrQ29tbWFuZCAgICA9IDB4MDAxMDAwMDAsCit9IFdlYkV2
ZW50RmxhZ1ZhbHVlczsKK3R5cGVkZWYgdW5zaWduZWQgV2ViRXZlbnRGbGFnczsKKworLy8gVGhl
c2UgZW51bSB2YWx1ZXMgYXJlIGNvcGllZCBkaXJlY3RseSBmcm9tIEdTRXZlbnQgZm9yIGNvbXBh
dGliaWxpdHkuCit0eXBlZGVmIGVudW0geworICAgIFdlYkV2ZW50Q2hhcmFjdGVyU2V0QVNDSUkg
ICAgICAgICAgID0gMCwKKyAgICBXZWJFdmVudENoYXJhY3RlclNldFN5bWJvbCAgICAgICAgICA9
IDEsCisgICAgV2ViRXZlbnRDaGFyYWN0ZXJTZXREaW5nYmF0cyAgICAgICAgPSAyLAorICAgIFdl
YkV2ZW50Q2hhcmFjdGVyU2V0VW5pY29kZSAgICAgICAgID0gMjUzLAorICAgIFdlYkV2ZW50Q2hh
cmFjdGVyU2V0RnVuY3Rpb25LZXlzICAgID0gMjU0LAorfSBXZWJFdmVudENoYXJhY3RlclNldDsK
KworQGludGVyZmFjZSBXZWJFdmVudCA6IE5TT2JqZWN0IHsKK0Bwcml2YXRlCisgICAgV2ViRXZl
bnRUeXBlIF90eXBlOworICAgIENGVGltZUludGVydmFsIF90aW1lc3RhbXA7CisgICAgCisgICAg
Q0dQb2ludCBfbG9jYXRpb25JbldpbmRvdzsKKyAgICAKKyAgICBOU1N0cmluZyAqX2NoYXJhY3Rl
cnM7CisgICAgTlNTdHJpbmcgKl9jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM7CisgICAgV2Vi
RXZlbnRGbGFncyBfbW9kaWZpZXJGbGFnczsKKyAgICBCT09MIF9rZXlSZXBlYXRpbmc7CisgICAg
Qk9PTCBfcG9wdXBWYXJpYW50OyAvLyBGSVhNRTogdG8gYmUgcmVtb3ZlZAorICAgIE5TVUludGVn
ZXIgX2tleWJvYXJkRmxhZ3M7CisgICAgdWludDE2X3QgX2tleUNvZGU7CisgICAgQk9PTCBfdGFi
S2V5OworICAgIFdlYkV2ZW50Q2hhcmFjdGVyU2V0IF9jaGFyYWN0ZXJTZXQ7CisgICAgCisgICAg
ZmxvYXQgX2RlbHRhWDsKKyAgICBmbG9hdCBfZGVsdGFZOworICAgIAorICAgIHVuc2lnbmVkIF90
b3VjaENvdW50OworICAgIE5TQXJyYXkgKl90b3VjaExvY2F0aW9uczsKKyAgICBOU0FycmF5ICpf
dG91Y2hJZGVudGlmaWVyczsKKyAgICBOU0FycmF5ICpfdG91Y2hQaGFzZXM7CisgICAgCisgICAg
Qk9PTCBfaXNHZXN0dXJlOworICAgIGZsb2F0IF9nZXN0dXJlU2NhbGU7CisgICAgZmxvYXQgX2dl
c3R1cmVSb3RhdGlvbjsKKworICAgIEJPT0wgX3dhc0hhbmRsZWQ7Cit9CisKKy0gKFdlYkV2ZW50
ICopaW5pdFdpdGhNb3VzZUV2ZW50VHlwZTooV2ViRXZlbnRUeXBlKXR5cGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWVTdGFtcDooQ0ZUaW1lSW50ZXJ2YWwpdGltZVN0YW1wCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246KENHUG9pbnQpcG9pbnQ7CisKKy0gKFdl
YkV2ZW50ICopaW5pdFdpdGhTY3JvbGxXaGVlbEV2ZW50V2l0aFRpbWVTdGFtcDooQ0ZUaW1lSW50
ZXJ2YWwpdGltZVN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9jYXRpb246KENHUG9pbnQpcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWx0YVg6KGZsb2F0KWRlbHRhWAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWTooZmxvYXQpZGVsdGFZOworCistIChX
ZWJFdmVudCAqKWluaXRXaXRoVG91Y2hFdmVudFR5cGU6KFdlYkV2ZW50VHlwZSl0eXBlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RhbXA6KENGVGltZUludGVydmFsKXRpbWVTdGFt
cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOihDR1BvaW50KXBvaW50Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnM6KFdlYkV2ZW50RmxhZ3MpbW9kaWZp
ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoQ291bnQ6KHVuc2lnbmVkKXRvdWNo
Q291bnQKKyAgICAgICAgICAgICAgICAgICAgICB0b3VjaExvY2F0aW9uczooTlNBcnJheSAqKXRv
dWNoTG9jYXRpb25zCisgICAgICAgICAgICAgICAgICAgIHRvdWNoSWRlbnRpZmllcnM6KE5TQXJy
YXkgKil0b3VjaElkZW50aWZpZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgdG91Y2hQaGFz
ZXM6KE5TQXJyYXkgKil0b3VjaFBoYXNlcyBpc0dlc3R1cmU6KEJPT0wpaXNHZXN0dXJlCisgICAg
ICAgICAgICAgICAgICAgICAgICBnZXN0dXJlU2NhbGU6KGZsb2F0KWdlc3R1cmVTY2FsZQorICAg
ICAgICAgICAgICAgICAgICAgZ2VzdHVyZVJvdGF0aW9uOihmbG9hdClnZXN0dXJlUm90YXRpb247
CisKKy8vIEZJWE1FOiB0aGlzIGlzIGRlcHJlY2F0ZWQuIEl0IHdpbGwgYmUgcmVtb3ZlZCB3aGVu
IFVJS2l0IGFkb3B0cyB0aGUgbmV3IG9uZSBiZWxvdy4KKy0gKFdlYkV2ZW50ICopaW5pdFdpdGhL
ZXlFdmVudFR5cGU6KFdlYkV2ZW50VHlwZSl0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAg
dGltZVN0YW1wOihDRlRpbWVJbnRlcnZhbCl0aW1lU3RhbXAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXJhY3RlcnM6KE5TU3RyaW5nICopY2hhcmFjdGVycworICAgICAgIGNoYXJhY3RlcnNJ
Z25vcmluZ01vZGlmaWVyczooTlNTdHJpbmcgKiljaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMK
KyAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnM6KFdlYkV2ZW50RmxhZ3MpbW9kaWZp
ZXJzCisgICAgICAgICAgICAgICAgICAgICAgIGlzUmVwZWF0aW5nOihCT09MKXJlcGVhdGluZwor
ICAgICAgICAgICAgICAgICAgICBpc1BvcHVwVmFyaWFudDooQk9PTClwb3B1cFZhcmlhbnQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvZGU6KHVpbnQxNl90KWtleUNvZGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNUYWJLZXk6KEJPT0wpdGFiS2V5CisgICAgICAgICAgICAg
ICAgICAgICAgY2hhcmFjdGVyU2V0OihXZWJFdmVudENoYXJhY3RlclNldCljaGFyYWN0ZXJTZXQ7
CisKKy0gKFdlYkV2ZW50ICopaW5pdFdpdGhLZXlFdmVudFR5cGU6KFdlYkV2ZW50VHlwZSl0eXBl
CisgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVN0YW1wOihDRlRpbWVJbnRlcnZhbCl0aW1l
U3RhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnM6KE5TU3RyaW5nICopY2hh
cmFjdGVycworICAgICAgIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczooTlNTdHJpbmcgKilj
aGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rp
ZmllcnM6KFdlYkV2ZW50RmxhZ3MpbW9kaWZpZXJzCisgICAgICAgICAgICAgICAgICAgICAgIGlz
UmVwZWF0aW5nOihCT09MKXJlcGVhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhG
bGFnczooTlNVSW50ZWdlcilmbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29k
ZToodWludDE2X3Qpa2V5Q29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RhYktleToo
Qk9PTCl0YWJLZXkKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJTZXQ6KFdlYkV2ZW50
Q2hhcmFjdGVyU2V0KWNoYXJhY3RlclNldDsKKworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9u
bHkpIFdlYkV2ZW50VHlwZSB0eXBlOworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIENG
VGltZUludGVydmFsIHRpbWVzdGFtcDsKKworLy8gTW91c2UKK0Bwcm9wZXJ0eShub25hdG9taWMs
IHJlYWRvbmx5KSBDR1BvaW50IGxvY2F0aW9uSW5XaW5kb3c7CisKKy8vIEtleWJvYXJkCitAcHJv
cGVydHkobm9uYXRvbWljLCByZWFkb25seSwgcmV0YWluKSBOU1N0cmluZyAqY2hhcmFjdGVyczsK
K0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5LCByZXRhaW4pIE5TU3RyaW5nICpjaGFyYWN0
ZXJzSWdub3JpbmdNb2RpZmllcnM7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgV2Vi
RXZlbnRGbGFncyBtb2RpZmllckZsYWdzOworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHks
IGdldHRlciA9IGlzS2V5UmVwZWF0aW5nKSBCT09MIGtleVJlcGVhdGluZzsKKworLy8gRklYTUU6
IHRoaXMgaXMgZGVwcmVjYXRlZC4gSXQgd2lsbCBiZSByZW1vdmVkIHdoZW4gVUlLaXQgYWRvcHRz
IHRoZSBuZXcgaW5pdFdpdGhLZXlFdmVudFR5cGUuCitAcHJvcGVydHkobm9uYXRvbWljLCByZWFk
b25seSwgZ2V0dGVyID0gaXNQb3B1cFZhcmlhbnQpIEJPT0wgcG9wdXBWYXJpYW50OworQHByb3Bl
cnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVUludGVnZXIga2V5Ym9hcmRGbGFnczsKK0Bwcm9w
ZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSB1aW50MTZfdCBrZXlDb2RlOworQHByb3BlcnR5KG5v
bmF0b21pYywgcmVhZG9ubHksIGdldHRlciA9IGlzVGFiS2V5KSBCT09MIHRhYktleTsKK0Bwcm9w
ZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBXZWJFdmVudENoYXJhY3RlclNldCBjaGFyYWN0ZXJT
ZXQ7CisKKy8vIFNjcm9sbCBXaGVlbAorQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIGZs
b2F0IGRlbHRhWDsKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBmbG9hdCBkZWx0YVk7
CisKKy8vIFRvdWNoCitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgdW5zaWduZWQgdG91
Y2hDb3VudDsKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5LCByZXRhaW4pIE5TQXJyYXkg
KnRvdWNoTG9jYXRpb25zOworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHksIHJldGFpbikg
TlNBcnJheSAqdG91Y2hJZGVudGlmaWVyczsKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5
LCByZXRhaW4pIE5TQXJyYXkgKnRvdWNoUGhhc2VzOworCisvLyBHZXN0dXJlCitAcHJvcGVydHko
bm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBpc0dlc3R1cmU7CitAcHJvcGVydHkobm9uYXRvbWlj
LCByZWFkb25seSkgZmxvYXQgZ2VzdHVyZVNjYWxlOworQHByb3BlcnR5KG5vbmF0b21pYywgcmVh
ZG9ubHkpIGZsb2F0IGdlc3R1cmVSb3RhdGlvbjsKKworQHByb3BlcnR5KG5vbmF0b21pYykgQk9P
TCB3YXNIYW5kbGVkOworCitAZW5kCisKK0BpbnRlcmZhY2UgV2ViSU9TRXZlbnQgOiBXZWJFdmVu
dAorQGVuZAorCisjZW5kaWYgLy8gV2ViRXZlbnRJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1dlYkV2ZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1dlYkV2ZW50Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1NTc4ODczMDdlMzc4MzE2ODQzMzYzOWE0Nzhj
ZjBkNzI5ZmYwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViRXZlbnQubW0KQEAgLTAsMCArMSw0OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBG
SVhNRTogUmVuYW1lIHRoaXMgZmlsZSB0byBXZWJFdmVudElPUy5tbSBhZnRlciB3ZSB1cHN0cmVh
bSB0aGUgaU9TIHBvcnQuCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViRXZlbnQu
aCIKKworI2ltcG9ydCAiS2V5RXZlbnRDb2NvYS5oIgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0dl
b21ldHJ5Lmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworQGltcGxlbWVudGF0aW9uIFdlYkV2ZW50CisKK0BzeW50aGVzaXplIHR5cGUg
PSBfdHlwZTsKK0BzeW50aGVzaXplIHRpbWVzdGFtcCA9IF90aW1lc3RhbXA7CitAc3ludGhlc2l6
ZSB3YXNIYW5kbGVkID0gX3dhc0hhbmRsZWQ7CisKKy0gKFdlYkV2ZW50ICopaW5pdFdpdGhNb3Vz
ZUV2ZW50VHlwZTooV2ViRXZlbnRUeXBlKXR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWVTdGFtcDooQ0ZUaW1lSW50ZXJ2YWwpdGltZVN0YW1wCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9jYXRpb246KENHUG9pbnQpcG9pbnQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfdHlw
ZSA9IHR5cGU7CisgICAgX3RpbWVzdGFtcCA9IHRpbWVTdGFtcDsKKworICAgIF9sb2NhdGlvbklu
V2luZG93ID0gcG9pbnQ7CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKFdlYkV2ZW50
ICopaW5pdFdpdGhTY3JvbGxXaGVlbEV2ZW50V2l0aFRpbWVTdGFtcDooQ0ZUaW1lSW50ZXJ2YWwp
dGltZVN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9j
YXRpb246KENHUG9pbnQpcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWx0YVg6KGZsb2F0KWRlbHRhWAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWTooZmxvYXQpZGVsdGFZCit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
CisgICAgX3R5cGUgPSBXZWJFdmVudFNjcm9sbFdoZWVsOworICAgIF90aW1lc3RhbXAgPSB0aW1l
U3RhbXA7CisKKyAgICBfbG9jYXRpb25JbldpbmRvdyA9IHBvaW50OworICAgIF9kZWx0YVggPSBk
ZWx0YVg7CisgICAgX2RlbHRhWSA9IGRlbHRhWTsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAoV2ViRXZlbnQgKilpbml0V2l0aFRvdWNoRXZlbnRUeXBlOihXZWJFdmVudFR5cGUpdHlw
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVN0YW1wOihDRlRpbWVJbnRlcnZhbCl0
aW1lU3RhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjooQ0dQb2ludClw
b2ludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzOihXZWJFdmVudEZsYWdz
KW1vZGlmaWVycworICAgICAgICAgICAgICAgICAgICAgICAgICB0b3VjaENvdW50Oih1bnNpZ25l
ZCl0b3VjaENvdW50CisgICAgICAgICAgICAgICAgICAgICAgdG91Y2hMb2NhdGlvbnM6KE5TQXJy
YXkgKil0b3VjaExvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICB0b3VjaElkZW50aWZpZXJz
OihOU0FycmF5ICopdG91Y2hJZGVudGlmaWVycworICAgICAgICAgICAgICAgICAgICAgICAgIHRv
dWNoUGhhc2VzOihOU0FycmF5ICopdG91Y2hQaGFzZXMgaXNHZXN0dXJlOihCT09MKWlzR2VzdHVy
ZQorICAgICAgICAgICAgICAgICAgICAgICAgZ2VzdHVyZVNjYWxlOihmbG9hdClnZXN0dXJlU2Nh
bGUKKyAgICAgICAgICAgICAgICAgICAgIGdlc3R1cmVSb3RhdGlvbjooZmxvYXQpZ2VzdHVyZVJv
dGF0aW9uCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICBfdHlwZSA9IHR5cGU7CisgICAgX3RpbWVzdGFtcCA9IHRp
bWVTdGFtcDsKKyAgICBfbW9kaWZpZXJGbGFncyA9IG1vZGlmaWVyczsKKworICAgIC8vIEZJWE1F
OiA8cmRhcjovL3Byb2JsZW0vNzE4NTI4ND4gVG91Y2hFdmVudHMgbWF5IGJlIGluIG1vcmUgdGhh
biBvbmUgd2luZG93IHNvbWUgZGF5LgorICAgIF9sb2NhdGlvbkluV2luZG93ID0gcG9pbnQ7Cisg
ICAgX3RvdWNoQ291bnQgPSB0b3VjaENvdW50OworICAgIF90b3VjaExvY2F0aW9ucyA9IFt0b3Vj
aExvY2F0aW9ucyBjb3B5XTsKKyAgICBfdG91Y2hJZGVudGlmaWVycyA9IFt0b3VjaElkZW50aWZp
ZXJzIGNvcHldOworICAgIF90b3VjaFBoYXNlcyA9IFt0b3VjaFBoYXNlcyBjb3B5XTsKKyAgICBf
aXNHZXN0dXJlID0gaXNHZXN0dXJlOworICAgIF9nZXN0dXJlU2NhbGUgPSBnZXN0dXJlU2NhbGU7
CisgICAgX2dlc3R1cmVSb3RhdGlvbiA9IGdlc3R1cmVSb3RhdGlvbjsKKworICAgIHJldHVybiBz
ZWxmOworfQorCitzdGF0aWMgaW50IHdpbmRvd3NLZXlDb2RlRm9yQ2hhckNvZGVJT1ModW5pY2hh
ciBjaGFyQ29kZSkKK3sKKyAgICAvLyBpUGhvbmUgU3BlY2lmaWMgQ2FzZXMKKyAgICAvLyA8cmRh
cjovLzc3MDk0MDg+OiBXZSBnZXQgMTAgKCdcbicpIGZyb20gVUlLaXQgd2hlbiB1c2luZyB0aGUg
c29mdHdhcmUga2V5Ym9hcmQKKyAgICBpZiAoY2hhckNvZGUgPT0gMTApCisgICAgICAgIHJldHVy
biAweDBEOworCisgICAgLy8gR2VuZXJhbCBDYXNlCisgICAgcmV0dXJuIHdpbmRvd3NLZXlDb2Rl
Rm9yQ2hhckNvZGUoY2hhckNvZGUpOworfQorCistIChXZWJFdmVudCAqKWluaXRXaXRoS2V5RXZl
bnRUeXBlOihXZWJFdmVudFR5cGUpdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVT
dGFtcDooQ0ZUaW1lSW50ZXJ2YWwpdGltZVN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyYWN0ZXJzOihOU1N0cmluZyAqKWNoYXJhY3RlcnMKKyAgICAgICBjaGFyYWN0ZXJzSWdub3Jp
bmdNb2RpZmllcnM6KE5TU3RyaW5nICopY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzCisgICAg
ICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzOihXZWJFdmVudEZsYWdzKW1vZGlmaWVycwor
ICAgICAgICAgICAgICAgICAgICAgICBpc1JlcGVhdGluZzooQk9PTClyZXBlYXRpbmcKKyAgICAg
ICAgICAgICAgICAgICAgaXNQb3B1cFZhcmlhbnQ6KEJPT0wpcG9wdXBWYXJpYW50CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrZXlDb2RlOih1aW50MTZfdClrZXlDb2RlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzVGFiS2V5OihCT09MKXRhYktleQorICAgICAgICAgICAgICAgICAg
ICAgIGNoYXJhY3RlclNldDooV2ViRXZlbnRDaGFyYWN0ZXJTZXQpY2hhcmFjdGVyU2V0Cit7Cisg
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgCisgICAgX3R5cGUgPSB0eXBlOworICAgIF90aW1lc3RhbXAgPSB0aW1lU3RhbXA7
CisKKyAgICBfY2hhcmFjdGVycyA9IFtjaGFyYWN0ZXJzIHJldGFpbl07CisgICAgX2NoYXJhY3Rl
cnNJZ25vcmluZ01vZGlmaWVycyA9IFtjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgcmV0YWlu
XTsKKyAgICBfbW9kaWZpZXJGbGFncyA9IG1vZGlmaWVyczsKKyAgICBfa2V5UmVwZWF0aW5nID0g
cmVwZWF0aW5nOworICAgIF9wb3B1cFZhcmlhbnQgPSBwb3B1cFZhcmlhbnQ7CisgICAgX3RhYktl
eSA9IHRhYktleTsKKyAgICBfY2hhcmFjdGVyU2V0ID0gY2hhcmFjdGVyU2V0OworCisgICAgaWYg
KGtleUNvZGUpCisgICAgICAgIF9rZXlDb2RlID0gd2luZG93c0tleUNvZGVGb3JLZXlDb2RlKGtl
eUNvZGUpOworCisgICAgLy8gTk9URTogdGhpcyBwcmVzZXJ2ZXMgdGhlIG9yaWdpbmFsIHNlbWFu
dGljcyB3aGljaCB1c2VkIHRoZQorICAgIC8vIGNoYXJhY3RlcnMgc3RyaW5nIGZvciB0aGUga2V5
Q29kZS4gVGhpcyBzaG91bGQgYmUgY2hhbmdlZCBpbiBpT1MgNC4wIHRvCisgICAgLy8gYWxsb3cg
dGhlIGNsaWVudCB0byBleHBsaWNpdGx5IHNwZWNpZnkgYSBrZXlDb2RlLCBvdGhlcndpc2UgZGVm
YXVsdCB0bworICAgIC8vIG1hcHBpbmcgdGhlIGNoYXJhY3RlcnMgc3RyaW5nIHRvIGEga2V5Q29k
ZS4KKyAgICAvLyBlLmcuIGFkZCBhbiAnZWxzZScgYmVmb3JlIHRoaXMgJ2lmJy4KKyAgICBpZiAo
W2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyBsZW5ndGhdID09IDEpIHsKKyAgICAgICAgdW5p
Y2hhciBjaCA9IFtjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgY2hhcmFjdGVyQXRJbmRleDow
XTsKKyAgICAgICAgX2tleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvckNoYXJDb2RlSU9TKGNoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworCistIChXZWJFdmVudCAqKWluaXRXaXRo
S2V5RXZlbnRUeXBlOihXZWJFdmVudFR5cGUpdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWVTdGFtcDooQ0ZUaW1lSW50ZXJ2YWwpdGltZVN0YW1wCisgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyYWN0ZXJzOihOU1N0cmluZyAqKWNoYXJhY3RlcnMKKyAgICAgICBjaGFyYWN0ZXJz
SWdub3JpbmdNb2RpZmllcnM6KE5TU3RyaW5nICopY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJz
CisgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzOihXZWJFdmVudEZsYWdzKW1vZGlm
aWVycworICAgICAgICAgICAgICAgICAgICAgICBpc1JlcGVhdGluZzooQk9PTClyZXBlYXRpbmcK
KyAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoRmxhZ3M6KE5TVUludGVnZXIpZmxhZ3MKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvZGU6KHVpbnQxNl90KWtleUNvZGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNUYWJLZXk6KEJPT0wpdGFiS2V5CisgICAgICAgICAgICAg
ICAgICAgICAgY2hhcmFjdGVyU2V0OihXZWJFdmVudENoYXJhY3RlclNldCljaGFyYWN0ZXJTZXQK
K3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAKKyAgICBfdHlwZSA9IHR5cGU7CisgICAgX3RpbWVzdGFtcCA9IHRpbWVT
dGFtcDsKKworICAgIF9jaGFyYWN0ZXJzID0gW2NoYXJhY3RlcnMgcmV0YWluXTsKKyAgICBfY2hh
cmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzID0gW2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyBy
ZXRhaW5dOworICAgIF9tb2RpZmllckZsYWdzID0gbW9kaWZpZXJzOworICAgIF9rZXlSZXBlYXRp
bmcgPSByZXBlYXRpbmc7CisgICAgX2tleWJvYXJkRmxhZ3MgPSBmbGFnczsKKyAgICBfdGFiS2V5
ID0gdGFiS2V5OworICAgIF9jaGFyYWN0ZXJTZXQgPSBjaGFyYWN0ZXJTZXQ7CisgICAgCisgICAg
aWYgKGtleUNvZGUpCisgICAgICAgIF9rZXlDb2RlID0gd2luZG93c0tleUNvZGVGb3JLZXlDb2Rl
KGtleUNvZGUpOworCisgICAgLy8gTk9URTogdGhpcyBwcmVzZXJ2ZXMgdGhlIG9yaWdpbmFsIHNl
bWFudGljcyB3aGljaCB1c2VkIHRoZSAKKyAgICAvLyBjaGFyYWN0ZXJzIHN0cmluZyBmb3IgdGhl
IGtleUNvZGUuIFRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgaW4gaU9TIDQuMCB0bworICAgIC8vIGFs
bG93IHRoZSBjbGllbnQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGEga2V5Q29kZSwgb3RoZXJ3aXNl
IGRlZmF1bHQgdG8gCisgICAgLy8gbWFwcGluZyB0aGUgY2hhcmFjdGVycyBzdHJpbmcgdG8gYSBr
ZXlDb2RlLgorICAgIC8vIGUuZy4gYWRkIGFuICdlbHNlJyBiZWZvcmUgdGhpcyAnaWYnLgorICAg
IGlmIChbY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIGxlbmd0aF0gPT0gMSkgeworICAgICAg
ICB1bmljaGFyIGNoID0gW2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyBjaGFyYWN0ZXJBdElu
ZGV4OjBdOworICAgICAgICBfa2V5Q29kZSA9IHdpbmRvd3NLZXlDb2RlRm9yQ2hhckNvZGVJT1Mo
Y2gpOworICAgIH0KKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICBbX2NoYXJhY3RlcnMgcmVsZWFzZV07CisgICAgW19jaGFyYWN0ZXJzSWdub3JpbmdNb2Rp
ZmllcnMgcmVsZWFzZV07CisKKyAgICBbX3RvdWNoTG9jYXRpb25zIHJlbGVhc2VdOworICAgIFtf
dG91Y2hJZGVudGlmaWVycyByZWxlYXNlXTsKKyAgICBbX3RvdWNoUGhhc2VzIHJlbGVhc2VdOwor
ICAgIAorICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoTlNTdHJpbmcgKilfdHlwZURlc2Ny
aXB0aW9uCit7CisgICAgc3dpdGNoIChfdHlwZSkgeworICAgICAgICBjYXNlIFdlYkV2ZW50TW91
c2VEb3duOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRNb3VzZURvd24iOworICAgICAg
ICBjYXNlIFdlYkV2ZW50TW91c2VVcDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50TW91
c2VVcCI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRNb3VzZU1vdmVkOgorICAgICAgICAgICAgcmV0
dXJuIEAiV2ViRXZlbnRNb3VzZU1vdmVkIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudFNjcm9sbFdo
ZWVsOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRTY3JvbGxXaGVlbCI7CisgICAgICAg
IGNhc2UgV2ViRXZlbnRLZXlEb3duOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRLZXlE
b3duIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudEtleVVwOgorICAgICAgICAgICAgcmV0dXJuIEAi
V2ViRXZlbnRLZXlVcCI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaEJlZ2luOgorICAgICAg
ICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaEJlZ2luIjsKKyAgICAgICAgY2FzZSBXZWJFdmVu
dFRvdWNoQ2hhbmdlOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaENoYW5nZSI7
CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaEVuZDoKKyAgICAgICAgICAgIHJldHVybiBAIldl
YkV2ZW50VG91Y2hFbmQiOworICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hDYW5jZWw6CisgICAg
ICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoQ2FuY2VsIjsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gQCJV
bmtub3duIjsKK30KKworLSAoTlNTdHJpbmcgKilfbW9kaWZlckZsYWdzRGVzY3JpcHRpb24KK3sK
KyAgICBzd2l0Y2ggKF9tb2RpZmllckZsYWdzKSB7CisgICAgICAgIGNhc2UgV2ViRXZlbnRNb3Vz
ZURvd246CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudE1vdXNlRG93biI7CisgICAgICAg
IGNhc2UgV2ViRXZlbnRNb3VzZVVwOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRNb3Vz
ZVVwIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudE1vdXNlTW92ZWQ6CisgICAgICAgICAgICByZXR1
cm4gQCJXZWJFdmVudE1vdXNlTW92ZWQiOworICAgICAgICBjYXNlIFdlYkV2ZW50U2Nyb2xsV2hl
ZWw6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFNjcm9sbFdoZWVsIjsKKyAgICAgICAg
Y2FzZSBXZWJFdmVudEtleURvd246CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudEtleURv
d24iOworICAgICAgICBjYXNlIFdlYkV2ZW50S2V5VXA6CisgICAgICAgICAgICByZXR1cm4gQCJX
ZWJFdmVudEtleVVwIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoQmVnaW46CisgICAgICAg
ICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoQmVnaW4iOworICAgICAgICBjYXNlIFdlYkV2ZW50
VG91Y2hDaGFuZ2U6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoQ2hhbmdlIjsK
KyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoRW5kOgorICAgICAgICAgICAgcmV0dXJuIEAiV2Vi
RXZlbnRUb3VjaEVuZCI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaENhbmNlbDoKKyAgICAg
ICAgICAgIHJldHVybiBAIldlYkV2ZW50VG91Y2hDYW5jZWwiOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBAIlVu
a25vd24iOworfQorCistIChOU1N0cmluZyAqKV9jaGFyYWN0ZXJTZXREZXNjcmlwdGlvbgorewor
ICAgIHN3aXRjaCAoX2NoYXJhY3RlclNldCkgeworICAgICAgICBjYXNlIFdlYkV2ZW50Q2hhcmFj
dGVyU2V0QVNDSUk6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudENoYXJhY3RlclNldEFT
Q0lJIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudENoYXJhY3RlclNldFN5bWJvbDoKKyAgICAgICAg
ICAgIHJldHVybiBAIldlYkV2ZW50Q2hhcmFjdGVyU2V0U3ltYm9sIjsKKyAgICAgICAgY2FzZSBX
ZWJFdmVudENoYXJhY3RlclNldERpbmdiYXRzOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZl
bnRDaGFyYWN0ZXJTZXREaW5nYmF0cyI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRDaGFyYWN0ZXJT
ZXRVbmljb2RlOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRDaGFyYWN0ZXJTZXRVbmlj
b2RlIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudENoYXJhY3RlclNldEZ1bmN0aW9uS2V5czoKKyAg
ICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50Q2hhcmFjdGVyU2V0RnVuY3Rpb25LZXlzIjsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICByZXR1cm4gQCJVbmtub3duIjsKK30KKworLSAoTlNTdHJpbmcgKilfdG91Y2hMb2NhdGlv
bnNEZXNjcmlwdGlvbjooTlNBcnJheSAqKWxvY2F0aW9ucworeworICAgIEJPT0wgc2hvdWxkQWRk
Q29tbWEgPSBOTzsKKyAgICBOU011dGFibGVTdHJpbmcgKmRlc2NyaXB0aW9uID0gW05TTXV0YWJs
ZVN0cmluZyBzdHJpbmddOworICAgIGZvciAoTlNWYWx1ZSAqdmFsdWUgaW4gbG9jYXRpb25zKSB7
CisgICAgICAgIENHUG9pbnQgcG9pbnQgPSBbdmFsdWUgcG9pbnRWYWx1ZV07CisgICAgICAgIFtk
ZXNjcmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCIlQCglZiwgJWYpIiwgKHNob3VsZEFkZENvbW1hID8g
QCIsICIgOiBAIiIpLCBwb2ludC54LCBwb2ludC55XTsKKyAgICAgICAgc2hvdWxkQWRkQ29tbWEg
PSBZRVM7CisgICAgfQorICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKworLSAoTlNTdHJpbmcg
KilfdG91Y2hJZGVudGlmaWVyc0Rlc2NyaXB0aW9uCit7CisgICAgQk9PTCBzaG91bGRBZGRDb21t
YSA9IE5POworICAgIE5TTXV0YWJsZVN0cmluZyAqZGVzY3JpcHRpb24gPSBbTlNNdXRhYmxlU3Ry
aW5nIHN0cmluZ107CisgICAgZm9yIChOU051bWJlciAqaWRlbnRpZmllciBpbiBfdG91Y2hJZGVu
dGlmaWVycykgeworICAgICAgICBbZGVzY3JpcHRpb24gYXBwZW5kRm9ybWF0OkAiJUAldSIsIChz
aG91bGRBZGRDb21tYSA/IEAiLCAiIDogQCIiKSwgW2lkZW50aWZpZXIgdW5zaWduZWRJbnRWYWx1
ZV1dOworICAgICAgICBzaG91bGRBZGRDb21tYSA9IFlFUzsKKyAgICB9CisgICAgcmV0dXJuIGRl
c2NyaXB0aW9uOworfQorCistIChOU1N0cmluZyAqKV90b3VjaFBoYXNlRGVzY3JpcHRpb246KFdl
YkV2ZW50VG91Y2hQaGFzZVR5cGUpcGhhc2UKK3sKKyAgICBzd2l0Y2ggKHBoYXNlKSB7CisgICAg
ICAgIGNhc2UgV2ViRXZlbnRUb3VjaFBoYXNlQmVnYW46CisgICAgICAgICAgICByZXR1cm4gQCJX
ZWJFdmVudFRvdWNoUGhhc2VCZWdhbiI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaFBoYXNl
TW92ZWQ6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoUGhhc2VNb3ZlZCI7Cisg
ICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaFBoYXNlU3RhdGlvbmFyeToKKyAgICAgICAgICAgIHJl
dHVybiBAIldlYkV2ZW50VG91Y2hQaGFzZVN0YXRpb25hcnkiOworICAgICAgICBjYXNlIFdlYkV2
ZW50VG91Y2hQaGFzZUVuZGVkOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaFBo
YXNlRW5kZWQiOworICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hQaGFzZUNhbmNlbGxlZDoKKyAg
ICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50VG91Y2hQaGFzZUNhbmNlbGxlZCI7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAg
cmV0dXJuIEAiVW5rbm93biI7Cit9CisKKy0gKE5TU3RyaW5nICopX3RvdWNoUGhhc2VzRGVzY3Jp
cHRpb24KK3sKKyAgICBCT09MIHNob3VsZEFkZENvbW1hID0gTk87CisgICAgTlNNdXRhYmxlU3Ry
aW5nICpkZXNjcmlwdGlvbiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgICBmb3IgKE5T
TnVtYmVyICpwaGFzZSBpbiBfdG91Y2hQaGFzZXMpIHsKKyAgICAgICAgW2Rlc2NyaXB0aW9uIGFw
cGVuZEZvcm1hdDpAIiVAJUAiLCAoc2hvdWxkQWRkQ29tbWEgPyBAIiwgIiA6IEAiIiksIFtzZWxm
IF90b3VjaFBoYXNlRGVzY3JpcHRpb246c3RhdGljX2Nhc3Q8V2ViRXZlbnRUb3VjaFBoYXNlVHlw
ZT4oW3BoYXNlIHVuc2lnbmVkSW50VmFsdWVdKV1dOworICAgICAgICBzaG91bGRBZGRDb21tYSA9
IFlFUzsKKyAgICB9CisgICAgcmV0dXJuIGRlc2NyaXB0aW9uOworfQorCistIChOU1N0cmluZyAq
KV9ldmVudERlc2NyaXB0aW9uCit7CisgICAgc3dpdGNoIChfdHlwZSkgeworICAgICAgICBjYXNl
IFdlYkV2ZW50TW91c2VEb3duOgorICAgICAgICBjYXNlIFdlYkV2ZW50TW91c2VVcDoKKyAgICAg
ICAgY2FzZSBXZWJFdmVudE1vdXNlTW92ZWQ6CisgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCJsb2NhdGlvbjogKCVmLCAlZikiLCBfbG9jYXRpb25JbldpbmRv
dy54LCBfbG9jYXRpb25JbldpbmRvdy55XTsKKyAgICAgICAgY2FzZSBXZWJFdmVudFNjcm9sbFdo
ZWVsOgorICAgICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAibG9j
YXRpb246ICglZiwgJWYpIGRlbHRhWDogJWYgZGVsdGFZOiAlZiIsIF9sb2NhdGlvbkluV2luZG93
LngsIF9sb2NhdGlvbkluV2luZG93LnksIF9kZWx0YVgsIF9kZWx0YVldOworICAgICAgICBjYXNl
IFdlYkV2ZW50S2V5RG93bjoKKyAgICAgICAgY2FzZSBXZWJFdmVudEtleVVwOgorICAgICAgICAg
ICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiY2hhcnM6ICVAIGNoYXJzTm9N
b2RpZmllcnM6ICVAIGZsYWdzOiAlZCByZXBlYXRpbmc6ICVkIGtleWJvYXJkRmxhZ3M6ICVsdSBr
ZXlDb2RlICVkLCBpc1RhYjogJWQgY2hhclNldDogJUAiLCBfY2hhcmFjdGVycywgX2NoYXJhY3Rl
cnNJZ25vcmluZ01vZGlmaWVycywgX21vZGlmaWVyRmxhZ3MsIF9rZXlSZXBlYXRpbmcsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmc+KF9rZXlib2FyZEZsYWdzKSwgX2tleUNvZGUsIF90YWJLZXks
IFtzZWxmIF9jaGFyYWN0ZXJTZXREZXNjcmlwdGlvbl1dOworICAgICAgICBjYXNlIFdlYkV2ZW50
VG91Y2hCZWdpbjoKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoQ2hhbmdlOgorICAgICAgICBj
YXNlIFdlYkV2ZW50VG91Y2hFbmQ6CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaENhbmNlbDoK
KyAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImxvY2F0aW9u
OiAoJWYsICVmKSBjb3VudDogJWQgbG9jYXRpb25zOiAlQCBpZGVudGlmaWVyczogJUAgcGhhc2Vz
OiAlQCBpc0dlc3R1cmU6ICVkIHNjYWxlOiAlZiByb3RhdGlvbjogJWYiLCBfbG9jYXRpb25Jbldp
bmRvdy54LCBfbG9jYXRpb25JbldpbmRvdy55LCBfdG91Y2hDb3VudCwgW3NlbGYgX3RvdWNoTG9j
YXRpb25zRGVzY3JpcHRpb246X3RvdWNoTG9jYXRpb25zXSwgW3NlbGYgX3RvdWNoSWRlbnRpZmll
cnNEZXNjcmlwdGlvbl0sIFtzZWxmIF90b3VjaFBoYXNlc0Rlc2NyaXB0aW9uXSwgKF9pc0dlc3R1
cmUgPyAxIDogMCksIF9nZXN0dXJlU2NhbGUsIF9nZXN0dXJlUm90YXRpb25dOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJl
dHVybiBAIlVua25vd24iOworfQorCistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCit7CisgICAg
cmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgdHlwZTogJUAgLSAlQCIsIFtz
dXBlciBkZXNjcmlwdGlvbl0sIFtzZWxmIF90eXBlRGVzY3JpcHRpb25dLCBbc2VsZiBfZXZlbnRE
ZXNjcmlwdGlvbl1dOworfQorCistIChDR1BvaW50KWxvY2F0aW9uSW5XaW5kb3cKK3sKKyAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKF90eXBlID09IFdlYkV2ZW50TW91c2VEb3duIHx8IF90eXBlID09
IFdlYkV2ZW50TW91c2VVcCB8fCBfdHlwZSA9PSBXZWJFdmVudE1vdXNlTW92ZWQgfHwgX3R5cGUg
PT0gV2ViRXZlbnRTY3JvbGxXaGVlbAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IDxyZGFyOi8vcHJvYmxlbS83MTg1Mjg0PiBUb3VjaEV2ZW50cyBtYXkgYmUgaW4gbW9yZSB0aGFu
IG9uZSB3aW5kb3cgc29tZSBkYXkuCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBfdHlwZSA9
PSBXZWJFdmVudFRvdWNoQmVnaW4gfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENoYW5nZSB8fCBf
dHlwZSA9PSBXZWJFdmVudFRvdWNoRW5kIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDYW5jZWwK
KyAgICAgICAgICAgICAgICAgICAgICAgICwgIldlYkV2ZW50VHlwZTogJWQiLCBfdHlwZSk7Cisg
ICAgcmV0dXJuIF9sb2NhdGlvbkluV2luZG93OworfQorCistIChOU1N0cmluZyAqKWNoYXJhY3Rl
cnMKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRLZXlEb3duIHx8IF90eXBlID09IFdl
YkV2ZW50S2V5VXApOworICAgIHJldHVybiBbW19jaGFyYWN0ZXJzIHJldGFpbl0gYXV0b3JlbGVh
c2VdOworfQorCistIChOU1N0cmluZyAqKWNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycworewor
ICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudEtleURvd24gfHwgX3R5cGUgPT0gV2ViRXZlbnRL
ZXlVcCk7CisgICAgcmV0dXJuIFtbX2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyByZXRhaW5d
IGF1dG9yZWxlYXNlXTsKK30KKworLSAoV2ViRXZlbnRGbGFncyltb2RpZmllckZsYWdzCit7Cisg
ICAgcmV0dXJuIF9tb2RpZmllckZsYWdzOworfQorCistIChCT09MKWlzS2V5UmVwZWF0aW5nCit7
CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50S2V5RG93biB8fCBfdHlwZSA9PSBXZWJFdmVu
dEtleVVwKTsKKyAgICByZXR1cm4gX2tleVJlcGVhdGluZzsKK30KKworLy8gRklYTUU6IHRvIGJl
IHJlbW92ZWQKKy0gKEJPT0wpaXNQb3B1cFZhcmlhbnQKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0g
V2ViRXZlbnRLZXlEb3duIHx8IF90eXBlID09IFdlYkV2ZW50S2V5VXApOworICAgIHJldHVybiBf
cG9wdXBWYXJpYW50OworfQorCistIChOU1VJbnRlZ2VyKWtleWJvYXJkRmxhZ3MKK3sKKyAgICBB
U1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRLZXlEb3duIHx8IF90eXBlID09IFdlYkV2ZW50S2V5VXAp
OworICAgIHJldHVybiBfa2V5Ym9hcmRGbGFnczsKK30KKworLSAodWludDE2X3Qpa2V5Q29kZQor
eworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudEtleURvd24gfHwgX3R5cGUgPT0gV2ViRXZl
bnRLZXlVcCk7CisgICAgcmV0dXJuIF9rZXlDb2RlOworfQorCistIChCT09MKWlzVGFiS2V5Cit7
CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50S2V5RG93biB8fCBfdHlwZSA9PSBXZWJFdmVu
dEtleVVwKTsKKyAgICByZXR1cm4gX3RhYktleTsKK30KKworLSAoV2ViRXZlbnRDaGFyYWN0ZXJT
ZXQpY2hhcmFjdGVyU2V0Cit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50S2V5RG93biB8
fCBfdHlwZSA9PSBXZWJFdmVudEtleVVwKTsKKyAgICByZXR1cm4gX2NoYXJhY3RlclNldDsKK30K
KworLSAoZmxvYXQpZGVsdGFYCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50U2Nyb2xs
V2hlZWwpOworICAgIHJldHVybiBfZGVsdGFYOworfQorCistIChmbG9hdClkZWx0YVkKK3sKKyAg
ICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRTY3JvbGxXaGVlbCk7CisgICAgcmV0dXJuIF9kZWx0
YVk7Cit9CisKKy8vIFRvdWNoCistICh1bnNpZ25lZCl0b3VjaENvdW50Cit7CisgICAgQVNTRVJU
KF90eXBlID09IFdlYkV2ZW50VG91Y2hCZWdpbiB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoQ2hh
bmdlIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hFbmQgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3Vj
aENhbmNlbCk7CisgICAgcmV0dXJuIF90b3VjaENvdW50OworfQorCistIChOU0FycmF5ICopdG91
Y2hMb2NhdGlvbnMKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEJlZ2luIHx8
IF90eXBlID09IFdlYkV2ZW50VG91Y2hDaGFuZ2UgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEVu
ZCB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoQ2FuY2VsKTsKKyAgICByZXR1cm4gX3RvdWNoTG9j
YXRpb25zOworfQorCistIChOU0FycmF5ICopdG91Y2hJZGVudGlmaWVycworeworICAgIEFTU0VS
VChfdHlwZSA9PSBXZWJFdmVudFRvdWNoQmVnaW4gfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENo
YW5nZSB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoRW5kIHx8IF90eXBlID09IFdlYkV2ZW50VG91
Y2hDYW5jZWwpOworICAgIHJldHVybiBfdG91Y2hJZGVudGlmaWVyczsKK30KKworLSAoTlNBcnJh
eSAqKXRvdWNoUGhhc2VzCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50VG91Y2hCZWdp
biB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoQ2hhbmdlIHx8IF90eXBlID09IFdlYkV2ZW50VG91
Y2hFbmQgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENhbmNlbCk7CisgICAgcmV0dXJuIF90b3Vj
aFBoYXNlczsKK30KKworLy8gR2VzdHVyZQorLSAoQk9PTClpc0dlc3R1cmUKK3sKKyAgICBBU1NF
UlQoX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEJlZ2luIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hD
aGFuZ2UgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEVuZCB8fCBfdHlwZSA9PSBXZWJFdmVudFRv
dWNoQ2FuY2VsKTsKKyAgICByZXR1cm4gX2lzR2VzdHVyZTsKK30KKworLSAoZmxvYXQpZ2VzdHVy
ZVNjYWxlCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50VG91Y2hCZWdpbiB8fCBfdHlw
ZSA9PSBXZWJFdmVudFRvdWNoQ2hhbmdlIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hFbmQgfHwg
X3R5cGUgPT0gV2ViRXZlbnRUb3VjaENhbmNlbCk7CisgICAgcmV0dXJuIF9nZXN0dXJlU2NhbGU7
Cit9CisKKy0gKGZsb2F0KWdlc3R1cmVSb3RhdGlvbgoreworICAgIEFTU0VSVChfdHlwZSA9PSBX
ZWJFdmVudFRvdWNoQmVnaW4gfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENoYW5nZSB8fCBfdHlw
ZSA9PSBXZWJFdmVudFRvdWNoRW5kIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDYW5jZWwpOwor
ICAgIHJldHVybiBfZ2VzdHVyZVJvdGF0aW9uOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1dpZGdldElPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OTllNDEyMWU3YTljZjlkNmFmYjdm
ODcwZmVhOTY3YTY0MjY4ODI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1dpZGdldElPUy5tbQpAQCAtMCwwICsxLDI3NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2lkZ2V0LmgiCisKKyNp
bXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiQ3Vyc29yLmgiCisjaW1wb3J0ICJE
b2N1bWVudC5oIgorI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiRnJhbWUuaCIKKyNpbXBvcnQg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiUGxhdGZvcm1N
b3VzZUV2ZW50LmgiCisjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCisjaW1wb3J0ICJXQUtTY3JvbGxW
aWV3LmgiCisjaW1wb3J0ICJXQUtWaWV3LmgiCisjaW1wb3J0ICJXQUtXaW5kb3cuaCIKKyNpbXBv
cnQgIldlYkNvcmVGcmFtZVZpZXcuaCIKKyNpbXBvcnQgIldlYkNvcmVWaWV3LmgiCisjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+CisKK0BpbnRlcmZhY2UgTlNWaWV3IChXZWJTZXRTZWxlY3RlZE1l
dGhvZHMpCistICh2b2lkKXNldElzU2VsZWN0ZWQ6KEJPT0wpaXNTZWxlY3RlZDsKKy0gKHZvaWQp
d2ViUGx1Z0luU2V0SXNTZWxlY3RlZDooQk9PTClpc1NlbGVjdGVkOworQGVuZAorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIHNhZmVSZW1vdmVGcm9tU3VwZXJ2aWV3KE5TVmll
dyAqdmlldykKK3sKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHByb2JhYmx5IGNoYW5nZSB0aGUg
Zmlyc3QgcmVzcG9uZGVyIG9mIHRoZSB3aW5kb3cgaWYKKyAgICAvLyBpdCBpcyBhIGRlc2NlbmRh
bnQgb2YgdGhlIHZpZXcgd2UgcmVtb3ZlLgorICAgIC8vIFNlZTogPHJkYXI6Ly9wcm9ibGVtLzEw
MzYwMTg2PgorICAgIFt2aWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworfQorCitXaWRnZXQ6Oldp
ZGdldChOU1ZpZXcqIHZpZXcpCit7CisgICAgaW5pdCh2aWV3KTsKK30KKworV2lkZ2V0Ojp+V2lk
Z2V0KCkgCit7CisgICAgcmVsZWFzZVBsYXRmb3JtV2lkZ2V0KCk7Cit9CisKKy8vIEZJWE1FOiBT
aG91bGQgbW92ZSB0aGlzIHRvIENocm9tZTsgYmFkIGxheWVyaW5nIHRoYXQgdGhpcyBrbm93cyBh
Ym91dCBGcmFtZS4KK3ZvaWQgV2lkZ2V0OjpzZXRGb2N1cyhib29sIGZvY3VzZWQpCit7CisgICAg
VU5VU0VEX1BBUkFNKGZvY3VzZWQpOworfQorCit2b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0
IEN1cnNvciYpCit7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzaG93KCkKK3sKKyAgICBpZiAoaXNTZWxm
VmlzaWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRTZWxmVmlzaWJsZSh0cnVlKTsK
KworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBbZ2V0T3V0ZXJWaWV3KCkg
c2V0SGlkZGVuOk5PXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCit2b2lk
IFdpZGdldDo6aGlkZSgpCit7CisgICAgaWYgKCFpc1NlbGZWaXNpYmxlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHNldFNlbGZWaXNpYmxlKGZhbHNlKTsKKworICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICBbZ2V0T3V0ZXJWaWV3KCkgc2V0SGlkZGVuOllFU107CisgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworSW50UmVjdCBXaWRnZXQ6OmZyYW1lUmVj
dCgpIGNvbnN0Cit7CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm4g
bV9mcmFtZTsKKyAgICAKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0
dXJuIGVuY2xvc2luZ0ludFJlY3QoW2dldE91dGVyVmlldygpIGZyYW1lXSk7CisgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICByZXR1cm4gbV9mcmFtZTsKK30KKwordm9p
ZCBXaWRnZXQ6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0ICZyZWN0KQoreworICAgIG1fZnJh
bWUgPSByZWN0OworICAgIAorICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBO
U1ZpZXcgKnYgPSBnZXRPdXRlclZpZXcoKTsKKyAgICBOU1JlY3QgZiA9IHJlY3Q7CisgICAgaWYg
KCFOU0VxdWFsUmVjdHMoZiwgW3YgZnJhbWVdKSkgeworICAgICAgICBbdiBzZXRGcmFtZTpmXTsK
KyAgICAgICAgW3Ygc2V0TmVlZHNEaXNwbGF5OiBOT107CisgICAgfQorICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Cit9CisKK05TVmlldyogV2lkZ2V0OjpnZXRPdXRlclZpZXcoKSBjb25z
dAoreworICAgIE5TVmlldyogdmlldyA9IHBsYXRmb3JtV2lkZ2V0KCk7CisKKyAgICAvLyBJZiB0
aGlzIHdpZGdldCdzIHZpZXcgaXMgYSBXZWJDb3JlRnJhbWVTY3JvbGxWaWV3IHRoZW4gd2UKKyAg
ICAvLyByZXNpemUgaXRzIGNvbnRhaW5pbmcgdmlldywgYSBXZWJGcmFtZVZpZXcuCisgICAgaWYg
KFt2aWV3IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woV2ViQ29yZUZyYW1lU2Nyb2xsVmll
dyldKSB7CisgICAgICAgIHZpZXcgPSBbdmlldyBzdXBlcnZpZXddOworICAgICAgICBBU1NFUlQo
dmlldyk7CisgICAgfQorCisgICAgcmV0dXJuIHZpZXc7Cit9CisKK3ZvaWQgV2lkZ2V0OjpwYWlu
dChHcmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgaWYgKHAtPnBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5TVmlldyAqdmll
dyA9IGdldE91dGVyVmlldygpOworCisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHAtPnBs
YXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY2dDb250ZXh0KTsKKwor
ICAgIE5TUmVjdCB2aWV3RnJhbWUgPSBbdmlldyBmcmFtZV07CisgICAgTlNSZWN0IHZpZXdCb3Vu
ZHMgPSBbdmlldyBib3VuZHNdOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjZ0NvbnRleHQs
IHZpZXdGcmFtZS5vcmlnaW4ueCAtIHZpZXdCb3VuZHMub3JpZ2luLngsIHZpZXdGcmFtZS5vcmln
aW4ueSAtIHZpZXdCb3VuZHMub3JpZ2luLnkpOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TOworICAgIFt2aWV3IGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZl
cnRSZWN0OnIgZnJvbVZpZXc6W3ZpZXcgc3VwZXJ2aWV3XV0gaW5Db250ZXh0OmNnQ29udGV4dF07
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIENHQ29udGV4dFJlc3RvcmVH
U3RhdGUoY2dDb250ZXh0KTsKK30KKwordm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCAv
KmlzU2VsZWN0ZWQqLykKK3sKK30KKwordm9pZCBXaWRnZXQ6OmFkZFRvU3VwZXJ2aWV3KE5TVmll
dyAqdmlldykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBBU1NF
UlQodmlldyk7CisgICAgTlNWaWV3ICpzdWJ2aWV3ID0gZ2V0T3V0ZXJWaWV3KCk7CisKKyAgICBp
ZiAoIXN1YnZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghW3ZpZXcgaXNEZXNj
ZW5kYW50T2Y6c3Vidmlld10pOworICAgIAorICAgIGlmIChbc3VidmlldyBzdXBlcnZpZXddICE9
IHZpZXcpCisgICAgICAgIFt2aWV3IGFkZFN1YnZpZXc6c3Vidmlld107CisKKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworfQorCit2b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVN1cGVydmll
dygpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHNhZmVSZW1vdmVG
cm9tU3VwZXJ2aWV3KGdldE91dGVyVmlldygpKTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOworfQorCitJbnRSZWN0IFdpZGdldDo6Y29udmVydEZyb21Sb290VG9Db250YWluaW5nV2lu
ZG93KGNvbnN0IFdpZGdldCogcm9vdFdpZGdldCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBpZiAoIXJvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHJldHVybiByZWN0
OworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIEFTU0VSVChbcm9vdFdp
ZGdldC0+cGxhdGZvcm1XaWRnZXQoKSBpc0tpbmRPZkNsYXNzOltOU1Njcm9sbFZpZXcgY2xhc3Nd
XSk7CisgICAgV0FLU2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19jYXN0PFdBS1Njcm9sbFZpZXcg
Kj4ocm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSk7CisgICAgaWYgKFdBS1ZpZXcgKmRvY3Vt
ZW50VmlldyA9IFt2aWV3IGRvY3VtZW50Vmlld10pCisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJ
bnRSZWN0KFtkb2N1bWVudFZpZXcgY29udmVydFJlY3Q6cmVjdCB0b1ZpZXc6bmlsXSk7CisgICAg
cmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoW3ZpZXcgY29udmVydFJlY3Q6cmVjdCB0b1ZpZXc6bmls
XSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHJldHVybiByZWN0Owor
fQorCitJbnRSZWN0IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93VG9Sb290KGNv
bnN0IFdpZGdldCogcm9vdFdpZGdldCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAo
IXJvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHJldHVybiByZWN0OworCisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIEFTU0VSVChbcm9vdFdpZGdldC0+
cGxhdGZvcm1XaWRnZXQoKSBpc0tpbmRPZkNsYXNzOltOU1Njcm9sbFZpZXcgY2xhc3NdXSk7Cisg
ICAgV0FLU2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19jYXN0PFdBS1Njcm9sbFZpZXcgKj4ocm9v
dFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSk7CisgICAgaWYgKFdBS1ZpZXcgKmRvY3VtZW50Vmll
dyA9IFt2aWV3IGRvY3VtZW50Vmlld10pCisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KFtkb2N1bWVudFZpZXcgY29udmVydFJlY3Q6cmVjdCBmcm9tVmlldzpuaWxdKTsKKyAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdChbdmlldyBjb252ZXJ0UmVjdDpyZWN0IGZyb21WaWV3Om5pbF0p
OworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4gcmVjdDsKK30K
KworSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0RnJvbVJvb3RUb0NvbnRhaW5pbmdXaW5kb3coY29u
c3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgaWYg
KCFyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm4gcG9pbnQ7CisK
KyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgQVNTRVJUKFtyb290V2lkZ2V0
LT5wbGF0Zm9ybVdpZGdldCgpIGlzS2luZE9mQ2xhc3M6W05TU2Nyb2xsVmlldyBjbGFzc11dKTsK
KyAgICBXQUtTY3JvbGxWaWV3ICp2aWV3ID0gc3RhdGljX2Nhc3Q8V0FLU2Nyb2xsVmlldyAqPihy
b290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKTsKKyAgICBOU1BvaW50IGNvbnZlcnRlZFBvaW50
OworICAgIGlmIChXQUtWaWV3ICpkb2N1bWVudFZpZXcgPSBbdmlldyBkb2N1bWVudFZpZXddKQor
ICAgICAgICBjb252ZXJ0ZWRQb2ludCA9IFtkb2N1bWVudFZpZXcgY29udmVydFBvaW50OnBvaW50
IHRvVmlldzpuaWxdOworICAgIGVsc2UKKyAgICAgICAgY29udmVydGVkUG9pbnQgPSBbdmlldyBj
b252ZXJ0UG9pbnQ6cG9pbnQgdG9WaWV3Om5pbF07CisgICAgcmV0dXJuIEludFBvaW50KHJvdW5k
Zihjb252ZXJ0ZWRQb2ludC54KSwgcm91bmRmKGNvbnZlcnRlZFBvaW50LnkpKTsKKyAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgcmV0dXJuIHBvaW50OworfQorCitJbnRQb2lu
dCBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvd1RvUm9vdChjb25zdCBXaWRnZXQq
IHJvb3RXaWRnZXQsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoIXJvb3RXaWRn
ZXQtPnBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHJldHVybiBwb2ludDsKKworICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBBU1NFUlQoW3Jvb3RXaWRnZXQtPnBsYXRmb3Jt
V2lkZ2V0KCkgaXNLaW5kT2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pOworICAgIFdBS1Nj
cm9sbFZpZXcgKnZpZXcgPSBzdGF0aWNfY2FzdDxXQUtTY3JvbGxWaWV3ICo+KHJvb3RXaWRnZXQt
PnBsYXRmb3JtV2lkZ2V0KCkpOworICAgIE5TUG9pbnQgY29udmVydGVkUG9pbnQ7CisgICAgaWYg
KFdBS1ZpZXcgKmRvY3VtZW50VmlldyA9IFt2aWV3IGRvY3VtZW50Vmlld10pCisgICAgICAgIGNv
bnZlcnRlZFBvaW50ID0gSW50UG9pbnQoW2RvY3VtZW50VmlldyBjb252ZXJ0UG9pbnQ6cG9pbnQg
ZnJvbVZpZXc6bmlsXSk7CisgICAgZWxzZQorICAgICAgICBjb252ZXJ0ZWRQb2ludCA9IEludFBv
aW50KFt2aWV3IGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpuaWxdKTsKKyAgICByZXR1cm4g
SW50UG9pbnQocm91bmRmKGNvbnZlcnRlZFBvaW50LngpLCByb3VuZGYoY29udmVydGVkUG9pbnQu
eSkpOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4gcG9pbnQ7
Cit9CisKK05TVmlldyAqV2lkZ2V0OjpwbGF0Zm9ybVdpZGdldCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fd2lkZ2V0LmdldCgpOworfQorCit2b2lkIFdpZGdldDo6c2V0UGxhdGZvcm1XaWRnZXQo
TlNWaWV3ICp3aWRnZXQpCit7CisgICAgaWYgKHdpZGdldCA9PSBtX3dpZGdldCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV93aWRnZXQgPSB3aWRnZXQ7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuY3BwCmluZGV4IDVi
OTk3Y2FjYTc4ZmUyODc1ZDQ5MzRkMTVmNGRjYWU3ODQ4MTNhNDIuLmIzNmI2NmQ4ZThmYmE0MjQ3
MjU4YzA4NmE5NGI0Y2Q4MTBmNjc5OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERpc2FibGVyLmNwcApAQCAtMjYsNiArMjYsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRpc3BsYXlTbGVlcERpc2FibGVyLmgiCiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQorCiAjaW5jbHVkZSA8SU9LaXQvcHdyX21ndC9JT1BNTGliLmg+CiAj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCkBAIC01NCwzICs1NiwxMiBAQCBEaXNwbGF5U2xl
ZXBEaXNhYmxlcjo6fkRpc3BsYXlTbGVlcERpc2FibGVyKCkKIH0KIAogfQorCisjZWxzZQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitEaXNwbGF5U2xlZXBEaXNhYmxlcjo6RGlzcGxheVNsZWVwRGlz
YWJsZXIoY29uc3QgY2hhciAqKSB7IH0KK0Rpc3BsYXlTbGVlcERpc2FibGVyOjp+RGlzcGxheVNs
ZWVwRGlzYWJsZXIoKSB7IH0KK30KKworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5oCmluZGV4
IDJjOWExODQyZjQ5MGFkOTA3MTMxMDk5NDk2NmRhYmE2N2YzZTQyN2YuLmE2OWJmOGRkOTQ2OGZm
NDYzMzdiMDViNDAyMjQwNDhmNDYwMGNmM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5oCkBAIC00MCw3ICs0MCw5IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgRGlzcGxheVNsZWVwRGlzYWJsZXIoY29uc3QgY2hhciogcmVhc29u
KTsKICAgICAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHVpbnQzMl90IG1fZGlzYWJsZURpc3Bs
YXlTbGVlcEFzc2VydGlvbjsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmlsZVN5c3RlbU1hYy5tbQppbmRleCAyMTZiNjA1
OTU4ZTEzN2IyOWFhMjgxZWRkNGYyYzgzZDZhZjkwMGUwLi42OGY2ZGY2YzY1NWE2OTBlZDU5MjAy
NWRjYzliYTYwYTZlNTZjYzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvRmlsZVN5c3RlbU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmls
ZVN5c3RlbU1hYy5tbQpAQCAtNjcsNiArNjcsOCBAQCBTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUo
Y29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgcGxhdGZvcm1GaWxlSAog
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBvcmFyeUZpbGVQYXRoLmRhdGEoKSk7CiB9
CiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiB2b2lkIHNldE1ldGFkYXRhVVJMKFN0cmluZyYgVVJM
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAg
ICAgTlNVUkwgKlVSTCA9IFVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoVVJMU3RyaW5nLCBuaWwpOwpA
QCAtODIsNyArODQsNiBAQCB2b2lkIHNldE1ldGFkYXRhVVJMKFN0cmluZyYgVVJMU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25zdCBTdHJpbmcmIHBhdAogICAgIH0pOwogfQogCi0j
aWYgIVBMQVRGT1JNKElPUykKIGJvb2wgY2FuRXhjbHVkZUZyb21CYWNrdXAoKQogewogICAgIHJl
dHVybiB0cnVlOwpAQCAtOTQsNiArOTUsNyBAQCBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNvbnN0
IFN0cmluZyYgcGF0aCkKICAgICBDU0JhY2t1cFNldEl0ZW1FeGNsdWRlZChwYXRoQXNVUkwocGF0
aCkuZ2V0KCksIFRSVUUsIEZBTFNFKTsgCiAgICAgcmV0dXJuIHRydWU7CiB9CisKICNlbmRpZgog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvS2lsbFJpbmdNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvS2ls
bFJpbmdNYWMubW0KaW5kZXggMzJlN2M3MjI2MmE2ZWU2NDI5ODYxMzAwMWJhNTc3ODU4N2Q3YTQx
OS4uMTAxNTA3MDhhMzk4MzE0ZTkwNmQ4NzdhMWM5MDk2YWViN2Y5MjU5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9LaWxsUmluZ01hYy5tbQpAQCAtODEsMyArODEsNCBAQCB2b2lk
IEtpbGxSaW5nOjpzZXRUb1lhbmtlZFN0YXRlKCkKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTWVtb3J5UHJlc3N1
cmVIYW5kbGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL01lbW9yeVByZXNz
dXJlSGFuZGxlck1hYy5tbQppbmRleCBhYzlkMGNmYWNjZGNiNGEzMjlkM2MyOWZjZGMwMDgyNjlm
ODA5MDhkLi45MTYzNjUzZGVjYzMzMDhlNDFhZTNjOTBmZTU3NWI0YmZhMzczZWE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9NZW1vcnlQcmVzc3VyZUhhbmRs
ZXJNYWMubW0KQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6Omlu
c3RhbGwoKQogICAgICAgICByZXR1cm47CiAKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBeewotI2lmIE1BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwOTAKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDkwCiAgICAgICAgIF9jYWNoZV9ldmVudF9zb3VyY2UgPSB3a0NyZWF0ZU1lbW9yeVN0
YXR1c1ByZXNzdXJlQ3JpdGljYWxEaXNwYXRjaE9uTWFpblF1ZXVlKCk7CiAjZWxzZQogICAgICAg
ICBfY2FjaGVfZXZlbnRfc291cmNlID0gd2tDcmVhdGVWTVByZXNzdXJlRGlzcGF0Y2hPbk1haW5R
dWV1ZSgpOwpAQCAtMTU4LDcgKzE1OCw5IEBAIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpy
ZWxlYXNlTWVtb3J5KGJvb2wpCiAKICAgICBtZW1vcnlDYWNoZSgpLT5wcnVuZVRvUGVyY2VudGFn
ZSgwKTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgTGF5ZXJQb29sOjpzaGFyZWRQb29sKCkt
PmRyYWluKCk7CisjZW5kaWYKIAogICAgIGNzc1ZhbHVlUG9vbCgpLmRyYWluKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUNsb2NrQ00ubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1DbG9ja0NNLm1tCmluZGV4IDMzZjU0
YzlhMTRmMzBlNGEyNTJlYjViODIwYjRlYWFhNjVjN2UwMzUuLjA3NDAwNWViYWQ4NDQ2YzFkYzAz
ZTRiYWFlYmMzNzFhNTQzNWI1MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QbGF0Zm9ybUNsb2NrQ00ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1BsYXRmb3JtQ2xvY2tDTS5tbQpAQCAtMzEsMTEgKzMxLDE5IEBACiAKICNpbXBvcnQgIk1lZGlh
VGltZU1hYy5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNpZiBQTEFURk9STShJT1MpCisj
aW1wb3J0IDxDb3JlTWVkaWEvQ01BdWRpb0Nsb2NrLmg+CisjZWxzZQogI2ltcG9ydCA8Q29yZU1l
ZGlhL0NNQXVkaW9EZXZpY2VDbG9jay5oPgorI2VuZGlmCiAKIFNPRlRfTElOS19GUkFNRVdPUktf
T1BUSU9OQUwoQ29yZU1lZGlhKQogCisjaWYgUExBVEZPUk0oSU9TKQorU09GVF9MSU5LKENvcmVN
ZWRpYSwgQ01BdWRpb0Nsb2NrQ3JlYXRlLCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9j
YXRvciwgQ01DbG9ja1JlZiAqY2xvY2tPdXQpLCAoYWxsb2NhdG9yLCBjbG9ja091dCkpCisjZWxz
ZQogU09GVF9MSU5LKENvcmVNZWRpYSwgQ01BdWRpb0RldmljZUNsb2NrQ3JlYXRlLCBPU1N0YXR1
cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ0ZTdHJpbmdSZWYgZGV2aWNlVUlELCBDTUNs
b2NrUmVmICpjbG9ja091dCksIChhbGxvY2F0b3IsIGRldmljZVVJRCwgY2xvY2tPdXQpKQorI2Vu
ZGlmCiBTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRpbWViYXNlQ3JlYXRlV2l0aE1hc3RlckNsb2Nr
LCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ01DbG9ja1JlZiBtYXN0ZXJD
bG9jaywgQ01UaW1lYmFzZVJlZiAqdGltZWJhc2VPdXQpLCAoYWxsb2NhdG9yLCBtYXN0ZXJDbG9j
aywgdGltZWJhc2VPdXQpKQogU09GVF9MSU5LKENvcmVNZWRpYSwgQ01UaW1lYmFzZVNldFRpbWUs
IE9TU3RhdHVzLCAoQ01UaW1lYmFzZVJlZiB0aW1lYmFzZSwgQ01UaW1lIHRpbWUpLCAodGltZWJh
c2UsIHRpbWUpKQogU09GVF9MSU5LKENvcmVNZWRpYSwgQ01UaW1lYmFzZUdldFRpbWUsIENNVGlt
ZSwgKENNVGltZWJhc2VSZWYgdGltZWJhc2UpLCAodGltZWJhc2UpKQpAQCAtNTQsNyArNjIsMTEg
QEAgUGxhdGZvcm1DbG9ja0NNOjpQbGF0Zm9ybUNsb2NrQ00oKQogICAgICwgbV9ydW5uaW5nKGZh
bHNlKQogewogICAgIENNQ2xvY2tSZWYgcmF3Q2xvY2tQdHIgPSAwOworI2lmIFBMQVRGT1JNKElP
UykKKyAgICBDTUF1ZGlvQ2xvY2tDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgJnJhd0Nsb2Nr
UHRyKTsKKyNlbHNlCiAgICAgQ01BdWRpb0RldmljZUNsb2NrQ3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIE5VTEwsICZyYXdDbG9ja1B0cik7CisjZW5kaWYKICAgICBSZXRhaW5QdHI8Q01DbG9j
a1JlZj4gY2xvY2sgPSBhZG9wdENGKHJhd0Nsb2NrUHRyKTsKICAgICBpbml0aWFsaXplV2l0aFRp
bWluZ1NvdXJjZShjbG9jay5nZXQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
b2Z0TGlua2luZy5oCmluZGV4IGU5NDZiM2Q5ZGU1MzlkZmZjYjM4ZTM5NThlYjgwYWJlNTlmZTEx
NjguLjI1N2Q4M2QwNzE4ZGMyYjU4MWU0MGUzZTI0ZDZlNjVlYzAwZDI2NjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oCkBAIC0yOSw2ICsyOSwxMCBAQAogI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgPGRsZmNuLmg+CiAKKyNpZiBQTEFURk9S
TShJT1MpCisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNlbmRpZgorCiAjZGVmaW5lIFNPRlRf
TElOS19MSUJSQVJZKGxpYikgXAogICAgIHN0YXRpYyB2b2lkKiBsaWIjI0xpYnJhcnkoKSBcCiAg
ICAgeyBcCkBAIC02Miw2ICs2NiwxNSBAQAogICAgICAgICByZXR1cm4gZnJhbWV3b3JrTGlicmFy
eTsgXAogICAgIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyNkZWZpbmUgU09GVF9MSU5LX1BSSVZB
VEVfRlJBTUVXT1JLX09QVElPTkFMKGZyYW1ld29yaykgXAorICAgIHN0YXRpYyB2b2lkKiBmcmFt
ZXdvcmsjI0xpYnJhcnkoKSBcCisgICAgeyBcCisgICAgICAgIHN0YXRpYyB2b2lkKiBmcmFtZXdv
cmtMaWJyYXJ5ID0gZGxvcGVuKCIvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvIiAj
ZnJhbWV3b3JrICIuZnJhbWV3b3JrLyIgI2ZyYW1ld29yaywgUlRMRF9OT1cpOyBcCisgICAgICAg
IHJldHVybiBmcmFtZXdvcmtMaWJyYXJ5OyBcCisgICAgfQorI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKKwogI2RlZmluZSBTT0ZUX0xJTktfU1RBR0VEX0ZSQU1FV09SSyhmcmFtZXdvcmssIHVuc3Rh
Z2VkTG9jYXRpb24sIHZlcnNpb24pIFwKICAgICBzdGF0aWMgdm9pZCogZnJhbWV3b3JrIyNMaWJy
YXJ5KCkgXAogICAgIHsgXApAQCAtOTksNiArMTEyLDMwIEBACiAgICAgICAgIHJldHVybiBzb2Z0
TGluayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlck5hbWVzOyBcCiAgICAgfQogCisjaWYgUExBVEZP
Uk0oSU9TKQorI2RlZmluZSBTT0ZUX0xJTktfTUFZX0ZBSUwoZnJhbWV3b3JrLCBmdW5jdGlvbk5h
bWUsIHJlc3VsdFR5cGUsIHBhcmFtZXRlckRlY2xhcmF0aW9ucywgcGFyYW1ldGVyTmFtZXMpIFwK
KyAgICBzdGF0aWMgcmVzdWx0VHlwZSAoKnNvZnRMaW5rIyNmdW5jdGlvbk5hbWUpIHBhcmFtZXRl
ckRlY2xhcmF0aW9ucyA9IDA7IFwKKyAgICBcCisgICAgc3RhdGljIGJvb2wgaW5pdCMjZnVuY3Rp
b25OYW1lKCkgXAorICAgIHsgXAorICAgICAgICBBU1NFUlQoIXNvZnRMaW5rIyNmdW5jdGlvbk5h
bWUpOyBcCisgICAgICAgIHNvZnRMaW5rIyNmdW5jdGlvbk5hbWUgPSAocmVzdWx0VHlwZSAoKikg
cGFyYW1ldGVyRGVjbGFyYXRpb25zKSBkbHN5bShmcmFtZXdvcmsjI0xpYnJhcnkoKSwgI2Z1bmN0
aW9uTmFtZSk7IFwKKyAgICAgICAgcmV0dXJuICEhc29mdExpbmsjI2Z1bmN0aW9uTmFtZTsgXAor
ICAgIH0gXAorICAgIFwKKyAgICBzdGF0aWMgYm9vbCBjYW5Mb2FkIyNmdW5jdGlvbk5hbWUoKSBc
CisgICAgeyBcCisgICAgICAgIHN0YXRpYyBib29sIGxvYWRlZCA9IGluaXQjI2Z1bmN0aW9uTmFt
ZSgpOyBcCisgICAgICAgIHJldHVybiBsb2FkZWQ7IFwKKyAgICB9IFwKKyAgICBcCisgICAgcmVz
dWx0VHlwZSBmdW5jdGlvbk5hbWUgcGFyYW1ldGVyRGVjbGFyYXRpb25zIFwKKyAgICB7IFwKKyAg
ICAgICAgQVNTRVJUKHNvZnRMaW5rIyNmdW5jdGlvbk5hbWUpOyBcCisgICAgICAgIHJldHVybiBz
b2Z0TGluayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlck5hbWVzOyBcCisgICAgfQorI2VuZGlmCisK
IC8qIGNhbGxpbmdDb252ZW50aW9uIGlzIHVudXNlZCBvbiBNYWMgYnV0IGlzIGhlcmUgdG8ga2Vl
cCB0aGUgbWFjcm8gcHJvdG90eXBlIHRoZSBzYW1lIGJldHdlZW4gTWFjIGFuZCBXaW5kb3dzLiAq
LwogI2RlZmluZSBTT0ZUX0xJTktfT1BUSU9OQUwoZnJhbWV3b3JrLCBmdW5jdGlvbk5hbWUsIHJl
c3VsdFR5cGUsIGNhbGxpbmdDb252ZW50aW9uLCBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMpIFwKICAg
ICB0eXBlZGVmIHJlc3VsdFR5cGUgKCpmdW5jdGlvbk5hbWUjI1B0clR5cGUpIHBhcmFtZXRlckRl
Y2xhcmF0aW9uczsgXApAQCAtMjAyLDMgKzIzOSwzMiBAQAogICAgICAgICBnZXQjI25hbWUgPSBu
YW1lIyNGdW5jdGlvbjsgXAogICAgICAgICByZXR1cm4gY29uc3RhbnQjI25hbWU7IFwKICAgICB9
CisKKyNpZiBQTEFURk9STShJT1MpCisjZGVmaW5lIFNPRlRfTElOS19DT05TVEFOVF9NQVlfRkFJ
TChmcmFtZXdvcmssIG5hbWUsIHR5cGUpIFwKKyAgICBzdGF0aWMgYm9vbCBpbml0IyNuYW1lKCk7
IFwKKyAgICBzdGF0aWMgdHlwZSAoKmdldCMjbmFtZSkoKSA9IDA7IFwKKyAgICBzdGF0aWMgdHlw
ZSBjb25zdGFudCMjbmFtZTsgXAorICAgIFwKKyAgICBzdGF0aWMgdHlwZSBuYW1lIyNGdW5jdGlv
bigpIFwKKyAgICB7IFwKKyAgICAgICAgcmV0dXJuIGNvbnN0YW50IyNuYW1lOyBcCisgICAgfVwK
KyAgICBcCisgICAgc3RhdGljIGJvb2wgY2FuTG9hZCMjbmFtZSgpIFwKKyAgICB7IFwKKyAgICAg
ICAgc3RhdGljIGJvb2wgbG9hZGVkID0gaW5pdCMjbmFtZSgpOyBcCisgICAgICAgIHJldHVybiBs
b2FkZWQ7IFwKKyAgICB9IFwKKyAgICBcCisgICAgc3RhdGljIGJvb2wgaW5pdCMjbmFtZSgpIFwK
KyAgICB7IFwKKyAgICAgICAgQVNTRVJUKCFnZXQjI25hbWUpOyBcCisgICAgICAgIHZvaWQqIGNv
bnN0YW50ID0gZGxzeW0oZnJhbWV3b3JrIyNMaWJyYXJ5KCksICNuYW1lKTsgXAorICAgICAgICBp
ZiAoIWNvbnN0YW50KSBcCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKKyAgICAgICAgY29u
c3RhbnQjI25hbWUgPSAqc3RhdGljX2Nhc3Q8dHlwZSo+KGNvbnN0YW50KTsgXAorICAgICAgICBn
ZXQjI25hbWUgPSBuYW1lIyNGdW5jdGlvbjsgXAorICAgICAgICByZXR1cm4gdHJ1ZTsgXAorICAg
IH0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1N5c3Rl
bVZlcnNpb25NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU3lzdGVtVmVyc2lv
bk1hYy5tbQppbmRleCBiY2MxMWJhOWI1ODk5M2ZkNTg4YTExYzk5OTA1NWM5Zjc2YzMyZmNkLi5l
Y2Q1NWUyMjM3Yzk5MDExOTY1MjhkNDAzOTVhYzcyYmIxYWFlYWJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU3lzdGVtVmVyc2lvbk1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU3lzdGVtVmVyc2lvbk1hYy5tbQpAQCAtMjcsNiArMjcsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAogCiBzdGF0aWMgTlNTdHJpbmcgKmNy
ZWF0ZVN5c3RlbU1hcmtldGluZ1ZlcnNpb24oKQpAQCAtNjQsMTEgKzY1LDE1IEBAIHN0YXRpYyBO
U1N0cmluZyAqY3JlYXRlU3lzdGVtTWFya2V0aW5nVmVyc2lvbigpCiAKICNlbmRpZiAvLyBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKIAotCiBOU1N0cmluZyAqc3lzdGVt
TWFya2V0aW5nVmVyc2lvbigpCiB7CiAgICAgc3RhdGljIE5TU3RyaW5nICp2ZXJzaW9uID0gY3Jl
YXRlU3lzdGVtTWFya2V0aW5nVmVyc2lvbigpOwogICAgIHJldHVybiB2ZXJzaW9uOwogfQorI2Vs
c2UKKworfQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhv
bGRlclZpZXcuaAppbmRleCA3YjI0M2IwYTJmMjRjMjA1NzM3YWEzOTc4ZDFhOGM2YWU0ZGM0NGMz
Li44N2U2OTlhY2VjMGE2ODA4N2VlOWRlZmZkYTQwNDA4NTA4ZmMyMzFhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZp
ZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5Q
bGFjZWhvbGRlclZpZXcuaApAQCAtMjMsNiArMjMsOCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaWZuZGVmIFdlYkNv
cmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3X2gKICNkZWZpbmUgV2ViQ29yZUZ1bGxTY3JlZW5Q
bGFjZWhvbGRlclZpZXdfaAogCkBAIC00MCwzICs0Miw1IEBACiBAZW5kCiAKICNlbmRpZiAvLyBX
ZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlld19oCisKKyNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxs
U2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tCmluZGV4IGE5NmRiMGU2YjFkMWRmYTMw
NzNjY2YzMjRhOTNiZjQ2MjhhNmYxYTMuLjEzZjU2M2U5MjgxZTdhN2MyZTc1YzY2MzZhM2M5ZjE1
NTliZmY5Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
RnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0KQEAgLTI0LDYgKzI0LDgg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgIVBMQVRGT1JNKElPUykKKwogI2lu
Y2x1ZGUgIldlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmgiCiAKICNpbmNsdWRlICJM
b2NhbGl6ZWRTdHJpbmdzLmgiCkBAIC05MywzICs5NSw1IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogfQogCiBAZW5kCisKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdW
aWV3LmgKaW5kZXggZjZlYTlhZDc4NGVhZTJkZTA5NWQxZTMwZWRkN2MwYzU0ZmE2Y2NjZC4uZTJh
MzdmYjQyNDA4MTJiMThkZDA4ZjIzYzNiYjgxMjcyY2NhNjE2ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmll
dy5oCkBAIC0yMyw2ICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAorI2lmICFQTEFURk9STShJT1MpCisKICNpZm5kZWYgV2ViQ29yZUZ1bGxTY3JlZW5X
YXJuaW5nVmlld19oCiAjZGVmaW5lIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXdfaAogCkBA
IC0zOSwzICs0MSw1IEBACiAjZW5kaWYKIAogI2VuZGlmIC8vIFdlYkNvcmVGdWxsU2NyZWVuV2Fy
bmluZ1ZpZXdfaAorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcu
bW0KaW5kZXggYzRlMWZhMzI5MGFkNDQwNGQ2MmYyZTExNGIwYWRmYTE2YWUxOTJjMy4uMzQ5NGI4
OGFjOWU0MTZiZmQ1YjlhOTA4NzIyNzA1ZTRmNjk3MTg3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcu
bW0KQEAgLTI0LDYgKzI0LDggQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgIVBM
QVRGT1JNKElPUykKKwogI2luY2x1ZGUgIldlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcuaCIK
IAogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKQEAgLTEwMywzICsxMDUsNSBAQCBzdGF0
aWMgY29uc3QgQ0dGbG9hdCBXYXJuaW5nVmlld1NoYWRvd1JhZGl1cyA9IDU7CiAgICAgcmV0dXJu
IHNlbGY7CiB9CiBAZW5kCisKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cuaAppbmRl
eCBkZTYzNjVhOTQxODIxNDQ0NGM3MTgxYjVlMGNkZGVkZTU5NjE4YWMwLi42MDFlMzQ4ZjAwNDRj
MDIzZGU1MWEwMTg1YWUyYjg1YTViMGI3OWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cuaApAQCAtMjYsNyArMjYsNyBA
QAogI2lmbmRlZiBXZWJDb3JlRnVsbFNjcmVlbldpbmRvd19oCiAjZGVmaW5lIFdlYkNvcmVGdWxs
U2NyZWVuV2luZG93X2gKIAotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpICYmICFQTEFURk9STShJT1MpCiAKIEBpbnRlcmZhY2UgV2ViQ29yZUZ1
bGxTY3JlZW5XaW5kb3cgOiBOU1dpbmRvdwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93Lm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93Lm1tCmluZGV4IDUyMDI5MmNm
YWJlYjAxMWFlODJkY2NmMTI2OGYwMmNiZDU4NDk5YjEuLjUzMDJjZGEyZWExZTQ2NzVhOTc3MjE3
OTVkZGZjZDEyMTJiZjYyMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cubW0KQEAgLTI1LDcgKzI1LDcgQEAKIAogI2lt
cG9ydCAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKSAmJiAhUExBVEZPUk0oSU9TKQogCiAjaW1wb3J0ICJXZWJDb3JlRnVs
bFNjcmVlbldpbmRvdy5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2ViQ29yZU5TQ2VsbEV4dHJhcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YkNvcmVOU0NlbGxFeHRyYXMuaAppbmRleCA0N2VkZmY4NjFhZWI0YmE4ZGYyOThhMDhlOGM4NDA4
N2RhMzBkNDYwLi45ZmY3NDYyYjA3NjZjMjVhZDFhODUwM2Y5MzYzMmU4NjU5ZjE3YjEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TQ2VsbEV4dHJhcy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFzLmgK
QEAgLTIzLDggKzIzLDEyIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAorI2lmICFQTEFURk9STShJT1MpCiAjaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+CiAKIEBp
bnRlcmZhY2UgTlNDZWxsIChXZWJDb3JlRm9jdXNSaW5nRHJhd2luZykKIC0gKHZvaWQpX3dlYl9k
cmF3Rm9jdXNSaW5nV2l0aEZyYW1lOihOU1JlY3QpY2VsbEZyYW1lIGluVmlldzooTlNWaWV3ICop
Y29udHJvbFZpZXc7CiBAZW5kCisKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TQ2VsbEV4dHJhcy5tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU0NlbGxFeHRyYXMubQppbmRleCBh
NTY4OTMxNzRiMzc2ZDc2OWU1YThkNzU3YjYzMGUzNDA1ZGMwZDMyLi4wZDViMGU3MTVjYzNhNDM0
ZWM1ZjRiZTk5MThjMzU5ZmMwYTBhMzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViQ29yZU5TQ2VsbEV4dHJhcy5tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFzLm0KQEAgLTI2LDYgKzI2LDggQEAKICNpbXBvcnQg
ImNvbmZpZy5oIgogI2ltcG9ydCAiV2ViQ29yZU5TQ2VsbEV4dHJhcy5oIgogCisjaWYgIVBMQVRG
T1JNKElPUykKKwogQGltcGxlbWVudGF0aW9uIE5TQ2VsbCAoV2ViQ29yZUZvY3VzUmluZ0RyYXdp
bmcpCiAKIC0gKHZvaWQpX3dlYl9kcmF3Rm9jdXNSaW5nV2l0aEZyYW1lOihOU1JlY3QpY2VsbEZy
YW1lIGluVmlldzooTlNWaWV3ICopY29udHJvbFZpZXcKQEAgLTQwLDMgKzQyLDYgQEAgLSAodm9p
ZClfd2ViX2RyYXdGb2N1c1JpbmdXaXRoRnJhbWU6KE5TUmVjdCljZWxsRnJhbWUgaW5WaWV3OihO
U1ZpZXcgKiljb250cm9sVmkKIH0KIAogQGVuZAorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLmgKaW5kZXggNGI0MjcwOTBjNGYyNmJmZDQ1NGUzNWVmY2QyMTNmYWJjYTNiZjcxOS4u
NTMzMTI4OTczNTkzZmE0NTZkNjQxNjQ0ZTMxZmRjZGMyZmIwNmE5OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oCkBAIC0y
OCw2ICsyOCwxMCBAQAogCiAjaW5jbHVkZSA8b2JqYy9vYmpjLmg+CiAKKyNpZiBQTEFURk9STShJ
T1MpCisjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5oIgorI2VuZGlmCisKIHR5
cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZTdHJpbmcgKiBDRlN0cmluZ1JlZjsKIHR5cGVkZWYgY29u
c3Qgc3RydWN0IF9fQ0ZOdW1iZXIgKiBDRk51bWJlclJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0
IF9fQ0ZEaWN0aW9uYXJ5ICogQ0ZEaWN0aW9uYXJ5UmVmOwpAQCAtNTMsMTYgKzU3LDIxIEBAIHR5
cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RMaW5lICogQ1RMaW5lUmVmOwogdHlwZWRlZiBjb25zdCBz
dHJ1Y3QgX19DVFJ1biAqIENUUnVuUmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVFR5cGVz
ZXR0ZXIgKiBDVFR5cGVzZXR0ZXJSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0FYVUlFbGVt
ZW50ICpBWFVJRWxlbWVudFJlZjsKKyNpZiAhUExBVEZPUk0oSU9TKQogdHlwZWRlZiBzdHJ1Y3Qg
X05TUmFuZ2UgTlNSYW5nZTsKIAogdHlwZWRlZiBVSW50MzIgRk1Gb250OwogdHlwZWRlZiBGTUZv
bnQgQVRTVUZvbnRJRDsKIHR5cGVkZWYgVUludDE2IEFUU0dseXBoUmVmOworI2VuZGlmCiAKICNp
ZiBQTEFURk9STShNQUMpICYmIFVTRShDQSkKKyNpZiAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikK
IHR5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlICpJT1N1cmZhY2VSZWY7CisjZW5kaWYgLy8gIVBM
QVRGT1JNKElPU19TSU1VTEFUT1IpCiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiAjaWZk
ZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5cGVkZWYgc3Ry
dWN0IENHUG9pbnQgTlNQb2ludDsKIHR5cGVkZWYgc3RydWN0IENHUmVjdCBOU1JlY3Q7CkBAIC03
MCw2ICs3OSwxMSBAQCB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0OwogdHlwZWRlZiBzdHJ1
Y3QgX05TUG9pbnQgTlNQb2ludDsKIHR5cGVkZWYgc3RydWN0IF9OU1JlY3QgTlNSZWN0OwogI2Vu
ZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKworI2lmIFBMQVRGT1JNKElPUykKKyNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKIAogI2lmIFVTRShDRk5F
VFdPUkspCiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVDRkhUVFBDb29raWVTdG9yYWdlKiAgQ0ZIVFRQ
Q29va2llU3RvcmFnZVJlZjsKQEAgLTExOSw3ICsxMzMsNyBAQCB0eXBlZGVmIGVudW0gewogICAg
IHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZwogfSB3a1BhdHRlcm5UaWxpbmc7CiBleHRl
cm4gdm9pZCAoKndrQ0dDb250ZXh0UmVzZXRDbGlwKShDR0NvbnRleHRSZWYpOwotI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAorI2lmICFQTEFURk9STShJT1MpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAogZXh0ZXJuIGJvb2wgKCp3
a0NHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKShDR0NvbnRleHRSZWYpOwog
I2VuZGlmCiBleHRlcm4gQ0dQYXR0ZXJuUmVmICgqd2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VB
bmRUcmFuc2Zvcm0pKENHSW1hZ2VSZWYsIENHQWZmaW5lVHJhbnNmb3JtLCBpbnQpOwpAQCAtMTM1
LDYgKzE0OSw3IEBAIGV4dGVybiBDRlJlYWRTdHJlYW1SZWYgKCp3a0NyZWF0ZUN1c3RvbUNGUmVh
ZFN0cmVhbSkodm9pZCAqKCpmb3JtQ3JlYXRlKShDRlJlYWRTCiBleHRlcm4gQ0ZTdHJpbmdSZWYg
KCp3a0NvcHlDRkxvY2FsaXphdGlvblByZWZlcnJlZE5hbWUpKENGU3RyaW5nUmVmKTsKIGV4dGVy
biBOU1N0cmluZyogKCp3a0NvcHlOU1VSTFJlc3BvbnNlU3RhdHVzTGluZSkoTlNVUkxSZXNwb25z
ZSopOwogZXh0ZXJuIENGQXJyYXlSZWYgKCp3a0NvcHlOU1VSTFJlc3BvbnNlQ2VydGlmaWNhdGVD
aGFpbikoTlNVUkxSZXNwb25zZSopOworI2lmICFQTEFURk9STShJT1MpCiBleHRlcm4gdm9pZCAo
KndrRHJhd0JlemVsZWRUZXh0RmllbGRDZWxsKShOU1JlY3QsIEJPT0wgZW5hYmxlZCk7CiBleHRl
cm4gdm9pZCAoKndrRHJhd1RleHRGaWVsZENlbGxGb2N1c1JpbmcpKE5TVGV4dEZpZWxkQ2VsbCos
IE5TUmVjdCk7CiBleHRlcm4gdm9pZCAoKndrRHJhd0NhcHNMb2NrSW5kaWNhdG9yKShDR0NvbnRl
eHRSZWYsIENHUmVjdCk7CkBAIC0xNDMsMTYgKzE1OCwyMiBAQCBleHRlcm4gdm9pZCAoKndrRHJh
d0ZvY3VzUmluZykoQ0dDb250ZXh0UmVmLCBDR0NvbG9yUmVmLCBpbnQgcmFkaXVzKTsKIGV4dGVy
biBOU0ZvbnQqICgqd2tHZXRGb250SW5MYW5ndWFnZUZvclJhbmdlKShOU0ZvbnQqLCBOU1N0cmlu
ZyosIE5TUmFuZ2UpOwogZXh0ZXJuIE5TRm9udCogKCp3a0dldEZvbnRJbkxhbmd1YWdlRm9yQ2hh
cmFjdGVyKShOU0ZvbnQqLCBVbmlDaGFyKTsKIGV4dGVybiBCT09MICgqd2tHZXRHbHlwaFRyYW5z
Zm9ybWVkQWR2YW5jZXMpKENHRm9udFJlZiwgTlNGb250KiwgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBB
VFNHbHlwaFJlZiosIENHU2l6ZSogYWR2YW5jZSk7CisjZW5kaWYKKyNpZiAhUExBVEZPUk0oSU9T
KQogZXh0ZXJuIHZvaWQgKCp3a0RyYXdNZWRpYVNsaWRlclRyYWNrKShDR0NvbnRleHRSZWYgY29u
dGV4dCwgQ0dSZWN0IHJlY3QsIGZsb2F0IHRpbWVMb2FkZWQsIGZsb2F0IGN1cnJlbnRUaW1lLAog
ICAgIGZsb2F0IGR1cmF0aW9uLCB1bnNpZ25lZCBzdGF0ZSk7CiBleHRlcm4gdm9pZCAoKndrRHJh
d01lZGlhVUlQYXJ0KShpbnQgcGFydCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUmVjdCByZWN0
LCB1bnNpZ25lZCBzdGF0ZSk7CiBleHRlcm4gQ0ZTdHJpbmdSZWYgKCp3a1NpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZVN0cmluZykodW5zaWduZWQga2V5U2l6ZSwgQ0ZTdHJpbmdSZWYgY2hhbGxl
bmdlLCBDRlN0cmluZ1JlZiBrZXlEZXNjcmlwdGlvbik7CiBleHRlcm4gTlNTdHJpbmcqICgqd2tH
ZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSkoTlNTdHJpbmcqKTsKIGV4dGVybiBOU0Fy
cmF5KiAoKndrR2V0RXh0ZW5zaW9uc0Zvck1JTUVUeXBlKShOU1N0cmluZyopOworI2VuZGlmCiBl
eHRlcm4gTlNTdHJpbmcqICgqd2tHZXRNSU1FVHlwZUZvckV4dGVuc2lvbikoTlNTdHJpbmcqKTsK
KyNpZiAhUExBVEZPUk0oSU9TKQogZXh0ZXJuIEFUU1VGb250SUQgKCp3a0dldE5TRm9udEFUU1VG
b250SWQpKE5TRm9udCopOwogZXh0ZXJuIGRvdWJsZSAoKndrR2V0TlNVUkxSZXNwb25zZUNhbGN1
bGF0ZWRFeHBpcmF0aW9uKShOU1VSTFJlc3BvbnNlICpyZXNwb25zZSk7CisjZW5kaWYKIGV4dGVy
biBOU0RhdGUgKigqd2tHZXROU1VSTFJlc3BvbnNlTGFzdE1vZGlmaWVkRGF0ZSkoTlNVUkxSZXNw
b25zZSAqcmVzcG9uc2UpOworI2lmICFQTEFURk9STShJT1MpCiBleHRlcm4gQk9PTCAoKndrR2V0
TlNVUkxSZXNwb25zZU11c3RSZXZhbGlkYXRlKShOU1VSTFJlc3BvbnNlICpyZXNwb25zZSk7CiBl
eHRlcm4gdm9pZCAoKndrR2V0V2hlZWxFdmVudERlbHRhcykoTlNFdmVudCosIGZsb2F0KiBkZWx0
YVgsIGZsb2F0KiBkZWx0YVksIEJPT0wqIGNvbnRpbnVvdXMpOwogZXh0ZXJuIFVJbnQ4ICgqd2tH
ZXROU0V2ZW50S2V5Q2hhcikoTlNFdmVudCAqKTsKQEAgLTE5MSw3ICsyMTIsOSBAQCBleHRlcm4g
TlNBcnJheSAqKCp3a1FUR2V0U2l0ZXNJbk1lZGlhRG93bmxvYWRDYWNoZSkoKTsKIGV4dGVybiB2
b2lkICgqd2tRVENsZWFyTWVkaWFEb3dubG9hZENhY2hlRm9yU2l0ZSkoTlNTdHJpbmcgKnNpdGUp
OwogZXh0ZXJuIHZvaWQgKCp3a1FUQ2xlYXJNZWRpYURvd25sb2FkQ2FjaGUpKCk7CiBleHRlcm4g
dm9pZCAoKndrU2V0Q0dGb250UmVuZGVyaW5nTW9kZSkoQ0dDb250ZXh0UmVmLCBOU0ZvbnQqLCBC
T09MKTsKK2V4dGVybiB2b2lkICgqd2tTZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZCkoQk9PTCk7CiBleHRlcm4gdm9pZCAoKndrU2V0RHJhZ0ltYWdlKShOU0ltYWdlKiwgTlNQ
b2ludCBvZmZzZXQpOworI2VuZGlmCiBleHRlcm4gdm9pZCAoKndrU2V0TlNVUkxDb25uZWN0aW9u
RGVmZXJzQ2FsbGJhY2tzKShOU1VSTENvbm5lY3Rpb24gKiwgQk9PTCk7CiBleHRlcm4gdm9pZCAo
KndrU2V0TlNVUkxSZXF1ZXN0U2hvdWxkQ29udGVudFNuaWZmKShOU011dGFibGVVUkxSZXF1ZXN0
ICosIEJPT0wpOwogZXh0ZXJuIHZvaWQgKCp3a1NldEJhc2VDVE0pKENHQ29udGV4dFJlZiwgQ0dB
ZmZpbmVUcmFuc2Zvcm0pOwpAQCAtMjE2LDExICsyMzksMTMgQEAgZXh0ZXJuIGJvb2wgKCp3a0dl
dFZlcnRpY2FsR2x5cGhzRm9yQ2hhcmFjdGVycykoQ1RGb250UmVmLCBjb25zdCBVbmlDaGFyW10s
IENHR2wKIAogZXh0ZXJuIEJPT0wgKCp3a1VzZVNoYXJlZE1lZGlhVUkpKCk7CiAKKyNpZiAhUExB
VEZPUk0oSU9TKQogZXh0ZXJuIHZvaWQqIHdrR2V0SHlwaGVuYXRpb25Mb2NhdGlvbkJlZm9yZUlu
ZGV4OworI2VuZGlmCiAKIGV4dGVybiBDVExpbmVSZWYgKCp3a0NyZWF0ZUNUTGluZVdpdGhVbmlD
aGFyUHJvdmlkZXIpKGNvbnN0IFVuaUNoYXIqICgqcHJvdmlkZSkoQ0ZJbmRleCBzdHJpbmdJbmRl
eCwgQ0ZJbmRleCogY2hhckNvdW50LCBDRkRpY3Rpb25hcnlSZWYqIGF0dHJpYnV0ZXMsIHZvaWQq
KSwgdm9pZCAoKmRpc3Bvc2UpKGNvbnN0IFVuaUNoYXIqIGNoYXJzLCB2b2lkKiksIHZvaWQqKTsK
IAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmIFBMQVRG
T1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiBlbnVt
IHsKICAgICB3a0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyA9ICgxIDw8IDApLAogICAgIHdr
Q1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA9ICgxIDw8IDEpCkBAIC0yMzUsMTEgKzI2
MCwxMiBAQCBleHRlcm4gQ1RUeXBlc2V0dGVyUmVmICgqd2tDcmVhdGVDVFR5cGVzZXR0ZXJXaXRo
VW5pQ2hhclByb3ZpZGVyQW5kT3B0aW9ucykoY29ucwogCiBleHRlcm4gQ0dTaXplICgqd2tDVFJ1
bkdldEluaXRpYWxBZHZhbmNlKShDVFJ1blJlZik7CiAKLSNpZiBQTEFURk9STShNQUMpICYmIFVT
RShDQSkKKyNpZiBQTEFURk9STShNQUMpICYmIFVTRShDQSkgJiYgIVBMQVRGT1JNKElPU19TSU1V
TEFUT1IpCiBleHRlcm4gQ0dDb250ZXh0UmVmICgqd2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlKShJ
T1N1cmZhY2VSZWYgc3VyZmFjZSwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgQ0dD
b2xvclNwYWNlUmVmIGNvbG9yU3BhY2UpOwogZXh0ZXJuIENHSW1hZ2VSZWYgKCp3a0lPU3VyZmFj
ZUNvbnRleHRDcmVhdGVJbWFnZSkoQ0dDb250ZXh0UmVmIGNvbnRleHQpOwogI2VuZGlmCiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogZXh0ZXJuIGludCAoKndrUmVjb21tZW5kZWRTY3JvbGxlclN0eWxl
KSh2b2lkKTsKIAogZXh0ZXJuIGJvb2wgKCp3a0V4ZWN1dGFibGVXYXNMaW5rZWRPbk9yQmVmb3Jl
U25vd0xlb3BhcmQpKHZvaWQpOwpAQCAtMjUwLDcgKzI3Niw5IEBAIGV4dGVybiB2b2lkICgqd2tT
ZXRDcmFzaFJlcG9ydEFwcGxpY2F0aW9uU3BlY2lmaWNJbmZvcm1hdGlvbikoQ0ZTdHJpbmdSZWYp
OwogZXh0ZXJuIE5TVVJMICooKndrQVZBc3NldFJlc29sdmVkVVJMKShBVkFzc2V0Kik7CiAKIGV4
dGVybiBOU0N1cnNvciAqKCp3a0N1cnNvcikoY29uc3QgY2hhciopOworI2VuZGlmIC8vICFQTEFU
Rk9STShJT1MpCiAgICAgCisjaWYgIVBMQVRGT1JNKElPUykKICNpZiBQTEFURk9STShNQUMpCiBl
eHRlcm4gTlNBcnJheSAqKCp3a1NwZWVjaFN5bnRoZXNpc0dldFZvaWNlSWRlbnRpZmllcnMpKHZv
aWQpOwogZXh0ZXJuIE5TU3RyaW5nICooKndrU3BlZWNoU3ludGhlc2lzR2V0RGVmYXVsdFZvaWNl
SWRlbnRpZmllckZvckxvY2FsZSkoTlNMb2NhbGUgKik7CkBAIC0yNjYsNiArMjk0LDEzIEBAIGV4
dGVybiBDRlR5cGVSZWYgKCp3a0NvcHlBWFRleHRNYXJrZXJSYW5nZUVuZCkoQ0ZUeXBlUmVmIHJh
bmdlKTsKIGV4dGVybiBDRlR5cGVSZWYgKCp3a0NyZWF0ZUFYVGV4dE1hcmtlcikoY29uc3Qgdm9p
ZCAqYnl0ZXMsIHNpemVfdCBsZW4pOwogZXh0ZXJuIEJPT0wgKCp3a0dldEJ5dGVzRnJvbUFYVGV4
dE1hcmtlcikoQ0ZUeXBlUmVmIHRleHRNYXJrZXIsIHZvaWQgKmJ5dGVzLCBzaXplX3QgbGVuZ3Ro
KTsKIGV4dGVybiBBWFVJRWxlbWVudFJlZiAoKndrQ3JlYXRlQVhVSUVsZW1lbnRSZWYpKGlkIGVs
ZW1lbnQpOworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyNpZiBQTEFURk9STShJT1MpCitl
eHRlcm4gQ0dTaXplICgqd2tHZXRWaWV3cG9ydFNjcmVlblNpemUpKHZvaWQpOworZXh0ZXJuIHZv
aWQgKCp3a1NldExheWVyQ29udGVudHNTY2FsZSkoQ0FMYXllciAqKTsKK2V4dGVybiBmbG9hdCAo
KndrR2V0U2NyZWVuU2NhbGVGYWN0b3IpKHZvaWQpOworI2VuZGlmCiAKIHR5cGVkZWYgY29uc3Qg
c3RydWN0IF9fQ0ZVUkxTdG9yYWdlU2Vzc2lvbiogQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZjsKIGV4
dGVybiBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmICgqd2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Np
b24pKENGU3RyaW5nUmVmKTsKQEAgLTI5NywxNyArMzMyLDIxIEBAIGV4dGVybiBDRkFycmF5UmVm
ICgqd2tDRlVSTFJlcXVlc3RDb3B5SFRUUFJlcXVlc3RCb2R5UGFydHMpKENGVVJMUmVxdWVzdFJl
Zik7CiBleHRlcm4gdm9pZCAoKndrQ0ZVUkxSZXF1ZXN0U2V0SFRUUFJlcXVlc3RCb2R5UGFydHMp
KENGTXV0YWJsZVVSTFJlcXVlc3RSZWYsIENGQXJyYXlSZWYgYm9keVBhcnRzKTsKIGV4dGVybiB2
b2lkICgqd2tTZXRSZXF1ZXN0U3RvcmFnZVNlc3Npb24pKENGVVJMU3RvcmFnZVNlc3Npb25SZWYs
IENGTXV0YWJsZVVSTFJlcXVlc3RSZWYpOwogI2VuZGlmCisjaWYgIVBMQVRGT1JNKElPUykKIGV4
dGVybiB2b2lkICgqd2tTZXRNZXRhZGF0YVVSTCkoTlNTdHJpbmcgKnVybFN0cmluZywgTlNTdHJp
bmcgKnJlZmVycmVyLCBOU1N0cmluZyAqcGF0aCk7CisjZW5kaWYKIAorI2lmICFQTEFURk9STShJ
T1MpCiAjaW1wb3J0IDxkaXNwYXRjaC9kaXNwYXRjaC5oPgogCiBleHRlcm4gZGlzcGF0Y2hfc291
cmNlX3QgKCp3a0NyZWF0ZVZNUHJlc3N1cmVEaXNwYXRjaE9uTWFpblF1ZXVlKSh2b2lkKTsKKyNl
bmRpZgogCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYg
IVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkw
CiBleHRlcm4gZGlzcGF0Y2hfc291cmNlX3QgKCp3a0NyZWF0ZU1lbW9yeVN0YXR1c1ByZXNzdXJl
Q3JpdGljYWxEaXNwYXRjaE9uTWFpblF1ZXVlKSh2b2lkKTsKICNlbmRpZgogICAgIAotI2lmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAorI2lmICFQTEFURk9STShJT1Mp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAogZXh0ZXJuIGJvb2wg
KCp3a0V4ZWN1dGFibGVXYXNMaW5rZWRPbk9yQmVmb3JlTGlvbikodm9pZCk7CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkZvbnRDYWNoZS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJGb250Q2FjaGUubW0KaW5kZXggZTQwNzUz
ZTU5NDNiM2NhMTczMDc1NTRlMjFkMTgyNzczODgyZmRlMy4uOGM4MjYwYjAyYjJiMDk4YjllZGRl
YmUwYWViMTM1MmMxZjRlZTA5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYkZvbnRDYWNoZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
Rm9udENhY2hlLm1tCkBAIC0yODcsMTIgKzI4NywxMCBAQCBzdGF0aWMgaW5saW5lIEZvbnRUcmFp
dHNNYXNrIHRvVHJhaXRzTWFzayhOU0ZvbnRUcmFpdE1hc2sgYXBwS2l0VHJhaXRzLCBOU0ludGVn
ZQogICAgIHJldHVybiBbc2VsZiBpbnRlcm5hbEZvbnRXaXRoRmFtaWx5OmRlc2lyZWRGYW1pbHkg
dHJhaXRzOmRlc2lyZWRUcmFpdHMgd2VpZ2h0OmRlc2lyZWRXZWlnaHQgc2l6ZTpzaXplXTsKIH0K
IAotI2lmICFQTEFURk9STShJT1MpCiArIChOU0ZvbnQgKilmb250V2l0aEZhbWlseTooTlNTdHJp
bmcgKilkZXNpcmVkRmFtaWx5IHRyYWl0czooTlNGb250VHJhaXRNYXNrKWRlc2lyZWRUcmFpdHMg
c2l6ZTooZmxvYXQpc2l6ZQogewogICAgIGludCBkZXNpcmVkV2VpZ2h0ID0gKGRlc2lyZWRUcmFp
dHMgJiBOU0JvbGRGb250TWFzaykgPyA5IDogNTsKICAgICByZXR1cm4gW3NlbGYgZm9udFdpdGhG
YW1pbHk6ZGVzaXJlZEZhbWlseSB0cmFpdHM6ZGVzaXJlZFRyYWl0cyB3ZWlnaHQ6ZGVzaXJlZFdl
aWdodCBzaXplOnNpemVdOwogfQotI2VuZGlmCiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmNwcAppbmRleCA1YWIwNDJmMzU3NTMyNDhh
NGYyNjNmNjAxNGViYmY1OTZjNjQ0MzExLi40YTYxZGY0Yzk4ODVkYTdjMGFjYzg2NGIwNTY5Mzcx
YTI5NTdiNzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVnaXN0cnkuY3BwCkBAIC0zMyw2ICszMywxMCBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRl
Z2llcy5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKKyNpZiBQTEFURk9STShJT1Mp
CisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogQmxvYlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKaW5kZXggNmJiNWNhZTVi
YWI0YmIwNzJmNjU2YTk4M2JkZWIwNDBhNjg4NDkyMy4uMjMxYWY3OGFhYzNiYWUyMzU2MGUzOWJh
YTFiMDdjODk2MzBhNDRhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCisjaWYg
UExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIEJsb2JSZWdpc3RyeUltcGw6On5CbG9iUmVnaXN0cnlJbXBsKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsLmgKaW5kZXggMWE1
YTQ3ZTUyOWY3NjM4YzkxNTNjOGZjNzJjMTgzYzNhNWNhNGM0NC4uMjE2NmI5YmZhOTczNTYwNTIy
YzgyZTY2MzUwNzk5ZWViNTg5MWUyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9DcmVkZW50aWFsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9DcmVkZW50aWFsLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCi0jZGVmaW5lIENFUlRJRklDQVRFX0NSRURFTlRJQUxTX1NVUFBPUlRF
RCBQTEFURk9STShNQUMpCisjZGVmaW5lIENFUlRJRklDQVRFX0NSRURFTlRJQUxTX1NVUFBPUlRF
RCAoUExBVEZPUk0oSU9TKSB8fCBQTEFURk9STShNQUMpKQogCiAjaWYgQ0VSVElGSUNBVEVfQ1JF
REVOVElBTFNfU1VQUE9SVEVECiAjaW5jbHVkZSA8U2VjdXJpdHkvU2VjQmFzZS5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNw
cAppbmRleCA5NTk1NzI0ODdlOTk5MzkxZmU1YzBhM2E3M2Q3ZGY1NWYyNmM4OWVlLi5kODZmZDgx
YzRjMDZiMTdhMzZiMzdiZWY2M2M2YzliYTEyNDI4ODE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcApAQCAtMzYsNiAr
MzYsMTAgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFk
LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIEhhc2hNYXA8UHJv
dGVjdGlvblNwYWNlLCBDcmVkZW50aWFsPiBQcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXA7
CkBAIC05Myw2ICs5NywxMSBAQCB2b2lkIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY29uc3QgQ3Jl
ZGVudGlhbCYgY3JlZGVudGlhbCwgY29uc3QgUHJvdGVjdGlvblNwYWNlJgogICAgIEFTU0VSVChw
cm90ZWN0aW9uU3BhY2UuaXNQcm94eSgpIHx8IHVybC5pc1ZhbGlkKCkpOwogCiAgICAgcHJvdGVj
dGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuc2V0KHByb3RlY3Rpb25TcGFjZSwgY3JlZGVudGlh
bCk7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgc2F2ZVRvUGVyc2lzdGVudFN0b3JhZ2UocHJv
dGVjdGlvblNwYWNlLCBjcmVkZW50aWFsKTsKKyNlbmRpZgorCiAgICAgaWYgKCFwcm90ZWN0aW9u
U3BhY2UuaXNQcm94eSgpKSB7CiAgICAgICAgIG9yaWdpbnNXaXRoQ3JlZGVudGlhbHMoKS5hZGQo
b3JpZ2luU3RyaW5nRnJvbVVSTCh1cmwpKTsKIApAQCAtMTYzLDYgKzE3MiwxNSBAQCBDcmVkZW50
aWFsIENyZWRlbnRpYWxTdG9yYWdlOjpnZXQoY29uc3QgVVJMJiB1cmwpCiAgICAgcmV0dXJuIHBy
b3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLmdldChpdGVyLT52YWx1ZSk7CiB9CiAKKyNp
ZiBQTEFURk9STShJT1MpCit2b2lkIENyZWRlbnRpYWxTdG9yYWdlOjpjbGVhckNyZWRlbnRpYWxz
KCkKK3sKKyAgICBwYXRoVG9EZWZhdWx0UHJvdGVjdGlvblNwYWNlTWFwKCkuY2xlYXIoKTsKKyAg
ICBvcmlnaW5zV2l0aENyZWRlbnRpYWxzKCkuY2xlYXIoKTsKKyAgICBwcm90ZWN0aW9uU3BhY2VU
b0NyZWRlbnRpYWxNYXAoKS5jbGVhcigpOworfQorI2VuZGlmCisKIHZvaWQgQ3JlZGVudGlhbFN0
b3JhZ2U6OnNldFByaXZhdGVNb2RlKGJvb2wgbW9kZSkKIHsKICAgICBpZiAoIW1vZGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmgK
aW5kZXggYjNiZDFmZDc4MzkyYTI2N2UzMDlmZmNjY2Y0N2EyMWFlMDZlODk5ZS4uM2M4Yzc0ODc1
MjAyMDU5ZjE3MWQxZDI0YWJjYWQzZmM5NWQ4NTU0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuaApAQCAtNDIsNiArNDIsMTEg
QEAgcHVibGljOgogICAgIC8vIE9TIHBlcnNpc3RlbnQgc3RvcmFnZS4KICAgICBzdGF0aWMgQ3Jl
ZGVudGlhbCBnZXRGcm9tUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJik7
CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhdGljIHZvaWQgc2F2ZVRvUGVyc2lzdGVudFN0
b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgY29uc3QgQ3JlZGVudGlhbCYpOworICAgIHN0
YXRpYyB2b2lkIGNsZWFyQ3JlZGVudGlhbHMoKTsKKyNlbmRpZgorCiAgICAgLy8gVGhlc2UgbWV0
aG9kcyB3b3JrIGZvciBhdXRoZW50aWNhdGlvbiBzY2hlbWVzIHRoYXQgc3VwcG9ydCBzZW5kaW5n
IGNyZWRlbnRpYWxzIHdpdGhvdXQgd2FpdGluZyBmb3IgYSByZXF1ZXN0LiBFLmcuLCBmb3IgSFRU
UCBCYXNpYyBhdXRoZW50aWNhdGlvbiBzY2hlbWUKICAgICAvLyBhIGNsaWVudCBzaG91bGQgYXNz
dW1lIHRoYXQgYWxsIHBhdGhzIGF0IG9yIGRlZXBlciB0aGFuIHRoZSBkZXB0aCBvZiBhIGtub3du
IHByb3RlY3RlZCByZXNvdXJjZSBzaGFyZSBhcmUgd2l0aGluIHRoZSBzYW1lIHByb3RlY3Rpb24g
c3BhY2UuCiAgICAgc3RhdGljIGJvb2wgc2V0KGNvbnN0IENyZWRlbnRpYWwmLCBjb25zdCBVUkwm
KTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBVUkwgY29ycmVzcG9uZHMgdG8gYSBrbm93biBwcm90
ZWN0aW9uIHNwYWNlLCBzbyBjcmVkZW50aWFscyBjb3VsZCBiZSB1cGRhdGVkLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5o
CmluZGV4IDMzMjQ3Yzk3ZmM5MDI5MWUxNjVjMDQ1YTM2YTZmNjMxYWFiZjM5YTkuLmY5ZjYxZDVj
ZTMzMWM4YWU0NjkyMDEwNDZkZGMxODA3MmRkYTQ5MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmgKQEAgLTMwLDcg
KzMwLDcgQEAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZP
Uk0oSU9TKQogCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgIlRpbWVyLmgi
CkBAIC02Miw2ICs2MiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGROZXR3b3JrU3RhdGVDaGFu
Z2VMaXN0ZW5lcihOZXR3b3JrU3RhdGVDaGFuZ2VMaXN0ZW5lcik7CiAKICAgICBib29sIG9uTGlu
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNPbkxpbmU7IH0KKyAgICAKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgdm9pZCBzZXRJc09uTGluZShib29sKTsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oQkxB
Q0tCRVJSWSkKICAgICB2b2lkIG5ldHdvcmtTdGF0ZUNoYW5nZShib29sIG9ubGluZSk7CkBAIC03
NCw3ICs3OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBub3RpZnlOZXR3b3JrU3RhdGVDaGFuZ2Uo
KTsKICAgICB2b2lkIHVwZGF0ZVN0YXRlKCk7CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExB
VEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogICAgIHZvaWQgbmV0d29ya1N0YXRlQ2hhbmdl
VGltZXJGaXJlZChUaW1lcjxOZXR3b3JrU3RhdGVOb3RpZmllcj4qKTsKIAogICAgIHN0YXRpYyB2
b2lkIGR5bmFtaWNTdG9yZUNhbGxiYWNrKFNDRHluYW1pY1N0b3JlUmVmLCBDRkFycmF5UmVmIGNo
YW5nZWRLZXlzLCB2b2lkICppbmZvKTsgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCmluZGV4IDBjODUyZGMyZGM2YzUwY2FhNmJiNWZj
YTdhMmUwNTlhMjE3YjNkM2EuLjkzZTBmOWE0Y2IwYzMwODEyZmM5MDIzMmYyZjI4YmQxNDZmZTk3
ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGUuY3BwCkBAIC0zNSw2ICszNSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBzdGF0aWMgYm9vbCBzaG91bGRGb3JjZUNvbnRlbnRTbmlmZmluZzsKQEAgLTQyLDcgKzQ2LDEx
IEBAIHN0YXRpYyBib29sIHNob3VsZEZvcmNlQ29udGVudFNuaWZmaW5nOwogdHlwZWRlZiBIYXNo
TWFwPEF0b21pY1N0cmluZywgUmVzb3VyY2VIYW5kbGU6OkJ1aWx0aW5Db25zdHJ1Y3Rvcj4gQnVp
bHRpblJlc291cmNlSGFuZGxlQ29uc3RydWN0b3JNYXA7CiBzdGF0aWMgQnVpbHRpblJlc291cmNl
SGFuZGxlQ29uc3RydWN0b3JNYXAmIGJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFw
KCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgQVNTRVJUKFdlYlRocmVhZElzTG9ja2VkT3JE
aXNhYmxlZCgpKTsKKyNlbHNlCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyNlbmRpZgog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQnVpbHRpblJlc291cmNlSGFuZGxlQ29uc3RydWN0b3JN
YXAsIG1hcCwgKCkpOwogICAgIHJldHVybiBtYXA7CiB9CkBAIC0xNTEsMjMgKzE1OSwyMyBAQCB2
b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnQoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVu
dCkKIC8vIFJlc291cmNlSGFuZGxlIG5ldmVyIHVzZXMgYXN5bmMgY2xpZW50IGNhbGxzIG9uIHRo
ZXNlIHBsYXRmb3JtcyB5ZXQuCiB2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZVdpbGxTZW5k
UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNv
bnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51
ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogI2lmIFVTRShQUk9URUNUSU9OX1NQ
QUNFX0FVVEhfQ0FMTEJBQ0spCiB2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZUNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCkKIHsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogI2VuZGlmCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJh
c2UuY3BwCmluZGV4IGVmNDIxOTM0MzU0NzllN2I5ZGNhYjQ0OTNhOWQ0YzhkNTA4MjYyZjEuLjBl
ZDgyODk5M2ExZGI2OTI2YTQxZmIyYzBlNWExZTU5ZTRiNjIzZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcApA
QCAtMzgsNiArMzgsMTAgQEAgZG91YmxlIFJlc291cmNlUmVxdWVzdEJhc2U6OnNfZGVmYXVsdFRp
bWVvdXRJbnRlcnZhbCA9IElOVF9NQVg7CiBkb3VibGUgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c19k
ZWZhdWx0VGltZW91dEludGVydmFsID0gMDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQor
Ym9vbCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzX2RlZmF1bHRBbGxvd0Nvb2tpZXMgPSB0cnVlOwor
I2VuZGlmCisKIGlubGluZSBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIFJlc291cmNlUmVxdWVzdEJh
c2U6OmFzUmVzb3VyY2VSZXF1ZXN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gKnN0YXRpY19jYXN0
PGNvbnN0IFJlc291cmNlUmVxdWVzdCo+KHRoaXMpOwpAQCAtNTI4LDQgKzUzMiwxNiBAQCB1bnNp
Z25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCkKIH0KICNl
bmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRE
ZWZhdWx0QWxsb3dDb29raWVzKGJvb2wgYWxsb3dDb29raWVzKQoreworICAgIHNfZGVmYXVsdEFs
bG93Q29va2llcyA9IGFsbG93Q29va2llczsKK30KKworYm9vbCBSZXNvdXJjZVJlcXVlc3RCYXNl
OjpkZWZhdWx0QWxsb3dDb29raWVzKCkKK3sKKyAgICByZXR1cm4gc19kZWZhdWx0QWxsb3dDb29r
aWVzOworfQorI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgKaW5kZXggMTQwNTdjYjI3ZjRmODIzZTU5YWJj
NDJhODgwZjg0MDFjNWU1YTBiOS4uYWEwNjAxOTUzZDgwODQ1NWQ0NGI3MDViNjlmYmFiNTBmMDBh
NjA0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZVJlcXVlc3RCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmgKQEAgLTE0Miw2ICsxNDIsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBzdGF0aWMgZG91YmxlIGRlZmF1bHRUaW1lb3V0SW50ZXJ2YWwoKTsgLy8gTWF5
IHJldHVybiAwIHdoZW4gdXNpbmcgcGxhdGZvcm0gZGVmYXVsdC4KICAgICAgICAgc3RhdGljIHZv
aWQgc2V0RGVmYXVsdFRpbWVvdXRJbnRlcnZhbChkb3VibGUpOwogCisjaWYgUExBVEZPUk0oSU9T
KQorICAgICAgICBzdGF0aWMgYm9vbCBkZWZhdWx0QWxsb3dDb29raWVzKCk7CisgICAgICAgIHN0
YXRpYyB2b2lkIHNldERlZmF1bHRBbGxvd0Nvb2tpZXMoYm9vbCk7CisjZW5kaWYKKwogICAgICAg
ICBzdGF0aWMgYm9vbCBjb21wYXJlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYpOwogCiAgICAgcHJvdGVjdGVkOgpAQCAtMTYzLDcgKzE2OCwxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fY2FjaGVQb2xpY3kocG9saWN5KQogICAg
ICAgICAgICAgLCBtX3RpbWVvdXRJbnRlcnZhbChzX2RlZmF1bHRUaW1lb3V0SW50ZXJ2YWwpCiAg
ICAgICAgICAgICAsIG1faHR0cE1ldGhvZChBU0NJSUxpdGVyYWwoIkdFVCIpKQorI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgICAgICAgICAsIG1fYWxsb3dDb29raWVzKHRydWUpCisjZWxzZQorICAg
ICAgICAgICAgLCBtX2FsbG93Q29va2llcyhSZXNvdXJjZVJlcXVlc3RCYXNlOjpkZWZhdWx0QWxs
b3dDb29raWVzKCkpCisjZW5kaWYKICAgICAgICAgICAgICwgbV9yZXNvdXJjZVJlcXVlc3RVcGRh
dGVkKHRydWUpCiAgICAgICAgICAgICAsIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZChmYWxzZSkK
ICAgICAgICAgICAgICwgbV9yZXNvdXJjZVJlcXVlc3RCb2R5VXBkYXRlZCh0cnVlKQpAQCAtMjA0
LDYgKzIxMyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiBhc1Jlc291cmNlUmVxdWVzdCgpIGNvbnN0OwogCiAgICAgICAgIHN0YXRpYyBkb3Vi
bGUgc19kZWZhdWx0VGltZW91dEludGVydmFsOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAg
c3RhdGljIGJvb2wgc19kZWZhdWx0QWxsb3dDb29raWVzOworI2VuZGlmCiAgICAgfTsKIAogICAg
IGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNl
JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYpOwpAQCAtMjMwLDcgKzI0Miw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICB9OwogICAgIAogICAgIHVuc2lnbmVkIGluaXRpYWxpemVNYXhp
bXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsKLQorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICB2b2lkIGluaXRpYWxpemVIVFRQQ29ubmVjdGlvblNldHRpbmdzT25TdGFydHVwKCk7CisjZW5k
aWYKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlc291cmNlUmVxdWVzdEJh
c2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DcmVk
ZW50aWFsU3RvcmFnZUNGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvQ3JlZGVudGlhbFN0b3JhZ2VDRk5ldC5jcHAKaW5kZXggYzM0ZjZmNjY1Y2E3NDUyMzI5OWI5
MWMxNzQxOTMwZTY3MTRiZmNiOS4uYzcyNTJjMzg1NDAzZTY1YzU1MDdlNDllNTI1ZGQzMDNhZjFi
M2NiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DcmVk
ZW50aWFsU3RvcmFnZUNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL0NyZWRlbnRpYWxTdG9yYWdlQ0ZOZXQuY3BwCkBAIC0zOSw2ICszOSwxMCBAQAogI2lu
Y2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNl
bmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPENGTmV0d29yay9DRlVSTENyZWRl
bnRpYWxTdG9yYWdlLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDcmVkZW50
aWFsIENyZWRlbnRpYWxTdG9yYWdlOjpnZXRGcm9tUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJv
dGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCkBAIC00OCw2ICs1MiwyMyBAQCBDcmVkZW50
aWFsIENyZWRlbnRpYWxTdG9yYWdlOjpnZXRGcm9tUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJv
dGVjdGlvblNwYWNlJiBwcgogICAgIHJldHVybiBjb3JlKGNyZWRlbnRpYWxDRi5nZXQoKSk7CiB9
CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIENyZWRlbnRpYWxTdG9yYWdlOjpzYXZlVG9QZXJz
aXN0ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSwgY29u
c3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZVUkxDcmVkZW50
aWFsU3RvcmFnZVJlZj4gc3RvcmFnZUNGID0gYWRvcHRDRihDRlVSTENyZWRlbnRpYWxTdG9yYWdl
Q3JlYXRlKDApKTsKKyAgICBSZXRhaW5QdHI8Q0ZVUkxQcm90ZWN0aW9uU3BhY2VSZWY+IHByb3Rl
Y3Rpb25TcGFjZUNGID0gYWRvcHRDRihjcmVhdGVDRihwcm90ZWN0aW9uU3BhY2UpKTsKKworICAg
IGlmIChjcmVkZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9u
ZSkgeworICAgICAgICBDcmVkZW50aWFsIHNlc3Npb25DcmVkZW50aWFsKGNyZWRlbnRpYWwsIENy
ZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb24pOworICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxD
cmVkZW50aWFsUmVmPiBzZXNzaW9uQ3JlZGVudGlhbENGID0gYWRvcHRDRihjcmVhdGVDRihzZXNz
aW9uQ3JlZGVudGlhbCkpOworICAgICAgICBDRlVSTENyZWRlbnRpYWxTdG9yYWdlU2V0RGVmYXVs
dENyZWRlbnRpYWxGb3JQcm90ZWN0aW9uU3BhY2Uoc3RvcmFnZUNGLmdldCgpLCBzZXNzaW9uQ3Jl
ZGVudGlhbENGLmdldCgpLCBwcm90ZWN0aW9uU3BhY2VDRi5nZXQoKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgUmV0YWluUHRyPENGVVJMQ3JlZGVudGlhbFJlZj4gY3JlZGVudGlhbENGID0gYWRv
cHRDRihjcmVhdGVDRihjcmVkZW50aWFsKSk7CisgICAgICAgIENGVVJMQ3JlZGVudGlhbFN0b3Jh
Z2VTZXREZWZhdWx0Q3JlZGVudGlhbEZvclByb3RlY3Rpb25TcGFjZShzdG9yYWdlQ0YuZ2V0KCks
IGNyZWRlbnRpYWxDRi5nZXQoKSwgcHJvdGVjdGlvblNwYWNlQ0YuZ2V0KCkpOworICAgIH0KK30K
KyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQ0ZORVRX
T1JLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9ETlND
Rk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0ROU0NGTmV0LmNw
cAppbmRleCAwNzVhYTZiY2E1ZTI1NjQ3YWViZTlmMTJkNjlkNmFiNmM4M2U0NmMzLi5lM2YxYzJi
OTEyYzhlYzViZGRiNjgxOGRlNGE3NTJmNmIxOTU1MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0ROU0NGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0ROU0NGTmV0LmNwcApAQCAtMzcsNiArMzcsMTAgQEAKICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPENGTmV0d29yay9DRk5ldHdvcmsu
aD4KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUgIkxvYWRlclJ1bkxvb3BD
Ri5oIgogI2luY2x1ZGUgPENGTmV0d29yay9DRk5ldHdvcmsuaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUHJveHlTZXJ2ZXJDRk5ldC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Byb3h5U2VydmVyQ0ZOZXQuY3BwCmluZGV4
IDcxMTE4ZDJlZWIxZmY5NTJhMTU5MjMwYzBiYzQzODYyZDk0NGE2ZmEuLjlmMTQ3MTI2OTdlNDll
YjY1NWQ2OGE2OGYyZDU3NDNiYzE5MmU2NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvUHJveHlTZXJ2ZXJDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9Qcm94eVNlcnZlckNGTmV0LmNwcApAQCAtMzEsNyArMzEs
NyBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKLSNpZiBQTEFURk9STShXSU4pCisjaWYgUExBVEZPUk0oSU9TKSB8fCBQTEFURk9S
TShXSU4pCiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5o
CmluZGV4IDZjZjI2YWI0YzNlZjg0YTA0Y2VjZThmYWRlOThkN2Q4Y2EyMzVkNzIuLjNiODlmM2I0
NDY2ZGMwNWI1OThiZGQ4ZDYxMjFkYzgzOGM1YjZmMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaApAQCAtNDMsMjIgKzQz
LDM0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlc291cmNl
UmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkgCiAgICAgICAgICAgICA6IFJlc291cmNlUmVxdWVz
dEJhc2UoVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkK
KyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICAsIG1fbWFpblJlc291cmNlUmVxdWVzdChm
YWxzZSkKKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBSZXNvdXJjZVJl
cXVlc3QoY29uc3QgVVJMJiB1cmwpIAogICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNl
KHVybCwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAg
ICAgICAsIG1fbWFpblJlc291cmNlUmVxdWVzdChmYWxzZSkKKyNlbmRpZgogICAgICAgICB7CiAg
ICAgICAgIH0KIAogICAgICAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgcmVmZXJyZXIsIFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5IHBvbGljeSA9IFVz
ZVByb3RvY29sQ2FjaGVQb2xpY3kpIAogICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNl
KHVybCwgcG9saWN5KQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgICwgbV9tYWluUmVz
b3VyY2VSZXF1ZXN0KGZhbHNlKQorI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldEhU
VFBSZWZlcnJlcihyZWZlcnJlcik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJlc291
cmNlUmVxdWVzdCgpCiAgICAgICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoVVJMKCksIFVz
ZVByb3RvY29sQ2FjaGVQb2xpY3kpCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgLCBt
X21haW5SZXNvdXJjZVJlcXVlc3QoZmFsc2UpCisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9
CiAgICAgICAgIApAQCAtNzAsNiArODIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgUmVzb3VyY2VSZXF1ZXN0KENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QpCiAgICAgICAgICAg
ICA6IFJlc291cmNlUmVxdWVzdEJhc2UoKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAg
ICwgbV9tYWluUmVzb3VyY2VSZXF1ZXN0KGZhbHNlKQorI2VuZGlmCiAgICAgICAgICAgICAsIG1f
Y2ZSZXF1ZXN0KGNmUmVxdWVzdCkKICAgICAgICAgewogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTc5
LDYgKzk0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2Vsc2UKICAgICAgICAgUmVzb3VyY2VS
ZXF1ZXN0KE5TVVJMUmVxdWVzdCAqbnNSZXF1ZXN0KQogICAgICAgICAgICAgOiBSZXNvdXJjZVJl
cXVlc3RCYXNlKCkKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICAsIG1fbWFpblJlc291
cmNlUmVxdWVzdChmYWxzZSkKKyNlbmRpZgogICAgICAgICAgICAgLCBtX25zUmVxdWVzdChuc1Jl
cXVlc3QpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtMTA5LDYgKzEyNywxNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBib29sIHVzZVF1aWNrTG9va1Jlc291cmNlQ2Fj
aGluZ1F1aXJrcygpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHZvaWQg
c2V0TWFpblJlc291cmNlUmVxdWVzdChib29sIGlzTWFpblJlc291cmNlUmVxdWVzdCkgY29uc3Qg
eyBtX21haW5SZXNvdXJjZVJlcXVlc3QgPSBpc01haW5SZXNvdXJjZVJlcXVlc3Q7IH0KKyAgICAg
ICAgYm9vbCBpc01haW5SZXNvdXJjZVJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX21haW5SZXNv
dXJjZVJlcXVlc3Q7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIG11dGFibGUgYm9vbCBtX21h
aW5SZXNvdXJjZVJlcXVlc3Q7CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBSZXNvdXJjZVJlcXVlc3RCYXNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCmluZGV4
IDY4ZmJiZmFmOWIyNDdlYjcxYzYzYWZjZDZkMDVkYzA3ZmQ5NWUzODUuLjRhMjYyM2ZjNjY1Yzhl
NGI1MmNjYzE0M2JjZTY1NmFkMzk2MTg4ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwCkBAIC0z
Niw2ICszNiw5IEBACiAjaW5jbHVkZSAiRm9ybURhdGFTdHJlYW1DRk5ldC5oIgogI2luY2x1ZGUg
PENGTmV0d29yay9DRlVSTFJlcXVlc3RQcml2Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZOZXR3b3JrQ29u
bmVjdGlvbkNhY2hlUHJpdi5oPgorI2VuZGlmCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykK
QEAgLTUwLDcgKzUzLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIFBMQVRGT1JN
KElPUykKK2Jvb2wgUmVzb3VyY2VSZXF1ZXN0OjpzX2h0dHBQaXBlbGluaW5nRW5hYmxlZCA9IHRy
dWU7CisjZWxzZQogYm9vbCBSZXNvdXJjZVJlcXVlc3Q6OnNfaHR0cFBpcGVsaW5pbmdFbmFibGVk
ID0gZmFsc2U7CisjZW5kaWYKIAogI2lmIFVTRShDRk5FVFdPUkspCiAKQEAgLTIyMiwxMCArMjI5
LDMzIEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtSFRUUEJvZHkoKQog
I2VuZGlmCiB9CiAKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVGcm9tRGVsZWdhdGVQcmVz
ZXJ2aW5nT2xkSFRUUEJvZHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBkZWxlZ2F0ZVByb3ZpZGVk
UmVxdWVzdCkKK3sKKyAgICBSZWZQdHI8Rm9ybURhdGE+IG9sZEhUVFBCb2R5ID0gaHR0cEJvZHko
KTsKKworICAgICp0aGlzID0gZGVsZWdhdGVQcm92aWRlZFJlcXVlc3Q7CisgICAgc2V0SFRUUEJv
ZHkob2xkSFRUUEJvZHkucmVsZWFzZSgpKTsKK30KKwogdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmRv
VXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCkKIHsKICAgICBpZiAoIW1fY2ZSZXF1ZXN0KSB7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vOTkxMzUyNj4KKyAgICAg
ICAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gbWltaWMgdGhlIHN1YnRsZSBiZWhhdmlvdXIgb2YgdGhl
IEZvdW5kYXRpb24gYmFzZWQgUmVzb3VyY2VSZXF1ZXN0CisgICAgICAgIC8vIGNvZGUuIFRoYXQg
Y29kZSBkb2VzIG5vdCByZXNldCBtX2h0dHBNZXRob2QgaWYgdGhlIE5TVVJMUmVxdWVzdCBpcyBu
aWwuIEkgZmlsZWQKKyAgICAgICAgLy8gPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NjMzNj4gdG8gdHJhY2sgdGhhdC4KKyAgICAgICAgLy8gQW5vdGhlciByZWxhdGVk
IGJ1ZyBpcyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzUwPi4g
Rml4aW5nIHRoYXQKKyAgICAgICAgLy8gd291bGQsIGlkZWFsbHksIGFsbG93IHVzIHRvIG5vdCBo
YXZlIHRoaXMgaGFjay4gQnV0IHVuZm9ydHVuYXRlbHkgdGhhdCBjYXVzZWQgbGF5b3V0IHRlc3QK
KyAgICAgICAgLy8gZmFpbHVyZXMuCisgICAgICAgIC8vIFJlbW92YWwgb2YgdGhpcyBoYWNrIGlz
IHRyYWNrZWQgYnkgPHJkYXI6Ly9wcm9ibGVtLzk5NzA0OTk+LgorCisgICAgICAgIFN0cmluZyBo
dHRwTWV0aG9kID0gbV9odHRwTWV0aG9kOwogICAgICAgICAqdGhpcyA9IFJlc291cmNlUmVxdWVz
dCgpOworICAgICAgICBtX2h0dHBNZXRob2QgPSBodHRwTWV0aG9kOworI2Vsc2UKKyAgICAgICAg
KnRoaXMgPSBSZXNvdXJjZVJlcXVlc3QoKTsKKyNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0zMDcsOCArMzM3LDEwIEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0OjpzZXRTdG9yYWdl
U2Vzc2lvbihDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uKQogI2lmIFBMQVRG
T1JNKE1BQykKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0OjphcHBseVdlYkFyY2hpdmVIYWNrRm9yTWFp
bCgpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBIYWNrIGJlY2F1c2UgTWFpbCBjaGVj
a3MgZm9yIHRoaXMgcHJvcGVydHkgdG8gZGV0ZWN0IGRhdGEgLyBhcmNoaXZlIGxvYWRzCiAgICAg
X0NGVVJMUmVxdWVzdFNldFByb3RvY29sUHJvcGVydHkoY2ZVUkxSZXF1ZXN0KERvTm90VXBkYXRl
SFRUUEJvZHkpLCBDRlNUUigiV2ViRGF0YVJlcXVlc3QiKSwgQ0ZTVFIoIiIpKTsKKyNlbmRpZgog
fQogI2VuZGlmCiAKQEAgLTM4Myw1ICs0MTUsMjEgQEAgdW5zaWduZWQgaW5pdGlhbGl6ZU1heGlt
dW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpCiAKICAgICByZXR1cm4gbWF4aW11bUhUVFBD
b25uZWN0aW9uQ291bnRQZXJIb3N0OwogfQorICAgIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQg
aW5pdGlhbGl6ZUhUVFBDb25uZWN0aW9uU2V0dGluZ3NPblN0YXJ0dXAoKQoreworICAgIC8vIFRo
aXMgbmVlZCB0byBiZSBjYWxsZWQgZnJvbSBXZWJLaXRJbml0aWFsaXplIHNvIHRoZSBjYWxscyBo
YXBwZW4gZWFybHkgZW5vdWdoLCBiZWZvcmUgYW55IHJlcXVlc3RzIGFyZSBtYWRlLiA8cmRhcjov
L3Byb2JsZW0vOTY5MTg3MT4KKyAgICAvLyBEZXNrdG9wIGRvZXNuJ3QgaGF2ZSBlYXJseSBpbml0
aWFsaXphdGlvbiBzbyBpdCBpcyBub3QgY2xlYXIgaG93IHRoaXMgc2hvdWxkIGJlIGRvbmUgdGhl
cmUuIFRoZSBDRk5ldHdvcmsgU1BJIHByb2JhYmx5CisgICAgLy8gbmVlZHMgdG8gYmVjb21lIG1v
cmUgZm9yZ2l2aW5nLgorICAgIC8vIFdlIGNhbid0IHJlYWQgc2V0dGluZ3MgaGVyZSBhcyB0aGlz
IGlzIGNhbGxlZCB0b28gZWFybHkgZm9yIHRoYXQuIEFsbCB2YWx1ZXMgbmVlZCB0byBiZSBjb25z
dGFudHMuCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHByZWZlcnJlZENvbm5lY3Rpb25Db3Vu
dCA9IDY7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZhc3RMYW5lQ29ubmVjdGlvbkNvdW50
ID0gMTsKKyAgICB3a0luaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3Qo
cHJlZmVycmVkQ29ubmVjdGlvbkNvdW50KTsKKyAgICB3a1NldEhUVFBQaXBlbGluaW5nTWF4aW11
bVByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdCk7CisgICAgd2tTZXRIVFRQUGlw
ZWxpbmluZ01pbmltdW1GYXN0TGFuZVByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVt
KTsKKyAgICBfQ0ZOZXR3b3JrSFRUUENvbm5lY3Rpb25DYWNoZVNldExpbWl0KGtIVFRQTnVtRmFz
dExhbmVzLCBmYXN0TGFuZUNvbm5lY3Rpb25Db3VudCk7Cit9CisjZW5kaWYKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcAppbmRleCBmYzJkMjhkNzI0
MTgzZjU1NGFlYzc3Mjc3ZTQxYTMyMDVhOTAyOWZmLi5iNWVhYzQ1YTdhNmJiZGM4MDhhODg0MTA4
MDIxZjE0M2M3ZDcxYTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcApAQCAtNDEsNiAr
NDEsMTAgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPENGTmV0d29yay9D
Rk5ldHdvcmsuaD4KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUgIkxvYWRl
clJ1bkxvb3BDRi5oIgogI2luY2x1ZGUgPENGTmV0d29yay9DRk5ldHdvcmsuaD4KQEAgLTU3MSw3
ICs1NzUsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVwb3J0RXJyb3JUb0NsaWVudChD
RkVycm9yUmVmIGVycm9yKQogICAgIENGSW5kZXggZXJyb3JDb2RlID0gQ0ZFcnJvckdldENvZGUo
ZXJyb3IpOwogICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNp
ZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAKICNpZiBDT01QSUxFUihDTEFORykK
ICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9OZXR3b3JrU3RhdGVOb3RpZmllcklPUy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9OZXR3b3JrU3RhdGVOb3RpZmllcklPUy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOWVkNmEwODc4NWNlZThkZGY0NzA3MGRiZWYyNmE2MWM0N2I4MmQzNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL05l
dHdvcmtTdGF0ZU5vdGlmaWVySU9TLmNwcApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJOZXR3b3JrU3RhdGVOb3RpZmllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K05ldHdvcmtTdGF0ZU5vdGlmaWVyOjpOZXR3b3JrU3RhdGVOb3RpZmllcigpCisgICAgOiBtX2lz
T25MaW5lKGZhbHNlKQoreworfQorCit2b2lkIE5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpzZXRJc09u
TGluZShib29sIGlzT25MaW5lKQoreworICAgIGlmIChtX2lzT25MaW5lID09IGlzT25MaW5lKQor
ICAgICAgICByZXR1cm47CisgICAgbV9pc09uTGluZSA9IGlzT25MaW5lOworICAgIG5vdGlmeU5l
dHdvcmtTdGF0ZUNoYW5nZSgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xvb2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvaW9zL1F1aWNrTG9vay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlMjc1NmRmNDUxODNhMDk3MTRm
OWU5ZGY4ZWI2ZmU0YTIyOGI5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xvb2suaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgUXVpY2tMb29rX2gKKyNkZWZpbmUgUXVpY2tMb29rX2gKKworI2lmIFVT
RShRVUlDS19MT09LKQorCisjaW1wb3J0ICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbXBvcnQgPG9i
amMvb2JqYy1ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvUGFzc093blB0ci5oPgorCisjaWZkZWYg
X19PQkpDX18KK0BjbGFzcyBOU0RhdGE7CitAY2xhc3MgTlNEaWN0aW9uYXJ5OworQGNsYXNzIE5T
RmlsZUhhbmRsZTsKK0BjbGFzcyBOU1NldDsKK0BjbGFzcyBOU1N0cmluZzsKK0BjbGFzcyBOU1VS
TDsKK0BjbGFzcyBOU1VSTENvbm5lY3Rpb247CitAY2xhc3MgTlNVUkxSZXNwb25zZTsKKyNlbHNl
CitjbGFzcyBOU0RhdGE7CitjbGFzcyBOU0RpY3Rpb25hcnk7CitjbGFzcyBOU0ZpbGVIYW5kbGU7
CitjbGFzcyBOU1NldDsKK2NsYXNzIE5TU3RyaW5nOworY2xhc3MgTlNVUkw7CitjbGFzcyBOU1VS
TENvbm5lY3Rpb247CitjbGFzcyBOU1VSTFJlc3BvbnNlOworI2VuZGlmCisKKyNpZiBVU0UoQ0ZO
RVRXT1JLKQordHlwZWRlZiBzdHJ1Y3QgX0NGVVJMUmVzcG9uc2UqIENGVVJMUmVzcG9uc2VSZWY7
Cit0eXBlZGVmIHN0cnVjdCBfQ0ZVUkxDb25uZWN0aW9uKiBDRlVSTENvbm5lY3Rpb25SZWY7Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZXNvdXJjZUhhbmRsZTsKK2Ns
YXNzIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTsKKwor
Q2xhc3MgUUxQcmV2aWV3Q29udmVydGVyQ2xhc3MoKTsKK05TU3RyaW5nICpRTFR5cGVDb3B5QmVz
dE1pbWVUeXBlRm9yRmlsZU5hbWVBbmRNaW1lVHlwZShOU1N0cmluZyAqZmlsZU5hbWUsIE5TU3Ry
aW5nICptaW1lVHlwZSk7CitOU1N0cmluZyAqUUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvclVSTEFu
ZE1pbWVUeXBlKE5TVVJMICosIE5TU3RyaW5nICptaW1lVHlwZSk7CisKK05TU2V0ICpRTFByZXZp
ZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKTsKKworLy8gVXNlZCBmb3Igc2V0dGluZyB0aGUg
cGVybWlzc2lvbnMgb24gdGhlIHNhdmVkIFFMIGNvbnRlbnQKK05TRGljdGlvbmFyeSAqUUxGaWxl
QXR0cmlidXRlcygpOworTlNEaWN0aW9uYXJ5ICpRTERpcmVjdG9yeUF0dHJpYnV0ZXMoKTsKKwor
dm9pZCBhZGRRTFByZXZpZXdDb252ZXJ0ZXJXaXRoRmlsZUZvclVSTChOU1VSTCAqLCBpZCBjb252
ZXJ0ZXIsIE5TU3RyaW5nICpmaWxlTmFtZSk7CitOU1N0cmluZyAqcWxQcmV2aWV3Q29udmVydGVy
RmlsZU5hbWVGb3JVUkwoTlNVUkwgKik7CitOU1N0cmluZyAqcWxQcmV2aWV3Q29udmVydGVyVVRJ
Rm9yVVJMKE5TVVJMICopOwordm9pZCByZW1vdmVRTFByZXZpZXdDb252ZXJ0ZXJGb3JVUkwoTlNV
UkwgKik7CisKK1Bhc3NPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiByZWdpc3RlclFMUHJldmlld0Nv
bnZlcnRlcklmTmVlZGVkKE5TVVJMICosIE5TU3RyaW5nICptaW1lVHlwZSwgTlNEYXRhICopOwor
Citjb25zdCBVUkwgc2FmZVFMVVJMRm9yRG9jdW1lbnRVUkxBbmRSZXNvdXJjZVVSTChjb25zdCBV
UkwmIGRvY3VtZW50VVJMLCBjb25zdCBTdHJpbmcmIHJlc291cmNlVVJMKTsKKworY29uc3QgY2hh
ciogUUxQcmV2aWV3UHJvdG9jb2woKTsKKworCitjbGFzcyBRdWlja0xvb2tIYW5kbGUgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFF1aWNrTG9va0hhbmRsZSk7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8UXVpY2tMb29rSGFuZGxlPiBjcmVhdGUoUmVzb3VyY2VIYW5kbGUqLCBO
U1VSTENvbm5lY3Rpb24gKiwgTlNVUkxSZXNwb25zZSAqLCBpZCBkZWxlZ2F0ZSk7CisjaWYgVVNF
KENGTkVUV09SSykKKyAgICBzdGF0aWMgUGFzc093blB0cjxRdWlja0xvb2tIYW5kbGU+IGNyZWF0
ZShSZXNvdXJjZUhhbmRsZSosIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZSosIENGVVJMUmVzcG9uc2VSZWYpOworI2VuZGlmCisgICAgflF1aWNrTG9va0hh
bmRsZSgpOworCisgICAgYm9vbCBkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJyYXlSZWYpOworICAg
IGJvb2wgZGlkUmVjZWl2ZURhdGEoQ0ZEYXRhUmVmKTsKKyAgICBib29sIGRpZEZpbmlzaExvYWRp
bmcoKTsKKyAgICB2b2lkIGRpZEZhaWwoKTsKKworICAgIE5TVVJMUmVzcG9uc2UgKm5zUmVzcG9u
c2UoKTsKKyNpZiBVU0UoQ0ZORVRXT1JLKQorICAgIENGVVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25z
ZSgpOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgUXVpY2tMb29rSGFuZGxlKFJlc291cmNlSGFu
ZGxlKiwgTlNVUkxDb25uZWN0aW9uICosIE5TVVJMUmVzcG9uc2UgKiwgaWQgZGVsZWdhdGUpOwor
I2lmIFVTRShDRk5FVFdPUkspCisgICAgUXVpY2tMb29rSGFuZGxlKFJlc291cmNlSGFuZGxlKiwg
Q0ZVUkxSZXNwb25zZVJlZik7CisjZW5kaWYKKworICAgIFJlc291cmNlSGFuZGxlKiBtX2hhbmRs
ZTsKKyAgICBSZXRhaW5QdHI8aWQ+IG1fY29udmVydGVyOworICAgIFJldGFpblB0cjxpZD4gbV9k
ZWxlZ2F0ZTsKKyAgICBib29sIG1fZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXI7Cisg
ICAgUmV0YWluUHRyPE5TRmlsZUhhbmRsZSAqPiBtX3F1aWNrbG9va0ZpbGVIYW5kbGU7CisgICAg
TlNVUkxSZXNwb25zZSAqbV9uc1Jlc3BvbnNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKFFVSUNLX0xPT0spCisKKyNlbmRpZiAvLyBRdWlja0xvb2tfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29r
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdlNzY5MDkxMWUxN2QyMDAzMWQ4OTdlMTllNjZhNGQ0YWQ2NWVmZGYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xv
b2subW0KQEAgLTAsMCArMSw0NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlF1aWNrTG9vay5oIgorCisjaWYgVVNFKFFVSUNLX0xPT0spCisKKyNpbXBvcnQg
IkZpbGVTeXN0ZW1JT1MuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlJlc291cmNl
SGFuZGxlLmgiCisjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCIKKyNpbXBv
cnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZV
UkxDb25uZWN0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIldlYkNvcmVVUkxSZXNwb25zZUlPUy5o
IgorI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9u
L05TRmlsZU1hbmFnZXJfTlNVUkxFeHRyYXMuaD4KKyNpbXBvcnQgPFF1aWNrTG9vay9RTFByZXZp
ZXdDb252ZXJ0ZXIuaD4KKyNpbXBvcnQgPFF1aWNrTG9vay9RdWlja0xvb2tQcml2YXRlLmg+Cisj
aW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbXBvcnQgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KKyNp
bXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgVVNFKENGTkVUV09SSykKKyNpbXBv
cnQgPENGTmV0d29yay9DRlVSTENvbm5lY3Rpb24uaD4KKworQGludGVyZmFjZSBOU1VSTFJlc3Bv
bnNlIChRdWlja0xvb2tEZXRhaWxzKQorKyhOU1VSTFJlc3BvbnNlICopX3Jlc3BvbnNlV2l0aENG
VVJMUmVzcG9uc2U6KENGVVJMUmVzcG9uc2VSZWYpcmVzcG9uc2U7CistKENGVVJMUmVzcG9uc2VS
ZWYpX0NGVVJMUmVzcG9uc2U7CitAZW5kCisjZW5kaWYKKworU09GVF9MSU5LX0ZSQU1FV09SS19P
UFRJT05BTChRdWlja0xvb2spCitTT0ZUX0xJTktfQ0xBU1MoUXVpY2tMb29rLCBRTFByZXZpZXdD
b252ZXJ0ZXIpCitTT0ZUX0xJTktfTUFZX0ZBSUwoUXVpY2tMb29rLCBRTFByZXZpZXdHZXRTdXBw
b3J0ZWRNSU1FVHlwZXMsIE5TU2V0ICosICgpLCAoKSkKK1NPRlRfTElOS19NQVlfRkFJTChRdWlj
a0xvb2ssIFFMVHlwZUNvcHlCZXN0TWltZVR5cGVGb3JGaWxlTmFtZUFuZE1pbWVUeXBlLCBOU1N0
cmluZyAqLCAoTlNTdHJpbmcgKmZpbGVOYW1lLCBOU1N0cmluZyAqbWltZVR5cGUpLCAoZmlsZU5h
bWUsIG1pbWVUeXBlKSkKK1NPRlRfTElOS19NQVlfRkFJTChRdWlja0xvb2ssIFFMVHlwZUNvcHlC
ZXN0TWltZVR5cGVGb3JVUkxBbmRNaW1lVHlwZSwgTlNTdHJpbmcgKiwgKE5TVVJMICp1cmwsIE5T
U3RyaW5nICptaW1lVHlwZSksICh1cmwsIG1pbWVUeXBlKSkKK1NPRlRfTElOS19NQVlfRkFJTChR
dWlja0xvb2ssIFFMVHlwZUNvcHlVVElGb3JVUkxBbmRNaW1lVHlwZSwgTlNTdHJpbmcgKiwgKE5T
VVJMICp1cmwsIE5TU3RyaW5nICptaW1lVHlwZSksICh1cmwsIG1pbWVUeXBlKSkKK1NPRlRfTElO
S19DT05TVEFOVF9NQVlfRkFJTChRdWlja0xvb2ssIFFMUHJldmlld1NjaGVtZSwgTlNTdHJpbmcg
KikKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIE5TU3RyaW5nICpRTFR5cGVDb3B5VVRJRm9y
VVJMQW5kTWltZVR5cGUoTlNVUkwgKnVybCwgTlNTdHJpbmcgKm1pbWVUeXBlKTsKK30KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0NsYXNzIFdlYkNvcmU6OlFMUHJldmlld0NvbnZlcnRl
ckNsYXNzKCkKK3sKKyNkZWZpbmUgUUxQcmV2aWV3Q29udmVydGVyIGdldFFMUHJldmlld0NvbnZl
cnRlckNsYXNzKCkKKyAgICByZXR1cm4gUUxQcmV2aWV3Q29udmVydGVyOworI3VuZGVmIFFMUHJl
dmlld0NvbnZlcnRlcgorfQorCitOU1N0cmluZyAqV2ViQ29yZTo6UUxUeXBlQ29weUJlc3RNaW1l
VHlwZUZvckZpbGVOYW1lQW5kTWltZVR5cGUoTlNTdHJpbmcgKmZpbGVOYW1lLCBOU1N0cmluZyAq
bWltZVR5cGUpCit7CisgICAgaWYgKCFjYW5Mb2FkUUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvckZp
bGVOYW1lQW5kTWltZVR5cGUoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiA6
OlFMVHlwZUNvcHlCZXN0TWltZVR5cGVGb3JGaWxlTmFtZUFuZE1pbWVUeXBlKGZpbGVOYW1lLCBt
aW1lVHlwZSk7Cit9CisKK05TU3RyaW5nICpXZWJDb3JlOjpRTFR5cGVDb3B5QmVzdE1pbWVUeXBl
Rm9yVVJMQW5kTWltZVR5cGUoTlNVUkwgKnVybCwgTlNTdHJpbmcgKm1pbWVUeXBlKQoreworICAg
IGlmICghY2FuTG9hZFFMVHlwZUNvcHlCZXN0TWltZVR5cGVGb3JVUkxBbmRNaW1lVHlwZSgpKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIDo6UUxUeXBlQ29weUJlc3RNaW1lVHlw
ZUZvclVSTEFuZE1pbWVUeXBlKHVybCwgbWltZVR5cGUpOworfQorCitOU1NldCAqV2ViQ29yZTo6
UUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzU2V0KCkKK3sKKyAgICBpZiAoIWNhbkxvYWRR
TFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIHN0YXRpYyBOU1NldCAqc2V0ID0gYWRvcHROUyg6OlFMUHJldmlld0dldFN1cHBvcnRlZE1J
TUVUeXBlcygpKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuIHNldDsKK30KKworTlNTdHJpbmcgKldl
YkNvcmU6OlFMVHlwZUNvcHlVVElGb3JVUkxBbmRNaW1lVHlwZShOU1VSTCAqdXJsLCBOU1N0cmlu
ZyAqbWltZVR5cGUpCit7CisgICAgaWYgKCFjYW5Mb2FkUUxUeXBlQ29weVVUSUZvclVSTEFuZE1p
bWVUeXBlKCkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gOjpRTFR5cGVDb3B5
VVRJRm9yVVJMQW5kTWltZVR5cGUodXJsLCBtaW1lVHlwZSk7Cit9CisKK05TRGljdGlvbmFyeSAq
V2ViQ29yZTo6UUxGaWxlQXR0cmlidXRlcygpCit7CisgICAgLy8gU2V0IGZpbGUgcGVybXMgdG8g
b3duZXIgcmVhZC93cml0ZSBvbmx5CisgICAgTlNOdW1iZXIgKmZpbGVQT1NJWFBlcm1pc3Npb25z
ID0gW05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOihXRUJfVVJFQUQgfCBXRUJfVVdSSVRFKV07
CisgICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IGFkb3B0TlMoW1tOU0RpY3Rp
b25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlNVc2VyTmFtZSgpLCBOU0ZpbGVPd25lckFjY291bnROYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVQT1NJWFBlcm1p
c3Npb25zLCBOU0ZpbGVQb3NpeFBlcm1pc3Npb25zLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG51bGxwdHJdKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuIGRpY3Rpb25h
cnk7Cit9CisKK05TRGljdGlvbmFyeSAqV2ViQ29yZTo6UUxEaXJlY3RvcnlBdHRyaWJ1dGVzKCkK
K3sKKyAgICAvLyBTZXQgZmlsZSBwZXJtcyB0byBvd25lciByZWFkL3dyaXRlL2V4ZWN1dGUgb25s
eQorICAgIE5TTnVtYmVyICpkaXJlY3RvcnlQT1NJWFBlcm1pc3Npb25zID0gW05TTnVtYmVyIG51
bWJlcldpdGhJbnRlZ2VyOihXRUJfVVJFQUQgfCBXRUJfVVdSSVRFIHwgV0VCX1VFWEVDKV07Cisg
ICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IGFkb3B0TlMoW1tOU0RpY3Rpb25h
cnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VzZXJOYW1lKCksIE5TRmlsZU93bmVyQWNjb3Vu
dE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aXJlY3RvcnlQT1NJWFBlcm1pc3Npb25zLCBOU0ZpbGVQb3NpeFBlcm1pc3Npb25zLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cl0pLmxlYWtS
ZWYoKTsKKyAgICByZXR1cm4gZGljdGlvbmFyeTsKK30KKworc3RhdGljIE11dGV4JiBxbFByZXZp
ZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5TXV0ZXgoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxNdXRleD4gbXV0ZXg7CisgICAgcmV0dXJuIG11dGV4OworfQorCitzdGF0aWMgTlNNdXRhYmxl
RGljdGlvbmFyeSAqUUxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeSgpCit7CisgICAgc3RhdGlj
IE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBhZG9wdE5TKFtOU011dGFibGVEaWN0
aW9uYXJ5IGRpY3Rpb25hcnldKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuIGRpY3Rpb25hcnk7Cit9
CisKK3N0YXRpYyBOU011dGFibGVEaWN0aW9uYXJ5ICpRTENvbnRlbnREaWN0aW9uYXJ5KCkKK3sK
KyAgICBzdGF0aWMgTlNNdXRhYmxlRGljdGlvbmFyeSAqY29udGVudERpY3Rpb25hcnkgPSBhZG9w
dE5TKFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldKS5sZWFrUmVmKCk7CisgICAgcmV0
dXJuIGNvbnRlbnREaWN0aW9uYXJ5OworfQorCit2b2lkIFdlYkNvcmU6OmFkZFFMUHJldmlld0Nv
bnZlcnRlcldpdGhGaWxlRm9yVVJMKE5TVVJMICp1cmwsIGlkIGNvbnZlcnRlciwgTlNTdHJpbmcg
KmZpbGVOYW1lKQoreworICAgIEFTU0VSVCh1cmwpOworICAgIEFTU0VSVChjb252ZXJ0ZXIpOwor
ICAgIE11dGV4TG9ja2VyIGxvY2socWxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeU11dGV4KCkp
OworICAgIFtRTFByZXZpZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5KCkgc2V0T2JqZWN0OmNvbnZlcnRl
ciBmb3JLZXk6dXJsXTsKKyAgICBbUUxDb250ZW50RGljdGlvbmFyeSgpIHNldE9iamVjdDooZmls
ZU5hbWUgPyBmaWxlTmFtZSA6IEAiIikgZm9yS2V5OnVybF07Cit9CisKK05TU3RyaW5nICpXZWJD
b3JlOjpxbFByZXZpZXdDb252ZXJ0ZXJGaWxlTmFtZUZvclVSTChOU1VSTCAqdXJsKQoreworICAg
IHJldHVybiBbUUxDb250ZW50RGljdGlvbmFyeSgpIG9iamVjdEZvcktleTp1cmxdOworfQorCitO
U1N0cmluZyAqV2ViQ29yZTo6cWxQcmV2aWV3Q29udmVydGVyVVRJRm9yVVJMKE5TVVJMICp1cmwp
Cit7CisgICAgaWQgY29udmVydGVyID0gbmlsOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIg
bG9jayhxbFByZXZpZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5TXV0ZXgoKSk7CisgICAgICAgIGNvbnZl
cnRlciA9IFtRTFByZXZpZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5KCkgb2JqZWN0Rm9yS2V5OnVybF07
CisgICAgfQorICAgIGlmICghY29udmVydGVyKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJl
dHVybiBbY29udmVydGVyIHByZXZpZXdVVEldOworfQorCit2b2lkIFdlYkNvcmU6OnJlbW92ZVFM
UHJldmlld0NvbnZlcnRlckZvclVSTChOU1VSTCAqdXJsKQoreworICAgIE11dGV4TG9ja2VyIGxv
Y2socWxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeU11dGV4KCkpOworICAgIFtRTFByZXZpZXdD
b252ZXJ0ZXJEaWN0aW9uYXJ5KCkgcmVtb3ZlT2JqZWN0Rm9yS2V5OnVybF07CisKKyAgICAvLyBE
ZWxldGUgdGhlIGZpbGUgd2hlbiB3ZSByZW1vdmUgdGhlIHByZXZpZXcgY29udmVydGVyCisgICAg
TlNTdHJpbmcgKmZpbGVuYW1lID0gcWxQcmV2aWV3Q29udmVydGVyRmlsZU5hbWVGb3JVUkwodXJs
KTsKKyAgICBpZiAoW2ZpbGVuYW1lIGxlbmd0aF0pCisgICAgICAgIFtbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl0gX3dlYl9yZW1vdmVGaWxlT25seUF0UGF0aDpmaWxlbmFtZV07CisgICAg
W1FMQ29udGVudERpY3Rpb25hcnkoKSByZW1vdmVPYmplY3RGb3JLZXk6dXJsXTsKK30KKworUGFz
c093blB0cjxSZXNvdXJjZVJlcXVlc3Q+IFdlYkNvcmU6OnJlZ2lzdGVyUUxQcmV2aWV3Q29udmVy
dGVySWZOZWVkZWQoTlNVUkwgKnVybCwgTlNTdHJpbmcgKm1pbWVUeXBlLCBOU0RhdGEgKmRhdGEp
Cit7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiB1cGRhdGVkTUlNRVR5cGUgPSBhZG9wdE5TKFdl
YkNvcmU6OlFMVHlwZUNvcHlCZXN0TWltZVR5cGVGb3JVUkxBbmRNaW1lVHlwZSh1cmwsIG1pbWVU
eXBlKSk7CisKKyAgICBpZiAoW1dlYkNvcmU6OlFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBl
c1NldCgpIGNvbnRhaW5zT2JqZWN0OnVwZGF0ZWRNSU1FVHlwZS5nZXQoKV0pIHsKKyAgICAgICAg
UmV0YWluUHRyPE5TU3RyaW5nPiB1dGkgPSBhZG9wdE5TKFdlYkNvcmU6OlFMVHlwZUNvcHlVVElG
b3JVUkxBbmRNaW1lVHlwZSh1cmwsIHVwZGF0ZWRNSU1FVHlwZS5nZXQoKSkpOworCisgICAgICAg
IFJldGFpblB0cjxpZD4gY29udmVydGVyID0gYWRvcHROUyhbW1FMUHJldmlld0NvbnZlcnRlckNs
YXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0YTpkYXRhIG5hbWU6bmlsIHV0aTp1dGkuZ2V0KCkgb3B0
aW9uczpuaWxdKTsKKyAgICAgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW2NvbnZlcnRlci5n
ZXQoKSBwcmV2aWV3UmVxdWVzdF07CisKKyAgICAgICAgLy8gV2UgdXNlIFtyZXF1ZXN0IFVSTF0g
aGVyZSBpbnN0ZWFkIG9mIHVybCBzaW5jZSBpdCB3aWxsIGJlCisgICAgICAgIC8vIHRoZSBVUkwg
dGhhdCB0aGUgV2ViRGF0YVNvdXJjZSB3aWxsIHNlZSBkdXJpbmcgLWRlYWxsb2MuCisgICAgICAg
IGFkZFFMUHJldmlld0NvbnZlcnRlcldpdGhGaWxlRm9yVVJMKFtyZXF1ZXN0IFVSTF0sIGNvbnZl
cnRlci5nZXQoKSwgbmlsKTsKKworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJlc291cmNl
UmVxdWVzdChyZXF1ZXN0KSk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Nv
bnN0IFVSTCBXZWJDb3JlOjpzYWZlUUxVUkxGb3JEb2N1bWVudFVSTEFuZFJlc291cmNlVVJMKGNv
bnN0IFVSTCYgZG9jdW1lbnRVUkwsIGNvbnN0IFN0cmluZyYgcmVzb3VyY2VVUkwpCit7CisgICAg
aWQgY29udmVydGVyID0gbmlsOworICAgIE5TVVJMICpuc0RvY3VtZW50VVJMID0gZG9jdW1lbnRV
Ukw7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrKHFsUHJldmlld0NvbnZlcnRlckRp
Y3Rpb25hcnlNdXRleCgpKTsKKyAgICAgICAgY29udmVydGVyID0gW1FMUHJldmlld0NvbnZlcnRl
ckRpY3Rpb25hcnkoKSBvYmplY3RGb3JLZXk6bnNEb2N1bWVudFVSTF07CisgICAgfQorCisgICAg
aWYgKCFjb252ZXJ0ZXIpCisgICAgICAgIHJldHVybiBVUkwoUGFyc2VkVVJMU3RyaW5nLCByZXNv
dXJjZVVSTCk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiByZXF1ZXN0ID0gYWRvcHRO
UyhbW05TVVJMUmVxdWVzdCBhbGxvY10gaW5pdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6
cmVzb3VyY2VVUkxdXSk7CisgICAgTlNVUkxSZXF1ZXN0ICpzYWZlUmVxdWVzdCA9IFtjb252ZXJ0
ZXIgc2FmZVJlcXVlc3RGb3JSZXF1ZXN0OnJlcXVlc3QuZ2V0KCldOworICAgIHJldHVybiBbc2Fm
ZVJlcXVlc3QgVVJMXTsKK30KKworc3RhdGljIFZlY3RvcjxjaGFyPiBjcmVhdGVRTFByZXZpZXdQ
cm90b2NvbCgpCit7CisgICAgVmVjdG9yPGNoYXI+IHByZXZpZXdQcm90b2NvbDsKKyNkZWZpbmUg
UUxQcmV2aWV3U2NoZW1lIGdldFFMUHJldmlld1NjaGVtZSgpCisgICAgY29uc3QgY2hhciogcWxQ
cmV2aWV3U2NoZW1lID0gW1FMUHJldmlld1NjaGVtZSBVVEY4U3RyaW5nXTsKKyN1bmRlZiBRTFBy
ZXZpZXdTY2hlbWUKKyAgICBwcmV2aWV3UHJvdG9jb2wuYXBwZW5kKHFsUHJldmlld1NjaGVtZSwg
c3RybGVuKHFsUHJldmlld1NjaGVtZSkgKyAxKTsKKyAgICByZXR1cm4gcHJldmlld1Byb3RvY29s
OworfQorCitjb25zdCBjaGFyKiBXZWJDb3JlOjpRTFByZXZpZXdQcm90b2NvbCgpCit7CisgICAg
aWYgKCFjYW5Mb2FkUUxQcmV2aWV3U2NoZW1lKCkpCisgICAgICAgIHJldHVybiAiIjsKKworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8Y2hhcj4+IHByZXZpZXdQcm90b2NvbChjcmVh
dGVRTFByZXZpZXdQcm90b2NvbCgpKTsKKyAgICByZXR1cm4gcHJldmlld1Byb3RvY29sLmdldCgp
LmRhdGEoKTsKK30KKworI2lmIFVTRShDRk5FVFdPUkspCisvLyBUaGUgd2F5IFF1aWNrTG9vayB3
b3JrcyBpcyB3ZSBwYXNzIGl0IGFuIE5TVVJMQ29ubmVjdGlvbkRlbGVnYXRlIGNhbGxiYWNrIG9i
amVjdCBhdCBjcmVhdGlvbgorLy8gdGltZS4gVGhlbiB3ZSBwYXNzIGl0IGFsbCB0aGUgZGF0YSBh
cyB3ZSByZWNlaXZlIGl0LiBPbmNlIHdlJ3ZlIGRvd25sb2FkZWQgdGhlIGZ1bGwgVVJMLAorLy8g
UXVpY2tMb29rIHR1cm5zIGFyb3VuZCBhbmQgc2VuZCB1cywgdGhyb3VnaCB0aGlzIGRlbGVnYXRl
LCB0aGUgSFRNTCB2ZXJzaW9uIG9mIHRoZSBmaWxlIHdoaWNoIHdlCisvLyBwYXNzIG9uIHRvIFdl
YkNvcmUuIFRoZSBmbGFnIG1fZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXIgaW4gUXVp
Y2tMb29rSGFuZGxlIGRlY2lkZXMKKy8vIHdoZXRoZXIgdG8gcGFzcyB0aGUgZGF0YSB0byBRdWlj
a0xvb2sgb3IgV2ViQ29yZS4KKy8vCisvLyBUaGlzIHdvcmtzIGZpbmUgd2hlbiB1c2luZyBOUyBB
UElzLCBidXQgd2hlbiB1c2luZyBDRk5ldHdvcmssIHdlIGRvbid0IGhhdmUgYSBOU1VSTENvbm5l
Y3Rpb25EZWxlZ2F0ZS4KKy8vIFNvIHdlIGNyZWF0ZSBXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVn
YXRlIGFzIGFuIGludGVybWVkaWF0ZSBkZWxlZ2F0ZSBvYmplY3QgYW5kIHBhc3MgaXQgdG8KKy8v
IFFMUHJldmlld0NvbnZlcnRlci4gVGhlIHByb3h5IGRlbGVnYXRlIHRoZW4gZm9yd2FyZHMgdGhl
IG1lc3NhZ2VzIG9uIHRvIHRoZSBDRk5ldHdvcmsgY29kZS4KK0BpbnRlcmZhY2UgV2ViUXVpY2tM
b29rSGFuZGxlQXNEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZT4g
eworICAgIFJlZlB0cjxTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU+IG1fY29ubmVjdGlvbkRlbGVnYXRlOworfQorCistIChpZClpbml0V2l0aENvbm5lY3Rp
b25EZWxlZ2F0ZTooU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlKiljb25uZWN0aW9uRGVsZWdhdGU7CistICh2b2lkKWNsZWFySGFuZGxlOworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gV2ViUXVpY2tMb29rSGFuZGxlQXNEZWxlZ2F0ZQorLSAoaWQpaW5pdFdp
dGhDb25uZWN0aW9uRGVsZWdhdGU6KFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZSopY29ubmVjdGlvbkRlbGVnYXRlCit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgbV9jb25uZWN0
aW9uRGVsZWdhdGUgPSBjb25uZWN0aW9uRGVsZWdhdGU7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNl
aXZlRGF0YUFycmF5OihOU0FycmF5ICopZGF0YUFycmF5Cit7CisgICAgVU5VU0VEX1BBUkFNKGNv
bm5lY3Rpb24pOworICAgIGlmICghbV9jb25uZWN0aW9uRGVsZWdhdGUpCisgICAgICAgIHJldHVy
bjsKKyAgICBMT0coTmV0d29yaywgIldlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGU6OmRpZFJl
Y2VpdmVEYXRhQXJyYXkoKSIpOworICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlLT5kaWRSZWNlaXZl
RGF0YUFycmF5KHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZBcnJheVJlZj4oZGF0YUFycmF5KSk7Cit9CisK
Ky0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNl
aXZlRGF0YTooTlNEYXRhICopZGF0YSBsZW5ndGhSZWNlaXZlZDoobG9uZyBsb25nKWxlbmd0aFJl
Y2VpdmVkCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOworICAgIGlmICghbV9jb25u
ZWN0aW9uRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBMT0coTmV0d29yaywgIldlYlF1
aWNrTG9va0hhbmRsZUFzRGVsZWdhdGU6OmRpZFJlY2VpdmVEYXRhKCkgLSBkYXRhIGxlbmd0aCA9
ICVsZCIsIChsb25nKVtkYXRhIGxlbmd0aF0pOworCisgICAgLy8gUXVpY2tMb29rIGNvZGUgc2Vu
ZHMgdXMgYSBuaWwgZGF0YSBhdCB0aW1lcy4gVGhlIGNoZWNrIGJlbG93IGlzIHRoZSBzYW1lIGFz
IHRoZSBvbmUgaW4KKyAgICAvLyBSZXNvdXJjZUhhbmRsZU1hYy5jcHAgYWRkZWQgZm9yIGEgZGlm
ZmVyZW50IGJ1Zy4KKyAgICBpZiAoIVtkYXRhIGxlbmd0aF0pCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2Nvbm5lY3Rpb25EZWxlZ2F0ZS0+ZGlkUmVjZWl2ZURhdGEocmVpbnRlcnByZXRfY2FzdDxD
RkRhdGFSZWY+KGRhdGEpLCBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aFJlY2VpdmVkKSk7Cit9CisK
Ky0gKHZvaWQpY29ubmVjdGlvbkRpZEZpbmlzaExvYWRpbmc6KE5TVVJMQ29ubmVjdGlvbiAqKWNv
bm5lY3Rpb24KK3sKKyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7CisgICAgaWYgKCFtX2Nv
bm5lY3Rpb25EZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIExPRyhOZXR3b3JrLCAiV2Vi
UXVpY2tMb29rSGFuZGxlQXNEZWxlZ2F0ZTo6ZGlkRmluaXNoTG9hZGluZygpIik7CisgICAgbV9j
b25uZWN0aW9uRGVsZWdhdGUtPmRpZEZpbmlzaExvYWRpbmcoKTsKK30KKworLSAodm9pZCljb25u
ZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZEZhaWxXaXRoRXJyb3I6KE5T
RXJyb3IgKillcnJvcgoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKyAgICBpZiAo
IW1fY29ubmVjdGlvbkRlbGVnYXRlKQorICAgICAgICByZXR1cm47CisgICAgTE9HKE5ldHdvcmss
ICJXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVnYXRlOjpkaWRGYWlsKCkiKTsKKyAgICBtX2Nvbm5l
Y3Rpb25EZWxlZ2F0ZS0+ZGlkRmFpbChyZWludGVycHJldF9jYXN0PENGRXJyb3JSZWY+KGVycm9y
KSk7Cit9CisKKy0gKHZvaWQpY2xlYXJIYW5kbGUKK3sKKyAgICBtX2Nvbm5lY3Rpb25EZWxlZ2F0
ZSA9IG51bGxwdHI7Cit9CitAZW5kCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgTlNTdHJpbmcgKmNyZWF0ZVRlbXBvcmFyeUZpbGVGb3JRdWlja0xvb2soTlNTdHJpbmcg
KmZpbGVOYW1lKQoreworICAgIE5TU3RyaW5nICpkb3dubG9hZERpcmVjdG9yeSA9IGNyZWF0ZVRl
bXBvcmFyeURpcmVjdG9yeShAIlF1aWNrTG9va0NvbnRlbnQiKTsKKyAgICBpZiAoIWRvd25sb2Fk
RGlyZWN0b3J5KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNTdHJpbmcgKmNvbnRlbnRQ
YXRoID0gW2Rvd25sb2FkRGlyZWN0b3J5IHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpm
aWxlTmFtZV07CisgICAgTlNGaWxlTWFuYWdlciAqZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl07CisgICAgTlNTdHJpbmcgKnVuaXF1ZUNvbnRlbnRQYXRoID0gW2Zp
bGVNYW5hZ2VyIF93ZWJfcGF0aFdpdGhVbmlxdWVGaWxlbmFtZUZvclBhdGg6Y29udGVudFBhdGhd
OworCisgICAgQk9PTCBzdWNjZXNzID0gW2ZpbGVNYW5hZ2VyIF93ZWJfY3JlYXRlRmlsZUF0UGF0
aFdpdGhJbnRlcm1lZGlhdGVEaXJlY3Rvcmllczp1bmlxdWVDb250ZW50UGF0aAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGVudHM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczpRTEZpbGVBdHRyaWJ1
dGVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXJlY3RvcnlBdHRyaWJ1dGVzOlFMRGlyZWN0b3J5QXR0cmlidXRlcygpXTsK
KworICAgIHJldHVybiBzdWNjZXNzID8gdW5pcXVlQ29udGVudFBhdGggOiBuaWw7Cit9CisKKwor
UXVpY2tMb29rSGFuZGxlOjpRdWlja0xvb2tIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwg
TlNVUkxDb25uZWN0aW9uICpjb25uZWN0aW9uLCBOU1VSTFJlc3BvbnNlICpuc1Jlc3BvbnNlLCBp
ZCBkZWxlZ2F0ZSkKKyAgICA6IG1faGFuZGxlKGhhbmRsZSkKKyAgICAsIG1fY29udmVydGVyKGFk
b3B0TlMoW1tRTFByZXZpZXdDb252ZXJ0ZXJDbGFzcygpIGFsbG9jXSBpbml0V2l0aENvbm5lY3Rp
b246Y29ubmVjdGlvbiBkZWxlZ2F0ZTpkZWxlZ2F0ZSByZXNwb25zZTpuc1Jlc3BvbnNlIG9wdGlv
bnM6bmlsXSkpCisgICAgLCBtX2RlbGVnYXRlKGFkb3B0TlMoW2RlbGVnYXRlIHJldGFpbl0pKQor
ICAgICwgbV9maW5pc2hlZExvYWRpbmdEYXRhSW50b0NvbnZlcnRlcihmYWxzZSkKKyAgICAsIG1f
bnNSZXNwb25zZShbbV9jb252ZXJ0ZXIuZ2V0KCkgcHJldmlld1Jlc3BvbnNlXSkKK3sKKyAgICBO
U1VSTCAqcHJldmlld1JlcXVlc3RVUkwgPSBbW21fY29udmVydGVyLmdldCgpIHByZXZpZXdSZXF1
ZXN0XSBVUkxdOworICAgIGlmICghYXBwbGljYXRpb25Jc01vYmlsZVNhZmFyaSgpKSB7CisgICAg
ICAgIC8vIFRoaXMga2VlcHMgdGhlIFFMUHJldmlld0NvbnZlcnRlciBhbGl2ZSB0byBzZXJ2ZSBh
bnkgc3VicmVzb3VyY2UgcmVxdWVzdHMuCisgICAgICAgIC8vIEl0IGlzIHJlbW92ZWQgYnkgLVtX
ZWJEYXRhU291cmNlIGRlYWxsb2NdLgorICAgICAgICBhZGRRTFByZXZpZXdDb252ZXJ0ZXJXaXRo
RmlsZUZvclVSTChwcmV2aWV3UmVxdWVzdFVSTCwgbV9jb252ZXJ0ZXIuZ2V0KCksIG5pbCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBRdWlja0xvb2sgY29uc3VtZXMgdGhlIGlu
Y29taW5nIGRhdGEsIHdlIG5lZWQgdG8gc3RvcmUgaXQgc28gdGhhdCBpdCBjYW4gYmUgb3BlbmVk
IGluIHRoZSBoYW5kbGluZyBhcHBsaWNhdGlvbi4KKyAgICBOU1N0cmluZyAqcXVpY2tsb29rQ29u
dGVudFBhdGggPSBjcmVhdGVUZW1wb3JhcnlGaWxlRm9yUXVpY2tMb29rKFttX2NvbnZlcnRlci5n
ZXQoKSBwcmV2aWV3RmlsZU5hbWVdKTsKKyAgICBMT0coTmV0d29yaywgIlF1aWNrTG9va0hhbmRs
ZTo6UXVpY2tMb29rSGFuZGxlKCkgLSBxdWlja2xvb2tDb250ZW50UGF0aDogJXMiLCBbcXVpY2ts
b29rQ29udGVudFBhdGggVVRGOFN0cmluZ10pOworCisgICAgaWYgKHF1aWNrbG9va0NvbnRlbnRQ
YXRoKSB7CisgICAgICAgIG1fcXVpY2tsb29rRmlsZUhhbmRsZSA9IGFkb3B0TlMoW1tOU0ZpbGVI
YW5kbGUgZmlsZUhhbmRsZUZvcldyaXRpbmdBdFBhdGg6cXVpY2tsb29rQ29udGVudFBhdGhdIHJl
dGFpbl0pOworICAgICAgICAvLyBXZSBtdXN0IHVzZSB0aGUgZ2VuZXJhdGVkIFVSTCBmcm9tIG1f
Y29udmVydGVyJ3MgTlNVUkxSZXF1ZXN0IG9iamVjdAorICAgICAgICAvLyBzbyB0aGF0IGl0IG1h
dGNoZXMgdGhlIFVSTCByZW1vdmVkIGZyb20gLVtXZWJEYXRhU291cmNlIGRlYWxsb2NdLgorICAg
ICAgICBhZGRRTFByZXZpZXdDb252ZXJ0ZXJXaXRoRmlsZUZvclVSTChwcmV2aWV3UmVxdWVzdFVS
TCwgbV9jb252ZXJ0ZXIuZ2V0KCksIHF1aWNrbG9va0NvbnRlbnRQYXRoKTsKKyAgICB9Cit9CisK
K1Bhc3NPd25QdHI8UXVpY2tMb29rSGFuZGxlPiBRdWlja0xvb2tIYW5kbGU6OmNyZWF0ZShSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBOU1VSTENvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIE5TVVJMUmVz
cG9uc2UgKm5zUmVzcG9uc2UsIGlkIGRlbGVnYXRlKQoreworICAgIGlmIChoYW5kbGUtPmZpcnN0
UmVxdWVzdCgpLmlzTWFpblJlc291cmNlUmVxdWVzdCgpICYmIFtXZWJDb3JlOjpRTFByZXZpZXdH
ZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWluc09iamVjdDpbbnNSZXNwb25zZSBNSU1F
VHlwZV1dKQorICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFF1aWNrTG9va0hhbmRsZShoYW5k
bGUsIGNvbm5lY3Rpb24sIG5zUmVzcG9uc2UsIGRlbGVnYXRlKSk7CisKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworI2lmIFVTRShDRk5FVFdPUkspCitQYXNzT3duUHRyPFF1aWNrTG9va0hhbmRs
ZT4gUXVpY2tMb29rSGFuZGxlOjpjcmVhdGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgU3luY2hy
b25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKiBjb25uZWN0aW9uRGVs
ZWdhdGUsIENGVVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25zZSkKK3sKKyAgICBpZiAoaGFuZGxlLT5m
aXJzdFJlcXVlc3QoKS5pc01haW5SZXNvdXJjZVJlcXVlc3QoKSAmJiBbV2ViQ29yZTo6UUxQcmV2
aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzU2V0KCkgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICop
Q0ZVUkxSZXNwb25zZUdldE1JTUVUeXBlKGNmUmVzcG9uc2UpXSkgeworICAgICAgICBOU1VSTFJl
c3BvbnNlICpuc1Jlc3BvbnNlID0gW05TVVJMUmVzcG9uc2UgX3Jlc3BvbnNlV2l0aENGVVJMUmVz
cG9uc2U6Y2ZSZXNwb25zZV07CisgICAgICAgIFdlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGUg
KmRlbGVnYXRlID0gW1tbV2ViUXVpY2tMb29rSGFuZGxlQXNEZWxlZ2F0ZSBhbGxvY10gaW5pdFdp
dGhDb25uZWN0aW9uRGVsZWdhdGU6Y29ubmVjdGlvbkRlbGVnYXRlXSBhdXRvcmVsZWFzZV07Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUXVpY2tMb29rSGFuZGxlKGhhbmRsZSwgbmlsLCBu
c1Jlc3BvbnNlLCBkZWxlZ2F0ZSkpOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQor
CitDRlVSTFJlc3BvbnNlUmVmIFF1aWNrTG9va0hhbmRsZTo6Y2ZSZXNwb25zZSgpCit7CisgICAg
cmV0dXJuIFttX25zUmVzcG9uc2UgX0NGVVJMUmVzcG9uc2VdOworfQorI2VuZGlmCisKK05TVVJM
UmVzcG9uc2UgKlF1aWNrTG9va0hhbmRsZTo6bnNSZXNwb25zZSgpCit7CisgICAgcmV0dXJuIG1f
bnNSZXNwb25zZTsKK30KKworYm9vbCBRdWlja0xvb2tIYW5kbGU6OmRpZFJlY2VpdmVEYXRhQXJy
YXkoQ0ZBcnJheVJlZiBjZkRhdGFBcnJheSkKK3sKKyAgICBOU0FycmF5ICogY29uc3QgZGF0YUFy
cmF5ID0gKE5TQXJyYXkgKiljZkRhdGFBcnJheTsKKworICAgIGlmIChtX2ZpbmlzaGVkTG9hZGlu
Z0RhdGFJbnRvQ29udmVydGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMT0coTmV0
d29yaywgIlF1aWNrTG9va0hhbmRsZTo6ZGlkUmVjZWl2ZURhdGFBcnJheSgpIik7CisgICAgW21f
Y29udmVydGVyLmdldCgpIGFwcGVuZERhdGFBcnJheTpkYXRhQXJyYXldOworICAgIGlmIChtX3F1
aWNrbG9va0ZpbGVIYW5kbGUpIHsKKyAgICAgICAgZm9yIChOU0RhdGEgKmRhdGEgaW4gZGF0YUFy
cmF5KQorICAgICAgICAgICAgW21fcXVpY2tsb29rRmlsZUhhbmRsZS5nZXQoKSB3cml0ZURhdGE6
ZGF0YV07CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFF1aWNrTG9va0hhbmRs
ZTo6ZGlkUmVjZWl2ZURhdGEoQ0ZEYXRhUmVmIGNmRGF0YSkKK3sKKyAgICBOU0RhdGEgKiBjb25z
dCBkYXRhID0gKE5TRGF0YSAqKWNmRGF0YTsKKworICAgIGlmIChtX2ZpbmlzaGVkTG9hZGluZ0Rh
dGFJbnRvQ29udmVydGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMT0coTmV0d29y
aywgIlF1aWNrTG9va0hhbmRsZTo6ZGlkUmVjZWl2ZURhdGEoKSIpOworICAgIFttX2NvbnZlcnRl
ci5nZXQoKSBhcHBlbmREYXRhOmRhdGFdOworICAgIGlmIChtX3F1aWNrbG9va0ZpbGVIYW5kbGUp
CisgICAgICAgIFttX3F1aWNrbG9va0ZpbGVIYW5kbGUuZ2V0KCkgd3JpdGVEYXRhOmRhdGFdOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFF1aWNrTG9va0hhbmRsZTo6ZGlkRmluaXNoTG9h
ZGluZygpCit7CisgICAgaWYgKG1fZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIExPRyhOZXR3b3JrLCAiUXVpY2tMb29rSGFuZGxl
OjpkaWRGaW5pc2hMb2FkaW5nKCkiKTsKKyAgICBtX2ZpbmlzaGVkTG9hZGluZ0RhdGFJbnRvQ29u
dmVydGVyID0gWUVTOworICAgIFttX2NvbnZlcnRlci5nZXQoKSBmaW5pc2hlZEFwcGVuZGluZ0Rh
dGFdOworICAgIGlmIChtX3F1aWNrbG9va0ZpbGVIYW5kbGUpCisgICAgICAgIFttX3F1aWNrbG9v
a0ZpbGVIYW5kbGUuZ2V0KCkgY2xvc2VGaWxlXTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBRdWlja0xvb2tIYW5kbGU6OmRpZEZhaWwoKQoreworICAgIExPRyhOZXR3b3JrLCAiUXVpY2tM
b29rSGFuZGxlOjpkaWRGYWlsKCkiKTsKKyAgICBtX3F1aWNrbG9va0ZpbGVIYW5kbGUgPSBudWxs
cHRyOworICAgIC8vIHJlbW92ZVFMUHJldmlld0NvbnZlcnRlckZvclVSTCBkZWxldGVzIHRoZSB0
ZW1wb3JhcnkgZmlsZSBjcmVhdGVkLgorICAgIHJlbW92ZVFMUHJldmlld0NvbnZlcnRlckZvclVS
TChbbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLm5zVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBC
b2R5KSBVUkxdKTsKKyAgICBbbV9jb252ZXJ0ZXIuZ2V0KCkgZmluaXNoQ29udmVydGluZ107Cisg
ICAgbV9jb252ZXJ0ZXIgPSBudWxscHRyOworfQorCitRdWlja0xvb2tIYW5kbGU6On5RdWlja0xv
b2tIYW5kbGUoKQoreworICAgIExPRyhOZXR3b3JrLCAiUXVpY2tMb29rSGFuZGxlOjp+UXVpY2tM
b29rSGFuZGxlKCkiKTsKKyAgICBpZiAobV9xdWlja2xvb2tGaWxlSGFuZGxlKSB7CisgICAgICAg
IG1fcXVpY2tsb29rRmlsZUhhbmRsZSA9IG51bGxwdHI7CisgICAgICAgIHJlbW92ZVFMUHJldmll
d0NvbnZlcnRlckZvclVSTChbbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLm5zVVJMUmVxdWVzdChE
b05vdFVwZGF0ZUhUVFBCb2R5KSBVUkxdKTsKKyAgICB9CisgICAgbV9jb252ZXJ0ZXIgPSBudWxs
cHRyOworCisgICAgW21fZGVsZWdhdGUuZ2V0KCkgY2xlYXJIYW5kbGVdOworfQorCit9CisKKyNl
bmRpZiAvLyBVU0UoUVVJQ0tfTE9PSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvaW9zL1Jlc291cmNlSGFuZGxlSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9pb3MvUmVzb3VyY2VIYW5kbGVJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjY3Yjli
MTg2Njc0NDBkZWJmZWZkYTE4MDViODRjYjU0Nzg0YzU3OQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1Jlc291cmNlSGFuZGxlSU9TLm1tCkBA
IC0wLDAgKzEsMzkgQEAKKy8vCisvLyAgUmVzb3VyY2VIYW5kbGVJUGhvbmUubW0KKy8vICBXZWJD
b3JlCisvLworLy8gIENvcHlyaWdodCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbC5oIgorCisjaWYgVVNFKENGTkVUV09SSykKKworI2ltcG9ydCA8Q0ZOZXR3b3JrL0NGU29j
a2V0U3RyZWFtUHJpdi5oPgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTFJlcXVlc3RQcml2YXRl
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0NGTXV0YWJsZURpY3Rpb25hcnlSZWYgUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZVNTTFByb3BlcnRp
ZXNGcm9tTlNVUkxSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAg
ICBOU1N0cmluZyAqaG9zdCA9IHJlcXVlc3QudXJsKCkuaG9zdCgpOworICAgIE5TQXJyYXkgKmNl
cnRBcnJheSA9IFtOU1VSTFJlcXVlc3QgYWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9y
SG9zdDpob3N0XTsKKyAgICBCT09MIGFsbG93c0FueUNlcnRpZmljYXRlID0gW05TVVJMUmVxdWVz
dCBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlRm9ySG9zdDpob3N0XTsKKyAgICBpZiAoIWNlcnRB
cnJheSAmJiAhYWxsb3dzQW55Q2VydGlmaWNhdGUpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBzc2xQcm9wcyA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFi
bGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgaWYgKGNlcnRBcnJheSkK
KyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoc3NsUHJvcHMsIF9rQ0ZTdHJlYW1TU0xUcnVz
dGVkTGVhZkNlcnRpZmljYXRlcywgKENGVHlwZVJlZikgY2VydEFycmF5KTsKKworICAgIGlmIChh
bGxvd3NBbnlDZXJ0aWZpY2F0ZSkKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoc3NsUHJv
cHMsIGtDRlN0cmVhbVNTTFZhbGlkYXRlc0NlcnRpZmljYXRlQ2hhaW4sIGtDRkJvb2xlYW5GYWxz
ZSk7CisgICAgcmV0dXJuIHNzbFByb3BzOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvV2ViQ29yZVVSTFJlc3BvbnNlSU9T
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9XZWJDb3JlVVJMUmVzcG9u
c2VJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hMDBkZDkwYjYwMmExNmJjMmRhYzg0ZTYwYTFmYWQ3MGIyZTU5
NDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9p
b3MvV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
ZWJDb3JlVVJMUmVzcG9uc2VJT1NfaAorI2RlZmluZSBXZWJDb3JlVVJMUmVzcG9uc2VJT1NfaAor
CisjaWZkZWYgX19PQkpDX18KKyNpbmNsdWRlICJXZWJDb3JlVVJMUmVzcG9uc2UuaCIKKyNlbmRp
ZgorCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoUVVJQ0tfTE9PSykK
KyAgICAKK2lubGluZSBib29sIHNob3VsZFVzZVF1aWNrTG9va0Zvck1JTUVUeXBlKGNvbnN0IFdU
Rjo6U3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAoKCFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUobWltZVR5cGUpICAgICAgIC8vIGlnbm9yZSBzdXBwb3J0
ZWQgbm9uLWltYWdlIE1JTUUgdHlwZXMKKyAgICAgICAgICYmICFNSU1FVHlwZVJlZ2lzdHJ5Ojpp
c1N1cHBvcnRlZEltYWdlTUlNRVR5cGUobWltZVR5cGUpICAgICAgIC8vIGlnbm9yZSBzdXBwb3J0
ZWQgaW1hZ2UgTUlNRSB0eXBlcworICAgICAgICAgJiYgbWltZVR5cGUgIT0gInRleHQvY3NzIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGNzcworICAgICAg
ICAgJiYgbWltZVR5cGUgIT0gImFwcGxpY2F0aW9uL3BkZiIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaWdub3JlIHBkZgorICAgICAgICAgKQorICAgICAgICB8fCBtaW1lVHlwZSA9
PSAidGV4dC9wbGFpbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0
IGtlZXAgdGV4dC9wbGFpbiB3aGljaCBpcyB0b28gZ2VuZXJpYyBhbmQgY2FuIGhpZGUgc29tZXRo
aW5nCisgICAgICAgIHx8IChtaW1lVHlwZSA9PSAidGV4dC94bWwiIHx8IG1pbWVUeXBlID09ICJh
cHBsaWNhdGlvbi94bWwiKSkgICAvLyBhbmQga2VlcCBYTUwgdHlwZXMgZm9yIC5tb2JpbGVjb25m
aWcgZmlsZXMKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworI2VuZGlmIC8vIFVTRShRVUlDS19MT09LKQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXZWJDb3JlVVJMUmVzcG9uc2VJT1NfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvV2ViQ29yZVVSTFJlc3BvbnNl
SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvV2ViQ29yZVVSTFJl
c3BvbnNlSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlN2NiZGYyNTY0MzQ0NWEyZWQwYzFhNWFmNDQ4YWE2
ZjI5NTY2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2lvcy9XZWJDb3JlVVJMUmVzcG9uc2VJT1MubW0KQEAgLTAsMCArMSw4MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJDb3JlVVJMUmVzcG9uc2VJT1MuaCIKKyNpbXBv
cnQgIlVUSVV0aWxpdGllcy5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgor
CisjaW1wb3J0ICJRdWlja0xvb2suaCIKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0
IDxNb2JpbGVDb3JlU2VydmljZXMvTW9iaWxlQ29yZVNlcnZpY2VzLmg+CisKK1NPRlRfTElOS19G
UkFNRVdPUksoTW9iaWxlQ29yZVNlcnZpY2VzKQorCitTT0ZUX0xJTksoTW9iaWxlQ29yZVNlcnZp
Y2VzLCBVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9yVGFnLCBDRlN0cmluZ1JlZiwg
KENGU3RyaW5nUmVmIGluVGFnQ2xhc3MsIENGU3RyaW5nUmVmIGluVGFnLCBDRlN0cmluZ1JlZiBp
bkNvbmZvcm1pbmdUb1VUSSksIChpblRhZ0NsYXNzLCBpblRhZywgaW5Db25mb3JtaW5nVG9VVEkp
KQorCitTT0ZUX0xJTktfQ09OU1RBTlQoTW9iaWxlQ29yZVNlcnZpY2VzLCBrVVRUYWdDbGFzc0Zp
bGVuYW1lRXh0ZW5zaW9uLCBDRlN0cmluZ1JlZikKKworI2RlZmluZSBrVVRUYWdDbGFzc0ZpbGVu
YW1lRXh0ZW5zaW9uIGdldGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24oKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgYWRqdXN0TUlNRVR5cGVJZk5lY2Vzc2FyeShDRlVSTFJlc3Bv
bnNlUmVmIGNmUmVzcG9uc2UpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBtaW1lVHlw
ZSA9IHdrR2V0Q0ZVUkxSZXNwb25zZU1JTUVUeXBlKGNmUmVzcG9uc2UpOworICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gdXBkYXRlZE1JTUVUeXBlID0gbWltZVR5cGU7CisgICAgaWYgKCF1cGRh
dGVkTUlNRVR5cGUpCisgICAgICAgIHVwZGF0ZWRNSU1FVHlwZSA9IGRlZmF1bHRNSU1FVHlwZSgp
LmNyZWF0ZUNGU3RyaW5nKCk7CisKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICAvLyBXZSBtdXN0
IGVuc3VyZSB0aGF0IHRoZSBNSU1FIHR5cGUgaXMgY29ycmVjdCwgc28gdGhhdCBRdWlja0xvb2sn
cyB3ZWIgcGx1Z2luIGlzIGNhbGxlZCB3aGVuIG5lZWRlZC4KKyAgICAvLyBXZSBmaWx0ZXIgdGhl
IGJhc2ljIE1JTUUgdHlwZXMgc28gdGhhdCB3ZSBkb24ndCBkbyB1bm5lY2Vzc2FyeSB3b3JrIGlu
IHN0YW5kYXJkIGJyb3dzaW5nIHNpdHVhdGlvbnMuCisgICAgaWYgKHNob3VsZFVzZVF1aWNrTG9v
a0Zvck1JTUVUeXBlKChOU1N0cmluZyAqKXVwZGF0ZWRNSU1FVHlwZS5nZXQoKSkpIHsKKyAgICAg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzdWdnZXN0ZWRGaWxlbmFtZSA9IGFkb3B0Q0Yod2tD
b3B5Q0ZVUkxSZXNwb25zZVN1Z2dlc3RlZEZpbGVuYW1lKGNmUmVzcG9uc2UpKTsKKyAgICAgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBxdWlja0xvb2tNSU1FVHlwZSA9IGFkb3B0Q0YoKENGU3Ry
aW5nUmVmKVFMVHlwZUNvcHlCZXN0TWltZVR5cGVGb3JGaWxlTmFtZUFuZE1pbWVUeXBlKChOU1N0
cmluZyAqKXN1Z2dlc3RlZEZpbGVuYW1lLmdldCgpLCAoTlNTdHJpbmcgKiltaW1lVHlwZS5nZXQo
KSkpOworICAgICAgICBpZiAoIXF1aWNrTG9va01JTUVUeXBlKSB7CisgICAgICAgICAgICBDRlVS
TFJlZiB1cmwgPSB3a0dldENGVVJMUmVzcG9uc2VVUkwoY2ZSZXNwb25zZSk7CisgICAgICAgICAg
ICBOU1VSTCAqbnNVUkwgPSAoTlNVUkwgKil1cmw7CisgICAgICAgICAgICBpZiAoW25zVVJMIGlz
RmlsZVVSTF0pIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGV4dGVu
c2lvbiA9IGFkb3B0Q0YoQ0ZVUkxDb3B5UGF0aEV4dGVuc2lvbih1cmwpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoZXh0ZW5zaW9uKSB7CisgICAgICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gdXRpID0gYWRvcHRDRihVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9y
VGFnKGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24sIGV4dGVuc2lvbi5nZXQoKSwgbnVsbHB0
cikpOworICAgICAgICAgICAgICAgICAgICBxdWlja0xvb2tNSU1FVHlwZSA9IG1pbWVUeXBlRnJv
bVVUSVRyZWUodXRpLmdldCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAocXVpY2tMb29rTUlNRVR5cGUpCisgICAgICAgICAgICB1
cGRhdGVkTUlNRVR5cGUgPSBxdWlja0xvb2tNSU1FVHlwZTsKKyAgICB9CisjZW5kaWYgLy8gVVNF
KFFVSUNLX0xPT0spCisgICAgaWYgKCFtaW1lVHlwZSB8fCBDRlN0cmluZ0NvbXBhcmUobWltZVR5
cGUuZ2V0KCksIHVwZGF0ZWRNSU1FVHlwZS5nZXQoKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2
ZSkgIT0ga0NGQ29tcGFyZUVxdWFsVG8pCisgICAgICAgIHdrU2V0Q0ZVUkxSZXNwb25zZU1JTUVU
eXBlKGNmUmVzcG9uc2UsIHVwZGF0ZWRNSU1FVHlwZS5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9tYWMvQXV0aGVudGljYXRpb25NYWMubW0KaW5kZXggMWVjNzc3N2QwMDgwZjIyNDNlN2Y3MDI0
NDcwZmJlMzhhNjFlMzAwNy4uYzljMzBmN2I2NjBjZjQxYzMxMjEwNzFkZDRlYzU1YWY5MTIzZTdj
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQXV0aGVu
dGljYXRpb25NYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMv
QXV0aGVudGljYXRpb25NYWMubW0KQEAgLTQzLDcgKzQzLDExIEBACiBAZW5kCiAKIEBpbnRlcmZh
Y2UgTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAoRGV0YWlscykKKyNpZiBQTEFURk9STShJ
T1MpCisrKE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKilfY3JlYXRlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VGb3JDRkF1dGhDaGFsbGVuZ2U6KENGVVJMQXV0aENoYWxsZW5nZVJlZiljZkNo
YWxsZW5nZSBzZW5kZXI6KGlkIDxOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2VuZGVyPilz
ZW5kZXI7CisjZWxzZQogKyhOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopX2F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlRm9yQ0ZBdXRoQ2hhbGxlbmdlOihDRlVSTEF1dGhDaGFsbGVuZ2VSZWYp
Y2ZDaGFsbGVuZ2Ugc2VuZGVyOihpZCA8TlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRl
cj4pc2VuZGVyOworI2VuZGlmCiBAZW5kCiAKIEBpbnRlcmZhY2UgTlNVUkxDcmVkZW50aWFsIChE
ZXRhaWxzKQpAQCAtMTU0LDcgKzE1OCwxMSBAQCBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
ICptYWMoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNvcmVDaGFsbGVuZ2UpCiAgICAg
aWYgKCFhdXRoQ2hhbGxlbmdlKQogICAgICAgICBhdXRoQ2hhbGxlbmdlID0gYWRvcHRDRihjcmVh
dGVDRihjb3JlQ2hhbGxlbmdlKSk7CiAgICAgW2NoYWxsZW5nZVNlbmRlci5nZXQoKSBzZXRDRkNo
YWxsZW5nZTphdXRoQ2hhbGxlbmdlLmdldCgpXTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0
dXJuIFtbTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBfY3JlYXRlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VGb3JDRkF1dGhDaGFsbGVuZ2U6YXV0aENoYWxsZW5nZS5nZXQoKSBzZW5kZXI6Y2hh
bGxlbmdlU2VuZGVyLmdldCgpXSBhdXRvcmVsZWFzZV07CisjZWxzZQogICAgIHJldHVybiBbW05T
VVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgX2F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRm9yQ0ZB
dXRoQ2hhbGxlbmdlOmF1dGhDaGFsbGVuZ2UuZ2V0KCkgc2VuZGVyOmNoYWxsZW5nZVNlbmRlci5n
ZXQoKV0gYXV0b3JlbGVhc2VdOworI2VuZGlmCiB9CiAKIE5TVVJMQ3JlZGVudGlhbCAqbWFjKGNv
bnN0IENyZWRlbnRpYWwmIGNvcmVDcmVkZW50aWFsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ3JlZGVudGlhbFN0b3JhZ2VNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbQppbmRl
eCBhYTVlN2FmZjI5NDUzMzg1YmM4MzFhMWNiN2Q0ZTdjOGM4YmM4NzNmLi4wMTEzMTViMjhiNDQ1
YjliZDcyMjVkZjZkNTk2NGYwMThiNzlkNzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbQpAQCAt
MzksNiArMzksMTcgQEAgQ3JlZGVudGlhbCBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0RnJvbVBlcnNp
c3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHIKICAgICByZXR1cm4gY3JlZGVu
dGlhbCA/IGNvcmUoY3JlZGVudGlhbCkgOiBDcmVkZW50aWFsKCk7CiB9CiAKKyNpZiBQTEFURk9S
TShJT1MpCit2b2lkIENyZWRlbnRpYWxTdG9yYWdlOjpzYXZlVG9QZXJzaXN0ZW50U3RvcmFnZShj
b25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSwgY29uc3QgQ3JlZGVudGlhbCYg
Y3JlZGVudGlhbCkKK3sKKyAgICBpZiAoY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpID09IENyZWRl
bnRpYWxQZXJzaXN0ZW5jZU5vbmUpIHsKKyAgICAgICAgQ3JlZGVudGlhbCBzZXNzaW9uQ3JlZGVu
dGlhbChjcmVkZW50aWFsLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uKTsKKyAgICAg
ICAgW1tOU1VSTENyZWRlbnRpYWxTdG9yYWdlIHNoYXJlZENyZWRlbnRpYWxTdG9yYWdlXSBzZXRE
ZWZhdWx0Q3JlZGVudGlhbDptYWMoc2Vzc2lvbkNyZWRlbnRpYWwpIGZvclByb3RlY3Rpb25TcGFj
ZTptYWMocHJvdGVjdGlvblNwYWNlKV07CisgICAgfSBlbHNlCisgICAgICAgIFtbTlNVUkxDcmVk
ZW50aWFsU3RvcmFnZSBzaGFyZWRDcmVkZW50aWFsU3RvcmFnZV0gc2V0RGVmYXVsdENyZWRlbnRp
YWw6bWFjKGNyZWRlbnRpYWwpIGZvclByb3RlY3Rpb25TcGFjZTptYWMocHJvdGVjdGlvblNwYWNl
KV07Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gIVVT
RShDRk5FVFdPUkspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L21hYy9SZXNvdXJjZUVycm9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9tYWMvUmVzb3VyY2VFcnJvck1hYy5tbQppbmRleCBjZWY2Y2RmMzQ2ZTBkMjNjN2RmMmJjNTcw
ZDBhMmFjNjZmMTRkNDJlLi5jYzdmNDU0MTY2ZDZkMWRlN2U0NWU3OGM5MWI2ZDcyZmZiMWQ5YzQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJj
ZUVycm9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jl
c291cmNlRXJyb3JNYWMubW0KQEAgLTMxLDEwICszMSwxNDggQEAKICNpbXBvcnQgPENvcmVGb3Vu
ZGF0aW9uL0NGRXJyb3IuaD4KICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogCisj
aWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8Q0ZOZXR3b3JrL0NGU29ja2V0U3RyZWFtUHJpdi5o
PgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTEVycm9yLmg+CisjZW5kaWYKKwogQGludGVyZmFj
ZSBOU0Vycm9yIChXZWJFeHRyYXMpCiAtIChOU1N0cmluZyAqKV93ZWJfbG9jYWxpemVkRGVzY3Jp
cHRpb247CiBAZW5kCiAKKyNpZiBQTEFURk9STShJT1MpCisKKy8vIFRoaXMgd29ya2Fyb3VuZCBj
b2RlIGV4aXN0cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgY2FsbCB0cmFuc2xhdGVUb0NGRXJyb3Ig
aW4gRm91bmRhdGlvbi4gT25jZSB3ZQorLy8gaGF2ZSB0aGF0LCB3ZSBjYW4gcmVtb3ZlIHRoaXMg
Y29kZS4gPHJkYXI6Ly9wcm9ibGVtLzk4Mzc0MTU+IE5lZWQgU1BJIGZvciB0cmFuc2xhdGVDRkVy
cm9yCisvLyBUaGUgY29kZSBpcyBtb3N0bHkgaWRlbnRpY2FsIHRvIEZvdW5kYXRpb24gLSBJIGNo
YW5nZWQgdGhlIGNsYXNzIG5hbWUgYW5kIGZpeGVkIG1pbm9yIGNvbXBpbGUgZXJyb3JzLgorLy8g
V2UgbmVlZCB0aGlzIGJlY2F1c2UgY2xpZW50IGNvZGUgKFNhZmFyaSkgd2FudHMgYW4gTlNFcnJv
ciB3aXRoIE5TVVJMRXJyb3JEb21haW4gYXMgaXRzIGRvbWFpbi4KKy8vIFRoZSBGb3VuZGF0aW9u
IGNvZGUgYmVsb3cgZG9lcyB0aGF0IGFuZCBzZXRzIHVwIGFwcHJvcHJpYXRlIGNlcnRpZmljYXRl
IGtleXMgaW4gdGhlIE5TRXJyb3IuCisKK0BpbnRlcmZhY2UgV2ViQ3VzdG9tTlNVUkxFcnJvciA6
IE5TRXJyb3IKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViQ3VzdG9tTlNVUkxFcnJvcgor
CitzdGF0aWMgTlNEaWN0aW9uYXJ5KiBkaWN0aW9uYXJ5VGhhdENhbkNvZGUoTlNEaWN0aW9uYXJ5
KiBzcmMpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBtYWtlcyBhIGNvcHkgb2YgaW5wdXQgZGlj
dGlvbmFyeSwgbW9kaWZpZXMgaXQgc3VjaCB0aGF0IGl0ICJzaG91bGQiIChhcyBtdWNoIGFzIHdl
IGNhbiBoZWxwIGl0KQorICAgIC8vIG5vdCBjb250YWluIGFueSBvYmplY3RzIHRoYXQgZG8gbm90
IGNvbmZvcm0gdG8gTlNDb2RpbmcgcHJvdG9jb2wsIGFuZCByZXR1cm5zIGl0IGF1dG9yZWxlYXNl
ZC4KKworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIGRzdCA9IFtzcmMgbXV0YWJsZUNvcHldOwor
CisgICAgLy8gS2lsbCB0aGUga25vd24gcHJvYmxlbSBlbnRyaWVzLgorICAgIFtkc3QgcmVtb3Zl
T2JqZWN0Rm9yS2V5OkAiTlNFcnJvclBlZXJDZXJ0aWZpY2F0ZUNoYWluS2V5Il07IC8vIE5TQXJy
YXkgd2l0aCBTZWNDZXJ0aWZpY2F0ZVJlZiBvYmplY3RzCisgICAgW2RzdCByZW1vdmVPYmplY3RG
b3JLZXk6QCJOU0Vycm9yQ2xpZW50Q2VydGlmaWNhdGVDaGFpbktleSJdOyAvLyBOU0FycmF5IHdp
dGggU2VjQ2VydGlmaWNhdGVSZWYgb2JqZWN0cworICAgIFtkc3QgcmVtb3ZlT2JqZWN0Rm9yS2V5
Ok5TVVJMRXJyb3JGYWlsaW5nVVJMUGVlclRydXN0RXJyb3JLZXldOyAvLyBTZWNUcnVzdFJlZiBv
YmplY3QKKyAgICBbZHN0IHJlbW92ZU9iamVjdEZvcktleTpOU1VuZGVybHlpbmdFcnJvcktleV07
IC8vIChJbW11dGFibGUpIENGRXJyb3IgY29udGFpbmluZyBrQ0YgZXF1aXZhbGVudCBvZiB0aGUg
YWJvdmUKKyAgICAvLyBXZSBjb3VsZCByZWNvbnN0aXR1dGUgdGhpcyBidXQgaXQncyBtb3JlIHRy
b3VibGUgdGhhbiBpdCdzIHdvcnRoCisKKyAgICAvLyBOb24tY29tcHJlaGVuc2l2ZSBzYWZldHkg
Y2hlY2s6ICBLaWxsIHRvcC1sZXZlbCBkaWN0aW9uYXJ5IGVudHJpZXMgdGhhdCBkb24ndCBjb25m
b3JtIHRvIE5TQ29kaW5nLgorICAgIC8vIFdlIG1heSBoaXQgb25lcyB3ZSBqdXN0IHJlbW92ZWQs
IGJ1dCB0aGF0J3MgZmluZS4KKyAgICAvLyBXZSBkb24ndCBoYW5kbGUgYXJiaXRyYXJ5IG9iamVj
dHMgdGhhdCBjbGllbnRzIGhhdmUgc3R1ZmZlZCBpbnRvIHRoZSBkaWN0aW9uYXJ5LCBzaW5jZSB3
ZSBtYXkgbm90IGtub3cgaG93IHRvCisgICAgLy8gZ2V0IGF0IGl0cyBjb25lbnRzIChlLmcuLCBh
IENGRXJyb3Igb2JqZWN0IC0tIHlvdSdkIGhhdmUgdG8ga25vdyBpdCBoYWQgYSB1c2VySW5mbyBk
aWN0aW9uYXJ5IGFuZCBraWxsIHRoaW5ncworICAgIC8vIGluc2lkZSBpdCkuCisgICAgW3NyYyBl
bnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihpZCBrZXksIGlkIG9iaiwgQk9PTCop
IHsKKyAgICAgICAgaWYgKCEgW29iaiBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKE5TQ29k
aW5nKV0pIHsKKyAgICAgICAgICAgIFtkc3QgcmVtb3ZlT2JqZWN0Rm9yS2V5OmtleV07CisgICAg
ICAgIH0KKyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRyaWxsIGRvd24gaW50byBzdWJkaWN0
aW9uYXJpZXMsIGJ1dCBpdCBzZWVtcyBtb3JlIHRyb3VibGUgdGhhbiBpdCdzIHdvcnRoCisgICAg
fV07CisKKyAgICByZXR1cm4gW2RzdCBhdXRvcmVsZWFzZV07Cit9CisKKy0gKHZvaWQpZW5jb2Rl
V2l0aENvZGVyOihOU0NvZGVyICopY29kZXIKK3sKKyAgICBOU0RpY3Rpb25hcnkqIG5ld1VzZXJJ
bmZvID0gZGljdGlvbmFyeVRoYXRDYW5Db2RlKFtzZWxmIHVzZXJJbmZvXSk7CisKKyAgICBbW05T
RXJyb3IgZXJyb3JXaXRoRG9tYWluOltzZWxmIGRvbWFpbl0gY29kZTpbc2VsZiBjb2RlXSB1c2Vy
SW5mbzpuZXdVc2VySW5mb10gZW5jb2RlV2l0aENvZGVyOmNvZGVyXTsKK30KKworQGVuZAorCisK
KyNpZiBVU0UoQ0ZORVRXT1JLKQorc3RhdGljIE5TRXJyb3IgKk5TRXJyb3JGcm9tQ0ZFcnJvcihD
RkVycm9yUmVmIGNmRXJyb3IsIE5TVVJMICp1cmwpCit7CisgICAgQ0ZJbmRleCBlcnJDb2RlID0g
Q0ZFcnJvckdldENvZGUoY2ZFcnJvcik7CisgICAgaWYgKENGRXF1YWwoQ0ZFcnJvckdldERvbWFp
bihjZkVycm9yKSwga0NGRXJyb3JEb21haW5DRk5ldHdvcmspICYmIGVyckNvZGUgPD0ga0NGVVJM
RXJyb3JVbmtub3duICYmIGVyckNvZGUgPiAtNDAwMCkgeworICAgICAgICAvLyBUaGlzIGlzIGFu
IFVSTCBlcnJvciBhbmQgbmVlZHMgdG8gYmUgdHJhbnNsYXRlZCB0byB0aGUgTlNVUkxFcnJvckRv
bWFpbgorICAgICAgICBpZCBrZXlzWzEwXSwgdmFsdWVzWzEwXTsKKyAgICAgICAgQ0ZEaWN0aW9u
YXJ5UmVmIHVzZXJJbmZvID0gQ0ZFcnJvckNvcHlVc2VySW5mbyhjZkVycm9yKTsKKyAgICAgICAg
TlNFcnJvciAqcmVzdWx0OworICAgICAgICBOU0ludGVnZXIgY291bnQgPSAwOworCisgICAgICAg
IGlmICh1cmwpIHsKKyAgICAgICAgICAgIGtleXNbY291bnRdID0gTlNVUkxFcnJvckZhaWxpbmdV
UkxFcnJvcktleTsKKyAgICAgICAgICAgIHZhbHVlc1tjb3VudF0gPSB1cmw7CisgICAgICAgICAg
ICBjb3VudCArKzsKKworICAgICAgICAgICAga2V5c1tjb3VudF0gPSBOU1VSTEVycm9yRmFpbGlu
Z1VSTFN0cmluZ0Vycm9yS2V5OworICAgICAgICAgICAgdmFsdWVzW2NvdW50XSA9IFt1cmwgYWJz
b2x1dGVTdHJpbmddOworICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKworICAgICAg
ICB2YWx1ZXNbY291bnRdID0gKGlkKUNGRGljdGlvbmFyeUdldFZhbHVlKHVzZXJJbmZvLCBrQ0ZF
cnJvckxvY2FsaXplZERlc2NyaXB0aW9uS2V5KTsKKyAgICAgICAgaWYgKHZhbHVlc1tjb3VudF0p
IHsKKyAgICAgICAgICAgIGtleXNbY291bnRdID0gTlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleTsK
KyAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICB9CisKKyAgICAgICAgdmFsdWVzW2NvdW50
XSA9IChpZClDRkRpY3Rpb25hcnlHZXRWYWx1ZSh1c2VySW5mbywga0NGRXJyb3JMb2NhbGl6ZWRG
YWlsdXJlUmVhc29uS2V5KTsKKyAgICAgICAgaWYgKHZhbHVlc1tjb3VudF0pIHsKKyAgICAgICAg
ICAgIGtleXNbY291bnRdID0gTlNMb2NhbGl6ZWRGYWlsdXJlUmVhc29uRXJyb3JLZXk7CisgICAg
ICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfQorCisgICAgICAgIHZhbHVlc1tjb3VudF0gPSAo
aWQpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUodXNlckluZm8sIGtDRkVycm9yTG9jYWxpemVkUmVjb3Zl
cnlTdWdnZXN0aW9uS2V5KTsKKyAgICAgICAgaWYgKHZhbHVlc1tjb3VudF0pIHsKKyAgICAgICAg
ICAgIGtleXNbY291bnRdID0gTlNMb2NhbGl6ZWRSZWNvdmVyeVN1Z2dlc3Rpb25FcnJvcktleTsK
KyAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICB9CisKKyNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVk
LWRlY2xhcmF0aW9ucyIKKyAgICAgICAgaWYgKHVzZXJJbmZvICYmICh2YWx1ZXNbY291bnRdID0g
KGlkKUNGRGljdGlvbmFyeUdldFZhbHVlKHVzZXJJbmZvLCBrQ0ZTdHJlYW1Qcm9wZXJ0eVNTTFBl
ZXJDZXJ0aWZpY2F0ZXMpKSAhPSBuaWwpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gdHJhbnNs
YXRlIHRoZSBjZXJ0CisgICAgICAgICAgICBrZXlzW2NvdW50XSA9IEAiTlNFcnJvclBlZXJDZXJ0
aWZpY2F0ZUNoYWluS2V5IjsKKyAgICAgICAgICAgIGNvdW50ICsrOworCisgICAgICAgICAgICB2
YWx1ZXNbY291bnRdID0gKGlkKUNGRGljdGlvbmFyeUdldFZhbHVlKHVzZXJJbmZvLCBfa0NGU3Ry
ZWFtUHJvcGVydHlTU0xDbGllbnRDZXJ0aWZpY2F0ZXMpOworICAgICAgICAgICAgaWYgKHZhbHVl
c1tjb3VudF0pIHsKKyAgICAgICAgICAgICAgICBrZXlzW2NvdW50XSA9IEAiTlNFcnJvckNsaWVu
dENlcnRpZmljYXRlQ2hhaW5LZXkiOworICAgICAgICAgICAgICAgIGNvdW50ICsrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB2YWx1ZXNbY291bnRdID0gKGlkKUNGRGljdGlvbmFyeUdl
dFZhbHVlKHVzZXJJbmZvLCBfa0NGU3RyZWFtUHJvcGVydHlTU0xDbGllbnRDZXJ0aWZpY2F0ZVN0
YXRlKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZXNbY291bnRdKSB7CisgICAgICAgICAgICAgICAg
a2V5c1tjb3VudF0gPSBAIk5TRXJyb3JDbGllbnRDZXJ0aWZpY2F0ZVN0YXRlS2V5IjsKKyAgICAg
ICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIHBvcAorCisgICAgICAgIGlmICh1c2VySW5mbyAmJiAodmFsdWVzW2Nv
dW50XSA9IChpZClDRkRpY3Rpb25hcnlHZXRWYWx1ZSh1c2VySW5mbywga0NGU3RyZWFtUHJvcGVy
dHlTU0xQZWVyVHJ1c3QpKSAhPSBuaWwpIHsKKyAgICAgICAgICAgIGtleXNbY291bnRdID0gTlNV
UkxFcnJvckZhaWxpbmdVUkxQZWVyVHJ1c3RFcnJvcktleTsKKyAgICAgICAgICAgIGNvdW50Kys7
CisgICAgICAgIH0KKworICAgICAgICBrZXlzW2NvdW50XSA9IE5TVW5kZXJseWluZ0Vycm9yS2V5
OworICAgICAgICB2YWx1ZXNbY291bnRdID0gKGlkKWNmRXJyb3I7CisgICAgICAgIGNvdW50ICsr
OworCisgICAgICAgIHJlc3VsdCA9IFtXZWJDdXN0b21OU1VSTEVycm9yIGVycm9yV2l0aERvbWFp
bjpOU1VSTEVycm9yRG9tYWluIGNvZGU6KGVyckNvZGUgPT0ga0NGVVJMRXJyb3JVbmtub3duID8g
KENGSW5kZXgpTlNVUkxFcnJvclVua25vd24gOiBlcnJDb2RlKSB1c2VySW5mbzpbTlNEaWN0aW9u
YXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0czp2YWx1ZXMgZm9yS2V5czprZXlzIGNvdW50OmNvdW50
XV07CisgICAgICAgIGlmICh1c2VySW5mbykKKyAgICAgICAgICAgIENGUmVsZWFzZSh1c2VySW5m
byk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiAoTlNFcnJvciAq
KWNmRXJyb3I7Cit9CisjZW5kaWYgLy8gVVNFKENGTkVUV09SSykKKworI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgUmV0YWluUHRyPE5TRXJy
b3I+IGNyZWF0ZU5TRXJyb3JGcm9tUmVzb3VyY2VFcnJvckJhc2UoY29uc3QgUmVzb3VyY2VFcnJv
ckJhc2UmIHJlc291cmNlRXJyb3IpCkBAIC03Nyw2ICsyMTUsMTQgQEAgTlNFcnJvciAqUmVzb3Vy
Y2VFcnJvcjo6bnNFcnJvcigpIGNvbnN0CiAgICAgaWYgKG1fcGxhdGZvcm1FcnJvcikgewogICAg
ICAgICBDRkVycm9yUmVmIGVycm9yID0gbV9wbGF0Zm9ybUVycm9yLmdldCgpOwogICAgICAgICBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiB1c2VySW5mbyA9IGFkb3B0Q0YoQ0ZFcnJvckNvcHlV
c2VySW5mbyhlcnJvcikpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgbV9wbGF0Zm9ybU5T
RXJyb3IgPSBOU0Vycm9yRnJvbUNGRXJyb3IoZXJyb3IsIChOU1VSTCAqKVsoTlNEaWN0aW9uYXJ5
ICopdXNlckluZm8uZ2V0KCkgb2JqZWN0Rm9yS2V5OihpZCkga0NGVVJMRXJyb3JGYWlsaW5nVVJM
RXJyb3JLZXldKTsKKyAgICAgICAgLy8gSWYgTlNFcnJvckZyb21DRkVycm9yIGNyZWF0ZWQgYSBu
ZXcgTlNFcnJvciBmb3IgdXMsIHJldHVybiB0aGF0LgorICAgICAgICBpZiAobV9wbGF0Zm9ybU5T
RXJyb3IuZ2V0KCkgIT0gKE5TRXJyb3IgKillcnJvcikKKyAgICAgICAgICAgIHJldHVybiBtX3Bs
YXRmb3JtTlNFcnJvci5nZXQoKTsKKworICAgICAgICAvLyBPdGhlcndpc2UgZmFsbCB0aHJvdWdo
IHRvIGNyZWF0ZSBhIG5ldyBOU0Vycm9yIGZyb20gdGhlIENGRXJyb3IuCisjZW5kaWYKICAgICAg
ICAgbV9wbGF0Zm9ybU5TRXJyb3IgPSBhZG9wdE5TKFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhE
b21haW46KE5TU3RyaW5nICopQ0ZFcnJvckdldERvbWFpbihlcnJvcikgY29kZTpDRkVycm9yR2V0
Q29kZShlcnJvcikgdXNlckluZm86KE5TRGljdGlvbmFyeSAqKXVzZXJJbmZvLmdldCgpXSk7CiAg
ICAgICAgIHJldHVybiBtX3BsYXRmb3JtTlNFcnJvci5nZXQoKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFj
Lm1tCmluZGV4IGU3M2M2NWQyMjc3ZDk4OTIyZTY3OGVjNjViZWY4ZjhjN2E5MGViNGIuLjNkMDQ1
MTgxMzE3MWExYjc4MjNiMTE2YmYzNWRmMTE2OTVjNTI0YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCkBA
IC01Niw2ICs1NiwyMSBAQAogI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CiAjaW1wb3J0IDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxDRk5ldHdv
cmsvQ0ZVUkxSZXF1ZXN0Lmg+CisKKyNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lP
Uy5oIgorI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgorCitAaW50ZXJmYWNlIE5TVVJMUmVx
dWVzdCAoaU9TRGV0YWlscykKKy0gKENGVVJMUmVxdWVzdFJlZikgX0NGVVJMUmVxdWVzdDsKK0Bl
bmQKKyNlbmRpZgorCisjaWYgVVNFKFFVSUNLX0xPT0spCisjaW1wb3J0ICJRdWlja0xvb2suaCIK
KyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQGludGVyZmFjZSBOU1VSTENv
bm5lY3Rpb24gKERldGFpbHMpCkBAIC05NCw3ICsxMDksMTkgQEAgUmVzb3VyY2VIYW5kbGU6On5S
ZXNvdXJjZUhhbmRsZSgpCiAgICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAgZGVzdHJveWVkIiwg
dGhpcyk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgYm9vbCBzeW5jaHJvbm91c1dp
bGxTZW5kUmVxdWVzdEVuYWJsZWQoKQoreworICAgIHN0YXRpYyBib29sIGRpc2FibGVkID0gW1tO
U1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdERp
c2FibGVTeW5jaHJvbm91c1dpbGxTZW5kUmVxdWVzdFByZWZlcmVuY2VLZXkiXTsKKyAgICByZXR1
cm4gIWRpc2FibGVkOworfQorI2VuZGlmCisKKyNpZiAhUExBVEZPUk0oSU9TKQogdm9pZCBSZXNv
dXJjZUhhbmRsZTo6Y3JlYXRlTlNVUkxDb25uZWN0aW9uKGlkIGRlbGVnYXRlLCBib29sIHNob3Vs
ZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKKyNlbHNlCit2
b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVOU1VSTENvbm5lY3Rpb24oaWQgZGVsZWdhdGUsIGJv
b2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBO
U0RpY3Rpb25hcnkgKmNvbm5lY3Rpb25Qcm9wZXJ0aWVzKQorI2VuZGlmCiB7CiAgICAgLy8gQ3Jl
ZGVudGlhbHMgZm9yIGZ0cCBjYW4gb25seSBiZSBwYXNzZWQgaW4gVVJMLCB0aGUgY29ubmVjdGlv
bjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6IGRlbGVnYXRlIGNhbGwgd29uJ3Qg
YmUgbWFkZS4KICAgICBpZiAoKCFkLT5tX3VzZXIuaXNFbXB0eSgpIHx8ICFkLT5tX3Bhc3MuaXNF
bXB0eSgpKSAmJiAhZmlyc3RSZXF1ZXN0KCkudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgp
KSB7CkBAIC0xMzQsMTkgKzE2MSwzMyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVOU1VS
TENvbm5lY3Rpb24oaWQgZGVsZWdhdGUsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbAogCiAgICAg
QVNTRVJUKFtOU1VSTENvbm5lY3Rpb24gaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVj
dG9yKF9pbml0V2l0aFJlcXVlc3Q6ZGVsZWdhdGU6dXNlc0NhY2hlOm1heENvbnRlbnRMZW5ndGg6
c3RhcnRJbW1lZGlhdGVseTpjb25uZWN0aW9uUHJvcGVydGllczopXSk7CiAKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgTlNEaWN0aW9uYXJ5ICpzdHJlYW1Qcm9wZXJ0aWVzRnJvbUNsaWVudCA9IFtj
b25uZWN0aW9uUHJvcGVydGllcyBvYmplY3RGb3JLZXk6QCJrQ0ZVUkxDb25uZWN0aW9uU29ja2V0
U3RyZWFtUHJvcGVydGllcyJdOworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKnN0cmVhbVByb3Bl
cnRpZXMgPSBzdHJlYW1Qcm9wZXJ0aWVzRnJvbUNsaWVudCA/IFtbc3RyZWFtUHJvcGVydGllc0Zy
b21DbGllbnQgbXV0YWJsZUNvcHldIGF1dG9yZWxlYXNlXSA6IFtOU011dGFibGVEaWN0aW9uYXJ5
IGRpY3Rpb25hcnldOworI2Vsc2UKICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpzdHJlYW1Qcm9w
ZXJ0aWVzID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07CisjZW5kaWYKIAogICAg
IGlmICghc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpCiAgICAgICAgIFtzdHJlYW1Qcm9wZXJ0
aWVzIHNldE9iamVjdDpAIldlYktpdFByaXZhdGVTZXNzaW9uIiBmb3JLZXk6QCJfa0NGVVJMQ29u
bmVjdGlvblNlc3Npb25JRCJdOwogCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDkwCisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwOTAKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBzb3VyY2VBcHBsaWNhdGlv
bkF1ZGl0RGF0YSA9IGQtPm1fY29udGV4dC0+c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKTsK
ICAgICBpZiAoc291cmNlQXBwbGljYXRpb25BdWRpdERhdGEpCiAgICAgICAgIFtzdHJlYW1Qcm9w
ZXJ0aWVzIHNldE9iamVjdDooTlNEYXRhICopc291cmNlQXBwbGljYXRpb25BdWRpdERhdGEuZ2V0
KCkgZm9yS2V5OkAia0NGU3RyZWFtUHJvcGVydHlTb3VyY2VBcHBsaWNhdGlvbiJdOwogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqcHJvcGVydHlE
aWN0aW9uYXJ5ID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5
OmNvbm5lY3Rpb25Qcm9wZXJ0aWVzXTsKKyAgICBbcHJvcGVydHlEaWN0aW9uYXJ5IHNldE9iamVj
dDpzdHJlYW1Qcm9wZXJ0aWVzIGZvcktleTpAImtDRlVSTENvbm5lY3Rpb25Tb2NrZXRTdHJlYW1Q
cm9wZXJ0aWVzIl07CisgICAgY29uc3QgYm9vbCB1c2VzQ2FjaGUgPSBmYWxzZTsKKyAgICBpZiAo
c3luY2hyb25vdXNXaWxsU2VuZFJlcXVlc3RFbmFibGVkKCkpCisgICAgICAgIENGVVJMUmVxdWVz
dFNldFNob3VsZFN0YXJ0U3luY2hyb25vdXNseShbbnNSZXF1ZXN0IF9DRlVSTFJlcXVlc3RdLCAx
KTsKKyNlbHNlCiAgICAgTlNEaWN0aW9uYXJ5ICpwcm9wZXJ0eURpY3Rpb25hcnkgPSBbTlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OnN0cmVhbVByb3BlcnRpZXMgZm9yS2V5OkAia0NG
VVJMQ29ubmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMiXTsKLSAgICBkLT5tX2Nvbm5lY3Rp
b24gPSBhZG9wdE5TKFtbTlNVUkxDb25uZWN0aW9uIGFsbG9jXSBfaW5pdFdpdGhSZXF1ZXN0Om5z
UmVxdWVzdCBkZWxlZ2F0ZTpkZWxlZ2F0ZSB1c2VzQ2FjaGU6WUVTIG1heENvbnRlbnRMZW5ndGg6
MCBzdGFydEltbWVkaWF0ZWx5Ok5PIGNvbm5lY3Rpb25Qcm9wZXJ0aWVzOnByb3BlcnR5RGljdGlv
bmFyeV0pOworICAgIGNvbnN0IGJvb2wgdXNlc0NhY2hlID0gdHJ1ZTsKKyNlbmRpZgorICAgIGQt
Pm1fY29ubmVjdGlvbiA9IGFkb3B0TlMoW1tOU1VSTENvbm5lY3Rpb24gYWxsb2NdIF9pbml0V2l0
aFJlcXVlc3Q6bnNSZXF1ZXN0IGRlbGVnYXRlOmRlbGVnYXRlIHVzZXNDYWNoZTp1c2VzQ2FjaGUg
bWF4Q29udGVudExlbmd0aDowIHN0YXJ0SW1tZWRpYXRlbHk6Tk8gY29ubmVjdGlvblByb3BlcnRp
ZXM6cHJvcGVydHlEaWN0aW9uYXJ5XSk7CiB9CiAKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0
KCkKQEAgLTE2OCwxMSArMjA5LDI0IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KCkKIAog
ICAgIGQtPm1fbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgPSBkLT5tX2NvbnRleHQtPm5lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzKCk7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGNyZWF0ZU5TVVJM
Q29ubmVjdGlvbigKICAgICAgICAgUmVzb3VyY2VIYW5kbGU6OmRlbGVnYXRlKCksCiAgICAgICAg
IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLAogICAgICAgICBkLT5tX3Nob3VsZENvbnRlbnRT
bmlmZiB8fCBkLT5tX2NvbnRleHQtPmxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSk7
CisjZWxzZQorICAgIGNyZWF0ZU5TVVJMQ29ubmVjdGlvbigKKyAgICAgICAgZC0+bV9wcm94eS5n
ZXQoKSwKKyAgICAgICAgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsCisgICAgICAgIGQtPm1f
c2hvdWxkQ29udGVudFNuaWZmIHx8IGQtPm1fY29udGV4dC0+bG9jYWxGaWxlQ29udGVudFNuaWZm
aW5nRW5hYmxlZCgpLAorICAgICAgICAoTlNEaWN0aW9uYXJ5ICopY2xpZW50KCktPmNvbm5lY3Rp
b25Qcm9wZXJ0aWVzKHRoaXMpKTsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIE5T
VVJMQ29ubmVjdGlvbiAqdXJsQ29ubmVjdGlvbiA9IGNvbm5lY3Rpb24oKTsKKyAgICBbdXJsQ29u
bmVjdGlvbiBzY2hlZHVsZUluUnVuTG9vcDpXZWJUaHJlYWROU1J1bkxvb3AoKSBmb3JNb2RlOk5T
RGVmYXVsdFJ1bkxvb3BNb2RlXTsKKyAgICBbdXJsQ29ubmVjdGlvbiBzdGFydF07CisjZWxzZQog
ICAgIGJvb2wgc2NoZWR1bGVkID0gZmFsc2U7CiAgICAgaWYgKFNjaGVkdWxlUGFpckhhc2hTZXQq
IHNjaGVkdWxlZFBhaXJzID0gZC0+bV9jb250ZXh0LT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSkg
ewogICAgICAgICBTY2hlZHVsZVBhaXJIYXNoU2V0OjppdGVyYXRvciBlbmQgPSBzY2hlZHVsZWRQ
YWlycy0+ZW5kKCk7CkBAIC0xOTYsNiArMjUwLDcgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3Rh
cnQoKQogICAgICAgICBbY29ubmVjdGlvbigpIHN0YXJ0XTsKICAgICBlbHNlCiAgICAgICAgIGQt
Pm1fc3RhcnRXaGVuU2NoZWR1bGVkID0gdHJ1ZTsKKyNlbmRpZgogCiAgICAgTE9HKE5ldHdvcmss
ICJIYW5kbGUgJXAgc3RhcnRpbmcgY29ubmVjdGlvbiAlcCBmb3IgJUAiLCB0aGlzLCBjb25uZWN0
aW9uKCksIGZpcnN0UmVxdWVzdCgpLm5zVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSk7
CiAgICAgCkBAIC0yMzAsNiArMjg1LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1T
ZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpzY2hl
ZHVsZShTY2hlZHVsZVBhaXIqIHBhaXIpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBOU1J1
bkxvb3AgKnJ1bkxvb3AgPSBwYWlyLT5uc1J1bkxvb3AoKTsKICAgICBpZiAoIXJ1bkxvb3ApCiAg
ICAgICAgIHJldHVybjsKQEAgLTIzOCwxMiArMjk0LDE5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6
OnNjaGVkdWxlKFNjaGVkdWxlUGFpciogcGFpcikKICAgICAgICAgW2QtPm1fY29ubmVjdGlvbi5n
ZXQoKSBzdGFydF07CiAgICAgICAgIGQtPm1fc3RhcnRXaGVuU2NoZWR1bGVkID0gZmFsc2U7CiAg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocGFpcik7CisjZW5kaWYKIH0KIAogdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6dW5zY2hlZHVsZShTY2hlZHVsZVBhaXIqIHBhaXIpCiB7CisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBpZiAoTlNSdW5Mb29wICpydW5Mb29wID0gcGFpci0+bnNSdW5Mb29w
KCkpCiAgICAgICAgIFtkLT5tX2Nvbm5lY3Rpb24uZ2V0KCkgdW5zY2hlZHVsZUZyb21SdW5Mb29w
OnJ1bkxvb3AgZm9yTW9kZTooTlNTdHJpbmcgKilwYWlyLT5tb2RlKCldOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0ocGFpcik7CisjZW5kaWYKIH0KIAogaWQgUmVzb3VyY2VIYW5kbGU6OmRlbGVn
YXRlKCkKQEAgLTI5OSwxMCArMzYyLDE5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3Jt
TG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGhhbmRsZS0+Y3Jl
YXRlTlNVUkxDb25uZWN0aW9uKAogICAgICAgICBoYW5kbGUtPmRlbGVnYXRlKCksCiAgICAgICAg
IHN0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsCiAgICAgICAgIGhh
bmRsZS0+c2hvdWxkQ29udGVudFNuaWZmKCkgfHwgY29udGV4dC0+bG9jYWxGaWxlQ29udGVudFNu
aWZmaW5nRW5hYmxlZCgpKTsKKyNlbHNlCisgICAgaGFuZGxlLT5jcmVhdGVOU1VSTENvbm5lY3Rp
b24oCisgICAgICAgIGhhbmRsZS0+ZGVsZWdhdGUoKSwgLy8gQSBzeW5jaHJvbm91cyByZXF1ZXN0
IGNhbm5vdCB0dXJuIGludG8gYSBkb3dubG9hZCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm94
eSB0aGUgZGVsZWdhdGUuCisgICAgICAgIHN0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVk
Q3JlZGVudGlhbHMsCisgICAgICAgIHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZVBvbGljeShj
b250ZXh0LCByZXF1ZXN0LnVybCgpKSwKKyAgICAgICAgaGFuZGxlLT5zaG91bGRDb250ZW50U25p
ZmYoKSB8fCAoY29udGV4dCAmJiBjb250ZXh0LT5sb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFi
bGVkKCkpLAorICAgICAgICAoTlNEaWN0aW9uYXJ5ICopaGFuZGxlLT5jbGllbnQoKS0+Y29ubmVj
dGlvblByb3BlcnRpZXMoaGFuZGxlLmdldCgpKSk7CisjZW5kaWYKIAogICAgIFtoYW5kbGUtPmNv
bm5lY3Rpb24oKSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXSBm
b3JNb2RlOihOU1N0cmluZyAqKXN5bmNocm9ub3VzTG9hZFJ1bkxvb3BNb2RlKCldOwogICAgIFto
YW5kbGUtPmNvbm5lY3Rpb24oKSBzdGFydF07CkBAIC00OTIsNiArNTY0LDE5IEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsCiAgICAgICAgIH0KICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgLy8gSWYgdGhlIGNoYWxsZW5nZSBpcyBmb3IgYSBwcm94eSBwcm90ZWN0aW9uIHNwYWNlLCBs
b29rIGZvciBkZWZhdWx0IGNyZWRlbnRpYWxzIGluCisgICAgLy8gdGhlIGtleWNoYWluLiAgQ0ZO
ZXR3b3JrIHVzZWQgdG8gaGFuZGxlIHRoaXMgdW50aWwgV2ViQ29yZSB3YXMgY2hhbmdlZCB0byBh
bHdheXMKKyAgICAvLyByZXR1cm4gTk8gdG8gLWNvbm5lY3Rpb25TaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZTogZm9yIDxyZGFyOi8vcHJvYmxlbS83NzA0OTQzPi4KKyAgICBpZiAoIWNoYWxsZW5n
ZS5wcmV2aW91c0ZhaWx1cmVDb3VudCgpICYmIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5p
c1Byb3h5KCkpIHsKKyAgICAgICAgTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqbWFjQ2hh
bGxlbmdlID0gbWFjKGNoYWxsZW5nZSk7CisgICAgICAgIGlmIChOU1VSTENyZWRlbnRpYWwgKmNy
ZWRlbnRpYWwgPSBbW05TVVJMQ3JlZGVudGlhbFN0b3JhZ2Ugc2hhcmVkQ3JlZGVudGlhbFN0b3Jh
Z2VdIGRlZmF1bHRDcmVkZW50aWFsRm9yUHJvdGVjdGlvblNwYWNlOlttYWNDaGFsbGVuZ2UgcHJv
dGVjdGlvblNwYWNlXV0pIHsKKyAgICAgICAgICAgIFtjaGFsbGVuZ2Uuc2VuZGVyKCkgdXNlQ3Jl
ZGVudGlhbDpjcmVkZW50aWFsIGZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOm1hY0NoYWxsZW5n
ZV07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLy8gUExB
VEZPUk0oSU9TKQorCiAgICAgZC0+bV9jdXJyZW50TWFjQ2hhbGxlbmdlID0gY2hhbGxlbmdlLm5z
VVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKTsKICAgICBkLT5tX2N1cnJlbnRXZWJDaGFsbGVu
Z2UgPSBjb3JlKGQtPm1fY3VycmVudE1hY0NoYWxsZW5nZSk7CiAgICAgZC0+bV9jdXJyZW50V2Vi
Q2hhbGxlbmdlLnNldEF1dGhlbnRpY2F0aW9uQ2xpZW50KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1t
CmluZGV4IDg2OTE0MDUwZmJmZGI4YTZhNWZlN2JiYzlhMzgwZjg4MjhmYzQxMjIuLjNjNzhjNjg2
MTA1NDMyYWZiYjI4YmMzYjE3YjE3ZTgyOGU0OTY3YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KQEAg
LTU5LDYgKzU5LDkgQEAgTlNVUkxSZXF1ZXN0ICpSZXNvdXJjZVJlcXVlc3Q6Om5zVVJMUmVxdWVz
dChIVFRQQm9keVVwZGF0ZVBvbGljeSBib2R5UG9saWN5KSBjb24KIAogUmVzb3VyY2VSZXF1ZXN0
OjpSZXNvdXJjZVJlcXVlc3QoTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3QpCiAgICAgOiBSZXNvdXJj
ZVJlcXVlc3RCYXNlKCkKKyNpZiBQTEFURk9STShJT1MpCisgICAgLCBtX21haW5SZXNvdXJjZVJl
cXVlc3QoZmFsc2UpCisjZW5kaWYKICAgICAsIG1fY2ZSZXF1ZXN0KFtuc1JlcXVlc3QgX0NGVVJM
UmVxdWVzdF0pCiAgICAgLCBtX25zUmVxdWVzdChuc1JlcXVlc3QpCiB7CkBAIC02Niw4ICs2OSwy
NSBAQCBSZXNvdXJjZVJlcXVlc3Q6OlJlc291cmNlUmVxdWVzdChOU1VSTFJlcXVlc3QgKm5zUmVx
dWVzdCkKIAogdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZU5TVVJMUmVxdWVzdCgpCiB7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIC8vIFRoZXJlIGlzIGNsaWVudCBjb2RlIHRoYXQgZXh0ZW5k
cyBOU1VSTFJlcXVlc3QgYW5kIGV4cGVjdHMgdG8gZ2V0IGJhY2ssIGluIHRoZSBkZWxlZ2F0ZQor
ICAgIC8vIGNhbGxiYWNrcywgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgdGhhdCB0aGV5IHBh
c3NlZCBpbnRvIFdlYktpdC4gVG8ga2VlcCB0aGVuIHJ1bm5pbmcsIHdlCisgICAgLy8gY3JlYXRl
IGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFuZCByZXR1cm4gdGhhdC4gU2VlIDxyZGFyOi8v
OTg0MzU4Mj4uCisgICAgLy8gQWxzbywgZGV2ZWxvcGVycyByZWFsbHkgcmVhbGx5IHdhbnQgYW4g
TlNNdXRhYmxlVVJMUmVxdWVzdCBzbyB0cnkgdG8gY3JlYXRlIGFuCisgICAgLy8gTlNNdXRhYmxl
VVJMUmVxdWVzdCBpbnN0ZWFkIG9mIE5TVVJMUmVxdWVzdC4KKyAgICBzdGF0aWMgQ2xhc3MgbnNV
UkxSZXF1ZXN0Q2xhc3MgPSBbTlNVUkxSZXF1ZXN0IGNsYXNzXTsKKyAgICBzdGF0aWMgQ2xhc3Mg
bnNNdXRhYmxlVVJMUmVxdWVzdENsYXNzID0gW05TTXV0YWJsZVVSTFJlcXVlc3QgY2xhc3NdOwor
ICAgIENsYXNzIHJlcXVlc3RDbGFzcyA9IFttX25zUmVxdWVzdC5nZXQoKSBjbGFzc107CisKKyAg
ICBpZiAoIXJlcXVlc3RDbGFzcyB8fCByZXF1ZXN0Q2xhc3MgPT0gbnNVUkxSZXF1ZXN0Q2xhc3Mp
CisgICAgICAgIHJlcXVlc3RDbGFzcyA9IG5zTXV0YWJsZVVSTFJlcXVlc3RDbGFzczsKKworICAg
IGlmIChtX2NmUmVxdWVzdCkKKyAgICAgICAgbV9uc1JlcXVlc3QgPSBhZG9wdE5TKFtbcmVxdWVz
dENsYXNzIGFsbG9jXSBfaW5pdFdpdGhDRlVSTFJlcXVlc3Q6bV9jZlJlcXVlc3QuZ2V0KCldKTsK
KyNlbHNlCiAgICAgaWYgKG1fY2ZSZXF1ZXN0KQogICAgICAgICBtX25zUmVxdWVzdCA9IGFkb3B0
TlMoW1tOU1VSTFJlcXVlc3QgYWxsb2NdIF9pbml0V2l0aENGVVJMUmVxdWVzdDptX2NmUmVxdWVz
dC5nZXQoKV0pOworI2VuZGlmCiB9CiAKICNlbHNlCkBAIC0yMzIsOCArMjUyLDEwIEBAIHZvaWQg
UmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xkSFRUUEJvZHko
Y29uc3QgUmVzb3VyY2VSZXF1CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0OjphcHBseVdlYkFyY2hp
dmVIYWNrRm9yTWFpbCgpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBIYWNrIGJlY2F1
c2UgTWFpbCBjaGVja3MgZm9yIHRoaXMgcHJvcGVydHkgdG8gZGV0ZWN0IGRhdGEgLyBhcmNoaXZl
IGxvYWRzCiAgICAgW05TVVJMUHJvdG9jb2wgc2V0UHJvcGVydHk6QCIiIGZvcktleTpAIldlYkRh
dGFSZXF1ZXN0IiBpblJlcXVlc3Q6KE5TTXV0YWJsZVVSTFJlcXVlc3QgKiluc1VSTFJlcXVlc3Qo
RG9Ob3RVcGRhdGVIVFRQQm9keSldOworI2VuZGlmCiB9CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0
OjpzZXRTdG9yYWdlU2Vzc2lvbihDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9u
KQpAQCAtMjQ0LDYgKzI2Niw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0OjpzZXRTdG9yYWdlU2Vz
c2lvbihDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uKQogICAgIAogI2VuZGlm
IC8vIFVTRShDRk5FVFdPUkspCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGljIGJvb2wgaW5p
dFF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcygpCiB7CiAgICAgaWYgKGFwcGxpY2F0aW9u
SXNTYWZhcmkoKSkKQEAgLTI2MiwxMSArMjg1LDE2IEBAIHN0YXRpYyBib29sIGluaXRRdWlja0xv
b2tSZXNvdXJjZUNhY2hpbmdRdWlya3MoKQogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9Cisj
ZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogYm9vbCBSZXNvdXJjZVJlcXVlc3Q6OnVzZVF1aWNr
TG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcygpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBz
dGF0aWMgYm9vbCBmbGFnID0gaW5pdFF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcygpOwog
ICAgIHJldHVybiBmbGFnOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gIVBM
QVRGT1JNKElPUykKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvVVRJVXRpbGl0aWVzLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvVVRJVXRpbGl0aWVzLm1tCmluZGV4IDQyNTky
OTgwMGY1YWJmYTdkNjJkNjNiYTE0ZDllODgxMmI2MmZmMzMuLjY3YjhkNWU1NWYwNzZmODIzZjVl
NTYxY2Y0NWM2ZjM5Y2YzOWQyNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvbWFjL1VUSVV0aWxpdGllcy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL21hYy9VVElVdGlsaXRpZXMubW0KQEAgLTM0LDYgKzM0LDcgQEAgU09GVF9MSU5L
X0ZSQU1FV09SSyhNb2JpbGVDb3JlU2VydmljZXMpCiAKIFNPRlRfTElOSyhNb2JpbGVDb3JlU2Vy
dmljZXMsIFVUVHlwZUNvcHlEZWNsYXJhdGlvbiwgQ0ZEaWN0aW9uYXJ5UmVmLCAoQ0ZTdHJpbmdS
ZWYgaW5VVEkpLCAoaW5VVEkpKQogU09GVF9MSU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywgVVRUeXBl
Q29weVByZWZlcnJlZFRhZ1dpdGhDbGFzcywgQ0ZTdHJpbmdSZWYsIChDRlN0cmluZ1JlZiBpblVU
SSwgQ0ZTdHJpbmdSZWYgaW5UYWdDbGFzcyksIChpblVUSSwgaW5UYWdDbGFzcykpCitTT0ZUX0xJ
TksoTW9iaWxlQ29yZVNlcnZpY2VzLCBVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9y
VGFnLCBDRlN0cmluZ1JlZiwgKENGU3RyaW5nUmVmIGluVGFnQ2xhc3MsIENGU3RyaW5nUmVmIGlu
VGFnLCBDRlN0cmluZ1JlZiBpbkNvbmZvcm1pbmdUb1VUSSksIChpblRhZ0NsYXNzLCBpblRhZywg
aW5Db25mb3JtaW5nVG9VVEkpKQogCiBTT0ZUX0xJTktfQ09OU1RBTlQoTW9iaWxlQ29yZVNlcnZp
Y2VzLCBrVVRUeXBlQ29uZm9ybXNUb0tleSwgQ0ZTdHJpbmdSZWYpCiBTT0ZUX0xJTktfQ09OU1RB
TlQoTW9iaWxlQ29yZVNlcnZpY2VzLCBrVVRUYWdDbGFzc01JTUVUeXBlLCBDRlN0cmluZ1JlZikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1dlYkNvcmVS
ZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlLm1tCmluZGV4IGIxMzRmNTVm
MTZlMTBhMjUzZTZjMmVmMDAzZmI2ODMwYTc0MWMzMGUuLjk3M2JhNjJjNGQ4OGExODA0YzA4Y2Rj
NzhjYzY3MjAxZmQ4YjdjM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxl
Z2F0ZS5tbQpAQCAtOTMsMTAgKzkzLDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAg
ICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAgZGVsZWdhdGUgY29ubmVjdGlvblNob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlOiVwIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24pOwogCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIHJldHVybiBOTzsKKyNlbHNlCiAgICAgaWYgKCFtX2hhbmRsZSkKICAgICAg
ICAgcmV0dXJuIE5POwogCiAgICAgcmV0dXJuIG1faGFuZGxlLT5zaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZSgpOworI2VuZGlmCiB9CiAKIC0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0
aW9uICopY29ubmVjdGlvbiBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6KE5TVVJM
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UKQEAgLTE0MSw3ICsxNDUsOSBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5l
Y3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVSZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXIK
IHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKyNl
bmRpZgogCiAgICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAgZGVsZWdhdGUgY29ubmVjdGlvbjol
cCBkaWRSZWNlaXZlUmVzcG9uc2U6JXAgKEhUVFAgc3RhdHVzICVkLCByZXBvcnRlZCBNSU1FVHlw
ZSAnJXMnKSIsIG1faGFuZGxlLCBjb25uZWN0aW9uLCByLCBbciByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKHN0YXR1c0NvZGUpXSA/IFsoaWQpciBzdGF0dXNDb2RlXSA6IDAsIFtbciBNSU1F
VHlwZV0gVVRGOFN0cmluZ10pOwogCkBAIC0xNTMsOCArMTU5LDE2IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogICAgIGlmIChzdGF0dXNDb2RlICE9IDMwNCkKICAgICAgICAgYWRqdXN0TUlN
RVR5cGVJZk5lY2Vzc2FyeShbciBfQ0ZVUkxSZXNwb25zZV0pOwogCisjaWYgIVBMQVRGT1JNKElP
UykKICAgICBpZiAoW21faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoRG9Ob3RV
cGRhdGVIVFRQQm9keSkgX3Byb3BlcnR5Rm9yS2V5OkAiRm9yY2VIVE1MTUlNRVR5cGUiXSkKICAg
ICAgICAgW3IgX3NldE1JTUVUeXBlOkAidGV4dC9odG1sIl07CisjZW5kaWYKKworI2lmIFVTRShR
VUlDS19MT09LKQorICAgIG1faGFuZGxlLT5zZXRRdWlja0xvb2tIYW5kbGUoUXVpY2tMb29rSGFu
ZGxlOjpjcmVhdGUobV9oYW5kbGUsIGNvbm5lY3Rpb24sIHIsIHNlbGYpKTsKKyAgICBpZiAobV9o
YW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpKQorICAgICAgICByID0gbV9oYW5kbGUtPnF1aWNrTG9v
a0hhbmRsZSgpLT5uc1Jlc3BvbnNlKCk7CisjZW5kaWYKIAogICAgIG1faGFuZGxlLT5jbGllbnQo
KS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKG1faGFuZGxlLCByKTsKIH0KQEAgLTE3MSw2ICsxODUsMTEg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgaWYgKCFtX2hhbmRsZSB8fCAhbV9oYW5k
bGUtPmNsaWVudCgpKQogICAgICAgICByZXR1cm47CiAKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAg
ICBpZiAobV9oYW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpICYmIG1faGFuZGxlLT5xdWlja0xvb2tI
YW5kbGUoKS0+ZGlkUmVjZWl2ZURhdGFBcnJheShyZWludGVycHJldF9jYXN0PENGQXJyYXlSZWY+
KGRhdGFBcnJheSkpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIG1faGFuZGxlLT5o
YW5kbGVEYXRhQXJyYXkocmVpbnRlcnByZXRfY2FzdDxDRkFycmF5UmVmPihkYXRhQXJyYXkpKTsK
ICAgICAvLyBUaGUgY2FsbCB0byBkaWRSZWNlaXZlRGF0YSBhYm92ZSBjYW4gY2FuY2VsIGEgbG9h
ZCwgYW5kIGlmIHNvLCB0aGUgZGVsZWdhdGUgKHNlbGYpIGNvdWxkIGhhdmUgYmVlbiBkZWFsbG9j
YXRlZCBieSB0aGlzIHBvaW50LgogfQpAQCAtMTgzLDEyICsyMDIsMjIgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKICAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25u
ZWN0aW9uOiVwIGRpZFJlY2VpdmVEYXRhOiVwIGxlbmd0aFJlY2VpdmVkOiVsbGQiLCBtX2hhbmRs
ZSwgY29ubmVjdGlvbiwgZGF0YSwgbGVuZ3RoUmVjZWl2ZWQpOwogCisjaWYgUExBVEZPUk0oSU9T
KQorICAgIGlmIChbZGF0YSBsZW5ndGhdID09IDApIC8vIDxyZGFyOi8vcHJvYmxlbS81NTMyOTMx
PgorICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIGlmICghbV9oYW5kbGUgfHwgIW1faGFu
ZGxlLT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1FOiBJZiB3ZSBnZXQg
bW9yZSB0aGFuIDJCIGJ5dGVzIGluIGEgc2luZ2xlIGNodW5rLCB0aGlzIGNvZGUgd29uJ3QgZG8g
dGhlIHJpZ2h0IHRoaW5nLgogICAgIC8vIEhvd2V2ZXIsIHdpdGggdG9kYXkncyBjb21wdXRlcnMg
YW5kIG5ldHdvcmtpbmcgc3BlZWRzLCB0aGlzIHdvbid0IGhhcHBlbiBpbiBwcmFjdGljZS4KICAg
ICAvLyBDb3VsZCBiZSBhbiBpc3N1ZSB3aXRoIGEgZ2lhbnQgbG9jYWwgZmlsZS4KIAorI2lmIFVT
RShRVUlDS19MT09LKQorICAgIGlmIChtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCkgJiYgbV9o
YW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpLT5kaWRSZWNlaXZlRGF0YShyZWludGVycHJldF9jYXN0
PENGRGF0YVJlZj4oZGF0YSkpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3OTMKICAgICAv
LyAtMSBtZWFucyB3ZSBkbyBub3QgcHJvdmlkZSBhbnkgZGF0YSBhYm91dCB0cmFuc2ZlciBzaXpl
IHRvIGluc3BlY3RvciBzbyBpdCB3b3VsZCB1c2UKICAgICAvLyBDb250ZW50LUxlbmd0aCBoZWFk
ZXJzIG9yIGNvbnRlbnQgc2l6ZSB0byBzaG93IHRyYW5zZmVyIHNpemUuCkBAIC0yMzAsNiArMjU5
LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIGlmICghbV9oYW5kbGUgfHwgIW1f
aGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgVVNFKFFVSUNLX0xPT0sp
CisgICAgaWYgKG1faGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKSAmJiBtX2hhbmRsZS0+cXVpY2tM
b29rSGFuZGxlKCktPmRpZEZpbmlzaExvYWRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlm
CisKICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcobV9oYW5kbGUsIDAp
OwogfQogCkBAIC0yNDIsNiArMjc2LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAg
IGlmICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwog
CisjaWYgVVNFKFFVSUNLX0xPT0spCisgICAgaWYgKG1faGFuZGxlLT5xdWlja0xvb2tIYW5kbGUo
KSkKKyAgICAgICAgbV9oYW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpLT5kaWRGYWlsKCk7CisjZW5k
aWYKKwogICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFpbChtX2hhbmRsZSwgZXJyb3IpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCmluZGV4
IGYxNTUwOGM0MGEwZjkxY2Y5MmZlODg3MjExM2RjMGQ0MWExNzFlZmIuLjFjZGYxNzc5NzQ1YmE2
OWI1NzcwZGM1OWMwOWI3M2ZmYjhiZDY4NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVEYXRhYmFzZS5oCkBAIC0xMDcsNyArMTA3LDkgQEAgcHVibGljOgogICAgIGNv
bnN0IGNoYXIqIGxhc3RFcnJvck1zZygpOwogICAgIAogICAgIHNxbGl0ZTMqIHNxbGl0ZTNIYW5k
bGUoKSBjb25zdCB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgQVNTRVJUKG1fc2hhcmFi
bGUgfHwgY3VycmVudFRocmVhZCgpID09IG1fb3BlbmluZ1RocmVhZCB8fCAhbV9kYik7CisjZW5k
aWYKICAgICAgICAgcmV0dXJuIG1fZGI7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCmluZGV4IDczNWYwYjQxZjc4ZTJj
MjMzYTdjOWJiY2Y4N2UyMTEwNGMwMTM3NjAuLmU3MDk0YjRkYTRlODZlMTZkMzQyMDdhMGEyMzAx
NzgxZjFiY2UzMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVGaWxlU3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
RmlsZVN5c3RlbS5jcHAKQEAgLTM4LDYgKzM4LDEwIEBACiAjaW5jbHVkZSA8aW50dHlwZXMuaD4K
ICNpbmNsdWRlIDxzcWxpdGUzLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8c3Fs
aXRlM19wcml2YXRlLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTUUxpdGVG
aWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkKQEAgLTExMCw2ICsxMTQsMTMgQEAgYm9vbCBT
UUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSkKICAgICByZXR1cm4gZGVsZXRlRmlsZShmaWxlTmFtZSk7CiB9CiAKKyNpZiBQTEFURk9STShJ
T1MpCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OnRydW5jYXRlRGF0YWJhc2VGaWxlKHNxbGl0ZTMq
IGRhdGFiYXNlKQoreworICAgIHJldHVybiBzcWxpdGUzX2ZpbGVfY29udHJvbChkYXRhYmFzZSwg
MCwgU1FMSVRFX1RSVU5DQVRFX0RBVEFCQVNFLCAwKSA9PSBTUUxJVEVfT0s7Cit9CisjZW5kaWYK
KyAgICAKIGxvbmcgbG9uZyBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUpCiB7ICAgICAgICAKICAgICBsb25nIGxvbmcgc2l6ZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCmluZGV4IDE0
MDg1YjkyOWM4NWI4N2FjMDU2MmJjOWZlYzdhM2YxYzc3MDMxNjQuLmE3ZWY2NWU2NzUxZTQ2MTlj
NjVlYTNjMjA0ZDMwOTdjN2Q2MGRjNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaApAQCAtOTksNiArOTksMTMgQEAgcHVibGljOgogICAgIC8v
IGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4KICAgICBzdGF0aWMgYm9vbCBkZWxldGVEYXRhYmFz
ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAg
Ly8gVHJ1bmNhdGVzIGEgZGF0YWJhc2UgZmlsZS4gVXNlZCB3aGVuIE1vYmlsZVNhZmFyaVNldHRp
bmdzIGRlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlLAorICAgIC8vIHNpbmNlIGRlbGV0aW5nIHRoZSBm
aWxlIG51a2VzIHRoZSBQT1NJWCBmaWxlIGxvY2tzIHdoaWNoIHdvdWxkIHBvdGVudGlhbGx5IGNh
dXNlIFNhZmFyaQorICAgIC8vIHRvIGNvcnJ1cHQgdGhlIG5ldyBkYiBpZiBpdCdzIHJ1bm5pbmcg
aW4gdGhlIGJhY2tncm91bmQuCisgICAgc3RhdGljIGJvb2wgdHJ1bmNhdGVEYXRhYmFzZUZpbGUo
c3FsaXRlMyogZGF0YWJhc2UpOworI2VuZGlmCisgICAgCiAgICAgLy8gUmV0dXJucyB0aGUgc2l6
ZSBvZiB0aGUgZGF0YWJhc2UgZmlsZS4KICAgICAvLwogICAgIC8vIGZpbGVOYW1lIC0gVGhlIGZp
bGUgbmFtZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVU
cmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNh
Y3Rpb24uY3BwCmluZGV4IDZmOTBlYWMwODk0ZTVmYzMxMWRiYTNmMDQ3NTJkMWNlMmI5MzhiNjEu
LmQxNWNlZDNhZTBmYmRlNGE5YWQ0OGI1MDM5YTRmMDliM2YwNTdhYTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVRyYW5zYWN0aW9uLmNwcApAQCAtMjgsNiAr
MjgsMTAgQEAKIAogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAKKyNpZiBQTEFURk9STShJ
T1MpCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2VUcmFja2VyLmgiCisjZW5kaWYKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBTUUxpdGVUcmFuc2FjdGlvbjo6U1FMaXRlVHJhbnNhY3Rpb24oU1FM
aXRlRGF0YWJhc2UmIGRiLCBib29sIHJlYWRPbmx5KQpAQCAtNTQsMTEgKzU4LDE4IEBAIHZvaWQg
U1FMaXRlVHJhbnNhY3Rpb246OmJlZ2luKCkKICAgICAgICAgLy8gYW55IHN0YXRlbWVudHMuIElm
IHRoYXQgaGFwcGVucywgdGhpcyB0cmFuc2FjdGlvbiB3aWxsIGZhaWwuCiAgICAgICAgIC8vIGh0
dHA6Ly93d3cuc3FsaXRlLm9yZy9sYW5nX3RyYW5zYWN0aW9uLmh0bWwKICAgICAgICAgLy8gaHR0
cDovL3d3dy5zcWxpdGUub3JnL2xvY2tpbmd2My5odG1sI2xvY2tpbmcKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgIFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aW5jcmVtZW50VHJhbnNhY3Rpb25J
blByb2dyZXNzQ291bnQoKTsKKyNlbmRpZgogICAgICAgICBpZiAobV9yZWFkT25seSkKICAgICAg
ICAgICAgIG1faW5Qcm9ncmVzcyA9IG1fZGIuZXhlY3V0ZUNvbW1hbmQoIkJFR0lOIik7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIG1faW5Qcm9ncmVzcyA9IG1fZGIuZXhlY3V0ZUNvbW1hbmQo
IkJFR0lOIElNTUVESUFURSIpOwogICAgICAgICBtX2RiLm1fdHJhbnNhY3Rpb25JblByb2dyZXNz
ID0gbV9pblByb2dyZXNzOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgaWYgKCFtX2luUHJv
Z3Jlc3MpCisgICAgICAgICAgICBTUUxpdGVEYXRhYmFzZVRyYWNrZXI6OmRlY3JlbWVudFRyYW5z
YWN0aW9uSW5Qcm9ncmVzc0NvdW50KCk7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTY4LDYgKzc5
LDEwIEBAIHZvaWQgU1FMaXRlVHJhbnNhY3Rpb246OmNvbW1pdCgpCiAgICAgICAgIEFTU0VSVCht
X2RiLm1fdHJhbnNhY3Rpb25JblByb2dyZXNzKTsKICAgICAgICAgbV9pblByb2dyZXNzID0gIW1f
ZGIuZXhlY3V0ZUNvbW1hbmQoIkNPTU1JVCIpOwogICAgICAgICBtX2RiLm1fdHJhbnNhY3Rpb25J
blByb2dyZXNzID0gbV9pblByb2dyZXNzOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgaWYg
KCFtX2luUHJvZ3Jlc3MpCisgICAgICAgICAgICBTUUxpdGVEYXRhYmFzZVRyYWNrZXI6OmRlY3Jl
bWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KCk7CisjZW5kaWYKICAgICB9CiB9CiAKQEAg
LTgyLDYgKzk3LDkgQEAgdm9pZCBTUUxpdGVUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQogICAgICAg
ICBtX2RiLmV4ZWN1dGVDb21tYW5kKCJST0xMQkFDSyIpOwogICAgICAgICBtX2luUHJvZ3Jlc3Mg
PSBmYWxzZTsKICAgICAgICAgbV9kYi5tX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOwor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpkZWNyZW1l
bnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC05
MCw2ICsxMDgsOSBAQCB2b2lkIFNRTGl0ZVRyYW5zYWN0aW9uOjpzdG9wKCkKICAgICBpZiAobV9p
blByb2dyZXNzKSB7CiAgICAgICAgIG1faW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgICAgICBtX2Ri
Lm1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
ICAgICBTUUxpdGVEYXRhYmFzZVRyYWNrZXI6OmRlY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVz
c0NvdW50KCk7CisjZW5kaWYKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9pb3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9pb3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iZjYyMmY0YTVkMDRiOWZhNDBiNWI2YTVlZGQ4YTdmMmUyOGIxMmNiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRhYmFzZVRyYWNr
ZXIuY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMaXRl
RGF0YWJhc2VUcmFja2VyLmgiCisKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1p
dGl2ZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgU1FMaXRlRGF0YWJh
c2VUcmFja2VyIHsKKworc3RhdGljIFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCogc19zdGF0
aWNTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQgPSAwOworc3RhdGljIHVuc2lnbmVkIHNfdHJh
bnNhY3Rpb25JblByb2dyZXNzQ291bnRlciA9IDA7CisKK3N0YXRpYyBNdXRleCYgdHJhbnNhY3Rp
b25JblByb2dyZXNzTXV0ZXgoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNdXRleD4g
dGlwTXV0ZXg7CisgICAgcmV0dXJuIHRpcE11dGV4OworfQorCit2b2lkIHNldENsaWVudChTUUxp
dGVEYXRhYmFzZVRyYWNrZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoY2xpZW50KTsK
KyAgICBBU1NFUlQoIXNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50IHx8IHNfc3Rh
dGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50ID09IGNsaWVudCk7CisgICAgc19zdGF0aWNT
UUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQgPSBjbGllbnQ7Cit9CisKK3ZvaWQgaW5jcmVtZW50
VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnQoKQoreworICAgIGlmICghc19zdGF0aWNTUUxpdGVE
YXRhYmFzZVRyYWNrZXJDbGllbnQpCisgICAgICAgIHJldHVybjsKKyAgICBNdXRleExvY2tlciBs
b2NrKHRyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KCkpOworCisgICAgc190cmFuc2FjdGlvbklu
UHJvZ3Jlc3NDb3VudGVyKys7CisgICAgaWYgKHNfdHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRl
ciA9PSAxKQorICAgICAgICBzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC0+d2ls
bEJlZ2luRmlyc3RUcmFuc2FjdGlvbigpOworfQorCit2b2lkIGRlY3JlbWVudFRyYW5zYWN0aW9u
SW5Qcm9ncmVzc0NvdW50KCkKK3sKKyAgICBpZiAoIXNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFj
a2VyQ2xpZW50KQorICAgICAgICByZXR1cm47CisgICAgTXV0ZXhMb2NrZXIgbG9jayh0cmFuc2Fj
dGlvbkluUHJvZ3Jlc3NNdXRleCgpKTsKKworICAgIEFTU0VSVChzX3RyYW5zYWN0aW9uSW5Qcm9n
cmVzc0NvdW50ZXIpOworICAgIHNfdHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRlci0tOworCisg
ICAgaWYgKCFzX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXIpCisgICAgICAgIHNfc3RhdGlj
U1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LT5kaWRGaW5pc2hMYXN0VHJhbnNhY3Rpb24oKTsK
K30KKworI2lmICFBU1NFUlRfRElTQUJMRUQKK2Jvb2wgaGFzVHJhbnNhY3Rpb25JblByb2dyZXNz
KCkKK3sKKyAgICByZXR1cm4gIXNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50IHx8
IHNfdHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRlciA+IDA7Cit9CisjZW5kaWYgLy8gIUFTU0VS
VF9ESVNBQkxFRAorCit9IC8vIG5hbWVzcGFjZSBTUUxpdGVEYXRhYmFzZVRyYWNrZXIKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3FsL2lvcy9TUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9pb3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODYxYzY0NjMzZTYz
ODQzOTQwMWJhZmQzZThjMTQxNTk1ZGNiZGQwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9pb3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmgKQEAgLTAsMCAr
MSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgU1FMaXRlRGF0YWJhc2VUcmFja2VyX2gKKyNkZWZpbmUgU1FMaXRlRGF0YWJh
c2VUcmFja2VyX2gKKworI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oIgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSBTUUxpdGVEYXRhYmFzZVRyYWNrZXIgeworCit2b2lkIGRlY3JlbWVudFRyYW5zYWN0
aW9uSW5Qcm9ncmVzc0NvdW50KCk7Cit2b2lkIGluY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVz
c0NvdW50KCk7CisKK3ZvaWQgc2V0Q2xpZW50KFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCop
OworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorYm9vbCBoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3Mo
KTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisKK307CisKK2NsYXNzIFNRTGl0ZVRyYW5z
YWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHsKK3B1YmxpYzoKKyAgICBTUUxpdGVUcmFuc2Fj
dGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlcigpCisgICAgeworICAgICAgICBTUUxpdGVEYXRhYmFz
ZVRyYWNrZXI6OmluY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KCk7CisgICAgfQor
ICAgIH5TUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlcigpCisgICAgeworICAg
ICAgICBTUUxpdGVEYXRhYmFzZVRyYWNrZXI6OmRlY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVz
c0NvdW50KCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gU1FMaXRlRGF0YWJhc2VUcmFja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9pb3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjYxZjNkMmI5YmZiNzgyZmFmODM2ZjI5ZWU0ZTYzZTlkYTU1YzM3ZjQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURhdGFiYXNl
VHJhY2tlckNsaWVudC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVu
dF9oCisjZGVmaW5lIFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudF9oCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5TUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQoKSB7IH0KKworICAgIHZp
cnR1YWwgdm9pZCB3aWxsQmVnaW5GaXJzdFRyYW5zYWN0aW9uKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkaWRGaW5pc2hMYXN0VHJhbnNhY3Rpb24oKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnRfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcAppbmRleCBk
NzM2Y2NhNzRlYTQ5YTk3ZTQyMjMwZTU3ZDEyYTAwMGU4NDVkOGM5Li4zMGY3YWIyMDlhYzVmN2Jm
ZTZmYjM5ZjE1MjVmOTMzNWNmODE3OWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcApAQCAtMzI4LDYgKzMyOCw3IEBAIFN0cmluZyBMb2Nh
bGU6OmNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYgbG9jYWxpemVkKQog
CiAjaWYgRU5BQkxFKERBVEVfQU5EX1RJTUVfSU5QVVRfVFlQRVMpCiAKKyNpZiAhUExBVEZPUk0o
SU9TKQogU3RyaW5nIExvY2FsZTo6Zm9ybWF0RGF0ZVRpbWUoY29uc3QgRGF0ZUNvbXBvbmVudHMm
IGRhdGUsIEZvcm1hdFR5cGUgZm9ybWF0VHlwZSkKIHsKICAgICBpZiAoZGF0ZS50eXBlKCkgPT0g
RGF0ZUNvbXBvbmVudHM6OkludmFsaWQpCkBAIC0zNjMsNiArMzY0LDggQEAgU3RyaW5nIExvY2Fs
ZTo6Zm9ybWF0RGF0ZVRpbWUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGUsIEZvcm1hdFR5cGUg
Zm9ybWF0VHlwZSkKICAgICB9CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KKyNl
bmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCiAjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5oCmluZGV4IDFlOTc2OTA2YmU4Njg2Yjg5NWM2
ZTMzMjkzMjU1NmUxNTdlMjA1NmEuLjlmYzYzOWNlYTYwYTQ5Mzc3NjNmY2I0Mzg3MDc2NGRmNmQz
YjBkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1M
b2NhbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxl
LmgKQEAgLTMzLDYgKzMzLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIFBMQVRG
T1JNKElPUykKK2NsYXNzIEZvbnQ7CisjZW5kaWYKKwogY2xhc3MgTG9jYWxlIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShMb2NhbGUpOwogCkBAIC0xMTMsNyArMTE3LDE3IEBAIHB1YmxpYzoK
ICAgICAvLyBkaXNwbGF5IHRvIHRoZSB1c2VyLiBJZiBhbiBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0
IHN1cHBvcnQKICAgICAvLyBsb2NhbGl6ZWQgZGF0ZXMgdGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1
cm4gYW4gZW1wdHkgc3RyaW5nLgogICAgIC8vIEZvcm1hdFR5cGUgY2FuIGJlIHVzZWQgdG8gc3Bl
Y2lmeSBpZiB5b3Ugd2FudCB0aGUgc2hvcnQgZm9ybWF0LiAKKyNpZiAhUExBVEZPUk0oSU9TKQog
ICAgIFN0cmluZyBmb3JtYXREYXRlVGltZShjb25zdCBEYXRlQ29tcG9uZW50cyYsIEZvcm1hdFR5
cGUgPSBGb3JtYXRUeXBlVW5zcGVjaWZpZWQpOworI2Vsc2UKKyAgICB2aXJ0dWFsIFN0cmluZyBm
b3JtYXREYXRlVGltZShjb25zdCBEYXRlQ29tcG9uZW50cyYsIEZvcm1hdFR5cGUgPSBGb3JtYXRU
eXBlVW5zcGVjaWZpZWQpID0gMDsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorI2VuZGlmCisK
KyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBzaG91bGQgYmUgbWVy
Z2VkIHdpdGggT3BlbiBTb3VyY2UgaW4gYSB3YXkgdGhhdCBpcyBmdXR1cmUgY29tcGF0aWJsZS4K
KyAgICAvLyBNYXhpbXVtIHdpZHRoIGZvciBhIGZvcm1hdHRlZCBkYXRlIHN0cmluZyB3aXRoIGEg
c3BlY2lmaWVkIGZvbnQuCisgICAgdmlydHVhbCBmbG9hdCBtYXhpbXVtV2lkdGhGb3JEYXRlVHlw
ZShEYXRlQ29tcG9uZW50czo6VHlwZSwgY29uc3QgRm9udCYpID0gMDsKICNlbmRpZgogCiAgICAg
dmlydHVhbCB+TG9jYWxlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCmluZGV4IDVlMTRlM2YwOGFhZWYzM2Y1ZDMzZTdh
MmMzNzZhMTExZjFhODliNmMuLjdlMGUyZDgzNzQ5MTUyYzNjN2JkMGRmMTdlOWM1YjM2MDA5NWNm
Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3JJQ1UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFr
SXRlcmF0b3JJQ1UuY3BwCkBAIC01NzEsNiArNTcxLDcgQEAgYm9vbCBpc1dvcmRUZXh0QnJlYWso
VGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yKQogICAgIHJldHVybiBydWxlU3RhdHVzICE9IFVC
UktfV09SRF9OT05FOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBUZXh0QnJlYWtJ
dGVyYXRvciogc2V0VXBJdGVyYXRvcldpdGhSdWxlcyhib29sJiBjcmVhdGVkSXRlcmF0b3IsIFRl
eHRCcmVha0l0ZXJhdG9yKiYgaXRlcmF0b3IsCiAgICAgY29uc3QgY2hhciogYnJlYWtSdWxlcywg
Y29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKIHsKQEAgLTU5NSw5ICs1OTYsMTEgQEAg
c3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzZXRVcEl0ZXJhdG9yV2l0aFJ1bGVzKGJvb2wmIGNy
ZWF0ZWRJdGVyYXRvciwgVGV4dEJyZWEKIAogICAgIHJldHVybiBpdGVyYXRvcjsKIH0KKyNlbmRp
ZiAvLyAhUExBVEZPUk0oSU9TKQogCiBUZXh0QnJlYWtJdGVyYXRvciogY3Vyc29yTW92ZW1lbnRJ
dGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQogeworI2lmICFQTEFURk9S
TShJT1MpCiAgICAgLy8gVGhpcyBydWxlIHNldCBpcyBiYXNlZCBvbiBjaGFyYWN0ZXItYnJlYWsg
aXRlcmF0b3IgcnVsZXMgb2YgSUNVIDQuMAogICAgIC8vIDxodHRwOi8vc291cmNlLmljdS1wcm9q
ZWN0Lm9yZy9yZXBvcy9pY3UvaWN1L3RhZ3MvcmVsZWFzZS00LTAvc291cmNlL2RhdGEvYnJraXRy
L2NoYXIudHh0Pi4KICAgICAvLyBUaGUgbWFqb3IgZGlmZmVyZW5jZXMgZnJvbSB0aGUgb3JpZ2lu
YWwgb25lcyBhcmUgbGlzdGVkIGJlbG93OgpAQCAtNjgzLDYgKzY4NiwzMCBAQCBUZXh0QnJlYWtJ
dGVyYXRvciogY3Vyc29yTW92ZW1lbnRJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQg
bGVuZ3RoKQogICAgIHN0YXRpYyBib29sIGNyZWF0ZWRDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yID0g
ZmFsc2U7CiAgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNDdXJzb3JNb3ZlbWVu
dEl0ZXJhdG9yOwogICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yV2l0aFJ1bGVzKGNyZWF0ZWRDdXJz
b3JNb3ZlbWVudEl0ZXJhdG9yLCBzdGF0aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yLCBrUnVsZXMs
IHN0cmluZywgbGVuZ3RoKTsKKyNlbHNlIC8vIFBMQVRGT1JNKElPUykKKyAgICAvLyBVc2UgdGhl
IHNwZWNpYWwgVGhhaSBjaGFyYWN0ZXIgYnJlYWsgaXRlcmF0b3IgZm9yIGFsbCBsb2NhbGVzCisg
ICAgc3RhdGljIGJvb2wgY3JlYXRlZEN1cnNvckJyZWFrSXRlcmF0b3I7CisgICAgc3RhdGljIFRl
eHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNDdXJzb3JCcmVha0l0ZXJhdG9yOworCisgICAgaWYgKCFz
dHJpbmcpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFjcmVhdGVkQ3Vyc29y
QnJlYWtJdGVyYXRvcikgeworICAgICAgICBVRXJyb3JDb2RlIG9wZW5TdGF0dXMgPSBVX1pFUk9f
RVJST1I7CisgICAgICAgIHN0YXRpY0N1cnNvckJyZWFrSXRlcmF0b3IgPSByZWludGVycHJldF9j
YXN0PFRleHRCcmVha0l0ZXJhdG9yKj4odWJya19vcGVuKFVCUktfQ0hBUkFDVEVSLCAidGgiLCAw
LCAwLCAmb3BlblN0YXR1cykpOworICAgICAgICBjcmVhdGVkQ3Vyc29yQnJlYWtJdGVyYXRvciA9
IHRydWU7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoVV9TVUNDRVNTKG9wZW5TdGF0dXMp
LCAiSUNVIGNvdWxkIG5vdCBvcGVuIGEgYnJlYWsgaXRlcmF0b3I6ICVzICglZCkiLCB1X2Vycm9y
TmFtZShvcGVuU3RhdHVzKSwgb3BlblN0YXR1cyk7CisgICAgfQorICAgIGlmICghc3RhdGljQ3Vy
c29yQnJlYWtJdGVyYXRvcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBVRXJyb3JD
b2RlIHNldFRleHRTdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgdWJya19zZXRUZXh0KHJlaW50
ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihzdGF0aWNDdXJzb3JCcmVha0l0ZXJhdG9yKSwg
c3RyaW5nLCBsZW5ndGgsICZzZXRUZXh0U3RhdHVzKTsKKyAgICBpZiAoVV9GQUlMVVJFKHNldFRl
eHRTdGF0dXMpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGF0aWND
dXJzb3JCcmVha0l0ZXJhdG9yOworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAppbmRleCBiNGJi
MzkwN2Y2MTQ4YzM0OTNmNmExN2ZhZjllODIwMDdlMDM2MDE1Li5jYzZlYWEyMWYwNGFhZDhhNDk2
NTYwYTY1ODU2NjI3NmE0ZTllYjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRDb2RlY0lDVS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNJQ1UuY3BwCkBAIC00NCw2ICs0NCwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNvbnN0IHNpemVfdCBDb252ZXJzaW9uQnVmZmVyU2l6ZSA9IDE2Mzg0OwogCisjaWYgUExB
VEZPUk0oSU9TKQorc3RhdGljIGNvbnN0IGNoYXIqIHRleHRDb2RlY01hY0FsaWFzZXNbXSA9IHsK
KyAgICAibWFjb3MtN18zLTEwLjIiLCAvLyB4bWFjY3lyaWxsaWMsIG1hY2N5cmlsbGljCisgICAg
Im1hY29zLTZfMi0xMC40IiwgLy8geG1hY2dyZWVrCisgICAgIm1hY29zLTYtMTAuMiIsICAgLy8g
bWFjZ3JlZWsKKyAgICAibWFjb3MtMjktMTAuMiIsICAvLyB4bWFjY2VudHJhbGV1cnJvbWFuLCBt
YWNjZW50cmFsZXVycm9tYW4KKyAgICAibWFjb3MtMzUtMTAuMiIsICAvLyB4bWFjdHVya2lzaCwg
bWFjdHVya2lzaAorICAgICJzb2Z0YmFuay1zamlzIiwgIC8vIHNvZnRiYW5rc2ppcworICAgIG51
bGxwdHIKK307CisjZW5kaWYKKwogSUNVQ29udmVydGVyV3JhcHBlcjo6fklDVUNvbnZlcnRlcldy
YXBwZXIoKQogewogICAgIGlmIChjb252ZXJ0ZXIpCkBAIC0xODAsNiArMTkyLDI5IEBAIHZvaWQg
VGV4dENvZGVjSUNVOjpyZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFy
IHJlZ2lzdHJhcikKICAgICByZWdpc3RyYXIoIklTTzg4NTktMTUiLCAiSVNPLTg4NTktMTUiKTsK
ICAgICAvLyBOb3QgcmVnaXN0ZXJpbmcgSVNPODg1OS0xNiwgYmVjYXVzZSBGaXJlZm94IChhcyBv
ZiB2ZXJzaW9uIDMuNi42KSBkb2Vzbid0IGtub3cgdGhpcyBwYXJ0aWN1bGFyIGFsaWFzLAogICAg
IC8vIGFuZCBiZWNhdXNlIG9sZGVyIHZlcnNpb25zIG9mIElDVSBkb24ndCBzdXBwb3J0IElTTy04
ODU5LTE2IGVuY29kaW5nIGF0IGFsbC4KKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBBLkIu
IGFkZGluZyBhIGZldyBtb3JlIE1hYyBlbmNvZGluZ3MgbWlzc2luZyAnY2F1c2Ugd2UgZG9uJ3Qg
aGF2ZSBUZXh0Q29kZWNNYWMgcmlnaHQgbm93CisgICAgLy8gbHVja2lseSwgdGhleSBhcmUgc3Vw
cG9ydGVkIGluIElDVSwganVzdCBuZWVkIHRvIGFsaWFzIHRoZW0uCisgICAgLy8gdGhpcyBoYW5k
bGVzIGVuY29kaW5ncyB0aGF0IE9TIFggdXNlcyBURUMgKFRleHRDb2RlY01hYykKKyAgICAvLyA8
aHR0cDovL3B1YmxpYi5ib3VsZGVyLmlibS5jb20vaW5mb2NlbnRlci93bWJoZWxwL3Y2cjBtMC9p
bmRleC5qc3A/dG9waWM9L2NvbS5pYm0uZXRvb2xzLm1mdC5lYi5kb2MvYWMwMDQwOF8uaHRtPgor
ICAgIGludDMyX3QgaSA9IDA7CisgICAgZm9yIChjb25zdCBjaGFyKiBtYWNBbGlhcyA9IHRleHRD
b2RlY01hY0FsaWFzZXNbaV07IG1hY0FsaWFzOyBtYWNBbGlhcyA9IHRleHRDb2RlY01hY0FsaWFz
ZXNbKytpXSkgeworICAgICAgICByZWdpc3RyYXIobWFjQWxpYXMsIG1hY0FsaWFzKTsKKworICAg
ICAgICBVRXJyb3JDb2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1aW50MTZfdCBu
dW1BbGlhc2VzID0gdWNudl9jb3VudEFsaWFzZXMobWFjQWxpYXMsICZlcnJvcik7CisgICAgICAg
IEFTU0VSVChVX1NVQ0NFU1MoZXJyb3IpKTsKKyAgICAgICAgaWYgKFVfU1VDQ0VTUyhlcnJvcikp
CisgICAgICAgICAgICBmb3IgKHVpbnQxNl90IGogPSAwOyBqIDwgbnVtQWxpYXNlczsgKytqKSB7
CisgICAgICAgICAgICAgICAgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogYWxpYXMgPSB1Y252X2dldEFsaWFzKG1hY0FsaWFzLCBqLCAmZXJyb3IpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChVX1NVQ0NFU1MoZXJyb3IpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoVV9TVUNDRVNTKGVycm9yKSAmJiBzdHJjbXAoYWxpYXMsIG1hY0FsaWFzKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmVnaXN0cmFyKGFsaWFzLCBtYWNBbGlhcyk7CisgICAgICAgICAgICB9
CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgVGV4dENvZGVjSUNVOjpyZWdpc3RlckNvZGVjcyhU
ZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQpAQCAtMjE3LDYgKzI1MiwxMyBAQCB2b2lkIFRl
eHRDb2RlY0lDVTo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikK
ICAgICAvLyBGSVhNRTogSXMgdGhlcmUgYSBnb29kIHdheSB0byBkZXRlcm1pbmUgdGhlIG1vc3Qg
dXAgdG8gZGF0ZSB2YXJpYW50IHByb2dyYW1tYXRpY2FsbHk/CiAgICAgcmVnaXN0cmFyKCJ3aW5k
b3dzLTg3NCIsIGNyZWF0ZSwgIndpbmRvd3MtODc0LTIwMDAiKTsKICAgICByZWdpc3RyYXIoIndp
bmRvd3MtOTQ5IiwgY3JlYXRlLCAid2luZG93cy05NDktMjAwMCIpOworCisjaWYgUExBVEZPUk0o
SU9TKQorICAgIC8vIFNlZSBjb21tZW50IGFib3ZlIGluIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcygp
LgorICAgIGludDMyX3QgaSA9IDA7CisgICAgZm9yIChjb25zdCBjaGFyKiBhbGlhcyA9IHRleHRD
b2RlY01hY0FsaWFzZXNbaV07IGFsaWFzOyBhbGlhcyA9IHRleHRDb2RlY01hY0FsaWFzZXNbKytp
XSkKKyAgICAgICAgcmVnaXN0cmFyKGFsaWFzLCBjcmVhdGUsIDApOworI2VuZGlmCiB9CiAKIFRl
eHRDb2RlY0lDVTo6VGV4dENvZGVjSUNVKGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25zdCBjaGFy
KiBjYW5vbmljYWxDb252ZXJ0ZXJOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAppbmRleCBhNTc4MmNmZDVmODRmODNi
OGI5MzkxNjIwMWViNGYwOTY1NjcwMTYzLi5iMWZlZTM1MDM1ZjkyMjNkMjNhZWEwNjg5ZWEyMDU4
NDZmZTZlOWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZ1JlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcApAQCAtNDIsNyArNDIsNyBAQAogI2lmIFVTRShJQ1VfVU5J
Q09ERSkKICNpbmNsdWRlICJUZXh0Q29kZWNJQ1UuaCIKICNlbmRpZgotI2lmIFBMQVRGT1JNKE1B
QykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSAiVGV4dENv
ZGVjTWFjLmgiCiAjZW5kaWYKICNpZiBPUyhXSU5ET1dTKSAmJiBVU0UoV0NIQVJfVU5JQ09ERSkK
QEAgLTI4NCw3ICsyODQsNyBAQCBzdGF0aWMgdm9pZCBleHRlbmRUZXh0Q29kZWNNYXBzKCkKICAg
ICBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRp
ZgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElP
UykKICAgICBUZXh0Q29kZWNNYWM6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNv
ZGluZ05hbWVNYXApOwogICAgIFRleHRDb2RlY01hYzo6cmVnaXN0ZXJDb2RlY3MoYWRkVG9UZXh0
Q29kZWNNYXApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9j
Zi9IeXBoZW5hdGlvbkNGLmNwcAppbmRleCA1YWM3OTRhMzE4M2M3YzZmYjZkNDljZTk1ZDg4YjY2
ZTdmY2Q5NjQxLi4wZGVkYTg3ZmNjN2FiZDk3OTliNmI0YWI4MWQwMjVkYmFmYWU2YmRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAK
QEAgLTYwLDcgKzYwLDE3IEBAIHN0YXRpYyBBdG9taWNTdHJpbmdLZXllZE1SVUNhY2hlPFJldGFp
blB0cjxDRkxvY2FsZVJlZj4+JiBjZkxvY2FsZUNhY2hlKCkKIAogYm9vbCBjYW5IeXBoZW5hdGUo
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQogeworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgcmV0dXJuIGNmTG9jYWxlQ2FjaGUoKS5nZXQobG9jYWxlSWRlbnRpZmllcik7Cisj
ZWxzZQorI2lmICEoZGVmaW5lZChXVEZfQVJNX0FSQ0hfVkVSU0lPTikgJiYgV1RGX0FSTV9BUkNI
X1ZFUlNJT04gPT0gNikKKyAgICByZXR1cm4gY2ZMb2NhbGVDYWNoZSgpLmdldChsb2NhbGVJZGVu
dGlmaWVyKTsKKyNlbHNlCisgICAgLy8gSHlwaGVuYXRpb24gaXMgbm90IGF2YWlsYWJsZSBvbiBk
ZXZpY2VzIHdpdGggQVJNdjYgcHJvY2Vzc29ycy4gU2VlIDxyZGFyOi8vODM1MjU3MD4uCisgICAg
VU5VU0VEX1BBUkFNKGxvY2FsZUlkZW50aWZpZXIpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIH0KIAogc2l6ZV90IGxhc3RIeXBoZW5Mb2NhdGlv
bihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGJlZm9yZUlu
ZGV4LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjlkNzMwZmJlMzFiZTQ1NTUxNjU2ZjZjZTc0MTBmYjk1ZmE4MzAxOTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRl
Q2FjaGUuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBMb2NhbGl6ZWREYXRlQ2FjaGVfaAorI2RlZmluZSBMb2Nh
bGl6ZWREYXRlQ2FjaGVfaAorCisjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRl
ICJGb250LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgTG9jYWxpemVkRGF0ZUNhY2hlIHsKK3B1YmxpYzoKKyAgICBOU0RhdGVG
b3JtYXR0ZXIgKmZvcm1hdHRlckZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlKTsKKyAg
ICBmbG9hdCBtYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSwgY29u
c3QgRm9udCYpOworICAgIHZvaWQgbG9jYWxlQ2hhbmdlZCgpOworCitwcml2YXRlOgorICAgIExv
Y2FsaXplZERhdGVDYWNoZSgpOworICAgIH5Mb2NhbGl6ZWREYXRlQ2FjaGUoKTsKKworICAgIE5T
RGF0ZUZvcm1hdHRlciAqY3JlYXRlRm9ybWF0dGVyRm9yVHlwZShEYXRlQ29tcG9uZW50czo6VHlw
ZSk7CisgICAgZmxvYXQgY2FsY3VsYXRlTWF4aW11bVdpZHRoKERhdGVDb21wb25lbnRzOjpUeXBl
LCBjb25zdCBGb250Jik7CisKKyAgICAvLyBVc2luZyBpbnQgaW5zdGVhZCBvZiBEYXRlQ29tcG9u
ZW50czo6VHlwZSBmb3IgdGhlIGtleSBiZWNhdXNlIHRoZSBlbnVtCisgICAgLy8gZG9lcyBub3Qg
aGF2ZSBhIGRlZmF1bHQgaGFzaCBhbmQgaGFzaCB0cmFpdHMuIFVzYWdlIG9mIHRoZSBtYXBzCisg
ICAgLy8gY2FzdHMgdGhlIERhdGVDb21wb25lbnRzOjpUeXBlIGludG8gYW4gaW50IGFzIHRoZSBr
ZXkuCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4+
IERhdGVUeXBlRm9ybWF0dGVyTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIGZsb2F0PiBE
YXRlVHlwZU1heFdpZHRoTWFwOworICAgIERhdGVUeXBlRm9ybWF0dGVyTWFwIG1fZm9ybWF0dGVy
TWFwOworICAgIERhdGVUeXBlTWF4V2lkdGhNYXAgbV9tYXhXaWR0aE1hcDsKKyAgICBGb250IG1f
Zm9udDsKKworICAgIGZyaWVuZCBMb2NhbGl6ZWREYXRlQ2FjaGUmIGxvY2FsaXplZERhdGVDYWNo
ZSgpOworICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxMb2NhbGl6ZWREYXRlQ2FjaGU+OworfTsK
KworLy8gU2luZ2xldG9uLgorTG9jYWxpemVkRGF0ZUNhY2hlJiBsb2NhbGl6ZWREYXRlQ2FjaGUo
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTG9jYWxpemVkRGF0ZUNh
Y2hlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2Fs
aXplZERhdGVDYWNoZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2Fs
aXplZERhdGVDYWNoZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzE5MWEyZTQ1MzkyMzNhYjEzZGM2NjE3OGU1
OGExYjhjOGM2MzlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLm1tCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJMb2NhbGl6ZWREYXRlQ2FjaGUuaCIKKworI2ltcG9ydCAiRm9udC5oIgorI2lt
cG9ydCAiVGV4dFJ1bi5oIgorI2ltcG9ydCA8bWF0aC5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbXBvcnQgPENvcmVGb3VuZGF0
aW9uL0NGTm90aWZpY2F0aW9uQ2VudGVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworTG9jYWxpemVkRGF0ZUNhY2hlJiBsb2NhbGl6ZWREYXRlQ2Fj
aGUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMb2NhbGl6ZWREYXRlQ2FjaGU+IGNh
Y2hlOworICAgIHJldHVybiBjYWNoZTsKK30KKworc3RhdGljIHZvaWQgX2xvY2FsZUNoYW5nZWQo
Q0ZOb3RpZmljYXRpb25DZW50ZXJSZWYsIHZvaWQqLCBDRlN0cmluZ1JlZiwgY29uc3Qgdm9pZCos
IENGRGljdGlvbmFyeVJlZikKK3sKKyAgICBsb2NhbGl6ZWREYXRlQ2FjaGUoKS5sb2NhbGVDaGFu
Z2VkKCk7Cit9CisKK0xvY2FsaXplZERhdGVDYWNoZTo6TG9jYWxpemVkRGF0ZUNhY2hlKCkKKyAg
ICA6IG1fZm9udChGb250KCkpCit7CisgICAgLy8gTGlzdGVuIHRvIENGIE5vdGlmaWNhdGlvbnMg
Zm9yIGxvY2FsZSBjaGFuZ2UsIGFuZCBjbGVhciB0aGUgY2FjaGUgd2hlbiBpdCBkb2VzLgorICAg
IENGTm90aWZpY2F0aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoQ0ZOb3RpZmljYXRpb25DZW50ZXJHZXRM
b2NhbENlbnRlcigpLCAodm9pZCopdGhpcywgX2xvY2FsZUNoYW5nZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBrQ0ZMb2NhbGVDdXJyZW50TG9jYWxlRGlkQ2hhbmdlTm90
aWZpY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgQ0ZO
b3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JEZWxpdmVySW1tZWRpYXRlbHkpOworfQorCitM
b2NhbGl6ZWREYXRlQ2FjaGU6On5Mb2NhbGl6ZWREYXRlQ2FjaGUoKQoreworICAgIC8vIE5PVEU6
IFNpbmdsZXRvbiBkb2VzIG5vdCBleHBlY3QgdG8gYmUgZGVjb25zdHJ1Y3RlZC4KKyAgICBDRk5v
dGlmaWNhdGlvbkNlbnRlclJlbW92ZU9ic2VydmVyKENGTm90aWZpY2F0aW9uQ2VudGVyR2V0TG9j
YWxDZW50ZXIoKSwgKHZvaWQqKXRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBrQ0ZMb2NhbGVDdXJyZW50TG9jYWxlRGlkQ2hhbmdlTm90aWZpY2F0aW9uLCBOVUxM
KTsKK30KKwordm9pZCBMb2NhbGl6ZWREYXRlQ2FjaGU6OmxvY2FsZUNoYW5nZWQoKQoreworICAg
IG1fbWF4V2lkdGhNYXAuY2xlYXIoKTsKKyAgICBtX2Zvcm1hdHRlck1hcC5jbGVhcigpOworfQor
CitOU0RhdGVGb3JtYXR0ZXIgKkxvY2FsaXplZERhdGVDYWNoZTo6Zm9ybWF0dGVyRm9yRGF0ZVR5
cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUgdHlwZSkKK3sKKyAgICBpbnQga2V5ID0gc3RhdGljX2Nh
c3Q8aW50Pih0eXBlKTsKKyAgICBpZiAobV9mb3JtYXR0ZXJNYXAuY29udGFpbnMoa2V5KSkKKyAg
ICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyTWFwLmdldChrZXkpLmdldCgpOworCisgICAgTlNEYXRl
Rm9ybWF0dGVyICpkYXRlRm9ybWF0dGVyID0gW2NyZWF0ZUZvcm1hdHRlckZvclR5cGUodHlwZSkg
YXV0b3JlbGVhc2VdOworICAgIG1fZm9ybWF0dGVyTWFwLnNldChrZXksIGRhdGVGb3JtYXR0ZXIp
OworICAgIHJldHVybiBkYXRlRm9ybWF0dGVyOworfQorCitmbG9hdCBMb2NhbGl6ZWREYXRlQ2Fj
aGU6Om1heGltdW1XaWR0aEZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUsIGNv
bnN0IEZvbnQmIGZvbnQpCit7CisgICAgaW50IGtleSA9IHN0YXRpY19jYXN0PGludD4odHlwZSk7
CisgICAgaWYgKG1fZm9udCA9PSBmb250KSB7CisgICAgICAgIGlmIChtX21heFdpZHRoTWFwLmNv
bnRhaW5zKGtleSkpCisgICAgICAgICAgICByZXR1cm4gbV9tYXhXaWR0aE1hcC5nZXQoa2V5KTsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX2ZvbnQgPSBGb250KGZvbnQpOworICAgICAgICBtX21h
eFdpZHRoTWFwLmNsZWFyKCk7CisgICAgfQorCisgICAgZmxvYXQgY2FsY3VsYXRlZE1heGltdW0g
PSBjYWxjdWxhdGVNYXhpbXVtV2lkdGgodHlwZSwgZm9udCk7CisgICAgbV9tYXhXaWR0aE1hcC5z
ZXQoa2V5LCBjYWxjdWxhdGVkTWF4aW11bSk7CisgICAgcmV0dXJuIGNhbGN1bGF0ZWRNYXhpbXVt
OworfQorCitOU0RhdGVGb3JtYXR0ZXIgKkxvY2FsaXplZERhdGVDYWNoZTo6Y3JlYXRlRm9ybWF0
dGVyRm9yVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSB0eXBlKQoreworICAgIE5TRGF0ZUZvcm1h
dHRlciAqZGF0ZUZvcm1hdHRlciA9IFtbTlNEYXRlRm9ybWF0dGVyIGFsbG9jXSBpbml0XTsKKyAg
ICBOU0xvY2FsZSAqY3VycmVudExvY2FsZSA9IFtOU0xvY2FsZSBjdXJyZW50TG9jYWxlXTsKKyAg
ICBbZGF0ZUZvcm1hdHRlciBzZXRMb2NhbGU6Y3VycmVudExvY2FsZV07CisKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIERhdGVDb21wb25lbnRzOjpJbnZhbGlkOgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRlQ29tcG9uZW50
czo6RGF0ZToKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0VGltZVpvbmU6W05TVGltZVpvbmUg
dGltZVpvbmVGb3JTZWNvbmRzRnJvbUdNVDowXV07CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNl
dFRpbWVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJOb1N0eWxlXTsKKyAgICAgICAgW2RhdGVGb3JtYXR0
ZXIgc2V0RGF0ZVN0eWxlOk5TRGF0ZUZvcm1hdHRlck1lZGl1bVN0eWxlXTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZVRpbWU6CisgICAgICAgIFtkYXRlRm9y
bWF0dGVyIHNldFRpbWVab25lOltOU1RpbWVab25lIGxvY2FsVGltZVpvbmVdXTsKKyAgICAgICAg
W2RhdGVGb3JtYXR0ZXIgc2V0VGltZVN0eWxlOk5TRGF0ZUZvcm1hdHRlclNob3J0U3R5bGVdOwor
ICAgICAgICBbZGF0ZUZvcm1hdHRlciBzZXREYXRlU3R5bGU6TlNEYXRlRm9ybWF0dGVyTWVkaXVt
U3R5bGVdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERhdGVDb21wb25lbnRzOjpEYXRlVGlt
ZUxvY2FsOgorICAgICAgICBbZGF0ZUZvcm1hdHRlciBzZXRUaW1lWm9uZTpbTlNUaW1lWm9uZSB0
aW1lWm9uZUZvclNlY29uZHNGcm9tR01UOjBdXTsKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0
VGltZVN0eWxlOk5TRGF0ZUZvcm1hdHRlclNob3J0U3R5bGVdOworICAgICAgICBbZGF0ZUZvcm1h
dHRlciBzZXREYXRlU3R5bGU6TlNEYXRlRm9ybWF0dGVyTWVkaXVtU3R5bGVdOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIERhdGVDb21wb25lbnRzOjpNb250aDoKKyAgICAgICAgW2RhdGVGb3Jt
YXR0ZXIgc2V0VGltZVpvbmU6W05TVGltZVpvbmUgdGltZVpvbmVGb3JTZWNvbmRzRnJvbUdNVDow
XV07CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldERhdGVGb3JtYXQ6W05TRGF0ZUZvcm1hdHRl
ciBkYXRlRm9ybWF0RnJvbVRlbXBsYXRlOkAiTU1NTXl5eXkiIG9wdGlvbnM6MCBsb2NhbGU6Y3Vy
cmVudExvY2FsZV1dOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERhdGVDb21wb25lbnRzOjpU
aW1lOgorICAgICAgICBbZGF0ZUZvcm1hdHRlciBzZXRUaW1lWm9uZTpbTlNUaW1lWm9uZSB0aW1l
Wm9uZUZvclNlY29uZHNGcm9tR01UOjBdXTsKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0VGlt
ZVN0eWxlOk5TRGF0ZUZvcm1hdHRlclNob3J0U3R5bGVdOworICAgICAgICBbZGF0ZUZvcm1hdHRl
ciBzZXREYXRlU3R5bGU6TlNEYXRlRm9ybWF0dGVyTm9TdHlsZV07CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OldlZWs6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZGF0ZUZvcm1hdHRlcjsK
K30KKworLy8gTk9URTogVGhpcyBkb2VzIG5vdCBjaGVjayBmb3IgdGhlIHdpZGVzdCBkYXkgb2Yg
dGhlIHdlZWsuCisvLyBXZSBhc3N1bWUgbm8gZm9ybWF0dGVyIG9wdGlvbiBzaG93cyB0aGF0IGlu
Zm9ybWF0aW9uLgorZmxvYXQgTG9jYWxpemVkRGF0ZUNhY2hlOjpjYWxjdWxhdGVNYXhpbXVtV2lk
dGgoRGF0ZUNvbXBvbmVudHM6OlR5cGUgdHlwZSwgY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICBm
bG9hdCBtYXhpbXVtV2lkdGggPSAwOworCisgICAgLy8gR2V0IHRoZSBmb3JtYXR0ZXIgd2Ugd291
bGQgdXNlLCBjb3B5IGl0IGJlY2F1c2Ugd2Ugd2lsbCBmb3JjZSBpdHMgdGltZSB6b25lIHRvIGJl
IFVUQy4KKyAgICBOU0RhdGVGb3JtYXR0ZXIgKmRhdGVGb3JtYXR0ZXIgPSBbW2Zvcm1hdHRlckZv
ckRhdGVUeXBlKHR5cGUpIGNvcHldIGF1dG9yZWxlYXNlXTsKKyAgICBbZGF0ZUZvcm1hdHRlciBz
ZXRUaW1lWm9uZTpbTlNUaW1lWm9uZSB0aW1lWm9uZUZvclNlY29uZHNGcm9tR01UOjBdXTsKKwor
ICAgIC8vIFNhbXBsZSBkYXRlIHdpdGggYSA0IGRpZ2l0IHllYXIgYW5kIDIgZGlnaXQgZGF5LCBo
b3VyLCBhbmQgbWludXRlLiBEaWdpdHMgYXJlCisgICAgLy8gdHlwaWNhbGx5IGFsbCBlcXVhbGx5
IHdpZGUuIEZvcmNlIFVUQyB0aW1lem9uZSBmb3IgdGhlIHRlc3QgZGF0ZSBiZWxvdyBzbyB0aGUK
KyAgICAvLyBkYXRlIGRvZXNuJ3QgYWRqdXN0IGZvciB0aGUgY3VycmVudCB0aW1lem9uZS4gVGhp
cyBpcyBhbiBhcmJpdHJhcnkgZGF0ZQorICAgIC8vICh4LTI3LTIwMDcpIGFuZCB0aW1lICgxMDo0
NSBQTSkuCisgICAgUmV0YWluUHRyPE5TQ2FsZW5kYXI+IGdyZWdvcmlhbiA9IGFkb3B0TlMoW1tO
U0NhbGVuZGFyIGFsbG9jXSBpbml0V2l0aENhbGVuZGFySWRlbnRpZmllcjpOU0NhbGVuZGFySWRl
bnRpZmllckdyZWdvcmlhbl0pOworICAgIFtncmVnb3JpYW4uZ2V0KCkgc2V0VGltZVpvbmU6W05T
VGltZVpvbmUgdGltZVpvbmVGb3JTZWNvbmRzRnJvbUdNVDowXV07CisgICAgUmV0YWluUHRyPE5T
RGF0ZUNvbXBvbmVudHM+IGNvbXBvbmVudHMgPSBhZG9wdE5TKFtbTlNEYXRlQ29tcG9uZW50cyBh
bGxvY10gaW5pdF0pOworICAgIFtjb21wb25lbnRzLmdldCgpIHNldERheToyN107CisgICAgW2Nv
bXBvbmVudHMuZ2V0KCkgc2V0WWVhcjoyMDA3XTsKKyAgICBbY29tcG9uZW50cy5nZXQoKSBzZXRI
b3VyOjIyXTsKKyAgICBbY29tcG9uZW50cy5nZXQoKSBzZXRNaW51dGU6NDVdOworCisgICAgc3Rh
dGljIE5TVUludGVnZXIgbnVtYmVyT2ZHcmVnb3JpYW5Nb250aHMgPSBbW2RhdGVGb3JtYXR0ZXIg
bW9udGhTeW1ib2xzXSBjb3VudF07CisgICAgQVNTRVJUKG51bWJlck9mR3JlZ29yaWFuTW9udGhz
ID09IDEyKTsKKworICAgIC8vIEZvciBlYWNoIG1vbnRoIChpbiB0aGUgR3JlZ29yaWFuIENhbGVu
ZGFyKSwgZm9ybWF0IGEgZGF0ZSBhbmQgbWVhc3VyZSBpdHMgbGVuZ3RoLgorICAgIE5TVUludGVn
ZXIgdG90YWxNb250aHNUb1Rlc3QgPSAxOworICAgIGlmICh0eXBlID09IERhdGVDb21wb25lbnRz
OjpEYXRlCisgICAgICAgIHx8IHR5cGUgPT0gRGF0ZUNvbXBvbmVudHM6OkRhdGVUaW1lCisgICAg
ICAgIHx8IHR5cGUgPT0gRGF0ZUNvbXBvbmVudHM6OkRhdGVUaW1lTG9jYWwKKyAgICAgICAgfHwg
dHlwZSA9PSBEYXRlQ29tcG9uZW50czo6TW9udGgpCisgICAgICAgIHRvdGFsTW9udGhzVG9UZXN0
ID0gbnVtYmVyT2ZHcmVnb3JpYW5Nb250aHM7CisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBp
IDwgdG90YWxNb250aHNUb1Rlc3Q7ICsraSkgeworICAgICAgICBbY29tcG9uZW50cy5nZXQoKSBz
ZXRNb250aDooaSArIDEpXTsKKyAgICAgICAgTlNEYXRlICpkYXRlID0gW2dyZWdvcmlhbi5nZXQo
KSBkYXRlRnJvbUNvbXBvbmVudHM6Y29tcG9uZW50cy5nZXQoKV07CisgICAgICAgIE5TU3RyaW5n
ICpmb3JtYXR0ZWREYXRlID0gW2RhdGVGb3JtYXR0ZXIgc3RyaW5nRnJvbURhdGU6ZGF0ZV07Cisg
ICAgICAgIFN0cmluZyBzdHIgPSBTdHJpbmcoZm9ybWF0dGVkRGF0ZSk7CisgICAgICAgIG1heGlt
dW1XaWR0aCA9IG1heChtYXhpbXVtV2lkdGgsIGZvbnQud2lkdGgoc3RyKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIG1heGltdW1XaWR0aDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvQ2hhcnNldERhdGEuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0NoYXJzZXREYXRhLmgKaW5kZXggNDU4
Y2VjYjUwZjFjZjFjOWJmNTM0YjM3MmJjZTU4MjdmMzVlNDYzZC4uYTYwNzA0Mjk1Y2RlYzM3ZmIw
NmM4NjRhMzczOTIwYjc4NTI5NDkyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9tYWMvQ2hhcnNldERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L21hYy9DaGFyc2V0RGF0YS5oCkBAIC0yMyw2ICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CiAgKi8KIAorI2lmIFBMQVRGT1JNKElPUykKK3R5cGVkZWYgVUludDMyICAgICAgICAgICAgICAg
ICAgICAgICAgICBUZXh0RW5jb2Rpbmc7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgI2RlZmluZSBrVGV4dEVuY29kaW5nSVNPTGF0aW5UaGFpIGtDRlN0cmluZ0VuY29kaW5n
SVNPTGF0aW5UaGFpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21h
Yy9Mb2NhbGVNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1h
Yy5oCmluZGV4IDcwNzQ5MDNmNDJkMWY2ZTgyM2Q4ZDQ0Y2E4YjkwN2RlNzE4MjJiOTYuLjg0YThm
ZGI5OTQyY2E4OTM5MmFmMjQwNjU5NzVlNDM3NTM4ZjkwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5oCkBAIC01MSw2ICs1MSwxMSBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxlTWFjPiBjcmVhdGUoTlNMb2NhbGUqKTsKICAg
ICB+TG9jYWxlTWFjKCk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCBmbG9hdCBt
YXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSwgY29uc3QgRm9udCYp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1hdERhdGVUaW1lKGNvbnN0IERhdGVD
b21wb25lbnRzJiwgRm9ybWF0VHlwZSA9IEZvcm1hdFR5cGVVbnNwZWNpZmllZCkgT1ZFUlJJREU7
CisjZW5kaWYKKwogI2lmIEVOQUJMRShEQVRFX0FORF9USU1FX0lOUFVUX1RZUEVTKQogICAgIHZp
cnR1YWwgU3RyaW5nIGRhdGVGb3JtYXQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFN0cmluZyBt
b250aEZvcm1hdCgpIE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9tYWMvTG9jYWxlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9t
YWMvTG9jYWxlTWFjLm1tCmluZGV4IGRiNDM1YmZhM2Y3MjNlMmM0OTY5ZTllMDIyMWVkMzNhNTZk
M2NmZWMuLmQzNzNhZGQ3OTE5ZTZmN2RiZGZjNjRmMzFiY2M0NzdkOWNmNThjYzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMubW0KQEAgLTQwLDYgKzQw
LDEwIEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIkxvY2FsaXplZERh
dGVDYWNoZS5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGlubGlu
ZSBTdHJpbmcgbGFuZ3VhZ2VGcm9tTG9jYWxlKGNvbnN0IFN0cmluZyYgbG9jYWxlKQpAQCAtMTE2
LDYgKzEyMCwzNSBAQCBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBMb2NhbGVNYWM6OnNob3J0
RGF0ZUZvcm1hdHRlcigpCiAgICAgcmV0dXJuIGNyZWF0ZURhdGVUaW1lRm9ybWF0dGVyKG1fbG9j
YWxlLmdldCgpLCBtX2dyZWdvcmlhbkNhbGVuZGFyLmdldCgpLCBOU0RhdGVGb3JtYXR0ZXJTaG9y
dFN0eWxlLCBOU0RhdGVGb3JtYXR0ZXJOb1N0eWxlKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykK
K1N0cmluZyBMb2NhbGVNYWM6OmZvcm1hdERhdGVUaW1lKGNvbnN0IERhdGVDb21wb25lbnRzJiBk
YXRlQ29tcG9uZW50cywgRm9ybWF0VHlwZSkKK3sKKyAgICBkb3VibGUgbXNlYyA9IGRhdGVDb21w
b25lbnRzLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICBEYXRlQ29tcG9uZW50czo6VHlw
ZSB0eXBlID0gZGF0ZUNvbXBvbmVudHMudHlwZSgpOworCisgICAgLy8gIndlZWsiIHR5cGUgbm90
IHN1cHBvcnRlZC4KKyAgICBBU1NFUlQodHlwZSAhPSBEYXRlQ29tcG9uZW50czo6SW52YWxpZCk7
CisgICAgaWYgKHR5cGUgPT0gRGF0ZUNvbXBvbmVudHM6OldlZWspCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKworICAgIC8vIEluY29taW5nIG1zZWMgdmFsdWUgaXMgbWlsbGlzZWNvbmRzIHNp
bmNlIDE5NzAtMDEtMDEgMDA6MDA6MDAgVVRDLiBUaGUgMTk3MCBlcG9jaC4KKyAgICBOU1RpbWVJ
bnRlcnZhbCBzZWNvbmRzU2luY2UxOTcwID0gKG1zZWMgLyAxMDAwKTsKKyAgICBOU0RhdGUgKmRh
dGUgPSBbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2UxOTcwOnNlY29uZHNTaW5jZTE5
NzBdOworCisgICAgLy8gUmV0dXJuIGEgZm9ybWF0dGVkIHN0cmluZy4KKyAgICBOU0RhdGVGb3Jt
YXR0ZXIgKmRhdGVGb3JtYXR0ZXIgPSBsb2NhbGl6ZWREYXRlQ2FjaGUoKS5mb3JtYXR0ZXJGb3JE
YXRlVHlwZSh0eXBlKTsKKyAgICByZXR1cm4gW2RhdGVGb3JtYXR0ZXIgc3RyaW5nRnJvbURhdGU6
ZGF0ZV07Cit9CisKK2Zsb2F0IExvY2FsZU1hYzo6bWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0
ZUNvbXBvbmVudHM6OlR5cGUgdHlwZSwgY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICBBU1NFUlQo
dHlwZSAhPSBEYXRlQ29tcG9uZW50czo6SW52YWxpZCk7CisgICAgQVNTRVJUKHR5cGUgIT0gRGF0
ZUNvbXBvbmVudHM6OldlZWspOworCisgICAgcmV0dXJuIGxvY2FsaXplZERhdGVDYWNoZSgpLm1h
eGltdW1XaWR0aEZvckRhdGVUeXBlKHR5cGUsIGZvbnQpOworfQorI2VuZGlmCisKICNpZiBFTkFC
TEUoREFURV9BTkRfVElNRV9JTlBVVF9UWVBFUykKIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2Nh
bGVNYWM6Om1vbnRoTGFiZWxzKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvbWFjL1RleHRCb3VuZGFyaWVzLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9tYWMvVGV4dEJvdW5kYXJpZXMubW0KaW5kZXggMmY5MjE3ZjA3YmExODNjYTdmOWNmZDFi
OTk3YzllZjBhNTk1ODkxNS4uMzM2ZDdmNWUxNjYyYmU3YTcwMWM0ZmMwNmI4Njk0ZjI2ZmY1M2M3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dEJvdW5k
YXJpZXMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dEJvdW5k
YXJpZXMubW0KQEAgLTI2LDEwICsyNiwxNzcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9y
dCAiVGV4dEJvdW5kYXJpZXMuaCIKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIlRleHRC
cmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCIKKyNpbXBvcnQgPENvcmVGb3VuZGF0aW9uL0NGU3Ry
aW5nVG9rZW5pemVyLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBv
cnQgPHVuaWNvZGUvdWJyay5oPgorI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgorI2ltcG9ydCA8
dW5pY29kZS91c3RyaW5nLmg+CisjaW1wb3J0IDx1bmljb2RlL3V0eXBlcy5oPgorI2ltcG9ydCA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShJT1MpCisKK3N0
YXRpYyBib29sIGlzU2tpcENoYXJhY3RlcihVQ2hhcjMyIGMpCit7CisgICAgcmV0dXJuIGMgPT0g
MHhBMCB8fCAKKyAgICAgICAgYyA9PSAnXG4nIHx8IAorICAgICAgICBjID09ICcuJyB8fCAKKyAg
ICAgICAgYyA9PSAnLCcgfHwgCisgICAgICAgIGMgPT0gJyEnICB8fCAKKyAgICAgICAgYyA9PSAn
PycgfHwgCisgICAgICAgIGMgPT0gJzsnIHx8IAorICAgICAgICBjID09ICc6JyB8fCAKKyAgICAg
ICAgdV9pc3NwYWNlKGMpOworfQorCitzdGF0aWMgYm9vbCBpc1doaXRlc3BhY2VDaGFyYWN0ZXIo
VUNoYXIzMiBjKQoreworICAgIHJldHVybiBjID09IDB4QTAgfHwgCisgICAgICAgIGMgPT0gJ1xu
JyB8fCAKKyAgICAgICAgdV9pc3NwYWNlKGMpOworfQorCitzdGF0aWMgYm9vbCBpc1dvcmREZWxp
bWl0aW5nQ2hhcmFjdGVyKFVDaGFyMzIgYykKK3sKKyAgICBDRkNoYXJhY3RlclNldFJlZiBzZXQg
PSBDRkNoYXJhY3RlclNldEdldFByZWRlZmluZWQoa0NGQ2hhcmFjdGVyU2V0QWxwaGFOdW1lcmlj
KTsKKyAgICAvLyBBbXBlcnNhbmQgaXMgYW4gZXhjZXB0aW9uIGFkZGVkIHRvIHRyZWF0IEFUJlQg
YXMgYSBzaW5nbGUgd29yZCAoc2VlIDxyZGFyOi8vcHJvYmxlbS81MDIyMjY0PikuCisgICAgcmV0
dXJuICFDRkNoYXJhY3RlclNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihzZXQsIGMpICYmIGMgIT0g
JyYnOworfQorCitzdGF0aWMgYm9vbCBpc1N5bWJvbENoYXJhY3RlcihVQ2hhcjMyIGMpCit7Cisg
ICAgQ0ZDaGFyYWN0ZXJTZXRSZWYgc2V0ID0gQ0ZDaGFyYWN0ZXJTZXRHZXRQcmVkZWZpbmVkKGtD
RkNoYXJhY3RlclNldFN5bWJvbCk7CisgICAgcmV0dXJuIENGQ2hhcmFjdGVyU2V0SXNMb25nQ2hh
cmFjdGVyTWVtYmVyKHNldCwgYyk7Cit9CisKK3N0YXRpYyBib29sIGlzQW1iaWd1b3VzQm91bmRh
cnlDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAgLy8gVGhlc2UgYXJlIGNoYXJh
Y3RlcnMgdGhhdCBjYW4gYmVoYXZlIGFzIHdvcmQgYm91bmRhcmllcywgYnV0IGNhbiBhcHBlYXIg
d2l0aGluIHdvcmRzLgorICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0ZXIg
PT0gcmlnaHRTaW5nbGVRdW90YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9PSBoZWJyZXdQdW5jdHVh
dGlvbkdlcnNoYXlpbTsKK30KKworc3RhdGljIENGU3RyaW5nVG9rZW5pemVyUmVmIHRva2VuaXpl
ckZvclN0cmluZyhDRlN0cmluZ1JlZiBzdHIpCit7CisgICAgc3RhdGljIENGU3RyaW5nVG9rZW5p
emVyUmVmIHRva2VuaXplciA9IG51bGxwdHI7CisgICAgc3RhdGljIENGTG9jYWxlUmVmIGxvY2Fs
ZSA9IG51bGxwdHI7CisKKyAgICBpZiAoIWxvY2FsZSkgeworICAgICAgICBjb25zdCBjaGFyKiB0
ZW1wID0gY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCk7CisgICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gY3VycmVudExvY2FsZUlEID0gYWRvcHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhCeXRl
c05vQ29weShudWxscHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4odGVtcCksIHN0
cmxlbih0ZW1wKSwgIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGZhbHNlLCBrQ0ZBbGxvY2F0b3JO
dWxsKSk7CisgICAgICAgIGxvY2FsZSA9IENGTG9jYWxlQ3JlYXRlKG51bGxwdHIsIGN1cnJlbnRM
b2NhbGVJRC5nZXQoKSk7CisgICAgICAgIGlmICghbG9jYWxlKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgQ0ZSYW5nZSBlbnRpcmVSYW5nZSA9IENGUmFuZ2VNYWtl
KDAsIENGU3RyaW5nR2V0TGVuZ3RoKHN0cikpOyAgICAKKworICAgIGlmICghdG9rZW5pemVyKQor
ICAgICAgICB0b2tlbml6ZXIgPSBDRlN0cmluZ1Rva2VuaXplckNyZWF0ZShudWxscHRyLCBzdHIs
IGVudGlyZVJhbmdlLCBrQ0ZTdHJpbmdUb2tlbml6ZXJVbml0V29yZEJvdW5kYXJ5LCBsb2NhbGUp
OworICAgIGVsc2UKKyAgICAgICAgQ0ZTdHJpbmdUb2tlbml6ZXJTZXRTdHJpbmcodG9rZW5pemVy
LCBzdHIsIGVudGlyZVJhbmdlKTsKKyAgICByZXR1cm4gdG9rZW5pemVyOworfQorCisKKy8vIFNp
bXBsZSBjYXNlOiBhIHdvcmQgaXMgYSBzdHJlYW0gb2YgY2hhcmFjdGVycworLy8gZGVsaW1pdGVk
IGJ5IGEgc3BlY2lhbCBzZXQgb2Ygd29yZC1kZWxpbWl0aW5nIGNoYXJhY3RlcnMuCitzdGF0aWMg
dm9pZCBmaW5kU2ltcGxlV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwg
aW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkKK3sKKyAgICBBU1NFUlQocG9zaXRp
b24gPj0gMCk7CisgICAgQVNTRVJUKHBvc2l0aW9uIDwgbGVuKTsKKworICAgIGludCBzdGFydFBv
cyA9IHBvc2l0aW9uOworICAgIHdoaWxlIChzdGFydFBvcyA+IDApIHsKKyAgICAgICAgaW50IGkg
PSBzdGFydFBvczsKKyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXJCZWZvcmVTdGFydFBvczsKKyAg
ICAgICAgVTE2X1BSRVYoY2hhcnMsIDAsIGksIGNoYXJhY3RlckJlZm9yZVN0YXJ0UG9zKTsKKyAg
ICAgICAgaWYgKGlzV29yZERlbGltaXRpbmdDaGFyYWN0ZXIoY2hhcmFjdGVyQmVmb3JlU3RhcnRQ
b3MpKSB7CisgICAgICAgICAgICBBU1NFUlQoaSA+PSAwKTsKKyAgICAgICAgICAgIGlmICghaSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKCFpc0FtYmlndW91c0Jv
dW5kYXJ5Q2hhcmFjdGVyKGNoYXJhY3RlckJlZm9yZVN0YXJ0UG9zKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXJCZWZvcmVCZWZvcmVTdGFy
dFBvczsKKyAgICAgICAgICAgIFUxNl9QUkVWKGNoYXJzLCAwLCBpLCBjaGFyYWN0ZXJCZWZvcmVC
ZWZvcmVTdGFydFBvcyk7CisgICAgICAgICAgICBpZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3Rl
cihjaGFyYWN0ZXJCZWZvcmVCZWZvcmVTdGFydFBvcykpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgVTE2X0JBQ0tfMShjaGFycywgMCwgc3RhcnRQb3MpOworICAg
IH0KKyAgICAKKyAgICBpbnQgZW5kUG9zID0gcG9zaXRpb247CisgICAgd2hpbGUgKGVuZFBvcyA8
IGxlbikgeworICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKKyAgICAgICAgVTE2X0dFVChjaGFy
cywgMCwgZW5kUG9zLCBsZW4sIGNoYXJhY3Rlcik7CisgICAgICAgIGlmIChpc1dvcmREZWxpbWl0
aW5nQ2hhcmFjdGVyKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIGludCBpID0gZW5kUG9zOwor
ICAgICAgICAgICAgVTE2X0ZXRF8xKGNoYXJzLCBpLCBsZW4pOworICAgICAgICAgICAgQVNTRVJU
KGkgPD0gbGVuKTsKKyAgICAgICAgICAgIGlmIChpID09IGxlbikKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyQWZ0ZXJFbmRQb3M7CisgICAgICAg
ICAgICBVMTZfTkVYVChjaGFycywgaSwgbGVuLCBjaGFyYWN0ZXJBZnRlckVuZFBvcyk7CisgICAg
ICAgICAgICBpZiAoIWlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoY2hhcmFjdGVyKSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChpc1dvcmREZWxpbWl0aW5nQ2hh
cmFjdGVyKGNoYXJhY3RlckFmdGVyRW5kUG9zKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBVMTZfRldEXzEoY2hhcnMsIGVuZFBvcywgbGVuKTsKKyAgICB9CisK
KyAgICAvLyBUaGUgdGV4dCBtYXkgY29uc2lzdCBvZiBhbGwgZGVsaW1pdGVyIGNoYXJhY3RlcnMg
KGUuZy4gIisrKysrKysrIiBvciBhIHNlcmllcyBvZiBlbW9qaSksIGFuZCByZXR1cm5pbmcgYW4g
ZW1wdHkgcmFuZ2UKKyAgICAvLyBtYWtlcyBubyBzZW5zZSAoYW5kIGRvZXNuJ3QgbWF0Y2ggZmlu
ZENvbXBsZXhXb3JkQm91bmRhcnkoKSBiZWhhdmlvcikuCisgICAgaWYgKHN0YXJ0UG9zID09IGVu
ZFBvcyAmJiBlbmRQb3MgPCBsZW4pIHsKKyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7CisgICAg
ICAgIFUxNl9HRVQoY2hhcnMsIDAsIGVuZFBvcywgbGVuLCBjaGFyYWN0ZXIpOworICAgICAgICBp
ZiAoaXNTeW1ib2xDaGFyYWN0ZXIoY2hhcmFjdGVyKSkKKyAgICAgICAgICAgIFUxNl9GV0RfMShj
aGFycywgZW5kUG9zLCBsZW4pOworICAgIH0KKworICAgICpzdGFydCA9IHN0YXJ0UG9zOworICAg
ICplbmQgPSBlbmRQb3M7Cit9CisKKy8vIENvbXBsZXggY2FzZTogdXNlIENGU3RyaW5nVG9rZW5p
emVyIHRvIGZpbmQgd29yZCBib3VuZGFyeS4KK3N0YXRpYyB2b2lkIGZpbmRDb21wbGV4V29yZEJv
dW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0
YXJ0LCBpbnQqIGVuZCkKK3sKKyAgICBDRlN0cmluZ1JlZiBjaGFyU3RyaW5nID0gQ0ZTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVyc05vQ29weShOVUxMLCBjaGFycywgbGVuLCBrQ0ZBbGxvY2F0b3JO
dWxsKTsKKyAgICBBU1NFUlQoY2hhclN0cmluZyk7CisgICAgCisgICAgQ0ZTdHJpbmdUb2tlbml6
ZXJSZWYgdG9rZW5pemVyID0gdG9rZW5pemVyRm9yU3RyaW5nKGNoYXJTdHJpbmcpOworICAgIGlm
ICh0b2tlbml6ZXIpIHsgICAgICAgIAorICAgICAgICBDRlN0cmluZ1Rva2VuaXplclRva2VuVHlw
ZSAgdG9rZW4gPSBDRlN0cmluZ1Rva2VuaXplckdvVG9Ub2tlbkF0SW5kZXgodG9rZW5pemVyLCBw
b3NpdGlvbik7CisgICAgICAgIENGUmFuZ2UgcmVzdWx0OworICAgICAgICBpZiAodG9rZW4gIT0g
a0NGU3RyaW5nVG9rZW5pemVyVG9rZW5Ob25lKSB7CisgICAgICAgICAgICByZXN1bHQgPSBDRlN0
cmluZ1Rva2VuaXplckdldEN1cnJlbnRUb2tlblJhbmdlKHRva2VuaXplcik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBpZiBubyB0b2tlbiBmb3VuZDogc2VsZWN0IGVudGlyZSBi
bG9jaworICAgICAgICAgICAgLy8gTkI6IEkgbmV2ZXIgaGl0IHRoaXMgc2VjdGlvbiBpbiBhbGwg
bXkgdGVzdGluZy4uLgorICAgICAgICAgICAgcmVzdWx0LmxvY2F0aW9uID0gMDsKKyAgICAgICAg
ICAgIHJlc3VsdC5sZW5ndGggPSBsZW47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICpz
dGFydCA9IHJlc3VsdC5sb2NhdGlvbjsKKyAgICAgICAgKmVuZCA9IHJlc3VsdC5sb2NhdGlvbiAr
IHJlc3VsdC5sZW5ndGg7CisgICAgfSBlbHNlIHsgICAgLy8gZXJyb3IgY3JlYXRpbmcgdG9rZW5p
emVyCisgICAgICAgIGZpbmRTaW1wbGVXb3JkQm91bmRhcnkoY2hhcnMsIGxlbiwgcG9zaXRpb24s
IHN0YXJ0LCBlbmQpOworICAgIH0KKworICAgIENGUmVsZWFzZShjaGFyU3RyaW5nKTsKK30KKyNl
bmRpZgorCiB2b2lkIGZpbmRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVu
LCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5kKQogeworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgTlNTdHJpbmcqIHN0cmluZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hh
cmFjdGVyc05vQ29weTpjb25zdF9jYXN0PHVuaWNoYXIqPihjaGFycykKICAgICAgICAgbGVuZ3Ro
OmxlbiBmcmVlV2hlbkRvbmU6Tk9dOwogICAgIE5TQXR0cmlidXRlZFN0cmluZyogYXR0ciA9IFtb
TlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpzdHJpbmddOwpAQCAtMzgs
NiArMjA1LDQ0IEBAIHZvaWQgZmluZFdvcmRCb3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGlu
dCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50CiAgICAgW3N0cmluZyByZWxlYXNl
XTsKICAgICAqc3RhcnQgPSByYW5nZS5sb2NhdGlvbjsKICAgICAqZW5kID0gcmFuZ2UubG9jYXRp
b24gKyByYW5nZS5sZW5ndGg7CisjZWxzZQorICAgIGludCBwb3MgPSBwb3NpdGlvbjsKKyAgICBp
ZiAoIHBvc2l0aW9uID09IGxlbiAmJiBwb3NpdGlvbiAhPSAwKQorICAgICAgICBwb3MtLTsKKyAg
ICAKKyAgICAvLyBGb3IgY29tcGxleCB0ZXh0IChUaGFpLCBKYXBhbmVzZSwgQ2hpbmVzZSksIHZp
c2libGVfdW5pdHMgd2lsbCBwYXNzIHRoZSB0ZXh0IGluIGFzIGEgCisgICAgLy8gc2luZ2xlIGNv
bnRpZ3VvdXMgcnVuIG9mIGNoYXJhY3RlcnMsIHByb3ZpZGluZyBhcyBtdWNoIGNvbnRleHQgYXMg
aXMgcG9zc2libGUuCisgICAgLy8gV2Ugb25seSBuZWVkIG9uZSBjaGFyYWN0ZXIgdG8gZGV0ZXJt
aW5lIGlmIHRoZSB0ZXh0IGlzIGNvbXBsZXguCisgICAgVUNoYXIzMiBjaDsKKyAgICBpbnQgaSA9
IHBvczsKKyAgICBVMTZfTkVYVChjaGFycyxpLGxlbixjaCk7CisgICAgYm9vbCBpc0NvbXBsZXgg
PSByZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2gpOworICAgIAorICAgIC8vIEZJWE1F
OiBUaGlzIGNoZWNrIGltcHJvdmVzIG91ciB3b3JkIGJvdW5kYXJ5IGJlaGF2aW9yLCBidXQgZG9l
c24ndCBhY3R1YWxseSBnbyBmYXIgZW5vdWdoLgorICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0v
ODg1Mzk1MT4gVGFrZSBjb21wbGV4IHdvcmQgYm91bmRhcnkgZmluZGluZyBwYXRoIHdoZW4gbmVj
ZXNzYXJ5CisgICAgaWYgKCFpc0NvbXBsZXgpIHsKKyAgICAgICAgLy8gQ2hlY2sgYWdhaW4gZm9y
IGNvbXBsZXggdGV4dCwgYXQgdGhlIHN0YXJ0IG9mIHRoZSBydW4uCisgICAgICAgIGkgPSAwOwor
ICAgICAgICBVMTZfTkVYVChjaGFycywgaSwgbGVuLCBjaCk7CisgICAgICAgIGlzQ29tcGxleCA9
IHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShjaCk7CisgICAgfQorICAgIAorICAgIGlm
IChpc0NvbXBsZXgpIHsKKyAgICAgICAgZmluZENvbXBsZXhXb3JkQm91bmRhcnkoY2hhcnMsbGVu
LCBwb3NpdGlvbiwgc3RhcnQsIGVuZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmluZFNpbXBs
ZVdvcmRCb3VuZGFyeShjaGFycyxsZW4sIHBvc2l0aW9uLCBzdGFydCwgZW5kKTsKKyAgICB9CisK
KyNkZWZpbmUgTE9HX1dPUkRfQlJFQUsgMAorI2lmIExPR19XT1JEX0JSRUFLCisgICAgQ0ZTdHJp
bmdSZWYgdW5pU3RyaW5nID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhOVUxMLCBjaGFy
cywgbGVuKTsKKyAgICBDRlN0cmluZ1JlZiBmb3VuZFdvcmQgPSBDRlN0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKE5VTEwsIChjb25zdCBVbmlDaGFyICopIGNoYXJzICsgKnN0YXJ0LCAqZW5kIC0g
KnN0YXJ0KTsgICAgICAgIAorICAgIE5TTG9nKEAiJXNfQlJFQUsgJyVAJyAoJWQsJWQpIGluICcl
QCcgKCVwKSBhdCAlZCwgbGVuZ3RoPSVkIiwgaXNDb21wbGV4ID8gIkNPTVBMRVgiIDogIlNJTVBM
RSIsIGZvdW5kV29yZCwgKnN0YXJ0LCAqZW5kLCB1bmlTdHJpbmcsIHVuaVN0cmluZywgcG9zaXRp
b24sIGxlbik7CisgICAgQ0ZSZWxlYXNlKGZvdW5kV29yZCk7CisgICAgQ0ZSZWxlYXNlKHVuaVN0
cmluZyk7CisjZW5kaWYKKyAgICAKKyNlbmRpZgogfQogCiB2b2lkIGZpbmRFbmRXb3JkQm91bmRh
cnkoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogZW5kKQpA
QCAtNTMsNiArMjU4LDcgQEAgdm9pZCBmaW5kRW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBj
aGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIGVuZCkKIAogaW50IGZpbmROZXh0V29y
ZEZyb21JbmRleChjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgYm9v
bCBmb3J3YXJkKQogeyAgIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgTlNTdHJpbmcqIHN0cmlu
ZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyc05vQ29weTpjb25zdF9jYXN0
PHVuaWNoYXIqPihjaGFycykKICAgICAgICAgbGVuZ3RoOmxlbiBmcmVlV2hlbkRvbmU6Tk9dOwog
ICAgIE5TQXR0cmlidXRlZFN0cmluZyogYXR0ciA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFN0cmluZzpzdHJpbmddOwpAQCAtNjAsNiArMjY2LDM1IEBAIGludCBmaW5kTmV4
dFdvcmRGcm9tSW5kZXgoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24s
IGJvb2wgZm9yd2FyCiAgICAgW2F0dHIgcmVsZWFzZV07CiAgICAgW3N0cmluZyByZWxlYXNlXTsK
ICAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICAvLyBUaGlzIHZlcnkgbGlrZWx5IHdvbid0
IGJlaGF2ZSBleGFjdGx5IGxpa2UgdGhlIG5vbi1pUGhvbmUgdmVyc2lvbiwgYnV0IGl0IHdvcmtz
CisgICAgLy8gZm9yIHRoZSBjb250ZXh0cyBpbiB3aGljaCBpdCBpcyB1c2VkIG9uIGlQaG9uZSwg
YW5kIGluIHRoZSBmdXR1cmUgd2lsbCBiZQorICAgIC8vIHR1bmVkIHRvIGltcHJvdmUgdGhlIGlQ
aG9uZS1zcGVjaWZpYyBiZWhhdmlvciBmb3IgdGhlIGtleWJvYXJkIGFuZCB0ZXh0IGVkaXRpbmcu
CisgICAgaW50IHBvcyA9IHBvc2l0aW9uOworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJP
X0VSUk9SOworICAgIFVCcmVha0l0ZXJhdG9yICpib3VuZGFyeSA9IHVicmtfb3BlbihVQlJLX1dP
UkQsIGN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJRCgpLCBjb25zdF9jYXN0PHVuaWNoYXIgKj4ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bmljaGFyICo+KGNoYXJzKSksIGxlbiwgJnN0YXR1cyk7CisK
KyAgICBpZiAoYm91bmRhcnkgJiYgVV9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgaWYgKGZv
cndhcmQpIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBwb3MgPSB1YnJrX2Zv
bGxvd2luZyhib3VuZGFyeSwgcG9zKTsgICAgCisgICAgICAgICAgICAgICAgaWYgKHBvcyA9PSBV
QlJLX0RPTkUpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9zID0gbGVuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKHBvcyA8IGxlbiAmJiAocG9zID09IDAgfHwgIWlz
U2tpcENoYXJhY3RlcihjaGFyc1twb3MtMV0pKSAmJiBpc1NraXBDaGFyYWN0ZXIoY2hhcnNbcG9z
XSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZG8geworICAgICAg
ICAgICAgICAgIHBvcyA9IHVicmtfcHJlY2VkaW5nKGJvdW5kYXJ5LCBwb3MpOworICAgICAgICAg
ICAgICAgIGlmIChwb3MgPT0gVUJSS19ET05FKSB7CisgICAgICAgICAgICAgICAgICAgIHBvcyA9
IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAocG9zID4gMCAmJiBp
c1NraXBDaGFyYWN0ZXIoY2hhcnNbcG9zXSkgJiYgIWlzV2hpdGVzcGFjZUNoYXJhY3RlcihjaGFy
c1twb3MtMV0pKTsKKyAgICAgICAgfQorICAgICAgICB1YnJrX2Nsb3NlKGJvdW5kYXJ5KTsKKyAg
ICB9CisgICAgcmV0dXJuIHBvczsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmNwcApp
bmRleCA0OGE5Nzc2YTllNTVhM2NiNGNjY2VhMmI1ZDc5MjMyMWFiNDQ1N2RkLi43M2VkNGU4MWRj
ZWZmYWZkNzRjNjhhZjBkMGU1ZGQ2ODNiNWQ2OTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5jcHAKQEAgLTI0LDYgKzI0LDggQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjTWFjLmgiCiAKQEAgLTMyNSwzICszMjcsNSBAQCBD
U3RyaW5nIFRleHRDb2RlY01hYzo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCBVbmVuY29kYWJsZQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyAhUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L21hYy9UZXh0Q29kZWNNYWMuaAppbmRleCAzZTdhMjM3YzEzN2U5OTcwMDM0YTdhOGZhZTFiZmUw
ODc0NWUyOTEzLi40NjAyYjFiYThjNjllZWU4YjEzODQ4MDQyNThmYzhiMWNjMDc0MzM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q29kZWNNYWMuaApAQCAt
MjcsNiArMjcsOCBAQAogI2lmbmRlZiBUZXh0Q29kZWNNYWNfaAogI2RlZmluZSBUZXh0Q29kZWNN
YWNfaAogCisjaWYgIVBMQVRGT1JNKElPUykKKwogI2luY2x1ZGUgIlRleHRDb2RlYy5oIgogI2lu
Y2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KIApAQCAtNzAsNCArNzIsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2VuZGlmIC8v
ICFQTEFURk9STShJT1MpCisKICNlbmRpZiAvLyBUZXh0Q29kZWNNYWNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220696</attachid>
            <date>2014-01-08 20:47:55 -0800</date>
            <delta_ts>2014-01-09 07:39:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126654-20140108204746.patch</filename>
            <type>text/plain</type>
            <size>1057206</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDFhOGNhZDI5ZjY2ZDg1YzEyMDg4ZjY2
ZDkyMmM0MTA1YjBiYmI3ZWEuLjM0NGRhYzAzMzBhZGI2ODJmOGIzZWE4NzM2ZmZmOGNjNDQ2Mzdj
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMDEtMDggIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFVwc3RyZWFtIFdlYkNvcmUvcGxhdGZvcm0g
Y2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI2NjU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmNhbkFjY2Vzc1RocmVhZExvY2Fs
RGF0YUZvclRocmVhZCk6CisgICAgICAgICogd3RmL01haW5UaHJlYWQuaDoKKwogMjAxNC0wMS0w
NyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIE1h
cmtpbmcgc2hvdWxkIGJlIGdlbmVyYXRpb25hbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDhmNzQwZmYyMmMxNjlh
ZmFjMjVhY2FlNjhjM2I1NjhkYzYyODVjMDEuLjMwNzY3YzRmOGRhNzhiYzE1NDViZGZiMzQ0ZGU0
MWNlY2UxOTAzYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NTcgQEAKKzIwMTQtMDEtMDggIERh
bmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFVwc3RyZWFt
IFdlYkNvcmUvcGxhdGZvcm0gY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NjU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vQ29udGVudEZpbHRl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0v
RmlsZUNob29zZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmNob29zZU1l
ZGlhRmlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmg6CisgICAgICAgICog
cGxhdGZvcm0vRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRNZXRhZGF0YVVS
TCk6CisgICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3RlbS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L0tpbGxSaW5nTm9uZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpmaWxlQnV0dG9uQ2hvb3NlTWVkaWFGaWxlTGFiZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmlsZUJ1dHRvbkNob29zZU11bHRpcGxlTWVkaWFGaWxlc0xhYmVs
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGVCdXR0b25Ob01lZGlhRmlsZVNlbGVjdGVkTGFiZWwp
OgorICAgICAgICAoV2ViQ29yZTo6ZmlsZUJ1dHRvbk5vTWVkaWFGaWxlc1NlbGVjdGVkTGFiZWwp
OgorICAgICAgICAqIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9Mb2dnaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZVN1cHBvcnRlZE5vbkltYWdlTWltZVR5cGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVVbnN1cHBvcnRlZFRleHRNSU1FVHlwZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6Ok1lbW9yeVByZXNzdXJlSGFuZGxlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OmV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybU1vdXNl
RXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1N
b3VzZUV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oOgorICAgICAg
ICAqIHBsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjptYWluQnVuZGxlSXNFcXVhbFRvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9SdW50aW1lQXBw
bGljYXRpb25DaGVja3NJT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmguCisgICAgICAgICogcGxhdGZvcm0vUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzSU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aGFuZGxlVG91
Y2hFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxUeXBlcy5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dW5zY2FsZWRWaXNpYmxlQ29udGVu
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3OjphY3R1YWxTY3JvbGxYKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OmFjdHVhbFNjcm9sbFkpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZEluQm90aERpcmVjdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmlzUGlubmVkSG9yaXpvbnRhbGx5
SW5EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmlzUGlubmVk
VmVydGljYWxseUluRGlyZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmlzVG91Y2hTY3JvbGxhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc092ZXJmbG93U2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpkaWRTdGFydFNjcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZGlkRW5kU2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGFibGVBcmVhOjpkaWRVcGRhdGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYWJsZUFyZWE6OnNldElzVXNlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxhYmxlQXJlYTo6aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01pbmltdW1Qb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aXNIb3Jpem9udGFsU2Nyb2xs
ZXJQaW5uZWRUb01heGltdW1Qb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxl
QXJlYTo6aXNWZXJ0aWNhbFNjcm9sbGVyUGlubmVkVG9NaW5pbXVtUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmlzVmVydGljYWxTY3JvbGxlclBpbm5lZFRvTWF4
aW11bVBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbGJhci5oOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZVB1cmdlYWJsZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpzaG91bGRV
c2VQdXJnZWFibGVNZW1vcnkpOgorICAgICAgICAqIHBsYXRmb3JtL1N1ZGRlblRlcm1pbmF0aW9u
Lmg6CisgICAgICAgICogcGxhdGZvcm0vU3VwcGxlbWVudGFibGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN1cHBsZW1lbnRhYmxlOjpwcm92aWRlU3VwcGxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdXBwbGVtZW50YWJsZTo6cmVtb3ZlU3VwcGxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
dXBwbGVtZW50YWJsZTo6cmVxdWlyZVN1cHBsZW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL1N5
c3RlbU1lbW9yeS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TdHJpbmdUcnVuY2F0b3IuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9UaHJlYWRDaGVjay5oOgor
ICAgICAgICAqIHBsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGhyZWFkR2xvYmFsRGF0YTo6VGhyZWFkR2xvYmFsRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpUaHJlYWRHbG9iYWxEYXRhOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZEds
b2JhbERhdGE6OnNldFdlYkNvcmVUaHJlYWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnRocmVh
ZEdsb2JhbERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9UaHJlYWRUaW1lcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhy
ZWFkVGltZXJzOjpUaHJlYWRUaW1lcnMpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkVGltZXJz
OjpzaGFyZWRUaW1lckZpcmVkSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3JtL1RpbWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVyQmFzZTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGltZXJCYXNlOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVyQmFzZTo6c2V0TmV4
dEZpcmVUaW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaW1lci5oOgorICAgICAgICAoV2ViQ29y
ZTo6VGltZXJCYXNlOjppc0FjdGl2ZSk6CisgICAgICAgICogcGxhdGZvcm0vVVJMLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmVuYWJsZVVSTFNjaGVtZUNhbm9uaWNhbGl6YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6ZXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6VVJMOjpwYXJzZSk6CisgICAg
ICAgICogcGxhdGZvcm0vVVJMLmg6CisgICAgICAgICogcGxhdGZvcm0vV2lkZ2V0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmg6CisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQXVkaW9CdWZmZXJMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxl
UmVhZGVyOjpBdWRpb0ZpbGVSZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVh
ZGVyOjp+QXVkaW9GaWxlUmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRl
cjo6cmVhZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpnZXRTaXpl
UHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OmNyZWF0ZUJ1cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZSk6CisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaC4KKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvRmlsZVJlYWRlcjo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFk
ZXI6OmRhdGFTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9TZXNzaW9u
SU9TLm1tOgorICAgICAgICAoU09GVF9MSU5LX1BPSU5URVIpOgorICAgICAgICAoLVtXZWJBdWRp
b1Nlc3Npb25IZWxwZXIgaW5pdFdpdGhDYWxsYmFjazpXZWJDb3JlOjpdKToKKyAgICAgICAgKC1b
V2ViQXVkaW9TZXNzaW9uSGVscGVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV2ViQXVkaW9TZXNz
aW9uSGVscGVyIGludGVycnVwdGlvbjpdKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2Vzc2lv
bjo6c2V0Q2F0ZWdvcnkpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3Rp
bmF0aW9uTWFjLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVh
ZGVyTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6QXVkaW9GaWxl
UmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TZXNzaW9uTWFjLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9tYWMvTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHA6CisgICAgICAgIChNZWRp
YVNlc3Npb25NYW5hZ2VyOjp1cGRhdGVTZXNzaW9uU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2NmL1NoYXJlZEJ1ZmZlckNGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6
U2hhcmVkQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9VUkxDRi5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vY29jb2EvS2V5RXZlbnRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Ondp
bmRvd3NLZXlDb2RlRm9yQ2hhckNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhY2hlRnJhbWVJbmZvKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjp1cGRhdGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpvcmlnaW5hbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
Om9yaWdpbmFsU2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OmVuc3VyZUZyYW1lSW5mb0lzQ2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpmcmFtZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSXND
b21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lRHVy
YXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUhhc0Fs
cGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVPcmllbnRh
dGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnRlcm5hbEFkdmFuY2VBbmlt
YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzRGFyayk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp3aWR0aCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHA6CisgICAgICAgIChpbml0Rm9udENhY2hlTG9ja09uY2UpOgorICAgICAgICAoRm9udExv
Y2tlcjo6Rm9udExvY2tlcik6CisgICAgICAgIChGb250TG9ja2VyOjp+Rm9udExvY2tlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpmb250Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0Q2FjaGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpyZWxl
YXNlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGFJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1cmdlSW5h
Y3RpdmVGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmRyYXdTaW1wbGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmRyYXdHbHlwaEJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBo
cy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Zm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpyb3VuZHNHbHlwaEFkdmFuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6aGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJl
ZU5vZGU6OmluaXRpYWxpemVQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFw
aGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UmFp
c2VkRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW1vamlEcmF3aW5nRW5hYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEVtb2ppRHJhd2luZ0VuYWJsZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllcjo6d2lsbEJlRGVzdHJveWVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpj
b250ZW50c0xheWVyRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6
cGl4ZWxBbGlnbm1lbnRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6
aGFzRmxhdHRlbmVkUGVyc3BlY3RpdmVUcmFuc2Zvcm0pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ljb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1RpbGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6Omlz
U3Vic2FtcGxlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW50U2l6ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omluc3RhbGxlZE1lZGlhRW5naW5lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6aXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVz
cyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlj
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpoYXNXaXJlbGVzc1BsYXliYWNr
VGFyZ2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6d2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnNldFdpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
OjpzZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnBsYXliYWNrVGFyZ2V0QXZhaWxh
YmlsaXR5Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6YXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6cmVhZHlGb3JQbGF5YmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6dm9sdW1lQ2hhbmdlZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyQ2xpZW50OjptZWRpYVBsYXllckN1cnJlbnRQbGF5YmFja1RhcmdldElzV2ly
ZWxlc3NDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyQ2xpZW50OjptZWRp
YVBsYXllclBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OnZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxl
c3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpzaG93
UGxheWJhY2tUYXJnZXRQaWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlSW50ZXJmYWNlOjpoYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6
c2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpzZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eUxpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZh
Y2U6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlSW50ZXJmYWNlOjpyZWFkeUZvclBsYXliYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0
YTo6U2ltcGxlRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZv
bnREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNlbnRlclRydW5jYXRlVG9CdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6cmlnaHRUcnVuY2F0ZVRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0
Q2xpcFRvQ2hhcmFjdGVyQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0Q2xpcFRvV29y
ZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0VHJ1bmNhdGVUb0J1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjp0cnVuY2F0ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdU
cnVuY2F0b3I6OmNlbnRlclRydW5jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1RydW5j
YXRvcjo6cmlnaHRUcnVuY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdUcnVuY2F0b3I6
OmxlZnRUcnVuY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0
Q2xpcFRvQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1RydW5jYXRvcjo6cmln
aHRDbGlwVG9Xb3JkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0
b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlv
bi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oOgorICAg
ICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6c3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1cmVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQVZUcmFja1ByaXZh
dGVBVkZPYmpDSW1wbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFWVHJhY2tQcml2YXRlQVZGT2Jq
Q0ltcGw6OmxhYmVsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1NYXhUaW1l
TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OndrQVZBc3NldFJlc29sdmVkVVJMKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRCbGFja0JlcnJ5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN1
cHBvcnRzQWNjZWxlcmF0ZWRGaWx0ZXJBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDQTo6Y29udGVudHNMYXllckZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6Y29tcHV0ZVZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uc0Zyb21LZXlmcmFtZXMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXR1cENvbnRlbnRzTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjptZWRpYUxheWVyTXVzdEJlVXBk
YXRlZE9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNv
bXB1dGVQaXhlbEFsaWdubWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1D
QUZpbHRlcnMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJGbHVzaFNjaGVk
dWxlck1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50UnVuTG9vcCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckZsdXNoU2NoZWR1bGVyOjpzY2hlZHVsZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbToKKyAgICAgICAgKC1b
V2ViQW5pbWF0aW9uRGVsZWdhdGUgYW5pbWF0aW9uRGlkU3RhcnQ6XSk6CisgICAgICAgIChQbGF0
Zm9ybUNBTGF5ZXJNYWM6OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoUGxhdGZvcm1DQUxh
eWVyOjppc1dlYkxheWVyKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm91bmRzT25N
YWluVGhyZWFkKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6c2V0UG9zaXRpb25Pbk1haW5U
aHJlYWQpOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjpzZXRBbmNob3JQb2ludE9uTWFpblRo
cmVhZCk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OnNldFRpbGVTaXplKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvbnRyb2xsZXIubW06CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmVtb3ZlQWxsVGlsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnJlbW92ZUFsbFNlY29uZGFyeVRpbGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpyZW1vdmVUaWxlc0luQ29ob3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpyZXZhbGlkYXRlVGlsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OmNyZWF0ZVRpbGVMYXllcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRh
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6Y29weVVuc2NhbGVkRnJhbWVBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNHQ29sb3JX
aXRoRGV2aWNlV2hpdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0dDb2xvcldpdGhEZXZp
Y2VSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvRmxvYXRTaXplQ0cuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRp
ZW50Q0cuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNSR0JDb2xvclNwYWNlUmVmKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldFN0cm9rZUFuZEZpbGxDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJT1N1cmZhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OmpwZWdVVEkp
OgorICAgICAgICAoV2ViQ29yZTo6dXRpRnJvbU1JTUVUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckRhdGE6OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJE
YXRhOjpwdXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZHJhd1BhdHRlcm5DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlU291cmNlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlU291cmNlT3B0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6aW1hZ2VTb3VyY2VPcHRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpvcmlnaW5hbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VTb3VyY2VDR01hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2lu
dENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFNpemVDRy5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QYXR0ZXJuQ0cuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRQbGF0Zm9ybURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6fkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6cGxhdGZvcm1EYXRhSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpwbGF0Zm9ybURhdGFBc3NpZ24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6cGxhdGZvcm1Jc0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6
OnNldEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6YWxsb3dzTGln
YXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5t
bTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I6On5EaXNw
bGF5UmVmcmVzaE1vbml0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25p
dG9yOjpyZXF1ZXN0UmVmcmVzaENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlS
ZWZyZXNoTW9uaXRvcjo6ZGlzcGxheUxpbmtGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9pb3MvRm9udFNlcnZpY2VzSU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRTZXJ2aWNlc0lPUzo6Rm9udFNlcnZpY2VzSU9TKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9pb3MvR3JhcGhpY3NDb250ZXh0M0RJT1MuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cu
aC4KKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TOjppbnRl
cm5hbElEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUy5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ludFJlY3RNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlQVZGSU9TOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKToKKyAgICAgICAg
KFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M6On5JbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGSU9TKToKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZJT1M6OmtpbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9NZWRpYVBsYXll
clByaXZhdGVJT1MuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL01l
ZGlhUGxheWVyUHJpdmF0ZUlPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZv
bnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMpOgorICAgICAgICAoV2ViQ29yZTo6Zm9u
dEhhc1ZlcnRpY2FsR2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Q2hhcldpZHRoSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1DcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0
YTo6Y29udGFpbnNDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpkZXRlcm1pbmVQaXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1XaWR0aEZvckdseXBoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2lvcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbTogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2Vz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
Q29yZVRleHQubW06CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNv
bGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRmxvYXRQb2ludE1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvRmxvYXRSZWN0TWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9G
bG9hdFNpemVNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNo
ZU1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0
TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Ojpmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR2x5cGhQYWdlVHJlZU5vZGVNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2x5
cGhQYWdlOjpmaWxsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3ND
b250ZXh0M0RNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5H
cmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
c2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEb3RQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1
bWVudE1hcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25NYWMubW06
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQb2ludE1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvSW50UmVjdE1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvSW50U2l6ZU1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVk
aWFQbGF5ZXJQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVG
b250RGF0YUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2lt
cGxlRm9udERhdGFNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdM
TGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbToK
KyAgICAgICAgKC1bV2ViR0xMYXllciBjb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOl0p
OgorICAgICAgICAoLVtXZWJHTExheWVyIGRpc3BsYXldKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvV2ViTGF5ZXIubW06CisgICAgICAgIChXZWJDb3JlOjpkcmF3TGF5ZXJDb250
ZW50cyk6CisgICAgICAgICgtW1dlYlNpbXBsZUxheWVyIGRpc3BsYXldKToKKyAgICAgICAgKC1b
V2ViU2ltcGxlTGF5ZXIgZHJhd0luQ29udGV4dDpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvV2ViVGlsZWRMYXllci5tbToKKyAgICAgICAgKCtbV2ViVGlsZWRMYXllciBzaG91
bGREcmF3T25NYWluVGhyZWFkXSk6CisgICAgICAgICgtW1dlYlRpbGVkTGF5ZXIgZGlzcGxheV0p
OgorICAgICAgICAoLVtXZWJUaWxlZExheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTDo6ZHJhd0J1ZmZlcnNFWFQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpFeHRlbnNp
b25zM0RPcGVuR0xDb21tb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cmVzaGFwZUZCT3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhckRlcHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4OjptdWx0aXBseSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9Gb250V2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvQ29udGVudEZpbHRlcklPUy5tbTogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZpbHRlci5oLgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9EZXZpY2VNb3Rpb25DbGllbnRJT1MuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpEZXZpY2VNb3Rpb25DbGllbnRJT1M6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW9zL0RldmljZU1vdGlvbkNsaWVudElPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
aW9zL0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1M6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vaW9zL0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9pb3MvS2V5RXZlbnRJT1MubW06CisgICAgICAgICogcGxhdGZvcm0vaW9zL01JTUVU
eXBlUmVnaXN0cnlJT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL0NyZWRlbnRpYWxTdG9yYWdlTWFjLm1tLgorICAgICAgICAqIHBsYXRmb3JtL2lv
cy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9QYXN0ZWJvYXJkSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3Jp
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVzb3VyY2VNSU1FVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OnN1cHBvcnRlZElt
YWdlVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6c3VwcG9ydGVkUGFzdGVi
b2FyZFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6Omhhc0RhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZyk6CisgICAgICAgICogcGxhdGZv
cm0vaW9zL1BsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5oLgorICAgICAgICAqIHBsYXRm
b3JtL2lvcy9QbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtUGFzdGVib2FyZDo6d3JpdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF0Zm9y
bVNjcmVlbklPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1BsYXRmb3JtU3Bl
ZWNoU3ludGhlc2l6ZXJJT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TU0xL
ZXlHZW5lcmF0b3JJT1MuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvU2Nyb2xs
QW5pbWF0b3JJT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rp
c3BsYXlTbGVlcERpc2FibGVyLmguCisgICAgICAgICogcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1h
dG9ySU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvU2Nyb2xsVmlld0lPUy5t
bTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1Njcm9sbGJhclRoZW1lSU9TLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TY3JvbGxiYXJUaGVtZUlPUy5tbTogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vaW9zL1NlbGVjdGlvblJlY3QuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9pb3MvU2VsZWN0aW9uUmVjdC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9pb3MvU291bmRJT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvbWFjL0NoYXJzZXREYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vaW9zL1N5c3RlbU1l
bW9yeUlPUy5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9UaGVtZUlPUy5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwLgorICAg
ICAgICAqIHBsYXRmb3JtL2lvcy9UaGVtZUlPUy5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGls
ZUNhY2hlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjppc1NwZWN1bGF0
aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVDYWNo
ZS5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVHcmlkLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9UaWxlR3JpZC5tbTogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vaW9zL1RpbGVHcmlkVGlsZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Db250ZW50RmlsdGVyLmguCisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVHcmlkVGls
ZS5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVMYXllci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuaC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGlsZUxheWVyLm1tOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1dlYkNvcmVNb3Rpb25NYW5hZ2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0tpbGxSaW5nTm9uZS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYkNvcmVN
b3Rpb25NYW5hZ2VyLm1tOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViQ29yZVN5
c3RlbUludGVyZmFjZUlPUy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViQ29y
ZVN5c3RlbUludGVyZmFjZUlPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dl
YkV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJFdmVudC5tbTogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbTogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERpc2FibGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlTbGVlcERpc2FibGVyOjpEaXNwbGF5U2xlZXBEaXNhYmxlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5U2xlZXBEaXNhYmxlcjo6fkRpc3BsYXlTbGVlcERpc2FibGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvRmlsZVN5c3RlbU1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
S2lsbFJpbmdNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL01lbW9yeVByZXNzdXJlSGFu
ZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeVByZXNzdXJlSGFuZGxlcjo6aW5z
dGFsbCk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnJlbGVhc2VN
ZW1vcnkpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybUNsb2NrQ00ubW06CisgICAg
ICAgIChQbGF0Zm9ybUNsb2NrQ006OlBsYXRmb3JtQ2xvY2tDTSk6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL1NvZnRMaW5raW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1N5c3RlbVZlcnNp
b25NYWMubW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuUGxhY2Vo
b2xkZXJWaWV3Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuUGxh
Y2Vob2xkZXJWaWV3Lm1tOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVl
bldhcm5pbmdWaWV3Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVu
V2FybmluZ1ZpZXcubW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVu
V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93
Lm1tOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFzLmg6CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVOU0NlbGxFeHRyYXMubToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJGb250Q2FjaGUubW06CisgICAgICAgICgrW1dlYkZvbnRDYWNoZSBmb250V2l0aEZhbWls
eTp0cmFpdHM6c2l6ZTpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3Ry
eS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNy
ZWRlbnRpYWxTdG9yYWdlOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q3JlZGVudGlhbFN0b3Jh
Z2U6OmNsZWFyQ3JlZGVudGlhbHMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVu
dGlhbFN0b3JhZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5v
dGlmaWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpidWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxsU2VuZFJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlRGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51ZVNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXREZWZhdWx0QWxsb3dDb29raWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmRlZmF1bHRBbGxvd0Nvb2tp
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVzb3VyY2VSZXF1ZXN0QmFz
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DcmVkZW50aWFsU3RvcmFnZUNGTmV0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpzYXZlVG9QZXJzaXN0
ZW50U3RvcmFnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Qcm94eVNlcnZlckNGTmV0LmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpzZXRNYWluUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6aXNNYWluUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6dXBkYXRlRnJvbURlbGVnYXRlUHJlc2Vydmlu
Z09sZEhUVFBCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG9VcGRh
dGVSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojph
cHBseVdlYkFyY2hpdmVIYWNrRm9yTWFpbCk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
SFRUUENvbm5lY3Rpb25TZXR0aW5nc09uU3RhcnR1cCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OnJlcG9ydEVycm9yVG9DbGllbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvaW9zL05ldHdvcmtTdGF0ZU5vdGlmaWVySU9TLmNwcDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6Ok5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpOZXR3b3JrU3RhdGVOb3RpZmllcik6CisgICAgICAg
IChXZWJDb3JlOjpOZXR3b3JrU3RhdGVOb3RpZmllcjo6c2V0SXNPbkxpbmUpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9vay5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xvb2subW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvaW9zL1Jlc291cmNlSGFuZGxlSU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2lvcy9XZWJDb3JlVVJMUmVzcG9uc2VJT1MuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmguCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9pb3MvV2ViQ29yZVVSTFJlc3BvbnNlSU9TLm1tOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6Om1hYyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvQ3Jl
ZGVudGlhbFN0b3JhZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFn
ZTo6c2F2ZVRvUGVyc2lzdGVudFN0b3JhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
bWFjL1Jlc291cmNlRXJyb3JNYWMubW06CisgICAgICAgIChkaWN0aW9uYXJ5VGhhdENhbkNvZGUp
OgorICAgICAgICAoLVtXZWJDdXN0b21OU1VSTEVycm9yIGVuY29kZVdpdGhDb2RlcjpdKToKKyAg
ICAgICAgKE5TRXJyb3JGcm9tQ0ZFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yOjpuc0Vycm9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhh
bmRsZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnN5bmNocm9ub3VzV2lsbFNlbmRSZXF1ZXN0
RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlTlNVUkxD
b25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2NoZWR1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OnVuc2NoZWR1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OlJlc291cmNlUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZU5TVVJMUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmFwcGx5V2ViQXJjaGl2ZUhhY2tG
b3JNYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6dXNlUXVpY2tMb29r
UmVzb3VyY2VDYWNoaW5nUXVpcmtzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9V
VElVdGlsaXRpZXMubW06CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJl
c291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5tbToKKyAgICAgICAgKC1bV2ViQ29yZVJlc291cmNlSGFu
ZGxlQXNEZWxlZ2F0ZSBjb25uZWN0aW9uU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U6XSk6Cisg
ICAgICAgICgtW1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUgY29ubmVjdGlvbjpkaWRS
ZWNlaXZlUmVzcG9uc2U6XSk6CisgICAgICAgICgtW1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVs
ZWdhdGUgY29ubmVjdGlvbjpkaWRSZWNlaXZlRGF0YUFycmF5Ol0pOgorICAgICAgICAoLVtXZWJD
b3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZURhdGE6bGVu
Z3RoUmVjZWl2ZWQ6XSk6CisgICAgICAgICgtW1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdh
dGUgY29ubmVjdGlvbkRpZEZpbmlzaExvYWRpbmc6XSk6CisgICAgICAgICgtW1dlYkNvcmVSZXNv
dXJjZUhhbmRsZUFzRGVsZWdhdGUgY29ubmVjdGlvbjpkaWRGYWlsV2l0aEVycm9yOl0pOgorICAg
ICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6
U1FMaXRlRGF0YWJhc2U6OnNxbGl0ZTNIYW5kbGUpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9T
UUxpdGVGaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06
OnRydW5jYXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRmls
ZVN5c3RlbS5oOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbjo6YmVnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb246OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxpdGVUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlVHJh
bnNhY3Rpb246OnN0b3ApOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9pb3MvU1FMaXRlRGF0YWJh
c2VUcmFja2VyLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vc3FsL2lvcy9TUUxpdGVE
YXRhYmFzZVRyYWNrZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVt
b3J5UHJlc3N1cmVIYW5kbGVyLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvaW9zL1NRTGl0
ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9LaWxsUmluZ05vbmUuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1M
b2NhbGUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmN1cnNvck1vdmVtZW50SXRlcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjSUNVLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6cmVn
aXN0ZXJFbmNvZGluZ05hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6cmVn
aXN0ZXJDb2RlY3MpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0
cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5kVGV4dENvZGVjTWFwcyk6CisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNhbkh5cGhlbmF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0
ZUNhY2hlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNz
dXJlSGFuZGxlci5oLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVD
YWNoZS5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMvQ2hhcnNldERhdGEu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVN
YWM6OmZvcm1hdERhdGVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZU1hYzo6bWF4aW11
bVdpZHRoRm9yRGF0ZVR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvbWFjL1RleHRCb3Vu
ZGFyaWVzLm1tOgorICAgICAgICAoV2ViQ29yZTo6aXNTa2lwQ2hhcmFjdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzV2hpdGVzcGFjZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1dv
cmREZWxpbWl0aW5nQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3ltYm9sQ2hhcmFj
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6dG9rZW5pemVyRm9yU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmZpbmRTaW1wbGVXb3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZENvbXBsZXhX
b3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpmaW5kTmV4dFdvcmRGcm9tSW5kZXgpOgorICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvbWFjL1RleHRDb2RlY01hYy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMv
VGV4dENvZGVjTWFjLmg6CisKIDIwMTQtMDEtMDggIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1
ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNjE1MzIu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL01haW5UaHJlYWQuY3BwCmluZGV4IDA0NGE2NDcyMDljNzQyMjE2NjAzYWViN2FjNzJmN2Q4
ZTFlYjYyNTEuLmY1NzJhM2ZmNWI3YTkyODhkMDRiMGMxMjhkNThkZWJmNTIzMDdkMmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L01haW5UaHJlYWQuY3BwCkBAIC0yNjYsNiArMjY2LDEzIEBAIGJvb2wgaXNNYWluVGhyZWFkKCkK
IH0KICNlbmRpZgogCisjaWYgIVVTRShXRUJfVEhSRUFEKQorYm9vbCBjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZCkKK3sKKyAgICByZXR1
cm4gdGhyZWFkSWQgPT0gY3VycmVudFRocmVhZCgpOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUo
UEFSQUxMRUxfR0MpCiBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8Ym9vbD4qIGlzR0NUaHJlYWQ7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaCBiL1NvdXJjZS9X
VEYvd3RmL01haW5UaHJlYWQuaAppbmRleCA1MGRlYjlhOWQxNTBiMDY0MTMyMTFkNmFlZjYyZDM3
YzBiYzkzZjY5Li4xM2Y1NTIwNGJlNDcxMmY0MTNhN2NhNjg2MTFhZDdlMmNhYThkN2IwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKKysrIGIvU291cmNlL1dURi93dGYv
TWFpblRocmVhZC5oCkBAIC01NSwxMyArNTUsMTQgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNlZChib29sIHBhdXNlZCk7CiAKIFdURl9FWFBPUlRf
UFJJVkFURSBib29sIGlzTWFpblRocmVhZCgpOwogCitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBj
YW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoVGhyZWFkSWRlbnRpZmllcik7CisKICNp
ZiBVU0UoV0VCX1RIUkVBRCkKIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGlzV2ViVGhyZWFkKCk7
CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1VJVGhyZWFkKCk7CiBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBpbml0aWFsaXplV2ViVGhyZWFkKCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBp
bml0aWFsaXplQXBwbGljYXRpb25VSVRocmVhZElkZW50aWZpZXIoKTsKIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGluaXRpYWxpemVXZWJUaHJlYWRJZGVudGlmaWVyKCk7Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgYm9vbCBjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoVGhyZWFkSWRlbnRp
Zmllcik7CiB2b2lkIGluaXRpYWxpemVXZWJUaHJlYWRQbGF0Zm9ybSgpOwogI2Vsc2UKIGlubGlu
ZSBib29sIGlzV2ViVGhyZWFkKCkgeyByZXR1cm4gaXNNYWluVGhyZWFkKCk7IH0KQEAgLTEwMiwx
MSArMTAzLDEzIEBAIHVzaW5nIFdURjo6Y2FuY2VsQ2FsbE9uTWFpblRocmVhZDsKIHVzaW5nIFdU
Rjo6c2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNlZDsKIHVzaW5nIFdURjo6aXNNYWluVGhyZWFk
OwogdXNpbmcgV1RGOjppc01haW5UaHJlYWRPckdDVGhyZWFkOwordXNpbmcgV1RGOjpjYW5BY2Nl
c3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQ7Cit1c2luZyBXVEY6OmlzVUlUaHJlYWQ7Cit1c2lu
ZyBXVEY6OmlzV2ViVGhyZWFkOwogI2lmIFVTRShXRUJfVEhSRUFEKQogdXNpbmcgV1RGOjppbml0
aWFsaXplV2ViVGhyZWFkOwogdXNpbmcgV1RGOjppbml0aWFsaXplQXBwbGljYXRpb25VSVRocmVh
ZElkZW50aWZpZXI7CiB1c2luZyBXVEY6OmluaXRpYWxpemVXZWJUaHJlYWRJZGVudGlmaWVyOwot
dXNpbmcgV1RGOjpjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQ7CiAjZW5kaWYKIAog
I2VuZGlmIC8vIE1haW5UaHJlYWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA0OWIwYTk3MjZm
MjAxMzNlYWI4NmQyZmYwMzkxMTA1MzU2YTBkZmVjLi4xOGEwOWI3ZmMwYzI4NzA5ZDkxZGZlZmY3
NTQ5NTAyYTI1YWY1OTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMTkxNyw2ICsxOTE3LDkg
QEAgX3drU2lnbmFsQ0ZSZWFkU3RyZWFtRW5kCiBfd2tTaWduYWxDRlJlYWRTdHJlYW1FcnJvcgog
X3drU2lnbmFsQ0ZSZWFkU3RyZWFtSGFzQnl0ZXMKIAorX19aTjdXZWJDb3JlMjdhcHBsaWNhdGlv
bklzQWRvYmVJbnN0YWxsZXJFdgorX19aTjdXZWJDb3JlMjdhcHBsaWNhdGlvbklzTWljcm9zb2Z0
TXlEYXlFdgorCiAjaWYgIVBMQVRGT1JNKElPUykKIC5vYmpjX2NsYXNzX25hbWVfRE9NQXR0cgog
Lm9iamNfY2xhc3NfbmFtZV9ET01DREFUQVNlY3Rpb24KQEAgLTIwNDUsOCArMjA0OCw2IEBAIF9f
Wk43V2ViQ29yZTI2Y29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnVFdgogX19aTjdXZWJDb3JlMjZj
b250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0V2CiBfX1pON1dlYkNvcmUyNnBkZkRvY3VtZW50VHlw
ZURlc2NyaXB0aW9uRXYKIF9fWk43V2ViQ29yZTI2dXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3JF
dgotX19aTjdXZWJDb3JlMjdhcHBsaWNhdGlvbklzQWRvYmVJbnN0YWxsZXJFdgotX19aTjdXZWJD
b3JlMjdhcHBsaWNhdGlvbklzTWljcm9zb2Z0TXlEYXlFdgogX19aTjdXZWJDb3JlMjdjb250ZXh0
TWVudUl0ZW1UYWdTaG93Rm9udHNFdgogX19aTjdXZWJDb3JlMjdjb250ZXh0TWVudUl0ZW1UYWdV
bmRlcmxpbmVFdgogX19aTjdXZWJDb3JlMjhjb250ZXh0TWVudUl0ZW1UYWdDYXBpdGFsaXplRXYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAxNWU3M2NlNzYxNmY5NDY0NGZmOTg2NWJiODY0YWRiMjNkYjUxM2UxLi4wZDUwY2ZjZDM3
Zjg5Y2M0YTk5NjI3ZWJhZjVmZmZiMWM0ZjUzYzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNzAsNiArMTcwLDggQEAKIAkJ
MDczQkUzNEUxN0QxODBCMjAwMkJENDMxIC8qIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcy
MjFCQUIxN0NGMEFENDAwODQ4RTUxIC8qIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3Iu
Y3BwICovOyB9OwogCQkwNzNCRTM0RjE3RDE4MTgzMDAyQkQ0MzEgLyogUlRDSWNlQ2FuZGlkYXRl
RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzIyMUJBNjE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRDSWNlQ2FuZGlkYXRlRGVzY3JpcHRv
ci5jcHAgKi87IH07CiAJCTA3M0JFMzUwMTdEMTgxQTYwMDJCRDQzMSAvKiBSVENQZWVyQ29ubmVj
dGlvbkhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDcyMjFCQTgxN0NGMEFENDAwODQ4RTUxIC8qIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxl
ci5jcHAgKi87IH07CisJCTA3NDMwMEE1MEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclBy
aXZhdGVJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwNzQzMDBBMzBGNEI4QkNGMDA4MDc2Q0QgLyogTWVkaWFQbGF5ZXJQcml2YXRlSU9TLm1tICov
OyB9OworCQkwNzQzMDBBNjBGNEI4QkNGMDA4MDc2Q0QgLyogTWVkaWFQbGF5ZXJQcml2YXRlSU9T
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzQzMDBB
NDBGNEI4QkNGMDA4MDc2Q0QgLyogTWVkaWFQbGF5ZXJQcml2YXRlSU9TLmggKi87IH07CiAJCTA3
NTM4NjAyMTQ0ODlFOTgwMEI3ODQ1MiAvKiBDYWNoZWRUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc1Mzg2MDAxNDQ4OUU5ODAwQjc4
NDUyIC8qIENhY2hlZFRleHRUcmFjay5jcHAgKi87IH07CiAJCTA3NTM4NjAzMTQ0ODlFOTgwMEI3
ODQ1MiAvKiBDYWNoZWRUZXh0VHJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3NTM4NjAxMTQ0ODlFOTgwMEI3ODQ1MiAvKiBDYWNoZWRUZXh0VHJh
Y2suaCAqLzsgfTsKIAkJMDc2MzA2RDAxN0UxNDc4RDAwNUE3QzRFIC8qIE1lZGlhU3RyZWFtVHJh
Y2tTb3VyY2VzQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3NjMwNkNDMTdFMTQ3OEQwMDVBN0M0RSAvKiBNZWRpYVN0cmVhbVRyYWNrU291
cmNlc0NhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTMzMyw2ICszMzUsOCBAQAogCQkwN0RDNUZENDE3RDNFRUU5MDA5OUY4OTAgLyog
SlNSVENTdGF0c1Jlc3BvbnNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA3REM1RkQzMTdEM0VFRTkwMDk5Rjg5MCAvKiBKU1JUQ1N0YXRz
UmVzcG9uc2VDdXN0b20uY3BwICovOyB9OwogCQkwN0UxMTZCMTE0ODlDOUExMDBFQzVBQ0UgLyog
SlNUZXh0VHJhY2tDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDdFMTE2QjAxNDg5QzlBMTAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VzdG9t
LmNwcCAqLzsgfTsKIAkJMDdFMTE3MDcxNDg5RUJFQjAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3Vl
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA3RTExNzA2MTQ4OUVCRUIwMEVDNUFDRSAvKiBKU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAgKi87
IH07CisJCTA3RUQzNUEyMTZENkRDQzkwMDIyNDhGMyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDczNTdDNzcxNkQyREYwRDAwRUQ5OUU3IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1Mu
bW0gKi87IH07CisJCTA3RUQzNUEzMTZENkRDRTIwMDIyNDhGMyAvKiBJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzM1N0M3NjE2RDJERjBEMDBFRDk5RTcgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFW
RklPUy5oICovOyB9OwogCQkwN0Y5NDQxNjE4NjREMDQ2MDA1RDMxQ0IgLyogTWVkaWFTZXNzaW9u
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RBRThDMDgxNzQ2Qjk1NzAwNTMyRDc4IC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0ZGREU2ODE4MUFF
RDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdGRkRFNjYxODFBRUQ0MjAwNzJENDA5
IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCAqLzsgfTsKIAkJMDdGRkRFNjkxODFBRUQ0
MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0ZGREU2NzE4MUFFRDQyMDA3MkQ0MDkgLyog
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCAqLzsgfTsKQEAgLTQ1MSw2ICs0NTUsOCBAQAogCQkw
RjEzMTYzRTE2RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNEMTZFRDBDQzgwMDM1
Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMTMxNjQwMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9y
bUNBRmlsdGVyc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMTMxNjNGMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5t
bSAqLzsgfTsKIAkJMEYxNURBOEEwRjNBQUVFNzAwMDBDRTQ3IC8qIEFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjE1REE4OTBGM0FBRUU3MDAwMENFNDcgLyogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUu
aCAqLzsgfTsKKwkJMEYxNzc0ODAxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9T
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3NzQ3
RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCAqLzsgfTsKKwkJMEYxNzc0
ODExMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNzc0N0YxMzc4Qjc3MjAwOURBNzZB
IC8qIFNjcm9sbEFuaW1hdG9ySU9TLm1tICovOyB9OwogCQkwRjI5QzE2RTEzMDBDMkUyMDAyRDc5
NEUgLyogQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjlDMTZEMTMwMEMyRTIwMDJENzk0RSAvKiBBY2Nlc3Np
YmlsaXR5QWxsSW5PbmUuY3BwICovOyB9OwogCQkwRjNERDQ0RjEyRjVFQTFCMDAwRDkxOTAgLyog
U2hhZG93Qmx1ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi87IH07CiAJ
CTBGM0RENDUwMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNERDQ0RTEyRjVFQTFCMDAwRDkxOTAg
LyogU2hhZG93Qmx1ci5oICovOyB9OwpAQCAtNDc1LDYgKzQ4MSw3IEBACiAJCTBGNjA1QUVEMTVG
OTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MDVBRUIxNUY5NDg0ODAwNERGMEMwIC8q
IFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY2MzgzREQxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Ny
b2xsaW5nVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjYzODNEQjE4NjE1QjI5MDAzRTVEQjUgLyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNw
cCAqLzsgfTsKIAkJMEY2MzgzREUxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5n
VHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MzgzREMxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTdBNjU4MTU1REE4
MUUwMEZBREQ0QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk3QTY1NzE1NURBODFFMDBGQURENEMg
LyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tICovOyB9OwogCQkwRkEyNEQ3OTE2MkRGOTE5
MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVwZGF0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBMjRENzcxNjJERjkxOTAwQTNGNEMwIC8qIEdy
YXBoaWNzTGF5ZXJVcGRhdGVyLmNwcCAqLzsgfTsKIAkJMEZBMjREN0ExNjJERjkxOTAwQTNGNEMw
IC8qIEdyYXBoaWNzTGF5ZXJVcGRhdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkEyNEQ3ODE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXll
clVwZGF0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkE4OEVCRDE2QThEMUJEMDBGOTk5ODQgLyogU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZBODhFQkMxNkE4RDFCRDAwRjk5OTg0IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZU1h
Yy5tbSAqLzsgfTsKQEAgLTg4Niw2ICs4OTMsNyBAQAogCQkxRjNDM0JFQTEzNUNBRjNDMDBCOEMx
QUMgLyogTWVkaWFDb250cm9scy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxRjNDM0JFODEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5j
cHAgKi87IH07CiAJCTFGM0MzQkVCMTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjNDM0JFOTEz
NUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5oICovOyB9OwogCQkxRjNGMTk1MzE0OTlD
QTc2MDBBNUFFQTcgLyogUE9ERnJlZUxpc3RBcmVuYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUYzRjE5NTIxNDk5Q0E3NjAwQTVBRUE3IC8qIFBPREZy
ZWVMaXN0QXJlbmEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkxRjY4RDRBRTE0QkI5RENBMDA3QjVDNjIgLyogTWVtb3J5UHJlc3N1cmVIYW5kbGVy
SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUY2
OEQ0QUQxNEJCOURDQTAwN0I1QzYyIC8qIE1lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbSAqLzsg
fTsKIAkJMUZBRkJGMTgxNUE1RkE2RTAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGQUZCRjE3MTVBNUZBNTIw
MDA4M0EyMCAvKiBVVElVdGlsaXRpZXMubW0gKi87IH07CiAJCTFGQUZCRjE5MTVBNUZBNzQwMDA4
M0EyMCAvKiBVVElVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFGQUZCRjE2MTVBNUZBNTIwMDA4M0EyMCAvKiBVVElVdGlsaXRpZXMuaCAq
LzsgfTsKIAkJMUZDNDBGQjkxNjU1Q0NCNjAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGlt
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUZD
NDBGQjgxNjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwICovOyB9
OwpAQCAtOTE3LDYgKzkyNSw4IEBACiAJCTI2NTU0MTM5MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlF
dmVudENvZGVzSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyNjU1NDEzNzE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5oICovOyB9
OwogCQkyNjU1NDEzQTE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRJT1MubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjU1NDEzODE0ODk4MTFDMDAw
REZDNUQgLyogS2V5RXZlbnRJT1MubW0gKi87IH07CiAJCTI2NTU0MTUyMTQ4OUIyMzMwMDBERkM1
RCAvKiBDdXJzb3JJT1MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjY1NTQxNEIxNDg5QUEyQjAwMERGQzVEIC8qIEN1cnNvcklPUy5jcHAgKi87IH07
CisJCTI2NjAxRUJGMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY2MDFFQkQx
NEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMjY2MDFFQzAxNEIzQjlBRDAw
MTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY2MDFFQkUxNEIzQjlBRDAwMTJDMEZFIC8qIFBs
YXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tICovOyB9OwogCQkyNjkyMzk5NjE1MDVFMUFBMDA5RTU3
RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2OTIzOTkyMTUwNUUxQUEwMDlFNTdGQyAvKiBKU0lEQlZl
cnNpb25DaGFuZ2VFdmVudC5oICovOyB9OwogCQkyNkI5OTk4RjE4MDNBRTcyMDBEMDExMjEgLyog
UmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI2Qjk5OThFMTgwM0FFNzIwMEQwMTEyMSAvKiBSZWdpc3RlckFsbG9jYXRvci5o
ICovOyB9OwogCQkyNkI5OTk5MTE4MDNCM0M5MDBEMDExMjEgLyogU3RhY2tBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2Qjk5OTkwMTgw
M0IzQzkwMEQwMTEyMSAvKiBTdGFja0FsbG9jYXRvci5oICovOyB9OwpAQCAtOTMzLDYgKzk0Myw3
IEBACiAJCTI2RkFFNENEMTg1MkUzQTUwMDRDOEM0NiAvKiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNkZBRTRDOTE4NTJFM0E1MDA0QzhDNDYgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZS5oICovOyB9OwogCQkyNkZBRTRDRTE4NTJFM0E1MDA0QzhDNDYgLyog
U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RkFFNENBMTg1MkUz
QTUwMDRDOEM0NiAvKiBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGUuY3BwICovOyB9OwogCQkyNkZBRTRDRjE4NTJFM0E1MDA0QzhDNDYgLyogU3luY2hyb25v
dXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkZBRTRDQjE4NTJFM0E1MDA0QzhDNDYg
LyogU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmggKi87
IH07CisJCTI5MDM3MTY1MTZCQTExQkMwMEZFRkRGMCAvKiBDb250ZW50RmlsdGVySU9TLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjkwMzcxNjQxNkJB
MTFCQzAwRkVGREYwIC8qIENvbnRlbnRGaWx0ZXJJT1MubW0gKi87IH07CiAJCTI5MTdCNTYxMTQ3
MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNoU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5MTdCNTVFMTQ3MzQ5NkMwMDUyQzlEMCAv
KiBMYXllckZsdXNoU2NoZWR1bGVyLmNwcCAqLzsgfTsKIAkJMjkxN0I1NjIxNDczNDk2QzAwNTJD
OUQwIC8qIExheWVyRmx1c2hTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI5MTdCNTVGMTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNo
U2NoZWR1bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMjkxN0I1NjMxNDczNDk2QzAwNTJDOUQwIC8qIExheWVyRmx1c2hTY2hlZHVsZXJDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5MTdC
NTYwMTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwODUsNiArMTA5
NiwxMCBAQAogCQkzMTMxM0Y2NTE0NDNCMzVGMDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEz
MTNGNjMxNDQzQjM1RTAwNkUyQTkwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLzsgfTsK
IAkJMzEzMTNGNjYxNDQzQjM1RjAwNkUyQTkwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTMxM0Y2NDE0NDNC
MzVFMDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLzsgfTsKIAkJMzEzOEE5RTUx
NDc0NDM0NjAwQjBFRDEyIC8qIFN0eWxlU2hhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTM4QTlFNDE0NzQ0MzQ2MDBCMEVEMTIgLyogU3R5bGVT
aGFkZXIuaCAqLzsgfTsKKwkJMzE0MDM3OUIxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rp
b25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTQwMzc5NzEyNEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCAqLzsg
fTsKKwkJMzE0MDM3OUMxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE0MDM3OTgx
MjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tICovOyB9OworCQkzMTQw
Mzc5RDEyNEJFQTdGMDBBRjQwRTQgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNDAzNzk5MTI0QkVB
N0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oICovOyB9OworCQkzMTQw
Mzc5RTEyNEJFQTdGMDBBRjQwRTQgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTQwMzc5QTEyNEJF
QTdGMDBBRjQwRTQgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MubW0gKi87IH07CiAJCTMx
NDZGRTZFMTg0NDIwQTgwMDFBOTM3QyAvKiBPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNDZGRTY2MTg0NDIwODcw
MDFBOTM3QyAvKiBPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCAqLzsgfTsKIAkJMzE0NkZFNkYxODQ0
MjBBQTAwMUE5MzdDIC8qIE9FU1RleHR1cmVGbG9hdExpbmVhci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTQ2RkU2NTE4NDQyMDg3MDAxQTkzN0Mg
LyogT0VTVGV4dHVyZUZsb2F0TGluZWFyLmNwcCAqLzsgfTsKIAkJMzE0NkZFNzQxODQ0MjM3MDAw
MUE5MzdDIC8qIEpTT0VTVGV4dHVyZUZsb2F0TGluZWFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNDZGRTcwMTg0NDIzNjcwMDFBOTM3QyAvKiBK
U09FU1RleHR1cmVGbG9hdExpbmVhci5jcHAgKi87IH07CkBAIC0xMTIyLDYgKzExMzcsNyBAQAog
CQkzMTlBRTA2MzE0MkQ2QjI0MDA2NTYzQTEgLyogU3R5bGVGaWx0ZXJEYXRhLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxOUFFMDYxMTQyRDZCMjQw
MDY1NjNBMSAvKiBTdHlsZUZpbHRlckRhdGEuY3BwICovOyB9OwogCQkzMTlBRTA2NDE0MkQ2QjI0
MDA2NTYzQTEgLyogU3R5bGVGaWx0ZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTlBRTA2MjE0MkQ2QjI0MDA2NTYzQTEgLyogU3R5bGVGaWx0
ZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMzE5RkJENUYxNUQyRjQ2NDAwOTY0MEE2IC8qIENhY2hlZEltYWdlQ2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTlGQkQ1RDE1RDJGNDQ0
MDA5NjQwQTYgLyogQ2FjaGVkSW1hZ2VDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzMUFCNTAwMDEyMjg3OEEyMDAxQTdEQjAgLyogR3Jh
cGhpY3NDb250ZXh0M0RJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxQUI0RkZGMTIyODc4QTIwMDFBN0RCMCAvKiBHcmFwaGljc0NvbnRleHQzRElP
Uy5oICovOyB9OwogCQkzMUMwRkYyMTBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9u
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzFDMEZGMUIwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmNwcCAqLzsg
fTsKIAkJMzFDMEZGMjIwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYxQzBF
NENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCAqLzsgfTsKIAkJMzFDMEZG
MjQwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdFRyYW5zaXRpb25FdmVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYxRTBFNENFQjZFMDA3
RDZGRTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCAqLzsgfTsKQEAgLTExMzcsNiArMTE1
Myw4IEBACiAJCTMxQzBGRjREMEU0Q0VGREQwMDdENkZFNSAvKiBET01XZWJLaXRUcmFuc2l0aW9u
RXZlbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MUMwRkY0NzBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50Lm1tICov
OyB9OwogCQkzMUMwRkY0RTBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2
ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxQzBGRjQ4MEU0Q0VGREQwMDdENkZFNSAvKiBET01XZWJLaXRUcmFuc2l0aW9uRXZlbnRJ
bnRlcm5hbC5oICovOyB9OwogCQkzMUQ1OTFCMzE2Njk3QTZDMDBFNkJGMDIgLyogUGx1Z0luQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUQ1
OTFCMTE2Njk3QTZDMDBFNkJGMDIgLyogUGx1Z0luQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMzFFQUY5N0UxMjE0MzVBNDAwRTdDMUJG
IC8qIERldmljZU1vdGlvbkNsaWVudElPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzFFQUY5N0MxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlv
bkNsaWVudElPUy5oICovOyB9OworCQkzMUVBRjk3RjEyMTQzNUE0MDBFN0MxQkYgLyogRGV2aWNl
TW90aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzFFQUY5N0QxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElP
Uy5tbSAqLzsgfTsKIAkJMzFFQzFFMjgxNEZGNjBFRTAwQzk0NjYyIC8qIEpTTm90aWZpY2F0aW9u
UGVybWlzc2lvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxRUMxRTI2MTRGRjYwRUUwMEM5NDY2MiAvKiBKU05vdGlmaWNhdGlvblBl
cm1pc3Npb25DYWxsYmFjay5jcHAgKi87IH07CiAJCTMxRUMxRTI5MTRGRjYwRUUwMEM5NDY2MiAv
KiBKU05vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFFQzFFMjcxNEZGNjBFRTAwQzk0NjYyIC8qIEpT
Tm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLmggKi87IH07CiAJCTMxRkIxQTU3MTIwQTVE
MDYwMERDMDJBMCAvKiBEZXZpY2VNb3Rpb25DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRkIxQTRGMTIwQTVEMDYwMERDMDJBMCAvKiBEZXZp
Y2VNb3Rpb25DbGllbnQuaCAqLzsgfTsKQEAgLTExNzcsNiArMTE5NSw3IEBACiAJCTM3MUY1M0U5
MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxRjUzRTcwRDI3MDRGOTAwRUNFMEQ1
IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmggKi87IH07CiAJCTM3MUY1M0VBMEQyNzA0RjkwMEVD
RTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFGNTNFODBEMjcwNEY5MDBFQ0UwRDUgLyogQ1NTVW5p
Y29kZVJhbmdlVmFsdWUuY3BwICovOyB9OwogCQkzNzIwMjE5OTEwNjIxM0M2MDBGMjVDNEIgLyog
Rm9udFNtb290aGluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDM3MjAyMTk4MTA2MjEzQzYwMEYyNUM0QiAvKiBGb250U21vb3RoaW5nTW9kZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTM3MjdE
RkQ1MTQyQUFFNDUwMEQ0NDlDQiAvKiBGb250Q2FjaGVJT1MubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzI3REZENDE0MkFBRTQ1MDBENDQ5Q0IgLyog
Rm9udENhY2hlSU9TLm1tICovOyB9OwogCQkzNzJDMDBDNDEyOTYxMUYxMDA1Qzk1NzUgLyogVGV4
dEJvdW5kYXJpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzcyQzAwQzMxMjk2MTFGMTAwNUM5NTc1IC8qIFRleHRCb3VuZGFyaWVzLmNwcCAqLzsg
fTsKIAkJMzcyQzAwRDkxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25zLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzJDMDBEODEyOTYxOUY4MDA1
Qzk1NzUgLyogRmluZE9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkzNzQ0NTcwRjBEQjA1RkE1MDBBRTA5OTIgLyogU1ZHR2x5cGhNYXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NDQ1NzBF
MERCMDVGQTUwMEFFMDk5MiAvKiBTVkdHbHlwaE1hcC5oICovOyB9OwpAQCAtMTIxMSw2ICsxMjMw
LDcgQEAKIAkJMzdERENEQTcxMzg0NTAxQzAwMDhCNzkzIC8qIE1IVE1MUGFyc2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0REQ0RBMzEzODQ1MDFD
MDAwOEI3OTMgLyogTUhUTUxQYXJzZXIuaCAqLzsgfTsKIAkJMzdFMzUyNEIxMjQ1MEM1MjAwQkFG
NUQ5IC8qIElucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzN0UzNTI0QTEyNDUwQzUyMDBCQUY1RDkgLyogSW5wdXRUeXBlLmNwcCAqLzsg
fTsKIAkJMzdFMzUyNEQxMjQ1MEM2NjAwQkFGNUQ5IC8qIElucHV0VHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdFMzUyNEMxMjQ1MEM2NjAwQkFG
NUQ5IC8qIElucHV0VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTM3RTY1OTUwMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlP
Uy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RTY1
OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSAqLzsgfTsKIAkJMzdG
NTY3Q0UxNjUzNThGNDAwRERFOTJCIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzcyQjA5NTE2NTM1ODU2MDAw
QTQ5Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzN0Y4MThGRDBENjU3NjA2MDA1RTFGMDUgLyogV2Vi
Q29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzN0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdGODE4
RkUwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYw
NSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi87IH07CkBAIC0xMzk1LDExICsxNDE1LDE2IEBA
CiAJCTQ0MUIwNTVFMENENzdBNDgwMDdDMUYxOCAvKiBET01IVE1MSUZyYW1lRWxlbWVudFByaXZh
dGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0MjlBQUZEMENCODRFQTUwMDc2NDdDNSAvKiBET01IVE1MSUZyYW1lRWxlbWVu
dFByaXZhdGUuaCAqLzsgfTsKIAkJNDQxQjA1NjAwQ0Q3N0E2NTAwN0MxRjE4IC8qIERPTUhUTUxP
YmplY3RFbGVtZW50UHJpdmF0ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQyOUFBRkYwQ0I4NEVDMzAwNzY0N0M1IC8qIERP
TUhUTUxPYmplY3RFbGVtZW50UHJpdmF0ZS5oICovOyB9OwogCQk0NDJBQkNENjE3RDkyNjJGMDBE
MzA3MTUgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnRDRk5ldC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDJBQkNENTE3RDkyNjJGMDBEMzA3MTUg
LyogU3luY2hyb25vdXNMb2FkZXJDbGllbnRDRk5ldC5jcHAgKi87IH07CisJCTQ0MkFGN0E5MTAy
Q0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MkFGN0E3MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2su
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NDJB
RjdBQTEwMkNEREVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQyQUY3QTgxMDJDRERFQTAwOEZENEQzIC8qIFF1
aWNrTG9vay5tbSAqLzsgfTsKIAkJNDQzMTFDRDYxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3Vt
ZW50RnJhZ21lbnRQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NDMxMUNENDEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1lbnRGcmFnbWVu
dFByaXZhdGUuaCAqLzsgfTsKIAkJNDQzMTFDRDcxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3Vt
ZW50UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDQzMTFDRDUxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3VtZW50UHJpdmF0ZS5oICovOyB9
OwogCQk0NDMxMUNEODEyRTRFMjRCMDAwQThEMTkgLyogRE9NRG9jdW1lbnRQcml2YXRlLmggaW4g
Q29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NDMxMUNENTEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1lbnRQcml2YXRlLmggKi87IH07
CiAJCTQ0MzExQ0Q5MTJFNEUyNTcwMDBBOEQxOSAvKiBET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0
ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDQzMTFDRDQxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3VtZW50RnJhZ21lbnRQ
cml2YXRlLmggKi87IH07CiAJCTQ0MzExRjgyMTJFNEU2NkMwMDBBOEQxOSAvKiBET01Eb2N1bWVu
dEZyYWdtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg1RTcxMTQ1MEFDNUQ1MzQwMDUzMjcwRiAvKiBET01Eb2N1bWVudEZyYWdtZW50
SW50ZXJuYWwuaCAqLzsgfTsKKwkJNDQzRjA0MjcwRTc1QzhGQjAwN0U1NDA3IC8qIE5ldHdvcmtT
dGF0ZU5vdGlmaWVySU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0M0YwNDI2MEU3NUM4RkIwMDdFNTQwNyAvKiBOZXR3b3JrU3RhdGVOb3RpZmll
cklPUy5jcHAgKi87IH07CisJCTQ0NEQ0RTIzMEY3MDhCMkUwMDMxNThFMCAvKiBXZWJDb3JlVVJM
UmVzcG9uc2VJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NDRENEUyMTBGNzA4QjJFMDAzMTU4RTAgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLm1t
ICovOyB9OworCQk0NDc2NTMxQjEzMzE3MDk5MDAwNkI3ODkgLyogU1NMS2V5R2VuZXJhdG9ySU9T
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NzY1
MzFBMTMzMTcwOTkwMDA2Qjc4OSAvKiBTU0xLZXlHZW5lcmF0b3JJT1MuY3BwICovOyB9OwogCQk0
NDc5NTgwNDE2NDNCNDlBMDAxRTBBN0YgLyogUGFyc2VkQ29udGVudFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Nzk1ODAzMTY0M0I0N0IwMDFF
MEE3RiAvKiBQYXJzZWRDb250ZW50VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTQ0Nzk1ODA1MTY0M0I0QjIwMDFFMEE3RiAvKiBQYXJzZWRD
b250ZW50VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NDc5NTgwMjE2NDNCNDdCMDAxRTBBN0YgLyogUGFyc2VkQ29udGVudFR5cGUuY3BwICov
OyB9OwogCQk0NDhBMjlCRjBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OEEy
OUJEMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oICovOyB9OwpA
QCAtMTQxMSw4ICsxNDM2LDE2IEBACiAJCTQ0OTZFM0EwMTM5ODEzQTUwMDNFRTMyQSAvKiBKU1NW
R01QYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDQ5NkUzOUYxMzk4MTNBNTAwM0VFMzJBIC8qIEpTU1ZHTVBhdGhFbGVtZW50LmggKi87
IH07CiAJCTQ0OTZFM0EyMTM5ODEzQ0IwMDNFRTMyQSAvKiBKU1NWR01QYXRoRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDk2RTNBMTEz
OTgxM0NCMDAzRUUzMkEgLyogSlNTVkdNUGF0aEVsZW1lbnQuY3BwICovOyB9OwogCQk0NDlCMTlG
NTBGQTcyRUNFMDAxNUNBNEEgLyogSFRNTFBhcnNlclF1aXJrcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ5QjE5RjMwRkE3MkVDRTAwMTVDQTRBIC8q
IEhUTUxQYXJzZXJRdWlya3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk0NEEyMERCOTBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3Bv
bnNlSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NEEyMERCODBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDRBMjhBQUMxMkRG
QjhBQzAwQUU5MjNCIC8qIE1hdGhNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyOEFBQjEyREZCOEFDMDBBRTkyM0IgLyog
TWF0aE1MRWxlbWVudEZhY3RvcnkuaCAqLzsgfTsKIAkJNDRBMjhBQUYxMkRGQjhCRjAwQUU5MjNC
IC8qIE1hdGhNTE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NEEyOEFBRTEyREZCOEJGMDBBRTkyM0IgLyogTWF0aE1MTmFtZXMuaCAqLzsgfTsK
KwkJNDRDMzYzRjAwRkFBN0JCMzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lP
Uy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRDMzYz
RUUwRkFBN0JCMzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQ0QzM2M0YxMEZB
QTdCQjMwMDk3RjhDQyAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEMzNjNFRjBGQUE3QkIzMDA5
N0Y4Q0MgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLm1tICovOyB9OworCQk0NEMzQ0ZF
ODE1NTZCRTVEMDAwMTM2MDkgLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRDM0NGRTcxNTU2QkU1RDAw
MDEzNjA5IC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NEM5OTE4MjBGM0QxRTBEMDA1ODY2NzAg
LyogU2Nyb2xsYmFyVGhlbWVJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NEM5OTE4MTBGM0QxRTBEMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJ
T1MubW0gKi87IH07CisJCTQ0Qzk5MTg2MEYzRDFFQkUwMDU4NjY3MCAvKiBTY3JvbGxiYXJUaGVt
ZUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRD
OTkxODUwRjNEMUVCRTAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLmggKi87IH07CisJCTQ0
Qzk5MTlGMEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRDOTkxOUQwRjNEMjEwRTAwNTg2NjcwIC8qIFRo
ZW1lSU9TLmggKi87IH07CisJCTQ0Qzk5MUEwMEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Qzk5MTlF
MEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5tbSAqLzsgfTsKIAkJNDREQUI1QjExNUE2MjM1
ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NERBQjVBRjE1QTYyMzU4MDA5N0MxRTQg
LyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLzsgfTsKIAkJNDREQUI1QjIxNUE2MjM1
ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDREQUI1QjAxNUE2MjM1ODAwOTdDMUU0IC8q
IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oICovOyB9OwogCQk0NTA5OUM0MTEzNzBBNzgwMDA1
OEQ1MTMgLyogSWNvblVSTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NTA5OUM0MDEzNzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAgKi87IH07
CkBAIC0yMjQyLDggKzIyNzUsMTIgQEAKIAkJN0UxMkU5MTAxNUZBNUQzQTAwNUU0MTI2IC8qIEN1
c3RvbUZpbHRlck1lc2hHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0UxMkU5MEUxNUZBNUQzQTAwNUU0MTI2IC8qIEN1c3RvbUZpbHRl
ck1lc2hHZW5lcmF0b3IuY3BwICovOyB9OwogCQk3RTMzQ0QwMTEyN0YzNDBEMDBCRThGMTcgLyog
UHVyZ2VQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0UzM0NEMDAxMjdGMzQwRDAwQkU4RjE3IC8qIFB1cmdlUHJpb3JpdHkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RTM3RUYyRTEzMzky
MDg4MDBCMjkyNTAgLyogU3VicmVzb3VyY2VMb2FkZXJDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTM3RUYyRDEzMzkyMDg4MDBCMjkyNTAgLyog
U3VicmVzb3VyY2VMb2FkZXJDRi5jcHAgKi87IH07CisJCTdFNDI4Q0U1MTNFMzQwN0YwMDNCNjYx
QyAvKiBSZXNvdXJjZUhhbmRsZUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdFNDI4Q0U0MTNFMzQwN0YwMDNCNjYxQyAvKiBSZXNvdXJjZUhhbmRs
ZUlPUy5tbSAqLzsgfTsKIAkJN0U0NkY2RkExNjI3QTJDQTAwMDYyMjIzIC8qIEpTT0VTRWxlbWVu
dEluZGV4VWludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3RTQ2RjZGODE2MjdBMkM5MDAwNjIyMjMgLyogSlNPRVNFbGVtZW50SW5kZXhVaW50LmNw
cCAqLzsgfTsKIAkJN0U0NkY2RkIxNjI3QTJDQTAwMDYyMjIzIC8qIEpTT0VTRWxlbWVudEluZGV4
VWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0
NkY2RjkxNjI3QTJDOTAwMDYyMjIzIC8qIEpTT0VTRWxlbWVudEluZGV4VWludC5oICovOyB9Owor
CQk3RTQ3NEUxRTEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTQ3NEUx
QjEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0U0NzRFMUYxMjQ5
NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0NzRFMUMxMjQ5NERDOTAwMjM1MzY0IC8q
IFNRTGl0ZURhdGFiYXNlVHJhY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTdFNDc0RTIwMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRh
YmFzZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0U0NzRFMUQxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5j
cHAgKi87IH07CiAJCTdFNUQ3QTc2MTYxRDNGOEYwMDg5NkMzNCAvKiBPRVNFbGVtZW50SW5kZXhV
aW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdF
NUQ3QTczMTYxRDNGOEYwMDg5NkMzNCAvKiBPRVNFbGVtZW50SW5kZXhVaW50LmNwcCAqLzsgfTsK
IAkJN0U1RDdBNzcxNjFEM0Y4RjAwODk2QzM0IC8qIE9FU0VsZW1lbnRJbmRleFVpbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNUQ3QTc0MTYxRDNG
OEYwMDg5NkMzNCAvKiBPRVNFbGVtZW50SW5kZXhVaW50LmggKi87IH07CiAJCTdFNjZFMjMzMTZE
NkVCNkMwMEY3RTdGRiAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNjZFMjMxMTZENkVCNkMwMEY3
RTdGRiAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcCAqLzsgfTsKQEAgLTM1NDEsNiAr
MzU3OCw4IEBACiAJCUE1MDJDNURGMTMwNDlCMzUwMEZDN0Q1MyAvKiBXZWJTYWZlR0NBY3Rpdml0
eUNhbGxiYWNrSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNTAyQzVERDEzMDQ5QjM1MDBGQzdENTMgLyogV2ViU2FmZUdDQWN0aXZpdHlDYWxsYmFj
a0lPUy5oICovOyB9OwogCQlBNTEzQjNENzExNEIxNjY2MDAxQzQyOUIgLyogS2V5RXZlbnRDb2Nv
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVDOTc0
Q0YxMTQ4NUZGMTAwNjZGMkFCIC8qIEtleUV2ZW50Q29jb2EuaCAqLzsgfTsKIAkJQTUxM0IzRDgx
MTRCMTY2QTAwMUM0MjlCIC8qIEtleUV2ZW50Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUM5NzREMDExNDg1RkYxMDA2NkYyQUIgLyogS2V5
RXZlbnRDb2NvYS5tbSAqLzsgfTsKKwkJQTUxNkU4QjcxMzZFMDREQjAwNzZDM0MwIC8qIExvY2Fs
aXplZERhdGVDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTUxNkU4QjQxMzZFMDREQjAwNzZDM0MwIC8qIExvY2FsaXplZERhdGVDYWNoZS5oICov
OyB9OworCQlBNTE2RThCODEzNkUwNERCMDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUxNkU4QjUx
MzZFMDREQjAwNzZDM0MwIC8qIExvY2FsaXplZERhdGVDYWNoZS5tbSAqLzsgfTsKIAkJQTU0QTgy
RUMxNTIyOEQyRjAwQzcyQkE2IC8qIERPTU5vZGVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTRBODJFQTE1MjI4Q0EzMDBDNzJCQTYgLyog
RE9NTm9kZVByaXZhdGUuaCAqLzsgfTsKIAkJQTU0QTgyRjExNTIyOERGNjAwQzcyQkE2IC8qIERP
TU5vZGVQcml2YXRlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNTRBODJFQTE1MjI4Q0EzMDBDNzJCQTYgLyogRE9NTm9kZVBy
aXZhdGUuaCAqLzsgfTsKIAkJQTU3MzJCMEExMzZBMTYxRDAwNUM4RDdDIC8qIERhdGVDb21wb25l
bnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1
NzMyQjA4MTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5jcHAgKi87IH07CkBAIC00
MDExLDYgKzQwNTAsNyBAQAogCQlBOUQyNDgwNzBENzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1l
VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlE
MjQ4MDMwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGUuaCAqLzsgfTsKIAkJQTlEMjQ4
MDgwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGVBcnJheS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUQyNDgwNDBENzU3RTdEMDBGREY5
NTkgLyogSlNET01NaW1lVHlwZUFycmF5LmNwcCAqLzsgfTsKIAkJQTlEMjQ4MDkwRDc1N0U3RDAw
RkRGOTU5IC8qIEpTRE9NTWltZVR5cGVBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTlEMjQ4MDUwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWlt
ZVR5cGVBcnJheS5oICovOyB9OworCQlBQTEyREY0OTE3NDNERjgzMDA0REFGREYgLyogUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXplcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFBRTM3NTVEMTc0MjlCQ0MwMDYyMDBDMiAvKiBQbGF0Zm9ybVNwZWVj
aFN5bnRoZXNpemVySU9TLm1tICovOyB9OwogCQlBQTIxRUNDQTBBQkYwRkJBMDAyQjgzNEMgLyog
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBQTA5NzhFRDBBQkFBNkUxMDA4NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZS5jcHAgKi87IH07CiAJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJ
bWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBQTA5NzhFRTBBQkFBNkUxMDA4NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFBMkE1QUNEMTZB
NDg1RkEwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNWb2ljZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTJBNUFDNjE2QTQ4NUQ1MDA5NzVBMjUg
LyogU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwICovOyB9OwpAQCAtNTI2NCw2ICs1MzA0LDggQEAK
IAkJQkU4RUYwNEMxNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFja0xpc3QuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkU4RUYwNDgxNzFDOTAx
NDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFja0xpc3QuY3BwICovOyB9OwogCQlCRThFRjA0RDE3MUM5
MDE0MDA5QjQ4QzMgLyogSlNWaWRlb1RyYWNrTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkU4RUYwNDkxNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlk
ZW9UcmFja0xpc3QuaCAqLzsgfTsKIAkJQkU5MTNEODAxODFFRjkyNDAwRENCMDlFIC8qIFRyYWNr
UHJpdmF0ZUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJFOTEzRDdGMTgxRUY4RTUwMERDQjA5RSAvKiBUcmFja1ByaXZhdGVCYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkVBODA3QzgwRjcx
NEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkVBODA3QzYwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVj
dGlvblJlY3QuY3BwICovOyB9OworCQlCRUE4MDdDOTBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0
aW9uUmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkVBODA3QzcwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCRUYyOUVFQjE3MTVERDA5MDBD
NEI0QzkgLyogQXVkaW9UcmFja1ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJFRjI5RUU5MTcxNUREMDkwMEM0QjRDOSAvKiBBdWRpb1RyYWNr
UHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUJFRjI5RUVDMTcxNUREMDkwMEM0QjRDOSAvKiBWaWRlb1RyYWNrUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkVGMjlFRUExNzE1REQw
OTAwQzRCNEM5IC8qIFZpZGVvVHJhY2tQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzA0NkUxQUMxMjA4QTlGRTAwQkEyQ0Y3IC8qIExv
Y2FsaXplZFN0cmluZ3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzA0NkUxQUIxMjA4QTlGRTAwQkEyQ0Y3IC8qIExvY2FsaXplZFN0cmluZ3MuY3Bw
ICovOyB9OwpAQCAtNTMwNyw2ICs1MzQ5LDggQEAKIAkJQzU1RTM4QzAxMDA0MEQ1RDAwQTU2QkRC
IC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM1NUUzOEJDMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFt
ZXNwYWNlSW1wbC5jcHAgKi87IH07CiAJCUM1NzJFRTFGMTIwMUM5QkMwMDdEOEY4MiAvKiBKU0lE
QkluZGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTcyRUUxRDEyMDFDOUJDMDA3RDhGODIgLyogSlNJREJJbmRleC5oICovOyB9OwogCQlDNTdGRURF
MTEyMTJFRTlDMDA5N0JFNjUgLyogRmlsZVN5c3RlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTdGRURFMDEyMTJFRTlDMDA5N0JFNjUgLyogRmls
ZVN5c3RlbS5jcHAgKi87IH07CisJCUM1ODM2MUE5MTc0NDUyM0YwMDE3MzUxMSAvKiBGb250U2Vy
dmljZXNJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1ODM2MUE3MTc0NDUyM0YwMDE3MzUxMSAvKiBGb250U2VydmljZXNJT1MuaCAqLzsgfTsKKwkJ
QzU4MzYxQUExNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODM2MUE4MTc0NDUyM0YwMDE3
MzUxMSAvKiBGb250U2VydmljZXNJT1MubW0gKi87IH07CiAJCUM1ODVBNjYyMTFENEZBQzUwMDRD
M0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNjYwMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5k
aW5nVXRpbGl0aWVzLmNwcCAqLzsgfTsKIAkJQzU4NUE2NjMxMUQ0RkFDNTAwNEMzRTRCIC8qIElE
QkJpbmRpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1ODVBNjYxMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVz
LmggKi87IH07CiAJCUM1ODVBNjdEMTFENEZCMDgwMDRDM0U0QiAvKiBKU0lEQkFueS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2NjUxMUQ0RkIw
NzAwNEMzRTRCIC8qIEpTSURCQW55LmggKi87IH07CkBAIC01MzgwLDYgKzU0MjQsOCBAQAogCQlD
RDU0QTc2MzE4MEY5RjcwMDBCMDc2QzkgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
NTRBNzYxMTgwRjlGNzAwMEIwNzZDOSAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQy5oICovOyB9OwogCQlDRDU0REU0NzE3NDY4QjZGMDA1RTVCMzYgLyogTWVkaWFTZXNzaW9u
TWFuYWdlck1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRDU0REU0NTE3NDY4QjZGMDA1RTVCMzYgLyogTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5j
cHAgKi87IH07CiAJCUNENTRERTRCMTc0NjlDNkQwMDVFNUIzNiAvKiBBdWRpb1Nlc3Npb25NYWMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1NERF
NDkxNzQ2OUM2RDAwNUU1QjM2IC8qIEF1ZGlvU2Vzc2lvbk1hYy5jcHAgKi87IH07CisJCUNENTU5
NjkxMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1NTk2OEYxNDc1QjY3ODAwMUQw
QkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5jcHAgKi87IH07CisJCUNENTU5NjkyMTQ3NUI2Nzgw
MDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTU5NjkwMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0Zp
bGVSZWFkZXJJT1MuaCAqLzsgfTsKIAkJQ0Q2MUZFNjcxNzk0QUFEQjAwNDEwMUVCIC8qIE1lZGlh
U291cmNlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjFBOTQyRTExNUI1Q0UyMjAwRDUyNUQxIC8qIE1lZGlhU291cmNlUmVnaXN0cnku
Y3BwICovOyB9OwogCQlDRDYxRkU2ODE3OTRBQURCMDA0MTAxRUIgLyogTWVkaWFTb3VyY2VSZWdp
c3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFB
OTQyRTIxNUI1Q0UyMjAwRDUyNUQxIC8qIE1lZGlhU291cmNlUmVnaXN0cnkuaCAqLzsgfTsKIAkJ
Q0Q2NDFFQjMxODE4RjVFRDAwRUU0QzQxIC8qIE1lZGlhU291cmNlUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q2NDFFQjExODE4RjVFRDAw
RUU0QzQxIC8qIE1lZGlhU291cmNlUHJpdmF0ZS5oICovOyB9OwpAQCAtNTQ0NCw2ICs1NDkwLDcg
QEAKIAkJQ0RDOEI1QUExODA0N0ZGMTAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZP
YmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RD
OEI1QTgxODA0N0ZGMTAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tICov
OyB9OwogCQlDREM4QjVBQjE4MDQ3RkYxMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QzhCNUE5MTgwNDdGRjEwMDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oICov
OyB9OwogCQlDREM4QjVBRDE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUNs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RD
OEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCAqLzsg
fTsKKwkJQ0RDQTgyOTYxNjc5MTAwRjAwODc1NzE0IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9u
SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RD
QTgyOTQxNjc5MTAwRjAwODc1NzE0IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tICov
OyB9OwogCQlDREQ1MjVENzE0NUI2REQwMDA4RDIwNEQgLyogSlNIVE1MTWVkaWFFbGVtZW50Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
RjY1Q0NDMTQ1QjZBRkUwMEM0QzdBQSAvKiBKU0hUTUxNZWRpYUVsZW1lbnRDdXN0b20uY3BwICov
OyB9OwogCQlDREQ3MDg5NjE4MzU5RjZGMDAyQjNEQzYgLyogU2FtcGxlTWFwLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERDcwODk0MTgzNTlGNkUw
MDJCM0RDNiAvKiBTYW1wbGVNYXAuY3BwICovOyB9OwogCQlDREQ3MDg5NzE4MzU5RjZGMDAyQjNE
QzYgLyogU2FtcGxlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREQ3MDg5NTE4MzU5RjZGMDAyQjNEQzYgLyogU2FtcGxlTWFwLmggKi87IH07CkBA
IC01ODAwLDYgKzU4NDcsOCBAQAogCQlFMUZGOEY2QzE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTFGRjhGNkExODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5LmNwcCAqLzsgfTsKIAkJRTFGRjhGNkQxODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0b0Fs
Z29yaXRobVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUZGOEY2QjE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnkuaCAqLzsgfTsKIAkJRTQwMUMyNzUxN0NFNTNFQzAwQzQxQTM1IC8qIEVsZW1lbnRJdGVyYXRv
ckFzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0MDFDMjc0MTdDRTUzRUMwMEM0MUEzNSAvKiBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25z
LmggKi87IH07CisJCUU0MjRBMzlFMTMzMERGMDEwMENGNkRDOSAvKiBUaWxlR3JpZFRpbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MjRBMzlEMTMz
MERGMDEwMENGNkRDOSAvKiBUaWxlR3JpZFRpbGUuaCAqLzsgfTsKKwkJRTQyNEEzQTAxMzMwREYx
RTAwQ0Y2REM5IC8qIFRpbGVHcmlkVGlsZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0MjRBMzlGMTMzMERGMUUwMENGNkRDOSAvKiBUaWxlR3JpZFRp
bGUubW0gKi87IH07CiAJCUU0MjVBNDlBMTgyOTJCODQwMDIwQ0ZDRiAvKiBDb2xsZWN0aW9uSW5k
ZXhDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQyNUE0OTkxODI5MkI4NDAwMjBDRkNGIC8qIENvbGxlY3Rpb25JbmRleENhY2hlLmggKi87IH07
CiAJCUU0Mjk1RkE0MTJCMDYxNEUwMEQxQUNFMCAvKiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQyOTVGQTMxMkIw
NjE0RTAwRDFBQ0UwIC8qIFJlc291cmNlTG9hZFByaW9yaXR5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzMTA1QjgxNjc1MEYwQzAwREIyRkI4
IC8qIE5vZGVUcmF2ZXJzYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQzMTA1QjcxNjc1MEYwQzAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3Bw
ICovOyB9OwpAQCAtNTg0NSw4ICs1ODk0LDE1IEBACiAJCUU0NEVFM0E4MTc1NzdFQkQwMEVFRThD
RiAvKiBGb250R2VuZXJpY0ZhbWlsaWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NEVFM0E2MTc1NzZFNTUwMEVFRThDRiAvKiBGb250R2VuZXJp
Y0ZhbWlsaWVzLmNwcCAqLzsgfTsKIAkJRTQ1MzIyQUIxNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVj
dG9yUXVlcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ1MzIyQTkxNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuY3BwICovOyB9Owog
CQlFNDUzMjJBQzE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1MzIyQUExNDBDRTI2NzAwNUEw
RjkyIC8qIFNlbGVjdG9yUXVlcnkuaCAqLzsgfTsKKwkJRTQ1MzkwMUQwRUFGQ0FDQTAwMzY5NUM4
IC8qIE1JTUVUeXBlUmVnaXN0cnlJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDUzOTAxODBFQUZDQUNBMDAzNjk1QzggLyogTUlNRVR5cGVSZWdp
c3RyeUlPUy5tbSAqLzsgfTsKIAkJRTQ1MzkwMUUwRUFGQ0FDQTAwMzY5NUM4IC8qIFBhc3RlYm9h
cmRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NDUzOTAxOTBFQUZDQUNBMDAzNjk1QzggLyogUGFzdGVib2FyZElPUy5tbSAqLzsgfTsKKwkJRTQ1
MzkwNDMwRUFGRDYzNzAwMzY5NUM4IC8qIFBsYXRmb3JtU2NyZWVuSU9TLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1MzkwMzIwRUFGRDYzNzAwMzY5
NUM4IC8qIFBsYXRmb3JtU2NyZWVuSU9TLm1tICovOyB9OworCQlFNDUzOTA0NTBFQUZENjM3MDAz
Njk1QzggLyogU2Nyb2xsVmlld0lPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0NTM5MDM0MEVBRkQ2MzcwMDM2OTVDOCAvKiBTY3JvbGxWaWV3SU9T
Lm1tICovOyB9OwogCQlFNDUzOTA0NjBFQUZENjM3MDAzNjk1QzggLyogU2hhcmVkVGltZXJJT1Mu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUzOTAz
NTBFQUZENjM3MDAzNjk1QzggLyogU2hhcmVkVGltZXJJT1MubW0gKi87IH07CisJCUU0NTM5MDQ3
MEVBRkQ2MzcwMDM2OTVDOCAvKiBTb3VuZElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MDM2MEVBRkQ2MzcwMDM2OTVDOCAvKiBTb3VuZElP
Uy5tbSAqLzsgfTsKKwkJRTQ1MzkwNDkwRUFGRDYzNzAwMzY5NUM4IC8qIFdlYkNvcmVTeXN0ZW1J
bnRlcmZhY2VJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDUzOTAzODBFQUZENjM3MDAzNjk1QzggLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZUlP
Uy5tbSAqLzsgfTsKKwkJRTQ1MzkwNEQwRUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MDNDMEVB
RkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gKi87IH07CisJCUU0NTM5MEFFMEVBRkY0QjUw
MDM2OTVDOCAvKiBTeXN0ZW1NZW1vcnlJT1MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1MzkwQUQwRUFGRjRCNTAwMzY5NUM4IC8qIFN5c3RlbU1l
bW9yeUlPUy5jcHAgKi87IH07CiAJCUU0NjJBNEExMTEzRTcxQkUwMDRBNDIyMCAvKiBJbnRQb2lu
dEhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
NjJBNEEwMTEzRTcxQkUwMDRBNDIyMCAvKiBJbnRQb2ludEhhc2guaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDZBMkIxQzE3Q0E2NUI5MDAwREJD
RDggLyogRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2QTJCMUIxN0NBNjVCOTAwMERCQ0Q4IC8qIEVsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3IuaCAqLzsgfTsKIAkJRTQ2QTJCMUUxN0NBNzZCMTAwMERCQ0Q4
IC8qIEVsZW1lbnRDaGlsZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDZBMkIxRDE3Q0E3NkIxMDAwREJDRDggLyogRWxlbWVudENoaWxk
SXRlcmF0b3IuaCAqLzsgfTsKQEAgLTU4NzMsNiArNTkyOSwxMCBAQAogCQlFNEFGRDAwRTBEQUYz
MzU1MDBGNUY1NUMgLyogU01JTFRpbWVDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUZEMDA4MERBRjMzNTQwMEY1RjU1QyAvKiBTTUlM
VGltZUNvbnRhaW5lci5oICovOyB9OwogCQlFNEFGRDAwRjBEQUYzMzU1MDBGNUY1NUMgLyogU1ZH
U01JTEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTRBRkQwMDkwREFGMzM1NDAwRjVGNTVDIC8qIFNWR1NNSUxFbGVtZW50LmNwcCAqLzsg
fTsKIAkJRTRBRkQwMTAwREFGMzM1NTAwRjVGNTVDIC8qIFNWR1NNSUxFbGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFGRDAwQTBEQUYzMzU0
MDBGNUY1NUMgLyogU1ZHU01JTEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlFNEI2NUE1ODEzMkZBOEU3MDA3MEU3QkUgLyogVGlsZUdy
aWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjY1
QTU3MTMyRkE4RTcwMDcwRTdCRSAvKiBUaWxlR3JpZC5oICovOyB9OworCQlFNEI2NUE1QTEzMkZB
QUY5MDA3MEU3QkUgLyogVGlsZUdyaWQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1OTEzMkZBQUY5MDA3MEU3QkUgLyogVGlsZUdyaWQubW0g
Ki87IH07CisJCUU0QjY1QTVDMTMyRkFDQjAwMDcwRTdCRSAvKiBUaWxlTGF5ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjY1QTVCMTMyRkFDQjAw
MDcwRTdCRSAvKiBUaWxlTGF5ZXIuaCAqLzsgfTsKKwkJRTRCNjVBNUUxMzJGQURCNjAwNzBFN0JF
IC8qIFRpbGVMYXllci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QjY1QTVEMTMyRkFEQjYwMDcwRTdCRSAvKiBUaWxlTGF5ZXIubW0gKi87IH07CiAJ
CUU0QkJFRDBFMTRGNDAyNUQwMDNGMEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRC
QkVEMEMxNEY0MDI1RDAwM0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5j
cHAgKi87IH07CiAJCUU0QkJFRDBGMTRGNDAyNUQwMDNGMEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QkJFRDBEMTRGNDAyNUQwMDNGMEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb24uaCAqLzsgfTsKIAkJRTRCQkVENEMxNEZDREJBMTAwM0YwQjk4IC8qIFN0eWxlUnVs
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEJC
RUQ0QTE0RkNEQkExMDAzRjBCOTggLyogU3R5bGVSdWxlLmNwcCAqLzsgfTsKQEAgLTU4ODEsNiAr
NTk0MSw4IEBACiAJCUU0QzE3ODlCMEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzE3ODk2
MEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEMyNzk1ODBDRjk3NDE5MDBFOTdCOTgg
LyogUmVuZGVyTWVkaWEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRDMjc5NTYwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCAqLzsg
fTsKIAkJRTRDMjc5NTkwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMyNzk1NzBDRjk3NDE5MDBF
OTdCOTggLyogUmVuZGVyTWVkaWEuaCAqLzsgfTsKKwkJRTRDM0IxRkEwRjBFNDE2MTAwOTY5M0Y2
IC8qIFRpbGVDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTRDM0IxRjkwRjBFNDE2MTAwOTY5M0Y2IC8qIFRpbGVDYWNoZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUU0QzNCMUZDMEYwRTQxNzAw
MDk2OTNGNiAvKiBUaWxlQ2FjaGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNEMzQjFGQjBGMEU0MTcwMDA5NjkzRjYgLyogVGlsZUNhY2hlLm1tICov
OyB9OwogCQlFNEM5MUEwRTE4MDIzNDMxMDBBMTdGNkQgLyogVGV4dFBhaW50U3R5bGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzkxQTBEMTgwMjM0
MzEwMEExN0Y2RCAvKiBUZXh0UGFpbnRTdHlsZS5oICovOyB9OwogCQlFNEM5MUExMDE4MDIzNDM5
MDBBMTdGNkQgLyogVGV4dFBhaW50U3R5bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDOTFBMEYxODAyMzQzOTAwQTE3RjZEIC8qIFRleHRQYWlu
dFN0eWxlLmNwcCAqLzsgfTsKIAkJRTRDOTFBMTYxODA5OTlGMTAwQTE3RjZEIC8qIFJlbmRlclRl
eHRMaW5lQm94ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0QzkxQTE1MTgwOTk5RjEwMEExN0Y2RCAvKiBSZW5kZXJUZXh0TGluZUJveGVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU4OTYsNiAr
NTk1OCw4IEBACiAJCUU0RDk4OEI2MTdCRkVCMjEwMDg0RkI4OCAvKiBUZXh0Tm9kZVRyYXZlcnNh
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ5
ODhCNTE3QkZFQjIxMDA4NEZCODggLyogVGV4dE5vZGVUcmF2ZXJzYWwuY3BwICovOyB9OwogCQlF
NERFQUExNzE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVSZXNvbHZlVHJlZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNERFQUExNTE3QTkzREMzMDAw
RTA0MzAgLyogU3R5bGVSZXNvbHZlVHJlZS5jcHAgKi87IH07CiAJCUU0REVBQTE4MTdBOTNEQzMw
MDBFMDQzMCAvKiBTdHlsZVJlc29sdmVUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNERFQUExNjE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVSZXNv
bHZlVHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUU0RTM5QUZCMTMzMEVGQTgwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29sLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEUzOUFGQTEzMzBFRkE4MDAz
QUIyNzQgLyogVGlsZUxheWVyUG9vbC5oICovOyB9OworCQlFNEUzOUFGRDEzMzBFRkM2MDAzQUIy
NzQgLyogVGlsZUxheWVyUG9vbC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0RTM5QUZDMTMzMEVGQzUwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29sLm1t
ICovOyB9OwogCQlFNEU5QjExOTE4MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJl
c29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NEU5QjExODE4MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggKi87
IH07CiAJCUU0RTlCMTFCMTgxNDU2OTIwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
RTlCMTFBMTgxNDU2OTIwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcCAq
LzsgfTsKIAkJRTRFOUIxMUQxODE0NTY5QzAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5j
dGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
RTlCMTFDMTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi87
IH07CkBAIC02MzI1LDYgKzYzODksOCBAQAogCQlGREY3RTlDMzEzQUMyMURCMDBBNTFFQUMgLyog
SlNBdWRpb0J1ZmZlckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZERjdFOUMxMTNBQzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlvQnVmZmVy
Q2FsbGJhY2suY3BwICovOyB9OwogCQlGREY3RTlDNDEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRp
b0J1ZmZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGREY3RTlDMjEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNr
LmggKi87IH07CiAJCUZFMDlEQjQ5MTY5RTJENkUwMDYyMjU1NyAvKiBEYXRhYmFzZUVycm9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTA5REI0NjE2
OUUyRDZFMDA2MjI1NTcgLyogRGF0YWJhc2VFcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMEQ4NEU5MTA0ODQzNDgwMDFBMTc5RSAvKiBX
ZWJFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkUwRDg0RTgxMDQ4NDM0ODAwMUExNzlFIC8qIFdlYkV2ZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUwRDg0RUIxMDQ4NDM2RTAwMUExNzlF
IC8qIFdlYkV2ZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkUwRDg0RUExMDQ4NDM2RTAwMUExNzlFIC8qIFdlYkV2ZW50Lm1tICovOyB9OwogCQlG
RTExNUZBQjE2Nzk4OENEMDAyNDkxMzQgLyogQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxMTVGQTkxNjc5ODhD
RDAwMjQ5MTM0IC8qIEFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTE2Q0ZEMzE2OUQxREVEMDBEM0EwQzcg
LyogRGF0YWJhc2VCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFMTZDRkNGMTY5RDFERUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmQu
Y3BwICovOyB9OwogCQlGRTE2Q0ZENDE2OUQxREVEMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTE2Q0ZE
MDE2OUQxREVDMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYzNjMsNiArNjQyOSw3IEBACiAJCUZF
QkM1RjMyMTZCRDBDQzMwMDY1OUJEMyAvKiBEYXRhYmFzZUJhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQkM1RjMwMTZCRDBDQzMwMDY1OUJEMyAv
KiBEYXRhYmFzZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlGRUQxM0QzQTBDRUE5MzQ2MDBEODk0NjYgLyogRWRpdG9ySU9TLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEMTNEMzkwQ0VBOTM0
NjAwRDg5NDY2IC8qIEVkaXRvcklPUy5tbSAqLzsgfTsKIAkJRkVEMTNEM0QwQ0VBOTM2QTAwRDg5
NDY2IC8qIEZyYW1lSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkVEMTNEM0IwQ0VBOTM2QTAwRDg5NDY2IC8qIEZyYW1lSU9TLm1tICovOyB9Owor
CQlGRUQxM0Q0MDBDRUE5Mzk0MDBEODk0NjYgLyogSWNvbklPUy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDEzRDNGMENFQTkzOTQwMEQ4OTQ2NiAv
KiBJY29uSU9TLm1tICovOyB9OwogCQlGRUQxM0Q1MjBDRUE5NDk3MDBEODk0NjYgLyogUmVuZGVy
VGhlbWVJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFRDEzRDUwMENFQTk0OTcwMEQ4OTQ2NiAvKiBSZW5kZXJUaGVtZUlPUy5oICovOyB9OwogCQlG
RUQ0ODM5MENFRDY2QzMyNTVGNzJDNTkgLyogTWF0aE1MU2VsZWN0RWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNzVBMDU5QUYxNzBEOEZB
QTVCOENBQkUgLyogTWF0aE1MU2VsZWN0RWxlbWVudC5jcHAgKi87IH07CiAJCUZFREVGODQxMTY3
OTcxMDgwMDBFNDQ0QSAvKiBEYXRhYmFzZVN0cmF0ZWd5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFREVGODNGMTY3OTcxMDgwMDBFNDQ0QSAvKiBE
YXRhYmFzZVN0cmF0ZWd5LmNwcCAqLzsgfTsKQEAgLTY4NDAsNiArNjkwNyw4IEBACiAJCTA3MkFF
MUUzMTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaWRsOyBwYXRo
ID0gcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA3MkFFMUU0MTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9
IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmpzOyBwYXRoID0gcGx1Z2lucy9RdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudC5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyQ0E4
NjAxNkNCNERDMzAwOEFFMTMxIC8qIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MzU3Qzc2MTZEMkRGMEQwMEVEOTlFNyAv
KiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMDczNTdDNzcxNkQyREYwRDAwRUQ5OUU3IC8qIEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkZJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzM1RUU2OTBGNDBDNUU0MDA0QTI2MDQgLyogTWVkaWFQbGF5ZXJQcm94eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBsYXllclByb3h5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MzY3REREMTcyQ0E2N0YwMEQ4NjFCOSAvKiBJbmJh
bmRUZXh0VHJhY2tQcml2YXRlTGVnYWN5QVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlTGVnYWN5QVZGT2JqQy5oOyBwYXRoID0g
b2JqYy9JbmJhbmRUZXh0VHJhY2tQcml2YXRlTGVnYWN5QVZGT2JqQy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwNzM2N0RERTE3MkNBNjdGMDBEODYxQjkgLyogSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUxlZ2FjeUFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlTGVnYWN5QVZGT2JqQy5tbTsgcGF0aCA9
IG9iamMvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUxlZ2FjeUFWRk9iakMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC02ODU0LDYgKzY5MjMsOCBAQAogCQkwNzNCRTM0NTE3RDE3RTdB
MDAyQkQ0MzEgLyogSlNOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFj
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzNCRTM0NjE3RDE3RTdBMDAyQkQ0
MzEgLyogSlNOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2Fs
bGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzNCRTM0NzE3RDE3RTdB
MDAyQkQ0MzEgLyogSlNOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2Fs
bGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDc0MzAwQTMwRjRCOEJDRjAw
ODA3NkNEIC8qIE1lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IE1lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMDc0MzAwQTQwRjRCOEJDRjAwODA3NkNEIC8qIE1lZGlhUGxheWVy
UHJpdmF0ZUlPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBsYXll
clByaXZhdGVJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc1Mzg2MDAxNDQ4
OUU5ODAwQjc4NDUyIC8qIENhY2hlZFRleHRUcmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDYWNoZWRUZXh0VHJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwNzUzODYwMTE0NDg5RTk4MDBCNzg0NTIgLyogQ2FjaGVkVGV4dFRyYWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFRleHRUcmFjay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzYzMDZDQzE3RTE0NzhEMDA1QTdDNEUgLyogTWVk
aWFTdHJlYW1UcmFja1NvdXJjZXNDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZWRpYVN0cmVhbVRyYWNrU291cmNlc0NhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC03MDkwLDYgKzcxNjEsOCBAQAogCQkwRjEzMTYzRDE2RUQwQ0M4MDAz
NUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gUGxhdGZvcm1DQUZpbHRlcnMuaDsgcGF0aCA9IGNhL1BsYXRmb3JtQ0FGaWx0ZXJzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTMxNjNGMTZFRDBDREUwMDM1Q0MwNCAv
KiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tOyBwYXRoID0gY2EvbWFjL1BsYXRmb3Jt
Q0FGaWx0ZXJzTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1REE4OTBG
M0FBRUU3MDAwMENFNDcgLyogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaDsgcGF0
aCA9IGFuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0
b3JJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2Nyb2xsQW5pbWF0b3JJ
T1MuaDsgcGF0aCA9IGlvcy9TY3JvbGxBbmltYXRvcklPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjE3NzQ3RjEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1Mu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBTY3JvbGxBbmltYXRv
cklPUy5tbTsgcGF0aCA9IGlvcy9TY3JvbGxBbmltYXRvcklPUy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyOUMxNkQxMzAwQzJFMjAwMkQ3OTRFIC8qIEFjY2Vzc2liaWxpdHlB
bGxJbk9uZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3Np
YmlsaXR5QWxsSW5PbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNERDQ0
RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTaGFkb3dCbHVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhZG93Qmx1ci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzExNCw2ICs3MTg3LDcgQEAKIAkJMEY2MDVBRUIxNUY5NDg0ODAwNERGMEMw
IC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNjcm9sbGluZ0NvbnN0cmFpbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNjM4M0RCMTg2MTVCMjkwMDNFNURCNSAvKiBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkZWRTY3JvbGxpbmdUcmVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MzgzREMxODYxNUIyOTAwM0U1
REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5N0E2NTcxNTVEQTgxRTAwRkFERDRDIC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklP
Uy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERpc3BsYXlSZWZy
ZXNoTW9uaXRvcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMjRENzcx
NjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNzTGF5ZXJVcGRhdGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzTGF5ZXJVcGRhdGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMjRENzgxNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBo
aWNzTGF5ZXJVcGRhdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBo
aWNzTGF5ZXJVcGRhdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTg4RUJD
MTZBOEQxQkQwMEY5OTk4NCAvKiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGVNYWMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NTYwLDYgKzc2
MzQsNyBAQAogCQkxRjNDM0JFODEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnRyb2xzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUYzQzNCRTkxMzVDQUYzQzAwQjhDMUFDIC8q
IE1lZGlhQ29udHJvbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFD
b250cm9scy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRjNGMTk1MjE0OTlDQTc2
MDBBNUFFQTcgLyogUE9ERnJlZUxpc3RBcmVuYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQT0RGcmVlTGlzdEFyZW5hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFGNjhENEFEMTRCQjlEQ0EwMDdCNUM2MiAvKiBNZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNZW1vcnlQcmVzc3VyZUhh
bmRsZXJJT1MubW07IHBhdGggPSBpb3MvTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRkFGQkYxNjE1QTVGQTUyMDAwODNBMjAgLyogVVRJ
VXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVUSVV0aWxpdGll
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRkFGQkYxNzE1QTVGQTUyMDAwODNB
MjAgLyogVVRJVXRpbGl0aWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gVVRJVXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRkM0
MEZCNzE2NTVDNTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NTk5LDYgKzc2NzQsOCBAQAogCQkyNjU1NDEzNzE0
ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBLZXlFdmVudENvZGVzSU9TLmg7IHBhdGggPSBpb3MvS2V5RXZlbnRDb2Rl
c0lPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjU1NDEzODE0ODk4MTFDMDAw
REZDNUQgLyogS2V5RXZlbnRJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBLZXlFdmVudElPUy5tbTsgcGF0aCA9IGlvcy9LZXlFdmVudElPUy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjY1NTQxNEIxNDg5QUEyQjAwMERGQzVEIC8qIEN1cnNv
cklPUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDdXJzb3JJT1Mu
Y3BwOyBwYXRoID0gaW9zL0N1cnNvcklPUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTI2NjAxRUJEMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlP
Uy5oOyBwYXRoID0gaW9zL1BsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTI2NjAxRUJFMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50
RmFjdG9yeUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBs
YXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tOyBwYXRoID0gaW9zL1BsYXRmb3JtRXZlbnRGYWN0b3J5
SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjkyMzk5MTE1MDVFMUFBMDA5
RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyNjkyMzk5MjE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJz
aW9uQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJREJW
ZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZCOTk5
OEUxODAzQUU3MjAwRDAxMTIxIC8qIFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFJlZ2lzdGVyQWxsb2NhdG9yLmg7IHBhdGggPSBjc3NqaXQvUmVn
aXN0ZXJBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc2MTYsNiAr
NzY5Myw3IEBACiAJCTI2RkFFNEM5MTg1MkUzQTUwMDRDOEM0NiAvKiBSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMjZGQUU0Q0ExODUyRTNBNTAwNEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkZBRTRDQjE4
NTJFM0E1MDA0QzhDNDYgLyogU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9ub3Vz
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkyOTAzNzE2NDE2QkExMUJDMDBGRUZERjAgLyogQ29udGVudEZpbHRlcklP
Uy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IENvbnRlbnRGaWx0
ZXJJT1MubW07IHBhdGggPSBpb3MvQ29udGVudEZpbHRlcklPUy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMjkxN0I1NUUxNDczNDk2QzAwNTJDOUQwIC8qIExheWVyRmx1c2hTY2hl
ZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTGF5ZXJGbHVz
aFNjaGVkdWxlci5jcHA7IHBhdGggPSBjYS9MYXllckZsdXNoU2NoZWR1bGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjkxN0I1NUYxNDczNDk2QzAwNTJDOUQwIC8qIExheWVy
Rmx1c2hTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGF5ZXJG
bHVzaFNjaGVkdWxlci5oOyBwYXRoID0gY2EvTGF5ZXJGbHVzaFNjaGVkdWxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyOTE3QjU2MDE0NzM0OTZDMDA1MkM5RDAgLyogTGF5ZXJG
bHVzaFNjaGVkdWxlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBM
YXllckZsdXNoU2NoZWR1bGVyQ2xpZW50Lmg7IHBhdGggPSBjYS9MYXllckZsdXNoU2NoZWR1bGVy
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NzkwLDYgKzc4NjgsMTAg
QEAKIAkJMzEzMTNGNjMxNDQzQjM1RTAwNkUyQTkwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRl
cmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEzMTNGNjQxNDQzQjM1RTAw
NkUyQTkwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMxMzhBOUU0MTQ3NDQzNDYwMEIwRUQxMiAvKiBTdHlsZVNoYWRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdHlsZVNoYWRlci5oOyBwYXRoID0gc3R5bGUvU3R5
bGVTaGFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE0MDM3OTcxMjRCRUE3
RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdlYkNvcmVNb3Rpb25NYW5hZ2VyLmg7IHBhdGggPSBpb3MvV2ViQ29yZU1v
dGlvbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE0MDM3OTgxMjRC
RUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViQ29yZU1vdGlvbk1hbmFnZXIubW07IHBhdGggPSBp
b3MvV2ViQ29yZU1vdGlvbk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxNDAzNzk5MTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEZXZpY2VPcmllbnRhdGlvbkNsaWVu
dElPUy5oOyBwYXRoID0gaW9zL0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNDAzNzlBMTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VP
cmllbnRhdGlvbkNsaWVudElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1tOyBwYXRoID0gaW9zL0RldmljZU9y
aWVudGF0aW9uQ2xpZW50SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTQ2
RkU2NTE4NDQyMDg3MDAxQTkzN0MgLyogT0VTVGV4dHVyZUZsb2F0TGluZWFyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE9FU1RleHR1cmVGbG9hdExpbmVhci5jcHA7
IHBhdGggPSBjYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzE0NkZFNjYxODQ0MjA4NzAwMUE5MzdDIC8qIE9FU1RleHR1cmVGbG9h
dExpbmVhci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBPRVNUZXh0dXJlRmxv
YXRMaW5lYXIuaDsgcGF0aCA9IGNhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE0NkZFNjcxODQ0MjA4NzAwMUE5MzdDIC8qIE9FU1Rl
eHR1cmVGbG9hdExpbmVhci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gT0VTVGV4dHVyZUZs
b2F0TGluZWFyLmlkbDsgcGF0aCA9IGNhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzgzMCw2ICs3OTEyLDcgQEAKIAkJMzE5QUUw
NjExNDJENkIyNDAwNjU2M0ExIC8qIFN0eWxlRmlsdGVyRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHlsZUZpbHRlckRhdGEuY3BwOyBwYXRoID0gc3R5bGUv
U3R5bGVGaWx0ZXJEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE5QUUw
NjIxNDJENkIyNDAwNjU2M0ExIC8qIFN0eWxlRmlsdGVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBTdHlsZUZpbHRlckRhdGEuaDsgcGF0aCA9IHN0eWxlL1N0eWxlRmls
dGVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTlGQkQ1RDE1RDJGNDQ0
MDA5NjQwQTYgLyogQ2FjaGVkSW1hZ2VDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ2FjaGVkSW1hZ2VDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzFBQjRGRkYxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dDNESU9TLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNESU9TLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxQzBGRjFCMEU0Q0VCNkUwMDdENkZFNSAvKiBX
ZWJLaXRBbmltYXRpb25FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJLaXRBbmltYXRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMxQzBGRjFDMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRBbmltYXRpb25FdmVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUMwRkYxRDBFNENFQjZFMDA3RDZGRTUgLyog
V2ViS2l0QW5pbWF0aW9uRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYktpdEFu
aW1hdGlvbkV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4NDksNiAr
NzkzMiw4IEBACiAJCTMxRDU5MUIxMTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRThEOEJBMTYwQkM5NEIwMDRDRThGNSAvKiBSZW5kZXJT
bmFwc2hvdHRlZFBsdWdJbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMxRThEOEJCMTYwQkM5NEMwMDRDRThGNSAvKiBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJ
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMUVBRjk3QzEyMTQzNUE0MDBFN0Mx
QkYgLyogRGV2aWNlTW90aW9uQ2xpZW50SU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERldmljZU1vdGlvbkNsaWVudElPUy5oOyBwYXRoID0gaW9zL0RldmljZU1vdGlvbkNs
aWVudElPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMUVBRjk3RDEyMTQzNUE0
MDBFN0MxQkYgLyogRGV2aWNlTW90aW9uQ2xpZW50SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gRGV2aWNlTW90aW9uQ2xpZW50SU9TLm1tOyBwYXRoID0gaW9z
L0RldmljZU1vdGlvbkNsaWVudElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzFFQzFENTAxNEZFRkQwODAwQzk0NjYyIC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFj
ay5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxi
YWNrLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFFQzFEQUMxNEZGMjZFQTAw
Qzk0NjYyIC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzFFQzFFMjYxNEZGNjBFRTAwQzk0NjYyIC8qIEpTTm90aWZpY2F0aW9uUGVybWlz
c2lvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
Tm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTc4OTQsNiArNzk3OSw3IEBACiAJCTM3MUY1M0U3MEQyNzA0RjkwMEVDRTBENSAv
KiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
NzFGNTNFODBEMjcwNEY5MDBFQ0UwRDUgLyogQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzIwMjE5ODEwNjIxM0M2MDBGMjVDNEIg
LyogRm9udFNtb290aGluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Rm9udFNtb290aGluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzcyN0RG
RDQxNDJBQUU0NTAwRDQ0OUNCIC8qIEZvbnRDYWNoZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZvbnRDYWNoZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzcyQzAwQzMxMjk2MTFGMTAwNUM5NTc1IC8qIFRleHRCb3VuZGFyaWVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRCb3VuZGFyaWVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcyQzAwRDgxMjk2MTlGODAwNUM5NTc1
IC8qIEZpbmRPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbmRP
cHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NDQ1NzBFMERCMDVGQTUw
MEFFMDk5MiAvKiBTVkdHbHlwaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdHbHlwaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzkzMSw2ICs4
MDE3LDcgQEAKIAkJMzdERENEQTMxMzg0NTAxQzAwMDhCNzkzIC8qIE1IVE1MUGFyc2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1IVE1MUGFyc2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTM3RTM1MjRBMTI0NTBDNTIwMEJBRjVEOSAvKiBJbnB1dFR5cGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXRUeXBlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdFMzUyNEMxMjQ1MEM2NjAwQkFGNUQ5IC8q
IElucHV0VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnB1dFR5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzdFNjU5NEYxNjNCMTBDMjAwRUI0NTc0
IC8qIFNpbXBsZUZvbnREYXRhSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gU2ltcGxlRm9udERhdGFJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTM3RjgxOEZCMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJD
b3JlVVJMUmVzcG9uc2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJDb3JlVVJMUmVzcG9uc2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3
RkM5NkRBMTEwNEVENzEwMDNFMUZBRCAvKiBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhaWxpbmdGbG9hdHNSb290SW5saW5l
Qm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTUzLDggKzgyNDAsMTMgQEAK
IAkJNDQyOUFBRkYwQ0I4NEVDMzAwNzY0N0M1IC8qIERPTUhUTUxPYmplY3RFbGVtZW50UHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSFRNTE9iamVjdEVsZW1l
bnRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MjlBQjA3MENCODRG
ODEwMDc2NDdDNSAvKiBET01UZXh0RXZlbnRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRE9NVGV4dEV2ZW50SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDQyQUJDRDUxN0Q5MjYyRjAwRDMwNzE1IC8qIFN5bmNocm9ub3VzTG9hZGVy
Q2xpZW50Q0ZOZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnRDRk5ldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQ0MkFGN0E3MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUXVpY2tMb29rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQ0MkFGN0E4MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2subW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBRdWlja0xvb2subW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ0MzExQ0Q0MTJFNEUyMkQwMDBBOEQxOSAvKiBET01Eb2N1bWVu
dEZyYWdtZW50UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01E
b2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
NDMxMUNENTEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1lbnRQcml2YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTURvY3VtZW50UHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0NDNGMDQyNjBFNzVDOEZCMDA3RTU0MDcgLyogTmV0d29ya1N0
YXRlTm90aWZpZXJJT1MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TmV0d29ya1N0YXRlTm90aWZpZXJJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0NDRENEUyMTBGNzA4QjJFMDAzMTU4RTAgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNl
SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDc2NTMxQTEzMzE3MDk5MDAw
NkI3ODkgLyogU1NMS2V5R2VuZXJhdG9ySU9TLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFNTTEtleUdlbmVyYXRvcklPUy5jcHA7IHBhdGggPSBpb3MvU1NMS2V5R2Vu
ZXJhdG9ySU9TLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ3OTU4MDIxNjQz
QjQ3QjAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBhcnNlZENvbnRlbnRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDQ3OTU4MDMxNjQzQjQ3QjAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlZENvbnRlbnRUeXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0OEEyOUJEMEE0NkQ5Q0IwMDMwNzU5
RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTgxNjcsOCArODI1OSwxNiBAQAogCQk0NDk2RTM5RjEzOTgxM0E1MDAzRUUzMkEg
LyogSlNTVkdNUGF0aEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNTVkdNUGF0aEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ5NkUz
QTExMzk4MTNDQjAwM0VFMzJBIC8qIEpTU1ZHTVBhdGhFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHTVBhdGhFbGVtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ5QjE5RjMwRkE3MkVDRTAwMTVDQTRBIC8qIEhUTUxQYXJz
ZXJRdWlya3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBhcnNlclF1
aXJrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEEyMERCODBGODQxNjZDMDBC
M0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0NEEyOEFBQjEyREZCOEFDMDBBRTkyM0IgLyogTWF0aE1MRWxlbWVudEZhY3Rvcnku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWF0aE1MRWxlbWVudEZhY3Rvcnku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRBMjhBQUUxMkRGQjhCRjAwQUU5MjNC
IC8qIE1hdGhNTE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hdGhN
TE5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0QzM2M0VFMEZBQTdCQjMw
MDk3RjhDQyAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0QzM2M0VGMEZBQTdCQjMwMDk3RjhDQyAvKiBSdW50aW1l
QXBwbGljYXRpb25DaGVja3NJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQ0QzNDRkU3MTU1NkJFNUQwMDAxMzYwOSAvKiBXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkNvcmVTeXN0
ZW1JbnRlcmZhY2VJT1MuaDsgcGF0aCA9IGlvcy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0Qzk5MTgxMEYzRDFFMEQwMDU4NjY3MCAv
KiBTY3JvbGxiYXJUaGVtZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFNjcm9sbGJhclRoZW1lSU9TLm1tOyBwYXRoID0gaW9zL1Njcm9sbGJhclRoZW1lSU9T
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEM5OTE4NTBGM0QxRUJFMDA1ODY2
NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gU2Nyb2xsYmFyVGhlbWVJT1MuaDsgcGF0aCA9IGlvcy9TY3JvbGxiYXJUaGVtZUlPUy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAgLyog
VGhlbWVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGhlbWVJT1MuaDsg
cGF0aCA9IGlvcy9UaGVtZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEM5
OTE5RTBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBUaGVtZUlPUy5tbTsgcGF0aCA9IGlvcy9UaGVtZUlPUy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDREOERBOTgxMzk1NDVCRTAwMzM3Qjc1IC8q
IFNWR01QYXRoRWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHTVBhdGhFbGVt
ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDREOERBOUExMzk1NDVDRDAw
MzM3Qjc1IC8qIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBTVkdBbmltYXRlTW90aW9uRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ0REFCNUFGMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21t
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkwODQsOCAr
OTE4NCwxMiBAQAogCQk3RTEyRTkwRTE1RkE1RDNBMDA1RTQxMjYgLyogQ3VzdG9tRmlsdGVyTWVz
aEdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDdXN0
b21GaWx0ZXJNZXNoR2VuZXJhdG9yLmNwcDsgcGF0aCA9IGZpbHRlcnMvQ3VzdG9tRmlsdGVyTWVz
aEdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFMzNDRDAwMTI3
RjM0MEQwMEJFOEYxNyAvKiBQdXJnZVByaW9yaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFB1cmdlUHJpb3JpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0UzN0VGMkQxMzM5MjA4ODAwQjI5MjUwIC8qIFN1YnJlc291cmNlTG9hZGVyQ0YuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3VicmVzb3VyY2VMb2FkZXJDRi5jcHA7
IHBhdGggPSBjZi9TdWJyZXNvdXJjZUxvYWRlckNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0U0MjhDRTQxM0UzNDA3RjAwM0I2NjFDIC8qIFJlc291cmNlSGFuZGxlSU9TLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVzb3VyY2VIYW5kbGVJ
T1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFNDZGNkY4MTYyN0EyQzkwMDA2
MjIyMyAvKiBKU09FU0VsZW1lbnRJbmRleFVpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNPRVNFbGVtZW50SW5kZXhVaW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0U0NkY2RjkxNjI3QTJDOTAwMDYyMjIzIC8qIEpTT0VTRWxlbWVudElu
ZGV4VWludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU09FU0VsZW1lbnRJ
bmRleFVpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0U0NzRFMUIxMjQ5NERD
OTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0U0NzRFMUMxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0
ZURhdGFiYXNlVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxp
dGVEYXRhYmFzZVRyYWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0U0NzRF
MUQxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RTVEN0E3MzE2MUQzRjhGMDA4OTZDMzQgLyog
T0VTRWxlbWVudEluZGV4VWludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBPRVNFbGVtZW50SW5kZXhVaW50LmNwcDsgcGF0aCA9IGNhbnZhcy9PRVNFbGVtZW50SW5k
ZXhVaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U1RDdBNzQxNjFEM0Y4
RjAwODk2QzM0IC8qIE9FU0VsZW1lbnRJbmRleFVpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gT0VTRWxlbWVudEluZGV4VWludC5oOyBwYXRoID0gY2FudmFzL09FU0VsZW1l
bnRJbmRleFVpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U2NkUyMzExNkQ2
RUI2QzAwRjdFN0ZGIC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHA7
IHBhdGggPSBjYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMDQwMiw2ICsxMDUwNiw4IEBACiAJCUE0NTZGQTI1MTFBRDRB
ODMwMDIwQjQyMCAvKiBMYWJlbHNOb2RlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMYWJlbHNOb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NTAxOTIwQzEzMkVCRjJFMDA4QkZFNTUgLyogQXV0b2NhcGl0YWxpemUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b2NhcGl0YWxpemUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTUwMkM1REQxMzA0OUIzNTAwRkM3RDUzIC8qIFdlYlNhZmVHQ0FjdGl2aXR5
Q2FsbGJhY2tJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViU2FmZUdD
QWN0aXZpdHlDYWxsYmFja0lPUy5oOyBwYXRoID0gaW9zL1dlYlNhZmVHQ0FjdGl2aXR5Q2FsbGJh
Y2tJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTUxNkU4QjQxMzZFMDREQjAw
NzZDM0MwIC8qIExvY2FsaXplZERhdGVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2NhbGl6ZWREYXRlQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTUxNkU4QjUxMzZFMDREQjAwNzZDM0MwIC8qIExvY2FsaXplZERhdGVDYWNoZS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvY2FsaXplZERhdGVDYWNoZS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUxODIyNTMxN0UyOENGMTAwQTlCQTFE
IC8qIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBmb2xkZXI7IHBhdGggPSBTY3JpcHRzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNTE4MjI1NDE3RTJBMEQ0MDBBOUJBMUQgLyogSW5zcGVjdG9yT3ZlcmxheVBhZ2UuY3NzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5jc3M7
IHBhdGggPSBJbnNwZWN0b3JPdmVybGF5UGFnZS5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE1MTgyMjU1MTdFMkEwRDQwMEE5QkExRCAvKiBJbnNwZWN0b3JPdmVybGF5UGFnZS5q
cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEluc3BlY3Rvck92ZXJsYXlQYWdlLmpzOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA5NzgsNiArMTEwODQsNyBAQAogCQlBQUQ3NjZFQTE1
N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yQ2FudmFzSW5zdHJ1bWVudGF0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQUUyN0I3NDE2Q0JGQzBEMDA2MjMw
NDMgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1vY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1vY2suY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQUUyN0I3NTE2Q0JGQzBEMDA2MjMwNDMgLyog
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1vY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQUFFMzc1NUQxNzQyOUJDQzAwNjIwMEMyIC8qIFBsYXRmb3JtU3BlZWNo
U3ludGhlc2l6ZXJJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1tOyBwYXRoID0gaW9zL1BsYXRmb3JtU3Bl
ZWNoU3ludGhlc2l6ZXJJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBRjVC
N0IxMTUyNEI0QkQwMDA0Q0I0OSAvKiBXZWJTb2NrZXRGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJTb2NrZXRGcmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUFCMjNBMzI1MDlCQkE3RDAwMDY3Q0M1MyAvKiBCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
QjIzQTMyNjA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjM4MCw2ICsxMjQ4Nyw4IEBACiAJCUJF
OTFGQzhCMDYxMzM2NjYwMDVFMzc5MCAvKiBQb3NpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQkU5MUZDOEMwNjEz
MzY2NjAwNUUzNzkwIC8qIFBvc2l0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvc2l0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUJFOTgzRDk1MDUyQTJF
MEEwMDg5MkQ4NSAvKiBXZWJDb3JlS2V5Ym9hcmRVSU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUtleWJvYXJkVUlNb2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owor
CQlCRUE4MDdDNjBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVjdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTZWxlY3Rpb25SZWN0LmNwcDsgcGF0aCA9IGlv
cy9TZWxlY3Rpb25SZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkVBODA3
QzcwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gU2VsZWN0aW9uUmVjdC5oOyBwYXRoID0gaW9zL1NlbGVjdGlvblJlY3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkVGMjlFRTkxNzE1REQwOTAwQzRCNEM5
IC8qIEF1ZGlvVHJhY2tQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEF1ZGlvVHJhY2tQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJFRjI5
RUVBMTcxNUREMDkwMEM0QjRDOSAvKiBWaWRlb1RyYWNrUHJpdmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb1RyYWNrUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMDQ2RTFBQjEyMDhBOUZFMDBCQTJDRjcgLyogTG9jYWxpemVkU3RyaW5n
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NhbGl6ZWRTdHJp
bmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNDI0LDYgKzEyNTMzLDgg
QEAKIAkJQzU1RTM4QkMxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VOYW1lc3BhY2VJ
bXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU3MkVFMUQxMjAxQzlCQzAw
N0Q4RjgyIC8qIEpTSURCSW5kZXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNJREJJbmRleC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTdGRURFMDEyMTJF
RTlDMDA5N0JFNjUgLyogRmlsZVN5c3RlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGaWxlU3lzdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzU4MzYxQTcxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb250U2VydmljZXNJT1MuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQzU4MzYxQTgxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lP
Uy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZvbnRTZXJ2aWNl
c0lPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU4NUE2NjAxMUQ0RkFDNTAw
NEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSURCQmluZGluZ1V0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUM1ODVBNjYxMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0
aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkJpbmRpbmdVdGlsaXRp
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU4NUE2NjUxMUQ0RkIwNzAwNEMz
RTRCIC8qIEpTSURCQW55LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURC
QW55Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjUxMyw2ICsxMjYyNCw4IEBA
CiAJCUNENTRBNzYxMTgwRjlGNzAwMEIwNzZDOSAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBdWRpb1RyYWNr
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBwYXRoID0gb2JqYy9BdWRpb1RyYWNrUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDU0
REU0NTE3NDY4QjZGMDA1RTVCMzYgLyogTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q1NERFNDkxNzQ2OUM2RDAwNUU1QjM2
IC8qIEF1ZGlvU2Vzc2lvbk1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBdWRpb1Nlc3Npb25NYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
RDU1OTY4RjE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9TLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEF1ZGlvRmlsZVJlYWRlcklPUy5jcHA7IHBh
dGggPSBpb3MvQXVkaW9GaWxlUmVhZGVySU9TLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQ0Q1NTk2OTAxNDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBdWRpb0ZpbGVSZWFkZXJJT1MuaDsgcGF0
aCA9IGlvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0Q2NDFFQjExODE4RjVFRDAwRUU0QzQxIC8qIE1lZGlhU291cmNlUHJpdmF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVNvdXJjZVByaXZhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJj
ZUJ1ZmZlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNl
QnVmZmVyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDY0MUVCRDE4
MTlCMzU5MDBFRTRDNDEgLyogTWVkaWFUaW1lTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1l
ZGlhVGltZU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjYwOCw2ICsx
MjcyMSw3IEBACiAJCUNEQzhCNUE4MTgwNDdGRjEwMDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFNv
dXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tOyBwYXRoID0gb2JqYy9Tb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDOEI1QTkxODA0
N0ZGMTAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmg7IHBhdGgg
PSBvYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUNEQzhCNUFDMTgwNEFFNUQwMDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRl
Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUJ1ZmZlclBy
aXZhdGVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDQTgyOTQxNjc5
MTAwRjAwODc1NzE0IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQ0U1Q0QwMTQ2MzNCQzkwMEQ0N0ND
QSAvKiBFdmVudFRhcmdldEZhY3RvcnkuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRXZlbnRU
YXJnZXRGYWN0b3J5LmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREQxRTUyNTE2
N0JBNTY0MDBDRTgyMEIgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RENzA4OTQxODM1OUY2RTAwMkIzREM2IC8qIFNhbXBsZU1h
cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGVNYXAuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI2NjQsNiArMTI3NzgsNyBAQAogCQlD
RUNBREZDQzE1Mzc3OTFEMDBFMzcwNjggLyogVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUNDRkMzQTE0MTk3M0Q1MDAyQTBBQzEg
LyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERlY29kZUVzY2FwZVNlcXVlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDRURBMTJENjE1MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFsdGVybmF0aXZlVGV4dENsaWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRUVDNjAzNDE4N0REOTYyMDAzRTQzQkIgLyog
VGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0VGNDE4Q0MxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZXdwb3J0QXJndW1lbnRz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VGNDE4Q0QxMTc5Njc4QzAwOUQx
MTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFZpZXdwb3J0QXJndW1lbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQw
MDBFQkEwMTFCREFGRDQwMEM0NzcyNiAvKiBGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZUxvYWRlclN0YXRlTWFjaGlu
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzAwMCw2ICsxMzExNSw4IEBA
CiAJCUU0MDZGM0ZCMTE5ODMwN0QwMDlENTlENiAvKiBDb2xvckRhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29sb3JEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTQxRUEwMzgxMTk4MzZEQjAwNzEwQkM1IC8qIENTU1Byb3BlcnR5TmFt
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTUHJvcGVydHlO
YW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MUVBMDM5MTE5ODM3NDkw
MDcxMEJDNSAvKiBDU1NWYWx1ZUtleXdvcmRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENTU1ZhbHVlS2V5d29yZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFNDI0QTM5RDEzMzBERjAxMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRpbGVHcmlkVGlsZS5oOyBwYXRoID0gaW9zL1Rp
bGVHcmlkVGlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDI0QTM5RjEzMzBE
RjFFMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gVGlsZUdyaWRUaWxlLm1tOyBwYXRoID0gaW9zL1RpbGVHcmlkVGlsZS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQyNUE0OTkxODI5MkI4NDAwMjBDRkNG
IC8qIENvbGxlY3Rpb25JbmRleENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvbGxlY3Rpb25JbmRleENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0Mjk1RkEzMTJCMDYxNEUwMEQxQUNFMCAvKiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRQcmlvcml0eS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDMxMDVCNzE2NzUwRjBDMDBEQjJGQjggLyogTm9k
ZVRyYXZlcnNhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOb2Rl
VHJhdmVyc2FsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMDM3LDggKzEz
MTU0LDE1IEBACiAJCUU0NEVFM0E3MTc1NzZFNTUwMEVFRThDRiAvKiBGb250R2VuZXJpY0ZhbWls
aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRHZW5lcmljRmFtaWxpZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTQ1MzIyQTkxNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVl
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VsZWN0b3JRdWVy
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NTMyMkFBMTQwQ0UyNjcwMDVB
MEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNlbGVjdG9yUXVlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ1MzkwMTgw
RUFGQ0FDQTAwMzY5NUM4IC8qIE1JTUVUeXBlUmVnaXN0cnlJT1MubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNSU1FVHlwZVJlZ2lzdHJ5SU9TLm1tOyBwYXRoID0g
aW9zL01JTUVUeXBlUmVnaXN0cnlJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0NTM5MDE5MEVBRkNBQ0EwMDM2OTVDOCAvKiBQYXN0ZWJvYXJkSU9TLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUGFzdGVib2FyZElPUy5tbTsgcGF0aCA9IGlv
cy9QYXN0ZWJvYXJkSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDUzOTAz
MjBFQUZENjM3MDAzNjk1QzggLyogUGxhdGZvcm1TY3JlZW5JT1MubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbGF0Zm9ybVNjcmVlbklPUy5tbTsgcGF0aCA9IGlv
cy9QbGF0Zm9ybVNjcmVlbklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ1
MzkwMzQwRUFGRDYzNzAwMzY5NUM4IC8qIFNjcm9sbFZpZXdJT1MubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBTY3JvbGxWaWV3SU9TLm1tOyBwYXRoID0gaW9zL1Nj
cm9sbFZpZXdJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NTM5MDM1MEVB
RkQ2MzcwMDM2OTVDOCAvKiBTaGFyZWRUaW1lcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IFNoYXJlZFRpbWVySU9TLm1tOyBwYXRoID0gaW9zL1NoYXJlZFRp
bWVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDUzOTAzNjBFQUZENjM3
MDAzNjk1QzggLyogU291bmRJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBTb3VuZElPUy5tbTsgcGF0aCA9IGlvcy9Tb3VuZElPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTQ1MzkwMzgwRUFGRDYzNzAwMzY5NUM4IC8qIFdlYkNvcmVTeXN0
ZW1JbnRlcmZhY2VJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tOyBwYXRoID0gaW9zL1dlYkNvcmVTeXN0ZW1J
bnRlcmZhY2VJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NTM5MDNDMEVB
RkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBXaWRnZXRJT1MubW07IHBhdGggPSBpb3MvV2lkZ2V0SU9TLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDUzOTBBRDBFQUZGNEI1MDAzNjk1QzggLyogU3lz
dGVtTWVtb3J5SU9TLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN5
c3RlbU1lbW9yeUlPUy5jcHA7IHBhdGggPSBpb3MvU3lzdGVtTWVtb3J5SU9TLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ2MkE0QTAxMTNFNzFCRTAwNEE0MjIwIC8qIEludFBv
aW50SGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRQb2ludEhhc2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ2QTJCMUIxN0NBNjVCOTAwMERCQ0Q4
IC8qIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFNDZBMkIxRDE3Q0E3NkIxMDAwREJDRDggLyogRWxlbWVudENoaWxkSXRlcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudENoaWxkSXRlcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMDgyLDYgKzEzMjA2LDEwIEBA
CiAJCUU0QjQyMzgwMENCRkI3M0MwMEFGMkVDRSAvKiBKU0hUTUxNZWRpYUVsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MTWVkaWFFbGVtZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QjQyMzg1MENCRkI3M0MwMEFGMkVDRSAvKiBKU1By
b2dyZXNzRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQ
cm9ncmVzc0V2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRCNDIzODYw
Q0JGQjczQzAwQUYyRUNFIC8qIEpTUHJvZ3Jlc3NFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1Byb2dyZXNzRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTRCNjVBNTcxMzJGQThFNzAwNzBFN0JFIC8qIFRpbGVHcmlkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRpbGVHcmlkLmg7IHBhdGggPSBpb3MvVGlsZUdyaWQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRCNjVBNTkxMzJGQUFGOTAwNzBFN0JFIC8q
IFRpbGVHcmlkLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gVGls
ZUdyaWQubW07IHBhdGggPSBpb3MvVGlsZUdyaWQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUU0QjY1QTVCMTMyRkFDQjAwMDcwRTdCRSAvKiBUaWxlTGF5ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGlsZUxheWVyLmg7IHBhdGggPSBpb3MvVGlsZUxheWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QjY1QTVEMTMyRkFEQjYwMDcwRTdC
RSAvKiBUaWxlTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBUaWxlTGF5ZXIubW07IHBhdGggPSBpb3MvVGlsZUxheWVyLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNEJCRUQwQzE0RjQwMjVEMDAzRjBCOTggLyogUHJvcGVydHlTZXRDU1NT
dHlsZURlY2xhcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0QkJFRDBEMTRGNDAyNUQwMDNGMEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
QkJFRDRBMTRGQ0RCQTEwMDNGMEI5OCAvKiBTdHlsZVJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEzMDkwLDYgKzEzMjE4LDggQEAKIAkJRTRDMTc4OTYwRUU2OTAzODAwODI0RDY5
IC8qIENTU1NlbGVjdG9yTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
U1NTZWxlY3Rvckxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMjc5NTYw
Q0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlck1lZGlhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1lZGlhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUU0QzNCMUY5MEYwRTQxNjEwMDk2OTNGNiAvKiBUaWxlQ2FjaGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGlsZUNhY2hlLmg7IHBhdGggPSBpb3MvVGls
ZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QzNCMUZCMEYwRTQxNzAw
MDk2OTNGNiAvKiBUaWxlQ2FjaGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBUaWxlQ2FjaGUubW07IHBhdGggPSBpb3MvVGlsZUNhY2hlLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNEM5MUEwRDE4MDIzNDMxMDBBMTdGNkQgLyogVGV4dFBhaW50
U3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFBhaW50U3R5bGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDOTFBMEYxODAyMzQzOTAwQTE3RjZE
IC8qIFRleHRQYWludFN0eWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFRleHRQYWludFN0eWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRD
OTFBMTUxODA5OTlGMTAwQTE3RjZEIC8qIFJlbmRlclRleHRMaW5lQm94ZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dExpbmVCb3hlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTMxMDUsNiArMTMyMzUsOCBAQAogCQlFNEQ5ODhCNTE3QkZF
QjIxMDA4NEZCODggLyogVGV4dE5vZGVUcmF2ZXJzYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVGV4dE5vZGVUcmF2ZXJzYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNERFQUExNTE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVSZXNvbHZlVHJl
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVJlc29sdmVU
cmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRERUFBMTYxN0E5M0RDMzAw
MEUwNDMwIC8qIFN0eWxlUmVzb2x2ZVRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3R5bGVSZXNvbHZlVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
NEUzOUFGQTEzMzBFRkE4MDAzQUIyNzQgLyogVGlsZUxheWVyUG9vbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBUaWxlTGF5ZXJQb29sLmg7IHBhdGggPSBpb3MvVGlsZUxheWVy
UG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEUzOUFGQzEzMzBFRkM1MDAz
QUIyNzQgLyogVGlsZUxheWVyUG9vbC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IFRpbGVMYXllclBvb2wubW07IHBhdGggPSBpb3MvVGlsZUxheWVyUG9vbC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRFOUIxMTgxODEwOTE2RjAwM0FDQ0RGIC8q
IFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTRFOUIxMUExODE0NTY5MjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxh
eW91dEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RTlCMTFD
MTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNTkyLDYgKzEzNzI0LDggQEAKIAkJRkRGN0U5
QzExM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2suY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREY3RTlDMjEzQUMyMURCMDBBNTFFQUMgLyog
SlNBdWRpb0J1ZmZlckNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTA5REI0NjE2OUUyRDZFMDA2MjI1NTcgLyogRGF0YWJhc2VFcnJvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFMEQ4NEU4MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJFdmVudC5oOyBwYXRoID0gaW9zL1dlYkV2ZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5
RSAvKiBXZWJFdmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IFdlYkV2ZW50Lm1tOyBwYXRoID0gaW9zL1dlYkV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTExNUZBOTE2Nzk4OENEMDAyNDkxMzQgLyogQWJzdHJhY3REYXRhYmFzZVNl
cnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdERhdGFiYXNl
U2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTZDRkNGMTY5RDFERUMw
MEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGF0YWJhc2VCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUxNkNGRDAxNjlEMURFQzAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZUJhY2tlbmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNjMwLDYgKzEzNzY0LDcgQEAKIAkJRkVCQzVGMzAxNkJE
MENDMzAwNjU5QkQzIC8qIERhdGFiYXNlQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEYXRhYmFzZUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVE
MTNEMzkwQ0VBOTM0NjAwRDg5NDY2IC8qIEVkaXRvcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEVkaXRvcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkVEMTNEM0IwQ0VBOTM2QTAwRDg5NDY2IC8qIEZyYW1lSU9TLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRnJhbWVJT1MubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFRDEzRDNGMENFQTkzOTQwMEQ4OTQ2NiAvKiBJY29uSU9TLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSWNvbklPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEMTNENTAwQ0VBOTQ5NzAwRDg5NDY2IC8qIFJl
bmRlclRoZW1lSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRo
ZW1lSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREVGODNGMTY3OTcxMDgw
MDBFNDQ0QSAvKiBEYXRhYmFzZVN0cmF0ZWd5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERhdGFiYXNlU3RyYXRlZ3kuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRURFRjg0MDE2Nzk3MTA4MDAwRTQ0NEEgLyogRGF0YWJhc2VTdHJhdGVneS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZVN0cmF0ZWd5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDMxNCw2ICsxNDQ0OSw3IEBACiAJCTFBMkU2RTU2
MENDNTUxRTAwMDRBMjA2MiAvKiBzcWwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTdFNDc0RTE5MTI0OTREQTkwMDIzNTM2NCAvKiBpb3MgKi8sCiAJCQkJ
MUEyRTZFNzgwQ0M1NTZENTAwNEEyMDYyIC8qIFNRTGl0ZUF1dGhvcml6ZXIuY3BwICovLAogCQkJ
CTFBMjI0NjQzMENDOThEREIwMEMwNTI0MCAvKiBTUUxpdGVEYXRhYmFzZS5jcHAgKi8sCiAJCQkJ
MUEyMjQ2NDQwQ0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0ZURhdGFiYXNlLmggKi8sCkBAIC0xNTA2
Miw2ICsxNTE5OCwyNiBAQAogCQkJbmFtZSA9IG1hdGhtbDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTQ0MUFGMEE3MEVCQTdCQkYwMDQ0RUQ0QiAvKiBpb3MgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBGOTdBNjU3MTU1REE4MUUw
MEZBREQ0QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW0gKi8sCisJCQkJMzcyN0RGRDQx
NDJBQUU0NTAwRDQ0OUNCIC8qIEZvbnRDYWNoZUlPUy5tbSAqLywKKwkJCQlDNTgzNjFBNzE3NDQ1
MjNGMDAxNzM1MTEgLyogRm9udFNlcnZpY2VzSU9TLmggKi8sCisJCQkJQzU4MzYxQTgxNzQ0NTIz
RjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5tbSAqLywKKwkJCQkzMUFCNEZGRjEyMjg3OEEy
MDAxQTdEQjAgLyogR3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLywKKwkJCQlGRUQxM0QzRjBDRUE5
Mzk0MDBEODk0NjYgLyogSWNvbklPUy5tbSAqLywKKwkJCQkwNzM1N0M3NjE2RDJERjBEMDBFRDk5
RTcgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5oICovLAorCQkJCTA3MzU3Qzc3MTZE
MkRGMEQwMEVEOTlFNyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLm1tICovLAorCQkJ
CTA3NDMwMEE0MEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MuaCAqLywK
KwkJCQkwNzQzMDBBMzBGNEI4QkNGMDA4MDc2Q0QgLyogTWVkaWFQbGF5ZXJQcml2YXRlSU9TLm1t
ICovLAorCQkJCTM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5t
bSAqLywKKwkJCQlDRUVDNjAzNDE4N0REOTYyMDAzRTQzQkIgLyogVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25JT1MuaCAqLywKKwkJCQlDRENBODI5NDE2NzkxMDBGMDA4NzU3MTQgLyogVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25JT1MubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IGlvczsKKwkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTQ0MzI5MkMxMEVCQTZENzMwMEU2MjAxNiAvKiBp
b3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTUwNzks
NiArMTUyMzUsMTkgQEAKIAkJCW5hbWUgPSBFeHBvcnRzOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKIAkJfTsKKwkJNDQ5N0Q1OEMwRUJBODU0RjAwQTEwNTUyIC8qIGlvcyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNDQzRjA0MjYwRTc1QzhGQjAw
N0U1NDA3IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVySU9TLmNwcCAqLywKKwkJCQk0NDJBRjdBNzEw
MkNEREVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLmggKi8sCisJCQkJNDQyQUY3QTgxMDJDRERFQTAw
OEZENEQzIC8qIFF1aWNrTG9vay5tbSAqLywKKwkJCQk3RTQyOENFNDEzRTM0MDdGMDAzQjY2MUMg
LyogUmVzb3VyY2VIYW5kbGVJT1MubW0gKi8sCisJCQkJNDRBMjBEQjgwRjg0MTY2QzAwQjNFMUZF
IC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5oICovLAorCQkJCTQ0NEQ0RTIxMEY3MDhCMkUwMDMx
NThFMCAvKiBXZWJDb3JlVVJMUmVzcG9uc2VJT1MubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IGlv
czsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTQ5NDg0RkFFMTAyQ0YwMUUw
MDE4N0REMyAvKiBjYW52YXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKApAQCAtMTU1NzcsNiArMTU3NDYsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKIAkJCQlCMkYzNEZFNzBFODJGODE3MDBGNjI3Q0QgLyogY2YgKi8sCisJCQkJNDQ5
N0Q1OEMwRUJBODU0RjAwQTEwNTUyIC8qIGlvcyAqLywKIAkJCQk2NTZCODRFNzBBRUExREFFMDBB
MDk1QjQgLyogbWFjICovLAogCQkJCTkzNEY3MTM3MEQ1QTZFRkYwMDAxOEQ2OSAvKiBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZUJhc2UuY3BwICovLAogCQkJCTkzNEY3MTM5MEQ1QTZGMTAwMDAxOEQ2
OSAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuaCAqLywKQEAgLTE1OTYyLDYgKzE2MTMy
LDE3IEBACiAJCQl0YWJXaWR0aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07CisJCTdFNDc0
RTE5MTI0OTREQTkwMDIzNTM2NCAvKiBpb3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJ
CWNoaWxkcmVuID0gKAorCQkJCTdFNDc0RTFEMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRh
YmFzZVRyYWNrZXIuY3BwICovLAorCQkJCTdFNDc0RTFDMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxp
dGVEYXRhYmFzZVRyYWNrZXIuaCAqLywKKwkJCQk3RTQ3NEUxQjEyNDk0REM5MDAyMzUzNjQgLyog
U1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi8sCisJCQkpOworCQkJbmFtZSA9IGlvczsK
KwkJCXBhdGggPSBzcWwvaW9zOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJ
N0VFNjg0NzMxMkQyNkU1NTAwRTc5NDE1IC8qIGNmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE3NTY4LDIwICsxNzc0OSw3MSBAQAogCQkJbmFtZSA9IHBh
cnNlcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUE1MTZFOEIyMTM2RTA0
QzAwMDc2QzNDMCAvKiBpb3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUE1MTZFOEI0MTM2RTA0REIwMDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUu
aCAqLywKKwkJCQlBNTE2RThCNTEzNkUwNERCMDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hl
Lm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OwogCQlBNTlFM0MxQjExNTgwRjM0MDA3MjkyOEUgLyogaW9zICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkyOTAzNzE2NDE2QkExMUJDMDBGRUZE
RjAgLyogQ29udGVudEZpbHRlcklPUy5tbSAqLywKIAkJCQkyNjU1NDE0QjE0ODlBQTJCMDAwREZD
NUQgLyogQ3Vyc29ySU9TLmNwcCAqLywKKwkJCQkzMUVBRjk3QzEyMTQzNUE0MDBFN0MxQkYgLyog
RGV2aWNlTW90aW9uQ2xpZW50SU9TLmggKi8sCisJCQkJMzFFQUY5N0QxMjE0MzVBNDAwRTdDMUJG
IC8qIERldmljZU1vdGlvbkNsaWVudElPUy5tbSAqLywKKwkJCQkzMTQwMzc5OTEyNEJFQTdGMDBB
RjQwRTQgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCAqLywKKwkJCQkzMTQwMzc5QTEy
NEJFQTdGMDBBRjQwRTQgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MubW0gKi8sCiAJCQkJ
MjZGNDBENDkxNDkwNEE2MzAwQ0E2N0M0IC8qIEV2ZW50TG9vcElPUy5tbSAqLywKIAkJCQkyNkMx
N0EzQzE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5oICovLAogCQkJCTI2QzE3QTNE
MTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9TLm1tICovLAogCQkJCTI2NTU0MTM3MTQ4
OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudENvZGVzSU9TLmggKi8sCiAJCQkJMjY1NTQxMzgxNDg5
ODExQzAwMERGQzVEIC8qIEtleUV2ZW50SU9TLm1tICovLAorCQkJCTFGNjhENEFEMTRCQjlEQ0Ew
MDdCNUM2MiAvKiBNZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW0gKi8sCisJCQkJRTQ1MzkwMTgw
RUFGQ0FDQTAwMzY5NUM4IC8qIE1JTUVUeXBlUmVnaXN0cnlJT1MubW0gKi8sCiAJCQkJRTQ1Mzkw
MTkwRUFGQ0FDQTAwMzY5NUM4IC8qIFBhc3RlYm9hcmRJT1MubW0gKi8sCisJCQkJMjY2MDFFQkQx
NEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmggKi8sCisJCQkJMjY2
MDFFQkUxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tICovLAog
CQkJCUM1Mjc4QjBCMTdGMjEyRUEwMDNBMjk5OCAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0g
Ki8sCisJCQkJRTQ1MzkwMzIwRUFGRDYzNzAwMzY5NUM4IC8qIFBsYXRmb3JtU2NyZWVuSU9TLm1t
ICovLAorCQkJCUFBRTM3NTVEMTc0MjlCQ0MwMDYyMDBDMiAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVySU9TLm1tICovLAorCQkJCTQ0QzM2M0VFMEZBQTdCQjMwMDk3RjhDQyAvKiBSdW50aW1l
QXBwbGljYXRpb25DaGVja3NJT1MuaCAqLywKKwkJCQk0NEMzNjNFRjBGQUE3QkIzMDA5N0Y4Q0Mg
LyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLm1tICovLAorCQkJCTBGMTc3NDdFMTM3OEI3
NzEwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRvcklPUy5oICovLAorCQkJCTBGMTc3NDdGMTM3OEI3
NzIwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRvcklPUy5tbSAqLywKKwkJCQk0NEM5OTE4NTBGM0Qx
RUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCAqLywKKwkJCQk0NEM5OTE4MTBGM0Qx
RTBEMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MubW0gKi8sCisJCQkJRTQ1MzkwMzQwRUFG
RDYzNzAwMzY5NUM4IC8qIFNjcm9sbFZpZXdJT1MubW0gKi8sCisJCQkJQkVBODA3QzYwRjcxNEEw
MzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuY3BwICovLAorCQkJCUJFQTgwN0M3MEY3MTRBMDMw
MDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmggKi8sCiAJCQkJRTQ1MzkwMzUwRUFGRDYzNzAwMzY5
NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1tICovLAorCQkJCUU0NTM5MDM2MEVBRkQ2MzcwMDM2OTVD
OCAvKiBTb3VuZElPUy5tbSAqLywKKwkJCQk0NDc2NTMxQTEzMzE3MDk5MDAwNkI3ODkgLyogU1NM
S2V5R2VuZXJhdG9ySU9TLmNwcCAqLywKKwkJCQlFNDUzOTBBRDBFQUZGNEI1MDAzNjk1QzggLyog
U3lzdGVtTWVtb3J5SU9TLmNwcCAqLywKKwkJCQk0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAgLyog
VGhlbWVJT1MuaCAqLywKKwkJCQk0NEM5OTE5RTBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1Mu
bW0gKi8sCisJCQkJRTRDM0IxRjkwRjBFNDE2MTAwOTY5M0Y2IC8qIFRpbGVDYWNoZS5oICovLAor
CQkJCUU0QzNCMUZCMEYwRTQxNzAwMDk2OTNGNiAvKiBUaWxlQ2FjaGUubW0gKi8sCisJCQkJRTRC
NjVBNTcxMzJGQThFNzAwNzBFN0JFIC8qIFRpbGVHcmlkLmggKi8sCisJCQkJRTRCNjVBNTkxMzJG
QUFGOTAwNzBFN0JFIC8qIFRpbGVHcmlkLm1tICovLAorCQkJCUU0MjRBMzlEMTMzMERGMDEwMENG
NkRDOSAvKiBUaWxlR3JpZFRpbGUuaCAqLywKKwkJCQlFNDI0QTM5RjEzMzBERjFFMDBDRjZEQzkg
LyogVGlsZUdyaWRUaWxlLm1tICovLAorCQkJCUU0QjY1QTVCMTMyRkFDQjAwMDcwRTdCRSAvKiBU
aWxlTGF5ZXIuaCAqLywKKwkJCQlFNEI2NUE1RDEzMkZBREI2MDA3MEU3QkUgLyogVGlsZUxheWVy
Lm1tICovLAorCQkJCUU0RTM5QUZBMTMzMEVGQTgwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29sLmgg
Ki8sCisJCQkJRTRFMzlBRkMxMzMwRUZDNTAwM0FCMjc0IC8qIFRpbGVMYXllclBvb2wubW0gKi8s
CisJCQkJMzE0MDM3OTcxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLmgg
Ki8sCisJCQkJMzE0MDM3OTgxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2Vy
Lm1tICovLAorCQkJCTQ0QzNDRkU3MTU1NkJFNUQwMDAxMzYwOSAvKiBXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlSU9TLmggKi8sCisJCQkJRTQ1MzkwMzgwRUFGRDYzNzAwMzY5NUM4IC8qIFdlYkNvcmVT
eXN0ZW1JbnRlcmZhY2VJT1MubW0gKi8sCisJCQkJRkUwRDg0RTgxMDQ4NDM0ODAwMUExNzlFIC8q
IFdlYkV2ZW50LmggKi8sCisJCQkJRkUwRDg0RUExMDQ4NDM2RTAwMUExNzlFIC8qIFdlYkV2ZW50
Lm1tICovLAogCQkJCUE1MDJDNUREMTMwNDlCMzUwMEZDN0Q1MyAvKiBXZWJTYWZlR0NBY3Rpdml0
eUNhbGxiYWNrSU9TLmggKi8sCiAJCQkJQzJDNENCMUQxNjFBMTMxMjAwRDIxNERBIC8qIFdlYlNh
ZmVJbmNyZW1lbnRhbFN3ZWVwZXJJT1MuaCAqLywKKwkJCQlFNDUzOTAzQzBFQUZENjM3MDAzNjk1
QzggLyogV2lkZ2V0SU9TLm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSBpb3M7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwpAQCAtMTk0MDYsNiArMTk2MzgsNyBAQAogCQkJCTkzMzJBQjNCMTY1
MTVENzcwMEQ4MjdFQyAvKiBjcHUgKi8sCiAJCQkJQTc1RThCN0YwRTFERTJCMDAwN0YyNDgxIC8q
IGZpbHRlcnMgKi8sCiAJCQkJNDk4NzcwQzExMjQyQzUwRDAwMjIyNkJBIC8qIGdwdSAqLywKKwkJ
CQk0NDFBRjBBNzBFQkE3QkJGMDA0NEVENEIgLyogaW9zICovLAogCQkJCUIyNzUzNTQ5MEIwNTM4
MTQwMDJDRTY0RiAvKiBtYWMgKi8sCiAJCQkJRkJDMjIwREQxMjM3RkJFQjAwQkNGNzg4IC8qIG9w
ZW5nbCAqLywKIAkJCQlGNEVBRjRBQjEwQzc0MjY4MDA5MTAwRDMgLyogb3BlbnR5cGUgKi8sCkBA
IC0xOTU4MCw2ICsxOTgxMyw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAogCQkJCUIyQjI2NDU5MEQwMEE3N0UwMDBBQ0MxRCAvKiBjZiAqLywKKwkJCQlBNTE2RThCMjEz
NkUwNEMwMDA3NkMzQzAgLyogaW9zICovLAogCQkJCUIyQzNEOUY5MEQwMDZDMUQwMEVGNkYyNiAv
KiBtYWMgKi8sCiAJCQkJMzdDNjFGMDAxMjA5NUM4NzAwN0EzQzY3IC8qIEF0b21pY1N0cmluZ0tl
eWVkTVJVQ2FjaGUuaCAqLywKIAkJCQlCMkMzRDlGMjBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaUNv
bnRleHQuY3BwICovLApAQCAtMjA0ODQsNiArMjA3MTgsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJQ0QwRUVFMEIxNDc0M0UzNTAwM0VBRkEyIC8qIEF1ZGlvRGVzdGluYXRpb25JT1MuY3BwICov
LAogCQkJCUNEMEVFRTBBMTQ3NDNFMzQwMDNFQUZBMiAvKiBBdWRpb0Rlc3RpbmF0aW9uSU9TLmgg
Ki8sCisJCQkJQ0Q1NTk2OEYxNDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5j
cHAgKi8sCisJCQkJQ0Q1NTk2OTAxNDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklP
Uy5oICovLAogCQkJCUNEQTc5ODI1MTcwQTI3OTAwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb25JT1Mu
bW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IGlvczsKQEAgLTIyMjgzLDYgKzIyNTE5LDcgQEAKIAkJ
CQlDRURBMTJENzE1MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlDRTA4QzNEMjE1MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0U3QjJEQjMxNTg2QUJBRDAwOThC
M0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RkUwRDg0RTkxMDQ4NDM0ODAwMUExNzlFIC8qIFdlYkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGRDMxNjAzRTEyQjAyNjc2MDBDMUEzNTkgLyogQW5hbHlzZXJOb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDREUzQTg1ODE3RjYwMjA0MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkZP
YmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTA3MDdFNzEyMTlDMDQzMDBEOTBFNTEgLyogQU5H
TEVXZWJLaXRCcmlkZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtMjI0MjQsNiArMjI2NjEsNyBAQAog
CQkJCUJDQjE2QzFDMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRJbWFnZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzE5RkJENUYxNUQyRjQ2NDAwOTY0MEE2IC8qIENhY2hlZEltYWdlQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTAxODQ2OTBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFn
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQyNEEzOUUxMzMwREYwMTAwQ0Y2REM5IC8qIFRpbGVH
cmlkVGlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDBFREE3NzUxNDNFMzAzQzAwMjhFMzgzIC8q
IENhY2hlZFJhd1Jlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUI1MzM0OTE3MTdERUUz
MDBGMjA1RjkgLyogQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDQjE2QzIwMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRSZXNvdXJjZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yMjYxNyw2ICsyMjg1NSw3IEBACiAJCQkJMDc4RTA5MTQxN0QxNEQxQzAwNDIwQUEx
IC8qIE1lZGlhQ29uc3RyYWludHNJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNFOTBB
MTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlC
RDlGQTEzMUZEMkVEMDAzQzU2RjAgLyogQ1NTVmFsdWVQb29sLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlFNEI2NUE1ODEzMkZBOEU3MDA3MEU3QkUgLyogVGlsZUdyaWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzRjE5OTJGMDgyNDVFNTkwMDFFOUFCQyAvKiBDdXJzb3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMjI3MkEyMEU4MkU4N0MwMEU3Rjk3NSAvKiBDdXJzb3JEYXRhLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NjgxNjBENjE4NzY2QTEzMDAyMUU3OUQgLyogVXNlckFjdGl2aXR5LmggaW4gSGVh
ZGVycyAqLywKQEAgLTIzMDU3LDYgKzIzMjk2LDcgQEAKIAkJCQk4NTUyNkNEMjBBQjBCN0Q5MDAw
MzAyRUEgLyogRE9NVHJlZVdhbGtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwQjQxQzMwQUQ5
RTdFNzAwQTZFRDRGIC8qIERPTVRyZWVXYWxrZXJJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODVDN0Y0OTEwQUFGNzlEQzAwNDAxNEREIC8qIERPTVVJRXZlbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTQ0Qzk5MTlGMEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODU5ODlERDAwQUNDOEJCRDAwQTBCQzUxIC8qIERPTVVJRXZlbnRJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkUzN0RGREIxMkRCQUZCODAwQTZCMjMzIC8qIERPTVVSTC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTVDNzcwQTYxMDBENDFDRDAwNUJBMjY3IC8qIERPTVZhbGlk
aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjMyMjUsNiArMjM0NjUsNyBAQAogCQkJCTg0
NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4
QzkyNTFBMEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTMxMzEzRjY2MTQ0M0IzNUYwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNDRDM0NGRTgxNTU2QkU1RDAwMDEzNjA5IC8qIFdlYkNvcmVTeXN0
ZW1JbnRlcmZhY2VJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjZFMTQ5OTc5MEQwMENE
RDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjcwMTQ5
OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
NzJDMDBEOTEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLApA
QCAtMjMzMTIsNiArMjM1NTMsNyBAQAogCQkJCTA4NzNCODZCMTM2MDY0RUEwMEE1MjJDMiAvKiBH
bHlwaFBhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTZFMEQwMDZDRDYwMEVGNkYyNiAv
KiBHbHlwaFBhZ2VUcmVlTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1M0M1RjUwREE1NkI5
MjAwMjFFQjVEIC8qIEdyYWRpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3RTQ3NEUxRTEyNDk0
REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMjIyNzk2NDBEMDBCRjIyMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMkEwMTVBOTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3ND
b250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlGQzEwNDJEMzY1MDAwOUQ0NDcgLyog
R3JhcGhpY3NDb250ZXh0M0QuaCBpbiBIZWFkZXJzICovLApAQCAtMjM0MjgsNiArMjM2NzAsNyBA
QAogCQkJCUE4MTM2OURDMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MT3B0aW9uRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTgxMzY5REEwOTczNzRGNjAwRDc0NDYzIC8qIEhUTUxPcHRpb25z
Q29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEFEMDEwMDkxMjdFNjQyQTAwMTUwMzVG
IC8qIEhUTUxPdXRwdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk0NEMzNjNGMDBGQUE3
QkIzMDA5N0Y4Q0MgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUQ3MTlGODE4MTEwNkUwMDAxNkRDNTEgLyogSW5kZXhlZERCLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEVBN0NCNTBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTFBhcmFncmFwaEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFENDU4MEExMjdDQkMwMEIxMkE2OCAvKiBIVE1M
UGFyYW1FbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzNTE1LDYgKzIzNzU4LDcgQEAKIAkJ
CQlCQzdGNDRBODBCOUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkQ1QTU5MzExNTI1MjVEMDAwMzZFRTUxIC8qIEltYWdlT3JpZW50YXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTQ5MjkxRTRCMTM0MTcyQzgwMEU3NTNERSAvKiBJbWFnZVJlbmRl
cmluZ01vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0QzNCMUZBMEYwRTQxNjEwMDk2OTNGNiAv
KiBUaWxlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTcxMEIwNTM4MTQwMDJDRTY0
RiAvKiBJbWFnZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzNDgwOTQwRUVGNTBENDAw
QUMxQjQxIC8qIEltYWdlU291cmNlQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNkZFMTE4MEU2
RTFEQTcwMEJGNjA4OCAvKiBJbXBsaWNpdEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MzU4Niw2ICsyMzgzMCw3IEBACiAJCQkJN0FGMTFBNUExMkU3Mjc0OTAwNjFGMjNDIC8qIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODJBQjE3NzQxMjVDODI2NzAw
QzUwNjlEIC8qIEluc3BlY3RvclN0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgyODg5
QjREMTNDNjIzOTIwMDlBNjE1NiAvKiBJbnNwZWN0b3JTdHlsZVRleHRFZGl0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTMxRUFGOTdFMTIxNDM1QTQwMEU3QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGll
bnRJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1NDEzM0E4MTAyRTAwRTgwMDA3NUQwMCAvKiBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzhEQTIwRjE1MjBF
QkEzMDA2MTQxQzEgLyogSW5zcGVjdG9yV2ViVHlwZUJ1aWxkZXJzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGMzgxMEMxQzEzNjVBNDk2MDBFRDZFMzMgLyogSW5zcGVjdG9yV29ya2VyQWdlbnQuaCBp
biBIZWFkZXJzICovLApAQCAtMjM2NDUsNiArMjM4OTAsNyBAQAogCQkJCTk3NUNBMkEyMTMwMzY3
OUQwMEU5OUFEOSAvKiBKU0NyeXB0by5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0NkMxRkIwQzBE
REM4RjAwMjBDRkMzIC8qIEpTQ1NTQ2hhcnNldFJ1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQw
OUVCREMzMTZCN0YzQTYwMENCQTNGQyAvKiBKU0NTU0ZvbnRGYWNlTG9hZEV2ZW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3RTQ3NEUxRjEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJhc2VU
cmFja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQ2QzFGRDBDMEREQzhGMDAyMENGQzMgLyog
SlNDU1NGb250RmFjZVJ1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDZDMUZGMEMwRERDOEYw
MDIwQ0ZDMyAvKiBKU0NTU0ltcG9ydFJ1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDZDMjAx
MEMwRERDOEYwMDIwQ0ZDMyAvKiBKU0NTU01lZGlhUnVsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MzY3MSw2ICsyMzkxNyw3IEBACiAJCQkJMzFGQjFBNjYxMjBBNUQzRjAwREMwMkEwIC8qIEpTRGV2
aWNlTW90aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTU5QTg2MDA4MTE5REFGQTEwMERF
RjFFRiAvKiBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
RTQzODlDMTQwQjFCQTgwMDVFNDM3RSAvKiBKU0RpY3Rpb25hcnkuaCBpbiBIZWFkZXJzICovLAor
CQkJCTQ0Qzk5MTg2MEYzRDFFQkUwMDU4NjY3MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTRBRTdDMUExN0QyMzIzNTAwMDlGQjMxIC8qIEVsZW1lbnRBbmNlc3Rv
ckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTQ2RkU3NTE4NDQyMzcwMDAxQTkzN0Mg
LyogSlNPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1OUREQzgz
MDlFMTk4QkEwMDFCRjNDNiAvKiBKU0RvY3VtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzNjkx
LDYgKzIzOTM4LDcgQEAKIAkJCQlFMTlBQzNGMzE4MjREQzc5MDAzNDk0MjYgLyogQ3J5cHRvQWxn
b3JpdGhtU0hBMzg0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGQjkxMzkyQTE2QUU0RkMwMDAxRkU2
ODIgLyogSlNET01QYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOUQyNDdGRjBENzU3RTY5MDBG
REY5NTkgLyogSlNET01QbHVnaW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTMxNDAzNzlCMTI0QkVB
N0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTlEMjQ4MDEwRDc1N0U2OTAwRkRGOTU5IC8qIEpTRE9NUGx1Z2luQXJyYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUxOTcyNzE2MTgyMDU0OUUwMDU5MkQ1MSAvKiBDcnlwdG9LZXlUeXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzVBODZCNjBDMzM2N0U4MDBFRUE2NDkgLyogSlNET01TZWxlY3Rp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtMjM3MTksNiArMjM5NjcsNyBAQAogCQkJCTMzMTRBQ0VD
MTA4OTIwODYwMDBGMEU1NiAvKiBKU0V4Y2VwdGlvbkJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTZFQkYwRTc3MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3NzI4Njk4NDE0RkQ5QURBMDBGNDg0REMgLyogSlNFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWMuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0RTM5QUZCMTMzMEVGQTgwMDNBQjI3
NCAvKiBUaWxlTGF5ZXJQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAwRjAxNTBFMEExODk1
MDBGRDA0RTMgLyogSlNGaWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTNCQzBDQjExN0QzRTA4
MDBCOTQwOUEgLyogSlNGaWxlRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg5ODc4NUYxMTIy
RTFFODcwMDNBQUJEQSAvKiBKU0ZpbGVFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjM3
MzMsNiArMjM5ODIsNyBAQAogCQkJCUZFODBEQTY2MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb3Bv
c2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzk2OURBQzE3RDE0MTUxMDA3RkY4NDIgLyog
SlNSVENEYXRhQ2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ4MkI3NTIxMTk4Q0I2QjAw
QkZCMDA1IC8qIEpTSGFzaENoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlCRUE4MDdD
OTBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM5NEQxNEYwQzI3NUM2ODAwNkJDNjE3IC8qIEpTSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM5N0U0MTMxMDkxNTRGQTAwMTBEMzYxIC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBNEEyREYwMEExQjg1MkEwMEM4MDdGOCAvKiBKU0hUTUxBbmNob3JF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzNzkxLDYgKzI0MDQxLDcgQEAKIAkJCQkxQTg1
QjFFQjBBMUIyNDA1MDBEOEM4N0MgLyogSlNIVE1MT0xpc3RFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBODBFN0U5QjBBMUE4M0UzMDA3RkI4QzUgLyogSlNIVE1MT3B0R3JvdXBFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFN0U5OTBBMUE4M0UzMDA3RkI4QzUgLyogSlNIVE1M
T3B0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzU4MzYxQTkxNzQ0NTIzRjAwMTcz
NTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDQ4QTI5QkYwQTQ2
RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0QUQwMTczRDEyN0U4Mjg2MDAxNTAzNUYgLyogSlNIVE1MT3V0cHV0RWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUFFMkFCQTcwQTFDRTkwNTAwQjQyQjI1IC8qIEpTSFRNTFBhcmFn
cmFwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjM4NDEsNiArMjQwOTIsNyBAQAogCQkJ
CTkzNUY0NTQzMEY3QzNCNUYwMEQ3QzFGQiAvKiBKU0xhenlFdmVudExpc3RlbmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0UxQzQzQzBEOTgzMEQzMDAzQjAyRjIgLyogSlNMb2NhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkQyM0ExMjYxM0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNjYwMUVCRjE0QjNCOUFE
MDAxMkMwRkUgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUU0NDYxNDE5MENENjgyNjkwMEZBREE3NSAvKiBKU01lZGlhRXJyb3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDM0MzOUI3MEMwRDNEOEQwMDVGNEQ3QSAvKiBKU01lZGlhTGlzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRDNBOTRBNDcxMjJEQzQwRjAwQTM3QkJDIC8qIEpTTWVkaWFRdWVyeUxpc3Qu
aCBpbiBIZWFkZXJzICovLApAQCAtMjQxMTYsNiArMjQzNjgsNyBAQAogCQkJCTZFM0ZBRDM5MTQ3
MzNGNDAwMEU0MjMwNiAvKiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk2RUU4QTc3MzEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRy
aWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzJDQkY0RTE0MEYxQUJEMDAzODc5QkUgLyog
SlNXZWJHTENvbnRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDc0MzAwQTYwRjRCOEJD
RjAwODA3NkNEIC8qIE1lZGlhUGxheWVyUHJpdmF0ZUlPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NkUzRkFEMzkxNDczM0Y0MDExRTQyMzA3IC8qIEpTV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNkUzRkFEMzkxNDczM0Y0MDIyRTQyMzA3IC8qIEpTV2ViR0xEZWJ1
Z1NoYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFM0ZBRDM5MTQ3MzNGNDAwMEU0MjMwNyAv
KiBKU1dlYkdMRGVwdGhUZXh0dXJlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0MTI4LDYgKzI0Mzgx
LDcgQEAKIAkJCQk1MUM5NjExQjE4M0QyQjgwMDBEMjAwMkUgLyogSURCRGF0YWJhc2VNZXRhZGF0
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA3RDMzNTYxNTJCNjMwRTAwMUI2MzkzIC8qIEpTV2Vi
R0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUE1MTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMVGV4dHVyZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzE0
MDM3OUQxMjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwNzhFMDkxNTE3RDE0RDFDMDA0MjBBQTEgLyogTWVkaWFTdHJlYW0u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBDNDUzNDI4MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdM
VW5pZm9ybUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3N0VGNjJGNDEyRjlEQjc0MDBD
NzdCRDIgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmggaW4gSGVhZGVycyAqLywKQEAg
LTI0Mzg4LDYgKzI0NjQyLDcgQEAKIAkJCQk5Mzc3QUJBMDE1REVGRUVGMDAzMUZEMDQgLyogUGFn
aW5hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4NTA2N0YxMURBMDQ1QjAwMTgyQjk4IC8q
IFBhaW50SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4NTA2ODAxMURBMDQ1QjAwMTgyQjk4
IC8qIFBhaW50UGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3RUQzNUEzMTZENkRDRTIwMDIy
NDhGMyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBODBFNkNGQjBBMTk4OUNBMDA3RkI4QzUgLyogUGFpci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwQTMxMkIwMjZGNzAwQzFBMzU5IC8qIFBhbm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwMUExMkIwMjY3NjAwQzFBMzU5IC8qIFBhbm5lck5vZGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMjQ2MDMsNiArMjQ4NTgsNyBAQAogCQkJCTJCMzY1Qzg0MTUyNTExOUUwMDkxRDI3QiAvKiBS
ZW5kZXJTVkdFbGxpcHNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0M0MwOTJCQzEyRDlFNEVFMDBB
OTg5QzMgLyogUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2
NzA4QzUxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMzFBQjUwMDAxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dDNE
SU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhDNzEyRDlDQTRCMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhDOTEyRDlD
QTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NTRC
MDE1MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmUuaCBpbiBIZWFkZXJzICovLApA
QCAtMjQ2MTEsNiArMjQ4NjcsNyBAQAogCQkJCUNEM0E0OTYyMTdBOUQwMUIwMDI3NEU0MiAvKiBT
b3VyY2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOENCMTJEOUNBNEIwMDA0NDIz
NCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ4OTQ0QTMx
ODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMTc3NDgwMTM3OEI3NzIwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRvcklPUy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQURERjFBRDcxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCBp
biBIZWFkZXJzICovLAogCQkJCUExMEJCNTg1MTQ4NEUzQTcwMEIyRTg3QSAvKiBSZW5kZXJTVkdS
ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhDRDEyRDlDQTRCMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ3OTMsNiArMjUwNTAsNyBAQAog
CQkJCUUxQjc4MzlDMTYzNzQwQTcwMDA3QjY5MiAvKiBTaGFyZWRXb3JrZXJTdHJhdGVneS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDFEMTY4RUUxMDIyNkU4OTAwOUJDODI3IC8qIFNoYXJlZFdvcmtl
clRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNjUwRDAwNkNENjAwRUY2RjI2IC8q
IFNpbXBsZUZvbnREYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEI2NUE1QzEzMkZBQ0IwMDA3
MEU3QkUgLyogVGlsZUxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUExRUE3RDE1MkJDRjA4
MDA0RDAwQjYgLyogU2ltcGxpZnlNYXJrdXBDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTc0MUFBRDE2NjM2NjA5MDA4QTVCN0UgLyogU2ltdWxhdGVkQ2xpY2tPcHRpb25zLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRDAwRDdBNTE0QTNGNjE5MDA3MzQwMTEgLyogU2luY1Jlc2FtcGxlci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNDg2OCw2ICsyNTEyNiw3IEBACiAJCQkJNTFCRTM3RTAwREFF
RTAwRTAwMTA4NUZDIC8qIFN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTE2MEVF
QjEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDNTEwMkVDRjBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlDRDU1OTY5MjE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9T
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUUwQkFCQjBEQTU1NDcxMDBBOUU0MTcgLyogU3RvcmFn
ZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTY1NzZFODE3REE5NEUyMDBBNTZCREMgLyog
RE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1RUJERDg0
MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTI1MDI0LDYgKzI1MjgzLDcgQEAKIAkJCQlCMjIyNzlGQTBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHRkVPZmZzZXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlGRDBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBMDAwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ0QTIwREI5MEY4NDE2NkMwMEIzRTFGRSAvKiBXZWJD
b3JlVVJMUmVzcG9uc2VJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTAzMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3
OEUwOTE5MTdEMTREMUMwMDQyMEFBMSAvKiBNZWRpYVN0cmVhbVRyYWNrRXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3QTA2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVRpbGVFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTI1MjQ3LDYgKzI1NTA3LDcgQEAKIAkJCQk5N0JDODRBNTEy
MzcwREM4MDAwQzYxNjEgLyogVGV4dFZpZXdTb3VyY2VQYXJzZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRTY1OEZGMEVBOTI0OEEwMDdFNDUzMyAvKiBUaGVtZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNFNjU5RTYwRUE5MkZCMjAwN0U0NTMzIC8qIFRoZW1lTWFjLmggaW4gSGVhZGVycyAqLywK
KwkJCQk0NDJBRjdBOTEwMkNEREVBMDA4RkQ0RDMgLyogUXVpY2tMb29rLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0U2NTlBOTBFQTkyN0I5MDA3RTQ1MzMgLyogVGhlbWVUeXBlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTc2RDZDOTUxMjJCOEEzRDAwMUZEMUY3IC8qIFRocmVhZGFibGVCbG9iUmVn
aXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBCOTA1NjFCMEYyNTc4QkYwMDk1RkY2QSAvKiBU
aHJlYWRhYmxlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MjYxLDYgKzI1NTIyLDcgQEAK
IAkJCQkxQUY4OUE0MjE1MThGREVBMDBFNTQ3QjUgLyogVGlsZWRCYWNraW5nLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0OTg3NzBGMzEyNDJDNTM1MDAyMjI2QkEgLyogVGlsaW5nRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRjU1QjNEREMxMjUxRjEyRDAwM0VGMjY5IC8qIFRpbWVJbnB1dFR5cGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCUE1MTZFOEI3MTM2RTA0REIwMDc2QzNDMCAvKiBMb2NhbGl6
ZWREYXRlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1NTNDRkU4MTA4RjQ3M0YwMEVBMjgx
RSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDcxOUI3
MTgxMTA2RTAwMDE2REM1MSAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzMDVCMjREMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yNTkyOCw2ICsyNjE5MCw3IEBACiAJCQkJRkQ4QzQ2RUIxNTQ2MDhFNzAwQTU5MTBD
IC8qIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ0
ODM5MENFRDY2QzMyNTVGNzJDNTkgLyogTWF0aE1MU2VsZWN0RWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwNzhFMDkwMzE3RDE0Q0VFMDA0MjBBQTEgLyogTWVkaWFTdHJlYW1UcmFja0V2
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ0NEQ0RTIzMEY3MDhCMkUwMDMxNThFMCAvKiBX
ZWJDb3JlVVJMUmVzcG9uc2VJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlDREE3OTgyNDE3MEEy
NTgzMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQTc5
ODI3MTcwQTI3OTEwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb25JT1MubW0gaW4gU291cmNlcyAqLywK
IAkJCQlDRDU0REU0QjE3NDY5QzZEMDA1RTVCMzYgLyogQXVkaW9TZXNzaW9uTWFjLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMjU5MzcsNiArMjYyMDAsNyBAQAogCQkJCUJFODhFMEQ4MTcxNUQyQTIw
MDY1OEQ5OCAvKiBBdWRpb1RyYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJFODhFMERCMTcx
NUQyQTIwMDY1OEQ5OCAvKiBBdWRpb1RyYWNrTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
RDMxNjA4QTEyQjAyNkY3MDBDMUEzNTkgLyogQXVkaW9VdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJN0U0MjhDRTUxM0UzNDA3RjAwM0I2NjFDIC8qIFJlc291cmNlSGFuZGxlSU9TLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0RjcxMzgwRDVBNkVGRjAwMDE4RDY5IC8qIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTRDNzY0RDBDRTky
MzRFMDA3RUYzQ0QgLyogQXV0aGVudGljYXRpb25NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk0
NTgzMEQ0RDE2NzlCNEY4MDBBQ0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yNjAwMiw2ICsyNjI2Niw3IEBACiAJCQkJNDlBRTJEOTYxMzRFRTVGOTAw
NzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjE4Mjc0
OTMxMzRDQTRDMTAwQjk4QzJEIC8qIENhbGxiYWNrRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNkU0RTkxQUMxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVz
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxNDAzNzlDMTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJD
b3JlTW90aW9uTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ5NDg0RkMxMTAyQ0YyM0Mw
MDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjkxMzky
NzE2QUU0QzM0MDAxRkU2ODIgLyogQ2FudmFzUGF0aE1ldGhvZHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDk0ODRGQzQxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BhdHRlcm4uY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yNjA2OCwxMiArMjYzMzMsMTQgQEAKIAkJCQk5NzYyN0I4RDE0RkIzQ0VF
MDAyQ0RDQTEgLyogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMDY1QUQ0RjYwQjBDMkVEQTAwNUEyQjFEIC8qIENvbnRleHRNZW51Q29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwN0QwN0IxNDE4MzQxNTg4MDBBQkREM0MgLyogSlNSVENT
ZXNzaW9uRGVzY3JpcHRpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0U0NzRFMjAx
MjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwNjAyN0NCMzBCMUNDMDNEMDA4ODRCMkQgLyogQ29udGV4dE1lbnVJdGVtTWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTNCNkEwRUEwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRN
ZW51TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMjgxMkIwMjY3NjAwQzFBMzU5IC8q
IENvbnZvbHZlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE0MjRDOTMxNjRCNTJDODAw
RjMyRDQwIC8qIENvb2tpZUphci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTQyNEM5MDE2NEI0
NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0
NjMxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZVN0b3JhZ2VDRk5ldC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkzN0U2NTk1MDE2M0IxMEMyMDBFQjQ1NzQgLyogU2ltcGxlRm9udERhdGFJT1MubW0g
aW4gU291cmNlcyAqLywKIAkJCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyogQ29va2llU3Rv
cmFnZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3NDZBRjIxMTRGNERERTYwMDNFN0E3MiAv
KiBDb29yZGluYXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzVFQjk1MDBFODIwNTZCMDBC
MjU5NjUgLyogQ291bnRlckRpcmVjdGl2ZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjE3OSw2
ICsyNjQ0Niw3IEBACiAJCQkJRkU0NTZGMTgxNjc3RDc0RTAwNUVEREY5IC8qIERhdGFiYXNlTWFu
YWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUIyNkQyODE2N0E4RjJBMDBGREQyNkIgLyog
RGF0YWJhc2VTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVERUY4NDExNjc5NzEwODAw
MEU0NDRBIC8qIERhdGFiYXNlU3RyYXRlZ3kuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTRFMzlB
RkQxMzMwRUZDNjAwM0FCMjc0IC8qIFRpbGVMYXllclBvb2wubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk5N0JDNkEyQTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VTeW5jLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTk3QkM2QTJEMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRhc2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBMkYxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhy
ZWFkLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjYzMTQsNiArMjY1ODIsNyBAQAogCQkJCUY1QzA0
MUU0MEZGQ0E5NkQwMDgzOUQ0QSAvKiBET01IVE1MRGF0YUxpc3RFbGVtZW50Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTE1N0E4RTgxODE4NEM2NzAwOUY4MjFEIC8qIEpTQ3J5cHRvS2V5Q3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MDU4NTIzMTdGREMxNDAwMDVGMkJDQiAvKiBNZWRp
YVRyYWNrQ29uc3RyYWludHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkVEMTNENDAwQ0VBOTM5
NDAwRDg5NDY2IC8qIEljb25JT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMTI1RjgzMTE4MjJG
MTFCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlEMzU5RDc5MjEyOUNBM0MwMDAwNkU1RDIgLyogRE9NSFRNTERldGFpbHNFbGVtZW50Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODVCQTREMEMwQUE2ODg2ODAwODgwNTJEIC8qIERPTUhUTUxEaXJl
Y3RvcnlFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yNjM3NSw2ICsyNjY0NCw3IEBACiAJ
CQkJODVCQTREMTgwQUE2ODg2ODAwODgwNTJEIC8qIERPTUhUTUxVTGlzdEVsZW1lbnQubW0gaW4g
U291cmNlcyAqLywKIAkJCQlBODE4NUYzRTA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNDODQxRkYwOUNFODU4MzAwREZGNUU1IC8q
IERPTUltcGxlbWVudGF0aW9uRnJvbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjY2MDFFQzAx
NEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkMxQTM3QkEwOTdDNzE1RjAwMTlGM0Q4IC8qIERPTUludGVybmFsLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJODVGRjMxNUIwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZl
bnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NTA2NTZGRjBBQUI0NzYzMDAyRDE1QzAgLyogRE9N
TWVkaWFMaXN0Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yNjQ1Nyw2ICsyNjcyNyw3IEBACiAJCQkJ
NDk4NzcwREIxMjQyQzUzNTAwMjIyNkJBIC8qIERyYXdpbmdCdWZmZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0RDOEI1QTYxODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJpdmF0ZUFW
Rk9iakMubW0gaW4gU291cmNlcyAqLywKIAkJCQk0OTg3NzE1MzEyNDNGOUZBMDAyMjI2QkEgLyog
RHJhd2luZ0J1ZmZlck1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTMxRUFGOTdGMTIxNDM1QTQw
MEU3QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGllbnRJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkw
NzhFMDkxMjE3RDE0Q0VFMDA0MjBBQTEgLyogVXNlck1lZGlhQ29udHJvbGxlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlGRDZFRDJDNzEzNkI4RTY2MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVz
c29yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENTM3MzU2MTM3QjY1M0IwMDAwOERDRSAvKiBE
eW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjY1OCw2ICsy
NjkyOSw3IEBACiAJCQkJMDc5NjlEQkQxN0QxNDE1MTAwN0ZGODQyIC8qIEpTUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg3MURFMjkwQTE1MkFD
ODAwQjEyQTY4IC8qIEhUTUxCb2R5RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOENG
RjdBODBBMTU2OTc4MDAwQTQyMzQgLyogSFRNTEJSRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkxRjY4RDRBRTE0QkI5RENBMDA3QjVDNjIgLyogTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgxMzY5RDMwOTczNzRGNjAwRDc0NDYzIC8qIEhUTUxC
dXR0b25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QUZEMDgyNDVFNTkwMDFF
OUFCQyAvKiBIVE1MQ2FudmFzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOERGM0ZE
MTA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTENvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yNjY2OSw4ICsyNjk0MSwxMCBAQAogCQkJCUE4RUE3Q0IxMEExOTJCOUMwMEE4RUY1RiAvKiBI
VE1MRGl2RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEVBNzlGNTBBMTkxNkRGMDBB
OEVGNUYgLyogSFRNTERMaXN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5
MTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTQ0Qzk5MTgyMEYzRDFFMEQwMDU4NjY3MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTk3N0IzODY2MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MRG9jdW1lbnRQYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlERTcwOTlFNjQ5MjAwNTZFNTgxIC8qIGh0
bWxlZGl0aW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE1MTZFOEI4MTM2RTA0REIwMDc2QzND
MCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5MjA4
MjQ1RTU5MDAxRTlBQkMgLyogSFRNTEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE1
N0E4RjAxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBMTdDODEyMjBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRG
YWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY5MDYsNiArMjcxODAsNyBAQAogCQkJCTcw
RjU0NkU4QjhCNUQ3REM1NEVFMTQ0RSAvKiBKU0JlZm9yZVVubG9hZEV2ZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUZERjA5REM4MTM5OUI2MjIwMDY4OEU1QiAvKiBKU0JpcXVhZEZpbHRlck5v
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ4QUE2M0MxNjk1MTQ4RTAwRDJFQTY4IC8qIEpT
QmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTQwMzc5RTEy
NEJFQTdGMDBBRjQwRTQgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MubW0gaW4gU291cmNl
cyAqLywKIAkJCQkyRTJEOTlDRDEwRTJCQkRBMDA0OTYzMzcgLyogSlNCbG9iLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg5MzFERTVCMTRDNDRDNDQwMDBEQzlEMiAvKiBKU0Jsb2JDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0OUUyODcxMDdENERCNDAwQjU3OTNGIC8qIEpTQ2FsbGJh
Y2tEYXRhLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY5MTQsNiArMjcxODksNyBAQAogCQkJCTY1
REYzMjNCMDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1BhdHRlcm4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDlFRUQxNDIxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUVFRDE0NDEwNTE5Njk0MDAwOTlGQUIgLyog
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RDQTgy
OTYxNjc5MTAwRjAwODc1NzE0IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDlFRUQxNEUxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUVEMTUwMTA1MTk3
MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTNGOUI3QTAwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMjY5NDgsNiArMjcyMjQsNyBAQAogCQkJCUJDNDZDMUVFMEMw
RERCREYwMDIwQ0ZDMyAvKiBKU0NTU1J1bGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThEMDVGQTcwQTIzQjMwMTAwNUU3MjAzIC8qIEpTQ1NTUnVsZUxpc3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMDcwMzYzRTUxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNl
Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ1MzkwQUUwRUFGRjRCNTAwMzY5NUM4IC8qIFN5c3Rl
bU1lbW9yeUlPUy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzkyMjYyRjEwMzIxMDg0MDA2RTdE
NUQgLyogSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDIwMTFC
NjBBMDAzMTMzMDA4MzAzRjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZGQjY5OENGMTgzNDAyQkIwMDE1OEEzMSAvKiBMaW5lSW5mby5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTI2OTc1LDYgKzI3MjUyLDcgQEAKIAkJCQk1OUE4NjAwNjExOURBRjdGMDBE
RUYxRUYgLyogSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTU5MEUxQjRCMTFFNEVGNzAwMDY5Rjc4NCAvKiBKU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNDM4QTIxNDBDMERDMDAwNUU0MzdFIC8qIEpT
RGljdGlvbmFyeS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0NEMzNjNGMTBGQUE3QkIzMDA5N0Y4
Q0MgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NjU5RERDODIwOUUxOThCQTAwMUJGM0M2IC8qIEpTRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDlDN0JBOEQxMDQyRjVCMTAwMDlENDQ3IC8qIEpTRG9jdW1lbnRDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUE0OTRFREUwQTEyM0Y0QzAwRkRBRkMxIC8qIEpTRG9jdW1lbnRG
cmFnbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2OTg2LDYgKzI3MjY0LDcgQEAKIAkJCQky
RTA4ODhENDExNDg4NDhBMDBBRjQyNjUgLyogSlNET01Gb3JtRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyRTA4ODhFNjExNDg4NEUyMDBBRjQyNjUgLyogSlNET01Gb3JtRGF0YUN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUMzNkNCRDBFQjA4MDYyMDA3NDEwQkMgLyogSlNET01H
bG9iYWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDdFRDM1QTIxNkQ2RENDOTAwMjI0
OEYzIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk2NURGMzFGNzA5RDFDQzYwMDAwQkUzMjUgLyogSlNET01JbXBsZW1lbnRhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBOUQyNDgwNjBENzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1lVHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOUQyNDgwODBENzU3RTdEMDBGREY5NTkgLyogSlNE
T01NaW1lVHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjcwMjgsNiArMjczMDcsNyBA
QAogCQkJCUJDNjA5MDIwMEU5MUI4RUMwMDBDNjhCNSAvKiBKU0V2ZW50VGFyZ2V0Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTMzMTRBQ0VCMTA4OTIwODYwMDBGMEU1NiAvKiBKU0V4Y2Vw
dGlvbkJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkVCRjBFNzYxMkE5ODY4ODAwREIxNzBB
IC8qIEpTRVhURHJhd0J1ZmZlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ1MzkwNDkwRUFG
RDYzNzAwMzY5NUM4IC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW0gaW4gU291cmNlcyAq
LywKIAkJCQk3NzI4Njk4MzE0RkQ5QURBMDBGNDg0REMgLyogSlNFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwMEYwMTQwRTBBMTg5NTAwRkQwNEUz
IC8qIEpTRmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRTNCQzBDQTExN0QzRTA4MDBCOTQw
OUEgLyogSlNGaWxlRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzE3Niw2ICsyNzQ1Niw3
IEBACiAJCQkJQ0RBOThFMDQxNjAzOUUxQTAwRkVBM0IxIC8qIEpTTWVkaWFLZXlzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTA3OTY5REMzMTdEMTQxNTEwMDdGRjg0MiAvKiBKU1JUQ1N0YXRzUmVz
cG9uc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBOThFMDYxNjAzOUUxRjAwRkVBM0IxIC8q
IEpTTWVkaWFLZXlTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3NDMwMEE1MEY0QjhC
Q0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlCQzNDMzlCNjBDMEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxpc3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRDNBOTRBNDYxMjJEQzQwRjAwQTM3QkJDIC8qIEpTTWVkaWFRdWVyeUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q2NDFFQkYxODE5QjM2MDAwRUU0QzQxIC8qIE1lZGlhVGlt
ZU1hYy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MjY0LDYgKzI3NTQ1LDcgQEAKIAkJCQk1MURD
RTgwMjBDQUM5RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUxRUFDNTY3MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1OURENkE2MTE5MDJBNjIw
MDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVudENhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUFBMTJERjQ5MTc0M0RGODMwMDREQUZERiAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU5REQ2QUExMTkwMkE3MTAwN0U5Njg0IC8qIEpTU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTRDNzYzODBD
RTkyMjVFMDA3RUYzQ0QgLyogSlNTUUxUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCNTlERDY5RTExOTAyQTQyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMjczMzEsNiArMjc2MTMsNyBAQAogCQkJCUIyRkEzRDc2MEFC
NzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0MzU4RTg3QzEzNjBBMkVFMDBFNDc0OEMgLyogSlNTVkdGRURyb3BTaGFkb3dF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDc4MEFCNzVBNkYwMDBFNUFDNCAv
KiBKU1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ0Qzk5MUEwMEYz
RDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDdB
MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZFRnVuY0FFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyRkEzRDdDMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZFRnVuY0JFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDdFMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZF
RnVuY0dFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjczNTQsNiArMjc2MzcsNyBAQAog
CQkJCUE4M0I3OTAzMENDQUZGMTUwMDBCMDgyNSAvKiBKU1NWR0ZvbnRGYWNlTmFtZUVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgzQjc4RkYwQ0NBRkYxNTAwMEIwODI1IC8qIEpTU1ZH
Rm9udEZhY2VTcmNFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4M0I3OEZEMENDQUZG
MTUwMDBCMDgyNSAvKiBKU1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlFNDUzOTA0RDBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjJGQTNEOTgwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHRm9yZWlnbk9iamVjdEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEOUEwQUI3NUE2RjAwMEU1QUM0IC8q
IEpTU1ZHR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3QjI4MjcwQ0VGMEMwNzAw
RDM5RDU0IC8qIEpTU1ZHR2x5cGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjczNjMs
NiArMjc2NDcsNyBAQAogCQkJCTg1MTc0RUMyQkNDQUYxN0VBRTNGNDZGOCAvKiBKU1NWR0dyYXBo
aWNzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NDg1MjI3QjExOTAxNjJDMDA2RURD
N0YgLyogSlNTVkdIS2VybkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEOUUw
QUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHSW1hZ2VFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUU0MjRBM0EwMTMzMERGMUUwMENGNkRDOSAvKiBUaWxlR3JpZFRpbGUubW0gaW4gU291cmNl
cyAqLywKIAkJCQlCMkZBM0RBMDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdMZW5ndGguY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMDc3NjY0RkMxODNFNkI1QzAwMTMzQjkyIC8qIEpTUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDhFNEZFNDYwRTJCRDQx
NDAwRjRDQUUwIC8qIEpTU1ZHTGVuZ3RoQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjcz
ODksNiArMjc2NzQsNyBAQAogCQkJCUIyRkEzREMwMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNSZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEQzIwQUI3
NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMkZBM0RDNDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljU21vb3RoUmVsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0QjY1QTVFMTMy
RkFEQjYwMDcwRTdCRSAvKiBUaWxlTGF5ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0RD
NjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0RDODBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1JlbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0RDQTBB
Qjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTI3NDMyLDYgKzI3NzE4LDcgQEAKIAkJCQlCMkZBM0UwRTBB
Qjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUUmVmRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwNzAzNjNENjE4MUExNDY1MDBDMDc0QTUgLyogTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNFMTAwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVFNw
YW5FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0NTM5MDQzMEVBRkQ2MzcwMDM2OTVD
OCAvKiBQbGF0Zm9ybVNjcmVlbklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRTEyMEFC
NzVBNkYwMDBFNUFDNCAvKiBKU1NWR1VuaXRUeXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MTI1Rjg1MTE4MjgzQTU2MDBEODRDRDkgLyogSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRTE0MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1Vz
ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzUzMSw2ICsyNzgxOCw3IEBACiAJCQkJ
QkNFRkUxRUEwRENBNUY2NDAwNzM5MjE5IC8qIEpTWFNMVFByb2Nlc3Nvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0VGRTFFNTBEQ0E1RjMzMDA3MzkyMTkgLyogSlNYU0xUUHJvY2Vzc29yQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1MDMxQjQzMEE0NEVGQzcwMEY5OTJFMCAvKiBL
ZXlib2FyZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUM1ODM2MUFBMTc0NDUyM0YwMDE3
MzUxMSAvKiBGb250U2VydmljZXNJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlBNTEzQjNEODEx
NEIxNjZBMDAxQzQyOUIgLyogS2V5RXZlbnRDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI2
NTU0MTNBMTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudElPUy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTUxMUVGMkMxMTdGMEZEMzUwMEU0RkExNiAvKiBKU0lEQkN1cnNvci5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI3NTkyLDEwICsyNzg4MCwxMiBAQAogCQkJCTUxMDE5NDQ0MTgzNkY3RTQwMDky
NTUyMyAvKiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGQUJFNzJGNDEwNTlDMUVCMDBEOTk5REQgLyogTWF0aE1MRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGQUJFNzJGRDEwNTlDMjExMDBEOTk5REQgLyogTWF0aE1MRWxlbWVudEZhY3Rv
cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkVBODA3QzgwRjcxNEEwMzAwNTI0MTk5IC8qIFNl
bGVjdGlvblJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkFCRTcyRjYxMDU5QzFFQjAwRDk5
OUREIC8qIE1hdGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkFCRTcyRjgxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTE1hdGhFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZBQkU3MkZFMTA1OUMyMTEwMEQ5OTlERCAvKiBNYXRoTUxOYW1lcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGQTY1NEE2QjExMDhBQkVEMDAyNjE1RTAgLyogTWF0aE1M
VGV4dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ1MzkwNDUwRUFGRDYzNzAwMzY5
NUM4IC8qIFNjcm9sbFZpZXdJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk0OUQ1REMyQjBGNDIz
QTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDlFOTExQzYwRUY4NkQ0NzAwOUQwQ0FGIC8qIE1hdHJpeFRyYW5zZm9ybU9wZXJh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTcyNTNBQTEzNTRCQkJDMDAzNjBGMkEgLyog
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzYzMSwxMSArMjc5
MjEsMTMgQEAKIAkJCQk5MzMwOURGOTA5OUU2NDkyMDA1NkU1ODEgLyogTWVyZ2VJZGVudGljYWxF
bGVtZW50c0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBREVDQ0YwRTc2QUQ4QjAw
NEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc1NzkzRTgz
MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NDQzRjA0MjcwRTc1QzhGQjAwN0U1NDA3IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVySU9TLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxQURFQ0MwMEU3NkFDRjEwMDRBMUE1RSAvKiBNZXNzYWdlUG9y
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhFNTI2RjEzNDZCRDE3MDBBRDlDMzEgLyogTWV0
ZXJTaGFkb3dFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RERDRDk0MTM4NDRGRDUw
MDA4Qjc5MyAvKiBNSU1FSGVhZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzcyQzRFMEM0
RUIzMDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDNzcyQzVFMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJRTQ1MzkwNDcwRUFGRDYzNzAwMzY5NUM4IC8qIFNvdW5kSU9TLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTJGMTA4NjUxNjJCNkRBNDAwOUFDODFFIC8qIE1peGVkQ29udGVu
dENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzZENzRBRTQwOUFBMjkwQTAwMEIwQTUy
IC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVC
M0RDNTEyNTFGMTJEMDAzRUYyNjkgLyogTW9udGhJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0yNzcyMyw2ICsyODAxNSw3IEBACiAJCQkJRTEyODRBRUExMDQ0N0RFRTAwRUFFQjUyIC8q
IFBhZ2VUcmFuc2l0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2NzMwQTMxODJE
OEZCQjAwM0ZBRjVDIC8qIElEQkN1cnNvckJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFFMUVDQzIwQzkxQzkwNDAwREMyNTVCIC8qIFBhZ2VVUkxSZWNvcmQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMzcyN0RGRDUxNDJBQUU0NTAwRDQ0OUNCIC8qIEZvbnRDYWNoZUlPUy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUZGRDVCOTdBMTM1Q0M5NzgwMEQ1RTkyQSAvKiBQYWdlVmlzaWJpbGl0
eVN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MEEyMTJCMDI2RjcwMEMxQTM1OSAv
KiBQYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMTkxMkIwMjY3NjAwQzFBMzU5
IC8qIFBhbm5lck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzc1MSw2ICsyODA0NCw3IEBA
CiAJCQkJNDk1ODc4MjIxMkE1N0RERjAwNzIzOEFDIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUNERUE3NjMwMTQ2MDhBNTMwMDhCMzFGMSAvKiBQbGF0Zm9ybUNs
b2NrQ0EuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBQThEMEExNEQ3MUIyRTAwNjFFQTYwIC8q
IFBsYXRmb3JtQ2xvY2tDTS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTQ0MkFGN0FBMTAyQ0RERUEw
MDhGRDREMyAvKiBRdWlja0xvb2subW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0FBNDg2RjE0QTA1
MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMubW0gaW4gU291cmNlcyAqLywK
IAkJCQlGNTQ0Rjc4ODE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDFCRjcwMEYwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc4MzksNiArMjgxMzMsNyBAQAog
CQkJCUJDRUE0ODc3MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkNFQTQ4NzkwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckxheWVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNTgwRDAwMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXll
ckJhY2tpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ1MzkwMUQwRUFGQ0FDQTAwMzY5NUM4
IC8qIE1JTUVUeXBlUmVnaXN0cnlJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjU4MENGRTBG
MTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUwRDEwRDk5MTU0NUY1NzYwMDk2RDI4OCAvKiBSZW5kZXJMYXllckZpbHRlckluZm8u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJM0MyNDRGRUJBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRl
ckxheWVyTW9kZWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzg5OCw2ICsyODE5Myw3
IEBACiAJCQkJQThERjRBRUEwOTgwQzQyQzAwNTI5ODFCIC8qIFJlbmRlclRhYmxlQ2VsbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOERGNEFFODA5ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFi
bGVDb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThERjRBRjAwOTgwQzQyQzAwNTI5ODFCIC8q
IFJlbmRlclRhYmxlUm93LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0QjY1QTVBMTMyRkFBRjkw
MDcwRTdCRSAvKiBUaWxlR3JpZC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4REY0QUVEMDk4MEM0
MkMwMDUyOTgxQiAvKiBSZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNFQTQ4OEIwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRleHQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQUI2N0QxQTgwOTdGM0FFMzAwRjkzOTJFIC8qIFJlbmRlclRleHRDb250cm9sLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjc5OTUsNiArMjgyOTEsNyBAQAogCQkJCTBGNjA1QUVDMTVGOTQ4
NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQUY2MkVFNzE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFGNjJFRTYxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0Q1NTk2OTExNDc1QjY3ODAwMUQw
QkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0MzOEJG
RTE2NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTMxQ0JEMEMxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlTm9k
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzFDQkQxMzE2MUE0NEY4MDBFNEM4NzQgLyogU2Ny
b2xsaW5nU3RhdGVOb2RlTWFjLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yODAzMyw2ICsyODMzMCw3
IEBACiAJCQkJQkM1RUI4QzMwRTgyMDMxQjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTZEMTY5NjIxMzQ2QjQ5QjAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ0NUE5NTMxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTI5MDM3MTY1MTZCQTExQkMwMEZFRkRGMCAvKiBDb250ZW50
RmlsdGVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ0NUE5NTQxNzVEM0ZCODAwQzIxRUM4
IC8qIFNoYXBlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDQ1QTk1NTE3NUQzRkI4MDBD
MjFFQzggLyogU2hhcGVJbnNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENDVBOTU2
MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZU91dHNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjgyMjMsNiArMjg1MjEsNyBAQAogCQkJCUNERTNBODU3MTdGNjAyMDQwMEM1QkUyMCAvKiBB
dWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlCMzBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI4
QzZBMjcwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjE3NzQ4MTEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJ
T1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlCNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODMzQzg1MjBBMkNGNTI4MDBENTc2NjQg
LyogU1ZHRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5QjkwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0VsZW1lbnRJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI4MzE1LDYgKzI4NjE0LDcgQEAKIAkJCQlCMjIyN0E1ODBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
UGF0aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQ3NkM5RUYxMURGNkE1ODAwNTU1
QjAyIC8qIFNWR1BhdGhQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBODAwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZF
MEQ4NEVCMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTg0NzZDOUU1MTFERjZBMEIwMDU1NUIwMiAvKiBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQ0RGMkIwMTgxODIwNTQwNzAwRjJCNDI0IC8qIE1vY2tUcmFja3Mu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDhGRjEwMjAxMjk1MEY1QTAwRjAwMjc2IC8qIFNWR1Bh
dGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg0MTcsNiAr
Mjg3MTcsNyBAQAogCQkJCTQ5ODc3MEYwMTI0MkM1MzUwMDIyMjZCQSAvKiBUZXh0dXJlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk3QkM4NEE0MTIzNzBEQzgwMDBDNjE2MSAvKiBUZXh0Vmlld1Nv
dXJjZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0U2NUQzMjBFQUQxMjExMDA3RTQ1
MzMgLyogVGhlbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTRDM0IxRkMwRjBFNDE3MDAwOTY5
M0Y2IC8qIFRpbGVDYWNoZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRTY1OUU5MEVBOTJGRkEw
MDdFNDUzMyAvKiBUaGVtZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3NkQ2Qzk0MTIyQjhB
M0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBCOTA1NjFFMEYyNTdFOTMwMDk1RkY2QSAvKiBUaHJlYWRhYmxlTG9hZGVyLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMjg1MDUsNiArMjg4MDYsNyBAQAogCQkJCTdFNjZFMjMzMTZENkVCNkMw
MEY3RTdGRiAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdFNjZFMjMzMTdFNkVCNkMwMEY3RTdGRiAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZS
VEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkUzRkFFOEUxNDczM0ZEQjAwRTQyMzA2IC8qIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGOTdBNjU4
MTU1REE4MUUwMEZBREQ0QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW0gaW4gU291cmNl
cyAqLywKIAkJCQk2RTRFOTFBRTEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0Y2RjFFRDEyN0Y3MEIxMDA1NUNCMDYgLyog
V2ViR0xDb250ZXh0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDFEM0NGODIxNEJEMEEz
MDAwRkU5OTcwIC8qIFdlYkdMQ29udGV4dEdyb3VwLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg2
MzAsNiArMjg5MzIsNyBAQAogCQkJCUUxRUMyOTlGMEJCMDRDNkIwMEVBMTg3QiAvKiBYUGF0aE5v
ZGVTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0ZDNzUwQThCOTJFQzAwRDlEMzdCIC8q
IFhQYXRoTlNSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUI3RkM3ODBBOEI5MkVD
MDBEOUQzN0IgLyogWFBhdGhQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDQ3NjUzMUIx
MzMxNzA5OTAwMDZCNzg5IC8qIFNTTEtleUdlbmVyYXRvcklPUy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQUI3RkM3QTBBOEI5MkVDMDBEOUQzN0IgLyogWFBhdGhQYXRoLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBQjdGQzdDMEE4QjkyRUMwMEQ5RDM3QiAvKiBYUGF0aFByZWRpY2F0ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQUI3RkM3RTBBOEI5MkVDMDBEOUQzN0IgLyogWFBhdGhSZXN1
bHQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db250ZW50RmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50RmlsdGVy
LmgKaW5kZXggOTNmMjA5ZGI2M2U5YTk2MGIyNTU2NGRiYzM2MzljZTk1ZjU0NjkwMC4uZDA1ZTJh
YTI4N2Y0YzJhNjM4ZDNhNzgzYjY4NmExYWUzZWEzY2RlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ29udGVudEZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0NvbnRlbnRGaWx0ZXIuaApAQCAtMzIsNiArMzIsMTAgQEAKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAorI2lmIFBMQVRGT1JNKElP
UykKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgorI2VuZGlmCisKICNpZiBQTEFURk9STShN
QUMpCiBPQkpDX0NMQVNTIFdlYkZpbHRlckV2YWx1YXRvcjsKICNlbmRpZgpAQCAtNTEsNiArNTUs
MTEgQEAgcHVibGljOgogICAgIGJvb2wgZGlkQmxvY2tEYXRhKCkgY29uc3Q7CiAgICAgY29uc3Qg
Y2hhciogZ2V0UmVwbGFjZW1lbnREYXRhKGludCYgbGVuZ3RoKSBjb25zdDsKICAgICAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNjaGVtZSgpOworICAgIHZvaWQg
cmVxdWVzdFVuYmxvY2tBbmREaXNwYXRjaElmU3VjY2Vzc2Z1bChGdW5jdGlvbjx2b2lkKCk+KTsK
KyNlbmRpZgorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENvbnRlbnRGaWx0ZXIoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRHJhZ0RhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgKaW5kZXgg
ZjM1MzU2Y2JkNWRhMjgwNGE4NjUyYTkwMmE5NTAxZjQ5MDUwMzFmMy4uNTM3OWI4NjcwNmM4MmM3
OTlmYzcwNDJmOTAwNGJlNjhhYzJmYTg1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRHJhZ0RhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5o
CkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAh
UExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTUsMTEgKzU1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIERhdGFPYmplY3RHdGs7CiB9CiB0eXBlZGVmIFdlYkNvcmU6OkRhdGFPYmplY3RH
dGsqIERyYWdEYXRhUmVmOwotI2VsaWYgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShCTEFDS0JF
UlJZKSB8fCBQTEFURk9STShOSVgpCisjZWxpZiBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEJM
QUNLQkVSUlkpIHx8IFBMQVRGT1JNKE5JWCkgfHwgUExBVEZPUk0oSU9TKQogdHlwZWRlZiB2b2lk
KiBEcmFnRGF0YVJlZjsKICNlbmRpZgogCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RnJhbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKaW5kZXggZGM5NzFi
MzZlN2FlZWUyNDI0YWJlMTNjMWE5NmY3NGMyZDdjOGUyZC4uNGExMGYxNmQzM2VkNWZjYzM1NDg5
M2VmZDliNmNlNzJjZDMwZTg1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RmlsZUNob29zZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2Vy
LmNwcApAQCAtNzUsNiArNzUsMjUgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykKICAgICBtX2NsaWVudC0+ZmlsZXNDaG9zZW4o
ZmlsZXMpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24g
aXMgYWxtb3N0IGlkZW50aWNhbCB0byBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoKS4gV2Ugc2hv
dWxkIG1lcmdlIHRoaXMgZnVuY3Rpb24KKy8vIHdpdGggRmlsZUNob29zZXI6OmNob29zZUZpbGVz
KCkgYW5kIGhlbmNlIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KK3ZvaWQgRmlsZUNo
b29zZXI6OmNob29zZU1lZGlhRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywg
Y29uc3QgU3RyaW5nJiBkaXNwbGF5U3RyaW5nLCBJY29uKiBpY29uKQoreworICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGluZWxlZ2FudC4gV2Ugc2hvdWxkIG5vdCBiZSBsb29raW5nIGF0IHNldHRpbmdz
IGhlcmUuCisgICAgaWYgKG1fc2V0dGluZ3Muc2VsZWN0ZWRGaWxlcyA9PSBmaWxlbmFtZXMpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiBmaWxlczsKKyAgICBmb3IgKGF1dG8gZmls
ZW5hbWUgOiBmaWxlbmFtZXMpCisgICAgICAgIGZpbGVzLmFwcGVuZChGaWxlQ2hvb3NlckZpbGVJ
bmZvKGZpbGVuYW1lKSk7CisgICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKGZpbGVzLCBkaXNwbGF5
U3RyaW5nLCBpY29uKTsKK30KKyNlbmRpZgorCiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxl
cyhjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mIGZpbGVzKQogewogICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGluZWxlZ2FudC4gV2Ugc2hvdWxkIG5vdCBiZSBsb29raW5nIGF0IHNldHRp
bmdzIGhlcmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuaAppbmRleCA2YzAyM2Uz
ZDZkZGQzZWRkOTA3MzFkMWMxYWE4OWNhOTczMTc4ODAwLi44ZDc1OWU2OTM3OGM2ZDA2NDZjMWVl
YzkxN2ZiYzJhNDRmYWYxMzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9G
aWxlQ2hvb3Nlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgK
QEAgLTM3LDYgKzM3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmlsZUNob29z
ZXI7CitjbGFzcyBJY29uOwogCiBzdHJ1Y3QgRmlsZUNob29zZXJGaWxlSW5mbyB7CiAgICAgRmls
ZUNob29zZXJGaWxlSW5mbyhjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUgPSBTdHJpbmcoKSkKQEAgLTcwLDYgKzcxLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5GaWxlQ2hvb3NlckNsaWVudCgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGZpbGVzQ2hvc2Vu
KGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiYpID0gMDsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgYWxtb3N0IGlkZW50aWNhbCB0byBG
aWxlQ2hvb3Nlcjo6ZmlsZXNDaG9zZW4oKS4gV2Ugc2hvdWxkIG1lcmdlIHRoaXMKKyAgICAvLyBm
dW5jdGlvbiB3aXRoIEZpbGVDaG9vc2VyOjpmaWxlc0Nob3NlbigpIGFuZCBoZW5jZSByZW1vdmUg
dGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCisgICAgdmlydHVhbCB2b2lkIGZpbGVzQ2hvc2VuKGNv
bnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiYsIGNvbnN0IFN0cmluZyYgZGlzcGxheVN0
cmluZywgSWNvbiopID0gMDsKKyNlbmRpZgogfTsKIAogY2xhc3MgRmlsZUNob29zZXIgOiBwdWJs
aWMgUmVmQ291bnRlZDxGaWxlQ2hvb3Nlcj4gewpAQCAtODEsNiArODcsMTEgQEAgcHVibGljOgog
CiAgICAgdm9pZCBjaG9vc2VGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAgICAgdm9pZCBjaG9v
c2VGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpOworI2lmIFBMQVRGT1JNKElPUykK
KyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIEZpbGVD
aG9vc2VyOjpjaG9vc2VGaWxlcygpLiBXZSBzaG91bGQgbWVyZ2UgdGhpcworICAgIC8vIGZ1bmN0
aW9uIHdpdGggRmlsZUNob29zZXI6OmNob29zZUZpbGVzKCkgYW5kIGhlbmNlIHJlbW92ZSB0aGUg
UExBVEZPUk0oSU9TKS1ndWFyZC4KKyAgICB2b2lkIGNob29zZU1lZGlhRmlsZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlTdHJpbmcsIEljb24qKTsK
KyNlbmRpZiAgICAKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkganVzdCBwYXNz
IGZpbGUgcGF0aHMgdGhhdCBjb3VsZCBiZSB2aXJ0dWFsIHBhdGhzIHdpdGggcHJvcGVyIGRpc3Bs
YXkgbmFtZXMgcmF0aGVyIHRoYW4gcGFzc2luZyBzdHJ1Y3RzLgogICAgIHZvaWQgY2hvb3NlRmls
ZXMoY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBmaWxlcyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCmluZGV4IDQwMmZmMTdhYTBhM2Q3NWM0ZTYxZDhjYmFh
MGE1Yzc0YjlkMTI1ZmYuLjRlMGQ5ZDY2Y2Q0YjhlN2E5MjhlNDY5YTFkMWUxNzBjYWFkNTBkYmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCkBAIC05Nyw2ICs5NywxMCBA
QCBTdHJpbmcgZW5jb2RlRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBpbnB1dFN0cmluZykKIAog
I2lmICFQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykKIAordm9pZCBzZXRNZXRhZGF0YVVS
TChTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworfQorCiBib29sIGNh
bkV4Y2x1ZGVGcm9tQmFja3VwKCkKIHsKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9GaWxlU3lzdGVtLmgKaW5kZXggOWE1YTM5ZjNlMmUwOTQyNTIxYTFmNmU2OTA0ODAwZGU1
MDM0Nzg1ZC4uMzRmZTBhNDMwZjdlNmEzMzNjMjNmZTMwMzVjZDk5ZTExMWY5NmFhZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaApAQCAtMTUxLDYgKzE1MSw4IEBAIFN0cmluZyBo
b21lRGlyZWN0b3J5UGF0aCgpOwogU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcm
KTsKIFN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYpOwogCit2b2lkIHNldE1ldGFk
YXRhVVJMKFN0cmluZyYgVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25zdCBT
dHJpbmcmIHBhdGgpOworCiBib29sIGNhbkV4Y2x1ZGVGcm9tQmFja3VwKCk7IC8vIFJldHVybnMg
dHJ1ZSBpZiBhbnkgZmlsZSBjYW4gZXZlciBiZSBleGNsdWRlZCBmcm9tIGJhY2t1cC4KIGJvb2wg
ZXhjbHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJik7IC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNj
ZXNzZnVsLgogCkBAIC0xODksMTAgKzE5MSw2IEBAIFN0cmluZyBlbmNvZGVGb3JGaWxlTmFtZShj
b25zdCBTdHJpbmcmKTsKIFJldGFpblB0cjxDRlVSTFJlZj4gcGF0aEFzVVJMKGNvbnN0IFN0cmlu
ZyYpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCi12b2lkIHNldE1ldGFkYXRhVVJMKFN0
cmluZyYgVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25zdCBTdHJpbmcmIHBh
dGgpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKE5JWCkKIFN0cmlu
ZyBmaWxlbmFtZVRvU3RyaW5nKGNvbnN0IGNoYXIqKTsKIFN0cmluZyBmaWxlbmFtZUZvckRpc3Bs
YXkoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9L
aWxsUmluZ05vbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNw
cAppbmRleCAzMTBhYTA4MGNiMjVhNzQ3YTYzZDhlMDY0NGNmNjA3MTI1YzQ1MDkxLi5jZDk0NmE0
ZTI0ZmZkNDI4OTk1ZDdlNTk4ZGQ0MTRlMTAxNDcwMTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0tpbGxSaW5nTm9uZS5jcHAKQEAgLTUwLDMgKzUwLDQgQEAgdm9pZCBLaWxsUmluZzo6c2V0
VG9ZYW5rZWRTdGF0ZSgpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmNwcAppbmRleCA1OTkwMTFiMjYxYjQ2
MDE2M2VkZDM1MDkxYTZhZjAxZWYwMGE5M2ExLi5iODIwN2Y5YzBjNDY3YmQyNjM4MGRlMmM3YTM5
YzkwMDdiM2FiODQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6
ZWRTdHJpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJp
bmdzLmNwcApAQCAtNzEsNiArNzEsNyBAQCBzdGF0aWMgU3RyaW5nIGZvcm1hdExvY2FsaXplZFN0
cmluZyhTdHJpbmcgZm9ybWF0LCAuLi4pCiAjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShDT05URVhU
X01FTlVTKQogc3RhdGljIFN0cmluZyB0cnVuY2F0ZWRTdHJpbmdGb3JMb29rdXBNZW51SXRlbShj
b25zdCBTdHJpbmcmIG9yaWdpbmFsKQogewogICAgIGlmIChvcmlnaW5hbC5pc0VtcHR5KCkpCkBA
IC04NCw2ICs4NSw3IEBAIHN0YXRpYyBTdHJpbmcgdHJ1bmNhdGVkU3RyaW5nRm9yTG9va3VwTWVu
dUl0ZW0oY29uc3QgU3RyaW5nJiBvcmlnaW5hbCkKICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYXJh
Y3RlcnMgPSBudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKHRyaW1tZWQsIG1heE51bWJl
ck9mR3JhcGhlbWVDbHVzdGVyc0luTG9va3VwTWVudUl0ZW0pOwogICAgIHJldHVybiBudW1iZXJP
ZkNoYXJhY3RlcnMgPT0gdHJpbW1lZC5sZW5ndGgoKSA/IHRyaW1tZWQgOiB0cmltbWVkLmxlZnQo
bnVtYmVyT2ZDaGFyYWN0ZXJzKSArIGVsbGlwc2lzOwogfQorI2VuZGlmCiAKIFN0cmluZyBpbnB1
dEVsZW1lbnRBbHRUZXh0KCkKIHsKQEAgLTc5Nyw2ICs3OTksMjYgQEAgU3RyaW5nIGh0bWxTZWxl
Y3RNdWx0aXBsZUl0ZW1zKHNpemVfdCBjb3VudCkKICAgICAgICAgcmV0dXJuIGZvcm1hdExvY2Fs
aXplZFN0cmluZyhXRUJfVUlfU1RSSU5HKCIlenUgSXRlbXMiLCAiUHJlc2VudCB0aGUgbnVtYmVy
IG9mIHNlbGVjdGVkIDxvcHRpb24+IGl0ZW1zIGluIGEgPHNlbGVjdCBtdWx0aXBsZT4gZWxlbWVu
dCAoaU9TIG9ubHkpIiksIGNvdW50KTsKICAgICB9CiB9CisKK1N0cmluZyBmaWxlQnV0dG9uQ2hv
b3NlTWVkaWFGaWxlTGFiZWwoKQoreworICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJDaG9vc2Ug
TWVkaWEgKFNpbmdsZSkiLCAiVGl0bGUgZm9yIGZpbGUgYnV0dG9uIHVzZWQgaW4gSFRNTCBmb3Jt
cyBmb3IgbWVkaWEgZmlsZXMiKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25DaG9vc2VNdWx0aXBs
ZU1lZGlhRmlsZXNMYWJlbCgpCit7CisgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkcoIkNob29zZSBN
ZWRpYSAoTXVsdGlwbGUpIiwgIlRpdGxlIGZvciBmaWxlIGJ1dHRvbiB1c2VkIGluIEhUTUw1IGZv
cm1zIGZvciBtdWx0aXBsZSBtZWRpYSBmaWxlcyIpOworfQorCitTdHJpbmcgZmlsZUJ1dHRvbk5v
TWVkaWFGaWxlU2VsZWN0ZWRMYWJlbCgpCit7CisgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkcoIm5v
IG1lZGlhIHNlbGVjdGVkIChzaW5nbGUpIiwgIlRleHQgdG8gZGlzcGxheSBpbiBmaWxlIGJ1dHRv
biB1c2VkIGluIEhUTUwgZm9ybXMgZm9yIG1lZGlhIGZpbGVzIHdoZW4gbm8gbWVkaWEgZmlsZSBp
cyBzZWxlY3RlZCIpOworfQorCitTdHJpbmcgZmlsZUJ1dHRvbk5vTWVkaWFGaWxlc1NlbGVjdGVk
TGFiZWwoKQoreworICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJubyBtZWRpYSBzZWxlY3RlZCAo
bXVsdGlwbGUpIiwgIlRleHQgdG8gZGlzcGxheSBpbiBmaWxlIGJ1dHRvbiB1c2VkIGluIEhUTUwg
Zm9ybXMgZm9yIG1lZGlhIGZpbGVzIHdoZW4gbm8gbWVkaWEgZmlsZXMgYXJlIHNlbGVjdGVkIGFu
ZCB0aGUgYnV0dG9uIGFsbG93cyBtdWx0aXBsZSBmaWxlcyB0byBiZSBzZWxlY3RlZCIpOworfQog
I2VuZGlmCiAKIFN0cmluZyBpbWFnZVRpdGxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0
IEludFNpemUmIHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2Nh
bGl6ZWRTdHJpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdz
LmgKaW5kZXggYTg3NTdkNGRmYzY4NjU5ZTg4NTU3Mjc2NGMzMmU3YWZkZjYxMWFhOC4uZTNmNzNj
YjBkMmMwMTY4YmJhZmE2MWMwZTc5ZjFhNGUzNzhiZjY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaApAQCAtMTQ1LDYgKzE0NSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKTsK
ICNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKIAorI2lmICFQTEFURk9STShJT1MpCiAg
ICAgU3RyaW5nIHNlYXJjaE1lbnVOb1JlY2VudFNlYXJjaGVzVGV4dCgpOwogICAgIFN0cmluZyBz
ZWFyY2hNZW51UmVjZW50U2VhcmNoZXNUZXh0KCk7CiAgICAgU3RyaW5nIHNlYXJjaE1lbnVDbGVh
clJlY2VudFNlYXJjaGVzVGV4dCgpOwpAQCAtMTcxLDYgKzE3Miw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBTdHJpbmcgQVhNZW51TGlzdFBvcHVwQWN0aW9uVmVyYigpOwogICAgIFN0cmlu
ZyBBWExpbmtBY3Rpb25WZXJiKCk7CiAgICAgU3RyaW5nIEFYTGlzdEl0ZW1BY3Rpb25WZXJiKCk7
CisjZW5kaWYKIAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1dFRUspCiAgICAgLy8gd2Vla0Zvcm1h
dEluTERNTCgpIHJldHVybnMgd2VlayBhbmQgeWVhciBmb3JtYXQgaW4gTERNTCwgVW5pY29kZQpA
QCAtMjA2LDYgKzIwOCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBQTEFURk9STShJ
T1MpCiAgICAgU3RyaW5nIGh0bWxTZWxlY3RNdWx0aXBsZUl0ZW1zKHNpemVfdCBudW0pOworICAg
IFN0cmluZyBmaWxlQnV0dG9uQ2hvb3NlTWVkaWFGaWxlTGFiZWwoKTsKKyAgICBTdHJpbmcgZmls
ZUJ1dHRvbkNob29zZU11bHRpcGxlTWVkaWFGaWxlc0xhYmVsKCk7CisgICAgU3RyaW5nIGZpbGVC
dXR0b25Ob01lZGlhRmlsZVNlbGVjdGVkTGFiZWwoKTsKKyAgICBTdHJpbmcgZmlsZUJ1dHRvbk5v
TWVkaWFGaWxlc1NlbGVjdGVkTGFiZWwoKTsKICNlbmRpZgogCiAgICAgU3RyaW5nIGltYWdlVGl0
bGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggMWJhYWIzMDNhMGUzZmVjNWMyZTI1YmU3MDQ1MjNjZWQz
YjVhYjQ0Ny4uNGVmMjJmNjMyNjc2NDY2OTBmZmQyZDQ1YjNjZjA1MTE1ODlhNjJhNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApAQCAtNTQsNiArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgTShMaXZlQ29ubmVjdCkgXAogICAgIE0oTG9hZGluZykgXAogICAgIE0oTWVkaWEp
IFwKKyAgICBNKE1lbW9yeVByZXNzdXJlKSBcCiAgICAgTShOZXR3b3JrKSBcCiAgICAgTShOb3RZ
ZXRJbXBsZW1lbnRlZCkgXAogICAgIE0oUGFnZUNhY2hlKSBcCkBAIC02MSw2ICs2Miw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBNKFBsdWdpbnMpIFwKICAgICBNKFBvcHVwQmxvY2tpbmcp
IFwKICAgICBNKFByb2dyZXNzKSBcCisgICAgTShSZW1vdGVJbnNwZWN0b3IpIFwKICAgICBNKFJl
c291cmNlTG9hZGluZykgXAogICAgIE0oU1FMRGF0YWJhc2UpIFwKICAgICBNKFNwZWxsaW5nQW5k
R3JhbW1hcikgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVS
ZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNw
cAppbmRleCA3NDY0ZTE5ZWQyNDViODE4ZDgyYWJhNGZhZDI1MjMwMjUyZDZjM2M0Li4wYmI1MDhi
ZGQ2MGNiYTZkMDE2NDg2NTg5YmE2YjllN2U5YTZmZTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcApAQCAtMzYsNyArMzYsMTEgQEAKIAogI2lmIFVT
RShDRykKICNpbmNsdWRlICJJbWFnZVNvdXJjZUNHLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNp
bmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNl
CisjaW5jbHVkZSA8SW1hZ2VJTy9DR0ltYWdlRGVzdGluYXRpb24uaD4KKyNlbmRpZgogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgogCkBAIC0yMjQsNiArMjI4LDM0IEBAIHN0YXRp
YyB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlcygpCiAgICAgc3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZXMtPnJlbW92ZSgiYXBwbGljYXRpb24vcGRmIik7CiAgICAgc3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZXMtPnJlbW92ZSgiYXBwbGljYXRpb24vcG9zdHNjcmlwdCIpOwogCisjaWYg
UExBVEZPUk0oSU9TKQorICAgIC8vIEFkZCBtYWxmb3JtZWQgaW1hZ2UgbWltZXR5cGUgZm9yIGNv
bXBhdGliaWxpdHkgd2l0aCBNYWlsIGFuZCB0byBoYW5kbGUgbWFsZm9ybWVkIG1pbWV0eXBlcyBm
cm9tIHRoZSBuZXQKKyAgICAvLyBUaGVzZSB3ZXJlIHJlbW92ZWQgZm9yIDxyZGFyOi8vcHJvYmxl
bS82NTY0NTM4PiBSZS1lbmFibGUgVVRJIGNvZGUgaW4gV2ViQ29yZSBub3cgdGhhdCBNb2JpbGVD
b3JlU2VydmljZXMgZXhpc3RzCisgICAgLy8gQnV0IE1haWwgcmVsaWVzIG9uIGF0IGxlYXN0IGlt
YWdlL3RpZiByZXBvcnRlZCBhcyBiZWluZyBzdXBwb3J0ZWQgKHNob3VsZCBiZSBpbWFnZS90aWZm
KS4KKyAgICAvLyBUaGlzIGNhbiBiZSByZW1vdmVkIHdoZW4gTWFpbCBhZGRyZXNzZXM6CisgICAg
Ly8gPHJkYXI6Ly9wcm9ibGVtLzc4Nzk1MTA+IE1haWwgc2hvdWxkIHVzZSBzdGFuZGFyZCBpbWFn
ZSBtaW1ldHlwZXMgCisgICAgLy8gYW5kIHdlIGZpeCBzbmlmZmluZyBzbyB0aGF0IGl0IGNvcnJl
Y3RzIGl0ZW1zIHN1Y2ggYXMgaW1hZ2UvanBnIC0+IGltYWdlL2pwZWcuCisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIG1hbGZvcm1lZE1JTUVUeXBlc1tdID0geworICAgICAgICAvLyBKUEVHIChpbWFn
ZS9qcGVnKQorICAgICAgICAiaW1hZ2UvanBnIiwgImltYWdlL2pwXyIsICJpbWFnZS9qcGVfIiwg
ImFwcGxpY2F0aW9uL2pwZyIsICJhcHBsaWNhdGlvbi94LWpwZyIsICJpbWFnZS9waXBlZyIsCisg
ICAgICAgICJpbWFnZS92bmQuc3dpdGZ2aWV3LWpwZWciLCAiaW1hZ2UveC14Yml0bWFwIiwKKyAg
ICAgICAgLy8gR0lGIChpbWFnZS9naWYpCisgICAgICAgICJpbWFnZS9naV8iLAorICAgICAgICAv
LyBQTkcgKGltYWdlL3BuZykKKyAgICAgICAgImFwcGxpY2F0aW9uL3BuZyIsICJhcHBsaWNhdGlv
bi94LXBuZyIsCisgICAgICAgIC8vIFRJRkYgKGltYWdlL3RpZmYpCisgICAgICAgICJpbWFnZS94
LXRpZiIsICJpbWFnZS90aWYiLCAiaW1hZ2UveC10aWZmIiwgImFwcGxpY2F0aW9uL3RpZiIsICJh
cHBsaWNhdGlvbi94LXRpZiIsICJhcHBsaWNhdGlvbi90aWZmIiwKKyAgICAgICAgImFwcGxpY2F0
aW9uL3gtdGlmZiIsCisgICAgICAgIC8vIEJNUCAoaW1hZ2UvYm1wLCBpbWFnZS94LWJpdG1hcCkK
KyAgICAgICAgImltYWdlL3gtYm1wIiwgImltYWdlL3gtd2luLWJpdG1hcCIsICJpbWFnZS94LXdp
bmRvd3MtYm1wIiwgImltYWdlL21zLWJtcCIsICJpbWFnZS94LW1zLWJtcCIsCisgICAgICAgICJh
cHBsaWNhdGlvbi9ibXAiLCAiYXBwbGljYXRpb24veC1ibXAiLCAiYXBwbGljYXRpb24veC13aW4t
Yml0bWFwIiwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xF
TkdUSChtYWxmb3JtZWRNSU1FVHlwZXMpOyArK2kpIHsKKyAgICAgICAgc3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZXMtPmFkZChtYWxmb3JtZWRNSU1FVHlwZXNbaV0pOworICAgICAgICBzdXBwb3J0ZWRJ
bWFnZVJlc291cmNlTUlNRVR5cGVzLT5hZGQobWFsZm9ybWVkTUlNRVR5cGVzW2ldKTsKKyAgICB9
CisjZW5kaWYKKwogI2Vsc2UKICAgICAvLyBhc3N1bWUgdGhhdCBhbGwgaW1wbGVtZW50YXRpb25z
IGF0IGxlYXN0IHN1cHBvcnQgdGhlIGZvbGxvd2luZyBzdGFuZGFyZAogICAgIC8vIGltYWdlIHR5
cGVzOgpAQCAtMzMxLDkgKzM2MywxMSBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplU3VwcG9ydGVk
Tm9uSW1hZ2VNaW1lVHlwZXMoKQogICAgICAgICAidGV4dC8iLAogICAgICAgICAiYXBwbGljYXRp
b24veG1sIiwKICAgICAgICAgImFwcGxpY2F0aW9uL3hodG1sK3htbCIsCisjaWYgIVBMQVRGT1JN
KElPUykKICAgICAgICAgImFwcGxpY2F0aW9uL3ZuZC53YXAueGh0bWwreG1sIiwKICAgICAgICAg
ImFwcGxpY2F0aW9uL3Jzcyt4bWwiLAogICAgICAgICAiYXBwbGljYXRpb24vYXRvbSt4bWwiLAor
I2VuZGlmCiAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIiwKICNpZiBFTkFCTEUoU1ZHKQogICAg
ICAgICAiaW1hZ2Uvc3ZnK3htbCIsCkBAIC00NDAsNyArNDc0LDExIEBAIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVVbnN1cHBvcnRlZFRleHRNSU1FVHlwZXMoKQogICAgICAgICAidGV4dC94LXFpZiIs
CiAgICAgICAgICJ0ZXh0L3gtY3N2IiwKICAgICAgICAgInRleHQveC12Y2YiLAorI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgICAgICJ0ZXh0L3J0ZiIsCisjZWxzZQorICAgICAgICAidGV4dC92bmQu
c3VuLmoybWUuYXBwLWRlc2NyaXB0b3IiLAorI2VuZGlmCiAgICAgfTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgodHlwZXMpOyArK2kpCiAgICAgICB1bnN1cHBv
cnRlZFRleHRNSU1FVHlwZXMtPmFkZCh0eXBlc1tpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcAppbmRleCA1ZThlN2NjM2ZjMjEwZjY2
MGJlMGQ2YmExNzRiNTg4MDc0ZWRkOTJiLi42MmVlMWFkNTZhMTkzZTMxMDRhNjg0NjgzNDQzZDg5
MzdkYjUxNjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVz
c3VyZUhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNz
dXJlSGFuZGxlci5jcHAKQEAgLTQwLDYgKzQwLDE0IEBAIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6
TWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkKICAgICA6IG1faW5zdGFsbGVkKGZhbHNlKQogICAgICwg
bV9sYXN0UmVzcG9uZFRpbWUoMCkKICAgICAsIG1fbG93TWVtb3J5SGFuZGxlcihyZWxlYXNlTWVt
b3J5KQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogQ2FuIHdlIHNoYXJlIG1vcmUg
b2YgdGhpcyB3aXRoIE9wZW5Tb3VyY2U/CisgICAgLCBtX3JlY2VpdmVkTWVtb3J5UHJlc3N1cmUo
MCkKKyAgICAsIG1fbWVtb3J5UHJlc3N1cmVSZWFzb24oTWVtb3J5UHJlc3N1cmVSZWFzb25Ob25l
KQorICAgICwgbV9jbGVhclByZXNzdXJlT25NZW1vcnlSZWxlYXNlKHRydWUpCisgICAgLCBtX3Jl
bGVhc2VNZW1vcnlCbG9jaygwKQorICAgICwgbV9vYnNlcnZlcigwKQorI2VuZGlmCiB7CiB9CiAK
QEAgLTQ5LDcgKzU3LDkgQEAgdm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6Omluc3RhbGwoKSB7
IH0KIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjp1bmluc3RhbGwoKSB7IH0KIHZvaWQgTWVt
b3J5UHJlc3N1cmVIYW5kbGVyOjpob2xkT2ZmKHVuc2lnbmVkKSB7IH0KIHZvaWQgTWVtb3J5UHJl
c3N1cmVIYW5kbGVyOjpyZXNwb25kVG9NZW1vcnlQcmVzc3VyZSgpIHsgfQorI2lmICFQTEFURk9S
TShJT1MpCiB2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6cmVsZWFzZU1lbW9yeShib29sKSB7
IH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaAppbmRleCA5NTBhZTg1MmRmZTA5
MDhlYjM0Mzg5Y2ZjZmI2YjQyNmI5NGM3OTRmLi5lYmZiODRjYTEwYjdmZmUzYzk5OWQzYmUxNTU0
MTMxYWI2ODNmMDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVz
c3VyZUhhbmRsZXIuaApAQCAtMjksOCArMjksMjAgQEAKICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorI2lmIFBMQVRGT1JNKElPUykKK2VudW0gTWVtb3J5UHJlc3N1cmVSZWFzb24geworICAgIE1l
bW9yeVByZXNzdXJlUmVhc29uTm9uZSA9IDAgPDwgMCwKKyAgICBNZW1vcnlQcmVzc3VyZVJlYXNv
blZNUHJlc3N1cmUgPSAxIDw8IDAsCisgICAgTWVtb3J5UHJlc3N1cmVSZWFzb25WTVN0YXR1cyA9
IDEgPDwgMSwKK307CisjZW5kaWYKKwogdHlwZWRlZiB2b2lkICgqTG93TWVtb3J5SGFuZGxlciko
Ym9vbCBjcml0aWNhbCk7CiAKIGNsYXNzIE1lbW9yeVByZXNzdXJlSGFuZGxlciB7CkBAIC00Niw2
ICs1OCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fbG93TWVtb3J5SGFuZGxlciA9IGhhbmRsZXI7
CiAgICAgfQogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBDYW4gd2Ugc2hhcmUg
bW9yZSBvZiB0aGlzIHdpdGggT3BlblNvdXJjZT8KKyAgICB2b2lkIGluc3RhbGxNZW1vcnlSZWxl
YXNlQmxvY2sodm9pZCAoXnJlbGVhc2VNZW1vcnlCbG9jaykoKSwgYm9vbCBjbGVhclByZXNzdXJl
T25NZW1vcnlSZWxlYXNlID0gdHJ1ZSk7CisgICAgdm9pZCBzZXRSZWNlaXZlZE1lbW9yeVByZXNz
dXJlKE1lbW9yeVByZXNzdXJlUmVhc29uKTsKKyAgICBib29sIGhhc1JlY2VpdmVkTWVtb3J5UHJl
c3N1cmUoKTsKKyAgICB2b2lkIGNsZWFyTWVtb3J5UHJlc3N1cmUoKTsKKyAgICBib29sIHNob3Vs
ZFdhaXRGb3JNZW1vcnlDbGVhck1lc3NhZ2UoKTsKKyAgICB2b2lkIHJlc3BvbmRUb01lbW9yeVBy
ZXNzdXJlSWZOZWVkZWQoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHZvaWQgdW5pbnN0YWxs
KCk7CiAKQEAgLTYwLDYgKzgyLDE1IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2luc3RhbGxlZDsK
ICAgICB0aW1lX3QgbV9sYXN0UmVzcG9uZFRpbWU7CiAgICAgTG93TWVtb3J5SGFuZGxlciBtX2xv
d01lbW9yeUhhbmRsZXI7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgdWludDMyX3QgbV9yZWNl
aXZlZE1lbW9yeVByZXNzdXJlOworICAgIHVpbnQzMl90IG1fbWVtb3J5UHJlc3N1cmVSZWFzb247
CisgICAgYm9vbCBtX2NsZWFyUHJlc3N1cmVPbk1lbW9yeVJlbGVhc2U7CisgICAgdm9pZCAoXm1f
cmVsZWFzZU1lbW9yeUJsb2NrKSgpOworICAgIENGUnVuTG9vcE9ic2VydmVyUmVmIG1fb2JzZXJ2
ZXI7CisgICAgTXV0ZXggbV9vYnNlcnZlck11dGV4OworI2VuZGlmCiB9OwogIAogLy8gRnVuY3Rp
b24gdG8gb2J0YWluIHRoZSBnbG9iYWwgbWVtb3J5IHByZXNzdXJlIG9iamVjdC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKaW5kZXggNTliYTI5
YjM5ZWEwOGQwY2UyMWExYjYwNDlkZjA4ZDBhOWNmMDVkYy4uZjczMDM3ZGM2YzE4MjYwZTJhMTJi
NjY3N2E3M2JlZjQxMzY2YzIyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1LZXlib2FyZEV2ZW50LmgKQEAgLTM2LDYgKzM2LDE0IEBACiBPQkpDX0NMQVNTIE5TRXZl
bnQ7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpZmRlZiBfX09CSkNfXworQGNsYXNz
IFdlYkV2ZW50OworI2Vsc2UKK2NsYXNzIFdlYkV2ZW50OworI2VuZGlmCisjZW5kaWYKKwogI2lm
IFBMQVRGT1JNKEdUSykKIHR5cGVkZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsK
ICNpbmNsdWRlICJDb21wb3NpdGlvblJlc3VsdHMuaCIKQEAgLTEyNyw3ICsxMzUsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCisjaWYgIVBMQVRG
T1JNKElPUykKICAgICAgICAgTlNFdmVudCogbWFjRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX21h
Y0V2ZW50LmdldCgpOyB9CisjZWxzZQorICAgICAgICBXZWJFdmVudCAqZXZlbnQoKSBjb25zdCB7
IHJldHVybiBtX0V2ZW50LmdldCgpOyB9CisjZW5kaWYKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
V0lOKQpAQCAtMTcwLDcgKzE4MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBSZXRhaW5QdHI8
TlNFdmVudD4gbV9tYWNFdmVudDsKKyNlbHNlCisgICAgICAgIFJldGFpblB0cjxXZWJFdmVudD4g
bV9FdmVudDsKKyNlbmRpZgogI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKQogICAgICAgICBHZGtF
dmVudEtleSogbV9nZGtFdmVudEtleTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtTW91c2VFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1Nb3VzZUV2ZW50LmgKaW5kZXggM2E0MjUzMzY1MGU2MDQwOTljZGEwMTc3ZmIxNzdiOWI4ZWI4
NjNmMy4uZDY0ZGQyMzA3MjM1MDg4NjA1ODY3OTlkODBhZWZjYmQ0ZDFmN2JiMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgKQEAgLTU3LDcgKzU3LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX2J1dHRvbihOb0J1dHRvbikK
ICAgICAgICAgICAgICwgbV9jbGlja0NvdW50KDApCiAgICAgICAgICAgICAsIG1fbW9kaWZpZXJG
bGFncygwKQotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9S
TShJT1MpCiAgICAgICAgICAgICAsIG1fZXZlbnROdW1iZXIoMCkKICNlbGlmIFBMQVRGT1JNKFdJ
TikKICAgICAgICAgICAgICwgbV9kaWRBY3RpdmF0ZVdlYlZpZXcoZmFsc2UpCkBAIC03Myw3ICs3
Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9idXR0b24oYnV0dG9u
KQogICAgICAgICAgICAgLCBtX2NsaWNrQ291bnQoY2xpY2tDb3VudCkKICAgICAgICAgICAgICwg
bV9tb2RpZmllckZsYWdzKDApCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykg
JiYgIVBMQVRGT1JNKElPUykKICAgICAgICAgICAgICwgbV9ldmVudE51bWJlcigwKQogI2VsaWYg
UExBVEZPUk0oV0lOKQogICAgICAgICAgICAgLCBtX2RpZEFjdGl2YXRlV2ViVmlldyhmYWxzZSkK
QEAgLTEwNSw3ICsxMDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsYXRmb3Jt
TW91c2VFdmVudChjb25zdCBFdmFzX0V2ZW50X01vdXNlX01vdmUqLCBJbnRQb2ludCk7CiAjZW5k
aWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJ
T1MpCiAgICAgICAgIGludCBldmVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnROdW1i
ZXI7IH0KICNlbmRpZgogCkBAIC0xMjksNyArMTI5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBpbnQgbV9jbGlja0NvdW50OwogICAgICAgICB1bnNpZ25lZCBtX21vZGlmaWVyRmxh
Z3M7CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0o
SU9TKQogICAgICAgICBpbnQgbV9ldmVudE51bWJlcjsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAg
ICAgICAgYm9vbCBtX2RpZEFjdGl2YXRlV2ViVmlldzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
bGF0Zm9ybVNjcmVlbi5oCmluZGV4IDkzMzZjN2Y2NDVhZjBmYTk5MWY0YjUzOGY2ZTQ0NTk2NTY1
ZDUzOGYuLmEyNGVkZDc5MWQ5Mzk3YmFiZWY4NjIzZTMwMzkxNzk4M2ViZTUwMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaApAQCAtMjgsNyArMjgsNyBAQAogCiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JN
KE1BQykgJiYgIVBMQVRGT1JNKElPUykKIE9CSkNfQ0xBU1MgTlNTY3JlZW47CiBPQkpDX0NMQVNT
IE5TV2luZG93OwogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZ
UEVTCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBGbG9hdFJlY3Qg
c2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqKTsKICAgICB2b2lkIHNjcmVlbkNvbG9yUHJvZmls
ZShDb2xvclByb2ZpbGUmKTsKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMp
ICYmICFQTEFURk9STShJT1MpCiAgICAgTlNTY3JlZW4gKnNjcmVlbkZvcldpbmRvdyhOU1dpbmRv
dyAqKTsKIAogICAgIEZsb2F0UmVjdCB0b1VzZXJTcGFjZShjb25zdCBOU1JlY3QmLCBOU1dpbmRv
dyAqZGVzdGluYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRp
bWVBcHBsaWNhdGlvbkNoZWNrcy5jcHAKaW5kZXggZTk0MDBhMDljMjg2YTQ0NDBjMzI2NTllNDll
MzBlNTBjZDllNDRkZi4uMjZlNDliZGJiMzkyZTZkMTQ5YWM3Nzc1NzJhOTI2NDcwNmMyZTllYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hl
Y2tzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25D
aGVja3MuY3BwCkBAIC0zNyw3ICszNyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIHN0
YXRpYyBib29sIG1haW5CdW5kbGVJc0VxdWFsVG8oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlm
aWVyU3RyaW5nKQogewotI2lmIFVTRShDRikKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNp
ZGVyIG1lcmdpbmcgdGhpcyBmaWxlIHdpdGggUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLm1t
LgorICAgIC8vIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKyNp
ZiBVU0UoQ0YpICYmICFQTEFURk9STShJT1MpCiAgICAgQ0ZCdW5kbGVSZWYgbWFpbkJ1bmRsZSA9
IENGQnVuZGxlR2V0TWFpbkJ1bmRsZSgpOwogICAgIGlmICghbWFpbkJ1bmRsZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGlt
ZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1l
QXBwbGljYXRpb25DaGVja3NJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YjM3OGJhYWRkZDBiNTE1YTg4NmNh
ZjYzMWM5YmUzMjZjNGZkNmZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPU19oCisjZGVmaW5lIFJ1bnRp
bWVBcHBsaWNhdGlvbkNoZWNrc0lPU19oCisKKy8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIg
bWVyZ2luZyB0aGlzIGZpbGUgd2l0aCBSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaC4KK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworYm9vbCBhcHBsaWNhdGlvbklzTW9iaWxlTWFpbCgpOworYm9vbCBh
cHBsaWNhdGlvbklzTW9iaWxlU2FmYXJpKCk7Citib29sIGFwcGxpY2F0aW9uSXNEdW1wUmVuZGVy
VHJlZSgpOworYm9vbCBhcHBsaWNhdGlvbklzTW9iaWxlU3RvcmUoKTsKK2Jvb2wgYXBwbGljYXRp
b25Jc1dlYkFwcCgpOworYm9vbCBhcHBsaWNhdGlvbklzT2tDdXBpZCgpOworYm9vbCBhcHBsaWNh
dGlvbklzRmFjZWJvb2soKTsKK2Jvb2wgYXBwbGljYXRpb25Jc0VwaWN1cmlvdXMoKTsKK2Jvb2wg
YXBwbGljYXRpb25Jc0RhaWppc2VuRGljdGlvbmFyeSgpOworYm9vbCBhcHBsaWNhdGlvbklzTkFT
QUhEKCk7Citib29sIGFwcGxpY2F0aW9uSXNNQVNIKCk7Citib29sIGFwcGxpY2F0aW9uSXNUaGVF
Y29ub21pc3RPbklQaG9uZSgpOworYm9vbCBhcHBsaWNhdGlvbklzV2ViUHJvY2VzcygpOworYm9v
bCBhcHBsaWNhdGlvbklzSUJvb2tzT25JT1MoKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45ZjQ0MjAzMGMyMzU5YjNmZDFjZWQxMTVmNTgwYzgyZWUzNmU2MGMwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hl
Y2tzSU9TLm1tCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgiCisKKy8vIEZJWE1FOiBXZSBz
aG91bGQgY29uc2lkZXIgbWVyZ2luZyB0aGlzIGZpbGUgd2l0aCBSdW50aW1lQXBwbGljYXRpb25D
aGVja3MuY3BwLgorI2lmIFBMQVRGT1JNKElPUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIGFwcGxpY2F0aW9uSXNNb2JpbGVNYWlsKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc01vYmls
ZU1haWwgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFs
VG9TdHJpbmc6QCJjb20uYXBwbGUubW9iaWxlbWFpbCJdOworICAgIHJldHVybiBpc01vYmlsZU1h
aWw7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25Jc01vYmlsZVNhZmFyaSgpCit7CisgICAgc3RhdGlj
IGJvb2wgaXNNb2JpbGVTYWZhcmkgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVu
dGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uYXBwbGUubW9iaWxlc2FmYXJpIl07CisgICAg
cmV0dXJuIGlzTW9iaWxlU2FmYXJpOworfQorCitib29sIGFwcGxpY2F0aW9uSXNEdW1wUmVuZGVy
VHJlZSgpCit7CisgICAgc3RhdGljIGJvb2wgaXNEdW1wUmVuZGVyVHJlZSA9IFtbW05TQnVuZGxl
IG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5hcHBs
ZS5EdW1wUmVuZGVyVHJlZSJdOworICAgIHJldHVybiBpc0R1bXBSZW5kZXJUcmVlOworfQorCiti
b29sIGFwcGxpY2F0aW9uSXNNb2JpbGVTdG9yZSgpCit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNNb2JpbGVTdG9yZSA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJd
IGlzRXF1YWxUb1N0cmluZzpAImNvbS5hcHBsZS5Nb2JpbGVTdG9yZSJdOworICAgIHJldHVybiBp
c01vYmlsZVN0b3JlOworfQorCitib29sIGFwcGxpY2F0aW9uSXNXZWJBcHAoKQoreworICAgIHN0
YXRpYyBib29sIGlzV2ViQXBwID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRp
Zmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLndlYmFwcCJdOworICAgIHJldHVybiBp
c1dlYkFwcDsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzT2tDdXBpZCgpCit7CisgICAgc3RhdGlj
IGJvb2wgaXNPa0N1cGlkID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmll
cl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLm9rY3VwaWQuYXBwIl07CisgICAgcmV0dXJuIGlzT2tD
dXBpZDsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzRmFjZWJvb2soKQoreworICAgIHN0YXRpYyBi
b29sIGlzRmFjZWJvb2sgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVy
XSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uZmFjZWJvb2suRmFjZWJvb2siXTsKKyAgICByZXR1cm4g
aXNGYWNlYm9vazsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzRXBpY3VyaW91cygpCit7CisgICAg
c3RhdGljIGJvb2wgaXNFcGljdXJpb3VzID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxl
SWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmNvbmRlbmV0LkVwaWN1cmlvdXMiXTsK
KyAgICByZXR1cm4gaXNFcGljdXJpb3VzOworfQorCitib29sIGFwcGxpY2F0aW9uSXNEYWlqaXNl
bkRpY3Rpb25hcnkoKQoreworICAgIHN0YXRpYyBib29sIGlzRGFpamlzZW5EaWN0aW9uYXJ5ID0g
W1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5n
OkAianAuY28uc2hvZ2FrdWthbi5kYWlqaXNlbjIwMDlpIl07CisgICAgcmV0dXJuIGlzRGFpamlz
ZW5EaWN0aW9uYXJ5OworfQorCitib29sIGFwcGxpY2F0aW9uSXNOQVNBSEQoKQoreworICAgIHN0
YXRpYyBib29sIGlzTkFTQUhEID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRp
Zmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiZ292Lm5hc2EuTkFTQUhEIl07CisgICAgcmV0dXJuIGlz
TkFTQUhEOworfQorCitib29sIGFwcGxpY2F0aW9uSXNNQVNIKCkKK3sKKyAgICBzdGF0aWMgYm9v
bCBpc01BU0ggPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0Vx
dWFsVG9TdHJpbmc6QCJjb20ubWFnbmF0ZWludGVyYWN0aXZlLm1hc2hnYW1lIl0KKyAgICAgICAg
fHwgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3Ry
aW5nOkAiY29tLm1hZ25hdGVpbnRlcmFjdGl2ZS5tYXNobGl0ZWdhbWUiXQorICAgICAgICB8fCBb
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6
QCJjb20ubWFnbmF0ZWludGVyYWN0aXZlLm1hc2hjaHJpc3RtYXMiXQorICAgICAgICB8fCBbW1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJj
b20ubWFnbmF0ZWludGVyYWN0aXZlLm1hc2hoYWxsb3dlZW4iXQorICAgICAgICB8fCBbW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20u
bWFnbmF0ZWludGVyYWN0aXZlLm1hc2h2YWxlbnRpbmVzIl07CisgICAgcmV0dXJuIGlzTUFTSDsK
K30KKworYm9vbCBhcHBsaWNhdGlvbklzVGhlRWNvbm9taXN0T25JUGhvbmUoKQoreworICAgIHN0
YXRpYyBib29sIGlzVGhlRWNvbm9taXN0T25JUGhvbmUgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxl
XSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uZWNvbm9taXN0LmlwaG9u
ZSJdOworICAgIHJldHVybiBpc1RoZUVjb25vbWlzdE9uSVBob25lOworfQorCisvLyBGSVhNRTog
dGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHdoZW4gdGhlIFdlYlByb2Nlc3MgaXMgY2hhbmdlZCB0
byBhbiBYUEMgc2VydmljZS4KK2Jvb2wgYXBwbGljYXRpb25Jc1dlYlByb2Nlc3MoKQoreworICAg
IHN0YXRpYyBib29sIGlzV2ViUHJvY2VzcyA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRs
ZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVu
dCJdIHx8IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxU
b1N0cmluZzpAImNvbS5hcHBsZS5XZWJQcm9jZXNzIl07CisgICAgcmV0dXJuIGlzV2ViUHJvY2Vz
czsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzSUJvb2tzT25JT1MoKQoreworICAgIHN0YXRpYyBi
b29sIGlzSUJvb2tzT25JT1MgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlm
aWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uYXBwbGUuaUJvb2tzIl07CisgICAgcmV0dXJuIGlz
SUJvb2tzT25JT1M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApp
bmRleCA3ODdmYjEyODQzNWRiNjQ3MDQ5ZmIzMWI4ZTU3MGY2ZjA4YTk3N2VkLi5mOGRiMjUwYzAx
ODZmNjQwY2Y2MzIyYmZmZjQ0MzljMjgzOTA0ZWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC0zOSw3ICszOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotI2lmICFFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyNpZiAhRU5BQkxFKFNNT09U
SF9TQ1JPTExJTkcpICYmICFQTEFURk9STShJT1MpCiBQYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9y
PiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkK
IHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVh
KSk7CkBAIC0xMjMsNiArMTIzLDEzIEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVs
RXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQogICAgIHJldHVybiBoYW5kbGVkOwog
fQogCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK2Jvb2wgU2Nyb2xsQW5pbWF0b3I6OmhhbmRs
ZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisjZW5kaWYKKwogdm9pZCBTY3JvbGxBbmltYXRvcjo6c2V0Q3VycmVudFBvc2l0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQogewogICAgIG1fY3VycmVudFBvc1ggPSBwb3Np
dGlvbi54KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAppbmRleCAy
MGU5YTU2ZGQyNGNiYjMyZDM4Njg1MTM2ZTFiZDdlNWEzYjQ3N2MxLi5mMGRjOTg0NjM4ZGU4N2U0
OTk2M2U4N2JmOTA1ZTc5MzMxZDJjYmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgKQEAgLTQwLDYgKzQwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRmxvYXRQb2ludDsKK2NsYXNzIFBsYXRmb3JtVG91Y2hFdmVudDsKIGNsYXNzIFNjcm9sbGFi
bGVBcmVhOwogY2xhc3MgU2Nyb2xsYmFyOwogCkBAIC02Miw2ICs2MywxMCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmKTsKIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdmlydHVhbCBib29sIGhhbmRs
ZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50Jik7CisjZW5kaWYKKwogI2lmIFBM
QVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudFBoYXNlKFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlKSB7IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bFR5cGVzLmgKaW5kZXggZjYzMGRhZTI2NTgzYmMwOTI1MDJhYjc4M2MyMzljY2VjNmQ0ZGYyZC4u
OTY0ODZhOWJkMmQ1MDQ3OGUwNzMwNmQ3NTk0NWY1Y2VkZWM5YWNhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxUeXBlcy5oCkBAIC0yNiw2ICsyNiw5IEBACiAjaWZuZGVmIFNjcm9sbFR5
cGVzX2gKICNkZWZpbmUgU2Nyb2xsVHlwZXNfaAogCisvLyBXVEZfUExBVEZPUk1fSU9TCisjaWZk
ZWYgX19jcGx1c3BsdXMKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgZW51bSBTY3JvbGxE
aXJlY3Rpb24gewpAQCAtMTc4LDQgKzE4MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9
OwogfQogCisjZW5kaWYgLy8gX19jcGx1c3BsdXMKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuY3BwCmluZGV4IGZmMjJjNGQwZTk2NTRiMWJkYjNlMTQ2N2Q0ZGM5NzQ4
ODIwNzI5ZDkuLjliMzNjMzFkYWYxNzZkMjVhNDcxYjJlNDdlNzI0YmY0NTdmMzI3M2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCkBAIC0yNDEsOCArMjQxLDEwIEBAIElu
dFNpemUgU2Nyb2xsVmlldzo6dW5zY2FsZWRWaXNpYmxlQ29udGVudFNpemUoVmlzaWJsZUNvbnRl
bnRSZWN0SW5jbHVkZXNTY3JvbGxiCiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAg
IHJldHVybiBwbGF0Zm9ybVZpc2libGVDb250ZW50U2l6ZShzY3JvbGxiYXJJbmNsdXNpb24gPT0g
SW5jbHVkZVNjcm9sbGJhcnMpOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoIW1fZml4
ZWRWaXNpYmxlQ29udGVudFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9maXhlZFZp
c2libGVDb250ZW50UmVjdC5zaXplKCk7CisjZW5kaWYKIAogICAgIGludCB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoID0gMDsKICAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IDA7CkBA
IC0yNjQsOCArMjY2LDEwIEBAIEludFJlY3QgU2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0
KFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY29sCiAgICAgaWYgKHBsYXRm
b3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVZpc2libGVDb250ZW50UmVjdChz
Y29sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycyk7CiAKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgIGlmICghbV9maXhlZFZpc2libGVDb250ZW50UmVjdC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBtX2ZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0OworI2VuZGlmCiAKICAgICBGbG9h
dFNpemUgdmlzaWJsZUNvbnRlbnRTaXplID0gdW5zY2FsZWRWaXNpYmxlQ29udGVudFNpemUoc2Nv
bGxiYXJJbmNsdXNpb24pOwogICAgIHZpc2libGVDb250ZW50U2l6ZS5zY2FsZSgxIC8gdmlzaWJs
ZUNvbnRlbnRTY2FsZUZhY3RvcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaApp
bmRleCAyMGM2OWNlZWVhNmUwNTNiNDc2MDcxMDNiZjc0YWU5MTcxODg5MzA1Li5lNTI4NWY0ZmRi
ZjQzOWQwZDg3MzAyYTE4NzkxZGVkNjk2YjJlNzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsVmlldy5oCkBAIC0zNSw2ICszNSwyNCBAQAogCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
IAorI2lmIFBMQVRGT1JNKElPUykKKyNpZmRlZiBfX09CSkNfXworQGNsYXNzIFdBS1Njcm9sbFZp
ZXc7CitAY2xhc3MgV0FLVmlldzsKKyNlbHNlCitjbGFzcyBXQUtTY3JvbGxWaWV3OworY2xhc3Mg
V0FLVmlldzsKKyNlbmRpZgorCisjaWZuZGVmIE5TU2Nyb2xsVmlldworI2RlZmluZSBOU1Njcm9s
bFZpZXcgV0FLU2Nyb2xsVmlldworI2VuZGlmCisKKyNpZm5kZWYgTlNWaWV3CisjZGVmaW5lIE5T
VmlldyBXQUtWaWV3CisjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKICNpZiBQTEFU
Rk9STShNQUMpICYmIGRlZmluZWQgX19PQkpDX18KIEBwcm90b2NvbCBXZWJDb3JlRnJhbWVTY3Jv
bGxWaWV3OwogI2VuZGlmCkBAIC00Myw2ICs2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgSG9zdFdpbmRvdzsKIGNsYXNzIFNjcm9sbGJhcjsKK2NsYXNzIFRpbGVDYWNoZTsKIAog
Y2xhc3MgU2Nyb2xsVmlldyA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7
CiBwdWJsaWM6CkBAIC0xNDEsOSArMTYwLDIwIEBAIHB1YmxpYzoKICAgICAvLyB0aGUgc2V0Rml4
ZWRWaXNpYmxlQ29udGVudFJlY3QgaW5zdGVhZCBmb3IgdGhlIG1haW5mcmFtZSwgdGhvdWdoIHRo
aXMgbXVzdCBiZSB1cGRhdGVkIG1hbnVhbGx5LCBlLmcganVzdCBiZWZvcmUgcmVzdW1pbmcgdGhl
IHBhZ2UKICAgICAvLyB3aGljaCB1c3VhbGx5IHdpbGwgaGFwcGVuIHdoZW4gcGFubmluZywgcGlu
Y2hpbmcgYW5kIHJvdGF0aW9uIGVuZHMsIG9yIHdoZW4gc2NhbGUgb3IgcG9zaXRpb24gYXJlIGNo
YW5nZWQgbWFudWFsbHkuCiAgICAgdmlydHVhbCBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdChW
aXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgPSBFeGNsdWRlU2Nyb2xsYmFycykg
Y29uc3QgT1ZFUlJJREU7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICB2aXJ0dWFsIHZvaWQgc2V0
Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0
KSB7IG1fZml4ZWRWaXNpYmxlQ29udGVudFJlY3QgPSB2aXNpYmxlQ29udGVudFJlY3Q7IH0KICAg
ICBJbnRSZWN0IGZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maXhl
ZFZpc2libGVDb250ZW50UmVjdDsgfQorI2VuZGlmCiAgICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKTsgfQorI2lmIFBMQVRG
T1JNKElPUykKKyAgICAvLyBUaGlzIGlzIHRoZSBhcmVhIHRoYXQgaXMgbm90IGNvdmVyZWQgYnkg
VUkgZWxlbWVudHMuCisgICAgSW50UmVjdCBhY3R1YWxWaXNpYmxlQ29udGVudFJlY3QoKSBjb25z
dDsKKyAgICAvLyBUaGlzIGlzIHRoZSBhcmVhIHRoYXQgaXMgcGFydGlhbGx5IG9yIGZ1bGx5IGV4
cG9zZWQsIGFuZCBtYXkgZXh0ZW5kIHVuZGVyIG92ZXJsYXBwaW5nIFVJIGVsZW1lbnRzLgorICAg
IEludFJlY3QgdmlzaWJsZUV4dGVudENvbnRlbnRSZWN0KCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dEFjdHVhbFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7CisgICAgVGlsZUNhY2hlKiB0
aWxlQ2FjaGUoKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIHZpc2libGVDb250ZW50UmVjdCgpLndpZHRoKCk7IH0KICAgICB2
aXJ0dWFsIGludCB2aXNpYmxlSGVpZ2h0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdmlzaWJs
ZUNvbnRlbnRSZWN0KCkuaGVpZ2h0KCk7IH0KIApAQCAtMTgxLDYgKzIxMSwxMSBAQCBwdWJsaWM6
CiAgICAgaW50IHNjcm9sbFgoKSBjb25zdCB7IHJldHVybiBzY3JvbGxQb3NpdGlvbigpLngoKTsg
fQogICAgIGludCBzY3JvbGxZKCkgY29uc3QgeyByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS55KCk7
IH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBpbnQgYWN0dWFsU2Nyb2xsWCgpIGNvbnN0IHsg
cmV0dXJuIGFjdHVhbFZpc2libGVDb250ZW50UmVjdCgpLngoKTsgfQorICAgIGludCBhY3R1YWxT
Y3JvbGxZKCkgY29uc3QgeyByZXR1cm4gYWN0dWFsVmlzaWJsZUNvbnRlbnRSZWN0KCkueSgpOyB9
CisjZW5kaWYKKwogICAgIC8vIHNjcm9sbE9mZnNldCgpIGFuY2hvcnMgaXRzICgwLDApIHBvaW50
IGF0IHRoZSB0b3AgZW5kIG9mIHRoZSBoZWFkZXIgaWYgdGhpcyBTY3JvbGxhYmxlQXJlYQogICAg
IC8vIGhhcyBhIGhlYWRlciwgc28gaXQgaXMgcmVsYXRpdmUgdG8gdGhlIHRvdGFsQ29udGVudHNT
aXplKCkuIHNjcm9sbE9mZnNldFJlbGF0aXZlVG9Eb2N1bWVudCgpCiAgICAgLy8gYW5jaG9ycyAo
MCwwKSBhdCB0aGUgdG9wIG9mIHRoZSBEb2N1bWVudCwgd2hpY2ggd2lsbCBiZSBiZW5lYXRoIGFu
eSBoZWFkZXJzLCBzbyBpdCBpcyByZWxhdGl2ZQpAQCAtMzU0LDcgKzM4OSw5IEBAIHByaXZhdGU6
CiAgICAgLy8gd2hldGhlciBpdCBpcyBzYWZlIHRvIGJsaXQgb24gc2Nyb2xsLgogICAgIGJvb2wg
bV9jYW5CbGl0T25TY3JvbGw7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIEludFJlY3QgbV9m
aXhlZFZpc2libGVDb250ZW50UmVjdDsKKyNlbmRpZgogICAgIEludFNpemUgbV9zY3JvbGxPZmZz
ZXQ7IC8vIEZJWE1FOiBXb3VsZCByYXRoZXIgc3RvcmUgdGhpcyBhcyBhIHBvc2l0aW9uLCBidXQg
d2Ugd2lsbCB3YWl0IHRvIG1ha2UgdGhpcyBjaGFuZ2UgdW50aWwgbW9yZSBjb2RlIGlzIHNoYXJl
ZC4KICAgICBJbnRQb2ludCBtX2NhY2hlZFNjcm9sbFBvc2l0aW9uOwogICAgIEludFNpemUgbV9m
aXhlZExheW91dFNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5j
cHAKaW5kZXggYzE4ZGVhN2VkYzQ5MWFkNWZkNTJiNjZjZDIzZjljYmY1ODJkNGU5OS4uMmJjODRj
NWMxYjI5NDNhMzIxYjQwOGM3ODUzZTBiOTk1MmQzNmY1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApAQCAtMTc2LDYgKzE3NiwxMyBAQCBib29sIFNjcm9s
bGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCkKICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS0+aGFuZGxlV2hlZWxFdmVudCh3
aGVlbEV2ZW50KTsKIH0KIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCitib29sIFNjcm9sbGFi
bGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hF
dmVudCkKK3sKKyAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS0+aGFuZGxlVG91Y2hFdmVudCh0
b3VjaEV2ZW50KTsKK30KKyNlbmRpZgorCiAvLyBOT1RFOiBPbmx5IGNhbGxlZCBmcm9tIEludGVy
bmFscyBmb3IgdGVzdGluZy4KIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbE9mZnNldEZy
b21JbnRlcm5hbHMoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKIHsKQEAgLTM4OSw2ICszOTYsMzEg
QEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6c2VydmljZVNjcm9sbEFuaW1hdGlvbnMoKQogICAgICAg
ICBzY3JvbGxBbmltYXRvci0+c2VydmljZVNjcm9sbEFuaW1hdGlvbnMoKTsKIH0KIAorI2lmIFBM
QVRGT1JNKElPUykKK2Jvb2wgU2Nyb2xsYWJsZUFyZWE6OmlzUGlubmVkSW5Cb3RoRGlyZWN0aW9u
cyhjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNQaW5u
ZWRIb3Jpem9udGFsbHlJbkRpcmVjdGlvbihzY3JvbGxEZWx0YS53aWR0aCgpKSAmJiBpc1Bpbm5l
ZFZlcnRpY2FsbHlJbkRpcmVjdGlvbihzY3JvbGxEZWx0YS5oZWlnaHQoKSk7Cit9CisKK2Jvb2wg
U2Nyb2xsYWJsZUFyZWE6OmlzUGlubmVkSG9yaXpvbnRhbGx5SW5EaXJlY3Rpb24oaW50IGhvcml6
b250YWxTY3JvbGxEZWx0YSkgY29uc3QKK3sKKyAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbERlbHRh
IDwgMCAmJiBpc0hvcml6b250YWxTY3JvbGxlclBpbm5lZFRvTWluaW11bVBvc2l0aW9uKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChob3Jpem9udGFsU2Nyb2xsRGVsdGEgPiAwICYm
IGlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9NYXhpbXVtUG9zaXRpb24oKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNjcm9sbGFibGVBcmVh
Ojppc1Bpbm5lZFZlcnRpY2FsbHlJbkRpcmVjdGlvbihpbnQgdmVydGljYWxTY3JvbGxEZWx0YSkg
Y29uc3QKK3sKKyAgICBpZiAodmVydGljYWxTY3JvbGxEZWx0YSA8IDAgJiYgaXNWZXJ0aWNhbFNj
cm9sbGVyUGlubmVkVG9NaW5pbXVtUG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgaWYgKHZlcnRpY2FsU2Nyb2xsRGVsdGEgPiAwICYmIGlzVmVydGljYWxTY3JvbGxlclBpbm5l
ZFRvTWF4aW11bVBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBm
YWxzZTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKIEludFBvaW50IFNjcm9sbGFibGVB
cmVhOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgaW50IHggPSBob3Jpem9udGFsU2Ny
b2xsYmFyKCkgPyBob3Jpem9udGFsU2Nyb2xsYmFyKCktPnZhbHVlKCkgOiAwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKaW5kZXggZTMzNzNlNGM5MWM5ZTI1ZWUwMzI1
N2I3NGY2OGVkNGNjYmY4NjMyNi4uZjE3NDcxZDRkN2QxOGVhYjQ5YjJjZDQ1YTdhYzU3ZmM1ZjFi
NWNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCkBAIC0zMyw2
ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNz
IEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFBsYXRmb3JtVG91Y2hFdmVudDsKIGNsYXNzIFBsYXRm
b3JtV2hlZWxFdmVudDsKIGNsYXNzIFNjcm9sbEFuaW1hdG9yOwogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKQEAgLTU3LDYgKzU4LDE5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFu
ZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKIAorI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCisgICAgdmlydHVhbCBib29sIGlzVG91Y2hTY3JvbGxhYmxlKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmKTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IHZpcnR1YWwgYm9vbCBpc092ZXJmbG93U2Nyb2xsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkRW5kU2Nyb2xsKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZXRJc1VzZXJTY3JvbGwoYm9vbCkgeyB9CisjZW5kaWYKKwog
ICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgaWYgeW91IGNhbiBzY3JvbGwgcGFzdCB0
aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KICAgICBib29sIGNvbnN0cmFpbnNTY3JvbGxpbmdUb0Nv
bnRlbnRFZGdlKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50
RWRnZTsgfQogICAgIHZvaWQgc2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoYm9v
bCBjb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSkgeyBtX2NvbnN0cmFpbnNTY3JvbGxp
bmdUb0NvbnRlbnRFZGdlID0gY29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2U7IH0KQEAg
LTE4Miw2ICsxOTYsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZUFuaW1h
dGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBzZXJ2aWNlU2Nyb2xsQW5pbWF0aW9u
cygpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJvb2wgaXNIb3Jpem9udGFsU2Nyb2xsZXJQ
aW5uZWRUb01pbmltdW1Qb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuICFob3Jpem9udGFsU2Nyb2xs
YmFyKCkgfHwgc2Nyb2xsUG9zaXRpb24oaG9yaXpvbnRhbFNjcm9sbGJhcigpKSA8PSBtaW5pbXVt
U2Nyb2xsUG9zaXRpb24oKS54KCk7IH0KKyAgICBib29sIGlzSG9yaXpvbnRhbFNjcm9sbGVyUGlu
bmVkVG9NYXhpbXVtUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiAhaG9yaXpvbnRhbFNjcm9sbGJh
cigpIHx8IHNjcm9sbFBvc2l0aW9uKGhvcml6b250YWxTY3JvbGxiYXIoKSkgPj0gbWF4aW11bVNj
cm9sbFBvc2l0aW9uKCkueCgpOyB9CisgICAgYm9vbCBpc1ZlcnRpY2FsU2Nyb2xsZXJQaW5uZWRU
b01pbmltdW1Qb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuICF2ZXJ0aWNhbFNjcm9sbGJhcigpIHx8
IHNjcm9sbFBvc2l0aW9uKHZlcnRpY2FsU2Nyb2xsYmFyKCkpIDw9IG1pbmltdW1TY3JvbGxQb3Np
dGlvbigpLnkoKTsgfQorICAgIGJvb2wgaXNWZXJ0aWNhbFNjcm9sbGVyUGlubmVkVG9NYXhpbXVt
UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiAhdmVydGljYWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxQ
b3NpdGlvbih2ZXJ0aWNhbFNjcm9sbGJhcigpKSA+PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55
KCk7IH0gCisKKyAgICBib29sIGlzUGlubmVkSW5Cb3RoRGlyZWN0aW9ucyhjb25zdCBJbnRTaXpl
JikgY29uc3Q7IAorICAgIGJvb2wgaXNQaW5uZWRIb3Jpem9udGFsbHlJbkRpcmVjdGlvbihpbnQg
aG9yaXpvbnRhbFNjcm9sbERlbHRhKSBjb25zdDsgCisgICAgYm9vbCBpc1Bpbm5lZFZlcnRpY2Fs
bHlJbkRpcmVjdGlvbihpbnQgdmVydGljYWxTY3JvbGxEZWx0YSkgY29uc3Q7CisjZW5kaWYKKwog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIFRpbGVkQmFja2lu
ZyogdGlsZWRCYWNraW5nKCkgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgYm9vbCB1c2VzQ29t
cG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcAppbmRleCBiOThjY2EzMTFlNDU1MzRmNWE0YTJjZDk2OWRkY2Mw
NGM4NmNhNzY5Li40MWY3YmE0OGVjOGVjYzJiMzM2OWExZDZkZWQxN2IyNTQ3OWJlNDNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKQEAgLTMzNCw2ICszMzQsNyBAQCB2b2lk
IFNjcm9sbGJhcjo6c2V0UHJlc3NlZFBhcnQoU2Nyb2xsYmFyUGFydCBwYXJ0KQogICAgICAgICB0
aGVtZSgpLT5pbnZhbGlkYXRlUGFydCh0aGlzLCBtX2hvdmVyZWRQYXJ0KTsKIH0KIAorI2lmICFQ
TEFURk9STShJT1MpCiBib29sIFNjcm9sbGJhcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIGV2dCkKIHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsK
QEAgLTM3Miw2ICszNzMsNyBAQCBib29sIFNjcm9sbGJhcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIGV2dCkKIAogICAgIHJldHVybiB0cnVlOwogfQorI2VuZGlmCiAKIHZv
aWQgU2Nyb2xsYmFyOjptb3VzZUVudGVyZWQoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXIuaAppbmRleCBlNWIzMjlkYWJiMTI1NjJkNjlkZTJkNjI1YmJmNDg0OTliNmQyYWZjLi5jZDFl
ODk3MDM4ZWVlYWI1ZDE3MzNhMjVmNTc0ZmZhNTcwMTcyOGI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXIuaApAQCAtMTI1LDcgKzEyNSw5IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSB1c2VkIGZvciBwbGF0Zm9ybSBzY3JvbGxiYXJzIHRvIGdpdmUgOmhvdmVyIGZl
ZWRiYWNrLiAgVGhleSB3aWxsIG5vdCBnZXQgY2FsbGVkCiAgICAgLy8gd2hlbiB0aGUgbW91c2Ug
d2VudCBkb3duIGluIGEgc2Nyb2xsYmFyLCBzaW5jZSBpdCBpcyBhc3N1bWVkIHRoZSBzY3JvbGxi
YXIgd2lsbCBzdGFydAogICAgIC8vIGdyYWJiaW5nIGFsbCBldmVudHMgaW4gdGhhdCBjYXNlIGFu
eXdheS4KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGJvb2wgbW91c2VNb3ZlZChjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmKTsKKyNlbmRpZgogICAgIHZvaWQgbW91c2VFbnRlcmVkKCk7CiAgICAg
Ym9vbCBtb3VzZUV4aXRlZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcAppbmRleCBkYjgyM2NkN2ZiNjI0ZmYwNDAzZWZhYmY3YzYyZGUyZjBmYTdkZGU1Li4xZGFk
Nzg3MjMyYjMwNjFkMTk2N2M5ZGViOTNiODY2MTc4ODVjN2JjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTY2LDYgKzY2LDcgQEAgc3RhdGljIGlubGluZSB2
b2lkIGZyZWVTZWdtZW50KGNoYXIqIHApCiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKCkK
ICAgICA6IG1fc2l6ZSgwKQorICAgICwgbV9zaG91bGRVc2VQdXJnZWFibGVNZW1vcnkoZmFsc2Up
CiAjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCiAgICAgLCBtX2lzTWVtb3J5TWFwcGVkKGZh
bHNlKQogICAgICwgbV9kaXNrSW1hZ2VDYWNoZUlkKERpc2tJbWFnZUNhY2hlOjppbnZhbGlkRGlz
a0NhY2hlSWQpCkBAIC03OCw2ICs3OSw3IEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKCkK
IFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKHVuc2lnbmVkIHNpemUpCiAgICAgOiBtX3NpemUo
c2l6ZSkKICAgICAsIG1fYnVmZmVyKHNpemUpCisgICAgLCBtX3Nob3VsZFVzZVB1cmdlYWJsZU1l
bW9yeShmYWxzZSkKICNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkKICAgICAsIG1faXNNZW1v
cnlNYXBwZWQoZmFsc2UpCiAgICAgLCBtX2Rpc2tJbWFnZUNhY2hlSWQoRGlza0ltYWdlQ2FjaGU6
OmludmFsaWREaXNrQ2FjaGVJZCkKQEAgLTg5LDYgKzkxLDcgQEAgU2hhcmVkQnVmZmVyOjpTaGFy
ZWRCdWZmZXIodW5zaWduZWQgc2l6ZSkKIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29u
c3QgY2hhciogZGF0YSwgdW5zaWduZWQgc2l6ZSkKICAgICA6IG1fc2l6ZSgwKQorICAgICwgbV9z
aG91bGRVc2VQdXJnZWFibGVNZW1vcnkoZmFsc2UpCiAjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FD
SEUpCiAgICAgLCBtX2lzTWVtb3J5TWFwcGVkKGZhbHNlKQogICAgICwgbV9kaXNrSW1hZ2VDYWNo
ZUlkKERpc2tJbWFnZUNhY2hlOjppbnZhbGlkRGlza0NhY2hlSWQpCkBAIC0xMDEsNiArMTA0LDcg
QEAgU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
c2l6ZSkKIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdW5zaWduZWQgY2hhciog
ZGF0YSwgdW5zaWduZWQgc2l6ZSkKICAgICA6IG1fc2l6ZSgwKQorICAgICwgbV9zaG91bGRVc2VQ
dXJnZWFibGVNZW1vcnkoZmFsc2UpCiAjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCiAgICAg
LCBtX2lzTWVtb3J5TWFwcGVkKGZhbHNlKQogICAgICwgbV9kaXNrSW1hZ2VDYWNoZUlkKERpc2tJ
bWFnZUNhY2hlOjppbnZhbGlkRGlza0NhY2hlSWQpCkBAIC0yMTAsNiArMjE0LDEyIEBAIHZvaWQg
U2hhcmVkQnVmZmVyOjpzZXRNZW1vcnlNYXBwZWROb3RpZmljYXRpb25DYWxsYmFjayhNZW1vcnlN
YXBwZWROb3RpZnlDYWxsYmFjCiB9CiAjZW5kaWYKIAorLy8gVHJ5IHRvIGNyZWF0ZSBhIFB1cmdl
YWJsZUJ1ZmZlci4gV2UgY2FuIGZhaWwgdG8gY3JlYXRlIG9uZSBmb3IgYW55IG9mIHRoZQorLy8g
Zm9sbG93aW5nIHJlYXNvbnM6CisvLyAgIC0gc2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5IGlzIHNl
dCB0byBmYWxzZS4KKy8vICAgLSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGlzIGxlc3MgdGhhbiB0
aGUgbWluaW11bSBzaXplIHJlcXVpcmVkIGJ5CisvLyAgICAgUHVyZ2VhYmxlQnVmZmVyIChjdXJy
ZW50bHkgMTZrKS4KKy8vICAgLSBQdXJnZWFibGVCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
KSBjYWxsIGZhaWxzLgogdm9pZCBTaGFyZWRCdWZmZXI6OmNyZWF0ZVB1cmdlYWJsZUJ1ZmZlcigp
IGNvbnN0CiB7CiAgICAgaWYgKG1fcHVyZ2VhYmxlQnVmZmVyKQpAQCAtMjI2LDYgKzIzNiw5IEBA
IHZvaWQgU2hhcmVkQnVmZmVyOjpjcmVhdGVQdXJnZWFibGVCdWZmZXIoKSBjb25zdAogICAgIGlm
ICghaGFzT25lUmVmKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmICghbV9zaG91bGRVc2VQ
dXJnZWFibGVNZW1vcnkpCisgICAgICAgIHJldHVybjsKKwogICAgIGNoYXIqIGRlc3RpbmF0aW9u
ID0gMDsKICAgICBtX3B1cmdlYWJsZUJ1ZmZlciA9IFB1cmdlYWJsZUJ1ZmZlcjo6Y3JlYXRlVW5p
bml0aWFsaXplZChtX3NpemUsIGRlc3RpbmF0aW9uKTsKICAgICBpZiAoIW1fcHVyZ2VhYmxlQnVm
ZmVyKQpAQCAtMjUzLDcgKzI2Niw5IEBAIGNvbnN0IGNoYXIqIFNoYXJlZEJ1ZmZlcjo6ZGF0YSgp
IGNvbnN0CiAgICAgaWYgKGNvbnN0IGNoYXIqIGJ1ZmZlciA9IHNpbmdsZURhdGFBcnJheUJ1ZmZl
cigpKQogICAgICAgICByZXR1cm4gYnVmZmVyOwogI2VuZGlmCi0gICAgCisKKyAgICBjcmVhdGVQ
dXJnZWFibGVCdWZmZXIoKTsKKwogICAgIGlmIChtX3B1cmdlYWJsZUJ1ZmZlcikKICAgICAgICAg
cmV0dXJuIG1fcHVyZ2VhYmxlQnVmZmVyLT5kYXRhKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IDgyNzE4YjM1YzBkMDM3YjlmYjVlYjU2YTg5ZGQxNTM1
Yjg3NDk3YTIuLjEwNmM4MzBkNjUxZjllZDdlNTY2YzAxODhkMmQ3MGM1MzJjNjgwMjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC0xMzgsNiArMTM4LDggQEAgcHVi
bGljOgogICAgIC8vICAgICAgfQogICAgIHVuc2lnbmVkIGdldFNvbWVEYXRhKGNvbnN0IGNoYXIq
JiBkYXRhLCB1bnNpZ25lZCBwb3NpdGlvbiA9IDApIGNvbnN0OwogCisgICAgdm9pZCBzaG91bGRV
c2VQdXJnZWFibGVNZW1vcnkoYm9vbCB1c2UpIHsgbV9zaG91bGRVc2VQdXJnZWFibGVNZW1vcnkg
PSB1c2U7IH0KKwogI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQogICAgIGVudW0gTWVtb3J5
TWFwcGluZ1N0YXRlIHsgUXVldWVkRm9yTWFwcGluZywgUHJldmlvdXNseVF1ZXVlZEZvck1hcHBp
bmcsIFN1Y2Nlc3NBbHJlYWR5TWFwcGVkLCBGYWlsdXJlQ2FjaGVGdWxsIH07CiAKQEAgLTE4Nyw2
ICsxODksNyBAQCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgbV9zaXplOwogICAgIG11dGFibGUg
VmVjdG9yPGNoYXI+IG1fYnVmZmVyOworICAgIGJvb2wgbV9zaG91bGRVc2VQdXJnZWFibGVNZW1v
cnk7CiAgICAgbXV0YWJsZSBPd25QdHI8UHVyZ2VhYmxlQnVmZmVyPiBtX3B1cmdlYWJsZUJ1ZmZl
cjsKICNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCiAgICAgbXV0YWJsZSBW
ZWN0b3I8UmV0YWluUHRyPENGRGF0YVJlZj4+IG1fZGF0YUFycmF5OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VkZGVuVGVybWluYXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1N1ZGRlblRlcm1pbmF0aW9uLmgKaW5kZXggNzI1MjE0OTA2MmY0MzNhYjMzYzY4
ODBjOTU1NGI5YjNiZGZhZGM5Mi4uODA5NjdjNmMwOGM5ZmM3MmExMTJmMWQzMGViY2YyZjA4MTI1
ZDNlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VkZGVuVGVybWluYXRp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdWRkZW5UZXJtaW5hdGlvbi5oCkBA
IC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB2b2lkIGRpc2FibGVTdWRk
ZW5UZXJtaW5hdGlvbigpOwogICAgIHZvaWQgZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKTsKIAot
I2lmICFQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oSU9TKSB8fCAhUExBVEZPUk0oTUFDKQog
ICAgIGlubGluZSB2b2lkIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpIHsgfQogICAgIGlubGlu
ZSB2b2lkIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCkgeyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TdXBwbGVtZW50YWJsZS5oCmluZGV4IDI3N2FhZWY4MGVmNmNjN2JhM2JlMmE5
ODljMmY1ZmYzZGVkMmM3NTEuLmMyMDJmMmM0MjFlZTA4NmJkMWNmZTQ2YzA3NDNhY2U2N2Y2Nzc2
MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VwcGxlbWVudGFibGUuaApAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKQEAgLTk5LDIwICsxMDAsMjAgQEAg
Y2xhc3MgU3VwcGxlbWVudGFibGUgewogcHVibGljOgogICAgIHZvaWQgcHJvdmlkZVN1cHBsZW1l
bnQoY29uc3QgY2hhcioga2V5LCBQYXNzT3duUHRyPFN1cHBsZW1lbnQ8VD4+IHN1cHBsZW1lbnQp
CiAgICAgewotICAgICAgICBBU1NFUlQobV90aHJlYWRJZCA9PSBjdXJyZW50VGhyZWFkKCkpOwor
ICAgICAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdGhyZWFk
SWQpKTsKICAgICAgICAgQVNTRVJUKCFtX3N1cHBsZW1lbnRzLmdldChrZXkpKTsKICAgICAgICAg
bV9zdXBwbGVtZW50cy5zZXQoa2V5LCBzdXBwbGVtZW50KTsKICAgICB9CiAKICAgICB2b2lkIHJl
bW92ZVN1cHBsZW1lbnQoY29uc3QgY2hhcioga2V5KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
dGhyZWFkSWQgPT0gY3VycmVudFRocmVhZCgpKTsKKyAgICAgICAgQVNTRVJUKGNhbkFjY2Vzc1Ro
cmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RocmVhZElkKSk7CiAgICAgICAgIG1fc3VwcGxlbWVu
dHMucmVtb3ZlKGtleSk7CiAgICAgfQogCiAgICAgU3VwcGxlbWVudDxUPiogcmVxdWlyZVN1cHBs
ZW1lbnQoY29uc3QgY2hhcioga2V5KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdGhyZWFkSWQg
PT0gY3VycmVudFRocmVhZCgpKTsKKyAgICAgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2Fs
RGF0YUZvclRocmVhZChtX3RocmVhZElkKSk7CiAgICAgICAgIHJldHVybiBtX3N1cHBsZW1lbnRz
LmdldChrZXkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U3lzdGVtTWVtb3J5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TeXN0ZW1NZW1vcnkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMjc2M2NkM2E2Y2Q3MGQ2MWI4NzZhOGEzNmRiMGZhMDRkNWNlZjBjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3lzdGVtTWVtb3J5LmgKQEAg
LTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTeXN0ZW1NZW1vcnlfaAorI2RlZmluZSBTeXN0ZW1NZW1v
cnlfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CitpbnQgc3lzdGVtTWVtb3J5TGV2ZWwoKTsgLy8g
SW4gWzAsIDEwMF0KK3NpemVfdCBzeXN0ZW1Ub3RhbE1lbW9yeSgpOworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZENoZWNrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRDaGVjay5oCmluZGV4IDA3ZWI0NjNiMDViZTI3ZGUxMzUy
ZDA2NmVlNzJkZTcxN2JiYzM3NTkuLmZiYTNhYTI2YjM5MjVmNjIwMDE2MWFlZTVmMTQwOTg0OTJm
YWQ2ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZENoZWNrLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkQ2hlY2suaApAQCAtMjYsNiArMjYs
NyBAQAogI2lmbmRlZiBUaHJlYWRDaGVja19oCiAjZGVmaW5lIFRocmVhZENoZWNrX2gKIAorI2lm
ICFQTEFURk9STShJT1MpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgZW51bSBUaHJlYWRWaW9s
YXRpb25CZWhhdmlvciB7CiAgICAgICAgIE5vVGhyZWFkQ2hlY2ssCkBAIC00Niw1ICs0Nyw5IEBA
IGV4dGVybiAiQyIgdm9pZCBXZWJDb3JlUmVwb3J0VGhyZWFkVmlvbGF0aW9uKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uLCBXZWJDb3JlOjpUaHJlCiAKICNkZWZpbmUgV2ViQ29yZVRocmVhZFZpb2xhdGlv
bkNoZWNrUm91bmRPbmUoKSA6OldlYkNvcmU6OnJlcG9ydFRocmVhZFZpb2xhdGlvbihXVEZfUFJF
VFRZX0ZVTkNUSU9OLCBXZWJDb3JlOjpUaHJlYWRWaW9sYXRpb25Sb3VuZE9uZSkKICNkZWZpbmUg
V2ViQ29yZVRocmVhZFZpb2xhdGlvbkNoZWNrUm91bmRUd28oKSA6OldlYkNvcmU6OnJlcG9ydFRo
cmVhZFZpb2xhdGlvbihXVEZfUFJFVFRZX0ZVTkNUSU9OLCBXZWJDb3JlOjpUaHJlYWRWaW9sYXRp
b25Sb3VuZFR3bykKKyNlbHNlCisjZGVmaW5lIFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1Jv
dW5kT25lKCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBXZWJDb3JlVGhyZWFkVmlvbGF0aW9u
Q2hlY2tSb3VuZFR3bygpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvLyBQTEFURk9STShJT1Mp
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xv
YmFsRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNw
cAppbmRleCAwZDgzN2JmNTZkNzliOTJjNDA5MTQ1ZDc3NzY3N2VhN2QxMmRjMjA0Li5jZWZiMTlk
ZGM3MGU1ZGE5NTUxMTJhODk2ZWM2N2MxOWQ1MDJlMjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcApAQCAtNTAsNiArNTAsOSBAQCB1c2luZyBuYW1l
c3BhY2UgV1RGOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBUaHJlYWRTcGVjaWZpYzxUaHJlYWRH
bG9iYWxEYXRhPiogVGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0YTsKKyNpZiBVU0UoV0VCX1RI
UkVBRCkKK1RocmVhZEdsb2JhbERhdGEqIFRocmVhZEdsb2JhbERhdGE6OnNoYXJlZE1haW5UaHJl
YWRTdGF0aWNEYXRhOworI2VuZGlmCiAKIFRocmVhZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERh
dGEoKQogICAgIDogbV9jYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKGFkb3B0UHRyKG5l
dyBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKSkKQEAgLTYxLDcgKzY0LDcgQEAgVGhy
ZWFkR2xvYmFsRGF0YTo6VGhyZWFkR2xvYmFsRGF0YSgpCiAjaWYgVVNFKElDVV9VTklDT0RFKQog
ICAgICwgbV9jYWNoZWRDb252ZXJ0ZXJJQ1UoYWRvcHRQdHIobmV3IElDVUNvbnZlcnRlcldyYXBw
ZXIpKQogI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBM
QVRGT1JNKElPUykKICAgICAsIG1fY2FjaGVkQ29udmVydGVyVEVDKGFkb3B0UHRyKG5ldyBURUND
b252ZXJ0ZXJXcmFwcGVyKSkKICNlbmRpZgogI2lmIEVOQUJMRShJTlNQRUNUT1IpCkBAIC04Miw3
ICs4NSw3IEBAIFRocmVhZEdsb2JhbERhdGE6On5UaHJlYWRHbG9iYWxEYXRhKCkKIAogdm9pZCBU
aHJlYWRHbG9iYWxEYXRhOjpkZXN0cm95KCkKIHsKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExB
VEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogICAgIG1fY2FjaGVkQ29udmVydGVyVEVDLmNs
ZWFyKCk7CiAjZW5kaWYKIApAQCAtOTgsMTEgKzEwMSwzNSBAQCB2b2lkIFRocmVhZEdsb2JhbERh
dGE6OmRlc3Ryb3koKQogICAgIG1fdGhyZWFkVGltZXJzLmNsZWFyKCk7CiB9CiAKKyNpZiBFTkFC
TEUoV09SS0VSUykgJiYgVVNFKFdFQl9USFJFQUQpCit2b2lkIFRocmVhZEdsb2JhbERhdGE6OnNl
dFdlYkNvcmVUaHJlYWREYXRhKCkKK3sKKyAgICBBU1NFUlQoaXNXZWJUaHJlYWQoKSk7CisgICAg
QVNTRVJUKCZ0aHJlYWRHbG9iYWxEYXRhKCkgIT0gVGhyZWFkR2xvYmFsRGF0YTo6c2hhcmVkTWFp
blRocmVhZFN0YXRpY0RhdGEpOworCisgICAgLy8gU2V0IFdlYlRocmVhZCdzIFRocmVhZEdsb2Jh
bERhdGEgb2JqZWN0IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBtYWluIFVJIHRocmVhZC4KKyAgICBU
aHJlYWRHbG9iYWxEYXRhOjpzdGF0aWNEYXRhLT5yZXBsYWNlKFRocmVhZEdsb2JhbERhdGE6OnNo
YXJlZE1haW5UaHJlYWRTdGF0aWNEYXRhKTsKKworICAgIEFTU0VSVCgmdGhyZWFkR2xvYmFsRGF0
YSgpID09IFRocmVhZEdsb2JhbERhdGE6OnNoYXJlZE1haW5UaHJlYWRTdGF0aWNEYXRhKTsKK30K
KyNlbmRpZgorCiBUaHJlYWRHbG9iYWxEYXRhJiB0aHJlYWRHbG9iYWxEYXRhKCkgCiB7CisjaWYg
VVNFKFdFQl9USFJFQUQpCisgICAgaWYgKFVOTElLRUxZKCFUaHJlYWRHbG9iYWxEYXRhOjpzdGF0
aWNEYXRhKSkgeworICAgICAgICBUaHJlYWRHbG9iYWxEYXRhOjpzdGF0aWNEYXRhID0gbmV3IFRo
cmVhZFNwZWNpZmljPFRocmVhZEdsb2JhbERhdGE+OworICAgICAgICAvLyBXZWJUaHJlYWQgYW5k
IG1haW4gVUkgdGhyZWFkIG5lZWQgdG8gc2hhcmUgdGhlIHNhbWUgb2JqZWN0LiBTYXZlIGl0IGlu
IGEgc3RhdGljCisgICAgICAgIC8vIGhlcmUsIHRoZSBXZWJUaHJlYWQgd2lsbCBwaWNrIGl0IHVw
IGluIHNldFdlYkNvcmVUaHJlYWREYXRhKCkuCisgICAgICAgIGlmIChwdGhyZWFkX21haW5fbnAo
KSkKKyAgICAgICAgICAgIFRocmVhZEdsb2JhbERhdGE6OnNoYXJlZE1haW5UaHJlYWRTdGF0aWNE
YXRhID0gKlRocmVhZEdsb2JhbERhdGE6OnN0YXRpY0RhdGE7CisgICAgfQorICAgIHJldHVybiAq
KlRocmVhZEdsb2JhbERhdGE6OnN0YXRpY0RhdGE7CisjZWxzZQogICAgIGlmICghVGhyZWFkR2xv
YmFsRGF0YTo6c3RhdGljRGF0YSkKICAgICAgICAgVGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0
YSA9IG5ldyBUaHJlYWRTcGVjaWZpYzxUaHJlYWRHbG9iYWxEYXRhPjsKICAgICByZXR1cm4gKipU
aHJlYWRHbG9iYWxEYXRhOjpzdGF0aWNEYXRhOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2Jh
bERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuaAppbmRl
eCA3NmM5ZmFmYjFlOWIzMjdiNzhjYTg2OTFlZTQzODA2NDY2YWE4OTQ2Li5mZmIwMThjN2EyMGZl
N2VhMzA3OGU4NTE3ZTFmOGYzMTUzMjg4NjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGhyZWFkR2xvYmFsRGF0YS5oCkBAIC02MiwxMCArNjIsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBJQ1VDb252ZXJ0ZXJXcmFwcGVyJiBjYWNoZWRDb252ZXJ0ZXJJQ1UoKSB7IHJl
dHVybiAqbV9jYWNoZWRDb252ZXJ0ZXJJQ1U7IH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFD
KQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICAgICAgVEVDQ29udmVy
dGVyV3JhcHBlciYgY2FjaGVkQ29udmVydGVyVEVDKCkgeyByZXR1cm4gKm1fY2FjaGVkQ29udmVy
dGVyVEVDOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShXT1JLRVJTKSAmJiBVU0UoV0VCX1RIUkVB
RCkKKyAgICAgICAgdm9pZCBzZXRXZWJDb3JlVGhyZWFkRGF0YSgpOworI2VuZGlmCisKICNpZiBF
TkFCTEUoSU5TUEVDVE9SKQogICAgICAgICBUaHJlYWRMb2NhbEluc3BlY3RvckNvdW50ZXJzJiBp
bnNwZWN0b3JDb3VudGVycygpIHsgcmV0dXJuICptX2luc3BlY3RvckNvdW50ZXJzOyB9CiAjZW5k
aWYKQEAgLTgzLDcgKzg3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBPd25QdHI8
SUNVQ29udmVydGVyV3JhcHBlcj4gbV9jYWNoZWRDb252ZXJ0ZXJJQ1U7CiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAg
ICAgIE93blB0cjxURUNDb252ZXJ0ZXJXcmFwcGVyPiBtX2NhY2hlZENvbnZlcnRlclRFQzsKICNl
bmRpZgogCkBAIC05MiwxMCArOTYsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAK
ICAgICAgICAgc3RhdGljIFRocmVhZFNwZWNpZmljPFRocmVhZEdsb2JhbERhdGE+KiBzdGF0aWNE
YXRhOworI2lmIFVTRShXRUJfVEhSRUFEKQorICAgICAgICBzdGF0aWMgVGhyZWFkR2xvYmFsRGF0
YSogc2hhcmVkTWFpblRocmVhZFN0YXRpY0RhdGE7CisjZW5kaWYKICAgICAgICAgZnJpZW5kIFRo
cmVhZEdsb2JhbERhdGEmIHRocmVhZEdsb2JhbERhdGEoKTsKICAgICB9OwogCisjaWYgVVNFKFdF
Ql9USFJFQUQpCitUaHJlYWRHbG9iYWxEYXRhJiB0aHJlYWRHbG9iYWxEYXRhKCk7CisjZWxzZQog
VGhyZWFkR2xvYmFsRGF0YSYgdGhyZWFkR2xvYmFsRGF0YSgpIFBVUkVfRlVOQ1RJT047CisjZW5k
aWYKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vVGhyZWFkVGltZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RocmVhZFRpbWVycy5jcHAKaW5kZXggODQ2NDQwZmYyNWRjYjJlMzQ3OWY1NGVlMjNiNjAzMTY4
YzU2YTRmYy4uNzg5Mzc4Y2UzZmViNGUzYjBjY2Y0MGI3NTdiZjUzZjE4Y2M1MzkzMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkVGltZXJzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRUaW1lcnMuY3BwCkBAIC0zMyw2ICszMywxMCBAQAog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRmlyZSB0aW1lcnMgZm9yIHRoaXMgbGVuZ3Ro
IG9mIHRpbWUsIGFuZCB0aGVuIHF1aXQgdG8gbGV0IHRoZSBydW4gbG9vcCBwcm9jZXNzIHVzZXIg
aW5wdXQgZXZlbnRzLgpAQCAtNTQsNyArNTgsNyBAQCBUaHJlYWRUaW1lcnM6OlRocmVhZFRpbWVy
cygpCiAgICAgLCBtX2ZpcmluZ1RpbWVycyhmYWxzZSkKICAgICAsIG1fcGVuZGluZ1NoYXJlZFRp
bWVyRmlyZVRpbWUoMCkKIHsKLSAgICBpZiAoaXNNYWluVGhyZWFkKCkpCisgICAgaWYgKGlzVUlU
aHJlYWQoKSkKICAgICAgICAgc2V0U2hhcmVkVGltZXIobWFpblRocmVhZFNoYXJlZFRpbWVyKCkp
OwogfQogCkBAIC0xMDUsNiArMTA5LDcgQEAgdm9pZCBUaHJlYWRUaW1lcnM6OnNoYXJlZFRpbWVy
RmlyZWQoKQogCiB2b2lkIFRocmVhZFRpbWVyczo6c2hhcmVkVGltZXJGaXJlZEludGVybmFsKCkK
IHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkgfHwgIWlzV2ViVGhyZWFkKCkgJiYgIWlzVUlU
aHJlYWQoKSk7CiAgICAgLy8gRG8gYSByZS1lbnRyYW5jeSBjaGVjay4KICAgICBpZiAobV9maXJp
bmdUaW1lcnMpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1RpbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmNwcAppbmRl
eCAzMWE0MDVkNzAwZGUzZDE5N2U1ZmRiMTE1NGRiYmZlMTY5ZDZkOGE2Li5hODczNzMwNDNiZTQx
ZTg4MTM3MTAwZWY5NDk4ZmJkYjZmYTA5YzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9UaW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGltZXIuY3Bw
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTIwOSw3ICsyMTAsNyBAQCBUaW1lckJhc2U6On5UaW1lckJhc2UoKQogCiB2b2lkIFRpbWVy
QmFzZTo6c3RhcnQoZG91YmxlIG5leHRGaXJlSW50ZXJ2YWwsIGRvdWJsZSByZXBlYXRJbnRlcnZh
bCkKIHsKLSAgICBBU1NFUlQobV90aHJlYWQgPT0gY3VycmVudFRocmVhZCgpKTsKKyAgICBBU1NF
UlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdGhyZWFkKSk7CiAKICAgICBt
X3JlcGVhdEludGVydmFsID0gcmVwZWF0SW50ZXJ2YWw7CiAgICAgc2V0TmV4dEZpcmVUaW1lKG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgbmV4dEZpcmVJbnRlcnZhbCk7CkBAIC0yMTcs
NyArMjE4LDcgQEAgdm9pZCBUaW1lckJhc2U6OnN0YXJ0KGRvdWJsZSBuZXh0RmlyZUludGVydmFs
LCBkb3VibGUgcmVwZWF0SW50ZXJ2YWwpCiAKIHZvaWQgVGltZXJCYXNlOjpzdG9wKCkKIHsKLSAg
ICBBU1NFUlQobV90aHJlYWQgPT0gY3VycmVudFRocmVhZCgpKTsKKyAgICBBU1NFUlQoY2FuQWNj
ZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdGhyZWFkKSk7CiAKICAgICBtX3JlcGVhdElu
dGVydmFsID0gMDsKICAgICBzZXROZXh0RmlyZVRpbWUoMCk7CkBAIC0zNjgsNyArMzY5LDcgQEAg
dm9pZCBUaW1lckJhc2U6OnVwZGF0ZUhlYXBJZk5lZWRlZChkb3VibGUgb2xkVGltZSkKIAogdm9p
ZCBUaW1lckJhc2U6OnNldE5leHRGaXJlVGltZShkb3VibGUgbmV3VW5hbGlnbmVkVGltZSkKIHsK
LSAgICBBU1NFUlQobV90aHJlYWQgPT0gY3VycmVudFRocmVhZCgpKTsKKyAgICBBU1NFUlQoY2Fu
QWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdGhyZWFkKSk7CiAgICAgQVNTRVJUKCFt
X3dhc0RlbGV0ZWQpOwogCiAgICAgaWYgKG1fdW5hbGlnbmVkTmV4dEZpcmVUaW1lICE9IG5ld1Vu
YWxpZ25lZFRpbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGltZXIuaAppbmRleCA2OWU5ZWQ1MjcxNzBkZDM1
YzgzZDE0OGFkYjkwMWNmNzcwMDRjNThhLi4xNjE0YmQxM2FjYTVkMjc2YTI2MWE3NDBiOThjNDVm
YTdlMzU5MDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmgKQEAgLTMwLDYgKzMwLDEwIEBACiAj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lm
IFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAvLyBUaW1lIGludGVydmFscyBhcmUgYWxsIGluIHNlY29uZHMu
CkBAIC0xMjAsNyArMTI0LDE4IEBAIHByaXZhdGU6CiAKIGlubGluZSBib29sIFRpbWVyQmFzZTo6
aXNBY3RpdmUoKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBXcml0ZSB0aGlzIGluIHRlcm1zIG9m
IFVTRShXRUJfVEhSRUFEKSBpbnN0ZWFkIG9mIFBMQVRGT1JNKElPUykuCisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBBU1NFUlQobV90aHJlYWQgPT0gY3VycmVudFRocmVhZCgpKTsKKyNlbHNlCisg
ICAgLy8gT24gaU9TIHRpbWVycyBhcmUgYWx3YXlzIHJ1biBvbiB0aGUgbWFpbiB0aHJlYWQgb3Ig
dGhlIFdlYiBUaHJlYWQuCisgICAgLy8gVW5sZXNzIHdlIGhhdmUgd29ya2VycyBlbmFibGVkIGlu
IHdoaWNoIGNhc2UgdGltZXJzIGNhbiBydW4gb24gb3RoZXIgdGhyZWFkcy4KKyNpZiBFTkFCTEUo
V09SS0VSUykKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkgfHwgcHRocmVhZF9tYWlu
X25wKCkgfHwgbV90aHJlYWQgPT0gY3VycmVudFRocmVhZCgpKTsKKyNlbHNlCisgICAgQVNTRVJU
KFdlYlRocmVhZElzQ3VycmVudCgpIHx8IHB0aHJlYWRfbWFpbl9ucCgpKTsKKyNlbmRpZgorI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykKICAgICByZXR1cm4gbV9uZXh0RmlyZVRpbWU7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9VUkwuY3BwCmluZGV4IDViN2NkM2E1NWFhNjAzMTZhZDg5YmQ2YTA0YzRmYTAw
NDM4YTYxYjYuLjMzNzg3OGU4MWI2Mjk0Y2M5MDBlNDJmOWUwODRjYTBiMGFhN2YxOGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVVJMLmNwcApAQCAtOTg2LDkgKzk4NiwyNyBAQCB2b2lkIFVSTDo6cGFyc2Uo
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgcGFyc2UoYnVmZmVyLmRhdGEoKSwgJnN0cmluZyk7
CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgYm9vbCBzaG91bGRDYW5vbmljYWxpemVT
Y2hlbWUgPSB0cnVlOworCit2b2lkIGVuYWJsZVVSTFNjaGVtZUNhbm9uaWNhbGl6YXRpb24oYm9v
bCBlbmFibGVTY2hlbWVDYW5vbmljYWxpemF0aW9uKQoreworICAgIHNob3VsZENhbm9uaWNhbGl6
ZVNjaGVtZSA9IGVuYWJsZVNjaGVtZUNhbm9uaWNhbGl6YXRpb247Cit9CisjZW5kaWYKKwogdGVt
cGxhdGU8c2l6ZV90IGxlbmd0aD4KIHN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbChjb25zdCBjaGFy
KiBhLCBjb25zdCBjaGFyICgmYilbbGVuZ3RoXSkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
aWYgKCFzaG91bGRDYW5vbmljYWxpemVTY2hlbWUpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHRvQVNDSUlMb3dlcihhW2ld
KSAhPSBiW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmIChhW2ldICE9IGJbaV0pCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xMjYyLDggKzEyODAsMTggQEAgdm9pZCBVUkw6OnBhcnNlKGNv
bnN0IGNoYXIqIHVybCwgY29uc3QgU3RyaW5nKiBvcmlnaW5hbFN0cmluZykKIAogICAgIC8vIGNv
cHkgaW4gdGhlIHNjaGVtZQogICAgIGNvbnN0IGNoYXIgKnNjaGVtZUVuZFB0ciA9IHVybCArIHNj
aGVtZUVuZDsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKHNob3VsZENhbm9uaWNhbGl6ZVNj
aGVtZSB8fCBtX3Byb3RvY29sSXNJbkhUVFBGYW1pbHkpIHsKKyAgICAgICAgd2hpbGUgKHN0clB0
ciA8IHNjaGVtZUVuZFB0cikKKyAgICAgICAgICAgICpwKysgPSB0b0FTQ0lJTG93ZXIoKnN0clB0
cisrKTsKKyAgICB9IGVsc2UgeworICAgICAgICB3aGlsZSAoc3RyUHRyIDwgc2NoZW1lRW5kUHRy
KQorICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsKKyAgICB9CisjZWxzZQogICAgIHdoaWxl
IChzdHJQdHIgPCBzY2hlbWVFbmRQdHIpCiAgICAgICAgICpwKysgPSB0b0FTQ0lJTG93ZXIoKnN0
clB0cisrKTsKKyNlbmRpZgogICAgIG1fc2NoZW1lRW5kID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAK
ICAgICBib29sIGhvc3RJc0xvY2FsSG9zdCA9IHBvcnRFbmQgLSB1c2VyU3RhcnQgPT0gOQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9VUkwuaAppbmRleCBjMTMyOWViNGMyMzJmNGFiMTA4YmI3N2RmOThkYjBjMjY1YjBh
NDE1Li43MTNiZGNlOTE4NzNmMGI1YmFkMDI0MGJkMjJhNzUzYjY5NWUyNDI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9VUkwuaApAQCAtMzMyLDYgKzMzMiwxMCBAQCBpbmxpbmUgdW5zaWduZWQgVVJMOjpwYXRo
QWZ0ZXJMYXN0U2xhc2goKSBjb25zdAogICAgIHJldHVybiBtX3BhdGhBZnRlckxhc3RTbGFzaDsK
IH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgZW5hYmxlVVJMU2NoZW1lQ2Fub25pY2FsaXph
dGlvbihib29sKTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFj
ZSBXVEYgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAppbmRleCA0MDBmNmUwZWY5NDhhOWY1N2E1
ZWFmMGUxOTk3NTZmZWE0NjhkN2U1Li42M2I2M2Y1OTFkZmU5NWJhMDBmYjVmOThiYmRkNTZkNTNl
ZGRjZjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaApAQCAtMjcsNiArMjcsMTIgQEAKICNp
Zm5kZWYgV2lkZ2V0X2gKICNkZWZpbmUgV2lkZ2V0X2gKIAorI2lmIFBMQVRGT1JNKElPUykKKyNp
Zm5kZWYgTlNWaWV3CisjZGVmaW5lIE5TVmlldyBXQUtWaWV3CisjZW5kaWYKKyNlbmRpZgorCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTE5MCw2ICsxOTYsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHJlbW92ZUZyb21TdXBlcnZpZXcoKTsKICNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2
b2lkIGFkZFRvU3VwZXJ2aWV3KE5TVmlldyopOworI2VuZGlmCiAKICNpZiBQTEFURk9STShFRkwp
CiAgICAgdm9pZCBzZXRFdmFzT2JqZWN0KEV2YXNfT2JqZWN0Kik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAK
aW5kZXggZjkzMjZlYTkyOGFlYWM3MmM5ZTNkOGYzMjg4M2Q4MzI3OWUxNDQ3Yy4uYmVkZjg4ZjAw
MDM4N2M4YjBlMTdmMjhlMDljYjEyZTliN2FiMjFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcApAQCAt
MjksOSArMjksNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoV0VCX0FV
RElPKQotCi0jaWYgUExBVEZPUk0oSU9TKQorI2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFBMQVRG
T1JNKElPUykKIAogI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25JT1MuaCIKIApAQCAtMjYyLDYg
KzI2MCw1IEBAIHZvaWQgQXVkaW9EZXN0aW5hdGlvbklPUzo6ZnJhbWVTaXplQ2hhbmdlZFByb2Mo
dm9pZCAqaW5SZWZDb24sIEF1ZGlvVW5pdCwgQXVkaW9VCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElP
KSAmJiBQTEFURk9STShJT1MpCiAKLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25J
T1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9u
SU9TLmgKaW5kZXggZjBlZWVjYTE5Nzg2YzI4NGFlNjM0YjljN2VhOTE3MjlkNDkzMzQyZC4uOGI2
OGE2YWM4MzRlNWI2ODE1YmJhMmM4MDA0MTUwODNlOTQyOWQzNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5oCkBA
IC03NiwzICs3Niw0IEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBBdWRpb0Rlc3RpbmF0aW9uSU9TX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9GaWxlUmVhZGVySU9TLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
Yjg1OWZiNmI2NDZjNDRmMjVlODFjMzJmMTk5YWFkOGRjMDg3MGYyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5j
cHAKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF1ZGlv
RmlsZVJlYWRlcklPUy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgUExBVEZPUk0oSU9T
KQorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXIuaCIK
KyNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVG
b3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKEF1ZGlvVG9vbGJveCkK
K1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvRmlsZUNsb3NlLCBPU1N0YXR1cywgKEF1ZGlv
RmlsZUlEIGluQXVkaW9GaWxlKSwgKGluQXVkaW9GaWxlKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xi
b3gsIEF1ZGlvRmlsZU9wZW5XaXRoQ2FsbGJhY2tzLCBPU1N0YXR1cywgKHZvaWQgKmluQ2xpZW50
RGF0YSwgQXVkaW9GaWxlX1JlYWRQcm9jIGluUmVhZEZ1bmMsIEF1ZGlvRmlsZV9Xcml0ZVByb2Mg
aW5Xcml0ZUZ1bmMsIEF1ZGlvRmlsZV9HZXRTaXplUHJvYyBpbkdldFNpemVGdW5jLCBBdWRpb0Zp
bGVfU2V0U2l6ZVByb2MgaW5TZXRTaXplRnVuYywgQXVkaW9GaWxlVHlwZUlEIGluRmlsZVR5cGVI
aW50LCBBdWRpb0ZpbGVJRCAqb3V0QXVkaW9GaWxlKSwgKGluQ2xpZW50RGF0YSwgaW5SZWFkRnVu
YywgaW5Xcml0ZUZ1bmMsIGluR2V0U2l6ZUZ1bmMsIGluU2V0U2l6ZUZ1bmMsIGluRmlsZVR5cGVI
aW50LCBvdXRBdWRpb0ZpbGUpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxl
RGlzcG9zZSwgT1NTdGF0dXMsIChFeHRBdWRpb0ZpbGVSZWYgaW5FeHRBdWRpb0ZpbGUpLCAoaW5F
eHRBdWRpb0ZpbGUpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlR2V0UHJv
cGVydHksIE9TU3RhdHVzLCAoRXh0QXVkaW9GaWxlUmVmIGluRXh0QXVkaW9GaWxlLCBFeHRBdWRp
b0ZpbGVQcm9wZXJ0eUlEIGluUHJvcGVydHlJRCwgVUludDMyICppb1Byb3BlcnR5RGF0YVNpemUs
IHZvaWQgKm91dFByb3BlcnR5RGF0YSksIChpbkV4dEF1ZGlvRmlsZSwgaW5Qcm9wZXJ0eUlELCBp
b1Byb3BlcnR5RGF0YVNpemUsIG91dFByb3BlcnR5RGF0YSkpCitTT0ZUX0xJTksoQXVkaW9Ub29s
Ym94LCBFeHRBdWRpb0ZpbGVSZWFkLCBPU1N0YXR1cywgKEV4dEF1ZGlvRmlsZVJlZiBpbkV4dEF1
ZGlvRmlsZSwgVUludDMyICppb051bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0ICppb0RhdGEp
LCAoaW5FeHRBdWRpb0ZpbGUsIGlvTnVtYmVyRnJhbWVzLCBpb0RhdGEpKQorU09GVF9MSU5LKEF1
ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlU2V0UHJvcGVydHksIE9TU3RhdHVzLCAoRXh0QXVkaW9G
aWxlUmVmIGluRXh0QXVkaW9GaWxlLCBFeHRBdWRpb0ZpbGVQcm9wZXJ0eUlEIGluUHJvcGVydHlJ
RCwgVUludDMyIGluUHJvcGVydHlEYXRhU2l6ZSwgY29uc3Qgdm9pZCAqaW5Qcm9wZXJ0eURhdGEp
LCAoaW5FeHRBdWRpb0ZpbGUsIGluUHJvcGVydHlJRCwgaW5Qcm9wZXJ0eURhdGFTaXplLCBpblBy
b3BlcnR5RGF0YSkpCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBFeHRBdWRpb0ZpbGVXcmFwQXVk
aW9GaWxlSUQsIE9TU3RhdHVzLCAoQXVkaW9GaWxlSUQgaW5GaWxlSUQsIEJvb2xlYW4gaW5Gb3JX
cml0aW5nLCBFeHRBdWRpb0ZpbGVSZWYgKm91dEV4dEF1ZGlvRmlsZSksIChpbkZpbGVJRCwgaW5G
b3JXcml0aW5nLCBvdXRFeHRBdWRpb0ZpbGUpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgRXh0
QXVkaW9GaWxlT3BlblVSTCwgT1NTdGF0dXMsIChDRlVSTFJlZiBpblVSTCwgRXh0QXVkaW9GaWxl
UmVmKiBvdXRFeHRBdWRpb0ZpbGUpLCAoaW5VUkwsIG91dEV4dEF1ZGlvRmlsZSkpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBBdWRpb0J1ZmZlckxp
c3QqIGNyZWF0ZUF1ZGlvQnVmZmVyTGlzdChzaXplX3QgbnVtYmVyT2ZCdWZmZXJzKQoreworICAg
IENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gYnVmZmVyTGlzdFNpemUgPSBzaXplb2Yo
QXVkaW9CdWZmZXJMaXN0KSAtIHNpemVvZihBdWRpb0J1ZmZlcik7CisgICAgYnVmZmVyTGlzdFNp
emUgKz0gbnVtYmVyT2ZCdWZmZXJzICogc2l6ZW9mKEF1ZGlvQnVmZmVyKTsKKworICAgIEF1ZGlv
QnVmZmVyTGlzdCogYnVmZmVyTGlzdCA9IHN0YXRpY19jYXN0PEF1ZGlvQnVmZmVyTGlzdCo+KGNh
bGxvYygxLCBidWZmZXJMaXN0U2l6ZS51bnNhZmVHZXQoKSkpOworICAgIGlmIChidWZmZXJMaXN0
KQorICAgICAgICBidWZmZXJMaXN0LT5tTnVtYmVyQnVmZmVycyA9IG51bWJlck9mQnVmZmVyczsK
KyAgICByZXR1cm4gYnVmZmVyTGlzdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lB
dWRpb0J1ZmZlckxpc3QoQXVkaW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0KQoreworICAgIGZyZWUo
YnVmZmVyTGlzdCk7Cit9CisKK0F1ZGlvRmlsZVJlYWRlcjo6QXVkaW9GaWxlUmVhZGVyKGNvbnN0
IGNoYXIqIGZpbGVQYXRoKQorICAgIDogbV9kYXRhKDApCisgICAgLCBtX2RhdGFTaXplKDApCisg
ICAgLCBtX2F1ZGlvRmlsZUlEKDApCisgICAgLCBtX2V4dEF1ZGlvRmlsZVJlZihudWxscHRyKQor
eworICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsUmVmID0gYWRvcHRDRihDRlVSTENyZWF0ZUZy
b21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBVSW50OCo+KGZpbGVQYXRoKSwgc3RybGVuKGZpbGVQYXRoKSwgZmFsc2Up
KTsKKyAgICBpZiAoIXVybFJlZikKKyAgICAgICAgcmV0dXJuOworICAgIEV4dEF1ZGlvRmlsZU9w
ZW5VUkwodXJsUmVmLmdldCgpLCAmbV9leHRBdWRpb0ZpbGVSZWYpOworfQorCitBdWRpb0ZpbGVS
ZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcihjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUp
CisgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0YVNpemUoZGF0YVNpemUpCisgICAgLCBt
X2F1ZGlvRmlsZUlEKDApCisgICAgLCBtX2V4dEF1ZGlvRmlsZVJlZihudWxscHRyKQoreworICAg
IGlmIChBdWRpb0ZpbGVPcGVuV2l0aENhbGxiYWNrcyh0aGlzLCByZWFkUHJvYywgMCwgZ2V0U2l6
ZVByb2MsIDAsIDAsICZtX2F1ZGlvRmlsZUlEKSAhPSBub0VycikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKEV4dEF1ZGlvRmlsZVdyYXBBdWRpb0ZpbGVJRChtX2F1ZGlvRmlsZUlELCBmYWxz
ZSwgJm1fZXh0QXVkaW9GaWxlUmVmKSAhPSBub0VycikKKyAgICAgICAgbV9leHRBdWRpb0ZpbGVS
ZWYgPSBudWxscHRyOworfQorCitBdWRpb0ZpbGVSZWFkZXI6On5BdWRpb0ZpbGVSZWFkZXIoKQor
eworICAgIGlmIChtX2V4dEF1ZGlvRmlsZVJlZikKKyAgICAgICAgRXh0QXVkaW9GaWxlRGlzcG9z
ZShtX2V4dEF1ZGlvRmlsZVJlZik7CisKKyAgICBtX2V4dEF1ZGlvRmlsZVJlZiA9IG51bGxwdHI7
CisKKyAgICBpZiAobV9hdWRpb0ZpbGVJRCkKKyAgICAgICAgQXVkaW9GaWxlQ2xvc2UobV9hdWRp
b0ZpbGVJRCk7CisKKyAgICBtX2F1ZGlvRmlsZUlEID0gMDsKK30KKworT1NTdGF0dXMgQXVkaW9G
aWxlUmVhZGVyOjpyZWFkUHJvYyh2b2lkKiBjbGllbnREYXRhLCBTSW50NjQgcG9zaXRpb24sIFVJ
bnQzMiByZXF1ZXN0Q291bnQsIHZvaWQqIGJ1ZmZlciwgVUludDMyKiBhY3R1YWxDb3VudCkKK3sK
KyAgICBBdWRpb0ZpbGVSZWFkZXIqIGF1ZGlvRmlsZVJlYWRlciA9IHN0YXRpY19jYXN0PEF1ZGlv
RmlsZVJlYWRlcio+KGNsaWVudERhdGEpOworCisgICAgc2l6ZV90IGRhdGFTaXplID0gYXVkaW9G
aWxlUmVhZGVyLT5kYXRhU2l6ZSgpOworICAgIGNvbnN0IHZvaWQqIGRhdGEgPSBhdWRpb0ZpbGVS
ZWFkZXItPmRhdGEoKTsKKyAgICBzaXplX3QgYnl0ZXNUb1JlYWQgPSAwOworCisgICAgaWYgKHN0
YXRpY19jYXN0PFVJbnQ2ND4ocG9zaXRpb24pIDwgZGF0YVNpemUpIHsKKyAgICAgICAgc2l6ZV90
IGJ5dGVzQXZhaWxhYmxlID0gZGF0YVNpemUgLSBzdGF0aWNfY2FzdDxzaXplX3Q+KHBvc2l0aW9u
KTsKKyAgICAgICAgYnl0ZXNUb1JlYWQgPSByZXF1ZXN0Q291bnQgPD0gYnl0ZXNBdmFpbGFibGUg
PyByZXF1ZXN0Q291bnQgOiBieXRlc0F2YWlsYWJsZTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwg
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpICsgcG9zaXRpb24sIGJ5dGVzVG9SZWFkKTsK
KyAgICB9CisKKyAgICBpZiAoYWN0dWFsQ291bnQpCisgICAgICAgICphY3R1YWxDb3VudCA9IGJ5
dGVzVG9SZWFkOworCisgICAgcmV0dXJuIG5vRXJyOworfQorCitTSW50NjQgQXVkaW9GaWxlUmVh
ZGVyOjpnZXRTaXplUHJvYyh2b2lkKiBjbGllbnREYXRhKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxBdWRpb0ZpbGVSZWFkZXIqPihjbGllbnREYXRhKS0+ZGF0YVNpemUoKTsKK30KKworUGFz
c1JlZlB0cjxBdWRpb0J1cz4gQXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMoZmxvYXQgc2FtcGxl
UmF0ZSwgYm9vbCBtaXhUb01vbm8pCit7CisgICAgaWYgKCFtX2V4dEF1ZGlvRmlsZVJlZikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBHZXQgZmlsZSdzIGRhdGEgZm9ybWF0Cisg
ICAgVUludDMyIHNpemUgPSBzaXplb2YobV9maWxlRGF0YUZvcm1hdCk7CisgICAgaWYgKEV4dEF1
ZGlvRmlsZUdldFByb3BlcnR5KG1fZXh0QXVkaW9GaWxlUmVmLCBrRXh0QXVkaW9GaWxlUHJvcGVy
dHlfRmlsZURhdGFGb3JtYXQsICZzaXplLCAmbV9maWxlRGF0YUZvcm1hdCkgIT0gbm9FcnIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMgPSBt
X2ZpbGVEYXRhRm9ybWF0Lm1DaGFubmVsc1BlckZyYW1lOworCisgICAgLy8gTnVtYmVyIG9mIGZy
YW1lcworICAgIFNJbnQ2NCBudW1iZXJPZkZyYW1lczY0ID0gMDsKKyAgICBzaXplID0gc2l6ZW9m
KG51bWJlck9mRnJhbWVzNjQpOworICAgIGlmIChFeHRBdWRpb0ZpbGVHZXRQcm9wZXJ0eShtX2V4
dEF1ZGlvRmlsZVJlZiwga0V4dEF1ZGlvRmlsZVByb3BlcnR5X0ZpbGVMZW5ndGhGcmFtZXMsICZz
aXplLCAmbnVtYmVyT2ZGcmFtZXM2NCkgIT0gbm9FcnIpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgZG91YmxlIGZpbGVTYW1wbGVSYXRlID0gbV9maWxlRGF0YUZvcm1hdC5tU2FtcGxl
UmF0ZTsKKworICAgIC8vIE1ha2UgY2xpZW50IGZvcm1hdCBzYW1lIG51bWJlciBvZiBjaGFubmVs
cyBhcyBmaWxlIGZvcm1hdCwgYnV0IHR3ZWFrIGEgZmV3IHRoaW5ncy4KKyAgICAvLyBDbGllbnQg
Zm9ybWF0IHdpbGwgYmUgbGluZWFyIFBDTSAoY2Fub25pY2FsKSwgYW5kIHBvdGVudGlhbGx5IGNo
YW5nZSBzYW1wbGUtcmF0ZS4KKyAgICBtX2NsaWVudERhdGFGb3JtYXQgPSBtX2ZpbGVEYXRhRm9y
bWF0OworCisgICAgY29uc3QgaW50IGJ5dGVzUGVyRmxvYXQgPSBzaXplb2YoRmxvYXQzMik7Cisg
ICAgY29uc3QgaW50IGJpdHNQZXJCeXRlID0gODsKKyAgICBtX2NsaWVudERhdGFGb3JtYXQubUZv
cm1hdElEID0ga0F1ZGlvRm9ybWF0TGluZWFyUENNOworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5t
Rm9ybWF0RmxhZ3MgPSBrQXVkaW9Gb3JtYXRGbGFnc05hdGl2ZUZsb2F0UGFja2VkIHwga0F1ZGlv
Rm9ybWF0RmxhZ0lzTm9uSW50ZXJsZWF2ZWQ7CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1CeXRl
c1BlclBhY2tldCA9IGJ5dGVzUGVyRmxvYXQ7CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1GcmFt
ZXNQZXJQYWNrZXQgPSAxOworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tQnl0ZXNQZXJGcmFtZSA9
IGJ5dGVzUGVyRmxvYXQ7CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1DaGFubmVsc1BlckZyYW1l
ID0gbnVtYmVyT2ZDaGFubmVsczsKKyAgICBtX2NsaWVudERhdGFGb3JtYXQubUJpdHNQZXJDaGFu
bmVsID0gYml0c1BlckJ5dGUgKiBieXRlc1BlckZsb2F0OworCisgICAgaWYgKHNhbXBsZVJhdGUp
CisgICAgICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7CisK
KyAgICBpZiAoRXh0QXVkaW9GaWxlU2V0UHJvcGVydHkobV9leHRBdWRpb0ZpbGVSZWYsIGtFeHRB
dWRpb0ZpbGVQcm9wZXJ0eV9DbGllbnREYXRhRm9ybWF0LCBzaXplb2YoQXVkaW9TdHJlYW1CYXNp
Y0Rlc2NyaXB0aW9uKSwgJm1fY2xpZW50RGF0YUZvcm1hdCkgIT0gbm9FcnIpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgLy8gQ2hhbmdlIG51bWJlck9mRnJhbWVzNjQgdG8gZGVzdGlu
YXRpb24gc2FtcGxlLXJhdGUKKyAgICBudW1iZXJPZkZyYW1lczY0ID0gbnVtYmVyT2ZGcmFtZXM2
NCAqIChtX2NsaWVudERhdGFGb3JtYXQubVNhbXBsZVJhdGUgLyBmaWxlU2FtcGxlUmF0ZSk7Cisg
ICAgc2l6ZV90IG51bWJlck9mRnJhbWVzID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1iZXJPZkZy
YW1lczY0KTsKKworICAgIHNpemVfdCBidXNDaGFubmVsQ291bnQgPSBtaXhUb01vbm8gPyAxIDog
bnVtYmVyT2ZDaGFubmVsczsKKworICAgIC8vIENyZWF0ZSBBdWRpb0J1cyB3aGVyZSB3ZSdsbCBw
dXQgdGhlIFBDTSBhdWRpbyBkYXRhCisgICAgUmVmUHRyPEF1ZGlvQnVzPiBhdWRpb0J1cyA9IEF1
ZGlvQnVzOjpjcmVhdGUoYnVzQ2hhbm5lbENvdW50LCBudW1iZXJPZkZyYW1lcyk7CisgICAgYXVk
aW9CdXMtPnNldFNhbXBsZVJhdGUobV9jbGllbnREYXRhRm9ybWF0Lm1TYW1wbGVSYXRlKTsgLy8g
c2F2ZSBmb3IgbGF0ZXIKKworICAgIC8vIE9ubHkgYWxsb2NhdGVkIGluIHRoZSBtaXhUb01vbm8g
Y2FzZTsgZGVhbGxvY2F0ZWQgb24gZGVzdHJ1Y3Rpb24uCisgICAgQXVkaW9GbG9hdEFycmF5IGxl
ZnRDaGFubmVsOworICAgIEF1ZGlvRmxvYXRBcnJheSByaWdodENoYW5uZWw7CisKKyAgICBBdWRp
b0J1ZmZlckxpc3QqIGJ1ZmZlckxpc3QgPSBjcmVhdGVBdWRpb0J1ZmZlckxpc3QobnVtYmVyT2ZD
aGFubmVscyk7CisgICAgaWYgKCFidWZmZXJMaXN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBjb25zdCBzaXplX3QgYnVmZmVyU2l6ZSA9IG51bWJlck9mRnJhbWVzICogc2l6ZW9mKGZs
b2F0KTsKKworICAgIGlmIChtaXhUb01vbm8gJiYgbnVtYmVyT2ZDaGFubmVscyA9PSAyKSB7Cisg
ICAgICAgIGxlZnRDaGFubmVsLmFsbG9jYXRlKG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAgcmln
aHRDaGFubmVsLmFsbG9jYXRlKG51bWJlck9mRnJhbWVzKTsKKworICAgICAgICBidWZmZXJMaXN0
LT5tQnVmZmVyc1swXS5tTnVtYmVyQ2hhbm5lbHMgPSAxOworICAgICAgICBidWZmZXJMaXN0LT5t
QnVmZmVyc1swXS5tRGF0YUJ5dGVTaXplID0gYnVmZmVyU2l6ZTsKKyAgICAgICAgYnVmZmVyTGlz
dC0+bUJ1ZmZlcnNbMF0ubURhdGEgPSBsZWZ0Q2hhbm5lbC5kYXRhKCk7CisKKyAgICAgICAgYnVm
ZmVyTGlzdC0+bUJ1ZmZlcnNbMV0ubU51bWJlckNoYW5uZWxzID0gMTsKKyAgICAgICAgYnVmZmVy
TGlzdC0+bUJ1ZmZlcnNbMV0ubURhdGFCeXRlU2l6ZSA9IGJ1ZmZlclNpemU7CisgICAgICAgIGJ1
ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1EYXRhID0gcmlnaHRDaGFubmVsLmRhdGEoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1peFRvTW9ubyB8fCBudW1iZXJPZkNoYW5uZWxzID09
IDEpOworCisgICAgICAgIC8vIEZvciBUcnVlLXN0ZXJlbyAobnVtYmVyT2ZDaGFubmVscyA9PSA0
KQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkg
eworICAgICAgICAgICAgYXVkaW9CdXMtPmNoYW5uZWwoaSktPnplcm8oKTsKKyAgICAgICAgICAg
IGJ1ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1OdW1iZXJDaGFubmVscyA9IDE7CisgICAgICAgICAg
ICBidWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplID0gYnVmZmVyU2l6ZTsKKyAg
ICAgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1EYXRhID0gYXVkaW9CdXMtPmNoYW5u
ZWwoaSktPm11dGFibGVEYXRhKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZWFkIGZy
b20gdGhlIGZpbGUgKG9yIGluLW1lbW9yeSB2ZXJzaW9uKQorICAgIFVJbnQzMiBmcmFtZXNUb1Jl
YWQgPSBudW1iZXJPZkZyYW1lczsKKyAgICBpZiAoRXh0QXVkaW9GaWxlUmVhZChtX2V4dEF1ZGlv
RmlsZVJlZiwgJmZyYW1lc1RvUmVhZCwgYnVmZmVyTGlzdCkgIT0gbm9FcnIpIHsKKyAgICAgICAg
ZGVzdHJveUF1ZGlvQnVmZmVyTGlzdChidWZmZXJMaXN0KTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgaWYgKG1peFRvTW9ubyAmJiBudW1iZXJPZkNoYW5uZWxzID09IDIp
IHsKKyAgICAgICAgLy8gTWl4IHN0ZXJlbyBkb3duIHRvIG1vbm8KKyAgICAgICAgZmxvYXQqIGRl
c3RMID0gYXVkaW9CdXMtPmNoYW5uZWwoMCktPm11dGFibGVEYXRhKCk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGcmFtZXM7ICsraSkKKyAgICAgICAgICAgIGRlc3RM
W2ldID0gMC41ZiAqIChsZWZ0Q2hhbm5lbFtpXSArIHJpZ2h0Q2hhbm5lbFtpXSk7CisgICAgfQor
CisgICAgZGVzdHJveUF1ZGlvQnVmZmVyTGlzdChidWZmZXJMaXN0KTsKKworICAgIHJldHVybiBh
dWRpb0J1cy5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zy
b21BdWRpb0ZpbGUoY29uc3QgY2hhciogZmlsZVBhdGgsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBz
YW1wbGVSYXRlKQoreworICAgIEF1ZGlvRmlsZVJlYWRlciByZWFkZXIoZmlsZVBhdGgpOworICAg
IHJldHVybiByZWFkZXIuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7Cit9CisKK1Bh
c3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZShjb25zdCB2
b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVS
YXRlKQoreworICAgIEF1ZGlvRmlsZVJlYWRlciByZWFkZXIoZGF0YSwgZGF0YVNpemUpOworICAg
IHJldHVybiByZWFkZXIuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7Cit9CisKK30g
Ly8gV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykgJiYgUExBVEZPUk0oSU9T
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmls
ZVJlYWRlcklPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmls
ZVJlYWRlcklPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlZjU2OTMzZWZkN2VhODdhZDViY2VlOTc4M2EwMzZh
MDY5Njg5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9pb3MvQXVkaW9GaWxlUmVhZGVySU9TLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlv
RmlsZVJlYWRlcklPU19oCisjZGVmaW5lIEF1ZGlvRmlsZVJlYWRlcklPU19oCisKKyNpbmNsdWRl
IDxBdWRpb1Rvb2xib3gvQXVkaW9GaWxlLmg+CisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0V4dGVu
ZGVkQXVkaW9GaWxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1czsKKworLy8gV3JhcHBlciBjbGFzcyBmb3IgQXVk
aW9GaWxlIGFuZCBFeHRBdWRpb0ZpbGUgQ29yZUF1ZGlvIEFQSXMgZm9yIHJlYWRpbmcgZmlsZXMg
YW5kIGluLW1lbW9yeSB2ZXJzaW9ucyBvZiB0aGVtLi4uCisKK2NsYXNzIEF1ZGlvRmlsZVJlYWRl
ciB7CitwdWJsaWM6CisgICAgQXVkaW9GaWxlUmVhZGVyKGNvbnN0IGNoYXIqIGZpbGVQYXRoKTsK
KyAgICBBdWRpb0ZpbGVSZWFkZXIoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplKTsK
KyAgICB+QXVkaW9GaWxlUmVhZGVyKCk7CisKKyAgICBQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVh
dGVCdXMoZmxvYXQgc2FtcGxlUmF0ZSwgYm9vbCBtaXhUb01vbm8pOyAvLyBSZXR1cm5zIG51bGxw
dHIgb24gZXJyb3IKKworICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGE7IH0KKyAgICBzaXplX3QgZGF0YVNpemUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFTaXplOyB9
CisKK3ByaXZhdGU6CisgICAgc3RhdGljIE9TU3RhdHVzIHJlYWRQcm9jKHZvaWQqIGNsaWVudERh
dGEsIFNJbnQ2NCBwb3NpdGlvbiwgVUludDMyIHJlcXVlc3RDb3VudCwgdm9pZCogYnVmZmVyLCBV
SW50MzIqIGFjdHVhbENvdW50KTsKKyAgICBzdGF0aWMgU0ludDY0IGdldFNpemVQcm9jKHZvaWQq
IGNsaWVudERhdGEpOworCisgICAgY29uc3Qgdm9pZCogbV9kYXRhOworICAgIHNpemVfdCBtX2Rh
dGFTaXplOworCisgICAgQXVkaW9GaWxlSUQgbV9hdWRpb0ZpbGVJRDsKKyAgICBFeHRBdWRpb0Zp
bGVSZWYgbV9leHRBdWRpb0ZpbGVSZWY7CisKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24gbV9maWxlRGF0YUZvcm1hdDsKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gbV9j
bGllbnREYXRhRm9ybWF0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gQXVkaW9GaWxlUmVhZGVySU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2lvcy9BdWRpb1Nlc3Npb25JT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9pb3MvQXVkaW9TZXNzaW9uSU9TLm1tCmluZGV4IDc5ZTI2MWFhMGY4YTRiODc1Y2Y0
Y2U1MjlmZTM1NDY1Yjg0MzJiNzkuLjM0OWMxZjVkODM5M2M1M2VkNDgwODlmYzhlNGRhMTVhM2Q4
MTY4Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRp
b1Nlc3Npb25JT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1
ZGlvU2Vzc2lvbklPUy5tbQpAQCAtNDIsNyArNDIsNiBAQCBTT0ZUX0xJTktfUE9JTlRFUihBVkZv
dW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlQbGF5YmFjaywgTlNTdHJpbmcgKikKIFNP
RlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZBdWRpb1Nlc3Npb25DYXRlZ29yeVJlY29y
ZCwgTlNTdHJpbmcgKikKIFNPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZBdWRpb1Nl
c3Npb25DYXRlZ29yeVBsYXlBbmRSZWNvcmQsIE5TU3RyaW5nICopCiBTT0ZUX0xJTktfUE9JTlRF
UihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlBdWRpb1Byb2Nlc3NpbmcsIE5T
U3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9u
SW50ZXJydXB0aW9uTm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKQogU09GVF9MSU5LX1BPSU5URVIo
QVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXksIE5TU3RyaW5n
ICopCiAKICNkZWZpbmUgQVZBdWRpb1Nlc3Npb24gZ2V0QVZBdWRpb1Nlc3Npb25DbGFzcygpCkBA
IC01Miw5ICs1MSwxNCBAQCBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9T
ZXNzaW9uSW50ZXJydXB0aW9uVHlwZUtleSwgTlNTdHJpbmcgKikKICNkZWZpbmUgQVZBdWRpb1Nl
c3Npb25DYXRlZ29yeVJlY29yZCBnZXRBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5UmVjb3JkKCkKICNk
ZWZpbmUgQVZBdWRpb1Nlc3Npb25DYXRlZ29yeVBsYXlBbmRSZWNvcmQgZ2V0QVZBdWRpb1Nlc3Np
b25DYXRlZ29yeVBsYXlBbmRSZWNvcmQoKQogI2RlZmluZSBBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5
QXVkaW9Qcm9jZXNzaW5nIGdldEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlBdWRpb1Byb2Nlc3Npbmco
KQotI2RlZmluZSBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiBnZXRBVkF1
ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbigpCiAjZGVmaW5lIEFWQXVkaW9TZXNz
aW9uSW50ZXJydXB0aW9uVHlwZUtleSBnZXRBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVL
ZXkoKQogCitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXQ0FWQXVkaW9TZXNzaW9uSW50ZXJydXB0
aW9uTm90aWZpY2F0aW9uID0gQCJBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlv
biI7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRp
b24sIEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uTm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKQor
I2VuZGlmCisKIEBpbnRlcmZhY2UgV2ViQXVkaW9TZXNzaW9uSGVscGVyIDogTlNPYmplY3Qgewog
ICAgIFdlYkNvcmU6OkF1ZGlvU2Vzc2lvbiogX2NhbGxiYWNrOwogfQpAQCAtNzEsMTkgKzc1LDI1
IEBAIFNPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZBdWRpb1Nlc3Npb25JbnRlcnJ1
cHRpb25UeXBlS2V5LCBOU1N0cmluZyAqKQogCiAgICAgX2NhbGxiYWNrID0gY2FsbGJhY2s7CiAK
LSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNl
bGYgc2VsZWN0b3I6QHNlbGVjdG9yKGludGVycnVwdGlvbjopIG5hbWU6QVZBdWRpb1Nlc3Npb25J
bnRlcnJ1cHRpb25Ob3RpZmljYXRpb24gb2JqZWN0OltBVkF1ZGlvU2Vzc2lvbiBzaGFyZWRJbnN0
YW5jZV1dOworICAgIEFTU0VSVChbV0NBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNh
dGlvbiBpc0VxdWFsVG9TdHJpbmc6Z2V0QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmlj
YXRpb24oKV0pOworCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBh
ZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihpbnRlcnJ1cHRpb246KSBuYW1lOldD
QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24gb2JqZWN0Om5pbF07CiAKICAg
ICByZXR1cm4gc2VsZjsKIH0KIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKKyAgICBbW05T
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFt
ZTpXQ0FWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwog
ICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAogLSAodm9pZClpbnRlcnJ1cHRpb246KE5TTm90aWZp
Y2F0aW9uICopbm90aWZpY2F0aW9uCiB7CisgICAgQVNTRVJUKFtBVkF1ZGlvU2Vzc2lvbiBzaGFy
ZWRJbnN0YW5jZV0gPT0gW25vdGlmaWNhdGlvbiBvYmplY3RdKTsKKyAgICBpZiAoW0FWQXVkaW9T
ZXNzaW9uIHNoYXJlZEluc3RhbmNlXSAhPSBbbm90aWZpY2F0aW9uIG9iamVjdF0pCisgICAgICAg
IHJldHVybjsKKwogICAgIE5TVUludGVnZXIgdHlwZSA9IFtbW25vdGlmaWNhdGlvbiB1c2VySW5m
b10gb2JqZWN0Rm9yS2V5OkFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uVHlwZUtleV0gdW5zaWdu
ZWRJbnRlZ2VyVmFsdWVdOwogICAgIGlmICh0eXBlID09IEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0
aW9uVHlwZUJlZ2FuKQogICAgICAgICBfY2FsbGJhY2stPmJlZ2FuQXVkaW9JbnRlcnJ1cHRpb24o
KTsKQEAgLTEzMywxOSArMTQzLDI2IEBAIHZvaWQgQXVkaW9TZXNzaW9uOjpzZXRDYXRlZ29yeShD
YXRlZ29yeVR5cGUgbmV3Q2F0ZWdvcnkpCiAgICAgc3dpdGNoIChuZXdDYXRlZ29yeSkgewogICAg
IGNhc2UgQW1iaWVudFNvdW5kOgogICAgICAgICBjYXRlZ29yeVN0cmluZyA9IEFWQXVkaW9TZXNz
aW9uQ2F0ZWdvcnlBbWJpZW50OworICAgICAgICBicmVhazsKICAgICBjYXNlIFNvbG9BbWJpZW50
U291bmQ6CiAgICAgICAgIGNhdGVnb3J5U3RyaW5nID0gQVZBdWRpb1Nlc3Npb25DYXRlZ29yeVNv
bG9BbWJpZW50OworICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhUGxheWJhY2s6CiAgICAg
ICAgIGNhdGVnb3J5U3RyaW5nID0gQVZBdWRpb1Nlc3Npb25DYXRlZ29yeVBsYXliYWNrOworICAg
ICAgICBicmVhazsKICAgICBjYXNlIFJlY29yZEF1ZGlvOgogICAgICAgICBjYXRlZ29yeVN0cmlu
ZyA9IEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlSZWNvcmQ7CisgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgUGxheUFuZFJlY29yZDoKICAgICAgICAgY2F0ZWdvcnlTdHJpbmcgPSBBVkF1ZGlvU2Vzc2lv
bkNhdGVnb3J5UGxheUFuZFJlY29yZDsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBdWRpb1By
b2Nlc3Npbmc6CiAgICAgICAgIGNhdGVnb3J5U3RyaW5nID0gQVZBdWRpb1Nlc3Npb25DYXRlZ29y
eUF1ZGlvUHJvY2Vzc2luZzsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb25lOgogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIGNhdGVnb3J5U3RyaW5nID0gbmlsOworICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CiAgICAgW1tBVkF1ZGlvU2Vzc2lvbiBzaGFy
ZWRJbnN0YW5jZV0gc2V0Q2F0ZWdvcnk6Y2F0ZWdvcnlTdHJpbmcgZXJyb3I6JmVycm9yXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0
aW9uTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3Rp
bmF0aW9uTWFjLmNwcAppbmRleCBiMGVkYTgxNWUzYzU5NzRkNWNhY2MyNzY0YjA3MmZhNmI4OGQ2
NTMxLi4zYzc2Y2Y1MzRlOTYyNWQzYTA5ZTFkNjU0YzBlMzBiYjZmOTFmZDc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRp
b25NYWMuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQogCisj
aWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQorCiAjaW5jbHVkZSAiQXVkaW9EZXN0
aW5hdGlvbk1hYy5oIgogCiAjaW5jbHVkZSAiQXVkaW9JT0NhbGxiYWNrLmgiCkBAIC0xODEsNCAr
MTgzLDYgQEAgT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbk1hYzo6aW5wdXRQcm9jKHZvaWQqIHVz
ZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGEKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQorCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5jcHAKaW5kZXggZWQyZWQ1NWE5ZTI5MGI3
ODE2ZjZjM2U0YTIxZmJhNzc5YTI4N2Y3Yy4uN2QyNTk0YzY0OTJiNTI1NmNmNzE5NjhhN2U2YjU1
Y2M1NDViMTJjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFj
L0F1ZGlvRmlsZVJlYWRlck1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5jcHAKQEAgLTMwLDYgKzMwLDggQEAKIAogI2lmIEVO
QUJMRShXRUJfQVVESU8pCiAKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCisK
ICNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXJNYWMuaCIKIAogI2luY2x1ZGUgIkF1ZGlvQnVzLmgi
CkBAIC01OCw3ICs2MCw3IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoQXVk
aW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0KQogfQogCiBBdWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmls
ZVJlYWRlcihjb25zdCBjaGFyKiBmaWxlUGF0aCkKLSAgICA6IG1fZGF0YSgwKQorICAgIDogbV9k
YXRhKG51bGxwdHIpCiAgICAgLCBtX2RhdGFTaXplKDApCiAgICAgLCBtX2F1ZGlvRmlsZUlEKDAp
CiAgICAgLCBtX2V4dEF1ZGlvRmlsZVJlZigwKQpAQCAtMjM3LDE2ICsyMzksMTYgQEAgUGFzc1Jl
ZlB0cjxBdWRpb0J1cz4gQXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMoZmxvYXQgc2FtcGxlUmF0
ZSwgYm9vbCBtaXhUb01vbm8KIAogUGFzc1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUF1
ZGlvRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBs
ZVJhdGUpCiB7Ci0gICAgQXVkaW9GaWxlUmVhZGVyIHJlYWRlcihmaWxlUGF0aCk7Ci0gICAgcmV0
dXJuIHJlYWRlci5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKKyAgICByZXR1cm4g
QXVkaW9GaWxlUmVhZGVyKGZpbGVQYXRoKS5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25v
KTsKIH0KIAogUGFzc1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9G
aWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZs
b2F0IHNhbXBsZVJhdGUpCiB7Ci0gICAgQXVkaW9GaWxlUmVhZGVyIHJlYWRlcihkYXRhLCBkYXRh
U2l6ZSk7Ci0gICAgcmV0dXJuIHJlYWRlci5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25v
KTsKKyAgICByZXR1cm4gQXVkaW9GaWxlUmVhZGVyKGRhdGEsIGRhdGFTaXplKS5jcmVhdGVCdXMo
c2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKIH0KIAotfSAvLyBXZWJDb3JlCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2Vzc2lvbk1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TZXNzaW9uTWFjLmNwcAppbmRleCA3Nzg4NDcyY2Y0ZmJl
M2YwYTMyN2IxYzY5ODYyZjI2MjVlMWE1OWVlLi4zNWUyOGFiMThmNTkzZjg2OWYxNjk4OGE3Yjcw
MGFhZjcxZGZkMTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9t
YWMvQXVkaW9TZXNzaW9uTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9tYWMvQXVkaW9TZXNzaW9uTWFjLmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkF1ZGlvU2Vzc2lvbi5oIgogCi0jaWYgVVNFKEFVRElPX1NFU1NJ
T04pICYmIFBMQVRGT1JNKE1BQykKKyNpZiBVU0UoQVVESU9fU0VTU0lPTikgJiYgUExBVEZPUk0o
TUFDKSAmJiAhUExBVEZPUk0oSU9TKQogCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vbWFjL01lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vbWFjL01lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwCmluZGV4IGRhMDgyYTZm
MjIyOTQ4MTQ5NWE1NTM5ODVhMmQwZWI5OTFlNThiNTYuLjhiZTdlNmU4ZGE0NWJiMzlkNThjMmJj
M2E2MmZkNTBmNTA2NjFmMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL21hYy9NZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9tYWMvTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAKQEAgLTQ4LDcgKzQ4
LDcgQEAgdm9pZCBNZWRpYVNlc3Npb25NYW5hZ2VyOjp1cGRhdGVTZXNzaW9uU3RhdGUoKQogICAg
ICAgICBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5zZXRQcmVmZXJyZWRCdWZmZXJTaXpl
KGtXZWJBdWRpb0J1ZmZlclNpemUpOwogICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcv
Yi8xMTY3MjU+IEZpZ3VyZSBvdXQgd2h5IGVuYWJsaW5nIHRoZSBjb2RlIGJlbG93CiAgICAgLy8g
Y2F1c2VzIG1lZGlhIExheW91dFRlc3RzIHRvIGZhaWwgb24gMTAuOC4KLSNpZiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogICAgIGVsc2UgaWYgKChoYXMoTWVk
aWFTZXNzaW9uOjpWaWRlbykgfHwgaGFzKE1lZGlhU2Vzc2lvbjo6QXVkaW8pKSAmJiBTZXR0aW5n
czo6bG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoKSkKICAgICAgICAgQXVkaW9T
ZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2V0UHJlZmVycmVkQnVmZmVyU2l6ZShrTG93UG93ZXJW
aWRlb0J1ZmZlclNpemUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9T
aGFyZWRCdWZmZXJDRi5jcHAKaW5kZXggOGU3YzdhMzc1NWEwODFmZDk0N2E0NjVmYjMyYTViMjRj
YzFiMTkyNi4uZTE4NTkzOTAwYzYyOWVlOWIzOTcyYTE1ZGFmMjg3Nzg5NDU1MTY3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcApAQCAtMzgsMTMg
KzM4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZm
ZXIoQ0ZEYXRhUmVmIGNmRGF0YSkKICAgICA6IG1fc2l6ZSgwKQotICAgICwgbV9jZkRhdGEoY2ZE
YXRhKQorICAgICwgbV9zaG91bGRVc2VQdXJnZWFibGVNZW1vcnkoZmFsc2UpCiAjaWYgRU5BQkxF
KERJU0tfSU1BR0VfQ0FDSEUpCiAgICAgLCBtX2lzTWVtb3J5TWFwcGVkKGZhbHNlKQogICAgICwg
bV9kaXNrSW1hZ2VDYWNoZUlkKERpc2tJbWFnZUNhY2hlOjppbnZhbGlkRGlza0NhY2hlSWQpCiAg
ICAgLCBtX25vdGlmeU1lbW9yeU1hcHBlZENhbGxiYWNrKG51bGxwdHIpCiAgICAgLCBtX25vdGlm
eU1lbW9yeU1hcHBlZENhbGxiYWNrRGF0YShudWxscHRyKQogI2VuZGlmCisgICAgLCBtX2NmRGF0
YShjZkRhdGEpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nm
L1VSTENGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1VSTENGLmNwcAppbmRleCBi
M2VjYjUwMzE5MjIyYTJkNDRhYWE3ZDQ4Y2NiMTM1YmVlMzUzOWM5Li41YjE2OTQ4NzY2ZDMzOGZm
MzQ5YzRlZjUyNjQ4YjVjNGE0NmM3NDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jZi9VUkxDRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvVVJMQ0Yu
Y3BwCkBAIC0zMCw2ICszMCwxMSBAQAogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGVVJMLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2lu
Y2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIgorI2luY2x1ZGUgPENvcmVGb3Vu
ZGF0aW9uL0NGUHJpdi5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVVJMOjpV
UkwoQ0ZVUkxSZWYgdXJsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvS2V5RXZlbnRDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0tleUV2
ZW50Q29jb2EubW0KaW5kZXggYTEyNWI2YTEwZjQ3YjcyZTYwNTZkZjc5NGI2ZGVhYjVkNDc2ZjM2
OS4uMWEzZDgzMGRkMTk0YzBkOTY5NGMyODU2OGIzNDkyZGIxM2Q4Y2I5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvS2V5RXZlbnRDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9LZXlFdmVudENvY29hLm1tCkBAIC01MzEsOSArNTMx
LDggQEAgaW50IHdpbmRvd3NLZXlDb2RlRm9yQ2hhckNvZGUodW5pY2hhciBjaGFyQ29kZSkKICAg
ICAgICAgY2FzZSBOU1ByaW50RnVuY3Rpb25LZXk6IHJldHVybiBWS19QUklOVDsKICAgICAgICAg
Y2FzZSBOU0V4ZWN1dGVGdW5jdGlvbktleTogcmV0dXJuIFZLX0VYRUNVVEU7CiAgICAgICAgIGNh
c2UgTlNQcmludFNjcmVlbkZ1bmN0aW9uS2V5OiByZXR1cm4gVktfU05BUFNIT1Q7Ci0gICAgICAg
IGNhc2UgTlNJbnNlcnRGdW5jdGlvbktleTogcmV0dXJuIFZLX0lOU0VSVDsKICNpZiBQTEFURk9S
TShJT1MpCi0gICAgICAgIGNhc2UgTlNIZWxwRnVuY3Rpb25LZXk6IHJldHVybiBWS19JTlNFUlQ7
CisgICAgICAgIGNhc2UgTlNJbnNlcnRGdW5jdGlvbktleTogY2FzZSBOU0hlbHBGdW5jdGlvbktl
eTogcmV0dXJuIFZLX0lOU0VSVDsKIAogICAgICAgICBjYXNlIE5TRjFGdW5jdGlvbktleTogcmV0
dXJuIFZLX0YxOwogICAgICAgICBjYXNlIE5TRjJGdW5jdGlvbktleTogcmV0dXJuIFZLX0YyOwpA
QCAtNTU1LDYgKzU1NCw4IEBAIGludCB3aW5kb3dzS2V5Q29kZUZvckNoYXJDb2RlKHVuaWNoYXIg
Y2hhckNvZGUpCiAgICAgICAgIGNhc2UgTlNGMThGdW5jdGlvbktleTogcmV0dXJuIFZLX0YxODsK
ICAgICAgICAgY2FzZSBOU0YxOUZ1bmN0aW9uS2V5OiByZXR1cm4gVktfRjE5OwogICAgICAgICBj
YXNlIE5TRjIwRnVuY3Rpb25LZXk6IHJldHVybiBWS19GMjA7CisjZWxzZQorICAgICAgICBjYXNl
IE5TSW5zZXJ0RnVuY3Rpb25LZXk6IHJldHVybiBWS19JTlNFUlQ7CiAjZW5kaWYKICAgICAgICAg
Y2FzZSBOU0YyMUZ1bmN0aW9uS2V5OiByZXR1cm4gVktfRjIxOwogICAgICAgICBjYXNlIE5TRjIy
RnVuY3Rpb25LZXk6IHJldHVybiBWS19GMjI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5kZXggYzg4YWI1ZTQ5OTZhYzk5NzFkZWZlZjBi
MWU4OTM2MmE3Yzc3M2ExOS4uNDcwMDgyZWQ1YzVlZjAyYTczM2U2ZDk0MTIxYzA0OTIwNWJlMGQw
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcApAQCAtMzcsOCArMzcsMTQgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8
bGltaXRzPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6IFdlIHNo
b3VsZCBiZXR0ZXIgaW50ZWdyYXRlIHRoZSBpT1MgYW5kIG5vbi1pT1MgY29kZSBpbiB0aGlzIGNs
YXNzLiBVbmxpa2Ugb3RoZXIgcG9ydHMsIHRoZQorLy8gaU9TIHBvcnQgY2FjaGVzIHRoZSBtZXRh
ZGF0YSBmb3IgYSBmcmFtZSB3aXRob3V0IGRlY29kaW5nIHRoZSBpbWFnZS4KIEJpdG1hcEltYWdl
OjpCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2Vy
dmVyKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKQEAgLTUwLDYgKzU2LDExIEBAIEJpdG1hcElt
YWdlOjpCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAsIG1fZGVjb2Rl
ZFNpemUoMCkKICAgICAsIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplKDApCiAgICAgLCBtX2ZyYW1l
Q291bnQoMCkKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBleHBv
c2UgYSBzZXR0aW5nIHRvIGVuYWJsZS9kaXNhYmxlIHByb2dyZXNzaXZlIGxvYWRpbmcgcmVtb3Zl
IHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgorICAgICwgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1Rp
bWUoMCkKKyAgICAsIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCgwKQorI2VuZGlmCiAgICAg
LCBtX2lzU29saWRDb2xvcihmYWxzZSkKICAgICAsIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IoZmFs
c2UpCiAgICAgLCBtX2FuaW1hdGlvbkZpbmlzaGVkKGZhbHNlKQpAQCAtMTAwLDcgKzExMSwxNiBA
QCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGFJZk5lY2Vzc2FyeShib29sIGRl
c3Ryb3lBbGwpCiB7CiAgICAgLy8gQW5pbWF0ZWQgaW1hZ2VzID41TUIgYXJlIGNvbnNpZGVyZWQg
bGFyZ2UgZW5vdWdoIHRoYXQgd2UnbGwgb25seSBoYW5nIG9uCiAgICAgLy8gdG8gb25lIGZyYW1l
IGF0IGEgdGltZS4KKyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGNMYXJnZUFuaW1hdGlvbkN1dG9mZiA9IDIwOTcxNTI7CisKKyAgICAgLy8gSWYgd2UgaGF2ZSBk
ZWNvZGVkIGZyYW1lcyBidXQgdGhlcmUgaXMgbm8gZW5jb2RlZCBkYXRhLCB3ZSBzaG91bGRuJ3Qg
ZGVzdHJveQorICAgICAvLyB0aGUgZGVjb2RlZCBpbWFnZSBzaW5jZSB3ZSB3b24ndCBiZSBhYmxl
IHRvIHJlY29uc3RydWN0IGl0IGxhdGVyLgorICAgICBpZiAoIWRhdGEoKSAmJiBtX2ZyYW1lcy5z
aXplKCkpCisgICAgICAgICByZXR1cm47CisjZWxzZQogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBjTGFyZ2VBbmltYXRpb25DdXRvZmYgPSA1MjQyODgwOworI2VuZGlmCiAKICAgICAvLyBJZiB3
ZSBoYXZlIGRlY29kZWQgZnJhbWVzIGJ1dCB0aGVyZSBpcyBubyBlbmNvZGVkIGRhdGEsIHdlIHNo
b3VsZG4ndCBkZXN0cm95CiAgICAgLy8gdGhlIGRlY29kZWQgaW1hZ2Ugc2luY2Ugd2Ugd29uJ3Qg
YmUgYWJsZSB0byByZWNvbnN0cnVjdCBpdCBsYXRlci4KQEAgLTEzMSw3ICsxNTEsMTEgQEAgdm9p
ZCBCaXRtYXBJbWFnZTo6ZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KHVuc2lnbmVkIGZyYW1lQnl0
ZXNDbGVhcmVkKQogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0
aGlzLCAtc2FmZUNhc3Q8aW50PihmcmFtZUJ5dGVzQ2xlYXJlZCkpOwogfQogCisjaWYgUExBVEZP
Uk0oSU9TKQordm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIGZsb2F0
IHNjYWxlSGludCkKKyNlbHNlCiB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBp
bmRleCkKKyNlbmRpZgogewogICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAg
ICAgQVNTRVJUKG1fZGVjb2RlZFNpemUgPT0gMCB8fCBudW1GcmFtZXMgPiAxKTsKQEAgLTEzOSw3
ICsxNjMsMTIgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgpCiAg
ICAgaWYgKG1fZnJhbWVzLnNpemUoKSA8IG51bUZyYW1lcykKICAgICAgICAgbV9mcmFtZXMuZ3Jv
dyhudW1GcmFtZXMpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIG1fZnJhbWVzW2luZGV4XS5t
X2ZyYW1lID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVBdEluZGV4KGluZGV4LCAmc2NhbGVIaW50KTsK
KyAgICBtX2ZyYW1lc1tpbmRleF0ubV9zY2FsZSA9IHNjYWxlSGludDsKKyNlbHNlCiAgICAgbV9m
cmFtZXNbaW5kZXhdLm1fZnJhbWUgPSBtX3NvdXJjZS5jcmVhdGVGcmFtZUF0SW5kZXgoaW5kZXgp
OworI2VuZGlmCiAgICAgaWYgKG51bUZyYW1lcyA9PSAxICYmIG1fZnJhbWVzW2luZGV4XS5tX2Zy
YW1lKQogICAgICAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKIApAQCAtMTY2LDYgKzE5NSwyMyBA
QCB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCkKICAgICB9CiB9CiAK
KyNpZiBQTEFURk9STShJT1MpCit2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lSW5mbyhzaXpl
X3QgaW5kZXgpCit7CisgICAgc2l6ZV90IG51bUZyYW1lcyA9IGZyYW1lQ291bnQoKTsKKworICAg
IGlmIChtX2ZyYW1lcy5zaXplKCkgPCBudW1GcmFtZXMpCisgICAgICAgIG1fZnJhbWVzLnJlc2l6
ZShudW1GcmFtZXMpOworCisgICAgQVNTRVJUKCFtX2ZyYW1lc1tpbmRleF0ubV9oYXZlSW5mbyk7
CisKKyAgICBpZiAoc2hvdWxkQW5pbWF0ZSgpKQorICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9k
dXJhdGlvbiA9IG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICBtX2Zy
YW1lc1tpbmRleF0ubV9oYXNBbHBoYSA9IG1fc291cmNlLmZyYW1lSGFzQWxwaGFBdEluZGV4KGlu
ZGV4KTsKKyAgICBtX2ZyYW1lc1tpbmRleF0ubV9oYXZlSW5mbyA9IHRydWU7Cit9CisjZW5kaWYK
Kwogdm9pZCBCaXRtYXBJbWFnZTo6ZGlkRGVjb2RlUHJvcGVydGllcygpIGNvbnN0CiB7CiAgICAg
aWYgKG1fZGVjb2RlZFNpemUpCkBAIC0xOTMsNiArMjM5LDEwIEBAIHZvaWQgQml0bWFwSW1hZ2U6
OnVwZGF0ZVNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSBjb25z
dAogICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc291cmNlLnNpemUoSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaXB0aW9uKFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uLCBkZXNjcmlwdGlv
bi5pbWFnZU9yaWVudGF0aW9uKCkpKTsKICAgICBtX2ltYWdlT3JpZW50YXRpb24gPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKICAgICBtX3No
b3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2Ny
aXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkpOworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBtX29yaWdpbmFsU2l6ZSA9IG1fc291cmNlLm9yaWdpbmFsU2l6ZSgpOworICAgIG1fb3JpZ2lu
YWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gbV9zb3VyY2Uub3JpZ2luYWxTaXplKFJlc3Bl
Y3RJbWFnZU9yaWVudGF0aW9uKTsKKyNlbmRpZgogICAgIG1faGF2ZVNpemUgPSB0cnVlOwogICAg
IGRpZERlY29kZVByb3BlcnRpZXMoKTsKIH0KQEAgLTIwOSw2ICsyNTksMjAgQEAgSW50U2l6ZSBC
aXRtYXBJbWFnZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uRGVz
Y3JpcHRpb24gZGVzY3IKICAgICByZXR1cm4gbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uOwog
fQogCisjaWYgUExBVEZPUk0oSU9TKQorSW50U2l6ZSBCaXRtYXBJbWFnZTo6b3JpZ2luYWxTaXpl
KCkgY29uc3QKK3sKKyAgICB1cGRhdGVTaXplKCk7CisgICAgcmV0dXJuIG1fb3JpZ2luYWxTaXpl
OworfQorCitJbnRTaXplIEJpdG1hcEltYWdlOjpvcmlnaW5hbFNpemVSZXNwZWN0aW5nT3JpZW50
YXRpb24oKSBjb25zdAoreworICAgIHVwZGF0ZVNpemUoKTsKKyAgICByZXR1cm4gbV9vcmlnaW5h
bFNpemVSZXNwZWN0aW5nT3JpZW50YXRpb247Cit9CisjZW5kaWYKKwogSW50U2l6ZSBCaXRtYXBJ
bWFnZTo6Y3VycmVudEZyYW1lU2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2N1cnJlbnRGcmFt
ZSB8fCBtX2hhc1VuaWZvcm1GcmFtZVNpemUpCkBAIC0yMjcsNiArMjkxLDkgQEAgYm9vbCBCaXRt
YXBJbWFnZTo6Z2V0SG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29uc3QKIAogYm9vbCBCaXRt
YXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7CisgICAgLy8gQmVj
YXVzZSB3ZSdyZSBtb2RpZnlpbmcgdGhlIGN1cnJlbnQgZnJhbWUsIGNsZWFyIGl0cyAobm93IHBv
c3NpYmx5CisgICAgLy8gaW5hY2N1cmF0ZSkgbWV0YWRhdGEgYXMgd2VsbC4KKyNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIC8vIENsZWFyIGFsbCBwYXJ0aWFsbHktZGVjb2RlZCBmcmFtZXMuIEZvciBt
b3N0IGltYWdlIGZvcm1hdHMsIHRoZXJlIGlzIG9ubHkKICAgICAvLyBvbmUgZnJhbWUsIGJ1dCBh
dCBsZWFzdCBHSUYgYW5kIElDTyBjYW4gaGF2ZSBtb3JlLiBXaXRoIEdJRnMsIHRoZSBmcmFtZXMK
ICAgICAvLyBjb21lIGluIG9yZGVyIGFuZCB3ZSBhc2sgdG8gZGVjb2RlIHRoZW0gaW4gb3JkZXIs
IHdhaXRpbmcgdG8gcmVxdWVzdCBhCkBAIC0yNTQsMTEgKzMyMSw0MCBAQCBib29sIEJpdG1hcElt
YWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAgICAgICAgIGZyYW1l
Qnl0ZXNDbGVhcmVkICs9IChtX2ZyYW1lc1tpXS5jbGVhcih0cnVlKSA/IGZyYW1lQnl0ZXMgOiAw
KTsKICAgICB9CiAgICAgZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KGZyYW1lQnl0ZXNDbGVhcmVk
KTsKKyNlbHNlCisgICAgaW50IGRlbHRhQnl0ZXMgPSAwOworICAgIGlmICghbV9mcmFtZXMuaXNF
bXB0eSgpKSB7CisgICAgICAgIGludCBieXRlcyA9IG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAt
IDFdLm1fZnJhbWVCeXRlczsKKyAgICAgICAgaWYgKG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAt
IDFdLmNsZWFyKHRydWUpKSB7CisgICAgICAgICAgICBkZWx0YUJ5dGVzICs9IGJ5dGVzOworICAg
ICAgICAgICAgZGVsdGFCeXRlcyArPSBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZTsKKyAgICAgICAg
ICAgIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBk
ZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZGVsdGFCeXRlcyk7CisjZW5kaWYKICAgICAKICAgICAv
LyBGZWVkIGFsbCB0aGUgZGF0YSB3ZSd2ZSBzZWVuIHNvIGZhciB0byB0aGUgaW1hZ2UgZGVjb2Rl
ci4KICAgICBtX2FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBleHBvc2UgYSBzZXR0aW5nIHRvIGVuYWJs
ZS9kaXNhYmxlIHByb2dyZXNzaXZlIGxvYWRpbmcgYW5kIG1ha2UgdGhpcworICAgIC8vIGNvZGUg
Y29uZGl0aW9uYWwgb24gaXQuIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1n
dWFyZC4KKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGNodW5rTG9hZEludGVydmFsc1tdID0gezAs
IDEsIDMsIDYsIDE1fTsKKyAgICBkb3VibGUgaW50ZXJ2YWwgPSBjaHVua0xvYWRJbnRlcnZhbHNb
c3RkOjptaW4obV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50LCBzdGF0aWNfY2FzdDx1aW50MTZf
dD4oNCkpXTsKKworICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBmYWxzZTsKKyAgICBpZiAoY3VycmVu
dFRpbWUoKSAtIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtUaW1lID4gaW50ZXJ2YWwpIHsgLy8gVGhl
IGZpcnN0IHRpbWUgdGhyb3VnaCwgdGhlIGNodW5rIHRpbWUgd2lsbCBiZSAwIGFuZCB0aGUgaW1h
Z2Ugd2lsbCBnZXQgYW4gdXBkYXRlLgorICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7CisgICAg
ICAgIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAg
QVNTRVJUKG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCA8PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQxNl90Pjo6bWF4KCkpOworICAgICAgICArK21fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3Vu
dDsKKyAgICB9CisgICAgaWYgKG5lZWRzVXBkYXRlIHx8IGFsbERhdGFSZWNlaXZlZCkKKyAgICAg
ICAgbV9zb3VyY2Uuc2V0RGF0YShkYXRhKCksIGFsbERhdGFSZWNlaXZlZCk7CisjZWxzZQogICAg
IG1fc291cmNlLnNldERhdGEoZGF0YSgpLCBhbGxEYXRhUmVjZWl2ZWQpOwotICAgIAorI2VuZGlm
CisKICAgICBtX2hhdmVGcmFtZUNvdW50ID0gZmFsc2U7CiAgICAgbV9oYXNVbmlmb3JtRnJhbWVT
aXplID0gdHJ1ZTsKICAgICByZXR1cm4gaXNTaXplQXZhaWxhYmxlKCk7CkBAIC0yOTMsNiArMzg5
LDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6aXNTaXplQXZhaWxhYmxlKCkKICAgICByZXR1cm4gbV9z
aXplQXZhaWxhYmxlOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIGJvb2wgQml0bWFwSW1hZ2U6
OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCA+PSBm
cmFtZUNvdW50KCkpCkBAIC0zMDIsMjUgKzM5OSw3NSBAQCBib29sIEJpdG1hcEltYWdlOjplbnN1
cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCkKICAgICAgICAgY2FjaGVGcmFtZShpbmRleCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CisjZWxzZQorYm9vbCBCaXRtYXBJbWFnZTo6ZW5zdXJlRnJh
bWVJbmZvSXNDYWNoZWQoc2l6ZV90IGluZGV4KQoreworICAgIGlmIChpbmRleCA+PSBmcmFtZUNv
dW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpbmRleCA+PSBtX2ZyYW1l
cy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5tX2hhdmVJbmZvKQorICAgICAgICBjYWNoZUZy
YW1lSW5mbyhpbmRleCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKIAogUGFzc05hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogeworI2lm
IFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4gZnJhbWVBdEluZGV4KGluZGV4LCAxLjBmKTsKKyNl
bHNlCiAgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0u
bV9mcmFtZTsKKyNlbmRpZgogfQogCisjaWYgUExBVEZPUk0oSU9TKQorUGFzc05hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpmcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9hdCBzY2FsZUhp
bnQpCit7CisgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tp
bmRleF0ubV9mcmFtZSkKKyAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgc2NhbGVIaW50KTsKKyAg
ICBlbHNlIGlmIChzdGQ6Om1pbigxLjBmLCBzY2FsZUhpbnQpID4gbV9mcmFtZXNbaW5kZXhdLm1f
c2NhbGUpIHsKKyAgICAgICAgLy8gSWYgdGhlIGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBidXQg
YXQgdG9vIHNtYWxsIGEgc2l6ZSwgcmUtZGVjb2RlIGEgbGFyZ2VyIHZlcnNpb24uCisgICAgICAg
IGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7CisgICAgICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KG1fZGVjb2RlZFNpemUpICsgc2l6ZUNoYW5nZSA+PSAw
KTsKKyAgICAgICAgbV9mcmFtZXNbaW5kZXhdLmNsZWFyKHRydWUpOworICAgICAgICBpbnZhbGlk
YXRlUGxhdGZvcm1EYXRhKCk7CisgICAgICAgIG1fZGVjb2RlZFNpemUgKz0gc2l6ZUNoYW5nZTsK
KyAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgICAgIGltYWdlT2JzZXJ2ZXIo
KS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMsIHNpemVDaGFuZ2UpOworCisgICAgICAgIGNhY2hl
RnJhbWUoaW5kZXgsIHNjYWxlSGludCk7CisgICAgfQorICAgIHJldHVybiBtX2ZyYW1lc1tpbmRl
eF0ubV9mcmFtZTsKK30KKyNlbmRpZgorCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxl
dGVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklY
TUU6IGNhY2hlRnJhbWVJbmZvIGRvZXMgbm90IHNldCBtX2lzQ29tcGxldGUuIFNob3VsZCBpdD8K
KyAgICBpZiAoIWVuc3VyZUZyYW1lSW5mb0lzQ2FjaGVkKGluZGV4KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworI2Vsc2UKICAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1f
aXNDb21wbGV0ZTsKIH0KIAogZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4
KHNpemVfdCBpbmRleCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKCFlbnN1cmVGcmFt
ZUluZm9Jc0NhY2hlZChpbmRleCkpCisgICAgICAgIHJldHVybiAwOworI2Vsc2UKICAgICBpZiAo
IWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgpKQogICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgog
ICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKIH0KIApAQCAtMzMxLDkgKzQ3
OCwxMyBAQCBQYXNzTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCkKIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6
ZV90IGluZGV4KQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoIWVuc3VyZUZyYW1lSW5m
b0lzQ2FjaGVkKGluZGV4KSkKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIEZJWE1FOiBXaHkgd291
bGQgYW4gaW52YWxpZCBpbmRleCByZXR1cm4gdHJ1ZSBoZXJlPworI2Vsc2UKICAgICBpZiAobV9m
cmFtZXMuc2l6ZSgpIDw9IGluZGV4KQogICAgICAgICByZXR1cm4gdHJ1ZTsKLQorI2VuZGlmCiAg
ICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2hhdmVNZXRhZGF0YSkKICAgICAgICAgcmV0dXJuIG1f
ZnJhbWVzW2luZGV4XS5tX2hhc0FscGhhOwogCkBAIC0zNDcsOCArNDk4LDE0IEBAIGJvb2wgQml0
bWFwSW1hZ2U6OmN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpCiAKIEltYWdlT3JpZW50YXRp
b24gQml0bWFwSW1hZ2U6OmZyYW1lT3JpZW50YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IGNhY2hlRnJhbWVJbmZvIGRvZXMgbm90
IHNldCBtX29yaWVudGF0aW9uLiBTaG91bGQgaXQ/CisgICAgaWYgKCFlbnN1cmVGcmFtZUluZm9J
c0NhY2hlZChpbmRleCkpCisgICAgICAgIHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsK
KyNlbHNlCiAgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKICAgICAgICAgcmV0
dXJuIERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOworI2VuZGlmCiAKICAgICBpZiAobV9mcmFtZXNb
aW5kZXhdLm1faGF2ZU1ldGFkYXRhKQogICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1f
b3JpZW50YXRpb247CkBAIC0zNjMsOCArNTIwLDYgQEAgYm9vbCBCaXRtYXBJbWFnZTo6bm90U29s
aWRDb2xvcigpCiB9CiAjZW5kaWYKIAotCi0KIGludCBCaXRtYXBJbWFnZTo6cmVwZXRpdGlvbkNv
dW50KGJvb2wgaW1hZ2VLbm93blRvQmVDb21wbGV0ZSkKIHsKICAgICBpZiAoKG1fcmVwZXRpdGlv
bkNvdW50U3RhdHVzID09IFVua25vd24pIHx8ICgobV9yZXBldGl0aW9uQ291bnRTdGF0dXMgPT0g
VW5jZXJ0YWluKSAmJiBpbWFnZUtub3duVG9CZUNvbXBsZXRlKSkgewpAQCAtNDEyLDEyICs1Njcs
MTggQEAgdm9pZCBCaXRtYXBJbWFnZTo6c3RhcnRBbmltYXRpb24oYm9vbCBjYXRjaFVwSWZOZWNl
c3NhcnkpCiAgICAgY29uc3QgZG91YmxlIGN1cnJlbnREdXJhdGlvbiA9IGZyYW1lRHVyYXRpb25B
dEluZGV4KG1fY3VycmVudEZyYW1lKTsKICAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSArPSBj
dXJyZW50RHVyYXRpb247CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIFdoZW4gYW4gYW5p
bWF0ZWQgaW1hZ2UgaXMgbW9yZSB0aGFuIGZpdmUgbWludXRlcyBvdXQgb2YgZGF0ZSwgdGhlCiAg
ICAgLy8gdXNlciBwcm9iYWJseSBkb2Vzbid0IGNhcmUgYWJvdXQgcmVzeW5jaW5nIGFuZCB3ZSBj
b3VsZCBidXJuIGEgbG90IG9mCiAgICAgLy8gdGltZSBsb29waW5nIHRocm91Z2ggZnJhbWVzIGJl
bG93LiAgSnVzdCByZXNldCB0aGUgdGltaW5ncy4KICAgICBjb25zdCBkb3VibGUgY0FuaW1hdGlv
blJlc3luY0N1dG9mZiA9IDUgKiA2MDsKICAgICBpZiAoKHRpbWUgLSBtX2Rlc2lyZWRGcmFtZVN0
YXJ0VGltZSkgPiBjQW5pbWF0aW9uUmVzeW5jQ3V0b2ZmKQogICAgICAgICBtX2Rlc2lyZWRGcmFt
ZVN0YXJ0VGltZSA9IHRpbWUgKyBjdXJyZW50RHVyYXRpb247CisjZWxzZQorICAgIC8vIE1haW50
YWluaW5nIGZyYW1lLXRvLWZyYW1lIGRlbGF5cyBpcyBtb3JlIGltcG9ydGFudCB0aGFuCisgICAg
Ly8gbWFpbnRhaW5pbmcgYWJzb2x1dGUgYW5pbWF0aW9uIHRpbWluZywgc28gcmVzZXQgdGhlIHRp
bWluZ3MgZWFjaCBmcmFtZS4KKyAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9IHRpbWUgKyBj
dXJyZW50RHVyYXRpb247CisjZW5kaWYKIAogICAgIC8vIFRoZSBpbWFnZSBtYXkgbG9hZCBtb3Jl
IHNsb3dseSB0aGFuIGl0J3Mgc3VwcG9zZWQgdG8gYW5pbWF0ZSwgc28gdGhhdCBieQogICAgIC8v
IHRoZSB0aW1lIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGZpcnN0IHJlcGV0aXRpb24sIHdlJ3Jl
IHdlbGwgYmVoaW5kLgpAQCAtNTQ4LDEwICs3MDksMTIgQEAgYm9vbCBCaXRtYXBJbWFnZTo6aW50
ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKGJvb2wgc2tpcHBpbmdGcmFtZXMpCiAgICAgLy8gU3RvcCB0
aGUgYW5pbWF0aW9uLgogICAgIHN0b3BBbmltYXRpb24oKTsKICAgICAKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgIC8vIFNlZSBpZiBhbnlvbmUgaXMgc3RpbGwgcGF5aW5nIGF0dGVudGlvbiB0byB0
aGlzIGFuaW1hdGlvbi4gIElmIG5vdCwgd2UgZG9uJ3QKICAgICAvLyBhZHZhbmNlIGFuZCB3aWxs
IHJlbWFpbiBzdXNwZW5kZWQgYXQgdGhlIGN1cnJlbnQgZnJhbWUgdW50aWwgdGhlIGFuaW1hdGlv
biBpcyByZXN1bWVkLgogICAgIGlmICghc2tpcHBpbmdGcmFtZXMgJiYgaW1hZ2VPYnNlcnZlcigp
LT5zaG91bGRQYXVzZUFuaW1hdGlvbih0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCiAKICAgICArK21fY3VycmVudEZyYW1lOwogICAgIGJvb2wgYWR2YW5jZWRBbmltYXRpb24g
PSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmgKaW5kZXggYjlkZDdiM2E1MjE3ODc2YzEzYzQwYzg4YmY3YzZjYmZlNGE3OWU0Zi4uODdkOGI4
YzY2MjJmYjlmYzNjMmJmMDA0NjU3YzcwNTNiZTRlOWYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0zNiw3ICszNiw5IEBACiAKICNp
ZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2lmICFQTEFURk9S
TShJT1MpCiBPQkpDX0NMQVNTIE5TSW1hZ2U7CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogI2Vu
ZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC02Nyw2ICs2OSwxMCBAQCBwdWJsaWM6CiAgICAg
RnJhbWVEYXRhKCkKICAgICAgICAgOiBtX2ZyYW1lKDApCiAgICAgICAgICwgbV9vcmllbnRhdGlv
bihEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICwg
bV9zY2FsZSgwKQorICAgICAgICAsIG1faGF2ZUluZm8oZmFsc2UpCisjZW5kaWYKICAgICAgICAg
LCBtX2R1cmF0aW9uKDApCiAgICAgICAgICwgbV9oYXZlTWV0YWRhdGEoZmFsc2UpCiAgICAgICAg
ICwgbV9pc0NvbXBsZXRlKGZhbHNlKQpAQCAtODYsNiArOTIsMTAgQEAgcHVibGljOgogCiAgICAg
TmF0aXZlSW1hZ2VQdHIgbV9mcmFtZTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRp
b247CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGZsb2F0IG1fc2NhbGU7CisgICAgYm9vbCBtX2hh
dmVJbmZvOworI2VuZGlmCiAgICAgZmxvYXQgbV9kdXJhdGlvbjsKICAgICBib29sIG1faGF2ZU1l
dGFkYXRhIDogMTsKICAgICBib29sIG1faXNDb21wbGV0ZSA6IDE7CkBAIC05Nyw2ICsxMDcsOSBA
QCBwdWJsaWM6CiAvLyBCaXRtYXBJbWFnZSBDbGFzcwogLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisvLyBGSVhNRTogV2Ugc2hvdWxkIGJldHRl
ciBpbnRlZ3JhdGUgdGhlIGlPUyBhbmQgbm9uLWlPUyBjb2RlIGluIHRoaXMgY2xhc3MuIFVubGlr
ZSBvdGhlciBwb3J0cywgdGhlCisvLyBpT1MgcG9ydCBjYWNoZXMgdGhlIG1ldGFkYXRhIGZvciBh
IGZyYW1lIHdpdGhvdXQgZGVjb2RpbmcgdGhlIGltYWdlLgorCiBjbGFzcyBCaXRtYXBJbWFnZSBG
SU5BTCA6IHB1YmxpYyBJbWFnZSB7CiAgICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwog
ICAgIGZyaWVuZCBjbGFzcyBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTsKQEAgLTEyMiw2ICsxMzUs
MTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCBPVkVSUklE
RTsKICAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0OworI2lm
IFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIEludFNpemUgb3JpZ2luYWxTaXplKCkgY29uc3Q7
CisgICAgSW50U2l6ZSBvcmlnaW5hbFNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdDsK
KyNlbmRpZgogICAgIEludFNpemUgY3VycmVudEZyYW1lU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBnZXRIb3RTcG90KEludFBvaW50JikgY29uc3QgT1ZFUlJJREU7CiAKQEAgLTE0MSw3
ICsxNTgsOSBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gQWNjZXNzb3Jz
IGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0cy4KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHZpcnR1
YWwgTlNJbWFnZSogZ2V0TlNJbWFnZSgpIE9WRVJSSURFOworI2VuZGlmCiAgICAgdmlydHVhbCBD
RkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgT1ZFUlJJREU7CiAjZW5kaWYKIApAQCAt
MTk1LDYgKzIxNCwxMCBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogICAgIHNpemVfdCBjdXJyZW50
RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRGcmFtZTsgfQorI2lmIFBMQVRGT1JNKElP
UykKKyAgICBQYXNzTmF0aXZlSW1hZ2VQdHIgZnJhbWVBdEluZGV4KHNpemVfdCwgZmxvYXQgc2Nh
bGVIaW50KTsKKyAgICBQYXNzTmF0aXZlSW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVBdEluZGV4
KHNpemVfdCk7CisjZW5kaWYKICAgICBzaXplX3QgZnJhbWVDb3VudCgpOwogICAgIFBhc3NOYXRp
dmVJbWFnZVB0ciBmcmFtZUF0SW5kZXgoc2l6ZV90KTsKICAgICBib29sIGZyYW1lSXNDb21wbGV0
ZUF0SW5kZXgoc2l6ZV90KTsKQEAgLTIwMyw5ICsyMjYsMTggQEAgcHJvdGVjdGVkOgogICAgIElt
YWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90KTsKIAogICAgIC8v
IERlY29kZXMgYW5kIGNhY2hlcyBhIGZyYW1lLiBOZXZlciBhY2Nlc3NlZCBleGNlcHQgaW50ZXJu
YWxseS4KKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRl
eCwgZmxvYXQgc2NhbGVIaW50KTsKKworICAgIC8vIENhY2hlIGZyYW1lIG1ldGFkYXRhIHdpdGhv
dXQgZGVjb2RpbmcgaW1hZ2UuCisgICAgdm9pZCBjYWNoZUZyYW1lSW5mbyhzaXplX3QgaW5kZXgp
OworICAgIC8vIENhbGxlZCBiZWZvcmUgYWNjZXNzaW5nIG1fZnJhbWVzW2luZGV4XSBmb3IgaW5m
byB3aXRob3V0IGRlY29kaW5nLiBSZXR1cm5zIGZhbHNlIG9uIGluZGV4IG91dCBvZiBib3VuZHMu
CisgICAgYm9vbCBlbnN1cmVGcmFtZUluZm9Jc0NhY2hlZChzaXplX3QgaW5kZXgpOworI2Vsc2UK
ICAgICB2b2lkIGNhY2hlRnJhbWUoc2l6ZV90IGluZGV4KTsKICAgICAvLyBDYWxsZWQgYmVmb3Jl
IGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0uIFJldHVybnMgZmFsc2Ugb24gaW5kZXggb3V0IG9m
IGJvdW5kcy4KICAgICBib29sIGVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4KTsKKyNl
bmRpZgogCiAgICAgLy8gQ2FsbGVkIHRvIGludmFsaWRhdGUgY2FjaGVkIGRhdGEuICBXaGVuIHxk
ZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8vIHRoZSBlbnRpcmUgZnJhbWUg
YnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2UgdG8gZGVzdHJveQpAQCAtMjY4
LDYgKzMwMCwxMCBAQCBwcml2YXRlOgogICAgIG11dGFibGUgdW5zaWduZWQgbV9pbWFnZU9yaWVu
dGF0aW9uIDogNDsgLy8gSW1hZ2VPcmllbnRhdGlvbkVudW0KICAgICBtdXRhYmxlIHVuc2lnbmVk
IG1fc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24gOiAxOyAvLyBSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbkVudW0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBtdXRhYmxlIEludFNpemUgbV9v
cmlnaW5hbFNpemU7IC8vIFRoZSBzaXplIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UuCisgICAg
bXV0YWJsZSBJbnRTaXplIG1fb3JpZ2luYWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9uOworI2Vu
ZGlmCiAgICAgc2l6ZV90IG1fY3VycmVudEZyYW1lOyAvLyBUaGUgaW5kZXggb2YgdGhlIGN1cnJl
bnQgZnJhbWUgb2YgYW5pbWF0aW9uLgogICAgIFZlY3RvcjxGcmFtZURhdGEsIDE+IG1fZnJhbWVz
OyAvLyBBbiBhcnJheSBvZiB0aGUgY2FjaGVkIGZyYW1lcyBvZiB0aGUgYW5pbWF0aW9uLiBXZSBo
YXZlIHRvIHJlZiBmcmFtZXMgdG8gcGluIHRoZW0gaW4gdGhlIGNhY2hlLgogCkBAIC0yNzgsNyAr
MzE0LDkgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWU7ICAv
LyBUaGUgc3lzdGVtIHRpbWUgYXQgd2hpY2ggd2UgaG9wZSB0byBzZWUgdGhlIG5leHQgY2FsbCB0
byBzdGFydEFuaW1hdGlvbigpLgogCiAjaWYgUExBVEZPUk0oTUFDKQorI2lmICFQTEFURk9STShJ
T1MpCiAgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNJbWFnZT4gbV9uc0ltYWdlOyAvLyBBIGNhY2hl
ZCBOU0ltYWdlIG9mIGZyYW1lIDAuIE9ubHkgYnVpbHQgbGF6aWx5IGlmIHNvbWVvbmUgYWN0dWFs
bHkgcXVlcmllcyBmb3Igb25lLgorI2VuZGlmCiAgICAgbXV0YWJsZSBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBtX3RpZmZSZXA7IC8vIENhY2hlZCBUSUZGIHJlcCBmb3IgZnJhbWUgMC4gIE9ubHkgYnVp
bHQgbGF6aWx5IGlmIHNvbWVvbmUgcXVlcmllcyBmb3Igb25lLgogI2VuZGlmCiAKQEAgLTI4OCw2
ICszMjYsMTIgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fZGVjb2RlZFByb3Bl
cnRpZXNTaXplOyAvLyBUaGUgc2l6ZSBvZiBkYXRhIGRlY29kZWQgYnkgdGhlIHNvdXJjZSB0byBk
ZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGllcyAoZS5nLiBzaXplLCBmcmFtZSBjb3VudCwgZXRjKS4K
ICAgICBzaXplX3QgbV9mcmFtZUNvdW50OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgZXhwb3NlIGEgc2V0dGluZyB0byBlbmFibGUvZGlzYWJsZSBwcm9ncmVz
c2l2ZSBsb2FkaW5nIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKyAgICBkb3VibGUg
bV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWU7CisgICAgdWludDE2X3QgbV9wcm9ncmVzc2l2ZUxv
YWRDaHVua0NvdW50OworI2VuZGlmCisKICAgICBib29sIG1faXNTb2xpZENvbG9yIDogMTsgLy8g
V2hldGhlciBvciBub3Qgd2UgYXJlIGEgMXgxIHNvbGlkIGltYWdlLgogICAgIGJvb2wgbV9jaGVj
a2VkRm9yU29saWRDb2xvciA6IDE7IC8vIFdoZXRoZXIgd2UndmUgY2hlY2tlZCB0aGUgZnJhbWUg
Zm9yIHNvbGlkIGNvbG9yLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHAKaW5kZXggMjJjOGRjMWMzMzJmY2Q0OWJiY2I5OTdjNTZlMTAzOWE2NjE1ZjkyNS4uNTlk
Mzc1OTVkYjNkZjYyN2E2NmUwOTJhYTEwODUwMGJhOTgzZDgzMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcApAQCAtMzEwLDYgKzMxMCwxNyBAQCBDb2xvciBD
b2xvcjo6ZGFyaygpIGNvbnN0CiAgICAgICAgICAgICAgICAgIGFscGhhKCkpOwogfQogCitib29s
IENvbG9yOjppc0RhcmsoKSBjb25zdAoreworICAgIGZsb2F0IHJlZDsKKyAgICBmbG9hdCBncmVl
bjsKKyAgICBmbG9hdCBibHVlOworICAgIGZsb2F0IGFscGhhOworICAgIGdldFJHQkEocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIGZsb2F0IGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPSBz
dGQ6Om1heChyZWQsIHN0ZDo6bWF4KGdyZWVuLCBibHVlKSk7CisgICAgcmV0dXJuIGFscGhhID4g
MC41ICYmIGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPCAwLjU7Cit9CisKIHN0YXRpYyBpbnQgYmxl
bmRDb21wb25lbnQoaW50IGMsIGludCBhKQogewogICAgIC8vIFdlIHVzZSB3aGl0ZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IDhlNDBjMjQ0YjJhZTc2MDVl
MTc2MTczMmQ2OGVjNDRjOWVkMDc5MmMuLjIwNDdhZDI0YzM3YTgwYjExNzU4ZjQ0ZDJmOGMwYmVj
MTI4NTgwNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaApAQCAt
MzQsNiArMzQsOSBAQAogI2lmIFVTRShDRykKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiB0eXBl
ZGVmIHN0cnVjdCBDR0NvbG9yKiBDR0NvbG9yUmVmOworI2lmIFBMQVRGT1JNKElPUykKK3R5cGVk
ZWYgc3RydWN0IENHQ29sb3JTcGFjZSogQ0dDb2xvclNwYWNlUmVmOworI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQpAQCAtMTE4LDYgKzEyMSw4IEBA
IHB1YmxpYzoKICAgICBDb2xvciBsaWdodCgpIGNvbnN0OwogICAgIENvbG9yIGRhcmsoKSBjb25z
dDsKIAorICAgIGJvb2wgaXNEYXJrKCkgY29uc3Q7CisKICAgICAvLyBUaGlzIGlzIGFuIGltcGxl
bWVudGF0aW9uIG9mIFBvcnRlci1EdWZmJ3MgInNvdXJjZS1vdmVyIiBlcXVhdGlvbgogICAgIENv
bG9yIGJsZW5kKGNvbnN0IENvbG9yJikgY29uc3Q7CiAgICAgQ29sb3IgYmxlbmRXaXRoV2hpdGUo
KSBjb25zdDsKQEAgLTE0NSw2ICsxNTAsMTUgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBS
R0JBMzIgZ3JheSA9IDB4RkZBMEEwQTA7CiAgICAgc3RhdGljIGNvbnN0IFJHQkEzMiBsaWdodEdy
YXkgPSAweEZGQzBDMEMwOwogICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgdHJhbnNwYXJlbnQgPSAw
eDAwMDAwMDAwOworICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgY3lhbiA9IDB4RkYwMEZGRkY7CisK
KyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhdGljIGNvbnN0IFJHQkEzMiB0YXAgPSAweDREMUEx
QTFBOworCisgICAgLy8gRklYTUU6IFRoaXMgY29sb3Igc2hvdWxkbid0IGJlIGlPUy1zcGVjaWZp
Yy4gT25jZSB3ZSBmaXggdXAgaXRzIHVzYWdlIGluIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9z
aXRpb25CYWNrZ3JvdW5kKCkKKyAgICAvLyB3ZSBzaG91bGQgbW92ZSBpdCBvdXRzaWRlIHRoZSBQ
TEFURk9STShJT1MpLWd1YXJkLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjYyOTY+LgorICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgY29tcG9zaXRpb25GaWxs
ID0gMHgzQ0FGQzBFMzsKKyNlbmRpZgogCiBwcml2YXRlOgogICAgIFJHQkEzMiBtX2NvbG9yOwpA
QCAtMjAwLDYgKzIxNCw5IEBAIGlubGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2
X3QgdmFsdWUpCiAKICNpZiBVU0UoQ0cpCiBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3Qg
Q29sb3ImLCBDb2xvclNwYWNlKTsKKyNpZiBQTEFURk9STShJT1MpCitDR0NvbG9yUmVmIGNyZWF0
ZUNHQ29sb3JXaXRoRGV2aWNlV2hpdGUoQ0dGbG9hdCB3aGl0ZSwgQ0dGbG9hdCBhbHBoYSk7Cisj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZy
ZXNoTW9uaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmgKaW5kZXggOGUwNTgzMTA5YThmMjAxNzMxMDI4MDA2MDkxMjgwNjgzNGQw
YjRlMS4uZjg5MjlkNjlmZDY2MzFlZDZmOGRjYmQwOTFhNTMxMmMyNWE3MWUyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hN
b25pdG9yLmgKQEAgLTEzMSwxMiArMTMxLDE5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9wQW5p
bWF0aW9uQ2xpZW50KCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9S
TShNQUMpICYmICFQTEFURk9STShJT1MpCiBwdWJsaWM6CiAgICAgdm9pZCBkaXNwbGF5TGlua0Zp
cmVkKGRvdWJsZSBub3dTZWNvbmRzLCBkb3VibGUgb3V0cHV0VGltZVNlY29uZHMpOwogcHJpdmF0
ZToKICAgICBDVkRpc3BsYXlMaW5rUmVmIG1fZGlzcGxheUxpbms7CiAjZW5kaWYKKworI2lmIFBM
QVRGT1JNKElPUykKK3B1YmxpYzoKKyAgICB2b2lkIGRpc3BsYXlMaW5rRmlyZWQoZG91YmxlIG5v
d1NlY29uZHMpOworcHJpdmF0ZToKKyAgICB2b2lkKiBtX2Rpc3BsYXlMaW5rOworI2VuZGlmCiB9
OwogCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5o
CmluZGV4IDkyMTYxNzE4NTVhNjkxOTU5ZjM2MTI1N2QxNDc5MTJlMmE0MGU5ZDQuLjE2MGQwOGYy
MWRmZWQxM2MzYWNkODBkOTNkMzc4YWI5YTIyZTMyMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKQEAgLTQzLDEzICs0MywxMyBAQCBjbGFzcyBG
bG9hdFBvaW50OwogdHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBDR1BvaW50OwogI2VuZGlmCiAKLSNp
ZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogI2lm
ZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiB0eXBlZGVmIHN0
cnVjdCBDR1BvaW50IE5TUG9pbnQ7CiAjZWxzZQogdHlwZWRlZiBzdHJ1Y3QgX05TUG9pbnQgTlNQ
b2ludDsKICNlbmRpZgotI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiAhUExBVEZP
Uk0oSU9TKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEzOSwxMCArMTM5LDEyIEBAIHB1
YmxpYzoKICAgICBvcGVyYXRvciBDR1BvaW50KCkgY29uc3Q7CiAjZW5kaWYKIAorI2lmICFQTEFU
Rk9STShJT1MpCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVT
X1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykKICAgICBGbG9hdFBvaW50KGNvbnN0IE5TUG9pbnQm
KTsKICAgICBvcGVyYXRvciBOU1BvaW50KCkgY29uc3Q7CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExB
VEZPUk0oSU9TKQogCiAjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBGbG9hdFBvaW50KGNv
bnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFBvaW50Jik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCmluZGV4IDFjZTIzOWU1ZmY3YjNkYWIwYmNj
OWNjM2M2ZjJmN2U4MmVjNDM0MzQuLmNjOWEwM2JlZjgwMjM1MWFjYzYwZGFlZDRhZmNmYmI1YWI0
MjM1OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5o
CkBAIC0zMCwxNyArMzAsMjEgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9DR0dlb21ldHJ5Lmg+CisjZW5kaWYKKwogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENH
UmVjdCBDR1JlY3Q7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShN
QUMpICYmICFQTEFURk9STShJT1MpCiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NH
R0VPTUVUUllfVFlQRVMKIHR5cGVkZWYgc3RydWN0IENHUmVjdCBOU1JlY3Q7CiAjZWxzZQogdHlw
ZWRlZiBzdHJ1Y3QgX05TUmVjdCBOU1JlY3Q7CiAjZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAogI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkp
CiBuYW1lc3BhY2UgQmxhY2tCZXJyeSB7CkBAIC0xODEsMTAgKzE4NSwxMiBAQCBwdWJsaWM6CiAg
ICAgb3BlcmF0b3IgQ0dSZWN0KCkgY29uc3Q7CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1Mp
CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNf
Q0dHRU9NRVRSWV9UWVBFUykKICAgICBGbG9hdFJlY3QoY29uc3QgTlNSZWN0Jik7CiAgICAgb3Bl
cmF0b3IgTlNSZWN0KCkgY29uc3Q7CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQog
CiAjaWYgVVNFKENBSVJPKQogICAgIEZsb2F0UmVjdChjb25zdCBjYWlyb19yZWN0YW5nbGVfdCYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXpl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAppbmRleCAw
ZmE4Y2MxZDc2YjBhMTNjOTM2ZWQ2MWVmMDU5NGQzOTI1OGNiNWNjLi45NTJhMjkwNDRhZGM5OWFl
ZTE3MmM2YmRiNGRmODU3YTQxMjhiZjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFNpemUuaApAQCAtMzksMTcgKzM5LDIxIEBAIGNsYXNzIEZsb2F0U2l6ZTsK
IH0KICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9D
b3JlR3JhcGhpY3MuaD4KKyNlbmRpZgorCiAjaWYgVVNFKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dT
aXplIENHU2l6ZTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1B
QykgJiYgIVBMQVRGT1JNKElPUykKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dH
RU9NRVRSWV9UWVBFUwogdHlwZWRlZiBzdHJ1Y3QgQ0dTaXplIE5TU2l6ZTsKICNlbHNlCiB0eXBl
ZGVmIHN0cnVjdCBfTlNTaXplIE5TU2l6ZTsKICNlbmRpZgotI2VuZGlmCisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTEyMiwxMCArMTI2LDEyIEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBDR1NpemUoKSBjb25zdDsK
ICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKICNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVm
aW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykpCiAgICAgZXhw
bGljaXQgRmxvYXRTaXplKGNvbnN0IE5TU2l6ZSAmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNp
dGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICBvcGVyYXRvciBOU1NpemUoKSBjb25zdDsKICNlbmRp
ZgorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAK
aW5kZXggNjA5ZTQ2ZjRhNDllYzk4MTAyMWY2YWM2NDI5ODNiOWI5ZTNlMDEwZi4uNDU2ZjI2YzBk
MzgzYTNiOWMyMGZhNDY2ZGViOWQxYWViMzg1YWI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHAKQEAgLTUwLDYgKzUwLDggQEAgdGVtcGxhdGUgPD4gdm9pZCBk
ZWxldGVPd25lZFB0cjxXZWJDb3JlOjpUZXh0TGF5b3V0PihXZWJDb3JlOjpUZXh0TGF5b3V0KiBw
dHIpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIFBhc3NSZWY8Rm9udEdseXBocz4g
cmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFz
c1JlZlB0cjxGb250U2VsZWN0b3I+KTsKKwogY29uc3QgdWludDhfdCBGb250OjpzX3JvdW5kaW5n
SGFja0NoYXJhY3RlclRhYmxlWzI1Nl0gPSB7CiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMSAvKlx0Ki8sIDEgLypcbiovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogICAgIDEgLypzcGFjZSovLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qLSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qPyovLApAQCAtMTE2LDYgKzExOCw3IEBA
IEZvbnQ6OkZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0dGVyU3BhY2lu
ZywgZmxvYXQgd29yZFNwYWNpbmcpCiB7CiB9CiAKKy8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0
aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgogRm9udDo6Rm9udChjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgYm9vbCBpc1ByaW50ZXJGb250LCBGb250U21vb3Ro
aW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKICAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNy
ZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCiAgICAgLCBtX2xldHRlclNwYWNpbmcoMCkK
QEAgLTEyNSw3ICsxMjgsMzEgQEAgRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBm
b250RGF0YSwgYm9vbCBpc1ByaW50ZXJGb250LCBGb250U21vb3RoaW5nTW8KIHsKICAgICBtX2Zv
bnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChpc1ByaW50ZXJGb250KTsKICAgICBtX2Zv
bnREZXNjcmlwdGlvbi5zZXRGb250U21vb3RoaW5nKGZvbnRTbW9vdGhpbmdNb2RlKTsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShDVEZv
bnRHZXRTaXplKGZvbnREYXRhLmZvbnQoKSkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENv
bXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnREYXRhLmZvbnQoKSkpOworICAgIG1fZm9udERl
c2NyaXB0aW9uLnNldEl0YWxpYyhDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250
KCkpICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWln
aHQoKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJh
aXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7CisjZW5kaWYKK30K
KworLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5k
ZXBlbmRlbnQuCisjaWYgUExBVEZPUk0oSU9TKQorRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBmb250RGF0YSwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikK
KyAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0
YSkpCisgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKKyAgICAsIG1fd29yZFNwYWNpbmcoMCkKKyAg
ICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQor
eworICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAgICBtX2Zv
bnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQp
KTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShw
cmltYXJ5Rm9udCkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhDVEZvbnRHZXRT
eW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBrQ1RGb250VHJhaXRJdGFsaWMpOworICAgIG1f
Zm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMocHJpbWFy
eUZvbnQpICYga0NURm9udFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHRO
b3JtYWwpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGZvbnREYXRh
LmlzUHJpbnRlckZvbnQoKSk7CisgICAgbV9nbHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9u
dEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKIH0KKyNlbmRp
ZgogCiBGb250OjpGb250KGNvbnN0IEZvbnQmIG90aGVyKQogICAgIDogbV9mb250RGVzY3JpcHRp
b24ob3RoZXIubV9mb250RGVzY3JpcHRpb24pCkBAIC0yOTcsMTQgKzMyNCwxNCBAQCB2b2lkIEZv
bnQ6OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25zdAog
ICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCk7
CiB9CiAKLXZvaWQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRv
LCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25z
dAorZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvLCBD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25zdAog
ewogICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUgd2UgYXJlIHVzaW5nIGN1c3RvbSBm
b250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLAogICAgIC8vIGV4Y2VwdCBp
ZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1ZSAoaW4gd2hpY2ggY2FzZSBpdCB3
aWxsIHVzZSBhIGZhbGxiYWNrCiAgICAgLy8gZm9udCkuCiAgICAgaWYgKGxvYWRpbmdDdXN0b21G
b250cygpICYmIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9PSBEb05vdFBhaW50SWZGb250Tm90
UmVhZHkpCi0gICAgICAgIHJldHVybjsKLSAgICAKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICB0
byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKIAogICAgIGlmIChjb2RlUGF0aChy
dW4pICE9IENvbXBsZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5k
ZXggZGI3ZTM2NGYyNzI1NDlkM2E5Zjg1MmJmMThhNThiNGUyMDk0MWI0Yy4uZTUzMThkYzBlODFm
NzIxMTJjZTU5NzIyNDU1ZTc1YTBjNWEzYTMwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuaApAQCAtODIsNiArODIsMTEgQEAgcHVibGljOgogICAgIEZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcp
OwogICAgIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgb25seSB1c2VkIGlmIHRoZSBwbGF0Zm9ybSB3
YW50cyB0byBzdGFydCB3aXRoIGEgbmF0aXZlIGZvbnQuCiAgICAgRm9udChjb25zdCBGb250UGxh
dGZvcm1EYXRhJiwgYm9vbCBpc1ByaW50aW5nLCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9v
dGhpbmcpOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3Ig
cGxhdGZvcm0taW5kZXBlbmRlbnQuCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEZvbnQoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisjZW5kaWYKICAg
ICB+Rm9udCgpOwogCiAgICAgRm9udChjb25zdCBGb250Jik7CkBAIC05OCw3ICsxMDMsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCB1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KSBjb25zdDsK
IAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5v
dFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5IH07Ci0gICAgdm9pZCBkcmF3VGV4dChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBm
cm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IERvTm90UGFp
bnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CisgICAgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGlu
dCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90
UmVhZHkpIGNvbnN0OwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQ
b2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OwogCiAgICAgRGFzaEFycmF5
IGRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxv
YXRQb2ludCYgdGV4dE9yaWdpbiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRSZWN0JiBs
aW5lRXh0ZW50cykgY29uc3Q7CkBAIC0xODAsMTAgKzE4NSwxMCBAQCBwcml2YXRlOgogCiAgICAg
Ly8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4KICAgICBmbG9hdCBnZXRH
bHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBp
bnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1w
aGFzaXMpIGNvbnN0OwotICAgIHZvaWQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dDsKKyAgICBmbG9hdCBkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9t
LCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdHbHlwaEJ1
ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXIm
LCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgdm9pZCBkcmF3R2x5cGhCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgRmxvYXRQ
b2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5n
JiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1w
bGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogICAgIGludCBvZmZz
ZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9u
LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKQEAgLTE5Niw3ICsyMDEsNyBAQCBw
cml2YXRlOgogCiAgICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4K
ICAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90
ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKLSAgICB2b2lkIGRyYXdDb21wbGV4VGV4dChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0OworICAgIGZsb2F0IGRyYXdDb21wbGV4VGV4dChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQg
dG8pIGNvbnN0OwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBj
b25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAgICAgZmxvYXQgZmxv
YXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0
OwogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
LCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAppbmRleCBlZDdh
MjAyZGNkMDk4OTYxY2NmOGY2NGEwZWY3ZjRkMDgxM2RiZjFlLi5mYmU4YmY0NGZkMzdkZWNmNGQ5
MzQ0YTgzYmZmNDA5YzkwOWIzNmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAgLTQ1LDE0ICs0NSw1MCBAQAogI2luY2x1ZGUgIk9wZW5U
eXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRl
ICJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KworLy8gRklYTUU6IFdlIG1heSBiZSBhYmxlIHRvIHNpbXBsaWZ5IHRoaXMgY29kZSB1c2luZyBD
KysxMSB0aHJlYWRpbmcgcHJpbWl0aXZlcywgaW5jbHVkaW5nIHN0ZDo6Y2FsbF9vbmNlKCkuCitz
dGF0aWMgcHRocmVhZF9tdXRleF90IGZvbnREYXRhTG9jazsKKworc3RhdGljIHZvaWQgaW5pdEZv
bnRDYWNoZUxvY2tPbmNlKCkKK3sKKyAgICBwdGhyZWFkX211dGV4YXR0cl90IG11dGV4QXR0cmli
dXRlOworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJm11dGV4QXR0cmlidXRlKTsKKyAgICBw
dGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZtdXRleEF0dHJpYnV0ZSwgUFRIUkVBRF9NVVRFWF9S
RUNVUlNJVkUpOworICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmZm9udERhdGFMb2NrLCAmbXV0ZXhB
dHRyaWJ1dGUpOworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJm11dGV4QXR0cmlidXRl
KTsKK30KKworc3RhdGljIHB0aHJlYWRfb25jZV90IGluaXRGb250TG9ja0NvbnRyb2wgPSBQVEhS
RUFEX09OQ0VfSU5JVDsKKworY2xhc3MgRm9udExvY2tlciB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRm9udExvY2tlcik7CitwdWJsaWM6CisgICAgRm9udExvY2tlcigpCisgICAgeworICAg
ICAgICBwdGhyZWFkX29uY2UoJmluaXRGb250TG9ja0NvbnRyb2wsIGluaXRGb250Q2FjaGVMb2Nr
T25jZSk7CisgICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmZm9udERh
dGFMb2NrKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFs
b2NrY29kZSwgImZvbnREYXRhTG9jayBsb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29k
ZSk7ICAgIAorICAgIH0KKyAgICB+Rm9udExvY2tlcigpCisgICAgeworICAgICAgICBpbnQgbG9j
a2NvZGUgPSBwdGhyZWFkX211dGV4X3VubG9jaygmZm9udERhdGFMb2NrKTsKKyAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnREYXRhTG9j
ayB1bmxvY2sgZmFpbGVkIHdpdGggY29kZTolZCIsIGxvY2tjb2RlKTsKKyAgICB9Cit9OworI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykKKwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCisvLyBGSVhNRTogV2Ugc2hvdWxkIHJldHVybiBhIHJlZmVyZW5jZSBpbnN0
ZWFkIG9mIGEgcG9pbnRlciBzaW5jZSB3ZSBuZXZlciByZXR1cm4gYSBudWxscHRyLgogRm9udENh
Y2hlKiBmb250Q2FjaGUoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udENhY2hlLCBn
bG9iYWxGb250Q2FjaGUsICgpKTsKLSAgICByZXR1cm4gJmdsb2JhbEZvbnRDYWNoZTsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhY2hlPiBnbG9iYWxGb250Q2FjaGU7CisgICAgcmV0
dXJuICZnbG9iYWxGb250Q2FjaGUuZ2V0KCk7CiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hlKCkK
QEAgLTE4NCw2ICsyMjAsMTAgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNo
ZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHBhc3NlZEZhbWlseU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIEZvbnRMb2NrZXIgZm9udExvY2tlcjsKKyNlbmRpZgorICAg
IAogI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKICAgICAvLyBM
ZWFkaW5nICJAIiBpbiB0aGUgZm9udCBuYW1lIGVuYWJsZXMgV2luZG93cyB2ZXJ0aWNhbCBmbG93
IGZsYWcgZm9yIHRoZSBmb250LgogICAgIC8vIEJlY2F1c2Ugd2UgZG8gdmVydGljYWwgZmxvdyBi
eSBvdXJzZWx2ZXMsIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBXaW5kb3dzIGZlYXR1cmUuCkBA
IC0zMTcsOCArMzU3LDE1IEBAIHR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBzdGQ6
OnBhaXI8UmVmUHRyPFNpbXBsZUZvbnREYXRhPiwgdW5zaWduZWQ+LCBGCiAKIHN0YXRpYyBGb250
RGF0YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9IDA7CiAKKyNpZiBQTEFURk9STShJT1MpCitjb25z
dCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSAxMjA7Citjb25zdCBpbnQgY1RhcmdldEluYWN0
aXZlRm9udERhdGEgPSAxMDA7Citjb25zdCBpbnQgY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFj
dGl2ZUZvbnREYXRhID0gNTA7Citjb25zdCBpbnQgY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJ
bmFjdGl2ZUZvbnREYXRhID0gMzA7CisjZWxzZQogY29uc3QgaW50IGNNYXhJbmFjdGl2ZUZvbnRE
YXRhID0gMjI1OwogY29uc3QgaW50IGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0gMjAwOworI2Vu
ZGlmCiBzdGF0aWMgTGlzdEhhc2hTZXQ8UmVmUHRyPFNpbXBsZUZvbnREYXRhPj4qIGdJbmFjdGl2
ZUZvbnREYXRhID0gMDsKIAogUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpn
ZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lLCBT
aG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQpAQCAtMzQwLDYgKzM4NywxMCBAQCBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEqCiAgICAgICAgIEFTU0VSVChtX3B1cmdlUHJldmVudENvdW50KTsKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEZvbnRMb2NrZXIgZm9udExvY2tlcjsKKyNlbmRp
ZgorICAgIAogICAgIGlmICghZ0ZvbnREYXRhQ2FjaGUpIHsKICAgICAgICAgZ0ZvbnREYXRhQ2Fj
aGUgPSBuZXcgRm9udERhdGFDYWNoZTsKICAgICAgICAgZ0luYWN0aXZlRm9udERhdGEgPSBuZXcg
TGlzdEhhc2hTZXQ8UmVmUHRyPFNpbXBsZUZvbnREYXRhPj47CkBAIC0zODAsNiArNDMxLDEwIEBA
IHZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhKQogICAgIEFTU0VSVChnRm9udERhdGFDYWNoZSk7CiAgICAgQVNTRVJUKCFmb250RGF0
YS0+aXNDdXN0b21Gb250KCkpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEZvbnRMb2NrZXIg
Zm9udExvY2tlcjsKKyNlbmRpZgorICAgIAogICAgIEZvbnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0
ID0gZ0ZvbnREYXRhQ2FjaGUtPmZpbmQoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKICAgICBB
U1NFUlQoaXQgIT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKTsKICAgICBpZiAoaXQgPT0gZ0ZvbnRE
YXRhQ2FjaGUtPmVuZCgpKQpAQCAtMzkyLDggKzQ0NywxNyBAQCB2b2lkIEZvbnRDYWNoZTo6cmVs
ZWFzZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKIAogdm9pZCBGb250
Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkKIHsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgYm9vbCB1bmRlck1lbW9yeVByZXNzdXJlID0gbWVtb3J5UHJlc3N1cmVIYW5kbGVy
KCkuaGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3VyZSgpOworICAgIGludCBpbmFjdGl2ZUZvbnREYXRh
TGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJlID8gY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFj
dGl2ZUZvbnREYXRhIDogY01heEluYWN0aXZlRm9udERhdGE7CisgICAgaW50IHRhcmdldEZvbnRE
YXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJlID8gY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1
cmVJbmFjdGl2ZUZvbnREYXRhIDogY1RhcmdldEluYWN0aXZlRm9udERhdGE7CisKKyAgICBpZiAo
Z0luYWN0aXZlRm9udERhdGEgJiYgIW1fcHVyZ2VQcmV2ZW50Q291bnQgJiYgZ0luYWN0aXZlRm9u
dERhdGEtPnNpemUoKSA+IGluYWN0aXZlRm9udERhdGFMaW1pdCkKKyAgICAgICAgcHVyZ2VJbmFj
dGl2ZUZvbnREYXRhKGdJbmFjdGl2ZUZvbnREYXRhLT5zaXplKCkgLSB0YXJnZXRGb250RGF0YUxp
bWl0KTsKKyNlbHNlCiAgICAgaWYgKGdJbmFjdGl2ZUZvbnREYXRhICYmICFtX3B1cmdlUHJldmVu
dENvdW50ICYmIGdJbmFjdGl2ZUZvbnREYXRhLT5zaXplKCkgPiBjTWF4SW5hY3RpdmVGb250RGF0
YSkKICAgICAgICAgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGdJbmFjdGl2ZUZvbnREYXRhLT5zaXpl
KCkgLSBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSk7CisjZW5kaWYKIH0KIAogdm9pZCBGb250Q2Fj
aGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgY291bnQpCkBAIC00MDksNiArNDczLDEwIEBA
IHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNvdW50KQogCiAgICAg
aXNQdXJnaW5nID0gdHJ1ZTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBGb250TG9ja2VyIGZv
bnRMb2NrZXI7CisjZW5kaWYKKwogICAgIFZlY3RvcjxSZWZQdHI8U2ltcGxlRm9udERhdGE+LCAy
MD4gZm9udERhdGFUb0RlbGV0ZTsKICAgICBMaXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERh
dGE+Pjo6aXRlcmF0b3IgZW5kID0gZ0luYWN0aXZlRm9udERhdGEtPmVuZCgpOwogICAgIExpc3RI
YXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4+OjppdGVyYXRvciBpdCA9IGdJbmFjdGl2ZUZv
bnREYXRhLT5iZWdpbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuaAppbmRleCBiNWNmMDkxNmM3N2I0MzUzZTMzYzM4MTgyZjk4ZWExZDFhNjQyODU1Li41
NjcwMmVkMzQyOWZkZDcxYzYzYzdlODMyMDlmODdmMjNkODY2NjA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaApAQCAtMzMsMTIgKzMzLDE3IEBACiAj
aW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUg
PENvcmVUZXh0L0NURm9udC5oPgorI2VuZGlmCisKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUg
PHdpbmRvd3MuaD4KICNpbmNsdWRlIDxvYmppZGwuaD4KQEAgLTEwMCw5ICsxMDUsOSBAQCBzdHJ1
Y3QgRm9udERlc2NyaXB0aW9uRm9udERhdGFDYWNoZUtleSB7CiB9OwogCiBjbGFzcyBGb250Q2Fj
aGUgewotICAgIGZyaWVuZCBjbGFzcyBGb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKLQogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEZvbnRDYWNoZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
ICAgIGZyaWVuZCBjbGFzcyBGb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKKyAgICBmcmllbmQgY2xh
c3MgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhY2hlPjsKIHB1YmxpYzoKICAgICBmcmllbmQgRm9udENh
Y2hlKiBmb250Q2FjaGUoKTsKIApAQCAtMTE3LDYgKzEyMiw5IEBAIHB1YmxpYzoKICAgICAvLyBB
bHNvIGltcGxlbWVudGVkIGJ5IHRoZSBwbGF0Zm9ybS4KICAgICB2b2lkIHBsYXRmb3JtSW5pdCgp
OwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBmbG9hdCB3ZWlnaHRPZkNURm9udChD
VEZvbnRSZWYpOworI2VuZGlmCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIElNTGFuZ0ZvbnRMaW5r
VHlwZSogZ2V0Rm9udExpbmtJbnRlcmZhY2UoKTsKICAgICBzdGF0aWMgdm9pZCBjb21Jbml0aWFs
aXplKCk7CkBAIC0xNzgsNiArMTg2LDEwIEBAIHByaXZhdGU6CiAgICAgRm9udFBsYXRmb3JtRGF0
YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25z
dCBBdG9taWNTdHJpbmcmIGZhbWlseSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxz
ZSk7CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSBlYWNoIHBsYXRm
b3JtLgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDdXN0b21G
YWxsYmFja0ZvbnQoY29uc3QgVUludDMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAgICBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpOworI2VuZGlmCiAgICAgUGFzc093blB0cjxG
b250UGxhdGZvcm1EYXRhPiBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJik7CkBAIC0xOTMsNiArMjA1LDkgQEAgcHJpdmF0ZToKICNlbmRp
ZgogICAgIGZyaWVuZCBjbGFzcyBTaW1wbGVGb250RGF0YTsgLy8gRm9yIGdldENhY2hlZEZvbnRE
YXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqKQogICAgIGZyaWVuZCBjbGFzcyBGb250R2x5cGhz
OworI2lmIFBMQVRGT1JNKElPUykKKyAgICBmcmllbmQgY2xhc3MgQ29tcGxleFRleHRDb250cm9s
bGVyOworI2VuZGlmCiB9OwogCiAvLyBHZXQgdGhlIGdsb2JhbCBmb250Q2FjaGUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAppbmRleCAw
NzQwMTczNWQ3MzFlMmJjNGIxZGM0M2EzOGM0NTYxYzM3YTMyZGU1Li45NTYzNDM3M2U5NTU3YTQ5
NTAyOWIyZjkwYTA0YzBhYTM0MGNiNjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBmbG9hdCBG
b250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBpbnQgZnJvbSwgaW50CiAgICAgcmV0dXJuIGJlZm9yZVdpZHRoOwogfQogCi12b2lkIEZvbnQ6
OmRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zs
b2F0IEZvbnQ6OmRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykg
Y29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzK2FkdmFu
Y2VzK2ZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZl
cjsKQEAgLTE2NiwxMCArMTY2LDEyIEBAIHZvaWQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsCiAgICAgZmxv
YXQgc3RhcnRYID0gcG9pbnQueCgpICsgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0
KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyKTsKIAogICAgIGlmIChnbHlwaEJ1ZmZlci5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBGbG9hdFBv
aW50IHN0YXJ0UG9pbnQoc3RhcnRYLCBwb2ludC55KCkpOwogICAgIGRyYXdHbHlwaEJ1ZmZlcihj
b250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBzdGFydFBvaW50KTsKKworICAgIHJldHVybiBzdGFy
dFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAogdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0Zv
clNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0CkBAIC0xODMsOCArMTg1LDggQEAgdm9pZCBGb250OjpkcmF3RW1w
aGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBU
ZXh0UnUKICAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBt
YXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsK
IH0KIAotdm9pZCBGb250OjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci17ICAgCit2b2lkIEZvbnQ6OmRyYXdHbHlwaEJ1
ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKICNp
ZiAhRU5BQkxFKFNWR19GT05UUykKICAgICBVTlVTRURfUEFSQU0ocnVuKTsKICNlbmRpZgpAQCAt
MjI2LDkgKzIyOCwxMSBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRwogI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCiAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQgJiYgZm9udERhdGEtPmlzU1ZHRm9udCgp
KQogICAgICAgICByZW5kZXJpbmdDb250ZXh0LT5kcmF3U1ZHR2x5cGhzKGNvbnRleHQsIGZvbnRE
YXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBv
aW50KTsKLSAgICBlbHNlCisgICAgZWxzZSB7CiAjZW5kaWYKICAgICAgICAgZHJhd0dseXBocyhj
b250ZXh0LCBmb250RGF0YSwgZ2x5cGhCdWZmZXIsIGxhc3RGcm9tLCBuZXh0R2x5cGggLSBsYXN0
RnJvbSwgc3RhcnRQb2ludCk7CisgICAgICAgIHBvaW50LnNldFgobmV4dFgpOworICAgIH0KIH0K
IAogaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGgoY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaAppbmRleCAyOWVkZGU3OTA5ZjRkNjQzNDI1YzgyZjQy
ODA5ZjNiZDIxMmVjNzU5Li40YzcwZDdkZjI3YTlmZTU2ZmQxNDRmYWQ3OTE3OGU1N2UxNGEzMjU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCkBA
IC0yNyw2ICsyNywxMCBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJXZWJDb3JlVGhy
ZWFkLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHbHlwaFBhZ2VU
cmVlTm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggMjFiZWEzNzM1ODYzM2VlYTI3NmI2N2Y5MzBhNDA0YmFh
MDNlNTI1Yy4uNTMwOGViZGZlNWM1MjU3MDFiOTVmYTM2MWVkM2U3MDU0MTIyYTZjNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0
YS5jcHAKQEAgLTMzLDYgKzMzLDkgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCiAgICAgOiBtX3N5bnRoZXRpY0JvbGQo
ZmFsc2UpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCiAgICAgLCBtX29yaWVudGF0
aW9uKEhvcml6b250YWwpCisjaWYgUExBVEZPUk0oSU9TKQorICAgICwgbV9pc0Vtb2ppKGZhbHNl
KQorI2VuZGlmCiAgICAgLCBtX3NpemUoMCkKICAgICAsIG1fd2lkdGhWYXJpYW50KFJlZ3VsYXJX
aWR0aCkKICNpZiBQTEFURk9STShXSU4pCkBAIC02MCw2ICs2Myw5IEBAIEZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEoKQogICAgIDogbV9zeW50aGV0aWNCb2xkKGZhbHNlKQogICAg
ICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQogICAgICwgbV9vcmllbnRhdGlvbihIb3Jpem9u
dGFsKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1faXNFbW9qaShmYWxzZSkKKyNlbmRpZgog
ICAgICwgbV9zaXplKDApCiAgICAgLCBtX3dpZHRoVmFyaWFudChSZWd1bGFyV2lkdGgpCiAjaWYg
T1MoREFSV0lOKQpAQCAtODUsNiArOTEsOSBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aQogICAg
IDogbV9zeW50aGV0aWNCb2xkKHN5bnRoZXRpY0JvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlx
dWUoc3ludGhldGljT2JsaXF1ZSkKICAgICAsIG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24pCisj
aWYgUExBVEZPUk0oSU9TKQorICAgICwgbV9pc0Vtb2ppKGZhbHNlKQorI2VuZGlmCiAgICAgLCBt
X3NpemUoc2l6ZSkKICAgICAsIG1fd2lkdGhWYXJpYW50KHdpZHRoVmFyaWFudCkKICNpZiBPUyhE
QVJXSU4pCkBAIC0xMTEsNiArMTIwLDkgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YShDR0ZvbnRSZWYgY2dGb250LCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0IKICAgICA6
IG1fc3ludGhldGljQm9sZChzeW50aGV0aWNCb2xkKQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVl
KHN5bnRoZXRpY09ibGlxdWUpCiAgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQorI2lm
IFBMQVRGT1JNKElPUykKKyAgICAsIG1faXNFbW9qaShmYWxzZSkKKyNlbmRpZgogICAgICwgbV9z
aXplKHNpemUpCiAgICAgLCBtX3dpZHRoVmFyaWFudCh3aWR0aFZhcmlhbnQpCiAgICAgLCBtX2Zv
bnQoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQ
bGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0
Zm9ybURhdGEuaAppbmRleCA3MDBkYjk1ZDAzZTlmZTMxYzNmMTY0YTQ4YjAxOTUzMWYzYzViOTUy
Li4wNWRmY2MzM2M4MTgzNTQ2Njk1YTRmNzVhNTU3ZjQ2MDUwNTI0NjVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC00
OSw2ICs0OSwxMCBAQAogI2lmIE9TKERBUldJTikKIE9CSkNfQ0xBU1MgTlNGb250OwogCisjaWYg
UExBVEZPUk0oSU9TKQorI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2Vu
ZGlmCisKIHR5cGVkZWYgc3RydWN0IENHRm9udCogQ0dGb250UmVmOwogdHlwZWRlZiBjb25zdCBz
dHJ1Y3QgX19DVEZvbnQqIENURm9udFJlZjsKICNlbmRpZgpAQCAtNzksNyArODMsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBTaGFyZWRCdWZm
ZXI7CiAKLSNpZiBPUyhEQVJXSU4pCisjaWYgT1MoREFSV0lOKSAmJiBVU0UoQVBQS0lUKQogaW5s
aW5lIENURm9udFJlZiB0b0NURm9udFJlZihOU0ZvbnQgKm5zRm9udCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxDVEZvbnRSZWY+KG5zRm9udCk7IH0KICNlbmRpZgogCkBAIC05Miw4ICs5Niwx
NCBAQCBwdWJsaWM6CiAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIHN5bnRo
ZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uID0gSG9yaXpv
bnRhbCwgRm9udFdpZHRoVmFyaWFudCA9IFJlZ3VsYXJXaWR0aCk7CiAKICNpZiBPUyhEQVJXSU4p
CisjaWYgVVNFKEFQUEtJVCkKICAgICBGb250UGxhdGZvcm1EYXRhKE5TRm9udCosIGZsb2F0IHNp
emUsIGJvb2wgaXNQcmludGVyRm9udCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY0JvbGQgPSBmYWxz
ZSwgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICBG
b250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBGb250V2lkdGhWYXJpYW50ID0gUmVndWxhcldp
ZHRoKTsKKyNlbHNlCisgICAgRm9udFBsYXRmb3JtRGF0YShDVEZvbnRSZWYsIGZsb2F0IHNpemUs
IGJvb2wgaXNQcmludGVyRm9udCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY0JvbGQgPSBmYWxzZSwg
Ym9vbCBzeW50aGV0aWNPYmxpcXVlID0gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICBGb250
T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBGb250V2lkdGhWYXJpYW50ID0gUmVndWxhcldpZHRo
KTsKKyNlbmRpZgorCiAjaWYgVVNFKENHKQogICAgIEZvbnRQbGF0Zm9ybURhdGEoQ0dGb250UmVm
LCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwg
Rm9udE9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJpYW50KTsKICNlbmRpZgpAQCAtMTA3LDExICsx
MTcsMTggQEAgcHVibGljOgogI2VuZGlmCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBGb250UGxhdGZvcm1EYXRhKENURm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNC
b2xkID0gZmFsc2UsIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9IGZhbHNlLCBGb250T3JpZW50YXRp
b24gPSBIb3Jpem9udGFsLCBGb250V2lkdGhWYXJpYW50ID0gUmVndWxhcldpZHRoKTsKKyNlbmRp
ZgorCiAgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBI
Rk9OVCBoZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udCA/IG1fZm9udC0+Z2V0KCkgOiAwOyB9
CiAgICAgYm9vbCB1c2VHREkoKSBjb25zdCB7IHJldHVybiBtX3VzZUdESTsgfQorI2VsaWYgUExB
VEZPUk0oSU9TKQorICAgIENURm9udFJlZiBmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9
CisgICAgdm9pZCBzZXRGb250KENURm9udFJlZik7CiAjZWxpZiBPUyhEQVJXSU4pCiAgICAgTlNG
b250KiBmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9CiAgICAgdm9pZCBzZXRGb250KE5T
Rm9udCopOwpAQCAtMTIyLDcgKzEzOSwxMiBAQCBwdWJsaWM6CiAgICAgQ0dGb250UmVmIGNnRm9u
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY2dGb250LmdldCgpOyB9CiAgICAgQ1RGb250UmVmIGN0Rm9u
dCgpIGNvbnN0OwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBib29sIHJvdW5kc0dseXBoQWR2
YW5jZXMoKSBjb25zdDsKKyNlbHNlCisgICAgYm9vbCByb3VuZHNHbHlwaEFkdmFuY2VzKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCiAgICAgYm9v
bCBhbGxvd3NMaWdhdHVyZXMoKSBjb25zdDsKICNlbHNlCiAgICAgQ0dGb250UmVmIGNnRm9udCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2dGb250LmdldCgpOyB9CkBAIC0xNTMsMTAgKzE3NSwxNSBAQCBw
dWJsaWM6CiAjaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKENBSVJPKQogICAgICAgICByZXR1cm4g
bV9mb250ID8gbV9mb250LT5oYXNoKCkgOiAwOwogI2VsaWYgT1MoREFSV0lOKQorI2lmICFQTEFU
Rk9STShJT1MpCiAjaWYgVVNFKENHKQogICAgICAgICBBU1NFUlQobV9mb250IHx8ICFtX2NnRm9u
dCk7CiAjZW5kaWYKICAgICAgICAgdWludHB0cl90IGhhc2hDb2Rlc1szXSA9IHsgKHVpbnRwdHJf
dCltX2ZvbnQsIG1fd2lkdGhWYXJpYW50LCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG1faXNQcmlu
dGVyRm9udCA8PCAzIHwgbV9vcmllbnRhdGlvbiA8PCAyIHwgbV9zeW50aGV0aWNCb2xkIDw8IDEg
fCBtX3N5bnRoZXRpY09ibGlxdWUpIH07CisjZWxzZQorICAgICAgICBBU1NFUlQobV9mb250IHx8
ICFtX2NnRm9udCB8fCBtX2lzRW1vamkpOworICAgICAgICB1aW50cHRyX3QgaGFzaENvZGVzWzNd
ID0geyBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KENGSGFzaChtX2ZvbnQpKSwgbV93aWR0aFZhcmlh
bnQsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obV9pc0Vtb2ppIDw8IDQgfCBtX2lzUHJpbnRlckZv
bnQgPDwgMyB8IG1fb3JpZW50YXRpb24gPDwgMiB8IG1fc3ludGhldGljQm9sZCA8PCAxIHwgbV9z
eW50aGV0aWNPYmxpcXVlKSB9OworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAgICAgICAgIHJl
dHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rl
cyk7CiAjZWxpZiBVU0UoQ0FJUk8pCiAgICAgICAgIHJldHVybiBQdHJIYXNoPGNhaXJvX3NjYWxl
ZF9mb250X3QqPjo6aGFzaChtX3NjYWxlZEZvbnQpOwpAQCAtMjAzLDcgKzIzMCw5IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBwbGF0Zm9ybUlzRXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpIGNv
bnN0OwogICAgIHZvaWQgcGxhdGZvcm1EYXRhSW5pdChjb25zdCBGb250UGxhdGZvcm1EYXRhJik7
CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhQXNzaWduKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmKTsKLSNpZiBPUyhEQVJXSU4pCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IHN0YXRpYyBDVEZvbnRSZWYgaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Q1RGb250UmVmPigtMSk7IH0KKyNlbGlmIE9TKERBUldJTikKICAgICAv
LyBMb2FkIHZhcmlvdXMgZGF0YSBhYm91dCB0aGUgZm9udCBzcGVjaWZpZWQgYnkgfG5zRm9udHwg
d2l0aCB0aGUgc2l6ZSBmb250U2l6ZSBpbnRvIHRoZSBmb2xsb3dpbmcgb3V0cHV0IHBhcmFtdGVy
czoKICAgICB2b2lkIGxvYWRGb250KE5TRm9udCosIGZsb2F0IGZvbnRTaXplLCBOU0ZvbnQqJiBv
dXROU0ZvbnQsIENHRm9udFJlZiYpOwogICAgIHN0YXRpYyBOU0ZvbnQqIGhhc2hUYWJsZURlbGV0
ZWRGb250VmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PE5TRm9udCAqPigtMSk7IH0K
QEAgLTIxOSwxMSArMjQ4LDE2IEBAIHB1YmxpYzoKICAgICBib29sIG1fc3ludGhldGljQm9sZDsK
ICAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZTsKICAgICBGb250T3JpZW50YXRpb24gbV9vcmll
bnRhdGlvbjsKKyNpZiBQTEFURk9STShJT1MpCisgICAgYm9vbCBtX2lzRW1vamk7CisjZW5kaWYK
ICAgICBmbG9hdCBtX3NpemU7CiAgICAgRm9udFdpZHRoVmFyaWFudCBtX3dpZHRoVmFyaWFudDsK
IAogcHJpdmF0ZToKLSNpZiBPUyhEQVJXSU4pCisjaWYgUExBVEZPUk0oSU9TKQorICAgIENURm9u
dFJlZiBtX2ZvbnQ7CisjZWxpZiBPUyhEQVJXSU4pCiAgICAgTlNGb250KiBtX2ZvbnQ7CiAjZWxp
ZiBQTEFURk9STShXSU4pCiAgICAgUmVmUHRyPFNoYXJlZEdESU9iamVjdDxIRk9OVD4+IG1fZm9u
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFn
ZVRyZWVOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFn
ZVRyZWVOb2RlLmNwcAppbmRleCA2NDU0ZTczZTc2ZTlkYjhmM2JlYTNhNGFmMjNjNDdlNzkzY2Rj
YjBhLi5jYWVmNWU5ZDY5ZGEyZGU0ZTE0Njk0NjA2OTc2MGY4ZWY1ZGI4NTE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUu
Y3BwCkBAIC0yMTIsNiArMjEyLDE0IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxp
emVQYWdlKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgcGFnZU51CiAgICAgICAg
ICAgICAgICAgICAgIG1fcGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSh0
aGlzKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG1fcGFnZSA9
IEdseXBoUGFnZTo6Y3JlYXRlRm9yU2luZ2xlRm9udERhdGEodGhpcywgc3RhdGljX2Nhc3Q8Y29u
c3QgU2ltcGxlRm9udERhdGEqPihmb250RGF0YSkpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlw
aHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgorICAgICAgICAgICAgICAgIC8vIE9uY2Ugd2UgaGF2ZSB0
aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2Rl
IHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygp
CisgICAgICAgICAgICAgICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1Pi4KKyAgICAg
ICAgICAgICAgICBpZiAocGFnZU51bWJlciA9PSA2ICYmIHN0YXRpY19jYXN0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4oZm9udERhdGEpLT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAg
ICAgICAgICAgICAgICAgaGF2ZUdseXBocyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGVsc2UK
KyNlbmRpZgogICAgICAgICAgICAgICAgIGhhdmVHbHlwaHMgPSBmaWxsKG1fcGFnZS5nZXQoKSwg
MCwgR2x5cGhQYWdlOjpzaXplLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgc3RhdGljX2Nhc3Q8Y29u
c3QgU2ltcGxlRm9udERhdGEqPihmb250RGF0YSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBtX3BhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvck1peGVkRm9udERhdGEo
dGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcAppbmRleCAwYzQ1ZWJlMDc3MjI4MDdjMjczNTIwZDgxOGU1NmE0YThiZGEx
MWU4Li5mMTJmMDJhNmY2Zjg1NjY5ZmUyZDdiMmMwMzkwN2E1YzAzZTM4NzhhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAK
QEAgLTc2LDEyICs3NiwyMSBAQCBwcml2YXRlOgogICAgIGludCBtX29mZnNldDsKIH07CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KQogICAgIDogbV91cGRh
dGluZ0NvbnRyb2xUaW50cyhmYWxzZSkKICAgICAsIG1fdHJhbnNwYXJlbmN5Q291bnQoMCkKIHsK
ICAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwogfQorI2Vsc2UKK0dy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBw
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgYm9vbCBzaG91bGRVc2VDb250ZXh0Q29sb3JzKQorICAg
IDogbV91cGRhdGluZ0NvbnRyb2xUaW50cyhmYWxzZSkKKyAgICAsIG1fdHJhbnNwYXJlbmN5Q291
bnQoMCkKK3sKKyAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIHNob3Vs
ZFVzZUNvbnRleHRDb2xvcnMpOworfQorI2VuZGlmCiAKIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBo
aWNzQ29udGV4dCgpCiB7CkBAIC0xMTUsNiArMTI0LDI4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpyZXN0b3JlKCkKICAgICByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwogfQogCisjaWYgUExBVEZP
Uk0oSU9TKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgQ29sb3JTcGFjZSBlbGxp
cHNlQ29sb3JTcGFjZSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBDb2xvclNwYWNlIHNoYWRv
d0NvbG9yU3BhY2UpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2F2ZSgpOworCisgICAgc2V0U3Ryb2tlQ29sb3Ioc2hhZG93Q29sb3IsIHNo
YWRvd0NvbG9yU3BhY2UpOworICAgIHNldEZpbGxDb2xvcihzaGFkb3dDb2xvciwgc2hhZG93Q29s
b3JTcGFjZSk7CisKKyAgICBkcmF3RWxsaXBzZShGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgp
ICsgMSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CisKKyAgICBzZXRTdHJva2VDb2xv
cihlbGxpcHNlQ29sb3IsIGVsbGlwc2VDb2xvclNwYWNlKTsKKyAgICBzZXRGaWxsQ29sb3IoZWxs
aXBzZUNvbG9yLCBlbGxpcHNlQ29sb3JTcGFjZSk7CisKKyAgICBkcmF3RWxsaXBzZShyZWN0KTsg
IAorCisgICAgcmVzdG9yZSgpOworfQorI2VuZGlmCisKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQogewogICAgIG1fc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzID0gdGhpY2tuZXNzOwpAQCAtNDA0LDYgKzQzNSw5IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0OjpwYWludGluZ0Rpc2FibGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9zdGF0ZS5wYWlu
dGluZ0Rpc2FibGVkOwogfQogCisvLyBGSVhNRTogUmVwbGFjZSB0aGUgbm9uLWlPUyBpbXBsZW1l
bnRhdGlvbiB3aXRoIHRoZSBpT1MgaW1wbGVtZW50YXRpb24gc2luY2UgdGhlIGxhdHRlciBjb21w
dXRlcyByZXR1cm5zCisvLyB0aGUgd2lkdGggb2YgdGhlIGRyYXduIHRleHQuIEVuc3VyZSB0aGF0
IHRoZXJlIGFyZW4ndCBub3RpY2VhYmxlIGRpZmZlcmVuY2VzIGluIGxheW91dC4KKyNpZiAhUExB
VEZPUk0oSU9TKQogI2lmICFVU0UoV0lOR0RJKQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdU
ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCiB7CkBAIC00MTMsNiArNDQ3LDE1IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEZsb2F0CiAgICAgZm9udC5kcmF3VGV4dCh0aGlzLCBydW4sIHBvaW50LCBm
cm9tLCB0byk7CiB9CiAjZW5kaWYKKyNlbHNlCitmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdU
ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZm9udC5kcmF3VGV4dCh0aGlzLCBy
dW4sIHBvaW50LCBmcm9tLCB0byk7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKIHsKQEAgLTQyMiwyMSArNDY1LDQ0IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250JiBmb250LCBj
b25zdCBUZXh0UnVuJiBydW4sIGNvCiAgICAgZm9udC5kcmF3RW1waGFzaXNNYXJrcyh0aGlzLCBy
dW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKKy8vIEZJWE1FOiBCZXR0ZXIgbWVyZ2Ug
dGhlIGlPUyBhbmQgbm9uLWlPUyBkaWZmZXJlbmNlcy4gSW4gcGFydGljdWxhciwgbWFrZSB0aGlz
IG1ldGhvZCB1c2UgdGhlCisvLyByZXR1cm5lZCB3aWR0aCBvZiB0aGUgZHJhd24gdGV4dCwgRm9u
dDo6ZHJhd1RleHQoKSwgaW5zdGVhZCBvZiBjb21wdXRpbmcgaXQuIEVuc3VyZSB0aGF0IHRoZXJl
CisvLyBhcmVuJ3Qgbm90aWNlYWJsZSBkaWZmZXJlbmNlcyBpbiBsYXlvdXQgd2l0aCBzdWNoIGEg
Y2hhbmdlLgorI2lmICFQTEFURk9STShJT1MpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Jp
ZGlUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90
UmVhZHlBY3Rpb24pCisjZWxzZQorZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgRm9udDo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiwgQmlkaVN0YXR1cyogc3RhdHVzLCBpbnQgbGVuZ3RoKQorI2VuZGlmCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICByZXR1cm47
CisjZWxzZQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgogCiAgICAgQmlkaVJlc29sdmVyPFRl
eHRSdW5JdGVyYXRvciwgQmlkaUNoYXJhY3RlclJ1bj4gYmlkaVJlc29sdmVyOworI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgYmlkaVJlc29sdmVyLnNldFN0YXR1cyhCaWRpU3RhdHVzKHJ1bi5kaXJl
Y3Rpb24oKSwgcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSkpOworI2Vsc2UKKyAgICBiaWRpUmVz
b2x2ZXIuc2V0U3RhdHVzKHN0YXR1cyA/ICpzdGF0dXMgOiBCaWRpU3RhdHVzKHJ1bi5kaXJlY3Rp
b24oKSwgcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSkpOworI2VuZGlmCiAgICAgYmlkaVJlc29s
dmVyLnNldFBvc2l0aW9uSWdub3JpbmdOZXN0ZWRJc29sYXRlcyhUZXh0UnVuSXRlcmF0b3IoJnJ1
biwgMCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgb3duZXJzaGlwIHNob3VsZCBiZSByZXZlcnNl
ZC4gV2Ugc2hvdWxkIHBhc3MgQmlkaVJ1bkxpc3QKICAgICAvLyB0byBCaWRpUmVzb2x2ZXIgaW4g
Y3JlYXRlQmlkaVJ1bnNGb3JMaW5lLgogICAgIEJpZGlSdW5MaXN0PEJpZGlDaGFyYWN0ZXJSdW4+
JiBiaWRpUnVucyA9IGJpZGlSZXNvbHZlci5ydW5zKCk7CisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBiaWRpUmVzb2x2ZXIuY3JlYXRlQmlkaVJ1bnNGb3JMaW5lKFRleHRSdW5JdGVyYXRvcigmcnVu
LCBydW4ubGVuZ3RoKCkpKTsKKyNlbHNlCisgICAgYmlkaVJlc29sdmVyLmNyZWF0ZUJpZGlSdW5z
Rm9yTGluZShUZXh0UnVuSXRlcmF0b3IoJnJ1biwgbGVuZ3RoIDwgMCA/IHJ1bi5sZW5ndGgoKSA6
IGxlbmd0aCkpOworI2VuZGlmICAgIAogICAgIGlmICghYmlkaVJ1bnMucnVuQ291bnQoKSkKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgICAgICByZXR1cm47CisjZWxzZQorICAgICAgICByZXR1cm4g
MDsKKyNlbmRpZgogCiAgICAgRmxvYXRQb2ludCBjdXJyUG9pbnQgPSBwb2ludDsKICAgICBCaWRp
Q2hhcmFjdGVyUnVuKiBiaWRpUnVuID0gYmlkaVJ1bnMuZmlyc3RSdW4oKTsKQEAgLTQ0NiwxNSAr
NTEyLDMwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGCiAgICAgICAgIHN1YnJ1bi5zZXREaXJl
Y3Rpb24oaXNSVEwgPyBSVEwgOiBMVFIpOwogICAgICAgICBzdWJydW4uc2V0RGlyZWN0aW9uYWxP
dmVycmlkZShiaWRpUnVuLT5kaXJPdmVycmlkZShmYWxzZSkpOwogCisjaWYgIVBMQVRGT1JNKElP
UykKICAgICAgICAgZm9udC5kcmF3VGV4dCh0aGlzLCBzdWJydW4sIGN1cnJQb2ludCwgMCwgLTEs
IGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7CiAKICAgICAgICAgYmlkaVJ1biA9IGJpZGlSdW4t
Pm5leHQoKTsKICAgICAgICAgLy8gRklYTUU6IEhhdmUgRm9udDo6ZHJhd1RleHQgcmV0dXJuIHRo
ZSB3aWR0aCBvZiB3aGF0IGl0IGRyZXcgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJlLW1lYXN1
cmUgaGVyZS4KICAgICAgICAgaWYgKGJpZGlSdW4pCiAgICAgICAgICAgICBjdXJyUG9pbnQubW92
ZShmb250LndpZHRoKHN1YnJ1biksIDApOworI2Vsc2UKKyAgICAgICAgZmxvYXQgd2lkdGggPSBm
b250LmRyYXdUZXh0KHRoaXMsIHN1YnJ1biwgY3VyclBvaW50LCAwLCAtMSwgY3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uKTsKKyAgICAgICAgY3VyclBvaW50Lm1vdmUod2lkdGgsIDApOworCisgICAg
ICAgIGJpZGlSdW4gPSBiaWRpUnVuLT5uZXh0KCk7CisjZW5kaWYKICAgICB9CiAKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgKnN0YXR1cyA9IGJpZGlSZXNvbHZl
ci5zdGF0dXMoKTsKKyNlbmRpZgogICAgIGJpZGlSdW5zLmRlbGV0ZVJ1bnMoKTsKKworI2lmIFBM
QVRGT1JNKElPUykKKyAgICByZXR1cm4gY3VyclBvaW50LngoKSAtIHN0YXRpY19jYXN0PGZsb2F0
Pihwb2ludC54KCkpOworI2VuZGlmCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SGln
aGxpZ2h0Rm9yVGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvciwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBpbnQgZnJvbSwgaW50IHRvKQpAQCAtNjE1LDYgKzY5Niwx
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IFJvdW5kZWRS
ZWN0JiByZWN0KQogICAgIGNsaXAocGF0aCk7CiB9CiAKKy8vIEZJWE1FOiBDb25zaWRlciB3cml0
aW5nIHRoaXMgaW4gdGVybXMgb2YgYSBzcGVjaWFsaXplZCBSb3VuZGVkUmVjdCB0aGF0IHVzZXMg
RmxvYXRSZWN0IGFuZCBGbG9hdFNpemUgcmFkaWkuCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRTaXplJiB0b3BM
ZWZ0LCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0LAorICAgIGNvbnN0IEZsb2F0U2l6ZSYgYm90
dG9tTGVmdCwgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodCkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0
aC5hZGRSb3VuZGVkUmVjdChyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90
dG9tUmlnaHQpOworICAgIGNsaXAocGF0aCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0Um91bmRlZFJlY3QoY29uc3QgUm91bmRlZFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKQEAgLTczMiw2ICs4MjUsMTggQEAgQmxlbmRNb2RlIEdyYXBoaWNz
Q29udGV4dDo6YmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QKICAgICByZXR1cm4gbV9zdGF0ZS5i
bGVuZE1vZGU7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitib29sIEdyYXBoaWNzQ29udGV4dDo6
ZW1vamlEcmF3aW5nRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIG1fc3RhdGUuZW1vamlEcmF3aW5n
RW5hYmxlZDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEVtb2ppRHJhd2luZ0VuYWJs
ZWQoYm9vbCBlbW9qaURyYXdpbmdFbmFibGVkKQoreworICAgIG1fc3RhdGUuZW1vamlEcmF3aW5n
RW5hYmxlZCA9IGVtb2ppRHJhd2luZ0VuYWJsZWQ7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spCiB7
CiAgICAgbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApp
bmRleCAxN2M0Y2U0ZGQ3MzFlMzM0MzgzZmNmMTRkNjdiNTUzZWYzM2UyZDNjLi40Y2E4ZTkzMGRk
ZjE4NDliN2U1ODg0MDA0MGQ1M2RmNDllZDJkYTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtOTMsNiArOTMsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgY2xh
c3MgVGV4dFJ1bjsKICAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgc3RydWN0IEJpZGlTdGF0dXM7CisjZW5kaWYKIAogICAgIGVudW0gVGV4dERy
YXdpbmdNb2RlIHsKICAgICAgICAgVGV4dE1vZGVGaWxsID0gMSA8PCAwLApAQCAtMTM2LDYgKzEz
OSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIHNoYWRvd0NvbG9yU3Bh
Y2UoQ29sb3JTcGFjZURldmljZVJHQikKICAgICAgICAgICAgICwgY29tcG9zaXRlT3BlcmF0b3Io
Q29tcG9zaXRlU291cmNlT3ZlcikKICAgICAgICAgICAgICwgYmxlbmRNb2RlKEJsZW5kTW9kZU5v
cm1hbCkKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICAsIGVtb2ppRHJhd2luZ0VuYWJs
ZWQodHJ1ZSkKKyAgICAgICAgICAgICwgc2hvdWxkVXNlQ29udGV4dENvbG9ycyh0cnVlKQorI2Vu
ZGlmCiAgICAgICAgICAgICAsIHNob3VsZEFudGlhbGlhcyh0cnVlKQogICAgICAgICAgICAgLCBz
aG91bGRTbW9vdGhGb250cyh0cnVlKQogICAgICAgICAgICAgLCBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHModHJ1ZSkKQEAgLTE3Nyw2ICsxODQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcjsKICAgICAgICAgQmxl
bmRNb2RlIGJsZW5kTW9kZTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgYm9vbCBlbW9q
aURyYXdpbmdFbmFibGVkIDogMTsKKyAgICAgICAgYm9vbCBzaG91bGRVc2VDb250ZXh0Q29sb3Jz
IDogMTsKKyNlbmRpZgogICAgICAgICBib29sIHNob3VsZEFudGlhbGlhcyA6IDE7CiAgICAgICAg
IGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwogICAgICAgICBib29sIHNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cyA6IDE7CkBAIC0xODgsMTAgKzE5OSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2sgOiAxOwogICAgIH07CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgdm9pZCBzZXRTdHJva2VBbmRGaWxsQ29sb3IoUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqLCBDR0NvbG9yUmVmKTsKKyNlbmRpZgorCiAgICAgY2xhc3MgR3JhcGhpY3ND
b250ZXh0IHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3JhcGhpY3NDb250ZXh0KTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgorI2lmICFQTEFURk9STShJT1Mp
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOworI2Vs
c2UKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiwgYm9v
bCBzaG91bGRVc2VDb250ZXh0Q29sb3JzID0gdHJ1ZSk7CisjZW5kaWYKICAgICAgICAgfkdyYXBo
aWNzQ29udGV4dCgpOwogCiAgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9y
bUNvbnRleHQoKSBjb25zdDsKQEAgLTI0Myw3ICsyNjIsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKTsKICAgICAgICAgdm9pZCBkcmF3UGF0
aChjb25zdCBQYXRoJik7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHZvaWQgZHJhd05h
dGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgZmxvYXQgc2NhbGUsIENvbXBvc2l0ZU9wZXJhdG9yID0g
Q29tcG9zaXRlU291cmNlT3ZlciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9y
aWVudGF0aW9uID0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pOworI2Vsc2UKICAgICAgICAgdm9p
ZCBkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIHNl
bGZTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBv
c2l0ZVNvdXJjZU92ZXIsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRh
dGlvbiA9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uKTsKKyNlbmRpZgogCiAgICAgICAgIC8vIEFs
bG93IGZvbnQgc21vb3RoaW5nIChMQ0QgYW50aWFsaWFzaW5nKS4gTm90IHBhcnQgb2YgdGhlIGdy
YXBoaWNzIHN0YXRlLgogICAgICAgICB2b2lkIHNldEFsbG93c0ZvbnRTbW9vdGhpbmcoYm9vbCk7
CkBAIC0yNjQsNyArMjg3LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gc3Ry
b2tlIGNvbG9yKS4KICAgICAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAg
ICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYpOworCisj
aWYgUExBVEZPUk0oSU9TKQorICAgICAgICB2b2lkIGRyYXdKb2luZWRMaW5lcyhDR1BvaW50IHBv
aW50c1tdLCB1bnNpZ25lZCBjb3VudCwgYm9vbCBhbnRpYWxpYXMsIENHTGluZUNhcCA9IGtDR0xp
bmVDYXBCdXR0KTsKKyNlbmRpZgorCiAgICAgICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgSW50
UmVjdCYpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKTsKKyAgICAgICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBDb2xvclNwYWNlIGVsbGlwc2VDb2xv
clNwYWNlLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JT
cGFjZSk7CisjZW5kaWYKICAgICAgICAgdm9pZCBkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVt
UG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiwgYm9vbCBzaG91bGRBbnRpYWxpYXMgPSBmYWxzZSk7
CiAKICAgICAgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJik7CkBAIC0zMTEsNiArMzQzLDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGlwKGNvbnN0IEludFJlY3Qm
KTsKICAgICAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgICAgICB2b2lkIGNs
aXBSb3VuZGVkUmVjdChjb25zdCBSb3VuZGVkUmVjdCYpOworCisgICAgICAgIC8vIEZJWE1FOiBD
b25zaWRlciB3cml0aW5nIHRoaXMgaW4gdGVybXMgb2YgYSBzcGVjaWFsaXplZCBSb3VuZGVkUmVj
dCB0aGF0IHVzZXMgRmxvYXRSZWN0IGFuZCBGbG9hdFNpemUgcmFkaWkuCisgICAgICAgIHZvaWQg
Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVm
dCwgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdodCwgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0
LCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0KTsKKwogICAgICAgICB2b2lkIGNsaXBPdXQo
Y29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBS
b3VuZGVkUmVjdCYpOwogICAgICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVs
ZSk7CkBAIC0zMjIsOSArMzU4LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVGV4
dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQg
c2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzKTsKIAorI2lmIFBMQVRGT1JN
KElPUykKKyAgICAgICAgYm9vbCBlbW9qaURyYXdpbmdFbmFibGVkKCk7CisgICAgICAgIHZvaWQg
c2V0RW1vamlEcmF3aW5nRW5hYmxlZChib29sKTsKKyNlbmRpZgorICAgICAgICAKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOworI2Vs
c2UKKyAgICAgICAgZmxvYXQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisjZW5kaWYKICAg
ICAgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYg
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9
IDAsIGludCB0byA9IC0xKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICB2b2lkIGRyYXdC
aWRpVGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250OjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250OjpEb05vdFBhaW50SWZGb250Tm90
UmVhZHkpOworI2Vsc2UKKyAgICAgICAgZmxvYXQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbiA9IEZvbnQ6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgQmlkaVN0YXR1cyogPSAw
LCBpbnQgbGVuZ3RoID0gLTEpOworI2VuZGlmCiAgICAgICAgIHZvaWQgZHJhd0hpZ2hsaWdodEZv
clRleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50
IGgsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2UsIGludCBmcm9tID0g
MCwgaW50IHRvID0gLTEpOwogCiAgICAgICAgIGVudW0gUm91bmRpbmdNb2RlIHsKQEAgLTMzNiw2
ICszODUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZsb2F0UmVjdCBjb21wdXRl
TGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBib29sIHBy
aW50aW5nKTsKICAgICAgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKTsKICAgICAgICAgZW51bSBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgVGV4dENoZWNraW5n
RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc0xpbmVTdHlsZSwKKyNlbmRpZgogICAgICAg
ICAgICAgRG9jdW1lbnRNYXJrZXJTcGVsbGluZ0xpbmVTdHlsZSwKICAgICAgICAgICAgIERvY3Vt
ZW50TWFya2VyR3JhbW1hckxpbmVTdHlsZSwKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyQXV0
b2NvcnJlY3Rpb25SZXBsYWNlbWVudExpbmVTdHlsZSwKQEAgLTQ5Niw3ICs1NDgsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJv
dW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0
aCwgU3Ryb2tlU3R5bGUpOwogCiAgICAgcHJpdmF0ZToKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
ICAgICB2b2lkIHBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOworI2Vsc2UK
KyAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqLCBib29s
IHNob3VsZFVzZUNvbnRleHRDb2xvcnMpOworI2VuZGlmCiAgICAgICAgIHZvaWQgcGxhdGZvcm1E
ZXN0cm95KCk7CiAKICNpZiBQTEFURk9STShXSU4pICYmICFVU0UoV0lOR0RJKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5k
ZXggOWUyNDQ5MDQyNjg3MWM0YTRjZWVjZWI2OTdkMzlhODU3YTg0M2M1ZC4uODE1ODhmZjUxYjI4
MmI3MGU4MWFkYjE1NjJlNDA1ZTAxODM1Mjg3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC01NCw2ICs1NCwxMiBA
QAogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1
ZGUgPE9wZW5HTEVTL0VTMi9nbC5oPgorI2lmZGVmIF9fT0JKQ19fCisjaW1wb3J0IDxPcGVuR0xF
Uy9FQUdMLmg+CisjZW5kaWYgLy8gX19PQkpDX18KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogT0JKQ19DTEFTUyBDQUxheWVyOwogT0JKQ19DTEFT
UyBXZWJHTExheWVyOwpAQCAtNjEsNyArNjcsMTMgQEAgT0JKQ19DTEFTUyBXZWJHTExheWVyOwog
dHlwZWRlZiB1bnNpZ25lZCBpbnQgR0x1aW50OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMp
CisjaWYgUExBVEZPUk0oSU9TKQorI2lmZGVmIF9fT0JKQ19fCit0eXBlZGVmIEVBR0xDb250ZXh0
KiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOworI2Vsc2UKK3R5cGVkZWYgdm9pZCogUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRDsKKyNlbmRpZiAvLyBfX09CSkNfXworI2VsaWYgUExBVEZPUk0o
TUFDKQogdHlwZWRlZiBzdHJ1Y3QgX0NHTENvbnRleHRPYmplY3QgKkNHTENvbnRleHRPYmo7CiAK
IHR5cGVkZWYgQ0dMQ29udGV4dE9iaiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOwpAQCAtNzkx
LDYgKzgwMywxMCBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKTsKICAgICBib29sIHBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopOwogCisjaWYgUExBVEZPUk0o
SU9TKQorICAgIHZvaWQgZW5kUGFpbnQoKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQkxBQ0tC
RVJSWSkKICAgICBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKICNlbmRpZgpA
QCAtOTMzLDYgKzk0OSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVhZFBpeGVsc0FuZENvbnZl
cnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwg
dW5zaWduZWQgY2hhciogcGl4ZWxzKTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IGJvb2wgc2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZShHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQpOworI2VuZGlmCisKICNpZiBQTEFURk9STShCTEFDS0JFUlJZKQog
ICAgIHZvaWQgbG9nRnJhbWVCdWZmZXJTdGF0dXMoaW50IGxpbmUpOwogICAgIHZvaWQgcmVhZFBp
eGVsc0lNRyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpOwpAQCAt
OTQ3LDcgKzk2NywxMCBAQCBwcml2YXRlOgogICAgIGludCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJy
ZW50SGVpZ2h0OwogICAgIGJvb2wgaXNSZXNvdXJjZVNhZmUoKTsKIAotI2lmIFBMQVRGT1JNKE1B
QykKKyNpZiBQTEFURk9STShJT1MpCisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBtX2Nv
bnRleHRPYmo7CisgICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fd2ViR0xMYXllcjsKKyNl
bGlmIFBMQVRGT1JNKE1BQykKICAgICBDR0xDb250ZXh0T2JqIG1fY29udGV4dE9iajsKICAgICBS
ZXRhaW5QdHI8V2ViR0xMYXllcj4gbV93ZWJHTExheWVyOwogI2VsaWYgUExBVEZPUk0oV0lOKSAm
JiBVU0UoQ0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuY3BwCmluZGV4IDJmN2RlNWVhY2NhMTQ4MzBiNzdlOWY5MGVhZjcwODFjOGNmOThk
MTMuLjcxOTgzODM5M2I0NTI1NzI4NTk5YWZkNDllN2QwYjhlZDkxZmY5MTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCkBAIC0x
MTcsNyArMTE3LDYgQEAgdm9pZCBHcmFwaGljc0xheWVyOjp3aWxsQmVEZXN0cm95ZWQoKQogICAg
IGlmIChtX2NsaWVudCkKICAgICAgICAgbV9jbGllbnQtPnZlcmlmeU5vdFBhaW50aW5nKCk7CiAj
ZW5kaWYKLQogICAgIGlmIChtX3JlcGxpY2FMYXllcikKICAgICAgICAgbV9yZXBsaWNhTGF5ZXIt
PnNldFJlcGxpY2F0ZWRMYXllcigwKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCmluZGV4IDUxZmQ3NjAxMjcyOWRjYTc2OGQyMTJlYjdk
MzZjODRmMTY5NGRiNWIuLmNlNjA0MTA4ZmU1ZWUzZTg4ODMwYjNjNzcyZmI3YmNmMWY5ZmUxMTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
LmgKQEAgLTM4Nyw2ICszODcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzVG9JbWFnZShJbWFnZSopIHsgfQogICAgIHZpcnR1YWwgYm9vbCBzaG91bGREaXJlY3RseUNv
bXBvc2l0ZUltYWdlKEltYWdlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopIHsgfSAvLyB2aWRlbyBvciBw
bHVnLWluCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogY29u
dGVudHNMYXllckZvck1lZGlhKCkgY29uc3QgeyByZXR1cm4gMDsgfQorI2VuZGlmCiAgICAgLy8g
UGFzcyBhbiBpbnZhbGlkIGNvbG9yIHRvIHJlbW92ZSB0aGUgY29udGVudHMgbGF5ZXIuCiAgICAg
dmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IENvbG9yJikgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciopIHsgfQpA
QCAtNDM3LDYgKzQ0MCwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFpbnRh
aW5zUGl4ZWxBbGlnbm1lbnQoYm9vbCBtYWludGFpbnNBbGlnbm1lbnQpIHsgbV9tYWludGFpbnNQ
aXhlbEFsaWdubWVudCA9IG1haW50YWluc0FsaWdubWVudDsgfQogICAgIHZpcnR1YWwgYm9vbCBt
YWludGFpbnNQaXhlbEFsaWdubWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbnRhaW5zUGl4ZWxB
bGlnbm1lbnQ7IH0KKyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCBGbG9hdFNpemUgcGl4
ZWxBbGlnbm1lbnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBGbG9hdFNpemUoKTsgfQorICAgIGJv
b2wgaGFzRmxhdHRlbmVkUGVyc3BlY3RpdmVUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiAhcHJl
c2VydmVzM0QoKSAmJiBtX2NoaWxkcmVuVHJhbnNmb3JtLmhhc1BlcnNwZWN0aXZlKCk7IH0KKyNl
bmRpZgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBzZXRBcHBsaWVzUGFnZVNjYWxlKGJvb2wgYXBw
bGllc1NjYWxlID0gdHJ1ZSkgeyBtX2FwcGxpZXNQYWdlU2NhbGUgPSBhcHBsaWVzU2NhbGU7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgYXBwbGllc1BhZ2VTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBw
bGllc1BhZ2VTY2FsZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSWNvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCmlu
ZGV4IDJhYjdjYTBmM2IyODY0NGVhMTJhMGE3YThiZTJiYWFjYmE1YWQwMGYuLjgyNzk4YzMwNjk1
MDg3M2FiNGVkYTc1ZTVhMDcyNTE3MjBmZDcxY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JY29uLmgKQEAgLTI2LDcgKzI2LDExIEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExB
VEZPUk0oSU9TKQorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisjaW5jbHVkZSA8Q29yZUdy
YXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbGlm
IFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiBPQkpDX0NMQVNTIE5T
SW1hZ2U7CiAjZWxpZiBQTEFURk9STShXSU4pCkBAIC01Miw4ICs1NiwxNiBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SWNvbj4gY3JlYXRlKEhJQ09OIGhJY29uKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgSWNvbihoSWNvbikpOyB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykK
KyAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgZm9yIG5vbi1pT1MgcG9ydHMgYW5kIHJlbW92
ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJY29uPiBj
cmVhdGVJY29uRm9ySW1hZ2UoTmF0aXZlSW1hZ2VQdHIpOworI2VuZGlmCisKIHByaXZhdGU6Ci0j
aWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICBJY29uKENHSW1hZ2VSZWYp
OworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2NnSW1hZ2U7CisjZWxpZiBQTEFURk9STShN
QUMpCiAgICAgSWNvbihOU0ltYWdlKik7CiAgICAgUmV0YWluUHRyPE5TSW1hZ2U+IG1fbnNJbWFn
ZTsKICNlbGlmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmNwcAppbmRleCBlNTI4MzQyNDQzODE4NmUzNmRmOWM1YTA5ZTIyNjhiZTU0MGI2OGQ2
Li4wZTM2NTFhM2NhMTQxZTQ1NjRiNTYyYTI3M2M3NDc2YjkyODQyMThmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCkBAIC0xMzAsMTEgKzEzMCw2NiBAQCB2
b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbAogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIC8vIFdoZW4gdXNpbmcgYWNjZWxlcmF0ZWQgZHJhd2luZyBvbiBpT1Ms
IGl0J3MgZmFzdGVyIHRvIHN0cmV0Y2ggYW4gaW1hZ2UgdGhhbiB0byB0aWxlIGl0LgorICAgIGlm
IChjdHh0LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7CisgICAgICAgIGlmIChzaXplKCkud2lk
dGgoKSA9PSAxICYmIGludGVyc2VjdGlvbihvbmVUaWxlUmVjdCwgZGVzdFJlY3QpLmhlaWdodCgp
ID09IGRlc3RSZWN0LmhlaWdodCgpKSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVNy
Y1JlY3Q7CisgICAgICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRYKDApOworICAgICAgICAgICAg
dmlzaWJsZVNyY1JlY3Quc2V0WSgoZGVzdFJlY3QueSgpIC0gb25lVGlsZVJlY3QueSgpKSAvIHNj
YWxlLmhlaWdodCgpKTsKKyAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFdpZHRoKDEpOwor
ICAgICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0SGVpZ2h0KGRlc3RSZWN0LmhlaWdodCgpIC8g
c2NhbGUuaGVpZ2h0KCkpOworICAgICAgICAgICAgZHJhdyhjdHh0LCBkZXN0UmVjdCwgdmlzaWJs
ZVNyY1JlY3QsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmll
bnRhdGlvbkRlc2NyaXB0aW9uKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmIChzaXplKCkuaGVpZ2h0KCkgPT0gMSAmJiBpbnRlcnNlY3Rpb24ob25lVGlsZVJl
Y3QsIGRlc3RSZWN0KS53aWR0aCgpID09IGRlc3RSZWN0LndpZHRoKCkpIHsKKyAgICAgICAgICAg
IEZsb2F0UmVjdCB2aXNpYmxlU3JjUmVjdDsKKyAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNl
dFgoKGRlc3RSZWN0LngoKSAtIG9uZVRpbGVSZWN0LngoKSkgLyBzY2FsZS53aWR0aCgpKTsKKyAg
ICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFkoMCk7CisgICAgICAgICAgICB2aXNpYmxlU3Jj
UmVjdC5zZXRXaWR0aChkZXN0UmVjdC53aWR0aCgpIC8gc2NhbGUud2lkdGgoKSk7CisgICAgICAg
ICAgICB2aXNpYmxlU3JjUmVjdC5zZXRIZWlnaHQoMSk7CisgICAgICAgICAgICBkcmF3KGN0eHQs
IGRlc3RSZWN0LCB2aXNpYmxlU3JjUmVjdCwgc3R5bGVDb2xvclNwYWNlLCBvcCwgQmxlbmRNb2Rl
Tm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAv
LyBDR1BhdHRlcm4gdXNlcyBsb3RzIG9mIG1lbW9yeSBnb3QgY2FjaGluZyB3aGVuIHRoZSB0aWxl
IHNpemUgaXMgbGFyZ2UgKDxyZGFyOi8vcHJvYmxlbS80NjkxODU5PiwKKyAgICAvLyA8cmRhcjov
L3Byb2JsZW0vNjIzOTUwNT4pLiBNZW1vcnkgY29uc3VtcHRpb24gZGVwZW5kcyBvbiB0aGUgdHJh
bnNmb3JtZWQgdGlsZSBzaXplIHdoaWNoIGNhbiBnZXQKKyAgICAvLyBsYXJnZXIgdGhhbiB0aGUg
b3JpZ2luYWwgdGlsZSBpZiB1c2VyIHpvb21zIGluIGVub3VnaC4KKyAgICBjb25zdCBmbG9hdCBt
YXhQYXR0ZXJuVGlsZVBpeGVscyA9IDUxMiAqIDUxMjsKKyAgICBGbG9hdFJlY3QgdHJhbnNmb3Jt
ZWRUaWxlU2l6ZSA9IGN0eHQtPmdldENUTSgpLm1hcFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgc2NhbGVkVGlsZVNpemUpKTsKKyAgICBmbG9hdCB0cmFuc2Zvcm1lZFRpbGVTaXplUGl4ZWxz
ID0gdHJhbnNmb3JtZWRUaWxlU2l6ZS53aWR0aCgpICogdHJhbnNmb3JtZWRUaWxlU2l6ZS5oZWln
aHQoKTsKKyAgICBpZiAodHJhbnNmb3JtZWRUaWxlU2l6ZVBpeGVscyA+IG1heFBhdHRlcm5UaWxl
UGl4ZWxzKSB7CisgICAgICAgIGZsb2F0IGZyb21ZID0gKGRlc3RSZWN0LnkoKSAtIG9uZVRpbGVS
ZWN0LnkoKSkgLyBzY2FsZS5oZWlnaHQoKTsKKyAgICAgICAgZmxvYXQgdG9ZID0gb25lVGlsZVJl
Y3QueSgpOworICAgICAgICB3aGlsZSAodG9ZIDwgQ0dSZWN0R2V0TWF4WShkZXN0UmVjdCkpIHsK
KyAgICAgICAgICAgIGZsb2F0IGZyb21YID0gKGRlc3RSZWN0LngoKSAtIG9uZVRpbGVSZWN0Lngo
KSkgLyBzY2FsZS53aWR0aCgpOworICAgICAgICAgICAgZmxvYXQgdG9YID0gb25lVGlsZVJlY3Qu
eCgpOworICAgICAgICAgICAgd2hpbGUgKHRvWCA8IENHUmVjdEdldE1heFgoZGVzdFJlY3QpKSB7
CisgICAgICAgICAgICAgICAgQ0dSZWN0IHRvUmVjdCA9IENHUmVjdEludGVyc2VjdGlvbihkZXN0
UmVjdCwgQ0dSZWN0TWFrZSh0b1gsIHRvWSwgb25lVGlsZVJlY3Qud2lkdGgoKSwgb25lVGlsZVJl
Y3QuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgICAgICBDR1JlY3QgZnJvbVJlY3QgPSBDR1JlY3RN
YWtlKGZyb21YLCBmcm9tWSwgdG9SZWN0LnNpemUud2lkdGggLyBzY2FsZS53aWR0aCgpLCB0b1Jl
Y3Quc2l6ZS5oZWlnaHQgLyBzY2FsZS5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgZHJhdyhj
dHh0LCB0b1JlY3QsIGZyb21SZWN0LCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBCbGVuZE1vZGVOb3Jt
YWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgICAgICB0b1gg
Kz0gb25lVGlsZVJlY3Qud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBmcm9tWCA9IDA7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0b1kgKz0gb25lVGlsZVJlY3QuaGVpZ2h0KCk7CisgICAg
ICAgICAgICBmcm9tWSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bmRpZiAgICAKKwogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0gQWZmaW5l
VHJhbnNmb3JtKCkuc2NhbGVOb25Vbmlmb3JtKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgp
KTsKICAgICBGbG9hdFJlY3QgdGlsZVJlY3QoRmxvYXRQb2ludCgpLCBpbnRyaW5zaWNUaWxlU2l6
ZSk7CiAgICAgZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIG9u
ZVRpbGVSZWN0LmxvY2F0aW9uKCksIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0LCBibGVu
ZE1vZGUpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXJ0QW5pbWF0aW9uKGZhbHNlKTsK
KyNlbHNlCiAgICAgc3RhcnRBbmltYXRpb24oKTsKKyNlbmRpZgogfQogCiAvLyBGSVhNRTogTWVy
Z2Ugd2l0aCB0aGUgb3RoZXIgZHJhd1RpbGVkIGV2ZW50dWFsbHksIHNpbmNlIHdlIG5lZWQgYSBj
b21iaW5hdGlvbiBvZiBib3RoIGZvciBzb21lIHRoaW5ncy4KQEAgLTE2OCw3ICsyMjMsMTEgQEAg
dm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG8KICAgICAKICAgICBkcmF3UGF0dGVybihjdHh0LCBzcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwYXR0ZXJuUGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3As
IGRzdFJlY3QpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXJ0QW5pbWF0aW9uKGZhbHNl
KTsKKyNlbHNlCiAgICAgc3RhcnRBbmltYXRpb24oKTsKKyNlbmRpZgogfQogCiAjaWYgRU5BQkxF
KElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDNjNjMyN2ZiN2FhNmQxZTRkYWM0NGEwZjg3
NzQ1OGJmYTEzNWIzZjYuLmFiNzE5MGU5OWU3NGFjOTVkM2JkZmQxZGJjN2Y1MTdiOTFlZDhmYjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApA
QCAtMTM1LDYgKzEzNSwxMSBAQCBwdWJsaWM6CiAgICAgSW50U2l6ZSBzaXplKEltYWdlT3JpZW50
YXRpb25EZXNjcmlwdGlvbiA9IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsK
ICAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBJbWFnZU9yaWVudGF0aW9uRGVz
Y3JpcHRpb24gPSBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSkgY29uc3Q7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgSW50U2l6ZSBvcmlnaW5hbFNpemUoUmVzcGVjdEltYWdlT3JpZW50
YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29uc3Q7CisgICAgYm9v
bCBpc1N1YnNhbXBsZWQoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VTdWJzYW1wbGluZzsgfQorI2Vu
ZGlmCisKICAgICBib29sIGdldEhvdFNwb3QoSW50UG9pbnQmKSBjb25zdDsKIAogICAgIHNpemVf
dCBieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCmluZGV4IDE2OTIwMzdkNzUzNzQ5ZTJj
MjdkOTBkZTU4YjEzMGI3ZDYzMTVjNjUuLmZlMzNmNGMzZjhiOGYxZTBlN2EyMjI2MTY4ZGRiZDNk
OTQ2M2EwNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQu
aApAQCAtMzQsNiArMzQsNyBAQCB0eXBlZGVmIHN0cnVjdCBDR1BvaW50IENHUG9pbnQ7CiAjZW5k
aWYKIAogCisjaWYgIVBMQVRGT1JNKElPUykKICNpZiBPUyhEQVJXSU4pCiAjaWZkZWYgTlNHRU9N
RVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5cGVkZWYgc3RydWN0IENHUG9p
bnQgTlNQb2ludDsKQEAgLTQxLDYgKzQyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBOU1Bv
aW50OwogdHlwZWRlZiBzdHJ1Y3QgX05TUG9pbnQgTlNQb2ludDsKICNlbmRpZgogI2VuZGlmCisj
ZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogI2lmIFBMQVRGT1JNKFdJTikKIHR5cGVkZWYgc3Ry
dWN0IHRhZ1BPSU5UIFBPSU5UOwpAQCAtMTExLDEwICsxMTMsMTIgQEAgcHVibGljOgogICAgIG9w
ZXJhdG9yIENHUG9pbnQoKSBjb25zdDsKICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKICNp
ZiBPUyhEQVJXSU4pICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01F
VFJZX1RZUEVTKQogICAgIGV4cGxpY2l0IEludFBvaW50KGNvbnN0IE5TUG9pbnQmKTsgLy8gZG9u
J3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICBvcGVyYXRvciBOU1Bv
aW50KCkgY29uc3Q7CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAjaWYgUExB
VEZPUk0oV0lOKQogICAgIEludFBvaW50KGNvbnN0IFBPSU5UJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKaW5kZXggNTY5YTkwODE0NDQ5NTkxNGQyZDlkZjRj
ZGExNWY5MTBlZDczYzc5YS4uNjIyMDUyOTA3YjM0OTc0MTM3YzUxNTM5Y2Y0Nzc0MjVhYTczNWVi
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaApAQCAtMzMs
NyArMzMsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IENHUmVjdDsKICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICNpZmRl
ZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogdHlwZWRlZiBzdHJ1
Y3QgQ0dSZWN0IE5TUmVjdDsKICNlbHNlCkBAIC00MSw2ICs0MSwxMiBAQCB0eXBlZGVmIHN0cnVj
dCBfTlNSZWN0IE5TUmVjdDsKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisj
aWZuZGVmIE5TUmVjdAorI2RlZmluZSBOU1JlY3QgQ0dSZWN0CisjZW5kaWYKKyNlbmRpZgorCiAj
aWYgUExBVEZPUk0oV0lOKQogdHlwZWRlZiBzdHJ1Y3QgdGFnUkVDVCBSRUNUOwogI2VsaWYgUExB
VEZPUk0oR1RLKQpAQCAtMTkyLDkgKzE5OCwxMSBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dS
ZWN0KCkgY29uc3Q7CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiAjaWYgKFBMQVRGT1JN
KE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQ
RVMpKQogICAgIG9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0OwogI2VuZGlmCisjZW5kaWYgLy8gIVBM
QVRGT1JNKElPUykKIAogI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgSW50UmVjdChjb25z
dCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdCYpOwpAQCAtMjUyLDkgKzI2MCwxMSBAQCBp
bmxpbmUgYm9vbCBJbnRSZWN0Ojppc0luZmluaXRlKCkgY29uc3QKIEludFJlY3QgZW5jbG9zaW5n
SW50UmVjdChjb25zdCBDR1JlY3QmKTsKICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKICNp
ZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dH
RU9NRVRSWV9UWVBFUykpCiBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgTlNSZWN0Jik7
CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNp
emUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaAppbmRleCBk
YjdkYmE3ZWRiNTg0MTc4N2I1ZjU4NjI0M2MxY2UxMjNkN2IzMzM5Li45YzdlNGRlODc4YzRjODcx
NmZlYmVlOTc4YTI0MWVjY2I2MWRhMjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50U2l6ZS5oCkBAIC0zMiw3ICszMiw3IEBACiB0eXBlZGVmIHN0cnVjdCBDR1NpemUg
Q0dTaXplOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAm
JiAhUExBVEZPUk0oSU9TKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01F
VFJZX1RZUEVTCiB0eXBlZGVmIHN0cnVjdCBDR1NpemUgTlNTaXplOwogI2Vsc2UKQEAgLTQwLDYg
KzQwLDEyIEBAIHR5cGVkZWYgc3RydWN0IF9OU1NpemUgTlNTaXplOwogI2VuZGlmCiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKElPUykKKyNpZm5kZWYgTlNTaXplCisjZGVmaW5lIE5TU2l6ZSBDR1Np
emUKKyNlbmRpZgorI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIHN0cnVjdCB0
YWdTSVpFIFNJWkU7CiAjZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQpAQCAtMTMwLDEwICsxMzYs
MTIgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIENHU2l6ZSgpIGNvbnN0OwogI2VuZGlmCiAKKyNp
ZiAhUExBVEZPUk0oSU9TKSAgICAKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VP
TUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKQogICAgIGV4cGxpY2l0IEludFNp
emUoY29uc3QgTlNTaXplICYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQn
cyBsb3NzeQogICAgIG9wZXJhdG9yIE5TU2l6ZSgpIGNvbnN0OwogI2VuZGlmCisjZW5kaWYgLy8g
IVBMQVRGT1JNKElPUykKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBJbnRTaXplKGNvbnN0IFNJ
WkUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmNwcAppbmRleCAwNTcwOWExYmZiMmNjMzRhYWIwNjU4MGY1M2U2YjBkNTdkNDUyYWE1Li42ZTQ4
YWJkN2QxM2U4YTUwOTFmYWU2ODhmZmM2NjdjMWVlNTI1NWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCkBAIC01NCw3ICs1NCwxMiBA
QAogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1
ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUlPUy5oIgorI2RlZmluZSBQbGF0Zm9ybU1lZGlhRW5naW5l
Q2xhc3NOYW1lIE1lZGlhUGxheWVyUHJpdmF0ZUlPUworI2Vsc2UKICNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGVRVEtpdC5oIgorI2VuZGlmCiAjaWYgVVNFKEFWRk9VTkRBVElPTikKICNpbmNs
dWRlICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgiCiAjaWYgRU5BQkxFKE1F
RElBX1NPVVJDRSkKQEAgLTIxMiw3ICsyMTcsNyBAQCBzdGF0aWMgVmVjdG9yPE1lZGlhUGxheWVy
RmFjdG9yeSo+JiBpbnN0YWxsZWRNZWRpYUVuZ2luZXMoUmVxdWVyeUVuZ2luZU9wdGlvbnMgcgog
CiAjaWYgVVNFKEFWRk9VTkRBVElPTikKICAgICAgICAgaWYgKFNldHRpbmdzOjppc0FWRm91bmRh
dGlvbkVuYWJsZWQoKSkgewotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQorI2lm
IFBMQVRGT1JNKE1BQykKICAgICAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2lmIEVOQUJMRShN
RURJQV9TT1VSQ0UpCiAgICAgICAgICAgICBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwpAQCAtMjIzLDEwICsy
MjgsMTIgQEAgc3RhdGljIFZlY3RvcjxNZWRpYVBsYXllckZhY3RvcnkqPiYgaW5zdGFsbGVkTWVk
aWFFbmdpbmVzKFJlcXVlcnlFbmdpbmVPcHRpb25zIHIKICAgICAgICAgfQogI2VuZGlmCiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgaWYgKFNldHRpbmdz
Ojppc1FUS2l0RW5hYmxlZCgpKQogICAgICAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6
OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCisjZW5kaWYKIAog
I2lmIGRlZmluZWQoUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZSkKICAgICAgICAgUGxhdGZv
cm1NZWRpYUVuZ2luZUNsYXNzTmFtZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2lu
ZSk7CkBAIC04MzcsNiArODQ0LDUwIEBAIHZvaWQgTWVkaWFQbGF5ZXI6OmV4aXRGdWxsc2NyZWVu
KCkKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQorYm9vbCBNZWRpYVBsYXll
cjo6aXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVzcygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+aXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVzcygpOworfQorCit2b2lk
IE1lZGlhUGxheWVyOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoKQoreworICAgIG1fcHJpdmF0
ZS0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXI6Omhh
c1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cygpOworfQorCitib29sIE1lZGlhUGxheWVyOjp3
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKTsKK30KKwordm9pZCBNZWRpYVBs
YXllcjo6c2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKK3sK
KyAgICBtX3ByaXZhdGUtPnNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKGRpc2FibGVk
KTsKK30KKwordm9pZCBNZWRpYVBsYXllcjo6c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxp
dHlMaXN0ZW5lcnMoYm9vbCBoYXNMaXN0ZW5lcnMpCit7CisgICAgbV9wcml2YXRlLT5zZXRIYXNQ
bGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhoYXNMaXN0ZW5lcnMpOworfQorCit2
b2lkIE1lZGlhUGxheWVyOjpjdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCgp
Cit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXJDbGllbnQpCisgICAgICAgIG1fbWVkaWFQbGF5ZXJD
bGllbnQtPm1lZGlhUGxheWVyQ3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5nZWQo
dGhpcyk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXI6OnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
Q2hhbmdlZCgpCit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXJDbGllbnQpCisgICAgICAgIG1fbWVk
aWFQbGF5ZXJDbGllbnQtPm1lZGlhUGxheWVyUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFu
Z2VkKHRoaXMpOworfQorI2VuZGlmCisKICNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8p
CiBib29sIE1lZGlhUGxheWVyOjpjYW5FbnRlckZ1bGxzY3JlZW4oKSBjb25zdAogewpAQCAtOTU2
LDYgKzEwMDcsMTggQEAgdm9pZCBNZWRpYVBsYXllcjo6c2V0UHJpdmF0ZUJyb3dzaW5nTW9kZShi
b29sIHByaXZhdGVCcm93c2luZ01vZGUpCiAgICAgbV9wcml2YXRlLT5zZXRQcml2YXRlQnJvd3Np
bmdNb2RlKG1fcHJpdmF0ZUJyb3dzaW5nKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQg
TWVkaWFQbGF5ZXI6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlKSAKK3sKKyAgICBtX3ByaXZhdGUtPmF0dHJpYnV0ZUNoYW5nZWQobmFtZSwg
dmFsdWUpOworfQorCitib29sIE1lZGlhUGxheWVyOjpyZWFkeUZvclBsYXliYWNrKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5yZWFkeUZvclBsYXliYWNrKCk7Cit9CisjZW5kaWYK
KwogLy8gQ2xpZW50IGNhbGxiYWNrcy4KIHZvaWQgTWVkaWFQbGF5ZXI6Om5ldHdvcmtTdGF0ZUNo
YW5nZWQoKQogewpAQCAtOTgxLDcgKzEwNDQsMTIgQEAgdm9pZCBNZWRpYVBsYXllcjo6cmVhZHlT
dGF0ZUNoYW5nZWQoKQogCiB2b2lkIE1lZGlhUGxheWVyOjp2b2x1bWVDaGFuZ2VkKGRvdWJsZSBu
ZXdWb2x1bWUpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFVOVVNFRF9QQVJBTShuZXdWb2x1
bWUpOworICAgIG1fdm9sdW1lID0gbV9wcml2YXRlLT52b2x1bWUoKTsKKyNlbHNlCiAgICAgbV92
b2x1bWUgPSBuZXdWb2x1bWU7CisjZW5kaWYKICAgICBpZiAobV9tZWRpYVBsYXllckNsaWVudCkK
ICAgICAgICAgbV9tZWRpYVBsYXllckNsaWVudC0+bWVkaWFQbGF5ZXJWb2x1bWVDaGFuZ2VkKHRo
aXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmgKaW5kZXggMTI2ZDVmNjdkY2RlODlkNzE1NWMyOWE1NTg2MGU2MGFjN2MwMzRjOC4uMjI3ZTll
N2Q5YjZkYTQwNzk4MzQxYTRlODQ3YmI1ZWI0MjY3YmUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCkBAIC0yMjQsNiArMjI0LDExIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbWVkaWFQbGF5ZXJLZXlOZWVkZWQoTWVkaWFQbGF5ZXIq
LCBVaW50OEFycmF5KikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogICAgIAorI2lmIEVOQUJM
RShJT1NfQUlSUExBWSkKKyAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJDdXJyZW50UGxheWJh
Y2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZChNZWRpYVBsYXllciopIHsgfTsKKyAgICB2aXJ0dWFs
IHZvaWQgbWVkaWFQbGF5ZXJQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWQoTWVkaWFQ
bGF5ZXIqKSB7IH07CisjZW5kaWYKKwogICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhUGxheWVyUmVm
ZXJyZXIoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgU3RyaW5nIG1l
ZGlhUGxheWVyVXNlckFnZW50KCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0
dWFsIENPUlNNb2RlIG1lZGlhUGxheWVyQ09SU01vZGUoKSBjb25zdCB7IHJldHVybiBVbnNwZWNp
ZmllZDsgfQpAQCAtNDMzLDYgKzQzOCwyMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBleGl0RnVsbHNj
cmVlbigpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCisgICAgYm9vbCBpc0N1
cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCkgY29uc3Q7CisgICAgdm9pZCBzaG93UGxheWJh
Y2tUYXJnZXRQaWNrZXIoKTsKKworICAgIGJvb2wgaGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMo
KSBjb25zdDsKKworICAgIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25z
dDsKKyAgICB2b2lkIHNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKGJvb2wpOworCisg
ICAgdm9pZCBjdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCgpOworICAgIHZv
aWQgcGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkKCk7CisKKyAgICB2b2lkIHNldEhh
c1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKGJvb2wpOworI2VuZGlmCisKICNp
ZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCiAgICAgYm9vbCBjYW5FbnRlckZ1bGxzY3Jl
ZW4oKSBjb25zdDsKICNlbmRpZgpAQCAtNDg2LDYgKzUwNiwxMSBAQCBwdWJsaWM6CiAKICAgICBT
dHJpbmcgZW5naW5lRGVzY3JpcHRpb24oKSBjb25zdDsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlKTsKKyAgICBib29sIHJlYWR5Rm9yUGxheWJhY2soKSBjb25zdDsKKyNlbmRpZgorCiAg
ICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKICNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCmluZGV4IGNmN2I1ZjI4ODVmNTE1ZjI2MzQzMDNi
ZTYzYWU3NTVkMmI4NDM0ZDguLmZiYWZkNzBjZDllZjM0YTA3ODA0YTI1YTc5MjkzYjg3ODIzOWIz
NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyUHJpdmF0ZS5oCkBAIC05Nyw2ICs5Nyw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBzZXRWb2x1bWUoZmxvYXQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWb2x1bWVEb3Vi
bGUoZG91YmxlIHZvbHVtZSkgeyByZXR1cm4gc2V0Vm9sdW1lKHZvbHVtZSk7IH0KKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgdmlydHVhbCBmbG9hdCB2b2x1bWUoKSBjb25zdCB7IHJldHVybiAxOyB9
CisjZW5kaWYKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c011dGluZygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE11dGVkKGJvb2wpIHsgfQpAQCAtMTQx
LDYgKzE0NCwxOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuKCkg
eyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShJT1NfQUlSUExBWSkKKyAgICB2aXJ0dWFsIGJvb2wg
aXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVzcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcigpIHsgfQorCisgICAg
dmlydHVhbCBib29sIGhhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFdpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkKGJvb2wpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldEhh
c1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKGJvb2wpIHsgfQorI2VuZGlmCisK
ICNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCiAgICAgdmlydHVhbCBib29sIGNhbkVu
dGVyRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKQEAgLTIwOSw3
ICsyMjQsMTIgQEAgcHVibGljOgogI2lmIFVTRShHU1RSRUFNRVIpCiAgICAgdmlydHVhbCB2b2lk
IHNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKSB7IH0KICNlbmRpZgotICAgIAorCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgYm9vbCByZWFkeUZvclBsYXliYWNr
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorI2VuZGlmCisKICAgICB2aXJ0dWFsIFN0cmluZyBs
YW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmluZygp
OyB9CiAKICAgICB2aXJ0dWFsIHNpemVfdCBleHRyYU1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVy
biAwOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVGb250RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5jcHAKaW5kZXggMzIzNWI0MGVmNTJkMTcyZjZhNmM2N2I2YmE2MmE1MzExMDlkMGEx
OS4uYjA2MjdhZDI0NDcyNzNhOGI1MzAzOTJiNTI5ZDFhOTJmMzcyZDgyOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcApAQCAt
ODAsNiArODAsOSBAQCBTaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVf
cHRyPEFkZGl0aW9uYWxGb250RGF0YT4gZm9udERhdGEsIGZsbwogICAgICwgbV92ZXJ0aWNhbERh
dGEoMCkKICNlbmRpZgogICAgICwgbV9oYXNWZXJ0aWNhbEdseXBocyhmYWxzZSkKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgLCBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhmYWxzZSkKKyNlbmRp
ZgogewogICAgIG1fZm9udERhdGEtPmluaXRpYWxpemVGb250RGF0YSh0aGlzLCBmb250U2l6ZSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERh
dGEuaAppbmRleCA0NWEwZjU1ZmEwOTUyZTlmYTE3MWQ4MDI3Y2YyYTU4OWYyNDQ5MmFkLi45Y2Qz
MTZmMjY2NzQ1MmM3ZGY2YThjNjFhNWMxNWU4NzJhM2Q0YTVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKQEAgLTE4MCwxMSArMTgw
LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0IE9W
RVJSSURFOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgVVNFKEFQUEtJVCkKICAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSogZ2V0Q29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnREYXRh
KE5TRm9udCAqa2V5KSBjb25zdDsKICAgICBOU0ZvbnQqIGdldE5TRm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgQ1RGb250UmVmIGdldENURm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRh
LmZvbnQoKTsgfQorICAgIGJvb2wgc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7IH07CisjZW5kaWYKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGdldENGU3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0
dGluZ0ZlYXR1cmVzLCBGb250T3JpZW50YXRpb24pIGNvbnN0OwogI2VuZGlmCkBAIC0xOTcsNyAr
MjAxLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGlzU1ZHRm9udCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+IDEwODAKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDgwKQogICAgICAgICB3
a0NURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9ucyA9ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYg
S2VybmluZyA/IHdrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA6IDApIHwgKHR5cGVz
ZXR0aW5nRmVhdHVyZXMgJiBMaWdhdHVyZXMgPyB3a0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGlu
ZyA6IDApOwogICAgICAgICByZXR1cm4gd2tDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9y
bURhdGEuY3RGb250KCksIGdseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihhZHZhbmNl
cyksIGdseXBoQ291bnQsIG9wdGlvbnMpOwogI2Vsc2UKQEAgLTMxNSw2ICszMTksOSBAQCBwcml2
YXRlOgogICAgIG11dGFibGUgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBtX3NjcmlwdEZvbnRQcm9w
ZXJ0aWVzOwogI2VuZGlmCiAjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisgICAgYm9vbCBtX3No
b3VsZE5vdEJlVXNlZEZvckFyYWJpYzsKKyNlbmRpZgogfTsKIAogQUxXQVlTX0lOTElORSBGbG9h
dFJlY3QgU2ltcGxlRm9udERhdGE6OmJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNh
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRv
ci5jcHAKaW5kZXggYTcyYWU0YjdhNWI5MzU0ZDU2Y2ZhYmVjODU5OWMwNzFhNGIyOTgxZC4uYTQ2
NzM5YTNhZTEwZjAxYjI5NjEwODVkZWY0YzEyYzhjYjk4NDc1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCkBAIC00MCw3
ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2RlZmluZSBTVFJJTkdfQlVGRkVSX1NJ
WkUgMjA0OAogCi10eXBlZGVmIHVuc2lnbmVkIFRydW5jYXRpb25GdW5jdGlvbihjb25zdCBTdHJp
bmcmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGtlZXBDb3VudCwgVUNoYXIqIGJ1ZmZlcik7
Cit0eXBlZGVmIHVuc2lnbmVkIFRydW5jYXRpb25GdW5jdGlvbihjb25zdCBTdHJpbmcmLCB1bnNp
Z25lZCBsZW5ndGgsIHVuc2lnbmVkIGtlZXBDb3VudCwgVUNoYXIqIGJ1ZmZlciwgYm9vbCBzaG91
bGRJbnNlcnRFbGxpcHNpcyk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHRleHRCcmVha0F0T3JQcmVj
ZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGl0LCBpbnQgb2Zmc2V0KQogewpAQCAtNTcsNyArNTcs
NyBAQCBzdGF0aWMgaW5saW5lIGludCBib3VuZGVkVGV4dEJyZWFrRm9sbG93aW5nKFRleHRCcmVh
a0l0ZXJhdG9yKiBpdCwgaW50IG9mZnNldCwgaQogICAgIHJldHVybiByZXN1bHQgPT0gVGV4dEJy
ZWFrRG9uZSA/IGxlbmd0aCA6IHJlc3VsdDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNlbnRlclRy
dW5jYXRlVG9CdWZmZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgdW5z
aWduZWQga2VlcENvdW50LCBVQ2hhciogYnVmZmVyKQorc3RhdGljIHVuc2lnbmVkIGNlbnRlclRy
dW5jYXRlVG9CdWZmZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgdW5z
aWduZWQga2VlcENvdW50LCBVQ2hhciogYnVmZmVyLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lz
KQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGtlZXBDb3VudCA8IGxl
bmd0aCk7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oa2VlcENvdW50IDwg
U1RSSU5HX0JVRkZFUl9TSVpFKTsKQEAgLTY2LDMyICs2NiwxMjUgQEAgc3RhdGljIHVuc2lnbmVk
IGNlbnRlclRydW5jYXRlVG9CdWZmZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIGxl
bmd0aCwgdW4KICAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmluZy5j
aGFyYWN0ZXJzKCksIGxlbmd0aCk7CiAgICAgdW5zaWduZWQgb21pdEVuZCA9IGJvdW5kZWRUZXh0
QnJlYWtGb2xsb3dpbmcoaXQsIG9taXRTdGFydCArIChsZW5ndGggLSBrZWVwQ291bnQpIC0gMSwg
bGVuZ3RoKTsKICAgICBvbWl0U3RhcnQgPSB0ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKGl0LCBvbWl0
U3RhcnQpOwotICAgIAotICAgIHVuc2lnbmVkIHRydW5jYXRlZExlbmd0aCA9IG9taXRTdGFydCAr
IDEgKyAobGVuZ3RoIC0gb21pdEVuZCk7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBndWFyZCB0aGlzIGNvZGUgYmVoaW5kIGFuIGVkaXRpbmcgYmVoYXZpb3Iu
IFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKworICAgIC8vIFN0
cmlwIHNpbmdsZSBjaGFyYWN0ZXIgYmVmb3JlIGVsbGlwc2lzIGNoYXJhY3Rlciwgd2hlbiB0aGF0
IGNoYXJhY3RlciBpcyBwcmVjZWRlZCBieSBhIHNwYWNlCisgICAgaWYgKG9taXRTdGFydCA+IDEg
JiYgc3RyaW5nW29taXRTdGFydCAtIDFdICE9IHNwYWNlICYmIG9taXRTdGFydCA+IDIgJiYgc3Ry
aW5nW29taXRTdGFydCAtIDJdID09IHNwYWNlKQorICAgICAgICAtLW9taXRTdGFydDsKKworICAg
IC8vIFN0cmlwIHdoaXRlc3BhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgZWxsaXBzaXMgY2hhcmFj
dGVyCisgICAgd2hpbGUgKG9taXRTdGFydCA+IDEgJiYgc3RyaW5nW29taXRTdGFydCAtIDFdID09
IHNwYWNlKQorICAgICAgICAtLW9taXRTdGFydDsKKworICAgIC8vIFN0cmlwIHNpbmdsZSBjaGFy
YWN0ZXIgYWZ0ZXIgZWxsaXBzaXMgY2hhcmFjdGVyLCB3aGVuIHRoYXQgY2hhcmFjdGVyIGlzIGZv
bGxvd2VkIGJ5IGEgc3BhY2UKKyAgICBpZiAoKGxlbmd0aCAtIG9taXRFbmQpID4gMSAmJiBzdHJp
bmdbb21pdEVuZF0gIT0gc3BhY2UgJiYgKGxlbmd0aCAtIG9taXRFbmQpID4gMiAmJiBzdHJpbmdb
b21pdEVuZCArIDFdID09IHNwYWNlKQorICAgICAgICArK29taXRFbmQ7CisKKyAgICB3aGlsZSAo
KGxlbmd0aCAtIG9taXRFbmQpID4gMSAmJiBzdHJpbmdbb21pdEVuZF0gPT0gc3BhY2UpCisgICAg
ICAgICsrb21pdEVuZDsKKyNlbmRpZgorCisgICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoID0g
c2hvdWxkSW5zZXJ0RWxsaXBzaXMgPyBvbWl0U3RhcnQgKyAxICsgKGxlbmd0aCAtIG9taXRFbmQp
IDogbGVuZ3RoIC0gKG9taXRFbmQgLSBvbWl0U3RhcnQpOwogICAgIEFTU0VSVCh0cnVuY2F0ZWRM
ZW5ndGggPD0gbGVuZ3RoKTsKIAogICAgIG1lbWNweShidWZmZXIsIHN0cmluZy5jaGFyYWN0ZXJz
KCksIHNpemVvZihVQ2hhcikgKiBvbWl0U3RhcnQpOwotICAgIGJ1ZmZlcltvbWl0U3RhcnRdID0g
aG9yaXpvbnRhbEVsbGlwc2lzOwotICAgIG1lbWNweSgmYnVmZmVyW29taXRTdGFydCArIDFdLCAm
c3RyaW5nLmNoYXJhY3RlcnMoKVtvbWl0RW5kXSwgc2l6ZW9mKFVDaGFyKSAqIChsZW5ndGggLSBv
bWl0RW5kKSk7Ci0gICAgCisgICAgaWYgKHNob3VsZEluc2VydEVsbGlwc2lzKSB7CisgICAgICAg
IGJ1ZmZlcltvbWl0U3RhcnRdID0gaG9yaXpvbnRhbEVsbGlwc2lzOworICAgICAgICBtZW1jcHko
JmJ1ZmZlcltvbWl0U3RhcnQgKyAxXSwgJnN0cmluZy5jaGFyYWN0ZXJzKClbb21pdEVuZF0sIHNp
emVvZihVQ2hhcikgKiAobGVuZ3RoIC0gb21pdEVuZCkpOyAgICAKKyAgICB9IGVsc2UKKyAgICAg
ICAgbWVtY3B5KCZidWZmZXJbb21pdFN0YXJ0XSwgJnN0cmluZy5jaGFyYWN0ZXJzKClbb21pdEVu
ZF0sIHNpemVvZihVQ2hhcikgKiAobGVuZ3RoIC0gb21pdEVuZCkpOwogICAgIHJldHVybiB0cnVu
Y2F0ZWRMZW5ndGg7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCByaWdodFRydW5jYXRlVG9CdWZmZXIo
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQga2VlcENvdW50
LCBVQ2hhciogYnVmZmVyKQorc3RhdGljIHVuc2lnbmVkIHJpZ2h0VHJ1bmNhdGVUb0J1ZmZlcihj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQs
IFVDaGFyKiBidWZmZXIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMpCiB7CiAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oa2VlcENvdW50IDwgbGVuZ3RoKTsKICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihrZWVwQ291bnQgPCBTVFJJTkdfQlVGRkVSX1NJ
WkUpOwotICAgIAorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
Z3VhcmQgdGhpcyBjb2RlIGJlaGluZCBhbiBlZGl0aW5nIGJlaGF2aW9yLiBUaGVuIHdlIGNhbiBy
ZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCisKKyAgICAvLyBTdHJpcCBzaW5nbGUgY2hh
cmFjdGVyIGJlZm9yZSBlbGxpcHNpcyBjaGFyYWN0ZXIsIHdoZW4gdGhhdCBjaGFyYWN0ZXIgaXMg
cHJlY2VkZWQgYnkgYSBzcGFjZQorICAgIGlmIChrZWVwQ291bnQgPiAxICYmIHN0cmluZ1trZWVw
Q291bnQgLSAxXSAhPSBzcGFjZSAmJiBrZWVwQ291bnQgPiAyICYmIHN0cmluZ1trZWVwQ291bnQg
LSAyXSA9PSBzcGFjZSkKKyAgICAgICAgLS1rZWVwQ291bnQ7CisKKyAgICAvLyBTdHJpcCB3aGl0
ZXNwYWNlIGJlZm9yZSB0aGUgZWxsaXBzaXMgY2hhcmFjdGVyCisgICAgd2hpbGUgKGtlZXBDb3Vu
dCA+IDEgJiYgc3RyaW5nW2tlZXBDb3VudCAtIDFdID09IHNwYWNlKQorICAgICAgICAtLWtlZXBD
b3VudDsKKyNlbmRpZgorCiAgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChz
dHJpbmcuY2hhcmFjdGVycygpLCBsZW5ndGgpOwogICAgIHVuc2lnbmVkIGtlZXBMZW5ndGggPSB0
ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKGl0LCBrZWVwQ291bnQpOwotICAgIHVuc2lnbmVkIHRydW5j
YXRlZExlbmd0aCA9IGtlZXBMZW5ndGggKyAxOwotICAgIAorICAgIHVuc2lnbmVkIHRydW5jYXRl
ZExlbmd0aCA9IHNob3VsZEluc2VydEVsbGlwc2lzID8ga2VlcExlbmd0aCArIDEgOiBrZWVwTGVu
Z3RoOworCiAgICAgbWVtY3B5KGJ1ZmZlciwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc2l6ZW9mKFVD
aGFyKSAqIGtlZXBMZW5ndGgpOwotICAgIGJ1ZmZlcltrZWVwTGVuZ3RoXSA9IGhvcml6b250YWxF
bGxpcHNpczsKLSAgICAKKyAgICBpZiAoc2hvdWxkSW5zZXJ0RWxsaXBzaXMpCisgICAgICAgIGJ1
ZmZlcltrZWVwTGVuZ3RoXSA9IGhvcml6b250YWxFbGxpcHNpczsKKwogICAgIHJldHVybiB0cnVu
Y2F0ZWRMZW5ndGg7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCByaWdodENsaXBUb0NoYXJhY3RlckJ1
ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVw
Q291bnQsIFVDaGFyKiBidWZmZXIsIGJvb2wpCit7CisgICAgQVNTRVJUKGtlZXBDb3VudCA8IGxl
bmd0aCk7CisgICAgQVNTRVJUKGtlZXBDb3VudCA8IFNUUklOR19CVUZGRVJfU0laRSk7CisKKyAg
ICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmluZy5jaGFyYWN0ZXJzKCks
IGxlbmd0aCk7CisgICAgdW5zaWduZWQga2VlcExlbmd0aCA9IHRleHRCcmVha0F0T3JQcmVjZWRp
bmcoaXQsIGtlZXBDb3VudCk7CisgICAgbWVtY3B5KGJ1ZmZlciwgc3RyaW5nLmNoYXJhY3RlcnMo
KSwgc2l6ZW9mKFVDaGFyKSAqIGtlZXBMZW5ndGgpOworCisgICAgcmV0dXJuIGtlZXBMZW5ndGg7
Cit9CisKK3N0YXRpYyB1bnNpZ25lZCByaWdodENsaXBUb1dvcmRCdWZmZXIoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQga2VlcENvdW50LCBVQ2hhciogYnVm
ZmVyLCBib29sKQoreworICAgIEFTU0VSVChrZWVwQ291bnQgPCBsZW5ndGgpOworICAgIEFTU0VS
VChrZWVwQ291bnQgPCBTVFJJTkdfQlVGRkVSX1NJWkUpOworCisgICAgVGV4dEJyZWFrSXRlcmF0
b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5nLmNoYXJhY3RlcnMoKSwgbGVuZ3RoKTsK
KyAgICB1bnNpZ25lZCBrZWVwTGVuZ3RoID0gdGV4dEJyZWFrQXRPclByZWNlZGluZyhpdCwga2Vl
cENvdW50KTsKKyAgICBtZW1jcHkoYnVmZmVyLCBzdHJpbmcuY2hhcmFjdGVycygpLCBzaXplb2Yo
VUNoYXIpICoga2VlcExlbmd0aCk7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBndWFyZCB0aGlzIGNvZGUgYmVoaW5kIGFuIGVkaXRpbmcgYmVoYXZpb3IuIFRo
ZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKyAgICAvLyBNb3RpdmF0
ZWQgYnkgPHJkYXI6Ly9wcm9ibGVtLzc0MzkzMjc+IHRydW5jYXRpb24gc2hvdWxkIG5vdCBpbmNs
dWRlIGEgdHJhaWxpbmcgc3BhY2UKKyAgICB3aGlsZSAoKGtlZXBMZW5ndGggPiAwKSAmJiAoc3Ry
aW5nW2tlZXBMZW5ndGggLSAxXSA9PSBzcGFjZSkpCisgICAgICAgIC0ta2VlcExlbmd0aDsKKyNl
bmRpZgorICAgIHJldHVybiBrZWVwTGVuZ3RoOworfQorCitzdGF0aWMgdW5zaWduZWQgbGVmdFRy
dW5jYXRlVG9CdWZmZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgdW5z
aWduZWQga2VlcENvdW50LCBVQ2hhciogYnVmZmVyLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lz
KQoreworICAgIEFTU0VSVChrZWVwQ291bnQgPCBsZW5ndGgpOworICAgIEFTU0VSVChrZWVwQ291
bnQgPCBTVFJJTkdfQlVGRkVSX1NJWkUpOworCisgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGxl
bmd0aCAtIGtlZXBDb3VudDsKKworICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3Ig
aXQoc3RyaW5nLmNoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBhZGp1c3RlZFN0
YXJ0SW5kZXggPSBzdGFydEluZGV4OworICAgIHN0YXJ0SW5kZXggPSBib3VuZGVkVGV4dEJyZWFr
Rm9sbG93aW5nKGl0LCBzdGFydEluZGV4LCBsZW5ndGggLSBzdGFydEluZGV4KTsKKworICAgIC8v
IFN0cmlwIHNpbmdsZSBjaGFyYWN0ZXIgYWZ0ZXIgZWxsaXBzaXMgY2hhcmFjdGVyLCB3aGVuIHRo
YXQgY2hhcmFjdGVyIGlzIHByZWNlZGVkIGJ5IGEgc3BhY2UKKyAgICBpZiAoYWRqdXN0ZWRTdGFy
dEluZGV4IDwgbGVuZ3RoICYmIHN0cmluZ1thZGp1c3RlZFN0YXJ0SW5kZXhdICE9IHNwYWNlCisg
ICAgICAgICYmIGFkanVzdGVkU3RhcnRJbmRleCA8IGxlbmd0aCAtIDEgJiYgc3RyaW5nW2FkanVz
dGVkU3RhcnRJbmRleCArIDFdID09IHNwYWNlKQorICAgICAgICArK2FkanVzdGVkU3RhcnRJbmRl
eDsKKworICAgIC8vIFN0cmlwIHdoaXRlc3BhY2UgYWZ0ZXIgdGhlIGVsbGlwc2lzIGNoYXJhY3Rl
cgorICAgIHdoaWxlIChhZGp1c3RlZFN0YXJ0SW5kZXggPCBsZW5ndGggJiYgc3RyaW5nW2FkanVz
dGVkU3RhcnRJbmRleF0gPT0gc3BhY2UpCisgICAgICAgICsrYWRqdXN0ZWRTdGFydEluZGV4Owor
CisgICAgaWYgKHNob3VsZEluc2VydEVsbGlwc2lzKSB7CisgICAgICAgIGJ1ZmZlclswXSA9IGhv
cml6b250YWxFbGxpcHNpczsKKyAgICAgICAgbWVtY3B5KCZidWZmZXJbMV0sICZzdHJpbmcuY2hh
cmFjdGVycygpW2FkanVzdGVkU3RhcnRJbmRleF0sIHNpemVvZihVQ2hhcikgKiAobGVuZ3RoIC0g
YWRqdXN0ZWRTdGFydEluZGV4ICsgMSkpOworICAgICAgICByZXR1cm4gbGVuZ3RoIC0gYWRqdXN0
ZWRTdGFydEluZGV4ICsgMTsKKyAgICB9CisgICAgbWVtY3B5KCZidWZmZXJbMF0sICZzdHJpbmcu
Y2hhcmFjdGVycygpW2FkanVzdGVkU3RhcnRJbmRleF0sIHNpemVvZihVQ2hhcikgKiAobGVuZ3Ro
IC0gYWRqdXN0ZWRTdGFydEluZGV4ICsgMSkpOworICAgIHJldHVybiBsZW5ndGggLSBhZGp1c3Rl
ZFN0YXJ0SW5kZXg7Cit9CisKIHN0YXRpYyBmbG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250JiBy
ZW5kZXJlciwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBk
aXNhYmxlUm91bmRpbmdIYWNrcykKIHsKICAgICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5n
dGgpOwpAQCAtMTAwLDIzICsxOTMsMjkgQEAgc3RhdGljIGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0
IEZvbnQmIHJlbmRlcmVyLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQKICAgICBy
ZXR1cm4gcmVuZGVyZXIud2lkdGgocnVuKTsKIH0KIAotc3RhdGljIFN0cmluZyB0cnVuY2F0ZVN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGZv
bnQsIFRydW5jYXRpb25GdW5jdGlvbiB0cnVuY2F0ZVRvQnVmZmVyLCBib29sIGRpc2FibGVSb3Vu
ZGluZ0hhY2tzKQorc3RhdGljIFN0cmluZyB0cnVuY2F0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0
cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGZvbnQsIFRydW5jYXRpb25GdW5jdGlv
biB0cnVuY2F0ZVRvQnVmZmVyLCBib29sIGRpc2FibGVSb3VuZGluZ0hhY2tzLCBmbG9hdCogcmVz
dWx0V2lkdGggPSBudWxscHRyLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgIGZs
b2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGggPSAwLCBib29sIGFsd2F5c1RydW5jYXRl
ID0gZmFsc2UpCiB7CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBz
dHJpbmc7Ci0gICAgCisKKyAgICBpZiAocmVzdWx0V2lkdGgpCisgICAgICAgICpyZXN1bHRXaWR0
aCA9IDA7CisKICAgICBBU1NFUlQobWF4V2lkdGggPj0gMCk7Ci0gICAgCi0gICAgZmxvYXQgY3Vy
cmVudEVsbGlwc2lzV2lkdGggPSBzdHJpbmdXaWR0aChmb250LCAmaG9yaXpvbnRhbEVsbGlwc2lz
LCAxLCBkaXNhYmxlUm91bmRpbmdIYWNrcyk7Ci0gICAgCisKKyAgICBmbG9hdCBjdXJyZW50RWxs
aXBzaXNXaWR0aCA9IHNob3VsZEluc2VydEVsbGlwc2lzID8gc3RyaW5nV2lkdGgoZm9udCwgJmhv
cml6b250YWxFbGxpcHNpcywgMSwgZGlzYWJsZVJvdW5kaW5nSGFja3MpIDogY3VzdG9tVHJ1bmNh
dGlvbkVsZW1lbnRXaWR0aDsKKwogICAgIFVDaGFyIHN0cmluZ0J1ZmZlcltTVFJJTkdfQlVGRkVS
X1NJWkVdOwogICAgIHVuc2lnbmVkIHRydW5jYXRlZExlbmd0aDsKICAgICB1bnNpZ25lZCBrZWVw
Q291bnQ7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogCiAgICAgaWYg
KGxlbmd0aCA+IFNUUklOR19CVUZGRVJfU0laRSkgewotICAgICAgICBrZWVwQ291bnQgPSBTVFJJ
TkdfQlVGRkVSX1NJWkUgLSAxOyAvLyBuZWVkIDEgY2hhcmFjdGVyIGZvciB0aGUgZWxsaXBzaXMK
LSAgICAgICAgdHJ1bmNhdGVkTGVuZ3RoID0gY2VudGVyVHJ1bmNhdGVUb0J1ZmZlcihzdHJpbmcs
IGxlbmd0aCwga2VlcENvdW50LCBzdHJpbmdCdWZmZXIpOworICAgICAgICBpZiAoc2hvdWxkSW5z
ZXJ0RWxsaXBzaXMpCisgICAgICAgICAgICBrZWVwQ291bnQgPSBTVFJJTkdfQlVGRkVSX1NJWkUg
LSAxOyAvLyBuZWVkIDEgY2hhcmFjdGVyIGZvciB0aGUgZWxsaXBzaXMKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAga2VlcENvdW50ID0gMDsKKyAgICAgICAgdHJ1bmNhdGVkTGVuZ3RoID0gY2Vu
dGVyVHJ1bmNhdGVUb0J1ZmZlcihzdHJpbmcsIGxlbmd0aCwga2VlcENvdW50LCBzdHJpbmdCdWZm
ZXIsIHNob3VsZEluc2VydEVsbGlwc2lzKTsKICAgICB9IGVsc2UgewogICAgICAgICBrZWVwQ291
bnQgPSBsZW5ndGg7CiAgICAgICAgIG1lbWNweShzdHJpbmdCdWZmZXIsIHN0cmluZy5jaGFyYWN0
ZXJzKCksIHNpemVvZihVQ2hhcikgKiBsZW5ndGgpOwpAQCAtMTI0LDggKzIyMywxMyBAQCBzdGF0
aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhX
aWR0aCwgY29uc3QgRm9udCYgZgogICAgIH0KIAogICAgIGZsb2F0IHdpZHRoID0gc3RyaW5nV2lk
dGgoZm9udCwgc3RyaW5nQnVmZmVyLCB0cnVuY2F0ZWRMZW5ndGgsIGRpc2FibGVSb3VuZGluZ0hh
Y2tzKTsKLSAgICBpZiAod2lkdGggPD0gbWF4V2lkdGgpCisgICAgaWYgKCFzaG91bGRJbnNlcnRF
bGxpcHNpcyAmJiBhbHdheXNUcnVuY2F0ZSkKKyAgICAgICAgd2lkdGggKz0gY3VzdG9tVHJ1bmNh
dGlvbkVsZW1lbnRXaWR0aDsKKyAgICBpZiAoKHdpZHRoIC0gbWF4V2lkdGgpIDwgMC4wMDAxKSB7
IC8vIElnbm9yZSByb3VuZGluZyBlcnJvcnMuCisgICAgICAgIGlmIChyZXN1bHRXaWR0aCkKKyAg
ICAgICAgICAgICpyZXN1bHRXaWR0aCA9IHdpZHRoOwogICAgICAgICByZXR1cm4gc3RyaW5nOwor
ICAgIH0KIAogICAgIHVuc2lnbmVkIGtlZXBDb3VudEZvckxhcmdlc3RLbm93blRvRml0ID0gMDsK
ICAgICBmbG9hdCB3aWR0aEZvckxhcmdlc3RLbm93blRvRml0ID0gY3VycmVudEVsbGlwc2lzV2lk
dGg7CkBAIC0xNTYsMTMgKzI2MCwxNyBAQCBzdGF0aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZgogICAgICAg
ICBBU1NFUlQoa2VlcENvdW50ID4gMCk7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKGtlZXBDb3VudCA8IGtlZXBDb3VudEZvclNtYWxsZXN0S25vd25Ub05vdEZpdCk7
CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGtlZXBDb3VudCA+IGtl
ZXBDb3VudEZvckxhcmdlc3RLbm93blRvRml0KTsKLSAgICAgICAgCi0gICAgICAgIHRydW5jYXRl
ZExlbmd0aCA9IHRydW5jYXRlVG9CdWZmZXIoc3RyaW5nLCBsZW5ndGgsIGtlZXBDb3VudCwgc3Ry
aW5nQnVmZmVyKTsKKworICAgICAgICB0cnVuY2F0ZWRMZW5ndGggPSB0cnVuY2F0ZVRvQnVmZmVy
KHN0cmluZywgbGVuZ3RoLCBrZWVwQ291bnQsIHN0cmluZ0J1ZmZlciwgc2hvdWxkSW5zZXJ0RWxs
aXBzaXMpOwogCiAgICAgICAgIHdpZHRoID0gc3RyaW5nV2lkdGgoZm9udCwgc3RyaW5nQnVmZmVy
LCB0cnVuY2F0ZWRMZW5ndGgsIGRpc2FibGVSb3VuZGluZ0hhY2tzKTsKKyAgICAgICAgaWYgKCFz
aG91bGRJbnNlcnRFbGxpcHNpcykKKyAgICAgICAgICAgIHdpZHRoICs9IGN1c3RvbVRydW5jYXRp
b25FbGVtZW50V2lkdGg7CiAgICAgICAgIGlmICh3aWR0aCA8PSBtYXhXaWR0aCkgewogICAgICAg
ICAgICAga2VlcENvdW50Rm9yTGFyZ2VzdEtub3duVG9GaXQgPSBrZWVwQ291bnQ7CiAgICAgICAg
ICAgICB3aWR0aEZvckxhcmdlc3RLbm93blRvRml0ID0gd2lkdGg7CisgICAgICAgICAgICBpZiAo
cmVzdWx0V2lkdGgpCisgICAgICAgICAgICAgICAgKnJlc3VsdFdpZHRoID0gd2lkdGg7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBrZWVwQ291bnRGb3JTbWFsbGVzdEtub3duVG9Ob3RG
aXQgPSBrZWVwQ291bnQ7CiAgICAgICAgICAgICB3aWR0aEZvclNtYWxsZXN0S25vd25Ub05vdEZp
dCA9IHdpZHRoOwpAQCAtMTc1LDcgKzI4Myw3IEBAIHN0YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJp
bmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmCiAg
ICAgCiAgICAgaWYgKGtlZXBDb3VudCAhPSBrZWVwQ291bnRGb3JMYXJnZXN0S25vd25Ub0ZpdCkg
ewogICAgICAgICBrZWVwQ291bnQgPSBrZWVwQ291bnRGb3JMYXJnZXN0S25vd25Ub0ZpdDsKLSAg
ICAgICAgdHJ1bmNhdGVkTGVuZ3RoID0gdHJ1bmNhdGVUb0J1ZmZlcihzdHJpbmcsIGxlbmd0aCwg
a2VlcENvdW50LCBzdHJpbmdCdWZmZXIpOworICAgICAgICB0cnVuY2F0ZWRMZW5ndGggPSB0cnVu
Y2F0ZVRvQnVmZmVyKHN0cmluZywgbGVuZ3RoLCBrZWVwQ291bnQsIHN0cmluZ0J1ZmZlciwgc2hv
dWxkSW5zZXJ0RWxsaXBzaXMpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gU3RyaW5nKHN0cmlu
Z0J1ZmZlciwgdHJ1bmNhdGVkTGVuZ3RoKTsKQEAgLTE5Niw0ICszMDQsMjkgQEAgZmxvYXQgU3Ry
aW5nVHJ1bmNhdG9yOjp3aWR0aChjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgRm9udCYgZm9u
dCwgRW5hYmxlUm91bmQKICAgICByZXR1cm4gc3RyaW5nV2lkdGgoZm9udCwgc3RyaW5nLmNoYXJh
Y3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpLCAhZW5hYmxlUm91bmRpbmdIYWNrcyk7CiB9CiAKK1N0
cmluZyBTdHJpbmdUcnVuY2F0b3I6OmNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09y
Tm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJ
bnNlcnRFbGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK3sKKyAg
ICByZXR1cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgY2VudGVyVHJ1
bmNhdGVUb0J1ZmZlciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxk
SW5zZXJ0RWxsaXBzaXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOworfQorCitTdHJp
bmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNl
cnRFbGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK3sKKyAgICBy
ZXR1cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRUcnVuY2F0
ZVRvQnVmZmVyLCAhZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNl
cnRFbGxpcHNpcywgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7Cit9CisKK1N0cmluZyBT
dHJpbmdUcnVuY2F0b3I6OmxlZnRUcnVuY2F0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQg
bWF4V2lkdGgsIGNvbnN0IEZvbnQmIGZvbnQsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFi
bGVSb3VuZGluZ0hhY2tzLCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxs
aXBzaXMsIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpCit7CisgICAgcmV0dXJu
IHRydW5jYXRlU3RyaW5nKHN0cmluZywgbWF4V2lkdGgsIGZvbnQsIGxlZnRUcnVuY2F0ZVRvQnVm
ZmVyLCAhZW5hYmxlUm91bmRpbmdIYWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxp
cHNpcywgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7Cit9CisKK1N0cmluZyBTdHJpbmdU
cnVuY2F0b3I6OnJpZ2h0Q2xpcFRvQ2hhcmFjdGVyKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9h
dCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVu
YWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRF
bGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK3sKKyAgICByZXR1
cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBtYXhXaWR0aCwgZm9udCwgcmlnaHRDbGlwVG9DaGFy
YWN0ZXJCdWZmZXIsICFlbmFibGVSb3VuZGluZ0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZElu
c2VydEVsbGlwc2lzLCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKK30KKworU3RyaW5n
IFN0cmluZ1RydW5jYXRvcjo6cmlnaHRDbGlwVG9Xb3JkKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBm
bG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90
IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNl
cnRFbGxpcHNpcywgIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgsIGJvb2wgYWx3
YXlzVHJ1bmNhdGUpCit7CisgICAgcmV0dXJuIHRydW5jYXRlU3RyaW5nKHN0cmluZywgbWF4V2lk
dGgsIGZvbnQsIHJpZ2h0Q2xpcFRvV29yZEJ1ZmZlciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZy
ZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50
V2lkdGgsIGFsd2F5c1RydW5jYXRlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaApp
bmRleCAxNDk5YzEwODc0NDczYWQ0NjNjNGYzN2FiMjA0ZWQwMDY3OWRjZDdjLi4xM2Q4ZTE0YWY3
ZTg2NDhhNzFjZjQ3NzA0MDY2NjI4NjllMzk3YzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaApAQCAtNDEsNiArNDEsMTMgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBTdHJpbmcgY2VudGVyVHJ1bmNh
dGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3Vu
ZGluZ0hhY2tzT3JOb3QgPSBEaXNhYmxlUm91bmRpbmdIYWNrcyk7CiAgICAgICAgIHN0YXRpYyBT
dHJpbmcgcmlnaHRUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3Qg
Rm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsK
KworICAgICAgICBzdGF0aWMgU3RyaW5nIGNlbnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZs
b2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9h
dCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBj
dXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcg
cmlnaHRUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYs
IEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3Vs
ZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0
aCA9IDApOworICAgICAgICBzdGF0aWMgU3RyaW5nIGxlZnRUcnVuY2F0ZShjb25zdCBTdHJpbmcm
LCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwg
ZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgICAgICBzdGF0aWMgU3Ry
aW5nIHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBj
b25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgs
IGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9u
RWxlbWVudFdpZHRoID0gMCk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgcmlnaHRDbGlwVG9Xb3Jk
KGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRp
bmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBz
aXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCwgYm9vbCBh
bHdheXNUcnVuY2F0ZSA9IGZhbHNlKTsKKwogICAgICAgICBzdGF0aWMgZmxvYXQgd2lkdGgoY29u
c3QgU3RyaW5nJiwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2Fi
bGVSb3VuZGluZ0hhY2tzKTsKICAgICB9OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwCmlu
ZGV4IDY4ZTRjMmQ0YTMwOTM1NWVhODM0MzRlZGI1ZDk4MzdlZDdmYTU2NWEuLmQxNzhlNTg2Zjc4
ZjIwMTY5MGVlYzMzZjIyYTI2MzQ5M2JhMWFkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RleHRUcmFja1JlcHJlc2VudGF0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAK
QEAgLTQyLDEwICs0MiwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRSZWN0IGJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIEludFJlY3QoKTsgfQogfTsKIAorI2lmICFQTEFURk9STShJT1MpCiBQ
YXNzT3duUHRyPFRleHRUcmFja1JlcHJlc2VudGF0aW9uPiBUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bjo6Y3JlYXRlKFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50KikKIHsKICAgICByZXR1cm4g
V1RGOjphZG9wdFB0cihuZXcgTnVsbFRleHRUcmFja1JlcHJlc2VudGF0aW9uKCkpOwogfQorI2Vu
ZGlmCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
V2lkdGhJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJ
dGVyYXRvci5oCmluZGV4IGJmNjM1YzljYTQ3ZjY0NDYzYTYzMjRiN2Y4Nzc5ZjQzNDM5MWFhNDcu
LjEzNDRiOWFlNjE0MjRlYjEzNDc3YjFiZDYyNTY4MDIzMzUxZGI2ZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKQEAgLTYwLDcgKzYw
LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1
cmVzKGNvbnN0IEZvbnQmIGZvbnQpCiAgICAgewotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODAKKyNpZiBQTEFURk9STShJT1MpIHx8IChQ
TEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDgwKQog
ICAgICAgICBpZiAoIWZvbnQuaXNQcmludGVyRm9udCgpKQogICAgICAgICAgICAgcmV0dXJuICFm
b250LnR5cGVzZXR0aW5nRmVhdHVyZXMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0FWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGwu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQVZUcmFj
a1ByaXZhdGVBVkZPYmpDSW1wbC5tbQppbmRleCAxNmQwODExNzZkNzg5MTU5ZTRhNzI4ZDQ3NDli
NDFiNTM5OTMyNzk2Li45ZTQ1NWI0ZTkyMDAzZmNlMjZmNGI0MDVjMmYwM2I4OWM5NzJhZGY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
QVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbC5tbQpAQCAt
MTE1LDcgKzExNSw3IEBAIEF0b21pY1N0cmluZyBBVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsOjps
YWJlbCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBlbXB0eUF0b207CiAKICAgICAvLyBJZiBwb3Nz
aWJsZSwgcmV0dXJuIGEgdGl0bGUgaW4gb25lIG9mIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1
YWdlcy4KLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKKyNpZiBQ
TEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAog
ICAgIE5TQXJyYXkgKnRpdGxlc0ZvclByZWZlcnJlZExhbmd1YWdlcyA9IFtBVk1ldGFkYXRhSXRl
bSBtZXRhZGF0YUl0ZW1zRnJvbUFycmF5OnRpdGxlcyBmaWx0ZXJlZEFuZFNvcnRlZEFjY29yZGlu
Z1RvUHJlZmVycmVkTGFuZ3VhZ2VzOltOU0xvY2FsZSBwcmVmZXJyZWRMYW5ndWFnZXNdXTsKICNl
bHNlCiAgICAgTlNBcnJheSAqdGl0bGVzRm9yUHJlZmVycmVkTGFuZ3VhZ2VzID0gW0FWTWV0YWRh
dGFJdGVtIG1ldGFkYXRhSXRlbXNGcm9tQXJyYXk6dGl0bGVzIHdpdGhMb2NhbGU6W05TTG9jYWxl
IGN1cnJlbnRMb2NhbGVdXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCmluZGV4IGE2M2VkNjc1ZDA1
NjJiNTAzNmNiMjE3MzhiNzU3YzI1OTNiNTVhOGYuLjk5NDg2ZDdhMTQ2ZmRiZWFjNmZkMThjYWVm
Y2RlY2U5ZjI2Y2Q5MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQpAQCAtNjIsOCArNjIsMTIg
QEAKICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2ltcG9ydCA8QVZGb3VuZGF0aW9u
L0FWRm91bmRhdGlvbi5oPgotI2ltcG9ydCA8Q29yZU1lZGlhL0NvcmVNZWRpYS5oPgorI2lmIFBM
QVRGT1JNKElPUykKKyNpbXBvcnQgPENvcmVJbWFnZS9Db3JlSW1hZ2UuaD4KKyNlbHNlCiAjaW1w
b3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5oPgorI2VuZGlmCisjaW1wb3J0IDxDb3JlTWVkaWEv
Q29yZU1lZGlhLmg+CiAKICNpZiBVU0UoVklERU9UT09MQk9YKQogI2ltcG9ydCA8Q29yZVZpZGVv
L0NvcmVWaWRlby5oPgpAQCAtNzc5LDcgKzc4Myw3IEBAIGRvdWJsZSBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybU1heFRpbWVTZWVrYWJsZSgpIGNvbnN0CiAKIGZs
b2F0IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtTWF4VGltZUxv
YWRlZCgpIGNvbnN0CiB7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEIDw9IDEwODAKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEIDw9IDEwODAKICAgICAvLyBBVkZvdW5kYXRpb24gb24gTW91bnRh
aW4gTGlvbiB3aWxsIG9jY2FzaW9uYWxseSBub3Qgc2VuZCBhIEtWTyBub3RpZmljYXRpb24KICAg
ICAvLyB3aGVuIGxvYWRlZFRpbWVSYW5nZXMgY2hhbmdlcyB3aGVuIHRoZXJlIGlzIG5vIHZpZGVv
IG91dHB1dC4gSW4gdGhhdCBjYXNlCiAgICAgLy8gdXBkYXRlIHRoZSBjYWNoZWQgdmFsdWUgZXhw
bGljaXRseS4KQEAgLTEyMzIsNiArMTIzNiwxNCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OnNpemVDaGFuZ2VkKCkKICAgICBzZXROYXR1cmFsU2l6ZShJbnRTaXpl
KG5hdHVyYWxTaXplKSk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCisvLyBGSVhNRTogSW1wbGVt
ZW50IGZvciBpT1MgaW4gV2ViS2l0IFN5c3RlbSBJbnRlcmZhY2UuCitzdGF0aWMgaW5saW5lIE5T
VVJMICp3a0FWQXNzZXRSZXNvbHZlZFVSTChBVkFzc2V0KikKK3sKKyAgICByZXR1cm4gbmlsOwor
fQorI2VuZGlmCisKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6aGFz
U2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCAKIHsKICAgICBpZiAoIW1fYXZBc3NldCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRm9u
dEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9Gb250QmxhY2tCZXJyeS5jcHAKaW5kZXggZTk0Yzc4N2M2Y2EwMTExNWM0NWE5MzY5ODJj
MDY0NWQzNDVmZjkxOC4uNWE2ZGExN2ZhY2YxMTM5ODQ1MzhkMDBkZWU3ZDNhZGIxMTI0MjkxZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9G
b250QmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9Gb250QmxhY2tCZXJyeS5jcHAKQEAgLTM4LDEwICszOCwxMCBAQCBzdGF0aWMg
aW5saW5lIEZTX0ZJWEVEIEZsb2F0VG9GU0ZpeGVkKGZsb2F0IG4pIHsgcmV0dXJuIHN0YXRpY19j
YXN0PEZTX0ZJWEVEPihuCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBGb250OjpkcmF3
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQg
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29u
c3QKIHsKICAgICBpZiAoIXJ1bi5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogICAgIEhhcmZCdXp6U2hh
cGVyIHNoYXBlcih0aGlzLCBydW4pOwpAQCAtNDksOCArNDksMTAgQEAgdm9pZCBGb250OjpkcmF3
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEYKICAgICBpZiAoIXNoYXBlci5zaGFwZSgmZ2x5cGhCdWZmZXIpKQogICAgICAgICBy
ZXR1cm47CiAgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvaW50ID0gc2hhcGVyLmFkanVzdFN0YXJ0
UG9pbnQocG9pbnQpOworICAgIGZsb2F0IHN0YXJ0WCA9IGFkanVzdGVkUG9pbnQueCgpOwogCiAg
ICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIGFkanVzdGVkUG9p
bnQpOworICAgIHJldHVybiBhZGp1c3RlZFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAogZmxvYXQg
Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiAvKiBmYWxsYmFja0ZvbnRzICovLCBHbHlwaE92ZXJm
bG93KiAvKiBnbHlwaE92ZXJmbG93ICovKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggNjI1OWQz
MmE0MTNlNTNiOWNjNmNhZmQ2OTFlY2NjNDRmNWVlZGYwMy4uZmY1NDExMjBmMzU2M2VjMWQ0Y2M1
OTNmMjdjY2I5YWNlZDhmMTE2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCkBAIC00Nyw2ICs0NywxMCBAQAog
I2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgi
CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJN
YWMuaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCkBAIC02MSw3ICs2NSwx
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBUaGUgdGhyZXNob2xkIHdpZHRoIG9yIGhlaWdo
dCBhYm92ZSB3aGljaCBhIHRpbGVkIGxheWVyIHdpbGwgYmUgdXNlZC4gVGhpcyBzaG91bGQgYmUK
IC8vIGxhcmdlIGVub3VnaCB0byBhdm9pZCB0aWxlZCBsYXllcnMgZm9yIG1vc3QgR3JhcGhpY3NM
YXllcnMsIGJ1dCBsZXNzIHRoYW4gdGhlIE9wZW5HTAogLy8gdGV4dHVyZSBzaXplIGxpbWl0IG9u
IGFsbCBzdXBwb3J0ZWQgaGFyZHdhcmUuCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGNvbnN0
IGludCBjTWF4UGl4ZWxEaW1lbnNpb24gPSAxMjgwOworI2Vsc2UKIHN0YXRpYyBjb25zdCBpbnQg
Y01heFBpeGVsRGltZW5zaW9uID0gMjAwMDsKKyNlbmRpZgogCiAvLyBEZXJpdmVkIGVtcGlyaWNh
bGx5OiA8cmRhcjovL3Byb2JsZW0vMTM0MDE4NjE+CiBzdGF0aWMgY29uc3QgaW50IGNNYXhMYXll
clRyZWVEZXB0aCA9IDI1MDsKQEAgLTI4Miw3ICsyOTAsNyBAQCBzdGF0aWMgZmxvYXQgbWF4U2Nh
bGVGcm9tVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQogc3RhdGljIGlu
bGluZSBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRGaWx0ZXJBbmltYXRpb25zKCkKIHsKIC8vIDxy
ZGFyOi8vcHJvYmxlbS8xMDkwNzI1MT4gLSBXZWJLaXQyIGRvZXNuJ3Qgc3VwcG9ydCBDQSBhbmlt
YXRpb25zIG9mIENJIGZpbHRlcnMgb24gTGlvbiBhbmQgYmVsb3cKLSNpZiBQTEFURk9STShNQUMp
ICYmIChQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0g
MTA4MCkKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MCkKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtODcxLDcgKzg3OSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
OjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogICAgICAgICBtX3VuY29ycmVjdGVk
Q29udGVudHNJbWFnZSA9IG5ld0ltYWdlOwogICAgICAgICBtX3BlbmRpbmdDb250ZW50c0ltYWdl
ID0gbmV3SW1hZ2U7CiAKLSNpZiAhUExBVEZPUk0oV0lOKQorI2lmICFQTEFURk9STShXSU4pICYm
ICFQTEFURk9STShJT1MpCiAgICAgICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dJ
bWFnZUdldENvbG9yU3BhY2UobV9wZW5kaW5nQ29udGVudHNJbWFnZS5nZXQoKSk7CiAKICAgICAg
ICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBkZXZpY2VSR0IgPSBDR0NvbG9yU3BhY2VDcmVhdGVE
ZXZpY2VSR0IoKTsKQEAgLTkxNiw2ICs5MjQsMTMgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNl
dENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKiBtZWRpYUxheWVyKQogICAgIG5vdGVMYXll
clByb3BlcnR5Q2hhbmdlZChDb250ZW50c01lZGlhTGF5ZXJDaGFuZ2VkKTsKIH0KIAorI2lmIFBM
QVRGT1JNKElPUykKK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzTGF5ZXJDQTo6Y29udGVudHNMYXll
ckZvck1lZGlhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZW50c0xheWVyUHVycG9zZSA9
PSBDb250ZW50c0xheWVyRm9yTWVkaWEgPyBtX2NvbnRlbnRzTGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KSA6IG51bGxwdHI7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRl
bnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogY2FudmFzTGF5ZXIpCiB7CiAgICAgaWYgKG1fY29u
dGVudHNMYXllciAmJiBjYW52YXNMYXllciA9PSBtX2NvbnRlbnRzTGF5ZXItPnBsYXRmb3JtTGF5
ZXIoKSkKQEAgLTExMDEsNiArMTExNiwxMCBAQCBGbG9hdFJlY3QgR3JhcGhpY3NMYXllckNBOjpj
b21wdXRlVmlzaWJsZVJlY3QoVHJhbnNmb3JtU3RhdGUmIHN0YXRlLCBDb21wdXRlVmlzaQogICAg
IGJvb2wgbWFwV2FzQ2xhbXBlZDsKICAgICBGbG9hdFJlY3QgY2xpcFJlY3RGb3JDaGlsZHJlbiA9
IHN0YXRlLm1hcHBlZFF1YWQoJm1hcFdhc0NsYW1wZWQpLmJvdW5kaW5nQm94KCk7CiAgICAgRmxv
YXRQb2ludCBib3VuZHNPcmlnaW4gPSBtX2JvdW5kc09yaWdpbjsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgLy8gVUlLaXQgbWF5IGJlIGNoYW5naW5nIGxheWVyIGJvdW5kcyBiZWhpbmQgb3VyIGJh
Y2sgaW4gb3ZlcmZsb3ctc2Nyb2xsIGxheWVycywgc28gdXNlIHRoZSBsYXllcidzIG9yaWdpbi4K
KyAgICBib3VuZHNPcmlnaW4gPSBtX2xheWVyLT5ib3VuZHMoKS5sb2NhdGlvbigpOworI2VuZGlm
CiAgICAgY2xpcFJlY3RGb3JDaGlsZHJlbi5tb3ZlKGJvdW5kc09yaWdpbi54KCksIGJvdW5kc09y
aWdpbi55KCkpOwogICAgIAogICAgIEZsb2F0UmVjdCBjbGlwUmVjdEZvclNlbGYoYm91bmRzT3Jp
Z2luLCBtX3NpemUpOwpAQCAtMTQ2OCw2ICsxNDg3LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
Ojp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvCiAgICAgRmxvYXRTaXplIHBpeGVsQWxpZ25tZW50T2Zmc2V0OwogICAgIGNvbXB1dGVQaXhl
bEFsaWdubWVudChwYWdlU2NhbGVGYWN0b3IsIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsIHNjYWxl
ZFBvc2l0aW9uLCBzY2FsZWRTaXplLCBzY2FsZWRBbmNob3JQb2ludCwgcGl4ZWxBbGlnbm1lbnRP
ZmZzZXQpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIG1fcGl4ZWxBbGlnbm1lbnRPZmZzZXQg
PSBwaXhlbEFsaWdubWVudE9mZnNldDsKKyNlbmRpZgorCiAgICAgRmxvYXRSZWN0IGFkanVzdGVk
Qm91bmRzKG1fYm91bmRzT3JpZ2luIC0gcGl4ZWxBbGlnbm1lbnRPZmZzZXQsIHNjYWxlZFNpemUp
OwogCiAgICAgLy8gVXBkYXRlIHBvc2l0aW9uLgpAQCAtMTQ3NywxMCArMTUwMCwyMSBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBj
b25zdCBGbG9hdFBvaW50JiBwbwogICAgIGlmIChtX3N0cnVjdHVyYWxMYXllcikgewogICAgICAg
ICBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24obV9wb3NpdGlvbi54KCkgKyBtX2FuY2hvclBvaW50
LngoKSAqIG1fc2l6ZS53aWR0aCgpLCBtX3Bvc2l0aW9uLnkoKSArIG1fYW5jaG9yUG9pbnQueSgp
ICogbV9zaXplLmhlaWdodCgpKTsKICAgICAgICAgRmxvYXRSZWN0IGxheWVyQm91bmRzKG1fYm91
bmRzT3JpZ2luLCBtX3NpemUpOwotICAgICAgICAKKworI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlf
Rk9SX1ZJREVPKQorICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgbW92aW5nIHRoZSBtYWluIHRo
cmVhZCBsb2dpYyBpbnRvIFBsYXRmb3JtQ0FMYXllci4KKyAgICAgICAgaWYgKG1lZGlhTGF5ZXJN
dXN0QmVVcGRhdGVkT25NYWluVGhyZWFkKCkgJiYgV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKKyAg
ICAgICAgICAgIG1fc3RydWN0dXJhbExheWVyLT5zZXRQb3NpdGlvbk9uTWFpblRocmVhZChsYXll
clBvc2l0aW9uKTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJhbExheWVyLT5zZXRCb3VuZHNPbk1h
aW5UaHJlYWQobGF5ZXJCb3VuZHMpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNl
dEFuY2hvclBvaW50T25NYWluVGhyZWFkKG1fYW5jaG9yUG9pbnQpOworICAgICAgICB9IGVsc2Ug
eworI2VuZGlmCiAgICAgICAgIG1fc3RydWN0dXJhbExheWVyLT5zZXRQb3NpdGlvbihsYXllclBv
c2l0aW9uKTsKICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNldEJvdW5kcyhsYXllckJvdW5k
cyk7CiAgICAgICAgIG1fc3RydWN0dXJhbExheWVyLT5zZXRBbmNob3JQb2ludChtX2FuY2hvclBv
aW50KTsKKyNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKKyAgICAgICAgfQorI2Vu
ZGlmCiAKICAgICAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9zdHJ1Y3R1cmFs
TGF5ZXJDbG9uZXMuZ2V0KCkpIHsKICAgICAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKQEAgLTE1MDQsMTAgKzE1MzgsMjEgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdlb21ldHJ5KGZsb2F0IHBhZ2VTY2FsZUZhY3Rvciwg
Y29uc3QgRmxvYXRQb2ludCYgcG8KICAgICAgICAgc2NhbGVkQW5jaG9yUG9pbnQgPSBGbG9hdFBv
aW50KDAuNWYsIDAuNWYpOwogICAgICAgICBhZGp1c3RlZFBvc2l0aW9uID0gRmxvYXRQb2ludChz
Y2FsZWRBbmNob3JQb2ludC54KCkgKiBzY2FsZWRTaXplLndpZHRoKCkgLSBwaXhlbEFsaWdubWVu
dE9mZnNldC53aWR0aCgpLCBzY2FsZWRBbmNob3JQb2ludC55KCkgKiBzY2FsZWRTaXplLmhlaWdo
dCgpIC0gcGl4ZWxBbGlnbm1lbnRPZmZzZXQuaGVpZ2h0KCkpOwogICAgIH0KLSAgICAKKworI2lm
IEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorICAgIC8vIEZJWE1FOiBDb25zaWRlciBt
b3ZpbmcgdGhlIG1haW4gdGhyZWFkIGxvZ2ljIGludG8gUGxhdGZvcm1DQUxheWVyLgorICAgIGlm
IChtZWRpYUxheWVyTXVzdEJlVXBkYXRlZE9uTWFpblRocmVhZCgpICYmIFdlYlRocmVhZElzQ3Vy
cmVudCgpKSB7CisgICAgICAgIG1fbGF5ZXItPnNldFBvc2l0aW9uT25NYWluVGhyZWFkKGFkanVz
dGVkUG9zaXRpb24pOworICAgICAgICBtX2xheWVyLT5zZXRCb3VuZHNPbk1haW5UaHJlYWQoYWRq
dXN0ZWRCb3VuZHMpOworICAgICAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludE9uTWFpblRocmVh
ZChzY2FsZWRBbmNob3JQb2ludCk7CisgICAgfSBlbHNlIHsKKyNlbmRpZgogICAgIG1fbGF5ZXIt
PnNldFBvc2l0aW9uKGFkanVzdGVkUG9zaXRpb24pOwogICAgIG1fbGF5ZXItPnNldEJvdW5kcyhh
ZGp1c3RlZEJvdW5kcyk7CiAgICAgbV9sYXllci0+c2V0QW5jaG9yUG9pbnQoc2NhbGVkQW5jaG9y
UG9pbnQpOworI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorICAgIH0KKyNlbmRp
ZgogCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQo
KSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1h
cC0+ZW5kKCk7CkBAIC0xNjc4LDcgKzE3MjMsMTEgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmVu
c3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHB1cnBvc2UpCiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKworI2lmIFBMQVRGT1JNKElPUykK
KyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBvbGRQcmltYXJ5TGF5ZXIgPSBtX3N0cnVjdHVy
YWxMYXllciA/IG1fc3RydWN0dXJhbExheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsKKyNlbmRp
ZgorCiAgICAgYm9vbCBzdHJ1Y3R1cmFsTGF5ZXJDaGFuZ2VkID0gZmFsc2U7CiAgICAgCiAgICAg
aWYgKHB1cnBvc2UgPT0gU3RydWN0dXJhbExheWVyRm9yUHJlc2VydmVzM0QpIHsKQEAgLTE5Nzcs
OCArMjAyNiwxOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNSZWN0cygp
CiAgICAgaWYgKGdhaW5lZE9yTG9zdENsaXBwaW5nTGF5ZXIpCiAgICAgICAgIG5vdGVTdWJsYXll
cnNDaGFuZ2VkKERvbnRTY2hlZHVsZUZsdXNoKTsKIAorI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlf
Rk9SX1ZJREVPKQorICAgIC8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgdGhlIG1haW4gdGhyZWFk
IGxvZ2ljIGludG8gUGxhdGZvcm1DQUxheWVyLgorICAgIGlmIChtZWRpYUxheWVyTXVzdEJlVXBk
YXRlZE9uTWFpblRocmVhZCgpICYmIFdlYlRocmVhZElzQ3VycmVudCgpKSB7CisgICAgICAgIG1f
Y29udGVudHNMYXllci0+c2V0UG9zaXRpb25Pbk1haW5UaHJlYWQoY29udGVudE9yaWdpbik7Cisg
ICAgICAgIG1fY29udGVudHNMYXllci0+c2V0Qm91bmRzT25NYWluVGhyZWFkKGNvbnRlbnRCb3Vu
ZHMpOworICAgIH0gZWxzZSB7CisjZW5kaWYKICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldFBvc2l0
aW9uKGNvbnRlbnRPcmlnaW4pOwogICAgIG1fY29udGVudHNMYXllci0+c2V0Qm91bmRzKGNvbnRl
bnRCb3VuZHMpOworI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKSAKKyAgICB9Cisj
ZW5kaWYKIAogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CkBA
IC0yMzYyLDggKzI0MjEsMTEgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9y
bUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWUKICAgICBib29sIGlz
TWF0cml4QW5pbWF0aW9uID0gbGlzdEluZGV4IDwgMDsKICAgICBpbnQgbnVtQW5pbWF0aW9ucyA9
IGlzTWF0cml4QW5pbWF0aW9uID8gMSA6IG9wZXJhdGlvbnMtPnNpemUoKTsKIAorI2lmIFBMQVRG
T1JNKElPUykKKyAgICBib29sIHJldmVyc2VBbmltYXRpb25MaXN0ID0gZmFsc2U7CisjZWxzZQog
ICAgIGJvb2wgcmV2ZXJzZUFuaW1hdGlvbkxpc3QgPSB0cnVlOwotI2lmICFQTEFURk9STShJT1Mp
ICYmICFQTEFURk9STShXSU4pCisjaWYgIVBMQVRGT1JNKFdJTikKICAgICAgICAgLy8gT2xkIHZl
cnNpb25zIG9mIENvcmUgQW5pbWF0aW9uIGFwcGx5IGFuaW1hdGlvbnMgaW4gcmV2ZXJzZSBvcmRl
ciAoPHJkYXI6Ly9wcm9ibGVtLzcwOTU2Mzg+KSBzbyB3ZSBuZWVkIHRvIGZsaXAgdGhlIGxpc3Qu
CiAgICAgICAgIC8vIHRvIGJlIG5vbi1hZGRpdGl2ZS4gRm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5
LCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIENvcmUgQW5pbWF0aW9uIHByZXNlcnZlcyB0aGlzIGJl
aGF2aW9yIGZvciBhcHBsaWNhdGlvbnMgbGlua2VkCiAgICAgICAgIC8vIG9uIG9yIGJlZm9yZSBT
bm93IExlb3BhcmQuCkBAIC0yMzczLDYgKzI0MzUsNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6
Y3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uc0Zyb21LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1
ZQogICAgICAgICBpZiAoIWV4ZWN1dGFibGVXYXNMaW5rZWRPbk9yQmVmb3JlU25vd0xlb3BhcmQp
CiAgICAgICAgICAgICByZXZlcnNlQW5pbWF0aW9uTGlzdCA9IGZhbHNlOwogI2VuZGlmCisjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQogICAgIGlmIChyZXZlcnNlQW5pbWF0aW9uTGlzdCkgewogICAg
ICAgICBmb3IgKGludCBhbmltYXRpb25JbmRleCA9IG51bUFuaW1hdGlvbnMgLSAxOyBhbmltYXRp
b25JbmRleCA+PSAwOyAtLWFuaW1hdGlvbkluZGV4KSB7CiAgICAgICAgICAgICBpZiAoIWFwcGVu
ZFRvVW5jb21taXR0ZWRBbmltYXRpb25zKHZhbHVlTGlzdCwgb3BlcmF0aW9ucywgYW5pbWF0aW9u
LCBhbmltYXRpb25OYW1lLCBib3hTaXplLCBhbmltYXRpb25JbmRleCwgdGltZU9mZnNldCwgaXNN
YXRyaXhBbmltYXRpb24pKSB7CkBAIC0zMDMyLDcgKzMwOTUsOSBAQCBHcmFwaGljc0xheWVyOjpD
b21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gR3JhcGhpY3NMYXllckNBOjpkZWZhdWx0
Q29udGVudAogdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldHVwQ29udGVudHNMYXllcihQbGF0Zm9y
bUNBTGF5ZXIqIGNvbnRlbnRzTGF5ZXIpCiB7CiAgICAgLy8gVHVybiBvZmYgaW1wbGljaXQgYW5p
bWF0aW9ucyBvbiB0aGUgaW5uZXIgbGF5ZXIuCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBjb250
ZW50c0xheWVyLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworI2VuZGlmCiAKICAgICBpZiAoZGVm
YXVsdENvbnRlbnRzT3JpZW50YXRpb24oKSA9PSBDb21wb3NpdGluZ0Nvb3JkaW5hdGVzQm90dG9t
VXApIHsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZmxpcHBlcigKQEAgLTMwNTEsNiAr
MzExNiwxMyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0dXBDb250ZW50c0xheWVyKFBsYXRm
b3JtQ0FMYXllciogY29udGVudHNMYXllcikKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoUExVR0lO
X1BST1hZX0ZPUl9WSURFTykKK2Jvb2wgR3JhcGhpY3NMYXllckNBOjptZWRpYUxheWVyTXVzdEJl
VXBkYXRlZE9uTWFpblRocmVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVudHNMYXll
clB1cnBvc2UgPT0gQ29udGVudHNMYXllckZvck1lZGlhOworfQorI2VuZGlmCisKIFBhc3NSZWZQ
dHI8UGxhdGZvcm1DQUxheWVyPiBHcmFwaGljc0xheWVyQ0E6OmZpbmRPck1ha2VDbG9uZShDbG9u
ZUlEIGNsb25lSUQsIFBsYXRmb3JtQ0FMYXllciAqc291cmNlTGF5ZXIsIExheWVyTWFwKiBjbG9u
ZXMsIENsb25lTGV2ZWwgY2xvbmVMZXZlbCkKIHsKICAgICBpZiAoIXNvdXJjZUxheWVyKQpAQCAt
MzMyNywxMiArMzM5OSwxNCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6Y29tcHV0ZVBpeGVsQWxp
Z25tZW50KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQbwogICAgIAogICAgIC8v
IENvbnZlcnQgYmFjayB0byBsYXllciBjb29yZGluYXRlcy4KICAgICBhbGlnbmVkQm91bmRzLnNj
YWxlKDEgLyBwYWdlU2NhbGVGYWN0b3IpOwotICAgIAorCisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICAvLyBFcHNpbG9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBiYWNraW5nIHN0b3JlIHNp
emUgY29tcHV0YXRpb24gaW4gQ0EsIHdoaWNoIGludm9sdmVzIGludGVnZXIgdHJ1bmNhdGlvbiwK
ICAgICAvLyB3aWxsIG1hdGNoIG91ciBhbGlnbmVkIGJvdW5kcy4KICAgICBjb25zdCBmbG9hdCBl
cHNpbG9uID0gMWUtNWY7CiAgICAgYWxpZ25lZEJvdW5kcy5leHBhbmQoZXBzaWxvbiwgZXBzaWxv
bik7Ci0gICAgCisjZW5kaWYKKwogICAgIGFsaWdubWVudE9mZnNldCA9IGJhc2VSZWxhdGl2ZUJv
dW5kcy5sb2NhdGlvbigpIC0gYWxpZ25lZEJvdW5kcy5sb2NhdGlvbigpOwogICAgIHBvc2l0aW9u
ID0gbV9wb3NpdGlvbiAtIGFsaWdubWVudE9mZnNldDsKICAgICBzaXplID0gYWxpZ25lZEJvdW5k
cy5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IDFjMzdkMDBmZGMzNDU2YTZhZDAxZTcxNDM3MzQwYTYx
Y2QwYjZhNWMuLjliMmIzNjU4MzQ3YWU5YmRmYWRiNDg5MTNhOWM5NDFlNWRiNmQ1NzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5
ZXJDQS5oCkBAIC0xMjEsNiArMTIxLDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNl
dENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Rv
TWVkaWEoUGxhdGZvcm1MYXllciopOworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIFBs
YXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXJGb3JNZWRpYSgpIGNvbnN0IE9WRVJSSURFOworI2Vu
ZGlmCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciop
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYp
OwogCkBAIC0xMzcsNiArMTQwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBsYXllckRp
ZERpc3BsYXkoUGxhdGZvcm1MYXllciopOwogCiAgICAgdmlydHVhbCB2b2lkIHNldE1haW50YWlu
c1BpeGVsQWxpZ25tZW50KGJvb2wpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIEZs
b2F0U2l6ZSBwaXhlbEFsaWdubWVudE9mZnNldCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
cGl4ZWxBbGlnbm1lbnRPZmZzZXQ7IH0KKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VP
clBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKIAogICAgIHN0cnVjdCBDb21taXRTdGF0ZSB7CkBA
IC0yNTYsNiArMjYyLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXR1cENvbnRlbnRzTGF5ZXIo
UGxhdGZvcm1DQUxheWVyKik7CiAgICAgUGxhdGZvcm1DQUxheWVyKiBjb250ZW50c0xheWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyLmdldCgpOyB9CiAKKyNpZiBFTkFCTEUoUExV
R0lOX1BST1hZX0ZPUl9WSURFTykKKyAgICBib29sIG1lZGlhTGF5ZXJNdXN0QmVVcGRhdGVkT25N
YWluVGhyZWFkKCkgY29uc3Q7CisjZW5kaWYKKwogICAgIHZpcnR1YWwgdm9pZCBzZXRSZXBsaWNh
dGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGVidWdC
b3JkZXJJbmZvKENvbG9yJiwgZmxvYXQmIHdpZHRoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBRmlsdGVycy5oCmluZGV4
IDI5Y2NlZjQ3ZDAyOGIzNDliNjRhZWE0MzVhNmQyNTY4OTI5Zjg3MDguLmNkYTcyY2VmNzQwNzU3
ZDVlNTQzMzYwOWQyZGIzOWQzMTM0MGY3YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUZpbHRlcnMuaApAQCAtMzMsNyArMzMs
NyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKKyNpZiBQ
TEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAog
I2RlZmluZSBVU0VfQ0FfRklMVEVSUyAxCiAjZWxzZQogI2RlZmluZSBVU0VfQ0FfRklMVEVSUyAw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9y
bUNBTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3Jt
Q0FMYXllci5oCmluZGV4IGZiN2U2MTAxZjY3MjRmNjY5MDQzNjMxM2I0ODhhMWMxNDA2YmM0MjEu
LjJhNDZiZDY2NDJmODU5ZjU4YTIzZmEyNTQ4YWFiNGEzYzAzMzAwOGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCkBA
IC0yMDYsNiArMjA2LDE0IEBAIHB1YmxpYzoKICNlbmRpZiAvLyBOREVCVUcKICNlbmRpZiAvLyBQ
TEFURk9STShXSU4pCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgYm9vbCBpc1dlYkxheWVyKCk7
CisgICAgdm9pZCBzZXRCb3VuZHNPbk1haW5UaHJlYWQoQ0dSZWN0KTsKKyAgICB2b2lkIHNldFBv
c2l0aW9uT25NYWluVGhyZWFkKENHUG9pbnQpOworICAgIHZvaWQgc2V0QW5jaG9yUG9pbnRPbk1h
aW5UaHJlYWQoRmxvYXRQb2ludDNEKTsKKyAgICB2b2lkIHNldFRpbGVTaXplKGNvbnN0IEludFNp
emUmKTsKKyNlbmRpZgorCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4g
Y3JlYXRlQ29tcGF0aWJsZUxheWVyKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50Kikg
Y29uc3QgPSAwOwogCiAjaWYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyRmx1c2hTY2hlZHVs
ZXJNYWMuY3BwCmluZGV4IDE0NjJkNWUzYjQ3YTRkZDZiMjE4Mzk0Njk2YmUyMTViMmY2ODg4ZmMu
LmJmYzNlNWFmNmMzMDZmYmQ1ZWNhNjgxMGMzYjA0NzExOThlYWM3MDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllckZsdXNoU2NoZWR1bGVy
TWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5
ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAKQEAgLTMxLDExICszMSwzMSBAQAogCiAjaW5jbHVkZSA8
d3RmL0F1dG9kcmFpbmVkUG9vbC5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlJ1
bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NG
QnVuZGxlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkLmg+CisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgQ0ZJbmRleCBDb3JlQW5pbWF0aW9u
UnVuTG9vcE9yZGVyID0gMjAwMDAwMDsKIHN0YXRpYyBjb25zdCBDRkluZGV4IExheWVyRmx1c2hS
dW5Mb29wT3JkZXIgPSBDb3JlQW5pbWF0aW9uUnVuTG9vcE9yZGVyIC0gMTsKIAorc3RhdGljIENG
UnVuTG9vcFJlZiBjdXJyZW50UnVuTG9vcCgpCit7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IEEgcmFjZSBjb25kaXRpb24gZHVyaW5nIFdlYlZpZXcgZGVhbGxvY2F0aW9uIGNhbiBsZWFkIHRv
IGEgY3Jhc2ggaWYgdGhlIGxheWVyIHN5bmMgcnVuIGxvb3AKKyAgICAvLyBvYnNlcnZlciBpcyBh
ZGRlZCB0byB0aGUgbWFpbiBydW4gbG9vcCA8cmRhcjovL3Byb2JsZW0vOTc5ODU1MD4uIEhvd2V2
ZXIsIGZvciByZXNwb25zaXZlbmVzcywKKyAgICAvLyB3ZSBzdGlsbCBhbGxvdyB0aGlzLCBzZWUg
PHJkYXI6Ly9wcm9ibGVtLzc0MDMzMjg+LiBTaW5jZSB0aGUgcmFjZSBjb25kaXRpb24gYW5kIHN1
YnNlcXVlbnQKKyAgICAvLyBjcmFzaCBhcmUgZXNwZWNpYWxseSB0cm91Ymxlc29tZSBmb3IgaUJv
b2tzLCB3ZSBuZXZlciBhbGxvdyB0aGUgb2JzZXJ2ZXIgdG8gYmUgYWRkZWQgdG8gdGhlCisgICAg
Ly8gbWFpbiBydW4gbG9vcCBpbiBpQm9va3MuCisgICAgaWYgKGFwcGxpY2F0aW9uSXNJQm9va3NP
bklPUygpKQorICAgICAgICByZXR1cm4gV2ViVGhyZWFkUnVuTG9vcCgpOworI2VuZGlmCisgICAg
cmV0dXJuIENGUnVuTG9vcEdldEN1cnJlbnQoKTsKK30KKwogTGF5ZXJGbHVzaFNjaGVkdWxlcjo6
TGF5ZXJGbHVzaFNjaGVkdWxlcihMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50KiBjbGllbnQpCiAg
ICAgOiBtX2lzU3VzcGVuZGVkKGZhbHNlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQpAQCAtNjgs
MTAgKzg4LDEwIEBAIHZvaWQgTGF5ZXJGbHVzaFNjaGVkdWxlcjo6c2NoZWR1bGUoKQogICAgIGlm
IChtX2lzU3VzcGVuZGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBDRlJ1bkxvb3BSZWYgY3Vy
cmVudFJ1bkxvb3AgPSBDRlJ1bkxvb3BHZXRDdXJyZW50KCk7CisgICAgQ0ZSdW5Mb29wUmVmIHJ1
bkxvb3AgPSBjdXJyZW50UnVuTG9vcCgpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIHdha2UgdXAg
dGhlIGxvb3Agb3IgdGhlIG9ic2VydmVyIGNvdWxkIGJlIGRlbGF5ZWQgdW50aWwgc29tZSBvdGhl
ciBzb3VyY2UgZmlyZXMuCi0gICAgQ0ZSdW5Mb29wV2FrZVVwKGN1cnJlbnRSdW5Mb29wKTsKKyAg
ICBDRlJ1bkxvb3BXYWtlVXAocnVuTG9vcCk7CiAKICAgICBpZiAobV9ydW5Mb29wT2JzZXJ2ZXIp
CiAgICAgICAgIHJldHVybjsKQEAgLTc5LDcgKzk5LDcgQEAgdm9pZCBMYXllckZsdXNoU2NoZWR1
bGVyOjpzY2hlZHVsZSgpCiAgICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJDb250ZXh0IGNvbnRleHQgPSB7
IDAsIHRoaXMsIDAsIDAsIDAgfTsKICAgICBtX3J1bkxvb3BPYnNlcnZlciA9IGFkb3B0Q0YoQ0ZS
dW5Mb29wT2JzZXJ2ZXJDcmVhdGUoMCwga0NGUnVuTG9vcEJlZm9yZVdhaXRpbmcgfCBrQ0ZSdW5M
b29wRXhpdCwgdHJ1ZSwgTGF5ZXJGbHVzaFJ1bkxvb3BPcmRlciwgcnVuTG9vcE9ic2VydmVyQ2Fs
bGJhY2ssICZjb250ZXh0KSk7CiAKLSAgICBDRlJ1bkxvb3BBZGRPYnNlcnZlcihjdXJyZW50UnVu
TG9vcCwgbV9ydW5Mb29wT2JzZXJ2ZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Cisg
ICAgQ0ZSdW5Mb29wQWRkT2JzZXJ2ZXIocnVuTG9vcCwgbV9ydW5Mb29wT2JzZXJ2ZXIuZ2V0KCks
IGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CiB9CiAKIHZvaWQgTGF5ZXJGbHVzaFNjaGVkdWxlcjo6
aW52YWxpZGF0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQppbmRleCAzMWI0ODI0OTE4Y2Nm
OGExZTBhN2M3NmU1ODQyMTBmOWVlNTg2ODQ5Li5kOTliY2Q5ZGY3YmE2MWIzYWY1OTE5ZDc0ZmQx
OGI4NjU1ZGNiODlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0KQEAgLTQ4LDYgKzQ4LDEz
IEBACiAjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWQuaCIKKyNpbXBv
cnQgIldlYlRpbGVkTGF5ZXIuaCIKKyNpbXBvcnQgPEZvdW5kYXRpb24vTlNHZW9tZXRyeS5oPgor
I2ltcG9ydCA8UXVhcnR6Q29yZS9DQVRpbGVkTGF5ZXJQcml2YXRlLmg+CisjZW5kaWYKKwogU09G
VF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVkZvdW5kYXRpb24pCiBTT0ZUX0xJTktfQ0xBU1Mo
QVZGb3VuZGF0aW9uLCBBVlBsYXllckxheWVyKQogCkBAIC05OSw2ICsxMDYsOSBAQCBzdGF0aWMg
ZG91YmxlIG1lZGlhVGltZVRvQ3VycmVudFRpbWUoQ0ZUaW1lSW50ZXJ2YWwgdCkKIAogLSAodm9p
ZClhbmltYXRpb25EaWRTdGFydDooQ0FBbmltYXRpb24gKilhbmltYXRpb24KIHsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgV2ViVGhyZWFkTG9jaygpOworI2VuZGlmCiAgICAgLy8gaGFzTm9uWmVy
b0JlZ2luVGltZSBpcyBzdG9yZWQgaW4gYSBrZXkgaW4gdGhlIGFuaW1hdGlvbgogICAgIGJvb2wg
aGFzTm9uWmVyb0JlZ2luVGltZSA9IFtbYW5pbWF0aW9uIHZhbHVlRm9yS2V5OldLTm9uWmVyb0Jl
Z2luVGltZUZsYWddIGJvb2xWYWx1ZV07CiAgICAgQ0ZUaW1lSW50ZXJ2YWwgc3RhcnRUaW1lOwpA
QCAtNzI2LDYgKzczNiwxNiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0Q29udGVudHNT
Y2FsZShmbG9hdCB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAg
ICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50c1NjYWxlOnZhbHVlXTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgW21fbGF5ZXIuZ2V0KCkgc2V0UmFzdGVyaXphdGlvblNjYWxlOnZhbHVlXTsKKwor
ICAgIGlmIChtX2xheWVyVHlwZSA9PSBMYXllclR5cGVXZWJUaWxlZExheWVyKSB7CisgICAgICAg
IC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRlIGFsbCB0aGUgdGlsZXMgc28gd2Ugd29uJ3QgZW5kIHVw
IHdpdGggc3RhbGUgdGlsZXMgd2l0aCB0aGUgd3Jvbmcgc2NhbGUgaW4gdGhlIHdyb25nIHBsYWNl
LAorICAgICAgICAvLyBzZWUgPHJkYXI6Ly9wcm9ibGVtLzk0MzQ3NjU+IGZvciBtb3JlIGluZm9y
bWF0aW9uLgorICAgICAgICBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRGljdGlvbmFyeSA9
IFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBu
dW1iZXJXaXRoQm9vbDpZRVNdLCBrQ0FUaWxlZExheWVyUmVtb3ZlSW1tZWRpYXRlbHksIG5pbF07
CisgICAgICAgIFsoQ0FUaWxlZExheWVyICopbV9sYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXlJ
blJlY3Q6W21fbGF5ZXIuZ2V0KCkgYm91bmRzXSBsZXZlbE9mRGV0YWlsOjAgb3B0aW9uczpvcHRp
b25zRGljdGlvbmFyeV07CisgICAgfQorI2VuZGlmCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwogfQogCkBAIC03NzAsNiArNzkwLDU4IEBAIFRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxh
eWVyTWFjOjp0aWxlZEJhY2tpbmcoKQogICAgIHJldHVybiBbdGlsZWRCYWNraW5nTGF5ZXIgdGls
ZWRCYWNraW5nXTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK2Jvb2wgUGxhdGZvcm1DQUxheWVy
Ojppc1dlYkxheWVyKCkKK3sKKyAgICBCT09MIHJlc3VsdCA9IE5POworICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUworICAgIHJlc3VsdCA9IFttX2xheWVyLmdldCgpIGlzS2luZE9mQ2xh
c3M6W1dlYkxheWVyIHNlbGZdXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJvdW5kc09uTWFp
blRocmVhZChDR1JlY3QgYm91bmRzKQoreworICAgIENBTGF5ZXIgKmxheWVyID0gbV9sYXllci5n
ZXQoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewor
ICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICAgICAgW2xheWVyIHNldEJv
dW5kczpib3VuZHNdOworICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfSk7
Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRQb3NpdGlvbk9uTWFpblRocmVhZChDR1Bv
aW50IHBvc2l0aW9uKQoreworICAgIENBTGF5ZXIgKmxheWVyID0gbV9sYXllci5nZXQoKTsKKyAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICAgICAgW2xheWVyIHNldFBvc2l0aW9uOnBv
c2l0aW9uXTsKKyAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIH0pOworfQor
Cit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QW5jaG9yUG9pbnRPbk1haW5UaHJlYWQoRmxvYXRQ
b2ludDNEIHZhbHVlKQoreworICAgIENBTGF5ZXIgKmxheWVyID0gbV9sYXllci5nZXQoKTsKKyAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICAgICAgW2xheWVyIHNldEFuY2hvclBvaW50
OkNHUG9pbnRNYWtlKHZhbHVlLngoKSwgdmFsdWUueSgpKV07CisgICAgICAgIFtsYXllciBzZXRB
bmNob3JQb2ludFo6dmFsdWUueigpXTsKKyAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UworICAgIH0pOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0VGlsZVNpemUoY29uc3Qg
SW50U2l6ZSYgdGlsZVNpemUpCit7CisgICAgaWYgKG1fbGF5ZXJUeXBlICE9IExheWVyVHlwZVdl
YlRpbGVkTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUworICAgIFtzdGF0aWNfY2FzdDxXZWJUaWxlZExheWVyKj4obV9sYXllci5nZXQoKSkg
c2V0VGlsZVNpemU6dGlsZVNpemVdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30K
KyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQ
bGF0Zm9ybUNBTGF5ZXJNYWM6OmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50KSBjb25z
dAogewogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmNyZWF0ZShsYXllclR5cGUsIGNs
aWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvVGlsZUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9tYWMvVGlsZUNvbnRyb2xsZXIubW0KaW5kZXggNDE0MjQ5MzlkNzUyZTFkNjc0YmFiZDMyYWM5
ZThhNDdmMWQxNGE5Ni4uZDVlNmE5MWUyN2IyODhjY2MwOWMxMjM5MTBjMzVhYmEwZDcxNGQzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVD
b250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9UaWxlQ29udHJvbGxlci5tbQpAQCAtMjksNyArMjksOSBAQAogI2ltcG9ydCAiSW50UmVjdC5o
IgogI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW1wb3J0ICJSZWdpb24uaCIKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2ltcG9ydCAiTGF5ZXJQb29sLmgiCisjZW5kaWYKICNpbXBvcnQgIldl
YkxheWVyLmgiCiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2ltcG9ydCA8dXRpbGl0eT4K
QEAgLTE2Niw2ICsxNjgsMTEgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0VGlsZU5lZWRzRGlz
cGxheUluUmVjdChjb25zdCBUaWxlSW5kZXgmIHRpbGVJbmRleCwgVGlsZUkKIAogdm9pZCBUaWxl
Q29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0Zm9ybUNBTGF5ZXIq
IHBsYXRmb3JtQ0FMYXllciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JikKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKHB0aHJlYWRfbWFpbl9ucCgpKQorICAg
ICAgICBXZWJUaHJlYWRMb2NrKCk7CisjZW5kaWYKKwogICAgIGlmIChwbGF0Zm9ybUNBTGF5ZXIg
PT0gbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpKSB7CiAgICAgICAgIGRyYXdU
aWxlTWFwQ29udGVudHMoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgbV90aWxlZFNjcm9sbGlu
Z0luZGljYXRvckxheWVyLT5ib3VuZHMoKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTYyMSw3ICs2
MjgsOSBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpyZW1vdmVBbGxUaWxlcygpCiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9SZW1vdmUuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
VGlsZUluZm8gdGlsZUluZm8gPSBtX3RpbGVzLnRha2UodGlsZXNUb1JlbW92ZVtpXSk7CisjaWYg
IVBMQVRGT1JNKElPUykKICAgICAgICAgTGF5ZXJQb29sOjpzaGFyZWRQb29sKCktPmFkZExheWVy
KHRpbGVJbmZvLmxheWVyKTsKKyNlbmRpZgogICAgIH0KIH0KIApAQCAtNjM5LDcgKzY0OCw5IEBA
IHZvaWQgVGlsZUNvbnRyb2xsZXI6OnJlbW92ZUFsbFNlY29uZGFyeVRpbGVzKCkKIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1JlbW92ZS5zaXplKCk7ICsraSkgewogICAgICAg
ICBUaWxlSW5mbyB0aWxlSW5mbyA9IG1fdGlsZXMudGFrZSh0aWxlc1RvUmVtb3ZlW2ldKTsKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRkTGF5
ZXIodGlsZUluZm8ubGF5ZXIpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC02NTgsNyArNjY5LDkg
QEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6cmVtb3ZlVGlsZXNJbkNvaG9ydChUaWxlQ29ob3J0IGNv
aG9ydCkKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1JlbW92ZS5zaXplKCk7
ICsraSkgewogICAgICAgICBUaWxlSW5mbyB0aWxlSW5mbyA9IG1fdGlsZXMudGFrZSh0aWxlc1Rv
UmVtb3ZlW2ldKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBMYXllclBvb2w6OnNoYXJl
ZFBvb2woKS0+YWRkTGF5ZXIodGlsZUluZm8ubGF5ZXIpOworI2VuZGlmCiAgICAgfQogfQogCkBA
IC03ODcsNyArODAwLDkgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6cmV2YWxpZGF0ZVRpbGVzKFRp
bGVWYWxpZGF0aW9uUG9saWN5RmxhZ3MgZm9yZWdyb3VuZFZhbGlkYXQKIAogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMCwgc2l6ZSA9IHRpbGVzVG9SZW1vdmUuc2l6ZSgpOyBpIDwgc2l6ZTsgKytp
KSB7CiAgICAgICAgICAgICBUaWxlSW5mbyB0aWxlSW5mbyA9IG1fdGlsZXMudGFrZSh0aWxlc1Rv
UmVtb3ZlW2ldKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgTGF5ZXJQb29sOjpz
aGFyZWRQb29sKCktPmFkZExheWVyKHRpbGVJbmZvLmxheWVyKTsKKyNlbmRpZgogICAgICAgICB9
CiAgICAgfQogCkBAIC0xMDYxLDcgKzEwNzYsMTEgQEAgaW50IFRpbGVDb250cm9sbGVyOjpyaWdo
dE1hcmdpbldpZHRoKCkgY29uc3QKIAogUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gVGlsZUNvbnRy
b2xsZXI6OmNyZWF0ZVRpbGVMYXllcihjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKIHsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbGF5ZXI7CisjZWxzZQog
ICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGxheWVyID0gTGF5ZXJQb29sOjpzaGFyZWRQb29s
KCktPnRha2VMYXllcldpdGhTaXplKHRpbGVSZWN0LnNpemUoKSk7CisjZW5kaWYKIAogICAgIGlm
IChsYXllcikgewogICAgICAgICBtX3RpbGVSZXBhaW50Q291bnRzLnJlbW92ZShsYXllci5nZXQo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm9IYXJmYnV6ek5HLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCmluZGV4IDhkNTAwZjRhNTUwNTBjMDUwYjEz
OWNhZjA2Y2Y0NjE0YjcwMWM3ZmIuLjBjOTQwYzVkNjljN2Q5Mzc0YzJkOTAwODMxZjQzOThlMTA1
NDgxZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCkBAIC0zNywxNCArMzcsMTggQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCwgaW50KSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50LCBpbnQpIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZm
ZXI7CiAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7Ci0gICAgaWYgKHNoYXBl
ci5zaGFwZSgmZ2x5cGhCdWZmZXIpKQotICAgICAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4dCwg
cnVuLCBnbHlwaEJ1ZmZlciwgcG9pbnQpOwotICAgIGVsc2UKLSAgICAgICAgTE9HX0VSUk9SKCJT
aGFwZXIgY291bGRuJ3Qgc2hhcGUgZ2x5cGhCdWZmZXIuIik7CisgICAgaWYgKHNoYXBlci5zaGFw
ZSgmZ2x5cGhCdWZmZXIpKSB7CisgICAgICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludCA9IHBvaW50
OworICAgICAgICBmbG9hdCBzdGFydFggPSBzdGFydFBvaW50LngoKTsKKyAgICAgICAgZHJhd0ds
eXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQpOworICAgICAg
ICByZXR1cm4gc3RhcnRQb2ludC54KCkgLSBzdGFydFg7CisgICAgfQorICAgIExPR19FUlJPUigi
U2hhcGVyIGNvdWxkbid0IHNoYXBlIGdseXBoQnVmZmVyLiIpOworICAgIHJldHVybiAwOwogfQog
CiB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250
ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21p
Y1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAv
KiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCmluZGV4IDM2ZTlmMmUwNDE2
MWVmMGMxM2M2NzQ1NGY4ZmIwY2QyMTljYjU4MWUuLjFlNGMwMTM1OTM1MjNlYmU2NDFiNzk2NDk2
MzI2YTQyMTViMDA0YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCkBAIC0zMiw3ICszMiwxMSBAQAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1
ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIKKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1
ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNp
bmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0UHJpdmF0ZS5oPgorI2VuZGlmCiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNTIsNiArNTYsMTIg
QEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKIAogICAgIG1fb3Jp
ZW50YXRpb24gPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKIAorI2lmIFBMQVRGT1JNKElPUykK
KyAgICBtX2ZyYW1lQnl0ZXMgPSAwOworICAgIG1fc2NhbGUgPSAxOworICAgIG1faGF2ZUluZm8g
PSBmYWxzZTsKKyNlbmRpZgorCiAgICAgaWYgKG1fZnJhbWUpIHsKICNpZiBDQUNIRV9TVUJJTUFH
RVMKICAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UobV9mcmFtZSk7CkBAIC05MCwx
MSArMTAwLDIwIEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShDR0ltYWdlUmVmIGNnSW1hZ2Us
IEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIC8vIFNldCBtX3NpemVSZXNwZWN0aW5nT3Jp
ZW50YXRpb24gdG8gYmUgdGhlIHNhbWUgYXMgbV9zaXplIHNvIGl0J3Mgbm90IDB4MC4KICAgICBt
X3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwogCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIG1fb3JpZ2luYWxTaXplID0gSW50U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICBtX29yaWdpbmFsU2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IEludFNpemUo
d2lkdGgsIGhlaWdodCk7CisjZW5kaWYKKwogICAgIG1fZnJhbWVzLmdyb3coMSk7CiAgICAgbV9m
cmFtZXNbMF0ubV9mcmFtZSA9IENHSW1hZ2VSZXRhaW4oY2dJbWFnZSk7CiAgICAgbV9mcmFtZXNb
MF0ubV9oYXNBbHBoYSA9IHRydWU7CiAgICAgbV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0
cnVlOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIG1fZnJhbWVzWzBdLm1fc2NhbGUgPSAxOwor
I2VuZGlmCisKICAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKIH0KIApAQCAtMTA4LDEwICsxMjcs
MjQgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9
IGZyYW1lQXRJbmRleCgwKTsKLSAgICAKKyNlbHNlCisgICAgLy8gTm90ZSwgY2hlY2tGb3JTb2xp
ZENvbG9yKCkgbWF5IGJlIGNhbGxlZCBmcm9tIGZyYW1lQXRJbmRleCgpLiBPbiBpT1MgZnJhbWVB
dEluZGV4KCkgZ2V0cyBwYXNzZWQgYSBzY2FsZUhpbnQKKyAgICAvLyBhcmd1bWVudCB3aGljaCBp
dCB1c2VzIHRvIHRlbGwgQ0cgdG8gY3JlYXRlIGEgc2NhbGVkIGRvd24gaW1hZ2UuIFNpbmNlIHdl
IGRvbid0IGtub3cgdGhlIHNjYWxlSGludCBoZXJlLCBpZgorICAgIC8vIHdlIGNhbGwgZnJhbWVB
dEluZGV4KCkgYWdhaW4sIHdlIHdvdWxkIHBhc3MgaXQgdGhlIGRlZmF1bHQgc2NhbGUgb2YgMSBh
bmQgd291bGQgZW5kIHVwIHJlY3JlYXRpbmcgdGhlIGltYWdlLgorICAgIC8vIFNvIHdlIGRvIGEg
cXVpY2sgY2hlY2sgYW5kIGNhbGwgZnJhbWVBdEluZGV4KDApIG9ubHkgaWYgd2UgaGF2ZW4ndCB5
ZXQgY3JlYXRlZCBhbiBpbWFnZS4KKyAgICBDR0ltYWdlUmVmIGltYWdlID0gbnVsbHB0cjsKKyAg
ICBpZiAobV9mcmFtZXMuc2l6ZSgpKQorICAgICAgICBpbWFnZSA9IG1fZnJhbWVzWzBdLm1fZnJh
bWU7CisKKyAgICBpZiAoIWltYWdlKQorICAgICAgICBpbWFnZSA9IGZyYW1lQXRJbmRleCgwKTsK
KyNlbmRpZgorCiAgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgY2hlY2sgZm9yIHNvbGlkIGNvbG9y
IGluIHRoZSBpbXBvcnRhbnQgc3BlY2lhbCBjYXNlIG9mIGEgMXgxIGltYWdlLgogICAgIGlmIChp
bWFnZSAmJiBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpID09IDEgJiYgQ0dJbWFnZUdldEhlaWdodChp
bWFnZSkgPT0gMSkgeworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIHVuc2lnbmVkIGNoYXIg
cGl4ZWxbNF07IC8vIFJHQkEKICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gYm1hcCA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4
ZWwpLCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksCiAgICAgICAgICAgICBrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZykpOwpAQCAtMTI0LDYg
KzE1NywyMyBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQogICAgICAg
ICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoMCwgMCwgMCwgMCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIG1fc29saWRDb2xvciA9IENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10s
IHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBp
eGVsWzNdKTsKKyNlbHNlCisgICAgICAgIC8vIEZJWE1FOiBDYW4gd2Ugc2hhcmUgbW9yZSBjb2Rl
IHdpdGggdGhlIE1hYyBwb3J0PyBGb3JtZXJseSB0aGUgTWFjIHBvcnQgY3JlYXRlZCBhIGZsb2F0
aW5nIHBvaW50IGJpdG1hcCBjb250ZXh0LAorICAgICAgICAvLyBidXQgc3VjaCBhIGNvbnRleHQg
d2Fzbid0IHN1cHBvcnQgb24gaU9TIChyZGFyOi8vcHJvYmxlbS81MTA2NTE0KS4gU28sIG9uIGlP
UyB3ZSBjcmVhdGVkIGFuIGludGVncmFsIGJpdG1hcAorICAgICAgICAvLyBjb250ZXh0LiBTaW5j
ZSA8aHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIzOTM5PiB0aGUgTWFjIHBvcnQg
Y3JlYXRlcyBhbiBpbnRlZ3JhbCBiaXRtYXAgY29udGV4dC4KKyAgICAgICAgdW5zaWduZWQgY2hh
ciBwaXhlbFs0XSA9IHswLCAwLCAwLCAwfTsgLy8gUkdCQQorICAgICAgICBSZXRhaW5QdHI8Q0dD
b250ZXh0UmVmPiBiaXRtYXAgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwg
MSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLAorICAgICAg
ICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIGlmICghYml0
bWFwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBHcmFwaGljc0NvbnRleHQoYml0bWFw
LmdldCgpKS5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7CisgICAgICAgIENH
UmVjdCBkZXN0aW5hdGlvblJlY3QgPSB7IHswLCAwfSwgezEsIDF9IH07CisgICAgICAgIENHQ29u
dGV4dERyYXdJbWFnZShiaXRtYXAuZ2V0KCksIGRlc3RpbmF0aW9uUmVjdCwgaW1hZ2UpOworICAg
ICAgICBpZiAoIXBpeGVsWzNdKQorICAgICAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoMCwg
MCwgMCwgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc29saWRDb2xvciA9IENvbG9y
KHN0YXRpY19jYXN0PGludD4ocGl4ZWxbMF0pLCBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsWzFdKSwg
c3RhdGljX2Nhc3Q8aW50PihwaXhlbFsyXSksIHN0YXRpY19jYXN0PGludD4ocGl4ZWxbM10pKTsK
KyNlbmRpZgogICAgICAgICBtX2lzU29saWRDb2xvciA9IHRydWU7CiAgICAgfQogfQpAQCAtMTYy
LDkgKzIxMiwyMSBAQCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gQml0bWFwSW1hZ2U6OmdldENHSW1h
Z2VBcnJheSgpCiAKIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwg
QmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0
aW9uKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgc3RhcnRBbmltYXRpb24oKTsKIAogICAg
IENHSW1hZ2VSZWYgaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworI2Vsc2UK
KyAgICBzdGFydEFuaW1hdGlvbihmYWxzZSk7CisKKyAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0
aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250
ZXh0R2V0Q1RNKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgUmV0YWluUHRyPENHSW1h
Z2VSZWY+IGltYWdlOworICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJh
d2luZyBpbnRvIFBERiBjb250ZXh0cy4KKyAgICBpZiAoQ0dDb250ZXh0R2V0VHlwZShjdHh0LT5w
bGF0Zm9ybUNvbnRleHQoKSkgPT0ga0NHQ29udGV4dFR5cGVQREYpCisgICAgICAgIGltYWdlID0g
YWRvcHRDRihjb3B5VW5zY2FsZWRGcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpKTsKKyAgICBl
bHNlCisgICAgICAgIGltYWdlID0gZnJhbWVBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdGQ6Om1p
bjxmbG9hdD4oMS4wZiwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53
aWR0aCAgLyBzcmNSZWN0LndpZHRoKCksIHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUu
aGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkpKTsKKyNlbmRpZgogICAgIGlmICghaW1hZ2UpIC8v
IElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICBy
ZXR1cm47CiAgICAgCkBAIC0xNzMsMTggKzIzNSw0MSBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RgogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGZsb2F0
IHNjYWxlID0gbV9mcmFtZXNbbV9jdXJyZW50RnJhbWVdLm1fc2NhbGU7CisjZW5kaWYKICAgICBG
bG9hdFNpemUgc2VsZlNpemUgPSBjdXJyZW50RnJhbWVTaXplKCk7CiAgICAgSW1hZ2VPcmllbnRh
dGlvbiBvcmllbnRhdGlvbjsKIAogICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQogICAgICAgICBvcmllbnRhdGlv
biA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsKIAorI2lmIFBMQVRG
T1JNKElPUykKKyAgICBjdHh0LT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIHNlbGZTaXpl
LCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBzY2FsZSwgY29tcG9zaXRlT3As
IGJsZW5kTW9kZSwgb3JpZW50YXRpb24pOworI2Vsc2UKICAgICBjdHh0LT5kcmF3TmF0aXZlSW1h
Z2UoaW1hZ2UsIHNlbGZTaXplLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBj
b21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbik7CisjZW5kaWYKIAogICAgIGlmIChp
bWFnZU9ic2VydmVyKCkpCiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsK
IH0KIAorI2lmIFBMQVRGT1JNKElPUykKK1Bhc3NOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6
Y29weVVuc2NhbGVkRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXgg
Pj0gZnJhbWVDb3VudCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChpbmRl
eCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKQorICAgICAg
ICBjYWNoZUZyYW1lKGluZGV4LCAxKTsKKworICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9zY2Fs
ZSA9PSAxICYmICFtX3NvdXJjZS5pc1N1YnNhbXBsZWQoKSkKKyAgICAgICAgcmV0dXJuIENHSW1h
Z2VSZXRhaW4obV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUpOworCisgICAgcmV0dXJuIG1fc291cmNl
LmNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCk7Cit9CisjZW5kaWYKKwogfQogCiAjZW5kaWYgLy8g
VVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Q29sb3JDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNH
LmNwcAppbmRleCBkNzRiNGI0NzBjNWI0OTZjZjMwNmU2MTUxMDNiOGEwODFkMmIwMGJiLi45MjM2
NmUyYWJmY2VlYzQ4MTMzOTNlNDdiNTA3MGY2MTk5YmQzMDEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcApAQCAtMzEsMTAgKzMxLDM4IEBA
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpZiAhUExBVEZPUk0oSU9TKQogI2lu
Y2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UK
KyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb2xvclRyYW5zZm9ybS5oPgorI2luY2x1ZGUgPENv
cmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYg
UExBVEZPUk0oSU9TKQorQ0dDb2xvclJlZiBjcmVhdGVDR0NvbG9yV2l0aERldmljZVdoaXRlKENH
RmxvYXQgd2hpdGUsIENHRmxvYXQgYWxwaGEpCit7CisgICAgc3RhdGljIENHQ29sb3JTcGFjZVJl
ZiBncmF5U3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VHcmF5KCk7CisgICAgY29uc3Qg
Q0dGbG9hdCBjb21wb25lbnRzW10gPSB7IHdoaXRlLCBhbHBoYSB9OworICAgIHJldHVybiBDR0Nv
bG9yQ3JlYXRlKGdyYXlTcGFjZSwgY29tcG9uZW50cyk7Cit9CisKK3N0YXRpYyBDR0NvbG9yUmVm
IGNyZWF0ZUNHQ29sb3JXaXRoRGV2aWNlUkdCQShDR0NvbG9yUmVmIHNvdXJjZUNvbG9yKQorewor
ICAgIGlmICghc291cmNlQ29sb3IgfHwgQ0ZFcXVhbChDR0NvbG9yR2V0Q29sb3JTcGFjZShzb3Vy
Y2VDb2xvciksIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKSkpCisgICAgICAgIHJldHVybiBDR0Nv
bG9yUmV0YWluKHNvdXJjZUNvbG9yKTsKKworICAgIFJldGFpblB0cjxDR0NvbG9yVHJhbnNmb3Jt
UmVmPiBjb2xvclRyYW5zZm9ybSA9IGFkb3B0Q0YoQ0dDb2xvclRyYW5zZm9ybUNyZWF0ZShkZXZp
Y2VSR0JDb2xvclNwYWNlUmVmKCksIG51bGxwdHIpKTsKKyAgICBpZiAoIWNvbG9yVHJhbnNmb3Jt
KQorICAgICAgICByZXR1cm4gQ0dDb2xvclJldGFpbihzb3VyY2VDb2xvcik7CisKKyAgICAvLyBD
R0NvbG9yVHJhbnNmb3JtQ29udmVydENvbG9yKCkgcmV0dXJucyBhICsxIHJldGFpbmVkIG9iamVj
dC4KKyAgICByZXR1cm4gQ0dDb2xvclRyYW5zZm9ybUNvbnZlcnRDb2xvcihjb2xvclRyYW5zZm9y
bS5nZXQoKSwgc291cmNlQ29sb3IsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOworfQorI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykKKwogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCiB7
CiAgICAgaWYgKCFjb2xvcikgewpAQCAtNDMsOCArNzEsMTcgQEAgQ29sb3I6OkNvbG9yKENHQ29s
b3JSZWYgY29sb3IpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogICAgIHNpemVfdCBudW1Db21wb25lbnRzID0gQ0dDb2xvckdldE51bWJlck9mQ29tcG9uZW50
cyhjb2xvcik7CiAgICAgY29uc3QgQ0dGbG9hdCogY29tcG9uZW50cyA9IENHQ29sb3JHZXRDb21w
b25lbnRzKGNvbG9yKTsKKyNlbHNlCisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvcnJlY3Rl
ZENvbG9yID0gYWRvcHRDRihjcmVhdGVDR0NvbG9yV2l0aERldmljZVJHQkEoY29sb3IpKTsKKyAg
ICBpZiAoIWNvcnJlY3RlZENvbG9yKQorICAgICAgICBjb3JyZWN0ZWRDb2xvciA9IGNvbG9yOwor
CisgICAgc2l6ZV90IG51bUNvbXBvbmVudHMgPSBDR0NvbG9yR2V0TnVtYmVyT2ZDb21wb25lbnRz
KGNvcnJlY3RlZENvbG9yLmdldCgpKTsKKyAgICBjb25zdCBDR0Zsb2F0KiBjb21wb25lbnRzID0g
Q0dDb2xvckdldENvbXBvbmVudHMoY29ycmVjdGVkQ29sb3IuZ2V0KCkpOworI2VuZGlmIC8vICFQ
TEFURk9STShJT1MpCiAKICAgICBmbG9hdCByID0gMDsKICAgICBmbG9hdCBnID0gMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBvaW50Q0cuY3Bw
CmluZGV4IGYzN2UwN2YzMTk4ODhlMjc1YzZmNDU5MmIyOWMxNDI3YjlkNjhlNWQuLjI1MGVkNTA1
ZGZmMjliOTUwZjJhMGEzZjMxZmNiM2NlZjRhOWNjNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcApAQCAtMjksNyArMjks
MTEgQEAKIAogI2lmIFVTRShDRykKIAorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBw
bGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zs
b2F0UmVjdENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0
UmVjdENHLmNwcAppbmRleCA0ZWEwODNhZWEzZmVhNTI2NDk3ZDFiMWE4MDQ0MGRjMjZjYzVjNTMw
Li44YTBhNTNjNjFkMjY2N2ViZjRkYzBmZDlmNDQ1ZTVmM2M3ZjYyNzdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCkBAIC0y
OSw3ICsyOSwxMSBAQAogCiAjaWYgVVNFKENHKQogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNs
dWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisj
aW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvRmxvYXRTaXplQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvRmxvYXRTaXplQ0cuY3BwCmluZGV4IDE0ZTE0ZmMyYTM5OWRkMTdkYjEyNTIwMjYxNDE0OTI5
ZDM2YTlmNjAuLjRmMWUxMDhkZTM5YTBjMDU3NmZmNTBmZDNjYzY5YzVjMWI0NzE4MzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVDRy5j
cHAKQEAgLTI5LDcgKzI5LDExIEBACiAKICNpZiBVU0UoQ0cpCiAKKyNpZiAhUExBVEZPUk0oSU9T
KQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgor
I2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCmluZGV4IDQ3ZDljN2Y2MDhiYjBhZDA0NTRlOWRmZTA1
Mzc3MTkzOThhNjk4MzAuLjM4NzEwYTE3MzU4MDllYmZiY2RiYWI3MzMyM2E3ZGVhNWJkNjAxOGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50
Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50
Q0cuY3BwCkBAIC0yOCw3ICsyOCwxMSBAQAogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8
QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1
ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4
IGExOTc0NWUyOGUyNjUyMWJkZjA4NGMwZGRmY2Q5ZDY5MjIxMDEyZGUuLjNkNGQzYWY5NmEyNmU4
NDk2YzFjMjY0OTkxMTFlNjllMDFkNTI5NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTUxLDEw
ICs1MSwxNyBAQAogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1J
bnRlcmZhY2UuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR0NvbnRleHRHU3RhdGUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2Vu
ZGlmCisKKyNpZiAhUExBVEZPUk0oSU9TKQogZXh0ZXJuICJDIiB7CiAgICAgQ0dfRVhURVJOIHZv
aWQgQ0dDb250ZXh0U2V0Q1RNKENHQ29udGV4dFJlZiwgQ0dBZmZpbmVUcmFuc2Zvcm0pOwogICAg
IENHX0VYVEVSTiBDR0FmZmluZVRyYW5zZm9ybSBDR0NvbnRleHRHZXRCYXNlQ1RNKENHQ29udGV4
dFJlZik7CiB9OworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIC8vIEZJWE1FOiBUaGUgZm9s
bG93aW5nIHVzaW5nIGRlY2xhcmF0aW9uIHNob3VsZCBiZSBpbiA8d3RmL0hhc2hGdW5jdGlvbnMu
aD4uCiB1c2luZyBXVEY6OnBhaXJJbnRIYXNoOwpAQCAtODIsNiArODksOSBAQCBDR0NvbG9yU3Bh
Y2VSZWYgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpCiAKIENHQ29sb3JTcGFjZVJlZiBzUkdCQ29s
b3JTcGFjZVJlZigpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHJldHVybiBkZXZpY2VSR0JD
b2xvclNwYWNlUmVmKCk7CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogICAgIHN0YXRpYyBDR0Nv
bG9yU3BhY2VSZWYgc1JHQlNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29s
b3JTcGFjZVNSR0IpOwogI2lmIFBMQVRGT1JNKFdJTikKICAgICAvLyBPdXQtb2YtZGF0ZSBDRyBp
bnN0YWxsYXRpb25zIHdpbGwgbm90IGhvbm9yIGtDR0NvbG9yU3BhY2VTUkdCLiBUaGlzIGxvZ2lj
IGF2b2lkcwpAQCAtOTMsNyArMTAzLDE1IEBAIENHQ29sb3JTcGFjZVJlZiBzUkdCQ29sb3JTcGFj
ZVJlZigpCiAgICAgcmV0dXJuIHNSR0JTcGFjZTsKIH0KIAotI2lmIFBMQVRGT1JNKFdJTikKKyNp
ZiBQTEFURk9STShJT1MpCit2b2lkIHNldFN0cm9rZUFuZEZpbGxDb2xvcihDR0NvbnRleHRSZWYg
Y29udGV4dCwgQ0dDb2xvclJlZiBjb2xvcikKK3sKKyAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xv
cldpdGhDb2xvcihjb250ZXh0LCBjb2xvcik7CisgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0
aENvbG9yKGNvbnRleHQsIGNvbG9yKTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKKyNp
ZiBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKElPUykKIENHQ29sb3JTcGFjZVJlZiBsaW5lYXJS
R0JDb2xvclNwYWNlUmVmKCkKIHsKICAgICAvLyBGSVhNRTogV2luZG93cyBzaG91bGQgYmUgYWJs
ZSB0byB1c2UgbGluZWFyIHNSR0IsIHRoaXMgaXMgdHJhY2tlZCBieSBodHRwOi8vd2Via2l0Lm9y
Zy9iLzgwMDAwLgpAQCAtMTAxLDExICsxMTksMjAgQEAgQ0dDb2xvclNwYWNlUmVmIGxpbmVhclJH
QkNvbG9yU3BhY2VSZWYoKQogfQogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChDR0NvbnRleHRSZWYgY2dDb250ZXh0KQorI2Vs
c2UKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoQ0dDb250ZXh0UmVmIGNnQ29u
dGV4dCwgYm9vbCBzaG91bGRVc2VDb250ZXh0Q29sb3JzKQorI2VuZGlmCiB7CiAgICAgbV9kYXRh
ID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjZ0NvbnRleHQpOwogICAgIHNl
dFBhaW50aW5nRGlzYWJsZWQoIWNnQ29udGV4dCk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBp
ZiAoY2dDb250ZXh0KSB7CisjZWxzZQorICAgIG1fc3RhdGUuc2hvdWxkVXNlQ29udGV4dENvbG9y
cyA9IHNob3VsZFVzZUNvbnRleHRDb2xvcnM7CisgICAgaWYgKGNnQ29udGV4dCAmJiBzaG91bGRV
c2VDb250ZXh0Q29sb3JzKSB7CisjZW5kaWYKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250
ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgogICAgICAgICBzZXRQbGF0Zm9ybUZp
bGxDb2xvcihmaWxsQ29sb3IoKSwgZmlsbENvbG9yU3BhY2UoKSk7CiAgICAgICAgIHNldFBsYXRm
b3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlQ29sb3JTcGFjZSgpKTsKQEAgLTE0
MSwxMSArMTY4LDE5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0
ZSgpCiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5
ID0gZmFsc2U7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGZsb2F0IHNjYWxlLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikKKyNlbHNlCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdl
KFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUg
YmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQorI2VuZGlmCiB7CiAgICAg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKGltYWdlUHRyKTsKIAogICAgIGZsb2F0IGN1cnJI
ZWlnaHQgPSBvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpID8gQ0dJbWFnZUdldFdpZHRo
KGltYWdlLmdldCgpKSA6IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpOworI2lmIFBMQVRG
T1JNKElPUykKKyAgICAvLyBVbmFwcGx5IHRoZSBzY2FsaW5nIHNpbmNlIHdlIGFyZSBnZXR0aW5n
IHRoaXMgZnJvbSBhIHNjYWxlZCBiaXRtYXAuCisgICAgY3VyckhlaWdodCAvPSBzY2FsZTsKKyNl
bmRpZgogCiAgICAgaWYgKGN1cnJIZWlnaHQgPD0gc3JjUmVjdC55KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE1Myw2ICsxODgsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJ
bWFnZShQYXNzTmF0aXZlSW1hZ2VQdHIgaW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2kKICAgICBDR0Nv
bnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gQW50aS1hbGlhc2lu
ZyBpcyBvbiBieSBkZWZhdWx0IG9uIHRoZSBpUGhvbmUuIE5lZWQgdG8gdHVybiBpdCBvZmYgd2hl
biBkcmF3aW5nIGltYWdlcy4KKyAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4
dCwgZmFsc2UpOworI2VuZGlmCisKICAgICBib29sIHNob3VsZFVzZVN1YmltYWdlID0gZmFsc2U7
CiAKICAgICAvLyBJZiB0aGUgc291cmNlIHJlY3QgaXMgYSBzdWJwb3J0aW9uIG9mIHRoZSBpbWFn
ZSwgdGhlbiB3ZSBjb21wdXRlIGFuIGluZmxhdGVkIGRlc3RpbmF0aW9uIHJlY3QgdGhhdCB3aWxs
IGhvbGQgdGhlIGVudGlyZSBpbWFnZQpAQCAtMTgyLDYgKzIyMiw5IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyIGltYWdlUHRyLCBjb25z
dCBGbG9hdFNpCiAgICAgICAgICAgICBzdWJpbWFnZVJlY3Quc2V0SGVpZ2h0KGNlaWxmKHN1Ymlt
YWdlUmVjdC5oZWlnaHQoKSArIHRvcFBhZGRpbmcpKTsKICAgICAgICAgICAgIGFkanVzdGVkRGVz
dFJlY3Quc2V0SGVpZ2h0KHN1YmltYWdlUmVjdC5oZWlnaHQoKSAvIHlTY2FsZSk7CiAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgICAgICAgICBzdWJpbWFnZVJlY3Quc2NhbGUoc2NhbGUsIHNjYWxl
KTsKKyNlbmRpZgogI2lmIENBQ0hFX1NVQklNQUdFUwogICAgICAgICAgICAgaW1hZ2UgPSBzdWJp
bWFnZUNhY2hlKCkuZ2V0U3ViaW1hZ2UoaW1hZ2UuZ2V0KCksIHN1YmltYWdlUmVjdCk7CiAjZWxz
ZQpAQCAtMjA0LDYgKzI0NywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUlt
YWdlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRTaQogICAgIGlmICgh
c2hvdWxkVXNlU3ViaW1hZ2UgJiYgY3VyckhlaWdodCA8IGltYWdlU2l6ZS5oZWlnaHQoKSkKICAg
ICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQoYWRqdXN0ZWREZXN0UmVjdC5oZWlnaHQo
KSAqIGN1cnJIZWlnaHQgLyBpbWFnZVNpemUuaGVpZ2h0KCkpOwogCisjaWYgUExBVEZPUk0oSU9T
KQorICAgIC8vIEFsaWduIHRvIHBpeGVsIGJvdW5kYXJpZXMKKyAgICBhZGp1c3RlZERlc3RSZWN0
ID0gcm91bmRUb0RldmljZVBpeGVscyhhZGp1c3RlZERlc3RSZWN0KTsKKyNlbmRpZgorCiAgICAg
c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7CiAKICAgICAvLyBJ
bWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCkKQEAgLTMy
Myw4ICszNzEsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBv
aW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50JiBwb2ludDIpCiAKICAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKHNob3VsZEFudGlhbGlhcygp
KQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgZmFsc2UpOwor
ICAgIGlmIChzaG91bGRBbnRpYWxpYXMoKSkgeworICAgICAgICBib29sIHdpbGxBbnRpYWxpYXMg
PSBmYWxzZTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIC8vIEZvcmNlIGFudGlhbGlhc2lu
ZyBvbiBmb3IgbGluZSBwYXR0ZXJucyBhcyB0aGV5IGRvbid0IGxvb2sgZ29vZCB3aXRoIGl0IHR1
cm5lZCBvZmYgKDxyZGFyOi8vcHJvYmxlbS81NDU5NzcyPikuCisgICAgICAgIHdpbGxBbnRpYWxp
YXMgPSBwYXRXaWR0aDsKKyNlbmRpZgorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxp
YXMoY29udGV4dCwgd2lsbEFudGlhbGlhcyk7CisgICAgfQogCiAgICAgaWYgKHBhdFdpZHRoKSB7
CiAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CkBAIC0zODUsNiArNDM5LDM2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQx
LCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRp
YWxpYXMoY29udGV4dCwgdHJ1ZSk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0pvaW5lZExpbmVzKENHUG9pbnQgcG9pbnRzW10sIHVuc2lnbmVkIGNv
dW50LCBib29sIGFudGlhbGlhcywgQ0dMaW5lQ2FwIGxpbmVDYXApCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSB8fCAhY291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgZmxvYXQgd2lkdGggPSBDR0Nv
bnRleHRHZXRMaW5lV2lkdGgoY29udGV4dCk7CisKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNv
bnRleHQpOworICAgIAorICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBh
bnRpYWxpYXMpOworCisgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHdpZHRoIDwg
MSA/IDEgOiB3aWR0aCk7CisKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAg
CisgICAgQ0dDb250ZXh0U2V0TGluZUNhcChjb250ZXh0LCBsaW5lQ2FwKTsKKyAgICAKKyAgICBD
R0NvbnRleHRNb3ZlVG9Qb2ludChjb250ZXh0LCBwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnkpOwor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBD
R0NvbnRleHRBZGRMaW5lVG9Qb2ludChjb250ZXh0LCBwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkp
OworCisgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKKworICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUoY29udGV4dCk7Cit9CisjZW5kaWYKKwogLy8gVGhpcyBtZXRob2QgaXMgb25s
eSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKQEAgLTM5
Niw2ICs0ODAsMzEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IElu
dFJlY3QmIHJlY3QpCiAgICAgZHJhd1BhdGgocGF0aCk7CiB9CiAKKyNpZiBQTEFURk9STShJT1Mp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IENHQ29udGV4dFJlZiBjb250ZXh0KHBsYXRmb3JtQ29udGV4dCgpKTsKKworICAgIENHQ29udGV4
dFNhdmVHU3RhdGUoY29udGV4dCk7CisKKyAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBmaWxs
Q29sb3IoKSwgZmlsbENvbG9yU3BhY2UoKSk7CisgICAgc2V0Q0dTdHJva2VDb2xvcihjb250ZXh0
LCBzdHJva2VDb2xvcigpLCBzdHJva2VDb2xvclNwYWNlKCkpOworCisgICAgQ0dDb250ZXh0U2V0
TGluZVdpZHRoKGNvbnRleHQsIHN0cm9rZVRoaWNrbmVzcygpKTsKKyAgICAKKyAgICBDR0NvbnRl
eHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkRWxsaXBzZUluUmVjdChjb250
ZXh0LCByZWN0KTsKKworICAgIENHQ29udGV4dEZpbGxQYXRoKGNvbnRleHQpOworICAgIENHQ29u
dGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CisgICAgCisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShjb250ZXh0KTsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBhZGRDb252ZXhQb2x5Z29uVG9Q
YXRoKFBhdGgmIHBhdGgsIHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCog
cG9pbnRzKQogewogICAgIEFTU0VSVChudW1iZXJPZlBvaW50cyA+IDApOwpAQCAtOTAzLDcgKzEw
MTIsMTEgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJz
KCkKIAogc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zmc2V0LCBDR0Zsb2F0JiB5
T2Zmc2V0KQogewotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFVO
VVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0oeE9mZnNldCk7CisgICAgVU5V
U0VEX1BBUkFNKHlPZmZzZXQpOworI2Vsc2UKICAgICBpZiAoY29udGV4dC5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEyMzUsNiArMTM0OCw1OSBAQCBGbG9h
dFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgUm91bmRpbmdNbwogICAgIHJldHVybiBGbG9hdFJlY3Qocm91bmRlZE9yaWdpbiwg
cm91bmRlZExvd2VyUmlnaHQgLSByb3VuZGVkT3JpZ2luKTsKIH0KIAorLy8gRklYTUU6IFdlIHNo
b3VsZCBsb29rIHRvIGNvbnNvbGlkYXRlIHRoZSBpT1MgYW5kIG5vbi1pT1MgaW1wbGVtZW50YXRp
b25zIG9mCisvLyBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KCkg
YW5kIGNvbXB1dGVMaW5lQm91bmRzRm9yVGV4dCgpLgorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRp
YyBGbG9hdFJlY3QgY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChH
cmFwaGljc0NvbnRleHQmIGluaXRpYWxDb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
ZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcsIGJvb2wmIHNob3VsZEFudGlhbGlhcywgQ29sb3Im
IGNvbG9yKQoreworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gaW5pdGlhbENvbnRleHQucGxh
dGZvcm1Db250ZXh0KCk7CisgICAgQ0dQb2ludCBvcmlnaW47CisgICAgQ0dGbG9hdCB0aGlja25l
c3MgPSBzdGQ6Om1heChpbml0aWFsQ29udGV4dC5zdHJva2VUaGlja25lc3MoKSwgMC41Zik7CisK
KyAgICBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOworICAgIGlmIChwcmludGluZykKKyAgICAgICAg
b3JpZ2luID0gQ0dQb2ludE1ha2UocG9pbnQueCgpLCBwb2ludC55KCkpOworICAgIGVsc2Ugewor
ICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0ID0gQ0dDb250ZXh0R2V0VXNlclNwYWNlVG9EZXZp
Y2VTcGFjZVRyYW5zZm9ybShjb250ZXh0KTsKKyAgICAgICAgaWYgKEFmZmluZVRyYW5zZm9ybSh0
KS5wcmVzZXJ2ZXNBeGlzQWxpZ25tZW50KCkpCisgICAgICAgICAgICBzaG91bGRBbnRpYWxpYXMg
PSBmYWxzZTsKKworICAgICAgICAvLyBUaGlzIGNvZGUgYWx3YXlzIGRyYXdzIGEgbGluZSB0aGF0
IGlzIGF0IGxlYXN0IG9uZS1waXhlbCBsaW5lIGhpZ2gsCisgICAgICAgIC8vIHdoaWNoIHRlbmRz
IHRvIHZpc3VhbGx5IG92ZXJ3aGVsbSB0ZXh0IGF0IHNtYWxsIHNjYWxlcy4gVG8gY291bnRlciB0
aGlzCisgICAgICAgIC8vIGVmZmVjdCwgYW4gYWxwaGEgaXMgYXBwbGllZCB0byB0aGUgdW5kZXJs
aW5lIGNvbG9yIHdoZW4gdGV4dCBpcyBhdCBzbWFsbCBzY2FsZXMuCisKKyAgICAgICAgLy8gSnVz
dCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBh
cmUgZXF1YWwuCisgICAgICAgIENHRmxvYXQgc2NhbGUgPSB0LmIgPyBzcXJ0Zih0LmEgKiB0LmEg
KyB0LmIgKiB0LmIpIDogdC5hOworICAgICAgICBpZiAoc2NhbGUgPCAxLjApIHsKKyAgICAgICAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdCBNaW5VbmRlcmxpbmVBbHBoYSA9IDAuNGY7CisgICAgICAg
ICAgICBmbG9hdCBzaGFkZSA9IHNjYWxlID4gTWluVW5kZXJsaW5lQWxwaGEgPyBzY2FsZSA6IE1p
blVuZGVybGluZUFscGhhOworICAgICAgICAgICAgaW50IGFscGhhID0gY29sb3IuYWxwaGEoKSAq
IHNoYWRlOworICAgICAgICAgICAgY29sb3IgPSBDb2xvcihjb2xvci5yZWQoKSwgY29sb3IuZ3Jl
ZW4oKSwgY29sb3IuYmx1ZSgpLCBhbHBoYSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBEb24n
dCBvZmZzZXQgbGluZSBmcm9tIGJvdHRvbSBvZiB0ZXh0IGlmIHNjYWxlIGlzIGxlc3MgdGhhbiBP
ZmZzZXRVbmRlcmxpbmVTY2FsZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgT2Zmc2V0
VW5kZXJsaW5lU2NhbGUgPSAwLjRmOworICAgICAgICBDR0Zsb2F0IGR5ID0gc2NhbGUgPCBPZmZz
ZXRVbmRlcmxpbmVTY2FsZSA/IDAgOiAxOworCisgICAgICAgIC8vIElmIHdlJ3ZlIGluY3JlYXNl
ZCB0aGUgdGhpY2tuZXNzIG9mIHRoZSBsaW5lLCBtYWtlIHN1cmUgdG8gbW92ZSB0aGUgbG9jYXRp
b24gdG9vLgorICAgICAgICBpZiAodGhpY2tuZXNzID4gMSkKKyAgICAgICAgICAgIGR5ICs9IHJv
dW5kZih0aGlja25lc3MpIC0gMTsKKworICAgICAgICBDR1BvaW50IGRldmljZVBvaW50ID0gQ0dQ
b2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKHBvaW50LCB0KTsKKyAgICAgICAgQ0dQb2ludCBkZXZp
Y2VPcmlnaW4gPSBDR1BvaW50TWFrZShyb3VuZGYoZGV2aWNlUG9pbnQueCksIGNlaWxmKGRldmlj
ZVBvaW50LnkpICsgZHkpOworICAgICAgICBvcmlnaW4gPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFu
c2Zvcm0oZGV2aWNlT3JpZ2luLCBDR0FmZmluZVRyYW5zZm9ybUludmVydCh0KSk7CisgICAgICAg
IHRoaWNrbmVzcyAvPSBzY2FsZTsKKyAgICB9CisgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4u
eCwgb3JpZ2luLnksIHdpZHRoLCB0aGlja25lc3MpOworfQorCitGbG9hdFJlY3QgR3JhcGhpY3ND
b250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKQoreworICAgIGJvb2wgZHVtbXlCb29sOworICAg
IENvbG9yIGR1bW15Q29sb3I7CisgICAgcmV0dXJuIGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFs
aWFzaW5nTW9kZUZvclRleHQoKnRoaXMsIHBvaW50LCB3aWR0aCwgcHJpbnRpbmcsIGR1bW15Qm9v
bCwgZHVtbXlDb2xvcik7Cit9CisjZWxzZQogc3RhdGljIEZsb2F0UmVjdCBjb21wdXRlTGluZUJv
dW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nLCBib29s
JiBzaG91bGRBbnRpYWxpYXMpCiB7CiAgICAgc2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKQEAgLTEy
NzAsNiArMTQzNiw3IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91
bmRzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvCiAgICAgYm9vbCBkdW1teTsK
ICAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCgq
dGhpcywgcG9pbnQsIHdpZHRoLCBwcmludGluZywgZHVtbXkpOwogfQorI2VuZGlmCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKQogewpAQCAtMTI3OSw2ICsxNDQ2LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgZmxvYXQgd2lkdGgsIGJvb2wKICAgICBpZiAod2lkdGggPD0gMCkKICAgICAgICAgcmV0dXJu
OwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBib29sIHNob3VsZEFudGlhbGlhc0xpbmU7CiAg
ICAgRmxvYXRSZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9k
ZUZvclRleHQoKnRoaXMsIHBvaW50LCB3aWR0aCwgcHJpbnRpbmcsIHNob3VsZEFudGlhbGlhc0xp
bmUpOwogCkBAIC0xMjk3LDEwICsxNDY1LDI2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBib29sCiAK
ICAgICBpZiAocmVzdG9yZUFudGlhbGlhc01vZGUpCiAgICAgICAgIENHQ29udGV4dFNldFNob3Vs
ZEFudGlhbGlhcyhwbGF0Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7CisjZWxzZQorICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0
ZShjb250ZXh0KTsKKworICAgIENvbG9yIGNvbG9yKHN0cm9rZUNvbG9yKCkpOworICAgIAorICAg
IGJvb2wgc2hvdWxkQW50aWFsaWFzTGluZTsKKyAgICBGbG9hdFJlY3QgcmVjdCA9IGNvbXB1dGVM
aW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoKnRoaXMsIHBvaW50LCB3aWR0aCwg
cHJpbnRpbmcsIHNob3VsZEFudGlhbGlhc0xpbmUsIGNvbG9yKTsKKworICAgIGlmIChtX3N0YXRl
LnNob3VsZFVzZUNvbnRleHRDb2xvcnMpCisgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQs
IGNvbG9yLCBzdHJva2VDb2xvclNwYWNlKCkpOworICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRl
eHQsIHJlY3QpOworCisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKKyNlbmRp
ZgogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxp
bmssIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMzE5LDYgKzE1
MDMsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBs
aW5rLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKIAogICAgIENHUERGQ29udGV4dFNldFVSTEZv
clJlY3QoY29udGV4dCwgdXJsUmVmLmdldCgpLAogICAgICAgICBDR1JlY3RBcHBseUFmZmluZVRy
YW5zZm9ybShyZWN0LCBDR0NvbnRleHRHZXRDVE0oY29udGV4dCkpKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGxpbmspOworICAgIFVOVVNFRF9QQVJBTShkZXN0UmVjdCk7CisjZW5kaWYKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50
ZXJwb2xhdGlvblF1YWxpdHkgbW9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggYjEzZDEyMTM0MGJiMzExMzk4
YTY5Mjg3OTZkMzg5OWRlZGNmY2VmYy4uZTdkNmY0MzZlNGM2NzZiOGM1ZGI0OWE0ZmQ2NjE5YjQw
MDhkNzkwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTMzLDggKzMzLDEzIEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNl
cnZpY2VzLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgorI2lmICFQTEFURk9STShJT1MpCisjaW5jbHVk
ZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxJbWFnZUlPL0lt
YWdlSU8uaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAg
LTUwLDEwICs1NSwxNyBAQAogI2luY2x1ZGUgPElPU3VyZmFjZS9JT1N1cmZhY2UuaD4KICNlbmRp
ZgogCisvLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIg
cmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCisjZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9T
KQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRpYyBjb25zdCBpbnQgbWF4SU9TdXJm
YWNlRGltZW5zaW9uID0gMjA0ODsKKyNlbHNlCiBzdGF0aWMgY29uc3QgaW50IG1heElPU3VyZmFj
ZURpbWVuc2lvbiA9IDQwOTY7CisjZW5kaWYKIAogc3RhdGljIFJldGFpblB0cjxJT1N1cmZhY2VS
ZWY+IGNyZWF0ZUlPU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplKQogewpAQCAtNzAsOCArODIs
MTMgQEAgc3RhdGljIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IGNyZWF0ZUlPU3VyZmFjZShjb25z
dCBJbnRTaXplJiBzaXplKQogICAgIGlmICghYWxsb2NTaXplKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIGNvbnN0IHZvaWQgKmtleXNbNl07Ci0gICAgY29uc3Qgdm9pZCAqdmFsdWVzWzZdOwor
I2lmICFQTEFURk9STShJT1MpCisgICAgY29uc3Qgdm9pZCoga2V5c1s2XTsKKyAgICBjb25zdCB2
b2lkKiB2YWx1ZXNbNl07CisjZWxzZQorICAgIGNvbnN0IHZvaWQqIGtleXNbN107CisgICAgY29u
c3Qgdm9pZCogdmFsdWVzWzddOworI2VuZGlmCiAgICAga2V5c1swXSA9IGtJT1N1cmZhY2VXaWR0
aDsKICAgICB2YWx1ZXNbMF0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAm
d2lkdGgpOwogICAgIGtleXNbMV0gPSBrSU9TdXJmYWNlSGVpZ2h0OwpAQCAtODQsOSArMTAxLDE0
IEBAIHN0YXRpYyBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBjcmVhdGVJT1N1cmZhY2UoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKICAgICB2YWx1ZXNbNF0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1i
ZXJMb25nVHlwZSwgJmJ5dGVzUGVyUm93KTsKICAgICBrZXlzWzVdID0ga0lPU3VyZmFjZUFsbG9j
U2l6ZTsKICAgICB2YWx1ZXNbNV0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlw
ZSwgJmFsbG9jU2l6ZSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGtleXNbNl0gPSBrSU9TdXJm
YWNlQ2FjaGVNb2RlOworICAgIGludCBjYWNoZU1vZGUgPSBrSU9NYXBXcml0ZUNvbWJpbmVDYWNo
ZTsKKyAgICB2YWx1ZXNbNl0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAm
Y2FjaGVNb2RlKTsKKyNlbmRpZgogCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZGlj
dCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgNiwgJmtDRlR5
cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cykpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA2OyBpKyspCisgICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gZGljdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtl
eXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpLCAma0NGVHlwZURpY3Rpb25hcnlL
ZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKTsgKytpKQogICAg
ICAgICBDRlJlbGVhc2UodmFsdWVzW2ldKTsKIAogICAgIHJldHVybiBhZG9wdENGKElPU3VyZmFj
ZUNyZWF0ZShkaWN0LmdldCgpKSk7CkBAIC0xNjksNyArMTkxLDExIEBAIEltYWdlQnVmZmVyOjpJ
bWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4obV9kYXRhLm1fZGF0YSkgJiAzKSk7CiAKKyNpZiBVU0VfQVJHQjMy
CisgICAgICAgIG1fZGF0YS5tX2JpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OworI2Vsc2UKICAgICAgICAgbV9kYXRh
Lm1fYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKKyNlbmRpZgog
ICAgICAgICBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEu
bV9kYXRhLCBtX2RhdGEubV9iYWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5tX2JhY2tp
bmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIG1fZGF0YS5tX2J5dGVzUGVyUm93LnVuc2FmZUdldCgp
LCBtX2RhdGEubV9jb2xvclNwYWNlLCBtX2RhdGEubV9iaXRtYXBJbmZvKSk7CiAgICAgICAgIC8v
IENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KICAgICAgICAgbV9kYXRh
Lm1fZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAs
IG1fZGF0YS5tX2RhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpLCByZWxlYXNlSW1hZ2VEYXRhKSk7
CkBAIC0yNzgsNyArMzA0LDEzIEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiBkZXN0Q29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsCiAKICAgICBGbG9h
dFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKICAgICBhZGp1c3RlZFNyY1JlY3Quc2Nh
bGUobV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4
dC0+ZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2RhdGEubV9iYWNraW5nU3RvcmVTaXpl
LCBjb2xvclNwYWNlLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcCwgYmxlbmRNb2RlKTsK
KyAgICBkZXN0Q29udGV4dC0+ZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2RhdGEubV9i
YWNraW5nU3RvcmVTaXplLCBjb2xvclNwYWNlLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LAor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgMS4wZiwgLy8gRGVmYXVsdCBzY2FsZSBvZiAxLjAK
KyNlbmRpZgorICAgICAgICBvcCwKKyAgICAgICAgYmxlbmRNb2RlCisgICAgKTsKIH0KIAogdm9p
ZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCkBA
IC0zNzUsNyArNDA3LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KE11bHRpcGx5
IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBlZEFycmF5KiBzb3VyY2UsIGMKIAogc3RhdGljIGlubGlu
ZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKIHsKLSNpZiBQTEFURk9STShXSU4pCisjaWYgUExBVEZP
Uk0oSU9TKSB8fCBQTEFURk9STShXSU4pCiAgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtV
VFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7CiAjZW5kaWYKICAgICByZXR1cm4ga1VU
VHlwZUpQRUc7CkBAIC0zODMsNyArNDE1LDcgQEAgc3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBq
cGVnVVRJKCkKICAgICAKIHN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21NSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQ
TEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgcmV0dXJuIGFkb3B0Q0YoVVRUeXBl
Q3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZyhrVVRUYWdDbGFzc01JTUVUeXBlLCBtaW1l
VHlwZS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCAwKSk7CiAjZWxzZQogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7IC8vIEl0IGlzIHVuY2xlYXIgaWYgQ0ZTVFIgaXMgdGhyZWFkc2FmZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
RGF0YUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmNwcAppbmRleCBkZTRjMzg3ZTE2N2E1MTk3OGFhZjhiYWY4YzlmNTliZWI3OWE3
NTM5Li45ZmQyOGQ0NTdmY2I4MGNlNGI0YTU3MDlkZmE0YzE4OWIzMjI5YjRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuY3BwCkBAIC00OCw2ICs0OCw5IEBAIHN0cnVjdCBTY2FubGluZURhdGEgewogfTsKICNl
bmRpZgogCisvLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdC
MzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCisjZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0o
SU9TKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZm
ZXJEYXRhKGNvbnN0IEludFNpemUmKQpAQCAtNjAsNyArNjMsNyBAQCBJbWFnZUJ1ZmZlckRhdGE6
OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJikKIAogI2lmIFVTRShBQ0NFTEVSQVRFKQog
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKKyNpZiBVU0VfQVJHQjMy
IHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCiBzdGF0aWMgdm9pZCBjb252
ZXJ0U2NhbmxpbmUodm9pZCogZGF0YSwgc2l6ZV90IHRpbGVOdW1iZXIsIGJvb2wgcHJlbXVsdGlw
bHkpCiB7CiAgICAgU2NhbmxpbmVEYXRhKiBzY2FubGluZURhdGEgPSBzdGF0aWNfY2FzdDxTY2Fu
bGluZURhdGEqPihkYXRhKTsKQEAgLTEyMiwxMyArMTI1LDEzIEBAIFBhc3NSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zCiAgICAgCiAgICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKICAgICBpbnQgZGVzdHgg
PSAwOwotICAgIGludCBkZXN0dyA9IHJlY3Qud2lkdGgoKTsKKyAgICBDaGVja2VkPGludD4gZGVz
dHcgPSByZWN0LndpZHRoKCk7CiAgICAgaWYgKG9yaWdpbnggPCAwKSB7CiAgICAgICAgIGRlc3R3
ICs9IG9yaWdpbng7CiAgICAgICAgIGRlc3R4ID0gLW9yaWdpbng7CiAgICAgICAgIG9yaWdpbngg
PSAwOwogICAgIH0KLSAgICBkZXN0dyA9IHN0ZDo6bWluPGludD4oZGVzdHcsIGNlaWxmKHNpemUu
d2lkdGgoKSAvIHJlc29sdXRpb25TY2FsZSkgLSBvcmlnaW54KTsKKyAgICBkZXN0dyA9IHN0ZDo6
bWluPGludD4oZGVzdHcudW5zYWZlR2V0KCksIGNlaWxmKHNpemUud2lkdGgoKSAvIHJlc29sdXRp
b25TY2FsZSkgLSBvcmlnaW54KTsKICAgICBvcmlnaW54ICo9IHJlc29sdXRpb25TY2FsZTsKICAg
ICBpZiAoZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSkKICAgICAgICAgZW5keCA9IHNp
emUud2lkdGgoKTsKQEAgLTEzNiwxMyArMTM5LDEzIEBAIFBhc3NSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25z
CiAgICAgCiAgICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKICAgICBpbnQgZGVzdHkgPSAwOwot
ICAgIGludCBkZXN0aCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0g
cmVjdC5oZWlnaHQoKTsKICAgICBpZiAob3JpZ2lueSA8IDApIHsKICAgICAgICAgZGVzdGggKz0g
b3JpZ2lueTsKICAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKICAgICAgICAgb3JpZ2lueSA9IDA7
CiAgICAgfQotICAgIGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0aCwgY2VpbGYoc2l6ZS5oZWln
aHQoKSAvIHJlc29sdXRpb25TY2FsZSkgLSBvcmlnaW55KTsKKyAgICBkZXN0aCA9IHN0ZDo6bWlu
PGludD4oZGVzdGgudW5zYWZlR2V0KCksIGNlaWxmKHNpemUuaGVpZ2h0KCkgLyByZXNvbHV0aW9u
U2NhbGUpIC0gb3JpZ2lueSk7CiAgICAgb3JpZ2lueSAqPSByZXNvbHV0aW9uU2NhbGU7CiAgICAg
aWYgKGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQogICAgICAgICBlbmR5ID0gc2l6
ZS5oZWlnaHQoKTsKQEAgLTE2Myw2ICsxNjYsMTYgQEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnMK
ICAgICAgICAgCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCiAgICAgICAgIGlmICh1bm11bHRpcGxpZWQp
IHsKKyNpZiBVU0VfQVJHQjMyCisgICAgICAgICAgICBTY2FubGluZURhdGEgc2NhbmxpbmVEYXRh
OworICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNjYW5saW5lV2lkdGggPSBkZXN0dy51bnNhZmVH
ZXQoKTsKKyAgICAgICAgICAgIHNjYW5saW5lRGF0YS5zcmNEYXRhID0gc3JjUm93czsKKyAgICAg
ICAgICAgIHNjYW5saW5lRGF0YS5zcmNSb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OworICAgICAg
ICAgICAgc2NhbmxpbmVEYXRhLmRlc3REYXRhID0gZGVzdFJvd3M7CisgICAgICAgICAgICBzY2Fu
bGluZURhdGEuZGVzdFJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OworCisgICAgICAgICAgICBk
aXNwYXRjaF9hcHBseV9mKGRlc3RoLnVuc2FmZUdldCgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1
ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCAmc2NhbmxpbmVEYXRhLCB1
bnByZW11bHRpdHBseVNjYW5saW5lKTsKKyNlbHNlCiAgICAgICAgICAgICB2SW1hZ2VfQnVmZmVy
IHNyYzsKICAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7CiAgICAg
ICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKQEAgLTE3MCw4ICsxODMsOCBA
QCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29ucwogICAgICAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dz
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRzdDsKLSAgICAgICAg
ICAgIGRzdC5oZWlnaHQgPSBkZXN0aDsKLSAgICAgICAgICAgIGRzdC53aWR0aCA9IGRlc3R3Owor
ICAgICAgICAgICAgZHN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOworICAgICAgICAgICAg
ZHN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7CiAgICAgICAgICAgICBkc3Qucm93Qnl0ZXMg
PSBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgICAgICAgICBkc3QuZGF0YSA9IGRlc3RSb3dzOwogCkBA
IC0xODQsMTMgKzE5NywxNCBAQCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1
ZmZlckRhdGE6OmdldERhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29ucwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAm
ZHN0LCBrdkltYWdlTm9GbGFncyk7CisjZW5kaWYKICAgICAgICAgICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOwogICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgaWYgKHJlc29sdXRpb25TY2Fs
ZSAhPSAxKSB7CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBzb3VyY2VDb250
ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoc3JjUm93cywgd2lkdGgudW5zYWZl
R2V0KCksIGhlaWdodC51bnNhZmVHZXQoKSwgOCwgc3JjQnl0ZXNQZXJSb3csIG1fY29sb3JTcGFj
ZSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CiAgICAgICAgICAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gc291cmNlSW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0
ZUltYWdlKHNvdXJjZUNvbnRleHQuZ2V0KCkpKTsKLSAgICAgICAgICAgIFJldGFpblB0cjxDR0Nv
bnRleHRSZWY+IGRlc3RpbmF0aW9uQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKGRlc3RSb3dzLCBkZXN0dywgZGVzdGgsIDgsIGRlc3RCeXRlc1BlclJvdywgbV9jb2xvclNw
YWNlLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgICAgIFJldGFp
blB0cjxDR0NvbnRleHRSZWY+IGRlc3RpbmF0aW9uQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlKGRlc3RSb3dzLCBkZXN0dy51bnNhZmVHZXQoKSwgZGVzdGgudW5zYWZlR2V0
KCksIDgsIGRlc3RCeXRlc1BlclJvdywgbV9jb2xvclNwYWNlLCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QpKTsKICAgICAgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShkZXN0aW5h
dGlvbkNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwogICAgICAgICAgICAgQ0dDb250
ZXh0RHJhd0ltYWdlKGRlc3RpbmF0aW9uQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCB3
aWR0aC51bnNhZmVHZXQoKSAvIHJlc29sdXRpb25TY2FsZSwgaGVpZ2h0LnVuc2FmZUdldCgpIC8g
cmVzb2x1dGlvblNjYWxlKSwgc291cmNlSW1hZ2UuZ2V0KCkpOyAvLyBGSVhNRTogQWRkIHN1YnBp
eGVsIHRyYW5zbGF0aW9uLgogICAgICAgICAgICAgaWYgKCF1bm11bHRpcGxpZWQpCkBAIC0yMDgs
NiArMjIyLDIwIEBAIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0
YTo6Z2V0RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGludCBiYXNleCA9IHggKiA0OwogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOworI2lmIFVTRV9BUkdCMzIKKyAgICAgICAg
ICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1
ZmZlcnMgb2YgQVJHQjMyCisgICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAq
IDI1NSkgLyBhbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
MV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBh
bHBoYTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07CisgICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyNlbHNlCiAgICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFz
ZXhdICogMjU1KSAvIGFscGhhOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7CkBAIC0yMTUsMTQg
KzI0MywyNSBAQCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6
OmdldERhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29ucwogICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwogICAgICAgICAgICAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihk
ZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dz
ICsgYmFzZXgpWzBdOworI2VuZGlmCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CiAgICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0g
ZGVzdEJ5dGVzUGVyUm93OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgeworI2lm
IFVTRV9BUkdCMzIKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVu
c2FmZUdldCgpOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7
CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAy
XTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFz
ZXggKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jv
d3NbYmFzZXhdOworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3Jj
Um93c1tiYXNleCArIDNdOworICAgICAgICAgICAgICAgIH0KKyNlbHNlCiAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCAod2lkdGggKiA0KS51bnNhZmVHZXQoKTsgeCArPSA0KQog
ICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3Mg
KyB4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgeClbMF07Cisj
ZW5kaWYKICAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwogICAgICAg
ICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKICAgICAgICAgICAgIH0KQEAg
LTI0Miw4ICsyODEsOCBAQCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZl
ckRhdGE6OmdldERhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29ucwogICAgICAgICBzcmMuZGF0
YSA9IHNyY1Jvd3M7CiAKICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0
LmhlaWdodCA9IGRlc3RoOwotICAgICAgICBkZXN0LndpZHRoID0gZGVzdHc7CisgICAgICAgIGRl
c3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7CisgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0
dy51bnNhZmVHZXQoKTsKICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsK
ICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7CiAKQEAgLTI2MywxMyArMzAyLDEzIEBAIFBh
c3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShjb25z
dCBJbnRSZWN0JiByZWN0LCBjb25zCiAKICAgICAgICAgaWYgKHVubXVsdGlwbGllZCkgewogICAg
ICAgICAgICAgU2NhbmxpbmVEYXRhIHNjYW5saW5lRGF0YTsKLSAgICAgICAgICAgIHNjYW5saW5l
RGF0YS5zY2FubGluZVdpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7CisgICAgICAgICAgICBzY2Fu
bGluZURhdGEuc2NhbmxpbmVXaWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwogICAgICAgICAgICAg
c2NhbmxpbmVEYXRhLnNyY0RhdGEgPSBzcmNSb3dzOwogICAgICAgICAgICAgc2NhbmxpbmVEYXRh
LnNyY1Jvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7CiAgICAgICAgICAgICBzY2FubGluZURhdGEu
ZGVzdERhdGEgPSBkZXN0Um93czsKICAgICAgICAgICAgIHNjYW5saW5lRGF0YS5kZXN0Um93Qnl0
ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7CiAKLSAgICAgICAgICAgIGRpc3BhdGNoX2FwcGx5X2YoaGVp
Z2h0LnVuc2FmZUdldCgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVF
X1BSSU9SSVRZX0RFRkFVTFQsIDApLCAmc2NhbmxpbmVEYXRhLCB1bnByZW11bHRpdHBseVNjYW5s
aW5lKTsKKyAgICAgICAgICAgIGRpc3BhdGNoX2FwcGx5X2YoZGVzdGgudW5zYWZlR2V0KCksIGRp
c3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwg
MCksICZzY2FubGluZURhdGEsIHVucHJlbXVsdGl0cGx5U2NhbmxpbmUpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIEJHUkEgdG8gUkdC
QS4KICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07CkBA
IC0yNzksNyArMzE4LDcgQEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXJEYXRhOjpnZXREYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnMKICAgICAgICAgaWYgKHJl
c29sdXRpb25TY2FsZSAhPSAxKSB7CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVm
PiBzb3VyY2VDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoc3JjUm93cywg
d2lkdGgudW5zYWZlR2V0KCksIGhlaWdodC51bnNhZmVHZXQoKSwgOCwgc3JjQnl0ZXNQZXJSb3cs
IG1fY29sb3JTcGFjZSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CiAgICAgICAg
ICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc291cmNlSW1hZ2UgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZUltYWdlKHNvdXJjZUNvbnRleHQuZ2V0KCkpKTsKLSAgICAgICAgICAgIFJl
dGFpblB0cjxDR0NvbnRleHRSZWY+IGRlc3RpbmF0aW9uQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlKGRlc3RSb3dzLCBkZXN0dywgZGVzdGgsIDgsIGRlc3RCeXRlc1BlclJv
dywgbV9jb2xvclNwYWNlLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAg
ICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGRlc3RpbmF0aW9uQ29udGV4dCA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRlc3RSb3dzLCBkZXN0dy51bnNhZmVHZXQoKSwgZGVz
dGgudW5zYWZlR2V0KCksIDgsIGRlc3RCeXRlc1BlclJvdywgbV9jb2xvclNwYWNlLCBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKICAgICAgICAgICAgIENHQ29udGV4dFNldEJsZW5k
TW9kZShkZXN0aW5hdGlvbkNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwogICAgICAg
ICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRlc3RpbmF0aW9uQ29udGV4dC5nZXQoKSwgQ0dSZWN0
TWFrZSgwLCAwLCB3aWR0aC51bnNhZmVHZXQoKSAvIHJlc29sdXRpb25TY2FsZSwgaGVpZ2h0LnVu
c2FmZUdldCgpIC8gcmVzb2x1dGlvblNjYWxlKSwgc291cmNlSW1hZ2UuZ2V0KCkpOyAvLyBGSVhN
RTogQWRkIHN1YnBpeGVsIHRyYW5zbGF0aW9uLgogCkBAIC0zOTAsNiArNDI5LDE3IEBAIHZvaWQg
SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKFVpbnQ4Q2xhbXBlZEFycmF5KiYgc291cmNlLCBjb25z
dCBJbnRTaXplJiBzb3VyY2VTCiAgICAgICAgIAogI2lmICBVU0UoQUNDRUxFUkFURSkKICAgICAg
ICAgaWYgKHVubXVsdGlwbGllZCkgeworI2lmIFVTRV9BUkdCMzIKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBBcmUgc2NhbmxpbmVEYXRhLnNjYW5saW5lV2lkdGggYW5kIHRoZSBudW1iZXIgb2YgaXRl
cmF0aW9ucyBzcGVjaWZpZWQgdG8gZGlzcGF0Y2hfYXBwbHlfZigpIGNvcnJlY3Q/CisgICAgICAg
ICAgICBTY2FubGluZURhdGEgc2NhbmxpbmVEYXRhOworICAgICAgICAgICAgc2NhbmxpbmVEYXRh
LnNjYW5saW5lV2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKKyAgICAgICAgICAgIHNjYW5saW5l
RGF0YS5zcmNEYXRhID0gc3JjUm93czsKKyAgICAgICAgICAgIHNjYW5saW5lRGF0YS5zcmNSb3dC
eXRlcyA9IHNyY0J5dGVzUGVyUm93OworICAgICAgICAgICAgc2NhbmxpbmVEYXRhLmRlc3REYXRh
ID0gZGVzdFJvd3M7CisgICAgICAgICAgICBzY2FubGluZURhdGEuZGVzdFJvd0J5dGVzID0gZGVz
dEJ5dGVzUGVyUm93OworCisgICAgICAgICAgICBkaXNwYXRjaF9hcHBseV9mKGhlaWdodC51bnNh
ZmVHZXQoKSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklU
WV9ERUZBVUxULCAwKSwgJnNjYW5saW5lRGF0YSwgcHJlbXVsdGl0cGx5U2NhbmxpbmUpOworI2Vs
c2UKICAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwogICAgICAgICAgICAgc3JjLmhlaWdo
dCA9IGhlaWdodC51bnNhZmVHZXQoKTsKICAgICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVu
c2FmZUdldCgpOwpAQCAtNDExLDYgKzQ2MSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXRE
YXRhKFVpbnQ4Q2xhbXBlZEFycmF5KiYgc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTCiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZHN0LCBrdkltYWdlTm9GbGFncyk7CisjZW5kaWYKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogI2VuZGlmCkBAIC00MzMsNiArNDg0LDIwIEBAIHZvaWQgSW1hZ2VCdWZm
ZXJEYXRhOjpwdXREYXRhKFVpbnQ4Q2xhbXBlZEFycmF5KiYgc291cmNlLCBjb25zdCBJbnRTaXpl
JiBzb3VyY2VTCiAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdl
dCgpOyB4KyspIHsKICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOworI2lmIFVT
RV9BUkdCMzIKKyAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3
ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKKyAgICAgICAgICAgICAgICBpZiAodW5tdWx0
aXBsaWVkICYmIGFscGhhICE9IDI1NSkgeworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dz
W2Jhc2V4ICsgMl07CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBz
cmNSb3dzW2Jhc2V4ICsgMV07CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
Ml0gPSBzcmNSb3dzW2Jhc2V4XTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAzXSA9IGFscGhhOworICAgICAgICAgICAgICAgIH0KKyNlbHNlCiAgICAgICAgICAgICAgICAg
aWYgKHVubXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAyNTQpIC8gMjU1Owog
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXgg
KyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKQEAgLTQ0MCw2ICs1MDUsNyBAQCB2b2lkIEltYWdl
QnVmZmVyRGF0YTo6cHV0RGF0YShVaW50OENsYW1wZWRBcnJheSomIHNvdXJjZSwgY29uc3QgSW50
U2l6ZSYgc291cmNlUwogICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0g
YWxwaGE7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOworI2VuZGlmCiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgICAgICAg
ICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKaW5kZXggYTQxOTA2YmFi
NjFlZmU2MDBkMjc0YWRlNjY0NmMxZmYzNjA2OGNlMC4uODk2MGQwMGU0ZjBjMzA4MWZiM2FkODdh
YWM0NmM0NDIyZmM0NjllZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCkBAIC0zMSw3ICszMSw5IEBACiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQ0EpCisj
aWYgIVBMQVRGT1JNKElPU19TSU1VTEFUT1IpCiAjZGVmaW5lIFdURl9VU0VfSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFIDEKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikK
ICNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSAqSU9TdXJmYWNlUmVmOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAppbmRleCA2
OWJhMmQ2MmJlMjUzODRhODMzYTlhOWYyNTIwMWZhYTUwNTJhMzA3Li40OTVkNjYyZmQ0NGE1MjA0
YTMyYjUwZDM2MjlkNGNlNmZhOGFmMTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcApAQCAtMzIsNyArMzIsMTEgQEAKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIklt
YWdlT2JzZXJ2ZXIuaCIKKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9u
U2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3Jh
cGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC03MCw3ICs3NCwxMiBAQCBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gSW1hZ2U6OmltYWdlV2l0aENvbG9yU3BhY2UoQ0dJbWFnZVJlZiBvcmlnaW5hbEltYWdl
LCBDb2xvcgogc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0Nv
bnRleHRSZWYgY29udGV4dCkKIHsKICAgICBDR0ltYWdlUmVmIGltYWdlID0gKENHSW1hZ2VSZWYp
aW5mbzsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0KGNv
bnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0
aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKSksIGltYWdlKTsKKyAgICBDR0Zsb2F0
IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CisgICAgQ0dDb250ZXh0VHJhbnNs
YXRlQ1RNKGNvbnRleHQsIDAsIC1oZWlnaHQpOworI2VuZGlmCisgICAgQ0dDb250ZXh0RHJhd0lt
YWdlKGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxz
KEZsb2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBoZWlnaHQpKSwgaW1hZ2Up
OwogfQogCiBzdGF0aWMgdm9pZCBwYXR0ZXJuUmVsZWFzZU9uTWFpblRocmVhZENhbGxiYWNrKHZv
aWQqIGluZm8pCkBAIC0xMzgsNiArMTQ3LDEwIEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QKICAg
ICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0NvbnRleHRH
ZXRDVE0oY29udGV4dCkpOwogICAgICAgICAvLyBUaGUgdG9wIG9mIGEgcGFydGlhbGx5LWRlY29k
ZWQgaW1hZ2UgaXMgZHJhd24gYXQgdGhlIGJvdHRvbSBvZiB0aGUgdGlsZS4gTWFwIGl0IHRvIHRo
ZSB0b3AuCiAgICAgICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtVHJhbnNsYXRlKG1hdHJp
eCwgMCwgc2l6ZSgpLmhlaWdodCgpIC0gaCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBt
YXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKG1hdHJpeCwgMSwgLTEpOworICAgICAgICBt
YXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybVRyYW5zbGF0ZShtYXRyaXgsIDAsIC1oKTsKKyNlbmRp
ZgogICAgICAgICBDR0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2UgPSBDR0ltYWdlUmV0YWluKHN1Yklt
YWdlLmdldCgpKTsKICAgICAgICAgUmV0YWluUHRyPENHUGF0dGVyblJlZj4gcGF0dGVybiA9IGFk
b3B0Q0YoQ0dQYXR0ZXJuQ3JlYXRlKHBsYXRmb3JtSW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgdGls
ZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCkpLCBtYXRyaXgsCiAgICAgICAgICAgICB0
aWxlUmVjdC53aWR0aCgpICsgc3BhY2VTaXplKCkud2lkdGgoKSAqICgxIC8gbmFycm93UHJlY2lz
aW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmEoKSkpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAppbmRleCBiZjY5Mjgy
YzdhMjVjMzYyMWE3ZjNmMGY0NThhZDAyZWYxNzRiZmY1Li5iZjQ1MzM2M2NmYjYzYjJlZDJhOWEy
MWE5MzhmMTVjNWVjZDY5MDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcApAQCAtMzQsNyArMzQsMTUgQEAKICNpbmNs
dWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRp
b25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR0ltYWdlUHJpdmF0ZS5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3MuaD4KKyNpbmNsdWRlIDxJbWFnZUlPL0NHSW1hZ2VTb3VyY2VQcml2YXRlLmg+CisjaW5j
bHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsNiArNTQsMTAgQEAgY29uc3QgQ0ZT
dHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgPSBDRlNUUigia0NHSW1hZ2VTb3Vy
Y2VTa2lwTWV0YWRhdGEKIC8vIHRoYXQgd29uJ3QgY29uZmxpY3Qgd2l0aCBJbWFnZUlPJ3MgdmVy
c2lvbiB3aGVuIGl0IGlzIGF2YWlsYWJsZS4KIGNvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0lt
YWdlUHJvcGVydHlHSUZVbmNsYW1wZWREZWxheVRpbWUgPSBDRlNUUigiVW5jbGFtcGVkRGVsYXlU
aW1lIik7CiAKKyNpZiBQTEFURk9STShJT1MpCitib29sIEltYWdlU291cmNlOjpzX2FjY2VsZXJh
dGVkSW1hZ2VEZWNvZGluZzsKKyNlbmRpZgorCiAjaWYgIVBMQVRGT1JNKE1BQykKIHNpemVfdCBz
aGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24odm9pZCogaW5mbywgdm9pZCogYnVmZmVyLCBv
ZmZfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50KQogewpAQCAtNjksNiArODEsMTAgQEAgdm9pZCBz
aGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQqIGluZm8pCiAKIEltYWdlU291cmNlOjpJbWFnZVNvdXJj
ZShJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbikKICAgICA6IG1fZGVjb2RlcigwKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAs
IG1fYmFzZVN1YnNhbXBsaW5nKDApCisgICAgLCBtX2lzUHJvZ3Jlc3NpdmUoZmFsc2UpCisjZW5k
aWYKIHsKICAgICAvLyBGSVhNRTogQWxwaGFPcHRpb24gYW5kIEdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uIGFyZSBpZ25vcmVkLgogfQpAQCAtOTQsMTMgKzExMCwxNCBAQCB2b2lkIEltYWdlU291
cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGxGcmFtZXMsIHNpemVfdCwgU2hhcmVkQnVmZmVyKiBk
YXRhLCBib29sCiAgICAgICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKIH0KIAot
c3RhdGljIENGRGljdGlvbmFyeVJlZiBpbWFnZVNvdXJjZU9wdGlvbnMoSW1hZ2VTb3VyY2U6OlNo
b3VsZFNraXBNZXRhZGF0YSBza2lwTWV0YWRhdGEpCisjaWYgIVBMQVRGT1JNKElPUykKK3N0YXRp
YyBDRkRpY3Rpb25hcnlSZWYgaW1hZ2VTb3VyY2VPcHRpb25zKEltYWdlU291cmNlOjpTaG91bGRT
a2lwTWV0YWRhdGEgc2tpcE1ldGFEYXRhKQogewogICAgIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYg
b3B0aW9uczsKIAogICAgIGlmICghb3B0aW9ucykgewogICAgICAgICBjb25zdCB1bnNpZ25lZCBu
dW1PcHRpb25zID0gMzsKLSAgICAgICAgY29uc3QgQ0ZCb29sZWFuUmVmIGltYWdlU291cmNlU2tp
cE1ldGFkYXRhID0gKHNraXBNZXRhZGF0YSA9PSBJbWFnZVNvdXJjZTo6U2tpcE1ldGFkYXRhKSA/
IGtDRkJvb2xlYW5UcnVlIDoga0NGQm9vbGVhbkZhbHNlOworICAgICAgICBjb25zdCBDRkJvb2xl
YW5SZWYgaW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgPSAoc2tpcE1ldGFEYXRhID09IEltYWdlU291
cmNlOjpTa2lwTWV0YWRhdGEpID8ga0NGQm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2U7CiAg
ICAgICAgIGNvbnN0IHZvaWQqIGtleXNbbnVtT3B0aW9uc10gPSB7IGtDR0ltYWdlU291cmNlU2hv
dWxkQ2FjaGUsIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIsIGtDR0ltYWdlU291cmNl
U2tpcE1ldGFkYXRhIH07CiAgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tudW1PcHRpb25zXSA9
IHsga0NGQm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlLCBpbWFnZVNvdXJjZVNraXBNZXRhZGF0
YSB9OwogICAgICAgICBvcHRpb25zID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKE5VTEwsIGtleXMsIHZh
bHVlcywgbnVtT3B0aW9ucywgCkBAIC0xMDgsNiArMTI1LDI1IEBAIHN0YXRpYyBDRkRpY3Rpb25h
cnlSZWYgaW1hZ2VTb3VyY2VPcHRpb25zKEltYWdlU291cmNlOjpTaG91bGRTa2lwTWV0YWRhdGEg
c2tpcE1lCiAgICAgfQogICAgIHJldHVybiBvcHRpb25zOwogfQorI2Vsc2UKK0NGRGljdGlvbmFy
eVJlZiBJbWFnZVNvdXJjZTo6aW1hZ2VTb3VyY2VPcHRpb25zKFNob3VsZFNraXBNZXRhZGF0YSBz
a2lwTWV0YURhdGEsIGludCByZXF1ZXN0ZWRTdWJzYW1wbGluZykgY29uc3QKK3sKKyAgICBzdGF0
aWMgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnNbNF0gPSB7bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0cn07CisgICAgaW50IHN1YnNhbXBsaW5nID0gc3RkOjptaW4oMywgbV9pc1Byb2dy
ZXNzaXZlIHx8IHJlcXVlc3RlZFN1YnNhbXBsaW5nIDwgMCA/IDAgOiAocmVxdWVzdGVkU3Vic2Ft
cGxpbmcgKyBtX2Jhc2VTdWJzYW1wbGluZykpOworCisgICAgaWYgKCFvcHRpb25zW3N1YnNhbXBs
aW5nXSkgeworICAgICAgICBpbnQgc3Vic2FtcGxlSW50ID0gMSA8PCBzdWJzYW1wbGluZzsgLy8g
WzAuLjNdID0+IFsxLCAyLCA0LCA4XQorICAgICAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHN1
YnNhbXBsZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwgIGtDRk51bWJl
ckludFR5cGUsICAmc3Vic2FtcGxlSW50KSk7CisgICAgICAgIGNvbnN0IENGSW5kZXggbnVtT3B0
aW9ucyA9IDU7CisgICAgICAgIGNvbnN0IENGQm9vbGVhblJlZiBpbWFnZVNvdXJjZVNraXBNZXRh
RGF0YSA9IChza2lwTWV0YURhdGEgPT0gSW1hZ2VTb3VyY2U6OlNraXBNZXRhZGF0YSkgPyBrQ0ZC
b29sZWFuVHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZTsKKyAgICAgICAgY29uc3QgQ0ZCb29sZWFuUmVm
IGFjY2VsZXJhdGVkSW1hZ2VEZWNvZGluZyA9IEltYWdlU291cmNlOjpzX2FjY2VsZXJhdGVkSW1h
Z2VEZWNvZGluZyA/IGtDRkJvb2xlYW5UcnVlIDoga0NGQm9vbGVhbkZhbHNlOworICAgICAgICBj
b25zdCB2b2lkKiBrZXlzW251bU9wdGlvbnNdID0geyBrQ0dJbWFnZVNvdXJjZVNob3VsZENhY2hl
LCBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyLCBrQ0dJbWFnZVNvdXJjZVN1YnNhbXBs
ZUZhY3Rvciwga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEsIGtDR0ltYWdlU291cmNlVXNlSGFy
ZHdhcmVBY2NlbGVyYXRpb24gfTsKKyAgICAgICAgY29uc3Qgdm9pZCogdmFsdWVzW251bU9wdGlv
bnNdID0geyBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUsIHN1YnNhbXBsZU51bWJlci5n
ZXQoKSwgaW1hZ2VTb3VyY2VTa2lwTWV0YURhdGEsIGFjY2VsZXJhdGVkSW1hZ2VEZWNvZGluZyB9
OworICAgICAgICBvcHRpb25zW3N1YnNhbXBsaW5nXSA9IENGRGljdGlvbmFyeUNyZWF0ZShudWxs
cHRyLCBrZXlzLCB2YWx1ZXMsIG51bU9wdGlvbnMsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxC
YWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOworICAgIH0KKyAgICByZXR1
cm4gb3B0aW9uc1tzdWJzYW1wbGluZ107Cit9CisjZW5kaWYKIAogYm9vbCBJbWFnZVNvdXJjZTo6
aW5pdGlhbGl6ZWQoKSBjb25zdAogewpAQCAtMTk3LDYgKzIzMywzOCBAQCBJbnRTaXplIEltYWdl
U291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCwgSW1hZ2VPcmllbnRhdGlvbkRl
c2NyaXB0aW9uCiAgICAgaWYgKG51bSkKICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtD
Rk51bWJlckludFR5cGUsICZoKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoIW1faXNQ
cm9ncmVzc2l2ZSkgeworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgamZpZlByb3BlcnRpZXMgPSBz
dGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRp
ZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlKRklGRGljdGlvbmFyeSkpOworICAgICAgICBpZiAo
amZpZlByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIENGQm9vbGVhblJlZiBpc1Byb2dDRkJvb2wg
PSBzdGF0aWNfY2FzdDxDRkJvb2xlYW5SZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGpmaWZQcm9w
ZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5SkZJRklzUHJvZ3Jlc3NpdmUpKTsKKyAgICAgICAgICAg
IGlmIChpc1Byb2dDRkJvb2wpCisgICAgICAgICAgICAgICAgbV9pc1Byb2dyZXNzaXZlID0gQ0ZC
b29sZWFuR2V0VmFsdWUoaXNQcm9nQ0ZCb29sKTsKKyAgICAgICAgICAgIC8vIFdvcmthcm91bmQg
Zm9yIDxyZGFyOi8vcHJvYmxlbS81MTg0NjU1PiAtIEhhbmcgcmVuZGVyaW5nIHZlcnkgbGFyZ2Ug
cHJvZ3Jlc3NpdmUgSlBFRy4gRGVjb2RpbmcgcHJvZ3Jlc3NpdmUKKyAgICAgICAgICAgIC8vIGlt
YWdlcyBoYW5ncyBmb3IgYSB2ZXJ5IGxvbmcgdGltZSByaWdodCBub3cuIFVudGlsIHRoaXMgaXMg
Zml4ZWQsIGRvbid0IHN1Yi1zYW1wbGUgcHJvZ3Jlc3NpdmUgaW1hZ2VzLiBUaGlzCisgICAgICAg
ICAgICAvLyB3aWxsIGNhdXNlIHRoZW0gdG8gZmFpbCBvdXIgbGFyZ2UgaW1hZ2UgY2hlY2sgYW5k
IHRoZXkgd29uJ3QgYmUgZGVjb2RlZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgb25j
ZSB1bmRlcmx5aW5nIGlzc3VlIGlzIGZpeGVkICg8cmRhcjovL3Byb2JsZW0vNTE5MTQxOD4pCisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKG1fYmFzZVN1YnNhbXBsaW5nID09IDApICYmICFt
X2lzUHJvZ3Jlc3NpdmUpIHsKKyAgICAgICAgSW50U2l6ZSBzdWJzYW1wbGVkU2l6ZSh3LCBoKTsK
KyAgICAgICAgY29uc3QgaW50IGNNYXhpbXVtSW1hZ2VTaXplQmVmb3JlU3Vic2FtcGxpbmcgPSA1
ICogMTAyNCAqIDEwMjQ7CisgICAgICAgIHdoaWxlICgobV9iYXNlU3Vic2FtcGxpbmcgPCAzKSAm
JiBzdWJzYW1wbGVkU2l6ZS53aWR0aCgpICogc3Vic2FtcGxlZFNpemUuaGVpZ2h0KCkgPiBjTWF4
aW11bUltYWdlU2l6ZUJlZm9yZVN1YnNhbXBsaW5nKSB7CisgICAgICAgICAgICAvLyBXZSBrbm93
IHRoZSBzaXplLCBidXQgdGhlIGFjdHVhbCBpbWFnZSBpcyB2ZXJ5IGxhcmdlIGFuZCBzaG91bGQg
YmUgc3ViLXNhbXBsZWQuCisgICAgICAgICAgICAvLyBJbmNyZWFzZSB0aGUgYmFzZSBzdWJzYW1w
bGluZyBhbmQgYXNrIGZvciB0aGUgc2l6ZSBhZ2Fpbi4gSWYgdGhlIGltYWdlIGNhbiBiZSBzdWJz
YW1wbGVkLCB0aGUgc2l6ZSB3aWxsIGJlCisgICAgICAgICAgICAvLyBncmVhdGx5IHJlZHVjZWQu
IDR4IHN1Yi1zYW1wbGluZyB3aWxsIG1ha2UgdXMgc3VwcG9ydCB1cCB0byAzMjBNUCAoNU1QICog
NF4zKSBpbWFnZXMsIHdoaWNoIHNob3VsZCBiZSBwbGVudHkuCisgICAgICAgICAgICAvLyBUaGVy
ZSdzIG5vIGNhbGxiYWNrIGZyb20gSW1hZ2VJTyB3aGVuIHRoZSBzaXplIGlzIGF2YWlsYWJsZSwg
c28gd2UgZG8gdGhlIGNoZWNrIHdoZW4gd2UgaGFwcGVuCisgICAgICAgICAgICAvLyB0byBjaGVj
ayB0aGUgc2l6ZSBhbmQgaXRzIG5vbiAtIHplcm8uCisgICAgICAgICAgICAvLyBOb3RlOiBTb21l
IGNsaWVudHMgb2YgdGhpcyBjbGFzcyBkb24ndCBjYWxsIGlzU2l6ZUF2YWlsYWJsZSgpIHNvIHdl
IGNhbid0IHJlbHkgb24gdGhhdC4KKyAgICAgICAgICAgICsrbV9iYXNlU3Vic2FtcGxpbmc7Cisg
ICAgICAgICAgICBzdWJzYW1wbGVkU2l6ZSA9IGZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIGRlc2Ny
aXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkpOworICAgICAgICB9CisgICAgICAgIHcg
PSBzdWJzYW1wbGVkU2l6ZS53aWR0aCgpOworICAgICAgICBoID0gc3Vic2FtcGxlZFNpemUuaGVp
Z2h0KCk7CisgICAgfQorI2VuZGlmCisKICAgICBpZiAoKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pICYmIG9yaWVudGF0aW9u
RnJvbVByb3BlcnRpZXMocHJvcGVydGllcy5nZXQoKSkudXNlc1dpZHRoQXNIZWlnaHQoKSkKICAg
ICAgICAgcmV0dXJuIEludFNpemUoaCwgdyk7CiAKQEAgLTIxMiw2ICsyODAsMzEgQEAgSW1hZ2VP
cmllbnRhdGlvbiBJbWFnZVNvdXJjZTo6b3JpZW50YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkg
Y29uc3QKICAgICByZXR1cm4gb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLmdl
dCgpKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK0ludFNpemUgSW1hZ2VTb3VyY2U6Om9yaWdp
bmFsU2l6ZShSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gc2hvdWxkUmVzcGVjdE9yaWVudGF0
aW9uKSBjb25zdAoreworICAgIGZyYW1lU2l6ZUF0SW5kZXgoMCwgc2hvdWxkUmVzcGVjdE9yaWVu
dGF0aW9uKTsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRv
cHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVjb2RlciwgMCwgaW1h
Z2VTb3VyY2VPcHRpb25zKFNraXBNZXRhZGF0YSwgLTEpKSk7CisKKyAgICBpZiAoIXByb3BlcnRp
ZXMpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBpbnQgd2lkdGggPSAwOworICAg
IGludCBoZWlnaHQgPSAwOworICAgIENGTnVtYmVyUmVmIG51bWJlciA9IChDRk51bWJlclJlZilD
RkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4
ZWxXaWR0aCk7CisgICAgaWYgKG51bWJlcikKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW1i
ZXIsIGtDRk51bWJlckludFR5cGUsICZ3aWR0aCk7CisgICAgbnVtYmVyID0gc3RhdGljX2Nhc3Q8
Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0lt
YWdlUHJvcGVydHlQaXhlbEhlaWdodCkpOworICAgIGlmIChudW1iZXIpCisgICAgICAgIENGTnVt
YmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmaGVpZ2h0KTsKKworICAgIGlm
ICgoc2hvdWxkUmVzcGVjdE9yaWVudGF0aW9uID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSAm
JiBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkpLnVzZXNXaWR0aEFz
SGVpZ2h0KCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKGhlaWdodCwgd2lkdGgpOworCisgICAg
cmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Cit9CisjZW5kaWYKKwogSW50U2l6ZSBJbWFn
ZVNvdXJjZTo6c2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGZyYW1lU2l6ZUF0SW5kZXgoMCwgZGVzY3JpcHRpb24pOwpAQCAt
Mjg2LDcgKzM3OSwzNiBAQCBDR0ltYWdlUmVmIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5k
ZXgoc2l6ZV90IGluZGV4LCBmbG9hdCogc2NhbGUpCiAgICAgaWYgKCFpbml0aWFsaXplZCgpKQog
ICAgICAgICByZXR1cm4gMDsKIAorI2lmICFQTEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFN
KHNjYWxlKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHSW1h
Z2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgobV9kZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VP
cHRpb25zKFNraXBNZXRhZGF0YSkpKTsKKyNlbHNlCisgICAgLy8gU3Vic2FtcGxpbmcgY2FuIGJl
IDEsIDIgb3IgMywgd2hpY2ggbWVhbnMgcXVhcnRlci0sIHNpeHRlZW50aC0gYW5kIHNpeHR5LWZv
dXJ0aC1zaXplLCByZXNwZWN0aXZlbHkuCisgICAgLy8gQSB6ZXJvIG9yIG5lZ2F0aXZlIHZhbHVl
IG1lYW5zIG5vIHN1YnNhbXBsaW5nLgorICAgIGludCBzdWJzYW1wbGluZyA9IHNjYWxlID8gc3Rh
dGljX2Nhc3Q8aW50Pihsb2cyZigxLjBmIC8gc3RkOjptYXgoMC4xZiwgc3RkOjptaW4oMS4wZiwg
KnNjYWxlKSkpKSA6IC0xOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0
Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUltYWdlQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFn
ZVNvdXJjZU9wdGlvbnMoU2tpcE1ldGFkYXRhLCBzdWJzYW1wbGluZykpKTsKKworICAgIC8vIDxy
ZGFyOi8vcHJvYmxlbS83MzcxMTk4PiAtIENvcmVHcmFwaGljcyBjaGFuZ2VkIHRoZSBkZWZhdWx0
IGNhY2hpbmcgYmVoYXZpb3VyIGluIGlPUyA0LjAgdG8ga0NHSW1hZ2VDYWNoaW5nVHJhbnNpZW50
CisgICAgLy8gd2hpY2ggY2F1c2VkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBmb3IgdXMgc2lu
Y2UgdGhlIGltYWdlcyBoYWQgdG8gYmUgcmVzYW1wbGVkL3JlY3JlYXRlZCBldmVyeSB0aW1lIHdl
IGNhbGxlZAorICAgIC8vIENHQ29udGV4dERyYXdJbWFnZS4gV2Ugbm93IHRlbGwgQ0cgdG8gY2Fj
aGUgdGhlIGRyYXduIGltYWdlcy4gU2VlIGFsc28gPHJkYXI6Ly9wcm9ibGVtLzE0MzY2NzU1PiAt
CisgICAgLy8gQ29yZUdyYXBoaWNzIG5lZWRzIHRvIHVuLWRlcHJlY2F0ZSBrQ0dJbWFnZUNhY2hp
bmdUZW1wb3Jhcnkgc2luY2UgaXQncyBzdGlsbCBub3QgdGhlIGRlZmF1bHQuCisjaWYgQ09NUElM
RVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisjZW5kaWYKKyAg
ICBDR0ltYWdlU2V0Q2FjaGluZ0ZsYWdzKGltYWdlLmdldCgpLCBrQ0dJbWFnZUNhY2hpbmdUZW1w
b3JhcnkpOworI2lmIENPTVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBv
cAorI2VuZGlmCisgICAgaWYgKHNjYWxlKSB7CisgICAgICAgIGlmIChzdWJzYW1wbGluZyA+IDAp
CisgICAgICAgICAgICAqc2NhbGUgPSBzdGF0aWNfY2FzdDxmbG9hdD4oQ0dJbWFnZUdldFdpZHRo
KGltYWdlLmdldCgpKSkgLyBzaXplKERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pLndpZHRo
KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4o
Q0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSkgPT0gc2l6ZShEb05vdFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uKS53aWR0aCgpKTsKKyAgICAgICAgICAgICpzY2FsZSA9IDE7CisgICAgICAgIH0K
KyAgICB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKICAgICBDRlN0cmluZ1JlZiBpbWFnZVVU
SSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fZGVjb2Rlcik7CiAgICAgc3RhdGljIGNvbnN0IENG
U3RyaW5nUmVmIHhibVVUSSA9IENGU1RSKCJwdWJsaWMueGJpdG1hcC1pbWFnZSIpOwogICAgIGlm
ICghaW1hZ2VVVEkgfHwgIUNGRXF1YWwoaW1hZ2VVVEksIHhibVVUSSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpp
bmRleCA5NTNiY2I5ZDI4YWQwZWI3NWFiMzg4MTNjMzQzOTQ1NWYxMjYyYzc2Li5lZGY5ZTQ5MGU2
ZmZiZTU4MDYyZTA0Yjg3ZDZmZmQ2YjNmMzcyYjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KQEAgLTI5LDYg
KzI5LDIxIEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJTb2Z0TGlua2luZy5o
IgorI2luY2x1ZGUgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KKwor
U09GVF9MSU5LX0ZSQU1FV09SSyhNb2JpbGVDb3JlU2VydmljZXMpCisKK1NPRlRfTElOSyhNb2Jp
bGVDb3JlU2VydmljZXMsIFVUVHlwZUNvcHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3MsIENGU3RyaW5n
UmVmLCAoQ0ZTdHJpbmdSZWYgaW5VVEksIENGU3RyaW5nUmVmIGluVGFnQ2xhc3MpLCAoaW5VVEks
IGluVGFnQ2xhc3MpKQorCitTT0ZUX0xJTktfQ09OU1RBTlQoTW9iaWxlQ29yZVNlcnZpY2VzLCBr
VVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9uLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05T
VEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFRhZ0NsYXNzTUlNRVR5cGUsIENGU3RyaW5nUmVm
KQorCisjZGVmaW5lIGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24gZ2V0a1VUVGFnQ2xhc3NG
aWxlbmFtZUV4dGVuc2lvbigpCisjZGVmaW5lIGtVVFRhZ0NsYXNzTUlNRVR5cGUgZ2V0a1VUVGFn
Q2xhc3NNSU1FVHlwZSgpCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTdHJpbmcg
TUlNRVR5cGVGb3JJbWFnZVNvdXJjZVR5cGUoY29uc3QgU3RyaW5nJiB1dGkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCmluZGV4IDcw
OGZjYzJlMWRmZmRhOWM5NDMyNzZlNTBhYTQ0ODAwZjlmZDJlYjguLmJkMDQ1NzRjN2Q2OWY1YWVi
MjI3ZDcwYjRmODg1YjU1NWIyMDJkNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCkBAIC0yOCw3ICsyOCwxMSBAQAogCiAjaWYg
VVNFKENHKQogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENHLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFJlY3RDRy5jcHAKaW5kZXgg
OGQxMDIwN2JmOWY4NzVhYTJkN2Y2ZTcwYWIzYjdjZWI2M2Q5OTVkNC4uZDFmN2IyZTU3MDg4YTli
ZGI0YWI0NDhjODAzNjU5MWZlMTdmMjJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwCkBAIC0yOCw3ICsyOCwxMSBAQAogCiAjaWYg
VVNFKENHKQogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFNpemVDRy5jcHAKaW5kZXgg
NDFmYjM5OWUzNTVjYTAxMzYzYzA2ZjdiNDEwN2IyZDZmOWJmODRmMi4uZTVkMGI4MjRkZDZhY2E1
YTZmMjM2MDYwYjRiYzY1ZDczMDljM2I4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXplQ0cuY3BwCkBAIC0yOCw3ICsyOCwxMSBAQAogCiAjaWYg
VVNFKENHKQogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmNwcAppbmRleCA1NmZkZDU5Nzc0OTE1MDAxMDhmOTlkNGYxMTgwYzhhODdiZGJhNmI5Li4x
MTNmYTk3OTc2NDc0Yjk5ODcxYjI2NjY5MDg5YjgzNjYxMTNmNzhjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNw
cApAQCAtMjksNiArMjksMTMgQEAKIAogI2lmIFVTRShDRykKIAorI2lmIFBMQVRGT1JNKElPUykK
KyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0NvbnRleHRQcml2YXRlLmg+CisjaW1wb3J0IDxDb3Jl
R3JhcGhpY3MvQ0dDb250ZXh0R1N0YXRlLmg+CisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ29yZUdy
YXBoaWNzLmg+CisjaW1wb3J0IDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNlbmRpZgorCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJJbWFnZU9ic2VydmVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0aENHLmNwcAppbmRleCBmZTlmNzg0NDA1MzhiYWFiMmM1OTAxZjJlMWVjYjk4YWIzYzE0
YWMyLi4zM2JkODkxN2I3MmRjM2E3MDE2NDc3NDI4ZjdlM2Y0MWYyZjI1MGJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKQEAgLTM0LDcgKzM0
LDEyIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgorI2lmICFQTEFURk9STShJT1MpCiAj
aW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxz
ZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BhdGhQcml2YXRlLmg+CisjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0
dGVybkNHLmNwcAppbmRleCAwY2Q1MjllYWJlOTFhNTg5Y2I4NWE2MzNkZjRmNzlhYTdlMjEzYTg2
Li4wYzA4MDQ4Y2IyYmYyMmMxNzIyN2M2ZjM5ODZmNWZlMmQwODM1MWVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKQEAgLTI5LDcg
KzI5LDEyIEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKworI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRp
b25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAKICNpZiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KaW5k
ZXggYTkxNWQyN2NlMDg0ZjgwNmQ1ZGUwODYxZGFhZDFjOWU2NGU2N2QzMS4uN2I3NjMyYWQ0MTAw
N2Y5NjIyOTUwMjc0Y2MwM2ZkYmQzZjBhODg0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2Nv
YS5tbQpAQCAtMjUsNyArMjUsMTMgQEAKICNpbXBvcnQgIkZvbnRQbGF0Zm9ybURhdGEuaCIKIAog
I2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2lmICFQTEFURk9STShJT1MpCiAj
aW1wb3J0IDxBcHBLaXQvTlNGb250Lmg+CisjZWxzZQorI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRl
eHQuaD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0ZvbnRJbmZvLmg+CisjZW5kaWYKKwogI2lt
cG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMz
LDE0ICszOSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBUaGVzZSBDb3JlVGV4dCBUZXh0
IFNwYWNpbmcgZmVhdHVyZSBzZWxlY3RvcnMgYXJlIG5vdCBkZWZpbmVkIGluIENvcmVUZXh0Lgog
ZW51bSBUZXh0U3BhY2luZ0NURmVhdHVyZVNlbGVjdG9yIHsgVGV4dFNwYWNpbmdQcm9wb3J0aW9u
YWwsIFRleHRTcGFjaW5nRnVsbFdpZHRoLCBUZXh0U3BhY2luZ0hhbGZXaWR0aCwgVGV4dFNwYWNp
bmdUaGlyZFdpZHRoLCBUZXh0U3BhY2luZ1F1YXJ0ZXJXaWR0aCB9OwogCi0jaWYgUExBVEZPUk0o
TUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIHZvaWQgRm9udFBsYXRm
b3JtRGF0YTo6bG9hZEZvbnQoTlNGb250KiBuc0ZvbnQsIGZsb2F0LCBOU0ZvbnQqJiBvdXROU0Zv
bnQsIENHRm9udFJlZiYgY2dGb250KQogewogICAgIG91dE5TRm9udCA9IG5zRm9udDsKICAgICBj
Z0ZvbnQgPSBDVEZvbnRDb3B5R3JhcGhpY3NGb250KHRvQ1RGb250UmVmKG5zRm9udCksIDApOwog
fQotI2VuZGlmICAvLyBQTEFURk9STShNQUMpCisjZW5kaWYgIC8vIFBMQVRGT1JNKE1BQykgJiYg
IVBMQVRGT1JNKElPUykKIAorI2lmICFQTEFURk9STShJT1MpCiBGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKE5TRm9udCAqbnNGb250LCBmbG9hdCBzaXplLCBib29sIGlzUHJpbnRl
ckZvbnQsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250T3Jp
ZW50YXRpb24gb3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KQogICAg
IDogbV9zeW50aGV0aWNCb2xkKHN5bnRoZXRpY0JvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlx
dWUoc3ludGhldGljT2JsaXF1ZSkKQEAgLTQ5LDkgKzU2LDIyIEBAIEZvbnRQbGF0Zm9ybURhdGE6
OkZvbnRQbGF0Zm9ybURhdGEoTlNGb250ICpuc0ZvbnQsIGZsb2F0IHNpemUsIGJvb2wgaXNQcmlu
dGVyRm9uCiAgICAgLCBtX3dpZHRoVmFyaWFudCh3aWR0aFZhcmlhbnQpCiAgICAgLCBtX2ZvbnQo
bnNGb250KQogICAgICwgbV9pc0NvbG9yQml0bWFwRm9udChmYWxzZSkKKyNlbHNlCitGb250UGxh
dGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKENURm9udFJlZiBjdEZvbnQsIGZsb2F0IHNpemUs
IGJvb2wgaXNQcmludGVyRm9udCwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09i
bGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0
aFZhcmlhbnQpCisgICAgOiBtX3N5bnRoZXRpY0JvbGQoc3ludGhldGljQm9sZCkKKyAgICAsIG1f
c3ludGhldGljT2JsaXF1ZShzeW50aGV0aWNPYmxpcXVlKQorICAgICwgbV9vcmllbnRhdGlvbihv
cmllbnRhdGlvbikKKyAgICAsIG1faXNFbW9qaShmYWxzZSkKKyAgICAsIG1fc2l6ZShzaXplKQor
ICAgICwgbV93aWR0aFZhcmlhbnQod2lkdGhWYXJpYW50KQorICAgICwgbV9mb250KGN0Rm9udCkK
KyAgICAsIG1fY2dGb250KGFkb3B0Q0YoQ1RGb250Q29weUdyYXBoaWNzRm9udChjdEZvbnQsIE5V
TEwpKSkKKyAgICAsIG1faXNDb2xvckJpdG1hcEZvbnQoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMo
Y3RGb250KSAmIGtDVEZvbnRUcmFpdENvbG9yR2x5cGhzKQorI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCiAgICAgLCBtX2lzQ29tcG9zaXRlRm9udFJlZmVyZW5jZShmYWxzZSkKICAgICAsIG1faXNQ
cmludGVyRm9udChpc1ByaW50ZXJGb250KQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgQVNT
RVJUX0FSRyhuc0ZvbnQsIG5zRm9udCk7CiAKICAgICBDR0ZvbnRSZWYgY2dGb250ID0gMDsKQEAg
LTY4LDE4ICs4OCwzNSBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKE5TRm9u
dCAqbnNGb250LCBmbG9hdCBzaXplLCBib29sIGlzUHJpbnRlckZvbgogICAgICAgICBDRlJldGFp
bihtX2ZvbnQpOwogCiAgICAgbV9jZ0ZvbnQgPSBhZG9wdENGKGNnRm9udCk7CisjZWxzZQorICAg
IEFTU0VSVF9BUkcoY3RGb250LCBjdEZvbnQpOworCisgICAgQ0ZSZXRhaW4oY3RGb250KTsKKyNl
bmRpZiAvLyAhUExBVEZPUk0oSU9TKQogfQogCi1Gb250UGxhdGZvcm1EYXRhOjogfkZvbnRQbGF0
Zm9ybURhdGEoKQorRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQogeworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgaWYgKG1fZm9udCAmJiBtX2ZvbnQgIT0gcmVpbnRlcnByZXRf
Y2FzdDxOU0ZvbnQgKj4oLTEpKQogICAgICAgICBDRlJlbGVhc2UobV9mb250KTsKKyNlbHNlCisg
ICAgaWYgKG1fZm9udCAmJiBtX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0x
KSkKKyAgICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7CisjZW5kaWYKIH0KIAogdm9pZCBGb250UGxh
dGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGYpCiB7
CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBtX2ZvbnQgPSBmLm1fZm9udCAmJiBmLm1fZm9udCAh
PSByZWludGVycHJldF9jYXN0PE5TRm9udCAqPigtMSkgPyBjb25zdF9jYXN0PE5TRm9udCAqPihz
dGF0aWNfY2FzdDxjb25zdCBOU0ZvbnQgKj4oQ0ZSZXRhaW4oZi5tX2ZvbnQpKSkgOiBmLm1fZm9u
dDsKKyNlbHNlCisgICAgbV9mb250ID0gZi5tX2ZvbnQgJiYgZi5tX2ZvbnQgIT0gcmVpbnRlcnBy
ZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSA/IHN0YXRpY19jYXN0PENURm9udFJlZj4oY29uc3RfY2Fz
dDx2b2lkICo+KENGUmV0YWluKGYubV9mb250KSkpIDogZi5tX2ZvbnQ7CisjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKElPUykKKyAgICBtX2lzRW1vamkgPSBmLm1faXNFbW9qaTsKKyNlbmRpZgogICAg
IG1fY2dGb250ID0gZi5tX2NnRm9udDsKICAgICBtX0NURm9udCA9IGYubV9DVEZvbnQ7CiB9CkBA
IC04NywxMiArMTI0LDI0IEBAIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5p
dChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmKQogY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgRm9u
dFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhQXNzaWduKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IGYpCiB7CiAgICAgbV9jZ0ZvbnQgPSBmLm1fY2dGb250OworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBtX2lzRW1vamkgPSBmLm1faXNFbW9qaTsKKyNlbmRpZgorI2lmICFQTEFURk9STShJT1MpCiAg
ICAgaWYgKG1fZm9udCA9PSBmLm1fZm9udCkKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIGlm
IChmLm1fZm9udCAmJiBmLm1fZm9udCAhPSByZWludGVycHJldF9jYXN0PE5TRm9udCAqPigtMSkp
CiAgICAgICAgIENGUmV0YWluKGYubV9mb250KTsKICAgICBpZiAobV9mb250ICYmIG1fZm9udCAh
PSByZWludGVycHJldF9jYXN0PE5TRm9udCAqPigtMSkpCiAgICAgICAgIENGUmVsZWFzZShtX2Zv
bnQpOworI2Vsc2UKKyAgICBpZiAobV9mb250ICYmIG1fZm9udCAhPSByZWludGVycHJldF9jYXN0
PENURm9udFJlZj4oLTEpICYmIGYubV9mb250ICYmIGYubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nh
c3Q8Q1RGb250UmVmPigtMSkgJiYgQ0ZFcXVhbChtX2ZvbnQsIGYubV9mb250KSkKKyAgICAgICAg
cmV0dXJuICp0aGlzOworICAgIGlmIChmLm1fZm9udCAmJiBmLm1fZm9udCAhPSByZWludGVycHJl
dF9jYXN0PENURm9udFJlZj4oLTEpKQorICAgICAgICBDRlJldGFpbihmLm1fZm9udCk7CisgICAg
aWYgKG1fZm9udCAmJiBtX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSkK
KyAgICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7CisjZW5kaWYKICAgICBtX2ZvbnQgPSBmLm1fZm9u
dDsKICAgICBtX0NURm9udCA9IGYubV9DVEZvbnQ7CiAgICAgcmV0dXJuICp0aGlzOwpAQCAtMTAw
LDExICsxNDksMjkgQEAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6
cGxhdGZvcm1EYXRhQXNzaWduKGNvbnN0IEZvbnRQbGF0Zm9ybUQKIAogYm9vbCBGb250UGxhdGZv
cm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNv
bnN0CiB7Ci0gICAgaWYgKG1fZm9udCB8fCBvdGhlci5tX2ZvbnQpCi0gICAgICAgIHJldHVybiBt
X2ZvbnQgPT0gb3RoZXIubV9mb250OworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgaWYg
KG1fZm9udCB8fCBvdGhlci5tX2ZvbnQpIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHJl
c3VsdCA9IG1fZm9udCAmJiBtX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0x
KSAmJiBvdGhlci5tX2ZvbnQgJiYgb3RoZXIubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Q1RG
b250UmVmPigtMSkgJiYgQ0ZFcXVhbChtX2ZvbnQsIG90aGVyLm1fZm9udCk7CisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgQVNTRVJUKG1faXNF
bW9qaSA9PSBvdGhlci5tX2lzRW1vamkpOworI2VuZGlmCisjZWxzZQorICAgICAgICByZXN1bHQg
PSBtX2ZvbnQgPT0gb3RoZXIubV9mb250OworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjaWYgUExBVEZPUk0oSU9TKQorI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICBpZiAobV9jZ0ZvbnQgPT0gb3RoZXIubV9jZ0ZvbnQpCisgICAgICAgIEFT
U0VSVChtX2lzRW1vamkgPT0gb3RoZXIubV9pc0Vtb2ppKTsKKyNlbmRpZgorI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykKICAgICByZXR1cm4gbV9jZ0ZvbnQgPT0gb3RoZXIubV9jZ0ZvbnQ7CiB9CiAK
KyNpZiAhUExBVEZPUk0oSU9TKQogdm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KE5TRm9u
dCAqZm9udCkKIHsKICAgICBBU1NFUlRfQVJHKGZvbnQsIGZvbnQpOwpAQCAtMTMzLDE1ICsyMDAs
NDMgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KE5TRm9udCAqZm9udCkKICAgICB9
CiAgICAgbV9DVEZvbnQgPSAwOwogfQorI2Vsc2UKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0
Rm9udChDVEZvbnRSZWYgZm9udCkKK3sKKyAgICBBU1NFUlRfQVJHKGZvbnQsIGZvbnQpOworICAg
IEFTU0VSVChtX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSk7CiAKKyAg
ICBpZiAobV9mb250ID09IGZvbnQpCisgICAgICAgIHJldHVybjsKKworICAgIENGUmV0YWluKGZv
bnQpOworICAgIGlmIChtX2ZvbnQpCisgICAgICAgIENGUmVsZWFzZShtX2ZvbnQpOworICAgIG1f
Zm9udCA9IGZvbnQ7CisgICAgbV9zaXplID0gQ1RGb250R2V0U2l6ZShmb250KTsKKyAgICBtX2Nn
Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q29weUdyYXBoaWNzRm9udChmb250LCBudWxscHRyKSk7Cisg
ICAgbV9pc0NvbG9yQml0bWFwRm9udCA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpICYg
a0NURm9udFRyYWl0Q29sb3JHbHlwaHM7Cit9CisjZW5kaWYKKworI2lmICFQTEFURk9STShJT1Mp
CiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnJvdW5kc0dseXBoQWR2YW5jZXMoKSBjb25zdAogewog
ICAgIHJldHVybiBbbV9mb250IHJlbmRlcmluZ01vZGVdID09IE5TRm9udEFudGlhbGlhc2VkSW50
ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU7CiB9CisjZW5kaWYKIAogYm9vbCBGb250UGxh
dGZvcm1EYXRhOjphbGxvd3NMaWdhdHVyZXMoKSBjb25zdAogeworI2lmICFQTEFURk9STShJT1Mp
CiAgICAgcmV0dXJuICFbW21fZm9udCBjb3ZlcmVkQ2hhcmFjdGVyU2V0XSBjaGFyYWN0ZXJJc01l
bWJlcjonYSddOworI2Vsc2UKKyAgICBpZiAoIW1fZm9udCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUmV0YWluUHRyPENGQ2hhcmFjdGVyU2V0UmVmPiBjaGFyYWN0ZXJTZXQgPSBhZG9w
dENGKENURm9udENvcHlDaGFyYWN0ZXJTZXQoY3RGb250KCkpKTsKKyAgICByZXR1cm4gIShjaGFy
YWN0ZXJTZXQuZ2V0KCkgJiYgQ0ZDaGFyYWN0ZXJTZXRJc0NoYXJhY3Rlck1lbWJlcihjaGFyYWN0
ZXJTZXQuZ2V0KCksICdhJykpOworI2VuZGlmCiB9CiAKIGlubGluZSBpbnQgbWFwRm9udFdpZHRo
VmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IoRm9udFdpZHRoVmFyaWFudCB2YXJpYW50KQpAQCAt
MjE3LDYgKzMxMiw3IEBAIENURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBjb25z
dAogICAgIGlmIChtX0NURm9udCkKICAgICAgICAgcmV0dXJuIG1fQ1RGb250LmdldCgpOwogCisj
aWYgIVBMQVRGT1JNKElPUykKICAgICBtX0NURm9udCA9IHRvQ1RGb250UmVmKG1fZm9udCk7CiAg
ICAgaWYgKG1fQ1RGb250KSB7CiAgICAgICAgIENURm9udERlc2NyaXB0b3JSZWYgZm9udERlc2Ny
aXB0b3I7CkBAIC0yMjksNiArMzI1LDE3IEBAIENURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpj
dEZvbnQoKSBjb25zdAogICAgICAgICBtX0NURm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29w
eVdpdGhBdHRyaWJ1dGVzKG1fQ1RGb250LmdldCgpLCBtX3NpemUsIDAsIGZvbnREZXNjcmlwdG9y
KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fQ1RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVX
aXRoR3JhcGhpY3NGb250KG1fY2dGb250LmdldCgpLCBtX3NpemUsIDAsIGNhc2NhZGVUb0xhc3RS
ZXNvcnRGb250RGVzY3JpcHRvcigpKSk7CisjZWxzZQorICAgIC8vIEFwcGxlIENvbG9yIEVtb2pp
IHNpemUgaXMgYWRqdXN0ZWQgKGFuZCB0aGVuIHJlLWFkanVzdGVkIGJ5IENvcmUgVGV4dCkgYW5k
IGNhcHBlZC4KKyAgICBDR0Zsb2F0IHNpemUgPSAhbV9pc0Vtb2ppID8gbV9zaXplIDogbV9zaXpl
IDw9IDE1ID8gNCAqIChtX3NpemUgKyAyKSAvIHN0YXRpY19jYXN0PENHRmxvYXQ+KDUpIDogMTY7
CisgICAgQ1RGb250RGVzY3JpcHRvclJlZiBmb250RGVzY3JpcHRvcjsKKyAgICBjb25zdCBjaGFy
KiBwb3N0U2NyaXB0TmFtZSA9IENHRm9udEdldFBvc3RTY3JpcHROYW1lKG1fY2dGb250LmdldCgp
KTsKKyAgICBpZiAocG9zdFNjcmlwdE5hbWUgJiYgKCFzdHJjbXAocG9zdFNjcmlwdE5hbWUsICJI
b2VmbGVyVGV4dC1JdGFsaWMiKSB8fCAhc3RyY21wKHBvc3RTY3JpcHROYW1lLCAiSG9lZmxlclRl
eHQtQmxhY2tJdGFsaWMiKSkpCisgICAgICAgIGZvbnREZXNjcmlwdG9yID0gY2FzY2FkZVRvTGFz
dFJlc29ydEFuZERpc2FibGVTd2FzaGVzRm9udERlc2NyaXB0b3IoKTsKKyAgICBlbHNlCisgICAg
ICAgIGZvbnREZXNjcmlwdG9yID0gY2FzY2FkZVRvTGFzdFJlc29ydEZvbnREZXNjcmlwdG9yKCk7
CisgICAgbV9DVEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQobV9j
Z0ZvbnQuZ2V0KCksIHNpemUsIDAsIGZvbnREZXNjcmlwdG9yKSk7CisjZW5kaWYgLy8gIVBMQVRG
T1JNKElPUykKIAogICAgIGlmIChtX3dpZHRoVmFyaWFudCAhPSBSZWd1bGFyV2lkdGgpIHsKICAg
ICAgICAgaW50IGZlYXR1cmVUeXBlVmFsdWUgPSBrVGV4dFNwYWNpbmdUeXBlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9u
aXRvcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNwbGF5
UmVmcmVzaE1vbml0b3JJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTgwNDNjYWFlY2M4MDU1YjQ4YmMwMmZl
MDM1Y2JmNjlmMjE5YWVjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2lvcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW0KQEAgLTAsMCArMSwx
MjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRV9ESVNQTEFZX01PTklUT1IpCisKKyNpbmNsdWRlICJEaXNwbGF5UmVmcmVzaE1vbml0b3Iu
aCIKKworI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKKyNpbXBvcnQgIldl
YkNvcmVUaHJlYWQuaCIKKworQGludGVyZmFjZSBXZWJEaXNwbGF5TGlua0hhbmRsZXIgOiBOU09i
amVjdAoreworICAgIFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvciogbV9tb25pdG9yOwor
ICAgIENBRGlzcGxheUxpbmsqIG1fZGlzcGxheUxpbms7Cit9CisKKy0gKGlkKWluaXRXaXRoTW9u
aXRvcjooV2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yKiltb25pdG9yOworLSAodm9pZClo
YW5kbGVEaXNwbGF5TGluazooQ0FEaXNwbGF5TGluayAqKXNlbmRlcjsKKy0gKHZvaWQpaW52YWxp
ZGF0ZTsKKworQGVuZAorCitzdGF0aWMgZG91YmxlIG1lZGlhVGltZVRvQ3VycmVudFRpbWUoQ0ZU
aW1lSW50ZXJ2YWwgdCkKK3sKKyAgICByZXR1cm4gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1l
KCkgKyB0IC0gQ0FDdXJyZW50TWVkaWFUaW1lKCk7Cit9CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJE
aXNwbGF5TGlua0hhbmRsZXIKKworLSAoaWQpaW5pdFdpdGhNb25pdG9yOihXZWJDb3JlOjpEaXNw
bGF5UmVmcmVzaE1vbml0b3IqKW1vbml0b3IKK3sKKyAgICBpZiAoc2VsZiA9IFtzdXBlciBpbml0
XSkgeworICAgICAgICBtX21vbml0b3IgPSBtb25pdG9yOworICAgICAgICAvLyBOb3RlIHRoYXQg
Q0FEaXNwbGF5TGluayByZXRhaW5zIGl0cyB0YXJnZXQgKHNlbGYpLCBzbyBhIGNhbGwgdG8gLWlu
dmFsaWRhdGUgaXMgbmVlZGVkIG9uIHRlYXJkb3duLgorICAgICAgICBtX2Rpc3BsYXlMaW5rID0g
W0NBRGlzcGxheUxpbmsgZGlzcGxheUxpbmtXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVj
dG9yKGhhbmRsZURpc3BsYXlMaW5rOildOworICAgICAgICBbbV9kaXNwbGF5TGluayBhZGRUb1J1
bkxvb3A6V2ViVGhyZWFkTlNSdW5Mb29wKCkgZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07
CisgICAgfQorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBB
U1NFUlQoIW1fZGlzcGxheUxpbmspOyAvLyAtaW52YWxpZGF0ZSBzaG91bGQgaGF2ZSBiZWVuIGNh
bGxlZCBhbHJlYWR5LgorICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZCloYW5kbGVE
aXNwbGF5TGluazooQ0FEaXNwbGF5TGluayAqKXNlbmRlcgoreworICAgIEFTU0VSVChXZWJUaHJl
YWRJc0N1cnJlbnQoKSk7CisgICAgbV9tb25pdG9yLT5kaXNwbGF5TGlua0ZpcmVkKHNlbmRlci50
aW1lc3RhbXApOworfQorCistICh2b2lkKWludmFsaWRhdGUKK3sKKyAgICBbbV9kaXNwbGF5TGlu
ayBpbnZhbGlkYXRlXTsKKyAgICBtX2Rpc3BsYXlMaW5rID0gbnVsbHB0cjsKK30KKworQGVuZAor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgCitEaXNwbGF5UmVmcmVzaE1vbml0b3I6On5EaXNwbGF5
UmVmcmVzaE1vbml0b3IoKQoreworICAgIFsoV2ViRGlzcGxheUxpbmtIYW5kbGVyKikgbV9kaXNw
bGF5TGluayBpbnZhbGlkYXRlXTsKKyAgICBbKFdlYkRpc3BsYXlMaW5rSGFuZGxlciopIG1fZGlz
cGxheUxpbmsgcmVsZWFzZV07Cit9CisKK2Jvb2wgRGlzcGxheVJlZnJlc2hNb25pdG9yOjpyZXF1
ZXN0UmVmcmVzaENhbGxiYWNrKCkKK3sKKyAgICBpZiAoIW1fYWN0aXZlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgIGlmICghbV9kaXNwbGF5TGluaykgeworICAgICAgICBt
X2Rpc3BsYXlMaW5rID0gW1tXZWJEaXNwbGF5TGlua0hhbmRsZXIgYWxsb2NdIGluaXRXaXRoTW9u
aXRvcjp0aGlzXTsKKyAgICAgICAgbV9hY3RpdmUgPSB0cnVlOworICAgIH0KKworICAgIG1fc2No
ZWR1bGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBEaXNwbGF5UmVmcmVz
aE1vbml0b3I6OmRpc3BsYXlMaW5rRmlyZWQoZG91YmxlIG5vd1NlY29uZHMpCit7CisgICAgaWYg
KCFtX3ByZXZpb3VzRnJhbWVEb25lKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByZXZpb3Vz
RnJhbWVEb25lID0gZmFsc2U7CisgICAgbV9tb25vdG9uaWNBbmltYXRpb25TdGFydFRpbWUgPSBt
ZWRpYVRpbWVUb0N1cnJlbnRUaW1lKG5vd1NlY29uZHMpOworCisgICAgaGFuZGxlRGlzcGxheVJl
ZnJlc2hlZE5vdGlmaWNhdGlvbk9uTWFpblRocmVhZCh0aGlzKTsKK30KKworfQorCisjZW5kaWYg
Ly8gVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRlYzJmNWI1YWZjMmQzYTNmZWY5MDNkZjU2OTU5MDZhNDcwMGVkYmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENh
Y2hlSU9TLm1tCkBAIC0wLDAgKzEsNjYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIkZvbnRDYWNoZS5oIgorCisjaW1wb3J0ICJGb250LmgiCisj
aW1wb3J0ICJSZW5kZXJUaGVtZUlPUy5oIgorI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NHRm9udFVu
aWNvZGVTdXBwb3J0Lmg+CisjaW1wb3J0IDxDb3JlVGV4dC9DVEZvbnREZXNjcmlwdG9yUHJpdi5o
PgorI2ltcG9ydCA8Q29yZVRleHQvQ1RGb250UHJpdi5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250Q2FjaGU6OnBsYXRm
b3JtSW5pdCgpCit7CisgICAgd2tTZXRVcEZvbnRDYWNoZSgpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgaXNGb250V2VpZ2h0Qm9sZChOU0ludGVnZXIgZm9udFdlaWdodCkKK3sKKyAgICByZXR1
cm4gZm9udFdlaWdodCA+PSBGb250V2VpZ2h0NjAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
cmVxdWlyZXNDdXN0b21GYWxsYmFja0ZvbnQoY29uc3QgVUludDMyIGNoYXJhY3RlcikKK3sKKyAg
ICByZXR1cm4gY2hhcmFjdGVyID09IEFwcGxlTG9nbyB8fCBjaGFyYWN0ZXIgPT0gYmxhY2tDaXJj
bGU7Cit9CisKK3N0YXRpYyBDRkNoYXJhY3RlclNldFJlZiBjb3B5Rm9udENoYXJhY3RlclNldChD
RlN0cmluZ1JlZiBmb250TmFtZSkKK3sKKyAgICAvLyBUaGUgc2l6ZSwgMTAsIGlzIGFyYml0cmFy
eS4KKyAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBh
ZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoTmFtZUFuZFNpemUoZm9udE5hbWUsIDEw
KSk7CisgICAgUmV0YWluUHRyPENURm9udFJlZj4gZm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRl
V2l0aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yLmdldCgpLCAxMCwgbnVsbHB0cikpOwor
ICAgIHJldHVybiAoQ0ZDaGFyYWN0ZXJTZXRSZWYpQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1
dGUoZm9udERlc2NyaXB0b3IuZ2V0KCksIGtDVEZvbnRDaGFyYWN0ZXJTZXRBdHRyaWJ1dGUpOwor
fQorCitzdGF0aWMgQ0ZDaGFyYWN0ZXJTZXRSZWYgYXBwbGVDb2xvckVtb2ppQ2hhcmFjdGVyU2V0
KCkKK3sKKyAgICBzdGF0aWMgQ0ZDaGFyYWN0ZXJTZXRSZWYgY2hhcmFjdGVyU2V0ID0gY29weUZv
bnRDaGFyYWN0ZXJTZXQoQ0ZTVFIoIkFwcGxlQ29sb3JFbW9qaSIpKTsKKyAgICByZXR1cm4gY2hh
cmFjdGVyU2V0OworfQorCitzdGF0aWMgQ0ZDaGFyYWN0ZXJTZXRSZWYgcGhvbmVGYWxsYmFja0No
YXJhY3RlclNldCgpCit7CisgICAgc3RhdGljIENGQ2hhcmFjdGVyU2V0UmVmIGNoYXJhY3RlclNl
dCA9IGNvcHlGb250Q2hhcmFjdGVyU2V0KENGU1RSKCIuUGhvbmVGYWxsYmFjayIpKTsKKyAgICBy
ZXR1cm4gY2hhcmFjdGVyU2V0OworfQorCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250
Q2FjaGU6OmdldFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERh
dGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQoreworICAgIGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IG9yaWdpbmFsRm9udERhdGEtPnBsYXRmb3Jt
RGF0YSgpOworICAgIENURm9udFJlZiBjdEZvbnQgPSBwbGF0Zm9ybURhdGEuZm9udCgpOworCisg
ICAgQ0ZJbmRleCBjb3ZlcmVkTGVuZ3RoID0gMDsKKyAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBz
dWJzdGl0dXRlRm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlUGh5c2ljYWxGb250Rm9yQ2hhcmFj
dGVyc1dpdGhMYW5ndWFnZShjdEZvbnQsIChjb25zdCBVVEYxNkNoYXIqKWNoYXJhY3RlcnMsIChD
RkluZGV4KWxlbmd0aCwgMCwgJmNvdmVyZWRMZW5ndGgpKTsKKyAgICBpZiAoIXN1YnN0aXR1dGVG
b250KQorICAgICAgICByZXR1cm4gMDsKKworICAgIENURm9udFN5bWJvbGljVHJhaXRzIG9yaWdp
bmFsVHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoY3RGb250KTsKKyAgICBDVEZvbnRT
eW1ib2xpY1RyYWl0cyBhY3R1YWxUcmFpdHMgPSAwOworICAgIGlmIChpc0ZvbnRXZWlnaHRCb2xk
KGRlc2NyaXB0aW9uLndlaWdodCgpKSB8fCBkZXNjcmlwdGlvbi5pdGFsaWMoKSkKKyAgICAgICAg
YWN0dWFsVHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoc3Vic3RpdHV0ZUZvbnQuZ2V0
KCkpOworCisgICAgYm9vbCBzeW50aGV0aWNCb2xkID0gKG9yaWdpbmFsVHJhaXRzICYga0NURm9u
dFRyYWl0Qm9sZCkgJiYgIShhY3R1YWxUcmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKTsKKyAgICBi
b29sIHN5bnRoZXRpY09ibGlxdWUgPSAob3JpZ2luYWxUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFs
aWMpICYmICEoYWN0dWFsVHJhaXRzICYga0NURm9udFRyYWl0SXRhbGljKTsKKworICAgIEZvbnRQ
bGF0Zm9ybURhdGEgYWx0ZXJuYXRlRm9udChzdWJzdGl0dXRlRm9udC5nZXQoKSwgcGxhdGZvcm1E
YXRhLnNpemUoKSwgcGxhdGZvcm1EYXRhLmlzUHJpbnRlckZvbnQoKSwgc3ludGhldGljQm9sZCwg
c3ludGhldGljT2JsaXF1ZSwgcGxhdGZvcm1EYXRhLm1fb3JpZW50YXRpb24pOworICAgIGFsdGVy
bmF0ZUZvbnQubV9pc0Vtb2ppID0gQ1RGb250SXNBcHBsZUNvbG9yRW1vamkoc3Vic3RpdHV0ZUZv
bnQuZ2V0KCkpOworCisgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250
LCBEb05vdFJldGFpbik7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBp
c0dCMTgwMzBDb21wbGlhbmNlUmVxdWlyZWQgPSB3a0lzR0IxODAzMENvbXBsaWFuY2VSZXF1aXJl
ZCgpOworCisgICAgLy8gVW5saWtlIE9TIFgsIG91ciBmYWxsYmFjayBmb250IG9uIGlQaG9uZSBp
cyBBcmlhbCBVbmljb2RlLCB3aGljaCBkb2Vzbid0IGhhdmUgc29tZSBhcHBsZS1zcGVjaWZpYyBn
bHlwaHMgbGlrZSBGOEZGLgorICAgIC8vIEZhbGwgYmFjayB0byB0aGUgQXBwbGUgRmFsbGJhY2sg
Zm9udCBpbiB0aGlzIGNhc2UuCisgICAgaWYgKGxlbmd0aCA+IDAgJiYgcmVxdWlyZXNDdXN0b21G
YWxsYmFja0ZvbnQoKmNoYXJhY3RlcnMpKQorICAgICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERh
dGEoZ2V0Q3VzdG9tRmFsbGJhY2tGb250KCpjaGFyYWN0ZXJzLCBkZXNjcmlwdGlvbiksIERvTm90
UmV0YWluKTsKKworICAgIFVDaGFyMzIgYyA9ICpjaGFyYWN0ZXJzOworICAgIGlmIChsZW5ndGgg
PiAxICYmIFUxNl9JU19MRUFEKGMpICYmIFUxNl9JU19UUkFJTChjaGFyYWN0ZXJzWzFdKSkKKyAg
ICAgICAgYyA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShjLCBjaGFyYWN0ZXJzWzFdKTsKKworICAg
IC8vIEZvciBzeXN0ZW0gZm9udHMgd2UgdXNlIENvcmVUZXh0IGZhbGxiYWNrIG1lY2hhbmlzbS4K
KyAgICBpZiAobGVuZ3RoKSB7CisgICAgICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVm
PiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG9yaWdp
bmFsRm9udERhdGEtPmdldENURm9udCgpKSk7CisgICAgICAgIGlmIChDVEZvbnREZXNjcmlwdG9y
SXNTeXN0ZW1VSUZvbnQoZm9udERlc2NyaXB0b3IuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJu
IGdldFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIG9yaWdpbmFs
Rm9udERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgfQorCisgICAgYm9vbCB1c2VDSkZv
bnQgPSBmYWxzZTsKKyAgICBib29sIHVzZUtvcmVhbkZvbnQgPSBmYWxzZTsKKyAgICBib29sIHVz
ZUN5cmlsbGljRm9udCA9IGZhbHNlOworICAgIGJvb2wgdXNlQXJhYmljRm9udCA9IGZhbHNlOwor
ICAgIGJvb2wgdXNlSGVicmV3Rm9udCA9IGZhbHNlOworICAgIGJvb2wgdXNlSW5kaWNGb250ID0g
ZmFsc2U7CisgICAgYm9vbCB1c2VUaGFpRm9udCA9IGZhbHNlOworICAgIGJvb2wgdXNlVGliZXRh
bkZvbnQgPSBmYWxzZTsKKyAgICBib29sIHVzZUNhbmFkaWFuQWJvcmlnaW5hbFN5bGxhYmljc0Zv
bnQgPSBmYWxzZTsKKyAgICBib29sIHVzZUVtb2ppRm9udCA9IGZhbHNlOworICAgIGlmIChsZW5n
dGggPiAwKSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXNuJ3QgYSBsb29w
IGJ1dCBhIHdheSB0byBlZmZpY2llbnRseSBjaGVjayBmb3IgcmFuZ2VzIG9mIGNoYXJhY3RlcnMu
CisKKyAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgcmFuZ2VzIGFyZSBLb3JlYW4gSGFuZ3Vs
IGFuZCBzaG91bGQgYmUgcmVuZGVyZWQgYnkgQXBwbGVTREdvdGhpY05lbworICAgICAgICAgICAg
Ly8gVSsxMTAwIC0gVSsxMUZGCisgICAgICAgICAgICAvLyBVKzMxMzAgLSBVKzMxOEYKKyAgICAg
ICAgICAgIC8vIFUrQUMwMCAtIFUrRDdBMworCisgICAgICAgICAgICAvLyBUaGVzZSBhcmUgQ3ly
aWxsaWMgYW5kIHNob3VsZCBiZSByZW5kZXJlZCBieSBIZWx2ZXRpY2EgTmV1ZQorICAgICAgICAg
ICAgLy8gVSswNDAwIC0gVSswNTJGCisKKyAgICAgICAgICAgIGlmIChjIDwgMHg0MDApCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoYyA8PSAweDUyRikgeworICAgICAg
ICAgICAgICAgIHVzZUN5cmlsbGljRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA8IDB4NTkwKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGMgPCAweDYwMCkgeworICAgICAgICAgICAgICAg
IHVzZUhlYnJld0ZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGMgPD0gMHg2RkYpIHsKKyAgICAgICAgICAgICAgICB1c2VB
cmFiaWNGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChjIDwgMHg5MDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBpZiAoYyA8IDB4RTAwKSB7CisgICAgICAgICAgICAgICAgdXNlSW5kaWNGb250ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChjIDw9IDB4RTdGKSB7CisgICAgICAgICAgICAgICAgdXNlVGhhaUZvbnQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMg
PCAweDBGMDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoYyA8PSAw
eDBGRkYpIHsKKyAgICAgICAgICAgICAgICB1c2VUaWJldGFuRm9udCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA8IDB4MTEw
MCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDw9IDB4MTFGRikg
eworICAgICAgICAgICAgICAgIHVzZUtvcmVhbkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPiAweDE0MDAgJiYgYyA8
IDB4MTc4MCkgeworICAgICAgICAgICAgICAgIHVzZUNhbmFkaWFuQWJvcmlnaW5hbFN5bGxhYmlj
c0ZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGMgPCAweDJFODApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBpZiAoYyA8IDB4MzEzMCkgeworICAgICAgICAgICAgICAgIHVzZUNKRm9udCA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
YyA8PSAweDMxOEYpIHsKKyAgICAgICAgICAgICAgICB1c2VLb3JlYW5Gb250ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDwg
MHhBQzAwKSB7CisgICAgICAgICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDw9IDB4RDdBMykg
eworICAgICAgICAgICAgICAgIHVzZUtvcmVhbkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBjIDw9IDB4REZGRikgewor
ICAgICAgICAgICAgICAgIHVzZUNKRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIGMgPCAweEUwMDApCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoIGMgPCAweEU2MDApIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaXNHQjE4MDMwQ29tcGxpYW5jZVJlcXVpcmVkKQorICAgICAgICAgICAgICAgICAg
ICB1c2VDSkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgdXNlRW1vamlGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICggYyA8PSAweEU4NjQgJiYgaXNHQjE4MDMwQ29tcGxp
YW5jZVJlcXVpcmVkKSB7CisgICAgICAgICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDw9IDB4
RjhGRikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDwgMHhGQjAw
KSB7CisgICAgICAgICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDwgMHhGQjUwKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGMgPD0gMHhGREZGKSB7CisgICAgICAg
ICAgICAgICAgdXNlQXJhYmljRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA8IDB4RkUyMCkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDwgMHhGRTcwKSB7CisgICAgICAgICAgICAgICAg
dXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChjIDwgMHhGRjAwKSB7CisgICAgICAgICAgICAgICAgdXNlQXJhYmlj
Rm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoYyA8IDB4RkZGMCkgeworICAgICAgICAgICAgICAgIHVzZUNKRm9udCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoYyA+PTB4MjAwMDAgJiYgYyA8PSAweDJGRkZGKQorICAgICAgICAgICAgICAgIHVzZUNKRm9u
dCA9IHRydWU7CisgICAgICAgIH0gd2hpbGUgKDApOworICAgIH0KKworICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gc2ltcGxlRm9udERhdGE7CisKKyAgICBpZiAodXNlQ0pGb250KSB7CisgICAg
ICAgIC8vIEJ5IGRlZmF1bHQsIENoaW5lc2UgZm9udCBpcyBwcmVmZXJyZWQsIGZhbGwgYmFjayBv
biBKYXBhbmVzZS4KKworICAgICAgICBlbnVtIENKS0ZvbnRWYXJpYW50IHsKKyAgICAgICAgICAg
IGtDSktGb250VXNlSGlyYWdpbm8gPSAwLAorICAgICAgICAgICAga0NKS0ZvbnRVc2VTVEhlaXRp
U0MsCisgICAgICAgICAgICBrQ0pLRm9udFVzZVNUSGVpdGlUQywKKyAgICAgICAgICAgIGtDSktG
b250VXNlU1RIZWl0aUosCisgICAgICAgICAgICBrQ0pLRm9udFVzZVNUSGVpdGlLLAorICAgICAg
ICAgICAga0NKS0ZvbnRzVXNlSEtHUFczVUkKKyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBwbGFpbkhpcmFnaW5vKCJIaXJhS2FrdVByb04t
VzMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gcGxhaW5TVEhlaXRpU0MoIlNUSGVpdGlTQy1M
aWdodCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBwbGFpblNUSGVpdGlUQygiU1RIZWl0aVRD
LUxpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHBsYWluU1RIZWl0aUooIlNUSGVpdGlK
LUxpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHBsYWluU1RIZWl0aUsoIlNUSGVpdGlL
LUxpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHBsYWluSEtHUFczVUkoIkhLR1BXM1VJ
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBB
dG9taWNTdHJpbmcqIGNqa1BsYWluW10gPSB7ICAgICAKKyAgICAgICAgICAgICZwbGFpbkhpcmFn
aW5vLmdldCgpLAorICAgICAgICAgICAgJnBsYWluU1RIZWl0aVNDLmdldCgpLAorICAgICAgICAg
ICAgJnBsYWluU1RIZWl0aVRDLmdldCgpLAorICAgICAgICAgICAgJnBsYWluU1RIZWl0aUouZ2V0
KCksCisgICAgICAgICAgICAmcGxhaW5TVEhlaXRpSy5nZXQoKSwKKyAgICAgICAgICAgICZwbGFp
bkhLR1BXM1VJLmdldCgpLAorICAgICAgICB9OworCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IGJvbGRIaXJhZ2lubygiSGlyYUtha3VQcm9OLVc2IiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IGJvbGRTVEhlaXRpU0MoIlNUSGVpdGlTQy1NZWRpdW0iLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gYm9sZFNUSGVpdGlUQygiU1RIZWl0aVRDLU1lZGl1bSIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBib2xkU1RIZWl0aUooIlNUSGVpdGlKLU1lZGl1bSIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBib2xkU1RIZWl0aUsoIlNUSGVpdGlLLU1lZGl1bSIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBib2xkSEtHUFczVUkoIkhLR1BXM1VJIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBBdG9taWNTdHJpbmcq
IGNqa0JvbGRbXSA9IHsgIAorICAgICAgICAgICAgJmJvbGRIaXJhZ2luby5nZXQoKSwKKyAgICAg
ICAgICAgICZib2xkU1RIZWl0aVNDLmdldCgpLAorICAgICAgICAgICAgJmJvbGRTVEhlaXRpVEMu
Z2V0KCksCisgICAgICAgICAgICAmYm9sZFNUSGVpdGlKLmdldCgpLAorICAgICAgICAgICAgJmJv
bGRTVEhlaXRpSy5nZXQoKSwKKyAgICAgICAgICAgICZib2xkSEtHUFczVUkuZ2V0KCksCisgICAg
ICAgIH07CisKKyAgICAgICAgLy8gRGVmYXVsdCBiZWxvdyBpcyBmb3IgU2ltcGxpZmllZCBDaGlu
ZXNlIHVzZXI6IHpoLUhhbnMgLSBub3RlIHRoYXQgSGlyYWdpbm8gaXMgdGhlCisgICAgICAgIC8v
IHRoZSBzZWNvbmRhcnkgZm9udCBhcyB3ZSB3YW50IGl0cyBmb3IgSGlyYWdhbmEgYW5kIEthdGFr
YW5hLiBUaGUgb3RoZXIgQ0pLIGZvbnRzCisgICAgICAgIC8vIGRvIG5vdCwgYW5kIHNob3VsZCBu
b3QsIGNvbnRhaW4gSGlyYWdhbmEgb3IgS2F0YWthbmEgZ2x5cGhzLgorICAgICAgICBzdGF0aWMg
Q0pLRm9udFZhcmlhbnQgcHJlZmVycmVkQ0pLRm9udCA9IGtDSktGb250VXNlU1RIZWl0aVNDOwor
ICAgICAgICBzdGF0aWMgQ0pLRm9udFZhcmlhbnQgc2Vjb25kYXJ5Q0pLRm9udCA9IGtDSktGb250
c1VzZUhLR1BXM1VJOworCisgICAgICAgIHN0YXRpYyBib29sIENKS0ZvbnRJbml0aWFsaXplZDsK
KyAgICAgICAgaWYgKCFDSktGb250SW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAgIENKS0ZvbnRJ
bml0aWFsaXplZCA9IHRydWU7CisgICAgICAgICAgICAvLyBUZXN0aW5nOiBsYW5ndWFnZU5hbWUg
PSAoQ0ZTdHJpbmdSZWYpQCJqYSI7CisgICAgICAgICAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVs
dHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOworICAgICAgICAgICAg
TlNBcnJheSAqbGFuZ3VhZ2VzID0gW2RlZmF1bHRzIHN0cmluZ0FycmF5Rm9yS2V5OkAiQXBwbGVM
YW5ndWFnZXMiXTsKKworICAgICAgICAgICAgaWYgKGxhbmd1YWdlcykgeworICAgICAgICAgICAg
ICAgIGZvciAoTlNTdHJpbmcgKmxhbmd1YWdlIGluIGxhbmd1YWdlcykgeworICAgICAgICAgICAg
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxhbmd1YWdlTmFtZSA9IGFkb3B0Q0YoQ0ZM
b2NhbGVDcmVhdGVDYW5vbmljYWxMYW5ndWFnZUlkZW50aWZpZXJGcm9tU3RyaW5nKG51bGxwdHIs
IChDRlN0cmluZ1JlZilsYW5ndWFnZSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoQ0ZFcXVh
bChsYW5ndWFnZU5hbWUuZ2V0KCksIENGU1RSKCJ6aC1IYW5zIikpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7IC8vIFNpbXBsaWZpZWQgQ2hpbmVzZSAtIGRlZmF1bHQgc2V0dGluZ3MK
KyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQ0ZFcXVhbChsYW5ndWFnZU5hbWUuZ2V0KCks
IENGU1RSKCJqYSIpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ0pLRm9u
dCA9IGtDSktGb250VXNlSGlyYWdpbm87IC8vIEphcGFuZXNlIC0gcHJlZmVyIEhpcmFnaW5vIGFu
ZCBTVEhlaXRpIEphcGFuc2UgVmFyaWFudAorICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25k
YXJ5Q0pLRm9udCA9IGtDSktGb250VXNlU1RIZWl0aUo7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChDRkVxdWFsKGxhbmd1YWdl
TmFtZS5nZXQoKSwgQ0ZTVFIoImtvIikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVm
ZXJyZWRDSktGb250ID0ga0NKS0ZvbnRVc2VTVEhlaXRpSzsgLy8gS29yZWFuIC0gcHJlZmVyIFNU
SGVpdGkgS29yZWFuIFZhcmlhbnQgCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChDRkVxdWFsKGxhbmd1YWdlTmFtZS5nZXQoKSwg
Q0ZTVFIoInpoLUhhbnQiKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZENK
S0ZvbnQgPSBrQ0pLRm9udFVzZVNUSGVpdGlUQzsgLy8gVHJhZGl0aW9uYWwgQ2hpbmVzZSAtIHBy
ZWZlciBTVEhlaXRpIFRyYWRpdGlvbmFsIFZhcmlhbnQKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRG
b250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQo
KSkgPyAqY2prQm9sZFtwcmVmZXJyZWRDSktGb250XSA6ICpjamtQbGFpbltwcmVmZXJyZWRDSktG
b250XSwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICAgICAgYm9vbCB1c2VTZWNvbmRhcnlGb250
ID0gdHJ1ZTsKKyAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhKSB7CisgICAgICAgICAgICBDR0ds
eXBoIGdseXBoc1syXTsKKyAgICAgICAgICAgIC8vIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJz
IHRha2VzIFVURi0xNiBidWZmZXIuIFNob3VsZCBvbmx5IGJlIDEgY29kZXBvaW50IGJ1dCBzaW5j
ZSB3ZSBtYXkgcGFzcyBpbiB0d28gVVRGLTE2IGNoYXJhY3RlcnMsCisgICAgICAgICAgICAvLyBt
YWtlIHJvb20gZm9yIDIgZ2x5cGhzIGp1c3QgdG8gYmUgc2FmZS4KKyAgICAgICAgICAgIENHRm9u
dEdldEdseXBoc0ZvclVuaWNoYXJzKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0Zv
bnQoKSwgY2hhcmFjdGVycywgZ2x5cGhzLCBsZW5ndGgpOworCisgICAgICAgICAgICB1c2VTZWNv
bmRhcnlGb250ID0gKGdseXBoc1swXSA9PSAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1
c2VTZWNvbmRhcnlGb250KQorICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRG
b250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQo
KSkgPyAqY2prQm9sZFtzZWNvbmRhcnlDSktGb250XSA6ICpjamtQbGFpbltzZWNvbmRhcnlDSktG
b250XSwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICB9IGVsc2UgaWYgKHVzZUtvcmVhbkZvbnQp
IHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4ga29yZWFuUGxh
aW4oIkFwcGxlU0RHb3RoaWNOZW8tTWVkaXVtIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGtv
cmVhbkJvbGQoIkFwcGxlU0RHb3RoaWNOZW8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRh
KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGtv
cmVhbkJvbGQgOiBrb3JlYW5QbGFpbiwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICB9IGVsc2Ug
aWYgKHVzZUN5cmlsbGljRm9udCkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBjeXJpbGxpY1BsYWluKCJIZWx2ZXRpY2FOZXVlIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IGN5cmlsbGljQm9sZCgiSGVsdmV0aWNhTmV1ZS1Cb2xkIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2Fj
aGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2Vp
Z2h0KCkpID8gY3lyaWxsaWNCb2xkIDogY3lyaWxsaWNQbGFpbiwgZmFsc2UsIERvTm90UmV0YWlu
KTsKKyAgICB9IGVsc2UgaWYgKHVzZUFyYWJpY0ZvbnQpIHsKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gYXJhYmljUGxhaW4oIkdlZXphUHJvIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IGFyYWJpY0JvbGQoIkdlZXphUHJvLUJvbGQiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNo
ZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWln
aHQoKSkgPyBhcmFiaWNCb2xkIDogYXJhYmljUGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7Cisg
ICAgfSBlbHNlIGlmICh1c2VIZWJyZXdGb250KSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IGhlYnJld1BsYWluKCJBcmlhbEhlYnJldyIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBoZWJyZXdCb2xkKCJBcmlhbEhlYnJldy1Cb2xkIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2Fj
aGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2Vp
Z2h0KCkpID8gaGVicmV3Qm9sZCA6IGhlYnJld1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOwor
ICAgIH0gZWxzZSBpZiAodXNlSW5kaWNGb250KSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IGRldmFuYWdhcmlGb250KCJEZXZhbmFnYXJpU2FuZ2FtTU4iLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gYmVuZ2FsaUZvbnQoIkJhbmdsYVNhbmdhbU1OIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IGd1cm11a2hpRm9udCgiR3VybXVraGlNTiIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOyAvLyBNaWdodCBiZSByZXBsYWNlZCBpbiBhIGZ1
dHVyZSByZWxlYXNlIHdpdGggYSBTYW5nYW0gdmVyc2lvbi4KKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ3VqYXJhdGlGb250KCJHdWphcmF0aVNhbmdhbU1OIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG9yaXlhRm9udCgiT3JpeWFTYW5nYW1NTiIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiB0YW1pbEZvbnQoIlRhbWlsU2FuZ2FtTU4iLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4gdGVsdWd1Rm9udCgiVGVsdWd1U2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4ga2FubmFkYUZvbnQoIkthbm5hZGFTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBtYWxheWFsYW1Gb250KCJNYWxheWFsYW1TYW5nYW1NTiIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBzaW5oYWxhRm9udCgiU2luaGFsYVNhbmdhbU1OIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4gZGV2YW5hZ2FyaUZvbnRCb2xkKCJEZXZhbmFnYXJpU2FuZ2FtTU4tQm9s
ZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBiZW5nYWxpRm9udEJvbGQoIkJhbmdsYVNhbmdh
bU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ3VybXVraGlGb250Qm9sZCgiR3Vy
bXVraGlNTi1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7IC8vIE1p
Z2h0IGJlIHJlcGxhY2VkIGluIGEgZnV0dXJlIHJlbGVhc2Ugd2l0aCBhIFNhbmdhbSB2ZXJzaW9u
LgorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBndWphcmF0aUZv
bnRCb2xkKCJHdWphcmF0aVNhbmdhbU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
b3JpeWFGb250Qm9sZCgiT3JpeWFTYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IHRhbWlsRm9udEJvbGQoIlRhbWlsU2FuZ2FtTU4tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiB0ZWx1Z3VGb250Qm9sZCgiVGVsdWd1U2FuZ2FtTU4tQm9sZCIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBrYW5uYWRhRm9udEJvbGQoIkthbm5hZGFTYW5nYW1NTi1Cb2xkIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IG1hbGF5YWxhbUZvbnRCb2xkKCJNYWxheWFsYW1TYW5nYW1N
Ti1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNpbmhhbGFGb250Qm9sZCgiU2luaGFs
YVNhbmdhbU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKwor
ICAgICAgICBzdGF0aWMgQXRvbWljU3RyaW5nKiBpbmRpY1VuaWNvZGVQYWdlRm9udHNbXSA9IHsK
KyAgICAgICAgICAgICZkZXZhbmFnYXJpRm9udC5nZXQoKSwKKyAgICAgICAgICAgICZiZW5nYWxp
Rm9udC5nZXQoKSwKKyAgICAgICAgICAgICZndXJtdWtoaUZvbnQuZ2V0KCksCisgICAgICAgICAg
ICAmZ3VqYXJhdGlGb250LmdldCgpLAorICAgICAgICAgICAgJm9yaXlhRm9udC5nZXQoKSwKKyAg
ICAgICAgICAgICZ0YW1pbEZvbnQuZ2V0KCksCisgICAgICAgICAgICAmdGVsdWd1Rm9udC5nZXQo
KSwKKyAgICAgICAgICAgICZrYW5uYWRhRm9udC5nZXQoKSwKKyAgICAgICAgICAgICZtYWxheWFs
YW1Gb250LmdldCgpLAorICAgICAgICAgICAgJnNpbmhhbGFGb250LmdldCgpCisgICAgICAgIH07
CisKKyAgICAgICAgc3RhdGljIEF0b21pY1N0cmluZyogaW5kaWNVbmljb2RlUGFnZUZvbnRzQm9s
ZFtdID0geworICAgICAgICAgICAgJmRldmFuYWdhcmlGb250Qm9sZC5nZXQoKSwKKyAgICAgICAg
ICAgICZiZW5nYWxpRm9udEJvbGQuZ2V0KCksCisgICAgICAgICAgICAmZ3VybXVraGlGb250Qm9s
ZC5nZXQoKSwKKyAgICAgICAgICAgICZndWphcmF0aUZvbnRCb2xkLmdldCgpLAorICAgICAgICAg
ICAgJm9yaXlhRm9udEJvbGQuZ2V0KCksCisgICAgICAgICAgICAmdGFtaWxGb250Qm9sZC5nZXQo
KSwKKyAgICAgICAgICAgICZ0ZWx1Z3VGb250Qm9sZC5nZXQoKSwKKyAgICAgICAgICAgICZrYW5u
YWRhRm9udEJvbGQuZ2V0KCksCisgICAgICAgICAgICAmbWFsYXlhbGFtRm9udEJvbGQuZ2V0KCks
CisgICAgICAgICAgICAmc2luaGFsYUZvbnRCb2xkLmdldCgpCisgICAgICAgIH07CisKKyAgICAg
ICAgdWludDMyX3QgaW5kaWNQYWdlT3JkZXJJbmRleCA9IChjIC0gMHgwOTAwKSAvIDB4MDA4MDsg
Ly8gSW5kaWMgc2NyaXB0cyBzdGFydCBhdCAweDA5MDAgaW4gVW5pY29kZS4gRWFjaCBzY3JpcHQg
aXMgYWxsb2NhbHRlZCBhIGJsb2NrIG9mIDB4ODAgY2hhcmFjdGVycy4KKyAgICAgICAgaWYgKGlu
ZGljUGFnZU9yZGVySW5kZXggPCAoc2l6ZW9mKGluZGljVW5pY29kZVBhZ2VGb250cykgLyBzaXpl
b2YoQXRvbWljU3RyaW5nKikpKSB7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcqIGluZGljRm9u
dFN0cmluZyA9IGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gaW5kaWNV
bmljb2RlUGFnZUZvbnRzQm9sZFtpbmRpY1BhZ2VPcmRlckluZGV4XSA6IGluZGljVW5pY29kZVBh
Z2VGb250c1tpbmRpY1BhZ2VPcmRlckluZGV4XTsKKyAgICAgICAgICAgIGlmIChpbmRpY0ZvbnRT
dHJpbmcpCisgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0
YShkZXNjcmlwdGlvbiwgKmluZGljRm9udFN0cmluZywgZmFsc2UsIERvTm90UmV0YWluKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSBpZiAodXNlVGhhaUZvbnQpIHsKKyAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGhhaVBsYWluKCJUaG9uYnVyaSIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXRvbWljU3RyaW5nPiB0aGFpQm9sZCgiVGhvbmJ1cmktQm9sZCIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hl
ZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdo
dCgpKSA/IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0g
ZWxzZSBpZiAodXNlVGliZXRhbkZvbnQpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4gdGliZXRhblBsYWluKCJLYWlsYXNhIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IHRpYmV0YW5Cb2xkKCJLYWlsYXNhLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKKyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0
YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyB0
aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFpbiwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICB9IGVs
c2UgaWYgKHVzZUNhbmFkaWFuQWJvcmlnaW5hbFN5bGxhYmljc0ZvbnQpIHsKKyAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY2FzUGxhaW4oIkV1cGhlbWlhVUNBUyIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjYXNCb2xkKCJFdXBoZW1pYVVDQVMtQm9sZCIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzaW1wbGVGb250RGF0
YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2Ny
aXB0aW9uLndlaWdodCgpKSA/IGNhc0JvbGQgOiBjYXNQbGFpbiwgZmFsc2UsIERvTm90UmV0YWlu
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBhcHBsZUNvbG9yRW1vamkoIkFwcGxlQ29sb3JFbW9qaSIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBpZiAoIXVzZUVtb2ppRm9udCkgeworICAgICAg
ICAgICAgaWYgKCFDRkNoYXJhY3RlclNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihwaG9uZUZhbGxi
YWNrQ2hhcmFjdGVyU2V0KCksIGMpKQorICAgICAgICAgICAgICAgIHVzZUVtb2ppRm9udCA9IENG
Q2hhcmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKGFwcGxlQ29sb3JFbW9qaUNoYXJhY3Rl
clNldCgpLCBjKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXNlRW1vamlGb250KQorICAgICAg
ICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgYXBw
bGVDb2xvckVtb2ppLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0KKworICAgIGlmIChzaW1w
bGVGb250RGF0YSkKKyAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJlbGVhc2UoKTsKKwor
ICAgIHJldHVybiBnZXROb25SZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVzY3JpcHRp
b24pOworfQorCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7Cisg
ICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBi
YXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4KKyAgICAvLyB0aGUgcmVxdWVzdGVk
IG5hbWVzLiBGb3IgZXhhbXBsZSwgd2UnbGwgbWF0Y2ggYW55IG5hbWUgdGhhdCBjb250YWlucyAi
QXJhYmljIiB0byBHZWV6YSBQcm8uCisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVG
b250RGF0YTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFtaWx5
Q291bnQoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gZGVz
Y3JpcHRpb24uZmFtaWx5QXQoaSk7CisgICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gU3Vic3RpdHV0ZSB0aGUgZGVmYXVsdCBt
b25vc3BhY2UgZm9udCBmb3Igd2VsbC1rbm93biBtb25vc3BhY2UgZm9udHMuCisgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1vbmFjbygibW9uYWNvIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IG1lbmxvKCJtZW5sbyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1vbmFjbykgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UoZmFtaWx5LCBtZW5sbykpIHsKKyAgICAgICAgICAgIHNpbXBsZUZvbnREYXRh
ID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGNvdXJpZXIpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBTdWJzdGl0dXRlIFZlcmRhbmEgZm9y
IEx1Y2lkYSBHcmFuZGUuCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IGx1Y2lkYUdyYW5kZSgibHVjaWRhIGdyYW5kZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIGx1Y2lkYUdyYW5kZSkpIHsK
KyAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRp
b24sIHZlcmRhbmEpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhcmFiaWMoQVNDSUlMaXRlcmFsKCJBcmFi
aWMiKSk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHBhc2h0byhBU0NJ
SUxpdGVyYWwoIlBhc2h0byIpKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmlu
Zz4gdXJkdShBU0NJSUxpdGVyYWwoIlVyZHUiKSk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcqIG1h
dGNoV29yZHNbM10gPSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgp
IH07CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGdlZXphUGxh
aW4oIkdlZXphUHJvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGdlZXphQm9sZCgiR2VlemFQ
cm8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBm
b3IgKGludCBqID0gMDsgaiA8IDMgJiYgIXNpbXBsZUZvbnREYXRhOyArK2opCisgICAgICAgICAg
ICBpZiAoZmFtaWx5LmNvbnRhaW5zKCptYXRjaFdvcmRzW2pdLCBmYWxzZSkpCisgICAgICAgICAg
ICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNG
b250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQgOiBnZWV6YVBs
YWluKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgpOworfQor
CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxs
YmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJl
dGFpbiBzaG91bGRSZXRhaW4pCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gZmFsbGJhY2tGb250RmFtaWx5KCIuUGhvbmVGYWxsYmFjayIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShmb250
RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9udEZhbWlseSwgZmFsc2UsIHNob3VsZFJldGFpbik7Cit9
CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q3VzdG9tRmFsbGJhY2tGb250KGNv
bnN0IFVJbnQzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAg
IEFTU0VSVChyZXF1aXJlc0N1c3RvbUZhbGxiYWNrRm9udChjKSk7CisgICAgaWYgKGMgPT0gQXBw
bGVMb2dvKSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhl
bHZldGljYUZhbWlseSgiSGVsdmV0aWNhIE5ldWUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICAgICAgcmV0dXJuIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVz
Y3JpcHRpb24sIGhlbHZldGljYUZhbWlseSk7CisgICAgfQorICAgIGlmIChjID09IGJsYWNrQ2ly
Y2xlKSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGxvY2tD
bG9ja0ZhbWlseSgiTG9ja0Nsb2NrLUxpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgICAgIHJldHVybiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGRlc2Ny
aXB0aW9uLCBsb2NrQ2xvY2tGYW1pbHkpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
Kworc3RhdGljIGlubGluZSBGb250VHJhaXRzTWFzayB0b1RyYWl0c01hc2soQ1RGb250U3ltYm9s
aWNUcmFpdHMgY3RGb250VHJhaXRzKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxGb250VHJh
aXRzTWFzaz4oKChjdEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpID8gRm9udFN0eWxl
SXRhbGljTWFzayA6IEZvbnRTdHlsZU5vcm1hbE1hc2spCisgICAgICAgIHwgRm9udFZhcmlhbnRO
b3JtYWxNYXNrCisgICAgICAgIC8vIEZvbnRXZWlnaHQ2MDAgb3IgaGlnaGVyIGlzIGJvbGQgZm9y
IENURm9udHMsIHNvIGNob29zZSBtaWRkbGUgdmFsdWVzIGZvcgorICAgICAgICAvLyBib2xkICg2
MDAtOTAwKSBhbmQgbm9uLWJvbGQgKDEwMC01MDApCisgICAgICAgIHwgKChjdEZvbnRUcmFpdHMg
JiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHQ3MDBNYXNrIDogRm9udFdlaWdodDMwME1h
c2spKTsKK30KKwordm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCit7Cisg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lU3RyID0gZmFtaWx5TmFtZS5zdHJp
bmcoKS5jcmVhdGVDRlN0cmluZygpOworICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IEB7
IChpZClrQ1RGb250RmFtaWx5TmFtZUF0dHJpYnV0ZTogKE5TU3RyaW5nKilmYW1pbHlOYW1lU3Ry
LmdldCgpIH07CisgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnREZXNjcmlw
dG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoKENGRGlj
dGlvbmFyeVJlZilhdHRyaWJ1dGVzKSk7CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IG1hdGNoZWRE
ZXNjcmlwdG9ycyA9IGFkb3B0TlMoKE5TQXJyYXkgKilDVEZvbnREZXNjcmlwdG9yQ3JlYXRlTWF0
Y2hpbmdGb250RGVzY3JpcHRvcnMoZm9udERlc2NyaXB0b3IuZ2V0KCksIG51bGxwdHIpKTsKKwor
ICAgIE5TSW50ZWdlciBudW1NYXRjaGVzID0gW21hdGNoZWREZXNjcmlwdG9ycy5nZXQoKSBjb3Vu
dF07CisgICAgaWYgKCFtYXRjaGVkRGVzY3JpcHRvcnMgfHwgIW51bU1hdGNoZXMpCisgICAgICAg
IHJldHVybjsKKworICAgIGZvciAoTlNJbnRlZ2VyIGkgPSAwOyBpIDwgbnVtTWF0Y2hlczsgKytp
KSB7CisgICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHRyYWl0cyA9IGFkb3B0Q0Yo
KENGRGljdGlvbmFyeVJlZilDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZSgoQ1RGb250RGVz
Y3JpcHRvclJlZilbbWF0Y2hlZERlc2NyaXB0b3JzLmdldCgpIG9iamVjdEF0SW5kZXg6aV0sIGtD
VEZvbnRUcmFpdHNBdHRyaWJ1dGUpKTsKKyAgICAgICAgQ0ZOdW1iZXJSZWYgcmVzdWx0UmVmID0g
KENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHRyYWl0cy5nZXQoKSwga0NURm9udFN5
bWJvbGljVHJhaXQpOworICAgICAgICBpZiAocmVzdWx0UmVmKSB7CisgICAgICAgICAgICBDVEZv
bnRTeW1ib2xpY1RyYWl0cyBzeW1ib2xpY1RyYWl0czsKKyAgICAgICAgICAgIENGTnVtYmVyR2V0
VmFsdWUocmVzdWx0UmVmLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmc3ltYm9saWNUcmFpdHMpOworICAg
ICAgICAgICAgdHJhaXRzTWFza3MuYXBwZW5kKHRvVHJhaXRzTWFzayhzeW1ib2xpY1RyYWl0cykp
OworICAgICAgICB9CisgICAgfQorfQorCitmbG9hdCBGb250Q2FjaGU6OndlaWdodE9mQ1RGb250
KENURm9udFJlZiBmb250KQoreworICAgIGZsb2F0IHJlc3VsdCA9IDA7CisgICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gdHJhaXRzID0gYWRvcHRDRihDVEZvbnRDb3B5VHJhaXRzKGZvbnQp
KTsKKyAgICBpZiAoIXRyYWl0cykKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIENGTnVt
YmVyUmVmIHJlc3VsdFJlZiA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZSh0cmFp
dHMuZ2V0KCksIGtDVEZvbnRXZWlnaHRUcmFpdCk7CisgICAgaWYgKHJlc3VsdFJlZikKKyAgICAg
ICAgQ0ZOdW1iZXJHZXRWYWx1ZShyZXN1bHRSZWYsIGtDRk51bWJlckZsb2F0VHlwZSwgJnJlc3Vs
dCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1RGb250UmVmIGNyZWF0ZUNU
Rm9udFdpdGhUZXh0U3R5bGUoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBDVEZvbnRTeW1ib2xp
Y1RyYWl0cyB0cmFpdHMsIENHRmxvYXQgc2l6ZSkKK3sKKyAgICBpZiAoZmFtaWx5TmFtZS5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0
cyBzeW1ib2xpY1RyYWl0cyA9IDA7CisgICAgaWYgKHRyYWl0cyAmIGtDVEZvbnRCb2xkVHJhaXQp
CisgICAgICAgIHN5bWJvbGljVHJhaXRzIHw9IGtDVEZvbnRCb2xkVHJhaXQ7CisgICAgaWYgKHRy
YWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykKKyAgICAgICAgc3ltYm9saWNUcmFpdHMgfD0ga0NU
Rm9udFRyYWl0SXRhbGljOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZVN0
ciA9IGZhbWlseU5hbWUuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250RGVz
Y3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVh
dGVXaXRoVGV4dFN0eWxlKGZhbWlseU5hbWVTdHIuZ2V0KCksIFJlbmRlclRoZW1lSU9TOjpjb250
ZW50U2l6ZUNhdGVnb3J5KCksIG51bGxwdHIpKTsKKyAgICBpZiAoc3ltYm9saWNUcmFpdHMpCisg
ICAgICAgIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29w
eVdpdGhTeW1ib2xpY1RyYWl0cyhmb250RGVzY3JpcHRvci5nZXQoKSwgc3ltYm9saWNUcmFpdHMs
IHN5bWJvbGljVHJhaXRzKSk7CisKKyAgICByZXR1cm4gQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNj
cmlwdG9yKGZvbnREZXNjcmlwdG9yLmdldCgpLCBzaXplLCBudWxscHRyKTsKK30KKworc3RhdGlj
IENURm9udFJlZiBjcmVhdGVDVEZvbnRXaXRoRmFtaWx5TmFtZUFuZFdlaWdodChjb25zdCBTdHJp
bmcmIGZhbWlseU5hbWUsIENURm9udFN5bWJvbGljVHJhaXRzIHRyYWl0cywgZmxvYXQgc2l6ZSwg
dWludDE2X3Qgd2VpZ2h0KQoreworICAgIGlmIChmYW1pbHlOYW1lLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IHN5c3RlbVVJRm9udFdpdGhXZWJLaXRQcmVmaXgoIi13ZWJraXQtc3lzdGVtLWZvbnQiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBzeXN0ZW1VSUZvbnRXaXRoQXBwbGVQcmVmaXgoIi1hcHBsZS1z
eXN0ZW0tZm9udCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lLCBzeXN0ZW1VSUZvbnRXaXRoV2ViS2l0UHJl
Zml4KSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lLCBzeXN0ZW1VSUZvbnRXaXRoQXBw
bGVQcmVmaXgpKSB7CisgICAgICAgIENURm9udFVJRm9udFR5cGUgZm9udFR5cGUgPSBrQ1RGb250
VUlGb250U3lzdGVtOworICAgICAgICBpZiAod2VpZ2h0ID4gMzAwKSB7CisgICAgICAgICAgICAv
LyBUaGUgY29tbWVudCBiZWxvdyBoYXMgYmVlbiBjb3BpZWQgZnJvbSBDb3JlVGV4dC9VSUZvdW5k
YXRpb24uIEhvd2V2ZXIsIGluIFdlYktpdCB3ZSBzeW50aGVzaXplIHRoZSBvYmxpcXVlLAorICAg
ICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGludmVzdGlnYXRlIHRoZSByZXN1bHQgPHJkYXI6Ly9w
cm9ibGVtLzE0NDQ5MzQwPjoKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IGRvIGJvbGQtaXRhbGlj
IGZvciBzeXN0ZW0gZm9udHMuIElmIHlvdSBhc2sgZm9yIGl0LCB3ZSdsbCBhc3N1bWUgdGhhdCB5
b3UncmUganVzdCBraWRkaW5nIGFuZCB0aGF0IHlvdSByZWFsbHkgd2FudCBib2xkLiBUaGlzIGlz
IGEgZmVhdHVyZS4KKyAgICAgICAgICAgIGlmICh0cmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKQor
ICAgICAgICAgICAgICAgIGZvbnRUeXBlID0ga0NURm9udFVJRm9udEVtcGhhc2l6ZWRTeXN0ZW07
CisgICAgICAgICAgICBlbHNlIGlmICh0cmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpCisgICAg
ICAgICAgICAgICAgZm9udFR5cGUgPSBzdGF0aWNfY2FzdDxDVEZvbnRVSUZvbnRUeXBlPihrQ1RG
b250VUlGb250U3lzdGVtSXRhbGljKTsKKyAgICAgICAgfSBlbHNlIGlmICh3ZWlnaHQgPiAyNTAp
CisgICAgICAgICAgICBmb250VHlwZSA9IHN0YXRpY19jYXN0PENURm9udFVJRm9udFR5cGU+KGtD
VEZvbnRVSUZvbnRTeXN0ZW1MaWdodCk7CisgICAgICAgIGVsc2UgaWYgKHdlaWdodCA+IDE1MCkK
KyAgICAgICAgICAgIGZvbnRUeXBlID0gc3RhdGljX2Nhc3Q8Q1RGb250VUlGb250VHlwZT4oa0NU
Rm9udFVJRm9udFN5c3RlbVRoaW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmb250VHlw
ZSA9IHN0YXRpY19jYXN0PENURm9udFVJRm9udFR5cGU+KGtDVEZvbnRVSUZvbnRTeXN0ZW1VbHRy
YUxpZ2h0KTsKKyAgICAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnREZXNj
cmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlRm9yVUlUeXBlKGZvbnRUeXBl
LCBzaXplLCBudWxscHRyKSk7CisgICAgICAgIHJldHVybiBDVEZvbnRDcmVhdGVXaXRoRm9udERl
c2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpOworICAgIH0KKwor
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZVN0ciA9IGZhbWlseU5hbWUuY3Jl
YXRlQ0ZTdHJpbmcoKTsKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyByZXF1ZXN0ZWRUcmFpdHMg
PSAoQ1RGb250U3ltYm9saWNUcmFpdHMpKHRyYWl0cyAmIChrQ1RGb250Qm9sZFRyYWl0IHwga0NU
Rm9udEl0YWxpY1RyYWl0KSk7CisgICAgcmV0dXJuIENURm9udENyZWF0ZUZvckNTUyhmYW1pbHlO
YW1lU3RyLmdldCgpLCB3ZWlnaHQsIHJlcXVlc3RlZFRyYWl0cywgc2l6ZSk7Cit9CisKK3N0YXRp
YyB1aW50MTZfdCB0b0NURm9udFdlaWdodChGb250V2VpZ2h0IGZvbnRXZWlnaHQpCit7CisgICAg
c3dpdGNoIChmb250V2VpZ2h0KSB7CisgICAgY2FzZSBGb250V2VpZ2h0MTAwOgorICAgICAgICBy
ZXR1cm4gMTAwOworICAgIGNhc2UgRm9udFdlaWdodDIwMDoKKyAgICAgICAgcmV0dXJuIDIwMDsK
KyAgICBjYXNlIEZvbnRXZWlnaHQzMDA6CisgICAgICAgIHJldHVybiAzMDA7CisgICAgY2FzZSBG
b250V2VpZ2h0NDAwOgorICAgICAgICByZXR1cm4gNDAwOworICAgIGNhc2UgRm9udFdlaWdodDUw
MDoKKyAgICAgICAgcmV0dXJuIDUwMDsKKyAgICBjYXNlIEZvbnRXZWlnaHQ2MDA6CisgICAgICAg
IHJldHVybiA2MDA7CisgICAgY2FzZSBGb250V2VpZ2h0NzAwOgorICAgICAgICByZXR1cm4gNzAw
OworICAgIGNhc2UgRm9udFdlaWdodDgwMDoKKyAgICAgICAgcmV0dXJuIDgwMDsKKyAgICBjYXNl
IEZvbnRXZWlnaHQ5MDA6CisgICAgICAgIHJldHVybiA5MDA7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIDQwMDsKKyAgICB9Cit9CisKK1Bhc3NPd25QdHI8Rm9udFBsYXRmb3JtRGF0YT4g
Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKK3sKKyAgICAvLyBT
cGVjaWFsIGNhc2UgZm9yICJDb3VyaWVyIiBmb250LiBXZSB1c2VkIHRvIGhhdmUgb25seSBhbiBv
YmxpcXVlIHZhcmlhbnQgb24gaU9TLCBzbyBwcmlvciB0bworICAgIC8vIGlPUyA2LjAsIHdlIGRp
c2FsbG93ZWQgaXRzIHVzZSBoZXJlLiBXZSdsbCBmYWxsIGJhY2sgb24gIkNvdXJpZXIgTmV3Ii4g
PHJkYXI6Ly9wcm9ibGVtLzUxMTY0NzcmMTA4NTAyMjc+CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gY291cmllcigiQ291cmllciIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBib29sIHNob3VsZERpc2FsbG93Q291cmllciA9
ICFpb3NFeGVjdXRhYmxlV2FzTGlua2VkT25PckFmdGVyVmVyc2lvbih3a0lPU1N5c3RlbVZlcnNp
b25fNl8wKTsKKyAgICBpZiAoc2hvdWxkRGlzYWxsb3dDb3VyaWVyICYmIGVxdWFsSWdub3JpbmdD
YXNlKGZhbWlseSwgY291cmllcikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ1RG
b250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gMDsKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLml0
YWxpYygpKQorICAgICAgICB0cmFpdHMgfD0ga0NURm9udFRyYWl0SXRhbGljOworICAgIGlmIChp
c0ZvbnRXZWlnaHRCb2xkKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSkpCisgICAgICAgIHRyYWl0
cyB8PSBrQ1RGb250VHJhaXRCb2xkOworICAgIGZsb2F0IHNpemUgPSBmb250RGVzY3JpcHRpb24u
Y29tcHV0ZWRQaXhlbFNpemUoKTsKKworICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IGN0Rm9udDsK
KyAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoIlVJQ1RGb250VGV4dFN0eWxlIikpCisgICAgICAg
IGN0Rm9udCA9IGFkb3B0Q0YoY3JlYXRlQ1RGb250V2l0aFRleHRTdHlsZShmYW1pbHksIHRyYWl0
cywgc2l6ZSkpOworICAgIGVsc2UKKyAgICAgICAgY3RGb250ID0gYWRvcHRDRihjcmVhdGVDVEZv
bnRXaXRoRmFtaWx5TmFtZUFuZFdlaWdodChmYW1pbHksIHRyYWl0cywgc2l6ZSwgdG9DVEZvbnRX
ZWlnaHQoZm9udERlc2NyaXB0aW9uLndlaWdodCgpKSkpOworICAgIGlmICghY3RGb250KQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENURm9udFN5bWJvbGljVHJhaXRzIGFjdHVhbFRy
YWl0cyA9IDA7CisgICAgaWYgKGlzRm9udFdlaWdodEJvbGQoZm9udERlc2NyaXB0aW9uLndlaWdo
dCgpKSB8fCBmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCisgICAgICAgIGFjdHVhbFRyYWl0cyA9
IENURm9udEdldFN5bWJvbGljVHJhaXRzKGN0Rm9udC5nZXQoKSk7CisKKyAgICBib29sIGlzQXBw
bGVDb2xvckVtb2ppID0gQ1RGb250SXNBcHBsZUNvbG9yRW1vamkoY3RGb250LmdldCgpKTsKKwor
ICAgIGJvb2wgc3ludGhldGljQm9sZCA9ICh0cmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKSAmJiAh
KGFjdHVhbFRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpICYmICFpc0FwcGxlQ29sb3JFbW9qaTsK
KyAgICBib29sIHN5bnRoZXRpY09ibGlxdWUgPSAodHJhaXRzICYga0NURm9udFRyYWl0SXRhbGlj
KSAmJiAhKGFjdHVhbFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykgJiYgIWlzQXBwbGVDb2xv
ckVtb2ppOworCisgICAgRm9udFBsYXRmb3JtRGF0YSogcmVzdWx0ID0gbmV3IEZvbnRQbGF0Zm9y
bURhdGEoY3RGb250LmdldCgpLCBzaXplLCBmb250RGVzY3JpcHRpb24udXNlUHJpbnRlckZvbnQo
KSwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgZm9udERlc2NyaXB0aW9uLm9yaWVu
dGF0aW9uKCksIGZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSk7CisgICAgaWYgKGlzQXBw
bGVDb2xvckVtb2ppKQorICAgICAgICByZXN1bHQtPm1faXNFbW9qaSA9IHRydWU7CisgICAgcmV0
dXJuIGFkb3B0UHRyKHJlc3VsdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJ
T1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJ
T1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zY2Y4YmRjOTQ4Zjg4NmJkYWUzMmE0NzdiMTA3YWYyZGVlMmI3ZGMw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9z
L0ZvbnRTZXJ2aWNlc0lPUy5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgRm9udFNlcnZpY2Vz
SU9TX2gKKyNkZWZpbmUgRm9udFNlcnZpY2VzSU9TX2gKKworI2ltcG9ydCA8Q29yZVRleHQvQ29y
ZVRleHQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250U2VydmljZXNJT1Mg
eworcHVibGljOgorICAgIEZvbnRTZXJ2aWNlc0lPUyhDVEZvbnRSZWYpOworICAgIENHRmxvYXQg
YXNjZW50KCkgeyByZXR1cm4gbV9hc2NlbnQ7IH0KKyAgICBDR0Zsb2F0IGRlc2NlbnQoKSB7IHJl
dHVybiBtX2Rlc2NlbnQ7IH0KKyAgICBDR0Zsb2F0IGxpbmVHYXAoKSB7IHJldHVybiBtX2xpbmVH
YXA7IH0KKyAgICBDR0Zsb2F0IGxpbmVTcGFjaW5nKCkgeyByZXR1cm4gbV9saW5lU3BhY2luZzsg
fQorICAgIENHRmxvYXQgeEhlaWdodCgpIHsgcmV0dXJuIG1feEhlaWdodDsgfQorICAgIHVuc2ln
bmVkIHVuaXRzUGVyRW0oKSB7IHJldHVybiBtX3VuaXRzUGVyRW07IH0KKworcHJpdmF0ZToKKyAg
ICBDR0Zsb2F0IG1fYXNjZW50OworICAgIENHRmxvYXQgbV9kZXNjZW50OworICAgIENHRmxvYXQg
bV9saW5lR2FwOworICAgIENHRmxvYXQgbV9saW5lU3BhY2luZzsKKyAgICBDR0Zsb2F0IG1feEhl
aWdodDsKKyAgICB1bnNpZ25lZCBtX3VuaXRzUGVyRW07Cit9OworCit9CisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJ
T1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udFNlcnZpY2Vz
SU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmMyMjJiNTI1MWNlYTljMWVhYTQ3MGQ2MWFjNjRkNDk1NjI1YjBm
MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvRm9udFNlcnZpY2VzSU9TLm1tCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiRm9udFNlcnZpY2VzSU9TLmgiCisKKyNpbXBvcnQgIkZvbnRNZXRyaWNz
LmgiCisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW1wb3J0IDxDb3Jl
R3JhcGhpY3MvQ29yZUdyYXBoaWNzUHJpdmF0ZS5oPgorI2ltcG9ydCA8bWFjaC1vL2R5bGRfcHJp
di5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBjb25zdCBmbG9hdCBrTGluZUhlaWdodEFkanVzdG1lbnQgPSAwLjE1ZjsKKworc3Rh
dGljIGJvb2wgc2hvdWxkVXNlQWRqdXN0bWVudChDVEZvbnRSZWYgZm9udCwgYm9vbCBpc2lPUzdP
ckxhdGVyKQoreworICAgIFJldGFpblB0cjxOU1N0cmluZz4gZmFtaWx5TmFtZSA9IGFkb3B0TlMo
KE5TU3RyaW5nICopQ1RGb250Q29weUZhbWlseU5hbWUoZm9udCkpOworICAgIGlmICghW2ZhbWls
eU5hbWUgbGVuZ3RoXSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKFtmYW1pbHlO
YW1lLmdldCgpIGNvbXBhcmU6QCJUaW1lcyIgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJj
aF0gPT0gTlNPcmRlcmVkU2FtZQorICAgICAgICB8fCBbZmFtaWx5TmFtZS5nZXQoKSBjb21wYXJl
OkAiSGVsdmV0aWNhIiBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXSA9PSBOU09yZGVy
ZWRTYW1lCisgICAgICAgIHx8IFtmYW1pbHlOYW1lLmdldCgpIGNvbXBhcmU6QCIuSGVsdmV0aWNh
IE5ldWVVSSIgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0gPT0gTlNPcmRlcmVkU2Ft
ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFpc2lPUzdPckxhdGVyICYmIFtmYW1p
bHlOYW1lLmdldCgpIGNvbXBhcmU6QCIuSGVsdmV0aWNhIE5ldWVVSUxlZ2FjeSIgb3B0aW9uczpO
U0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0gPT0gTlNPcmRlcmVkU2FtZSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGlzQ291cmllcihD
VEZvbnRSZWYgZm9udCkKK3sKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGZhbWlseU5hbWUgPSBh
ZG9wdE5TKChOU1N0cmluZyAqKUNURm9udENvcHlGYW1pbHlOYW1lKGZvbnQpKTsKKyAgICBpZiAo
IVtmYW1pbHlOYW1lIGxlbmd0aF0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
W2ZhbWlseU5hbWUuZ2V0KCkgY29tcGFyZTpAIkNvdXJpZXIiIG9wdGlvbnM6TlNDYXNlSW5zZW5z
aXRpdmVTZWFyY2hdID09IE5TT3JkZXJlZFNhbWU7Cit9CisKK0ZvbnRTZXJ2aWNlc0lPUzo6Rm9u
dFNlcnZpY2VzSU9TKENURm9udFJlZiBmb250KQoreworICAgIENHRm9udERlc2NyaXB0b3IgZGVz
Y3JpcHRvcjsKKyAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBjZ0ZvbnQgPSBhZG9wdENGKENURm9u
dENvcHlHcmFwaGljc0ZvbnQoZm9udCwgTlVMTCkpOworICAgIG1feEhlaWdodCA9IENHRm9udEdl
dERlc2NyaXB0b3IoY2dGb250LmdldCgpLCAmZGVzY3JpcHRvcikgPyAoZGVzY3JpcHRvci54SGVp
Z2h0IC8gMTAwMCkgKiBDVEZvbnRHZXRTaXplKGZvbnQpIDogMDsKKyAgICBtX3VuaXRzUGVyRW0g
PSBDVEZvbnRHZXRVbml0c1BlckVtKGZvbnQpOworICAgIENHRmxvYXQgbGluZUdhcDsKKyAgICBD
R0Zsb2F0IGFzY2VudDsKKyAgICBDR0Zsb2F0IGRlc2NlbnQ7CisgICAgc3RhdGljIGJvb2wgaXNp
T1M3T3JMYXRlciA9IGR5bGRfZ2V0X3Byb2dyYW1fc2RrX3ZlcnNpb24oKSA+PSBEWUxEX0lPU19W
RVJTSU9OXzdfMDsKKyAgICBpZiAoaXNpT1M3T3JMYXRlcikgeworICAgICAgICAvLyBVc2UgQ29y
ZVRleHQgQVBJIGluIGlPUyA3LgorICAgICAgICBhc2NlbnQgPSBDVEZvbnRHZXRBc2NlbnQoZm9u
dCk7CisgICAgICAgIGRlc2NlbnQgPSBDVEZvbnRHZXREZXNjZW50KGZvbnQpOworICAgICAgICBs
aW5lR2FwID0gQ1RGb250R2V0TGVhZGluZyhmb250KTsKKyAgICB9IGVsc2UgeworICAgICAgICBm
bG9hdCBwb2ludFNpemUgPSBDVEZvbnRHZXRTaXplKGZvbnQpOworICAgICAgICBjb25zdCBDR0Zv
bnRITWV0cmljcyAqbWV0cmljcyA9IENHRm9udEdldEhNZXRyaWNzKGNnRm9udC5nZXQoKSk7Cisg
ICAgICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBDR0ZvbnRHZXRVbml0c1BlckVtKGNnRm9udC5n
ZXQoKSk7CisKKyAgICAgICAgbGluZUdhcCA9IChkeWxkX2dldF9wcm9ncmFtX3Nka192ZXJzaW9u
KCkgPj0gRFlMRF9JT1NfVkVSU0lPTl8zXzApID8gc2NhbGVFbVRvVW5pdHMobWV0cmljcy0+bGlu
ZUdhcCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUgOiAwLjA7CisKKyAgICAgICAgYm9vbCBpc2lP
UzZPckxhdGVyID0gZHlsZF9nZXRfcHJvZ3JhbV9zZGtfdmVyc2lvbigpID49IERZTERfSU9TX1ZF
UlNJT05fNl8wOworICAgICAgICBpZiAoIWlzaU9TNk9yTGF0ZXIgfHwgIWlzQ291cmllcihmb250
KSkgeworICAgICAgICAgICAgYXNjZW50ID0gKHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3MtPmFzY2Vu
dCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOworICAgICAgICAgICAgZGVzY2VudCA9ICgtc2Nh
bGVFbVRvVW5pdHMobWV0cmljcy0+ZGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRm9yIENvdXJpZXIsIHdlIHVzZSBDb3Vy
aWVyIE5ldydzIGV4YWN0IHZhbHVlcywgYmVjYXVzZSBpbiBpT1MgNS4xIGFuZCBlYXJsaWVyLAor
ICAgICAgICAgICAgLy8gQ291cmllciBOZXcgd2FzIHN1YnN0aXR1dGVkIGZvciBDb3VyaWVyIGJ5
IFdlYktpdC4KKyAgICAgICAgICAgIGFzY2VudCA9IChzY2FsZUVtVG9Vbml0cygxNzA1LCAyMDQ4
KSAqIHBvaW50U2l6ZSk7CisgICAgICAgICAgICBkZXNjZW50ID0gKHNjYWxlRW1Ub1VuaXRzKDYx
NSwgMjA0OCkgKiBwb2ludFNpemUpOworICAgICAgICB9CisgICAgfQorICAgIENHRmxvYXQgYWRq
dXN0bWVudCA9IChzaG91bGRVc2VBZGp1c3RtZW50KGZvbnQsIGlzaU9TN09yTGF0ZXIpKSA/IGNl
aWwoKGFzY2VudCArIGRlc2NlbnQpICoga0xpbmVIZWlnaHRBZGp1c3RtZW50KSA6IDA7CisKKyAg
ICBtX2FzY2VudCA9IGFzY2VudCArIGFkanVzdG1lbnQ7CisgICAgbV9kZXNjZW50ID0gZGVzY2Vu
dDsKKyAgICBtX2xpbmVHYXAgPSBjZWlsZihsaW5lR2FwKTsKKyAgICBtX2xpbmVTcGFjaW5nID0g
Y2VpbChhc2NlbnQpICsgYWRqdXN0bWVudCArIGNlaWwoZGVzY2VudCkgKyBtX2xpbmVHYXA7Cit9
CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBoaWNzQ29udGV4dDNESU9TLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvR3JhcGhpY3NDb250ZXh0M0RJT1MuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iMzNiYTA5ZDU5OWM4Zjg1ZDQ1MGVkZmZmZmIyOTNkMWI3NWI0Njg5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBoaWNzQ29u
dGV4dDNESU9TLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR3JhcGhpY3ND
b250ZXh0M0RJT1NfaAorI2RlZmluZSBHcmFwaGljc0NvbnRleHQzRElPU19oCisKKyNkZWZpbmUg
Z2xCaW5kRnJhbWVidWZmZXJFWFQgZ2xCaW5kRnJhbWVidWZmZXIKKyNkZWZpbmUgZ2xCaW5kUmVu
ZGVyYnVmZmVyRVhUIGdsQmluZFJlbmRlcmJ1ZmZlcgorI2RlZmluZSBnbENoZWNrRnJhbWVidWZm
ZXJTdGF0dXNFWFQgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzCisjZGVmaW5lIGdsRGVsZXRlRnJh
bWVidWZmZXJzRVhUIGdsRGVsZXRlRnJhbWVidWZmZXJzCisjZGVmaW5lIGdsRGVsZXRlUmVuZGVy
YnVmZmVyc0VYVCBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMKKyNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlckVYVCBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyCisjZGVmaW5lIGdsRnJhbWVi
dWZmZXJUZXh0dXJlMkRFWFQgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRAorI2RlZmluZSBnbEdlbmVy
YXRlTWlwbWFwRVhUIGdsR2VuZXJhdGVNaXBtYXAKKyNkZWZpbmUgZ2xHZW5GcmFtZWJ1ZmZlcnNF
WFQgZ2xHZW5GcmFtZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZW5SZW5kZXJidWZmZXJzRVhUIGdsR2Vu
UmVuZGVyYnVmZmVycworI2RlZmluZSBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cml2RVhUIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYKKyNkZWZpbmUgZ2xH
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2
CisjZGVmaW5lIGdsSXNGcmFtZWJ1ZmZlckVYVCBnbElzRnJhbWVidWZmZXIKKyNkZWZpbmUgZ2xJ
c1JlbmRlcmJ1ZmZlckVYVCBnbElzUmVuZGVyYnVmZmVyCisjZGVmaW5lIGdsUmVuZGVyYnVmZmVy
U3RvcmFnZUVYVCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKKyNkZWZpbmUgZ2xSZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGVFWFQgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBUFBM
RQorCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCBHTF9DT0xPUl9BVFRBQ0hNRU5U
MAorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVCBHTF9ERVBUSDI0X1NURU5DSUw4X09F
UworI2RlZmluZSBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCAgR0xfREVQVEhfQVRUQUNITUVOVAor
I2RlZmluZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FQUExF
CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCBHTF9GUkFNRUJVRkZFUl9DT01Q
TEVURQorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9FWFQgR0xfRlJBTUVCVUZGRVIKKyNkZWZpbmUg
R0xfTUFYX1NBTVBMRVNfRVhUIEdMX01BWF9TQU1QTEVTX0FQUExFCisjZGVmaW5lIEdMX1JFQURf
RlJBTUVCVUZGRVJfRVhUIEdMX1JFQURfRlJBTUVCVUZGRVJfQVBQTEUKKyNkZWZpbmUgR0xfUkVO
REVSQlVGRkVSX0VYVCBHTF9SRU5ERVJCVUZGRVIKKyNpZm5kZWYgR0xfUkdCOAorI2RlZmluZSBH
TF9SR0I4IEdMX1JHQgorI2VuZGlmCisjaWZuZGVmIEdMX1JHQkE4CisjZGVmaW5lIEdMX1JHQkE4
IEdMX1JHQkEKKyNlbmRpZgorI2RlZmluZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhUIEdMX1NU
RU5DSUxfQVRUQUNITUVOVAorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYgR0xf
UkdCQQorCisjZW5kaWYgLy8gR3JhcGhpY3NDb250ZXh0M0RJT1NfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzcyOGVk
YmZiZDcxNWE4YmRmZGJlY2Y3MjMwNDg4MTQ2Yzg0NzBkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KQEAgLTAsMCArMSw3
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiSWNvbi5oIgorCisjaW1wb3J0ICJCaXRtYXBJbWFnZS5o
IgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAg
ICAKK0ljb246Okljb24oQ0dJbWFnZVJlZiBpbWFnZSkKKyAgICA6IG1fY2dJbWFnZShpbWFnZSkK
K3sKK30KKworSWNvbjo6fkljb24oKQoreworfQorCitQYXNzUmVmUHRyPEljb24+IEljb246OmNy
ZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgLypmaWxlbmFtZXMqLykKK3sK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJ
Y29uRm9ySW1hZ2UoTmF0aXZlSW1hZ2VQdHIgaW1hZ2VSZWYpCit7CisgICAgaWYgKCFpbWFnZVJl
ZikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElj
b24oaW1hZ2VSZWYpKTsKK30KKwordm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIGlmIChjb250ZXh0LT5wYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CisKKyAgICBmbG9hdCB3aWR0aCA9IENHSW1h
Z2VHZXRXaWR0aChtX2NnSW1hZ2UuZ2V0KCkpOworICAgIGZsb2F0IGhlaWdodCA9IENHSW1hZ2VH
ZXRIZWlnaHQobV9jZ0ltYWdlLmdldCgpKTsKKyAgICBGbG9hdFNpemUgc2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBD
b2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlRGV2aWNlUkdCOworCisgICAgY29udGV4
dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uSGlnaCk7CisgICAg
Y29udGV4dC0+ZHJhd05hdGl2ZUltYWdlKG1fY2dJbWFnZS5nZXQoKSwgc2l6ZSwgY29sb3JTcGFj
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIDEuMGYsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIEJsZW5kTW9k
ZU5vcm1hbCwgRGVmYXVsdEltYWdlT3JpZW50YXRpb24pOworfQorCit9CisKKyNlbmRpZiAvLyBQ
TEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wNWJlNzNjZTlhMWNmZDQ2YTMyZTU1ZWE3ZDc1NWY0OWZlM2MwMTE5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0luYmFuZFRleHRU
cmFja1ByaXZhdGVBVkZJT1MuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TX2gKKyNkZWZpbmUgSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRklPU19oCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFBMQVRGT1JNKElPUykKKworI2lu
Y2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRklPUyA6IHB1YmxpYyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TPiBjcmVh
dGUoQVZGSW5iYW5kVHJhY2tQYXJlbnQqIHBhcmVudCwgaW50IGludGVybmFsSUQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSwgY29uc3QgU3RyaW5nJiB0eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TKHBhcmVudCwgaW50ZXJuYWxJRCwgbmFtZSwgbGFuZ3VhZ2UsIHR5cGUpKTsKKyAgICB9
CisKKyAgICB+SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUygpOworCisgICAgdmlydHVhbCBJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlOjpLaW5kIGtpbmQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIEF0b21pY1N0cmluZyBsYWJlbCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fbmFt
ZTsgfQorICAgIHZpcnR1YWwgQXRvbWljU3RyaW5nIGxhbmd1YWdlKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gbV9sYW5ndWFnZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0xlZ2FjeUNsb3NlZENh
cHRpb25zVHJhY2soKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIGludCBp
bnRlcm5hbElEKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbElEOyB9CisKK3Byb3RlY3RlZDoK
KyAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKEFWRkluYmFuZFRyYWNrUGFyZW50Kiwg
aW50LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UsIGNvbnN0IFN0
cmluZyYgdHlwZSk7CisKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIFN0cmluZyBtX2xhbmd1YWdl
OworICAgIFN0cmluZyBtX3R5cGU7CisgICAgaW50IG1faW50ZXJuYWxJRDsKK307Cit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoVklERU8pICYmIFBMQVRGT1JNKElPUykKKyNlbmRpZiAvLyBJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGSU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2lvcy9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJ
T1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTNhZmIyODAwMDhhNDk4ZTQzZGY2ZTVhNzdlZGY5ZTNiNDk3MzQw
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lv
cy9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLm1tCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgUExBVEZPUk0o
SU9TKQorCisjaW1wb3J0ICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLmgiCisKKyNpbXBv
cnQgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW1w
b3J0ICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmgiCisjaW1wb3J0ICJJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJ
T1M6OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MoQVZGSW5iYW5kVHJhY2tQYXJlbnQqIHBh
cmVudCwgaW50IGludGVybmFsSUQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBs
YW5ndWFnZSwgY29uc3QgU3RyaW5nJiB0eXBlKQorICAgIDogSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRihwYXJlbnQpCisgICAgLCBtX25hbWUobmFtZSkKKyAgICAsIG1fbGFuZ3VhZ2UobGFuZ3Vh
Z2UpCisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1faW50ZXJuYWxJRChpbnRlcm5hbElEKQor
eworfQorCitJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TOjp+SW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRklPUygpCit7Cit9CisKK0luYmFuZFRleHRUcmFja1ByaXZhdGU6OktpbmQgSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRklPUzo6a2luZCgpIGNvbnN0Cit7CisgICAgaWYgKFttX3R5cGUg
aXNFcXVhbFRvU3RyaW5nOkAiY2FwdGlvbnMiXSkKKyAgICAgICAgcmV0dXJuIENhcHRpb25zOwor
ICAgIGlmIChbbV90eXBlIGlzRXF1YWxUb1N0cmluZzpAInN1YnRpdGxlcyJdKQorICAgICAgICBy
ZXR1cm4gU3VidGl0bGVzOworCisgICAgcmV0dXJuIENhcHRpb25zOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL01lZGlhUGxheWVyUHJpdmF0ZUlPUy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL01lZGlhUGxheWVyUHJpdmF0ZUlPUy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhiYWMyNTc4Yzg2NGVkMWRkNDMxZjZkMTA2MWI1ODliN2IyNzBlMzAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvTWVkaWFQbGF5ZXJQcml2
YXRlSU9TLmgKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAsIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUlPU19oCisjZGVmaW5lIE1lZGlhUGxheWVy
UHJpdmF0ZUlPU19oCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFBMQVRGT1JNKElPUykKKworI2lu
Y2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXll
ci5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIk1lZGlhUGxh
eWVyUHJveHkuaCIKKyNpbmNsdWRlIDxvYmpjL3J1bnRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworT0JKQ19DTEFTUyBOU0Rp
Y3Rpb25hcnk7CitPQkpDX0NMQVNTIE5TTXV0YWJsZURpY3Rpb25hcnk7CitPQkpDX0NMQVNTIE5T
TnVtYmVyOworT0JKQ19DTEFTUyBOU09iamVjdDsKK09CSkNfQ0xBU1MgV2ViQ29yZU1lZGlhUGxh
eWVyTm90aWZpY2F0aW9uSGVscGVyOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M7CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUlP
UyA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UsIHB1YmxpYyBBVkZJbmJhbmRU
cmFja1BhcmVudCB7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5n
aW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKKyAgICB2aXJ0dWFsIH5NZWRpYVBsYXllclByaXZh
dGVJT1MoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkZWxpdmVyTm90aWZpY2F0aW9uKE1lZGlhUGxh
eWVyUHJveHlOb3RpZmljYXRpb25UeXBlKSBPVkVSUklERTsKKyAgICBib29sIGNhbGxiYWNrc0Rl
bGF5ZWQoKSB7IHJldHVybiBtX2RlbGF5Q2FsbGJhY2tzID4gMDsgfQorICAgIHZpcnR1YWwgdm9p
ZCBwcmVwYXJlVG9QbGF5KCkgT1ZFUlJJREU7CisgICAgdm9pZCBwcm9jZXNzRGVmZXJyZWRSZXF1
ZXN0cygpOworCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHZvaWQgaW5iYW5kVGV4dFRy
YWNrc0NoYW5nZWQoTlNBcnJheSAqKTsKKyAgICB2b2lkIHByb2Nlc3NJbmJhbmRUZXh0VHJhY2tD
dWUoTlNBcnJheSAqLCBkb3VibGUpOworICAgIHZvaWQgdGV4dFRyYWNrV2FzU2VsZWN0ZWRCeVBs
dWdpbihOU0RpY3Rpb25hcnkgKik7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBNZWRpYVBsYXll
clByaXZhdGVJT1MoTWVkaWFQbGF5ZXIqKTsKKworICAgIC8vIEVuZ2luZSBzdXBwb3J0CisgICAg
c3RhdGljIFBhc3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBjcmVhdGUoTWVk
aWFQbGF5ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0
cmluZz4mIHR5cGVzKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBw
b3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYpOworICAgIHN0YXRp
YyBib29sIGlzQXZhaWxhYmxlKCk7CisKKyAgICB2aXJ0dWFsIEludFNpemUgbmF0dXJhbFNpemUo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQXVkaW8oKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29sIGNhbkxvYWRQb3N0ZXIoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFBvc3Rlcihjb25zdCBTdHJp
bmcmIHVybCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJvbHMoYm9vbCkg
T1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuKCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGJvb2wpIE9WRVJSSURFOworCisgICAgdmly
dHVhbCB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiB1cmwpIE9WRVJSSURFOworI2lmIEVOQUJMRShN
RURJQV9TT1VSQ0UpCisgICAgdmlydHVhbCB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiwgUGFzc1Jl
ZlB0cjxIVE1MTWVkaWFTb3VyY2U+KSBPVkVSUklERSB7IH0KKyNlbmRpZgorICAgIHZpcnR1YWwg
dm9pZCBjYW5jZWxMb2FkKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGxheSgpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpIE9WRVJSSURFOworCisgICAgdmlydHVh
bCBib29sIHBhdXNlZCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBzZWVraW5n
KCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0IE9WRVJSSURF
OworCisgICAgdmlydHVhbCB2b2lkIHNlZWsoZmxvYXQgdGltZSkgT1ZFUlJJREU7CisgICAgdm9p
ZCBzZXRFbmRUaW1lKGZsb2F0KTsKKworICAgIGZsb2F0IHJhdGUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0UmF0ZShmbG9hdCBpblJhdGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgZmxv
YXQgdm9sdW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZShm
bG9hdCBpblZvbHVtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldE11dGVkKGJvb2wg
aW5NdXRlKSBPVkVSUklERTsKKworICAgIGludCBkYXRhUmF0ZSgpIGNvbnN0OworCisgICAgdmly
dHVhbCBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNv
bnN0IE9WRVJSSURFOworICAgIAorICAgIGZsb2F0IG1heFRpbWVCdWZmZXJlZCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3QgT1ZFUlJJREU7
CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QgT1ZFUlJJREU7
CisgICAgYm9vbCB0b3RhbEJ5dGVzS25vd24oKSBjb25zdDsKKyAgICB1bnNpZ25lZCB0b3RhbEJ5
dGVzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29sKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgT1ZFUlJJREU7Cisg
ICAgCisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmKSBPVkVSUklERTsKKworI2lmIEVOQUJMRShJT1NfQUlSUExBWSkKKyAgICB2aXJ0dWFsIGJv
b2wgaXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVzcygpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoKSBPVkVSUklERTsKKworICAg
IHZpcnR1YWwgYm9vbCBoYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cygpIGNvbnN0IE9WRVJSSURF
OworCisgICAgdmlydHVhbCBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEhhc1BsYXliYWNr
VGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKGJvb2wpIE9WRVJSSURFOworI2VuZGlmCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
QWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCBPVkVSUklERTsKKyNlbmRpZgorCisgICAgdmly
dHVhbCB2b2lkIHNldE1lZGlhUGxheWVyUHJveHkoV2ViTWVkaWFQbGF5ZXJQcm94eSopIE9WRVJS
SURFOworICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cygpOworCisgICAgdm9pZCBzZXRE
ZWxheUNhbGxiYWNrcyhib29sIGRvRGVsYXkpIHsgbV9kZWxheUNhbGxiYWNrcyArPSAoZG9EZWxh
eSA/IDEgOiAtMSk7IH0KKworICAgIGJvb2wgdXNpbmdOZXR3b3JrKCkgY29uc3QgeyByZXR1cm4g
bV91c2luZ05ldHdvcms7IH0KKyAgICBib29sIGluRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJu
IG1faW5GdWxsU2NyZWVuOyB9CisKKyAgICB2b2lkIGFkZERlZmVycmVkUmVxdWVzdChOU1N0cmlu
ZyAqbmFtZSwgaWQgdmFsdWUpOworCisgICAgdmlydHVhbCBTdHJpbmcgZW5naW5lRGVzY3JpcHRp
b24oKSBjb25zdCB7IFN0cmluZyhBU0NJSUxpdGVyYWwoImlPUyIpKTsgfQorCisgICAgdmlydHVh
bCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVhZHlGb3JQbGF5YmFjaygpIGNv
bnN0IE9WRVJSSURFOworCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHZpcnR1YWwgYm9v
bCByZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHNldFRleHRUcmFja1JlcHJlc2VudGF0aW9uKFRleHRUcmFja1JlcHJlc2VudGF0aW9uKik7
CisKKyAgICB2b2lkIGNsZWFyVGV4dFRyYWNrcygpOworICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0
VHJhY2soTlNOdW1iZXIgKik7CisgICAgdmlydHVhbCB2b2lkIHRyYWNrTW9kZUNoYW5nZWQoKSBP
VkVSUklERTsKKyAgICB2b2lkIHNldE91dE9mQmFuZFRleHRUcmFja3MoTlNBcnJheSAqKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzVGV4dFRyYWNrQ29udHJvbHMoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrTWVu
dUludGVyZmFjZT4gdGV4dFRyYWNrTWVudSgpOworCisgICAgdm9pZCBvdXRPZkJhbmRUZXh0VHJh
Y2tzQ2hhbmdlZCgpOworICAgIHZvaWQgdGV4dFRyYWNrV2FzU2VsZWN0ZWRCeU1lZGlhRWxlbWVu
dChQYXNzUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPik7CisjZW5kaWYKKworcHJpdmF0ZToKKwor
ICAgIGNsYXNzIFBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUyA6IHB1YmxpYyBQbGF0
Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlSU9TPiBjcmVhdGUoTWVk
aWFQbGF5ZXJQcml2YXRlSU9TKiBvd25lcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBQbGF0Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1Mob3duZXIpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgflBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVy
ZmFjZUlPUygpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCB0cmFja3NEaWRDaGFuZ2UoKSBPVkVS
UklERQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9vd25lcikKKyAgICAgICAgICAgICAg
ICBtX293bmVyLT5vdXRPZkJhbmRUZXh0VHJhY2tzQ2hhbmdlZCgpOworICAgICAgICB9CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHRyYWNrV2FzU2VsZWN0ZWQoUGFzc1JlZlB0cjxQbGF0Zm9ybVRl
eHRUcmFjaz4gdHJhY2spIE9WRVJSSURFCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX293
bmVyKQorICAgICAgICAgICAgICAgIG1fb3duZXItPnRleHRUcmFja1dhc1NlbGVjdGVkQnlNZWRp
YUVsZW1lbnQodHJhY2spOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldENs
aWVudChQbGF0Zm9ybVRleHRUcmFja01lbnVDbGllbnQqIGNsaWVudCkgT1ZFUlJJREUgeyBtX2Ns
aWVudCA9IGNsaWVudDsgfQorICAgICAgICBQbGF0Zm9ybVRleHRUcmFja01lbnVDbGllbnQqIGNs
aWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBQbGF0
Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1MoTWVkaWFQbGF5ZXJQcml2YXRlSU9TKik7CisK
KyAgICAgICAgUGxhdGZvcm1UZXh0VHJhY2tNZW51Q2xpZW50KiBtX2NsaWVudDsKKyAgICAgICAg
TWVkaWFQbGF5ZXJQcml2YXRlSU9TKiBtX293bmVyOworICAgIH07CisKKyAgICBNZWRpYVBsYXll
ciogbV9tZWRpYVBsYXllcjsKKyAgICBSZXRhaW5QdHI8TlNPYmplY3Q+IG1fbWVkaWFQbGF5ZXJI
ZWxwZXI7IC8vIFRoaXMgaXMgdGhlIE1lZGlhUGxheWVyUHJveHkuCisgICAgUmV0YWluUHRyPFdl
YkNvcmVNZWRpYVBsYXllck5vdGlmaWNhdGlvbkhlbHBlcj4gbV9vYmpjSGVscGVyOworICAgIFJl
dGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBtX2RlZmVycmVkUHJvcGVydGllczsKKworICAg
IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CisgICAgTWVkaWFQbGF5
ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOworCisgICAgZW51bSBCdWZmZXJpbmdTdGF0ZSB7
IEVtcHR5LCBVbmxpa2VsZXlUb0tlZXBVcCwgTGlrZWxleVRvS2VlcFVwLCBGdWxsIH07CisKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUyog
bV9jdXJyZW50VHJhY2s7CisgICAgVmVjdG9yPFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TPiA+IG1fdGV4dFRyYWNrczsKKyAgICBSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2tNZW51
SW50ZXJmYWNlSU9TPiBtX21lbnVJbnRlcmZhY2U7CisjZW5kaWYKKworICAgIGludCBtX2RlbGF5
Q2FsbGJhY2tzOworICAgIGludCBtX2NoYW5naW5nVm9sdW1lOworICAgIG11dGFibGUgdW5zaWdu
ZWQgbV9ieXRlc0xvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzczsKKyAgICBmbG9hdCBtX3Jl
cXVlc3RlZFJhdGU7CisgICAgQnVmZmVyaW5nU3RhdGUgbV9idWZmZXJpbmdTdGF0ZTsKKyAgICBi
b29sIG1fdmlzaWJsZSA6IDE7CisgICAgYm9vbCBtX3VzaW5nTmV0d29yayA6IDE7CisgICAgYm9v
bCBtX2luRnVsbFNjcmVlbiA6IDE7CisgICAgYm9vbCBtX3Nob3VsZFByZXBhcmVUb1BsYXkgOiAx
OworICAgIGJvb2wgbV9wcmVwYXJpbmdUb1BsYXkgOiAxOworICAgIGJvb2wgbV9wYXVzZVJlcXVl
c3RlZCA6IDE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlm
IC8vIE1lZGlhUGxheWVyUHJpdmF0ZUlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL01lZGlhUGxheWVyUHJpdmF0ZUlPUy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9NZWRpYVBsYXllclByaXZhdGVJT1MubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWVlYTcyNzlkYWVjZjAxY2QwOTExZTExZTUwNDdjNDkwMThkZDYwYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9NZWRpYVBsYXll
clByaXZhdGVJT1MubW0KQEAgLTAsMCArMSwxMjYzIEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYg
UExBVEZPUk0oSU9TKQorCisjaW1wb3J0ICJNZWRpYVBsYXllclByaXZhdGVJT1MuaCIKKworI2lt
cG9ydCAiR3JhcGhpY3NMYXllckNBLmgiCisjaW1wb3J0ICJJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJQbGF0Zm9ybVRleHRUcmFj
ay5oIgorI2ltcG9ydCAiVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uaCIKKyNpbXBvcnQgIlRpbWVS
YW5nZXMuaCIKKyNpbXBvcnQgIlVSTC5oIgorI2ltcG9ydCAiV0FLQXBwS2l0U3R1YnMuaCIKKyNp
bXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIKKyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3MuaD4KKyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFj
ZSBzdGQ7CisKK0BpbnRlcmZhY2UgV2ViQ29yZU1lZGlhUGxheWVyTm90aWZpY2F0aW9uSGVscGVy
IDogTlNPYmplY3QKK3sKKyAgICBNZWRpYVBsYXllclByaXZhdGVJT1MqIF9jbGllbnQ7CisgICAg
Qk9PTCBfZGVmZXJyZWRQcm9wZXJ0aWVzU2NoZWR1bGVkOworfQorLSAoaWQpaW5pdFdpdGhDbGll
bnQ6KE1lZGlhUGxheWVyUHJpdmF0ZUlPUyAqKWNsaWVudDsKKy0gKHZvaWQpZGlzY29ubmVjdDsK
Ky0gKHZvaWQpY2FuY2VsUGVuZGluZ1JlcXVlc3RzOworLSAodm9pZClkZWxheU5vdGlmaWNhdGlv
bjooaW50KW5vdGlmaWNhdGlvbjsKKy0gKHZvaWQpZGVsaXZlck5vdGlmaWNhdGlvbjooTlNOdW1i
ZXIgKilub3RpZmljYXRpb247CistICh2b2lkKXNjaGVkdWxlUHJlcGFyZVRvUGxheVdpdGhPcHRp
b25hbERlbGF5OihOU051bWJlciAqKXNob3VsZERlbGF5OworLSAodm9pZClzY2hlZHVsZURlZmVy
cmVkUHJvcGVydGllc1dpdGhPcHRpb25hbERlbGF5OihOU051bWJlciAqKXNob3VsZERlbGF5Owor
CistICh2b2lkKXBsdWdpbkVsZW1lbnRJbkJhbmRBbHRlcm5hdGVUZXh0VHJhY2tzRGlkQ2hhbmdl
OihOU0FycmF5ICopdHJhY2tzOworLSAodm9pZClwbHVnaW5FbGVtZW50RGlkU2VsZWN0VGV4dFRy
YWNrOihOU1N0cmluZyAqKXRyYWNrSWQ7CistICh2b2lkKXBsdWdpbkVsZW1lbnREaWRPdXRwdXRB
dHRyaWJ1dGVkU3RyaW5nczooTlNBcnJheSAqKXN0cmluZ3MgbmF0aXZlU2FtcGxlQnVmZmVyczoo
TlNBcnJheSAqKWJ1ZmZlcnMgZm9yVGltZTooTlNUaW1lSW50ZXJ2YWwpdGltZTsKK0BlbmQKKwor
Ly8gUHJpdmF0ZSBzZWxlY3RvcnMgaW1wbGVtZW50ZWQgYnkgdGhlIG1lZGlhIHBsYXllciBwcm94
eSBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIHBsdWctaW4uCitAaW50ZXJmYWNlIE5TT2JqZWN0IChX
ZWJNZWRpYVBsYXllclByb3h5X0V4dHJhcykKKy0gKHZvaWQpX2F0dHJpYnV0ZUNoYW5nZWQ6KE5T
U3RyaW5nICopbmFtZSB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZTsKKy0gKEJPT0wpX3JlYWR5Rm9y
UGxheWJhY2s7CitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgaW50IGtSZXF1
aXJlZEhlbHBlckludGVyZmFjZVZlcnNpb24gPSAxOworCitzdGF0aWMgTlNTdHJpbmcgKiBjb25z
dCBEZWZlcnJlZFByb3BlcnR5Q29udHJvbHNLZXkgPSBAImNvbnRyb2xzIjsKK3N0YXRpYyBOU1N0
cmluZyAqIGNvbnN0IERlZmVycmVkUHJvcGVydHlQb3N0ZXJLZXkgPSBAInBvc3RlciI7CitzdGF0
aWMgTlNTdHJpbmcgKiBjb25zdCBEZWZlcnJlZFByb3BlcnR5U3JjS2V5ID0gQCJzcmMiOworc3Rh
dGljIE5TU3RyaW5nICogY29uc3QgRGVmZXJyZWRQbGF5S2V5ID0gQCJwbGF5IjsKK3N0YXRpYyBO
U1N0cmluZyAqIGNvbnN0IERlZmVycmVkUHJvcGVydHlTZWxlY3RlZFRyYWNrS2V5ID0gQCJzZWxl
Y3RlZHRyYWNrIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IERlZmVycmVkUHJvcGVydHlPdXRP
ZkJhbmRUcmFja3NLZXkgPSBAIm91dG9mYmFuZHRyYWNrcyI7CisjaWYgRU5BQkxFKElPU19BSVJQ
TEFZKQorc3RhdGljIE5TU3RyaW5nICogY29uc3QgRGVmZXJyZWRXaXJlbGVzc1ZpZGVvUGxheWJh
Y2tEaXNhYmxlZCA9IEAid2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQiOworI2VuZGlmCisK
K3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFRleHRUcmFja0Rpc3BsYXlOYW1lS2V5ID0gQCJkaXNw
bGF5bmFtZSI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBUZXh0VHJhY2tMb2NhbGVJZGVudGlm
aWVyS2V5ID0gQCJsb2NhbGVpZGVudGlmaWVyIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFRl
eHRUcmFja1N1YnRpdGxlc0tleSA9IEAic3VidGl0bGVzIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNv
bnN0IFRleHRUcmFja0NhcHRpb25zS2V5ID0gQCJjYXB0aW9ucyI7CitzdGF0aWMgTlNTdHJpbmcg
KiBjb25zdCBUZXh0VHJhY2tUeXBlS2V5ID0gQCJ0eXBlIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNv
bnN0IFRleHRUcmFja0lES2V5ID0gQCJpZCI7CisKK2NvbnN0IGludCBUZXh0VHJhY2tPZmZNZW51
SXRlbUlEID0gLTE7Citjb25zdCBpbnQgVGV4dFRyYWNrQXV0b01lbnVJdGVtSUQgPSAtMjsKKwor
TWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpQbGF0Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1M6
OlBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUyhNZWRpYVBsYXllclByaXZhdGVJT1Mq
IG93bmVyKQorICAgIDogbV9jbGllbnQobnVsbHB0cikKKyAgICAsIG1fb3duZXIob3duZXIpCit7
Cit9CisgICAgICAgIAorTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpQbGF0Zm9ybVRleHRUcmFja01l
bnVJbnRlcmZhY2VJT1M6On5QbGF0Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1MoKQorewor
ICAgIG1fb3duZXIgPSBudWxscHRyOworICAgIG1fY2xpZW50ID0gbnVsbHB0cjsKK30KKworUGFz
c093blB0cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IE1lZGlhUGxheWVyUHJpdmF0ZUlP
Uzo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCit7IAorICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgTWVkaWFQbGF5ZXJQcml2YXRlSU9TKHBsYXllcikpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdp
c3RyYXIpCit7CisgICAgaWYgKGlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJlZ2lzdHJhcihjcmVh
dGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUsIDAsIDAsIDApOworfQorCitNZWRp
YVBsYXllclByaXZhdGVJT1M6Ok1lZGlhUGxheWVyUHJpdmF0ZUlPUyhNZWRpYVBsYXllciogcGxh
eWVyKQorICAgIDogbV9tZWRpYVBsYXllcihwbGF5ZXIpCisgICAgLCBtX29iamNIZWxwZXIoYWRv
cHROUyhbW1dlYkNvcmVNZWRpYVBsYXllck5vdGlmaWNhdGlvbkhlbHBlciBhbGxvY10gaW5pdFdp
dGhDbGllbnQ6dGhpc10pKQorICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5
KQorICAgICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCisgICAgLCBtX2N1cnJlbnRUcmFjayhudWxscHRyKQorI2VuZGlmCisg
ICAgLCBtX2RlbGF5Q2FsbGJhY2tzKDApCisgICAgLCBtX2NoYW5naW5nVm9sdW1lKDApCisgICAg
LCBtX2J5dGVzTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzKDApCisgICAgLCBtX3JlcXVl
c3RlZFJhdGUoMCkKKyAgICAsIG1fYnVmZmVyaW5nU3RhdGUoRW1wdHkpCisgICAgLCBtX3Zpc2li
bGUoZmFsc2UpCisgICAgLCBtX3VzaW5nTmV0d29yayhmYWxzZSkKKyAgICAsIG1faW5GdWxsU2Ny
ZWVuKGZhbHNlKQorICAgICwgbV9zaG91bGRQcmVwYXJlVG9QbGF5KGZhbHNlKQorICAgICwgbV9w
cmVwYXJpbmdUb1BsYXkoZmFsc2UpCisgICAgLCBtX3BhdXNlUmVxdWVzdGVkKGZhbHNlKQorewor
fQorCitNZWRpYVBsYXllclByaXZhdGVJT1M6On5NZWRpYVBsYXllclByaXZhdGVJT1MoKQorewor
ICAgIGNsZWFyVGV4dFRyYWNrcygpOworICAgIFttX29iamNIZWxwZXIuZ2V0KCkgZGlzY29ubmVj
dF07CisgICAgaWYgKFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoX3NldERlbGVnYXRlOildKQorICAgICAgICBbbV9tZWRpYVBsYXllckhlbHBl
ci5nZXQoKSBfc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQo
KSBfZGlzY29ubmVjdF07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRNZWRp
YVBsYXllclByb3h5KFdlYk1lZGlhUGxheWVyUHJveHkgKnByb3h5KQoreworICAgIGlmIChtX21l
ZGlhUGxheWVySGVscGVyKQorICAgICAgICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfZGlz
Y29ubmVjdF07CisKKyAgICBtX21lZGlhUGxheWVySGVscGVyID0gbnVsbHB0cjsKKworICAgIGlm
IChwcm94eSkgeworICAgICAgICAvLyBkb24ndCB0cnkgdG8gdXNlIGEgaGVscGVyIGlmIHRoZSBp
bnRlcmZhY2UgdmVyc2lvbiBpcyB0b28gbG93CisgICAgICAgIGlmIChbcHJveHkgX2ludGVyZmFj
ZVZlcnNpb25dIDwgIGtSZXF1aXJlZEhlbHBlckludGVyZmFjZVZlcnNpb24pIHsKKyAgICAgICAg
ICAgIE5TTG9nKEAiTWVkaWEgcGxheWVyIGhlbHBlciBpbnRlcmZhY2UgdmVyc2lvbiB0b28gbG93
LCBleGl0aW5nLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1f
bWVkaWFQbGF5ZXJIZWxwZXIgPSBhZG9wdE5TKHN0YXRpY19jYXN0PE5TT2JqZWN0ICo+KFtwcm94
eSByZXRhaW5dKSk7CisgICAgICAgIGlmIChbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9zZXREZWxlZ2F0ZTopXSkKKyAgICAgICAgICAgIFtt
X21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXREZWxlZ2F0ZTptX29iamNIZWxwZXIuZ2V0KCld
OworCisgICAgICAgIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCk7CisgICAgfQor
CisgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBOU1VSTCAqbnNVUkwgPSBV
UkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpOworCisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVy
KSB7CisgICAgICAgIGFkZERlZmVycmVkUmVxdWVzdChEZWZlcnJlZFByb3BlcnR5U3JjS2V5LCBb
bnNVUkwgYWJzb2x1dGVTdHJpbmddKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFtt
X2RlZmVycmVkUHJvcGVydGllcy5nZXQoKSByZW1vdmVPYmplY3RGb3JLZXk6RGVmZXJyZWRQcm9w
ZXJ0eVNyY0tleV07CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgeworICAgICAg
ICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkxvYWRpbmcpIHsKKyAgICAgICAg
ICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgICAgICBt
X21lZGlhUGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpIHsKKyAgICAgICAg
ICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgICAg
IG1fbWVkaWFQbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgICAgIH0KKworICAgICAg
ICBtX3BhdXNlUmVxdWVzdGVkID0gZmFsc2U7CisgICAgICAgIG1fcHJlcGFyaW5nVG9QbGF5ID0g
ZmFsc2U7CisKKyAgICAgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2NhbmNlbExvYWRd
OworICAgICAgICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfbG9hZDpuc1VSTF07CisgICAg
fQorICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVJT1M6OmNhbmNlbExvYWQoKQoreworICAgIFttX29iamNIZWxwZXIuZ2V0KCkgY2FuY2Vs
UGVuZGluZ1JlcXVlc3RzXTsKKyAgICBbbV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVtb3Zl
QWxsT2JqZWN0c107CisKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJl
dHVybjsKKyAgICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfY2FuY2VsTG9hZF07Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjphZGREZWZlcnJlZFJlcXVlc3QoTlNTdHJpbmcg
Km5hbWUsIGlkIHZhbHVlKQoreworICAgIGlmICghbV9kZWZlcnJlZFByb3BlcnRpZXMpCisgICAg
ICAgIG1fZGVmZXJyZWRQcm9wZXJ0aWVzID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkg
YWxsb2NdIGluaXRdKTsKKyAgICBbbV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgc2V0T2JqZWN0
OnZhbHVlID8gdmFsdWUgOiBAIiIgZm9yS2V5Om5hbWVdOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUlPUzo6cHJvY2Vzc0RlZmVycmVkUmVxdWVzdHMoKQoreworICAgIGlmICghW21fZGVm
ZXJyZWRQcm9wZXJ0aWVzLmdldCgpIGNvdW50XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0
RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgeworICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9u
YXJ5PiBsb2NhbFByb3BlcnRpZXMgPSBhZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0
V2l0aERpY3Rpb25hcnk6bV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCldKTsKKyAgICAgICAgW21f
ZGVmZXJyZWRQcm9wZXJ0aWVzLmdldCgpIHJlbW92ZUFsbE9iamVjdHNdOworCisgICAgICAgIC8v
IEFsd2F5cyBzZXQgdGhlIHNyYyBmaXJzdC4KKyAgICAgICAgaWQgdmFsdWUgPSBbbG9jYWxQcm9w
ZXJ0aWVzLmdldCgpIG9iamVjdEZvcktleTpEZWZlcnJlZFByb3BlcnR5U3JjS2V5XTsKKyAgICAg
ICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbG9hZCh2YWx1ZSk7CisKKyAgICAgICAgZm9yIChO
U1N0cmluZyAqbmFtZSBpbiBsb2NhbFByb3BlcnRpZXMuZ2V0KCkpIHsKKyAgICAgICAgICAgIHZh
bHVlID0gW2xvY2FsUHJvcGVydGllcy5nZXQoKSBvYmplY3RGb3JLZXk6bmFtZV07CisKKyAgICAg
ICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cHJvY2Vzc0RlZmVycmVk
UmVxdWVzdHMoJXApIC0gcHJvY2Vzc2luZyAlcyIsIHRoaXMsIFtuYW1lIFVURjhTdHJpbmddKTsK
KworICAgICAgICAgICAgaWYgKFtuYW1lIGlzRXF1YWxUb1N0cmluZzpEZWZlcnJlZFByb3BlcnR5
UG9zdGVyS2V5XSkKKyAgICAgICAgICAgICAgICBzZXRQb3N0ZXIodmFsdWUpOworICAgICAgICAg
ICAgZWxzZSBpZiAoW25hbWUgaXNFcXVhbFRvU3RyaW5nOkRlZmVycmVkUHJvcGVydHlDb250cm9s
c0tleV0pCisgICAgICAgICAgICAgICAgc2V0Q29udHJvbHMoW3ZhbHVlIGJvb2xWYWx1ZV0pOwor
ICAgICAgICAgICAgZWxzZSBpZiAoW25hbWUgaXNFcXVhbFRvU3RyaW5nOkRlZmVycmVkUGxheUtl
eV0pCisgICAgICAgICAgICAgICAgcGxheSgpOworICAgICAgICAgICAgZWxzZSBpZiAoW25hbWUg
aXNFcXVhbFRvU3RyaW5nOkRlZmVycmVkUHJvcGVydHlPdXRPZkJhbmRUcmFja3NLZXldKQorICAg
ICAgICAgICAgICAgIHNldE91dE9mQmFuZFRleHRUcmFja3ModmFsdWUpOworICAgICAgICAgICAg
ZWxzZSBpZiAoW25hbWUgaXNFcXVhbFRvU3RyaW5nOkRlZmVycmVkUHJvcGVydHlTZWxlY3RlZFRy
YWNrS2V5XSkKKyAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZFRleHRUcmFjayh2YWx1ZSk7Cisj
aWYgRU5BQkxFKElPU19BSVJQTEFZKQorICAgICAgICAgICAgZWxzZSBpZiAoW25hbWUgaXNFcXVh
bFRvU3RyaW5nOkRlZmVycmVkV2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWRdKQorICAgICAg
ICAgICAgICAgIHNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKFt2YWx1ZSBib29sVmFs
dWVdKTsKKyNlbmRpZgorICAgICAgICAgICAgZWxzZSBpZiAoIVtuYW1lIGlzRXF1YWxUb1N0cmlu
ZzpEZWZlcnJlZFByb3BlcnR5U3JjS2V5XSkKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVDaGFu
Z2VkKG5hbWUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzZXREZWxheUNhbGxiYWNr
cyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRQb3N0ZXIoY29u
c3QgU3RyaW5nJiB1cmwpCit7CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgewor
ICAgICAgICBOU1VSTCAqbnNVUkwgPSBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpOworICAgICAg
ICBpZiAobV9tZWRpYVBsYXllckhlbHBlcikgeworICAgICAgICAgICAgW21fZGVmZXJyZWRQcm9w
ZXJ0aWVzLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpEZWZlcnJlZFByb3BlcnR5UG9zdGVyS2V5
XTsKKyAgICAgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXRQb3N0ZXI6bnNV
UkxdOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZERlZmVycmVkUmVx
dWVzdChEZWZlcnJlZFByb3BlcnR5UG9zdGVyS2V5LCB1cmwpOworICAgIH0KKyAgICBzZXREZWxh
eUNhbGxiYWNrcyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRD
b250cm9scyhib29sIGNvbnRyb2xzKQoreworICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOwor
ICAgIHsKKyAgICAgICAgaWYgKG1fbWVkaWFQbGF5ZXJIZWxwZXIpIHsKKyAgICAgICAgICAgIFtt
X2RlZmVycmVkUHJvcGVydGllcy5nZXQoKSByZW1vdmVPYmplY3RGb3JLZXk6RGVmZXJyZWRQcm9w
ZXJ0eUNvbnRyb2xzS2V5XTsKKyAgICAgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgp
IF9zZXRDb250cm9sczpjb250cm9sc107CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgYWRkRGVmZXJyZWRSZXF1ZXN0KERlZmVycmVkUHJvcGVydHlDb250cm9sc0tleSwgW05T
TnVtYmVyIG51bWJlcldpdGhCb29sOmNvbnRyb2xzXSk7CisgICAgfQorICAgIHNldERlbGF5Q2Fs
bGJhY2tzKGZhbHNlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnByb2Nlc3NQ
ZW5kaW5nUmVxdWVzdHMoKQoreworICAgIGlmIChtX3Nob3VsZFByZXBhcmVUb1BsYXkgJiYgIW1f
cHJlcGFyaW5nVG9QbGF5KQorICAgICAgICBbbV9vYmpjSGVscGVyLmdldCgpIHNjaGVkdWxlUHJl
cGFyZVRvUGxheVdpdGhPcHRpb25hbERlbGF5OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNd
XTsKKyAgICBpZiAoW21fZGVmZXJyZWRQcm9wZXJ0aWVzLmdldCgpIGNvdW50XSkKKyAgICAgICAg
W21fb2JqY0hlbHBlci5nZXQoKSBzY2hlZHVsZURlZmVycmVkUHJvcGVydGllc1dpdGhPcHRpb25h
bERlbGF5OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdXTsKKyAgICBtX3Nob3VsZFByZXBh
cmVUb1BsYXkgPSBmYWxzZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnByZXBh
cmVUb1BsYXkoKQoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikgeworICAgICAgICAv
LyBOb3QgaG9va2VkIHVwIHRvIHRoZSBwbHVnLWluIHlldCwgcmVtZW1iZXIgdGhpcyByZXF1ZXN0
LgorICAgICAgICBtX3Nob3VsZFByZXBhcmVUb1BsYXkgPSB0cnVlOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKG1fcHJlcGFyaW5nVG9QbGF5IHx8IG1fcmVhZHlTdGF0ZSA+PSBN
ZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hv
dWxkUHJlcGFyZVRvUGxheSA9IGZhbHNlOworICAgIG1fcHJlcGFyaW5nVG9QbGF5ID0gdHJ1ZTsK
KworICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOworICAgICAgICBbbV9tZWRpYVBsYXllckhl
bHBlci5nZXQoKSBfcHJlcGFyZUZvclBsYXliYWNrXTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhm
YWxzZSk7Cit9CisKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnBsYXkoKQoreworICAg
IGlmICghbV9tZWRpYVBsYXllckhlbHBlcikgeworICAgICAgICBhZGREZWZlcnJlZFJlcXVlc3Qo
RGVmZXJyZWRQbGF5S2V5LCBuaWwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9w
YXVzZVJlcXVlc3RlZCA9IGZhbHNlOworICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOworICAg
ICAgICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfcGxheV07CisgICAgc2V0RGVsYXlDYWxs
YmFja3MoZmFsc2UpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cGF1c2UoKQor
eworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9wYXVzZVJlcXVlc3RlZCA9IHRydWU7CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7Cisg
ICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9wYXVzZV07CisgICAgc2V0RGVsYXlD
YWxsYmFja3MoZmFsc2UpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVJT1M6OmR1cmF0
aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJl
dHVybiAwOworICAgIGZsb2F0IGR1cmF0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFttX21lZGlh
UGxheWVySGVscGVyLmdldCgpIF9kdXJhdGlvbl0pOworICAgIHJldHVybiBkdXJhdGlvbiA9PSAt
MSA/IG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSA6IGR1cmF0aW9uOworfQorCitm
bG9hdCBNZWRpYVBsYXllclByaXZhdGVJT1M6OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4oW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2N1cnJlbnRUaW1l
XSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZWVrKGZsb2F0IHRpbWUpCit7
CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm47CisgICAgZmxv
YXQgZHVyYXRpb24gPSB0aGlzLT5kdXJhdGlvbigpOworICAgIFttX21lZGlhUGxheWVySGVscGVy
LmdldCgpIF9zZXRDdXJyZW50VGltZToodGltZSA+IGR1cmF0aW9uID8gZHVyYXRpb24gOiB0aW1l
KV07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRFbmRUaW1lKGZsb2F0IHRp
bWUpCit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm47Cisg
ICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldEVuZFRpbWU6dGltZV07Cit9CisKK2Jv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpwYXVzZWQoKSBjb25zdAoreworICAgIGlmICghbV9t
ZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuICFyYXRl
KCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZWVraW5nKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NlZWtpbmddOworfQorCitJbnRT
aXplIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6bmF0dXJhbFNpemUoKSBjb25zdAoreworICAgIGlm
ICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAg
IE5TU2l6ZSBzaXplID0gW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX25hdHVyYWxTaXplXTsK
KyAgICByZXR1cm4gSW50U2l6ZShzaXplKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJ
T1M6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0
KCkgX2hhc1ZpZGVvXTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6Omhhc0F1ZGlv
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2hhc0F1ZGlv
XTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjp2b2x1bWUoKSBjb25zdAorewor
ICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfdm9sdW1lXTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnNldFZvbHVtZShmbG9hdCBpblZvbHVtZSkKK3sKKyAgICBp
ZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIgfHwgbV9jaGFuZ2luZ1ZvbHVtZSkKKyAgICAgICAgcmV0
dXJuOworICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXRWb2x1bWU6aW5Wb2x1bWVd
OworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnJhdGUoKSBjb25zdAoreworICAg
IGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfcmF0ZV07Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlSU9TOjpzZXRSYXRlKGZsb2F0IGluUmF0ZSkKK3sKKyAgICBpZiAoIW1fbWVk
aWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3JlcXVlc3RlZFJhdGUgPSBp
blJhdGU7CisgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldFJhdGU6aW5SYXRlXTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldE11dGVkKGJvb2wgaW5NdXRlKQor
eworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIFtt
X21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXRNdXRlZDppbk11dGVdOworfQorCitpbnQgTWVk
aWFQbGF5ZXJQcml2YXRlSU9TOjpkYXRhUmF0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlh
UGxheWVySGVscGVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gW21fbWVkaWFQbGF5
ZXJIZWxwZXIuZ2V0KCkgX2RhdGFSYXRlXTsKK30KKworTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0
ZSBNZWRpYVBsYXllclByaXZhdGVJT1M6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0IAoreyAKKyAgICBy
ZXR1cm4gbV9uZXR3b3JrU3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlh
UGxheWVyUHJpdmF0ZUlPUzo6cmVhZHlTdGF0ZSgpIGNvbnN0IAoreworICAgIHJldHVybiBtX3Jl
YWR5U3RhdGU7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6bWF4VGltZUJ1ZmZl
cmVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfbWF4VGltZUJ1
ZmZlcmVkXTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6OmRpZExvYWRpbmdQcm9n
cmVzcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgdW5zaWduZWQgY3VycmVudEJ5dGVzTG9hZGVkID0gW21fbWVkaWFQ
bGF5ZXJIZWxwZXIuZ2V0KCkgX2J5dGVzTG9hZGVkXTsKKyAgICBib29sIGRpZExvYWRpbmdQcm9n
cmVzcyA9IGN1cnJlbnRCeXRlc0xvYWRlZCAhPSBtX2J5dGVzTG9hZGVkQXRMYXN0RGlkTG9hZGlu
Z1Byb2dyZXNzOworICAgIG1fYnl0ZXNMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3MgPSBj
dXJyZW50Qnl0ZXNMb2FkZWQ7CisgICAgcmV0dXJuIGRpZExvYWRpbmdQcm9ncmVzczsKK30KKwor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnRvdGFsQnl0ZXNLbm93bigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHRvdGFsQnl0ZXMoKSA+IDA7Cit9CisKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6dG90YWxCeXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVs
cGVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIu
Z2V0KCkgX3RvdGFsQnl0ZXNdOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVJT1M6Om1h
eFRpbWVTZWVrYWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQor
ICAgICAgICByZXR1cm4gMC4wZjsKKyAgICByZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0
KCkgX21heFRpbWVTZWVrYWJsZV07Cit9CisKK1Bhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFQ
bGF5ZXJQcml2YXRlSU9TOjpidWZmZXJlZCgpIGNvbnN0Cit7CisgICAgUmVmUHRyPFRpbWVSYW5n
ZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKworICAgIGlmICghbV9tZWRp
YVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOworCisg
ICAgTlNBcnJheSAqcmFuZ2VzID0gW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2J1ZmZlcmVk
VGltZVJhbmdlc107CisgICAgaWYgKCFyYW5nZXMpCisgICAgICAgIHJldHVybiB0aW1lUmFuZ2Vz
LnJlbGVhc2UoKTsKKworICAgIGZsb2F0IHRpbWVSYW5nZVsyXTsKKyAgICBpbnQgY291bnQgPSBb
cmFuZ2VzIGNvdW50XTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAg
ICAgICAgTlNEYXRhICpyYW5nZSA9IFtyYW5nZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAg
W3JhbmdlIGdldEJ5dGVzOnRpbWVSYW5nZSBsZW5ndGg6KE5TVUludGVnZXIpc2l6ZW9mKHRpbWVS
YW5nZSldOworCisgICAgICAgIHRpbWVSYW5nZXMtPmFkZCh0aW1lUmFuZ2VbMF0sIHRpbWVSYW5n
ZVsxXSk7CisgICAgfQorCisgICAgcmV0dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c2V0U2l6ZShjb25zdCBJbnRTaXplJikKK3sKKyAg
ICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlPworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUlPUzo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgLy8g
RklYTUU6IERvIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgbW9yZSBoZXJlPworICAgIGlmIChtX3Zp
c2libGUgIT0gdmlzaWJsZSkKKyAgICAgICAgbV92aXNpYmxlID0gdmlzaWJsZTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmKQoreworICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4KK30KKworc3RhdGljIEhhc2hT
ZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
SGFzaFNldDxTdHJpbmc+PiB0eXBlQ2FjaGU7CisgICAgc3RhdGljIGJvb2wgdHlwZUxpc3RJbml0
aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKHR5cGVMaXN0SW5pdGlhbGl6ZWQpCisgICAgICAg
IHJldHVybiB0eXBlQ2FjaGU7CisKKyAgICB0eXBlTGlzdEluaXRpYWxpemVkID0gdHJ1ZTsKKwor
ICAgIC8vIEZJWE1FOiBTaG91bGQgZ2V0IHRoZXNlIGZyb20gdGhlIGhlbHBlciwgYnV0IHdlIGRv
bid0IGhhdmUgYW4gaW5zdGFuY2Ugd2hlbiB0aGlzIGlzIGNhbGxlZC4KKyAgICBzdGF0aWMgY29u
c3QgY2hhciogdHlwZUxpc3RbXSA9IHsKKyAgICAgICAgImFwcGxpY2F0aW9uL3gtbXBlZ3VybCIs
CisgICAgICAgICJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCIsCisgICAgICAgICJhdWRp
by8zZ3BwIiwKKyAgICAgICAgImF1ZGlvLzNncHAyIiwKKyAgICAgICAgImF1ZGlvL2FhYyIsCisg
ICAgICAgICJhdWRpby9haWZmIiwKKyAgICAgICAgImF1ZGlvL2FtciIsCisgICAgICAgICJhdWRp
by9iYXNpYyIsCisgICAgICAgICJhdWRpby9tcDMiLAorICAgICAgICAiYXVkaW8vbXA0IiwKKyAg
ICAgICAgImF1ZGlvL21wZWciLAorICAgICAgICAiYXVkaW8vbXBlZ3VybCIsCisgICAgICAgICJh
dWRpby9tcGVnMyIsCisgICAgICAgICJhdWRpby9zY3BscyIsCisgICAgICAgICJhdWRpby93YXYi
LAorICAgICAgICAiYXVkaW8veC1hYWMiLAorICAgICAgICAiYXVkaW8veC1haWZmIiwKKyAgICAg
ICAgImF1ZGlvL3gtY2FmIiwKKyAgICAgICAgImF1ZGlvL3gtbTRhIiwKKyAgICAgICAgImF1ZGlv
L3gtbTRiIiwKKyAgICAgICAgImF1ZGlvL3gtbTRwIiwKKyAgICAgICAgImF1ZGlvL3gtbTRyIiwK
KyAgICAgICAgImF1ZGlvL3gtbXAzIiwKKyAgICAgICAgImF1ZGlvL3gtbXBlZyIsCisgICAgICAg
ICJhdWRpby94LW1wZWczIiwKKyAgICAgICAgImF1ZGlvL3gtbXBlZ3VybCIsCisgICAgICAgICJh
dWRpby94LXNjcGxzIiwKKyAgICAgICAgImF1ZGlvL3gtd2F2IiwKKyAgICAgICAgInZpZGVvLzNn
cHAiLAorICAgICAgICAidmlkZW8vM2dwcDIiLAorICAgICAgICAidmlkZW8vbXA0IiwKKyAgICAg
ICAgInZpZGVvL3F1aWNrdGltZSIsCisgICAgICAgICJ2aWRlby94LW00diIsCisKKyAgICAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgYWRkZWQgdG8gcmVzdG9yZSBvbGQgYmVoYXZpb3IgZm9yOgorICAg
ICAgICAvLyA8cmRhcjovL3Byb2JsZW0vOTc5Mjk2ND4gRW1iZWRkZWQgdmlkZW9zIGRvbid0IHBs
YXkgb24gc3BpZWdlbC5kZSAoLmh0bWwgZmlsZSByZWRpcmVjdHMpCisgICAgICAgIC8vIEhvd2V2
ZXIsIGEgYmV0dGVyIGZpeCBpcyB0cmFja2VkIGJ5OgorICAgICAgICAvLyA8aHR0cDovL3dlYmtp
dC5vcmcvYi82NDgxMT4gPHZpZGVvPiAiLmh0bWwiIHNyYyB3aXRoIGEgMzAxIHJlZGlyZWN0IGZh
aWxzIHRvIGxvYWQKKyAgICAgICAgInRleHQvaHRtbCIsCisgICAgfTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSCh0eXBlTGlzdCk7ICsraSkKKyAgICAgICAg
dHlwZUNhY2hlLmdldCgpLmFkZCh0eXBlTGlzdFtpXSk7CisKKyAgICByZXR1cm4gdHlwZUNhY2hl
OworfQorCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6
c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMpCit7CisgICAgLy8gT25seSByZXR1cm4gIklzU3VwcG9ydGVkIiBpZiB0aGVyZSBpcyBubyBj
b2RlY3MgcGFyYW1ldGVyIGZvciBub3cgYXMgdGhlcmUgaXMgbm8gd2F5IHRvIGFzayBDb3JlTWVk
aWEKKyAgICAvLyBpZiBpdCBzdXBwb3J0cyBhbiBleHRlbmRlZCBNSU1FIHR5cGUuCisgICAgaWYg
KCFwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpICYmIG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyhw
YXJhbWV0ZXJzLnR5cGUpKQorICAgICAgICByZXR1cm4gcGFyYW1ldGVycy5jb2RlY3MuaXNFbXB0
eSgpID8gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkIDogTWVkaWFQbGF5ZXI6OklzU3VwcG9y
dGVkOworCisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5n
PiYgdHlwZXMpCit7CisgICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7Cit9CisKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlSU9TOjppc0F2YWlsYWJsZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6
aXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVzcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX21l
ZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFttX21l
ZGlhUGxheWVySGVscGVyLmdldCgpIF9pc0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzXTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNob3dQbGF5YmFja1RhcmdldFBpY2tl
cigpCit7CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgICAgIFttX21lZGlhUGxh
eWVySGVscGVyLmdldCgpIF9zaG93UGxheWJhY2tUYXJnZXRQaWNrZXJdOworICAgIHNldERlbGF5
Q2FsbGJhY2tzKGZhbHNlKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6Omhhc1dp
cmVsZXNzUGxheWJhY2tUYXJnZXRzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJI
ZWxwZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gW21fbWVkaWFQbGF5ZXJI
ZWxwZXIuZ2V0KCkgX2hhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzXTsKK30KKworYm9vbCBNZWRp
YVBsYXllclByaXZhdGVJT1M6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3dpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkXTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldFdpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKGJvb2wgZGlzYWJsZWQpCit7CisgICAgc2V0RGVsYXlD
YWxsYmFja3ModHJ1ZSk7CisgICAgeworICAgICAgICBpZiAobV9tZWRpYVBsYXllckhlbHBlcikg
eworICAgICAgICAgICAgW21fZGVmZXJyZWRQcm9wZXJ0aWVzLmdldCgpIHJlbW92ZU9iamVjdEZv
cktleTpEZWZlcnJlZFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkXTsKKyAgICAgICAgICAg
IFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNh
YmxlZDpkaXNhYmxlZF07CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYWRkRGVmZXJyZWRS
ZXF1ZXN0KERlZmVycmVkV2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQsIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDpkaXNhYmxlZF0pOworICAgIH0KKyAgICBzZXREZWxheUNhbGxiYWNrcyhm
YWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRIYXNQbGF5YmFja1Rh
cmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhib29sIGhhc0xpc3RlbmVycykKK3sKKyAgICBbbV9t
ZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlM
aXN0ZW5lcnM6aGFzTGlzdGVuZXJzXTsKK30KKyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorYm9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnN1cHBvcnRzQWNjZWxl
cmF0ZWRSZW5kZXJpbmcoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjplbnRlckZ1bGxzY3JlZW4oKQoreworICAgIC8v
IFRoZSBjb25zdCBjYXN0IGlzIGEgd29ya2Fyb3VuZCBkdWUgdG8gT3BlblNvdXJjZSBjaGFuZ2lu
ZyB0aGUgc2lnbmF0dXJlIHRvIGNvbnN0LgorICAgIE1lZGlhUGxheWVyUHJpdmF0ZUlPUyogbXV0
YWJsZVRoaXMgPSBjb25zdF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZUlPUyo+KHRoaXMpOworICAg
IG11dGFibGVUaGlzLT5zZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICBbbV9tZWRpYVBsYXll
ckhlbHBlci5nZXQoKSBfZW50ZXJGdWxsU2NyZWVuXTsKKyAgICBtdXRhYmxlVGhpcy0+c2V0RGVs
YXlDYWxsYmFja3MoZmFsc2UpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZXhp
dEZ1bGxzY3JlZW4oKQoreworICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOworICAgIFttX21l
ZGlhUGxheWVySGVscGVyLmdldCgpIF9leGl0RnVsbFNjcmVlbl07CisgICAgc2V0RGVsYXlDYWxs
YmFja3MoZmFsc2UpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6YXR0cmlidXRl
Q2hhbmdlZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAg
aWYgKCFtX21lZGlhUGxheWVySGVscGVyKSB7CisgICAgICAgIGFkZERlZmVycmVkUmVxdWVzdChu
YW1lLCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIVttX21lZGlh
UGxheWVySGVscGVyLmdldCgpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2F0dHJpYnV0
ZUNoYW5nZWQ6dmFsdWU6KV0pCisgICAgICAgIHJldHVybjsKKworICAgIHNldERlbGF5Q2FsbGJh
Y2tzKHRydWUpOworICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9hdHRyaWJ1dGVDaGFu
Z2VkOm5hbWUgdmFsdWU6dmFsdWVdOworICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30K
KworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnJlYWR5Rm9yUGxheWJhY2soKSBjb25zdAor
eworICAgIGlmIChbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKF9yZWFkeUZvclBsYXliYWNrKV0pCisgICAgICAgIHJldHVybiBbbV9tZWRpYVBs
YXllckhlbHBlci5nZXQoKSBfcmVhZHlGb3JQbGF5YmFja107CisgICAgcmV0dXJuIE1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZTo6cmVhZHlGb3JQbGF5YmFjaygpOworfQorCitib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUlPUzo6aGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdAoreworICAgIHJldHVy
biBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfaGFzQ2xvc2VkQ2FwdGlvbnNdOworfSAgICAK
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldENsb3NlZENhcHRpb25zVmlzaWJsZShi
b29sIGZsYWcpCit7CisgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldENsb3NlZENh
cHRpb25zVmlzaWJsZTpmbGFnXTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OmRl
bGl2ZXJOb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcm94eU5vdGlmaWNhdGlvblR5cGUgbm90aWZp
Y2F0aW9uKSAKK3sKKyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVJT1M6OmRlbGl2
ZXJOb3RpZmljYXRpb24oJXApIC0gbm90aWZpY2F0aW9uID0gJWksIGVudGVyaW5nIHdpdGggbmV0
d29ya1N0YXRlID0gJWksIHJlYWR5U3RhdGUgPSAlaSIsIAorICAgICAgICB0aGlzLCBzdGF0aWNf
Y2FzdDxpbnQ+KG5vdGlmaWNhdGlvbiksIHN0YXRpY19jYXN0PGludD4obV9uZXR3b3JrU3RhdGUp
LCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVhZHlTdGF0ZSkpOworCisgICAgaWYgKCFtX21lZGlhUGxh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY2FsbGJhY2tzRGVsYXllZCgpKSB7Cisg
ICAgICAgIFttX29iamNIZWxwZXIuZ2V0KCkgZGVsYXlOb3RpZmljYXRpb246bm90aWZpY2F0aW9u
XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3Rh
dGUgb2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CisgICAgTWVkaWFQbGF5ZXI6OlJl
YWR5U3RhdGUgb2xkUmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKKworICAgIHN3aXRjaCAobm90
aWZpY2F0aW9uKSB7CisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvblN0YXJ0VXNpbmdO
ZXR3b3JrOgorICAgICAgICBtX3VzaW5nTmV0d29yayA9IHRydWU7CisgICAgICAgIGlmIChtX25l
dHdvcmtTdGF0ZSA8IE1lZGlhUGxheWVyOjpMb2FkaW5nKQorICAgICAgICAgICAgbV9uZXR3b3Jr
U3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBN
ZWRpYVBsYXllck5vdGlmaWNhdGlvblN0b3BVc2luZ05ldHdvcms6CisgICAgICAgIG1fdXNpbmdO
ZXR3b3JrID0gZmFsc2U7CisgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6
SGF2ZUN1cnJlbnREYXRhICYmIG1fbmV0d29ya1N0YXRlIDwgTWVkaWFQbGF5ZXI6OkZvcm1hdEVy
cm9yKQorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6SWRsZTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uR2FpbkZvY3Vz
OgorICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6TG9hZGluZykKKyAg
ICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvbkxvc2VGb2N1czoKKyAg
ICAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwgTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yKQorICAg
ICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6SWRsZTsKKyAgICAgICAgaWYg
KG1fcmVhZHlTdGF0ZSA+IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEpCisgICAgICAgICAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25FbnRlcmVkRnVsbHNjcmVlbjoKKyAg
ICAgICAgbV9pbkZ1bGxTY3JlZW4gPSB0cnVlOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
TWVkaWFQbGF5ZXJOb3RpZmljYXRpb25FeGl0ZWRGdWxsc2NyZWVuOiB7CisgICAgICAgIG1faW5G
dWxsU2NyZWVuID0gZmFsc2U7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgICAgICBzZXRU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbigwKTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uUmVhZHlGb3JJbnNwZWN0aW9uOgor
ICAgICAgICAvLyBUaGUgYnVmZmVyaW5nIHN0YXRlIHNvbWV0aW1lcyByZWFjaGVzICJsaWtlbHkg
dG8ga2VlcCB1cCIgb3IgImZ1bGwiIGJlZm9yZSB0aGUgcGxheWVyIGl0ZW0gaXMKKyAgICAgICAg
Ly8gcmVhZHkgZm9yIGluc3BlY3Rpb24uIEluIHRoYXQgY2FzZSBhZHZhbmNlIGRpcmVjdGx5IHRv
IEhhdmVFbm91Z2hEYXRhLgorICAgICAgICBpZiAobV9idWZmZXJpbmdTdGF0ZSA+IFVubGlrZWxl
eVRvS2VlcFVwKQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVF
bm91Z2hEYXRhOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRp
YVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVk
aWFQbGF5ZXJOb3RpZmljYXRpb25NZWRpYVZhbGlkYXRlZDoKKyAgICAgICAgaWYgKG1fbmV0d29y
a1N0YXRlIDwgTWVkaWFQbGF5ZXI6OklkbGUgJiYgIW1fcHJlcGFyaW5nVG9QbGF5KQorICAgICAg
ICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6SWRsZTsKKyAgICAgICAgcHJvY2Vz
c1BlbmRpbmdSZXF1ZXN0cygpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5
ZXJOb3RpZmljYXRpb25NZWRpYUZhaWxlZFRvVmFsaWRhdGU6CisgICAgICAgIG1fbmV0d29ya1N0
YXRlID0gTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yOworICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7IAorICAgICAgICBtX3VzaW5nTmV0d29yayA9IGZhbHNl
OworICAgICAgICBtX3ByZXBhcmluZ1RvUGxheSA9IGZhbHNlOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25QbGF5YmFja0ZhaWxlZDogeworICAgICAg
ICAvLyBGSVhNRTogV2UgY2FuJ3QgY3VycmVudGx5IHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2Vl
biBOZXR3b3JrRXJyb3IgYW5kIERlY29kZUVycm9yLgorICAgICAgICBtX25ldHdvcmtTdGF0ZSA9
IE1lZGlhUGxheWVyOjpEZWNvZGVFcnJvcjsKKworICAgICAgICAvLyBEb24ndCByZXNldCByZWFk
eVN0YXRlLCB3aGF0IHdlIGhhdmUgbG9hZGVkIGFscmVhZHkgbWF5IGJlIHBsYXlhYmxlLgorICAg
ICAgICBtX3VzaW5nTmV0d29yayA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uUmVhZHlGb3JQbGF5YmFjazoKKyAgICAgICAg
aWYgKG1fbmV0d29ya1N0YXRlIDwgTWVkaWFQbGF5ZXI6OkxvYWRpbmcpCisgICAgICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvbkRpZFBsYXlUb1RoZUVuZDoKKyAgICAgICAgbV9t
ZWRpYVBsYXllci0+dGltZUNoYW5nZWQoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1l
ZGlhUGxheWVyTm90aWZpY2F0aW9uU3RyZWFtTGlrZWx5VG9LZWVwVXA6CisgICAgICAgIGlmICht
X25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxheWVyOjpMb2FkaW5nKQorICAgICAgICAgICAgbV9uZXR3
b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgaWYgKG1fcmVhZHlTdGF0
ZSA+IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEgJiYgbV9yZWFkeVN0YXRlIDwgTWVkaWFQbGF5
ZXI6OkhhdmVFbm91Z2hEYXRhKQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5
ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICBtX2J1ZmZlcmluZ1N0YXRlID0gTGlrZWxleVRv
S2VlcFVwOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRp
b25TdHJlYW1CdWZmZXJGdWxsOgorICAgICAgICAvLyBUaGUgbWVkaWEgYnVmZmVycyBhcmUgZnVs
bCBzbyBubyBtb3JlIGRhdGEgY2FuIGJlIGxvYWRlZC4gVGhpcyBpc24ndCByZWFsbHkgdGhlIHRo
ZSBzYW1lIHRoaW5nIGFzIAorICAgICAgICAvLyAiSGF2ZUZ1dHVyZURhdGEiLCBidXQgbm90aGlu
ZyBtb3JlIHdpbGwgYmUgbG9hZGVkIHVudGlsIHBsYXliYWNrIGNvbnN1bWVzIHNvbWUgb2YgdGhl
IGJ1ZmZlcmVkIGRhdGEKKyAgICAgICAgLy8gc28gYnVtcCB0aGUgcmVhZHlTdGF0ZSB0byBhbGxv
dyBwbGF5YmFjay4KKyAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA+IE1lZGlhUGxheWVyOjpIYXZl
TWV0YWRhdGEgJiYgbV9yZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhKQor
ICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhOwor
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxlOworICAgICAgICBtX2J1
ZmZlcmluZ1N0YXRlID0gRnVsbDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxh
eWVyTm90aWZpY2F0aW9uU3RyZWFtUmFuRHJ5OgorICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBpZiAobV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5
ZXI6OkhhdmVNZXRhZGF0YSkKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVy
OjpIYXZlQ3VycmVudERhdGE7CisgICAgICAgIG1fYnVmZmVyaW5nU3RhdGUgPSBFbXB0eTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uU3RyZWFtVW5s
aWtlbHlUb0tlZXBVcDoKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9h
ZGluZzsKKyAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA+IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRh
dGEgJiYgbV9yZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhKQorICAgICAg
ICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhOworICAgICAg
ICBtX2J1ZmZlcmluZ1N0YXRlID0gVW5saWtlbGV5VG9LZWVwVXA7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvbkZpbGVMb2FkZWQ6CisgICAgICAgIG1f
bmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAgbV9yZWFkeVN0YXRl
ID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25UaW1lSnVtcGVkOgorICAgICAgICAvLyBTb21ldGlt
ZXMgZ2V0IGEgc3B1cmlvdXMgInRpbWUganVtcGVkIiB3aGVuIHRoZSBtb3ZpZSBpcyBiZWluZyBz
ZXQgdXAgb3IgaW1tZWRpYXRlbHkgYWZ0ZXIgcGF1c2luZywgCisgICAgICAgIC8vIGRvbid0IGZh
bGwgZm9yIGl0LgorICAgICAgICBpZiAobV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZl
Q3VycmVudERhdGEpCisgICAgICAgICAgICBtX21lZGlhUGxheWVyLT50aW1lQ2hhbmdlZCgpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25NdXRlZERp
ZENoYW5nZToKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uVm9sdW1lRGlkQ2hhbmdl
OgorICAgICAgICArK21fY2hhbmdpbmdWb2x1bWU7CisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnZv
bHVtZUNoYW5nZWQodm9sdW1lKCkpOworICAgICAgICAtLW1fY2hhbmdpbmdWb2x1bWU7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvblNpemVEaWRDaGFu
Z2U6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvblBs
YXlQYXVzZUJ1dHRvblByZXNzZWQ6CisgICAgY2FzZSBNZWRpYVBsYXllclJlcXVlc3RCZWdpblBs
YXliYWNrOgorICAgIGNhc2UgTWVkaWFQbGF5ZXJSZXF1ZXN0UGF1c2VQbGF5YmFjazoKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uUmF0ZURpZENoYW5n
ZToKKyAgICAgICAgbV9wcmVwYXJpbmdUb1BsYXkgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fcGF1
c2VSZXF1ZXN0ZWQgJiYgcmF0ZSgpKQorICAgICAgICAgICAgbV9wYXVzZVJlcXVlc3RlZCA9IGZh
bHNlOworICAgICAgICBicmVhazsKKworI2lmIEVOQUJMRShJT1NfQUlSUExBWSkKKyAgICBjYXNl
IE1lZGlhUGxheWVyTm90aWZpY2F0aW9uQ3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzc0No
YW5nZWQ6CisgICAgICAgIG1fbWVkaWFQbGF5ZXItPmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2ly
ZWxlc3NDaGFuZ2VkKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5v
dGlmaWNhdGlvblBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZDoKKyAgICAgICAgbV9t
ZWRpYVBsYXllci0+cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkKCk7CisgICAgICAg
IGJyZWFrOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IG9sZE5l
dHdvcmtTdGF0ZSkKKyAgICAgICAgbV9tZWRpYVBsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgp
OworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkKKyAgICAgICAgbV9tZWRp
YVBsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKworICAgIExPRyhNZWRpYSwgIk1lZGlhUGxh
eWVyUHJpdmF0ZUlPUzo6ZGVsaXZlck5vdGlmaWNhdGlvbiglcCkgLSBleGl0aW5nIHdpdGggbmV0
d29ya1N0YXRlID0gJWksIHJlYWR5U3RhdGUgPSAlaSIsIAorICAgICAgICB0aGlzLCBzdGF0aWNf
Y2FzdDxpbnQ+KG1fbmV0d29ya1N0YXRlKSwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWR5U3RhdGUp
KTsKK30KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
SU9TOjpyZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9pbkZ1bGxTY3JlZW47Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiogcmVwcmVzZW50
YXRpb24pCit7CisgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3NldFRleHRUcmFja1Jl
cHJlc2VudGF0aW9uOnJlcHJlc2VudGF0aW9uID8gcmVwcmVzZW50YXRpb24tPnBsYXRmb3JtTGF5
ZXIoKSA6IG51bGxwdHJdOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6aW5iYW5k
VGV4dFRyYWNrc0NoYW5nZWQoTlNBcnJheSAqdHJhY2tzKQoreworICAgIFZlY3RvcjxSZWZQdHI8
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUz4gPiByZW1vdmVkVGV4dFRyYWNrcyA9IG1fdGV4
dFRyYWNrczsKKworICAgIGZvciAoTlNEaWN0aW9uYXJ5ICp0cmFja0luZm8gaW4gdHJhY2tzKSB7
CisgICAgICAgIGJvb2wgbmV3VHJhY2sgPSB0cnVlOworICAgICAgICBOU051bWJlciAqdHJhY2tJ
RFZhbHVlICA9IFt0cmFja0luZm8gb2JqZWN0Rm9yS2V5OlRleHRUcmFja0lES2V5XTsKKworICAg
ICAgICBpZiAoIVt0cmFja0lEVmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkg
eworICAgICAgICAgICAgTlNMb2coQCJVbmV4cGVjdGVkIHRyYWNrIElELCBpZ25vcmluZy4iKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaW50IHRyYWNrSUQg
PSBbdHJhY2tJRFZhbHVlIGludFZhbHVlXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVt
b3ZlZFRleHRUcmFja3Muc2l6ZSgpOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBSZWZQdHI8
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUz4gdHJhY2sgPSBzdGF0aWNfY2FzdDxJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGSU9TKj4ocmVtb3ZlZFRleHRUcmFja3NbaSAtIDFdLmdldCgpKTsK
KworICAgICAgICAgICAgaWYgKHRyYWNrLT5pbnRlcm5hbElEKCkgPT0gdHJhY2tJRCkgeworICAg
ICAgICAgICAgICAgIHJlbW92ZWRUZXh0VHJhY2tzLnJlbW92ZShpIC0gMSk7CisgICAgICAgICAg
ICAgICAgbmV3VHJhY2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIW5ld1RyYWNrKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgTlNTdHJpbmcgKm5hbWUgPSBbdHJhY2tJbmZvIG9iamVjdEZvcktl
eTpUZXh0VHJhY2tEaXNwbGF5TmFtZUtleV07CisgICAgICAgIE5TU3RyaW5nICpsYW5ndWFnZSA9
IFt0cmFja0luZm8gb2JqZWN0Rm9yS2V5OlRleHRUcmFja0xvY2FsZUlkZW50aWZpZXJLZXldOwor
ICAgICAgICBOU1N0cmluZyAqdHlwZSA9IFt0cmFja0luZm8gb2JqZWN0Rm9yS2V5OlRleHRUcmFj
a1R5cGVLZXldOworCisgICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6
aW5iYW5kVGV4dFRyYWNrc0NoYW5nZWQoJXApIC0gYWRkaW5nIHRyYWNrIGlkICVpLCBuYW1lID0g
JXMsIGxhbmd1YWdlID0gJXMsIHR5cGUgPSAlcyIsIHRoaXMsIHRyYWNrSUQsIFtuYW1lIFVURjhT
dHJpbmddLCBbbGFuZ3VhZ2UgVVRGOFN0cmluZ10sIFt0eXBlIFVURjhTdHJpbmddKTsKKworICAg
ICAgICBtX3RleHRUcmFja3MuYXBwZW5kKEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M6OmNy
ZWF0ZSh0aGlzLCB0cmFja0lELCBuYW1lLCBsYW5ndWFnZSwgdHlwZSkpOworICAgIH0KKworICAg
IGlmIChyZW1vdmVkVGV4dFRyYWNrcy5zaXplKCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV90ZXh0VHJhY2tzLnNpemUoKTsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgUmVmUHRy
PEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M+IHRyYWNrID0gc3RhdGljX2Nhc3Q8SW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRklPUyo+KG1fdGV4dFRyYWNrc1tpIC0gMV0uZ2V0KCkpOworCisg
ICAgICAgICAgICBpZiAoIXJlbW92ZWRUZXh0VHJhY2tzLmNvbnRhaW5zKHRyYWNrKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKG1fY3VycmVudFRyYWNrID09
IHRyYWNrLmdldCgpKQorICAgICAgICAgICAgICAgIG1fY3VycmVudFRyYWNrID0gbnVsbHB0cjsK
KyAgICAgICAgICAgIG1fbWVkaWFQbGF5ZXItPnJlbW92ZVRleHRUcmFjayh0cmFjayk7CisgICAg
ICAgICAgICBtX3RleHRUcmFja3MucmVtb3ZlKGkgLSAxKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RleHRUcmFja3Muc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M+IHRyYWNrID0gc3Rh
dGljX2Nhc3Q8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUyo+KG1fdGV4dFRyYWNrc1tpXS5n
ZXQoKSk7CisKKyAgICAgICAgdHJhY2stPnNldFRleHRUcmFja0luZGV4KGkpOworICAgICAgICBp
ZiAodHJhY2stPmhhc0JlZW5SZXBvcnRlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgdHJhY2stPnNldEhhc0JlZW5SZXBvcnRlZCh0cnVlKTsKKyAgICAgICAgbV9tZWRpYVBs
YXllci0+YWRkVGV4dFRyYWNrKHRyYWNrLmdldCgpKTsKKyAgICB9CisgICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlSU9TOjppbmJhbmRUZXh0VHJhY2tzQ2hhbmdlZCglcCkgLSBmb3Vu
ZCAlaSBpbi1iYW5kIHRyYWNrcyIsIHRoaXMsIG1fdGV4dFRyYWNrcy5zaXplKCkpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c2V0U2VsZWN0ZWRUZXh0VHJhY2soTlNOdW1iZXIg
KnRyYWNrSUQpCit7CisgICAgaWYgKCFbdHJhY2tJRCBpc0tpbmRPZkNsYXNzOltOU051bWJlciBj
bGFzc11dKSB7CisgICAgICAgIE5TTG9nKEAiVW5leHBlY3RlZCB0cmFjayBJRCwgaWdub3Jpbmcu
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxw
ZXIpIHsKKyAgICAgICAgYWRkRGVmZXJyZWRSZXF1ZXN0KERlZmVycmVkUHJvcGVydHlTZWxlY3Rl
ZFRyYWNrS2V5LCB0cmFja0lEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgh
W21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihf
c2V0U2VsZWN0ZWRUZXh0VHJhY2s6KV0pCisgICAgICAgIHJldHVybjsKKworICAgIHNldERlbGF5
Q2FsbGJhY2tzKHRydWUpOworICAgIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpzZXRDdXJyZW50VHJhY2soJXApIC0gc2VsZWN0aW5nIHRyYWNrIGlkICVpIiwg
dGhpcywgW3RyYWNrSUQgaW50VmFsdWVdKTsKKyAgICAgICAgW21fZGVmZXJyZWRQcm9wZXJ0aWVz
LmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpEZWZlcnJlZFByb3BlcnR5U2VsZWN0ZWRUcmFja0tl
eV07CisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXRTZWxlY3RlZFRleHRU
cmFjazp0cmFja0lEXTsKKyAgICB9CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6dHJhY2tNb2RlQ2hhbmdlZCgpCit7CisgICAg
UmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY+IHRyYWNrVG9FbmFibGU7CisKKyAgICAv
LyBBVkZvdW5kYXRpb24gY2FuIG9ubHkgZW1pdCBjdWVzIGZvciBvbmUgdHJhY2sgYXQgYSB0aW1l
LCBzbyBlbmFibGUgdGhlIGZpcnN0IHRyYWNrIHRoYXQgaXMgc2hvd2luZywgb3IgdGhlIGZpcnN0
IHRoYXQKKyAgICAvLyBpcyBoaWRkZW4gaWYgbm9uZSBhcmUgc2hvd2luZy4gT3RoZXJ3aXNlIGRp
c2FibGUgYWxsIHRyYWNrcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90ZXh0VHJh
Y2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TPiB0cmFjayA9IG1fdGV4dFRyYWNrc1tpXTsKKyAgICAgICAgaWYgKHRyYWNrLT5tb2Rl
KCkgPT0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6U2hvd2luZykgeworICAgICAgICAgICAgdHJh
Y2tUb0VuYWJsZSA9IHRyYWNrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCF0cmFja1RvRW5hYmxlICYmIHRyYWNrLT5tb2RlKCkgPT0gSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZTo6SGlkZGVuKQorICAgICAgICAgICAgdHJhY2tUb0VuYWJsZSA9IHRyYWNrOworICAg
IH0KKworICAgIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MqIHRyYWNrUHJpdmF0ZSA9IHN0
YXRpY19jYXN0PEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MqPih0cmFja1RvRW5hYmxlLmdl
dCgpKTsKKyAgICBpZiAobV9jdXJyZW50VHJhY2sgPT0gdHJhY2tQcml2YXRlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2N1cnJlbnRUcmFjayA9IHRyYWNrUHJpdmF0ZTsKKyAgICBzZXRTZWxl
Y3RlZFRleHRUcmFjayh0cmFja1ByaXZhdGUgPyBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDp0cmFj
a1ByaXZhdGUtPmludGVybmFsSUQoKV0gOiBuaWwpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUzo6Y2xlYXJUZXh0VHJhY2tzKCkKK3sKKyAgICBtX2N1cnJlbnRUcmFjayA9IG51bGxw
dHI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGV4dFRyYWNrcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUz4gdHJhY2sg
PSBtX3RleHRUcmFja3NbaV07CisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnJlbW92ZVRleHRUcmFj
ayh0cmFjayk7CisgICAgICAgIHRyYWNrLT5kaXNjb25uZWN0KCk7CisgICAgfQorICAgIG1fdGV4
dFRyYWNrcy5jbGVhcigpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cHJvY2Vz
c0luYmFuZFRleHRUcmFja0N1ZShOU0FycmF5ICphdHRyaWJ1dGVkU3RyaW5ncywgZG91YmxlIHRp
bWUpCit7CisgICAgaWYgKCFtX2N1cnJlbnRUcmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jdXJyZW50VHJhY2stPnByb2Nlc3NDdWUocmVpbnRlcnByZXRfY2FzdDxDRkFycmF5UmVmPihh
dHRyaWJ1dGVkU3RyaW5ncyksIHRpbWUpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlP
Uzo6c2V0T3V0T2ZCYW5kVGV4dFRyYWNrcyhOU0FycmF5ICp0cmFja3NBcnJheSkKK3sKKyAgICBp
ZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpIHsKKyAgICAgICAgYWRkRGVmZXJyZWRSZXF1ZXN0KERl
ZmVycmVkUHJvcGVydHlPdXRPZkJhbmRUcmFja3NLZXksIHRyYWNrc0FycmF5KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICghW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfc2V0T3V0T2ZCYW5kVGV4dFRyYWNrczopXSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgeworICAg
ICAgICBbbV9kZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkRlZmVy
cmVkUHJvcGVydHlPdXRPZkJhbmRUcmFja3NLZXldOworICAgICAgICBbbV9tZWRpYVBsYXllckhl
bHBlci5nZXQoKSBfc2V0T3V0T2ZCYW5kVGV4dFRyYWNrczp0cmFja3NBcnJheV07CisgICAgfQor
ICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKworc3RhdGljIGludCBwbGF0Zm9ybVRy
YWNrSUQoUGxhdGZvcm1UZXh0VHJhY2sqIHBsYXRmb3JtVHJhY2spCit7CisgICAgaWYgKHBsYXRm
b3JtVHJhY2stPnR5cGUoKSA9PSBQbGF0Zm9ybVRleHRUcmFjazo6SW5CYW5kKSB7CisgICAgICAg
IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MqIHRyYWNrUHJpdmF0ZSA9IHN0YXRpY19jYXN0
PEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MqPihwbGF0Zm9ybVRyYWNrLT5jbGllbnQoKS0+
cHJpdmF0ZVRyYWNrKCkpOworICAgICAgICByZXR1cm4gdHJhY2tQcml2YXRlID8gdHJhY2tQcml2
YXRlLT5pbnRlcm5hbElEKCkgOiAwOworICAgIH0KKworICAgIHJldHVybiBwbGF0Zm9ybVRyYWNr
LT51bmlxdWVJZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6b3V0T2ZCYW5k
VGV4dFRyYWNrc0NoYW5nZWQoKQoreworICAgIGlmICghbV9tZW51SW50ZXJmYWNlLT5jbGllbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB0cmFj
a3NBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIFZl
Y3RvcjxSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+ID4gdGV4dFRyYWNrcyA9IG1fbWVudUludGVy
ZmFjZS0+Y2xpZW50KCktPnBsYXRmb3JtVGV4dFRyYWNrcygpOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRleHRUcmFja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPFBs
YXRmb3JtVGV4dFRyYWNrPiBwbGF0Zm9ybVRyYWNrID0gdGV4dFRyYWNrc1tpXTsKKworICAgICAg
ICBpZiAocGxhdGZvcm1UcmFjay0+dHlwZSgpID09IFBsYXRmb3JtVGV4dFRyYWNrOjpJbkJhbmQp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHBsYXRmb3JtVHJhY2stPmtpbmQo
KSAhPSBQbGF0Zm9ybVRleHRUcmFjazo6U3VidGl0bGUgJiYgcGxhdGZvcm1UcmFjay0+a2luZCgp
ICE9IFBsYXRmb3JtVGV4dFRyYWNrOjpDYXB0aW9uKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHRyYWNrID0gYWRvcHROUyhb
W05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKworICAgICAgICBbdHJhY2suZ2V0
KCkgc2V0T2JqZWN0OnBsYXRmb3JtVHJhY2stPmxhYmVsKCkgZm9yS2V5OlRleHRUcmFja0Rpc3Bs
YXlOYW1lS2V5XTsKKworICAgICAgICBpZiAoIXBsYXRmb3JtVHJhY2stPmxhbmd1YWdlKCkuaXNF
bXB0eSgpKQorICAgICAgICAgICAgW3RyYWNrLmdldCgpIHNldE9iamVjdDpwbGF0Zm9ybVRyYWNr
LT5sYW5ndWFnZSgpIGZvcktleTpUZXh0VHJhY2tMb2NhbGVJZGVudGlmaWVyS2V5XTsKKworICAg
ICAgICBOU1N0cmluZyAqdHlwZSA9IHBsYXRmb3JtVHJhY2stPmtpbmQoKSA9PSBQbGF0Zm9ybVRl
eHRUcmFjazo6U3VidGl0bGUgPyBUZXh0VHJhY2tTdWJ0aXRsZXNLZXkgOiBUZXh0VHJhY2tDYXB0
aW9uc0tleTsKKyAgICAgICAgW3RyYWNrLmdldCgpIHNldE9iamVjdDp0eXBlIGZvcktleTpUZXh0
VHJhY2tUeXBlS2V5XTsKKworICAgICAgICBbdHJhY2suZ2V0KCkgc2V0T2JqZWN0OltOU051bWJl
ciBudW1iZXJXaXRoSW50OnBsYXRmb3JtVHJhY2tJRChwbGF0Zm9ybVRyYWNrLmdldCgpKV0gZm9y
S2V5OlRleHRUcmFja0lES2V5XTsKKworICAgICAgICBbdHJhY2tzQXJyYXkgYWRkT2JqZWN0OnRy
YWNrLmdldCgpXTsKKyAgICB9CisKKyAgICBpZiAoIVt0cmFja3NBcnJheS5nZXQoKSBjb3VudF0p
CisgICAgICAgIHJldHVybjsKKworICAgIHNldE91dE9mQmFuZFRleHRUcmFja3ModHJhY2tzQXJy
YXkuZ2V0KCkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6dGV4dFRyYWNrV2Fz
U2VsZWN0ZWRCeU1lZGlhRWxlbWVudChQYXNzUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiBwbGF0
Zm9ybVRyYWNrKQoreworICAgIHNldFNlbGVjdGVkVGV4dFRyYWNrKFtOU051bWJlciBudW1iZXJX
aXRoSW50OnBsYXRmb3JtVHJhY2tJRChwbGF0Zm9ybVRyYWNrLmdldCgpKV0pOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6dGV4dFRyYWNrV2FzU2VsZWN0ZWRCeVBsdWdpbihOU0Rp
Y3Rpb25hcnkgKnRyYWNrSW5mbykKK3sKKyAgICBpZiAoIW1fbWVudUludGVyZmFjZSB8fCAhbV9t
ZW51SW50ZXJmYWNlLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF0cmFj
a0luZm8pIHsKKyAgICAgICAgbV9tZW51SW50ZXJmYWNlLT5jbGllbnQoKS0+c2V0U2VsZWN0ZWRU
ZXh0VHJhY2soMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8UGxhdGZv
cm1UZXh0VHJhY2s+IHRyYWNrVG9TZWxlY3Q7CisgICAgTlNOdW1iZXIgKnRyYWNrSURUb1NlbGVj
dCAgPSBbdHJhY2tJbmZvIG9iamVjdEZvcktleTpUZXh0VHJhY2tJREtleV07CisgICAgaWYgKCFb
dHJhY2tJRFRvU2VsZWN0IGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pIHsKKyAgICAg
ICAgTlNMb2coQCJVbmV4cGVjdGVkIHRyYWNrIElELCBpZ25vcmluZy4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGludCB0cmFja0lEID0gW3RyYWNrSURUb1NlbGVjdCBpbnRWYWx1
ZV07CisgICAgaWYgKHRyYWNrSUQgPT0gVGV4dFRyYWNrT2ZmTWVudUl0ZW1JRCkKKyAgICAgICAg
dHJhY2tUb1NlbGVjdCA9IFBsYXRmb3JtVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKTsK
KyAgICBlbHNlIGlmICh0cmFja0lEID09IFRleHRUcmFja0F1dG9NZW51SXRlbUlEKQorICAgICAg
ICB0cmFja1RvU2VsZWN0ID0gUGxhdGZvcm1UZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21hdGlj
SXRlbSgpOworICAgIGVsc2UgeworICAgICAgICBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtVGV4dFRy
YWNrPiA+IHRleHRUcmFja3MgPSBtX21lbnVJbnRlcmZhY2UtPmNsaWVudCgpLT5wbGF0Zm9ybVRl
eHRUcmFja3MoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRUcmFja3Mu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4gcGxh
dGZvcm1UcmFjayA9IHRleHRUcmFja3NbaV07CisKKyAgICAgICAgICAgIGlmICh0cmFja0lEID09
IHBsYXRmb3JtVHJhY2tJRChwbGF0Zm9ybVRyYWNrLmdldCgpKSkgeworICAgICAgICAgICAgICAg
IHRyYWNrVG9TZWxlY3QgPSBwbGF0Zm9ybVRyYWNrOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF0cmFja1RvU2VsZWN0
KSB7CisgICAgICAgIE5TTG9nKEAiVGV4dCB0cmFjayBJRCAlaSBpcyB1bmtub3duLCBpZ25vcmlu
Zy4iLCB0cmFja0lEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fbWVudUludGVy
ZmFjZS0+Y2xpZW50KCktPnNldFNlbGVjdGVkVGV4dFRyYWNrKHRyYWNrVG9TZWxlY3QpOworfQor
CitQYXNzUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjp0ZXh0VHJhY2tNZW51KCkKK3sKKyAgICBpZiAoIW1fbWVudUludGVyZmFjZSkK
KyAgICAgICAgbV9tZW51SW50ZXJmYWNlID0gUGxhdGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNl
SU9TOjpjcmVhdGUodGhpcyk7CisgICAgcmV0dXJuIG1fbWVudUludGVyZmFjZTsKK30KKyNlbmRp
ZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworQGlt
cGxlbWVudGF0aW9uIFdlYkNvcmVNZWRpYVBsYXllck5vdGlmaWNhdGlvbkhlbHBlcgorCistIChp
ZClpbml0V2l0aENsaWVudDooTWVkaWFQbGF5ZXJQcml2YXRlSU9TICopY2xpZW50Cit7CisgICAg
X2NsaWVudCA9IGNsaWVudDsKKyAgICByZXR1cm4gW3N1cGVyIGluaXRdOworfQorCistICh2b2lk
KWRpc2Nvbm5lY3QKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVz
dHNXaXRoVGFyZ2V0OnNlbGZdOworICAgIF9jbGllbnQgPSAwOworfQorCistICh2b2lkKWNhbmNl
bFBlbmRpbmdSZXF1ZXN0cworeworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1S
ZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZl07Cit9CisKKy0gKHZvaWQpZGVsYXlOb3RpZmljYXRpb246
KGludClub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX2NsaWVudCkKKyAgICAgICAgW3NlbGYgcGVy
Zm9ybVNlbGVjdG9yOkBzZWxlY3RvcihkZWxpdmVyTm90aWZpY2F0aW9uOikgd2l0aE9iamVjdDpb
TlNOdW1iZXIgbnVtYmVyV2l0aEludDpub3RpZmljYXRpb25dIGFmdGVyRGVsYXk6MF07Cit9CisK
Ky0gKHZvaWQpZGVsaXZlck5vdGlmaWNhdGlvbjooTlNOdW1iZXIgKilub3RpZmljYXRpb24KK3sK
KyAgICBpZiAoIV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoX2NsaWVudC0+Y2Fs
bGJhY2tzRGVsYXllZCgpKQorICAgICAgICBbc2VsZiBkZWxheU5vdGlmaWNhdGlvbjpbbm90aWZp
Y2F0aW9uIGludFZhbHVlXV07CisgICAgZWxzZQorICAgICAgICBfY2xpZW50LT5kZWxpdmVyTm90
aWZpY2F0aW9uKChNZWRpYVBsYXllclByb3h5Tm90aWZpY2F0aW9uVHlwZSlbbm90aWZpY2F0aW9u
IGludFZhbHVlXSk7Cit9CisKKy0gKHZvaWQpc2NoZWR1bGVQcmVwYXJlVG9QbGF5V2l0aE9wdGlv
bmFsRGVsYXk6KE5TTnVtYmVyICopc2hvdWxkRGVsYXkKK3sKKyAgICBpZiAoIV9jbGllbnQpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoW3Nob3VsZERlbGF5IGJvb2xWYWx1ZV0pCisgICAgICAg
IFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Ioc2NoZWR1bGVQcmVwYXJlVG9QbGF5V2l0
aE9wdGlvbmFsRGVsYXk6KSB3aXRoT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10g
YWZ0ZXJEZWxheTowXTsKKyAgICBlbHNlCisgICAgICAgIF9jbGllbnQtPnByZXBhcmVUb1BsYXko
KTsKK30KKworLSAodm9pZClzY2hlZHVsZURlZmVycmVkUHJvcGVydGllc1dpdGhPcHRpb25hbERl
bGF5OihOU051bWJlciAqKXNob3VsZERlbGF5Cit7CisgICAgaWYgKCFfY2xpZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoW3Nob3VsZERlbGF5IGJvb2xWYWx1ZV0pIHsKKyAgICAgICAg
aWYgKCFfZGVmZXJyZWRQcm9wZXJ0aWVzU2NoZWR1bGVkKSB7CisgICAgICAgICAgICBbc2VsZiBw
ZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHNjaGVkdWxlRGVmZXJyZWRQcm9wZXJ0aWVzV2l0aE9w
dGlvbmFsRGVsYXk6KSB3aXRoT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10gYWZ0
ZXJEZWxheTowXTsKKyAgICAgICAgICAgIF9kZWZlcnJlZFByb3BlcnRpZXNTY2hlZHVsZWQgPSBZ
RVM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIF9kZWZlcnJlZFBy
b3BlcnRpZXNTY2hlZHVsZWQgPSBOTzsKKyAgICBfY2xpZW50LT5wcm9jZXNzRGVmZXJyZWRSZXF1
ZXN0cygpOworfQorCistICh2b2lkKXBsdWdpbkVsZW1lbnRJbkJhbmRBbHRlcm5hdGVUZXh0VHJh
Y2tzRGlkQ2hhbmdlOihOU0FycmF5ICopdHJhY2tzCit7CisgICAgaWYgKCFfY2xpZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKCFfY2xpZW50
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBfY2xpZW50LT5pbmJhbmRUZXh0VHJhY2tz
Q2hhbmdlZCh0cmFja3MpOworICAgIH0pOworfQorCistICh2b2lkKXBsdWdpbkVsZW1lbnREaWRT
ZWxlY3RUZXh0VHJhY2s6KE5TRGljdGlvbmFyeSAqKXRyYWNrSW5mbworeworICAgIGlmICghX2Ns
aWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlm
ICghX2NsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgX2NsaWVudC0+dGV4dFRy
YWNrV2FzU2VsZWN0ZWRCeVBsdWdpbih0cmFja0luZm8pOworICAgIH0pOworfQorCistICh2b2lk
KXBsdWdpbkVsZW1lbnREaWRPdXRwdXRBdHRyaWJ1dGVkU3RyaW5nczooTlNBcnJheSAqKXN0cmlu
Z3MgbmF0aXZlU2FtcGxlQnVmZmVyczooTlNBcnJheSAqKWJ1ZmZlcnMgZm9yVGltZTooTlNUaW1l
SW50ZXJ2YWwpdGltZQoreworICAgIFVOVVNFRF9QQVJBTShidWZmZXJzKTsKKworICAgIGlmICgh
X2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAg
IGlmICghX2NsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgX2NsaWVudC0+cHJv
Y2Vzc0luYmFuZFRleHRUcmFja0N1ZShzdHJpbmdzLCB0aW1lKTsKKyAgICB9KTsKK30KKworQGVu
ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzUwYzQ5ZTVjZTM0Yjk2
ZDk1OTJjMjY0NjEzMThkN2Y0OTUyZjFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCkBAIC0wLDAgKzEs
MjEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiU2lt
cGxlRm9udERhdGEuaCIKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJG
b250LmgiCisjaW1wb3J0ICJGb250Q2FjaGUuaCIKKyNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5o
IgorI2ltcG9ydCAiRm9udFNlcnZpY2VzSU9TLmgiCisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ0dG
b250R2x5cGhTdXBwb3J0Lmg+CisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ0dGb250SW5mby5oPgor
I2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NHRm9udFJlbmRlcmluZy5oPgorI2ltcG9ydCA8Q29yZVRl
eHQvQ29yZVRleHQuaD4KKyNpbXBvcnQgPGZsb2F0Lmg+CisjaW1wb3J0IDx1bmljb2RlL3VjaGFy
Lmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29sIGZvbnRGYW1pbHlTaG91
bGROb3RCZVVzZWRGb3JBcmFiaWMoQ0ZTdHJpbmdSZWYgZm9udEZhbWlseU5hbWUpCit7CisgICAg
aWYgKCFmb250RmFtaWx5TmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGlt
ZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24n
dCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4KKyAgICAv
LyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9u
Y2UgdGhlIGFib3ZlIGJ1ZyBpcyBmaXhlZC4KKyAgICAvLyBBcmlhbCBhbmQgVGFob21hIGFyZSBo
YXZlIHBlcmZvcm1hbmNlIGlzc3VlcyBzbyBkb24ndCB1c2UgdGhlbSBhcyB3ZWxsLgorICAgIHJl
dHVybiAoQ0ZTdHJpbmdDb21wYXJlKENGU1RSKCJUaW1lcyBOZXcgUm9tYW4iKSwgZm9udEZhbWls
eU5hbWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQorICAgICAgICAgICB8fCAoQ0ZTdHJpbmdD
b21wYXJlKENGU1RSKCJBcmlhbCIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVx
dWFsVG8pCisgICAgICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIlRhaG9tYSIpLCBm
b250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pOworfQorCitzdGF0aWMgYm9v
bCBmb250SGFzVmVydGljYWxHbHlwaHMoQ1RGb250UmVmIGN0Rm9udCkKK3sKKyAgICAvLyBUaGUg
Y2hlY2sgZG9lc24ndCBsb29rIG5lYXQgYnV0IHRoaXMgaXMgd2hhdCBBcHBLaXQgZG9lcyBmb3Ig
dmVydGljYWwgd3JpdGluZy4uLgorICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB0YWJsZVRhZ3Mg
PSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVP
cHRpb25Ob09wdGlvbnMpKTsKKyAgICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3Vu
dCh0YWJsZVRhZ3MuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwg
bnVtVGFibGVzOyArK2luZGV4KSB7CisgICAgICAgIENURm9udFRhYmxlVGFnIHRhZyA9IChDVEZv
bnRUYWJsZVRhZykodWludHB0cl90KUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdl
dCgpLCBpbmRleCk7CisgICAgICAgIGlmICh0YWcgPT0ga0NURm9udFRhYmxlVmhlYSB8fCB0YWcg
PT0ga0NURm9udFRhYmxlVk9SRykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgp
Cit7CisgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEubV9zeW50aGV0
aWNCb2xkID8gY2VpbGYobV9wbGF0Zm9ybURhdGEuc2l6ZSgpICAvIDI0LjBmKSA6IDAuZjsKKyAg
ICBtX3NwYWNlR2x5cGggPSAwOworICAgIG1fc3BhY2VXaWR0aCA9IDA7CisgICAgdW5zaWduZWQg
dW5pdHNQZXJFbTsKKyAgICBmbG9hdCBhc2NlbnQ7CisgICAgZmxvYXQgZGVzY2VudDsKKyAgICBm
bG9hdCBsaW5lR2FwOworICAgIGZsb2F0IGxpbmVTcGFjaW5nOworICAgIGZsb2F0IHhIZWlnaHQ7
CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lOworICAgIGlmIChDVEZvbnRS
ZWYgY3RGb250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpKSB7CisgICAgICAgIEZvbnRTZXJ2aWNl
c0lPUyBmb250U2VydmljZShjdEZvbnQpOworICAgICAgICBhc2NlbnQgPSBjZWlsZihmb250U2Vy
dmljZS5hc2NlbnQoKSk7CisgICAgICAgIGRlc2NlbnQgPSBjZWlsZihmb250U2VydmljZS5kZXNj
ZW50KCkpOworICAgICAgICBsaW5lU3BhY2luZyA9IGZvbnRTZXJ2aWNlLmxpbmVTcGFjaW5nKCk7
CisgICAgICAgIGxpbmVHYXAgPSBmb250U2VydmljZS5saW5lR2FwKCk7CisgICAgICAgIHhIZWln
aHQgPSBmb250U2VydmljZS54SGVpZ2h0KCk7CisgICAgICAgIHVuaXRzUGVyRW0gPSBmb250U2Vy
dmljZS51bml0c1BlckVtKCk7CisgICAgICAgIGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENv
cHlGYW1pbHlOYW1lKGN0Rm9udCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIENHRm9udFJlZiBj
Z0ZvbnQgPSBtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKTsKKworICAgICAgICB1bml0c1BlckVtID0g
Q0dGb250R2V0VW5pdHNQZXJFbShjZ0ZvbnQpOworCisgICAgICAgIGZsb2F0IHBvaW50U2l6ZSA9
IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICAgICAgYXNjZW50ID0gbHJvdW5kZihzY2FsZUVt
VG9Vbml0cyhDR0ZvbnRHZXRBc2NlbnQoY2dGb250KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUp
OworICAgICAgICBkZXNjZW50ID0gbHJvdW5kZigtc2NhbGVFbVRvVW5pdHMoLWFicyhDR0ZvbnRH
ZXREZXNjZW50KGNnRm9udCkpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIGxp
bmVHYXAgPSBscm91bmRmKHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldExlYWRpbmcoY2dGb250KSwg
dW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOworICAgICAgICB4SGVpZ2h0ID0gc2NhbGVFbVRvVW5p
dHMoQ0dGb250R2V0WEhlaWdodChjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKwor
ICAgICAgICBsaW5lU3BhY2luZyA9IGFzY2VudCArIGRlc2NlbnQgKyBsaW5lR2FwOworICAgICAg
ICBmYW1pbHlOYW1lID0gYWRvcHRDRihDR0ZvbnRDb3B5RmFtaWx5TmFtZShjZ0ZvbnQpKTsKKyAg
ICB9CisKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7CisgICAg
bV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldERl
c2NlbnQoZGVzY2VudCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwor
ICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcobGluZVNwYWNpbmcpOworICAgIG1fZm9u
dE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKKyAgICBtX3Nob3VsZE5vdEJlVXNlZEZvckFy
YWJpYyA9IGZvbnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoZmFtaWx5TmFtZS5nZXQo
KSk7CisKKyAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAm
JiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQorICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5
cGhzID0gZm9udEhhc1ZlcnRpY2FsR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKKwor
ICAgIGlmICghbV9wbGF0Zm9ybURhdGEubV9pc0Vtb2ppKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbnQgdGhpcmRPZlNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCkgLyAzOworICAgIG1fZm9u
dE1ldHJpY3Muc2V0QXNjZW50KHRoaXJkT2ZTaXplKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldERl
c2NlbnQodGhpcmRPZlNpemUpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcCh0aGlyZE9m
U2l6ZSk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZygwKTsKK30KKwordm9pZCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3sKKyAgICBtX2F2Z0NoYXJX
aWR0aCA9IDA7CisgICAgbV9tYXhDaGFyV2lkdGggPSAwOworCisgICAgLy8gRmFsbGJhY2sgdG8g
YSBjcm9zcy1wbGF0Zm9ybSBlc3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1
ZXMgaWYgdGhleSBhcmUgbm9uLXBvc2l0aXZlLgorICAgIGluaXRDaGFyV2lkdGhzKCk7Cit9CisK
K1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0
ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAoreworICAgIGlmIChpc0N1c3RvbUZvbnQoKSkgeworICAgICAgICBGb250UGxhdGZv
cm1EYXRhIHNjYWxlZEZvbnREYXRhKG1fcGxhdGZvcm1EYXRhKTsKKyAgICAgICAgc2NhbGVkRm9u
dERhdGEubV9zaXplID0gc2NhbGVkRm9udERhdGEubV9zaXplICogc2NhbGVGYWN0b3I7CisgICAg
ICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBm
YWxzZSk7CisgICAgfQorCisgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAq
IHNjYWxlRmFjdG9yOworICAgIENURm9udFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhtX3BsYXRmb3JtRGF0YS5mb250KCkpOworICAgIFJldGFpblB0
cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29w
eUZvbnREZXNjcmlwdG9yKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkpOworICAgIFJldGFpblB0cjxD
VEZvbnRSZWY+IHNjYWxlZEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3Jp
cHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgc2l6ZSwgbnVsbHB0cikpOworICAgIEZvbnRQbGF0
Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoc2NhbGVkRm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0Zm9y
bURhdGEuaXNQcmludGVyRm9udCgpLCBmYWxzZSwgZmFsc2UsIG1fcGxhdGZvcm1EYXRhLm9yaWVu
dGF0aW9uKCkpOworCisgICAgaWYgKHNjYWxlZEZvbnREYXRhLmZvbnQoKSkgeworICAgICAgICBp
ZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkKQorICAgICAgICAgICAgZm9udFRyYWl0
cyB8PSBrQ1RGb250Qm9sZFRyYWl0OworICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50
aGV0aWNPYmxpcXVlKQorICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250SXRhbGljVHJh
aXQ7CisKKyAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgc2NhbGVkRm9udFRyYWl0cyA9IENU
Rm9udEdldFN5bWJvbGljVHJhaXRzKHNjYWxlZEZvbnREYXRhLmZvbnQoKSk7CisgICAgICAgIHNj
YWxlZEZvbnREYXRhLm1fc3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYga0NURm9udEJvbGRU
cmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCk7CisgICAgICAg
IHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYga0NURm9u
dEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMp
OworCisgICAgICAgIHJldHVybiBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEoJnNjYWxl
ZEZvbnREYXRhKTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworYm9vbCBTaW1w
bGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgaW50KSBjb25zdAor
eworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5l
UGl0Y2goKQoreworICAgIENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7
CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOworICAgIGlmICghY3RGb250KQorICAg
ICAgICByZXR1cm47IC8vIENURm9udCBpcyBudWxsIGluIHRoZSBjYXNlIG9mIFNWRyBmb250cyBm
b3IgZXhhbXBsZS4KKworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUgPSBhZG9w
dENGKENURm9udENvcHlGdWxsTmFtZShjdEZvbnQpKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGN0Rm9udCkpOwor
CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IENHRm9udElzRml4ZWRQaXRjaChtX3BsYXRmb3Jt
RGF0YS5jZ0ZvbnQoKSkgfHwgKGZ1bGxOYW1lICYmIChDRlN0cmluZ0NvbXBhcmUoZnVsbE5hbWUu
Z2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIiksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09
IGtDRkNvbXBhcmVFcXVhbFRvIHx8IENGU3RyaW5nQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZT
VFIoIk1TLVBHb3RoaWMiKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFy
ZUVxdWFsVG8pKTsKKyAgICBpZiAoZmFtaWx5TmFtZSAmJiBDRlN0cmluZ0NvbXBhcmUoZmFtaWx5
TmFtZS5nZXQoKSwgQ0ZTVFIoIkNvdXJpZXIgTmV3IiksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRp
dmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSB7CisgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBDb3Vy
aWVyIE5ldyB0byBub3QgYmUgdHJlYXRlZCBhcyBmaXhlZCBwaXRjaCwgYXMgdGhpcyB3aWxsIG1h
a2UgdXNlIG9mIGEgaGFja2VkIHNwYWNlIHdpZHRoIHdoaWNoIGlzIHVuZGVzaXJlYWJsZSBmb3Ig
aVBob25lIChzZWUgcmRhcjovLzYyNjk3ODMpLgorICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNo
ID0gZmFsc2U7CisgICAgfQorfQorCitmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0
aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dT
aXplWmVybzsKKyAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjaykgeworICAgICAgICBpZiAocGxhdGZv
cm1EYXRhKCkubV9pc0Vtb2ppKQorICAgICAgICAgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlw
aHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24s
ICZnbHlwaCwgJmFkdmFuY2UsIDEpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZsb2F0
IHBvaW50U2l6ZSA9IHBsYXRmb3JtRGF0YSgpLm1fc2l6ZTsKKyAgICAgICAgICAgIENHQWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHBvaW50U2l6
ZSwgcG9pbnRTaXplKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBDR0ZvbnRSZW5kZXJpbmdT
dHlsZSByZW5kZXJpbmdTdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8
IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVy
aW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbiB8IGtDR0ZvbnRBbnRpYWxpYXNpbmdTdHlsZVVu
ZmlsdGVyZWQ7CisgICAgICAgICAgICBpZiAoIUNHRm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHls
ZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgJnRyYW5zZm9ybSwgcmVuZGVyaW5nU3R5bGUsICZn
bHlwaCwgMSwgJmFkdmFuY2UpKSB7CisgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBmdWxsTmFtZSA9IGFkb3B0Q0YoQ0dGb250Q29weUZ1bGxOYW1lKHBsYXRmb3JtRGF0YSgp
LmNnRm9udCgpKSk7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY2FjaGUg
Z2x5cGggd2lkdGhzIGZvciAlQCAlZiIsIGZ1bGxOYW1lLmdldCgpLCBwb2ludFNpemUpOworICAg
ICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfSBlbHNlCisgICAgICAgIENURm9udEdldEFkdmFuY2VzRm9yR2x5cGhzKG1fcGxhdGZv
cm1EYXRhLmN0Rm9udCgpLCBrQ1RGb250VmVydGljYWxPcmllbnRhdGlvbiwgJmdseXBoLCAmYWR2
YW5jZSwgMSk7CisKKyAgICByZXR1cm4gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9m
ZnNldDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25JT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOWU4YjZlOTAyMDNiMDBhYTBjODA4Yjg2ZDM3ZjIwYWE4
OGJjNzE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLmgKQEAgLTAsMCArMSw2MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1NfaAorI2RlZmluZSBU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPU19oCisKKyNpZiBQTEFURk9STShJT1MpICYmIEVOQUJM
RShWSURFT19UUkFDSykKKworI2ltcG9ydCAiVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uaCIKKyNp
bXBvcnQgPFF1YXJ0ekNvcmUvQ0FMYXllci5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgor
CitAY2xhc3MgV2ViQ29yZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TSGVscGVyOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TIDogcHVi
bGljIFRleHRUcmFja1JlcHJlc2VudGF0aW9uIHsKK3B1YmxpYzoKKyAgICBUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbklPUyhUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNsaWVudCopOworICAgIHZpcnR1
YWwgflRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgT1ZFUlJJREUgeyByZXR1cm4gbV9sYXllci5nZXQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50U2NhbGUoZmxvYXQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgSW50UmVjdCBib3Vu
ZHMoKSBjb25zdCBPVkVSUklERTsKKworICAgIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50
KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorCitwcml2YXRlOgorICAgIFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50KiBtX2NsaWVudDsKKyAgICBSZXRhaW5QdHI8Q0FM
YXllcj4gbV9sYXllcjsKKyAgICBSZXRhaW5QdHI8V2ViQ29yZVRleHRUcmFja1JlcHJlc2VudGF0
aW9uSU9TSGVscGVyPiBtX2RlbGVnYXRlOworfTsKKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNlbmRpZiAvLyBUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbklPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9pb3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOWUzNWU0MmI4OTljOTE1YzdhNTJmOGVmZDg2NjIzNmFmMDJjMDRiZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9UZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbklPUy5tbQpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQor
CisjaW5jbHVkZSAiVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaCIKKworI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiV2Vi
Q29yZVRocmVhZC5oIgorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWRSdW4uaCIKKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitAaW50ZXJmYWNlIFdl
YkNvcmVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPU0hlbHBlciA6IE5TT2JqZWN0IHsKKyAgICBU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUyogX3BhcmVudDsKK30KKy0gKGlkKWluaXRXaXRoUGFy
ZW50OihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUyopcGFyZW50OworQHByb3BlcnR5IChhc3Np
Z24pIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKiBwYXJlbnQ7CitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBXZWJDb3JlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1NIZWxwZXIKKy0gKGlkKWlu
aXRXaXRoUGFyZW50OihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUyopcGFyZW50Cit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBz
ZWxmLnBhcmVudCA9IHBhcmVudDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBzZWxmLnBhcmVudCA9IG5pbDsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9
CisKKy0gKHZvaWQpc2V0UGFyZW50OihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUyopcGFyZW50
Cit7CisgICAgaWYgKF9wYXJlbnQpCisgICAgICAgIFtfcGFyZW50LT5wbGF0Zm9ybUxheWVyKCkg
cmVtb3ZlT2JzZXJ2ZXI6c2VsZiBmb3JLZXlQYXRoOkAiYm91bmRzIl07CisKKyAgICBfcGFyZW50
ID0gcGFyZW50OworCisgICAgaWYgKF9wYXJlbnQpCisgICAgICAgIFtfcGFyZW50LT5wbGF0Zm9y
bUxheWVyKCkgYWRkT2JzZXJ2ZXI6c2VsZiBmb3JLZXlQYXRoOkAiYm91bmRzIiBvcHRpb25zOm5p
bCBjb250ZXh0OjBdOworfQorCistIChUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUyopcGFyZW50
Cit7CisgICAgcmV0dXJuIF9wYXJlbnQ7Cit9CisKKy0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5
UGF0aDooTlNTdHJpbmcgKilrZXlQYXRoIG9mT2JqZWN0OihpZClvYmplY3QgY2hhbmdlOihOU0Rp
Y3Rpb25hcnkgKiljaGFuZ2UgY29udGV4dDoodm9pZCAqKWNvbnRleHQKK3sKKyAgICBVTlVTRURf
UEFSQU0oY2hhbmdlKTsKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgV2ViVGhyZWFk
UnVuKF57CisgICAgICAgIGlmIChfcGFyZW50ICYmIFtrZXlQYXRoIGlzRXF1YWw6QCJib3VuZHMi
XSAmJiBvYmplY3QgPT0gX3BhcmVudC0+cGxhdGZvcm1MYXllcigpKQorICAgICAgICAgICAgX3Bh
cmVudC0+Y2xpZW50KCktPnRleHRUcmFja1JlcHJlc2VudGF0aW9uQm91bmRzQ2hhbmdlZChfcGFy
ZW50LT5ib3VuZHMoKSk7CisgICAgfSk7Cit9CisKKy0gKGlkKWFjdGlvbkZvckxheWVyOihDQUxh
eWVyICopbGF5ZXIgZm9yS2V5OihOU1N0cmluZyAqKWV2ZW50Cit7CisgICAgVU5VU0VEX1BBUkFN
KGxheWVyKTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnQpOworICAgIC8vIFJldHVybmluZyBhIE5T
TnVsbCBmcm9tIHRoaXMgZGVsZWdhdGUgbWV0aG9kIGRpc2FibGVzIGFsbCBpbXBsaWNpdCBDQUxh
eWVyIGFjdGlvbnMuCisgICAgcmV0dXJuIFtOU051bGwgbnVsbF07Cit9CisKK0BlbmQKKworUGFz
c093blB0cjxUZXh0VHJhY2tSZXByZXNlbnRhdGlvbj4gVGV4dFRyYWNrUmVwcmVzZW50YXRpb246
OmNyZWF0ZShUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNsaWVudCogY2xpZW50KQoreworICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MoY2xpZW50KSk7Cit9
CisKK1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TOjpUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklP
UyhUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQo
Y2xpZW50KQorICAgICwgbV9sYXllcihhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pKQor
ICAgICwgbV9kZWxlZ2F0ZShhZG9wdE5TKFtbV2ViQ29yZVRleHRUcmFja1JlcHJlc2VudGF0aW9u
SU9TSGVscGVyIGFsbG9jXSBpbml0V2l0aFBhcmVudDp0aGlzXSkpCit7CisgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0RGVsZWdhdGU6bV9kZWxlZ2F0ZS5nZXQoKV07CisgICAgW21fbGF5ZXIuZ2V0KCkg
c2V0Q29udGVudHNHcmF2aXR5OmtDQUdyYXZpdHlCb3R0b21dOworfQorCitUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbklPUzo6flRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TKCkKK3sKKyAgICBbbV9s
YXllci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFttX2RlbGVnYXRlLmdldCgpIHNldFBh
cmVudDowXTsKK30KKwordm9pZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUzo6dXBkYXRlKCkK
K3sKKyAgICBpZiAoUmVmUHRyPEltYWdlPiByZXByZXNlbnRhdGlvbiA9IG1fY2xpZW50LT5jcmVh
dGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlKCkpCisgICAgICAgIFttX2xheWVyLmdldCgp
IHNldENvbnRlbnRzOihpZClyZXByZXNlbnRhdGlvbi0+Z2V0Q0dJbWFnZVJlZigpXTsKK30KKwor
dm9pZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUzo6c2V0Q29udGVudFNjYWxlKGZsb2F0IHNj
YWxlKQoreworICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzU2NhbGU6c2NhbGVdOworfQor
CitJbnRSZWN0IFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TOjpib3VuZHMoKSBjb25zdAorewor
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChbbV9sYXllci5nZXQoKSBib3Vu
ZHNdKSk7Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpICYmIEVOQUJMRShWSURFT19UUkFD
SykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xv
ck1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLmgK
aW5kZXggMjQ4MmI1OTNiYjhlZTI4YTJjMDA1ODI5YjUzYjM3MWM5Mjc2NzhiMi4uMDEzYzFlNTRk
ZjhkNmJlYjNjNWIzNzA5MmJkYzYyY2U3MTNjZDU4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLmgKQEAgLTMxLDEzICszMSwxNyBAQAogCiAj
aW5jbHVkZSAiQ29sb3IuaCIKIAorI2lmICFQTEFURk9STShJT1MpCiBPQkpDX0NMQVNTIE5TQ29s
b3I7CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAorI2lmICFQTEFURk9STShJ
T1MpCiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFzc3VtZSBOU0NvbG9ycyBhcmUgaW4gRGV2aWNl
UkdCIGNvbG9yc3BhY2UKICAgICBDb2xvciBjb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKik7CiAg
ICAgTlNDb2xvciAqbnNDb2xvcihjb25zdCBDb2xvciYpOworI2VuZGlmCiAKICAgICBib29sIHVz
ZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKCk7CiAgICAgdm9pZCBzZXRVc2VzVGVzdE1vZGVGb2N1
c1JpbmdDb2xvcihib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggNDk3MWY0
ZGEyMzYxZWE2ZTM0NzgzMzk3ODg5MjE3ZjE0NjUwZjI5Yy4uNjAzOTE5Zjg5Zjc0ODVlOTVkMDg1
NGQ2MGNiNmZhOTAxYmZhMzc5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKQEAgLTMx
LDcgKzMxLDExIEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlRleHRCcmVh
a0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2lmICFQTEFURk9STShJT1MpCiAj
aW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxz
ZQorI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4K
IApAQCAtNTcyLDYgKzU3Niw5IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RH
bHlwaHNBbmRBZHZhbmNlcygpCiAgICAgICAgIENvbXBsZXhUZXh0UnVuJiBjb21wbGV4VGV4dFJ1
biA9ICptX2NvbXBsZXhUZXh0UnVuc1tyXTsKICAgICAgICAgdW5zaWduZWQgZ2x5cGhDb3VudCA9
IGNvbXBsZXhUZXh0UnVuLmdseXBoQ291bnQoKTsKICAgICAgICAgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnREYXRhID0gY29tcGxleFRleHRSdW4uZm9udERhdGEoKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgIGJvb2wgaXNFbW9qaSA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5tX2lz
RW1vamk7CisjZW5kaWYKIAogICAgICAgICAvLyBSZXByZXNlbnQgdGhlIGluaXRpYWwgYWR2YW5j
ZSBmb3IgYSB0ZXh0IHJ1biBieSBhZGp1c3RpbmcgdGhlIGFkdmFuY2UKICAgICAgICAgLy8gb2Yg
dGhlIGxhc3QgZ2x5cGggb2YgdGhlIHByZXZpb3VzIHRleHQgcnVuIGluIHRoZSBnbHlwaCBidWZm
ZXIuCkBAIC02MjAsNiArNjI3LDEwIEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1
c3RHbHlwaHNBbmRBZHZhbmNlcygpCiAgICAgICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZv
bnQ6OnRyZWF0QXNTcGFjZShjaCk7CiAgICAgICAgICAgICBDR0dseXBoIGdseXBoID0gdHJlYXRB
c1NwYWNlID8gZm9udERhdGEtPnNwYWNlR2x5cGgoKSA6IGdseXBoc1tpXTsKICAgICAgICAgICAg
IENHU2l6ZSBhZHZhbmNlID0gdHJlYXRBc1NwYWNlID8gQ0dTaXplTWFrZShzcGFjZVdpZHRoLCBh
ZHZhbmNlc1tpXS5oZWlnaHQpIDogYWR2YW5jZXNbaV07CisjaWYgUExBVEZPUk0oSU9TKQorICAg
ICAgICAgICAgaWYgKGlzRW1vamkgJiYgYWR2YW5jZS53aWR0aCkKKyAgICAgICAgICAgICAgICBh
ZHZhbmNlLndpZHRoID0gZm9udERhdGEtPndpZHRoRm9yR2x5cGgoZ2x5cGgpOworI2VuZGlmCiAK
ICAgICAgICAgICAgIGlmIChjaCA9PSAnXHQnICYmIG1fcnVuLmFsbG93VGFicygpKQogICAgICAg
ICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBtX2ZvbnQudGFiV2lkdGgoKmZvbnREYXRhLCBtX3J1
bi50YWJTaXplKCksIG1fcnVuLnhQb3MoKSArIG1fdG90YWxXaWR0aCArIHdpZHRoU2luY2VMYXN0
Q29tbWl0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQppbmRleCA0
OTYwYTRkNGYwNmEzN2I2MWVkMDY0NjdiMzJmZWMwNjA5YmY0MjZiLi40NGMwMjk0ZmQ3N2MwZmY5
YjI4YTM4MTFmZjcxOGIwY2NlMWYwMTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ckNvcmVUZXh0Lm1tCkBAIC0zMSw3ICszMSwxMSBAQAogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNp
bmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAKKyNpZiBQTEFURk9STShJT1MpCisj
aW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNlbHNlCiAjaW5jbHVkZSA8QXBwbGljYXRp
b25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZW5kaWYKIAogQGludGVyZmFjZSBX
ZWJDYXNjYWRlTGlzdCA6IE5TQXJyYXkgewogICAgIEBwcml2YXRlCkBAIC0yNjYsMTIgKzI3MCwx
NyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0Zv
ckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLAogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcnVuRm9u
dERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEobV9mb250LmZvbnREZXNjcmlw
dGlvbigpLCBmb250TmFtZS5nZXQoKSwgZmFsc2UsIEZvbnRDYWNoZTo6RG9Ob3RSZXRhaW4pLmdl
dCgpOworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICAgICAgICAgIC8vIENvcmUgVGV4
dCBtYXkgaGF2ZSB1c2VkIGEgZm9udCB0aGF0IGlzIG5vdCBrbm93biB0byBOU0ZvbnRNYW5hZ2Vy
LiBJbiB0aGF0IGNhc2UsIGZhbGwgYmFjayBvbgogICAgICAgICAgICAgICAgICAgICAvLyB1c2lu
ZyB0aGUgZm9udCBhcyByZXR1cm5lZCwgZXZlbiB0aG91Z2ggaXQgbWF5IG5vdCBoYXZlIHRoZSBi
ZXN0IE5TRm9udFJlbmRlcmluZ01vZGUuCiAgICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9u
dERhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgcnVuRm9u
dFBsYXRmb3JtRGF0YSgoTlNGb250ICopcnVuRm9udCwgQ1RGb250R2V0U2l6ZShydW5Gb250KSwg
bV9mb250LmZvbnREZXNjcmlwdGlvbigpLnVzZVByaW50ZXJGb250KCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcnVuRm9udERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEo
JnJ1bkZvbnRQbGF0Zm9ybURhdGEsIEZvbnRDYWNoZTo6RG9Ob3RSZXRhaW4pLmdldCgpOwogICAg
ICAgICAgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SnVzdCBhc3NlcnQgZm9yIG5vdywgdW50aWwgd2UgY2FuIGRldmlzZSBhIGJldHRlciBmaXggdGhh
dCB3b3JrcyB3aXRoIGlPUy4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJ1bkZvbnREYXRh
KTsKKyNlbmRpZgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAobV9mYWxs
YmFja0ZvbnRzICYmIHJ1bkZvbnREYXRhICE9IG1fZm9udC5wcmltYXJ5Rm9udCgpKQogICAgICAg
ICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChydW5Gb250RGF0YSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQb2ludE1hYy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1t
CmluZGV4IDJmNzMzMTRmYTBiOWRjNGFkYzNkMjVkNDM5YWRkYTE4YWE5MWI3NzkuLmFjOWJjMzFm
OWRjMzMzYzA1MjVmNzg0YjYzZTE5NThiMTY5YjE4MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1tCkBAIC0yNyw2ICsy
Nyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogCisj
aWYgIVBMQVRGT1JNKElPUykKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWZuZGVmIE5TR0VP
TUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCkBAIC00MywzICs0NSw1IEBAIEZs
b2F0UG9pbnQ6Om9wZXJhdG9yIE5TUG9pbnQoKSBjb25zdAogI2VuZGlmCiAKIH0KKworI2VuZGlm
IC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRmxvYXRSZWN0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0Zsb2F0UmVjdE1hYy5tbQppbmRleCAxZDZiMDQ1Nzg4N2QyMWI4OTIzNDg2YTI2
MmYxMzczNTlhZmU4YjZmLi45ZWZmOWIzYWI2Nzg2MDQ0NGExNmQ5ZTFhNzc0YWEwODFiMmRhM2Uw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRS
ZWN0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9h
dFJlY3RNYWMubW0KQEAgLTI5LDYgKzI5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisj
aWYgIVBMQVRGT1JNKElPUykKICNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VP
TUVUUllfVFlQRVMKIAogRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgTlNSZWN0JiByKSA6IG1f
bG9jYXRpb24oci5vcmlnaW4pLCBtX3NpemUoci5zaXplKQpAQCAtNDEsNSArNDIsNiBAQCBGbG9h
dFJlY3Q6Om9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0CiB9CiAKICNlbmRpZgorI2VuZGlmIC8vICFQ
TEFURk9STShJT1MpCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9GbG9hdFNpemVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRmxvYXRTaXplTWFjLm1tCmluZGV4IDAxZWZiZTkxZGM0ODU5MzBlMTkyOTM5ODIy
ZGVhOWEzMTc0ZGRmMWIuLjE0MDFiZmNhZTFhOGZhZmJiMTY5MmNiOGZkNTE4MTE3MzE0MWExMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNp
emVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0
U2l6ZU1hYy5tbQpAQCAtMjksNiArMjksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9N
RVRSWV9UWVBFUwogCiBGbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBOU1NpemUmIHMpIDogbV93
aWR0aChzLndpZHRoKSwgbV9oZWlnaHQocy5oZWlnaHQpCkBAIC00MSw1ICs0Miw2IEBAIEZsb2F0
U2l6ZTo6b3BlcmF0b3IgTlNTaXplKCkgY29uc3QKIH0KIAogI2VuZGlmCisjZW5kaWYgLy8gIVBM
QVRGT1JNKElPUykKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Gb250Q2FjaGVNYWMubW0KaW5kZXggNTkxZmUxNjc2MDI4NWRmNjRkY2VlN2VjZTZl
NzgwNzk1YTAwYzk2Ni4uNzljZjVjMWFjYjZjZTY1NjkxZWM3Mjc1NjJiNWM0ZjZhMDdjOThhYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNo
ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENh
Y2hlTWFjLm1tCkBAIC0zMCw2ICszMCw4IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQg
IkZvbnRDYWNoZS5oIgogCisjaWYgIVBMQVRGT1JNKElPUykKKwogI2ltcG9ydCAiRm9udC5oIgog
I2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQgIkZvbnRQbGF0Zm9ybURhdGEuaCIK
QEAgLTIyMCwzICsyMjIsNSBAQCBQYXNzT3duUHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNo
ZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcAogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0
TWFjLmNwcAppbmRleCBlMDkzNmYzYjliNDVhNjk5ODIzYWJkNjA0NDdmYWI5MDI4YWVkZDgyLi44
MmFjZmZhODVmMWYwNGM2MmI0OTcxNzY2NWI3NTg3MmZiYTIyN2ZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0
TWFjLmNwcApAQCAtNzcsNyArNzcsNyBAQCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNl
c0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludAogICAgIHJl
dHVybiBpbml0aWFsQWR2YW5jZTsKIH0KIAotdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd0NvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICAvLyBU
aGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEg
Zm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC04NiwxMSAr
ODYsMTMgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEYKIAogICAgIC8vIFdlIGNvdWxkbid0IGdl
bmVyYXRlIGFueSBnbHlwaHMgZm9yIHRoZSBydW4uICBHaXZlIHVwLgogICAgIGlmIChnbHlwaEJ1
ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICAvLyBEcmF3IHRoZSBnbHlwaCBidWZmZXIgbm93IGF0IHRoZSBzdGFydGluZyBwb2ludCByZXR1
cm5lZCBpbiBzdGFydFguCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHN0YXJ0WCwgcG9pbnQu
eSgpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgc3Rh
cnRQb2ludCk7CisKKyAgICByZXR1cm4gc3RhcnRQb2ludC54KCkgLSBzdGFydFg7CiB9CiAKIHZv
aWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKQEAgLTE0MSw2
ICsxNDMsMTAgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnQ6OmZvbnREYXRhRm9yQ29tYmlu
aW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGMKICAgICB1bnNpZ25lZCBpID0gMDsK
ICAgICBmb3IgKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSA9IGZvbnREYXRhQXQoMCk7IGZvbnRE
YXRhOyBmb250RGF0YSA9IGZvbnREYXRhQXQoKytpKSkgewogICAgICAgICBjb25zdCBTaW1wbGVG
b250RGF0YSogc2ltcGxlRm9udERhdGEgPSBmb250RGF0YS0+Zm9udERhdGFGb3JDaGFyYWN0ZXIo
YmFzZUNoYXJhY3Rlcik7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBpZiAoYmFzZUNoYXJh
Y3RlciA+PSAweDA2MDAgJiYgYmFzZUNoYXJhY3RlciA8PSAweDA2ZmYgJiYgc2ltcGxlRm9udERh
dGEtPnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQorICAgICAgICAgICAgY29udGludWU7Cisj
ZW5kaWYKICAgICAgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCkgewogICAgICAgICAg
ICAgaWYgKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYmFz
ZUNoYXJhY3RlcikgJiYgIXNpbXBsZUZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKaW5kZXggZmEyMzU1N2NmZjY1NmQwMDg5NzQ0OTM0
ODVlNWIzYWFhOTYzYmM3Ny4uMzc2ZTBkMTI0ZmU1Mjg4NWI4MmI2MjlkNjc3ZjVhYTExMTJiZGM3
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApAQCAtMjMsNyArMjMsMTEgQEAKIAog
I2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
KyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGlj
YXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBo
aWNzLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCmluZGV4IDk4ZmI3OGNkMDI4MzA3
YzdiZTI2MmQwMWMxMjE3NjYwOWNhOGJjNzAuLmFmNjI4N2Y2NjJkZmExNTNmMTU0ODI2MDFiNzRl
YTQ0NmM4NGIyNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250TWFjLm1tCkBAIC0xMjQsMTIgKzEyNCwxMiBAQCBzdGF0aWMgdm9pZCBzaG93TGV0dGVy
cHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3Qg
UwogCiAgICAgW2NhdGFsb2cgZHJhd0dseXBoczpnbHlwaHMgYXRQb3NpdGlvbnM6cG9zaXRpb25z
LmRhdGEoKSBpbkNvbnRleHQ6Y29udGV4dCB3aXRoRm9udDpjdEZvbnQgY291bnQ6Y291bnQgc3R5
bGVQcmVzZXROYW1lOkAiX1VJS2l0TmV3TGV0dGVycHJlc3NTdHlsZSIgc3R5bGVDb25maWd1cmF0
aW9uOnN0eWxlQ29uZmlndXJhdGlvbiBmb3JlZ3JvdW5kQ29sb3I6Q0dDb250ZXh0R2V0RmlsbENv
bG9yQXNDb2xvcihjb250ZXh0KV07CiAjZWxzZQotVU5VU0VEX1BBUkFNKHBvaW50KTsKLVVOVVNF
RF9QQVJBTShmb250KTsKLVVOVVNFRF9QQVJBTShjb250ZXh0KTsKLVVOVVNFRF9QQVJBTShnbHlw
aHMpOwotVU5VU0VEX1BBUkFNKGFkdmFuY2VzKTsKLVVOVVNFRF9QQVJBTShjb3VudCk7CisgICAg
VU5VU0VEX1BBUkFNKHBvaW50KTsKKyAgICBVTlVTRURfUEFSQU0oZm9udCk7CisgICAgVU5VU0VE
X1BBUkFNKGNvbnRleHQpOworICAgIFVOVVNFRF9QQVJBTShnbHlwaHMpOworICAgIFVOVVNFRF9Q
QVJBTShhZHZhbmNlcyk7CisgICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKICNlbmRpZgogfQogCkBA
IC0xNzksNyArMTc5LDcgQEAgc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlRm9udERhdGEKICAgICB9CiB9CiAKLXZv
aWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9u
dDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgY29uc3QKIHsKICAgICBj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LT5wbGF0Zm9ybURhdGEo
KTsKICAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCkBAIC0yMjEsMTEgKzIyMSwxMyBAQCB2
b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1w
bGVGb250RGF0YSogZm9udCwgY29ucwogICAgICAgICBjaGFuZ2VGb250U21vb3RoaW5nID0gdHJ1
ZTsKICAgICB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGJvb2wgb3JpZ2luYWxTaG91bGRV
c2VGb250U21vb3RoaW5nID0gZmFsc2U7CiAgICAgaWYgKGNoYW5nZUZvbnRTbW9vdGhpbmcpIHsK
ICAgICAgICAgb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nID0gd2tDR0NvbnRleHRHZXRT
aG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRT
bW9vdGhGb250cyhjZ0NvbnRleHQsIHNob3VsZFNtb290aEZvbnRzKTsKICAgICB9CisjZW5kaWYK
IAogI2lmICFQTEFURk9STShJT1MpCiAgICAgTlNGb250KiBkcmF3Rm9udDsKQEAgLTI0Niw5ICsy
NDgsMzggQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnMKICAgICBDR0NvbnRleHRTZXRGb250KGNn
Q29udGV4dCwgcGxhdGZvcm1EYXRhLmNnRm9udCgpKTsKIAogICAgIGJvb2wgdXNlTGV0dGVycHJl
c3NFZmZlY3QgPSBzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdCgqY29udGV4dCk7CisgICAgRmxv
YXRQb2ludCBwb2ludCA9IGFuY2hvclBvaW50OwogI2lmIFBMQVRGT1JNKElPUykKICAgICBmbG9h
dCBmb250U2l6ZSA9IHBsYXRmb3JtRGF0YS5zaXplKCk7CiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0g
bWF0cml4ID0gdXNlTGV0dGVycHJlc3NFZmZlY3QgfHwgcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRt
YXBGb250KCkgPyBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5IDogQ0dBZmZpbmVUcmFuc2Zvcm1N
YWtlU2NhbGUoZm9udFNpemUsIGZvbnRTaXplKTsKKyAgICBpZiAocGxhdGZvcm1EYXRhLm1faXNF
bW9qaSkgeworICAgICAgICBpZiAoIWNvbnRleHQtPmVtb2ppRHJhd2luZ0VuYWJsZWQoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBNaW1pYyB0aGUgcG9zaXRpb2luaW5nIG9m
IG5vbi1iaXRtYXAgZ2x5cGhzLCB3aGljaCBhcmUgbm90IHN1YnBpeGVsLXBvc2l0aW9uZWQuCisg
ICAgICAgIHBvaW50LnNldFkoY2VpbGYocG9pbnQueSgpKSk7CisKKyAgICAgICAgLy8gRW1vamkg
Z2x5cGhzIHNuYXAgdG8gdGhlIENTUyBwaXhlbCBncmlkLgorICAgICAgICBwb2ludC5zZXRYKGZs
b29yZihwb2ludC54KCkpKTsKKworICAgICAgICAvLyBFbW9qaSBnbHlwaHMgYXJlIG9mZnNldCBv
bmUgQ1NTIHBpeGVsIHRvIHRoZSByaWdodC4KKyAgICAgICAgcG9pbnQubW92ZSgxLCAwKTsKKwor
ICAgICAgICAvLyBFbW9qaSBnbHlwaHMgYXJlIG9mZnNldCB2ZXJ0aWNhbGx5IGJhc2VkIG9uIGZv
bnQgc2l6ZS4KKyAgICAgICAgZmxvYXQgeSA9IHBvaW50LnkoKTsKKyAgICAgICAgaWYgKGZvbnRT
aXplIDw9IDE1KSB7CisgICAgICAgICAgICAvLyBVbmRvIENvcmUgVGV4dCdzIHkgYWRqdXN0bWVu
dC4KKyAgICAgICAgICAgIHN0YXRpYyBmbG9hdCB5QWRqdXN0bWVudEZhY3RvciA9IGlvc0V4ZWN1
dGFibGVXYXNMaW5rZWRPbk9yQWZ0ZXJWZXJzaW9uKHdrSU9TU3lzdGVtVmVyc2lvbl82XzApID8g
LjE5IDogLjE7CisgICAgICAgICAgICBwb2ludC5zZXRZKGZsb29yZih5IC0geUFkanVzdG1lbnRG
YWN0b3IgKiAoZm9udFNpemUgKyAyKSArIDIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlmIChmb250U2l6ZSA8IDI2KQorICAgICAgICAgICAgICAgIHkgLT0gLjM1ZiAqIGZvbnRT
aXplIC0gMTA7CisKKyAgICAgICAgICAgIC8vIFVuZG8gQ29yZSBUZXh0J3MgeSBhZGp1c3RtZW50
LgorICAgICAgICAgICAgc3RhdGljIGZsb2F0IHlBZGp1c3RtZW50ID0gaW9zRXhlY3V0YWJsZVdh
c0xpbmtlZE9uT3JBZnRlclZlcnNpb24od2tJT1NTeXN0ZW1WZXJzaW9uXzZfMCkgPyAzLjggOiAy
OworICAgICAgICAgICAgcG9pbnQuc2V0WShmbG9vcmYoeSAtIHlBZGp1c3RtZW50KSk7CisgICAg
ICAgIH0KKyAgICB9CiAjZWxzZQogICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZm
aW5lVHJhbnNmb3JtSWRlbnRpdHk7CiAgICAgaWYgKGRyYXdGb250ICYmICFwbGF0Zm9ybURhdGEu
aXNDb2xvckJpdG1hcEZvbnQoKSkKQEAgLTMwMyw3ICszMzQsMTEgQEAgdm9pZCBGb250OjpkcmF3
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnQsIGNvbnMKICAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3Jtcywg
dGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93
biBpcyBuZWdhdGl2ZS4KICAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBz
aGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC0+c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
KSA/IC0xIDogMSk7CiAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChz
aGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmds
eXBocyhmcm9tKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5j
ZXMoZnJvbSkpLCBudW1HbHlwaHMpOworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIGlmIChz
eW50aGV0aWNCb2xkT2Zmc2V0KQorI2Vsc2UKKyAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZz
ZXQgJiYgIXBsYXRmb3JtRGF0YS5tX2lzRW1vamkpCisjZW5kaWYKICAgICAgICAgICAgIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRP
ZmZzZXQsIHNoYWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMo
ZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZy
b20pKSwgbnVtR2x5cGhzKTsKICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGZpbGxDb2xv
ciwgZmlsbENvbG9yU3BhY2UpOwogICAgIH0KQEAgLTMxMiw3ICszNDcsMTEgQEAgdm9pZCBGb250
OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnQsIGNvbnMKICAgICAgICAgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5j
ZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0
aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUds
eXBocyk7CiAgICAgZWxzZQogICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBm
b250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgc3RhdGljX2Nhc3Q8Y29u
c3QgQ0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMpOworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCisjZWxzZQorICAg
IGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0ICYmICFwbGF0Zm9ybURhdGEubV9pc0Vtb2ppKQorI2Vu
ZGlmCiAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChwb2ludC54KCkg
KyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBwb2ludC55KCkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBo
QnVmZmVyLmdseXBocyhmcm9tKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ0dTaXplKj4oZ2x5cGhCdWZm
ZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMpOwogCiAgICAgaWYgKGhhc1NpbXBsZVNoYWRv
dykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlw
aFBhZ2VUcmVlTm9kZU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR2x5cGhQYWdlVHJlZU5vZGVNYWMuY3BwCmluZGV4IGMwZTU0Y2I0ODk4ZGI3OTYwNzlkOWQy
OTFjYTQ3MTdmNTIwMDY1YzUuLjYxMmI0NTNmZWZhNWIzZTE2NTc2MWZjNGRhNmQzYTczZmY1NTJi
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlw
aFBhZ2VUcmVlTm9kZU1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFjLmNwcApAQCAtMzIsNyArMzIsMTMgQEAKICNpbmNs
dWRlICJGb250LmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJXZWJD
b3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBs
aWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NHRm9udFVuaWNvZGVTdXBwb3J0Lmg+CisjaW5jbHVkZSA8Q29yZVRleHQv
Q1RGb250UHJpdi5oPgorI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjZW5kaWYKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Myw3ICs2OSwxNiBAQCBib29sIEdseXBoUGFnZTo6
ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5z
aWduZWQgYgogCiAgICAgVmVjdG9yPENHR2x5cGgsIDUxMj4gZ2x5cGhzKGJ1ZmZlckxlbmd0aCk7
CiAgICAgaWYgKCFzaG91bGRVc2VDb3JlVGV4dChidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udERh
dGEpKSB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgd2tHZXRHbHlwaHNGb3JDaGFyYWN0
ZXJzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgYnVmZmVyLCBnbHlwaHMuZGF0
YSgpLCBidWZmZXJMZW5ndGgpOworI2Vsc2UKKyAgICAgICAgLy8gV2UgcGFzcyBpbiBlaXRoZXIg
MjU2IG9yIDUxMiBVVEYtMTYgY2hhcmFjdGVyczogMjU2IGZvciBVK0ZGRkYgYW5kIGxlc3MsIDUx
MiAoZG91YmxlIGNoYXJhY3RlciBzdXJyb2dhdGVzKQorICAgICAgICAvLyBmb3IgVSsxMDAwMCBh
bmQgYWJvdmUuIEl0IGlzIGluZGVlZCBwb3NzaWJsZSB0byBnZXQgYmFjayA1MTIgZ2x5cGhzIGJh
Y2sgZnJvbSB0aGUgQVBJLCBzbyB0aGUgZ2x5cGggYnVmZmVyCisgICAgICAgIC8vIHdlIHBhc3Mg
aW4gbXVzdCBiZSA1MTIuIElmIHdlIGdldCBiYWNrIG1vcmUgdGhhbiAyNTYgZ2x5cGhzIHRob3Vn
aCB3ZSdsbCBpZ25vcmUgYWxsIHRoZSBvbmVzIGFmdGVyIDI1NiwKKyAgICAgICAgLy8gdGhpcyBz
aG91bGQgbm90IGhhcHBlbiBhcyB0aGUgb25seSB0aW1lIHdlIHBhc3MgaW4gNTEyIGNoYXJhY3Rl
cnMgaXMgd2hlbiB0aGV5IGFyZSBzdXJyb2dhdGVzLgorICAgICAgICAvLyBGSVhNRTogVXNlIHdr
R2V0R2x5cGhzRm9yQ2hhcmFjdGVycygpIGluc3RlYWQgb2YgQ0dGb250R2V0R2x5cGhzRm9yVW5p
Y2hhcnMoKSBvbmNlIHdlIHVwZGF0ZSBXZWJLaXQgU3lzdGVtIEludGVyZmFjZSBvbiBpT1MuCisg
ICAgICAgIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5jZ0ZvbnQoKSwgYnVmZmVyLCBnbHlwaHMuZGF0YSgpLCBidWZmZXJMZW5ndGgpOworI2VuZGlm
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgaWYgKCFnbHlwaHNbaV0pCiAgICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5k
ZXgob2Zmc2V0ICsgaSwgMCwgMCk7CkBAIC0xNDQsNiArMTU5LDcgQEAgYm9vbCBHbHlwaFBhZ2U6
OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVu
c2lnbmVkIGIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQorI2lmICFQ
TEFURk9STShJT1MpCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJ1blNpbXBsZSA9IGZvbnREYXRhLT5nZXRDb21wb3Np
dGVGb250UmVmZXJlbmNlRm9udERhdGEoKE5TRm9udCAqKXJ1bkZvbnQpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAocnVuU2ltcGxlKSB7CkBAIC0xNTgsNiArMTc0LDcgQEAgYm9vbCBHbHlwaFBh
Z2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIs
IHVuc2lnbmVkIGIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4
dDNETWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dDNETWFjLm1tCmluZGV4IDk2YTYzMTk0ZWFlNjA2MzdjMzQ2ZTQ4NjYwZGNjZTg3Njcz
YzYyNmMuLmU0NGExM2Y0YTU3MDgzZWE5ZDdiNzMwM2EzYWQxZTI2YjFkZDY3ODYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQz
RE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NDb250ZXh0M0RNYWMubW0KQEAgLTI4LDYgKzI4LDkgQEAKICNpZiBVU0UoM0RfR1JBUEhJQ1Mp
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lmIFBMQVRGT1JNKElPUykKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRElPUy5oIgorI2VuZGlmCiAKICNpbXBvcnQgIkJsb2Nr
RXhjZXB0aW9ucy5oIgogCkBAIC0zOSw4ICs0MiwxNSBAQAogI2luY2x1ZGUgIkhUTUxDYW52YXNF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPE9wZW5HTEVTL0VTMi9nbGV4dC5o
PgorI2ltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgorI2ltcG9ydCA8T3BlbkdMRVMvRUFHTERyYXdh
YmxlLmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNlbHNlCiAjaW5jbHVk
ZSA8T3BlbkdML0NHTFJlbmRlcmVycy5oPgogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgorI2VuZGlm
CiAjaW5jbHVkZSAiV2ViR0xMYXllci5oIgogI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAjaW5j
bHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgpAQCAtNjEsNiArNzEsNyBAQCBwdWJsaWM6CiAg
ICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpIHsgfQogfTsKIAorI2lmICFQTEFURk9STShJ
T1MpCiBzdGF0aWMgdm9pZCBzZXRQaXhlbEZvcm1hdChWZWN0b3I8Q0dMUGl4ZWxGb3JtYXRBdHRy
aWJ1dGU+JiBhdHRyaWJzLCBpbnQgY29sb3JCaXRzLCBpbnQgZGVwdGhCaXRzLCBib29sIGFjY2Vs
ZXJhdGVkLCBib29sIHN1cGVyc2FtcGxlLCBib29sIGNsb3Nlc3QsIGJvb2wgYW50aWFsaWFzKQog
ewogICAgIGF0dHJpYnMuY2xlYXIoKTsKQEAgLTkzLDYgKzEwNCw3IEBAIHN0YXRpYyB2b2lkIHNl
dFBpeGVsRm9ybWF0KFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4mIGF0dHJpYnMsIGlu
dCBjb2xvckJpCiAgICAgICAgIAogICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBp
eGVsRm9ybWF0QXR0cmlidXRlPigwKSk7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAog
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogewpAQCAtMTA3
LDYgKzExOSw5IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgOiBtX2N1cnJlbnRXaWR0
aCgwKQogICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCiAgICAgLCBtX2NvbnRleHRPYmooMCkKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgLCBtX2NvbXBpbGVyKFNIX0VTU0xfT1VUUFVUKQorI2VuZGlm
CiAgICAgLCBtX2F0dHJzKGF0dHJzKQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBtX2NvbXBv
c2l0b3JUZXh0dXJlKDApCkBAIC0xMjIsNiArMTM3LDEwIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpH
cmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9z
dFdpCiAgICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwogICAgIFVOVVNFRF9QQVJBTShyZW5k
ZXJTdHlsZSk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgbV9jb250ZXh0T2JqID0gW1tFQUdM
Q29udGV4dCBhbGxvY10gaW5pdFdpdGhBUEk6a0VBR0xSZW5kZXJpbmdBUElPcGVuR0xFUzJdOwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworI2Vsc2UKICAgICBWZWN0b3I8Q0dMUGl4ZWxGb3Jt
YXRBdHRyaWJ1dGU+IGF0dHJpYnM7CiAgICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXRP
YmogPSAwOwogICAgIEdMaW50IG51bVBpeGVsRm9ybWF0cyA9IDA7CkBAIC0xODQsMTIgKzIwMywx
NiBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAgICAgCiAgICAgdmFsaWRhdGVB
dHRyaWJ1dGVzKCk7CiAKICAgICAvLyBDcmVhdGUgdGhlIFdlYkdMTGF5ZXIKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICAgICAgbV93ZWJHTExheWVyID0gYWRvcHROUyhbW1dl
YkdMTGF5ZXIgYWxsb2NdIGluaXRXaXRoR3JhcGhpY3NDb250ZXh0M0Q6dGhpc10pOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICAgICAgW21fd2ViR0xMYXllci5nZXQoKSBzZXRPcGFxdWU6MF07Cisj
ZW5kaWYKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIFttX3dlYkdMTGF5ZXIuZ2V0KCkgc2V0TmFt
ZTpAIldlYkdMIExheWVyIl07CiAjZW5kaWYgICAgCkBAIC0xOTgsNiArMjIxLDkgQEAgR3JhcGhp
Y3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJzLCBIb3N0V2kKICAgICBpZiAodXNlTXVsdGlzYW1wbGluZykKICAgICAgICAgOjpn
bEVuYWJsZShHTF9NVUxUSVNBTVBMRSk7CiAgICAgCisjaWYgUExBVEZPUk0oSU9TKQorICAgIDo6
Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3RleHR1cmUpOworI2Vsc2UKICAgICAvLyBjcmVhdGUg
YSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvCiAgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1
cmUpOwogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwpAQCAt
MjEyLDYgKzIzOCw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgOjpnbFRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsKICAgICA6
OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xB
TVApOwogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyNlbmRpZgogICAg
IAogICAgIC8vIGNyZWF0ZSBhbiBGQk8KICAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZt
X2Zibyk7CkBAIC0yNTMsOCArMjgwLDEwIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAKICAg
ICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CiAgICAgCisjaWYgIVBM
QVRGT1JNKElPUykKICAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUp
OwogICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsKKyNlbmRpZgogCiAgICAgOjpnbENs
ZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiB9CkBAIC0yNjIsOSArMjkxLDE1IEBAIEdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycywgSG9zdFdpCiBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIHsK
ICAgICBpZiAobV9jb250ZXh0T2JqKSB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1f
dGV4dHVyZSk7CisgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2NvbXBvc2l0
b3JUZXh0dXJlKTsKKyNlbHNlCiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4
dE9iaik7CiAgICAgICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICAgICAg
ICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgog
ICAgICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKICAgICAgICAgICAgIDo6Z2xEZWxldGVS
ZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogICAgICAgICAg
ICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQpAQCAtMjc1LDIyICszMTAs
NTEgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAgICAgICAgICAg
ICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVy
KTsKICAgICAgICAgfQogICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zi
byk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBbRUFHTENvbnRleHQgc2V0Q3VycmVudENv
bnRleHQ6MF07CisgICAgICAgIFtzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCo+KG1fY29udGV4dE9i
aikgcmVsZWFzZV07CisjZWxzZQogICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4dCgwKTsKICAg
ICAgICAgQ0dMRGVzdHJveUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyNlbmRpZgogICAgIH0KIH0K
IAorI2lmIFBMQVRGT1JNKElPUykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnNldFJlbmRlcmJ1
ZmZlclN0b3JhZ2VGcm9tRHJhd2FibGUoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQoreworICAgIFttX3dlYkdMTGF5ZXIuZ2V0KCkgc2V0Qm91bmRzOkNHUmVjdE1ha2UoMCwgMCwg
d2lkdGgsIGhlaWdodCldOworICAgIHJldHVybiBbbV9jb250ZXh0T2JqIHJlbmRlcmJ1ZmZlclN0
b3JhZ2U6R0xfUkVOREVSQlVGRkVSIGZyb21EcmF3YWJsZTpzdGF0aWNfY2FzdDxOU09iamVjdDxF
QUdMRHJhd2FibGU+Kj4obV93ZWJHTExheWVyLmdldCgpKV07Cit9CisjZW5kaWYKKwogYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKICAgICBpZiAoIW1fY29u
dGV4dE9iaikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IGlmIChbRUFHTENvbnRleHQgY3VycmVudENvbnRleHRdICE9IG1fY29udGV4dE9iaikKKyAgICAg
ICAgcmV0dXJuIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpzdGF0aWNfY2FzdDxFQUdM
Q29udGV4dCo+KG1fY29udGV4dE9iaildOworI2Vsc2UKICAgICBDR0xDb250ZXh0T2JqIGN1cnJl
bnRDb250ZXh0ID0gQ0dMR2V0Q3VycmVudENvbnRleHQoKTsKICAgICBpZiAoY3VycmVudENvbnRl
eHQgIT0gbV9jb250ZXh0T2JqKQogICAgICAgICByZXR1cm4gQ0dMU2V0Q3VycmVudENvbnRleHQo
bV9jb250ZXh0T2JqKSA9PSBrQ0dMTm9FcnJvcjsKKyNlbmRpZgogICAgIHJldHVybiB0cnVlOwog
fQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQo
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGbHVzaCgpOworICAgIDo6
Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKKyAgICBbc3Rh
dGljX2Nhc3Q8RUFHTENvbnRleHQqPihtX2NvbnRleHRPYmopIHByZXNlbnRSZW5kZXJidWZmZXI6
R0xfUkVOREVSQlVGRkVSXTsKKyAgICBbRUFHTENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6bmls
XTsKK30KKyNlbmRpZgorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50
KCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQppbmRleCAy
YzgzODVkMWVhNmUyNjY0NDgwMDgxZDkwZTQzN2EzNmQ3NjhlNTJiLi41MzNlYjBlNmE4NWUyZTEw
M2IxNGJhZjg4YTgwMGIwODI2NWYzY2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0KQEAgLTI4LDEw
ICsyOCwxOSBAQAogCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2ltcG9ydCAiR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKKyNpZiBVU0UoQVBQS0lUKQogI2ltcG9y
dCA8QXBwS2l0L0FwcEtpdC5oPgorI2VuZGlmCiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJDb2xvci5oIgorI2ltcG9ydCAiV0tHcmFw
aGljcy5oIgorI2VuZGlmCisKKyNpZiAhUExBVEZPUk0oSU9TKQogI2ltcG9ydCAiTG9jYWxDdXJy
ZW50R3JhcGhpY3NDb250ZXh0LmgiCisjZW5kaWYKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UuaCIKIAogQGNsYXNzIE5TQ29sb3I7CkBAIC00NSw2ICs1NCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIC8vIGNhbGxzIGluIHRoaXMgZmlsZSBhcmUgYWxsIGV4Y2VwdGlvbi1zYWZlLCBz
byB3ZSBkb24ndCBibG9jawogLy8gZXhjZXB0aW9ucyBmb3IgdGhvc2UuCiAKKyNpZiAhUExBVEZP
Uk0oSU9TKQogc3RhdGljIHZvaWQgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dChDR0NvbnRleHRSZWYg
Y29udGV4dCwgQ0dQYXRoUmVmIGZvY3VzUmluZ1BhdGgsIENHQ29sb3JSZWYgY29sb3IsIGludCBy
YWRpdXMpCiB7CiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwpAQCAtNjQsOSArNzQs
MTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0
aCwgaW50IHdpZHRoLCBpbnQgLypvZmZzZXQqLywKIAogICAgIGRyYXdGb2N1c1JpbmdUb0NvbnRl
eHQocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCksIGNvbG9yUmVmLCByYWRp
dXMpOwogfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3aWR0aCwg
aW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogeworI2lmICFQTEFURk9STShJT1MpCiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04MCw5ICs5
MiwxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgsIGludAogICAgICAgICBDR1BhdGhBZGRSZWN0KGZv
Y3VzUmluZ1BhdGguZ2V0KCksIDAsIENHUmVjdEluc2V0KHJlY3RzW2ldLCAtb2Zmc2V0LCAtb2Zm
c2V0KSk7CiAKICAgICBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0KHBsYXRmb3JtQ29udGV4dCgpLCBm
b2N1c1JpbmdQYXRoLmdldCgpLCBjb2xvclJlZiwgcmFkaXVzKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHJlY3RzKTsKKyAgICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJB
TShvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShjb2xvcik7CisjZW5kaWYKIH0KIAogCisjaWYg
IVBMQVRGT1JNKElPUykKIHN0YXRpYyBOU0NvbG9yKiBtYWtlUGF0dGVybkNvbG9yKE5TU3RyaW5n
KiBmaXJzdENob2ljZU5hbWUsIE5TU3RyaW5nKiBzZWNvbmRDaG9pY2VOYW1lLCBOU0NvbG9yKiBk
ZWZhdWx0Q29sb3IsIGJvb2wmIHVzaW5nRG90KQogewogICAgIC8vIEV2ZW50dWFsbHkgd2Ugc2hv
dWxkIGJlIGFibGUgdG8gZ2V0IHJpZCBvZiB0aGUgc2Vjb25kQ2hvaWNlTmFtZS4gRm9yIHRoZSB0
aW1lIGJlaW5nIHdlIG5lZWQgYm90aCB0byBrZWVwCkBAIC05OCw2ICsxMTcsMTUgQEAgc3RhdGlj
IE5TQ29sb3IqIG1ha2VQYXR0ZXJuQ29sb3IoTlNTdHJpbmcqIGZpcnN0Q2hvaWNlTmFtZSwgTlNT
dHJpbmcqIHNlY29uZENob2kKICAgICAgICAgY29sb3IgPSBkZWZhdWx0Q29sb3I7CiAgICAgcmV0
dXJuIGNvbG9yOwogfQorI2Vsc2UKK3N0YXRpYyBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBjcmVh
dGVEb3RQYXR0ZXJuKGJvb2wmIHVzaW5nRG90LCBjb25zdCBjaGFyKiByZXNvdXJjZU5hbWUpCit7
CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihXS0dyYXBoaWNzQ3Jl
YXRlSW1hZ2VGcm9tQnVuZGxlV2l0aE5hbWUocmVzb3VyY2VOYW1lKSk7CisgICAgQVNTRVJUKGlt
YWdlKTsgLy8gaWYgaW1hZ2UgaXMgbm90IGF2YWlsYWJsZSwgd2Ugd2FudCB0byBrbm93CisgICAg
dXNpbmdEb3QgPSB0cnVlOworICAgIHJldHVybiBhZG9wdENGKFdLQ3JlYXRlUGF0dGVybkZyb21D
R0ltYWdlKGltYWdlLmdldCgpKSk7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogc3Rh
dGljIE5TQ29sb3IgKnNwZWxsaW5nUGF0dGVybkNvbG9yID0gbnVsbHB0cjsKIHN0YXRpYyBOU0Nv
bG9yICpncmFtbWFyUGF0dGVybkNvbG9yID0gbnVsbHB0cjsKQEAgLTEyMSwyMCArMTQ5LDMxIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3CiAgICAgZmxvYXQgcGF0dGVybldpZHRoID0gY01pc3Nw
ZWxsaW5nTGluZVBhdHRlcm5XaWR0aDsKIAogICAgIGJvb2wgdXNpbmdEb3Q7CisjaWYgIVBMQVRG
T1JNKElPUykKICAgICBOU0NvbG9yICpwYXR0ZXJuQ29sb3I7CisjZWxzZQorICAgIENHUGF0dGVy
blJlZiBkb3RQYXR0ZXJuOworI2VuZGlmCiAgICAgc3dpdGNoIChzdHlsZSkgewogICAgICAgICBj
YXNlIERvY3VtZW50TWFya2VyU3BlbGxpbmdMaW5lU3R5bGU6CiAgICAgICAgIHsKICAgICAgICAg
ICAgIC8vIENvbnN0YW50cyBmb3Igc3BlbGxpbmcgcGF0dGVybiBjb2xvci4KICAgICAgICAgICAg
IHN0YXRpYyBib29sIHVzaW5nRG90Rm9yU3BlbGxpbmcgPSBmYWxzZTsKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgICAgICAgICAgaWYgKCFzcGVsbGluZ1BhdHRlcm5Db2xvcikKICAgICAgICAgICAg
ICAgICBzcGVsbGluZ1BhdHRlcm5Db2xvciA9IFttYWtlUGF0dGVybkNvbG9yKEAiTlNTcGVsbGlu
Z0RvdCIsIEAiU3BlbGxpbmdEb3QiLCBbTlNDb2xvciByZWRDb2xvcl0sIHVzaW5nRG90Rm9yU3Bl
bGxpbmcpIHJldGFpbl07CiAgICAgICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yU3BlbGxp
bmc7CiAgICAgICAgICAgICBwYXR0ZXJuQ29sb3IgPSBzcGVsbGluZ1BhdHRlcm5Db2xvcjsKKyNl
bHNlCisgICAgICAgICAgICBzdGF0aWMgQ0dQYXR0ZXJuUmVmIHNwZWxsaW5nUGF0dGVybiA9IGNy
ZWF0ZURvdFBhdHRlcm4odXNpbmdEb3RGb3JTcGVsbGluZywgIlNwZWxsaW5nRG90IikubGVha1Jl
ZigpOworICAgICAgICAgICAgZG90UGF0dGVybiA9IHNwZWxsaW5nUGF0dGVybjsKKyNlbmRpZgor
ICAgICAgICAgICAgdXNpbmdEb3QgPSB1c2luZ0RvdEZvclNwZWxsaW5nOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlckdyYW1tYXJMaW5l
U3R5bGU6CiAgICAgICAgIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgLy8gQ29u
c3RhbnRzIGZvciBncmFtbWFyIHBhdHRlcm4gY29sb3IuCiAgICAgICAgICAgICBzdGF0aWMgYm9v
bCB1c2luZ0RvdEZvckdyYW1tYXIgPSBmYWxzZTsKICAgICAgICAgICAgIGlmICghZ3JhbW1hclBh
dHRlcm5Db2xvcikKQEAgLTE0Miw4ICsxODEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHcK
ICAgICAgICAgICAgIHVzaW5nRG90ID0gdXNpbmdEb3RGb3JHcmFtbWFyOwogICAgICAgICAgICAg
cGF0dGVybkNvbG9yID0gZ3JhbW1hclBhdHRlcm5Db2xvcjsKICAgICAgICAgICAgIGJyZWFrOwor
I2Vsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0
dXJuOworI2VuZGlmCiAgICAgICAgIH0KLSNpZiBQTEFURk9STShNQUMpCisjaWYgIVBMQVRGT1JN
KElPUykgJiYgUExBVEZPUk0oTUFDKQogICAgICAgICAvLyBUbyBzdXBwb3J0IGNvcnJlY3Rpb24g
cGFuZWwuCiAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJBdXRvY29ycmVjdGlvblJlcGxhY2Vt
ZW50TGluZVN0eWxlOgogICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyRGljdGF0aW9uQWx0ZXJu
YXRpdmVzTGluZVN0eWxlOgpAQCAtMTU3LDcgKzIwMCwyMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxv
YXQgdwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICNlbmRpZgorI2lmIFBMQVRGT1JN
KElPUykKKyAgICAgICAgY2FzZSBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJu
YXRpdmVzTGluZVN0eWxlOgorICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWMgYm9vbCB1c2lu
Z0RvdEZvckRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHN0YXRpYyBDR1BhdHRlcm5SZWYgZGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc1Bh
dHRlcm4gPSBjcmVhdGVEb3RQYXR0ZXJuKHVzaW5nRG90Rm9yRGljdGF0aW9uUGhyYXNlV2l0aEFs
dGVybmF0aXZlcywgIkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNEb3QiKS5sZWFrUmVm
KCk7CisgICAgICAgICAgICBkb3RQYXR0ZXJuID0gZGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0
aXZlc1BhdHRlcm47CisgICAgICAgICAgICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yRGljdGF0aW9u
UGhyYXNlV2l0aEFsdGVybmF0aXZlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogICAgICAgICBkZWZhdWx0OgorI2lmIFBMQVRGT1JNKElP
UykKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgcmVtb3ZlIGRlZmF1bHQgY2FzZSBzbyB3
ZSBnZXQgY29tcGlsZS10aW1lIGVycm9ycy4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKICAgICAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCkBAIC0xODIsMjAgKzIzOSwzMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdwogICAg
IC8vIGZvciB0cmFuc2Zvcm1zLgogCiAgICAgLy8gRHJhdyB1bmRlcmxpbmUuCisjaWYgIVBMQVRG
T1JNKElPUykKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHRo
aXMpOwogICAgIE5TR3JhcGhpY3NDb250ZXh0ICpjdXJyZW50Q29udGV4dCA9IFtOU0dyYXBoaWNz
Q29udGV4dCBjdXJyZW50Q29udGV4dF07CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSAoQ0dD
b250ZXh0UmVmKVtjdXJyZW50Q29udGV4dCBncmFwaGljc1BvcnRdOworI2Vsc2UKKyAgICBDR0Nv
bnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOworI2VuZGlmCiAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgW3BhdHRl
cm5Db2xvciBzZXRdOworI2Vsc2UKKyAgICBXS1NldFBhdHRlcm4oY29udGV4dCwgZG90UGF0dGVy
biwgWUVTLCBZRVMpOworI2VuZGlmCiAKICAgICB3a1NldFBhdHRlcm5QaGFzZUluVXNlclNwYWNl
KGNvbnRleHQsIG9mZnNldFBvaW50KTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgTlNSZWN0
RmlsbFVzaW5nT3BlcmF0aW9uKE5TTWFrZVJlY3Qob2Zmc2V0UG9pbnQueCgpLCBvZmZzZXRQb2lu
dC55KCksIHdpZHRoLCBwYXR0ZXJuSGVpZ2h0KSwgTlNDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyNl
bHNlCisgICAgV0tSZWN0RmlsbFVzaW5nT3BlcmF0aW9uKGNvbnRleHQsIENHUmVjdE1ha2Uob2Zm
c2V0UG9pbnQueCgpLCBvZmZzZXRQb2ludC55KCksIHdpZHRoLCBwYXR0ZXJuSGVpZ2h0KSwga0NH
Q29tcG9zaXRlU292ZXIpOworI2VuZGlmCiAgICAgCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShjb250ZXh0KTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiBDR0NvbG9yU3BhY2VSZWYgbGlu
ZWFyUkdCQ29sb3JTcGFjZVJlZigpCiB7CiAgICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBsaW5l
YXJTUkdCU3BhY2UgPSAwOwpAQCAtMjE1LDUgKzI4NSw2IEBAIENHQ29sb3JTcGFjZVJlZiBsaW5l
YXJSR0JDb2xvclNwYWNlUmVmKCkKIAogICAgIHJldHVybiBsaW5lYXJTUkdCU3BhY2U7CiB9Cisj
ZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ljb25NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNv
bk1hYy5tbQppbmRleCBkY2IyNjk0Njk0ZDliMjUwZWNiMmZjZmZkYWNkYjIzNzQyZWNiNjg3Li5h
MGQ2ZWVlZWQzYzRkYjMzZWFiZDkyNjFjYmNmYTQzNWFkMmQ2YjUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbQpAQCAtMTgsNiArMTgsOCBA
QAogICoKICAqLwogCisjaWYgIVBMQVRGT1JNKElPUykKKwogI2ltcG9ydCAiY29uZmlnLmgiCiAj
aW1wb3J0ICJJY29uLmgiCiAKQEAgLTgyLDMgKzg0LDUgQEAgdm9pZCBJY29uOjpwYWludChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB9CiAKIH0KKworI2Vu
ZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvSW1hZ2VNYWMubW0KaW5kZXggMjUxZjU3NDhiZjkwMWQ0ZmI4NDY5ZmMzZjcwZTQ5
N2IzYWJiNDdkMy4uMTIwNDU4YzMzMTE1OTFmNmMwMmI2MzA1NzdkYWNlMzA2OTQzODNhNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQpA
QCAtMzcsNiArMzcsMTggQEAKIEBpbXBsZW1lbnRhdGlvbiBXZWJDb3JlQnVuZGxlRmluZGVyCiBA
ZW5kCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorCisjaW1w
b3J0IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW1wb3J0IDxJbWFnZUlPL0ltYWdl
SU8uaD4KKyNpbXBvcnQgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4K
KworU09GVF9MSU5LX0ZSQU1FV09SSyhNb2JpbGVDb3JlU2VydmljZXMpCitTT0ZUX0xJTktfQ09O
U1RBTlQoTW9iaWxlQ29yZVNlcnZpY2VzLCBrVVRUeXBlVElGRiwgQ0ZTdHJpbmdSZWYpCisjZGVm
aW5lIGtVVFR5cGVUSUZGIGdldGtVVFR5cGVUSUZGKCkKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQpAQCAt
NDQsNyArNTYsOSBAQCB2b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkK
ICAgICBpZiAobV9mcmFtZXMuc2l6ZSgpICE9IDEpCiAgICAgICAgIHJldHVybjsKIAorI2lmICFQ
TEFURk9STShJT1MpCiAgICAgbV9uc0ltYWdlID0gMDsKKyNlbmRpZgogICAgIG1fdGlmZlJlcCA9
IDA7CiB9CiAKQEAgLTEwMyw2ICsxMTcsNyBAQCBDRkRhdGFSZWYgQml0bWFwSW1hZ2U6OmdldFRJ
RkZSZXByZXNlbnRhdGlvbigpCiAgICAgcmV0dXJuIG1fdGlmZlJlcC5nZXQoKTsKIH0KIAorI2lm
ICFQTEFURk9STShJT1MpCiBOU0ltYWdlKiBCaXRtYXBJbWFnZTo6Z2V0TlNJbWFnZSgpCiB7CiAg
ICAgaWYgKG1fbnNJbWFnZSkKQEAgLTExNSw1ICsxMzAsNiBAQCBOU0ltYWdlKiBCaXRtYXBJbWFn
ZTo6Z2V0TlNJbWFnZSgpCiAgICAgbV9uc0ltYWdlID0gYWRvcHROUyhbW05TSW1hZ2UgYWxsb2Nd
IGluaXRXaXRoRGF0YTooTlNEYXRhKilkYXRhXSk7CiAgICAgcmV0dXJuIG1fbnNJbWFnZS5nZXQo
KTsKIH0KKyNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvSW50UG9pbnRNYWMubW0KaW5kZXggN2EyZTczMGVkOGU2Yjc0OTY1NmY1NmNhZmRl
MGU3MTE0NjY5ZGY4Yy4uYzI5YzNhZTg2NGQzOGFmNzlkY2M0YWUxY2JiYzViNDlkYWMxNmE1YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFBvaW50
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQb2lu
dE1hYy5tbQpAQCAtMjgsNiArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRS
WV9UWVBFUwogCiBJbnRQb2ludDo6SW50UG9pbnQoY29uc3QgTlNQb2ludCYgcCkgOiBtX3goc3Rh
dGljX2Nhc3Q8aW50PihwLngpKSwgbV95KHN0YXRpY19jYXN0PGludD4ocC55KSkKQEAgLTQwLDUg
KzQxLDYgQEAgSW50UG9pbnQ6Om9wZXJhdG9yIE5TUG9pbnQoKSBjb25zdAogfQogCiAjZW5kaWYK
KyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UmVjdE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9JbnRSZWN0TWFjLm1tCmluZGV4IDczODYxOGExOTgzYWM3NzVj
MzU5OGE1NjM0NWI5NGRhZTRiMjZhMTQuLjc3NGEwYmE3MDRlZTdkNTgzYWY4ZTA0MDJiOTcxYWMz
OGY0M2JjYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9JbnRSZWN0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9JbnRSZWN0TWFjLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorI2lmICFQTEFURk9STShJT1MpCiAjaWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19D
R0dFT01FVFJZX1RZUEVTCiAKIEludFJlY3Q6Om9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0CkBAIC00
NSw1ICs0Niw2IEBAIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBOU1JlY3QmIHJlY3Qp
CiB9CiAKICNlbmRpZgorI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9JbnRTaXplTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ludFNpemVNYWMubW0KaW5kZXggYzdkY2Q4OGM4OGUwNzE0Y2FlMTU4
NjMxYWU4ZjMzMTliM2RjYmQ2Yi4uOWE0NzY2NTA5ZmIzY2U0NjgzNDg4MWE1YzZmODMxNDIwZmE4
ZjljZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lu
dFNpemVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lu
dFNpemVNYWMubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisj
aWYgIVBMQVRGT1JNKElPUykKICNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VP
TUVUUllfVFlQRVMKIAogSW50U2l6ZTo6SW50U2l6ZShjb25zdCBOU1NpemUmIHMpIDogbV93aWR0
aChzdGF0aWNfY2FzdDxpbnQ+KHMud2lkdGgpKSwgbV9oZWlnaHQoc3RhdGljX2Nhc3Q8aW50Pihz
LmhlaWdodCkpCkBAIC00MCw1ICs0MSw2IEBAIEludFNpemU6Om9wZXJhdG9yIE5TU2l6ZSgpIGNv
bnN0CiB9CiAKICNlbmRpZgorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByb3h5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcm94
eS5oCmluZGV4IGM1ODZmYjg2ZmVmYTQwNjgwZmE5NWEyMzU3NzYyM2QwM2ExMjliYmIuLmM0MWU4
Y2Y4NTIzYmY1OTVhZmQ5OTVkMzk5MzdlMmY4YWM2ZDBlZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByb3h5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJveHkuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
NiArMjYsMjEgQEAKICNpZm5kZWYgTWVkaWFQbGF5ZXJQcm94eV9oCiAjZGVmaW5lIE1lZGlhUGxh
eWVyUHJveHlfaAogCisjaWYgUExBVEZPUk0oSU9TKQorI2lmIGRlZmluZWQoX19PQkpDX18pCisj
aW1wb3J0IDxGb3VuZGF0aW9uL05TR2VvbWV0cnkuaD4KKyNlbmRpZgorCisvLyBOZWVkZWQgc2lu
Y2UgdGhpcyBpcyBhIFdlYktpdCBwcml2YXRlIGhlYWRlciBvbiBpT1MuCisjaWZuZGVmIE9CSkNf
Q0xBU1MKKyNpZmRlZiBfX09CSkNfXworI2RlZmluZSBPQkpDX0NMQVNTIEBjbGFzcworI2Vsc2UK
KyNkZWZpbmUgT0JKQ19DTEFTUyBjbGFzcworI2VuZGlmCisjZW5kaWYgLy8gIWRlZmluZWQoT0JK
Q19DTEFTUykKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKIE9CSkNfQ0xBU1MgV2ViTWVkaWFQ
bGF5ZXJQcm94eTsKIAogZW51bSBNZWRpYVBsYXllclByb3h5Tm90aWZpY2F0aW9uVHlwZSB7CkBA
IC01Nyw2ICs3MiwxNiBAQCBlbnVtIE1lZGlhUGxheWVyUHJveHlOb3RpZmljYXRpb25UeXBlIHsK
ICAgICBNZWRpYVBsYXllck5vdGlmaWNhdGlvblRpbWVKdW1wZWQsCiAgICAgCiAgICAgTWVkaWFQ
bGF5ZXJOb3RpZmljYXRpb25QbGF5UGF1c2VCdXR0b25QcmVzc2VkLAorICAgIE1lZGlhUGxheWVy
Tm90aWZpY2F0aW9uUmF0ZURpZENoYW5nZSwKKyAgICBNZWRpYVBsYXllck5vdGlmaWNhdGlvbkdh
aW5Gb2N1cywKKyAgICBNZWRpYVBsYXllck5vdGlmaWNhdGlvbkxvc2VGb2N1cywKKyAgICBNZWRp
YVBsYXllclJlcXVlc3RCZWdpblBsYXliYWNrLAorICAgIE1lZGlhUGxheWVyUmVxdWVzdFBhdXNl
UGxheWJhY2ssCisKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCisgICAgTWVkaWFQbGF5ZXJOb3Rp
ZmljYXRpb25DdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCwKKyAgICBNZWRp
YVBsYXllck5vdGlmaWNhdGlvblBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZCwKKyNl
bmRpZgogfTsKIAogI2lmZGVmIF9fT0JKQ19fCkBAIC03MSw2ICs5NiwyNSBAQCBlbnVtIE1lZGlh
UGxheWVyUHJveHlOb3RpZmljYXRpb25UeXBlIHsKIAogLSAodm9pZClfc2V0UG9zdGVyOihOU1VS
TCAqKXVybDsKIAorLSAodm9pZClfc2V0Q29udHJvbHM6KEJPT0wpY29udHJvbHM7CistICh2b2lk
KV9zZXRBdXRvYnVmZmVyOihCT09MKWF1dG9idWZmZXI7CisKKy0gKHZvaWQpX2VudGVyRnVsbFNj
cmVlbjsKKy0gKHZvaWQpX2V4aXRGdWxsU2NyZWVuOworCisjaWYgRU5BQkxFKElPU19BSVJQTEFZ
KQorLSAoQk9PTClfaXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVzczsKKy0gKHZvaWQpX3No
b3dQbGF5YmFja1RhcmdldFBpY2tlcjsKKworLSAoQk9PTClfaGFzV2lyZWxlc3NQbGF5YmFja1Rh
cmdldHM7CisKKy0gKEJPT0wpX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkOworLSAodm9p
ZClfc2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQ6KEJPT0wpZGlzYWJsZWQ7CisKKy0g
KHZvaWQpX3NldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzOihCT09MKWhh
c0xpc3RlbmVyczsKKyNlbmRpZgorCistICh2b2lkKV9wcmVwYXJlRm9yUGxheWJhY2s7CiAtICh2
b2lkKV9wbGF5OwogLSAodm9pZClfcGF1c2U7CiAKQEAgLTc5LDYgKzEyMyw5IEBAIGVudW0gTWVk
aWFQbGF5ZXJQcm94eU5vdGlmaWNhdGlvblR5cGUgewogLSAoQk9PTClfaGFzVmlkZW87CiAtIChC
T09MKV9oYXNBdWRpbzsKIAorLSAoQk9PTClfaGFzQ2xvc2VkQ2FwdGlvbnM7CistICh2b2lkKV9z
ZXRDbG9zZWRDYXB0aW9uc1Zpc2libGU6KEJPT0wpdmlzaWJsZTsKKwogLSAoTlNUaW1lSW50ZXJ2
YWwpX2R1cmF0aW9uOwogCiAtIChkb3VibGUpX2N1cnJlbnRUaW1lOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRh
Q29yZVRleHQuY3BwCmluZGV4IDcyOWJlNmZhZTc3MGZkZWQwNzhmNDk5ODIxNWU1NDgzY2VmNWRh
YjMuLjA4MjhiZDgwODJjMTgzMWY5MDY2MGMyY2Q1ZTIyYWQ0Zjc1NmVjYzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVU
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxl
Rm9udERhdGFDb3JlVGV4dC5jcHAKQEAgLTI3LDcgKzI3LDExIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAorI2lmICFQTEFURk9STShJT1MpCiAj
aW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxz
ZQorI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvU2ltcGxlRm9udERhdGFNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KaW5kZXggMjFlYTYxMTYwNzg2MTQzMWU2M2I2NGEz
MGNlZDc3YTcwZjlhOTAwYy4uMjY0MGNjNDc5NTg4MjhhYjUyOGRjNDFhYTg1OTM0NjU5NDZiNWUy
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBs
ZUZvbnREYXRhTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9TaW1wbGVGb250RGF0YU1hYy5tbQpAQCAtMzUsMjAgKzM1LDI3IEBACiAjaW1wb3J0ICJGb250
RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgorI2lmIFVTRShBUFBLSVQpCiAjaW1wb3J0IDxBcHBLaXQvQXBw
S2l0Lmg+CiAjaW1wb3J0IDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMu
aD4KKyNlbHNlCisjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorI2VuZGlmCiAjaW1wb3J0
IDxmbG9hdC5oPgogI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgogI2ltcG9ydCA8d3RmL0Fzc2Vy
dGlvbnMuaD4KICNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbXBvcnQgPHd0Zi9SZXRh
aW5QdHIuaD4KIAorI2lmICFQTEFURk9STShJT1MpCiBAaW50ZXJmYWNlIE5TRm9udCAoV2ViQXBw
S2l0U2VjcmV0QVBJKQogLSAoQk9PTClfaXNGYWtlRml4ZWRQaXRjaDsKIEBlbmQKKyNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gIAorCisjaWYgVVNFKEFQUEtJVCkKIHN0YXRpYyBib29s
IGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgY3RGb250KQogewogICAgIC8vIFRoZSBj
aGVjayBkb2Vzbid0IGxvb2sgbmVhdCBidXQgdGhpcyBpcyB3aGF0IEFwcEtpdCBkb2VzIGZvciB2
ZXJ0aWNhbCB3cml0aW5nLi4uCkBAIC0yNTUsNiArMjYyLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKICAgICAvLyBGYWxsYmFjayB0byBhIGNyb3NzLXBs
YXRmb3JtIGVzdGltYXRlLCB3aGljaCB3aWxsIHBvcHVsYXRlIHRoZXNlIHZhbHVlcyBpZiB0aGV5
IGFyZSBub24tcG9zaXRpdmUuCiAgICAgaW5pdENoYXJXaWR0aHMoKTsKIH0KKyNlbmRpZiAvLyBV
U0UoQVBQS0lUKQogCiB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogewpA
QCAtMjY4LDYgKzI3Niw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgp
CiAgICAgfQogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QK
IHsKICAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKQEAgLTMwNCw3ICszMTMsOSBAQCBQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRG
b250RGF0YShjb25zdCBGbwogCiAgICAgcmV0dXJuIDA7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKIAorI2lmICFQTEFURk9STShJT1MpCiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWlu
c0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0CiB7
CiAgICAgTlNTdHJpbmcgKnN0cmluZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFj
dGVyc05vQ29weTpjb25zdF9jYXN0PHVuaWNoYXIqPihjaGFyYWN0ZXJzKSBsZW5ndGg6bGVuZ3Ro
IGZyZWVXaGVuRG9uZTpOT107CkBAIC0zMzUsNiArMzQ2LDcgQEAgdm9pZCBTaW1wbGVGb250RGF0
YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21w
YXJlOkAiTVMtUEdvdGhpYyJdICE9IE5TT3JkZXJlZFNhbWUgJiYKICAgICAgICAgICAgW25hbWUg
Y2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1vbm90eXBlQ29yc2l2YSJdICE9IE5TT3JkZXJlZFNh
bWU7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogRmxvYXRSZWN0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewpAQCAtMzQ3
LDYgKzM1OSw3IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAgICByZXR1cm4gYm91bmRpbmdCb3g7CiB9CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBDR1NpemUgYWR2YW5jZSA9IENHU2l6ZVpl
cm87CkBAIC0zNjcsNiArMzgwLDcgQEAgZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lk
dGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIAogICAgIHJldHVybiBhZHZhbmNlLndpZHRo
ICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwogfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAK
IHN0cnVjdCBQcm92aWRlckluZm8gewogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJHTExheWVyLmgKaW5k
ZXggNjQ0MGI3MWFmNzE5ODg3ZjM1ZmE1ODA0ZmU5MGMwYTk5YzUyMDg4Ni4uZWFkZTUyMDM0Y2Rk
ODEwYTYwMmZlODFmZGEyODQyYjIzMTg2YTA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5oCkBAIC0zNSw3ICszNSwxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiB9CiAKLUBpbnRl
cmZhY2UgV2ViR0xMYXllciA6IENBT3BlbkdMTGF5ZXIgCisjaWYgUExBVEZPUk0oSU9TKQorQGlu
dGVyZmFjZSBXZWJHTExheWVyIDogQ0FFQUdMTGF5ZXIKKyNlbHNlCitAaW50ZXJmYWNlIFdlYkdM
TGF5ZXIgOiBDQU9wZW5HTExheWVyCisjZW5kaWYKIHsKICAgICBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiBtX2xheWVyT3duZXI7CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqIG1fY29u
dGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9X
ZWJHTExheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdM
TGF5ZXIubW0KaW5kZXggZDUxMGI2MTlkZTk5OTU1YzczMDYxYWE0YTg5NjI1YzE4YTdjYWIzMy4u
NjQ4Mjk5ZTc1OTZjMzQ1NjJlMTU0NDUwZTc3ZWEyNGE3ODJiMjFlYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIubW0KQEAgLTMyLDgg
KzMyLDEwIEBACiAKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW1wb3J0ICJHcmFw
aGljc0xheWVyLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbXBvcnQgPE9wZW5HTC9PcGVuR0wu
aD4KICNpbXBvcnQgPE9wZW5HTC9nbC5oPgorI2VuZGlmCiAjaW1wb3J0IDx3dGYvRmFzdE1hbGxv
Yy5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCkBAIC00OCw2ICs1MCw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIHJldHVybiBzZWxmOwogfQogCisjaWYgIVBMQVRGT1JN
KElPUykKIC0oQ0dMUGl4ZWxGb3JtYXRPYmopY29weUNHTFBpeGVsRm9ybWF0Rm9yRGlzcGxheU1h
c2s6KHVpbnQzMl90KW1hc2sKIHsKICAgICAvLyBGSVhNRTogVGhlIG1hc2sgcGFyYW0gdGVsbHMg
eW91IHdoaWNoIGRpc3BsYXkgKG9uIGEgbXVsdGktZGlzcGxheSBzeXN0ZW0pCkBAIC0xMDgsOSAr
MTExLDE0IEBAIHN0YXRpYyB2b2lkIGZyZWVEYXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAqZGF0YSwg
c2l6ZV90IC8qIHNpemUgKi8pCiB7CiAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkICo+KGRh
dGEpKTsKIH0KKyNlbmRpZgogCiAtKENHSW1hZ2VSZWYpY29weUltYWdlU25hcHNob3RXaXRoQ29s
b3JTcGFjZTooQ0dDb2xvclNwYWNlUmVmKWNvbG9yU3BhY2UKIHsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJldHVybiAwOworI2Vsc2UKICAg
ICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHQtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QoKSk7CiAKICAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBpbWFnZUNvbG9yU3BhY2Ug
PSBjb2xvclNwYWNlOwpAQCAtMTM4LDExICsxNDYsMTYgQEAgc3RhdGljIHZvaWQgZnJlZURhdGEo
dm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAqLykKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dSZW5kZXJpbmdJbnRlbnRE
ZWZhdWx0KTsKICAgICBDR0RhdGFQcm92aWRlclJlbGVhc2UocHJvdmlkZXIpOwogICAgIHJldHVy
biBpbWFnZTsKKyNlbmRpZgogfQogCiAtICh2b2lkKWRpc3BsYXkKIHsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgbV9jb250ZXh0LT5lbmRQYWludCgpOworI2Vsc2UKICAgICBbc3VwZXIgZGlzcGxh
eV07CisjZW5kaWYKICAgICBpZiAobV9sYXllck93bmVyKQogICAgICAgICBtX2xheWVyT3duZXIt
PmxheWVyRGlkRGlzcGxheShzZWxmKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQppbmRleCAwODI5NjQyZDk0OWQwNjRlZDlhYTZjYWVl
NDBhZTA2ZTQwNDliYzRjLi5hOTI0Y2RmOGNkZThhOTgyMDExOGQwM2E5ZjkxMTQxMDRhMjNjMzI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5
ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVy
Lm1tCkBAIC0zMiwxNSArMzIsMjkgQEAKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lt
cG9ydCAiR3JhcGhpY3NMYXllckNBLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXIuaCIKKyNp
ZiAhUExBVEZPUk0oSU9TKQogI2ltcG9ydCAiVGhlbWVNYWMuaCIKKyNlbmRpZgogI2ltcG9ydCA8
UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJX
S0dyYXBoaWNzLmgiCisjaW1wb3J0ICJXQUtXaW5kb3cuaCIKKyNpbXBvcnQgIldlYkNvcmVUaHJl
YWQuaCIKKyNlbmRpZgorCiBAaW50ZXJmYWNlIENBTGF5ZXIoV2ViQ29yZUNBTGF5ZXJQcml2YXRl
KQogLSAodm9pZClyZWxvYWRWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aDsKIEBl
bmQKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKKyNpZiBQTEFURk9STShJT1MpCitAaW50
ZXJmYWNlIFdlYkxheWVyKFByaXZhdGUpCistICh2b2lkKWRyYXdTY2FsZWRDb250ZW50c0luQ29u
dGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQ7CitAZW5kCisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBSZXBhaW50UmVjdExpc3QgY29sbGVjdFJlY3RzVG9QYWludChDR0NvbnRleHRS
ZWYgY29udGV4dCwgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIpCkBAIC03NCwxNyAr
ODgsMjYgQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2Vi
Q29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUMKICAgICBpZiAoIWxheWVyQ29udGVudHMp
CiAgICAgICAgIHJldHVybjsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBXS1NldEN1cnJlbnRH
cmFwaGljc0NvbnRleHQoY29udGV4dCk7CisjZW5kaWYKKwogICAgIENHQ29udGV4dFNhdmVHU3Rh
dGUoY29udGV4dCk7CiAKICAgICAvLyBXZSBuZXZlciB1c2UgQ29tcG9zaXRpbmdDb29yZGluYXRl
c0JvdHRvbVVwIG9uIE1hYy4KICAgICBBU1NFUlQobGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxh
eWVyQ29udGVudHNPcmllbnRhdGlvbigpID09IEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0ZXNUb3BEb3duKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBXS0ZvbnRBbnRpYWxp
YXNpbmdTdGF0ZVNhdmVyIGZvbnRBbnRpYWxpYXNpbmdTdGF0ZShjb250ZXh0LCBbcGxhdGZvcm1D
QUxheWVyLT5wbGF0Zm9ybUxheWVyKCkgaXNPcGFxdWVdKTsKKyAgICBmb250QW50aWFsaWFzaW5n
U3RhdGUuc2V0dXAoW1dBS1dpbmRvdyBoYXNMYW5kc2NhcGVPcmllbnRhdGlvbl0pOworI2Vsc2UK
ICAgICBbTlNHcmFwaGljc0NvbnRleHQgc2F2ZUdyYXBoaWNzU3RhdGVdOwogCiAgICAgLy8gU2V0
IHVwIGFuIE5TR3JhcGhpY3NDb250ZXh0IGZvciB0aGUgY29udGV4dCwgc28gdGhhdCBwYXJ0cyBv
ZiBBcHBLaXQgdGhhdCByZWx5IG9uCiAgICAgLy8gdGhlIGN1cnJlbnQgTlNHcmFwaGljc0NvbnRl
eHQgKGUuZy4gTlNDZWxsIGRyYXdpbmcpIGdldCB0aGUgcmlnaHQgb25lLgogICAgIE5TR3JhcGhp
Y3NDb250ZXh0KiBsYXllckNvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250
ZXh0V2l0aEdyYXBoaWNzUG9ydDpjb250ZXh0IGZsaXBwZWQ6WUVTXTsKICAgICBbTlNHcmFwaGlj
c0NvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6bGF5ZXJDb250ZXh0XTsKKyNlbmRpZgogCiAgICAg
R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICBncmFwaGljc0Nv
bnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKQEAgLTk0LDcgKzExNyw4IEBAIHZvaWQg
ZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFdlYkNvcmU6OlBsYXRmb3Jt
Q0FMYXllciogcGxhdGZvcm1DCiAgICAgICAgIC8vIFR1cm4gb2ZmIGZvbnQgc21vb3RoaW5nIHRv
IGltcHJvdmUgdGhlIGFwcGVhcmFuY2Ugb2YgdGV4dCByZW5kZXJlZCBvbnRvIGEgdHJhbnNwYXJl
bnQgYmFja2dyb3VuZC4KICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNob3VsZFNtb290aEZv
bnRzKGZhbHNlKTsKICAgICB9Ci0gICAgCisKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIEl0
J3MgaW1wb3J0YW50IHRvIGdldCB0aGUgY2xpcCBmcm9tIHRoZSBjb250ZXh0LCBiZWNhdXNlIGl0
IG1heSBiZSBzaWduaWZpY2FudGx5CiAgICAgLy8gc21hbGxlciB0aGFuIHRoZSBsYXllciBib3Vu
ZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQogICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzID0gQ0dDb250
ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOwpAQCAtMTA2LDYgKzEzMCw3IEBAIHZvaWQg
ZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFdlYkNvcmU6OlBsYXRmb3Jt
Q0FMYXllciogcGxhdGZvcm1DCiAgICAgZm9jdXNSaW5nQ2xpcFJlY3QgPSB0cmFuc2Zvcm0ubWFw
UmVjdChjbGlwQm91bmRzKTsKICNlbmRpZgogICAgIFRoZW1lTWFjOjpzZXRGb2N1c1JpbmdDbGlw
UmVjdChmb2N1c1JpbmdDbGlwUmVjdCk7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogICAg
IGZvciAoYXV0byByZWN0IDogZGlydHlSZWN0cykgewogICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKQEAgLTExNCw5ICsxMzksMTMg
QEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6
UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUMKICAgICAgICAgbGF5ZXJDb250ZW50cy0+cGxhdGZv
cm1DQUxheWVyUGFpbnRDb250ZW50cyhwbGF0Zm9ybUNBTGF5ZXIsIGdyYXBoaWNzQ29udGV4dCwg
ZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7CiAgICAgfQogCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IGZvbnRBbnRpYWxpYXNpbmdTdGF0ZS5yZXN0b3JlKCk7CisjZWxzZQogICAgIFRoZW1lTWFjOjpz
ZXRGb2N1c1JpbmdDbGlwUmVjdChGbG9hdFJlY3QoKSk7CiAKICAgICBbTlNHcmFwaGljc0NvbnRl
eHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOworI2VuZGlmCiAKICAgICAvLyBSZS1mZXRjaCB0aGUg
bGF5ZXIgb3duZXIsIHNpbmNlIDxyZGFyOi8vcHJvYmxlbS85MTI1MTUxPiBpbmRpY2F0ZXMgdGhh
dCBpdCBtaWdodCBoYXZlIGJlZW4gZGVzdHJveWVkIGR1cmluZyBwYWludGluZy4KICAgICBsYXll
ckNvbnRlbnRzID0gcGxhdGZvcm1DQUxheWVyLT5vd25lcigpOwpAQCAtMjI0LDYgKzI1MywxMCBA
QCB2b2lkIGRyYXdSZXBhaW50SW5kaWNhdG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBQbGF0Zm9y
bUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllcgogCiAtICh2b2lkKWRpc3BsYXkKIHsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgaWYgKHB0aHJlYWRfbWFpbl9ucCgpKQorICAgICAgICBXZWJUaHJlYWRM
b2NrKCk7CisjZW5kaWYKICAgICBbc3VwZXIgZGlzcGxheV07CiAgICAgUGxhdGZvcm1DQUxheWVy
KiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHNlbGYpOwogICAgIGlm
IChsYXllciAmJiBsYXllci0+b3duZXIoKSkKQEAgLTIzMiw2ICsyNjUsMTAgQEAgdm9pZCBkcmF3
UmVwYWludEluZGljYXRvcihDR0NvbnRleHRSZWYgY29udGV4dCwgUGxhdGZvcm1DQUxheWVyKiBw
bGF0Zm9ybUNBTGF5ZXIKIAogLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29u
dGV4dAogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisg
ICAgICAgIFdlYlRocmVhZExvY2soKTsKKyNlbmRpZgogICAgIFBsYXRmb3JtQ0FMYXllciogbGF5
ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihzZWxmKTsKICAgICBpZiAobGF5
ZXIgJiYgbGF5ZXItPm93bmVyKCkpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNz
Q29udGV4dChjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9XZWJUaWxlZExheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIubW0KaW5kZXggM2NhYzVlN2MzMzEyOGRhMWRmZWNmOTNk
NjAzOGMxMWUxOTlkMjViMy4uYzg2YWZhNjg4NGJlY2QyZjM2ODQ3ZjNiZDIwZDc4ZDA5NGNhMjFl
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRp
bGVkTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YlRpbGVkTGF5ZXIubW0KQEAgLTMzLDYgKzMzLDExIEBACiAjaW1wb3J0ICJHcmFwaGljc0xheWVy
Q0EuaCIKICNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllci5oIgogCisjaWYgUExBVEZPUk0oSU9TKQor
I2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgorI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgor
I2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBAaW1wbGVtZW50YXRpb24gV2Vi
VGlsZWRMYXllcgpAQCAtNDYsNyArNTEsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAv
LyBNYWtlIHN1cmUgdGhhdCB0aWxlcyBhcmUgZHJhd24gb24gdGhlIG1haW4gdGhyZWFkCiArIChC
T09MKXNob3VsZERyYXdPbk1haW5UaHJlYWQKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8g
RklYTUU6IFdlYktpdDIgYWx3YXlzIHdhbnRzIHRvIGRyYXcgb24gdGhlIG1haW4gdGhyZWFkLCBi
dXQgdGhlcmUgaXMKKyAgICAvLyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gY2hlY2sgZm9yIFdl
YktpdDIgdGhhbiB1c2luZyB0aGUgZXhpc3RhbmNlIG9mCisgICAgLy8gdGhlIHdlYiB0aHJlYWQg
YXMgYSBwcm94eS4KKyAgICByZXR1cm4gIVdlYlRocmVhZElzRW5hYmxlZCgpOworI2Vsc2UKICAg
ICByZXR1cm4gWUVTOworI2VuZGlmCiB9CiAKICsgKHVuc2lnbmVkIGludClwcmVmZXRjaGVkVGls
ZXMKQEAgLTk4LDYgKzExMCwxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIC0gKHZvaWQp
ZGlzcGxheQogewogICAgIFtzdXBlciBkaXNwbGF5XTsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
Ly8gQ0FUaWxlZExheWVyIG5ldmVyIGNhbGxzIGRpc3BsYXkgb24gYSBiYWNrZ3JvdW5kIHRocmVh
ZCwgc28gaXQncyBzYWZlCisgICAgLy8gdG8gYXNzdW1lIHdlJ3JlIGVpdGhlciBvbiB0aGUgbWFp
biB0aHJlYWQgb3Igb24gdGhlIHdlYiB0aHJlYWQuCisgICAgaWYgKHB0aHJlYWRfbWFpbl9ucCgp
KQorICAgICAgICBXZWJUaHJlYWRMb2NrKCk7CisgICAgQVNTRVJUKFdlYlRocmVhZElzTG9ja2Vk
T3JEaXNhYmxlZCgpKTsKKyNlbmRpZgogICAgIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIgPSBQbGF0
Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihzZWxmKTsKICAgICBpZiAobGF5ZXIgJiYgbGF5
ZXItPm93bmVyKCkpCiAgICAgICAgIGxheWVyLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJMYXll
ckRpZERpc3BsYXkoc2VsZik7CkBAIC0xMDUsOSArMTI0LDIwIEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiAtICh2b2lkKWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0CiB7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgKF5kcmF3KSgpID0gXnsKKyNlbmRpZgogICAg
IFBsYXRmb3JtQ0FMYXllciogbGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXll
cihzZWxmKTsKICAgICBpZiAobGF5ZXIpCiAgICAgICAgIGRyYXdMYXllckNvbnRlbnRzKGNvbnRl
eHQsIGxheWVyKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgfTsKKyAgICBpZiAocHRocmVhZF9t
YWluX25wKCkpIHsKKyAgICAgICAgV2ViVGhyZWFkTG9jaygpOworICAgICAgICBkcmF3KCk7Cisg
ICAgfSBlbHNlCisgICAgICAgIFdlYlRocmVhZFJ1blN5bmMoZHJhdyk7CisjZW5kaWYKIH0KIAog
QGVuZCAvLyBpbXBsZW1lbnRhdGlvbiBXZWJUaWxlZExheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0wuY3BwCmluZGV4IGZhMjc5MGQzYWY5NTBjZmY0ZGNiNTZjNWZjZDNiNDg2NmMyYzNjNjUuLjI4
OWMzZTI5YzgwMjJlOGRlZmRmNTRmY2I4MzI1ZDFkYjgyOTc2NDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0wuY3BwCkBAIC0zMiwxMyArMzIsMjAgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNp
ZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiQU5HTEUvU2hhZGVyTGFuZy5oIgorI2luY2x1ZGUg
PE9wZW5HTEVTL0VTMi9nbGV4dC5oPgorI2VsaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIkFO
R0xFL1NoYWRlckxhbmcuaCIKICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KICNlbGlmIFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKE5JWCkK
ICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJT1MuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIEV4dGVuc2lvbnMzRE9wZW5HTDo6RXh0ZW5zaW9uczNET3BlbkdMKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQpAQCAtNTMsNyArNjAsMjEgQEAgRXh0ZW5zaW9uczNET3BlbkdM
Ojp+RXh0ZW5zaW9uczNET3BlbkdMKCkKIAogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmJsaXRG
cmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kx
LCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25l
ZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKQogeworI2lmIFBMQVRGT1JNKElPUykK
KyAgICBVTlVTRURfUEFSQU0oc3JjWDApOworICAgIFVOVVNFRF9QQVJBTShzcmNZMCk7CisgICAg
VU5VU0VEX1BBUkFNKHNyY1gxKTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWTEpOworICAgIFVOVVNF
RF9QQVJBTShkc3RYMCk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFkwKTsKKyAgICBVTlVTRURfUEFS
QU0oZHN0WDEpOworICAgIFVOVVNFRF9QQVJBTShkc3RZMSk7CisgICAgVU5VU0VEX1BBUkFNKG1h
c2spOworICAgIFVOVVNFRF9QQVJBTShmaWx0ZXIpOworICAgIDo6Z2xSZXNvbHZlTXVsdGlzYW1w
bGVGcmFtZWJ1ZmZlckFQUExFKCk7CisjZWxzZQogICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQo
c3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBt
YXNrLCBmaWx0ZXIpOworI2VuZGlmCiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9u
ZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCkBAIC0xMDUsNiArMTI2LDEwIEBAIEdDM0Ri
b29sZWFuIEV4dGVuc2lvbnMzRE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2Jq
ZWN0IGFycmF5KQogCiB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6YmluZFZlcnRleEFycmF5T0VT
KFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFVOVVNF
RF9QQVJBTShhcnJheSk7CisjZW5kaWYKKwogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAjaWYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShX
SU4pIHx8IFBMQVRGT1JNKE5JWCkpCiAgICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0
ZWQoKSkKQEAgLTE4NiwxMyArMjExLDE5IEBAIGJvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjpzdXBw
b3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICNlbmRpZgogICAgIH0KKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAobmFtZSA9PSAiR0xf
RVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0
ZW5zaW9ucy5jb250YWlucygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisjZW5kaWYK
KwogICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7CiB9CiAK
IHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWkgbiwgY29u
c3QgR0MzRGVudW0qIGJ1ZnMpCiB7CiAgICAgLy8gIEZJWE1FOiBpbXBsZW1lbnQgc3VwcG9ydCBm
b3Igb3RoZXIgcGxhdGZvcm1zLgotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMp
ICYmICFQTEFURk9STShJT1MpCiAgICAgOjpnbERyYXdCdWZmZXJzQVJCKG4sIGJ1ZnMpOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0obik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21t
b24uY3BwCmluZGV4IGZlODRiMzlhZTMxOTVkMGFlNDM2OGM3ZGMzOWIzNDVmOGM2YWI4ODguLjAw
NjAyZTM0ZWYyMDM1NGZhOGZkNTRiNDM0ZTNlZjJiMzE0ZmU1MWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21t
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xDb21tb24uY3BwCkBAIC0zNiw2ICszNiw5IEBACiAjaW5jbHVkZSA8Qmxh
Y2tCZXJyeVBsYXRmb3JtTG9nLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNs
dWRlIDxPcGVuR0xFUy9FUzIvZ2xleHQuaD4KKyNlbHNlCiAjaWYgVVNFKE9QRU5HTF9FU18yKQog
I2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KQEAgLTQ1
LDYgKzQ4LDcgQEAKICNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFU
Rk9STShXSU4pIHx8IFBMQVRGT1JNKE5JWCkKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2Vu
ZGlmCisjZW5kaWYKIAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgpAQCAtNzEsNyArNzUsNyBAQCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OkV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICBp
ZiAodmVuZG9yQ29tcG9uZW50cy5jb250YWlucygiaW50ZWwiKSkKICAgICAgICAgbV9pc0ludGVs
ID0gdHJ1ZTsKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFU
Rk9STShJT1MpCiAgICAgaWYgKG1faXNBTUQgfHwgbV9pc0ludGVsKQogICAgICAgICBtX3JlcXVp
cmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uID0gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTC5jcHAKaW5kZXggZDA0ODViZjE4NjI1NWI4NTk1ODdlZmJmYjY1NGE2MTgw
NjdiYzY0NS4uNzljNmZkODM4OGQyOWZkNGU5MjBkMTM0ZGQ5MmExNGY3MDM5ZDk4NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCkBAIC0yOSw2ICsyOSw5IEBACiAjaWYg
VVNFKDNEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpZiBQ
TEFURk9STShJT1MpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJT1MuaCIKKyNlbmRpZgog
CiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpA
QCAtNDEsNyArNDQsMTIgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJ
T1MpCisjaW1wb3J0IDxPcGVuR0xFUy9FUzIvZ2xleHQuaD4KKy8vIEZyb20gPE9wZW5HTEVTL2ds
ZXh0Lmg+CisjZGVmaW5lIEdMX1JHQkEzMkZfQVJCICAgICAgICAgICAgICAgICAgICAgIDB4ODgx
NAorI2RlZmluZSBHTF9SR0IzMkZfQVJCICAgICAgICAgICAgICAgICAgICAgICAweDg4MTUKKyNl
bGlmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KICNlbGlmIFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKE5JWCkK
ICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgpAQCAtODYsNyArOTQsMTEgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgaWYg
KGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKSkKICAg
ICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lM
OF9FWFQ7CiAgICAgICAgIGVsc2UKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICBpbnRl
cm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OworI2Vsc2UKICAg
ICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5U
OworI2VuZGlmCiAgICAgfQogCiAgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwpAQCAt
MTI3LDYgKzEzOSwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25z
dCBJbnRTaXplJiBzaXplKQogICAgIH0KIAogICAgIEFTU0VSVChtX3RleHR1cmUpOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1f
dGV4dHVyZSk7CisgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfUkVOREVSQlVGRkVSLCBtX3RleHR1cmUpOworICAg
IHNldFJlbmRlcmJ1ZmZlclN0b3JhZ2VGcm9tRHJhd2FibGUobV9jdXJyZW50V2lkdGgsIG1fY3Vy
cmVudEhlaWdodCk7CisjZWxzZQogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBt
X3RleHR1cmUpOwogICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJu
YWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVE
X0JZVEUsIDApOwogICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJl
LCAwKTsKQEAgLTEzNiw2ICsxNTMsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBl
RkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9y
Rm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIDApOwogICAgIH0KKyNlbmRpZgogCiAgICAgaWYgKCFtX2F0dHJzLmFudGlh
bGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKSB7CiAgICAgICAgIDo6
Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2ls
QnVmZmVyKTsKQEAgLTE2NywxNyArMTg1LDIyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
c29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVjdCkKIAogICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlz
YW1wbGVGQk8pOwogICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZF
Ul9FWFQsIG1fZmJvKTsKLQorI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0ocmVj
dCk7CisgICAgOjpnbFJlc29sdmVNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQVBQTEUoKTsKKyNlbHNl
CiAgICAgSW50UmVjdCByZXNvbHZlUmVjdCA9IHJlY3Q7CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgp
KQogICAgICAgICByZXNvbHZlUmVjdCA9IEludFJlY3QoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1f
Y3VycmVudEhlaWdodCk7CiAKICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHJlc29sdmVSZWN0
LngoKSwgcmVzb2x2ZVJlY3QueSgpLCByZXNvbHZlUmVjdC5tYXhYKCksIHJlc29sdmVSZWN0Lm1h
eFkoKSwgcmVzb2x2ZVJlY3QueCgpLCByZXNvbHZlUmVjdC55KCksIHJlc29sdmVSZWN0Lm1heFgo
KSwgcmVzb2x2ZVJlY3QubWF4WSgpLCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwor
I2VuZGlmCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworI2lmICFQ
TEFURk9STShJT1MpCiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewogICAgIGNhc2UgREVQ
VEhfU1RFTkNJTDoKICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4
X0VYVDsKQEAgLTE5Myw2ICsyMTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJi
dWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmbwogICAgICAg
ICBpbnRlcm5hbGZvcm1hdCA9IEdMX1JHQjsKICAgICAgICAgYnJlYWs7CiAgICAgfQorI2VuZGlm
CiAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CiB9CiAKQEAgLTIwNCw2ICsyMjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCiAgICAg
Ly8gVGhlcmVmb3JlLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZGVza3RvcCBHTCBuZWVkcyB0byBi
ZSBkaXZpZGVkIGJ5IDQuCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgc3dpdGNoIChw
bmFtZSkgeworI2lmICFQTEFURk9STShJT1MpCiAgICAgY2FzZSBNQVhfRlJBR01FTlRfVU5JRk9S
TV9WRUNUT1JTOgogICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fQ09NUE9ORU5UUywgdmFsdWUpOwogICAgICAgICAqdmFsdWUgLz0gNDsKQEAgLTIxNiw2ICsy
NDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCogdmFsdWUpCiAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlO
R19GTE9BVFMsIHZhbHVlKTsKICAgICAgICAgKnZhbHVlIC89IDQ7CiAgICAgICAgIGJyZWFrOwor
I2VuZGlmCiAgICAgZGVmYXVsdDoKICAgICAgICAgOjpnbEdldEludGVnZXJ2KHBuYW1lLCB2YWx1
ZSk7CiAgICAgfQpAQCAtMjY2LDYgKzI5Miw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAg
ICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9SR0IpCiAgICAgICAgICAgICBvcGVuR0xJbnRl
cm5hbEZvcm1hdCA9IEdMX1JHQjMyRl9BUkI7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IEhBTEZf
RkxPQVRfT0VTKSB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgaWYgKGZvcm1hdCA9PSBH
TF9SR0JBKQogICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0JBMTZGX0FS
QjsKICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX1JHQikKQEAgLTI3Nyw2ICszMDQsNyBA
QCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xf
TFVNSU5BTkNFX0FMUEhBKQogICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9M
VU1JTkFOQ0VfQUxQSEExNkZfQVJCOwogICAgICAgICB0eXBlID0gR0xfSEFMRl9GTE9BVF9BUkI7
CisjZW5kaWYKICAgICB9CiAgICAgdGV4SW1hZ2UyRERpcmVjdCh0YXJnZXQsIGxldmVsLCBvcGVu
R0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBp
eGVscyk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yODUsMTMgKzMxMywyMSBAQCBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShHQzNEY2xh
bXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIDo6Z2xEZXB0aFJhbmdlZihzdGF0aWNfY2FzdDxmbG9h
dD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4oekZhcikpOworI2Vsc2UKICAgICA6OmdsRGVw
dGhSYW5nZSh6TmVhciwgekZhcik7CisjZW5kaWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICA6OmdsQ2xlYXJEZXB0aGYoc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGRlcHRoKSk7CisjZWxzZQogICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKKyNlbmRp
ZgogfQogCiBFeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IDc2
ODc0NzMyZTk3MGExZDIxMWI3ZGEzNGU5ZGEyYTY1Nzg3ZGVlYjcuLmY1NDFlMGUzMzc0NDc4NzZh
NWViNWJjMmI4N2JhMzYwM2VhZjZmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtMzEsNiArMzEsOSBAQAogI2lmIFVTRSgzRF9HUkFQSElD
UykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaWYgUExBVEZPUk0oSU9TKQor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNESU9TLmgiCisjZW5kaWYKIAogI2lmIFVTRShPUEVO
R0xfRVNfMikKICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgpAQCAtNTQsNiArNTcs
MTIgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPE9wZW5HTEVTL0VTMi9nbGV4
dC5oPgorLy8gRnJvbSA8T3BlbkdMRVMvZ2xleHQuaD4KKyNkZWZpbmUgR0xfUkdCQTMyRl9BUkIg
ICAgICAgICAgICAgICAgICAgICAgMHg4ODE0CisjZGVmaW5lIEdMX1JHQjMyRl9BUkIgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODgxNQorI2Vsc2UKICNpZiBVU0UoT1BFTkdMX0VTXzIpCiAjaW5j
bHVkZSAiT3BlbkdMRVNTaGltcy5oIgogI2VsaWYgUExBVEZPUk0oTUFDKQpAQCAtNjEsNiArNzAs
NyBAQAogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFdJ
TikgfHwgUExBVEZPUk0oTklYKQogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjZW5kaWYKKyNl
bmRpZgogCiAjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1Mb2cuaD4KQEAgLTE2MSw2ICsxNzEsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyLAog
ICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0LAogICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLndp
ZHRoKCksIGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKS5oZWlnaHQoKSwgaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgZW5kUGFpbnQoKTsKKyNlbmRpZgogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1h
dGlvbk1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAppbmRleCBiZjUwNzQ1MTI3NzNiZjdjMTdlMTVm
MmE4M2EzN2M5MGFjZjZjMGZiLi5kYWQyMzU5OWJlMmM1ODAxMjQ4YTcwYTUxYmQyNDZjNThlOWNh
YWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcApAQCAtMTAzNSw3
ICsxMDM1LDcxIEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpy
ZWN0VG9SZWN0KGNvbnN0IEZsb2F0UmVjdCYgZnJvbSwgY29uCiAvLyB0aGlzID0gbWF0ICogdGhp
cy4KIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bXVsdGlwbHko
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdCkKIHsKLSNpZiBDUFUoQVBQTEVfQVJNVjdT
KQorI2lmIENQVShBUk02NCkKKyAgICBkb3VibGUqIGxlZnRNYXRyaXggPSAmKG1fbWF0cml4WzBd
WzBdKTsKKyAgICBjb25zdCBkb3VibGUqIHJpZ2h0TWF0cml4ID0gJihtYXQubV9tYXRyaXhbMF1b
MF0pOworICAgIGFzbSB2b2xhdGlsZSAoCisgICAgICAgIC8vIEZpcnN0LCBsb2FkIHRoZSBsZWZ0
TWF0cml4IGNvbXBsZXRlbHkgaW4gbWVtb3J5LiBUaGUgbGVmdE1hdHJpeCBpcyBpbiB2MTYtdjIz
LgorICAgICAgICAibW92ICAgICAgeDQsICVbbGVmdE1hdHJpeF1cblx0IgorICAgICAgICAibGQx
LjJkICAge3YxNiwgdjE3LCB2MTgsIHYxOX0sIFslW2xlZnRNYXRyaXhdXSwgIzY0XG5cdCIKKyAg
ICAgICAgImxkMS4yZCAgIHt2MjAsIHYyMSwgdjIyLCB2MjN9LCBbJVtsZWZ0TWF0cml4XV1cblx0
IgorCisgICAgICAgIC8vIEZpcnN0IHJvdy4KKyAgICAgICAgImxkNHIuMmQgIHt2MjQsIHYyNSwg
djI2LCB2Mjd9LCBbJVtyaWdodE1hdHJpeF1dLCAjMzJcblx0IgorICAgICAgICAiZm11bC4yZCAg
djI4LCB2MjQsIHYxNlxuXHQiCisgICAgICAgICJmbXVsLjJkICB2MjksIHYyNCwgdjE3XG5cdCIK
KyAgICAgICAgImZtbGEuMmQgIHYyOCwgdjI1LCB2MThcblx0IgorICAgICAgICAiZm1sYS4yZCAg
djI5LCB2MjUsIHYxOVxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MjgsIHYyNiwgdjIwXG5cdCIK
KyAgICAgICAgImZtbGEuMmQgIHYyOSwgdjI2LCB2MjFcblx0IgorICAgICAgICAiZm1sYS4yZCAg
djI4LCB2MjcsIHYyMlxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MjksIHYyNywgdjIzXG5cdCIK
KworICAgICAgICAibGQ0ci4yZCAge3YwLCB2MSwgdjIsIHYzfSwgWyVbcmlnaHRNYXRyaXhdXSwg
IzMyXG5cdCIKKyAgICAgICAgInN0MS4yZCAge3YyOCwgdjI5fSwgW3g0XSwgIzMyXG5cdCIKKwor
ICAgICAgICAvLyBTZWNvbmQgcm93LgorICAgICAgICAiZm11bC4yZCAgdjMwLCB2MCwgdjE2XG5c
dCIKKyAgICAgICAgImZtdWwuMmQgIHYzMSwgdjAsIHYxN1xuXHQiCisgICAgICAgICJmbWxhLjJk
ICB2MzAsIHYxLCB2MThcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjMxLCB2MSwgdjE5XG5cdCIK
KyAgICAgICAgImZtbGEuMmQgIHYzMCwgdjIsIHYyMFxuXHQiCisgICAgICAgICJmbWxhLjJkICB2
MzEsIHYyLCB2MjFcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjMwLCB2MywgdjIyXG5cdCIKKyAg
ICAgICAgImZtbGEuMmQgIHYzMSwgdjMsIHYyM1xuXHQiCisKKyAgICAgICAgImxkNHIuMmQgIHt2
MjQsIHYyNSwgdjI2LCB2Mjd9LCBbJVtyaWdodE1hdHJpeF1dLCAjMzJcblx0IgorICAgICAgICAi
c3QxLjJkICAge3YzMCwgdjMxfSwgW3g0XSwgIzMyXG5cdCIKKworICAgICAgICAvLyBUaGlyZCBy
b3cuCisgICAgICAgICJmbXVsLjJkICB2MjgsIHYyNCwgdjE2XG5cdCIKKyAgICAgICAgImZtdWwu
MmQgIHYyOSwgdjI0LCB2MTdcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjI4LCB2MjUsIHYxOFxu
XHQiCisgICAgICAgICJmbWxhLjJkICB2MjksIHYyNSwgdjE5XG5cdCIKKyAgICAgICAgImZtbGEu
MmQgIHYyOCwgdjI2LCB2MjBcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjI5LCB2MjYsIHYyMVxu
XHQiCisgICAgICAgICJmbWxhLjJkICB2MjgsIHYyNywgdjIyXG5cdCIKKyAgICAgICAgImZtbGEu
MmQgIHYyOSwgdjI3LCB2MjNcblx0IgorCisgICAgICAgICJsZDRyLjJkICB7djAsIHYxLCB2Miwg
djN9LCBbJVtyaWdodE1hdHJpeF1dLCAjMzJcblx0IgorICAgICAgICAic3QxLjJkICAge3YyOCwg
djI5fSwgW3g0XSwgIzMyXG5cdCIKKworICAgICAgICAvLyBGb3VydGggcm93LgorICAgICAgICAi
Zm11bC4yZCAgdjMwLCB2MCwgdjE2XG5cdCIKKyAgICAgICAgImZtdWwuMmQgIHYzMSwgdjAsIHYx
N1xuXHQiCisgICAgICAgICJmbWxhLjJkICB2MzAsIHYxLCB2MThcblx0IgorICAgICAgICAiZm1s
YS4yZCAgdjMxLCB2MSwgdjE5XG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYzMCwgdjIsIHYyMFxu
XHQiCisgICAgICAgICJmbWxhLjJkICB2MzEsIHYyLCB2MjFcblx0IgorICAgICAgICAiZm1sYS4y
ZCAgdjMwLCB2MywgdjIyXG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYzMSwgdjMsIHYyM1xuXHQi
CisKKyAgICAgICAgInN0MS4yZCAge3YzMCwgdjMxfSwgW3g0XVxuXHQiCisKKyAgICAgICAgOiBb
bGVmdE1hdHJpeF0iK3IiKGxlZnRNYXRyaXgpLCBbcmlnaHRNYXRyaXhdIityIihyaWdodE1hdHJp
eCkKKyAgICAgICAgOgorICAgICAgICA6ICJtZW1vcnkiLCAieDQiLCAidjAiLCAidjEiLCAidjIi
LCAidjMiLCAidjE2IiwgInYxNyIsICJ2MTgiLCAidjE5IiwgInYyMCIsICJ2MjEiLCAidjIyIiwg
InYyMyIsICJ2MjQiLCAidjI1IiwgInYyNiIsICJ2MjciLCAidjI4IiwgInYyOSIsICJ2MzAiLCAi
djMxIik7CisjZWxpZiBDUFUoQVBQTEVfQVJNVjdTKQogICAgIGRvdWJsZSogbGVmdE1hdHJpeCA9
ICYobV9tYXRyaXhbMF1bMF0pOwogICAgIGNvbnN0IGRvdWJsZSogcmlnaHRNYXRyaXggPSAmKG1h
dC5tX21hdHJpeFswXVswXSk7CiAgICAgYXNtIHZvbGF0aWxlICgvLyBGaXJzdCByb3cgb2YgbGVm
dE1hdHJpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
V2luLmNwcAppbmRleCA5MjA5M2QwOTE3YjM0OWU2MjFhZGYyYmU0YjA4MTQwODE2NmM4MDdjLi41
NTQ4ZGUwMzM3Yzg0MmI2Yjc0ZDQ1Nzk2NmU5ZmNmYmM0ZDg4NTg4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCkBAIC05NCw4ICs5NCw3
IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50CiAgICAgcmV0dXJuIGJlZm9yZVdpZHRoOwogfQog
Ci12b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd0Nv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICAv
LyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRh
dGEgZm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC0xMDQs
MTEgKzEwMywxMiBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRgogCiAgICAgLy8gV2UgY291bGRu
J3QgZ2VuZXJhdGUgYW55IGdseXBocyBmb3IgdGhlIHJ1bi4gIEdpdmUgdXAuCiAgICAgaWYgKGds
eXBoQnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gMDsK
IAogICAgIC8vIERyYXcgdGhlIGdseXBoIGJ1ZmZlciBub3cgYXQgdGhlIHN0YXJ0aW5nIHBvaW50
IHJldHVybmVkIGluIHN0YXJ0WC4KICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoc3RhcnRYLCBw
b2ludC55KCkpOwogICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVy
LCBzdGFydFBvaW50KTsKKyAgICByZXR1cm4gc3RhcnRQb2ludC54KCkgLSBzdGFydFg7CiB9CiAK
IHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2luQ0UuY3Bw
CmluZGV4IGVjMTU0ZThkNDkyNTlkZjNjMmRkN2M1ZGQzMTZmNDA3MmUxNmNjMTUuLmRmNTg5NzMy
MmQ4ZTUwZGYzOTc5MjMwYjgyZWNiMGMyOTA0NzE4NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcApAQCAtMjA3LDggKzIw
Nyw3IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVDb21wb25lbnRzKFRleHRSdW5Db21wb25lbnRzKiBj
b21wb25lbnRzLCBjb25zdCBGb250ICZmb250LCBjCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAot
dm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZvbnQ6OmRyYXdDb21w
bGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgaWYg
KHRvIDwgMCkKICAgICAgICAgdG8gPSBydW4ubGVuZ3RoKCk7CkBAIC0yMTgsNiArMjE3LDcgQEAg
dm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEYKICAgICBUZXh0UnVuQ29tcG9uZW50cyBjb21wb25lbnRz
OwogICAgIGludCB3ID0gZ2VuZXJhdGVDb21wb25lbnRzKCZjb21wb25lbnRzLCAqdGhpcywgcnVu
KTsKIAorICAgIGZsb2F0IHdpZHRoT2ZEcmF3blRleHQgPSAwOwogICAgIGludCBjdXJQb3MgPSAw
OwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGludCljb21wb25lbnRzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIGNvbnN0IFRleHRSdW5Db21wb25lbnQmIGNvbXAgPSBjb21wb25lbnRzLmF0KGkp
OwpAQCAtMjI5LDEyICsyMjksMTMgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEYKICAgICAgICAg
ICAgICAgICBwdC5zZXRYKHBvaW50LngoKSArIHcgLSBjb21wLm1fb2Zmc2V0IC0gY29tcC5tX3dp
ZHRoKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwdC5zZXRYKHBvaW50Lngo
KSArIGNvbXAubV9vZmZzZXQpOwotICAgICAgICAgICAgZHJhd1NpbXBsZVRleHQoY29udGV4dCwg
Y29tcC5tX3RleHRSdW4sIHB0LCBmcm9tIC0gY3VyUG9zLCBzdGQ6Om1pbih0bywgY3VyRW5kKSAt
IGN1clBvcyk7CisgICAgICAgICAgICB3aWR0aE9mRHJhd25UZXh0ICs9IGRyYXdTaW1wbGVUZXh0
KGNvbnRleHQsIGNvbXAubV90ZXh0UnVuLCBwdCwgZnJvbSAtIGN1clBvcywgc3RkOjptaW4odG8s
IGN1ckVuZCkgLSBjdXJQb3MpOwogICAgICAgICB9CiAgICAgICAgIGN1clBvcyArPSBsZW47CiAg
ICAgICAgIGlmIChmcm9tIDwgY3VyUG9zKQogICAgICAgICAgICAgZnJvbSA9IGN1clBvczsKICAg
ICB9CisgICAgcmV0dXJuIHdpZHRoT2ZEcmF3blRleHQ7CiB9CiAKIHZvaWQgRm9udDo6ZHJhd0Vt
cGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8s
IGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICov
LCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0
byAqLykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db250
ZW50RmlsdGVySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbnRlbnRGaWx0
ZXJJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDhjMjViMDBkZTNmZjMwYWVlZDIwZGRiZTE2ODJhMzk1MmJk
YzYzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db250
ZW50RmlsdGVySU9TLm1tCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIkNvbnRlbnRGaWx0ZXIuaCIKKworI2lmIFBMQVRGT1JNKElPUykg
JiYgVVNFKENPTlRFTlRfRklMVEVSSU5HKQorCisjaW1wb3J0ICJXZWJDb3JlVGhyZWFkUnVuLmgi
CisKKyNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpICYmIF9faGFzX2luY2x1ZGUoPFdlYkNvbnRl
bnRBbmFseXNpcy9XZWJGaWx0ZXJFdmFsdWF0b3IuaD4pCisjaW1wb3J0IDxXZWJDb250ZW50QW5h
bHlzaXMvV2ViRmlsdGVyRXZhbHVhdG9yLmg+CisjZWxzZQorQGludGVyZmFjZSBOU09iamVjdCAo
V2ViRmlsdGVyRXZhbHVhdG9yRGV0YWlscykKKy0gKHZvaWQpdW5ibG9ja1dpdGhDb21wbGV0aW9u
Oih2b2lkICheKShCT09MIHVuYmxvY2tlZCwgTlNFcnJvciAqZXJyb3IpKWNvbXBsZXRpb247CitA
ZW5kCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBjaGFyKiBDb250ZW50
RmlsdGVyOjpzY2hlbWUoKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIGNvbnRlbnRGaWx0ZXJT
Y2hlbWVbXSA9ICJ4LWFwcGxlLWNvbnRlbnQtZmlsdGVyIjsKKyAgICByZXR1cm4gY29udGVudEZp
bHRlclNjaGVtZTsKK30KKyAgICAKK3ZvaWQgQ29udGVudEZpbHRlcjo6cmVxdWVzdFVuYmxvY2tB
bmREaXNwYXRjaElmU3VjY2Vzc2Z1bChGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uKQoreworICAg
IFttX3BsYXRmb3JtQ29udGVudEZpbHRlciB1bmJsb2NrV2l0aENvbXBsZXRpb246XihCT09MIHVu
YmxvY2tlZCwgTlNFcnJvciAqKSB7CisgICAgICAgIGlmICh1bmJsb2NrZWQpIHsKKyAgICAgICAg
ICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfQorICAgIH1dOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpICYmIFVTRShDT05URU5UX0ZJTFRFUklORykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EZXZpY2VNb3Rpb25DbGllbnRJ
T1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EZXZpY2VNb3Rpb25DbGllbnRJT1Mu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41ODU5OTFmMjAwNTI4ZTVhY2E5ZWU1ZTIwNjI3ZGM5MDk4ZjhhMTg1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZU1vdGlv
bkNsaWVudElPUy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGV2aWNlTW90
aW9uQ2xpZW50SU9TX2gKKyNkZWZpbmUgRGV2aWNlTW90aW9uQ2xpZW50SU9TX2gKKworI2luY2x1
ZGUgIkRldmljZU1vdGlvbkNsaWVudC5oIgorI2luY2x1ZGUgIkRldmljZU1vdGlvbkNvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJEZXZpY2VNb3Rpb25EYXRhLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZmRlZiBfX09CSkNfXworQGNs
YXNzIFdlYkNvcmVNb3Rpb25NYW5hZ2VyOworI2Vsc2UKK2NsYXNzIFdlYkNvcmVNb3Rpb25NYW5h
Z2VyOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGV2aWNlTW90aW9u
Q2xpZW50SU9TIDogcHVibGljIERldmljZU1vdGlvbkNsaWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8RGV2aWNlTW90aW9uQ2xpZW50SU9TPiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZXZpY2VNb3Rpb25DbGllbnRJT1MoKSk7CisgICAg
fQorICAgIERldmljZU1vdGlvbkNsaWVudElPUygpOworICAgIHZpcnR1YWwgfkRldmljZU1vdGlv
bkNsaWVudElPUygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250cm9sbGVyKERl
dmljZU1vdGlvbkNvbnRyb2xsZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRV
cGRhdGluZygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIERldmljZU1vdGlvbkRhdGEqIGxhc3RNb3Rpb24oKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlTW90aW9uQ29udHJvbGxlckRlc3Ryb3ll
ZCgpIE9WRVJSSURFOworCisgICAgdm9pZCBtb3Rpb25DaGFuZ2VkKGRvdWJsZSwgZG91YmxlLCBk
b3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOwor
Citwcml2YXRlOgorICAgIFdlYkNvcmVNb3Rpb25NYW5hZ2VyKiBtX21vdGlvbk1hbmFnZXI7Cisg
ICAgRGV2aWNlTW90aW9uQ29udHJvbGxlciogbV9jb250cm9sbGVyOworICAgIFJlZlB0cjxEZXZp
Y2VNb3Rpb25EYXRhPiBtX2N1cnJlbnREZXZpY2VNb3Rpb25EYXRhOworICAgIGJvb2wgbV91cGRh
dGluZzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERldmljZU1v
dGlvbkNsaWVudElPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
RGV2aWNlTW90aW9uQ2xpZW50SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0Rl
dmljZU1vdGlvbkNsaWVudElPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MmNlOTFhYjNkNjRkOTExMjg4MzFi
NTJkMTg3YzRmNjk3NWFjMjhjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL0RldmljZU1vdGlvbkNsaWVudElPUy5tbQpAQCAtMCwwICsxLDEyOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKworI2ltcG9ydCAiRGV2aWNlTW90aW9uQ2xpZW50SU9TLmgiCisKKyNpbXBvcnQgIldl
YkNvcmVNb3Rpb25NYW5hZ2VyLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworRGV2aWNlTW90aW9uQ2xpZW50SU9TOjpEZXZpY2VNb3Rpb25DbGllbnRJT1Mo
KQorICAgIDogRGV2aWNlTW90aW9uQ2xpZW50KCkKKyAgICAsIG1fbW90aW9uTWFuYWdlcihudWxs
cHRyKQorICAgICwgbV91cGRhdGluZygwKQoreworfQorCitEZXZpY2VNb3Rpb25DbGllbnRJT1M6
On5EZXZpY2VNb3Rpb25DbGllbnRJT1MoKQoreworfQorCit2b2lkIERldmljZU1vdGlvbkNsaWVu
dElPUzo6c2V0Q29udHJvbGxlcihEZXZpY2VNb3Rpb25Db250cm9sbGVyKiBjb250cm9sbGVyKQor
eworICAgIG1fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cit9CisKK3ZvaWQgRGV2aWNlTW90aW9u
Q2xpZW50SU9TOjpzdGFydFVwZGF0aW5nKCkKK3sKKyAgICBtX3VwZGF0aW5nID0gdHJ1ZTsKKwor
ICAgIGlmICghbV9tb3Rpb25NYW5hZ2VyKQorICAgICAgICBtX21vdGlvbk1hbmFnZXIgPSBbV2Vi
Q29yZU1vdGlvbk1hbmFnZXIgc2hhcmVkTWFuYWdlcl07CisKKyAgICBbbV9tb3Rpb25NYW5hZ2Vy
IGFkZE1vdGlvbkNsaWVudDp0aGlzXTsKK30KKwordm9pZCBEZXZpY2VNb3Rpb25DbGllbnRJT1M6
OnN0b3BVcGRhdGluZygpCit7CisgICAgbV91cGRhdGluZyA9IGZhbHNlOworCisgICAgLy8gUmVt
b3ZlIG91cnNlbHZlcyBhcyB0aGUgbW90aW9uIGNsaWVudCBzbyB3ZSB3b24ndCBnZXQgdXBkYXRl
cy4KKyAgICBbbV9tb3Rpb25NYW5hZ2VyIHJlbW92ZU1vdGlvbkNsaWVudDp0aGlzXTsKK30KKwor
RGV2aWNlTW90aW9uRGF0YSogRGV2aWNlTW90aW9uQ2xpZW50SU9TOjpsYXN0TW90aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9jdXJyZW50RGV2aWNlTW90aW9uRGF0YS5nZXQoKTsKK30KKwor
dm9pZCBEZXZpY2VNb3Rpb25DbGllbnRJT1M6OmRldmljZU1vdGlvbkNvbnRyb2xsZXJEZXN0cm95
ZWQoKQoreworICAgIFttX21vdGlvbk1hbmFnZXIgcmVtb3ZlTW90aW9uQ2xpZW50OnRoaXNdOwor
fQorCit2b2lkIERldmljZU1vdGlvbkNsaWVudElPUzo6bW90aW9uQ2hhbmdlZChkb3VibGUgeEFj
Y2VsZXJhdGlvbiwgZG91YmxlIHlBY2NlbGVyYXRpb24sIGRvdWJsZSB6QWNjZWxlcmF0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHhBY2Nl
bGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCBkb3VibGUgeUFjY2VsZXJhdGlvbkluY2x1ZGluZ0dy
YXZpdHksIGRvdWJsZSB6QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB4Um90YXRpb25SYXRlLCBk
b3VibGUgeVJvdGF0aW9uUmF0ZSwgZG91YmxlIHpSb3RhdGlvblJhdGUpCit7CisgICAgaWYgKCFt
X3VwZGF0aW5nKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1NfU0lNVUxBVE9S
KQorICAgIFVOVVNFRF9QQVJBTSh4QWNjZWxlcmF0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oeUFj
Y2VsZXJhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHpBY2NlbGVyYXRpb24pOworICAgIFVOVVNF
RF9QQVJBTSh4QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSk7CisgICAgVU5VU0VEX1BBUkFN
KHlBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5KTsKKyAgICBVTlVTRURfUEFSQU0oekFjY2Vs
ZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkpOworICAgIFVOVVNFRF9QQVJBTSh4Um90YXRpb25SYXRl
KTsKKyAgICBVTlVTRURfUEFSQU0oeVJvdGF0aW9uUmF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHpS
b3RhdGlvblJhdGUpOworCisgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlv
bj4gYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSA9IERldmljZU1vdGlvbkRhdGE6OkFjY2Vs
ZXJhdGlvbjo6Y3JlYXRlKGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIDApOworICAgIFJlZlB0
cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+IGFjY2VsZXJhdGlvbiA9IERldmljZU1v
dGlvbkRhdGE6OkFjY2VsZXJhdGlvbjo6Y3JlYXRlKGZhbHNlLCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZhbHNlLCAwKTsKKyAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0
YTo6Um90YXRpb25SYXRlPiByb3RhdGlvblJhdGUgPSBEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlv
blJhdGU6OmNyZWF0ZShmYWxzZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYWxzZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmYWxzZSwgMCk7CisjZWxzZQorICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVy
YXRpb24+IGFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkgPSBEZXZpY2VNb3Rpb25EYXRhOjpB
Y2NlbGVyYXRpb246OmNyZWF0ZSh0cnVlLCB4QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJ1ZSwgeUFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIHpBY2NlbGVyYXRpb25J
bmNsdWRpbmdHcmF2aXR5KTsKKyAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmF0
aW9uPiBhY2NlbGVyYXRpb24gPSAwOworICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpSb3Rh
dGlvblJhdGU+IHJvdGF0aW9uUmF0ZSA9IDA7CisgICAgaWYgKFttX21vdGlvbk1hbmFnZXIgZ3ly
b0F2YWlsYWJsZV0pIHsKKyAgICAgICAgYWNjZWxlcmF0aW9uID0gRGV2aWNlTW90aW9uRGF0YTo6
QWNjZWxlcmF0aW9uOjpjcmVhdGUodHJ1ZSwgeEFjY2VsZXJhdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgeUFj
Y2VsZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ1ZSwgekFjY2VsZXJhdGlvbik7CisgICAgICAgIHJvdGF0aW9u
UmF0ZSA9IERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uUmF0ZTo6Y3JlYXRlKHRydWUsIHhSb3Rh
dGlvblJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRydWUsIHlSb3RhdGlvblJhdGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIHpSb3RhdGlv
blJhdGUpOworICAgIH0KKyNlbmRpZiAvLyBQTEFURk9STShJT1NfU0lNVUxBVE9SKQorCisgICAg
bV9jdXJyZW50RGV2aWNlTW90aW9uRGF0YSA9IERldmljZU1vdGlvbkRhdGE6OmNyZWF0ZShhY2Nl
bGVyYXRpb24sIGFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIHJvdGF0aW9uUmF0ZSwgdHJ1
ZSwga01vdGlvblVwZGF0ZUludGVydmFsKTsKKyAgICBtX2NvbnRyb2xsZXItPmRpZENoYW5nZURl
dmljZU1vdGlvbihtX2N1cnJlbnREZXZpY2VNb3Rpb25EYXRhLmdldCgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1Mu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41YmU3ZjUxZTI4MzM4ODIyNzI5ZjM1OGQ5ZDBmNjMwZDYxYTFjMWZkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZU9yaWVu
dGF0aW9uQ2xpZW50SU9TLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZXZp
Y2VPcmllbnRhdGlvbkNsaWVudElPU19oCisjZGVmaW5lIERldmljZU9yaWVudGF0aW9uQ2xpZW50
SU9TX2gKKworI2luY2x1ZGUgIkRldmljZU9yaWVudGF0aW9uQ2xpZW50LmgiCisjaW5jbHVkZSAi
RGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiRGV2aWNlT3JpZW50YXRp
b25EYXRhLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKKyNpZmRlZiBfX09CSkNfXworQGNsYXNzIFdlYkNvcmVNb3Rpb25NYW5hZ2VyOwor
I2Vsc2UKK2NsYXNzIFdlYkNvcmVNb3Rpb25NYW5hZ2VyOworI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MgOiBwdWJsaWMgRGV2
aWNlT3JpZW50YXRpb25DbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPERl
dmljZU9yaWVudGF0aW9uQ2xpZW50SU9TPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUygpKTsKKyAgICB9CisgICAg
RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MoKTsKKyAgICB2aXJ0dWFsIH5EZXZpY2VPcmllbnRh
dGlvbkNsaWVudElPUygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250cm9sbGVy
KERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBzdGFydFVwZGF0aW5nKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGlu
ZygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgRGV2aWNlT3JpZW50YXRpb25EYXRhKiBsYXN0T3Jp
ZW50YXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JpZW50
YXRpb25Db250cm9sbGVyRGVzdHJveWVkKCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIG9yaWVudGF0
aW9uQ2hhbmdlZChkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CisKK3By
aXZhdGU6CisgICAgV2ViQ29yZU1vdGlvbk1hbmFnZXIqIG1fbW90aW9uTWFuYWdlcjsKKyAgICBE
ZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIqIG1fY29udHJvbGxlcjsKKyAgICBSZWZQdHI8RGV2
aWNlT3JpZW50YXRpb25EYXRhPiBtX2N1cnJlbnREZXZpY2VPcmllbnRhdGlvbjsKKyAgICBib29s
IG1fdXBkYXRpbmc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBE
ZXZpY2VPcmllbnRhdGlvbkNsaWVudElPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjE2YTU2NmMyODJhY2ExYWRhZDg0ZmFkZjQ3OWY1OGQwOTgxYzU4NwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElP
Uy5tbQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2ltcG9ydCAiRGV2aWNlT3JpZW50
YXRpb25DbGllbnRJT1MuaCIKKworI2ltcG9ydCAiV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCIKKwor
I2lmIFBMQVRGT1JNKElPUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEZXZpY2VPcmllbnRh
dGlvbkNsaWVudElPUzo6RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MoKQorICAgIDogRGV2aWNl
T3JpZW50YXRpb25DbGllbnQoKQorICAgICwgbV9tb3Rpb25NYW5hZ2VyKG51bGxwdHIpCisgICAg
LCBtX3VwZGF0aW5nKDApCit7Cit9CisKK0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjp+RGV2
aWNlT3JpZW50YXRpb25DbGllbnRJT1MoKQoreworfQorCit2b2lkIERldmljZU9yaWVudGF0aW9u
Q2xpZW50SU9TOjpzZXRDb250cm9sbGVyKERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciogY29u
dHJvbGxlcikKK3sKKyAgICBtX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworfQorCit2b2lkIERl
dmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpzdGFydFVwZGF0aW5nKCkKK3sKKyAgICBtX3VwZGF0
aW5nID0gdHJ1ZTsKKworICAgIGlmICghbV9tb3Rpb25NYW5hZ2VyKQorICAgICAgICBtX21vdGlv
bk1hbmFnZXIgPSBbV2ViQ29yZU1vdGlvbk1hbmFnZXIgc2hhcmVkTWFuYWdlcl07CisKKyAgICBb
bV9tb3Rpb25NYW5hZ2VyIGFkZE9yaWVudGF0aW9uQ2xpZW50OnRoaXNdOworfQorCit2b2lkIERl
dmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpzdG9wVXBkYXRpbmcoKQoreworICAgIG1fdXBkYXRp
bmcgPSBmYWxzZTsKKworICAgIC8vIFJlbW92ZSBvdXJzZWx2ZXMgYXMgdGhlIG9yaWVudGF0aW9u
IGNsaWVudCBzbyB3ZSB3b24ndCBnZXQgdXBkYXRlcy4KKyAgICBbbV9tb3Rpb25NYW5hZ2VyIHJl
bW92ZU9yaWVudGF0aW9uQ2xpZW50OnRoaXNdOworfQorCitEZXZpY2VPcmllbnRhdGlvbkRhdGEq
IERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpsYXN0T3JpZW50YXRpb24oKSBjb25zdAorewor
ICAgIHJldHVybiBtX2N1cnJlbnREZXZpY2VPcmllbnRhdGlvbi5nZXQoKTsKK30KKwordm9pZCBE
ZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUzo6ZGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyRGVz
dHJveWVkKCkKK3sKKyAgICBbbV9tb3Rpb25NYW5hZ2VyIHJlbW92ZU9yaWVudGF0aW9uQ2xpZW50
OnRoaXNdOworfQorICAgIAordm9pZCBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUzo6b3JpZW50
YXRpb25DaGFuZ2VkKGRvdWJsZSBhbHBoYSwgZG91YmxlIGJldGEsIGRvdWJsZSBnYW1tYSwgZG91
YmxlIGNvbXBhc3NIZWFkaW5nLCBkb3VibGUgY29tcGFzc0FjY3VyYWN5KQoreworICAgIGlmICgh
bV91cGRhdGluZykKKyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oSU9TX1NJTVVMQVRP
UikKKyAgICBVTlVTRURfUEFSQU0oYWxwaGEpOworICAgIFVOVVNFRF9QQVJBTShiZXRhKTsKKyAg
ICBVTlVTRURfUEFSQU0oZ2FtbWEpOworICAgIFVOVVNFRF9QQVJBTShjb21wYXNzSGVhZGluZyk7
CisgICAgVU5VU0VEX1BBUkFNKGNvbXBhc3NBY2N1cmFjeSk7CisgICAgbV9jdXJyZW50RGV2aWNl
T3JpZW50YXRpb24gPSBEZXZpY2VPcmllbnRhdGlvbkRhdGE6OmNyZWF0ZShmYWxzZSwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmFsc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIDApOworI2Vsc2UK
KyAgICBtX2N1cnJlbnREZXZpY2VPcmllbnRhdGlvbiA9IERldmljZU9yaWVudGF0aW9uRGF0YTo6
Y3JlYXRlKHRydWUsIGFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBiZXRhLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBnYW1tYSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1
ZSwgY29tcGFzc0hlYWRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGNvbXBhc3NBY2N1cmFjeSk7CisjZW5kaWYKKyAg
ICBtX2NvbnRyb2xsZXItPmRpZENoYW5nZURldmljZU9yaWVudGF0aW9uKG1fY3VycmVudERldmlj
ZU9yaWVudGF0aW9uLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL0tleUV2ZW50SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0tleUV2ZW50
SU9TLm1tCmluZGV4IDgyNGFiN2YxYmNiMDQ2MDBhOTQ2MGJmMGUzOTIwMTE2NWM0NWE1ZjQuLjM5
MWI2YWE5OTMwYjFiYTRkMjA1MDBkN2ZhNzc2ZDBkNTI3NmNlODMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9LZXlFdmVudElPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvS2V5RXZlbnRJT1MubW0KQEAgLTI4LDU5ICsyOCwxMiBAQAogCiAjaWYg
UExBVEZPUk0oSU9TKQogCi0jaW1wb3J0ICJLZXlFdmVudENvY29hLmgiCi0jaW1wb3J0ICJMb2dn
aW5nLmgiCiAjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgotI2ltcG9ydCAiV2ViRXZlbnQuaCIK
IAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
U3RyaW5nIGtleUlkZW50aWZpZXJGb3JLZXlFdmVudChXZWJFdmVudCAqZXZlbnQpCi17Ci0gICAg
TlNTdHJpbmcgKnMgPSBldmVudC5jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM7Ci0gICAgaWYg
KFtzIGxlbmd0aF0gIT0gMSkgewotICAgICAgICBMT0coRXZlbnRzLCAicmVjZWl2ZWQgYW4gdW5l
eHBlY3RlZCBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBrZXkgZXZlbnQ6ICV1IiwgW3MgbGVuZ3Ro
XSk7Ci0gICAgICAgIHJldHVybiAiVW5pZGVudGlmaWVkIjsKLSAgICB9Ci0KLSAgICB1bmljaGFy
IGMgPSBDRlN0cmluZ0dldENoYXJhY3RlckF0SW5kZXgoKENGU3RyaW5nUmVmKXMsIDApOwotICAg
IHJldHVybiBrZXlJZGVudGlmaWVyRm9yQ2hhckNvZGUoYyk7Ci19Ci0KLVBsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KFdlYkV2ZW50ICpldmVudCkKLSAgICA6IFBs
YXRmb3JtRXZlbnQoZXZlbnQudHlwZSA9PSBXZWJFdmVudEtleVVwID8gUGxhdGZvcm1FdmVudDo6
S2V5VXAgOiBQbGF0Zm9ybUV2ZW50OjpLZXlEb3duLCBldmVudC5tb2RpZmllckZsYWdzICYgV2Vi
RXZlbnRGbGFnTWFza1NoaWZ0LCBldmVudC5tb2RpZmllckZsYWdzICYgV2ViRXZlbnRGbGFnTWFz
a0NvbnRyb2wsIGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrQWx0ZXJuYXRl
LCBldmVudC5tb2RpZmllckZsYWdzICYgV2ViRXZlbnRGbGFnTWFza0NvbW1hbmQpCi0gICAgLCBt
X3RleHQoZXZlbnQuY2hhcmFjdGVycykKLSAgICAsIG1fdW5tb2RpZmllZFRleHQoZXZlbnQuY2hh
cmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzKQotICAgICwgbV9rZXlJZGVudGlmaWVyKGtleUlkZW50
aWZpZXJGb3JLZXlFdmVudChldmVudCkpCi0gICAgLCBtX2F1dG9SZXBlYXQoZXZlbnQuaXNLZXlS
ZXBlYXRpbmcpCi0gICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZShldmVudC5rZXlDb2RlKQot
ICAgICwgbV9pc0tleXBhZChmYWxzZSkgLy8gaVBob25lIGRvZXMgbm90IGRpc3Rpbmd1aXNoIHRo
ZSBudW1wYWQgPHJkYXI6Ly9wcm9ibGVtLzcxOTA4MzU+Ci0gICAgLCBtX0V2ZW50KGV2ZW50KQot
ewotICAgIEFTU0VSVChldmVudC50eXBlID09IFdlYkV2ZW50S2V5RG93biB8fCBldmVudC50eXBl
ID09IFdlYkV2ZW50S2V5VXApOwotCi0gICAgLy8gQWx3YXlzIHVzZSAxMyBmb3IgRW50ZXIvUmV0
dXJuIC0tIHdlIGRvbid0IHdhbnQgdG8gdXNlIEFwcEtpdCdzIGRpZmZlcmVudCBjaGFyYWN0ZXIg
Zm9yIEVudGVyLgotICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9PSAnXHInKSB7Ci0g
ICAgICAgIG1fdGV4dCA9ICJcciI7Ci0gICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHIiOwot
ICAgIH0KLQotICAgIC8vIFRoZSBhZGp1c3RtZW50cyBiZWxvdyBhcmUgb25seSBuZWVkZWQgaW4g
YmFja3dhcmQgY29tcGF0aWJpbGl0eSBtb2RlLCBidXQgd2UgY2Fubm90IHRlbGwgd2hhdCBtb2Rl
IHdlIGFyZSBpbiBmcm9tIGhlcmUuCi0KLSAgICAvLyBUdXJuIDB4N0YgaW50byA4LCBiZWNhdXNl
IGJhY2tzcGFjZSBuZWVkcyB0byBhbHdheXMgYmUgOC4KLSAgICBpZiAobV90ZXh0ID09ICJceDdG
IikKLSAgICAgICAgbV90ZXh0ID0gIlx4OCI7Ci0gICAgaWYgKG1fdW5tb2RpZmllZFRleHQgPT0g
Ilx4N0YiKQotICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gIlx4OCI7Ci0gICAgLy8gQWx3YXlz
IHVzZSA5IGZvciB0YWIgLS0gd2UgZG9uJ3Qgd2FudCB0byB1c2UgQXBwS2l0J3MgZGlmZmVyZW50
IGNoYXJhY3RlciBmb3Igc2hpZnQtdGFiLgotICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29k
ZSA9PSA5KSB7Ci0gICAgICAgIG1fdGV4dCA9ICJceDkiOwotICAgICAgICBtX3VubW9kaWZpZWRU
ZXh0ID0gIlx4OSI7Ci0gICAgfQotfQotCiB2b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6ZGlz
YW1iaWd1YXRlS2V5RG93bkV2ZW50KFR5cGUgdHlwZSwgYm9vbCBiYWNrd2FyZENvbXBhdGliaWxp
dHlNb2RlKQogewogICAgIC8vIENhbiBvbmx5IGNoYW5nZSB0eXBlIGZyb20gS2V5RG93biB0byBS
YXdLZXlEb3duIG9yIENoYXIsIGFzIHdlIGxhY2sgaW5mb3JtYXRpb24gZm9yIG90aGVyIGNvbnZl
cnNpb25zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL01JTUVUeXBl
UmVnaXN0cnlJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTUlNRVR5cGVSZWdp
c3RyeUlPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZjQ4NWEyMGQ3YzFjNzI1OGFhYTVhMTI1YjZjMjY5Zjlj
Y2U1ZmMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL01J
TUVUeXBlUmVnaXN0cnlJT1MubW0KQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisKKyNp
bmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIAor
eworU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyAmZXh0KQoreworICAgIHJldHVybiB3a0dldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4
dCk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IE1JTUVUeXBlUmVnaXN0cnk6OmdldEV4dGVuc2lvbnNG
b3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIC8qdHlwZSovKQoreworICAgIHJldHVybiBWZWN0b3I8
U3RyaW5nPigpOworfQorCitTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0
ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiAvKnR5cGUqLykKK3sKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisKK2Jvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNBcHBsaWNhdGlvblBsdWdp
bk1JTUVUeXBlKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL01lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YjQ0ZjIzYjNlNTFj
ZTFmN2E4ZWM5MzRhNzE3M2Q0YTRkOTVjY2MwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL01lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbQpAQCAtMCwwICsx
LDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCisKKyNp
bXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlN5c3RlbU1lbW9yeS5oIgorI2ltcG9ydCAiV2Vi
Q29yZVRocmVhZC5oIgorI2ltcG9ydCA8bGlia2Vybi9PU0F0b21pYy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIHJlc3BvbmRUb01lbW9yeVByZXNzdXJlQ2FsbGJhY2so
Q0ZSdW5Mb29wT2JzZXJ2ZXJSZWYgb2JzZXJ2ZXIsIENGUnVuTG9vcEFjdGl2aXR5IC8qYWN0aXZp
dHkqLywgdm9pZCogLyppbmZvKi8pCit7CisgICAgbWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkucmVz
cG9uZFRvTWVtb3J5UHJlc3N1cmVJZk5lZWRlZCgpOworICAgIENGUnVuTG9vcE9ic2VydmVySW52
YWxpZGF0ZShvYnNlcnZlcik7CisgICAgQ0ZSZWxlYXNlKG9ic2VydmVyKTsKK30KKwordm9pZCBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXI6Omluc3RhbGxNZW1vcnlSZWxlYXNlQmxvY2sodm9pZCAoXnJl
bGVhc2VNZW1vcnlCbG9jaykoKSwgYm9vbCBjbGVhclByZXNzdXJlT25NZW1vcnlSZWxlYXNlKQor
eworICAgIGlmIChtX2luc3RhbGxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcmVsZWFzZU1l
bW9yeUJsb2NrID0gQmxvY2tfY29weShyZWxlYXNlTWVtb3J5QmxvY2spOworICAgIG1fY2xlYXJQ
cmVzc3VyZU9uTWVtb3J5UmVsZWFzZSA9IGNsZWFyUHJlc3N1cmVPbk1lbW9yeVJlbGVhc2U7Cisg
ICAgbV9pbnN0YWxsZWQgPSB0cnVlOworfQorCit2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6
c2V0UmVjZWl2ZWRNZW1vcnlQcmVzc3VyZShNZW1vcnlQcmVzc3VyZVJlYXNvbiByZWFzb24pCit7
CisgICAgT1NBdG9taWNUZXN0QW5kU2V0KDAsICZtX3JlY2VpdmVkTWVtb3J5UHJlc3N1cmUpOwor
CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9vYnNlcnZlck11dGV4KTsKKyAg
ICAgICAgaWYgKCFtX29ic2VydmVyKSB7CisgICAgICAgICAgICBtX29ic2VydmVyID0gQ0ZSdW5M
b29wT2JzZXJ2ZXJDcmVhdGUoTlVMTCwga0NGUnVuTG9vcEJlZm9yZVdhaXRpbmcgfCBrQ0ZSdW5M
b29wRXhpdCwgTk8gLyogZG9uJ3QgcmVwZWF0ICovLAorICAgICAgICAgICAgICAgIDAsIFdlYkNv
cmU6OnJlc3BvbmRUb01lbW9yeVByZXNzdXJlQ2FsbGJhY2ssIE5VTEwpOworICAgICAgICAgICAg
Q0ZSdW5Mb29wQWRkT2JzZXJ2ZXIoV2ViVGhyZWFkUnVuTG9vcCgpLCBtX29ic2VydmVyLCBrQ0ZS
dW5Mb29wQ29tbW9uTW9kZXMpOworICAgICAgICAgICAgQ0ZSdW5Mb29wV2FrZVVwKFdlYlRocmVh
ZFJ1bkxvb3AoKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9tZW1vcnlQcmVzc3VyZVJlYXNvbiB8
PSByZWFzb247CisgICAgfQorfQorCitib29sIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6aGFzUmVj
ZWl2ZWRNZW1vcnlQcmVzc3VyZSgpCit7CisgICAgcmV0dXJuIE9TQXRvbWljT3IzMigwLCAmbV9y
ZWNlaXZlZE1lbW9yeVByZXNzdXJlKTsKK30KKwordm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6
OmNsZWFyTWVtb3J5UHJlc3N1cmUoKQoreworICAgIE9TQXRvbWljVGVzdEFuZENsZWFyKDAsICZt
X3JlY2VpdmVkTWVtb3J5UHJlc3N1cmUpOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIobV9vYnNlcnZlck11dGV4KTsKKyAgICAgICAgbV9tZW1vcnlQcmVzc3VyZVJlYXNvbiA9
IE1lbW9yeVByZXNzdXJlUmVhc29uTm9uZTsKKyAgICB9Cit9CisKK2Jvb2wgTWVtb3J5UHJlc3N1
cmVIYW5kbGVyOjpzaG91bGRXYWl0Rm9yTWVtb3J5Q2xlYXJNZXNzYWdlKCkKK3sKKyAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9vYnNlcnZlck11dGV4KTsKKyAgICByZXR1cm4gbV9tZW1vcnlQcmVz
c3VyZVJlYXNvbiAmIE1lbW9yeVByZXNzdXJlUmVhc29uVk1TdGF0dXM7Cit9CisKK3ZvaWQgTWVt
b3J5UHJlc3N1cmVIYW5kbGVyOjpyZXNwb25kVG9NZW1vcnlQcmVzc3VyZUlmTmVlZGVkKCkKK3sK
KyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworCisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV9vYnNlcnZlck11dGV4KTsKKyAgICAgICAgbV9vYnNl
cnZlciA9IDA7CisgICAgfQorCisgICAgaWYgKGhhc1JlY2VpdmVkTWVtb3J5UHJlc3N1cmUoKSkg
eworICAgICAgICBBU1NFUlQobV9yZWxlYXNlTWVtb3J5QmxvY2spOworICAgICAgICBMT0coTWVt
b3J5UHJlc3N1cmUsICJIYW5kbGUgbWVtb3J5IHByZXNzdXJlIGF0ICVzIiwgX19QUkVUVFlfRlVO
Q1RJT05fXyk7CisgICAgICAgIG1fcmVsZWFzZU1lbW9yeUJsb2NrKCk7CisgICAgICAgIGlmICht
X2NsZWFyUHJlc3N1cmVPbk1lbW9yeVJlbGVhc2UpCisgICAgICAgICAgICBjbGVhck1lbW9yeVBy
ZXNzdXJlKCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCmluZGV4IDg3YjU1MTc5MWFkMWNk
M2I4MTQ3NWU0ODEzZTIxNGY4YWE3MTdlOGQuLmYyNTkyNzU4YmFlMTc5M2U1MWMxMjU1ZjNkMjAy
ZjY1YjYxZWY3NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0
ZWJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJk
SU9TLm1tCkBAIC0zNSwyMCArMzUsMjQgQEAKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJG
cmFtZUxvYWRlci5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbXBvcnQgIkhU
TUxDb252ZXJ0ZXIuaCIKICNpbXBvcnQgIkhUTUxFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MTmFt
ZXMuaCIKICNpbXBvcnQgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNpbXBvcnQgIlVSTC5oIgorI2lt
cG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKICNpbXBvcnQgIlBh
Z2UuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmRTdHJhdGVneS5oIgogI2ltcG9ydCAiUGxhdGZvcm1T
dHJhdGVnaWVzLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgorI2ltcG9ydCAiUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzSU9TLmgiCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQg
IlNvZnRMaW5raW5nLmgiCiAjaW1wb3J0ICJUZXh0LmgiCisjaW1wb3J0ICJVUkwuaCIKKyNpbXBv
cnQgIldlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcu
aCIKICNpbXBvcnQgIm1hcmt1cC5oIgotI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0
cmFzLmgiCiAjaW1wb3J0IDxNb2JpbGVDb3JlU2VydmljZXMvTW9iaWxlQ29yZVNlcnZpY2VzLmg+
CiAKIEBpbnRlcmZhY2UgTlNBdHRyaWJ1dGVkU3RyaW5nIChOU0F0dHJpYnV0ZWRTdHJpbmdLaXRB
ZGRpdGlvbnMpCkBAIC0xMjYsOTcgKzEzMCwyNCBAQCBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IFBh
c3RlYm9hcmQ6OmNyZWF0ZVByaXZhdGUoKQogICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFzdGVi
b2FyZCk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6c2V0RnJhbWUoRnJhbWUqIGZyYW1lKQordm9p
ZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkK
IHsKLSAgICBtX2ZyYW1lID0gZnJhbWU7Ci0gICAgbV9jaGFuZ2VDb3VudCA9IG1fZnJhbWUtPmVk
aXRvcigpLmNsaWVudCgpLT5wYXN0ZWJvYXJkQ2hhbmdlQ291bnQoKTsKKyAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJkKGNvbnRl
bnQpOwogfQogCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlKiBzZWxlY3Rl
ZFJhbmdlLCBib29sIC8qY2FuU21hcnRDb3B5T3JEZWxldGUqLywgRnJhbWUgKmZyYW1lLCBTaG91
bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQgc2hvdWxkU2VyaWFsaXplU2VsZWN0
ZWRUZXh0Rm9yQ2xpcGJvYXJkKQorU3RyaW5nIFBhc3RlYm9hcmQ6OnJlc291cmNlTUlNRVR5cGUo
Y29uc3QgTlNTdHJpbmcgKm1pbWVUeXBlKQogewotICAgIEFTU0VSVChzZWxlY3RlZFJhbmdlKTsK
LSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBpcyBhdCB0aGUg
YmVnaW5uaW5nIG9mIGNvbnRlbnQgaW5zaWRlIGFuIGFuY2hvciB0YWcKLSAgICAvLyB3ZSBtb3Zl
IHRoZSBzZWxlY3Rpb24gc3RhcnQgdG8gaW5jbHVkZSB0aGUgYW5jaG9yLgotICAgIEV4Y2VwdGlv
bkNvZGUgZWM7Ci0gICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSBzZWxlY3RlZFJhbmdlLT5jb21t
b25BbmNlc3RvckNvbnRhaW5lcihlYyk7Ci0gICAgQVNTRVJUKGNvbW1vbkFuY2VzdG9yKTsKLSAg
ICBOb2RlKiBlbmNsb3NpbmdBbmNob3IgPSBlbmNsb3NpbmdOb2RlV2l0aFRhZyhmaXJzdFBvc2l0
aW9uSW5Ob2RlKGNvbW1vbkFuY2VzdG9yKSwgSFRNTE5hbWVzOjphVGFnKTsKLSAgICBpZiAoZW5j
bG9zaW5nQW5jaG9yICYmIGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVO
b2RlKHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5hbmNob3JOb2RlKCkpLCBzZWxlY3Rl
ZFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpID49IDApCi0gICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNl
dFN0YXJ0KGVuY2xvc2luZ0FuY2hvciwgMCwgZWMpOwotCi0gICAgUmV0YWluUHRyPE5TRGljdGlv
bmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxs
b2NdIGluaXRdKTsKLQotICAgIC8vIFB1dCBXZWJBcmNoaXZlIG9uIHRoZSBwYXN0ZWJvYXJkLgot
ICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6
Y3JlYXRlRnJvbVNlbGVjdGlvbihmcmFtZSk7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0
YSA9IGFyY2hpdmUgPyBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKSA6IDA7Ci0gICAg
aWYgKGRhdGEpCi0gICAgICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6KE5TRGF0
YSAqKWRhdGEuZ2V0KCkgZm9yS2V5OldlYkFyY2hpdmVQYm9hcmRUeXBlXTsKLQotICAgIFJldGFp
blB0cjxOU0hUTUxSZWFkZXI+IGNvbnZlcnRlciA9IGFkb3B0TlMoW1tnZXROU0hUTUxSZWFkZXJD
bGFzcygpIGFsbG9jXSBpbml0V2l0aERPTVJhbmdlOmtpdChzZWxlY3RlZFJhbmdlKV0pOwotICAg
IGlmIChjb252ZXJ0ZXIpIHsKLSAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVk
U3RyaW5nID0gW2NvbnZlcnRlci5nZXQoKSBhdHRyaWJ1dGVkU3RyaW5nXTsKLSAgICAgICAgTlNE
YXRhKiBSVEZERGF0YSA9IFthdHRyaWJ1dGVkU3RyaW5nIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFu
Z2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07
Ci0gICAgICAgIGlmIChSVEZERGF0YSkKLSAgICAgICAgICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0
KCkgc2V0VmFsdWU6UlRGRERhdGEgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVSVEZEXTsKLSAg
ICAgICAgaWYgKFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdKQotICAgICAg
ICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFj
aG1lbnRDaGFyYWN0ZXJzKGF0dHJpYnV0ZWRTdHJpbmcpOwotICAgICAgICBOU0RhdGEqIFJURkRh
dGEgPSBbYXR0cmlidXRlZFN0cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJp
YnV0ZWRTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07Ci0gICAgICAgIGlm
IChSVEZEYXRhKQotICAgICAgICAgICAgW3JlcHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTpS
VEZEYXRhIGZvcktleTooTlNTdHJpbmcgKilrVVRUeXBlUlRGXTsKLSAgICB9Ci0KLSAgICAvLyBQ
dXQgcGxhaW4gc3RyaW5nIG9uIHRoZSBwYXN0ZWJvYXJkLgotICAgIFN0cmluZyB0ZXh0ID0gc2hv
dWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkID09IEluY2x1ZGVJbWFnZUFsdFRl
eHRGb3JDbGlwYm9hcmQKLSAgICAgICAgPyBmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0ZWRUZXh0Rm9y
Q2xpcGJvYXJkKCkgOiBmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0ZWRUZXh0KCk7Ci0gICAgdGV4dC5y
ZXBsYWNlKG5vQnJlYWtTcGFjZSwgJyAnKTsKLSAgICBbcmVwcmVzZW50YXRpb25zLmdldCgpIHNl
dFZhbHVlOnRleHQgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVUZXh0XTsKLQotICAgIGZyYW1l
LT5lZGl0b3IoKS5jbGllbnQoKS0+d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9u
cy5nZXQoKSk7CisgICAgcmV0dXJuIFN0cmluZyhhZG9wdENGKFVUVHlwZUNyZWF0ZVByZWZlcnJl
ZElkZW50aWZpZXJGb3JUYWcoa1VUVGFnQ2xhc3NNSU1FVHlwZSwgKENGU3RyaW5nUmVmKW1pbWVU
eXBlLCBOVUxMKSkuZ2V0KCkpOwogfQogCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCwgRnJhbWUgKmZyYW1lKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZShjb25zdCBQYXN0ZWJvYXJkSW1hZ2UmIHBhc3RlYm9hcmRJbWFnZSkKIHsKLSAgICBBU1NFUlQo
ZnJhbWUpOwotCi0gICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0g
YWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICBbcmVwcmVz
ZW50YXRpb25zLmdldCgpIHNldFZhbHVlOnRleHQgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVU
ZXh0XTsKLSAgICBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPndyaXRlRGF0YVRvUGFzdGVib2Fy
ZChyZXByZXNlbnRhdGlvbnMuZ2V0KCkpOwotfQotCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1h
Z2UoTm9kZSogbm9kZSwgRnJhbWUqIGZyYW1lKQotewotICAgIEFTU0VSVChub2RlKTsKLQotICAg
IGlmICghKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNJbWFnZSgpKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJ
bWFnZShub2RlLT5yZW5kZXJlcigpKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBy
ZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKTsKLSAgICBpZiAoIWNhY2hlZEltYWdlIHx8IGNhY2hlZElt
YWdlLT5lcnJvck9jY3VycmVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEltYWdlKiBpbWFn
ZSA9IGNhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICBBU1NFUlQo
aW1hZ2UpOwotCi0gICAgUmV0YWluUHRyPE5TRGF0YT4gaW1hZ2VEYXRhID0gaW1hZ2UtPmRhdGEo
KS0+Y3JlYXRlTlNEYXRhKCk7Ci0KLSAgICBpZiAoIWltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGRpY3Rpb25hcnkgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgIE5TU3RyaW5nICpt
aW1lVHlwZSA9IGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCk7Ci0gICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiB1dGkgPSBhZG9wdENGKFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50
aWZpZXJGb3JUYWcoa1VUVGFnQ2xhc3NNSU1FVHlwZSwgKENGU3RyaW5nUmVmKW1pbWVUeXBlLCBO
VUxMKSk7Ci0gICAgaWYgKHV0aSkgewotICAgICAgICBbZGljdGlvbmFyeS5nZXQoKSBzZXRPYmpl
Y3Q6aW1hZ2VEYXRhLmdldCgpIGZvcktleTooTlNTdHJpbmcgKil1dGkuZ2V0KCldOwotICAgICAg
ICBbZGljdGlvbmFyeS5nZXQoKSBzZXRPYmplY3Q6KE5TU3RyaW5nICopbm9kZS0+ZG9jdW1lbnQo
KS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKCJzcmMiKSkpIGZvcktleTooTlNT
dHJpbmcgKilrVVRUeXBlVVJMXTsKLSAgICB9Ci0gICAgZnJhbWUtPmVkaXRvcigpLmNsaWVudCgp
LT53cml0ZURhdGFUb1Bhc3RlYm9hcmQoZGljdGlvbmFyeS5nZXQoKSk7CisgICAgcGxhdGZvcm1T
dHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRvUGFzdGVib2FyZChwYXN0
ZWJvYXJkSW1hZ2UpOwogfQogCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0
IFN0cmluZyYsIFNtYXJ0UmVwbGFjZU9wdGlvbikKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFp
blRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTbWFydFJlcGxhY2VPcHRpb24pCiB7CisgICAgcGxh
dGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRvUGFzdGVib2Fy
ZChrVVRUeXBlVGV4dCwgdGV4dCk7CiB9CiAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVQYXN0ZWJv
YXJkKGNvbnN0IFBhc3RlYm9hcmQmKQpAQCAtMjMwLDI0MSArMTYxLDgzIEBAIGJvb2wgUGFzdGVi
b2FyZDo6Y2FuU21hcnRSZXBsYWNlKCkKIAogdm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9h
cmRQbGFpblRleHQmIHRleHQpCiB7Ci0gICAgUmV0YWluUHRyPE5TQXJyYXk+IHBhc3RlYm9hcmRJ
dGVtID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnJlYWREYXRhRnJvbVBhc3RlYm9hcmQo
KE5TU3RyaW5nICopa1VUVHlwZVRleHQsIDApOwotCi0gICAgaWYgKFtwYXN0ZWJvYXJkSXRlbS5n
ZXQoKSBjb3VudF0gPT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWQgdmFsdWUgPSBbcGFz
dGVib2FyZEl0ZW0uZ2V0KCkgb2JqZWN0QXRJbmRleDowXTsKLSAgICBBU1NFUlQoW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwotICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZD
bGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKLSAgICAgICAgdGV4dC50ZXh0ID0gKE5TU3RyaW5nICop
dmFsdWU7CisgICAgUGFzdGVib2FyZFN0cmF0ZWd5JiBzdHJhdGVneSA9ICpwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCk7CisgICAgdGV4dC50ZXh0ID0gc3RyYXRlZ3ku
cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKDAsIGtVVFR5cGVUZXh0KTsKIH0KIAogc3RhdGljIE5T
QXJyYXkqIHN1cHBvcnRlZEltYWdlVHlwZXMoKQogewotICAgIHJldHVybiBbTlNBcnJheSBhcnJh
eVdpdGhPYmplY3RzOihpZClrVVRUeXBlUE5HLCAoaWQpa1VUVHlwZVRJRkYsIChpZClrVVRUeXBl
SlBFRywgKGlkKWtVVFR5cGVHSUYsIG5pbF07CisgICAgcmV0dXJuIEBbKGlkKWtVVFR5cGVQTkcs
IChpZClrVVRUeXBlVElGRiwgKGlkKWtVVFR5cGVKUEVHLCAoaWQpa1VUVHlwZUdJRl07CiB9CiAK
LU5TQXJyYXkqIFBhc3RlYm9hcmQ6OnN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlcygpCit2b2lkIFBh
c3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZFdlYkNvbnRlbnRSZWFkZXImIHJlYWRlcikKIHsKLSAg
ICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czooaWQpV2ViQXJjaGl2ZVBib2FyZFR5
cGUsIChpZClrVVRUeXBlUE5HLCAoaWQpa1VUVHlwZVRJRkYsIChpZClrVVRUeXBlSlBFRywgKGlk
KWtVVFR5cGVHSUYsIChpZClrVVRUeXBlVVJMLCAoaWQpa1VUVHlwZVRleHQsIChpZClrVVRUeXBl
UlRGRCwgKGlkKWtVVFR5cGVSVEYsIG5pbF07Ci19Ci0KLSNkZWZpbmUgV2ViRGF0YVByb3RvY29s
U2NoZW1lIEAid2Via2l0LWZha2UtdXJsIgotCi1zdGF0aWMgTlNVUkwqIHVuaXF1ZVVSTFdpdGhS
ZWxhdGl2ZVBhcnQoTlNTdHJpbmcgKnJlbGF0aXZlUGFydCkKLXsKLSAgICBDRlVVSURSZWYgVVVJ
RFJlZiA9IENGVVVJRENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0KTsKLSAgICBOU1N0cmluZyAq
VVVJRFN0cmluZyA9IChOU1N0cmluZyAqKUNGVVVJRENyZWF0ZVN0cmluZyhrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBVVUlEUmVmKTsKLSAgICBDRlJlbGVhc2UoVVVJRFJlZik7Ci0gICAgTlNVUkwgKlVS
TCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6
Ly8lQC8lQCIsIFdlYkRhdGFQcm90b2NvbFNjaGVtZSwgVVVJRFN0cmluZywgcmVsYXRpdmVQYXJ0
XV07Ci0gICAgQ0ZSZWxlYXNlKFVVSURTdHJpbmcpOwotCi0gICAgcmV0dXJuIFVSTDsKLX0KLQot
c3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudFdpdGhJ
bWFnZVJlc291cmNlKEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJl
c291cmNlKQotewotICAgIFJlZlB0cjxFbGVtZW50PiBpbWFnZUVsZW1lbnQgPSBmcmFtZS0+ZG9j
dW1lbnQoKS0+Y3JlYXRlRWxlbWVudChIVE1MTmFtZXM6OmltZ1RhZywgZmFsc2UpOwotCi0gICAg
aWYgKERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2Fk
ZXIoKSkKLSAgICAgICAgbG9hZGVyLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UuZ2V0KCkp
OwotCi0gICAgTlNVUkwgKlVSTCA9IHJlc291cmNlLT51cmwoKTsKLSAgICBpbWFnZUVsZW1lbnQt
PnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIsIFtVUkwgaXNGaWxlVVJMXSA/IFtVUkwg
YWJzb2x1dGVTdHJpbmddIDogcmVzb3VyY2UtPnVybCgpKTsKLSAgICBSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZnJhZ21lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRG9jdW1lbnRGcmFn
bWVudCgpOwotICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChpbWFnZUVsZW1lbnQucmVsZWFzZSgp
KTsKLSAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50V2l0aExpbmsoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBSZWZQdHI8RWxlbWVudD4g
YW5jaG9yRWxlbWVudCA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KEhUTUxOYW1lczo6YVRhZywg
ZmFsc2UpOwotCi0gICAgYW5jaG9yRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJl
ZkF0dHIsIHVybFN0cmluZyk7Ci0gICAgYW5jaG9yRWxlbWVudC0+YXBwZW5kQ2hpbGQoZG9jdW1l
bnQtPmNyZWF0ZVRleHROb2RlKHVybFN0cmluZykpOwotCi0gICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAg
ICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoYW5jaG9yRWxlbWVudC5yZWxlYXNlKCkpOwotICAgIHJl
dHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGRvY3VtZW50RnJhZ21lbnRXaXRoUlRGKEZyYW1lKiBmcmFtZSwgTlNTdHJpbmcg
KnBhc3RlYm9hcmRUeXBlLCBOU0RhdGEqIHBhc3RlYm9hcmREYXRhKQotewotICAgIGlmICghZnJh
bWUgfHwgIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9j
dW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVk
U3RyaW5nPiBzdHJpbmc7Ci0gICAgaWYgKFtwYXN0ZWJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6
KE5TU3RyaW5nICopa1VUVHlwZVJURkRdKQotICAgICAgICBzdHJpbmcgPSBbW05TQXR0cmlidXRl
ZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOnBhc3RlYm9hcmREYXRhIGRvY3VtZW50QXR0cmli
dXRlczpOVUxMXTsKLQotICAgIGlmICghc3RyaW5nKQotICAgICAgICBzdHJpbmcgPSBbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6cGFzdGVib2FyZERhdGEgZG9jdW1lbnRB
dHRyaWJ1dGVzOk5VTExdOwotCi0gICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgYm9vbCB3YXNEZWZlcnJpbmdDYWxsYmFja3MgPSBmcmFtZS0+cGFnZSgpLT5kZWZlcnNM
b2FkaW5nKCk7Ci0gICAgaWYgKCF3YXNEZWZlcnJpbmdDYWxsYmFja3MpCi0gICAgICAgIGZyYW1l
LT5wYWdlKCktPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CisgICAgUGFzdGVib2FyZFN0cmF0ZWd5
JiBzdHJhdGVneSA9ICpwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCk7
CiAKLSAgICBWZWN0b3I8UmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4+IHJlc291cmNlczsKLSAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50
KCktPmRvY3VtZW50RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0cmluZyhzdHJpbmcuZ2V0KCksIHJl
c291cmNlcyk7CisgICAgaW50IG51bWJlck9mSXRlbXMgPSBzdHJhdGVneS5nZXRQYXN0ZWJvYXJk
SXRlbXNDb3VudCgpOwogCi0gICAgc2l6ZV90IHNpemUgPSByZXNvdXJjZXMuc2l6ZSgpOwotICAg
IGlmIChzaXplKSB7Ci0gICAgICAgIERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9h
ZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpCi0gICAgICAgICAgICBsb2FkZXItPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJj
ZXNbaV0pOwotICAgIH0KKyAgICBpZiAoIW51bWJlck9mSXRlbXMpCisgICAgICAgIHJldHVybjsK
IAotICAgIGlmICghd2FzRGVmZXJyaW5nQ2FsbGJhY2tzKQotICAgICAgICBmcmFtZS0+cGFnZSgp
LT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKKyAgICBOU0FycmF5ICp0eXBlcyA9IHN1cHBvcnRl
ZFBhc3RlYm9hcmRUeXBlcygpOworICAgIGludCBudW1iZXJPZlR5cGVzID0gW3R5cGVzIGNvdW50
XTsKIAotICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci19CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgdHlwZUluZGV4
ID0gMDsgdHlwZUluZGV4IDwgbnVtYmVyT2ZUeXBlczsgdHlwZUluZGV4KyspIHsKKyAgICAgICAg
ICAgIE5TU3RyaW5nICp0eXBlID0gW3R5cGVzIG9iamVjdEF0SW5kZXg6dHlwZUluZGV4XTsKIAot
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50
Rm9yUGFzdGVib2FyZEl0ZW1BdEluZGV4KEZyYW1lKiBmcmFtZSwgaW50IGluZGV4LCBib29sIGFs
bG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKLXsKLSAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPmRvY3VtZW50
RnJhZ21lbnRGcm9tRGVsZWdhdGUoaW5kZXgpOwotICAgIGlmIChmcmFnbWVudCkKLSAgICAgICAg
cmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKLQotICAgIC8vIEZpcnN0IHRyeSB0byBhc2sgdGhl
IGNsaWVudCBhYm91dCB0aGUgc3VwcG9ydGVkIHR5cGVzLiBJdCB3aWxsIHJldHVybiBudWxsIGlm
IHRoZSBjbGllbnQKLSAgICAvLyBoYXMgbm8gc2VsZWN0aW9uLgotICAgIE5TQXJyYXkgKnN1cHBv
cnRlZFR5cGVzID0gZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5zdXBwb3J0ZWRQYXN0ZWJvYXJk
VHlwZXNGb3JDdXJyZW50U2VsZWN0aW9uKCk7Ci0gICAgaWYgKCFzdXBwb3J0ZWRUeXBlcykKLSAg
ICAgICAgc3VwcG9ydGVkVHlwZXMgPSBzdXBwb3J0ZWRQYXN0ZWJvYXJkVHlwZXMoKTsKLSAgICBp
bnQgbnVtYmVyT2ZUeXBlcyA9IFtzdXBwb3J0ZWRUeXBlcyBjb3VudF07Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bWJlck9mVHlwZXM7IGkrKykgewotICAgICAgICBOU1N0cmluZyAqdHlw
ZSA9IFtzdXBwb3J0ZWRUeXBlcyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICBSZXRhaW5QdHI8
TlNBcnJheT4gcGFzdGVib2FyZEl0ZW0gPSBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnJlYWRE
YXRhRnJvbVBhc3RlYm9hcmQodHlwZSwgaW5kZXgpOwotCi0gICAgICAgIGlmIChbcGFzdGVib2Fy
ZEl0ZW0uZ2V0KCkgY291bnRdID09IDApCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOldlYkFyY2hpdmVQYm9hcmRUeXBlXSkgewotICAg
ICAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
MDsKLQotICAgICAgICAgICAgLy8gV2UgcHV0IFtXZWJBcmNoaXZlIGRhdGFdIG9uIHRoZSBwYXN0
ZWJvYXJkIGluIC1jb3B5OiBpbnN0ZWFkIG9mIHRoZSBhcmNoaXZlIGl0c2VsZiB1bnRpbCB0aGVy
ZSBpcyBBUEkgdG8gcHJvdmlkZSB0aGUgV2ViQXJjaGl2ZS4KLSAgICAgICAgICAgIE5TRGF0YSAq
ZGF0YSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOwotICAgICAgICAg
ICAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNvcmVBcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2
ZTo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShkYXRhKS5nZXQoKSk7Ci0gICAgICAg
ICAgICBpZiAoY29yZUFyY2hpdmUpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8QXJjaGl2ZVJl
c291cmNlPiBtYWluUmVzb3VyY2UgPSBjb3JlQXJjaGl2ZS0+bWFpblJlc291cmNlKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1haW5SZXNvdXJjZSkgewotICAgICAgICAgICAgICAgICAgICBOU1N0
cmluZyAqTUlNRVR5cGUgPSBtYWluUmVzb3VyY2UtPm1pbWVUeXBlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuY2FuU2hvd01JTUVUeXBlQXNIVE1M
KE1JTUVUeXBlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5n
PiBtYXJrdXBTdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpb
bWFpblJlc291cmNlLT5kYXRhKCktPmNyZWF0ZU5TRGF0YSgpIGF1dG9yZWxlYXNlXSBlbmNvZGlu
ZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERv
Y3VtZW50TG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXItPmFkZEFsbEFyY2hpdmVSZXNvdXJj
ZXMoY29yZUFyY2hpdmUuZ2V0KCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCgqZnJhbWUtPmRvY3VtZW50KCksIG1hcmt1cFN0
cmluZy5nZXQoKSwgbWFpblJlc291cmNlLT51cmwoKSwgRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50
KTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxU
b1N0cmluZzpXZWJBcmNoaXZlUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgICAgICAgICBpZiAoUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gc3RyYXRlZ3kucmVhZEJ1ZmZlckZyb21QYXN0ZWJv
YXJkKGksIFdlYkFyY2hpdmVQYm9hcmRUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
cmVhZGVyLnJlYWRXZWJBcmNoaXZlKGJ1ZmZlci5yZWxlYXNlKCkpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChm
cmFnbWVudCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9T
dHJpbmc6KE5TU3RyaW5nICopa1VUVHlwZVJURkRdKQotICAgICAgICAgICAgcmV0dXJuIGRvY3Vt
ZW50RnJhZ21lbnRXaXRoUlRGKGZyYW1lLCAoTlNTdHJpbmcgKilrVVRUeXBlUlRGRCwgW3Bhc3Rl
Ym9hcmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF0pOwogCi0gICAgICAgIGlmIChbdHlwZSBp
c0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICopa1VUVHlwZVJURl0pCi0gICAgICAgICAgICByZXR1
cm4gZG9jdW1lbnRGcmFnbWVudFdpdGhSVEYoZnJhbWUsIChOU1N0cmluZyAqKWtVVFR5cGVSVEYs
IFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdKTsKLQotICAgICAgICBpZiAo
W3N1cHBvcnRlZEltYWdlVHlwZXMoKSBjb250YWluc09iamVjdDp0eXBlXSkgewotICAgICAgICAg
ICAgUmV0YWluUHRyPE5TU3RyaW5nPiBmaWxlbmFtZUV4dGVuc2lvbiA9IGFkb3B0TlMoKE5TU3Ry
aW5nICopVVRUeXBlQ29weVByZWZlcnJlZFRhZ1dpdGhDbGFzcygoQ0ZTdHJpbmdSZWYpdHlwZSwg
a1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbikpOwotICAgICAgICAgICAgTlNTdHJpbmcgKnJl
bGF0aXZlVVJMUGFydCA9IFtAImltYWdlIiBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpmaWxlbmFt
ZUV4dGVuc2lvbi5nZXQoKV07Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IG1pbWVU
eXBlID0gYWRvcHROUygoTlNTdHJpbmcgKilVVFR5cGVDb3B5UHJlZmVycmVkVGFnV2l0aENsYXNz
KChDRlN0cmluZ1JlZil0eXBlLCBrVVRUYWdDbGFzc01JTUVUeXBlKSk7Ci0gICAgICAgICAgICBO
U0RhdGEgKmRhdGEgPSBbcGFzdGVib2FyZEl0ZW0uZ2V0KCkgb2JqZWN0QXRJbmRleDowXTsKLSAg
ICAgICAgICAgIHJldHVybiBkb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UoZnJhbWUs
IEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShbW2RhdGEg
Y29weV0gYXV0b3JlbGVhc2VdKSwgdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChyZWxhdGl2ZVVS
TFBhcnQpLCBtaW1lVHlwZS5nZXQoKSwgIiIsICIiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KFt0eXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRUeXBlVVJMXSkgewotICAgICAg
ICAgICAgaWQgdmFsdWUgPSBbcGFzdGVib2FyZEl0ZW0uZ2V0KCkgb2JqZWN0QXRJbmRleDowXTsK
LSAgICAgICAgICAgIGlmICghW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TVVJMIGNsYXNzXV0pIHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TVVJMIGNsYXNz
XV0pOwotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgIGlmIChbdHlwZSBp
c0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICopa1VUVHlwZVJURkRdKSB7CisgICAgICAgICAgICAg
ICAgaWYgKFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IHN0cmF0ZWd5LnJlYWRCdWZmZXJG
cm9tUGFzdGVib2FyZChpLCBrVVRUeXBlUlRGRCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHJlYWRlci5yZWFkUlRGRChidWZmZXIucmVsZWFzZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IE5TVVJMICp1cmwgPSAoTlNVUkwgKil2YWx1ZTsKIAotICAgICAgICAgICAgaWYgKCFmcmFtZS0+
ZWRpdG9yKCkuY2xpZW50KCktPmhhc1JpY2hseUVkaXRhYmxlU2VsZWN0aW9uKCkpIHsKLSAgICAg
ICAgICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoZnJhbWUtPnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIFt1cmwgYWJzb2x1dGVTdHJpbmddKTsK
LSAgICAgICAgICAgICAgICBpZiAoZnJhZ21lbnQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmcmFnbWVudC5yZWxlYXNlKCk7CisgICAgICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3Ry
aW5nOihOU1N0cmluZyAqKWtVVFR5cGVSVEZdKSB7CisgICAgICAgICAgICAgICAgaWYgKFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IHN0cmF0ZWd5LnJlYWRCdWZmZXJGcm9tUGFzdGVib2Fy
ZChpLCBrVVRUeXBlUlRGKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLnJlYWRS
VEYoYnVmZmVyLnJlbGVhc2UoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChbdXJsIGlz
RmlsZVVSTF0pIHsKLSAgICAgICAgICAgICAgICBOU1N0cmluZyAqbG9jYWxQYXRoID0gW3VybCBy
ZWxhdGl2ZVBhdGhdOwotICAgICAgICAgICAgICAgIC8vIE9ubHkgYWxsb3cgdXJsIGF0dGFjaG1l
bnRzIGZyb20gfi9NZWRpYSBmb3Igbm93LgotICAgICAgICAgICAgICAgIGlmICghW2xvY2FsUGF0
aCBoYXNQcmVmaXg6WyhOU1N0cmluZyAqKUNQU2hhcmVkUmVzb3VyY2VzRGlyZWN0b3J5KCkgc3Ry
aW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIvTWVkaWEvRENJTS8iXV0pCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBmaWxl
VHlwZSA9IGFkb3B0TlMoKE5TU3RyaW5nICopVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmll
ckZvclRhZyhrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9uLCAoQ0ZTdHJpbmdSZWYpW2xvY2Fs
UGF0aCBwYXRoRXh0ZW5zaW9uXSwgTlVMTCkpOwotICAgICAgICAgICAgICAgIE5TRGF0YSAqZGF0
YSA9IFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mRmlsZTpsb2NhbFBhdGhdOwotICAgICAgICAg
ICAgICAgIGlmIChVVFR5cGVDb25mb3Jtc1RvKChDRlN0cmluZ1JlZilmaWxlVHlwZS5nZXQoKSwg
a1VUVHlwZVBORykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudEZyYWdtZW50
V2l0aEltYWdlUmVzb3VyY2UoZnJhbWUsIEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1
ZmZlcjo6d3JhcE5TRGF0YShbW2RhdGEgY29weV0gYXV0b3JlbGVhc2VdKSwgdW5pcXVlVVJMV2l0
aFJlbGF0aXZlUGFydChAImltYWdlLnBuZyIpLCBAImltYWdlL3BuZyIsICIiLCAiIikpOwotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKFVUVHlwZUNvbmZvcm1zVG8oKENGU3RyaW5nUmVmKWZpbGVU
eXBlLmdldCgpLCBrVVRUeXBlSlBFRykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb2N1
bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UoZnJhbWUsIEFyY2hpdmVSZXNvdXJjZTo6Y3Jl
YXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShbW2RhdGEgY29weV0gYXV0b3JlbGVhc2VdKSwg
dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLmpwZyIpLCBAImltYWdlL2pwZyIsICIi
LCAiIikpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBDcmVhdGUg
YSBsaW5rIHdpdGggVVJMIHRleHQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50RnJh
Z21lbnRXaXRoTGluayhmcmFtZS0+ZG9jdW1lbnQoKSwgW3VybCBhYnNvbHV0ZVN0cmluZ10pOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFtzdXBwb3J0ZWRJbWFnZVR5cGVzKCkgY29u
dGFpbnNPYmplY3Q6dHlwZV0pIHsKKyAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gYnVmZmVyID0gc3RyYXRlZ3kucmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGksIHR5cGUp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIucmVhZEltYWdlKGJ1ZmZlci5yZWxl
YXNlKCksIHR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChhbGxvd1BsYWluVGV4dCAmJiBbdHlwZSBp
c0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICopa1VUVHlwZVRleHRdKSB7Ci0gICAgICAgICAgICBp
ZCB2YWx1ZSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOwotICAgICAg
ICAgICAgaWYgKCFbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgewotICAg
ICAgICAgICAgICAgIEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3Nd
XSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGlmIChbdHlwZSBp
c0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICopa1VUVHlwZVVSTF0pIHsKKyAgICAgICAgICAgICAg
ICBVUkwgdXJsID0gc3RyYXRlZ3kucmVhZFVSTEZyb21QYXN0ZWJvYXJkKGksIGtVVFR5cGVVUkwp
OworICAgICAgICAgICAgICAgIGlmICghdXJsLmlzTnVsbCgpICYmIHJlYWRlci5yZWFkVVJMKHVy
bCwgU3RyaW5nKCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzooTlNT
dHJpbmcgKilrVVRUeXBlVGV4dF0pIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0g
c3RyYXRlZ3kucmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKGksIGtVVFR5cGVUZXh0KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXN0cmluZy5pc051bGwoKSAmJiByZWFkZXIucmVhZFBsYWluVGV4dChz
dHJpbmcpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgY2hvc2VQbGFpblRleHQgPSB0cnVlOwotICAgICAgICAgICAgZnJhZ21lbnQgPSBj
cmVhdGVGcmFnbWVudEZyb21UZXh0KGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpLCAoTlNTdHJpbmcgKil2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoZnJhZ21lbnQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICAgICAgfQog
ICAgIH0KLQotICAgIHJldHVybiAwOwogfQogCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJh
bmdlPiAvKmNvbnRleHQqLywgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRl
eHQpCitOU0FycmF5KiBQYXN0ZWJvYXJkOjpzdXBwb3J0ZWRQYXN0ZWJvYXJkVHlwZXMoKQogewot
ICAgIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7Ci0KLSAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIGludCBudW1iZXJPZkl0ZW1zID0gZnJhbWUtPmVkaXRvcigpLmNsaWVu
dCgpLT5nZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpOwotCi0gICAgaWYgKCFudW1iZXJPZkl0ZW1z
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEluIHRoZSBjb21tb24gY2FzZSB0aGVyZSBp
cyBqdXN0IG9uZSBpdGVtIG9uIHRoZSBwYXN0ZWJvYXJkLCBhdm9pZCB0aGUgZXhwZW5zZSBvZiB0
cmFuc2ZlcnJpbmcgdGhlIGNvbnRlbnQgb2YKLSAgICAvLyBmcmFnbWVudEZvckN1cnJlbnRJdGVt
IHRvIHRoZSBtYWluIGZyYWdtZW50LgotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGRvY3VtZW50RnJhZ21lbnRGb3JQYXN0ZWJvYXJkSXRlbUF0SW5kZXgoZnJhbWUsIDAs
IGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7Ci0KLSAgICBmb3IgKGludCBpID0gMTsg
aSA8IG51bWJlck9mSXRlbXM7IGkrKykgewotICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnRGb3JDdXJyZW50SXRlbSA9IGRvY3VtZW50RnJhZ21lbnRGb3JQYXN0ZWJvYXJk
SXRlbUF0SW5kZXgoZnJhbWUsIGksIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7Ci0g
ICAgICAgIGlmICghZnJhZ21lbnQpCi0gICAgICAgICAgICBmcmFnbWVudCA9IGZyYWdtZW50Rm9y
Q3VycmVudEl0ZW07Ci0gICAgICAgIGVsc2UgaWYgKGZyYWdtZW50Rm9yQ3VycmVudEl0ZW0gJiYg
ZnJhZ21lbnRGb3JDdXJyZW50SXRlbS0+Zmlyc3RDaGlsZCgpKSB7Ci0gICAgICAgICAgICBFeGNl
cHRpb25Db2RlIGVjOwotICAgICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGZyYWdtZW50
Rm9yQ3VycmVudEl0ZW0tPmZpcnN0Q2hpbGQoKSwgZWMpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKGZyYWdtZW50KQotICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwotCi0g
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEBbKGlkKVdlYkFyY2hpdmVQYm9hcmRUeXBlLCAoaWQp
a1VUVHlwZVBORywgKGlkKWtVVFR5cGVUSUZGLCAoaWQpa1VUVHlwZUpQRUcsIChpZClrVVRUeXBl
R0lGLCAoaWQpa1VUVHlwZVVSTCwgKGlkKWtVVFR5cGVUZXh0LCAoaWQpa1VUVHlwZVJURkQsIChp
ZClrVVRUeXBlUlRGXTsKIH0KIAogYm9vbCBQYXN0ZWJvYXJkOjpoYXNEYXRhKCkKIHsKLSAgICBy
ZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPmdldFBhc3RlYm9hcmRJdGVtc0NvdW50
KCkgIT0gMDsKKyAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJh
dGVneSgpLT5nZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpICE9IDA7CiB9CiAKIHN0YXRpYyBTdHJp
bmcgdXRpVHlwZUZyb21Db2NvYVR5cGUoTlNTdHJpbmcgKnR5cGUpCkBAIC01NDAsNyArMzEzLDcg
QEAgU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKQogICAg
ICAgICAgICAgY29jb2FWYWx1ZSA9IFsoTlNTdHJpbmcgKil2YWx1ZSBwcmVjb21wb3NlZFN0cmlu
Z1dpdGhDYW5vbmljYWxNYXBwaW5nXTs7CiAgICAgfSBlbHNlIGlmIChjb2NvYVR5cGUpIHsKICAg
ICAgICAgaWYgKFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IHN0cmF0ZWd5LnJlYWRCdWZm
ZXJGcm9tUGFzdGVib2FyZCgwLCBjb2NvYVR5cGUuZ2V0KCkpKQotICAgICAgICAgICAgY29jb2FW
YWx1ZSA9IFtbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6YnVmZmVyLT5jcmVhdGVOU0Rh
dGEoKSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gYXV0b3JlbGVhc2VdOworICAgICAg
ICAgICAgY29jb2FWYWx1ZSA9IFtbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6YnVmZmVy
LT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gYXV0
b3JlbGVhc2VdOwogICAgIH0KIAogICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVz
IGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0
byBiZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtRXZl
bnRGYWN0b3J5SU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVu
dEZhY3RvcnlJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MzljODlmZTEzZjY3ODBlOTllZTc3NzFiMmJmMWRm
NmI0YmJiMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1BsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgUGxhdGZvcm1FdmVudEZhY3RvcnlJT1NfaAorI2RlZmluZSBQbGF0Zm9ybUV2ZW50
RmFjdG9yeUlPU19oCisKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQu
aCIKKyNpbmNsdWRlIDxXZWJLaXRBZGRpdGlvbnMvUGxhdGZvcm1Ub3VjaEV2ZW50SU9TLmg+CisK
K0BjbGFzcyBXZWJFdmVudDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9y
bUV2ZW50RmFjdG9yeSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBsYXRmb3JtTW91c2VFdmVudCBj
cmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoV2ViRXZlbnQgKik7CisgICAgc3RhdGljIFBsYXRmb3Jt
V2hlZWxFdmVudCBjcmVhdGVQbGF0Zm9ybVdoZWVsRXZlbnQoV2ViRXZlbnQgKik7CisgICAgc3Rh
dGljIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBjcmVhdGVQbGF0Zm9ybUtleWJvYXJkRXZlbnQoV2Vi
RXZlbnQgKik7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBzdGF0aWMgUGxhdGZvcm1U
b3VjaEV2ZW50IGNyZWF0ZVBsYXRmb3JtVG91Y2hFdmVudChXZWJFdmVudCAqKTsKKyNlbmRpZgor
fTsKKworU3RyaW5nIGtleUlkZW50aWZpZXJGb3JLZXlFdmVudChXZWJFdmVudCAqKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUGxhdGZvcm1FdmVudEZhY3RvcnlJT1Nf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtRXZlbnRG
YWN0b3J5SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtRXZlbnRG
YWN0b3J5SU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0OTUxZGUxYzUzZmU0NzhiZWNkODRlMzE5ODU3OGJj
MjUxZmU3NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
UGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0KQEAgLTAsMCArMSwyNTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmgiCisKKyNpbXBvcnQgPEZvdW5kYXRp
b24vTlNHZW9tZXRyeS5oPgorI2ltcG9ydCA8SW50UG9pbnQuaD4KKyNpbXBvcnQgPEtleUV2ZW50
Q29jb2EuaD4KKyNpbXBvcnQgPExvZ2dpbmcuaD4KKyNpbXBvcnQgPFdlYkV2ZW50Lmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHVuc2lnbmVkIG1vZGlmaWVyc0ZvckV2ZW50KFdl
YkV2ZW50ICpldmVudCkKK3sKKyAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOworCisgICAgaWYg
KGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrU2hpZnQpCisgICAgICAgIG1v
ZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpTaGlmdEtleTsKKyAgICBpZiAoZXZlbnQubW9kaWZp
ZXJGbGFncyAmIFdlYkV2ZW50RmxhZ01hc2tDb250cm9sKQorICAgICAgICBtb2RpZmllcnMgfD0g
UGxhdGZvcm1FdmVudDo6Q3RybEtleTsKKyAgICBpZiAoZXZlbnQubW9kaWZpZXJGbGFncyAmIFdl
YkV2ZW50RmxhZ01hc2tBbHRlcm5hdGUpCisgICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2
ZW50OjpBbHRLZXk7CisgICAgaWYgKGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdN
YXNrQ29tbWFuZCkKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6Ok1ldGFLZXk7
CisKKyAgICByZXR1cm4gbW9kaWZpZXJzOworfQorCitzdGF0aWMgaW5saW5lIEludFBvaW50IHBv
aW50Rm9yRXZlbnQoV2ViRXZlbnQgKmV2ZW50KQoreworICAgIHJldHVybiBJbnRQb2ludChldmVu
dC5sb2NhdGlvbkluV2luZG93KTsKK30KKworc3RhdGljIGlubGluZSBJbnRQb2ludCBnbG9iYWxQ
b2ludEZvckV2ZW50KFdlYkV2ZW50ICpldmVudCkKK3sKKyAgICAvLyBpT1MgV2ViS2l0IHdvcmtz
IGFzIGlmIGl0IGlzIGZ1bGwgc2NyZWVuLiBUaGVyZWZvcmUgV2ViIGNvb3JkcyBhcmUgR2xvYmFs
IGNvb3Jkcy4KKyAgICByZXR1cm4gcG9pbnRGb3JFdmVudChldmVudCk7Cit9CisKK3N0YXRpYyBQ
bGF0Zm9ybUV2ZW50OjpUeXBlIG1vdXNlRXZlbnRUeXBlKFdlYkV2ZW50ICpldmVudCkKK3sKKyAg
ICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKKyAgICBjYXNlIFdlYkV2ZW50TW91c2VEb3duOgorICAg
ICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkOworICAgIGNhc2UgV2ViRXZl
bnRNb3VzZVVwOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZDsK
KyAgICBjYXNlIFdlYkV2ZW50TW91c2VNb3ZlZDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtRXZl
bnQ6Ok1vdXNlTW92ZWQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQ7CisgICAgfQor
fQorCitjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyIDogcHVibGljIFBsYXRmb3JtTW91
c2VFdmVudCB7CitwdWJsaWM6CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihXZWJFdmVu
dCAqZXZlbnQpCisgICAgeworICAgICAgICBtX3R5cGUgPSBtb3VzZUV2ZW50VHlwZShldmVudCk7
CisgICAgICAgIG1fbW9kaWZpZXJzID0gMDsKKyAgICAgICAgbV90aW1lc3RhbXAgPSBjdXJyZW50
VGltZSgpOworCisgICAgICAgIG1fcG9zaXRpb24gPSBwb2ludEZvckV2ZW50KGV2ZW50KTsKKyAg
ICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IGdsb2JhbFBvaW50Rm9yRXZlbnQoZXZlbnQpOworICAg
ICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247IC8vIFRoaXMgaGFzIGFsd2F5cyBiZWVuIHRoZSBM
ZWZ0QnV0dG9uIG9uIGlPUy4KKyAgICAgICAgbV9jbGlja0NvdW50ID0gMTsgLy8gVGhpcyBoYXMg
YWx3YXlzIGJlZW4gMSBvbiBpT1MuCisgICAgfQorfTsKKworUGxhdGZvcm1Nb3VzZUV2ZW50IFBs
YXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoV2ViRXZlbnQgKmV2
ZW50KQoreworICAgIHJldHVybiBQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKGV2ZW50KTsKK30K
KworY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50QnVpbGRlciA6IHB1YmxpYyBQbGF0Zm9ybVdoZWVs
RXZlbnQgeworcHVibGljOgorICAgIFBsYXRmb3JtV2hlZWxFdmVudEJ1aWxkZXIoV2ViRXZlbnQg
KmV2ZW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRTY3Jv
bGxXaGVlbCk7CisKKyAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6V2hlZWw7CisgICAg
ICAgIG1fbW9kaWZpZXJzID0gMDsKKyAgICAgICAgbV90aW1lc3RhbXAgPSBjdXJyZW50VGltZSgp
OworCisgICAgICAgIG1fcG9zaXRpb24gPSBwb2ludEZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAg
bV9nbG9iYWxQb3NpdGlvbiA9IGdsb2JhbFBvaW50Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBt
X2RlbHRhWCA9IGV2ZW50LmRlbHRhWDsKKyAgICAgICAgbV9kZWx0YVkgPSBldmVudC5kZWx0YVk7
CisgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsgLy8gaU9T
IG9ubHkgc3VwcG9ydHMgY29udGludW91cyAocGl4ZWwtbW9kZSkgc2Nyb2xsaW5nLgorICAgIH0K
K307CisKK1BsYXRmb3JtV2hlZWxFdmVudCBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxh
dGZvcm1XaGVlbEV2ZW50KFdlYkV2ZW50ICpldmVudCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1X
aGVlbEV2ZW50QnVpbGRlcihldmVudCk7Cit9CisKK1N0cmluZyBrZXlJZGVudGlmaWVyRm9yS2V5
RXZlbnQoV2ViRXZlbnQgKmV2ZW50KQoreworICAgIE5TU3RyaW5nICpzID0gZXZlbnQuY2hhcmFj
dGVyc0lnbm9yaW5nTW9kaWZpZXJzOworICAgIGlmIChbcyBsZW5ndGhdICE9IDEpIHsKKyAgICAg
ICAgTE9HKEV2ZW50cywgInJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgaW4ga2V5IGV2ZW50OiAldSIsIFtzIGxlbmd0aF0pOworICAgICAgICByZXR1cm4gIlVuaWRl
bnRpZmllZCI7CisgICAgfQorCisgICAgcmV0dXJuIGtleUlkZW50aWZpZXJGb3JDaGFyQ29kZShD
RlN0cmluZ0dldENoYXJhY3RlckF0SW5kZXgoKENGU3RyaW5nUmVmKXMsIDApKTsKK30KKworY2xh
c3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlciA6IHB1YmxpYyBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQgeworcHVibGljOgorICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXIoV2ViRXZl
bnQgKmV2ZW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRL
ZXlEb3duIHx8IGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlVcCk7CisKKyAgICAgICAgbV90eXBl
ID0gKGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlVcCA/IFBsYXRmb3JtRXZlbnQ6OktleVVwIDog
UGxhdGZvcm1FdmVudDo6S2V5RG93bik7CisgICAgICAgIG1fbW9kaWZpZXJzID0gbW9kaWZpZXJz
Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisK
KyAgICAgICAgbV90ZXh0ID0gZXZlbnQuY2hhcmFjdGVyczsKKyAgICAgICAgbV91bm1vZGlmaWVk
VGV4dCA9IGV2ZW50LmNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczsKKyAgICAgICAgbV9rZXlJ
ZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckZvcktleUV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV93
aW5kb3dzVmlydHVhbEtleUNvZGUgPSBldmVudC5rZXlDb2RlOworICAgICAgICBtX21hY0NoYXJD
b2RlID0gMDsKKyAgICAgICAgbV9hdXRvUmVwZWF0ID0gZXZlbnQuaXNLZXlSZXBlYXRpbmc7Cisg
ICAgICAgIG1faXNLZXlwYWQgPSBmYWxzZTsgLy8gaU9TIGRvZXMgbm90IGRpc3Rpbmd1aXNoIHRo
ZSBudW1wYWQuIFNlZSA8cmRhcjovL3Byb2JsZW0vNzE5MDgzNT4uCisgICAgICAgIG1faXNTeXN0
ZW1LZXkgPSBmYWxzZTsKKyAgICAgICAgbV9FdmVudCA9IGV2ZW50OworCisgICAgICAgIC8vIEFs
d2F5cyB1c2UgMTMgZm9yIEVudGVyL1JldHVybiAtLSB3ZSBkb24ndCB3YW50IHRvIHVzZSBBcHBL
aXQncyBkaWZmZXJlbnQgY2hhcmFjdGVyIGZvciBFbnRlci4KKyAgICAgICAgaWYgKG1fd2luZG93
c1ZpcnR1YWxLZXlDb2RlID09ICdccicpIHsKKyAgICAgICAgICAgIG1fdGV4dCA9ICJcciI7Cisg
ICAgICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gIlxyIjsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFRoZSBhZGp1c3RtZW50cyBiZWxvdyBhcmUgb25seSBuZWVkZWQgaW4gYmFja3dhcmQgY29t
cGF0aWJpbGl0eSBtb2RlLCBidXQgd2UgY2Fubm90IHRlbGwgd2hhdCBtb2RlIHdlIGFyZSBpbiBm
cm9tIGhlcmUuCisKKyAgICAgICAgLy8gVHVybiAweDdGIGludG8gOCwgYmVjYXVzZSBiYWNrc3Bh
Y2UgbmVlZHMgdG8gYWx3YXlzIGJlIDguCisgICAgICAgIGlmIChtX3RleHQgPT0gIlx4N0YiKQor
ICAgICAgICAgICAgbV90ZXh0ID0gIlx4OCI7CisgICAgICAgIGlmIChtX3VubW9kaWZpZWRUZXh0
ID09ICJceDdGIikKKyAgICAgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHg4IjsKKyAgICAg
ICAgLy8gQWx3YXlzIHVzZSA5IGZvciB0YWIgLS0gd2UgZG9uJ3Qgd2FudCB0byB1c2UgQXBwS2l0
J3MgZGlmZmVyZW50IGNoYXJhY3RlciBmb3Igc2hpZnQtdGFiLgorICAgICAgICBpZiAobV93aW5k
b3dzVmlydHVhbEtleUNvZGUgPT0gOSkgeworICAgICAgICAgICAgbV90ZXh0ID0gIlx4OSI7Cisg
ICAgICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gIlx4OSI7CisgICAgICAgIH0KKyAgICB9Cit9
OworCitQbGF0Zm9ybUtleWJvYXJkRXZlbnQgUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBs
YXRmb3JtS2V5Ym9hcmRFdmVudChXZWJFdmVudCAqZXZlbnQpCit7CisgICAgcmV0dXJuIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXIoZXZlbnQpOworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKK3N0YXRpYyBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUGhhc2VUeXBlIGNvbnZlcnRU
b3VjaFBoYXNlKE5TTnVtYmVyICp0b3VjaFBoYXNlTnVtYmVyKQoreworICAgIFdlYkV2ZW50VG91
Y2hQaGFzZVR5cGUgdG91Y2hQaGFzZSA9IHN0YXRpY19jYXN0PFdlYkV2ZW50VG91Y2hQaGFzZVR5
cGU+KFt0b3VjaFBoYXNlTnVtYmVyIHVuc2lnbmVkSW50VmFsdWVdKTsKKyAgICBzd2l0Y2ggKHRv
dWNoUGhhc2UpIHsKKyAgICBjYXNlIFdlYkV2ZW50VG91Y2hQaGFzZUJlZ2FuOgorICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlQmVnYW47CisgICAgY2FzZSBXZWJF
dmVudFRvdWNoUGhhc2VNb3ZlZDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVG91Y2hQb2ludDo6
VG91Y2hQaGFzZU1vdmVkOworICAgIGNhc2UgV2ViRXZlbnRUb3VjaFBoYXNlU3RhdGlvbmFyeToK
KyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQaGFzZVN0YXRpb25hcnk7
CisgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VFbmRlZDoKKyAgICAgICAgcmV0dXJuIFBsYXRm
b3JtVG91Y2hQb2ludDo6VG91Y2hQaGFzZUVuZGVkOworICAgIGNhc2UgV2ViRXZlbnRUb3VjaFBo
YXNlQ2FuY2VsbGVkOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBo
YXNlQ2FuY2VsbGVkOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKyAgICByZXR1cm4gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlQmVnYW47
Cit9CisKK3N0YXRpYyBQbGF0Zm9ybUV2ZW50OjpUeXBlIHRvdWNoRXZlbnRUeXBlKFdlYkV2ZW50
ICpldmVudCkKK3sKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKKyAgICBjYXNlIFdlYkV2ZW50
VG91Y2hCZWdpbjoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6OlRvdWNoU3RhcnQ7Cisg
ICAgY2FzZSBXZWJFdmVudFRvdWNoRW5kOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6
VG91Y2hFbmQ7CisgICAgY2FzZSBXZWJFdmVudFRvdWNoQ2FuY2VsOgorICAgICAgICByZXR1cm4g
UGxhdGZvcm1FdmVudDo6VG91Y2hDYW5jZWw7CisgICAgY2FzZSBXZWJFdmVudFRvdWNoQ2hhbmdl
OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6VG91Y2hNb3ZlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gUGxhdGZvcm1F
dmVudDo6VG91Y2hDYW5jZWw7CisgICAgfQorfQorCitjbGFzcyBQbGF0Zm9ybVRvdWNoUG9pbnRC
dWlsZGVyIDogcHVibGljIFBsYXRmb3JtVG91Y2hQb2ludCB7CitwdWJsaWM6CisgICAgUGxhdGZv
cm1Ub3VjaFBvaW50QnVpbGRlcih1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBJbnRQb2ludCYg
bG9jYXRpb24sIFRvdWNoUGhhc2VUeXBlIHBoYXNlKQorICAgICAgICA6IFBsYXRmb3JtVG91Y2hQ
b2ludChpZGVudGlmaWVyLCBsb2NhdGlvbiwgcGhhc2UpCisgICAgeworICAgIH0KK307CisKK2Ns
YXNzIFBsYXRmb3JtVG91Y2hFdmVudEJ1aWxkZXIgOiBwdWJsaWMgUGxhdGZvcm1Ub3VjaEV2ZW50
IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybVRvdWNoRXZlbnRCdWlsZGVyKFdlYkV2ZW50ICpldmVu
dCkKKyAgICB7CisgICAgICAgIG1fdHlwZSA9IHRvdWNoRXZlbnRUeXBlKGV2ZW50KTsKKyAgICAg
ICAgbV9tb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7CisgICAgICAgIG1fdGlt
ZXN0YW1wID0gY3VycmVudFRpbWUoKTsKKworICAgICAgICBtX2dlc3R1cmVTY2FsZSA9IGV2ZW50
Lmdlc3R1cmVTY2FsZTsKKyAgICAgICAgbV9nZXN0dXJlUm90YXRpb24gPSBldmVudC5nZXN0dXJl
Um90YXRpb247CisgICAgICAgIG1faXNHZXN0dXJlID0gZXZlbnQuaXNHZXN0dXJlOworICAgICAg
ICBtX3Bvc2l0aW9uID0gcG9pbnRGb3JFdmVudChldmVudCk7CisgICAgICAgIG1fZ2xvYmFsUG9z
aXRpb24gPSBnbG9iYWxQb2ludEZvckV2ZW50KGV2ZW50KTsKKworICAgICAgICB1bnNpZ25lZCB0
b3VjaENvdW50ID0gZXZlbnQudG91Y2hDb3VudDsKKyAgICAgICAgbV90b3VjaFBvaW50cy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHRvdWNoQ291bnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdG91Y2hDb3VudDsgKytpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlm
aWVyID0gWyhOU051bWJlciAqKVtldmVudC50b3VjaElkZW50aWZpZXJzIG9iamVjdEF0SW5kZXg6
aV0gdW5zaWduZWRJbnRWYWx1ZV07CisgICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbiA9IElu
dFBvaW50KFsoTlNWYWx1ZSAqKVtldmVudC50b3VjaExvY2F0aW9ucyBvYmplY3RBdEluZGV4Omld
IHBvaW50VmFsdWVdKTsKKyAgICAgICAgICAgIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQaGFz
ZVR5cGUgdG91Y2hQaGFzZSA9IGNvbnZlcnRUb3VjaFBoYXNlKFtldmVudC50b3VjaFBoYXNlcyBv
YmplY3RBdEluZGV4OmldKTsKKyAgICAgICAgICAgIG1fdG91Y2hQb2ludHMudW5jaGVja2VkQXBw
ZW5kKFBsYXRmb3JtVG91Y2hQb2ludEJ1aWxkZXIoaWRlbnRpZmllciwgbG9jYXRpb24sIHRvdWNo
UGhhc2UpKTsKKyAgICAgICAgfQorICAgIH0KK307CisKK1BsYXRmb3JtVG91Y2hFdmVudCBQbGF0
Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Ub3VjaEV2ZW50KFdlYkV2ZW50ICpldmVu
dCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1Ub3VjaEV2ZW50QnVpbGRlcihldmVudCk7Cit9Cisj
ZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2Fy
ZElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJ
T1MubW0KaW5kZXggMzIwZWE1MDQ5ODg1MTRlNzdlOTJhZGJhMTg1YjgxYmM5OGYwM2RkMi4uZTgz
NWE1MjA5YzVhOTA5NTFmNzM5YjRlMmE5YzhlYTMwZmQzMzdmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCkBAIC0yNCwx
MCArMjQsMTMgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBsYXRmb3Jt
UGFzdGVib2FyZC5oIgorCiAjaW1wb3J0ICJDb2xvci5oIgogI2ltcG9ydCAiVVJMLmgiCiAjaW1w
b3J0ICJJbWFnZS5oIgotI2ltcG9ydCAiUGxhdGZvcm1QYXN0ZWJvYXJkLmgiCisjaW1wb3J0ICJQ
YXN0ZWJvYXJkLmgiCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgIlNvZnRMaW5r
aW5nLmgiCiAKIFNPRlRfTElOS19GUkFNRVdPUksoVUlLaXQpCkBAIC0xNTIsMTIgKzE1NSwxMiBA
QCB2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZFdlYkNvbnRl
bnQmIGNvbnRlbnQpCiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25z
ID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKIAogICAgIGlm
IChjb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQpCi0gICAgICAgIFtyZXByZXNlbnRhdGlv
bnMgc2V0VmFsdWU6KE5TRGF0YSAqKWNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdC0+Y3Jl
YXRlTlNEYXRhKCkgZm9yS2V5OldlYkFyY2hpdmVQYm9hcmRUeXBlXTsKKyAgICAgICAgW3JlcHJl
c2VudGF0aW9ucyBzZXRWYWx1ZTooTlNEYXRhICopY29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9y
bWF0LT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBmb3JLZXk6V2ViQXJjaGl2ZVBib2FyZFR5cGVdOwog
CiAgICAgaWYgKGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCkKLSAgICAgICAgW3JlcHJlc2VudGF0
aW9ucyBzZXRWYWx1ZTpjb250ZW50LmRhdGFJblJURkRGb3JtYXQtPmNyZWF0ZU5TRGF0YSgpIGZv
cktleTooTlNTdHJpbmcgKilrVVRUeXBlUlRGRF07CisgICAgICAgIFtyZXByZXNlbnRhdGlvbnMg
c2V0VmFsdWU6Y29udGVudC5kYXRhSW5SVEZERm9ybWF0LT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBm
b3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVJURkRdOwogICAgIGlmIChjb250ZW50LmRhdGFJblJU
RkZvcm1hdCkKLSAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTpjb250ZW50LmRhdGFJ
blJURkZvcm1hdC0+Y3JlYXRlTlNEYXRhKCkgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVSVEZd
OworICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOmNvbnRlbnQuZGF0YUluUlRGRm9y
bWF0LT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVJURl07
CiAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTpjb250ZW50LmRhdGFJblN0cmluZ0Zvcm1h
dCBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVRleHRdOwogICAgIFttX3Bhc3RlYm9hcmQgc2V0
SXRlbXM6QFtyZXByZXNlbnRhdGlvbnMuZ2V0KCldXTsKIH0KQEAgLTE2Niw3ICsxNjksNyBAQCB2
b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZEltYWdlJiBwYXN0
ZWJvYXJkSW1hZ2UpCiB7CiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHJlcHJl
c2VudGF0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7
CiAgICAgaWYgKCFwYXN0ZWJvYXJkSW1hZ2UucmVzb3VyY2VNSU1FVHlwZS5pc051bGwoKSkgewot
ICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldE9iamVjdDpwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2Ut
PmRhdGEoKS0+Y3JlYXRlTlNEYXRhKCkgZm9yS2V5OnBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZU1J
TUVUeXBlXTsKKyAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRPYmplY3Q6cGFzdGVib2FyZElt
YWdlLmltYWdlLT5kYXRhKCktPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGZvcktleTpwYXN0ZWJvYXJk
SW1hZ2UucmVzb3VyY2VNSU1FVHlwZV07CiAgICAgICAgIFtyZXByZXNlbnRhdGlvbnMgc2V0T2Jq
ZWN0OihOU1N0cmluZyAqKXBhc3RlYm9hcmRJbWFnZS51cmwudXJsIGZvcktleTooTlNTdHJpbmcg
KilrVVRUeXBlVVJMXTsKICAgICB9CiAgICAgW21fcGFzdGVib2FyZCBzZXRJdGVtczpAW3JlcHJl
c2VudGF0aW9ucy5nZXQoKV1dOwpAQCAtMTc3LDcgKzE4MCw3IEBAIHZvaWQgUGxhdGZvcm1QYXN0
ZWJvYXJkOjp3cml0ZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcm
IHRleHQpCiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRv
cHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKIAogICAgIGlmIChwYXN0
ZWJvYXJkVHlwZSA9PSBTdHJpbmcoa1VUVHlwZVVSTCkpCi0gICAgICAgIFtyZXByZXNlbnRhdGlv
bnMgc2V0VmFsdWU6W2Fkb3B0TlMoW05TVVJMIGFsbG9jXSBpbml0V2l0aFN0cmluZzp0ZXh0XSku
Z2V0KCkgZm9yS2V5OnBhc3RlYm9hcmRUeXBlXTsKKyAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBz
ZXRWYWx1ZTphZG9wdE5TKFtbTlNVUkwgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHRdKS5nZXQo
KSBmb3JLZXk6cGFzdGVib2FyZFR5cGVdOwogICAgIGVsc2UgaWYgKCFwYXN0ZWJvYXJkVHlwZS5p
c051bGwoKSkKICAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTp0ZXh0IGZvcktleTpw
YXN0ZWJvYXJkVHlwZV07CiAgICAgW21fcGFzdGVib2FyZCBzZXRJdGVtczpAW3JlcHJlc2VudGF0
aW9ucy5nZXQoKV1dOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bs
YXRmb3JtU2NyZWVuSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3Jt
U2NyZWVuSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiZjIyMTBiY2E2ZTAxZDk2OTU3ZjI1YTQyNGViMTNh
MzY3ZTc2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
UGxhdGZvcm1TY3JlZW5JT1MubW0KQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCisKKyNpbXBv
cnQgIkZsb2F0UmVjdC5oIgorI2ltcG9ydCAiRnJhbWVWaWV3LmgiCisjaW1wb3J0ICJJbnRSZWN0
LmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgorI2ltcG9ydCAiV0FLV2luZG93LmgiCisj
aW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0ICJXaWRnZXQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitpbnQgc2NyZWVuSG9yaXpvbnRhbERQSShXaWRnZXQqKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBzY3JlZW5W
ZXJ0aWNhbERQSShXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK2ludCBzY3JlZW5EZXB0aChXaWRnZXQqKQoreworICAgIC8vIEFzc3VtZSAzMiBi
aXRzIHBlciBwaXhlbC4gU2VlIDxyZGFyOi8vcHJvYmxlbS85Mzc4ODI5Pi4KKyAgICByZXR1cm4g
MzI7Cit9CisKK2ludCBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqKQoreworICAgIC8v
IEFzc3VtZSB0aGUgc2NyZWVuIGRlcHRoIGlzIGV2ZW5seSBkaXZpZGVkIGludG8gZm91ciBjb2xv
ciBjb21wb25lbnRzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzkzNzg4Mjk+LgorICAgIHJldHVybiBz
Y3JlZW5EZXB0aCgwKSAvIDQ7Cit9CisKK2Jvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCop
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGVzZSBmdW5jdGlvbnMgc2NhbGUgYmV0
d2VlbiBzY3JlZW4gYW5kIHBhZ2UgY29vcmRpbmF0ZXMgYmVjYXVzZSBKYXZhU2NyaXB0L0RPTSBv
cGVyYXRpb25zIAorLy8gYXNzdW1lIHRoYXQgdGhlIHNjcmVlbiBhbmQgdGhlIHBhZ2Ugc2hhcmUg
dGhlIHNhbWUgY29vcmRpbmF0ZSBzeXN0ZW0uCitGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQq
IHdpZGdldCkKK3sKKyAgICBpZiAoIXdpZGdldCkKKyAgICAgICAgcmV0dXJuIENHUmVjdFplcm87
CisgICAgV0FLV2luZG93ICp3aW5kb3cgPSBbd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRv
d107CisgICAgaWYgKCF3aW5kb3cpCisgICAgICAgIHJldHVybiBbd2lkZ2V0LT5wbGF0Zm9ybVdp
ZGdldCgpIGZyYW1lXTsKKyAgICBDR1JlY3Qgc2NyZWVuUmVjdCA9IHsgQ0dQb2ludFplcm8sIFt3
aW5kb3cgc2NyZWVuU2l6ZV0gfTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChzY3JlZW5S
ZWN0KTsKK30KKworRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQp
Cit7CisgICAgaWYgKCF3aWRnZXQpCisgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOworICAgIFdB
S1dpbmRvdyAqd2luZG93ID0gW3dpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddOworICAg
IGlmICghd2luZG93KQorICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKKyAgICBDR1JlY3Qgc2Ny
ZWVuUmVjdCA9IHsgQ0dQb2ludFplcm8sIFt3aW5kb3cgYXZhaWxhYmxlU2NyZWVuU2l6ZV0gfTsK
KyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChzY3JlZW5SZWN0KTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjQwNWU3Njc2
YzFkYWQ3ZTkzYmI3MGRkNjg1YzZjMTc4MjMwZWRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW0KQEAg
LTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmgiCisKKyNpZiBQTEFURk9STShJ
T1MpCisKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKworI2luY2x1ZGUgIlBsYXRmb3Jt
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXNWb2ljZS5oIgorI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCisjaW5jbHVkZSA8QVZGb3Vu
ZGF0aW9uL0FWU3BlZWNoU3ludGhlc2lzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
CitTT0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19DTEFTUyhBVkZv
dW5kYXRpb24sIEFWU3BlZWNoU3ludGhlc2l6ZXIpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0
aW9uLCBBVlNwZWVjaFV0dGVyYW5jZSkKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFW
U3BlZWNoU3ludGhlc2lzVm9pY2UpCisKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24s
IEFWU3BlZWNoVXR0ZXJhbmNlRGVmYXVsdFNwZWVjaFJhdGUsIGZsb2F0KQorU09GVF9MSU5LX0NP
TlNUQU5UKEFWRm91bmRhdGlvbiwgQVZTcGVlY2hVdHRlcmFuY2VNYXhpbXVtU3BlZWNoUmF0ZSwg
ZmxvYXQpCisKKyNkZWZpbmUgQVZTcGVlY2hVdHRlcmFuY2VEZWZhdWx0U3BlZWNoUmF0ZSBnZXRB
VlNwZWVjaFV0dGVyYW5jZURlZmF1bHRTcGVlY2hSYXRlKCkKKyNkZWZpbmUgQVZTcGVlY2hVdHRl
cmFuY2VNYXhpbXVtU3BlZWNoUmF0ZSBnZXRBVlNwZWVjaFV0dGVyYW5jZU1heGltdW1TcGVlY2hS
YXRlKCkKKworI2RlZmluZSBBVlNwZWVjaFN5bnRoZXNpemVyQ2xhc3MgZ2V0QVZTcGVlY2hTeW50
aGVzaXplckNsYXNzKCkKKyNkZWZpbmUgQVZTcGVlY2hVdHRlcmFuY2VDbGFzcyBnZXRBVlNwZWVj
aFV0dGVyYW5jZUNsYXNzKCkKKyNkZWZpbmUgQVZTcGVlY2hTeW50aGVzaXNWb2ljZUNsYXNzIGdl
dEFWU3BlZWNoU3ludGhlc2lzVm9pY2VDbGFzcygpCisKK0BpbnRlcmZhY2UgV2ViU3BlZWNoU3lu
dGhlc2lzV3JhcHBlciA6IE5TT2JqZWN0PEFWU3BlZWNoU3ludGhlc2l6ZXJEZWxlZ2F0ZT4KK3sK
KyAgICBXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyKiBtX3N5bnRoZXNpemVyT2Jq
ZWN0OworICAgIC8vIEhvbGQgYSBSZWYgdG8gdGhlIHV0dGVyYW5jZSBzbyB0aGF0IGl0IHdvbid0
IGRpc2FwcGVhciB1bnRpbCB0aGUgc3ludGggaXMgZG9uZSB3aXRoIGl0LgorICAgIFJlZlB0cjxX
ZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZT4gbV91dHRlcmFuY2U7Cisg
ICAgCisgICAgUmV0YWluUHRyPEFWU3BlZWNoU3ludGhlc2l6ZXI+IG1fc3ludGhlc2l6ZXI7Cit9
CisKKy0gKFdlYlNwZWVjaFN5bnRoZXNpc1dyYXBwZXIgKilpbml0V2l0aFNwZWVjaFN5bnRoZXNp
emVyOihXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyKilzeW50aGVzaXplcjsKKy0g
KHZvaWQpc3BlYWtVdHRlcmFuY2U6KFBhc3NSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hT
eW50aGVzaXNVdHRlcmFuY2U+KXV0dGVyYW5jZTsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
V2ViU3BlZWNoU3ludGhlc2lzV3JhcHBlcgorCistIChXZWJTcGVlY2hTeW50aGVzaXNXcmFwcGVy
ICopaW5pdFdpdGhTcGVlY2hTeW50aGVzaXplcjooV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50
aGVzaXplciopc3ludGhlc2l6ZXIKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBtX3N5bnRoZXNpemVyT2JqZWN0ID0gc3lu
dGhlc2l6ZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGZsb2F0KW1hcFNwZWVjaFJhdGVU
b1BsYXRmb3JtUmF0ZTooZmxvYXQpcmF0ZQoreworICAgIC8vIFdlYlNwZWVjaCBzYXlzIHRvIGdv
IGZyb20gLjEgLT4gMTAgKGRlZmF1bHQgMSkKKyAgICAvLyBBVlNwZWVjaFN5bnRoZXNpemVyIGFz
a3MgZm9yIDAgLT4gMSAoZGVmYXVsdC4gNSkKKyAgICBpZiAocmF0ZSA8IDEpCisgICAgICAgIHJh
dGUgKj0gQVZTcGVlY2hVdHRlcmFuY2VEZWZhdWx0U3BlZWNoUmF0ZTsKKyAgICBlbHNlCisgICAg
ICAgIHJhdGUgPSBBVlNwZWVjaFV0dGVyYW5jZURlZmF1bHRTcGVlY2hSYXRlICsgKChyYXRlIC0g
MSkgKiAoQVZTcGVlY2hVdHRlcmFuY2VNYXhpbXVtU3BlZWNoUmF0ZSAtIEFWU3BlZWNoVXR0ZXJh
bmNlRGVmYXVsdFNwZWVjaFJhdGUpKTsKKyAgICAKKyAgICByZXR1cm4gcmF0ZTsKK30KKworLSAo
dm9pZClzcGVha1V0dGVyYW5jZTooUGFzc1JlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5
bnRoZXNpc1V0dGVyYW5jZT4pdXR0ZXJhbmNlCit7CisgICAgLy8gV2hlbiBzcGVhayBpcyBjYWxs
ZWQgd2Ugc2hvdWxkIG5vdCBoYXZlIGFuIGV4aXN0aW5nIHNwZWVjaCB1dHRlcmFuY2Ugb3V0c3Rh
bmRpbmcuCisgICAgQVNTRVJUKCFtX3V0dGVyYW5jZSk7CisgICAgQVNTRVJUKHV0dGVyYW5jZSk7
CisgICAgCisgICAgaWYgKCF1dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
ZiAoIW1fc3ludGhlc2l6ZXIpIHsKKyAgICAgICAgbV9zeW50aGVzaXplciA9IGFkb3B0TlMoW1tB
VlNwZWVjaFN5bnRoZXNpemVyQ2xhc3MgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW21fc3ludGhl
c2l6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgfQorCisgICAgLy8gQ2hvb3NlIHRoZSBiZXN0
IHZvaWNlLCBieSBmaXJzdCBsb29raW5nIGF0IHRoZSB1dHRlcmFuY2Ugdm9pY2UsIHRoZW4gdGhl
IHV0dGVyYW5jZSBsYW5ndWFnZSwKKyAgICAvLyB0aGVuIGNob29zZSB0aGUgZGVmYXVsdCBsYW5n
dWFnZS4KKyAgICBXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlKiB1dHRlcmFu
Y2VWb2ljZSA9IHV0dGVyYW5jZS0+dm9pY2UoKTsKKyAgICBOU1N0cmluZyAqdm9pY2VMYW5ndWFn
ZSA9IG5pbDsKKyAgICBpZiAoIXV0dGVyYW5jZVZvaWNlKSB7CisgICAgICAgIGlmICh1dHRlcmFu
Y2UtPmxhbmcoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICB2b2ljZUxhbmd1YWdlID0gW0FWU3Bl
ZWNoU3ludGhlc2lzVm9pY2VDbGFzcyBjdXJyZW50TGFuZ3VhZ2VDb2RlXTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdm9pY2VMYW5ndWFnZSA9IHV0dGVyYW5jZS0+bGFuZygpOworICAgIH0g
ZWxzZQorICAgICAgICB2b2ljZUxhbmd1YWdlID0gdXR0ZXJhbmNlLT52b2ljZSgpLT5sYW5nKCk7
CisgICAgCisgICAgQVZTcGVlY2hTeW50aGVzaXNWb2ljZSAqYXZWb2ljZSA9IG5pbDsKKyAgICBp
ZiAodm9pY2VMYW5ndWFnZSkKKyAgICAgICAgYXZWb2ljZSA9IFtBVlNwZWVjaFN5bnRoZXNpc1Zv
aWNlQ2xhc3Mgdm9pY2VXaXRoTGFuZ3VhZ2U6dm9pY2VMYW5ndWFnZV07CisKKyAgICBBVlNwZWVj
aFV0dGVyYW5jZSAqYXZVdHRlcmFuY2UgPSBbQVZTcGVlY2hVdHRlcmFuY2VDbGFzcyBzcGVlY2hV
dHRlcmFuY2VXaXRoU3RyaW5nOnV0dGVyYW5jZS0+dGV4dCgpXTsKKworICAgIFthdlV0dGVyYW5j
ZSBzZXRSYXRlOltzZWxmIG1hcFNwZWVjaFJhdGVUb1BsYXRmb3JtUmF0ZTp1dHRlcmFuY2UtPnJh
dGUoKV1dOworICAgIFthdlV0dGVyYW5jZSBzZXRWb2x1bWU6dXR0ZXJhbmNlLT52b2x1bWUoKV07
CisgICAgW2F2VXR0ZXJhbmNlIHNldFBpdGNoTXVsdGlwbGllcjp1dHRlcmFuY2UtPnBpdGNoKCld
OworICAgIFthdlV0dGVyYW5jZSBzZXRWb2ljZTphdlZvaWNlXTsKKyAgICBtX3V0dGVyYW5jZSA9
IHV0dGVyYW5jZTsKKyAgICAKKyAgICBbbV9zeW50aGVzaXplciBzcGVha1V0dGVyYW5jZTphdlV0
dGVyYW5jZV07Cit9CisKKy0gKHZvaWQpcGF1c2UKK3sKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgW21fc3ludGhlc2l6ZXIgcGF1c2VTcGVha2luZ0F0
Qm91bmRhcnk6QVZTcGVlY2hCb3VuZGFyeUltbWVkaWF0ZV07Cit9CisKKy0gKHZvaWQpcmVzdW1l
Cit7CisgICAgaWYgKCFtX3V0dGVyYW5jZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFtt
X3N5bnRoZXNpemVyIGNvbnRpbnVlU3BlYWtpbmddOworfQorCistICh2b2lkKWNhbmNlbAorewor
ICAgIGlmICghbV91dHRlcmFuY2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBbbV9zeW50
aGVzaXplciBzdG9wU3BlYWtpbmdBdEJvdW5kYXJ5OkFWU3BlZWNoQm91bmRhcnlJbW1lZGlhdGVd
OworfQorCistICh2b2lkKXNwZWVjaFN5bnRoZXNpemVyOihBVlNwZWVjaFN5bnRoZXNpemVyICop
c3ludGhlc2l6ZXIgZGlkU3RhcnRTcGVlY2hVdHRlcmFuY2U6KEFWU3BlZWNoVXR0ZXJhbmNlICop
dXR0ZXJhbmNlCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bnRoZXNpemVyKTsKKyAgICBVTlVTRURf
UEFSQU0odXR0ZXJhbmNlKTsKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgbV9zeW50aGVzaXplck9iamVjdC0+Y2xpZW50KCktPmRpZFN0YXJ0U3BlYWtp
bmcobV91dHRlcmFuY2UpOworfQorCistICh2b2lkKXNwZWVjaFN5bnRoZXNpemVyOihBVlNwZWVj
aFN5bnRoZXNpemVyICopc3ludGhlc2l6ZXIgZGlkRmluaXNoU3BlZWNoVXR0ZXJhbmNlOihBVlNw
ZWVjaFV0dGVyYW5jZSAqKXV0dGVyYW5jZQoreworICAgIFVOVVNFRF9QQVJBTShzeW50aGVzaXpl
cik7CisgICAgVU5VU0VEX1BBUkFNKHV0dGVyYW5jZSk7CisgICAgaWYgKCFtX3V0dGVyYW5jZSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIENsZWFyIHRoZSBtX3V0dGVyYW5jZSB2YXJp
YWJsZSBpbiBjYXNlIGZpbmlzaCBzcGVha2luZyBraWNrcyBvZmYgYSBuZXcgc3BlYWtpbmcgam9i
IGltbWVkaWF0ZWx5LgorICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZT4gcGxhdGZvcm1VdHRlcmFuY2UgPSBtX3V0dGVyYW5jZTsKKyAgICBtX3V0dGVy
YW5jZSA9IDA7CisgICAgCisgICAgbV9zeW50aGVzaXplck9iamVjdC0+Y2xpZW50KCktPmRpZEZp
bmlzaFNwZWFraW5nKHBsYXRmb3JtVXR0ZXJhbmNlKTsKK30KKworLSAodm9pZClzcGVlY2hTeW50
aGVzaXplcjooQVZTcGVlY2hTeW50aGVzaXplciAqKXN5bnRoZXNpemVyIGRpZFBhdXNlU3BlZWNo
VXR0ZXJhbmNlOihBVlNwZWVjaFV0dGVyYW5jZSAqKXV0dGVyYW5jZQoreworICAgIFVOVVNFRF9Q
QVJBTShzeW50aGVzaXplcik7CisgICAgVU5VU0VEX1BBUkFNKHV0dGVyYW5jZSk7CisgICAgaWYg
KCFtX3V0dGVyYW5jZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fc3ludGhlc2l6ZXJP
YmplY3QtPmNsaWVudCgpLT5kaWRQYXVzZVNwZWFraW5nKG1fdXR0ZXJhbmNlKTsKK30KKworLSAo
dm9pZClzcGVlY2hTeW50aGVzaXplcjooQVZTcGVlY2hTeW50aGVzaXplciAqKXN5bnRoZXNpemVy
IGRpZENvbnRpbnVlU3BlZWNoVXR0ZXJhbmNlOihBVlNwZWVjaFV0dGVyYW5jZSAqKXV0dGVyYW5j
ZQoreworICAgIFVOVVNFRF9QQVJBTShzeW50aGVzaXplcik7CisgICAgVU5VU0VEX1BBUkFNKHV0
dGVyYW5jZSk7CisgICAgaWYgKCFtX3V0dGVyYW5jZSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIG1fc3ludGhlc2l6ZXJPYmplY3QtPmNsaWVudCgpLT5kaWRSZXN1bWVTcGVha2luZyhtX3V0
dGVyYW5jZSk7Cit9CisKKy0gKHZvaWQpc3BlZWNoU3ludGhlc2l6ZXI6KEFWU3BlZWNoU3ludGhl
c2l6ZXIgKilzeW50aGVzaXplciBkaWRDYW5jZWxTcGVlY2hVdHRlcmFuY2U6KEFWU3BlZWNoVXR0
ZXJhbmNlICopdXR0ZXJhbmNlCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bnRoZXNpemVyKTsKKyAg
ICBVTlVTRURfUEFSQU0odXR0ZXJhbmNlKTsKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgLy8gQ2xlYXIgdGhlIG1fdXR0ZXJhbmNlIHZhcmlhYmxlIGlu
IGNhc2UgZmluaXNoIHNwZWFraW5nIGtpY2tzIG9mZiBhIG5ldyBzcGVha2luZyBqb2IgaW1tZWRp
YXRlbHkuCisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlPiBwbGF0Zm9ybVV0dGVyYW5jZSA9IG1fdXR0ZXJhbmNlOworICAgIG1fdXR0ZXJhbmNlID0g
MDsKKyAgICAKKyAgICBtX3N5bnRoZXNpemVyT2JqZWN0LT5jbGllbnQoKS0+ZGlkRmluaXNoU3Bl
YWtpbmcocGxhdGZvcm1VdHRlcmFuY2UpOworfQorCistICh2b2lkKXNwZWVjaFN5bnRoZXNpemVy
OihBVlNwZWVjaFN5bnRoZXNpemVyICopc3ludGhlc2l6ZXIgd2lsbFNwZWFrUmFuZ2VPZlNwZWVj
aFN0cmluZzooTlNSYW5nZSljaGFyYWN0ZXJSYW5nZSB1dHRlcmFuY2U6KEFWU3BlZWNoVXR0ZXJh
bmNlICopdXR0ZXJhbmNlCit7CisgICAgVU5VU0VEX1BBUkFNKHN5bnRoZXNpemVyKTsKKyAgICBV
TlVTRURfUEFSQU0odXR0ZXJhbmNlKTsKKyAgICAKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgLy8gaU9TIG9ubHkgc3VwcG9ydHMgd29yZCBib3VuZGFy
aWVzLgorICAgIG1fc3ludGhlc2l6ZXJPYmplY3QtPmNsaWVudCgpLT5ib3VuZGFyeUV2ZW50T2Nj
dXJyZWQobV91dHRlcmFuY2UsIFdlYkNvcmU6OlNwZWVjaFdvcmRCb3VuZGFyeSwgY2hhcmFjdGVy
UmFuZ2UubG9jYXRpb24pOworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGxh
dGZvcm1TcGVlY2hTeW50aGVzaXplcjo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcihQbGF0Zm9y
bVNwZWVjaFN5bnRoZXNpemVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3NwZWVjaFN5bnRoZXNp
emVyQ2xpZW50KGNsaWVudCkKK3sKK30KKworUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcjo6flBs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIoKQoreworfQorCit2b2lkIFBsYXRmb3JtU3BlZWNoU3lu
dGhlc2l6ZXI6OmluaXRpYWxpemVWb2ljZUxpc3QoKQoreworICAgIGZvciAoQVZTcGVlY2hTeW50
aGVzaXNWb2ljZSAqdm9pY2UgaW4gW0FWU3BlZWNoU3ludGhlc2lzVm9pY2VDbGFzcyBzcGVlY2hW
b2ljZXNdKSB7CisgICAgICAgIC8vIGlPUyBTcGVlY2ggdm9pY2VzIG9ubHkgZXhwb3NlIHRoZWly
IGxhbmd1YWdlIGFzIGFuIGlkZW50aWZ5aW5nIGFzcGVjdC4KKyAgICAgICAgTlNTdHJpbmcgKmxh
bmd1YWdlID0gW3ZvaWNlIGxhbmd1YWdlXTsKKyAgICAgICAgTlNTdHJpbmcgKnZvaWNlVVJJID0g
bGFuZ3VhZ2U7CisgICAgICAgIE5TU3RyaW5nICpuYW1lID0gbGFuZ3VhZ2U7CisgICAgICAgIGJv
b2wgaXNEZWZhdWx0ID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIG1fdm9pY2VMaXN0LmFwcGVu
ZChQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUodm9pY2VVUkksIG5hbWUsIGxh
bmd1YWdlLCB0cnVlLCBpc0RlZmF1bHQpKTsKKyAgICB9Cit9CisKK3ZvaWQgUGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXplcjo6cGF1c2UoKQoreworICAgIFttX3BsYXRmb3JtU3BlZWNoV3JhcHBlci5n
ZXQoKSBwYXVzZV07Cit9CisKK3ZvaWQgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcjo6cmVzdW1l
KCkKK3sKKyAgICBbbV9wbGF0Zm9ybVNwZWVjaFdyYXBwZXIuZ2V0KCkgcmVzdW1lXTsKK30KKwor
dm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpzcGVhayhQYXNzUmVmUHRyPFBsYXRmb3Jt
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPiB1dHRlcmFuY2UpCit7CisgICAgaWYgKCFtX3BsYXRm
b3JtU3BlZWNoV3JhcHBlcikKKyAgICAgICAgbV9wbGF0Zm9ybVNwZWVjaFdyYXBwZXIgPSBhZG9w
dE5TKFtbV2ViU3BlZWNoU3ludGhlc2lzV3JhcHBlciBhbGxvY10gaW5pdFdpdGhTcGVlY2hTeW50
aGVzaXplcjp0aGlzXSk7CisgICAgCisgICAgW21fcGxhdGZvcm1TcGVlY2hXcmFwcGVyLmdldCgp
IHNwZWFrVXR0ZXJhbmNlOnV0dGVyYW5jZS5nZXQoKV07Cit9CisKK3ZvaWQgUGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXplcjo6Y2FuY2VsKCkKK3sKKyAgICBbbV9wbGF0Zm9ybVNwZWVjaFdyYXBwZXIu
Z2V0KCkgY2FuY2VsXTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NTTEtleUdlbmVyYXRvcklP
Uy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU1NMS2V5R2VuZXJhdG9ySU9TLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iNGNjZTM3YzllN2M5N2RlNTAyYWQyZGM0N2FiODBkNzdhYTdlMTBmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NTTEtleUdlbmVy
YXRvcklPUy5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTU0xLZXlHZW5lcmF0
b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIGdldFN1cHBvcnRlZEtleVNpemVz
KFZlY3RvcjxTdHJpbmc+JikKK3sKK30KKworU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxs
ZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyYgY2hhbGxlbmdl
U3RyaW5nLCBjb25zdCBVUkwmKQoreworICAgIFVOVVNFRF9QQVJBTShrZXlTaXplSW5kZXgpOwor
ICAgIFVOVVNFRF9QQVJBTShjaGFsbGVuZ2VTdHJpbmcpOworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MGQxOTdiMzAxNmRhOGIyZDU1
NmQ4M2VlNTI1OWM1ODU4MGQ2OWZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgU2Nyb2xsQW5pbWF0b3JJT1NfaAorI2RlZmluZSBTY3JvbGxBbmltYXRv
cklPU19oCisKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorCisjaW5jbHVkZSAiSW50UG9p
bnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7
CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9ySU9TIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK3B1
YmxpYzoKKyAgICBTY3JvbGxBbmltYXRvcklPUyhTY3JvbGxhYmxlQXJlYSopOworICAgIHZpcnR1
YWwgflNjcm9sbEFuaW1hdG9ySU9TKCk7CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYp
IE9WRVJSSURFOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCBkZXRlcm1pbmVTY3JvbGxh
YmxlQXJlYUZvclRvdWNoU2VxdWVuY2UoY29uc3QgSW50U2l6ZSYgdG91Y2hEZWx0YSk7CisKKyAg
ICAvLyBTdGF0ZSBmb3IgaGFuZGxpbmcgc2VxdWVuY2VzIG9mIHRvdWNoZXMgaW4gZGVmYXVsdFRv
dWNoRXZlbnRIYW5kbGVyLgorICAgIGVudW0gQXhpc0xhdGNoIHsKKyAgICAgICAgQXhpc0xhdGNo
Tm90Q29tcHV0ZWQsCisgICAgICAgIEF4aXNMYXRjaE5vbmUsCisgICAgICAgIEF4aXNMYXRjaEhv
cml6b250YWwsCisgICAgICAgIEF4aXNMYXRjaFZlcnRpY2FsCisgICAgfTsKKyAgICBBeGlzTGF0
Y2ggbV90b3VjaFNjcm9sbEF4aXNMYXRjaDsKKyAgICBib29sIG1faW5Ub3VjaFNlcXVlbmNlOwor
ICAgIGJvb2wgbV9jb21taXR0ZWRUb1Njcm9sbEF4aXM7CisgICAgYm9vbCBtX3N0YXJ0ZWRTY3Jv
bGw7CisgICAgSW50UG9pbnQgbV9maXJzdFRvdWNoUG9pbnQ7CisgICAgSW50UG9pbnQgbV9sYXN0
VG91Y2hQb2ludDsKKworICAgIC8vIFdoZW4gd2UncmUgaW4gYSB0b3VjaCBzZXF1ZW5jZSwgdGhp
cyB3aWxsIHBvaW50IHRvIHRoZSBzY3JvbGxhYmxlIGFyZWEgdGhhdAorICAgIC8vIHNob3VsZCBh
Y3R1YWxseSBiZSBzY3JvbGxlZCBkdXJpbmcgdGhlIHNlcXVlbmNlLgorICAgIFNjcm9sbGFibGVB
cmVhKiBtX3Njcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcm9sbEFuaW1hdG9ySU9TX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxBbmltYXRvcklPUy5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
YWY1MjEyOGE1M2FkNzEwMDBhNzBkMGQxNmMzOGI0N2I1MTQwZTU5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tCkBAIC0w
LDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdG9ySU9TLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoRXZlbnRJT1MuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0
ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBTY3JvbGxBbmltYXRvcklPUyhzY3JvbGxhYmxlQXJlYSkpOworfQorCitTY3JvbGxBbmlt
YXRvcklPUzo6U2Nyb2xsQW5pbWF0b3JJT1MoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVh
KQorICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCisgICAgLCBtX3RvdWNoU2Ny
b2xsQXhpc0xhdGNoKEF4aXNMYXRjaE5vdENvbXB1dGVkKQorICAgICwgbV9pblRvdWNoU2VxdWVu
Y2UoZmFsc2UpCisgICAgLCBtX2NvbW1pdHRlZFRvU2Nyb2xsQXhpcyhmYWxzZSkKKyAgICAsIG1f
c3RhcnRlZFNjcm9sbChmYWxzZSkKKyAgICAsIG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVl
bmNlKDApCit7Cit9CisKK1Njcm9sbEFuaW1hdG9ySU9TOjp+U2Nyb2xsQW5pbWF0b3JJT1MoKQor
eworfQorCitib29sIFNjcm9sbEFuaW1hdG9ySU9TOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBs
YXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKK3sKKyAgICBpZiAodG91Y2hFdmVudC50eXBl
KCkgPT0gUGxhdGZvcm1FdmVudDo6VG91Y2hTdGFydCAmJiB0b3VjaEV2ZW50LnRvdWNoQ291bnQo
KSA9PSAxKSB7CisgICAgICAgIG1fZmlyc3RUb3VjaFBvaW50ID0gdG91Y2hFdmVudC50b3VjaExv
Y2F0aW9uQXRJbmRleCgwKTsKKyAgICAgICAgbV9sYXN0VG91Y2hQb2ludCA9IG1fZmlyc3RUb3Vj
aFBvaW50OworICAgICAgICBtX2luVG91Y2hTZXF1ZW5jZSA9IHRydWU7CisgICAgICAgIG1fY29t
bWl0dGVkVG9TY3JvbGxBeGlzID0gZmFsc2U7CisgICAgICAgIG1fc3RhcnRlZFNjcm9sbCA9IGZh
bHNlOworICAgICAgICBtX3RvdWNoU2Nyb2xsQXhpc0xhdGNoID0gQXhpc0xhdGNoTm90Q29tcHV0
ZWQ7CisgICAgICAgIC8vIE5ldmVyIGNsYWltIHRvIGhhdmUgaGFuZGxlZCB0aGUgVG91Y2hTdGFy
dCwgYmVjYXVzZSB0aGF0IHdpbGwga2lsbCBkZWZhdWx0IHNjcm9sbGluZyBiZWhhdmlvci4KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9pblRvdWNoU2VxdWVuY2Up
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh0b3VjaEV2ZW50LnR5cGUoKSA9PSBQ
bGF0Zm9ybUV2ZW50OjpUb3VjaEVuZCB8fCB0b3VjaEV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2
ZW50OjpUb3VjaENhbmNlbCkgeworICAgICAgICBtX2luVG91Y2hTZXF1ZW5jZSA9IGZhbHNlOwor
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZSA9IDA7CisgICAgICAgIGlm
IChtX3N0YXJ0ZWRTY3JvbGwpCisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLT5kaWRFbmRT
Y3JvbGwoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIElmIGEgc2Vj
b25kIHRvdWNoIGFwcGVhcnMsIGFzc3VtZSB0aGF0IHRoZSB1c2VyIGlzIHRyeWluZyB0byB6b29t
LCBhbmQgYmFpbCBvbiB0aGUgc2Nyb2xsaW5nIHNlcXVlbmNlLgorICAgIC8vIEZJWE1FOiBpZiB0
aGF0IHNlY29uZCB0b3VjaCBpcyBpbnNpZGUgdGhlIHNjcm9sbGFibGUgYXJlYSwgc2hvdWxkIHdl
IGtlZXAgc2Nyb2xsaW5nPworICAgIGlmICh0b3VjaEV2ZW50LnRvdWNoQ291bnQoKSAhPSAxKSB7
CisgICAgICAgIG1faW5Ub3VjaFNlcXVlbmNlID0gZmFsc2U7CisgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWFGb3JUb3VjaFNlcXVlbmNlID0gMDsKKyAgICAgICAgaWYgKG1fc3RhcnRlZFNjcm9sbCkK
KyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhKCktPmRpZEVuZFNjcm9sbCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIEludFBvaW50IGN1cnJlbnRQb2ludCA9IHRv
dWNoRXZlbnQudG91Y2hMb2NhdGlvbkF0SW5kZXgoMCk7CisKKyAgICBJbnRTaXplIHRvdWNoRGVs
dGEgPSBtX2xhc3RUb3VjaFBvaW50IC0gY3VycmVudFBvaW50OworICAgIG1fbGFzdFRvdWNoUG9p
bnQgPSBjdXJyZW50UG9pbnQ7CisKKyAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNl
cXVlbmNlKQorICAgICAgICBkZXRlcm1pbmVTY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2Uo
dG91Y2hEZWx0YSk7CisKKyAgICBpZiAoIW1fY29tbWl0dGVkVG9TY3JvbGxBeGlzKSB7CisgICAg
ICAgIGJvb2wgaG9yaXpvbnRhbGx5U2Nyb2xsYWJsZSA9IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9s
bFNpemUoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgICAgIGJvb2wgdmVydGljYWxseVNjcm9s
bGFibGUgPSBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKFZlcnRpY2FsU2Nyb2xsYmFyKTsK
KworICAgICAgICBpZiAoIWhvcml6b250YWxseVNjcm9sbGFibGUgJiYgIXZlcnRpY2FsbHlTY3Jv
bGxhYmxlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEludFNpemUgZGVs
dGFGcm9tU3RhcnQgPSBtX2ZpcnN0VG91Y2hQb2ludCAtIGN1cnJlbnRQb2ludDsKKyAgICAKKyAg
ICAgICAgY29uc3QgaW50IGxhdGNoQXhpc01vdmVtZW50VGhyZXNob2xkID0gMTA7CisgICAgICAg
IGlmICghaG9yaXpvbnRhbGx5U2Nyb2xsYWJsZSAmJiB2ZXJ0aWNhbGx5U2Nyb2xsYWJsZSkgewor
ICAgICAgICAgICAgbV90b3VjaFNjcm9sbEF4aXNMYXRjaCA9IEF4aXNMYXRjaFZlcnRpY2FsOwor
ICAgICAgICAgICAgaWYgKGFicyhkZWx0YUZyb21TdGFydC5oZWlnaHQoKSkgPj0gbGF0Y2hBeGlz
TW92ZW1lbnRUaHJlc2hvbGQpCisgICAgICAgICAgICAgICAgbV9jb21taXR0ZWRUb1Njcm9sbEF4
aXMgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKGhvcml6b250YWxseVNjcm9sbGFibGUgJiYg
IXZlcnRpY2FsbHlTY3JvbGxhYmxlKSB7CisgICAgICAgICAgICBtX3RvdWNoU2Nyb2xsQXhpc0xh
dGNoID0gQXhpc0xhdGNoSG9yaXpvbnRhbDsKKyAgICAgICAgICAgIGlmIChhYnMoZGVsdGFGcm9t
U3RhcnQud2lkdGgoKSkgPj0gbGF0Y2hBeGlzTW92ZW1lbnRUaHJlc2hvbGQpCisgICAgICAgICAg
ICAgICAgbV9jb21taXR0ZWRUb1Njcm9sbEF4aXMgPSB0cnVlOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbV9jb21taXR0ZWRUb1Njcm9sbEF4aXMgPSB0cnVlOworCisgICAgICAgICAg
ICBpZiAobV90b3VjaFNjcm9sbEF4aXNMYXRjaCA9PSBBeGlzTGF0Y2hOb3RDb21wdXRlZCkgewor
ICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGxvY2tBbmdsZURlZ3JlZXMgPSAyMDsKKyAgICAg
ICAgICAgICAgICBpZiAoZGVsdGFGcm9tU3RhcnQud2lkdGgoKSAmJiBkZWx0YUZyb21TdGFydC5o
ZWlnaHQoKSkgeworICAgICAgICAgICAgICAgICAgICBmbG9hdCBkcmFnQW5nbGUgPSBhdGFuZihm
YWJzZihkZWx0YUZyb21TdGFydC5oZWlnaHQoKSkgLyBmYWJzZihkZWx0YUZyb21TdGFydC53aWR0
aCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkcmFnQW5nbGUgPD0gZGVnMnJhZChsb2Nr
QW5nbGVEZWdyZWVzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdG91Y2hTY3JvbGxBeGlz
TGF0Y2ggPSBBeGlzTGF0Y2hIb3Jpem9udGFsOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChkcmFnQW5nbGUgPj0gZGVnMnJhZCg5MCAtIGxvY2tBbmdsZURlZ3JlZXMpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgbV90b3VjaFNjcm9sbEF4aXNMYXRjaCA9IEF4aXNMYXRjaFZlcnRpY2Fs
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKCFtX2NvbW1pdHRlZFRvU2Nyb2xsQXhpcykKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKKyAgICAKKyAgICAv
LyBIb3Jpem9udGFsCisgICAgaWYgKG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2ggIT0gQXhpc0xhdGNo
VmVydGljYWwpIHsKKyAgICAgICAgaW50IGRlbHRhID0gdG91Y2hEZWx0YS53aWR0aCgpOworICAg
ICAgICBoYW5kbGVkIHw9IG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlLT5zY3JvbGwo
ZGVsdGEgPCAwID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFJpZ2h0LCBTY3JvbGxCeVBpeGVsLCBmYWJz
ZihkZWx0YSkpOworICAgIH0KKyAgICAKKyAgICAvLyBWZXJ0aWNhbAorICAgIGlmIChtX3RvdWNo
U2Nyb2xsQXhpc0xhdGNoICE9IEF4aXNMYXRjaEhvcml6b250YWwpIHsKKyAgICAgICAgaW50IGRl
bHRhID0gdG91Y2hEZWx0YS5oZWlnaHQoKTsKKyAgICAgICAgaGFuZGxlZCB8PSBtX3Njcm9sbGFi
bGVBcmVhRm9yVG91Y2hTZXF1ZW5jZS0+c2Nyb2xsKGRlbHRhIDwgMCA/IFNjcm9sbFVwIDogU2Ny
b2xsRG93biwgU2Nyb2xsQnlQaXhlbCwgZmFic2YoZGVsdGEpKTsKKyAgICB9CisgICAgCisgICAg
Ly8gUmV0dXJuIGZhbHNlIHVudGlsIHdlIG1hbmFnZSB0byBzY3JvbGwgYXQgYWxsLCBhbmQgdGhl
biBrZWVwIHJldHVybmluZyB0cnVlIHVudGlsIHRoZSBnZXN0dXJlIGVuZHMuCisgICAgaWYgKCFt
X3N0YXJ0ZWRTY3JvbGwpIHsKKyAgICAgICAgaWYgKCFoYW5kbGVkKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBtX3N0YXJ0ZWRTY3JvbGwgPSB0cnVlOworICAgICAgICBzY3Jv
bGxhYmxlQXJlYSgpLT5kaWRTdGFydFNjcm9sbCgpOworICAgIH0gZWxzZSBpZiAoaGFuZGxlZCkK
KyAgICAgICAgc2Nyb2xsYWJsZUFyZWEoKS0+ZGlkVXBkYXRlU2Nyb2xsKCk7CisgICAgCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JJT1M6OmRldGVybWluZVNjcm9s
bGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sK
KyAgICBBU1NFUlQoIW1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlKTsKKworICAgIFNj
cm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSA9IG1fc2Nyb2xsYWJsZUFyZWE7CisgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYS0+aXNQaW5uZWRJbkJvdGhE
aXJlY3Rpb25zKHNjcm9sbERlbHRhKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIFNj
cm9sbGFibGVBcmVhKiBlbmNsb3NpbmdBcmVhID0gc2Nyb2xsYWJsZUFyZWEtPmVuY2xvc2luZ1Nj
cm9sbGFibGVBcmVhKCk7CisgICAgICAgIGlmICghZW5jbG9zaW5nQXJlYSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIHNjcm9sbGFibGVBcmVhID0gZW5jbG9zaW5nQXJlYTsKKyAgICB9
CisKKyAgICBBU1NFUlQoc2Nyb2xsYWJsZUFyZWEpOworICAgIG1fc2Nyb2xsYWJsZUFyZWFGb3JU
b3VjaFNlcXVlbmNlID0gc2Nyb2xsYWJsZUFyZWE7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxWaWV3SU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbFZpZXdJT1MubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjBiMGFkMTMyYmI0M2ViZjE2ZDBiN2YxNGFkOTVkYWE3NzlmYTQ3OAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxWaWV3SU9TLm1tCkBA
IC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCisKKyNpbXBvcnQgIkJsb2NrRXhjZXB0aW9u
cy5oIgorI2ltcG9ydCAiRmxvYXRSZWN0LmgiCisjaW1wb3J0ICJJbnRSZWN0LmgiCisjaW1wb3J0
ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgorI2ltcG9ydCAiV0FLQXBw
S2l0U3R1YnMuaCIKKyNpbXBvcnQgIldBS0NsaXBWaWV3LmgiCisjaW1wb3J0ICJXQUtTY3JvbGxW
aWV3LmgiCisjaW1wb3J0ICJXQUtWaWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAiV0FLV2luZG93Lmgi
CisjaW1wb3J0ICJXS1ZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJDb3JlRnJhbWVWaWV3Lmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5l
IE5TU2Nyb2xsVmlldzxXZWJDb3JlRnJhbWVTY3JvbGxWaWV3PiAqU2Nyb2xsVmlldzo6c2Nyb2xs
VmlldygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFwbGF0Zm9ybVdpZGdldCgpIHx8IFtwbGF0Zm9y
bVdpZGdldCgpIGlzS2luZE9mQ2xhc3M6W05TU2Nyb2xsVmlldyBjbGFzc11dKTsKKyAgICBBU1NF
UlQoIXBsYXRmb3JtV2lkZ2V0KCkgfHwgW3BsYXRmb3JtV2lkZ2V0KCkgY29uZm9ybXNUb1Byb3Rv
Y29sOkBwcm90b2NvbChXZWJDb3JlRnJhbWVTY3JvbGxWaWV3KV0pOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxOU1Njcm9sbFZpZXc8V2ViQ29yZUZyYW1lU2Nyb2xsVmlldz4gKj4ocGxhdGZvcm1X
aWRnZXQoKSk7Cit9CisKK05TVmlldyAqU2Nyb2xsVmlldzo6ZG9jdW1lbnRWaWV3KCkgY29uc3QK
K3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIFtzY3JvbGxW
aWV3KCkgZG9jdW1lbnRWaWV3XTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAg
IHJldHVybiBuaWw7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1BZGRDaGlsZChXaWRn
ZXQqIGNoaWxkKQoreworICAgIEFTU0VSVChjaGlsZCAhPSB0aGlzKTsKKworICAgIGNoaWxkLT5h
ZGRUb1N1cGVydmlldyhkb2N1bWVudFZpZXcoKSk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxh
dGZvcm1SZW1vdmVDaGlsZChXaWRnZXQqIGNoaWxkKQoreworICAgIGNoaWxkLT5yZW1vdmVGcm9t
U3VwZXJ2aWV3KCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxiYXJN
b2RlcygpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIFtzY3JvbGxW
aWV3KCkgc2V0U2Nyb2xsaW5nTW9kZXM6bV9ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSB2ZXJ0aWNh
bDptX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZSBhbmRMb2NrOk5PXTsKKyAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2Nyb2xsYmFyTW9k
ZXMoU2Nyb2xsYmFyTW9kZSYgaG9yaXpvbnRhbCwgU2Nyb2xsYmFyTW9kZSYgdmVydGljYWwpIGNv
bnN0Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIFtzY3JvbGxWaWV3
KCkgc2Nyb2xsaW5nTW9kZXM6Jmhvcml6b250YWwgdmVydGljYWw6JnZlcnRpY2FsXTsKKyAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3Jt
U2V0Q2FuQmxpdE9uU2Nyb2xsKGJvb2wgY2FuQmxpdE9uU2Nyb2xsKQoreworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBbW3Njcm9sbFZpZXcoKSBjb250ZW50Vmlld10gc2V0
Q29waWVzT25TY3JvbGw6Y2FuQmxpdE9uU2Nyb2xsXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOworfQorCitib29sIFNjcm9sbFZpZXc6OnBsYXRmb3JtQ2FuQmxpdE9uU2Nyb2xsKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gW1tzY3JvbGxWaWV3KCkgY29udGVudFZpZXddIGNvcGllc09u
U2Nyb2xsXTsKK30KKworSW50UmVjdCBTY3JvbGxWaWV3OjphY3R1YWxWaXNpYmxlQ29udGVudFJl
Y3QoKSBjb25zdAoreworICAgIENHUmVjdCByID0gQ0dSZWN0WmVybzsKKyAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisgICAgV0FLU2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19jYXN0
PFdBS1Njcm9sbFZpZXcgKj4ocGxhdGZvcm1XaWRnZXQoKSk7CisgICAgciA9IFt2aWV3IGFjdHVh
bERvY3VtZW50VmlzaWJsZVJlY3RdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cisg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qocik7Cit9CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6
dmlzaWJsZUV4dGVudENvbnRlbnRSZWN0KCkgY29uc3QKK3sKKyAgICBOU1Njcm9sbFZpZXcgKnZp
ZXcgPSBzdGF0aWNfY2FzdDxOU1Njcm9sbFZpZXcgKj4ocGxhdGZvcm1XaWRnZXQoKSk7CisKKyAg
ICBDR1JlY3QgciA9IENHUmVjdFplcm87CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltOU1Njcm9sbFZpZXcgY2xhc3NdXSkKKyAg
ICAgICAgciA9IFt2aWV3IGRvY3VtZW50VmlzaWJsZUV4dGVudF07CisgICAgZWxzZSBpZiAodmll
dykgeworICAgICAgICByLm9yaWdpbiA9IFt2aWV3IHZpc2libGVSZWN0XS5vcmlnaW47CisgICAg
ICAgIHIuc2l6ZSA9IFt2aWV3IGJvdW5kc10uc2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBGSVhNRTogV2ViS2l0MiBvbiBpT1MgZG9lc24ndCBpbmZvcm0gdGhlIFdlYlByb2Nlc3Mgb2Yg
dGhlIGV4cG9zZWQgYXJlYS4KKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgY29u
dGVudHNTaXplKCkpOworICAgIH0KKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cisg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qocik7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0
QWN0dWFsU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQoreworICAgIE5T
U2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19jYXN0PE5TU2Nyb2xsVmlldyAqPihwbGF0Zm9ybVdp
ZGdldCgpKTsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBpZiAoW3Zp
ZXcgaXNLaW5kT2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pCisgICAgICAgIFt2aWV3IHNl
dEFjdHVhbFNjcm9sbFBvc2l0aW9uOnBvc2l0aW9uXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOworfQorCitJbnRSZWN0IFNjcm9sbFZpZXc6OnBsYXRmb3JtVmlzaWJsZUNvbnRlbnRS
ZWN0KGJvb2wgaW5jbHVkZVNjcm9sbGJhcnMpIGNvbnN0Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworICAgIGlmIChpbmNsdWRlU2Nyb2xsYmFycykgeworICAgICAgICBpZiAo
TlNWaWV3KiBkb2N1bWVudFZpZXcgPSB0aGlzLT5kb2N1bWVudFZpZXcoKSkKKyAgICAgICAgICAg
IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KFtkb2N1bWVudFZpZXcgdmlzaWJsZVJlY3RdKTsKKyAg
ICB9CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoW3Njcm9sbFZpZXcoKSBkb2N1bWVudFZp
c2libGVSZWN0XSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4g
SW50UmVjdCgpOworfQorCitJbnRTaXplIFNjcm9sbFZpZXc6OnBsYXRmb3JtVmlzaWJsZUNvbnRl
bnRTaXplKGJvb2wgaW5jbHVkZVNjcm9sbGJhcnMpIGNvbnN0Cit7CisgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOworICAgIGlmIChpbmNsdWRlU2Nyb2xsYmFycykgeworICAgICAgICBp
ZiAoTlNWaWV3KiBkb2N1bWVudFZpZXcgPSB0aGlzLT5kb2N1bWVudFZpZXcoKSkKKyAgICAgICAg
ICAgIHJldHVybiBJbnRTaXplKFtkb2N1bWVudFZpZXcgdmlzaWJsZVJlY3RdLnNpemUpOworICAg
IH0KKworICAgIHJldHVybiBleHBhbmRlZEludFNpemUoRmxvYXRTaXplKFtzY3JvbGxWaWV3KCkg
ZG9jdW1lbnRWaXNpYmxlUmVjdF0uc2l6ZSkpOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisgICAgcmV0dXJuIEludFNpemUoKTsKK30KKworVGlsZUNhY2hlKiBTY3JvbGxWaWV3Ojp0
aWxlQ2FjaGUoKQoreworICAgIC8vIE1ha2UgdGlsZSBjYWNoZSBwb2ludGVyIGF2YWlsYWJsZSB2
aWEgdGhlIG1haW4gZnJhbWUgb25seS4gVGlsZSBjYWNoZSBpbnRlcmFjdGlvbiBzaG91bGQgYmUg
bWFuYWdlZCBieQorICAgIC8vIHRoZSBtYWluIGZyYW1lIGFuZCB0aGlzIGF2b2lkcyBoYXZpbmcg
dG8gYWRkIHBhcmVudCBjaGVja3MgdG8gYWxsIGNhbGwgc2l0ZXMuCisgICAgaWYgKHBhcmVudCgp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cisg
ICAgV0FLU2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19jYXN0PFdBS1Njcm9sbFZpZXcgKj4ocGxh
dGZvcm1XaWRnZXQoKSk7CisgICAgcmV0dXJuIFtbdmlldyB3aW5kb3ddIHRpbGVDYWNoZV07Cisg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0
Zm9ybVNldENvbnRlbnRzU2l6ZSgpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworICAgIGludCB3ID0gbV9jb250ZW50c1NpemUud2lkdGgoKTsKKyAgICBpbnQgaCA9IG1fY29u
dGVudHNTaXplLmhlaWdodCgpOworI2lmICFQTEFURk9STShJT1MpCisgICAgTE9HKEZyYW1lcywg
IiVwICVAIGF0IHcgJWQgaCAlZFxuIiwgZG9jdW1lbnRWaWV3KCksIFsoaWQpW2RvY3VtZW50Vmll
dygpIGNsYXNzXSBjbGFzc05hbWVdLCB3LCBoKTsgICAgICAgICAgICAKKyNlbHNlCisgICAgTE9H
KEZyYW1lcywgIiVwICVAIGF0IHcgJWQgaCAlZFxuIiwgZG9jdW1lbnRWaWV3KCksIE5TU3RyaW5n
RnJvbUNsYXNzKFtkb2N1bWVudFZpZXcoKSBjbGFzc10pLCB3LCBoKTsKKyNlbmRpZgorICAgIE5T
U2l6ZSB0ZW1wU2l6ZSA9IHsgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4obWF4KDAsIHcpKSwgc3RhdGlj
X2Nhc3Q8Q0dGbG9hdD4obWF4KDAsIGgpKSB9OyAvLyB3b3JrYXJvdW5kIGZvciA0MjEzMzE0Cisg
ICAgW2RvY3VtZW50VmlldygpIHNldEJvdW5kc1NpemU6dGVtcFNpemVdOworICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3Jv
bGxiYXJzU3VwcHJlc3NlZChib29sIHJlcGFpbnRPblVuc3VwcHJlc3MpCit7CisgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIFtzY3JvbGxWaWV3KCkgc2V0U2Nyb2xsQmFyc1N1
cHByZXNzZWQ6bV9zY3JvbGxiYXJzU3VwcHJlc3NlZAorICAgICAgICAgICAgICAgICAgICAgIHJl
cGFpbnRPblVuc3VwcHJlc3M6cmVwYWludE9uVW5zdXBwcmVzc107CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbFBv
c2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb2ludCkKK3sKKyAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CisgICAgTlNQb2ludCBmbG9hdFBvaW50ID0gc2Nyb2xsUG9pbnQ7Cisg
ICAgTlNQb2ludCB0ZW1wUG9pbnQgPSB7IG1heCgtW3Njcm9sbFZpZXcoKSBzY3JvbGxPcmlnaW5d
LngsIGZsb2F0UG9pbnQueCksIG1heCgtW3Njcm9sbFZpZXcoKSBzY3JvbGxPcmlnaW5dLnksIGZs
b2F0UG9pbnQueSkgfTsgIC8vIERvbid0IHVzZSBOU01ha2VQb2ludCB0byB3b3JrIGFyb3VuZCA0
MjEzMzE0LgorICAgIFtkb2N1bWVudFZpZXcoKSBzY3JvbGxQb2ludDp0ZW1wUG9pbnRdOworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZv
cm1TY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSkKK3sKKyAgICAvLyBG
SVhNRTogSXQgd291bGQgYmUgbmljZSB0byBpbXBsZW1lbnQgdGhpcyBzbyB0aGF0IGFsbCBvZiB0
aGUgY29kZSBpbiBXZWJGcmFtZVZpZXcgY291bGQgZ28gYXdheS4KKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVJl
cGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgLypub3cqLykK
K3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBOU1ZpZXcgKnZpZXcg
PSBkb2N1bWVudFZpZXcoKTsKKworICAgIFt2aWV3IHNldE5lZWRzRGlzcGxheUluUmVjdDpyZWN0
XTsgICAgCisgICAgLy8gRklYTUU6IEhhbmRsZSAibm93Ii4KKworICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Cit9CisKKy8vICJDb250YWluaW5nIFdpbmRvdyIgbWVhbnMgdGhlIE5TV2lu
ZG93J3MgY29vcmQgc3lzdGVtLCB3aGljaCBpcyBvcmlnaW4gbG93ZXIgbGVmdAorCitJbnRSZWN0
IFNjcm9sbFZpZXc6OnBsYXRmb3JtQ29udGVudHNUb1NjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBpZiAoTlNW
aWV3KiBkb2N1bWVudFZpZXcgPSB0aGlzLT5kb2N1bWVudFZpZXcoKSkgeworICAgICAgICBOU1Jl
Y3QgdGVtcFJlY3QgPSByZWN0OworICAgICAgICB0ZW1wUmVjdCA9IFtkb2N1bWVudFZpZXcgY29u
dmVydFJlY3Q6dGVtcFJlY3QgdG9WaWV3Om5pbF07CisgICAgICAgIHRlbXBSZWN0Lm9yaWdpbiA9
IFtbZG9jdW1lbnRWaWV3IHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjp0ZW1wUmVjdC5vcmln
aW5dOworICAgICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCh0ZW1wUmVjdCk7CisgICAgfQor
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30K
KworSW50UG9pbnQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JlZW5Ub0NvbnRlbnRzKGNvbnN0IElu
dFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisgICAgaWYgKE5TVmlldyogZG9jdW1lbnRWaWV3ID0gdGhpcy0+ZG9jdW1lbnRWaWV3KCkpIHsK
KyAgICAgICAgTlNQb2ludCB3aW5kb3dDb29yZCA9IFtbZG9jdW1lbnRWaWV3IHdpbmRvd10gY29u
dmVydFNjcmVlblRvQmFzZTogcG9pbnRdOworICAgICAgICByZXR1cm4gSW50UG9pbnQoW2RvY3Vt
ZW50VmlldyBjb252ZXJ0UG9pbnQ6d2luZG93Q29vcmQgZnJvbVZpZXc6bmlsXSk7CisgICAgfQor
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIEludFBvaW50KCk7Cit9
CisKK2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1Jc09mZnNjcmVlbigpIGNvbnN0Cit7CisgICAg
Ly8gRklYTUU6IERESzogU2Nyb2xsVmlld01hYy5tbSBhbHNvIGNoZWNrczogIVtbcGxhdGZvcm1X
aWRnZXQoKSB3aW5kb3ddIGlzVmlzaWJsZV0KKyAgICAvLyBidXQgLVtXQUtXaW5kb3cgaXNWaXNp
YmxlXSBkb2Vzbid0IGV4aXN0LgorICAgIHJldHVybiAhW3BsYXRmb3JtV2lkZ2V0KCkgd2luZG93
XTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbGJhck92ZXJsYXlTdHls
ZShTY3JvbGxiYXJPdmVybGF5U3R5bGUpCit7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZv
cm1TZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmIG9yaWdpbiwgYm9vbCB1cGRhdGVQb3Np
dGlvbkFsbCwgYm9vbCB1cGRhdGVQb3NpdGlvblN5bmNocm9ub3VzbHkpCit7CisgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIFtzY3JvbGxWaWV3KCkgc2V0U2Nyb2xsT3JpZ2lu
OnN0YXRpY19jYXN0PENHUG9pbnQ+KG9yaWdpbikgdXBkYXRlUG9zaXRpb25BdEFsbDp1cGRhdGVQ
b3NpdGlvbkFsbCBpbW1lZGlhdGVseTp1cGRhdGVQb3NpdGlvblN5bmNocm9ub3VzbHldOworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxiYXJUaGVtZUlPUy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1Njcm9sbGJhclRoZW1lSU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODU4MTYyYTgxZmFl
OTRkNWE1ZmNjNTU4NDMwNDIyNjEzNjk1ZTE0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxiYXJUaGVtZUlPUy5oCkBAIC0wLDAgKzEsNzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBT
Y3JvbGxiYXJUaGVtZUlPU19oCisjZGVmaW5lIFNjcm9sbGJhclRoZW1lSU9TX2gKKworI2luY2x1
ZGUgIlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgU2Nyb2xsYmFyVGhlbWVJT1MgOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUg
eworcHVibGljOgorICAgIFNjcm9sbGJhclRoZW1lSU9TKCk7CisgICAgdmlydHVhbCB+U2Nyb2xs
YmFyVGhlbWVJT1MoKTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXJUaGVtZUNs
aWVudCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpIE9WRVJS
SURFOworCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRy
b2xTaXplID0gUmVndWxhclNjcm9sbGJhcikgT1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgdmlydHVhbCBkb3VibGUgaW5pdGlhbEF1dG9zY3JvbGxUaW1lckRlbGF5KCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBkb3VibGUgYXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBPVkVSUklE
RTsKKworICAgIHZpcnR1YWwgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBidXR0b25zUGxhY2Vt
ZW50KCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTY3JvbGxi
YXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5y
ZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCopIE9WRVJSSURFOworCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIGhhc0J1dHRvbnMoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChTY3Jv
bGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnRSZWN0IGZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJh
clRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIEludFJlY3QgdHJhY2tSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50
KiwgYm9vbCBwYWludGluZyA9IGZhbHNlKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgaW50IG1p
bmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCopIE9WRVJSSURFOworICAgIAor
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50
KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgT1ZFUlJJREU7CisgICAgCitwdWJsaWM6Cisg
ICAgdm9pZCBwcmVmZXJlbmNlc0NoYW5nZWQoKTsKK307CisKK30KKworI2VuZGlmIC8vIFNjcm9s
bGJhclRoZW1lSU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9T
Y3JvbGxiYXJUaGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxi
YXJUaGVtZUlPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzc3NDUyNGQxYzgyYmJiZDk1ZmYzNzMzOGY0OTcy
NDBhOWMwMGZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1Njcm9sbGJhclRoZW1lSU9TLm1tCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTY3JvbGxiYXJUaGVtZUlPUy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgor
I2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitT
Y3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8U2Nyb2xsYmFyVGhlbWVJT1M+IHRoZW1lOworICAgIHJldHVybiAm
dGhlbWUuZ2V0KCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVJT1M6OnJlZ2lzdGVyU2Nyb2xs
YmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KikKK3sKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUlP
Uzo6dW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCopCit7Cit9CisKK1Nj
cm9sbGJhclRoZW1lSU9TOjpTY3JvbGxiYXJUaGVtZUlPUygpCit7Cit9CisKK1Njcm9sbGJhclRo
ZW1lSU9TOjp+U2Nyb2xsYmFyVGhlbWVJT1MoKQoreworfQorCit2b2lkIFNjcm9sbGJhclRoZW1l
SU9TOjpwcmVmZXJlbmNlc0NoYW5nZWQoKQoreworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVJT1M6
OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSkKK3sKKyAgICByZXR1cm4g
MDsKK30KKworZG91YmxlIFNjcm9sbGJhclRoZW1lSU9TOjppbml0aWFsQXV0b3Njcm9sbFRpbWVy
RGVsYXkoKQoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUgU2Nyb2xsYmFyVGhlbWVJT1M6
OmF1dG9zY3JvbGxUaW1lckRlbGF5KCkKK3sKKyAgICByZXR1cm4gMDsKK30KKyAgICAKK1Njcm9s
bGJhckJ1dHRvbnNQbGFjZW1lbnQgU2Nyb2xsYmFyVGhlbWVJT1M6OmJ1dHRvbnNQbGFjZW1lbnQo
KSBjb25zdAoreworICAgIHJldHVybiBTY3JvbGxiYXJCdXR0b25zTm9uZTsKK30KKworYm9vbCBT
Y3JvbGxiYXJUaGVtZUlPUzo6aGFzQnV0dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCopCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNjcm9sbGJhclRoZW1lSU9TOjpoYXNUaHVtYihT
Y3JvbGxiYXJUaGVtZUNsaWVudCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitJbnRSZWN0
IFNjcm9sbGJhclRoZW1lSU9TOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCos
IFNjcm9sbGJhclBhcnQsIGJvb2wgLypwYWludGluZyovKQoreworICAgIHJldHVybiBJbnRSZWN0
KCk7Cit9CisKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVJT1M6OmZvcndhcmRCdXR0b25SZWN0KFNj
cm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCAvKnBhaW50aW5nKi8pCit7
CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworSW50UmVjdCBTY3JvbGxiYXJUaGVtZUlPUzo6
dHJhY2tSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgYm9vbCAvKnBhaW50aW5nKi8pCit7Cisg
ICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworaW50IFNjcm9sbGJhclRoZW1lSU9TOjptaW5pbXVt
VGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKQoreworICAgIHJldHVybiAwOworfQor
Citib29sIFNjcm9sbGJhclRoZW1lSU9TOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVJT1M6OnBhaW50KFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgLypkYW1hZ2VSZWN0Ki8pCit7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25SZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25SZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OTcx
YWE1NDM1MWRhYWEzNTE5NDU4OGI1YjUyOTJhZTQ4YWNhOGFhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvblJlY3QuY3BwCkBAIC0wLDAgKzEs
OTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VsZWN0
aW9uUmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NlbGVjdGlvblJlY3Q6OlNlbGVj
dGlvblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBpc0hvcml6b250YWwsIGludCBjb2x1
bW5OdW1iZXIpCisgICAgOiBtX3JlY3QocmVjdCkKKyAgICAsIG1fZGlyZWN0aW9uKExUUikKKyAg
ICAsIG1fbWluWCgwKQorICAgICwgbV9tYXhYKDApCisgICAgLCBtX21heFkoMCkKKyAgICAsIG1f
bGluZU51bWJlcigwKQorICAgICwgbV9pc0xpbmVCcmVhayhmYWxzZSkKKyAgICAsIG1faXNGaXJz
dE9uTGluZShmYWxzZSkKKyAgICAsIG1faXNMYXN0T25MaW5lKGZhbHNlKQorICAgICwgbV9jb250
YWluc1N0YXJ0KGZhbHNlKQorICAgICwgbV9jb250YWluc0VuZChmYWxzZSkKKyAgICAsIG1faXNI
b3Jpem9udGFsKGlzSG9yaXpvbnRhbCkKKyAgICAsIG1faXNJbkZpeGVkUG9zaXRpb24oZmFsc2Up
CisgICAgLCBtX2lzUnVieVRleHQoZmFsc2UpCisgICAgLCBtX2NvbHVtbk51bWJlcihjb2x1bW5O
dW1iZXIpCit7Cit9CisKKy8vIEZJWE1FOiBXZSBzaG91bGQgbW92ZSBzb21lIG9mIHRoZXNlIGFy
Z3VtZW50cyB0byBhbiBhdXhpbGxhcnkgc3RydWN0LgorU2VsZWN0aW9uUmVjdDo6U2VsZWN0aW9u
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgaW50IG1p
blgsIGludCBtYXhYLCBpbnQgbWF4WSwKKyAgICBpbnQgbGluZU51bWJlciwgYm9vbCBpc0xpbmVC
cmVhaywgYm9vbCBpc0ZpcnN0T25MaW5lLCBib29sIGlzTGFzdE9uTGluZSwgYm9vbCBjb250YWlu
c1N0YXJ0LCBib29sIGNvbnRhaW5zRW5kLAorICAgIGJvb2wgaXNIb3Jpem9udGFsLCBib29sIGlz
SW5GaXhlZFBvc2l0aW9uLCBib29sIGlzUnVieVRleHQsIGludCBjb2x1bW5OdW1iZXIpCisgICAg
OiBtX3JlY3QocmVjdCkKKyAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKKyAgICAsIG1fbWlu
WChtaW5YKQorICAgICwgbV9tYXhYKG1heFgpCisgICAgLCBtX21heFkobWF4WSkKKyAgICAsIG1f
bGluZU51bWJlcihsaW5lTnVtYmVyKQorICAgICwgbV9pc0xpbmVCcmVhayhpc0xpbmVCcmVhaykK
KyAgICAsIG1faXNGaXJzdE9uTGluZShpc0ZpcnN0T25MaW5lKQorICAgICwgbV9pc0xhc3RPbkxp
bmUoaXNMYXN0T25MaW5lKQorICAgICwgbV9jb250YWluc1N0YXJ0KGNvbnRhaW5zU3RhcnQpCisg
ICAgLCBtX2NvbnRhaW5zRW5kKGNvbnRhaW5zRW5kKQorICAgICwgbV9pc0hvcml6b250YWwoaXNI
b3Jpem9udGFsKQorICAgICwgbV9pc0luRml4ZWRQb3NpdGlvbihpc0luRml4ZWRQb3NpdGlvbikK
KyAgICAsIG1faXNSdWJ5VGV4dChpc1J1YnlUZXh0KQorICAgICwgbV9jb2x1bW5OdW1iZXIoY29s
dW1uTnVtYmVyKQoreworfQorCitTZWxlY3Rpb25SZWN0OjpTZWxlY3Rpb25SZWN0KCkKKyAgICA6
IG1fZGlyZWN0aW9uKExUUikKKyAgICAsIG1fbWluWCgwKQorICAgICwgbV9tYXhYKDApCisgICAg
LCBtX21heFkoMCkKKyAgICAsIG1fbGluZU51bWJlcigwKQorICAgICwgbV9pc0xpbmVCcmVhayhm
YWxzZSkKKyAgICAsIG1faXNGaXJzdE9uTGluZShmYWxzZSkKKyAgICAsIG1faXNMYXN0T25MaW5l
KGZhbHNlKQorICAgICwgbV9jb250YWluc1N0YXJ0KGZhbHNlKQorICAgICwgbV9jb250YWluc0Vu
ZChmYWxzZSkKKyAgICAsIG1faXNIb3Jpem9udGFsKHRydWUpCisgICAgLCBtX2lzSW5GaXhlZFBv
c2l0aW9uKGZhbHNlKQorICAgICwgbV9pc1J1YnlUZXh0KGZhbHNlKQorICAgICwgbV9jb2x1bW5O
dW1iZXIoMCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvblJlY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25SZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWRjOTFmZGYxZTdjODA1
NmRjMDY5MjVhZjBkMjJiNDUzMGU3NTI5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25SZWN0LmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFNlbGVjdGlvblJlY3RfaAorI2RlZmluZSBTZWxlY3Rpb25SZWN0X2gK
KworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
ZWxlY3Rpb25SZWN0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBTZWxlY3Rpb25SZWN0KGNvbnN0IEludFJlY3QmLCBib29sIGlzSG9yaXpvbnRh
bCwgaW50IGNvbHVtbk51bWJlcik7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1vdmUgc29t
ZSBvZiB0aGVzZSBhcmd1bWVudHMgdG8gYW4gYXV4aWxsYXJ5IHN0cnVjdC4KKyAgICBTZWxlY3Rp
b25SZWN0KGNvbnN0IEludFJlY3QmLCBUZXh0RGlyZWN0aW9uLCBpbnQsIGludCwgaW50LCBpbnQs
IGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGludCk7Cisg
ICAgU2VsZWN0aW9uUmVjdCgpOworICAgIH5TZWxlY3Rpb25SZWN0KCkgeyB9CisKKyAgICBJbnRS
ZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworICAgIGludCBsb2dpY2FsTGVm
dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIb3Jpem9udGFsID8gbV9yZWN0LngoKSA6IG1fcmVjdC55
KCk7IH0KKyAgICBpbnQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250
YWwgPyBtX3JlY3Qud2lkdGgoKSA6IG1fcmVjdC5oZWlnaHQoKTsgfQorICAgIGludCBsb2dpY2Fs
VG9wKCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250YWwgPyBtX3JlY3QueSgpIDogbV9yZWN0
LngoKTsgfQorICAgIGludCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6
b250YWwgPyBtX3JlY3QuaGVpZ2h0KCkgOiBtX3JlY3Qud2lkdGgoKTsgfQorCisgICAgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQorICAgIGlu
dCBtaW5YKCkgY29uc3QgeyByZXR1cm4gbV9taW5YOyB9CisgICAgaW50IG1heFgoKSBjb25zdCB7
IHJldHVybiBtX21heFg7IH0KKyAgICBpbnQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4WTsg
fQorICAgIGludCBsaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9Cisg
ICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1faXNMaW5lQnJlYWs7IH0KKyAg
ICBib29sIGlzRmlyc3RPbkxpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RPbkxpbmU7IH0K
KyAgICBib29sIGlzTGFzdE9uTGluZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNMYXN0T25MaW5lOyB9
CisgICAgYm9vbCBjb250YWluc1N0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc1N0YXJ0
OyB9CisgICAgYm9vbCBjb250YWluc0VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNFbmQ7
IH0KKyAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIb3Jpem9udGFs
OyB9CisgICAgYm9vbCBpc0luRml4ZWRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNJbkZp
eGVkUG9zaXRpb247IH0KKyAgICBib29sIGlzUnVieVRleHQoKSBjb25zdCB7IHJldHVybiBtX2lz
UnVieVRleHQ7IH0KKyAgICBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1
bW5OdW1iZXI7IH0KKworICAgIHZvaWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1f
cmVjdCA9IHJlY3Q7IH0KKworICAgIHZvaWQgc2V0TG9naWNhbExlZnQoaW50IGxlZnQpCisgICAg
eworICAgICAgICBpZiAobV9pc0hvcml6b250YWwpCisgICAgICAgICAgICBtX3JlY3Quc2V0WChs
ZWZ0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9yZWN0LnNldFkobGVmdCk7CisgICAg
fQorCisgICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoaW50IHdpZHRoKQorICAgIHsKKyAgICAgICAg
aWYgKG1faXNIb3Jpem9udGFsKQorICAgICAgICAgICAgbV9yZWN0LnNldFdpZHRoKHdpZHRoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9yZWN0LnNldEhlaWdodCh3aWR0aCk7CisgICAg
fQorCisgICAgdm9pZCBzZXRMb2dpY2FsVG9wKGludCB0b3ApCisgICAgeworICAgICAgICBpZiAo
bV9pc0hvcml6b250YWwpCisgICAgICAgICAgICBtX3JlY3Quc2V0WSh0b3ApOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX3JlY3Quc2V0WCh0b3ApOworICAgIH0KKworICAgIHZvaWQgc2V0
TG9naWNhbEhlaWdodChpbnQgaGVpZ2h0KQorICAgIHsKKyAgICAgICAgaWYgKG1faXNIb3Jpem9u
dGFsKQorICAgICAgICAgICAgbV9yZWN0LnNldEhlaWdodChoZWlnaHQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX3JlY3Quc2V0V2lkdGgoaGVpZ2h0KTsKKyAgICB9CisKKyAgICB2b2lk
IHNldERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgeyBtX2RpcmVjdGlvbiA9IGRp
cmVjdGlvbjsgfQorICAgIHZvaWQgc2V0TWluWChpbnQgbWluWCkgeyBtX21pblggPSBtaW5YOyB9
CisgICAgdm9pZCBzZXRNYXhYKGludCBtYXhYKSB7IG1fbWF4WCA9IG1heFg7IH0KKyAgICB2b2lk
IHNldE1heFkoaW50IG1heFkpIHsgbV9tYXhZID0gbWF4WTsgfQorICAgIHZvaWQgc2V0TGluZU51
bWJlcihpbnQgbGluZU51bWJlcikgeyBtX2xpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOyB9CisgICAg
dm9pZCBzZXRJc0xpbmVCcmVhayhib29sIGlzTGluZUJyZWFrKSB7IG1faXNMaW5lQnJlYWsgPSBp
c0xpbmVCcmVhazsgfQorICAgIHZvaWQgc2V0SXNGaXJzdE9uTGluZShib29sIGlzRmlyc3RPbkxp
bmUpIHsgbV9pc0ZpcnN0T25MaW5lID0gaXNGaXJzdE9uTGluZTsgfQorICAgIHZvaWQgc2V0SXNM
YXN0T25MaW5lKGJvb2wgaXNMYXN0T25MaW5lKSB7IG1faXNMYXN0T25MaW5lID0gaXNMYXN0T25M
aW5lOyB9CisgICAgdm9pZCBzZXRDb250YWluc1N0YXJ0KGJvb2wgY29udGFpbnNTdGFydCkgeyBt
X2NvbnRhaW5zU3RhcnQgPSBjb250YWluc1N0YXJ0OyB9CisgICAgdm9pZCBzZXRDb250YWluc0Vu
ZChib29sIGNvbnRhaW5zRW5kKSB7IG1fY29udGFpbnNFbmQgPSBjb250YWluc0VuZDsgfQorICAg
IHZvaWQgc2V0SXNIb3Jpem9udGFsKGJvb2wgaXNIb3Jpem9udGFsKSB7IG1faXNIb3Jpem9udGFs
ID0gaXNIb3Jpem9udGFsOyB9CisKK3ByaXZhdGU6CisgICAgSW50UmVjdCBtX3JlY3Q7CisgICAg
VGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKKyAgICBpbnQgbV9taW5YOworICAgIGludCBtX21h
eFg7CisgICAgaW50IG1fbWF4WTsKKyAgICBpbnQgbV9saW5lTnVtYmVyOworICAgIGJvb2wgbV9p
c0xpbmVCcmVhazsKKyAgICBib29sIG1faXNGaXJzdE9uTGluZTsKKyAgICBib29sIG1faXNMYXN0
T25MaW5lOworICAgIGJvb2wgbV9jb250YWluc1N0YXJ0OworICAgIGJvb2wgbV9jb250YWluc0Vu
ZDsKKyAgICBib29sIG1faXNIb3Jpem9udGFsOworICAgIGJvb2wgbV9pc0luRml4ZWRQb3NpdGlv
bjsKKyAgICBib29sIG1faXNSdWJ5VGV4dDsKKyAgICBpbnQgbV9jb2x1bW5OdW1iZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTZWxlY3Rpb25SZWN0X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Tb3VuZElPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Tb3VuZElPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNGQ1NDkzMzQ1
NGUwMjFkNTkwMDFmOGY4MzJiY2M5YzcxN2Q4YjVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NvdW5kSU9TLm1tCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTb3VuZC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgc3lzdGVtQmVlcCgpIHsgTlNMb2coQCJXZWJjb3Jl
IE5TQmVlcCgpISIpOyB9ICAgIAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU3lzdGVtTWVtb3J5SU9TLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TeXN0ZW1NZW1vcnlJT1MuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0
MjIwYzUwNTE4N2E1NDg3ZTFmMzk2NDNhZDQyMGRiMTdhN2ZhYWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU3lzdGVtTWVtb3J5SU9TLmNwcApAQCAtMCww
ICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3lzdGVtTWVtb3J5Lmgi
CisKKyNpbmNsdWRlIDxtYWNoL21hY2guaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitpbnQgc3lzdGVtTWVtb3J5TGV2ZWwoKQoreworI2lmIFBM
QVRGT1JNKElPU19TSU1VTEFUT1IpCisgICAgcmV0dXJuIDM1OworI2Vsc2UKKyAgICBzdGF0aWMg
aW50IG1lbW9yeUZyZWVMZXZlbCA9IC0xOworICAgIHN0YXRpYyBkb3VibGUgcHJldmlvdXNDaGVj
a1RpbWU7IAorICAgIGRvdWJsZSB0aW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBpZiAodGltZSAt
IHByZXZpb3VzQ2hlY2tUaW1lIDwgMC4xKQorICAgICAgICByZXR1cm4gbWVtb3J5RnJlZUxldmVs
OworICAgIHByZXZpb3VzQ2hlY2tUaW1lID0gdGltZTsKKyAgICBzaXplX3Qgc2l6ZSA9IHNpemVv
ZihtZW1vcnlGcmVlTGV2ZWwpOworICAgIHN5c2N0bGJ5bmFtZSgia2Vybi5tZW1vcnlzdGF0dXNf
bGV2ZWwiLCAmbWVtb3J5RnJlZUxldmVsLCAmc2l6ZSwgbnVsbHB0ciwgMCk7CisgICAgcmV0dXJu
IG1lbW9yeUZyZWVMZXZlbDsKKyNlbmRpZgorfQorCisjaWYgIVBMQVRGT1JNKElPU19TSU1VTEFU
T1IpCitzdGF0aWMgaG9zdF9iYXNpY19pbmZvX2RhdGFfdCBnSG9zdEJhc2ljSW5mbzsKKworc3Rh
dGljIHZvaWQgaW5pdENhcGFiaWxpdGllcyh2b2lkKQoreworICAgIC8vIERpc2NvdmVyIG91ciBD
UFUgdHlwZQorICAgIG1hY2hfcG9ydF90IGhvc3QgPSBtYWNoX2hvc3Rfc2VsZigpOworICAgIG1h
Y2hfbXNnX3R5cGVfbnVtYmVyX3QgY291bnQgPSBIT1NUX0JBU0lDX0lORk9fQ09VTlQ7CisgICAg
a2Vybl9yZXR1cm5fdCByZXR1cm5WYWx1ZSA9IGhvc3RfaW5mbyhob3N0LCBIT1NUX0JBU0lDX0lO
Rk8sIHJlaW50ZXJwcmV0X2Nhc3Q8aG9zdF9pbmZvX3Q+KCZnSG9zdEJhc2ljSW5mbyksICZjb3Vu
dCk7CisgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgaG9zdCk7Cisg
ICAgaWYgKHJldHVyblZhbHVlICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgTE9HX0VSUk9SKCIl
cyA6IGhvc3RfaW5mbyglZCkgOiAlcy5cbiIsIF9fRlVOQ1RJT05fXywgcmV0dXJuVmFsdWUsIG1h
Y2hfZXJyb3Jfc3RyaW5nKHJldHVyblZhbHVlKSk7Cit9CisjZW5kaWYKKworc2l6ZV90IHN5c3Rl
bVRvdGFsTWVtb3J5KCkKK3sKKyNpZiBQTEFURk9STShJT1NfU0lNVUxBVE9SKQorICAgIHJldHVy
biA1MTIgKiAxMDI0ICogMTAyNDsKKyNlbHNlCisgICAgLy8gRklYTUU6IENvbnNpZGVyIHVzaW5n
IEMrKzExIHRocmVhZCBwcmltaXRpdmVzLgorICAgIHN0YXRpYyBwdGhyZWFkX29uY2VfdCBpbml0
Q29udHJvbCA9IFBUSFJFQURfT05DRV9JTklUOworCisgICAgcHRocmVhZF9vbmNlKCZpbml0Q29u
dHJvbCwgaW5pdENhcGFiaWxpdGllcyk7CisgICAgLy8gVGhlIHZhbHVlIGluIGdIb3N0QmFzaWNJ
bmZvLm1heF9tZW0gaXMgb2Z0ZW4gbG93ZXIgdGhhbiB0aGUgYW1vdW50IHdlJ3JlCisgICAgLy8g
aW50ZXJlc3RlZCBpbiAoZS5nLiwgZG9lcyB0aGlzIGRldmljZSBoYXZlIGF0IGxlYXN0IDI1Nk1C
IG9mIFJBTT8pCisgICAgLy8gUm91bmQgdGhlIHZhbHVlIHRvIHRoZSBuZWFyZXN0IHBvd2VyIG9m
IDIuCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oZXhwMihjZWlsKGxvZzIoZ0hvc3RC
YXNpY0luZm8ubWF4X21lbSkpKSk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RoZW1lSU9TLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGhlbWVJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2NjOWJh
NzNkOTE1NjRjMDMwNmRmYzZiYTFjYTVkYjQxOTcyOTMzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RoZW1lSU9TLmgKQEAgLTAsMCArMSw0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFRoZW1l
SU9TX2gKKyNkZWZpbmUgVGhlbWVJT1NfaAorCisjaW5jbHVkZSAiVGhlbWUuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBUaGVtZUlPUyA6IHB1YmxpYyBUaGVtZSB7CitwdWJsaWM6
CisgICAgVGhlbWVJT1MoKSB7IH0KKyAgICB2aXJ0dWFsIH5UaGVtZUlPUygpIHsgfQorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVGhlbWVJT1NfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RoZW1lSU9TLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1RoZW1lSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NmZjM2FiMmQ2YzFiMjJl
YjZmNWYyZTdkNzAwNTVhMjE1MzI5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvVGhlbWVJT1MubW0KQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRoZW1lSU9TLmgiCisKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9y
dCAiU2Nyb2xsVmlldy5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogSW1wbGVtZW50IGJlZm9yZSBlbmFibGluZyBVU0Uo
TkVXX1RIRU1FKS4KKworVGhlbWUqIHBsYXRmb3JtVGhlbWUoKQoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxUaGVtZUlPUz4gdGhlbWVJT1M7CisgICAgcmV0dXJuICZ0aGVtZUlPUy5nZXQo
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVD
YWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVDYWNoZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFlM2I5NTVhNTM4YzVhZjFkNDExZGUxMTc3ZmM3ZWJjNmU4Y2E2M2EKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLmgKQEAgLTAsMCAr
MSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRpbGVDYWNoZV9oCisjZGVmaW5lIFRpbGVD
YWNoZV9oCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWZkZWYg
X19PQkpDX18KK0BjbGFzcyBDQUxheWVyOworQGNsYXNzIFRpbGVDYWNoZVRvbWJzdG9uZTsKK0Bj
bGFzcyBUaWxlTGF5ZXI7CitAY2xhc3MgV0FLV2luZG93OworI2Vsc2UKK2NsYXNzIENBTGF5ZXI7
CitjbGFzcyBUaWxlQ2FjaGVUb21ic3RvbmU7CitjbGFzcyBUaWxlTGF5ZXI7CitjbGFzcyBXQUtX
aW5kb3c7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUaWxlR3JpZDsK
KworY2xhc3MgVGlsZUNhY2hlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlQ2FjaGUp
OworcHVibGljOgorICAgIFRpbGVDYWNoZShXQUtXaW5kb3cqKTsKKyAgICB+VGlsZUNhY2hlKCk7
CisKKyAgICBDR0Zsb2F0IHNjcmVlblNjYWxlKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldE5lZWRz
RGlzcGxheSgpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3Qm
KTsKKyAgICAKKyAgICB2b2lkIGxheW91dFRpbGVzKCk7CisgICAgdm9pZCBsYXlvdXRUaWxlc05v
dygpOworICAgIHZvaWQgbGF5b3V0VGlsZXNOb3dGb3JSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2b2lkIHJlbW92ZUFsbE5vblZpc2libGVUaWxlcygpOworICAgIHZvaWQgcmVtb3ZlQWxsVGls
ZXMoKTsKKyAgICB2b2lkIHJlbW92ZUZvcmVncm91bmRUaWxlcygpOworCisgICAgLy8gSWYgJ2Nv
bnRlbnRSZXBsYWNlbWVudEltYWdlJyBpcyBub3QgTlVMTCwgZHJhd0xheWVyKCkgZHJhd3MKKyAg
ICAvLyBjb250ZW50UmVwbGFjZW1lbnRJbWFnZSBpbnN0ZWFkIG9mIHRoZSBwYWdlIGNvbnRlbnQu
IFdlIGFzc3VtZSB0aGUKKyAgICAvLyBpbWFnZSBpcyB0byBiZSBkcmF3biBhdCB0aGUgb3JpZ2lu
IGFuZCBzY2FsZWQgdG8gbWF0Y2ggZGV2aWNlIHBpeGVscy4KKyAgICB2b2lkIHNldENvbnRlbnRS
ZXBsYWNlbWVudEltYWdlKFJldGFpblB0cjxDR0ltYWdlUmVmPik7CisgICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IGNvbnRlbnRSZXBsYWNlbWVudEltYWdlKCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dFRpbGVCb3JkZXJzVmlzaWJsZShib29sKTsKKyAgICBib29sIHRpbGVCb3JkZXJzVmlzaWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGlsZUJvcmRlcnNWaXNpYmxlOyB9CisKKyAgICB2b2lkIHNldFRp
bGVQYWludENvdW50ZXJzVmlzaWJsZShib29sKTsKKyAgICBib29sIHRpbGVQYWludENvdW50ZXJz
VmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVBhaW50Q291bnRlcnNWaXNpYmxlOyB9CisK
KyAgICB2b2lkIHNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1f
YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCA9IGVuYWJsZWQ7IH0KKyAgICBib29sIGFjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGVkRHJhd2luZ0Vu
YWJsZWQ7IH0KKworICAgIHZvaWQgc2V0S2VlcHNab29tZWRPdXRUaWxlcyhib29sKTsKKyAgICBi
b29sIGtlZXBzWm9vbWVkT3V0VGlsZXMoKSBjb25zdCB7IHJldHVybiBtX2tlZXBzWm9vbWVkT3V0
VGlsZXM7IH0KKworICAgIHZvaWQgc2V0Wm9vbWVkT3V0U2NhbGUoZmxvYXQpOworICAgIGZsb2F0
IHpvb21lZE91dFNjYWxlKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBzZXRDdXJyZW50U2NhbGUo
ZmxvYXQpOworICAgIGZsb2F0IGN1cnJlbnRTY2FsZSgpIGNvbnN0OworICAgIAorICAgIGJvb2wg
dGlsZXNPcGFxdWUoKSBjb25zdDsKKyAgICB2b2lkIHNldFRpbGVzT3BhcXVlKGJvb2wpOworICAg
IAorICAgIGVudW0gVGlsaW5nTW9kZSB7CisgICAgICAgIE5vcm1hbCwKKyAgICAgICAgTWluaW1h
bCwKKyAgICAgICAgUGFubmluZywKKyAgICAgICAgWm9vbWluZywKKyAgICAgICAgRGlzYWJsZWQs
CisgICAgICAgIFNjcm9sbFRvVG9wCisgICAgfTsKKyAgICBUaWxpbmdNb2RlIHRpbGluZ01vZGUo
KSBjb25zdCB7IHJldHVybiBtX3RpbGluZ01vZGU7IH0KKyAgICB2b2lkIHNldFRpbGluZ01vZGUo
VGlsaW5nTW9kZSk7CisKKyAgICB0eXBlZGVmIGVudW0geworICAgICAgICBUaWxpbmdEaXJlY3Rp
b25VcCwKKyAgICAgICAgVGlsaW5nRGlyZWN0aW9uRG93biwKKyAgICAgICAgVGlsaW5nRGlyZWN0
aW9uTGVmdCwKKyAgICAgICAgVGlsaW5nRGlyZWN0aW9uUmlnaHQsCisgICAgfSBUaWxpbmdEaXJl
Y3Rpb247CisgICAgdm9pZCBzZXRUaWxpbmdEaXJlY3Rpb24oVGlsaW5nRGlyZWN0aW9uKTsKKyAg
ICBUaWxpbmdEaXJlY3Rpb24gdGlsaW5nRGlyZWN0aW9uKCkgY29uc3Q7CisKKyAgICBib29sIGhh
c1BlbmRpbmdEcmF3KCkgY29uc3Q7CisKKyAgICB2b2lkIGhvc3RMYXllclNpemVDaGFuZ2VkKCk7
CisKKyAgICBzdGF0aWMgdm9pZCBzZXRMYXllclBvb2xDYXBhY2l0eSh1bnNpZ25lZCk7CisgICAg
c3RhdGljIHZvaWQgZHJhaW5MYXllclBvb2woKTsKKworICAgIC8vIExvZ2dpbmcKKyAgICB2b2lk
IGR1bXBUaWxlcygpOworCisgICAgLy8gSW50ZXJuYWwKKyAgICB2b2lkIGRvTGF5b3V0VGlsZXMo
KTsKKyAgICB2b2lkIGRyYXdMYXllcihUaWxlTGF5ZXIqLCBDR0NvbnRleHRSZWYpOworICAgIHZv
aWQgcHJlcGFyZVRvRHJhdygpOworICAgIHZvaWQgZmluaXNoZWRDcmVhdGluZ1RpbGVzKGJvb2wg
ZGlkQ3JlYXRlVGlsZXMsIGJvb2wgY3JlYXRlTW9yZSk7CisgICAgRmxvYXRSZWN0IHZpc2libGVS
ZWN0SW5MYXllcihDQUxheWVyICopIGNvbnN0OworICAgIENBTGF5ZXIqIGhvc3RMYXllcigpIGNv
bnN0OworICAgIHVuc2lnbmVkIHRpbGVDYXBhY2l0eUZvckdyaWQoVGlsZUdyaWQqKTsKKyAgICBD
b2xvciBjb2xvckZvckdyaWRUaWxlQm9yZGVyKFRpbGVHcmlkKikgY29uc3Q7CisKKyAgICB2b2lk
IGRvUGVuZGluZ1JlcGFpbnRzKCk7CisKKyAgICBib29sIGlzU3BlY3VsYXRpdmVUaWxlQ3JlYXRp
b25FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5h
YmxlZDsgfQorICAgIHZvaWQgc2V0U3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkKGJvb2wp
OworICAgIAorICAgIGVudW0gU3luY2hyb25vdXNUaWxlQ3JlYXRpb25Nb2RlIHsgQ292ZXJWaXNp
YmxlT25seSwgQ292ZXJTcGVjdWxhdGl2ZSB9OworCitwcml2YXRlOgorICAgIFRpbGVHcmlkKiBh
Y3RpdmVUaWxlR3JpZCgpIGNvbnN0OworICAgIFRpbGVHcmlkKiBpbmFjdGl2ZVRpbGVHcmlkKCkg
Y29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZVRpbGluZ01vZGUoKTsKKyAgICBib29sIGlzVGlsZUlu
dmFsaWRhdGlvblN1c3BlbmRlZCgpIGNvbnN0OworICAgIGJvb2wgaXNUaWxlQ3JlYXRpb25TdXNw
ZW5kZWQoKSBjb25zdDsKKyAgICB2b2lkIGZsdXNoU2F2ZWREaXNwbGF5UmVjdHMoKTsKKyAgICB2
b2lkIGludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQg
c2V0Wm9vbWVkT3V0U2NhbGVJbnRlcm5hbChmbG9hdCk7CisgICAgdm9pZCBjb21taXRTY2FsZUNo
YW5nZSgpOworICAgIHZvaWQgYnJpbmdBY3RpdmVUaWxlR3JpZFRvRnJvbnQoKTsKKyAgICB2b2lk
IGFkanVzdFRpbGVHcmlkVHJhbnNmb3JtcygpOworICAgIHZvaWQgcmVtb3ZlQWxsTm9uVmlzaWJs
ZVRpbGVzSW50ZXJuYWwoKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGVzSW5BY3RpdmVHcmlkKFN5bmNo
cm9ub3VzVGlsZUNyZWF0aW9uTW9kZSk7CisgICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2hGb3JQ
ZW5kaW5nUmVwYWludCgpOworCisgICAgdm9pZCB0aWxlQ3JlYXRpb25UaW1lckZpcmVkKFRpbWVy
PFRpbGVDYWNoZT4qKTsKKworICAgIHZvaWQgZHJhd1JlcGxhY2VtZW50SW1hZ2UoVGlsZUxheWVy
KiwgQ0dDb250ZXh0UmVmLCBDR0ltYWdlUmVmKTsKKyAgICB2b2lkIGRyYXdXaW5kb3dDb250ZW50
KFRpbGVMYXllciosIENHQ29udGV4dFJlZiwgQ0dSZWN0IGRpcnR5UmVjdCk7CisKKyAgICBXQUtX
aW5kb3cqIG1fd2luZG93OworCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1fY29udGVudFJl
cGxhY2VtZW50SW1hZ2U7CisKKyAgICBib29sIG1fa2VlcHNab29tZWRPdXRUaWxlczsKKworICAg
IGJvb2wgbV9oYXNQZW5kaW5nTGF5b3V0VGlsZXM7CisgICAgYm9vbCBtX2hhc1BlbmRpbmdVcGRh
dGVUaWxpbmdNb2RlOworICAgIC8vIEVuc3VyZSB0aGVyZSBhcmUgbm8gYXN5bmMgY2FsbHMgb24g
YSBkZWFkIHRpbGUgY2FjaGUuCisgICAgUmV0YWluUHRyPFRpbGVDYWNoZVRvbWJzdG9uZT4gbV90
b21ic3RvbmU7CisKKyAgICBUaWxpbmdNb2RlIG1fdGlsaW5nTW9kZTsKKyAgICBUaWxpbmdEaXJl
Y3Rpb24gbV90aWxpbmdEaXJlY3Rpb247CisKKyAgICBJbnRTaXplIG1fdGlsZVNpemU7CisgICAg
Ym9vbCBtX3RpbGVzT3BhcXVlOworCisgICAgYm9vbCBtX3RpbGVCb3JkZXJzVmlzaWJsZTsKKyAg
ICBib29sIG1fdGlsZVBhaW50Q291bnRlcnNWaXNpYmxlOworICAgIGJvb2wgbV9hY2NlbGVyYXRl
ZERyYXdpbmdFbmFibGVkOworICAgIGJvb2wgbV9pc1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5h
YmxlZDsKKworICAgIGJvb2wgbV9kaWRDYWxsV2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nOwor
ICAgIE93blB0cjxUaWxlR3JpZD4gbV96b29tZWRPdXRUaWxlR3JpZDsKKyAgICBPd25QdHI8VGls
ZUdyaWQ+IG1fem9vbWVkSW5UaWxlR3JpZDsKKworICAgIFRpbWVyPFRpbGVDYWNoZT4gbV90aWxl
Q3JlYXRpb25UaW1lcjsKKworICAgIFZlY3RvcjxJbnRSZWN0PiBtX3NhdmVkRGlzcGxheVJlY3Rz
OworCisgICAgZmxvYXQgbV9jdXJyZW50U2NhbGU7CisKKyAgICBmbG9hdCBtX3BlbmRpbmdTY2Fs
ZTsKKyAgICBmbG9hdCBtX3BlbmRpbmdab29tZWRPdXRTY2FsZTsKKworICAgIG11dGFibGUgTXV0
ZXggbV90aWxlTXV0ZXg7CisgICAgbXV0YWJsZSBNdXRleCBtX3NhdmVkRGlzcGxheVJlY3RNdXRl
eDsKKyAgICBtdXRhYmxlIE11dGV4IG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2VNdXRleDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwor
I2VuZGlmIC8vIFRpbGVDYWNoZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvVGlsZUNhY2hlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVDYWNo
ZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wY2VjMDdkNmJlM2E4N2ZmN2FlYzFiODU5MjM5ZjMwZDA4ZjVjY2E4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVDYWNo
ZS5tbQpAQCAtMCwwICsxLDgyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUaWxlQ2FjaGUuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIKKyNpbmNsdWRl
ICJTeXN0ZW1NZW1vcnkuaCIKKyNpbmNsdWRlICJUaWxlR3JpZC5oIgorI2luY2x1ZGUgIlRpbGVH
cmlkVGlsZS5oIgorI2luY2x1ZGUgIlRpbGVMYXllci5oIgorI2luY2x1ZGUgIlRpbGVMYXllclBv
b2wuaCIKKyNpbmNsdWRlICJXQUtXaW5kb3cuaCIKKyNpbmNsdWRlICJXS0dyYXBoaWNzLmgiCisj
aW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2luY2x1ZGUgIldlYkNvcmVUaHJl
YWRSdW4uaCIKKyNpbmNsdWRlIDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbmNsdWRlIDxR
dWFydHpDb3JlL1F1YXJ0ekNvcmVQcml2YXRlLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CisKK0BpbnRlcmZhY2UgV0FLVmlldyAoV2ViVmlld0V4dHJhcykKKy0gKHZvaWQpX2Rpc3Bh
dGNoVGlsZURpZERyYXc6KENBTGF5ZXIqKXRpbGU7CistICh2b2lkKV93aWxsU3RhcnRTY3JvbGxp
bmdPclpvb21pbmc7CistICh2b2lkKV9kaWRGaW5pc2hTY3JvbGxpbmdPclpvb21pbmc7CistICh2
b2lkKV9kaXNwYXRjaFRpbGVEaWREcmF3OworLSAodm9pZClfc2NoZWR1bGVMYXllckZsdXNoRm9y
UGVuZGluZ1RpbGVDYWNoZVJlcGFpbnQ7CitAZW5kCisKK0BpbnRlcmZhY2UgVGlsZUNhY2hlVG9t
YnN0b25lIDogTlNPYmplY3QgeworICAgIEJPT0wgZGVhZDsKK30KK0Bwcm9wZXJ0eShnZXR0ZXI9
aXNEZWFkKSBCT09MIGRlYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRpbGVDYWNoZVRv
bWJzdG9uZQorCitAc3ludGhlc2l6ZSBkZWFkOworCitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworVGlsZUNhY2hlOjpUaWxlQ2FjaGUoV0FLV2luZG93KiB3aW5kb3cpCisgICAgOiBtX3dp
bmRvdyh3aW5kb3cpCisgICAgLCBtX2tlZXBzWm9vbWVkT3V0VGlsZXMoZmFsc2UpCisgICAgLCBt
X2hhc1BlbmRpbmdMYXlvdXRUaWxlcyhmYWxzZSkKKyAgICAsIG1faGFzUGVuZGluZ1VwZGF0ZVRp
bGluZ01vZGUoZmFsc2UpCisgICAgLCBtX3RvbWJzdG9uZShhZG9wdE5TKFtbVGlsZUNhY2hlVG9t
YnN0b25lIGFsbG9jXSBpbml0XSkpCisgICAgLCBtX3RpbGluZ01vZGUoTm9ybWFsKQorICAgICwg
bV90aWxpbmdEaXJlY3Rpb24oVGlsaW5nRGlyZWN0aW9uRG93bikKKyAgICAsIG1fdGlsZVNpemUo
NTEyLCA1MTIpCisgICAgLCBtX3RpbGVzT3BhcXVlKHRydWUpCisgICAgLCBtX3RpbGVCb3JkZXJz
VmlzaWJsZShmYWxzZSkKKyAgICAsIG1fdGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKGZhbHNlKQor
ICAgICwgbV9hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKGZhbHNlKQorICAgICwgbV9pc1NwZWN1
bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCh0cnVlKQorICAgICwgbV9kaWRDYWxsV2lsbFN0YXJ0
U2Nyb2xsaW5nT3Jab29taW5nKGZhbHNlKQorICAgICwgbV96b29tZWRPdXRUaWxlR3JpZChQYXNz
T3duUHRyPFRpbGVHcmlkPigpKQorICAgICwgbV96b29tZWRJblRpbGVHcmlkKFBhc3NPd25QdHI8
VGlsZUdyaWQ+KCkpCisgICAgLCBtX3RpbGVDcmVhdGlvblRpbWVyKHRoaXMsICZUaWxlQ2FjaGU6
OnRpbGVDcmVhdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX2N1cnJlbnRTY2FsZSgxLmYpCisgICAg
LCBtX3BlbmRpbmdTY2FsZSgwKQorICAgICwgbV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUoMCkKK3sK
KyAgICBtX3pvb21lZE91dFRpbGVHcmlkID0gVGlsZUdyaWQ6OmNyZWF0ZSh0aGlzLCBtX3RpbGVT
aXplKTsKKyAgICBbaG9zdExheWVyKCkgaW5zZXJ0U3VibGF5ZXI6bV96b29tZWRPdXRUaWxlR3Jp
ZC0+dGlsZUhvc3RMYXllcigpIGF0SW5kZXg6MF07CisgICAgaG9zdExheWVyU2l6ZUNoYW5nZWQo
KTsKK30KKworVGlsZUNhY2hlOjp+VGlsZUNhY2hlKCkKK3sKKyAgICBbbV90b21ic3RvbmUuZ2V0
KCkgc2V0RGVhZDp0cnVlXTsKK30KKworQ0dGbG9hdCBUaWxlQ2FjaGU6OnNjcmVlblNjYWxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gW21fd2luZG93IHNjcmVlblNjYWxlXTsKK30KKworQ0FMYXll
ciogVGlsZUNhY2hlOjpob3N0TGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBbbV93aW5kb3cg
aG9zdExheWVyXTsKK30KKworRmxvYXRSZWN0IFRpbGVDYWNoZTo6dmlzaWJsZVJlY3RJbkxheWVy
KENBTGF5ZXIgKmxheWVyKSBjb25zdAoreworICAgIHJldHVybiBbbGF5ZXIgY29udmVydFJlY3Q6
W21fd2luZG93IGV4dGVuZGVkVmlzaWJsZVJlY3RdIGZyb21MYXllcjpob3N0TGF5ZXIoKV07Cit9
CisKK2Jvb2wgVGlsZUNhY2hlOjp0aWxlc09wYXF1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
dGlsZXNPcGFxdWU7Cit9CisgICAgCitUaWxlR3JpZCogVGlsZUNhY2hlOjphY3RpdmVUaWxlR3Jp
ZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2tlZXBzWm9vbWVkT3V0VGlsZXMpCisgICAgICAgIHJl
dHVybiBtX3pvb21lZE91dFRpbGVHcmlkLmdldCgpOworICAgIGlmIChtX3RpbGluZ01vZGUgPT0g
Wm9vbWluZykKKyAgICAgICAgcmV0dXJuIG1fem9vbWVkT3V0VGlsZUdyaWQuZ2V0KCk7CisgICAg
aWYgKG1fem9vbWVkSW5UaWxlR3JpZCAmJiBtX2N1cnJlbnRTY2FsZSA9PSBtX3pvb21lZEluVGls
ZUdyaWQtPnNjYWxlKCkpCisgICAgICAgIHJldHVybiBtX3pvb21lZEluVGlsZUdyaWQuZ2V0KCk7
CisgICAgcmV0dXJuIG1fem9vbWVkT3V0VGlsZUdyaWQuZ2V0KCk7Cit9CisKK1RpbGVHcmlkKiBU
aWxlQ2FjaGU6OmluYWN0aXZlVGlsZUdyaWQoKSBjb25zdAoreworICAgIHJldHVybiBhY3RpdmVU
aWxlR3JpZCgpID09IG1fem9vbWVkT3V0VGlsZUdyaWQgPyBtX3pvb21lZEluVGlsZUdyaWQuZ2V0
KCkgOiBtX3pvb21lZE91dFRpbGVHcmlkLmdldCgpOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0
VGlsZXNPcGFxdWUoYm9vbCBvcGFxdWUpCit7CisgICAgaWYgKG1fdGlsZXNPcGFxdWUgPT0gb3Bh
cXVlKQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0
ZXgpOworCisgICAgbV90aWxlc09wYXF1ZSA9IG9wYXF1ZTsKKyAgICBtX3pvb21lZE91dFRpbGVH
cmlkLT51cGRhdGVUaWxlT3BhY2l0eSgpOworICAgIGlmIChtX3pvb21lZEluVGlsZUdyaWQpCisg
ICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+dXBkYXRlVGlsZU9wYWNpdHkoKTsKK30KKwordm9p
ZCBUaWxlQ2FjaGU6OmRvTGF5b3V0VGlsZXMoKQoreworICAgIGlmIChpc1RpbGVDcmVhdGlvblN1
c3BlbmRlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90
aWxlTXV0ZXgpOworICAgIFRpbGVHcmlkKiBhY3RpdmVHcmlkID0gYWN0aXZlVGlsZUdyaWQoKTsK
KyAgICAvLyBFdmVuIHRob3VnaCB3ZSBhcmVuJ3QgYWN0dWFsbHkgY3JlYXRpbmcgdGlsZXMgaW4g
dGhlIGluYWN0aXZlIGdyaWQsIHdlCisgICAgLy8gc3RpbGwgbmVlZCB0byBkcm9wIGludmFsaWQg
dGlsZXMgaW4gcmVzcG9uc2UgdG8gYSBsYXlvdXQuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxl
bS85ODM5ODY3Pi4KKyAgICBpZiAoVGlsZUdyaWQqIGluYWN0aXZlR3JpZCA9IGluYWN0aXZlVGls
ZUdyaWQoKSkKKyAgICAgICAgaW5hY3RpdmVHcmlkLT5kcm9wSW52YWxpZFRpbGVzKCk7CisgICAg
aWYgKGFjdGl2ZUdyaWQtPmNoZWNrRG9TaW5nbGVUaWxlTGF5b3V0KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBjcmVhdGVUaWxlc0luQWN0aXZlR3JpZChDb3ZlclZpc2libGVPbmx5KTsKK30KKwor
dm9pZCBUaWxlQ2FjaGU6Omhvc3RMYXllclNpemVDaGFuZ2VkKCkKK3sKKyAgICBtX3pvb21lZE91
dFRpbGVHcmlkLT51cGRhdGVIb3N0TGF5ZXJTaXplKCk7CisgICAgaWYgKG1fem9vbWVkSW5UaWxl
R3JpZCkKKyAgICAgICAgbV96b29tZWRJblRpbGVHcmlkLT51cGRhdGVIb3N0TGF5ZXJTaXplKCk7
Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRLZWVwc1pvb21lZE91dFRpbGVzKGJvb2wga2VlcCkK
K3sKKyAgICBtX2tlZXBzWm9vbWVkT3V0VGlsZXMgPSBrZWVwOworfQorCit2b2lkIFRpbGVDYWNo
ZTo6c2V0Q3VycmVudFNjYWxlKGZsb2F0IHNjYWxlKQoreworICAgIEFTU0VSVChzY2FsZSA+IDAp
OworCisgICAgaWYgKGN1cnJlbnRTY2FsZSgpID09IHNjYWxlKSB7CisgICAgICAgIG1fcGVuZGlu
Z1NjYWxlID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BlbmRpbmdTY2FsZSA9
IHNjYWxlOworICAgIGlmIChtX3RpbGluZ01vZGUgPT0gRGlzYWJsZWQpCisgICAgICAgIHJldHVy
bjsKKyAgICBjb21taXRTY2FsZUNoYW5nZSgpOworCisgICAgaWYgKCFrZWVwc1pvb21lZE91dFRp
bGVzKCkgJiYgIWlzVGlsZUludmFsaWRhdGlvblN1c3BlbmRlZCgpKSB7CisgICAgICAgIC8vIFRp
bGUgaW52YWxpZGF0aW9uIGlzIG5vcm1hbGx5IHN1c3BlbmRlZCBkdXJpbmcgem9vbWluZyBieSBV
SUtpdCBidXQgc29tZSBhcHBsaWNhdGlvbnMKKyAgICAgICAgLy8gdXNpbmcgY3VzdG9tIHNjcm9s
bHZpZXdzIG1heSB6b29tIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgY2FsbGJhY2tzLiBJbnZhbGlk
YXRlIHRoZSB0aWxlcyBleHBsaWNpdGx5LgorICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90
aWxlTXV0ZXgpOworICAgICAgICBhY3RpdmVUaWxlR3JpZCgpLT5kcm9wQWxsVGlsZXMoKTsKKyAg
ICAgICAgYWN0aXZlVGlsZUdyaWQoKS0+Y3JlYXRlVGlsZXMoQ292ZXJWaXNpYmxlT25seSk7Cisg
ICAgfQorfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0Wm9vbWVkT3V0U2NhbGUoZmxvYXQgc2NhbGUp
Cit7CisgICAgQVNTRVJUKHNjYWxlID4gMCk7CisKKyAgICBpZiAoem9vbWVkT3V0U2NhbGUoKSA9
PSBzY2FsZSkgeworICAgICAgICBtX3BlbmRpbmdab29tZWRPdXRTY2FsZSA9IDA7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUgPSBzY2FsZTsKKyAg
ICBpZiAobV90aWxpbmdNb2RlID09IERpc2FibGVkKQorICAgICAgICByZXR1cm47CisgICAgY29t
bWl0U2NhbGVDaGFuZ2UoKTsKK30KKyAgICAKK3ZvaWQgVGlsZUNhY2hlOjpjb21taXRTY2FsZUNo
YW5nZSgpCit7CisgICAgQVNTRVJUKG1fcGVuZGluZ1pvb21lZE91dFNjYWxlIHx8IG1fcGVuZGlu
Z1NjYWxlKTsKKyAgICBBU1NFUlQobV90aWxpbmdNb2RlICE9IERpc2FibGVkKTsKKyAgICAKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworCisgICAgaWYgKG1fcGVuZGluZ1pv
b21lZE91dFNjYWxlKSB7CisgICAgICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnNldFNjYWxlKG1f
cGVuZGluZ1pvb21lZE91dFNjYWxlKTsKKyAgICAgICAgbV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUg
PSAwOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fa2VlcHNab29tZWRPdXRUaWxlcykgeworICAg
ICAgICBBU1NFUlQoYWN0aXZlVGlsZUdyaWQoKSA9PSBtX3pvb21lZE91dFRpbGVHcmlkKTsKKyAg
ICAgICAgaWYgKG1fcGVuZGluZ1NjYWxlKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRTY2FsZSA9
IG1fcGVuZGluZ1NjYWxlOworICAgICAgICAgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+c2V0U2Nh
bGUobV9jdXJyZW50U2NhbGUpOworICAgICAgICB9CisgICAgICAgIG1fcGVuZGluZ1NjYWxlID0g
MDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BlbmRpbmdTY2FsZSkgewor
ICAgICAgICBtX2N1cnJlbnRTY2FsZSA9IG1fcGVuZGluZ1NjYWxlOworICAgICAgICBtX3BlbmRp
bmdTY2FsZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1fY3VycmVudFNjYWxlICE9IG1fem9vbWVk
T3V0VGlsZUdyaWQtPnNjYWxlKCkpIHsKKyAgICAgICAgaWYgKCFtX3pvb21lZEluVGlsZUdyaWQp
IHsKKyAgICAgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZCA9IFRpbGVHcmlkOjpjcmVhdGUodGhp
cywgbV90aWxlU2l6ZSk7CisgICAgICAgICAgICBbaG9zdExheWVyKCkgYWRkU3VibGF5ZXI6bV96
b29tZWRJblRpbGVHcmlkLT50aWxlSG9zdExheWVyKCldOworICAgICAgICAgICAgaG9zdExheWVy
U2l6ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPnNl
dFNjYWxlKG1fY3VycmVudFNjYWxlKTsKKyAgICB9CisKKyAgICAvLyBLZWVwIHRoZSBjdXJyZW50
IG9yZGVyaW5nIGR1cmluZyB6b29taW5nLgorICAgIGlmIChtX3RpbGluZ01vZGUgIT0gWm9vbWlu
ZykKKyAgICAgICAgYnJpbmdBY3RpdmVUaWxlR3JpZFRvRnJvbnQoKTsKKworICAgIGFkanVzdFRp
bGVHcmlkVHJhbnNmb3JtcygpOworICAgIGxheW91dFRpbGVzKCk7Cit9CisKK3ZvaWQgVGlsZUNh
Y2hlOjpicmluZ0FjdGl2ZVRpbGVHcmlkVG9Gcm9udCgpCit7CisgICAgVGlsZUdyaWQqIGFjdGl2
ZUdyaWQgPSBhY3RpdmVUaWxlR3JpZCgpOworICAgIFRpbGVHcmlkKiBvdGhlckdyaWQgPSBpbmFj
dGl2ZVRpbGVHcmlkKCk7CisgICAgaWYgKCFvdGhlckdyaWQpCisgICAgICAgIHJldHVybjsKKyAg
ICBDQUxheWVyKiBmcm9udExheWVyID0gYWN0aXZlR3JpZC0+dGlsZUhvc3RMYXllcigpOworICAg
IENBTGF5ZXIqIG90aGVyTGF5ZXIgPSBvdGhlckdyaWQtPnRpbGVIb3N0TGF5ZXIoKTsKKyAgICBb
aG9zdExheWVyKCkgaW5zZXJ0U3VibGF5ZXI6ZnJvbnRMYXllciBhYm92ZTpvdGhlckxheWVyXTsK
K30KKyAgICAKK3ZvaWQgVGlsZUNhY2hlOjphZGp1c3RUaWxlR3JpZFRyYW5zZm9ybXMoKQorewor
ICAgIENBTGF5ZXIqIHpvb21lZE91dEhvc3RMYXllciA9IG1fem9vbWVkT3V0VGlsZUdyaWQtPnRp
bGVIb3N0TGF5ZXIoKTsKKyAgICBmbG9hdCB0cmFuc2Zvcm1TY2FsZSA9IGN1cnJlbnRTY2FsZSgp
IC8gem9vbWVkT3V0U2NhbGUoKTsKKyAgICBbem9vbWVkT3V0SG9zdExheWVyIHNldFRyYW5zZm9y
bTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKHRyYW5zZm9ybVNjYWxlLCB0cmFuc2Zvcm1TY2FsZSwg
MS4wZildOworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnVwZGF0ZUhvc3RMYXllclNpemUoKTsK
K30KKwordm9pZCBUaWxlQ2FjaGU6OmxheW91dFRpbGVzKCkKK3sKKyAgICBpZiAobV9oYXNQZW5k
aW5nTGF5b3V0VGlsZXMpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhc1BlbmRpbmdMYXlvdXRU
aWxlcyA9IHRydWU7CisKKyAgICBUaWxlQ2FjaGVUb21ic3RvbmUgKnRvbWJzdG9uZSA9IG1fdG9t
YnN0b25lLmdldCgpOworICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBpZiAoW3RvbWJzdG9u
ZSBpc0RlYWRdKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2hhc1BlbmRpbmdMYXlv
dXRUaWxlcyA9IGZhbHNlOworICAgICAgICBkb0xheW91dFRpbGVzKCk7CisgICAgfSk7Cit9CisK
K3ZvaWQgVGlsZUNhY2hlOjpsYXlvdXRUaWxlc05vdygpCit7CisgICAgQVNTRVJUKFdlYlRocmVh
ZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsKKworICAgIC8vIGxheW91dFRpbGVzTm93KCkgaXMgY2Fs
bGVkIGFmdGVyIGEgem9vbSwgd2hpbGUgdGhlIHRpbGUgbW9kZSBpcyBzdGlsbCBzZXQgdG8gWm9v
bWluZy4KKyAgICAvLyBJZiB3ZSBjaGVja2VkIGZvciBpc1RpbGVDcmVhdGlvblN1c3BlbmRlZCBo
ZXJlLCB0aGF0IHdvdWxkIGNhdXNlIDxyZGFyOi8vcHJvYmxlbS84NDM0MTEyPiAoUGFnZSBmbGFz
aGVzIGFmdGVyIHpvb21pbmcgaW4vb3V0KS4KKyAgICBpZiAobV90aWxpbmdNb2RlID09IERpc2Fi
bGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gRklYTUU6IGxheW91dFRpbGVzTm93
IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgc3RhdGUgaGFzIGJlZW4gc2V0IHRvIG5vbi16b29taW5n
IGFuZCB0aGUgYWN0aXZlIGdyaWQgaXMgdGhlIGZpbmFsIG9uZS4gCisgICAgLy8gRml4IHRoaXMg
aW4gVUlLaXQgc2lkZSAocGVyaGFwcyBhbHNvIGdldHRpbmcgcmlkIG9mIHRoaXMgY2FsbCkgYW5k
IHJlbW92ZSB0aGlzIGNvZGUgYWZ0ZXJ3YXJkcy4KKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vOTY3
Mjk5Mz4KKyAgICBUaWxpbmdNb2RlIHNhdmVkVGlsaW5nTW9kZSA9IG1fdGlsaW5nTW9kZTsKKyAg
ICBpZiAobV90aWxpbmdNb2RlID09IFpvb21pbmcpCisgICAgICAgIG1fdGlsaW5nTW9kZSA9IE1p
bmltYWw7CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAgIFRpbGVH
cmlkKiBhY3RpdmVHcmlkID0gYWN0aXZlVGlsZUdyaWQoKTsKKyAgICBpZiAoYWN0aXZlR3JpZC0+
Y2hlY2tEb1NpbmdsZVRpbGVMYXlvdXQoKSkgeworICAgICAgICBtX3RpbGluZ01vZGUgPSBzYXZl
ZFRpbGluZ01vZGU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY3JlYXRlVGlsZXNJbkFj
dGl2ZUdyaWQoQ292ZXJWaXNpYmxlT25seSk7CisgICAgbV90aWxpbmdNb2RlID0gc2F2ZWRUaWxp
bmdNb2RlOworfQorCit2b2lkIFRpbGVDYWNoZTo6bGF5b3V0VGlsZXNOb3dGb3JSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxl
ZCgpKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworCisgICAgYWN0aXZl
VGlsZUdyaWQoKS0+YWRkVGlsZXNDb3ZlcmluZ1JlY3QocmVjdCk7Cit9CisKK3ZvaWQgVGlsZUNh
Y2hlOjpyZW1vdmVBbGxOb25WaXNpYmxlVGlsZXMoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX3RpbGVNdXRleCk7CisgICAgcmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzSW50ZXJuYWwoKTsK
K30KKwordm9pZCBUaWxlQ2FjaGU6OnJlbW92ZUFsbE5vblZpc2libGVUaWxlc0ludGVybmFsKCkK
K3sKKyAgICBUaWxlR3JpZCogYWN0aXZlR3JpZCA9IGFjdGl2ZVRpbGVHcmlkKCk7CisgICAgaWYg
KGtlZXBzWm9vbWVkT3V0VGlsZXMoKSAmJiBhY3RpdmVHcmlkID09IG1fem9vbWVkSW5UaWxlR3Jp
ZCAmJiBhY3RpdmVHcmlkLT5oYXNUaWxlcygpKQorICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlk
LT5kcm9wQWxsVGlsZXMoKTsKKworICAgIEludFJlY3QgYWN0aXZlVGlsZUJvdW5kcyA9IGFjdGl2
ZUdyaWQtPmJvdW5kcygpOworICAgIGlmIChhY3RpdmVUaWxlQm91bmRzLndpZHRoKCkgPD0gbV90
aWxlU2l6ZS53aWR0aCgpICYmIGFjdGl2ZVRpbGVCb3VuZHMuaGVpZ2h0KCkgPD0gbV90aWxlU2l6
ZS5oZWlnaHQoKSkgeworICAgICAgICAvLyBJZiB0aGUgdmlldyBpcyBzbWFsbGVyIHRoYW4gYSB0
aWxlLCBrZWVwIHRoZSB0aWxlIGV2ZW4gaWYgaXQgaXMgbm90IHZpc2libGUuCisgICAgICAgIGFj
dGl2ZUdyaWQtPmRyb3BUaWxlc091dHNpZGVSZWN0KGFjdGl2ZVRpbGVCb3VuZHMpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYWN0aXZlR3JpZC0+ZHJvcFRpbGVzT3V0c2lkZVJlY3Qo
YWN0aXZlR3JpZC0+dmlzaWJsZVJlY3QoKSk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpyZW1vdmVB
bGxUaWxlcygpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKKyAgICBt
X3pvb21lZE91dFRpbGVHcmlkLT5kcm9wQWxsVGlsZXMoKTsKKyAgICBpZiAobV96b29tZWRJblRp
bGVHcmlkKQorICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPmRyb3BBbGxUaWxlcygpOworfQor
Cit2b2lkIFRpbGVDYWNoZTo6cmVtb3ZlRm9yZWdyb3VuZFRpbGVzKCkKK3sKKyAgICBNdXRleExv
Y2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAgIGlmICgha2VlcHNab29tZWRPdXRUaWxlcygp
KQorICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9wQWxsVGlsZXMoKTsKKyAgICBpZiAo
bV96b29tZWRJblRpbGVHcmlkKQorICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPmRyb3BBbGxU
aWxlcygpOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0Q29udGVudFJlcGxhY2VtZW50SW1hZ2Uo
UmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvbnRlbnRSZXBsYWNlbWVudEltYWdlKQoreworICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX2NvbnRlbnRSZXBsYWNlbWVudEltYWdlTXV0ZXgpOworICAgIG1f
Y29udGVudFJlcGxhY2VtZW50SW1hZ2UgPSBjb250ZW50UmVwbGFjZW1lbnRJbWFnZTsKK30KKwor
UmV0YWluUHRyPENHSW1hZ2VSZWY+IFRpbGVDYWNoZTo6Y29udGVudFJlcGxhY2VtZW50SW1hZ2Uo
KSBjb25zdAoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NvbnRlbnRSZXBsYWNlbWVudElt
YWdlTXV0ZXgpOworICAgIHJldHVybiBtX2NvbnRlbnRSZXBsYWNlbWVudEltYWdlOworfQorCit2
b2lkIFRpbGVDYWNoZTo6c2V0VGlsZUJvcmRlcnNWaXNpYmxlKGJvb2wgZmxhZykKK3sKKyAgICBp
ZiAoZmxhZyA9PSBtX3RpbGVCb3JkZXJzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV90aWxlQm9yZGVyc1Zpc2libGUgPSBmbGFnOworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnVw
ZGF0ZVRpbGVCb3JkZXJWaXNpYmlsaXR5KCk7CisgICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCkK
KyAgICAgICAgbV96b29tZWRJblRpbGVHcmlkLT51cGRhdGVUaWxlQm9yZGVyVmlzaWJpbGl0eSgp
OworfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0VGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKGJvb2wg
ZmxhZykKK3sKKyAgICBtX3RpbGVQYWludENvdW50ZXJzVmlzaWJsZSA9IGZsYWc7CisgICAgLy8g
VGhlIG51bWJlcnMgd2lsbCBzaG93IHVwIHRoZSBuZXh0IHRpbWUgdGhlIHRpbGVzIHBhaW50Lgor
fQorCit2b2lkIFRpbGVDYWNoZTo6ZmluaXNoZWRDcmVhdGluZ1RpbGVzKGJvb2wgZGlkQ3JlYXRl
VGlsZXMsIGJvb2wgY3JlYXRlTW9yZSkKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0
IGFsbCB0aWxlcyBhcmUgc2hvd2luZyB0aGUgc2FtZSB2ZXJzaW9uIG9mIHRoZSBjb250ZW50Lgor
ICAgIGlmIChkaWRDcmVhdGVUaWxlcyAmJiAhbV9zYXZlZERpc3BsYXlSZWN0cy5pc0VtcHR5KCkp
CisgICAgICAgIGZsdXNoU2F2ZWREaXNwbGF5UmVjdHMoKTsKKworICAgIGlmIChrZWVwc1pvb21l
ZE91dFRpbGVzKCkpIHsKKyAgICAgICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCAmJiBhY3RpdmVU
aWxlR3JpZCgpID09IG1fem9vbWVkT3V0VGlsZUdyaWQgJiYgbV90aWxpbmdNb2RlICE9IFpvb21p
bmcgJiYgbV96b29tZWRJblRpbGVHcmlkLT5oYXNUaWxlcygpKSB7CisgICAgICAgICAgICAvLyBU
aGlzIENBIHRyYW5zYWN0aW9uIHdpbGwgY292ZXIgdGhlIHNjcmVlbiB3aXRoIHRvcCBsZXZlbCB0
aWxlcy4KKyAgICAgICAgICAgIC8vIFdlIGNhbiByZW1vdmUgem9vbWVkLWluIHRpbGVzIHdpdGhv
dXQgZmxhc2hpbmcuCisgICAgICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPmRyb3BBbGxUaWxl
cygpOworICAgICAgICB9IGVsc2UgaWYgKGFjdGl2ZVRpbGVHcmlkKCkgPT0gbV96b29tZWRJblRp
bGVHcmlkKSB7CisgICAgICAgICAgICAvLyBQYXNzIHRoZSBtaW5pbXVtIHBvc3NpYmxlIGRpc3Rh
bmNlIHRvIGNvbnNpZGVyIGFsbCB0aWxlcywgZXZlbiB2aXNpYmxlIG9uZXMuCisgICAgICAgICAg
ICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9wRGlzdGFudFRpbGVzKDAsIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6bWluKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gS2VlcCBj
cmVhdGluZyB0aWxlcyB1bnRpbCB0aGUgd2hvbGUgY292ZXJSZWN0IGlzIGNvdmVyZWQuCisgICAg
aWYgKGNyZWF0ZU1vcmUpCisgICAgICAgIG1fdGlsZUNyZWF0aW9uVGltZXIuc3RhcnRPbmVTaG90
KDApOworfQorCit2b2lkIFRpbGVDYWNoZTo6dGlsZUNyZWF0aW9uVGltZXJGaXJlZChUaW1lcjxU
aWxlQ2FjaGU+KikKK3sKKyAgICBpZiAoaXNUaWxlQ3JlYXRpb25TdXNwZW5kZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAgY3Jl
YXRlVGlsZXNJbkFjdGl2ZUdyaWQoQ292ZXJTcGVjdWxhdGl2ZSk7Cit9CisKK3ZvaWQgVGlsZUNh
Y2hlOjpjcmVhdGVUaWxlc0luQWN0aXZlR3JpZChTeW5jaHJvbm91c1RpbGVDcmVhdGlvbk1vZGUg
bW9kZSkKK3sKKyAgICBpZiAobWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuaGFzUmVjZWl2ZWRNZW1v
cnlQcmVzc3VyZSgpKSB7CisgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIlVuZGVyIG1lbW9y
eSBwcmVzc3VyZSBhdDogJXMiLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgICAgICAgcmVtb3Zl
QWxsTm9uVmlzaWJsZVRpbGVzSW50ZXJuYWwoKTsKKyAgICB9CisgICAgYWN0aXZlVGlsZUdyaWQo
KS0+Y3JlYXRlVGlsZXMobW9kZSk7Cit9CisKK3Vuc2lnbmVkIFRpbGVDYWNoZTo6dGlsZUNhcGFj
aXR5Rm9yR3JpZChUaWxlR3JpZCogZ3JpZCkKK3sKKyAgICBzdGF0aWMgdW5zaWduZWQgY2FwYWNp
dHk7CisgICAgaWYgKCFjYXBhY2l0eSkgeworICAgICAgICBzaXplX3QgdG90YWxNZW1vcnkgPSBz
eXN0ZW1Ub3RhbE1lbW9yeSgpOworICAgICAgICB0b3RhbE1lbW9yeSAvPSAxMDI0ICogMTAyNDsK
KyAgICAgICAgaWYgKHRvdGFsTWVtb3J5ID49IDEwMjQpCisgICAgICAgICAgICBjYXBhY2l0eSA9
IDEyOCAqIDEwMjQgKiAxMDI0OworICAgICAgICBlbHNlIGlmICh0b3RhbE1lbW9yeSA+PSA1MTIp
CisgICAgICAgICAgICBjYXBhY2l0eSA9IDY0ICogMTAyNCAqIDEwMjQ7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGNhcGFjaXR5ID0gMzIgKiAxMDI0ICogMTAyNDsKKyAgICB9CisKKyAgICBp
bnQgZ3JpZENhcGFjaXR5OworCisgICAgaW50IG1lbW9yeUxldmVsID0gc3lzdGVtTWVtb3J5TGV2
ZWwoKTsKKyAgICBpZiAobWVtb3J5TGV2ZWwgPCAxNSkKKyAgICAgICAgZ3JpZENhcGFjaXR5ID0g
Y2FwYWNpdHkgLyA0OworICAgIGVsc2UgaWYgKG1lbW9yeUxldmVsIDwgMjApCisgICAgICAgIGdy
aWRDYXBhY2l0eSA9IGNhcGFjaXR5IC8gMjsKKyAgICBlbHNlIGlmIChtZW1vcnlMZXZlbCA8IDMw
KSAKKyAgICAgICAgZ3JpZENhcGFjaXR5ID0gY2FwYWNpdHkgKiAzIC8gNDsKKyAgICBlbHNlCisg
ICAgICAgIGdyaWRDYXBhY2l0eSA9IGNhcGFjaXR5OworCisgICAgaWYgKGtlZXBzWm9vbWVkT3V0
VGlsZXMoKSAmJiBncmlkID09IG1fem9vbWVkT3V0VGlsZUdyaWQpIHsKKyAgICAgICAgaWYgKGFj
dGl2ZVRpbGVHcmlkKCkgPT0gbV96b29tZWRPdXRUaWxlR3JpZCkKKyAgICAgICAgICAgIHJldHVy
biBncmlkQ2FwYWNpdHk7CisgICAgICAgIHJldHVybiBncmlkQ2FwYWNpdHkgLyA0OworICAgIH0K
KyAgICByZXR1cm4gZ3JpZENhcGFjaXR5ICogMyAvIDQ7Cit9CisKK0NvbG9yIFRpbGVDYWNoZTo6
Y29sb3JGb3JHcmlkVGlsZUJvcmRlcihUaWxlR3JpZCogZ3JpZCkgY29uc3QKK3sKKyAgICBpZiAo
Z3JpZCA9PSBtX3pvb21lZE91dFRpbGVHcmlkKQorICAgICAgICByZXR1cm4gQ29sb3IoLjNmLCAu
MGYsIDAuNGYsIDAuNWYpOworCisgICAgcmV0dXJuIENvbG9yKC4wZiwgLjBmLCAwLjRmLCAwLjVm
KTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkUmVwYWludEluUGllY2VzKGNvbnN0IENHUmVjdCYg
ZGlydHlSZWN0LCBDR1NSZWdpb25PYmogZGlydHlSZWdpb24sIENHRmxvYXQgY29udGVudHNTY2Fs
ZSkKK3sKKyAgICAvLyBFc3RpbWF0ZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgdXNlIHRoZSB1
bmlvbmVkIHJlY3Qgb3IgdGhlIGluZGl2aWR1YWwgcmVjdHMuCisgICAgLy8gV2UgZG8gdGhpcyBi
eSBjb21wdXRpbmcgdGhlIHBlcmNlbnRhZ2Ugb2YgIndhc3RlZCBzcGFjZSIgaW4gdGhlIHVuaW9u
LiBJZiB0aGF0IHdhc3RlZCBzcGFjZQorICAgIC8vIGlzIHRvbyBsYXJnZSwgdGhlbiB3ZSB3aWxs
IGRvIGluZGl2aWR1YWwgcmVjdCBwYWludGluZyBpbnN0ZWFkLgorICAgIGZsb2F0IHNpbmdsZVBp
eGVscyA9IDA7CisgICAgdW5zaWduZWQgcmVjdENvdW50ID0gMDsKKworICAgIENHU1JlZ2lvbkVu
dW1lcmF0b3JPYmogZW51bWVyYXRvciA9IENHU1JlZ2lvbkVudW1lcmF0b3IoZGlydHlSZWdpb24p
OworICAgIENHUmVjdCAqc3ViUmVjdDsKKyAgICB3aGlsZSAoKHN1YlJlY3QgPSBDR1NOZXh0UmVj
dChlbnVtZXJhdG9yKSkpIHsKKyAgICAgICAgKytyZWN0Q291bnQ7CisgICAgICAgIHNpbmdsZVBp
eGVscyArPSBzdWJSZWN0LT5zaXplLndpZHRoICogc3ViUmVjdC0+c2l6ZS5oZWlnaHQ7CisgICAg
fQorICAgIHNpbmdsZVBpeGVscyAvPSAoY29udGVudHNTY2FsZSAqIGNvbnRlbnRzU2NhbGUpOwor
ICAgIENHU1JlbGVhc2VSZWdpb25FbnVtZXJhdG9yKGVudW1lcmF0b3IpOworCisgICAgY29uc3Qg
dW5zaWduZWQgY1JlY3RUaHJlc2hvbGQgPSAxMDsKKyAgICBpZiAocmVjdENvdW50IDwgMiB8fCBy
ZWN0Q291bnQgPiBjUmVjdFRocmVzaG9sZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Y29uc3QgZmxvYXQgY1dhc3RlZFNwYWNlVGhyZXNob2xkID0gMC41MGY7CisgICAgZmxvYXQgdW5p
b25QaXhlbHMgPSBkaXJ0eVJlY3Quc2l6ZS53aWR0aCAqIGRpcnR5UmVjdC5zaXplLmhlaWdodDsK
KyAgICBmbG9hdCB3YXN0ZWRTcGFjZSA9IDEuZiAtIChzaW5nbGVQaXhlbHMgLyB1bmlvblBpeGVs
cyk7CisgICAgcmV0dXJuIHdhc3RlZFNwYWNlID4gY1dhc3RlZFNwYWNlVGhyZXNob2xkOworfQor
Cit2b2lkIFRpbGVDYWNoZTo6ZHJhd1JlcGxhY2VtZW50SW1hZ2UoVGlsZUxheWVyKiBsYXllciwg
Q0dDb250ZXh0UmVmIGNvbnRleHQsIENHSW1hZ2VSZWYgaW1hZ2UpCit7CisgICAgQ0dDb250ZXh0
U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEsIDEsIDEsIDEpOworICAgIENHQ29udGV4dEZpbGxS
ZWN0KGNvbnRleHQsIENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KSk7CisKKyAg
ICBDR0Zsb2F0IGNvbnRlbnRzU2NhbGUgPSBbbGF5ZXIgY29udGVudHNTY2FsZV07CisgICAgQ0dD
b250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSAvIGNvbnRlbnRzU2NhbGUsIC0xIC8gY29udGVudHNT
Y2FsZSk7CisgICAgQ0dSZWN0IGltYWdlUmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgQ0dJbWFnZUdl
dFdpZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpOworICAgIENHQ29udGV4dFRy
YW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtaW1hZ2VSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICBDR0Nv
bnRleHREcmF3SW1hZ2UoY29udGV4dCwgaW1hZ2VSZWN0LCBpbWFnZSk7Cit9CisKK3ZvaWQgVGls
ZUNhY2hlOjpkcmF3V2luZG93Q29udGVudChUaWxlTGF5ZXIqIGxheWVyLCBDR0NvbnRleHRSZWYg
Y29udGV4dCwgQ0dSZWN0IGRpcnR5UmVjdCkKK3sKKyAgICBDR1JlY3QgZnJhbWUgPSBbbGF5ZXIg
ZnJhbWVdOworICAgIFdLRm9udEFudGlhbGlhc2luZ1N0YXRlU2F2ZXIgZm9udEFudGlhbGlhc2lu
Z1N0YXRlKGNvbnRleHQsIFttX3dpbmRvdyB1c2VPcmllbnRhdGlvbkRlcGVuZGVudEZvbnRBbnRp
YWxpYXNpbmddICYmIFtsYXllciBpc09wYXF1ZV0pOworICAgIGZvbnRBbnRpYWxpYXNpbmdTdGF0
ZS5zZXR1cChbV0FLV2luZG93IGhhc0xhbmRzY2FwZU9yaWVudGF0aW9uXSk7CisKKyAgICBDR1NS
ZWdpb25PYmogZHJhd1JlZ2lvbiA9IChDR1NSZWdpb25PYmopW2xheWVyIHJlZ2lvbkJlaW5nRHJh
d25dOworICAgIENHRmxvYXQgY29udGVudHNTY2FsZSA9IFtsYXllciBjb250ZW50c1NjYWxlXTsK
KyAgICBpZiAoZHJhd1JlZ2lvbiAmJiBzaG91bGRSZXBhaW50SW5QaWVjZXMoZGlydHlSZWN0LCBk
cmF3UmVnaW9uLCBjb250ZW50c1NjYWxlKSkgeworICAgICAgICAvLyBVc2UgZmluZSBncmFpbmVk
IHJlcGFpbnQgcmVjdGFuZ2xlcyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIHBhaW50ZWQgcGl4
ZWxzLgorICAgICAgICBDR1NSZWdpb25FbnVtZXJhdG9yT2JqIGVudW1lcmF0b3IgPSBDR1NSZWdp
b25FbnVtZXJhdG9yKGRyYXdSZWdpb24pOworICAgICAgICBDR1JlY3QgKnN1YlJlY3Q7CisgICAg
ICAgIHdoaWxlICgoc3ViUmVjdCA9IENHU05leHRSZWN0KGVudW1lcmF0b3IpKSkgeworICAgICAg
ICAgICAgQ0dSZWN0IGFkanVzdGVkU3ViUmVjdCA9ICpzdWJSZWN0OworICAgICAgICAgICAgYWRq
dXN0ZWRTdWJSZWN0Lm9yaWdpbi54IC89IGNvbnRlbnRzU2NhbGU7CisgICAgICAgICAgICBhZGp1
c3RlZFN1YlJlY3Qub3JpZ2luLnkgPSBmcmFtZS5zaXplLmhlaWdodCAtIChhZGp1c3RlZFN1YlJl
Y3Qub3JpZ2luLnkgKyBhZGp1c3RlZFN1YlJlY3Quc2l6ZS5oZWlnaHQpIC8gY29udGVudHNTY2Fs
ZTsKKyAgICAgICAgICAgIGFkanVzdGVkU3ViUmVjdC5zaXplLndpZHRoIC89IGNvbnRlbnRzU2Nh
bGU7CisgICAgICAgICAgICBhZGp1c3RlZFN1YlJlY3Quc2l6ZS5oZWlnaHQgLz0gY29udGVudHNT
Y2FsZTsKKworICAgICAgICAgICAgQ0dSZWN0IHN1YlJlY3RJblN1cGVyID0gW2hvc3RMYXllcigp
IGNvbnZlcnRSZWN0OmFkanVzdGVkU3ViUmVjdCBmcm9tTGF5ZXI6bGF5ZXJdOworICAgICAgICAg
ICAgW21fd2luZG93IGRpc3BsYXlSZWN0OnN1YlJlY3RJblN1cGVyXTsKKyAgICAgICAgfQorICAg
ICAgICBDR1NSZWxlYXNlUmVnaW9uRW51bWVyYXRvcihlbnVtZXJhdG9yKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBTaW1wbGUgcmVwYWludAorICAgICAgICBDR1JlY3QgZGlydHlSZWN0SW5T
dXBlciA9IFtob3N0TGF5ZXIoKSBjb252ZXJ0UmVjdDpkaXJ0eVJlY3QgZnJvbUxheWVyOmxheWVy
XTsKKyAgICAgICAgW21fd2luZG93IGRpc3BsYXlSZWN0OmRpcnR5UmVjdEluU3VwZXJdOworICAg
IH0KKworICAgIGZvbnRBbnRpYWxpYXNpbmdTdGF0ZS5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgVGls
ZUNhY2hlOjpkcmF3TGF5ZXIoVGlsZUxheWVyKiBsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQp
Cit7CisgICAgLy8gVGhlIHdlYiBsb2NrIHVubG9jayBvYnNlcnZlciBydW5zIGFmdGVyIENBIGNv
bW1pdCBvYnNlcnZlci4KKyAgICBpZiAoIVdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKSB7
CisgICAgICAgIExPR19FUlJPUigiRHJhd2luZyB3aXRob3V0IGhvbGRpbmcgdGhlIHdlYiB0aHJl
YWQgbG9jayIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBX
S1NldEN1cnJlbnRHcmFwaGljc0NvbnRleHQoY29udGV4dCk7CisKKyAgICBDR1JlY3QgZGlydHlS
ZWN0ID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOworICAgIENHUmVjdCBm
cmFtZSA9IFtsYXllciBmcmFtZV07CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQs
IC1mcmFtZS5vcmlnaW4ueCwgLWZyYW1lLm9yaWdpbi55KTsKKyAgICBDR1JlY3Qgc2NhbGVkRnJh
bWUgPSBbaG9zdExheWVyKCkgY29udmVydFJlY3Q6W2xheWVyIGJvdW5kc10gZnJvbUxheWVyOmxh
eWVyXTsKKyAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCBmcmFtZS5zaXplLndpZHRoIC8g
c2NhbGVkRnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQgLyBzY2FsZWRGcmFtZS5z
aXplLmhlaWdodCk7CisKKyAgICBpZiAoUmV0YWluUHRyPENHSW1hZ2U+IGNvbnRlbnRSZXBsYWNl
bWVudEltYWdlID0gdGhpcy0+Y29udGVudFJlcGxhY2VtZW50SW1hZ2UoKSkKKyAgICAgICAgZHJh
d1JlcGxhY2VtZW50SW1hZ2UobGF5ZXIsIGNvbnRleHQsIGNvbnRlbnRSZXBsYWNlbWVudEltYWdl
LmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIGRyYXdXaW5kb3dDb250ZW50KGxheWVyLCBjb250
ZXh0LCBkaXJ0eVJlY3QpOworCisgICAgKytsYXllci5wYWludENvdW50OworICAgIGlmIChtX3Rp
bGVQYWludENvdW50ZXJzVmlzaWJsZSkgeworICAgICAgICBjaGFyIHRleHRbMTZdOworICAgICAg
ICBzbnByaW50Zih0ZXh0LCBzaXplb2YodGV4dCksICIlZCIsIGxheWVyLnBhaW50Q291bnQpOwor
CisgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisKKyAgICAgICAgQ0dDb250
ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSk7
CisgICAgICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRD
R0NvbG9yKGNvbG9yRm9yR3JpZFRpbGVCb3JkZXIoW2xheWVyIHRpbGVHcmlkXSksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpKTsKKyAgICAgICAgCisgICAgICAgIENHUmVjdCBsYWJlbEJvdW5kcyA9IFts
YXllciBib3VuZHNdOworICAgICAgICBsYWJlbEJvdW5kcy5zaXplLndpZHRoID0gMTAgKyAxMiAq
IHN0cmxlbih0ZXh0KTsKKyAgICAgICAgbGFiZWxCb3VuZHMuc2l6ZS5oZWlnaHQgPSAyNTsKKyAg
ICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgbGFiZWxCb3VuZHMpOworCisgICAgICAg
IGlmIChhY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpCisgICAgICAgICAgICBDR0NvbnRleHRT
ZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMCwgMCwgMC40Zik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLCAxLCAxLCAwLjZm
KTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAgICAgICAgQ0dDb250ZXh0
U2V0VGV4dE1hdHJpeChjb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSgxLCAtMSkp
OworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgICAgICBDR0NvbnRleHRT
ZWxlY3RGb250KGNvbnRleHQsICJIZWx2ZXRpY2EiLCAyNSwga0NHRW5jb2RpbmdNYWNSb21hbik7
CisgICAgICAgIENHQ29udGV4dFNob3dUZXh0QXRQb2ludChjb250ZXh0LCBsYWJlbEJvdW5kcy5v
cmlnaW4ueCArIDMsIGxhYmVsQm91bmRzLm9yaWdpbi55ICsgMjAsIHRleHQsIHN0cmxlbih0ZXh0
KSk7CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisgICAgCisgICAgICAgIENHQ29udGV4
dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7ICAgICAgICAKKyAgICB9CisKKyAgICBXQUtWaWV3KiB2
aWV3ID0gW21fd2luZG93IGNvbnRlbnRWaWV3XTsKKyAgICBbdmlldyBwZXJmb3JtU2VsZWN0b3I6
QHNlbGVjdG9yKF9kaXNwYXRjaFRpbGVEaWREcmF3Oikgd2l0aE9iamVjdDpsYXllciBhZnRlckRl
bGF5OjAuMF07Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAg
IHNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0KDAsIDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKTsKK30KKwordm9p
ZCBUaWxlQ2FjaGU6OnNjaGVkdWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50KCkKK3sKKyAg
ICBXQUtWaWV3KiB2aWV3ID0gW21fd2luZG93IGNvbnRlbnRWaWV3XTsKKyAgICBbdmlldyBfc2No
ZWR1bGVMYXllckZsdXNoRm9yUGVuZGluZ1RpbGVDYWNoZVJlcGFpbnRdOworfQorCit2b2lkIFRp
bGVDYWNoZTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
K3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9zYXZlZERpc3BsYXlSZWN0TXV0ZXgpOworICAg
IGJvb2wgYWRkZWRGaXJzdFJlY3QgPSBtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKTsKKyAg
ICBtX3NhdmVkRGlzcGxheVJlY3RzLmFwcGVuZChkaXJ0eVJlY3QpOworICAgIGlmICghYWRkZWRG
aXJzdFJlY3QpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBDb21wb3NpdGluZyBsYXllciBmbHVz
aCB3aWxsIGNhbGwgYmFjayB0byBkb1BlbmRpbmdSZXBhaW50cygpLiBUaGUgZmx1c2ggbWF5IGJl
IHRocm90dGxlZCBhbmQgbm90IGhhcHBlbiBpbW1lZGlhdGVseS4KKyAgICBzY2hlZHVsZUxheWVy
Rmx1c2hGb3JQZW5kaW5nUmVwYWludCgpOworfQorCit2b2lkIFRpbGVDYWNoZTo6aW52YWxpZGF0
ZVRpbGVzKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBBU1NFUlQoIW1fdGlsZU11
dGV4LnRyeUxvY2soKSk7CisKKyAgICBUaWxlR3JpZCogYWN0aXZlR3JpZCA9IGFjdGl2ZVRpbGVH
cmlkKCk7CisgICAgaWYgKCFrZWVwc1pvb21lZE91dFRpbGVzKCkpIHsKKyAgICAgICAgYWN0aXZl
R3JpZC0+aW52YWxpZGF0ZVRpbGVzKGRpcnR5UmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgRmxvYXRSZWN0IHNjYWxlZFJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgc2NhbGVkUmVjdC5z
Y2FsZSh6b29tZWRPdXRTY2FsZSgpIC8gY3VycmVudFNjYWxlKCkpOworICAgIEludFJlY3Qgem9v
bWVkT3V0RGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzY2FsZWRSZWN0KTsKKyAgICBpZiAo
YWN0aXZlR3JpZCA9PSBtX3pvb21lZE91dFRpbGVHcmlkKSB7CisgICAgICAgIGJvb2wgZHVtbXk7
CisgICAgICAgIEludFJlY3QgY292ZXJSZWN0ID0gbV96b29tZWRPdXRUaWxlR3JpZC0+Y2FsY3Vs
YXRlQ292ZXJSZWN0KG1fem9vbWVkT3V0VGlsZUdyaWQtPnZpc2libGVSZWN0KCksIGR1bW15KTsK
KyAgICAgICAgLy8gSW5zdGVhZCBvZiByZXBhaW50aW5nIGEgdGlsZSBvdXRzaWRlIHRoZSBjb3Zl
ciByZWN0LCBqdXN0IHJlbW92ZSBpdC4KKyAgICAgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+ZHJv
cFRpbGVzQmV0d2VlblJlY3RzKHpvb21lZE91dERpcnR5UmVjdCwgY292ZXJSZWN0KTsKKyAgICAg
ICAgbV96b29tZWRPdXRUaWxlR3JpZC0+aW52YWxpZGF0ZVRpbGVzKHpvb21lZE91dERpcnR5UmVj
dCk7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gaW52YWxpZGF0ZSB6b29tZWQgaW4gdGlsZXMgYXMg
d2VsbCB3aGlsZSB6b29taW5nLCBzaW5jZQorICAgICAgICAvLyB3ZSBjb3VsZCBzd2l0Y2ggYmFj
ayB0byB0aGUgem9vbWVkIGluIGdyaWQgd2l0aG91dCBkcm9wcGluZyBpdHMKKyAgICAgICAgLy8g
dGlsZXMuICBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk5NDY3NTk+LgorICAgICAgICBpZiAobV90aWxp
bmdNb2RlID09IFpvb21pbmcgJiYgbV96b29tZWRJblRpbGVHcmlkKQorICAgICAgICAgICAgbV96
b29tZWRJblRpbGVHcmlkLT5pbnZhbGlkYXRlVGlsZXMoZGlydHlSZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoIW1fem9vbWVkSW5UaWxlR3JpZC0+aGFzVGlsZXMoKSkgewor
ICAgICAgICAvLyBJZiBubyB0aWxlcyBoYXZlIGJlZW4gY3JlYXRlZCB5ZXQgZm9yIHRoZSB6b29t
ZWQgaW4gZ3JpZCwgd2UgY2FuJ3QgZHJvcCB0aGUgem9vbWVkIG91dCB0aWxlcy4KKyAgICAgICAg
bV96b29tZWRPdXRUaWxlR3JpZC0+aW52YWxpZGF0ZVRpbGVzKHpvb21lZE91dERpcnR5UmVjdCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+ZHJvcFRp
bGVzSW50ZXJzZWN0aW5nUmVjdCh6b29tZWRPdXREaXJ0eVJlY3QpOworICAgIG1fem9vbWVkSW5U
aWxlR3JpZC0+aW52YWxpZGF0ZVRpbGVzKGRpcnR5UmVjdCk7Cit9CisgICAgCitib29sIFRpbGVD
YWNoZTo6aXNUaWxlQ3JlYXRpb25TdXNwZW5kZWQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gKCFr
ZWVwc1pvb21lZE91dFRpbGVzKCkgJiYgbV90aWxpbmdNb2RlID09IFpvb21pbmcpIHx8IG1fdGls
aW5nTW9kZSA9PSBEaXNhYmxlZDsKK30KKworYm9vbCBUaWxlQ2FjaGU6OmlzVGlsZUludmFsaWRh
dGlvblN1c3BlbmRlZCgpIGNvbnN0IAoreyAKKyAgICByZXR1cm4gbV90aWxpbmdNb2RlID09IFpv
b21pbmcgfHwgbV90aWxpbmdNb2RlID09IFBhbm5pbmcgfHwgbV90aWxpbmdNb2RlID09IFNjcm9s
bFRvVG9wIHx8IG1fdGlsaW5nTW9kZSA9PSBEaXNhYmxlZDsgCit9CisKK3ZvaWQgVGlsZUNhY2hl
Ojp1cGRhdGVUaWxpbmdNb2RlKCkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkg
fHwgIVdlYlRocmVhZElzRW5hYmxlZCgpKTsKKworICAgIFdBS1ZpZXcqIHZpZXcgPSBbbV93aW5k
b3cgY29udGVudFZpZXddOworCisgICAgaWYgKG1fdGlsaW5nTW9kZSA9PSBab29taW5nIHx8IG1f
dGlsaW5nTW9kZSA9PSBQYW5uaW5nIHx8IG1fdGlsaW5nTW9kZSA9PSBTY3JvbGxUb1RvcCkgewor
ICAgICAgICBpZiAoIW1fZGlkQ2FsbFdpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZykgeworICAg
ICAgICAgICAgW3ZpZXcgX3dpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZ107CisgICAgICAgICAg
ICBtX2RpZENhbGxXaWxsU3RhcnRTY3JvbGxpbmdPclpvb21pbmcgPSB0cnVlOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fZGlkQ2FsbFdpbGxTdGFydFNjcm9sbGluZ09y
Wm9vbWluZykgeworICAgICAgICAgICAgW3ZpZXcgX2RpZEZpbmlzaFNjcm9sbGluZ09yWm9vbWlu
Z107CisgICAgICAgICAgICBtX2RpZENhbGxXaWxsU3RhcnRTY3JvbGxpbmdPclpvb21pbmcgPSBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV90aWxpbmdNb2RlID09IERpc2FibGVkKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVN
dXRleCk7CisgICAgICAgIGNyZWF0ZVRpbGVzSW5BY3RpdmVHcmlkKENvdmVyVmlzaWJsZU9ubHkp
OworCisgICAgICAgIGlmICghbV9zYXZlZERpc3BsYXlSZWN0cy5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBzY2hlZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5nUmVwYWludCgpOworICAgIH0KK30KKwor
dm9pZCBUaWxlQ2FjaGU6OnNldFRpbGluZ01vZGUoVGlsaW5nTW9kZSB0aWxpbmdNb2RlKQorewor
ICAgIGlmICh0aWxpbmdNb2RlID09IG1fdGlsaW5nTW9kZSkKKyAgICAgICAgcmV0dXJuOworICAg
IGJvb2wgd2FzWm9vbWluZyA9IChtX3RpbGluZ01vZGUgPT0gWm9vbWluZyk7CisgICAgbV90aWxp
bmdNb2RlID0gdGlsaW5nTW9kZTsKKworICAgIGlmICgobV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUg
fHwgbV9wZW5kaW5nU2NhbGUpICYmIG1fdGlsaW5nTW9kZSAhPSBEaXNhYmxlZCkKKyAgICAgICAg
Y29tbWl0U2NhbGVDaGFuZ2UoKTsKKyAgICBlbHNlIGlmICh3YXNab29taW5nKSB7CisgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAgICAgIGJyaW5nQWN0aXZlVGls
ZUdyaWRUb0Zyb250KCk7CisgICAgfQorCisgICAgaWYgKG1faGFzUGVuZGluZ1VwZGF0ZVRpbGlu
Z01vZGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhc1BlbmRpbmdVcGRhdGVUaWxpbmdNb2Rl
ID0gdHJ1ZTsKKworICAgIFRpbGVDYWNoZVRvbWJzdG9uZSAqdG9tYnN0b25lID0gbV90b21ic3Rv
bmUuZ2V0KCk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlmIChbdG9tYnN0b25lIGlz
RGVhZF0pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1faGFzUGVuZGluZ1VwZGF0ZVRp
bGluZ01vZGUgPSBmYWxzZTsKKyAgICAgICAgdXBkYXRlVGlsaW5nTW9kZSgpOworICAgIH0pOwor
fQorCit2b2lkIFRpbGVDYWNoZTo6c2V0VGlsaW5nRGlyZWN0aW9uKFRpbGluZ0RpcmVjdGlvbiB0
aWxpbmdEaXJlY3Rpb24pCit7CisgICAgbV90aWxpbmdEaXJlY3Rpb24gPSB0aWxpbmdEaXJlY3Rp
b247Cit9CisKK1RpbGVDYWNoZTo6VGlsaW5nRGlyZWN0aW9uIFRpbGVDYWNoZTo6dGlsaW5nRGly
ZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxpbmdEaXJlY3Rpb247Cit9CisgICAg
CitmbG9hdCBUaWxlQ2FjaGU6Onpvb21lZE91dFNjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV96b29tZWRPdXRUaWxlR3JpZC0+c2NhbGUoKTsKK30KKworZmxvYXQgVGlsZUNhY2hlOjpjdXJy
ZW50U2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2N1cnJlbnRTY2FsZTsKK30KKwordm9p
ZCBUaWxlQ2FjaGU6OmRvUGVuZGluZ1JlcGFpbnRzKCkKK3sKKyAgICBpZiAobV9zYXZlZERpc3Bs
YXlSZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNUaWxlSW52YWxp
ZGF0aW9uU3VzcGVuZGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV90aWxlTXV0ZXgpOworICAgIGZsdXNoU2F2ZWREaXNwbGF5UmVjdHMoKTsKK30KKwordm9p
ZCBUaWxlQ2FjaGU6OmZsdXNoU2F2ZWREaXNwbGF5UmVjdHMoKQoreworICAgIEFTU0VSVCghbV90
aWxlTXV0ZXgudHJ5TG9jaygpKTsKKyAgICBBU1NFUlQoIW1fc2F2ZWREaXNwbGF5UmVjdHMuaXNF
bXB0eSgpKTsKKworICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3NhdmVkRGlzcGxheVJlY3RNdXRleCk7CisgICAgICAgIG1fc2F2
ZWREaXNwbGF5UmVjdHMuc3dhcChyZWN0cyk7CisgICAgfQorICAgIHNpemVfdCBzaXplID0gcmVj
dHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgc2l6ZTsgKytuKQorICAgICAg
ICBpbnZhbGlkYXRlVGlsZXMocmVjdHNbbl0pOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0U3Bl
Y3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobV9p
c1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCA9PSBlbmFibGVkKQorICAgICAgICByZXR1
cm47CisgICAgbV9pc1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCA9IGVuYWJsZWQ7Cisg
ICAgaWYgKG1faXNTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQpCisgICAgICAgIG1fdGls
ZUNyZWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCitib29sIFRpbGVDYWNoZTo6aGFz
UGVuZGluZ0RyYXcoKSBjb25zdAoreworICAgIHJldHVybiAhbV9zYXZlZERpc3BsYXlSZWN0cy5p
c0VtcHR5KCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpwcmVwYXJlVG9EcmF3KCkKK3sKKyAgICAv
LyBUaGlzIHdpbGwgdHJpZ2dlciBkb2N1bWVudCByZWxheW91dCBpZiBuZWVkZWQuCisgICAgW1tt
X3dpbmRvdyBjb250ZW50Vmlld10gdmlld1dpbGxEcmF3XTsKKworICAgIGlmICghbV9zYXZlZERp
c3BsYXlSZWN0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGls
ZU11dGV4KTsKKyAgICAgICAgZmx1c2hTYXZlZERpc3BsYXlSZWN0cygpOworICAgIH0KK30KKwor
dm9pZCBUaWxlQ2FjaGU6OnNldExheWVyUG9vbENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5KQor
eworICAgIFRpbGVMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+c2V0Q2FwYWNpdHkoY2FwYWNpdHkp
OworfQorCit2b2lkIFRpbGVDYWNoZTo6ZHJhaW5MYXllclBvb2woKQoreworICAgIFRpbGVMYXll
clBvb2w6OnNoYXJlZFBvb2woKS0+ZHJhaW4oKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmR1bXBU
aWxlcygpCit7CisgICAgTlNMb2coQCI9PT09PT09PT09PT09PT09PSIpOworICAgIE5TTG9nKEAi
Wk9PTUVEIE9VVCIpOworICAgIGlmIChtX3pvb21lZE91dFRpbGVHcmlkID09IGFjdGl2ZVRpbGVH
cmlkKCkpCisgICAgICAgIE5TTG9nKEAiPEFDVElWRT4iKTsKKyAgICBtX3pvb21lZE91dFRpbGVH
cmlkLT5kdW1wVGlsZXMoKTsKKyAgICBOU0xvZyhAIj09PT09PT09PT09PT09PT09Iik7CisgICAg
aWYgKG1fem9vbWVkSW5UaWxlR3JpZCkgeworICAgICAgICBOU0xvZyhAIlpPT01FRCBJTiIpOwor
ICAgICAgICBpZiAobV96b29tZWRJblRpbGVHcmlkID09IGFjdGl2ZVRpbGVHcmlkKCkpCisgICAg
ICAgICAgICBOU0xvZyhAIjxBQ1RJVkU+Iik7CisgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+
ZHVtcFRpbGVzKCk7CisgICAgICAgIE5TTG9nKEAiPT09PT09PT09PT09PT09PT0iKTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTk5OTBmY2Nk
ZDY5NzBmZDk4YWY4NWVlZjQzYzAzYzViYTM3YmVlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZC5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBUaWxlR3JpZF9oCisjZGVmaW5lIFRpbGVHcmlkX2gKKworI2lmIFBM
QVRGT1JNKElPUykKKworI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50UG9pbnRI
YXNoLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNs
dWRlICJUaWxlQ2FjaGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCisjZGVmaW5lIExPR19USUxJTkcgMAorCitAY2xhc3MgQ0FMYXllcjsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUaWxlR3JpZFRpbGU7CisKK2NsYXNzIFRp
bGVHcmlkIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlR3JpZCk7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBJbnRQb2ludCBUaWxlSW5kZXg7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxU
aWxlR3JpZD4gY3JlYXRlKFRpbGVDYWNoZSogY2FjaGUsIGNvbnN0IEludFNpemUmIHRpbGVTaXpl
KSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGlsZUdyaWQoY2FjaGUsIHRpbGVTaXplKSk7IH0KKwor
ICAgIH5UaWxlR3JpZCgpOworCisgICAgVGlsZUNhY2hlKiB0aWxlQ2FjaGUoKSBjb25zdCB7IHJl
dHVybiBtX3RpbGVDYWNoZTsgfQorCisgICAgQ0FMYXllciAqdGlsZUhvc3RMYXllcigpIGNvbnN0
OworICAgIEludFJlY3QgYm91bmRzKCkgY29uc3Q7CisgICAgdW5zaWduZWQgdGlsZUNvdW50KCkg
Y29uc3Q7CisKKyAgICBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KKyAg
ICB2b2lkIHNldFNjYWxlKGZsb2F0IHNjYWxlKSB7IG1fc2NhbGUgPSBzY2FsZTsgfQorCisgICAg
SW50UmVjdCB2aXNpYmxlUmVjdCgpIGNvbnN0OworCisgICAgdm9pZCBjcmVhdGVUaWxlcyhUaWxl
Q2FjaGU6OlN5bmNocm9ub3VzVGlsZUNyZWF0aW9uTW9kZSk7CisKKyAgICB2b2lkIGRyb3BBbGxU
aWxlcygpOworICAgIHZvaWQgZHJvcEludmFsaWRUaWxlcygpOworICAgIHZvaWQgZHJvcFRpbGVz
T3V0c2lkZVJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgZHJvcFRpbGVzSW50ZXJzZWN0
aW5nUmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgLy8gRHJvcHMgdGlsZXMgdGhhdCBpbnRlcnNl
Y3QgZHJvcFJlY3QgYnV0IGRvIG5vdCBpbnRlcnNlY3Qga2VlcFJlY3QuCisgICAgdm9pZCBkcm9w
VGlsZXNCZXR3ZWVuUmVjdHMoY29uc3QgSW50UmVjdCYgZHJvcFJlY3QsIGNvbnN0IEludFJlY3Qm
IGtlZXBSZWN0KTsKKyAgICBib29sIGRyb3BEaXN0YW50VGlsZXModW5zaWduZWQgdGlsZXNOZWVk
ZWQsIGRvdWJsZSBzaG9ydGVzdERpc3RhbmNlKTsKKworICAgIHZvaWQgYWRkVGlsZXNDb3Zlcmlu
Z1JlY3QoY29uc3QgSW50UmVjdCYpOworCisgICAgYm9vbCB0aWxlc0NvdmVyKGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKKyAgICB2b2lkIGNlbnRlclRpbGVHcmlkT3JpZ2luKGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0KTsKKyAgICB2b2lkIGludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpOworCisgICAgdm9pZCB1cGRhdGVUaWxlT3BhY2l0eSgpOworICAgIHZvaWQgdXBk
YXRlVGlsZUJvcmRlclZpc2liaWxpdHkoKTsKKyAgICB2b2lkIHVwZGF0ZUhvc3RMYXllclNpemUo
KTsKKyAgICBib29sIGNoZWNrRG9TaW5nbGVUaWxlTGF5b3V0KCk7CisKKyAgICBib29sIGhhc1Rp
bGVzKCkgY29uc3QgeyByZXR1cm4gIW1fdGlsZXMuaXNFbXB0eSgpOyB9CisKKyAgICBJbnRSZWN0
IGNhbGN1bGF0ZUNvdmVyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgYm9vbCYgY2Vu
dGVyR3JpZCk7CisKKyAgICAvLyBMb2dnaW5nCisgICAgdm9pZCBkdW1wVGlsZXMoKTsKKworcHJp
dmF0ZToKKyAgICBkb3VibGUgdGlsZURpc3RhbmNlMihjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpIGNvbnN0OworICAgIHVuc2lnbmVkIHRpbGVCeXRl
U2l6ZSgpIGNvbnN0OworCisgICAgdm9pZCBhZGRUaWxlRm9ySW5kZXgoY29uc3QgVGlsZUluZGV4
Jik7CisKKyAgICBQYXNzUmVmUHRyPFRpbGVHcmlkVGlsZT4gdGlsZUZvckluZGV4KGNvbnN0IFRp
bGVJbmRleCYpIGNvbnN0OworICAgIEludFJlY3QgdGlsZVJlY3RGb3JJbmRleChjb25zdCBUaWxl
SW5kZXgmKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFRpbGVHcmlkVGlsZT4gdGlsZUZvclBvaW50
KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgVGlsZUluZGV4IHRpbGVJbmRleEZvclBvaW50
KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisKKyAgICBJbnRSZWN0IGFkanVzdENvdmVyUmVjdEZv
clBhZ2VCb3VuZHMoY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkVXNlTWlu
aW1hbFRpbGVDb3ZlcmFnZSgpIGNvbnN0OworCitwcml2YXRlOiAgICAgICAgCisgICAgVGlsZUdy
aWQoVGlsZUNhY2hlKiwgY29uc3QgSW50U2l6ZSYpOworCisgICAgVGlsZUNhY2hlKiBtX3RpbGVD
YWNoZTsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV90aWxlSG9zdExheWVyOworCisgICAgSW50
UG9pbnQgbV9vcmlnaW47CisgICAgSW50U2l6ZSBtX3RpbGVTaXplOworCisgICAgZmxvYXQgbV9z
Y2FsZTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxUaWxlSW5kZXgsIFJlZlB0cjxUaWxlR3JpZFRp
bGU+PiBUaWxlTWFwOworICAgIFRpbGVNYXAgbV90aWxlczsKKworICAgIEludFJlY3QgbV92YWxp
ZEJvdW5kczsKK307CisKK3N0YXRpYyBpbmxpbmUgSW50UG9pbnQgdG9wTGVmdChjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIHJldHVybiByZWN0LmxvY2F0aW9uKCk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgSW50UG9pbnQgYm90dG9tUmlnaHQoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBy
ZXR1cm4gSW50UG9pbnQocmVjdC5tYXhYKCkgLSAxLCByZWN0Lm1heFkoKSAtIDEpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisjZW5kaWYg
Ly8gVGlsZUdyaWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Rp
bGVHcmlkLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjNkMTcwMTMyMWU5Yzc0MGU0MzcyOTVkYTRjZWNkNjMwMGZmY2Q0ZTEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWQubW0KQEAgLTAs
MCArMSw1NjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGlsZUdyaWQuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIk1lbW9yeVByZXNz
dXJlSGFuZGxlci5oIgorI2luY2x1ZGUgIlN5c3RlbU1lbW9yeS5oIgorI2luY2x1ZGUgIlRpbGVH
cmlkVGlsZS5oIgorI2luY2x1ZGUgIlRpbGVMYXllci5oIgorI2luY2x1ZGUgIlRpbGVMYXllclBv
b2wuaCIKKyNpbmNsdWRlICJXQUtXaW5kb3cuaCIKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29y
ZUdyYXBoaWNzUHJpdmF0ZS5oPgorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgor
I2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZVByaXZhdGUuaD4KKyNpbmNsdWRlIDxhbGdv
cml0aG0+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitU
aWxlR3JpZDo6VGlsZUdyaWQoVGlsZUNhY2hlKiB0aWxlQ2FjaGUsIGNvbnN0IEludFNpemUmIHRp
bGVTaXplKQorICAgIDogbV90aWxlQ2FjaGUodGlsZUNhY2hlKQorICAgICwgbV90aWxlSG9zdExh
eWVyKGFkb3B0TlMoW1tUaWxlSG9zdExheWVyIGFsbG9jXSBpbml0V2l0aFRpbGVHcmlkOnRoaXNd
KSkKKyAgICAsIG1fdGlsZVNpemUodGlsZVNpemUpCisgICAgLCBtX3NjYWxlKDEpCisgICAgLCBt
X3ZhbGlkQm91bmRzKDAsIDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCksIHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpIAoreworfQorICAgIAorVGlsZUdyaWQ6On5UaWxl
R3JpZCgpCit7CisgICAgW21fdGlsZUhvc3RMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Cit9
CisKK0ludFJlY3QgVGlsZUdyaWQ6OnZpc2libGVSZWN0KCkgY29uc3QKK3sKKyAgICBJbnRSZWN0
IHZpc2libGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX3RpbGVDYWNoZS0+dmlzaWJsZVJlY3RJ
bkxheWVyKG1fdGlsZUhvc3RMYXllci5nZXQoKSkpOworCisgICAgLy8gV2hlbiBmYXN0IHNjcm9s
bGluZyB0byB0aGUgdG9wLCBtb3ZlIHRoZSB2aXNpYmxlIHJlY3QgdGhlcmUgaW1tZWRpYXRlbHkg
c28gd2UgaGF2ZSB0aWxlcyB3aGVuIHRoZSBzY3JvbGxpbmcgY29tcGxldGVzLgorICAgIGlmICht
X3RpbGVDYWNoZS0+dGlsaW5nTW9kZSgpID09IFRpbGVDYWNoZTo6U2Nyb2xsVG9Ub3ApCisgICAg
ICAgIHZpc2libGVSZWN0LnNldFkoMCk7CisKKyAgICByZXR1cm4gdmlzaWJsZVJlY3Q7Cit9CisK
K3ZvaWQgVGlsZUdyaWQ6OmRyb3BBbGxUaWxlcygpCit7CisgICAgbV90aWxlcy5jbGVhcigpOwor
fQorCit2b2lkIFRpbGVHcmlkOjpkcm9wVGlsZXNJbnRlcnNlY3RpbmdSZWN0KGNvbnN0IEludFJl
Y3QmIGRyb3BSZWN0KQoreworICAgIGRyb3BUaWxlc0JldHdlZW5SZWN0cyhkcm9wUmVjdCwgSW50
UmVjdCgpKTsKK30KKwordm9pZCBUaWxlR3JpZDo6ZHJvcFRpbGVzT3V0c2lkZVJlY3QoY29uc3Qg
SW50UmVjdCYga2VlcFJlY3QpCit7CisgICAgZHJvcFRpbGVzQmV0d2VlblJlY3RzKEludFJlY3Qo
MCwgMCwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKSksIGtlZXBSZWN0KTsKK30KKwordm9pZCBUaWxlR3JpZDo6ZHJvcFRpbGVz
QmV0d2VlblJlY3RzKGNvbnN0IEludFJlY3QmIGRyb3BSZWN0LCBjb25zdCBJbnRSZWN0JiBrZWVw
UmVjdCkKK3sKKyAgICBWZWN0b3I8VGlsZUluZGV4PiB0b1JlbW92ZTsKKyAgICBUaWxlTWFwOjpp
dGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOworICAgIGZvciAoYXV0byB0aWxlIDogbV90aWxl
cykgeworICAgICAgICBUaWxlSW5kZXgmIGluZGV4ID0gdGlsZS5rZXk7CisgICAgICAgIEludFJl
Y3QgdGlsZVJlY3QgPSB0aWxlLnZhbHVlLT5yZWN0KCk7CisgICAgICAgIGlmICh0aWxlUmVjdC5p
bnRlcnNlY3RzKGRyb3BSZWN0KSAmJiAhdGlsZVJlY3QuaW50ZXJzZWN0cyhrZWVwUmVjdCkpCisg
ICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaW5kZXgpOworICAgIH0KKyAgICB1bnNpZ25lZCBy
ZW1vdmVDb3VudCA9IHRvUmVtb3ZlLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBu
IDwgcmVtb3ZlQ291bnQ7ICsrbikKKyAgICAgICAgbV90aWxlcy5yZW1vdmUodG9SZW1vdmVbbl0p
OworfQorCit1bnNpZ25lZCBUaWxlR3JpZDo6dGlsZUJ5dGVTaXplKCkgY29uc3QKK3sKKyAgICBJ
bnRTaXplIHRpbGVQaXhlbFNpemUgPSBtX3RpbGVTaXplOworICAgIHRpbGVQaXhlbFNpemUuc2Nh
bGUobV90aWxlQ2FjaGUtPnNjcmVlblNjYWxlKCkpOworICAgIHJldHVybiBUaWxlTGF5ZXJQb29s
OjpieXRlc0JhY2tpbmdMYXllcldpdGhQaXhlbFNpemUodGlsZVBpeGVsU2l6ZSk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIGJvb2wgaXNGYXJ0aGVyQXdheShjb25zdCBwYWly
PGRvdWJsZSwgVD4mIGEsIGNvbnN0IHBhaXI8ZG91YmxlLCBUPiYgYikKK3sKKyAgICByZXR1cm4g
YS5maXJzdCA+IGIuZmlyc3Q7Cit9CisKK2Jvb2wgVGlsZUdyaWQ6OmRyb3BEaXN0YW50VGlsZXMo
dW5zaWduZWQgdGlsZXNOZWVkZWQsIGRvdWJsZSBzaG9ydGVzdERpc3RhbmNlKQoreworICAgIHVu
c2lnbmVkIGJ5dGVzUGVyVGlsZSA9IHRpbGVCeXRlU2l6ZSgpOworICAgIHVuc2lnbmVkIGJ5dGVz
TmVlZGVkID0gdGlsZXNOZWVkZWQgKiBieXRlc1BlclRpbGU7CisgICAgdW5zaWduZWQgYnl0ZXNV
c2VkID0gdGlsZUNvdW50KCkgKiBieXRlc1BlclRpbGU7CisgICAgdW5zaWduZWQgbWF4aW11bUJ5
dGVzID0gbV90aWxlQ2FjaGUtPnRpbGVDYXBhY2l0eUZvckdyaWQodGhpcyk7CisKKyAgICBpbnQg
Ynl0ZXNUb1JlY2xhaW0gPSBpbnQoYnl0ZXNVc2VkKSAtIChpbnQobWF4aW11bUJ5dGVzKSAtIGJ5
dGVzTmVlZGVkKTsKKyAgICBpZiAoYnl0ZXNUb1JlY2xhaW0gPD0gMCkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICB1bnNpZ25lZCB0aWxlc1RvUmVtb3ZlQ291bnQgPSBieXRlc1RvUmVjbGFp
bSAvIGJ5dGVzUGVyVGlsZTsKKworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB0aGlzLT52aXNp
YmxlUmVjdCgpOworICAgIFZlY3RvcjxwYWlyPGRvdWJsZSwgVGlsZUluZGV4Pj4gdG9SZW1vdmU7
CisgICAgZm9yIChhdXRvIHRpbGUgOiBtX3RpbGVzKSB7CisgICAgICAgIFRpbGVJbmRleCYgaW5k
ZXggPSB0aWxlLmtleTsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGUudmFsdWUtPnJl
Y3QoKTsKKyAgICAgICAgZG91YmxlIGRpc3RhbmNlID0gdGlsZURpc3RhbmNlMih2aXNpYmxlUmVj
dCwgdGlsZVJlY3QpOworICAgICAgICBpZiAoZGlzdGFuY2UgPD0gc2hvcnRlc3REaXN0YW5jZSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB0b1JlbW92ZS5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoZGlzdGFuY2UsIGluZGV4KSk7CisgICAgICAgIHN0ZDo6cHVzaF9oZWFwKHRvUmVtb3Zl
LmJlZ2luKCksIHRvUmVtb3ZlLmVuZCgpLCBzdGQ6OnB0cl9mdW4oaXNGYXJ0aGVyQXdheTxUaWxl
SW5kZXg+KSk7CisgICAgICAgIGlmICh0b1JlbW92ZS5zaXplKCkgPiB0aWxlc1RvUmVtb3ZlQ291
bnQpIHsKKyAgICAgICAgICAgIHN0ZDo6cG9wX2hlYXAodG9SZW1vdmUuYmVnaW4oKSwgdG9SZW1v
dmUuZW5kKCksIHN0ZDo6cHRyX2Z1bihpc0ZhcnRoZXJBd2F5PFRpbGVJbmRleD4pKTsKKyAgICAg
ICAgICAgIHRvUmVtb3ZlLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzaXpl
X3QgcmVtb3ZlQ291bnQgPSB0b1JlbW92ZS5zaXplKCk7CisgICAgZm9yIChzaXplX3QgbiA9IDA7
IG4gPCByZW1vdmVDb3VudDsgKytuKQorICAgICAgICBtX3RpbGVzLnJlbW92ZSh0b1JlbW92ZVtu
XS5zZWNvbmQpOworCisgICAgaWYgKCFzaG9ydGVzdERpc3RhbmNlKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHJldHVybiB0aWxlQ291bnQoKSAqIGJ5dGVzUGVyVGlsZSArIGJ5dGVzTmVl
ZGVkIDw9IG1heGltdW1CeXRlczsKK30KKwordm9pZCBUaWxlR3JpZDo6YWRkVGlsZXNDb3Zlcmlu
Z1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdFRvQ292ZXIpCit7CisgICAgLy8gV2UgbmV2ZXIgZHJh
dyBhbnl0aGluZyBvdXRzaWRlIG9mIG91ciBib3VuZHMuCisgICAgSW50UmVjdCByZWN0KHJlY3RU
b0NvdmVyKTsKKyAgICByZWN0LmludGVyc2VjdChib3VuZHMoKSk7CisgICAgaWYgKHJlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBUaWxlSW5kZXggdG9wTGVmdEluZGV4ID0g
dGlsZUluZGV4Rm9yUG9pbnQodG9wTGVmdChyZWN0KSk7CisgICAgVGlsZUluZGV4IGJvdHRvbVJp
Z2h0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludChib3R0b21SaWdodChyZWN0KSk7CisgICAgZm9y
IChpbnQgeUluZGV4ID0gdG9wTGVmdEluZGV4LnkoKTsgeUluZGV4IDw9IGJvdHRvbVJpZ2h0SW5k
ZXgueSgpOyArK3lJbmRleCkgeworICAgICAgICBmb3IgKGludCB4SW5kZXggPSB0b3BMZWZ0SW5k
ZXgueCgpOyB4SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC54KCk7ICsreEluZGV4KSB7CisgICAg
ICAgICAgICBUaWxlSW5kZXggaW5kZXgoeEluZGV4LCB5SW5kZXgpOworICAgICAgICAgICAgaWYg
KCF0aWxlRm9ySW5kZXgoaW5kZXgpKQorICAgICAgICAgICAgICAgIGFkZFRpbGVGb3JJbmRleChp
bmRleCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OmFkZFRpbGVGb3JJ
bmRleChjb25zdCBUaWxlSW5kZXgmIGluZGV4KQoreworICAgIG1fdGlsZXMuc2V0KGluZGV4LCBU
aWxlR3JpZFRpbGU6OmNyZWF0ZSh0aGlzLCB0aWxlUmVjdEZvckluZGV4KGluZGV4KSkpOworfQor
CitDQUxheWVyKiBUaWxlR3JpZDo6dGlsZUhvc3RMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fdGlsZUhvc3RMYXllci5nZXQoKTsKK30KKworSW50UmVjdCBUaWxlR3JpZDo6Ym91bmRzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKFt0aWxlSG9z
dExheWVyKCkgc2l6ZV0pKTsKK30KKworUGFzc1JlZlB0cjxUaWxlR3JpZFRpbGU+IFRpbGVHcmlk
Ojp0aWxlRm9ySW5kZXgoY29uc3QgVGlsZUluZGV4JiBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV90aWxlcy5nZXQoaW5kZXgpOworfQorCitJbnRSZWN0IFRpbGVHcmlkOjp0aWxlUmVjdEZv
ckluZGV4KGNvbnN0IFRpbGVJbmRleCYgaW5kZXgpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0
KGluZGV4LngoKSAqIG1fdGlsZVNpemUud2lkdGgoKSAtIChtX29yaWdpbi54KCkgPyBtX3RpbGVT
aXplLndpZHRoKCkgLSBtX29yaWdpbi54KCkgOiAwKSwKKyAgICAgICAgICAgICAgICAgaW5kZXgu
eSgpICogbV90aWxlU2l6ZS5oZWlnaHQoKSAtIChtX29yaWdpbi55KCkgPyBtX3RpbGVTaXplLmhl
aWdodCgpIC0gbV9vcmlnaW4ueSgpIDogMCksCisgICAgICAgICAgICAgICAgIG1fdGlsZVNpemUu
d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgbV90aWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgcmVj
dC5pbnRlcnNlY3QoYm91bmRzKCkpOworICAgIHJldHVybiByZWN0OworfQorCitUaWxlR3JpZDo6
VGlsZUluZGV4IFRpbGVHcmlkOjp0aWxlSW5kZXhGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fb3JpZ2luLngoKSA8IG1fdGlsZVNpemUud2lkdGgo
KSk7CisgICAgQVNTRVJUKG1fb3JpZ2luLnkoKSA8IG1fdGlsZVNpemUuaGVpZ2h0KCkpOworICAg
IGludCB4ID0gKHBvaW50LngoKSArIChtX29yaWdpbi54KCkgPyBtX3RpbGVTaXplLndpZHRoKCkg
LSBtX29yaWdpbi54KCkgOiAwKSkgLyBtX3RpbGVTaXplLndpZHRoKCk7CisgICAgaW50IHkgPSAo
cG9pbnQueSgpICsgKG1fb3JpZ2luLnkoKSA/IG1fdGlsZVNpemUuaGVpZ2h0KCkgLSBtX29yaWdp
bi55KCkgOiAwKSkgLyBtX3RpbGVTaXplLmhlaWdodCgpOworICAgIHJldHVybiBUaWxlSW5kZXgo
c3RkOjptYXgoeCwgMCksIHN0ZDo6bWF4KHksIDApKTsKK30KKwordm9pZCBUaWxlR3JpZDo6Y2Vu
dGVyVGlsZUdyaWRPcmlnaW4oY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpCit7CisgICAgaWYg
KHZpc2libGVSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQg
bWluaW11bUhvcml6b250YWxUaWxlcyA9IDEgKyAodmlzaWJsZVJlY3Qud2lkdGgoKSAtIDEpIC8g
bV90aWxlU2l6ZS53aWR0aCgpOworICAgIHVuc2lnbmVkIG1pbmltdW1WZXJ0aWNhbFRpbGVzID0g
MSArICh2aXNpYmxlUmVjdC5oZWlnaHQoKSAtIDEpIC8gbV90aWxlU2l6ZS5oZWlnaHQoKTsKKyAg
ICBUaWxlSW5kZXggY3VycmVudFRvcExlZnRJbmRleCA9IHRpbGVJbmRleEZvclBvaW50KHRvcExl
ZnQodmlzaWJsZVJlY3QpKTsKKyAgICBUaWxlSW5kZXggY3VycmVudEJvdHRvbVJpZ2h0SW5kZXgg
PSB0aWxlSW5kZXhGb3JQb2ludChib3R0b21SaWdodCh2aXNpYmxlUmVjdCkpOworICAgIHVuc2ln
bmVkIGN1cnJlbnRIb3Jpem9udGFsVGlsZXMgPSBjdXJyZW50Qm90dG9tUmlnaHRJbmRleC54KCkg
LSBjdXJyZW50VG9wTGVmdEluZGV4LngoKSArIDE7CisgICAgdW5zaWduZWQgY3VycmVudFZlcnRp
Y2FsVGlsZXMgPSBjdXJyZW50Qm90dG9tUmlnaHRJbmRleC55KCkgLSBjdXJyZW50VG9wTGVmdElu
ZGV4LnkoKSArIDE7CisKKyAgICAvLyBJZiB3ZSBoYXZlIHRpbGVzIGFscmVhZHksIG9ubHkgY2Vu
dGVyIGlmIHdlIHdvdWxkIGdldCBiZW5lZml0cyBmcm9tIGJvdGggZGlyZWN0aW9ucyAoYXMgd2Ug
bmVlZCB0byB0aHJvdyBvdXQgZXhpc3RpbmcgdGlsZXMpLgorICAgIGlmICh0aWxlQ291bnQoKSAm
JiAoY3VycmVudEhvcml6b250YWxUaWxlcyA9PSBtaW5pbXVtSG9yaXpvbnRhbFRpbGVzIHx8IGN1
cnJlbnRWZXJ0aWNhbFRpbGVzID09IG1pbmltdW1WZXJ0aWNhbFRpbGVzKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgSW50UG9pbnQgbmV3T3JpZ2luKDAsIDApOworICAgIEludFNpemUgc2l6ZSA9
IGJvdW5kcygpLnNpemUoKTsKKyAgICBpZiAoc2l6ZS53aWR0aCgpID4gbV90aWxlU2l6ZS53aWR0
aCgpKSB7CisgICAgICAgIG5ld09yaWdpbi5zZXRYKCh2aXNpYmxlUmVjdC54KCkgLSAobWluaW11
bUhvcml6b250YWxUaWxlcyAqIG1fdGlsZVNpemUud2lkdGgoKSAtIHZpc2libGVSZWN0LndpZHRo
KCkpIC8gMikgJSBtX3RpbGVTaXplLndpZHRoKCkpOworICAgICAgICBpZiAobmV3T3JpZ2luLngo
KSA8IDApCisgICAgICAgICAgICBuZXdPcmlnaW4uc2V0WCgwKTsKKyAgICB9CisgICAgaWYgKHNp
emUuaGVpZ2h0KCkgPiBtX3RpbGVTaXplLmhlaWdodCgpKSB7CisgICAgICAgIG5ld09yaWdpbi5z
ZXRZKCh2aXNpYmxlUmVjdC55KCkgLSAobWluaW11bVZlcnRpY2FsVGlsZXMgKiBtX3RpbGVTaXpl
LmhlaWdodCgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCkpIC8gMikgJSBtX3RpbGVTaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgaWYgKG5ld09yaWdpbi55KCkgPCAwKQorICAgICAgICAgICAgbmV3T3Jp
Z2luLnNldFkoMCk7CisgICAgfQorCisgICAgLy8gRHJvcCBhbGwgZXhpc3RpbmcgdGlsZXMgaWYg
dGhlIG9yaWdpbiBtb3ZlZC4KKyAgICBpZiAobmV3T3JpZ2luID09IG1fb3JpZ2luKQorICAgICAg
ICByZXR1cm47CisgICAgbV90aWxlcy5jbGVhcigpOworICAgIG1fb3JpZ2luID0gbmV3T3JpZ2lu
OworfQorCitQYXNzUmVmUHRyPFRpbGVHcmlkVGlsZT4gVGlsZUdyaWQ6OnRpbGVGb3JQb2ludChj
b25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRpbGVGb3JJbmRleCh0
aWxlSW5kZXhGb3JQb2ludChwb2ludCkpOworfQorCitib29sIFRpbGVHcmlkOjp0aWxlc0NvdmVy
KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRpbGVGb3JQb2ludChy
ZWN0LmxvY2F0aW9uKCkpICYmIHRpbGVGb3JQb2ludChJbnRQb2ludChyZWN0Lm1heFgoKSAtIDEs
IHJlY3QueSgpKSkgJiYKKyAgICB0aWxlRm9yUG9pbnQoSW50UG9pbnQocmVjdC54KCksIHJlY3Qu
bWF4WSgpIC0gMSkpICYmIHRpbGVGb3JQb2ludChJbnRQb2ludChyZWN0Lm1heFgoKSAtIDEsIHJl
Y3QubWF4WSgpIC0gMSkpOworfQorCit2b2lkIFRpbGVHcmlkOjp1cGRhdGVUaWxlT3BhY2l0eSgp
Cit7CisgICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBmb3Ig
KFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CisgICAgICAgIFtpdC0+dmFsdWUtPnRpbGVMYXllcigpIHNldE9wYXF1ZTptX3RpbGVDYWNoZS0+
dGlsZXNPcGFxdWUoKV07Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OnVwZGF0ZVRpbGVCb3JkZXJWaXNp
YmlsaXR5KCkKK3sKKyAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwor
ICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLT5zaG93Qm9yZGVyKG1fdGlsZUNhY2hlLT50aWxl
Qm9yZGVyc1Zpc2libGUoKSk7Cit9CisKK3Vuc2lnbmVkIFRpbGVHcmlkOjp0aWxlQ291bnQoKSBj
b25zdAoreworICAgIHJldHVybiBtX3RpbGVzLnNpemUoKTsKK30KKworYm9vbCBUaWxlR3JpZDo6
Y2hlY2tEb1NpbmdsZVRpbGVMYXlvdXQoKQoreworICAgIEludFNpemUgc2l6ZSA9IGJvdW5kcygp
LnNpemUoKTsKKyAgICBpZiAoc2l6ZS53aWR0aCgpID4gbV90aWxlU2l6ZS53aWR0aCgpIHx8IHNp
emUuaGVpZ2h0KCkgPiBtX3RpbGVTaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAobV9vcmlnaW4gIT0gSW50UG9pbnQoMCwgMCkpIHsKKyAgICAgICAgbV90aWxl
cy5jbGVhcigpOworICAgICAgICBtX29yaWdpbiA9IEludFBvaW50KDAsIDApOworICAgIH0KKwor
ICAgIGRyb3BJbnZhbGlkVGlsZXMoKTsKKworICAgIGlmIChzaXplLmlzRW1wdHkoKSkgeworICAg
ICAgICBBU1NFUlQoIW1fdGlsZXMuZ2V0KFRpbGVJbmRleCgwLCAwKSkpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBUaWxlSW5kZXggb3JpZ2luSW5kZXgoMCwgMCk7CisgICAg
aWYgKCFtX3RpbGVzLmdldChvcmlnaW5JbmRleCkpCisgICAgICAgIG1fdGlsZXMuc2V0KG9yaWdp
bkluZGV4LCBUaWxlR3JpZFRpbGU6OmNyZWF0ZSh0aGlzLCB0aWxlUmVjdEZvckluZGV4KG9yaWdp
bkluZGV4KSkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OnVwZGF0
ZUhvc3RMYXllclNpemUoKQoreworICAgIENBTGF5ZXIqIGhvc3RMYXllciA9IG1fdGlsZUNhY2hl
LT5ob3N0TGF5ZXIoKTsKKyAgICBDR1JlY3QgdGlsZUhvc3RCb3VuZHMgPSBbaG9zdExheWVyIGNv
bnZlcnRSZWN0Oltob3N0TGF5ZXIgYm91bmRzXSB0b0xheWVyOnRpbGVIb3N0TGF5ZXIoKV07Cisg
ICAgQ0dTaXplIHRyYW5zZm9ybWVkU2l6ZTsKKyAgICB0cmFuc2Zvcm1lZFNpemUud2lkdGggPSBD
R1JvdW5kKHRpbGVIb3N0Qm91bmRzLnNpemUud2lkdGgpOworICAgIHRyYW5zZm9ybWVkU2l6ZS5o
ZWlnaHQgPSBDR1JvdW5kKHRpbGVIb3N0Qm91bmRzLnNpemUuaGVpZ2h0KTsKKworICAgIENHUmVj
dCBib3VuZHMgPSBbdGlsZUhvc3RMYXllcigpIGJvdW5kc107CisgICAgaWYgKENHU2l6ZUVxdWFs
VG9TaXplKGJvdW5kcy5zaXplLCB0cmFuc2Zvcm1lZFNpemUpKQorICAgICAgICByZXR1cm47Cisg
ICAgYm91bmRzLnNpemUgPSB0cmFuc2Zvcm1lZFNpemU7CisgICAgW3RpbGVIb3N0TGF5ZXIoKSBz
ZXRCb3VuZHM6Ym91bmRzXTsKK30KKwordm9pZCBUaWxlR3JpZDo6ZHJvcEludmFsaWRUaWxlcygp
Cit7CisgICAgSW50UmVjdCBib3VuZHMgPSB0aGlzLT5ib3VuZHMoKTsKKyAgICBJbnRSZWN0IGRy
b3BCb3VuZHMgPSBpbnRlcnNlY3Rpb24obV92YWxpZEJvdW5kcywgYm91bmRzKTsKKyAgICBWZWN0
b3I8VGlsZUluZGV4PiB0b1JlbW92ZTsKKyAgICBmb3IgKGF1dG8gdGlsZSA6IG1fdGlsZXMpIHsK
KyAgICAgICAgVGlsZUluZGV4JiBpbmRleCA9IHRpbGUua2V5OworICAgICAgICBJbnRSZWN0IHRp
bGVSZWN0ID0gdGlsZS52YWx1ZS0+cmVjdCgpOworICAgICAgICBJbnRSZWN0IGV4cGVjdGVkVGls
ZVJlY3QgPSB0aWxlUmVjdEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKGV4cGVjdGVkVGls
ZVJlY3QgIT0gdGlsZVJlY3QgfHwgIWRyb3BCb3VuZHMuY29udGFpbnModGlsZVJlY3QpKQorICAg
ICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGluZGV4KTsKKyAgICB9CisgICAgdW5zaWduZWQgcmVt
b3ZlQ291bnQgPSB0b1JlbW92ZS5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8
IHJlbW92ZUNvdW50OyArK24pCisgICAgICAgIG1fdGlsZXMucmVtb3ZlKHRvUmVtb3ZlW25dKTsK
KworICAgIG1fdmFsaWRCb3VuZHMgPSBib3VuZHM7Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OmludmFs
aWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgaWYgKCFoYXNUaWxl
cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IGJvdW5kcyA9IHRoaXMtPmJvdW5k
cygpOworICAgIGlmIChpbnRlcnNlY3Rpb24oYm91bmRzLCBtX3ZhbGlkQm91bmRzKSAhPSBtX3Zh
bGlkQm91bmRzKSB7CisgICAgICAgIC8vIFRoZSBib3VuZHMgaGF2ZSBnb3Qgc21hbGxlci4gRXZl
cnl0aGluZyBvdXRzaWRlIHdpbGwgYWxzbyBiZSBjb25zaWRlcmVkIGludmFsaWQgYW5kIHdpbGwg
YmUgZHJvcHBlZCBieSBkcm9wSW52YWxpZFRpbGVzKCkuCisgICAgICAgIC8vIER1ZSB0byBkaXJ0
eVJlY3QgYmVpbmcgbGltaXRlZCB0byBjdXJyZW50IGJvdW5kcyB0aGUgdGlsZXMgdGhhdCBhcmUg
dGVtcG9yYXJpbHkgb3V0c2lkZSBtaWdodCBtaXNzIGludmFsaWRhdGlvbiAKKyAgICAgICAgLy8g
Y29tcGxldGVseSBvdGh3ZXJ3aXNlLgorICAgICAgICBtX3ZhbGlkQm91bmRzID0gYm91bmRzOwor
ICAgIH0KKworICAgIFZlY3RvcjxUaWxlSW5kZXg+IGludmFsaWRhdGVkVGlsZXM7CisKKyAgICBp
ZiAoZGlydHlSZWN0LndpZHRoKCkgPiBtX3RpbGVTaXplLndpZHRoKCkgKiA0IHx8IGRpcnR5UmVj
dC5oZWlnaHQoKSA+IG1fdGlsZVNpemUuaGVpZ2h0KCkgKiA0KSB7CisgICAgICAgIC8vIEZvciBs
YXJnZSBpbnZhbGlkYXRlcywgaXRlcmF0ZSBvdmVyIGxpdmUgdGlsZXMuCisgICAgICAgIFRpbGVN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgICAgIGZvciAoVGlsZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICAgICAgVGlsZUdyaWRUaWxlKiB0aWxlID0gaXQtPnZhbHVlLmdldCgpOworICAgICAgICAgICAg
aWYgKCF0aWxlLT5yZWN0KCkuaW50ZXJzZWN0cyhkaXJ0eVJlY3QpKQorICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB0aWxlLT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOwor
ICAgICAgICAgICAgaW52YWxpZGF0ZWRUaWxlcy5hcHBlbmQoaXQtPmtleSk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBUaWxlSW5kZXggdG9wTGVmdEluZGV4ID0gdGlsZUluZGV4
Rm9yUG9pbnQodG9wTGVmdChkaXJ0eVJlY3QpKTsKKyAgICAgICAgVGlsZUluZGV4IGJvdHRvbVJp
Z2h0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludChib3R0b21SaWdodChkaXJ0eVJlY3QpKTsKKyAg
ICAgICAgZm9yIChpbnQgeUluZGV4ID0gdG9wTGVmdEluZGV4LnkoKTsgeUluZGV4IDw9IGJvdHRv
bVJpZ2h0SW5kZXgueSgpOyArK3lJbmRleCkgeworICAgICAgICAgICAgZm9yIChpbnQgeEluZGV4
ID0gdG9wTGVmdEluZGV4LngoKTsgeEluZGV4IDw9IGJvdHRvbVJpZ2h0SW5kZXgueCgpOyArK3hJ
bmRleCkgeworICAgICAgICAgICAgICAgIFRpbGVJbmRleCBpbmRleCh4SW5kZXgsIHlJbmRleCk7
CisgICAgICAgICAgICAgICAgUmVmUHRyPFRpbGVHcmlkVGlsZT4gdGlsZSA9IHRpbGVGb3JJbmRl
eChpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCF0aWxlKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoIXRpbGUtPnJlY3QoKS5pbnRlcnNlY3Rz
KGRpcnR5UmVjdCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIHRpbGUtPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CisgICAgICAgICAgICAgICAgaW52
YWxpZGF0ZWRUaWxlcy5hcHBlbmQoaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGlmIChpbnZhbGlkYXRlZFRpbGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIC8vIFdoZW4gdXNpbmcgbWluaW1hbCBjb3ZlcmFnZSwgZHJvcCBzcGVjdWxhdGl2ZSB0
aWxlcyBpbnN0ZWFkIG9mIHVwZGF0aW5nIHRoZW0uCisgICAgaWYgKCFzaG91bGRVc2VNaW5pbWFs
VGlsZUNvdmVyYWdlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV90aWxlQ2FjaGUtPnRp
bGluZ01vZGUoKSAhPSBUaWxlQ2FjaGU6Ok1pbmltYWwgJiYgbV90aWxlQ2FjaGUtPnRpbGluZ01v
ZGUoKSAhPSBUaWxlQ2FjaGU6Ok5vcm1hbCkKKyAgICAgICAgcmV0dXJuOworICAgIEludFJlY3Qg
dmlzaWJsZVJlY3QgPSB0aGlzLT52aXNpYmxlUmVjdCgpOworICAgIHVuc2lnbmVkIGNvdW50ID0g
aW52YWxpZGF0ZWRUaWxlcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgUmVmUHRyPFRpbGVHcmlkVGlsZT4gdGlsZSA9IHRpbGVGb3JJ
bmRleChpbnZhbGlkYXRlZFRpbGVzW2ldKTsKKyAgICAgICAgaWYgKCF0aWxlLT5yZWN0KCkuaW50
ZXJzZWN0cyh2aXNpYmxlUmVjdCkpCisgICAgICAgICAgICBtX3RpbGVzLnJlbW92ZShpbnZhbGlk
YXRlZFRpbGVzW2ldKTsKKyAgICB9Cit9CisKK2Jvb2wgVGlsZUdyaWQ6OnNob3VsZFVzZU1pbmlt
YWxUaWxlQ292ZXJhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3RpbGVDYWNoZS0+dGlsaW5n
TW9kZSgpID09IFRpbGVDYWNoZTo6TWluaW1hbAorICAgICAgICB8fCAhbV90aWxlQ2FjaGUtPmlz
U3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkKCkKKyAgICAgICAgfHwgbWVtb3J5UHJlc3N1
cmVIYW5kbGVyKCkuaGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3VyZSgpOworfQorCitJbnRSZWN0IFRp
bGVHcmlkOjphZGp1c3RDb3ZlclJlY3RGb3JQYWdlQm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3Qp
IGNvbnN0Cit7CisgICAgLy8gQWRqdXN0IHRoZSByZWN0IHNvIHRoYXQgaXQgc3RheXMgd2l0aGlu
IHRoZSBib3VuZHMgYW5kIGtlZXBzIHRoZSBwaXhlbCBzaXplLgorICAgIEludFJlY3QgYm91bmRz
ID0gdGhpcy0+Ym91bmRzKCk7CisgICAgSW50UmVjdCBhZGp1c3RlZFJlY3QgPSByZWN0OworICAg
IGFkanVzdGVkUmVjdC5tb3ZlKHJlY3QueCgpIDwgYm91bmRzLngoKSA/IGJvdW5kcy54KCkgLSBy
ZWN0LngoKSA6IDAsCisgICAgICAgICAgICAgIHJlY3QueSgpIDwgYm91bmRzLnkoKSA/IGJvdW5k
cy55KCkgLSByZWN0LnkoKSA6IDApOworICAgIGFkanVzdGVkUmVjdC5tb3ZlKHJlY3QubWF4WCgp
ID4gYm91bmRzLm1heFgoKSA/IGJvdW5kcy5tYXhYKCkgLSByZWN0Lm1heFgoKSA6IDAsCisgICAg
ICAgICAgICAgIHJlY3QubWF4WSgpID4gYm91bmRzLm1heFkoKSA/IGJvdW5kcy5tYXhZKCkgLSBy
ZWN0Lm1heFkoKSA6IDApOworICAgIGFkanVzdGVkUmVjdCA9IGludGVyc2VjdGlvbihib3VuZHMs
IGFkanVzdGVkUmVjdCk7CisgICAgaWYgKGFkanVzdGVkUmVjdCA9PSByZWN0IHx8IGFkanVzdGVk
UmVjdC5pc0VtcHR5KCkgfHwgc2hvdWxkVXNlTWluaW1hbFRpbGVDb3ZlcmFnZSgpKQorICAgICAg
ICByZXR1cm4gYWRqdXN0ZWRSZWN0OworICAgIGludCBwaXhlbHMgPSBhZGp1c3RlZFJlY3Qud2lk
dGgoKSAqIGFkanVzdGVkUmVjdC5oZWlnaHQoKTsKKyAgICBpZiAoYWRqdXN0ZWRSZWN0LndpZHRo
KCkgIT0gcmVjdC53aWR0aCgpKQorICAgICAgICBhZGp1c3RlZFJlY3QuaW5mbGF0ZVkoKHBpeGVs
cyAvIGFkanVzdGVkUmVjdC53aWR0aCgpIC0gYWRqdXN0ZWRSZWN0LmhlaWdodCgpKSAvIDIpOwor
ICAgIGVsc2UgaWYgKGFkanVzdGVkUmVjdC5oZWlnaHQoKSAhPSByZWN0LmhlaWdodCgpKQorICAg
ICAgICBhZGp1c3RlZFJlY3QuaW5mbGF0ZVgoKHBpeGVscyAvIGFkanVzdGVkUmVjdC5oZWlnaHQo
KSAtIGFkanVzdGVkUmVjdC53aWR0aCgpKSAvIDIpOworICAgIHJldHVybiBpbnRlcnNlY3Rpb24o
YWRqdXN0ZWRSZWN0LCBib3VuZHMpOworfQorCitJbnRSZWN0IFRpbGVHcmlkOjpjYWxjdWxhdGVD
b3ZlclJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGJvb2wmIGNlbnRlckdyaWQpCit7
CisgICAgLy8gVXNlIG1pbmltdW0gY292ZXJSZWN0IGlmIHdlIGFyZSB1bmRlciBtZW1vcnkgcHJl
c3N1cmUuCisgICAgaWYgKHNob3VsZFVzZU1pbmltYWxUaWxlQ292ZXJhZ2UoKSkgeworICAgICAg
ICBjZW50ZXJHcmlkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHZpc2libGVSZWN0OworICAgIH0K
KyAgICBJbnRSZWN0IGNvdmVyUmVjdCA9IHZpc2libGVSZWN0OworICAgIGNlbnRlckdyaWQgPSBm
YWxzZTsKKyAgICBjb3ZlclJlY3QuaW5mbGF0ZVgodmlzaWJsZVJlY3Qud2lkdGgoKSAvIDIpOwor
ICAgIGNvdmVyUmVjdC5pbmZsYXRlWSh2aXNpYmxlUmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJu
IGFkanVzdENvdmVyUmVjdEZvclBhZ2VCb3VuZHMoY292ZXJSZWN0KTsKK30KKworZG91YmxlIFRp
bGVHcmlkOjp0aWxlRGlzdGFuY2UyKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJ
bnRSZWN0JiB0aWxlUmVjdCkgY29uc3QKK3sKKyAgICAvLyBUaGUgImRpc3RhbmNlIiBjYWxjdWxh
dGVkIGhlcmUgaXMgdXNlZCB0byBwaWNrIHdoaWNoIHRpbGUgdG8gY2FjaGUgbmV4dC4gVGhlIGlk
ZWEgaXMgdG8gY3JlYXRlIHRob3NlCisgICAgLy8gY2xvc2VzdCB0byB0aGUgY3VycmVudCB2aWV3
cG9ydCBmaXJzdCBzbyB0aGUgdXNlciBpcyBtb3JlIGxpa2VseSB0byBzZWUgYWxyZWFkeSByZW5k
ZXJlZCBjb250ZW50IHdlIHNoZQorICAgIC8vIHNjcm9sbHMuIFRoZSBjYWxjdWxhdGlvbiBpcyB3
ZWlnaHRlZCB0byBwcmVmZXIgdmVydGljYWwgYW5kIGRvd253YXJkIGRpcmVjdGlvbi4KKyAgICBp
ZiAodmlzaWJsZVJlY3QuaW50ZXJzZWN0cyh0aWxlUmVjdCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIEludFBvaW50IHZpc2libGVDZW50ZXIgPSB2aXNpYmxlUmVjdC5sb2NhdGlvbigpICsgSW50
U2l6ZSh2aXNpYmxlUmVjdC53aWR0aCgpIC8gMiwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkgLyAyKTsK
KyAgICBJbnRQb2ludCB0aWxlQ2VudGVyID0gdGlsZVJlY3QubG9jYXRpb24oKSArIEludFNpemUo
dGlsZVJlY3Qud2lkdGgoKSAvIDIsIHRpbGVSZWN0LmhlaWdodCgpIC8gMik7CisgICAgCisgICAg
ZG91YmxlIGhvcml6b250YWxCaWFzID0gMS4wOworICAgIGRvdWJsZSBsZWZ0d2FyZEJpYXMgPSAx
LjA7CisgICAgZG91YmxlIHJpZ2h0d2FyZEJpYXMgPSAxLjA7CisKKyAgICBkb3VibGUgdmVydGlj
YWxCaWFzID0gMS4wOworICAgIGRvdWJsZSB1cHdhcmRCaWFzID0gMS4wOworICAgIGRvdWJsZSBk
b3dud2FyZEJpYXMgPSAxLjA7CisKKyAgICBjb25zdCBkb3VibGUgdGlsaW5nQmlhc1ZlcnlMaWtl
bHkgPSAwLjg7CisgICAgY29uc3QgZG91YmxlIHRpbGluZ0JpYXNMaWtlbHkgPSAwLjk7CisKKyAg
ICBzd2l0Y2ggKG1fdGlsZUNhY2hlLT50aWxpbmdEaXJlY3Rpb24oKSkgeworICAgIGNhc2UgVGls
ZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb25VcDoKKyAgICAgICAgdmVydGljYWxCaWFzID0gdGlsaW5n
Qmlhc1ZlcnlMaWtlbHk7CisgICAgICAgIHVwd2FyZEJpYXMgPSB0aWxpbmdCaWFzTGlrZWx5Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFRpbGVDYWNoZTo6VGlsaW5nRGlyZWN0aW9uRG93bjoK
KyAgICAgICAgdmVydGljYWxCaWFzID0gdGlsaW5nQmlhc1ZlcnlMaWtlbHk7CisgICAgICAgIGRv
d253YXJkQmlhcyA9IHRpbGluZ0JpYXNMaWtlbHk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
VGlsZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb25MZWZ0OgorICAgICAgICBob3Jpem9udGFsQmlhcyA9
IHRpbGluZ0JpYXNWZXJ5TGlrZWx5OworICAgICAgICBsZWZ0d2FyZEJpYXMgPSB0aWxpbmdCaWFz
TGlrZWx5OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRpbGVDYWNoZTo6VGlsaW5nRGlyZWN0
aW9uUmlnaHQ6CisgICAgICAgIGhvcml6b250YWxCaWFzID0gdGlsaW5nQmlhc1ZlcnlMaWtlbHk7
CisgICAgICAgIHJpZ2h0d2FyZEJpYXMgPSB0aWxpbmdCaWFzTGlrZWx5OworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBkb3VibGUgeFNjYWxlID0gaG9yaXpvbnRhbEJpYXMgKiB2aXNpYmxl
UmVjdC5oZWlnaHQoKSAvIHZpc2libGVSZWN0LndpZHRoKCkgKiAodGlsZUNlbnRlci54KCkgPj0g
dmlzaWJsZUNlbnRlci54KCkgPyByaWdodHdhcmRCaWFzIDogbGVmdHdhcmRCaWFzKTsKKyAgICBk
b3VibGUgeVNjYWxlID0gdmVydGljYWxCaWFzICogdmlzaWJsZVJlY3Qud2lkdGgoKSAvIHZpc2li
bGVSZWN0LmhlaWdodCgpICogKHRpbGVDZW50ZXIueSgpID49IHZpc2libGVDZW50ZXIueSgpID8g
ZG93bndhcmRCaWFzIDogdXB3YXJkQmlhcyk7CisKKyAgICBkb3VibGUgeERpc3RhbmNlID0geFNj
YWxlICogKHRpbGVDZW50ZXIueCgpIC0gdmlzaWJsZUNlbnRlci54KCkpOworICAgIGRvdWJsZSB5
RGlzdGFuY2UgPSB5U2NhbGUgKiAodGlsZUNlbnRlci55KCkgLSB2aXNpYmxlQ2VudGVyLnkoKSk7
CisKKyAgICBkb3VibGUgZGlzdGFuY2UyID0geERpc3RhbmNlICogeERpc3RhbmNlICsgeURpc3Rh
bmNlICogeURpc3RhbmNlOworICAgIHJldHVybiBkaXN0YW5jZTI7Cit9CisKK3ZvaWQgVGlsZUdy
aWQ6OmNyZWF0ZVRpbGVzKFRpbGVDYWNoZTo6U3luY2hyb25vdXNUaWxlQ3JlYXRpb25Nb2RlIGNy
ZWF0aW9uTW9kZSkKK3sKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdGhpcy0+dmlzaWJsZVJl
Y3QoKTsKKyAgICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBEcm9wIHRpbGVzIHRoYXQgYXJlIHdyb25nIHNpemUgb3Igb3V0c2lkZSB0aGUgZnJh
bWUgKGJlY2F1c2UgdGhlIGZyYW1lIGhhcyBiZWVuIHJlc2l6ZWQpLgorICAgIGRyb3BJbnZhbGlk
VGlsZXMoKTsKKworICAgIGJvb2wgY2VudGVyR3JpZDsKKyAgICBJbnRSZWN0IGNvdmVyUmVjdCA9
IGNhbGN1bGF0ZUNvdmVyUmVjdCh2aXNpYmxlUmVjdCwgY2VudGVyR3JpZCk7CisKKyAgICAvLyBJ
ZiB0aWxlIHNpemUgaXMgYmlnZ2VyIHRoYW4gdGhlIHZpZXcsIGNlbnRlcmluZyBtaW5pbWl6ZXMg
dGhlIHBhaW50aW5nIG5lZWRlZCB0byBjb3ZlciB0aGUgc2NyZWVuLgorICAgIC8vIFRoaXMgaXMg
ZXNwZWNpYWxseSB1c2VmdWwgYWZ0ZXIgem9vbWluZyAKKyAgICBjZW50ZXJHcmlkID0gY2VudGVy
R3JpZCB8fCAhdGlsZUNvdW50KCk7CisgICAgaWYgKGNlbnRlckdyaWQpCisgICAgICAgIGNlbnRl
clRpbGVHcmlkT3JpZ2luKHZpc2libGVSZWN0KTsKKworICAgIGRvdWJsZSBzaG9ydGVzdERpc3Rh
bmNlID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOworICAgIGRvdWJs
ZSBjb3ZlcmVkRGlzdGFuY2UgPSAwOworICAgIFZlY3RvcjxUaWxlR3JpZDo6VGlsZUluZGV4PiB0
aWxlc1RvQ3JlYXRlOworICAgIHVuc2lnbmVkIHBlbmRpbmdUaWxlQ291bnQgPSAwOworCisgICAg
VGlsZUdyaWQ6OlRpbGVJbmRleCB0b3BMZWZ0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludCh0b3BM
ZWZ0KGNvdmVyUmVjdCkpOworICAgIFRpbGVHcmlkOjpUaWxlSW5kZXggYm90dG9tUmlnaHRJbmRl
eCA9IHRpbGVJbmRleEZvclBvaW50KGJvdHRvbVJpZ2h0KGNvdmVyUmVjdCkpOworICAgIGZvciAo
aW50IHlJbmRleCA9IHRvcExlZnRJbmRleC55KCk7IHlJbmRleCA8PSBib3R0b21SaWdodEluZGV4
LnkoKTsgKyt5SW5kZXgpIHsKKyAgICAgICAgZm9yIChpbnQgeEluZGV4ID0gdG9wTGVmdEluZGV4
LngoKTsgeEluZGV4IDw9IGJvdHRvbVJpZ2h0SW5kZXgueCgpOyArK3hJbmRleCkgeworICAgICAg
ICAgICAgVGlsZUdyaWQ6OlRpbGVJbmRleCBpbmRleCh4SW5kZXgsIHlJbmRleCk7CisgICAgICAg
ICAgICAvLyBDdXJyZW50bHkgdmlzaWJsZSB0aWxlcyBoYXZlIGRpc3RhbmNlIG9mIDAgYW5kIGdl
dCBhbGwgY3JlYXRlZCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbi4KKyAgICAgICAgICAgIGRvdWJs
ZSBkaXN0YW5jZSA9IHRpbGVEaXN0YW5jZTIodmlzaWJsZVJlY3QsIHRpbGVSZWN0Rm9ySW5kZXgo
aW5kZXgpKTsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IGNvdmVyZWREaXN0YW5jZSkKKyAg
ICAgICAgICAgICAgICBjb3ZlcmVkRGlzdGFuY2UgPSBkaXN0YW5jZTsKKyAgICAgICAgICAgIGlm
ICh0aWxlRm9ySW5kZXgoaW5kZXgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgKytwZW5kaW5nVGlsZUNvdW50OworICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gc2hv
cnRlc3REaXN0YW5jZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlm
IChkaXN0YW5jZSA8IHNob3J0ZXN0RGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICB0aWxlc1Rv
Q3JlYXRlLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgc2hvcnRlc3REaXN0YW5jZSA9IGRpc3Rh
bmNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGlsZXNUb0NyZWF0ZS5hcHBlbmQoaW5k
ZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgc2l6ZV90IHRpbGVzVG9DcmVhdGVDb3VudCA9
IHRpbGVzVG9DcmVhdGUuc2l6ZSgpOworCisgICAgLy8gVGlsZSBjcmVhdGlvbiB0aW1lciB3aWxs
IGludm9rZSB0aGlzIGZ1bmN0aW9uIGFnYWluIGluIENvdmVyU3BlY3VsYXRpdmUgbW9kZS4KKyAg
ICBib29sIGNhbmRpZGF0ZVRpbGVzQXJlU3BlY3VsYXRpdmUgPSBzaG9ydGVzdERpc3RhbmNlID4g
MDsKKyAgICBpZiAoY3JlYXRpb25Nb2RlID09IFRpbGVDYWNoZTo6Q292ZXJWaXNpYmxlT25seSAm
JiBjYW5kaWRhdGVUaWxlc0FyZVNwZWN1bGF0aXZlKQorICAgICAgICB0aWxlc1RvQ3JlYXRlQ291
bnQgPSAwOworCisgICAgLy8gRXZlbiBpZiB3ZSBkb24ndCBjcmVhdGUgYW55IHRpbGVzLCB3ZSBz
aG91bGQgc3RpbGwgZHJvcCBkaXN0YW50IHRpbGVzCisgICAgLy8gaW4gY2FzZSBjb3ZlclJlY3Qg
Z290IHNtYWxsZXIuCisgICAgZG91YmxlIGtlZXBEaXN0YW5jZSA9IHN0ZDo6bWluKHNob3J0ZXN0
RGlzdGFuY2UsIGNvdmVyZWREaXN0YW5jZSk7CisgICAgaWYgKCFkcm9wRGlzdGFudFRpbGVzKHRp
bGVzVG9DcmVhdGVDb3VudCwga2VlcERpc3RhbmNlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUKHBlbmRpbmdUaWxlQ291bnQgPj0gdGlsZXNUb0NyZWF0ZUNvdW50KTsKKyAgICBpZiAo
IXBlbmRpbmdUaWxlQ291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoc2l6ZV90IG4g
PSAwOyBuIDwgdGlsZXNUb0NyZWF0ZUNvdW50OyArK24pCisgICAgICAgIGFkZFRpbGVGb3JJbmRl
eCh0aWxlc1RvQ3JlYXRlW25dKTsKKworICAgIGJvb2wgZGlkQ3JlYXRlVGlsZXMgPSAhIXRpbGVz
VG9DcmVhdGVDb3VudDsKKyAgICBib29sIGNyZWF0ZU1vcmVUaWxlcyA9IHBlbmRpbmdUaWxlQ291
bnQgPiB0aWxlc1RvQ3JlYXRlQ291bnQ7CisgICAgbV90aWxlQ2FjaGUtPmZpbmlzaGVkQ3JlYXRp
bmdUaWxlcyhkaWRDcmVhdGVUaWxlcywgY3JlYXRlTW9yZVRpbGVzKTsKK30KKwordm9pZCBUaWxl
R3JpZDo6ZHVtcFRpbGVzKCkKK3sKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdGhpcy0+dmlz
aWJsZVJlY3QoKTsKKyAgICBOU0xvZyhAInRyYW5zZm9ybWVkIHZpc2libGVSZWN0ID0gWyU2ZCAl
NmQgJTZkICU2ZF0iLCB2aXNpYmxlUmVjdC54KCksIHZpc2libGVSZWN0LnkoKSwgdmlzaWJsZVJl
Y3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpOworICAgIHVuc2lnbmVkIGkgPSAwOwor
ICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChUaWxl
TWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIFRpbGVJbmRleCYgaW5kZXggPSBpdC0+a2V5OworICAgICAgICBJbnRSZWN0IHRpbGVS
ZWN0ID0gaXQtPnZhbHVlLT5yZWN0KCk7CisgICAgICAgIE5TTG9nKEAiIyUtM2QgKCUzZCAlM2Qp
IC0gWyU2ZCAlNmQgJTZkICU2ZF0lQCIsICsraSwgaW5kZXgueCgpLCBpbmRleC55KCksIHRpbGVS
ZWN0LngoKSwgdGlsZVJlY3QueSgpLCB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQo
KSwgdGlsZVJlY3QuaW50ZXJzZWN0cyh2aXNpYmxlUmVjdCkgPyBAIiAqIiA6IEAiIik7CisgICAg
ICAgIE5TTG9nKEAiICAgICAlQCIsIFtpdC0+dmFsdWUtPnRpbGVMYXllcigpIGNvbnRlbnRzXSk7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWRU
aWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWRUaWxlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMmFkOTIyODVmZDk4ZGI2YTI5MzI4YTJiM2UwMGM0ZjkyZGFhMDFkNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUuaApAQCAt
MCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUaWxlR3JpZFRpbGVfaAorI2RlZmlu
ZSBUaWxlR3JpZFRpbGVfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGNsYXNzIFRpbGVMYXllcjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUaWxlR3JpZDsKKworLy8gUmVmY291bnQgdGhlIHRp
bGVzIHNvIHRoZXkgd29yayBuaWNlbHkgaW4gdmVjdG9yIGFuZCB3ZSBrbm93IHdoZW4gdG8gcmVt
b3ZlIHRoZSB0aWxlIGxheWVyIGZyb20gdGhlIHBhcmVudC4KK2NsYXNzIFRpbGVHcmlkVGlsZSA6
IHB1YmxpYyBSZWZDb3VudGVkPFRpbGVHcmlkVGlsZT4geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRpbGVHcmlkVGlsZT4gY3JlYXRlKFRpbGVHcmlkKiBncmlkLCBjb25zdCBJbnRS
ZWN0JiByZWN0KSB7IHJldHVybiBhZG9wdFJlZjxUaWxlR3JpZFRpbGU+KG5ldyBUaWxlR3JpZFRp
bGUoZ3JpZCwgcmVjdCkpOyB9CisgICAgflRpbGVHcmlkVGlsZSgpOworCisgICAgVGlsZUxheWVy
KiB0aWxlTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3RpbGVMYXllci5nZXQoKTsgfQorICAgIHZv
aWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdEluU3VyZmFjZSk7CisgICAgSW50
UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdm9pZCBzZXRSZWN0KGNv
bnN0IEludFJlY3QmIHRpbGVSZWN0KTsKKyAgICB2b2lkIHNob3dCb3JkZXIoYm9vbCk7CisKK3By
aXZhdGU6CisgICAgVGlsZUdyaWRUaWxlKFRpbGVHcmlkKiwgY29uc3QgSW50UmVjdCYpOworCisg
ICAgVGlsZUdyaWQqIG1fdGlsZUdyaWQ7CisgICAgUmV0YWluUHRyPFRpbGVMYXllcj4gbV90aWxl
TGF5ZXI7CisgICAgSW50UmVjdCBtX3JlY3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisjZW5kaWYgLy8gVGlsZUdyaWRUaWxlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWRUaWxlLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2
MTg2N2E3MTczYjhlMmMyYzBmZjQ5ZGZmM2Q1MTUyNGRiM2JlNjUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWRUaWxlLm1tCkBAIC0wLDAgKzEs
MTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRpbGVH
cmlkLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIlRpbGVDYWNoZS5oIgorI2luY2x1ZGUgIlRpbGVHcmlkVGlsZS5oIgorI2luY2x1ZGUgIlRp
bGVMYXllci5oIgorI2luY2x1ZGUgIlRpbGVMYXllclBvb2wuaCIKKyNpbmNsdWRlICJXQUtXaW5k
b3cuaCIKKyNpbmNsdWRlIDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbmNsdWRlIDxRdWFy
dHpDb3JlL1F1YXJ0ekNvcmVQcml2YXRlLmg+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1
ZGUgPGZ1bmN0aW9uYWw+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIExPR19USUxJTkcK
K3N0YXRpYyBpbnQgdG90YWxUaWxlQ291bnQ7CisjZW5kaWYKKworVGlsZUdyaWRUaWxlOjpUaWxl
R3JpZFRpbGUoVGlsZUdyaWQqIHRpbGVHcmlkLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKKyAg
ICA6IG1fdGlsZUdyaWQodGlsZUdyaWQpCisgICAgLCBtX3JlY3QodGlsZVJlY3QpCit7CisgICAg
QVNTRVJUKCF0aWxlUmVjdC5pc0VtcHR5KCkpOworICAgIEludFNpemUgcGl4ZWxTaXplKG1fcmVj
dC5zaXplKCkpOworICAgIGNvbnN0IENHRmxvYXQgc2NyZWVuU2NhbGUgPSBtX3RpbGVHcmlkLT50
aWxlQ2FjaGUoKS0+c2NyZWVuU2NhbGUoKTsKKyAgICBwaXhlbFNpemUuc2NhbGUoc2NyZWVuU2Nh
bGUpOworICAgIG1fdGlsZUxheWVyID0gVGlsZUxheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT50YWtl
TGF5ZXJXaXRoU2l6ZShwaXhlbFNpemUpOworICAgIGlmICghbV90aWxlTGF5ZXIpIHsKKyNpZiBM
T0dfVElMSU5HCisgICAgICAgIE5TTG9nKEAidW5hYmxlIHRvIHJldXNlIGxheWVyIHdpdGggc2l6
ZSAlZCB4ICVkLCBjcmVhdGluZyBvbmUiLCBwaXhlbFNpemUud2lkdGgoKSwgcGl4ZWxTaXplLmhl
aWdodCgpKTsKKyNlbmRpZgorICAgICAgICBtX3RpbGVMYXllciA9IGFkb3B0TlMoW1tUaWxlTGF5
ZXIgYWxsb2NdIGluaXRdKTsKKyAgICB9CisgICAgVGlsZUxheWVyKiBsYXllciA9IG1fdGlsZUxh
eWVyLmdldCgpOworICAgIFtsYXllciBzZXRUaWxlR3JpZDp0aWxlR3JpZF07CisgICAgW2xheWVy
IHNldE9wYXF1ZTptX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+dGlsZXNPcGFxdWUoKV07CisgICAg
W2xheWVyIHNldEVkZ2VBbnRpYWxpYXNpbmdNYXNrOjBdOworICAgIFtsYXllciBzZXROZWVkc0xh
eW91dE9uR2VvbWV0cnlDaGFuZ2U6Tk9dOworICAgIFtsYXllciBzZXRDb250ZW50c1NjYWxlOnNj
cmVlblNjYWxlXTsKKyAgICBbbGF5ZXIgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nOm1fdGlsZUdyaWQt
PnRpbGVDYWNoZSgpLT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCldOworCisgICAgLy8gSG9z
dCBsYXllciBtYXkgaGF2ZSBvdGhlciBzdWJsYXllcnMuIEtlZXAgdGhlIHRpbGUgbGF5ZXJzIGF0
IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5CisgICAgLy8gc28gdGhleSBhcmUgcGFpbnRlZCBi
ZWhpbmQgZXZlcnl0aGluZyBlbHNlLgorICAgIFt0aWxlR3JpZC0+dGlsZUhvc3RMYXllcigpIGlu
c2VydFN1YmxheWVyOmxheWVyIGF0SW5kZXg6dGlsZUdyaWQtPnRpbGVDb3VudCgpXTsKKyAgICBb
bGF5ZXIgc2V0RnJhbWU6bV9yZWN0XTsKKyAgICBpbnZhbGlkYXRlUmVjdChtX3JlY3QpOworICAg
IHNob3dCb3JkZXIobV90aWxlR3JpZC0+dGlsZUNhY2hlKCktPnRpbGVCb3JkZXJzVmlzaWJsZSgp
KTsKKworI2lmIExPR19USUxJTkcKKyAgICArK3RvdGFsVGlsZUNvdW50OworICAgIE5TTG9nKEAi
bmV3IFRpbGUgKCVkLCVkKSAlZCAlZCwgY291bnQgJWQiLCB0aWxlUmVjdC54KCksIHRpbGVSZWN0
LnkoKSwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIHRvdGFsVGlsZUNvdW50
KTsKKyNlbmRpZgorfQorCitUaWxlR3JpZFRpbGU6On5UaWxlR3JpZFRpbGUoKSAKK3sKKyAgICBb
dGlsZUxheWVyKCkgc2V0VGlsZUdyaWQ6MF07CisgICAgW3RpbGVMYXllcigpIHJlbW92ZUZyb21T
dXBlcmxheWVyXTsKKyAgICBUaWxlTGF5ZXJQb29sOjpzaGFyZWRQb29sKCktPmFkZExheWVyKHRp
bGVMYXllcigpKTsKKyNpZiBMT0dfVElMSU5HCisgICAgLS10b3RhbFRpbGVDb3VudDsKKyAgICBO
U0xvZyhAImRlbGV0ZSBUaWxlICglZCwlZCkgJWQgJWQsIGNvdW50ICVkIiwgbV9yZWN0LngoKSwg
bV9yZWN0LnkoKSwgbV9yZWN0LndpZHRoKCksIG1fcmVjdC5oZWlnaHQoKSwgdG90YWxUaWxlQ291
bnQpOworI2VuZGlmCit9CisKK3ZvaWQgVGlsZUdyaWRUaWxlOjppbnZhbGlkYXRlUmVjdChjb25z
dCBJbnRSZWN0JiB3aW5kb3dEaXJ0eVJlY3QpCit7CisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBp
bnRlcnNlY3Rpb24od2luZG93RGlydHlSZWN0LCBtX3JlY3QpOworICAgIGlmIChkaXJ0eVJlY3Qu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgZGlydHlSZWN0Lm1vdmUoSW50UG9pbnQo
KSAtIG1fcmVjdC5sb2NhdGlvbigpKTsKKyAgICBbdGlsZUxheWVyKCkgc2V0TmVlZHNEaXNwbGF5
SW5SZWN0OmRpcnR5UmVjdF07CisKKyAgICBpZiAobV90aWxlR3JpZC0+dGlsZUNhY2hlKCktPnRp
bGVQYWludENvdW50ZXJzVmlzaWJsZSgpKQorICAgICAgICBbdGlsZUxheWVyKCkgc2V0TmVlZHNE
aXNwbGF5SW5SZWN0OkNHUmVjdE1ha2UoMCwgMCwgNDYsIDI1KV07Cit9CisKK3ZvaWQgVGlsZUdy
aWRUaWxlOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQoreworICAgIGlmIChtX3Jl
Y3QgPT0gdGlsZVJlY3QpCisgICAgICAgIHJldHVybjsKKyAgICBtX3JlY3QgPSB0aWxlUmVjdDsK
KyAgICBUaWxlTGF5ZXIqIGxheWVyID0gbV90aWxlTGF5ZXIuZ2V0KCk7CisgICAgW2xheWVyIHNl
dEZyYW1lOm1fcmVjdF07CisgICAgW2xheWVyIHNldE5lZWRzRGlzcGxheV07Cit9CisKK3ZvaWQg
VGlsZUdyaWRUaWxlOjpzaG93Qm9yZGVyKGJvb2wgZmxhZykKK3sKKyAgICBUaWxlTGF5ZXIqIGxh
eWVyID0gbV90aWxlTGF5ZXIuZ2V0KCk7CisgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgW2xheWVy
IHNldEJvcmRlckNvbG9yOmNhY2hlZENHQ29sb3IobV90aWxlR3JpZC0+dGlsZUNhY2hlKCktPmNv
bG9yRm9yR3JpZFRpbGVCb3JkZXIobV90aWxlR3JpZCksIENvbG9yU3BhY2VEZXZpY2VSR0IpXTsK
KyAgICAgICAgW2xheWVyIHNldEJvcmRlcldpZHRoOjAuNWZdOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFtsYXllciBzZXRCb3JkZXJDb2xvcjpuaWxdOworICAgICAgICBbbGF5ZXIgc2V0Qm9yZGVy
V2lkdGg6MF07CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
VGlsZUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjRiODUxZGM4YjY1MTdhNTM2NzM1YzYzZTZlYThjOWFlMGRjYWUwZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIuaApAQCAt
MCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUaWxlTGF5ZXJfaAorI2RlZmluZSBU
aWxlTGF5ZXJfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSA8UXVhcnR6Q29yZS9D
QUxheWVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRpbGVHcmlkOworfTsKKwor
QGludGVyZmFjZSBUaWxlTGF5ZXIgOiBDQUxheWVyIHsKKyAgICBXZWJDb3JlOjpUaWxlR3JpZCog
X3RpbGVHcmlkOworICAgIHVuc2lnbmVkIF9wYWludENvdW50OworfQorQHByb3BlcnR5IChub25h
dG9taWMpIHVuc2lnbmVkIHBhaW50Q291bnQ7CitAcHJvcGVydHkgKG5vbmF0b21pYykgV2ViQ29y
ZTo6VGlsZUdyaWQqIHRpbGVHcmlkOworKyAoVGlsZUxheWVyICopbGF5ZXJCZWluZ1BhaW50ZWQ7
CitAZW5kCisKK0BpbnRlcmZhY2UgVGlsZUhvc3RMYXllciA6IENBTGF5ZXIgeworICAgIFdlYkNv
cmU6OlRpbGVHcmlkKiBfdGlsZUdyaWQ7Cit9CistIChpZClpbml0V2l0aFRpbGVHcmlkOihXZWJD
b3JlOjpUaWxlR3JpZCopdGlsZUdyaWQ7CitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1Mp
CisjZW5kaWYgLy8gVGlsZUxheWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9UaWxlTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxh
eWVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjMyOGJlYzg1ZTdlOWZjYzY1NTlkNTZmMzViNDljM2JjMTA1MGM2
NDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxh
eWVyLm1tCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRpbGVMYXllci5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVk
ZSAiVGlsZUNhY2hlLmgiCisjaW5jbHVkZSAiVGlsZUdyaWQuaCIKKyNpbmNsdWRlICJXZWJDb3Jl
VGhyZWFkLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBUaWxlSG9zdExheWVyCistIChpZClpbml0V2l0
aFRpbGVHcmlkOihXZWJDb3JlOjpUaWxlR3JpZCopdGlsZUdyaWQKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfdGls
ZUdyaWQgPSB0aWxlR3JpZDsKKyAgICBbc2VsZiBzZXRBbmNob3JQb2ludDpDR1BvaW50WmVyb107
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkPENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6KE5T
U3RyaW5nICopa2V5Cit7CisgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAgLy8gRGlzYWJsZSBh
bGwgZGVmYXVsdCBhY3Rpb25zCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClyZW5kZXJJ
bkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0Cit7CisgICAgaWYgKHB0aHJlYWRfbWFpbl9u
cCgpKQorICAgICAgICBXZWJUaHJlYWRMb2NrKCk7CisgICAgX3RpbGVHcmlkLT50aWxlQ2FjaGUo
KS0+ZG9MYXlvdXRUaWxlcygpOworICAgIFtzdXBlciByZW5kZXJJbkNvbnRleHQ6Y29udGV4dF07
Cit9CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUaWxlTGF5ZXIKK0BzeW50aGVzaXplIHBhaW50
Q291bnQgPSBfcGFpbnRDb3VudDsKK0BzeW50aGVzaXplIHRpbGVHcmlkID0gX3RpbGVHcmlkOwor
CitzdGF0aWMgVGlsZUxheWVyICpsYXllckJlaW5nUGFpbnRlZDsKKworLSAodm9pZClzZXROZWVk
c0Rpc3BsYXlJblJlY3Q6KENHUmVjdClyZWN0Cit7CisgICAgW3NlbGYgc2V0TmVlZHNMYXlvdXRd
OworICAgIFtzdXBlciBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6cmVjdF07Cit9CisKKy0gKHZvaWQp
bGF5b3V0U3VibGF5ZXJzCit7CisgICAgaWYgKHB0aHJlYWRfbWFpbl9ucCgpKQorICAgICAgICBX
ZWJUaHJlYWRMb2NrKCk7CisgICAgLy8gVGhpcyBtYXkgdHJpZ2dlciBXZWJLaXQgbGF5b3V0IGFu
ZCBnZW5lcmF0ZSBtb3JlIHJlcGFpbnQgcmVjdHMuCisgICAgaWYgKF90aWxlR3JpZCkKKyAgICAg
ICAgX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+cHJlcGFyZVRvRHJhdygpOworfQorCistICh2b2lk
KWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0Cit7CisgICAgaWYgKF90aWxlR3Jp
ZCkKKyAgICAgICAgX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+ZHJhd0xheWVyKHNlbGYsIGNvbnRl
eHQpOworfQorCistIChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtleQor
eworICAgIFVOVVNFRF9QQVJBTShrZXkpOworICAgIC8vIERpc2FibGUgYWxsIGRlZmF1bHQgYWN0
aW9ucworICAgIHJldHVybiBuaWw7Cit9CisKKysgKFRpbGVMYXllciAqKWxheWVyQmVpbmdQYWlu
dGVkCit7CisgICAgcmV0dXJuIGxheWVyQmVpbmdQYWludGVkOworfQorCitAZW5kCisKKyNlbmRp
ZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvVGlsZUxheWVyUG9vbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVMYXll
clBvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zYjMxZDdiNjQ0ZTVlYWJjNjA0MDhlMTBhYzQyMjAzMGYyNGJj
MmIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVM
YXllclBvb2wuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUaWxlTGF5
ZXJQb29sX2gKKyNkZWZpbmUgVGlsZUxheWVyUG9vbF9oCisKKyNpZiBQTEFURk9STShJT1MpCisK
KyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiSW50U2l6ZUhhc2guaCIKKyNpbmNsdWRl
ICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitAY2xhc3MgVGlsZUxheWVyOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRpbGVMYXllclBvb2wgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFRpbGVMYXllclBvb2wpOworcHVibGljOgorICAgIHN0YXRpYyBUaWxlTGF5ZXJQ
b29sKiBzaGFyZWRQb29sKCk7CisKKyAgICB2b2lkIGFkZExheWVyKGNvbnN0IFJldGFpblB0cjxU
aWxlTGF5ZXI+Jik7CisgICAgUmV0YWluUHRyPFRpbGVMYXllcj4gdGFrZUxheWVyV2l0aFNpemUo
Y29uc3QgSW50U2l6ZSYpOworCisgICAgLy8gVGhlIG1heGltdW0gc2l6ZSBvZiBhbGwgcXVldWVk
IGxheWVycyBpbiBieXRlcy4KKyAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FwYWNpdHk7IH0KKyAgICB2b2lkIHNldENhcGFjaXR5KHVuc2lnbmVkKTsKKyAgICB2b2lk
IGRyYWluKCk7CisKKyAgICB1bnNpZ25lZCBkZWNheWVkQ2FwYWNpdHkoKSBjb25zdDsKKworICAg
IHN0YXRpYyB1bnNpZ25lZCBieXRlc0JhY2tpbmdMYXllcldpdGhQaXhlbFNpemUoY29uc3QgSW50
U2l6ZSYpOworCitwcml2YXRlOgorICAgIFRpbGVMYXllclBvb2woKTsKKworICAgIHR5cGVkZWYg
RGVxdWU8UmV0YWluUHRyPFRpbGVMYXllcj4gPiBMYXllckxpc3Q7CisKKyAgICBib29sIGNhblJl
dXNlTGF5ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdCB7IHJldHVybiBtX2Nh
cGFjaXR5ICYmICFzaXplLmlzRW1wdHkoKTsgfQorICAgIHZvaWQgc2NoZWR1bGVQcnVuZSgpOwor
ICAgIHZvaWQgcHJ1bmUoKTsKKyAgICB0eXBlZGVmIGVudW0geyBMZWF2ZVVuY2hhbmdlZCwgTWFy
a0FzVXNlZCB9IEFjY2Vzc1R5cGU7CisgICAgTGF5ZXJMaXN0JiBsaXN0T2ZMYXllcnNXaXRoU2l6
ZShjb25zdCBJbnRTaXplJiwgQWNjZXNzVHlwZSA9IExlYXZlVW5jaGFuZ2VkKTsKKworICAgIEhh
c2hNYXA8SW50U2l6ZSwgTGF5ZXJMaXN0PiBtX3JldXNlTGlzdHM7CisgICAgLy8gT3JkZXJlZCBi
eSByZWNlbnQgdXNlLiBUaGUgbGFzdCBzaXplIGlzIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQuCisg
ICAgVmVjdG9yPEludFNpemU+IG1fc2l6ZXNJblBydW5lT3JkZXI7CisgICAgdW5zaWduZWQgbV90
b3RhbEJ5dGVzOworICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CisgICAgTXV0ZXggbV9sYXllclBv
b2xNdXRleDsKKworICAgIGRvdWJsZSBtX2xhc3RBZGRUaW1lOworICAgIGJvb2wgbV9uZWVkc1By
dW5lOworCisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPFRpbGVMYXllclBvb2w+OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorI2VuZGlm
IC8vIFRpbGVMYXllclBvb2xfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1RpbGVMYXllclBvb2wubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxh
eWVyUG9vbC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZWM0OTBjNWM4OTg1YjgyYjQ2Y2I0ZWI4YjU2YWEwMmYy
NjczYzEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Rp
bGVMYXllclBvb2wubW0KQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyUG9vbC5oIgorCisjaWYgUExBVEZPUk0oSU9T
KQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lbW9yeVByZXNzdXJlSGFuZGxl
ci5oIgorI2luY2x1ZGUgIlRpbGVMYXllci5oIgorI2luY2x1ZGUgIlRpbGVHcmlkLmgiCisjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBjYXBhY2l0eURl
Y2F5VGltZSA9IDU7CisKK1RpbGVMYXllclBvb2w6OlRpbGVMYXllclBvb2woKQorICAgIDogbV90
b3RhbEJ5dGVzKDApCisgICAgLCBtX2NhcGFjaXR5KDApCisgICAgLCBtX2xhc3RBZGRUaW1lKDAp
CisgICAgLCBtX25lZWRzUHJ1bmUoZmFsc2UpCit7Cit9CisKK1RpbGVMYXllclBvb2wqIFRpbGVM
YXllclBvb2w6OnNoYXJlZFBvb2woKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaWxl
TGF5ZXJQb29sPiBzaGFyZWRQb29sOworICAgIHJldHVybiAmc2hhcmVkUG9vbC5nZXQoKTsKK30K
KwordW5zaWduZWQgVGlsZUxheWVyUG9vbDo6Ynl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIHNpemUud2lkdGgoKSAqIHNpemUu
aGVpZ2h0KCkgKiA0OworfQorCitUaWxlTGF5ZXJQb29sOjpMYXllckxpc3QmIFRpbGVMYXllclBv
b2w6Omxpc3RPZkxheWVyc1dpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUsIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSkKK3sKKyAgICBBU1NFUlQoIW1fbGF5ZXJQb29sTXV0ZXgudHJ5TG9jaygpKTsK
KyAgICBIYXNoTWFwPEludFNpemUsIExheWVyTGlzdD46Oml0ZXJhdG9yIGl0ID0gbV9yZXVzZUxp
c3RzLmZpbmQoc2l6ZSk7CisgICAgaWYgKGl0ID09IG1fcmV1c2VMaXN0cy5lbmQoKSkgeworICAg
ICAgICBpdCA9IG1fcmV1c2VMaXN0cy5hZGQoc2l6ZSwgTGF5ZXJMaXN0KCkpLml0ZXJhdG9yOwor
ICAgICAgICBtX3NpemVzSW5QcnVuZU9yZGVyLmFwcGVuZChzaXplKTsKKyAgICB9IGVsc2UgaWYg
KGFjY2Vzc1R5cGUgPT0gTWFya0FzVXNlZCkgeworICAgICAgICBtX3NpemVzSW5QcnVuZU9yZGVy
LnJlbW92ZShtX3NpemVzSW5QcnVuZU9yZGVyLnJldmVyc2VGaW5kKHNpemUpKTsKKyAgICAgICAg
bV9zaXplc0luUHJ1bmVPcmRlci5hcHBlbmQoc2l6ZSk7CisgICAgfQorICAgIHJldHVybiBpdC0+
dmFsdWU7Cit9CisKK3ZvaWQgVGlsZUxheWVyUG9vbDo6YWRkTGF5ZXIoY29uc3QgUmV0YWluUHRy
PFRpbGVMYXllcj4mIGxheWVyKQoreworICAgIEludFNpemUgbGF5ZXJTaXplKFtsYXllci5nZXQo
KSBmcmFtZV0uc2l6ZSk7CisgICAgbGF5ZXJTaXplLnNjYWxlKFtsYXllci5nZXQoKSBjb250ZW50
c1NjYWxlXSk7CisgICAgaWYgKCFjYW5SZXVzZUxheWVyV2l0aFNpemUobGF5ZXJTaXplKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1lbW9yeVByZXNzdXJlSGFuZGxlcigpLmhhc1JlY2Vp
dmVkTWVtb3J5UHJlc3N1cmUoKSkgeworICAgICAgICBMT0coTWVtb3J5UHJlc3N1cmUsICJVbmRl
ciBtZW1vcnkgcHJlc3N1cmU6ICVzLCB0b3RhbEJ5dGVzOiAlZCIsIF9fUFJFVFRZX0ZVTkNUSU9O
X18sIG1fdG90YWxCeXRlcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9sYXllclBvb2xNdXRleCk7CisgICAgbGlzdE9mTGF5ZXJzV2l0aFNpemUo
bGF5ZXJTaXplKS5wcmVwZW5kKGxheWVyKTsKKyAgICBtX3RvdGFsQnl0ZXMgKz0gYnl0ZXNCYWNr
aW5nTGF5ZXJXaXRoUGl4ZWxTaXplKGxheWVyU2l6ZSk7CisKKyAgICBtX2xhc3RBZGRUaW1lID0g
Y3VycmVudFRpbWUoKTsKKyAgICBzY2hlZHVsZVBydW5lKCk7Cit9CisKK1JldGFpblB0cjxUaWxl
TGF5ZXI+IFRpbGVMYXllclBvb2w6OnRha2VMYXllcldpdGhTaXplKGNvbnN0IEludFNpemUmIHNp
emUpCit7CisgICAgaWYgKCFjYW5SZXVzZUxheWVyV2l0aFNpemUoc2l6ZSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbGF5ZXJQb29sTXV0ZXgpOworICAg
IExheWVyTGlzdCYgcmV1c2VMaXN0ID0gbGlzdE9mTGF5ZXJzV2l0aFNpemUoc2l6ZSwgTWFya0Fz
VXNlZCk7CisgICAgaWYgKHJldXNlTGlzdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgbV90b3RhbEJ5dGVzIC09IGJ5dGVzQmFja2luZ0xheWVyV2l0aFBpeGVsU2l6ZShzaXpl
KTsKKyAgICByZXR1cm4gcmV1c2VMaXN0LnRha2VGaXJzdCgpOworfQorCit2b2lkIFRpbGVMYXll
clBvb2w6OnNldENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5KQoreworICAgIE11dGV4TG9ja2Vy
IHJldXNlTG9ja2VyKG1fbGF5ZXJQb29sTXV0ZXgpOworICAgIGlmIChjYXBhY2l0eSA8IG1fY2Fw
YWNpdHkpCisgICAgICAgIHNjaGVkdWxlUHJ1bmUoKTsKKyAgICBtX2NhcGFjaXR5ID0gY2FwYWNp
dHk7Cit9CisgICAgCit1bnNpZ25lZCBUaWxlTGF5ZXJQb29sOjpkZWNheWVkQ2FwYWNpdHkoKSBj
b25zdAoreworICAgIC8vIERlY2F5IHRvIG9uZSBxdWFydGVyIG92ZXIgY2FwYWNpdHlEZWNheVRp
bWUKKyAgICBkb3VibGUgdGltZVNpbmNlTGFzdEFkZCA9IGN1cnJlbnRUaW1lKCkgLSBtX2xhc3RB
ZGRUaW1lOworICAgIGlmICh0aW1lU2luY2VMYXN0QWRkID4gY2FwYWNpdHlEZWNheVRpbWUpCisg
ICAgICAgIHJldHVybiBtX2NhcGFjaXR5IC8gNDsKKyAgICBmbG9hdCBkZWNheVByb2dlc3MgPSBm
bG9hdCh0aW1lU2luY2VMYXN0QWRkIC8gY2FwYWNpdHlEZWNheVRpbWUpOworICAgIHJldHVybiBt
X2NhcGFjaXR5IC8gNCArIG1fY2FwYWNpdHkgKiAzIC8gNCAqICgxLmYgLSBkZWNheVByb2dlc3Mp
OworfQorCit2b2lkIFRpbGVMYXllclBvb2w6OnNjaGVkdWxlUHJ1bmUoKQoreworICAgIEFTU0VS
VCghbV9sYXllclBvb2xNdXRleC50cnlMb2NrKCkpOworICAgIGlmIChtX25lZWRzUHJ1bmUpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX25lZWRzUHJ1bmUgPSB0cnVlOworICAgIGRpc3BhdGNoX3Rp
bWVfdCBuZXh0UHJ1bmVUaW1lID0gZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMSAq
IE5TRUNfUEVSX1NFQyk7CisgICAgZGlzcGF0Y2hfYWZ0ZXIobmV4dFBydW5lVGltZSwgZGlzcGF0
Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwg
XnsKKyAgICAgICAgcHJ1bmUoKTsKKyAgICB9KTsKK30KKwordm9pZCBUaWxlTGF5ZXJQb29sOjpw
cnVuZSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbGF5ZXJQb29sTXV0ZXgpOworICAg
IEFTU0VSVChtX25lZWRzUHJ1bmUpOworICAgIG1fbmVlZHNQcnVuZSA9IGZhbHNlOworICAgIHVu
c2lnbmVkIHNocmlua1RvID0gZGVjYXllZENhcGFjaXR5KCk7CisgICAgd2hpbGUgKG1fdG90YWxC
eXRlcyA+IHNocmlua1RvKSB7CisgICAgICAgIEFTU0VSVCghbV9zaXplc0luUHJ1bmVPcmRlci5p
c0VtcHR5KCkpOworICAgICAgICBJbnRTaXplIHNpemVUb0Ryb3AgPSBtX3NpemVzSW5QcnVuZU9y
ZGVyLmZpcnN0KCk7CisgICAgICAgIExheWVyTGlzdCYgb2xkZXN0UmV1c2VMaXN0ID0gbV9yZXVz
ZUxpc3RzLmZpbmQoc2l6ZVRvRHJvcCktPnZhbHVlOworICAgICAgICBpZiAob2xkZXN0UmV1c2VM
aXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9yZXVzZUxpc3RzLnJlbW92ZShzaXplVG9E
cm9wKTsKKyAgICAgICAgICAgIG1fc2l6ZXNJblBydW5lT3JkZXIucmVtb3ZlKDApOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNpZiBMT0dfVElMSU5HCisgICAgICAgIE5TTG9n
KEAiZHJvcHBpbmcgbGF5ZXIgb2Ygc2l6ZSAlZCB4ICVkIiwgc2l6ZVRvRHJvcC53aWR0aCgpLCBz
aXplVG9Ecm9wLmhlaWdodCgpKTsKKyNlbmRpZgorICAgICAgICBtX3RvdGFsQnl0ZXMgLT0gYnl0
ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKHNpemVUb0Ryb3ApOworICAgICAgICAvLyBUaGUg
bGFzdCBlbGVtZW50IGluIHRoZSBsaXN0IGlzIHRoZSBvbGRlc3QsIGhlbmNlIG1vc3QgbGlrZWx5
IG5vdCB0bworICAgICAgICAvLyBzdGlsbCBoYXZlIGEgYmFja2luZyBzdG9yZS4KKyAgICAgICAg
b2xkZXN0UmV1c2VMaXN0LnJlbW92ZUxhc3QoKTsKKyAgICB9CisgICAgaWYgKGN1cnJlbnRUaW1l
KCkgLSBtX2xhc3RBZGRUaW1lIDw9IGNhcGFjaXR5RGVjYXlUaW1lKQorICAgICAgICBzY2hlZHVs
ZVBydW5lKCk7Cit9CisKK3ZvaWQgVGlsZUxheWVyUG9vbDo6ZHJhaW4oKQoreworICAgIE11dGV4
TG9ja2VyIHJldXNlTG9ja2VyKG1fbGF5ZXJQb29sTXV0ZXgpOworICAgIG1fcmV1c2VMaXN0cy5j
bGVhcigpOworICAgIG1fc2l6ZXNJblBydW5lT3JkZXIuY2xlYXIoKTsKKyAgICBtX3RvdGFsQnl0
ZXMgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZU1v
dGlvbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9u
TWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmZDA5MTM3NmI5ZTY0NTQ4MGY0ZWJiOTgwN2MwNDBjZTI2
NjI0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2Vi
Q29yZU1vdGlvbk1hbmFnZXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViQ29yZU1vdGlvbk1hbmFnZXJf
aAorI2RlZmluZSBXZWJDb3JlTW90aW9uTWFuYWdlcl9oCisKKyNpbXBvcnQgIkRldmljZU1vdGlv
bkNsaWVudElPUy5oIgorI2ltcG9ydCAiRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCIKKyNp
bXBvcnQgPENvcmVMb2NhdGlvbi9Db3JlTG9jYXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9IYXNoQ291
bnRlZFNldC5oPgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0IDxDb3JlTW90aW9uL0Nv
cmVNb3Rpb24uaD4KKworY29uc3QgZmxvYXQga01vdGlvblVwZGF0ZUludGVydmFsID0gMC4wNWY7
CisKK0BpbnRlcmZhY2UgV2ViQ29yZU1vdGlvbk1hbmFnZXIgOiBOU09iamVjdCB7CisgICAgQ01N
b3Rpb25NYW5hZ2VyKiBtX21vdGlvbk1hbmFnZXI7CisgICAgQ0xMb2NhdGlvbk1hbmFnZXIqIG1f
bG9jYXRpb25NYW5hZ2VyOworICAgIEhhc2hTZXQ8V2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50
SU9TKj4gbV9kZXZpY2VNb3Rpb25DbGllbnRzOworICAgIEhhc2hTZXQ8V2ViQ29yZTo6RGV2aWNl
T3JpZW50YXRpb25DbGllbnRJT1MqPiBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50czsKKyAgICBO
U1RpbWVyKiBtX3VwZGF0ZVRpbWVyOworICAgIEJPT0wgbV9neXJvQXZhaWxhYmxlOworICAgIEJP
T0wgbV9oZWFkaW5nQXZhaWxhYmxlOworfQorCisrIChXZWJDb3JlTW90aW9uTWFuYWdlciAqKXNo
YXJlZE1hbmFnZXI7CistICh2b2lkKWFkZE1vdGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlTW90
aW9uQ2xpZW50SU9TICopY2xpZW50OworLSAodm9pZClyZW1vdmVNb3Rpb25DbGllbnQ6KFdlYkNv
cmU6OkRldmljZU1vdGlvbkNsaWVudElPUyAqKWNsaWVudDsKKy0gKHZvaWQpYWRkT3JpZW50YXRp
b25DbGllbnQ6KFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TICopY2xpZW50Owor
LSAodm9pZClyZW1vdmVPcmllbnRhdGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlT3JpZW50YXRp
b25DbGllbnRJT1MgKiljbGllbnQ7CistIChCT09MKWd5cm9BdmFpbGFibGU7CistIChCT09MKWhl
YWRpbmdBdmFpbGFibGU7CitAZW5kCisKKyNlbmRpZgorCisjZW5kaWYgLy8gV2ViQ29yZU1vdGlv
bk1hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNv
cmVNb3Rpb25NYW5hZ2VyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVN
b3Rpb25NYW5hZ2VyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczYTk4MmFkMjY1ZTBhZmU3ZDc0MzhhN2ZmYmIx
NjFlNDVkMWMxMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViQ29yZU1vdGlvbk1hbmFnZXIubW0KQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJXZWJDb3JlTW90aW9uTWFuYWdlci5oIgorCisjaW1wb3J0ICJTb2Z0TGlua2luZy5o
IgorI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgPENvcmVMb2NhdGlvbi9D
b3JlTG9jYXRpb24uaD4KKyNpbXBvcnQgPG9iamMvb2JqYy1ydW50aW1lLmg+CisjaW1wb3J0IDx3
dGYvTWF0aEV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KKworI2lmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCAiV2ViQ29yZVRo
cmVhZFJ1bi5oIgorI2ltcG9ydCA8Q29yZU1vdGlvbi9Db3JlTW90aW9uLmg+CisKKy8vIEdldCBD
b3JlTG9jYXRpb24gY2xhc3NlcworU09GVF9MSU5LX0ZSQU1FV09SSyhDb3JlTG9jYXRpb24pCisK
K1NPRlRfTElOS19DTEFTUyhDb3JlTG9jYXRpb24sIENMTG9jYXRpb25NYW5hZ2VyKQorU09GVF9M
SU5LX0NMQVNTKENvcmVMb2NhdGlvbiwgQ0xIZWFkaW5nKQorCisvLyBHZXQgQ29yZU1vdGlvbiBj
bGFzc2VzCitTT0ZUX0xJTktfRlJBTUVXT1JLKENvcmVNb3Rpb24pCisKK1NPRlRfTElOS19DTEFT
UyhDb3JlTW90aW9uLCBDTU1vdGlvbk1hbmFnZXIpCitTT0ZUX0xJTktfQ0xBU1MoQ29yZU1vdGlv
biwgQ01BY2NlbGVyb21ldGVyRGF0YSkKK1NPRlRfTElOS19DTEFTUyhDb3JlTW90aW9uLCBDTURl
dmljZU1vdGlvbikKKworc3RhdGljIGNvbnN0IGRvdWJsZSBrR3Jhdml0eSA9IDkuODA2NjU7CisK
K0BpbnRlcmZhY2UgV2ViQ29yZU1vdGlvbk1hbmFnZXIoUHJpdmF0ZSkKKworLSAodm9pZClpbml0
aWFsaXplT25NYWluVGhyZWFkOworLSAodm9pZCljaGVja0NsaWVudFN0YXR1czsKKy0gKHZvaWQp
dXBkYXRlOworLSAodm9pZClzZW5kQWNjZWxlcm9tZXRlckRhdGE6KENNQWNjZWxlcm9tZXRlckRh
dGEgKiluZXdBY2NlbGVyYXRpb247CistICh2b2lkKXNlbmRNb3Rpb25EYXRhOihDTURldmljZU1v
dGlvbiAqKW5ld01vdGlvbiB3aXRoSGVhZGluZzooQ0xIZWFkaW5nICopbmV3SGVhZGluZzsKKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViQ29yZU1vdGlvbk1hbmFnZXIKKworKyAoV2ViQ29y
ZU1vdGlvbk1hbmFnZXIgKilzaGFyZWRNYW5hZ2VyCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChSZXRhaW5QdHI8V2ViQ29yZU1vdGlvbk1hbmFnZXI+LCBzaGFyZWRNb3Rpb25NYW5hZ2VyLCAo
W1tXZWJDb3JlTW90aW9uTWFuYWdlciBhbGxvY10gaW5pdF0pKTsKKyAgICByZXR1cm4gc2hhcmVk
TW90aW9uTWFuYWdlci5nZXQoKTsKK30KKworLSAoaWQpaW5pdAoreworICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07CisgICAgaWYgKHNlbGYpCisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9u
TWFpblRocmVhZDpAc2VsZWN0b3IoaW5pdGlhbGl6ZU9uTWFpblRocmVhZCkgd2l0aE9iamVjdDpu
aWwgd2FpdFVudGlsRG9uZTpOT107CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVh
ZChbV2ViQ29yZU1vdGlvbk1hbmFnZXIgY2xhc3NdLCBzZWxmKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUKCFtX3VwZGF0ZVRpbWVyKTsKKworICAgIGlmIChtX2hlYWRpbmdBdmFpbGFi
bGUpCisgICAgICAgIFttX2xvY2F0aW9uTWFuYWdlciBzdG9wVXBkYXRpbmdIZWFkaW5nXTsKKyAg
ICBbbV9sb2NhdGlvbk1hbmFnZXIgcmVsZWFzZV07CisKKyAgICBpZiAobV9neXJvQXZhaWxhYmxl
KQorICAgICAgICBbbV9tb3Rpb25NYW5hZ2VyIHN0b3BEZXZpY2VNb3Rpb25VcGRhdGVzXTsKKyAg
ICBlbHNlCisgICAgICAgIFttX21vdGlvbk1hbmFnZXIgc3RvcEFjY2VsZXJvbWV0ZXJVcGRhdGVz
XTsKKyAgICBbbV9tb3Rpb25NYW5hZ2VyIHJlbGVhc2VdOworCisgICAgW3N1cGVyIGRlYWxsb2Nd
OworfQorCistICh2b2lkKWFkZE1vdGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xp
ZW50SU9TICopY2xpZW50Cit7CisgICAgbV9kZXZpY2VNb3Rpb25DbGllbnRzLmFkZChjbGllbnQp
OworICAgIFtzZWxmIGNoZWNrQ2xpZW50U3RhdHVzXTsKK30KKworLSAodm9pZClyZW1vdmVNb3Rp
b25DbGllbnQ6KFdlYkNvcmU6OkRldmljZU1vdGlvbkNsaWVudElPUyAqKWNsaWVudAoreworICAg
IG1fZGV2aWNlTW90aW9uQ2xpZW50cy5yZW1vdmUoY2xpZW50KTsKKyAgICBbc2VsZiBjaGVja0Ns
aWVudFN0YXR1c107Cit9CisKKy0gKHZvaWQpYWRkT3JpZW50YXRpb25DbGllbnQ6KFdlYkNvcmU6
OkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TICopY2xpZW50Cit7CisgICAgbV9kZXZpY2VPcmll
bnRhdGlvbkNsaWVudHMuYWRkKGNsaWVudCk7CisgICAgW3NlbGYgY2hlY2tDbGllbnRTdGF0dXNd
OworfQorCistICh2b2lkKXJlbW92ZU9yaWVudGF0aW9uQ2xpZW50OihXZWJDb3JlOjpEZXZpY2VP
cmllbnRhdGlvbkNsaWVudElPUyAqKWNsaWVudAoreworICAgIG1fZGV2aWNlT3JpZW50YXRpb25D
bGllbnRzLnJlbW92ZShjbGllbnQpOworICAgIFtzZWxmIGNoZWNrQ2xpZW50U3RhdHVzXTsKK30K
KworLSAoQk9PTClneXJvQXZhaWxhYmxlCit7CisgICAgcmV0dXJuIG1fZ3lyb0F2YWlsYWJsZTsK
K30KKworLSAoQk9PTCloZWFkaW5nQXZhaWxhYmxlCit7CisgICAgcmV0dXJuIG1faGVhZGluZ0F2
YWlsYWJsZTsKK30KKworLSAodm9pZClpbml0aWFsaXplT25NYWluVGhyZWFkCit7CisgICAgQVNT
RVJUKCFXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisKKyNkZWZpbmUgQ01Nb3Rpb25NYW5hZ2VyIGdl
dENNTW90aW9uTWFuYWdlckNsYXNzKCkKKyAgICBtX21vdGlvbk1hbmFnZXIgPSBbW0NNTW90aW9u
TWFuYWdlciBhbGxvY10gaW5pdF07CisjdW5kZWYgQ01Nb3Rpb25NYW5hZ2VyCisKKyAgICBtX2d5
cm9BdmFpbGFibGUgPSBtX21vdGlvbk1hbmFnZXIuZGV2aWNlTW90aW9uQXZhaWxhYmxlOworCisg
ICAgaWYgKG1fZ3lyb0F2YWlsYWJsZSkKKyAgICAgICAgbV9tb3Rpb25NYW5hZ2VyLmRldmljZU1v
dGlvblVwZGF0ZUludGVydmFsID0ga01vdGlvblVwZGF0ZUludGVydmFsOworICAgIGVsc2UKKyAg
ICAgICAgbV9tb3Rpb25NYW5hZ2VyLmFjY2VsZXJvbWV0ZXJVcGRhdGVJbnRlcnZhbCA9IGtNb3Rp
b25VcGRhdGVJbnRlcnZhbDsKKworI2RlZmluZSBDTExvY2F0aW9uTWFuYWdlciBnZXRDTExvY2F0
aW9uTWFuYWdlckNsYXNzKCkKKyAgICBtX2xvY2F0aW9uTWFuYWdlciA9IFtbQ0xMb2NhdGlvbk1h
bmFnZXIgYWxsb2NdIGluaXRdOworICAgIG1faGVhZGluZ0F2YWlsYWJsZSA9IFtDTExvY2F0aW9u
TWFuYWdlciBoZWFkaW5nQXZhaWxhYmxlXTsKKyN1bmRlZiBDTExvY2F0aW9uTWFuYWdlcgorCisg
ICAgW3NlbGYgY2hlY2tDbGllbnRTdGF0dXNdOworfQorCistICh2b2lkKWNoZWNrQ2xpZW50U3Rh
dHVzCit7CisgICAgaWYgKCFwdGhyZWFkX21haW5fbnAoKSkgeworICAgICAgICBbc2VsZiBwZXJm
b3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6X2NtZCB3aXRoT2JqZWN0Om5pbCB3YWl0VW50aWxEb25l
Ok5PXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNpbmNlIHRoaXMgbWV0aG9k
IGV4ZWN1dGVzIG9uIHRoZSBtYWluIHRocmVhZCwgaXQgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQK
KyAgICAvLyBhZnRlciB0aGUgaW5pdGlhbGl6ZU9uTWFpblRocmVhZCBtZXRob2QgaGFzIHJ1biwg
YW5kIGhlbmNlIHRoZXJlIHNob3VsZAorICAgIC8vIGJlIG5vIGNoYW5jZSB0aGF0IG1fbW90aW9u
TWFuYWdlciBoYXMgbm90IGJlZW4gY3JlYXRlZC4KKyAgICBBU1NFUlQobV9tb3Rpb25NYW5hZ2Vy
KTsKKworICAgIGlmIChtX2RldmljZU1vdGlvbkNsaWVudHMuc2l6ZSgpIHx8IG1fZGV2aWNlT3Jp
ZW50YXRpb25DbGllbnRzLnNpemUoKSkgeworICAgICAgICBpZiAobV9neXJvQXZhaWxhYmxlKQor
ICAgICAgICAgICAgW21fbW90aW9uTWFuYWdlciBzdGFydERldmljZU1vdGlvblVwZGF0ZXNdOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBbbV9tb3Rpb25NYW5hZ2VyIHN0YXJ0QWNjZWxlcm9t
ZXRlclVwZGF0ZXNdOworCisgICAgICAgIGlmIChtX2hlYWRpbmdBdmFpbGFibGUpCisgICAgICAg
ICAgICBbbV9sb2NhdGlvbk1hbmFnZXIgc3RhcnRVcGRhdGluZ0hlYWRpbmddOworCisgICAgICAg
IGlmICghbV91cGRhdGVUaW1lcikgeworICAgICAgICAgICAgbV91cGRhdGVUaW1lciA9IFtbTlNU
aW1lciBzY2hlZHVsZWRUaW1lcldpdGhUaW1lSW50ZXJ2YWw6a01vdGlvblVwZGF0ZUludGVydmFs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRhcmdldDpzZWxmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3IodXBkYXRlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNl
ckluZm86bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwZWF0czpZRVNdIHJldGFpbl07CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBOU1RpbWVyICp0aW1lciA9IG1fdXBkYXRlVGltZXI7CisgICAgICAgIG1f
dXBkYXRlVGltZXIgPSBuaWw7CisgICAgICAgIFt0aW1lciBpbnZhbGlkYXRlXTsKKyAgICAgICAg
W3RpbWVyIHJlbGVhc2VdOworCisgICAgICAgIGlmIChtX2d5cm9BdmFpbGFibGUpCisgICAgICAg
ICAgICBbbV9tb3Rpb25NYW5hZ2VyIHN0b3BEZXZpY2VNb3Rpb25VcGRhdGVzXTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgW21fbW90aW9uTWFuYWdlciBzdG9wQWNjZWxlcm9tZXRlclVwZGF0
ZXNdOworCisgICAgICAgIGlmIChtX2hlYWRpbmdBdmFpbGFibGUpCisgICAgICAgICAgICBbbV9s
b2NhdGlvbk1hbmFnZXIgc3RvcFVwZGF0aW5nSGVhZGluZ107CisgICAgfQorfQorCistICh2b2lk
KXVwZGF0ZQoreworICAgIC8vIEl0J3MgZXh0cmVtZWx5IHVubGlrZWx5IHRoYXQgYW4gdXBkYXRl
IGhhcHBlbnMgd2l0aG91dCBhbiBhY3RpdmUKKyAgICAvLyBtb3Rpb24gb3IgbG9jYXRpb24gbWFu
YWdlciwgYnV0IHdlIHNob3VsZCBndWFyZCBmb3IgdGhpcyBjYXNlIGp1c3QgaW4gY2FzZS4KKyAg
ICBpZiAoIW1fbW90aW9uTWFuYWdlciB8fCAhbV9sb2NhdGlvbk1hbmFnZXIpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICAvLyBXZSBzaG91bGQsIGhvd2V2ZXIsIGd1YXJkIGZvciB0aGUgY2Fz
ZSB3aGVyZSB0aGUgbWFuYWdlcnMgcmV0dXJuIG5pbCBkYXRhLgorICAgIENNRGV2aWNlTW90aW9u
ICpkZXZpY2VNb3Rpb24gPSBtX21vdGlvbk1hbmFnZXIuZGV2aWNlTW90aW9uOworICAgIGlmICht
X2d5cm9BdmFpbGFibGUgJiYgZGV2aWNlTW90aW9uKQorICAgICAgICBbc2VsZiBzZW5kTW90aW9u
RGF0YTpkZXZpY2VNb3Rpb24gd2l0aEhlYWRpbmc6bV9sb2NhdGlvbk1hbmFnZXIuaGVhZGluZ107
CisgICAgZWxzZSB7CisgICAgICAgIGlmIChDTUFjY2VsZXJvbWV0ZXJEYXRhICphY2NlbGVyb21l
dGVyRGF0YSA9IG1fbW90aW9uTWFuYWdlci5hY2NlbGVyb21ldGVyRGF0YSkKKyAgICAgICAgICAg
IFtzZWxmIHNlbmRBY2NlbGVyb21ldGVyRGF0YTphY2NlbGVyb21ldGVyRGF0YV07CisgICAgfQor
fQorCistICh2b2lkKXNlbmRBY2NlbGVyb21ldGVyRGF0YTooQ01BY2NlbGVyb21ldGVyRGF0YSAq
KW5ld0FjY2VsZXJhdGlvbgoreworICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBDTUFjY2Vs
ZXJhdGlvbiBhY2NlbCA9IG5ld0FjY2VsZXJhdGlvbi5hY2NlbGVyYXRpb247CisKKyAgICAgICAg
VmVjdG9yPFdlYkNvcmU6OkRldmljZU1vdGlvbkNsaWVudElPUyo+IGNsaWVudHM7CisgICAgICAg
IGNvcHlUb1ZlY3RvcihtX2RldmljZU1vdGlvbkNsaWVudHMsIGNsaWVudHMpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNsaWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBj
bGllbnRzW2ldLT5tb3Rpb25DaGFuZ2VkKDAsIDAsIDAsIGFjY2VsLnggKiBrR3Jhdml0eSwgYWNj
ZWwueSAqIGtHcmF2aXR5LCBhY2NlbC56ICoga0dyYXZpdHksIDAsIDAsIDApOworICAgIH0pOwor
fQorCistICh2b2lkKXNlbmRNb3Rpb25EYXRhOihDTURldmljZU1vdGlvbiAqKW5ld01vdGlvbiB3
aXRoSGVhZGluZzooQ0xIZWFkaW5nICopbmV3SGVhZGluZworeworICAgIFdlYlRocmVhZFJ1bihe
eworICAgICAgICAvLyBBY2NlbGVyYXRpb24gaXMgdXNlciArIGdyYXZpdHkKKyAgICAgICAgQ01B
Y2NlbGVyYXRpb24gdXNlckFjY2VsID0gbmV3TW90aW9uLnVzZXJBY2NlbGVyYXRpb247CisgICAg
ICAgIENNQWNjZWxlcmF0aW9uIGdyYXZpdHkgPSBuZXdNb3Rpb24uZ3Jhdml0eTsKKyAgICAgICAg
Q01BY2NlbGVyYXRpb24gdG90YWxBY2NlbDsKKyAgICAgICAgdG90YWxBY2NlbC54ID0gdXNlckFj
Y2VsLnggKyBncmF2aXR5Lng7CisgICAgICAgIHRvdGFsQWNjZWwueSA9IHVzZXJBY2NlbC55ICsg
Z3Jhdml0eS55OworICAgICAgICB0b3RhbEFjY2VsLnogPSB1c2VyQWNjZWwueiArIGdyYXZpdHku
ejsKKworICAgICAgICBDTVJvdGF0aW9uUmF0ZSByb3RhdGlvblJhdGUgPSBuZXdNb3Rpb24ucm90
YXRpb25SYXRlOworCisgICAgICAgIFZlY3RvcjxXZWJDb3JlOjpEZXZpY2VNb3Rpb25DbGllbnRJ
T1MqPiBtb3Rpb25DbGllbnRzOworICAgICAgICBjb3B5VG9WZWN0b3IobV9kZXZpY2VNb3Rpb25D
bGllbnRzLCBtb3Rpb25DbGllbnRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
b3Rpb25DbGllbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBtb3Rpb25DbGllbnRzW2ld
LT5tb3Rpb25DaGFuZ2VkKHVzZXJBY2NlbC54ICoga0dyYXZpdHksIHVzZXJBY2NlbC55ICoga0dy
YXZpdHksIHVzZXJBY2NlbC56ICoga0dyYXZpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRvdGFsQWNjZWwueCAqIGtHcmF2aXR5LCB0b3RhbEFjY2VsLnkg
KiBrR3Jhdml0eSwgdG90YWxBY2NlbC56ICoga0dyYXZpdHksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJhZDJkZWcocm90YXRpb25SYXRlLngpLCByYWQyZGVn
KHJvdGF0aW9uUmF0ZS55KSwgcmFkMmRlZyhyb3RhdGlvblJhdGUueikpOworICAgICAgICB9CisK
KyAgICAgICAgQ01BdHRpdHVkZSogYXR0aXR1ZGUgPSBuZXdNb3Rpb24uYXR0aXR1ZGU7CisKKyAg
ICAgICAgVmVjdG9yPFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TKj4gb3JpZW50
YXRpb25DbGllbnRzOworICAgICAgICBjb3B5VG9WZWN0b3IobV9kZXZpY2VPcmllbnRhdGlvbkNs
aWVudHMsIG9yaWVudGF0aW9uQ2xpZW50cyk7CisKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBX
M0MgRGV2aWNlT3JpZW50YXRpb24gc3BlY2lmaWNhdGlvbiBsYWJlbHMgdGhlIFggYXhpcworICAg
ICAgICAvLyBhcyBwYXNzaW5nIGJldHdlZW4gdGhlIHNpZGVzIG9mIHRoZSBkZXZpY2UsIGFuZCB0
aGUgWSBheGlzIGFzIHBhc3NpbmcKKyAgICAgICAgLy8gZnJvbSB0b3AgdG8gYm90dG9tIG9mIHRo
ZSBkZXZpY2UuIENvbnZlbnRpb25hbCBUYWl0LUJyeWFuIEV1bGVyIGFuZ2xlcworICAgICAgICAv
LyBoYXZlIHRoZSBYIGF4aXMgcG9pbnRpbmcgZm9yd2FyZCAodGhlIGhlYWRpbmcgb2YgdGhlIGFp
cmNyYWZ0LCBmb3IKKyAgICAgICAgLy8gZXhhbXBsZSksIHdoaWNoIGlzIHdoYXQgeW91IHdvdWxk
ICJyb2xsIiBhcm91bmQsIGFuZCB3aGF0IHRoZSBXM0Mgc2F5cworICAgICAgICAvLyBpcyB0aGUg
WSBheGlzLiBVbmZvcnR1bmF0ZWx5IENvcmVNb3Rpb24gZG9lc24ndCBub3JtYWxpemUgaW4gdGhl
CisgICAgICAgIC8vIHNhbWUgb3JkZXIgYXMgdGhlIFczQyByZXF1ZXN0cywgc28gb3VyIGJldGEg
aXMgWy05MCwgOTBdIGFuZCBnYW1tYSBpcworICAgICAgICAvLyBbLTE4MCwgMTgwXS4gRm9yIG1v
c3QgcHJhY3RpY2FsIHVzZXMgdGhpcyBpcyBhY2NlcHRhYmxlLgorICAgICAgICAvLyBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzk0MTQ0NTk+IE5vcm1hbGl6ZSBvdXIgRGV2aWNlT3JpZW50YXRpb24gYmV0
YS9nYW1tYSBwZXIgc3BlYworCisgICAgICAgIC8vIFJvdGF0aW9uIGFyb3VuZCB0aGUgWiBheGlz
IChwb2ludGluZyB1cCwgbm9ybWFsaXplZCB0byBbMCwgMzYwXSBkZWcpLgorICAgICAgICBkb3Vi
bGUgYWxwaGEgPSByYWQyZGVnKGF0dGl0dWRlLnlhdyA+IDAgPyBhdHRpdHVkZS55YXcgOiAoTV9Q
SSAqIDIgKyBhdHRpdHVkZS55YXcpKTsKKyAgICAgICAgLy8gUm90YXRpb24gYXJvdW5kIHRoZSBY
IGF4aXMgKHNpZGUgdG8gc2lkZSkuCisgICAgICAgIGRvdWJsZSBiZXRhID0gcmFkMmRlZyhhdHRp
dHVkZS5waXRjaCk7CisgICAgICAgIC8vIFJvdGF0aW9uIGFyb3VuZCB0aGUgWSBheGlzICh0b3Ag
dG8gYm90dG9tKS4KKyAgICAgICAgZG91YmxlIGdhbW1hID0gcmFkMmRlZyhhdHRpdHVkZS5yb2xs
KTsKKworICAgICAgICBkb3VibGUgaGVhZGluZyA9IChtX2hlYWRpbmdBdmFpbGFibGUgJiYgbmV3
SGVhZGluZykgPyBuZXdIZWFkaW5nLm1hZ25ldGljSGVhZGluZyA6IDA7CisgICAgICAgIGRvdWJs
ZSBoZWFkaW5nQWNjdXJhY3kgPSAobV9oZWFkaW5nQXZhaWxhYmxlICYmIG5ld0hlYWRpbmcpID8g
bmV3SGVhZGluZy5oZWFkaW5nQWNjdXJhY3kgOiAtMTsKKworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG9yaWVudGF0aW9uQ2xpZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG9y
aWVudGF0aW9uQ2xpZW50c1tpXS0+b3JpZW50YXRpb25DaGFuZ2VkKGFscGhhLCBiZXRhLCBnYW1t
YSwgaGVhZGluZywgaGVhZGluZ0FjY3VyYWN5KTsKKyAgICB9KTsKK30KKworQGVuZAorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlU3lzdGVt
SW50ZXJmYWNlSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZVN5c3Rl
bUludGVyZmFjZUlPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4YWQ1NWY2NWE5MDhkNDA2YTE5Yzk3NjFjMjVi
Y2FiMTM3MWQ0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPU19oCisjZGVmaW5lIFdlYkNvcmVTeXN0ZW1J
bnRlcmZhY2VJT1NfaAorCisjaW5jbHVkZSA8QXZhaWxhYmlsaXR5Lmg+CisKK3R5cGVkZWYgZW51
bSB7CisgICAgd2tJT1NTeXN0ZW1WZXJzaW9uXzNfMCA9IF9fSVBIT05FXzNfMCwKKyAgICB3a0lP
U1N5c3RlbVZlcnNpb25fNF8yID0gX19JUEhPTkVfNF8yLAorICAgIHdrSU9TU3lzdGVtVmVyc2lv
bl81XzAgPSBfX0lQSE9ORV81XzAsCisgICAgd2tJT1NTeXN0ZW1WZXJzaW9uXzZfMCA9IF9fSVBI
T05FXzZfMCwKK30gd2tJT1NTeXN0ZW1WZXJzaW9uOworCitib29sIGlvc0V4ZWN1dGFibGVXYXNM
aW5rZWRPbk9yQWZ0ZXJWZXJzaW9uKHdrSU9TU3lzdGVtVmVyc2lvbik7CisKK2V4dGVybiBib29s
ICgqd2tFeGVjdXRhYmxlV2FzTGlua2VkT25PckFmdGVySU9TVmVyc2lvbikoaW50KTsKKworZXh0
ZXJuIGJvb2wgKCp3a0lzR0IxODAzMENvbXBsaWFuY2VSZXF1aXJlZCkodm9pZCk7CisKK2lubGlu
ZSBib29sIGlvc0V4ZWN1dGFibGVXYXNMaW5rZWRPbk9yQWZ0ZXJWZXJzaW9uKHdrSU9TU3lzdGVt
VmVyc2lvbiB2ZXJzaW9uKQoreworICAgIHJldHVybiB3a0V4ZWN1dGFibGVXYXNMaW5rZWRPbk9y
QWZ0ZXJJT1NWZXJzaW9uKHZlcnNpb24pOworfQorCit0eXBlZGVmIGVudW0geworICAgIHdrRGV2
aWNlQ2xhc3NJbnZhbGlkID0gLTEsCisgICAgd2tEZXZpY2VDbGFzc2lQYWQsCisgICAgd2tEZXZp
Y2VDbGFzc2lQaG9uZSwKKyAgICB3a0RldmljZUNsYXNzaVBvZCwKK30gd2tEZXZpY2VDbGFzczsK
K2V4dGVybiBpbnQgKCp3a0dldERldmljZUNsYXNzKSh2b2lkKTsKK2lubGluZSB3a0RldmljZUNs
YXNzIGlvc0RldmljZUNsYXNzKHZvaWQpCit7CisgICAgaW50IGRldmljZUNsYXNzID0gd2tHZXRE
ZXZpY2VDbGFzcygpOworICAgIHN3aXRjaCAoZGV2aWNlQ2xhc3MpIHsKKyAgICBjYXNlIHdrRGV2
aWNlQ2xhc3NJbnZhbGlkOgorICAgIGNhc2Ugd2tEZXZpY2VDbGFzc2lQYWQ6CisgICAgY2FzZSB3
a0RldmljZUNsYXNzaVBob25lOgorICAgIGNhc2Ugd2tEZXZpY2VDbGFzc2lQb2Q6CisgICAgICAg
IHJldHVybiAod2tEZXZpY2VDbGFzcylkZXZpY2VDbGFzczsKKyAgICB9CisgICAgYXNzZXJ0KGZh
bHNlKTsKKyAgICByZXR1cm4gd2tEZXZpY2VDbGFzc0ludmFsaWQ7Cit9CisKK2V4dGVybiBDRlN0
cmluZ1JlZiAoKndrR2V0VXNlckFnZW50KSh2b2lkKTsKK2V4dGVybiBDRlN0cmluZ1JlZiAoKndr
R2V0UGxhdGZvcm1OYW1lRm9yTmF2aWdhdG9yKSh2b2lkKTsKK2V4dGVybiBDRlN0cmluZ1JlZiAo
KndrR2V0VmVuZG9yTmFtZUZvck5hdmlnYXRvcikodm9pZCk7CisKKyNlbmRpZiAvLyBXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlSU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWI3NjRhNWU0
M2RmYTlmMTdlMzJhOTRmN2IxMGQ0NTA4NDg3MDA3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tCkBAIC0w
LDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgQ29t
cHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisKK3ZvaWQgKCp3a0NBTGF5
ZXJFbnVtZXJhdGVSZWN0c0JlaW5nRHJhd25XaXRoQmxvY2spKENBTGF5ZXIgKiwgQ0dDb250ZXh0
UmVmIGNvbnRleHQsIHZvaWQgKF5ibG9jaykoQ0dSZWN0IHJlY3QpKTsKK0JPT0wgKCp3a0NHQ29u
dGV4dEdldFNob3VsZFNtb290aEZvbnRzKShDR0NvbnRleHRSZWYpOworQ0dQYXR0ZXJuUmVmICgq
d2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0pKENHSW1hZ2VSZWYsIENHQWZm
aW5lVHJhbnNmb3JtLCBpbnQpOwordm9pZCAoKndrQ0dDb250ZXh0UmVzZXRDbGlwKShDR0NvbnRl
eHRSZWYpOyAKK0NGU3RyaW5nUmVmICgqd2tDb3B5Q0ZMb2NhbGl6YXRpb25QcmVmZXJyZWROYW1l
KShDRlN0cmluZ1JlZik7Cit2b2lkICgqd2tDbGVhckdseXBoVmVjdG9yKSh2b2lkKiBnbHlwaHMp
OworT1NTdGF0dXMgKCp3a0NvbnZlcnRDaGFyVG9HbHlwaHMpKHZvaWQqIHN0eWxlR3JvdXAsIGNv
bnN0IFVuaUNoYXIqLCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCB2b2lkKiBnbHlwaHMpOworTlNT
dHJpbmcqICgqd2tHZXRNSU1FVHlwZUZvckV4dGVuc2lvbikoTlNTdHJpbmcqKTsKK05TRGF0ZSAq
KCp3a0dldE5TVVJMUmVzcG9uc2VMYXN0TW9kaWZpZWREYXRlKShOU1VSTFJlc3BvbnNlICpyZXNw
b25zZSk7Cit2b2lkICgqd2tTZXRCYXNlQ1RNKShDR0NvbnRleHRSZWYsIENHQWZmaW5lVHJhbnNm
b3JtKTsKK3ZvaWQgKCp3a1NldFBhdHRlcm5QaGFzZUluVXNlclNwYWNlKShDR0NvbnRleHRSZWYs
IENHUG9pbnQgcG9pbnQpOworQ0dBZmZpbmVUcmFuc2Zvcm0gKCp3a0dldFVzZXJUb0Jhc2VDVE0p
KENHQ29udGV4dFJlZik7Citib29sICgqd2tDR0NvbnRleHRJc1BERkNvbnRleHQpKENHQ29udGV4
dFJlZik7Cit2b2lkICgqd2tTZXRVcEZvbnRDYWNoZSkoKTsKK3ZvaWQgKCp3a1NpZ25hbENGUmVh
ZFN0cmVhbUVuZCkoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSk7Cit2b2lkICgqd2tTaWduYWxDRlJl
YWRTdHJlYW1IYXNCeXRlcykoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSk7Cit2b2lkICgqd2tTaWdu
YWxDRlJlYWRTdHJlYW1FcnJvcikoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgQ0ZTdHJlYW1FcnJv
ciAqZXJyb3IpOworQ0ZSZWFkU3RyZWFtUmVmICgqd2tDcmVhdGVDdXN0b21DRlJlYWRTdHJlYW0p
KHZvaWQgKigqZm9ybUNyZWF0ZSkoQ0ZSZWFkU3RyZWFtUmVmLCB2b2lkICopLCAKKyAgICB2b2lk
ICgqZm9ybUZpbmFsaXplKShDRlJlYWRTdHJlYW1SZWYsIHZvaWQgKiksIAorICAgIEJvb2xlYW4g
KCpmb3JtT3BlbikoQ0ZSZWFkU3RyZWFtUmVmLCBDRlN0cmVhbUVycm9yICosIEJvb2xlYW4gKiwg
dm9pZCAqKSwgCisgICAgQ0ZJbmRleCAoKmZvcm1SZWFkKShDRlJlYWRTdHJlYW1SZWYsIFVJbnQ4
ICosIENGSW5kZXgsIENGU3RyZWFtRXJyb3IgKiwgQm9vbGVhbiAqLCB2b2lkICopLCAKKyAgICBC
b29sZWFuICgqZm9ybUNhblJlYWQpKENGUmVhZFN0cmVhbVJlZiwgdm9pZCAqKSwgCisgICAgdm9p
ZCAoKmZvcm1DbG9zZSkoQ0ZSZWFkU3RyZWFtUmVmLCB2b2lkICopLCAKKyAgICB2b2lkICgqZm9y
bVNjaGVkdWxlKShDRlJlYWRTdHJlYW1SZWYsIENGUnVuTG9vcFJlZiwgQ0ZTdHJpbmdSZWYsIHZv
aWQgKiksIAorICAgIHZvaWQgKCpmb3JtVW5zY2hlZHVsZSkoQ0ZSZWFkU3RyZWFtUmVmLCBDRlJ1
bkxvb3BSZWYsIENGU3RyaW5nUmVmLCB2b2lkICopLAorICAgIHZvaWQgKmNvbnRleHQpOworTlNT
dHJpbmcqICgqd2tDb3B5TlNVUkxSZXNwb25zZVN0YXR1c0xpbmUpKE5TVVJMUmVzcG9uc2UqKTsK
K3ZvaWQgKCp3a1NldE5TVVJMQ29ubmVjdGlvbkRlZmVyc0NhbGxiYWNrcykoTlNVUkxDb25uZWN0
aW9uICosIEJPT0wpOwordm9pZCAoKndrU2V0TlNVUkxSZXF1ZXN0U2hvdWxkQ29udGVudFNuaWZm
KShOU011dGFibGVVUkxSZXF1ZXN0ICosIEJPT0wpOworaWQgKCp3a0NyZWF0ZU5TVVJMQ29ubmVj
dGlvbkRlbGVnYXRlUHJveHkpKHZvaWQpOwordW5zaWduZWQgKCp3a0luaXRpYWxpemVNYXhpbXVt
SFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QpKHVuc2lnbmVkIHByZWZlcnJlZENvbm5lY3Rpb25D
b3VudCk7CitpbnQgKCp3a0dldEhUVFBQaXBlbGluaW5nUHJpb3JpdHkpKENGVVJMUmVxdWVzdFJl
Zik7Cit2b2lkICgqd2tTZXRIVFRQUGlwZWxpbmluZ01heGltdW1Qcmlvcml0eSkoaW50IHByaW9y
aXR5KTsKK3ZvaWQgKCp3a1NldEhUVFBQaXBlbGluaW5nUHJpb3JpdHkpKENGVVJMUmVxdWVzdFJl
ZiwgaW50IHByaW9yaXR5KTsKK3ZvaWQgKCp3a1NldEhUVFBQaXBlbGluaW5nTWluaW11bUZhc3RM
YW5lUHJpb3JpdHkpKGludCBwcmlvcml0eSk7Cit2b2lkICgqd2tTZXRDT05ORUNUUHJveHlGb3JT
dHJlYW0pKENGUmVhZFN0cmVhbVJlZiwgQ0ZTdHJpbmdSZWYgcHJveHlIb3N0LCBDRk51bWJlclJl
ZiBwcm94eVBvcnQpOwordm9pZCAoKndrU2V0Q09OTkVDVFByb3h5QXV0aG9yaXphdGlvbkZvclN0
cmVhbSkoQ0ZSZWFkU3RyZWFtUmVmLCBDRlN0cmluZ1JlZiBwcm94eUF1dGhvcml6YXRpb25TdHJp
bmcpOwordm9pZCAoKndrU2V0Q29va2llU3RvcmFnZVByaXZhdGVCcm93c2luZ0VuYWJsZWQpKEJP
T0wpOworQ0ZIVFRQTWVzc2FnZVJlZiAoKndrQ29weUNPTk5FQ1RQcm94eVJlc3BvbnNlKShDRlJl
YWRTdHJlYW1SZWYsIENGVVJMUmVmIHJlc3BvbnNlVVJMLCBDRlN0cmluZ1JlZiBwcm94eUhvc3Qs
IENGTnVtYmVyUmVmIHByb3h5UG9ydCk7Citib29sICgqd2tFeGVjdXRhYmxlV2FzTGlua2VkT25P
ckFmdGVySU9TVmVyc2lvbikoaW50KTsKK2ludCAoKndrR2V0RGV2aWNlQ2xhc3MpKHZvaWQpOwor
Q0dTaXplICgqd2tHZXRWaWV3cG9ydFNjcmVlblNpemUpKHZvaWQpOwordm9pZCAoKndrU2V0TGF5
ZXJDb250ZW50c1NjYWxlKShDQUxheWVyICopOworZmxvYXQgKCp3a0dldFNjcmVlblNjYWxlRmFj
dG9yKSh2b2lkKTsKK2Jvb2wgKCp3a0lzR0IxODAzMENvbXBsaWFuY2VSZXF1aXJlZCkodm9pZCk7
Cit2b2lkICgqd2tDR1BhdGhBZGRSb3VuZGVkUmVjdCkoQ0dNdXRhYmxlUGF0aFJlZiBwYXRoLCBj
b25zdCBDR0FmZmluZVRyYW5zZm9ybSogbWF0cml4LCBDR1JlY3QgcmVjdCwgQ0dGbG9hdCBjb3Ju
ZXJXaWR0aCwgQ0dGbG9hdCBjb3JuZXJIZWlnaHQpOyAKK3ZvaWQgKCp3a0NGVVJMUmVxdWVzdEFs
bG93QWxsUG9zdENhY2hpbmcpKENGVVJMUmVxdWVzdFJlZik7CitDRkFycmF5UmVmICgqd2tDb3B5
TlNVUkxSZXNwb25zZUNlcnRpZmljYXRlQ2hhaW4pKE5TVVJMUmVzcG9uc2UqKTsKKworI2lmIFVT
RShDRk5FVFdPUkspCitDRkhUVFBDb29raWVTdG9yYWdlUmVmICgqd2tHZXREZWZhdWx0SFRUUENv
b2tpZVN0b3JhZ2UpKCk7CitXS0NGVVJMQ3JlZGVudGlhbFJlZiAoKndrQ29weUNyZWRlbnRpYWxG
cm9tQ0ZQZXJzaXN0ZW50U3RvcmFnZSkoQ0ZVUkxQcm90ZWN0aW9uU3BhY2VSZWYgcHJvdGVjdGlv
blNwYWNlKTsKK3ZvaWQgKCp3a1NldENGVVJMUmVxdWVzdFNob3VsZENvbnRlbnRTbmlmZikoQ0ZN
dXRhYmxlVVJMUmVxdWVzdFJlZiwgYm9vbCk7CitDRkFycmF5UmVmICgqd2tDRlVSTFJlcXVlc3RD
b3B5SFRUUFJlcXVlc3RCb2R5UGFydHMpKENGVVJMUmVxdWVzdFJlZik7Cit2b2lkICgqd2tDRlVS
TFJlcXVlc3RTZXRIVFRQUmVxdWVzdEJvZHlQYXJ0cykoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZiwg
Q0ZBcnJheVJlZiBib2R5UGFydHMpOwordm9pZCAoKndrU2V0UmVxdWVzdFN0b3JhZ2VTZXNzaW9u
KShDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmLCBDRk11dGFibGVVUkxSZXF1ZXN0UmVmKTsKKyNlbmRp
ZgorCitib29sICgqd2tHZXRWZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3RlcnMpKENURm9udFJlZiwg
Y29uc3QgVW5pQ2hhcltdLCBDR0dseXBoW10sIHNpemVfdCk7CitDVExpbmVSZWYgKCp3a0NyZWF0
ZUNUTGluZVdpdGhVbmlDaGFyUHJvdmlkZXIpKGNvbnN0IFVuaUNoYXIqICgqcHJvdmlkZSkoQ0ZJ
bmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRleCogY2hhckNvdW50LCBDRkRpY3Rpb25hcnlSZWYqIGF0
dHJpYnV0ZXMsIHZvaWQqKSwgdm9pZCAoKmRpc3Bvc2UpKGNvbnN0IFVuaUNoYXIqIGNoYXJzLCB2
b2lkKiksIHZvaWQqKTsKK2Jvb2wgKCp3a0NURm9udFRyYW5zZm9ybUdseXBocykoQ1RGb250UmVm
IGZvbnQsIENHR2x5cGggZ2x5cGhzW10sIENHU2l6ZSBhZHZhbmNlc1tdLCBDRkluZGV4IGNvdW50
LCB3a0NURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9ucyk7CisKK0NHU2l6ZSAoKndrQ1RSdW5H
ZXRJbml0aWFsQWR2YW5jZSkoQ1RSdW5SZWYpOworCitDVFR5cGVzZXR0ZXJSZWYgKCp3a0NyZWF0
ZUNUVHlwZXNldHRlcldpdGhVbmlDaGFyUHJvdmlkZXJBbmRPcHRpb25zKShjb25zdCBVbmlDaGFy
KiAoKnByb3ZpZGUpKENGSW5kZXggc3RyaW5nSW5kZXgsIENGSW5kZXgqIGNoYXJDb3VudCwgQ0ZE
aWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiksIHZvaWQgKCpkaXNwb3NlKShjb25zdCBV
bmlDaGFyKiBjaGFycywgdm9pZCopLCB2b2lkKiwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpOwor
CisjaWYgIVBMQVRGT1JNKElPU19TSU1VTEFUT1IpCitDR0NvbnRleHRSZWYgKCp3a0lPU3VyZmFj
ZUNvbnRleHRDcmVhdGUpKElPU3VyZmFjZVJlZiBzdXJmYWNlLCB1bnNpZ25lZCB3aWR0aCwgdW5z
aWduZWQgaGVpZ2h0LCBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSk7CitDR0ltYWdlUmVmICgq
d2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UpKENHQ29udGV4dFJlZiBjb250ZXh0KTsKKyNl
bmRpZiAvLyAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKKworQ0ZVUkxTdG9yYWdlU2Vzc2lvblJl
ZiAoKndrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKShDRlN0cmluZ1JlZik7CitOU1VSTFJl
cXVlc3QqICgqd2tDb3B5UmVxdWVzdFdpdGhTdG9yYWdlU2Vzc2lvbikoQ0ZVUkxTdG9yYWdlU2Vz
c2lvblJlZiwgTlNVUkxSZXF1ZXN0Kik7CitDRkhUVFBDb29raWVTdG9yYWdlUmVmICgqd2tDb3B5
SFRUUENvb2tpZVN0b3JhZ2UpKENGVVJMU3RvcmFnZVNlc3Npb25SZWYpOwordW5zaWduZWQgKCp3
a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYpOwordm9p
ZCAoKndrU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSkoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiwg
dW5zaWduZWQpOworTlNBcnJheSAqKCp3a0hUVFBDb29raWVzKShDRkhUVFBDb29raWVTdG9yYWdl
UmVmKTsKK05TQXJyYXkgKigqd2tIVFRQQ29va2llc0ZvclVSTCkoQ0ZIVFRQQ29va2llU3RvcmFn
ZVJlZiwgTlNVUkwgKik7Cit2b2lkICgqd2tTZXRIVFRQQ29va2llc0ZvclVSTCkoQ0ZIVFRQQ29v
a2llU3RvcmFnZVJlZiwgTlNBcnJheSAqLCBOU1VSTCAqLCBOU1VSTCAqKTsKK3ZvaWQgKCp3a0Rl
bGV0ZUFsbEhUVFBDb29raWVzKShDRkhUVFBDb29raWVTdG9yYWdlUmVmKTsKK3ZvaWQgKCp3a0Rl
bGV0ZUhUVFBDb29raWUpKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYsIE5TSFRUUENvb2tpZSAqKTsK
KworQ0ZTdHJpbmdSZWYgKCp3a0dldENGVVJMUmVzcG9uc2VNSU1FVHlwZSkoQ0ZVUkxSZXNwb25z
ZVJlZik7CitDRlVSTFJlZiAoKndrR2V0Q0ZVUkxSZXNwb25zZVVSTCkoQ0ZVUkxSZXNwb25zZVJl
Zik7CitDRkhUVFBNZXNzYWdlUmVmICgqd2tHZXRDRlVSTFJlc3BvbnNlSFRUUFJlc3BvbnNlKShD
RlVSTFJlc3BvbnNlUmVmKTsKK0NGU3RyaW5nUmVmICgqd2tDb3B5Q0ZVUkxSZXNwb25zZVN1Z2dl
c3RlZEZpbGVuYW1lKShDRlVSTFJlc3BvbnNlUmVmKTsKK3ZvaWQgKCp3a1NldENGVVJMUmVzcG9u
c2VNSU1FVHlwZSkoQ0ZVUkxSZXNwb25zZVJlZiwgQ0ZTdHJpbmdSZWYgbWltZVR5cGUpOworCit2
b2lkKCp3a0Rlc3Ryb3lSZW5kZXJpbmdSZXNvdXJjZXMpKHZvaWQpOworCitib29sICgqd2tDYXB0
aW9uQXBwZWFyYW5jZUhhc1VzZXJQcmVmZXJlbmNlcykodm9pZCk7Citib29sICgqd2tDYXB0aW9u
QXBwZWFyYW5jZVNob3dDYXB0aW9uc1doZW5BdmFpbGFibGUpKHZvaWQpOworQ0dDb2xvclJlZigq
d2tDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb3JlZ3JvdW5kQ29sb3IpKHZvaWQpOworQ0dDb2xvclJl
Zigqd2tDYXB0aW9uQXBwZWFyYW5jZUNvcHlCYWNrZ3JvdW5kQ29sb3IpKHZvaWQpOworQ0dDb2xv
clJlZigqd2tDYXB0aW9uQXBwZWFyYW5jZUNvcHlXaW5kb3dDb2xvcikodm9pZCk7Citib29sKCp3
a0NhcHRpb25BcHBlYXJhbmNlR2V0Rm9yZWdyb3VuZE9wYWNpdHkpKENHRmxvYXQqKTsKK2Jvb2wo
KndrQ2FwdGlvbkFwcGVhcmFuY2VHZXRCYWNrZ3JvdW5kT3BhY2l0eSkoQ0dGbG9hdCopOworYm9v
bCgqd2tDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd09wYWNpdHkpKENHRmxvYXQqKTsKK0NHRm9u
dFJlZigqd2tDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb250Rm9yU3R5bGUpKGludCk7Citib29sKCp3
a0NhcHRpb25BcHBlYXJhbmNlR2V0UmVsYXRpdmVDaGFyYWN0ZXJTaXplKShDR0Zsb2F0Kik7Citp
bnQoKndrQ2FwdGlvbkFwcGVhcmFuY2VHZXRUZXh0RWRnZVN0eWxlKSh2b2lkKTsKK0NGU3RyaW5n
UmVmKCp3a0NhcHRpb25BcHBlYXJhbmNlR2V0U2V0dGluZ3NDaGFuZ2VkTm90aWZpY2F0aW9uKSh2
b2lkKTsKKworI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCitib29sICgqd2tJc1B1Ymxp
Y1N1ZmZpeCkoTlNTdHJpbmcgKmhvc3QpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ0FDSEVfUEFS
VElUSU9OSU5HKQorQ0ZTdHJpbmdSZWYgKCp3a0NhY2hlUGFydGl0aW9uS2V5KSh2b2lkKTsKKyNl
bmRpZgorCitDRlN0cmluZ1JlZiAoKndrR2V0VXNlckFnZW50KSh2b2lkKTsKK0NGU3RyaW5nUmVm
ICgqd2tHZXRQbGF0Zm9ybU5hbWVGb3JOYXZpZ2F0b3IpKHZvaWQpOworQ0ZTdHJpbmdSZWYgKCp3
a0dldFZlbmRvck5hbWVGb3JOYXZpZ2F0b3IpKHZvaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1dlYkV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViRXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjgyOTk3ZWZlMjgxZGYzMTI4MjlmOTk1ODJlZGRk
MWM0MDA4MDUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYkV2ZW50LmgKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBGSVhNRTogUmVu
YW1lIHRoaXMgZmlsZSB0byBXZWJFdmVudElPUy5oIGFmdGVyIHdlIHVwc3RyZWFtIHRoZSBpT1Mg
cG9ydC4KKyNpZm5kZWYgV2ViRXZlbnRJT1NfaAorI2RlZmluZSBXZWJFdmVudElPU19oCisKKyNp
bXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgorCit0eXBlZGVmIGVudW0geworICAgIFdlYkV2ZW50TW91c2VEb3duLAor
ICAgIFdlYkV2ZW50TW91c2VVcCwKKyAgICBXZWJFdmVudE1vdXNlTW92ZWQsCisgICAgCisgICAg
V2ViRXZlbnRTY3JvbGxXaGVlbCwKKyAgICAKKyAgICBXZWJFdmVudEtleURvd24sCisgICAgV2Vi
RXZlbnRLZXlVcCwKKyAgICAKKyAgICBXZWJFdmVudFRvdWNoQmVnaW4sCisgICAgV2ViRXZlbnRU
b3VjaENoYW5nZSwKKyAgICBXZWJFdmVudFRvdWNoRW5kLAorICAgIFdlYkV2ZW50VG91Y2hDYW5j
ZWwKK30gV2ViRXZlbnRUeXBlOworCit0eXBlZGVmIGVudW0geworICAgIFdlYkV2ZW50VG91Y2hQ
aGFzZUJlZ2FuLAorICAgIFdlYkV2ZW50VG91Y2hQaGFzZU1vdmVkLAorICAgIFdlYkV2ZW50VG91
Y2hQaGFzZVN0YXRpb25hcnksCisgICAgV2ViRXZlbnRUb3VjaFBoYXNlRW5kZWQsCisgICAgV2Vi
RXZlbnRUb3VjaFBoYXNlQ2FuY2VsbGVkCit9IFdlYkV2ZW50VG91Y2hQaGFzZVR5cGU7CisKKy8v
IFRoZXNlIGVudW0gdmFsdWVzIGFyZSBjb3BpZWQgZGlyZWN0bHkgZnJvbSBHU0V2ZW50IGZvciBj
b21wYXRpYmlsaXR5LgordHlwZWRlZiBlbnVtIHsKKyAgICBXZWJFdmVudEZsYWdNYXNrQWxwaGFT
aGlmdCA9IDB4MDAwMTAwMDAsCisgICAgV2ViRXZlbnRGbGFnTWFza1NoaWZ0ICAgICAgPSAweDAw
MDIwMDAwLAorICAgIFdlYkV2ZW50RmxhZ01hc2tDb250cm9sICAgID0gMHgwMDA0MDAwMCwKKyAg
ICBXZWJFdmVudEZsYWdNYXNrQWx0ZXJuYXRlICA9IDB4MDAwODAwMDAsCisgICAgV2ViRXZlbnRG
bGFnTWFza0NvbW1hbmQgICAgPSAweDAwMTAwMDAwLAorfSBXZWJFdmVudEZsYWdWYWx1ZXM7Cit0
eXBlZGVmIHVuc2lnbmVkIFdlYkV2ZW50RmxhZ3M7CisKKy8vIFRoZXNlIGVudW0gdmFsdWVzIGFy
ZSBjb3BpZWQgZGlyZWN0bHkgZnJvbSBHU0V2ZW50IGZvciBjb21wYXRpYmlsaXR5LgordHlwZWRl
ZiBlbnVtIHsKKyAgICBXZWJFdmVudENoYXJhY3RlclNldEFTQ0lJICAgICAgICAgICA9IDAsCisg
ICAgV2ViRXZlbnRDaGFyYWN0ZXJTZXRTeW1ib2wgICAgICAgICAgPSAxLAorICAgIFdlYkV2ZW50
Q2hhcmFjdGVyU2V0RGluZ2JhdHMgICAgICAgID0gMiwKKyAgICBXZWJFdmVudENoYXJhY3RlclNl
dFVuaWNvZGUgICAgICAgICA9IDI1MywKKyAgICBXZWJFdmVudENoYXJhY3RlclNldEZ1bmN0aW9u
S2V5cyAgICA9IDI1NCwKK30gV2ViRXZlbnRDaGFyYWN0ZXJTZXQ7CisKK0BpbnRlcmZhY2UgV2Vi
RXZlbnQgOiBOU09iamVjdCB7CitAcHJpdmF0ZQorICAgIFdlYkV2ZW50VHlwZSBfdHlwZTsKKyAg
ICBDRlRpbWVJbnRlcnZhbCBfdGltZXN0YW1wOworICAgIAorICAgIENHUG9pbnQgX2xvY2F0aW9u
SW5XaW5kb3c7CisgICAgCisgICAgTlNTdHJpbmcgKl9jaGFyYWN0ZXJzOworICAgIE5TU3RyaW5n
ICpfY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOworICAgIFdlYkV2ZW50RmxhZ3MgX21vZGlm
aWVyRmxhZ3M7CisgICAgQk9PTCBfa2V5UmVwZWF0aW5nOworICAgIEJPT0wgX3BvcHVwVmFyaWFu
dDsgLy8gRklYTUU6IHRvIGJlIHJlbW92ZWQKKyAgICBOU1VJbnRlZ2VyIF9rZXlib2FyZEZsYWdz
OworICAgIHVpbnQxNl90IF9rZXlDb2RlOworICAgIEJPT0wgX3RhYktleTsKKyAgICBXZWJFdmVu
dENoYXJhY3RlclNldCBfY2hhcmFjdGVyU2V0OworICAgIAorICAgIGZsb2F0IF9kZWx0YVg7Cisg
ICAgZmxvYXQgX2RlbHRhWTsKKyAgICAKKyAgICB1bnNpZ25lZCBfdG91Y2hDb3VudDsKKyAgICBO
U0FycmF5ICpfdG91Y2hMb2NhdGlvbnM7CisgICAgTlNBcnJheSAqX3RvdWNoSWRlbnRpZmllcnM7
CisgICAgTlNBcnJheSAqX3RvdWNoUGhhc2VzOworICAgIAorICAgIEJPT0wgX2lzR2VzdHVyZTsK
KyAgICBmbG9hdCBfZ2VzdHVyZVNjYWxlOworICAgIGZsb2F0IF9nZXN0dXJlUm90YXRpb247CisK
KyAgICBCT09MIF93YXNIYW5kbGVkOworfQorCistIChXZWJFdmVudCAqKWluaXRXaXRoTW91c2VF
dmVudFR5cGU6KFdlYkV2ZW50VHlwZSl0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aW1lU3RhbXA6KENGVGltZUludGVydmFsKXRpbWVTdGFtcAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvY2F0aW9uOihDR1BvaW50KXBvaW50OworCistIChXZWJFdmVudCAqKWluaXRXaXRo
U2Nyb2xsV2hlZWxFdmVudFdpdGhUaW1lU3RhbXA6KENGVGltZUludGVydmFsKXRpbWVTdGFtcAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOihDR1Bv
aW50KXBvaW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsdGFYOihmbG9hdClkZWx0YVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWx0YVk6KGZsb2F0KWRlbHRhWTsKKworLSAoV2ViRXZlbnQgKilpbml0V2l0
aFRvdWNoRXZlbnRUeXBlOihXZWJFdmVudFR5cGUpdHlwZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZVN0YW1wOihDRlRpbWVJbnRlcnZhbCl0aW1lU3RhbXAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2NhdGlvbjooQ0dQb2ludClwb2ludAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbW9kaWZpZXJzOihXZWJFdmVudEZsYWdzKW1vZGlmaWVycworICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b3VjaENvdW50Oih1bnNpZ25lZCl0b3VjaENvdW50CisgICAgICAgICAg
ICAgICAgICAgICAgdG91Y2hMb2NhdGlvbnM6KE5TQXJyYXkgKil0b3VjaExvY2F0aW9ucworICAg
ICAgICAgICAgICAgICAgICB0b3VjaElkZW50aWZpZXJzOihOU0FycmF5ICopdG91Y2hJZGVudGlm
aWVycworICAgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoUGhhc2VzOihOU0FycmF5ICopdG91
Y2hQaGFzZXMgaXNHZXN0dXJlOihCT09MKWlzR2VzdHVyZQorICAgICAgICAgICAgICAgICAgICAg
ICAgZ2VzdHVyZVNjYWxlOihmbG9hdClnZXN0dXJlU2NhbGUKKyAgICAgICAgICAgICAgICAgICAg
IGdlc3R1cmVSb3RhdGlvbjooZmxvYXQpZ2VzdHVyZVJvdGF0aW9uOworCisvLyBGSVhNRTogdGhp
cyBpcyBkZXByZWNhdGVkLiBJdCB3aWxsIGJlIHJlbW92ZWQgd2hlbiBVSUtpdCBhZG9wdHMgdGhl
IG5ldyBvbmUgYmVsb3cuCistIChXZWJFdmVudCAqKWluaXRXaXRoS2V5RXZlbnRUeXBlOihXZWJF
dmVudFR5cGUpdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVTdGFtcDooQ0ZUaW1l
SW50ZXJ2YWwpdGltZVN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzOihO
U1N0cmluZyAqKWNoYXJhY3RlcnMKKyAgICAgICBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM6
KE5TU3RyaW5nICopY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzCisgICAgICAgICAgICAgICAg
ICAgICAgICAgbW9kaWZpZXJzOihXZWJFdmVudEZsYWdzKW1vZGlmaWVycworICAgICAgICAgICAg
ICAgICAgICAgICBpc1JlcGVhdGluZzooQk9PTClyZXBlYXRpbmcKKyAgICAgICAgICAgICAgICAg
ICAgaXNQb3B1cFZhcmlhbnQ6KEJPT0wpcG9wdXBWYXJpYW50CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBrZXlDb2RlOih1aW50MTZfdClrZXlDb2RlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlzVGFiS2V5OihCT09MKXRhYktleQorICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3Rl
clNldDooV2ViRXZlbnRDaGFyYWN0ZXJTZXQpY2hhcmFjdGVyU2V0OworCistIChXZWJFdmVudCAq
KWluaXRXaXRoS2V5RXZlbnRUeXBlOihXZWJFdmVudFR5cGUpdHlwZQorICAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWVTdGFtcDooQ0ZUaW1lSW50ZXJ2YWwpdGltZVN0YW1wCisgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyYWN0ZXJzOihOU1N0cmluZyAqKWNoYXJhY3RlcnMKKyAgICAgICBj
aGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM6KE5TU3RyaW5nICopY2hhcmFjdGVyc0lnbm9yaW5n
TW9kaWZpZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzOihXZWJFdmVudEZs
YWdzKW1vZGlmaWVycworICAgICAgICAgICAgICAgICAgICAgICBpc1JlcGVhdGluZzooQk9PTCly
ZXBlYXRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoRmxhZ3M6KE5TVUludGVnZXIp
ZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvZGU6KHVpbnQxNl90KWtleUNv
ZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUYWJLZXk6KEJPT0wpdGFiS2V5CisgICAg
ICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyU2V0OihXZWJFdmVudENoYXJhY3RlclNldCljaGFy
YWN0ZXJTZXQ7CisKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBXZWJFdmVudFR5cGUg
dHlwZTsKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBDRlRpbWVJbnRlcnZhbCB0aW1l
c3RhbXA7CisKKy8vIE1vdXNlCitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgQ0dQb2lu
dCBsb2NhdGlvbkluV2luZG93OworCisvLyBLZXlib2FyZAorQHByb3BlcnR5KG5vbmF0b21pYywg
cmVhZG9ubHksIHJldGFpbikgTlNTdHJpbmcgKmNoYXJhY3RlcnM7CitAcHJvcGVydHkobm9uYXRv
bWljLCByZWFkb25seSwgcmV0YWluKSBOU1N0cmluZyAqY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZp
ZXJzOworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIFdlYkV2ZW50RmxhZ3MgbW9kaWZp
ZXJGbGFnczsKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXIgPSBpc0tleVJl
cGVhdGluZykgQk9PTCBrZXlSZXBlYXRpbmc7CisKKy8vIEZJWE1FOiB0aGlzIGlzIGRlcHJlY2F0
ZWQuIEl0IHdpbGwgYmUgcmVtb3ZlZCB3aGVuIFVJS2l0IGFkb3B0cyB0aGUgbmV3IGluaXRXaXRo
S2V5RXZlbnRUeXBlLgorQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlciA9IGlz
UG9wdXBWYXJpYW50KSBCT09MIHBvcHVwVmFyaWFudDsKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJl
YWRvbmx5KSBOU1VJbnRlZ2VyIGtleWJvYXJkRmxhZ3M7CitAcHJvcGVydHkobm9uYXRvbWljLCBy
ZWFkb25seSkgdWludDE2X3Qga2V5Q29kZTsKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5
LCBnZXR0ZXIgPSBpc1RhYktleSkgQk9PTCB0YWJLZXk7CitAcHJvcGVydHkobm9uYXRvbWljLCBy
ZWFkb25seSkgV2ViRXZlbnRDaGFyYWN0ZXJTZXQgY2hhcmFjdGVyU2V0OworCisvLyBTY3JvbGwg
V2hlZWwKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBmbG9hdCBkZWx0YVg7CitAcHJv
cGVydHkobm9uYXRvbWljLCByZWFkb25seSkgZmxvYXQgZGVsdGFZOworCisvLyBUb3VjaAorQHBy
b3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIHVuc2lnbmVkIHRvdWNoQ291bnQ7CitAcHJvcGVy
dHkobm9uYXRvbWljLCByZWFkb25seSwgcmV0YWluKSBOU0FycmF5ICp0b3VjaExvY2F0aW9uczsK
K0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5LCByZXRhaW4pIE5TQXJyYXkgKnRvdWNoSWRl
bnRpZmllcnM7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSwgcmV0YWluKSBOU0FycmF5
ICp0b3VjaFBoYXNlczsKKworLy8gR2VzdHVyZQorQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9u
bHkpIEJPT0wgaXNHZXN0dXJlOworQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIGZsb2F0
IGdlc3R1cmVTY2FsZTsKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBmbG9hdCBnZXN0
dXJlUm90YXRpb247CisKK0Bwcm9wZXJ0eShub25hdG9taWMpIEJPT0wgd2FzSGFuZGxlZDsKKwor
QGVuZAorCitAaW50ZXJmYWNlIFdlYklPU0V2ZW50IDogV2ViRXZlbnQKK0BlbmQKKworI2VuZGlm
IC8vIFdlYkV2ZW50SU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJFdmVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJFdmVudC5tbQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mNTU3ODg3MzA3ZTM3ODMxNjg0MzM2MzlhNDc4Y2YwZDcyOWZmMDkxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkV2ZW50Lm1tCkBA
IC0wLDAgKzEsNDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRklYTUU6IFJlbmFtZSB0aGlz
IGZpbGUgdG8gV2ViRXZlbnRJT1MubW0gYWZ0ZXIgd2UgdXBzdHJlYW0gdGhlIGlPUyBwb3J0Lgor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkV2ZW50LmgiCisKKyNpbXBvcnQgIktl
eUV2ZW50Q29jb2EuaCIKKyNpbXBvcnQgPEZvdW5kYXRpb24vTlNHZW9tZXRyeS5oPgorI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbXBs
ZW1lbnRhdGlvbiBXZWJFdmVudAorCitAc3ludGhlc2l6ZSB0eXBlID0gX3R5cGU7CitAc3ludGhl
c2l6ZSB0aW1lc3RhbXAgPSBfdGltZXN0YW1wOworQHN5bnRoZXNpemUgd2FzSGFuZGxlZCA9IF93
YXNIYW5kbGVkOworCistIChXZWJFdmVudCAqKWluaXRXaXRoTW91c2VFdmVudFR5cGU6KFdlYkV2
ZW50VHlwZSl0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RhbXA6KENGVGlt
ZUludGVydmFsKXRpbWVTdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9u
OihDR1BvaW50KXBvaW50Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNl
bGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX3R5cGUgPSB0eXBlOworICAgIF90
aW1lc3RhbXAgPSB0aW1lU3RhbXA7CisKKyAgICBfbG9jYXRpb25JbldpbmRvdyA9IHBvaW50Owor
ICAgIAorICAgIHJldHVybiBzZWxmOworfQorCistIChXZWJFdmVudCAqKWluaXRXaXRoU2Nyb2xs
V2hlZWxFdmVudFdpdGhUaW1lU3RhbXA6KENGVGltZUludGVydmFsKXRpbWVTdGFtcAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOihDR1BvaW50KXBv
aW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFY
OihmbG9hdClkZWx0YVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWx0YVk6KGZsb2F0KWRlbHRhWQoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF90eXBlID0gV2Vi
RXZlbnRTY3JvbGxXaGVlbDsKKyAgICBfdGltZXN0YW1wID0gdGltZVN0YW1wOworCisgICAgX2xv
Y2F0aW9uSW5XaW5kb3cgPSBwb2ludDsKKyAgICBfZGVsdGFYID0gZGVsdGFYOworICAgIF9kZWx0
YVkgPSBkZWx0YVk7CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKFdlYkV2ZW50ICop
aW5pdFdpdGhUb3VjaEV2ZW50VHlwZTooV2ViRXZlbnRUeXBlKXR5cGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVTdGFtcDooQ0ZUaW1lSW50ZXJ2YWwpdGltZVN0YW1wCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246KENHUG9pbnQpcG9pbnQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vZGlmaWVyczooV2ViRXZlbnRGbGFncyltb2RpZmllcnMKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG91Y2hDb3VudDoodW5zaWduZWQpdG91Y2hDb3VudAorICAg
ICAgICAgICAgICAgICAgICAgIHRvdWNoTG9jYXRpb25zOihOU0FycmF5ICopdG91Y2hMb2NhdGlv
bnMKKyAgICAgICAgICAgICAgICAgICAgdG91Y2hJZGVudGlmaWVyczooTlNBcnJheSAqKXRvdWNo
SWRlbnRpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICB0b3VjaFBoYXNlczooTlNBcnJh
eSAqKXRvdWNoUGhhc2VzIGlzR2VzdHVyZTooQk9PTClpc0dlc3R1cmUKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGdlc3R1cmVTY2FsZTooZmxvYXQpZ2VzdHVyZVNjYWxlCisgICAgICAgICAgICAg
ICAgICAgICBnZXN0dXJlUm90YXRpb246KGZsb2F0KWdlc3R1cmVSb3RhdGlvbgoreworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgX3R5cGUgPSB0eXBlOworICAgIF90aW1lc3RhbXAgPSB0aW1lU3RhbXA7CisgICAgX21v
ZGlmaWVyRmxhZ3MgPSBtb2RpZmllcnM7CisKKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVt
LzcxODUyODQ+IFRvdWNoRXZlbnRzIG1heSBiZSBpbiBtb3JlIHRoYW4gb25lIHdpbmRvdyBzb21l
IGRheS4KKyAgICBfbG9jYXRpb25JbldpbmRvdyA9IHBvaW50OworICAgIF90b3VjaENvdW50ID0g
dG91Y2hDb3VudDsKKyAgICBfdG91Y2hMb2NhdGlvbnMgPSBbdG91Y2hMb2NhdGlvbnMgY29weV07
CisgICAgX3RvdWNoSWRlbnRpZmllcnMgPSBbdG91Y2hJZGVudGlmaWVycyBjb3B5XTsKKyAgICBf
dG91Y2hQaGFzZXMgPSBbdG91Y2hQaGFzZXMgY29weV07CisgICAgX2lzR2VzdHVyZSA9IGlzR2Vz
dHVyZTsKKyAgICBfZ2VzdHVyZVNjYWxlID0gZ2VzdHVyZVNjYWxlOworICAgIF9nZXN0dXJlUm90
YXRpb24gPSBnZXN0dXJlUm90YXRpb247CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RhdGlj
IGludCB3aW5kb3dzS2V5Q29kZUZvckNoYXJDb2RlSU9TKHVuaWNoYXIgY2hhckNvZGUpCit7Cisg
ICAgLy8gaVBob25lIFNwZWNpZmljIENhc2VzCisgICAgLy8gPHJkYXI6Ly83NzA5NDA4PjogV2Ug
Z2V0IDEwICgnXG4nKSBmcm9tIFVJS2l0IHdoZW4gdXNpbmcgdGhlIHNvZnR3YXJlIGtleWJvYXJk
CisgICAgaWYgKGNoYXJDb2RlID09IDEwKQorICAgICAgICByZXR1cm4gMHgwRDsKKworICAgIC8v
IEdlbmVyYWwgQ2FzZQorICAgIHJldHVybiB3aW5kb3dzS2V5Q29kZUZvckNoYXJDb2RlKGNoYXJD
b2RlKTsKK30KKworLSAoV2ViRXZlbnQgKilpbml0V2l0aEtleUV2ZW50VHlwZTooV2ViRXZlbnRU
eXBlKXR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RhbXA6KENGVGltZUludGVy
dmFsKXRpbWVTdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyczooTlNTdHJp
bmcgKiljaGFyYWN0ZXJzCisgICAgICAgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOihOU1N0
cmluZyAqKWNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycworICAgICAgICAgICAgICAgICAgICAg
ICAgIG1vZGlmaWVyczooV2ViRXZlbnRGbGFncyltb2RpZmllcnMKKyAgICAgICAgICAgICAgICAg
ICAgICAgaXNSZXBlYXRpbmc6KEJPT0wpcmVwZWF0aW5nCisgICAgICAgICAgICAgICAgICAgIGlz
UG9wdXBWYXJpYW50OihCT09MKXBvcHVwVmFyaWFudAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAga2V5Q29kZToodWludDE2X3Qpa2V5Q29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICBp
c1RhYktleTooQk9PTCl0YWJLZXkKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJTZXQ6
KFdlYkV2ZW50Q2hhcmFjdGVyU2V0KWNoYXJhY3RlclNldAoreworICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF90
eXBlID0gdHlwZTsKKyAgICBfdGltZXN0YW1wID0gdGltZVN0YW1wOworCisgICAgX2NoYXJhY3Rl
cnMgPSBbY2hhcmFjdGVycyByZXRhaW5dOworICAgIF9jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmll
cnMgPSBbY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIHJldGFpbl07CisgICAgX21vZGlmaWVy
RmxhZ3MgPSBtb2RpZmllcnM7CisgICAgX2tleVJlcGVhdGluZyA9IHJlcGVhdGluZzsKKyAgICBf
cG9wdXBWYXJpYW50ID0gcG9wdXBWYXJpYW50OworICAgIF90YWJLZXkgPSB0YWJLZXk7CisgICAg
X2NoYXJhY3RlclNldCA9IGNoYXJhY3RlclNldDsKKworICAgIGlmIChrZXlDb2RlKQorICAgICAg
ICBfa2V5Q29kZSA9IHdpbmRvd3NLZXlDb2RlRm9yS2V5Q29kZShrZXlDb2RlKTsKKworICAgIC8v
IE5PVEU6IHRoaXMgcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBzZW1hbnRpY3Mgd2hpY2ggdXNlZCB0
aGUKKyAgICAvLyBjaGFyYWN0ZXJzIHN0cmluZyBmb3IgdGhlIGtleUNvZGUuIFRoaXMgc2hvdWxk
IGJlIGNoYW5nZWQgaW4gaU9TIDQuMCB0bworICAgIC8vIGFsbG93IHRoZSBjbGllbnQgdG8gZXhw
bGljaXRseSBzcGVjaWZ5IGEga2V5Q29kZSwgb3RoZXJ3aXNlIGRlZmF1bHQgdG8KKyAgICAvLyBt
YXBwaW5nIHRoZSBjaGFyYWN0ZXJzIHN0cmluZyB0byBhIGtleUNvZGUuCisgICAgLy8gZS5nLiBh
ZGQgYW4gJ2Vsc2UnIGJlZm9yZSB0aGlzICdpZicuCisgICAgaWYgKFtjaGFyYWN0ZXJzSWdub3Jp
bmdNb2RpZmllcnMgbGVuZ3RoXSA9PSAxKSB7CisgICAgICAgIHVuaWNoYXIgY2ggPSBbY2hhcmFj
dGVyc0lnbm9yaW5nTW9kaWZpZXJzIGNoYXJhY3RlckF0SW5kZXg6MF07CisgICAgICAgIF9rZXlD
b2RlID0gd2luZG93c0tleUNvZGVGb3JDaGFyQ29kZUlPUyhjaCk7CisgICAgfQorCisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKworLSAoV2ViRXZlbnQgKilpbml0V2l0aEtleUV2ZW50VHlwZTooV2Vi
RXZlbnRUeXBlKXR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RhbXA6KENGVGlt
ZUludGVydmFsKXRpbWVTdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyczoo
TlNTdHJpbmcgKiljaGFyYWN0ZXJzCisgICAgICAgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJz
OihOU1N0cmluZyAqKWNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycworICAgICAgICAgICAgICAg
ICAgICAgICAgIG1vZGlmaWVyczooV2ViRXZlbnRGbGFncyltb2RpZmllcnMKKyAgICAgICAgICAg
ICAgICAgICAgICAgaXNSZXBlYXRpbmc6KEJPT0wpcmVwZWF0aW5nCisgICAgICAgICAgICAgICAg
ICAgICAgICAgd2l0aEZsYWdzOihOU1VJbnRlZ2VyKWZsYWdzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBrZXlDb2RlOih1aW50MTZfdClrZXlDb2RlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlzVGFiS2V5OihCT09MKXRhYktleQorICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3Rl
clNldDooV2ViRXZlbnRDaGFyYWN0ZXJTZXQpY2hhcmFjdGVyU2V0Cit7CisgICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisg
ICAgX3R5cGUgPSB0eXBlOworICAgIF90aW1lc3RhbXAgPSB0aW1lU3RhbXA7CisKKyAgICBfY2hh
cmFjdGVycyA9IFtjaGFyYWN0ZXJzIHJldGFpbl07CisgICAgX2NoYXJhY3RlcnNJZ25vcmluZ01v
ZGlmaWVycyA9IFtjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgcmV0YWluXTsKKyAgICBfbW9k
aWZpZXJGbGFncyA9IG1vZGlmaWVyczsKKyAgICBfa2V5UmVwZWF0aW5nID0gcmVwZWF0aW5nOwor
ICAgIF9rZXlib2FyZEZsYWdzID0gZmxhZ3M7CisgICAgX3RhYktleSA9IHRhYktleTsKKyAgICBf
Y2hhcmFjdGVyU2V0ID0gY2hhcmFjdGVyU2V0OworICAgIAorICAgIGlmIChrZXlDb2RlKQorICAg
ICAgICBfa2V5Q29kZSA9IHdpbmRvd3NLZXlDb2RlRm9yS2V5Q29kZShrZXlDb2RlKTsKKworICAg
IC8vIE5PVEU6IHRoaXMgcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBzZW1hbnRpY3Mgd2hpY2ggdXNl
ZCB0aGUgCisgICAgLy8gY2hhcmFjdGVycyBzdHJpbmcgZm9yIHRoZSBrZXlDb2RlLiBUaGlzIHNo
b3VsZCBiZSBjaGFuZ2VkIGluIGlPUyA0LjAgdG8KKyAgICAvLyBhbGxvdyB0aGUgY2xpZW50IHRv
IGV4cGxpY2l0bHkgc3BlY2lmeSBhIGtleUNvZGUsIG90aGVyd2lzZSBkZWZhdWx0IHRvIAorICAg
IC8vIG1hcHBpbmcgdGhlIGNoYXJhY3RlcnMgc3RyaW5nIHRvIGEga2V5Q29kZS4KKyAgICAvLyBl
LmcuIGFkZCBhbiAnZWxzZScgYmVmb3JlIHRoaXMgJ2lmJy4KKyAgICBpZiAoW2NoYXJhY3RlcnNJ
Z25vcmluZ01vZGlmaWVycyBsZW5ndGhdID09IDEpIHsKKyAgICAgICAgdW5pY2hhciBjaCA9IFtj
aGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgY2hhcmFjdGVyQXRJbmRleDowXTsKKyAgICAgICAg
X2tleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvckNoYXJDb2RlSU9TKGNoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19jaGFyYWN0ZXJz
IHJlbGVhc2VdOworICAgIFtfY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIHJlbGVhc2VdOwor
CisgICAgW190b3VjaExvY2F0aW9ucyByZWxlYXNlXTsKKyAgICBbX3RvdWNoSWRlbnRpZmllcnMg
cmVsZWFzZV07CisgICAgW190b3VjaFBoYXNlcyByZWxlYXNlXTsKKyAgICAKKyAgICBbc3VwZXIg
ZGVhbGxvY107Cit9CisKKy0gKE5TU3RyaW5nICopX3R5cGVEZXNjcmlwdGlvbgoreworICAgIHN3
aXRjaCAoX3R5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJFdmVudE1vdXNlRG93bjoKKyAgICAgICAg
ICAgIHJldHVybiBAIldlYkV2ZW50TW91c2VEb3duIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudE1v
dXNlVXA6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudE1vdXNlVXAiOworICAgICAgICBj
YXNlIFdlYkV2ZW50TW91c2VNb3ZlZDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50TW91
c2VNb3ZlZCI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRTY3JvbGxXaGVlbDoKKyAgICAgICAgICAg
IHJldHVybiBAIldlYkV2ZW50U2Nyb2xsV2hlZWwiOworICAgICAgICBjYXNlIFdlYkV2ZW50S2V5
RG93bjoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50S2V5RG93biI7CisgICAgICAgIGNh
c2UgV2ViRXZlbnRLZXlVcDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50S2V5VXAiOwor
ICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hCZWdpbjoKKyAgICAgICAgICAgIHJldHVybiBAIldl
YkV2ZW50VG91Y2hCZWdpbiI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaENoYW5nZToKKyAg
ICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50VG91Y2hDaGFuZ2UiOworICAgICAgICBjYXNlIFdl
YkV2ZW50VG91Y2hFbmQ6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoRW5kIjsK
KyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoQ2FuY2VsOgorICAgICAgICAgICAgcmV0dXJuIEAi
V2ViRXZlbnRUb3VjaENhbmNlbCI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIEAiVW5rbm93biI7Cit9CisKKy0g
KE5TU3RyaW5nICopX21vZGlmZXJGbGFnc0Rlc2NyaXB0aW9uCit7CisgICAgc3dpdGNoIChfbW9k
aWZpZXJGbGFncykgeworICAgICAgICBjYXNlIFdlYkV2ZW50TW91c2VEb3duOgorICAgICAgICAg
ICAgcmV0dXJuIEAiV2ViRXZlbnRNb3VzZURvd24iOworICAgICAgICBjYXNlIFdlYkV2ZW50TW91
c2VVcDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50TW91c2VVcCI7CisgICAgICAgIGNh
c2UgV2ViRXZlbnRNb3VzZU1vdmVkOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRNb3Vz
ZU1vdmVkIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudFNjcm9sbFdoZWVsOgorICAgICAgICAgICAg
cmV0dXJuIEAiV2ViRXZlbnRTY3JvbGxXaGVlbCI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRLZXlE
b3duOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRLZXlEb3duIjsKKyAgICAgICAgY2Fz
ZSBXZWJFdmVudEtleVVwOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRLZXlVcCI7Cisg
ICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaEJlZ2luOgorICAgICAgICAgICAgcmV0dXJuIEAiV2Vi
RXZlbnRUb3VjaEJlZ2luIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoQ2hhbmdlOgorICAg
ICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaENoYW5nZSI7CisgICAgICAgIGNhc2UgV2Vi
RXZlbnRUb3VjaEVuZDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50VG91Y2hFbmQiOwor
ICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hDYW5jZWw6CisgICAgICAgICAgICByZXR1cm4gQCJX
ZWJFdmVudFRvdWNoQ2FuY2VsIjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gQCJVbmtub3duIjsKK30KKworLSAo
TlNTdHJpbmcgKilfY2hhcmFjdGVyU2V0RGVzY3JpcHRpb24KK3sKKyAgICBzd2l0Y2ggKF9jaGFy
YWN0ZXJTZXQpIHsKKyAgICAgICAgY2FzZSBXZWJFdmVudENoYXJhY3RlclNldEFTQ0lJOgorICAg
ICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRDaGFyYWN0ZXJTZXRBU0NJSSI7CisgICAgICAgIGNh
c2UgV2ViRXZlbnRDaGFyYWN0ZXJTZXRTeW1ib2w6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJF
dmVudENoYXJhY3RlclNldFN5bWJvbCI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRDaGFyYWN0ZXJT
ZXREaW5nYmF0czoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50Q2hhcmFjdGVyU2V0RGlu
Z2JhdHMiOworICAgICAgICBjYXNlIFdlYkV2ZW50Q2hhcmFjdGVyU2V0VW5pY29kZToKKyAgICAg
ICAgICAgIHJldHVybiBAIldlYkV2ZW50Q2hhcmFjdGVyU2V0VW5pY29kZSI7CisgICAgICAgIGNh
c2UgV2ViRXZlbnRDaGFyYWN0ZXJTZXRGdW5jdGlvbktleXM6CisgICAgICAgICAgICByZXR1cm4g
QCJXZWJFdmVudENoYXJhY3RlclNldEZ1bmN0aW9uS2V5cyI7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIEAiVW5r
bm93biI7Cit9CisKKy0gKE5TU3RyaW5nICopX3RvdWNoTG9jYXRpb25zRGVzY3JpcHRpb246KE5T
QXJyYXkgKilsb2NhdGlvbnMKK3sKKyAgICBCT09MIHNob3VsZEFkZENvbW1hID0gTk87CisgICAg
TlNNdXRhYmxlU3RyaW5nICpkZXNjcmlwdGlvbiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsK
KyAgICBmb3IgKE5TVmFsdWUgKnZhbHVlIGluIGxvY2F0aW9ucykgeworICAgICAgICBDR1BvaW50
IHBvaW50ID0gW3ZhbHVlIHBvaW50VmFsdWVdOworICAgICAgICBbZGVzY3JpcHRpb24gYXBwZW5k
Rm9ybWF0OkAiJUAoJWYsICVmKSIsIChzaG91bGRBZGRDb21tYSA/IEAiLCAiIDogQCIiKSwgcG9p
bnQueCwgcG9pbnQueV07CisgICAgICAgIHNob3VsZEFkZENvbW1hID0gWUVTOworICAgIH0KKyAg
ICByZXR1cm4gZGVzY3JpcHRpb247Cit9CisKKy0gKE5TU3RyaW5nICopX3RvdWNoSWRlbnRpZmll
cnNEZXNjcmlwdGlvbgoreworICAgIEJPT0wgc2hvdWxkQWRkQ29tbWEgPSBOTzsKKyAgICBOU011
dGFibGVTdHJpbmcgKmRlc2NyaXB0aW9uID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOworICAg
IGZvciAoTlNOdW1iZXIgKmlkZW50aWZpZXIgaW4gX3RvdWNoSWRlbnRpZmllcnMpIHsKKyAgICAg
ICAgW2Rlc2NyaXB0aW9uIGFwcGVuZEZvcm1hdDpAIiVAJXUiLCAoc2hvdWxkQWRkQ29tbWEgPyBA
IiwgIiA6IEAiIiksIFtpZGVudGlmaWVyIHVuc2lnbmVkSW50VmFsdWVdXTsKKyAgICAgICAgc2hv
dWxkQWRkQ29tbWEgPSBZRVM7CisgICAgfQorICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKwor
LSAoTlNTdHJpbmcgKilfdG91Y2hQaGFzZURlc2NyaXB0aW9uOihXZWJFdmVudFRvdWNoUGhhc2VU
eXBlKXBoYXNlCit7CisgICAgc3dpdGNoIChwaGFzZSkgeworICAgICAgICBjYXNlIFdlYkV2ZW50
VG91Y2hQaGFzZUJlZ2FuOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaFBoYXNl
QmVnYW4iOworICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hQaGFzZU1vdmVkOgorICAgICAgICAg
ICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaFBoYXNlTW92ZWQiOworICAgICAgICBjYXNlIFdlYkV2
ZW50VG91Y2hQaGFzZVN0YXRpb25hcnk6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRv
dWNoUGhhc2VTdGF0aW9uYXJ5IjsKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VFbmRl
ZDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50VG91Y2hQaGFzZUVuZGVkIjsKKyAgICAg
ICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VDYW5jZWxsZWQ6CisgICAgICAgICAgICByZXR1cm4g
QCJXZWJFdmVudFRvdWNoUGhhc2VDYW5jZWxsZWQiOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBAIlVua25vd24i
OworfQorCistIChOU1N0cmluZyAqKV90b3VjaFBoYXNlc0Rlc2NyaXB0aW9uCit7CisgICAgQk9P
TCBzaG91bGRBZGRDb21tYSA9IE5POworICAgIE5TTXV0YWJsZVN0cmluZyAqZGVzY3JpcHRpb24g
PSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CisgICAgZm9yIChOU051bWJlciAqcGhhc2UgaW4g
X3RvdWNoUGhhc2VzKSB7CisgICAgICAgIFtkZXNjcmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCIlQCVA
IiwgKHNob3VsZEFkZENvbW1hID8gQCIsICIgOiBAIiIpLCBbc2VsZiBfdG91Y2hQaGFzZURlc2Ny
aXB0aW9uOnN0YXRpY19jYXN0PFdlYkV2ZW50VG91Y2hQaGFzZVR5cGU+KFtwaGFzZSB1bnNpZ25l
ZEludFZhbHVlXSldXTsKKyAgICAgICAgc2hvdWxkQWRkQ29tbWEgPSBZRVM7CisgICAgfQorICAg
IHJldHVybiBkZXNjcmlwdGlvbjsKK30KKworLSAoTlNTdHJpbmcgKilfZXZlbnREZXNjcmlwdGlv
bgoreworICAgIHN3aXRjaCAoX3R5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJFdmVudE1vdXNlRG93
bjoKKyAgICAgICAgY2FzZSBXZWJFdmVudE1vdXNlVXA6CisgICAgICAgIGNhc2UgV2ViRXZlbnRN
b3VzZU1vdmVkOgorICAgICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAibG9jYXRpb246ICglZiwgJWYpIiwgX2xvY2F0aW9uSW5XaW5kb3cueCwgX2xvY2F0aW9uSW5X
aW5kb3cueV07CisgICAgICAgIGNhc2UgV2ViRXZlbnRTY3JvbGxXaGVlbDoKKyAgICAgICAgICAg
IHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImxvY2F0aW9uOiAoJWYsICVmKSBk
ZWx0YVg6ICVmIGRlbHRhWTogJWYiLCBfbG9jYXRpb25JbldpbmRvdy54LCBfbG9jYXRpb25Jbldp
bmRvdy55LCBfZGVsdGFYLCBfZGVsdGFZXTsKKyAgICAgICAgY2FzZSBXZWJFdmVudEtleURvd246
CisgICAgICAgIGNhc2UgV2ViRXZlbnRLZXlVcDoKKyAgICAgICAgICAgIHJldHVybiBbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAImNoYXJzOiAlQCBjaGFyc05vTW9kaWZpZXJzOiAlQCBmbGFn
czogJWQgcmVwZWF0aW5nOiAlZCBrZXlib2FyZEZsYWdzOiAlbHUga2V5Q29kZSAlZCwgaXNUYWI6
ICVkIGNoYXJTZXQ6ICVAIiwgX2NoYXJhY3RlcnMsIF9jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmll
cnMsIF9tb2RpZmllckZsYWdzLCBfa2V5UmVwZWF0aW5nLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPihfa2V5Ym9hcmRGbGFncyksIF9rZXlDb2RlLCBfdGFiS2V5LCBbc2VsZiBfY2hhcmFjdGVy
U2V0RGVzY3JpcHRpb25dXTsKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoQmVnaW46CisgICAg
ICAgIGNhc2UgV2ViRXZlbnRUb3VjaENoYW5nZToKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNo
RW5kOgorICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hDYW5jZWw6CisgICAgICAgICAgICByZXR1
cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJsb2NhdGlvbjogKCVmLCAlZikgY291bnQ6
ICVkIGxvY2F0aW9uczogJUAgaWRlbnRpZmllcnM6ICVAIHBoYXNlczogJUAgaXNHZXN0dXJlOiAl
ZCBzY2FsZTogJWYgcm90YXRpb246ICVmIiwgX2xvY2F0aW9uSW5XaW5kb3cueCwgX2xvY2F0aW9u
SW5XaW5kb3cueSwgX3RvdWNoQ291bnQsIFtzZWxmIF90b3VjaExvY2F0aW9uc0Rlc2NyaXB0aW9u
Ol90b3VjaExvY2F0aW9uc10sIFtzZWxmIF90b3VjaElkZW50aWZpZXJzRGVzY3JpcHRpb25dLCBb
c2VsZiBfdG91Y2hQaGFzZXNEZXNjcmlwdGlvbl0sIChfaXNHZXN0dXJlID8gMSA6IDApLCBfZ2Vz
dHVyZVNjYWxlLCBfZ2VzdHVyZVJvdGF0aW9uXTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gQCJVbmtub3duIjsK
K30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbgoreworICAgIHJldHVybiBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIiVAIHR5cGU6ICVAIC0gJUAiLCBbc3VwZXIgZGVzY3JpcHRpb25d
LCBbc2VsZiBfdHlwZURlc2NyaXB0aW9uXSwgW3NlbGYgX2V2ZW50RGVzY3JpcHRpb25dXTsKK30K
KworLSAoQ0dQb2ludClsb2NhdGlvbkluV2luZG93Cit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShfdHlwZSA9PSBXZWJFdmVudE1vdXNlRG93biB8fCBfdHlwZSA9PSBXZWJFdmVudE1vdXNlVXAg
fHwgX3R5cGUgPT0gV2ViRXZlbnRNb3VzZU1vdmVkIHx8IF90eXBlID09IFdlYkV2ZW50U2Nyb2xs
V2hlZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0v
NzE4NTI4ND4gVG91Y2hFdmVudHMgbWF5IGJlIGluIG1vcmUgdGhhbiBvbmUgd2luZG93IHNvbWUg
ZGF5LgorICAgICAgICAgICAgICAgICAgICAgICAgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEJl
Z2luIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDaGFuZ2UgfHwgX3R5cGUgPT0gV2ViRXZlbnRU
b3VjaEVuZCB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoQ2FuY2VsCisgICAgICAgICAgICAgICAg
ICAgICAgICAsICJXZWJFdmVudFR5cGU6ICVkIiwgX3R5cGUpOworICAgIHJldHVybiBfbG9jYXRp
b25JbldpbmRvdzsKK30KKworLSAoTlNTdHJpbmcgKiljaGFyYWN0ZXJzCit7CisgICAgQVNTRVJU
KF90eXBlID09IFdlYkV2ZW50S2V5RG93biB8fCBfdHlwZSA9PSBXZWJFdmVudEtleVVwKTsKKyAg
ICByZXR1cm4gW1tfY2hhcmFjdGVycyByZXRhaW5dIGF1dG9yZWxlYXNlXTsKK30KKworLSAoTlNT
dHJpbmcgKiljaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMKK3sKKyAgICBBU1NFUlQoX3R5cGUg
PT0gV2ViRXZlbnRLZXlEb3duIHx8IF90eXBlID09IFdlYkV2ZW50S2V5VXApOworICAgIHJldHVy
biBbW19jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgcmV0YWluXSBhdXRvcmVsZWFzZV07Cit9
CisKKy0gKFdlYkV2ZW50RmxhZ3MpbW9kaWZpZXJGbGFncworeworICAgIHJldHVybiBfbW9kaWZp
ZXJGbGFnczsKK30KKworLSAoQk9PTClpc0tleVJlcGVhdGluZworeworICAgIEFTU0VSVChfdHlw
ZSA9PSBXZWJFdmVudEtleURvd24gfHwgX3R5cGUgPT0gV2ViRXZlbnRLZXlVcCk7CisgICAgcmV0
dXJuIF9rZXlSZXBlYXRpbmc7Cit9CisKKy8vIEZJWE1FOiB0byBiZSByZW1vdmVkCistIChCT09M
KWlzUG9wdXBWYXJpYW50Cit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50S2V5RG93biB8
fCBfdHlwZSA9PSBXZWJFdmVudEtleVVwKTsKKyAgICByZXR1cm4gX3BvcHVwVmFyaWFudDsKK30K
KworLSAoTlNVSW50ZWdlcilrZXlib2FyZEZsYWdzCit7CisgICAgQVNTRVJUKF90eXBlID09IFdl
YkV2ZW50S2V5RG93biB8fCBfdHlwZSA9PSBXZWJFdmVudEtleVVwKTsKKyAgICByZXR1cm4gX2tl
eWJvYXJkRmxhZ3M7Cit9CisKKy0gKHVpbnQxNl90KWtleUNvZGUKK3sKKyAgICBBU1NFUlQoX3R5
cGUgPT0gV2ViRXZlbnRLZXlEb3duIHx8IF90eXBlID09IFdlYkV2ZW50S2V5VXApOworICAgIHJl
dHVybiBfa2V5Q29kZTsKK30KKworLSAoQk9PTClpc1RhYktleQoreworICAgIEFTU0VSVChfdHlw
ZSA9PSBXZWJFdmVudEtleURvd24gfHwgX3R5cGUgPT0gV2ViRXZlbnRLZXlVcCk7CisgICAgcmV0
dXJuIF90YWJLZXk7Cit9CisKKy0gKFdlYkV2ZW50Q2hhcmFjdGVyU2V0KWNoYXJhY3RlclNldAor
eworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudEtleURvd24gfHwgX3R5cGUgPT0gV2ViRXZl
bnRLZXlVcCk7CisgICAgcmV0dXJuIF9jaGFyYWN0ZXJTZXQ7Cit9CisKKy0gKGZsb2F0KWRlbHRh
WAoreworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudFNjcm9sbFdoZWVsKTsKKyAgICByZXR1
cm4gX2RlbHRhWDsKK30KKworLSAoZmxvYXQpZGVsdGFZCit7CisgICAgQVNTRVJUKF90eXBlID09
IFdlYkV2ZW50U2Nyb2xsV2hlZWwpOworICAgIHJldHVybiBfZGVsdGFZOworfQorCisvLyBUb3Vj
aAorLSAodW5zaWduZWQpdG91Y2hDb3VudAoreworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVu
dFRvdWNoQmVnaW4gfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENoYW5nZSB8fCBfdHlwZSA9PSBX
ZWJFdmVudFRvdWNoRW5kIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDYW5jZWwpOworICAgIHJl
dHVybiBfdG91Y2hDb3VudDsKK30KKworLSAoTlNBcnJheSAqKXRvdWNoTG9jYXRpb25zCit7Cisg
ICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50VG91Y2hCZWdpbiB8fCBfdHlwZSA9PSBXZWJFdmVu
dFRvdWNoQ2hhbmdlIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hFbmQgfHwgX3R5cGUgPT0gV2Vi
RXZlbnRUb3VjaENhbmNlbCk7CisgICAgcmV0dXJuIF90b3VjaExvY2F0aW9uczsKK30KKworLSAo
TlNBcnJheSAqKXRvdWNoSWRlbnRpZmllcnMKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZl
bnRUb3VjaEJlZ2luIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDaGFuZ2UgfHwgX3R5cGUgPT0g
V2ViRXZlbnRUb3VjaEVuZCB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoQ2FuY2VsKTsKKyAgICBy
ZXR1cm4gX3RvdWNoSWRlbnRpZmllcnM7Cit9CisKKy0gKE5TQXJyYXkgKil0b3VjaFBoYXNlcwor
eworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudFRvdWNoQmVnaW4gfHwgX3R5cGUgPT0gV2Vi
RXZlbnRUb3VjaENoYW5nZSB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoRW5kIHx8IF90eXBlID09
IFdlYkV2ZW50VG91Y2hDYW5jZWwpOworICAgIHJldHVybiBfdG91Y2hQaGFzZXM7Cit9CisKKy8v
IEdlc3R1cmUKKy0gKEJPT0wpaXNHZXN0dXJlCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2
ZW50VG91Y2hCZWdpbiB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoQ2hhbmdlIHx8IF90eXBlID09
IFdlYkV2ZW50VG91Y2hFbmQgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENhbmNlbCk7CisgICAg
cmV0dXJuIF9pc0dlc3R1cmU7Cit9CisKKy0gKGZsb2F0KWdlc3R1cmVTY2FsZQoreworICAgIEFT
U0VSVChfdHlwZSA9PSBXZWJFdmVudFRvdWNoQmVnaW4gfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3Vj
aENoYW5nZSB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoRW5kIHx8IF90eXBlID09IFdlYkV2ZW50
VG91Y2hDYW5jZWwpOworICAgIHJldHVybiBfZ2VzdHVyZVNjYWxlOworfQorCistIChmbG9hdCln
ZXN0dXJlUm90YXRpb24KK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEJlZ2lu
IHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDaGFuZ2UgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3Vj
aEVuZCB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoQ2FuY2VsKTsKKyAgICByZXR1cm4gX2dlc3R1
cmVSb3RhdGlvbjsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dpZGdldElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJ
T1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDk5ZTQxMjFlN2E5Y2Y5ZDZhZmI3Zjg3MGZlYTk2N2E2NDI2ODgy
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJ
T1MubW0KQEAgLTAsMCArMSwyNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldpZGdldC5oIgorCisjaW1wb3J0ICJCbG9ja0V4Y2Vw
dGlvbnMuaCIKKyNpbXBvcnQgIkN1cnNvci5oIgorI2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBv
cnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZyYW1lLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2lt
cG9ydCAiU2Nyb2xsVmlldy5oIgorI2ltcG9ydCAiV0FLU2Nyb2xsVmlldy5oIgorI2ltcG9ydCAi
V0FLVmlldy5oIgorI2ltcG9ydCAiV0FLV2luZG93LmgiCisjaW1wb3J0ICJXZWJDb3JlRnJhbWVW
aWV3LmgiCisjaW1wb3J0ICJXZWJDb3JlVmlldy5oIgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgorCitAaW50ZXJmYWNlIE5TVmlldyAoV2ViU2V0U2VsZWN0ZWRNZXRob2RzKQorLSAodm9pZClz
ZXRJc1NlbGVjdGVkOihCT09MKWlzU2VsZWN0ZWQ7CistICh2b2lkKXdlYlBsdWdJblNldElzU2Vs
ZWN0ZWQ6KEJPT0wpaXNTZWxlY3RlZDsKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgdm9pZCBzYWZlUmVtb3ZlRnJvbVN1cGVydmlldyhOU1ZpZXcgKnZpZXcpCit7CisgICAg
Ly8gRklYTUU6IHdlIHNob3VsZCBwcm9iYWJseSBjaGFuZ2UgdGhlIGZpcnN0IHJlc3BvbmRlciBv
ZiB0aGUgd2luZG93IGlmCisgICAgLy8gaXQgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSB2aWV3IHdl
IHJlbW92ZS4KKyAgICAvLyBTZWU6IDxyZGFyOi8vcHJvYmxlbS8xMDM2MDE4Nj4KKyAgICBbdmll
dyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKK30KKworV2lkZ2V0OjpXaWRnZXQoTlNWaWV3KiB2aWV3
KQoreworICAgIGluaXQodmlldyk7Cit9CisKK1dpZGdldDo6fldpZGdldCgpIAoreworICAgIHJl
bGVhc2VQbGF0Zm9ybVdpZGdldCgpOworfQorCisvLyBGSVhNRTogU2hvdWxkIG1vdmUgdGhpcyB0
byBDaHJvbWU7IGJhZCBsYXllcmluZyB0aGF0IHRoaXMga25vd3MgYWJvdXQgRnJhbWUuCit2b2lk
IFdpZGdldDo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQoreworICAgIFVOVVNFRF9QQVJBTShmb2N1
c2VkKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImKQoreworfQor
Cit2b2lkIFdpZGdldDo6c2hvdygpCit7CisgICAgaWYgKGlzU2VsZlZpc2libGUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7CisKKyAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisgICAgW2dldE91dGVyVmlldygpIHNldEhpZGRlbjpOT107Cisg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKwordm9pZCBXaWRnZXQ6OmhpZGUoKQor
eworICAgIGlmICghaXNTZWxmVmlzaWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRT
ZWxmVmlzaWJsZShmYWxzZSk7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cisg
ICAgW2dldE91dGVyVmlldygpIHNldEhpZGRlbjpZRVNdOworICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Cit9CisKK0ludFJlY3QgV2lkZ2V0OjpmcmFtZVJlY3QoKSBjb25zdAoreworICAg
IGlmICghcGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWU7CisgICAgCisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KFtnZXRPdXRlclZpZXcoKSBmcmFtZV0pOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisgICAgCisgICAgcmV0dXJuIG1fZnJhbWU7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFt
ZVJlY3QoY29uc3QgSW50UmVjdCAmcmVjdCkKK3sKKyAgICBtX2ZyYW1lID0gcmVjdDsKKyAgICAK
KyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgTlNWaWV3ICp2ID0gZ2V0T3V0
ZXJWaWV3KCk7CisgICAgTlNSZWN0IGYgPSByZWN0OworICAgIGlmICghTlNFcXVhbFJlY3RzKGYs
IFt2IGZyYW1lXSkpIHsKKyAgICAgICAgW3Ygc2V0RnJhbWU6Zl07CisgICAgICAgIFt2IHNldE5l
ZWRzRGlzcGxheTogTk9dOworICAgIH0KKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
fQorCitOU1ZpZXcqIFdpZGdldDo6Z2V0T3V0ZXJWaWV3KCkgY29uc3QKK3sKKyAgICBOU1ZpZXcq
IHZpZXcgPSBwbGF0Zm9ybVdpZGdldCgpOworCisgICAgLy8gSWYgdGhpcyB3aWRnZXQncyB2aWV3
IGlzIGEgV2ViQ29yZUZyYW1lU2Nyb2xsVmlldyB0aGVuIHdlCisgICAgLy8gcmVzaXplIGl0cyBj
b250YWluaW5nIHZpZXcsIGEgV2ViRnJhbWVWaWV3LgorICAgIGlmIChbdmlldyBjb25mb3Jtc1Rv
UHJvdG9jb2w6QHByb3RvY29sKFdlYkNvcmVGcmFtZVNjcm9sbFZpZXcpXSkgeworICAgICAgICB2
aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XTsKKyAgICAgICAgQVNTRVJUKHZpZXcpOworICAgIH0KKwor
ICAgIHJldHVybiB2aWV3OworfQorCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBwLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIGlmIChwLT5wYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU1ZpZXcgKnZpZXcgPSBnZXRPdXRlclZpZXco
KTsKKworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwLT5wbGF0Zm9ybUNvbnRleHQoKTsK
KyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNnQ29udGV4dCk7CisKKyAgICBOU1JlY3Qgdmlld0Zy
YW1lID0gW3ZpZXcgZnJhbWVdOworICAgIE5TUmVjdCB2aWV3Qm91bmRzID0gW3ZpZXcgYm91bmRz
XTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCB2aWV3RnJhbWUub3JpZ2lu
LnggLSB2aWV3Qm91bmRzLm9yaWdpbi54LCB2aWV3RnJhbWUub3JpZ2luLnkgLSB2aWV3Qm91bmRz
Lm9yaWdpbi55KTsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBbdmll
dyBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTpbdmlldyBjb252ZXJ0UmVjdDpyIGZyb21WaWV3
Olt2aWV3IHN1cGVydmlld11dIGluQ29udGV4dDpjZ0NvbnRleHRdOworICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CisKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNnQ29udGV4dCk7
Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wgLyppc1NlbGVjdGVkKi8pCit7
Cit9CisKK3ZvaWQgV2lkZ2V0OjphZGRUb1N1cGVydmlldyhOU1ZpZXcgKnZpZXcpCit7CisgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgQVNTRVJUKHZpZXcpOworICAgIE5T
VmlldyAqc3VidmlldyA9IGdldE91dGVyVmlldygpOworCisgICAgaWYgKCFzdWJ2aWV3KQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIVt2aWV3IGlzRGVzY2VuZGFudE9mOnN1YnZpZXdd
KTsKKyAgICAKKyAgICBpZiAoW3N1YnZpZXcgc3VwZXJ2aWV3XSAhPSB2aWV3KQorICAgICAgICBb
dmlldyBhZGRTdWJ2aWV3OnN1YnZpZXddOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKK30KKwordm9pZCBXaWRnZXQ6OnJlbW92ZUZyb21TdXBlcnZpZXcoKQoreworICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBzYWZlUmVtb3ZlRnJvbVN1cGVydmlldyhnZXRP
dXRlclZpZXcoKSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworSW50UmVj
dCBXaWRnZXQ6OmNvbnZlcnRGcm9tUm9vdFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBXaWRnZXQq
IHJvb3RXaWRnZXQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFyb290V2lkZ2V0
LT5wbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm4gcmVjdDsKKworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBBU1NFUlQoW3Jvb3RXaWRnZXQtPnBsYXRmb3JtV2lk
Z2V0KCkgaXNLaW5kT2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pOworICAgIFdBS1Njcm9s
bFZpZXcgKnZpZXcgPSBzdGF0aWNfY2FzdDxXQUtTY3JvbGxWaWV3ICo+KHJvb3RXaWRnZXQtPnBs
YXRmb3JtV2lkZ2V0KCkpOworICAgIGlmIChXQUtWaWV3ICpkb2N1bWVudFZpZXcgPSBbdmlldyBk
b2N1bWVudFZpZXddKQorICAgICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChbZG9jdW1lbnRW
aWV3IGNvbnZlcnRSZWN0OnJlY3QgdG9WaWV3Om5pbF0pOworICAgIHJldHVybiBlbmNsb3NpbmdJ
bnRSZWN0KFt2aWV3IGNvbnZlcnRSZWN0OnJlY3QgdG9WaWV3Om5pbF0pOworICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UmVjdCBXaWRn
ZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvd1RvUm9vdChjb25zdCBXaWRnZXQqIHJvb3RX
aWRnZXQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFyb290V2lkZ2V0LT5wbGF0
Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm4gcmVjdDsKKworICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICBBU1NFUlQoW3Jvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkg
aXNLaW5kT2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pOworICAgIFdBS1Njcm9sbFZpZXcg
KnZpZXcgPSBzdGF0aWNfY2FzdDxXQUtTY3JvbGxWaWV3ICo+KHJvb3RXaWRnZXQtPnBsYXRmb3Jt
V2lkZ2V0KCkpOworICAgIGlmIChXQUtWaWV3ICpkb2N1bWVudFZpZXcgPSBbdmlldyBkb2N1bWVu
dFZpZXddKQorICAgICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChbZG9jdW1lbnRWaWV3IGNv
bnZlcnRSZWN0OnJlY3QgZnJvbVZpZXc6bmlsXSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QoW3ZpZXcgY29udmVydFJlY3Q6cmVjdCBmcm9tVmlldzpuaWxdKTsKKyAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOworCisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFBvaW50IFdpZGdl
dDo6Y29udmVydEZyb21Sb290VG9Db250YWluaW5nV2luZG93KGNvbnN0IFdpZGdldCogcm9vdFdp
ZGdldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIGlmICghcm9vdFdpZGdldC0+cGxh
dGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIHBvaW50OworCisgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOworICAgIEFTU0VSVChbcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQo
KSBpc0tpbmRPZkNsYXNzOltOU1Njcm9sbFZpZXcgY2xhc3NdXSk7CisgICAgV0FLU2Nyb2xsVmll
dyAqdmlldyA9IHN0YXRpY19jYXN0PFdBS1Njcm9sbFZpZXcgKj4ocm9vdFdpZGdldC0+cGxhdGZv
cm1XaWRnZXQoKSk7CisgICAgTlNQb2ludCBjb252ZXJ0ZWRQb2ludDsKKyAgICBpZiAoV0FLVmll
dyAqZG9jdW1lbnRWaWV3ID0gW3ZpZXcgZG9jdW1lbnRWaWV3XSkKKyAgICAgICAgY29udmVydGVk
UG9pbnQgPSBbZG9jdW1lbnRWaWV3IGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6bmlsXTsKKyAg
ICBlbHNlCisgICAgICAgIGNvbnZlcnRlZFBvaW50ID0gW3ZpZXcgY29udmVydFBvaW50OnBvaW50
IHRvVmlldzpuaWxdOworICAgIHJldHVybiBJbnRQb2ludChyb3VuZGYoY29udmVydGVkUG9pbnQu
eCksIHJvdW5kZihjb252ZXJ0ZWRQb2ludC55KSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKKworICAgIHJldHVybiBwb2ludDsKK30KKworSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0
RnJvbUNvbnRhaW5pbmdXaW5kb3dUb1Jvb3QoY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25z
dCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKCFyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdl
dCgpKQorICAgICAgICByZXR1cm4gcG9pbnQ7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgQVNTRVJUKFtyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIGlzS2luZE9m
Q2xhc3M6W05TU2Nyb2xsVmlldyBjbGFzc11dKTsKKyAgICBXQUtTY3JvbGxWaWV3ICp2aWV3ID0g
c3RhdGljX2Nhc3Q8V0FLU2Nyb2xsVmlldyAqPihyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgp
KTsKKyAgICBOU1BvaW50IGNvbnZlcnRlZFBvaW50OworICAgIGlmIChXQUtWaWV3ICpkb2N1bWVu
dFZpZXcgPSBbdmlldyBkb2N1bWVudFZpZXddKQorICAgICAgICBjb252ZXJ0ZWRQb2ludCA9IElu
dFBvaW50KFtkb2N1bWVudFZpZXcgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3Om5pbF0pOwor
ICAgIGVsc2UKKyAgICAgICAgY29udmVydGVkUG9pbnQgPSBJbnRQb2ludChbdmlldyBjb252ZXJ0
UG9pbnQ6cG9pbnQgZnJvbVZpZXc6bmlsXSk7CisgICAgcmV0dXJuIEludFBvaW50KHJvdW5kZihj
b252ZXJ0ZWRQb2ludC54KSwgcm91bmRmKGNvbnZlcnRlZFBvaW50LnkpKTsKKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworCisgICAgcmV0dXJuIHBvaW50OworfQorCitOU1ZpZXcgKldp
ZGdldDo6cGxhdGZvcm1XaWRnZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3dpZGdldC5nZXQo
KTsKK30KKwordm9pZCBXaWRnZXQ6OnNldFBsYXRmb3JtV2lkZ2V0KE5TVmlldyAqd2lkZ2V0KQor
eworICAgIGlmICh3aWRnZXQgPT0gbV93aWRnZXQpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
d2lkZ2V0ID0gd2lkZ2V0OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL0Rpc3BsYXlTbGVlcERpc2FibGVyLmNwcAppbmRleCA1Yjk5N2NhY2E3OGZlMjg3NWQ0
OTM0ZDE1ZjRkY2FlNzg0ODEzYTQyLi5iMzZiNjZkOGU4ZmJhNDI0NzI1OGMwODZhOTRiNGNkODEw
ZjY3OTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNs
ZWVwRGlzYWJsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EaXNwbGF5
U2xlZXBEaXNhYmxlci5jcHAKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJEaXNwbGF5U2xlZXBEaXNhYmxlci5oIgogCisjaWYgIVBMQVRGT1JNKElPUykK
KwogI2luY2x1ZGUgPElPS2l0L3B3cl9tZ3QvSU9QTUxpYi5oPgogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KIApAQCAtNTQsMyArNTYsMTIgQEAgRGlzcGxheVNsZWVwRGlzYWJsZXI6On5EaXNw
bGF5U2xlZXBEaXNhYmxlcigpCiB9CiAKIH0KKworI2Vsc2UKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworRGlzcGxheVNsZWVwRGlzYWJsZXI6OkRpc3BsYXlTbGVlcERpc2FibGVyKGNvbnN0IGNoYXIg
KikgeyB9CitEaXNwbGF5U2xlZXBEaXNhYmxlcjo6fkRpc3BsYXlTbGVlcERpc2FibGVyKCkgeyB9
Cit9CisKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERpc2FibGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuaAppbmRleCAyYzlhMTg0MmY0OTBhZDkw
NzEzMTA5OTQ5NjZkYWJhNjdmM2U0MjdmLi5hNjliZjhkZDk0NjhmZjQ2MzM3YjA1YjQwMjI0MDQ4
ZjQ2MDBjZjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxh
eVNsZWVwRGlzYWJsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxh
eVNsZWVwRGlzYWJsZXIuaApAQCAtNDAsNyArNDAsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IERpc3BsYXlTbGVlcERpc2FibGVyKGNvbnN0IGNoYXIqIHJlYXNvbik7CiAgICAgCisjaWYgIVBM
QVRGT1JNKElPUykKICAgICB1aW50MzJfdCBtX2Rpc2FibGVEaXNwbGF5U2xlZXBBc3NlcnRpb247
CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9GaWxlU3lzdGVtTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW0KaW5kZXggMjE2YjYwNTk1OGUxMzdiMjlhYTI4MWVk
ZDRmMmM4M2Q2YWY5MDBlMC4uNjhmNmRmNmM2NTVhNjkwZWQ1OTIwMjVkY2M5YmE2MGE2ZTU2Y2M1
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW0KQEAg
LTY3LDYgKzY3LDggQEAgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJl
Zml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIHBsYXRmb3JtRmlsZUgKICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOCh0ZW1wb3JhcnlGaWxlUGF0aC5kYXRhKCkpOwogfQogCisjaWYgIVBMQVRGT1JN
KElPUykKKwogdm9pZCBzZXRNZXRhZGF0YVVSTChTdHJpbmcmIFVSTFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIE5TVVJMICpVUkwgPSBV
UkxXaXRoVXNlclR5cGVkU3RyaW5nKFVSTFN0cmluZywgbmlsKTsKQEAgLTgyLDcgKzg0LDYgQEAg
dm9pZCBzZXRNZXRhZGF0YVVSTChTdHJpbmcmIFVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZl
cnJlciwgY29uc3QgU3RyaW5nJiBwYXQKICAgICB9KTsKIH0KIAotI2lmICFQTEFURk9STShJT1Mp
CiBib29sIGNhbkV4Y2x1ZGVGcm9tQmFja3VwKCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk0
LDYgKzk1LDcgQEAgYm9vbCBleGNsdWRlRnJvbUJhY2t1cChjb25zdCBTdHJpbmcmIHBhdGgpCiAg
ICAgQ1NCYWNrdXBTZXRJdGVtRXhjbHVkZWQocGF0aEFzVVJMKHBhdGgpLmdldCgpLCBUUlVFLCBG
QUxTRSk7IAogICAgIHJldHVybiB0cnVlOwogfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0tpbGxSaW5n
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjLm1tCmluZGV4
IDMyZTdjNzIyNjJhNmVlNjQyOTg2MTMwMDFiYTU3Nzg1ODdkN2E0MTkuLjEwMTUwNzA4YTM5ODMx
NGU5MDZkODc3YTFjOTA5NmFlYjdmOTI1OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9LaWxsUmluZ01hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvS2lsbFJpbmdNYWMubW0KQEAgLTgxLDMgKzgxLDQgQEAgdm9pZCBLaWxsUmluZzo6c2V0VG9Z
YW5rZWRTdGF0ZSgpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL01lbW9yeVByZXNzdXJlSGFuZGxlck1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMubW0K
aW5kZXggYWM5ZDBjZmFjY2RjYjRhMzI5ZDNjMjlmY2RjMDA4MjY5ZjgwOTA4ZC4uOTE2MzY1M2Rl
Y2MzMzA4ZTQxYWUzYzkwZmU1NzViNGJmYTM3M2VhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL01lbW9yeVByZXNzdXJlSGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTWFjLm1tCkBAIC02Nyw3
ICs2Nyw3IEBAIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjppbnN0YWxsKCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
XnsKLSNpZiBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgIVBMQVRG
T1JNKElPUykgJiYgTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogICAgICAg
ICBfY2FjaGVfZXZlbnRfc291cmNlID0gd2tDcmVhdGVNZW1vcnlTdGF0dXNQcmVzc3VyZUNyaXRp
Y2FsRGlzcGF0Y2hPbk1haW5RdWV1ZSgpOwogI2Vsc2UKICAgICAgICAgX2NhY2hlX2V2ZW50X3Nv
dXJjZSA9IHdrQ3JlYXRlVk1QcmVzc3VyZURpc3BhdGNoT25NYWluUXVldWUoKTsKQEAgLTE1OCw3
ICsxNTgsOSBAQCB2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6cmVsZWFzZU1lbW9yeShib29s
KQogCiAgICAgbWVtb3J5Q2FjaGUoKS0+cHJ1bmVUb1BlcmNlbnRhZ2UoMCk7CiAKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5kcmFpbigpOworI2VuZGlm
CiAKICAgICBjc3NWYWx1ZVBvb2woKS5kcmFpbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1DbG9ja0NNLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1BsYXRmb3JtQ2xvY2tDTS5tbQppbmRleCAzM2Y1NGM5YTE0ZjMwZTRhMjUyZWI1
YjgyMGI0ZWFhYTY1YzdlMDM1Li4wNzQwMDVlYmFkODQ0NmMxZGMwM2U0YmFhZWJjMzcxYTU0MzVi
NTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1DbG9j
a0NNLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUNsb2NrQ00u
bW0KQEAgLTMxLDExICszMSwxOSBAQAogCiAjaW1wb3J0ICJNZWRpYVRpbWVNYWMuaCIKICNpbXBv
cnQgIlNvZnRMaW5raW5nLmgiCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8Q29yZU1lZGlh
L0NNQXVkaW9DbG9jay5oPgorI2Vsc2UKICNpbXBvcnQgPENvcmVNZWRpYS9DTUF1ZGlvRGV2aWNl
Q2xvY2suaD4KKyNlbmRpZgogCiBTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKENvcmVNZWRp
YSkKIAorI2lmIFBMQVRGT1JNKElPUykKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNQXVkaW9DbG9j
a0NyZWF0ZSwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENNQ2xvY2tSZWYg
KmNsb2NrT3V0KSwgKGFsbG9jYXRvciwgY2xvY2tPdXQpKQorI2Vsc2UKIFNPRlRfTElOSyhDb3Jl
TWVkaWEsIENNQXVkaW9EZXZpY2VDbG9ja0NyZWF0ZSwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJl
ZiBhbGxvY2F0b3IsIENGU3RyaW5nUmVmIGRldmljZVVJRCwgQ01DbG9ja1JlZiAqY2xvY2tPdXQp
LCAoYWxsb2NhdG9yLCBkZXZpY2VVSUQsIGNsb2NrT3V0KSkKKyNlbmRpZgogU09GVF9MSU5LKENv
cmVNZWRpYSwgQ01UaW1lYmFzZUNyZWF0ZVdpdGhNYXN0ZXJDbG9jaywgT1NTdGF0dXMsIChDRkFs
bG9jYXRvclJlZiBhbGxvY2F0b3IsIENNQ2xvY2tSZWYgbWFzdGVyQ2xvY2ssIENNVGltZWJhc2VS
ZWYgKnRpbWViYXNlT3V0KSwgKGFsbG9jYXRvciwgbWFzdGVyQ2xvY2ssIHRpbWViYXNlT3V0KSkK
IFNPRlRfTElOSyhDb3JlTWVkaWEsIENNVGltZWJhc2VTZXRUaW1lLCBPU1N0YXR1cywgKENNVGlt
ZWJhc2VSZWYgdGltZWJhc2UsIENNVGltZSB0aW1lKSwgKHRpbWViYXNlLCB0aW1lKSkKIFNPRlRf
TElOSyhDb3JlTWVkaWEsIENNVGltZWJhc2VHZXRUaW1lLCBDTVRpbWUsIChDTVRpbWViYXNlUmVm
IHRpbWViYXNlKSwgKHRpbWViYXNlKSkKQEAgLTU0LDcgKzYyLDExIEBAIFBsYXRmb3JtQ2xvY2tD
TTo6UGxhdGZvcm1DbG9ja0NNKCkKICAgICAsIG1fcnVubmluZyhmYWxzZSkKIHsKICAgICBDTUNs
b2NrUmVmIHJhd0Nsb2NrUHRyID0gMDsKKyNpZiBQTEFURk9STShJT1MpCisgICAgQ01BdWRpb0Ns
b2NrQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsICZyYXdDbG9ja1B0cik7CisjZWxzZQogICAg
IENNQXVkaW9EZXZpY2VDbG9ja0NyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBOVUxMLCAmcmF3
Q2xvY2tQdHIpOworI2VuZGlmCiAgICAgUmV0YWluUHRyPENNQ2xvY2tSZWY+IGNsb2NrID0gYWRv
cHRDRihyYXdDbG9ja1B0cik7CiAgICAgaW5pdGlhbGl6ZVdpdGhUaW1pbmdTb3VyY2UoY2xvY2su
Z2V0KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRM
aW5raW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaAppbmRl
eCBlOTQ2YjNkOWRlNTM5ZGZmY2IzOGUzOTU4ZWI4MGFiZTU5ZmUxMTY4Li4yNTdkODNkMDcxOGRj
MmI1ODFlNDBlM2UyNGQ2ZTY1ZWMwMGQyNjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU29mdExpbmtpbmcuaApAQCAtMjksNiArMjksMTAgQEAKICNpbXBvcnQgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAjaW1wb3J0IDxkbGZjbi5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8
b2JqYy9ydW50aW1lLmg+CisjZW5kaWYKKwogI2RlZmluZSBTT0ZUX0xJTktfTElCUkFSWShsaWIp
IFwKICAgICBzdGF0aWMgdm9pZCogbGliIyNMaWJyYXJ5KCkgXAogICAgIHsgXApAQCAtNjIsNiAr
NjYsMTUgQEAKICAgICAgICAgcmV0dXJuIGZyYW1ld29ya0xpYnJhcnk7IFwKICAgICB9CiAKKyNp
ZiBQTEFURk9STShJT1MpCisjZGVmaW5lIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJ
T05BTChmcmFtZXdvcmspIFwKKyAgICBzdGF0aWMgdm9pZCogZnJhbWV3b3JrIyNMaWJyYXJ5KCkg
XAorICAgIHsgXAorICAgICAgICBzdGF0aWMgdm9pZCogZnJhbWV3b3JrTGlicmFyeSA9IGRsb3Bl
bigiL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzLyIgI2ZyYW1ld29yayAiLmZyYW1l
d29yay8iICNmcmFtZXdvcmssIFJUTERfTk9XKTsgXAorICAgICAgICByZXR1cm4gZnJhbWV3b3Jr
TGlicmFyeTsgXAorICAgIH0KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKICNkZWZpbmUgU09G
VF9MSU5LX1NUQUdFRF9GUkFNRVdPUksoZnJhbWV3b3JrLCB1bnN0YWdlZExvY2F0aW9uLCB2ZXJz
aW9uKSBcCiAgICAgc3RhdGljIHZvaWQqIGZyYW1ld29yayMjTGlicmFyeSgpIFwKICAgICB7IFwK
QEAgLTk5LDYgKzExMiwzMCBAQAogICAgICAgICByZXR1cm4gc29mdExpbmsjI2Z1bmN0aW9uTmFt
ZSBwYXJhbWV0ZXJOYW1lczsgXAogICAgIH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyNkZWZpbmUg
U09GVF9MSU5LX01BWV9GQUlMKGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBw
YXJhbWV0ZXJEZWNsYXJhdGlvbnMsIHBhcmFtZXRlck5hbWVzKSBcCisgICAgc3RhdGljIHJlc3Vs
dFR5cGUgKCpzb2Z0TGluayMjZnVuY3Rpb25OYW1lKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMgPSAw
OyBcCisgICAgXAorICAgIHN0YXRpYyBib29sIGluaXQjI2Z1bmN0aW9uTmFtZSgpIFwKKyAgICB7
IFwKKyAgICAgICAgQVNTRVJUKCFzb2Z0TGluayMjZnVuY3Rpb25OYW1lKTsgXAorICAgICAgICBz
b2Z0TGluayMjZnVuY3Rpb25OYW1lID0gKHJlc3VsdFR5cGUgKCopIHBhcmFtZXRlckRlY2xhcmF0
aW9ucykgZGxzeW0oZnJhbWV3b3JrIyNMaWJyYXJ5KCksICNmdW5jdGlvbk5hbWUpOyBcCisgICAg
ICAgIHJldHVybiAhIXNvZnRMaW5rIyNmdW5jdGlvbk5hbWU7IFwKKyAgICB9IFwKKyAgICBcCisg
ICAgc3RhdGljIGJvb2wgY2FuTG9hZCMjZnVuY3Rpb25OYW1lKCkgXAorICAgIHsgXAorICAgICAg
ICBzdGF0aWMgYm9vbCBsb2FkZWQgPSBpbml0IyNmdW5jdGlvbk5hbWUoKTsgXAorICAgICAgICBy
ZXR1cm4gbG9hZGVkOyBcCisgICAgfSBcCisgICAgXAorICAgIHJlc3VsdFR5cGUgZnVuY3Rpb25O
YW1lIHBhcmFtZXRlckRlY2xhcmF0aW9ucyBcCisgICAgeyBcCisgICAgICAgIEFTU0VSVChzb2Z0
TGluayMjZnVuY3Rpb25OYW1lKTsgXAorICAgICAgICByZXR1cm4gc29mdExpbmsjI2Z1bmN0aW9u
TmFtZSBwYXJhbWV0ZXJOYW1lczsgXAorICAgIH0KKyNlbmRpZgorCiAvKiBjYWxsaW5nQ29udmVu
dGlvbiBpcyB1bnVzZWQgb24gTWFjIGJ1dCBpcyBoZXJlIHRvIGtlZXAgdGhlIG1hY3JvIHByb3Rv
dHlwZSB0aGUgc2FtZSBiZXR3ZWVuIE1hYyBhbmQgV2luZG93cy4gKi8KICNkZWZpbmUgU09GVF9M
SU5LX09QVElPTkFMKGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBjYWxsaW5n
Q29udmVudGlvbiwgcGFyYW1ldGVyRGVjbGFyYXRpb25zKSBcCiAgICAgdHlwZWRlZiByZXN1bHRU
eXBlICgqZnVuY3Rpb25OYW1lIyNQdHJUeXBlKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnM7IFwKQEAg
LTIwMiwzICsyMzksMzIgQEAKICAgICAgICAgZ2V0IyNuYW1lID0gbmFtZSMjRnVuY3Rpb247IFwK
ICAgICAgICAgcmV0dXJuIGNvbnN0YW50IyNuYW1lOyBcCiAgICAgfQorCisjaWYgUExBVEZPUk0o
SU9TKQorI2RlZmluZSBTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoZnJhbWV3b3JrLCBuYW1l
LCB0eXBlKSBcCisgICAgc3RhdGljIGJvb2wgaW5pdCMjbmFtZSgpOyBcCisgICAgc3RhdGljIHR5
cGUgKCpnZXQjI25hbWUpKCkgPSAwOyBcCisgICAgc3RhdGljIHR5cGUgY29uc3RhbnQjI25hbWU7
IFwKKyAgICBcCisgICAgc3RhdGljIHR5cGUgbmFtZSMjRnVuY3Rpb24oKSBcCisgICAgeyBcCisg
ICAgICAgIHJldHVybiBjb25zdGFudCMjbmFtZTsgXAorICAgIH1cCisgICAgXAorICAgIHN0YXRp
YyBib29sIGNhbkxvYWQjI25hbWUoKSBcCisgICAgeyBcCisgICAgICAgIHN0YXRpYyBib29sIGxv
YWRlZCA9IGluaXQjI25hbWUoKTsgXAorICAgICAgICByZXR1cm4gbG9hZGVkOyBcCisgICAgfSBc
CisgICAgXAorICAgIHN0YXRpYyBib29sIGluaXQjI25hbWUoKSBcCisgICAgeyBcCisgICAgICAg
IEFTU0VSVCghZ2V0IyNuYW1lKTsgXAorICAgICAgICB2b2lkKiBjb25zdGFudCA9IGRsc3ltKGZy
YW1ld29yayMjTGlicmFyeSgpLCAjbmFtZSk7IFwKKyAgICAgICAgaWYgKCFjb25zdGFudCkgXAor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisgICAgICAgIGNvbnN0YW50IyNuYW1lID0gKnN0
YXRpY19jYXN0PHR5cGUqPihjb25zdGFudCk7IFwKKyAgICAgICAgZ2V0IyNuYW1lID0gbmFtZSMj
RnVuY3Rpb247IFwKKyAgICAgICAgcmV0dXJuIHRydWU7IFwKKyAgICB9CisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TeXN0ZW1WZXJzaW9uTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1N5c3RlbVZlcnNpb25NYWMubW0KaW5kZXggYmNj
MTFiYTliNTg5OTNmZDU4OGExMWM5OTkwNTVjOWY3NmMzMmZjZC4uZWNkNTVlMjIzN2M5OTAxMTk2
NTI4ZDQwMzk1YWM3MmJiMWFhZWFiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1N5c3RlbVZlcnNpb25NYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1N5c3RlbVZlcnNpb25NYWMubW0KQEAgLTI3LDYgKzI3LDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCisjaWYgIVBMQVRGT1JNKElPUykKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwODAKIAogc3RhdGljIE5TU3RyaW5nICpjcmVhdGVTeXN0ZW1NYXJrZXRp
bmdWZXJzaW9uKCkKQEAgLTY0LDExICs2NSwxNSBAQCBzdGF0aWMgTlNTdHJpbmcgKmNyZWF0ZVN5
c3RlbU1hcmtldGluZ1ZlcnNpb24oKQogCiAjZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDgwCiAKLQogTlNTdHJpbmcgKnN5c3RlbU1hcmtldGluZ1ZlcnNpb24o
KQogewogICAgIHN0YXRpYyBOU1N0cmluZyAqdmVyc2lvbiA9IGNyZWF0ZVN5c3RlbU1hcmtldGlu
Z1ZlcnNpb24oKTsKICAgICByZXR1cm4gdmVyc2lvbjsKIH0KKyNlbHNlCisKK30KKworI2VuZGlm
IC8vICFQTEFURk9STShJT1MpCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmgKaW5kZXgg
N2IyNDNiMGEyZjI0YzIwNTczN2FhMzk3OGQxYThjNmFlNGRjNDRjMy4uODdlNjk5YWNlYzBhNjgw
ODdlZTlkZWZmZGE0MDQwODUwOGZjMjMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmgK
QEAgLTIzLDYgKzIzLDggQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCisjaWYgIVBMQVRGT1JNKElPUykKKwogI2lmbmRlZiBXZWJDb3JlRnVsbFNjcmVlblBsYWNl
aG9sZGVyVmlld19oCiAjZGVmaW5lIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3X2gK
IApAQCAtNDAsMyArNDIsNSBAQAogQGVuZAogCiAjZW5kaWYgLy8gV2ViQ29yZUZ1bGxTY3JlZW5Q
bGFjZWhvbGRlclZpZXdfaAorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVy
Vmlldy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlblBs
YWNlaG9sZGVyVmlldy5tbQppbmRleCBhOTZkYjBlNmIxZDFkZmEzMDczY2NmMzI0YTkzYmY0NjI4
YTZmMWEzLi4xM2Y1NjNlOTI4MWU3YTdjMmU3NWM2NjM2YTNjOWYxNTU5YmZmOWNiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhv
bGRlclZpZXcubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxs
U2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tCkBAIC0yNCw2ICsyNCw4IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgorI2lmICFQTEFURk9STShJT1MpCisKICNpbmNsdWRlICJXZWJDb3JlRnVs
bFNjcmVlblBsYWNlaG9sZGVyVmlldy5oIgogCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5o
IgpAQCAtOTMsMyArOTUsNSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIH0KIAogQGVuZAor
CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5oCmluZGV4IGY2ZWE5
YWQ3ODRlYWUyZGUwOTVkMWUzMGVkZDdjMGM1NGZhNmNjY2QuLmUyYTM3ZmI0MjQwODEyYjE4ZGQw
OGYyM2MzYmI4MTI3MmNjYTYxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcuaApAQCAtMjMsNiArMjMs
OCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExB
VEZPUk0oSU9TKQorCiAjaWZuZGVmIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXdfaAogI2Rl
ZmluZSBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3X2gKIApAQCAtMzksMyArNDEsNSBAQAog
I2VuZGlmCiAKICNlbmRpZiAvLyBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3X2gKKworI2Vu
ZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tCmluZGV4IGM0ZTFmYTMy
OTBhZDQ0MDRkNjJmMmUxMTRiMGFkZmExNmFlMTkyYzMuLjM0OTRiODhhYzllNDE2YmZkNWI5YTkw
ODcyMjcwNWU0ZjY5NzE4N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tCkBAIC0yNCw2ICsyNCw4
IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmICFQTEFURk9STShJT1MpCisKICNp
bmNsdWRlICJXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3LmgiCiAKICNpbmNsdWRlICJMb2Nh
bGl6ZWRTdHJpbmdzLmgiCkBAIC0xMDMsMyArMTA1LDUgQEAgc3RhdGljIGNvbnN0IENHRmxvYXQg
V2FybmluZ1ZpZXdTaGFkb3dSYWRpdXMgPSA1OwogICAgIHJldHVybiBzZWxmOwogfQogQGVuZAor
CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93LmgKaW5kZXggZGU2MzY1YTk0MTgyMTQ0
NDRjNzE4MWI1ZTBjZGRlZGU1OTYxOGFjMC4uNjAxZTM0OGYwMDQ0YzAyM2RlNTFhMDE4NWFlMmI4
NWE1YjBiNzlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNv
cmVGdWxsU2NyZWVuV2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YkNvcmVGdWxsU2NyZWVuV2luZG93LmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgV2ViQ29y
ZUZ1bGxTY3JlZW5XaW5kb3dfaAogI2RlZmluZSBXZWJDb3JlRnVsbFNjcmVlbldpbmRvd19oCiAK
LSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAm
JiAhUExBVEZPUk0oSU9TKQogCiBAaW50ZXJmYWNlIFdlYkNvcmVGdWxsU2NyZWVuV2luZG93IDog
TlNXaW5kb3cKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5tbQppbmRleCA1MjAyOTJjZmFiZWIwMTFhZTgyZGNjZjEy
NjhmMDJjYmQ1ODQ5OWIxLi41MzAyY2RhMmVhMWU0Njc1YTk3NzIxNzk1ZGRmY2QxMjEyYmY2MjM4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3Jl
ZW5XaW5kb3cubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxs
U2NyZWVuV2luZG93Lm1tCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbXBvcnQgImNvbmZpZy5oIgog
Ci0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkg
JiYgIVBMQVRGT1JNKElPUykKIAogI2ltcG9ydCAiV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cuaCIK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU0NlbGxF
eHRyYXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFz
LmgKaW5kZXggNDdlZGZmODYxYWViNGJhOGRmMjk4YTA4ZThjODQwODdkYTMwZDQ2MC4uOWZmNzQ2
MmIwNzY2YzI1YWQxYTg1MDNmOTM2MzJlODY1OWYxN2IxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU0NlbGxFeHRyYXMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TQ2VsbEV4dHJhcy5oCkBAIC0yMyw4ICsyMywxMiBA
QAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZP
Uk0oSU9TKQogI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgogCiBAaW50ZXJmYWNlIE5TQ2VsbCAo
V2ViQ29yZUZvY3VzUmluZ0RyYXdpbmcpCiAtICh2b2lkKV93ZWJfZHJhd0ZvY3VzUmluZ1dpdGhG
cmFtZTooTlNSZWN0KWNlbGxGcmFtZSBpblZpZXc6KE5TVmlldyAqKWNvbnRyb2xWaWV3OwogQGVu
ZAorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU0NlbGxFeHRyYXMubSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFzLm0KaW5kZXggYTU2ODkzMTc0YjM3NmQ3Njll
NWE4ZDc1N2I2MzBlMzQwNWRjMGQzMi4uMGQ1YjBlNzE1Y2MzYTQzNGVjNWY0YmU5OTE4YzM1OWZj
MGEwYTM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVO
U0NlbGxFeHRyYXMubQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5T
Q2VsbEV4dHJhcy5tCkBAIC0yNiw2ICsyNiw4IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBv
cnQgIldlYkNvcmVOU0NlbGxFeHRyYXMuaCIKIAorI2lmICFQTEFURk9STShJT1MpCisKIEBpbXBs
ZW1lbnRhdGlvbiBOU0NlbGwgKFdlYkNvcmVGb2N1c1JpbmdEcmF3aW5nKQogCiAtICh2b2lkKV93
ZWJfZHJhd0ZvY3VzUmluZ1dpdGhGcmFtZTooTlNSZWN0KWNlbGxGcmFtZSBpblZpZXc6KE5TVmll
dyAqKWNvbnRyb2xWaWV3CkBAIC00MCwzICs0Miw2IEBAIC0gKHZvaWQpX3dlYl9kcmF3Rm9jdXNS
aW5nV2l0aEZyYW1lOihOU1JlY3QpY2VsbEZyYW1lIGluVmlldzooTlNWaWV3ICopY29udHJvbFZp
CiB9CiAKIEBlbmQKKworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oCmluZGV4IDRi
NDI3MDkwYzRmMjZiZmQ0NTRlMzVlZmNkMjEzZmFiY2EzYmY3MTkuLjUzMzEyODk3MzU5M2ZhNDU2
ZDY0MTY0NGUzMWZkY2RjMmZiMDZhOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaApAQCAtMjgsNiArMjgsMTAgQEAKIAog
I2luY2x1ZGUgPG9iamMvb2JqYy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldl
YkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaCIKKyNlbmRpZgorCiB0eXBlZGVmIGNvbnN0IHN0cnVj
dCBfX0NGU3RyaW5nICogQ0ZTdHJpbmdSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGTnVt
YmVyICogQ0ZOdW1iZXJSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGRGljdGlvbmFyeSAq
IENGRGljdGlvbmFyeVJlZjsKQEAgLTUzLDE2ICs1NywyMSBAQCB0eXBlZGVmIGNvbnN0IHN0cnVj
dCBfX0NUTGluZSAqIENUTGluZVJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RSdW4gKiBD
VFJ1blJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RUeXBlc2V0dGVyICogQ1RUeXBlc2V0
dGVyUmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19BWFVJRWxlbWVudCAqQVhVSUVsZW1lbnRS
ZWY7CisjaWYgIVBMQVRGT1JNKElPUykKIHR5cGVkZWYgc3RydWN0IF9OU1JhbmdlIE5TUmFuZ2U7
CiAKIHR5cGVkZWYgVUludDMyIEZNRm9udDsKIHR5cGVkZWYgRk1Gb250IEFUU1VGb250SUQ7CiB0
eXBlZGVmIFVJbnQxNiBBVFNHbHlwaFJlZjsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAm
JiBVU0UoQ0EpCisjaWYgIVBMQVRGT1JNKElPU19TSU1VTEFUT1IpCiB0eXBlZGVmIHN0cnVjdCBf
X0lPU3VyZmFjZSAqSU9TdXJmYWNlUmVmOworI2VuZGlmIC8vICFQTEFURk9STShJT1NfU0lNVUxB
VE9SKQogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQ
RVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiB0eXBlZGVmIHN0cnVjdCBDR1BvaW50IE5TUG9p
bnQ7CiB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0OwpAQCAtNzAsNiArNzksMTEgQEAgdHlw
ZWRlZiBzdHJ1Y3QgQ0dSZWN0IE5TUmVjdDsKIHR5cGVkZWYgc3RydWN0IF9OU1BvaW50IE5TUG9p
bnQ7CiB0eXBlZGVmIHN0cnVjdCBfTlNSZWN0IE5TUmVjdDsKICNlbmRpZgorI2VuZGlmIC8vICFQ
TEFURk9STShJT1MpCisKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogdHlwZWRlZiBz
dHJ1Y3QgT3BhcXVlQ0ZIVFRQQ29va2llU3RvcmFnZSogIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7
CkBAIC0xMTksNyArMTMzLDcgQEAgdHlwZWRlZiBlbnVtIHsKICAgICB3a1BhdHRlcm5UaWxpbmdD
b25zdGFudFNwYWNpbmcKIH0gd2tQYXR0ZXJuVGlsaW5nOwogZXh0ZXJuIHZvaWQgKCp3a0NHQ29u
dGV4dFJlc2V0Q2xpcCkoQ0dDb250ZXh0UmVmKTsKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwODAKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDEwODAKIGV4dGVybiBib29sICgqd2tDR0NvbnRleHREcmF3c1dp
dGhDb3JyZWN0U2hhZG93T2Zmc2V0cykoQ0dDb250ZXh0UmVmKTsKICNlbmRpZgogZXh0ZXJuIENH
UGF0dGVyblJlZiAoKndrQ0dQYXR0ZXJuQ3JlYXRlV2l0aEltYWdlQW5kVHJhbnNmb3JtKShDR0lt
YWdlUmVmLCBDR0FmZmluZVRyYW5zZm9ybSwgaW50KTsKQEAgLTEzNSw2ICsxNDksNyBAQCBleHRl
cm4gQ0ZSZWFkU3RyZWFtUmVmICgqd2tDcmVhdGVDdXN0b21DRlJlYWRTdHJlYW0pKHZvaWQgKigq
Zm9ybUNyZWF0ZSkoQ0ZSZWFkUwogZXh0ZXJuIENGU3RyaW5nUmVmICgqd2tDb3B5Q0ZMb2NhbGl6
YXRpb25QcmVmZXJyZWROYW1lKShDRlN0cmluZ1JlZik7CiBleHRlcm4gTlNTdHJpbmcqICgqd2tD
b3B5TlNVUkxSZXNwb25zZVN0YXR1c0xpbmUpKE5TVVJMUmVzcG9uc2UqKTsKIGV4dGVybiBDRkFy
cmF5UmVmICgqd2tDb3B5TlNVUkxSZXNwb25zZUNlcnRpZmljYXRlQ2hhaW4pKE5TVVJMUmVzcG9u
c2UqKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogZXh0ZXJuIHZvaWQgKCp3a0RyYXdCZXplbGVkVGV4
dEZpZWxkQ2VsbCkoTlNSZWN0LCBCT09MIGVuYWJsZWQpOwogZXh0ZXJuIHZvaWQgKCp3a0RyYXdU
ZXh0RmllbGRDZWxsRm9jdXNSaW5nKShOU1RleHRGaWVsZENlbGwqLCBOU1JlY3QpOwogZXh0ZXJu
IHZvaWQgKCp3a0RyYXdDYXBzTG9ja0luZGljYXRvcikoQ0dDb250ZXh0UmVmLCBDR1JlY3QpOwpA
QCAtMTQzLDE2ICsxNTgsMjIgQEAgZXh0ZXJuIHZvaWQgKCp3a0RyYXdGb2N1c1JpbmcpKENHQ29u
dGV4dFJlZiwgQ0dDb2xvclJlZiwgaW50IHJhZGl1cyk7CiBleHRlcm4gTlNGb250KiAoKndrR2V0
Rm9udEluTGFuZ3VhZ2VGb3JSYW5nZSkoTlNGb250KiwgTlNTdHJpbmcqLCBOU1JhbmdlKTsKIGV4
dGVybiBOU0ZvbnQqICgqd2tHZXRGb250SW5MYW5ndWFnZUZvckNoYXJhY3RlcikoTlNGb250Kiwg
VW5pQ2hhcik7CiBleHRlcm4gQk9PTCAoKndrR2V0R2x5cGhUcmFuc2Zvcm1lZEFkdmFuY2VzKShD
R0ZvbnRSZWYsIE5TRm9udCosIENHQWZmaW5lVHJhbnNmb3JtKiwgQVRTR2x5cGhSZWYqLCBDR1Np
emUqIGFkdmFuY2UpOworI2VuZGlmCisjaWYgIVBMQVRGT1JNKElPUykKIGV4dGVybiB2b2lkICgq
d2tEcmF3TWVkaWFTbGlkZXJUcmFjaykoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUmVjdCByZWN0
LCBmbG9hdCB0aW1lTG9hZGVkLCBmbG9hdCBjdXJyZW50VGltZSwKICAgICBmbG9hdCBkdXJhdGlv
biwgdW5zaWduZWQgc3RhdGUpOwogZXh0ZXJuIHZvaWQgKCp3a0RyYXdNZWRpYVVJUGFydCkoaW50
IHBhcnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1JlY3QgcmVjdCwgdW5zaWduZWQgc3RhdGUp
OwogZXh0ZXJuIENGU3RyaW5nUmVmICgqd2tTaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJp
bmcpKHVuc2lnbmVkIGtleVNpemUsIENGU3RyaW5nUmVmIGNoYWxsZW5nZSwgQ0ZTdHJpbmdSZWYg
a2V5RGVzY3JpcHRpb24pOwogZXh0ZXJuIE5TU3RyaW5nKiAoKndrR2V0UHJlZmVycmVkRXh0ZW5z
aW9uRm9yTUlNRVR5cGUpKE5TU3RyaW5nKik7CiBleHRlcm4gTlNBcnJheSogKCp3a0dldEV4dGVu
c2lvbnNGb3JNSU1FVHlwZSkoTlNTdHJpbmcqKTsKKyNlbmRpZgogZXh0ZXJuIE5TU3RyaW5nKiAo
KndrR2V0TUlNRVR5cGVGb3JFeHRlbnNpb24pKE5TU3RyaW5nKik7CisjaWYgIVBMQVRGT1JNKElP
UykKIGV4dGVybiBBVFNVRm9udElEICgqd2tHZXROU0ZvbnRBVFNVRm9udElkKShOU0ZvbnQqKTsK
IGV4dGVybiBkb3VibGUgKCp3a0dldE5TVVJMUmVzcG9uc2VDYWxjdWxhdGVkRXhwaXJhdGlvbiko
TlNVUkxSZXNwb25zZSAqcmVzcG9uc2UpOworI2VuZGlmCiBleHRlcm4gTlNEYXRlICooKndrR2V0
TlNVUkxSZXNwb25zZUxhc3RNb2RpZmllZERhdGUpKE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlKTsK
KyNpZiAhUExBVEZPUk0oSU9TKQogZXh0ZXJuIEJPT0wgKCp3a0dldE5TVVJMUmVzcG9uc2VNdXN0
UmV2YWxpZGF0ZSkoTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UpOwogZXh0ZXJuIHZvaWQgKCp3a0dl
dFdoZWVsRXZlbnREZWx0YXMpKE5TRXZlbnQqLCBmbG9hdCogZGVsdGFYLCBmbG9hdCogZGVsdGFZ
LCBCT09MKiBjb250aW51b3VzKTsKIGV4dGVybiBVSW50OCAoKndrR2V0TlNFdmVudEtleUNoYXIp
KE5TRXZlbnQgKik7CkBAIC0xOTEsNyArMjEyLDkgQEAgZXh0ZXJuIE5TQXJyYXkgKigqd2tRVEdl
dFNpdGVzSW5NZWRpYURvd25sb2FkQ2FjaGUpKCk7CiBleHRlcm4gdm9pZCAoKndrUVRDbGVhck1l
ZGlhRG93bmxvYWRDYWNoZUZvclNpdGUpKE5TU3RyaW5nICpzaXRlKTsKIGV4dGVybiB2b2lkICgq
d2tRVENsZWFyTWVkaWFEb3dubG9hZENhY2hlKSgpOwogZXh0ZXJuIHZvaWQgKCp3a1NldENHRm9u
dFJlbmRlcmluZ01vZGUpKENHQ29udGV4dFJlZiwgTlNGb250KiwgQk9PTCk7CitleHRlcm4gdm9p
ZCAoKndrU2V0Q29va2llU3RvcmFnZVByaXZhdGVCcm93c2luZ0VuYWJsZWQpKEJPT0wpOwogZXh0
ZXJuIHZvaWQgKCp3a1NldERyYWdJbWFnZSkoTlNJbWFnZSosIE5TUG9pbnQgb2Zmc2V0KTsKKyNl
bmRpZgogZXh0ZXJuIHZvaWQgKCp3a1NldE5TVVJMQ29ubmVjdGlvbkRlZmVyc0NhbGxiYWNrcyko
TlNVUkxDb25uZWN0aW9uICosIEJPT0wpOwogZXh0ZXJuIHZvaWQgKCp3a1NldE5TVVJMUmVxdWVz
dFNob3VsZENvbnRlbnRTbmlmZikoTlNNdXRhYmxlVVJMUmVxdWVzdCAqLCBCT09MKTsKIGV4dGVy
biB2b2lkICgqd2tTZXRCYXNlQ1RNKShDR0NvbnRleHRSZWYsIENHQWZmaW5lVHJhbnNmb3JtKTsK
QEAgLTIxNiwxMSArMjM5LDEzIEBAIGV4dGVybiBib29sICgqd2tHZXRWZXJ0aWNhbEdseXBoc0Zv
ckNoYXJhY3RlcnMpKENURm9udFJlZiwgY29uc3QgVW5pQ2hhcltdLCBDR0dsCiAKIGV4dGVybiBC
T09MICgqd2tVc2VTaGFyZWRNZWRpYVVJKSgpOwogCisjaWYgIVBMQVRGT1JNKElPUykKIGV4dGVy
biB2b2lkKiB3a0dldEh5cGhlbmF0aW9uTG9jYXRpb25CZWZvcmVJbmRleDsKKyNlbmRpZgogCiBl
eHRlcm4gQ1RMaW5lUmVmICgqd2tDcmVhdGVDVExpbmVXaXRoVW5pQ2hhclByb3ZpZGVyKShjb25z
dCBVbmlDaGFyKiAoKnByb3ZpZGUpKENGSW5kZXggc3RyaW5nSW5kZXgsIENGSW5kZXgqIGNoYXJD
b3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiksIHZvaWQgKCpkaXNwb3Nl
KShjb25zdCBVbmlDaGFyKiBjaGFycywgdm9pZCopLCB2b2lkKik7CiAKLSNpZiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogZW51bSB7CiAgICAgd2tDVEZvbnRU
cmFuc2Zvcm1BcHBseVNoYXBpbmcgPSAoMSA8PCAwKSwKICAgICB3a0NURm9udFRyYW5zZm9ybUFw
cGx5UG9zaXRpb25pbmcgPSAoMSA8PCAxKQpAQCAtMjM1LDExICsyNjAsMTIgQEAgZXh0ZXJuIENU
VHlwZXNldHRlclJlZiAoKndrQ3JlYXRlQ1RUeXBlc2V0dGVyV2l0aFVuaUNoYXJQcm92aWRlckFu
ZE9wdGlvbnMpKGNvbnMKIAogZXh0ZXJuIENHU2l6ZSAoKndrQ1RSdW5HZXRJbml0aWFsQWR2YW5j
ZSkoQ1RSdW5SZWYpOwogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQ0EpCisjaWYgUExBVEZP
Uk0oTUFDKSAmJiBVU0UoQ0EpICYmICFQTEFURk9STShJT1NfU0lNVUxBVE9SKQogZXh0ZXJuIENH
Q29udGV4dFJlZiAoKndrSU9TdXJmYWNlQ29udGV4dENyZWF0ZSkoSU9TdXJmYWNlUmVmIHN1cmZh
Y2UsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIENHQ29sb3JTcGFjZVJlZiBjb2xv
clNwYWNlKTsKIGV4dGVybiBDR0ltYWdlUmVmICgqd2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1h
Z2UpKENHQ29udGV4dFJlZiBjb250ZXh0KTsKICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykK
IGV4dGVybiBpbnQgKCp3a1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSkodm9pZCk7CiAKIGV4dGVy
biBib29sICgqd2tFeGVjdXRhYmxlV2FzTGlua2VkT25PckJlZm9yZVNub3dMZW9wYXJkKSh2b2lk
KTsKQEAgLTI1MCw3ICsyNzYsOSBAQCBleHRlcm4gdm9pZCAoKndrU2V0Q3Jhc2hSZXBvcnRBcHBs
aWNhdGlvblNwZWNpZmljSW5mb3JtYXRpb24pKENGU3RyaW5nUmVmKTsKIGV4dGVybiBOU1VSTCAq
KCp3a0FWQXNzZXRSZXNvbHZlZFVSTCkoQVZBc3NldCopOwogCiBleHRlcm4gTlNDdXJzb3IgKigq
d2tDdXJzb3IpKGNvbnN0IGNoYXIqKTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogICAgIAor
I2lmICFQTEFURk9STShJT1MpCiAjaWYgUExBVEZPUk0oTUFDKQogZXh0ZXJuIE5TQXJyYXkgKigq
d2tTcGVlY2hTeW50aGVzaXNHZXRWb2ljZUlkZW50aWZpZXJzKSh2b2lkKTsKIGV4dGVybiBOU1N0
cmluZyAqKCp3a1NwZWVjaFN5bnRoZXNpc0dldERlZmF1bHRWb2ljZUlkZW50aWZpZXJGb3JMb2Nh
bGUpKE5TTG9jYWxlICopOwpAQCAtMjY2LDYgKzI5NCwxMyBAQCBleHRlcm4gQ0ZUeXBlUmVmICgq
d2tDb3B5QVhUZXh0TWFya2VyUmFuZ2VFbmQpKENGVHlwZVJlZiByYW5nZSk7CiBleHRlcm4gQ0ZU
eXBlUmVmICgqd2tDcmVhdGVBWFRleHRNYXJrZXIpKGNvbnN0IHZvaWQgKmJ5dGVzLCBzaXplX3Qg
bGVuKTsKIGV4dGVybiBCT09MICgqd2tHZXRCeXRlc0Zyb21BWFRleHRNYXJrZXIpKENGVHlwZVJl
ZiB0ZXh0TWFya2VyLCB2b2lkICpieXRlcywgc2l6ZV90IGxlbmd0aCk7CiBleHRlcm4gQVhVSUVs
ZW1lbnRSZWYgKCp3a0NyZWF0ZUFYVUlFbGVtZW50UmVmKShpZCBlbGVtZW50KTsKKyNlbmRpZiAv
LyAhUExBVEZPUk0oSU9TKQorCisjaWYgUExBVEZPUk0oSU9TKQorZXh0ZXJuIENHU2l6ZSAoKndr
R2V0Vmlld3BvcnRTY3JlZW5TaXplKSh2b2lkKTsKK2V4dGVybiB2b2lkICgqd2tTZXRMYXllckNv
bnRlbnRzU2NhbGUpKENBTGF5ZXIgKik7CitleHRlcm4gZmxvYXQgKCp3a0dldFNjcmVlblNjYWxl
RmFjdG9yKSh2b2lkKTsKKyNlbmRpZgogCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGVVJMU3Rv
cmFnZVNlc3Npb24qIENGVVJMU3RvcmFnZVNlc3Npb25SZWY7CiBleHRlcm4gQ0ZVUkxTdG9yYWdl
U2Vzc2lvblJlZiAoKndrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKShDRlN0cmluZ1JlZik7
CkBAIC0yOTcsMTcgKzMzMiwyMSBAQCBleHRlcm4gQ0ZBcnJheVJlZiAoKndrQ0ZVUkxSZXF1ZXN0
Q29weUhUVFBSZXF1ZXN0Qm9keVBhcnRzKShDRlVSTFJlcXVlc3RSZWYpOwogZXh0ZXJuIHZvaWQg
KCp3a0NGVVJMUmVxdWVzdFNldEhUVFBSZXF1ZXN0Qm9keVBhcnRzKShDRk11dGFibGVVUkxSZXF1
ZXN0UmVmLCBDRkFycmF5UmVmIGJvZHlQYXJ0cyk7CiBleHRlcm4gdm9pZCAoKndrU2V0UmVxdWVz
dFN0b3JhZ2VTZXNzaW9uKShDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmLCBDRk11dGFibGVVUkxSZXF1
ZXN0UmVmKTsKICNlbmRpZgorI2lmICFQTEFURk9STShJT1MpCiBleHRlcm4gdm9pZCAoKndrU2V0
TWV0YWRhdGFVUkwpKE5TU3RyaW5nICp1cmxTdHJpbmcsIE5TU3RyaW5nICpyZWZlcnJlciwgTlNT
dHJpbmcgKnBhdGgpOworI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2ltcG9ydCA8ZGlz
cGF0Y2gvZGlzcGF0Y2guaD4KIAogZXh0ZXJuIGRpc3BhdGNoX3NvdXJjZV90ICgqd2tDcmVhdGVW
TVByZXNzdXJlRGlzcGF0Y2hPbk1haW5RdWV1ZSkodm9pZCk7CisjZW5kaWYKIAotI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmICFQTEFURk9STShJT1MpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogZXh0ZXJuIGRpc3BhdGNo
X3NvdXJjZV90ICgqd2tDcmVhdGVNZW1vcnlTdGF0dXNQcmVzc3VyZUNyaXRpY2FsRGlzcGF0Y2hP
bk1haW5RdWV1ZSkodm9pZCk7CiAjZW5kaWYKICAgICAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwODAKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKIGV4dGVybiBib29sICgqd2tFeGVjdXRhYmxlV2Fz
TGlua2VkT25PckJlZm9yZUxpb24pKHZvaWQpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJGb250Q2FjaGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2ViRm9udENhY2hlLm1tCmluZGV4IGU0MDc1M2U1OTQzYjNjYTE3MzA3NTU0
ZTIxZDE4Mjc3Mzg4MmZkZTMuLjhjODI2MGIwMmIyYjA5OGI5ZWRkZWJlMGFlYjEzNTJjMWY0ZWUw
OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJGb250Q2FjaGUu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkZvbnRDYWNoZS5tbQpAQCAt
Mjg3LDEyICsyODcsMTAgQEAgc3RhdGljIGlubGluZSBGb250VHJhaXRzTWFzayB0b1RyYWl0c01h
c2soTlNGb250VHJhaXRNYXNrIGFwcEtpdFRyYWl0cywgTlNJbnRlZ2UKICAgICByZXR1cm4gW3Nl
bGYgaW50ZXJuYWxGb250V2l0aEZhbWlseTpkZXNpcmVkRmFtaWx5IHRyYWl0czpkZXNpcmVkVHJh
aXRzIHdlaWdodDpkZXNpcmVkV2VpZ2h0IHNpemU6c2l6ZV07CiB9CiAKLSNpZiAhUExBVEZPUk0o
SU9TKQogKyAoTlNGb250ICopZm9udFdpdGhGYW1pbHk6KE5TU3RyaW5nICopZGVzaXJlZEZhbWls
eSB0cmFpdHM6KE5TRm9udFRyYWl0TWFzaylkZXNpcmVkVHJhaXRzIHNpemU6KGZsb2F0KXNpemUK
IHsKICAgICBpbnQgZGVzaXJlZFdlaWdodCA9IChkZXNpcmVkVHJhaXRzICYgTlNCb2xkRm9udE1h
c2spID8gOSA6IDU7CiAgICAgcmV0dXJuIFtzZWxmIGZvbnRXaXRoRmFtaWx5OmRlc2lyZWRGYW1p
bHkgdHJhaXRzOmRlc2lyZWRUcmFpdHMgd2VpZ2h0OmRlc2lyZWRXZWlnaHQgc2l6ZTpzaXplXTsK
IH0KLSNlbmRpZgogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZWdpc3RyeS5jcHAKaW5kZXggNWFiMDQyZjM1NzUzMjQ4YTRmMjYzZjYwMTRlYmJmNTk2
YzY0NDMxMS4uNGE2MWRmNGM5ODg1ZGE3YzBhY2M4NjRiMDU2OTM3MWEyOTU3YjcwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmNwcApAQCAt
MzMsNiArMzMsMTAgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNv
cmVUaHJlYWQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEJsb2JSZWdpc3Ry
eSYgYmxvYlJlZ2lzdHJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCmluZGV4IDZiYjVjYWU1YmFiNGJiMDcyZjY1NmE5ODNi
ZGViMDQwYTY4ODQ5MjMuLjIzMWFmNzhhYWMzYmFlMjM1NjBlMzliYWExYjA3Yzg5NjMwYTQ0YTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0
cnlJbXBsLmNwcApAQCAtNDMsNiArNDMsMTAgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNp
bmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBCbG9iUmVnaXN0cnlJbXBsOjp+QmxvYlJlZ2lzdHJ5SW1wbCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5oCmluZGV4IDFhNWE0N2U1MjlmNzYzOGM5MTUz
YzhmYzcyYzE4M2MzYTVjYTRjNDQuLjIxNjZiOWJmYTk3MzU2MDUyMmM4MmU2NjM1MDc5OWVlYjU4
OTFlMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVu
dGlhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5o
CkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAot
I2RlZmluZSBDRVJUSUZJQ0FURV9DUkVERU5USUFMU19TVVBQT1JURUQgUExBVEZPUk0oTUFDKQor
I2RlZmluZSBDRVJUSUZJQ0FURV9DUkVERU5USUFMU19TVVBQT1JURUQgKFBMQVRGT1JNKElPUykg
fHwgUExBVEZPUk0oTUFDKSkKIAogI2lmIENFUlRJRklDQVRFX0NSRURFTlRJQUxTX1NVUFBPUlRF
RAogI2luY2x1ZGUgPFNlY3VyaXR5L1NlY0Jhc2UuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKaW5kZXggOTU5NTcyNDg3
ZTk5OTM5MWZlNWMwYTNhNzNkN2RmNTVmMjZjODllZS4uZDg2ZmQ4MWM0YzA2YjE3YTM2YjM3YmVm
NjNjNmM5YmExMjQyODgxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKQEAgLTM2LDYgKzM2LDEwIEBACiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKKyNp
ZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdHlwZWRlZiBIYXNoTWFwPFByb3RlY3Rpb25TcGFjZSwgQ3Jl
ZGVudGlhbD4gUHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwOwpAQCAtOTMsNiArOTcsMTEg
QEAgdm9pZCBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRp
YWwsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYKICAgICBBU1NFUlQocHJvdGVjdGlvblNwYWNlLmlz
UHJveHkoKSB8fCB1cmwuaXNWYWxpZCgpKTsKIAogICAgIHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVu
dGlhbE1hcCgpLnNldChwcm90ZWN0aW9uU3BhY2UsIGNyZWRlbnRpYWwpOworCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIHNhdmVUb1BlcnNpc3RlbnRTdG9yYWdlKHByb3RlY3Rpb25TcGFjZSwgY3Jl
ZGVudGlhbCk7CisjZW5kaWYKKwogICAgIGlmICghcHJvdGVjdGlvblNwYWNlLmlzUHJveHkoKSkg
ewogICAgICAgICBvcmlnaW5zV2l0aENyZWRlbnRpYWxzKCkuYWRkKG9yaWdpblN0cmluZ0Zyb21V
UkwodXJsKSk7CiAKQEAgLTE2Myw2ICsxNzIsMTUgQEAgQ3JlZGVudGlhbCBDcmVkZW50aWFsU3Rv
cmFnZTo6Z2V0KGNvbnN0IFVSTCYgdXJsKQogICAgIHJldHVybiBwcm90ZWN0aW9uU3BhY2VUb0Ny
ZWRlbnRpYWxNYXAoKS5nZXQoaXRlci0+dmFsdWUpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQor
dm9pZCBDcmVkZW50aWFsU3RvcmFnZTo6Y2xlYXJDcmVkZW50aWFscygpCit7CisgICAgcGF0aFRv
RGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcCgpLmNsZWFyKCk7CisgICAgb3JpZ2luc1dpdGhDcmVk
ZW50aWFscygpLmNsZWFyKCk7CisgICAgcHJvdGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCku
Y2xlYXIoKTsKK30KKyNlbmRpZgorCiB2b2lkIENyZWRlbnRpYWxTdG9yYWdlOjpzZXRQcml2YXRl
TW9kZShib29sIG1vZGUpCiB7CiAgICAgaWYgKCFtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5oCmluZGV4IGIzYmQxZmQ3ODM5
MmEyNjdlMzA5ZmZjY2NmNDdhMjFhZTA2ZTg5OWUuLjNjOGM3NDg3NTIwMjA1OWYxNzFkMWQyNGFi
Y2FkM2ZjOTVkODU1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQ3JlZGVudGlhbFN0b3JhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmgKQEAgLTQyLDYgKzQyLDExIEBAIHB1YmxpYzoKICAgICAv
LyBPUyBwZXJzaXN0ZW50IHN0b3JhZ2UuCiAgICAgc3RhdGljIENyZWRlbnRpYWwgZ2V0RnJvbVBl
cnNpc3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpOwogCisjaWYgUExBVEZPUk0o
SU9TKQorICAgIHN0YXRpYyB2b2lkIHNhdmVUb1BlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFByb3Rl
Y3Rpb25TcGFjZSYsIGNvbnN0IENyZWRlbnRpYWwmKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhckNy
ZWRlbnRpYWxzKCk7CisjZW5kaWYKKwogICAgIC8vIFRoZXNlIG1ldGhvZHMgd29yayBmb3IgYXV0
aGVudGljYXRpb24gc2NoZW1lcyB0aGF0IHN1cHBvcnQgc2VuZGluZyBjcmVkZW50aWFscyB3aXRo
b3V0IHdhaXRpbmcgZm9yIGEgcmVxdWVzdC4gRS5nLiwgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGlj
YXRpb24gc2NoZW1lCiAgICAgLy8gYSBjbGllbnQgc2hvdWxkIGFzc3VtZSB0aGF0IGFsbCBwYXRo
cyBhdCBvciBkZWVwZXIgdGhhbiB0aGUgZGVwdGggb2YgYSBrbm93biBwcm90ZWN0ZWQgcmVzb3Vy
Y2Ugc2hhcmUgYXJlIHdpdGhpbiB0aGUgc2FtZSBwcm90ZWN0aW9uIHNwYWNlLgogICAgIHN0YXRp
YyBib29sIHNldChjb25zdCBDcmVkZW50aWFsJiwgY29uc3QgVVJMJik7IC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgVVJMIGNvcnJlc3BvbmRzIHRvIGEga25vd24gcHJvdGVjdGlvbiBzcGFjZSwgc28g
Y3JlZGVudGlhbHMgY291bGQgYmUgdXBkYXRlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuaAppbmRleCAzMzI0N2M5N2Zj
OTAyOTFlMTY1YzA0NWEzNmE2ZjYzMWFhYmYzOWE5Li5mOWY2MWQ1Y2UzMzFjOGFlNDY5MjAxMDQ2
ZGRjMTgwNzJkZGE0OTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgUExB
VEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlICJUaW1lci5oIgpAQCAtNjIsNiArNjIsMTAg
QEAgcHVibGljOgogICAgIHZvaWQgYWRkTmV0d29ya1N0YXRlQ2hhbmdlTGlzdGVuZXIoTmV0d29y
a1N0YXRlQ2hhbmdlTGlzdGVuZXIpOwogCiAgICAgYm9vbCBvbkxpbmUoKSBjb25zdCB7IHJldHVy
biBtX2lzT25MaW5lOyB9CisgICAgCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgc2V0SXNP
bkxpbmUoYm9vbCk7CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgdm9p
ZCBuZXR3b3JrU3RhdGVDaGFuZ2UoYm9vbCBvbmxpbmUpOwpAQCAtNzQsNyArNzgsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgbm90aWZ5TmV0d29ya1N0YXRlQ2hhbmdlKCk7CiAgICAgdm9pZCB1cGRh
dGVTdGF0ZSgpOwogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBM
QVRGT1JNKElPUykKICAgICB2b2lkIG5ldHdvcmtTdGF0ZUNoYW5nZVRpbWVyRmlyZWQoVGltZXI8
TmV0d29ya1N0YXRlTm90aWZpZXI+Kik7CiAKICAgICBzdGF0aWMgdm9pZCBkeW5hbWljU3RvcmVD
YWxsYmFjayhTQ0R5bmFtaWNTdG9yZVJlZiwgQ0ZBcnJheVJlZiBjaGFuZ2VkS2V5cywgdm9pZCAq
aW5mbyk7IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlLmNwcAppbmRleCAwYzg1MmRjMmRjNmM1MGNhYTZiYjVmY2E3YTJlMDU5YTIxN2IzZDNh
Li45M2UwZjlhNGNiMGMzMDgxMmZjOTAyMzJmMmYyOGJkMTQ2ZmU5N2ZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcApAQCAtMzUs
NiArMzUsMTAgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGJvb2wgc2hv
dWxkRm9yY2VDb250ZW50U25pZmZpbmc7CkBAIC00Miw3ICs0NiwxMSBAQCBzdGF0aWMgYm9vbCBz
aG91bGRGb3JjZUNvbnRlbnRTbmlmZmluZzsKIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcs
IFJlc291cmNlSGFuZGxlOjpCdWlsdGluQ29uc3RydWN0b3I+IEJ1aWx0aW5SZXNvdXJjZUhhbmRs
ZUNvbnN0cnVjdG9yTWFwOwogc3RhdGljIEJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9y
TWFwJiBidWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCgpCiB7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIEFTU0VSVChXZWJUaHJlYWRJc0xvY2tlZE9yRGlzYWJsZWQoKSk7CisjZWxz
ZQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisjZW5kaWYKICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwLCBtYXAsICgpKTsKICAg
ICByZXR1cm4gbWFwOwogfQpAQCAtMTUxLDIzICsxNTksMjMgQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6c2V0Q2xpZW50KFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQpCiAvLyBSZXNvdXJjZUhh
bmRsZSBuZXZlciB1c2VzIGFzeW5jIGNsaWVudCBjYWxscyBvbiB0aGVzZSBwbGF0Zm9ybXMgeWV0
Lgogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JikKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZSgpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVTaG91bGRVc2VDcmVkZW50
aWFsU3RvcmFnZShib29sKQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNL
KQogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlKGJvb2wpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAppbmRleCBlZjQy
MTkzNDM1NDc5ZTdiOWRjYWI0NDkzYTlkNGM4ZDUwODI2MmYxLi4wZWQ4Mjg5OTNhMWRiNjkyNmE0
MWZiMmMwZTVhMWU1OWU0YjYyM2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKQEAgLTM4LDYgKzM4LDEwIEBA
IGRvdWJsZSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzX2RlZmF1bHRUaW1lb3V0SW50ZXJ2YWwgPSBJ
TlRfTUFYOwogZG91YmxlIFJlc291cmNlUmVxdWVzdEJhc2U6OnNfZGVmYXVsdFRpbWVvdXRJbnRl
cnZhbCA9IDA7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKK2Jvb2wgUmVzb3VyY2VSZXF1
ZXN0QmFzZTo6c19kZWZhdWx0QWxsb3dDb29raWVzID0gdHJ1ZTsKKyNlbmRpZgorCiBpbmxpbmUg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBSZXNvdXJjZVJlcXVlc3RCYXNlOjphc1Jlc291cmNlUmVx
dWVzdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBSZXNvdXJjZVJl
cXVlc3QqPih0aGlzKTsKQEAgLTUyOCw0ICs1MzIsMTYgQEAgdW5zaWduZWQgaW5pdGlhbGl6ZU1h
eGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpCiB9CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKElPUykKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RGVmYXVsdEFsbG93Q29va2ll
cyhib29sIGFsbG93Q29va2llcykKK3sKKyAgICBzX2RlZmF1bHRBbGxvd0Nvb2tpZXMgPSBhbGxv
d0Nvb2tpZXM7Cit9CisKK2Jvb2wgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZGVmYXVsdEFsbG93Q29v
a2llcygpCit7CisgICAgcmV0dXJuIHNfZGVmYXVsdEFsbG93Q29va2llczsKK30KKyNlbmRpZgor
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVxdWVzdEJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VS
ZXF1ZXN0QmFzZS5oCmluZGV4IDE0MDU3Y2IyN2Y0ZjgyM2U1OWFiYzQyYTg4MGY4NDAxYzVlNWEw
YjkuLmFhMDYwMTk1M2Q4MDg0NTVkNDRiNzA1YjY5ZmJhYjUwZjAwYTYwNGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5o
CkBAIC0xNDIsNiArMTQyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGlj
IGRvdWJsZSBkZWZhdWx0VGltZW91dEludGVydmFsKCk7IC8vIE1heSByZXR1cm4gMCB3aGVuIHVz
aW5nIHBsYXRmb3JtIGRlZmF1bHQuCiAgICAgICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRUaW1l
b3V0SW50ZXJ2YWwoZG91YmxlKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgc3RhdGlj
IGJvb2wgZGVmYXVsdEFsbG93Q29va2llcygpOworICAgICAgICBzdGF0aWMgdm9pZCBzZXREZWZh
dWx0QWxsb3dDb29raWVzKGJvb2wpOworI2VuZGlmCisKICAgICAgICAgc3RhdGljIGJvb2wgY29t
cGFyZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAog
ICAgIHByb3RlY3RlZDoKQEAgLTE2Myw3ICsxNjgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAgICAgLCBtX2NhY2hlUG9saWN5KHBvbGljeSkKICAgICAgICAgICAgICwgbV90aW1l
b3V0SW50ZXJ2YWwoc19kZWZhdWx0VGltZW91dEludGVydmFsKQogICAgICAgICAgICAgLCBtX2h0
dHBNZXRob2QoQVNDSUlMaXRlcmFsKCJHRVQiKSkKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAg
ICAgICAgLCBtX2FsbG93Q29va2llcyh0cnVlKQorI2Vsc2UKKyAgICAgICAgICAgICwgbV9hbGxv
d0Nvb2tpZXMoUmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZGVmYXVsdEFsbG93Q29va2llcygpKQorI2Vu
ZGlmCiAgICAgICAgICAgICAsIG1fcmVzb3VyY2VSZXF1ZXN0VXBkYXRlZCh0cnVlKQogICAgICAg
ICAgICAgLCBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1f
cmVzb3VyY2VSZXF1ZXN0Qm9keVVwZGF0ZWQodHJ1ZSkKQEAgLTIwNCw2ICsyMTMsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgYXNSZXNvdXJj
ZVJlcXVlc3QoKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgZG91YmxlIHNfZGVmYXVsdFRpbWVv
dXRJbnRlcnZhbDsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHN0YXRpYyBib29sIHNfZGVm
YXVsdEFsbG93Q29va2llczsKKyNlbmRpZgogICAgIH07CiAKICAgICBib29sIGVxdWFsSWdub3Jp
bmdIZWFkZXJGaWVsZHMoY29uc3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYsIGNvbnN0IFJlc291cmNl
UmVxdWVzdEJhc2UmKTsKQEAgLTIzMCw3ICsyNDIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgfTsKICAgICAKICAgICB1bnNpZ25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9u
Q291bnRQZXJIb3N0KCk7Ci0KKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBpbml0aWFsaXpl
SFRUUENvbm5lY3Rpb25TZXR0aW5nc09uU3RhcnR1cCgpOworI2VuZGlmCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBSZXNvdXJjZVJlcXVlc3RCYXNlX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ3JlZGVudGlhbFN0b3JhZ2VDRk5l
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NyZWRlbnRpYWxTdG9y
YWdlQ0ZOZXQuY3BwCmluZGV4IGMzNGY2ZjY2NWNhNzQ1MjMyOTliOTFjMTc0MTkzMGU2NzE0YmZj
YjkuLmM3MjUyYzM4NTQwM2U2NWM1NTA3ZTQ5ZTUyNWRkMzAzYWYxYjNjYjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ3JlZGVudGlhbFN0b3JhZ2VDRk5l
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DcmVkZW50aWFs
U3RvcmFnZUNGTmV0LmNwcApAQCAtMzksNiArMzksMTAgQEAKICNpbmNsdWRlIDxXZWJLaXRTeXN0
ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKElPUykKKyNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxDcmVkZW50aWFsU3RvcmFnZS5oPgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ3JlZGVudGlhbCBDcmVkZW50aWFsU3Rv
cmFnZTo6Z2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJv
dGVjdGlvblNwYWNlKQpAQCAtNDgsNiArNTIsMjMgQEAgQ3JlZGVudGlhbCBDcmVkZW50aWFsU3Rv
cmFnZTo6Z2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHIK
ICAgICByZXR1cm4gY29yZShjcmVkZW50aWFsQ0YuZ2V0KCkpOwogfQogCisjaWYgUExBVEZPUk0o
SU9TKQordm9pZCBDcmVkZW50aWFsU3RvcmFnZTo6c2F2ZVRvUGVyc2lzdGVudFN0b3JhZ2UoY29u
c3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UsIGNvbnN0IENyZWRlbnRpYWwmIGNy
ZWRlbnRpYWwpCit7CisgICAgUmV0YWluUHRyPENGVVJMQ3JlZGVudGlhbFN0b3JhZ2VSZWY+IHN0
b3JhZ2VDRiA9IGFkb3B0Q0YoQ0ZVUkxDcmVkZW50aWFsU3RvcmFnZUNyZWF0ZSgwKSk7CisgICAg
UmV0YWluUHRyPENGVVJMUHJvdGVjdGlvblNwYWNlUmVmPiBwcm90ZWN0aW9uU3BhY2VDRiA9IGFk
b3B0Q0YoY3JlYXRlQ0YocHJvdGVjdGlvblNwYWNlKSk7CisKKyAgICBpZiAoY3JlZGVudGlhbC5w
ZXJzaXN0ZW5jZSgpID09IENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpIHsKKyAgICAgICAgQ3Jl
ZGVudGlhbCBzZXNzaW9uQ3JlZGVudGlhbChjcmVkZW50aWFsLCBDcmVkZW50aWFsUGVyc2lzdGVu
Y2VGb3JTZXNzaW9uKTsKKyAgICAgICAgUmV0YWluUHRyPENGVVJMQ3JlZGVudGlhbFJlZj4gc2Vz
c2lvbkNyZWRlbnRpYWxDRiA9IGFkb3B0Q0YoY3JlYXRlQ0Yoc2Vzc2lvbkNyZWRlbnRpYWwpKTsK
KyAgICAgICAgQ0ZVUkxDcmVkZW50aWFsU3RvcmFnZVNldERlZmF1bHRDcmVkZW50aWFsRm9yUHJv
dGVjdGlvblNwYWNlKHN0b3JhZ2VDRi5nZXQoKSwgc2Vzc2lvbkNyZWRlbnRpYWxDRi5nZXQoKSwg
cHJvdGVjdGlvblNwYWNlQ0YuZ2V0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJldGFpblB0
cjxDRlVSTENyZWRlbnRpYWxSZWY+IGNyZWRlbnRpYWxDRiA9IGFkb3B0Q0YoY3JlYXRlQ0YoY3Jl
ZGVudGlhbCkpOworICAgICAgICBDRlVSTENyZWRlbnRpYWxTdG9yYWdlU2V0RGVmYXVsdENyZWRl
bnRpYWxGb3JQcm90ZWN0aW9uU3BhY2Uoc3RvcmFnZUNGLmdldCgpLCBjcmVkZW50aWFsQ0YuZ2V0
KCksIHByb3RlY3Rpb25TcGFjZUNGLmdldCgpKTsKKyAgICB9Cit9CisjZW5kaWYKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKENGTkVUV09SSykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRE5TQ0ZOZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5jcHAKaW5kZXggMDc1YWE2YmNh
NWUyNTY0N2FlYmU5ZjEyZDY5ZDZhYjZjODNlNDZjMy4uZTNmMWMyYjkxMmM4ZWM1YmRkYjY4MThk
ZTRhNzUyZjZiMTk1NTFiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9ETlNDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9ETlNDRk5ldC5jcHAKQEAgLTM3LDYgKzM3LDEwIEBACiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAorI2lmIFBMQVRG
T1JNKElPUykKKyNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZOZXR3b3JrLmg+CisjZW5kaWYKKwogI2lm
IFBMQVRGT1JNKFdJTikKICNpbmNsdWRlICJMb2FkZXJSdW5Mb29wQ0YuaCIKICNpbmNsdWRlIDxD
Rk5ldHdvcmsvQ0ZOZXR3b3JrLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL1Byb3h5U2VydmVyQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jZi9Qcm94eVNlcnZlckNGTmV0LmNwcAppbmRleCA3MTExOGQyZWViMWZmOTUy
YTE1OTIzMGMwYmM0Mzg2MmQ5NDRhNmZhLi45ZjE0NzEyNjk3ZTQ5ZWI2NTVkNjhhNjhmMmQ1NzQz
YmMxOTJlNjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Byb3h5U2VydmVyQ0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvUHJveHlTZXJ2ZXJDRk5ldC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0jaWYgUExB
VEZPUk0oV0lOKQorI2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUg
PENGTmV0d29yay9DRk5ldHdvcmsuaD4KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaAppbmRleCA2Y2YyNmFiNGMz
ZWY4NGEwNGNlY2U4ZmFkZTk4ZDdkOGNhMjM1ZDcyLi4zYjg5ZjNiNDQ2NmRjMDViNTk4YmRkOGQ2
MTIxZGM4MzhjNWI2ZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0LmgKQEAgLTQzLDIyICs0MywzNCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgU3Ry
aW5nJiB1cmwpIAogICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKFVSTChQYXJzZWRV
UkxTdHJpbmcsIHVybCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisjaWYgUExBVEZPUk0oSU9T
KQorICAgICAgICAgICAgLCBtX21haW5SZXNvdXJjZVJlcXVlc3QoZmFsc2UpCisjZW5kaWYKICAg
ICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFVSTCYg
dXJsKSAKICAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSh1cmwsIFVzZVByb3RvY29s
Q2FjaGVQb2xpY3kpCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgLCBtX21haW5SZXNv
dXJjZVJlcXVlc3QoZmFsc2UpCisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAg
ICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVy
LCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBwb2xpY3kgPSBVc2VQcm90b2NvbENhY2hlUG9s
aWN5KSAKICAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSh1cmwsIHBvbGljeSkKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICAsIG1fbWFpblJlc291cmNlUmVxdWVzdChmYWxz
ZSkKKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgICAgICBzZXRIVFRQUmVmZXJyZXIocmVmZXJy
ZXIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSZXNvdXJjZVJlcXVlc3QoKQogICAg
ICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKFVSTCgpLCBVc2VQcm90b2NvbENhY2hlUG9s
aWN5KQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgICwgbV9tYWluUmVzb3VyY2VSZXF1
ZXN0KGZhbHNlKQorI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKQEAgLTcw
LDYgKzgyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFJlc291cmNlUmVxdWVz
dChDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1ZXN0KQogICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVl
c3RCYXNlKCkKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICAsIG1fbWFpblJlc291cmNl
UmVxdWVzdChmYWxzZSkKKyNlbmRpZgogICAgICAgICAgICAgLCBtX2NmUmVxdWVzdChjZlJlcXVl
c3QpCiAgICAgICAgIHsKICNpZiBQTEFURk9STShNQUMpCkBAIC03OSw2ICs5NCw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICNlbHNlCiAgICAgICAgIFJlc291cmNlUmVxdWVzdChOU1VSTFJlcXVl
c3QgKm5zUmVxdWVzdCkKICAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSgpCisjaWYg
UExBVEZPUk0oSU9TKQorICAgICAgICAgICAgLCBtX21haW5SZXNvdXJjZVJlcXVlc3QoZmFsc2Up
CisjZW5kaWYKICAgICAgICAgICAgICwgbV9uc1JlcXVlc3QobnNSZXF1ZXN0KQogICAgICAgICB7
CiAgICAgICAgIH0KQEAgLTEwOSw2ICsxMjcsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBzdGF0aWMgYm9vbCB1c2VRdWlja0xvb2tSZXNvdXJjZUNhY2hpbmdRdWlya3MoKTsKICNl
bmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICB2b2lkIHNldE1haW5SZXNvdXJjZVJl
cXVlc3QoYm9vbCBpc01haW5SZXNvdXJjZVJlcXVlc3QpIGNvbnN0IHsgbV9tYWluUmVzb3VyY2VS
ZXF1ZXN0ID0gaXNNYWluUmVzb3VyY2VSZXF1ZXN0OyB9CisgICAgICAgIGJvb2wgaXNNYWluUmVz
b3VyY2VSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9tYWluUmVzb3VyY2VSZXF1ZXN0OyB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBtdXRhYmxlIGJvb2wgbV9tYWluUmVzb3VyY2VSZXF1ZXN0
OworI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcAppbmRleCA2OGZiYmZhZjliMjQ3ZWI3
MWM2M2FmY2Q2ZDA1ZGMwN2ZkOTVlMzg1Li40YTI2MjNmYzY2NWM4ZTRiNTJjY2MxNDNiY2U2NTZh
ZDM5NjE4OGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcApAQCAtMzYsNiArMzYsOSBAQAogI2lu
Y2x1ZGUgIkZvcm1EYXRhU3RyZWFtQ0ZOZXQuaCIKICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxS
ZXF1ZXN0UHJpdi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpZiBQTEFURk9S
TShJT1MpCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29ya0Nvbm5lY3Rpb25DYWNoZVByaXYu
aD4KKyNlbmRpZgogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCkBAIC01MCw3ICs1MywxMSBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShJT1MpCitib29sIFJlc291
cmNlUmVxdWVzdDo6c19odHRwUGlwZWxpbmluZ0VuYWJsZWQgPSB0cnVlOworI2Vsc2UKIGJvb2wg
UmVzb3VyY2VSZXF1ZXN0OjpzX2h0dHBQaXBlbGluaW5nRW5hYmxlZCA9IGZhbHNlOworI2VuZGlm
CiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogCkBAIC0yMjIsMTAgKzIyOSwzMyBAQCB2b2lkIFJlc291
cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybUhUVFBCb2R5KCkKICNlbmRpZgogfQogCit2b2lk
IFJlc291cmNlUmVxdWVzdDo6dXBkYXRlRnJvbURlbGVnYXRlUHJlc2VydmluZ09sZEhUVFBCb2R5
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgZGVsZWdhdGVQcm92aWRlZFJlcXVlc3QpCit7CisgICAg
UmVmUHRyPEZvcm1EYXRhPiBvbGRIVFRQQm9keSA9IGh0dHBCb2R5KCk7CisKKyAgICAqdGhpcyA9
IGRlbGVnYXRlUHJvdmlkZWRSZXF1ZXN0OworICAgIHNldEhUVFBCb2R5KG9sZEhUVFBCb2R5LnJl
bGVhc2UoKSk7Cit9CisKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlUmVx
dWVzdCgpCiB7CiAgICAgaWYgKCFtX2NmUmVxdWVzdCkgeworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzk5MTM1MjY+CisgICAgICAgIC8vIFRoaXMgaXMgYSBo
YWNrIHRvIG1pbWljIHRoZSBzdWJ0bGUgYmVoYXZpb3VyIG9mIHRoZSBGb3VuZGF0aW9uIGJhc2Vk
IFJlc291cmNlUmVxdWVzdAorICAgICAgICAvLyBjb2RlLiBUaGF0IGNvZGUgZG9lcyBub3QgcmVz
ZXQgbV9odHRwTWV0aG9kIGlmIHRoZSBOU1VSTFJlcXVlc3QgaXMgbmlsLiBJIGZpbGVkCisgICAg
ICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzMzY+IHRv
IHRyYWNrIHRoYXQuCisgICAgICAgIC8vIEFub3RoZXIgcmVsYXRlZCBidWcgaXMgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM1MD4uIEZpeGluZyB0aGF0CisgICAg
ICAgIC8vIHdvdWxkLCBpZGVhbGx5LCBhbGxvdyB1cyB0byBub3QgaGF2ZSB0aGlzIGhhY2suIEJ1
dCB1bmZvcnR1bmF0ZWx5IHRoYXQgY2F1c2VkIGxheW91dCB0ZXN0CisgICAgICAgIC8vIGZhaWx1
cmVzLgorICAgICAgICAvLyBSZW1vdmFsIG9mIHRoaXMgaGFjayBpcyB0cmFja2VkIGJ5IDxyZGFy
Oi8vcHJvYmxlbS85OTcwNDk5Pi4KKworICAgICAgICBTdHJpbmcgaHR0cE1ldGhvZCA9IG1faHR0
cE1ldGhvZDsKICAgICAgICAgKnRoaXMgPSBSZXNvdXJjZVJlcXVlc3QoKTsKKyAgICAgICAgbV9o
dHRwTWV0aG9kID0gaHR0cE1ldGhvZDsKKyNlbHNlCisgICAgICAgICp0aGlzID0gUmVzb3VyY2VS
ZXF1ZXN0KCk7CisjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzA3LDggKzMz
NywxMCBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6c2V0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9y
YWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbikKICNpZiBQTEFURk9STShNQUMpCiB2b2lkIFJl
c291cmNlUmVxdWVzdDo6YXBwbHlXZWJBcmNoaXZlSGFja0Zvck1haWwoKQogeworI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgLy8gSGFjayBiZWNhdXNlIE1haWwgY2hlY2tzIGZvciB0aGlzIHByb3Bl
cnR5IHRvIGRldGVjdCBkYXRhIC8gYXJjaGl2ZSBsb2FkcwogICAgIF9DRlVSTFJlcXVlc3RTZXRQ
cm90b2NvbFByb3BlcnR5KGNmVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSwgQ0ZTVFIo
IldlYkRhdGFSZXF1ZXN0IiksIENGU1RSKCIiKSk7CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0z
ODMsNSArNDE1LDIxIEBAIHVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25D
b3VudFBlckhvc3QoKQogCiAgICAgcmV0dXJuIG1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVy
SG9zdDsKIH0KKyAgICAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIGluaXRpYWxpemVIVFRQQ29u
bmVjdGlvblNldHRpbmdzT25TdGFydHVwKCkKK3sKKyAgICAvLyBUaGlzIG5lZWQgdG8gYmUgY2Fs
bGVkIGZyb20gV2ViS2l0SW5pdGlhbGl6ZSBzbyB0aGUgY2FsbHMgaGFwcGVuIGVhcmx5IGVub3Vn
aCwgYmVmb3JlIGFueSByZXF1ZXN0cyBhcmUgbWFkZS4gPHJkYXI6Ly9wcm9ibGVtLzk2OTE4NzE+
CisgICAgLy8gRGVza3RvcCBkb2Vzbid0IGhhdmUgZWFybHkgaW5pdGlhbGl6YXRpb24gc28gaXQg
aXMgbm90IGNsZWFyIGhvdyB0aGlzIHNob3VsZCBiZSBkb25lIHRoZXJlLiBUaGUgQ0ZOZXR3b3Jr
IFNQSSBwcm9iYWJseQorICAgIC8vIG5lZWRzIHRvIGJlY29tZSBtb3JlIGZvcmdpdmluZy4KKyAg
ICAvLyBXZSBjYW4ndCByZWFkIHNldHRpbmdzIGhlcmUgYXMgdGhpcyBpcyBjYWxsZWQgdG9vIGVh
cmx5IGZvciB0aGF0LiBBbGwgdmFsdWVzIG5lZWQgdG8gYmUgY29uc3RhbnRzLgorICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBwcmVmZXJyZWRDb25uZWN0aW9uQ291bnQgPSA2OworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBmYXN0TGFuZUNvbm5lY3Rpb25Db3VudCA9IDE7CisgICAgd2tJbml0
aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KHByZWZlcnJlZENvbm5lY3Rp
b25Db3VudCk7CisgICAgd2tTZXRIVFRQUGlwZWxpbmluZ01heGltdW1Qcmlvcml0eShSZXNvdXJj
ZUxvYWRQcmlvcml0eUhpZ2hlc3QpOworICAgIHdrU2V0SFRUUFBpcGVsaW5pbmdNaW5pbXVtRmFz
dExhbmVQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bSk7CisgICAgX0NGTmV0d29y
a0hUVFBDb25uZWN0aW9uQ2FjaGVTZXRMaW1pdChrSFRUUE51bUZhc3RMYW5lcywgZmFzdExhbmVD
b25uZWN0aW9uQ291bnQpOworfQorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFt
SGFuZGxlQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2Nr
ZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAKaW5kZXggZmMyZDI4ZDcyNDE4M2Y1NTRhZWM3NzI3N2U0
MWEzMjA1YTkwMjlmZi4uYjVlYWM0NWE3YTZiYmRjODA4YTg4NDEwODAyMWYxNDNjN2Q3MWE1YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJl
YW1IYW5kbGVDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAKQEAgLTQxLDYgKzQxLDEwIEBACiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAor
I2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZOZXR3b3JrLmg+CisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlICJMb2FkZXJSdW5Mb29wQ0YuaCIKICNp
bmNsdWRlIDxDRk5ldHdvcmsvQ0ZOZXR3b3JrLmg+CkBAIC01NzEsNyArNTc1LDcgQEAgdm9pZCBT
b2NrZXRTdHJlYW1IYW5kbGU6OnJlcG9ydEVycm9yVG9DbGllbnQoQ0ZFcnJvclJlZiBlcnJvcikK
ICAgICBDRkluZGV4IGVycm9yQ29kZSA9IENGRXJyb3JHZXRDb2RlKGVycm9yKTsKICAgICBTdHJp
bmcgZGVzY3JpcHRpb247CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAm
JiAhUExBVEZPUk0oSU9TKQogCiAjaWYgQ09NUElMRVIoQ0xBTkcpCiAjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9pb3MvTmV0d29ya1N0YXRlTm90aWZpZXJJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9pb3MvTmV0d29ya1N0YXRlTm90aWZpZXJJT1MuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjll
ZDZhMDg3ODVjZWU4ZGRmNDcwNzBkYmVmMjZhNjFjNDdiODJkMzUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9OZXR3b3JrU3RhdGVOb3RpZmll
cklPUy5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0
YXRlTm90aWZpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOZXR3b3JrU3RhdGVOb3Rp
Zmllcjo6TmV0d29ya1N0YXRlTm90aWZpZXIoKQorICAgIDogbV9pc09uTGluZShmYWxzZSkKK3sK
K30KKwordm9pZCBOZXR3b3JrU3RhdGVOb3RpZmllcjo6c2V0SXNPbkxpbmUoYm9vbCBpc09uTGlu
ZSkKK3sKKyAgICBpZiAobV9pc09uTGluZSA9PSBpc09uTGluZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1faXNPbkxpbmUgPSBpc09uTGluZTsKKyAgICBub3RpZnlOZXR3b3JrU3RhdGVDaGFuZ2Uo
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9p
b3MvUXVpY2tMb29rLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlj
a0xvb2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iZTI3NTZkZjQ1MTgzYTA5NzE0ZjllOWRmOGViNmZlNGEyMjhi
OTBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9p
b3MvUXVpY2tMb29rLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFF1
aWNrTG9va19oCisjZGVmaW5lIFF1aWNrTG9va19oCisKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKwor
I2ltcG9ydCAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5o
PgorI2ltcG9ydCA8d3RmL1Bhc3NPd25QdHIuaD4KKworI2lmZGVmIF9fT0JKQ19fCitAY2xhc3Mg
TlNEYXRhOworQGNsYXNzIE5TRGljdGlvbmFyeTsKK0BjbGFzcyBOU0ZpbGVIYW5kbGU7CitAY2xh
c3MgTlNTZXQ7CitAY2xhc3MgTlNTdHJpbmc7CitAY2xhc3MgTlNVUkw7CitAY2xhc3MgTlNVUkxD
b25uZWN0aW9uOworQGNsYXNzIE5TVVJMUmVzcG9uc2U7CisjZWxzZQorY2xhc3MgTlNEYXRhOwor
Y2xhc3MgTlNEaWN0aW9uYXJ5OworY2xhc3MgTlNGaWxlSGFuZGxlOworY2xhc3MgTlNTZXQ7Citj
bGFzcyBOU1N0cmluZzsKK2NsYXNzIE5TVVJMOworY2xhc3MgTlNVUkxDb25uZWN0aW9uOworY2xh
c3MgTlNVUkxSZXNwb25zZTsKKyNlbmRpZgorCisjaWYgVVNFKENGTkVUV09SSykKK3R5cGVkZWYg
c3RydWN0IF9DRlVSTFJlc3BvbnNlKiBDRlVSTFJlc3BvbnNlUmVmOwordHlwZWRlZiBzdHJ1Y3Qg
X0NGVVJMQ29ubmVjdGlvbiogQ0ZVUkxDb25uZWN0aW9uUmVmOworI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgUmVzb3VyY2VIYW5kbGU7CitjbGFzcyBTeW5jaHJvbm91c1Jl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU7CisKK0NsYXNzIFFMUHJldmlld0Nv
bnZlcnRlckNsYXNzKCk7CitOU1N0cmluZyAqUUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvckZpbGVO
YW1lQW5kTWltZVR5cGUoTlNTdHJpbmcgKmZpbGVOYW1lLCBOU1N0cmluZyAqbWltZVR5cGUpOwor
TlNTdHJpbmcgKlFMVHlwZUNvcHlCZXN0TWltZVR5cGVGb3JVUkxBbmRNaW1lVHlwZShOU1VSTCAq
LCBOU1N0cmluZyAqbWltZVR5cGUpOworCitOU1NldCAqUUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlN
RVR5cGVzU2V0KCk7CisKKy8vIFVzZWQgZm9yIHNldHRpbmcgdGhlIHBlcm1pc3Npb25zIG9uIHRo
ZSBzYXZlZCBRTCBjb250ZW50CitOU0RpY3Rpb25hcnkgKlFMRmlsZUF0dHJpYnV0ZXMoKTsKK05T
RGljdGlvbmFyeSAqUUxEaXJlY3RvcnlBdHRyaWJ1dGVzKCk7CisKK3ZvaWQgYWRkUUxQcmV2aWV3
Q29udmVydGVyV2l0aEZpbGVGb3JVUkwoTlNVUkwgKiwgaWQgY29udmVydGVyLCBOU1N0cmluZyAq
ZmlsZU5hbWUpOworTlNTdHJpbmcgKnFsUHJldmlld0NvbnZlcnRlckZpbGVOYW1lRm9yVVJMKE5T
VVJMICopOworTlNTdHJpbmcgKnFsUHJldmlld0NvbnZlcnRlclVUSUZvclVSTChOU1VSTCAqKTsK
K3ZvaWQgcmVtb3ZlUUxQcmV2aWV3Q29udmVydGVyRm9yVVJMKE5TVVJMICopOworCitQYXNzT3du
UHRyPFJlc291cmNlUmVxdWVzdD4gcmVnaXN0ZXJRTFByZXZpZXdDb252ZXJ0ZXJJZk5lZWRlZChO
U1VSTCAqLCBOU1N0cmluZyAqbWltZVR5cGUsIE5TRGF0YSAqKTsKKworY29uc3QgVVJMIHNhZmVR
TFVSTEZvckRvY3VtZW50VVJMQW5kUmVzb3VyY2VVUkwoY29uc3QgVVJMJiBkb2N1bWVudFVSTCwg
Y29uc3QgU3RyaW5nJiByZXNvdXJjZVVSTCk7CisKK2NvbnN0IGNoYXIqIFFMUHJldmlld1Byb3Rv
Y29sKCk7CisKKworY2xhc3MgUXVpY2tMb29rSGFuZGxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShRdWlja0xvb2tIYW5kbGUpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFF1
aWNrTG9va0hhbmRsZT4gY3JlYXRlKFJlc291cmNlSGFuZGxlKiwgTlNVUkxDb25uZWN0aW9uICos
IE5TVVJMUmVzcG9uc2UgKiwgaWQgZGVsZWdhdGUpOworI2lmIFVTRShDRk5FVFdPUkspCisgICAg
c3RhdGljIFBhc3NPd25QdHI8UXVpY2tMb29rSGFuZGxlPiBjcmVhdGUoUmVzb3VyY2VIYW5kbGUq
LCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUqLCBDRlVS
TFJlc3BvbnNlUmVmKTsKKyNlbmRpZgorICAgIH5RdWlja0xvb2tIYW5kbGUoKTsKKworICAgIGJv
b2wgZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycmF5UmVmKTsKKyAgICBib29sIGRpZFJlY2VpdmVE
YXRhKENGRGF0YVJlZik7CisgICAgYm9vbCBkaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgdm9pZCBk
aWRGYWlsKCk7CisKKyAgICBOU1VSTFJlc3BvbnNlICpuc1Jlc3BvbnNlKCk7CisjaWYgVVNFKENG
TkVUV09SSykKKyAgICBDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UoKTsKKyNlbmRpZgorCitw
cml2YXRlOgorICAgIFF1aWNrTG9va0hhbmRsZShSZXNvdXJjZUhhbmRsZSosIE5TVVJMQ29ubmVj
dGlvbiAqLCBOU1VSTFJlc3BvbnNlICosIGlkIGRlbGVnYXRlKTsKKyNpZiBVU0UoQ0ZORVRXT1JL
KQorICAgIFF1aWNrTG9va0hhbmRsZShSZXNvdXJjZUhhbmRsZSosIENGVVJMUmVzcG9uc2VSZWYp
OworI2VuZGlmCisKKyAgICBSZXNvdXJjZUhhbmRsZSogbV9oYW5kbGU7CisgICAgUmV0YWluUHRy
PGlkPiBtX2NvbnZlcnRlcjsKKyAgICBSZXRhaW5QdHI8aWQ+IG1fZGVsZWdhdGU7CisgICAgYm9v
bCBtX2ZpbmlzaGVkTG9hZGluZ0RhdGFJbnRvQ29udmVydGVyOworICAgIFJldGFpblB0cjxOU0Zp
bGVIYW5kbGUgKj4gbV9xdWlja2xvb2tGaWxlSGFuZGxlOworICAgIE5TVVJMUmVzcG9uc2UgKm1f
bnNSZXNwb25zZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShRVUlDS19MT09LKQorCisjZW5kaWYgLy8gUXVpY2tMb29rX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9vay5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9vay5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTc2OTA5
MTFlMTdkMjAwMzFkODk3ZTE5ZTY2YTRkNGFkNjVlZmRmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLm1tCkBAIC0wLDAgKzEs
NDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJRdWlja0xv
b2suaCIKKworI2lmIFVTRShRVUlDS19MT09LKQorCisjaW1wb3J0ICJGaWxlU3lzdGVtSU9TLmgi
CisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJSZXNvdXJjZUhhbmRsZS5oIgorI2ltcG9y
dCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgiCisjaW1wb3J0ICJTb2Z0TGlua2luZy5o
IgorI2ltcG9ydCAiU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlLmgiCisjaW1wb3J0ICJXZWJDb3JlVVJMUmVzcG9uc2VJT1MuaCIKKyNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0ZpbGVNYW5hZ2VyX05T
VVJMRXh0cmFzLmg+CisjaW1wb3J0IDxRdWlja0xvb2svUUxQcmV2aWV3Q29udmVydGVyLmg+Cisj
aW1wb3J0IDxRdWlja0xvb2svUXVpY2tMb29rUHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW1wb3J0IDx3dGYv
VGhyZWFkaW5nLmg+CisjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworI2lmIFVTRShDRk5FVFdPUkspCisjaW1wb3J0IDxDRk5ldHdvcmsvQ0ZV
UkxDb25uZWN0aW9uLmg+CisKK0BpbnRlcmZhY2UgTlNVUkxSZXNwb25zZSAoUXVpY2tMb29rRGV0
YWlscykKKysoTlNVUkxSZXNwb25zZSAqKV9yZXNwb25zZVdpdGhDRlVSTFJlc3BvbnNlOihDRlVS
TFJlc3BvbnNlUmVmKXJlc3BvbnNlOworLShDRlVSTFJlc3BvbnNlUmVmKV9DRlVSTFJlc3BvbnNl
OworQGVuZAorI2VuZGlmCisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoUXVpY2tMb29r
KQorU09GVF9MSU5LX0NMQVNTKFF1aWNrTG9vaywgUUxQcmV2aWV3Q29udmVydGVyKQorU09GVF9M
SU5LX01BWV9GQUlMKFF1aWNrTG9vaywgUUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzLCBO
U1NldCAqLCAoKSwgKCkpCitTT0ZUX0xJTktfTUFZX0ZBSUwoUXVpY2tMb29rLCBRTFR5cGVDb3B5
QmVzdE1pbWVUeXBlRm9yRmlsZU5hbWVBbmRNaW1lVHlwZSwgTlNTdHJpbmcgKiwgKE5TU3RyaW5n
ICpmaWxlTmFtZSwgTlNTdHJpbmcgKm1pbWVUeXBlKSwgKGZpbGVOYW1lLCBtaW1lVHlwZSkpCitT
T0ZUX0xJTktfTUFZX0ZBSUwoUXVpY2tMb29rLCBRTFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yVVJM
QW5kTWltZVR5cGUsIE5TU3RyaW5nICosIChOU1VSTCAqdXJsLCBOU1N0cmluZyAqbWltZVR5cGUp
LCAodXJsLCBtaW1lVHlwZSkpCitTT0ZUX0xJTktfTUFZX0ZBSUwoUXVpY2tMb29rLCBRTFR5cGVD
b3B5VVRJRm9yVVJMQW5kTWltZVR5cGUsIE5TU3RyaW5nICosIChOU1VSTCAqdXJsLCBOU1N0cmlu
ZyAqbWltZVR5cGUpLCAodXJsLCBtaW1lVHlwZSkpCitTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZB
SUwoUXVpY2tMb29rLCBRTFByZXZpZXdTY2hlbWUsIE5TU3RyaW5nICopCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICBOU1N0cmluZyAqUUxUeXBlQ29weVVUSUZvclVSTEFuZE1pbWVUeXBlKE5T
VVJMICp1cmwsIE5TU3RyaW5nICptaW1lVHlwZSk7Cit9CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitDbGFzcyBXZWJDb3JlOjpRTFByZXZpZXdDb252ZXJ0ZXJDbGFzcygpCit7CisjZGVm
aW5lIFFMUHJldmlld0NvbnZlcnRlciBnZXRRTFByZXZpZXdDb252ZXJ0ZXJDbGFzcygpCisgICAg
cmV0dXJuIFFMUHJldmlld0NvbnZlcnRlcjsKKyN1bmRlZiBRTFByZXZpZXdDb252ZXJ0ZXIKK30K
KworTlNTdHJpbmcgKldlYkNvcmU6OlFMVHlwZUNvcHlCZXN0TWltZVR5cGVGb3JGaWxlTmFtZUFu
ZE1pbWVUeXBlKE5TU3RyaW5nICpmaWxlTmFtZSwgTlNTdHJpbmcgKm1pbWVUeXBlKQoreworICAg
IGlmICghY2FuTG9hZFFMVHlwZUNvcHlCZXN0TWltZVR5cGVGb3JGaWxlTmFtZUFuZE1pbWVUeXBl
KCkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gOjpRTFR5cGVDb3B5QmVzdE1p
bWVUeXBlRm9yRmlsZU5hbWVBbmRNaW1lVHlwZShmaWxlTmFtZSwgbWltZVR5cGUpOworfQorCitO
U1N0cmluZyAqV2ViQ29yZTo6UUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvclVSTEFuZE1pbWVUeXBl
KE5TVVJMICp1cmwsIE5TU3RyaW5nICptaW1lVHlwZSkKK3sKKyAgICBpZiAoIWNhbkxvYWRRTFR5
cGVDb3B5QmVzdE1pbWVUeXBlRm9yVVJMQW5kTWltZVR5cGUoKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIHJldHVybiA6OlFMVHlwZUNvcHlCZXN0TWltZVR5cGVGb3JVUkxBbmRNaW1lVHlw
ZSh1cmwsIG1pbWVUeXBlKTsKK30KKworTlNTZXQgKldlYkNvcmU6OlFMUHJldmlld0dldFN1cHBv
cnRlZE1JTUVUeXBlc1NldCgpCit7CisgICAgaWYgKCFjYW5Mb2FkUUxQcmV2aWV3R2V0U3VwcG9y
dGVkTUlNRVR5cGVzKCkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzdGF0aWMgTlNTZXQg
KnNldCA9IGFkb3B0TlMoOjpRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXMoKSkubGVha1Jl
ZigpOworICAgIHJldHVybiBzZXQ7Cit9CisKK05TU3RyaW5nICpXZWJDb3JlOjpRTFR5cGVDb3B5
VVRJRm9yVVJMQW5kTWltZVR5cGUoTlNVUkwgKnVybCwgTlNTdHJpbmcgKm1pbWVUeXBlKQorewor
ICAgIGlmICghY2FuTG9hZFFMVHlwZUNvcHlVVElGb3JVUkxBbmRNaW1lVHlwZSgpKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIDo6UUxUeXBlQ29weVVUSUZvclVSTEFuZE1pbWVU
eXBlKHVybCwgbWltZVR5cGUpOworfQorCitOU0RpY3Rpb25hcnkgKldlYkNvcmU6OlFMRmlsZUF0
dHJpYnV0ZXMoKQoreworICAgIC8vIFNldCBmaWxlIHBlcm1zIHRvIG93bmVyIHJlYWQvd3JpdGUg
b25seQorICAgIE5TTnVtYmVyICpmaWxlUE9TSVhQZXJtaXNzaW9ucyA9IFtOU051bWJlciBudW1i
ZXJXaXRoSW50ZWdlcjooV0VCX1VSRUFEIHwgV0VCX1VXUklURSldOworICAgIHN0YXRpYyBOU0Rp
Y3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBhZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0
V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5TVXNlck5hbWUoKSwgTlNGaWxlT3duZXJBY2NvdW50TmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlUE9TSVhQZXJtaXNzaW9ucywgTlNGaWxlUG9z
aXhQZXJtaXNzaW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dWxscHRyXSkubGVha1JlZigpOworICAgIHJldHVybiBkaWN0aW9uYXJ5OworfQorCitOU0RpY3Rp
b25hcnkgKldlYkNvcmU6OlFMRGlyZWN0b3J5QXR0cmlidXRlcygpCit7CisgICAgLy8gU2V0IGZp
bGUgcGVybXMgdG8gb3duZXIgcmVhZC93cml0ZS9leGVjdXRlIG9ubHkKKyAgICBOU051bWJlciAq
ZGlyZWN0b3J5UE9TSVhQZXJtaXNzaW9ucyA9IFtOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjoo
V0VCX1VSRUFEIHwgV0VCX1VXUklURSB8IFdFQl9VRVhFQyldOworICAgIHN0YXRpYyBOU0RpY3Rp
b25hcnkgKmRpY3Rpb25hcnkgPSBhZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0
aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlNVc2VyTmFtZSgpLCBOU0ZpbGVPd25lckFjY291bnROYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5UE9TSVhQZXJt
aXNzaW9ucywgTlNGaWxlUG9zaXhQZXJtaXNzaW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHJdKS5sZWFrUmVmKCk7CisgICAgcmV0dXJu
IGRpY3Rpb25hcnk7Cit9CisKK3N0YXRpYyBNdXRleCYgcWxQcmV2aWV3Q29udmVydGVyRGljdGlv
bmFyeU11dGV4KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TXV0ZXg+IG11dGV4Owor
ICAgIHJldHVybiBtdXRleDsKK30KKworc3RhdGljIE5TTXV0YWJsZURpY3Rpb25hcnkgKlFMUHJl
dmlld0NvbnZlcnRlckRpY3Rpb25hcnkoKQoreworICAgIHN0YXRpYyBOU011dGFibGVEaWN0aW9u
YXJ5ICpkaWN0aW9uYXJ5ID0gYWRvcHROUyhbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5
XSkubGVha1JlZigpOworICAgIHJldHVybiBkaWN0aW9uYXJ5OworfQorCitzdGF0aWMgTlNNdXRh
YmxlRGljdGlvbmFyeSAqUUxDb250ZW50RGljdGlvbmFyeSgpCit7CisgICAgc3RhdGljIE5TTXV0
YWJsZURpY3Rpb25hcnkgKmNvbnRlbnREaWN0aW9uYXJ5ID0gYWRvcHROUyhbTlNNdXRhYmxlRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5XSkubGVha1JlZigpOworICAgIHJldHVybiBjb250ZW50RGljdGlv
bmFyeTsKK30KKwordm9pZCBXZWJDb3JlOjphZGRRTFByZXZpZXdDb252ZXJ0ZXJXaXRoRmlsZUZv
clVSTChOU1VSTCAqdXJsLCBpZCBjb252ZXJ0ZXIsIE5TU3RyaW5nICpmaWxlTmFtZSkKK3sKKyAg
ICBBU1NFUlQodXJsKTsKKyAgICBBU1NFUlQoY29udmVydGVyKTsKKyAgICBNdXRleExvY2tlciBs
b2NrKHFsUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnlNdXRleCgpKTsKKyAgICBbUUxQcmV2aWV3
Q29udmVydGVyRGljdGlvbmFyeSgpIHNldE9iamVjdDpjb252ZXJ0ZXIgZm9yS2V5OnVybF07Cisg
ICAgW1FMQ29udGVudERpY3Rpb25hcnkoKSBzZXRPYmplY3Q6KGZpbGVOYW1lID8gZmlsZU5hbWUg
OiBAIiIpIGZvcktleTp1cmxdOworfQorCitOU1N0cmluZyAqV2ViQ29yZTo6cWxQcmV2aWV3Q29u
dmVydGVyRmlsZU5hbWVGb3JVUkwoTlNVUkwgKnVybCkKK3sKKyAgICByZXR1cm4gW1FMQ29udGVu
dERpY3Rpb25hcnkoKSBvYmplY3RGb3JLZXk6dXJsXTsKK30KKworTlNTdHJpbmcgKldlYkNvcmU6
OnFsUHJldmlld0NvbnZlcnRlclVUSUZvclVSTChOU1VSTCAqdXJsKQoreworICAgIGlkIGNvbnZl
cnRlciA9IG5pbDsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2socWxQcmV2aWV3Q29u
dmVydGVyRGljdGlvbmFyeU11dGV4KCkpOworICAgICAgICBjb252ZXJ0ZXIgPSBbUUxQcmV2aWV3
Q29udmVydGVyRGljdGlvbmFyeSgpIG9iamVjdEZvcktleTp1cmxdOworICAgIH0KKyAgICBpZiAo
IWNvbnZlcnRlcikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW2NvbnZlcnRlciBw
cmV2aWV3VVRJXTsKK30KKwordm9pZCBXZWJDb3JlOjpyZW1vdmVRTFByZXZpZXdDb252ZXJ0ZXJG
b3JVUkwoTlNVUkwgKnVybCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKHFsUHJldmlld0NvbnZl
cnRlckRpY3Rpb25hcnlNdXRleCgpKTsKKyAgICBbUUxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFy
eSgpIHJlbW92ZU9iamVjdEZvcktleTp1cmxdOworCisgICAgLy8gRGVsZXRlIHRoZSBmaWxlIHdo
ZW4gd2UgcmVtb3ZlIHRoZSBwcmV2aWV3IGNvbnZlcnRlcgorICAgIE5TU3RyaW5nICpmaWxlbmFt
ZSA9IHFsUHJldmlld0NvbnZlcnRlckZpbGVOYW1lRm9yVVJMKHVybCk7CisgICAgaWYgKFtmaWxl
bmFtZSBsZW5ndGhdKQorICAgICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIF93
ZWJfcmVtb3ZlRmlsZU9ubHlBdFBhdGg6ZmlsZW5hbWVdOworICAgIFtRTENvbnRlbnREaWN0aW9u
YXJ5KCkgcmVtb3ZlT2JqZWN0Rm9yS2V5OnVybF07Cit9CisKK1Bhc3NPd25QdHI8UmVzb3VyY2VS
ZXF1ZXN0PiBXZWJDb3JlOjpyZWdpc3RlclFMUHJldmlld0NvbnZlcnRlcklmTmVlZGVkKE5TVVJM
ICp1cmwsIE5TU3RyaW5nICptaW1lVHlwZSwgTlNEYXRhICpkYXRhKQoreworICAgIFJldGFpblB0
cjxOU1N0cmluZz4gdXBkYXRlZE1JTUVUeXBlID0gYWRvcHROUyhXZWJDb3JlOjpRTFR5cGVDb3B5
QmVzdE1pbWVUeXBlRm9yVVJMQW5kTWltZVR5cGUodXJsLCBtaW1lVHlwZSkpOworCisgICAgaWYg
KFtXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWluc09i
amVjdDp1cGRhdGVkTUlNRVR5cGUuZ2V0KCldKSB7CisgICAgICAgIFJldGFpblB0cjxOU1N0cmlu
Zz4gdXRpID0gYWRvcHROUyhXZWJDb3JlOjpRTFR5cGVDb3B5VVRJRm9yVVJMQW5kTWltZVR5cGUo
dXJsLCB1cGRhdGVkTUlNRVR5cGUuZ2V0KCkpKTsKKworICAgICAgICBSZXRhaW5QdHI8aWQ+IGNv
bnZlcnRlciA9IGFkb3B0TlMoW1tRTFByZXZpZXdDb252ZXJ0ZXJDbGFzcygpIGFsbG9jXSBpbml0
V2l0aERhdGE6ZGF0YSBuYW1lOm5pbCB1dGk6dXRpLmdldCgpIG9wdGlvbnM6bmlsXSk7CisgICAg
ICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtjb252ZXJ0ZXIuZ2V0KCkgcHJldmlld1JlcXVl
c3RdOworCisgICAgICAgIC8vIFdlIHVzZSBbcmVxdWVzdCBVUkxdIGhlcmUgaW5zdGVhZCBvZiB1
cmwgc2luY2UgaXQgd2lsbCBiZQorICAgICAgICAvLyB0aGUgVVJMIHRoYXQgdGhlIFdlYkRhdGFT
b3VyY2Ugd2lsbCBzZWUgZHVyaW5nIC1kZWFsbG9jLgorICAgICAgICBhZGRRTFByZXZpZXdDb252
ZXJ0ZXJXaXRoRmlsZUZvclVSTChbcmVxdWVzdCBVUkxdLCBjb252ZXJ0ZXIuZ2V0KCksIG5pbCk7
CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCkp
OworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitjb25zdCBVUkwgV2ViQ29yZTo6
c2FmZVFMVVJMRm9yRG9jdW1lbnRVUkxBbmRSZXNvdXJjZVVSTChjb25zdCBVUkwmIGRvY3VtZW50
VVJMLCBjb25zdCBTdHJpbmcmIHJlc291cmNlVVJMKQoreworICAgIGlkIGNvbnZlcnRlciA9IG5p
bDsKKyAgICBOU1VSTCAqbnNEb2N1bWVudFVSTCA9IGRvY3VtZW50VVJMOworICAgIHsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9jayhxbFByZXZpZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5TXV0ZXgoKSk7
CisgICAgICAgIGNvbnZlcnRlciA9IFtRTFByZXZpZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5KCkgb2Jq
ZWN0Rm9yS2V5Om5zRG9jdW1lbnRVUkxdOworICAgIH0KKworICAgIGlmICghY29udmVydGVyKQor
ICAgICAgICByZXR1cm4gVVJMKFBhcnNlZFVSTFN0cmluZywgcmVzb3VyY2VVUkwpOworCisgICAg
UmV0YWluUHRyPE5TVVJMUmVxdWVzdD4gcmVxdWVzdCA9IGFkb3B0TlMoW1tOU1VSTFJlcXVlc3Qg
YWxsb2NdIGluaXRXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOnJlc291cmNlVVJMXV0pOwor
ICAgIE5TVVJMUmVxdWVzdCAqc2FmZVJlcXVlc3QgPSBbY29udmVydGVyIHNhZmVSZXF1ZXN0Rm9y
UmVxdWVzdDpyZXF1ZXN0LmdldCgpXTsKKyAgICByZXR1cm4gW3NhZmVSZXF1ZXN0IFVSTF07Cit9
CisKK3N0YXRpYyBWZWN0b3I8Y2hhcj4gY3JlYXRlUUxQcmV2aWV3UHJvdG9jb2woKQoreworICAg
IFZlY3RvcjxjaGFyPiBwcmV2aWV3UHJvdG9jb2w7CisjZGVmaW5lIFFMUHJldmlld1NjaGVtZSBn
ZXRRTFByZXZpZXdTY2hlbWUoKQorICAgIGNvbnN0IGNoYXIqIHFsUHJldmlld1NjaGVtZSA9IFtR
TFByZXZpZXdTY2hlbWUgVVRGOFN0cmluZ107CisjdW5kZWYgUUxQcmV2aWV3U2NoZW1lCisgICAg
cHJldmlld1Byb3RvY29sLmFwcGVuZChxbFByZXZpZXdTY2hlbWUsIHN0cmxlbihxbFByZXZpZXdT
Y2hlbWUpICsgMSk7CisgICAgcmV0dXJuIHByZXZpZXdQcm90b2NvbDsKK30KKworY29uc3QgY2hh
ciogV2ViQ29yZTo6UUxQcmV2aWV3UHJvdG9jb2woKQoreworICAgIGlmICghY2FuTG9hZFFMUHJl
dmlld1NjaGVtZSgpKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8VmVjdG9yPGNoYXI+PiBwcmV2aWV3UHJvdG9jb2woY3JlYXRlUUxQcmV2aWV3UHJvdG9j
b2woKSk7CisgICAgcmV0dXJuIHByZXZpZXdQcm90b2NvbC5nZXQoKS5kYXRhKCk7Cit9CisKKyNp
ZiBVU0UoQ0ZORVRXT1JLKQorLy8gVGhlIHdheSBRdWlja0xvb2sgd29ya3MgaXMgd2UgcGFzcyBp
dCBhbiBOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZSBjYWxsYmFjayBvYmplY3QgYXQgY3JlYXRpb24K
Ky8vIHRpbWUuIFRoZW4gd2UgcGFzcyBpdCBhbGwgdGhlIGRhdGEgYXMgd2UgcmVjZWl2ZSBpdC4g
T25jZSB3ZSd2ZSBkb3dubG9hZGVkIHRoZSBmdWxsIFVSTCwKKy8vIFF1aWNrTG9vayB0dXJucyBh
cm91bmQgYW5kIHNlbmQgdXMsIHRocm91Z2ggdGhpcyBkZWxlZ2F0ZSwgdGhlIEhUTUwgdmVyc2lv
biBvZiB0aGUgZmlsZSB3aGljaCB3ZQorLy8gcGFzcyBvbiB0byBXZWJDb3JlLiBUaGUgZmxhZyBt
X2ZpbmlzaGVkTG9hZGluZ0RhdGFJbnRvQ29udmVydGVyIGluIFF1aWNrTG9va0hhbmRsZSBkZWNp
ZGVzCisvLyB3aGV0aGVyIHRvIHBhc3MgdGhlIGRhdGEgdG8gUXVpY2tMb29rIG9yIFdlYkNvcmUu
CisvLworLy8gVGhpcyB3b3JrcyBmaW5lIHdoZW4gdXNpbmcgTlMgQVBJcywgYnV0IHdoZW4gdXNp
bmcgQ0ZOZXR3b3JrLCB3ZSBkb24ndCBoYXZlIGEgTlNVUkxDb25uZWN0aW9uRGVsZWdhdGUuCisv
LyBTbyB3ZSBjcmVhdGUgV2ViUXVpY2tMb29rSGFuZGxlQXNEZWxlZ2F0ZSBhcyBhbiBpbnRlcm1l
ZGlhdGUgZGVsZWdhdGUgb2JqZWN0IGFuZCBwYXNzIGl0IHRvCisvLyBRTFByZXZpZXdDb252ZXJ0
ZXIuIFRoZSBwcm94eSBkZWxlZ2F0ZSB0aGVuIGZvcndhcmRzIHRoZSBtZXNzYWdlcyBvbiB0byB0
aGUgQ0ZOZXR3b3JrIGNvZGUuCitAaW50ZXJmYWNlIFdlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdh
dGUgOiBOU09iamVjdCA8TlNVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHsKKyAgICBSZWZQdHI8U3lu
Y2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlPiBtX2Nvbm5lY3Rp
b25EZWxlZ2F0ZTsKK30KKworLSAoaWQpaW5pdFdpdGhDb25uZWN0aW9uRGVsZWdhdGU6KFN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSopY29ubmVjdGlvbkRl
bGVnYXRlOworLSAodm9pZCljbGVhckhhbmRsZTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdl
YlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGUKKy0gKGlkKWluaXRXaXRoQ29ubmVjdGlvbkRlbGVn
YXRlOihTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUqKWNv
bm5lY3Rpb25EZWxlZ2F0ZQoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlID0gY29u
bmVjdGlvbkRlbGVnYXRlOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWNvbm5lY3Rp
b246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZURhdGFBcnJheTooTlNB
cnJheSAqKWRhdGFBcnJheQoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKyAgICBp
ZiAoIW1fY29ubmVjdGlvbkRlbGVnYXRlKQorICAgICAgICByZXR1cm47CisgICAgTE9HKE5ldHdv
cmssICJXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVnYXRlOjpkaWRSZWNlaXZlRGF0YUFycmF5KCki
KTsKKyAgICBtX2Nvbm5lY3Rpb25EZWxlZ2F0ZS0+ZGlkUmVjZWl2ZURhdGFBcnJheShyZWludGVy
cHJldF9jYXN0PENGQXJyYXlSZWY+KGRhdGFBcnJheSkpOworfQorCistICh2b2lkKWNvbm5lY3Rp
b246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZURhdGE6KE5TRGF0YSAq
KWRhdGEgbGVuZ3RoUmVjZWl2ZWQ6KGxvbmcgbG9uZylsZW5ndGhSZWNlaXZlZAoreworICAgIFVO
VVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbkRlbGVnYXRlKQor
ICAgICAgICByZXR1cm47CisgICAgTE9HKE5ldHdvcmssICJXZWJRdWlja0xvb2tIYW5kbGVBc0Rl
bGVnYXRlOjpkaWRSZWNlaXZlRGF0YSgpIC0gZGF0YSBsZW5ndGggPSAlbGQiLCAobG9uZylbZGF0
YSBsZW5ndGhdKTsKKworICAgIC8vIFF1aWNrTG9vayBjb2RlIHNlbmRzIHVzIGEgbmlsIGRhdGEg
YXQgdGltZXMuIFRoZSBjaGVjayBiZWxvdyBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIGluCisgICAg
Ly8gUmVzb3VyY2VIYW5kbGVNYWMuY3BwIGFkZGVkIGZvciBhIGRpZmZlcmVudCBidWcuCisgICAg
aWYgKCFbZGF0YSBsZW5ndGhdKQorICAgICAgICByZXR1cm47CisgICAgbV9jb25uZWN0aW9uRGVs
ZWdhdGUtPmRpZFJlY2VpdmVEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPihkYXRhKSwg
c3RhdGljX2Nhc3Q8aW50PihsZW5ndGhSZWNlaXZlZCkpOworfQorCistICh2b2lkKWNvbm5lY3Rp
b25EaWRGaW5pc2hMb2FkaW5nOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uCit7CisgICAg
VU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOworICAgIGlmICghbV9jb25uZWN0aW9uRGVsZWdhdGUp
CisgICAgICAgIHJldHVybjsKKyAgICBMT0coTmV0d29yaywgIldlYlF1aWNrTG9va0hhbmRsZUFz
RGVsZWdhdGU6OmRpZEZpbmlzaExvYWRpbmcoKSIpOworICAgIG1fY29ubmVjdGlvbkRlbGVnYXRl
LT5kaWRGaW5pc2hMb2FkaW5nKCk7Cit9CisKKy0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25u
ZWN0aW9uICopY29ubmVjdGlvbiBkaWRGYWlsV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKK3sK
KyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb25EZWxl
Z2F0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIExPRyhOZXR3b3JrLCAiV2ViUXVpY2tMb29rSGFu
ZGxlQXNEZWxlZ2F0ZTo6ZGlkRmFpbCgpIik7CisgICAgbV9jb25uZWN0aW9uRGVsZWdhdGUtPmRp
ZEZhaWwocmVpbnRlcnByZXRfY2FzdDxDRkVycm9yUmVmPihlcnJvcikpOworfQorCistICh2b2lk
KWNsZWFySGFuZGxlCit7CisgICAgbV9jb25uZWN0aW9uRGVsZWdhdGUgPSBudWxscHRyOworfQor
QGVuZAorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIE5TU3RyaW5nICpj
cmVhdGVUZW1wb3JhcnlGaWxlRm9yUXVpY2tMb29rKE5TU3RyaW5nICpmaWxlTmFtZSkKK3sKKyAg
ICBOU1N0cmluZyAqZG93bmxvYWREaXJlY3RvcnkgPSBjcmVhdGVUZW1wb3JhcnlEaXJlY3Rvcnko
QCJRdWlja0xvb2tDb250ZW50Iik7CisgICAgaWYgKCFkb3dubG9hZERpcmVjdG9yeSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIE5TU3RyaW5nICpjb250ZW50UGF0aCA9IFtkb3dubG9hZERp
cmVjdG9yeSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6ZmlsZU5hbWVdOworICAgIE5T
RmlsZU1hbmFnZXIgKmZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
OworICAgIE5TU3RyaW5nICp1bmlxdWVDb250ZW50UGF0aCA9IFtmaWxlTWFuYWdlciBfd2ViX3Bh
dGhXaXRoVW5pcXVlRmlsZW5hbWVGb3JQYXRoOmNvbnRlbnRQYXRoXTsKKworICAgIEJPT0wgc3Vj
Y2VzcyA9IFtmaWxlTWFuYWdlciBfd2ViX2NyZWF0ZUZpbGVBdFBhdGhXaXRoSW50ZXJtZWRpYXRl
RGlyZWN0b3JpZXM6dW5pcXVlQ29udGVudFBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOm5p
bAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6UUxGaWxlQXR0cmlidXRlcygpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0
b3J5QXR0cmlidXRlczpRTERpcmVjdG9yeUF0dHJpYnV0ZXMoKV07CisKKyAgICByZXR1cm4gc3Vj
Y2VzcyA/IHVuaXF1ZUNvbnRlbnRQYXRoIDogbmlsOworfQorCisKK1F1aWNrTG9va0hhbmRsZTo6
UXVpY2tMb29rSGFuZGxlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIE5TVVJMQ29ubmVjdGlvbiAq
Y29ubmVjdGlvbiwgTlNVUkxSZXNwb25zZSAqbnNSZXNwb25zZSwgaWQgZGVsZWdhdGUpCisgICAg
OiBtX2hhbmRsZShoYW5kbGUpCisgICAgLCBtX2NvbnZlcnRlcihhZG9wdE5TKFtbUUxQcmV2aWV3
Q29udmVydGVyQ2xhc3MoKSBhbGxvY10gaW5pdFdpdGhDb25uZWN0aW9uOmNvbm5lY3Rpb24gZGVs
ZWdhdGU6ZGVsZWdhdGUgcmVzcG9uc2U6bnNSZXNwb25zZSBvcHRpb25zOm5pbF0pKQorICAgICwg
bV9kZWxlZ2F0ZShhZG9wdE5TKFtkZWxlZ2F0ZSByZXRhaW5dKSkKKyAgICAsIG1fZmluaXNoZWRM
b2FkaW5nRGF0YUludG9Db252ZXJ0ZXIoZmFsc2UpCisgICAgLCBtX25zUmVzcG9uc2UoW21fY29u
dmVydGVyLmdldCgpIHByZXZpZXdSZXNwb25zZV0pCit7CisgICAgTlNVUkwgKnByZXZpZXdSZXF1
ZXN0VVJMID0gW1ttX2NvbnZlcnRlci5nZXQoKSBwcmV2aWV3UmVxdWVzdF0gVVJMXTsKKyAgICBp
ZiAoIWFwcGxpY2F0aW9uSXNNb2JpbGVTYWZhcmkoKSkgeworICAgICAgICAvLyBUaGlzIGtlZXBz
IHRoZSBRTFByZXZpZXdDb252ZXJ0ZXIgYWxpdmUgdG8gc2VydmUgYW55IHN1YnJlc291cmNlIHJl
cXVlc3RzLgorICAgICAgICAvLyBJdCBpcyByZW1vdmVkIGJ5IC1bV2ViRGF0YVNvdXJjZSBkZWFs
bG9jXS4KKyAgICAgICAgYWRkUUxQcmV2aWV3Q29udmVydGVyV2l0aEZpbGVGb3JVUkwocHJldmll
d1JlcXVlc3RVUkwsIG1fY29udmVydGVyLmdldCgpLCBuaWwpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gUXVpY2tMb29rIGNvbnN1bWVzIHRoZSBpbmNvbWluZyBkYXRhLCB3ZSBu
ZWVkIHRvIHN0b3JlIGl0IHNvIHRoYXQgaXQgY2FuIGJlIG9wZW5lZCBpbiB0aGUgaGFuZGxpbmcg
YXBwbGljYXRpb24uCisgICAgTlNTdHJpbmcgKnF1aWNrbG9va0NvbnRlbnRQYXRoID0gY3JlYXRl
VGVtcG9yYXJ5RmlsZUZvclF1aWNrTG9vayhbbV9jb252ZXJ0ZXIuZ2V0KCkgcHJldmlld0ZpbGVO
YW1lXSk7CisgICAgTE9HKE5ldHdvcmssICJRdWlja0xvb2tIYW5kbGU6OlF1aWNrTG9va0hhbmRs
ZSgpIC0gcXVpY2tsb29rQ29udGVudFBhdGg6ICVzIiwgW3F1aWNrbG9va0NvbnRlbnRQYXRoIFVU
RjhTdHJpbmddKTsKKworICAgIGlmIChxdWlja2xvb2tDb250ZW50UGF0aCkgeworICAgICAgICBt
X3F1aWNrbG9va0ZpbGVIYW5kbGUgPSBhZG9wdE5TKFtbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVG
b3JXcml0aW5nQXRQYXRoOnF1aWNrbG9va0NvbnRlbnRQYXRoXSByZXRhaW5dKTsKKyAgICAgICAg
Ly8gV2UgbXVzdCB1c2UgdGhlIGdlbmVyYXRlZCBVUkwgZnJvbSBtX2NvbnZlcnRlcidzIE5TVVJM
UmVxdWVzdCBvYmplY3QKKyAgICAgICAgLy8gc28gdGhhdCBpdCBtYXRjaGVzIHRoZSBVUkwgcmVt
b3ZlZCBmcm9tIC1bV2ViRGF0YVNvdXJjZSBkZWFsbG9jXS4KKyAgICAgICAgYWRkUUxQcmV2aWV3
Q29udmVydGVyV2l0aEZpbGVGb3JVUkwocHJldmlld1JlcXVlc3RVUkwsIG1fY29udmVydGVyLmdl
dCgpLCBxdWlja2xvb2tDb250ZW50UGF0aCk7CisgICAgfQorfQorCitQYXNzT3duUHRyPFF1aWNr
TG9va0hhbmRsZT4gUXVpY2tMb29rSGFuZGxlOjpjcmVhdGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgTlNVUkxDb25uZWN0aW9uICpjb25uZWN0aW9uLCBOU1VSTFJlc3BvbnNlICpuc1Jlc3BvbnNl
LCBpZCBkZWxlZ2F0ZSkKK3sKKyAgICBpZiAoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5pc01haW5S
ZXNvdXJjZVJlcXVlc3QoKSAmJiBbV2ViQ29yZTo6UUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5
cGVzU2V0KCkgY29udGFpbnNPYmplY3Q6W25zUmVzcG9uc2UgTUlNRVR5cGVdXSkKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBRdWlja0xvb2tIYW5kbGUoaGFuZGxlLCBjb25uZWN0aW9uLCBu
c1Jlc3BvbnNlLCBkZWxlZ2F0ZSkpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNpZiBV
U0UoQ0ZORVRXT1JLKQorUGFzc093blB0cjxRdWlja0xvb2tIYW5kbGU+IFF1aWNrTG9va0hhbmRs
ZTo6Y3JlYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSogY29ubmVjdGlvbkRlbGVnYXRlLCBDRlVSTFJlc3Bv
bnNlUmVmIGNmUmVzcG9uc2UpCit7CisgICAgaWYgKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaXNN
YWluUmVzb3VyY2VSZXF1ZXN0KCkgJiYgW1dlYkNvcmU6OlFMUHJldmlld0dldFN1cHBvcnRlZE1J
TUVUeXBlc1NldCgpIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKUNGVVJMUmVzcG9uc2VHZXRN
SU1FVHlwZShjZlJlc3BvbnNlKV0pIHsKKyAgICAgICAgTlNVUkxSZXNwb25zZSAqbnNSZXNwb25z
ZSA9IFtOU1VSTFJlc3BvbnNlIF9yZXNwb25zZVdpdGhDRlVSTFJlc3BvbnNlOmNmUmVzcG9uc2Vd
OworICAgICAgICBXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVnYXRlICpkZWxlZ2F0ZSA9IFtbW1dl
YlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoQ29ubmVjdGlvbkRlbGVn
YXRlOmNvbm5lY3Rpb25EZWxlZ2F0ZV0gYXV0b3JlbGVhc2VdOworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFF1aWNrTG9va0hhbmRsZShoYW5kbGUsIG5pbCwgbnNSZXNwb25zZSwgZGVsZWdh
dGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQ0ZVUkxSZXNwb25zZVJl
ZiBRdWlja0xvb2tIYW5kbGU6OmNmUmVzcG9uc2UoKQoreworICAgIHJldHVybiBbbV9uc1Jlc3Bv
bnNlIF9DRlVSTFJlc3BvbnNlXTsKK30KKyNlbmRpZgorCitOU1VSTFJlc3BvbnNlICpRdWlja0xv
b2tIYW5kbGU6Om5zUmVzcG9uc2UoKQoreworICAgIHJldHVybiBtX25zUmVzcG9uc2U7Cit9CisK
K2Jvb2wgUXVpY2tMb29rSGFuZGxlOjpkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJyYXlSZWYgY2ZE
YXRhQXJyYXkpCit7CisgICAgTlNBcnJheSAqIGNvbnN0IGRhdGFBcnJheSA9IChOU0FycmF5ICop
Y2ZEYXRhQXJyYXk7CisKKyAgICBpZiAobV9maW5pc2hlZExvYWRpbmdEYXRhSW50b0NvbnZlcnRl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTE9HKE5ldHdvcmssICJRdWlja0xvb2tI
YW5kbGU6OmRpZFJlY2VpdmVEYXRhQXJyYXkoKSIpOworICAgIFttX2NvbnZlcnRlci5nZXQoKSBh
cHBlbmREYXRhQXJyYXk6ZGF0YUFycmF5XTsKKyAgICBpZiAobV9xdWlja2xvb2tGaWxlSGFuZGxl
KSB7CisgICAgICAgIGZvciAoTlNEYXRhICpkYXRhIGluIGRhdGFBcnJheSkKKyAgICAgICAgICAg
IFttX3F1aWNrbG9va0ZpbGVIYW5kbGUuZ2V0KCkgd3JpdGVEYXRhOmRhdGFdOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBRdWlja0xvb2tIYW5kbGU6OmRpZFJlY2VpdmVEYXRh
KENGRGF0YVJlZiBjZkRhdGEpCit7CisgICAgTlNEYXRhICogY29uc3QgZGF0YSA9IChOU0RhdGEg
KiljZkRhdGE7CisKKyAgICBpZiAobV9maW5pc2hlZExvYWRpbmdEYXRhSW50b0NvbnZlcnRlcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTE9HKE5ldHdvcmssICJRdWlja0xvb2tIYW5k
bGU6OmRpZFJlY2VpdmVEYXRhKCkiKTsKKyAgICBbbV9jb252ZXJ0ZXIuZ2V0KCkgYXBwZW5kRGF0
YTpkYXRhXTsKKyAgICBpZiAobV9xdWlja2xvb2tGaWxlSGFuZGxlKQorICAgICAgICBbbV9xdWlj
a2xvb2tGaWxlSGFuZGxlLmdldCgpIHdyaXRlRGF0YTpkYXRhXTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBRdWlja0xvb2tIYW5kbGU6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIGlm
IChtX2ZpbmlzaGVkTG9hZGluZ0RhdGFJbnRvQ29udmVydGVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBMT0coTmV0d29yaywgIlF1aWNrTG9va0hhbmRsZTo6ZGlkRmluaXNoTG9hZGlu
ZygpIik7CisgICAgbV9maW5pc2hlZExvYWRpbmdEYXRhSW50b0NvbnZlcnRlciA9IFlFUzsKKyAg
ICBbbV9jb252ZXJ0ZXIuZ2V0KCkgZmluaXNoZWRBcHBlbmRpbmdEYXRhXTsKKyAgICBpZiAobV9x
dWlja2xvb2tGaWxlSGFuZGxlKQorICAgICAgICBbbV9xdWlja2xvb2tGaWxlSGFuZGxlLmdldCgp
IGNsb3NlRmlsZV07CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUXVpY2tMb29rSGFuZGxl
OjpkaWRGYWlsKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlF1aWNrTG9va0hhbmRsZTo6ZGlkRmFp
bCgpIik7CisgICAgbV9xdWlja2xvb2tGaWxlSGFuZGxlID0gbnVsbHB0cjsKKyAgICAvLyByZW1v
dmVRTFByZXZpZXdDb252ZXJ0ZXJGb3JVUkwgZGVsZXRlcyB0aGUgdGVtcG9yYXJ5IGZpbGUgY3Jl
YXRlZC4KKyAgICByZW1vdmVRTFByZXZpZXdDb252ZXJ0ZXJGb3JVUkwoW21faGFuZGxlLT5maXJz
dFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9keSkgVVJMXSk7CisgICAg
W21fY29udmVydGVyLmdldCgpIGZpbmlzaENvbnZlcnRpbmddOworICAgIG1fY29udmVydGVyID0g
bnVsbHB0cjsKK30KKworUXVpY2tMb29rSGFuZGxlOjp+UXVpY2tMb29rSGFuZGxlKCkKK3sKKyAg
ICBMT0coTmV0d29yaywgIlF1aWNrTG9va0hhbmRsZTo6flF1aWNrTG9va0hhbmRsZSgpIik7Cisg
ICAgaWYgKG1fcXVpY2tsb29rRmlsZUhhbmRsZSkgeworICAgICAgICBtX3F1aWNrbG9va0ZpbGVI
YW5kbGUgPSBudWxscHRyOworICAgICAgICByZW1vdmVRTFByZXZpZXdDb252ZXJ0ZXJGb3JVUkwo
W21faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9k
eSkgVVJMXSk7CisgICAgfQorICAgIG1fY29udmVydGVyID0gbnVsbHB0cjsKKworICAgIFttX2Rl
bGVnYXRlLmdldCgpIGNsZWFySGFuZGxlXTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKFFVSUNL
X0xPT0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9S
ZXNvdXJjZUhhbmRsZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9z
L1Jlc291cmNlSGFuZGxlSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2N2I5YjE4NjY3NDQwZGViZmVmZGEx
ODA1Yjg0Y2I1NDc4NGM1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2lvcy9SZXNvdXJjZUhhbmRsZUlPUy5tbQpAQCAtMCwwICsxLDM5IEBACisv
LworLy8gIFJlc291cmNlSGFuZGxlSVBob25lLm1tCisvLyAgV2ViQ29yZQorLy8KKy8vICBDb3B5
cmlnaHQgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKworI2lmIFVT
RShDRk5FVFdPUkspCisKKyNpbXBvcnQgPENGTmV0d29yay9DRlNvY2tldFN0cmVhbVByaXYuaD4K
KyNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxSZXF1ZXN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDRk11dGFibGVEaWN0aW9u
YXJ5UmVmIFJlc291cmNlSGFuZGxlOjpjcmVhdGVTU0xQcm9wZXJ0aWVzRnJvbU5TVVJMUmVxdWVz
dChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgTlNTdHJpbmcgKmhvc3Qg
PSByZXF1ZXN0LnVybCgpLmhvc3QoKTsKKyAgICBOU0FycmF5ICpjZXJ0QXJyYXkgPSBbTlNVUkxS
ZXF1ZXN0IGFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3Q6aG9zdF07CisgICAg
Qk9PTCBhbGxvd3NBbnlDZXJ0aWZpY2F0ZSA9IFtOU1VSTFJlcXVlc3QgYWxsb3dzQW55SFRUUFND
ZXJ0aWZpY2F0ZUZvckhvc3Q6aG9zdF07CisgICAgaWYgKCFjZXJ0QXJyYXkgJiYgIWFsbG93c0Fu
eUNlcnRpZmljYXRlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIENGTXV0YWJsZURpY3Rpb25h
cnlSZWYgc3NsUHJvcHMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpOworICAgIGlmIChjZXJ0QXJyYXkpCisgICAgICAgIENGRGljdGlv
bmFyeVNldFZhbHVlKHNzbFByb3BzLCBfa0NGU3RyZWFtU1NMVHJ1c3RlZExlYWZDZXJ0aWZpY2F0
ZXMsIChDRlR5cGVSZWYpIGNlcnRBcnJheSk7CisKKyAgICBpZiAoYWxsb3dzQW55Q2VydGlmaWNh
dGUpCisgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHNzbFByb3BzLCBrQ0ZTdHJlYW1TU0xW
YWxpZGF0ZXNDZXJ0aWZpY2F0ZUNoYWluLCBrQ0ZCb29sZWFuRmFsc2UpOworICAgIHJldHVybiBz
c2xQcm9wczsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvaW9zL1dlYkNvcmVVUkxSZXNwb25zZUlPUy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9pb3MvV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTAwZGQ5MGI2MDJhMTZiYzJkYWM4NGU2MGExZmFkNzBiMmU1OTQ0NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1dlYkNvcmVVUkxSZXNw
b25zZUlPUy5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29yZVVSTFJlc3BvbnNl
SU9TX2gKKyNkZWZpbmUgV2ViQ29yZVVSTFJlc3BvbnNlSU9TX2gKKworI2lmZGVmIF9fT0JKQ19f
CisjaW5jbHVkZSAiV2ViQ29yZVVSTFJlc3BvbnNlLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNFKFFVSUNLX0xPT0spCisgICAgCitpbmxpbmUgYm9v
bCBzaG91bGRVc2VRdWlja0xvb2tGb3JNSU1FVHlwZShjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5
cGUpCit7CisgICAgaWYgKCghTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFnZU1J
TUVUeXBlKG1pbWVUeXBlKSAgICAgICAvLyBpZ25vcmUgc3VwcG9ydGVkIG5vbi1pbWFnZSBNSU1F
IHR5cGVzCisgICAgICAgICAmJiAhTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1J
TUVUeXBlKG1pbWVUeXBlKSAgICAgICAvLyBpZ25vcmUgc3VwcG9ydGVkIGltYWdlIE1JTUUgdHlw
ZXMKKyAgICAgICAgICYmIG1pbWVUeXBlICE9ICJ0ZXh0L2NzcyIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBjc3MKKyAgICAgICAgICYmIG1pbWVUeXBlICE9
ICJhcHBsaWNhdGlvbi9wZGYiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9y
ZSBwZGYKKyAgICAgICAgICkKKyAgICAgICAgfHwgbWltZVR5cGUgPT0gInRleHQvcGxhaW4iICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBrZWVwIHRleHQvcGxhaW4g
d2hpY2ggaXMgdG9vIGdlbmVyaWMgYW5kIGNhbiBoaWRlIHNvbWV0aGluZworICAgICAgICB8fCAo
bWltZVR5cGUgPT0gInRleHQveG1sIiB8fCBtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veG1sIikp
ICAgLy8gYW5kIGtlZXAgWE1MIHR5cGVzIGZvciAubW9iaWxlY29uZmlnIGZpbGVzCisgICAgewor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNl
bmRpZiAvLyBVU0UoUVVJQ0tfTE9PSykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gV2ViQ29yZVVSTFJlc3BvbnNlSU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvaW9zL1dlYkNvcmVVUkxSZXNwb25zZUlPUy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1dlYkNvcmVVUkxSZXNwb25zZUlPUy5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hZTdjYmRmMjU2NDM0NDVhMmVkMGMxYTVhZjQ0OGFhNmYyOTU2NmU4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvV2ViQ29yZVVS
TFJlc3BvbnNlSU9TLm1tCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmgiCisjaW1wb3J0ICJVVElVdGlsaXRpZXMu
aCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKworI2ltcG9ydCAiUXVpY2tM
b29rLmgiCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZp
Y2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKE1vYmlsZUNv
cmVTZXJ2aWNlcykKKworU09GVF9MSU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywgVVRUeXBlQ3JlYXRl
UHJlZmVycmVkSWRlbnRpZmllckZvclRhZywgQ0ZTdHJpbmdSZWYsIChDRlN0cmluZ1JlZiBpblRh
Z0NsYXNzLCBDRlN0cmluZ1JlZiBpblRhZywgQ0ZTdHJpbmdSZWYgaW5Db25mb3JtaW5nVG9VVEkp
LCAoaW5UYWdDbGFzcywgaW5UYWcsIGluQ29uZm9ybWluZ1RvVVRJKSkKKworU09GVF9MSU5LX0NP
TlNUQU5UKE1vYmlsZUNvcmVTZXJ2aWNlcywga1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwg
Q0ZTdHJpbmdSZWYpCisKKyNkZWZpbmUga1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiBnZXRr
VVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9uKCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2
b2lkIGFkanVzdE1JTUVUeXBlSWZOZWNlc3NhcnkoQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNl
KQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbWltZVR5cGUgPSB3a0dldENGVVJMUmVz
cG9uc2VNSU1FVHlwZShjZlJlc3BvbnNlKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVw
ZGF0ZWRNSU1FVHlwZSA9IG1pbWVUeXBlOworICAgIGlmICghdXBkYXRlZE1JTUVUeXBlKQorICAg
ICAgICB1cGRhdGVkTUlNRVR5cGUgPSBkZWZhdWx0TUlNRVR5cGUoKS5jcmVhdGVDRlN0cmluZygp
OworCisjaWYgVVNFKFFVSUNLX0xPT0spCisgICAgLy8gV2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUg
TUlNRSB0eXBlIGlzIGNvcnJlY3QsIHNvIHRoYXQgUXVpY2tMb29rJ3Mgd2ViIHBsdWdpbiBpcyBj
YWxsZWQgd2hlbiBuZWVkZWQuCisgICAgLy8gV2UgZmlsdGVyIHRoZSBiYXNpYyBNSU1FIHR5cGVz
IHNvIHRoYXQgd2UgZG9uJ3QgZG8gdW5uZWNlc3Nhcnkgd29yayBpbiBzdGFuZGFyZCBicm93c2lu
ZyBzaXR1YXRpb25zLgorICAgIGlmIChzaG91bGRVc2VRdWlja0xvb2tGb3JNSU1FVHlwZSgoTlNT
dHJpbmcgKil1cGRhdGVkTUlNRVR5cGUuZ2V0KCkpKSB7CisgICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gc3VnZ2VzdGVkRmlsZW5hbWUgPSBhZG9wdENGKHdrQ29weUNGVVJMUmVzcG9uc2VT
dWdnZXN0ZWRGaWxlbmFtZShjZlJlc3BvbnNlKSk7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gcXVpY2tMb29rTUlNRVR5cGUgPSBhZG9wdENGKChDRlN0cmluZ1JlZilRTFR5cGVDb3B5
QmVzdE1pbWVUeXBlRm9yRmlsZU5hbWVBbmRNaW1lVHlwZSgoTlNTdHJpbmcgKilzdWdnZXN0ZWRG
aWxlbmFtZS5nZXQoKSwgKE5TU3RyaW5nICopbWltZVR5cGUuZ2V0KCkpKTsKKyAgICAgICAgaWYg
KCFxdWlja0xvb2tNSU1FVHlwZSkgeworICAgICAgICAgICAgQ0ZVUkxSZWYgdXJsID0gd2tHZXRD
RlVSTFJlc3BvbnNlVVJMKGNmUmVzcG9uc2UpOworICAgICAgICAgICAgTlNVUkwgKm5zVVJMID0g
KE5TVVJMICopdXJsOworICAgICAgICAgICAgaWYgKFtuc1VSTCBpc0ZpbGVVUkxdKSB7CisgICAg
ICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBleHRlbnNpb24gPSBhZG9wdENGKENG
VVJMQ29weVBhdGhFeHRlbnNpb24odXJsKSk7CisgICAgICAgICAgICAgICAgaWYgKGV4dGVuc2lv
bikgeworICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aSA9IGFk
b3B0Q0YoVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZyhrVVRUYWdDbGFzc0Zp
bGVuYW1lRXh0ZW5zaW9uLCBleHRlbnNpb24uZ2V0KCksIG51bGxwdHIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcXVpY2tMb29rTUlNRVR5cGUgPSBtaW1lVHlwZUZyb21VVElUcmVlKHV0aS5nZXQo
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHF1aWNrTG9va01JTUVUeXBlKQorICAgICAgICAgICAgdXBkYXRlZE1JTUVUeXBlID0g
cXVpY2tMb29rTUlNRVR5cGU7CisgICAgfQorI2VuZGlmIC8vIFVTRShRVUlDS19MT09LKQorICAg
IGlmICghbWltZVR5cGUgfHwgQ0ZTdHJpbmdDb21wYXJlKG1pbWVUeXBlLmdldCgpLCB1cGRhdGVk
TUlNRVR5cGUuZ2V0KCksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpICE9IGtDRkNvbXBhcmVF
cXVhbFRvKQorICAgICAgICB3a1NldENGVVJMUmVzcG9uc2VNSU1FVHlwZShjZlJlc3BvbnNlLCB1
cGRhdGVkTUlNRVR5cGUuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlv
bk1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0
aW9uTWFjLm1tCmluZGV4IDFlYzc3NzdkMDA4MGYyMjQzZTdmNzAyNDQ3MGZiZTM4YTYxZTMwMDcu
LmM5YzMwZjdiNjYwY2Y0MWMzMTIxMDcxZGQ0ZWM1NWFmOTEyM2U3YzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFj
Lm1tCkBAIC00Myw3ICs0MywxMSBAQAogQGVuZAogCiBAaW50ZXJmYWNlIE5TVVJMQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UgKERldGFpbHMpCisjaWYgUExBVEZPUk0oSU9TKQorKyhOU1VSTEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlICopX2NyZWF0ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRm9yQ0ZB
dXRoQ2hhbGxlbmdlOihDRlVSTEF1dGhDaGFsbGVuZ2VSZWYpY2ZDaGFsbGVuZ2Ugc2VuZGVyOihp
ZCA8TlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRlcj4pc2VuZGVyOworI2Vsc2UKICso
TlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKV9hdXRoZW50aWNhdGlvbkNoYWxsZW5nZUZv
ckNGQXV0aENoYWxsZW5nZTooQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmKWNmQ2hhbGxlbmdlIHNlbmRl
cjooaWQgPE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTZW5kZXI+KXNlbmRlcjsKKyNlbmRp
ZgogQGVuZAogCiBAaW50ZXJmYWNlIE5TVVJMQ3JlZGVudGlhbCAoRGV0YWlscykKQEAgLTE1NCw3
ICsxNTgsMTEgQEAgTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqbWFjKGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJiBjb3JlQ2hhbGxlbmdlKQogICAgIGlmICghYXV0aENoYWxsZW5n
ZSkKICAgICAgICAgYXV0aENoYWxsZW5nZSA9IGFkb3B0Q0YoY3JlYXRlQ0YoY29yZUNoYWxsZW5n
ZSkpOwogICAgIFtjaGFsbGVuZ2VTZW5kZXIuZ2V0KCkgc2V0Q0ZDaGFsbGVuZ2U6YXV0aENoYWxs
ZW5nZS5nZXQoKV07CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHJldHVybiBbW05TVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgX2NyZWF0ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRm9yQ0ZBdXRo
Q2hhbGxlbmdlOmF1dGhDaGFsbGVuZ2UuZ2V0KCkgc2VuZGVyOmNoYWxsZW5nZVNlbmRlci5nZXQo
KV0gYXV0b3JlbGVhc2VdOworI2Vsc2UKICAgICByZXR1cm4gW1tOU1VSTEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlIF9hdXRoZW50aWNhdGlvbkNoYWxsZW5nZUZvckNGQXV0aENoYWxsZW5nZTphdXRo
Q2hhbGxlbmdlLmdldCgpIHNlbmRlcjpjaGFsbGVuZ2VTZW5kZXIuZ2V0KCldIGF1dG9yZWxlYXNl
XTsKKyNlbmRpZgogfQogCiBOU1VSTENyZWRlbnRpYWwgKm1hYyhjb25zdCBDcmVkZW50aWFsJiBj
b3JlQ3JlZGVudGlhbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL0NyZWRlbnRpYWxTdG9yYWdlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvQ3JlZGVudGlhbFN0b3JhZ2VNYWMubW0KaW5kZXggYWE1ZTdhZmYyOTQ1MzM4
NWJjODMxYTFjYjdkNGU3YzhjOGJjODczZi4uMDExMzE1YjI4YjQ0NWI5YmQ3MjI1ZGY2ZDU5NjRm
MDE4Yjc5ZDc3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9t
YWMvQ3JlZGVudGlhbFN0b3JhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvQ3JlZGVudGlhbFN0b3JhZ2VNYWMubW0KQEAgLTM5LDYgKzM5LDE3IEBAIENy
ZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6OmdldEZyb21QZXJzaXN0ZW50U3RvcmFnZShjb25z
dCBQcm90ZWN0aW9uU3BhY2UmIHByCiAgICAgcmV0dXJuIGNyZWRlbnRpYWwgPyBjb3JlKGNyZWRl
bnRpYWwpIDogQ3JlZGVudGlhbCgpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBDcmVk
ZW50aWFsU3RvcmFnZTo6c2F2ZVRvUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNw
YWNlJiBwcm90ZWN0aW9uU3BhY2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCit7Cisg
ICAgaWYgKGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VO
b25lKSB7CisgICAgICAgIENyZWRlbnRpYWwgc2Vzc2lvbkNyZWRlbnRpYWwoY3JlZGVudGlhbCwg
Q3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbik7CisgICAgICAgIFtbTlNVUkxDcmVkZW50
aWFsU3RvcmFnZSBzaGFyZWRDcmVkZW50aWFsU3RvcmFnZV0gc2V0RGVmYXVsdENyZWRlbnRpYWw6
bWFjKHNlc3Npb25DcmVkZW50aWFsKSBmb3JQcm90ZWN0aW9uU3BhY2U6bWFjKHByb3RlY3Rpb25T
cGFjZSldOworICAgIH0gZWxzZQorICAgICAgICBbW05TVVJMQ3JlZGVudGlhbFN0b3JhZ2Ugc2hh
cmVkQ3JlZGVudGlhbFN0b3JhZ2VdIHNldERlZmF1bHRDcmVkZW50aWFsOm1hYyhjcmVkZW50aWFs
KSBmb3JQcm90ZWN0aW9uU3BhY2U6bWFjKHByb3RlY3Rpb25TcGFjZSldOworfQorI2VuZGlmCisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vICFVU0UoQ0ZORVRXT1JLKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VFcnJv
ck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlRXJy
b3JNYWMubW0KaW5kZXggY2VmNmNkZjM0NmUwZDIzYzdkZjJiYzU3MGQwYTJhYzY2ZjE0ZDQyZS4u
Y2M3ZjQ1NDE2NmQ2ZDFkZTdlNDVlNzhjOTFiNmQ3MmZmYjFkOWM0NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VFcnJvck1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUVycm9yTWFjLm1t
CkBAIC0zMSwxMCArMzEsMTQ4IEBACiAjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9DRkVycm9yLmg+
CiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KIAorI2lmIFBMQVRGT1JNKElPUykK
KyNpbXBvcnQgPENGTmV0d29yay9DRlNvY2tldFN0cmVhbVByaXYuaD4KKyNpbXBvcnQgPEZvdW5k
YXRpb24vTlNVUkxFcnJvci5oPgorI2VuZGlmCisKIEBpbnRlcmZhY2UgTlNFcnJvciAoV2ViRXh0
cmFzKQogLSAoTlNTdHJpbmcgKilfd2ViX2xvY2FsaXplZERlc2NyaXB0aW9uOwogQGVuZAogCisj
aWYgUExBVEZPUk0oSU9TKQorCisvLyBUaGlzIHdvcmthcm91bmQgY29kZSBleGlzdHMgaGVyZSBi
ZWNhdXNlIHdlIGNhbid0IGNhbGwgdHJhbnNsYXRlVG9DRkVycm9yIGluIEZvdW5kYXRpb24uIE9u
Y2Ugd2UKKy8vIGhhdmUgdGhhdCwgd2UgY2FuIHJlbW92ZSB0aGlzIGNvZGUuIDxyZGFyOi8vcHJv
YmxlbS85ODM3NDE1PiBOZWVkIFNQSSBmb3IgdHJhbnNsYXRlQ0ZFcnJvcgorLy8gVGhlIGNvZGUg
aXMgbW9zdGx5IGlkZW50aWNhbCB0byBGb3VuZGF0aW9uIC0gSSBjaGFuZ2VkIHRoZSBjbGFzcyBu
YW1lIGFuZCBmaXhlZCBtaW5vciBjb21waWxlIGVycm9ycy4KKy8vIFdlIG5lZWQgdGhpcyBiZWNh
dXNlIGNsaWVudCBjb2RlIChTYWZhcmkpIHdhbnRzIGFuIE5TRXJyb3Igd2l0aCBOU1VSTEVycm9y
RG9tYWluIGFzIGl0cyBkb21haW4uCisvLyBUaGUgRm91bmRhdGlvbiBjb2RlIGJlbG93IGRvZXMg
dGhhdCBhbmQgc2V0cyB1cCBhcHByb3ByaWF0ZSBjZXJ0aWZpY2F0ZSBrZXlzIGluIHRoZSBOU0Vy
cm9yLgorCitAaW50ZXJmYWNlIFdlYkN1c3RvbU5TVVJMRXJyb3IgOiBOU0Vycm9yCisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFdlYkN1c3RvbU5TVVJMRXJyb3IKKworc3RhdGljIE5TRGljdGlv
bmFyeSogZGljdGlvbmFyeVRoYXRDYW5Db2RlKE5TRGljdGlvbmFyeSogc3JjKQoreworICAgIC8v
IFRoaXMgZnVuY3Rpb24gbWFrZXMgYSBjb3B5IG9mIGlucHV0IGRpY3Rpb25hcnksIG1vZGlmaWVz
IGl0IHN1Y2ggdGhhdCBpdCAic2hvdWxkIiAoYXMgbXVjaCBhcyB3ZSBjYW4gaGVscCBpdCkKKyAg
ICAvLyBub3QgY29udGFpbiBhbnkgb2JqZWN0cyB0aGF0IGRvIG5vdCBjb25mb3JtIHRvIE5TQ29k
aW5nIHByb3RvY29sLCBhbmQgcmV0dXJucyBpdCBhdXRvcmVsZWFzZWQuCisKKyAgICBOU011dGFi
bGVEaWN0aW9uYXJ5KiBkc3QgPSBbc3JjIG11dGFibGVDb3B5XTsKKworICAgIC8vIEtpbGwgdGhl
IGtub3duIHByb2JsZW0gZW50cmllcy4KKyAgICBbZHN0IHJlbW92ZU9iamVjdEZvcktleTpAIk5T
RXJyb3JQZWVyQ2VydGlmaWNhdGVDaGFpbktleSJdOyAvLyBOU0FycmF5IHdpdGggU2VjQ2VydGlm
aWNhdGVSZWYgb2JqZWN0cworICAgIFtkc3QgcmVtb3ZlT2JqZWN0Rm9yS2V5OkAiTlNFcnJvckNs
aWVudENlcnRpZmljYXRlQ2hhaW5LZXkiXTsgLy8gTlNBcnJheSB3aXRoIFNlY0NlcnRpZmljYXRl
UmVmIG9iamVjdHMKKyAgICBbZHN0IHJlbW92ZU9iamVjdEZvcktleTpOU1VSTEVycm9yRmFpbGlu
Z1VSTFBlZXJUcnVzdEVycm9yS2V5XTsgLy8gU2VjVHJ1c3RSZWYgb2JqZWN0CisgICAgW2RzdCBy
ZW1vdmVPYmplY3RGb3JLZXk6TlNVbmRlcmx5aW5nRXJyb3JLZXldOyAvLyAoSW1tdXRhYmxlKSBD
RkVycm9yIGNvbnRhaW5pbmcga0NGIGVxdWl2YWxlbnQgb2YgdGhlIGFib3ZlCisgICAgLy8gV2Ug
Y291bGQgcmVjb25zdGl0dXRlIHRoaXMgYnV0IGl0J3MgbW9yZSB0cm91YmxlIHRoYW4gaXQncyB3
b3J0aAorCisgICAgLy8gTm9uLWNvbXByZWhlbnNpdmUgc2FmZXR5IGNoZWNrOiAgS2lsbCB0b3At
bGV2ZWwgZGljdGlvbmFyeSBlbnRyaWVzIHRoYXQgZG9uJ3QgY29uZm9ybSB0byBOU0NvZGluZy4K
KyAgICAvLyBXZSBtYXkgaGl0IG9uZXMgd2UganVzdCByZW1vdmVkLCBidXQgdGhhdCdzIGZpbmUu
CisgICAgLy8gV2UgZG9uJ3QgaGFuZGxlIGFyYml0cmFyeSBvYmplY3RzIHRoYXQgY2xpZW50cyBo
YXZlIHN0dWZmZWQgaW50byB0aGUgZGljdGlvbmFyeSwgc2luY2Ugd2UgbWF5IG5vdCBrbm93IGhv
dyB0bworICAgIC8vIGdldCBhdCBpdHMgY29uZW50cyAoZS5nLiwgYSBDRkVycm9yIG9iamVjdCAt
LSB5b3UnZCBoYXZlIHRvIGtub3cgaXQgaGFkIGEgdXNlckluZm8gZGljdGlvbmFyeSBhbmQga2ls
bCB0aGluZ3MKKyAgICAvLyBpbnNpZGUgaXQpLgorICAgIFtzcmMgZW51bWVyYXRlS2V5c0FuZE9i
amVjdHNVc2luZ0Jsb2NrOl4oaWQga2V5LCBpZCBvYmosIEJPT0wqKSB7CisgICAgICAgIGlmICgh
IFtvYmogY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChOU0NvZGluZyldKSB7CisgICAgICAg
ICAgICBbZHN0IHJlbW92ZU9iamVjdEZvcktleTprZXldOworICAgICAgICB9CisgICAgICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBkcmlsbCBkb3duIGludG8gc3ViZGljdGlvbmFyaWVzLCBidXQgaXQg
c2VlbXMgbW9yZSB0cm91YmxlIHRoYW4gaXQncyB3b3J0aAorICAgIH1dOworCisgICAgcmV0dXJu
IFtkc3QgYXV0b3JlbGVhc2VdOworfQorCistICh2b2lkKWVuY29kZVdpdGhDb2RlcjooTlNDb2Rl
ciAqKWNvZGVyCit7CisgICAgTlNEaWN0aW9uYXJ5KiBuZXdVc2VySW5mbyA9IGRpY3Rpb25hcnlU
aGF0Q2FuQ29kZShbc2VsZiB1c2VySW5mb10pOworCisgICAgW1tOU0Vycm9yIGVycm9yV2l0aERv
bWFpbjpbc2VsZiBkb21haW5dIGNvZGU6W3NlbGYgY29kZV0gdXNlckluZm86bmV3VXNlckluZm9d
IGVuY29kZVdpdGhDb2Rlcjpjb2Rlcl07Cit9CisKK0BlbmQKKworCisjaWYgVVNFKENGTkVUV09S
SykKK3N0YXRpYyBOU0Vycm9yICpOU0Vycm9yRnJvbUNGRXJyb3IoQ0ZFcnJvclJlZiBjZkVycm9y
LCBOU1VSTCAqdXJsKQoreworICAgIENGSW5kZXggZXJyQ29kZSA9IENGRXJyb3JHZXRDb2RlKGNm
RXJyb3IpOworICAgIGlmIChDRkVxdWFsKENGRXJyb3JHZXREb21haW4oY2ZFcnJvciksIGtDRkVy
cm9yRG9tYWluQ0ZOZXR3b3JrKSAmJiBlcnJDb2RlIDw9IGtDRlVSTEVycm9yVW5rbm93biAmJiBl
cnJDb2RlID4gLTQwMDApIHsKKyAgICAgICAgLy8gVGhpcyBpcyBhbiBVUkwgZXJyb3IgYW5kIG5l
ZWRzIHRvIGJlIHRyYW5zbGF0ZWQgdG8gdGhlIE5TVVJMRXJyb3JEb21haW4KKyAgICAgICAgaWQg
a2V5c1sxMF0sIHZhbHVlc1sxMF07CisgICAgICAgIENGRGljdGlvbmFyeVJlZiB1c2VySW5mbyA9
IENGRXJyb3JDb3B5VXNlckluZm8oY2ZFcnJvcik7CisgICAgICAgIE5TRXJyb3IgKnJlc3VsdDsK
KyAgICAgICAgTlNJbnRlZ2VyIGNvdW50ID0gMDsKKworICAgICAgICBpZiAodXJsKSB7CisgICAg
ICAgICAgICBrZXlzW2NvdW50XSA9IE5TVVJMRXJyb3JGYWlsaW5nVVJMRXJyb3JLZXk7CisgICAg
ICAgICAgICB2YWx1ZXNbY291bnRdID0gdXJsOworICAgICAgICAgICAgY291bnQgKys7CisKKyAg
ICAgICAgICAgIGtleXNbY291bnRdID0gTlNVUkxFcnJvckZhaWxpbmdVUkxTdHJpbmdFcnJvcktl
eTsKKyAgICAgICAgICAgIHZhbHVlc1tjb3VudF0gPSBbdXJsIGFic29sdXRlU3RyaW5nXTsKKyAg
ICAgICAgICAgIGNvdW50ICsrOworICAgICAgICB9CisKKyAgICAgICAgdmFsdWVzW2NvdW50XSA9
IChpZClDRkRpY3Rpb25hcnlHZXRWYWx1ZSh1c2VySW5mbywga0NGRXJyb3JMb2NhbGl6ZWREZXNj
cmlwdGlvbktleSk7CisgICAgICAgIGlmICh2YWx1ZXNbY291bnRdKSB7CisgICAgICAgICAgICBr
ZXlzW2NvdW50XSA9IE5TTG9jYWxpemVkRGVzY3JpcHRpb25LZXk7CisgICAgICAgICAgICBjb3Vu
dCArKzsKKyAgICAgICAgfQorCisgICAgICAgIHZhbHVlc1tjb3VudF0gPSAoaWQpQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUodXNlckluZm8sIGtDRkVycm9yTG9jYWxpemVkRmFpbHVyZVJlYXNvbktleSk7
CisgICAgICAgIGlmICh2YWx1ZXNbY291bnRdKSB7CisgICAgICAgICAgICBrZXlzW2NvdW50XSA9
IE5TTG9jYWxpemVkRmFpbHVyZVJlYXNvbkVycm9yS2V5OworICAgICAgICAgICAgY291bnQgKys7
CisgICAgICAgIH0KKworICAgICAgICB2YWx1ZXNbY291bnRdID0gKGlkKUNGRGljdGlvbmFyeUdl
dFZhbHVlKHVzZXJJbmZvLCBrQ0ZFcnJvckxvY2FsaXplZFJlY292ZXJ5U3VnZ2VzdGlvbktleSk7
CisgICAgICAgIGlmICh2YWx1ZXNbY291bnRdKSB7CisgICAgICAgICAgICBrZXlzW2NvdW50XSA9
IE5TTG9jYWxpemVkUmVjb3ZlcnlTdWdnZXN0aW9uRXJyb3JLZXk7CisgICAgICAgICAgICBjb3Vu
dCArKzsKKyAgICAgICAgfQorCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisg
ICAgICAgIGlmICh1c2VySW5mbyAmJiAodmFsdWVzW2NvdW50XSA9IChpZClDRkRpY3Rpb25hcnlH
ZXRWYWx1ZSh1c2VySW5mbywga0NGU3RyZWFtUHJvcGVydHlTU0xQZWVyQ2VydGlmaWNhdGVzKSkg
IT0gbmlsKSB7CisgICAgICAgICAgICAvLyBOZWVkIHRvIHRyYW5zbGF0ZSB0aGUgY2VydAorICAg
ICAgICAgICAga2V5c1tjb3VudF0gPSBAIk5TRXJyb3JQZWVyQ2VydGlmaWNhdGVDaGFpbktleSI7
CisgICAgICAgICAgICBjb3VudCArKzsKKworICAgICAgICAgICAgdmFsdWVzW2NvdW50XSA9IChp
ZClDRkRpY3Rpb25hcnlHZXRWYWx1ZSh1c2VySW5mbywgX2tDRlN0cmVhbVByb3BlcnR5U1NMQ2xp
ZW50Q2VydGlmaWNhdGVzKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZXNbY291bnRdKSB7CisgICAg
ICAgICAgICAgICAga2V5c1tjb3VudF0gPSBAIk5TRXJyb3JDbGllbnRDZXJ0aWZpY2F0ZUNoYWlu
S2V5IjsKKyAgICAgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdmFsdWVzW2NvdW50XSA9IChpZClDRkRpY3Rpb25hcnlHZXRWYWx1ZSh1c2VySW5mbywg
X2tDRlN0cmVhbVByb3BlcnR5U1NMQ2xpZW50Q2VydGlmaWNhdGVTdGF0ZSk7CisgICAgICAgICAg
ICBpZiAodmFsdWVzW2NvdW50XSkgeworICAgICAgICAgICAgICAgIGtleXNbY291bnRdID0gQCJO
U0Vycm9yQ2xpZW50Q2VydGlmaWNhdGVTdGF0ZUtleSI7CisgICAgICAgICAgICAgICAgY291bnQg
Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKKworICAgICAgICBpZiAodXNlckluZm8gJiYgKHZhbHVlc1tjb3VudF0gPSAoaWQpQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUodXNlckluZm8sIGtDRlN0cmVhbVByb3BlcnR5U1NMUGVlclRydXN0KSkg
IT0gbmlsKSB7CisgICAgICAgICAgICBrZXlzW2NvdW50XSA9IE5TVVJMRXJyb3JGYWlsaW5nVVJM
UGVlclRydXN0RXJyb3JLZXk7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisKKyAg
ICAgICAga2V5c1tjb3VudF0gPSBOU1VuZGVybHlpbmdFcnJvcktleTsKKyAgICAgICAgdmFsdWVz
W2NvdW50XSA9IChpZCljZkVycm9yOworICAgICAgICBjb3VudCArKzsKKworICAgICAgICByZXN1
bHQgPSBbV2ViQ3VzdG9tTlNVUkxFcnJvciBlcnJvcldpdGhEb21haW46TlNVUkxFcnJvckRvbWFp
biBjb2RlOihlcnJDb2RlID09IGtDRlVSTEVycm9yVW5rbm93biA/IChDRkluZGV4KU5TVVJMRXJy
b3JVbmtub3duIDogZXJyQ29kZSkgdXNlckluZm86W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHM6dmFsdWVzIGZvcktleXM6a2V5cyBjb3VudDpjb3VudF1dOworICAgICAgICBpZiAo
dXNlckluZm8pCisgICAgICAgICAgICBDRlJlbGVhc2UodXNlckluZm8pOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICByZXR1cm4gKE5TRXJyb3IgKiljZkVycm9yOworfQorI2Vu
ZGlmIC8vIFVTRShDRk5FVFdPUkspCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIFJldGFpblB0cjxOU0Vycm9yPiBjcmVhdGVOU0Vycm9y
RnJvbVJlc291cmNlRXJyb3JCYXNlKGNvbnN0IFJlc291cmNlRXJyb3JCYXNlJiByZXNvdXJjZUVy
cm9yKQpAQCAtNzcsNiArMjE1LDE0IEBAIE5TRXJyb3IgKlJlc291cmNlRXJyb3I6Om5zRXJyb3Io
KSBjb25zdAogICAgIGlmIChtX3BsYXRmb3JtRXJyb3IpIHsKICAgICAgICAgQ0ZFcnJvclJlZiBl
cnJvciA9IG1fcGxhdGZvcm1FcnJvci5nZXQoKTsKICAgICAgICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gdXNlckluZm8gPSBhZG9wdENGKENGRXJyb3JDb3B5VXNlckluZm8oZXJyb3IpKTsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIG1fcGxhdGZvcm1OU0Vycm9yID0gTlNFcnJvckZy
b21DRkVycm9yKGVycm9yLCAoTlNVUkwgKilbKE5TRGljdGlvbmFyeSAqKXVzZXJJbmZvLmdldCgp
IG9iamVjdEZvcktleTooaWQpIGtDRlVSTEVycm9yRmFpbGluZ1VSTEVycm9yS2V5XSk7CisgICAg
ICAgIC8vIElmIE5TRXJyb3JGcm9tQ0ZFcnJvciBjcmVhdGVkIGEgbmV3IE5TRXJyb3IgZm9yIHVz
LCByZXR1cm4gdGhhdC4KKyAgICAgICAgaWYgKG1fcGxhdGZvcm1OU0Vycm9yLmdldCgpICE9IChO
U0Vycm9yICopZXJyb3IpCisgICAgICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybU5TRXJyb3IuZ2V0
KCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGwgdGhyb3VnaCB0byBjcmVhdGUgYSBuZXcg
TlNFcnJvciBmcm9tIHRoZSBDRkVycm9yLgorI2VuZGlmCiAgICAgICAgIG1fcGxhdGZvcm1OU0Vy
cm9yID0gYWRvcHROUyhbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOihOU1N0cmluZyAq
KUNGRXJyb3JHZXREb21haW4oZXJyb3IpIGNvZGU6Q0ZFcnJvckdldENvZGUoZXJyb3IpIHVzZXJJ
bmZvOihOU0RpY3Rpb25hcnkgKil1c2VySW5mby5nZXQoKV0pOwogICAgICAgICByZXR1cm4gbV9w
bGF0Zm9ybU5TRXJyb3IuZ2V0KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQppbmRleCBlNzNjNjVk
MjI3N2Q5ODkyMmU2NzhlYzY1YmVmOGY4YzdhOTBlYjRiLi4zZDA0NTE4MTMxNzFhMWI3ODIzYjEx
NmJmMzVkZjExNjk1YzUyNGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQpAQCAtNTYsNiArNTYsMjEgQEAK
ICNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8Q0ZOZXR3b3JrL0NGVVJMUmVxdWVzdC5o
PgorCisjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCIKKyNpbXBvcnQgIldl
YkNvcmVUaHJlYWRSdW4uaCIKKworQGludGVyZmFjZSBOU1VSTFJlcXVlc3QgKGlPU0RldGFpbHMp
CistIChDRlVSTFJlcXVlc3RSZWYpIF9DRlVSTFJlcXVlc3Q7CitAZW5kCisjZW5kaWYKKworI2lm
IFVTRShRVUlDS19MT09LKQorI2ltcG9ydCAiUXVpY2tMb29rLmgiCisjZW5kaWYKKwogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbnRlcmZhY2UgTlNVUkxDb25uZWN0aW9uIChEZXRhaWxz
KQpAQCAtOTQsNyArMTA5LDE5IEBAIFJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQog
ICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlc3Ryb3llZCIsIHRoaXMpOwogfQogCisjaWYg
UExBVEZPUk0oSU9TKQorc3RhdGljIGJvb2wgc3luY2hyb25vdXNXaWxsU2VuZFJlcXVlc3RFbmFi
bGVkKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBkaXNhYmxlZCA9IFtbTlNVc2VyRGVmYXVsdHMgc3Rh
bmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJLaXREaXNhYmxlU3luY2hyb25vdXNX
aWxsU2VuZFJlcXVlc3RQcmVmZXJlbmNlS2V5Il07CisgICAgcmV0dXJuICFkaXNhYmxlZDsKK30K
KyNlbmRpZgorCisjaWYgIVBMQVRGT1JNKElPUykKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0
ZU5TVVJMQ29ubmVjdGlvbihpZCBkZWxlZ2F0ZSwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCisjZWxzZQordm9pZCBSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlTlNVUkxDb25uZWN0aW9uKGlkIGRlbGVnYXRlLCBib29sIHNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgTlNEaWN0aW9uYXJ5ICpjb25u
ZWN0aW9uUHJvcGVydGllcykKKyNlbmRpZgogewogICAgIC8vIENyZWRlbnRpYWxzIGZvciBmdHAg
Y2FuIG9ubHkgYmUgcGFzc2VkIGluIFVSTCwgdGhlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlOiBkZWxlZ2F0ZSBjYWxsIHdvbid0IGJlIG1hZGUuCiAgICAgaWYg
KCghZC0+bV91c2VyLmlzRW1wdHkoKSB8fCAhZC0+bV9wYXNzLmlzRW1wdHkoKSkgJiYgIWZpcnN0
UmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgewpAQCAtMTM0LDE5ICsx
NjEsMzMgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlTlNVUkxDb25uZWN0aW9uKGlkIGRl
bGVnYXRlLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWwKIAogICAgIEFTU0VSVChbTlNVUkxDb25u
ZWN0aW9uIGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3RvcihfaW5pdFdpdGhSZXF1
ZXN0OmRlbGVnYXRlOnVzZXNDYWNoZTptYXhDb250ZW50TGVuZ3RoOnN0YXJ0SW1tZWRpYXRlbHk6
Y29ubmVjdGlvblByb3BlcnRpZXM6KV0pOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIE5TRGlj
dGlvbmFyeSAqc3RyZWFtUHJvcGVydGllc0Zyb21DbGllbnQgPSBbY29ubmVjdGlvblByb3BlcnRp
ZXMgb2JqZWN0Rm9yS2V5OkAia0NGVVJMQ29ubmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMi
XTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpzdHJlYW1Qcm9wZXJ0aWVzID0gc3RyZWFtUHJv
cGVydGllc0Zyb21DbGllbnQgPyBbW3N0cmVhbVByb3BlcnRpZXNGcm9tQ2xpZW50IG11dGFibGVD
b3B5XSBhdXRvcmVsZWFzZV0gOiBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKyNl
bHNlCiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqc3RyZWFtUHJvcGVydGllcyA9IFtOU011dGFi
bGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOworI2VuZGlmCiAKICAgICBpZiAoIXNob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlKQogICAgICAgICBbc3RyZWFtUHJvcGVydGllcyBzZXRPYmplY3Q6QCJX
ZWJLaXRQcml2YXRlU2Vzc2lvbiIgZm9yS2V5OkAiX2tDRlVSTENvbm5lY3Rpb25TZXNzaW9uSUQi
XTsKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmIFBM
QVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAg
ICAgUmV0YWluUHRyPENGRGF0YVJlZj4gc291cmNlQXBwbGljYXRpb25BdWRpdERhdGEgPSBkLT5t
X2NvbnRleHQtPnNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhKCk7CiAgICAgaWYgKHNvdXJjZUFw
cGxpY2F0aW9uQXVkaXREYXRhKQogICAgICAgICBbc3RyZWFtUHJvcGVydGllcyBzZXRPYmplY3Q6
KE5TRGF0YSAqKXNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhLmdldCgpIGZvcktleTpAImtDRlN0
cmVhbVByb3BlcnR5U291cmNlQXBwbGljYXRpb24iXTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
SU9TKQorICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKnByb3BlcnR5RGljdGlvbmFyeSA9IFtOU011
dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTpjb25uZWN0aW9uUHJvcGVy
dGllc107CisgICAgW3Byb3BlcnR5RGljdGlvbmFyeSBzZXRPYmplY3Q6c3RyZWFtUHJvcGVydGll
cyBmb3JLZXk6QCJrQ0ZVUkxDb25uZWN0aW9uU29ja2V0U3RyZWFtUHJvcGVydGllcyJdOworICAg
IGNvbnN0IGJvb2wgdXNlc0NhY2hlID0gZmFsc2U7CisgICAgaWYgKHN5bmNocm9ub3VzV2lsbFNl
bmRSZXF1ZXN0RW5hYmxlZCgpKQorICAgICAgICBDRlVSTFJlcXVlc3RTZXRTaG91bGRTdGFydFN5
bmNocm9ub3VzbHkoW25zUmVxdWVzdCBfQ0ZVUkxSZXF1ZXN0XSwgMSk7CisjZWxzZQogICAgIE5T
RGljdGlvbmFyeSAqcHJvcGVydHlEaWN0aW9uYXJ5ID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5
V2l0aE9iamVjdDpzdHJlYW1Qcm9wZXJ0aWVzIGZvcktleTpAImtDRlVSTENvbm5lY3Rpb25Tb2Nr
ZXRTdHJlYW1Qcm9wZXJ0aWVzIl07Ci0gICAgZC0+bV9jb25uZWN0aW9uID0gYWRvcHROUyhbW05T
VVJMQ29ubmVjdGlvbiBhbGxvY10gX2luaXRXaXRoUmVxdWVzdDpuc1JlcXVlc3QgZGVsZWdhdGU6
ZGVsZWdhdGUgdXNlc0NhY2hlOllFUyBtYXhDb250ZW50TGVuZ3RoOjAgc3RhcnRJbW1lZGlhdGVs
eTpOTyBjb25uZWN0aW9uUHJvcGVydGllczpwcm9wZXJ0eURpY3Rpb25hcnldKTsKKyAgICBjb25z
dCBib29sIHVzZXNDYWNoZSA9IHRydWU7CisjZW5kaWYKKyAgICBkLT5tX2Nvbm5lY3Rpb24gPSBh
ZG9wdE5TKFtbTlNVUkxDb25uZWN0aW9uIGFsbG9jXSBfaW5pdFdpdGhSZXF1ZXN0Om5zUmVxdWVz
dCBkZWxlZ2F0ZTpkZWxlZ2F0ZSB1c2VzQ2FjaGU6dXNlc0NhY2hlIG1heENvbnRlbnRMZW5ndGg6
MCBzdGFydEltbWVkaWF0ZWx5Ok5PIGNvbm5lY3Rpb25Qcm9wZXJ0aWVzOnByb3BlcnR5RGljdGlv
bmFyeV0pOwogfQogCiBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydCgpCkBAIC0xNjgsMTEgKzIw
OSwyNCBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydCgpCiAKICAgICBkLT5tX25lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzID0gZC0+bV9jb250ZXh0LT5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygp
OwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBjcmVhdGVOU1VSTENvbm5lY3Rpb24oCiAgICAg
ICAgIFJlc291cmNlSGFuZGxlOjpkZWxlZ2F0ZSgpLAogICAgICAgICBzaG91bGRVc2VDcmVkZW50
aWFsU3RvcmFnZSwKICAgICAgICAgZC0+bV9zaG91bGRDb250ZW50U25pZmYgfHwgZC0+bV9jb250
ZXh0LT5sb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkpOworI2Vsc2UKKyAgICBjcmVh
dGVOU1VSTENvbm5lY3Rpb24oCisgICAgICAgIGQtPm1fcHJveHkuZ2V0KCksCisgICAgICAgIHNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLAorICAgICAgICBkLT5tX3Nob3VsZENvbnRlbnRTbmlm
ZiB8fCBkLT5tX2NvbnRleHQtPmxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSwKKyAg
ICAgICAgKE5TRGljdGlvbmFyeSAqKWNsaWVudCgpLT5jb25uZWN0aW9uUHJvcGVydGllcyh0aGlz
KSk7CisjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBOU1VSTENvbm5lY3Rpb24gKnVy
bENvbm5lY3Rpb24gPSBjb25uZWN0aW9uKCk7CisgICAgW3VybENvbm5lY3Rpb24gc2NoZWR1bGVJ
blJ1bkxvb3A6V2ViVGhyZWFkTlNSdW5Mb29wKCkgZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9k
ZV07CisgICAgW3VybENvbm5lY3Rpb24gc3RhcnRdOworI2Vsc2UKICAgICBib29sIHNjaGVkdWxl
ZCA9IGZhbHNlOwogICAgIGlmIChTY2hlZHVsZVBhaXJIYXNoU2V0KiBzY2hlZHVsZWRQYWlycyA9
IGQtPm1fY29udGV4dC0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCkpIHsKICAgICAgICAgU2NoZWR1
bGVQYWlySGFzaFNldDo6aXRlcmF0b3IgZW5kID0gc2NoZWR1bGVkUGFpcnMtPmVuZCgpOwpAQCAt
MTk2LDYgKzI1MCw3IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KCkKICAgICAgICAgW2Nv
bm5lY3Rpb24oKSBzdGFydF07CiAgICAgZWxzZQogICAgICAgICBkLT5tX3N0YXJ0V2hlblNjaGVk
dWxlZCA9IHRydWU7CisjZW5kaWYKIAogICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIHN0YXJ0
aW5nIGNvbm5lY3Rpb24gJXAgZm9yICVAIiwgdGhpcywgY29ubmVjdGlvbigpLCBmaXJzdFJlcXVl
c3QoKS5uc1VSTFJlcXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9keSkpOwogICAgIApAQCAtMjMwLDYg
KzI4NSw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9hZGluZyhi
b29sIGRlZmVycykKIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2NoZWR1bGUoU2NoZWR1bGVQYWly
KiBwYWlyKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgTlNSdW5Mb29wICpydW5Mb29wID0g
cGFpci0+bnNSdW5Mb29wKCk7CiAgICAgaWYgKCFydW5Mb29wKQogICAgICAgICByZXR1cm47CkBA
IC0yMzgsMTIgKzI5NCwxOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzY2hlZHVsZShTY2hlZHVs
ZVBhaXIqIHBhaXIpCiAgICAgICAgIFtkLT5tX2Nvbm5lY3Rpb24uZ2V0KCkgc3RhcnRdOwogICAg
ICAgICBkLT5tX3N0YXJ0V2hlblNjaGVkdWxlZCA9IGZhbHNlOwogICAgIH0KKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHBhaXIpOworI2VuZGlmCiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnVu
c2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBwYWlyKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAg
aWYgKE5TUnVuTG9vcCAqcnVuTG9vcCA9IHBhaXItPm5zUnVuTG9vcCgpKQogICAgICAgICBbZC0+
bV9jb25uZWN0aW9uLmdldCgpIHVuc2NoZWR1bGVGcm9tUnVuTG9vcDpydW5Mb29wIGZvck1vZGU6
KE5TU3RyaW5nICopcGFpci0+bW9kZSgpXTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhaXIp
OworI2VuZGlmCiB9CiAKIGlkIFJlc291cmNlSGFuZGxlOjpkZWxlZ2F0ZSgpCkBAIC0yOTksMTAg
KzM2MiwxOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleAogICAgICAgICByZXR1cm47CiAgICAg
fQogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBoYW5kbGUtPmNyZWF0ZU5TVVJMQ29ubmVjdGlv
bigKICAgICAgICAgaGFuZGxlLT5kZWxlZ2F0ZSgpLAogICAgICAgICBzdG9yZWRDcmVkZW50aWFs
cyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLAogICAgICAgICBoYW5kbGUtPnNob3VsZENvbnRl
bnRTbmlmZigpIHx8IGNvbnRleHQtPmxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSk7
CisjZWxzZQorICAgIGhhbmRsZS0+Y3JlYXRlTlNVUkxDb25uZWN0aW9uKAorICAgICAgICBoYW5k
bGUtPmRlbGVnYXRlKCksIC8vIEEgc3luY2hyb25vdXMgcmVxdWVzdCBjYW5ub3QgdHVybiBpbnRv
IGEgZG93bmxvYWQsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJveHkgdGhlIGRlbGVnYXRlLgor
ICAgICAgICBzdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLAorICAg
ICAgICBzaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVQb2xpY3koY29udGV4dCwgcmVxdWVzdC51
cmwoKSksCisgICAgICAgIGhhbmRsZS0+c2hvdWxkQ29udGVudFNuaWZmKCkgfHwgKGNvbnRleHQg
JiYgY29udGV4dC0+bG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpKSwKKyAgICAgICAg
KE5TRGljdGlvbmFyeSAqKWhhbmRsZS0+Y2xpZW50KCktPmNvbm5lY3Rpb25Qcm9wZXJ0aWVzKGhh
bmRsZS5nZXQoKSkpOworI2VuZGlmCiAKICAgICBbaGFuZGxlLT5jb25uZWN0aW9uKCkgc2NoZWR1
bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBjdXJyZW50UnVuTG9vcF0gZm9yTW9kZTooTlNTdHJpbmcg
KilzeW5jaHJvbm91c0xvYWRSdW5Mb29wTW9kZSgpXTsKICAgICBbaGFuZGxlLT5jb25uZWN0aW9u
KCkgc3RhcnRdOwpAQCAtNDkyLDYgKzU2NCwxOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbAog
ICAgICAgICB9CiAgICAgfQogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIElmIHRoZSBjaGFs
bGVuZ2UgaXMgZm9yIGEgcHJveHkgcHJvdGVjdGlvbiBzcGFjZSwgbG9vayBmb3IgZGVmYXVsdCBj
cmVkZW50aWFscyBpbgorICAgIC8vIHRoZSBrZXljaGFpbi4gIENGTmV0d29yayB1c2VkIHRvIGhh
bmRsZSB0aGlzIHVudGlsIFdlYkNvcmUgd2FzIGNoYW5nZWQgdG8gYWx3YXlzCisgICAgLy8gcmV0
dXJuIE5PIHRvIC1jb25uZWN0aW9uU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U6IGZvciA8cmRh
cjovL3Byb2JsZW0vNzcwNDk0Mz4uCisgICAgaWYgKCFjaGFsbGVuZ2UucHJldmlvdXNGYWlsdXJl
Q291bnQoKSAmJiBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkuaXNQcm94eSgpKSB7CisgICAg
ICAgIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKm1hY0NoYWxsZW5nZSA9IG1hYyhjaGFs
bGVuZ2UpOworICAgICAgICBpZiAoTlNVUkxDcmVkZW50aWFsICpjcmVkZW50aWFsID0gW1tOU1VS
TENyZWRlbnRpYWxTdG9yYWdlIHNoYXJlZENyZWRlbnRpYWxTdG9yYWdlXSBkZWZhdWx0Q3JlZGVu
dGlhbEZvclByb3RlY3Rpb25TcGFjZTpbbWFjQ2hhbGxlbmdlIHByb3RlY3Rpb25TcGFjZV1dKSB7
CisgICAgICAgICAgICBbY2hhbGxlbmdlLnNlbmRlcigpIHVzZUNyZWRlbnRpYWw6Y3JlZGVudGlh
bCBmb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTptYWNDaGFsbGVuZ2VdOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogICAg
IGQtPm1fY3VycmVudE1hY0NoYWxsZW5nZSA9IGNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKCk7CiAgICAgZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlID0gY29yZShkLT5tX2N1
cnJlbnRNYWNDaGFsbGVuZ2UpOwogICAgIGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZS5zZXRBdXRo
ZW50aWNhdGlvbkNsaWVudCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQppbmRleCA4NjkxNDA1MGZi
ZmRiOGE2YTVmZTdiYmM5YTM4MGY4ODI4ZmM0MTIyLi4zYzc4YzY4NjEwNTQzMmFmYmIyOGJjM2Ix
N2IxN2U4MjhlNDk2N2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCkBAIC01OSw2ICs1OSw5IEBAIE5T
VVJMUmVxdWVzdCAqUmVzb3VyY2VSZXF1ZXN0Ojpuc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQ
b2xpY3kgYm9keVBvbGljeSkgY29uCiAKIFJlc291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1ZXN0
KE5TVVJMUmVxdWVzdCAqbnNSZXF1ZXN0KQogICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSgpCisj
aWYgUExBVEZPUk0oSU9TKQorICAgICwgbV9tYWluUmVzb3VyY2VSZXF1ZXN0KGZhbHNlKQorI2Vu
ZGlmCiAgICAgLCBtX2NmUmVxdWVzdChbbnNSZXF1ZXN0IF9DRlVSTFJlcXVlc3RdKQogICAgICwg
bV9uc1JlcXVlc3QobnNSZXF1ZXN0KQogewpAQCAtNjYsOCArNjksMjUgQEAgUmVzb3VyY2VSZXF1
ZXN0OjpSZXNvdXJjZVJlcXVlc3QoTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3QpCiAKIHZvaWQgUmVz
b3VyY2VSZXF1ZXN0Ojp1cGRhdGVOU1VSTFJlcXVlc3QoKQogeworI2lmIFBMQVRGT1JNKElPUykK
KyAgICAvLyBUaGVyZSBpcyBjbGllbnQgY29kZSB0aGF0IGV4dGVuZHMgTlNVUkxSZXF1ZXN0IGFu
ZCBleHBlY3RzIHRvIGdldCBiYWNrLCBpbiB0aGUgZGVsZWdhdGUKKyAgICAvLyBjYWxsYmFja3Ms
IGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIHRoYXQgdGhleSBwYXNzZWQgaW50byBXZWJLaXQu
IFRvIGtlZXAgdGhlbiBydW5uaW5nLCB3ZQorICAgIC8vIGNyZWF0ZSBhbiBvYmplY3Qgb2YgdGhl
IHNhbWUgdHlwZSBhbmQgcmV0dXJuIHRoYXQuIFNlZSA8cmRhcjovLzk4NDM1ODI+LgorICAgIC8v
IEFsc28sIGRldmVsb3BlcnMgcmVhbGx5IHJlYWxseSB3YW50IGFuIE5TTXV0YWJsZVVSTFJlcXVl
c3Qgc28gdHJ5IHRvIGNyZWF0ZSBhbgorICAgIC8vIE5TTXV0YWJsZVVSTFJlcXVlc3QgaW5zdGVh
ZCBvZiBOU1VSTFJlcXVlc3QuCisgICAgc3RhdGljIENsYXNzIG5zVVJMUmVxdWVzdENsYXNzID0g
W05TVVJMUmVxdWVzdCBjbGFzc107CisgICAgc3RhdGljIENsYXNzIG5zTXV0YWJsZVVSTFJlcXVl
c3RDbGFzcyA9IFtOU011dGFibGVVUkxSZXF1ZXN0IGNsYXNzXTsKKyAgICBDbGFzcyByZXF1ZXN0
Q2xhc3MgPSBbbV9uc1JlcXVlc3QuZ2V0KCkgY2xhc3NdOworCisgICAgaWYgKCFyZXF1ZXN0Q2xh
c3MgfHwgcmVxdWVzdENsYXNzID09IG5zVVJMUmVxdWVzdENsYXNzKQorICAgICAgICByZXF1ZXN0
Q2xhc3MgPSBuc011dGFibGVVUkxSZXF1ZXN0Q2xhc3M7CisKKyAgICBpZiAobV9jZlJlcXVlc3Qp
CisgICAgICAgIG1fbnNSZXF1ZXN0ID0gYWRvcHROUyhbW3JlcXVlc3RDbGFzcyBhbGxvY10gX2lu
aXRXaXRoQ0ZVUkxSZXF1ZXN0Om1fY2ZSZXF1ZXN0LmdldCgpXSk7CisjZWxzZQogICAgIGlmICht
X2NmUmVxdWVzdCkKICAgICAgICAgbV9uc1JlcXVlc3QgPSBhZG9wdE5TKFtbTlNVUkxSZXF1ZXN0
IGFsbG9jXSBfaW5pdFdpdGhDRlVSTFJlcXVlc3Q6bV9jZlJlcXVlc3QuZ2V0KCldKTsKKyNlbmRp
ZgogfQogCiAjZWxzZQpAQCAtMjMyLDggKzI1MiwxMCBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6
dXBkYXRlRnJvbURlbGVnYXRlUHJlc2VydmluZ09sZEhUVFBCb2R5KGNvbnN0IFJlc291cmNlUmVx
dQogCiB2b2lkIFJlc291cmNlUmVxdWVzdDo6YXBwbHlXZWJBcmNoaXZlSGFja0Zvck1haWwoKQog
eworI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gSGFjayBiZWNhdXNlIE1haWwgY2hlY2tzIGZv
ciB0aGlzIHByb3BlcnR5IHRvIGRldGVjdCBkYXRhIC8gYXJjaGl2ZSBsb2FkcwogICAgIFtOU1VS
TFByb3RvY29sIHNldFByb3BlcnR5OkAiIiBmb3JLZXk6QCJXZWJEYXRhUmVxdWVzdCIgaW5SZXF1
ZXN0OihOU011dGFibGVVUkxSZXF1ZXN0ICopbnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJv
ZHkpXTsKKyNlbmRpZgogfQogCiB2b2lkIFJlc291cmNlUmVxdWVzdDo6c2V0U3RvcmFnZVNlc3Np
b24oQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbikKQEAgLTI0NCw2ICsyNjYs
NyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6c2V0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9yYWdl
U2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbikKICAgICAKICNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JL
KQogCisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBib29sIGluaXRRdWlja0xvb2tSZXNvdXJj
ZUNhY2hpbmdRdWlya3MoKQogewogICAgIGlmIChhcHBsaWNhdGlvbklzU2FmYXJpKCkpCkBAIC0y
NjIsMTEgKzI4NSwxNiBAQCBzdGF0aWMgYm9vbCBpbml0UXVpY2tMb29rUmVzb3VyY2VDYWNoaW5n
UXVpcmtzKCkKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQorI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCiAKIGJvb2wgUmVzb3VyY2VSZXF1ZXN0Ojp1c2VRdWlja0xvb2tSZXNvdXJjZUNhY2hp
bmdRdWlya3MoKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgc3RhdGljIGJvb2wgZmxhZyA9
IGluaXRRdWlja0xvb2tSZXNvdXJjZUNhY2hpbmdRdWlya3MoKTsKICAgICByZXR1cm4gZmxhZzsK
KyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvbWFjL1VUSVV0aWxpdGllcy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvbWFjL1VUSVV0aWxpdGllcy5tbQppbmRleCA0MjU5Mjk4MDBmNWFiZmE3ZDYyZDYz
YmExNGQ5ZTg4MTJiNjJmZjMzLi42N2I4ZDVlNTVmMDc2ZjgyM2Y1ZTU2MWNmNDVjNmYzOWNmMzlk
MjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9VVElV
dGlsaXRpZXMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvVVRJ
VXRpbGl0aWVzLm1tCkBAIC0zNCw2ICszNCw3IEBAIFNPRlRfTElOS19GUkFNRVdPUksoTW9iaWxl
Q29yZVNlcnZpY2VzKQogCiBTT0ZUX0xJTksoTW9iaWxlQ29yZVNlcnZpY2VzLCBVVFR5cGVDb3B5
RGVjbGFyYXRpb24sIENGRGljdGlvbmFyeVJlZiwgKENGU3RyaW5nUmVmIGluVVRJKSwgKGluVVRJ
KSkKIFNPRlRfTElOSyhNb2JpbGVDb3JlU2VydmljZXMsIFVUVHlwZUNvcHlQcmVmZXJyZWRUYWdX
aXRoQ2xhc3MsIENGU3RyaW5nUmVmLCAoQ0ZTdHJpbmdSZWYgaW5VVEksIENGU3RyaW5nUmVmIGlu
VGFnQ2xhc3MpLCAoaW5VVEksIGluVGFnQ2xhc3MpKQorU09GVF9MSU5LKE1vYmlsZUNvcmVTZXJ2
aWNlcywgVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZywgQ0ZTdHJpbmdSZWYs
IChDRlN0cmluZ1JlZiBpblRhZ0NsYXNzLCBDRlN0cmluZ1JlZiBpblRhZywgQ0ZTdHJpbmdSZWYg
aW5Db25mb3JtaW5nVG9VVEkpLCAoaW5UYWdDbGFzcywgaW5UYWcsIGluQ29uZm9ybWluZ1RvVVRJ
KSkKIAogU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVTZXJ2aWNlcywga1VUVHlwZUNvbmZv
cm1zVG9LZXksIENGU3RyaW5nUmVmKQogU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVTZXJ2
aWNlcywga1VUVGFnQ2xhc3NNSU1FVHlwZSwgQ0ZTdHJpbmdSZWYpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0Rl
bGVnYXRlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJl
c291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5tbQppbmRleCBiMTM0ZjU1ZjE2ZTEwYTI1M2U2YzJlZjAw
M2ZiNjgzMGE3NDFjMzBlLi45NzNiYTYyYzRkODhhMTgwNGMwOGNkYzc4Y2M2NzIwMWZkOGI3YzNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3Jl
UmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUubW0KQEAgLTkzLDEw
ICs5MywxNCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogICAgIExPRyhOZXR3b3JrLCAi
SGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb25TaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZTol
cCIsIG1faGFuZGxlLCBjb25uZWN0aW9uKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICByZXR1
cm4gTk87CisjZWxzZQogICAgIGlmICghbV9oYW5kbGUpCiAgICAgICAgIHJldHVybiBOTzsKIAog
ICAgIHJldHVybiBtX2hhbmRsZS0+c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKKyNlbmRp
ZgogfQogCiAtICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24g
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlICopY2hhbGxlbmdlCkBAIC0xNDEsNyArMTQ1LDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIC0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlv
biBkaWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyCiB7CisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7CisjZW5kaWYKIAogICAgIExPRyhO
ZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgZGlkUmVjZWl2ZVJlc3Bv
bnNlOiVwIChIVFRQIHN0YXR1cyAlZCwgcmVwb3J0ZWQgTUlNRVR5cGUgJyVzJykiLCBtX2hhbmRs
ZSwgY29ubmVjdGlvbiwgciwgW3IgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzdGF0dXND
b2RlKV0gPyBbKGlkKXIgc3RhdHVzQ29kZV0gOiAwLCBbW3IgTUlNRVR5cGVdIFVURjhTdHJpbmdd
KTsKIApAQCAtMTUzLDggKzE1OSwxNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBp
ZiAoc3RhdHVzQ29kZSAhPSAzMDQpCiAgICAgICAgIGFkanVzdE1JTUVUeXBlSWZOZWNlc3Nhcnko
W3IgX0NGVVJMUmVzcG9uc2VdKTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKFttX2hh
bmRsZS0+Zmlyc3RSZXF1ZXN0KCkubnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpIF9w
cm9wZXJ0eUZvcktleTpAIkZvcmNlSFRNTE1JTUVUeXBlIl0pCiAgICAgICAgIFtyIF9zZXRNSU1F
VHlwZTpAInRleHQvaHRtbCJdOworI2VuZGlmCisKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBt
X2hhbmRsZS0+c2V0UXVpY2tMb29rSGFuZGxlKFF1aWNrTG9va0hhbmRsZTo6Y3JlYXRlKG1faGFu
ZGxlLCBjb25uZWN0aW9uLCByLCBzZWxmKSk7CisgICAgaWYgKG1faGFuZGxlLT5xdWlja0xvb2tI
YW5kbGUoKSkKKyAgICAgICAgciA9IG1faGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKS0+bnNSZXNw
b25zZSgpOworI2VuZGlmCiAKICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVSZXNw
b25zZShtX2hhbmRsZSwgcik7CiB9CkBAIC0xNzEsNiArMTg1LDExIEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogICAgIGlmICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKICAg
ICAgICAgcmV0dXJuOwogCisjaWYgVVNFKFFVSUNLX0xPT0spCisgICAgaWYgKG1faGFuZGxlLT5x
dWlja0xvb2tIYW5kbGUoKSAmJiBtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCktPmRpZFJlY2Vp
dmVEYXRhQXJyYXkocmVpbnRlcnByZXRfY2FzdDxDRkFycmF5UmVmPihkYXRhQXJyYXkpKSkKKyAg
ICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICBtX2hhbmRsZS0+aGFuZGxlRGF0YUFycmF5KHJl
aW50ZXJwcmV0X2Nhc3Q8Q0ZBcnJheVJlZj4oZGF0YUFycmF5KSk7CiAgICAgLy8gVGhlIGNhbGwg
dG8gZGlkUmVjZWl2ZURhdGEgYWJvdmUgY2FuIGNhbmNlbCBhIGxvYWQsIGFuZCBpZiBzbywgdGhl
IGRlbGVnYXRlIChzZWxmKSBjb3VsZCBoYXZlIGJlZW4gZGVhbGxvY2F0ZWQgYnkgdGhpcyBwb2lu
dC4KIH0KQEAgLTE4MywxMiArMjAyLDIyIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAg
ICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAgZGVsZWdhdGUgY29ubmVjdGlvbjolcCBkaWRSZWNl
aXZlRGF0YTolcCBsZW5ndGhSZWNlaXZlZDolbGxkIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIGRh
dGEsIGxlbmd0aFJlY2VpdmVkKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoW2RhdGEg
bGVuZ3RoXSA9PSAwKSAvLyA8cmRhcjovL3Byb2JsZW0vNTUzMjkzMT4KKyAgICAgICAgcmV0dXJu
OworI2VuZGlmCisKICAgICBpZiAoIW1faGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAvLyBGSVhNRTogSWYgd2UgZ2V0IG1vcmUgdGhhbiAyQiBieXRl
cyBpbiBhIHNpbmdsZSBjaHVuaywgdGhpcyBjb2RlIHdvbid0IGRvIHRoZSByaWdodCB0aGluZy4K
ICAgICAvLyBIb3dldmVyLCB3aXRoIHRvZGF5J3MgY29tcHV0ZXJzIGFuZCBuZXR3b3JraW5nIHNw
ZWVkcywgdGhpcyB3b24ndCBoYXBwZW4gaW4gcHJhY3RpY2UuCiAgICAgLy8gQ291bGQgYmUgYW4g
aXNzdWUgd2l0aCBhIGdpYW50IGxvY2FsIGZpbGUuCiAKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAg
ICBpZiAobV9oYW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpICYmIG1faGFuZGxlLT5xdWlja0xvb2tI
YW5kbGUoKS0+ZGlkUmVjZWl2ZURhdGEocmVpbnRlcnByZXRfY2FzdDxDRkRhdGFSZWY+KGRhdGEp
KSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzkzCiAgICAgLy8gLTEgbWVhbnMgd2UgZG8g
bm90IHByb3ZpZGUgYW55IGRhdGEgYWJvdXQgdHJhbnNmZXIgc2l6ZSB0byBpbnNwZWN0b3Igc28g
aXQgd291bGQgdXNlCiAgICAgLy8gQ29udGVudC1MZW5ndGggaGVhZGVycyBvciBjb250ZW50IHNp
emUgdG8gc2hvdyB0cmFuc2ZlciBzaXplLgpAQCAtMjMwLDYgKzI1OSwxMSBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKICAgICBpZiAoIW1faGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkp
CiAgICAgICAgIHJldHVybjsKIAorI2lmIFVTRShRVUlDS19MT09LKQorICAgIGlmIChtX2hhbmRs
ZS0+cXVpY2tMb29rSGFuZGxlKCkgJiYgbV9oYW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpLT5kaWRG
aW5pc2hMb2FkaW5nKCkpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgbV9oYW5kbGUt
PmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKG1faGFuZGxlLCAwKTsKIH0KIApAQCAtMjQyLDYg
KzI3NiwxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBpZiAoIW1faGFuZGxlIHx8
ICFtX2hhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKIAorI2lmIFVTRShRVUlDS19M
T09LKQorICAgIGlmIChtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCkpCisgICAgICAgIG1faGFu
ZGxlLT5xdWlja0xvb2tIYW5kbGUoKS0+ZGlkRmFpbCgpOworI2VuZGlmCisKICAgICBtX2hhbmRs
ZS0+Y2xpZW50KCktPmRpZEZhaWwobV9oYW5kbGUsIGVycm9yKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAppbmRleCBmMTU1MDhjNDBhMGY5MWNm
OTJmZTg4NzIxMTNkYzBkNDFhMTcxZWZiLi4xY2RmMTc3OTc0NWJhNjliNTc3MGRjNTljMDliNzNm
ZmI4YmQ2ODU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
RGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuaApAQCAtMTA3LDcgKzEwNyw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBjaGFyKiBsYXN0RXJy
b3JNc2coKTsKICAgICAKICAgICBzcWxpdGUzKiBzcWxpdGUzSGFuZGxlKCkgY29uc3QgeworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgICAgIEFTU0VSVChtX3NoYXJhYmxlIHx8IGN1cnJlbnRUaHJl
YWQoKSA9PSBtX29wZW5pbmdUaHJlYWQgfHwgIW1fZGIpOworI2VuZGlmCiAgICAgICAgIHJldHVy
biBtX2RiOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVGaWxlU3lzdGVtLmNwcAppbmRleCA3MzVmMGI0MWY3OGUyYzIzM2E3YzliYmNmODdlMjEx
MDRjMDEzNzYwLi5lNzA5NGI0ZGE0ZTg2ZTE2ZDM0MjA3YTBhMjMwMTc4MWYxYmNlMzEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCkBA
IC0zOCw2ICszOCwxMCBAQAogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8c3FsaXRl
My5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPHNxbGl0ZTNfcHJpdmF0ZS5oPgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1FMaXRlRmlsZVN5c3RlbTo6U1FMaXRl
RmlsZVN5c3RlbSgpCkBAIC0xMTAsNiArMTE0LDEzIEBAIGJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6
ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCiAgICAgcmV0dXJuIGRl
bGV0ZUZpbGUoZmlsZU5hbWUpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorYm9vbCBTUUxpdGVG
aWxlU3lzdGVtOjp0cnVuY2F0ZURhdGFiYXNlRmlsZShzcWxpdGUzKiBkYXRhYmFzZSkKK3sKKyAg
ICByZXR1cm4gc3FsaXRlM19maWxlX2NvbnRyb2woZGF0YWJhc2UsIDAsIFNRTElURV9UUlVOQ0FU
RV9EQVRBQkFTRSwgMCkgPT0gU1FMSVRFX09LOworfQorI2VuZGlmCisgICAgCiBsb25nIGxvbmcg
U1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVO
YW1lKQogeyAgICAgICAgCiAgICAgbG9uZyBsb25nIHNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAppbmRleCAxNDA4NWI5MjljODViODdhYzA1
NjJiYzlmZWM3YTNmMWM3NzAzMTY0Li5hN2VmNjVlNjc1MWU0NjE5YzY1ZWEzYzIwNGQzMDk3Yzdk
NjBkYzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmls
ZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lz
dGVtLmgKQEAgLTk5LDYgKzk5LDEzIEBAIHB1YmxpYzoKICAgICAvLyBmaWxlTmFtZSAtIFRoZSBm
aWxlIG5hbWUuCiAgICAgc3RhdGljIGJvb2wgZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIFRydW5jYXRlcyBhIGRh
dGFiYXNlIGZpbGUuIFVzZWQgd2hlbiBNb2JpbGVTYWZhcmlTZXR0aW5ncyBkZWxldGVzIGEgZGF0
YWJhc2UgZmlsZSwKKyAgICAvLyBzaW5jZSBkZWxldGluZyB0aGUgZmlsZSBudWtlcyB0aGUgUE9T
SVggZmlsZSBsb2NrcyB3aGljaCB3b3VsZCBwb3RlbnRpYWxseSBjYXVzZSBTYWZhcmkKKyAgICAv
LyB0byBjb3JydXB0IHRoZSBuZXcgZGIgaWYgaXQncyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5k
LgorICAgIHN0YXRpYyBib29sIHRydW5jYXRlRGF0YWJhc2VGaWxlKHNxbGl0ZTMqIGRhdGFiYXNl
KTsKKyNlbmRpZgorICAgIAogICAgIC8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGRhdGFiYXNl
IGZpbGUuCiAgICAgLy8KICAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVRyYW5zYWN0aW9uLmNwcAppbmRleCA2
ZjkwZWFjMDg5NGU1ZmMzMTFkYmEzZjA0NzUyZDFjZTJiOTM4YjYxLi5kMTVjZWQzYWUwZmJkZTRh
OWFkNDhiNTAzOWE0ZjA5YjNmMDU3YWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHAKQEAgLTI4LDYgKzI4LDEwIEBACiAKICNpbmNs
dWRlICJTUUxpdGVEYXRhYmFzZS5oIgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlNR
TGl0ZURhdGFiYXNlVHJhY2tlci5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
U1FMaXRlVHJhbnNhY3Rpb246OlNRTGl0ZVRyYW5zYWN0aW9uKFNRTGl0ZURhdGFiYXNlJiBkYiwg
Ym9vbCByZWFkT25seSkKQEAgLTU0LDExICs1OCwxOCBAQCB2b2lkIFNRTGl0ZVRyYW5zYWN0aW9u
OjpiZWdpbigpCiAgICAgICAgIC8vIGFueSBzdGF0ZW1lbnRzLiBJZiB0aGF0IGhhcHBlbnMsIHRo
aXMgdHJhbnNhY3Rpb24gd2lsbCBmYWlsLgogICAgICAgICAvLyBodHRwOi8vd3d3LnNxbGl0ZS5v
cmcvbGFuZ190cmFuc2FjdGlvbi5odG1sCiAgICAgICAgIC8vIGh0dHA6Ly93d3cuc3FsaXRlLm9y
Zy9sb2NraW5ndjMuaHRtbCNsb2NraW5nCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBTUUxp
dGVEYXRhYmFzZVRyYWNrZXI6OmluY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KCk7
CisjZW5kaWYKICAgICAgICAgaWYgKG1fcmVhZE9ubHkpCiAgICAgICAgICAgICBtX2luUHJvZ3Jl
c3MgPSBtX2RiLmV4ZWN1dGVDb21tYW5kKCJCRUdJTiIpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBtX2luUHJvZ3Jlc3MgPSBtX2RiLmV4ZWN1dGVDb21tYW5kKCJCRUdJTiBJTU1FRElBVEUi
KTsKICAgICAgICAgbV9kYi5tX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IG1faW5Qcm9ncmVzczsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGlmICghbV9pblByb2dyZXNzKQorICAgICAgICAg
ICAgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpkZWNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3ND
b3VudCgpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC02OCw2ICs3OSwxMCBAQCB2b2lkIFNRTGl0
ZVRyYW5zYWN0aW9uOjpjb21taXQoKQogICAgICAgICBBU1NFUlQobV9kYi5tX3RyYW5zYWN0aW9u
SW5Qcm9ncmVzcyk7CiAgICAgICAgIG1faW5Qcm9ncmVzcyA9ICFtX2RiLmV4ZWN1dGVDb21tYW5k
KCJDT01NSVQiKTsKICAgICAgICAgbV9kYi5tX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IG1faW5Q
cm9ncmVzczsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGlmICghbV9pblByb2dyZXNzKQor
ICAgICAgICAgICAgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpkZWNyZW1lbnRUcmFuc2FjdGlvbklu
UHJvZ3Jlc3NDb3VudCgpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC04Miw2ICs5Nyw5IEBAIHZv
aWQgU1FMaXRlVHJhbnNhY3Rpb246OnJvbGxiYWNrKCkKICAgICAgICAgbV9kYi5leGVjdXRlQ29t
bWFuZCgiUk9MTEJBQ0siKTsKICAgICAgICAgbV9pblByb2dyZXNzID0gZmFsc2U7CiAgICAgICAg
IG1fZGIubV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgIFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6ZGVjcmVtZW50VHJhbnNhY3Rpb25JblBy
b2dyZXNzQ291bnQoKTsKKyNlbmRpZgogICAgIH0KIH0KIApAQCAtOTAsNiArMTA4LDkgQEAgdm9p
ZCBTUUxpdGVUcmFuc2FjdGlvbjo6c3RvcCgpCiAgICAgaWYgKG1faW5Qcm9ncmVzcykgewogICAg
ICAgICBtX2luUHJvZ3Jlc3MgPSBmYWxzZTsKICAgICAgICAgbV9kYi5tX3RyYW5zYWN0aW9uSW5Q
cm9ncmVzcyA9IGZhbHNlOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgU1FMaXRlRGF0YWJh
c2VUcmFja2VyOjpkZWNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOworI2VuZGlm
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9z
L1NRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
aW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmY2MjJmNGE1ZDA0Yjlm
YTQwYjViNmE1ZWRkOGE3ZjJlMjhiMTJjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9pb3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcApAQCAtMCwwICsx
LDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlVHJhY2tlci5o
IgorCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFNRTGl0ZURhdGFiYXNlVHJhY2tlciB7CisKK3N0
YXRpYyBTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQqIHNfc3RhdGljU1FMaXRlRGF0YWJhc2VU
cmFja2VyQ2xpZW50ID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBzX3RyYW5zYWN0aW9uSW5Qcm9ncmVz
c0NvdW50ZXIgPSAwOworCitzdGF0aWMgTXV0ZXgmIHRyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4
KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TXV0ZXg+IHRpcE11dGV4OworICAgIHJl
dHVybiB0aXBNdXRleDsKK30KKwordm9pZCBzZXRDbGllbnQoU1FMaXRlRGF0YWJhc2VUcmFja2Vy
Q2xpZW50KiBjbGllbnQpCit7CisgICAgQVNTRVJUKGNsaWVudCk7CisgICAgQVNTRVJUKCFzX3N0
YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCB8fCBzX3N0YXRpY1NRTGl0ZURhdGFiYXNl
VHJhY2tlckNsaWVudCA9PSBjbGllbnQpOworICAgIHNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFj
a2VyQ2xpZW50ID0gY2xpZW50OworfQorCit2b2lkIGluY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9n
cmVzc0NvdW50KCkKK3sKKyAgICBpZiAoIXNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xp
ZW50KQorICAgICAgICByZXR1cm47CisgICAgTXV0ZXhMb2NrZXIgbG9jayh0cmFuc2FjdGlvbklu
UHJvZ3Jlc3NNdXRleCgpKTsKKworICAgIHNfdHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRlcisr
OworICAgIGlmIChzX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXIgPT0gMSkKKyAgICAgICAg
c19zdGF0aWNTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQtPndpbGxCZWdpbkZpcnN0VHJhbnNh
Y3Rpb24oKTsKK30KKwordm9pZCBkZWNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgp
Cit7CisgICAgaWYgKCFzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCkKKyAgICAg
ICAgcmV0dXJuOworICAgIE11dGV4TG9ja2VyIGxvY2sodHJhbnNhY3Rpb25JblByb2dyZXNzTXV0
ZXgoKSk7CisKKyAgICBBU1NFUlQoc190cmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudGVyKTsKKyAg
ICBzX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXItLTsKKworICAgIGlmICghc190cmFuc2Fj
dGlvbkluUHJvZ3Jlc3NDb3VudGVyKQorICAgICAgICBzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJh
Y2tlckNsaWVudC0+ZGlkRmluaXNoTGFzdFRyYW5zYWN0aW9uKCk7Cit9CisKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECitib29sIGhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpCit7CisgICAgcmV0dXJu
ICFzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCB8fCBzX3RyYW5zYWN0aW9uSW5Q
cm9ncmVzc0NvdW50ZXIgPiAwOworfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKworfSAv
LyBuYW1lc3BhY2UgU1FMaXRlRGF0YWJhc2VUcmFja2VyCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9pb3MvU1FMaXRlRGF0
YWJhc2VUcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURh
dGFiYXNlVHJhY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2MWM2NDYzM2U2Mzg0Mzk0MDFiYWZkM2U4YzE0
MTU5NWRjYmRkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNRTGl0
ZURhdGFiYXNlVHJhY2tlcl9oCisjZGVmaW5lIFNRTGl0ZURhdGFiYXNlVHJhY2tlcl9oCisKKyNp
bmNsdWRlICJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgU1FMaXRlRGF0
YWJhc2VUcmFja2VyIHsKKwordm9pZCBkZWNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3Vu
dCgpOwordm9pZCBpbmNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOworCit2b2lk
IHNldENsaWVudChTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQqKTsKKworI2lmICFBU1NFUlRf
RElTQUJMRUQKK2Jvb2wgaGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCk7CisjZW5kaWYgLy8gIUFT
U0VSVF9ESVNBQkxFRAorCit9OworCitjbGFzcyBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NB
dXRvQ291bnRlciB7CitwdWJsaWM6CisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0
b0NvdW50ZXIoKQorICAgIHsKKyAgICAgICAgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjppbmNyZW1l
bnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOworICAgIH0KKyAgICB+U1FMaXRlVHJhbnNh
Y3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIoKQorICAgIHsKKyAgICAgICAgU1FMaXRlRGF0YWJh
c2VUcmFja2VyOjpkZWNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOworICAgIH0K
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNRTGl0ZURhdGFiYXNl
VHJhY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NR
TGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L2lvcy9TUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MWYzZDJiOWJm
Yjc4MmZhZjgzNmYyOWVlNGU2M2U5ZGE1NWMzN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaApA
QCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnRfaAorI2RlZmluZSBTUUxp
dGVEYXRhYmFzZVRyYWNrZXJDbGllbnRfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U1FM
aXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEJl
Z2luRmlyc3RUcmFuc2FjdGlvbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTGFz
dFRyYW5zYWN0aW9uKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAKaW5kZXggZDczNmNjYTc0ZWE0OWE5N2U0
MjIzMGU1N2QxMmEwMDBlODQ1ZDhjOS4uMzBmN2FiMjA5YWM1ZjdiZmU2ZmIzOWYxNTI1ZjkzMzVj
ZjgxNzljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9y
bUxvY2FsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxv
Y2FsZS5jcHAKQEAgLTMyOCw2ICszMjgsNyBAQCBTdHJpbmcgTG9jYWxlOjpjb252ZXJ0RnJvbUxv
Y2FsaXplZE51bWJlcihjb25zdCBTdHJpbmcmIGxvY2FsaXplZCkKIAogI2lmIEVOQUJMRShEQVRF
X0FORF9USU1FX0lOUFVUX1RZUEVTKQogCisjaWYgIVBMQVRGT1JNKElPUykKIFN0cmluZyBMb2Nh
bGU6OmZvcm1hdERhdGVUaW1lKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlLCBGb3JtYXRUeXBl
IGZvcm1hdFR5cGUpCiB7CiAgICAgaWYgKGRhdGUudHlwZSgpID09IERhdGVDb21wb25lbnRzOjpJ
bnZhbGlkKQpAQCAtMzYzLDYgKzM2NCw4IEBAIFN0cmluZyBMb2NhbGU6OmZvcm1hdERhdGVUaW1l
KGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRlLCBGb3JtYXRUeXBlIGZvcm1hdFR5cGUpCiAgICAg
fQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKKwogI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvUGxhdGZvcm1Mb2NhbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxh
dGZvcm1Mb2NhbGUuaAppbmRleCAxZTk3NjkwNmJlODY4NmI4OTVjNmUzMzI5MzI1NTZlMTU3ZTIw
NTZhLi45ZmM2MzljZWE2MGE0OTM3NzYzZmNiNDM4NzA3NjRkZjZkM2IwZGJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5oCkBAIC0zMyw2ICszMywx
MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShJT1MpCitjbGFzcyBG
b250OworI2VuZGlmCisKIGNsYXNzIExvY2FsZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
TG9jYWxlKTsKIApAQCAtMTEzLDcgKzExNywxNyBAQCBwdWJsaWM6CiAgICAgLy8gZGlzcGxheSB0
byB0aGUgdXNlci4gSWYgYW4gaW1wbGVtZW50YXRpb24gZG9lc24ndCBzdXBwb3J0CiAgICAgLy8g
bG9jYWxpemVkIGRhdGVzIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmlu
Zy4KICAgICAvLyBGb3JtYXRUeXBlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgaWYgeW91IHdhbnQg
dGhlIHNob3J0IGZvcm1hdC4gCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBTdHJpbmcgZm9ybWF0
RGF0ZVRpbWUoY29uc3QgRGF0ZUNvbXBvbmVudHMmLCBGb3JtYXRUeXBlID0gRm9ybWF0VHlwZVVu
c3BlY2lmaWVkKTsKKyNlbHNlCisgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0RGF0ZVRpbWUoY29u
c3QgRGF0ZUNvbXBvbmVudHMmLCBGb3JtYXRUeXBlID0gRm9ybWF0VHlwZVVuc3BlY2lmaWVkKSA9
IDA7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9T
KQorICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2hvdWxkIGJlIG1lcmdlZCB3aXRoIE9wZW4gU291
cmNlIGluIGEgd2F5IHRoYXQgaXMgZnV0dXJlIGNvbXBhdGlibGUuCisgICAgLy8gTWF4aW11bSB3
aWR0aCBmb3IgYSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBmb250Lgor
ICAgIHZpcnR1YWwgZmxvYXQgbWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6
OlR5cGUsIGNvbnN0IEZvbnQmKSA9IDA7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgfkxvY2FsZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVy
YXRvcklDVS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJh
dG9ySUNVLmNwcAppbmRleCA1ZTE0ZTNmMDhhYWVmMzNmNWQzM2U3YTJjMzc2YTExMWYxYTg5YjZj
Li43ZTBlMmQ4Mzc0OTE1MmMzYzdiZDBkZjE3ZTljNWIzNjAwOTVjZmNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcApA
QCAtNTcxLDYgKzU3MSw3IEBAIGJvb2wgaXNXb3JkVGV4dEJyZWFrKFRleHRCcmVha0l0ZXJhdG9y
KiBpdGVyYXRvcikKICAgICByZXR1cm4gcnVsZVN0YXR1cyAhPSBVQlJLX1dPUkRfTk9ORTsKIH0K
IAorI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHNldFVwSXRl
cmF0b3JXaXRoUnVsZXMoYm9vbCYgY3JlYXRlZEl0ZXJhdG9yLCBUZXh0QnJlYWtJdGVyYXRvciom
IGl0ZXJhdG9yLAogICAgIGNvbnN0IGNoYXIqIGJyZWFrUnVsZXMsIGNvbnN0IFVDaGFyKiBzdHJp
bmcsIGludCBsZW5ndGgpCiB7CkBAIC01OTUsOSArNTk2LDExIEBAIHN0YXRpYyBUZXh0QnJlYWtJ
dGVyYXRvciogc2V0VXBJdGVyYXRvcldpdGhSdWxlcyhib29sJiBjcmVhdGVkSXRlcmF0b3IsIFRl
eHRCcmVhCiAKICAgICByZXR1cm4gaXRlcmF0b3I7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKIAogVGV4dEJyZWFrSXRlcmF0b3IqIGN1cnNvck1vdmVtZW50SXRlcmF0b3IoY29uc3QgVUNo
YXIqIHN0cmluZywgaW50IGxlbmd0aCkKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIFRo
aXMgcnVsZSBzZXQgaXMgYmFzZWQgb24gY2hhcmFjdGVyLWJyZWFrIGl0ZXJhdG9yIHJ1bGVzIG9m
IElDVSA0LjAKICAgICAvLyA8aHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1
L2ljdS90YWdzL3JlbGVhc2UtNC0wL3NvdXJjZS9kYXRhL2Jya2l0ci9jaGFyLnR4dD4uCiAgICAg
Ly8gVGhlIG1ham9yIGRpZmZlcmVuY2VzIGZyb20gdGhlIG9yaWdpbmFsIG9uZXMgYXJlIGxpc3Rl
ZCBiZWxvdzoKQEAgLTY4Myw2ICs2ODYsMzAgQEAgVGV4dEJyZWFrSXRlcmF0b3IqIGN1cnNvck1v
dmVtZW50SXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKICAgICBzdGF0
aWMgYm9vbCBjcmVhdGVkQ3Vyc29yTW92ZW1lbnRJdGVyYXRvciA9IGZhbHNlOwogICAgIHN0YXRp
YyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRvcjsKICAgICBy
ZXR1cm4gc2V0VXBJdGVyYXRvcldpdGhSdWxlcyhjcmVhdGVkQ3Vyc29yTW92ZW1lbnRJdGVyYXRv
ciwgc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRvciwga1J1bGVzLCBzdHJpbmcsIGxlbmd0aCk7
CisjZWxzZSAvLyBQTEFURk9STShJT1MpCisgICAgLy8gVXNlIHRoZSBzcGVjaWFsIFRoYWkgY2hh
cmFjdGVyIGJyZWFrIGl0ZXJhdG9yIGZvciBhbGwgbG9jYWxlcworICAgIHN0YXRpYyBib29sIGNy
ZWF0ZWRDdXJzb3JCcmVha0l0ZXJhdG9yOworICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciog
c3RhdGljQ3Vyc29yQnJlYWtJdGVyYXRvcjsKKworICAgIGlmICghc3RyaW5nKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghY3JlYXRlZEN1cnNvckJyZWFrSXRlcmF0b3IpIHsK
KyAgICAgICAgVUVycm9yQ29kZSBvcGVuU3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICBz
dGF0aWNDdXJzb3JCcmVha0l0ZXJhdG9yID0gcmVpbnRlcnByZXRfY2FzdDxUZXh0QnJlYWtJdGVy
YXRvcio+KHVicmtfb3BlbihVQlJLX0NIQVJBQ1RFUiwgInRoIiwgMCwgMCwgJm9wZW5TdGF0dXMp
KTsKKyAgICAgICAgY3JlYXRlZEN1cnNvckJyZWFrSXRlcmF0b3IgPSB0cnVlOworICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKFVfU1VDQ0VTUyhvcGVuU3RhdHVzKSwgIklDVSBjb3VsZCBub3Qg
b3BlbiBhIGJyZWFrIGl0ZXJhdG9yOiAlcyAoJWQpIiwgdV9lcnJvck5hbWUob3BlblN0YXR1cyks
IG9wZW5TdGF0dXMpOworICAgIH0KKyAgICBpZiAoIXN0YXRpY0N1cnNvckJyZWFrSXRlcmF0b3Ip
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgVUVycm9yQ29kZSBzZXRUZXh0U3RhdHVz
ID0gVV9aRVJPX0VSUk9SOworICAgIHVicmtfc2V0VGV4dChyZWludGVycHJldF9jYXN0PFVCcmVh
a0l0ZXJhdG9yKj4oc3RhdGljQ3Vyc29yQnJlYWtJdGVyYXRvciksIHN0cmluZywgbGVuZ3RoLCAm
c2V0VGV4dFN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVSRShzZXRUZXh0U3RhdHVzKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gc3RhdGljQ3Vyc29yQnJlYWtJdGVyYXRv
cjsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAKaW5kZXggYjRiYjM5MDdmNjE0OGMzNDkzZjZh
MTdmYWY5ZTgyMDA3ZTAzNjAxNS4uY2M2ZWFhMjFmMDRhYWQ4YTQ5NjU2MGE2NTg1NjYyNzZhNGU5
ZWI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJ
Q1UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNw
cApAQCAtNDQsNiArNDQsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25zdCBzaXplX3Qg
Q29udmVyc2lvbkJ1ZmZlclNpemUgPSAxNjM4NDsKIAorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRp
YyBjb25zdCBjaGFyKiB0ZXh0Q29kZWNNYWNBbGlhc2VzW10gPSB7CisgICAgIm1hY29zLTdfMy0x
MC4yIiwgLy8geG1hY2N5cmlsbGljLCBtYWNjeXJpbGxpYworICAgICJtYWNvcy02XzItMTAuNCIs
IC8vIHhtYWNncmVlaworICAgICJtYWNvcy02LTEwLjIiLCAgIC8vIG1hY2dyZWVrCisgICAgIm1h
Y29zLTI5LTEwLjIiLCAgLy8geG1hY2NlbnRyYWxldXJyb21hbiwgbWFjY2VudHJhbGV1cnJvbWFu
CisgICAgIm1hY29zLTM1LTEwLjIiLCAgLy8geG1hY3R1cmtpc2gsIG1hY3R1cmtpc2gKKyAgICAi
c29mdGJhbmstc2ppcyIsICAvLyBzb2Z0YmFua3NqaXMKKyAgICBudWxscHRyCit9OworI2VuZGlm
CisKIElDVUNvbnZlcnRlcldyYXBwZXI6On5JQ1VDb252ZXJ0ZXJXcmFwcGVyKCkKIHsKICAgICBp
ZiAoY29udmVydGVyKQpAQCAtMTgwLDYgKzE5MiwyOSBAQCB2b2lkIFRleHRDb2RlY0lDVTo6cmVn
aXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiAgICAg
cmVnaXN0cmFyKCJJU084ODU5LTE1IiwgIklTTy04ODU5LTE1Iik7CiAgICAgLy8gTm90IHJlZ2lz
dGVyaW5nIElTTzg4NTktMTYsIGJlY2F1c2UgRmlyZWZveCAoYXMgb2YgdmVyc2lvbiAzLjYuNikg
ZG9lc24ndCBrbm93IHRoaXMgcGFydGljdWxhciBhbGlhcywKICAgICAvLyBhbmQgYmVjYXVzZSBv
bGRlciB2ZXJzaW9ucyBvZiBJQ1UgZG9uJ3Qgc3VwcG9ydCBJU08tODg1OS0xNiBlbmNvZGluZyBh
dCBhbGwuCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gQS5CLiBhZGRpbmcgYSBmZXcgbW9y
ZSBNYWMgZW5jb2RpbmdzIG1pc3NpbmcgJ2NhdXNlIHdlIGRvbid0IGhhdmUgVGV4dENvZGVjTWFj
IHJpZ2h0IG5vdworICAgIC8vIGx1Y2tpbHksIHRoZXkgYXJlIHN1cHBvcnRlZCBpbiBJQ1UsIGp1
c3QgbmVlZCB0byBhbGlhcyB0aGVtLgorICAgIC8vIHRoaXMgaGFuZGxlcyBlbmNvZGluZ3MgdGhh
dCBPUyBYIHVzZXMgVEVDIChUZXh0Q29kZWNNYWMpCisgICAgLy8gPGh0dHA6Ly9wdWJsaWIuYm91
bGRlci5pYm0uY29tL2luZm9jZW50ZXIvd21iaGVscC92NnIwbTAvaW5kZXguanNwP3RvcGljPS9j
b20uaWJtLmV0b29scy5tZnQuZWIuZG9jL2FjMDA0MDhfLmh0bT4KKyAgICBpbnQzMl90IGkgPSAw
OworICAgIGZvciAoY29uc3QgY2hhciogbWFjQWxpYXMgPSB0ZXh0Q29kZWNNYWNBbGlhc2VzW2ld
OyBtYWNBbGlhczsgbWFjQWxpYXMgPSB0ZXh0Q29kZWNNYWNBbGlhc2VzWysraV0pIHsKKyAgICAg
ICAgcmVnaXN0cmFyKG1hY0FsaWFzLCBtYWNBbGlhcyk7CisKKyAgICAgICAgVUVycm9yQ29kZSBl
cnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWludDE2X3QgbnVtQWxpYXNlcyA9IHVjbnZf
Y291bnRBbGlhc2VzKG1hY0FsaWFzLCAmZXJyb3IpOworICAgICAgICBBU1NFUlQoVV9TVUNDRVNT
KGVycm9yKSk7CisgICAgICAgIGlmIChVX1NVQ0NFU1MoZXJyb3IpKQorICAgICAgICAgICAgZm9y
ICh1aW50MTZfdCBqID0gMDsgaiA8IG51bUFsaWFzZXM7ICsraikgeworICAgICAgICAgICAgICAg
IGVycm9yID0gVV9aRVJPX0VSUk9SOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFsaWFz
ID0gdWNudl9nZXRBbGlhcyhtYWNBbGlhcywgaiwgJmVycm9yKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoVV9TVUNDRVNTKGVycm9yKSk7CisgICAgICAgICAgICAgICAgaWYgKFVfU1VDQ0VTUyhl
cnJvcikgJiYgc3RyY21wKGFsaWFzLCBtYWNBbGlhcykpCisgICAgICAgICAgICAgICAgICAgIHJl
Z2lzdHJhcihhbGlhcywgbWFjQWxpYXMpOworICAgICAgICAgICAgfQorICAgIH0KKyNlbmRpZgog
fQogCiB2b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFy
IHJlZ2lzdHJhcikKQEAgLTIxNyw2ICsyNTIsMTMgQEAgdm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lz
dGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCiAgICAgLy8gRklYTUU6IElz
IHRoZXJlIGEgZ29vZCB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBtb3N0IHVwIHRvIGRhdGUgdmFyaWFu
dCBwcm9ncmFtbWF0aWNhbGx5PwogICAgIHJlZ2lzdHJhcigid2luZG93cy04NzQiLCBjcmVhdGUs
ICJ3aW5kb3dzLTg3NC0yMDAwIik7CiAgICAgcmVnaXN0cmFyKCJ3aW5kb3dzLTk0OSIsIGNyZWF0
ZSwgIndpbmRvd3MtOTQ5LTIwMDAiKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBTZWUg
Y29tbWVudCBhYm92ZSBpbiByZWdpc3RlckVuY29kaW5nTmFtZXMoKS4KKyAgICBpbnQzMl90IGkg
PSAwOworICAgIGZvciAoY29uc3QgY2hhciogYWxpYXMgPSB0ZXh0Q29kZWNNYWNBbGlhc2VzW2ld
OyBhbGlhczsgYWxpYXMgPSB0ZXh0Q29kZWNNYWNBbGlhc2VzWysraV0pCisgICAgICAgIHJlZ2lz
dHJhcihhbGlhcywgY3JlYXRlLCAwKTsKKyNlbmRpZgogfQogCiBUZXh0Q29kZWNJQ1U6OlRleHRD
b2RlY0lDVShjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogY2Fub25pY2FsQ29udmVy
dGVyTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5j
b2RpbmdSZWdpc3RyeS5jcHAKaW5kZXggYTU3ODJjZmQ1Zjg0ZjgzYjhiOTM5MTYyMDFlYjRmMDk2
NTY3MDE2My4uYjFmZWUzNTAzNWY5MjIzZDIzYWVhMDY4OWVhMjA1ODQ2ZmU2ZTlhMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3Ry
eS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAKICNpZiBVU0UoSUNVX1VOSUNPREUpCiAjaW5jbHVkZSAi
VGV4dENvZGVjSUNVLmgiCiAjZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0o
TUFDKSAmJiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgIlRleHRDb2RlY01hYy5oIgogI2VuZGlm
CiAjaWYgT1MoV0lORE9XUykgJiYgVVNFKFdDSEFSX1VOSUNPREUpCkBAIC0yODQsNyArMjg0LDcg
QEAgc3RhdGljIHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFwcygpCiAgICAgVGV4dENvZGVjSUNVOjpy
ZWdpc3RlckNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JN
KE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgVGV4dENvZGVj
TWFjOjpyZWdpc3RlckVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAg
ICBUZXh0Q29kZWNNYWM6OnJlZ2lzdGVyQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9IeXBoZW5hdGlv
bkNGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5j
cHAKaW5kZXggNWFjNzk0YTMxODNjN2M2ZmI2ZDQ5Y2U5NWQ4OGI2NmU3ZmNkOTY0MS4uMGRlZGE4
N2ZjYzdhYmQ5Nzk5YjZiNGFiODFkMDI1ZGJhZmFlNmJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3BwCkBAIC02MCw3ICs2MCwxNyBA
QCBzdGF0aWMgQXRvbWljU3RyaW5nS2V5ZWRNUlVDYWNoZTxSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+
PiYgY2ZMb2NhbGVDYWNoZSgpCiAKIGJvb2wgY2FuSHlwaGVuYXRlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxlSWRlbnRpZmllcikKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHJldHVybiBj
ZkxvY2FsZUNhY2hlKCkuZ2V0KGxvY2FsZUlkZW50aWZpZXIpOworI2Vsc2UKKyNpZiAhKGRlZmlu
ZWQoV1RGX0FSTV9BUkNIX1ZFUlNJT04pICYmIFdURl9BUk1fQVJDSF9WRVJTSU9OID09IDYpCisg
ICAgcmV0dXJuIGNmTG9jYWxlQ2FjaGUoKS5nZXQobG9jYWxlSWRlbnRpZmllcik7CisjZWxzZQor
ICAgIC8vIEh5cGhlbmF0aW9uIGlzIG5vdCBhdmFpbGFibGUgb24gZGV2aWNlcyB3aXRoIEFSTXY2
IHByb2Nlc3NvcnMuIFNlZSA8cmRhcjovLzgzNTI1NzA+LgorICAgIFVOVVNFRF9QQVJBTShsb2Nh
bGVJZGVudGlmaWVyKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyNlbmRpZiAvLyBQTEFU
Rk9STShJT1MpCiB9CiAKIHNpemVfdCBsYXN0SHlwaGVuTG9jYXRpb24oY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBiZWZvcmVJbmRleCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDczMGZiZTMx
YmU0NTU1MTY1NmY2Y2U3NDEwZmI5NWZhODMwMTkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLmgKQEAgLTAsMCAr
MSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgTG9jYWxpemVkRGF0ZUNhY2hlX2gKKyNkZWZpbmUgTG9jYWxpemVkRGF0ZUNhY2hlX2gK
KworI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExv
Y2FsaXplZERhdGVDYWNoZSB7CitwdWJsaWM6CisgICAgTlNEYXRlRm9ybWF0dGVyICpmb3JtYXR0
ZXJGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSk7CisgICAgZmxvYXQgbWF4aW11bVdp
ZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUsIGNvbnN0IEZvbnQmKTsKKyAgICB2
b2lkIGxvY2FsZUNoYW5nZWQoKTsKKworcHJpdmF0ZToKKyAgICBMb2NhbGl6ZWREYXRlQ2FjaGUo
KTsKKyAgICB+TG9jYWxpemVkRGF0ZUNhY2hlKCk7CisKKyAgICBOU0RhdGVGb3JtYXR0ZXIgKmNy
ZWF0ZUZvcm1hdHRlckZvclR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUpOworICAgIGZsb2F0IGNh
bGN1bGF0ZU1heGltdW1XaWR0aChEYXRlQ29tcG9uZW50czo6VHlwZSwgY29uc3QgRm9udCYpOwor
CisgICAgLy8gVXNpbmcgaW50IGluc3RlYWQgb2YgRGF0ZUNvbXBvbmVudHM6OlR5cGUgZm9yIHRo
ZSBrZXkgYmVjYXVzZSB0aGUgZW51bQorICAgIC8vIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IGhh
c2ggYW5kIGhhc2ggdHJhaXRzLiBVc2FnZSBvZiB0aGUgbWFwcworICAgIC8vIGNhc3RzIHRoZSBE
YXRlQ29tcG9uZW50czo6VHlwZSBpbnRvIGFuIGludCBhcyB0aGUga2V5LgorICAgIHR5cGVkZWYg
SGFzaE1hcDxpbnQsIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+PiBEYXRlVHlwZUZvcm1hdHRl
ck1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBmbG9hdD4gRGF0ZVR5cGVNYXhXaWR0aE1h
cDsKKyAgICBEYXRlVHlwZUZvcm1hdHRlck1hcCBtX2Zvcm1hdHRlck1hcDsKKyAgICBEYXRlVHlw
ZU1heFdpZHRoTWFwIG1fbWF4V2lkdGhNYXA7CisgICAgRm9udCBtX2ZvbnQ7CisKKyAgICBmcmll
bmQgTG9jYWxpemVkRGF0ZUNhY2hlJiBsb2NhbGl6ZWREYXRlQ2FjaGUoKTsKKyAgICBmcmllbmQg
TmV2ZXJEZXN0cm95ZWQ8TG9jYWxpemVkRGF0ZUNhY2hlPjsKK307CisKKy8vIFNpbmdsZXRvbi4K
K0xvY2FsaXplZERhdGVDYWNoZSYgbG9jYWxpemVkRGF0ZUNhY2hlKCk7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIExvY2FsaXplZERhdGVDYWNoZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRlQ2FjaGUubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODcxOTFhMmU0NTM5MjMzYWIxM2RjNjYxNzhlNThhMWI4YzhjNjM5YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXpl
ZERhdGVDYWNoZS5tbQpAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTG9jYWxp
emVkRGF0ZUNhY2hlLmgiCisKKyNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIlRleHRSdW4uaCIK
KyNpbXBvcnQgPG1hdGguaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9DRk5vdGlmaWNhdGlv
bkNlbnRlci5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0xvY2FsaXplZERhdGVDYWNoZSYgbG9jYWxpemVkRGF0ZUNhY2hlKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8TG9jYWxpemVkRGF0ZUNhY2hlPiBjYWNoZTsKKyAgICByZXR1cm4g
Y2FjaGU7Cit9CisKK3N0YXRpYyB2b2lkIF9sb2NhbGVDaGFuZ2VkKENGTm90aWZpY2F0aW9uQ2Vu
dGVyUmVmLCB2b2lkKiwgQ0ZTdHJpbmdSZWYsIGNvbnN0IHZvaWQqLCBDRkRpY3Rpb25hcnlSZWYp
Cit7CisgICAgbG9jYWxpemVkRGF0ZUNhY2hlKCkubG9jYWxlQ2hhbmdlZCgpOworfQorCitMb2Nh
bGl6ZWREYXRlQ2FjaGU6OkxvY2FsaXplZERhdGVDYWNoZSgpCisgICAgOiBtX2ZvbnQoRm9udCgp
KQoreworICAgIC8vIExpc3RlbiB0byBDRiBOb3RpZmljYXRpb25zIGZvciBsb2NhbGUgY2hhbmdl
LCBhbmQgY2xlYXIgdGhlIGNhY2hlIHdoZW4gaXQgZG9lcy4KKyAgICBDRk5vdGlmaWNhdGlvbkNl
bnRlckFkZE9ic2VydmVyKENGTm90aWZpY2F0aW9uQ2VudGVyR2V0TG9jYWxDZW50ZXIoKSwgKHZv
aWQqKXRoaXMsIF9sb2NhbGVDaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga0NGTG9jYWxlQ3VycmVudExvY2FsZURpZENoYW5nZU5vdGlmaWNhdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIENGTm90aWZpY2F0aW9uU3VzcGVu
c2lvbkJlaGF2aW9yRGVsaXZlckltbWVkaWF0ZWx5KTsKK30KKworTG9jYWxpemVkRGF0ZUNhY2hl
Ojp+TG9jYWxpemVkRGF0ZUNhY2hlKCkKK3sKKyAgICAvLyBOT1RFOiBTaW5nbGV0b24gZG9lcyBu
b3QgZXhwZWN0IHRvIGJlIGRlY29uc3RydWN0ZWQuCisgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJS
ZW1vdmVPYnNlcnZlcihDRk5vdGlmaWNhdGlvbkNlbnRlckdldExvY2FsQ2VudGVyKCksICh2b2lk
Kil0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NGTG9jYWxl
Q3VycmVudExvY2FsZURpZENoYW5nZU5vdGlmaWNhdGlvbiwgTlVMTCk7Cit9CisKK3ZvaWQgTG9j
YWxpemVkRGF0ZUNhY2hlOjpsb2NhbGVDaGFuZ2VkKCkKK3sKKyAgICBtX21heFdpZHRoTWFwLmNs
ZWFyKCk7CisgICAgbV9mb3JtYXR0ZXJNYXAuY2xlYXIoKTsKK30KKworTlNEYXRlRm9ybWF0dGVy
ICpMb2NhbGl6ZWREYXRlQ2FjaGU6OmZvcm1hdHRlckZvckRhdGVUeXBlKERhdGVDb21wb25lbnRz
OjpUeXBlIHR5cGUpCit7CisgICAgaW50IGtleSA9IHN0YXRpY19jYXN0PGludD4odHlwZSk7Cisg
ICAgaWYgKG1fZm9ybWF0dGVyTWFwLmNvbnRhaW5zKGtleSkpCisgICAgICAgIHJldHVybiBtX2Zv
cm1hdHRlck1hcC5nZXQoa2V5KS5nZXQoKTsKKworICAgIE5TRGF0ZUZvcm1hdHRlciAqZGF0ZUZv
cm1hdHRlciA9IFtjcmVhdGVGb3JtYXR0ZXJGb3JUeXBlKHR5cGUpIGF1dG9yZWxlYXNlXTsKKyAg
ICBtX2Zvcm1hdHRlck1hcC5zZXQoa2V5LCBkYXRlRm9ybWF0dGVyKTsKKyAgICByZXR1cm4gZGF0
ZUZvcm1hdHRlcjsKK30KKworZmxvYXQgTG9jYWxpemVkRGF0ZUNhY2hlOjptYXhpbXVtV2lkdGhG
b3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlwZSB0eXBlLCBjb25zdCBGb250JiBmb250KQor
eworICAgIGludCBrZXkgPSBzdGF0aWNfY2FzdDxpbnQ+KHR5cGUpOworICAgIGlmIChtX2ZvbnQg
PT0gZm9udCkgeworICAgICAgICBpZiAobV9tYXhXaWR0aE1hcC5jb250YWlucyhrZXkpKQorICAg
ICAgICAgICAgcmV0dXJuIG1fbWF4V2lkdGhNYXAuZ2V0KGtleSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbV9mb250ID0gRm9udChmb250KTsKKyAgICAgICAgbV9tYXhXaWR0aE1hcC5jbGVhcigp
OworICAgIH0KKworICAgIGZsb2F0IGNhbGN1bGF0ZWRNYXhpbXVtID0gY2FsY3VsYXRlTWF4aW11
bVdpZHRoKHR5cGUsIGZvbnQpOworICAgIG1fbWF4V2lkdGhNYXAuc2V0KGtleSwgY2FsY3VsYXRl
ZE1heGltdW0pOworICAgIHJldHVybiBjYWxjdWxhdGVkTWF4aW11bTsKK30KKworTlNEYXRlRm9y
bWF0dGVyICpMb2NhbGl6ZWREYXRlQ2FjaGU6OmNyZWF0ZUZvcm1hdHRlckZvclR5cGUoRGF0ZUNv
bXBvbmVudHM6OlR5cGUgdHlwZSkKK3sKKyAgICBOU0RhdGVGb3JtYXR0ZXIgKmRhdGVGb3JtYXR0
ZXIgPSBbW05TRGF0ZUZvcm1hdHRlciBhbGxvY10gaW5pdF07CisgICAgTlNMb2NhbGUgKmN1cnJl
bnRMb2NhbGUgPSBbTlNMb2NhbGUgY3VycmVudExvY2FsZV07CisgICAgW2RhdGVGb3JtYXR0ZXIg
c2V0TG9jYWxlOmN1cnJlbnRMb2NhbGVdOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBEYXRlQ29tcG9uZW50czo6SW52YWxpZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OkRhdGU6CisgICAgICAg
IFtkYXRlRm9ybWF0dGVyIHNldFRpbWVab25lOltOU1RpbWVab25lIHRpbWVab25lRm9yU2Vjb25k
c0Zyb21HTVQ6MF1dOworICAgICAgICBbZGF0ZUZvcm1hdHRlciBzZXRUaW1lU3R5bGU6TlNEYXRl
Rm9ybWF0dGVyTm9TdHlsZV07CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldERhdGVTdHlsZTpO
U0RhdGVGb3JtYXR0ZXJNZWRpdW1TdHlsZV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGF0
ZUNvbXBvbmVudHM6OkRhdGVUaW1lOgorICAgICAgICBbZGF0ZUZvcm1hdHRlciBzZXRUaW1lWm9u
ZTpbTlNUaW1lWm9uZSBsb2NhbFRpbWVab25lXV07CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNl
dFRpbWVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlXTsKKyAgICAgICAgW2RhdGVGb3Jt
YXR0ZXIgc2V0RGF0ZVN0eWxlOk5TRGF0ZUZvcm1hdHRlck1lZGl1bVN0eWxlXTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6RGF0ZVRpbWVMb2NhbDoKKyAgICAgICAg
W2RhdGVGb3JtYXR0ZXIgc2V0VGltZVpvbmU6W05TVGltZVpvbmUgdGltZVpvbmVGb3JTZWNvbmRz
RnJvbUdNVDowXV07CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldFRpbWVTdHlsZTpOU0RhdGVG
b3JtYXR0ZXJTaG9ydFN0eWxlXTsKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0RGF0ZVN0eWxl
Ok5TRGF0ZUZvcm1hdHRlck1lZGl1bVN0eWxlXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBE
YXRlQ29tcG9uZW50czo6TW9udGg6CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldFRpbWVab25l
OltOU1RpbWVab25lIHRpbWVab25lRm9yU2Vjb25kc0Zyb21HTVQ6MF1dOworICAgICAgICBbZGF0
ZUZvcm1hdHRlciBzZXREYXRlRm9ybWF0OltOU0RhdGVGb3JtYXR0ZXIgZGF0ZUZvcm1hdEZyb21U
ZW1wbGF0ZTpAIk1NTU15eXl5IiBvcHRpb25zOjAgbG9jYWxlOmN1cnJlbnRMb2NhbGVdXTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6VGltZToKKyAgICAgICAgW2Rh
dGVGb3JtYXR0ZXIgc2V0VGltZVpvbmU6W05TVGltZVpvbmUgdGltZVpvbmVGb3JTZWNvbmRzRnJv
bUdNVDowXV07CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldFRpbWVTdHlsZTpOU0RhdGVGb3Jt
YXR0ZXJTaG9ydFN0eWxlXTsKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0RGF0ZVN0eWxlOk5T
RGF0ZUZvcm1hdHRlck5vU3R5bGVdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERhdGVDb21w
b25lbnRzOjpXZWVrOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIGRhdGVGb3JtYXR0ZXI7Cit9CisKKy8vIE5PVEU6IFRo
aXMgZG9lcyBub3QgY2hlY2sgZm9yIHRoZSB3aWRlc3QgZGF5IG9mIHRoZSB3ZWVrLgorLy8gV2Ug
YXNzdW1lIG5vIGZvcm1hdHRlciBvcHRpb24gc2hvd3MgdGhhdCBpbmZvcm1hdGlvbi4KK2Zsb2F0
IExvY2FsaXplZERhdGVDYWNoZTo6Y2FsY3VsYXRlTWF4aW11bVdpZHRoKERhdGVDb21wb25lbnRz
OjpUeXBlIHR5cGUsIGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgZmxvYXQgbWF4aW11bVdpZHRo
ID0gMDsKKworICAgIC8vIEdldCB0aGUgZm9ybWF0dGVyIHdlIHdvdWxkIHVzZSwgY29weSBpdCBi
ZWNhdXNlIHdlIHdpbGwgZm9yY2UgaXRzIHRpbWUgem9uZSB0byBiZSBVVEMuCisgICAgTlNEYXRl
Rm9ybWF0dGVyICpkYXRlRm9ybWF0dGVyID0gW1tmb3JtYXR0ZXJGb3JEYXRlVHlwZSh0eXBlKSBj
b3B5XSBhdXRvcmVsZWFzZV07CisgICAgW2RhdGVGb3JtYXR0ZXIgc2V0VGltZVpvbmU6W05TVGlt
ZVpvbmUgdGltZVpvbmVGb3JTZWNvbmRzRnJvbUdNVDowXV07CisKKyAgICAvLyBTYW1wbGUgZGF0
ZSB3aXRoIGEgNCBkaWdpdCB5ZWFyIGFuZCAyIGRpZ2l0IGRheSwgaG91ciwgYW5kIG1pbnV0ZS4g
RGlnaXRzIGFyZQorICAgIC8vIHR5cGljYWxseSBhbGwgZXF1YWxseSB3aWRlLiBGb3JjZSBVVEMg
dGltZXpvbmUgZm9yIHRoZSB0ZXN0IGRhdGUgYmVsb3cgc28gdGhlCisgICAgLy8gZGF0ZSBkb2Vz
bid0IGFkanVzdCBmb3IgdGhlIGN1cnJlbnQgdGltZXpvbmUuIFRoaXMgaXMgYW4gYXJiaXRyYXJ5
IGRhdGUKKyAgICAvLyAoeC0yNy0yMDA3KSBhbmQgdGltZSAoMTA6NDUgUE0pLgorICAgIFJldGFp
blB0cjxOU0NhbGVuZGFyPiBncmVnb3JpYW4gPSBhZG9wdE5TKFtbTlNDYWxlbmRhciBhbGxvY10g
aW5pdFdpdGhDYWxlbmRhcklkZW50aWZpZXI6TlNDYWxlbmRhcklkZW50aWZpZXJHcmVnb3JpYW5d
KTsKKyAgICBbZ3JlZ29yaWFuLmdldCgpIHNldFRpbWVab25lOltOU1RpbWVab25lIHRpbWVab25l
Rm9yU2Vjb25kc0Zyb21HTVQ6MF1dOworICAgIFJldGFpblB0cjxOU0RhdGVDb21wb25lbnRzPiBj
b21wb25lbnRzID0gYWRvcHROUyhbW05TRGF0ZUNvbXBvbmVudHMgYWxsb2NdIGluaXRdKTsKKyAg
ICBbY29tcG9uZW50cy5nZXQoKSBzZXREYXk6MjddOworICAgIFtjb21wb25lbnRzLmdldCgpIHNl
dFllYXI6MjAwN107CisgICAgW2NvbXBvbmVudHMuZ2V0KCkgc2V0SG91cjoyMl07CisgICAgW2Nv
bXBvbmVudHMuZ2V0KCkgc2V0TWludXRlOjQ1XTsKKworICAgIHN0YXRpYyBOU1VJbnRlZ2VyIG51
bWJlck9mR3JlZ29yaWFuTW9udGhzID0gW1tkYXRlRm9ybWF0dGVyIG1vbnRoU3ltYm9sc10gY291
bnRdOworICAgIEFTU0VSVChudW1iZXJPZkdyZWdvcmlhbk1vbnRocyA9PSAxMik7CisKKyAgICAv
LyBGb3IgZWFjaCBtb250aCAoaW4gdGhlIEdyZWdvcmlhbiBDYWxlbmRhciksIGZvcm1hdCBhIGRh
dGUgYW5kIG1lYXN1cmUgaXRzIGxlbmd0aC4KKyAgICBOU1VJbnRlZ2VyIHRvdGFsTW9udGhzVG9U
ZXN0ID0gMTsKKyAgICBpZiAodHlwZSA9PSBEYXRlQ29tcG9uZW50czo6RGF0ZQorICAgICAgICB8
fCB0eXBlID09IERhdGVDb21wb25lbnRzOjpEYXRlVGltZQorICAgICAgICB8fCB0eXBlID09IERh
dGVDb21wb25lbnRzOjpEYXRlVGltZUxvY2FsCisgICAgICAgIHx8IHR5cGUgPT0gRGF0ZUNvbXBv
bmVudHM6Ok1vbnRoKQorICAgICAgICB0b3RhbE1vbnRoc1RvVGVzdCA9IG51bWJlck9mR3JlZ29y
aWFuTW9udGhzOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IHRvdGFsTW9udGhzVG9U
ZXN0OyArK2kpIHsKKyAgICAgICAgW2NvbXBvbmVudHMuZ2V0KCkgc2V0TW9udGg6KGkgKyAxKV07
CisgICAgICAgIE5TRGF0ZSAqZGF0ZSA9IFtncmVnb3JpYW4uZ2V0KCkgZGF0ZUZyb21Db21wb25l
bnRzOmNvbXBvbmVudHMuZ2V0KCldOworICAgICAgICBOU1N0cmluZyAqZm9ybWF0dGVkRGF0ZSA9
IFtkYXRlRm9ybWF0dGVyIHN0cmluZ0Zyb21EYXRlOmRhdGVdOworICAgICAgICBTdHJpbmcgc3Ry
ID0gU3RyaW5nKGZvcm1hdHRlZERhdGUpOworICAgICAgICBtYXhpbXVtV2lkdGggPSBtYXgobWF4
aW11bVdpZHRoLCBmb250LndpZHRoKHN0cikpOworICAgIH0KKworICAgIHJldHVybiBtYXhpbXVt
V2lkdGg7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0NoYXJzZXREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L21hYy9DaGFyc2V0RGF0YS5oCmluZGV4IDQ1OGNlY2I1MGYxY2YxYzliZjUz
NGIzNzJiY2U1ODI3ZjM1ZTQ2M2QuLmE2MDcwNDI5NWNkZWMzN2ZiMDZjODY0YTM3MzkyMGI3ODUy
OTQ5MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0NoYXJz
ZXREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvQ2hhcnNldERh
dGEuaApAQCAtMjMsNiArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKyNpZiBQTEFU
Rk9STShJT1MpCit0eXBlZGVmIFVJbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEVu
Y29kaW5nOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICNkZWZpbmUga1Rl
eHRFbmNvZGluZ0lTT0xhdGluVGhhaSBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluVGhhaQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaAppbmRleCA3MDc0OTAz
ZjQyZDFmNmU4MjNkOGQ0NGNhOGI5MDdkZTcxODIyYjk2Li44NGE4ZmRiOTk0MmNhODkzOTJhZjI0
MDY1OTc1ZTQzNzUzOGY5MGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L21hYy9Mb2NhbGVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21h
Yy9Mb2NhbGVNYWMuaApAQCAtNTEsNiArNTEsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNz
T3duUHRyPExvY2FsZU1hYz4gY3JlYXRlKE5TTG9jYWxlKik7CiAgICAgfkxvY2FsZU1hYygpOwog
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgZmxvYXQgbWF4aW11bVdpZHRoRm9yRGF0
ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUsIGNvbnN0IEZvbnQmKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIFN0cmluZyBmb3JtYXREYXRlVGltZShjb25zdCBEYXRlQ29tcG9uZW50cyYsIEZvcm1h
dFR5cGUgPSBGb3JtYXRUeXBlVW5zcGVjaWZpZWQpIE9WRVJSSURFOworI2VuZGlmCisKICNpZiBF
TkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9UWVBFUykKICAgICB2aXJ0dWFsIFN0cmluZyBkYXRl
Rm9ybWF0KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTdHJpbmcgbW9udGhGb3JtYXQoKSBPVkVS
UklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2Fs
ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbQpp
bmRleCBkYjQzNWJmYTNmNzIzZTJjNDk2OWU5ZTAyMjFlZDMzYTU2ZDNjZmVjLi5kMzczYWRkNzkx
OWU2ZjdkYmRmYzY0ZjMxYmNjNDc3ZDljZjU4Y2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLm1tCkBAIC00MCw2ICs0MCwxMCBAQAogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
KyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJMb2NhbGl6ZWREYXRlQ2FjaGUuaCIKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBpbmxpbmUgU3RyaW5nIGxhbmd1YWdl
RnJvbUxvY2FsZShjb25zdCBTdHJpbmcmIGxvY2FsZSkKQEAgLTExNiw2ICsxMjAsMzUgQEAgUmV0
YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gTG9jYWxlTWFjOjpzaG9ydERhdGVGb3JtYXR0ZXIoKQog
ICAgIHJldHVybiBjcmVhdGVEYXRlVGltZUZvcm1hdHRlcihtX2xvY2FsZS5nZXQoKSwgbV9ncmVn
b3JpYW5DYWxlbmRhci5nZXQoKSwgTlNEYXRlRm9ybWF0dGVyU2hvcnRTdHlsZSwgTlNEYXRlRm9y
bWF0dGVyTm9TdHlsZSk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitTdHJpbmcgTG9jYWxlTWFj
Ojpmb3JtYXREYXRlVGltZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZUNvbXBvbmVudHMsIEZv
cm1hdFR5cGUpCit7CisgICAgZG91YmxlIG1zZWMgPSBkYXRlQ29tcG9uZW50cy5taWxsaXNlY29u
ZHNTaW5jZUVwb2NoKCk7CisgICAgRGF0ZUNvbXBvbmVudHM6OlR5cGUgdHlwZSA9IGRhdGVDb21w
b25lbnRzLnR5cGUoKTsKKworICAgIC8vICJ3ZWVrIiB0eXBlIG5vdCBzdXBwb3J0ZWQuCisgICAg
QVNTRVJUKHR5cGUgIT0gRGF0ZUNvbXBvbmVudHM6OkludmFsaWQpOworICAgIGlmICh0eXBlID09
IERhdGVDb21wb25lbnRzOjpXZWVrKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAv
LyBJbmNvbWluZyBtc2VjIHZhbHVlIGlzIG1pbGxpc2Vjb25kcyBzaW5jZSAxOTcwLTAxLTAxIDAw
OjAwOjAwIFVUQy4gVGhlIDE5NzAgZXBvY2guCisgICAgTlNUaW1lSW50ZXJ2YWwgc2Vjb25kc1Np
bmNlMTk3MCA9IChtc2VjIC8gMTAwMCk7CisgICAgTlNEYXRlICpkYXRlID0gW05TRGF0ZSBkYXRl
V2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDpzZWNvbmRzU2luY2UxOTcwXTsKKworICAgIC8vIFJl
dHVybiBhIGZvcm1hdHRlZCBzdHJpbmcuCisgICAgTlNEYXRlRm9ybWF0dGVyICpkYXRlRm9ybWF0
dGVyID0gbG9jYWxpemVkRGF0ZUNhY2hlKCkuZm9ybWF0dGVyRm9yRGF0ZVR5cGUodHlwZSk7Cisg
ICAgcmV0dXJuIFtkYXRlRm9ybWF0dGVyIHN0cmluZ0Zyb21EYXRlOmRhdGVdOworfQorCitmbG9h
dCBMb2NhbGVNYWM6Om1heGltdW1XaWR0aEZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBl
IHR5cGUsIGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgQVNTRVJUKHR5cGUgIT0gRGF0ZUNvbXBv
bmVudHM6OkludmFsaWQpOworICAgIEFTU0VSVCh0eXBlICE9IERhdGVDb21wb25lbnRzOjpXZWVr
KTsKKworICAgIHJldHVybiBsb2NhbGl6ZWREYXRlQ2FjaGUoKS5tYXhpbXVtV2lkdGhGb3JEYXRl
VHlwZSh0eXBlLCBmb250KTsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKERBVEVfQU5EX1RJTUVf
SU5QVVRfVFlQRVMpCiBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlTWFjOjptb250aExhYmVs
cygpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0
Qm91bmRhcmllcy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRCb3Vu
ZGFyaWVzLm1tCmluZGV4IDJmOTIxN2YwN2JhMTgzY2E3ZjljZmQxYjk5N2M5ZWYwYTU5NTg5MTUu
LjMzNmQ3ZjVlMTY2MmJlN2E3MDFjNGZjMDZiODY5NGYyNmZmNTNjNzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRCb3VuZGFyaWVzLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRCb3VuZGFyaWVzLm1tCkBAIC0yNiwx
MCArMjYsMTc3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlRleHRCb3VuZGFyaWVz
LmgiCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJUZXh0QnJlYWtJdGVyYXRvckludGVy
bmFsSUNVLmgiCisjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9DRlN0cmluZ1Rva2VuaXplci5oPgor
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDx1bmljb2RlL3Vicmsu
aD4KKyNpbXBvcnQgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbXBvcnQgPHVuaWNvZGUvdXN0cmluZy5o
PgorI2ltcG9ydCA8dW5pY29kZS91dHlwZXMuaD4KKyNpbXBvcnQgPHd0Zi91bmljb2RlL0NoYXJh
Y3Rlck5hbWVzLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCisjaWYgUExBVEZPUk0oSU9TKQorCitzdGF0aWMgYm9vbCBpc1NraXBD
aGFyYWN0ZXIoVUNoYXIzMiBjKQoreworICAgIHJldHVybiBjID09IDB4QTAgfHwgCisgICAgICAg
IGMgPT0gJ1xuJyB8fCAKKyAgICAgICAgYyA9PSAnLicgfHwgCisgICAgICAgIGMgPT0gJywnIHx8
IAorICAgICAgICBjID09ICchJyAgfHwgCisgICAgICAgIGMgPT0gJz8nIHx8IAorICAgICAgICBj
ID09ICc7JyB8fCAKKyAgICAgICAgYyA9PSAnOicgfHwgCisgICAgICAgIHVfaXNzcGFjZShjKTsK
K30KKworc3RhdGljIGJvb2wgaXNXaGl0ZXNwYWNlQ2hhcmFjdGVyKFVDaGFyMzIgYykKK3sKKyAg
ICByZXR1cm4gYyA9PSAweEEwIHx8IAorICAgICAgICBjID09ICdcbicgfHwgCisgICAgICAgIHVf
aXNzcGFjZShjKTsKK30KKworc3RhdGljIGJvb2wgaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihV
Q2hhcjMyIGMpCit7CisgICAgQ0ZDaGFyYWN0ZXJTZXRSZWYgc2V0ID0gQ0ZDaGFyYWN0ZXJTZXRH
ZXRQcmVkZWZpbmVkKGtDRkNoYXJhY3RlclNldEFscGhhTnVtZXJpYyk7CisgICAgLy8gQW1wZXJz
YW5kIGlzIGFuIGV4Y2VwdGlvbiBhZGRlZCB0byB0cmVhdCBBVCZUIGFzIGEgc2luZ2xlIHdvcmQg
KHNlZSA8cmRhcjovL3Byb2JsZW0vNTAyMjI2ND4pLgorICAgIHJldHVybiAhQ0ZDaGFyYWN0ZXJT
ZXRJc0xvbmdDaGFyYWN0ZXJNZW1iZXIoc2V0LCBjKSAmJiBjICE9ICcmJzsKK30KKworc3RhdGlj
IGJvb2wgaXNTeW1ib2xDaGFyYWN0ZXIoVUNoYXIzMiBjKQoreworICAgIENGQ2hhcmFjdGVyU2V0
UmVmIHNldCA9IENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFyYWN0ZXJTZXRTeW1i
b2wpOworICAgIHJldHVybiBDRkNoYXJhY3RlclNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihzZXQs
IGMpOworfQorCitzdGF0aWMgYm9vbCBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKFVDaGFy
MzIgY2hhcmFjdGVyKQoreworICAgIC8vIFRoZXNlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJl
aGF2ZSBhcyB3b3JkIGJvdW5kYXJpZXMsIGJ1dCBjYW4gYXBwZWFyIHdpdGhpbiB3b3Jkcy4KKyAg
ICByZXR1cm4gY2hhcmFjdGVyID09ICdcJycgfHwgY2hhcmFjdGVyID09IHJpZ2h0U2luZ2xlUXVv
dGF0aW9uTWFyayB8fCBjaGFyYWN0ZXIgPT0gaGVicmV3UHVuY3R1YXRpb25HZXJzaGF5aW07Cit9
CisKK3N0YXRpYyBDRlN0cmluZ1Rva2VuaXplclJlZiB0b2tlbml6ZXJGb3JTdHJpbmcoQ0ZTdHJp
bmdSZWYgc3RyKQoreworICAgIHN0YXRpYyBDRlN0cmluZ1Rva2VuaXplclJlZiB0b2tlbml6ZXIg
PSBudWxscHRyOworICAgIHN0YXRpYyBDRkxvY2FsZVJlZiBsb2NhbGUgPSBudWxscHRyOworCisg
ICAgaWYgKCFsb2NhbGUpIHsKKyAgICAgICAgY29uc3QgY2hhciogdGVtcCA9IGN1cnJlbnRUZXh0
QnJlYWtMb2NhbGVJRCgpOworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGN1cnJlbnRM
b2NhbGVJRCA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXNOb0NvcHkobnVsbHB0ciwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KHRlbXApLCBzdHJsZW4odGVtcCksICBrQ0ZT
dHJpbmdFbmNvZGluZ0FTQ0lJLCBmYWxzZSwga0NGQWxsb2NhdG9yTnVsbCkpOworICAgICAgICBs
b2NhbGUgPSBDRkxvY2FsZUNyZWF0ZShudWxscHRyLCBjdXJyZW50TG9jYWxlSUQuZ2V0KCkpOwor
ICAgICAgICBpZiAoIWxvY2FsZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIENGUmFuZ2UgZW50aXJlUmFuZ2UgPSBDRlJhbmdlTWFrZSgwLCBDRlN0cmluZ0dldExl
bmd0aChzdHIpKTsgICAgCisKKyAgICBpZiAoIXRva2VuaXplcikKKyAgICAgICAgdG9rZW5pemVy
ID0gQ0ZTdHJpbmdUb2tlbml6ZXJDcmVhdGUobnVsbHB0ciwgc3RyLCBlbnRpcmVSYW5nZSwga0NG
U3RyaW5nVG9rZW5pemVyVW5pdFdvcmRCb3VuZGFyeSwgbG9jYWxlKTsKKyAgICBlbHNlCisgICAg
ICAgIENGU3RyaW5nVG9rZW5pemVyU2V0U3RyaW5nKHRva2VuaXplciwgc3RyLCBlbnRpcmVSYW5n
ZSk7CisgICAgcmV0dXJuIHRva2VuaXplcjsKK30KKworCisvLyBTaW1wbGUgY2FzZTogYSB3b3Jk
IGlzIGEgc3RyZWFtIG9mIGNoYXJhY3RlcnMKKy8vIGRlbGltaXRlZCBieSBhIHNwZWNpYWwgc2V0
IG9mIHdvcmQtZGVsaW1pdGluZyBjaGFyYWN0ZXJzLgorc3RhdGljIHZvaWQgZmluZFNpbXBsZVdv
cmRCb3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50
KiBzdGFydCwgaW50KiBlbmQpCit7CisgICAgQVNTRVJUKHBvc2l0aW9uID49IDApOworICAgIEFT
U0VSVChwb3NpdGlvbiA8IGxlbik7CisKKyAgICBpbnQgc3RhcnRQb3MgPSBwb3NpdGlvbjsKKyAg
ICB3aGlsZSAoc3RhcnRQb3MgPiAwKSB7CisgICAgICAgIGludCBpID0gc3RhcnRQb3M7CisgICAg
ICAgIFVDaGFyMzIgY2hhcmFjdGVyQmVmb3JlU3RhcnRQb3M7CisgICAgICAgIFUxNl9QUkVWKGNo
YXJzLCAwLCBpLCBjaGFyYWN0ZXJCZWZvcmVTdGFydFBvcyk7CisgICAgICAgIGlmIChpc1dvcmRE
ZWxpbWl0aW5nQ2hhcmFjdGVyKGNoYXJhY3RlckJlZm9yZVN0YXJ0UG9zKSkgeworICAgICAgICAg
ICAgQVNTRVJUKGkgPj0gMCk7CisgICAgICAgICAgICBpZiAoIWkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGlmICghaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rlcihj
aGFyYWN0ZXJCZWZvcmVTdGFydFBvcykpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyQmVmb3JlQmVmb3JlU3RhcnRQb3M7CisgICAgICAgICAg
ICBVMTZfUFJFVihjaGFycywgMCwgaSwgY2hhcmFjdGVyQmVmb3JlQmVmb3JlU3RhcnRQb3MpOwor
ICAgICAgICAgICAgaWYgKGlzV29yZERlbGltaXRpbmdDaGFyYWN0ZXIoY2hhcmFjdGVyQmVmb3Jl
QmVmb3JlU3RhcnRQb3MpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIFUxNl9CQUNLXzEoY2hhcnMsIDAsIHN0YXJ0UG9zKTsKKyAgICB9CisgICAgCisgICAgaW50
IGVuZFBvcyA9IHBvc2l0aW9uOworICAgIHdoaWxlIChlbmRQb3MgPCBsZW4pIHsKKyAgICAgICAg
VUNoYXIzMiBjaGFyYWN0ZXI7CisgICAgICAgIFUxNl9HRVQoY2hhcnMsIDAsIGVuZFBvcywgbGVu
LCBjaGFyYWN0ZXIpOworICAgICAgICBpZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFy
YWN0ZXIpKSB7CisgICAgICAgICAgICBpbnQgaSA9IGVuZFBvczsKKyAgICAgICAgICAgIFUxNl9G
V0RfMShjaGFycywgaSwgbGVuKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDw9IGxlbik7CisgICAg
ICAgICAgICBpZiAoaSA9PSBsZW4pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBVQ2hhcjMyIGNoYXJhY3RlckFmdGVyRW5kUG9zOworICAgICAgICAgICAgVTE2X05FWFQoY2hh
cnMsIGksIGxlbiwgY2hhcmFjdGVyQWZ0ZXJFbmRQb3MpOworICAgICAgICAgICAgaWYgKCFpc0Ft
YmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKGNoYXJhY3RlcikpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBpZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXJB
ZnRlckVuZFBvcykpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
VTE2X0ZXRF8xKGNoYXJzLCBlbmRQb3MsIGxlbik7CisgICAgfQorCisgICAgLy8gVGhlIHRleHQg
bWF5IGNvbnNpc3Qgb2YgYWxsIGRlbGltaXRlciBjaGFyYWN0ZXJzIChlLmcuICIrKysrKysrKyIg
b3IgYSBzZXJpZXMgb2YgZW1vamkpLCBhbmQgcmV0dXJuaW5nIGFuIGVtcHR5IHJhbmdlCisgICAg
Ly8gbWFrZXMgbm8gc2Vuc2UgKGFuZCBkb2Vzbid0IG1hdGNoIGZpbmRDb21wbGV4V29yZEJvdW5k
YXJ5KCkgYmVoYXZpb3IpLgorICAgIGlmIChzdGFydFBvcyA9PSBlbmRQb3MgJiYgZW5kUG9zIDwg
bGVuKSB7CisgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAgICAgICBVMTZfR0VUKGNoYXJz
LCAwLCBlbmRQb3MsIGxlbiwgY2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKGlzU3ltYm9sQ2hhcmFj
dGVyKGNoYXJhY3RlcikpCisgICAgICAgICAgICBVMTZfRldEXzEoY2hhcnMsIGVuZFBvcywgbGVu
KTsKKyAgICB9CisKKyAgICAqc3RhcnQgPSBzdGFydFBvczsKKyAgICAqZW5kID0gZW5kUG9zOwor
fQorCisvLyBDb21wbGV4IGNhc2U6IHVzZSBDRlN0cmluZ1Rva2VuaXplciB0byBmaW5kIHdvcmQg
Ym91bmRhcnkuCitzdGF0aWMgdm9pZCBmaW5kQ29tcGxleFdvcmRCb3VuZGFyeShjb25zdCBVQ2hh
ciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQpCit7
CisgICAgQ0ZTdHJpbmdSZWYgY2hhclN0cmluZyA9IENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3Rl
cnNOb0NvcHkoTlVMTCwgY2hhcnMsIGxlbiwga0NGQWxsb2NhdG9yTnVsbCk7CisgICAgQVNTRVJU
KGNoYXJTdHJpbmcpOworICAgIAorICAgIENGU3RyaW5nVG9rZW5pemVyUmVmIHRva2VuaXplciA9
IHRva2VuaXplckZvclN0cmluZyhjaGFyU3RyaW5nKTsKKyAgICBpZiAodG9rZW5pemVyKSB7ICAg
ICAgICAKKyAgICAgICAgQ0ZTdHJpbmdUb2tlbml6ZXJUb2tlblR5cGUgIHRva2VuID0gQ0ZTdHJp
bmdUb2tlbml6ZXJHb1RvVG9rZW5BdEluZGV4KHRva2VuaXplciwgcG9zaXRpb24pOworICAgICAg
ICBDRlJhbmdlIHJlc3VsdDsKKyAgICAgICAgaWYgKHRva2VuICE9IGtDRlN0cmluZ1Rva2VuaXpl
clRva2VuTm9uZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gQ0ZTdHJpbmdUb2tlbml6ZXJHZXRD
dXJyZW50VG9rZW5SYW5nZSh0b2tlbml6ZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gaWYgbm8gdG9rZW4gZm91bmQ6IHNlbGVjdCBlbnRpcmUgYmxvY2sKKyAgICAgICAgICAg
IC8vIE5COiBJIG5ldmVyIGhpdCB0aGlzIHNlY3Rpb24gaW4gYWxsIG15IHRlc3RpbmcuLi4KKyAg
ICAgICAgICAgIHJlc3VsdC5sb2NhdGlvbiA9IDA7CisgICAgICAgICAgICByZXN1bHQubGVuZ3Ro
ID0gbGVuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAqc3RhcnQgPSByZXN1bHQubG9j
YXRpb247CisgICAgICAgICplbmQgPSByZXN1bHQubG9jYXRpb24gKyByZXN1bHQubGVuZ3RoOwor
ICAgIH0gZWxzZSB7ICAgIC8vIGVycm9yIGNyZWF0aW5nIHRva2VuaXplcgorICAgICAgICBmaW5k
U2ltcGxlV29yZEJvdW5kYXJ5KGNoYXJzLCBsZW4sIHBvc2l0aW9uLCBzdGFydCwgZW5kKTsKKyAg
ICB9CisKKyAgICBDRlJlbGVhc2UoY2hhclN0cmluZyk7Cit9CisjZW5kaWYKKwogdm9pZCBmaW5k
V29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBp
bnQqIHN0YXJ0LCBpbnQqIGVuZCkKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIE5TU3RyaW5n
KiBzdHJpbmcgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnNOb0NvcHk6Y29u
c3RfY2FzdDx1bmljaGFyKj4oY2hhcnMpCiAgICAgICAgIGxlbmd0aDpsZW4gZnJlZVdoZW5Eb25l
Ok5PXTsKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcqIGF0dHIgPSBbW05TQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6c3RyaW5nXTsKQEAgLTM4LDYgKzIwNSw0NCBAQCB2b2lk
IGZpbmRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRp
b24sIGludCogc3RhcnQsIGludAogICAgIFtzdHJpbmcgcmVsZWFzZV07CiAgICAgKnN0YXJ0ID0g
cmFuZ2UubG9jYXRpb247CiAgICAgKmVuZCA9IHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3Ro
OworI2Vsc2UKKyAgICBpbnQgcG9zID0gcG9zaXRpb247CisgICAgaWYgKCBwb3NpdGlvbiA9PSBs
ZW4gJiYgcG9zaXRpb24gIT0gMCkKKyAgICAgICAgcG9zLS07CisgICAgCisgICAgLy8gRm9yIGNv
bXBsZXggdGV4dCAoVGhhaSwgSmFwYW5lc2UsIENoaW5lc2UpLCB2aXNpYmxlX3VuaXRzIHdpbGwg
cGFzcyB0aGUgdGV4dCBpbiBhcyBhIAorICAgIC8vIHNpbmdsZSBjb250aWd1b3VzIHJ1biBvZiBj
aGFyYWN0ZXJzLCBwcm92aWRpbmcgYXMgbXVjaCBjb250ZXh0IGFzIGlzIHBvc3NpYmxlLgorICAg
IC8vIFdlIG9ubHkgbmVlZCBvbmUgY2hhcmFjdGVyIHRvIGRldGVybWluZSBpZiB0aGUgdGV4dCBp
cyBjb21wbGV4LgorICAgIFVDaGFyMzIgY2g7CisgICAgaW50IGkgPSBwb3M7CisgICAgVTE2X05F
WFQoY2hhcnMsaSxsZW4sY2gpOworICAgIGJvb2wgaXNDb21wbGV4ID0gcmVxdWlyZXNDb250ZXh0
Rm9yV29yZEJvdW5kYXJ5KGNoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpbXBy
b3ZlcyBvdXIgd29yZCBib3VuZGFyeSBiZWhhdmlvciwgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZ28g
ZmFyIGVub3VnaC4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzg4NTM5NTE+IFRha2UgY29t
cGxleCB3b3JkIGJvdW5kYXJ5IGZpbmRpbmcgcGF0aCB3aGVuIG5lY2Vzc2FyeQorICAgIGlmICgh
aXNDb21wbGV4KSB7CisgICAgICAgIC8vIENoZWNrIGFnYWluIGZvciBjb21wbGV4IHRleHQsIGF0
IHRoZSBzdGFydCBvZiB0aGUgcnVuLgorICAgICAgICBpID0gMDsKKyAgICAgICAgVTE2X05FWFQo
Y2hhcnMsIGksIGxlbiwgY2gpOworICAgICAgICBpc0NvbXBsZXggPSByZXF1aXJlc0NvbnRleHRG
b3JXb3JkQm91bmRhcnkoY2gpOworICAgIH0KKyAgICAKKyAgICBpZiAoaXNDb21wbGV4KSB7Cisg
ICAgICAgIGZpbmRDb21wbGV4V29yZEJvdW5kYXJ5KGNoYXJzLGxlbiwgcG9zaXRpb24sIHN0YXJ0
LCBlbmQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZpbmRTaW1wbGVXb3JkQm91bmRhcnkoY2hh
cnMsbGVuLCBwb3NpdGlvbiwgc3RhcnQsIGVuZCk7CisgICAgfQorCisjZGVmaW5lIExPR19XT1JE
X0JSRUFLIDAKKyNpZiBMT0dfV09SRF9CUkVBSworICAgIENGU3RyaW5nUmVmIHVuaVN0cmluZyA9
IENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoTlVMTCwgY2hhcnMsIGxlbik7CisgICAgQ0ZT
dHJpbmdSZWYgZm91bmRXb3JkID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhOVUxMLCAo
Y29uc3QgVW5pQ2hhciAqKSBjaGFycyArICpzdGFydCwgKmVuZCAtICpzdGFydCk7ICAgICAgICAK
KyAgICBOU0xvZyhAIiVzX0JSRUFLICclQCcgKCVkLCVkKSBpbiAnJUAnICglcCkgYXQgJWQsIGxl
bmd0aD0lZCIsIGlzQ29tcGxleCA/ICJDT01QTEVYIiA6ICJTSU1QTEUiLCBmb3VuZFdvcmQsICpz
dGFydCwgKmVuZCwgdW5pU3RyaW5nLCB1bmlTdHJpbmcsIHBvc2l0aW9uLCBsZW4pOworICAgIENG
UmVsZWFzZShmb3VuZFdvcmQpOworICAgIENGUmVsZWFzZSh1bmlTdHJpbmcpOworI2VuZGlmCisg
ICAgCisjZW5kaWYKIH0KIAogdm9pZCBmaW5kRW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBj
aGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIGVuZCkKQEAgLTUzLDYgKzI1OCw3IEBA
IHZvaWQgZmluZEVuZFdvcmRCb3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGlu
dCBwb3NpdGlvbiwgaW50KiBlbmQpCiAKIGludCBmaW5kTmV4dFdvcmRGcm9tSW5kZXgoY29uc3Qg
VUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCkKIHsgICAK
KyNpZiAhUExBVEZPUk0oSU9TKQogICAgIE5TU3RyaW5nKiBzdHJpbmcgPSBbW05TU3RyaW5nIGFs
bG9jXSBpbml0V2l0aENoYXJhY3RlcnNOb0NvcHk6Y29uc3RfY2FzdDx1bmljaGFyKj4oY2hhcnMp
CiAgICAgICAgIGxlbmd0aDpsZW4gZnJlZVdoZW5Eb25lOk5PXTsKICAgICBOU0F0dHJpYnV0ZWRT
dHJpbmcqIGF0dHIgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
c3RyaW5nXTsKQEAgLTYwLDYgKzI2NiwzNSBAQCBpbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KGNv
bnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBib29sIGZvcndhcgogICAg
IFthdHRyIHJlbGVhc2VdOwogICAgIFtzdHJpbmcgcmVsZWFzZV07CiAgICAgcmV0dXJuIHJlc3Vs
dDsKKyNlbHNlCisgICAgLy8gVGhpcyB2ZXJ5IGxpa2VseSB3b24ndCBiZWhhdmUgZXhhY3RseSBs
aWtlIHRoZSBub24taVBob25lIHZlcnNpb24sIGJ1dCBpdCB3b3JrcworICAgIC8vIGZvciB0aGUg
Y29udGV4dHMgaW4gd2hpY2ggaXQgaXMgdXNlZCBvbiBpUGhvbmUsIGFuZCBpbiB0aGUgZnV0dXJl
IHdpbGwgYmUKKyAgICAvLyB0dW5lZCB0byBpbXByb3ZlIHRoZSBpUGhvbmUtc3BlY2lmaWMgYmVo
YXZpb3IgZm9yIHRoZSBrZXlib2FyZCBhbmQgdGV4dCBlZGl0aW5nLgorICAgIGludCBwb3MgPSBw
b3NpdGlvbjsKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBVQnJl
YWtJdGVyYXRvciAqYm91bmRhcnkgPSB1YnJrX29wZW4oVUJSS19XT1JELCBjdXJyZW50VGV4dEJy
ZWFrTG9jYWxlSUQoKSwgY29uc3RfY2FzdDx1bmljaGFyICo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5pY2hhciAqPihjaGFycykpLCBsZW4sICZzdGF0dXMpOworCisgICAgaWYgKGJvdW5kYXJ5
ICYmIFVfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAg
ICAgICBkbyB7CisgICAgICAgICAgICAgICAgcG9zID0gdWJya19mb2xsb3dpbmcoYm91bmRhcnks
IHBvcyk7ICAgIAorICAgICAgICAgICAgICAgIGlmIChwb3MgPT0gVUJSS19ET05FKSB7CisgICAg
ICAgICAgICAgICAgICAgIHBvcyA9IGxlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IHdoaWxlIChwb3MgPCBsZW4gJiYgKHBvcyA9PSAwIHx8ICFpc1NraXBDaGFyYWN0ZXIoY2hh
cnNbcG9zLTFdKSkgJiYgaXNTa2lwQ2hhcmFjdGVyKGNoYXJzW3Bvc10pKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBwb3MgPSB1
YnJrX3ByZWNlZGluZyhib3VuZGFyeSwgcG9zKTsKKyAgICAgICAgICAgICAgICBpZiAocG9zID09
IFVCUktfRE9ORSkgeworICAgICAgICAgICAgICAgICAgICBwb3MgPSAwOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKHBvcyA+IDAgJiYgaXNTa2lwQ2hhcmFjdGVyKGNo
YXJzW3Bvc10pICYmICFpc1doaXRlc3BhY2VDaGFyYWN0ZXIoY2hhcnNbcG9zLTFdKSk7CisgICAg
ICAgIH0KKyAgICAgICAgdWJya19jbG9zZShib3VuZGFyeSk7CisgICAgfQorICAgIHJldHVybiBw
b3M7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5jcHAKaW5kZXggNDhhOTc3NmE5ZTU1
YTNjYjRjY2NlYTJiNWQ3OTIzMjFhYjQ0NTdkZC4uNzNlZDRlODFkY2VmZmFmZDc0YzY4YWYwZDBl
NWRkNjgzYjVkNjkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9t
YWMvVGV4dENvZGVjTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21h
Yy9UZXh0Q29kZWNNYWMuY3BwCkBAIC0yNCw2ICsyNCw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwogCisjaWYgIVBMQVRGT1JNKElPUykKKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlRleHRDb2RlY01hYy5oIgogCkBAIC0zMjUsMyArMzI3LDUgQEAgQ1N0cmluZyBUZXh0Q29kZWNN
YWM6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNv
ZGFibGUKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRD
b2RlY01hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFj
LmgKaW5kZXggM2U3YTIzN2MxMzdlOTk3MDAzNGE3YThmYWUxYmZlMDg3NDVlMjkxMy4uNDYwMmIx
YmE4YzY5ZWVlOGIxMzg0ODA0MjU4ZmM4YjFjYzA3NDMzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmgKQEAgLTI3LDYgKzI3LDggQEAKICNp
Zm5kZWYgVGV4dENvZGVjTWFjX2gKICNkZWZpbmUgVGV4dENvZGVjTWFjX2gKIAorI2lmICFQTEFU
Rk9STShJT1MpCisKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKICNpbmNsdWRlIDxDb3JlU2Vydmlj
ZXMvQ29yZVNlcnZpY2VzLmg+CiAKQEAgLTcwLDQgKzcyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQor
CiAjZW5kaWYgLy8gVGV4dENvZGVjTWFjX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220733</attachid>
            <date>2014-01-09 07:40:01 -0800</date>
            <delta_ts>2014-01-09 14:37:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126654-20140109074000.patch</filename>
            <type>text/plain</type>
            <size>1057488</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDFhOGNhZDI5ZjY2ZDg1YzEyMDg4ZjY2
ZDkyMmM0MTA1YjBiYmI3ZWEuLjM0NGRhYzAzMzBhZGI2ODJmOGIzZWE4NzM2ZmZmOGNjNDQ2Mzdj
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMDEtMDggIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFVwc3RyZWFtIFdlYkNvcmUvcGxhdGZvcm0g
Y2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI2NjU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmNhbkFjY2Vzc1RocmVhZExvY2Fs
RGF0YUZvclRocmVhZCk6CisgICAgICAgICogd3RmL01haW5UaHJlYWQuaDoKKwogMjAxNC0wMS0w
NyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIE1h
cmtpbmcgc2hvdWxkIGJlIGdlbmVyYXRpb25hbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGJhNjQ4Yzk4OTU3NWJh
MzVhNzk2YTExOTQwYzBmOWJhNDBmZWYyNzkuLmNjODg3YTVmN2UxZmJiZDk3YzRkMjQ4NTNjNzc2
Yzc4YzRhNTcyNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NTcgQEAKKzIwMTQtMDEtMDggIERh
bmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFVwc3RyZWFt
IFdlYkNvcmUvcGxhdGZvcm0gY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NjU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vQ29udGVudEZpbHRl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0v
RmlsZUNob29zZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmNob29zZU1l
ZGlhRmlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmg6CisgICAgICAgICog
cGxhdGZvcm0vRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRNZXRhZGF0YVVS
TCk6CisgICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3RlbS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L0tpbGxSaW5nTm9uZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpmaWxlQnV0dG9uQ2hvb3NlTWVkaWFGaWxlTGFiZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmlsZUJ1dHRvbkNob29zZU11bHRpcGxlTWVkaWFGaWxlc0xhYmVs
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGVCdXR0b25Ob01lZGlhRmlsZVNlbGVjdGVkTGFiZWwp
OgorICAgICAgICAoV2ViQ29yZTo6ZmlsZUJ1dHRvbk5vTWVkaWFGaWxlc1NlbGVjdGVkTGFiZWwp
OgorICAgICAgICAqIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9Mb2dnaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZVN1cHBvcnRlZE5vbkltYWdlTWltZVR5cGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVVbnN1cHBvcnRlZFRleHRNSU1FVHlwZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6Ok1lbW9yeVByZXNzdXJlSGFuZGxlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OmV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybU1vdXNl
RXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1N
b3VzZUV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oOgorICAgICAg
ICAqIHBsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjptYWluQnVuZGxlSXNFcXVhbFRvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9SdW50aW1lQXBw
bGljYXRpb25DaGVja3NJT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmguCisgICAgICAgICogcGxhdGZvcm0vUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzSU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6aGFuZGxlVG91
Y2hFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxUeXBlcy5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dW5zY2FsZWRWaXNpYmxlQ29udGVu
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3OjphY3R1YWxTY3JvbGxYKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OmFjdHVhbFNjcm9sbFkpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZEluQm90aERpcmVjdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmlzUGlubmVkSG9yaXpvbnRhbGx5
SW5EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmlzUGlubmVk
VmVydGljYWxseUluRGlyZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmlzVG91Y2hTY3JvbGxhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjppc092ZXJmbG93U2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpkaWRTdGFydFNjcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZGlkRW5kU2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGFibGVBcmVhOjpkaWRVcGRhdGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYWJsZUFyZWE6OnNldElzVXNlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxhYmxlQXJlYTo6aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01pbmltdW1Qb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aXNIb3Jpem9udGFsU2Nyb2xs
ZXJQaW5uZWRUb01heGltdW1Qb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxl
QXJlYTo6aXNWZXJ0aWNhbFNjcm9sbGVyUGlubmVkVG9NaW5pbXVtUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmlzVmVydGljYWxTY3JvbGxlclBpbm5lZFRvTWF4
aW11bVBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbGJhci5oOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZVB1cmdlYWJsZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpzaG91bGRV
c2VQdXJnZWFibGVNZW1vcnkpOgorICAgICAgICAqIHBsYXRmb3JtL1N1ZGRlblRlcm1pbmF0aW9u
Lmg6CisgICAgICAgICogcGxhdGZvcm0vU3VwcGxlbWVudGFibGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN1cHBsZW1lbnRhYmxlOjpwcm92aWRlU3VwcGxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdXBwbGVtZW50YWJsZTo6cmVtb3ZlU3VwcGxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
dXBwbGVtZW50YWJsZTo6cmVxdWlyZVN1cHBsZW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL1N5
c3RlbU1lbW9yeS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TdHJpbmdUcnVuY2F0b3IuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9UaHJlYWRDaGVjay5oOgor
ICAgICAgICAqIHBsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGhyZWFkR2xvYmFsRGF0YTo6VGhyZWFkR2xvYmFsRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpUaHJlYWRHbG9iYWxEYXRhOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZEds
b2JhbERhdGE6OnNldFdlYkNvcmVUaHJlYWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnRocmVh
ZEdsb2JhbERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9UaHJlYWRUaW1lcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhy
ZWFkVGltZXJzOjpUaHJlYWRUaW1lcnMpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkVGltZXJz
OjpzaGFyZWRUaW1lckZpcmVkSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3JtL1RpbWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVyQmFzZTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGltZXJCYXNlOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVyQmFzZTo6c2V0TmV4
dEZpcmVUaW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaW1lci5oOgorICAgICAgICAoV2ViQ29y
ZTo6VGltZXJCYXNlOjppc0FjdGl2ZSk6CisgICAgICAgICogcGxhdGZvcm0vVVJMLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmVuYWJsZVVSTFNjaGVtZUNhbm9uaWNhbGl6YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6ZXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6VVJMOjpwYXJzZSk6CisgICAg
ICAgICogcGxhdGZvcm0vVVJMLmg6CisgICAgICAgICogcGxhdGZvcm0vV2lkZ2V0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmg6CisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQXVkaW9CdWZmZXJMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxl
UmVhZGVyOjpBdWRpb0ZpbGVSZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVh
ZGVyOjp+QXVkaW9GaWxlUmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRl
cjo6cmVhZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpnZXRTaXpl
UHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OmNyZWF0ZUJ1cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZSk6CisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaC4KKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvRmlsZVJlYWRlcjo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFk
ZXI6OmRhdGFTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9TZXNzaW9u
SU9TLm1tOgorICAgICAgICAoU09GVF9MSU5LX1BPSU5URVIpOgorICAgICAgICAoLVtXZWJBdWRp
b1Nlc3Npb25IZWxwZXIgaW5pdFdpdGhDYWxsYmFjazpXZWJDb3JlOjpdKToKKyAgICAgICAgKC1b
V2ViQXVkaW9TZXNzaW9uSGVscGVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV2ViQXVkaW9TZXNz
aW9uSGVscGVyIGludGVycnVwdGlvbjpdKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2Vzc2lv
bjo6c2V0Q2F0ZWdvcnkpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3Rp
bmF0aW9uTWFjLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVh
ZGVyTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6QXVkaW9GaWxl
UmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TZXNzaW9uTWFjLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9tYWMvTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHA6CisgICAgICAgIChNZWRp
YVNlc3Npb25NYW5hZ2VyOjp1cGRhdGVTZXNzaW9uU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2NmL1NoYXJlZEJ1ZmZlckNGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6
U2hhcmVkQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9VUkxDRi5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vY29jb2EvS2V5RXZlbnRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Ondp
bmRvd3NLZXlDb2RlRm9yQ2hhckNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhY2hlRnJhbWVJbmZvKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjp1cGRhdGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpvcmlnaW5hbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
Om9yaWdpbmFsU2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OmVuc3VyZUZyYW1lSW5mb0lzQ2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpmcmFtZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSXND
b21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lRHVy
YXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUhhc0Fs
cGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVPcmllbnRh
dGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnRlcm5hbEFkdmFuY2VBbmlt
YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzRGFyayk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp3aWR0aCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHA6CisgICAgICAgIChpbml0Rm9udENhY2hlTG9ja09uY2UpOgorICAgICAgICAoRm9udExv
Y2tlcjo6Rm9udExvY2tlcik6CisgICAgICAgIChGb250TG9ja2VyOjp+Rm9udExvY2tlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpmb250Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0Q2FjaGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpyZWxl
YXNlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGFJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1cmdlSW5h
Y3RpdmVGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmRyYXdTaW1wbGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmRyYXdHbHlwaEJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBo
cy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Zm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpyb3VuZHNHbHlwaEFkdmFuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6aGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJl
ZU5vZGU6OmluaXRpYWxpemVQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFw
aGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UmFp
c2VkRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW1vamlEcmF3aW5nRW5hYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEVtb2ppRHJhd2luZ0VuYWJsZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllcjo6d2lsbEJlRGVzdHJveWVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpj
b250ZW50c0xheWVyRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6
cGl4ZWxBbGlnbm1lbnRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6
aGFzRmxhdHRlbmVkUGVyc3BlY3RpdmVUcmFuc2Zvcm0pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ljb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1RpbGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6Omlz
U3Vic2FtcGxlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW50U2l6ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omluc3RhbGxlZE1lZGlhRW5naW5lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6aXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVz
cyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlj
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpoYXNXaXJlbGVzc1BsYXliYWNr
VGFyZ2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6d2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnNldFdpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
OjpzZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnBsYXliYWNrVGFyZ2V0QXZhaWxh
YmlsaXR5Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6YXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6cmVhZHlGb3JQbGF5YmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6dm9sdW1lQ2hhbmdlZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyQ2xpZW50OjptZWRpYVBsYXllckN1cnJlbnRQbGF5YmFja1RhcmdldElzV2ly
ZWxlc3NDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyQ2xpZW50OjptZWRp
YVBsYXllclBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OnZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxl
c3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpzaG93
UGxheWJhY2tUYXJnZXRQaWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlSW50ZXJmYWNlOjpoYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6
c2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpzZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eUxpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZh
Y2U6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlSW50ZXJmYWNlOjpyZWFkeUZvclBsYXliYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0
YTo6U2ltcGxlRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZv
bnREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNlbnRlclRydW5jYXRlVG9CdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6cmlnaHRUcnVuY2F0ZVRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0
Q2xpcFRvQ2hhcmFjdGVyQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0Q2xpcFRvV29y
ZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0VHJ1bmNhdGVUb0J1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjp0cnVuY2F0ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdU
cnVuY2F0b3I6OmNlbnRlclRydW5jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1RydW5j
YXRvcjo6cmlnaHRUcnVuY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdUcnVuY2F0b3I6
OmxlZnRUcnVuY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0
Q2xpcFRvQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1RydW5jYXRvcjo6cmln
aHRDbGlwVG9Xb3JkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0
b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlv
bi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oOgorICAg
ICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6c3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1cmVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQVZUcmFja1ByaXZh
dGVBVkZPYmpDSW1wbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFWVHJhY2tQcml2YXRlQVZGT2Jq
Q0ltcGw6OmxhYmVsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1NYXhUaW1l
TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OndrQVZBc3NldFJlc29sdmVkVVJMKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ZvbnRCbGFja0JlcnJ5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN1
cHBvcnRzQWNjZWxlcmF0ZWRGaWx0ZXJBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDQTo6Y29udGVudHNMYXllckZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6Y29tcHV0ZVZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uc0Zyb21LZXlmcmFtZXMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXR1cENvbnRlbnRzTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjptZWRpYUxheWVyTXVzdEJlVXBk
YXRlZE9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNv
bXB1dGVQaXhlbEFsaWdubWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1D
QUZpbHRlcnMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJGbHVzaFNjaGVk
dWxlck1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50UnVuTG9vcCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckZsdXNoU2NoZWR1bGVyOjpzY2hlZHVsZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbToKKyAgICAgICAgKC1b
V2ViQW5pbWF0aW9uRGVsZWdhdGUgYW5pbWF0aW9uRGlkU3RhcnQ6XSk6CisgICAgICAgIChQbGF0
Zm9ybUNBTGF5ZXJNYWM6OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoUGxhdGZvcm1DQUxh
eWVyOjppc1dlYkxheWVyKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm91bmRzT25N
YWluVGhyZWFkKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcjo6c2V0UG9zaXRpb25Pbk1haW5U
aHJlYWQpOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjpzZXRBbmNob3JQb2ludE9uTWFpblRo
cmVhZCk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OnNldFRpbGVTaXplKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvbnRyb2xsZXIubW06CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmVtb3ZlQWxsVGlsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnJlbW92ZUFsbFNlY29uZGFyeVRpbGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpyZW1vdmVUaWxlc0luQ29ob3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpyZXZhbGlkYXRlVGlsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OmNyZWF0ZVRpbGVMYXllcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRh
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6Y29weVVuc2NhbGVkRnJhbWVBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNHQ29sb3JX
aXRoRGV2aWNlV2hpdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0dDb2xvcldpdGhEZXZp
Y2VSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvRmxvYXRTaXplQ0cuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRp
ZW50Q0cuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNSR0JDb2xvclNwYWNlUmVmKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldFN0cm9rZUFuZEZpbGxDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJT1N1cmZhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OmpwZWdVVEkp
OgorICAgICAgICAoV2ViQ29yZTo6dXRpRnJvbU1JTUVUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckRhdGE6OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJE
YXRhOjpwdXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZHJhd1BhdHRlcm5DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlU291cmNlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlU291cmNlT3B0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6aW1hZ2VTb3VyY2VPcHRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpvcmlnaW5hbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VTb3VyY2VDR01hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2lu
dENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFNpemVDRy5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QYXR0ZXJuQ0cuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRQbGF0Zm9ybURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6fkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6cGxhdGZvcm1EYXRhSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpwbGF0Zm9ybURhdGFBc3NpZ24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6cGxhdGZvcm1Jc0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6
OnNldEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6YWxsb3dzTGln
YXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5t
bTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I6On5EaXNw
bGF5UmVmcmVzaE1vbml0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25p
dG9yOjpyZXF1ZXN0UmVmcmVzaENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlS
ZWZyZXNoTW9uaXRvcjo6ZGlzcGxheUxpbmtGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9pb3MvRm9udFNlcnZpY2VzSU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRTZXJ2aWNlc0lPUzo6Rm9udFNlcnZpY2VzSU9TKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9pb3MvR3JhcGhpY3NDb250ZXh0M0RJT1MuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cu
aC4KKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TOjppbnRl
cm5hbElEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRklPUy5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ludFJlY3RNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlQVZGSU9TOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKToKKyAgICAgICAg
KFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M6On5JbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGSU9TKToKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZJT1M6OmtpbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9NZWRpYVBsYXll
clByaXZhdGVJT1MuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL01l
ZGlhUGxheWVyUHJpdmF0ZUlPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZv
bnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMpOgorICAgICAgICAoV2ViQ29yZTo6Zm9u
dEhhc1ZlcnRpY2FsR2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Q2hhcldpZHRoSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1DcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0
YTo6Y29udGFpbnNDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpkZXRlcm1pbmVQaXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1XaWR0aEZvckdseXBoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2lvcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbTogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2Vz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
Q29yZVRleHQubW06CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNv
bGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRmxvYXRQb2ludE1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvRmxvYXRSZWN0TWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9G
bG9hdFNpemVNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNo
ZU1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0
TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Ojpmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR2x5cGhQYWdlVHJlZU5vZGVNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2x5
cGhQYWdlOjpmaWxsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3ND
b250ZXh0M0RNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5H
cmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
c2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEb3RQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1
bWVudE1hcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25NYWMubW06
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQb2ludE1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvSW50UmVjdE1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvSW50U2l6ZU1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVk
aWFQbGF5ZXJQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVG
b250RGF0YUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2lt
cGxlRm9udERhdGFNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdM
TGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbToK
KyAgICAgICAgKC1bV2ViR0xMYXllciBjb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOl0p
OgorICAgICAgICAoLVtXZWJHTExheWVyIGRpc3BsYXldKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvV2ViTGF5ZXIubW06CisgICAgICAgIChXZWJDb3JlOjpkcmF3TGF5ZXJDb250
ZW50cyk6CisgICAgICAgICgtW1dlYlNpbXBsZUxheWVyIGRpc3BsYXldKToKKyAgICAgICAgKC1b
V2ViU2ltcGxlTGF5ZXIgZHJhd0luQ29udGV4dDpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvV2ViVGlsZWRMYXllci5tbToKKyAgICAgICAgKCtbV2ViVGlsZWRMYXllciBzaG91
bGREcmF3T25NYWluVGhyZWFkXSk6CisgICAgICAgICgtW1dlYlRpbGVkTGF5ZXIgZGlzcGxheV0p
OgorICAgICAgICAoLVtXZWJUaWxlZExheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTDo6ZHJhd0J1ZmZlcnNFWFQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpFeHRlbnNp
b25zM0RPcGVuR0xDb21tb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cmVzaGFwZUZCT3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhckRlcHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4OjptdWx0aXBseSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9Gb250V2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvQ29udGVudEZpbHRlcklPUy5tbTogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZpbHRlci5oLgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9EZXZpY2VNb3Rpb25DbGllbnRJT1MuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpEZXZpY2VNb3Rpb25DbGllbnRJT1M6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW9zL0RldmljZU1vdGlvbkNsaWVudElPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
aW9zL0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1M6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vaW9zL0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9pb3MvS2V5RXZlbnRJT1MubW06CisgICAgICAgICogcGxhdGZvcm0vaW9zL01JTUVU
eXBlUmVnaXN0cnlJT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL0NyZWRlbnRpYWxTdG9yYWdlTWFjLm1tLgorICAgICAgICAqIHBsYXRmb3JtL2lv
cy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9QYXN0ZWJvYXJkSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3Jp
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVzb3VyY2VNSU1FVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OnN1cHBvcnRlZElt
YWdlVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6c3VwcG9ydGVkUGFzdGVi
b2FyZFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6Omhhc0RhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZyk6CisgICAgICAgICogcGxhdGZv
cm0vaW9zL1BsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5oLgorICAgICAgICAqIHBsYXRm
b3JtL2lvcy9QbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtUGFzdGVib2FyZDo6d3JpdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF0Zm9y
bVNjcmVlbklPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1BsYXRmb3JtU3Bl
ZWNoU3ludGhlc2l6ZXJJT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TU0xL
ZXlHZW5lcmF0b3JJT1MuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvU2Nyb2xs
QW5pbWF0b3JJT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rp
c3BsYXlTbGVlcERpc2FibGVyLmguCisgICAgICAgICogcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1h
dG9ySU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvU2Nyb2xsVmlld0lPUy5t
bTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1Njcm9sbGJhclRoZW1lSU9TLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9TY3JvbGxiYXJUaGVtZUlPUy5tbTogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vaW9zL1NlbGVjdGlvblJlY3QuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9pb3MvU2VsZWN0aW9uUmVjdC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9pb3MvU291bmRJT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvbWFjL0NoYXJzZXREYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vaW9zL1N5c3RlbU1l
bW9yeUlPUy5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9UaGVtZUlPUy5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwLgorICAg
ICAgICAqIHBsYXRmb3JtL2lvcy9UaGVtZUlPUy5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGls
ZUNhY2hlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjppc1NwZWN1bGF0
aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVDYWNo
ZS5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVHcmlkLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9UaWxlR3JpZC5tbTogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vaW9zL1RpbGVHcmlkVGlsZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Db250ZW50RmlsdGVyLmguCisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVHcmlkVGls
ZS5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1RpbGVMYXllci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuaC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGlsZUxheWVyLm1tOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1dlYkNvcmVNb3Rpb25NYW5hZ2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0tpbGxSaW5nTm9uZS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYkNvcmVN
b3Rpb25NYW5hZ2VyLm1tOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViQ29yZVN5
c3RlbUludGVyZmFjZUlPUy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViQ29y
ZVN5c3RlbUludGVyZmFjZUlPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dl
YkV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJFdmVudC5tbTogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbTogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERpc2FibGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlTbGVlcERpc2FibGVyOjpEaXNwbGF5U2xlZXBEaXNhYmxlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5U2xlZXBEaXNhYmxlcjo6fkRpc3BsYXlTbGVlcERpc2FibGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvRmlsZVN5c3RlbU1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
S2lsbFJpbmdNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL01lbW9yeVByZXNzdXJlSGFu
ZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeVByZXNzdXJlSGFuZGxlcjo6aW5z
dGFsbCk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnJlbGVhc2VN
ZW1vcnkpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybUNsb2NrQ00ubW06CisgICAg
ICAgIChQbGF0Zm9ybUNsb2NrQ006OlBsYXRmb3JtQ2xvY2tDTSk6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL1NvZnRMaW5raW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1N5c3RlbVZlcnNp
b25NYWMubW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuUGxhY2Vo
b2xkZXJWaWV3Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuUGxh
Y2Vob2xkZXJWaWV3Lm1tOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVl
bldhcm5pbmdWaWV3Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVu
V2FybmluZ1ZpZXcubW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVu
V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93
Lm1tOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFzLmg6CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVOU0NlbGxFeHRyYXMubToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJGb250Q2FjaGUubW06CisgICAgICAgICgrW1dlYkZvbnRDYWNoZSBmb250V2l0aEZhbWls
eTp0cmFpdHM6c2l6ZTpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3Ry
eS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWwuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNy
ZWRlbnRpYWxTdG9yYWdlOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q3JlZGVudGlhbFN0b3Jh
Z2U6OmNsZWFyQ3JlZGVudGlhbHMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVu
dGlhbFN0b3JhZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5v
dGlmaWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpidWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxsU2VuZFJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlRGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51ZVNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXREZWZhdWx0QWxsb3dDb29raWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmRlZmF1bHRBbGxvd0Nvb2tp
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVzb3VyY2VSZXF1ZXN0QmFz
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9DcmVkZW50aWFsU3RvcmFnZUNGTmV0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpzYXZlVG9QZXJzaXN0
ZW50U3RvcmFnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Qcm94eVNlcnZlckNGTmV0LmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpzZXRNYWluUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6aXNNYWluUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6dXBkYXRlRnJvbURlbGVnYXRlUHJlc2Vydmlu
Z09sZEhUVFBCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG9VcGRh
dGVSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojph
cHBseVdlYkFyY2hpdmVIYWNrRm9yTWFpbCk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
SFRUUENvbm5lY3Rpb25TZXR0aW5nc09uU3RhcnR1cCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OnJlcG9ydEVycm9yVG9DbGllbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvaW9zL05ldHdvcmtTdGF0ZU5vdGlmaWVySU9TLmNwcDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6Ok5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpOZXR3b3JrU3RhdGVOb3RpZmllcik6CisgICAgICAg
IChXZWJDb3JlOjpOZXR3b3JrU3RhdGVOb3RpZmllcjo6c2V0SXNPbkxpbmUpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9vay5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xvb2subW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvaW9zL1Jlc291cmNlSGFuZGxlSU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2lvcy9XZWJDb3JlVVJMUmVzcG9uc2VJT1MuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmguCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9pb3MvV2ViQ29yZVVSTFJlc3BvbnNlSU9TLm1tOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6Om1hYyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvQ3Jl
ZGVudGlhbFN0b3JhZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFn
ZTo6c2F2ZVRvUGVyc2lzdGVudFN0b3JhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
bWFjL1Jlc291cmNlRXJyb3JNYWMubW06CisgICAgICAgIChkaWN0aW9uYXJ5VGhhdENhbkNvZGUp
OgorICAgICAgICAoLVtXZWJDdXN0b21OU1VSTEVycm9yIGVuY29kZVdpdGhDb2RlcjpdKToKKyAg
ICAgICAgKE5TRXJyb3JGcm9tQ0ZFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yOjpuc0Vycm9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhh
bmRsZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnN5bmNocm9ub3VzV2lsbFNlbmRSZXF1ZXN0
RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlTlNVUkxD
b25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2NoZWR1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OnVuc2NoZWR1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OlJlc291cmNlUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZU5TVVJMUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmFwcGx5V2ViQXJjaGl2ZUhhY2tG
b3JNYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6dXNlUXVpY2tMb29r
UmVzb3VyY2VDYWNoaW5nUXVpcmtzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9V
VElVdGlsaXRpZXMubW06CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJl
c291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5tbToKKyAgICAgICAgKC1bV2ViQ29yZVJlc291cmNlSGFu
ZGxlQXNEZWxlZ2F0ZSBjb25uZWN0aW9uU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U6XSk6Cisg
ICAgICAgICgtW1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUgY29ubmVjdGlvbjpkaWRS
ZWNlaXZlUmVzcG9uc2U6XSk6CisgICAgICAgICgtW1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVs
ZWdhdGUgY29ubmVjdGlvbjpkaWRSZWNlaXZlRGF0YUFycmF5Ol0pOgorICAgICAgICAoLVtXZWJD
b3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZURhdGE6bGVu
Z3RoUmVjZWl2ZWQ6XSk6CisgICAgICAgICgtW1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdh
dGUgY29ubmVjdGlvbkRpZEZpbmlzaExvYWRpbmc6XSk6CisgICAgICAgICgtW1dlYkNvcmVSZXNv
dXJjZUhhbmRsZUFzRGVsZWdhdGUgY29ubmVjdGlvbjpkaWRGYWlsV2l0aEVycm9yOl0pOgorICAg
ICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6
U1FMaXRlRGF0YWJhc2U6OnNxbGl0ZTNIYW5kbGUpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9T
UUxpdGVGaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06
OnRydW5jYXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRmls
ZVN5c3RlbS5oOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbjo6YmVnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb246OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxpdGVUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlVHJh
bnNhY3Rpb246OnN0b3ApOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9pb3MvU1FMaXRlRGF0YWJh
c2VUcmFja2VyLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vc3FsL2lvcy9TUUxpdGVE
YXRhYmFzZVRyYWNrZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVt
b3J5UHJlc3N1cmVIYW5kbGVyLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvaW9zL1NRTGl0
ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9LaWxsUmluZ05vbmUuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1M
b2NhbGUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmN1cnNvck1vdmVtZW50SXRlcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjSUNVLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6cmVn
aXN0ZXJFbmNvZGluZ05hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6cmVn
aXN0ZXJDb2RlY3MpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0
cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5kVGV4dENvZGVjTWFwcyk6CisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNhbkh5cGhlbmF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0
ZUNhY2hlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNz
dXJlSGFuZGxlci5oLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVD
YWNoZS5tbTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMvQ2hhcnNldERhdGEu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVN
YWM6OmZvcm1hdERhdGVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZU1hYzo6bWF4aW11
bVdpZHRoRm9yRGF0ZVR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvbWFjL1RleHRCb3Vu
ZGFyaWVzLm1tOgorICAgICAgICAoV2ViQ29yZTo6aXNTa2lwQ2hhcmFjdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzV2hpdGVzcGFjZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1dv
cmREZWxpbWl0aW5nQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3ltYm9sQ2hhcmFj
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6dG9rZW5pemVyRm9yU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmZpbmRTaW1wbGVXb3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZENvbXBsZXhX
b3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpmaW5kTmV4dFdvcmRGcm9tSW5kZXgpOgorICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvbWFjL1RleHRDb2RlY01hYy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMv
VGV4dENvZGVjTWFjLmg6CisKIDIwMTQtMDEtMDkgIEFuZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9i
ZS5jb20+CiAKICAgICAgICAgW0NTU1JlZ2lvbnNdIE1vdmUgcmVnaW9ucyBhdXRvLXNpemUgY29k
ZSBpbnRvIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9NYWluVGhyZWFkLmNwcCBiL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuY3BwCmluZGV4IDA0
NGE2NDcyMDljNzQyMjE2NjAzYWViN2FjNzJmN2Q4ZTFlYjYyNTEuLmY1NzJhM2ZmNWI3YTkyODhk
MDRiMGMxMjhkNThkZWJmNTIzMDdkMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01haW5U
aHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuY3BwCkBAIC0yNjYsNiAr
MjY2LDEzIEBAIGJvb2wgaXNNYWluVGhyZWFkKCkKIH0KICNlbmRpZgogCisjaWYgIVVTRShXRUJf
VEhSRUFEKQorYm9vbCBjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJZCkKK3sKKyAgICByZXR1cm4gdGhyZWFkSWQgPT0gY3VycmVudFRocmVh
ZCgpOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiBzdGF0aWMgVGhyZWFk
U3BlY2lmaWM8Ym9vbD4qIGlzR0NUaHJlYWQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL01haW5UaHJlYWQuaCBiL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaAppbmRleCA1
MGRlYjlhOWQxNTBiMDY0MTMyMTFkNmFlZjYyZDM3YzBiYzkzZjY5Li4xM2Y1NTIwNGJlNDcxMmY0
MTNhN2NhNjg2MTFhZDdlMmNhYThkN2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYWlu
VGhyZWFkLmgKKysrIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oCkBAIC01NSwxMyArNTUs
MTQgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNl
ZChib29sIHBhdXNlZCk7CiAKIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGlzTWFpblRocmVhZCgp
OwogCitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JU
aHJlYWQoVGhyZWFkSWRlbnRpZmllcik7CisKICNpZiBVU0UoV0VCX1RIUkVBRCkKIFdURl9FWFBP
UlRfUFJJVkFURSBib29sIGlzV2ViVGhyZWFkKCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBp
c1VJVGhyZWFkKCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplV2ViVGhyZWFk
KCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplQXBwbGljYXRpb25VSVRocmVh
ZElkZW50aWZpZXIoKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVXZWJUaHJl
YWRJZGVudGlmaWVyKCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQoVGhyZWFkSWRlbnRpZmllcik7CiB2b2lkIGluaXRpYWxpemVXZWJU
aHJlYWRQbGF0Zm9ybSgpOwogI2Vsc2UKIGlubGluZSBib29sIGlzV2ViVGhyZWFkKCkgeyByZXR1
cm4gaXNNYWluVGhyZWFkKCk7IH0KQEAgLTEwMiwxMSArMTAzLDEzIEBAIHVzaW5nIFdURjo6Y2Fu
Y2VsQ2FsbE9uTWFpblRocmVhZDsKIHVzaW5nIFdURjo6c2V0TWFpblRocmVhZENhbGxiYWNrc1Bh
dXNlZDsKIHVzaW5nIFdURjo6aXNNYWluVGhyZWFkOwogdXNpbmcgV1RGOjppc01haW5UaHJlYWRP
ckdDVGhyZWFkOwordXNpbmcgV1RGOjpjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQ7
Cit1c2luZyBXVEY6OmlzVUlUaHJlYWQ7Cit1c2luZyBXVEY6OmlzV2ViVGhyZWFkOwogI2lmIFVT
RShXRUJfVEhSRUFEKQogdXNpbmcgV1RGOjppbml0aWFsaXplV2ViVGhyZWFkOwogdXNpbmcgV1RG
Ojppbml0aWFsaXplQXBwbGljYXRpb25VSVRocmVhZElkZW50aWZpZXI7CiB1c2luZyBXVEY6Omlu
aXRpYWxpemVXZWJUaHJlYWRJZGVudGlmaWVyOwotdXNpbmcgV1RGOjpjYW5BY2Nlc3NUaHJlYWRM
b2NhbERhdGFGb3JUaHJlYWQ7CiAjZW5kaWYKIAogI2VuZGlmIC8vIE1haW5UaHJlYWRfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgppbmRleCA0OWIwYTk3MjZmMjAxMzNlYWI4NmQyZmYwMzkxMTA1MzU2YTBk
ZmVjLi4xOGEwOWI3ZmMwYzI4NzA5ZDkxZGZlZmY3NTQ5NTAyYTI1YWY1OTFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgpAQCAtMTkxNyw2ICsxOTE3LDkgQEAgX3drU2lnbmFsQ0ZSZWFkU3RyZWFtRW5k
CiBfd2tTaWduYWxDRlJlYWRTdHJlYW1FcnJvcgogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtSGFzQnl0
ZXMKIAorX19aTjdXZWJDb3JlMjdhcHBsaWNhdGlvbklzQWRvYmVJbnN0YWxsZXJFdgorX19aTjdX
ZWJDb3JlMjdhcHBsaWNhdGlvbklzTWljcm9zb2Z0TXlEYXlFdgorCiAjaWYgIVBMQVRGT1JNKElP
UykKIC5vYmpjX2NsYXNzX25hbWVfRE9NQXR0cgogLm9iamNfY2xhc3NfbmFtZV9ET01DREFUQVNl
Y3Rpb24KQEAgLTIwNDUsOCArMjA0OCw2IEBAIF9fWk43V2ViQ29yZTI2Y29udGV4dE1lbnVJdGVt
VGFnRm9udE1lbnVFdgogX19aTjdXZWJDb3JlMjZjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0V2
CiBfX1pON1dlYkNvcmUyNnBkZkRvY3VtZW50VHlwZURlc2NyaXB0aW9uRXYKIF9fWk43V2ViQ29y
ZTI2dXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3JFdgotX19aTjdXZWJDb3JlMjdhcHBsaWNhdGlv
bklzQWRvYmVJbnN0YWxsZXJFdgotX19aTjdXZWJDb3JlMjdhcHBsaWNhdGlvbklzTWljcm9zb2Z0
TXlEYXlFdgogX19aTjdXZWJDb3JlMjdjb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHNFdgogX19a
TjdXZWJDb3JlMjdjb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmVFdgogX19aTjdXZWJDb3JlMjhj
b250ZXh0TWVudUl0ZW1UYWdDYXBpdGFsaXplRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxNWU3M2NlNzYxNmY5NDY0NGZmOTg2
NWJiODY0YWRiMjNkYjUxM2UxLi4wZDUwY2ZjZDM3Zjg5Y2M0YTk5NjI3ZWJhZjVmZmZiMWM0ZjUz
YzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0xNzAsNiArMTcwLDggQEAKIAkJMDczQkUzNEUxN0QxODBCMjAwMkJENDMxIC8q
IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMjFCQUIxN0NGMEFENDAwODQ4RTUxIC8qIFJU
Q1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuY3BwICovOyB9OwogCQkwNzNCRTM0RjE3RDE4
MTgzMDAyQkQ0MzEgLyogUlRDSWNlQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIyMUJBNjE3Q0YwQUQ0MDA4NDhF
NTEgLyogUlRDSWNlQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHAgKi87IH07CiAJCTA3M0JFMzUwMTdE
MTgxQTYwMDJCRDQzMSAvKiBSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMjFCQTgxN0NGMEFENDAwODQ4
RTUxIC8qIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAgKi87IH07CisJCTA3NDMwMEE1MEY0
QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclByaXZhdGVJT1MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzQzMDBBMzBGNEI4QkNGMDA4MDc2Q0Qg
LyogTWVkaWFQbGF5ZXJQcml2YXRlSU9TLm1tICovOyB9OworCQkwNzQzMDBBNjBGNEI4QkNGMDA4
MDc2Q0QgLyogTWVkaWFQbGF5ZXJQcml2YXRlSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzQzMDBBNDBGNEI4QkNGMDA4MDc2Q0QgLyogTWVkaWFQ
bGF5ZXJQcml2YXRlSU9TLmggKi87IH07CiAJCTA3NTM4NjAyMTQ0ODlFOTgwMEI3ODQ1MiAvKiBD
YWNoZWRUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDc1Mzg2MDAxNDQ4OUU5ODAwQjc4NDUyIC8qIENhY2hlZFRleHRUcmFjay5jcHAg
Ki87IH07CiAJCTA3NTM4NjAzMTQ0ODlFOTgwMEI3ODQ1MiAvKiBDYWNoZWRUZXh0VHJhY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NTM4NjAxMTQ0
ODlFOTgwMEI3ODQ1MiAvKiBDYWNoZWRUZXh0VHJhY2suaCAqLzsgfTsKIAkJMDc2MzA2RDAxN0Ux
NDc4RDAwNUE3QzRFIC8qIE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NjMwNkNDMTdFMTQ3OEQw
MDVBN0M0RSAvKiBNZWRpYVN0cmVhbVRyYWNrU291cmNlc0NhbGxiYWNrLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMzMyw2ICszMzUsOCBAQAog
CQkwN0RDNUZENDE3RDNFRUU5MDA5OUY4OTAgLyogSlNSVENTdGF0c1Jlc3BvbnNlQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3REM1RkQz
MTdEM0VFRTkwMDk5Rjg5MCAvKiBKU1JUQ1N0YXRzUmVzcG9uc2VDdXN0b20uY3BwICovOyB9Owog
CQkwN0UxMTZCMTE0ODlDOUExMDBFQzVBQ0UgLyogSlNUZXh0VHJhY2tDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdFMTE2QjAxNDg5QzlB
MTAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VzdG9tLmNwcCAqLzsgfTsKIAkJMDdFMTE3MDcxNDg5
RUJFQjAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RTExNzA2MTQ4OUVCRUIwMEVDNUFDRSAv
KiBKU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAgKi87IH07CisJCTA3RUQzNUEyMTZENkRDQzkwMDIy
NDhGMyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczNTdDNzcxNkQyREYwRDAwRUQ5OUU3IC8q
IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW0gKi87IH07CisJCTA3RUQzNUEzMTZENkRD
RTIwMDIyNDhGMyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzM1N0M3NjE2RDJERjBEMDBFRDk5
RTcgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUy5oICovOyB9OwogCQkwN0Y5NDQxNjE4
NjREMDQ2MDA1RDMxQ0IgLyogTWVkaWFTZXNzaW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBRThDMDgxNzQ2Qjk1NzAwNTMyRDc4IC8q
IE1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwN0ZGREU2ODE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDdGRkRFNjYxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
LmNwcCAqLzsgfTsKIAkJMDdGRkRFNjkxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwN0ZGREU2NzE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCAq
LzsgfTsKQEAgLTQ1MSw2ICs0NTUsOCBAQAogCQkwRjEzMTYzRTE2RUQwQ0M4MDAzNUNDMDQgLyog
UGxhdGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTMx
NjQwMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNGMTZFRDBDREUwMDM1
Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSAqLzsgfTsKIAkJMEYxNURBOEEwRjNBQUVF
NzAwMDBDRTQ3IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1REE4OTBGM0FBRUU3MDAwMENFNDcg
LyogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCAqLzsgfTsKKwkJMEYxNzc0ODAxMzc4Qjc3
MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xs
QW5pbWF0b3JJT1MuaCAqLzsgfTsKKwkJMEYxNzc0ODExMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9s
bEFuaW1hdG9ySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxNzc0N0YxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLm1tICov
OyB9OwogCQkwRjI5QzE2RTEzMDBDMkUyMDAyRDc5NEUgLyogQWNjZXNzaWJpbGl0eUFsbEluT25l
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjlD
MTZEMTMwMEMyRTIwMDJENzk0RSAvKiBBY2Nlc3NpYmlsaXR5QWxsSW5PbmUuY3BwICovOyB9Owog
CQkwRjNERDQ0RjEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNERDQ0RDEyRjVFQTFCMDAwRDkx
OTAgLyogU2hhZG93Qmx1ci5jcHAgKi87IH07CiAJCTBGM0RENDUwMTJGNUVBMUIwMDBEOTE5MCAv
KiBTaGFkb3dCbHVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNERDQ0RTEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5oICovOyB9OwpAQCAt
NDc1LDYgKzQ4MSw3IEBACiAJCTBGNjA1QUVEMTVGOTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdD
b25zdHJhaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2MDVBRUIxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2MzgzREQx
ODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzODNEQjE4NjE1QjI5MDAzRTVE
QjUgLyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcCAqLzsgfTsKIAkJMEY2MzgzREUxODYxNUIy
OTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MzgzREMxODYxNUIyOTAwM0U1REI1IC8qIFRo
cmVhZGVkU2Nyb2xsaW5nVHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGOTdBNjU4MTU1REE4MUUwMEZBREQ0QyAvKiBEaXNwbGF5UmVmcmVz
aE1vbml0b3JJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjk3QTY1NzE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9T
Lm1tICovOyB9OwogCQkwRkEyNEQ3OTE2MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVw
ZGF0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZBMjRENzcxNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNzTGF5ZXJVcGRhdGVyLmNwcCAqLzsg
fTsKIAkJMEZBMjREN0ExNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNzTGF5ZXJVcGRhdGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkEyNEQ3ODE2
MkRGOTE5MDBBM0Y0QzAgLyogR3JhcGhpY3NMYXllclVwZGF0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkE4OEVCRDE2QThEMUJEMDBGOTk5
ODQgLyogU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBODhFQkMxNkE4RDFCRDAwRjk5OTg0IC8q
IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZU1hYy5tbSAqLzsgfTsKQEAgLTg4Niw2ICs4OTMs
NyBAQAogCQkxRjNDM0JFQTEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjNDM0JFODEzNUNB
RjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5jcHAgKi87IH07CiAJCTFGM0MzQkVCMTM1Q0FG
M0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxRjNDM0JFOTEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250
cm9scy5oICovOyB9OwogCQkxRjNGMTk1MzE0OTlDQTc2MDBBNUFFQTcgLyogUE9ERnJlZUxpc3RB
cmVuYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUYz
RjE5NTIxNDk5Q0E3NjAwQTVBRUE3IC8qIFBPREZyZWVMaXN0QXJlbmEuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxRjY4RDRBRTE0QkI5RENBMDA3
QjVDNjIgLyogTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUY2OEQ0QUQxNEJCOURDQTAwN0I1QzYyIC8qIE1l
bW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbSAqLzsgfTsKIAkJMUZBRkJGMTgxNUE1RkE2RTAwMDgz
QTIwIC8qIFVUSVV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFGQUZCRjE3MTVBNUZBNTIwMDA4M0EyMCAvKiBVVElVdGlsaXRpZXMubW0g
Ki87IH07CiAJCTFGQUZCRjE5MTVBNUZBNzQwMDA4M0EyMCAvKiBVVElVdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGQUZCRjE2MTVBNUZB
NTIwMDA4M0EyMCAvKiBVVElVdGlsaXRpZXMuaCAqLzsgfTsKIAkJMUZDNDBGQjkxNjU1Q0NCNjAw
NDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUZDNDBGQjgxNjU1QzU5MTAwNDBGMjlFIC8qIFN1
YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwICovOyB9OwpAQCAtOTE3LDYgKzkyNSw4IEBACiAJCTI2
NTU0MTM5MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudENvZGVzSU9TLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjU1NDEzNzE0ODk4MTFDMDAwREZD
NUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5oICovOyB9OwogCQkyNjU1NDEzQTE0ODk4MTFDMDAwREZD
NUQgLyogS2V5RXZlbnRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNjU1NDEzODE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRJT1MubW0gKi87
IH07CiAJCTI2NTU0MTUyMTQ4OUIyMzMwMDBERkM1RCAvKiBDdXJzb3JJT1MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY1NTQxNEIxNDg5QUEyQjAw
MERGQzVEIC8qIEN1cnNvcklPUy5jcHAgKi87IH07CisJCTI2NjAxRUJGMTRCM0I5QUQwMDEyQzBG
RSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjY2MDFFQkQxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3Jt
RXZlbnRGYWN0b3J5SU9TLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMjY2MDFFQzAxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0
b3J5SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjY2MDFFQkUxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tICov
OyB9OwogCQkyNjkyMzk5NjE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdlRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2OTIz
OTkyMTUwNUUxQUEwMDlFNTdGQyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovOyB9Owog
CQkyNkI5OTk4RjE4MDNBRTcyMDBEMDExMjEgLyogUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2Qjk5OThFMTgwM0FFNzIw
MEQwMTEyMSAvKiBSZWdpc3RlckFsbG9jYXRvci5oICovOyB9OwogCQkyNkI5OTk5MTE4MDNCM0M5
MDBEMDExMjEgLyogU3RhY2tBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI2Qjk5OTkwMTgwM0IzQzkwMEQwMTEyMSAvKiBTdGFja0FsbG9j
YXRvci5oICovOyB9OwpAQCAtOTMzLDYgKzk0Myw3IEBACiAJCTI2RkFFNENEMTg1MkUzQTUwMDRD
OEM0NiAvKiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkZBRTRDOTE4NTJFM0E1MDA0
QzhDNDYgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oICovOyB9Owog
CQkyNkZBRTRDRTE4NTJFM0E1MDA0QzhDNDYgLyogU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI2RkFFNENBMTg1MkUzQTUwMDRDOEM0NiAvKiBTeW5jaHJvbm91c1Jl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwICovOyB9OwogCQkyNkZBRTRD
RjE4NTJFM0E1MDA0QzhDNDYgLyogU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyNkZBRTRDQjE4NTJFM0E1MDA0QzhDNDYgLyogU3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmggKi87IH07CisJCTI5MDM3MTY1MTZCQTExQkMwMEZF
RkRGMCAvKiBDb250ZW50RmlsdGVySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjkwMzcxNjQxNkJBMTFCQzAwRkVGREYwIC8qIENvbnRlbnRGaWx0
ZXJJT1MubW0gKi87IH07CiAJCTI5MTdCNTYxMTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNo
U2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI5MTdCNTVFMTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNoU2NoZWR1bGVyLmNwcCAq
LzsgfTsKIAkJMjkxN0I1NjIxNDczNDk2QzAwNTJDOUQwIC8qIExheWVyRmx1c2hTY2hlZHVsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5MTdCNTVG
MTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNoU2NoZWR1bGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjkxN0I1NjMxNDczNDk2QzAwNTJD
OUQwIC8qIExheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5MTdCNTYwMTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXll
ckZsdXNoU2NoZWR1bGVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTEwODUsNiArMTA5NiwxMCBAQAogCQkzMTMxM0Y2NTE0NDNCMzVG
MDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzMTNGNjMxNDQzQjM1RTAwNkUyQTkwIC8qIEZp
bHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLzsgfTsKIAkJMzEzMTNGNjYxNDQzQjM1RjAwNkUyQTkw
IC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTMxM0Y2NDE0NDNCMzVFMDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0
UmVuZGVyZXIuaCAqLzsgfTsKIAkJMzEzOEE5RTUxNDc0NDM0NjAwQjBFRDEyIC8qIFN0eWxlU2hh
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTM4
QTlFNDE0NzQ0MzQ2MDBCMEVEMTIgLyogU3R5bGVTaGFkZXIuaCAqLzsgfTsKKwkJMzE0MDM3OUIx
MjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTQwMzc5NzEyNEJFQTdGMDBBRjQwRTQg
LyogV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCAqLzsgfTsKKwkJMzE0MDM3OUMxMjRCRUE3RjAwQUY0
MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzE0MDM3OTgxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVN
b3Rpb25NYW5hZ2VyLm1tICovOyB9OworCQkzMTQwMzc5RDEyNEJFQTdGMDBBRjQwRTQgLyogRGV2
aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxNDAzNzk5MTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRh
dGlvbkNsaWVudElPUy5oICovOyB9OworCQkzMTQwMzc5RTEyNEJFQTdGMDBBRjQwRTQgLyogRGV2
aWNlT3JpZW50YXRpb25DbGllbnRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTQwMzc5QTEyNEJFQTdGMDBBRjQwRTQgLyogRGV2aWNlT3JpZW50
YXRpb25DbGllbnRJT1MubW0gKi87IH07CiAJCTMxNDZGRTZFMTg0NDIwQTgwMDFBOTM3QyAvKiBP
RVNUZXh0dXJlRmxvYXRMaW5lYXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxNDZGRTY2MTg0NDIwODcwMDFBOTM3QyAvKiBPRVNUZXh0dXJlRmxvYXRM
aW5lYXIuaCAqLzsgfTsKIAkJMzE0NkZFNkYxODQ0MjBBQTAwMUE5MzdDIC8qIE9FU1RleHR1cmVG
bG9hdExpbmVhci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTQ2RkU2NTE4NDQyMDg3MDAxQTkzN0MgLyogT0VTVGV4dHVyZUZsb2F0TGluZWFyLmNw
cCAqLzsgfTsKIAkJMzE0NkZFNzQxODQ0MjM3MDAwMUE5MzdDIC8qIEpTT0VTVGV4dHVyZUZsb2F0
TGluZWFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxNDZGRTcwMTg0NDIzNjcwMDFBOTM3QyAvKiBKU09FU1RleHR1cmVGbG9hdExpbmVhci5jcHAg
Ki87IH07CkBAIC0xMTIyLDYgKzExMzcsNyBAQAogCQkzMTlBRTA2MzE0MkQ2QjI0MDA2NTYzQTEg
LyogU3R5bGVGaWx0ZXJEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxOUFFMDYxMTQyRDZCMjQwMDY1NjNBMSAvKiBTdHlsZUZpbHRlckRhdGEu
Y3BwICovOyB9OwogCQkzMTlBRTA2NDE0MkQ2QjI0MDA2NTYzQTEgLyogU3R5bGVGaWx0ZXJEYXRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTlBRTA2
MjE0MkQ2QjI0MDA2NTYzQTEgLyogU3R5bGVGaWx0ZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzE5RkJENUYxNUQyRjQ2NDAwOTY0MEE2
IC8qIENhY2hlZEltYWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTlGQkQ1RDE1RDJGNDQ0MDA5NjQwQTYgLyogQ2FjaGVkSW1hZ2VDbGll
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkz
MUFCNTAwMDEyMjg3OEEyMDAxQTdEQjAgLyogR3JhcGhpY3NDb250ZXh0M0RJT1MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQUI0RkZGMTIyODc4QTIw
MDFBN0RCMCAvKiBHcmFwaGljc0NvbnRleHQzRElPUy5oICovOyB9OwogCQkzMUMwRkYyMTBFNENF
QjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGMUIwRTRDRUI2RTAwN0Q2RkU1IC8q
IFdlYktpdEFuaW1hdGlvbkV2ZW50LmNwcCAqLzsgfTsKIAkJMzFDMEZGMjIwRTRDRUI2RTAwN0Q2
RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYxQzBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5p
bWF0aW9uRXZlbnQuaCAqLzsgfTsKIAkJMzFDMEZGMjQwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktp
dFRyYW5zaXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMUMwRkYxRTBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2
ZW50LmNwcCAqLzsgfTsKQEAgLTExMzcsNiArMTE1Myw4IEBACiAJCTMxQzBGRjREMEU0Q0VGREQw
MDdENkZFNSAvKiBET01XZWJLaXRUcmFuc2l0aW9uRXZlbnQubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkY0NzBFNENFRkREMDA3RDZGRTUgLyog
RE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50Lm1tICovOyB9OwogCQkzMUMwRkY0RTBFNENFRkREMDA3
RDZGRTUgLyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjQ4MEU0Q0VGREQwMDdENkZF
NSAvKiBET01XZWJLaXRUcmFuc2l0aW9uRXZlbnRJbnRlcm5hbC5oICovOyB9OwogCQkzMUQ1OTFC
MzE2Njk3QTZDMDBFNkJGMDIgLyogUGx1Z0luQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUQ1OTFCMTE2Njk3QTZDMDBFNkJGMDIgLyogUGx1
Z0luQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMzFFQUY5N0UxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElPUy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFFQUY5N0Mx
MjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElPUy5oICovOyB9OworCQkzMUVB
Rjk3RjEyMTQzNUE0MDBFN0MxQkYgLyogRGV2aWNlTW90aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFFQUY5N0QxMjE0MzVBNDAw
RTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElPUy5tbSAqLzsgfTsKIAkJMzFFQzFFMjgxNEZG
NjBFRTAwQzk0NjYyIC8qIEpTTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRUMxRTI2MTRGRjYw
RUUwMEM5NDY2MiAvKiBKU05vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5jcHAgKi87IH07
CiAJCTMxRUMxRTI5MTRGRjYwRUUwMEM5NDY2MiAvKiBKU05vdGlmaWNhdGlvblBlcm1pc3Npb25D
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzFFQzFFMjcxNEZGNjBFRTAwQzk0NjYyIC8qIEpTTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxi
YWNrLmggKi87IH07CiAJCTMxRkIxQTU3MTIwQTVEMDYwMERDMDJBMCAvKiBEZXZpY2VNb3Rpb25D
bGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
RkIxQTRGMTIwQTVEMDYwMERDMDJBMCAvKiBEZXZpY2VNb3Rpb25DbGllbnQuaCAqLzsgfTsKQEAg
LTExNzcsNiArMTE5NSw3IEBACiAJCTM3MUY1M0U5MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmlj
b2RlUmFuZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzcxRjUzRTcwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmgg
Ki87IH07CiAJCTM3MUY1M0VBMEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFG
NTNFODBEMjcwNEY5MDBFQ0UwRDUgLyogQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwICovOyB9Owog
CQkzNzIwMjE5OTEwNjIxM0M2MDBGMjVDNEIgLyogRm9udFNtb290aGluZ01vZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MjAyMTk4MTA2MjEzQzYw
MEYyNUM0QiAvKiBGb250U21vb3RoaW5nTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTM3MjdERkQ1MTQyQUFFNDUwMEQ0NDlDQiAvKiBGb250
Q2FjaGVJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzNzI3REZENDE0MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tICovOyB9OwogCQkz
NzJDMDBDNDEyOTYxMUYxMDA1Qzk1NzUgLyogVGV4dEJvdW5kYXJpZXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcyQzAwQzMxMjk2MTFGMTAwNUM5
NTc1IC8qIFRleHRCb3VuZGFyaWVzLmNwcCAqLzsgfTsKIAkJMzcyQzAwRDkxMjk2MTlGODAwNUM5
NTc1IC8qIEZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzNzJDMDBEODEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzNzQ0NTcwRjBE
QjA1RkE1MDBBRTA5OTIgLyogU1ZHR2x5cGhNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NDQ1NzBFMERCMDVGQTUwMEFFMDk5MiAvKiBTVkdHbHlw
aE1hcC5oICovOyB9OwpAQCAtMTIxMSw2ICsxMjMwLDcgQEAKIAkJMzdERENEQTcxMzg0NTAxQzAw
MDhCNzkzIC8qIE1IVE1MUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzN0REQ0RBMzEzODQ1MDFDMDAwOEI3OTMgLyogTUhUTUxQYXJzZXIuaCAq
LzsgfTsKIAkJMzdFMzUyNEIxMjQ1MEM1MjAwQkFGNUQ5IC8qIElucHV0VHlwZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0UzNTI0QTEyNDUwQzUy
MDBCQUY1RDkgLyogSW5wdXRUeXBlLmNwcCAqLzsgfTsKIAkJMzdFMzUyNEQxMjQ1MEM2NjAwQkFG
NUQ5IC8qIElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzdFMzUyNEMxMjQ1MEM2NjAwQkFGNUQ5IC8qIElucHV0VHlwZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTM3RTY1OTUwMTYzQjEw
QzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1w
bGVGb250RGF0YUlPUy5tbSAqLzsgfTsKIAkJMzdGNTY3Q0UxNjUzNThGNDAwRERFOTJCIC8qIFBv
cHVwT3BlbmluZ09ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzNzcyQjA5NTE2NTM1ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkz
N0Y4MThGRDBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThGQjBENjU3NjA2MDA1
RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdGODE4RkUwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNv
cmVVUkxSZXNwb25zZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0g
Ki87IH07CkBAIC0xMzk1LDExICsxNDE1LDE2IEBACiAJCTQ0MUIwNTVFMENENzdBNDgwMDdDMUYx
OCAvKiBET01IVE1MSUZyYW1lRWxlbWVudFByaXZhdGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MjlBQUZEMENCODRFQTUw
MDc2NDdDNSAvKiBET01IVE1MSUZyYW1lRWxlbWVudFByaXZhdGUuaCAqLzsgfTsKIAkJNDQxQjA1
NjAwQ0Q3N0E2NTAwN0MxRjE4IC8qIERPTUhUTUxPYmplY3RFbGVtZW50UHJpdmF0ZS5oIGluIENv
cHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDQyOUFBRkYwQ0I4NEVDMzAwNzY0N0M1IC8qIERPTUhUTUxPYmplY3RFbGVtZW50UHJpdmF0ZS5o
ICovOyB9OwogCQk0NDJBQkNENjE3RDkyNjJGMDBEMzA3MTUgLyogU3luY2hyb25vdXNMb2FkZXJD
bGllbnRDRk5ldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NDJBQkNENTE3RDkyNjJGMDBEMzA3MTUgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnRD
Rk5ldC5jcHAgKi87IH07CisJCTQ0MkFGN0E5MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MkFGN0E3
MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NDJBRjdBQTEwMkNEREVBMDA4RkQ0RDMgLyogUXVp
Y2tMb29rLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDQyQUY3QTgxMDJDRERFQTAwOEZENEQzIC8qIFF1aWNrTG9vay5tbSAqLzsgfTsKIAkJNDQzMTFD
RDYxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3VtZW50RnJhZ21lbnRQcml2YXRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDMxMUNENDEyRTRFMjJE
MDAwQThEMTkgLyogRE9NRG9jdW1lbnRGcmFnbWVudFByaXZhdGUuaCAqLzsgfTsKIAkJNDQzMTFD
RDcxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3VtZW50UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQzMTFDRDUxMkU0RTIyRDAwMEE4RDE5
IC8qIERPTURvY3VtZW50UHJpdmF0ZS5oICovOyB9OwogCQk0NDMxMUNEODEyRTRFMjRCMDAwQThE
MTkgLyogRE9NRG9jdW1lbnRQcml2YXRlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDMxMUNENTEyRTRFMjJEMDAwQThEMTkg
LyogRE9NRG9jdW1lbnRQcml2YXRlLmggKi87IH07CiAJCTQ0MzExQ0Q5MTJFNEUyNTcwMDBBOEQx
OSAvKiBET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQzMTFDRDQxMkU0RTIyRDAw
MEE4RDE5IC8qIERPTURvY3VtZW50RnJhZ21lbnRQcml2YXRlLmggKi87IH07CiAJCTQ0MzExRjgy
MTJFNEU2NkMwMDBBOEQxOSAvKiBET01Eb2N1bWVudEZyYWdtZW50SW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RTcxMTQ1MEFDNUQ1MzQw
MDUzMjcwRiAvKiBET01Eb2N1bWVudEZyYWdtZW50SW50ZXJuYWwuaCAqLzsgfTsKKwkJNDQzRjA0
MjcwRTc1QzhGQjAwN0U1NDA3IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVySU9TLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0M0YwNDI2MEU3NUM4RkIw
MDdFNTQwNyAvKiBOZXR3b3JrU3RhdGVOb3RpZmllcklPUy5jcHAgKi87IH07CisJCTQ0NEQ0RTIz
MEY3MDhCMkUwMDMxNThFMCAvKiBXZWJDb3JlVVJMUmVzcG9uc2VJT1MubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDRENEUyMTBGNzA4QjJFMDAzMTU4
RTAgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLm1tICovOyB9OworCQk0NDc2NTMxQjEzMzE3MDk5
MDAwNkI3ODkgLyogU1NMS2V5R2VuZXJhdG9ySU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NzY1MzFBMTMzMTcwOTkwMDA2Qjc4OSAvKiBTU0xL
ZXlHZW5lcmF0b3JJT1MuY3BwICovOyB9OwogCQk0NDc5NTgwNDE2NDNCNDlBMDAxRTBBN0YgLyog
UGFyc2VkQ29udGVudFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0Nzk1ODAzMTY0M0I0N0IwMDFFMEE3RiAvKiBQYXJzZWRDb250ZW50VHlwZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ0Nzk1
ODA1MTY0M0I0QjIwMDFFMEE3RiAvKiBQYXJzZWRDb250ZW50VHlwZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDc5NTgwMjE2NDNCNDdCMDAxRTBB
N0YgLyogUGFyc2VkQ29udGVudFR5cGUuY3BwICovOyB9OwogCQk0NDhBMjlCRjBBNDZEOUNCMDAz
MDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OEEyOUJEMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hU
TUxPcHRpb25zQ29sbGVjdGlvbi5oICovOyB9OwpAQCAtMTQxMSw4ICsxNDM2LDE2IEBACiAJCTQ0
OTZFM0EwMTM5ODEzQTUwMDNFRTMyQSAvKiBKU1NWR01QYXRoRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ5NkUzOUYxMzk4MTNBNTAwM0VF
MzJBIC8qIEpTU1ZHTVBhdGhFbGVtZW50LmggKi87IH07CiAJCTQ0OTZFM0EyMTM5ODEzQ0IwMDNF
RTMyQSAvKiBKU1NWR01QYXRoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0NDk2RTNBMTEzOTgxM0NCMDAzRUUzMkEgLyogSlNTVkdNUGF0
aEVsZW1lbnQuY3BwICovOyB9OwogCQk0NDlCMTlGNTBGQTcyRUNFMDAxNUNBNEEgLyogSFRNTFBh
cnNlclF1aXJrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDQ5QjE5RjMwRkE3MkVDRTAwMTVDQTRBIC8qIEhUTUxQYXJzZXJRdWlya3MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NEEyMERCOTBGODQx
NjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyMERCODBGODQxNjZDMDBCM0UxRkUgLyog
V2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDRBMjhBQUMxMkRGQjhBQzAwQUU5MjNCIC8qIE1hdGhNTEVsZW1l
bnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NEEyOEFBQjEyREZCOEFDMDBBRTkyM0IgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuaCAqLzsg
fTsKIAkJNDRBMjhBQUYxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyOEFBRTEyREZCOEJGMDBB
RTkyM0IgLyogTWF0aE1MTmFtZXMuaCAqLzsgfTsKKwkJNDRDMzYzRjAwRkFBN0JCMzAwOTdGOEND
IC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRDMzYzRUUwRkFBN0JCMzAwOTdGOENDIC8qIFJ1bnRp
bWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTQ0QzM2M0YxMEZBQTdCQjMwMDk3RjhDQyAvKiBSdW50aW1lQXBw
bGljYXRpb25DaGVja3NJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NEMzNjNFRjBGQUE3QkIzMDA5N0Y4Q0MgLyogUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzSU9TLm1tICovOyB9OworCQk0NEMzQ0ZFODE1NTZCRTVEMDAwMTM2MDkgLyogV2ViQ29y
ZVN5c3RlbUludGVyZmFjZUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDRDM0NGRTcxNTU2QkU1RDAwMDEzNjA5IC8qIFdlYkNvcmVTeXN0ZW1JbnRl
cmZhY2VJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk0NEM5OTE4MjBGM0QxRTBEMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEM5OTE4MTBGM0Qx
RTBEMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MubW0gKi87IH07CisJCTQ0Qzk5MTg2MEYz
RDFFQkUwMDU4NjY3MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRDOTkxODUwRjNEMUVCRTAwNTg2NjcwIC8qIFNj
cm9sbGJhclRoZW1lSU9TLmggKi87IH07CisJCTQ0Qzk5MTlGMEYzRDIxMEUwMDU4NjY3MCAvKiBU
aGVtZUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDRDOTkxOUQwRjNEMjEwRTAwNTg2NjcwIC8qIFRoZW1lSU9TLmggKi87IH07CisJCTQ0Qzk5MUEw
MEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Qzk5MTlFMEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlP
Uy5tbSAqLzsgfTsKIAkJNDREQUI1QjExNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NERBQjVBRjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
LmNwcCAqLzsgfTsKIAkJNDREQUI1QjIxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDREQUI1QjAxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5o
ICovOyB9OwogCQk0NTA5OUM0MTEzNzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTA5OUM0MDEzNzBBNzgw
MDA1OEQ1MTMgLyogSWNvblVSTC5jcHAgKi87IH07CkBAIC0yMjQyLDggKzIyNzUsMTIgQEAKIAkJ
N0UxMkU5MTAxNUZBNUQzQTAwNUU0MTI2IC8qIEN1c3RvbUZpbHRlck1lc2hHZW5lcmF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0UxMkU5MEUx
NUZBNUQzQTAwNUU0MTI2IC8qIEN1c3RvbUZpbHRlck1lc2hHZW5lcmF0b3IuY3BwICovOyB9Owog
CQk3RTMzQ0QwMTEyN0YzNDBEMDBCRThGMTcgLyogUHVyZ2VQcmlvcml0eS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0UzM0NEMDAxMjdGMzQwRDAwQkU4
RjE3IC8qIFB1cmdlUHJpb3JpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3RTM3RUYyRTEzMzkyMDg4MDBCMjkyNTAgLyogU3VicmVzb3VyY2VM
b2FkZXJDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3RTM3RUYyRDEzMzkyMDg4MDBCMjkyNTAgLyogU3VicmVzb3VyY2VMb2FkZXJDRi5jcHAgKi87
IH07CisJCTdFNDI4Q0U1MTNFMzQwN0YwMDNCNjYxQyAvKiBSZXNvdXJjZUhhbmRsZUlPUy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNDI4Q0U0MTNF
MzQwN0YwMDNCNjYxQyAvKiBSZXNvdXJjZUhhbmRsZUlPUy5tbSAqLzsgfTsKIAkJN0U0NkY2RkEx
NjI3QTJDQTAwMDYyMjIzIC8qIEpTT0VTRWxlbWVudEluZGV4VWludC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTQ2RjZGODE2MjdBMkM5MDAwNjIy
MjMgLyogSlNPRVNFbGVtZW50SW5kZXhVaW50LmNwcCAqLzsgfTsKIAkJN0U0NkY2RkIxNjI3QTJD
QTAwMDYyMjIzIC8qIEpTT0VTRWxlbWVudEluZGV4VWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0NkY2RjkxNjI3QTJDOTAwMDYyMjIzIC8qIEpT
T0VTRWxlbWVudEluZGV4VWludC5oICovOyB9OworCQk3RTQ3NEUxRTEyNDk0REM5MDAyMzUzNjQg
LyogU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTQ3NEUxQjEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRl
RGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJN0U0NzRFMUYxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFi
YXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0U0NzRFMUMxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdFNDc0RTIw
MTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0NzRFMUQxMjQ5NERDOTAwMjM1
MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi87IH07CiAJCTdFNUQ3QTc2MTYxRDNG
OEYwMDg5NkMzNCAvKiBPRVNFbGVtZW50SW5kZXhVaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNUQ3QTczMTYxRDNGOEYwMDg5NkMzNCAvKiBP
RVNFbGVtZW50SW5kZXhVaW50LmNwcCAqLzsgfTsKIAkJN0U1RDdBNzcxNjFEM0Y4RjAwODk2QzM0
IC8qIE9FU0VsZW1lbnRJbmRleFVpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdFNUQ3QTc0MTYxRDNGOEYwMDg5NkMzNCAvKiBPRVNFbGVtZW50SW5k
ZXhVaW50LmggKi87IH07CiAJCTdFNjZFMjMzMTZENkVCNkMwMEY3RTdGRiAvKiBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdFNjZFMjMxMTZENkVCNkMwMEY3RTdGRiAvKiBXZWJHTENvbXByZXNzZWRUZXh0
dXJlQVRDLmNwcCAqLzsgfTsKQEAgLTM1NDEsNiArMzU3OCw4IEBACiAJCUE1MDJDNURGMTMwNDlC
MzUwMEZDN0Q1MyAvKiBXZWJTYWZlR0NBY3Rpdml0eUNhbGxiYWNrSU9TLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTAyQzVERDEzMDQ5QjM1MDBGQzdE
NTMgLyogV2ViU2FmZUdDQWN0aXZpdHlDYWxsYmFja0lPUy5oICovOyB9OwogCQlBNTEzQjNENzEx
NEIxNjY2MDAxQzQyOUIgLyogS2V5RXZlbnRDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVDOTc0Q0YxMTQ4NUZGMTAwNjZGMkFCIC8qIEtleUV2
ZW50Q29jb2EuaCAqLzsgfTsKIAkJQTUxM0IzRDgxMTRCMTY2QTAwMUM0MjlCIC8qIEtleUV2ZW50
Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NUM5NzREMDExNDg1RkYxMDA2NkYyQUIgLyogS2V5RXZlbnRDb2NvYS5tbSAqLzsgfTsKKwkJQTUx
NkU4QjcxMzZFMDREQjAwNzZDM0MwIC8qIExvY2FsaXplZERhdGVDYWNoZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUxNkU4QjQxMzZFMDREQjAwNzZD
M0MwIC8qIExvY2FsaXplZERhdGVDYWNoZS5oICovOyB9OworCQlBNTE2RThCODEzNkUwNERCMDA3
NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTUxNkU4QjUxMzZFMDREQjAwNzZDM0MwIC8qIExvY2FsaXpl
ZERhdGVDYWNoZS5tbSAqLzsgfTsKIAkJQTU0QTgyRUMxNTIyOEQyRjAwQzcyQkE2IC8qIERPTU5v
ZGVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNTRBODJFQTE1MjI4Q0EzMDBDNzJCQTYgLyogRE9NTm9kZVByaXZhdGUuaCAqLzsgfTsKIAkJ
QTU0QTgyRjExNTIyOERGNjAwQzcyQkE2IC8qIERPTU5vZGVQcml2YXRlLmggaW4gQ29weSBHZW5l
cmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTRBODJF
QTE1MjI4Q0EzMDBDNzJCQTYgLyogRE9NTm9kZVByaXZhdGUuaCAqLzsgfTsKIAkJQTU3MzJCMEEx
MzZBMTYxRDAwNUM4RDdDIC8qIERhdGVDb21wb25lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NzMyQjA4MTM2QTE2MUQwMDVDOEQ3QyAvKiBE
YXRlQ29tcG9uZW50cy5jcHAgKi87IH07CkBAIC00MDExLDYgKzQwNTAsNyBAQAogCQlBOUQyNDgw
NzBENzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlEMjQ4MDMwRDc1N0U3RDAwRkRGOTU5IC8qIEpT
RE9NTWltZVR5cGUuaCAqLzsgfTsKIAkJQTlEMjQ4MDgwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9N
TWltZVR5cGVBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOUQyNDgwNDBENzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1lVHlwZUFycmF5LmNw
cCAqLzsgfTsKIAkJQTlEMjQ4MDkwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGVBcnJh
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlEMjQ4
MDUwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGVBcnJheS5oICovOyB9OworCQlBQTEy
REY0OTE3NDNERjgzMDA0REFGREYgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcklPUy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBRTM3NTVEMTc0
MjlCQ0MwMDYyMDBDMiAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1tICovOyB9Owog
CQlBQTIxRUNDQTBBQkYwRkJBMDAyQjgzNEMgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTA5NzhFRDBBQkFB
NkUxMDA4NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAgKi87IH07CiAJCUFBMjFFQ0NE
MEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTA5NzhFRTBBQkFBNkUxMDA4NzQ0ODAg
LyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUFBMkE1QUNEMTZBNDg1RkEwMDk3NUEyNSAvKiBTcGVlY2hTeW50
aGVzaXNWb2ljZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQTJBNUFDNjE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzVm9pY2UuY3Bw
ICovOyB9OwpAQCAtNTI2NCw2ICs1MzA0LDggQEAKIAkJQkU4RUYwNEMxNzFDOTAxNDAwOUI0OEMz
IC8qIEpTVmlkZW9UcmFja0xpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkU4RUYwNDgxNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFja0xp
c3QuY3BwICovOyB9OwogCQlCRThFRjA0RDE3MUM5MDE0MDA5QjQ4QzMgLyogSlNWaWRlb1RyYWNr
TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkU4
RUYwNDkxNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFja0xpc3QuaCAqLzsgfTsKIAkJQkU5
MTNEODAxODFFRjkyNDAwRENCMDlFIC8qIFRyYWNrUHJpdmF0ZUJhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFOTEzRDdGMTgxRUY4RTUwMERDQjA5
RSAvKiBUcmFja1ByaXZhdGVCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJQkVBODA3QzgwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJl
Y3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkVB
ODA3QzYwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuY3BwICovOyB9OworCQlCRUE4
MDdDOTBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkVBODA3QzcwRjcxNEEwMzAwNTI0MTk5IC8q
IFNlbGVjdGlvblJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCRUYyOUVFQjE3MTVERDA5MDBDNEI0QzkgLyogQXVkaW9UcmFja1ByaXZhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFRjI5RUU5
MTcxNUREMDkwMEM0QjRDOSAvKiBBdWRpb1RyYWNrUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJFRjI5RUVDMTcxNUREMDkwMEM0QjRD
OSAvKiBWaWRlb1RyYWNrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkVGMjlFRUExNzE1REQwOTAwQzRCNEM5IC8qIFZpZGVvVHJhY2tQcml2
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QzA0NkUxQUMxMjA4QTlGRTAwQkEyQ0Y3IC8qIExvY2FsaXplZFN0cmluZ3MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzA0NkUxQUIxMjA4QTlGRTAw
QkEyQ0Y3IC8qIExvY2FsaXplZFN0cmluZ3MuY3BwICovOyB9OwpAQCAtNTMwNyw2ICs1MzQ5LDgg
QEAKIAkJQzU1RTM4QzAxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NUUzOEJD
MTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi87IH07CiAJCUM1
NzJFRTFGMTIwMUM5QkMwMDdEOEY4MiAvKiBKU0lEQkluZGV4LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTcyRUUxRDEyMDFDOUJDMDA3RDhGODIgLyog
SlNJREJJbmRleC5oICovOyB9OwogCQlDNTdGRURFMTEyMTJFRTlDMDA5N0JFNjUgLyogRmlsZVN5
c3RlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTdGRURFMDEyMTJFRTlDMDA5N0JFNjUgLyogRmlsZVN5c3RlbS5jcHAgKi87IH07CisJCUM1ODM2
MUE5MTc0NDUyM0YwMDE3MzUxMSAvKiBGb250U2VydmljZXNJT1MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODM2MUE3MTc0NDUyM0YwMDE3MzUxMSAv
KiBGb250U2VydmljZXNJT1MuaCAqLzsgfTsKKwkJQzU4MzYxQUExNzQ0NTIzRjAwMTczNTExIC8q
IEZvbnRTZXJ2aWNlc0lPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1ODM2MUE4MTc0NDUyM0YwMDE3MzUxMSAvKiBGb250U2VydmljZXNJT1MubW0g
Ki87IH07CiAJCUM1ODVBNjYyMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVB
NjYwMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVzLmNwcCAqLzsgfTsKIAkJ
QzU4NUE2NjMxMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNjYxMTFENEZBQzUw
MDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVzLmggKi87IH07CiAJCUM1ODVBNjdEMTFENEZC
MDgwMDRDM0U0QiAvKiBKU0lEQkFueS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzU4NUE2NjUxMUQ0RkIwNzAwNEMzRTRCIC8qIEpTSURCQW55LmggKi87
IH07CkBAIC01MzgwLDYgKzU0MjQsOCBAQAogCQlDRDU0QTc2MzE4MEY5RjcwMDBCMDc2QzkgLyog
QXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTRBNzYxMTgwRjlGNzAwMEIwNzZDOSAvKiBB
dWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovOyB9OwogCQlDRDU0REU0NzE3
NDY4QjZGMDA1RTVCMzYgLyogTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDU0REU0NTE3NDY4QjZGMDA1RTVC
MzYgLyogTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgKi87IH07CiAJCUNENTRERTRCMTc0NjlD
NkQwMDVFNUIzNiAvKiBBdWRpb1Nlc3Npb25NYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1NERFNDkxNzQ2OUM2RDAwNUU1QjM2IC8qIEF1ZGlv
U2Vzc2lvbk1hYy5jcHAgKi87IH07CisJCUNENTU5NjkxMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRp
b0ZpbGVSZWFkZXJJT1MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0Q1NTk2OEYxNDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5j
cHAgKi87IH07CisJCUNENTU5NjkyMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJ
T1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTU5
NjkwMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuaCAqLzsgfTsKIAkJQ0Q2
MUZFNjcxNzk0QUFEQjAwNDEwMUVCIC8qIE1lZGlhU291cmNlUmVnaXN0cnkuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFBOTQyRTExNUI1Q0UyMjAw
RDUyNUQxIC8qIE1lZGlhU291cmNlUmVnaXN0cnkuY3BwICovOyB9OwogCQlDRDYxRkU2ODE3OTRB
QURCMDA0MTAxRUIgLyogTWVkaWFTb3VyY2VSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFBOTQyRTIxNUI1Q0UyMjAwRDUyNUQxIC8qIE1l
ZGlhU291cmNlUmVnaXN0cnkuaCAqLzsgfTsKIAkJQ0Q2NDFFQjMxODE4RjVFRDAwRUU0QzQxIC8q
IE1lZGlhU291cmNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0Q2NDFFQjExODE4RjVFRDAwRUU0QzQxIC8qIE1lZGlhU291cmNlUHJpdmF0
ZS5oICovOyB9OwpAQCAtNTQ0NCw2ICs1NDkwLDcgQEAKIAkJQ0RDOEI1QUExODA0N0ZGMTAwMTZF
Njg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDOEI1QTgxODA0N0ZGMTAwMTZFNjg1IC8qIFNv
dXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tICovOyB9OwogCQlDREM4QjVBQjE4MDQ3RkYxMDAx
NkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUE5MTgwNDdGRjEwMDE2RTY4NSAvKiBT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oICovOyB9OwogCQlDREM4QjVBRDE4MDRBRTVEMDAx
NkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNv
dXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCAqLzsgfTsKKwkJQ0RDQTgyOTYxNjc5MTAwRjAwODc1
NzE0IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQTgyOTQxNjc5MTAwRjAwODc1NzE0IC8qIFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tICovOyB9OwogCQlDREQ1MjVENzE0NUI2REQwMDA4
RDIwNEQgLyogSlNIVE1MTWVkaWFFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjY1Q0NDMTQ1QjZBRkUwMEM0QzdBQSAvKiBK
U0hUTUxNZWRpYUVsZW1lbnRDdXN0b20uY3BwICovOyB9OwogCQlDREQ3MDg5NjE4MzU5RjZGMDAy
QjNEQzYgLyogU2FtcGxlTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENERDcwODk0MTgzNTlGNkUwMDJCM0RDNiAvKiBTYW1wbGVNYXAuY3BwICov
OyB9OwogCQlDREQ3MDg5NzE4MzU5RjZGMDAyQjNEQzYgLyogU2FtcGxlTWFwLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREQ3MDg5NTE4MzU5RjZGMDAy
QjNEQzYgLyogU2FtcGxlTWFwLmggKi87IH07CkBAIC01ODAwLDYgKzU4NDcsOCBAQAogCQlFMUZG
OEY2QzE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGRjhGNkExODBEQjVC
RTAwMTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJRTFGRjhG
NkQxODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUZGOEY2QjE4MERCNUJFMDAx
MzI2NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCAqLzsgfTsKIAkJRTQwMUMyNzUxN0NF
NTNFQzAwQzQxQTM1IC8qIEVsZW1lbnRJdGVyYXRvckFzc2VydGlvbnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MDFDMjc0MTdDRTUzRUMwMEM0MUEz
NSAvKiBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zLmggKi87IH07CisJCUU0MjRBMzlFMTMzMERG
MDEwMENGNkRDOSAvKiBUaWxlR3JpZFRpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0MjRBMzlEMTMzMERGMDEwMENGNkRDOSAvKiBUaWxlR3JpZFRp
bGUuaCAqLzsgfTsKKwkJRTQyNEEzQTAxMzMwREYxRTAwQ0Y2REM5IC8qIFRpbGVHcmlkVGlsZS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MjRBMzlG
MTMzMERGMUUwMENGNkRDOSAvKiBUaWxlR3JpZFRpbGUubW0gKi87IH07CiAJCUU0MjVBNDlBMTgy
OTJCODQwMDIwQ0ZDRiAvKiBDb2xsZWN0aW9uSW5kZXhDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQyNUE0OTkxODI5MkI4NDAwMjBDRkNGIC8q
IENvbGxlY3Rpb25JbmRleENhY2hlLmggKi87IH07CiAJCUU0Mjk1RkE0MTJCMDYxNEUwMEQxQUNF
MCAvKiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQyOTVGQTMxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291cmNlTG9h
ZFByaW9yaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTQzMTA1QjgxNjc1MEYwQzAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzMTA1QjcxNjc1MEYw
QzAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3BwICovOyB9OwpAQCAtNTg0NSw4ICs1ODk0LDE1
IEBACiAJCUU0NEVFM0E4MTc1NzdFQkQwMEVFRThDRiAvKiBGb250R2VuZXJpY0ZhbWlsaWVzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NEVFM0E2
MTc1NzZFNTUwMEVFRThDRiAvKiBGb250R2VuZXJpY0ZhbWlsaWVzLmNwcCAqLzsgfTsKIAkJRTQ1
MzIyQUIxNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1MzIyQTkxNDBDRTI2NzAwNUEwRjky
IC8qIFNlbGVjdG9yUXVlcnkuY3BwICovOyB9OwogCQlFNDUzMjJBQzE0MENFMjY3MDA1QTBGOTIg
LyogU2VsZWN0b3JRdWVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ1MzIyQUExNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuaCAqLzsg
fTsKKwkJRTQ1MzkwMUQwRUFGQ0FDQTAwMzY5NUM4IC8qIE1JTUVUeXBlUmVnaXN0cnlJT1MubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUzOTAxODBF
QUZDQUNBMDAzNjk1QzggLyogTUlNRVR5cGVSZWdpc3RyeUlPUy5tbSAqLzsgfTsKIAkJRTQ1Mzkw
MUUwRUFGQ0FDQTAwMzY5NUM4IC8qIFBhc3RlYm9hcmRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUzOTAxOTBFQUZDQUNBMDAzNjk1QzggLyog
UGFzdGVib2FyZElPUy5tbSAqLzsgfTsKKwkJRTQ1MzkwNDMwRUFGRDYzNzAwMzY5NUM4IC8qIFBs
YXRmb3JtU2NyZWVuSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ1MzkwMzIwRUFGRDYzNzAwMzY5NUM4IC8qIFBsYXRmb3JtU2NyZWVuSU9TLm1t
ICovOyB9OworCQlFNDUzOTA0NTBFQUZENjM3MDAzNjk1QzggLyogU2Nyb2xsVmlld0lPUy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MDM0MEVB
RkQ2MzcwMDM2OTVDOCAvKiBTY3JvbGxWaWV3SU9TLm1tICovOyB9OwogCQlFNDUzOTA0NjBFQUZE
NjM3MDAzNjk1QzggLyogU2hhcmVkVGltZXJJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUzOTAzNTBFQUZENjM3MDAzNjk1QzggLyogU2hhcmVk
VGltZXJJT1MubW0gKi87IH07CisJCUU0NTM5MDQ3MEVBRkQ2MzcwMDM2OTVDOCAvKiBTb3VuZElP
Uy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5
MDM2MEVBRkQ2MzcwMDM2OTVDOCAvKiBTb3VuZElPUy5tbSAqLzsgfTsKKwkJRTQ1MzkwNDkwRUFG
RDYzNzAwMzY5NUM4IC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUzOTAzODBFQUZENjM3MDAzNjk1
QzggLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5tbSAqLzsgfTsKKwkJRTQ1MzkwNEQwRUFG
RDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1Mu
bW0gKi87IH07CisJCUU0NTM5MEFFMEVBRkY0QjUwMDM2OTVDOCAvKiBTeXN0ZW1NZW1vcnlJT1Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1Mzkw
QUQwRUFGRjRCNTAwMzY5NUM4IC8qIFN5c3RlbU1lbW9yeUlPUy5jcHAgKi87IH07CiAJCUU0NjJB
NEExMTEzRTcxQkUwMDRBNDIyMCAvKiBJbnRQb2ludEhhc2guaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjJBNEEwMTEzRTcxQkUwMDRBNDIyMCAvKiBJ
bnRQb2ludEhhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFNDZBMkIxQzE3Q0E2NUI5MDAwREJDRDggLyogRWxlbWVudERlc2NlbmRhbnRJdGVy
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2
QTJCMUIxN0NBNjVCOTAwMERCQ0Q4IC8qIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaCAqLzsg
fTsKIAkJRTQ2QTJCMUUxN0NBNzZCMTAwMERCQ0Q4IC8qIEVsZW1lbnRDaGlsZEl0ZXJhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDZBMkIxRDE3
Q0E3NkIxMDAwREJDRDggLyogRWxlbWVudENoaWxkSXRlcmF0b3IuaCAqLzsgfTsKQEAgLTU4NzMs
NiArNTkyOSwxMCBAQAogCQlFNEFGRDAwRTBEQUYzMzU1MDBGNUY1NUMgLyogU01JTFRpbWVDb250
YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
QUZEMDA4MERBRjMzNTQwMEY1RjU1QyAvKiBTTUlMVGltZUNvbnRhaW5lci5oICovOyB9OwogCQlF
NEFGRDAwRjBEQUYzMzU1MDBGNUY1NUMgLyogU1ZHU01JTEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRkQwMDkwREFGMzM1NDAwRjVG
NTVDIC8qIFNWR1NNSUxFbGVtZW50LmNwcCAqLzsgfTsKIAkJRTRBRkQwMTAwREFGMzM1NTAwRjVG
NTVDIC8qIFNWR1NNSUxFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNEFGRDAwQTBEQUYzMzU0MDBGNUY1NUMgLyogU1ZHU01JTEVsZW1lbnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFNEI2
NUE1ODEzMkZBOEU3MDA3MEU3QkUgLyogVGlsZUdyaWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjY1QTU3MTMyRkE4RTcwMDcwRTdCRSAvKiBUaWxl
R3JpZC5oICovOyB9OworCQlFNEI2NUE1QTEzMkZBQUY5MDA3MEU3QkUgLyogVGlsZUdyaWQubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1OTEz
MkZBQUY5MDA3MEU3QkUgLyogVGlsZUdyaWQubW0gKi87IH07CisJCUU0QjY1QTVDMTMyRkFDQjAw
MDcwRTdCRSAvKiBUaWxlTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0QjY1QTVCMTMyRkFDQjAwMDcwRTdCRSAvKiBUaWxlTGF5ZXIuaCAqLzsg
fTsKKwkJRTRCNjVBNUUxMzJGQURCNjAwNzBFN0JFIC8qIFRpbGVMYXllci5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjY1QTVEMTMyRkFEQjYwMDcw
RTdCRSAvKiBUaWxlTGF5ZXIubW0gKi87IH07CiAJCUU0QkJFRDBFMTRGNDAyNUQwMDNGMEI5OCAv
KiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCQkVEMEMxNEY0MDI1RDAwM0YwQjk4IC8qIFBy
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi87IH07CiAJCUU0QkJFRDBGMTRGNDAy
NUQwMDNGMEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QkJFRDBEMTRGNDAyNUQwMDNG
MEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaCAqLzsgfTsKIAkJRTRCQkVE
NEMxNEZDREJBMTAwM0YwQjk4IC8qIFN0eWxlUnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEJCRUQ0QTE0RkNEQkExMDAzRjBCOTggLyogU3R5
bGVSdWxlLmNwcCAqLzsgfTsKQEAgLTU4ODEsNiArNTk0MSw4IEBACiAJCUU0QzE3ODlCMEVFNjkw
MzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzE3ODk2MEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxl
Y3Rvckxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNEMyNzk1ODBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMjc5NTYwQ0Y5NzQxOTAw
RTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCAqLzsgfTsKIAkJRTRDMjc5NTkwQ0Y5NzQxOTAwRTk3
Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNEMyNzk1NzBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCAqLzsg
fTsKKwkJRTRDM0IxRkEwRjBFNDE2MTAwOTY5M0Y2IC8qIFRpbGVDYWNoZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDM0IxRjkwRjBFNDE2MTAwOTY5
M0Y2IC8qIFRpbGVDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUU0QzNCMUZDMEYwRTQxNzAwMDk2OTNGNiAvKiBUaWxlQ2FjaGUubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMzQjFGQjBGMEU0
MTcwMDA5NjkzRjYgLyogVGlsZUNhY2hlLm1tICovOyB9OwogCQlFNEM5MUEwRTE4MDIzNDMxMDBB
MTdGNkQgLyogVGV4dFBhaW50U3R5bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0QzkxQTBEMTgwMjM0MzEwMEExN0Y2RCAvKiBUZXh0UGFpbnRTdHls
ZS5oICovOyB9OwogCQlFNEM5MUExMDE4MDIzNDM5MDBBMTdGNkQgLyogVGV4dFBhaW50U3R5bGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDOTFB
MEYxODAyMzQzOTAwQTE3RjZEIC8qIFRleHRQYWludFN0eWxlLmNwcCAqLzsgfTsKIAkJRTRDOTFB
MTYxODA5OTlGMTAwQTE3RjZEIC8qIFJlbmRlclRleHRMaW5lQm94ZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzkxQTE1MTgwOTk5RjEwMEExN0Y2
RCAvKiBSZW5kZXJUZXh0TGluZUJveGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU4OTYsNiArNTk1OCw4IEBACiAJCUU0RDk4OEI2MTdCRkVC
MjEwMDg0RkI4OCAvKiBUZXh0Tm9kZVRyYXZlcnNhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ5ODhCNTE3QkZFQjIxMDA4NEZCODggLyogVGV4
dE5vZGVUcmF2ZXJzYWwuY3BwICovOyB9OwogCQlFNERFQUExNzE3QTkzREMzMDAwRTA0MzAgLyog
U3R5bGVSZXNvbHZlVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNERFQUExNTE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVSZXNvbHZlVHJlZS5j
cHAgKi87IH07CiAJCUU0REVBQTE4MTdBOTNEQzMwMDBFMDQzMCAvKiBTdHlsZVJlc29sdmVUcmVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNERFQUEx
NjE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVSZXNvbHZlVHJlZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUU0RTM5QUZCMTMzMEVGQTgwMDNBQjI3
NCAvKiBUaWxlTGF5ZXJQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNEUzOUFGQTEzMzBFRkE4MDAzQUIyNzQgLyogVGlsZUxheWVyUG9vbC5oICov
OyB9OworCQlFNEUzOUFGRDEzMzBFRkM2MDAzQUIyNzQgLyogVGlsZUxheWVyUG9vbC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTM5QUZDMTMzMEVG
QzUwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29sLm1tICovOyB9OwogCQlFNEU5QjExOTE4MTA5MTZG
MDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU5QjExODE4MTA5MTZGMDAzQUNDREYgLyog
U2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggKi87IH07CiAJCUU0RTlCMTFCMTgxNDU2OTIwMDNB
Q0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTlCMTFBMTgxNDU2OTIwMDNBQ0NERiAvKiBT
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcCAqLzsgfTsKIAkJRTRFOUIxMUQxODE0NTY5QzAw
M0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTlCMTFDMTgxNDU2OUMwMDNBQ0NERiAvKiBT
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi87IH07CkBAIC02MzI1LDYgKzYzODksOCBAQAog
CQlGREY3RTlDMzEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZERjdFOUMxMTNB
QzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2suY3BwICovOyB9OwogCQlGREY3
RTlDNDEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREY3RTlDMjEzQUMyMURCMDBB
NTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmggKi87IH07CiAJCUZFMDlEQjQ5MTY5RTJE
NkUwMDYyMjU1NyAvKiBEYXRhYmFzZUVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTA5REI0NjE2OUUyRDZFMDA2MjI1NTcgLyogRGF0YWJhc2VF
cnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUZFMEQ4NEU5MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDg0RTgxMDQ4NDM0ODAwMUExNzlFIC8q
IFdlYkV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJRkUwRDg0RUIxMDQ4NDM2RTAwMUExNzlFIC8qIFdlYkV2ZW50Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDg0RUExMDQ4NDM2RTAwMUEx
NzlFIC8qIFdlYkV2ZW50Lm1tICovOyB9OwogCQlGRTExNUZBQjE2Nzk4OENEMDAyNDkxMzQgLyog
QWJzdHJhY3REYXRhYmFzZVNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUxMTVGQTkxNjc5ODhDRDAwMjQ5MTM0IC8qIEFic3RyYWN0RGF0YWJh
c2VTZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRTE2Q0ZEMzE2OUQxREVEMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTZDRkNGMTY5RDFE
RUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmQuY3BwICovOyB9OwogCQlGRTE2Q0ZENDE2OUQx
REVEMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTE2Q0ZEMDE2OUQxREVDMDBEM0EwQzcgLyogRGF0YWJh
c2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTYzNjMsNiArNjQyOSw3IEBACiAJCUZFQkM1RjMyMTZCRDBDQzMwMDY1OUJEMyAvKiBE
YXRhYmFzZUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFQkM1RjMwMTZCRDBDQzMwMDY1OUJEMyAvKiBEYXRhYmFzZUJhc2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUQxM0QzQTBDRUE5MzQ2
MDBEODk0NjYgLyogRWRpdG9ySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkVEMTNEMzkwQ0VBOTM0NjAwRDg5NDY2IC8qIEVkaXRvcklPUy5tbSAq
LzsgfTsKIAkJRkVEMTNEM0QwQ0VBOTM2QTAwRDg5NDY2IC8qIEZyYW1lSU9TLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEMTNEM0IwQ0VBOTM2QTAw
RDg5NDY2IC8qIEZyYW1lSU9TLm1tICovOyB9OworCQlGRUQxM0Q0MDBDRUE5Mzk0MDBEODk0NjYg
LyogSWNvbklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFRDEzRDNGMENFQTkzOTQwMEQ4OTQ2NiAvKiBJY29uSU9TLm1tICovOyB9OwogCQlGRUQx
M0Q1MjBDRUE5NDk3MDBEODk0NjYgLyogUmVuZGVyVGhlbWVJT1MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDEzRDUwMENFQTk0OTcwMEQ4OTQ2NiAv
KiBSZW5kZXJUaGVtZUlPUy5oICovOyB9OwogCQlGRUQ0ODM5MENFRDY2QzMyNTVGNzJDNTkgLyog
TWF0aE1MU2VsZWN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNzVBMDU5QUYxNzBEOEZBQTVCOENBQkUgLyogTWF0aE1MU2VsZWN0RWxl
bWVudC5jcHAgKi87IH07CiAJCUZFREVGODQxMTY3OTcxMDgwMDBFNDQ0QSAvKiBEYXRhYmFzZVN0
cmF0ZWd5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFREVGODNGMTY3OTcxMDgwMDBFNDQ0QSAvKiBEYXRhYmFzZVN0cmF0ZWd5LmNwcCAqLzsgfTsK
QEAgLTY4NDAsNiArNjkwNyw4IEBACiAJCTA3MkFFMUUzMTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQuaWRsOyBwYXRoID0gcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MkFFMUU0MTgz
QzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5qcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
LmpzOyBwYXRoID0gcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5qczsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyQ0E4NjAxNkNCNERDMzAwOEFFMTMxIC8qIENhcHRp
b25Vc2VyUHJlZmVyZW5jZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTA3MzU3Qzc2MTZEMkRGMEQwMEVEOTlFNyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
SU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluYmFuZFRleHRUcmFja1By
aXZhdGVBVkZJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDczNTdDNzcxNkQy
REYwRDAwRUQ5OUU3IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzM1RUU2OTBGNDBDNUU0MDA0
QTI2MDQgLyogTWVkaWFQbGF5ZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNZWRpYVBsYXllclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3
MzY3REREMTcyQ0E2N0YwMEQ4NjFCOSAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlTGVnYWN5QVZG
T2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlTGVnYWN5QVZGT2JqQy5oOyBwYXRoID0gb2JqYy9JbmJhbmRUZXh0VHJhY2tQcml2YXRl
TGVnYWN5QVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzM2N0RERTE3
MkNBNjdGMDBEODYxQjkgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUxlZ2FjeUFWRk9iakMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlTGVnYWN5QVZGT2JqQy5tbTsgcGF0aCA9IG9iamMvSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUxlZ2FjeUFWRk9iakMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02ODU0LDYg
KzY5MjMsOCBAQAogCQkwNzNCRTM0NTE3RDE3RTdBMDAyQkQ0MzEgLyogSlNOYXZpZ2F0b3JVc2Vy
TWVkaWFFcnJvckNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
TmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzNCRTM0NjE3RDE3RTdBMDAyQkQ0MzEgLyogSlNOYXZpZ2F0b3JVc2VyTWVkaWFT
dWNjZXNzQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwNzNCRTM0NzE3RDE3RTdBMDAyQkQ0MzEgLyogSlNOYXZpZ2F0b3JVc2Vy
TWVkaWFTdWNjZXNzQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMDc0MzAwQTMwRjRCOEJDRjAwODA3NkNEIC8qIE1lZGlhUGxheWVyUHJpdmF0
ZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1lZGlhUGxh
eWVyUHJpdmF0ZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDc0MzAwQTQw
RjRCOEJDRjAwODA3NkNEIC8qIE1lZGlhUGxheWVyUHJpdmF0ZUlPUy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBsYXllclByaXZhdGVJT1MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDc1Mzg2MDAxNDQ4OUU5ODAwQjc4NDUyIC8qIENhY2hlZFRleHRU
cmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRUZXh0
VHJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzUzODYwMTE0NDg5RTk4
MDBCNzg0NTIgLyogQ2FjaGVkVGV4dFRyYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENhY2hlZFRleHRUcmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
NzYzMDZDQzE3RTE0NzhEMDA1QTdDNEUgLyogTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNDYWxsYmFj
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbVRyYWNrU291
cmNlc0NhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MDkwLDYgKzcx
NjEsOCBAQAogCQkwRjEzMTYzRDE2RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGxhdGZvcm1DQUZpbHRlcnMuaDsg
cGF0aCA9IGNhL1BsYXRmb3JtQ0FGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTMxNjNGMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBsYXRmb3JtQ0FGaWx0ZXJz
TWFjLm1tOyBwYXRoID0gY2EvbWFjL1BsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjE1REE4OTBGM0FBRUU3MDAwMENFNDcgLyogQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUuaDsgcGF0aCA9IGFuaW1hdGlvbi9BbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjE3NzQ3RTEz
NzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gU2Nyb2xsQW5pbWF0b3JJT1MuaDsgcGF0aCA9IGlvcy9TY3JvbGxBbmlt
YXRvcklPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjE3NzQ3RjEzNzhCNzcy
MDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBTY3JvbGxBbmltYXRvcklPUy5tbTsgcGF0aCA9IGlvcy9TY3JvbGxB
bmltYXRvcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyOUMxNkQxMzAw
QzJFMjAwMkQ3OTRFIC8qIEFjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5QWxsSW5PbmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93
Qmx1ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFkb3dCbHVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5
MTkwIC8qIFNoYWRvd0JsdXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hh
ZG93Qmx1ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzExNCw2ICs3MTg3LDcg
QEAKIAkJMEY2MDVBRUIxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ0NvbnN0cmFpbnRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM4M0RCMTg2MTVCMjkwMDNFNURCNSAv
KiBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2MzgzREMxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJl
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRlZFNjcm9sbGluZ1Ry
ZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5N0E2NTcxNTVEQTgxRTAwRkFE
RDRDIC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IERpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBMjRENzcxNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNz
TGF5ZXJVcGRhdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdy
YXBoaWNzTGF5ZXJVcGRhdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZB
MjRENzgxNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNzTGF5ZXJVcGRhdGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzTGF5ZXJVcGRhdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTg4RUJDMTZBOEQxQkQwMEY5OTk4NCAvKiBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGVNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03NTYwLDYgKzc2MzQsNyBAQAogCQkxRjNDM0JFODEzNUNBRjND
MDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNZWRpYUNvbnRyb2xzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUYzQzNCRTkxMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFDb250cm9scy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxRjNGMTk1MjE0OTlDQTc2MDBBNUFFQTcgLyogUE9ERnJlZUxpc3RBcmVu
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQT0RGcmVlTGlzdEFyZW5hLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFGNjhENEFEMTRCQjlEQ0EwMDdCNUM2MiAv
KiBNZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBNZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW07IHBhdGggPSBpb3MvTWVt
b3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
RkFGQkYxNjE1QTVGQTUyMDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFVUSVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxRkFGQkYxNzE1QTVGQTUyMDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVVRJVXRpbGl0aWVzLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRkM0MEZCNzE2NTVDNTkxMDA0MEYyOUUgLyogU3Vi
aW1hZ2VDYWNoZVdpdGhUaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dWJpbWFnZUNhY2hlV2l0aFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03
NTk5LDYgKzc2NzQsOCBAQAogCQkyNjU1NDEzNzE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRD
b2Rlc0lPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBLZXlFdmVudENvZGVz
SU9TLmg7IHBhdGggPSBpb3MvS2V5RXZlbnRDb2Rlc0lPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyNjU1NDEzODE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRJT1MubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBLZXlFdmVudElPUy5tbTsgcGF0
aCA9IGlvcy9LZXlFdmVudElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjY1
NTQxNEIxNDg5QUEyQjAwMERGQzVEIC8qIEN1cnNvcklPUy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBDdXJzb3JJT1MuY3BwOyBwYXRoID0gaW9zL0N1cnNvcklPUy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2NjAxRUJEMTRCM0I5QUQwMDEyQzBG
RSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5oOyBwYXRoID0gaW9zL1BsYXRmb3JtRXZl
bnRGYWN0b3J5SU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2NjAxRUJFMTRC
M0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tOyBw
YXRoID0gaW9zL1BsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyNjkyMzk5MTE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdl
RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJWZXJz
aW9uQ2hhbmdlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjkyMzk5
MjE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZCOTk5OEUxODAzQUU3MjAwRDAxMTIxIC8qIFJlZ2lz
dGVyQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlZ2lzdGVy
QWxsb2NhdG9yLmg7IHBhdGggPSBjc3NqaXQvUmVnaXN0ZXJBbGxvY2F0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc2MTYsNiArNzY5Myw3IEBACiAJCTI2RkFFNEM5MTg1MkUz
QTUwMDRDOEM0NiAvKiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZGQUU0Q0ExODUy
RTNBNTAwNEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW5jaHJv
bm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyNkZBRTRDQjE4NTJFM0E1MDA0QzhDNDYgLyogU3luY2hyb25v
dXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyOTAzNzE2NDE2QkEx
MUJDMDBGRUZERjAgLyogQ29udGVudEZpbHRlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IENvbnRlbnRGaWx0ZXJJT1MubW07IHBhdGggPSBpb3MvQ29udGVu
dEZpbHRlcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjkxN0I1NUUxNDcz
NDk2QzAwNTJDOUQwIC8qIExheWVyRmx1c2hTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gTGF5ZXJGbHVzaFNjaGVkdWxlci5jcHA7IHBhdGggPSBjYS9M
YXllckZsdXNoU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjkx
N0I1NUYxNDczNDk2QzAwNTJDOUQwIC8qIExheWVyRmx1c2hTY2hlZHVsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGF5ZXJGbHVzaFNjaGVkdWxlci5oOyBwYXRoID0gY2Ev
TGF5ZXJGbHVzaFNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOTE3
QjU2MDE0NzM0OTZDMDA1MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50Lmg7
IHBhdGggPSBjYS9MYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC03NzkwLDYgKzc4NjgsMTAgQEAKIAkJMzEzMTNGNjMxNDQzQjM1RTAwNkUy
QTkwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzEzMTNGNjQxNDQzQjM1RTAwNkUyQTkwIC8qIEZpbHRlckVmZmVjdFJlbmRl
cmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRl
cmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMzhBOUU0MTQ3NDQzNDYwMEIw
RUQxMiAvKiBTdHlsZVNoYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBT
dHlsZVNoYWRlci5oOyBwYXRoID0gc3R5bGUvU3R5bGVTaGFkZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzE0MDM3OTcxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25N
YW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkNvcmVNb3Rpb25N
YW5hZ2VyLmg7IHBhdGggPSBpb3MvV2ViQ29yZU1vdGlvbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzE0MDM3OTgxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rp
b25NYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2Vi
Q29yZU1vdGlvbk1hbmFnZXIubW07IHBhdGggPSBpb3MvV2ViQ29yZU1vdGlvbk1hbmFnZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNDAzNzk5MTI0QkVBN0YwMEFGNDBFNCAv
KiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oOyBwYXRoID0gaW9zL0RldmljZU9y
aWVudGF0aW9uQ2xpZW50SU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNDAz
NzlBMTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IERldmljZU9yaWVudGF0aW9uQ2xp
ZW50SU9TLm1tOyBwYXRoID0gaW9zL0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTQ2RkU2NTE4NDQyMDg3MDAxQTkzN0MgLyogT0VT
VGV4dHVyZUZsb2F0TGluZWFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IE9FU1RleHR1cmVGbG9hdExpbmVhci5jcHA7IHBhdGggPSBjYW52YXMvT0VTVGV4dHVyZUZs
b2F0TGluZWFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE0NkZFNjYxODQ0
MjA4NzAwMUE5MzdDIC8qIE9FU1RleHR1cmVGbG9hdExpbmVhci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaDsgcGF0aCA9IGNhbnZhcy9P
RVNUZXh0dXJlRmxvYXRMaW5lYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE0
NkZFNjcxODQ0MjA4NzAwMUE5MzdDIC8qIE9FU1RleHR1cmVGbG9hdExpbmVhci5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBuYW1lID0gT0VTVGV4dHVyZUZsb2F0TGluZWFyLmlkbDsgcGF0aCA9IGNhbnZh
cy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNzgzMCw2ICs3OTEyLDcgQEAKIAkJMzE5QUUwNjExNDJENkIyNDAwNjU2M0ExIC8qIFN0eWxl
RmlsdGVyRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHls
ZUZpbHRlckRhdGEuY3BwOyBwYXRoID0gc3R5bGUvU3R5bGVGaWx0ZXJEYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE5QUUwNjIxNDJENkIyNDAwNjU2M0ExIC8qIFN0eWxl
RmlsdGVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdHlsZUZpbHRl
ckRhdGEuaDsgcGF0aCA9IHN0eWxlL1N0eWxlRmlsdGVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzMTlGQkQ1RDE1RDJGNDQ0MDA5NjQwQTYgLyogQ2FjaGVkSW1hZ2VDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVkSW1hZ2VDbGllbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFBQjRGRkYxMjI4NzhBMjAwMUE3REIw
IC8qIEdyYXBoaWNzQ29udGV4dDNESU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEdyYXBoaWNzQ29udGV4dDNESU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxQzBGRjFCMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRBbmltYXRpb25FdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxQzBGRjFDMEU0Q0VCNkUwMDdENkZF
NSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJLaXRBbmltYXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzMUMwRkYxRDBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYktpdEFuaW1hdGlvbkV2ZW50LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4NDksNiArNzkzMiw4IEBACiAJCTMxRDU5MUIxMTY2OTdB
NkMwMEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRThE
OEJBMTYwQkM5NEIwMDRDRThGNSAvKiBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRThEOEJCMTYwQkM5NEMwMDRDRThG
NSAvKiBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMUVBRjk3QzEyMTQzNUE0MDBFN0MxQkYgLyogRGV2aWNlTW90aW9uQ2xpZW50SU9T
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERldmljZU1vdGlvbkNsaWVudElP
Uy5oOyBwYXRoID0gaW9zL0RldmljZU1vdGlvbkNsaWVudElPUy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMUVBRjk3RDEyMTQzNUE0MDBFN0MxQkYgLyogRGV2aWNlTW90aW9uQ2xp
ZW50SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRGV2aWNl
TW90aW9uQ2xpZW50SU9TLm1tOyBwYXRoID0gaW9zL0RldmljZU1vdGlvbkNsaWVudElPUy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFFQzFENTAxNEZFRkQwODAwQzk0NjYyIC8q
IE5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzFFQzFEQUMxNEZGMjZFQTAwQzk0NjYyIC8qIE5vdGlmaWNhdGlvblBlcm1p
c3Npb25DYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2Fs
bGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFFQzFFMjYxNEZGNjBFRTAw
Qzk0NjYyIC8qIEpTTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxi
YWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4OTQsNiArNzk3OSw3IEBA
CiAJCTM3MUY1M0U3MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzFGNTNFODBEMjcwNEY5MDBFQ0UwRDUgLyog
Q1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzNzIwMjE5ODEwNjIxM0M2MDBGMjVDNEIgLyogRm9udFNtb290aGluZ01vZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udFNtb290aGluZ01vZGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzcyN0RGRDQxNDJBQUU0NTAwRDQ0OUNCIC8qIEZvbnRD
YWNoZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZvbnRD
YWNoZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcyQzAwQzMxMjk2MTFG
MTAwNUM5NTc1IC8qIFRleHRCb3VuZGFyaWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRleHRCb3VuZGFyaWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzcyQzAwRDgxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbmRPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTM3NDQ1NzBFMERCMDVGQTUwMEFFMDk5MiAvKiBTVkdHbHlwaE1hcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdHbHlwaE1hcC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNzkzMSw2ICs4MDE3LDcgQEAKIAkJMzdERENEQTMxMzg0NTAx
QzAwMDhCNzkzIC8qIE1IVE1MUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1IVE1MUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RTM1MjRB
MTI0NTBDNTIwMEJBRjVEOSAvKiBJbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzdFMzUyNEMxMjQ1MEM2NjAwQkFGNUQ5IC8qIElucHV0VHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnB1dFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzdFNjU5NEYxNjNCMTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRhSU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2ltcGxlRm9udERhdGFJT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RjgxOEZCMEQ2NTc2MDYwMDVFMUYw
NSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViQ29yZVVSTFJlc3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3
RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9uc2UubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RkM5NkRBMTEwNEVENzEwMDNFMUZBRCAvKiBU
cmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC04MTUzLDggKzgyNDAsMTMgQEAKIAkJNDQyOUFBRkYwQ0I4NEVDMzAwNzY0N0M1
IC8qIERPTUhUTUxPYmplY3RFbGVtZW50UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NSFRNTE9iamVjdEVsZW1lbnRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ0MjlBQjA3MENCODRGODEwMDc2NDdDNSAvKiBET01UZXh0RXZlbnRJ
bnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NVGV4dEV2ZW50
SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQyQUJDRDUxN0Q5MjYy
RjAwRDMwNzE1IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Q0ZOZXQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3luY2hyb25vdXNMb2FkZXJDbGllbnRDRk5ldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0MkFGN0E3MTAyQ0RERUEwMDhGRDRE
MyAvKiBRdWlja0xvb2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVpY2tM
b29rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0MkFGN0E4MTAyQ0RERUEwMDhG
RDREMyAvKiBRdWlja0xvb2subW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBRdWlja0xvb2subW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MzExQ0Q0
MTJFNEUyMkQwMDBBOEQxOSAvKiBET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDMxMUNENTEyRTRFMjJEMDAwQThEMTkgLyog
RE9NRG9jdW1lbnRQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERP
TURvY3VtZW50UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDNGMDQy
NjBFNzVDOEZCMDA3RTU0MDcgLyogTmV0d29ya1N0YXRlTm90aWZpZXJJT1MuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya1N0YXRlTm90aWZpZXJJT1MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDRENEUyMTBGNzA4QjJFMDAzMTU4RTAg
LyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0NDc2NTMxQTEzMzE3MDk5MDAwNkI3ODkgLyogU1NMS2V5R2VuZXJhdG9ySU9T
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNTTEtleUdlbmVyYXRv
cklPUy5jcHA7IHBhdGggPSBpb3MvU1NMS2V5R2VuZXJhdG9ySU9TLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDQ3OTU4MDIxNjQzQjQ3QjAwMUUwQTdGIC8qIFBhcnNlZENvbnRl
bnRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcnNlZENv
bnRlbnRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ3OTU4MDMxNjQz
QjQ3QjAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBhcnNlZENvbnRlbnRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ0OEEyOUJEMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MT3B0aW9uc0NvbGxl
Y3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxNjcsOCArODI1OSwxNiBA
QAogCQk0NDk2RTM5RjEzOTgxM0E1MDAzRUUzMkEgLyogSlNTVkdNUGF0aEVsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdNUGF0aEVsZW1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ5NkUzQTExMzk4MTNDQjAwM0VFMzJBIC8qIEpTU1ZH
TVBhdGhFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
U1ZHTVBhdGhFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ5QjE5
RjMwRkE3MkVDRTAwMTVDQTRBIC8qIEhUTUxQYXJzZXJRdWlya3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBhcnNlclF1aXJrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0NEEyMERCODBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3BvbnNl
SU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25z
ZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEEyOEFBQjEyREZCOEFDMDBB
RTkyM0IgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWF0aE1MRWxlbWVudEZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDRBMjhBQUUxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hdGhNTE5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQ0QzM2M0VFMEZBQTdCQjMwMDk3RjhDQyAvKiBSdW50aW1lQXBwbGljYXRp
b25DaGVja3NJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0QzM2
M0VGMEZBQTdCQjMwMDk3RjhDQyAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSdW50aW1lQXBwbGljYXRpb25D
aGVja3NJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0QzNDRkU3MTU1NkJF
NUQwMDAxMzYwOSAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaDsgcGF0aCA9IGlv
cy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQ0Qzk5MTgxMEYzRDFFMEQwMDU4NjY3MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFNjcm9sbGJhclRoZW1lSU9TLm1t
OyBwYXRoID0gaW9zL1Njcm9sbGJhclRoZW1lSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0NEM5OTE4NTBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2Nyb2xsYmFyVGhlbWVJT1MuaDsgcGF0
aCA9IGlvcy9TY3JvbGxiYXJUaGVtZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gVGhlbWVJT1MuaDsgcGF0aCA9IGlvcy9UaGVtZUlPUy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NEM5OTE5RTBGM0QyMTBFMDA1ODY2NzAgLyogVGhl
bWVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUaGVtZUlP
Uy5tbTsgcGF0aCA9IGlvcy9UaGVtZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDREOERBOTgxMzk1NDVCRTAwMzM3Qjc1IC8qIFNWR01QYXRoRWxlbWVudC5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gU1ZHTVBhdGhFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDREOERBOUExMzk1NDVDRDAwMzM3Qjc1IC8qIFNWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdBbmltYXRlTW90aW9uRWxlbWVu
dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0REFCNUFGMTVBNjIzNTgwMDk3
QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkwODQsOCArOTE4NCwxMiBAQAogCQk3RTEyRTkwRTE1RkE1
RDNBMDA1RTQxMjYgLyogQ3VzdG9tRmlsdGVyTWVzaEdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDdXN0b21GaWx0ZXJNZXNoR2VuZXJhdG9yLmNwcDsg
cGF0aCA9IGZpbHRlcnMvQ3VzdG9tRmlsdGVyTWVzaEdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdFMzNDRDAwMTI3RjM0MEQwMEJFOEYxNyAvKiBQdXJnZVByaW9y
aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1cmdlUHJpb3JpdHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0UzN0VGMkQxMzM5MjA4ODAwQjI5MjUwIC8q
IFN1YnJlc291cmNlTG9hZGVyQ0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gU3VicmVzb3VyY2VMb2FkZXJDRi5jcHA7IHBhdGggPSBjZi9TdWJyZXNvdXJjZUxvYWRl
ckNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0U0MjhDRTQxM0UzNDA3RjAw
M0I2NjFDIC8qIFJlc291cmNlSGFuZGxlSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gUmVzb3VyY2VIYW5kbGVJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdFNDZGNkY4MTYyN0EyQzkwMDA2MjIyMyAvKiBKU09FU0VsZW1lbnRJbmRleFVp
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNPRVNFbGVtZW50
SW5kZXhVaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U0NkY2RjkxNjI3
QTJDOTAwMDYyMjIzIC8qIEpTT0VTRWxlbWVudEluZGV4VWludC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU09FU0VsZW1lbnRJbmRleFVpbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJN0U0NzRFMUIxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNl
VHJhY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxpdGVE
YXRhYmFzZVRyYWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0U0
NzRFMUMxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFiYXNlVHJhY2tlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0U0NzRFMUQxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0
ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3RTVEN0E3MzE2MUQzRjhGMDA4OTZDMzQgLyogT0VTRWxlbWVudEluZGV4VWludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPRVNFbGVtZW50SW5kZXhVaW50LmNw
cDsgcGF0aCA9IGNhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0U1RDdBNzQxNjFEM0Y4RjAwODk2QzM0IC8qIE9FU0VsZW1lbnRJbmRl
eFVpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gT0VTRWxlbWVudEluZGV4
VWludC5oOyBwYXRoID0gY2FudmFzL09FU0VsZW1lbnRJbmRleFVpbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0U2NkUyMzExNkQ2RUI2QzAwRjdFN0ZGIC8qIFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xDb21wcmVz
c2VkVGV4dHVyZUFUQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDQwMiw2
ICsxMDUwNiw4IEBACiAJCUE0NTZGQTI1MTFBRDRBODMwMDIwQjQyMCAvKiBMYWJlbHNOb2RlTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYWJlbHNOb2RlTGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTAxOTIwQzEzMkVCRjJFMDA4QkZFNTUgLyog
QXV0b2NhcGl0YWxpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b2Nh
cGl0YWxpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUwMkM1REQxMzA0OUIz
NTAwRkM3RDUzIC8qIFdlYlNhZmVHQ0FjdGl2aXR5Q2FsbGJhY2tJT1MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViU2FmZUdDQWN0aXZpdHlDYWxsYmFja0lPUy5oOyBwYXRo
ID0gaW9zL1dlYlNhZmVHQ0FjdGl2aXR5Q2FsbGJhY2tJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTUxNkU4QjQxMzZFMDREQjAwNzZDM0MwIC8qIExvY2FsaXplZERhdGVDYWNo
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbGl6ZWREYXRlQ2FjaGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTUxNkU4QjUxMzZFMDREQjAwNzZDM0Mw
IC8qIExvY2FsaXplZERhdGVDYWNoZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IExvY2FsaXplZERhdGVDYWNoZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTUxODIyNTMxN0UyOENGMTAwQTlCQTFEIC8qIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmb2xkZXI7IHBhdGggPSBTY3JpcHRz
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTE4MjI1NDE3RTJBMEQ0MDBBOUJBMUQg
LyogSW5zcGVjdG9yT3ZlcmxheVBhZ2UuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5jc3M7IHBhdGggPSBJbnNwZWN0b3JPdmVybGF5UGFn
ZS5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MTgyMjU1MTdFMkEwRDQwMEE5
QkExRCAvKiBJbnNwZWN0b3JPdmVybGF5UGFnZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IElu
c3BlY3Rvck92ZXJsYXlQYWdlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA5
NzgsNiArMTEwODQsNyBAQAogCQlBQUQ3NjZFQTE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9y
Q2FudmFzSW5zdHJ1bWVudGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluc3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBQUUyN0I3NDE2Q0JGQzBEMDA2MjMwNDMgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVz
aXplck1vY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXplck1vY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBQUUyN0I3NTE2Q0JGQzBEMDA2MjMwNDMgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1v
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXplck1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUFFMzc1NUQxNzQy
OUJDQzAwNjIwMEMyIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVy
SU9TLm1tOyBwYXRoID0gaW9zL1BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBRjVCN0IxMTUyNEI0QkQwMDA0Q0I0OSAvKiBXZWJT
b2NrZXRGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJT
b2NrZXRGcmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFCMjNBMzI1MDlC
QkE3RDAwMDY3Q0M1MyAvKiBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQjIzQTMyNjA5QkJBN0QwMDA2N0NDNTMgLyog
QmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMjM4MCw2ICsxMjQ4Nyw4IEBACiAJCUJFOTFGQzhCMDYxMzM2NjYwMDVFMzc5MCAvKiBQ
b3NpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKIAkJQkU5MUZDOEMwNjEzMzY2NjAwNUUzNzkwIC8qIFBvc2l0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBvc2l0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07CiAJCUJFOTgzRDk1MDUyQTJFMEEwMDg5MkQ4NSAvKiBXZWJDb3JlS2V5Ym9h
cmRVSU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQ29yZUtleWJvYXJkVUlNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQlCRUE4MDdDNjBGNzE0QTAzMDA1MjQxOTkg
LyogU2VsZWN0aW9uUmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBTZWxlY3Rpb25SZWN0LmNwcDsgcGF0aCA9IGlvcy9TZWxlY3Rpb25SZWN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkVBODA3QzcwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVj
dGlvblJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2VsZWN0aW9uUmVj
dC5oOyBwYXRoID0gaW9zL1NlbGVjdGlvblJlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkVGMjlFRTkxNzE1REQwOTAwQzRCNEM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvVHJhY2tQcml2YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJFRjI5RUVBMTcxNUREMDkwMEM0QjRDOSAvKiBWaWRl
b1RyYWNrUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb1Ry
YWNrUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMDQ2RTFBQjEyMDhB
OUZFMDBCQTJDRjcgLyogTG9jYWxpemVkU3RyaW5ncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBMb2NhbGl6ZWRTdHJpbmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEyNDI0LDYgKzEyNTMzLDggQEAKIAkJQzU1RTM4QkMxMDA0MEQ1RDAwQTU2
QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzU3MkVFMUQxMjAxQzlCQzAwN0Q4RjgyIC8qIEpTSURCSW5kZXguaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJREJJbmRleC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDNTdGRURFMDEyMTJFRTlDMDA5N0JFNjUgLyogRmlsZVN5c3RlbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlU3lzdGVtLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU4MzYxQTcxNzQ0NTIzRjAwMTczNTExIC8q
IEZvbnRTZXJ2aWNlc0lPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250
U2VydmljZXNJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU4MzYxQTgxNzQ0
NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEZvbnRTZXJ2aWNlc0lPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzU4NUE2NjAxMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCQmluZGluZ1V0
aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1ODVBNjYxMTFENEZB
QzUwMDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElEQkJpbmRpbmdVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzU4NUE2NjUxMUQ0RkIwNzAwNEMzRTRCIC8qIEpTSURCQW55LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURCQW55Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMjUxMyw2ICsxMjYyNCw4IEBACiAJCUNENTRBNzYxMTgwRjlGNzAwMEIwNzZD
OSAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5o
OyBwYXRoID0gb2JqYy9BdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDU0REU0NTE3NDY4QjZGMDA1RTVCMzYgLyogTWVk
aWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0Q1NERFNDkxNzQ2OUM2RDAwNUU1QjM2IC8qIEF1ZGlvU2Vzc2lvbk1hYy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdWRpb1Nlc3Npb25NYWMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDU1OTY4RjE0NzVCNjc4MDAxRDBCRDAgLyog
QXVkaW9GaWxlUmVhZGVySU9TLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEF1ZGlvRmlsZVJlYWRlcklPUy5jcHA7IHBhdGggPSBpb3MvQXVkaW9GaWxlUmVhZGVySU9T
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q1NTk2OTAxNDc1QjY3ODAwMUQw
QkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBdWRpb0ZpbGVSZWFkZXJJT1MuaDsgcGF0aCA9IGlvcy9BdWRpb0ZpbGVSZWFkZXJJT1Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q2NDFFQjExODE4RjVFRDAwRUU0QzQx
IC8qIE1lZGlhU291cmNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNZWRpYVNvdXJjZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q2
NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZlclByaXZhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQnVmZmVyUHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRDY0MUVCRDE4MTlCMzU5MDBFRTRDNDEgLyogTWVkaWFUaW1l
TWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhVGltZU1hYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjYwOCw2ICsxMjcyMSw3IEBACiAJCUNEQzhCNUE4MTgwNDdG
RjEwMDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1t
OyBwYXRoID0gb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDOEI1QTkxODA0N0ZGMTAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZl
clByaXZhdGVBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmg7IHBhdGggPSBvYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzhCNUFDMTgwNEFFNUQw
MDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDQTgyOTQxNjc5MTAwRjAwODc1NzE0IC8qIFRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNEQ0U1Q0QwMTQ2MzNCQzkwMEQ0N0NDQSAvKiBFdmVudFRhcmdldEZhY3RvcnkuaW4g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRXZlbnRUYXJnZXRGYWN0b3J5LmluOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDREQxRTUyNTE2N0JBNTY0MDBDRTgyMEIgLyogVGV4dFRyYWNr
UmVwcmVzZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRy
YWNrUmVwcmVzZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RENzA4
OTQxODM1OUY2RTAwMkIzREM2IC8qIFNhbXBsZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTYW1wbGVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTI2NjQsNiArMTI3NzgsNyBAQAogCQlDRUNBREZDQzE1Mzc3OTFEMDBFMzcwNjggLyog
VGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDRUNDRkMzQTE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY29kZUVzY2FwZVNlcXVlbmNlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRURBMTJENjE1MkNBMUNCMDBEOUUwOEQg
LyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFsdGVybmF0aXZlVGV4dENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDRUVDNjAzNDE4N0REOTYyMDAzRTQzQkIgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25JT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VGNDE4Q0MxMTc5Njc4QzAw
OUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFZpZXdwb3J0QXJndW1lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0VGNDE4Q0QxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdwb3J0QXJndW1lbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwMDBFQkEwMTFCREFGRDQwMEM0NzcyNiAvKiBG
cmFtZUxvYWRlclN0YXRlTWFjaGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMzAwMCw2ICsxMzExNSw4IEBACiAJCUU0MDZGM0ZCMTE5ODMwN0QwMDlENTlE
NiAvKiBDb2xvckRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q29sb3JEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQxRUEwMzgxMTk4
MzZEQjAwNzEwQkM1IC8qIENTU1Byb3BlcnR5TmFtZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ1NTUHJvcGVydHlOYW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0MUVBMDM5MTE5ODM3NDkwMDcxMEJDNSAvKiBDU1NWYWx1ZUtleXdvcmRz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1ZhbHVlS2V5d29y
ZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDI0QTM5RDEzMzBERjAxMDBD
RjZEQzkgLyogVGlsZUdyaWRUaWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFRpbGVHcmlkVGlsZS5oOyBwYXRoID0gaW9zL1RpbGVHcmlkVGlsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFNDI0QTM5RjEzMzBERjFFMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gVGlsZUdyaWRUaWxl
Lm1tOyBwYXRoID0gaW9zL1RpbGVHcmlkVGlsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTQyNUE0OTkxODI5MkI4NDAwMjBDRkNGIC8qIENvbGxlY3Rpb25JbmRleENhY2hlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbGxlY3Rpb25JbmRleENhY2hlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0Mjk1RkEzMTJCMDYxNEUwMEQxQUNFMCAv
KiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZXNvdXJjZUxvYWRQcmlvcml0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NDMxMDVCNzE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOb2RlVHJhdmVyc2FsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMDM3LDggKzEzMTU0LDE1IEBACiAJCUU0NEVFM0E3MTc1NzZF
NTUwMEVFRThDRiAvKiBGb250R2VuZXJpY0ZhbWlsaWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRH
ZW5lcmljRmFtaWxpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ1MzIyQTkx
NDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2VsZWN0b3JRdWVyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0NTMyMkFBMTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdG9yUXVlcnkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ1MzkwMTgwRUFGQ0FDQTAwMzY5NUM4IC8qIE1JTUVUeXBl
UmVnaXN0cnlJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBN
SU1FVHlwZVJlZ2lzdHJ5SU9TLm1tOyBwYXRoID0gaW9zL01JTUVUeXBlUmVnaXN0cnlJT1MubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NTM5MDE5MEVBRkNBQ0EwMDM2OTVDOCAv
KiBQYXN0ZWJvYXJkSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1l
ID0gUGFzdGVib2FyZElPUy5tbTsgcGF0aCA9IGlvcy9QYXN0ZWJvYXJkSU9TLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFNDUzOTAzMjBFQUZENjM3MDAzNjk1QzggLyogUGxhdGZv
cm1TY3JlZW5JT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQ
bGF0Zm9ybVNjcmVlbklPUy5tbTsgcGF0aCA9IGlvcy9QbGF0Zm9ybVNjcmVlbklPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ1MzkwMzQwRUFGRDYzNzAwMzY5NUM4IC8qIFNj
cm9sbFZpZXdJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBT
Y3JvbGxWaWV3SU9TLm1tOyBwYXRoID0gaW9zL1Njcm9sbFZpZXdJT1MubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0NTM5MDM1MEVBRkQ2MzcwMDM2OTVDOCAvKiBTaGFyZWRUaW1l
cklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFNoYXJlZFRp
bWVySU9TLm1tOyBwYXRoID0gaW9zL1NoYXJlZFRpbWVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFNDUzOTAzNjBFQUZENjM3MDAzNjk1QzggLyogU291bmRJT1MubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBTb3VuZElPUy5tbTsgcGF0aCA9
IGlvcy9Tb3VuZElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ1MzkwMzgw
RUFGRDYzNzAwMzY5NUM4IC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9T
Lm1tOyBwYXRoID0gaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUU0NTM5MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1Mu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXaWRnZXRJT1MubW07
IHBhdGggPSBpb3MvV2lkZ2V0SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
NDUzOTBBRDBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9TLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN5c3RlbU1lbW9yeUlPUy5jcHA7IHBhdGggPSBp
b3MvU3lzdGVtTWVtb3J5SU9TLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ2
MkE0QTAxMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnRQb2ludEhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTQ2QTJCMUIxN0NBNjVCOTAwMERCQ0Q4IC8qIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudERlc2NlbmRhbnRJ
dGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDZBMkIxRDE3Q0E3NkIx
MDAwREJDRDggLyogRWxlbWVudENoaWxkSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRWxlbWVudENoaWxkSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEzMDgyLDYgKzEzMjA2LDEwIEBACiAJCUU0QjQyMzgwMENCRkI3M0MwMEFGMkVD
RSAvKiBKU0hUTUxNZWRpYUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNIVE1MTWVkaWFFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
QjQyMzg1MENCRkI3M0MwMEFGMkVDRSAvKiBKU1Byb2dyZXNzRXZlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQcm9ncmVzc0V2ZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRCNDIzODYwQ0JGQjczQzAwQUYyRUNFIC8qIEpTUHJvZ3Jl
c3NFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Byb2dyZXNzRXZl
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRCNjVBNTcxMzJGQThFNzAwNzBF
N0JFIC8qIFRpbGVHcmlkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRpbGVH
cmlkLmg7IHBhdGggPSBpb3MvVGlsZUdyaWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTRCNjVBNTkxMzJGQUFGOTAwNzBFN0JFIC8qIFRpbGVHcmlkLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gVGlsZUdyaWQubW07IHBhdGggPSBpb3MvVGlsZUdy
aWQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QjY1QTVCMTMyRkFDQjAwMDcw
RTdCRSAvKiBUaWxlTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGls
ZUxheWVyLmg7IHBhdGggPSBpb3MvVGlsZUxheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUU0QjY1QTVEMTMyRkFEQjYwMDcwRTdCRSAvKiBUaWxlTGF5ZXIubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUaWxlTGF5ZXIubW07IHBhdGggPSBpb3Mv
VGlsZUxheWVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEJCRUQwQzE0RjQw
MjVEMDAzRjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QkJFRDBEMTRGNDAyNUQw
MDNGMEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QkJFRDRBMTRGQ0RCQTEwMDNGMEI5OCAvKiBT
dHlsZVJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVS
dWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMDkwLDYgKzEzMjE4LDgg
QEAKIAkJRTRDMTc4OTYwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NTZWxlY3Rvckxpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMjc5NTYwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1l
ZGlhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1lZGlh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3
Qjk4IC8qIFJlbmRlck1lZGlhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlck1lZGlhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QzNCMUY5MEYwRTQx
NjEwMDk2OTNGNiAvKiBUaWxlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gVGlsZUNhY2hlLmg7IHBhdGggPSBpb3MvVGlsZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUU0QzNCMUZCMEYwRTQxNzAwMDk2OTNGNiAvKiBUaWxlQ2FjaGUubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUaWxlQ2FjaGUubW07IHBhdGgg
PSBpb3MvVGlsZUNhY2hlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEM5MUEw
RDE4MDIzNDMxMDBBMTdGNkQgLyogVGV4dFBhaW50U3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGV4dFBhaW50U3R5bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTRDOTFBMEYxODAyMzQzOTAwQTE3RjZEIC8qIFRleHRQYWludFN0eWxlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRQYWludFN0eWxlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDOTFBMTUxODA5OTlGMTAwQTE3RjZEIC8qIFJl
bmRlclRleHRMaW5lQm94ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyVGV4dExpbmVCb3hlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMxMDUs
NiArMTMyMzUsOCBAQAogCQlFNEQ5ODhCNTE3QkZFQjIxMDA4NEZCODggLyogVGV4dE5vZGVUcmF2
ZXJzYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dE5vZGVU
cmF2ZXJzYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNERFQUExNTE3QTkz
REMzMDAwRTA0MzAgLyogU3R5bGVSZXNvbHZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTdHlsZVJlc29sdmVUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTRERUFBMTYxN0E5M0RDMzAwMEUwNDMwIC8qIFN0eWxlUmVzb2x2ZVRyZWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVSZXNvbHZlVHJlZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEUzOUFGQTEzMzBFRkE4MDAzQUIyNzQgLyog
VGlsZUxheWVyUG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUaWxlTGF5
ZXJQb29sLmg7IHBhdGggPSBpb3MvVGlsZUxheWVyUG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFNEUzOUFGQzEzMzBFRkM1MDAzQUIyNzQgLyogVGlsZUxheWVyUG9vbC5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFRpbGVMYXllclBvb2wubW07
IHBhdGggPSBpb3MvVGlsZUxheWVyUG9vbC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTRFOUIxMTgxODEwOTE2RjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRFOUIxMUExODE0NTY5MjAwM0FD
Q0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RTlCMTFDMTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVM
aW5lTGF5b3V0RnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
bXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEzNTkyLDYgKzEzNzI0LDggQEAKIAkJRkRGN0U5QzExM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVk
aW9CdWZmZXJDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGREY3RTlDMjEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTA5REI0NjE2OUUyRDZFMDA2MjI1NTcgLyog
RGF0YWJhc2VFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFz
ZUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMEQ4NEU4MTA0ODQzNDgw
MDFBMTc5RSAvKiBXZWJFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
ZWJFdmVudC5oOyBwYXRoID0gaW9zL1dlYkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYkV2ZW50Lm1tOyBwYXRoID0gaW9zL1dl
YkV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTExNUZBOTE2Nzk4OENE
MDAyNDkxMzQgLyogQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBYnN0cmFjdERhdGFiYXNlU2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFMTZDRkNGMTY5RDFERUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YWJhc2VCYWNrZW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxNkNGRDAxNjlEMURFQzAwRDNB
MEM3IC8qIERhdGFiYXNlQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEYXRhYmFzZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNjMw
LDYgKzEzNzY0LDcgQEAKIAkJRkVCQzVGMzAxNkJEMENDMzAwNjU5QkQzIC8qIERhdGFiYXNlQmFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZUJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEMTNEMzkwQ0VBOTM0NjAwRDg5NDY2IC8qIEVk
aXRvcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEVkaXRv
cklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEMTNEM0IwQ0VBOTM2QTAw
RDg5NDY2IC8qIEZyYW1lSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gRnJhbWVJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFRDEzRDNG
MENFQTkzOTQwMEQ4OTQ2NiAvKiBJY29uSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gSWNvbklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkVEMTNENTAwQ0VBOTQ5NzAwRDg5NDY2IC8qIFJlbmRlclRoZW1lSU9TLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRoZW1lSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFREVGODNGMTY3OTcxMDgwMDBFNDQ0QSAvKiBEYXRhYmFzZVN0cmF0ZWd5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFiYXNlU3RyYXRl
Z3kuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURFRjg0MDE2Nzk3MTA4MDAw
RTQ0NEEgLyogRGF0YWJhc2VTdHJhdGVneS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEYXRhYmFzZVN0cmF0ZWd5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NDMxNCw2ICsxNDQ0OSw3IEBACiAJCTFBMkU2RTU2MENDNTUxRTAwMDRBMjA2MiAvKiBzcWwgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTdFNDc0RTE5MTI0
OTREQTkwMDIzNTM2NCAvKiBpb3MgKi8sCiAJCQkJMUEyRTZFNzgwQ0M1NTZENTAwNEEyMDYyIC8q
IFNRTGl0ZUF1dGhvcml6ZXIuY3BwICovLAogCQkJCTFBMjI0NjQzMENDOThEREIwMEMwNTI0MCAv
KiBTUUxpdGVEYXRhYmFzZS5jcHAgKi8sCiAJCQkJMUEyMjQ2NDQwQ0M5OEREQjAwQzA1MjQwIC8q
IFNRTGl0ZURhdGFiYXNlLmggKi8sCkBAIC0xNTA2Miw2ICsxNTE5OCwyNiBAQAogCQkJbmFtZSA9
IG1hdGhtbDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTQ0MUFGMEE3MEVC
QTdCQkYwMDQ0RUQ0QiAvKiBpb3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxk
cmVuID0gKAorCQkJCTBGOTdBNjU3MTU1REE4MUUwMEZBREQ0QyAvKiBEaXNwbGF5UmVmcmVzaE1v
bml0b3JJT1MubW0gKi8sCisJCQkJMzcyN0RGRDQxNDJBQUU0NTAwRDQ0OUNCIC8qIEZvbnRDYWNo
ZUlPUy5tbSAqLywKKwkJCQlDNTgzNjFBNzE3NDQ1MjNGMDAxNzM1MTEgLyogRm9udFNlcnZpY2Vz
SU9TLmggKi8sCisJCQkJQzU4MzYxQTgxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lP
Uy5tbSAqLywKKwkJCQkzMUFCNEZGRjEyMjg3OEEyMDAxQTdEQjAgLyogR3JhcGhpY3NDb250ZXh0
M0RJT1MuaCAqLywKKwkJCQlGRUQxM0QzRjBDRUE5Mzk0MDBEODk0NjYgLyogSWNvbklPUy5tbSAq
LywKKwkJCQkwNzM1N0M3NjE2RDJERjBEMDBFRDk5RTcgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRklPUy5oICovLAorCQkJCTA3MzU3Qzc3MTZEMkRGMEQwMEVEOTlFNyAvKiBJbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGSU9TLm1tICovLAorCQkJCTA3NDMwMEE0MEY0QjhCQ0YwMDgwNzZDRCAv
KiBNZWRpYVBsYXllclByaXZhdGVJT1MuaCAqLywKKwkJCQkwNzQzMDBBMzBGNEI4QkNGMDA4MDc2
Q0QgLyogTWVkaWFQbGF5ZXJQcml2YXRlSU9TLm1tICovLAorCQkJCTM3RTY1OTRGMTYzQjEwQzIw
MEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSAqLywKKwkJCQlDRUVDNjAzNDE4N0REOTYy
MDAzRTQzQkIgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaCAqLywKKwkJCQlDRENBODI5
NDE2NzkxMDBGMDA4NzU3MTQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MubW0gKi8sCisJ
CQkpOworCQkJcGF0aCA9IGlvczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJ
CTQ0MzI5MkMxMEVCQTZENzMwMEU2MjAxNiAvKiBpb3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTUwNzksNiArMTUyMzUsMTkgQEAKIAkJCW5hbWUgPSBF
eHBvcnRzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNDQ5N0Q1OEMwRUJB
ODU0RjAwQTEwNTUyIC8qIGlvcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNDQzRjA0MjYwRTc1QzhGQjAwN0U1NDA3IC8qIE5ldHdvcmtTdGF0ZU5vdGlm
aWVySU9TLmNwcCAqLywKKwkJCQk0NDJBRjdBNzEwMkNEREVBMDA4RkQ0RDMgLyogUXVpY2tMb29r
LmggKi8sCisJCQkJNDQyQUY3QTgxMDJDRERFQTAwOEZENEQzIC8qIFF1aWNrTG9vay5tbSAqLywK
KwkJCQk3RTQyOENFNDEzRTM0MDdGMDAzQjY2MUMgLyogUmVzb3VyY2VIYW5kbGVJT1MubW0gKi8s
CisJCQkJNDRBMjBEQjgwRjg0MTY2QzAwQjNFMUZFIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5o
ICovLAorCQkJCTQ0NEQ0RTIxMEY3MDhCMkUwMDMxNThFMCAvKiBXZWJDb3JlVVJMUmVzcG9uc2VJ
T1MubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IGlvczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CiAJCTQ5NDg0RkFFMTAyQ0YwMUUwMDE4N0REMyAvKiBjYW52YXMgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTU1NzcsNiArMTU3NDYsNyBA
QAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlCMkYzNEZFNzBFODJG
ODE3MDBGNjI3Q0QgLyogY2YgKi8sCisJCQkJNDQ5N0Q1OEMwRUJBODU0RjAwQTEwNTUyIC8qIGlv
cyAqLywKIAkJCQk2NTZCODRFNzBBRUExREFFMDBBMDk1QjQgLyogbWFjICovLAogCQkJCTkzNEY3
MTM3MEQ1QTZFRkYwMDAxOEQ2OSAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuY3BwICov
LAogCQkJCTkzNEY3MTM5MEQ1QTZGMTAwMDAxOEQ2OSAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZUJhc2UuaCAqLywKQEAgLTE1OTYyLDYgKzE2MTMyLDE3IEBACiAJCQl0YWJXaWR0aCA9IDQ7CiAJ
CQl1c2VzVGFicyA9IDA7CiAJCX07CisJCTdFNDc0RTE5MTI0OTREQTkwMDIzNTM2NCAvKiBpb3Mg
Ki8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTdFNDc0RTFE
MTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwICovLAorCQkJCTdF
NDc0RTFDMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCAqLywKKwkJ
CQk3RTQ3NEUxQjEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50
LmggKi8sCisJCQkpOworCQkJbmFtZSA9IGlvczsKKwkJCXBhdGggPSBzcWwvaW9zOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0VFNjg0NzMxMkQyNkU1NTAwRTc5NDE1IC8q
IGNmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE3NTY4
LDIwICsxNzc0OSw3MSBAQAogCQkJbmFtZSA9IHBhcnNlcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCUE1MTZFOEIyMTM2RTA0QzAwMDc2QzNDMCAvKiBpb3MgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUE1MTZFOEI0MTM2RTA0REIw
MDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUuaCAqLywKKwkJCQlBNTE2RThCNTEzNkUwNERC
MDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBp
b3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlBNTlFM0MxQjExNTgwRjM0
MDA3MjkyOEUgLyogaW9zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQkyOTAzNzE2NDE2QkExMUJDMDBGRUZERjAgLyogQ29udGVudEZpbHRlcklPUy5tbSAq
LywKIAkJCQkyNjU1NDE0QjE0ODlBQTJCMDAwREZDNUQgLyogQ3Vyc29ySU9TLmNwcCAqLywKKwkJ
CQkzMUVBRjk3QzEyMTQzNUE0MDBFN0MxQkYgLyogRGV2aWNlTW90aW9uQ2xpZW50SU9TLmggKi8s
CisJCQkJMzFFQUY5N0QxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElPUy5t
bSAqLywKKwkJCQkzMTQwMzc5OTEyNEJFQTdGMDBBRjQwRTQgLyogRGV2aWNlT3JpZW50YXRpb25D
bGllbnRJT1MuaCAqLywKKwkJCQkzMTQwMzc5QTEyNEJFQTdGMDBBRjQwRTQgLyogRGV2aWNlT3Jp
ZW50YXRpb25DbGllbnRJT1MubW0gKi8sCiAJCQkJMjZGNDBENDkxNDkwNEE2MzAwQ0E2N0M0IC8q
IEV2ZW50TG9vcElPUy5tbSAqLywKIAkJCQkyNkMxN0EzQzE0OTFEMkQ0MDBEMTJCQTIgLyogRmls
ZVN5c3RlbUlPUy5oICovLAogCQkJCTI2QzE3QTNEMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lz
dGVtSU9TLm1tICovLAogCQkJCTI2NTU0MTM3MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudENv
ZGVzSU9TLmggKi8sCiAJCQkJMjY1NTQxMzgxNDg5ODExQzAwMERGQzVEIC8qIEtleUV2ZW50SU9T
Lm1tICovLAorCQkJCTFGNjhENEFEMTRCQjlEQ0EwMDdCNUM2MiAvKiBNZW1vcnlQcmVzc3VyZUhh
bmRsZXJJT1MubW0gKi8sCisJCQkJRTQ1MzkwMTgwRUFGQ0FDQTAwMzY5NUM4IC8qIE1JTUVUeXBl
UmVnaXN0cnlJT1MubW0gKi8sCiAJCQkJRTQ1MzkwMTkwRUFGQ0FDQTAwMzY5NUM4IC8qIFBhc3Rl
Ym9hcmRJT1MubW0gKi8sCisJCQkJMjY2MDFFQkQxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3Jt
RXZlbnRGYWN0b3J5SU9TLmggKi8sCisJCQkJMjY2MDFFQkUxNEIzQjlBRDAwMTJDMEZFIC8qIFBs
YXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tICovLAogCQkJCUM1Mjc4QjBCMTdGMjEyRUEwMDNBMjk5
OCAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0gKi8sCisJCQkJRTQ1MzkwMzIwRUFGRDYzNzAw
MzY5NUM4IC8qIFBsYXRmb3JtU2NyZWVuSU9TLm1tICovLAorCQkJCUFBRTM3NTVEMTc0MjlCQ0Mw
MDYyMDBDMiAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1tICovLAorCQkJCTQ0QzM2
M0VFMEZBQTdCQjMwMDk3RjhDQyAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaCAqLywK
KwkJCQk0NEMzNjNFRjBGQUE3QkIzMDA5N0Y4Q0MgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tz
SU9TLm1tICovLAorCQkJCTBGMTc3NDdFMTM3OEI3NzEwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRv
cklPUy5oICovLAorCQkJCTBGMTc3NDdGMTM3OEI3NzIwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRv
cklPUy5tbSAqLywKKwkJCQk0NEM5OTE4NTBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhl
bWVJT1MuaCAqLywKKwkJCQk0NEM5OTE4MTBGM0QxRTBEMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhl
bWVJT1MubW0gKi8sCisJCQkJRTQ1MzkwMzQwRUFGRDYzNzAwMzY5NUM4IC8qIFNjcm9sbFZpZXdJ
T1MubW0gKi8sCisJCQkJQkVBODA3QzYwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3Qu
Y3BwICovLAorCQkJCUJFQTgwN0M3MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0Lmgg
Ki8sCiAJCQkJRTQ1MzkwMzUwRUFGRDYzNzAwMzY5NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1tICov
LAorCQkJCUU0NTM5MDM2MEVBRkQ2MzcwMDM2OTVDOCAvKiBTb3VuZElPUy5tbSAqLywKKwkJCQk0
NDc2NTMxQTEzMzE3MDk5MDAwNkI3ODkgLyogU1NMS2V5R2VuZXJhdG9ySU9TLmNwcCAqLywKKwkJ
CQlFNDUzOTBBRDBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9TLmNwcCAqLywKKwkJ
CQk0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MuaCAqLywKKwkJCQk0NEM5OTE5
RTBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MubW0gKi8sCisJCQkJRTRDM0IxRjkwRjBFNDE2
MTAwOTY5M0Y2IC8qIFRpbGVDYWNoZS5oICovLAorCQkJCUU0QzNCMUZCMEYwRTQxNzAwMDk2OTNG
NiAvKiBUaWxlQ2FjaGUubW0gKi8sCisJCQkJRTRCNjVBNTcxMzJGQThFNzAwNzBFN0JFIC8qIFRp
bGVHcmlkLmggKi8sCisJCQkJRTRCNjVBNTkxMzJGQUFGOTAwNzBFN0JFIC8qIFRpbGVHcmlkLm1t
ICovLAorCQkJCUU0MjRBMzlEMTMzMERGMDEwMENGNkRDOSAvKiBUaWxlR3JpZFRpbGUuaCAqLywK
KwkJCQlFNDI0QTM5RjEzMzBERjFFMDBDRjZEQzkgLyogVGlsZUdyaWRUaWxlLm1tICovLAorCQkJ
CUU0QjY1QTVCMTMyRkFDQjAwMDcwRTdCRSAvKiBUaWxlTGF5ZXIuaCAqLywKKwkJCQlFNEI2NUE1
RDEzMkZBREI2MDA3MEU3QkUgLyogVGlsZUxheWVyLm1tICovLAorCQkJCUU0RTM5QUZBMTMzMEVG
QTgwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29sLmggKi8sCisJCQkJRTRFMzlBRkMxMzMwRUZDNTAw
M0FCMjc0IC8qIFRpbGVMYXllclBvb2wubW0gKi8sCisJCQkJMzE0MDM3OTcxMjRCRUE3RjAwQUY0
MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLmggKi8sCisJCQkJMzE0MDM3OTgxMjRCRUE3RjAw
QUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tICovLAorCQkJCTQ0QzNDRkU3MTU1NkJF
NUQwMDAxMzYwOSAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLmggKi8sCisJCQkJRTQ1Mzkw
MzgwRUFGRDYzNzAwMzY5NUM4IC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MubW0gKi8sCisJ
CQkJRkUwRDg0RTgxMDQ4NDM0ODAwMUExNzlFIC8qIFdlYkV2ZW50LmggKi8sCisJCQkJRkUwRDg0
RUExMDQ4NDM2RTAwMUExNzlFIC8qIFdlYkV2ZW50Lm1tICovLAogCQkJCUE1MDJDNUREMTMwNDlC
MzUwMEZDN0Q1MyAvKiBXZWJTYWZlR0NBY3Rpdml0eUNhbGxiYWNrSU9TLmggKi8sCiAJCQkJQzJD
NENCMUQxNjFBMTMxMjAwRDIxNERBIC8qIFdlYlNhZmVJbmNyZW1lbnRhbFN3ZWVwZXJJT1MuaCAq
LywKKwkJCQlFNDUzOTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovLAogCQkJ
KTsKIAkJCW5hbWUgPSBpb3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTk0MDYs
NiArMTk2MzgsNyBAQAogCQkJCTkzMzJBQjNCMTY1MTVENzcwMEQ4MjdFQyAvKiBjcHUgKi8sCiAJ
CQkJQTc1RThCN0YwRTFERTJCMDAwN0YyNDgxIC8qIGZpbHRlcnMgKi8sCiAJCQkJNDk4NzcwQzEx
MjQyQzUwRDAwMjIyNkJBIC8qIGdwdSAqLywKKwkJCQk0NDFBRjBBNzBFQkE3QkJGMDA0NEVENEIg
LyogaW9zICovLAogCQkJCUIyNzUzNTQ5MEIwNTM4MTQwMDJDRTY0RiAvKiBtYWMgKi8sCiAJCQkJ
RkJDMjIwREQxMjM3RkJFQjAwQkNGNzg4IC8qIG9wZW5nbCAqLywKIAkJCQlGNEVBRjRBQjEwQzc0
MjY4MDA5MTAwRDMgLyogb3BlbnR5cGUgKi8sCkBAIC0xOTU4MCw2ICsxOTgxMyw3IEBACiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUIyQjI2NDU5MEQwMEE3N0UwMDBB
Q0MxRCAvKiBjZiAqLywKKwkJCQlBNTE2RThCMjEzNkUwNEMwMDA3NkMzQzAgLyogaW9zICovLAog
CQkJCUIyQzNEOUY5MEQwMDZDMUQwMEVGNkYyNiAvKiBtYWMgKi8sCiAJCQkJMzdDNjFGMDAxMjA5
NUM4NzAwN0EzQzY3IC8qIEF0b21pY1N0cmluZ0tleWVkTVJVQ2FjaGUuaCAqLywKIAkJCQlCMkMz
RDlGMjBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaUNvbnRleHQuY3BwICovLApAQCAtMjA0ODQsNiAr
MjA3MTgsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQ0QwRUVFMEIxNDc0M0UzNTAwM0VBRkEy
IC8qIEF1ZGlvRGVzdGluYXRpb25JT1MuY3BwICovLAogCQkJCUNEMEVFRTBBMTQ3NDNFMzQwMDNF
QUZBMiAvKiBBdWRpb0Rlc3RpbmF0aW9uSU9TLmggKi8sCisJCQkJQ0Q1NTk2OEYxNDc1QjY3ODAw
MUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5jcHAgKi8sCisJCQkJQ0Q1NTk2OTAxNDc1QjY3
ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5oICovLAogCQkJCUNEQTc5ODI1MTcwQTI3
OTAwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb25JT1MubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IGlv
czsKQEAgLTIyMjgzLDYgKzIyNTE5LDcgQEAKIAkJCQlDRURBMTJENzE1MkNBMUNCMDBEOUUwOEQg
LyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTA4QzNEMjE1
MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0U3QjJEQjMxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUwRDg0RTkxMDQ4NDM0ODAwMUExNzlFIC8q
IFdlYkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjAzRTEyQjAyNjc2MDBDMUEzNTkg
LyogQW5hbHlzZXJOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREUzQTg1ODE3RjYwMjA0MDBD
NUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
OTA3MDdFNzEyMTlDMDQzMDBEOTBFNTEgLyogQU5HTEVXZWJLaXRCcmlkZ2UuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjI0MjQsNiArMjI2NjEsNyBAQAogCQkJCUJDQjE2QzFDMDk3OUMzQkQwMDQ2Nzc0
MSAvKiBDYWNoZWRJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5RkJENUYxNUQyRjQ2NDAw
OTY0MEE2IC8qIENhY2hlZEltYWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAxODQ2
OTBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQy
NEEzOUUxMzMwREYwMTAwQ0Y2REM5IC8qIFRpbGVHcmlkVGlsZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRDBFREE3NzUxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMUI1MzM0OTE3MTdERUUzMDBGMjA1RjkgLyogQ2FjaGVkUmF3UmVzb3Vy
Y2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjE2QzIwMDk3OUMzQkQwMDQ2Nzc0MSAv
KiBDYWNoZWRSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjYxNyw2ICsyMjg1NSw3IEBA
CiAJCQkJMDc4RTA5MTQxN0QxNEQxQzAwNDIwQUExIC8qIE1lZGlhQ29uc3RyYWludHNJbXBsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNFOTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlCRDlGQTEzMUZEMkVEMDAzQzU2RjAgLyogQ1NT
VmFsdWVQb29sLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEI2NUE1ODEzMkZBOEU3MDA3MEU3QkUg
LyogVGlsZUdyaWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTJGMDgyNDVFNTkwMDFFOUFC
QyAvKiBDdXJzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjI3MkEyMEU4MkU4N0MwMEU3Rjk3
NSAvKiBDdXJzb3JEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjgxNjBENjE4NzY2QTEzMDAy
MUU3OUQgLyogVXNlckFjdGl2aXR5LmggaW4gSGVhZGVycyAqLywKQEAgLTIzMDU3LDYgKzIzMjk2
LDcgQEAKIAkJCQk4NTUyNkNEMjBBQjBCN0Q5MDAwMzAyRUEgLyogRE9NVHJlZVdhbGtlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODUwQjQxQzMwQUQ5RTdFNzAwQTZFRDRGIC8qIERPTVRyZWVXYWxr
ZXJJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVDN0Y0OTEwQUFGNzlEQzAwNDAxNERE
IC8qIERPTVVJRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ0Qzk5MTlGMEYzRDIxMEUwMDU4
NjY3MCAvKiBUaGVtZUlPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU5ODlERDAwQUNDOEJCRDAw
QTBCQzUxIC8qIERPTVVJRXZlbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkUzN0RG
REIxMkRCQUZCODAwQTZCMjMzIC8qIERPTVVSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTVDNzcw
QTYxMDBENDFDRDAwNUJBMjY3IC8qIERPTVZhbGlkaXR5U3RhdGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMjMyMjUsNiArMjM0NjUsNyBAQAogCQkJCTg0NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBG
aWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4QzkyNTFBMEZDQzdDNEEwMDQ4MERFQyAvKiBG
aWx0ZXJFZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMzEzRjY2MTQ0M0IzNUYwMDZFMkE5
MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDRDM0NGRTgx
NTU2QkU1RDAwMDEzNjA5IC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1Qzk1NzUgLyog
RmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLApAQCAtMjMzMTIsNiArMjM1NTMsNyBAQAogCQkJ
CTA4NzNCODZCMTM2MDY0RUEwMEE1MjJDMiAvKiBHbHlwaFBhZ2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyQzNEQTZFMEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaFBhZ2VUcmVlTm9kZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM1M0M1RjUwREE1NkI5MjAwMjFFQjVEIC8qIEdyYWRpZW50LmggaW4g
SGVhZGVycyAqLywKKwkJCQk3RTQ3NEUxRTEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJh
c2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk2NDBEMDBCRjIyMDA3
MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkEwMTVB
OTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OUM3QjlGQzEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjM0MjgsNiArMjM2NzAsNyBAQAogCQkJCUE4MTM2OURDMDk3Mzc0RjYwMEQ3
NDQ2MyAvKiBIVE1MT3B0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxMzY5REEw
OTczNzRGNjAwRDc0NDYzIC8qIEhUTUxPcHRpb25zQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNEFEMDEwMDkxMjdFNjQyQTAwMTUwMzVGIC8qIEhUTUxPdXRwdXRFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKKwkJCQk0NEMzNjNGMDBGQUE3QkIzMDA5N0Y4Q0MgLyogUnVudGltZUFwcGxp
Y2F0aW9uQ2hlY2tzSU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3MTlGODE4MTEwNkUwMDAx
NkRDNTEgLyogSW5kZXhlZERCLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBN0NCNTBBMTkyQjlD
MDBBOEVGNUYgLyogSFRNTFBhcmFncmFwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
NzFENDU4MEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MUGFyYW1FbGVtZW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTIzNTE1LDYgKzIzNzU4LDcgQEAKIAkJCQlCQzdGNDRBODBCOUUzMjRFMDBBOUQwODEg
LyogSW1hZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ1QTU5MzExNTI1MjVEMDAw
MzZFRTUxIC8qIEltYWdlT3JpZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5MjkxRTRC
MTM0MTcyQzgwMEU3NTNERSAvKiBJbWFnZVJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCUU0QzNCMUZBMEYwRTQxNjEwMDk2OTNGNiAvKiBUaWxlQ2FjaGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyNzUzNTcxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNEIzNDgwOTQwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0cuaCBp
biBIZWFkZXJzICovLAogCQkJCTMxNkZFMTE4MEU2RTFEQTcwMEJGNjA4OCAvKiBJbXBsaWNpdEFu
aW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzU4Niw2ICsyMzgzMCw3IEBACiAJCQkJN0FG
MTFBNUExMkU3Mjc0OTAwNjFGMjNDIC8qIEluc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODJBQjE3NzQxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclN0eWxlU2hl
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgyODg5QjREMTNDNjIzOTIwMDlBNjE1NiAvKiBJbnNw
ZWN0b3JTdHlsZVRleHRFZGl0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxRUFGOTdFMTIxNDM1
QTQwMEU3QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGllbnRJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTc1NDEzM0E4MTAyRTAwRTgwMDA3NUQwMCAvKiBJbnNwZWN0b3JUaW1lbGluZUFnZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1NzhEQTIwRjE1MjBFQkEzMDA2MTQxQzEgLyogSW5zcGVjdG9yV2Vi
VHlwZUJ1aWxkZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzgxMEMxQzEzNjVBNDk2MDBFRDZF
MzMgLyogSW5zcGVjdG9yV29ya2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjM2NDUsNiAr
MjM4OTAsNyBAQAogCQkJCTk3NUNBMkEyMTMwMzY3OUQwMEU5OUFEOSAvKiBKU0NyeXB0by5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM0NkMxRkIwQzBEREM4RjAwMjBDRkMzIC8qIEpTQ1NTQ2hhcnNl
dFJ1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQwOUVCREMzMTZCN0YzQTYwMENCQTNGQyAvKiBK
U0NTU0ZvbnRGYWNlTG9hZEV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3RTQ3NEUxRjEyNDk0
REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFja2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzQ2QzFGRDBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NGb250RmFjZVJ1bGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDNDZDMUZGMEMwRERDOEYwMDIwQ0ZDMyAvKiBKU0NTU0ltcG9ydFJ1bGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDZDMjAxMEMwRERDOEYwMDIwQ0ZDMyAvKiBKU0NTU01l
ZGlhUnVsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzY3MSw2ICsyMzkxNyw3IEBACiAJCQkJMzFG
QjFBNjYxMjBBNUQzRjAwREMwMkEwIC8qIEpTRGV2aWNlTW90aW9uRXZlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTU5QTg2MDA4MTE5REFGQTEwMERFRjFFRiAvKiBKU0RldmljZU9yaWVudGF0aW9u
RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTQzODlDMTQwQjFCQTgwMDVFNDM3RSAvKiBK
U0RpY3Rpb25hcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ0Qzk5MTg2MEYzRDFFQkUwMDU4NjY3
MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRBRTdDMUExN0Qy
MzIzNTAwMDlGQjMxIC8qIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTQ2RkU3NTE4NDQyMzcwMDAxQTkzN0MgLyogSlNPRVNUZXh0dXJlRmxvYXRMaW5lYXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTY1OUREQzgzMDlFMTk4QkEwMDFCRjNDNiAvKiBKU0RvY3Vt
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzNjkxLDYgKzIzOTM4LDcgQEAKIAkJCQlFMTlBQzNG
MzE4MjREQzc5MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMzg0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlGQjkxMzkyQTE2QUU0RkMwMDAxRkU2ODIgLyogSlNET01QYXRoLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOUQyNDdGRjBENzU3RTY5MDBGREY5NTkgLyogSlNET01QbHVnaW4uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxNDAzNzlCMTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9u
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlEMjQ4MDEwRDc1N0U2OTAwRkRGOTU5IC8q
IEpTRE9NUGx1Z2luQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOTcyNzE2MTgyMDU0OUUw
MDU5MkQ1MSAvKiBDcnlwdG9LZXlUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVBODZCNjBD
MzM2N0U4MDBFRUE2NDkgLyogSlNET01TZWxlY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjM3
MTksNiArMjM5NjcsNyBAQAogCQkJCTMzMTRBQ0VDMTA4OTIwODYwMDBGMEU1NiAvKiBKU0V4Y2Vw
dGlvbkJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFQkYwRTc3MTJBOTg2ODgwMERCMTcwQSAv
KiBKU0VYVERyYXdCdWZmZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NzI4Njk4NDE0RkQ5QURB
MDBGNDg0REMgLyogSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCBpbiBIZWFkZXJzICov
LAorCQkJCUU0RTM5QUZCMTMzMEVGQTgwMDNBQjI3NCAvKiBUaWxlTGF5ZXJQb29sLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzAwRjAxNTBFMEExODk1MDBGRDA0RTMgLyogSlNGaWxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyRTNCQzBDQjExN0QzRTA4MDBCOTQwOUEgLyogSlNGaWxlRXJyb3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTg5ODc4NUYxMTIyRTFFODcwMDNBQUJEQSAvKiBKU0ZpbGVFeGNl
cHRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjM3MzMsNiArMjM5ODIsNyBAQAogCQkJCUZFODBE
QTY2MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb3Bvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwNzk2OURBQzE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENEYXRhQ2hhbm5lbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODQ4MkI3NTIxMTk4Q0I2QjAwQkZCMDA1IC8qIEpTSGFzaENoYW5nZUV2ZW50
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCRUE4MDdDOTBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0
aW9uUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5NEQxNEYwQzI3NUM2ODAwNkJDNjE3IC8q
IEpTSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5N0U0MTMxMDkxNTRGQTAwMTBEMzYx
IC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEEyREYwMEEx
Qjg1MkEwMEM4MDdGOCAvKiBKU0hUTUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAg
LTIzNzkxLDYgKzI0MDQxLDcgQEAKIAkJCQkxQTg1QjFFQjBBMUIyNDA1MDBEOEM4N0MgLyogSlNI
VE1MT0xpc3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFN0U5QjBBMUE4M0UzMDA3
RkI4QzUgLyogSlNIVE1MT3B0R3JvdXBFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBF
N0U5OTBBMUE4M0UzMDA3RkI4QzUgLyogSlNIVE1MT3B0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQzU4MzYxQTkxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDQ4QTI5QkYwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlv
bnNDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0QUQwMTczRDEyN0U4Mjg2MDAxNTAz
NUYgLyogSlNIVE1MT3V0cHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMkFCQTcw
QTFDRTkwNTAwQjQyQjI1IC8qIEpTSFRNTFBhcmFncmFwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMjM4NDEsNiArMjQwOTIsNyBAQAogCQkJCTkzNUY0NTQzMEY3QzNCNUYwMEQ3QzFGQiAv
KiBKU0xhenlFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0UxQzQzQzBEOTgz
MEQzMDAzQjAyRjIgLyogSlNMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQyM0ExMjYx
M0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkyNjYwMUVCRjE0QjNCOUFEMDAxMkMwRkUgLyogUGxhdGZvcm1FdmVudEZh
Y3RvcnlJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYxNDE5MENENjgyNjkwMEZBREE3NSAv
KiBKU01lZGlhRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDM0MzOUI3MEMwRDNEOEQwMDVG
NEQ3QSAvKiBKU01lZGlhTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDNBOTRBNDcxMjJEQzQw
RjAwQTM3QkJDIC8qIEpTTWVkaWFRdWVyeUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjQxMTYs
NiArMjQzNjgsNyBAQAogCQkJCTZFM0ZBRDM5MTQ3MzNGNDAwMEU0MjMwNiAvKiBKU1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVTM1RDLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUU4QTc3MzEwRjgwM0Yz
MDA1QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzJDQkY0RTE0MEYxQUJEMDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMDc0MzAwQTYwRjRCOEJDRjAwODA3NkNEIC8qIE1lZGlhUGxheWVyUHJp
dmF0ZUlPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkUzRkFEMzkxNDczM0Y0MDExRTQyMzA3IC8q
IEpTV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkUzRkFEMzkx
NDczM0Y0MDIyRTQyMzA3IC8qIEpTV2ViR0xEZWJ1Z1NoYWRlcnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTZFM0ZBRDM5MTQ3MzNGNDAwMEU0MjMwNyAvKiBKU1dlYkdMRGVwdGhUZXh0dXJlLmggaW4g
SGVhZGVycyAqLywKQEAgLTI0MTI4LDYgKzI0MzgxLDcgQEAKIAkJCQk1MUM5NjExQjE4M0QyQjgw
MDBEMjAwMkUgLyogSURCRGF0YWJhc2VNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA3
RDMzNTYxNTJCNjMwRTAwMUI2MzkzIC8qIEpTV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUE1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMVGV4
dHVyZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzE0MDM3OUQxMjRCRUE3RjAwQUY0MEU0IC8qIERl
dmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzhFMDkxNTE3
RDE0RDFDMDA0MjBBQTEgLyogTWVkaWFTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTBDNDUz
NDI4MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3N0VGNjJGNDEyRjlEQjc0MDBDNzdCRDIgLyogSlNXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTLmggaW4gSGVhZGVycyAqLywKQEAgLTI0Mzg4LDYgKzI0NjQyLDcgQEAKIAkJCQk5
Mzc3QUJBMDE1REVGRUVGMDAzMUZEMDQgLyogUGFnaW5hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDg4NTA2N0YxMURBMDQ1QjAwMTgyQjk4IC8qIFBhaW50SW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDg4NTA2ODAxMURBMDQ1QjAwMTgyQjk4IC8qIFBhaW50UGhhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTA3RUQzNUEzMTZENkRDRTIwMDIyNDhGMyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlQVZGSU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNGQjBBMTk4OUNBMDA3RkI4QzUg
LyogUGFpci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwQTMxMkIwMjZGNzAwQzFBMzU5IC8q
IFBhbm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMUExMkIwMjY3NjAwQzFBMzU5IC8q
IFBhbm5lck5vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ2MDMsNiArMjQ4NTgsNyBAQAogCQkJ
CTJCMzY1Qzg0MTUyNTExOUUwMDkxRDI3QiAvKiBSZW5kZXJTVkdFbGxpcHNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0M0MwOTJCQzEyRDlFNEVFMDBBOTg5QzMgLyogUmVuZGVyU1ZHRm9yZWlnbk9i
amVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4QzUxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJl
bmRlclNWR0dyYWRpZW50U3RvcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzFBQjUwMDAxMjI4NzhB
MjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dDNESU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
MzY3MDhDNzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0MzY3MDhDOTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1h
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NTRCMDE1MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5k
ZXJTVkdJbmxpbmUuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ2MTEsNiArMjQ4NjcsNyBAQAogCQkJ
CUNEM0E0OTYyMTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VCdWZmZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQzNjcwOENCMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxp
bmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMTc3NDgwMTM3OEI3NzIwMDlEQTc2QSAv
KiBTY3JvbGxBbmltYXRvcklPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQURERjFBRDcxMjU3Q0Q5
QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUExMEJCNTg1
MTQ4NEUzQTcwMEIyRTg3QSAvKiBSZW5kZXJTVkdSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0
MzY3MDhDRDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2UuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjQ3OTMsNiArMjUwNTAsNyBAQAogCQkJCUUxQjc4MzlDMTYzNzQwQTcwMDA3QjY5
MiAvKiBTaGFyZWRXb3JrZXJTdHJhdGVneS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFEMTY4RUUx
MDIyNkU4OTAwOUJDODI3IC8qIFNoYXJlZFdvcmtlclRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJDM0RBNjUwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlFNEI2NUE1QzEzMkZBQ0IwMDA3MEU3QkUgLyogVGlsZUxheWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDNUExRUE3RDE1MkJDRjA4MDA0RDAwQjYgLyogU2ltcGxpZnlNYXJrdXBD
b21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTc0MUFBRDE2NjM2NjA5MDA4QTVCN0UgLyog
U2ltdWxhdGVkQ2xpY2tPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDAwRDdBNTE0QTNG
NjE5MDA3MzQwMTEgLyogU2luY1Jlc2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDg2OCw2
ICsyNTEyNiw3IEBACiAJCQkJNTFCRTM3RTAwREFFRTAwRTAwMTA4NUZDIC8qIFN0b3JhZ2VBcmVh
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTE2MEVFQjEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFn
ZUFyZWFJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTEwMkVDRjBGRDlFRjhDMDBGQUZGMDQg
LyogU3RvcmFnZUFyZWFTeW5jLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRDU1OTY5MjE0NzVCNjc4
MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUUw
QkFCQjBEQTU1NDcxMDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCNTY1NzZFODE3REE5NEUyMDBBNTZCREMgLyogRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUM1RUJERDg0MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdl
RXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MDI0LDYgKzI1MjgzLDcgQEAK
IAkJCQlCMjIyNzlGQTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVPZmZzZXRFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyNzlGRDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVQb2ludExp
Z2h0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMDAwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ0
QTIwREI5MEY4NDE2NkMwMEIzRTFGRSAvKiBXZWJDb3JlVVJMUmVzcG9uc2VJT1MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3QTAzMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVNwb3RMaWdodEVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTE5MTdEMTREMUMwMDQyMEFBMSAvKiBN
ZWRpYVN0cmVhbVRyYWNrRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTA2MEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdGRVRpbGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI1MjQ3
LDYgKzI1NTA3LDcgQEAKIAkJCQk5N0JDODRBNTEyMzcwREM4MDAwQzYxNjEgLyogVGV4dFZpZXdT
b3VyY2VQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTY1OEZGMEVBOTI0OEEwMDdFNDUz
MyAvKiBUaGVtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNjU5RTYwRUE5MkZCMjAwN0U0NTMz
IC8qIFRoZW1lTWFjLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NDJBRjdBOTEwMkNEREVBMDA4RkQ0
RDMgLyogUXVpY2tMb29rLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U2NTlBOTBFQTkyN0I5MDA3
RTQ1MzMgLyogVGhlbWVUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2RDZDOTUxMjJCOEEz
RDAwMUZEMUY3IC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBCOTA1NjFCMEYyNTc4QkYwMDk1RkY2QSAvKiBUaHJlYWRhYmxlTG9hZGVyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI1MjYxLDYgKzI1NTIyLDcgQEAKIAkJCQkxQUY4OUE0MjE1MThGREVBMDBFNTQ3
QjUgLyogVGlsZWRCYWNraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTg3NzBGMzEyNDJDNTM1
MDAyMjI2QkEgLyogVGlsaW5nRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEREMxMjUx
RjEyRDAwM0VGMjY5IC8qIFRpbWVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUE1MTZF
OEI3MTM2RTA0REIwMDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTc1NTNDRkU4MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29yZEZhY3Rvcnku
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDcxOUI3MTgxMTA2RTAwMDE2REM1MSAvKiBET01XaW5k
b3dJbmRleGVkRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMDVCMjREMDk4RjFCNkIw
MEMyODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTkyOCw2ICsyNjE5MCw3IEBA
CiAJCQkJRkQ4QzQ2RUIxNTQ2MDhFNzAwQTU5MTBDIC8qIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9k
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ0ODM5MENFRDY2QzMyNTVGNzJDNTkgLyogTWF0
aE1MU2VsZWN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzhFMDkwMzE3RDE0Q0VF
MDA0MjBBQTEgLyogTWVkaWFTdHJlYW1UcmFja0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTQ0NEQ0RTIzMEY3MDhCMkUwMDMxNThFMCAvKiBXZWJDb3JlVVJMUmVzcG9uc2VJT1MubW0gaW4g
U291cmNlcyAqLywKIAkJCQlDREE3OTgyNDE3MEEyNTgzMDBENDVDNTUgLyogQXVkaW9TZXNzaW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQTc5ODI3MTcwQTI3OTEwMEQ0NUM1NSAvKiBBdWRp
b1Nlc3Npb25JT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDU0REU0QjE3NDY5QzZEMDA1RTVC
MzYgLyogQXVkaW9TZXNzaW9uTWFjLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU5MzcsNiArMjYy
MDAsNyBAQAogCQkJCUJFODhFMEQ4MTcxNUQyQTIwMDY1OEQ5OCAvKiBBdWRpb1RyYWNrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJFODhFMERCMTcxNUQyQTIwMDY1OEQ5OCAvKiBBdWRpb1RyYWNr
TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjA4QTEyQjAyNkY3MDBDMUEzNTkgLyog
QXVkaW9VdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0U0MjhDRTUxM0UzNDA3RjAw
M0I2NjFDIC8qIFJlc291cmNlSGFuZGxlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0Rjcx
MzgwRDVBNkVGRjAwMDE4RDY5IC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTRDNzY0RDBDRTkyMzRFMDA3RUYzQ0QgLyogQXV0aGVudGljYXRp
b25NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk0NTgzMEQ0RDE2NzlCNEY4MDBBQ0Y4QzMgLyog
QXV0b3Njcm9sbENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjAwMiw2ICsyNjI2
Niw3IEBACiAJCQkJNDlBRTJEOTYxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjE4Mjc0OTMxMzRDQTRDMTAwQjk4QzJEIC8qIENhbGxi
YWNrRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkU0RTkxQUMxMEY3RkIzMTAwQTI3
NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMx
NDAzNzlDMTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9uTWFuYWdlci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTQ5NDg0RkMxMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjkxMzkyNzE2QUU0QzM0MDAxRkU2ODIgLyogQ2FudmFz
UGF0aE1ldGhvZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk0ODRGQzQxMDJDRjIzQzAwMTg3
REQzIC8qIENhbnZhc1BhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjA2OCwxMiArMjYz
MzMsMTQgQEAKIAkJCQk5NzYyN0I4RDE0RkIzQ0VFMDAyQ0RDQTEgLyogQ29udGV4dERlc3RydWN0
aW9uT2JzZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDY1QUQ0RjYwQjBDMkVEQTAwNUEy
QjFEIC8qIENvbnRleHRNZW51Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwN0Qw
N0IxNDE4MzQxNTg4MDBBQkREM0MgLyogSlNSVENTZXNzaW9uRGVzY3JpcHRpb25DdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJN0U0NzRFMjAxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURh
dGFiYXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjAyN0NCMzBCMUNDMDNEMDA4
ODRCMkQgLyogQ29udGV4dE1lbnVJdGVtTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNCNkEw
RUEwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkQzMTYwMjgxMkIwMjY3NjAwQzFBMzU5IC8qIENvbnZvbHZlck5vZGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTE0MjRDOTMxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlFMTQyNEM5MDE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NjMxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tp
ZVN0b3JhZ2VDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzN0U2NTk1MDE2M0IxMEMyMDBF
QjQ1NzQgLyogU2ltcGxlRm9udERhdGFJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMTNGMDFG
MTEyNzBFMTkwMDBERkJBNzEgLyogQ29va2llU3RvcmFnZU1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTk3NDZBRjIxMTRGNERERTYwMDNFN0E3MiAvKiBDb29yZGluYXRlcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzVFQjk1MDBFODIwNTZCMDBCMjU5NjUgLyogQ291bnRlckRpcmVjdGl2ZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjE3OSw2ICsyNjQ0Niw3IEBACiAJCQkJRkU0NTZGMTgx
Njc3RDc0RTAwNUVEREY5IC8qIERhdGFiYXNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRUIyNkQyODE2N0E4RjJBMDBGREQyNkIgLyogRGF0YWJhc2VTZXJ2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVERUY4NDExNjc5NzEwODAwMEU0NDRBIC8qIERhdGFiYXNlU3RyYXRlZ3ku
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTRFMzlBRkQxMzMwRUZDNjAwM0FCMjc0IC8qIFRpbGVM
YXllclBvb2wubW0gaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNkEyQTE1MDVGMDgxMDAxQjc0QUMg
LyogRGF0YWJhc2VTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTJEMTUwNUYwODEw
MDFCNzRBQyAvKiBEYXRhYmFzZVRhc2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBMkYx
NTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MjYzMTQsNiArMjY1ODIsNyBAQAogCQkJCUY1QzA0MUU0MEZGQ0E5NkQwMDgzOUQ0QSAvKiBET01I
VE1MRGF0YUxpc3RFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE1N0E4RTgxODE4NEM2
NzAwOUY4MjFEIC8qIEpTQ3J5cHRvS2V5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3
MDU4NTIzMTdGREMxNDAwMDVGMkJDQiAvKiBNZWRpYVRyYWNrQ29uc3RyYWludHMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkVEMTNENDAwQ0VBOTM5NDAwRDg5NDY2IC8qIEljb25JT1MubW0gaW4g
U291cmNlcyAqLywKIAkJCQlFMTI1RjgzMTE4MjJGMTFCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3Jp
dGhtSE1BQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEMzU5RDc5MjEyOUNBM0MwMDAwNkU1RDIg
LyogRE9NSFRNTERldGFpbHNFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVCQTREMEMw
QUE2ODg2ODAwODgwNTJEIC8qIERPTUhUTUxEaXJlY3RvcnlFbGVtZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCkBAIC0yNjM3NSw2ICsyNjY0NCw3IEBACiAJCQkJODVCQTREMTgwQUE2ODg2ODAwODgwNTJE
IC8qIERPTUhUTUxVTGlzdEVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlBODE4NUYzRTA5
NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTNDODQxRkYwOUNFODU4MzAwREZGNUU1IC8qIERPTUltcGxlbWVudGF0aW9uRnJvbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMjY2MDFFQzAxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3Jt
RXZlbnRGYWN0b3J5SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxQTM3QkEwOTdDNzE1RjAw
MTlGM0Q4IC8qIERPTUludGVybmFsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVGRjMxNUIwQUFG
QkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4
NTA2NTZGRjBBQUI0NzYzMDAyRDE1QzAgLyogRE9NTWVkaWFMaXN0Lm1tIGluIFNvdXJjZXMgKi8s
CkBAIC0yNjQ1Nyw2ICsyNjcyNyw3IEBACiAJCQkJNDk4NzcwREIxMjQyQzUzNTAwMjIyNkJBIC8q
IERyYXdpbmdCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDOEI1QTYxODA0NzRGNzAw
MTZFNjg1IC8qIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk0OTg3NzE1MzEyNDNGOUZBMDAyMjI2QkEgLyogRHJhd2luZ0J1ZmZlck1hYy5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTMxRUFGOTdGMTIxNDM1QTQwMEU3QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGll
bnRJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkwNzhFMDkxMjE3RDE0Q0VFMDA0MjBBQTEgLyog
VXNlck1lZGlhQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDZFRDJDNzEzNkI4
RTY2MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZENTM3MzU2MTM3QjY1M0IwMDAwOERDRSAvKiBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yNjY1OCw2ICsyNjkyOSw3IEBACiAJCQkJMDc5NjlEQkQxN0Qx
NDE1MTAwN0ZGODQyIC8qIEpTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ2FsbGJhY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTg3MURFMjkwQTE1MkFDODAwQjEyQTY4IC8qIEhUTUxCb2R5RWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOENGRjdBODBBMTU2OTc4MDAwQTQyMzQgLyogSFRN
TEJSRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxRjY4RDRBRTE0QkI5RENBMDA3QjVD
NjIgLyogTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgx
MzY5RDMwOTczNzRGNjAwRDc0NDYzIC8qIEhUTUxCdXR0b25FbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzRjE5QUZEMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MQ2FudmFzRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBOERGM0ZEMTA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTENv
bGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjY2OSw4ICsyNjk0MSwxMCBAQAogCQkJ
CUE4RUE3Q0IxMEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEVBNzlGNTBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERMaXN0RWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5MTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERv
Y3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ0Qzk5MTgyMEYzRDFFMEQwMDU4NjY3MCAv
KiBTY3JvbGxiYXJUaGVtZUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3N0IzODY2MTIyODgz
RTkwMEI4MUZGOCAvKiBIVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTMzMDlERTcwOTlFNjQ5MjAwNTZFNTgxIC8qIGh0bWxlZGl0aW5nLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUE1MTZFOEI4MTM2RTA0REIwMDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUubW0g
aW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5MjA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTEVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE1N0E4RjAxODE4NTQyNTAwOUY4MjFEIC8qIEpT
Q3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTdDODEyMjBG
MkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjY5MDYsNiArMjcxODAsNyBAQAogCQkJCTcwRjU0NkU4QjhCNUQ3REM1NEVFMTQ0RSAvKiBK
U0JlZm9yZVVubG9hZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZERjA5REM4MTM5OUI2
MjIwMDY4OEU1QiAvKiBKU0JpcXVhZEZpbHRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RkQ4QUE2M0MxNjk1MTQ4RTAwRDJFQTY4IC8qIEpTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkzMTQwMzc5RTEyNEJFQTdGMDBBRjQwRTQgLyogRGV2aWNlT3Jp
ZW50YXRpb25DbGllbnRJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRTJEOTlDRDEwRTJCQkRB
MDA0OTYzMzcgLyogSlNCbG9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5MzFERTVCMTRDNDRD
NDQwMDBEQzlEMiAvKiBKU0Jsb2JDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0OUUy
ODcxMDdENERCNDAwQjU3OTNGIC8qIEpTQ2FsbGJhY2tEYXRhLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjY5MTQsNiArMjcxODksNyBAQAogCQkJCTY1REYzMjNCMDlEMURFNjUwMDBCRTMyNSAvKiBK
U0NhbnZhc1BhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFRUQxNDIxMDUxOTY5NDAw
MDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0OUVFRDE0NDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RDQTgyOTYxNjc5MTAwRjAwODc1NzE0IC8qIFRleHRU
cmFja1JlcHJlc2VudGF0aW9uSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFRUQxNEUxMDUx
OTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5RUVEMTUwMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGOUI3QTAwQkE2MDMy
NjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY5NDgs
NiArMjcyMjQsNyBAQAogCQkJCUJDNDZDMUVFMEMwRERCREYwMDIwQ0ZDMyAvKiBKU0NTU1J1bGVD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThEMDVGQTcwQTIzQjMwMTAwNUU3MjAzIC8q
IEpTQ1NTUnVsZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwMzYzRTUxODFBMUNEQzAw
QzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ1
MzkwQUUwRUFGRjRCNTAwMzY5NUM4IC8qIFN5c3RlbU1lbW9yeUlPUy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5MzkyMjYyRjEwMzIxMDg0MDA2RTdENUQgLyogSlNDU1NSdWxlTGlzdEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDIwMTFCNjBBMDAzMTMzMDA4MzAzRjkgLyogSlNDU1NT
dHlsZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZGQjY5OENGMTgzNDAyQkIw
MDE1OEEzMSAvKiBMaW5lSW5mby5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2OTc1LDYgKzI3MjUy
LDcgQEAKIAkJCQk1OUE4NjAwNjExOURBRjdGMDBERUYxRUYgLyogSlNEZXZpY2VPcmllbnRhdGlv
bkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU5MEUxQjRCMTFFNEVGNzAwMDY5Rjc4NCAv
KiBKU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNFNDM4QTIxNDBDMERDMDAwNUU0MzdFIC8qIEpTRGljdGlvbmFyeS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0NEMzNjNGMTBGQUE3QkIzMDA5N0Y4Q0MgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hl
Y2tzSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU5RERDODIwOUUxOThCQTAwMUJGM0M2IC8q
IEpTRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0JBOEQxMDQyRjVCMTAwMDlE
NDQ3IC8qIEpTRG9jdW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE0OTRFREUw
QTEyM0Y0QzAwRkRBRkMxIC8qIEpTRG9jdW1lbnRGcmFnbWVudC5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTI2OTg2LDYgKzI3MjY0LDcgQEAKIAkJCQkyRTA4ODhENDExNDg4NDhBMDBBRjQyNjUgLyog
SlNET01Gb3JtRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRTA4ODhFNjExNDg4NEUyMDBB
RjQyNjUgLyogSlNET01Gb3JtRGF0YUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUMz
NkNCRDBFQjA4MDYyMDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMDdFRDM1QTIxNkQ2RENDOTAwMjI0OEYzIC8qIEluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkZJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk2NURGMzFGNzA5RDFDQzYwMDAwQkUzMjUg
LyogSlNET01JbXBsZW1lbnRhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOUQyNDgwNjBE
NzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
OUQyNDgwODBENzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1lVHlwZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMjcwMjgsNiArMjczMDcsNyBAQAogCQkJCUJDNjA5MDIwMEU5MUI4RUMwMDBD
NjhCNSAvKiBKU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzMTRB
Q0VCMTA4OTIwODYwMDBGMEU1NiAvKiBKU0V4Y2VwdGlvbkJhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNkVCRjBFNzYxMkE5ODY4ODAwREIxNzBBIC8qIEpTRVhURHJhd0J1ZmZlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRTQ1MzkwNDkwRUFGRDYzNzAwMzY5NUM4IC8qIFdlYkNvcmVTeXN0
ZW1JbnRlcmZhY2VJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk3NzI4Njk4MzE0RkQ5QURBMDBG
NDg0REMgLyogSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkMwMEYwMTQwRTBBMTg5NTAwRkQwNEUzIC8qIEpTRmlsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyRTNCQzBDQTExN0QzRTA4MDBCOTQwOUEgLyogSlNGaWxlRXJyb3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yNzE3Niw2ICsyNzQ1Niw3IEBACiAJCQkJQ0RBOThFMDQxNjAzOUUxQTAw
RkVBM0IxIC8qIEpTTWVkaWFLZXlzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3OTY5REMzMTdE
MTQxNTEwMDdGRjg0MiAvKiBKU1JUQ1N0YXRzUmVzcG9uc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQ0RBOThFMDYxNjAzOUUxRjAwRkVBM0IxIC8qIEpTTWVkaWFLZXlTZXNzaW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTA3NDMwMEE1MEY0QjhCQ0YwMDgwNzZDRCAvKiBNZWRpYVBsYXllclBy
aXZhdGVJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzNDMzlCNjBDMEQzRDhEMDA1RjREN0Eg
LyogSlNNZWRpYUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDNBOTRBNDYxMjJEQzQwRjAw
QTM3QkJDIC8qIEpTTWVkaWFRdWVyeUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q2NDFF
QkYxODE5QjM2MDAwRUU0QzQxIC8qIE1lZGlhVGltZU1hYy5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI3MjY0LDYgKzI3NTQ1LDcgQEAKIAkJCQk1MURDRTgwMjBDQUM5RjFDMDA0ODgzNTggLyogSlNT
UUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRUFDNTY3
MTgxNUVEM0UwMDRGMUJBNCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUI1OURENkE2MTE5MDJBNjIwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVudENh
bGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUFBMTJERjQ5MTc0M0RGODMwMDREQUZERiAv
KiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU5
REQ2QUExMTkwMkE3MTAwN0U5Njg0IC8qIEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MTRDNzYzODBDRTkyMjVFMDA3RUYzQ0QgLyogSlNTUUxUcmFu
c2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTlERDY5RTExOTAyQTQyMDA3RTk2ODQg
LyogSlNTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjczMzEs
NiArMjc2MTMsNyBAQAogCQkJCUIyRkEzRDc2MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZFRGlz
dGFudExpZ2h0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzU4RTg3QzEzNjBBMkVF
MDBFNDc0OEMgLyogSlNTVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUIyRkEzRDc4MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTQ0Qzk5MUEwMEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDdBMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZF
RnVuY0FFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDdDMEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR0ZFRnVuY0JFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEz
RDdFMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZFRnVuY0dFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjczNTQsNiArMjc2MzcsNyBAQAogCQkJCUE4M0I3OTAzMENDQUZGMTUwMDBCMDgy
NSAvKiBKU1NWR0ZvbnRGYWNlTmFtZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgz
Qjc4RkYwQ0NBRkYxNTAwMEIwODI1IC8qIEpTU1ZHRm9udEZhY2VTcmNFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4M0I3OEZEMENDQUZGMTUwMDBCMDgyNSAvKiBKU1NWR0ZvbnRGYWNl
VXJpRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDUzOTA0RDBFQUZENjM3MDAzNjk1
QzggLyogV2lkZ2V0SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEOTgwQUI3NUE2RjAw
MEU1QUM0IC8qIEpTU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjJGQTNEOUEwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHR0VsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjI3QjI4MjcwQ0VGMEMwNzAwRDM5RDU0IC8qIEpTU1ZHR2x5cGhFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjczNjMsNiArMjc2NDcsNyBAQAogCQkJCTg1MTc0RUMy
QkNDQUYxN0VBRTNGNDZGOCAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NDg1MjI3QjExOTAxNjJDMDA2RURDN0YgLyogSlNTVkdIS2VybkVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEOUUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHSW1h
Z2VFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0MjRBM0EwMTMzMERGMUUwMENGNkRD
OSAvKiBUaWxlR3JpZFRpbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0RBMDBBQjc1QTZG
MDAwRTVBQzQgLyogSlNTVkdMZW5ndGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc3NjY0RkMx
ODNFNkI1QzAwMTMzQjkyIC8qIEpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDhFNEZFNDYwRTJCRDQxNDAwRjRDQUUwIC8qIEpTU1ZHTGVuZ3RoQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjczODksNiArMjc2NzQsNyBAQAogCQkJCUIyRkEz
REMwMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEQzIwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1Ntb290aEFicy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0RDNDBB
Qjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUU0QjY1QTVFMTMyRkFEQjYwMDcwRTdCRSAvKiBUaWxlTGF5ZXIu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0RDNjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0RD
ODBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0RDQTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3NDMy
LDYgKzI3NzE4LDcgQEAKIAkJCQlCMkZBM0UwRTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUUmVm
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzAzNjNENjE4MUExNDY1MDBDMDc0QTUg
LyogTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNF
MTAwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVFNwYW5FbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUU0NTM5MDQzMEVBRkQ2MzcwMDM2OTVDOCAvKiBQbGF0Zm9ybVNjcmVlbklPUy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUIyRkEzRTEyMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1VuaXRU
eXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI1Rjg1MTE4MjgzQTU2MDBEODRDRDkgLyog
SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEz
RTE0MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1VzZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0yNzUzMSw2ICsyNzgxOCw3IEBACiAJCQkJQkNFRkUxRUEwRENBNUY2NDAwNzM5MjE5IC8q
IEpTWFNMVFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VGRTFFNTBEQ0E1RjMz
MDA3MzkyMTkgLyogSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg1MDMxQjQzMEE0NEVGQzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUM1ODM2MUFBMTc0NDUyM0YwMDE3MzUxMSAvKiBGb250U2VydmljZXNJT1MubW0g
aW4gU291cmNlcyAqLywKIAkJCQlBNTEzQjNEODExNEIxNjZBMDAxQzQyOUIgLyogS2V5RXZlbnRD
b2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI2NTU0MTNBMTQ4OTgxMUMwMDBERkM1RCAvKiBL
ZXlFdmVudElPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxMUVGMkMxMTdGMEZEMzUwMEU0RkEx
NiAvKiBKU0lEQkN1cnNvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3NTkyLDEwICsyNzg4MCwx
MiBAQAogCQkJCTUxMDE5NDQ0MTgzNkY3RTQwMDkyNTUyMyAvKiBJREJDdXJzb3JCYWNrZW5kT3Bl
cmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQUJFNzJGNDEwNTlDMUVCMDBEOTk5REQg
LyogTWF0aE1MRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQUJFNzJGRDEwNTlDMjEx
MDBEOTk5REQgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QkVBODA3QzgwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRkFCRTcyRjYxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTElubGluZUNvbnRhaW5l
ckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkFCRTcyRjgxMDU5QzFFQjAwRDk5OURE
IC8qIE1hdGhNTE1hdGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZBQkU3MkZFMTA1
OUMyMTEwMEQ5OTlERCAvKiBNYXRoTUxOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQTY1
NEE2QjExMDhBQkVEMDAyNjE1RTAgLyogTWF0aE1MVGV4dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTQ1MzkwNDUwRUFGRDYzNzAwMzY5NUM4IC8qIFNjcm9sbFZpZXdJT1MubW0gaW4g
U291cmNlcyAqLywKIAkJCQk0OUQ1REMyQjBGNDIzQTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFOTExQzYwRUY4NkQ0NzAw
OUQwQ0FGIC8qIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0MTcyNTNBQTEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0yNzYzMSwxMSArMjc5MjEsMTMgQEAKIAkJCQk5MzMwOURGOTA5OUU2
NDkyMDA1NkU1ODEgLyogTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTFBREVDQ0YwRTc2QUQ4QjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTc1NzkzRTgzMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdl
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDQzRjA0MjcwRTc1QzhGQjAwN0U1NDA3IC8q
IE5ldHdvcmtTdGF0ZU5vdGlmaWVySU9TLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQURFQ0Mw
MEU3NkFDRjEwMDRBMUE1RSAvKiBNZXNzYWdlUG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzhFNTI2RjEzNDZCRDE3MDBBRDlDMzEgLyogTWV0ZXJTaGFkb3dFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTM3RERDRDk0MTM4NDRGRDUwMDA4Qjc5MyAvKiBNSU1FSGVhZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDNzcyQzRFMEM0RUIzMDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJl
Z2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzcyQzVFMEM0RUIzNDQwMDgzMjg1RiAv
KiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ1MzkwNDcwRUFG
RDYzNzAwMzY5NUM4IC8qIFNvdW5kSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTJGMTA4NjUx
NjJCNkRBNDAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzZENzRBRTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZl
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RDNTEyNTFGMTJEMDAzRUYyNjkgLyogTW9u
dGhJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzcyMyw2ICsyODAxNSw3IEBACiAJ
CQkJRTEyODRBRUExMDQ0N0RFRTAwRUFFQjUyIC8qIFBhZ2VUcmFuc2l0aW9uRXZlbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTE2NzMwQTMxODJEOEZCQjAwM0ZBRjVDIC8qIElEQkN1cnNvckJh
Y2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFMUVDQzIwQzkxQzkwNDAwREMyNTVCIC8q
IFBhZ2VVUkxSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzcyN0RGRDUxNDJBQUU0NTAw
RDQ0OUNCIC8qIEZvbnRDYWNoZUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZGRDVCOTdBMTM1
Q0M5NzgwMEQ1RTkyQSAvKiBQYWdlVmlzaWJpbGl0eVN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUZEMzE2MEEyMTJCMDI2RjcwMEMxQTM1OSAvKiBQYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkQzMTYwMTkxMkIwMjY3NjAwQzFBMzU5IC8qIFBhbm5lck5vZGUuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yNzc1MSw2ICsyODA0NCw3IEBACiAJCQkJNDk1ODc4MjIxMkE1N0RERjAwNzIz
OEFDIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNERUE3NjMw
MTQ2MDhBNTMwMDhCMzFGMSAvKiBQbGF0Zm9ybUNsb2NrQ0EuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQ0RBQThEMEExNEQ3MUIyRTAwNjFFQTYwIC8qIFBsYXRmb3JtQ2xvY2tDTS5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTQ0MkFGN0FBMTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2subW0gaW4g
U291cmNlcyAqLywKIAkJCQlCQ0FBNDg2RjE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVu
dEZhY3RvcnlNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNTQ0Rjc4ODE1Q0ZCMkE4MDBBRjMz
QTggLyogUGxhdGZvcm1Mb2NhbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFCRjcwMEYwRkU4
NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjc4MzksNiArMjgxMzMsNyBAQAogCQkJCUJDRUE0ODc3MDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJJbmxpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ4NzkwOTdEOTMw
MjAwOTRDOUU0IC8qIFJlbmRlckxheWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTgwRDAw
MEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRTQ1MzkwMUQwRUFGQ0FDQTAwMzY5NUM4IC8qIE1JTUVUeXBlUmVnaXN0cnlJT1MubW0g
aW4gU291cmNlcyAqLywKIAkJCQkwRjU4MENGRTBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwRDEwRDk5MTU0NUY1NzYwMDk2
RDI4OCAvKiBSZW5kZXJMYXllckZpbHRlckluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJM0My
NDRGRUJBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yNzg5OCw2ICsyODE5Myw3IEBACiAJCQkJQThERjRBRUEwOTgwQzQyQzAw
NTI5ODFCIC8qIFJlbmRlclRhYmxlQ2VsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOERGNEFF
ODA5ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFibGVDb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQThERjRBRjAwOTgwQzQyQzAwNTI5ODFCIC8qIFJlbmRlclRhYmxlUm93LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUU0QjY1QTVBMTMyRkFBRjkwMDcwRTdCRSAvKiBUaWxlR3JpZC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUE4REY0QUVEMDk4MEM0MkMwMDUyOTgxQiAvKiBSZW5kZXJUYWJsZVNl
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ4OEIwOTdEOTMwMjAwOTRDOUU0IC8q
IFJlbmRlclRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUI2N0QxQTgwOTdGM0FFMzAwRjkz
OTJFIC8qIFJlbmRlclRleHRDb250cm9sLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc5OTUsNiAr
MjgyOTEsNyBAQAogCQkJCTBGNjA1QUVDMTVGOTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25z
dHJhaW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUY2MkVFNzE0REEyMkE3MDA0MTU1NkMg
LyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNjJFRTYx
NERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJQ0Q1NTk2OTExNDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0MzOEJGRTE2NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xs
aW5nU3RhdGVGaXhlZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMxQ0JEMEMxNjFBNDRF
OTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
MzFDQkQxMzE2MUE0NEY4MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVOb2RlTWFjLm1tIGluIFNv
dXJjZXMgKi8sCkBAIC0yODAzMyw2ICsyODMzMCw3IEBACiAJCQkJQkM1RUI4QzMwRTgyMDMxQjAw
QjI1OTY1IC8qIFNoYWRvd0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTZEMTY5NjIxMzQ2
QjQ5QjAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ0NUE5
NTMxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI5MDM3
MTY1MTZCQTExQkMwMEZFRkRGMCAvKiBDb250ZW50RmlsdGVySU9TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkQ0NUE5NTQxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlSW5mby5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRDQ1QTk1NTE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVJbnNpZGVJbmZvLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZENDVBOTU2MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZU91
dHNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjgyMjMsNiArMjg1MjEsNyBAQAogCQkJ
CUNERTNBODU3MTdGNjAyMDQwMEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMubW0g
aW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlCMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRG9jdW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI4QzZBMjcwRDAwQzQ0ODAwMzM0QUE0IC8qIFNW
R0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjE3NzQ4MTEzNzhC
NzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlC
MjIyNzlCNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBODMzQzg1MjBBMkNGNTI4MDBENTc2NjQgLyogU1ZHRWxlbWVudEZhY3RvcnkuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5QjkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0VsZW1lbnRJ
bnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4MzE1LDYgKzI4NjE0LDcgQEAKIAkJCQlC
MjIyN0E1ODBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODQ3NkM5RUYxMURGNkE1ODAwNTU1QjAyIC8qIFNWR1BhdGhQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBODAwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdM
aXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFMEQ4NEVCMTA0ODQzNkUwMDFBMTc5RSAvKiBX
ZWJFdmVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg0NzZDOUU1MTFERjZBMEIwMDU1NUIwMiAv
KiBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RGMkIwMTgx
ODIwNTQwNzAwRjJCNDI0IC8qIE1vY2tUcmFja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDhG
RjEwMjAxMjk1MEY1QTAwRjAwMjc2IC8qIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMjg0MTcsNiArMjg3MTcsNyBAQAogCQkJCTQ5ODc3MEYwMTI0
MkM1MzUwMDIyMjZCQSAvKiBUZXh0dXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM4NEE0
MTIzNzBEQzgwMDBDNjE2MSAvKiBUZXh0Vmlld1NvdXJjZVBhcnNlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQ0U2NUQzMjBFQUQxMjExMDA3RTQ1MzMgLyogVGhlbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTRDM0IxRkMwRjBFNDE3MDAwOTY5M0Y2IC8qIFRpbGVDYWNoZS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDRTY1OUU5MEVBOTJGRkEwMDdFNDUzMyAvKiBUaGVtZU1hYy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTk3NkQ2Qzk0MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBCOTA1NjFFMEYyNTdFOTMwMDk1RkY2
QSAvKiBUaHJlYWRhYmxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg1MDUsNiArMjg4
MDYsNyBAQAogCQkJCTdFNjZFMjMzMTZENkVCNkMwMEY3RTdGRiAvKiBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVRDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFNjZFMjMzMTdFNkVCNkMwMEY3RTdG
RiAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NkUzRkFFOEUxNDczM0ZEQjAwRTQyMzA2IC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGOTdBNjU4MTU1REE4MUUwMEZBREQ0QyAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3JJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk2RTRFOTFBRTEwRjdGQjMx
MDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5M0Y2RjFFRDEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDFEM0NGODIxNEJEMEEzMDAwRkU5OTcwIC8qIFdlYkdMQ29udGV4dEdy
b3VwLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg2MzAsNiArMjg5MzIsNyBAQAogCQkJCUUxRUMy
OTlGMEJCMDRDNkIwMEVBMTg3QiAvKiBYUGF0aE5vZGVTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUFCN0ZDNzUwQThCOTJFQzAwRDlEMzdCIC8qIFhQYXRoTlNSZXNvbHZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQUI3RkM3ODBBOEI5MkVDMDBEOUQzN0IgLyogWFBhdGhQYXJzZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDQ3NjUzMUIxMzMxNzA5OTAwMDZCNzg5IC8qIFNTTEtleUdl
bmVyYXRvcklPUy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUI3RkM3QTBBOEI5MkVDMDBEOUQz
N0IgLyogWFBhdGhQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQjdGQzdDMEE4QjkyRUMw
MEQ5RDM3QiAvKiBYUGF0aFByZWRpY2F0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUI3RkM3
RTBBOEI5MkVDMDBEOUQzN0IgLyogWFBhdGhSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50RmlsdGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50RmlsdGVyLmgKaW5kZXggOTNmMjA5ZGI2M2U5YTk2MGIy
NTU2NGRiYzM2MzljZTk1ZjU0NjkwMC4uZDA1ZTJhYTI4N2Y0YzJhNjM4ZDNhNzgzYjY4NmExYWUz
ZWEzY2RlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZpbHRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRGaWx0ZXIuaApAQCAtMzIs
NiArMzIsMTAgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25h
bC5oPgorI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiBPQkpDX0NMQVNTIFdlYkZpbHRlckV2
YWx1YXRvcjsKICNlbmRpZgpAQCAtNTEsNiArNTUsMTEgQEAgcHVibGljOgogICAgIGJvb2wgZGlk
QmxvY2tEYXRhKCkgY29uc3Q7CiAgICAgY29uc3QgY2hhciogZ2V0UmVwbGFjZW1lbnREYXRhKGlu
dCYgbGVuZ3RoKSBjb25zdDsKICAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIHNjaGVtZSgpOworICAgIHZvaWQgcmVxdWVzdFVuYmxvY2tBbmREaXNwYXRjaElm
U3VjY2Vzc2Z1bChGdW5jdGlvbjx2b2lkKCk+KTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IENvbnRlbnRGaWx0ZXIoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgKaW5kZXggZjM1MzU2Y2JkNWRhMjgwNGE4NjUyYTkwMmE5
NTAxZjQ5MDUwMzFmMy4uNTM3OWI4NjcwNmM4MmM3OTlmYzcwNDJmOTAwNGJlNjhhYzJmYTg1ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBQTEFURk9S
TShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTUs
MTEgKzU1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERhdGFPYmplY3RHdGs7CiB9
CiB0eXBlZGVmIFdlYkNvcmU6OkRhdGFPYmplY3RHdGsqIERyYWdEYXRhUmVmOwotI2VsaWYgUExB
VEZPUk0oRUZMKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKSB8fCBQTEFURk9STShOSVgpCisjZWxp
ZiBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkpIHx8IFBMQVRGT1JNKE5JWCkg
fHwgUExBVEZPUk0oSU9TKQogdHlwZWRlZiB2b2lkKiBEcmFnRGF0YVJlZjsKICNlbmRpZgogCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9GaWxlQ2hvb3Nlci5jcHAKaW5kZXggZGM5NzFiMzZlN2FlZWUyNDI0YWJlMTNjMWE5NmY3NGMy
ZDdjOGUyZC4uNGExMGYxNmQzM2VkNWZjYzM1NDg5M2VmZDliNmNlNzJjZDMwZTg1MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcApAQCAtNzUsNiArNzUsMjUgQEAgdm9p
ZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1l
cykKICAgICBtX2NsaWVudC0+ZmlsZXNDaG9zZW4oZmlsZXMpOwogfQogCisjaWYgUExBVEZPUk0o
SU9TKQorLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgYWxtb3N0IGlkZW50aWNhbCB0byBGaWxl
Q2hvb3Nlcjo6Y2hvb3NlRmlsZXMoKS4gV2Ugc2hvdWxkIG1lcmdlIHRoaXMgZnVuY3Rpb24KKy8v
IHdpdGggRmlsZUNob29zZXI6OmNob29zZUZpbGVzKCkgYW5kIGhlbmNlIHJlbW92ZSB0aGUgUExB
VEZPUk0oSU9TKS1ndWFyZC4KK3ZvaWQgRmlsZUNob29zZXI6OmNob29zZU1lZGlhRmlsZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3QgU3RyaW5nJiBkaXNwbGF5U3RyaW5n
LCBJY29uKiBpY29uKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluZWxlZ2FudC4gV2Ugc2hv
dWxkIG5vdCBiZSBsb29raW5nIGF0IHNldHRpbmdzIGhlcmUuCisgICAgaWYgKG1fc2V0dGluZ3Mu
c2VsZWN0ZWRGaWxlcyA9PSBmaWxlbmFtZXMpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJ
bmZvPiBmaWxlczsKKyAgICBmb3IgKGF1dG8gZmlsZW5hbWUgOiBmaWxlbmFtZXMpCisgICAgICAg
IGZpbGVzLmFwcGVuZChGaWxlQ2hvb3NlckZpbGVJbmZvKGZpbGVuYW1lKSk7CisgICAgbV9jbGll
bnQtPmZpbGVzQ2hvc2VuKGZpbGVzLCBkaXNwbGF5U3RyaW5nLCBpY29uKTsKK30KKyNlbmRpZgor
CiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8RmlsZUNob29zZXJG
aWxlSW5mbz4mIGZpbGVzKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluZWxlZ2FudC4gV2Ug
c2hvdWxkIG5vdCBiZSBsb29raW5nIGF0IHNldHRpbmdzIGhlcmUuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRmlsZUNob29zZXIuaAppbmRleCA2YzAyM2UzZDZkZGQzZWRkOTA3MzFkMWMxYWE4OWNhOTcz
MTc4ODAwLi44ZDc1OWU2OTM3OGM2ZDA2NDZjMWVlYzkxN2ZiYzJhNDRmYWYxMzU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgKQEAgLTM3LDYgKzM3LDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRmlsZUNob29zZXI7CitjbGFzcyBJY29uOwogCiBzdHJ1Y3Qg
RmlsZUNob29zZXJGaWxlSW5mbyB7CiAgICAgRmlsZUNob29zZXJGaWxlSW5mbyhjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUgPSBTdHJpbmcoKSkKQEAgLTcwLDYg
KzcxLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5GaWxlQ2hvb3NlckNsaWVudCgpIHsgfQog
CiAgICAgdmlydHVhbCB2b2lkIGZpbGVzQ2hvc2VuKGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZp
bGVJbmZvPiYpID0gMDsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFRoaXMgZnVu
Y3Rpb24gaXMgYWxtb3N0IGlkZW50aWNhbCB0byBGaWxlQ2hvb3Nlcjo6ZmlsZXNDaG9zZW4oKS4g
V2Ugc2hvdWxkIG1lcmdlIHRoaXMKKyAgICAvLyBmdW5jdGlvbiB3aXRoIEZpbGVDaG9vc2VyOjpm
aWxlc0Nob3NlbigpIGFuZCBoZW5jZSByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCisg
ICAgdmlydHVhbCB2b2lkIGZpbGVzQ2hvc2VuKGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJ
bmZvPiYsIGNvbnN0IFN0cmluZyYgZGlzcGxheVN0cmluZywgSWNvbiopID0gMDsKKyNlbmRpZgog
fTsKIAogY2xhc3MgRmlsZUNob29zZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWxlQ2hvb3Nlcj4g
ewpAQCAtODEsNiArODcsMTEgQEAgcHVibGljOgogCiAgICAgdm9pZCBjaG9vc2VGaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCk7CiAgICAgdm9pZCBjaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGF0aHMpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlv
biBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcygpLiBXZSBz
aG91bGQgbWVyZ2UgdGhpcworICAgIC8vIGZ1bmN0aW9uIHdpdGggRmlsZUNob29zZXI6OmNob29z
ZUZpbGVzKCkgYW5kIGhlbmNlIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKyAgICB2
b2lkIGNob29zZU1lZGlhRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlTdHJpbmcsIEljb24qKTsKKyNlbmRpZiAgICAKIAogICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgcHJvYmFibHkganVzdCBwYXNzIGZpbGUgcGF0aHMgdGhhdCBjb3VsZCBiZSB2
aXJ0dWFsIHBhdGhzIHdpdGggcHJvcGVyIGRpc3BsYXkgbmFtZXMgcmF0aGVyIHRoYW4gcGFzc2lu
ZyBzdHJ1Y3RzLgogICAgIHZvaWQgY2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPEZpbGVDaG9vc2Vy
RmlsZUluZm8+JiBmaWxlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9G
aWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCmlu
ZGV4IDQwMmZmMTdhYTBhM2Q3NWM0ZTYxZDhjYmFhMGE1Yzc0YjlkMTI1ZmYuLjRlMGQ5ZDY2Y2Q0
YjhlN2E5MjhlNDY5YTFkMWUxNzBjYWFkNTBkYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Zp
bGVTeXN0ZW0uY3BwCkBAIC05Nyw2ICs5NywxMCBAQCBTdHJpbmcgZW5jb2RlRm9yRmlsZU5hbWUo
Y29uc3QgU3RyaW5nJiBpbnB1dFN0cmluZykKIAogI2lmICFQTEFURk9STShNQUMpIHx8IFBMQVRG
T1JNKElPUykKIAordm9pZCBzZXRNZXRhZGF0YVVSTChTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmKQoreworfQorCiBib29sIGNhbkV4Y2x1ZGVGcm9tQmFja3VwKCkKIHsKICAg
ICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
U3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKaW5kZXggOWE1
YTM5ZjNlMmUwOTQyNTIxYTFmNmU2OTA0ODAwZGU1MDM0Nzg1ZC4uMzRmZTBhNDMwZjdlNmEzMzNj
MjNmZTMwMzVjZDk5ZTExMWY5NmFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0u
aApAQCAtMTUxLDYgKzE1MSw4IEBAIFN0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpOwogU3RyaW5n
IHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmKTsKIFN0cmluZyBkaXJlY3RvcnlOYW1lKGNv
bnN0IFN0cmluZyYpOwogCit2b2lkIHNldE1ldGFkYXRhVVJMKFN0cmluZyYgVVJMU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25zdCBTdHJpbmcmIHBhdGgpOworCiBib29sIGNhbkV4
Y2x1ZGVGcm9tQmFja3VwKCk7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgZmlsZSBjYW4gZXZlciBi
ZSBleGNsdWRlZCBmcm9tIGJhY2t1cC4KIGJvb2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3QgU3Ry
aW5nJik7IC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLgogCkBAIC0xODksMTAgKzE5MSw2
IEBAIFN0cmluZyBlbmNvZGVGb3JGaWxlTmFtZShjb25zdCBTdHJpbmcmKTsKIFJldGFpblB0cjxD
RlVSTFJlZj4gcGF0aEFzVVJMKGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9S
TShNQUMpCi12b2lkIHNldE1ldGFkYXRhVVJMKFN0cmluZyYgVVJMU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHJlZmVycmVyLCBjb25zdCBTdHJpbmcmIHBhdGgpOwotI2VuZGlmCi0KICNpZiBQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKE5JWCkKIFN0cmluZyBmaWxlbmFtZVRvU3RyaW5nKGNvbnN0IGNo
YXIqKTsKIFN0cmluZyBmaWxlbmFtZUZvckRpc3BsYXkoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcAppbmRleCAzMTBhYTA4MGNiMjVhNzQ3YTYz
ZDhlMDY0NGNmNjA3MTI1YzQ1MDkxLi5jZDk0NmE0ZTI0ZmZkNDI4OTk1ZDdlNTk4ZGQ0MTRlMTAx
NDcwMTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LaWxsUmluZ05vbmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9uZS5jcHAKQEAgLTUw
LDMgKzUwLDQgQEAgdm9pZCBLaWxsUmluZzo6c2V0VG9ZYW5rZWRTdGF0ZSgpCiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TG9jYWxpemVkU3RyaW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRT
dHJpbmdzLmNwcAppbmRleCA1OTkwMTFiMjYxYjQ2MDE2M2VkZDM1MDkxYTZhZjAxZWYwMGE5M2Ex
Li5iODIwN2Y5YzBjNDY3YmQyNjM4MGRlMmM3YTM5YzkwMDdiM2FiODQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmNwcApAQCAtNzEsNiArNzEsNyBAQCBz
dGF0aWMgU3RyaW5nIGZvcm1hdExvY2FsaXplZFN0cmluZyhTdHJpbmcgZm9ybWF0LCAuLi4pCiAj
ZW5kaWYKIH0KIAorI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogc3RhdGljIFN0cmluZyB0cnVu
Y2F0ZWRTdHJpbmdGb3JMb29rdXBNZW51SXRlbShjb25zdCBTdHJpbmcmIG9yaWdpbmFsKQogewog
ICAgIGlmIChvcmlnaW5hbC5pc0VtcHR5KCkpCkBAIC04NCw2ICs4NSw3IEBAIHN0YXRpYyBTdHJp
bmcgdHJ1bmNhdGVkU3RyaW5nRm9yTG9va3VwTWVudUl0ZW0oY29uc3QgU3RyaW5nJiBvcmlnaW5h
bCkKICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYXJhY3RlcnMgPSBudW1DaGFyYWN0ZXJzSW5HcmFw
aGVtZUNsdXN0ZXJzKHRyaW1tZWQsIG1heE51bWJlck9mR3JhcGhlbWVDbHVzdGVyc0luTG9va3Vw
TWVudUl0ZW0pOwogICAgIHJldHVybiBudW1iZXJPZkNoYXJhY3RlcnMgPT0gdHJpbW1lZC5sZW5n
dGgoKSA/IHRyaW1tZWQgOiB0cmltbWVkLmxlZnQobnVtYmVyT2ZDaGFyYWN0ZXJzKSArIGVsbGlw
c2lzOwogfQorI2VuZGlmCiAKIFN0cmluZyBpbnB1dEVsZW1lbnRBbHRUZXh0KCkKIHsKQEAgLTc5
Nyw2ICs3OTksMjYgQEAgU3RyaW5nIGh0bWxTZWxlY3RNdWx0aXBsZUl0ZW1zKHNpemVfdCBjb3Vu
dCkKICAgICAgICAgcmV0dXJuIGZvcm1hdExvY2FsaXplZFN0cmluZyhXRUJfVUlfU1RSSU5HKCIl
enUgSXRlbXMiLCAiUHJlc2VudCB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIDxvcHRpb24+IGl0ZW1z
IGluIGEgPHNlbGVjdCBtdWx0aXBsZT4gZWxlbWVudCAoaU9TIG9ubHkpIiksIGNvdW50KTsKICAg
ICB9CiB9CisKK1N0cmluZyBmaWxlQnV0dG9uQ2hvb3NlTWVkaWFGaWxlTGFiZWwoKQoreworICAg
IHJldHVybiBXRUJfVUlfU1RSSU5HKCJDaG9vc2UgTWVkaWEgKFNpbmdsZSkiLCAiVGl0bGUgZm9y
IGZpbGUgYnV0dG9uIHVzZWQgaW4gSFRNTCBmb3JtcyBmb3IgbWVkaWEgZmlsZXMiKTsKK30KKwor
U3RyaW5nIGZpbGVCdXR0b25DaG9vc2VNdWx0aXBsZU1lZGlhRmlsZXNMYWJlbCgpCit7CisgICAg
cmV0dXJuIFdFQl9VSV9TVFJJTkcoIkNob29zZSBNZWRpYSAoTXVsdGlwbGUpIiwgIlRpdGxlIGZv
ciBmaWxlIGJ1dHRvbiB1c2VkIGluIEhUTUw1IGZvcm1zIGZvciBtdWx0aXBsZSBtZWRpYSBmaWxl
cyIpOworfQorCitTdHJpbmcgZmlsZUJ1dHRvbk5vTWVkaWFGaWxlU2VsZWN0ZWRMYWJlbCgpCit7
CisgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkcoIm5vIG1lZGlhIHNlbGVjdGVkIChzaW5nbGUpIiwg
IlRleHQgdG8gZGlzcGxheSBpbiBmaWxlIGJ1dHRvbiB1c2VkIGluIEhUTUwgZm9ybXMgZm9yIG1l
ZGlhIGZpbGVzIHdoZW4gbm8gbWVkaWEgZmlsZSBpcyBzZWxlY3RlZCIpOworfQorCitTdHJpbmcg
ZmlsZUJ1dHRvbk5vTWVkaWFGaWxlc1NlbGVjdGVkTGFiZWwoKQoreworICAgIHJldHVybiBXRUJf
VUlfU1RSSU5HKCJubyBtZWRpYSBzZWxlY3RlZCAobXVsdGlwbGUpIiwgIlRleHQgdG8gZGlzcGxh
eSBpbiBmaWxlIGJ1dHRvbiB1c2VkIGluIEhUTUwgZm9ybXMgZm9yIG1lZGlhIGZpbGVzIHdoZW4g
bm8gbWVkaWEgZmlsZXMgYXJlIHNlbGVjdGVkIGFuZCB0aGUgYnV0dG9uIGFsbG93cyBtdWx0aXBs
ZSBmaWxlcyB0byBiZSBzZWxlY3RlZCIpOworfQogI2VuZGlmCiAKIFN0cmluZyBpbWFnZVRpdGxl
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IEludFNpemUmIHNpemUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmgKaW5kZXggYTg3NTdkNGRmYzY4NjU5ZTg4
NTU3Mjc2NGMzMmU3YWZkZjYxMWFhOC4uZTNmNzNjYjBkMmMwMTY4YmJhZmE2MWMwZTc5ZjFhNGUz
NzhiZjY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3Ry
aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaApA
QCAtMTQ1LDYgKzE0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKTsKICNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9N
RU5VUykKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgU3RyaW5nIHNlYXJjaE1lbnVOb1JlY2Vu
dFNlYXJjaGVzVGV4dCgpOwogICAgIFN0cmluZyBzZWFyY2hNZW51UmVjZW50U2VhcmNoZXNUZXh0
KCk7CiAgICAgU3RyaW5nIHNlYXJjaE1lbnVDbGVhclJlY2VudFNlYXJjaGVzVGV4dCgpOwpAQCAt
MTcxLDYgKzE3Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBTdHJpbmcgQVhNZW51TGlz
dFBvcHVwQWN0aW9uVmVyYigpOwogICAgIFN0cmluZyBBWExpbmtBY3Rpb25WZXJiKCk7CiAgICAg
U3RyaW5nIEFYTGlzdEl0ZW1BY3Rpb25WZXJiKCk7CisjZW5kaWYKIAogI2lmIEVOQUJMRShJTlBV
VF9UWVBFX1dFRUspCiAgICAgLy8gd2Vla0Zvcm1hdEluTERNTCgpIHJldHVybnMgd2VlayBhbmQg
eWVhciBmb3JtYXQgaW4gTERNTCwgVW5pY29kZQpAQCAtMjA2LDYgKzIwOCwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgU3RyaW5nIGh0bWxTZWxlY3RN
dWx0aXBsZUl0ZW1zKHNpemVfdCBudW0pOworICAgIFN0cmluZyBmaWxlQnV0dG9uQ2hvb3NlTWVk
aWFGaWxlTGFiZWwoKTsKKyAgICBTdHJpbmcgZmlsZUJ1dHRvbkNob29zZU11bHRpcGxlTWVkaWFG
aWxlc0xhYmVsKCk7CisgICAgU3RyaW5nIGZpbGVCdXR0b25Ob01lZGlhRmlsZVNlbGVjdGVkTGFi
ZWwoKTsKKyAgICBTdHJpbmcgZmlsZUJ1dHRvbk5vTWVkaWFGaWxlc1NlbGVjdGVkTGFiZWwoKTsK
ICNlbmRpZgogCiAgICAgU3RyaW5nIGltYWdlVGl0bGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Mb2dnaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggMWJh
YWIzMDNhMGUzZmVjNWMyZTI1YmU3MDQ1MjNjZWQzYjVhYjQ0Ny4uNGVmMjJmNjMyNjc2NDY2OTBm
ZmQyZDQ1YjNjZjA1MTE1ODlhNjJhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApAQCAt
NTQsNiArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShMaXZlQ29ubmVjdCkgXAog
ICAgIE0oTG9hZGluZykgXAogICAgIE0oTWVkaWEpIFwKKyAgICBNKE1lbW9yeVByZXNzdXJlKSBc
CiAgICAgTShOZXR3b3JrKSBcCiAgICAgTShOb3RZZXRJbXBsZW1lbnRlZCkgXAogICAgIE0oUGFn
ZUNhY2hlKSBcCkBAIC02MSw2ICs2Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBNKFBs
dWdpbnMpIFwKICAgICBNKFBvcHVwQmxvY2tpbmcpIFwKICAgICBNKFByb2dyZXNzKSBcCisgICAg
TShSZW1vdGVJbnNwZWN0b3IpIFwKICAgICBNKFJlc291cmNlTG9hZGluZykgXAogICAgIE0oU1FM
RGF0YWJhc2UpIFwKICAgICBNKFNwZWxsaW5nQW5kR3JhbW1hcikgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAppbmRleCA3NDY0ZTE5ZWQyNDViODE4ZDgy
YWJhNGZhZDI1MjMwMjUyZDZjM2M0Li4wYmI1MDhiZGQ2MGNiYTZkMDE2NDg2NTg5YmE2YjllN2U5
YTZmZTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lz
dHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNw
cApAQCAtMzYsNyArMzYsMTEgQEAKIAogI2lmIFVTRShDRykKICNpbmNsdWRlICJJbWFnZVNvdXJj
ZUNHLmgiCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2Vz
L0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8SW1hZ2VJTy9DR0ltYWdl
RGVzdGluYXRpb24uaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRp
ZgogCkBAIC0yMjQsNiArMjI4LDM0IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlcygpCiAgICAgc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXMtPnJlbW92ZSgiYXBw
bGljYXRpb24vcGRmIik7CiAgICAgc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXMtPnJlbW92ZSgiYXBw
bGljYXRpb24vcG9zdHNjcmlwdCIpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEFkZCBt
YWxmb3JtZWQgaW1hZ2UgbWltZXR5cGUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBNYWlsIGFuZCB0
byBoYW5kbGUgbWFsZm9ybWVkIG1pbWV0eXBlcyBmcm9tIHRoZSBuZXQKKyAgICAvLyBUaGVzZSB3
ZXJlIHJlbW92ZWQgZm9yIDxyZGFyOi8vcHJvYmxlbS82NTY0NTM4PiBSZS1lbmFibGUgVVRJIGNv
ZGUgaW4gV2ViQ29yZSBub3cgdGhhdCBNb2JpbGVDb3JlU2VydmljZXMgZXhpc3RzCisgICAgLy8g
QnV0IE1haWwgcmVsaWVzIG9uIGF0IGxlYXN0IGltYWdlL3RpZiByZXBvcnRlZCBhcyBiZWluZyBz
dXBwb3J0ZWQgKHNob3VsZCBiZSBpbWFnZS90aWZmKS4KKyAgICAvLyBUaGlzIGNhbiBiZSByZW1v
dmVkIHdoZW4gTWFpbCBhZGRyZXNzZXM6CisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzc4Nzk1MTA+
IE1haWwgc2hvdWxkIHVzZSBzdGFuZGFyZCBpbWFnZSBtaW1ldHlwZXMgCisgICAgLy8gYW5kIHdl
IGZpeCBzbmlmZmluZyBzbyB0aGF0IGl0IGNvcnJlY3RzIGl0ZW1zIHN1Y2ggYXMgaW1hZ2UvanBn
IC0+IGltYWdlL2pwZWcuCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG1hbGZvcm1lZE1JTUVUeXBl
c1tdID0geworICAgICAgICAvLyBKUEVHIChpbWFnZS9qcGVnKQorICAgICAgICAiaW1hZ2UvanBn
IiwgImltYWdlL2pwXyIsICJpbWFnZS9qcGVfIiwgImFwcGxpY2F0aW9uL2pwZyIsICJhcHBsaWNh
dGlvbi94LWpwZyIsICJpbWFnZS9waXBlZyIsCisgICAgICAgICJpbWFnZS92bmQuc3dpdGZ2aWV3
LWpwZWciLCAiaW1hZ2UveC14Yml0bWFwIiwKKyAgICAgICAgLy8gR0lGIChpbWFnZS9naWYpCisg
ICAgICAgICJpbWFnZS9naV8iLAorICAgICAgICAvLyBQTkcgKGltYWdlL3BuZykKKyAgICAgICAg
ImFwcGxpY2F0aW9uL3BuZyIsICJhcHBsaWNhdGlvbi94LXBuZyIsCisgICAgICAgIC8vIFRJRkYg
KGltYWdlL3RpZmYpCisgICAgICAgICJpbWFnZS94LXRpZiIsICJpbWFnZS90aWYiLCAiaW1hZ2Uv
eC10aWZmIiwgImFwcGxpY2F0aW9uL3RpZiIsICJhcHBsaWNhdGlvbi94LXRpZiIsICJhcHBsaWNh
dGlvbi90aWZmIiwKKyAgICAgICAgImFwcGxpY2F0aW9uL3gtdGlmZiIsCisgICAgICAgIC8vIEJN
UCAoaW1hZ2UvYm1wLCBpbWFnZS94LWJpdG1hcCkKKyAgICAgICAgImltYWdlL3gtYm1wIiwgImlt
YWdlL3gtd2luLWJpdG1hcCIsICJpbWFnZS94LXdpbmRvd3MtYm1wIiwgImltYWdlL21zLWJtcCIs
ICJpbWFnZS94LW1zLWJtcCIsCisgICAgICAgICJhcHBsaWNhdGlvbi9ibXAiLCAiYXBwbGljYXRp
b24veC1ibXAiLCAiYXBwbGljYXRpb24veC13aW4tYml0bWFwIiwKKyAgICB9OworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChtYWxmb3JtZWRNSU1FVHlwZXMpOyAr
K2kpIHsKKyAgICAgICAgc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXMtPmFkZChtYWxmb3JtZWRNSU1F
VHlwZXNbaV0pOworICAgICAgICBzdXBwb3J0ZWRJbWFnZVJlc291cmNlTUlNRVR5cGVzLT5hZGQo
bWFsZm9ybWVkTUlNRVR5cGVzW2ldKTsKKyAgICB9CisjZW5kaWYKKwogI2Vsc2UKICAgICAvLyBh
c3N1bWUgdGhhdCBhbGwgaW1wbGVtZW50YXRpb25zIGF0IGxlYXN0IHN1cHBvcnQgdGhlIGZvbGxv
d2luZyBzdGFuZGFyZAogICAgIC8vIGltYWdlIHR5cGVzOgpAQCAtMzMxLDkgKzM2MywxMSBAQCBz
dGF0aWMgdm9pZCBpbml0aWFsaXplU3VwcG9ydGVkTm9uSW1hZ2VNaW1lVHlwZXMoKQogICAgICAg
ICAidGV4dC8iLAogICAgICAgICAiYXBwbGljYXRpb24veG1sIiwKICAgICAgICAgImFwcGxpY2F0
aW9uL3hodG1sK3htbCIsCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgImFwcGxpY2F0aW9u
L3ZuZC53YXAueGh0bWwreG1sIiwKICAgICAgICAgImFwcGxpY2F0aW9uL3Jzcyt4bWwiLAogICAg
ICAgICAiYXBwbGljYXRpb24vYXRvbSt4bWwiLAorI2VuZGlmCiAgICAgICAgICJhcHBsaWNhdGlv
bi9qc29uIiwKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAiaW1hZ2Uvc3ZnK3htbCIsCkBAIC00
NDAsNyArNDc0LDExIEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVVbnN1cHBvcnRlZFRleHRNSU1F
VHlwZXMoKQogICAgICAgICAidGV4dC94LXFpZiIsCiAgICAgICAgICJ0ZXh0L3gtY3N2IiwKICAg
ICAgICAgInRleHQveC12Y2YiLAorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgICJ0ZXh0L3J0
ZiIsCisjZWxzZQorICAgICAgICAidGV4dC92bmQuc3VuLmoybWUuYXBwLWRlc2NyaXB0b3IiLAor
I2VuZGlmCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5H
VEgodHlwZXMpOyArK2kpCiAgICAgICB1bnN1cHBvcnRlZFRleHRNSU1FVHlwZXMtPmFkZCh0eXBl
c1tpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5k
bGVyLmNwcAppbmRleCA1ZThlN2NjM2ZjMjEwZjY2MGJlMGQ2YmExNzRiNTg4MDc0ZWRkOTJiLi42
MmVlMWFkNTZhMTkzZTMxMDRhNjg0NjgzNDQzZDg5MzdkYjUxNjZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKQEAgLTQwLDYgKzQw
LDE0IEBAIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6TWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkKICAg
ICA6IG1faW5zdGFsbGVkKGZhbHNlKQogICAgICwgbV9sYXN0UmVzcG9uZFRpbWUoMCkKICAgICAs
IG1fbG93TWVtb3J5SGFuZGxlcihyZWxlYXNlTWVtb3J5KQorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAvLyBGSVhNRTogQ2FuIHdlIHNoYXJlIG1vcmUgb2YgdGhpcyB3aXRoIE9wZW5Tb3VyY2U/Cisg
ICAgLCBtX3JlY2VpdmVkTWVtb3J5UHJlc3N1cmUoMCkKKyAgICAsIG1fbWVtb3J5UHJlc3N1cmVS
ZWFzb24oTWVtb3J5UHJlc3N1cmVSZWFzb25Ob25lKQorICAgICwgbV9jbGVhclByZXNzdXJlT25N
ZW1vcnlSZWxlYXNlKHRydWUpCisgICAgLCBtX3JlbGVhc2VNZW1vcnlCbG9jaygwKQorICAgICwg
bV9vYnNlcnZlcigwKQorI2VuZGlmCiB7CiB9CiAKQEAgLTQ5LDcgKzU3LDkgQEAgdm9pZCBNZW1v
cnlQcmVzc3VyZUhhbmRsZXI6Omluc3RhbGwoKSB7IH0KIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5k
bGVyOjp1bmluc3RhbGwoKSB7IH0KIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpob2xkT2Zm
KHVuc2lnbmVkKSB7IH0KIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpyZXNwb25kVG9NZW1v
cnlQcmVzc3VyZSgpIHsgfQorI2lmICFQTEFURk9STShJT1MpCiB2b2lkIE1lbW9yeVByZXNzdXJl
SGFuZGxlcjo6cmVsZWFzZU1lbW9yeShib29sKSB7IH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9T
KQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuaAppbmRleCA5NTBhZTg1MmRmZTA5MDhlYjM0Mzg5Y2ZjZmI2YjQyNmI5NGM3OTRm
Li5lYmZiODRjYTEwYjdmZmUzYzk5OWQzYmUxNTU0MTMxYWI2ODNmMDc1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaApAQCAtMjksOCArMjks
MjAgQEAKICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KIAor
I2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIFBMQVRGT1JNKElPUykKK2VudW0g
TWVtb3J5UHJlc3N1cmVSZWFzb24geworICAgIE1lbW9yeVByZXNzdXJlUmVhc29uTm9uZSA9IDAg
PDwgMCwKKyAgICBNZW1vcnlQcmVzc3VyZVJlYXNvblZNUHJlc3N1cmUgPSAxIDw8IDAsCisgICAg
TWVtb3J5UHJlc3N1cmVSZWFzb25WTVN0YXR1cyA9IDEgPDwgMSwKK307CisjZW5kaWYKKwogdHlw
ZWRlZiB2b2lkICgqTG93TWVtb3J5SGFuZGxlcikoYm9vbCBjcml0aWNhbCk7CiAKIGNsYXNzIE1l
bW9yeVByZXNzdXJlSGFuZGxlciB7CkBAIC00Niw2ICs1OCwxNiBAQCBwdWJsaWM6CiAgICAgICAg
IG1fbG93TWVtb3J5SGFuZGxlciA9IGhhbmRsZXI7CiAgICAgfQogCisjaWYgUExBVEZPUk0oSU9T
KQorICAgIC8vIEZJWE1FOiBDYW4gd2Ugc2hhcmUgbW9yZSBvZiB0aGlzIHdpdGggT3BlblNvdXJj
ZT8KKyAgICB2b2lkIGluc3RhbGxNZW1vcnlSZWxlYXNlQmxvY2sodm9pZCAoXnJlbGVhc2VNZW1v
cnlCbG9jaykoKSwgYm9vbCBjbGVhclByZXNzdXJlT25NZW1vcnlSZWxlYXNlID0gdHJ1ZSk7Cisg
ICAgdm9pZCBzZXRSZWNlaXZlZE1lbW9yeVByZXNzdXJlKE1lbW9yeVByZXNzdXJlUmVhc29uKTsK
KyAgICBib29sIGhhc1JlY2VpdmVkTWVtb3J5UHJlc3N1cmUoKTsKKyAgICB2b2lkIGNsZWFyTWVt
b3J5UHJlc3N1cmUoKTsKKyAgICBib29sIHNob3VsZFdhaXRGb3JNZW1vcnlDbGVhck1lc3NhZ2Uo
KTsKKyAgICB2b2lkIHJlc3BvbmRUb01lbW9yeVByZXNzdXJlSWZOZWVkZWQoKTsKKyNlbmRpZgor
CiBwcml2YXRlOgogICAgIHZvaWQgdW5pbnN0YWxsKCk7CiAKQEAgLTYwLDYgKzgyLDE1IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX2luc3RhbGxlZDsKICAgICB0aW1lX3QgbV9sYXN0UmVzcG9uZFRp
bWU7CiAgICAgTG93TWVtb3J5SGFuZGxlciBtX2xvd01lbW9yeUhhbmRsZXI7CisKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgdWludDMyX3QgbV9yZWNlaXZlZE1lbW9yeVByZXNzdXJlOworICAgIHVp
bnQzMl90IG1fbWVtb3J5UHJlc3N1cmVSZWFzb247CisgICAgYm9vbCBtX2NsZWFyUHJlc3N1cmVP
bk1lbW9yeVJlbGVhc2U7CisgICAgdm9pZCAoXm1fcmVsZWFzZU1lbW9yeUJsb2NrKSgpOworICAg
IENGUnVuTG9vcE9ic2VydmVyUmVmIG1fb2JzZXJ2ZXI7CisgICAgTXV0ZXggbV9vYnNlcnZlck11
dGV4OworI2VuZGlmCiB9OwogIAogLy8gRnVuY3Rpb24gdG8gb2J0YWluIHRoZSBnbG9iYWwgbWVt
b3J5IHByZXNzdXJlIG9iamVjdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1LZXlib2FyZEV2ZW50LmgKaW5kZXggNTliYTI5YjM5ZWEwOGQwY2UyMWExYjYwNDlkZjA4ZDBh
OWNmMDVkYy4uZjczMDM3ZGM2YzE4MjYwZTJhMTJiNjY3N2E3M2JlZjQxMzY2YzIyZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKQEAgLTM2
LDYgKzM2LDE0IEBACiBPQkpDX0NMQVNTIE5TRXZlbnQ7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JN
KElPUykKKyNpZmRlZiBfX09CSkNfXworQGNsYXNzIFdlYkV2ZW50OworI2Vsc2UKK2NsYXNzIFdl
YkV2ZW50OworI2VuZGlmCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKEdUSykKIHR5cGVkZWYgc3Ry
dWN0IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsKICNpbmNsdWRlICJDb21wb3NpdGlvblJlc3Vs
dHMuaCIKQEAgLTEyNyw3ICsxMzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShNQUMpCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgTlNFdmVudCog
bWFjRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX21hY0V2ZW50LmdldCgpOyB9CisjZWxzZQorICAg
ICAgICBXZWJFdmVudCAqZXZlbnQoKSBjb25zdCB7IHJldHVybiBtX0V2ZW50LmdldCgpOyB9Cisj
ZW5kaWYKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtMTcwLDcgKzE4MiwxMSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgICAgICBSZXRhaW5QdHI8TlNFdmVudD4gbV9tYWNFdmVudDsKKyNlbHNl
CisgICAgICAgIFJldGFpblB0cjxXZWJFdmVudD4gbV9FdmVudDsKKyNlbmRpZgogI2VuZGlmCiAj
aWYgUExBVEZPUk0oR1RLKQogICAgICAgICBHZGtFdmVudEtleSogbV9nZGtFdmVudEtleTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgKaW5kZXggM2E0MjUz
MzY1MGU2MDQwOTljZGEwMTc3ZmIxNzdiOWI4ZWI4NjNmMy4uZDY0ZGQyMzA3MjM1MDg4NjA1ODY3
OTlkODBhZWZjYmQ0ZDFmN2JiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1Nb3VzZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1Nb3VzZUV2ZW50LmgKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgLCBtX2J1dHRvbihOb0J1dHRvbikKICAgICAgICAgICAgICwgbV9jbGlja0NvdW50
KDApCiAgICAgICAgICAgICAsIG1fbW9kaWZpZXJGbGFncygwKQotI2lmIFBMQVRGT1JNKE1BQykK
KyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICAsIG1fZXZl
bnROdW1iZXIoMCkKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICAgICAgICAgICwgbV9kaWRBY3Rp
dmF0ZVdlYlZpZXcoZmFsc2UpCkBAIC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgICAgICwgbV9idXR0b24oYnV0dG9uKQogICAgICAgICAgICAgLCBtX2NsaWNrQ291
bnQoY2xpY2tDb3VudCkKICAgICAgICAgICAgICwgbV9tb2RpZmllckZsYWdzKDApCi0jaWYgUExB
VEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICAgICAg
ICAgICwgbV9ldmVudE51bWJlcigwKQogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgICAgICAgICAg
LCBtX2RpZEFjdGl2YXRlV2ViVmlldyhmYWxzZSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChjb25zdCBFdmFzX0V2ZW50
X01vdXNlX01vdmUqLCBJbnRQb2ludCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNp
ZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgICAgIGludCBldmVudE51bWJl
cigpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnROdW1iZXI7IH0KICNlbmRpZgogCkBAIC0xMjksNyAr
MTI5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbV9jbGlja0NvdW50Owog
ICAgICAgICB1bnNpZ25lZCBtX21vZGlmaWVyRmxhZ3M7CiAKLSNpZiBQTEFURk9STShNQUMpCisj
aWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogICAgICAgICBpbnQgbV9ldmVudE51
bWJlcjsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICAgICAgYm9vbCBtX2RpZEFjdGl2YXRlV2Vi
VmlldzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVu
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oCmluZGV4IDkzMzZj
N2Y2NDVhZjBmYTk5MWY0YjUzOGY2ZTQ0NTk2NTY1ZDUzOGYuLmEyNGVkZDc5MWQ5Mzk3YmFiZWY4
NjIzZTMwMzkxNzk4M2ViZTUwMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtU2NyZWVuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1T
Y3JlZW4uaApAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0j
aWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIE9C
SkNfQ0xBU1MgTlNTY3JlZW47CiBPQkpDX0NMQVNTIE5TV2luZG93OwogI2lmZGVmIE5TR0VPTUVU
UllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQq
KTsKICAgICB2b2lkIHNjcmVlbkNvbG9yUHJvZmlsZShDb2xvclByb2ZpbGUmKTsKIAotI2lmIFBM
QVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgTlNT
Y3JlZW4gKnNjcmVlbkZvcldpbmRvdyhOU1dpbmRvdyAqKTsKIAogICAgIEZsb2F0UmVjdCB0b1Vz
ZXJTcGFjZShjb25zdCBOU1JlY3QmLCBOU1dpbmRvdyAqZGVzdGluYXRpb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5jcHAKaW5k
ZXggZTk0MDBhMDljMjg2YTQ0NDBjMzI2NTllNDllMzBlNTBjZDllNDRkZi4uMjZlNDliZGJiMzky
ZTZkMTQ5YWM3Nzc1NzJhOTI2NDcwNmMyZTllYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwCkBAIC0zNyw3ICszNyw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIHN0YXRpYyBib29sIG1haW5CdW5kbGVJc0VxdWFs
VG8oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyU3RyaW5nKQogewotI2lmIFVTRShDRikK
KyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIG1lcmdpbmcgdGhpcyBmaWxlIHdpdGgg
UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLm1tLgorICAgIC8vIFRoZW4gd2UgY2FuIHJlbW92
ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKyNpZiBVU0UoQ0YpICYmICFQTEFURk9STShJT1Mp
CiAgICAgQ0ZCdW5kbGVSZWYgbWFpbkJ1bmRsZSA9IENGQnVuZGxlR2V0TWFpbkJ1bmRsZSgpOwog
ICAgIGlmICghbWFpbkJ1bmRsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40YjM3OGJhYWRkZDBiNTE1YTg4NmNhZjYzMWM5YmUzMjZjNGZkNmZiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hl
Y2tzSU9TLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJ1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrc0lPU19oCisjZGVmaW5lIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPU19oCisK
Ky8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgbWVyZ2luZyB0aGlzIGZpbGUgd2l0aCBSdW50
aW1lQXBwbGljYXRpb25DaGVja3MuaC4KK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBhcHBs
aWNhdGlvbklzTW9iaWxlTWFpbCgpOworYm9vbCBhcHBsaWNhdGlvbklzTW9iaWxlU2FmYXJpKCk7
Citib29sIGFwcGxpY2F0aW9uSXNEdW1wUmVuZGVyVHJlZSgpOworYm9vbCBhcHBsaWNhdGlvbklz
TW9iaWxlU3RvcmUoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc1dlYkFwcCgpOworYm9vbCBhcHBsaWNh
dGlvbklzT2tDdXBpZCgpOworYm9vbCBhcHBsaWNhdGlvbklzRmFjZWJvb2soKTsKK2Jvb2wgYXBw
bGljYXRpb25Jc0VwaWN1cmlvdXMoKTsKK2Jvb2wgYXBwbGljYXRpb25Jc0RhaWppc2VuRGljdGlv
bmFyeSgpOworYm9vbCBhcHBsaWNhdGlvbklzTkFTQUhEKCk7Citib29sIGFwcGxpY2F0aW9uSXNN
QVNIKCk7Citib29sIGFwcGxpY2F0aW9uSXNUaGVFY29ub21pc3RPbklQaG9uZSgpOworYm9vbCBh
cHBsaWNhdGlvbklzV2ViUHJvY2VzcygpOworYm9vbCBhcHBsaWNhdGlvbklzSUJvb2tzT25JT1Mo
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUnVudGltZUFwcGxpY2F0
aW9uQ2hlY2tzSU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRp
bWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bnRp
bWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjQ0MjAzMGMyMzU5YjNmZDFj
ZWQxMTVmNTgwYzgyZWUzNmU2MGMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLm1tCkBAIC0wLDAgKzEsMTI1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzSU9TLmgiCisKKy8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgbWVyZ2luZyB0aGlz
IGZpbGUgd2l0aCBSdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwLgorI2lmIFBMQVRGT1JNKElP
UykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIGFwcGxpY2F0aW9uSXNNb2JpbGVNYWls
KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc01vYmlsZU1haWwgPSBbW1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uYXBwbGUubW9iaWxl
bWFpbCJdOworICAgIHJldHVybiBpc01vYmlsZU1haWw7Cit9CisKK2Jvb2wgYXBwbGljYXRpb25J
c01vYmlsZVNhZmFyaSgpCit7CisgICAgc3RhdGljIGJvb2wgaXNNb2JpbGVTYWZhcmkgPSBbW1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJj
b20uYXBwbGUubW9iaWxlc2FmYXJpIl07CisgICAgcmV0dXJuIGlzTW9iaWxlU2FmYXJpOworfQor
Citib29sIGFwcGxpY2F0aW9uSXNEdW1wUmVuZGVyVHJlZSgpCit7CisgICAgc3RhdGljIGJvb2wg
aXNEdW1wUmVuZGVyVHJlZSA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZp
ZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5hcHBsZS5EdW1wUmVuZGVyVHJlZSJdOworICAgIHJl
dHVybiBpc0R1bXBSZW5kZXJUcmVlOworfQorCitib29sIGFwcGxpY2F0aW9uSXNNb2JpbGVTdG9y
ZSgpCit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNNb2JpbGVTdG9yZSA9IFtbW05TQnVuZGxl
IG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5hcHBs
ZS5Nb2JpbGVTdG9yZSJdOworICAgIHJldHVybiBpc01vYmlsZVN0b3JlOworfQorCitib29sIGFw
cGxpY2F0aW9uSXNXZWJBcHAoKQoreworICAgIHN0YXRpYyBib29sIGlzV2ViQXBwID0gW1tbTlNC
dW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29t
LmFwcGxlLndlYmFwcCJdOworICAgIHJldHVybiBpc1dlYkFwcDsKK30KKworYm9vbCBhcHBsaWNh
dGlvbklzT2tDdXBpZCgpCit7CisgICAgc3RhdGljIGJvb2wgaXNPa0N1cGlkID0gW1tbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLm9r
Y3VwaWQuYXBwIl07CisgICAgcmV0dXJuIGlzT2tDdXBpZDsKK30KKworYm9vbCBhcHBsaWNhdGlv
bklzRmFjZWJvb2soKQoreworICAgIHN0YXRpYyBib29sIGlzRmFjZWJvb2sgPSBbW1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20uZmFj
ZWJvb2suRmFjZWJvb2siXTsKKyAgICByZXR1cm4gaXNGYWNlYm9vazsKK30KKworYm9vbCBhcHBs
aWNhdGlvbklzRXBpY3VyaW91cygpCit7CisgICAgc3RhdGljIGJvb2wgaXNFcGljdXJpb3VzID0g
W1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5n
OkAiY29tLmNvbmRlbmV0LkVwaWN1cmlvdXMiXTsKKyAgICByZXR1cm4gaXNFcGljdXJpb3VzOwor
fQorCitib29sIGFwcGxpY2F0aW9uSXNEYWlqaXNlbkRpY3Rpb25hcnkoKQoreworICAgIHN0YXRp
YyBib29sIGlzRGFpamlzZW5EaWN0aW9uYXJ5ID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVu
ZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAianAuY28uc2hvZ2FrdWthbi5kYWlqaXNl
bjIwMDlpIl07CisgICAgcmV0dXJuIGlzRGFpamlzZW5EaWN0aW9uYXJ5OworfQorCitib29sIGFw
cGxpY2F0aW9uSXNOQVNBSEQoKQoreworICAgIHN0YXRpYyBib29sIGlzTkFTQUhEID0gW1tbTlNC
dW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiZ292
Lm5hc2EuTkFTQUhEIl07CisgICAgcmV0dXJuIGlzTkFTQUhEOworfQorCitib29sIGFwcGxpY2F0
aW9uSXNNQVNIKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc01BU0ggPSBbW1tOU0J1bmRsZSBtYWlu
QnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20ubWFnbmF0ZWlu
dGVyYWN0aXZlLm1hc2hnYW1lIl0KKyAgICAgICAgfHwgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
YnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLm1hZ25hdGVpbnRlcmFjdGl2
ZS5tYXNobGl0ZWdhbWUiXQorICAgICAgICB8fCBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5k
bGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20ubWFnbmF0ZWludGVyYWN0aXZlLm1h
c2hjaHJpc3RtYXMiXQorICAgICAgICB8fCBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJ
ZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20ubWFnbmF0ZWludGVyYWN0aXZlLm1hc2ho
YWxsb3dlZW4iXQorICAgICAgICB8fCBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVu
dGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20ubWFnbmF0ZWludGVyYWN0aXZlLm1hc2h2YWxl
bnRpbmVzIl07CisgICAgcmV0dXJuIGlzTUFTSDsKK30KKworYm9vbCBhcHBsaWNhdGlvbklzVGhl
RWNvbm9taXN0T25JUGhvbmUoKQoreworICAgIHN0YXRpYyBib29sIGlzVGhlRWNvbm9taXN0T25J
UGhvbmUgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFs
VG9TdHJpbmc6QCJjb20uZWNvbm9taXN0LmlwaG9uZSJdOworICAgIHJldHVybiBpc1RoZUVjb25v
bWlzdE9uSVBob25lOworfQorCisvLyBGSVhNRTogdGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHdo
ZW4gdGhlIFdlYlByb2Nlc3MgaXMgY2hhbmdlZCB0byBhbiBYUEMgc2VydmljZS4KK2Jvb2wgYXBw
bGljYXRpb25Jc1dlYlByb2Nlc3MoKQoreworICAgIHN0YXRpYyBib29sIGlzV2ViUHJvY2VzcyA9
IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmlu
ZzpAImNvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudCJdIHx8IFtbW05TQnVuZGxlIG1haW5CdW5k
bGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5hcHBsZS5XZWJQcm9j
ZXNzIl07CisgICAgcmV0dXJuIGlzV2ViUHJvY2VzczsKK30KKworYm9vbCBhcHBsaWNhdGlvbklz
SUJvb2tzT25JT1MoKQoreworICAgIHN0YXRpYyBib29sIGlzSUJvb2tzT25JT1MgPSBbW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJpbmc6QCJjb20u
YXBwbGUuaUJvb2tzIl07CisgICAgcmV0dXJuIGlzSUJvb2tzT25JT1M7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAppbmRleCA3ODdmYjEyODQzNWRiNjQ3MDQ5ZmIz
MWI4ZTU3MGY2ZjA4YTk3N2VkLi5mOGRiMjUwYzAxODZmNjQwY2Y2MzIyYmZmZjQ0MzljMjgzOTA0
ZWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC0z
OSw3ICszOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmICFFTkFCTEUoU01PT1RI
X1NDUk9MTElORykKKyNpZiAhRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpICYmICFQTEFURk9STShJ
T1MpCiBQYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNj
cm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKSk7CkBAIC0xMjMsNiArMTIzLDEzIEBAIGJv
b2wgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiBlKQogICAgIHJldHVybiBoYW5kbGVkOwogfQogCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKK2Jvb2wgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1U
b3VjaEV2ZW50JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogdm9pZCBTY3Jv
bGxBbmltYXRvcjo6c2V0Q3VycmVudFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
KQogewogICAgIG1fY3VycmVudFBvc1ggPSBwb3NpdGlvbi54KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAppbmRleCAyMGU5YTU2ZGQyNGNiYjMyZDM4Njg1MTM2ZTFi
ZDdlNWEzYjQ3N2MxLi5mMGRjOTg0NjM4ZGU4N2U0OTk2M2U4N2JmOTA1ZTc5MzMxZDJjYmRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKQEAgLTQwLDYgKzQwLDcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIFBsYXRm
b3JtVG91Y2hFdmVudDsKIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsYmFyOwog
CkBAIC02Miw2ICs2MywxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKIAorI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCisgICAgdmlydHVhbCBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1U
b3VjaEV2ZW50Jik7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlV2hlZWxFdmVudFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlKSB7IH0KICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgKaW5kZXggZjYzMGRhZTI2NTgz
YmMwOTI1MDJhYjc4M2MyMzljY2VjNmQ0ZGYyZC4uOTY0ODZhOWJkMmQ1MDQ3OGUwNzMwNmQ3NTk0
NWY1Y2VkZWM5YWNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
VHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oCkBAIC0y
Niw2ICsyNiw5IEBACiAjaWZuZGVmIFNjcm9sbFR5cGVzX2gKICNkZWZpbmUgU2Nyb2xsVHlwZXNf
aAogCisvLyBXVEZfUExBVEZPUk1fSU9TCisjaWZkZWYgX19jcGx1c3BsdXMKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgZW51bSBTY3JvbGxEaXJlY3Rpb24gewpAQCAtMTc4LDQgKzE4MSw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9OwogfQogCisjZW5kaWYgLy8gX19jcGx1c3Bs
dXMKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxW
aWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCmluZGV4IGZm
MjJjNGQwZTk2NTRiMWJkYjNlMTQ2N2Q0ZGM5NzQ4ODIwNzI5ZDkuLjliMzNjMzFkYWYxNzZkMjVh
NDcxYjJlNDdlNzI0YmY0NTdmMzI3M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZp
ZXcuY3BwCkBAIC0yNDEsOCArMjQxLDEwIEBAIEludFNpemUgU2Nyb2xsVmlldzo6dW5zY2FsZWRW
aXNpYmxlQ29udGVudFNpemUoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiCiAgICAg
aWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVZpc2libGVDb250
ZW50U2l6ZShzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpOwogCisjaWYg
IVBMQVRGT1JNKElPUykKICAgICBpZiAoIW1fZml4ZWRWaXNpYmxlQ29udGVudFJlY3QuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gbV9maXhlZFZpc2libGVDb250ZW50UmVjdC5zaXplKCk7Cisj
ZW5kaWYKIAogICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gMDsKICAgICBpbnQgaG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IDA7CkBAIC0yNjQsOCArMjY2LDEwIEBAIEludFJlY3Qg
U2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVz
U2Nyb2xsYmFycyBzY29sCiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVy
biBwbGF0Zm9ybVZpc2libGVDb250ZW50UmVjdChzY29sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRl
U2Nyb2xsYmFycyk7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghbV9maXhlZFZpc2li
bGVDb250ZW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX2ZpeGVkVmlzaWJsZUNv
bnRlbnRSZWN0OworI2VuZGlmCiAKICAgICBGbG9hdFNpemUgdmlzaWJsZUNvbnRlbnRTaXplID0g
dW5zY2FsZWRWaXNpYmxlQ29udGVudFNpemUoc2NvbGxiYXJJbmNsdXNpb24pOwogICAgIHZpc2li
bGVDb250ZW50U2l6ZS5zY2FsZSgxIC8gdmlzaWJsZUNvbnRlbnRTY2FsZUZhY3RvcigpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAppbmRleCAyMGM2OWNlZWVhNmUwNTNiNDc2MDcx
MDNiZjc0YWU5MTcxODg5MzA1Li5lNTI4NWY0ZmRiZjQzOWQwZDg3MzAyYTE4NzkxZGVkNjk2YjJl
Nzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCkBAIC0zNSw2ICszNSwyNCBA
QAogCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpZmRl
ZiBfX09CSkNfXworQGNsYXNzIFdBS1Njcm9sbFZpZXc7CitAY2xhc3MgV0FLVmlldzsKKyNlbHNl
CitjbGFzcyBXQUtTY3JvbGxWaWV3OworY2xhc3MgV0FLVmlldzsKKyNlbmRpZgorCisjaWZuZGVm
IE5TU2Nyb2xsVmlldworI2RlZmluZSBOU1Njcm9sbFZpZXcgV0FLU2Nyb2xsVmlldworI2VuZGlm
CisKKyNpZm5kZWYgTlNWaWV3CisjZGVmaW5lIE5TVmlldyBXQUtWaWV3CisjZW5kaWYKKyNlbmRp
ZiAvLyBQTEFURk9STShJT1MpCisKICNpZiBQTEFURk9STShNQUMpICYmIGRlZmluZWQgX19PQkpD
X18KIEBwcm90b2NvbCBXZWJDb3JlRnJhbWVTY3JvbGxWaWV3OwogI2VuZGlmCkBAIC00Myw2ICs2
MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSG9zdFdpbmRvdzsKIGNsYXNzIFNj
cm9sbGJhcjsKK2NsYXNzIFRpbGVDYWNoZTsKIAogY2xhc3MgU2Nyb2xsVmlldyA6IHB1YmxpYyBX
aWRnZXQsIHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CiBwdWJsaWM6CkBAIC0xNDEsOSArMTYwLDIw
IEBAIHB1YmxpYzoKICAgICAvLyB0aGUgc2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QgaW5zdGVh
ZCBmb3IgdGhlIG1haW5mcmFtZSwgdGhvdWdoIHRoaXMgbXVzdCBiZSB1cGRhdGVkIG1hbnVhbGx5
LCBlLmcganVzdCBiZWZvcmUgcmVzdW1pbmcgdGhlIHBhZ2UKICAgICAvLyB3aGljaCB1c3VhbGx5
IHdpbGwgaGFwcGVuIHdoZW4gcGFubmluZywgcGluY2hpbmcgYW5kIHJvdGF0aW9uIGVuZHMsIG9y
IHdoZW4gc2NhbGUgb3IgcG9zaXRpb24gYXJlIGNoYW5nZWQgbWFudWFsbHkuCiAgICAgdmlydHVh
bCBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Nj
cm9sbGJhcnMgPSBFeGNsdWRlU2Nyb2xsYmFycykgY29uc3QgT1ZFUlJJREU7CisjaWYgIVBMQVRG
T1JNKElPUykKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QoY29u
c3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KSB7IG1fZml4ZWRWaXNpYmxlQ29udGVudFJl
Y3QgPSB2aXNpYmxlQ29udGVudFJlY3Q7IH0KICAgICBJbnRSZWN0IGZpeGVkVmlzaWJsZUNvbnRl
bnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFZpc2libGVDb250ZW50UmVjdDsgfQorI2Vu
ZGlmCiAgICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHZpc2libGVDb250
ZW50UmVjdCgpLnNpemUoKTsgfQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBUaGlzIGlzIHRo
ZSBhcmVhIHRoYXQgaXMgbm90IGNvdmVyZWQgYnkgVUkgZWxlbWVudHMuCisgICAgSW50UmVjdCBh
Y3R1YWxWaXNpYmxlQ29udGVudFJlY3QoKSBjb25zdDsKKyAgICAvLyBUaGlzIGlzIHRoZSBhcmVh
IHRoYXQgaXMgcGFydGlhbGx5IG9yIGZ1bGx5IGV4cG9zZWQsIGFuZCBtYXkgZXh0ZW5kIHVuZGVy
IG92ZXJsYXBwaW5nIFVJIGVsZW1lbnRzLgorICAgIEludFJlY3QgdmlzaWJsZUV4dGVudENvbnRl
bnRSZWN0KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEFjdHVhbFNjcm9sbFBvc2l0aW9uKGNvbnN0
IEludFBvaW50Jik7CisgICAgVGlsZUNhY2hlKiB0aWxlQ2FjaGUoKTsKKyNlbmRpZgogICAgIHZp
cnR1YWwgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHZpc2libGVD
b250ZW50UmVjdCgpLndpZHRoKCk7IH0KICAgICB2aXJ0dWFsIGludCB2aXNpYmxlSGVpZ2h0KCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0KCkuaGVpZ2h0KCk7IH0K
IApAQCAtMTgxLDYgKzIxMSwxMSBAQCBwdWJsaWM6CiAgICAgaW50IHNjcm9sbFgoKSBjb25zdCB7
IHJldHVybiBzY3JvbGxQb3NpdGlvbigpLngoKTsgfQogICAgIGludCBzY3JvbGxZKCkgY29uc3Qg
eyByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS55KCk7IH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBpbnQgYWN0dWFsU2Nyb2xsWCgpIGNvbnN0IHsgcmV0dXJuIGFjdHVhbFZpc2libGVDb250ZW50
UmVjdCgpLngoKTsgfQorICAgIGludCBhY3R1YWxTY3JvbGxZKCkgY29uc3QgeyByZXR1cm4gYWN0
dWFsVmlzaWJsZUNvbnRlbnRSZWN0KCkueSgpOyB9CisjZW5kaWYKKwogICAgIC8vIHNjcm9sbE9m
ZnNldCgpIGFuY2hvcnMgaXRzICgwLDApIHBvaW50IGF0IHRoZSB0b3AgZW5kIG9mIHRoZSBoZWFk
ZXIgaWYgdGhpcyBTY3JvbGxhYmxlQXJlYQogICAgIC8vIGhhcyBhIGhlYWRlciwgc28gaXQgaXMg
cmVsYXRpdmUgdG8gdGhlIHRvdGFsQ29udGVudHNTaXplKCkuIHNjcm9sbE9mZnNldFJlbGF0aXZl
VG9Eb2N1bWVudCgpCiAgICAgLy8gYW5jaG9ycyAoMCwwKSBhdCB0aGUgdG9wIG9mIHRoZSBEb2N1
bWVudCwgd2hpY2ggd2lsbCBiZSBiZW5lYXRoIGFueSBoZWFkZXJzLCBzbyBpdCBpcyByZWxhdGl2
ZQpAQCAtMzU0LDcgKzM4OSw5IEBAIHByaXZhdGU6CiAgICAgLy8gd2hldGhlciBpdCBpcyBzYWZl
IHRvIGJsaXQgb24gc2Nyb2xsLgogICAgIGJvb2wgbV9jYW5CbGl0T25TY3JvbGw7CiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgIEludFJlY3QgbV9maXhlZFZpc2libGVDb250ZW50UmVjdDsKKyNl
bmRpZgogICAgIEludFNpemUgbV9zY3JvbGxPZmZzZXQ7IC8vIEZJWE1FOiBXb3VsZCByYXRoZXIg
c3RvcmUgdGhpcyBhcyBhIHBvc2l0aW9uLCBidXQgd2Ugd2lsbCB3YWl0IHRvIG1ha2UgdGhpcyBj
aGFuZ2UgdW50aWwgbW9yZSBjb2RlIGlzIHNoYXJlZC4KICAgICBJbnRQb2ludCBtX2NhY2hlZFNj
cm9sbFBvc2l0aW9uOwogICAgIEludFNpemUgbV9maXhlZExheW91dFNpemU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKaW5kZXggYzE4ZGVhN2VkYzQ5MWFkNWZk
NTJiNjZjZDIzZjljYmY1ODJkNGU5OS4uMmJjODRjNWMxYjI5NDNhMzIxYjQwOGM3ODUzZTBiOTk1
MmQzNmY1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApA
QCAtMTc2LDYgKzE3NiwxMyBAQCBib29sIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKICAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3IoKS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKIH0KIAorI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCitib29sIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KGNv
bnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKK3sKKyAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3IoKS0+aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30KKyNlbmRpZgorCiAv
LyBOT1RFOiBPbmx5IGNhbGxlZCBmcm9tIEludGVybmFscyBmb3IgdGVzdGluZy4KIHZvaWQgU2Ny
b2xsYWJsZUFyZWE6OnNldFNjcm9sbE9mZnNldEZyb21JbnRlcm5hbHMoY29uc3QgSW50UG9pbnQm
IG9mZnNldCkKIHsKQEAgLTM4OSw2ICszOTYsMzEgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6c2Vy
dmljZVNjcm9sbEFuaW1hdGlvbnMoKQogICAgICAgICBzY3JvbGxBbmltYXRvci0+c2VydmljZVNj
cm9sbEFuaW1hdGlvbnMoKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK2Jvb2wgU2Nyb2xsYWJs
ZUFyZWE6OmlzUGlubmVkSW5Cb3RoRGlyZWN0aW9ucyhjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0
YSkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNQaW5uZWRIb3Jpem9udGFsbHlJbkRpcmVjdGlvbihz
Y3JvbGxEZWx0YS53aWR0aCgpKSAmJiBpc1Bpbm5lZFZlcnRpY2FsbHlJbkRpcmVjdGlvbihzY3Jv
bGxEZWx0YS5oZWlnaHQoKSk7Cit9CisKK2Jvb2wgU2Nyb2xsYWJsZUFyZWE6OmlzUGlubmVkSG9y
aXpvbnRhbGx5SW5EaXJlY3Rpb24oaW50IGhvcml6b250YWxTY3JvbGxEZWx0YSkgY29uc3QKK3sK
KyAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbERlbHRhIDwgMCAmJiBpc0hvcml6b250YWxTY3JvbGxl
clBpbm5lZFRvTWluaW11bVBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
IChob3Jpem9udGFsU2Nyb2xsRGVsdGEgPiAwICYmIGlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVk
VG9NYXhpbXVtUG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFNjcm9sbGFibGVBcmVhOjppc1Bpbm5lZFZlcnRpY2FsbHlJbkRpcmVj
dGlvbihpbnQgdmVydGljYWxTY3JvbGxEZWx0YSkgY29uc3QKK3sKKyAgICBpZiAodmVydGljYWxT
Y3JvbGxEZWx0YSA8IDAgJiYgaXNWZXJ0aWNhbFNjcm9sbGVyUGlubmVkVG9NaW5pbXVtUG9zaXRp
b24oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHZlcnRpY2FsU2Nyb2xsRGVsdGEg
PiAwICYmIGlzVmVydGljYWxTY3JvbGxlclBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCisKIEludFBvaW50IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0
CiB7CiAgICAgaW50IHggPSBob3Jpem9udGFsU2Nyb2xsYmFyKCkgPyBob3Jpem9udGFsU2Nyb2xs
YmFyKCktPnZhbHVlKCkgOiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYWJsZUFyZWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVh
LmgKaW5kZXggZTMzNzNlNGM5MWM5ZTI1ZWUwMzI1N2I3NGY2OGVkNGNjYmY4NjMyNi4uZjE3NDcx
ZDRkN2QxOGVhYjQ5YjJjZDQ1YTdhYzU3ZmM1ZjFiNWNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCkBAIC0zMyw2ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFBs
YXRmb3JtVG91Y2hFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFNjcm9s
bEFuaW1hdG9yOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTU3LDYgKzU4
LDE5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmKTsKIAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdmlydHVhbCBi
b29sIGlzVG91Y2hTY3JvbGxhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKTsKKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgYm9vbCBpc092ZXJmbG93U2Ny
b2xsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRT
Y3JvbGwoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kU2Nyb2xsKCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRJc1Vz
ZXJTY3JvbGwoYm9vbCkgeyB9CisjZW5kaWYKKwogICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udHJv
bGxpbmcgaWYgeW91IGNhbiBzY3JvbGwgcGFzdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KICAg
ICBib29sIGNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkgY29uc3QgeyByZXR1cm4g
bV9jb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZTsgfQogICAgIHZvaWQgc2V0Q29uc3Ry
YWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoYm9vbCBjb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250
ZW50RWRnZSkgeyBtX2NvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlID0gY29uc3RyYWlu
c1Njcm9sbGluZ1RvQ29udGVudEVkZ2U7IH0KQEAgLTE4Miw2ICsxOTYsMTcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZUFuaW1hdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdm9pZCBzZXJ2aWNlU2Nyb2xsQW5pbWF0aW9ucygpOwogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIGJvb2wgaXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01pbmltdW1Qb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuICFob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsUG9zaXRpb24oaG9y
aXpvbnRhbFNjcm9sbGJhcigpKSA8PSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCk7IH0KKyAg
ICBib29sIGlzSG9yaXpvbnRhbFNjcm9sbGVyUGlubmVkVG9NYXhpbXVtUG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiAhaG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IHNjcm9sbFBvc2l0aW9uKGhvcml6
b250YWxTY3JvbGxiYXIoKSkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueCgpOyB9CisgICAg
Ym9vbCBpc1ZlcnRpY2FsU2Nyb2xsZXJQaW5uZWRUb01pbmltdW1Qb3NpdGlvbigpIGNvbnN0IHsg
cmV0dXJuICF2ZXJ0aWNhbFNjcm9sbGJhcigpIHx8IHNjcm9sbFBvc2l0aW9uKHZlcnRpY2FsU2Ny
b2xsYmFyKCkpIDw9IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLnkoKTsgfQorICAgIGJvb2wgaXNW
ZXJ0aWNhbFNjcm9sbGVyUGlubmVkVG9NYXhpbXVtUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiAh
dmVydGljYWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxQb3NpdGlvbih2ZXJ0aWNhbFNjcm9sbGJhcigp
KSA+PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCk7IH0gCisKKyAgICBib29sIGlzUGlubmVk
SW5Cb3RoRGlyZWN0aW9ucyhjb25zdCBJbnRTaXplJikgY29uc3Q7IAorICAgIGJvb2wgaXNQaW5u
ZWRIb3Jpem9udGFsbHlJbkRpcmVjdGlvbihpbnQgaG9yaXpvbnRhbFNjcm9sbERlbHRhKSBjb25z
dDsgCisgICAgYm9vbCBpc1Bpbm5lZFZlcnRpY2FsbHlJbkRpcmVjdGlvbihpbnQgdmVydGljYWxT
Y3JvbGxEZWx0YSkgY29uc3Q7CisjZW5kaWYKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKICAgICB2aXJ0dWFsIFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nKCkgeyByZXR1cm4g
MDsgfQogICAgIHZpcnR1YWwgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxiYXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAppbmRleCBi
OThjY2EzMTFlNDU1MzRmNWE0YTJjZDk2OWRkY2MwNGM4NmNhNzY5Li40MWY3YmE0OGVjOGVjYzJi
MzM2OWExZDZkZWQxN2IyNTQ3OWJlNDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJh
ci5jcHAKQEAgLTMzNCw2ICszMzQsNyBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0UHJlc3NlZFBhcnQo
U2Nyb2xsYmFyUGFydCBwYXJ0KQogICAgICAgICB0aGVtZSgpLT5pbnZhbGlkYXRlUGFydCh0aGlz
LCBtX2hvdmVyZWRQYXJ0KTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiBib29sIFNjcm9sbGJh
cjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKIHsKICAgICBpZiAo
bV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsKQEAgLTM3Miw2ICszNzMsNyBAQCBib29sIFNj
cm9sbGJhcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKIAogICAg
IHJldHVybiB0cnVlOwogfQorI2VuZGlmCiAKIHZvaWQgU2Nyb2xsYmFyOjptb3VzZUVudGVyZWQo
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAppbmRleCBlNWIzMjlkYWJiMTI1NjJk
NjlkZTJkNjI1YmJmNDg0OTliNmQyYWZjLi5jZDFlODk3MDM4ZWVlYWI1ZDE3MzNhMjVmNTc0ZmZh
NTcwMTcyOGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaApAQCAtMTI1LDcgKzEy
NSw5IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGZvciBwbGF0Zm9y
bSBzY3JvbGxiYXJzIHRvIGdpdmUgOmhvdmVyIGZlZWRiYWNrLiAgVGhleSB3aWxsIG5vdCBnZXQg
Y2FsbGVkCiAgICAgLy8gd2hlbiB0aGUgbW91c2Ugd2VudCBkb3duIGluIGEgc2Nyb2xsYmFyLCBz
aW5jZSBpdCBpcyBhc3N1bWVkIHRoZSBzY3JvbGxiYXIgd2lsbCBzdGFydAogICAgIC8vIGdyYWJi
aW5nIGFsbCBldmVudHMgaW4gdGhhdCBjYXNlIGFueXdheS4KKyNpZiAhUExBVEZPUk0oSU9TKQog
ICAgIGJvb2wgbW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyNlbmRpZgog
ICAgIHZvaWQgbW91c2VFbnRlcmVkKCk7CiAgICAgYm9vbCBtb3VzZUV4aXRlZCgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCBkYjgyM2NkN2ZiNjI0ZmYw
NDAzZWZhYmY3YzYyZGUyZjBmYTdkZGU1Li4xZGFkNzg3MjMyYjMwNjFkMTk2N2M5ZGViOTNiODY2
MTc4ODVjN2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAg
LTY2LDYgKzY2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVTZWdtZW50KGNoYXIqIHApCiAK
IFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKCkKICAgICA6IG1fc2l6ZSgwKQorICAgICwgbV9z
aG91bGRVc2VQdXJnZWFibGVNZW1vcnkoZmFsc2UpCiAjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FD
SEUpCiAgICAgLCBtX2lzTWVtb3J5TWFwcGVkKGZhbHNlKQogICAgICwgbV9kaXNrSW1hZ2VDYWNo
ZUlkKERpc2tJbWFnZUNhY2hlOjppbnZhbGlkRGlza0NhY2hlSWQpCkBAIC03OCw2ICs3OSw3IEBA
IFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKCkKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVy
KHVuc2lnbmVkIHNpemUpCiAgICAgOiBtX3NpemUoc2l6ZSkKICAgICAsIG1fYnVmZmVyKHNpemUp
CisgICAgLCBtX3Nob3VsZFVzZVB1cmdlYWJsZU1lbW9yeShmYWxzZSkKICNpZiBFTkFCTEUoRElT
S19JTUFHRV9DQUNIRSkKICAgICAsIG1faXNNZW1vcnlNYXBwZWQoZmFsc2UpCiAgICAgLCBtX2Rp
c2tJbWFnZUNhY2hlSWQoRGlza0ltYWdlQ2FjaGU6OmludmFsaWREaXNrQ2FjaGVJZCkKQEAgLTg5
LDYgKzkxLDcgQEAgU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIodW5zaWduZWQgc2l6ZSkKIAog
U2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgc2l6
ZSkKICAgICA6IG1fc2l6ZSgwKQorICAgICwgbV9zaG91bGRVc2VQdXJnZWFibGVNZW1vcnkoZmFs
c2UpCiAjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCiAgICAgLCBtX2lzTWVtb3J5TWFwcGVk
KGZhbHNlKQogICAgICwgbV9kaXNrSW1hZ2VDYWNoZUlkKERpc2tJbWFnZUNhY2hlOjppbnZhbGlk
RGlza0NhY2hlSWQpCkBAIC0xMDEsNiArMTA0LDcgQEAgU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZm
ZXIoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgc2l6ZSkKIAogU2hhcmVkQnVmZmVyOjpTaGFy
ZWRCdWZmZXIoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgc2l6ZSkKICAgICA6
IG1fc2l6ZSgwKQorICAgICwgbV9zaG91bGRVc2VQdXJnZWFibGVNZW1vcnkoZmFsc2UpCiAjaWYg
RU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCiAgICAgLCBtX2lzTWVtb3J5TWFwcGVkKGZhbHNlKQog
ICAgICwgbV9kaXNrSW1hZ2VDYWNoZUlkKERpc2tJbWFnZUNhY2hlOjppbnZhbGlkRGlza0NhY2hl
SWQpCkBAIC0yMTAsNiArMjE0LDEyIEBAIHZvaWQgU2hhcmVkQnVmZmVyOjpzZXRNZW1vcnlNYXBw
ZWROb3RpZmljYXRpb25DYWxsYmFjayhNZW1vcnlNYXBwZWROb3RpZnlDYWxsYmFjCiB9CiAjZW5k
aWYKIAorLy8gVHJ5IHRvIGNyZWF0ZSBhIFB1cmdlYWJsZUJ1ZmZlci4gV2UgY2FuIGZhaWwgdG8g
Y3JlYXRlIG9uZSBmb3IgYW55IG9mIHRoZQorLy8gZm9sbG93aW5nIHJlYXNvbnM6CisvLyAgIC0g
c2hvdWxkVXNlUHVyZ2VhYmxlTWVtb3J5IGlzIHNldCB0byBmYWxzZS4KKy8vICAgLSB0aGUgc2l6
ZSBvZiB0aGUgYnVmZmVyIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSBzaXplIHJlcXVpcmVkIGJ5
CisvLyAgICAgUHVyZ2VhYmxlQnVmZmVyIChjdXJyZW50bHkgMTZrKS4KKy8vICAgLSBQdXJnZWFi
bGVCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoKSBjYWxsIGZhaWxzLgogdm9pZCBTaGFyZWRC
dWZmZXI6OmNyZWF0ZVB1cmdlYWJsZUJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgaWYgKG1fcHVyZ2Vh
YmxlQnVmZmVyKQpAQCAtMjI2LDYgKzIzNiw5IEBAIHZvaWQgU2hhcmVkQnVmZmVyOjpjcmVhdGVQ
dXJnZWFibGVCdWZmZXIoKSBjb25zdAogICAgIGlmICghaGFzT25lUmVmKCkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIGlmICghbV9zaG91bGRVc2VQdXJnZWFibGVNZW1vcnkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGNoYXIqIGRlc3RpbmF0aW9uID0gMDsKICAgICBtX3B1cmdlYWJsZUJ1ZmZl
ciA9IFB1cmdlYWJsZUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChtX3NpemUsIGRlc3RpbmF0
aW9uKTsKICAgICBpZiAoIW1fcHVyZ2VhYmxlQnVmZmVyKQpAQCAtMjUzLDcgKzI2Niw5IEBAIGNv
bnN0IGNoYXIqIFNoYXJlZEJ1ZmZlcjo6ZGF0YSgpIGNvbnN0CiAgICAgaWYgKGNvbnN0IGNoYXIq
IGJ1ZmZlciA9IHNpbmdsZURhdGFBcnJheUJ1ZmZlcigpKQogICAgICAgICByZXR1cm4gYnVmZmVy
OwogI2VuZGlmCi0gICAgCisKKyAgICBjcmVhdGVQdXJnZWFibGVCdWZmZXIoKTsKKwogICAgIGlm
IChtX3B1cmdlYWJsZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG1fcHVyZ2VhYmxlQnVmZmVyLT5k
YXRhKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IDgy
NzE4YjM1YzBkMDM3YjlmYjVlYjU2YTg5ZGQxNTM1Yjg3NDk3YTIuLjEwNmM4MzBkNjUxZjllZDdl
NTY2YzAxODhkMmQ3MGM1MzJjNjgwMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5oCkBAIC0xMzgsNiArMTM4LDggQEAgcHVibGljOgogICAgIC8vICAgICAgfQogICAgIHVu
c2lnbmVkIGdldFNvbWVEYXRhKGNvbnN0IGNoYXIqJiBkYXRhLCB1bnNpZ25lZCBwb3NpdGlvbiA9
IDApIGNvbnN0OwogCisgICAgdm9pZCBzaG91bGRVc2VQdXJnZWFibGVNZW1vcnkoYm9vbCB1c2Up
IHsgbV9zaG91bGRVc2VQdXJnZWFibGVNZW1vcnkgPSB1c2U7IH0KKwogI2lmIEVOQUJMRShESVNL
X0lNQUdFX0NBQ0hFKQogICAgIGVudW0gTWVtb3J5TWFwcGluZ1N0YXRlIHsgUXVldWVkRm9yTWFw
cGluZywgUHJldmlvdXNseVF1ZXVlZEZvck1hcHBpbmcsIFN1Y2Nlc3NBbHJlYWR5TWFwcGVkLCBG
YWlsdXJlQ2FjaGVGdWxsIH07CiAKQEAgLTE4Nyw2ICsxODksNyBAQCBwcml2YXRlOgogCiAgICAg
dW5zaWduZWQgbV9zaXplOwogICAgIG11dGFibGUgVmVjdG9yPGNoYXI+IG1fYnVmZmVyOworICAg
IGJvb2wgbV9zaG91bGRVc2VQdXJnZWFibGVNZW1vcnk7CiAgICAgbXV0YWJsZSBPd25QdHI8UHVy
Z2VhYmxlQnVmZmVyPiBtX3B1cmdlYWJsZUJ1ZmZlcjsKICNpZiBVU0UoTkVUV09SS19DRkRBVEFf
QVJSQVlfQ0FMTEJBQ0spCiAgICAgbXV0YWJsZSBWZWN0b3I8UmV0YWluUHRyPENGRGF0YVJlZj4+
IG1fZGF0YUFycmF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VkZGVu
VGVybWluYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1ZGRlblRlcm1pbmF0aW9u
LmgKaW5kZXggNzI1MjE0OTA2MmY0MzNhYjMzYzY4ODBjOTU1NGI5YjNiZGZhZGM5Mi4uODA5Njdj
NmMwOGM5ZmM3MmExMTJmMWQzMGViY2YyZjA4MTI1ZDNlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU3VkZGVuVGVybWluYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TdWRkZW5UZXJtaW5hdGlvbi5oCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICB2b2lkIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOwogICAgIHZvaWQg
ZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKTsKIAotI2lmICFQTEFURk9STShNQUMpCisjaWYgUExB
VEZPUk0oSU9TKSB8fCAhUExBVEZPUk0oTUFDKQogICAgIGlubGluZSB2b2lkIGRpc2FibGVTdWRk
ZW5UZXJtaW5hdGlvbigpIHsgfQogICAgIGlubGluZSB2b2lkIGVuYWJsZVN1ZGRlblRlcm1pbmF0
aW9uKCkgeyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N1
cHBsZW1lbnRhYmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdXBwbGVtZW50YWJsZS5o
CmluZGV4IDI3N2FhZWY4MGVmNmNjN2JhM2JlMmE5ODljMmY1ZmYzZGVkMmM3NTEuLmMyMDJmMmM0
MjFlZTA4NmJkMWNmZTQ2YzA3NDNhY2U2N2Y2Nzc2MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1N1cHBsZW1lbnRhYmxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU3VwcGxlbWVudGFibGUuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CiAKQEAgLTk5LDIwICsxMDAsMjAgQEAgY2xhc3MgU3VwcGxlbWVudGFibGUgewogcHVi
bGljOgogICAgIHZvaWQgcHJvdmlkZVN1cHBsZW1lbnQoY29uc3QgY2hhcioga2V5LCBQYXNzT3du
UHRyPFN1cHBsZW1lbnQ8VD4+IHN1cHBsZW1lbnQpCiAgICAgewotICAgICAgICBBU1NFUlQobV90
aHJlYWRJZCA9PSBjdXJyZW50VGhyZWFkKCkpOworICAgICAgICBBU1NFUlQoY2FuQWNjZXNzVGhy
ZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fdGhyZWFkSWQpKTsKICAgICAgICAgQVNTRVJUKCFtX3N1
cHBsZW1lbnRzLmdldChrZXkpKTsKICAgICAgICAgbV9zdXBwbGVtZW50cy5zZXQoa2V5LCBzdXBw
bGVtZW50KTsKICAgICB9CiAKICAgICB2b2lkIHJlbW92ZVN1cHBsZW1lbnQoY29uc3QgY2hhciog
a2V5KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdGhyZWFkSWQgPT0gY3VycmVudFRocmVhZCgp
KTsKKyAgICAgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3Ro
cmVhZElkKSk7CiAgICAgICAgIG1fc3VwcGxlbWVudHMucmVtb3ZlKGtleSk7CiAgICAgfQogCiAg
ICAgU3VwcGxlbWVudDxUPiogcmVxdWlyZVN1cHBsZW1lbnQoY29uc3QgY2hhcioga2V5KQogICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fdGhyZWFkSWQgPT0gY3VycmVudFRocmVhZCgpKTsKKyAgICAg
ICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChtX3RocmVhZElkKSk7
CiAgICAgICAgIHJldHVybiBtX3N1cHBsZW1lbnRzLmdldChrZXkpOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3lzdGVtTWVtb3J5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TeXN0ZW1NZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjc2M2NkM2E2Y2Q3MGQ2
MWI4NzZhOGEzNmRiMGZhMDRkNWNlZjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU3lzdGVtTWVtb3J5LmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTeXN0
ZW1NZW1vcnlfaAorI2RlZmluZSBTeXN0ZW1NZW1vcnlfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitpbnQgc3lzdGVtTWVtb3J5TGV2ZWwoKTsgLy8gSW4gWzAsIDEwMF0KK3NpemVfdCBzeXN0ZW1U
b3RhbE1lbW9yeSgpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1RocmVhZENoZWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRDaGVj
ay5oCmluZGV4IDA3ZWI0NjNiMDViZTI3ZGUxMzUyZDA2NmVlNzJkZTcxN2JiYzM3NTkuLmZiYTNh
YTI2YjM5MjVmNjIwMDE2MWFlZTVmMTQwOTg0OTJmYWQ2ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1RocmVhZENoZWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVGhyZWFkQ2hlY2suaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBUaHJlYWRDaGVja19o
CiAjZGVmaW5lIFRocmVhZENoZWNrX2gKIAorI2lmICFQTEFURk9STShJT1MpCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgZW51bSBUaHJlYWRWaW9sYXRpb25CZWhhdmlvciB7CiAgICAgICAgIE5v
VGhyZWFkQ2hlY2ssCkBAIC00Niw1ICs0Nyw5IEBAIGV4dGVybiAiQyIgdm9pZCBXZWJDb3JlUmVw
b3J0VGhyZWFkVmlvbGF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBXZWJDb3JlOjpUaHJlCiAK
ICNkZWZpbmUgV2ViQ29yZVRocmVhZFZpb2xhdGlvbkNoZWNrUm91bmRPbmUoKSA6OldlYkNvcmU6
OnJlcG9ydFRocmVhZFZpb2xhdGlvbihXVEZfUFJFVFRZX0ZVTkNUSU9OLCBXZWJDb3JlOjpUaHJl
YWRWaW9sYXRpb25Sb3VuZE9uZSkKICNkZWZpbmUgV2ViQ29yZVRocmVhZFZpb2xhdGlvbkNoZWNr
Um91bmRUd28oKSA6OldlYkNvcmU6OnJlcG9ydFRocmVhZFZpb2xhdGlvbihXVEZfUFJFVFRZX0ZV
TkNUSU9OLCBXZWJDb3JlOjpUaHJlYWRWaW9sYXRpb25Sb3VuZFR3bykKKyNlbHNlCisjZGVmaW5l
IFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kT25lKCkgZG8geyB9IHdoaWxlICgwKQor
I2RlZmluZSBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZFR3bygpIGRvIHsgfSB3aGls
ZSAoMCkKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcAppbmRleCAwZDgzN2JmNTZkNzliOTJjNDA5
MTQ1ZDc3NzY3N2VhN2QxMmRjMjA0Li5jZWZiMTlkZGM3MGU1ZGE5NTUxMTJhODk2ZWM2N2MxOWQ1
MDJlMjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxE
YXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNw
cApAQCAtNTAsNiArNTAsOSBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBUaHJlYWRTcGVjaWZpYzxUaHJlYWRHbG9iYWxEYXRhPiogVGhyZWFkR2xvYmFsRGF0
YTo6c3RhdGljRGF0YTsKKyNpZiBVU0UoV0VCX1RIUkVBRCkKK1RocmVhZEdsb2JhbERhdGEqIFRo
cmVhZEdsb2JhbERhdGE6OnNoYXJlZE1haW5UaHJlYWRTdGF0aWNEYXRhOworI2VuZGlmCiAKIFRo
cmVhZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERhdGEoKQogICAgIDogbV9jYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzKGFkb3B0UHRyKG5ldyBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0
aWF0b3JzKSkKQEAgLTYxLDcgKzY0LDcgQEAgVGhyZWFkR2xvYmFsRGF0YTo6VGhyZWFkR2xvYmFs
RGF0YSgpCiAjaWYgVVNFKElDVV9VTklDT0RFKQogICAgICwgbV9jYWNoZWRDb252ZXJ0ZXJJQ1Uo
YWRvcHRQdHIobmV3IElDVUNvbnZlcnRlcldyYXBwZXIpKQogI2VuZGlmCi0jaWYgUExBVEZPUk0o
TUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICAsIG1fY2FjaGVk
Q29udmVydGVyVEVDKGFkb3B0UHRyKG5ldyBURUNDb252ZXJ0ZXJXcmFwcGVyKSkKICNlbmRpZgog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCkBAIC04Miw3ICs4NSw3IEBAIFRocmVhZEdsb2JhbERhdGE6
On5UaHJlYWRHbG9iYWxEYXRhKCkKIAogdm9pZCBUaHJlYWRHbG9iYWxEYXRhOjpkZXN0cm95KCkK
IHsKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9T
KQogICAgIG1fY2FjaGVkQ29udmVydGVyVEVDLmNsZWFyKCk7CiAjZW5kaWYKIApAQCAtOTgsMTEg
KzEwMSwzNSBAQCB2b2lkIFRocmVhZEdsb2JhbERhdGE6OmRlc3Ryb3koKQogICAgIG1fdGhyZWFk
VGltZXJzLmNsZWFyKCk7CiB9CiAKKyNpZiBFTkFCTEUoV09SS0VSUykgJiYgVVNFKFdFQl9USFJF
QUQpCit2b2lkIFRocmVhZEdsb2JhbERhdGE6OnNldFdlYkNvcmVUaHJlYWREYXRhKCkKK3sKKyAg
ICBBU1NFUlQoaXNXZWJUaHJlYWQoKSk7CisgICAgQVNTRVJUKCZ0aHJlYWRHbG9iYWxEYXRhKCkg
IT0gVGhyZWFkR2xvYmFsRGF0YTo6c2hhcmVkTWFpblRocmVhZFN0YXRpY0RhdGEpOworCisgICAg
Ly8gU2V0IFdlYlRocmVhZCdzIFRocmVhZEdsb2JhbERhdGEgb2JqZWN0IHRvIGJlIHRoZSBzYW1l
IGFzIHRoZSBtYWluIFVJIHRocmVhZC4KKyAgICBUaHJlYWRHbG9iYWxEYXRhOjpzdGF0aWNEYXRh
LT5yZXBsYWNlKFRocmVhZEdsb2JhbERhdGE6OnNoYXJlZE1haW5UaHJlYWRTdGF0aWNEYXRhKTsK
KworICAgIEFTU0VSVCgmdGhyZWFkR2xvYmFsRGF0YSgpID09IFRocmVhZEdsb2JhbERhdGE6OnNo
YXJlZE1haW5UaHJlYWRTdGF0aWNEYXRhKTsKK30KKyNlbmRpZgorCiBUaHJlYWRHbG9iYWxEYXRh
JiB0aHJlYWRHbG9iYWxEYXRhKCkgCiB7CisjaWYgVVNFKFdFQl9USFJFQUQpCisgICAgaWYgKFVO
TElLRUxZKCFUaHJlYWRHbG9iYWxEYXRhOjpzdGF0aWNEYXRhKSkgeworICAgICAgICBUaHJlYWRH
bG9iYWxEYXRhOjpzdGF0aWNEYXRhID0gbmV3IFRocmVhZFNwZWNpZmljPFRocmVhZEdsb2JhbERh
dGE+OworICAgICAgICAvLyBXZWJUaHJlYWQgYW5kIG1haW4gVUkgdGhyZWFkIG5lZWQgdG8gc2hh
cmUgdGhlIHNhbWUgb2JqZWN0LiBTYXZlIGl0IGluIGEgc3RhdGljCisgICAgICAgIC8vIGhlcmUs
IHRoZSBXZWJUaHJlYWQgd2lsbCBwaWNrIGl0IHVwIGluIHNldFdlYkNvcmVUaHJlYWREYXRhKCku
CisgICAgICAgIGlmIChwdGhyZWFkX21haW5fbnAoKSkKKyAgICAgICAgICAgIFRocmVhZEdsb2Jh
bERhdGE6OnNoYXJlZE1haW5UaHJlYWRTdGF0aWNEYXRhID0gKlRocmVhZEdsb2JhbERhdGE6OnN0
YXRpY0RhdGE7CisgICAgfQorICAgIHJldHVybiAqKlRocmVhZEdsb2JhbERhdGE6OnN0YXRpY0Rh
dGE7CisjZWxzZQogICAgIGlmICghVGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0YSkKICAgICAg
ICAgVGhyZWFkR2xvYmFsRGF0YTo6c3RhdGljRGF0YSA9IG5ldyBUaHJlYWRTcGVjaWZpYzxUaHJl
YWRHbG9iYWxEYXRhPjsKICAgICByZXR1cm4gKipUaHJlYWRHbG9iYWxEYXRhOjpzdGF0aWNEYXRh
OworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1RocmVhZEdsb2JhbERhdGEuaAppbmRleCA3NmM5ZmFmYjFlOWIzMjdiNzhjYTg2OTFl
ZTQzODA2NDY2YWE4OTQ2Li5mZmIwMThjN2EyMGZlN2VhMzA3OGU4NTE3ZTFmOGYzMTUzMjg4NjQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5oCkBAIC02Miwx
MCArNjIsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJQ1VDb252ZXJ0ZXJXcmFw
cGVyJiBjYWNoZWRDb252ZXJ0ZXJJQ1UoKSB7IHJldHVybiAqbV9jYWNoZWRDb252ZXJ0ZXJJQ1U7
IH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBM
QVRGT1JNKElPUykKICAgICAgICAgVEVDQ29udmVydGVyV3JhcHBlciYgY2FjaGVkQ29udmVydGVy
VEVDKCkgeyByZXR1cm4gKm1fY2FjaGVkQ29udmVydGVyVEVDOyB9CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShXT1JLRVJTKSAmJiBVU0UoV0VCX1RIUkVBRCkKKyAgICAgICAgdm9pZCBzZXRXZWJDb3Jl
VGhyZWFkRGF0YSgpOworI2VuZGlmCisKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICAgICBU
aHJlYWRMb2NhbEluc3BlY3RvckNvdW50ZXJzJiBpbnNwZWN0b3JDb3VudGVycygpIHsgcmV0dXJu
ICptX2luc3BlY3RvckNvdW50ZXJzOyB9CiAjZW5kaWYKQEAgLTgzLDcgKzg3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBPd25QdHI8SUNVQ29udmVydGVyV3JhcHBlcj4gbV9jYWNo
ZWRDb252ZXJ0ZXJJQ1U7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9S
TShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgICAgIE93blB0cjxURUNDb252ZXJ0ZXJXcmFw
cGVyPiBtX2NhY2hlZENvbnZlcnRlclRFQzsKICNlbmRpZgogCkBAIC05MiwxMCArOTYsMTcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICAgICAgICAgc3RhdGljIFRocmVhZFNwZWNp
ZmljPFRocmVhZEdsb2JhbERhdGE+KiBzdGF0aWNEYXRhOworI2lmIFVTRShXRUJfVEhSRUFEKQor
ICAgICAgICBzdGF0aWMgVGhyZWFkR2xvYmFsRGF0YSogc2hhcmVkTWFpblRocmVhZFN0YXRpY0Rh
dGE7CisjZW5kaWYKICAgICAgICAgZnJpZW5kIFRocmVhZEdsb2JhbERhdGEmIHRocmVhZEdsb2Jh
bERhdGEoKTsKICAgICB9OwogCisjaWYgVVNFKFdFQl9USFJFQUQpCitUaHJlYWRHbG9iYWxEYXRh
JiB0aHJlYWRHbG9iYWxEYXRhKCk7CisjZWxzZQogVGhyZWFkR2xvYmFsRGF0YSYgdGhyZWFkR2xv
YmFsRGF0YSgpIFBVUkVfRlVOQ1RJT047CisjZW5kaWYKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkVGltZXJz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFRpbWVycy5jcHAKaW5kZXggODQ2
NDQwZmYyNWRjYjJlMzQ3OWY1NGVlMjNiNjAzMTY4YzU2YTRmYy4uNzg5Mzc4Y2UzZmViNGUzYjBj
Y2Y0MGI3NTdiZjUzZjE4Y2M1MzkzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVGhyZWFkVGltZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRU
aW1lcnMuY3BwCkBAIC0zMyw2ICszMywxMCBAQAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5j
bHVkZSAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Ly8gRmlyZSB0aW1lcnMgZm9yIHRoaXMgbGVuZ3RoIG9mIHRpbWUsIGFuZCB0aGVuIHF1aXQgdG8g
bGV0IHRoZSBydW4gbG9vcCBwcm9jZXNzIHVzZXIgaW5wdXQgZXZlbnRzLgpAQCAtNTQsNyArNTgs
NyBAQCBUaHJlYWRUaW1lcnM6OlRocmVhZFRpbWVycygpCiAgICAgLCBtX2ZpcmluZ1RpbWVycyhm
YWxzZSkKICAgICAsIG1fcGVuZGluZ1NoYXJlZFRpbWVyRmlyZVRpbWUoMCkKIHsKLSAgICBpZiAo
aXNNYWluVGhyZWFkKCkpCisgICAgaWYgKGlzVUlUaHJlYWQoKSkKICAgICAgICAgc2V0U2hhcmVk
VGltZXIobWFpblRocmVhZFNoYXJlZFRpbWVyKCkpOwogfQogCkBAIC0xMDUsNiArMTA5LDcgQEAg
dm9pZCBUaHJlYWRUaW1lcnM6OnNoYXJlZFRpbWVyRmlyZWQoKQogCiB2b2lkIFRocmVhZFRpbWVy
czo6c2hhcmVkVGltZXJGaXJlZEludGVybmFsKCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkgfHwgIWlzV2ViVGhyZWFkKCkgJiYgIWlzVUlUaHJlYWQoKSk7CiAgICAgLy8gRG8gYSByZS1l
bnRyYW5jeSBjaGVjay4KICAgICBpZiAobV9maXJpbmdUaW1lcnMpCiAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmNwcAppbmRleCAzMWE0MDVkNzAwZGUzZDE5N2U1ZmRiMTE1
NGRiYmZlMTY5ZDZkOGE2Li5hODczNzMwNDNiZTQxZTg4MTM3MTAwZWY5NDk4ZmJkYjZmYTA5YzIx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGltZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVk
ZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIwOSw3ICsyMTAsNyBAQCBUaW1lckJh
c2U6On5UaW1lckJhc2UoKQogCiB2b2lkIFRpbWVyQmFzZTo6c3RhcnQoZG91YmxlIG5leHRGaXJl
SW50ZXJ2YWwsIGRvdWJsZSByZXBlYXRJbnRlcnZhbCkKIHsKLSAgICBBU1NFUlQobV90aHJlYWQg
PT0gY3VycmVudFRocmVhZCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRh
Rm9yVGhyZWFkKG1fdGhyZWFkKSk7CiAKICAgICBtX3JlcGVhdEludGVydmFsID0gcmVwZWF0SW50
ZXJ2YWw7CiAgICAgc2V0TmV4dEZpcmVUaW1lKG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
ICsgbmV4dEZpcmVJbnRlcnZhbCk7CkBAIC0yMTcsNyArMjE4LDcgQEAgdm9pZCBUaW1lckJhc2U6
OnN0YXJ0KGRvdWJsZSBuZXh0RmlyZUludGVydmFsLCBkb3VibGUgcmVwZWF0SW50ZXJ2YWwpCiAK
IHZvaWQgVGltZXJCYXNlOjpzdG9wKCkKIHsKLSAgICBBU1NFUlQobV90aHJlYWQgPT0gY3VycmVu
dFRocmVhZCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KG1fdGhyZWFkKSk7CiAKICAgICBtX3JlcGVhdEludGVydmFsID0gMDsKICAgICBzZXROZXh0Rmly
ZVRpbWUoMCk7CkBAIC0zNjgsNyArMzY5LDcgQEAgdm9pZCBUaW1lckJhc2U6OnVwZGF0ZUhlYXBJ
Zk5lZWRlZChkb3VibGUgb2xkVGltZSkKIAogdm9pZCBUaW1lckJhc2U6OnNldE5leHRGaXJlVGlt
ZShkb3VibGUgbmV3VW5hbGlnbmVkVGltZSkKIHsKLSAgICBBU1NFUlQobV90aHJlYWQgPT0gY3Vy
cmVudFRocmVhZCgpKTsKKyAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhy
ZWFkKG1fdGhyZWFkKSk7CiAgICAgQVNTRVJUKCFtX3dhc0RlbGV0ZWQpOwogCiAgICAgaWYgKG1f
dW5hbGlnbmVkTmV4dEZpcmVUaW1lICE9IG5ld1VuYWxpZ25lZFRpbWUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGltZXIuaAppbmRleCA2OWU5ZWQ1MjcxNzBkZDM1YzgzZDE0OGFkYjkwMWNmNzcwMDRjNThhLi4x
NjE0YmQxM2FjYTVkMjc2YTI2MWE3NDBiOThjNDVmYTdlMzU5MDdiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RpbWVyLmgKQEAgLTMwLDYgKzMwLDEwIEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJX
ZWJDb3JlVGhyZWFkLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBUaW1l
IGludGVydmFscyBhcmUgYWxsIGluIHNlY29uZHMuCkBAIC0xMjAsNyArMTI0LDE4IEBAIHByaXZh
dGU6CiAKIGlubGluZSBib29sIFRpbWVyQmFzZTo6aXNBY3RpdmUoKSBjb25zdAogeworICAgIC8v
IEZJWE1FOiBXcml0ZSB0aGlzIGluIHRlcm1zIG9mIFVTRShXRUJfVEhSRUFEKSBpbnN0ZWFkIG9m
IFBMQVRGT1JNKElPUykuCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBBU1NFUlQobV90aHJlYWQg
PT0gY3VycmVudFRocmVhZCgpKTsKKyNlbHNlCisgICAgLy8gT24gaU9TIHRpbWVycyBhcmUgYWx3
YXlzIHJ1biBvbiB0aGUgbWFpbiB0aHJlYWQgb3IgdGhlIFdlYiBUaHJlYWQuCisgICAgLy8gVW5s
ZXNzIHdlIGhhdmUgd29ya2VycyBlbmFibGVkIGluIHdoaWNoIGNhc2UgdGltZXJzIGNhbiBydW4g
b24gb3RoZXIgdGhyZWFkcy4KKyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICBBU1NFUlQoV2ViVGhy
ZWFkSXNDdXJyZW50KCkgfHwgcHRocmVhZF9tYWluX25wKCkgfHwgbV90aHJlYWQgPT0gY3VycmVu
dFRocmVhZCgpKTsKKyNlbHNlCisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpIHx8IHB0
aHJlYWRfbWFpbl9ucCgpKTsKKyNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKICAgICBy
ZXR1cm4gbV9uZXh0RmlyZVRpbWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1VSTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCmluZGV4IDVi
N2NkM2E1NWFhNjAzMTZhZDg5YmQ2YTA0YzRmYTAwNDM4YTYxYjYuLjMzNzg3OGU4MWI2Mjk0Y2M5
MDBlNDJmOWUwODRjYTBiMGFhN2YxOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1VSTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmNwcApAQCAtOTg2
LDkgKzk4NiwyNyBAQCB2b2lkIFVSTDo6cGFyc2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAg
cGFyc2UoYnVmZmVyLmRhdGEoKSwgJnN0cmluZyk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitz
dGF0aWMgYm9vbCBzaG91bGRDYW5vbmljYWxpemVTY2hlbWUgPSB0cnVlOworCit2b2lkIGVuYWJs
ZVVSTFNjaGVtZUNhbm9uaWNhbGl6YXRpb24oYm9vbCBlbmFibGVTY2hlbWVDYW5vbmljYWxpemF0
aW9uKQoreworICAgIHNob3VsZENhbm9uaWNhbGl6ZVNjaGVtZSA9IGVuYWJsZVNjaGVtZUNhbm9u
aWNhbGl6YXRpb247Cit9CisjZW5kaWYKKwogdGVtcGxhdGU8c2l6ZV90IGxlbmd0aD4KIHN0YXRp
YyBpbmxpbmUgYm9vbCBlcXVhbChjb25zdCBjaGFyKiBhLCBjb25zdCBjaGFyICgmYilbbGVuZ3Ro
XSkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKCFzaG91bGRDYW5vbmljYWxpemVTY2hl
bWUpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAg
ICAgICAgICAgaWYgKHRvQVNDSUlMb3dlcihhW2ldKSAhPSBiW2ldKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisj
ZW5kaWYKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAg
IGlmIChhW2ldICE9IGJbaV0pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjYyLDgg
KzEyODAsMTggQEAgdm9pZCBVUkw6OnBhcnNlKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgU3RyaW5n
KiBvcmlnaW5hbFN0cmluZykKIAogICAgIC8vIGNvcHkgaW4gdGhlIHNjaGVtZQogICAgIGNvbnN0
IGNoYXIgKnNjaGVtZUVuZFB0ciA9IHVybCArIHNjaGVtZUVuZDsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgaWYgKHNob3VsZENhbm9uaWNhbGl6ZVNjaGVtZSB8fCBtX3Byb3RvY29sSXNJbkhUVFBG
YW1pbHkpIHsKKyAgICAgICAgd2hpbGUgKHN0clB0ciA8IHNjaGVtZUVuZFB0cikKKyAgICAgICAg
ICAgICpwKysgPSB0b0FTQ0lJTG93ZXIoKnN0clB0cisrKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICB3aGlsZSAoc3RyUHRyIDwgc2NoZW1lRW5kUHRyKQorICAgICAgICAgICAgKnArKyA9ICpzdHJQ
dHIrKzsKKyAgICB9CisjZWxzZQogICAgIHdoaWxlIChzdHJQdHIgPCBzY2hlbWVFbmRQdHIpCiAg
ICAgICAgICpwKysgPSB0b0FTQ0lJTG93ZXIoKnN0clB0cisrKTsKKyNlbmRpZgogICAgIG1fc2No
ZW1lRW5kID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAKICAgICBib29sIGhvc3RJc0xvY2FsSG9zdCA9
IHBvcnRFbmQgLSB1c2VyU3RhcnQgPT0gOQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVVJMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuaAppbmRleCBjMTMyOWVi
NGMyMzJmNGFiMTA4YmI3N2RmOThkYjBjMjY1YjBhNDE1Li43MTNiZGNlOTE4NzNmMGI1YmFkMDI0
MGJkMjJhNzUzYjY5NWUyNDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9V
UkwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuaApAQCAtMzMyLDYgKzMzMiwx
MCBAQCBpbmxpbmUgdW5zaWduZWQgVVJMOjpwYXRoQWZ0ZXJMYXN0U2xhc2goKSBjb25zdAogICAg
IHJldHVybiBtX3BhdGhBZnRlckxhc3RTbGFzaDsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3Zv
aWQgZW5hYmxlVVJMU2NoZW1lQ2Fub25pY2FsaXphdGlvbihib29sKTsKKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRn
ZXQuaAppbmRleCA0MDBmNmUwZWY5NDhhOWY1N2E1ZWFmMGUxOTk3NTZmZWE0NjhkN2U1Li42M2I2
M2Y1OTFkZmU5NWJhMDBmYjVmOThiYmRkNTZkNTNlZGRjZjc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9X
aWRnZXQuaApAQCAtMjcsNiArMjcsMTIgQEAKICNpZm5kZWYgV2lkZ2V0X2gKICNkZWZpbmUgV2lk
Z2V0X2gKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpZm5kZWYgTlNWaWV3CisjZGVmaW5lIE5TVmll
dyBXQUtWaWV3CisjZW5kaWYKKyNlbmRpZgorCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTE5MCw2
ICsxOTYsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbW92ZUZyb21TdXBlcnZpZXcoKTsKICNl
bmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIGFkZFRvU3VwZXJ2aWV3KE5TVmlldyop
OworI2VuZGlmCiAKICNpZiBQTEFURk9STShFRkwpCiAgICAgdm9pZCBzZXRFdmFzT2JqZWN0KEV2
YXNfT2JqZWN0Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9p
b3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAKaW5kZXggZjkzMjZlYTkyOGFlYWM3MmM5ZTNk
OGYzMjg4M2Q4MzI3OWUxNDQ3Yy4uYmVkZjg4ZjAwMDM4N2M4YjBlMTdmMjhlMDljYjEyZTliN2Fi
MjFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlv
RGVzdGluYXRpb25JT1MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lv
cy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcApAQCAtMjksOSArMjksNyBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaWYgUExBVEZPUk0oSU9TKQor
I2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFBMQVRGT1JNKElPUykKIAogI2luY2x1ZGUgIkF1ZGlv
RGVzdGluYXRpb25JT1MuaCIKIApAQCAtMjYyLDYgKzI2MCw1IEBAIHZvaWQgQXVkaW9EZXN0aW5h
dGlvbklPUzo6ZnJhbWVTaXplQ2hhbmdlZFByb2Modm9pZCAqaW5SZWZDb24sIEF1ZGlvVW5pdCwg
QXVkaW9VCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKSAmJiBQTEFURk9STShJT1MpCiAKLSNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmgKaW5kZXggZjBlZWVjYTE5Nzg2YzI4
NGFlNjM0YjljN2VhOTE3MjlkNDkzMzQyZC4uOGI2OGE2YWM4MzRlNWI2ODE1YmJhMmM4MDA0MTUw
ODNlOTQyOWQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9z
L0F1ZGlvRGVzdGluYXRpb25JT1MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5oCkBAIC03NiwzICs3Niw0IEBAIHByaXZhdGU6CiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBBdWRpb0Rlc3RpbmF0aW9uSU9TX2gK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmls
ZVJlYWRlcklPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9G
aWxlUmVhZGVySU9TLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjg1OWZiNmI2NDZjNDRmMjVlODFjMzJmMTk5
YWFkOGRjMDg3MGYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5jcHAKQEAgLTAsMCArMSwyNDggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF1ZGlvRmlsZVJlYWRlcklPUy5oIgorCisjaWYgRU5B
QkxFKFdFQl9BVURJTykgJiYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIK
KyNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgor
I2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3Rm
L0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitTT0ZU
X0xJTktfRlJBTUVXT1JLKEF1ZGlvVG9vbGJveCkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1
ZGlvRmlsZUNsb3NlLCBPU1N0YXR1cywgKEF1ZGlvRmlsZUlEIGluQXVkaW9GaWxlKSwgKGluQXVk
aW9GaWxlKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvRmlsZU9wZW5XaXRoQ2FsbGJh
Y2tzLCBPU1N0YXR1cywgKHZvaWQgKmluQ2xpZW50RGF0YSwgQXVkaW9GaWxlX1JlYWRQcm9jIGlu
UmVhZEZ1bmMsIEF1ZGlvRmlsZV9Xcml0ZVByb2MgaW5Xcml0ZUZ1bmMsIEF1ZGlvRmlsZV9HZXRT
aXplUHJvYyBpbkdldFNpemVGdW5jLCBBdWRpb0ZpbGVfU2V0U2l6ZVByb2MgaW5TZXRTaXplRnVu
YywgQXVkaW9GaWxlVHlwZUlEIGluRmlsZVR5cGVIaW50LCBBdWRpb0ZpbGVJRCAqb3V0QXVkaW9G
aWxlKSwgKGluQ2xpZW50RGF0YSwgaW5SZWFkRnVuYywgaW5Xcml0ZUZ1bmMsIGluR2V0U2l6ZUZ1
bmMsIGluU2V0U2l6ZUZ1bmMsIGluRmlsZVR5cGVIaW50LCBvdXRBdWRpb0ZpbGUpKQorU09GVF9M
SU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlRGlzcG9zZSwgT1NTdGF0dXMsIChFeHRBdWRp
b0ZpbGVSZWYgaW5FeHRBdWRpb0ZpbGUpLCAoaW5FeHRBdWRpb0ZpbGUpKQorU09GVF9MSU5LKEF1
ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlR2V0UHJvcGVydHksIE9TU3RhdHVzLCAoRXh0QXVkaW9G
aWxlUmVmIGluRXh0QXVkaW9GaWxlLCBFeHRBdWRpb0ZpbGVQcm9wZXJ0eUlEIGluUHJvcGVydHlJ
RCwgVUludDMyICppb1Byb3BlcnR5RGF0YVNpemUsIHZvaWQgKm91dFByb3BlcnR5RGF0YSksIChp
bkV4dEF1ZGlvRmlsZSwgaW5Qcm9wZXJ0eUlELCBpb1Byb3BlcnR5RGF0YVNpemUsIG91dFByb3Bl
cnR5RGF0YSkpCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBFeHRBdWRpb0ZpbGVSZWFkLCBPU1N0
YXR1cywgKEV4dEF1ZGlvRmlsZVJlZiBpbkV4dEF1ZGlvRmlsZSwgVUludDMyICppb051bWJlckZy
YW1lcywgQXVkaW9CdWZmZXJMaXN0ICppb0RhdGEpLCAoaW5FeHRBdWRpb0ZpbGUsIGlvTnVtYmVy
RnJhbWVzLCBpb0RhdGEpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlU2V0
UHJvcGVydHksIE9TU3RhdHVzLCAoRXh0QXVkaW9GaWxlUmVmIGluRXh0QXVkaW9GaWxlLCBFeHRB
dWRpb0ZpbGVQcm9wZXJ0eUlEIGluUHJvcGVydHlJRCwgVUludDMyIGluUHJvcGVydHlEYXRhU2l6
ZSwgY29uc3Qgdm9pZCAqaW5Qcm9wZXJ0eURhdGEpLCAoaW5FeHRBdWRpb0ZpbGUsIGluUHJvcGVy
dHlJRCwgaW5Qcm9wZXJ0eURhdGFTaXplLCBpblByb3BlcnR5RGF0YSkpCitTT0ZUX0xJTksoQXVk
aW9Ub29sYm94LCBFeHRBdWRpb0ZpbGVXcmFwQXVkaW9GaWxlSUQsIE9TU3RhdHVzLCAoQXVkaW9G
aWxlSUQgaW5GaWxlSUQsIEJvb2xlYW4gaW5Gb3JXcml0aW5nLCBFeHRBdWRpb0ZpbGVSZWYgKm91
dEV4dEF1ZGlvRmlsZSksIChpbkZpbGVJRCwgaW5Gb3JXcml0aW5nLCBvdXRFeHRBdWRpb0ZpbGUp
KQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlT3BlblVSTCwgT1NTdGF0dXMs
IChDRlVSTFJlZiBpblVSTCwgRXh0QXVkaW9GaWxlUmVmKiBvdXRFeHRBdWRpb0ZpbGUpLCAoaW5V
UkwsIG91dEV4dEF1ZGlvRmlsZSkpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFdB
Uk5fVU5VU0VEX1JFVFVSTiBBdWRpb0J1ZmZlckxpc3QqIGNyZWF0ZUF1ZGlvQnVmZmVyTGlzdChz
aXplX3QgbnVtYmVyT2ZCdWZmZXJzKQoreworICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVy
Zmxvdz4gYnVmZmVyTGlzdFNpemUgPSBzaXplb2YoQXVkaW9CdWZmZXJMaXN0KSAtIHNpemVvZihB
dWRpb0J1ZmZlcik7CisgICAgYnVmZmVyTGlzdFNpemUgKz0gbnVtYmVyT2ZCdWZmZXJzICogc2l6
ZW9mKEF1ZGlvQnVmZmVyKTsKKworICAgIEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCA9IHN0
YXRpY19jYXN0PEF1ZGlvQnVmZmVyTGlzdCo+KGNhbGxvYygxLCBidWZmZXJMaXN0U2l6ZS51bnNh
ZmVHZXQoKSkpOworICAgIGlmIChidWZmZXJMaXN0KQorICAgICAgICBidWZmZXJMaXN0LT5tTnVt
YmVyQnVmZmVycyA9IG51bWJlck9mQnVmZmVyczsKKyAgICByZXR1cm4gYnVmZmVyTGlzdDsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoQXVkaW9CdWZmZXJM
aXN0KiBidWZmZXJMaXN0KQoreworICAgIGZyZWUoYnVmZmVyTGlzdCk7Cit9CisKK0F1ZGlvRmls
ZVJlYWRlcjo6QXVkaW9GaWxlUmVhZGVyKGNvbnN0IGNoYXIqIGZpbGVQYXRoKQorICAgIDogbV9k
YXRhKDApCisgICAgLCBtX2RhdGFTaXplKDApCisgICAgLCBtX2F1ZGlvRmlsZUlEKDApCisgICAg
LCBtX2V4dEF1ZGlvRmlsZVJlZihudWxscHRyKQoreworICAgIFJldGFpblB0cjxDRlVSTFJlZj4g
dXJsUmVmID0gYWRvcHRDRihDRlVSTENyZWF0ZUZyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
a0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGZpbGVQ
YXRoKSwgc3RybGVuKGZpbGVQYXRoKSwgZmFsc2UpKTsKKyAgICBpZiAoIXVybFJlZikKKyAgICAg
ICAgcmV0dXJuOworICAgIEV4dEF1ZGlvRmlsZU9wZW5VUkwodXJsUmVmLmdldCgpLCAmbV9leHRB
dWRpb0ZpbGVSZWYpOworfQorCitBdWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcihjb25z
dCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCisgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAs
IG1fZGF0YVNpemUoZGF0YVNpemUpCisgICAgLCBtX2F1ZGlvRmlsZUlEKDApCisgICAgLCBtX2V4
dEF1ZGlvRmlsZVJlZihudWxscHRyKQoreworICAgIGlmIChBdWRpb0ZpbGVPcGVuV2l0aENhbGxi
YWNrcyh0aGlzLCByZWFkUHJvYywgMCwgZ2V0U2l6ZVByb2MsIDAsIDAsICZtX2F1ZGlvRmlsZUlE
KSAhPSBub0VycikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKEV4dEF1ZGlvRmlsZVdyYXBB
dWRpb0ZpbGVJRChtX2F1ZGlvRmlsZUlELCBmYWxzZSwgJm1fZXh0QXVkaW9GaWxlUmVmKSAhPSBu
b0VycikKKyAgICAgICAgbV9leHRBdWRpb0ZpbGVSZWYgPSBudWxscHRyOworfQorCitBdWRpb0Zp
bGVSZWFkZXI6On5BdWRpb0ZpbGVSZWFkZXIoKQoreworICAgIGlmIChtX2V4dEF1ZGlvRmlsZVJl
ZikKKyAgICAgICAgRXh0QXVkaW9GaWxlRGlzcG9zZShtX2V4dEF1ZGlvRmlsZVJlZik7CisKKyAg
ICBtX2V4dEF1ZGlvRmlsZVJlZiA9IG51bGxwdHI7CisKKyAgICBpZiAobV9hdWRpb0ZpbGVJRCkK
KyAgICAgICAgQXVkaW9GaWxlQ2xvc2UobV9hdWRpb0ZpbGVJRCk7CisKKyAgICBtX2F1ZGlvRmls
ZUlEID0gMDsKK30KKworT1NTdGF0dXMgQXVkaW9GaWxlUmVhZGVyOjpyZWFkUHJvYyh2b2lkKiBj
bGllbnREYXRhLCBTSW50NjQgcG9zaXRpb24sIFVJbnQzMiByZXF1ZXN0Q291bnQsIHZvaWQqIGJ1
ZmZlciwgVUludDMyKiBhY3R1YWxDb3VudCkKK3sKKyAgICBBdWRpb0ZpbGVSZWFkZXIqIGF1ZGlv
RmlsZVJlYWRlciA9IHN0YXRpY19jYXN0PEF1ZGlvRmlsZVJlYWRlcio+KGNsaWVudERhdGEpOwor
CisgICAgc2l6ZV90IGRhdGFTaXplID0gYXVkaW9GaWxlUmVhZGVyLT5kYXRhU2l6ZSgpOworICAg
IGNvbnN0IHZvaWQqIGRhdGEgPSBhdWRpb0ZpbGVSZWFkZXItPmRhdGEoKTsKKyAgICBzaXplX3Qg
Ynl0ZXNUb1JlYWQgPSAwOworCisgICAgaWYgKHN0YXRpY19jYXN0PFVJbnQ2ND4ocG9zaXRpb24p
IDwgZGF0YVNpemUpIHsKKyAgICAgICAgc2l6ZV90IGJ5dGVzQXZhaWxhYmxlID0gZGF0YVNpemUg
LSBzdGF0aWNfY2FzdDxzaXplX3Q+KHBvc2l0aW9uKTsKKyAgICAgICAgYnl0ZXNUb1JlYWQgPSBy
ZXF1ZXN0Q291bnQgPD0gYnl0ZXNBdmFpbGFibGUgPyByZXF1ZXN0Q291bnQgOiBieXRlc0F2YWls
YWJsZTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRh
dGEpICsgcG9zaXRpb24sIGJ5dGVzVG9SZWFkKTsKKyAgICB9CisKKyAgICBpZiAoYWN0dWFsQ291
bnQpCisgICAgICAgICphY3R1YWxDb3VudCA9IGJ5dGVzVG9SZWFkOworCisgICAgcmV0dXJuIG5v
RXJyOworfQorCitTSW50NjQgQXVkaW9GaWxlUmVhZGVyOjpnZXRTaXplUHJvYyh2b2lkKiBjbGll
bnREYXRhKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdWRpb0ZpbGVSZWFkZXIqPihjbGll
bnREYXRhKS0+ZGF0YVNpemUoKTsKK30KKworUGFzc1JlZlB0cjxBdWRpb0J1cz4gQXVkaW9GaWxl
UmVhZGVyOjpjcmVhdGVCdXMoZmxvYXQgc2FtcGxlUmF0ZSwgYm9vbCBtaXhUb01vbm8pCit7Cisg
ICAgaWYgKCFtX2V4dEF1ZGlvRmlsZVJlZikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAvLyBHZXQgZmlsZSdzIGRhdGEgZm9ybWF0CisgICAgVUludDMyIHNpemUgPSBzaXplb2YobV9m
aWxlRGF0YUZvcm1hdCk7CisgICAgaWYgKEV4dEF1ZGlvRmlsZUdldFByb3BlcnR5KG1fZXh0QXVk
aW9GaWxlUmVmLCBrRXh0QXVkaW9GaWxlUHJvcGVydHlfRmlsZURhdGFGb3JtYXQsICZzaXplLCAm
bV9maWxlRGF0YUZvcm1hdCkgIT0gbm9FcnIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMgPSBtX2ZpbGVEYXRhRm9ybWF0Lm1DaGFubmVsc1Bl
ckZyYW1lOworCisgICAgLy8gTnVtYmVyIG9mIGZyYW1lcworICAgIFNJbnQ2NCBudW1iZXJPZkZy
YW1lczY0ID0gMDsKKyAgICBzaXplID0gc2l6ZW9mKG51bWJlck9mRnJhbWVzNjQpOworICAgIGlm
IChFeHRBdWRpb0ZpbGVHZXRQcm9wZXJ0eShtX2V4dEF1ZGlvRmlsZVJlZiwga0V4dEF1ZGlvRmls
ZVByb3BlcnR5X0ZpbGVMZW5ndGhGcmFtZXMsICZzaXplLCAmbnVtYmVyT2ZGcmFtZXM2NCkgIT0g
bm9FcnIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZG91YmxlIGZpbGVTYW1wbGVS
YXRlID0gbV9maWxlRGF0YUZvcm1hdC5tU2FtcGxlUmF0ZTsKKworICAgIC8vIE1ha2UgY2xpZW50
IGZvcm1hdCBzYW1lIG51bWJlciBvZiBjaGFubmVscyBhcyBmaWxlIGZvcm1hdCwgYnV0IHR3ZWFr
IGEgZmV3IHRoaW5ncy4KKyAgICAvLyBDbGllbnQgZm9ybWF0IHdpbGwgYmUgbGluZWFyIFBDTSAo
Y2Fub25pY2FsKSwgYW5kIHBvdGVudGlhbGx5IGNoYW5nZSBzYW1wbGUtcmF0ZS4KKyAgICBtX2Ns
aWVudERhdGFGb3JtYXQgPSBtX2ZpbGVEYXRhRm9ybWF0OworCisgICAgY29uc3QgaW50IGJ5dGVz
UGVyRmxvYXQgPSBzaXplb2YoRmxvYXQzMik7CisgICAgY29uc3QgaW50IGJpdHNQZXJCeXRlID0g
ODsKKyAgICBtX2NsaWVudERhdGFGb3JtYXQubUZvcm1hdElEID0ga0F1ZGlvRm9ybWF0TGluZWFy
UENNOworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tRm9ybWF0RmxhZ3MgPSBrQXVkaW9Gb3JtYXRG
bGFnc05hdGl2ZUZsb2F0UGFja2VkIHwga0F1ZGlvRm9ybWF0RmxhZ0lzTm9uSW50ZXJsZWF2ZWQ7
CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1CeXRlc1BlclBhY2tldCA9IGJ5dGVzUGVyRmxvYXQ7
CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1GcmFtZXNQZXJQYWNrZXQgPSAxOworICAgIG1fY2xp
ZW50RGF0YUZvcm1hdC5tQnl0ZXNQZXJGcmFtZSA9IGJ5dGVzUGVyRmxvYXQ7CisgICAgbV9jbGll
bnREYXRhRm9ybWF0Lm1DaGFubmVsc1BlckZyYW1lID0gbnVtYmVyT2ZDaGFubmVsczsKKyAgICBt
X2NsaWVudERhdGFGb3JtYXQubUJpdHNQZXJDaGFubmVsID0gYml0c1BlckJ5dGUgKiBieXRlc1Bl
ckZsb2F0OworCisgICAgaWYgKHNhbXBsZVJhdGUpCisgICAgICAgIG1fY2xpZW50RGF0YUZvcm1h
dC5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7CisKKyAgICBpZiAoRXh0QXVkaW9GaWxlU2V0UHJv
cGVydHkobV9leHRBdWRpb0ZpbGVSZWYsIGtFeHRBdWRpb0ZpbGVQcm9wZXJ0eV9DbGllbnREYXRh
Rm9ybWF0LCBzaXplb2YoQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKSwgJm1fY2xpZW50RGF0
YUZvcm1hdCkgIT0gbm9FcnIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gQ2hh
bmdlIG51bWJlck9mRnJhbWVzNjQgdG8gZGVzdGluYXRpb24gc2FtcGxlLXJhdGUKKyAgICBudW1i
ZXJPZkZyYW1lczY0ID0gbnVtYmVyT2ZGcmFtZXM2NCAqIChtX2NsaWVudERhdGFGb3JtYXQubVNh
bXBsZVJhdGUgLyBmaWxlU2FtcGxlUmF0ZSk7CisgICAgc2l6ZV90IG51bWJlck9mRnJhbWVzID0g
c3RhdGljX2Nhc3Q8c2l6ZV90PihudW1iZXJPZkZyYW1lczY0KTsKKworICAgIHNpemVfdCBidXND
aGFubmVsQ291bnQgPSBtaXhUb01vbm8gPyAxIDogbnVtYmVyT2ZDaGFubmVsczsKKworICAgIC8v
IENyZWF0ZSBBdWRpb0J1cyB3aGVyZSB3ZSdsbCBwdXQgdGhlIFBDTSBhdWRpbyBkYXRhCisgICAg
UmVmUHRyPEF1ZGlvQnVzPiBhdWRpb0J1cyA9IEF1ZGlvQnVzOjpjcmVhdGUoYnVzQ2hhbm5lbENv
dW50LCBudW1iZXJPZkZyYW1lcyk7CisgICAgYXVkaW9CdXMtPnNldFNhbXBsZVJhdGUobV9jbGll
bnREYXRhRm9ybWF0Lm1TYW1wbGVSYXRlKTsgLy8gc2F2ZSBmb3IgbGF0ZXIKKworICAgIC8vIE9u
bHkgYWxsb2NhdGVkIGluIHRoZSBtaXhUb01vbm8gY2FzZTsgZGVhbGxvY2F0ZWQgb24gZGVzdHJ1
Y3Rpb24uCisgICAgQXVkaW9GbG9hdEFycmF5IGxlZnRDaGFubmVsOworICAgIEF1ZGlvRmxvYXRB
cnJheSByaWdodENoYW5uZWw7CisKKyAgICBBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxpc3QgPSBj
cmVhdGVBdWRpb0J1ZmZlckxpc3QobnVtYmVyT2ZDaGFubmVscyk7CisgICAgaWYgKCFidWZmZXJM
aXN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjb25zdCBzaXplX3QgYnVmZmVyU2l6
ZSA9IG51bWJlck9mRnJhbWVzICogc2l6ZW9mKGZsb2F0KTsKKworICAgIGlmIChtaXhUb01vbm8g
JiYgbnVtYmVyT2ZDaGFubmVscyA9PSAyKSB7CisgICAgICAgIGxlZnRDaGFubmVsLmFsbG9jYXRl
KG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAgcmlnaHRDaGFubmVsLmFsbG9jYXRlKG51bWJlck9m
RnJhbWVzKTsKKworICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1swXS5tTnVtYmVyQ2hhbm5l
bHMgPSAxOworICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1swXS5tRGF0YUJ5dGVTaXplID0g
YnVmZmVyU2l6ZTsKKyAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMF0ubURhdGEgPSBsZWZ0
Q2hhbm5lbC5kYXRhKCk7CisKKyAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMV0ubU51bWJl
ckNoYW5uZWxzID0gMTsKKyAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMV0ubURhdGFCeXRl
U2l6ZSA9IGJ1ZmZlclNpemU7CisgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1EYXRh
ID0gcmlnaHRDaGFubmVsLmRhdGEoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1p
eFRvTW9ubyB8fCBudW1iZXJPZkNoYW5uZWxzID09IDEpOworCisgICAgICAgIC8vIEZvciBUcnVl
LXN0ZXJlbyAobnVtYmVyT2ZDaGFubmVscyA9PSA0KQorICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICAgICAgYXVkaW9CdXMtPmNo
YW5uZWwoaSktPnplcm8oKTsKKyAgICAgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1O
dW1iZXJDaGFubmVscyA9IDE7CisgICAgICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5t
RGF0YUJ5dGVTaXplID0gYnVmZmVyU2l6ZTsKKyAgICAgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZm
ZXJzW2ldLm1EYXRhID0gYXVkaW9CdXMtPmNoYW5uZWwoaSktPm11dGFibGVEYXRhKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBSZWFkIGZyb20gdGhlIGZpbGUgKG9yIGluLW1lbW9yeSB2
ZXJzaW9uKQorICAgIFVJbnQzMiBmcmFtZXNUb1JlYWQgPSBudW1iZXJPZkZyYW1lczsKKyAgICBp
ZiAoRXh0QXVkaW9GaWxlUmVhZChtX2V4dEF1ZGlvRmlsZVJlZiwgJmZyYW1lc1RvUmVhZCwgYnVm
ZmVyTGlzdCkgIT0gbm9FcnIpIHsKKyAgICAgICAgZGVzdHJveUF1ZGlvQnVmZmVyTGlzdChidWZm
ZXJMaXN0KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1peFRv
TW9ubyAmJiBudW1iZXJPZkNoYW5uZWxzID09IDIpIHsKKyAgICAgICAgLy8gTWl4IHN0ZXJlbyBk
b3duIHRvIG1vbm8KKyAgICAgICAgZmxvYXQqIGRlc3RMID0gYXVkaW9CdXMtPmNoYW5uZWwoMCkt
Pm11dGFibGVEYXRhKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZG
cmFtZXM7ICsraSkKKyAgICAgICAgICAgIGRlc3RMW2ldID0gMC41ZiAqIChsZWZ0Q2hhbm5lbFtp
XSArIHJpZ2h0Q2hhbm5lbFtpXSk7CisgICAgfQorCisgICAgZGVzdHJveUF1ZGlvQnVmZmVyTGlz
dChidWZmZXJMaXN0KTsKKworICAgIHJldHVybiBhdWRpb0J1cy5yZWxlYXNlKCk7Cit9CisKK1Bh
c3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUoY29uc3QgY2hhciogZmls
ZVBhdGgsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQoreworICAgIEF1ZGlvRmls
ZVJlYWRlciByZWFkZXIoZmlsZVBhdGgpOworICAgIHJldHVybiByZWFkZXIuY3JlYXRlQnVzKHNh
bXBsZVJhdGUsIG1peFRvTW9ubyk7Cit9CisKK1Bhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1
c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUs
IGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQoreworICAgIEF1ZGlvRmlsZVJlYWRl
ciByZWFkZXIoZGF0YSwgZGF0YVNpemUpOworICAgIHJldHVybiByZWFkZXIuY3JlYXRlQnVzKHNh
bXBsZVJhdGUsIG1peFRvTW9ubyk7Cit9CisKK30gLy8gV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQl9BVURJTykgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVl
ZjU2OTMzZWZkN2VhODdhZDViY2VlOTc4M2EwMzZhMDY5Njg5OTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9GaWxlUmVhZGVySU9TLmgK
QEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvRmlsZVJlYWRlcklPU19oCisjZGVmaW5lIEF1
ZGlvRmlsZVJlYWRlcklPU19oCisKKyNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9GaWxlLmg+
CisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0V4dGVuZGVkQXVkaW9GaWxlLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1
czsKKworLy8gV3JhcHBlciBjbGFzcyBmb3IgQXVkaW9GaWxlIGFuZCBFeHRBdWRpb0ZpbGUgQ29y
ZUF1ZGlvIEFQSXMgZm9yIHJlYWRpbmcgZmlsZXMgYW5kIGluLW1lbW9yeSB2ZXJzaW9ucyBvZiB0
aGVtLi4uCisKK2NsYXNzIEF1ZGlvRmlsZVJlYWRlciB7CitwdWJsaWM6CisgICAgQXVkaW9GaWxl
UmVhZGVyKGNvbnN0IGNoYXIqIGZpbGVQYXRoKTsKKyAgICBBdWRpb0ZpbGVSZWFkZXIoY29uc3Qg
dm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplKTsKKyAgICB+QXVkaW9GaWxlUmVhZGVyKCk7CisK
KyAgICBQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXMoZmxvYXQgc2FtcGxlUmF0ZSwgYm9v
bCBtaXhUb01vbm8pOyAvLyBSZXR1cm5zIG51bGxwdHIgb24gZXJyb3IKKworICAgIGNvbnN0IHZv
aWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBzaXplX3QgZGF0YVNpemUo
KSBjb25zdCB7IHJldHVybiBtX2RhdGFTaXplOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIE9T
U3RhdHVzIHJlYWRQcm9jKHZvaWQqIGNsaWVudERhdGEsIFNJbnQ2NCBwb3NpdGlvbiwgVUludDMy
IHJlcXVlc3RDb3VudCwgdm9pZCogYnVmZmVyLCBVSW50MzIqIGFjdHVhbENvdW50KTsKKyAgICBz
dGF0aWMgU0ludDY0IGdldFNpemVQcm9jKHZvaWQqIGNsaWVudERhdGEpOworCisgICAgY29uc3Qg
dm9pZCogbV9kYXRhOworICAgIHNpemVfdCBtX2RhdGFTaXplOworCisgICAgQXVkaW9GaWxlSUQg
bV9hdWRpb0ZpbGVJRDsKKyAgICBFeHRBdWRpb0ZpbGVSZWYgbV9leHRBdWRpb0ZpbGVSZWY7CisK
KyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gbV9maWxlRGF0YUZvcm1hdDsKKyAgICBB
dWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gbV9jbGllbnREYXRhRm9ybWF0OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQXVkaW9GaWxlUmVhZGVySU9TX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb1Nlc3Npb25J
T1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9TZXNzaW9uSU9T
Lm1tCmluZGV4IDc5ZTI2MWFhMGY4YTRiODc1Y2Y0Y2U1MjlmZTM1NDY1Yjg0MzJiNzkuLjM0OWMx
ZjVkODM5M2M1M2VkNDgwODlmYzhlNGRhMTVhM2Q4MTY4Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb1Nlc3Npb25JT1MubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvU2Vzc2lvbklPUy5tbQpAQCAtNDIsNyAr
NDIsNiBAQCBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uQ2F0
ZWdvcnlQbGF5YmFjaywgTlNTdHJpbmcgKikKIFNPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlv
biwgQVZBdWRpb1Nlc3Npb25DYXRlZ29yeVJlY29yZCwgTlNTdHJpbmcgKikKIFNPRlRfTElOS19Q
T0lOVEVSKEFWRm91bmRhdGlvbiwgQVZBdWRpb1Nlc3Npb25DYXRlZ29yeVBsYXlBbmRSZWNvcmQs
IE5TU3RyaW5nICopCiBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNz
aW9uQ2F0ZWdvcnlBdWRpb1Byb2Nlc3NpbmcsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRF
UihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uTm90aWZpY2F0aW9uLCBO
U1N0cmluZyAqKQogU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vzc2lv
bkludGVycnVwdGlvblR5cGVLZXksIE5TU3RyaW5nICopCiAKICNkZWZpbmUgQVZBdWRpb1Nlc3Np
b24gZ2V0QVZBdWRpb1Nlc3Npb25DbGFzcygpCkBAIC01Miw5ICs1MSwxNCBAQCBTT0ZUX0xJTktf
UE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uVHlwZUtleSwg
TlNTdHJpbmcgKikKICNkZWZpbmUgQVZBdWRpb1Nlc3Npb25DYXRlZ29yeVJlY29yZCBnZXRBVkF1
ZGlvU2Vzc2lvbkNhdGVnb3J5UmVjb3JkKCkKICNkZWZpbmUgQVZBdWRpb1Nlc3Npb25DYXRlZ29y
eVBsYXlBbmRSZWNvcmQgZ2V0QVZBdWRpb1Nlc3Npb25DYXRlZ29yeVBsYXlBbmRSZWNvcmQoKQog
I2RlZmluZSBBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5QXVkaW9Qcm9jZXNzaW5nIGdldEFWQXVkaW9T
ZXNzaW9uQ2F0ZWdvcnlBdWRpb1Byb2Nlc3NpbmcoKQotI2RlZmluZSBBVkF1ZGlvU2Vzc2lvbklu
dGVycnVwdGlvbk5vdGlmaWNhdGlvbiBnZXRBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlm
aWNhdGlvbigpCiAjZGVmaW5lIEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uVHlwZUtleSBnZXRB
VkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXkoKQogCitzdGF0aWMgTlNTdHJpbmcgKiBj
b25zdCBXQ0FWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uTm90aWZpY2F0aW9uID0gQCJBVkF1ZGlv
U2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiI7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVE
CitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0
aW9uTm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKQorI2VuZGlmCisKIEBpbnRlcmZhY2UgV2ViQXVk
aW9TZXNzaW9uSGVscGVyIDogTlNPYmplY3QgewogICAgIFdlYkNvcmU6OkF1ZGlvU2Vzc2lvbiog
X2NhbGxiYWNrOwogfQpAQCAtNzEsMTkgKzc1LDI1IEBAIFNPRlRfTElOS19QT0lOVEVSKEFWRm91
bmRhdGlvbiwgQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25UeXBlS2V5LCBOU1N0cmluZyAqKQog
CiAgICAgX2NhbGxiYWNrID0gY2FsbGJhY2s7CiAKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVy
IGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGludGVy
cnVwdGlvbjopIG5hbWU6QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24gb2Jq
ZWN0OltBVkF1ZGlvU2Vzc2lvbiBzaGFyZWRJbnN0YW5jZV1dOworICAgIEFTU0VSVChbV0NBVkF1
ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiBpc0VxdWFsVG9TdHJpbmc6Z2V0QVZB
dWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24oKV0pOworCisgICAgW1tOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihpbnRlcnJ1cHRpb246KSBuYW1lOldDQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25O
b3RpZmljYXRpb24gb2JqZWN0Om5pbF07CiAKICAgICByZXR1cm4gc2VsZjsKIH0KIAogLSAodm9p
ZClkZWFsbG9jCiB7Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBy
ZW1vdmVPYnNlcnZlcjpzZWxmXTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpXQ0FWQXVkaW9TZXNzaW9uSW50ZXJydXB0
aW9uTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAog
LSAodm9pZClpbnRlcnJ1cHRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7Cisg
ICAgQVNTRVJUKFtBVkF1ZGlvU2Vzc2lvbiBzaGFyZWRJbnN0YW5jZV0gPT0gW25vdGlmaWNhdGlv
biBvYmplY3RdKTsKKyAgICBpZiAoW0FWQXVkaW9TZXNzaW9uIHNoYXJlZEluc3RhbmNlXSAhPSBb
bm90aWZpY2F0aW9uIG9iamVjdF0pCisgICAgICAgIHJldHVybjsKKwogICAgIE5TVUludGVnZXIg
dHlwZSA9IFtbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkFWQXVkaW9TZXNz
aW9uSW50ZXJydXB0aW9uVHlwZUtleV0gdW5zaWduZWRJbnRlZ2VyVmFsdWVdOwogICAgIGlmICh0
eXBlID09IEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uVHlwZUJlZ2FuKQogICAgICAgICBfY2Fs
bGJhY2stPmJlZ2FuQXVkaW9JbnRlcnJ1cHRpb24oKTsKQEAgLTEzMywxOSArMTQzLDI2IEBAIHZv
aWQgQXVkaW9TZXNzaW9uOjpzZXRDYXRlZ29yeShDYXRlZ29yeVR5cGUgbmV3Q2F0ZWdvcnkpCiAg
ICAgc3dpdGNoIChuZXdDYXRlZ29yeSkgewogICAgIGNhc2UgQW1iaWVudFNvdW5kOgogICAgICAg
ICBjYXRlZ29yeVN0cmluZyA9IEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlBbWJpZW50OworICAgICAg
ICBicmVhazsKICAgICBjYXNlIFNvbG9BbWJpZW50U291bmQ6CiAgICAgICAgIGNhdGVnb3J5U3Ry
aW5nID0gQVZBdWRpb1Nlc3Npb25DYXRlZ29yeVNvbG9BbWJpZW50OworICAgICAgICBicmVhazsK
ICAgICBjYXNlIE1lZGlhUGxheWJhY2s6CiAgICAgICAgIGNhdGVnb3J5U3RyaW5nID0gQVZBdWRp
b1Nlc3Npb25DYXRlZ29yeVBsYXliYWNrOworICAgICAgICBicmVhazsKICAgICBjYXNlIFJlY29y
ZEF1ZGlvOgogICAgICAgICBjYXRlZ29yeVN0cmluZyA9IEFWQXVkaW9TZXNzaW9uQ2F0ZWdvcnlS
ZWNvcmQ7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUGxheUFuZFJlY29yZDoKICAgICAgICAg
Y2F0ZWdvcnlTdHJpbmcgPSBBVkF1ZGlvU2Vzc2lvbkNhdGVnb3J5UGxheUFuZFJlY29yZDsKKyAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBBdWRpb1Byb2Nlc3Npbmc6CiAgICAgICAgIGNhdGVnb3J5
U3RyaW5nID0gQVZBdWRpb1Nlc3Npb25DYXRlZ29yeUF1ZGlvUHJvY2Vzc2luZzsKKyAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBOb25lOgogICAgIGRlZmF1bHQ6CiAgICAgICAgIGNhdGVnb3J5U3Ry
aW5nID0gbmlsOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgTlNFcnJvciAqZXJyb3IgPSBu
aWw7CiAgICAgW1tBVkF1ZGlvU2Vzc2lvbiBzaGFyZWRJbnN0YW5jZV0gc2V0Q2F0ZWdvcnk6Y2F0
ZWdvcnlTdHJpbmcgZXJyb3I6JmVycm9yXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcAppbmRleCBiMGVkYTgx
NWUzYzU5NzRkNWNhY2MyNzY0YjA3MmZhNmI4OGQ2NTMxLi4zYzc2Y2Y1MzRlOTYyNWQzYTA5ZTFk
NjU0YzBlMzBiYjZmOTFmZDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuY3BwCkBAIC0zMCw2ICszMCw4IEBA
CiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQogCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZP
Uk0oSU9TKQorCiAjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk1hYy5oIgogCiAjaW5jbHVkZSAi
QXVkaW9JT0NhbGxiYWNrLmgiCkBAIC0xODEsNCArMTgzLDYgQEAgT1NTdGF0dXMgQXVkaW9EZXN0
aW5hdGlvbk1hYzo6aW5wdXRQcm9jKHZvaWQqIHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rp
b25GbGEKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KSAmJiAhUExBVEZPUk0oSU9TKQorCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJN
YWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRl
ck1hYy5jcHAKaW5kZXggZWQyZWQ1NWE5ZTI5MGI3ODE2ZjZjM2U0YTIxZmJhNzc5YTI4N2Y3Yy4u
N2QyNTk0YzY0OTJiNTI1NmNmNzE5NjhhN2U2YjU1Y2M1NDViMTJjYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5j
cHAKQEAgLTMwLDYgKzMwLDggQEAKIAogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAKKyNpZiBQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShJT1MpCisKICNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXJN
YWMuaCIKIAogI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCkBAIC01OCw3ICs2MCw3IEBAIHN0YXRpYyB2
b2lkIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoQXVkaW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0KQog
fQogCiBBdWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcihjb25zdCBjaGFyKiBmaWxlUGF0
aCkKLSAgICA6IG1fZGF0YSgwKQorICAgIDogbV9kYXRhKG51bGxwdHIpCiAgICAgLCBtX2RhdGFT
aXplKDApCiAgICAgLCBtX2F1ZGlvRmlsZUlEKDApCiAgICAgLCBtX2V4dEF1ZGlvRmlsZVJlZigw
KQpAQCAtMjM3LDE2ICsyMzksMTYgQEAgUGFzc1JlZlB0cjxBdWRpb0J1cz4gQXVkaW9GaWxlUmVh
ZGVyOjpjcmVhdGVCdXMoZmxvYXQgc2FtcGxlUmF0ZSwgYm9vbCBtaXhUb01vbm8KIAogUGFzc1Jl
ZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUF1ZGlvRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0
aCwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCiB7Ci0gICAgQXVkaW9GaWxlUmVh
ZGVyIHJlYWRlcihmaWxlUGF0aCk7Ci0gICAgcmV0dXJuIHJlYWRlci5jcmVhdGVCdXMoc2FtcGxl
UmF0ZSwgbWl4VG9Nb25vKTsKKyAgICByZXR1cm4gQXVkaW9GaWxlUmVhZGVyKGZpbGVQYXRoKS5j
cmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKIH0KIAogUGFzc1JlZlB0cjxBdWRpb0J1
cz4gY3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVf
dCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCiB7Ci0gICAgQXVk
aW9GaWxlUmVhZGVyIHJlYWRlcihkYXRhLCBkYXRhU2l6ZSk7Ci0gICAgcmV0dXJuIHJlYWRlci5j
cmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKKyAgICByZXR1cm4gQXVkaW9GaWxlUmVh
ZGVyKGRhdGEsIGRhdGFTaXplKS5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKIH0K
IAotfSAvLyBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2Vz
c2lvbk1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TZXNz
aW9uTWFjLmNwcAppbmRleCA3Nzg4NDcyY2Y0ZmJlM2YwYTMyN2IxYzY5ODYyZjI2MjVlMWE1OWVl
Li4zNWUyOGFiMThmNTkzZjg2OWYxNjk4OGE3YjcwMGFhZjcxZGZkMTI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TZXNzaW9uTWFjLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TZXNzaW9uTWFjLmNwcApA
QCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkF1ZGlvU2Vz
c2lvbi5oIgogCi0jaWYgVVNFKEFVRElPX1NFU1NJT04pICYmIFBMQVRGT1JNKE1BQykKKyNpZiBV
U0UoQVVESU9fU0VTU0lPTikgJiYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogCiAj
aW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL01lZGlhU2Vzc2lvbk1hbmFn
ZXJNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL01lZGlhU2Vzc2lv
bk1hbmFnZXJNYWMuY3BwCmluZGV4IGRhMDgyYTZmMjIyOTQ4MTQ5NWE1NTM5ODVhMmQwZWI5OTFl
NThiNTYuLjhiZTdlNmU4ZGE0NWJiMzlkNThjMmJjM2E2MmZkNTBmNTA2NjFmMzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9NZWRpYVNlc3Npb25NYW5hZ2Vy
TWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvTWVkaWFTZXNz
aW9uTWFuYWdlck1hYy5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBNZWRpYVNlc3Npb25NYW5h
Z2VyOjp1cGRhdGVTZXNzaW9uU3RhdGUoKQogICAgICAgICBBdWRpb1Nlc3Npb246OnNoYXJlZFNl
c3Npb24oKS5zZXRQcmVmZXJyZWRCdWZmZXJTaXplKGtXZWJBdWRpb0J1ZmZlclNpemUpOwogICAg
IC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTY3MjU+IEZpZ3VyZSBvdXQgd2h5IGVu
YWJsaW5nIHRoZSBjb2RlIGJlbG93CiAgICAgLy8gY2F1c2VzIG1lZGlhIExheW91dFRlc3RzIHRv
IGZhaWwgb24gMTAuOC4KLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
OTAKKyNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTA5MAogICAgIGVsc2UgaWYgKChoYXMoTWVkaWFTZXNzaW9uOjpWaWRlbykgfHwgaGFzKE1l
ZGlhU2Vzc2lvbjo6QXVkaW8pKSAmJiBTZXR0aW5nczo6bG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVy
U2l6ZUVuYWJsZWQoKSkKICAgICAgICAgQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2V0
UHJlZmVycmVkQnVmZmVyU2l6ZShrTG93UG93ZXJWaWRlb0J1ZmZlclNpemUpOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAKaW5kZXggOGU3
YzdhMzc1NWEwODFmZDk0N2E0NjVmYjMyYTViMjRjYzFiMTkyNi4uZTE4NTkzOTAwYzYyOWVlOWIz
OTcyYTE1ZGFmMjg3Nzg5NDU1MTY3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nm
L1NoYXJlZEJ1ZmZlckNGLmNwcApAQCAtMzgsMTMgKzM4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoQ0ZEYXRhUmVmIGNmRGF0YSkKICAgICA6
IG1fc2l6ZSgwKQotICAgICwgbV9jZkRhdGEoY2ZEYXRhKQorICAgICwgbV9zaG91bGRVc2VQdXJn
ZWFibGVNZW1vcnkoZmFsc2UpCiAjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCiAgICAgLCBt
X2lzTWVtb3J5TWFwcGVkKGZhbHNlKQogICAgICwgbV9kaXNrSW1hZ2VDYWNoZUlkKERpc2tJbWFn
ZUNhY2hlOjppbnZhbGlkRGlza0NhY2hlSWQpCiAgICAgLCBtX25vdGlmeU1lbW9yeU1hcHBlZENh
bGxiYWNrKG51bGxwdHIpCiAgICAgLCBtX25vdGlmeU1lbW9yeU1hcHBlZENhbGxiYWNrRGF0YShu
dWxscHRyKQogI2VuZGlmCisgICAgLCBtX2NmRGF0YShjZkRhdGEpCiB7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1VSTENGLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NmL1VSTENGLmNwcAppbmRleCBiM2VjYjUwMzE5MjIyYTJkNDRhYWE3ZDQ4Y2Ni
MTM1YmVlMzUzOWM5Li41YjE2OTQ4NzY2ZDMzOGZmMzQ5YzRlZjUyNjQ4YjVjNGE0NmM3NDI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9VUkxDRi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvVVJMQ0YuY3BwCkBAIC0zMCw2ICszMCwxMSBAQAogI2lu
Y2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGVVJMLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNo
ZWNrc0lPUy5oIgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUHJpdi5oPgorI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVVJMOjpVUkwoQ0ZVUkxSZWYgdXJsKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvS2V5RXZlbnRDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0tleUV2ZW50Q29jb2EubW0KaW5kZXggYTEyNWI2YTEw
ZjQ3YjcyZTYwNTZkZjc5NGI2ZGVhYjVkNDc2ZjM2OS4uMWEzZDgzMGRkMTk0YzBkOTY5NGMyODU2
OGIzNDkyZGIxM2Q4Y2I5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvS2V5RXZlbnRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9L
ZXlFdmVudENvY29hLm1tCkBAIC01MzEsOSArNTMxLDggQEAgaW50IHdpbmRvd3NLZXlDb2RlRm9y
Q2hhckNvZGUodW5pY2hhciBjaGFyQ29kZSkKICAgICAgICAgY2FzZSBOU1ByaW50RnVuY3Rpb25L
ZXk6IHJldHVybiBWS19QUklOVDsKICAgICAgICAgY2FzZSBOU0V4ZWN1dGVGdW5jdGlvbktleTog
cmV0dXJuIFZLX0VYRUNVVEU7CiAgICAgICAgIGNhc2UgTlNQcmludFNjcmVlbkZ1bmN0aW9uS2V5
OiByZXR1cm4gVktfU05BUFNIT1Q7Ci0gICAgICAgIGNhc2UgTlNJbnNlcnRGdW5jdGlvbktleTog
cmV0dXJuIFZLX0lOU0VSVDsKICNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIGNhc2UgTlNIZWxw
RnVuY3Rpb25LZXk6IHJldHVybiBWS19JTlNFUlQ7CisgICAgICAgIGNhc2UgTlNJbnNlcnRGdW5j
dGlvbktleTogY2FzZSBOU0hlbHBGdW5jdGlvbktleTogcmV0dXJuIFZLX0lOU0VSVDsKIAogICAg
ICAgICBjYXNlIE5TRjFGdW5jdGlvbktleTogcmV0dXJuIFZLX0YxOwogICAgICAgICBjYXNlIE5T
RjJGdW5jdGlvbktleTogcmV0dXJuIFZLX0YyOwpAQCAtNTU1LDYgKzU1NCw4IEBAIGludCB3aW5k
b3dzS2V5Q29kZUZvckNoYXJDb2RlKHVuaWNoYXIgY2hhckNvZGUpCiAgICAgICAgIGNhc2UgTlNG
MThGdW5jdGlvbktleTogcmV0dXJuIFZLX0YxODsKICAgICAgICAgY2FzZSBOU0YxOUZ1bmN0aW9u
S2V5OiByZXR1cm4gVktfRjE5OwogICAgICAgICBjYXNlIE5TRjIwRnVuY3Rpb25LZXk6IHJldHVy
biBWS19GMjA7CisjZWxzZQorICAgICAgICBjYXNlIE5TSW5zZXJ0RnVuY3Rpb25LZXk6IHJldHVy
biBWS19JTlNFUlQ7CiAjZW5kaWYKICAgICAgICAgY2FzZSBOU0YyMUZ1bmN0aW9uS2V5OiByZXR1
cm4gVktfRjIxOwogICAgICAgICBjYXNlIE5TRjIyRnVuY3Rpb25LZXk6IHJldHVybiBWS19GMjI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAK
aW5kZXggYzg4YWI1ZTQ5OTZhYzk5NzFkZWZlZjBiMWU4OTM2MmE3Yzc3M2ExOS4uNDcwMDgyZWQ1
YzVlZjAyYTczM2U2ZDk0MTIxYzA0OTIwNWJlMGQwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtMzcsOCArMzcsMTQgQEAKICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
KyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8bGltaXRzPgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6IFdlIHNob3VsZCBiZXR0ZXIgaW50ZWdyYXRlIHRoZSBp
T1MgYW5kIG5vbi1pT1MgY29kZSBpbiB0aGlzIGNsYXNzLiBVbmxpa2Ugb3RoZXIgcG9ydHMsIHRo
ZQorLy8gaU9TIHBvcnQgY2FjaGVzIHRoZSBtZXRhZGF0YSBmb3IgYSBmcmFtZSB3aXRob3V0IGRl
Y29kaW5nIHRoZSBpbWFnZS4KIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQogICAgICwgbV9jdXJyZW50RnJhbWUo
MCkKQEAgLTUwLDYgKzU2LDExIEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShJbWFnZU9ic2Vy
dmVyKiBvYnNlcnZlcikKICAgICAsIG1fZGVjb2RlZFNpemUoMCkKICAgICAsIG1fZGVjb2RlZFBy
b3BlcnRpZXNTaXplKDApCiAgICAgLCBtX2ZyYW1lQ291bnQoMCkKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBleHBvc2UgYSBzZXR0aW5nIHRvIGVuYWJsZS9kaXNh
YmxlIHByb2dyZXNzaXZlIGxvYWRpbmcgcmVtb3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgor
ICAgICwgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUoMCkKKyAgICAsIG1fcHJvZ3Jlc3NpdmVM
b2FkQ2h1bmtDb3VudCgwKQorI2VuZGlmCiAgICAgLCBtX2lzU29saWRDb2xvcihmYWxzZSkKICAg
ICAsIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IoZmFsc2UpCiAgICAgLCBtX2FuaW1hdGlvbkZpbmlz
aGVkKGZhbHNlKQpAQCAtMTAwLDcgKzExMSwxNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGFJZk5lY2Vzc2FyeShib29sIGRlc3Ryb3lBbGwpCiB7CiAgICAgLy8gQW5pbWF0
ZWQgaW1hZ2VzID41TUIgYXJlIGNvbnNpZGVyZWQgbGFyZ2UgZW5vdWdoIHRoYXQgd2UnbGwgb25s
eSBoYW5nIG9uCiAgICAgLy8gdG8gb25lIGZyYW1lIGF0IGEgdGltZS4KKyNpZiBQTEFURk9STShJ
T1MpCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNMYXJnZUFuaW1hdGlvbkN1dG9mZiA9IDIw
OTcxNTI7CisKKyAgICAgLy8gSWYgd2UgaGF2ZSBkZWNvZGVkIGZyYW1lcyBidXQgdGhlcmUgaXMg
bm8gZW5jb2RlZCBkYXRhLCB3ZSBzaG91bGRuJ3QgZGVzdHJveQorICAgICAvLyB0aGUgZGVjb2Rl
ZCBpbWFnZSBzaW5jZSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlY29uc3RydWN0IGl0IGxhdGVyLgor
ICAgICBpZiAoIWRhdGEoKSAmJiBtX2ZyYW1lcy5zaXplKCkpCisgICAgICAgICByZXR1cm47Cisj
ZWxzZQogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjTGFyZ2VBbmltYXRpb25DdXRvZmYgPSA1
MjQyODgwOworI2VuZGlmCiAKICAgICAvLyBJZiB3ZSBoYXZlIGRlY29kZWQgZnJhbWVzIGJ1dCB0
aGVyZSBpcyBubyBlbmNvZGVkIGRhdGEsIHdlIHNob3VsZG4ndCBkZXN0cm95CiAgICAgLy8gdGhl
IGRlY29kZWQgaW1hZ2Ugc2luY2Ugd2Ugd29uJ3QgYmUgYWJsZSB0byByZWNvbnN0cnVjdCBpdCBs
YXRlci4KQEAgLTEzMSw3ICsxNTEsMTEgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveU1ldGFk
YXRhQW5kTm90aWZ5KHVuc2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkKQogICAgICAgICBpbWFnZU9i
c2VydmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8aW50PihmcmFtZUJ5
dGVzQ2xlYXJlZCkpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBCaXRtYXBJbWFnZTo6
Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIGZsb2F0IHNjYWxlSGludCkKKyNlbHNlCiB2b2lkIEJp
dG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCkKKyNlbmRpZgogewogICAgIHNpemVf
dCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgQVNTRVJUKG1fZGVjb2RlZFNpemUgPT0g
MCB8fCBudW1GcmFtZXMgPiAxKTsKQEAgLTEzOSw3ICsxNjMsMTIgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgpCiAgICAgaWYgKG1fZnJhbWVzLnNpemUoKSA8IG51
bUZyYW1lcykKICAgICAgICAgbV9mcmFtZXMuZ3JvdyhudW1GcmFtZXMpOwogCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lID0gbV9zb3VyY2UuY3JlYXRlRnJh
bWVBdEluZGV4KGluZGV4LCAmc2NhbGVIaW50KTsKKyAgICBtX2ZyYW1lc1tpbmRleF0ubV9zY2Fs
ZSA9IHNjYWxlSGludDsKKyNlbHNlCiAgICAgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUgPSBtX3Nv
dXJjZS5jcmVhdGVGcmFtZUF0SW5kZXgoaW5kZXgpOworI2VuZGlmCiAgICAgaWYgKG51bUZyYW1l
cyA9PSAxICYmIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKQogICAgICAgICBjaGVja0ZvclNvbGlk
Q29sb3IoKTsKIApAQCAtMTY2LDYgKzE5NSwyMyBAQCB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZy
YW1lKHNpemVfdCBpbmRleCkKICAgICB9CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIEJp
dG1hcEltYWdlOjpjYWNoZUZyYW1lSW5mbyhzaXplX3QgaW5kZXgpCit7CisgICAgc2l6ZV90IG51
bUZyYW1lcyA9IGZyYW1lQ291bnQoKTsKKworICAgIGlmIChtX2ZyYW1lcy5zaXplKCkgPCBudW1G
cmFtZXMpCisgICAgICAgIG1fZnJhbWVzLnJlc2l6ZShudW1GcmFtZXMpOworCisgICAgQVNTRVJU
KCFtX2ZyYW1lc1tpbmRleF0ubV9oYXZlSW5mbyk7CisKKyAgICBpZiAoc2hvdWxkQW5pbWF0ZSgp
KQorICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbiA9IG1fc291cmNlLmZyYW1lRHVy
YXRpb25BdEluZGV4KGluZGV4KTsKKyAgICBtX2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYSA9IG1f
c291cmNlLmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsKKyAgICBtX2ZyYW1lc1tpbmRleF0u
bV9oYXZlSW5mbyA9IHRydWU7Cit9CisjZW5kaWYKKwogdm9pZCBCaXRtYXBJbWFnZTo6ZGlkRGVj
b2RlUHJvcGVydGllcygpIGNvbnN0CiB7CiAgICAgaWYgKG1fZGVjb2RlZFNpemUpCkBAIC0xOTMs
NiArMjM5LDEwIEBAIHZvaWQgQml0bWFwSW1hZ2U6OnVwZGF0ZVNpemUoSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSBjb25zdAogICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmll
bnRhdGlvbiA9IG1fc291cmNlLnNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKFJlc3Bl
Y3RJbWFnZU9yaWVudGF0aW9uLCBkZXNjcmlwdGlvbi5pbWFnZU9yaWVudGF0aW9uKCkpKTsKICAg
ICBtX2ltYWdlT3JpZW50YXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24u
aW1hZ2VPcmllbnRhdGlvbigpKTsKICAgICBtX3Nob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uKCkpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX29yaWdpbmFsU2l6ZSA9IG1fc291cmNl
Lm9yaWdpbmFsU2l6ZSgpOworICAgIG1fb3JpZ2luYWxTaXplUmVzcGVjdGluZ09yaWVudGF0aW9u
ID0gbV9zb3VyY2Uub3JpZ2luYWxTaXplKFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKTsKKyNlbmRp
ZgogICAgIG1faGF2ZVNpemUgPSB0cnVlOwogICAgIGRpZERlY29kZVByb3BlcnRpZXMoKTsKIH0K
QEAgLTIwOSw2ICsyNTksMjAgQEAgSW50U2l6ZSBCaXRtYXBJbWFnZTo6c2l6ZVJlc3BlY3RpbmdP
cmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3IKICAgICByZXR1cm4g
bV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorSW50
U2l6ZSBCaXRtYXBJbWFnZTo6b3JpZ2luYWxTaXplKCkgY29uc3QKK3sKKyAgICB1cGRhdGVTaXpl
KCk7CisgICAgcmV0dXJuIG1fb3JpZ2luYWxTaXplOworfQorCitJbnRTaXplIEJpdG1hcEltYWdl
OjpvcmlnaW5hbFNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdAoreworICAgIHVwZGF0
ZVNpemUoKTsKKyAgICByZXR1cm4gbV9vcmlnaW5hbFNpemVSZXNwZWN0aW5nT3JpZW50YXRpb247
Cit9CisjZW5kaWYKKwogSW50U2l6ZSBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lU2l6ZSgpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2N1cnJlbnRGcmFtZSB8fCBtX2hhc1VuaWZvcm1GcmFtZVNpemUp
CkBAIC0yMjcsNiArMjkxLDkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SG90U3BvdChJbnRQb2lu
dCYgaG90U3BvdCkgY29uc3QKIAogYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpCiB7CisgICAgLy8gQmVjYXVzZSB3ZSdyZSBtb2RpZnlpbmcgdGhlIGN1
cnJlbnQgZnJhbWUsIGNsZWFyIGl0cyAobm93IHBvc3NpYmx5CisgICAgLy8gaW5hY2N1cmF0ZSkg
bWV0YWRhdGEgYXMgd2VsbC4KKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIENsZWFyIGFsbCBw
YXJ0aWFsbHktZGVjb2RlZCBmcmFtZXMuIEZvciBtb3N0IGltYWdlIGZvcm1hdHMsIHRoZXJlIGlz
IG9ubHkKICAgICAvLyBvbmUgZnJhbWUsIGJ1dCBhdCBsZWFzdCBHSUYgYW5kIElDTyBjYW4gaGF2
ZSBtb3JlLiBXaXRoIEdJRnMsIHRoZSBmcmFtZXMKICAgICAvLyBjb21lIGluIG9yZGVyIGFuZCB3
ZSBhc2sgdG8gZGVjb2RlIHRoZW0gaW4gb3JkZXIsIHdhaXRpbmcgdG8gcmVxdWVzdCBhCkBAIC0y
NTQsMTEgKzMyMSw0MCBAQCBib29sIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERh
dGFSZWNlaXZlZCkKICAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IChtX2ZyYW1lc1tp
XS5jbGVhcih0cnVlKSA/IGZyYW1lQnl0ZXMgOiAwKTsKICAgICB9CiAgICAgZGVzdHJveU1ldGFk
YXRhQW5kTm90aWZ5KGZyYW1lQnl0ZXNDbGVhcmVkKTsKKyNlbHNlCisgICAgaW50IGRlbHRhQnl0
ZXMgPSAwOworICAgIGlmICghbV9mcmFtZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGludCBieXRl
cyA9IG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLm1fZnJhbWVCeXRlczsKKyAgICAgICAg
aWYgKG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLmNsZWFyKHRydWUpKSB7CisgICAgICAg
ICAgICBkZWx0YUJ5dGVzICs9IGJ5dGVzOworICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBtX2Rl
Y29kZWRQcm9wZXJ0aWVzU2l6ZTsKKyAgICAgICAgICAgIG1fZGVjb2RlZFByb3BlcnRpZXNTaXpl
ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZGVs
dGFCeXRlcyk7CisjZW5kaWYKICAgICAKICAgICAvLyBGZWVkIGFsbCB0aGUgZGF0YSB3ZSd2ZSBz
ZWVuIHNvIGZhciB0byB0aGUgaW1hZ2UgZGVjb2Rlci4KICAgICBtX2FsbERhdGFSZWNlaXZlZCA9
IGFsbERhdGFSZWNlaXZlZDsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBleHBvc2UgYSBzZXR0aW5nIHRvIGVuYWJsZS9kaXNhYmxlIHByb2dyZXNzaXZlIGxvYWRp
bmcgYW5kIG1ha2UgdGhpcworICAgIC8vIGNvZGUgY29uZGl0aW9uYWwgb24gaXQuIFRoZW4gd2Ug
Y2FuIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKyAgICBzdGF0aWMgY29uc3QgZG91
YmxlIGNodW5rTG9hZEludGVydmFsc1tdID0gezAsIDEsIDMsIDYsIDE1fTsKKyAgICBkb3VibGUg
aW50ZXJ2YWwgPSBjaHVua0xvYWRJbnRlcnZhbHNbc3RkOjptaW4obV9wcm9ncmVzc2l2ZUxvYWRD
aHVua0NvdW50LCBzdGF0aWNfY2FzdDx1aW50MTZfdD4oNCkpXTsKKworICAgIGJvb2wgbmVlZHNV
cGRhdGUgPSBmYWxzZTsKKyAgICBpZiAoY3VycmVudFRpbWUoKSAtIG1fcHJvZ3Jlc3NpdmVMb2Fk
Q2h1bmtUaW1lID4gaW50ZXJ2YWwpIHsgLy8gVGhlIGZpcnN0IHRpbWUgdGhyb3VnaCwgdGhlIGNo
dW5rIHRpbWUgd2lsbCBiZSAwIGFuZCB0aGUgaW1hZ2Ugd2lsbCBnZXQgYW4gdXBkYXRlLgorICAg
ICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgICAgIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtU
aW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgQVNTRVJUKG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1
bmtDb3VudCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4KCkpOworICAgICAg
ICArK21fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudDsKKyAgICB9CisgICAgaWYgKG5lZWRzVXBk
YXRlIHx8IGFsbERhdGFSZWNlaXZlZCkKKyAgICAgICAgbV9zb3VyY2Uuc2V0RGF0YShkYXRhKCks
IGFsbERhdGFSZWNlaXZlZCk7CisjZWxzZQogICAgIG1fc291cmNlLnNldERhdGEoZGF0YSgpLCBh
bGxEYXRhUmVjZWl2ZWQpOwotICAgIAorI2VuZGlmCisKICAgICBtX2hhdmVGcmFtZUNvdW50ID0g
ZmFsc2U7CiAgICAgbV9oYXNVbmlmb3JtRnJhbWVTaXplID0gdHJ1ZTsKICAgICByZXR1cm4gaXNT
aXplQXZhaWxhYmxlKCk7CkBAIC0yOTMsNiArMzg5LDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6aXNT
aXplQXZhaWxhYmxlKCkKICAgICByZXR1cm4gbV9zaXplQXZhaWxhYmxlOwogfQogCisjaWYgIVBM
QVRGT1JNKElPUykKIGJvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90
IGluZGV4KQogewogICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCkBAIC0zMDIsMjUgKzM5
OSw3NSBAQCBib29sIEJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRl
eCkKICAgICAgICAgY2FjaGVGcmFtZShpbmRleCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CisjZWxz
ZQorYm9vbCBCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJbmZvSXNDYWNoZWQoc2l6ZV90IGluZGV4
KQoreworICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4
XS5tX2hhdmVJbmZvKQorICAgICAgICBjYWNoZUZyYW1lSW5mbyhpbmRleCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisjZW5kaWYKIAogUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFt
ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4g
ZnJhbWVBdEluZGV4KGluZGV4LCAxLjBmKTsKKyNlbHNlCiAgICAgaWYgKCFlbnN1cmVGcmFtZUlz
Q2FjaGVkKGluZGV4KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZTsKKyNlbmRpZgogfQogCisjaWYg
UExBVEZPUk0oSU9TKQorUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUF0SW5k
ZXgoc2l6ZV90IGluZGV4LCBmbG9hdCBzY2FsZUhpbnQpCit7CisgICAgaWYgKGluZGV4ID49IGZy
YW1lQ291bnQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoaW5kZXggPj0g
bV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKKyAgICAgICAgY2Fj
aGVGcmFtZShpbmRleCwgc2NhbGVIaW50KTsKKyAgICBlbHNlIGlmIChzdGQ6Om1pbigxLjBmLCBz
Y2FsZUhpbnQpID4gbV9mcmFtZXNbaW5kZXhdLm1fc2NhbGUpIHsKKyAgICAgICAgLy8gSWYgdGhl
IGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEgc2l6ZSwgcmUtZGVj
b2RlIGEgbGFyZ2VyIHZlcnNpb24uCisgICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVz
W2luZGV4XS5tX2ZyYW1lQnl0ZXM7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KG1f
ZGVjb2RlZFNpemUpICsgc2l6ZUNoYW5nZSA+PSAwKTsKKyAgICAgICAgbV9mcmFtZXNbaW5kZXhd
LmNsZWFyKHRydWUpOworICAgICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CisgICAgICAg
IG1fZGVjb2RlZFNpemUgKz0gc2l6ZUNoYW5nZTsKKyAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIo
KSkKKyAgICAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMs
IHNpemVDaGFuZ2UpOworCisgICAgICAgIGNhY2hlRnJhbWUoaW5kZXgsIHNjYWxlSGludCk7Cisg
ICAgfQorICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZTsKK30KKyNlbmRpZgorCiBi
b29sIEJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IGNhY2hlRnJhbWVJbmZvIGRvZXMgbm90
IHNldCBtX2lzQ29tcGxldGUuIFNob3VsZCBpdD8KKyAgICBpZiAoIWVuc3VyZUZyYW1lSW5mb0lz
Q2FjaGVkKGluZGV4KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKICAgICBpZiAoIWVu
c3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYK
ICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faXNDb21wbGV0ZTsKIH0KIAogZmxvYXQgQml0
bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKIHsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgaWYgKCFlbnN1cmVGcmFtZUluZm9Jc0NhY2hlZChpbmRleCkpCisgICAg
ICAgIHJldHVybiAwOworI2Vsc2UKICAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgp
KQogICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0u
bV9kdXJhdGlvbjsKIH0KIApAQCAtMzMxLDkgKzQ3OCwxMyBAQCBQYXNzTmF0aXZlSW1hZ2VQdHIg
Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKIAogYm9vbCBCaXRtYXBJ
bWFnZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQogeworI2lmIFBMQVRGT1JN
KElPUykKKyAgICBpZiAoIWVuc3VyZUZyYW1lSW5mb0lzQ2FjaGVkKGluZGV4KSkKKyAgICAgICAg
cmV0dXJuIHRydWU7IC8vIEZJWE1FOiBXaHkgd291bGQgYW4gaW52YWxpZCBpbmRleCByZXR1cm4g
dHJ1ZSBoZXJlPworI2Vsc2UKICAgICBpZiAobV9mcmFtZXMuc2l6ZSgpIDw9IGluZGV4KQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQorI2VuZGlmCiAgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2hh
dmVNZXRhZGF0YSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2hhc0FscGhhOwog
CkBAIC0zNDcsOCArNDk4LDE0IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmN1cnJlbnRGcmFtZUtub3du
VG9CZU9wYXF1ZSgpCiAKIEltYWdlT3JpZW50YXRpb24gQml0bWFwSW1hZ2U6OmZyYW1lT3JpZW50
YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8g
RklYTUU6IGNhY2hlRnJhbWVJbmZvIGRvZXMgbm90IHNldCBtX29yaWVudGF0aW9uLiBTaG91bGQg
aXQ/CisgICAgaWYgKCFlbnN1cmVGcmFtZUluZm9Jc0NhY2hlZChpbmRleCkpCisgICAgICAgIHJl
dHVybiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKKyNlbHNlCiAgICAgaWYgKCFlbnN1cmVGcmFt
ZUlzQ2FjaGVkKGluZGV4KSkKICAgICAgICAgcmV0dXJuIERlZmF1bHRJbWFnZU9yaWVudGF0aW9u
OworI2VuZGlmCiAKICAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQogICAg
ICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fb3JpZW50YXRpb247CkBAIC0zNjMsOCArNTIw
LDYgQEAgYm9vbCBCaXRtYXBJbWFnZTo6bm90U29saWRDb2xvcigpCiB9CiAjZW5kaWYKIAotCi0K
IGludCBCaXRtYXBJbWFnZTo6cmVwZXRpdGlvbkNvdW50KGJvb2wgaW1hZ2VLbm93blRvQmVDb21w
bGV0ZSkKIHsKICAgICBpZiAoKG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzID09IFVua25vd24pIHx8
ICgobV9yZXBldGl0aW9uQ291bnRTdGF0dXMgPT0gVW5jZXJ0YWluKSAmJiBpbWFnZUtub3duVG9C
ZUNvbXBsZXRlKSkgewpAQCAtNDEyLDEyICs1NjcsMTggQEAgdm9pZCBCaXRtYXBJbWFnZTo6c3Rh
cnRBbmltYXRpb24oYm9vbCBjYXRjaFVwSWZOZWNlc3NhcnkpCiAgICAgY29uc3QgZG91YmxlIGN1
cnJlbnREdXJhdGlvbiA9IGZyYW1lRHVyYXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsKICAg
ICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSArPSBjdXJyZW50RHVyYXRpb247CiAKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIC8vIFdoZW4gYW4gYW5pbWF0ZWQgaW1hZ2UgaXMgbW9yZSB0aGFuIGZp
dmUgbWludXRlcyBvdXQgb2YgZGF0ZSwgdGhlCiAgICAgLy8gdXNlciBwcm9iYWJseSBkb2Vzbid0
IGNhcmUgYWJvdXQgcmVzeW5jaW5nIGFuZCB3ZSBjb3VsZCBidXJuIGEgbG90IG9mCiAgICAgLy8g
dGltZSBsb29waW5nIHRocm91Z2ggZnJhbWVzIGJlbG93LiAgSnVzdCByZXNldCB0aGUgdGltaW5n
cy4KICAgICBjb25zdCBkb3VibGUgY0FuaW1hdGlvblJlc3luY0N1dG9mZiA9IDUgKiA2MDsKICAg
ICBpZiAoKHRpbWUgLSBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSkgPiBjQW5pbWF0aW9uUmVzeW5j
Q3V0b2ZmKQogICAgICAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9IHRpbWUgKyBjdXJyZW50
RHVyYXRpb247CisjZWxzZQorICAgIC8vIE1haW50YWluaW5nIGZyYW1lLXRvLWZyYW1lIGRlbGF5
cyBpcyBtb3JlIGltcG9ydGFudCB0aGFuCisgICAgLy8gbWFpbnRhaW5pbmcgYWJzb2x1dGUgYW5p
bWF0aW9uIHRpbWluZywgc28gcmVzZXQgdGhlIHRpbWluZ3MgZWFjaCBmcmFtZS4KKyAgICBtX2Rl
c2lyZWRGcmFtZVN0YXJ0VGltZSA9IHRpbWUgKyBjdXJyZW50RHVyYXRpb247CisjZW5kaWYKIAog
ICAgIC8vIFRoZSBpbWFnZSBtYXkgbG9hZCBtb3JlIHNsb3dseSB0aGFuIGl0J3Mgc3VwcG9zZWQg
dG8gYW5pbWF0ZSwgc28gdGhhdCBieQogICAgIC8vIHRoZSB0aW1lIHdlIHJlYWNoIHRoZSBlbmQg
b2YgdGhlIGZpcnN0IHJlcGV0aXRpb24sIHdlJ3JlIHdlbGwgYmVoaW5kLgpAQCAtNTQ4LDEwICs3
MDksMTIgQEAgYm9vbCBCaXRtYXBJbWFnZTo6aW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKGJvb2wg
c2tpcHBpbmdGcmFtZXMpCiAgICAgLy8gU3RvcCB0aGUgYW5pbWF0aW9uLgogICAgIHN0b3BBbmlt
YXRpb24oKTsKICAgICAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIFNlZSBpZiBhbnlvbmUg
aXMgc3RpbGwgcGF5aW5nIGF0dGVudGlvbiB0byB0aGlzIGFuaW1hdGlvbi4gIElmIG5vdCwgd2Ug
ZG9uJ3QKICAgICAvLyBhZHZhbmNlIGFuZCB3aWxsIHJlbWFpbiBzdXNwZW5kZWQgYXQgdGhlIGN1
cnJlbnQgZnJhbWUgdW50aWwgdGhlIGFuaW1hdGlvbiBpcyByZXN1bWVkLgogICAgIGlmICghc2tp
cHBpbmdGcmFtZXMgJiYgaW1hZ2VPYnNlcnZlcigpLT5zaG91bGRQYXVzZUFuaW1hdGlvbih0aGlz
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiAKICAgICArK21fY3VycmVudEZyYW1l
OwogICAgIGJvb2wgYWR2YW5jZWRBbmltYXRpb24gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggYjlkZDdiM2E1MjE3ODc2YzEz
YzQwYzg4YmY3YzZjYmZlNGE3OWU0Zi4uODdkOGI4YzY2MjJmYjlmYzNjMmJmMDA0NjU3YzcwNTNi
ZTRlOWYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5oCkBAIC0zNiw3ICszNiw5IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorI2lmICFQTEFURk9STShJT1MpCiBPQkpDX0NMQVNTIE5TSW1hZ2U7
CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBA
IC02Nyw2ICs2OSwxMCBAQCBwdWJsaWM6CiAgICAgRnJhbWVEYXRhKCkKICAgICAgICAgOiBtX2Zy
YW1lKDApCiAgICAgICAgICwgbV9vcmllbnRhdGlvbihEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikK
KyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICwgbV9zY2FsZSgwKQorICAgICAgICAsIG1faGF2
ZUluZm8oZmFsc2UpCisjZW5kaWYKICAgICAgICAgLCBtX2R1cmF0aW9uKDApCiAgICAgICAgICwg
bV9oYXZlTWV0YWRhdGEoZmFsc2UpCiAgICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQpAQCAt
ODYsNiArOTIsMTAgQEAgcHVibGljOgogCiAgICAgTmF0aXZlSW1hZ2VQdHIgbV9mcmFtZTsKICAg
ICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CisjaWYgUExBVEZPUk0oSU9TKQorICAg
IGZsb2F0IG1fc2NhbGU7CisgICAgYm9vbCBtX2hhdmVJbmZvOworI2VuZGlmCiAgICAgZmxvYXQg
bV9kdXJhdGlvbjsKICAgICBib29sIG1faGF2ZU1ldGFkYXRhIDogMTsKICAgICBib29sIG1faXND
b21wbGV0ZSA6IDE7CkBAIC05Nyw2ICsxMDcsOSBAQCBwdWJsaWM6CiAvLyBCaXRtYXBJbWFnZSBD
bGFzcwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQogCisvLyBGSVhNRTogV2Ugc2hvdWxkIGJldHRlciBpbnRlZ3JhdGUgdGhlIGlPUyBhbmQgbm9u
LWlPUyBjb2RlIGluIHRoaXMgY2xhc3MuIFVubGlrZSBvdGhlciBwb3J0cywgdGhlCisvLyBpT1Mg
cG9ydCBjYWNoZXMgdGhlIG1ldGFkYXRhIGZvciBhIGZyYW1lIHdpdGhvdXQgZGVjb2RpbmcgdGhl
IGltYWdlLgorCiBjbGFzcyBCaXRtYXBJbWFnZSBGSU5BTCA6IHB1YmxpYyBJbWFnZSB7CiAgICAg
ZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwogICAgIGZyaWVuZCBjbGFzcyBDcm9zc2ZhZGVH
ZW5lcmF0ZWRJbWFnZTsKQEAgLTEyMiw2ICsxMzUsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBJbnRTaXplIHNpemUoKSBjb25zdCBPVkVSUklERTsKICAgICBJbnRTaXplIHNpemVSZXNwZWN0
aW5nT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRh
dGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0OworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFs
IEludFNpemUgb3JpZ2luYWxTaXplKCkgY29uc3Q7CisgICAgSW50U2l6ZSBvcmlnaW5hbFNpemVS
ZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdDsKKyNlbmRpZgogICAgIEludFNpemUgY3VycmVu
dEZyYW1lU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRIb3RTcG90KEludFBvaW50
JikgY29uc3QgT1ZFUlJJREU7CiAKQEAgLTE0MSw3ICsxNTgsOSBAQCBwdWJsaWM6CiAKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0cy4K
KyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHZpcnR1YWwgTlNJbWFnZSogZ2V0TlNJbWFnZSgpIE9W
RVJSSURFOworI2VuZGlmCiAgICAgdmlydHVhbCBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0
aW9uKCkgT1ZFUlJJREU7CiAjZW5kaWYKIApAQCAtMTk1LDYgKzIxNCwxMCBAQCBwcm90ZWN0ZWQ6
CiAjZW5kaWYKIAogICAgIHNpemVfdCBjdXJyZW50RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2N1
cnJlbnRGcmFtZTsgfQorI2lmIFBMQVRGT1JNKElPUykKKyAgICBQYXNzTmF0aXZlSW1hZ2VQdHIg
ZnJhbWVBdEluZGV4KHNpemVfdCwgZmxvYXQgc2NhbGVIaW50KTsKKyAgICBQYXNzTmF0aXZlSW1h
Z2VQdHIgY29weVVuc2NhbGVkRnJhbWVBdEluZGV4KHNpemVfdCk7CisjZW5kaWYKICAgICBzaXpl
X3QgZnJhbWVDb3VudCgpOwogICAgIFBhc3NOYXRpdmVJbWFnZVB0ciBmcmFtZUF0SW5kZXgoc2l6
ZV90KTsKICAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KTsKQEAgLTIwMyw5
ICsyMjYsMTggQEAgcHJvdGVjdGVkOgogICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRh
dGlvbkF0SW5kZXgoc2l6ZV90KTsKIAogICAgIC8vIERlY29kZXMgYW5kIGNhY2hlcyBhIGZyYW1l
LiBOZXZlciBhY2Nlc3NlZCBleGNlcHQgaW50ZXJuYWxseS4KKyNpZiBQTEFURk9STShJT1MpCisg
ICAgdm9pZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgZmxvYXQgc2NhbGVIaW50KTsKKworICAg
IC8vIENhY2hlIGZyYW1lIG1ldGFkYXRhIHdpdGhvdXQgZGVjb2RpbmcgaW1hZ2UuCisgICAgdm9p
ZCBjYWNoZUZyYW1lSW5mbyhzaXplX3QgaW5kZXgpOworICAgIC8vIENhbGxlZCBiZWZvcmUgYWNj
ZXNzaW5nIG1fZnJhbWVzW2luZGV4XSBmb3IgaW5mbyB3aXRob3V0IGRlY29kaW5nLiBSZXR1cm5z
IGZhbHNlIG9uIGluZGV4IG91dCBvZiBib3VuZHMuCisgICAgYm9vbCBlbnN1cmVGcmFtZUluZm9J
c0NhY2hlZChzaXplX3QgaW5kZXgpOworI2Vsc2UKICAgICB2b2lkIGNhY2hlRnJhbWUoc2l6ZV90
IGluZGV4KTsKICAgICAvLyBDYWxsZWQgYmVmb3JlIGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0u
IFJldHVybnMgZmFsc2Ugb24gaW5kZXggb3V0IG9mIGJvdW5kcy4KICAgICBib29sIGVuc3VyZUZy
YW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4KTsKKyNlbmRpZgogCiAgICAgLy8gQ2FsbGVkIHRvIGlu
dmFsaWRhdGUgY2FjaGVkIGRhdGEuICBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBl
IG91dAogICAgIC8vIHRoZSBlbnRpcmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBp
bWFnZSBzb3VyY2UgdG8gZGVzdHJveQpAQCAtMjY4LDYgKzMwMCwxMCBAQCBwcml2YXRlOgogICAg
IG11dGFibGUgdW5zaWduZWQgbV9pbWFnZU9yaWVudGF0aW9uIDogNDsgLy8gSW1hZ2VPcmllbnRh
dGlvbkVudW0KICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50
YXRpb24gOiAxOyAvLyBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0KIAorI2lmIFBMQVRGT1JN
KElPUykKKyAgICBtdXRhYmxlIEludFNpemUgbV9vcmlnaW5hbFNpemU7IC8vIFRoZSBzaXplIG9m
IHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UuCisgICAgbXV0YWJsZSBJbnRTaXplIG1fb3JpZ2luYWxT
aXplUmVzcGVjdGluZ09yaWVudGF0aW9uOworI2VuZGlmCiAgICAgc2l6ZV90IG1fY3VycmVudEZy
YW1lOyAvLyBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgZnJhbWUgb2YgYW5pbWF0aW9uLgogICAg
IFZlY3RvcjxGcmFtZURhdGEsIDE+IG1fZnJhbWVzOyAvLyBBbiBhcnJheSBvZiB0aGUgY2FjaGVk
IGZyYW1lcyBvZiB0aGUgYW5pbWF0aW9uLiBXZSBoYXZlIHRvIHJlZiBmcmFtZXMgdG8gcGluIHRo
ZW0gaW4gdGhlIGNhY2hlLgogCkBAIC0yNzgsNyArMzE0LDkgQEAgcHJpdmF0ZToKICAgICBkb3Vi
bGUgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWU7ICAvLyBUaGUgc3lzdGVtIHRpbWUgYXQgd2hpY2gg
d2UgaG9wZSB0byBzZWUgdGhlIG5leHQgY2FsbCB0byBzdGFydEFuaW1hdGlvbigpLgogCiAjaWYg
UExBVEZPUk0oTUFDKQorI2lmICFQTEFURk9STShJT1MpCiAgICAgbXV0YWJsZSBSZXRhaW5QdHI8
TlNJbWFnZT4gbV9uc0ltYWdlOyAvLyBBIGNhY2hlZCBOU0ltYWdlIG9mIGZyYW1lIDAuIE9ubHkg
YnVpbHQgbGF6aWx5IGlmIHNvbWVvbmUgYWN0dWFsbHkgcXVlcmllcyBmb3Igb25lLgorI2VuZGlm
CiAgICAgbXV0YWJsZSBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBtX3RpZmZSZXA7IC8vIENhY2hlZCBU
SUZGIHJlcCBmb3IgZnJhbWUgMC4gIE9ubHkgYnVpbHQgbGF6aWx5IGlmIHNvbWVvbmUgcXVlcmll
cyBmb3Igb25lLgogI2VuZGlmCiAKQEAgLTI4OCw2ICszMjYsMTIgQEAgcHJpdmF0ZToKICAgICBt
dXRhYmxlIHVuc2lnbmVkIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplOyAvLyBUaGUgc2l6ZSBvZiBk
YXRhIGRlY29kZWQgYnkgdGhlIHNvdXJjZSB0byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGllcyAo
ZS5nLiBzaXplLCBmcmFtZSBjb3VudCwgZXRjKS4KICAgICBzaXplX3QgbV9mcmFtZUNvdW50Owog
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXhwb3NlIGEgc2V0
dGluZyB0byBlbmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIHJlbW92ZSB0aGUgUExB
VEZPUk0oSU9TKS1ndWFyZC4KKyAgICBkb3VibGUgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWU7
CisgICAgdWludDE2X3QgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50OworI2VuZGlmCisKICAg
ICBib29sIG1faXNTb2xpZENvbG9yIDogMTsgLy8gV2hldGhlciBvciBub3Qgd2UgYXJlIGEgMXgx
IHNvbGlkIGltYWdlLgogICAgIGJvb2wgbV9jaGVja2VkRm9yU29saWRDb2xvciA6IDE7IC8vIFdo
ZXRoZXIgd2UndmUgY2hlY2tlZCB0aGUgZnJhbWUgZm9yIHNvbGlkIGNvbG9yLgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKaW5kZXggMjJjOGRjMWMzMzJmY2Q0
OWJiY2I5OTdjNTZlMTAzOWE2NjE1ZjkyNS4uNTlkMzc1OTVkYjNkZjYyN2E2NmUwOTJhYTEwODUw
MGJhOTgzZDgzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cApAQCAtMzEwLDYgKzMxMCwxNyBAQCBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CiAgICAgICAg
ICAgICAgICAgIGFscGhhKCkpOwogfQogCitib29sIENvbG9yOjppc0RhcmsoKSBjb25zdAorewor
ICAgIGZsb2F0IHJlZDsKKyAgICBmbG9hdCBncmVlbjsKKyAgICBmbG9hdCBibHVlOworICAgIGZs
b2F0IGFscGhhOworICAgIGdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIGZs
b2F0IGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPSBzdGQ6Om1heChyZWQsIHN0ZDo6bWF4KGdyZWVu
LCBibHVlKSk7CisgICAgcmV0dXJuIGFscGhhID4gMC41ICYmIGxhcmdlc3ROb25BbHBoYUNoYW5u
ZWwgPCAwLjU7Cit9CisKIHN0YXRpYyBpbnQgYmxlbmRDb21wb25lbnQoaW50IGMsIGludCBhKQog
ewogICAgIC8vIFdlIHVzZSB3aGl0ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCmluZGV4IDhlNDBjMjQ0YjJhZTc2MDVlMTc2MTczMmQ2OGVjNDRjOWVkMDc5MmMuLjIw
NDdhZDI0YzM3YTgwYjExNzU4ZjQ0ZDJmOGMwYmVjMTI4NTgwNmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaApAQCAtMzQsNiArMzQsOSBAQAogI2lmIFVTRShDRykK
ICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiB0eXBlZGVmIHN0cnVjdCBDR0NvbG9yKiBDR0NvbG9y
UmVmOworI2lmIFBMQVRGT1JNKElPUykKK3R5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSogQ0dD
b2xvclNwYWNlUmVmOworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oR1RLKQpAQCAtMTE4LDYgKzEyMSw4IEBAIHB1YmxpYzoKICAgICBDb2xvciBsaWdodCgp
IGNvbnN0OwogICAgIENvbG9yIGRhcmsoKSBjb25zdDsKIAorICAgIGJvb2wgaXNEYXJrKCkgY29u
c3Q7CisKICAgICAvLyBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIFBvcnRlci1EdWZmJ3Mg
InNvdXJjZS1vdmVyIiBlcXVhdGlvbgogICAgIENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJikgY29u
c3Q7CiAgICAgQ29sb3IgYmxlbmRXaXRoV2hpdGUoKSBjb25zdDsKQEAgLTE0NSw2ICsxNTAsMTUg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgZ3JheSA9IDB4RkZBMEEwQTA7CiAg
ICAgc3RhdGljIGNvbnN0IFJHQkEzMiBsaWdodEdyYXkgPSAweEZGQzBDMEMwOwogICAgIHN0YXRp
YyBjb25zdCBSR0JBMzIgdHJhbnNwYXJlbnQgPSAweDAwMDAwMDAwOworICAgIHN0YXRpYyBjb25z
dCBSR0JBMzIgY3lhbiA9IDB4RkYwMEZGRkY7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3Rh
dGljIGNvbnN0IFJHQkEzMiB0YXAgPSAweDREMUExQTFBOworCisgICAgLy8gRklYTUU6IFRoaXMg
Y29sb3Igc2hvdWxkbid0IGJlIGlPUy1zcGVjaWZpYy4gT25jZSB3ZSBmaXggdXAgaXRzIHVzYWdl
IGluIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKCkKKyAgICAvLyB3
ZSBzaG91bGQgbW92ZSBpdCBvdXRzaWRlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLiBTZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYyOTY+LgorICAgIHN0YXRp
YyBjb25zdCBSR0JBMzIgY29tcG9zaXRpb25GaWxsID0gMHgzQ0FGQzBFMzsKKyNlbmRpZgogCiBw
cml2YXRlOgogICAgIFJHQkEzMiBtX2NvbG9yOwpAQCAtMjAwLDYgKzIxNCw5IEBAIGlubGluZSB1
aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QgdmFsdWUpCiAKICNpZiBVU0UoQ0cpCiBD
R0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKKyNpZiBQ
TEFURk9STShJT1MpCitDR0NvbG9yUmVmIGNyZWF0ZUNHQ29sb3JXaXRoRGV2aWNlV2hpdGUoQ0dG
bG9hdCB3aGl0ZSwgQ0dGbG9hdCBhbHBoYSk7CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogI2Vu
ZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKaW5kZXggOGUwNTgz
MTA5YThmMjAxNzMxMDI4MDA2MDkxMjgwNjgzNGQwYjRlMS4uZjg5MjlkNjlmZDY2MzFlZDZmOGRj
YmQwOTFhNTMxMmMyNWE3MWUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKQEAgLTEzMSwxMiArMTMxLDE5
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9wQW5pbWF0aW9uQ2xpZW50KCk7CiAjZW5kaWYKIAot
I2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiBw
dWJsaWM6CiAgICAgdm9pZCBkaXNwbGF5TGlua0ZpcmVkKGRvdWJsZSBub3dTZWNvbmRzLCBkb3Vi
bGUgb3V0cHV0VGltZVNlY29uZHMpOwogcHJpdmF0ZToKICAgICBDVkRpc3BsYXlMaW5rUmVmIG1f
ZGlzcGxheUxpbms7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKK3B1YmxpYzoKKyAgICB2
b2lkIGRpc3BsYXlMaW5rRmlyZWQoZG91YmxlIG5vd1NlY29uZHMpOworcHJpdmF0ZToKKyAgICB2
b2lkKiBtX2Rpc3BsYXlMaW5rOworI2VuZGlmCiB9OwogCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCmluZGV4IDkyMTYxNzE4NTVhNjkxOTU5ZjM2
MTI1N2QxNDc5MTJlMmE0MGU5ZDQuLjE2MGQwOGYyMWRmZWQxM2MzYWNkODBkOTNkMzc4YWI5YTIy
ZTMyMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
LmgKQEAgLTQzLDEzICs0MywxMyBAQCBjbGFzcyBGbG9hdFBvaW50OwogdHlwZWRlZiBzdHJ1Y3Qg
Q0dQb2ludCBDR1BvaW50OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9B
U19DR0dFT01FVFJZX1RZUEVTCiB0eXBlZGVmIHN0cnVjdCBDR1BvaW50IE5TUG9pbnQ7CiAjZWxz
ZQogdHlwZWRlZiBzdHJ1Y3QgX05TUG9pbnQgTlNQb2ludDsKICNlbmRpZgotI2VuZGlmCisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTEzOSwxMCArMTM5LDEyIEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBDR1BvaW50
KCkgY29uc3Q7CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiAjaWYgUExBVEZPUk0oTUFD
KSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykK
ICAgICBGbG9hdFBvaW50KGNvbnN0IE5TUG9pbnQmKTsKICAgICBvcGVyYXRvciBOU1BvaW50KCkg
Y29uc3Q7CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAjaWYgUExBVEZPUk0o
QkxBQ0tCRVJSWSkKICAgICBGbG9hdFBvaW50KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpG
bG9hdFBvaW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5oCmluZGV4IDFjZTIzOWU1ZmY3YjNkYWIwYmNjOWNjM2M2ZjJmN2U4MmVjNDM0MzQuLmNjOWEw
M2JlZjgwMjM1MWFjYzYwZGFlZDRhZmNmYmI1YWI0MjM1OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCkBAIC0zMCwxNyArMzAsMjEgQEAKICNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCisjaWYgUExBVEZP
Uk0oSU9TKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0dlb21ldHJ5Lmg+CisjZW5kaWYKKwog
I2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHUmVjdCBDR1JlY3Q7CiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAjaWZk
ZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5cGVkZWYgc3Ry
dWN0IENHUmVjdCBOU1JlY3Q7CiAjZWxzZQogdHlwZWRlZiBzdHJ1Y3QgX05TUmVjdCBOU1JlY3Q7
CiAjZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElP
UykKIAogI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCiBuYW1lc3BhY2UgQmxhY2tCZXJyeSB7CkBA
IC0xODEsMTAgKzE4NSwxMiBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dSZWN0KCkgY29uc3Q7
CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVm
aW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykKICAgICBGbG9h
dFJlY3QoY29uc3QgTlNSZWN0Jik7CiAgICAgb3BlcmF0b3IgTlNSZWN0KCkgY29uc3Q7CiAjZW5k
aWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAjaWYgVVNFKENBSVJPKQogICAgIEZsb2F0
UmVjdChjb25zdCBjYWlyb19yZWN0YW5nbGVfdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuaAppbmRleCAwZmE4Y2MxZDc2YjBhMTNjOTM2ZWQ2MWVmMDU5
NGQzOTI1OGNiNWNjLi45NTJhMjkwNDRhZGM5OWFlZTE3MmM2YmRiNGRmODU3YTQxMjhiZjVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaApAQCAtMzks
MTcgKzM5LDIxIEBAIGNsYXNzIEZsb2F0U2l6ZTsKIH0KICNlbmRpZgogCisjaWYgUExBVEZPUk0o
SU9TKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNlbmRpZgorCiAj
aWYgVVNFKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dTaXplIENHU2l6ZTsKICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICNpZmRl
ZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogdHlwZWRlZiBzdHJ1
Y3QgQ0dTaXplIE5TU2l6ZTsKICNlbHNlCiB0eXBlZGVmIHN0cnVjdCBfTlNTaXplIE5TU2l6ZTsK
ICNlbmRpZgotI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9T
KQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEyMiwxMCArMTI2LDEyIEBAIHB1YmxpYzoK
ICAgICBvcGVyYXRvciBDR1NpemUoKSBjb25zdDsKICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElP
UykKICNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVf
QVNfQ0dHRU9NRVRSWV9UWVBFUykpCiAgICAgZXhwbGljaXQgRmxvYXRTaXplKGNvbnN0IE5TU2l6
ZSAmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICBv
cGVyYXRvciBOU1NpemUoKSBjb25zdDsKICNlbmRpZgorI2VuZGlmIC8vICFQTEFURk9STShJT1Mp
CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKaW5kZXggNjA5ZTQ2ZjRhNDllYzk4MTAyMWY2
YWM2NDI5ODNiOWI5ZTNlMDEwZi4uNDU2ZjI2YzBkMzgzYTNiOWMyMGZhNDY2ZGViOWQxYWViMzg1
YWI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKQEAgLTUw
LDYgKzUwLDggQEAgdGVtcGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxXZWJDb3JlOjpUZXh0
TGF5b3V0PihXZWJDb3JlOjpUZXh0TGF5b3V0KiBwdHIpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorc3RhdGljIFBhc3NSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlw
aHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKKwog
Y29uc3QgdWludDhfdCBGb250OjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxlWzI1Nl0gPSB7
CiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKlx0Ki8sIDEgLypcbiovLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LAogICAgIDEgLypzcGFjZSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAx
IC8qLSovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAxIC8qPyovLApAQCAtMTE2LDYgKzExOCw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmZCwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpCiB7CiB9
CiAKKy8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWlu
ZGVwZW5kZW50LgogRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwg
Ym9vbCBpc1ByaW50ZXJGb250LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkK
ICAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0
YSkpCiAgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKQEAgLTEyNSw3ICsxMjgsMzEgQEAgRm9udDo6
Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgYm9vbCBpc1ByaW50ZXJGb250
LCBGb250U21vb3RoaW5nTW8KIHsKICAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVy
Rm9udChpc1ByaW50ZXJGb250KTsKICAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRGb250U21vb3Ro
aW5nKGZvbnRTbW9vdGhpbmdNb2RlKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnREYXRhLmZvbnQoKSkp
OworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZv
bnREYXRhLmZvbnQoKSkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhDVEZvbnRH
ZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkpICYga0NURm9udFRyYWl0SXRhbGljKTsK
KyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRz
KGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDog
Rm9udFdlaWdodE5vcm1hbCk7CisjZW5kaWYKK30KKworLy8gRklYTUU6IFdlIHNob3VsZCBtYWtl
IHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5kZXBlbmRlbnQuCisjaWYgUExBVEZPUk0oSU9T
KQorRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgUGFzc1JlZlB0
cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKKyAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6
OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCisgICAgLCBtX2xldHRlclNwYWNpbmco
MCkKKyAgICAsIG1fd29yZFNwYWNpbmcoMCkKKyAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhj
b21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQoreworICAgIENURm9udFJlZiBwcmltYXJ5Rm9u
dCA9IGZvbnREYXRhLmZvbnQoKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRT
aXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5z
ZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9udCkpOworICAgIG1fZm9udERl
c2NyaXB0aW9uLnNldEl0YWxpYyhDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkg
JiBrQ1RGb250VHJhaXRJdGFsaWMpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgo
Q1RGb250R2V0U3ltYm9saWNUcmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9udFRyYWl0Qm9sZCkg
PyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOworICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFVzZVByaW50ZXJGb250KGZvbnREYXRhLmlzUHJpbnRlckZvbnQoKSk7CisgICAgbV9n
bHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwg
Zm9udFNlbGVjdG9yLmdldCgpKTsKIH0KKyNlbmRpZgogCiBGb250OjpGb250KGNvbnN0IEZvbnQm
IG90aGVyKQogICAgIDogbV9mb250RGVzY3JpcHRpb24ob3RoZXIubV9mb250RGVzY3JpcHRpb24p
CkBAIC0yOTcsMTQgKzMyNCwxNCBAQCB2b2lkIEZvbnQ6OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRT
ZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25zdAogICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9
IGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd1RleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24g
Y3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd1RleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25zdAogewogICAgIC8vIERvbid0IGRyYXcgYW55dGhp
bmcgd2hpbGUgd2UgYXJlIHVzaW5nIGN1c3RvbSBmb250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2Vz
cyBvZiBsb2FkaW5nLAogICAgIC8vIGV4Y2VwdCBpZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBz
ZXQgdG8gdHJ1ZSAoaW4gd2hpY2ggY2FzZSBpdCB3aWxsIHVzZSBhIGZhbGxiYWNrCiAgICAgLy8g
Zm9udCkuCiAgICAgaWYgKGxvYWRpbmdDdXN0b21Gb250cygpICYmIGN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbiA9PSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgo
KSA6IHRvKTsKIAogICAgIGlmIChjb2RlUGF0aChydW4pICE9IENvbXBsZXgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5kZXggZGI3ZTM2NGYyNzI1NDlkM2E5Zjg1MmJm
MThhNThiNGUyMDk0MWI0Yy4uZTUzMThkYzBlODFmNzIxMTJjZTU5NzIyNDU1ZTc1YTBjNWEzYTMw
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtODIsNiArODIs
MTEgQEAgcHVibGljOgogICAgIEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgbGV0
dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpOwogICAgIC8vIFRoaXMgY29uc3RydWN0b3Ig
aXMgb25seSB1c2VkIGlmIHRoZSBwbGF0Zm9ybSB3YW50cyB0byBzdGFydCB3aXRoIGEgbmF0aXZl
IGZvbnQuCiAgICAgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc1ByaW50aW5n
LCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOworCisgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5kZXBlbmRlbnQuCisjaWYg
UExBVEZPUk0oSU9TKQorICAgIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIFBhc3NSZWZQ
dHI8Rm9udFNlbGVjdG9yPik7CisjZW5kaWYKICAgICB+Rm9udCgpOwogCiAgICAgRm9udChjb25z
dCBGb250Jik7CkBAIC05OCw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGUoUGFz
c1JlZlB0cjxGb250U2VsZWN0b3I+KSBjb25zdDsKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5v
dFJlYWR5IH07Ci0gICAgdm9pZCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbiA9IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7Cisg
ICAgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVh
ZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGNvbnN0OwogICAgIHZvaWQgZHJh
d0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0
b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRv
ID0gLTEpIGNvbnN0OwogCiAgICAgRGFzaEFycmF5IGRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRo
UmVjdChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgaW50IGZy
b20sIGludCB0bywgY29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CkBAIC0xODAs
MTAgKzE4NSwxMCBAQCBwcml2YXRlOgogCiAgICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1z
dHJlYW0gYWR2YW5jZS4KICAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRl
eHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4
dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OwotICAgIHZvaWQgZHJh
d1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICBmbG9hdCBkcmF3U2ltcGxlVGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1w
bGVUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAg
ICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEq
LCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdDsKLSAgICB2b2lkIGRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7
CisgICAgdm9pZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1
biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJh
d0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEds
eXBoQnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0
OwogICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJm
bG93KiA9IDApIGNvbnN0OwogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQo
Y29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhz
KSBjb25zdDsKQEAgLTE5Niw3ICsyMDEsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gUmV0dXJucyB0
aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4KICAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZh
bmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlw
aEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25z
dDsKLSAgICB2b2lkIGRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIGZs
b2F0IGRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogICAgIHZvaWQgZHJhd0Vt
cGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20s
IGludCB0bykgY29uc3Q7CiAgICAgZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMg
PSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogICAgIGludCBvZmZzZXRGb3JQb3NpdGlv
bkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNs
dWRlUGFydGlhbEdseXBocykgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhY2hlLmNwcAppbmRleCBlZDdhMjAyZGNkMDk4OTYxY2NmOGY2NGEwZWY3ZjRk
MDgxM2RiZjFlLi5mYmU4YmY0NGZkMzdkZWNmNGQ5MzQ0YTgzYmZmNDA5YzkwOWIzNmJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAgLTQ1
LDE0ICs0NSw1MCBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIK
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworLy8gRklYTUU6IFdlIG1heSBiZSBhYmxl
IHRvIHNpbXBsaWZ5IHRoaXMgY29kZSB1c2luZyBDKysxMSB0aHJlYWRpbmcgcHJpbWl0aXZlcywg
aW5jbHVkaW5nIHN0ZDo6Y2FsbF9vbmNlKCkuCitzdGF0aWMgcHRocmVhZF9tdXRleF90IGZvbnRE
YXRhTG9jazsKKworc3RhdGljIHZvaWQgaW5pdEZvbnRDYWNoZUxvY2tPbmNlKCkKK3sKKyAgICBw
dGhyZWFkX211dGV4YXR0cl90IG11dGV4QXR0cmlidXRlOworICAgIHB0aHJlYWRfbXV0ZXhhdHRy
X2luaXQoJm11dGV4QXR0cmlidXRlKTsKKyAgICBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZt
dXRleEF0dHJpYnV0ZSwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpOworICAgIHB0aHJlYWRfbXV0
ZXhfaW5pdCgmZm9udERhdGFMb2NrLCAmbXV0ZXhBdHRyaWJ1dGUpOworICAgIHB0aHJlYWRfbXV0
ZXhhdHRyX2Rlc3Ryb3koJm11dGV4QXR0cmlidXRlKTsKK30KKworc3RhdGljIHB0aHJlYWRfb25j
ZV90IGluaXRGb250TG9ja0NvbnRyb2wgPSBQVEhSRUFEX09OQ0VfSU5JVDsKKworY2xhc3MgRm9u
dExvY2tlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udExvY2tlcik7CitwdWJsaWM6
CisgICAgRm9udExvY2tlcigpCisgICAgeworICAgICAgICBwdGhyZWFkX29uY2UoJmluaXRGb250
TG9ja0NvbnRyb2wsIGluaXRGb250Q2FjaGVMb2NrT25jZSk7CisgICAgICAgIGludCBsb2NrY29k
ZSA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmZm9udERhdGFMb2NrKTsKKyAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnREYXRhTG9jayBsb2Nr
IGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29kZSk7ICAgIAorICAgIH0KKyAgICB+Rm9udExv
Y2tlcigpCisgICAgeworICAgICAgICBpbnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X3VubG9j
aygmZm9udERhdGFMb2NrKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9j
a2NvZGUsICFsb2NrY29kZSwgImZvbnREYXRhTG9jayB1bmxvY2sgZmFpbGVkIHdpdGggY29kZTol
ZCIsIGxvY2tjb2RlKTsKKyAgICB9Cit9OworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogdXNp
bmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogV2Ug
c2hvdWxkIHJldHVybiBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgcG9pbnRlciBzaW5jZSB3ZSBu
ZXZlciByZXR1cm4gYSBudWxscHRyLgogRm9udENhY2hlKiBmb250Q2FjaGUoKQogewotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoRm9udENhY2hlLCBnbG9iYWxGb250Q2FjaGUsICgpKTsKLSAgICBy
ZXR1cm4gJmdsb2JhbEZvbnRDYWNoZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENh
Y2hlPiBnbG9iYWxGb250Q2FjaGU7CisgICAgcmV0dXJuICZnbG9iYWxGb250Q2FjaGUuZ2V0KCk7
CiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hlKCkKQEAgLTE4NCw2ICsyMjAsMTAgQEAgRm9udFBs
YXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBhc3NlZEZhbWlseU5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEZvbnRM
b2NrZXIgZm9udExvY2tlcjsKKyNlbmRpZgorICAgIAogI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJM
RShPUEVOVFlQRV9WRVJUSUNBTCkKICAgICAvLyBMZWFkaW5nICJAIiBpbiB0aGUgZm9udCBuYW1l
IGVuYWJsZXMgV2luZG93cyB2ZXJ0aWNhbCBmbG93IGZsYWcgZm9yIHRoZSBmb250LgogICAgIC8v
IEJlY2F1c2Ugd2UgZG8gdmVydGljYWwgZmxvdyBieSBvdXJzZWx2ZXMsIHdlIGRvbid0IHdhbnQg
dG8gdXNlIHRoZSBXaW5kb3dzIGZlYXR1cmUuCkBAIC0zMTcsOCArMzU3LDE1IEBAIHR5cGVkZWYg
SGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBzdGQ6OnBhaXI8UmVmUHRyPFNpbXBsZUZvbnREYXRh
PiwgdW5zaWduZWQ+LCBGCiAKIHN0YXRpYyBGb250RGF0YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9
IDA7CiAKKyNpZiBQTEFURk9STShJT1MpCitjb25zdCBpbnQgY01heEluYWN0aXZlRm9udERhdGEg
PSAxMjA7Citjb25zdCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAxMDA7Citjb25zdCBp
bnQgY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gNTA7Citjb25zdCBp
bnQgY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gMzA7CisjZWxz
ZQogY29uc3QgaW50IGNNYXhJbmFjdGl2ZUZvbnREYXRhID0gMjI1OwogY29uc3QgaW50IGNUYXJn
ZXRJbmFjdGl2ZUZvbnREYXRhID0gMjAwOworI2VuZGlmCiBzdGF0aWMgTGlzdEhhc2hTZXQ8UmVm
UHRyPFNpbXBsZUZvbnREYXRhPj4qIGdJbmFjdGl2ZUZvbnREYXRhID0gMDsKIAogUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHks
IGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQpA
QCAtMzQwLDYgKzM4NywxMCBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6
OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqCiAgICAgICAgIEFTU0VS
VChtX3B1cmdlUHJldmVudENvdW50KTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IEZvbnRMb2NrZXIgZm9udExvY2tlcjsKKyNlbmRpZgorICAgIAogICAgIGlmICghZ0ZvbnREYXRh
Q2FjaGUpIHsKICAgICAgICAgZ0ZvbnREYXRhQ2FjaGUgPSBuZXcgRm9udERhdGFDYWNoZTsKICAg
ICAgICAgZ0luYWN0aXZlRm9udERhdGEgPSBuZXcgTGlzdEhhc2hTZXQ8UmVmUHRyPFNpbXBsZUZv
bnREYXRhPj47CkBAIC0zODAsNiArNDMxLDEwIEBAIHZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9u
dERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogICAgIEFTU0VSVChnRm9udERh
dGFDYWNoZSk7CiAgICAgQVNTRVJUKCFmb250RGF0YS0+aXNDdXN0b21Gb250KCkpOwogCisjaWYg
UExBVEZPUk0oSU9TKQorICAgIEZvbnRMb2NrZXIgZm9udExvY2tlcjsKKyNlbmRpZgorICAgIAog
ICAgIEZvbnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZ0ZvbnREYXRhQ2FjaGUtPmZpbmQoZm9u
dERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKICAgICBBU1NFUlQoaXQgIT0gZ0ZvbnREYXRhQ2FjaGUt
PmVuZCgpKTsKICAgICBpZiAoaXQgPT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKQpAQCAtMzkyLDgg
KzQ0NywxNyBAQCB2b2lkIEZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSkKIAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0
YUlmTmVlZGVkKCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgYm9vbCB1bmRlck1lbW9yeVBy
ZXNzdXJlID0gbWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuaGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3Vy
ZSgpOworICAgIGludCBpbmFjdGl2ZUZvbnREYXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJl
ID8gY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhIDogY01heEluYWN0aXZl
Rm9udERhdGE7CisgICAgaW50IHRhcmdldEZvbnREYXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNz
dXJlID8gY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhIDogY1Rhcmdl
dEluYWN0aXZlRm9udERhdGE7CisKKyAgICBpZiAoZ0luYWN0aXZlRm9udERhdGEgJiYgIW1fcHVy
Z2VQcmV2ZW50Q291bnQgJiYgZ0luYWN0aXZlRm9udERhdGEtPnNpemUoKSA+IGluYWN0aXZlRm9u
dERhdGFMaW1pdCkKKyAgICAgICAgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGdJbmFjdGl2ZUZvbnRE
YXRhLT5zaXplKCkgLSB0YXJnZXRGb250RGF0YUxpbWl0KTsKKyNlbHNlCiAgICAgaWYgKGdJbmFj
dGl2ZUZvbnREYXRhICYmICFtX3B1cmdlUHJldmVudENvdW50ICYmIGdJbmFjdGl2ZUZvbnREYXRh
LT5zaXplKCkgPiBjTWF4SW5hY3RpdmVGb250RGF0YSkKICAgICAgICAgcHVyZ2VJbmFjdGl2ZUZv
bnREYXRhKGdJbmFjdGl2ZUZvbnREYXRhLT5zaXplKCkgLSBjVGFyZ2V0SW5hY3RpdmVGb250RGF0
YSk7CisjZW5kaWYKIH0KIAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShp
bnQgY291bnQpCkBAIC00MDksNiArNDczLDEwIEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0
aXZlRm9udERhdGEoaW50IGNvdW50KQogCiAgICAgaXNQdXJnaW5nID0gdHJ1ZTsKIAorI2lmIFBM
QVRGT1JNKElPUykKKyAgICBGb250TG9ja2VyIGZvbnRMb2NrZXI7CisjZW5kaWYKKwogICAgIFZl
Y3RvcjxSZWZQdHI8U2ltcGxlRm9udERhdGE+LCAyMD4gZm9udERhdGFUb0RlbGV0ZTsKICAgICBM
aXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+Pjo6aXRlcmF0b3IgZW5kID0gZ0luYWN0
aXZlRm9udERhdGEtPmVuZCgpOwogICAgIExpc3RIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0
YT4+OjppdGVyYXRvciBpdCA9IGdJbmFjdGl2ZUZvbnREYXRhLT5iZWdpbigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCBiNWNmMDkxNmM3N2I0
MzUzZTMzYzM4MTgyZjk4ZWExZDFhNjQyODU1Li41NjcwMmVkMzQyOWZkZDcxYzYzYzdlODMyMDlm
ODdmMjNkODY2NjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuaApAQCAtMzMsMTIgKzMzLDE3IEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgi
CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgog
CisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPENvcmVUZXh0L0NURm9udC5oPgorI2VuZGlm
CisKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxvYmpp
ZGwuaD4KQEAgLTEwMCw5ICsxMDUsOSBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uRm9udERhdGFD
YWNoZUtleSB7CiB9OwogCiBjbGFzcyBGb250Q2FjaGUgewotICAgIGZyaWVuZCBjbGFzcyBGb250
Q2FjaGVQdXJnZVByZXZlbnRlcjsKLQogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRDYWNo
ZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIGZyaWVuZCBjbGFzcyBGb250Q2FjaGVQ
dXJnZVByZXZlbnRlcjsKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhY2hl
PjsKIHB1YmxpYzoKICAgICBmcmllbmQgRm9udENhY2hlKiBmb250Q2FjaGUoKTsKIApAQCAtMTE3
LDYgKzEyMiw5IEBAIHB1YmxpYzoKICAgICAvLyBBbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBwbGF0
Zm9ybS4KICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IHN0YXRpYyBmbG9hdCB3ZWlnaHRPZkNURm9udChDVEZvbnRSZWYpOworI2VuZGlmCiAjaWYgUExB
VEZPUk0oV0lOKQogICAgIElNTGFuZ0ZvbnRMaW5rVHlwZSogZ2V0Rm9udExpbmtJbnRlcmZhY2Uo
KTsKICAgICBzdGF0aWMgdm9pZCBjb21Jbml0aWFsaXplKCk7CkBAIC0xNzgsNiArMTg2LDEwIEBA
IHByaXZhdGU6CiAgICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgYm9v
bCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CiAKICAgICAvLyBUaGVzZSBtZXRob2Rz
IGFyZSBpbXBsZW1lbnRlZCBieSBlYWNoIHBsYXRmb3JtLgorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBGb250UGxhdGZvcm1EYXRhKiBnZXRDdXN0b21GYWxsYmFja0ZvbnQoY29uc3QgVUludDMyLCBj
b25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBn
ZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5n
dGgpOworI2VuZGlmCiAgICAgUGFzc093blB0cjxGb250UGxhdGZvcm1EYXRhPiBjcmVhdGVGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5KTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gc2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CkBAIC0x
OTMsNiArMjA1LDkgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIGZyaWVuZCBjbGFzcyBTaW1wbGVG
b250RGF0YTsgLy8gRm9yIGdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEq
KQogICAgIGZyaWVuZCBjbGFzcyBGb250R2x5cGhzOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBm
cmllbmQgY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyOworI2VuZGlmCiB9OwogCiAvLyBHZXQg
dGhlIGdsb2JhbCBmb250Q2FjaGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udEZhc3RQYXRoLmNwcAppbmRleCAwNzQwMTczNWQ3MzFlMmJjNGIxZGM0M2EzOGM0
NTYxYzM3YTMyZGU1Li45NTYzNDM3M2U5NTU3YTQ5NTAyOWIyZjkwYTA0YzBhYTM0MGNiNjBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGgu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5j
cHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50CiAgICAgcmV0dXJu
IGJlZm9yZVdpZHRoOwogfQogCi12b2lkIEZvbnQ6OmRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZvbnQ6OmRyYXdTaW1wbGVUZXh0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBo
IGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzK2FkdmFuY2VzK2ZvbnQgZGF0YSBmb3IgZWFjaCBnbHlw
aC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTE2NiwxMCArMTY2LDEyIEBAIHZv
aWQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsCiAgICAgZmxvYXQgc3RhcnRYID0gcG9pbnQueCgpICsgZ2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVy
KTsKIAogICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoc3RhcnRYLCBwb2lu
dC55KCkpOwogICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBz
dGFydFBvaW50KTsKKworICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAog
dm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CkBAIC0xODMs
OCArMTg1LDggQEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnUKICAgICBkcmF3RW1waGFzaXNNYXJr
cyhjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSAr
IGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAotdm9pZCBGb250OjpkcmF3R2x5cGhC
dWZmZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0
Ci17ICAgCit2b2lkIEZvbnQ6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBG
bG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKICNpZiAhRU5BQkxFKFNWR19GT05UUykKICAgICBV
TlVTRURfUEFSQU0ocnVuKTsKICNlbmRpZgpAQCAtMjI2LDkgKzIyOCwxMSBAQCB2b2lkIEZvbnQ6
OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgRwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgaWYgKHJlbmRlcmluZ0Nv
bnRleHQgJiYgZm9udERhdGEtPmlzU1ZHRm9udCgpKQogICAgICAgICByZW5kZXJpbmdDb250ZXh0
LT5kcmF3U1ZHR2x5cGhzKGNvbnRleHQsIGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20s
IG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50KTsKLSAgICBlbHNlCisgICAgZWxzZSB7
CiAjZW5kaWYKICAgICAgICAgZHJhd0dseXBocyhjb250ZXh0LCBmb250RGF0YSwgZ2x5cGhCdWZm
ZXIsIGxhc3RGcm9tLCBuZXh0R2x5cGggLSBsYXN0RnJvbSwgc3RhcnRQb2ludCk7CisgICAgICAg
IHBvaW50LnNldFgobmV4dFgpOworICAgIH0KIH0KIAogaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZz
ZXRUb01pZGRsZU9mR2x5cGgoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBHbHlwaCBn
bHlwaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRH
bHlwaHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaApp
bmRleCAyOWVkZGU3OTA5ZjRkNjQzNDI1YzgyZjQyODA5ZjNiZDIxMmVjNzU5Li40YzcwZDdkZjI3
YTlmZTU2ZmQxNDRmYWQ3OTE3OGU1N2UxNGEzMjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCkBAIC0yNyw2ICsyNywxMCBAQAogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAorI2lmIFBMQVRG
T1JNKElPUykKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBHbHlwaFBhZ2VUcmVlTm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggMjFi
ZWEzNzM1ODYzM2VlYTI3NmI2N2Y5MzBhNDA0YmFhMDNlNTI1Yy4uNTMwOGViZGZlNWM1MjU3MDFi
OTVmYTM2MWVkM2U3MDU0MTIyYTZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTMzLDYgKzMzLDkgQEAgRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCiAgICAgOiBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCiAgICAgLCBtX3N5bnRoZXRpY09i
bGlxdWUoZmFsc2UpCiAgICAgLCBtX29yaWVudGF0aW9uKEhvcml6b250YWwpCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgICwgbV9pc0Vtb2ppKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX3NpemUoMCkK
ICAgICAsIG1fd2lkdGhWYXJpYW50KFJlZ3VsYXJXaWR0aCkKICNpZiBQTEFURk9STShXSU4pCkBA
IC02MCw2ICs2Myw5IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoKQogICAg
IDogbV9zeW50aGV0aWNCb2xkKGZhbHNlKQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNl
KQogICAgICwgbV9vcmllbnRhdGlvbihIb3Jpem9udGFsKQorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAsIG1faXNFbW9qaShmYWxzZSkKKyNlbmRpZgogICAgICwgbV9zaXplKDApCiAgICAgLCBtX3dp
ZHRoVmFyaWFudChSZWd1bGFyV2lkdGgpCiAjaWYgT1MoREFSV0lOKQpAQCAtODUsNiArOTEsOSBA
QCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgc3lu
dGhldGljQm9sZCwgYm9vbCBzeW50aGV0aQogICAgIDogbV9zeW50aGV0aWNCb2xkKHN5bnRoZXRp
Y0JvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoc3ludGhldGljT2JsaXF1ZSkKICAgICAs
IG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24pCisjaWYgUExBVEZPUk0oSU9TKQorICAgICwgbV9p
c0Vtb2ppKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAsIG1fd2lkdGhW
YXJpYW50KHdpZHRoVmFyaWFudCkKICNpZiBPUyhEQVJXSU4pCkBAIC0xMTEsNiArMTIwLDkgQEAg
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDR0ZvbnRSZWYgY2dGb250LCBmbG9h
dCBzaXplLCBib29sIHN5bnRoZXRpY0IKICAgICA6IG1fc3ludGhldGljQm9sZChzeW50aGV0aWNC
b2xkKQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKHN5bnRoZXRpY09ibGlxdWUpCiAgICAgLCBt
X29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1faXNF
bW9qaShmYWxzZSkKKyNlbmRpZgogICAgICwgbV9zaXplKHNpemUpCiAgICAgLCBtX3dpZHRoVmFy
aWFudCh3aWR0aFZhcmlhbnQpCiAgICAgLCBtX2ZvbnQoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA3MDBkYjk1ZDAz
ZTlmZTMxYzNmMTY0YTQ4YjAxOTUzMWYzYzViOTUyLi4wNWRmY2MzM2M4MTgzNTQ2Njk1YTRmNzVh
NTU3ZjQ2MDUwNTI0NjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC00OSw2ICs0OSwxMCBAQAogI2lmIE9TKERBUldJ
TikKIE9CSkNfQ0xBU1MgTlNGb250OwogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8Q29y
ZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCisKIHR5cGVkZWYgc3RydWN0IENHRm9u
dCogQ0dGb250UmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVEZvbnQqIENURm9udFJlZjsK
ICNlbmRpZgpAQCAtNzksNyArODMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGb250
RGVzY3JpcHRpb247CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKLSNpZiBPUyhEQVJXSU4pCisjaWYg
T1MoREFSV0lOKSAmJiBVU0UoQVBQS0lUKQogaW5saW5lIENURm9udFJlZiB0b0NURm9udFJlZihO
U0ZvbnQgKm5zRm9udCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KG5zRm9u
dCk7IH0KICNlbmRpZgogCkBAIC05Miw4ICs5NiwxNCBAQCBwdWJsaWM6CiAgICAgRm9udFBsYXRm
b3JtRGF0YShmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2Js
aXF1ZSwgRm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbCwgRm9udFdpZHRoVmFyaWFudCA9IFJl
Z3VsYXJXaWR0aCk7CiAKICNpZiBPUyhEQVJXSU4pCisjaWYgVVNFKEFQUEtJVCkKICAgICBGb250
UGxhdGZvcm1EYXRhKE5TRm9udCosIGZsb2F0IHNpemUsIGJvb2wgaXNQcmludGVyRm9udCA9IGZh
bHNlLCBib29sIHN5bnRoZXRpY0JvbGQgPSBmYWxzZSwgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0g
ZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFs
LCBGb250V2lkdGhWYXJpYW50ID0gUmVndWxhcldpZHRoKTsKKyNlbHNlCisgICAgRm9udFBsYXRm
b3JtRGF0YShDVEZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgaXNQcmludGVyRm9udCA9IGZhbHNl
LCBib29sIHN5bnRoZXRpY0JvbGQgPSBmYWxzZSwgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gZmFs
c2UsCisgICAgICAgICAgICAgICAgICAgICBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBG
b250V2lkdGhWYXJpYW50ID0gUmVndWxhcldpZHRoKTsKKyNlbmRpZgorCiAjaWYgVVNFKENHKQog
ICAgIEZvbnRQbGF0Zm9ybURhdGEoQ0dGb250UmVmLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRp
Y0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uLCBGb250V2lkdGhW
YXJpYW50KTsKICNlbmRpZgpAQCAtMTA3LDExICsxMTcsMTggQEAgcHVibGljOgogI2VuZGlmCiAj
ZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBGb250UGxhdGZvcm1EYXRhKENURm9udFJl
ZiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkID0gZmFsc2UsIGJvb2wgc3ludGhldGlj
T2JsaXF1ZSA9IGZhbHNlLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBGb250V2lkdGhW
YXJpYW50ID0gUmVndWxhcldpZHRoKTsKKyNlbmRpZgorCiAgICAgfkZvbnRQbGF0Zm9ybURhdGEo
KTsKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBIRk9OVCBoZm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udCA/IG1fZm9udC0+Z2V0KCkgOiAwOyB9CiAgICAgYm9vbCB1c2VHREkoKSBjb25zdCB7
IHJldHVybiBtX3VzZUdESTsgfQorI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIENURm9udFJlZiBm
b250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9CisgICAgdm9pZCBzZXRGb250KENURm9udFJl
Zik7CiAjZWxpZiBPUyhEQVJXSU4pCiAgICAgTlNGb250KiBmb250KCkgY29uc3QgeyByZXR1cm4g
bV9mb250OyB9CiAgICAgdm9pZCBzZXRGb250KE5TRm9udCopOwpAQCAtMTIyLDcgKzEzOSwxMiBA
QCBwdWJsaWM6CiAgICAgQ0dGb250UmVmIGNnRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fY2dGb250
LmdldCgpOyB9CiAgICAgQ1RGb250UmVmIGN0Rm9udCgpIGNvbnN0OwogCisjaWYgIVBMQVRGT1JN
KElPUykKICAgICBib29sIHJvdW5kc0dseXBoQWR2YW5jZXMoKSBjb25zdDsKKyNlbHNlCisgICAg
Ym9vbCByb3VuZHNHbHlwaEFkdmFuY2VzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRp
ZiAvLyAhUExBVEZPUk0oSU9TKQorCiAgICAgYm9vbCBhbGxvd3NMaWdhdHVyZXMoKSBjb25zdDsK
ICNlbHNlCiAgICAgQ0dGb250UmVmIGNnRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fY2dGb250Lmdl
dCgpOyB9CkBAIC0xNTMsMTAgKzE3NSwxNSBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oV0lOKSAm
JiAhVVNFKENBSVJPKQogICAgICAgICByZXR1cm4gbV9mb250ID8gbV9mb250LT5oYXNoKCkgOiAw
OwogI2VsaWYgT1MoREFSV0lOKQorI2lmICFQTEFURk9STShJT1MpCiAjaWYgVVNFKENHKQogICAg
ICAgICBBU1NFUlQobV9mb250IHx8ICFtX2NnRm9udCk7CiAjZW5kaWYKICAgICAgICAgdWludHB0
cl90IGhhc2hDb2Rlc1szXSA9IHsgKHVpbnRwdHJfdCltX2ZvbnQsIG1fd2lkdGhWYXJpYW50LCBz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KG1faXNQcmludGVyRm9udCA8PCAzIHwgbV9vcmllbnRhdGlv
biA8PCAyIHwgbV9zeW50aGV0aWNCb2xkIDw8IDEgfCBtX3N5bnRoZXRpY09ibGlxdWUpIH07Cisj
ZWxzZQorICAgICAgICBBU1NFUlQobV9mb250IHx8ICFtX2NnRm9udCB8fCBtX2lzRW1vamkpOwor
ICAgICAgICB1aW50cHRyX3QgaGFzaENvZGVzWzNdID0geyBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KENGSGFzaChtX2ZvbnQpKSwgbV93aWR0aFZhcmlhbnQsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
bV9pc0Vtb2ppIDw8IDQgfCBtX2lzUHJpbnRlckZvbnQgPDwgMyB8IG1fb3JpZW50YXRpb24gPDwg
MiB8IG1fc3ludGhldGljQm9sZCA8PCAxIHwgbV9zeW50aGV0aWNPYmxpcXVlKSB9OworI2VuZGlm
IC8vICFQTEFURk9STShJT1MpCiAgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7CiAjZWxpZiBVU0UoQ0FJUk8pCiAgICAg
ICAgIHJldHVybiBQdHJIYXNoPGNhaXJvX3NjYWxlZF9mb250X3QqPjo6aGFzaChtX3NjYWxlZEZv
bnQpOwpAQCAtMjAzLDcgKzIzMCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwbGF0Zm9ybUlzRXF1
YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpIGNvbnN0OwogICAgIHZvaWQgcGxhdGZvcm1EYXRh
SW5pdChjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgcGxhdGZvcm1EYXRhQXNzaWduKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSNpZiBPUyhE
QVJXSU4pCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBDVEZvbnRSZWYgaGFzaFRhYmxl
RGVsZXRlZEZvbnRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q1RGb250UmVmPigt
MSk7IH0KKyNlbGlmIE9TKERBUldJTikKICAgICAvLyBMb2FkIHZhcmlvdXMgZGF0YSBhYm91dCB0
aGUgZm9udCBzcGVjaWZpZWQgYnkgfG5zRm9udHwgd2l0aCB0aGUgc2l6ZSBmb250U2l6ZSBpbnRv
IHRoZSBmb2xsb3dpbmcgb3V0cHV0IHBhcmFtdGVyczoKICAgICB2b2lkIGxvYWRGb250KE5TRm9u
dCosIGZsb2F0IGZvbnRTaXplLCBOU0ZvbnQqJiBvdXROU0ZvbnQsIENHRm9udFJlZiYpOwogICAg
IHN0YXRpYyBOU0ZvbnQqIGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PE5TRm9udCAqPigtMSk7IH0KQEAgLTIxOSwxMSArMjQ4LDE2IEBAIHB1Ymxp
YzoKICAgICBib29sIG1fc3ludGhldGljQm9sZDsKICAgICBib29sIG1fc3ludGhldGljT2JsaXF1
ZTsKICAgICBGb250T3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgYm9vbCBtX2lzRW1vamk7CisjZW5kaWYKICAgICBmbG9hdCBtX3NpemU7CiAgICAgRm9u
dFdpZHRoVmFyaWFudCBtX3dpZHRoVmFyaWFudDsKIAogcHJpdmF0ZToKLSNpZiBPUyhEQVJXSU4p
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIENURm9udFJlZiBtX2ZvbnQ7CisjZWxpZiBPUyhEQVJX
SU4pCiAgICAgTlNGb250KiBtX2ZvbnQ7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgUmVmUHRy
PFNoYXJlZEdESU9iamVjdDxIRk9OVD4+IG1fZm9udDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAppbmRleCA2NDU0ZTcz
ZTc2ZTlkYjhmM2JlYTNhNGFmMjNjNDdlNzkzY2RjYjBhLi5jYWVmNWU5ZDY5ZGEyZGU0ZTE0Njk0
NjA2OTc2MGY4ZWY1ZGI4NTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCkBAIC0yMTIsNiArMjEyLDE0IEBAIHZv
aWQgR2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKGNvbnN0IEZvbnREYXRhKiBmb250
RGF0YSwgdW5zaWduZWQgcGFnZU51CiAgICAgICAgICAgICAgICAgICAgIG1fcGFnZSA9IEdseXBo
UGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSh0aGlzKTsKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIG1fcGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yU2luZ2xl
Rm9udERhdGEodGhpcywgc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihmb250RGF0
YSkpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGltZXMg
TmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBr
bm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgorICAg
ICAgICAgICAgICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0v
OTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERh
dGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCisgICAgICAgICAgICAgICAgLy8gaW4gPHJk
YXI6Ly9wcm9ibGVtLzEyMDk2ODM1Pi4KKyAgICAgICAgICAgICAgICBpZiAocGFnZU51bWJlciA9
PSA2ICYmIHN0YXRpY19jYXN0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4oZm9udERhdGEpLT5zaG91
bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAgICAgICAgICAgICAgICAgaGF2ZUdseXBocyA9
IGZhbHNlOworICAgICAgICAgICAgICAgIGVsc2UKKyNlbmRpZgogICAgICAgICAgICAgICAgIGhh
dmVHbHlwaHMgPSBmaWxsKG1fcGFnZS5nZXQoKSwgMCwgR2x5cGhQYWdlOjpzaXplLCBidWZmZXIs
IGJ1ZmZlckxlbmd0aCwgc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihmb250RGF0
YSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX3BhZ2UgPSBHbHlw
aFBhZ2U6OmNyZWF0ZUZvck1peGVkRm9udERhdGEodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCAwYzQ1ZWJl
MDc3MjI4MDdjMjczNTIwZDgxOGU1NmE0YThiZGExMWU4Li5mMTJmMDJhNmY2Zjg1NjY5ZmUyZDdi
MmMwMzkwN2E1YzAzZTM4NzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTc2LDEyICs3NiwyMSBAQCBwcml2YXRl
OgogICAgIGludCBtX29mZnNldDsKIH07CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogR3JhcGhpY3ND
b250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KQogICAgIDogbV91cGRhdGluZ0NvbnRyb2xUaW50cyhmYWxzZSkKICAg
ICAsIG1fdHJhbnNwYXJlbmN5Q291bnQoMCkKIHsKICAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1H
cmFwaGljc0NvbnRleHQpOwogfQorI2Vsc2UKK0dyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgYm9v
bCBzaG91bGRVc2VDb250ZXh0Q29sb3JzKQorICAgIDogbV91cGRhdGluZ0NvbnRyb2xUaW50cyhm
YWxzZSkKKyAgICAsIG1fdHJhbnNwYXJlbmN5Q291bnQoMCkKK3sKKyAgICBwbGF0Zm9ybUluaXQo
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIHNob3VsZFVzZUNvbnRleHRDb2xvcnMpOworfQorI2Vu
ZGlmCiAKIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiB7CkBAIC0xMTUsNiAr
MTI0LDI4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKICAgICByZXN0b3JlUGxh
dGZvcm1TdGF0ZSgpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGVsbGlwc2VDb2xvciwgQ29sb3JTcGFjZSBlbGxpcHNlQ29sb3JTcGFjZSwgY29uc3QgQ29sb3Im
IHNoYWRvd0NvbG9yLCBDb2xvclNwYWNlIHNoYWRvd0NvbG9yU3BhY2UpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2F2ZSgpOworCisgICAg
c2V0U3Ryb2tlQ29sb3Ioc2hhZG93Q29sb3IsIHNoYWRvd0NvbG9yU3BhY2UpOworICAgIHNldEZp
bGxDb2xvcihzaGFkb3dDb2xvciwgc2hhZG93Q29sb3JTcGFjZSk7CisKKyAgICBkcmF3RWxsaXBz
ZShGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpICsgMSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKSk7CisKKyAgICBzZXRTdHJva2VDb2xvcihlbGxpcHNlQ29sb3IsIGVsbGlwc2VDb2xv
clNwYWNlKTsKKyAgICBzZXRGaWxsQ29sb3IoZWxsaXBzZUNvbG9yLCBlbGxpcHNlQ29sb3JTcGFj
ZSk7CisKKyAgICBkcmF3RWxsaXBzZShyZWN0KTsgIAorCisgICAgcmVzdG9yZSgpOworfQorI2Vu
ZGlmCisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhp
Y2tuZXNzKQogewogICAgIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzID0gdGhpY2tuZXNzOwpAQCAt
NDA0LDYgKzQzNSw5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKCkg
Y29uc3QKICAgICByZXR1cm4gbV9zdGF0ZS5wYWludGluZ0Rpc2FibGVkOwogfQogCisvLyBGSVhN
RTogUmVwbGFjZSB0aGUgbm9uLWlPUyBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZSBpT1MgaW1wbGVt
ZW50YXRpb24gc2luY2UgdGhlIGxhdHRlciBjb21wdXRlcyByZXR1cm5zCisvLyB0aGUgd2lkdGgg
b2YgdGhlIGRyYXduIHRleHQuIEVuc3VyZSB0aGF0IHRoZXJlIGFyZW4ndCBub3RpY2VhYmxlIGRp
ZmZlcmVuY2VzIGluIGxheW91dC4KKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmICFVU0UoV0lOR0RJ
KQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
CiB7CkBAIC00MTMsNiArNDQ3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChj
b25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0CiAgICAgZm9u
dC5kcmF3VGV4dCh0aGlzLCBydW4sIHBvaW50LCBmcm9tLCB0byk7CiB9CiAjZW5kaWYKKyNlbHNl
CitmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gZm9udC5kcmF3VGV4dCh0aGlzLCBydW4sIHBvaW50LCBmcm9tLCB0byk7Cit9Cisj
ZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBo
YXNpc01hcmtzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0
bykKIHsKQEAgLTQyMiwyMSArNDY1LDQ0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1w
aGFzaXNNYXJrcyhjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvCiAgICAg
Zm9udC5kcmF3RW1waGFzaXNNYXJrcyh0aGlzLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7
CiB9CiAKKy8vIEZJWE1FOiBCZXR0ZXIgbWVyZ2UgdGhlIGlPUyBhbmQgbm9uLWlPUyBkaWZmZXJl
bmNlcy4gSW4gcGFydGljdWxhciwgbWFrZSB0aGlzIG1ldGhvZCB1c2UgdGhlCisvLyByZXR1cm5l
ZCB3aWR0aCBvZiB0aGUgZHJhd24gdGV4dCwgRm9udDo6ZHJhd1RleHQoKSwgaW5zdGVhZCBvZiBj
b21wdXRpbmcgaXQuIEVuc3VyZSB0aGF0IHRoZXJlCisvLyBhcmVuJ3Qgbm90aWNlYWJsZSBkaWZm
ZXJlbmNlcyBpbiBsYXlvdXQgd2l0aCBzdWNoIGEgY2hhbmdlLgorI2lmICFQTEFURk9STShJT1Mp
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnQ6OkN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pCisjZWxzZQorZmxvYXQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udDo6Q3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiwgQmlkaVN0YXR1cyogc3RhdHVzLCBp
bnQgbGVuZ3RoKQorI2VuZGlmCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgICAgICByZXR1cm47CisjZWxzZQorICAgICAgICByZXR1cm4gMDsK
KyNlbmRpZgogCiAgICAgQmlkaVJlc29sdmVyPFRleHRSdW5JdGVyYXRvciwgQmlkaUNoYXJhY3Rl
clJ1bj4gYmlkaVJlc29sdmVyOworI2lmICFQTEFURk9STShJT1MpCiAgICAgYmlkaVJlc29sdmVy
LnNldFN0YXR1cyhCaWRpU3RhdHVzKHJ1bi5kaXJlY3Rpb24oKSwgcnVuLmRpcmVjdGlvbmFsT3Zl
cnJpZGUoKSkpOworI2Vsc2UKKyAgICBiaWRpUmVzb2x2ZXIuc2V0U3RhdHVzKHN0YXR1cyA/ICpz
dGF0dXMgOiBCaWRpU3RhdHVzKHJ1bi5kaXJlY3Rpb24oKSwgcnVuLmRpcmVjdGlvbmFsT3ZlcnJp
ZGUoKSkpOworI2VuZGlmCiAgICAgYmlkaVJlc29sdmVyLnNldFBvc2l0aW9uSWdub3JpbmdOZXN0
ZWRJc29sYXRlcyhUZXh0UnVuSXRlcmF0b3IoJnJ1biwgMCkpOwogCiAgICAgLy8gRklYTUU6IFRo
aXMgb3duZXJzaGlwIHNob3VsZCBiZSByZXZlcnNlZC4gV2Ugc2hvdWxkIHBhc3MgQmlkaVJ1bkxp
c3QKICAgICAvLyB0byBCaWRpUmVzb2x2ZXIgaW4gY3JlYXRlQmlkaVJ1bnNGb3JMaW5lLgogICAg
IEJpZGlSdW5MaXN0PEJpZGlDaGFyYWN0ZXJSdW4+JiBiaWRpUnVucyA9IGJpZGlSZXNvbHZlci5y
dW5zKCk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBiaWRpUmVzb2x2ZXIuY3JlYXRlQmlkaVJ1
bnNGb3JMaW5lKFRleHRSdW5JdGVyYXRvcigmcnVuLCBydW4ubGVuZ3RoKCkpKTsKKyNlbHNlCisg
ICAgYmlkaVJlc29sdmVyLmNyZWF0ZUJpZGlSdW5zRm9yTGluZShUZXh0UnVuSXRlcmF0b3IoJnJ1
biwgbGVuZ3RoIDwgMCA/IHJ1bi5sZW5ndGgoKSA6IGxlbmd0aCkpOworI2VuZGlmICAgIAogICAg
IGlmICghYmlkaVJ1bnMucnVuQ291bnQoKSkKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBy
ZXR1cm47CisjZWxzZQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgogCiAgICAgRmxvYXRQb2lu
dCBjdXJyUG9pbnQgPSBwb2ludDsKICAgICBCaWRpQ2hhcmFjdGVyUnVuKiBiaWRpUnVuID0gYmlk
aVJ1bnMuZmlyc3RSdW4oKTsKQEAgLTQ0NiwxNSArNTEyLDMwIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBGCiAgICAgICAgIHN1YnJ1bi5zZXREaXJlY3Rpb24oaXNSVEwgPyBSVEwgOiBMVFIpOwog
ICAgICAgICBzdWJydW4uc2V0RGlyZWN0aW9uYWxPdmVycmlkZShiaWRpUnVuLT5kaXJPdmVycmlk
ZShmYWxzZSkpOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgZm9udC5kcmF3VGV4dCh0
aGlzLCBzdWJydW4sIGN1cnJQb2ludCwgMCwgLTEsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7
CiAKICAgICAgICAgYmlkaVJ1biA9IGJpZGlSdW4tPm5leHQoKTsKICAgICAgICAgLy8gRklYTUU6
IEhhdmUgRm9udDo6ZHJhd1RleHQgcmV0dXJuIHRoZSB3aWR0aCBvZiB3aGF0IGl0IGRyZXcgc28g
dGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJlLW1lYXN1cmUgaGVyZS4KICAgICAgICAgaWYgKGJpZGlS
dW4pCiAgICAgICAgICAgICBjdXJyUG9pbnQubW92ZShmb250LndpZHRoKHN1YnJ1biksIDApOwor
I2Vsc2UKKyAgICAgICAgZmxvYXQgd2lkdGggPSBmb250LmRyYXdUZXh0KHRoaXMsIHN1YnJ1biwg
Y3VyclBvaW50LCAwLCAtMSwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKKyAgICAgICAgY3Vy
clBvaW50Lm1vdmUod2lkdGgsIDApOworCisgICAgICAgIGJpZGlSdW4gPSBiaWRpUnVuLT5uZXh0
KCk7CisjZW5kaWYKICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKHN0YXR1cykK
KyAgICAgICAgKnN0YXR1cyA9IGJpZGlSZXNvbHZlci5zdGF0dXMoKTsKKyNlbmRpZgogICAgIGJp
ZGlSdW5zLmRlbGV0ZVJ1bnMoKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4gY3Vy
clBvaW50LngoKSAtIHN0YXRpY19jYXN0PGZsb2F0Pihwb2ludC54KCkpOworI2VuZGlmCiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SGlnaGxpZ2h0Rm9yVGV4dChjb25zdCBGb250JiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaCwg
Y29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBpbnQg
ZnJvbSwgaW50IHRvKQpAQCAtNjE1LDYgKzY5NiwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IFJvdW5kZWRSZWN0JiByZWN0KQogICAgIGNsaXAocGF0aCk7
CiB9CiAKKy8vIEZJWE1FOiBDb25zaWRlciB3cml0aW5nIHRoaXMgaW4gdGVybXMgb2YgYSBzcGVj
aWFsaXplZCBSb3VuZGVkUmVjdCB0aGF0IHVzZXMgRmxvYXRSZWN0IGFuZCBGbG9hdFNpemUgcmFk
aWkuCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0LCBjb25zdCBGbG9hdFNpemUmIHRvcFJp
Z2h0LAorICAgIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgRmxvYXRTaXplJiBi
b3R0b21SaWdodCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCB0b3BM
ZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgIGNsaXAocGF0aCk7
Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgUm91
bmRlZFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTczMiw2
ICs4MjUsMTggQEAgQmxlbmRNb2RlIEdyYXBoaWNzQ29udGV4dDo6YmxlbmRNb2RlT3BlcmF0aW9u
KCkgY29uc3QKICAgICByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7CiB9CiAKKyNpZiBQTEFURk9S
TShJT1MpCitib29sIEdyYXBoaWNzQ29udGV4dDo6ZW1vamlEcmF3aW5nRW5hYmxlZCgpCit7Cisg
ICAgcmV0dXJuIG1fc3RhdGUuZW1vamlEcmF3aW5nRW5hYmxlZDsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEVtb2ppRHJhd2luZ0VuYWJsZWQoYm9vbCBlbW9qaURyYXdpbmdFbmFibGVk
KQoreworICAgIG1fc3RhdGUuZW1vamlEcmF3aW5nRW5hYmxlZCA9IGVtb2ppRHJhd2luZ0VuYWJs
ZWQ7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldERyYXdMdW1pbmFuY2VN
YXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spCiB7CiAgICAgbV9zdGF0ZS5kcmF3THVtaW5hbmNl
TWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAxN2M0Y2U0ZGQ3MzFlMzM0MzgzZmNm
MTRkNjdiNTUzZWYzM2UyZDNjLi40Y2E4ZTkzMGRkZjE4NDliN2U1ODg0MDA0MGQ1M2RmNDllZDJk
YTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaApAQCAtOTMsNiArOTMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgVGV4dFJ1bjsKICAgICBjbGFzcyBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDsKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3RydWN0IEJpZGlTdGF0
dXM7CisjZW5kaWYKIAogICAgIGVudW0gVGV4dERyYXdpbmdNb2RlIHsKICAgICAgICAgVGV4dE1v
ZGVGaWxsID0gMSA8PCAwLApAQCAtMTM2LDYgKzEzOSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgICAgICAsIHNoYWRvd0NvbG9yU3BhY2UoQ29sb3JTcGFjZURldmljZVJHQikKICAg
ICAgICAgICAgICwgY29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlU291cmNlT3ZlcikKICAgICAg
ICAgICAgICwgYmxlbmRNb2RlKEJsZW5kTW9kZU5vcm1hbCkKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgICAgICAgICAsIGVtb2ppRHJhd2luZ0VuYWJsZWQodHJ1ZSkKKyAgICAgICAgICAgICwgc2hv
dWxkVXNlQ29udGV4dENvbG9ycyh0cnVlKQorI2VuZGlmCiAgICAgICAgICAgICAsIHNob3VsZEFu
dGlhbGlhcyh0cnVlKQogICAgICAgICAgICAgLCBzaG91bGRTbW9vdGhGb250cyh0cnVlKQogICAg
ICAgICAgICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHModHJ1ZSkKQEAgLTE3Nyw2ICsx
ODQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcGVyYXRvcjsKICAgICAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZTsKIAorI2lmIFBM
QVRGT1JNKElPUykKKyAgICAgICAgYm9vbCBlbW9qaURyYXdpbmdFbmFibGVkIDogMTsKKyAgICAg
ICAgYm9vbCBzaG91bGRVc2VDb250ZXh0Q29sb3JzIDogMTsKKyNlbmRpZgogICAgICAgICBib29s
IHNob3VsZEFudGlhbGlhcyA6IDE7CiAgICAgICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAx
OwogICAgICAgICBib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA6IDE7CkBAIC0xODgs
MTAgKzE5OSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgZHJhd0x1bWlu
YW5jZU1hc2sgOiAxOwogICAgIH07CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBzZXRT
dHJva2VBbmRGaWxsQ29sb3IoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqLCBDR0NvbG9yUmVmKTsK
KyNlbmRpZgorCiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0IHsKICAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoR3JhcGhpY3NDb250ZXh0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAg
ICAgcHVibGljOgorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dChQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOworI2Vsc2UKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiwgYm9vbCBzaG91bGRVc2VDb250ZXh0Q29sb3JzID0g
dHJ1ZSk7CisjZW5kaWYKICAgICAgICAgfkdyYXBoaWNzQ29udGV4dCgpOwogCiAgICAgICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKQEAgLTI0Myw3
ICsyNjIsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFwcGx5RmlsbFBh
dHRlcm4oKTsKICAgICAgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CiAKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0
ciwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgZmxv
YXQgc2NhbGUsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgQmxlbmRN
b2RlID0gQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uID0gRGVmYXVsdEltYWdlT3Jp
ZW50YXRpb24pOworI2Vsc2UKICAgICAgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2
ZUltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIEJsZW5kTW9kZSA9
IEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRhdGlvbiA9IERlZmF1bHRJbWFnZU9yaWVudGF0
aW9uKTsKKyNlbmRpZgogCiAgICAgICAgIC8vIEFsbG93IGZvbnQgc21vb3RoaW5nIChMQ0QgYW50
aWFsaWFzaW5nKS4gTm90IHBhcnQgb2YgdGhlIGdyYXBoaWNzIHN0YXRlLgogICAgICAgICB2b2lk
IHNldEFsbG93c0ZvbnRTbW9vdGhpbmcoYm9vbCk7CkBAIC0yNjQsNyArMjg3LDE2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gc3Ryb2tlIGNvbG9yKS4KICAgICAgICAgdm9pZCBk
cmF3UmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgSW50
UG9pbnQmLCBjb25zdCBJbnRQb2ludCYpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICB2
b2lkIGRyYXdKb2luZWRMaW5lcyhDR1BvaW50IHBvaW50c1tdLCB1bnNpZ25lZCBjb3VudCwgYm9v
bCBhbnRpYWxpYXMsIENHTGluZUNhcCA9IGtDR0xpbmVDYXBCdXR0KTsKKyNlbmRpZgorCiAgICAg
ICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYpOworI2lmIFBMQVRGT1JNKElPUykK
KyAgICAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgdm9p
ZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBz
ZUNvbG9yLCBDb2xvclNwYWNlIGVsbGlwc2VDb2xvclNwYWNlLCBjb25zdCBDb2xvciYgc2hhZG93
Q29sb3IsIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZSk7CisjZW5kaWYKICAgICAgICAgdm9p
ZCBkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50Kiwg
Ym9vbCBzaG91bGRBbnRpYWxpYXMgPSBmYWxzZSk7CiAKICAgICAgICAgdm9pZCBmaWxsUGF0aChj
b25zdCBQYXRoJik7CkBAIC0zMTEsNiArMzQzLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdm9pZCBjbGlwKGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBjbGlwKGNvbnN0
IEZsb2F0UmVjdCYpOwogICAgICAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBSb3VuZGVk
UmVjdCYpOworCisgICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciB3cml0aW5nIHRoaXMgaW4gdGVy
bXMgb2YgYSBzcGVjaWFsaXplZCBSb3VuZGVkUmVjdCB0aGF0IHVzZXMgRmxvYXRSZWN0IGFuZCBG
bG9hdFNpemUgcmFkaWkuCisgICAgICAgIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdCwgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdo
dCwgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJp
Z2h0KTsKKwogICAgICAgICB2b2lkIGNsaXBPdXQoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2
b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBSb3VuZGVkUmVjdCYpOwogICAgICAgICB2b2lk
IGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSk7CkBAIC0zMjIsOSArMzU4LDIyIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdp
bmdNb2RlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3
aW5nTW9kZUZsYWdzKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgYm9vbCBlbW9qaURy
YXdpbmdFbmFibGVkKCk7CisgICAgICAgIHZvaWQgc2V0RW1vamlEcmF3aW5nRW5hYmxlZChib29s
KTsKKyNlbmRpZgorICAgICAgICAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICB2b2lkIGRy
YXdUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBmcm9tID0gMCwgaW50IHRvID0gLTEpOworI2Vsc2UKKyAgICAgICAgZmxvYXQgZHJhd1RleHQo
Y29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20g
PSAwLCBpbnQgdG8gPSAtMSk7CisjZW5kaWYKICAgICAgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJr
cyhjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYgLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmss
IGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgICAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250JiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250OjpDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBGb250OjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOworI2Vsc2UKKyAgICAgICAgZmxv
YXQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQ
b2ludCYsIEZvbnQ6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnQ6OkRvTm90UGFpbnRJ
ZkZvbnROb3RSZWFkeSwgQmlkaVN0YXR1cyogPSAwLCBpbnQgbGVuZ3RoID0gLTEpOworI2VuZGlm
CiAgICAgICAgIHZvaWQgZHJhd0hpZ2hsaWdodEZvclRleHQoY29uc3QgRm9udCYsIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGgsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5k
Q29sb3IsIENvbG9yU3BhY2UsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOwogCiAgICAgICAg
IGVudW0gUm91bmRpbmdNb2RlIHsKQEAgLTMzNiw2ICszODUsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIEZsb2F0UmVjdCBjb21wdXRlTGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYsIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKTsKICAgICAgICAgdm9pZCBkcmF3
TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5n
KTsKICAgICAgICAgZW51bSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSB7CisjaWYgUExBVEZPUk0o
SU9TKQorICAgICAgICAgICAgVGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0
aXZlc0xpbmVTdHlsZSwKKyNlbmRpZgogICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXJTcGVsbGlu
Z0xpbmVTdHlsZSwKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyR3JhbW1hckxpbmVTdHlsZSwK
ICAgICAgICAgICAgIERvY3VtZW50TWFya2VyQXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudExpbmVT
dHlsZSwKQEAgLTQ5Niw3ICs1NDgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBz
dGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZs
b2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwogCiAgICAgcHJp
dmF0ZToKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICB2b2lkIHBsYXRmb3JtSW5pdChQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCopOworI2Vsc2UKKyAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQo
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqLCBib29sIHNob3VsZFVzZUNvbnRleHRDb2xvcnMpOwor
I2VuZGlmCiAgICAgICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKICNpZiBQTEFURk9STShX
SU4pICYmICFVU0UoV0lOR0RJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggOWUyNDQ5MDQyNjg3MWM0YTRjZWVjZWI2
OTdkMzlhODU3YTg0M2M1ZC4uODE1ODhmZjUxYjI4MmI3MGU4MWFkYjE1NjJlNDA1ZTAxODM1Mjg3
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCkBAIC01NCw2ICs1NCwxMiBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9STShN
QUMpCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPE9wZW5HTEVTL0VTMi9nbC5oPgorI2lm
ZGVmIF9fT0JKQ19fCisjaW1wb3J0IDxPcGVuR0xFUy9FQUdMLmg+CisjZW5kaWYgLy8gX19PQkpD
X18KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgog
T0JKQ19DTEFTUyBDQUxheWVyOwogT0JKQ19DTEFTUyBXZWJHTExheWVyOwpAQCAtNjEsNyArNjcs
MTMgQEAgT0JKQ19DTEFTUyBXZWJHTExheWVyOwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgR0x1aW50
OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oSU9TKQorI2lmZGVm
IF9fT0JKQ19fCit0eXBlZGVmIEVBR0xDb250ZXh0KiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
OworI2Vsc2UKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsKKyNlbmRp
ZiAvLyBfX09CSkNfXworI2VsaWYgUExBVEZPUk0oTUFDKQogdHlwZWRlZiBzdHJ1Y3QgX0NHTENv
bnRleHRPYmplY3QgKkNHTENvbnRleHRPYmo7CiAKIHR5cGVkZWYgQ0dMQ29udGV4dE9iaiBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEOwpAQCAtNzkxLDYgKzgwMywxMCBAQCBwdWJsaWM6CiAgICAg
UGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERy
YXdpbmdCdWZmZXIqKTsKICAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJ
bWFnZUJ1ZmZlciopOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgZW5kUGFpbnQoKTsK
KyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBib29sIHBhaW50c0ludG9D
YW52YXNCdWZmZXIoKSBjb25zdDsKICNlbmRpZgpAQCAtOTMzLDYgKzk0OSwxMCBAQCBwcml2YXRl
OgogICAgIHZvaWQgcmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwg
aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKTsKICNl
bmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJvb2wgc2V0UmVuZGVyYnVmZmVyU3RvcmFn
ZUZyb21EcmF3YWJsZShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOworI2VuZGlm
CisKICNpZiBQTEFURk9STShCTEFDS0JFUlJZKQogICAgIHZvaWQgbG9nRnJhbWVCdWZmZXJTdGF0
dXMoaW50IGxpbmUpOwogICAgIHZvaWQgcmVhZFBpeGVsc0lNRyhHQzNEaW50IHgsIEdDM0RpbnQg
eSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpOwpAQCAtOTQ3LDcgKzk2NywxMCBAQCBwcml2YXRlOgog
ICAgIGludCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0OwogICAgIGJvb2wgaXNSZXNv
dXJjZVNhZmUoKTsKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisgICAg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBtX2NvbnRleHRPYmo7CisgICAgUmV0YWluUHRyPFBs
YXRmb3JtTGF5ZXI+IG1fd2ViR0xMYXllcjsKKyNlbGlmIFBMQVRGT1JNKE1BQykKICAgICBDR0xD
b250ZXh0T2JqIG1fY29udGV4dE9iajsKICAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbV93ZWJH
TExheWVyOwogI2VsaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoQ0EpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDJmN2RlNWVh
Y2NhMTQ4MzBiNzdlOWY5MGVhZjcwODFjOGNmOThkMTMuLjcxOTgzODM5M2I0NTI1NzI4NTk5YWZk
NDllN2QwYjhlZDkxZmY5MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCkBAIC0xMTcsNyArMTE3LDYgQEAgdm9pZCBHcmFwaGlj
c0xheWVyOjp3aWxsQmVEZXN0cm95ZWQoKQogICAgIGlmIChtX2NsaWVudCkKICAgICAgICAgbV9j
bGllbnQtPnZlcmlmeU5vdFBhaW50aW5nKCk7CiAjZW5kaWYKLQogICAgIGlmIChtX3JlcGxpY2FM
YXllcikKICAgICAgICAgbV9yZXBsaWNhTGF5ZXItPnNldFJlcGxpY2F0ZWRMYXllcigwKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCmlu
ZGV4IDUxZmQ3NjAxMjcyOWRjYTc2OGQyMTJlYjdkMzZjODRmMTY5NGRiNWIuLmNlNjA0MTA4ZmU1
ZWUzZTg4ODMwYjNjNzcyZmI3YmNmMWY5ZmUxMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKQEAgLTM4Nyw2ICszODcsOSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopIHsgfQogICAg
IHZpcnR1YWwgYm9vbCBzaG91bGREaXJlY3RseUNvbXBvc2l0ZUltYWdlKEltYWdlKikgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxh
dGZvcm1MYXllciopIHsgfSAvLyB2aWRlbyBvciBwbHVnLWluCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogY29udGVudHNMYXllckZvck1lZGlhKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorI2VuZGlmCiAgICAgLy8gUGFzcyBhbiBpbnZhbGlkIGNvbG9yIHRvIHJl
bW92ZSB0aGUgY29udGVudHMgbGF5ZXIuCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9T
b2xpZENvbG9yKGNvbnN0IENvbG9yJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
VG9DYW52YXMoUGxhdGZvcm1MYXllciopIHsgfQpAQCAtNDM3LDYgKzQ0MCwxMCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQoYm9vbCBtYWlu
dGFpbnNBbGlnbm1lbnQpIHsgbV9tYWludGFpbnNQaXhlbEFsaWdubWVudCA9IG1haW50YWluc0Fs
aWdubWVudDsgfQogICAgIHZpcnR1YWwgYm9vbCBtYWludGFpbnNQaXhlbEFsaWdubWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQ7IH0KKyNpZiBQTEFURk9STShJ
T1MpCisgICAgdmlydHVhbCBGbG9hdFNpemUgcGl4ZWxBbGlnbm1lbnRPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBGbG9hdFNpemUoKTsgfQorICAgIGJvb2wgaGFzRmxhdHRlbmVkUGVyc3BlY3RpdmVU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiAhcHJlc2VydmVzM0QoKSAmJiBtX2NoaWxkcmVuVHJh
bnNmb3JtLmhhc1BlcnNwZWN0aXZlKCk7IH0KKyNlbmRpZgogICAgIAogICAgIHZpcnR1YWwgdm9p
ZCBzZXRBcHBsaWVzUGFnZVNjYWxlKGJvb2wgYXBwbGllc1NjYWxlID0gdHJ1ZSkgeyBtX2FwcGxp
ZXNQYWdlU2NhbGUgPSBhcHBsaWVzU2NhbGU7IH0KICAgICB2aXJ0dWFsIGJvb2wgYXBwbGllc1Bh
Z2VTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGllc1BhZ2VTY2FsZTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCmluZGV4IDJhYjdjYTBmM2IyODY0NGVhMTJhMGE3
YThiZTJiYWFjYmE1YWQwMGYuLjgyNzk4YzMwNjk1MDg3M2FiNGVkYTc1ZTVhMDcyNTE3MjBmZDcx
Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKQEAgLTI2LDcgKzI2
LDExIEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIk5hdGl2
ZUltYWdlUHRyLmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbGlmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CiBPQkpDX0NMQVNTIE5TSW1hZ2U7CiAjZWxpZiBQTEFURk9STShXSU4p
CkBAIC01Miw4ICs1NiwxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SWNvbj4g
Y3JlYXRlKEhJQ09OIGhJY29uKSB7IHJldHVybiBhZG9wdFJlZihuZXcgSWNvbihoSWNvbikpOyB9
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHdv
cmsgZm9yIG5vbi1pT1MgcG9ydHMgYW5kIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4K
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJY29uPiBjcmVhdGVJY29uRm9ySW1hZ2UoTmF0aXZlSW1h
Z2VQdHIpOworI2VuZGlmCisKIHByaXZhdGU6Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRG
T1JNKElPUykKKyAgICBJY29uKENHSW1hZ2VSZWYpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBtX2NnSW1hZ2U7CisjZWxpZiBQTEFURk9STShNQUMpCiAgICAgSWNvbihOU0ltYWdlKik7CiAg
ICAgUmV0YWluUHRyPE5TSW1hZ2U+IG1fbnNJbWFnZTsKICNlbGlmIFBMQVRGT1JNKFdJTikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAppbmRleCBlNTI4MzQyNDQz
ODE4NmUzNmRmOWM1YTA5ZTIyNjhiZTU0MGI2OGQ2Li4wZTM2NTFhM2NhMTQxZTQ1NjRiNTYyYTI3
M2M3NDc2YjkyODQyMThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuY3BwCkBAIC0xMzAsMTEgKzEzMCw2NiBAQCB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhp
Y3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIFdoZW4gdXNp
bmcgYWNjZWxlcmF0ZWQgZHJhd2luZyBvbiBpT1MsIGl0J3MgZmFzdGVyIHRvIHN0cmV0Y2ggYW4g
aW1hZ2UgdGhhbiB0byB0aWxlIGl0LgorICAgIGlmIChjdHh0LT5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKSB7CisgICAgICAgIGlmIChzaXplKCkud2lkdGgoKSA9PSAxICYmIGludGVyc2VjdGlvbihv
bmVUaWxlUmVjdCwgZGVzdFJlY3QpLmhlaWdodCgpID09IGRlc3RSZWN0LmhlaWdodCgpKSB7Cisg
ICAgICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVNyY1JlY3Q7CisgICAgICAgICAgICB2aXNpYmxl
U3JjUmVjdC5zZXRYKDApOworICAgICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0WSgoZGVzdFJl
Y3QueSgpIC0gb25lVGlsZVJlY3QueSgpKSAvIHNjYWxlLmhlaWdodCgpKTsKKyAgICAgICAgICAg
IHZpc2libGVTcmNSZWN0LnNldFdpZHRoKDEpOworICAgICAgICAgICAgdmlzaWJsZVNyY1JlY3Qu
c2V0SGVpZ2h0KGRlc3RSZWN0LmhlaWdodCgpIC8gc2NhbGUuaGVpZ2h0KCkpOworICAgICAgICAg
ICAgZHJhdyhjdHh0LCBkZXN0UmVjdCwgdmlzaWJsZVNyY1JlY3QsIHN0eWxlQ29sb3JTcGFjZSwg
b3AsIEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChzaXplKCkuaGVpZ2h0KCkg
PT0gMSAmJiBpbnRlcnNlY3Rpb24ob25lVGlsZVJlY3QsIGRlc3RSZWN0KS53aWR0aCgpID09IGRl
c3RSZWN0LndpZHRoKCkpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlU3JjUmVjdDsK
KyAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFgoKGRlc3RSZWN0LngoKSAtIG9uZVRpbGVS
ZWN0LngoKSkgLyBzY2FsZS53aWR0aCgpKTsKKyAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNl
dFkoMCk7CisgICAgICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRXaWR0aChkZXN0UmVjdC53aWR0
aCgpIC8gc2NhbGUud2lkdGgoKSk7CisgICAgICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRIZWln
aHQoMSk7CisgICAgICAgICAgICBkcmF3KGN0eHQsIGRlc3RSZWN0LCB2aXNpYmxlU3JjUmVjdCwg
c3R5bGVDb2xvclNwYWNlLCBvcCwgQmxlbmRNb2RlTm9ybWFsLCBJbWFnZU9yaWVudGF0aW9uRGVz
Y3JpcHRpb24oKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBDR1BhdHRlcm4gdXNlcyBsb3RzIG9mIG1l
bW9yeSBnb3QgY2FjaGluZyB3aGVuIHRoZSB0aWxlIHNpemUgaXMgbGFyZ2UgKDxyZGFyOi8vcHJv
YmxlbS80NjkxODU5PiwKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vNjIzOTUwNT4pLiBNZW1vcnkg
Y29uc3VtcHRpb24gZGVwZW5kcyBvbiB0aGUgdHJhbnNmb3JtZWQgdGlsZSBzaXplIHdoaWNoIGNh
biBnZXQKKyAgICAvLyBsYXJnZXIgdGhhbiB0aGUgb3JpZ2luYWwgdGlsZSBpZiB1c2VyIHpvb21z
IGluIGVub3VnaC4KKyAgICBjb25zdCBmbG9hdCBtYXhQYXR0ZXJuVGlsZVBpeGVscyA9IDUxMiAq
IDUxMjsKKyAgICBGbG9hdFJlY3QgdHJhbnNmb3JtZWRUaWxlU2l6ZSA9IGN0eHQtPmdldENUTSgp
Lm1hcFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2NhbGVkVGlsZVNpemUpKTsKKyAgICBm
bG9hdCB0cmFuc2Zvcm1lZFRpbGVTaXplUGl4ZWxzID0gdHJhbnNmb3JtZWRUaWxlU2l6ZS53aWR0
aCgpICogdHJhbnNmb3JtZWRUaWxlU2l6ZS5oZWlnaHQoKTsKKyAgICBpZiAodHJhbnNmb3JtZWRU
aWxlU2l6ZVBpeGVscyA+IG1heFBhdHRlcm5UaWxlUGl4ZWxzKSB7CisgICAgICAgIGZsb2F0IGZy
b21ZID0gKGRlc3RSZWN0LnkoKSAtIG9uZVRpbGVSZWN0LnkoKSkgLyBzY2FsZS5oZWlnaHQoKTsK
KyAgICAgICAgZmxvYXQgdG9ZID0gb25lVGlsZVJlY3QueSgpOworICAgICAgICB3aGlsZSAodG9Z
IDwgQ0dSZWN0R2V0TWF4WShkZXN0UmVjdCkpIHsKKyAgICAgICAgICAgIGZsb2F0IGZyb21YID0g
KGRlc3RSZWN0LngoKSAtIG9uZVRpbGVSZWN0LngoKSkgLyBzY2FsZS53aWR0aCgpOworICAgICAg
ICAgICAgZmxvYXQgdG9YID0gb25lVGlsZVJlY3QueCgpOworICAgICAgICAgICAgd2hpbGUgKHRv
WCA8IENHUmVjdEdldE1heFgoZGVzdFJlY3QpKSB7CisgICAgICAgICAgICAgICAgQ0dSZWN0IHRv
UmVjdCA9IENHUmVjdEludGVyc2VjdGlvbihkZXN0UmVjdCwgQ0dSZWN0TWFrZSh0b1gsIHRvWSwg
b25lVGlsZVJlY3Qud2lkdGgoKSwgb25lVGlsZVJlY3QuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAg
ICAgICBDR1JlY3QgZnJvbVJlY3QgPSBDR1JlY3RNYWtlKGZyb21YLCBmcm9tWSwgdG9SZWN0LnNp
emUud2lkdGggLyBzY2FsZS53aWR0aCgpLCB0b1JlY3Quc2l6ZS5oZWlnaHQgLyBzY2FsZS5oZWln
aHQoKSk7CisgICAgICAgICAgICAgICAgZHJhdyhjdHh0LCB0b1JlY3QsIGZyb21SZWN0LCBzdHls
ZUNvbG9yU3BhY2UsIG9wLCBCbGVuZE1vZGVOb3JtYWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlw
dGlvbigpKTsKKyAgICAgICAgICAgICAgICB0b1ggKz0gb25lVGlsZVJlY3Qud2lkdGgoKTsKKyAg
ICAgICAgICAgICAgICBmcm9tWCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b1kg
Kz0gb25lVGlsZVJlY3QuaGVpZ2h0KCk7CisgICAgICAgICAgICBmcm9tWSA9IDA7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAgICAKKwogICAgIEFmZmluZVRyYW5z
Zm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKCkuc2NhbGVOb25Vbmlmb3Jt
KHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICBGbG9hdFJlY3QgdGlsZVJlY3Qo
RmxvYXRQb2ludCgpLCBpbnRyaW5zaWNUaWxlU2l6ZSk7CiAgICAgZHJhd1BhdHRlcm4oY3R4dCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIG9uZVRpbGVSZWN0LmxvY2F0aW9uKCksIHN0eWxl
Q29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0LCBibGVuZE1vZGUpOwogCisjaWYgUExBVEZPUk0oSU9T
KQorICAgIHN0YXJ0QW5pbWF0aW9uKGZhbHNlKTsKKyNlbHNlCiAgICAgc3RhcnRBbmltYXRpb24o
KTsKKyNlbmRpZgogfQogCiAvLyBGSVhNRTogTWVyZ2Ugd2l0aCB0aGUgb3RoZXIgZHJhd1RpbGVk
IGV2ZW50dWFsbHksIHNpbmNlIHdlIG5lZWQgYSBjb21iaW5hdGlvbiBvZiBib3RoIGZvciBzb21l
IHRoaW5ncy4KQEAgLTE2OCw3ICsyMjMsMTEgQEAgdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBo
aWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG8KICAg
ICAKICAgICBkcmF3UGF0dGVybihjdHh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwYXR0
ZXJuUGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRzdFJlY3QpOwogCisjaWYgUExBVEZPUk0o
SU9TKQorICAgIHN0YXJ0QW5pbWF0aW9uKGZhbHNlKTsKKyNlbHNlCiAgICAgc3RhcnRBbmltYXRp
b24oKTsKKyNlbmRpZgogfQogCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmlu
ZGV4IDNjNjMyN2ZiN2FhNmQxZTRkYWM0NGEwZjg3NzQ1OGJmYTEzNWIzZjYuLmFiNzE5MGU5OWU3
NGFjOTVkM2JkZmQxZGJjN2Y1MTdiOTFlZDhmYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAtMTM1LDYgKzEzNSwxMSBAQCBwdWJsaWM6
CiAgICAgSW50U2l6ZSBzaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiA9IEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsKICAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5k
ZXgoc2l6ZV90LCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gPSBJbWFnZU9yaWVudGF0aW9u
RGVzY3JpcHRpb24oKSkgY29uc3Q7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgSW50U2l6ZSBv
cmlnaW5hbFNpemUoUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbikgY29uc3Q7CisgICAgYm9vbCBpc1N1YnNhbXBsZWQoKSBjb25zdCB7IHJl
dHVybiBtX2Jhc2VTdWJzYW1wbGluZzsgfQorI2VuZGlmCisKICAgICBib29sIGdldEhvdFNwb3Qo
SW50UG9pbnQmKSBjb25zdDsKIAogICAgIHNpemVfdCBieXRlc0RlY29kZWRUb0RldGVybWluZVBy
b3BlcnRpZXMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQ
b2ludC5oCmluZGV4IDE2OTIwMzdkNzUzNzQ5ZTJjMjdkOTBkZTU4YjEzMGI3ZDYzMTVjNjUuLmZl
MzNmNGMzZjhiOGYxZTBlN2EyMjI2MTY4ZGRiZDNkOTQ2M2EwNjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaApAQCAtMzQsNiArMzQsNyBAQCB0eXBlZGVm
IHN0cnVjdCBDR1BvaW50IENHUG9pbnQ7CiAjZW5kaWYKIAogCisjaWYgIVBMQVRGT1JNKElPUykK
ICNpZiBPUyhEQVJXSU4pCiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVU
UllfVFlQRVMKIHR5cGVkZWYgc3RydWN0IENHUG9pbnQgTlNQb2ludDsKQEAgLTQxLDYgKzQyLDcg
QEAgdHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50OwogdHlwZWRlZiBzdHJ1Y3QgX05TUG9p
bnQgTlNQb2ludDsKICNlbmRpZgogI2VuZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAog
I2lmIFBMQVRGT1JNKFdJTikKIHR5cGVkZWYgc3RydWN0IHRhZ1BPSU5UIFBPSU5UOwpAQCAtMTEx
LDEwICsxMTMsMTIgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIENHUG9pbnQoKSBjb25zdDsKICNl
bmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKICNpZiBPUyhEQVJXSU4pICYmICFkZWZpbmVkKE5T
R0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKQogICAgIGV4cGxpY2l0IElu
dFBvaW50KGNvbnN0IE5TUG9pbnQmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNl
IGl0J3MgbG9zc3kKICAgICBvcGVyYXRvciBOU1BvaW50KCkgY29uc3Q7CiAjZW5kaWYKKyNlbmRp
ZiAvLyAhUExBVEZPUk0oSU9TKQogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEludFBvaW50KGNv
bnN0IFBPSU5UJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbnRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgK
aW5kZXggNTY5YTkwODE0NDQ5NTkxNGQyZDlkZjRjZGExNWY5MTBlZDczYzc5YS4uNjIyMDUyOTA3
YjM0OTc0MTM3YzUxNTM5Y2Y0Nzc0MjVhYTczNWViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuaApAQCAtMzMsNyArMzMsNyBAQAogdHlwZWRlZiBzdHJ1Y3Qg
Q0dSZWN0IENHUmVjdDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JN
KE1BQykgJiYgIVBMQVRGT1JNKElPUykKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNf
Q0dHRU9NRVRSWV9UWVBFUwogdHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IE5TUmVjdDsKICNlbHNlCkBA
IC00MSw2ICs0MSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBfTlNSZWN0IE5TUmVjdDsKICNlbmRpZgog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisjaWZuZGVmIE5TUmVjdAorI2RlZmluZSBOU1Jl
Y3QgQ0dSZWN0CisjZW5kaWYKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogdHlwZWRlZiBz
dHJ1Y3QgdGFnUkVDVCBSRUNUOwogI2VsaWYgUExBVEZPUk0oR1RLKQpAQCAtMTkyLDkgKzE5OCwx
MSBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dSZWN0KCkgY29uc3Q7CiAjZW5kaWYKIAorI2lm
ICFQTEFURk9STShJT1MpCiAjaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRS
WV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKQogICAgIG9wZXJhdG9yIE5TUmVjdCgp
IGNvbnN0OwogI2VuZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogI2lmIFBMQVRGT1JN
KEJMQUNLQkVSUlkpCiAgICAgSW50UmVjdChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50
UmVjdCYpOwpAQCAtMjUyLDkgKzI2MCwxMSBAQCBpbmxpbmUgYm9vbCBJbnRSZWN0Ojppc0luZmlu
aXRlKCkgY29uc3QKIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBDR1JlY3QmKTsKICNl
bmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKICNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykpCiBJbnRSZWN0IGVu
Y2xvc2luZ0ludFJlY3QoY29uc3QgTlNSZWN0Jik7CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZP
Uk0oSU9TKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFNpemUuaAppbmRleCBkYjdkYmE3ZWRiNTg0MTc4N2I1ZjU4NjI0M2Mx
Y2UxMjNkN2IzMzM5Li45YzdlNGRlODc4YzRjODcxNmZlYmVlOTc4YTI0MWVjY2I2MWRhMjJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCkBAIC0zMiw3ICsz
Miw3IEBACiB0eXBlZGVmIHN0cnVjdCBDR1NpemUgQ0dTaXplOwogI2VuZGlmCiAKLSNpZiBQTEFU
Rk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogI2lmZGVmIE5T
R0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiB0eXBlZGVmIHN0cnVjdCBD
R1NpemUgTlNTaXplOwogI2Vsc2UKQEAgLTQwLDYgKzQwLDEyIEBAIHR5cGVkZWYgc3RydWN0IF9O
U1NpemUgTlNTaXplOwogI2VuZGlmCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpZm5k
ZWYgTlNTaXplCisjZGVmaW5lIE5TU2l6ZSBDR1NpemUKKyNlbmRpZgorI2VuZGlmCisKICNpZiBQ
TEFURk9STShXSU4pCiB0eXBlZGVmIHN0cnVjdCB0YWdTSVpFIFNJWkU7CiAjZWxpZiBQTEFURk9S
TShCTEFDS0JFUlJZKQpAQCAtMTMwLDEwICsxMzYsMTIgQEAgcHVibGljOgogICAgIG9wZXJhdG9y
IENHU2l6ZSgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKSAgICAKICNpZiBQ
TEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01F
VFJZX1RZUEVTKQogICAgIGV4cGxpY2l0IEludFNpemUoY29uc3QgTlNTaXplICYpOyAvLyBkb24n
dCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgIG9wZXJhdG9yIE5TU2l6
ZSgpIGNvbnN0OwogI2VuZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogI2lmIFBMQVRG
T1JNKFdJTikKICAgICBJbnRTaXplKGNvbnN0IFNJWkUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAppbmRleCAwNTcwOWExYmZiMmNjMzRh
YWIwNjU4MGY1M2U2YjBkNTdkNDUyYWE1Li42ZTQ4YWJkN2QxM2U4YTUwOTFmYWU2ODhmZmM2Njdj
MWVlNTI1NWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuY3BwCkBAIC01NCw3ICs1NCwxMiBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9STShN
QUMpCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUlPUy5o
IgorI2RlZmluZSBQbGF0Zm9ybU1lZGlhRW5naW5lQ2xhc3NOYW1lIE1lZGlhUGxheWVyUHJpdmF0
ZUlPUworI2Vsc2UKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVRVEtpdC5oIgorI2VuZGlm
CiAjaWYgVVNFKEFWRk9VTkRBVElPTikKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDLmgiCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKQEAgLTIxMiw3ICsyMTcs
NyBAQCBzdGF0aWMgVmVjdG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+JiBpbnN0YWxsZWRNZWRpYUVu
Z2luZXMoUmVxdWVyeUVuZ2luZU9wdGlvbnMgcgogCiAjaWYgVVNFKEFWRk9VTkRBVElPTikKICAg
ICAgICAgaWYgKFNldHRpbmdzOjppc0FWRm91bmRhdGlvbkVuYWJsZWQoKSkgewotI2lmIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgICAg
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnJlZ2lzdGVyTWVkaWFFbmdpbmUo
YWRkTWVkaWFFbmdpbmUpOwogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAgICAgICAgICAgICBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlZ2lzdGVyTWVkaWFFbmdpbmUo
YWRkTWVkaWFFbmdpbmUpOwpAQCAtMjIzLDEwICsyMjgsMTIgQEAgc3RhdGljIFZlY3RvcjxNZWRp
YVBsYXllckZhY3RvcnkqPiYgaW5zdGFsbGVkTWVkaWFFbmdpbmVzKFJlcXVlcnlFbmdpbmVPcHRp
b25zIHIKICAgICAgICAgfQogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmIFBMQVRG
T1JNKE1BQykKICAgICAgICAgaWYgKFNldHRpbmdzOjppc1FUS2l0RW5hYmxlZCgpKQogICAgICAg
ICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVk
aWFFbmdpbmUpOwogI2VuZGlmCisjZW5kaWYKIAogI2lmIGRlZmluZWQoUGxhdGZvcm1NZWRpYUVu
Z2luZUNsYXNzTmFtZSkKICAgICAgICAgUGxhdGZvcm1NZWRpYUVuZ2luZUNsYXNzTmFtZTo6cmVn
aXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CkBAIC04MzcsNiArODQ0LDUwIEBAIHZv
aWQgTWVkaWFQbGF5ZXI6OmV4aXRGdWxsc2NyZWVuKCkKIH0KICNlbmRpZgogCisjaWYgRU5BQkxF
KElPU19BSVJQTEFZKQorYm9vbCBNZWRpYVBsYXllcjo6aXNDdXJyZW50UGxheWJhY2tUYXJnZXRX
aXJlbGVzcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNDdXJyZW50UGxheWJh
Y2tUYXJnZXRXaXJlbGVzcygpOworfQorCit2b2lkIE1lZGlhUGxheWVyOjpzaG93UGxheWJhY2tU
YXJnZXRQaWNrZXIoKQoreworICAgIG1fcHJpdmF0ZS0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2Vy
KCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXI6Omhhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0
cygpOworfQorCitib29sIE1lZGlhUGxheWVyOjp3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllcjo6c2V0V2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFdpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkKGRpc2FibGVkKTsKK30KKwordm9pZCBNZWRpYVBsYXllcjo6
c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMoYm9vbCBoYXNMaXN0ZW5l
cnMpCit7CisgICAgbV9wcml2YXRlLT5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxp
c3RlbmVycyhoYXNMaXN0ZW5lcnMpOworfQorCit2b2lkIE1lZGlhUGxheWVyOjpjdXJyZW50UGxh
eWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXJD
bGllbnQpCisgICAgICAgIG1fbWVkaWFQbGF5ZXJDbGllbnQtPm1lZGlhUGxheWVyQ3VycmVudFBs
YXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5nZWQodGhpcyk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXI6OnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZCgpCit7CisgICAgaWYgKG1fbWVk
aWFQbGF5ZXJDbGllbnQpCisgICAgICAgIG1fbWVkaWFQbGF5ZXJDbGllbnQtPm1lZGlhUGxheWVy
UGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkKHRoaXMpOworfQorI2VuZGlmCisKICNp
ZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCiBib29sIE1lZGlhUGxheWVyOjpjYW5FbnRl
ckZ1bGxzY3JlZW4oKSBjb25zdAogewpAQCAtOTU2LDYgKzEwMDcsMTggQEAgdm9pZCBNZWRpYVBs
YXllcjo6c2V0UHJpdmF0ZUJyb3dzaW5nTW9kZShib29sIHByaXZhdGVCcm93c2luZ01vZGUpCiAg
ICAgbV9wcml2YXRlLT5zZXRQcml2YXRlQnJvd3NpbmdNb2RlKG1fcHJpdmF0ZUJyb3dzaW5nKTsK
IH0KIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgTWVkaWFQbGF5ZXI6OmF0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKSAKK3sKKyAgICBtX3By
aXZhdGUtPmF0dHJpYnV0ZUNoYW5nZWQobmFtZSwgdmFsdWUpOworfQorCitib29sIE1lZGlhUGxh
eWVyOjpyZWFkeUZvclBsYXliYWNrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5y
ZWFkeUZvclBsYXliYWNrKCk7Cit9CisjZW5kaWYKKwogLy8gQ2xpZW50IGNhbGxiYWNrcy4KIHZv
aWQgTWVkaWFQbGF5ZXI6Om5ldHdvcmtTdGF0ZUNoYW5nZWQoKQogewpAQCAtOTgxLDcgKzEwNDQs
MTIgQEAgdm9pZCBNZWRpYVBsYXllcjo6cmVhZHlTdGF0ZUNoYW5nZWQoKQogCiB2b2lkIE1lZGlh
UGxheWVyOjp2b2x1bWVDaGFuZ2VkKGRvdWJsZSBuZXdWb2x1bWUpCiB7CisjaWYgUExBVEZPUk0o
SU9TKQorICAgIFVOVVNFRF9QQVJBTShuZXdWb2x1bWUpOworICAgIG1fdm9sdW1lID0gbV9wcml2
YXRlLT52b2x1bWUoKTsKKyNlbHNlCiAgICAgbV92b2x1bWUgPSBuZXdWb2x1bWU7CisjZW5kaWYK
ICAgICBpZiAobV9tZWRpYVBsYXllckNsaWVudCkKICAgICAgICAgbV9tZWRpYVBsYXllckNsaWVu
dC0+bWVkaWFQbGF5ZXJWb2x1bWVDaGFuZ2VkKHRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKaW5kZXggMTI2ZDVmNjdkY2RlODlkNzE1
NWMyOWE1NTg2MGU2MGFjN2MwMzRjOC4uMjI3ZTllN2Q5YjZkYTQwNzk4MzQxYTRlODQ3YmI1ZWI0
MjY3YmUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5oCkBAIC0yMjQsNiArMjI0LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbWVk
aWFQbGF5ZXJLZXlOZWVkZWQoTWVkaWFQbGF5ZXIqLCBVaW50OEFycmF5KikgeyByZXR1cm4gZmFs
c2U7IH0KICNlbmRpZgogICAgIAorI2lmIEVOQUJMRShJT1NfQUlSUExBWSkKKyAgICB2aXJ0dWFs
IHZvaWQgbWVkaWFQbGF5ZXJDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZChN
ZWRpYVBsYXllciopIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJQbGF5YmFja1Rh
cmdldEF2YWlsYWJpbGl0eUNoYW5nZWQoTWVkaWFQbGF5ZXIqKSB7IH07CisjZW5kaWYKKwogICAg
IHZpcnR1YWwgU3RyaW5nIG1lZGlhUGxheWVyUmVmZXJyZXIoKSBjb25zdCB7IHJldHVybiBTdHJp
bmcoKTsgfQogICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhUGxheWVyVXNlckFnZW50KCkgY29uc3Qg
eyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0dWFsIENPUlNNb2RlIG1lZGlhUGxheWVyQ09S
U01vZGUoKSBjb25zdCB7IHJldHVybiBVbnNwZWNpZmllZDsgfQpAQCAtNDMzLDYgKzQzOCwyMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBleGl0RnVsbHNjcmVlbigpOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoSU9TX0FJUlBMQVkpCisgICAgYm9vbCBpc0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNz
KCkgY29uc3Q7CisgICAgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoKTsKKworICAgIGJv
b2wgaGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMoKSBjb25zdDsKKworICAgIGJvb2wgd2lyZWxl
c3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdDsKKyAgICB2b2lkIHNldFdpcmVsZXNzVmlk
ZW9QbGF5YmFja0Rpc2FibGVkKGJvb2wpOworCisgICAgdm9pZCBjdXJyZW50UGxheWJhY2tUYXJn
ZXRJc1dpcmVsZXNzQ2hhbmdlZCgpOworICAgIHZvaWQgcGxheWJhY2tUYXJnZXRBdmFpbGFiaWxp
dHlDaGFuZ2VkKCk7CisKKyAgICB2b2lkIHNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
TGlzdGVuZXJzKGJvb2wpOworI2VuZGlmCisKICNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklE
RU8pCiAgICAgYm9vbCBjYW5FbnRlckZ1bGxzY3JlZW4oKSBjb25zdDsKICNlbmRpZgpAQCAtNDg2
LDYgKzUwNiwxMSBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgZW5naW5lRGVzY3JpcHRpb24oKSBj
b25zdDsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICBib29sIHJlYWR5Rm9y
UGxheWJhY2soKSBjb25zdDsKKyNlbmRpZgorCiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNh
Y2hlZFJlc291cmNlTG9hZGVyKCk7CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5o
CmluZGV4IGNmN2I1ZjI4ODVmNTE1ZjI2MzQzMDNiZTYzYWU3NTVkMmI4NDM0ZDguLmZiYWZkNzBj
ZDllZjM0YTA3ODA0YTI1YTc5MjkzYjg3ODIzOWIzNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCkBAIC05Nyw2ICs5
Nyw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRWb2x1bWUoZmxvYXQpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXRWb2x1bWVEb3VibGUoZG91YmxlIHZvbHVtZSkgeyByZXR1cm4g
c2V0Vm9sdW1lKHZvbHVtZSk7IH0KKyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCBmbG9h
dCB2b2x1bWUoKSBjb25zdCB7IHJldHVybiAxOyB9CisjZW5kaWYKIAogICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c011dGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldE11dGVkKGJvb2wpIHsgfQpAQCAtMTQxLDYgKzE0NCwxOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuKCkgeyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShJ
T1NfQUlSUExBWSkKKyAgICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJl
bGVzcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNob3dQbGF5
YmFja1RhcmdldFBpY2tlcigpIHsgfQorCisgICAgdmlydHVhbCBib29sIGhhc1dpcmVsZXNzUGxh
eWJhY2tUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgYm9v
bCB3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKGJvb2wp
IHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
TGlzdGVuZXJzKGJvb2wpIHsgfQorI2VuZGlmCisKICNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5f
VklERU8pCiAgICAgdmlydHVhbCBib29sIGNhbkVudGVyRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAjZW5kaWYKQEAgLTIwOSw3ICsyMjQsMTIgQEAgcHVibGljOgogI2lmIFVT
RShHU1RSRUFNRVIpCiAgICAgdmlydHVhbCB2b2lkIHNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24o
KSB7IH0KICNlbmRpZgotICAgIAorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgdm9p
ZCBhdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQorICAg
IHZpcnR1YWwgYm9vbCByZWFkeUZvclBsYXliYWNrKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
I2VuZGlmCisKICAgICB2aXJ0dWFsIFN0cmluZyBsYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2so
KSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9CiAKICAgICB2aXJ0dWFsIHNpemVfdCBl
eHRyYU1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAKaW5kZXggMzIzNWI0MGVm
NTJkMTcyZjZhNmM2N2I2YmE2MmE1MzExMDlkMGExOS4uYjA2MjdhZDI0NDcyNzNhOGI1MzAzOTJi
NTI5ZDFhOTJmMzcyZDgyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcApAQCAtODAsNiArODAsOSBAQCBTaW1wbGVGb250RGF0
YTo6U2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRyPEFkZGl0aW9uYWxGb250RGF0YT4gZm9u
dERhdGEsIGZsbwogICAgICwgbV92ZXJ0aWNhbERhdGEoMCkKICNlbmRpZgogICAgICwgbV9oYXNW
ZXJ0aWNhbEdseXBocyhmYWxzZSkKKyNpZiBQTEFURk9STShJT1MpCisgICAgLCBtX3Nob3VsZE5v
dEJlVXNlZEZvckFyYWJpYyhmYWxzZSkKKyNlbmRpZgogewogICAgIG1fZm9udERhdGEtPmluaXRp
YWxpemVGb250RGF0YSh0aGlzLCBmb250U2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAppbmRleCA0NWEwZjU1ZmEwOTUyZTlm
YTE3MWQ4MDI3Y2YyYTU4OWYyNDQ5MmFkLi45Y2QzMTZmMjY2NzQ1MmM3ZGY2YThjNjFhNWMxNWU4
NzJhM2Q0YTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVGb250RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUZvbnREYXRhLmgKQEAgLTE4MCwxMSArMTgwLDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0IE9WRVJSSURFOwogI2VuZGlmCiAKLSNpZiBQTEFU
Rk9STShNQUMpCisjaWYgVVNFKEFQUEtJVCkKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZ2V0
Q29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnREYXRhKE5TRm9udCAqa2V5KSBjb25zdDsKICAgICBO
U0ZvbnQqIGdldE5TRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsg
fQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgQ1RGb250UmVmIGdldENURm9udCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQorICAgIGJvb2wgc2hvdWxk
Tm90QmVVc2VkRm9yQXJhYmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RCZVVzZWRGb3JB
cmFiaWM7IH07CisjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCiAgICAgQ0ZEaWN0aW9uYXJ5UmVm
IGdldENGU3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzLCBGb250T3JpZW50YXRp
b24pIGNvbnN0OwogI2VuZGlmCkBAIC0xOTcsNyArMjAxLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgaWYgKGlzU1ZHRm9udCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODAKKyNp
ZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPiAxMDgwKQogICAgICAgICB3a0NURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0
aW9ucyA9ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgS2VybmluZyA/IHdrQ1RGb250VHJhbnNmb3Jt
QXBwbHlQb3NpdGlvbmluZyA6IDApIHwgKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBMaWdhdHVyZXMg
PyB3a0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyA6IDApOwogICAgICAgICByZXR1cm4gd2tD
VEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcmVp
bnRlcnByZXRfY2FzdDxDR1NpemUqPihhZHZhbmNlcyksIGdseXBoQ291bnQsIG9wdGlvbnMpOwog
I2Vsc2UKQEAgLTMxNSw2ICszMTksOSBAQCBwcml2YXRlOgogICAgIG11dGFibGUgU0NSSVBUX0ZP
TlRQUk9QRVJUSUVTKiBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwogI2VuZGlmCiAjZW5kaWYKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgYm9vbCBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYzsKKyNl
bmRpZgogfTsKIAogQUxXQVlTX0lOTElORSBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OmJvdW5k
c0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKaW5kZXggYTcyYWU0YjdhNWI5MzU0
ZDU2Y2ZhYmVjODU5OWMwNzFhNGIyOTgxZC4uYTQ2NzM5YTNhZTEwZjAxYjI5NjEwODVkZWY0YzEy
YzhjYjk4NDc1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U3RyaW5nVHJ1bmNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TdHJpbmdUcnVuY2F0b3IuY3BwCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogI2RlZmluZSBTVFJJTkdfQlVGRkVSX1NJWkUgMjA0OAogCi10eXBlZGVmIHVuc2lnbmVk
IFRydW5jYXRpb25GdW5jdGlvbihjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2ln
bmVkIGtlZXBDb3VudCwgVUNoYXIqIGJ1ZmZlcik7Cit0eXBlZGVmIHVuc2lnbmVkIFRydW5jYXRp
b25GdW5jdGlvbihjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGtlZXBD
b3VudCwgVUNoYXIqIGJ1ZmZlciwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyk7CiAKIHN0YXRp
YyBpbmxpbmUgaW50IHRleHRCcmVha0F0T3JQcmVjZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGl0
LCBpbnQgb2Zmc2V0KQogewpAQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBib3Vu
ZGVkVGV4dEJyZWFrRm9sbG93aW5nKFRleHRCcmVha0l0ZXJhdG9yKiBpdCwgaW50IG9mZnNldCwg
aQogICAgIHJldHVybiByZXN1bHQgPT0gVGV4dEJyZWFrRG9uZSA/IGxlbmd0aCA6IHJlc3VsdDsK
IH0KIAotc3RhdGljIHVuc2lnbmVkIGNlbnRlclRydW5jYXRlVG9CdWZmZXIoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQga2VlcENvdW50LCBVQ2hhciogYnVm
ZmVyKQorc3RhdGljIHVuc2lnbmVkIGNlbnRlclRydW5jYXRlVG9CdWZmZXIoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQga2VlcENvdW50LCBVQ2hhciogYnVm
ZmVyLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzKQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKGtlZXBDb3VudCA8IGxlbmd0aCk7CiAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oa2VlcENvdW50IDwgU1RSSU5HX0JVRkZFUl9TSVpFKTsKQEAgLTY2
LDMyICs2NiwxMjUgQEAgc3RhdGljIHVuc2lnbmVkIGNlbnRlclRydW5jYXRlVG9CdWZmZXIoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgdW4KICAgICBOb25TaGFyZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmluZy5jaGFyYWN0ZXJzKCksIGxlbmd0aCk7CiAgICAg
dW5zaWduZWQgb21pdEVuZCA9IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoaXQsIG9taXRTdGFy
dCArIChsZW5ndGggLSBrZWVwQ291bnQpIC0gMSwgbGVuZ3RoKTsKICAgICBvbWl0U3RhcnQgPSB0
ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKGl0LCBvbWl0U3RhcnQpOwotICAgIAotICAgIHVuc2lnbmVk
IHRydW5jYXRlZExlbmd0aCA9IG9taXRTdGFydCArIDEgKyAobGVuZ3RoIC0gb21pdEVuZCk7CisK
KyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBndWFyZCB0aGlzIGNv
ZGUgYmVoaW5kIGFuIGVkaXRpbmcgYmVoYXZpb3IuIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExB
VEZPUk0oSU9TKS1ndWFyZC4KKworICAgIC8vIFN0cmlwIHNpbmdsZSBjaGFyYWN0ZXIgYmVmb3Jl
IGVsbGlwc2lzIGNoYXJhY3Rlciwgd2hlbiB0aGF0IGNoYXJhY3RlciBpcyBwcmVjZWRlZCBieSBh
IHNwYWNlCisgICAgaWYgKG9taXRTdGFydCA+IDEgJiYgc3RyaW5nW29taXRTdGFydCAtIDFdICE9
IHNwYWNlICYmIG9taXRTdGFydCA+IDIgJiYgc3RyaW5nW29taXRTdGFydCAtIDJdID09IHNwYWNl
KQorICAgICAgICAtLW9taXRTdGFydDsKKworICAgIC8vIFN0cmlwIHdoaXRlc3BhY2UgYmVmb3Jl
IGFuZCBhZnRlciB0aGUgZWxsaXBzaXMgY2hhcmFjdGVyCisgICAgd2hpbGUgKG9taXRTdGFydCA+
IDEgJiYgc3RyaW5nW29taXRTdGFydCAtIDFdID09IHNwYWNlKQorICAgICAgICAtLW9taXRTdGFy
dDsKKworICAgIC8vIFN0cmlwIHNpbmdsZSBjaGFyYWN0ZXIgYWZ0ZXIgZWxsaXBzaXMgY2hhcmFj
dGVyLCB3aGVuIHRoYXQgY2hhcmFjdGVyIGlzIGZvbGxvd2VkIGJ5IGEgc3BhY2UKKyAgICBpZiAo
KGxlbmd0aCAtIG9taXRFbmQpID4gMSAmJiBzdHJpbmdbb21pdEVuZF0gIT0gc3BhY2UgJiYgKGxl
bmd0aCAtIG9taXRFbmQpID4gMiAmJiBzdHJpbmdbb21pdEVuZCArIDFdID09IHNwYWNlKQorICAg
ICAgICArK29taXRFbmQ7CisKKyAgICB3aGlsZSAoKGxlbmd0aCAtIG9taXRFbmQpID4gMSAmJiBz
dHJpbmdbb21pdEVuZF0gPT0gc3BhY2UpCisgICAgICAgICsrb21pdEVuZDsKKyNlbmRpZgorCisg
ICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoID0gc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPyBvbWl0
U3RhcnQgKyAxICsgKGxlbmd0aCAtIG9taXRFbmQpIDogbGVuZ3RoIC0gKG9taXRFbmQgLSBvbWl0
U3RhcnQpOwogICAgIEFTU0VSVCh0cnVuY2F0ZWRMZW5ndGggPD0gbGVuZ3RoKTsKIAogICAgIG1l
bWNweShidWZmZXIsIHN0cmluZy5jaGFyYWN0ZXJzKCksIHNpemVvZihVQ2hhcikgKiBvbWl0U3Rh
cnQpOwotICAgIGJ1ZmZlcltvbWl0U3RhcnRdID0gaG9yaXpvbnRhbEVsbGlwc2lzOwotICAgIG1l
bWNweSgmYnVmZmVyW29taXRTdGFydCArIDFdLCAmc3RyaW5nLmNoYXJhY3RlcnMoKVtvbWl0RW5k
XSwgc2l6ZW9mKFVDaGFyKSAqIChsZW5ndGggLSBvbWl0RW5kKSk7Ci0gICAgCisgICAgaWYgKHNo
b3VsZEluc2VydEVsbGlwc2lzKSB7CisgICAgICAgIGJ1ZmZlcltvbWl0U3RhcnRdID0gaG9yaXpv
bnRhbEVsbGlwc2lzOworICAgICAgICBtZW1jcHkoJmJ1ZmZlcltvbWl0U3RhcnQgKyAxXSwgJnN0
cmluZy5jaGFyYWN0ZXJzKClbb21pdEVuZF0sIHNpemVvZihVQ2hhcikgKiAobGVuZ3RoIC0gb21p
dEVuZCkpOyAgICAKKyAgICB9IGVsc2UKKyAgICAgICAgbWVtY3B5KCZidWZmZXJbb21pdFN0YXJ0
XSwgJnN0cmluZy5jaGFyYWN0ZXJzKClbb21pdEVuZF0sIHNpemVvZihVQ2hhcikgKiAobGVuZ3Ro
IC0gb21pdEVuZCkpOwogICAgIHJldHVybiB0cnVuY2F0ZWRMZW5ndGg7CiB9CiAKLXN0YXRpYyB1
bnNpZ25lZCByaWdodFRydW5jYXRlVG9CdWZmZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQga2VlcENvdW50LCBVQ2hhciogYnVmZmVyKQorc3RhdGljIHVu
c2lnbmVkIHJpZ2h0VHJ1bmNhdGVUb0J1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQsIFVDaGFyKiBidWZmZXIsIGJvb2wgc2hvdWxk
SW5zZXJ0RWxsaXBzaXMpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
a2VlcENvdW50IDwgbGVuZ3RoKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihrZWVwQ291bnQgPCBTVFJJTkdfQlVGRkVSX1NJWkUpOwotICAgIAorCisjaWYgUExBVEZPUk0o
SU9TKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZ3VhcmQgdGhpcyBjb2RlIGJlaGluZCBhbiBl
ZGl0aW5nIGJlaGF2aW9yLiBUaGVuIHdlIGNhbiByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3Vh
cmQuCisKKyAgICAvLyBTdHJpcCBzaW5nbGUgY2hhcmFjdGVyIGJlZm9yZSBlbGxpcHNpcyBjaGFy
YWN0ZXIsIHdoZW4gdGhhdCBjaGFyYWN0ZXIgaXMgcHJlY2VkZWQgYnkgYSBzcGFjZQorICAgIGlm
IChrZWVwQ291bnQgPiAxICYmIHN0cmluZ1trZWVwQ291bnQgLSAxXSAhPSBzcGFjZSAmJiBrZWVw
Q291bnQgPiAyICYmIHN0cmluZ1trZWVwQ291bnQgLSAyXSA9PSBzcGFjZSkKKyAgICAgICAgLS1r
ZWVwQ291bnQ7CisKKyAgICAvLyBTdHJpcCB3aGl0ZXNwYWNlIGJlZm9yZSB0aGUgZWxsaXBzaXMg
Y2hhcmFjdGVyCisgICAgd2hpbGUgKGtlZXBDb3VudCA+IDEgJiYgc3RyaW5nW2tlZXBDb3VudCAt
IDFdID09IHNwYWNlKQorICAgICAgICAtLWtlZXBDb3VudDsKKyNlbmRpZgorCiAgICAgTm9uU2hh
cmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChzdHJpbmcuY2hhcmFjdGVycygpLCBsZW5ndGgp
OwogICAgIHVuc2lnbmVkIGtlZXBMZW5ndGggPSB0ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKGl0LCBr
ZWVwQ291bnQpOwotICAgIHVuc2lnbmVkIHRydW5jYXRlZExlbmd0aCA9IGtlZXBMZW5ndGggKyAx
OwotICAgIAorICAgIHVuc2lnbmVkIHRydW5jYXRlZExlbmd0aCA9IHNob3VsZEluc2VydEVsbGlw
c2lzID8ga2VlcExlbmd0aCArIDEgOiBrZWVwTGVuZ3RoOworCiAgICAgbWVtY3B5KGJ1ZmZlciwg
c3RyaW5nLmNoYXJhY3RlcnMoKSwgc2l6ZW9mKFVDaGFyKSAqIGtlZXBMZW5ndGgpOwotICAgIGJ1
ZmZlcltrZWVwTGVuZ3RoXSA9IGhvcml6b250YWxFbGxpcHNpczsKLSAgICAKKyAgICBpZiAoc2hv
dWxkSW5zZXJ0RWxsaXBzaXMpCisgICAgICAgIGJ1ZmZlcltrZWVwTGVuZ3RoXSA9IGhvcml6b250
YWxFbGxpcHNpczsKKwogICAgIHJldHVybiB0cnVuY2F0ZWRMZW5ndGg7CiB9CiAKK3N0YXRpYyB1
bnNpZ25lZCByaWdodENsaXBUb0NoYXJhY3RlckJ1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywg
dW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQsIFVDaGFyKiBidWZmZXIsIGJvb2wp
Cit7CisgICAgQVNTRVJUKGtlZXBDb3VudCA8IGxlbmd0aCk7CisgICAgQVNTRVJUKGtlZXBDb3Vu
dCA8IFNUUklOR19CVUZGRVJfU0laRSk7CisKKyAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0
ZXJhdG9yIGl0KHN0cmluZy5jaGFyYWN0ZXJzKCksIGxlbmd0aCk7CisgICAgdW5zaWduZWQga2Vl
cExlbmd0aCA9IHRleHRCcmVha0F0T3JQcmVjZWRpbmcoaXQsIGtlZXBDb3VudCk7CisgICAgbWVt
Y3B5KGJ1ZmZlciwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc2l6ZW9mKFVDaGFyKSAqIGtlZXBMZW5n
dGgpOworCisgICAgcmV0dXJuIGtlZXBMZW5ndGg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCByaWdo
dENsaXBUb1dvcmRCdWZmZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQga2VlcENvdW50LCBVQ2hhciogYnVmZmVyLCBib29sKQoreworICAgIEFTU0VSVChr
ZWVwQ291bnQgPCBsZW5ndGgpOworICAgIEFTU0VSVChrZWVwQ291bnQgPCBTVFJJTkdfQlVGRkVS
X1NJWkUpOworCisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3Io
c3RyaW5nLmNoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBrZWVwTGVuZ3RoID0g
dGV4dEJyZWFrQXRPclByZWNlZGluZyhpdCwga2VlcENvdW50KTsKKyAgICBtZW1jcHkoYnVmZmVy
LCBzdHJpbmcuY2hhcmFjdGVycygpLCBzaXplb2YoVUNoYXIpICoga2VlcExlbmd0aCk7CisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBndWFyZCB0aGlzIGNvZGUg
YmVoaW5kIGFuIGVkaXRpbmcgYmVoYXZpb3IuIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZP
Uk0oSU9TKS1ndWFyZC4KKyAgICAvLyBNb3RpdmF0ZWQgYnkgPHJkYXI6Ly9wcm9ibGVtLzc0Mzkz
Mjc+IHRydW5jYXRpb24gc2hvdWxkIG5vdCBpbmNsdWRlIGEgdHJhaWxpbmcgc3BhY2UKKyAgICB3
aGlsZSAoKGtlZXBMZW5ndGggPiAwKSAmJiAoc3RyaW5nW2tlZXBMZW5ndGggLSAxXSA9PSBzcGFj
ZSkpCisgICAgICAgIC0ta2VlcExlbmd0aDsKKyNlbmRpZgorICAgIHJldHVybiBrZWVwTGVuZ3Ro
OworfQorCitzdGF0aWMgdW5zaWduZWQgbGVmdFRydW5jYXRlVG9CdWZmZXIoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQga2VlcENvdW50LCBVQ2hhciogYnVm
ZmVyLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzKQoreworICAgIEFTU0VSVChrZWVwQ291bnQg
PCBsZW5ndGgpOworICAgIEFTU0VSVChrZWVwQ291bnQgPCBTVFJJTkdfQlVGRkVSX1NJWkUpOwor
CisgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGxlbmd0aCAtIGtlZXBDb3VudDsKKworICAgIE5v
blNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoc3RyaW5nLmNoYXJhY3RlcnMoKSwgbGVu
Z3RoKTsKKyAgICB1bnNpZ25lZCBhZGp1c3RlZFN0YXJ0SW5kZXggPSBzdGFydEluZGV4OworICAg
IHN0YXJ0SW5kZXggPSBib3VuZGVkVGV4dEJyZWFrRm9sbG93aW5nKGl0LCBzdGFydEluZGV4LCBs
ZW5ndGggLSBzdGFydEluZGV4KTsKKworICAgIC8vIFN0cmlwIHNpbmdsZSBjaGFyYWN0ZXIgYWZ0
ZXIgZWxsaXBzaXMgY2hhcmFjdGVyLCB3aGVuIHRoYXQgY2hhcmFjdGVyIGlzIHByZWNlZGVkIGJ5
IGEgc3BhY2UKKyAgICBpZiAoYWRqdXN0ZWRTdGFydEluZGV4IDwgbGVuZ3RoICYmIHN0cmluZ1th
ZGp1c3RlZFN0YXJ0SW5kZXhdICE9IHNwYWNlCisgICAgICAgICYmIGFkanVzdGVkU3RhcnRJbmRl
eCA8IGxlbmd0aCAtIDEgJiYgc3RyaW5nW2FkanVzdGVkU3RhcnRJbmRleCArIDFdID09IHNwYWNl
KQorICAgICAgICArK2FkanVzdGVkU3RhcnRJbmRleDsKKworICAgIC8vIFN0cmlwIHdoaXRlc3Bh
Y2UgYWZ0ZXIgdGhlIGVsbGlwc2lzIGNoYXJhY3RlcgorICAgIHdoaWxlIChhZGp1c3RlZFN0YXJ0
SW5kZXggPCBsZW5ndGggJiYgc3RyaW5nW2FkanVzdGVkU3RhcnRJbmRleF0gPT0gc3BhY2UpCisg
ICAgICAgICsrYWRqdXN0ZWRTdGFydEluZGV4OworCisgICAgaWYgKHNob3VsZEluc2VydEVsbGlw
c2lzKSB7CisgICAgICAgIGJ1ZmZlclswXSA9IGhvcml6b250YWxFbGxpcHNpczsKKyAgICAgICAg
bWVtY3B5KCZidWZmZXJbMV0sICZzdHJpbmcuY2hhcmFjdGVycygpW2FkanVzdGVkU3RhcnRJbmRl
eF0sIHNpemVvZihVQ2hhcikgKiAobGVuZ3RoIC0gYWRqdXN0ZWRTdGFydEluZGV4ICsgMSkpOwor
ICAgICAgICByZXR1cm4gbGVuZ3RoIC0gYWRqdXN0ZWRTdGFydEluZGV4ICsgMTsKKyAgICB9Cisg
ICAgbWVtY3B5KCZidWZmZXJbMF0sICZzdHJpbmcuY2hhcmFjdGVycygpW2FkanVzdGVkU3RhcnRJ
bmRleF0sIHNpemVvZihVQ2hhcikgKiAobGVuZ3RoIC0gYWRqdXN0ZWRTdGFydEluZGV4ICsgMSkp
OworICAgIHJldHVybiBsZW5ndGggLSBhZGp1c3RlZFN0YXJ0SW5kZXg7Cit9CisKIHN0YXRpYyBm
bG9hdCBzdHJpbmdXaWR0aChjb25zdCBGb250JiByZW5kZXJlciwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBkaXNhYmxlUm91bmRpbmdIYWNrcykKIHsKICAg
ICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgpOwpAQCAtMTAwLDIzICsxOTMsMjkgQEAg
c3RhdGljIGZsb2F0IHN0cmluZ1dpZHRoKGNvbnN0IEZvbnQmIHJlbmRlcmVyLCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQKICAgICByZXR1cm4gcmVuZGVyZXIud2lkdGgocnVuKTsK
IH0KIAotc3RhdGljIFN0cmluZyB0cnVuY2F0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywg
ZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGZvbnQsIFRydW5jYXRpb25GdW5jdGlvbiB0cnVu
Y2F0ZVRvQnVmZmVyLCBib29sIGRpc2FibGVSb3VuZGluZ0hhY2tzKQorc3RhdGljIFN0cmluZyB0
cnVuY2F0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0
IEZvbnQmIGZvbnQsIFRydW5jYXRpb25GdW5jdGlvbiB0cnVuY2F0ZVRvQnVmZmVyLCBib29sIGRp
c2FibGVSb3VuZGluZ0hhY2tzLCBmbG9hdCogcmVzdWx0V2lkdGggPSBudWxscHRyLCBib29sIHNo
b3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgIGZsb2F0IGN1c3RvbVRydW5jYXRpb25FbGVtZW50
V2lkdGggPSAwLCBib29sIGFsd2F5c1RydW5jYXRlID0gZmFsc2UpCiB7CiAgICAgaWYgKHN0cmlu
Zy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBzdHJpbmc7Ci0gICAgCisKKyAgICBpZiAocmVz
dWx0V2lkdGgpCisgICAgICAgICpyZXN1bHRXaWR0aCA9IDA7CisKICAgICBBU1NFUlQobWF4V2lk
dGggPj0gMCk7Ci0gICAgCi0gICAgZmxvYXQgY3VycmVudEVsbGlwc2lzV2lkdGggPSBzdHJpbmdX
aWR0aChmb250LCAmaG9yaXpvbnRhbEVsbGlwc2lzLCAxLCBkaXNhYmxlUm91bmRpbmdIYWNrcyk7
Ci0gICAgCisKKyAgICBmbG9hdCBjdXJyZW50RWxsaXBzaXNXaWR0aCA9IHNob3VsZEluc2VydEVs
bGlwc2lzID8gc3RyaW5nV2lkdGgoZm9udCwgJmhvcml6b250YWxFbGxpcHNpcywgMSwgZGlzYWJs
ZVJvdW5kaW5nSGFja3MpIDogY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aDsKKwogICAgIFVD
aGFyIHN0cmluZ0J1ZmZlcltTVFJJTkdfQlVGRkVSX1NJWkVdOwogICAgIHVuc2lnbmVkIHRydW5j
YXRlZExlbmd0aDsKICAgICB1bnNpZ25lZCBrZWVwQ291bnQ7CiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RyaW5nLmxlbmd0aCgpOwogCiAgICAgaWYgKGxlbmd0aCA+IFNUUklOR19CVUZGRVJfU0la
RSkgewotICAgICAgICBrZWVwQ291bnQgPSBTVFJJTkdfQlVGRkVSX1NJWkUgLSAxOyAvLyBuZWVk
IDEgY2hhcmFjdGVyIGZvciB0aGUgZWxsaXBzaXMKLSAgICAgICAgdHJ1bmNhdGVkTGVuZ3RoID0g
Y2VudGVyVHJ1bmNhdGVUb0J1ZmZlcihzdHJpbmcsIGxlbmd0aCwga2VlcENvdW50LCBzdHJpbmdC
dWZmZXIpOworICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RWxsaXBzaXMpCisgICAgICAgICAgICBr
ZWVwQ291bnQgPSBTVFJJTkdfQlVGRkVSX1NJWkUgLSAxOyAvLyBuZWVkIDEgY2hhcmFjdGVyIGZv
ciB0aGUgZWxsaXBzaXMKKyAgICAgICAgZWxzZQorICAgICAgICAgICAga2VlcENvdW50ID0gMDsK
KyAgICAgICAgdHJ1bmNhdGVkTGVuZ3RoID0gY2VudGVyVHJ1bmNhdGVUb0J1ZmZlcihzdHJpbmcs
IGxlbmd0aCwga2VlcENvdW50LCBzdHJpbmdCdWZmZXIsIHNob3VsZEluc2VydEVsbGlwc2lzKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBrZWVwQ291bnQgPSBsZW5ndGg7CiAgICAgICAgIG1lbWNw
eShzdHJpbmdCdWZmZXIsIHN0cmluZy5jaGFyYWN0ZXJzKCksIHNpemVvZihVQ2hhcikgKiBsZW5n
dGgpOwpAQCAtMTI0LDggKzIyMywxMyBAQCBzdGF0aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZgogICAgIH0K
IAogICAgIGZsb2F0IHdpZHRoID0gc3RyaW5nV2lkdGgoZm9udCwgc3RyaW5nQnVmZmVyLCB0cnVu
Y2F0ZWRMZW5ndGgsIGRpc2FibGVSb3VuZGluZ0hhY2tzKTsKLSAgICBpZiAod2lkdGggPD0gbWF4
V2lkdGgpCisgICAgaWYgKCFzaG91bGRJbnNlcnRFbGxpcHNpcyAmJiBhbHdheXNUcnVuY2F0ZSkK
KyAgICAgICAgd2lkdGggKz0gY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aDsKKyAgICBpZiAo
KHdpZHRoIC0gbWF4V2lkdGgpIDwgMC4wMDAxKSB7IC8vIElnbm9yZSByb3VuZGluZyBlcnJvcnMu
CisgICAgICAgIGlmIChyZXN1bHRXaWR0aCkKKyAgICAgICAgICAgICpyZXN1bHRXaWR0aCA9IHdp
ZHRoOwogICAgICAgICByZXR1cm4gc3RyaW5nOworICAgIH0KIAogICAgIHVuc2lnbmVkIGtlZXBD
b3VudEZvckxhcmdlc3RLbm93blRvRml0ID0gMDsKICAgICBmbG9hdCB3aWR0aEZvckxhcmdlc3RL
bm93blRvRml0ID0gY3VycmVudEVsbGlwc2lzV2lkdGg7CkBAIC0xNTYsMTMgKzI2MCwxNyBAQCBz
dGF0aWMgU3RyaW5nIHRydW5jYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBt
YXhXaWR0aCwgY29uc3QgRm9udCYgZgogICAgICAgICBBU1NFUlQoa2VlcENvdW50ID4gMCk7CiAg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGtlZXBDb3VudCA8IGtlZXBD
b3VudEZvclNtYWxsZXN0S25vd25Ub05vdEZpdCk7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKGtlZXBDb3VudCA+IGtlZXBDb3VudEZvckxhcmdlc3RLbm93blRvRml0
KTsKLSAgICAgICAgCi0gICAgICAgIHRydW5jYXRlZExlbmd0aCA9IHRydW5jYXRlVG9CdWZmZXIo
c3RyaW5nLCBsZW5ndGgsIGtlZXBDb3VudCwgc3RyaW5nQnVmZmVyKTsKKworICAgICAgICB0cnVu
Y2F0ZWRMZW5ndGggPSB0cnVuY2F0ZVRvQnVmZmVyKHN0cmluZywgbGVuZ3RoLCBrZWVwQ291bnQs
IHN0cmluZ0J1ZmZlciwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMpOwogCiAgICAgICAgIHdpZHRoID0g
c3RyaW5nV2lkdGgoZm9udCwgc3RyaW5nQnVmZmVyLCB0cnVuY2F0ZWRMZW5ndGgsIGRpc2FibGVS
b3VuZGluZ0hhY2tzKTsKKyAgICAgICAgaWYgKCFzaG91bGRJbnNlcnRFbGxpcHNpcykKKyAgICAg
ICAgICAgIHdpZHRoICs9IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGg7CiAgICAgICAgIGlm
ICh3aWR0aCA8PSBtYXhXaWR0aCkgewogICAgICAgICAgICAga2VlcENvdW50Rm9yTGFyZ2VzdEtu
b3duVG9GaXQgPSBrZWVwQ291bnQ7CiAgICAgICAgICAgICB3aWR0aEZvckxhcmdlc3RLbm93blRv
Rml0ID0gd2lkdGg7CisgICAgICAgICAgICBpZiAocmVzdWx0V2lkdGgpCisgICAgICAgICAgICAg
ICAgKnJlc3VsdFdpZHRoID0gd2lkdGg7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBr
ZWVwQ291bnRGb3JTbWFsbGVzdEtub3duVG9Ob3RGaXQgPSBrZWVwQ291bnQ7CiAgICAgICAgICAg
ICB3aWR0aEZvclNtYWxsZXN0S25vd25Ub05vdEZpdCA9IHdpZHRoOwpAQCAtMTc1LDcgKzI4Myw3
IEBAIHN0YXRpYyBTdHJpbmcgdHJ1bmNhdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZs
b2F0IG1heFdpZHRoLCBjb25zdCBGb250JiBmCiAgICAgCiAgICAgaWYgKGtlZXBDb3VudCAhPSBr
ZWVwQ291bnRGb3JMYXJnZXN0S25vd25Ub0ZpdCkgewogICAgICAgICBrZWVwQ291bnQgPSBrZWVw
Q291bnRGb3JMYXJnZXN0S25vd25Ub0ZpdDsKLSAgICAgICAgdHJ1bmNhdGVkTGVuZ3RoID0gdHJ1
bmNhdGVUb0J1ZmZlcihzdHJpbmcsIGxlbmd0aCwga2VlcENvdW50LCBzdHJpbmdCdWZmZXIpOwor
ICAgICAgICB0cnVuY2F0ZWRMZW5ndGggPSB0cnVuY2F0ZVRvQnVmZmVyKHN0cmluZywgbGVuZ3Ro
LCBrZWVwQ291bnQsIHN0cmluZ0J1ZmZlciwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMpOwogICAgIH0K
ICAgICAKICAgICByZXR1cm4gU3RyaW5nKHN0cmluZ0J1ZmZlciwgdHJ1bmNhdGVkTGVuZ3RoKTsK
QEAgLTE5Niw0ICszMDQsMjkgQEAgZmxvYXQgU3RyaW5nVHJ1bmNhdG9yOjp3aWR0aChjb25zdCBT
dHJpbmcmIHN0cmluZywgY29uc3QgRm9udCYgZm9udCwgRW5hYmxlUm91bmQKICAgICByZXR1cm4g
c3RyaW5nV2lkdGgoZm9udCwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpLCAh
ZW5hYmxlUm91bmRpbmdIYWNrcyk7CiB9CiAKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6OmNlbnRl
clRydW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9u
dCYgZm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZs
b2F0JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxvYXQgY3VzdG9t
VHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCkKK3sKKyAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmcoc3Ry
aW5nLCBtYXhXaWR0aCwgZm9udCwgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlciwgIWVuYWJsZVJvdW5k
aW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGN1c3RvbVRydW5j
YXRpb25FbGVtZW50V2lkdGgpOworfQorCitTdHJpbmcgU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRy
dW5jYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYg
Zm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0
JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1
bmNhdGlvbkVsZW1lbnRXaWR0aCkKK3sKKyAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5n
LCBtYXhXaWR0aCwgZm9udCwgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyLCAhZW5hYmxlUm91bmRpbmdI
YWNrcywgJnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywgY3VzdG9tVHJ1bmNhdGlv
bkVsZW1lbnRXaWR0aCk7Cit9CisKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6OmxlZnRUcnVuY2F0
ZShjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQgbWF4V2lkdGgsIGNvbnN0IEZvbnQmIGZvbnQs
IEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3VuZGluZ0hhY2tzLCBmbG9hdCYgcmVz
dWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMsIGZsb2F0IGN1c3RvbVRydW5jYXRp
b25FbGVtZW50V2lkdGgpCit7CisgICAgcmV0dXJuIHRydW5jYXRlU3RyaW5nKHN0cmluZywgbWF4
V2lkdGgsIGZvbnQsIGxlZnRUcnVuY2F0ZVRvQnVmZmVyLCAhZW5hYmxlUm91bmRpbmdIYWNrcywg
JnJlc3VsdFdpZHRoLCBzaG91bGRJbnNlcnRFbGxpcHNpcywgY3VzdG9tVHJ1bmNhdGlvbkVsZW1l
bnRXaWR0aCk7Cit9CisKK1N0cmluZyBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0Q2xpcFRvQ2hhcmFj
dGVyKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYgZm9u
dCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0JiBy
ZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgZmxvYXQgY3VzdG9tVHJ1bmNh
dGlvbkVsZW1lbnRXaWR0aCkKK3sKKyAgICByZXR1cm4gdHJ1bmNhdGVTdHJpbmcoc3RyaW5nLCBt
YXhXaWR0aCwgZm9udCwgcmlnaHRDbGlwVG9DaGFyYWN0ZXJCdWZmZXIsICFlbmFibGVSb3VuZGlu
Z0hhY2tzLCAmcmVzdWx0V2lkdGgsIHNob3VsZEluc2VydEVsbGlwc2lzLCBjdXN0b21UcnVuY2F0
aW9uRWxlbWVudFdpZHRoKTsKK30KKworU3RyaW5nIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRDbGlw
VG9Xb3JkKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYg
Zm9udCwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90IGVuYWJsZVJvdW5kaW5nSGFja3MsIGZsb2F0
JiByZXN1bHRXaWR0aCwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcywgIGZsb2F0IGN1c3RvbVRy
dW5jYXRpb25FbGVtZW50V2lkdGgsIGJvb2wgYWx3YXlzVHJ1bmNhdGUpCit7CisgICAgcmV0dXJu
IHRydW5jYXRlU3RyaW5nKHN0cmluZywgbWF4V2lkdGgsIGZvbnQsIHJpZ2h0Q2xpcFRvV29yZEJ1
ZmZlciwgIWVuYWJsZVJvdW5kaW5nSGFja3MsICZyZXN1bHRXaWR0aCwgc2hvdWxkSW5zZXJ0RWxs
aXBzaXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgsIGFsd2F5c1RydW5jYXRlKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaAppbmRleCAxNDk5YzEwODc0NDczYWQ0NjNjNGYz
N2FiMjA0ZWQwMDY3OWRjZDdjLi4xM2Q4ZTE0YWY3ZTg2NDhhNzFjZjQ3NzA0MDY2NjI4NjllMzk3
YzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdU
cnVuY2F0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdU
cnVuY2F0b3IuaApAQCAtNDEsNiArNDEsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIHN0YXRpYyBTdHJpbmcgY2VudGVyVHJ1bmNhdGUoY29uc3QgU3RyaW5nJiwgZmxvYXQgbWF4
V2lkdGgsIGNvbnN0IEZvbnQmLCBFbmFibGVSb3VuZGluZ0hhY2tzT3JOb3QgPSBEaXNhYmxlUm91
bmRpbmdIYWNrcyk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgcmlnaHRUcnVuY2F0ZShjb25zdCBT
dHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NP
ck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKKworICAgICAgICBzdGF0aWMgU3RyaW5nIGNl
bnRlclRydW5jYXRlKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250Jiwg
RW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxk
SW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRo
ID0gMCk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgcmlnaHRUcnVuY2F0ZShjb25zdCBTdHJpbmcm
LCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9udCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwg
ZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNob3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxv
YXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCA9IDApOworICAgICAgICBzdGF0aWMgU3Ry
aW5nIGxlZnRUcnVuY2F0ZShjb25zdCBTdHJpbmcmLCBmbG9hdCBtYXhXaWR0aCwgY29uc3QgRm9u
dCYsIEVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCwgZmxvYXQmIHJlc3VsdFdpZHRoLCBib29sIHNo
b3VsZEluc2VydEVsbGlwc2lzID0gdHJ1ZSwgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRX
aWR0aCA9IDApOworICAgICAgICBzdGF0aWMgU3RyaW5nIHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyKGNv
bnN0IFN0cmluZyYsIGZsb2F0IG1heFdpZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdI
YWNrc09yTm90LCBmbG9hdCYgcmVzdWx0V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMg
PSB0cnVlLCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCk7CisgICAgICAg
IHN0YXRpYyBTdHJpbmcgcmlnaHRDbGlwVG9Xb3JkKGNvbnN0IFN0cmluZyYsIGZsb2F0IG1heFdp
ZHRoLCBjb25zdCBGb250JiwgRW5hYmxlUm91bmRpbmdIYWNrc09yTm90LCBmbG9hdCYgcmVzdWx0
V2lkdGgsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMgPSB0cnVlLCBmbG9hdCBjdXN0b21UcnVu
Y2F0aW9uRWxlbWVudFdpZHRoID0gMCwgYm9vbCBhbHdheXNUcnVuY2F0ZSA9IGZhbHNlKTsKKwog
ICAgICAgICBzdGF0aWMgZmxvYXQgd2lkdGgoY29uc3QgU3RyaW5nJiwgY29uc3QgRm9udCYsIEVu
YWJsZVJvdW5kaW5nSGFja3NPck5vdCA9IERpc2FibGVSb3VuZGluZ0hhY2tzKTsKICAgICB9Owog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFRy
YWNrUmVwcmVzZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
VGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwCmluZGV4IDY4ZTRjMmQ0YTMwOTM1NWVhODM0MzRl
ZGI1ZDk4MzdlZDdmYTU2NWEuLmQxNzhlNTg2Zjc4ZjIwMTY5MGVlYzMzZjIyYTI2MzQ5M2JhMWFk
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRUcmFj
a1JlcHJlc2VudGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAKQEAgLTQyLDEwICs0MiwxMiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBJbnRSZWN0IGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoKTsg
fQogfTsKIAorI2lmICFQTEFURk9STShJT1MpCiBQYXNzT3duUHRyPFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uPiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbjo6Y3JlYXRlKFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uQ2xpZW50KikKIHsKICAgICByZXR1cm4gV1RGOjphZG9wdFB0cihuZXcgTnVsbFRleHRU
cmFja1JlcHJlc2VudGF0aW9uKCkpOwogfQorI2VuZGlmCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCmluZGV4IGJmNjM1YzljYTQ3
ZjY0NDYzYTYzMjRiN2Y4Nzc5ZjQzNDM5MWFhNDcuLjEzNDRiOWFlNjE0MjRlYjEzNDc3YjFiZDYy
NTY4MDIzMzUxZGI2ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1dpZHRoSXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9XaWR0aEl0ZXJhdG9yLmgKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IGJvb2wgc3VwcG9ydHNUeXBlc2V0dGluZ0ZlYXR1cmVzKGNvbnN0IEZvbnQmIGZvbnQpCiAgICAg
ewotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
IDEwODAKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDgwKQogICAgICAgICBpZiAoIWZvbnQuaXNQcmludGVy
Rm9udCgpKQogICAgICAgICAgICAgcmV0dXJuICFmb250LnR5cGVzZXR0aW5nRmVhdHVyZXMoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0FWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbC5tbQppbmRl
eCAxNmQwODExNzZkNzg5MTU5ZTRhNzI4ZDQ3NDliNDFiNTM5OTMyNzk2Li45ZTQ1NWI0ZTkyMDAz
ZmNlMjZmNGI0MDVjMmYwM2I4OWM5NzJhZGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbC5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQVZU
cmFja1ByaXZhdGVBVkZPYmpDSW1wbC5tbQpAQCAtMTE1LDcgKzExNSw3IEBAIEF0b21pY1N0cmlu
ZyBBVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsOjpsYWJlbCgpIGNvbnN0CiAgICAgICAgIHJldHVy
biBlbXB0eUF0b207CiAKICAgICAvLyBJZiBwb3NzaWJsZSwgcmV0dXJuIGEgdGl0bGUgaW4gb25l
IG9mIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1YWdlcy4KLSNpZiBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDEwODAKKyNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAogICAgIE5TQXJyYXkgKnRpdGxlc0ZvclByZWZl
cnJlZExhbmd1YWdlcyA9IFtBVk1ldGFkYXRhSXRlbSBtZXRhZGF0YUl0ZW1zRnJvbUFycmF5OnRp
dGxlcyBmaWx0ZXJlZEFuZFNvcnRlZEFjY29yZGluZ1RvUHJlZmVycmVkTGFuZ3VhZ2VzOltOU0xv
Y2FsZSBwcmVmZXJyZWRMYW5ndWFnZXNdXTsKICNlbHNlCiAgICAgTlNBcnJheSAqdGl0bGVzRm9y
UHJlZmVycmVkTGFuZ3VhZ2VzID0gW0FWTWV0YWRhdGFJdGVtIG1ldGFkYXRhSXRlbXNGcm9tQXJy
YXk6dGl0bGVzIHdpdGhMb2NhbGU6W05TTG9jYWxlIGN1cnJlbnRMb2NhbGVdXTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDLm1tCmluZGV4IGE2M2VkNjc1ZDA1NjJiNTAzNmNiMjE3MzhiNzU3YzI1OTNiNTVh
OGYuLjk5NDg2ZDdhMTQ2ZmRiZWFjNmZkMThjYWVmY2RlY2U5ZjI2Y2Q5MTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQy5tbQpAQCAtNjIsOCArNjIsMTIgQEAKICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAogI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWRm91bmRhdGlvbi5oPgotI2ltcG9ydCA8
Q29yZU1lZGlhL0NvcmVNZWRpYS5oPgorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPENvcmVJ
bWFnZS9Db3JlSW1hZ2UuaD4KKyNlbHNlCiAjaW1wb3J0IDxRdWFydHpDb3JlL0NvcmVJbWFnZS5o
PgorI2VuZGlmCisjaW1wb3J0IDxDb3JlTWVkaWEvQ29yZU1lZGlhLmg+CiAKICNpZiBVU0UoVklE
RU9UT09MQk9YKQogI2ltcG9ydCA8Q29yZVZpZGVvL0NvcmVWaWRlby5oPgpAQCAtNzc5LDcgKzc4
Myw3IEBAIGRvdWJsZSBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9y
bU1heFRpbWVTZWVrYWJsZSgpIGNvbnN0CiAKIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OnBsYXRmb3JtTWF4VGltZUxvYWRlZCgpIGNvbnN0CiB7Ci0jaWYgUExBVEZP
Uk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDw9IDEwODAKKyNpZiAh
UExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDw9IDEwODAK
ICAgICAvLyBBVkZvdW5kYXRpb24gb24gTW91bnRhaW4gTGlvbiB3aWxsIG9jY2FzaW9uYWxseSBu
b3Qgc2VuZCBhIEtWTyBub3RpZmljYXRpb24KICAgICAvLyB3aGVuIGxvYWRlZFRpbWVSYW5nZXMg
Y2hhbmdlcyB3aGVuIHRoZXJlIGlzIG5vIHZpZGVvIG91dHB1dC4gSW4gdGhhdCBjYXNlCiAgICAg
Ly8gdXBkYXRlIHRoZSBjYWNoZWQgdmFsdWUgZXhwbGljaXRseS4KQEAgLTEyMzIsNiArMTIzNiwx
NCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNpemVDaGFuZ2Vk
KCkKICAgICBzZXROYXR1cmFsU2l6ZShJbnRTaXplKG5hdHVyYWxTaXplKSk7CiB9CiAKKyNpZiBQ
TEFURk9STShJT1MpCisvLyBGSVhNRTogSW1wbGVtZW50IGZvciBpT1MgaW4gV2ViS2l0IFN5c3Rl
bSBJbnRlcmZhY2UuCitzdGF0aWMgaW5saW5lIE5TVVJMICp3a0FWQXNzZXRSZXNvbHZlZFVSTChB
VkFzc2V0KikKK3sKKyAgICByZXR1cm4gbmlsOworfQorI2VuZGlmCisKIGJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25z
dCAKIHsKICAgICBpZiAoIW1fYXZBc3NldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRm9udEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250QmxhY2tCZXJyeS5jcHAKaW5k
ZXggZTk0Yzc4N2M2Y2EwMTExNWM0NWE5MzY5ODJjMDY0NWQzNDVmZjkxOC4uNWE2ZGExN2ZhY2Yx
MTM5ODQ1MzhkMDBkZWU3ZDNhZGIxMTI0MjkxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250QmxhY2tCZXJyeS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9Gb250QmxhY2tCZXJyeS5j
cHAKQEAgLTM4LDEwICszOCwxMCBAQCBzdGF0aWMgaW5saW5lIEZTX0ZJWEVEIEZsb2F0VG9GU0Zp
eGVkKGZsb2F0IG4pIHsgcmV0dXJuIHN0YXRpY19jYXN0PEZTX0ZJWEVEPihuCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBpZiAoIXJ1bi5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gMDsKIAogICAgIEdseXBoQnVmZmVy
IGdseXBoQnVmZmVyOwogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwpAQCAt
NDksOCArNDksMTAgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEYKICAgICBpZiAoIXNoYXBlci5z
aGFwZSgmZ2x5cGhCdWZmZXIpKQogICAgICAgICByZXR1cm47CiAgICAgRmxvYXRQb2ludCBhZGp1
c3RlZFBvaW50ID0gc2hhcGVyLmFkanVzdFN0YXJ0UG9pbnQocG9pbnQpOworICAgIGZsb2F0IHN0
YXJ0WCA9IGFkanVzdGVkUG9pbnQueCgpOwogCiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQs
IHJ1biwgZ2x5cGhCdWZmZXIsIGFkanVzdGVkUG9pbnQpOworICAgIHJldHVybiBhZGp1c3RlZFBv
aW50LngoKSAtIHN0YXJ0WDsKIH0KIAogZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiAv
KiBmYWxsYmFja0ZvbnRzICovLCBHbHlwaE92ZXJmbG93KiAvKiBnbHlwaE92ZXJmbG93ICovKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggNjI1OWQzMmE0MTNlNTNiOWNjNmNhZmQ2OTFlY2NjNDRm
NWVlZGYwMy4uZmY1NDExMjBmMzU2M2VjMWQ0Y2M1OTNmMjdjY2I5YWNlZDhmMTE2MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNB
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwCkBAIC00Nyw2ICs0NywxMCBAQAogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFu
Z2UuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElP
UykKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1B
QykKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJNYWMuaCIKICNpbmNsdWRlICJXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgiCkBAIC02MSw3ICs2NSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAv
LyBUaGUgdGhyZXNob2xkIHdpZHRoIG9yIGhlaWdodCBhYm92ZSB3aGljaCBhIHRpbGVkIGxheWVy
IHdpbGwgYmUgdXNlZC4gVGhpcyBzaG91bGQgYmUKIC8vIGxhcmdlIGVub3VnaCB0byBhdm9pZCB0
aWxlZCBsYXllcnMgZm9yIG1vc3QgR3JhcGhpY3NMYXllcnMsIGJ1dCBsZXNzIHRoYW4gdGhlIE9w
ZW5HTAogLy8gdGV4dHVyZSBzaXplIGxpbWl0IG9uIGFsbCBzdXBwb3J0ZWQgaGFyZHdhcmUuCisj
aWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGNvbnN0IGludCBjTWF4UGl4ZWxEaW1lbnNpb24gPSAx
MjgwOworI2Vsc2UKIHN0YXRpYyBjb25zdCBpbnQgY01heFBpeGVsRGltZW5zaW9uID0gMjAwMDsK
KyNlbmRpZgogCiAvLyBEZXJpdmVkIGVtcGlyaWNhbGx5OiA8cmRhcjovL3Byb2JsZW0vMTM0MDE4
NjE+CiBzdGF0aWMgY29uc3QgaW50IGNNYXhMYXllclRyZWVEZXB0aCA9IDI1MDsKQEAgLTI4Miw3
ICsyOTAsNyBAQCBzdGF0aWMgZmxvYXQgbWF4U2NhbGVGcm9tVHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0KQogc3RhdGljIGlubGluZSBib29sIHN1cHBvcnRzQWNjZWxlcmF0
ZWRGaWx0ZXJBbmltYXRpb25zKCkKIHsKIC8vIDxyZGFyOi8vcHJvYmxlbS8xMDkwNzI1MT4gLSBX
ZWJLaXQyIGRvZXNuJ3Qgc3VwcG9ydCBDQSBhbmltYXRpb25zIG9mIENJIGZpbHRlcnMgb24gTGlv
biBhbmQgYmVsb3cKLSNpZiBQTEFURk9STShNQUMpICYmIChQTEFURk9STShJT1MpIHx8IF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MCkKKyNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4
MCkKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODcxLDcg
Kzg3OSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2Uq
IGltYWdlKQogICAgICAgICBtX3VuY29ycmVjdGVkQ29udGVudHNJbWFnZSA9IG5ld0ltYWdlOwog
ICAgICAgICBtX3BlbmRpbmdDb250ZW50c0ltYWdlID0gbmV3SW1hZ2U7CiAKLSNpZiAhUExBVEZP
Uk0oV0lOKQorI2lmICFQTEFURk9STShXSU4pICYmICFQTEFURk9STShJT1MpCiAgICAgICAgIENH
Q29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dJbWFnZUdldENvbG9yU3BhY2UobV9wZW5kaW5n
Q29udGVudHNJbWFnZS5nZXQoKSk7CiAKICAgICAgICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBk
ZXZpY2VSR0IgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKQEAgLTkxNiw2ICs5MjQs
MTMgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxh
eWVyKiBtZWRpYUxheWVyKQogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChDb250ZW50c01l
ZGlhTGF5ZXJDaGFuZ2VkKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK1BsYXRmb3JtTGF5ZXIq
IEdyYXBoaWNzTGF5ZXJDQTo6Y29udGVudHNMYXllckZvck1lZGlhKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jb250ZW50c0xheWVyUHVycG9zZSA9PSBDb250ZW50c0xheWVyRm9yTWVkaWEgPyBt
X2NvbnRlbnRzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IG51bGxwdHI7Cit9CisjZW5kaWYKKwog
dm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciog
Y2FudmFzTGF5ZXIpCiB7CiAgICAgaWYgKG1fY29udGVudHNMYXllciAmJiBjYW52YXNMYXllciA9
PSBtX2NvbnRlbnRzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSkKQEAgLTExMDEsNiArMTExNiwxMCBA
QCBGbG9hdFJlY3QgR3JhcGhpY3NMYXllckNBOjpjb21wdXRlVmlzaWJsZVJlY3QoVHJhbnNmb3Jt
U3RhdGUmIHN0YXRlLCBDb21wdXRlVmlzaQogICAgIGJvb2wgbWFwV2FzQ2xhbXBlZDsKICAgICBG
bG9hdFJlY3QgY2xpcFJlY3RGb3JDaGlsZHJlbiA9IHN0YXRlLm1hcHBlZFF1YWQoJm1hcFdhc0Ns
YW1wZWQpLmJvdW5kaW5nQm94KCk7CiAgICAgRmxvYXRQb2ludCBib3VuZHNPcmlnaW4gPSBtX2Jv
dW5kc09yaWdpbjsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gVUlLaXQgbWF5IGJlIGNoYW5n
aW5nIGxheWVyIGJvdW5kcyBiZWhpbmQgb3VyIGJhY2sgaW4gb3ZlcmZsb3ctc2Nyb2xsIGxheWVy
cywgc28gdXNlIHRoZSBsYXllcidzIG9yaWdpbi4KKyAgICBib3VuZHNPcmlnaW4gPSBtX2xheWVy
LT5ib3VuZHMoKS5sb2NhdGlvbigpOworI2VuZGlmCiAgICAgY2xpcFJlY3RGb3JDaGlsZHJlbi5t
b3ZlKGJvdW5kc09yaWdpbi54KCksIGJvdW5kc09yaWdpbi55KCkpOwogICAgIAogICAgIEZsb2F0
UmVjdCBjbGlwUmVjdEZvclNlbGYoYm91bmRzT3JpZ2luLCBtX3NpemUpOwpAQCAtMTQ2OCw2ICsx
NDg3LDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdl
U2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvCiAgICAgRmxvYXRTaXplIHBpeGVsQWxp
Z25tZW50T2Zmc2V0OwogICAgIGNvbXB1dGVQaXhlbEFsaWdubWVudChwYWdlU2NhbGVGYWN0b3Is
IHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsIHNjYWxlZFBvc2l0aW9uLCBzY2FsZWRTaXplLCBzY2Fs
ZWRBbmNob3JQb2ludCwgcGl4ZWxBbGlnbm1lbnRPZmZzZXQpOwogCisjaWYgUExBVEZPUk0oSU9T
KQorICAgIG1fcGl4ZWxBbGlnbm1lbnRPZmZzZXQgPSBwaXhlbEFsaWdubWVudE9mZnNldDsKKyNl
bmRpZgorCiAgICAgRmxvYXRSZWN0IGFkanVzdGVkQm91bmRzKG1fYm91bmRzT3JpZ2luIC0gcGl4
ZWxBbGlnbm1lbnRPZmZzZXQsIHNjYWxlZFNpemUpOwogCiAgICAgLy8gVXBkYXRlIHBvc2l0aW9u
LgpAQCAtMTQ3NywxMCArMTUwMCwyMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2Vv
bWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwbwogICAgIGlm
IChtX3N0cnVjdHVyYWxMYXllcikgewogICAgICAgICBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24o
bV9wb3NpdGlvbi54KCkgKyBtX2FuY2hvclBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgpLCBtX3Bv
c2l0aW9uLnkoKSArIG1fYW5jaG9yUG9pbnQueSgpICogbV9zaXplLmhlaWdodCgpKTsKICAgICAg
ICAgRmxvYXRSZWN0IGxheWVyQm91bmRzKG1fYm91bmRzT3JpZ2luLCBtX3NpemUpOwotICAgICAg
ICAKKworI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorICAgICAgICAvLyBGSVhN
RTogQ29uc2lkZXIgbW92aW5nIHRoZSBtYWluIHRocmVhZCBsb2dpYyBpbnRvIFBsYXRmb3JtQ0FM
YXllci4KKyAgICAgICAgaWYgKG1lZGlhTGF5ZXJNdXN0QmVVcGRhdGVkT25NYWluVGhyZWFkKCkg
JiYgV2ViVGhyZWFkSXNDdXJyZW50KCkpIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJhbExheWVy
LT5zZXRQb3NpdGlvbk9uTWFpblRocmVhZChsYXllclBvc2l0aW9uKTsKKyAgICAgICAgICAgIG1f
c3RydWN0dXJhbExheWVyLT5zZXRCb3VuZHNPbk1haW5UaHJlYWQobGF5ZXJCb3VuZHMpOworICAg
ICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXItPnNldEFuY2hvclBvaW50T25NYWluVGhyZWFkKG1f
YW5jaG9yUG9pbnQpOworICAgICAgICB9IGVsc2UgeworI2VuZGlmCiAgICAgICAgIG1fc3RydWN0
dXJhbExheWVyLT5zZXRQb3NpdGlvbihsYXllclBvc2l0aW9uKTsKICAgICAgICAgbV9zdHJ1Y3R1
cmFsTGF5ZXItPnNldEJvdW5kcyhsYXllckJvdW5kcyk7CiAgICAgICAgIG1fc3RydWN0dXJhbExh
eWVyLT5zZXRBbmNob3JQb2ludChtX2FuY2hvclBvaW50KTsKKyNpZiBFTkFCTEUoUExVR0lOX1BS
T1hZX0ZPUl9WSURFTykKKyAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgaWYgKExheWVyTWFw
KiBsYXllckNsb25lTWFwID0gbV9zdHJ1Y3R1cmFsTGF5ZXJDbG9uZXMuZ2V0KCkpIHsKICAgICAg
ICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQo
KTsKQEAgLTE1MDQsMTAgKzE1MzgsMjEgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUdl
b21ldHJ5KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG8KICAgICAg
ICAgc2NhbGVkQW5jaG9yUG9pbnQgPSBGbG9hdFBvaW50KDAuNWYsIDAuNWYpOwogICAgICAgICBh
ZGp1c3RlZFBvc2l0aW9uID0gRmxvYXRQb2ludChzY2FsZWRBbmNob3JQb2ludC54KCkgKiBzY2Fs
ZWRTaXplLndpZHRoKCkgLSBwaXhlbEFsaWdubWVudE9mZnNldC53aWR0aCgpLCBzY2FsZWRBbmNo
b3JQb2ludC55KCkgKiBzY2FsZWRTaXplLmhlaWdodCgpIC0gcGl4ZWxBbGlnbm1lbnRPZmZzZXQu
aGVpZ2h0KCkpOwogICAgIH0KLSAgICAKKworI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJ
REVPKQorICAgIC8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgdGhlIG1haW4gdGhyZWFkIGxvZ2lj
IGludG8gUGxhdGZvcm1DQUxheWVyLgorICAgIGlmIChtZWRpYUxheWVyTXVzdEJlVXBkYXRlZE9u
TWFpblRocmVhZCgpICYmIFdlYlRocmVhZElzQ3VycmVudCgpKSB7CisgICAgICAgIG1fbGF5ZXIt
PnNldFBvc2l0aW9uT25NYWluVGhyZWFkKGFkanVzdGVkUG9zaXRpb24pOworICAgICAgICBtX2xh
eWVyLT5zZXRCb3VuZHNPbk1haW5UaHJlYWQoYWRqdXN0ZWRCb3VuZHMpOworICAgICAgICBtX2xh
eWVyLT5zZXRBbmNob3JQb2ludE9uTWFpblRocmVhZChzY2FsZWRBbmNob3JQb2ludCk7CisgICAg
fSBlbHNlIHsKKyNlbmRpZgogICAgIG1fbGF5ZXItPnNldFBvc2l0aW9uKGFkanVzdGVkUG9zaXRp
b24pOwogICAgIG1fbGF5ZXItPnNldEJvdW5kcyhhZGp1c3RlZEJvdW5kcyk7CiAgICAgbV9sYXll
ci0+c2V0QW5jaG9yUG9pbnQoc2NhbGVkQW5jaG9yUG9pbnQpOworI2lmIEVOQUJMRShQTFVHSU5f
UFJPWFlfRk9SX1ZJREVPKQorICAgIH0KKyNlbmRpZgogCiAgICAgaWYgKExheWVyTWFwKiBsYXll
ckNsb25lTWFwID0gbV9sYXllckNsb25lcy5nZXQoKSkgewogICAgICAgICBMYXllck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CkBAIC0xNjc4LDcgKzE3MjMs
MTEgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1
cmFsTGF5ZXJQdXJwb3NlIHB1cnBvc2UpCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICAKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVy
PiBvbGRQcmltYXJ5TGF5ZXIgPSBtX3N0cnVjdHVyYWxMYXllciA/IG1fc3RydWN0dXJhbExheWVy
LmdldCgpIDogbV9sYXllci5nZXQoKTsKKyNlbmRpZgorCiAgICAgYm9vbCBzdHJ1Y3R1cmFsTGF5
ZXJDaGFuZ2VkID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHB1cnBvc2UgPT0gU3RydWN0dXJhbExh
eWVyRm9yUHJlc2VydmVzM0QpIHsKQEAgLTE5NzcsOCArMjAyNiwxOCBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6dXBkYXRlQ29udGVudHNSZWN0cygpCiAgICAgaWYgKGdhaW5lZE9yTG9zdENsaXBw
aW5nTGF5ZXIpCiAgICAgICAgIG5vdGVTdWJsYXllcnNDaGFuZ2VkKERvbnRTY2hlZHVsZUZsdXNo
KTsKIAorI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorICAgIC8vIEZJWE1FOiBD
b25zaWRlciBtb3ZpbmcgdGhlIG1haW4gdGhyZWFkIGxvZ2ljIGludG8gUGxhdGZvcm1DQUxheWVy
LgorICAgIGlmIChtZWRpYUxheWVyTXVzdEJlVXBkYXRlZE9uTWFpblRocmVhZCgpICYmIFdlYlRo
cmVhZElzQ3VycmVudCgpKSB7CisgICAgICAgIG1fY29udGVudHNMYXllci0+c2V0UG9zaXRpb25P
bk1haW5UaHJlYWQoY29udGVudE9yaWdpbik7CisgICAgICAgIG1fY29udGVudHNMYXllci0+c2V0
Qm91bmRzT25NYWluVGhyZWFkKGNvbnRlbnRCb3VuZHMpOworICAgIH0gZWxzZSB7CisjZW5kaWYK
ICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldFBvc2l0aW9uKGNvbnRlbnRPcmlnaW4pOwogICAgIG1f
Y29udGVudHNMYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOworI2lmIEVOQUJMRShQTFVH
SU5fUFJPWFlfRk9SX1ZJREVPKSAKKyAgICB9CisjZW5kaWYKIAogICAgIGlmIChtX2NvbnRlbnRz
TGF5ZXJDbG9uZXMpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
Y29udGVudHNMYXllckNsb25lcy0+ZW5kKCk7CkBAIC0yMzYyLDggKzI0MjEsMTEgQEAgYm9vbCBH
cmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKGNv
bnN0IEtleWZyYW1lVmFsdWUKICAgICBib29sIGlzTWF0cml4QW5pbWF0aW9uID0gbGlzdEluZGV4
IDwgMDsKICAgICBpbnQgbnVtQW5pbWF0aW9ucyA9IGlzTWF0cml4QW5pbWF0aW9uID8gMSA6IG9w
ZXJhdGlvbnMtPnNpemUoKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIHJldmVyc2VB
bmltYXRpb25MaXN0ID0gZmFsc2U7CisjZWxzZQogICAgIGJvb2wgcmV2ZXJzZUFuaW1hdGlvbkxp
c3QgPSB0cnVlOwotI2lmICFQTEFURk9STShJT1MpICYmICFQTEFURk9STShXSU4pCisjaWYgIVBM
QVRGT1JNKFdJTikKICAgICAgICAgLy8gT2xkIHZlcnNpb25zIG9mIENvcmUgQW5pbWF0aW9uIGFw
cGx5IGFuaW1hdGlvbnMgaW4gcmV2ZXJzZSBvcmRlciAoPHJkYXI6Ly9wcm9ibGVtLzcwOTU2Mzg+
KSBzbyB3ZSBuZWVkIHRvIGZsaXAgdGhlIGxpc3QuCiAgICAgICAgIC8vIHRvIGJlIG5vbi1hZGRp
dGl2ZS4gRm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5LCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIENv
cmUgQW5pbWF0aW9uIHByZXNlcnZlcyB0aGlzIGJlaGF2aW9yIGZvciBhcHBsaWNhdGlvbnMgbGlu
a2VkCiAgICAgICAgIC8vIG9uIG9yIGJlZm9yZSBTbm93IExlb3BhcmQuCkBAIC0yMzczLDYgKzI0
MzUsNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uc0Zy
b21LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZQogICAgICAgICBpZiAoIWV4ZWN1dGFibGVX
YXNMaW5rZWRPbk9yQmVmb3JlU25vd0xlb3BhcmQpCiAgICAgICAgICAgICByZXZlcnNlQW5pbWF0
aW9uTGlzdCA9IGZhbHNlOwogI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogICAgIGlm
IChyZXZlcnNlQW5pbWF0aW9uTGlzdCkgewogICAgICAgICBmb3IgKGludCBhbmltYXRpb25JbmRl
eCA9IG51bUFuaW1hdGlvbnMgLSAxOyBhbmltYXRpb25JbmRleCA+PSAwOyAtLWFuaW1hdGlvbklu
ZGV4KSB7CiAgICAgICAgICAgICBpZiAoIWFwcGVuZFRvVW5jb21taXR0ZWRBbmltYXRpb25zKHZh
bHVlTGlzdCwgb3BlcmF0aW9ucywgYW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCBib3hTaXplLCBh
bmltYXRpb25JbmRleCwgdGltZU9mZnNldCwgaXNNYXRyaXhBbmltYXRpb24pKSB7CkBAIC0zMDMy
LDcgKzMwOTUsOSBAQCBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50
YXRpb24gR3JhcGhpY3NMYXllckNBOjpkZWZhdWx0Q29udGVudAogdm9pZCBHcmFwaGljc0xheWVy
Q0E6OnNldHVwQ29udGVudHNMYXllcihQbGF0Zm9ybUNBTGF5ZXIqIGNvbnRlbnRzTGF5ZXIpCiB7
CiAgICAgLy8gVHVybiBvZmYgaW1wbGljaXQgYW5pbWF0aW9ucyBvbiB0aGUgaW5uZXIgbGF5ZXIu
CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBjb250ZW50c0xheWVyLT5zZXRNYXNrc1RvQm91bmRz
KHRydWUpOworI2VuZGlmCiAKICAgICBpZiAoZGVmYXVsdENvbnRlbnRzT3JpZW50YXRpb24oKSA9
PSBDb21wb3NpdGluZ0Nvb3JkaW5hdGVzQm90dG9tVXApIHsKICAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggZmxpcHBlcigKQEAgLTMwNTEsNiArMzExNiwxMyBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6c2V0dXBDb250ZW50c0xheWVyKFBsYXRmb3JtQ0FMYXllciogY29udGVudHNMYXllcikK
ICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKK2Jvb2wgR3Jh
cGhpY3NMYXllckNBOjptZWRpYUxheWVyTXVzdEJlVXBkYXRlZE9uTWFpblRocmVhZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fY29udGVudHNMYXllclB1cnBvc2UgPT0gQ29udGVudHNMYXllckZv
ck1lZGlhOworfQorI2VuZGlmCisKIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBHcmFwaGlj
c0xheWVyQ0E6OmZpbmRPck1ha2VDbG9uZShDbG9uZUlEIGNsb25lSUQsIFBsYXRmb3JtQ0FMYXll
ciAqc291cmNlTGF5ZXIsIExheWVyTWFwKiBjbG9uZXMsIENsb25lTGV2ZWwgY2xvbmVMZXZlbCkK
IHsKICAgICBpZiAoIXNvdXJjZUxheWVyKQpAQCAtMzMyNywxMiArMzM5OSwxNCBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6Y29tcHV0ZVBpeGVsQWxpZ25tZW50KGZsb2F0IHBhZ2VTY2FsZUZhY3Rv
ciwgY29uc3QgRmxvYXRQbwogICAgIAogICAgIC8vIENvbnZlcnQgYmFjayB0byBsYXllciBjb29y
ZGluYXRlcy4KICAgICBhbGlnbmVkQm91bmRzLnNjYWxlKDEgLyBwYWdlU2NhbGVGYWN0b3IpOwot
ICAgIAorCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBFcHNpbG9uIGlzIG5lY2Vzc2FyeSB0
byBlbnN1cmUgdGhhdCBiYWNraW5nIHN0b3JlIHNpemUgY29tcHV0YXRpb24gaW4gQ0EsIHdoaWNo
IGludm9sdmVzIGludGVnZXIgdHJ1bmNhdGlvbiwKICAgICAvLyB3aWxsIG1hdGNoIG91ciBhbGln
bmVkIGJvdW5kcy4KICAgICBjb25zdCBmbG9hdCBlcHNpbG9uID0gMWUtNWY7CiAgICAgYWxpZ25l
ZEJvdW5kcy5leHBhbmQoZXBzaWxvbiwgZXBzaWxvbik7Ci0gICAgCisjZW5kaWYKKwogICAgIGFs
aWdubWVudE9mZnNldCA9IGJhc2VSZWxhdGl2ZUJvdW5kcy5sb2NhdGlvbigpIC0gYWxpZ25lZEJv
dW5kcy5sb2NhdGlvbigpOwogICAgIHBvc2l0aW9uID0gbV9wb3NpdGlvbiAtIGFsaWdubWVudE9m
ZnNldDsKICAgICBzaXplID0gYWxpZ25lZEJvdW5kcy5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IDFj
MzdkMDBmZGMzNDU2YTZhZDAxZTcxNDM3MzQwYTYxY2QwYjZhNWMuLjliMmIzNjU4MzQ3YWU5YmRm
YWRiNDg5MTNhOWM5NDFlNWRiNmQ1NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCkBAIC0xMjEsNiArMTIxLDkgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOworI2lm
IFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXJG
b3JNZWRpYSgpIGNvbnN0IE9WRVJSSURFOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHNldENv
bnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYpOwogCkBAIC0xMzcsNiArMTQwLDkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBsYXllckRpZERpc3BsYXkoUGxhdGZvcm1MYXllciopOwog
CiAgICAgdmlydHVhbCB2b2lkIHNldE1haW50YWluc1BpeGVsQWxpZ25tZW50KGJvb2wpOworI2lm
IFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBwaXhlbEFsaWdubWVudE9mZnNl
dCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcGl4ZWxBbGlnbm1lbnRPZmZzZXQ7IH0KKyNl
bmRpZgogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsK
IAogICAgIHN0cnVjdCBDb21taXRTdGF0ZSB7CkBAIC0yNTYsNiArMjYyLDEwIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzZXR1cENvbnRlbnRzTGF5ZXIoUGxhdGZvcm1DQUxheWVyKik7CiAgICAgUGxh
dGZvcm1DQUxheWVyKiBjb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xh
eWVyLmdldCgpOyB9CiAKKyNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKKyAgICBi
b29sIG1lZGlhTGF5ZXJNdXN0QmVVcGRhdGVkT25NYWluVGhyZWFkKCkgY29uc3Q7CisjZW5kaWYK
KwogICAgIHZpcnR1YWwgdm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGVidWdCb3JkZXJJbmZvKENvbG9yJiwgZmxvYXQmIHdp
ZHRoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FGaWx0ZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBRmlsdGVycy5oCmluZGV4IDI5Y2NlZjQ3ZDAyOGIzNDliNjRhZWE0MzVh
NmQyNTY4OTI5Zjg3MDguLmNkYTcyY2VmNzQwNzU3ZDVlNTQzMzYwOWQyZGIzOWQzMTM0MGY3YzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3Jt
Q0FGaWx0ZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxh
dGZvcm1DQUZpbHRlcnMuaApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtTGF5
ZXIuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDEwODAKKyNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAogI2RlZmluZSBVU0VfQ0FfRklMVEVSUyAxCiAj
ZWxzZQogI2RlZmluZSBVU0VfQ0FfRklMVEVSUyAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCmluZGV4IGZiN2U2MTAxZjY3
MjRmNjY5MDQzNjMxM2I0ODhhMWMxNDA2YmM0MjEuLjJhNDZiZDY2NDJmODU5ZjU4YTIzZmEyNTQ4
YWFiNGEzYzAzMzAwOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCkBAIC0yMDYsNiArMjA2LDE0IEBAIHB1YmxpYzoK
ICNlbmRpZiAvLyBOREVCVUcKICNlbmRpZiAvLyBQTEFURk9STShXSU4pCiAKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgYm9vbCBpc1dlYkxheWVyKCk7CisgICAgdm9pZCBzZXRCb3VuZHNPbk1haW5U
aHJlYWQoQ0dSZWN0KTsKKyAgICB2b2lkIHNldFBvc2l0aW9uT25NYWluVGhyZWFkKENHUG9pbnQp
OworICAgIHZvaWQgc2V0QW5jaG9yUG9pbnRPbk1haW5UaHJlYWQoRmxvYXRQb2ludDNEKTsKKyAg
ICB2b2lkIHNldFRpbGVTaXplKGNvbnN0IEludFNpemUmKTsKKyNlbmRpZgorCiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyKExheWVy
VHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3QgPSAwOwogCiAjaWYgUExBVEZPUk0o
TUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwCmluZGV4IDE0NjJkNWUzYjQ3
YTRkZDZiMjE4Mzk0Njk2YmUyMTViMmY2ODg4ZmMuLmJmYzNlNWFmNmMzMDZmYmQ1ZWNhNjgxMGMz
YjA0NzExOThlYWM3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9MYXllckZsdXNoU2NoZWR1bGVyTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAKQEAg
LTMxLDExICszMSwzMSBAQAogCiAjaW5jbHVkZSA8d3RmL0F1dG9kcmFpbmVkUG9vbC5oPgogCisj
aWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5o
IgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGQnVuZGxlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9XZWJDb3JlVGhyZWFkLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0
aWMgY29uc3QgQ0ZJbmRleCBDb3JlQW5pbWF0aW9uUnVuTG9vcE9yZGVyID0gMjAwMDAwMDsKIHN0
YXRpYyBjb25zdCBDRkluZGV4IExheWVyRmx1c2hSdW5Mb29wT3JkZXIgPSBDb3JlQW5pbWF0aW9u
UnVuTG9vcE9yZGVyIC0gMTsKIAorc3RhdGljIENGUnVuTG9vcFJlZiBjdXJyZW50UnVuTG9vcCgp
Cit7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEEgcmFjZSBjb25kaXRpb24gZHVyaW5nIFdl
YlZpZXcgZGVhbGxvY2F0aW9uIGNhbiBsZWFkIHRvIGEgY3Jhc2ggaWYgdGhlIGxheWVyIHN5bmMg
cnVuIGxvb3AKKyAgICAvLyBvYnNlcnZlciBpcyBhZGRlZCB0byB0aGUgbWFpbiBydW4gbG9vcCA8
cmRhcjovL3Byb2JsZW0vOTc5ODU1MD4uIEhvd2V2ZXIsIGZvciByZXNwb25zaXZlbmVzcywKKyAg
ICAvLyB3ZSBzdGlsbCBhbGxvdyB0aGlzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzc0MDMzMjg+LiBT
aW5jZSB0aGUgcmFjZSBjb25kaXRpb24gYW5kIHN1YnNlcXVlbnQKKyAgICAvLyBjcmFzaCBhcmUg
ZXNwZWNpYWxseSB0cm91Ymxlc29tZSBmb3IgaUJvb2tzLCB3ZSBuZXZlciBhbGxvdyB0aGUgb2Jz
ZXJ2ZXIgdG8gYmUgYWRkZWQgdG8gdGhlCisgICAgLy8gbWFpbiBydW4gbG9vcCBpbiBpQm9va3Mu
CisgICAgaWYgKGFwcGxpY2F0aW9uSXNJQm9va3NPbklPUygpKQorICAgICAgICByZXR1cm4gV2Vi
VGhyZWFkUnVuTG9vcCgpOworI2VuZGlmCisgICAgcmV0dXJuIENGUnVuTG9vcEdldEN1cnJlbnQo
KTsKK30KKwogTGF5ZXJGbHVzaFNjaGVkdWxlcjo6TGF5ZXJGbHVzaFNjaGVkdWxlcihMYXllckZs
dXNoU2NoZWR1bGVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX2lzU3VzcGVuZGVkKGZhbHNlKQog
ICAgICwgbV9jbGllbnQoY2xpZW50KQpAQCAtNjgsMTAgKzg4LDEwIEBAIHZvaWQgTGF5ZXJGbHVz
aFNjaGVkdWxlcjo6c2NoZWR1bGUoKQogICAgIGlmIChtX2lzU3VzcGVuZGVkKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBDRlJ1bkxvb3BSZWYgY3VycmVudFJ1bkxvb3AgPSBDRlJ1bkxvb3BHZXRD
dXJyZW50KCk7CisgICAgQ0ZSdW5Mb29wUmVmIHJ1bkxvb3AgPSBjdXJyZW50UnVuTG9vcCgpOwog
CiAgICAgLy8gTWFrZSBzdXJlIHdlIHdha2UgdXAgdGhlIGxvb3Agb3IgdGhlIG9ic2VydmVyIGNv
dWxkIGJlIGRlbGF5ZWQgdW50aWwgc29tZSBvdGhlciBzb3VyY2UgZmlyZXMuCi0gICAgQ0ZSdW5M
b29wV2FrZVVwKGN1cnJlbnRSdW5Mb29wKTsKKyAgICBDRlJ1bkxvb3BXYWtlVXAocnVuTG9vcCk7
CiAKICAgICBpZiAobV9ydW5Mb29wT2JzZXJ2ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTc5LDcg
Kzk5LDcgQEAgdm9pZCBMYXllckZsdXNoU2NoZWR1bGVyOjpzY2hlZHVsZSgpCiAgICAgQ0ZSdW5M
b29wT2JzZXJ2ZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHRoaXMsIDAsIDAsIDAgfTsKICAgICBt
X3J1bkxvb3BPYnNlcnZlciA9IGFkb3B0Q0YoQ0ZSdW5Mb29wT2JzZXJ2ZXJDcmVhdGUoMCwga0NG
UnVuTG9vcEJlZm9yZVdhaXRpbmcgfCBrQ0ZSdW5Mb29wRXhpdCwgdHJ1ZSwgTGF5ZXJGbHVzaFJ1
bkxvb3BPcmRlciwgcnVuTG9vcE9ic2VydmVyQ2FsbGJhY2ssICZjb250ZXh0KSk7CiAKLSAgICBD
RlJ1bkxvb3BBZGRPYnNlcnZlcihjdXJyZW50UnVuTG9vcCwgbV9ydW5Mb29wT2JzZXJ2ZXIuZ2V0
KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgQ0ZSdW5Mb29wQWRkT2JzZXJ2ZXIocnVu
TG9vcCwgbV9ydW5Mb29wT2JzZXJ2ZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CiB9
CiAKIHZvaWQgTGF5ZXJGbHVzaFNjaGVkdWxlcjo6aW52YWxpZGF0ZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FM
YXllck1hYy5tbQppbmRleCAzMWI0ODI0OTE4Y2NmOGExZTBhN2M3NmU1ODQyMTBmOWVlNTg2ODQ5
Li5kOTliY2Q5ZGY3YmE2MWIzYWY1OTE5ZDc0ZmQxOGI4NjU1ZGNiODlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9y
bUNBTGF5ZXJNYWMubW0KQEAgLTQ4LDYgKzQ4LDEzIEBACiAjaW1wb3J0IDx3dGYvQ3VycmVudFRp
bWUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNp
bXBvcnQgIldlYkNvcmVUaHJlYWQuaCIKKyNpbXBvcnQgIldlYlRpbGVkTGF5ZXIuaCIKKyNpbXBv
cnQgPEZvdW5kYXRpb24vTlNHZW9tZXRyeS5oPgorI2ltcG9ydCA8UXVhcnR6Q29yZS9DQVRpbGVk
TGF5ZXJQcml2YXRlLmg+CisjZW5kaWYKKwogU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChB
VkZvdW5kYXRpb24pCiBTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckxheWVy
KQogCkBAIC05OSw2ICsxMDYsOSBAQCBzdGF0aWMgZG91YmxlIG1lZGlhVGltZVRvQ3VycmVudFRp
bWUoQ0ZUaW1lSW50ZXJ2YWwgdCkKIAogLSAodm9pZClhbmltYXRpb25EaWRTdGFydDooQ0FBbmlt
YXRpb24gKilhbmltYXRpb24KIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgV2ViVGhyZWFkTG9j
aygpOworI2VuZGlmCiAgICAgLy8gaGFzTm9uWmVyb0JlZ2luVGltZSBpcyBzdG9yZWQgaW4gYSBr
ZXkgaW4gdGhlIGFuaW1hdGlvbgogICAgIGJvb2wgaGFzTm9uWmVyb0JlZ2luVGltZSA9IFtbYW5p
bWF0aW9uIHZhbHVlRm9yS2V5OldLTm9uWmVyb0JlZ2luVGltZUZsYWddIGJvb2xWYWx1ZV07CiAg
ICAgQ0ZUaW1lSW50ZXJ2YWwgc3RhcnRUaW1lOwpAQCAtNzI2LDYgKzczNiwxNiBAQCB2b2lkIFBs
YXRmb3JtQ0FMYXllck1hYzo6c2V0Q29udGVudHNTY2FsZShmbG9hdCB2YWx1ZSkKIHsKICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50
c1NjYWxlOnZhbHVlXTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgW21fbGF5ZXIuZ2V0KCkgc2V0
UmFzdGVyaXphdGlvblNjYWxlOnZhbHVlXTsKKworICAgIGlmIChtX2xheWVyVHlwZSA9PSBMYXll
clR5cGVXZWJUaWxlZExheWVyKSB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRlIGFs
bCB0aGUgdGlsZXMgc28gd2Ugd29uJ3QgZW5kIHVwIHdpdGggc3RhbGUgdGlsZXMgd2l0aCB0aGUg
d3Jvbmcgc2NhbGUgaW4gdGhlIHdyb25nIHBsYWNlLAorICAgICAgICAvLyBzZWUgPHJkYXI6Ly9w
cm9ibGVtLzk0MzQ3NjU+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICBzdGF0aWMgTlNE
aWN0aW9uYXJ5ICpvcHRpb25zRGljdGlvbmFyeSA9IFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0
V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBrQ0FUaWxl
ZExheWVyUmVtb3ZlSW1tZWRpYXRlbHksIG5pbF07CisgICAgICAgIFsoQ0FUaWxlZExheWVyICop
bV9sYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6W21fbGF5ZXIuZ2V0KCkgYm91bmRz
XSBsZXZlbE9mRGV0YWlsOjAgb3B0aW9uczpvcHRpb25zRGljdGlvbmFyeV07CisgICAgfQorI2Vu
ZGlmCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCkBAIC03NzAsNiArNzkwLDU4
IEBAIFRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxheWVyTWFjOjp0aWxlZEJhY2tpbmcoKQogICAg
IHJldHVybiBbdGlsZWRCYWNraW5nTGF5ZXIgdGlsZWRCYWNraW5nXTsKIH0KIAorI2lmIFBMQVRG
T1JNKElPUykKK2Jvb2wgUGxhdGZvcm1DQUxheWVyOjppc1dlYkxheWVyKCkKK3sKKyAgICBCT09M
IHJlc3VsdCA9IE5POworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIHJlc3Vs
dCA9IFttX2xheWVyLmdldCgpIGlzS2luZE9mQ2xhc3M6W1dlYkxheWVyIHNlbGZdXTsKKyAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnNldEJvdW5kc09uTWFpblRocmVhZChDR1JlY3QgYm91bmRzKQorewor
ICAgIENBTGF5ZXIgKmxheWVyID0gbV9sYXllci5nZXQoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKKyAgICAgICAgW2xheWVyIHNldEJvdW5kczpib3VuZHNdOworICAgICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVy
OjpzZXRQb3NpdGlvbk9uTWFpblRocmVhZChDR1BvaW50IHBvc2l0aW9uKQoreworICAgIENBTGF5
ZXIgKmxheWVyID0gbV9sYXllci5nZXQoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
KyAgICAgICAgW2xheWVyIHNldFBvc2l0aW9uOnBvc2l0aW9uXTsKKyAgICAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUworICAgIH0pOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0
QW5jaG9yUG9pbnRPbk1haW5UaHJlYWQoRmxvYXRQb2ludDNEIHZhbHVlKQoreworICAgIENBTGF5
ZXIgKmxheWVyID0gbV9sYXllci5nZXQoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
KyAgICAgICAgW2xheWVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRNYWtlKHZhbHVlLngoKSwgdmFs
dWUueSgpKV07CisgICAgICAgIFtsYXllciBzZXRBbmNob3JQb2ludFo6dmFsdWUueigpXTsKKyAg
ICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIH0pOworfQorCit2b2lkIFBsYXRm
b3JtQ0FMYXllcjo6c2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpCit7CisgICAg
aWYgKG1fbGF5ZXJUeXBlICE9IExheWVyVHlwZVdlYlRpbGVkTGF5ZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFtzdGF0aWNfY2FzdDxX
ZWJUaWxlZExheWVyKj4obV9sYXllci5nZXQoKSkgc2V0VGlsZVNpemU6dGlsZVNpemVdOworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisK
IFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmNyZWF0ZUNv
bXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRm
b3JtQ0FMYXllckNsaWVudCogY2xpZW50KSBjb25zdAogewogICAgIHJldHVybiBQbGF0Zm9ybUNB
TGF5ZXJNYWM6OmNyZWF0ZShsYXllclR5cGUsIGNsaWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvbnRyb2xsZXIubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvbnRyb2xsZXIubW0KaW5k
ZXggNDE0MjQ5MzlkNzUyZTFkNjc0YmFiZDMyYWM5ZThhNDdmMWQxNGE5Ni4uZDVlNmE5MWUyN2Iy
ODhjY2MwOWMxMjM5MTBjMzVhYmEwZDcxNGQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbQpAQCAtMjks
NyArMjksOSBAQAogI2ltcG9ydCAiSW50UmVjdC5oIgogI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVy
LmgiCiAjaW1wb3J0ICJSZWdpb24uaCIKKyNpZiAhUExBVEZPUk0oSU9TKQogI2ltcG9ydCAiTGF5
ZXJQb29sLmgiCisjZW5kaWYKICNpbXBvcnQgIldlYkxheWVyLmgiCiAjaW1wb3J0IDx3dGYvTWFp
blRocmVhZC5oPgogI2ltcG9ydCA8dXRpbGl0eT4KQEAgLTE2Niw2ICsxNjgsMTEgQEAgdm9pZCBU
aWxlQ29udHJvbGxlcjo6c2V0VGlsZU5lZWRzRGlzcGxheUluUmVjdChjb25zdCBUaWxlSW5kZXgm
IHRpbGVJbmRleCwgVGlsZUkKIAogdm9pZCBUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVy
UGFpbnRDb250ZW50cyhQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllciwgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JikKIHsKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgaWYgKHB0aHJlYWRfbWFpbl9ucCgpKQorICAgICAgICBXZWJUaHJlYWRMb2NrKCk7CisjZW5k
aWYKKwogICAgIGlmIChwbGF0Zm9ybUNBTGF5ZXIgPT0gbV90aWxlZFNjcm9sbGluZ0luZGljYXRv
ckxheWVyLmdldCgpKSB7CiAgICAgICAgIGRyYXdUaWxlTWFwQ29udGVudHMoY29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKSwgbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLT5ib3VuZHMoKSk7
CiAgICAgICAgIHJldHVybjsKQEAgLTYyMSw3ICs2MjgsOSBAQCB2b2lkIFRpbGVDb250cm9sbGVy
OjpyZW1vdmVBbGxUaWxlcygpCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9S
ZW1vdmUuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgVGlsZUluZm8gdGlsZUluZm8gPSBtX3RpbGVz
LnRha2UodGlsZXNUb1JlbW92ZVtpXSk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgTGF5
ZXJQb29sOjpzaGFyZWRQb29sKCktPmFkZExheWVyKHRpbGVJbmZvLmxheWVyKTsKKyNlbmRpZgog
ICAgIH0KIH0KIApAQCAtNjM5LDcgKzY0OCw5IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnJlbW92
ZUFsbFNlY29uZGFyeVRpbGVzKCkKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNU
b1JlbW92ZS5zaXplKCk7ICsraSkgewogICAgICAgICBUaWxlSW5mbyB0aWxlSW5mbyA9IG1fdGls
ZXMudGFrZSh0aWxlc1RvUmVtb3ZlW2ldKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBM
YXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRkTGF5ZXIodGlsZUluZm8ubGF5ZXIpOworI2VuZGlm
CiAgICAgfQogfQogCkBAIC02NTgsNyArNjY5LDkgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6cmVt
b3ZlVGlsZXNJbkNvaG9ydChUaWxlQ29ob3J0IGNvaG9ydCkKIAogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGlsZXNUb1JlbW92ZS5zaXplKCk7ICsraSkgewogICAgICAgICBUaWxlSW5mbyB0
aWxlSW5mbyA9IG1fdGlsZXMudGFrZSh0aWxlc1RvUmVtb3ZlW2ldKTsKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgICAgICBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRkTGF5ZXIodGlsZUluZm8u
bGF5ZXIpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC03ODcsNyArODAwLDkgQEAgdm9pZCBUaWxl
Q29udHJvbGxlcjo6cmV2YWxpZGF0ZVRpbGVzKFRpbGVWYWxpZGF0aW9uUG9saWN5RmxhZ3MgZm9y
ZWdyb3VuZFZhbGlkYXQKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHRpbGVz
VG9SZW1vdmUuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBUaWxlSW5mbyB0
aWxlSW5mbyA9IG1fdGlsZXMudGFrZSh0aWxlc1RvUmVtb3ZlW2ldKTsKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgICAgICAgICAgTGF5ZXJQb29sOjpzaGFyZWRQb29sKCktPmFkZExheWVyKHRpbGVJ
bmZvLmxheWVyKTsKKyNlbmRpZgogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDYxLDcgKzEwNzYs
MTEgQEAgaW50IFRpbGVDb250cm9sbGVyOjpyaWdodE1hcmdpbldpZHRoKCkgY29uc3QKIAogUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gVGlsZUNvbnRyb2xsZXI6OmNyZWF0ZVRpbGVMYXllcihjb25z
dCBJbnRSZWN0JiB0aWxlUmVjdCkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgUmVmUHRyPFBs
YXRmb3JtQ0FMYXllcj4gbGF5ZXI7CisjZWxzZQogICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+
IGxheWVyID0gTGF5ZXJQb29sOjpzaGFyZWRQb29sKCktPnRha2VMYXllcldpdGhTaXplKHRpbGVS
ZWN0LnNpemUoKSk7CisjZW5kaWYKIAogICAgIGlmIChsYXllcikgewogICAgICAgICBtX3RpbGVS
ZXBhaW50Q291bnRzLnJlbW92ZShsYXllci5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6Tkcu
Y3BwCmluZGV4IDhkNTAwZjRhNTUwNTBjMDUwYjEzOWNhZjA2Y2Y0NjE0YjcwMWM3ZmIuLjBjOTQw
YzVkNjljN2Q5Mzc0YzJkOTAwODMxZjQzOThlMTA1NDgxZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwCkBAIC0zNywxNCArMzcsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCwgaW50KSBjb25zdAor
ZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50LCBpbnQpIGNvbnN0
CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgSGFyZkJ1enpTaGFwZXIgc2hh
cGVyKHRoaXMsIHJ1bik7Ci0gICAgaWYgKHNoYXBlci5zaGFwZSgmZ2x5cGhCdWZmZXIpKQotICAg
ICAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgcG9pbnQpOwot
ICAgIGVsc2UKLSAgICAgICAgTE9HX0VSUk9SKCJTaGFwZXIgY291bGRuJ3Qgc2hhcGUgZ2x5cGhC
dWZmZXIuIik7CisgICAgaWYgKHNoYXBlci5zaGFwZSgmZ2x5cGhCdWZmZXIpKSB7CisgICAgICAg
IEZsb2F0UG9pbnQgc3RhcnRQb2ludCA9IHBvaW50OworICAgICAgICBmbG9hdCBzdGFydFggPSBz
dGFydFBvaW50LngoKTsKKyAgICAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5
cGhCdWZmZXIsIHN0YXJ0UG9pbnQpOworICAgICAgICByZXR1cm4gc3RhcnRQb2ludC54KCkgLSBz
dGFydFg7CisgICAgfQorICAgIExPR19FUlJPUigiU2hhcGVyIGNvdWxkbid0IHNoYXBlIGdseXBo
QnVmZmVyLiIpOworICAgIHJldHVybiAwOwogfQogCiB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01h
cmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBU
ZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3Qg
RmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRt
YXBJbWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1h
cEltYWdlQ0cuY3BwCmluZGV4IDM2ZTlmMmUwNDE2MWVmMGMxM2M2NzQ1NGY4ZmIwY2QyMTljYjU4
MWUuLjFlNGMwMTM1OTM1MjNlYmU2NDFiNzk2NDk2MzI2YTQyMTViMDA0YjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3Bw
CkBAIC0zMiw3ICszMiwxMSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5j
bHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIu
aCIKKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBw
bGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250
ZXh0UHJpdmF0ZS5oPgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCiAjaWYg
UExBVEZPUk0oTUFDKQpAQCAtNTIsNiArNTYsMTIgQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJv
b2wgY2xlYXJNZXRhZGF0YSkKIAogICAgIG1fb3JpZW50YXRpb24gPSBEZWZhdWx0SW1hZ2VPcmll
bnRhdGlvbjsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2ZyYW1lQnl0ZXMgPSAwOworICAg
IG1fc2NhbGUgPSAxOworICAgIG1faGF2ZUluZm8gPSBmYWxzZTsKKyNlbmRpZgorCiAgICAgaWYg
KG1fZnJhbWUpIHsKICNpZiBDQUNIRV9TVUJJTUFHRVMKICAgICAgICAgc3ViaW1hZ2VDYWNoZSgp
LmNsZWFySW1hZ2UobV9mcmFtZSk7CkBAIC05MCwxMSArMTAwLDIwIEBAIEJpdG1hcEltYWdlOjpC
aXRtYXBJbWFnZShDR0ltYWdlUmVmIGNnSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQog
ICAgIC8vIFNldCBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gdG8gYmUgdGhlIHNhbWUgYXMg
bV9zaXplIHNvIGl0J3Mgbm90IDB4MC4KICAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24g
PSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIG1fb3Jp
Z2luYWxTaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX29yaWdpbmFsU2l6ZVJl
c3BlY3RpbmdPcmllbnRhdGlvbiA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CisjZW5kaWYKKwog
ICAgIG1fZnJhbWVzLmdyb3coMSk7CiAgICAgbV9mcmFtZXNbMF0ubV9mcmFtZSA9IENHSW1hZ2VS
ZXRhaW4oY2dJbWFnZSk7CiAgICAgbV9mcmFtZXNbMF0ubV9oYXNBbHBoYSA9IHRydWU7CiAgICAg
bV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIG1fZnJhbWVzWzBdLm1fc2NhbGUgPSAxOworI2VuZGlmCisKICAgICBjaGVja0ZvclNvbGlk
Q29sb3IoKTsKIH0KIApAQCAtMTA4LDEwICsxMjcsMjQgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hl
Y2tGb3JTb2xpZENvbG9yKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmICFQTEFURk9S
TShJT1MpCiAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGZyYW1lQXRJbmRleCgwKTsKLSAgICAKKyNl
bHNlCisgICAgLy8gTm90ZSwgY2hlY2tGb3JTb2xpZENvbG9yKCkgbWF5IGJlIGNhbGxlZCBmcm9t
IGZyYW1lQXRJbmRleCgpLiBPbiBpT1MgZnJhbWVBdEluZGV4KCkgZ2V0cyBwYXNzZWQgYSBzY2Fs
ZUhpbnQKKyAgICAvLyBhcmd1bWVudCB3aGljaCBpdCB1c2VzIHRvIHRlbGwgQ0cgdG8gY3JlYXRl
IGEgc2NhbGVkIGRvd24gaW1hZ2UuIFNpbmNlIHdlIGRvbid0IGtub3cgdGhlIHNjYWxlSGludCBo
ZXJlLCBpZgorICAgIC8vIHdlIGNhbGwgZnJhbWVBdEluZGV4KCkgYWdhaW4sIHdlIHdvdWxkIHBh
c3MgaXQgdGhlIGRlZmF1bHQgc2NhbGUgb2YgMSBhbmQgd291bGQgZW5kIHVwIHJlY3JlYXRpbmcg
dGhlIGltYWdlLgorICAgIC8vIFNvIHdlIGRvIGEgcXVpY2sgY2hlY2sgYW5kIGNhbGwgZnJhbWVB
dEluZGV4KDApIG9ubHkgaWYgd2UgaGF2ZW4ndCB5ZXQgY3JlYXRlZCBhbiBpbWFnZS4KKyAgICBD
R0ltYWdlUmVmIGltYWdlID0gbnVsbHB0cjsKKyAgICBpZiAobV9mcmFtZXMuc2l6ZSgpKQorICAg
ICAgICBpbWFnZSA9IG1fZnJhbWVzWzBdLm1fZnJhbWU7CisKKyAgICBpZiAoIWltYWdlKQorICAg
ICAgICBpbWFnZSA9IGZyYW1lQXRJbmRleCgwKTsKKyNlbmRpZgorCiAgICAgLy8gQ3VycmVudGx5
IHdlIG9ubHkgY2hlY2sgZm9yIHNvbGlkIGNvbG9yIGluIHRoZSBpbXBvcnRhbnQgc3BlY2lhbCBj
YXNlIG9mIGEgMXgxIGltYWdlLgogICAgIGlmIChpbWFnZSAmJiBDR0ltYWdlR2V0V2lkdGgoaW1h
Z2UpID09IDEgJiYgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgPT0gMSkgeworI2lmICFQTEFURk9S
TShJT1MpCiAgICAgICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKICAgICAgICAg
UmV0YWluUHRyPENHQ29udGV4dFJlZj4gYm1hcCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBkZXZpY2VSR0JDb2xvclNwYWNlUmVm
KCksCiAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRt
YXBCeXRlT3JkZXIzMkJpZykpOwpAQCAtMTI0LDYgKzE1NywyMyBAQCB2b2lkIEJpdG1hcEltYWdl
OjpjaGVja0ZvclNvbGlkQ29sb3IoKQogICAgICAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3Io
MCwgMCwgMCwgMCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fc29saWRDb2xvciA9IENv
bG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10s
IHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKKyNlbHNlCisgICAgICAgIC8v
IEZJWE1FOiBDYW4gd2Ugc2hhcmUgbW9yZSBjb2RlIHdpdGggdGhlIE1hYyBwb3J0PyBGb3JtZXJs
eSB0aGUgTWFjIHBvcnQgY3JlYXRlZCBhIGZsb2F0aW5nIHBvaW50IGJpdG1hcCBjb250ZXh0LAor
ICAgICAgICAvLyBidXQgc3VjaCBhIGNvbnRleHQgd2Fzbid0IHN1cHBvcnQgb24gaU9TIChyZGFy
Oi8vcHJvYmxlbS81MTA2NTE0KS4gU28sIG9uIGlPUyB3ZSBjcmVhdGVkIGFuIGludGVncmFsIGJp
dG1hcAorICAgICAgICAvLyBjb250ZXh0LiBTaW5jZSA8aHR0cHM6Ly90cmFjLndlYmtpdC5vcmcv
Y2hhbmdlc2V0LzIzOTM5PiB0aGUgTWFjIHBvcnQgY3JlYXRlcyBhbiBpbnRlZ3JhbCBiaXRtYXAg
Y29udGV4dC4KKyAgICAgICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XSA9IHswLCAwLCAwLCAwfTsg
Ly8gUkdCQQorICAgICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBiaXRtYXAgPSBhZG9wdENG
KENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwgZGV2
aWNlUkdCQ29sb3JTcGFjZVJlZigpLAorICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRMYXN0KSk7CisgICAgICAgIGlmICghYml0bWFwKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBHcmFwaGljc0NvbnRleHQoYml0bWFwLmdldCgpKS5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlQ29weSk7CisgICAgICAgIENHUmVjdCBkZXN0aW5hdGlvblJlY3QgPSB7IHsw
LCAwfSwgezEsIDF9IH07CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXAuZ2V0KCks
IGRlc3RpbmF0aW9uUmVjdCwgaW1hZ2UpOworICAgICAgICBpZiAoIXBpeGVsWzNdKQorICAgICAg
ICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fc29saWRDb2xvciA9IENvbG9yKHN0YXRpY19jYXN0PGludD4ocGl4ZWxbMF0p
LCBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsWzFdKSwgc3RhdGljX2Nhc3Q8aW50PihwaXhlbFsyXSks
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbM10pKTsKKyNlbmRpZgogICAgICAgICBtX2lzU29saWRD
b2xvciA9IHRydWU7CiAgICAgfQogfQpAQCAtMTYyLDkgKzIxMiwyMSBAQCBSZXRhaW5QdHI8Q0ZB
cnJheVJlZj4gQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpCiAKIHZvaWQgQml0bWFwSW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKQogeworI2lmICFQTEFURk9STShJT1Mp
CiAgICAgc3RhcnRBbmltYXRpb24oKTsKIAogICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBmcmFtZUF0
SW5kZXgobV9jdXJyZW50RnJhbWUpOworI2Vsc2UKKyAgICBzdGFydEFuaW1hdGlvbihmYWxzZSk7
CisKKyAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFm
ZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250ZXh0R2V0Q1RNKGN0eHQtPnBsYXRmb3JtQ29u
dGV4dCgpKSk7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOworICAgIC8vIE5ldmVy
IHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBjb250ZXh0cy4KKyAg
ICBpZiAoQ0dDb250ZXh0R2V0VHlwZShjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKSkgPT0ga0NHQ29u
dGV4dFR5cGVQREYpCisgICAgICAgIGltYWdlID0gYWRvcHRDRihjb3B5VW5zY2FsZWRGcmFtZUF0
SW5kZXgobV9jdXJyZW50RnJhbWUpKTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlID0gZnJhbWVB
dEluZGV4KG1fY3VycmVudEZyYW1lLCBzdGQ6Om1pbjxmbG9hdD4oMS4wZiwgc3RkOjptYXgodHJh
bnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAgLyBzcmNSZWN0LndpZHRoKCksIHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkp
KTsKKyNlbmRpZgogICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0
IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CiAgICAgCkBAIC0xNzMsMTggKzIz
NSw0MSBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRgogICAgICAgICByZXR1cm47CiAgICAgfQog
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGZsb2F0IHNjYWxlID0gbV9mcmFtZXNbbV9jdXJyZW50
RnJhbWVdLm1fc2NhbGU7CisjZW5kaWYKICAgICBGbG9hdFNpemUgc2VsZlNpemUgPSBjdXJyZW50
RnJhbWVTaXplKCk7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKIAogICAgIGlm
IChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uKQogICAgICAgICBvcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4
KG1fY3VycmVudEZyYW1lKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBjdHh0LT5kcmF3TmF0
aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIHNlbGZTaXplLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0
LCBzcmNSZWN0LCBzY2FsZSwgY29tcG9zaXRlT3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24pOwor
I2Vsc2UKICAgICBjdHh0LT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIHNlbGZTaXplLCBzdHlsZUNv
bG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmll
bnRhdGlvbik7CisjZW5kaWYKIAogICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCiAgICAgICAgIGlt
YWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK1Bh
c3NOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVkRnJhbWVBdEluZGV4KHNp
emVfdCBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1f
ZnJhbWVzW2luZGV4XS5tX2ZyYW1lKQorICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAxKTsKKwor
ICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9zY2FsZSA9PSAxICYmICFtX3NvdXJjZS5pc1N1YnNh
bXBsZWQoKSkKKyAgICAgICAgcmV0dXJuIENHSW1hZ2VSZXRhaW4obV9mcmFtZXNbaW5kZXhdLm1f
ZnJhbWUpOworCisgICAgcmV0dXJuIG1fc291cmNlLmNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCk7
Cit9CisjZW5kaWYKKwogfQogCiAjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAppbmRleCBkNzRiNGI0NzBjNWI0OTZj
ZjMwNmU2MTUxMDNiOGEwODFkMmIwMGJiLi45MjM2NmUyYWJmY2VlYzQ4MTMzOTNlNDdiNTA3MGY2
MTk5YmQzMDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvckNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9D
b2xvckNHLmNwcApAQCAtMzEsMTAgKzMxLDM4IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
Q0cuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dD
b2xvclRyYW5zZm9ybS5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4K
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgUExBVEZPUk0oSU9TKQorQ0dDb2xvclJlZiBj
cmVhdGVDR0NvbG9yV2l0aERldmljZVdoaXRlKENHRmxvYXQgd2hpdGUsIENHRmxvYXQgYWxwaGEp
Cit7CisgICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBncmF5U3BhY2UgPSBDR0NvbG9yU3BhY2VD
cmVhdGVEZXZpY2VHcmF5KCk7CisgICAgY29uc3QgQ0dGbG9hdCBjb21wb25lbnRzW10gPSB7IHdo
aXRlLCBhbHBoYSB9OworICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKGdyYXlTcGFjZSwgY29tcG9u
ZW50cyk7Cit9CisKK3N0YXRpYyBDR0NvbG9yUmVmIGNyZWF0ZUNHQ29sb3JXaXRoRGV2aWNlUkdC
QShDR0NvbG9yUmVmIHNvdXJjZUNvbG9yKQoreworICAgIGlmICghc291cmNlQ29sb3IgfHwgQ0ZF
cXVhbChDR0NvbG9yR2V0Q29sb3JTcGFjZShzb3VyY2VDb2xvciksIGRldmljZVJHQkNvbG9yU3Bh
Y2VSZWYoKSkpCisgICAgICAgIHJldHVybiBDR0NvbG9yUmV0YWluKHNvdXJjZUNvbG9yKTsKKwor
ICAgIFJldGFpblB0cjxDR0NvbG9yVHJhbnNmb3JtUmVmPiBjb2xvclRyYW5zZm9ybSA9IGFkb3B0
Q0YoQ0dDb2xvclRyYW5zZm9ybUNyZWF0ZShkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIG51bGxw
dHIpKTsKKyAgICBpZiAoIWNvbG9yVHJhbnNmb3JtKQorICAgICAgICByZXR1cm4gQ0dDb2xvclJl
dGFpbihzb3VyY2VDb2xvcik7CisKKyAgICAvLyBDR0NvbG9yVHJhbnNmb3JtQ29udmVydENvbG9y
KCkgcmV0dXJucyBhICsxIHJldGFpbmVkIG9iamVjdC4KKyAgICByZXR1cm4gQ0dDb2xvclRyYW5z
Zm9ybUNvbnZlcnRDb2xvcihjb2xvclRyYW5zZm9ybS5nZXQoKSwgc291cmNlQ29sb3IsIGtDR1Jl
bmRlcmluZ0ludGVudERlZmF1bHQpOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogQ29s
b3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCiB7CiAgICAgaWYgKCFjb2xvcikgewpAQCAtNDMs
OCArNzEsMTcgQEAgQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHNpemVfdCBudW1Db21wb25lbnRz
ID0gQ0dDb2xvckdldE51bWJlck9mQ29tcG9uZW50cyhjb2xvcik7CiAgICAgY29uc3QgQ0dGbG9h
dCogY29tcG9uZW50cyA9IENHQ29sb3JHZXRDb21wb25lbnRzKGNvbG9yKTsKKyNlbHNlCisgICAg
UmV0YWluUHRyPENHQ29sb3JSZWY+IGNvcnJlY3RlZENvbG9yID0gYWRvcHRDRihjcmVhdGVDR0Nv
bG9yV2l0aERldmljZVJHQkEoY29sb3IpKTsKKyAgICBpZiAoIWNvcnJlY3RlZENvbG9yKQorICAg
ICAgICBjb3JyZWN0ZWRDb2xvciA9IGNvbG9yOworCisgICAgc2l6ZV90IG51bUNvbXBvbmVudHMg
PSBDR0NvbG9yR2V0TnVtYmVyT2ZDb21wb25lbnRzKGNvcnJlY3RlZENvbG9yLmdldCgpKTsKKyAg
ICBjb25zdCBDR0Zsb2F0KiBjb21wb25lbnRzID0gQ0dDb2xvckdldENvbXBvbmVudHMoY29ycmVj
dGVkQ29sb3IuZ2V0KCkpOworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKICAgICBmbG9hdCBy
ID0gMDsKICAgICBmbG9hdCBnID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9GbG9hdFBvaW50Q0cuY3BwCmluZGV4IGYzN2UwN2YzMTk4ODhlMjc1YzZm
NDU5MmIyOWMxNDI3YjlkNjhlNWQuLjI1MGVkNTA1ZGZmMjliOTUwZjJhMGEzZjMxZmNiM2NlZjRh
OWNjNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zs
b2F0UG9pbnRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
RmxvYXRQb2ludENHLmNwcApAQCAtMjksNyArMjksMTEgQEAKIAogI2lmIFVTRShDRykKIAorI2lm
ICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlv
blNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3Mu
aD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcAppbmRleCA0ZWEwODNhZWEz
ZmVhNTI2NDk3ZDFiMWE4MDQ0MGRjMjZjYzVjNTMwLi44YTBhNTNjNjFkMjY2N2ViZjRkYzBmZDlm
NDQ1ZTVmM2M3ZjYyNzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCkBAIC0yOSw3ICsyOSwxMSBAQAogCiAjaWYgVVNFKENH
KQogCisjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0Fw
cGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVH
cmFwaGljcy5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRTaXplQ0cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRTaXplQ0cuY3BwCmluZGV4IDE0
ZTE0ZmMyYTM5OWRkMTdkYjEyNTIwMjYxNDE0OTI5ZDM2YTlmNjAuLjRmMWUxMDhkZTM5YTBjMDU3
NmZmNTBmZDNjYzY5YzVjMWI0NzE4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVDRy5jcHAKQEAgLTI5LDcgKzI5LDExIEBACiAKICNp
ZiBVU0UoQ0cpCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2Vy
dmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCmlu
ZGV4IDQ3ZDljN2Y2MDhiYjBhZDA0NTRlOWRmZTA1Mzc3MTkzOThhNjk4MzAuLjM4NzEwYTE3MzU4
MDllYmZiY2RiYWI3MzMyM2E3ZGVhNWJkNjAxOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCkBAIC0yOCw3ICsyOCwxMSBAQAog
I2luY2x1ZGUgIkdyYWRpZW50LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgor
I2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNh
dGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhp
Y3MuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IGExOTc0NWUyOGUyNjUyMWJkZjA4NGMwZGRm
Y2Q5ZDY5MjIxMDEyZGUuLjNkNGQzYWY5NmEyNmU4NDk2YzFjMjY0OTkxMTFlNjllMDFkNTI5NzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTUxLDEwICs1MSwxNyBAQAogI2luY2x1ZGUgPFdlYktp
dFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNlbmRpZgogCisjaWYg
UExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHRHU3RhdGUuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2VuZGlmCisKKyNpZiAhUExBVEZPUk0oSU9TKQog
ZXh0ZXJuICJDIiB7CiAgICAgQ0dfRVhURVJOIHZvaWQgQ0dDb250ZXh0U2V0Q1RNKENHQ29udGV4
dFJlZiwgQ0dBZmZpbmVUcmFuc2Zvcm0pOwogICAgIENHX0VYVEVSTiBDR0FmZmluZVRyYW5zZm9y
bSBDR0NvbnRleHRHZXRCYXNlQ1RNKENHQ29udGV4dFJlZik7CiB9OworI2VuZGlmIC8vICFQTEFU
Rk9STShJT1MpCiAKIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIHVzaW5nIGRlY2xhcmF0aW9uIHNo
b3VsZCBiZSBpbiA8d3RmL0hhc2hGdW5jdGlvbnMuaD4uCiB1c2luZyBXVEY6OnBhaXJJbnRIYXNo
OwpAQCAtODIsNiArODksOSBAQCBDR0NvbG9yU3BhY2VSZWYgZGV2aWNlUkdCQ29sb3JTcGFjZVJl
ZigpCiAKIENHQ29sb3JTcGFjZVJlZiBzUkdCQ29sb3JTcGFjZVJlZigpCiB7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIHJldHVybiBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7CisjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQogICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgc1JHQlNwYWNlID0gQ0dD
b2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpOwogI2lmIFBMQVRGT1JN
KFdJTikKICAgICAvLyBPdXQtb2YtZGF0ZSBDRyBpbnN0YWxsYXRpb25zIHdpbGwgbm90IGhvbm9y
IGtDR0NvbG9yU3BhY2VTUkdCLiBUaGlzIGxvZ2ljIGF2b2lkcwpAQCAtOTMsNyArMTAzLDE1IEBA
IENHQ29sb3JTcGFjZVJlZiBzUkdCQ29sb3JTcGFjZVJlZigpCiAgICAgcmV0dXJuIHNSR0JTcGFj
ZTsKIH0KIAotI2lmIFBMQVRGT1JNKFdJTikKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIHNldFN0
cm9rZUFuZEZpbGxDb2xvcihDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dDb2xvclJlZiBjb2xvcikK
K3sKKyAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjb2xvcik7
CisgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNvbG9yKTsKK30K
KyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKKyNpZiBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JN
KElPUykKIENHQ29sb3JTcGFjZVJlZiBsaW5lYXJSR0JDb2xvclNwYWNlUmVmKCkKIHsKICAgICAv
LyBGSVhNRTogV2luZG93cyBzaG91bGQgYmUgYWJsZSB0byB1c2UgbGluZWFyIHNSR0IsIHRoaXMg
aXMgdHJhY2tlZCBieSBodHRwOi8vd2Via2l0Lm9yZy9iLzgwMDAwLgpAQCAtMTAxLDExICsxMTks
MjAgQEAgQ0dDb2xvclNwYWNlUmVmIGxpbmVhclJHQkNvbG9yU3BhY2VSZWYoKQogfQogI2VuZGlm
CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5p
dChDR0NvbnRleHRSZWYgY2dDb250ZXh0KQorI2Vsc2UKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUluaXQoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCwgYm9vbCBzaG91bGRVc2VDb250ZXh0
Q29sb3JzKQorI2VuZGlmCiB7CiAgICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZShjZ0NvbnRleHQpOwogICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNnQ29udGV4
dCk7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoY2dDb250ZXh0KSB7CisjZWxzZQorICAg
IG1fc3RhdGUuc2hvdWxkVXNlQ29udGV4dENvbG9ycyA9IHNob3VsZFVzZUNvbnRleHRDb2xvcnM7
CisgICAgaWYgKGNnQ29udGV4dCAmJiBzaG91bGRVc2VDb250ZXh0Q29sb3JzKSB7CisjZW5kaWYK
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3Vy
IHN0YXRlLgogICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSwgZmlsbENv
bG9yU3BhY2UoKSk7CiAgICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3Io
KSwgc3Ryb2tlQ29sb3JTcGFjZSgpKTsKQEAgLTE0MSwxMSArMTY4LDE5IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCiAgICAgbV9kYXRhLT5tX3VzZXJUb0Rl
dmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKKyNpZiBQTEFURk9S
TShJT1MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJ
bWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGZsb2F0IHNjYWxlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2Rl
IGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKKyNlbHNlCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0
ciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKQorI2VuZGlmCiB7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
KGltYWdlUHRyKTsKIAogICAgIGZsb2F0IGN1cnJIZWlnaHQgPSBvcmllbnRhdGlvbi51c2VzV2lk
dGhBc0hlaWdodCgpID8gQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSA6IENHSW1hZ2VHZXRI
ZWlnaHQoaW1hZ2UuZ2V0KCkpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBVbmFwcGx5IHRo
ZSBzY2FsaW5nIHNpbmNlIHdlIGFyZSBnZXR0aW5nIHRoaXMgZnJvbSBhIHNjYWxlZCBiaXRtYXAu
CisgICAgY3VyckhlaWdodCAvPSBzY2FsZTsKKyNlbmRpZgogCiAgICAgaWYgKGN1cnJIZWlnaHQg
PD0gc3JjUmVjdC55KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1Myw2ICsxODgsMTEgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZShQYXNzTmF0aXZlSW1hZ2VQdHIgaW1h
Z2VQdHIsIGNvbnN0IEZsb2F0U2kKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgLy8gQW50aS1hbGlhc2luZyBpcyBvbiBieSBkZWZhdWx0IG9uIHRoZSBp
UGhvbmUuIE5lZWQgdG8gdHVybiBpdCBvZmYgd2hlbiBkcmF3aW5nIGltYWdlcy4KKyAgICBDR0Nv
bnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgZmFsc2UpOworI2VuZGlmCisKICAgICBi
b29sIHNob3VsZFVzZVN1YmltYWdlID0gZmFsc2U7CiAKICAgICAvLyBJZiB0aGUgc291cmNlIHJl
Y3QgaXMgYSBzdWJwb3J0aW9uIG9mIHRoZSBpbWFnZSwgdGhlbiB3ZSBjb21wdXRlIGFuIGluZmxh
dGVkIGRlc3RpbmF0aW9uIHJlY3QgdGhhdCB3aWxsIGhvbGQgdGhlIGVudGlyZSBpbWFnZQpAQCAt
MTgyLDYgKzIyMiw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoUGFz
c05hdGl2ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpCiAgICAgICAgICAgICBzdWJp
bWFnZVJlY3Quc2V0SGVpZ2h0KGNlaWxmKHN1YmltYWdlUmVjdC5oZWlnaHQoKSArIHRvcFBhZGRp
bmcpKTsKICAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KHN1YmltYWdlUmVj
dC5oZWlnaHQoKSAvIHlTY2FsZSk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICBz
dWJpbWFnZVJlY3Quc2NhbGUoc2NhbGUsIHNjYWxlKTsKKyNlbmRpZgogI2lmIENBQ0hFX1NVQklN
QUdFUwogICAgICAgICAgICAgaW1hZ2UgPSBzdWJpbWFnZUNhY2hlKCkuZ2V0U3ViaW1hZ2UoaW1h
Z2UuZ2V0KCksIHN1YmltYWdlUmVjdCk7CiAjZWxzZQpAQCAtMjA0LDYgKzI0NywxMSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFn
ZVB0ciwgY29uc3QgRmxvYXRTaQogICAgIGlmICghc2hvdWxkVXNlU3ViaW1hZ2UgJiYgY3Vyckhl
aWdodCA8IGltYWdlU2l6ZS5oZWlnaHQoKSkKICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRI
ZWlnaHQoYWRqdXN0ZWREZXN0UmVjdC5oZWlnaHQoKSAqIGN1cnJIZWlnaHQgLyBpbWFnZVNpemUu
aGVpZ2h0KCkpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEFsaWduIHRvIHBpeGVsIGJv
dW5kYXJpZXMKKyAgICBhZGp1c3RlZERlc3RSZWN0ID0gcm91bmRUb0RldmljZVBpeGVscyhhZGp1
c3RlZERlc3RSZWN0KTsKKyNlbmRpZgorCiAgICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRp
b24ob3AsIGJsZW5kTW9kZSk7CiAKICAgICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhl
IG9yaWdpbiB0byBiZSBhdCAoMCwgMCkKQEAgLTMyMyw4ICszNzEsMTQgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50
JiBwb2ludDIpCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwogCi0gICAgaWYgKHNob3VsZEFudGlhbGlhcygpKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91
bGRBbnRpYWxpYXMoY29udGV4dCwgZmFsc2UpOworICAgIGlmIChzaG91bGRBbnRpYWxpYXMoKSkg
eworICAgICAgICBib29sIHdpbGxBbnRpYWxpYXMgPSBmYWxzZTsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgIC8vIEZvcmNlIGFudGlhbGlhc2luZyBvbiBmb3IgbGluZSBwYXR0ZXJucyBhcyB0
aGV5IGRvbid0IGxvb2sgZ29vZCB3aXRoIGl0IHR1cm5lZCBvZmYgKDxyZGFyOi8vcHJvYmxlbS81
NDU5NzcyPikuCisgICAgICAgIHdpbGxBbnRpYWxpYXMgPSBwYXRXaWR0aDsKKyNlbmRpZgorICAg
ICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgd2lsbEFudGlhbGlhcyk7
CisgICAgfQogCiAgICAgaWYgKHBhdFdpZHRoKSB7CiAgICAgICAgIENHQ29udGV4dFNhdmVHU3Rh
dGUoY29udGV4dCk7CkBAIC0zODUsNiArNDM5LDM2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQog
ICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgdHJ1ZSk7CiB9CiAK
KyNpZiBQTEFURk9STShJT1MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0pvaW5lZExpbmVz
KENHUG9pbnQgcG9pbnRzW10sIHVuc2lnbmVkIGNvdW50LCBib29sIGFudGlhbGlhcywgQ0dMaW5l
Q2FwIGxpbmVDYXApCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhY291bnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7CisgICAgZmxvYXQgd2lkdGggPSBDR0NvbnRleHRHZXRMaW5lV2lkdGgoY29udGV4dCk7
CisKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworICAgIAorICAgIENHQ29udGV4
dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBhbnRpYWxpYXMpOworCisgICAgQ0dDb250ZXh0
U2V0TGluZVdpZHRoKGNvbnRleHQsIHdpZHRoIDwgMSA/IDEgOiB3aWR0aCk7CisKKyAgICBDR0Nv
bnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgCisgICAgQ0dDb250ZXh0U2V0TGluZUNhcChj
b250ZXh0LCBsaW5lQ2FwKTsKKyAgICAKKyAgICBDR0NvbnRleHRNb3ZlVG9Qb2ludChjb250ZXh0
LCBwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnkpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBDR0NvbnRleHRBZGRMaW5lVG9Qb2ludChjb250
ZXh0LCBwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpOworCisgICAgQ0dDb250ZXh0U3Ryb2tlUGF0
aChjb250ZXh0KTsKKworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Cit9Cisj
ZW5kaWYKKwogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBj
aXJjbGVzIHVzZWQgaW4gbGlzdHMuCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2Uo
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKQEAgLTM5Niw2ICs0ODAsMzEgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgZHJhd1BhdGgo
cGF0aCk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENHQ29udGV4dFJlZiBjb250ZXh0KHBsYXRm
b3JtQ29udGV4dCgpKTsKKworICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisKKyAg
ICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBmaWxsQ29sb3IoKSwgZmlsbENvbG9yU3BhY2UoKSk7
CisgICAgc2V0Q0dTdHJva2VDb2xvcihjb250ZXh0LCBzdHJva2VDb2xvcigpLCBzdHJva2VDb2xv
clNwYWNlKCkpOworCisgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHN0cm9rZVRo
aWNrbmVzcygpKTsKKyAgICAKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAg
Q0dDb250ZXh0QWRkRWxsaXBzZUluUmVjdChjb250ZXh0LCByZWN0KTsKKworICAgIENHQ29udGV4
dEZpbGxQYXRoKGNvbnRleHQpOworICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7Cisg
ICAgCisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKK30KKyNlbmRpZgorCiBz
dGF0aWMgdm9pZCBhZGRDb252ZXhQb2x5Z29uVG9QYXRoKFBhdGgmIHBhdGgsIHNpemVfdCBudW1i
ZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQogewogICAgIEFTU0VSVChudW1i
ZXJPZlBvaW50cyA+IDApOwpAQCAtOTAzLDcgKzEwMTIsMTEgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKIAogc3RhdGljIHZvaWQgYXBwbHlTaGFk
b3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBDR0Zsb2F0JiB4T2Zmc2V0LCBDR0Zsb2F0JiB5T2Zmc2V0KQogewotI2lmICFQTEFURk9STShJ
T1MpCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBV
TlVTRURfUEFSQU0oeE9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKHlPZmZzZXQpOworI2Vsc2UK
ICAgICBpZiAoY29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQogICAgICAgICByZXR1cm47
CiAKQEAgLTEyMzUsNiArMTM0OCw1OSBAQCBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNbwogICAgIHJl
dHVybiBGbG9hdFJlY3Qocm91bmRlZE9yaWdpbiwgcm91bmRlZExvd2VyUmlnaHQgLSByb3VuZGVk
T3JpZ2luKTsKIH0KIAorLy8gRklYTUU6IFdlIHNob3VsZCBsb29rIHRvIGNvbnNvbGlkYXRlIHRo
ZSBpT1MgYW5kIG5vbi1pT1MgaW1wbGVtZW50YXRpb25zIG9mCisvLyBjb21wdXRlTGluZUJvdW5k
c0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KCkgYW5kIGNvbXB1dGVMaW5lQm91bmRzRm9yVGV4
dCgpLgorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRpYyBGbG9hdFJlY3QgY29tcHV0ZUxpbmVCb3Vu
ZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChHcmFwaGljc0NvbnRleHQmIGluaXRpYWxDb250
ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcs
IGJvb2wmIHNob3VsZEFudGlhbGlhcywgQ29sb3ImIGNvbG9yKQoreworICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gaW5pdGlhbENvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dQb2lu
dCBvcmlnaW47CisgICAgQ0dGbG9hdCB0aGlja25lc3MgPSBzdGQ6Om1heChpbml0aWFsQ29udGV4
dC5zdHJva2VUaGlja25lc3MoKSwgMC41Zik7CisKKyAgICBzaG91bGRBbnRpYWxpYXMgPSB0cnVl
OworICAgIGlmIChwcmludGluZykKKyAgICAgICAgb3JpZ2luID0gQ0dQb2ludE1ha2UocG9pbnQu
eCgpLCBwb2ludC55KCkpOworICAgIGVsc2UgeworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0
ID0gQ0dDb250ZXh0R2V0VXNlclNwYWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShjb250ZXh0KTsK
KyAgICAgICAgaWYgKEFmZmluZVRyYW5zZm9ybSh0KS5wcmVzZXJ2ZXNBeGlzQWxpZ25tZW50KCkp
CisgICAgICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSBmYWxzZTsKKworICAgICAgICAvLyBUaGlz
IGNvZGUgYWx3YXlzIGRyYXdzIGEgbGluZSB0aGF0IGlzIGF0IGxlYXN0IG9uZS1waXhlbCBsaW5l
IGhpZ2gsCisgICAgICAgIC8vIHdoaWNoIHRlbmRzIHRvIHZpc3VhbGx5IG92ZXJ3aGVsbSB0ZXh0
IGF0IHNtYWxsIHNjYWxlcy4gVG8gY291bnRlciB0aGlzCisgICAgICAgIC8vIGVmZmVjdCwgYW4g
YWxwaGEgaXMgYXBwbGllZCB0byB0aGUgdW5kZXJsaW5lIGNvbG9yIHdoZW4gdGV4dCBpcyBhdCBz
bWFsbCBzY2FsZXMuCisKKyAgICAgICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5z
aW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBhcmUgZXF1YWwuCisgICAgICAgIENHRmxvYXQg
c2NhbGUgPSB0LmIgPyBzcXJ0Zih0LmEgKiB0LmEgKyB0LmIgKiB0LmIpIDogdC5hOworICAgICAg
ICBpZiAoc2NhbGUgPCAxLjApIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBNaW5V
bmRlcmxpbmVBbHBoYSA9IDAuNGY7CisgICAgICAgICAgICBmbG9hdCBzaGFkZSA9IHNjYWxlID4g
TWluVW5kZXJsaW5lQWxwaGEgPyBzY2FsZSA6IE1pblVuZGVybGluZUFscGhhOworICAgICAgICAg
ICAgaW50IGFscGhhID0gY29sb3IuYWxwaGEoKSAqIHNoYWRlOworICAgICAgICAgICAgY29sb3Ig
PSBDb2xvcihjb2xvci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpLCBhbHBoYSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBEb24ndCBvZmZzZXQgbGluZSBmcm9tIGJvdHRvbSBv
ZiB0ZXh0IGlmIHNjYWxlIGlzIGxlc3MgdGhhbiBPZmZzZXRVbmRlcmxpbmVTY2FsZS4KKyAgICAg
ICAgc3RhdGljIGNvbnN0IENHRmxvYXQgT2Zmc2V0VW5kZXJsaW5lU2NhbGUgPSAwLjRmOworICAg
ICAgICBDR0Zsb2F0IGR5ID0gc2NhbGUgPCBPZmZzZXRVbmRlcmxpbmVTY2FsZSA/IDAgOiAxOwor
CisgICAgICAgIC8vIElmIHdlJ3ZlIGluY3JlYXNlZCB0aGUgdGhpY2tuZXNzIG9mIHRoZSBsaW5l
LCBtYWtlIHN1cmUgdG8gbW92ZSB0aGUgbG9jYXRpb24gdG9vLgorICAgICAgICBpZiAodGhpY2tu
ZXNzID4gMSkKKyAgICAgICAgICAgIGR5ICs9IHJvdW5kZih0aGlja25lc3MpIC0gMTsKKworICAg
ICAgICBDR1BvaW50IGRldmljZVBvaW50ID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKHBv
aW50LCB0KTsKKyAgICAgICAgQ0dQb2ludCBkZXZpY2VPcmlnaW4gPSBDR1BvaW50TWFrZShyb3Vu
ZGYoZGV2aWNlUG9pbnQueCksIGNlaWxmKGRldmljZVBvaW50LnkpICsgZHkpOworICAgICAgICBv
cmlnaW4gPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGV2aWNlT3JpZ2luLCBDR0FmZmlu
ZVRyYW5zZm9ybUludmVydCh0KSk7CisgICAgICAgIHRoaWNrbmVzcyAvPSBzY2FsZTsKKyAgICB9
CisgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4ueCwgb3JpZ2luLnksIHdpZHRoLCB0aGlja25l
c3MpOworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5n
KQoreworICAgIGJvb2wgZHVtbXlCb29sOworICAgIENvbG9yIGR1bW15Q29sb3I7CisgICAgcmV0
dXJuIGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoKnRoaXMsIHBv
aW50LCB3aWR0aCwgcHJpbnRpbmcsIGR1bW15Qm9vbCwgZHVtbXlDb2xvcik7Cit9CisjZWxzZQog
c3RhdGljIEZsb2F0UmVjdCBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JU
ZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHdpZHRoLCBib29sIHByaW50aW5nLCBib29sJiBzaG91bGRBbnRpYWxpYXMpCiB7CiAgICAg
c2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKQEAgLTEyNzAsNiArMTQzNiw3IEBAIEZsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvCiAgICAgYm9vbCBkdW1teTsKICAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3Vu
ZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCgqdGhpcywgcG9pbnQsIHdpZHRoLCBwcmludGlu
ZywgZHVtbXkpOwogfQorI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5n
KQogewpAQCAtMTI3OSw2ICsxNDQ2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJvb2wKICAgICBp
ZiAod2lkdGggPD0gMCkKICAgICAgICAgcmV0dXJuOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBib29sIHNob3VsZEFudGlhbGlhc0xpbmU7CiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGNvbXB1
dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoKnRoaXMsIHBvaW50LCB3aWR0
aCwgcHJpbnRpbmcsIHNob3VsZEFudGlhbGlhc0xpbmUpOwogCkBAIC0xMjk3LDEwICsxNDY1LDI2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBib29sCiAKICAgICBpZiAocmVzdG9yZUFudGlhbGlhc01v
ZGUpCiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhwbGF0Zm9ybUNvbnRleHQo
KSwgdHJ1ZSk7CisjZWxzZQorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7CisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKworICAgIENvbG9yIGNv
bG9yKHN0cm9rZUNvbG9yKCkpOworICAgIAorICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzTGluZTsK
KyAgICBGbG9hdFJlY3QgcmVjdCA9IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9k
ZUZvclRleHQoKnRoaXMsIHBvaW50LCB3aWR0aCwgcHJpbnRpbmcsIHNob3VsZEFudGlhbGlhc0xp
bmUsIGNvbG9yKTsKKworICAgIGlmIChtX3N0YXRlLnNob3VsZFVzZUNvbnRleHRDb2xvcnMpCisg
ICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yLCBzdHJva2VDb2xvclNwYWNlKCkp
OworICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3QpOworCisgICAgQ0dDb250ZXh0
UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKKyNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0
KQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0xMzE5LDYgKzE1MDMsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCkKIAogICAgIENHUERGQ29udGV4dFNldFVSTEZvclJlY3QoY29udGV4dCwgdXJsUmVmLmdldCgp
LAogICAgICAgICBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShyZWN0LCBDR0NvbnRleHRHZXRD
VE0oY29udGV4dCkpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGxpbmspOworICAgIFVOVVNF
RF9QQVJBTShkZXN0UmVjdCk7CisjZW5kaWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgbW9kZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHAKaW5kZXggYjEzZDEyMTM0MGJiMzExMzk4YTY5Mjg3OTZkMzg5OWRlZGNmY2VmYy4uZTdk
NmY0MzZlNGM2NzZiOGM1ZGI0OWE0ZmQ2NjE5YjQwMDhkNzkwOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTMz
LDggKzMzLDEzIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJ
bWFnZURhdGEuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8QXBw
bGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CiAjaW5jbHVkZSA8bWF0aC5o
PgorI2lmICFQTEFURk9STShJT1MpCisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBs
aWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3MuaD4KKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNlbmRpZgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTUwLDEwICs1NSwxNyBAQAogI2luY2x1ZGUg
PElPU3VyZmFjZS9JT1N1cmZhY2UuaD4KICNlbmRpZgogCisvLyBDQSB1c2VzIEFSR0IzMiBmb3Ig
dGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCisj
ZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQorI2lmIFBMQVRGT1JNKElP
UykKK3N0YXRpYyBjb25zdCBpbnQgbWF4SU9TdXJmYWNlRGltZW5zaW9uID0gMjA0ODsKKyNlbHNl
CiBzdGF0aWMgY29uc3QgaW50IG1heElPU3VyZmFjZURpbWVuc2lvbiA9IDQwOTY7CisjZW5kaWYK
IAogc3RhdGljIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IGNyZWF0ZUlPU3VyZmFjZShjb25zdCBJ
bnRTaXplJiBzaXplKQogewpAQCAtNzAsOCArODIsMTMgQEAgc3RhdGljIFJldGFpblB0cjxJT1N1
cmZhY2VSZWY+IGNyZWF0ZUlPU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGlmICgh
YWxsb2NTaXplKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNvbnN0IHZvaWQgKmtleXNbNl07
Ci0gICAgY29uc3Qgdm9pZCAqdmFsdWVzWzZdOworI2lmICFQTEFURk9STShJT1MpCisgICAgY29u
c3Qgdm9pZCoga2V5c1s2XTsKKyAgICBjb25zdCB2b2lkKiB2YWx1ZXNbNl07CisjZWxzZQorICAg
IGNvbnN0IHZvaWQqIGtleXNbN107CisgICAgY29uc3Qgdm9pZCogdmFsdWVzWzddOworI2VuZGlm
CiAgICAga2V5c1swXSA9IGtJT1N1cmZhY2VXaWR0aDsKICAgICB2YWx1ZXNbMF0gPSBDRk51bWJl
ckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmd2lkdGgpOwogICAgIGtleXNbMV0gPSBrSU9T
dXJmYWNlSGVpZ2h0OwpAQCAtODQsOSArMTAxLDE0IEBAIHN0YXRpYyBSZXRhaW5QdHI8SU9TdXJm
YWNlUmVmPiBjcmVhdGVJT1N1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICB2YWx1ZXNb
NF0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlwZSwgJmJ5dGVzUGVyUm93KTsK
ICAgICBrZXlzWzVdID0ga0lPU3VyZmFjZUFsbG9jU2l6ZTsKICAgICB2YWx1ZXNbNV0gPSBDRk51
bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlwZSwgJmFsbG9jU2l6ZSk7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIGtleXNbNl0gPSBrSU9TdXJmYWNlQ2FjaGVNb2RlOworICAgIGludCBjYWNo
ZU1vZGUgPSBrSU9NYXBXcml0ZUNvbWJpbmVDYWNoZTsKKyAgICB2YWx1ZXNbNl0gPSBDRk51bWJl
ckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmY2FjaGVNb2RlKTsKKyNlbmRpZgogCi0gICAg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZGljdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3Jl
YXRlKDAsIGtleXMsIHZhbHVlcywgNiwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAm
a0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCA2OyBpKyspCisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZGljdCA9IGFk
b3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdU
SCh2YWx1ZXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9B
UlJBWV9MRU5HVEgodmFsdWVzKTsgKytpKQogICAgICAgICBDRlJlbGVhc2UodmFsdWVzW2ldKTsK
IAogICAgIHJldHVybiBhZG9wdENGKElPU3VyZmFjZUNyZWF0ZShkaWN0LmdldCgpKSk7CkBAIC0x
NjksNyArMTkxLDExIEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBz
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9kYXRhLm1f
ZGF0YSkgJiAzKSk7CiAKKyNpZiBVU0VfQVJHQjMyCisgICAgICAgIG1fZGF0YS5tX2JpdG1hcElu
Zm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVy
MzJIb3N0OworI2Vsc2UKICAgICAgICAgbV9kYXRhLm1fYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkTGFzdDsKKyNlbmRpZgogICAgICAgICBjZ0NvbnRleHQgPSBhZG9wdENG
KENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEubV9kYXRhLCBtX2RhdGEubV9iYWNraW5nU3Rv
cmVTaXplLndpZHRoKCksIG1fZGF0YS5tX2JhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIG1f
ZGF0YS5tX2J5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEubV9jb2xvclNwYWNlLCBtX2Rh
dGEubV9iaXRtYXBJbmZvKSk7CiAgICAgICAgIC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhhdCB3
cmFwcyB0aGUgZGF0YS4KICAgICAgICAgbV9kYXRhLm1fZGF0YVByb3ZpZGVyID0gYWRvcHRDRihD
R0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5tX2RhdGEsIG51bUJ5dGVzLnVu
c2FmZUdldCgpLCByZWxlYXNlSW1hZ2VEYXRhKSk7CkBAIC0yNzgsNyArMzA0LDEzIEBAIHZvaWQg
SW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsCiAKICAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3Jj
UmVjdDsKICAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVz
b2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC0+ZHJhd05hdGl2ZUltYWdlKGltYWdlLmdl
dCgpLCBtX2RhdGEubV9iYWNraW5nU3RvcmVTaXplLCBjb2xvclNwYWNlLCBkZXN0UmVjdCwgYWRq
dXN0ZWRTcmNSZWN0LCBvcCwgYmxlbmRNb2RlKTsKKyAgICBkZXN0Q29udGV4dC0+ZHJhd05hdGl2
ZUltYWdlKGltYWdlLmdldCgpLCBtX2RhdGEubV9iYWNraW5nU3RvcmVTaXplLCBjb2xvclNwYWNl
LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAg
MS4wZiwgLy8gRGVmYXVsdCBzY2FsZSBvZiAxLjAKKyNlbmRpZgorICAgICAgICBvcCwKKyAgICAg
ICAgYmxlbmRNb2RlCisgICAgKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCkBAIC0zNzUsNyArNDA3LDcgQEAgdm9pZCBJbWFn
ZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KE11bHRpcGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBlZEFy
cmF5KiBzb3VyY2UsIGMKIAogc3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKIHsK
LSNpZiBQTEFURk9STShXSU4pCisjaWYgUExBVEZPUk0oSU9TKSB8fCBQTEFURk9STShXSU4pCiAg
ICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5q
cGVnIik7CiAjZW5kaWYKICAgICByZXR1cm4ga1VUVHlwZUpQRUc7CkBAIC0zODMsNyArNDE1LDcg
QEAgc3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKICAgICAKIHN0YXRpYyBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21NSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KQogewotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJ
T1MpCiAgICAgcmV0dXJuIGFkb3B0Q0YoVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZv
clRhZyhrVVRUYWdDbGFzc01JTUVUeXBlLCBtaW1lVHlwZS5jcmVhdGVDRlN0cmluZygpLmdldCgp
LCAwKSk7CiAjZWxzZQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7IC8vIEl0IGlzIHVuY2xl
YXIgaWYgQ0ZTVFIgaXMgdGhyZWFkc2FmZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAppbmRleCBkZTRjMzg3
ZTE2N2E1MTk3OGFhZjhiYWY4YzlmNTliZWI3OWE3NTM5Li45ZmQyOGQ0NTdmY2I4MGNlNGI0YTU3
MDlkZmE0YzE4OWIzMjI5YjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCkBAIC00OCw2ICs0OCw5IEBA
IHN0cnVjdCBTY2FubGluZURhdGEgewogfTsKICNlbmRpZgogCisvLyBDQSB1c2VzIEFSR0IzMiBm
b3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQu
CisjZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmKQpAQCAt
NjAsNyArNjMsNyBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRT
aXplJikKIAogI2lmIFVTRShBQ0NFTEVSQVRFKQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKKyNpZiBVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCiBzdGF0aWMgdm9pZCBjb252ZXJ0U2NhbmxpbmUodm9pZCogZGF0YSwgc2l6
ZV90IHRpbGVOdW1iZXIsIGJvb2wgcHJlbXVsdGlwbHkpCiB7CiAgICAgU2NhbmxpbmVEYXRhKiBz
Y2FubGluZURhdGEgPSBzdGF0aWNfY2FzdDxTY2FubGluZURhdGEqPihkYXRhKTsKQEAgLTEyMiwx
MyArMTI1LDEzIEBAIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0
YTo6Z2V0RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zCiAgICAgCiAgICAgaW50IG9yaWdp
bnggPSByZWN0LngoKTsKICAgICBpbnQgZGVzdHggPSAwOwotICAgIGludCBkZXN0dyA9IHJlY3Qu
d2lkdGgoKTsKKyAgICBDaGVja2VkPGludD4gZGVzdHcgPSByZWN0LndpZHRoKCk7CiAgICAgaWYg
KG9yaWdpbnggPCAwKSB7CiAgICAgICAgIGRlc3R3ICs9IG9yaWdpbng7CiAgICAgICAgIGRlc3R4
ID0gLW9yaWdpbng7CiAgICAgICAgIG9yaWdpbnggPSAwOwogICAgIH0KLSAgICBkZXN0dyA9IHN0
ZDo6bWluPGludD4oZGVzdHcsIGNlaWxmKHNpemUud2lkdGgoKSAvIHJlc29sdXRpb25TY2FsZSkg
LSBvcmlnaW54KTsKKyAgICBkZXN0dyA9IHN0ZDo6bWluPGludD4oZGVzdHcudW5zYWZlR2V0KCks
IGNlaWxmKHNpemUud2lkdGgoKSAvIHJlc29sdXRpb25TY2FsZSkgLSBvcmlnaW54KTsKICAgICBv
cmlnaW54ICo9IHJlc29sdXRpb25TY2FsZTsKICAgICBpZiAoZW5keC51bnNhZmVHZXQoKSA+IHNp
emUud2lkdGgoKSkKICAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKQEAgLTEzNiwxMyArMTM5
LDEzIEBAIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0
RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zCiAgICAgCiAgICAgaW50IG9yaWdpbnkgPSBy
ZWN0LnkoKTsKICAgICBpbnQgZGVzdHkgPSAwOwotICAgIGludCBkZXN0aCA9IHJlY3QuaGVpZ2h0
KCk7CisgICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gcmVjdC5oZWlnaHQoKTsKICAgICBpZiAob3Jp
Z2lueSA8IDApIHsKICAgICAgICAgZGVzdGggKz0gb3JpZ2lueTsKICAgICAgICAgZGVzdHkgPSAt
b3JpZ2lueTsKICAgICAgICAgb3JpZ2lueSA9IDA7CiAgICAgfQotICAgIGRlc3RoID0gc3RkOjpt
aW48aW50PihkZXN0aCwgY2VpbGYoc2l6ZS5oZWlnaHQoKSAvIHJlc29sdXRpb25TY2FsZSkgLSBv
cmlnaW55KTsKKyAgICBkZXN0aCA9IHN0ZDo6bWluPGludD4oZGVzdGgudW5zYWZlR2V0KCksIGNl
aWxmKHNpemUuaGVpZ2h0KCkgLyByZXNvbHV0aW9uU2NhbGUpIC0gb3JpZ2lueSk7CiAgICAgb3Jp
Z2lueSAqPSByZXNvbHV0aW9uU2NhbGU7CiAgICAgaWYgKGVuZHkudW5zYWZlR2V0KCkgPiBzaXpl
LmhlaWdodCgpKQogICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKQEAgLTE2Myw2ICsxNjYs
MTYgQEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXRE
YXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnMKICAgICAgICAgCiAjaWYgVVNFKEFDQ0VMRVJB
VEUpCiAgICAgICAgIGlmICh1bm11bHRpcGxpZWQpIHsKKyNpZiBVU0VfQVJHQjMyCisgICAgICAg
ICAgICBTY2FubGluZURhdGEgc2NhbmxpbmVEYXRhOworICAgICAgICAgICAgc2NhbmxpbmVEYXRh
LnNjYW5saW5lV2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKKyAgICAgICAgICAgIHNjYW5saW5l
RGF0YS5zcmNEYXRhID0gc3JjUm93czsKKyAgICAgICAgICAgIHNjYW5saW5lRGF0YS5zcmNSb3dC
eXRlcyA9IHNyY0J5dGVzUGVyUm93OworICAgICAgICAgICAgc2NhbmxpbmVEYXRhLmRlc3REYXRh
ID0gZGVzdFJvd3M7CisgICAgICAgICAgICBzY2FubGluZURhdGEuZGVzdFJvd0J5dGVzID0gZGVz
dEJ5dGVzUGVyUm93OworCisgICAgICAgICAgICBkaXNwYXRjaF9hcHBseV9mKGRlc3RoLnVuc2Fm
ZUdldCgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZ
X0RFRkFVTFQsIDApLCAmc2NhbmxpbmVEYXRhLCB1bnByZW11bHRpdHBseVNjYW5saW5lKTsKKyNl
bHNlCiAgICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKICAgICAgICAgICAgIHNyYy5oZWln
aHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7CiAgICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51
bnNhZmVHZXQoKTsKQEAgLTE3MCw4ICsxODMsOCBAQCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29ucwog
ICAgICAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICB2SW1hZ2VfQnVmZmVyIGRzdDsKLSAgICAgICAgICAgIGRzdC5oZWlnaHQgPSBkZXN0aDsKLSAg
ICAgICAgICAgIGRzdC53aWR0aCA9IGRlc3R3OworICAgICAgICAgICAgZHN0LmhlaWdodCA9IGRl
c3RoLnVuc2FmZUdldCgpOworICAgICAgICAgICAgZHN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0
KCk7CiAgICAgICAgICAgICBkc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgICAg
ICAgICBkc3QuZGF0YSA9IGRlc3RSb3dzOwogCkBAIC0xODQsMTMgKzE5NywxNCBAQCBQYXNzUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoY29uc3QgSW50
UmVjdCYgcmVjdCwgY29ucwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2SW1hZ2VVbnBy
ZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZHN0LCBrdkltYWdlTm9GbGFncyk7CisjZW5k
aWYKICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogICAgICAgICB9CiAjZW5k
aWYKICAgICAgICAgaWYgKHJlc29sdXRpb25TY2FsZSAhPSAxKSB7CiAgICAgICAgICAgICBSZXRh
aW5QdHI8Q0dDb250ZXh0UmVmPiBzb3VyY2VDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGUoc3JjUm93cywgd2lkdGgudW5zYWZlR2V0KCksIGhlaWdodC51bnNhZmVHZXQoKSwg
OCwgc3JjQnl0ZXNQZXJSb3csIG1fY29sb3JTcGFjZSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRMYXN0KSk7CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc291cmNlSW1hZ2Ug
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKHNvdXJjZUNvbnRleHQuZ2V0KCkp
KTsKLSAgICAgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGRlc3RpbmF0aW9uQ29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRlc3RSb3dzLCBkZXN0dywgZGVzdGgs
IDgsIGRlc3RCeXRlc1BlclJvdywgbV9jb2xvclNwYWNlLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZExhc3QpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGRlc3RpbmF0
aW9uQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRlc3RSb3dzLCBkZXN0
dy51bnNhZmVHZXQoKSwgZGVzdGgudW5zYWZlR2V0KCksIDgsIGRlc3RCeXRlc1BlclJvdywgbV9j
b2xvclNwYWNlLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKICAgICAgICAgICAg
IENHQ29udGV4dFNldEJsZW5kTW9kZShkZXN0aW5hdGlvbkNvbnRleHQuZ2V0KCksIGtDR0JsZW5k
TW9kZUNvcHkpOwogICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRlc3RpbmF0aW9uQ29u
dGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCB3aWR0aC51bnNhZmVHZXQoKSAvIHJlc29sdXRp
b25TY2FsZSwgaGVpZ2h0LnVuc2FmZUdldCgpIC8gcmVzb2x1dGlvblNjYWxlKSwgc291cmNlSW1h
Z2UuZ2V0KCkpOyAvLyBGSVhNRTogQWRkIHN1YnBpeGVsIHRyYW5zbGF0aW9uLgogICAgICAgICAg
ICAgaWYgKCF1bm11bHRpcGxpZWQpCkBAIC0yMDgsNiArMjIyLDIwIEBAIFBhc3NSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zCiAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNh
ZmVHZXQoKTsgeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0Owog
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gc3JjUm93c1tiYXNleCAr
IDNdOworI2lmIFVTRV9BUkdCMzIKKyAgICAgICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBp
cyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCisgICAgICAgICAg
ICAgICAgICAgIGlmIChhbHBoYSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICog
MjU1KSAvIGFscGhhOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAy
XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3Nb
YmFzZXggKyAyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0g
PSBzcmNSb3dzW2Jhc2V4ICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDJdID0gc3JjUm93c1tiYXNleF07CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDNdID0gYWxwaGE7CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsg
MV0gKiAyNTUpIC8gYWxwaGE7CkBAIC0yMTUsMTQgKzI0MywyNSBAQCBQYXNzUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoY29uc3QgSW50UmVjdCYgcmVj
dCwgY29ucwogICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFs
cGhhOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOworI2VuZGlmCiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7
CiAgICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgeworI2lmIFVTRV9BUkdCMzIKKyAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7CisgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKKyAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKKyAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOworICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOworICAgICAgICAg
ICAgICAgIH0KKyNlbHNlCiAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCAod2lk
dGggKiA0KS51bnNhZmVHZXQoKTsgeCArPSA0KQogICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyB4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihzcmNSb3dzICsgeClbMF07CisjZW5kaWYKICAgICAgICAgICAgICAgICBzcmNS
b3dzICs9IHNyY0J5dGVzUGVyUm93OwogICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RC
eXRlc1BlclJvdzsKICAgICAgICAgICAgIH0KQEAgLTI0Miw4ICsyODEsOCBAQCBQYXNzUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoY29uc3QgSW50UmVj
dCYgcmVjdCwgY29ucwogICAgICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7CiAKICAgICAgICAgdklt
YWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoOwotICAgICAgICBk
ZXN0LndpZHRoID0gZGVzdHc7CisgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0
KCk7CisgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKICAgICAgICAgZGVz
dC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJv
d3M7CiAKQEAgLTI2MywxMyArMzAyLDEzIEBAIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zCiAKICAg
ICAgICAgaWYgKHVubXVsdGlwbGllZCkgewogICAgICAgICAgICAgU2NhbmxpbmVEYXRhIHNjYW5s
aW5lRGF0YTsKLSAgICAgICAgICAgIHNjYW5saW5lRGF0YS5zY2FubGluZVdpZHRoID0gd2lkdGgu
dW5zYWZlR2V0KCk7CisgICAgICAgICAgICBzY2FubGluZURhdGEuc2NhbmxpbmVXaWR0aCA9IGRl
c3R3LnVuc2FmZUdldCgpOwogICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNyY0RhdGEgPSBzcmNS
b3dzOwogICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNyY1Jvd0J5dGVzID0gc3JjQnl0ZXNQZXJS
b3c7CiAgICAgICAgICAgICBzY2FubGluZURhdGEuZGVzdERhdGEgPSBkZXN0Um93czsKICAgICAg
ICAgICAgIHNjYW5saW5lRGF0YS5kZXN0Um93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7CiAKLSAg
ICAgICAgICAgIGRpc3BhdGNoX2FwcGx5X2YoaGVpZ2h0LnVuc2FmZUdldCgpLCBkaXNwYXRjaF9n
ZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCAmc2Nh
bmxpbmVEYXRhLCB1bnByZW11bHRpdHBseVNjYW5saW5lKTsKKyAgICAgICAgICAgIGRpc3BhdGNo
X2FwcGx5X2YoZGVzdGgudW5zYWZlR2V0KCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElT
UEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksICZzY2FubGluZURhdGEsIHVucHJlbXVs
dGl0cGx5U2NhbmxpbmUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gU3dhcCBw
aXhlbCBjaGFubmVscyBmcm9tIEJHUkEgdG8gUkdCQS4KICAgICAgICAgICAgIGNvbnN0IHVpbnQ4
X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07CkBAIC0yNzksNyArMzE4LDcgQEAgUGFzc1JlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnMKICAgICAgICAgaWYgKHJlc29sdXRpb25TY2FsZSAhPSAxKSB7CiAgICAg
ICAgICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBzb3VyY2VDb250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUoc3JjUm93cywgd2lkdGgudW5zYWZlR2V0KCksIGhlaWdodC51
bnNhZmVHZXQoKSwgOCwgc3JjQnl0ZXNQZXJSb3csIG1fY29sb3JTcGFjZSwga0NHSW1hZ2VBbHBo
YVByZW11bHRpcGxpZWRMYXN0KSk7CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
c291cmNlSW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKHNvdXJjZUNv
bnRleHQuZ2V0KCkpKTsKLSAgICAgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGRlc3Rp
bmF0aW9uQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRlc3RSb3dzLCBk
ZXN0dywgZGVzdGgsIDgsIGRlc3RCeXRlc1BlclJvdywgbV9jb2xvclNwYWNlLCBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRS
ZWY+IGRlc3RpbmF0aW9uQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRl
c3RSb3dzLCBkZXN0dy51bnNhZmVHZXQoKSwgZGVzdGgudW5zYWZlR2V0KCksIDgsIGRlc3RCeXRl
c1BlclJvdywgbV9jb2xvclNwYWNlLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsK
ICAgICAgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShkZXN0aW5hdGlvbkNvbnRleHQuZ2V0
KCksIGtDR0JsZW5kTW9kZUNvcHkpOwogICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRl
c3RpbmF0aW9uQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCB3aWR0aC51bnNhZmVHZXQo
KSAvIHJlc29sdXRpb25TY2FsZSwgaGVpZ2h0LnVuc2FmZUdldCgpIC8gcmVzb2x1dGlvblNjYWxl
KSwgc291cmNlSW1hZ2UuZ2V0KCkpOyAvLyBGSVhNRTogQWRkIHN1YnBpeGVsIHRyYW5zbGF0aW9u
LgogCkBAIC0zOTAsNiArNDI5LDE3IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKFVp
bnQ4Q2xhbXBlZEFycmF5KiYgc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTCiAgICAgICAg
IAogI2lmICBVU0UoQUNDRUxFUkFURSkKICAgICAgICAgaWYgKHVubXVsdGlwbGllZCkgeworI2lm
IFVTRV9BUkdCMzIKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgc2NhbmxpbmVEYXRhLnNjYW5s
aW5lV2lkdGggYW5kIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQgdG8gZGlzcGF0
Y2hfYXBwbHlfZigpIGNvcnJlY3Q/CisgICAgICAgICAgICBTY2FubGluZURhdGEgc2NhbmxpbmVE
YXRhOworICAgICAgICAgICAgc2NhbmxpbmVEYXRhLnNjYW5saW5lV2lkdGggPSB3aWR0aC51bnNh
ZmVHZXQoKTsKKyAgICAgICAgICAgIHNjYW5saW5lRGF0YS5zcmNEYXRhID0gc3JjUm93czsKKyAg
ICAgICAgICAgIHNjYW5saW5lRGF0YS5zcmNSb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OworICAg
ICAgICAgICAgc2NhbmxpbmVEYXRhLmRlc3REYXRhID0gZGVzdFJvd3M7CisgICAgICAgICAgICBz
Y2FubGluZURhdGEuZGVzdFJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OworCisgICAgICAgICAg
ICBkaXNwYXRjaF9hcHBseV9mKGhlaWdodC51bnNhZmVHZXQoKSwgZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgJnNjYW5saW5lRGF0
YSwgcHJlbXVsdGl0cGx5U2NhbmxpbmUpOworI2Vsc2UKICAgICAgICAgICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOwogICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKICAg
ICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwpAQCAtNDExLDYgKzQ2MSw3
IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKFVpbnQ4Q2xhbXBlZEFycmF5KiYgc291
cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZHN0LCBrdkltYWdlTm9GbGFn
cyk7CisjZW5kaWYKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogI2VuZGlmCkBAIC00
MzMsNiArNDg0LDIwIEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKFVpbnQ4Q2xhbXBl
ZEFycmF5KiYgc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTCiAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKICAgICAgICAgICAgICAg
ICBpbnQgYmFzZXggPSB4ICogNDsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhh
ID0gc3JjUm93c1tiYXNleCArIDNdOworI2lmIFVTRV9BUkdCMzIKKyAgICAgICAgICAgICAgICAv
LyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdC
MzIKKyAgICAgICAgICAgICAgICBpZiAodW5tdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewor
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMF0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgM10gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07CisgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07CisgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOworICAgICAgICAgICAg
ICAgIH0KKyNlbHNlCiAgICAgICAgICAgICAgICAgaWYgKHVubXVsdGlwbGllZCAmJiBhbHBoYSAh
PSAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3Nb
YmFzZXhdICogYWxwaGEgKyAyNTQpIC8gMjU1OwogICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsK
QEAgLTQ0MCw2ICs1MDUsNyBAQCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShVaW50OENs
YW1wZWRBcnJheSomIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlUwogICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7CiAgICAgICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0
Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsg
YmFzZXgpWzBdOworI2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZXN0Um93cyAr
PSBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmgKaW5kZXggYTQxOTA2YmFiNjFlZmU2MDBkMjc0YWRlNjY0NmMxZmYzNjA2
OGNlMC4uODk2MGQwMGU0ZjBjMzA4MWZiM2FkODdhYWM0NmM0NDIyZmM0NjllZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRh
dGFDRy5oCkBAIC0zMSw3ICszMSw5IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCiAj
aWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQ0EpCisjaWYgIVBMQVRGT1JNKElPU19TSU1VTEFUT1Ip
CiAjZGVmaW5lIFdURl9VU0VfSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFIDEKKyNlbmRp
ZiAvLyAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKICNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCBf
X0lPU3VyZmFjZSAqSU9TdXJmYWNlUmVmOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUNHLmNwcAppbmRleCA2OWJhMmQ2MmJlMjUzODRhODMzYTlhOWYyNTIw
MWZhYTUwNTJhMzA3Li40OTVkNjYyZmQ0NGE1MjA0YTMyYjUwZDM2MjlkNGNlNmZhOGFmMTk3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcApA
QCAtMzIsNyArMzIsMTEgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKKyNpZiAhUExBVEZP
Uk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNl
cy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5k
aWYKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC03
MCw3ICs3NCwxMiBAQCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2U6OmltYWdlV2l0aENvbG9y
U3BhY2UoQ0dJbWFnZVJlZiBvcmlnaW5hbEltYWdlLCBDb2xvcgogc3RhdGljIHZvaWQgZHJhd1Bh
dHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICBD
R0ltYWdlUmVmIGltYWdlID0gKENHSW1hZ2VSZWYpaW5mbzsKLSAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMo
RmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQo
aW1hZ2UpKSksIGltYWdlKTsKKyAgICBDR0Zsb2F0IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQo
aW1hZ2UpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0
LCAxLCAtMSk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1oZWlnaHQp
OworI2VuZGlmCisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKEZsb2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0
V2lkdGgoaW1hZ2UpLCBoZWlnaHQpKSwgaW1hZ2UpOwogfQogCiBzdGF0aWMgdm9pZCBwYXR0ZXJu
UmVsZWFzZU9uTWFpblRocmVhZENhbGxiYWNrKHZvaWQqIGluZm8pCkBAIC0xMzgsNiArMTQ3LDEw
IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QKICAgICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFu
c2Zvcm1Db25jYXQobWF0cml4LCBDR0NvbnRleHRHZXRDVE0oY29udGV4dCkpOwogICAgICAgICAv
LyBUaGUgdG9wIG9mIGEgcGFydGlhbGx5LWRlY29kZWQgaW1hZ2UgaXMgZHJhd24gYXQgdGhlIGJv
dHRvbSBvZiB0aGUgdGlsZS4gTWFwIGl0IHRvIHRoZSB0b3AuCiAgICAgICAgIG1hdHJpeCA9IENH
QWZmaW5lVHJhbnNmb3JtVHJhbnNsYXRlKG1hdHJpeCwgMCwgc2l6ZSgpLmhlaWdodCgpIC0gaCk7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybVNj
YWxlKG1hdHJpeCwgMSwgLTEpOworICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybVRy
YW5zbGF0ZShtYXRyaXgsIDAsIC1oKTsKKyNlbmRpZgogICAgICAgICBDR0ltYWdlUmVmIHBsYXRm
b3JtSW1hZ2UgPSBDR0ltYWdlUmV0YWluKHN1YkltYWdlLmdldCgpKTsKICAgICAgICAgUmV0YWlu
UHRyPENHUGF0dGVyblJlZj4gcGF0dGVybiA9IGFkb3B0Q0YoQ0dQYXR0ZXJuQ3JlYXRlKHBsYXRm
b3JtSW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVp
Z2h0KCkpLCBtYXRyaXgsCiAgICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgpICsgc3BhY2VTaXpl
KCkud2lkdGgoKSAqICgxIC8gbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3Jt
LmEoKSkpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VTb3VyY2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZVNvdXJjZUNHLmNwcAppbmRleCBiZjY5MjgyYzdhMjVjMzYyMWE3ZjNmMGY0NThhZDAyZWYx
NzRiZmY1Li5iZjQ1MzM2M2NmYjYzYjJlZDJhOWEyMWE5MzhmMTVjNWVjZDY5MDU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNH
LmNwcApAQCAtMzQsNyArMzQsMTUgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lmICFQTEFU
Rk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZp
Y2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ltYWdlUHJpdmF0ZS5oPgor
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxJbWFnZUlP
L0NHSW1hZ2VTb3VyY2VQcml2YXRlLmg+CisjaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Cisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDYsNiArNTQsMTAgQEAgY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTa2lw
TWV0YWRhdGEgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEKIC8vIHRoYXQgd29u
J3QgY29uZmxpY3Qgd2l0aCBJbWFnZUlPJ3MgdmVyc2lvbiB3aGVuIGl0IGlzIGF2YWlsYWJsZS4K
IGNvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlHSUZVbmNsYW1wZWREZWxh
eVRpbWUgPSBDRlNUUigiVW5jbGFtcGVkRGVsYXlUaW1lIik7CiAKKyNpZiBQTEFURk9STShJT1Mp
Citib29sIEltYWdlU291cmNlOjpzX2FjY2VsZXJhdGVkSW1hZ2VEZWNvZGluZzsKKyNlbmRpZgor
CiAjaWYgIVBMQVRGT1JNKE1BQykKIHNpemVfdCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRp
b24odm9pZCogaW5mbywgdm9pZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50
KQogewpAQCAtNjksNiArODEsMTAgQEAgdm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQqIGlu
Zm8pCiAKIEltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24s
IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKICAgICA6IG1fZGVjb2Rl
cigwKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1fYmFzZVN1YnNhbXBsaW5nKDApCisgICAg
LCBtX2lzUHJvZ3Jlc3NpdmUoZmFsc2UpCisjZW5kaWYKIHsKICAgICAvLyBGSVhNRTogQWxwaGFP
cHRpb24gYW5kIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGFyZSBpZ25vcmVkLgogfQpAQCAt
OTQsMTMgKzExMCwxNCBAQCB2b2lkIEltYWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGxG
cmFtZXMsIHNpemVfdCwgU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sCiAgICAgICAgIHNldERhdGEo
ZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKIH0KIAotc3RhdGljIENGRGljdGlvbmFyeVJlZiBpbWFn
ZVNvdXJjZU9wdGlvbnMoSW1hZ2VTb3VyY2U6OlNob3VsZFNraXBNZXRhZGF0YSBza2lwTWV0YWRh
dGEpCisjaWYgIVBMQVRGT1JNKElPUykKK3N0YXRpYyBDRkRpY3Rpb25hcnlSZWYgaW1hZ2VTb3Vy
Y2VPcHRpb25zKEltYWdlU291cmNlOjpTaG91bGRTa2lwTWV0YWRhdGEgc2tpcE1ldGFEYXRhKQog
ewogICAgIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgb3B0aW9uczsKIAogICAgIGlmICghb3B0aW9u
cykgewogICAgICAgICBjb25zdCB1bnNpZ25lZCBudW1PcHRpb25zID0gMzsKLSAgICAgICAgY29u
c3QgQ0ZCb29sZWFuUmVmIGltYWdlU291cmNlU2tpcE1ldGFkYXRhID0gKHNraXBNZXRhZGF0YSA9
PSBJbWFnZVNvdXJjZTo6U2tpcE1ldGFkYXRhKSA/IGtDRkJvb2xlYW5UcnVlIDoga0NGQm9vbGVh
bkZhbHNlOworICAgICAgICBjb25zdCBDRkJvb2xlYW5SZWYgaW1hZ2VTb3VyY2VTa2lwTWV0YWRh
dGEgPSAoc2tpcE1ldGFEYXRhID09IEltYWdlU291cmNlOjpTa2lwTWV0YWRhdGEpID8ga0NGQm9v
bGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2U7CiAgICAgICAgIGNvbnN0IHZvaWQqIGtleXNbbnVt
T3B0aW9uc10gPSB7IGtDR0ltYWdlU291cmNlU2hvdWxkQ2FjaGUsIGtDR0ltYWdlU291cmNlU2hv
dWxkUHJlZmVyUkdCMzIsIGtDR0ltYWdlU291cmNlU2tpcE1ldGFkYXRhIH07CiAgICAgICAgIGNv
bnN0IHZvaWQqIHZhbHVlc1tudW1PcHRpb25zXSA9IHsga0NGQm9vbGVhblRydWUsIGtDRkJvb2xl
YW5UcnVlLCBpbWFnZVNvdXJjZVNraXBNZXRhZGF0YSB9OwogICAgICAgICBvcHRpb25zID0gQ0ZE
aWN0aW9uYXJ5Q3JlYXRlKE5VTEwsIGtleXMsIHZhbHVlcywgbnVtT3B0aW9ucywgCkBAIC0xMDgs
NiArMTI1LDI1IEBAIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgaW1hZ2VTb3VyY2VPcHRpb25zKElt
YWdlU291cmNlOjpTaG91bGRTa2lwTWV0YWRhdGEgc2tpcE1lCiAgICAgfQogICAgIHJldHVybiBv
cHRpb25zOwogfQorI2Vsc2UKK0NGRGljdGlvbmFyeVJlZiBJbWFnZVNvdXJjZTo6aW1hZ2VTb3Vy
Y2VPcHRpb25zKFNob3VsZFNraXBNZXRhZGF0YSBza2lwTWV0YURhdGEsIGludCByZXF1ZXN0ZWRT
dWJzYW1wbGluZykgY29uc3QKK3sKKyAgICBzdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnNb
NF0gPSB7bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cn07CisgICAgaW50IHN1YnNh
bXBsaW5nID0gc3RkOjptaW4oMywgbV9pc1Byb2dyZXNzaXZlIHx8IHJlcXVlc3RlZFN1YnNhbXBs
aW5nIDwgMCA/IDAgOiAocmVxdWVzdGVkU3Vic2FtcGxpbmcgKyBtX2Jhc2VTdWJzYW1wbGluZykp
OworCisgICAgaWYgKCFvcHRpb25zW3N1YnNhbXBsaW5nXSkgeworICAgICAgICBpbnQgc3Vic2Ft
cGxlSW50ID0gMSA8PCBzdWJzYW1wbGluZzsgLy8gWzAuLjNdID0+IFsxLCAyLCA0LCA4XQorICAg
ICAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHN1YnNhbXBsZU51bWJlciA9IGFkb3B0Q0YoQ0ZO
dW1iZXJDcmVhdGUobnVsbHB0ciwgIGtDRk51bWJlckludFR5cGUsICAmc3Vic2FtcGxlSW50KSk7
CisgICAgICAgIGNvbnN0IENGSW5kZXggbnVtT3B0aW9ucyA9IDU7CisgICAgICAgIGNvbnN0IENG
Qm9vbGVhblJlZiBpbWFnZVNvdXJjZVNraXBNZXRhRGF0YSA9IChza2lwTWV0YURhdGEgPT0gSW1h
Z2VTb3VyY2U6OlNraXBNZXRhZGF0YSkgPyBrQ0ZCb29sZWFuVHJ1ZSA6IGtDRkJvb2xlYW5GYWxz
ZTsKKyAgICAgICAgY29uc3QgQ0ZCb29sZWFuUmVmIGFjY2VsZXJhdGVkSW1hZ2VEZWNvZGluZyA9
IEltYWdlU291cmNlOjpzX2FjY2VsZXJhdGVkSW1hZ2VEZWNvZGluZyA/IGtDRkJvb2xlYW5UcnVl
IDoga0NGQm9vbGVhbkZhbHNlOworICAgICAgICBjb25zdCB2b2lkKiBrZXlzW251bU9wdGlvbnNd
ID0geyBrQ0dJbWFnZVNvdXJjZVNob3VsZENhY2hlLCBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZl
clJHQjMyLCBrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZhY3Rvciwga0NHSW1hZ2VTb3VyY2VTa2lw
TWV0YWRhdGEsIGtDR0ltYWdlU291cmNlVXNlSGFyZHdhcmVBY2NlbGVyYXRpb24gfTsKKyAgICAg
ICAgY29uc3Qgdm9pZCogdmFsdWVzW251bU9wdGlvbnNdID0geyBrQ0ZCb29sZWFuVHJ1ZSwga0NG
Qm9vbGVhblRydWUsIHN1YnNhbXBsZU51bWJlci5nZXQoKSwgaW1hZ2VTb3VyY2VTa2lwTWV0YURh
dGEsIGFjY2VsZXJhdGVkSW1hZ2VEZWNvZGluZyB9OworICAgICAgICBvcHRpb25zW3N1YnNhbXBs
aW5nXSA9IENGRGljdGlvbmFyeUNyZWF0ZShudWxscHRyLCBrZXlzLCB2YWx1ZXMsIG51bU9wdGlv
bnMsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFs
dWVDYWxsQmFja3MpOworICAgIH0KKyAgICByZXR1cm4gb3B0aW9uc1tzdWJzYW1wbGluZ107Cit9
CisjZW5kaWYKIAogYm9vbCBJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAogewpAQCAt
MTk3LDYgKzIzMywzOCBAQCBJbnRTaXplIEltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNp
emVfdCBpbmRleCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uCiAgICAgaWYgKG51bSkKICAg
ICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZoKTsKIAorI2lm
IFBMQVRGT1JNKElPUykKKyAgICBpZiAoIW1faXNQcm9ncmVzc2l2ZSkgeworICAgICAgICBDRkRp
Y3Rpb25hcnlSZWYgamZpZlByb3BlcnRpZXMgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+
KENGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlK
RklGRGljdGlvbmFyeSkpOworICAgICAgICBpZiAoamZpZlByb3BlcnRpZXMpIHsKKyAgICAgICAg
ICAgIENGQm9vbGVhblJlZiBpc1Byb2dDRkJvb2wgPSBzdGF0aWNfY2FzdDxDRkJvb2xlYW5SZWY+
KENGRGljdGlvbmFyeUdldFZhbHVlKGpmaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5SkZJ
RklzUHJvZ3Jlc3NpdmUpKTsKKyAgICAgICAgICAgIGlmIChpc1Byb2dDRkJvb2wpCisgICAgICAg
ICAgICAgICAgbV9pc1Byb2dyZXNzaXZlID0gQ0ZCb29sZWFuR2V0VmFsdWUoaXNQcm9nQ0ZCb29s
KTsKKyAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS81MTg0NjU1
PiAtIEhhbmcgcmVuZGVyaW5nIHZlcnkgbGFyZ2UgcHJvZ3Jlc3NpdmUgSlBFRy4gRGVjb2Rpbmcg
cHJvZ3Jlc3NpdmUKKyAgICAgICAgICAgIC8vIGltYWdlcyBoYW5ncyBmb3IgYSB2ZXJ5IGxvbmcg
dGltZSByaWdodCBub3cuIFVudGlsIHRoaXMgaXMgZml4ZWQsIGRvbid0IHN1Yi1zYW1wbGUgcHJv
Z3Jlc3NpdmUgaW1hZ2VzLiBUaGlzCisgICAgICAgICAgICAvLyB3aWxsIGNhdXNlIHRoZW0gdG8g
ZmFpbCBvdXIgbGFyZ2UgaW1hZ2UgY2hlY2sgYW5kIHRoZXkgd29uJ3QgYmUgZGVjb2RlZC4KKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSB1bmRlcmx5aW5nIGlzc3VlIGlzIGZpeGVk
ICg8cmRhcjovL3Byb2JsZW0vNTE5MTQxOD4pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
KG1fYmFzZVN1YnNhbXBsaW5nID09IDApICYmICFtX2lzUHJvZ3Jlc3NpdmUpIHsKKyAgICAgICAg
SW50U2l6ZSBzdWJzYW1wbGVkU2l6ZSh3LCBoKTsKKyAgICAgICAgY29uc3QgaW50IGNNYXhpbXVt
SW1hZ2VTaXplQmVmb3JlU3Vic2FtcGxpbmcgPSA1ICogMTAyNCAqIDEwMjQ7CisgICAgICAgIHdo
aWxlICgobV9iYXNlU3Vic2FtcGxpbmcgPCAzKSAmJiBzdWJzYW1wbGVkU2l6ZS53aWR0aCgpICog
c3Vic2FtcGxlZFNpemUuaGVpZ2h0KCkgPiBjTWF4aW11bUltYWdlU2l6ZUJlZm9yZVN1YnNhbXBs
aW5nKSB7CisgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBzaXplLCBidXQgdGhlIGFjdHVhbCBp
bWFnZSBpcyB2ZXJ5IGxhcmdlIGFuZCBzaG91bGQgYmUgc3ViLXNhbXBsZWQuCisgICAgICAgICAg
ICAvLyBJbmNyZWFzZSB0aGUgYmFzZSBzdWJzYW1wbGluZyBhbmQgYXNrIGZvciB0aGUgc2l6ZSBh
Z2Fpbi4gSWYgdGhlIGltYWdlIGNhbiBiZSBzdWJzYW1wbGVkLCB0aGUgc2l6ZSB3aWxsIGJlCisg
ICAgICAgICAgICAvLyBncmVhdGx5IHJlZHVjZWQuIDR4IHN1Yi1zYW1wbGluZyB3aWxsIG1ha2Ug
dXMgc3VwcG9ydCB1cCB0byAzMjBNUCAoNU1QICogNF4zKSBpbWFnZXMsIHdoaWNoIHNob3VsZCBi
ZSBwbGVudHkuCisgICAgICAgICAgICAvLyBUaGVyZSdzIG5vIGNhbGxiYWNrIGZyb20gSW1hZ2VJ
TyB3aGVuIHRoZSBzaXplIGlzIGF2YWlsYWJsZSwgc28gd2UgZG8gdGhlIGNoZWNrIHdoZW4gd2Ug
aGFwcGVuCisgICAgICAgICAgICAvLyB0byBjaGVjayB0aGUgc2l6ZSBhbmQgaXRzIG5vbiAtIHpl
cm8uCisgICAgICAgICAgICAvLyBOb3RlOiBTb21lIGNsaWVudHMgb2YgdGhpcyBjbGFzcyBkb24n
dCBjYWxsIGlzU2l6ZUF2YWlsYWJsZSgpIHNvIHdlIGNhbid0IHJlbHkgb24gdGhhdC4KKyAgICAg
ICAgICAgICsrbV9iYXNlU3Vic2FtcGxpbmc7CisgICAgICAgICAgICBzdWJzYW1wbGVkU2l6ZSA9
IGZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uKCkpOworICAgICAgICB9CisgICAgICAgIHcgPSBzdWJzYW1wbGVkU2l6ZS53aWR0aCgpOwor
ICAgICAgICBoID0gc3Vic2FtcGxlZFNpemUuaGVpZ2h0KCk7CisgICAgfQorI2VuZGlmCisKICAg
ICBpZiAoKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdElt
YWdlT3JpZW50YXRpb24pICYmIG9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMocHJvcGVydGllcy5n
ZXQoKSkudXNlc1dpZHRoQXNIZWlnaHQoKSkKICAgICAgICAgcmV0dXJuIEludFNpemUoaCwgdyk7
CiAKQEAgLTIxMiw2ICsyODAsMzEgQEAgSW1hZ2VPcmllbnRhdGlvbiBJbWFnZVNvdXJjZTo6b3Jp
ZW50YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKICAgICByZXR1cm4gb3JpZW50YXRp
b25Gcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLmdldCgpKTsKIH0KIAorI2lmIFBMQVRGT1JNKElP
UykKK0ludFNpemUgSW1hZ2VTb3VyY2U6Om9yaWdpbmFsU2l6ZShSZXNwZWN0SW1hZ2VPcmllbnRh
dGlvbkVudW0gc2hvdWxkUmVzcGVjdE9yaWVudGF0aW9uKSBjb25zdAoreworICAgIGZyYW1lU2l6
ZUF0SW5kZXgoMCwgc2hvdWxkUmVzcGVjdE9yaWVudGF0aW9uKTsKKyAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3Bl
cnRpZXNBdEluZGV4KG1fZGVjb2RlciwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKFNraXBNZXRhZGF0
YSwgLTEpKSk7CisKKyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBJbnRTaXpl
KCk7CisKKyAgICBpbnQgd2lkdGggPSAwOworICAgIGludCBoZWlnaHQgPSAwOworICAgIENGTnVt
YmVyUmVmIG51bWJlciA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0
aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxXaWR0aCk7CisgICAgaWYgKG51bWJlcikK
KyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJlckludFR5cGUsICZ3aWR0
aCk7CisgICAgbnVtYmVyID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdl
dFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbEhlaWdodCkpOwor
ICAgIGlmIChudW1iZXIpCisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmaGVpZ2h0KTsKKworICAgIGlmICgoc2hvdWxkUmVzcGVjdE9yaWVudGF0aW9u
ID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSAmJiBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVz
KHByb3BlcnRpZXMuZ2V0KCkpLnVzZXNXaWR0aEFzSGVpZ2h0KCkpCisgICAgICAgIHJldHVybiBJ
bnRTaXplKGhlaWdodCwgd2lkdGgpOworCisgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdo
dCk7Cit9CisjZW5kaWYKKwogSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZShJbWFnZU9yaWVudGF0
aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZyYW1lU2l6
ZUF0SW5kZXgoMCwgZGVzY3JpcHRpb24pOwpAQCAtMjg2LDcgKzM3OSwzNiBAQCBDR0ltYWdlUmVm
IEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9hdCogc2Nh
bGUpCiAgICAgaWYgKCFpbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm4gMDsKIAorI2lmICFQ
TEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKHNjYWxlKTsKICAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgo
bV9kZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKFNraXBNZXRhZGF0YSkpKTsKKyNl
bHNlCisgICAgLy8gU3Vic2FtcGxpbmcgY2FuIGJlIDEsIDIgb3IgMywgd2hpY2ggbWVhbnMgcXVh
cnRlci0sIHNpeHRlZW50aC0gYW5kIHNpeHR5LWZvdXJ0aC1zaXplLCByZXNwZWN0aXZlbHkuCisg
ICAgLy8gQSB6ZXJvIG9yIG5lZ2F0aXZlIHZhbHVlIG1lYW5zIG5vIHN1YnNhbXBsaW5nLgorICAg
IGludCBzdWJzYW1wbGluZyA9IHNjYWxlID8gc3RhdGljX2Nhc3Q8aW50Pihsb2cyZigxLjBmIC8g
c3RkOjptYXgoMC4xZiwgc3RkOjptaW4oMS4wZiwgKnNjYWxlKSkpKSA6IC0xOworICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUltYWdl
QXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoU2tpcE1ldGFkYXRh
LCBzdWJzYW1wbGluZykpKTsKKworICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MzcxMTk4PiAtIENv
cmVHcmFwaGljcyBjaGFuZ2VkIHRoZSBkZWZhdWx0IGNhY2hpbmcgYmVoYXZpb3VyIGluIGlPUyA0
LjAgdG8ga0NHSW1hZ2VDYWNoaW5nVHJhbnNpZW50CisgICAgLy8gd2hpY2ggY2F1c2VkIGEgcGVy
Zm9ybWFuY2UgcmVncmVzc2lvbiBmb3IgdXMgc2luY2UgdGhlIGltYWdlcyBoYWQgdG8gYmUgcmVz
YW1wbGVkL3JlY3JlYXRlZCBldmVyeSB0aW1lIHdlIGNhbGxlZAorICAgIC8vIENHQ29udGV4dERy
YXdJbWFnZS4gV2Ugbm93IHRlbGwgQ0cgdG8gY2FjaGUgdGhlIGRyYXduIGltYWdlcy4gU2VlIGFs
c28gPHJkYXI6Ly9wcm9ibGVtLzE0MzY2NzU1PiAtCisgICAgLy8gQ29yZUdyYXBoaWNzIG5lZWRz
IHRvIHVuLWRlcHJlY2F0ZSBrQ0dJbWFnZUNhY2hpbmdUZW1wb3Jhcnkgc2luY2UgaXQncyBzdGls
bCBub3QgdGhlIGRlZmF1bHQuCisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVj
YXRlZC1kZWNsYXJhdGlvbnMiCisjZW5kaWYKKyAgICBDR0ltYWdlU2V0Q2FjaGluZ0ZsYWdzKGlt
YWdlLmdldCgpLCBrQ0dJbWFnZUNhY2hpbmdUZW1wb3JhcnkpOworI2lmIENPTVBJTEVSKENMQU5H
KQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisgICAgaWYgKHNjYWxlKSB7
CisgICAgICAgIGlmIChzdWJzYW1wbGluZyA+IDApCisgICAgICAgICAgICAqc2NhbGUgPSBzdGF0
aWNfY2FzdDxmbG9hdD4oQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSkgLyBzaXplKERvTm90
UmVzcGVjdEltYWdlT3JpZW50YXRpb24pLndpZHRoKCk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4oQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgp
KSkgPT0gc2l6ZShEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKS53aWR0aCgpKTsKKyAgICAg
ICAgICAgICpzY2FsZSA9IDE7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKICAgICBDRlN0cmluZ1JlZiBpbWFnZVVUSSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1f
ZGVjb2Rlcik7CiAgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHhibVVUSSA9IENGU1RSKCJw
dWJsaWMueGJpdG1hcC1pbWFnZSIpOwogICAgIGlmICghaW1hZ2VVVEkgfHwgIUNGRXF1YWwoaW1h
Z2VVVEksIHhibVVUSSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQppbmRleCA5NTNiY2I5ZDI4YWQwZWI3NWFiMzg4
MTNjMzQzOTQ1NWYxMjYyYzc2Li5lZGY5ZTQ5MGU2ZmZiZTU4MDYyZTA0Yjg3ZDZmZmQ2YjNmMzcy
YjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZVNvdXJjZUNHTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlU291cmNlQ0dNYWMubW0KQEAgLTI5LDYgKzI5LDIxIEBACiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JN
KElPUykKKyNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgorI2luY2x1ZGUgPE1vYmlsZUNvcmVTZXJ2
aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KKworU09GVF9MSU5LX0ZSQU1FV09SSyhNb2JpbGVD
b3JlU2VydmljZXMpCisKK1NPRlRfTElOSyhNb2JpbGVDb3JlU2VydmljZXMsIFVUVHlwZUNvcHlQ
cmVmZXJyZWRUYWdXaXRoQ2xhc3MsIENGU3RyaW5nUmVmLCAoQ0ZTdHJpbmdSZWYgaW5VVEksIENG
U3RyaW5nUmVmIGluVGFnQ2xhc3MpLCAoaW5VVEksIGluVGFnQ2xhc3MpKQorCitTT0ZUX0xJTktf
Q09OU1RBTlQoTW9iaWxlQ29yZVNlcnZpY2VzLCBrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9u
LCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtV
VFRhZ0NsYXNzTUlNRVR5cGUsIENGU3RyaW5nUmVmKQorCisjZGVmaW5lIGtVVFRhZ0NsYXNzRmls
ZW5hbWVFeHRlbnNpb24gZ2V0a1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbigpCisjZGVmaW5l
IGtVVFRhZ0NsYXNzTUlNRVR5cGUgZ2V0a1VUVGFnQ2xhc3NNSU1FVHlwZSgpCisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBTdHJpbmcgTUlNRVR5cGVGb3JJbWFnZVNvdXJjZVR5cGUo
Y29uc3QgU3RyaW5nJiB1dGkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbnRQb2ludENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ludFBvaW50Q0cuY3BwCmluZGV4IDcwOGZjYzJlMWRmZmRhOWM5NDMyNzZlNTBhYTQ0
ODAwZjlmZDJlYjguLmJkMDQ1NzRjN2Q2OWY1YWViMjI3ZDcwYjRmODg1YjU1NWIyMDJkNmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cu
Y3BwCkBAIC0yOCw3ICsyOCwxMSBAQAogCiAjaWYgVVNFKENHKQogCisjaWYgIVBMQVRGT1JNKElP
UykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4K
KyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW50UmVjdENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ludFJlY3RDRy5jcHAKaW5kZXggOGQxMDIwN2JmOWY4NzVhYTJkN2Y2ZTcwYWIz
YjdjZWI2M2Q5OTVkNC4uZDFmN2IyZTU3MDg4YTliZGI0YWI0NDhjODAzNjU5MWZlMTdmMjJiMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENH
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cu
Y3BwCkBAIC0yOCw3ICsyOCwxMSBAQAogCiAjaWYgVVNFKENHKQogCisjaWYgIVBMQVRGT1JNKElP
UykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4K
KyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ludFNpemVDRy5jcHAKaW5kZXggNDFmYjM5OWUzNTVjYTAxMzYzYzA2ZjdiNDEw
N2IyZDZmOWJmODRmMi4uZTVkMGI4MjRkZDZhY2E1YTZmMjM2MDYwYjRiYzY1ZDczMDljM2I4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNH
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXplQ0cu
Y3BwCkBAIC0yOCw3ICsyOCwxMSBAQAogCiAjaWYgVVNFKENHKQogCisjaWYgIVBMQVRGT1JNKElP
UykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4K
KyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAppbmRleCA1NmZkZDU5Nzc0OTE1
MDAxMDhmOTlkNGYxMTgwYzhhODdiZGJhNmI5Li4xMTNmYTk3OTc2NDc0Yjk5ODcxYjI2NjY5MDg5
YjgzNjYxMTNmNzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApAQCAtMjksNiArMjksMTMgQEAKIAogI2lm
IFVTRShDRykKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0Nv
bnRleHRQcml2YXRlLmg+CisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0R1N0YXRlLmg+
CisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW1wb3J0IDxJbWFnZUlP
L0ltYWdlSU8uaD4KKyNlbmRpZgorCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAppbmRleCBmZTlmNzg0
NDA1MzhiYWFiMmM1OTAxZjJlMWVjYjk4YWIzYzE0YWMyLi4zM2JkODkxN2I3MmRjM2E3MDE2NDc3
NDI4ZjdlM2Y0MWYyZjI1MGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXRoQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1BhdGhDRy5jcHAKQEAgLTM0LDcgKzM0LDEyIEBACiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBw
bGllci5oIgorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNl
cy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9D
R1BhdGhQcml2YXRlLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgor
I2VuZGlmCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAppbmRleCAwY2Q1MjllYWJl
OTFhNTg5Y2I4NWE2MzNkZjRmNzlhYTdlMjEzYTg2Li4wYzA4MDQ4Y2IyYmYyMmMxNzIyN2M2ZjM5
ODZmNWZlMmQwODM1MWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXR0ZXJuQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1BhdHRlcm5DRy5jcHAKQEAgLTI5LDcgKzI5LDEyIEBACiAKICNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworI2lmICFQTEFU
Rk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZp
Y2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNl
bmRpZgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKICNpZiBQTEFURk9STShNQUMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxh
dGZvcm1EYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KaW5kZXggYTkxNWQyN2NlMDg0ZjgwNmQ1ZGUwODYx
ZGFhZDFjOWU2NGU2N2QzMS4uN2I3NjMyYWQ0MTAwN2Y5NjIyOTUwMjc0Y2MwM2ZkYmQzZjBhODg0
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dFBsYXRmb3JtRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpAQCAtMjUsNyArMjUsMTMgQEAKICNp
bXBvcnQgIkZvbnRQbGF0Zm9ybURhdGEuaCIKIAogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVy
ZmFjZS5oIgorI2lmICFQTEFURk9STShJT1MpCiAjaW1wb3J0IDxBcHBLaXQvTlNGb250Lmg+Cisj
ZWxzZQorI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNpbXBvcnQgPENvcmVHcmFwaGlj
cy9DR0ZvbnRJbmZvLmg+CisjZW5kaWYKKwogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMzLDE0ICszOSwxNSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAvLyBUaGVzZSBDb3JlVGV4dCBUZXh0IFNwYWNpbmcgZmVhdHVyZSBzZWxlY3RvcnMg
YXJlIG5vdCBkZWZpbmVkIGluIENvcmVUZXh0LgogZW51bSBUZXh0U3BhY2luZ0NURmVhdHVyZVNl
bGVjdG9yIHsgVGV4dFNwYWNpbmdQcm9wb3J0aW9uYWwsIFRleHRTcGFjaW5nRnVsbFdpZHRoLCBU
ZXh0U3BhY2luZ0hhbGZXaWR0aCwgVGV4dFNwYWNpbmdUaGlyZFdpZHRoLCBUZXh0U3BhY2luZ1F1
YXJ0ZXJXaWR0aCB9OwogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYg
IVBMQVRGT1JNKElPUykKIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6bG9hZEZvbnQoTlNGb250KiBu
c0ZvbnQsIGZsb2F0LCBOU0ZvbnQqJiBvdXROU0ZvbnQsIENHRm9udFJlZiYgY2dGb250KQogewog
ICAgIG91dE5TRm9udCA9IG5zRm9udDsKICAgICBjZ0ZvbnQgPSBDVEZvbnRDb3B5R3JhcGhpY3NG
b250KHRvQ1RGb250UmVmKG5zRm9udCksIDApOwogfQotI2VuZGlmICAvLyBQTEFURk9STShNQUMp
CisjZW5kaWYgIC8vIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAorI2lmICFQTEFU
Rk9STShJT1MpCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKE5TRm9udCAqbnNG
b250LCBmbG9hdCBzaXplLCBib29sIGlzUHJpbnRlckZvbnQsIGJvb2wgc3ludGhldGljQm9sZCwg
Ym9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIEZvbnRX
aWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KQogICAgIDogbV9zeW50aGV0aWNCb2xkKHN5bnRoZXRp
Y0JvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoc3ludGhldGljT2JsaXF1ZSkKQEAgLTQ5
LDkgKzU2LDIyIEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoTlNGb250ICpu
c0ZvbnQsIGZsb2F0IHNpemUsIGJvb2wgaXNQcmludGVyRm9uCiAgICAgLCBtX3dpZHRoVmFyaWFu
dCh3aWR0aFZhcmlhbnQpCiAgICAgLCBtX2ZvbnQobnNGb250KQogICAgICwgbV9pc0NvbG9yQml0
bWFwRm9udChmYWxzZSkKKyNlbHNlCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRh
KENURm9udFJlZiBjdEZvbnQsIGZsb2F0IHNpemUsIGJvb2wgaXNQcmludGVyRm9udCwgYm9vbCBz
eW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQpCisgICAgOiBtX3N5bnRoZXRp
Y0JvbGQoc3ludGhldGljQm9sZCkKKyAgICAsIG1fc3ludGhldGljT2JsaXF1ZShzeW50aGV0aWNP
YmxpcXVlKQorICAgICwgbV9vcmllbnRhdGlvbihvcmllbnRhdGlvbikKKyAgICAsIG1faXNFbW9q
aShmYWxzZSkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV93aWR0aFZhcmlhbnQod2lkdGhW
YXJpYW50KQorICAgICwgbV9mb250KGN0Rm9udCkKKyAgICAsIG1fY2dGb250KGFkb3B0Q0YoQ1RG
b250Q29weUdyYXBoaWNzRm9udChjdEZvbnQsIE5VTEwpKSkKKyAgICAsIG1faXNDb2xvckJpdG1h
cEZvbnQoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoY3RGb250KSAmIGtDVEZvbnRUcmFpdENvbG9y
R2x5cGhzKQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAgICAgLCBtX2lzQ29tcG9zaXRlRm9u
dFJlZmVyZW5jZShmYWxzZSkKICAgICAsIG1faXNQcmludGVyRm9udChpc1ByaW50ZXJGb250KQog
eworI2lmICFQTEFURk9STShJT1MpCiAgICAgQVNTRVJUX0FSRyhuc0ZvbnQsIG5zRm9udCk7CiAK
ICAgICBDR0ZvbnRSZWYgY2dGb250ID0gMDsKQEAgLTY4LDE4ICs4OCwzNSBAQCBGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKE5TRm9udCAqbnNGb250LCBmbG9hdCBzaXplLCBib29s
IGlzUHJpbnRlckZvbgogICAgICAgICBDRlJldGFpbihtX2ZvbnQpOwogCiAgICAgbV9jZ0ZvbnQg
PSBhZG9wdENGKGNnRm9udCk7CisjZWxzZQorICAgIEFTU0VSVF9BUkcoY3RGb250LCBjdEZvbnQp
OworCisgICAgQ0ZSZXRhaW4oY3RGb250KTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogfQog
Ci1Gb250UGxhdGZvcm1EYXRhOjogfkZvbnRQbGF0Zm9ybURhdGEoKQorRm9udFBsYXRmb3JtRGF0
YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKG1f
Zm9udCAmJiBtX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxOU0ZvbnQgKj4oLTEpKQogICAgICAg
ICBDRlJlbGVhc2UobV9mb250KTsKKyNlbHNlCisgICAgaWYgKG1fZm9udCAmJiBtX2ZvbnQgIT0g
cmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSkKKyAgICAgICAgQ0ZSZWxlYXNlKG1fZm9u
dCk7CisjZW5kaWYKIH0KIAogdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGYpCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBt
X2ZvbnQgPSBmLm1fZm9udCAmJiBmLm1fZm9udCAhPSByZWludGVycHJldF9jYXN0PE5TRm9udCAq
PigtMSkgPyBjb25zdF9jYXN0PE5TRm9udCAqPihzdGF0aWNfY2FzdDxjb25zdCBOU0ZvbnQgKj4o
Q0ZSZXRhaW4oZi5tX2ZvbnQpKSkgOiBmLm1fZm9udDsKKyNlbHNlCisgICAgbV9mb250ID0gZi5t
X2ZvbnQgJiYgZi5tX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSA/IHN0
YXRpY19jYXN0PENURm9udFJlZj4oY29uc3RfY2FzdDx2b2lkICo+KENGUmV0YWluKGYubV9mb250
KSkpIDogZi5tX2ZvbnQ7CisjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2lzRW1v
amkgPSBmLm1faXNFbW9qaTsKKyNlbmRpZgogICAgIG1fY2dGb250ID0gZi5tX2NnRm9udDsKICAg
ICBtX0NURm9udCA9IGYubV9DVEZvbnQ7CiB9CkBAIC04NywxMiArMTI0LDI0IEBAIHZvaWQgRm9u
dFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBm
KQogY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRh
QXNzaWduKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGYpCiB7CiAgICAgbV9jZ0ZvbnQgPSBmLm1f
Y2dGb250OworI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2lzRW1vamkgPSBmLm1faXNFbW9qaTsK
KyNlbmRpZgorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKG1fZm9udCA9PSBmLm1fZm9udCkK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIGlmIChmLm1fZm9udCAmJiBmLm1fZm9udCAhPSBy
ZWludGVycHJldF9jYXN0PE5TRm9udCAqPigtMSkpCiAgICAgICAgIENGUmV0YWluKGYubV9mb250
KTsKICAgICBpZiAobV9mb250ICYmIG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PE5TRm9udCAq
PigtMSkpCiAgICAgICAgIENGUmVsZWFzZShtX2ZvbnQpOworI2Vsc2UKKyAgICBpZiAobV9mb250
ICYmIG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpICYmIGYubV9mb250
ICYmIGYubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Q1RGb250UmVmPigtMSkgJiYgQ0ZFcXVh
bChtX2ZvbnQsIGYubV9mb250KSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIGlmIChmLm1f
Zm9udCAmJiBmLm1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpKQorICAg
ICAgICBDRlJldGFpbihmLm1fZm9udCk7CisgICAgaWYgKG1fZm9udCAmJiBtX2ZvbnQgIT0gcmVp
bnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSkKKyAgICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7
CisjZW5kaWYKICAgICBtX2ZvbnQgPSBmLm1fZm9udDsKICAgICBtX0NURm9udCA9IGYubV9DVEZv
bnQ7CiAgICAgcmV0dXJuICp0aGlzOwpAQCAtMTAwLDExICsxNDksMjkgQEAgY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhQXNzaWduKGNvbnN0IEZv
bnRQbGF0Zm9ybUQKIAogYm9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZm9udCB8fCBv
dGhlci5tX2ZvbnQpCi0gICAgICAgIHJldHVybiBtX2ZvbnQgPT0gb3RoZXIubV9mb250OworICAg
IGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgaWYgKG1fZm9udCB8fCBvdGhlci5tX2ZvbnQpIHsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHJlc3VsdCA9IG1fZm9udCAmJiBtX2ZvbnQgIT0g
cmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSAmJiBvdGhlci5tX2ZvbnQgJiYgb3RoZXIu
bV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Q1RGb250UmVmPigtMSkgJiYgQ0ZFcXVhbChtX2Zv
bnQsIG90aGVyLm1fZm9udCk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBpZiAocmVz
dWx0KQorICAgICAgICAgICAgQVNTRVJUKG1faXNFbW9qaSA9PSBvdGhlci5tX2lzRW1vamkpOwor
I2VuZGlmCisjZWxzZQorICAgICAgICByZXN1bHQgPSBtX2ZvbnQgPT0gb3RoZXIubV9mb250Owor
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisj
aWYgUExBVEZPUk0oSU9TKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBpZiAobV9jZ0ZvbnQg
PT0gb3RoZXIubV9jZ0ZvbnQpCisgICAgICAgIEFTU0VSVChtX2lzRW1vamkgPT0gb3RoZXIubV9p
c0Vtb2ppKTsKKyNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKICAgICByZXR1cm4gbV9j
Z0ZvbnQgPT0gb3RoZXIubV9jZ0ZvbnQ7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogdm9pZCBG
b250UGxhdGZvcm1EYXRhOjpzZXRGb250KE5TRm9udCAqZm9udCkKIHsKICAgICBBU1NFUlRfQVJH
KGZvbnQsIGZvbnQpOwpAQCAtMTMzLDE1ICsyMDAsNDMgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRh
OjpzZXRGb250KE5TRm9udCAqZm9udCkKICAgICB9CiAgICAgbV9DVEZvbnQgPSAwOwogfQorI2Vs
c2UKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0Rm9udChDVEZvbnRSZWYgZm9udCkKK3sKKyAg
ICBBU1NFUlRfQVJHKGZvbnQsIGZvbnQpOworICAgIEFTU0VSVChtX2ZvbnQgIT0gcmVpbnRlcnBy
ZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSk7CiAKKyAgICBpZiAobV9mb250ID09IGZvbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIENGUmV0YWluKGZvbnQpOworICAgIGlmIChtX2ZvbnQpCisgICAg
ICAgIENGUmVsZWFzZShtX2ZvbnQpOworICAgIG1fZm9udCA9IGZvbnQ7CisgICAgbV9zaXplID0g
Q1RGb250R2V0U2l6ZShmb250KTsKKyAgICBtX2NnRm9udCA9IGFkb3B0Q0YoQ1RGb250Q29weUdy
YXBoaWNzRm9udChmb250LCBudWxscHRyKSk7CisgICAgbV9pc0NvbG9yQml0bWFwRm9udCA9IENU
Rm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpICYga0NURm9udFRyYWl0Q29sb3JHbHlwaHM7Cit9
CisjZW5kaWYKKworI2lmICFQTEFURk9STShJT1MpCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnJv
dW5kc0dseXBoQWR2YW5jZXMoKSBjb25zdAogewogICAgIHJldHVybiBbbV9mb250IHJlbmRlcmlu
Z01vZGVdID09IE5TRm9udEFudGlhbGlhc2VkSW50ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01v
ZGU7CiB9CisjZW5kaWYKIAogYm9vbCBGb250UGxhdGZvcm1EYXRhOjphbGxvd3NMaWdhdHVyZXMo
KSBjb25zdAogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgcmV0dXJuICFbW21fZm9udCBjb3Zl
cmVkQ2hhcmFjdGVyU2V0XSBjaGFyYWN0ZXJJc01lbWJlcjonYSddOworI2Vsc2UKKyAgICBpZiAo
IW1fZm9udCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmV0YWluUHRyPENGQ2hhcmFj
dGVyU2V0UmVmPiBjaGFyYWN0ZXJTZXQgPSBhZG9wdENGKENURm9udENvcHlDaGFyYWN0ZXJTZXQo
Y3RGb250KCkpKTsKKyAgICByZXR1cm4gIShjaGFyYWN0ZXJTZXQuZ2V0KCkgJiYgQ0ZDaGFyYWN0
ZXJTZXRJc0NoYXJhY3Rlck1lbWJlcihjaGFyYWN0ZXJTZXQuZ2V0KCksICdhJykpOworI2VuZGlm
CiB9CiAKIGlubGluZSBpbnQgbWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3Io
Rm9udFdpZHRoVmFyaWFudCB2YXJpYW50KQpAQCAtMjE3LDYgKzMxMiw3IEBAIENURm9udFJlZiBG
b250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBjb25zdAogICAgIGlmIChtX0NURm9udCkKICAgICAg
ICAgcmV0dXJuIG1fQ1RGb250LmdldCgpOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBtX0NU
Rm9udCA9IHRvQ1RGb250UmVmKG1fZm9udCk7CiAgICAgaWYgKG1fQ1RGb250KSB7CiAgICAgICAg
IENURm9udERlc2NyaXB0b3JSZWYgZm9udERlc2NyaXB0b3I7CkBAIC0yMjksNiArMzI1LDE3IEBA
IENURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBjb25zdAogICAgICAgICBtX0NU
Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG1fQ1RGb250Lmdl
dCgpLCBtX3NpemUsIDAsIGZvbnREZXNjcmlwdG9yKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1f
Q1RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoR3JhcGhpY3NGb250KG1fY2dGb250Lmdl
dCgpLCBtX3NpemUsIDAsIGNhc2NhZGVUb0xhc3RSZXNvcnRGb250RGVzY3JpcHRvcigpKSk7Cisj
ZWxzZQorICAgIC8vIEFwcGxlIENvbG9yIEVtb2ppIHNpemUgaXMgYWRqdXN0ZWQgKGFuZCB0aGVu
IHJlLWFkanVzdGVkIGJ5IENvcmUgVGV4dCkgYW5kIGNhcHBlZC4KKyAgICBDR0Zsb2F0IHNpemUg
PSAhbV9pc0Vtb2ppID8gbV9zaXplIDogbV9zaXplIDw9IDE1ID8gNCAqIChtX3NpemUgKyAyKSAv
IHN0YXRpY19jYXN0PENHRmxvYXQ+KDUpIDogMTY7CisgICAgQ1RGb250RGVzY3JpcHRvclJlZiBm
b250RGVzY3JpcHRvcjsKKyAgICBjb25zdCBjaGFyKiBwb3N0U2NyaXB0TmFtZSA9IENHRm9udEdl
dFBvc3RTY3JpcHROYW1lKG1fY2dGb250LmdldCgpKTsKKyAgICBpZiAocG9zdFNjcmlwdE5hbWUg
JiYgKCFzdHJjbXAocG9zdFNjcmlwdE5hbWUsICJIb2VmbGVyVGV4dC1JdGFsaWMiKSB8fCAhc3Ry
Y21wKHBvc3RTY3JpcHROYW1lLCAiSG9lZmxlclRleHQtQmxhY2tJdGFsaWMiKSkpCisgICAgICAg
IGZvbnREZXNjcmlwdG9yID0gY2FzY2FkZVRvTGFzdFJlc29ydEFuZERpc2FibGVTd2FzaGVzRm9u
dERlc2NyaXB0b3IoKTsKKyAgICBlbHNlCisgICAgICAgIGZvbnREZXNjcmlwdG9yID0gY2FzY2Fk
ZVRvTGFzdFJlc29ydEZvbnREZXNjcmlwdG9yKCk7CisgICAgbV9DVEZvbnQgPSBhZG9wdENGKENU
Rm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQobV9jZ0ZvbnQuZ2V0KCksIHNpemUsIDAsIGZvbnRE
ZXNjcmlwdG9yKSk7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogICAgIGlmIChtX3dpZHRo
VmFyaWFudCAhPSBSZWd1bGFyV2lkdGgpIHsKICAgICAgICAgaW50IGZlYXR1cmVUeXBlVmFsdWUg
PSBrVGV4dFNwYWNpbmdUeXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTgwNDNjYWFlY2M4MDU1YjQ4YmMwMmZlMDM1Y2JmNjlmMjE5YWVjMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNwbGF5UmVm
cmVzaE1vbml0b3JJT1MubW0KQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCisKKyNp
bmNsdWRlICJEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCIKKworI2luY2x1ZGUgPFF1YXJ0ekNvcmUv
UXVhcnR6Q29yZS5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWQuaCIKKworQGludGVyZmFj
ZSBXZWJEaXNwbGF5TGlua0hhbmRsZXIgOiBOU09iamVjdAoreworICAgIFdlYkNvcmU6OkRpc3Bs
YXlSZWZyZXNoTW9uaXRvciogbV9tb25pdG9yOworICAgIENBRGlzcGxheUxpbmsqIG1fZGlzcGxh
eUxpbms7Cit9CisKKy0gKGlkKWluaXRXaXRoTW9uaXRvcjooV2ViQ29yZTo6RGlzcGxheVJlZnJl
c2hNb25pdG9yKiltb25pdG9yOworLSAodm9pZCloYW5kbGVEaXNwbGF5TGluazooQ0FEaXNwbGF5
TGluayAqKXNlbmRlcjsKKy0gKHZvaWQpaW52YWxpZGF0ZTsKKworQGVuZAorCitzdGF0aWMgZG91
YmxlIG1lZGlhVGltZVRvQ3VycmVudFRpbWUoQ0ZUaW1lSW50ZXJ2YWwgdCkKK3sKKyAgICByZXR1
cm4gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKyB0IC0gQ0FDdXJyZW50TWVkaWFUaW1l
KCk7Cit9CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJEaXNwbGF5TGlua0hhbmRsZXIKKworLSAoaWQp
aW5pdFdpdGhNb25pdG9yOihXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3IqKW1vbml0b3IK
K3sKKyAgICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgICAgICBtX21vbml0b3IgPSBt
b25pdG9yOworICAgICAgICAvLyBOb3RlIHRoYXQgQ0FEaXNwbGF5TGluayByZXRhaW5zIGl0cyB0
YXJnZXQgKHNlbGYpLCBzbyBhIGNhbGwgdG8gLWludmFsaWRhdGUgaXMgbmVlZGVkIG9uIHRlYXJk
b3duLgorICAgICAgICBtX2Rpc3BsYXlMaW5rID0gW0NBRGlzcGxheUxpbmsgZGlzcGxheUxpbmtX
aXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGhhbmRsZURpc3BsYXlMaW5rOildOwor
ICAgICAgICBbbV9kaXNwbGF5TGluayBhZGRUb1J1bkxvb3A6V2ViVGhyZWFkTlNSdW5Mb29wKCkg
Zm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07CisgICAgfQorICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBBU1NFUlQoIW1fZGlzcGxheUxpbmspOyAvLyAt
aW52YWxpZGF0ZSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5LgorICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworLSAodm9pZCloYW5kbGVEaXNwbGF5TGluazooQ0FEaXNwbGF5TGluayAq
KXNlbmRlcgoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAgbV9tb25p
dG9yLT5kaXNwbGF5TGlua0ZpcmVkKHNlbmRlci50aW1lc3RhbXApOworfQorCistICh2b2lkKWlu
dmFsaWRhdGUKK3sKKyAgICBbbV9kaXNwbGF5TGluayBpbnZhbGlkYXRlXTsKKyAgICBtX2Rpc3Bs
YXlMaW5rID0gbnVsbHB0cjsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgCitE
aXNwbGF5UmVmcmVzaE1vbml0b3I6On5EaXNwbGF5UmVmcmVzaE1vbml0b3IoKQoreworICAgIFso
V2ViRGlzcGxheUxpbmtIYW5kbGVyKikgbV9kaXNwbGF5TGluayBpbnZhbGlkYXRlXTsKKyAgICBb
KFdlYkRpc3BsYXlMaW5rSGFuZGxlciopIG1fZGlzcGxheUxpbmsgcmVsZWFzZV07Cit9CisKK2Jv
b2wgRGlzcGxheVJlZnJlc2hNb25pdG9yOjpyZXF1ZXN0UmVmcmVzaENhbGxiYWNrKCkKK3sKKyAg
ICBpZiAoIW1fYWN0aXZlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGlm
ICghbV9kaXNwbGF5TGluaykgeworICAgICAgICBtX2Rpc3BsYXlMaW5rID0gW1tXZWJEaXNwbGF5
TGlua0hhbmRsZXIgYWxsb2NdIGluaXRXaXRoTW9uaXRvcjp0aGlzXTsKKyAgICAgICAgbV9hY3Rp
dmUgPSB0cnVlOworICAgIH0KKworICAgIG1fc2NoZWR1bGVkID0gdHJ1ZTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBEaXNwbGF5UmVmcmVzaE1vbml0b3I6OmRpc3BsYXlMaW5rRmlyZWQo
ZG91YmxlIG5vd1NlY29uZHMpCit7CisgICAgaWYgKCFtX3ByZXZpb3VzRnJhbWVEb25lKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3ByZXZpb3VzRnJhbWVEb25lID0gZmFsc2U7CisgICAgbV9t
b25vdG9uaWNBbmltYXRpb25TdGFydFRpbWUgPSBtZWRpYVRpbWVUb0N1cnJlbnRUaW1lKG5vd1Nl
Y29uZHMpOworCisgICAgaGFuZGxlRGlzcGxheVJlZnJlc2hlZE5vdGlmaWNhdGlvbk9uTWFpblRo
cmVhZCh0aGlzKTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FX0RJU1BMQVlfTU9OSVRPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlYzJmNWI1YWZjMmQzYTNm
ZWY5MDNkZjU2OTU5MDZhNDcwMGVkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCkBAIC0wLDAgKzEsNjYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkZvbnRD
YWNoZS5oIgorCisjaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJSZW5kZXJUaGVtZUlPUy5oIgor
I2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NHRm9udFVuaWNvZGVTdXBwb3J0Lmg+CisjaW1wb3J0IDxD
b3JlVGV4dC9DVEZvbnREZXNjcmlwdG9yUHJpdi5oPgorI2ltcG9ydCA8Q29yZVRleHQvQ1RGb250
UHJpdi5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCit7CisgICAgd2tTZXRVcEZv
bnRDYWNoZSgpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGb250V2VpZ2h0Qm9sZChOU0lu
dGVnZXIgZm9udFdlaWdodCkKK3sKKyAgICByZXR1cm4gZm9udFdlaWdodCA+PSBGb250V2VpZ2h0
NjAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgcmVxdWlyZXNDdXN0b21GYWxsYmFja0ZvbnQo
Y29uc3QgVUludDMyIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyID09IEFwcGxl
TG9nbyB8fCBjaGFyYWN0ZXIgPT0gYmxhY2tDaXJjbGU7Cit9CisKK3N0YXRpYyBDRkNoYXJhY3Rl
clNldFJlZiBjb3B5Rm9udENoYXJhY3RlclNldChDRlN0cmluZ1JlZiBmb250TmFtZSkKK3sKKyAg
ICAvLyBUaGUgc2l6ZSwgMTAsIGlzIGFyYml0cmFyeS4KKyAgICBSZXRhaW5QdHI8Q1RGb250RGVz
Y3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVh
dGVXaXRoTmFtZUFuZFNpemUoZm9udE5hbWUsIDEwKSk7CisgICAgUmV0YWluUHRyPENURm9udFJl
Zj4gZm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKGZvbnREZXNj
cmlwdG9yLmdldCgpLCAxMCwgbnVsbHB0cikpOworICAgIHJldHVybiAoQ0ZDaGFyYWN0ZXJTZXRS
ZWYpQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udERlc2NyaXB0b3IuZ2V0KCksIGtD
VEZvbnRDaGFyYWN0ZXJTZXRBdHRyaWJ1dGUpOworfQorCitzdGF0aWMgQ0ZDaGFyYWN0ZXJTZXRS
ZWYgYXBwbGVDb2xvckVtb2ppQ2hhcmFjdGVyU2V0KCkKK3sKKyAgICBzdGF0aWMgQ0ZDaGFyYWN0
ZXJTZXRSZWYgY2hhcmFjdGVyU2V0ID0gY29weUZvbnRDaGFyYWN0ZXJTZXQoQ0ZTVFIoIkFwcGxl
Q29sb3JFbW9qaSIpKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyU2V0OworfQorCitzdGF0aWMgQ0ZD
aGFyYWN0ZXJTZXRSZWYgcGhvbmVGYWxsYmFja0NoYXJhY3RlclNldCgpCit7CisgICAgc3RhdGlj
IENGQ2hhcmFjdGVyU2V0UmVmIGNoYXJhY3RlclNldCA9IGNvcHlGb250Q2hhcmFjdGVyU2V0KENG
U1RSKCIuUGhvbmVGYWxsYmFjayIpKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyU2V0OworfQorCitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFN5c3RlbUZvbnRGYWxsYmFj
a0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKQoreworICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0
YSA9IG9yaWdpbmFsRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpOworICAgIENURm9udFJlZiBjdEZv
bnQgPSBwbGF0Zm9ybURhdGEuZm9udCgpOworCisgICAgQ0ZJbmRleCBjb3ZlcmVkTGVuZ3RoID0g
MDsKKyAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBzdWJzdGl0dXRlRm9udCA9IGFkb3B0Q0YoQ1RG
b250Q3JlYXRlUGh5c2ljYWxGb250Rm9yQ2hhcmFjdGVyc1dpdGhMYW5ndWFnZShjdEZvbnQsIChj
b25zdCBVVEYxNkNoYXIqKWNoYXJhY3RlcnMsIChDRkluZGV4KWxlbmd0aCwgMCwgJmNvdmVyZWRM
ZW5ndGgpKTsKKyAgICBpZiAoIXN1YnN0aXR1dGVGb250KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIENURm9udFN5bWJvbGljVHJhaXRzIG9yaWdpbmFsVHJhaXRzID0gQ1RGb250R2V0U3ltYm9s
aWNUcmFpdHMoY3RGb250KTsKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBhY3R1YWxUcmFpdHMg
PSAwOworICAgIGlmIChpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSB8fCBk
ZXNjcmlwdGlvbi5pdGFsaWMoKSkKKyAgICAgICAgYWN0dWFsVHJhaXRzID0gQ1RGb250R2V0U3lt
Ym9saWNUcmFpdHMoc3Vic3RpdHV0ZUZvbnQuZ2V0KCkpOworCisgICAgYm9vbCBzeW50aGV0aWNC
b2xkID0gKG9yaWdpbmFsVHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCkgJiYgIShhY3R1YWxUcmFp
dHMgJiBrQ1RGb250VHJhaXRCb2xkKTsKKyAgICBib29sIHN5bnRoZXRpY09ibGlxdWUgPSAob3Jp
Z2luYWxUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpICYmICEoYWN0dWFsVHJhaXRzICYga0NU
Rm9udFRyYWl0SXRhbGljKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEgYWx0ZXJuYXRlRm9udChz
dWJzdGl0dXRlRm9udC5nZXQoKSwgcGxhdGZvcm1EYXRhLnNpemUoKSwgcGxhdGZvcm1EYXRhLmlz
UHJpbnRlckZvbnQoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgcGxhdGZvcm1E
YXRhLm1fb3JpZW50YXRpb24pOworICAgIGFsdGVybmF0ZUZvbnQubV9pc0Vtb2ppID0gQ1RGb250
SXNBcHBsZUNvbG9yRW1vamkoc3Vic3RpdHV0ZUZvbnQuZ2V0KCkpOworCisgICAgcmV0dXJuIGdl
dENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250LCBEb05vdFJldGFpbik7Cit9CisKK1Bhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50
IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc0dCMTgwMzBDb21wbGlhbmNlUmVxdWlyZWQg
PSB3a0lzR0IxODAzMENvbXBsaWFuY2VSZXF1aXJlZCgpOworCisgICAgLy8gVW5saWtlIE9TIFgs
IG91ciBmYWxsYmFjayBmb250IG9uIGlQaG9uZSBpcyBBcmlhbCBVbmljb2RlLCB3aGljaCBkb2Vz
bid0IGhhdmUgc29tZSBhcHBsZS1zcGVjaWZpYyBnbHlwaHMgbGlrZSBGOEZGLgorICAgIC8vIEZh
bGwgYmFjayB0byB0aGUgQXBwbGUgRmFsbGJhY2sgZm9udCBpbiB0aGlzIGNhc2UuCisgICAgaWYg
KGxlbmd0aCA+IDAgJiYgcmVxdWlyZXNDdXN0b21GYWxsYmFja0ZvbnQoKmNoYXJhY3RlcnMpKQor
ICAgICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoZ2V0Q3VzdG9tRmFsbGJhY2tGb250KCpj
aGFyYWN0ZXJzLCBkZXNjcmlwdGlvbiksIERvTm90UmV0YWluKTsKKworICAgIFVDaGFyMzIgYyA9
ICpjaGFyYWN0ZXJzOworICAgIGlmIChsZW5ndGggPiAxICYmIFUxNl9JU19MRUFEKGMpICYmIFUx
Nl9JU19UUkFJTChjaGFyYWN0ZXJzWzFdKSkKKyAgICAgICAgYyA9IFUxNl9HRVRfU1VQUExFTUVO
VEFSWShjLCBjaGFyYWN0ZXJzWzFdKTsKKworICAgIC8vIEZvciBzeXN0ZW0gZm9udHMgd2UgdXNl
IENvcmVUZXh0IGZhbGxiYWNrIG1lY2hhbmlzbS4KKyAgICBpZiAobGVuZ3RoKSB7CisgICAgICAg
IFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0Yo
Q1RGb250Q29weUZvbnREZXNjcmlwdG9yKG9yaWdpbmFsRm9udERhdGEtPmdldENURm9udCgpKSk7
CisgICAgICAgIGlmIChDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoZm9udERlc2NyaXB0
b3IuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGdldFN5c3RlbUZvbnRGYWxsYmFja0ZvckNo
YXJhY3RlcnMoZGVzY3JpcHRpb24sIG9yaWdpbmFsRm9udERhdGEsIGNoYXJhY3RlcnMsIGxlbmd0
aCk7CisgICAgfQorCisgICAgYm9vbCB1c2VDSkZvbnQgPSBmYWxzZTsKKyAgICBib29sIHVzZUtv
cmVhbkZvbnQgPSBmYWxzZTsKKyAgICBib29sIHVzZUN5cmlsbGljRm9udCA9IGZhbHNlOworICAg
IGJvb2wgdXNlQXJhYmljRm9udCA9IGZhbHNlOworICAgIGJvb2wgdXNlSGVicmV3Rm9udCA9IGZh
bHNlOworICAgIGJvb2wgdXNlSW5kaWNGb250ID0gZmFsc2U7CisgICAgYm9vbCB1c2VUaGFpRm9u
dCA9IGZhbHNlOworICAgIGJvb2wgdXNlVGliZXRhbkZvbnQgPSBmYWxzZTsKKyAgICBib29sIHVz
ZUNhbmFkaWFuQWJvcmlnaW5hbFN5bGxhYmljc0ZvbnQgPSBmYWxzZTsKKyAgICBib29sIHVzZUVt
b2ppRm9udCA9IGZhbHNlOworICAgIGlmIChsZW5ndGggPiAwKSB7CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIC8vIFRoaXMgaXNuJ3QgYSBsb29wIGJ1dCBhIHdheSB0byBlZmZpY2llbnRseSBj
aGVjayBmb3IgcmFuZ2VzIG9mIGNoYXJhY3RlcnMuCisKKyAgICAgICAgICAgIC8vIFRoZSBmb2xs
b3dpbmcgcmFuZ2VzIGFyZSBLb3JlYW4gSGFuZ3VsIGFuZCBzaG91bGQgYmUgcmVuZGVyZWQgYnkg
QXBwbGVTREdvdGhpY05lbworICAgICAgICAgICAgLy8gVSsxMTAwIC0gVSsxMUZGCisgICAgICAg
ICAgICAvLyBVKzMxMzAgLSBVKzMxOEYKKyAgICAgICAgICAgIC8vIFUrQUMwMCAtIFUrRDdBMwor
CisgICAgICAgICAgICAvLyBUaGVzZSBhcmUgQ3lyaWxsaWMgYW5kIHNob3VsZCBiZSByZW5kZXJl
ZCBieSBIZWx2ZXRpY2EgTmV1ZQorICAgICAgICAgICAgLy8gVSswNDAwIC0gVSswNTJGCisKKyAg
ICAgICAgICAgIGlmIChjIDwgMHg0MDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBpZiAoYyA8PSAweDUyRikgeworICAgICAgICAgICAgICAgIHVzZUN5cmlsbGljRm9udCA9
IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoYyA8IDB4NTkwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYg
KGMgPCAweDYwMCkgeworICAgICAgICAgICAgICAgIHVzZUhlYnJld0ZvbnQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPD0g
MHg2RkYpIHsKKyAgICAgICAgICAgICAgICB1c2VBcmFiaWNGb250ID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDwgMHg5MDAp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoYyA8IDB4RTAwKSB7Cisg
ICAgICAgICAgICAgICAgdXNlSW5kaWNGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDw9IDB4RTdGKSB7CisgICAgICAg
ICAgICAgICAgdXNlVGhhaUZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPCAweDBGMDApCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBpZiAoYyA8PSAweDBGRkYpIHsKKyAgICAgICAgICAgICAgICB1
c2VUaWJldGFuRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoYyA8IDB4MTEwMCkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGlmIChjIDw9IDB4MTFGRikgeworICAgICAgICAgICAgICAgIHVzZUtvcmVh
bkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGMgPiAweDE0MDAgJiYgYyA8IDB4MTc4MCkgeworICAgICAgICAgICAgICAg
IHVzZUNhbmFkaWFuQWJvcmlnaW5hbFN5bGxhYmljc0ZvbnQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPCAweDJFODApCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoYyA8IDB4MzEzMCkgeworICAg
ICAgICAgICAgICAgIHVzZUNKRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA8PSAweDMxOEYpIHsKKyAgICAgICAgICAg
ICAgICB1c2VLb3JlYW5Gb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDwgMHhBQzAwKSB7CisgICAgICAgICAgICAgICAg
dXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChjIDw9IDB4RDdBMykgeworICAgICAgICAgICAgICAgIHVzZUtvcmVh
bkZvbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKCBjIDw9IDB4REZGRikgeworICAgICAgICAgICAgICAgIHVzZUNKRm9udCA9
IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIGMgPCAweEUwMDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBp
ZiAoIGMgPCAweEU2MDApIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNHQjE4MDMwQ29tcGxpYW5j
ZVJlcXVpcmVkKQorICAgICAgICAgICAgICAgICAgICB1c2VDSkZvbnQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdXNlRW1vamlGb250ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgg
YyA8PSAweEU4NjQgJiYgaXNHQjE4MDMwQ29tcGxpYW5jZVJlcXVpcmVkKSB7CisgICAgICAgICAg
ICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChjIDw9IDB4RjhGRikKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmIChjIDwgMHhGQjAwKSB7CisgICAgICAgICAgICAgICAgdXNlQ0pG
b250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChjIDwgMHhGQjUwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKGMgPD0gMHhGREZGKSB7CisgICAgICAgICAgICAgICAgdXNlQXJhYmljRm9udCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoYyA8IDB4RkUyMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChj
IDwgMHhGRTcwKSB7CisgICAgICAgICAgICAgICAgdXNlQ0pGb250ID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjIDwgMHhGRjAw
KSB7CisgICAgICAgICAgICAgICAgdXNlQXJhYmljRm9udCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA8IDB4RkZGMCkgewor
ICAgICAgICAgICAgICAgIHVzZUNKRm9udCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA+PTB4MjAwMDAgJiYgYyA8PSAweDJG
RkZGKQorICAgICAgICAgICAgICAgIHVzZUNKRm9udCA9IHRydWU7CisgICAgICAgIH0gd2hpbGUg
KDApOworICAgIH0KKworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGE7
CisKKyAgICBpZiAodXNlQ0pGb250KSB7CisgICAgICAgIC8vIEJ5IGRlZmF1bHQsIENoaW5lc2Ug
Zm9udCBpcyBwcmVmZXJyZWQsIGZhbGwgYmFjayBvbiBKYXBhbmVzZS4KKworICAgICAgICBlbnVt
IENKS0ZvbnRWYXJpYW50IHsKKyAgICAgICAgICAgIGtDSktGb250VXNlSGlyYWdpbm8gPSAwLAor
ICAgICAgICAgICAga0NKS0ZvbnRVc2VTVEhlaXRpU0MsCisgICAgICAgICAgICBrQ0pLRm9udFVz
ZVNUSGVpdGlUQywKKyAgICAgICAgICAgIGtDSktGb250VXNlU1RIZWl0aUosCisgICAgICAgICAg
ICBrQ0pLRm9udFVzZVNUSGVpdGlLLAorICAgICAgICAgICAga0NKS0ZvbnRzVXNlSEtHUFczVUkK
KyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBwbGFpbkhpcmFnaW5vKCJIaXJhS2FrdVByb04tVzMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gcGxhaW5TVEhlaXRpU0MoIlNUSGVpdGlTQy1MaWdodCIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBwbGFpblNUSGVpdGlUQygiU1RIZWl0aVRDLUxpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IHBsYWluU1RIZWl0aUooIlNUSGVpdGlKLUxpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IHBsYWluU1RIZWl0aUsoIlNUSGVpdGlLLUxpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IHBsYWluSEtHUFczVUkoIkhLR1BXM1VJIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBBdG9taWNTdHJpbmcqIGNqa1BsYWluW10gPSB7
ICAgICAKKyAgICAgICAgICAgICZwbGFpbkhpcmFnaW5vLmdldCgpLAorICAgICAgICAgICAgJnBs
YWluU1RIZWl0aVNDLmdldCgpLAorICAgICAgICAgICAgJnBsYWluU1RIZWl0aVRDLmdldCgpLAor
ICAgICAgICAgICAgJnBsYWluU1RIZWl0aUouZ2V0KCksCisgICAgICAgICAgICAmcGxhaW5TVEhl
aXRpSy5nZXQoKSwKKyAgICAgICAgICAgICZwbGFpbkhLR1BXM1VJLmdldCgpLAorICAgICAgICB9
OworCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGJvbGRIaXJh
Z2lubygiSGlyYUtha3VQcm9OLVc2IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGJvbGRTVEhl
aXRpU0MoIlNUSGVpdGlTQy1NZWRpdW0iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gYm9sZFNU
SGVpdGlUQygiU1RIZWl0aVRDLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBib2xk
U1RIZWl0aUooIlNUSGVpdGlKLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBib2xk
U1RIZWl0aUsoIlNUSGVpdGlLLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBib2xk
SEtHUFczVUkoIkhLR1BXM1VJIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgICAgIHN0YXRpYyBBdG9taWNTdHJpbmcqIGNqa0JvbGRbXSA9IHsgIAorICAgICAgICAg
ICAgJmJvbGRIaXJhZ2luby5nZXQoKSwKKyAgICAgICAgICAgICZib2xkU1RIZWl0aVNDLmdldCgp
LAorICAgICAgICAgICAgJmJvbGRTVEhlaXRpVEMuZ2V0KCksCisgICAgICAgICAgICAmYm9sZFNU
SGVpdGlKLmdldCgpLAorICAgICAgICAgICAgJmJvbGRTVEhlaXRpSy5nZXQoKSwKKyAgICAgICAg
ICAgICZib2xkSEtHUFczVUkuZ2V0KCksCisgICAgICAgIH07CisKKyAgICAgICAgLy8gRGVmYXVs
dCBiZWxvdyBpcyBmb3IgU2ltcGxpZmllZCBDaGluZXNlIHVzZXI6IHpoLUhhbnMgLSBub3RlIHRo
YXQgSGlyYWdpbm8gaXMgdGhlCisgICAgICAgIC8vIHRoZSBzZWNvbmRhcnkgZm9udCBhcyB3ZSB3
YW50IGl0cyBmb3IgSGlyYWdhbmEgYW5kIEthdGFrYW5hLiBUaGUgb3RoZXIgQ0pLIGZvbnRzCisg
ICAgICAgIC8vIGRvIG5vdCwgYW5kIHNob3VsZCBub3QsIGNvbnRhaW4gSGlyYWdhbmEgb3IgS2F0
YWthbmEgZ2x5cGhzLgorICAgICAgICBzdGF0aWMgQ0pLRm9udFZhcmlhbnQgcHJlZmVycmVkQ0pL
Rm9udCA9IGtDSktGb250VXNlU1RIZWl0aVNDOworICAgICAgICBzdGF0aWMgQ0pLRm9udFZhcmlh
bnQgc2Vjb25kYXJ5Q0pLRm9udCA9IGtDSktGb250c1VzZUhLR1BXM1VJOworCisgICAgICAgIHN0
YXRpYyBib29sIENKS0ZvbnRJbml0aWFsaXplZDsKKyAgICAgICAgaWYgKCFDSktGb250SW5pdGlh
bGl6ZWQpIHsKKyAgICAgICAgICAgIENKS0ZvbnRJbml0aWFsaXplZCA9IHRydWU7CisgICAgICAg
ICAgICAvLyBUZXN0aW5nOiBsYW5ndWFnZU5hbWUgPSAoQ0ZTdHJpbmdSZWYpQCJqYSI7CisgICAg
ICAgICAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdOworICAgICAgICAgICAgTlNBcnJheSAqbGFuZ3VhZ2VzID0gW2RlZmF1
bHRzIHN0cmluZ0FycmF5Rm9yS2V5OkAiQXBwbGVMYW5ndWFnZXMiXTsKKworICAgICAgICAgICAg
aWYgKGxhbmd1YWdlcykgeworICAgICAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmxhbmd1YWdl
IGluIGxhbmd1YWdlcykgeworICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGxhbmd1YWdlTmFtZSA9IGFkb3B0Q0YoQ0ZMb2NhbGVDcmVhdGVDYW5vbmljYWxMYW5ndWFn
ZUlkZW50aWZpZXJGcm9tU3RyaW5nKG51bGxwdHIsIChDRlN0cmluZ1JlZilsYW5ndWFnZSkpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoQ0ZFcXVhbChsYW5ndWFnZU5hbWUuZ2V0KCksIENGU1RS
KCJ6aC1IYW5zIikpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFNpbXBsaWZp
ZWQgQ2hpbmVzZSAtIGRlZmF1bHQgc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoQ0ZFcXVhbChsYW5ndWFnZU5hbWUuZ2V0KCksIENGU1RSKCJqYSIpKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcHJlZmVycmVkQ0pLRm9udCA9IGtDSktGb250VXNlSGlyYWdpbm87IC8v
IEphcGFuZXNlIC0gcHJlZmVyIEhpcmFnaW5vIGFuZCBTVEhlaXRpIEphcGFuc2UgVmFyaWFudAor
ICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5Q0pLRm9udCA9IGtDSktGb250VXNlU1RI
ZWl0aUo7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChDRkVxdWFsKGxhbmd1YWdlTmFtZS5nZXQoKSwgQ0ZTVFIoImtvIikpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRDSktGb250ID0ga0NKS0ZvbnRVc2VT
VEhlaXRpSzsgLy8gS29yZWFuIC0gcHJlZmVyIFNUSGVpdGkgS29yZWFuIFZhcmlhbnQgCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChDRkVxdWFsKGxhbmd1YWdlTmFtZS5nZXQoKSwgQ0ZTVFIoInpoLUhhbnQiKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZENKS0ZvbnQgPSBrQ0pLRm9udFVzZVNUSGVpdGlU
QzsgLy8gVHJhZGl0aW9uYWwgQ2hpbmVzZSAtIHByZWZlciBTVEhlaXRpIFRyYWRpdGlvbmFsIFZh
cmlhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250
V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtwcmVmZXJyZWRDSktG
b250XSA6ICpjamtQbGFpbltwcmVmZXJyZWRDSktGb250XSwgZmFsc2UsIERvTm90UmV0YWluKTsK
KyAgICAgICAgYm9vbCB1c2VTZWNvbmRhcnlGb250ID0gdHJ1ZTsKKyAgICAgICAgaWYgKHNpbXBs
ZUZvbnREYXRhKSB7CisgICAgICAgICAgICBDR0dseXBoIGdseXBoc1syXTsKKyAgICAgICAgICAg
IC8vIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJzIHRha2VzIFVURi0xNiBidWZmZXIuIFNob3Vs
ZCBvbmx5IGJlIDEgY29kZXBvaW50IGJ1dCBzaW5jZSB3ZSBtYXkgcGFzcyBpbiB0d28gVVRGLTE2
IGNoYXJhY3RlcnMsCisgICAgICAgICAgICAvLyBtYWtlIHJvb20gZm9yIDIgZ2x5cGhzIGp1c3Qg
dG8gYmUgc2FmZS4KKyAgICAgICAgICAgIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJzKHNpbXBs
ZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgY2hhcmFjdGVycywgZ2x5cGhzLCBs
ZW5ndGgpOworCisgICAgICAgICAgICB1c2VTZWNvbmRhcnlGb250ID0gKGdseXBoc1swXSA9PSAw
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1c2VTZWNvbmRhcnlGb250KQorICAgICAgICAg
ICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250
V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtzZWNvbmRhcnlDSktG
b250XSA6ICpjamtQbGFpbltzZWNvbmRhcnlDSktGb250XSwgZmFsc2UsIERvTm90UmV0YWluKTsK
KyAgICB9IGVsc2UgaWYgKHVzZUtvcmVhbkZvbnQpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4ga29yZWFuUGxhaW4oIkFwcGxlU0RHb3RoaWNOZW8tTWVkaXVt
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGtvcmVhbkJvbGQoIkFwcGxlU0RHb3RoaWNOZW8t
Qm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzaW1w
bGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRC
b2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGtvcmVhbkJvbGQgOiBrb3JlYW5QbGFpbiwgZmFs
c2UsIERvTm90UmV0YWluKTsKKyAgICB9IGVsc2UgaWYgKHVzZUN5cmlsbGljRm9udCkgeworICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjeXJpbGxpY1BsYWluKCJI
ZWx2ZXRpY2FOZXVlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmlsbGljQm9sZCgiSGVs
dmV0aWNhTmV1ZS1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlz
Rm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY3lyaWxsaWNCb2xkIDogY3ly
aWxsaWNQbGFpbiwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICB9IGVsc2UgaWYgKHVzZUFyYWJp
Y0ZvbnQpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gYXJh
YmljUGxhaW4oIkdlZXphUHJvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGFyYWJpY0JvbGQo
IkdlZXphUHJvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAg
ICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNG
b250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBhcmFiaWNCb2xkIDogYXJhYmlj
UGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgfSBlbHNlIGlmICh1c2VIZWJyZXdGb250
KSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhlYnJld1Bs
YWluKCJBcmlhbEhlYnJldyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwor
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBoZWJyZXdCb2xkKCJB
cmlhbEhlYnJldy1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlz
Rm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gaGVicmV3Qm9sZCA6IGhlYnJl
d1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSBpZiAodXNlSW5kaWNGb250
KSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGRldmFuYWdh
cmlGb250KCJEZXZhbmFnYXJpU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gYmVu
Z2FsaUZvbnQoIkJhbmdsYVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGd1cm11
a2hpRm9udCgiR3VybXVraGlNTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OyAvLyBNaWdodCBiZSByZXBsYWNlZCBpbiBhIGZ1dHVyZSByZWxlYXNlIHdpdGggYSBTYW5nYW0g
dmVyc2lvbi4KKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ3Vq
YXJhdGlGb250KCJHdWphcmF0aVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG9y
aXlhRm9udCgiT3JpeWFTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0YW1pbEZv
bnQoIlRhbWlsU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGVsdWd1Rm9udCgi
VGVsdWd1U2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAg
ICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4ga2FubmFkYUZvbnQoIkth
bm5hZGFTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBtYWxheWFsYW1Gb250KCJN
YWxheWFsYW1TYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwor
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBzaW5oYWxhRm9udCgi
U2luaGFsYVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisK
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZGV2YW5hZ2FyaUZv
bnRCb2xkKCJEZXZhbmFnYXJpU2FuZ2FtTU4tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBiZW5nYWxpRm9udEJvbGQoIkJhbmdsYVNhbmdhbU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gZ3VybXVraGlGb250Qm9sZCgiR3VybXVraGlNTi1Cb2xkIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7IC8vIE1pZ2h0IGJlIHJlcGxhY2VkIGluIGEgZnV0dXJl
IHJlbGVhc2Ugd2l0aCBhIFNhbmdhbSB2ZXJzaW9uLgorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBndWphcmF0aUZvbnRCb2xkKCJHdWphcmF0aVNhbmdhbU1OLUJv
bGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gb3JpeWFGb250Qm9sZCgiT3JpeWFTYW5nYW1N
Ti1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRhbWlsRm9udEJvbGQoIlRhbWlsU2Fu
Z2FtTU4tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0ZWx1Z3VGb250Qm9sZCgiVGVs
dWd1U2FuZ2FtTU4tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwor
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrYW5uYWRhRm9udEJv
bGQoIkthbm5hZGFTYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1hbGF5
YWxhbUZvbnRCb2xkKCJNYWxheWFsYW1TYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IHNpbmhhbGFGb250Qm9sZCgiU2luaGFsYVNhbmdhbU1OLUJvbGQiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKworICAgICAgICBzdGF0aWMgQXRvbWljU3RyaW5n
KiBpbmRpY1VuaWNvZGVQYWdlRm9udHNbXSA9IHsKKyAgICAgICAgICAgICZkZXZhbmFnYXJpRm9u
dC5nZXQoKSwKKyAgICAgICAgICAgICZiZW5nYWxpRm9udC5nZXQoKSwKKyAgICAgICAgICAgICZn
dXJtdWtoaUZvbnQuZ2V0KCksCisgICAgICAgICAgICAmZ3VqYXJhdGlGb250LmdldCgpLAorICAg
ICAgICAgICAgJm9yaXlhRm9udC5nZXQoKSwKKyAgICAgICAgICAgICZ0YW1pbEZvbnQuZ2V0KCks
CisgICAgICAgICAgICAmdGVsdWd1Rm9udC5nZXQoKSwKKyAgICAgICAgICAgICZrYW5uYWRhRm9u
dC5nZXQoKSwKKyAgICAgICAgICAgICZtYWxheWFsYW1Gb250LmdldCgpLAorICAgICAgICAgICAg
JnNpbmhhbGFGb250LmdldCgpCisgICAgICAgIH07CisKKyAgICAgICAgc3RhdGljIEF0b21pY1N0
cmluZyogaW5kaWNVbmljb2RlUGFnZUZvbnRzQm9sZFtdID0geworICAgICAgICAgICAgJmRldmFu
YWdhcmlGb250Qm9sZC5nZXQoKSwKKyAgICAgICAgICAgICZiZW5nYWxpRm9udEJvbGQuZ2V0KCks
CisgICAgICAgICAgICAmZ3VybXVraGlGb250Qm9sZC5nZXQoKSwKKyAgICAgICAgICAgICZndWph
cmF0aUZvbnRCb2xkLmdldCgpLAorICAgICAgICAgICAgJm9yaXlhRm9udEJvbGQuZ2V0KCksCisg
ICAgICAgICAgICAmdGFtaWxGb250Qm9sZC5nZXQoKSwKKyAgICAgICAgICAgICZ0ZWx1Z3VGb250
Qm9sZC5nZXQoKSwKKyAgICAgICAgICAgICZrYW5uYWRhRm9udEJvbGQuZ2V0KCksCisgICAgICAg
ICAgICAmbWFsYXlhbGFtRm9udEJvbGQuZ2V0KCksCisgICAgICAgICAgICAmc2luaGFsYUZvbnRC
b2xkLmdldCgpCisgICAgICAgIH07CisKKyAgICAgICAgdWludDMyX3QgaW5kaWNQYWdlT3JkZXJJ
bmRleCA9IChjIC0gMHgwOTAwKSAvIDB4MDA4MDsgLy8gSW5kaWMgc2NyaXB0cyBzdGFydCBhdCAw
eDA5MDAgaW4gVW5pY29kZS4gRWFjaCBzY3JpcHQgaXMgYWxsb2NhbHRlZCBhIGJsb2NrIG9mIDB4
ODAgY2hhcmFjdGVycy4KKyAgICAgICAgaWYgKGluZGljUGFnZU9yZGVySW5kZXggPCAoc2l6ZW9m
KGluZGljVW5pY29kZVBhZ2VGb250cykgLyBzaXplb2YoQXRvbWljU3RyaW5nKikpKSB7CisgICAg
ICAgICAgICBBdG9taWNTdHJpbmcqIGluZGljRm9udFN0cmluZyA9IGlzRm9udFdlaWdodEJvbGQo
ZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gaW5kaWNVbmljb2RlUGFnZUZvbnRzQm9sZFtpbmRpY1Bh
Z2VPcmRlckluZGV4XSA6IGluZGljVW5pY29kZVBhZ2VGb250c1tpbmRpY1BhZ2VPcmRlckluZGV4
XTsKKyAgICAgICAgICAgIGlmIChpbmRpY0ZvbnRTdHJpbmcpCisgICAgICAgICAgICAgICAgc2lt
cGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgKmluZGljRm9udFN0
cmluZywgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAodXNl
VGhhaUZvbnQpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
dGhhaVBsYWluKCJUaG9uYnVyaSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0aGFpQm9sZCgi
VGhvbmJ1cmktQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAg
ICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0Zv
bnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IHRoYWlCb2xkIDogdGhhaVBsYWlu
LCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgIH0gZWxzZSBpZiAodXNlVGliZXRhbkZvbnQpIHsK
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGliZXRhblBsYWlu
KCJLYWlsYXNhIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRpYmV0YW5Cb2xkKCJLYWlsYXNh
LUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgc2lt
cGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0
Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFpbiwg
ZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICB9IGVsc2UgaWYgKHVzZUNhbmFkaWFuQWJvcmlnaW5h
bFN5bGxhYmljc0ZvbnQpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gY2FzUGxhaW4oIkV1cGhlbWlhVUNBUyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBj
YXNCb2xkKCJFdXBoZW1pYVVDQVMtQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2Ny
aXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGNhc0JvbGQg
OiBjYXNQbGFpbiwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICB9IGVsc2UgeworICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBhcHBsZUNvbG9yRW1vamkoIkFwcGxl
Q29sb3JFbW9qaSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAg
ICBpZiAoIXVzZUVtb2ppRm9udCkgeworICAgICAgICAgICAgaWYgKCFDRkNoYXJhY3RlclNldElz
TG9uZ0NoYXJhY3Rlck1lbWJlcihwaG9uZUZhbGxiYWNrQ2hhcmFjdGVyU2V0KCksIGMpKQorICAg
ICAgICAgICAgICAgIHVzZUVtb2ppRm9udCA9IENGQ2hhcmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVy
TWVtYmVyKGFwcGxlQ29sb3JFbW9qaUNoYXJhY3RlclNldCgpLCBjKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodXNlRW1vamlGb250KQorICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRD
YWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgYXBwbGVDb2xvckVtb2ppLCBmYWxzZSwgRG9Ob3RS
ZXRhaW4pOworICAgIH0KKworICAgIGlmIChzaW1wbGVGb250RGF0YSkKKyAgICAgICAgcmV0dXJu
IHNpbXBsZUZvbnREYXRhLnJlbGVhc2UoKTsKKworICAgIHJldHVybiBnZXROb25SZXRhaW5lZExh
c3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24pOworfQorCitQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFuIGFw
cHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2Yga2V5
d29yZHMgaW4KKyAgICAvLyB0aGUgcmVxdWVzdGVkIG5hbWVzLiBGb3IgZXhhbXBsZSwgd2UnbGwg
bWF0Y2ggYW55IG5hbWUgdGhhdCBjb250YWlucyAiQXJhYmljIiB0byBHZWV6YSBQcm8uCisgICAg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgKytpKSB7CisgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gZGVzY3JpcHRpb24uZmFtaWx5QXQoaSk7CisgICAg
ICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgLy8gU3Vic3RpdHV0ZSB0aGUgZGVmYXVsdCBtb25vc3BhY2UgZm9udCBmb3Igd2VsbC1rbm93
biBtb25vc3BhY2UgZm9udHMuCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IG1vbmFjbygibW9uYWNvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1lbmxvKCJt
ZW5sbyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShmYW1pbHksIG1vbmFjbykgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBtZW5sbykp
IHsKKyAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3Jp
cHRpb24sIGNvdXJpZXIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBTdWJzdGl0dXRlIFZlcmRhbmEgZm9yIEx1Y2lkYSBHcmFuZGUuCisgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGx1Y2lkYUdyYW5kZSgibHVjaWRhIGdy
YW5kZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShmYW1pbHksIGx1Y2lkYUdyYW5kZSkpIHsKKyAgICAgICAgICAgIHNpbXBsZUZvbnREYXRh
ID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIHZlcmRhbmEpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiBhcmFiaWMoQVNDSUlMaXRlcmFsKCJBcmFiaWMiKSk7CisgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxTdHJpbmc+IHBhc2h0byhBU0NJSUxpdGVyYWwoIlBhc2h0byIpKTsKKyAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gdXJkdShBU0NJSUxpdGVyYWwoIlVyZHUi
KSk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7ICZhcmFiaWMuZ2V0
KCksICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07CisgICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9taWNTdHJpbmc+IGdlZXphQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIXNp
bXBsZUZvbnREYXRhOyArK2opCisgICAgICAgICAgICBpZiAoZmFtaWx5LmNvbnRhaW5zKCptYXRj
aFdvcmRzW2pdLCBmYWxzZSkpCisgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRD
YWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53
ZWlnaHQoKSkgPyBnZWV6YUJvbGQgOiBnZWV6YVBsYWluKTsKKyAgICB9CisKKyAgICByZXR1cm4g
c2ltcGxlRm9udERhdGEucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZmFsbGJhY2tGb250RmFtaWx5KCIu
UGhvbmVGYWxsYmFjayIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAg
IHJldHVybiBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9udEZh
bWlseSwgZmFsc2UsIHNob3VsZFJldGFpbik7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRD
YWNoZTo6Z2V0Q3VzdG9tRmFsbGJhY2tGb250KGNvbnN0IFVJbnQzMiBjLCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIEFTU0VSVChyZXF1aXJlc0N1c3RvbUZhbGxi
YWNrRm9udChjKSk7CisgICAgaWYgKGMgPT0gQXBwbGVMb2dvKSB7CisgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhlbHZldGljYUZhbWlseSgiSGVsdmV0aWNhIE5l
dWUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgcmV0dXJu
IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIGhlbHZldGljYUZhbWlseSk7
CisgICAgfQorICAgIGlmIChjID09IGJsYWNrQ2lyY2xlKSB7CisgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGxvY2tDbG9ja0ZhbWlseSgiTG9ja0Nsb2NrLUxpZ2h0
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHJldHVybiBn
ZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uLCBsb2NrQ2xvY2tGYW1pbHkpOwor
ICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIGlubGluZSBGb250VHJhaXRz
TWFzayB0b1RyYWl0c01hc2soQ1RGb250U3ltYm9saWNUcmFpdHMgY3RGb250VHJhaXRzKQorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxGb250VHJhaXRzTWFzaz4oKChjdEZvbnRUcmFpdHMgJiBr
Q1RGb250VHJhaXRJdGFsaWMpID8gRm9udFN0eWxlSXRhbGljTWFzayA6IEZvbnRTdHlsZU5vcm1h
bE1hc2spCisgICAgICAgIHwgRm9udFZhcmlhbnROb3JtYWxNYXNrCisgICAgICAgIC8vIEZvbnRX
ZWlnaHQ2MDAgb3IgaGlnaGVyIGlzIGJvbGQgZm9yIENURm9udHMsIHNvIGNob29zZSBtaWRkbGUg
dmFsdWVzIGZvcgorICAgICAgICAvLyBib2xkICg2MDAtOTAwKSBhbmQgbm9uLWJvbGQgKDEwMC01
MDApCisgICAgICAgIHwgKChjdEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRX
ZWlnaHQ3MDBNYXNrIDogRm9udFdlaWdodDMwME1hc2spKTsKK30KKwordm9pZCBGb250Q2FjaGU6
OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9y
PHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBm
YW1pbHlOYW1lU3RyID0gZmFtaWx5TmFtZS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygpOworICAg
IE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IEB7IChpZClrQ1RGb250RmFtaWx5TmFtZUF0dHJp
YnV0ZTogKE5TU3RyaW5nKilmYW1pbHlOYW1lU3RyLmdldCgpIH07CisgICAgUmV0YWluUHRyPENU
Rm9udERlc2NyaXB0b3JSZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlw
dG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoKENGRGljdGlvbmFyeVJlZilhdHRyaWJ1dGVzKSk7Cisg
ICAgUmV0YWluUHRyPE5TQXJyYXk+IG1hdGNoZWREZXNjcmlwdG9ycyA9IGFkb3B0TlMoKE5TQXJy
YXkgKilDVEZvbnREZXNjcmlwdG9yQ3JlYXRlTWF0Y2hpbmdGb250RGVzY3JpcHRvcnMoZm9udERl
c2NyaXB0b3IuZ2V0KCksIG51bGxwdHIpKTsKKworICAgIE5TSW50ZWdlciBudW1NYXRjaGVzID0g
W21hdGNoZWREZXNjcmlwdG9ycy5nZXQoKSBjb3VudF07CisgICAgaWYgKCFtYXRjaGVkRGVzY3Jp
cHRvcnMgfHwgIW51bU1hdGNoZXMpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoTlNJbnRl
Z2VyIGkgPSAwOyBpIDwgbnVtTWF0Y2hlczsgKytpKSB7CisgICAgICAgIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IHRyYWl0cyA9IGFkb3B0Q0YoKENGRGljdGlvbmFyeVJlZilDVEZvbnREZXNj
cmlwdG9yQ29weUF0dHJpYnV0ZSgoQ1RGb250RGVzY3JpcHRvclJlZilbbWF0Y2hlZERlc2NyaXB0
b3JzLmdldCgpIG9iamVjdEF0SW5kZXg6aV0sIGtDVEZvbnRUcmFpdHNBdHRyaWJ1dGUpKTsKKyAg
ICAgICAgQ0ZOdW1iZXJSZWYgcmVzdWx0UmVmID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdl
dFZhbHVlKHRyYWl0cy5nZXQoKSwga0NURm9udFN5bWJvbGljVHJhaXQpOworICAgICAgICBpZiAo
cmVzdWx0UmVmKSB7CisgICAgICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBzeW1ib2xpY1Ry
YWl0czsKKyAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUocmVzdWx0UmVmLCBrQ0ZOdW1iZXJJ
bnRUeXBlLCAmc3ltYm9saWNUcmFpdHMpOworICAgICAgICAgICAgdHJhaXRzTWFza3MuYXBwZW5k
KHRvVHJhaXRzTWFzayhzeW1ib2xpY1RyYWl0cykpOworICAgICAgICB9CisgICAgfQorfQorCitm
bG9hdCBGb250Q2FjaGU6OndlaWdodE9mQ1RGb250KENURm9udFJlZiBmb250KQoreworICAgIGZs
b2F0IHJlc3VsdCA9IDA7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gdHJhaXRzID0g
YWRvcHRDRihDVEZvbnRDb3B5VHJhaXRzKGZvbnQpKTsKKyAgICBpZiAoIXRyYWl0cykKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKworICAgIENGTnVtYmVyUmVmIHJlc3VsdFJlZiA9IChDRk51bWJl
clJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZSh0cmFpdHMuZ2V0KCksIGtDVEZvbnRXZWlnaHRUcmFp
dCk7CisgICAgaWYgKHJlc3VsdFJlZikKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShyZXN1bHRS
ZWYsIGtDRk51bWJlckZsb2F0VHlwZSwgJnJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgQ1RGb250UmVmIGNyZWF0ZUNURm9udFdpdGhUZXh0U3R5bGUoY29uc3QgU3Ry
aW5nJiBmYW1pbHlOYW1lLCBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMsIENHRmxvYXQgc2l6
ZSkKK3sKKyAgICBpZiAoZmFtaWx5TmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBzeW1ib2xpY1RyYWl0cyA9IDA7CisgICAg
aWYgKHRyYWl0cyAmIGtDVEZvbnRCb2xkVHJhaXQpCisgICAgICAgIHN5bWJvbGljVHJhaXRzIHw9
IGtDVEZvbnRCb2xkVHJhaXQ7CisgICAgaWYgKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykK
KyAgICAgICAgc3ltYm9saWNUcmFpdHMgfD0ga0NURm9udFRyYWl0SXRhbGljOworICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZVN0ciA9IGZhbWlseU5hbWUuY3JlYXRlQ0ZTdHJp
bmcoKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3Ig
PSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKGZhbWlseU5hbWVT
dHIuZ2V0KCksIFJlbmRlclRoZW1lSU9TOjpjb250ZW50U2l6ZUNhdGVnb3J5KCksIG51bGxwdHIp
KTsKKyAgICBpZiAoc3ltYm9saWNUcmFpdHMpCisgICAgICAgIGZvbnREZXNjcmlwdG9yID0gYWRv
cHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29weVdpdGhTeW1ib2xpY1RyYWl0cyhmb250RGVz
Y3JpcHRvci5nZXQoKSwgc3ltYm9saWNUcmFpdHMsIHN5bWJvbGljVHJhaXRzKSk7CisKKyAgICBy
ZXR1cm4gQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yLmdldCgp
LCBzaXplLCBudWxscHRyKTsKK30KKworc3RhdGljIENURm9udFJlZiBjcmVhdGVDVEZvbnRXaXRo
RmFtaWx5TmFtZUFuZFdlaWdodChjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIENURm9udFN5bWJv
bGljVHJhaXRzIHRyYWl0cywgZmxvYXQgc2l6ZSwgdWludDE2X3Qgd2VpZ2h0KQoreworICAgIGlm
IChmYW1pbHlOYW1lLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHN5c3RlbVVJRm9udFdpdGhXZWJLaXRQ
cmVmaXgoIi13ZWJraXQtc3lzdGVtLWZvbnQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBzeXN0ZW1V
SUZvbnRXaXRoQXBwbGVQcmVmaXgoIi1hcHBsZS1zeXN0ZW0tZm9udCIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlO
YW1lLCBzeXN0ZW1VSUZvbnRXaXRoV2ViS2l0UHJlZml4KSB8fCBlcXVhbElnbm9yaW5nQ2FzZShm
YW1pbHlOYW1lLCBzeXN0ZW1VSUZvbnRXaXRoQXBwbGVQcmVmaXgpKSB7CisgICAgICAgIENURm9u
dFVJRm9udFR5cGUgZm9udFR5cGUgPSBrQ1RGb250VUlGb250U3lzdGVtOworICAgICAgICBpZiAo
d2VpZ2h0ID4gMzAwKSB7CisgICAgICAgICAgICAvLyBUaGUgY29tbWVudCBiZWxvdyBoYXMgYmVl
biBjb3BpZWQgZnJvbSBDb3JlVGV4dC9VSUZvdW5kYXRpb24uIEhvd2V2ZXIsIGluIFdlYktpdCB3
ZSBzeW50aGVzaXplIHRoZSBvYmxpcXVlLAorICAgICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGlu
dmVzdGlnYXRlIHRoZSByZXN1bHQgPHJkYXI6Ly9wcm9ibGVtLzE0NDQ5MzQwPjoKKyAgICAgICAg
ICAgIC8vIFdlIGRvbid0IGRvIGJvbGQtaXRhbGljIGZvciBzeXN0ZW0gZm9udHMuIElmIHlvdSBh
c2sgZm9yIGl0LCB3ZSdsbCBhc3N1bWUgdGhhdCB5b3UncmUganVzdCBraWRkaW5nIGFuZCB0aGF0
IHlvdSByZWFsbHkgd2FudCBib2xkLiBUaGlzIGlzIGEgZmVhdHVyZS4KKyAgICAgICAgICAgIGlm
ICh0cmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKQorICAgICAgICAgICAgICAgIGZvbnRUeXBlID0g
a0NURm9udFVJRm9udEVtcGhhc2l6ZWRTeXN0ZW07CisgICAgICAgICAgICBlbHNlIGlmICh0cmFp
dHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpCisgICAgICAgICAgICAgICAgZm9udFR5cGUgPSBzdGF0
aWNfY2FzdDxDVEZvbnRVSUZvbnRUeXBlPihrQ1RGb250VUlGb250U3lzdGVtSXRhbGljKTsKKyAg
ICAgICAgfSBlbHNlIGlmICh3ZWlnaHQgPiAyNTApCisgICAgICAgICAgICBmb250VHlwZSA9IHN0
YXRpY19jYXN0PENURm9udFVJRm9udFR5cGU+KGtDVEZvbnRVSUZvbnRTeXN0ZW1MaWdodCk7Cisg
ICAgICAgIGVsc2UgaWYgKHdlaWdodCA+IDE1MCkKKyAgICAgICAgICAgIGZvbnRUeXBlID0gc3Rh
dGljX2Nhc3Q8Q1RGb250VUlGb250VHlwZT4oa0NURm9udFVJRm9udFN5c3RlbVRoaW4pOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBmb250VHlwZSA9IHN0YXRpY19jYXN0PENURm9udFVJRm9u
dFR5cGU+KGtDVEZvbnRVSUZvbnRTeXN0ZW1VbHRyYUxpZ2h0KTsKKyAgICAgICAgUmV0YWluUHRy
PENURm9udERlc2NyaXB0b3JSZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNj
cmlwdG9yQ3JlYXRlRm9yVUlUeXBlKGZvbnRUeXBlLCBzaXplLCBudWxscHRyKSk7CisgICAgICAg
IHJldHVybiBDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0
KCksIHNpemUsIG51bGxwdHIpOworICAgIH0KKworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
ZmFtaWx5TmFtZVN0ciA9IGZhbWlseU5hbWUuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICBDVEZvbnRT
eW1ib2xpY1RyYWl0cyByZXF1ZXN0ZWRUcmFpdHMgPSAoQ1RGb250U3ltYm9saWNUcmFpdHMpKHRy
YWl0cyAmIChrQ1RGb250Qm9sZFRyYWl0IHwga0NURm9udEl0YWxpY1RyYWl0KSk7CisgICAgcmV0
dXJuIENURm9udENyZWF0ZUZvckNTUyhmYW1pbHlOYW1lU3RyLmdldCgpLCB3ZWlnaHQsIHJlcXVl
c3RlZFRyYWl0cywgc2l6ZSk7Cit9CisKK3N0YXRpYyB1aW50MTZfdCB0b0NURm9udFdlaWdodChG
b250V2VpZ2h0IGZvbnRXZWlnaHQpCit7CisgICAgc3dpdGNoIChmb250V2VpZ2h0KSB7CisgICAg
Y2FzZSBGb250V2VpZ2h0MTAwOgorICAgICAgICByZXR1cm4gMTAwOworICAgIGNhc2UgRm9udFdl
aWdodDIwMDoKKyAgICAgICAgcmV0dXJuIDIwMDsKKyAgICBjYXNlIEZvbnRXZWlnaHQzMDA6Cisg
ICAgICAgIHJldHVybiAzMDA7CisgICAgY2FzZSBGb250V2VpZ2h0NDAwOgorICAgICAgICByZXR1
cm4gNDAwOworICAgIGNhc2UgRm9udFdlaWdodDUwMDoKKyAgICAgICAgcmV0dXJuIDUwMDsKKyAg
ICBjYXNlIEZvbnRXZWlnaHQ2MDA6CisgICAgICAgIHJldHVybiA2MDA7CisgICAgY2FzZSBGb250
V2VpZ2h0NzAwOgorICAgICAgICByZXR1cm4gNzAwOworICAgIGNhc2UgRm9udFdlaWdodDgwMDoK
KyAgICAgICAgcmV0dXJuIDgwMDsKKyAgICBjYXNlIEZvbnRXZWlnaHQ5MDA6CisgICAgICAgIHJl
dHVybiA5MDA7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDQwMDsKKyAgICB9Cit9CisK
K1Bhc3NPd25QdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGZhbWlseSkKK3sKKyAgICAvLyBTcGVjaWFsIGNhc2UgZm9yICJDb3VyaWVyIiBm
b250LiBXZSB1c2VkIHRvIGhhdmUgb25seSBhbiBvYmxpcXVlIHZhcmlhbnQgb24gaU9TLCBzbyBw
cmlvciB0bworICAgIC8vIGlPUyA2LjAsIHdlIGRpc2FsbG93ZWQgaXRzIHVzZSBoZXJlLiBXZSds
bCBmYWxsIGJhY2sgb24gIkNvdXJpZXIgTmV3Ii4gPHJkYXI6Ly9wcm9ibGVtLzUxMTY0NzcmMTA4
NTAyMjc+CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY291cmllcigi
Q291cmllciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRp
YyBib29sIHNob3VsZERpc2FsbG93Q291cmllciA9ICFpb3NFeGVjdXRhYmxlV2FzTGlua2VkT25P
ckFmdGVyVmVyc2lvbih3a0lPU1N5c3RlbVZlcnNpb25fNl8wKTsKKyAgICBpZiAoc2hvdWxkRGlz
YWxsb3dDb3VyaWVyICYmIGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgY291cmllcikpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0g
MDsKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLml0YWxpYygpKQorICAgICAgICB0cmFpdHMgfD0g
a0NURm9udFRyYWl0SXRhbGljOworICAgIGlmIChpc0ZvbnRXZWlnaHRCb2xkKGZvbnREZXNjcmlw
dGlvbi53ZWlnaHQoKSkpCisgICAgICAgIHRyYWl0cyB8PSBrQ1RGb250VHJhaXRCb2xkOworICAg
IGZsb2F0IHNpemUgPSBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKTsKKworICAg
IFJldGFpblB0cjxDVEZvbnRSZWY+IGN0Rm9udDsKKyAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgo
IlVJQ1RGb250VGV4dFN0eWxlIikpCisgICAgICAgIGN0Rm9udCA9IGFkb3B0Q0YoY3JlYXRlQ1RG
b250V2l0aFRleHRTdHlsZShmYW1pbHksIHRyYWl0cywgc2l6ZSkpOworICAgIGVsc2UKKyAgICAg
ICAgY3RGb250ID0gYWRvcHRDRihjcmVhdGVDVEZvbnRXaXRoRmFtaWx5TmFtZUFuZFdlaWdodChm
YW1pbHksIHRyYWl0cywgc2l6ZSwgdG9DVEZvbnRXZWlnaHQoZm9udERlc2NyaXB0aW9uLndlaWdo
dCgpKSkpOworICAgIGlmICghY3RGb250KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IENURm9udFN5bWJvbGljVHJhaXRzIGFjdHVhbFRyYWl0cyA9IDA7CisgICAgaWYgKGlzRm9udFdl
aWdodEJvbGQoZm9udERlc2NyaXB0aW9uLndlaWdodCgpKSB8fCBmb250RGVzY3JpcHRpb24uaXRh
bGljKCkpCisgICAgICAgIGFjdHVhbFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGN0
Rm9udC5nZXQoKSk7CisKKyAgICBib29sIGlzQXBwbGVDb2xvckVtb2ppID0gQ1RGb250SXNBcHBs
ZUNvbG9yRW1vamkoY3RGb250LmdldCgpKTsKKworICAgIGJvb2wgc3ludGhldGljQm9sZCA9ICh0
cmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKSAmJiAhKGFjdHVhbFRyYWl0cyAmIGtDVEZvbnRUcmFp
dEJvbGQpICYmICFpc0FwcGxlQ29sb3JFbW9qaTsKKyAgICBib29sIHN5bnRoZXRpY09ibGlxdWUg
PSAodHJhaXRzICYga0NURm9udFRyYWl0SXRhbGljKSAmJiAhKGFjdHVhbFRyYWl0cyAmIGtDVEZv
bnRUcmFpdEl0YWxpYykgJiYgIWlzQXBwbGVDb2xvckVtb2ppOworCisgICAgRm9udFBsYXRmb3Jt
RGF0YSogcmVzdWx0ID0gbmV3IEZvbnRQbGF0Zm9ybURhdGEoY3RGb250LmdldCgpLCBzaXplLCBm
b250RGVzY3JpcHRpb24udXNlUHJpbnRlckZvbnQoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGlj
T2JsaXF1ZSwgZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCksIGZvbnREZXNjcmlwdGlvbi53
aWR0aFZhcmlhbnQoKSk7CisgICAgaWYgKGlzQXBwbGVDb2xvckVtb2ppKQorICAgICAgICByZXN1
bHQtPm1faXNFbW9qaSA9IHRydWU7CisgICAgcmV0dXJuIGFkb3B0UHRyKHJlc3VsdCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zY2Y4YmRjOTQ4
Zjg4NmJkYWUzMmE0NzdiMTA3YWYyZGVlMmI3ZGMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRTZXJ2aWNlc0lPUy5oCkBAIC0wLDAg
KzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKyNpZm5kZWYgRm9udFNlcnZpY2VzSU9TX2gKKyNkZWZpbmUgRm9udFNlcnZpY2Vz
SU9TX2gKKworI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGb250U2VydmljZXNJT1MgeworcHVibGljOgorICAgIEZvbnRTZXJ2aWNl
c0lPUyhDVEZvbnRSZWYpOworICAgIENHRmxvYXQgYXNjZW50KCkgeyByZXR1cm4gbV9hc2NlbnQ7
IH0KKyAgICBDR0Zsb2F0IGRlc2NlbnQoKSB7IHJldHVybiBtX2Rlc2NlbnQ7IH0KKyAgICBDR0Zs
b2F0IGxpbmVHYXAoKSB7IHJldHVybiBtX2xpbmVHYXA7IH0KKyAgICBDR0Zsb2F0IGxpbmVTcGFj
aW5nKCkgeyByZXR1cm4gbV9saW5lU3BhY2luZzsgfQorICAgIENHRmxvYXQgeEhlaWdodCgpIHsg
cmV0dXJuIG1feEhlaWdodDsgfQorICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0oKSB7IHJldHVybiBt
X3VuaXRzUGVyRW07IH0KKworcHJpdmF0ZToKKyAgICBDR0Zsb2F0IG1fYXNjZW50OworICAgIENH
RmxvYXQgbV9kZXNjZW50OworICAgIENHRmxvYXQgbV9saW5lR2FwOworICAgIENHRmxvYXQgbV9s
aW5lU3BhY2luZzsKKyAgICBDR0Zsb2F0IG1feEhlaWdodDsKKyAgICB1bnNpZ25lZCBtX3VuaXRz
UGVyRW07Cit9OworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2lvcy9Gb250U2VydmljZXNJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9pb3MvRm9udFNlcnZpY2VzSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyMjJiNTI1
MWNlYTljMWVhYTQ3MGQ2MWFjNjRkNDk1NjI1YjBmMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udFNlcnZpY2VzSU9TLm1tCkBAIC0w
LDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRm9udFNlcnZpY2Vz
SU9TLmgiCisKKyNpbXBvcnQgIkZvbnRNZXRyaWNzLmgiCisjaW1wb3J0IDxDb3JlR3JhcGhpY3Mv
Q29yZUdyYXBoaWNzLmg+CisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzUHJpdmF0
ZS5oPgorI2ltcG9ydCA8bWFjaC1vL2R5bGRfcHJpdi5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBmbG9hdCBrTGluZUhl
aWdodEFkanVzdG1lbnQgPSAwLjE1ZjsKKworc3RhdGljIGJvb2wgc2hvdWxkVXNlQWRqdXN0bWVu
dChDVEZvbnRSZWYgZm9udCwgYm9vbCBpc2lPUzdPckxhdGVyKQoreworICAgIFJldGFpblB0cjxO
U1N0cmluZz4gZmFtaWx5TmFtZSA9IGFkb3B0TlMoKE5TU3RyaW5nICopQ1RGb250Q29weUZhbWls
eU5hbWUoZm9udCkpOworICAgIGlmICghW2ZhbWlseU5hbWUgbGVuZ3RoXSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKFtmYW1pbHlOYW1lLmdldCgpIGNvbXBhcmU6QCJUaW1lcyIg
b3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0gPT0gTlNPcmRlcmVkU2FtZQorICAgICAg
ICB8fCBbZmFtaWx5TmFtZS5nZXQoKSBjb21wYXJlOkAiSGVsdmV0aWNhIiBvcHRpb25zOk5TQ2Fz
ZUluc2Vuc2l0aXZlU2VhcmNoXSA9PSBOU09yZGVyZWRTYW1lCisgICAgICAgIHx8IFtmYW1pbHlO
YW1lLmdldCgpIGNvbXBhcmU6QCIuSGVsdmV0aWNhIE5ldWVVSSIgb3B0aW9uczpOU0Nhc2VJbnNl
bnNpdGl2ZVNlYXJjaF0gPT0gTlNPcmRlcmVkU2FtZSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgaWYgKCFpc2lPUzdPckxhdGVyICYmIFtmYW1pbHlOYW1lLmdldCgpIGNvbXBhcmU6QCIuSGVs
dmV0aWNhIE5ldWVVSUxlZ2FjeSIgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0gPT0g
TlNPcmRlcmVkU2FtZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3N0YXRpYyBib29sIGlzQ291cmllcihDVEZvbnRSZWYgZm9udCkKK3sKKyAgICBSZXRh
aW5QdHI8TlNTdHJpbmc+IGZhbWlseU5hbWUgPSBhZG9wdE5TKChOU1N0cmluZyAqKUNURm9udENv
cHlGYW1pbHlOYW1lKGZvbnQpKTsKKyAgICBpZiAoIVtmYW1pbHlOYW1lIGxlbmd0aF0pCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gW2ZhbWlseU5hbWUuZ2V0KCkgY29tcGFyZTpA
IkNvdXJpZXIiIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdID09IE5TT3JkZXJlZFNh
bWU7Cit9CisKK0ZvbnRTZXJ2aWNlc0lPUzo6Rm9udFNlcnZpY2VzSU9TKENURm9udFJlZiBmb250
KQoreworICAgIENHRm9udERlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgICBSZXRhaW5QdHI8Q0dG
b250UmVmPiBjZ0ZvbnQgPSBhZG9wdENGKENURm9udENvcHlHcmFwaGljc0ZvbnQoZm9udCwgTlVM
TCkpOworICAgIG1feEhlaWdodCA9IENHRm9udEdldERlc2NyaXB0b3IoY2dGb250LmdldCgpLCAm
ZGVzY3JpcHRvcikgPyAoZGVzY3JpcHRvci54SGVpZ2h0IC8gMTAwMCkgKiBDVEZvbnRHZXRTaXpl
KGZvbnQpIDogMDsKKyAgICBtX3VuaXRzUGVyRW0gPSBDVEZvbnRHZXRVbml0c1BlckVtKGZvbnQp
OworICAgIENHRmxvYXQgbGluZUdhcDsKKyAgICBDR0Zsb2F0IGFzY2VudDsKKyAgICBDR0Zsb2F0
IGRlc2NlbnQ7CisgICAgc3RhdGljIGJvb2wgaXNpT1M3T3JMYXRlciA9IGR5bGRfZ2V0X3Byb2dy
YW1fc2RrX3ZlcnNpb24oKSA+PSBEWUxEX0lPU19WRVJTSU9OXzdfMDsKKyAgICBpZiAoaXNpT1M3
T3JMYXRlcikgeworICAgICAgICAvLyBVc2UgQ29yZVRleHQgQVBJIGluIGlPUyA3LgorICAgICAg
ICBhc2NlbnQgPSBDVEZvbnRHZXRBc2NlbnQoZm9udCk7CisgICAgICAgIGRlc2NlbnQgPSBDVEZv
bnRHZXREZXNjZW50KGZvbnQpOworICAgICAgICBsaW5lR2FwID0gQ1RGb250R2V0TGVhZGluZyhm
b250KTsKKyAgICB9IGVsc2UgeworICAgICAgICBmbG9hdCBwb2ludFNpemUgPSBDVEZvbnRHZXRT
aXplKGZvbnQpOworICAgICAgICBjb25zdCBDR0ZvbnRITWV0cmljcyAqbWV0cmljcyA9IENHRm9u
dEdldEhNZXRyaWNzKGNnRm9udC5nZXQoKSk7CisgICAgICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0g
PSBDR0ZvbnRHZXRVbml0c1BlckVtKGNnRm9udC5nZXQoKSk7CisKKyAgICAgICAgbGluZUdhcCA9
IChkeWxkX2dldF9wcm9ncmFtX3Nka192ZXJzaW9uKCkgPj0gRFlMRF9JT1NfVkVSU0lPTl8zXzAp
ID8gc2NhbGVFbVRvVW5pdHMobWV0cmljcy0+bGluZUdhcCwgdW5pdHNQZXJFbSkgKiBwb2ludFNp
emUgOiAwLjA7CisKKyAgICAgICAgYm9vbCBpc2lPUzZPckxhdGVyID0gZHlsZF9nZXRfcHJvZ3Jh
bV9zZGtfdmVyc2lvbigpID49IERZTERfSU9TX1ZFUlNJT05fNl8wOworICAgICAgICBpZiAoIWlz
aU9TNk9yTGF0ZXIgfHwgIWlzQ291cmllcihmb250KSkgeworICAgICAgICAgICAgYXNjZW50ID0g
KHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3MtPmFzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUp
OworICAgICAgICAgICAgZGVzY2VudCA9ICgtc2NhbGVFbVRvVW5pdHMobWV0cmljcy0+ZGVzY2Vu
dCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gRm9yIENvdXJpZXIsIHdlIHVzZSBDb3VyaWVyIE5ldydzIGV4YWN0IHZhbHVlcywgYmVj
YXVzZSBpbiBpT1MgNS4xIGFuZCBlYXJsaWVyLAorICAgICAgICAgICAgLy8gQ291cmllciBOZXcg
d2FzIHN1YnN0aXR1dGVkIGZvciBDb3VyaWVyIGJ5IFdlYktpdC4KKyAgICAgICAgICAgIGFzY2Vu
dCA9IChzY2FsZUVtVG9Vbml0cygxNzA1LCAyMDQ4KSAqIHBvaW50U2l6ZSk7CisgICAgICAgICAg
ICBkZXNjZW50ID0gKHNjYWxlRW1Ub1VuaXRzKDYxNSwgMjA0OCkgKiBwb2ludFNpemUpOworICAg
ICAgICB9CisgICAgfQorICAgIENHRmxvYXQgYWRqdXN0bWVudCA9IChzaG91bGRVc2VBZGp1c3Rt
ZW50KGZvbnQsIGlzaU9TN09yTGF0ZXIpKSA/IGNlaWwoKGFzY2VudCArIGRlc2NlbnQpICoga0xp
bmVIZWlnaHRBZGp1c3RtZW50KSA6IDA7CisKKyAgICBtX2FzY2VudCA9IGFzY2VudCArIGFkanVz
dG1lbnQ7CisgICAgbV9kZXNjZW50ID0gZGVzY2VudDsKKyAgICBtX2xpbmVHYXAgPSBjZWlsZihs
aW5lR2FwKTsKKyAgICBtX2xpbmVTcGFjaW5nID0gY2VpbChhc2NlbnQpICsgYWRqdXN0bWVudCAr
IGNlaWwoZGVzY2VudCkgKyBtX2xpbmVHYXA7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBo
aWNzQ29udGV4dDNESU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
R3JhcGhpY3NDb250ZXh0M0RJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzNiYTA5ZDU5OWM4Zjg1ZDQ1MGVk
ZmZmZmIyOTNkMWI3NWI0Njg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBoaWNzQ29udGV4dDNESU9TLmgKQEAgLTAsMCArMSw2NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RJT1NfaAorI2RlZmluZSBHcmFw
aGljc0NvbnRleHQzRElPU19oCisKKyNkZWZpbmUgZ2xCaW5kRnJhbWVidWZmZXJFWFQgZ2xCaW5k
RnJhbWVidWZmZXIKKyNkZWZpbmUgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUIGdsQmluZFJlbmRlcmJ1
ZmZlcgorI2RlZmluZSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQgZ2xDaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzCisjZGVmaW5lIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUIGdsRGVsZXRlRnJhbWVi
dWZmZXJzCisjZGVmaW5lIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCBnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnMKKyNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCBnbEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyCisjZGVmaW5lIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQgZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyRAorI2RlZmluZSBnbEdlbmVyYXRlTWlwbWFwRVhUIGdsR2VuZXJhdGVNaXBt
YXAKKyNkZWZpbmUgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQgZ2xHZW5GcmFtZWJ1ZmZlcnMKKyNkZWZp
bmUgZ2xHZW5SZW5kZXJidWZmZXJzRVhUIGdsR2VuUmVuZGVyYnVmZmVycworI2RlZmluZSBnbEdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUIGdsR2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaXYKKyNkZWZpbmUgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVY
VCBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2CisjZGVmaW5lIGdsSXNGcmFtZWJ1ZmZlckVY
VCBnbElzRnJhbWVidWZmZXIKKyNkZWZpbmUgZ2xJc1JlbmRlcmJ1ZmZlckVYVCBnbElzUmVuZGVy
YnVmZmVyCisjZGVmaW5lIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCBnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2UKKyNkZWZpbmUgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQgZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBUFBMRQorCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFD
SE1FTlQwX0VYVCBHTF9DT0xPUl9BVFRBQ0hNRU5UMAorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5D
SUw4X0VYVCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUworI2RlZmluZSBHTF9ERVBUSF9BVFRBQ0hN
RU5UX0VYVCAgR0xfREVQVEhfQVRUQUNITUVOVAorI2RlZmluZSBHTF9EUkFXX0ZSQU1FQlVGRkVS
X0VYVCBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FQUExFCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0NP
TVBMRVRFX0VYVCBHTF9GUkFNRUJVRkZFUl9DT01QTEVURQorI2RlZmluZSBHTF9GUkFNRUJVRkZF
Ul9FWFQgR0xfRlJBTUVCVUZGRVIKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUIEdMX01BWF9T
QU1QTEVTX0FQUExFCisjZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfRVhUIEdMX1JFQURfRlJB
TUVCVUZGRVJfQVBQTEUKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0VYVCBHTF9SRU5ERVJCVUZG
RVIKKyNpZm5kZWYgR0xfUkdCOAorI2RlZmluZSBHTF9SR0I4IEdMX1JHQgorI2VuZGlmCisjaWZu
ZGVmIEdMX1JHQkE4CisjZGVmaW5lIEdMX1JHQkE4IEdMX1JHQkEKKyNlbmRpZgorI2RlZmluZSBH
TF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhUIEdMX1NURU5DSUxfQVRUQUNITUVOVAorI2RlZmluZSBH
TF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYgR0xfUkdCQQorCisjZW5kaWYgLy8gR3JhcGhpY3ND
b250ZXh0M0RJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL0ljb25JT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
SWNvbklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzcyOGVkYmZiZDcxNWE4YmRmZGJlY2Y3MjMwNDg4MTQ2
Yzg0NzBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL0ljb25JT1MubW0KQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiSWNv
bi5oIgorCisjaW1wb3J0ICJCaXRtYXBJbWFnZS5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK0ljb246Okljb24oQ0dJbWFnZVJlZiBp
bWFnZSkKKyAgICA6IG1fY2dJbWFnZShpbWFnZSkKK3sKK30KKworSWNvbjo6fkljb24oKQorewor
fQorCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgLypmaWxlbmFtZXMqLykKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
UGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9ySW1hZ2UoTmF0aXZlSW1hZ2VQdHIg
aW1hZ2VSZWYpCit7CisgICAgaWYgKCFpbWFnZVJlZikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEljb24oaW1hZ2VSZWYpKTsKK30KKwordm9pZCBJ
Y29uOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KQoreworICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4
dCk7CisKKyAgICBmbG9hdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChtX2NnSW1hZ2UuZ2V0KCkp
OworICAgIGZsb2F0IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQobV9jZ0ltYWdlLmdldCgpKTsK
KyAgICBGbG9hdFNpemUgc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBGbG9hdFJlY3Qgc3JjUmVj
dCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xv
clNwYWNlRGV2aWNlUkdCOworCisgICAgY29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShJbnRlcnBvbGF0aW9uSGlnaCk7CisgICAgY29udGV4dC0+ZHJhd05hdGl2ZUltYWdlKG1f
Y2dJbWFnZS5nZXQoKSwgc2l6ZSwgY29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIDEuMGYs
IENvbXBvc2l0ZVNvdXJjZU92ZXIsIEJsZW5kTW9kZU5vcm1hbCwgRGVmYXVsdEltYWdlT3JpZW50
YXRpb24pOworfQorCit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRklPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0luYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkZJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNWJlNzNjZTlhMWNmZDQ2YTMyZTU1
ZWE3ZDc1NWY0OWZlM2MwMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MuaApAQCAtMCww
ICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9T
X2gKKyNkZWZpbmUgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPU19oCisKKyNpZiBFTkFCTEUo
VklERU8pICYmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkYuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUyA6IHB1YmxpYyBJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TPiBjcmVhdGUoQVZGSW5iYW5kVHJhY2tQYXJlbnQqIHBh
cmVudCwgaW50IGludGVybmFsSUQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBs
YW5ndWFnZSwgY29uc3QgU3RyaW5nJiB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKHBhcmVudCwgaW50ZXJuYWxJRCwg
bmFtZSwgbGFuZ3VhZ2UsIHR5cGUpKTsKKyAgICB9CisKKyAgICB+SW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRklPUygpOworCisgICAgdmlydHVhbCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpLaW5k
IGtpbmQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEF0b21pY1N0cmluZyBsYWJlbCgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIHZpcnR1YWwgQXRvbWljU3Ry
aW5nIGxhbmd1YWdlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9sYW5ndWFnZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc0xlZ2FjeUNsb3NlZENhcHRpb25zVHJhY2soKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBmYWxzZTsgfQorICAgIGludCBpbnRlcm5hbElEKCkgY29uc3QgeyByZXR1cm4g
bV9pbnRlcm5hbElEOyB9CisKK3Byb3RlY3RlZDoKKyAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGSU9TKEFWRkluYmFuZFRyYWNrUGFyZW50KiwgaW50LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgbGFuZ3VhZ2UsIGNvbnN0IFN0cmluZyYgdHlwZSk7CisKKyAgICBTdHJpbmcg
bV9uYW1lOworICAgIFN0cmluZyBtX2xhbmd1YWdlOworICAgIFN0cmluZyBtX3R5cGU7CisgICAg
aW50IG1faW50ZXJuYWxJRDsKK307Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYmIFBM
QVRGT1JNKElPUykKKyNlbmRpZiAvLyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTNhZmIyODAw
MDhhNDk4ZTQzZGY2ZTVhNzdlZGY5ZTNiNDk3MzQwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
SU9TLm1tCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShWSURFTykgJiYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0ICJJbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGSU9TLmgiCisKKyNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2lt
cG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW1wb3J0ICJJbmJhbmRUZXh0VHJhY2tQcml2YXRl
LmgiCisjaW1wb3J0ICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmgiCisjaW1wb3J0ICJMb2dn
aW5nLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M6OkluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZJT1MoQVZGSW5iYW5kVHJhY2tQYXJlbnQqIHBhcmVudCwgaW50IGludGVybmFsSUQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSwgY29uc3QgU3RyaW5nJiB0eXBl
KQorICAgIDogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRihwYXJlbnQpCisgICAgLCBtX25hbWUo
bmFtZSkKKyAgICAsIG1fbGFuZ3VhZ2UobGFuZ3VhZ2UpCisgICAgLCBtX3R5cGUodHlwZSkKKyAg
ICAsIG1faW50ZXJuYWxJRChpbnRlcm5hbElEKQoreworfQorCitJbmJhbmRUZXh0VHJhY2tQcml2
YXRlQVZGSU9TOjp+SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUygpCit7Cit9CisKK0luYmFu
ZFRleHRUcmFja1ByaXZhdGU6OktpbmQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUzo6a2lu
ZCgpIGNvbnN0Cit7CisgICAgaWYgKFttX3R5cGUgaXNFcXVhbFRvU3RyaW5nOkAiY2FwdGlvbnMi
XSkKKyAgICAgICAgcmV0dXJuIENhcHRpb25zOworICAgIGlmIChbbV90eXBlIGlzRXF1YWxUb1N0
cmluZzpAInN1YnRpdGxlcyJdKQorICAgICAgICByZXR1cm4gU3VidGl0bGVzOworCisgICAgcmV0
dXJuIENhcHRpb25zOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL01lZGlhUGxheWVy
UHJpdmF0ZUlPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL01lZGlh
UGxheWVyUHJpdmF0ZUlPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiYWMyNTc4Yzg2NGVkMWRkNDMxZjZkMTA2
MWI1ODliN2IyNzBlMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9pb3MvTWVkaWFQbGF5ZXJQcml2YXRlSU9TLmgKQEAgLTAsMCArMSwyNDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE1lZGlhUGxheWVyUHJp
dmF0ZUlPU19oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZUlPU19oCisKKyNpZiBFTkFCTEUo
VklERU8pICYmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkYuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVy
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJveHkuaCIKKyNpbmNsdWRlIDxvYmpj
L3J1bnRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKworT0JKQ19DTEFTUyBOU0RpY3Rpb25hcnk7CitPQkpDX0NMQVNTIE5TTXV0
YWJsZURpY3Rpb25hcnk7CitPQkpDX0NMQVNTIE5TTnVtYmVyOworT0JKQ19DTEFTUyBOU09iamVj
dDsKK09CSkNfQ0xBU1MgV2ViQ29yZU1lZGlhUGxheWVyTm90aWZpY2F0aW9uSGVscGVyOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M7
CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUlPUyA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZh
dGVJbnRlcmZhY2UsIHB1YmxpYyBBVkZJbmJhbmRUcmFja1BhcmVudCB7CitwdWJsaWM6CisKKyAg
ICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsK
KyAgICB2aXJ0dWFsIH5NZWRpYVBsYXllclByaXZhdGVJT1MoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBkZWxpdmVyTm90aWZpY2F0aW9uKE1lZGlhUGxheWVyUHJveHlOb3RpZmljYXRpb25UeXBlKSBP
VkVSUklERTsKKyAgICBib29sIGNhbGxiYWNrc0RlbGF5ZWQoKSB7IHJldHVybiBtX2RlbGF5Q2Fs
bGJhY2tzID4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9QbGF5KCkgT1ZFUlJJREU7
CisgICAgdm9pZCBwcm9jZXNzRGVmZXJyZWRSZXF1ZXN0cygpOworCisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorICAgIHZvaWQgaW5iYW5kVGV4dFRyYWNrc0NoYW5nZWQoTlNBcnJheSAqKTsKKyAg
ICB2b2lkIHByb2Nlc3NJbmJhbmRUZXh0VHJhY2tDdWUoTlNBcnJheSAqLCBkb3VibGUpOworICAg
IHZvaWQgdGV4dFRyYWNrV2FzU2VsZWN0ZWRCeVBsdWdpbihOU0RpY3Rpb25hcnkgKik7CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICBNZWRpYVBsYXllclByaXZhdGVJT1MoTWVkaWFQbGF5ZXIqKTsK
KworICAgIC8vIEVuZ2luZSBzdXBwb3J0CisgICAgc3RhdGljIFBhc3NPd25QdHI8TWVkaWFQbGF5
ZXJQcml2YXRlSW50ZXJmYWNlPiBjcmVhdGUoTWVkaWFQbGF5ZXIqKTsKKyAgICBzdGF0aWMgdm9p
ZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKKyAgICBzdGF0aWMg
TWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVT
dXBwb3J0UGFyYW1ldGVycyYpOworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKKyAg
ICB2aXJ0dWFsIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
QXVkaW8oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2Ny
ZWVuKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29s
IGNhbkxvYWRQb3N0ZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCB2b2lkIHNldFBvc3Rlcihjb25zdCBTdHJpbmcmIHVybCkgT1ZFUlJJREU7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udHJvbHMoYm9vbCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZv
aWQgZW50ZXJGdWxsc2NyZWVuKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxs
c2NyZWVuKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQ2xvc2VkQ2FwdGlvbnMo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xvc2VkQ2FwdGlvbnNWaXNp
YmxlKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIGxvYWQoY29uc3QgU3RyaW5n
JiB1cmwpIE9WRVJSSURFOworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgdmlydHVhbCB2
b2lkIGxvYWQoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxIVE1MTWVkaWFTb3VyY2U+KSBPVkVS
UklERSB7IH0KKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxMb2FkKCkgT1ZFUlJJREU7
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGxheSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBw
YXVzZSgpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIHBhdXNlZCgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgYm9vbCBzZWVraW5nKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2
aXJ0dWFsIGZsb2F0IGR1cmF0aW9uKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBmbG9h
dCBjdXJyZW50VGltZSgpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNlZWso
ZmxvYXQgdGltZSkgT1ZFUlJJREU7CisgICAgdm9pZCBzZXRFbmRUaW1lKGZsb2F0KTsKKworICAg
IGZsb2F0IHJhdGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmF0ZShmbG9hdCBpblJh
dGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgZmxvYXQgdm9sdW1lKCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZShmbG9hdCBpblZvbHVtZSkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHNldE11dGVkKGJvb2wgaW5NdXRlKSBPVkVSUklERTsKKworICAgIGlu
dCBkYXRhUmF0ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgTWVkaWFQbGF5
ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIAorICAgIGZs
b2F0IG1heFRpbWVCdWZmZXJlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgbWF4VGltZVNl
ZWthYmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRpbWVSYW5n
ZXM+IGJ1ZmZlcmVkKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlkTG9h
ZGluZ1Byb2dyZXNzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgYm9vbCB0b3RhbEJ5dGVzS25vd24o
KSBjb25zdDsKKyAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VmlzaWJsZShib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6
ZShjb25zdCBJbnRTaXplJikgT1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHBhaW50
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKKworI2lmIEVOQUJM
RShJT1NfQUlSUExBWSkKKyAgICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50UGxheWJhY2tUYXJnZXRX
aXJlbGVzcygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzaG93UGxheWJhY2tU
YXJnZXRQaWNrZXIoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNXaXJlbGVzc1Bs
YXliYWNrVGFyZ2V0cygpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIHdpcmVs
ZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKGJvb2wpIE9WRVJSSURFOworCisg
ICAgdmlydHVhbCB2b2lkIHNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJz
KGJvb2wpIE9WRVJSSURFOworI2VuZGlmCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25z
dCBPVkVSUklERTsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIHNldE1lZGlhUGxheWVyUHJv
eHkoV2ViTWVkaWFQbGF5ZXJQcm94eSopIE9WRVJSSURFOworICAgIHZvaWQgcHJvY2Vzc1BlbmRp
bmdSZXF1ZXN0cygpOworCisgICAgdm9pZCBzZXREZWxheUNhbGxiYWNrcyhib29sIGRvRGVsYXkp
IHsgbV9kZWxheUNhbGxiYWNrcyArPSAoZG9EZWxheSA/IDEgOiAtMSk7IH0KKworICAgIGJvb2wg
dXNpbmdOZXR3b3JrKCkgY29uc3QgeyByZXR1cm4gbV91c2luZ05ldHdvcms7IH0KKyAgICBib29s
IGluRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1faW5GdWxsU2NyZWVuOyB9CisKKyAgICB2
b2lkIGFkZERlZmVycmVkUmVxdWVzdChOU1N0cmluZyAqbmFtZSwgaWQgdmFsdWUpOworCisgICAg
dmlydHVhbCBTdHJpbmcgZW5naW5lRGVzY3JpcHRpb24oKSBjb25zdCB7IFN0cmluZyhBU0NJSUxp
dGVyYWwoImlPUyIpKTsgfQorCisgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgcmVhZHlGb3JQbGF5YmFjaygpIGNvbnN0IE9WRVJSSURFOworCisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1RleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFRleHRUcmFja1JlcHJlc2VudGF0
aW9uKFRleHRUcmFja1JlcHJlc2VudGF0aW9uKik7CisKKyAgICB2b2lkIGNsZWFyVGV4dFRyYWNr
cygpOworICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0VHJhY2soTlNOdW1iZXIgKik7CisgICAgdmly
dHVhbCB2b2lkIHRyYWNrTW9kZUNoYW5nZWQoKSBPVkVSUklERTsKKyAgICB2b2lkIHNldE91dE9m
QmFuZFRleHRUcmFja3MoTlNBcnJheSAqKTsKKworICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRz
VGV4dFRyYWNrQ29udHJvbHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZT4gdGV4dFRyYWNrTWVudSgp
OworCisgICAgdm9pZCBvdXRPZkJhbmRUZXh0VHJhY2tzQ2hhbmdlZCgpOworICAgIHZvaWQgdGV4
dFRyYWNrV2FzU2VsZWN0ZWRCeU1lZGlhRWxlbWVudChQYXNzUmVmUHRyPFBsYXRmb3JtVGV4dFRy
YWNrPik7CisjZW5kaWYKKworcHJpdmF0ZToKKworICAgIGNsYXNzIFBsYXRmb3JtVGV4dFRyYWNr
TWVudUludGVyZmFjZUlPUyA6IHB1YmxpYyBQbGF0Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2Ug
eworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1UZXh0VHJh
Y2tNZW51SW50ZXJmYWNlSU9TPiBjcmVhdGUoTWVkaWFQbGF5ZXJQcml2YXRlSU9TKiBvd25lcikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybVRleHRU
cmFja01lbnVJbnRlcmZhY2VJT1Mob3duZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1
YWwgflBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVyZmFjZUlPUygpOworCisgICAgICAgIHZpcnR1
YWwgdm9pZCB0cmFja3NEaWRDaGFuZ2UoKSBPVkVSUklERQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobV9vd25lcikKKyAgICAgICAgICAgICAgICBtX293bmVyLT5vdXRPZkJhbmRUZXh0VHJh
Y2tzQ2hhbmdlZCgpOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHRyYWNrV2Fz
U2VsZWN0ZWQoUGFzc1JlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4gdHJhY2spIE9WRVJSSURFCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX293bmVyKQorICAgICAgICAgICAgICAgIG1fb3du
ZXItPnRleHRUcmFja1dhc1NlbGVjdGVkQnlNZWRpYUVsZW1lbnQodHJhY2spOworICAgICAgICB9
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldENsaWVudChQbGF0Zm9ybVRleHRUcmFja01lbnVD
bGllbnQqIGNsaWVudCkgT1ZFUlJJREUgeyBtX2NsaWVudCA9IGNsaWVudDsgfQorICAgICAgICBQ
bGF0Zm9ybVRleHRUcmFja01lbnVDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBQbGF0Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJ
T1MoTWVkaWFQbGF5ZXJQcml2YXRlSU9TKik7CisKKyAgICAgICAgUGxhdGZvcm1UZXh0VHJhY2tN
ZW51Q2xpZW50KiBtX2NsaWVudDsKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlSU9TKiBtX293
bmVyOworICAgIH07CisKKyAgICBNZWRpYVBsYXllciogbV9tZWRpYVBsYXllcjsKKyAgICBSZXRh
aW5QdHI8TlNPYmplY3Q+IG1fbWVkaWFQbGF5ZXJIZWxwZXI7IC8vIFRoaXMgaXMgdGhlIE1lZGlh
UGxheWVyUHJveHkuCisgICAgUmV0YWluUHRyPFdlYkNvcmVNZWRpYVBsYXllck5vdGlmaWNhdGlv
bkhlbHBlcj4gbV9vYmpjSGVscGVyOworICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5
PiBtX2RlZmVycmVkUHJvcGVydGllczsKKworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUg
bV9uZXR3b3JrU3RhdGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRl
OworCisgICAgZW51bSBCdWZmZXJpbmdTdGF0ZSB7IEVtcHR5LCBVbmxpa2VsZXlUb0tlZXBVcCwg
TGlrZWxleVRvS2VlcFVwLCBGdWxsIH07CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAg
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUyogbV9jdXJyZW50VHJhY2s7CisgICAgVmVjdG9y
PFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TPiA+IG1fdGV4dFRyYWNrczsKKyAg
ICBSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlSU9TPiBtX21lbnVJbnRlcmZh
Y2U7CisjZW5kaWYKKworICAgIGludCBtX2RlbGF5Q2FsbGJhY2tzOworICAgIGludCBtX2NoYW5n
aW5nVm9sdW1lOworICAgIG11dGFibGUgdW5zaWduZWQgbV9ieXRlc0xvYWRlZEF0TGFzdERpZExv
YWRpbmdQcm9ncmVzczsKKyAgICBmbG9hdCBtX3JlcXVlc3RlZFJhdGU7CisgICAgQnVmZmVyaW5n
U3RhdGUgbV9idWZmZXJpbmdTdGF0ZTsKKyAgICBib29sIG1fdmlzaWJsZSA6IDE7CisgICAgYm9v
bCBtX3VzaW5nTmV0d29yayA6IDE7CisgICAgYm9vbCBtX2luRnVsbFNjcmVlbiA6IDE7CisgICAg
Ym9vbCBtX3Nob3VsZFByZXBhcmVUb1BsYXkgOiAxOworICAgIGJvb2wgbV9wcmVwYXJpbmdUb1Bs
YXkgOiAxOworICAgIGJvb2wgbV9wYXVzZVJlcXVlc3RlZCA6IDE7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0ZUlPUwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL01lZGlhUGxh
eWVyUHJpdmF0ZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9N
ZWRpYVBsYXllclByaXZhdGVJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWVlYTcyNzlkYWVjZjAxY2QwOTEx
ZTExZTUwNDdjNDkwMThkZDYwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2lvcy9NZWRpYVBsYXllclByaXZhdGVJT1MubW0KQEAgLTAsMCArMSwx
MjYzIEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0ICJN
ZWRpYVBsYXllclByaXZhdGVJT1MuaCIKKworI2ltcG9ydCAiR3JhcGhpY3NMYXllckNBLmgiCisj
aW1wb3J0ICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TLmgiCisjaW1wb3J0ICJMb2dnaW5n
LmgiCisjaW1wb3J0ICJQbGF0Zm9ybVRleHRUcmFjay5oIgorI2ltcG9ydCAiVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24uaCIKKyNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKKyNpbXBvcnQgIlVSTC5oIgor
I2ltcG9ydCAiV0FLQXBwS2l0U3R1YnMuaCIKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIK
KyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbXBvcnQgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK0BpbnRlcmZhY2UgV2ViQ29y
ZU1lZGlhUGxheWVyTm90aWZpY2F0aW9uSGVscGVyIDogTlNPYmplY3QKK3sKKyAgICBNZWRpYVBs
YXllclByaXZhdGVJT1MqIF9jbGllbnQ7CisgICAgQk9PTCBfZGVmZXJyZWRQcm9wZXJ0aWVzU2No
ZWR1bGVkOworfQorLSAoaWQpaW5pdFdpdGhDbGllbnQ6KE1lZGlhUGxheWVyUHJpdmF0ZUlPUyAq
KWNsaWVudDsKKy0gKHZvaWQpZGlzY29ubmVjdDsKKy0gKHZvaWQpY2FuY2VsUGVuZGluZ1JlcXVl
c3RzOworLSAodm9pZClkZWxheU5vdGlmaWNhdGlvbjooaW50KW5vdGlmaWNhdGlvbjsKKy0gKHZv
aWQpZGVsaXZlck5vdGlmaWNhdGlvbjooTlNOdW1iZXIgKilub3RpZmljYXRpb247CistICh2b2lk
KXNjaGVkdWxlUHJlcGFyZVRvUGxheVdpdGhPcHRpb25hbERlbGF5OihOU051bWJlciAqKXNob3Vs
ZERlbGF5OworLSAodm9pZClzY2hlZHVsZURlZmVycmVkUHJvcGVydGllc1dpdGhPcHRpb25hbERl
bGF5OihOU051bWJlciAqKXNob3VsZERlbGF5OworCistICh2b2lkKXBsdWdpbkVsZW1lbnRJbkJh
bmRBbHRlcm5hdGVUZXh0VHJhY2tzRGlkQ2hhbmdlOihOU0FycmF5ICopdHJhY2tzOworLSAodm9p
ZClwbHVnaW5FbGVtZW50RGlkU2VsZWN0VGV4dFRyYWNrOihOU1N0cmluZyAqKXRyYWNrSWQ7Cist
ICh2b2lkKXBsdWdpbkVsZW1lbnREaWRPdXRwdXRBdHRyaWJ1dGVkU3RyaW5nczooTlNBcnJheSAq
KXN0cmluZ3MgbmF0aXZlU2FtcGxlQnVmZmVyczooTlNBcnJheSAqKWJ1ZmZlcnMgZm9yVGltZToo
TlNUaW1lSW50ZXJ2YWwpdGltZTsKK0BlbmQKKworLy8gUHJpdmF0ZSBzZWxlY3RvcnMgaW1wbGVt
ZW50ZWQgYnkgdGhlIG1lZGlhIHBsYXllciBwcm94eSBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIHBs
dWctaW4uCitAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJNZWRpYVBsYXllclByb3h5X0V4dHJhcykK
Ky0gKHZvaWQpX2F0dHJpYnV0ZUNoYW5nZWQ6KE5TU3RyaW5nICopbmFtZSB2YWx1ZTooTlNTdHJp
bmcgKil2YWx1ZTsKKy0gKEJPT0wpX3JlYWR5Rm9yUGxheWJhY2s7CitAZW5kCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY29uc3QgaW50IGtSZXF1aXJlZEhlbHBlckludGVyZmFjZVZlcnNpb24g
PSAxOworCitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBEZWZlcnJlZFByb3BlcnR5Q29udHJvbHNL
ZXkgPSBAImNvbnRyb2xzIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IERlZmVycmVkUHJvcGVy
dHlQb3N0ZXJLZXkgPSBAInBvc3RlciI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBEZWZlcnJl
ZFByb3BlcnR5U3JjS2V5ID0gQCJzcmMiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgRGVmZXJy
ZWRQbGF5S2V5ID0gQCJwbGF5IjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IERlZmVycmVkUHJv
cGVydHlTZWxlY3RlZFRyYWNrS2V5ID0gQCJzZWxlY3RlZHRyYWNrIjsKK3N0YXRpYyBOU1N0cmlu
ZyAqIGNvbnN0IERlZmVycmVkUHJvcGVydHlPdXRPZkJhbmRUcmFja3NLZXkgPSBAIm91dG9mYmFu
ZHRyYWNrcyI7CisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQorc3RhdGljIE5TU3RyaW5nICogY29u
c3QgRGVmZXJyZWRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCA9IEAid2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWQiOworI2VuZGlmCisKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFRl
eHRUcmFja0Rpc3BsYXlOYW1lS2V5ID0gQCJkaXNwbGF5bmFtZSI7CitzdGF0aWMgTlNTdHJpbmcg
KiBjb25zdCBUZXh0VHJhY2tMb2NhbGVJZGVudGlmaWVyS2V5ID0gQCJsb2NhbGVpZGVudGlmaWVy
IjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFRleHRUcmFja1N1YnRpdGxlc0tleSA9IEAic3Vi
dGl0bGVzIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFRleHRUcmFja0NhcHRpb25zS2V5ID0g
QCJjYXB0aW9ucyI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBUZXh0VHJhY2tUeXBlS2V5ID0g
QCJ0eXBlIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFRleHRUcmFja0lES2V5ID0gQCJpZCI7
CisKK2NvbnN0IGludCBUZXh0VHJhY2tPZmZNZW51SXRlbUlEID0gLTE7Citjb25zdCBpbnQgVGV4
dFRyYWNrQXV0b01lbnVJdGVtSUQgPSAtMjsKKworTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpQbGF0
Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1M6OlBsYXRmb3JtVGV4dFRyYWNrTWVudUludGVy
ZmFjZUlPUyhNZWRpYVBsYXllclByaXZhdGVJT1MqIG93bmVyKQorICAgIDogbV9jbGllbnQobnVs
bHB0cikKKyAgICAsIG1fb3duZXIob3duZXIpCit7Cit9CisgICAgICAgIAorTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpQbGF0Zm9ybVRleHRUcmFja01lbnVJbnRlcmZhY2VJT1M6On5QbGF0Zm9ybVRl
eHRUcmFja01lbnVJbnRlcmZhY2VJT1MoKQoreworICAgIG1fb3duZXIgPSBudWxscHRyOworICAg
IG1fY2xpZW50ID0gbnVsbHB0cjsKK30KKworUGFzc093blB0cjxNZWRpYVBsYXllclByaXZhdGVJ
bnRlcmZhY2U+IE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5
ZXIpCit7IAorICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWVkaWFQbGF5ZXJQcml2YXRlSU9TKHBs
YXllcikpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cmVnaXN0ZXJNZWRpYUVu
Z2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgaWYgKGlzQXZhaWxh
YmxlKCkpCisgICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBw
b3J0c1R5cGUsIDAsIDAsIDApOworfQorCitNZWRpYVBsYXllclByaXZhdGVJT1M6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUlPUyhNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogbV9tZWRpYVBsYXllcihw
bGF5ZXIpCisgICAgLCBtX29iamNIZWxwZXIoYWRvcHROUyhbW1dlYkNvcmVNZWRpYVBsYXllck5v
dGlmaWNhdGlvbkhlbHBlciBhbGxvY10gaW5pdFdpdGhDbGllbnQ6dGhpc10pKQorICAgICwgbV9u
ZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQorICAgICwgbV9yZWFkeVN0YXRlKE1lZGlh
UGxheWVyOjpIYXZlTm90aGluZykKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgLCBtX2N1
cnJlbnRUcmFjayhudWxscHRyKQorI2VuZGlmCisgICAgLCBtX2RlbGF5Q2FsbGJhY2tzKDApCisg
ICAgLCBtX2NoYW5naW5nVm9sdW1lKDApCisgICAgLCBtX2J5dGVzTG9hZGVkQXRMYXN0RGlkTG9h
ZGluZ1Byb2dyZXNzKDApCisgICAgLCBtX3JlcXVlc3RlZFJhdGUoMCkKKyAgICAsIG1fYnVmZmVy
aW5nU3RhdGUoRW1wdHkpCisgICAgLCBtX3Zpc2libGUoZmFsc2UpCisgICAgLCBtX3VzaW5nTmV0
d29yayhmYWxzZSkKKyAgICAsIG1faW5GdWxsU2NyZWVuKGZhbHNlKQorICAgICwgbV9zaG91bGRQ
cmVwYXJlVG9QbGF5KGZhbHNlKQorICAgICwgbV9wcmVwYXJpbmdUb1BsYXkoZmFsc2UpCisgICAg
LCBtX3BhdXNlUmVxdWVzdGVkKGZhbHNlKQoreworfQorCitNZWRpYVBsYXllclByaXZhdGVJT1M6
On5NZWRpYVBsYXllclByaXZhdGVJT1MoKQoreworICAgIGNsZWFyVGV4dFRyYWNrcygpOworICAg
IFttX29iamNIZWxwZXIuZ2V0KCkgZGlzY29ubmVjdF07CisgICAgaWYgKFttX21lZGlhUGxheWVy
SGVscGVyLmdldCgpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3NldERlbGVnYXRlOild
KQorICAgICAgICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2V0RGVsZWdhdGU6bmlsXTsK
KyAgICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfZGlzY29ubmVjdF07Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRNZWRpYVBsYXllclByb3h5KFdlYk1lZGlhUGxheWVy
UHJveHkgKnByb3h5KQoreworICAgIGlmIChtX21lZGlhUGxheWVySGVscGVyKQorICAgICAgICBb
bV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfZGlzY29ubmVjdF07CisKKyAgICBtX21lZGlhUGxh
eWVySGVscGVyID0gbnVsbHB0cjsKKworICAgIGlmIChwcm94eSkgeworICAgICAgICAvLyBkb24n
dCB0cnkgdG8gdXNlIGEgaGVscGVyIGlmIHRoZSBpbnRlcmZhY2UgdmVyc2lvbiBpcyB0b28gbG93
CisgICAgICAgIGlmIChbcHJveHkgX2ludGVyZmFjZVZlcnNpb25dIDwgIGtSZXF1aXJlZEhlbHBl
ckludGVyZmFjZVZlcnNpb24pIHsKKyAgICAgICAgICAgIE5TTG9nKEAiTWVkaWEgcGxheWVyIGhl
bHBlciBpbnRlcmZhY2UgdmVyc2lvbiB0b28gbG93LCBleGl0aW5nLiIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fbWVkaWFQbGF5ZXJIZWxwZXIgPSBhZG9wdE5T
KHN0YXRpY19jYXN0PE5TT2JqZWN0ICo+KFtwcm94eSByZXRhaW5dKSk7CisgICAgICAgIGlmIChb
bV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9z
ZXREZWxlZ2F0ZTopXSkKKyAgICAgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9z
ZXREZWxlZ2F0ZTptX29iamNIZWxwZXIuZ2V0KCldOworCisgICAgICAgIGFjY2VsZXJhdGVkUmVu
ZGVyaW5nU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorCisgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0
cygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6bG9hZChjb25zdCBTdHJpbmcm
IHVybCkKK3sKKyAgICBOU1VSTCAqbnNVUkwgPSBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpOwor
CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKSB7CisgICAgICAgIGFkZERlZmVycmVkUmVx
dWVzdChEZWZlcnJlZFByb3BlcnR5U3JjS2V5LCBbbnNVUkwgYWJzb2x1dGVTdHJpbmddKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFttX2RlZmVycmVkUHJvcGVydGllcy5nZXQoKSBy
ZW1vdmVPYmplY3RGb3JLZXk6RGVmZXJyZWRQcm9wZXJ0eVNyY0tleV07CisgICAgc2V0RGVsYXlD
YWxsYmFja3ModHJ1ZSk7CisgICAgeworICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVk
aWFQbGF5ZXI6OkxvYWRpbmcpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQ
bGF5ZXI6OkxvYWRpbmc7CisgICAgICAgICAgICBtX21lZGlhUGxheWVyLT5uZXR3b3JrU3RhdGVD
aGFuZ2VkKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBs
YXllcjo6SGF2ZU5vdGhpbmcpIHsKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgICAgIG1fbWVkaWFQbGF5ZXItPnJlYWR5U3RhdGVD
aGFuZ2VkKCk7CisgICAgICAgIH0KKworICAgICAgICBtX3BhdXNlUmVxdWVzdGVkID0gZmFsc2U7
CisgICAgICAgIG1fcHJlcGFyaW5nVG9QbGF5ID0gZmFsc2U7CisKKyAgICAgICAgW21fbWVkaWFQ
bGF5ZXJIZWxwZXIuZ2V0KCkgX2NhbmNlbExvYWRdOworICAgICAgICBbbV9tZWRpYVBsYXllckhl
bHBlci5nZXQoKSBfbG9hZDpuc1VSTF07CisgICAgfQorICAgIHNldERlbGF5Q2FsbGJhY2tzKGZh
bHNlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OmNhbmNlbExvYWQoKQorewor
ICAgIFttX29iamNIZWxwZXIuZ2V0KCkgY2FuY2VsUGVuZGluZ1JlcXVlc3RzXTsKKyAgICBbbV9k
ZWZlcnJlZFByb3BlcnRpZXMuZ2V0KCkgcmVtb3ZlQWxsT2JqZWN0c107CisKKyAgICBpZiAoIW1f
bWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybjsKKyAgICBbbV9tZWRpYVBsYXllckhl
bHBlci5nZXQoKSBfY2FuY2VsTG9hZF07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9T
OjphZGREZWZlcnJlZFJlcXVlc3QoTlNTdHJpbmcgKm5hbWUsIGlkIHZhbHVlKQoreworICAgIGlm
ICghbV9kZWZlcnJlZFByb3BlcnRpZXMpCisgICAgICAgIG1fZGVmZXJyZWRQcm9wZXJ0aWVzID0g
YWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKyAgICBbbV9kZWZl
cnJlZFByb3BlcnRpZXMuZ2V0KCkgc2V0T2JqZWN0OnZhbHVlID8gdmFsdWUgOiBAIiIgZm9yS2V5
Om5hbWVdOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cHJvY2Vzc0RlZmVycmVk
UmVxdWVzdHMoKQoreworICAgIGlmICghW21fZGVmZXJyZWRQcm9wZXJ0aWVzLmdldCgpIGNvdW50
XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAg
eworICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBsb2NhbFByb3BlcnRpZXMgPSBhZG9w
dE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6bV9kZWZlcnJlZFBy
b3BlcnRpZXMuZ2V0KCldKTsKKyAgICAgICAgW21fZGVmZXJyZWRQcm9wZXJ0aWVzLmdldCgpIHJl
bW92ZUFsbE9iamVjdHNdOworCisgICAgICAgIC8vIEFsd2F5cyBzZXQgdGhlIHNyYyBmaXJzdC4K
KyAgICAgICAgaWQgdmFsdWUgPSBbbG9jYWxQcm9wZXJ0aWVzLmdldCgpIG9iamVjdEZvcktleTpE
ZWZlcnJlZFByb3BlcnR5U3JjS2V5XTsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAg
bG9hZCh2YWx1ZSk7CisKKyAgICAgICAgZm9yIChOU1N0cmluZyAqbmFtZSBpbiBsb2NhbFByb3Bl
cnRpZXMuZ2V0KCkpIHsKKyAgICAgICAgICAgIHZhbHVlID0gW2xvY2FsUHJvcGVydGllcy5nZXQo
KSBvYmplY3RGb3JLZXk6bmFtZV07CisKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxh
eWVyUHJpdmF0ZUlPUzo6cHJvY2Vzc0RlZmVycmVkUmVxdWVzdHMoJXApIC0gcHJvY2Vzc2luZyAl
cyIsIHRoaXMsIFtuYW1lIFVURjhTdHJpbmddKTsKKworICAgICAgICAgICAgaWYgKFtuYW1lIGlz
RXF1YWxUb1N0cmluZzpEZWZlcnJlZFByb3BlcnR5UG9zdGVyS2V5XSkKKyAgICAgICAgICAgICAg
ICBzZXRQb3N0ZXIodmFsdWUpOworICAgICAgICAgICAgZWxzZSBpZiAoW25hbWUgaXNFcXVhbFRv
U3RyaW5nOkRlZmVycmVkUHJvcGVydHlDb250cm9sc0tleV0pCisgICAgICAgICAgICAgICAgc2V0
Q29udHJvbHMoW3ZhbHVlIGJvb2xWYWx1ZV0pOworICAgICAgICAgICAgZWxzZSBpZiAoW25hbWUg
aXNFcXVhbFRvU3RyaW5nOkRlZmVycmVkUGxheUtleV0pCisgICAgICAgICAgICAgICAgcGxheSgp
OworICAgICAgICAgICAgZWxzZSBpZiAoW25hbWUgaXNFcXVhbFRvU3RyaW5nOkRlZmVycmVkUHJv
cGVydHlPdXRPZkJhbmRUcmFja3NLZXldKQorICAgICAgICAgICAgICAgIHNldE91dE9mQmFuZFRl
eHRUcmFja3ModmFsdWUpOworICAgICAgICAgICAgZWxzZSBpZiAoW25hbWUgaXNFcXVhbFRvU3Ry
aW5nOkRlZmVycmVkUHJvcGVydHlTZWxlY3RlZFRyYWNrS2V5XSkKKyAgICAgICAgICAgICAgICBz
ZXRTZWxlY3RlZFRleHRUcmFjayh2YWx1ZSk7CisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQorICAg
ICAgICAgICAgZWxzZSBpZiAoW25hbWUgaXNFcXVhbFRvU3RyaW5nOkRlZmVycmVkV2lyZWxlc3NW
aWRlb1BsYXliYWNrRGlzYWJsZWRdKQorICAgICAgICAgICAgICAgIHNldFdpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkKFt2YWx1ZSBib29sVmFsdWVdKTsKKyNlbmRpZgorICAgICAgICAgICAg
ZWxzZSBpZiAoIVtuYW1lIGlzRXF1YWxUb1N0cmluZzpEZWZlcnJlZFByb3BlcnR5U3JjS2V5XSkK
KyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKG5hbWUsIHZhbHVlKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlSU9TOjpzZXRQb3N0ZXIoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgc2V0
RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgeworICAgICAgICBOU1VSTCAqbnNVUkwgPSBVUkwo
UGFyc2VkVVJMU3RyaW5nLCB1cmwpOworICAgICAgICBpZiAobV9tZWRpYVBsYXllckhlbHBlcikg
eworICAgICAgICAgICAgW21fZGVmZXJyZWRQcm9wZXJ0aWVzLmdldCgpIHJlbW92ZU9iamVjdEZv
cktleTpEZWZlcnJlZFByb3BlcnR5UG9zdGVyS2V5XTsKKyAgICAgICAgICAgIFttX21lZGlhUGxh
eWVySGVscGVyLmdldCgpIF9zZXRQb3N0ZXI6bnNVUkxdOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGFkZERlZmVycmVkUmVxdWVzdChEZWZlcnJlZFByb3BlcnR5UG9zdGVy
S2V5LCB1cmwpOworICAgIH0KKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRDb250cm9scyhib29sIGNvbnRyb2xzKQorewor
ICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOworICAgIHsKKyAgICAgICAgaWYgKG1fbWVkaWFQ
bGF5ZXJIZWxwZXIpIHsKKyAgICAgICAgICAgIFttX2RlZmVycmVkUHJvcGVydGllcy5nZXQoKSBy
ZW1vdmVPYmplY3RGb3JLZXk6RGVmZXJyZWRQcm9wZXJ0eUNvbnRyb2xzS2V5XTsKKyAgICAgICAg
ICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXRDb250cm9sczpjb250cm9sc107Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkRGVmZXJyZWRSZXF1ZXN0KERl
ZmVycmVkUHJvcGVydHlDb250cm9sc0tleSwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOmNvbnRy
b2xzXSk7CisgICAgfQorICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoKQoreworICAgIGlm
IChtX3Nob3VsZFByZXBhcmVUb1BsYXkgJiYgIW1fcHJlcGFyaW5nVG9QbGF5KQorICAgICAgICBb
bV9vYmpjSGVscGVyLmdldCgpIHNjaGVkdWxlUHJlcGFyZVRvUGxheVdpdGhPcHRpb25hbERlbGF5
OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdXTsKKyAgICBpZiAoW21fZGVmZXJyZWRQcm9w
ZXJ0aWVzLmdldCgpIGNvdW50XSkKKyAgICAgICAgW21fb2JqY0hlbHBlci5nZXQoKSBzY2hlZHVs
ZURlZmVycmVkUHJvcGVydGllc1dpdGhPcHRpb25hbERlbGF5OltOU051bWJlciBudW1iZXJXaXRo
Qm9vbDpZRVNdXTsKKyAgICBtX3Nob3VsZFByZXBhcmVUb1BsYXkgPSBmYWxzZTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnByZXBhcmVUb1BsYXkoKQoreworICAgIGlmICghbV9t
ZWRpYVBsYXllckhlbHBlcikgeworICAgICAgICAvLyBOb3QgaG9va2VkIHVwIHRvIHRoZSBwbHVn
LWluIHlldCwgcmVtZW1iZXIgdGhpcyByZXF1ZXN0LgorICAgICAgICBtX3Nob3VsZFByZXBhcmVU
b1BsYXkgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcHJlcGFy
aW5nVG9QbGF5IHx8IG1fcmVhZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGEp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hvdWxkUHJlcGFyZVRvUGxheSA9IGZhbHNlOwor
ICAgIG1fcHJlcGFyaW5nVG9QbGF5ID0gdHJ1ZTsKKworICAgIHNldERlbGF5Q2FsbGJhY2tzKHRy
dWUpOworICAgICAgICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfcHJlcGFyZUZvclBsYXli
YWNrXTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9CisKKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVJT1M6OnBsYXkoKQoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikg
eworICAgICAgICBhZGREZWZlcnJlZFJlcXVlc3QoRGVmZXJyZWRQbGF5S2V5LCBuaWwpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wYXVzZVJlcXVlc3RlZCA9IGZhbHNlOworICAg
IHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOworICAgICAgICBbbV9tZWRpYVBsYXllckhlbHBlci5n
ZXQoKSBfcGxheV07CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUlPUzo6cGF1c2UoKQoreworICAgIGlmICghbV9tZWRpYVBsYXllckhl
bHBlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXVzZVJlcXVlc3RlZCA9IHRydWU7Cisg
ICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVy
LmdldCgpIF9wYXVzZV07CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCitmbG9h
dCBNZWRpYVBsYXllclByaXZhdGVJT1M6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
bWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiAwOworICAgIGZsb2F0IGR1cmF0aW9u
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9kdXJhdGlv
bl0pOworICAgIHJldHVybiBkdXJhdGlvbiA9PSAtMSA/IG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
aW5maW5pdHkoKSA6IGR1cmF0aW9uOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVJT1M6
OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oW21fbWVkaWFQ
bGF5ZXJIZWxwZXIuZ2V0KCkgX2N1cnJlbnRUaW1lXSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpzZWVrKGZsb2F0IHRpbWUpCit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVs
cGVyKQorICAgICAgICByZXR1cm47CisgICAgZmxvYXQgZHVyYXRpb24gPSB0aGlzLT5kdXJhdGlv
bigpOworICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zZXRDdXJyZW50VGltZToodGlt
ZSA+IGR1cmF0aW9uID8gZHVyYXRpb24gOiB0aW1lKV07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpzZXRFbmRUaW1lKGZsb2F0IHRpbWUpCit7CisgICAgaWYgKCFtX21lZGlhUGxh
eWVySGVscGVyKQorICAgICAgICByZXR1cm47CisgICAgW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0
KCkgX3NldEVuZFRpbWU6dGltZV07Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpw
YXVzZWQoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuICFyYXRlKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjpzZWVraW5nKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxw
ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxw
ZXIuZ2V0KCkgX3NlZWtpbmddOworfQorCitJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6
bmF0dXJhbFNpemUoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAg
ICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIE5TU2l6ZSBzaXplID0gW21fbWVkaWFQbGF5
ZXJIZWxwZXIuZ2V0KCkgX25hdHVyYWxTaXplXTsKKyAgICByZXR1cm4gSW50U2l6ZShzaXplKTsK
K30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2hhc1ZpZGVvXTsKK30KKworYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6Omhhc0F1ZGlvKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVk
aWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gW21fbWVk
aWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2hhc0F1ZGlvXTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQ
cml2YXRlSU9TOjp2b2x1bWUoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBl
ci5nZXQoKSBfdm9sdW1lXTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnNldFZv
bHVtZShmbG9hdCBpblZvbHVtZSkKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIgfHwg
bV9jaGFuZ2luZ1ZvbHVtZSkKKyAgICAgICAgcmV0dXJuOworICAgIFttX21lZGlhUGxheWVySGVs
cGVyLmdldCgpIF9zZXRWb2x1bWU6aW5Wb2x1bWVdOworfQorCitmbG9hdCBNZWRpYVBsYXllclBy
aXZhdGVJT1M6OnJhdGUoKSBjb25zdAoreworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5n
ZXQoKSBfcmF0ZV07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRSYXRlKGZs
b2F0IGluUmF0ZSkKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX3JlcXVlc3RlZFJhdGUgPSBpblJhdGU7CisgICAgW21fbWVkaWFQbGF5ZXJI
ZWxwZXIuZ2V0KCkgX3NldFJhdGU6aW5SYXRlXTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVJT1M6OnNldE11dGVkKGJvb2wgaW5NdXRlKQoreworICAgIGlmICghbV9tZWRpYVBsYXllckhl
bHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9z
ZXRNdXRlZDppbk11dGVdOworfQorCitpbnQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpkYXRhUmF0
ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2RhdGFSYXRlXTsK
K30KKworTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVJT1M6Om5l
dHdvcmtTdGF0ZSgpIGNvbnN0IAoreyAKKyAgICByZXR1cm4gbV9uZXR3b3JrU3RhdGU7Cit9CisK
K01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cmVhZHlTdGF0
ZSgpIGNvbnN0IAoreworICAgIHJldHVybiBtX3JlYWR5U3RhdGU7Cit9CisKK2Zsb2F0IE1lZGlh
UGxheWVyUHJpdmF0ZUlPUzo6bWF4VGltZUJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
bWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBbbV9tZWRp
YVBsYXllckhlbHBlci5nZXQoKSBfbWF4VGltZUJ1ZmZlcmVkXTsKK30KKworYm9vbCBNZWRpYVBs
YXllclByaXZhdGVJT1M6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0Cit7CisgICAgaWYgKCFt
X21lZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdW5zaWduZWQg
Y3VycmVudEJ5dGVzTG9hZGVkID0gW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2J5dGVzTG9h
ZGVkXTsKKyAgICBib29sIGRpZExvYWRpbmdQcm9ncmVzcyA9IGN1cnJlbnRCeXRlc0xvYWRlZCAh
PSBtX2J5dGVzTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzOworICAgIG1fYnl0ZXNMb2Fk
ZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3MgPSBjdXJyZW50Qnl0ZXNMb2FkZWQ7CisgICAgcmV0
dXJuIGRpZExvYWRpbmdQcm9ncmVzczsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6
OnRvdGFsQnl0ZXNLbm93bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvdGFsQnl0ZXMoKSA+IDA7
Cit9CisKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6dG90YWxCeXRlcygpIGNvbnN0
Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX3RvdGFsQnl0ZXNdOworfQorCitm
bG9hdCBNZWRpYVBsYXllclByaXZhdGVJT1M6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQorICAgICAgICByZXR1cm4gMC4wZjsKKyAgICBy
ZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX21heFRpbWVTZWVrYWJsZV07Cit9CisK
K1Bhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpidWZmZXJlZCgp
IGNvbnN0Cit7CisgICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2Vz
OjpjcmVhdGUoKTsKKworICAgIGlmICghbV9tZWRpYVBsYXllckhlbHBlcikKKyAgICAgICAgcmV0
dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOworCisgICAgTlNBcnJheSAqcmFuZ2VzID0gW21fbWVk
aWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2J1ZmZlcmVkVGltZVJhbmdlc107CisgICAgaWYgKCFyYW5n
ZXMpCisgICAgICAgIHJldHVybiB0aW1lUmFuZ2VzLnJlbGVhc2UoKTsKKworICAgIGZsb2F0IHRp
bWVSYW5nZVsyXTsKKyAgICBpbnQgY291bnQgPSBbcmFuZ2VzIGNvdW50XTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgTlNEYXRhICpyYW5nZSA9IFtyYW5n
ZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAgW3JhbmdlIGdldEJ5dGVzOnRpbWVSYW5nZSBs
ZW5ndGg6KE5TVUludGVnZXIpc2l6ZW9mKHRpbWVSYW5nZSldOworCisgICAgICAgIHRpbWVSYW5n
ZXMtPmFkZCh0aW1lUmFuZ2VbMF0sIHRpbWVSYW5nZVsxXSk7CisgICAgfQorCisgICAgcmV0dXJu
IHRpbWVSYW5nZXMucmVsZWFzZSgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6
c2V0U2l6ZShjb25zdCBJbnRTaXplJikKK3sKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBk
byBhbnl0aGluZyBoZXJlPworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c2V0Vmlz
aWJsZShib29sIHZpc2libGUpCit7CisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gZG8gYW55
dGhpbmcgbW9yZSBoZXJlPworICAgIGlmIChtX3Zpc2libGUgIT0gdmlzaWJsZSkKKyAgICAgICAg
bV92aXNpYmxlID0gdmlzaWJsZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKQoreworICAgIC8vIE5vdGhpbmcg
dG8gZG8gaGVyZS4KK30KKworc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiB0eXBlQ2FjaGU7
CisgICAgc3RhdGljIGJvb2wgdHlwZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYg
KHR5cGVMaXN0SW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiB0eXBlQ2FjaGU7CisKKyAgICB0
eXBlTGlzdEluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIC8vIEZJWE1FOiBTaG91bGQgZ2V0IHRo
ZXNlIGZyb20gdGhlIGhlbHBlciwgYnV0IHdlIGRvbid0IGhhdmUgYW4gaW5zdGFuY2Ugd2hlbiB0
aGlzIGlzIGNhbGxlZC4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogdHlwZUxpc3RbXSA9IHsKKyAg
ICAgICAgImFwcGxpY2F0aW9uL3gtbXBlZ3VybCIsCisgICAgICAgICJhcHBsaWNhdGlvbi92bmQu
YXBwbGUubXBlZ3VybCIsCisgICAgICAgICJhdWRpby8zZ3BwIiwKKyAgICAgICAgImF1ZGlvLzNn
cHAyIiwKKyAgICAgICAgImF1ZGlvL2FhYyIsCisgICAgICAgICJhdWRpby9haWZmIiwKKyAgICAg
ICAgImF1ZGlvL2FtciIsCisgICAgICAgICJhdWRpby9iYXNpYyIsCisgICAgICAgICJhdWRpby9t
cDMiLAorICAgICAgICAiYXVkaW8vbXA0IiwKKyAgICAgICAgImF1ZGlvL21wZWciLAorICAgICAg
ICAiYXVkaW8vbXBlZ3VybCIsCisgICAgICAgICJhdWRpby9tcGVnMyIsCisgICAgICAgICJhdWRp
by9zY3BscyIsCisgICAgICAgICJhdWRpby93YXYiLAorICAgICAgICAiYXVkaW8veC1hYWMiLAor
ICAgICAgICAiYXVkaW8veC1haWZmIiwKKyAgICAgICAgImF1ZGlvL3gtY2FmIiwKKyAgICAgICAg
ImF1ZGlvL3gtbTRhIiwKKyAgICAgICAgImF1ZGlvL3gtbTRiIiwKKyAgICAgICAgImF1ZGlvL3gt
bTRwIiwKKyAgICAgICAgImF1ZGlvL3gtbTRyIiwKKyAgICAgICAgImF1ZGlvL3gtbXAzIiwKKyAg
ICAgICAgImF1ZGlvL3gtbXBlZyIsCisgICAgICAgICJhdWRpby94LW1wZWczIiwKKyAgICAgICAg
ImF1ZGlvL3gtbXBlZ3VybCIsCisgICAgICAgICJhdWRpby94LXNjcGxzIiwKKyAgICAgICAgImF1
ZGlvL3gtd2F2IiwKKyAgICAgICAgInZpZGVvLzNncHAiLAorICAgICAgICAidmlkZW8vM2dwcDIi
LAorICAgICAgICAidmlkZW8vbXA0IiwKKyAgICAgICAgInZpZGVvL3F1aWNrdGltZSIsCisgICAg
ICAgICJ2aWRlby94LW00diIsCisKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYWRkZWQgdG8g
cmVzdG9yZSBvbGQgYmVoYXZpb3IgZm9yOgorICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vOTc5
Mjk2ND4gRW1iZWRkZWQgdmlkZW9zIGRvbid0IHBsYXkgb24gc3BpZWdlbC5kZSAoLmh0bWwgZmls
ZSByZWRpcmVjdHMpCisgICAgICAgIC8vIEhvd2V2ZXIsIGEgYmV0dGVyIGZpeCBpcyB0cmFja2Vk
IGJ5OgorICAgICAgICAvLyA8aHR0cDovL3dlYmtpdC5vcmcvYi82NDgxMT4gPHZpZGVvPiAiLmh0
bWwiIHNyYyB3aXRoIGEgMzAxIHJlZGlyZWN0IGZhaWxzIHRvIGxvYWQKKyAgICAgICAgInRleHQv
aHRtbCIsCisgICAgfTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xF
TkdUSCh0eXBlTGlzdCk7ICsraSkKKyAgICAgICAgdHlwZUNhY2hlLmdldCgpLmFkZCh0eXBlTGlz
dFtpXSk7CisKKyAgICByZXR1cm4gdHlwZUNhY2hlOworfQorCitNZWRpYVBsYXllcjo6U3VwcG9y
dHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5n
aW5lU3VwcG9ydFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAgLy8gT25seSByZXR1cm4g
IklzU3VwcG9ydGVkIiBpZiB0aGVyZSBpcyBubyBjb2RlY3MgcGFyYW1ldGVyIGZvciBub3cgYXMg
dGhlcmUgaXMgbm8gd2F5IHRvIGFzayBDb3JlTWVkaWEKKyAgICAvLyBpZiBpdCBzdXBwb3J0cyBh
biBleHRlbmRlZCBNSU1FIHR5cGUuCisgICAgaWYgKCFwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgp
ICYmIG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyhwYXJhbWV0ZXJzLnR5cGUpKQorICAgICAgICBy
ZXR1cm4gcGFyYW1ldGVycy5jb2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQbGF5ZXI6Ok1heUJlU3Vw
cG9ydGVkIDogTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkOworCisgICAgcmV0dXJuIE1lZGlhUGxh
eWVyOjpJc05vdFN1cHBvcnRlZDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6Omdl
dFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCit7CisgICAgdHlwZXMgPSBt
aW1lVHlwZUNhY2hlKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjppc0F2YWls
YWJsZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkp
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6aXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJl
bGVzcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9pc0N1
cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzXTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVJT1M6OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcigpCit7CisgICAgc2V0RGVsYXlDYWxsYmFj
a3ModHJ1ZSk7CisgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9zaG93UGxheWJh
Y2tUYXJnZXRQaWNrZXJdOworICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKworYm9v
bCBNZWRpYVBsYXllclByaXZhdGVJT1M6Omhhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgX2hhc1dpcmVsZXNzUGxh
eWJhY2tUYXJnZXRzXTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJT1M6OndpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJI
ZWxwZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gW21fbWVkaWFQbGF5ZXJI
ZWxwZXIuZ2V0KCkgX3dpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkXTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVJT1M6OnNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKGJv
b2wgZGlzYWJsZWQpCit7CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgeworICAg
ICAgICBpZiAobV9tZWRpYVBsYXllckhlbHBlcikgeworICAgICAgICAgICAgW21fZGVmZXJyZWRQ
cm9wZXJ0aWVzLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpEZWZlcnJlZFdpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkXTsKKyAgICAgICAgICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgp
IF9zZXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZDpkaXNhYmxlZF07CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgYWRkRGVmZXJyZWRSZXF1ZXN0KERlZmVycmVkV2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWQsIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpkaXNhYmxlZF0pOwor
ICAgIH0KKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlSU9TOjpzZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhi
b29sIGhhc0xpc3RlbmVycykKK3sKKyAgICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2V0
SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnM6aGFzTGlzdGVuZXJzXTsKK30K
KyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorYm9vbCBNZWRpYVBs
YXllclByaXZhdGVJT1M6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9T
OjplbnRlckZ1bGxzY3JlZW4oKQoreworICAgIC8vIFRoZSBjb25zdCBjYXN0IGlzIGEgd29ya2Fy
b3VuZCBkdWUgdG8gT3BlblNvdXJjZSBjaGFuZ2luZyB0aGUgc2lnbmF0dXJlIHRvIGNvbnN0Lgor
ICAgIE1lZGlhUGxheWVyUHJpdmF0ZUlPUyogbXV0YWJsZVRoaXMgPSBjb25zdF9jYXN0PE1lZGlh
UGxheWVyUHJpdmF0ZUlPUyo+KHRoaXMpOworICAgIG11dGFibGVUaGlzLT5zZXREZWxheUNhbGxi
YWNrcyh0cnVlKTsKKyAgICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfZW50ZXJGdWxsU2Ny
ZWVuXTsKKyAgICBtdXRhYmxlVGhpcy0+c2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZXhpdEZ1bGxzY3JlZW4oKQoreworICAgIHNldERl
bGF5Q2FsbGJhY2tzKHRydWUpOworICAgIFttX21lZGlhUGxheWVySGVscGVyLmdldCgpIF9leGl0
RnVsbFNjcmVlbl07CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUlPUzo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKCFtX21lZGlhUGxheWVySGVscGVyKSB7
CisgICAgICAgIGFkZERlZmVycmVkUmVxdWVzdChuYW1lLCB2YWx1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIVttX21lZGlhUGxheWVySGVscGVyLmdldCgpIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoX2F0dHJpYnV0ZUNoYW5nZWQ6dmFsdWU6KV0pCisgICAgICAg
IHJldHVybjsKKworICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOworICAgIFttX21lZGlhUGxh
eWVySGVscGVyLmdldCgpIF9hdHRyaWJ1dGVDaGFuZ2VkOm5hbWUgdmFsdWU6dmFsdWVdOworICAg
IHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVJ
T1M6OnJlYWR5Rm9yUGxheWJhY2soKSBjb25zdAoreworICAgIGlmIChbbV9tZWRpYVBsYXllckhl
bHBlci5nZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9yZWFkeUZvclBsYXliYWNr
KV0pCisgICAgICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfcmVhZHlGb3JQ
bGF5YmFja107CisgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6cmVhZHlG
b3JQbGF5YmFjaygpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6aGFzQ2xvc2Vk
Q2FwdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQo
KSBfaGFzQ2xvc2VkQ2FwdGlvbnNdOworfSAgICAKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVJ
T1M6OnNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sIGZsYWcpCit7CisgICAgW21fbWVkaWFQ
bGF5ZXJIZWxwZXIuZ2V0KCkgX3NldENsb3NlZENhcHRpb25zVmlzaWJsZTpmbGFnXTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVJT1M6OmRlbGl2ZXJOb3RpZmljYXRpb24oTWVkaWFQbGF5
ZXJQcm94eU5vdGlmaWNhdGlvblR5cGUgbm90aWZpY2F0aW9uKSAKK3sKKyAgICBMT0coTWVkaWEs
ICJNZWRpYVBsYXllclByaXZhdGVJT1M6OmRlbGl2ZXJOb3RpZmljYXRpb24oJXApIC0gbm90aWZp
Y2F0aW9uID0gJWksIGVudGVyaW5nIHdpdGggbmV0d29ya1N0YXRlID0gJWksIHJlYWR5U3RhdGUg
PSAlaSIsIAorICAgICAgICB0aGlzLCBzdGF0aWNfY2FzdDxpbnQ+KG5vdGlmaWNhdGlvbiksIHN0
YXRpY19jYXN0PGludD4obV9uZXR3b3JrU3RhdGUpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVhZHlT
dGF0ZSkpOworCisgICAgaWYgKCFtX21lZGlhUGxheWVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoY2FsbGJhY2tzRGVsYXllZCgpKSB7CisgICAgICAgIFttX29iamNIZWxwZXIuZ2V0KCkg
ZGVsYXlOb3RpZmljYXRpb246bm90aWZpY2F0aW9uXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0gbV9uZXR3
b3JrU3RhdGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0ZSA9IG1f
cmVhZHlTdGF0ZTsKKworICAgIHN3aXRjaCAobm90aWZpY2F0aW9uKSB7CisgICAgY2FzZSBNZWRp
YVBsYXllck5vdGlmaWNhdGlvblN0YXJ0VXNpbmdOZXR3b3JrOgorICAgICAgICBtX3VzaW5nTmV0
d29yayA9IHRydWU7CisgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxheWVyOjpM
b2FkaW5nKQorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGlu
ZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvblN0b3BV
c2luZ05ldHdvcms6CisgICAgICAgIG1fdXNpbmdOZXR3b3JrID0gZmFsc2U7CisgICAgICAgIGlm
IChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhICYmIG1fbmV0d29y
a1N0YXRlIDwgTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yKQorICAgICAgICAgICAgbV9uZXR3b3Jr
U3RhdGUgPSBNZWRpYVBsYXllcjo6SWRsZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1l
ZGlhUGxheWVyTm90aWZpY2F0aW9uR2FpbkZvY3VzOgorICAgICAgICBpZiAobV9uZXR3b3JrU3Rh
dGUgPCBNZWRpYVBsYXllcjo6TG9hZGluZykKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0g
TWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBs
YXllck5vdGlmaWNhdGlvbkxvc2VGb2N1czoKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwg
TWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yKQorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBN
ZWRpYVBsYXllcjo6SWRsZTsKKyAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA+IE1lZGlhUGxheWVy
OjpIYXZlTWV0YWRhdGEpCisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZU1ldGFkYXRhOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3Rp
ZmljYXRpb25FbnRlcmVkRnVsbHNjcmVlbjoKKyAgICAgICAgbV9pbkZ1bGxTY3JlZW4gPSB0cnVl
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25FeGl0
ZWRGdWxsc2NyZWVuOiB7CisgICAgICAgIG1faW5GdWxsU2NyZWVuID0gZmFsc2U7CisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQorICAgICAgICBzZXRUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigwKTsK
KyNlbmRpZgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90
aWZpY2F0aW9uUmVhZHlGb3JJbnNwZWN0aW9uOgorICAgICAgICAvLyBUaGUgYnVmZmVyaW5nIHN0
YXRlIHNvbWV0aW1lcyByZWFjaGVzICJsaWtlbHkgdG8ga2VlcCB1cCIgb3IgImZ1bGwiIGJlZm9y
ZSB0aGUgcGxheWVyIGl0ZW0gaXMKKyAgICAgICAgLy8gcmVhZHkgZm9yIGluc3BlY3Rpb24uIElu
IHRoYXQgY2FzZSBhZHZhbmNlIGRpcmVjdGx5IHRvIEhhdmVFbm91Z2hEYXRhLgorICAgICAgICBp
ZiAobV9idWZmZXJpbmdTdGF0ZSA+IFVubGlrZWxleVRvS2VlcFVwKQorICAgICAgICAgICAgbV9y
ZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25NZWRpYVZh
bGlkYXRlZDoKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwgTWVkaWFQbGF5ZXI6OklkbGUg
JiYgIW1fcHJlcGFyaW5nVG9QbGF5KQorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRp
YVBsYXllcjo6SWRsZTsKKyAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cygpOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25NZWRpYUZhaWxlZFRv
VmFsaWRhdGU6CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkZvcm1hdEVy
cm9yOworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7IAor
ICAgICAgICBtX3VzaW5nTmV0d29yayA9IGZhbHNlOworICAgICAgICBtX3ByZXBhcmluZ1RvUGxh
eSA9IGZhbHNlOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmlj
YXRpb25QbGF5YmFja0ZhaWxlZDogeworICAgICAgICAvLyBGSVhNRTogV2UgY2FuJ3QgY3VycmVu
dGx5IHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBOZXR3b3JrRXJyb3IgYW5kIERlY29kZUVy
cm9yLgorICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpEZWNvZGVFcnJvcjsK
KworICAgICAgICAvLyBEb24ndCByZXNldCByZWFkeVN0YXRlLCB3aGF0IHdlIGhhdmUgbG9hZGVk
IGFscmVhZHkgbWF5IGJlIHBsYXlhYmxlLgorICAgICAgICBtX3VzaW5nTmV0d29yayA9IGZhbHNl
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0
aW9uUmVhZHlGb3JQbGF5YmFjazoKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwgTWVkaWFQ
bGF5ZXI6OkxvYWRpbmcpCisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVy
OjpMb2FkaW5nOworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVy
ZURhdGE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlv
bkRpZFBsYXlUb1RoZUVuZDoKKyAgICAgICAgbV9tZWRpYVBsYXllci0+dGltZUNoYW5nZWQoKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uU3RyZWFt
TGlrZWx5VG9LZWVwVXA6CisgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxheWVy
OjpMb2FkaW5nKQorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9h
ZGluZzsKKyAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA+IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRh
dGEgJiYgbV9yZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhKQorICAgICAg
ICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAg
ICBtX2J1ZmZlcmluZ1N0YXRlID0gTGlrZWxleVRvS2VlcFVwOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25TdHJlYW1CdWZmZXJGdWxsOgorICAgICAg
ICAvLyBUaGUgbWVkaWEgYnVmZmVycyBhcmUgZnVsbCBzbyBubyBtb3JlIGRhdGEgY2FuIGJlIGxv
YWRlZC4gVGhpcyBpc24ndCByZWFsbHkgdGhlIHRoZSBzYW1lIHRoaW5nIGFzIAorICAgICAgICAv
LyAiSGF2ZUZ1dHVyZURhdGEiLCBidXQgbm90aGluZyBtb3JlIHdpbGwgYmUgbG9hZGVkIHVudGls
IHBsYXliYWNrIGNvbnN1bWVzIHNvbWUgb2YgdGhlIGJ1ZmZlcmVkIGRhdGEKKyAgICAgICAgLy8g
c28gYnVtcCB0aGUgcmVhZHlTdGF0ZSB0byBhbGxvdyBwbGF5YmFjay4KKyAgICAgICAgaWYgKG1f
cmVhZHlTdGF0ZSA+IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEgJiYgbV9yZWFkeVN0YXRlIDwg
TWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhKQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0g
TWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhOworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpJZGxlOworICAgICAgICBtX2J1ZmZlcmluZ1N0YXRlID0gRnVsbDsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uU3RyZWFtUmFuRHJ5
OgorICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAg
ICBpZiAobV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSkKKyAgICAgICAg
ICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGE7CisgICAgICAg
IG1fYnVmZmVyaW5nU3RhdGUgPSBFbXB0eTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1l
ZGlhUGxheWVyTm90aWZpY2F0aW9uU3RyZWFtVW5saWtlbHlUb0tlZXBVcDoKKyAgICAgICAgbV9u
ZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgaWYgKG1fcmVhZHlT
dGF0ZSA+IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEgJiYgbV9yZWFkeVN0YXRlIDwgTWVkaWFQ
bGF5ZXI6OkhhdmVFbm91Z2hEYXRhKQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQ
bGF5ZXI6OkhhdmVGdXR1cmVEYXRhOworICAgICAgICBtX2J1ZmZlcmluZ1N0YXRlID0gVW5saWtl
bGV5VG9LZWVwVXA7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlm
aWNhdGlvbkZpbGVMb2FkZWQ6CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6
OkxvYWRlZDsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hE
YXRhOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25U
aW1lSnVtcGVkOgorICAgICAgICAvLyBTb21ldGltZXMgZ2V0IGEgc3B1cmlvdXMgInRpbWUganVt
cGVkIiB3aGVuIHRoZSBtb3ZpZSBpcyBiZWluZyBzZXQgdXAgb3IgaW1tZWRpYXRlbHkgYWZ0ZXIg
cGF1c2luZywgCisgICAgICAgIC8vIGRvbid0IGZhbGwgZm9yIGl0LgorICAgICAgICBpZiAobV9y
ZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGEpCisgICAgICAgICAgICBt
X21lZGlhUGxheWVyLT50aW1lQ2hhbmdlZCgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
TWVkaWFQbGF5ZXJOb3RpZmljYXRpb25NdXRlZERpZENoYW5nZToKKyAgICBjYXNlIE1lZGlhUGxh
eWVyTm90aWZpY2F0aW9uVm9sdW1lRGlkQ2hhbmdlOgorICAgICAgICArK21fY2hhbmdpbmdWb2x1
bWU7CisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnZvbHVtZUNoYW5nZWQodm9sdW1lKCkpOworICAg
ICAgICAtLW1fY2hhbmdpbmdWb2x1bWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZWRp
YVBsYXllck5vdGlmaWNhdGlvblNpemVEaWRDaGFuZ2U6CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvblBsYXlQYXVzZUJ1dHRvblByZXNzZWQ6CisgICAg
Y2FzZSBNZWRpYVBsYXllclJlcXVlc3RCZWdpblBsYXliYWNrOgorICAgIGNhc2UgTWVkaWFQbGF5
ZXJSZXF1ZXN0UGF1c2VQbGF5YmFjazoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lZGlh
UGxheWVyTm90aWZpY2F0aW9uUmF0ZURpZENoYW5nZToKKyAgICAgICAgbV9wcmVwYXJpbmdUb1Bs
YXkgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fcGF1c2VSZXF1ZXN0ZWQgJiYgcmF0ZSgpKQorICAg
ICAgICAgICAgbV9wYXVzZVJlcXVlc3RlZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKworI2lm
IEVOQUJMRShJT1NfQUlSUExBWSkKKyAgICBjYXNlIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uQ3Vy
cmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5nZWQ6CisgICAgICAgIG1fbWVkaWFQbGF5
ZXItPmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkKCk7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBNZWRpYVBsYXllck5vdGlmaWNhdGlvblBsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5Q2hhbmdlZDoKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cGxheWJhY2tUYXJnZXRB
dmFpbGFiaWxpdHlDaGFuZ2VkKCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgfQorCisg
ICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IG9sZE5ldHdvcmtTdGF0ZSkKKyAgICAgICAgbV9tZWRp
YVBsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0g
b2xkUmVhZHlTdGF0ZSkKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQo
KTsKKworICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6ZGVsaXZlck5vdGlm
aWNhdGlvbiglcCkgLSBleGl0aW5nIHdpdGggbmV0d29ya1N0YXRlID0gJWksIHJlYWR5U3RhdGUg
PSAlaSIsIAorICAgICAgICB0aGlzLCBzdGF0aWNfY2FzdDxpbnQ+KG1fbmV0d29ya1N0YXRlKSwg
c3RhdGljX2Nhc3Q8aW50PihtX3JlYWR5U3RhdGUpKTsKK30KKworI2lmIEVOQUJMRShWSURFT19U
UkFDSykKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpyZXF1aXJlc1RleHRUcmFja1JlcHJl
c2VudGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbkZ1bGxTY3JlZW47Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRUZXh0VHJhY2tSZXByZXNlbnRhdGlvbihUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbiogcmVwcmVzZW50YXRpb24pCit7CisgICAgW21fbWVkaWFQbGF5
ZXJIZWxwZXIuZ2V0KCkgX3NldFRleHRUcmFja1JlcHJlc2VudGF0aW9uOnJlcHJlc2VudGF0aW9u
ID8gcmVwcmVzZW50YXRpb24tPnBsYXRmb3JtTGF5ZXIoKSA6IG51bGxwdHJdOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6aW5iYW5kVGV4dFRyYWNrc0NoYW5nZWQoTlNBcnJheSAq
dHJhY2tzKQoreworICAgIFZlY3RvcjxSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklP
Uz4gPiByZW1vdmVkVGV4dFRyYWNrcyA9IG1fdGV4dFRyYWNrczsKKworICAgIGZvciAoTlNEaWN0
aW9uYXJ5ICp0cmFja0luZm8gaW4gdHJhY2tzKSB7CisgICAgICAgIGJvb2wgbmV3VHJhY2sgPSB0
cnVlOworICAgICAgICBOU051bWJlciAqdHJhY2tJRFZhbHVlICA9IFt0cmFja0luZm8gb2JqZWN0
Rm9yS2V5OlRleHRUcmFja0lES2V5XTsKKworICAgICAgICBpZiAoIVt0cmFja0lEVmFsdWUgaXNL
aW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkgeworICAgICAgICAgICAgTlNMb2coQCJVbmV4
cGVjdGVkIHRyYWNrIElELCBpZ25vcmluZy4iKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaW50IHRyYWNrSUQgPSBbdHJhY2tJRFZhbHVlIGludFZhbHVlXTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVtb3ZlZFRleHRUcmFja3Muc2l6ZSgpOyBpID4g
MDsgLS1pKSB7CisgICAgICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklP
Uz4gdHJhY2sgPSBzdGF0aWNfY2FzdDxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TKj4ocmVt
b3ZlZFRleHRUcmFja3NbaSAtIDFdLmdldCgpKTsKKworICAgICAgICAgICAgaWYgKHRyYWNrLT5p
bnRlcm5hbElEKCkgPT0gdHJhY2tJRCkgeworICAgICAgICAgICAgICAgIHJlbW92ZWRUZXh0VHJh
Y2tzLnJlbW92ZShpIC0gMSk7CisgICAgICAgICAgICAgICAgbmV3VHJhY2sgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAoIW5ld1RyYWNrKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgTlNTdHJpbmcg
Km5hbWUgPSBbdHJhY2tJbmZvIG9iamVjdEZvcktleTpUZXh0VHJhY2tEaXNwbGF5TmFtZUtleV07
CisgICAgICAgIE5TU3RyaW5nICpsYW5ndWFnZSA9IFt0cmFja0luZm8gb2JqZWN0Rm9yS2V5OlRl
eHRUcmFja0xvY2FsZUlkZW50aWZpZXJLZXldOworICAgICAgICBOU1N0cmluZyAqdHlwZSA9IFt0
cmFja0luZm8gb2JqZWN0Rm9yS2V5OlRleHRUcmFja1R5cGVLZXldOworCisgICAgICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6aW5iYW5kVGV4dFRyYWNrc0NoYW5nZWQoJXAp
IC0gYWRkaW5nIHRyYWNrIGlkICVpLCBuYW1lID0gJXMsIGxhbmd1YWdlID0gJXMsIHR5cGUgPSAl
cyIsIHRoaXMsIHRyYWNrSUQsIFtuYW1lIFVURjhTdHJpbmddLCBbbGFuZ3VhZ2UgVVRGOFN0cmlu
Z10sIFt0eXBlIFVURjhTdHJpbmddKTsKKworICAgICAgICBtX3RleHRUcmFja3MuYXBwZW5kKElu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkZJT1M6OmNyZWF0ZSh0aGlzLCB0cmFja0lELCBuYW1lLCBs
YW5ndWFnZSwgdHlwZSkpOworICAgIH0KKworICAgIGlmIChyZW1vdmVkVGV4dFRyYWNrcy5zaXpl
KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV90ZXh0VHJhY2tzLnNpemUoKTsgaSA+
IDA7IC0taSkgeworICAgICAgICAgICAgUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJ
T1M+IHRyYWNrID0gc3RhdGljX2Nhc3Q8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRklPUyo+KG1f
dGV4dFRyYWNrc1tpIC0gMV0uZ2V0KCkpOworCisgICAgICAgICAgICBpZiAoIXJlbW92ZWRUZXh0
VHJhY2tzLmNvbnRhaW5zKHRyYWNrKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgaWYgKG1fY3VycmVudFRyYWNrID09IHRyYWNrLmdldCgpKQorICAgICAgICAgICAg
ICAgIG1fY3VycmVudFRyYWNrID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fbWVkaWFQbGF5ZXIt
PnJlbW92ZVRleHRUcmFjayh0cmFjayk7CisgICAgICAgICAgICBtX3RleHRUcmFja3MucmVtb3Zl
KGkgLSAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3RleHRUcmFja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkZJT1M+IHRyYWNrID0gc3RhdGljX2Nhc3Q8SW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRklPUyo+KG1fdGV4dFRyYWNrc1tpXS5nZXQoKSk7CisKKyAgICAgICAgdHJhY2stPnNl
dFRleHRUcmFja0luZGV4KGkpOworICAgICAgICBpZiAodHJhY2stPmhhc0JlZW5SZXBvcnRlZCgp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdHJhY2stPnNldEhhc0JlZW5SZXBv
cnRlZCh0cnVlKTsKKyAgICAgICAgbV9tZWRpYVBsYXllci0+YWRkVGV4dFRyYWNrKHRyYWNrLmdl
dCgpKTsKKyAgICB9CisgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjppbmJh
bmRUZXh0VHJhY2tzQ2hhbmdlZCglcCkgLSBmb3VuZCAlaSBpbi1iYW5kIHRyYWNrcyIsIHRoaXMs
IG1fdGV4dFRyYWNrcy5zaXplKCkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6
c2V0U2VsZWN0ZWRUZXh0VHJhY2soTlNOdW1iZXIgKnRyYWNrSUQpCit7CisgICAgaWYgKCFbdHJh
Y2tJRCBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKSB7CisgICAgICAgIE5TTG9nKEAi
VW5leHBlY3RlZCB0cmFjayBJRCwgaWdub3JpbmcuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpIHsKKyAgICAgICAgYWRkRGVmZXJyZWRS
ZXF1ZXN0KERlZmVycmVkUHJvcGVydHlTZWxlY3RlZFRyYWNrS2V5LCB0cmFja0lEKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghW21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfc2V0U2VsZWN0ZWRUZXh0VHJhY2s6KV0pCisg
ICAgICAgIHJldHVybjsKKworICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOworICAgIHsKKyAg
ICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjpzZXRDdXJyZW50VHJhY2so
JXApIC0gc2VsZWN0aW5nIHRyYWNrIGlkICVpIiwgdGhpcywgW3RyYWNrSUQgaW50VmFsdWVdKTsK
KyAgICAgICAgW21fZGVmZXJyZWRQcm9wZXJ0aWVzLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpE
ZWZlcnJlZFByb3BlcnR5U2VsZWN0ZWRUcmFja0tleV07CisgICAgICAgIFttX21lZGlhUGxheWVy
SGVscGVyLmdldCgpIF9zZXRTZWxlY3RlZFRleHRUcmFjazp0cmFja0lEXTsKKyAgICB9CisgICAg
c2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlP
Uzo6dHJhY2tNb2RlQ2hhbmdlZCgpCit7CisgICAgUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkY+IHRyYWNrVG9FbmFibGU7CisKKyAgICAvLyBBVkZvdW5kYXRpb24gY2FuIG9ubHkgZW1p
dCBjdWVzIGZvciBvbmUgdHJhY2sgYXQgYSB0aW1lLCBzbyBlbmFibGUgdGhlIGZpcnN0IHRyYWNr
IHRoYXQgaXMgc2hvd2luZywgb3IgdGhlIGZpcnN0IHRoYXQKKyAgICAvLyBpcyBoaWRkZW4gaWYg
bm9uZSBhcmUgc2hvd2luZy4gT3RoZXJ3aXNlIGRpc2FibGUgYWxsIHRyYWNrcy4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90ZXh0VHJhY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGSU9TPiB0cmFjayA9IG1fdGV4dFRyYWNr
c1tpXTsKKyAgICAgICAgaWYgKHRyYWNrLT5tb2RlKCkgPT0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZTo6U2hvd2luZykgeworICAgICAgICAgICAgdHJhY2tUb0VuYWJsZSA9IHRyYWNrOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0cmFja1RvRW5hYmxlICYmIHRy
YWNrLT5tb2RlKCkgPT0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6SGlkZGVuKQorICAgICAgICAg
ICAgdHJhY2tUb0VuYWJsZSA9IHRyYWNrOworICAgIH0KKworICAgIEluYmFuZFRleHRUcmFja1By
aXZhdGVBVkZJT1MqIHRyYWNrUHJpdmF0ZSA9IHN0YXRpY19jYXN0PEluYmFuZFRleHRUcmFja1By
aXZhdGVBVkZJT1MqPih0cmFja1RvRW5hYmxlLmdldCgpKTsKKyAgICBpZiAobV9jdXJyZW50VHJh
Y2sgPT0gdHJhY2tQcml2YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRUcmFj
ayA9IHRyYWNrUHJpdmF0ZTsKKyAgICBzZXRTZWxlY3RlZFRleHRUcmFjayh0cmFja1ByaXZhdGUg
PyBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDp0cmFja1ByaXZhdGUtPmludGVybmFsSUQoKV0gOiBu
aWwpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6Y2xlYXJUZXh0VHJhY2tzKCkK
K3sKKyAgICBtX2N1cnJlbnRUcmFjayA9IG51bGxwdHI7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fdGV4dFRyYWNrcy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8SW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRklPUz4gdHJhY2sgPSBtX3RleHRUcmFja3NbaV07CisgICAgICAg
IG1fbWVkaWFQbGF5ZXItPnJlbW92ZVRleHRUcmFjayh0cmFjayk7CisgICAgICAgIHRyYWNrLT5k
aXNjb25uZWN0KCk7CisgICAgfQorICAgIG1fdGV4dFRyYWNrcy5jbGVhcigpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6cHJvY2Vzc0luYmFuZFRleHRUcmFja0N1ZShOU0FycmF5
ICphdHRyaWJ1dGVkU3RyaW5ncywgZG91YmxlIHRpbWUpCit7CisgICAgaWYgKCFtX2N1cnJlbnRU
cmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50VHJhY2stPnByb2Nlc3NDdWUo
cmVpbnRlcnByZXRfY2FzdDxDRkFycmF5UmVmPihhdHRyaWJ1dGVkU3RyaW5ncyksIHRpbWUpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6c2V0T3V0T2ZCYW5kVGV4dFRyYWNrcyhO
U0FycmF5ICp0cmFja3NBcnJheSkKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJIZWxwZXIpIHsK
KyAgICAgICAgYWRkRGVmZXJyZWRSZXF1ZXN0KERlZmVycmVkUHJvcGVydHlPdXRPZkJhbmRUcmFj
a3NLZXksIHRyYWNrc0FycmF5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgh
W21fbWVkaWFQbGF5ZXJIZWxwZXIuZ2V0KCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihf
c2V0T3V0T2ZCYW5kVGV4dFRyYWNrczopXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0RGVs
YXlDYWxsYmFja3ModHJ1ZSk7CisgICAgeworICAgICAgICBbbV9kZWZlcnJlZFByb3BlcnRpZXMu
Z2V0KCkgcmVtb3ZlT2JqZWN0Rm9yS2V5OkRlZmVycmVkUHJvcGVydHlPdXRPZkJhbmRUcmFja3NL
ZXldOworICAgICAgICBbbV9tZWRpYVBsYXllckhlbHBlci5nZXQoKSBfc2V0T3V0T2ZCYW5kVGV4
dFRyYWNrczp0cmFja3NBcnJheV07CisgICAgfQorICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNl
KTsKK30KKworc3RhdGljIGludCBwbGF0Zm9ybVRyYWNrSUQoUGxhdGZvcm1UZXh0VHJhY2sqIHBs
YXRmb3JtVHJhY2spCit7CisgICAgaWYgKHBsYXRmb3JtVHJhY2stPnR5cGUoKSA9PSBQbGF0Zm9y
bVRleHRUcmFjazo6SW5CYW5kKSB7CisgICAgICAgIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJ
T1MqIHRyYWNrUHJpdmF0ZSA9IHN0YXRpY19jYXN0PEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZJ
T1MqPihwbGF0Zm9ybVRyYWNrLT5jbGllbnQoKS0+cHJpdmF0ZVRyYWNrKCkpOworICAgICAgICBy
ZXR1cm4gdHJhY2tQcml2YXRlID8gdHJhY2tQcml2YXRlLT5pbnRlcm5hbElEKCkgOiAwOworICAg
IH0KKworICAgIHJldHVybiBwbGF0Zm9ybVRyYWNrLT51bmlxdWVJZCgpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUlPUzo6b3V0T2ZCYW5kVGV4dFRyYWNrc0NoYW5nZWQoKQoreworICAg
IGlmICghbV9tZW51SW50ZXJmYWNlLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB0cmFja3NBcnJheSA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1UZXh0VHJh
Y2s+ID4gdGV4dFRyYWNrcyA9IG1fbWVudUludGVyZmFjZS0+Y2xpZW50KCktPnBsYXRmb3JtVGV4
dFRyYWNrcygpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRUcmFja3Muc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiBwbGF0Zm9ybVRy
YWNrID0gdGV4dFRyYWNrc1tpXTsKKworICAgICAgICBpZiAocGxhdGZvcm1UcmFjay0+dHlwZSgp
ID09IFBsYXRmb3JtVGV4dFRyYWNrOjpJbkJhbmQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgaWYgKHBsYXRmb3JtVHJhY2stPmtpbmQoKSAhPSBQbGF0Zm9ybVRleHRUcmFjazo6U3Vi
dGl0bGUgJiYgcGxhdGZvcm1UcmFjay0+a2luZCgpICE9IFBsYXRmb3JtVGV4dFRyYWNrOjpDYXB0
aW9uKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZURpY3Rpb25hcnk+IHRyYWNrID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2Nd
IGluaXRdKTsKKworICAgICAgICBbdHJhY2suZ2V0KCkgc2V0T2JqZWN0OnBsYXRmb3JtVHJhY2st
PmxhYmVsKCkgZm9yS2V5OlRleHRUcmFja0Rpc3BsYXlOYW1lS2V5XTsKKworICAgICAgICBpZiAo
IXBsYXRmb3JtVHJhY2stPmxhbmd1YWdlKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgW3RyYWNr
LmdldCgpIHNldE9iamVjdDpwbGF0Zm9ybVRyYWNrLT5sYW5ndWFnZSgpIGZvcktleTpUZXh0VHJh
Y2tMb2NhbGVJZGVudGlmaWVyS2V5XTsKKworICAgICAgICBOU1N0cmluZyAqdHlwZSA9IHBsYXRm
b3JtVHJhY2stPmtpbmQoKSA9PSBQbGF0Zm9ybVRleHRUcmFjazo6U3VidGl0bGUgPyBUZXh0VHJh
Y2tTdWJ0aXRsZXNLZXkgOiBUZXh0VHJhY2tDYXB0aW9uc0tleTsKKyAgICAgICAgW3RyYWNrLmdl
dCgpIHNldE9iamVjdDp0eXBlIGZvcktleTpUZXh0VHJhY2tUeXBlS2V5XTsKKworICAgICAgICBb
dHJhY2suZ2V0KCkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50OnBsYXRmb3JtVHJh
Y2tJRChwbGF0Zm9ybVRyYWNrLmdldCgpKV0gZm9yS2V5OlRleHRUcmFja0lES2V5XTsKKworICAg
ICAgICBbdHJhY2tzQXJyYXkgYWRkT2JqZWN0OnRyYWNrLmdldCgpXTsKKyAgICB9CisKKyAgICBp
ZiAoIVt0cmFja3NBcnJheS5nZXQoKSBjb3VudF0pCisgICAgICAgIHJldHVybjsKKworICAgIHNl
dE91dE9mQmFuZFRleHRUcmFja3ModHJhY2tzQXJyYXkuZ2V0KCkpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUlPUzo6dGV4dFRyYWNrV2FzU2VsZWN0ZWRCeU1lZGlhRWxlbWVudChQYXNz
UmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiBwbGF0Zm9ybVRyYWNrKQoreworICAgIHNldFNlbGVj
dGVkVGV4dFRyYWNrKFtOU051bWJlciBudW1iZXJXaXRoSW50OnBsYXRmb3JtVHJhY2tJRChwbGF0
Zm9ybVRyYWNrLmdldCgpKV0pOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUlPUzo6dGV4
dFRyYWNrV2FzU2VsZWN0ZWRCeVBsdWdpbihOU0RpY3Rpb25hcnkgKnRyYWNrSW5mbykKK3sKKyAg
ICBpZiAoIW1fbWVudUludGVyZmFjZSB8fCAhbV9tZW51SW50ZXJmYWNlLT5jbGllbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCF0cmFja0luZm8pIHsKKyAgICAgICAgbV9tZW51SW50
ZXJmYWNlLT5jbGllbnQoKS0+c2V0U2VsZWN0ZWRUZXh0VHJhY2soMCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+IHRyYWNrVG9TZWxlY3Q7
CisgICAgTlNOdW1iZXIgKnRyYWNrSURUb1NlbGVjdCAgPSBbdHJhY2tJbmZvIG9iamVjdEZvcktl
eTpUZXh0VHJhY2tJREtleV07CisgICAgaWYgKCFbdHJhY2tJRFRvU2VsZWN0IGlzS2luZE9mQ2xh
c3M6W05TTnVtYmVyIGNsYXNzXV0pIHsKKyAgICAgICAgTlNMb2coQCJVbmV4cGVjdGVkIHRyYWNr
IElELCBpZ25vcmluZy4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCB0cmFj
a0lEID0gW3RyYWNrSURUb1NlbGVjdCBpbnRWYWx1ZV07CisgICAgaWYgKHRyYWNrSUQgPT0gVGV4
dFRyYWNrT2ZmTWVudUl0ZW1JRCkKKyAgICAgICAgdHJhY2tUb1NlbGVjdCA9IFBsYXRmb3JtVGV4
dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKTsKKyAgICBlbHNlIGlmICh0cmFja0lEID09IFRl
eHRUcmFja0F1dG9NZW51SXRlbUlEKQorICAgICAgICB0cmFja1RvU2VsZWN0ID0gUGxhdGZvcm1U
ZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpOworICAgIGVsc2UgeworICAgICAg
ICBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiA+IHRleHRUcmFja3MgPSBtX21lbnVJ
bnRlcmZhY2UtPmNsaWVudCgpLT5wbGF0Zm9ybVRleHRUcmFja3MoKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRleHRUcmFja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4gcGxhdGZvcm1UcmFjayA9IHRleHRUcmFja3NbaV07
CisKKyAgICAgICAgICAgIGlmICh0cmFja0lEID09IHBsYXRmb3JtVHJhY2tJRChwbGF0Zm9ybVRy
YWNrLmdldCgpKSkgeworICAgICAgICAgICAgICAgIHRyYWNrVG9TZWxlY3QgPSBwbGF0Zm9ybVRy
YWNrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKCF0cmFja1RvU2VsZWN0KSB7CisgICAgICAgIE5TTG9nKEAiVGV4dCB0
cmFjayBJRCAlaSBpcyB1bmtub3duLCBpZ25vcmluZy4iLCB0cmFja0lEKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1fbWVudUludGVyZmFjZS0+Y2xpZW50KCktPnNldFNlbGVjdGVk
VGV4dFRyYWNrKHRyYWNrVG9TZWxlY3QpOworfQorCitQYXNzUmVmUHRyPFBsYXRmb3JtVGV4dFRy
YWNrTWVudUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRlSU9TOjp0ZXh0VHJhY2tNZW51KCkK
K3sKKyAgICBpZiAoIW1fbWVudUludGVyZmFjZSkKKyAgICAgICAgbV9tZW51SW50ZXJmYWNlID0g
UGxhdGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlSU9TOjpjcmVhdGUodGhpcyk7CisgICAgcmV0
dXJuIG1fbWVudUludGVyZmFjZTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworQGltcGxlbWVudGF0aW9uIFdlYkNvcmVNZWRpYVBs
YXllck5vdGlmaWNhdGlvbkhlbHBlcgorCistIChpZClpbml0V2l0aENsaWVudDooTWVkaWFQbGF5
ZXJQcml2YXRlSU9TICopY2xpZW50Cit7CisgICAgX2NsaWVudCA9IGNsaWVudDsKKyAgICByZXR1
cm4gW3N1cGVyIGluaXRdOworfQorCistICh2b2lkKWRpc2Nvbm5lY3QKK3sKKyAgICBbTlNPYmpl
Y3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGZdOworICAgIF9j
bGllbnQgPSAwOworfQorCistICh2b2lkKWNhbmNlbFBlbmRpbmdSZXF1ZXN0cworeworICAgIFtO
U09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZl07Cit9
CisKKy0gKHZvaWQpZGVsYXlOb3RpZmljYXRpb246KGludClub3RpZmljYXRpb24KK3sKKyAgICBp
ZiAoX2NsaWVudCkKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihkZWxp
dmVyTm90aWZpY2F0aW9uOikgd2l0aE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpub3Rp
ZmljYXRpb25dIGFmdGVyRGVsYXk6MF07Cit9CisKKy0gKHZvaWQpZGVsaXZlck5vdGlmaWNhdGlv
bjooTlNOdW1iZXIgKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIV9jbGllbnQpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoX2NsaWVudC0+Y2FsbGJhY2tzRGVsYXllZCgpKQorICAgICAgICBb
c2VsZiBkZWxheU5vdGlmaWNhdGlvbjpbbm90aWZpY2F0aW9uIGludFZhbHVlXV07CisgICAgZWxz
ZQorICAgICAgICBfY2xpZW50LT5kZWxpdmVyTm90aWZpY2F0aW9uKChNZWRpYVBsYXllclByb3h5
Tm90aWZpY2F0aW9uVHlwZSlbbm90aWZpY2F0aW9uIGludFZhbHVlXSk7Cit9CisKKy0gKHZvaWQp
c2NoZWR1bGVQcmVwYXJlVG9QbGF5V2l0aE9wdGlvbmFsRGVsYXk6KE5TTnVtYmVyICopc2hvdWxk
RGVsYXkKK3sKKyAgICBpZiAoIV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoW3No
b3VsZERlbGF5IGJvb2xWYWx1ZV0pCisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2Vs
ZWN0b3Ioc2NoZWR1bGVQcmVwYXJlVG9QbGF5V2l0aE9wdGlvbmFsRGVsYXk6KSB3aXRoT2JqZWN0
OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10gYWZ0ZXJEZWxheTowXTsKKyAgICBlbHNlCisg
ICAgICAgIF9jbGllbnQtPnByZXBhcmVUb1BsYXkoKTsKK30KKworLSAodm9pZClzY2hlZHVsZURl
ZmVycmVkUHJvcGVydGllc1dpdGhPcHRpb25hbERlbGF5OihOU051bWJlciAqKXNob3VsZERlbGF5
Cit7CisgICAgaWYgKCFfY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoW3Nob3Vs
ZERlbGF5IGJvb2xWYWx1ZV0pIHsKKyAgICAgICAgaWYgKCFfZGVmZXJyZWRQcm9wZXJ0aWVzU2No
ZWR1bGVkKSB7CisgICAgICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHNj
aGVkdWxlRGVmZXJyZWRQcm9wZXJ0aWVzV2l0aE9wdGlvbmFsRGVsYXk6KSB3aXRoT2JqZWN0OltO
U051bWJlciBudW1iZXJXaXRoQm9vbDpOT10gYWZ0ZXJEZWxheTowXTsKKyAgICAgICAgICAgIF9k
ZWZlcnJlZFByb3BlcnRpZXNTY2hlZHVsZWQgPSBZRVM7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIF9kZWZlcnJlZFByb3BlcnRpZXNTY2hlZHVsZWQgPSBOTzsKKyAg
ICBfY2xpZW50LT5wcm9jZXNzRGVmZXJyZWRSZXF1ZXN0cygpOworfQorCistICh2b2lkKXBsdWdp
bkVsZW1lbnRJbkJhbmRBbHRlcm5hdGVUZXh0VHJhY2tzRGlkQ2hhbmdlOihOU0FycmF5ICopdHJh
Y2tzCit7CisgICAgaWYgKCFfY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJUaHJl
YWRSdW4oXnsKKyAgICAgICAgaWYgKCFfY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBfY2xpZW50LT5pbmJhbmRUZXh0VHJhY2tzQ2hhbmdlZCh0cmFja3MpOworICAgIH0pOwor
fQorCistICh2b2lkKXBsdWdpbkVsZW1lbnREaWRTZWxlY3RUZXh0VHJhY2s6KE5TRGljdGlvbmFy
eSAqKXRyYWNrSW5mbworeworICAgIGlmICghX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlmICghX2NsaWVudCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgX2NsaWVudC0+dGV4dFRyYWNrV2FzU2VsZWN0ZWRCeVBsdWdpbih0cmFj
a0luZm8pOworICAgIH0pOworfQorCistICh2b2lkKXBsdWdpbkVsZW1lbnREaWRPdXRwdXRBdHRy
aWJ1dGVkU3RyaW5nczooTlNBcnJheSAqKXN0cmluZ3MgbmF0aXZlU2FtcGxlQnVmZmVyczooTlNB
cnJheSAqKWJ1ZmZlcnMgZm9yVGltZTooTlNUaW1lSW50ZXJ2YWwpdGltZQoreworICAgIFVOVVNF
RF9QQVJBTShidWZmZXJzKTsKKworICAgIGlmICghX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlmICghX2NsaWVudCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgX2NsaWVudC0+cHJvY2Vzc0luYmFuZFRleHRUcmFja0N1ZShzdHJp
bmdzLCB0aW1lKTsKKyAgICB9KTsKK30KKworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43NzUwYzQ5ZTVjZTM0Yjk2ZDk1OTJjMjY0NjEzMThkN2Y0OTUyZjFiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1Np
bXBsZUZvbnREYXRhSU9TLm1tCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA1LCAyMDA2LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292CisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKKworI2ltcG9ydCAi
QmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250Q2FjaGUu
aCIKKyNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgorI2ltcG9ydCAiRm9udFNlcnZpY2VzSU9T
LmgiCisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ0dGb250R2x5cGhTdXBwb3J0Lmg+CisjaW1wb3J0
IDxDb3JlR3JhcGhpY3MvQ0dGb250SW5mby5oPgorI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NHRm9u
dFJlbmRlcmluZy5oPgorI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNpbXBvcnQgPGZs
b2F0Lmg+CisjaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBib29sIGZvbnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoQ0ZTdHJp
bmdSZWYgZm9udEZhbWlseU5hbWUpCit7CisgICAgaWYgKCFmb250RmFtaWx5TmFtZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJp
YyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiA8
cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4KKyAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTIw
OTY4MzU+IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgdGhlIGFib3ZlIGJ1ZyBpcyBmaXhlZC4K
KyAgICAvLyBBcmlhbCBhbmQgVGFob21hIGFyZSBoYXZlIHBlcmZvcm1hbmNlIGlzc3VlcyBzbyBk
b24ndCB1c2UgdGhlbSBhcyB3ZWxsLgorICAgIHJldHVybiAoQ0ZTdHJpbmdDb21wYXJlKENGU1RS
KCJUaW1lcyBOZXcgUm9tYW4iKSwgZm9udEZhbWlseU5hbWUsIDApID09IGtDRkNvbXBhcmVFcXVh
bFRvKQorICAgICAgICAgICB8fCAoQ0ZTdHJpbmdDb21wYXJlKENGU1RSKCJBcmlhbCIpLCBmb250
RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pCisgICAgICAgICAgIHx8IChDRlN0
cmluZ0NvbXBhcmUoQ0ZTVFIoIlRhaG9tYSIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29t
cGFyZUVxdWFsVG8pOworfQorCitzdGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlwaHMoQ1RG
b250UmVmIGN0Rm9udCkKK3sKKyAgICAvLyBUaGUgY2hlY2sgZG9lc24ndCBsb29rIG5lYXQgYnV0
IHRoaXMgaXMgd2hhdCBBcHBLaXQgZG9lcyBmb3IgdmVydGljYWwgd3JpdGluZy4uLgorICAgIFJl
dGFpblB0cjxDRkFycmF5UmVmPiB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFpbGFi
bGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAgICBDRklu
ZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOworICAgIGZv
ciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7CisgICAg
ICAgIENURm9udFRhYmxlVGFnIHRhZyA9IChDVEZvbnRUYWJsZVRhZykodWludHB0cl90KUNGQXJy
YXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCk7CisgICAgICAgIGlmICh0
YWcgPT0ga0NURm9udFRhYmxlVmhlYSB8fCB0YWcgPT0ga0NURm9udFRhYmxlVk9SRykKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit7CisgICAgbV9zeW50aGV0aWNCb2xkT2Zm
c2V0ID0gbV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkID8gY2VpbGYobV9wbGF0Zm9ybURh
dGEuc2l6ZSgpICAvIDI0LjBmKSA6IDAuZjsKKyAgICBtX3NwYWNlR2x5cGggPSAwOworICAgIG1f
c3BhY2VXaWR0aCA9IDA7CisgICAgdW5zaWduZWQgdW5pdHNQZXJFbTsKKyAgICBmbG9hdCBhc2Nl
bnQ7CisgICAgZmxvYXQgZGVzY2VudDsKKyAgICBmbG9hdCBsaW5lR2FwOworICAgIGZsb2F0IGxp
bmVTcGFjaW5nOworICAgIGZsb2F0IHhIZWlnaHQ7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBmYW1pbHlOYW1lOworICAgIGlmIChDVEZvbnRSZWYgY3RGb250ID0gbV9wbGF0Zm9ybURhdGEu
Zm9udCgpKSB7CisgICAgICAgIEZvbnRTZXJ2aWNlc0lPUyBmb250U2VydmljZShjdEZvbnQpOwor
ICAgICAgICBhc2NlbnQgPSBjZWlsZihmb250U2VydmljZS5hc2NlbnQoKSk7CisgICAgICAgIGRl
c2NlbnQgPSBjZWlsZihmb250U2VydmljZS5kZXNjZW50KCkpOworICAgICAgICBsaW5lU3BhY2lu
ZyA9IGZvbnRTZXJ2aWNlLmxpbmVTcGFjaW5nKCk7CisgICAgICAgIGxpbmVHYXAgPSBmb250U2Vy
dmljZS5saW5lR2FwKCk7CisgICAgICAgIHhIZWlnaHQgPSBmb250U2VydmljZS54SGVpZ2h0KCk7
CisgICAgICAgIHVuaXRzUGVyRW0gPSBmb250U2VydmljZS51bml0c1BlckVtKCk7CisgICAgICAg
IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGN0Rm9udCkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIENHRm9udFJlZiBjZ0ZvbnQgPSBtX3BsYXRmb3JtRGF0YS5jZ0Zv
bnQoKTsKKworICAgICAgICB1bml0c1BlckVtID0gQ0dGb250R2V0VW5pdHNQZXJFbShjZ0ZvbnQp
OworCisgICAgICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAg
ICAgICAgYXNjZW50ID0gbHJvdW5kZihzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRBc2NlbnQoY2dG
b250KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOworICAgICAgICBkZXNjZW50ID0gbHJvdW5k
Zigtc2NhbGVFbVRvVW5pdHMoLWFicyhDR0ZvbnRHZXREZXNjZW50KGNnRm9udCkpLCB1bml0c1Bl
ckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIGxpbmVHYXAgPSBscm91bmRmKHNjYWxlRW1Ub1Vu
aXRzKENHRm9udEdldExlYWRpbmcoY2dGb250KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOwor
ICAgICAgICB4SGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0WEhlaWdodChjZ0ZvbnQp
LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKworICAgICAgICBsaW5lU3BhY2luZyA9IGFzY2Vu
dCArIGRlc2NlbnQgKyBsaW5lR2FwOworICAgICAgICBmYW1pbHlOYW1lID0gYWRvcHRDRihDR0Zv
bnRDb3B5RmFtaWx5TmFtZShjZ0ZvbnQpKTsKKyAgICB9CisKKyAgICBtX2ZvbnRNZXRyaWNzLnNl
dFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7CisgICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNj
ZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7CisgICAgbV9mb250
TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNw
YWNpbmcobGluZVNwYWNpbmcpOworICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0
KTsKKyAgICBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyA9IGZvbnRGYW1pbHlTaG91bGROb3RC
ZVVzZWRGb3JBcmFiaWMoZmFtaWx5TmFtZS5nZXQoKSk7CisKKyAgICBpZiAocGxhdGZvcm1EYXRh
KCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFj
aygpKQorICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9udEhhc1ZlcnRpY2FsR2x5cGhz
KG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKKworICAgIGlmICghbV9wbGF0Zm9ybURhdGEubV9p
c0Vtb2ppKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgdGhpcmRPZlNpemUgPSBtX3BsYXRm
b3JtRGF0YS5zaXplKCkgLyAzOworICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KHRoaXJkT2ZT
aXplKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQodGhpcmRPZlNpemUpOworICAgIG1f
Zm9udE1ldHJpY3Muc2V0TGluZUdhcCh0aGlyZE9mU2l6ZSk7CisgICAgbV9mb250TWV0cmljcy5z
ZXRMaW5lU3BhY2luZygwKTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFy
V2lkdGhJbml0KCkKK3sKKyAgICBtX2F2Z0NoYXJXaWR0aCA9IDA7CisgICAgbV9tYXhDaGFyV2lk
dGggPSAwOworCisgICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9ybSBlc3RpbWF0ZSwg
d2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUgbm9uLXBvc2l0aXZl
LgorICAgIGluaXRDaGFyV2lkdGhzKCk7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAoreworICAgIGlmIChpc0N1c3Rv
bUZvbnQoKSkgeworICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKG1fcGxh
dGZvcm1EYXRhKTsKKyAgICAgICAgc2NhbGVkRm9udERhdGEubV9zaXplID0gc2NhbGVkRm9udERh
dGEubV9zaXplICogc2NhbGVGYWN0b3I7CisgICAgICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6
Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgZmxvYXQg
c2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOworICAgIENURm9udFN5
bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhtX3BsYXRm
b3JtRGF0YS5mb250KCkpOworICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250
RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fcGxhdGZvcm1E
YXRhLmZvbnQoKSkpOworICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IHNjYWxlZEZvbnQgPSBhZG9w
dENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwg
c2l6ZSwgbnVsbHB0cikpOworICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoc2Nh
bGVkRm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEuaXNQcmludGVyRm9udCgpLCBmYWxz
ZSwgZmFsc2UsIG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkpOworCisgICAgaWYgKHNjYWxl
ZEZvbnREYXRhLmZvbnQoKSkgeworICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0
aWNCb2xkKQorICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0OworICAg
ICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlKQorICAgICAgICAgICAg
Zm9udFRyYWl0cyB8PSBrQ1RGb250SXRhbGljVHJhaXQ7CisKKyAgICAgICAgQ1RGb250U3ltYm9s
aWNUcmFpdHMgc2NhbGVkRm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKHNjYWxl
ZEZvbnREYXRhLmZvbnQoKSk7CisgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljQm9s
ZCA9IChmb250VHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRz
ICYga0NURm9udFRyYWl0Qm9sZCk7CisgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGlj
T2JsaXF1ZSA9IChmb250VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZv
bnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOworCisgICAgICAgIHJldHVybiBmb250Q2Fj
aGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEoJnNjYWxlZEZvbnREYXRhKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0
ZXJzKGNvbnN0IFVDaGFyKiwgaW50KSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIENURm9udFJlZiBj
dEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9
IGZhbHNlOworICAgIGlmICghY3RGb250KQorICAgICAgICByZXR1cm47IC8vIENURm9udCBpcyBu
dWxsIGluIHRoZSBjYXNlIG9mIFNWRyBmb250cyBmb3IgZXhhbXBsZS4KKworICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENURm9udENvcHlGdWxsTmFtZShjdEZv
bnQpKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWUgPSBhZG9wdENGKENU
Rm9udENvcHlGYW1pbHlOYW1lKGN0Rm9udCkpOworCisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9
IENHRm9udElzRml4ZWRQaXRjaChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSkgfHwgKGZ1bGxOYW1l
ICYmIChDRlN0cmluZ0NvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIiks
IGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvIHx8IENGU3Ry
aW5nQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1TLVBHb3RoaWMiKSwga0NGQ29tcGFy
ZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pKTsKKyAgICBpZiAoZmFtaWx5
TmFtZSAmJiBDRlN0cmluZ0NvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkNvdXJpZXIg
TmV3IiksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSB7
CisgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBDb3VyaWVyIE5ldyB0byBub3QgYmUgdHJlYXRlZCBh
cyBmaXhlZCBwaXRjaCwgYXMgdGhpcyB3aWxsIG1ha2UgdXNlIG9mIGEgaGFja2VkIHNwYWNlIHdp
ZHRoIHdoaWNoIGlzIHVuZGVzaXJlYWJsZSBmb3IgaVBob25lIChzZWUgcmRhcjovLzYyNjk3ODMp
LgorICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7CisgICAgfQorfQorCitmbG9h
dCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25z
dAoreworICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKKyAgICBpZiAocGxhdGZvcm1E
YXRhKCkub3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhG
YWxsYmFjaykgeworICAgICAgICBpZiAocGxhdGZvcm1EYXRhKCkubV9pc0Vtb2ppKQorICAgICAg
ICAgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCks
IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24sICZnbHlwaCwgJmFkdmFuY2UsIDEpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZsb2F0IHBvaW50U2l6ZSA9IHBsYXRmb3JtRGF0YSgp
Lm1fc2l6ZTsKKyAgICAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZm
aW5lVHJhbnNmb3JtTWFrZVNjYWxlKHBvaW50U2l6ZSwgcG9pbnRTaXplKTsKKyAgICAgICAgICAg
IHN0YXRpYyBjb25zdCBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5kZXJpbmdTdHlsZSA9IGtDR0Zv
bnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBp
eGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlv
biB8IGtDR0ZvbnRBbnRpYWxpYXNpbmdTdHlsZVVuZmlsdGVyZWQ7CisgICAgICAgICAgICBpZiAo
IUNHRm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHlsZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwg
JnRyYW5zZm9ybSwgcmVuZGVyaW5nU3R5bGUsICZnbHlwaCwgMSwgJmFkdmFuY2UpKSB7CisgICAg
ICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmdWxsTmFtZSA9IGFkb3B0Q0YoQ0dG
b250Q29weUZ1bGxOYW1lKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpKSk7CisgICAgICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY2FjaGUgZ2x5cGggd2lkdGhzIGZvciAlQCAlZiIsIGZ1
bGxOYW1lLmdldCgpLCBwb2ludFNpemUpOworICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGgg
PSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIENURm9u
dEdldEFkdmFuY2VzRm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBrQ1RGb250VmVy
dGljYWxPcmllbnRhdGlvbiwgJmdseXBoLCAmYWR2YW5jZSwgMSk7CisKKyAgICByZXR1cm4gYWR2
YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9z
L1RleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9pb3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOWU4
YjZlOTAyMDNiMDBhYTBjODA4Yjg2ZDM3ZjIwYWE4OGJjNzE3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1RleHRUcmFja1JlcHJlc2VudGF0
aW9uSU9TLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25JT1NfaAorI2RlZmluZSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPU19o
CisKKyNpZiBQTEFURk9STShJT1MpICYmIEVOQUJMRShWSURFT19UUkFDSykKKworI2ltcG9ydCAi
VGV4dFRyYWNrUmVwcmVzZW50YXRpb24uaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FMYXllci5o
PgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitAY2xhc3MgV2ViQ29yZVRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSU9TSGVscGVyOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uSU9TIDogcHVibGljIFRleHRUcmFja1JlcHJlc2VudGF0aW9u
IHsKK3B1YmxpYzoKKyAgICBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUyhUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbkNsaWVudCopOworICAgIHZpcnR1YWwgflRleHRUcmFja1JlcHJlc2VudGF0aW9u
SU9TKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgT1ZFUlJJREUgeyByZXR1cm4gbV9sYXll
ci5nZXQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50U2NhbGUoZmxvYXQpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgSW50UmVjdCBib3VuZHMoKSBjb25zdCBPVkVSUklERTsKKworICAg
IFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBt
X2NsaWVudDsgfQorCitwcml2YXRlOgorICAgIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ2xpZW50
KiBtX2NsaWVudDsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9sYXllcjsKKyAgICBSZXRhaW5Q
dHI8V2ViQ29yZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TSGVscGVyPiBtX2RlbGVnYXRlOwor
fTsKKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoVklERU9fVFJBQ0sp
CisKKyNlbmRpZiAvLyBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPU19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25JT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25JT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWUzNWU0MmI4OTljOTE1YzdhNTJmOGVm
ZDg2NjIzNmFmMDJjMDRiZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2lvcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbQpAQCAtMCwwICsx
LDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFBMQVRGT1JN
KElPUykgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb25JT1MuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgorI2luY2x1ZGUgIldl
YkNvcmVUaHJlYWRSdW4uaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitAaW50ZXJmYWNlIFdlYkNvcmVUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bklPU0hlbHBlciA6IE5TT2JqZWN0IHsKKyAgICBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUyog
X3BhcmVudDsKK30KKy0gKGlkKWluaXRXaXRoUGFyZW50OihUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bklPUyopcGFyZW50OworQHByb3BlcnR5IChhc3NpZ24pIFRleHRUcmFja1JlcHJlc2VudGF0aW9u
SU9TKiBwYXJlbnQ7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJDb3JlVGV4dFRyYWNrUmVw
cmVzZW50YXRpb25JT1NIZWxwZXIKKy0gKGlkKWluaXRXaXRoUGFyZW50OihUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbklPUyopcGFyZW50Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLnBhcmVudCA9IHBhcmVudDsKKworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBzZWxmLnBhcmVudCA9
IG5pbDsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0UGFyZW50OihUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbklPUyopcGFyZW50Cit7CisgICAgaWYgKF9wYXJlbnQpCisgICAg
ICAgIFtfcGFyZW50LT5wbGF0Zm9ybUxheWVyKCkgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBmb3JLZXlQ
YXRoOkAiYm91bmRzIl07CisKKyAgICBfcGFyZW50ID0gcGFyZW50OworCisgICAgaWYgKF9wYXJl
bnQpCisgICAgICAgIFtfcGFyZW50LT5wbGF0Zm9ybUxheWVyKCkgYWRkT2JzZXJ2ZXI6c2VsZiBm
b3JLZXlQYXRoOkAiYm91bmRzIiBvcHRpb25zOm5pbCBjb250ZXh0OjBdOworfQorCistIChUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbklPUyopcGFyZW50Cit7CisgICAgcmV0dXJuIF9wYXJlbnQ7Cit9
CisKKy0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDooTlNTdHJpbmcgKilrZXlQYXRoIG9m
T2JqZWN0OihpZClvYmplY3QgY2hhbmdlOihOU0RpY3Rpb25hcnkgKiljaGFuZ2UgY29udGV4dDoo
dm9pZCAqKWNvbnRleHQKK3sKKyAgICBVTlVTRURfUEFSQU0oY2hhbmdlKTsKKyAgICBVTlVTRURf
UEFSQU0oY29udGV4dCk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlmIChfcGFyZW50
ICYmIFtrZXlQYXRoIGlzRXF1YWw6QCJib3VuZHMiXSAmJiBvYmplY3QgPT0gX3BhcmVudC0+cGxh
dGZvcm1MYXllcigpKQorICAgICAgICAgICAgX3BhcmVudC0+Y2xpZW50KCktPnRleHRUcmFja1Jl
cHJlc2VudGF0aW9uQm91bmRzQ2hhbmdlZChfcGFyZW50LT5ib3VuZHMoKSk7CisgICAgfSk7Cit9
CisKKy0gKGlkKWFjdGlvbkZvckxheWVyOihDQUxheWVyICopbGF5ZXIgZm9yS2V5OihOU1N0cmlu
ZyAqKWV2ZW50Cit7CisgICAgVU5VU0VEX1BBUkFNKGxheWVyKTsKKyAgICBVTlVTRURfUEFSQU0o
ZXZlbnQpOworICAgIC8vIFJldHVybmluZyBhIE5TTnVsbCBmcm9tIHRoaXMgZGVsZWdhdGUgbWV0
aG9kIGRpc2FibGVzIGFsbCBpbXBsaWNpdCBDQUxheWVyIGFjdGlvbnMuCisgICAgcmV0dXJuIFtO
U051bGwgbnVsbF07Cit9CisKK0BlbmQKKworUGFzc093blB0cjxUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbj4gVGV4dFRyYWNrUmVwcmVzZW50YXRpb246OmNyZWF0ZShUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25JT1MoY2xpZW50KSk7Cit9CisKK1RleHRUcmFja1JlcHJlc2VudGF0aW9u
SU9TOjpUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUyhUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNs
aWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9sYXllcihhZG9w
dE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pKQorICAgICwgbV9kZWxlZ2F0ZShhZG9wdE5TKFtb
V2ViQ29yZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TSGVscGVyIGFsbG9jXSBpbml0V2l0aFBh
cmVudDp0aGlzXSkpCit7CisgICAgW21fbGF5ZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bV9kZWxlZ2F0
ZS5nZXQoKV07CisgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHNHcmF2aXR5OmtDQUdyYXZp
dHlCb3R0b21dOworfQorCitUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklPUzo6flRleHRUcmFja1Jl
cHJlc2VudGF0aW9uSU9TKCkKK3sKKyAgICBbbV9sYXllci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxd
OworICAgIFttX2RlbGVnYXRlLmdldCgpIHNldFBhcmVudDowXTsKK30KKwordm9pZCBUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbklPUzo6dXBkYXRlKCkKK3sKKyAgICBpZiAoUmVmUHRyPEltYWdlPiBy
ZXByZXNlbnRhdGlvbiA9IG1fY2xpZW50LT5jcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklt
YWdlKCkpCisgICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzOihpZClyZXByZXNlbnRh
dGlvbi0+Z2V0Q0dJbWFnZVJlZigpXTsKK30KKwordm9pZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bklPUzo6c2V0Q29udGVudFNjYWxlKGZsb2F0IHNjYWxlKQoreworICAgIFttX2xheWVyLmdldCgp
IHNldENvbnRlbnRzU2NhbGU6c2NhbGVdOworfQorCitJbnRSZWN0IFRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uSU9TOjpib3VuZHMoKSBjb25zdAoreworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KEZsb2F0UmVjdChbbV9sYXllci5nZXQoKSBib3VuZHNdKSk7Cit9CisKKyNlbmRpZiAvLyBQTEFU
Rk9STShJT1MpICYmIEVOQUJMRShWSURFT19UUkFDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLmgKaW5kZXggMjQ4MmI1OTNiYjhlZTI4YTJjMDA1
ODI5YjUzYjM3MWM5Mjc2NzhiMi4uMDEzYzFlNTRkZjhkNmJlYjNjNWIzNzA5MmJkYzYyY2U3MTNj
ZDU4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bG9yTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9y
TWFjLmgKQEAgLTMxLDEzICszMSwxNyBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKIAorI2lmICFQ
TEFURk9STShJT1MpCiBPQkpDX0NMQVNTIE5TQ29sb3I7CisjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gVGhlc2UgZnVuY3Rpb25z
IGFzc3VtZSBOU0NvbG9ycyBhcmUgaW4gRGV2aWNlUkdCIGNvbG9yc3BhY2UKICAgICBDb2xvciBj
b2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKik7CiAgICAgTlNDb2xvciAqbnNDb2xvcihjb25zdCBD
b2xvciYpOworI2VuZGlmCiAKICAgICBib29sIHVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKCk7
CiAgICAgdm9pZCBzZXRVc2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcihib29sKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlci5jcHAKaW5kZXggNDk3MWY0ZGEyMzYxZWE2ZTM0NzgzMzk3ODg5MjE3ZjE0
NjUwZjI5Yy4uNjAzOTE5Zjg5Zjc0ODVlOTVkMDg1NGQ2MGNiNmZhOTAxYmZhMzc5NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bXBsZXhUZXh0Q29udHJvbGxlci5jcHAKQEAgLTMxLDcgKzMxLDExIEBACiAjaW5jbHVkZSAiUmVu
ZGVyVGV4dC5oIgogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4
dFJ1bi5oIgorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNl
cy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVU
ZXh0Lmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIApAQCAtNTcyLDYgKzU3Niw5IEBAIHZvaWQg
Q29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHNBbmRBZHZhbmNlcygpCiAgICAgICAg
IENvbXBsZXhUZXh0UnVuJiBjb21wbGV4VGV4dFJ1biA9ICptX2NvbXBsZXhUZXh0UnVuc1tyXTsK
ICAgICAgICAgdW5zaWduZWQgZ2x5cGhDb3VudCA9IGNvbXBsZXhUZXh0UnVuLmdseXBoQ291bnQo
KTsKICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gY29tcGxleFRleHRS
dW4uZm9udERhdGEoKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGJvb2wgaXNFbW9qaSA9
IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5tX2lzRW1vamk7CisjZW5kaWYKIAogICAgICAgICAv
LyBSZXByZXNlbnQgdGhlIGluaXRpYWwgYWR2YW5jZSBmb3IgYSB0ZXh0IHJ1biBieSBhZGp1c3Rp
bmcgdGhlIGFkdmFuY2UKICAgICAgICAgLy8gb2YgdGhlIGxhc3QgZ2x5cGggb2YgdGhlIHByZXZp
b3VzIHRleHQgcnVuIGluIHRoZSBnbHlwaCBidWZmZXIuCkBAIC02MjAsNiArNjI3LDEwIEBAIHZv
aWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHNBbmRBZHZhbmNlcygpCiAgICAg
ICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnQ6OnRyZWF0QXNTcGFjZShjaCk7CiAgICAg
ICAgICAgICBDR0dseXBoIGdseXBoID0gdHJlYXRBc1NwYWNlID8gZm9udERhdGEtPnNwYWNlR2x5
cGgoKSA6IGdseXBoc1tpXTsKICAgICAgICAgICAgIENHU2l6ZSBhZHZhbmNlID0gdHJlYXRBc1Nw
YWNlID8gQ0dTaXplTWFrZShzcGFjZVdpZHRoLCBhZHZhbmNlc1tpXS5oZWlnaHQpIDogYWR2YW5j
ZXNbaV07CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgaWYgKGlzRW1vamkgJiYgYWR2
YW5jZS53aWR0aCkKKyAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gZm9udERhdGEtPndp
ZHRoRm9yR2x5cGgoZ2x5cGgpOworI2VuZGlmCiAKICAgICAgICAgICAgIGlmIChjaCA9PSAnXHQn
ICYmIG1fcnVuLmFsbG93VGFicygpKQogICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBt
X2ZvbnQudGFiV2lkdGgoKmZvbnREYXRhLCBtX3J1bi50YWJTaXplKCksIG1fcnVuLnhQb3MoKSAr
IG1fdG90YWxXaWR0aCArIHdpZHRoU2luY2VMYXN0Q29tbWl0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3Jl
VGV4dC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXJDb3JlVGV4dC5tbQppbmRleCA0OTYwYTRkNGYwNmEzN2I2MWVkMDY0NjdiMzJm
ZWMwNjA5YmY0MjZiLi40NGMwMjk0ZmQ3N2MwZmY5YjI4YTM4MTFmZjcxOGIwY2NlMWYwMTFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRl
eHRDb250cm9sbGVyQ29yZVRleHQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCkBAIC0zMSw3ICszMSwx
MSBAQAogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLmgiCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQu
aD4KKyNlbHNlCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZp
Y2VzLmg+CisjZW5kaWYKIAogQGludGVyZmFjZSBXZWJDYXNjYWRlTGlzdCA6IE5TQXJyYXkgewog
ICAgIEBwcml2YXRlCkBAIC0yNjYsMTIgKzI3MCwxNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJv
bGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNw
LAogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Q2Fj
aGVkRm9udERhdGEobV9mb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250TmFtZS5nZXQoKSwgZmFs
c2UsIEZvbnRDYWNoZTo6RG9Ob3RSZXRhaW4pLmdldCgpOworI2lmICFQTEFURk9STShJT1MpCiAg
ICAgICAgICAgICAgICAgICAgIC8vIENvcmUgVGV4dCBtYXkgaGF2ZSB1c2VkIGEgZm9udCB0aGF0
IGlzIG5vdCBrbm93biB0byBOU0ZvbnRNYW5hZ2VyLiBJbiB0aGF0IGNhc2UsIGZhbGwgYmFjayBv
bgogICAgICAgICAgICAgICAgICAgICAvLyB1c2luZyB0aGUgZm9udCBhcyByZXR1cm5lZCwgZXZl
biB0aG91Z2ggaXQgbWF5IG5vdCBoYXZlIHRoZSBiZXN0IE5TRm9udFJlbmRlcmluZ01vZGUuCiAg
ICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9udERhdGEpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgcnVuRm9udFBsYXRmb3JtRGF0YSgoTlNGb250ICopcnVu
Rm9udCwgQ1RGb250R2V0U2l6ZShydW5Gb250KSwgbV9mb250LmZvbnREZXNjcmlwdGlvbigpLnVz
ZVByaW50ZXJGb250KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSBm
b250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEoJnJ1bkZvbnRQbGF0Zm9ybURhdGEsIEZvbnRD
YWNoZTo6RG9Ob3RSZXRhaW4pLmdldCgpOwogICAgICAgICAgICAgICAgICAgICB9CisjZWxzZQor
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSnVzdCBhc3NlcnQgZm9yIG5vdywgdW50aWwg
d2UgY2FuIGRldmlzZSBhIGJldHRlciBmaXggdGhhdCB3b3JrcyB3aXRoIGlPUy4KKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHJ1bkZvbnREYXRhKTsKKyNlbmRpZgogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnREYXRhICE9
IG1fZm9udC5wcmltYXJ5Rm9udCgpKQogICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9u
dHMtPmFkZChydW5Gb250RGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvRmxvYXRQb2ludE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1tCmluZGV4IDJmNzMzMTRmYTBiOWRjNGFkYzNk
MjVkNDM5YWRkYTE4YWE5MWI3NzkuLmFjOWJjMzFmOWRjMzMzYzA1MjVmNzg0YjYzZTE5NThiMTY5
YjE4MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9G
bG9hdFBvaW50TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9GbG9hdFBvaW50TWFjLm1tCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogCisjaWYgIVBMQVRGT1JNKElPUykKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01F
VFJZX1RZUEVTCkBAIC00MywzICs0NSw1IEBAIEZsb2F0UG9pbnQ6Om9wZXJhdG9yIE5TUG9pbnQo
KSBjb25zdAogI2VuZGlmCiAKIH0KKworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRSZWN0TWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1hYy5tbQpp
bmRleCAxZDZiMDQ1Nzg4N2QyMWI4OTIzNDg2YTI2MmYxMzczNTlhZmU4YjZmLi45ZWZmOWIzYWI2
Nzg2MDQ0NGExNmQ5ZTFhNzc0YWEwODFiMmRhM2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRSZWN0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFJlY3RNYWMubW0KQEAgLTI5LDYgKzI5LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIVBMQVRGT1JNKElPUykKICNpZm5kZWYg
TlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIAogRmxvYXRSZWN0OjpG
bG9hdFJlY3QoY29uc3QgTlNSZWN0JiByKSA6IG1fbG9jYXRpb24oci5vcmlnaW4pLCBtX3NpemUo
ci5zaXplKQpAQCAtNDEsNSArNDIsNiBAQCBGbG9hdFJlY3Q6Om9wZXJhdG9yIE5TUmVjdCgpIGNv
bnN0CiB9CiAKICNlbmRpZgorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNpemVNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tCmlu
ZGV4IDAxZWZiZTkxZGM0ODU5MzBlMTkyOTM5ODIyZGVhOWEzMTc0ZGRmMWIuLjE0MDFiZmNhZTFh
OGZhZmJiMTY5MmNiOGZkNTE4MTE3MzE0MWExMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNpemVNYWMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQpAQCAtMjksNiArMjksNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmbmRlZiBO
U0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogCiBGbG9hdFNpemU6OkZs
b2F0U2l6ZShjb25zdCBOU1NpemUmIHMpIDogbV93aWR0aChzLndpZHRoKSwgbV9oZWlnaHQocy5o
ZWlnaHQpCkBAIC00MSw1ICs0Miw2IEBAIEZsb2F0U2l6ZTo6b3BlcmF0b3IgTlNTaXplKCkgY29u
c3QKIH0KIAogI2VuZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KaW5k
ZXggNTkxZmUxNjc2MDI4NWRmNjRkY2VlN2VjZTZlNzgwNzk1YTAwYzk2Ni4uNzljZjVjMWFjYjZj
ZTY1NjkxZWM3Mjc1NjJiNWM0ZjZhMDdjOThhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCkBAIC0zMCw2ICszMCw4IEBA
CiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkZvbnRDYWNoZS5oIgogCisjaWYgIVBMQVRG
T1JNKElPUykKKwogI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIK
ICNpbXBvcnQgIkZvbnRQbGF0Zm9ybURhdGEuaCIKQEAgLTIyMCwzICsyMjIsNSBAQCBQYXNzT3du
UHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250RGVzY3JpcAogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyAhUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAppbmRleCBlMDkzNmYzYjliNDVh
Njk5ODIzYWJkNjA0NDdmYWI5MDI4YWVkZDgyLi44MmFjZmZhODVmMWYwNGM2MmI0OTcxNzY2NWI3
NTg3MmZiYTIyN2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcApAQCAtNzcsNyArNzcsNyBAQCBm
bG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgaW50IGZyb20sIGludAogICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0KIAot
dm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZy
b20sIGludCB0bykgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIg
Z2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC04NiwxMSArODYsMTMgQEAgdm9pZCBGb250OjpkcmF3Q29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEYKIAogICAgIC8vIFdlIGNvdWxkbid0IGdlbmVyYXRlIGFueSBnbHlwaHMgZm9yIHRoZSBy
dW4uICBHaXZlIHVwLgogICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBEcmF3IHRoZSBnbHlwaCBidWZmZXIg
bm93IGF0IHRoZSBzdGFydGluZyBwb2ludCByZXR1cm5lZCBpbiBzdGFydFguCiAgICAgRmxvYXRQ
b2ludCBzdGFydFBvaW50KHN0YXJ0WCwgcG9pbnQueSgpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIo
Y29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCk7CisKKyAgICByZXR1cm4gc3Rh
cnRQb2ludC54KCkgLSBzdGFydFg7CiB9CiAKIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NG
b3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bykgY29uc3QKQEAgLTE0MSw2ICsxNDMsMTAgQEAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIEZvbnQ6OmZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3Qg
VUNoYXIqIGMKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBmb3IgKGNvbnN0IEZvbnREYXRhKiBm
b250RGF0YSA9IGZvbnREYXRhQXQoMCk7IGZvbnREYXRhOyBmb250RGF0YSA9IGZvbnREYXRhQXQo
KytpKSkgewogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogc2ltcGxlRm9udERhdGEgPSBm
b250RGF0YS0+Zm9udERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgICAgICBpZiAoYmFzZUNoYXJhY3RlciA+PSAweDA2MDAgJiYgYmFzZUNoYXJh
Y3RlciA8PSAweDA2ZmYgJiYgc2ltcGxlRm9udERhdGEtPnNob3VsZE5vdEJlVXNlZEZvckFyYWJp
YygpKQorICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKICAgICAgICAgaWYgKHZhcmlhbnQg
PT0gTm9ybWFsVmFyaWFudCkgewogICAgICAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhLT5wbGF0
Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYmFzZUNoYXJhY3RlcikgJiYgIXNpbXBsZUZvbnRE
YXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAK
aW5kZXggZmEyMzU1N2NmZjY1NmQwMDg5NzQ0OTM0ODVlNWIzYWFhOTYzYmM3Ny4uMzc2ZTBkMTI0
ZmU1Mjg4NWI4MmI2MjlkNjc3ZjVhYTExMTJiZGM3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcApAQCAtMjMsNyArMjMsMTEgQEAKIAogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1
ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNp
bmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvRm9udE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9G
b250TWFjLm1tCmluZGV4IDk4ZmI3OGNkMDI4MzA3YzdiZTI2MmQwMWMxMjE3NjYwOWNhOGJjNzAu
LmFmNjI4N2Y2NjJkZmExNTNmMTU0ODI2MDFiNzRlYTQ0NmM4NGIyNTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCkBAIC0xMjQsMTIgKzEy
NCwxMiBAQCBzdGF0aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgUwogCiAgICAgW2NhdGFsb2cgZHJhd0dseXBo
czpnbHlwaHMgYXRQb3NpdGlvbnM6cG9zaXRpb25zLmRhdGEoKSBpbkNvbnRleHQ6Y29udGV4dCB3
aXRoRm9udDpjdEZvbnQgY291bnQ6Y291bnQgc3R5bGVQcmVzZXROYW1lOkAiX1VJS2l0TmV3TGV0
dGVycHJlc3NTdHlsZSIgc3R5bGVDb25maWd1cmF0aW9uOnN0eWxlQ29uZmlndXJhdGlvbiBmb3Jl
Z3JvdW5kQ29sb3I6Q0dDb250ZXh0R2V0RmlsbENvbG9yQXNDb2xvcihjb250ZXh0KV07CiAjZWxz
ZQotVU5VU0VEX1BBUkFNKHBvaW50KTsKLVVOVVNFRF9QQVJBTShmb250KTsKLVVOVVNFRF9QQVJB
TShjb250ZXh0KTsKLVVOVVNFRF9QQVJBTShnbHlwaHMpOwotVU5VU0VEX1BBUkFNKGFkdmFuY2Vz
KTsKLVVOVVNFRF9QQVJBTShjb3VudCk7CisgICAgVU5VU0VEX1BBUkFNKHBvaW50KTsKKyAgICBV
TlVTRURfUEFSQU0oZm9udCk7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIFVOVVNF
RF9QQVJBTShnbHlwaHMpOworICAgIFVOVVNFRF9QQVJBTShhZHZhbmNlcyk7CisgICAgVU5VU0VE
X1BBUkFNKGNvdW50KTsKICNlbmRpZgogfQogCkBAIC0xNzksNyArMTc5LDcgQEAgc3RhdGljIHZv
aWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3Qg
U2ltcGxlRm9udERhdGEKICAgICB9CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBhbmNob3JQb2ludCkgY29uc3QKIHsKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0
Zm9ybURhdGEgPSBmb250LT5wbGF0Zm9ybURhdGEoKTsKICAgICBpZiAoIXBsYXRmb3JtRGF0YS5z
aXplKCkpCkBAIC0yMjEsMTEgKzIyMSwxMyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29ucwogICAg
ICAgICBjaGFuZ2VGb250U21vb3RoaW5nID0gdHJ1ZTsKICAgICB9CiAKKyNpZiAhUExBVEZPUk0o
SU9TKQogICAgIGJvb2wgb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nID0gZmFsc2U7CiAg
ICAgaWYgKGNoYW5nZUZvbnRTbW9vdGhpbmcpIHsKICAgICAgICAgb3JpZ2luYWxTaG91bGRVc2VG
b250U21vb3RoaW5nID0gd2tDR0NvbnRleHRHZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQp
OwogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQsIHNob3Vs
ZFNtb290aEZvbnRzKTsKICAgICB9CisjZW5kaWYKIAogI2lmICFQTEFURk9STShJT1MpCiAgICAg
TlNGb250KiBkcmF3Rm9udDsKQEAgLTI0Niw5ICsyNDgsMzggQEAgdm9pZCBGb250OjpkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQs
IGNvbnMKICAgICBDR0NvbnRleHRTZXRGb250KGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLmNnRm9u
dCgpKTsKIAogICAgIGJvb2wgdXNlTGV0dGVycHJlc3NFZmZlY3QgPSBzaG91bGRVc2VMZXR0ZXJw
cmVzc0VmZmVjdCgqY29udGV4dCk7CisgICAgRmxvYXRQb2ludCBwb2ludCA9IGFuY2hvclBvaW50
OwogI2lmIFBMQVRGT1JNKElPUykKICAgICBmbG9hdCBmb250U2l6ZSA9IHBsYXRmb3JtRGF0YS5z
aXplKCk7CiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gdXNlTGV0dGVycHJlc3NFZmZl
Y3QgfHwgcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkgPyBDR0FmZmluZVRyYW5zZm9y
bUlkZW50aXR5IDogQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoZm9udFNpemUsIGZvbnRTaXpl
KTsKKyAgICBpZiAocGxhdGZvcm1EYXRhLm1faXNFbW9qaSkgeworICAgICAgICBpZiAoIWNvbnRl
eHQtPmVtb2ppRHJhd2luZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAvLyBNaW1pYyB0aGUgcG9zaXRpb2luaW5nIG9mIG5vbi1iaXRtYXAgZ2x5cGhzLCB3aGljaCBh
cmUgbm90IHN1YnBpeGVsLXBvc2l0aW9uZWQuCisgICAgICAgIHBvaW50LnNldFkoY2VpbGYocG9p
bnQueSgpKSk7CisKKyAgICAgICAgLy8gRW1vamkgZ2x5cGhzIHNuYXAgdG8gdGhlIENTUyBwaXhl
bCBncmlkLgorICAgICAgICBwb2ludC5zZXRYKGZsb29yZihwb2ludC54KCkpKTsKKworICAgICAg
ICAvLyBFbW9qaSBnbHlwaHMgYXJlIG9mZnNldCBvbmUgQ1NTIHBpeGVsIHRvIHRoZSByaWdodC4K
KyAgICAgICAgcG9pbnQubW92ZSgxLCAwKTsKKworICAgICAgICAvLyBFbW9qaSBnbHlwaHMgYXJl
IG9mZnNldCB2ZXJ0aWNhbGx5IGJhc2VkIG9uIGZvbnQgc2l6ZS4KKyAgICAgICAgZmxvYXQgeSA9
IHBvaW50LnkoKTsKKyAgICAgICAgaWYgKGZvbnRTaXplIDw9IDE1KSB7CisgICAgICAgICAgICAv
LyBVbmRvIENvcmUgVGV4dCdzIHkgYWRqdXN0bWVudC4KKyAgICAgICAgICAgIHN0YXRpYyBmbG9h
dCB5QWRqdXN0bWVudEZhY3RvciA9IGlvc0V4ZWN1dGFibGVXYXNMaW5rZWRPbk9yQWZ0ZXJWZXJz
aW9uKHdrSU9TU3lzdGVtVmVyc2lvbl82XzApID8gLjE5IDogLjE7CisgICAgICAgICAgICBwb2lu
dC5zZXRZKGZsb29yZih5IC0geUFkanVzdG1lbnRGYWN0b3IgKiAoZm9udFNpemUgKyAyKSArIDIp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChmb250U2l6ZSA8IDI2KQorICAg
ICAgICAgICAgICAgIHkgLT0gLjM1ZiAqIGZvbnRTaXplIC0gMTA7CisKKyAgICAgICAgICAgIC8v
IFVuZG8gQ29yZSBUZXh0J3MgeSBhZGp1c3RtZW50LgorICAgICAgICAgICAgc3RhdGljIGZsb2F0
IHlBZGp1c3RtZW50ID0gaW9zRXhlY3V0YWJsZVdhc0xpbmtlZE9uT3JBZnRlclZlcnNpb24od2tJ
T1NTeXN0ZW1WZXJzaW9uXzZfMCkgPyAzLjggOiAyOworICAgICAgICAgICAgcG9pbnQuc2V0WShm
bG9vcmYoeSAtIHlBZGp1c3RtZW50KSk7CisgICAgICAgIH0KKyAgICB9CiAjZWxzZQogICAgIENH
QWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHk7CiAgICAg
aWYgKGRyYXdGb250ICYmICFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSkKQEAgLTMw
Myw3ICszMzQsMTEgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnMKICAgICAgICAgLy8gSWYgc2hh
ZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhl
IFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KICAgICAgICAgZmxv
YXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoY29u
dGV4dC0+c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CiAgICAgICAgIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBm
b250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgc3RhdGljX2Nhc3Q8Y29u
c3QgQ0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMpOworI2lm
ICFQTEFURk9STShJT1MpCiAgICAgICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KQorI2Vsc2UK
KyAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQgJiYgIXBsYXRmb3JtRGF0YS5tX2lzRW1v
amkpCisjZW5kaWYKICAgICAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2lu
dChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHNoYWRvd1RleHRZKSwgZm9udCwg
Y2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0IENH
U2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKICAgICAgICAg
Y29udGV4dC0+c2V0RmlsbENvbG9yKGZpbGxDb2xvciwgZmlsbENvbG9yU3BhY2UpOwogICAgIH0K
QEAgLTMxMiw3ICszNDcsMTEgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnMKICAgICAgICAgc2hv
d0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwg
Z2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlw
aEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUdseXBocyk7CiAgICAgZWxzZQogICAgICAgICBz
aG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVy
LmdseXBocyhmcm9tKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2
YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMpOworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKHN5
bnRoZXRpY0JvbGRPZmZzZXQpCisjZWxzZQorICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0ICYm
ICFwbGF0Zm9ybURhdGEubV9pc0Vtb2ppKQorI2VuZGlmCiAgICAgICAgIHNob3dHbHlwaHNXaXRo
QWR2YW5jZXMoRmxvYXRQb2ludChwb2ludC54KCkgKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBwb2lu
dC55KCkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQ0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlw
aHMpOwogCiAgICAgaWYgKGhhc1NpbXBsZVNoYWRvdykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VUcmVlTm9kZU1hYy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlVHJlZU5vZGVNYWMuY3Bw
CmluZGV4IGMwZTU0Y2I0ODk4ZGI3OTYwNzlkOWQyOTFjYTQ3MTdmNTIwMDY1YzUuLjYxMmI0NTNm
ZWZhNWIzZTE2NTc2MWZjNGRhNmQzYTczZmY1NTJiMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VUcmVlTm9kZU1hYy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFj
LmNwcApAQCAtMzIsNyArMzIsMTMgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiU2lt
cGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaWYg
IVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9u
U2VydmljZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHRm9udFVuaWNvZGVT
dXBwb3J0Lmg+CisjaW5jbHVkZSA8Q29yZVRleHQvQ1RGb250UHJpdi5oPgorI2luY2x1ZGUgPENv
cmVUZXh0L0NvcmVUZXh0Lmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
Myw3ICs2OSwxNiBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYgogCiAgICAgVmVjdG9yPENHR2x5
cGgsIDUxMj4gZ2x5cGhzKGJ1ZmZlckxlbmd0aCk7CiAgICAgaWYgKCFzaG91bGRVc2VDb3JlVGV4
dChidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udERhdGEpKSB7CisjaWYgIVBMQVRGT1JNKElPUykK
ICAgICAgICAgd2tHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5jZ0ZvbnQoKSwgYnVmZmVyLCBnbHlwaHMuZGF0YSgpLCBidWZmZXJMZW5ndGgpOworI2Vsc2UK
KyAgICAgICAgLy8gV2UgcGFzcyBpbiBlaXRoZXIgMjU2IG9yIDUxMiBVVEYtMTYgY2hhcmFjdGVy
czogMjU2IGZvciBVK0ZGRkYgYW5kIGxlc3MsIDUxMiAoZG91YmxlIGNoYXJhY3RlciBzdXJyb2dh
dGVzKQorICAgICAgICAvLyBmb3IgVSsxMDAwMCBhbmQgYWJvdmUuIEl0IGlzIGluZGVlZCBwb3Nz
aWJsZSB0byBnZXQgYmFjayA1MTIgZ2x5cGhzIGJhY2sgZnJvbSB0aGUgQVBJLCBzbyB0aGUgZ2x5
cGggYnVmZmVyCisgICAgICAgIC8vIHdlIHBhc3MgaW4gbXVzdCBiZSA1MTIuIElmIHdlIGdldCBi
YWNrIG1vcmUgdGhhbiAyNTYgZ2x5cGhzIHRob3VnaCB3ZSdsbCBpZ25vcmUgYWxsIHRoZSBvbmVz
IGFmdGVyIDI1NiwKKyAgICAgICAgLy8gdGhpcyBzaG91bGQgbm90IGhhcHBlbiBhcyB0aGUgb25s
eSB0aW1lIHdlIHBhc3MgaW4gNTEyIGNoYXJhY3RlcnMgaXMgd2hlbiB0aGV5IGFyZSBzdXJyb2dh
dGVzLgorICAgICAgICAvLyBGSVhNRTogVXNlIHdrR2V0R2x5cGhzRm9yQ2hhcmFjdGVycygpIGlu
c3RlYWQgb2YgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoKSBvbmNlIHdlIHVwZGF0ZSBXZWJL
aXQgU3lzdGVtIEludGVyZmFjZSBvbiBpT1MuCisgICAgICAgIENHRm9udEdldEdseXBoc0ZvclVu
aWNoYXJzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgYnVmZmVyLCBnbHlwaHMu
ZGF0YSgpLCBidWZmZXJMZW5ndGgpOworI2VuZGlmCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYgKCFnbHlwaHNbaV0pCiAgICAg
ICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7CkBAIC0x
NDQsNiArMTU5LDcgQEAgYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGIKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgfQorI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJ1
blNpbXBsZSA9IGZvbnREYXRhLT5nZXRDb21wb3NpdGVGb250UmVmZXJlbmNlRm9udERhdGEoKE5T
Rm9udCAqKXJ1bkZvbnQpOwogICAgICAgICAgICAgICAgICAgICBpZiAocnVuU2ltcGxlKSB7CkBA
IC0xNTgsNiArMTc0LDcgQEAgYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCmluZGV4IDk2YTYz
MTk0ZWFlNjA2MzdjMzQ2ZTQ4NjYwZGNjZTg3NjczYzYyNmMuLmU0NGExM2Y0YTU3MDgzZWE5ZDdi
NzMwM2EzYWQxZTI2YjFkZDY3ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KQEAgLTI4LDYg
KzI4LDkgQEAKICNpZiBVU0UoM0RfR1JBUEhJQ1MpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRElP
Uy5oIgorI2VuZGlmCiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogCkBAIC0zOSw4ICs0
MiwxNSBAQAogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lmIFBMQVRGT1JNKElPUykK
KyNpbXBvcnQgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgorI2ltcG9ydCA8T3BlbkdMRVMvRUFHTC5o
PgorI2ltcG9ydCA8T3BlbkdMRVMvRUFHTERyYXdhYmxlLmg+CisjaW1wb3J0IDxRdWFydHpDb3Jl
L1F1YXJ0ekNvcmUuaD4KKyNlbHNlCiAjaW5jbHVkZSA8T3BlbkdML0NHTFJlbmRlcmVycy5oPgog
I2luY2x1ZGUgPE9wZW5HTC9nbC5oPgorI2VuZGlmCiAjaW5jbHVkZSAiV2ViR0xMYXllci5oIgog
I2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5o
PgpAQCAtNjEsNiArNzEsNyBAQCBwdWJsaWM6CiAgICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZSgpIHsgfQogfTsKIAorI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMgdm9pZCBzZXRQaXhlbEZv
cm1hdChWZWN0b3I8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+JiBhdHRyaWJzLCBpbnQgY29sb3JC
aXRzLCBpbnQgZGVwdGhCaXRzLCBib29sIGFjY2VsZXJhdGVkLCBib29sIHN1cGVyc2FtcGxlLCBi
b29sIGNsb3Nlc3QsIGJvb2wgYW50aWFsaWFzKQogewogICAgIGF0dHJpYnMuY2xlYXIoKTsKQEAg
LTkzLDYgKzEwNCw3IEBAIHN0YXRpYyB2b2lkIHNldFBpeGVsRm9ybWF0KFZlY3RvcjxDR0xQaXhl
bEZvcm1hdEF0dHJpYnV0ZT4mIGF0dHJpYnMsIGludCBjb2xvckJpCiAgICAgICAgIAogICAgIGF0
dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigwKSk7CiB9
CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clN0eWxlIHJlbmRlclN0eWxlKQogewpAQCAtMTA3LDYgKzExOSw5IEBAIEdyYXBoaWNzQ29udGV4
dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRy
cywgSG9zdFdpCiAgICAgOiBtX2N1cnJlbnRXaWR0aCgwKQogICAgICwgbV9jdXJyZW50SGVpZ2h0
KDApCiAgICAgLCBtX2NvbnRleHRPYmooMCkKKyNpZiBQTEFURk9STShJT1MpCisgICAgLCBtX2Nv
bXBpbGVyKFNIX0VTU0xfT1VUUFVUKQorI2VuZGlmCiAgICAgLCBtX2F0dHJzKGF0dHJzKQogICAg
ICwgbV90ZXh0dXJlKDApCiAgICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCkBAIC0xMjIsNiAr
MTM3LDEwIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgVU5VU0VEX1BBUkFNKGhvc3RX
aW5kb3cpOwogICAgIFVOVVNFRF9QQVJBTShyZW5kZXJTdHlsZSk7CiAKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgbV9jb250ZXh0T2JqID0gW1tFQUdMQ29udGV4dCBhbGxvY10gaW5pdFdpdGhBUEk6
a0VBR0xSZW5kZXJpbmdBUElPcGVuR0xFUzJdOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
I2Vsc2UKICAgICBWZWN0b3I8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+IGF0dHJpYnM7CiAgICAg
Q0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXRPYmogPSAwOwogICAgIEdMaW50IG51bVBpeGVs
Rm9ybWF0cyA9IDA7CkBAIC0xODQsMTIgKzIwMywxNiBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RX
aQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQorI2VuZGlmIC8vICFQTEFU
Rk9STShJT1MpCiAgICAgCiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKICAgICAvLyBDcmVh
dGUgdGhlIFdlYkdMTGF5ZXIKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICAg
ICAgbV93ZWJHTExheWVyID0gYWRvcHROUyhbW1dlYkdMTGF5ZXIgYWxsb2NdIGluaXRXaXRoR3Jh
cGhpY3NDb250ZXh0M0Q6dGhpc10pOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgW21fd2Vi
R0xMYXllci5nZXQoKSBzZXRPcGFxdWU6MF07CisjZW5kaWYKICNpZm5kZWYgTkRFQlVHCiAgICAg
ICAgIFttX3dlYkdMTGF5ZXIuZ2V0KCkgc2V0TmFtZTpAIldlYkdMIExheWVyIl07CiAjZW5kaWYg
ICAgCkBAIC0xOTgsNiArMjIxLDkgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICBpZiAo
dXNlTXVsdGlzYW1wbGluZykKICAgICAgICAgOjpnbEVuYWJsZShHTF9NVUxUSVNBTVBMRSk7CiAg
ICAgCisjaWYgUExBVEZPUk0oSU9TKQorICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3Rl
eHR1cmUpOworI2Vsc2UKICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvCiAg
ICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogICAgIDo6Z2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwpAQCAtMjEyLDYgKzIzOCw3IEBAIEdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycywgSG9zdFdpCiAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsKICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVApOwogICAgIDo6Z2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCAwKTsKKyNlbmRpZgogICAgIAogICAgIC8vIGNyZWF0ZSBhbiBGQk8KICAg
ICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CkBAIC0yNTMsOCArMjgwLDEwIEBA
IEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAKICAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhB
TkdMRVJlc291cmNlcyk7CiAgICAgCisjaWYgIVBMQVRGT1JNKElPUykKICAgICA6OmdsRW5hYmxl
KEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwogICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRf
U1BSSVRFKTsKKyNlbmRpZgogCiAgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiB9CkBA
IC0yNjIsOSArMjkxLDE1IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiBHcmFwaGljc0NvbnRl
eHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIHsKICAgICBpZiAobV9jb250ZXh0T2JqKSB7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAg
OjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fdGV4dHVyZSk7CisgICAgICAgIDo6Z2xEZWxl
dGVSZW5kZXJidWZmZXJzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbHNlCiAgICAgICAg
IENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgICAgIDo6Z2xEZWxldGVU
ZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZt
X2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgogICAgICAgICBpZiAobV9hdHRycy5hbnRpYWxp
YXMpIHsKICAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRp
c2FtcGxlQ29sb3JCdWZmZXIpOwogICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBt
X2F0dHJzLmRlcHRoKQpAQCAtMjc1LDIyICszMTAsNTEgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5H
cmFwaGljc0NvbnRleHQzRCgpCiAgICAgICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZl
cnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKICAgICAgICAgfQogICAgICAgICA6Omds
RGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
ICAgICBbRUFHTENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6MF07CisgICAgICAgIFtzdGF0aWNf
Y2FzdDxFQUdMQ29udGV4dCo+KG1fY29udGV4dE9iaikgcmVsZWFzZV07CisjZWxzZQogICAgICAg
ICBDR0xTZXRDdXJyZW50Q29udGV4dCgwKTsKICAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQobV9j
b250ZXh0T2JqKTsKKyNlbmRpZgogICAgIH0KIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2VGcm9tRHJhd2FibGUoR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIFttX3dlYkdMTGF5ZXIuZ2V0
KCkgc2V0Qm91bmRzOkNHUmVjdE1ha2UoMCwgMCwgd2lkdGgsIGhlaWdodCldOworICAgIHJldHVy
biBbbV9jb250ZXh0T2JqIHJlbmRlcmJ1ZmZlclN0b3JhZ2U6R0xfUkVOREVSQlVGRkVSIGZyb21E
cmF3YWJsZTpzdGF0aWNfY2FzdDxOU09iamVjdDxFQUdMRHJhd2FibGU+Kj4obV93ZWJHTExheWVy
LmdldCgpKV07Cit9CisjZW5kaWYKKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRl
eHRDdXJyZW50KCkKIHsKICAgICBpZiAoIW1fY29udGV4dE9iaikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChbRUFHTENvbnRleHQgY3VycmVudENv
bnRleHRdICE9IG1fY29udGV4dE9iaikKKyAgICAgICAgcmV0dXJuIFtFQUdMQ29udGV4dCBzZXRD
dXJyZW50Q29udGV4dDpzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCo+KG1fY29udGV4dE9iaildOwor
I2Vsc2UKICAgICBDR0xDb250ZXh0T2JqIGN1cnJlbnRDb250ZXh0ID0gQ0dMR2V0Q3VycmVudENv
bnRleHQoKTsKICAgICBpZiAoY3VycmVudENvbnRleHQgIT0gbV9jb250ZXh0T2JqKQogICAgICAg
ICByZXR1cm4gQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKSA9PSBrQ0dMTm9FcnJv
cjsKKyNlbmRpZgogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xGbHVzaCgpOworICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRF
UkJVRkZFUiwgbV90ZXh0dXJlKTsKKyAgICBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQqPihtX2Nv
bnRleHRPYmopIHByZXNlbnRSZW5kZXJidWZmZXI6R0xfUkVOREVSQlVGRkVSXTsKKyAgICBbRUFH
TENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6bmlsXTsKK30KKyNlbmRpZgorCiBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dE1hYy5tbQppbmRleCAyYzgzODVkMWVhNmUyNjY0NDgwMDgxZDkwZTQz
N2EzNmQ3NjhlNTJiLi41MzNlYjBlNmE4NWUyZTEwM2IxNGJhZjg4YTgwMGIwODI2NWYzY2NkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3ND
b250ZXh0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9H
cmFwaGljc0NvbnRleHRNYWMubW0KQEAgLTI4LDEwICsyOCwxOSBAQAogCiAjaW1wb3J0ICJHcmFw
aGljc0NvbnRleHRDRy5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Q0cuaCIKKyNpZiBVU0UoQVBQS0lUKQogI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgorI2VuZGlm
CiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1w
b3J0ICJDb2xvci5oIgorI2ltcG9ydCAiV0tHcmFwaGljcy5oIgorI2VuZGlmCisKKyNpZiAhUExB
VEZPUk0oSU9TKQogI2ltcG9ydCAiTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0LmgiCisjZW5k
aWYKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKIAogQGNsYXNzIE5TQ29sb3I7
CkBAIC00NSw2ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGNhbGxzIGluIHRoaXMg
ZmlsZSBhcmUgYWxsIGV4Y2VwdGlvbi1zYWZlLCBzbyB3ZSBkb24ndCBibG9jawogLy8gZXhjZXB0
aW9ucyBmb3IgdGhvc2UuCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGljIHZvaWQgZHJhd0Zv
Y3VzUmluZ1RvQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQYXRoUmVmIGZvY3VzUmlu
Z1BhdGgsIENHQ29sb3JSZWYgY29sb3IsIGludCByYWRpdXMpCiB7CiAgICAgQ0dDb250ZXh0QmVn
aW5QYXRoKGNvbnRleHQpOwpAQCAtNjQsOSArNzQsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgaW50IHdpZHRoLCBpbnQgLypvZmZzZXQq
LywKIAogICAgIGRyYXdGb2N1c1JpbmdUb0NvbnRleHQocGxhdGZvcm1Db250ZXh0KCksIHBhdGgu
cGxhdGZvcm1QYXRoKCksIGNvbG9yUmVmLCByYWRpdXMpOwogfQorI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCkBAIC04MCw5ICs5MiwxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgs
IGludAogICAgICAgICBDR1BhdGhBZGRSZWN0KGZvY3VzUmluZ1BhdGguZ2V0KCksIDAsIENHUmVj
dEluc2V0KHJlY3RzW2ldLCAtb2Zmc2V0LCAtb2Zmc2V0KSk7CiAKICAgICBkcmF3Rm9jdXNSaW5n
VG9Db250ZXh0KHBsYXRmb3JtQ29udGV4dCgpLCBmb2N1c1JpbmdQYXRoLmdldCgpLCBjb2xvclJl
ZiwgcmFkaXVzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlY3RzKTsKKyAgICBVTlVTRURf
UEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworICAgIFVOVVNFRF9QQVJB
TShjb2xvcik7CisjZW5kaWYKIH0KIAogCisjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBOU0Nv
bG9yKiBtYWtlUGF0dGVybkNvbG9yKE5TU3RyaW5nKiBmaXJzdENob2ljZU5hbWUsIE5TU3RyaW5n
KiBzZWNvbmRDaG9pY2VOYW1lLCBOU0NvbG9yKiBkZWZhdWx0Q29sb3IsIGJvb2wmIHVzaW5nRG90
KQogewogICAgIC8vIEV2ZW50dWFsbHkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHJpZCBvZiB0
aGUgc2Vjb25kQ2hvaWNlTmFtZS4gRm9yIHRoZSB0aW1lIGJlaW5nIHdlIG5lZWQgYm90aCB0byBr
ZWVwCkBAIC05OCw2ICsxMTcsMTUgQEAgc3RhdGljIE5TQ29sb3IqIG1ha2VQYXR0ZXJuQ29sb3Io
TlNTdHJpbmcqIGZpcnN0Q2hvaWNlTmFtZSwgTlNTdHJpbmcqIHNlY29uZENob2kKICAgICAgICAg
Y29sb3IgPSBkZWZhdWx0Q29sb3I7CiAgICAgcmV0dXJuIGNvbG9yOwogfQorI2Vsc2UKK3N0YXRp
YyBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBjcmVhdGVEb3RQYXR0ZXJuKGJvb2wmIHVzaW5nRG90
LCBjb25zdCBjaGFyKiByZXNvdXJjZU5hbWUpCit7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlID0gYWRvcHRDRihXS0dyYXBoaWNzQ3JlYXRlSW1hZ2VGcm9tQnVuZGxlV2l0aE5hbWUo
cmVzb3VyY2VOYW1lKSk7CisgICAgQVNTRVJUKGltYWdlKTsgLy8gaWYgaW1hZ2UgaXMgbm90IGF2
YWlsYWJsZSwgd2Ugd2FudCB0byBrbm93CisgICAgdXNpbmdEb3QgPSB0cnVlOworICAgIHJldHVy
biBhZG9wdENGKFdLQ3JlYXRlUGF0dGVybkZyb21DR0ltYWdlKGltYWdlLmdldCgpKSk7Cit9Cisj
ZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogc3RhdGljIE5TQ29sb3IgKnNwZWxsaW5nUGF0dGVy
bkNvbG9yID0gbnVsbHB0cjsKIHN0YXRpYyBOU0NvbG9yICpncmFtbWFyUGF0dGVybkNvbG9yID0g
bnVsbHB0cjsKQEAgLTEyMSwyMCArMTQ5LDMxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3CiAg
ICAgZmxvYXQgcGF0dGVybldpZHRoID0gY01pc3NwZWxsaW5nTGluZVBhdHRlcm5XaWR0aDsKIAog
ICAgIGJvb2wgdXNpbmdEb3Q7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBOU0NvbG9yICpwYXR0
ZXJuQ29sb3I7CisjZWxzZQorICAgIENHUGF0dGVyblJlZiBkb3RQYXR0ZXJuOworI2VuZGlmCiAg
ICAgc3dpdGNoIChzdHlsZSkgewogICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyU3BlbGxpbmdM
aW5lU3R5bGU6CiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIENvbnN0YW50cyBmb3Igc3BlbGxp
bmcgcGF0dGVybiBjb2xvci4KICAgICAgICAgICAgIHN0YXRpYyBib29sIHVzaW5nRG90Rm9yU3Bl
bGxpbmcgPSBmYWxzZTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgaWYgKCFzcGVs
bGluZ1BhdHRlcm5Db2xvcikKICAgICAgICAgICAgICAgICBzcGVsbGluZ1BhdHRlcm5Db2xvciA9
IFttYWtlUGF0dGVybkNvbG9yKEAiTlNTcGVsbGluZ0RvdCIsIEAiU3BlbGxpbmdEb3QiLCBbTlND
b2xvciByZWRDb2xvcl0sIHVzaW5nRG90Rm9yU3BlbGxpbmcpIHJldGFpbl07CiAgICAgICAgICAg
ICB1c2luZ0RvdCA9IHVzaW5nRG90Rm9yU3BlbGxpbmc7CiAgICAgICAgICAgICBwYXR0ZXJuQ29s
b3IgPSBzcGVsbGluZ1BhdHRlcm5Db2xvcjsKKyNlbHNlCisgICAgICAgICAgICBzdGF0aWMgQ0dQ
YXR0ZXJuUmVmIHNwZWxsaW5nUGF0dGVybiA9IGNyZWF0ZURvdFBhdHRlcm4odXNpbmdEb3RGb3JT
cGVsbGluZywgIlNwZWxsaW5nRG90IikubGVha1JlZigpOworICAgICAgICAgICAgZG90UGF0dGVy
biA9IHNwZWxsaW5nUGF0dGVybjsKKyNlbmRpZgorICAgICAgICAgICAgdXNpbmdEb3QgPSB1c2lu
Z0RvdEZvclNwZWxsaW5nOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBEb2N1bWVudE1hcmtlckdyYW1tYXJMaW5lU3R5bGU6CiAgICAgICAgIHsKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgICAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBncmFtbWFyIHBhdHRlcm4g
Y29sb3IuCiAgICAgICAgICAgICBzdGF0aWMgYm9vbCB1c2luZ0RvdEZvckdyYW1tYXIgPSBmYWxz
ZTsKICAgICAgICAgICAgIGlmICghZ3JhbW1hclBhdHRlcm5Db2xvcikKQEAgLTE0Miw4ICsxODEs
MTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHcKICAgICAgICAgICAgIHVzaW5nRG90ID0gdXNp
bmdEb3RGb3JHcmFtbWFyOwogICAgICAgICAgICAgcGF0dGVybkNvbG9yID0gZ3JhbW1hclBhdHRl
cm5Db2xvcjsKICAgICAgICAgICAgIGJyZWFrOworI2Vsc2UKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworI2VuZGlmCiAgICAgICAgIH0KLSNp
ZiBQTEFURk9STShNQUMpCisjaWYgIVBMQVRGT1JNKElPUykgJiYgUExBVEZPUk0oTUFDKQogICAg
ICAgICAvLyBUbyBzdXBwb3J0IGNvcnJlY3Rpb24gcGFuZWwuCiAgICAgICAgIGNhc2UgRG9jdW1l
bnRNYXJrZXJBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50TGluZVN0eWxlOgogICAgICAgICBjYXNl
IERvY3VtZW50TWFya2VyRGljdGF0aW9uQWx0ZXJuYXRpdmVzTGluZVN0eWxlOgpAQCAtMTU3LDcg
KzIwMCwyMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgY2FzZSBUZXh0Q2hl
Y2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTGluZVN0eWxlOgorICAgICAgICB7
CisgICAgICAgICAgICBzdGF0aWMgYm9vbCB1c2luZ0RvdEZvckRpY3RhdGlvblBocmFzZVdpdGhB
bHRlcm5hdGl2ZXMgPSBmYWxzZTsKKyAgICAgICAgICAgIHN0YXRpYyBDR1BhdHRlcm5SZWYgZGlj
dGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc1BhdHRlcm4gPSBjcmVhdGVEb3RQYXR0ZXJuKHVz
aW5nRG90Rm9yRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywgIkRpY3RhdGlvblBocmFz
ZVdpdGhBbHRlcm5hdGl2ZXNEb3QiKS5sZWFrUmVmKCk7CisgICAgICAgICAgICBkb3RQYXR0ZXJu
ID0gZGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc1BhdHRlcm47CisgICAgICAgICAgICB1
c2luZ0RvdCA9IHVzaW5nRG90Rm9yRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogICAg
ICAgICBkZWZhdWx0OgorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgICAgIC8vIEZJWE1FOiBT
aG91bGQgcmVtb3ZlIGRlZmF1bHQgY2FzZSBzbyB3ZSBnZXQgY29tcGlsZS10aW1lIGVycm9ycy4K
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0xODIsMjAgKzIzOSwzMyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdwogICAgIC8vIGZvciB0cmFuc2Zvcm1zLgogCiAgICAg
Ly8gRHJhdyB1bmRlcmxpbmUuCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHRoaXMpOwogICAgIE5TR3JhcGhpY3NDb250ZXh0
ICpjdXJyZW50Q29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07CiAg
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSAoQ0dDb250ZXh0UmVmKVtjdXJyZW50Q29udGV4dCBn
cmFwaGljc1BvcnRdOworI2Vsc2UKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOworI2VuZGlmCiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAor
I2lmICFQTEFURk9STShJT1MpCiAgICAgW3BhdHRlcm5Db2xvciBzZXRdOworI2Vsc2UKKyAgICBX
S1NldFBhdHRlcm4oY29udGV4dCwgZG90UGF0dGVybiwgWUVTLCBZRVMpOworI2VuZGlmCiAKICAg
ICB3a1NldFBhdHRlcm5QaGFzZUluVXNlclNwYWNlKGNvbnRleHQsIG9mZnNldFBvaW50KTsKIAor
I2lmICFQTEFURk9STShJT1MpCiAgICAgTlNSZWN0RmlsbFVzaW5nT3BlcmF0aW9uKE5TTWFrZVJl
Y3Qob2Zmc2V0UG9pbnQueCgpLCBvZmZzZXRQb2ludC55KCksIHdpZHRoLCBwYXR0ZXJuSGVpZ2h0
KSwgTlNDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyNlbHNlCisgICAgV0tSZWN0RmlsbFVzaW5nT3Bl
cmF0aW9uKGNvbnRleHQsIENHUmVjdE1ha2Uob2Zmc2V0UG9pbnQueCgpLCBvZmZzZXRQb2ludC55
KCksIHdpZHRoLCBwYXR0ZXJuSGVpZ2h0KSwga0NHQ29tcG9zaXRlU292ZXIpOworI2VuZGlmCiAg
ICAgCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAorI2lmICFQTEFU
Rk9STShJT1MpCiBDR0NvbG9yU3BhY2VSZWYgbGluZWFyUkdCQ29sb3JTcGFjZVJlZigpCiB7CiAg
ICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBsaW5lYXJTUkdCU3BhY2UgPSAwOwpAQCAtMjE1LDUg
KzI4NSw2IEBAIENHQ29sb3JTcGFjZVJlZiBsaW5lYXJSR0JDb2xvclNwYWNlUmVmKCkKIAogICAg
IHJldHVybiBsaW5lYXJTUkdCU3BhY2U7CiB9CisjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25NYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbQppbmRleCBkY2IyNjk0Njk0ZDli
MjUwZWNiMmZjZmZkYWNkYjIzNzQyZWNiNjg3Li5hMGQ2ZWVlZWQzYzRkYjMzZWFiZDkyNjFjYmNm
YTQzNWFkMmQ2YjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvSWNvbk1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvSWNvbk1hYy5tbQpAQCAtMTgsNiArMTgsOCBAQAogICoKICAqLwogCisjaWYgIVBMQVRGT1JN
KElPUykKKwogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJJY29uLmgiCiAKQEAgLTgyLDMg
Kzg0LDUgQEAgdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB9CiAKIH0KKworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KaW5kZXgg
MjUxZjU3NDhiZjkwMWQ0ZmI4NDY5ZmMzZjcwZTQ5N2IzYWJiNDdkMy4uMTIwNDU4YzMzMTE1OTFm
NmMwMmI2MzA1NzdkYWNlMzA2OTQzODNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQpAQCAtMzcsNiArMzcsMTggQEAKIEBpbXBsZW1l
bnRhdGlvbiBXZWJDb3JlQnVuZGxlRmluZGVyCiBAZW5kCiAKKyNpZiBQTEFURk9STShJT1MpCisj
aW1wb3J0ICJTb2Z0TGlua2luZy5oIgorCisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBo
aWNzLmg+CisjaW1wb3J0IDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNpbXBvcnQgPE1vYmlsZUNvcmVT
ZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KKworU09GVF9MSU5LX0ZSQU1FV09SSyhNb2Jp
bGVDb3JlU2VydmljZXMpCitTT0ZUX0xJTktfQ09OU1RBTlQoTW9iaWxlQ29yZVNlcnZpY2VzLCBr
VVRUeXBlVElGRiwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtVVFR5cGVUSUZGIGdldGtVVFR5cGVU
SUZGKCkKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgQml0bWFwSW1hZ2U6
OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQpAQCAtNDQsNyArNTYsOSBAQCB2b2lkIEJpdG1hcElt
YWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKICAgICBpZiAobV9mcmFtZXMuc2l6ZSgpICE9
IDEpCiAgICAgICAgIHJldHVybjsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgbV9uc0ltYWdl
ID0gMDsKKyNlbmRpZgogICAgIG1fdGlmZlJlcCA9IDA7CiB9CiAKQEAgLTEwMyw2ICsxMTcsNyBA
QCBDRkRhdGFSZWYgQml0bWFwSW1hZ2U6OmdldFRJRkZSZXByZXNlbnRhdGlvbigpCiAgICAgcmV0
dXJuIG1fdGlmZlJlcC5nZXQoKTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiBOU0ltYWdlKiBC
aXRtYXBJbWFnZTo6Z2V0TlNJbWFnZSgpCiB7CiAgICAgaWYgKG1fbnNJbWFnZSkKQEAgLTExNSw1
ICsxMzAsNiBAQCBOU0ltYWdlKiBCaXRtYXBJbWFnZTo6Z2V0TlNJbWFnZSgpCiAgICAgbV9uc0lt
YWdlID0gYWRvcHROUyhbW05TSW1hZ2UgYWxsb2NdIGluaXRXaXRoRGF0YTooTlNEYXRhKilkYXRh
XSk7CiAgICAgcmV0dXJuIG1fbnNJbWFnZS5nZXQoKTsKIH0KKyNlbmRpZgogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW0KaW5k
ZXggN2EyZTczMGVkOGU2Yjc0OTY1NmY1NmNhZmRlMGU3MTE0NjY5ZGY4Yy4uYzI5YzNhZTg2NGQz
OGFmNzlkY2M0YWUxY2JiYzViNDlkYWMxNmE1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFBvaW50TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQb2ludE1hYy5tbQpAQCAtMjgsNiArMjgsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lmbmRlZiBOU0dF
T01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogCiBJbnRQb2ludDo6SW50UG9p
bnQoY29uc3QgTlNQb2ludCYgcCkgOiBtX3goc3RhdGljX2Nhc3Q8aW50PihwLngpKSwgbV95KHN0
YXRpY19jYXN0PGludD4ocC55KSkKQEAgLTQwLDUgKzQxLDYgQEAgSW50UG9pbnQ6Om9wZXJhdG9y
IE5TUG9pbnQoKSBjb25zdAogfQogCiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50
UmVjdE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRSZWN0
TWFjLm1tCmluZGV4IDczODYxOGExOTgzYWM3NzVjMzU5OGE1NjM0NWI5NGRhZTRiMjZhMTQuLjc3
NGEwYmE3MDRlZTdkNTgzYWY4ZTA0MDJiOTcxYWMzOGY0M2JjYTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRSZWN0TWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRSZWN0TWFjLm1tCkBAIC0yOCw2ICsy
OCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFQTEFURk9STShJT1MpCiAjaWZu
ZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiAKIEludFJlY3Q6
Om9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0CkBAIC00NSw1ICs0Niw2IEBAIEludFJlY3QgZW5jbG9z
aW5nSW50UmVjdChjb25zdCBOU1JlY3QmIHJlY3QpCiB9CiAKICNlbmRpZgorI2VuZGlmCiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRTaXpl
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFNpemVNYWMu
bW0KaW5kZXggYzdkY2Q4OGM4OGUwNzE0Y2FlMTU4NjMxYWU4ZjMzMTliM2RjYmQ2Yi4uOWE0NzY2
NTA5ZmIzY2U0NjgzNDg4MWE1YzZmODMxNDIwZmE4ZjljZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFNpemVNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFNpemVNYWMubW0KQEAgLTI4LDYgKzI4LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIVBMQVRGT1JNKElPUykKICNpZm5kZWYg
TlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIAogSW50U2l6ZTo6SW50
U2l6ZShjb25zdCBOU1NpemUmIHMpIDogbV93aWR0aChzdGF0aWNfY2FzdDxpbnQ+KHMud2lkdGgp
KSwgbV9oZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihzLmhlaWdodCkpCkBAIC00MCw1ICs0MSw2IEBA
IEludFNpemU6Om9wZXJhdG9yIE5TU2l6ZSgpIGNvbnN0CiB9CiAKICNlbmRpZgorI2VuZGlmIC8v
ICFQTEFURk9STShJT1MpCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcm94eS5oCmluZGV4IGM1ODZmYjg2ZmVmYTQwNjgw
ZmE5NWEyMzU3NzYyM2QwM2ExMjliYmIuLmM0MWU4Y2Y4NTIzYmY1OTVhZmQ5OTVkMzk5MzdlMmY4
YWM2ZDBlZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9NZWRpYVBsYXllclByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL01lZGlhUGxheWVyUHJveHkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsMjEgQEAKICNpZm5kZWYgTWVkaWFQ
bGF5ZXJQcm94eV9oCiAjZGVmaW5lIE1lZGlhUGxheWVyUHJveHlfaAogCisjaWYgUExBVEZPUk0o
SU9TKQorI2lmIGRlZmluZWQoX19PQkpDX18pCisjaW1wb3J0IDxGb3VuZGF0aW9uL05TR2VvbWV0
cnkuaD4KKyNlbmRpZgorCisvLyBOZWVkZWQgc2luY2UgdGhpcyBpcyBhIFdlYktpdCBwcml2YXRl
IGhlYWRlciBvbiBpT1MuCisjaWZuZGVmIE9CSkNfQ0xBU1MKKyNpZmRlZiBfX09CSkNfXworI2Rl
ZmluZSBPQkpDX0NMQVNTIEBjbGFzcworI2Vsc2UKKyNkZWZpbmUgT0JKQ19DTEFTUyBjbGFzcwor
I2VuZGlmCisjZW5kaWYgLy8gIWRlZmluZWQoT0JKQ19DTEFTUykKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCisKIE9CSkNfQ0xBU1MgV2ViTWVkaWFQbGF5ZXJQcm94eTsKIAogZW51bSBNZWRpYVBs
YXllclByb3h5Tm90aWZpY2F0aW9uVHlwZSB7CkBAIC01Nyw2ICs3MiwxNiBAQCBlbnVtIE1lZGlh
UGxheWVyUHJveHlOb3RpZmljYXRpb25UeXBlIHsKICAgICBNZWRpYVBsYXllck5vdGlmaWNhdGlv
blRpbWVKdW1wZWQsCiAgICAgCiAgICAgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25QbGF5UGF1c2VC
dXR0b25QcmVzc2VkLAorICAgIE1lZGlhUGxheWVyTm90aWZpY2F0aW9uUmF0ZURpZENoYW5nZSwK
KyAgICBNZWRpYVBsYXllck5vdGlmaWNhdGlvbkdhaW5Gb2N1cywKKyAgICBNZWRpYVBsYXllck5v
dGlmaWNhdGlvbkxvc2VGb2N1cywKKyAgICBNZWRpYVBsYXllclJlcXVlc3RCZWdpblBsYXliYWNr
LAorICAgIE1lZGlhUGxheWVyUmVxdWVzdFBhdXNlUGxheWJhY2ssCisKKyNpZiBFTkFCTEUoSU9T
X0FJUlBMQVkpCisgICAgTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25DdXJyZW50UGxheWJhY2tUYXJn
ZXRJc1dpcmVsZXNzQ2hhbmdlZCwKKyAgICBNZWRpYVBsYXllck5vdGlmaWNhdGlvblBsYXliYWNr
VGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZCwKKyNlbmRpZgogfTsKIAogI2lmZGVmIF9fT0JKQ19f
CkBAIC03MSw2ICs5NiwyNSBAQCBlbnVtIE1lZGlhUGxheWVyUHJveHlOb3RpZmljYXRpb25UeXBl
IHsKIAogLSAodm9pZClfc2V0UG9zdGVyOihOU1VSTCAqKXVybDsKIAorLSAodm9pZClfc2V0Q29u
dHJvbHM6KEJPT0wpY29udHJvbHM7CistICh2b2lkKV9zZXRBdXRvYnVmZmVyOihCT09MKWF1dG9i
dWZmZXI7CisKKy0gKHZvaWQpX2VudGVyRnVsbFNjcmVlbjsKKy0gKHZvaWQpX2V4aXRGdWxsU2Ny
ZWVuOworCisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQorLSAoQk9PTClfaXNDdXJyZW50UGxheWJh
Y2tUYXJnZXRXaXJlbGVzczsKKy0gKHZvaWQpX3Nob3dQbGF5YmFja1RhcmdldFBpY2tlcjsKKwor
LSAoQk9PTClfaGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHM7CisKKy0gKEJPT0wpX3dpcmVsZXNz
VmlkZW9QbGF5YmFja0Rpc2FibGVkOworLSAodm9pZClfc2V0V2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWQ6KEJPT0wpZGlzYWJsZWQ7CisKKy0gKHZvaWQpX3NldEhhc1BsYXliYWNrVGFyZ2V0
QXZhaWxhYmlsaXR5TGlzdGVuZXJzOihCT09MKWhhc0xpc3RlbmVyczsKKyNlbmRpZgorCistICh2
b2lkKV9wcmVwYXJlRm9yUGxheWJhY2s7CiAtICh2b2lkKV9wbGF5OwogLSAodm9pZClfcGF1c2U7
CiAKQEAgLTc5LDYgKzEyMyw5IEBAIGVudW0gTWVkaWFQbGF5ZXJQcm94eU5vdGlmaWNhdGlvblR5
cGUgewogLSAoQk9PTClfaGFzVmlkZW87CiAtIChCT09MKV9oYXNBdWRpbzsKIAorLSAoQk9PTClf
aGFzQ2xvc2VkQ2FwdGlvbnM7CistICh2b2lkKV9zZXRDbG9zZWRDYXB0aW9uc1Zpc2libGU6KEJP
T0wpdmlzaWJsZTsKKwogLSAoTlNUaW1lSW50ZXJ2YWwpX2R1cmF0aW9uOwogCiAtIChkb3VibGUp
X2N1cnJlbnRUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCmluZGV4IDcyOWJlNmZh
ZTc3MGZkZWQwNzhmNDk5ODIxNWU1NDgzY2VmNWRhYjMuLjA4MjhiZDgwODJjMTgzMWY5MDY2MGMy
Y2Q1ZTIyYWQ0Zjc1NmVjYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKQEAgLTI3
LDcgKzI3LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKIAorI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNl
cy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVU
ZXh0Lmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0K
aW5kZXggMjFlYTYxMTYwNzg2MTQzMWU2M2I2NGEzMGNlZDc3YTcwZjlhOTAwYy4uMjY0MGNjNDc5
NTg4MjhhYjUyOGRjNDFhYTg1OTM0NjU5NDZiNWUyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQpAQCAt
MzUsMjAgKzM1LDI3IEBACiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIlNo
YXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2lmIFVT
RShBUFBLSVQpCiAjaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+CiAjaW1wb3J0IDxBcHBsaWNhdGlv
blNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW1wb3J0IDxDb3JlVGV4
dC9Db3JlVGV4dC5oPgorI2VuZGlmCiAjaW1wb3J0IDxmbG9hdC5oPgogI2ltcG9ydCA8dW5pY29k
ZS91Y2hhci5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAorI2lmICFQTEFURk9STShJ
T1MpCiBAaW50ZXJmYWNlIE5TRm9udCAoV2ViQXBwS2l0U2VjcmV0QVBJKQogLSAoQk9PTClfaXNG
YWtlRml4ZWRQaXRjaDsKIEBlbmQKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gIAor
CisjaWYgVVNFKEFQUEtJVCkKIHN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZv
bnRSZWYgY3RGb250KQogewogICAgIC8vIFRoZSBjaGVjayBkb2Vzbid0IGxvb2sgbmVhdCBidXQg
dGhpcyBpcyB3aGF0IEFwcEtpdCBkb2VzIGZvciB2ZXJ0aWNhbCB3cml0aW5nLi4uCkBAIC0yNTUs
NiArMjYyLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkK
ICAgICAvLyBGYWxsYmFjayB0byBhIGNyb3NzLXBsYXRmb3JtIGVzdGltYXRlLCB3aGljaCB3aWxs
IHBvcHVsYXRlIHRoZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBub24tcG9zaXRpdmUuCiAgICAgaW5p
dENoYXJXaWR0aHMoKTsKIH0KKyNlbmRpZiAvLyBVU0UoQVBQS0lUKQogCiB2b2lkIFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogewpAQCAtMjY4LDYgKzI3Niw3IEBAIHZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiAgICAgfQogfQogCisjaWYgIVBMQVRGT1JN
KElPUykKIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBpZiAoaXNDdXN0b21Gb250KCkp
IHsKQEAgLTMwNCw3ICszMTMsOSBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGbwogCiAgICAgcmV0
dXJuIDA7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAorI2lmICFQTEFURk9STShJT1Mp
CiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgTlNTdHJpbmcgKnN0cmluZyA9IFtb
TlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyc05vQ29weTpjb25zdF9jYXN0PHVuaWNo
YXIqPihjaGFyYWN0ZXJzKSBsZW5ndGg6bGVuZ3RoIGZyZWVXaGVuRG9uZTpOT107CkBAIC0zMzUs
NiArMzQ2LDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgICAg
ICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTVMtUEdvdGhpYyJdICE9IE5TT3Jk
ZXJlZFNhbWUgJiYKICAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1v
bm90eXBlQ29yc2l2YSJdICE9IE5TT3JkZXJlZFNhbWU7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKIAogRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdAogewpAQCAtMzQ3LDYgKzM1OSw3IEBAIEZsb2F0UmVjdCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAg
ICByZXR1cm4gYm91bmRpbmdCb3g7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogZmxvYXQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsK
ICAgICBDR1NpemUgYWR2YW5jZSA9IENHU2l6ZVplcm87CkBAIC0zNjcsNiArMzgwLDcgQEAgZmxv
YXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKIAogICAgIHJldHVybiBhZHZhbmNlLndpZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0Owog
fQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIHN0cnVjdCBQcm92aWRlckluZm8gewogICAg
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9XZWJHTExheWVyLmgKaW5kZXggNjQ0MGI3MWFmNzE5ODg3ZjM1ZmE1ODA0
ZmU5MGMwYTk5YzUyMDg4Ni4uZWFkZTUyMDM0Y2RkODEwYTYwMmZlODFmZGEyODQyYjIzMTg2YTA5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdM
TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xM
YXllci5oCkBAIC0zNSw3ICszNSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0Q7CiB9CiAKLUBpbnRlcmZhY2UgV2ViR0xMYXllciA6IENBT3BlbkdM
TGF5ZXIgCisjaWYgUExBVEZPUk0oSU9TKQorQGludGVyZmFjZSBXZWJHTExheWVyIDogQ0FFQUdM
TGF5ZXIKKyNlbHNlCitAaW50ZXJmYWNlIFdlYkdMTGF5ZXIgOiBDQU9wZW5HTExheWVyCisjZW5k
aWYKIHsKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX2xheWVyT3duZXI7CiAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJHTExheWVyLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIubW0KaW5kZXggZDUxMGI2MTlkZTk5
OTU1YzczMDYxYWE0YTg5NjI1YzE4YTdjYWIzMy4uNjQ4Mjk5ZTc1OTZjMzQ1NjJlMTU0NDUwZTc3
ZWEyNGE3ODJiMjFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1dlYkdMTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1dlYkdMTGF5ZXIubW0KQEAgLTMyLDggKzMyLDEwIEBACiAKICNpbXBvcnQgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW1wb3J0ICJHcmFwaGljc0xheWVyLmgiCisjaWYgIVBMQVRGT1JN
KElPUykKICNpbXBvcnQgPE9wZW5HTC9PcGVuR0wuaD4KICNpbXBvcnQgPE9wZW5HTC9nbC5oPgor
I2VuZGlmCiAjaW1wb3J0IDx3dGYvRmFzdE1hbGxvYy5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgogCkBAIC00OCw2ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIHJl
dHVybiBzZWxmOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIC0oQ0dMUGl4ZWxGb3JtYXRPYmop
Y29weUNHTFBpeGVsRm9ybWF0Rm9yRGlzcGxheU1hc2s6KHVpbnQzMl90KW1hc2sKIHsKICAgICAv
LyBGSVhNRTogVGhlIG1hc2sgcGFyYW0gdGVsbHMgeW91IHdoaWNoIGRpc3BsYXkgKG9uIGEgbXVs
dGktZGlzcGxheSBzeXN0ZW0pCkBAIC0xMDgsOSArMTExLDE0IEBAIHN0YXRpYyB2b2lkIGZyZWVE
YXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCiB7CiAgICAg
ZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkICo+KGRhdGEpKTsKIH0KKyNlbmRpZgogCiAtKENHSW1h
Z2VSZWYpY29weUltYWdlU25hcHNob3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xvclNwYWNlUmVmKWNv
bG9yU3BhY2UKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3Bh
Y2UpOworICAgIHJldHVybiAwOworI2Vsc2UKICAgICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2Nv
bnRleHQtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSk7CiAKICAgICBSZXRhaW5QdHI8Q0dD
b2xvclNwYWNlUmVmPiBpbWFnZUNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwpAQCAtMTM4LDExICsx
NDYsMTYgQEAgc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBz
aXplX3QgLyogc2l6ZSAqLykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKICAgICBDR0RhdGFQcm92aWRl
clJlbGVhc2UocHJvdmlkZXIpOwogICAgIHJldHVybiBpbWFnZTsKKyNlbmRpZgogfQogCiAtICh2
b2lkKWRpc3BsYXkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgbV9jb250ZXh0LT5lbmRQYWlu
dCgpOworI2Vsc2UKICAgICBbc3VwZXIgZGlzcGxheV07CisjZW5kaWYKICAgICBpZiAobV9sYXll
ck93bmVyKQogICAgICAgICBtX2xheWVyT3duZXItPmxheWVyRGlkRGlzcGxheShzZWxmKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXll
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQpp
bmRleCAwODI5NjQyZDk0OWQwNjRlZDlhYTZjYWVlNDBhZTA2ZTQwNDliYzRjLi5hOTI0Y2RmOGNk
ZThhOTgyMDExOGQwM2E5ZjkxMTQxMDRhMjNjMzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCkBAIC0zMiwxNSArMzIsMjkgQEAKICNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAiR3JhcGhpY3NMYXllckNBLmgiCiAj
aW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXIuaCIKKyNpZiAhUExBVEZPUk0oSU9TKQogI2ltcG9ydCAi
VGhlbWVNYWMuaCIKKyNlbmRpZgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAK
KyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJXS0dyYXBoaWNzLmgiCisjaW1wb3J0ICJXQUtX
aW5kb3cuaCIKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgorCiBAaW50ZXJmYWNl
IENBTGF5ZXIoV2ViQ29yZUNBTGF5ZXJQcml2YXRlKQogLSAodm9pZClyZWxvYWRWYWx1ZUZvcktl
eVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aDsKIEBlbmQKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKKyNpZiBQTEFURk9STShJT1MpCitAaW50ZXJmYWNlIFdlYkxheWVyKFByaXZhdGUpCist
ICh2b2lkKWRyYXdTY2FsZWRDb250ZW50c0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQ7
CitAZW5kCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZXBhaW50UmVjdExpc3Qg
Y29sbGVjdFJlY3RzVG9QYWludChDR0NvbnRleHRSZWYgY29udGV4dCwgUGxhdGZvcm1DQUxheWVy
KiBwbGF0Zm9ybUNBTGF5ZXIpCkBAIC03NCwxNyArODgsMjYgQEAgdm9pZCBkcmF3TGF5ZXJDb250
ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0
Zm9ybUMKICAgICBpZiAoIWxheWVyQ29udGVudHMpCiAgICAgICAgIHJldHVybjsKIAorI2lmIFBM
QVRGT1JNKElPUykKKyAgICBXS1NldEN1cnJlbnRHcmFwaGljc0NvbnRleHQoY29udGV4dCk7Cisj
ZW5kaWYKKwogICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAKICAgICAvLyBXZSBu
ZXZlciB1c2UgQ29tcG9zaXRpbmdDb29yZGluYXRlc0JvdHRvbVVwIG9uIE1hYy4KICAgICBBU1NF
UlQobGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpID09
IEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKTsKIAorI2lmIFBM
QVRGT1JNKElPUykKKyAgICBXS0ZvbnRBbnRpYWxpYXNpbmdTdGF0ZVNhdmVyIGZvbnRBbnRpYWxp
YXNpbmdTdGF0ZShjb250ZXh0LCBbcGxhdGZvcm1DQUxheWVyLT5wbGF0Zm9ybUxheWVyKCkgaXNP
cGFxdWVdKTsKKyAgICBmb250QW50aWFsaWFzaW5nU3RhdGUuc2V0dXAoW1dBS1dpbmRvdyBoYXNM
YW5kc2NhcGVPcmllbnRhdGlvbl0pOworI2Vsc2UKICAgICBbTlNHcmFwaGljc0NvbnRleHQgc2F2
ZUdyYXBoaWNzU3RhdGVdOwogCiAgICAgLy8gU2V0IHVwIGFuIE5TR3JhcGhpY3NDb250ZXh0IGZv
ciB0aGUgY29udGV4dCwgc28gdGhhdCBwYXJ0cyBvZiBBcHBLaXQgdGhhdCByZWx5IG9uCiAgICAg
Ly8gdGhlIGN1cnJlbnQgTlNHcmFwaGljc0NvbnRleHQgKGUuZy4gTlNDZWxsIGRyYXdpbmcpIGdl
dCB0aGUgcmlnaHQgb25lLgogICAgIE5TR3JhcGhpY3NDb250ZXh0KiBsYXllckNvbnRleHQgPSBb
TlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEdyYXBoaWNzUG9ydDpjb250ZXh0
IGZsaXBwZWQ6WUVTXTsKICAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6
bGF5ZXJDb250ZXh0XTsKKyNlbmRpZgogCiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29u
dGV4dChjb250ZXh0KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0
cnVlKTsKQEAgLTk0LDcgKzExNyw4IEBAIHZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0
UmVmIGNvbnRleHQsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DCiAgICAgICAg
IC8vIFR1cm4gb2ZmIGZvbnQgc21vb3RoaW5nIHRvIGltcHJvdmUgdGhlIGFwcGVhcmFuY2Ugb2Yg
dGV4dCByZW5kZXJlZCBvbnRvIGEgdHJhbnNwYXJlbnQgYmFja2dyb3VuZC4KICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnNldFNob3VsZFNtb290aEZvbnRzKGZhbHNlKTsKICAgICB9Ci0gICAgCisK
KyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGdldCB0aGUgY2xp
cCBmcm9tIHRoZSBjb250ZXh0LCBiZWNhdXNlIGl0IG1heSBiZSBzaWduaWZpY2FudGx5CiAgICAg
Ly8gc21hbGxlciB0aGFuIHRoZSBsYXllciBib3VuZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQogICAg
IEZsb2F0UmVjdCBjbGlwQm91bmRzID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRl
eHQpOwpAQCAtMTA2LDYgKzEzMCw3IEBAIHZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0
UmVmIGNvbnRleHQsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DCiAgICAgZm9j
dXNSaW5nQ2xpcFJlY3QgPSB0cmFuc2Zvcm0ubWFwUmVjdChjbGlwQm91bmRzKTsKICNlbmRpZgog
ICAgIFRoZW1lTWFjOjpzZXRGb2N1c1JpbmdDbGlwUmVjdChmb2N1c1JpbmdDbGlwUmVjdCk7Cisj
ZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogICAgIGZvciAoYXV0byByZWN0IDogZGlydHlSZWN0
cykgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhp
Y3NDb250ZXh0KTsKQEAgLTExNCw5ICsxMzksMTMgQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhD
R0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUMK
ICAgICAgICAgbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhwbGF0
Zm9ybUNBTGF5ZXIsIGdyYXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7CiAg
ICAgfQogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGZvbnRBbnRpYWxpYXNpbmdTdGF0ZS5yZXN0
b3JlKCk7CisjZWxzZQogICAgIFRoZW1lTWFjOjpzZXRGb2N1c1JpbmdDbGlwUmVjdChGbG9hdFJl
Y3QoKSk7CiAKICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwor
I2VuZGlmCiAKICAgICAvLyBSZS1mZXRjaCB0aGUgbGF5ZXIgb3duZXIsIHNpbmNlIDxyZGFyOi8v
cHJvYmxlbS85MTI1MTUxPiBpbmRpY2F0ZXMgdGhhdCBpdCBtaWdodCBoYXZlIGJlZW4gZGVzdHJv
eWVkIGR1cmluZyBwYWludGluZy4KICAgICBsYXllckNvbnRlbnRzID0gcGxhdGZvcm1DQUxheWVy
LT5vd25lcigpOwpAQCAtMjI0LDYgKzI1MywxMCBAQCB2b2lkIGRyYXdSZXBhaW50SW5kaWNhdG9y
KENHQ29udGV4dFJlZiBjb250ZXh0LCBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllcgog
CiAtICh2b2lkKWRpc3BsYXkKIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKHB0aHJlYWRf
bWFpbl9ucCgpKQorICAgICAgICBXZWJUaHJlYWRMb2NrKCk7CisjZW5kaWYKICAgICBbc3VwZXIg
ZGlzcGxheV07CiAgICAgUGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6
cGxhdGZvcm1DQUxheWVyKHNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkK
QEAgLTIzMiw2ICsyNjUsMTAgQEAgdm9pZCBkcmF3UmVwYWludEluZGljYXRvcihDR0NvbnRleHRS
ZWYgY29udGV4dCwgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIKIAogLSAodm9pZClk
cmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dAogeworI2lmIFBMQVRGT1JNKElPUykK
KyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRocmVhZExvY2soKTsKKyNl
bmRpZgogICAgIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRm
b3JtQ0FMYXllcihzZWxmKTsKICAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPm93bmVyKCkpIHsKICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVyLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIubW0K
aW5kZXggM2NhYzVlN2MzMzEyOGRhMWRmZWNmOTNkNjAzOGMxMWUxOTlkMjViMy4uYzg2YWZhNjg4
NGJlY2QyZjM2ODQ3ZjNiZDIwZDc4ZDA5NGNhMjFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIubW0KQEAgLTMzLDYgKzMz
LDExIEBACiAjaW1wb3J0ICJHcmFwaGljc0xheWVyQ0EuaCIKICNpbXBvcnQgIlBsYXRmb3JtQ0FM
YXllci5oIgogCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgor
I2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBAaW1wbGVtZW50YXRpb24gV2ViVGlsZWRMYXllcgpAQCAtNDYsNyArNTEsMTQg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAvLyBNYWtlIHN1cmUgdGhhdCB0aWxlcyBhcmUg
ZHJhd24gb24gdGhlIG1haW4gdGhyZWFkCiArIChCT09MKXNob3VsZERyYXdPbk1haW5UaHJlYWQK
IHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFdlYktpdDIgYWx3YXlzIHdhbnRz
IHRvIGRyYXcgb24gdGhlIG1haW4gdGhyZWFkLCBidXQgdGhlcmUgaXMKKyAgICAvLyBwcm9iYWJs
eSBhIGJldHRlciB3YXkgdG8gY2hlY2sgZm9yIFdlYktpdDIgdGhhbiB1c2luZyB0aGUgZXhpc3Rh
bmNlIG9mCisgICAgLy8gdGhlIHdlYiB0aHJlYWQgYXMgYSBwcm94eS4KKyAgICByZXR1cm4gIVdl
YlRocmVhZElzRW5hYmxlZCgpOworI2Vsc2UKICAgICByZXR1cm4gWUVTOworI2VuZGlmCiB9CiAK
ICsgKHVuc2lnbmVkIGludClwcmVmZXRjaGVkVGlsZXMKQEAgLTk4LDYgKzExMCwxMyBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIC0gKHZvaWQpZGlzcGxheQogewogICAgIFtzdXBlciBkaXNw
bGF5XTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gQ0FUaWxlZExheWVyIG5ldmVyIGNhbGxz
IGRpc3BsYXkgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCwgc28gaXQncyBzYWZlCisgICAgLy8gdG8g
YXNzdW1lIHdlJ3JlIGVpdGhlciBvbiB0aGUgbWFpbiB0aHJlYWQgb3Igb24gdGhlIHdlYiB0aHJl
YWQuCisgICAgaWYgKHB0aHJlYWRfbWFpbl9ucCgpKQorICAgICAgICBXZWJUaHJlYWRMb2NrKCk7
CisgICAgQVNTRVJUKFdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsKKyNlbmRpZgogICAg
IFBsYXRmb3JtQ0FMYXllciogbGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXll
cihzZWxmKTsKICAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPm93bmVyKCkpCiAgICAgICAgIGxheWVy
LT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJMYXllckRpZERpc3BsYXkoc2VsZik7CkBAIC0xMDUs
OSArMTI0LDIwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAtICh2b2lkKWRyYXdJbkNv
bnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0CiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZv
aWQgKF5kcmF3KSgpID0gXnsKKyNlbmRpZgogICAgIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIgPSBQ
bGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihzZWxmKTsKICAgICBpZiAobGF5ZXIpCiAg
ICAgICAgIGRyYXdMYXllckNvbnRlbnRzKGNvbnRleHQsIGxheWVyKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgfTsKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpIHsKKyAgICAgICAgV2ViVGhy
ZWFkTG9jaygpOworICAgICAgICBkcmF3KCk7CisgICAgfSBlbHNlCisgICAgICAgIFdlYlRocmVh
ZFJ1blN5bmMoZHJhdyk7CisjZW5kaWYKIH0KIAogQGVuZCAvLyBpbXBsZW1lbnRhdGlvbiBXZWJU
aWxlZExheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCmluZGV4IGZhMjc5MGQzYWY5NTBj
ZmY0ZGNiNTZjNWZjZDNiNDg2NmMyYzNjNjUuLjI4OWMzZTI5YzgwMjJlOGRlZmRmNTRmY2I4MzI1
ZDFkYjgyOTc2NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCkBAIC0zMiwxMyArMzIs
MjAgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAi
QU5HTEUvU2hhZGVyTGFuZy5oIgorI2luY2x1ZGUgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgorI2Vs
aWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIkFOR0xFL1NoYWRlckxhbmcuaCIKICNpbmNsdWRl
IDxPcGVuR0wvZ2wuaD4KICNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQ
TEFURk9STShXSU4pIHx8IFBMQVRGT1JNKE5JWCkKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJ
T1MuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEV4dGVuc2lvbnMzRE9wZW5H
TDo6RXh0ZW5zaW9uczNET3BlbkdMKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQpAQCAtNTMs
NyArNjAsMjEgQEAgRXh0ZW5zaW9uczNET3BlbkdMOjp+RXh0ZW5zaW9uczNET3BlbkdMKCkKIAog
dm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25n
IHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBs
b25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcg
ZmlsdGVyKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0oc3JjWDApOwor
ICAgIFVOVVNFRF9QQVJBTShzcmNZMCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1gxKTsKKyAgICBV
TlVTRURfUEFSQU0oc3JjWTEpOworICAgIFVOVVNFRF9QQVJBTShkc3RYMCk7CisgICAgVU5VU0VE
X1BBUkFNKGRzdFkwKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WDEpOworICAgIFVOVVNFRF9QQVJB
TShkc3RZMSk7CisgICAgVU5VU0VEX1BBUkFNKG1hc2spOworICAgIFVOVVNFRF9QQVJBTShmaWx0
ZXIpOworICAgIDo6Z2xSZXNvbHZlTXVsdGlzYW1wbGVGcmFtZWJ1ZmZlckFQUExFKCk7CisjZWxz
ZQogICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEs
IGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOworI2VuZGlmCiB9CiAK
IHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9u
ZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpCkBAIC0xMDUsNiArMTI2LDEwIEBAIEdDM0Rib29sZWFuIEV4dGVuc2lvbnMzRE9wZW5HTDo6
aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQogCiB2b2lkIEV4dGVuc2lv
bnMzRE9wZW5HTDo6YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCiB7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFVOVVNFRF9QQVJBTShhcnJheSk7CisjZW5kaWYKKwog
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAjaWYgKFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKE5JWCkpCiAgICAg
aWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKQEAgLTE4NiwxMyArMjExLDE5IEBA
IGJvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcm
IG5hbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIH0KKworI2lmIFBMQVRG
T1JNKElPUykKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIikK
KyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfT0VTX3Bh
Y2tlZF9kZXB0aF9zdGVuY2lsIik7CisjZW5kaWYKKwogICAgIHJldHVybiBtX2F2YWlsYWJsZUV4
dGVuc2lvbnMuY29udGFpbnMobmFtZSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpk
cmF3QnVmZmVyc0VYVChHQzNEc2l6ZWkgbiwgY29uc3QgR0MzRGVudW0qIGJ1ZnMpCiB7CiAgICAg
Ly8gIEZJWE1FOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3Igb3RoZXIgcGxhdGZvcm1zLgotI2lmIFBM
QVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgOjpn
bERyYXdCdWZmZXJzQVJCKG4sIGJ1ZnMpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCmluZGV4IGZlODRiMzlhZTMxOTVk
MGFlNDM2OGM3ZGMzOWIzNDVmOGM2YWI4ODguLjAwNjAyZTM0ZWYyMDM1NGZhOGZkNTRiNDM0ZTNl
ZjJiMzE0ZmU1MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCkBA
IC0zNiw2ICszNiw5IEBACiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+CiAjZW5k
aWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxPcGVuR0xFUy9FUzIvZ2xleHQuaD4K
KyNlbHNlCiAjaWYgVVNFKE9QRU5HTF9FU18yKQogI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIK
ICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KQEAgLTQ1LDYgKzQ4LDcgQEAKICNlbGlmIFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKE5JWCkK
ICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2VuZGlmCisjZW5kaWYKIAogI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNzEsNyArNzUsNyBA
QCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbihHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICBpZiAodmVuZG9yQ29tcG9uZW50cy5jb250YWlu
cygiaW50ZWwiKSkKICAgICAgICAgbV9pc0ludGVsID0gdHJ1ZTsKIAotI2lmIFBMQVRGT1JNKE1B
QykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgaWYgKG1faXNBTUQg
fHwgbV9pc0ludGVsKQogICAgICAgICBtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9u
ID0gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKaW5kZXggZDA0
ODViZjE4NjI1NWI4NTk1ODdlZmJmYjY1NGE2MTgwNjdiYzY0NS4uNzljNmZkODM4OGQyOWZkNGU5
MjBkMTM0ZGQ5MmExNGY3MDM5ZDk4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0wuY3BwCkBAIC0yOSw2ICsyOSw5IEBACiAjaWYgVVNFKDNEX0dSQVBISUNTKQogCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0RJT1MuaCIKKyNlbmRpZgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3Bl
bkdMLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNDEsNyArNDQsMTIgQEAKICNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2lm
IFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0IDxPcGVuR0xFUy9FUzIv
Z2xleHQuaD4KKy8vIEZyb20gPE9wZW5HTEVTL2dsZXh0Lmg+CisjZGVmaW5lIEdMX1JHQkEzMkZf
QVJCICAgICAgICAgICAgICAgICAgICAgIDB4ODgxNAorI2RlZmluZSBHTF9SR0IzMkZfQVJCICAg
ICAgICAgICAgICAgICAgICAgICAweDg4MTUKKyNlbGlmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRl
IDxPcGVuR0wvZ2wuaD4KICNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQ
TEFURk9STShXSU4pIHx8IFBMQVRGT1JNKE5JWCkKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgpA
QCAtODYsNyArOTQsMTEgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9F
WFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKSkKICAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVu
Y2lsRm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7CiAgICAgICAgIGVsc2UKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdM
X0RFUFRIX0NPTVBPTkVOVDE2OworI2Vsc2UKICAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVu
Y2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UOworI2VuZGlmCiAgICAgfQogCiAgICAgYm9v
bCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwpAQCAtMTI3LDYgKzEzOSwxMSBAQCBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgIH0KIAog
ICAgIEFTU0VSVChtX3RleHR1cmUpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICA6OmdsQmluZFJl
bmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fdGV4dHVyZSk7CisgICAgOjpnbEZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xf
UkVOREVSQlVGRkVSLCBtX3RleHR1cmUpOworICAgIHNldFJlbmRlcmJ1ZmZlclN0b3JhZ2VGcm9t
RHJhd2FibGUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7CisjZWxzZQogICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwogICAgIDo6Z2xUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwogICAgIDo6Z2xGcmFtZWJ1
ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQw
X0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKQEAgLTEzNiw2ICsxNTMsNyBAQCBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQog
ICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAw
KTsKICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwogICAgIH0KKyNl
bmRpZgogCiAgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8
IG1fYXR0cnMuZGVwdGgpKSB7CiAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKQEAgLTE2NywxNyArMTg1LDIy
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkoY29uc3QgSW50UmVjdCYgcmVjdCkKIAogICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
UkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwogICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLQorI2lmIFBMQVRG
T1JNKElPUykKKyAgICBVTlVTRURfUEFSQU0ocmVjdCk7CisgICAgOjpnbFJlc29sdmVNdWx0aXNh
bXBsZUZyYW1lYnVmZmVyQVBQTEUoKTsKKyNlbHNlCiAgICAgSW50UmVjdCByZXNvbHZlUmVjdCA9
IHJlY3Q7CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXNvbHZlUmVjdCA9IElu
dFJlY3QoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7CiAKICAgICA6Omds
QmxpdEZyYW1lYnVmZmVyRVhUKHJlc29sdmVSZWN0LngoKSwgcmVzb2x2ZVJlY3QueSgpLCByZXNv
bHZlUmVjdC5tYXhYKCksIHJlc29sdmVSZWN0Lm1heFkoKSwgcmVzb2x2ZVJlY3QueCgpLCByZXNv
bHZlUmVjdC55KCksIHJlc29sdmVSZWN0Lm1heFgoKSwgcmVzb2x2ZVJlY3QubWF4WSgpLCBHTF9D
T0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworI2VuZGlmCiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQogewogICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworI2lmICFQTEFURk9STShJT1MpCiAgICAgc3dpdGNoIChp
bnRlcm5hbGZvcm1hdCkgewogICAgIGNhc2UgREVQVEhfU1RFTkNJTDoKICAgICAgICAgaW50ZXJu
YWxmb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKQEAgLTE5Myw2ICsyMTYsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gaW50ZXJuYWxmbwogICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX1JHQjsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQorI2VuZGlmCiAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2VFWFQodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKQEAgLTIw
NCw2ICsyMjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51
bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCiAgICAgLy8gVGhlcmVmb3JlLCB0aGUgdmFsdWUgcmV0
dXJuZWQgYnkgZGVza3RvcCBHTCBuZWVkcyB0byBiZSBkaXZpZGVkIGJ5IDQuCiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgc3dpdGNoIChwbmFtZSkgeworI2lmICFQTEFURk9STShJT1Mp
CiAgICAgY2FzZSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgogICAgICAgICA6OmdsR2V0
SW50ZWdlcnYoR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUywgdmFsdWUpOwogICAg
ICAgICAqdmFsdWUgLz0gNDsKQEAgLTIxNiw2ICsyNDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCiAgICAgICAg
IDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19GTE9BVFMsIHZhbHVlKTsKICAgICAgICAg
KnZhbHVlIC89IDQ7CiAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgZGVmYXVsdDoKICAgICAg
ICAgOjpnbEdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CiAgICAgfQpAQCAtMjY2LDYgKzI5Miw3
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBH
TF9SR0IpCiAgICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX1JHQjMyRl9BUkI7
CiAgICAgfSBlbHNlIGlmICh0eXBlID09IEhBTEZfRkxPQVRfT0VTKSB7CisjaWYgIVBMQVRGT1JN
KElPUykKICAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9SR0JBKQogICAgICAgICAgICAgb3BlbkdM
SW50ZXJuYWxGb3JtYXQgPSBHTF9SR0JBMTZGX0FSQjsKICAgICAgICAgZWxzZSBpZiAoZm9ybWF0
ID09IEdMX1JHQikKQEAgLTI3Nyw2ICszMDQsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQog
ICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQogICAgICAgICAg
ICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfQVJCOwogICAg
ICAgICB0eXBlID0gR0xfSEFMRl9GTE9BVF9BUkI7CisjZW5kaWYKICAgICB9CiAgICAgdGV4SW1h
Z2UyRERpcmVjdCh0YXJnZXQsIGxldmVsLCBvcGVuR0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC0yODUsMTMgKzMxMywyMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIp
CiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIDo6
Z2xEZXB0aFJhbmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oekZhcikpOworI2Vsc2UKICAgICA6OmdsRGVwdGhSYW5nZSh6TmVhciwgekZhcik7CisjZW5k
aWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRl
cHRoKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICA6OmdsQ2xlYXJEZXB0aGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlcHRoKSk7CisjZWxzZQogICAg
IDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKKyNlbmRpZgogfQogCiBFeHRlbnNpb25zM0QqIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IDc2ODc0NzMyZTk3MGExZDIxMWI3ZGEzNGU5ZGEy
YTY1Nzg3ZGVlYjcuLmY1NDFlMGUzMzc0NDc4NzZhNWViNWJjMmI4N2JhMzYwM2VhZjZmNWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtMzEs
NiArMzEsOSBAQAogI2lmIFVTRSgzRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
SU9TLmgiCisjZW5kaWYKIAogI2lmIFVTRShPUEVOR0xfRVNfMikKICNpbmNsdWRlICJFeHRlbnNp
b25zM0RPcGVuR0xFUy5oIgpAQCAtNTQsNiArNTcsMTIgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElP
UykKKyNpbXBvcnQgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgorLy8gRnJvbSA8T3BlbkdMRVMvZ2xl
eHQuaD4KKyNkZWZpbmUgR0xfUkdCQTMyRl9BUkIgICAgICAgICAgICAgICAgICAgICAgMHg4ODE0
CisjZGVmaW5lIEdMX1JHQjMyRl9BUkIgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxNQorI2Vs
c2UKICNpZiBVU0UoT1BFTkdMX0VTXzIpCiAjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgogI2Vs
aWYgUExBVEZPUk0oTUFDKQpAQCAtNjEsNiArNzAsNyBAQAogI2VsaWYgUExBVEZPUk0oR1RLKSB8
fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklYKQogI2luY2x1
ZGUgIk9wZW5HTFNoaW1zLmgiCiAjZW5kaWYKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oQkxBQ0tC
RVJSWSkKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KQEAgLTE2MSw2ICsxNzEs
MTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyLAogICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdl
dCgpLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LAogICAgICAgICAgICAgICAgICAg
aW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLndpZHRoKCksIGltYWdlQnVmZmVyLT5pbnRlcm5h
bFNpemUoKS5oZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCkpOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgZW5kUGFpbnQoKTsKKyNlbmRp
ZgogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9D
YW52YXMoSW1hZ2VCdWZmZXIqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNw
cAppbmRleCBiZjUwNzQ1MTI3NzNiZjdjMTdlMTVmMmE4M2EzN2M5MGFjZjZjMGZiLi5kYWQyMzU5
OWJlMmM1ODAxMjQ4YTcwYTUxYmQyNDZjNThlOWNhYWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5z
Zm9ybWF0aW9uTWF0cml4LmNwcApAQCAtMTAzNSw3ICsxMDM1LDcxIEBAIFRyYW5zZm9ybWF0aW9u
TWF0cml4IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KGNvbnN0IEZsb2F0UmVjdCYg
ZnJvbSwgY29uCiAvLyB0aGlzID0gbWF0ICogdGhpcy4KIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6bXVsdGlwbHkoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdCkKIHsKLSNpZiBDUFUoQVBQTEVfQVJNVjdTKQorI2lmIENQVShBUk02NCkKKyAgICBkb3Vi
bGUqIGxlZnRNYXRyaXggPSAmKG1fbWF0cml4WzBdWzBdKTsKKyAgICBjb25zdCBkb3VibGUqIHJp
Z2h0TWF0cml4ID0gJihtYXQubV9tYXRyaXhbMF1bMF0pOworICAgIGFzbSB2b2xhdGlsZSAoCisg
ICAgICAgIC8vIEZpcnN0LCBsb2FkIHRoZSBsZWZ0TWF0cml4IGNvbXBsZXRlbHkgaW4gbWVtb3J5
LiBUaGUgbGVmdE1hdHJpeCBpcyBpbiB2MTYtdjIzLgorICAgICAgICAibW92ICAgICAgeDQsICVb
bGVmdE1hdHJpeF1cblx0IgorICAgICAgICAibGQxLjJkICAge3YxNiwgdjE3LCB2MTgsIHYxOX0s
IFslW2xlZnRNYXRyaXhdXSwgIzY0XG5cdCIKKyAgICAgICAgImxkMS4yZCAgIHt2MjAsIHYyMSwg
djIyLCB2MjN9LCBbJVtsZWZ0TWF0cml4XV1cblx0IgorCisgICAgICAgIC8vIEZpcnN0IHJvdy4K
KyAgICAgICAgImxkNHIuMmQgIHt2MjQsIHYyNSwgdjI2LCB2Mjd9LCBbJVtyaWdodE1hdHJpeF1d
LCAjMzJcblx0IgorICAgICAgICAiZm11bC4yZCAgdjI4LCB2MjQsIHYxNlxuXHQiCisgICAgICAg
ICJmbXVsLjJkICB2MjksIHYyNCwgdjE3XG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYyOCwgdjI1
LCB2MThcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjI5LCB2MjUsIHYxOVxuXHQiCisgICAgICAg
ICJmbWxhLjJkICB2MjgsIHYyNiwgdjIwXG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYyOSwgdjI2
LCB2MjFcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjI4LCB2MjcsIHYyMlxuXHQiCisgICAgICAg
ICJmbWxhLjJkICB2MjksIHYyNywgdjIzXG5cdCIKKworICAgICAgICAibGQ0ci4yZCAge3YwLCB2
MSwgdjIsIHYzfSwgWyVbcmlnaHRNYXRyaXhdXSwgIzMyXG5cdCIKKyAgICAgICAgInN0MS4yZCAg
e3YyOCwgdjI5fSwgW3g0XSwgIzMyXG5cdCIKKworICAgICAgICAvLyBTZWNvbmQgcm93LgorICAg
ICAgICAiZm11bC4yZCAgdjMwLCB2MCwgdjE2XG5cdCIKKyAgICAgICAgImZtdWwuMmQgIHYzMSwg
djAsIHYxN1xuXHQiCisgICAgICAgICJmbWxhLjJkICB2MzAsIHYxLCB2MThcblx0IgorICAgICAg
ICAiZm1sYS4yZCAgdjMxLCB2MSwgdjE5XG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYzMCwgdjIs
IHYyMFxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MzEsIHYyLCB2MjFcblx0IgorICAgICAgICAi
Zm1sYS4yZCAgdjMwLCB2MywgdjIyXG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYzMSwgdjMsIHYy
M1xuXHQiCisKKyAgICAgICAgImxkNHIuMmQgIHt2MjQsIHYyNSwgdjI2LCB2Mjd9LCBbJVtyaWdo
dE1hdHJpeF1dLCAjMzJcblx0IgorICAgICAgICAic3QxLjJkICAge3YzMCwgdjMxfSwgW3g0XSwg
IzMyXG5cdCIKKworICAgICAgICAvLyBUaGlyZCByb3cuCisgICAgICAgICJmbXVsLjJkICB2Mjgs
IHYyNCwgdjE2XG5cdCIKKyAgICAgICAgImZtdWwuMmQgIHYyOSwgdjI0LCB2MTdcblx0IgorICAg
ICAgICAiZm1sYS4yZCAgdjI4LCB2MjUsIHYxOFxuXHQiCisgICAgICAgICJmbWxhLjJkICB2Mjks
IHYyNSwgdjE5XG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYyOCwgdjI2LCB2MjBcblx0IgorICAg
ICAgICAiZm1sYS4yZCAgdjI5LCB2MjYsIHYyMVxuXHQiCisgICAgICAgICJmbWxhLjJkICB2Mjgs
IHYyNywgdjIyXG5cdCIKKyAgICAgICAgImZtbGEuMmQgIHYyOSwgdjI3LCB2MjNcblx0IgorCisg
ICAgICAgICJsZDRyLjJkICB7djAsIHYxLCB2MiwgdjN9LCBbJVtyaWdodE1hdHJpeF1dLCAjMzJc
blx0IgorICAgICAgICAic3QxLjJkICAge3YyOCwgdjI5fSwgW3g0XSwgIzMyXG5cdCIKKworICAg
ICAgICAvLyBGb3VydGggcm93LgorICAgICAgICAiZm11bC4yZCAgdjMwLCB2MCwgdjE2XG5cdCIK
KyAgICAgICAgImZtdWwuMmQgIHYzMSwgdjAsIHYxN1xuXHQiCisgICAgICAgICJmbWxhLjJkICB2
MzAsIHYxLCB2MThcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjMxLCB2MSwgdjE5XG5cdCIKKyAg
ICAgICAgImZtbGEuMmQgIHYzMCwgdjIsIHYyMFxuXHQiCisgICAgICAgICJmbWxhLjJkICB2MzEs
IHYyLCB2MjFcblx0IgorICAgICAgICAiZm1sYS4yZCAgdjMwLCB2MywgdjIyXG5cdCIKKyAgICAg
ICAgImZtbGEuMmQgIHYzMSwgdjMsIHYyM1xuXHQiCisKKyAgICAgICAgInN0MS4yZCAge3YzMCwg
djMxfSwgW3g0XVxuXHQiCisKKyAgICAgICAgOiBbbGVmdE1hdHJpeF0iK3IiKGxlZnRNYXRyaXgp
LCBbcmlnaHRNYXRyaXhdIityIihyaWdodE1hdHJpeCkKKyAgICAgICAgOgorICAgICAgICA6ICJt
ZW1vcnkiLCAieDQiLCAidjAiLCAidjEiLCAidjIiLCAidjMiLCAidjE2IiwgInYxNyIsICJ2MTgi
LCAidjE5IiwgInYyMCIsICJ2MjEiLCAidjIyIiwgInYyMyIsICJ2MjQiLCAidjI1IiwgInYyNiIs
ICJ2MjciLCAidjI4IiwgInYyOSIsICJ2MzAiLCAidjMxIik7CisjZWxpZiBDUFUoQVBQTEVfQVJN
VjdTKQogICAgIGRvdWJsZSogbGVmdE1hdHJpeCA9ICYobV9tYXRyaXhbMF1bMF0pOwogICAgIGNv
bnN0IGRvdWJsZSogcmlnaHRNYXRyaXggPSAmKG1hdC5tX21hdHJpeFswXVswXSk7CiAgICAgYXNt
IHZvbGF0aWxlICgvLyBGaXJzdCByb3cgb2YgbGVmdE1hdHJpeC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAppbmRleCA5MjA5M2QwOTE3YjM0
OWU2MjFhZGYyYmU0YjA4MTQwODE2NmM4MDdjLi41NTQ4ZGUwMzM3Yzg0MmI2Yjc0ZDQ1Nzk2NmU5
ZmNmYmM0ZDg4NTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRXaW4uY3BwCkBAIC05NCw4ICs5NCw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50
CiAgICAgcmV0dXJuIGJlZm9yZVdpZHRoOwogfQogCi12b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBv
dXIgZ2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5
cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC0xMDQsMTEgKzEwMywxMiBAQCB2b2lkIEZvbnQ6OmRy
YXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgRgogCiAgICAgLy8gV2UgY291bGRuJ3QgZ2VuZXJhdGUgYW55IGdseXBocyBmb3Ig
dGhlIHJ1bi4gIEdpdmUgdXAuCiAgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIERyYXcgdGhlIGdseXBoIGJ1
ZmZlciBub3cgYXQgdGhlIHN0YXJ0aW5nIHBvaW50IHJldHVybmVkIGluIHN0YXJ0WC4KICAgICBG
bG9hdFBvaW50IHN0YXJ0UG9pbnQoc3RhcnRYLCBwb2ludC55KCkpOwogICAgIGRyYXdHbHlwaEJ1
ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBzdGFydFBvaW50KTsKKyAgICByZXR1cm4g
c3RhcnRQb2ludC54KCkgLSBzdGFydFg7CiB9CiAKIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
aW50IGZyb20sIGludCB0bykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9Gb250V2luQ0UuY3BwCmluZGV4IGVjMTU0ZThkNDkyNTlkZjNjMmRk
N2M1ZGQzMTZmNDA3MmUxNmNjMTUuLmRmNTg5NzMyMmQ4ZTUwZGYzOTc5MjMwYjgyZWNiMGMyOTA0
NzE4NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
L0ZvbnRXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvRm9udFdpbkNFLmNwcApAQCAtMjA3LDggKzIwNyw3IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVD
b21wb25lbnRzKFRleHRSdW5Db21wb25lbnRzKiBjb21wb25lbnRzLCBjb25zdCBGb250ICZmb250
LCBjCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCB0
bykgY29uc3QKK2Zsb2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgaWYgKHRvIDwgMCkKICAgICAgICAgdG8gPSBydW4u
bGVuZ3RoKCk7CkBAIC0yMTgsNiArMjE3LDcgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEYKICAg
ICBUZXh0UnVuQ29tcG9uZW50cyBjb21wb25lbnRzOwogICAgIGludCB3ID0gZ2VuZXJhdGVDb21w
b25lbnRzKCZjb21wb25lbnRzLCAqdGhpcywgcnVuKTsKIAorICAgIGZsb2F0IHdpZHRoT2ZEcmF3
blRleHQgPSAwOwogICAgIGludCBjdXJQb3MgPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
KGludCljb21wb25lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IFRleHRSdW5Db21w
b25lbnQmIGNvbXAgPSBjb21wb25lbnRzLmF0KGkpOwpAQCAtMjI5LDEyICsyMjksMTMgQEAgdm9p
ZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEYKICAgICAgICAgICAgICAgICBwdC5zZXRYKHBvaW50LngoKSAr
IHcgLSBjb21wLm1fb2Zmc2V0IC0gY29tcC5tX3dpZHRoKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBwdC5zZXRYKHBvaW50LngoKSArIGNvbXAubV9vZmZzZXQpOwotICAgICAg
ICAgICAgZHJhd1NpbXBsZVRleHQoY29udGV4dCwgY29tcC5tX3RleHRSdW4sIHB0LCBmcm9tIC0g
Y3VyUG9zLCBzdGQ6Om1pbih0bywgY3VyRW5kKSAtIGN1clBvcyk7CisgICAgICAgICAgICB3aWR0
aE9mRHJhd25UZXh0ICs9IGRyYXdTaW1wbGVUZXh0KGNvbnRleHQsIGNvbXAubV90ZXh0UnVuLCBw
dCwgZnJvbSAtIGN1clBvcywgc3RkOjptaW4odG8sIGN1ckVuZCkgLSBjdXJQb3MpOwogICAgICAg
ICB9CiAgICAgICAgIGN1clBvcyArPSBsZW47CiAgICAgICAgIGlmIChmcm9tIDwgY3VyUG9zKQog
ICAgICAgICAgICAgZnJvbSA9IGN1clBvczsKICAgICB9CisgICAgcmV0dXJuIHdpZHRoT2ZEcmF3
blRleHQ7CiB9CiAKIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChH
cmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywg
Y29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2lu
dCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db250ZW50RmlsdGVySU9TLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL0NvbnRlbnRGaWx0ZXJJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDhjMjVi
MDBkZTNmZjMwYWVlZDIwZGRiZTE2ODJhMzk1MmJkYzYzMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db250ZW50RmlsdGVySU9TLm1tCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkNvbnRlbnRG
aWx0ZXIuaCIKKworI2lmIFBMQVRGT1JNKElPUykgJiYgVVNFKENPTlRFTlRfRklMVEVSSU5HKQor
CisjaW1wb3J0ICJXZWJDb3JlVGhyZWFkUnVuLmgiCisKKyNpZiBkZWZpbmVkKF9faGFzX2luY2x1
ZGUpICYmIF9faGFzX2luY2x1ZGUoPFdlYkNvbnRlbnRBbmFseXNpcy9XZWJGaWx0ZXJFdmFsdWF0
b3IuaD4pCisjaW1wb3J0IDxXZWJDb250ZW50QW5hbHlzaXMvV2ViRmlsdGVyRXZhbHVhdG9yLmg+
CisjZWxzZQorQGludGVyZmFjZSBOU09iamVjdCAoV2ViRmlsdGVyRXZhbHVhdG9yRGV0YWlscykK
Ky0gKHZvaWQpdW5ibG9ja1dpdGhDb21wbGV0aW9uOih2b2lkICheKShCT09MIHVuYmxvY2tlZCwg
TlNFcnJvciAqZXJyb3IpKWNvbXBsZXRpb247CitAZW5kCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjb25zdCBjaGFyKiBDb250ZW50RmlsdGVyOjpzY2hlbWUoKQoreworICAgIHN0
YXRpYyBjb25zdCBjaGFyIGNvbnRlbnRGaWx0ZXJTY2hlbWVbXSA9ICJ4LWFwcGxlLWNvbnRlbnQt
ZmlsdGVyIjsKKyAgICByZXR1cm4gY29udGVudEZpbHRlclNjaGVtZTsKK30KKyAgICAKK3ZvaWQg
Q29udGVudEZpbHRlcjo6cmVxdWVzdFVuYmxvY2tBbmREaXNwYXRjaElmU3VjY2Vzc2Z1bChGdW5j
dGlvbjx2b2lkKCk+IGZ1bmN0aW9uKQoreworICAgIFttX3BsYXRmb3JtQ29udGVudEZpbHRlciB1
bmJsb2NrV2l0aENvbXBsZXRpb246XihCT09MIHVuYmxvY2tlZCwgTlNFcnJvciAqKSB7CisgICAg
ICAgIGlmICh1bmJsb2NrZWQpIHsKKyAgICAgICAgICAgIFdlYlRocmVhZFJ1biheeworICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH1d
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1Mp
ICYmIFVTRShDT05URU5UX0ZJTFRFUklORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9EZXZpY2VNb3Rpb25DbGllbnRJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9EZXZpY2VNb3Rpb25DbGllbnRJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODU5OTFmMjAwNTI4
ZTVhY2E5ZWU1ZTIwNjI3ZGM5MDk4ZjhhMTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZU1vdGlvbkNsaWVudElPUy5oCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgRGV2aWNlTW90aW9uQ2xpZW50SU9TX2gKKyNkZWZpbmUgRGV2
aWNlTW90aW9uQ2xpZW50SU9TX2gKKworI2luY2x1ZGUgIkRldmljZU1vdGlvbkNsaWVudC5oIgor
I2luY2x1ZGUgIkRldmljZU1vdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEZXZpY2VNb3Rp
b25EYXRhLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKKyNpZmRlZiBfX09CSkNfXworQGNsYXNzIFdlYkNvcmVNb3Rpb25NYW5hZ2VyOwor
I2Vsc2UKK2NsYXNzIFdlYkNvcmVNb3Rpb25NYW5hZ2VyOworI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRGV2aWNlTW90aW9uQ2xpZW50SU9TIDogcHVibGljIERldmljZU1v
dGlvbkNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RGV2aWNlTW90aW9u
Q2xpZW50SU9TPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBE
ZXZpY2VNb3Rpb25DbGllbnRJT1MoKSk7CisgICAgfQorICAgIERldmljZU1vdGlvbkNsaWVudElP
UygpOworICAgIHZpcnR1YWwgfkRldmljZU1vdGlvbkNsaWVudElPUygpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250cm9sbGVyKERldmljZU1vdGlvbkNvbnRyb2xsZXIqKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZygpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIERldmljZU1v
dGlvbkRhdGEqIGxhc3RNb3Rpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGV2aWNlTW90aW9uQ29udHJvbGxlckRlc3Ryb3llZCgpIE9WRVJSSURFOworCisgICAgdm9pZCBt
b3Rpb25DaGFuZ2VkKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3Vi
bGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOworCitwcml2YXRlOgorICAgIFdlYkNvcmVNb3Rp
b25NYW5hZ2VyKiBtX21vdGlvbk1hbmFnZXI7CisgICAgRGV2aWNlTW90aW9uQ29udHJvbGxlciog
bV9jb250cm9sbGVyOworICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhPiBtX2N1cnJlbnREZXZp
Y2VNb3Rpb25EYXRhOworICAgIGJvb2wgbV91cGRhdGluZzsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIERldmljZU1vdGlvbkNsaWVudElPU19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlTW90aW9uQ2xpZW50SU9TLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZU1vdGlvbkNsaWVudElPUy5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44MmNlOTFhYjNkNjRkOTExMjg4MzFiNTJkMTg3YzRmNjk3NWFjMjhjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZU1vdGlvbkNsaWVu
dElPUy5tbQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2ltcG9ydCAiRGV2aWNlTW90
aW9uQ2xpZW50SU9TLmgiCisKKyNpbXBvcnQgIldlYkNvcmVNb3Rpb25NYW5hZ2VyLmgiCisKKyNp
ZiBQTEFURk9STShJT1MpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRGV2aWNlTW90aW9uQ2xp
ZW50SU9TOjpEZXZpY2VNb3Rpb25DbGllbnRJT1MoKQorICAgIDogRGV2aWNlTW90aW9uQ2xpZW50
KCkKKyAgICAsIG1fbW90aW9uTWFuYWdlcihudWxscHRyKQorICAgICwgbV91cGRhdGluZygwKQor
eworfQorCitEZXZpY2VNb3Rpb25DbGllbnRJT1M6On5EZXZpY2VNb3Rpb25DbGllbnRJT1MoKQor
eworfQorCit2b2lkIERldmljZU1vdGlvbkNsaWVudElPUzo6c2V0Q29udHJvbGxlcihEZXZpY2VN
b3Rpb25Db250cm9sbGVyKiBjb250cm9sbGVyKQoreworICAgIG1fY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7Cit9CisKK3ZvaWQgRGV2aWNlTW90aW9uQ2xpZW50SU9TOjpzdGFydFVwZGF0aW5nKCkK
K3sKKyAgICBtX3VwZGF0aW5nID0gdHJ1ZTsKKworICAgIGlmICghbV9tb3Rpb25NYW5hZ2VyKQor
ICAgICAgICBtX21vdGlvbk1hbmFnZXIgPSBbV2ViQ29yZU1vdGlvbk1hbmFnZXIgc2hhcmVkTWFu
YWdlcl07CisKKyAgICBbbV9tb3Rpb25NYW5hZ2VyIGFkZE1vdGlvbkNsaWVudDp0aGlzXTsKK30K
Kwordm9pZCBEZXZpY2VNb3Rpb25DbGllbnRJT1M6OnN0b3BVcGRhdGluZygpCit7CisgICAgbV91
cGRhdGluZyA9IGZhbHNlOworCisgICAgLy8gUmVtb3ZlIG91cnNlbHZlcyBhcyB0aGUgbW90aW9u
IGNsaWVudCBzbyB3ZSB3b24ndCBnZXQgdXBkYXRlcy4KKyAgICBbbV9tb3Rpb25NYW5hZ2VyIHJl
bW92ZU1vdGlvbkNsaWVudDp0aGlzXTsKK30KKworRGV2aWNlTW90aW9uRGF0YSogRGV2aWNlTW90
aW9uQ2xpZW50SU9TOjpsYXN0TW90aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jdXJyZW50
RGV2aWNlTW90aW9uRGF0YS5nZXQoKTsKK30KKwordm9pZCBEZXZpY2VNb3Rpb25DbGllbnRJT1M6
OmRldmljZU1vdGlvbkNvbnRyb2xsZXJEZXN0cm95ZWQoKQoreworICAgIFttX21vdGlvbk1hbmFn
ZXIgcmVtb3ZlTW90aW9uQ2xpZW50OnRoaXNdOworfQorCit2b2lkIERldmljZU1vdGlvbkNsaWVu
dElPUzo6bW90aW9uQ2hhbmdlZChkb3VibGUgeEFjY2VsZXJhdGlvbiwgZG91YmxlIHlBY2NlbGVy
YXRpb24sIGRvdWJsZSB6QWNjZWxlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIHhBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCBk
b3VibGUgeUFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIGRvdWJsZSB6QWNjZWxlcmF0aW9u
SW5jbHVkaW5nR3Jhdml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSB4Um90YXRpb25SYXRlLCBkb3VibGUgeVJvdGF0aW9uUmF0ZSwgZG91Ymxl
IHpSb3RhdGlvblJhdGUpCit7CisgICAgaWYgKCFtX3VwZGF0aW5nKQorICAgICAgICByZXR1cm47
CisKKyNpZiBQTEFURk9STShJT1NfU0lNVUxBVE9SKQorICAgIFVOVVNFRF9QQVJBTSh4QWNjZWxl
cmF0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oeUFjY2VsZXJhdGlvbik7CisgICAgVU5VU0VEX1BB
UkFNKHpBY2NlbGVyYXRpb24pOworICAgIFVOVVNFRF9QQVJBTSh4QWNjZWxlcmF0aW9uSW5jbHVk
aW5nR3Jhdml0eSk7CisgICAgVU5VU0VEX1BBUkFNKHlBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2
aXR5KTsKKyAgICBVTlVTRURfUEFSQU0oekFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkpOwor
ICAgIFVOVVNFRF9QQVJBTSh4Um90YXRpb25SYXRlKTsKKyAgICBVTlVTRURfUEFSQU0oeVJvdGF0
aW9uUmF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHpSb3RhdGlvblJhdGUpOworCisgICAgUmVmUHRy
PERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jh
dml0eSA9IERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbjo6Y3JlYXRlKGZhbHNlLCAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
YWxzZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFsc2UsIDApOworICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVy
YXRpb24+IGFjY2VsZXJhdGlvbiA9IERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbjo6Y3Jl
YXRlKGZhbHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZh
bHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAw
KTsKKyAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6Um90YXRpb25SYXRlPiByb3RhdGlvblJh
dGUgPSBEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlvblJhdGU6OmNyZWF0ZShmYWxzZSwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMCk7CisjZWxzZQorICAgIFJl
ZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+IGFjY2VsZXJhdGlvbkluY2x1ZGlu
Z0dyYXZpdHkgPSBEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb246OmNyZWF0ZSh0cnVlLCB4
QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgeUFjY2VsZXJhdGlvbkluY2x1ZGlu
Z0dyYXZpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRydWUsIHpBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5KTsKKyAgICBSZWZQ
dHI8RGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmF0aW9uPiBhY2NlbGVyYXRpb24gPSAwOworICAg
IFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlvblJhdGU+IHJvdGF0aW9uUmF0ZSA9IDA7
CisgICAgaWYgKFttX21vdGlvbk1hbmFnZXIgZ3lyb0F2YWlsYWJsZV0pIHsKKyAgICAgICAgYWNj
ZWxlcmF0aW9uID0gRGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmF0aW9uOjpjcmVhdGUodHJ1ZSwg
eEFjY2VsZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgeUFjY2VsZXJhdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgekFj
Y2VsZXJhdGlvbik7CisgICAgICAgIHJvdGF0aW9uUmF0ZSA9IERldmljZU1vdGlvbkRhdGE6OlJv
dGF0aW9uUmF0ZTo6Y3JlYXRlKHRydWUsIHhSb3RhdGlvblJhdGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIHlSb3Rh
dGlvblJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRydWUsIHpSb3RhdGlvblJhdGUpOworICAgIH0KKyNlbmRpZiAvLyBQ
TEFURk9STShJT1NfU0lNVUxBVE9SKQorCisgICAgbV9jdXJyZW50RGV2aWNlTW90aW9uRGF0YSA9
IERldmljZU1vdGlvbkRhdGE6OmNyZWF0ZShhY2NlbGVyYXRpb24sIGFjY2VsZXJhdGlvbkluY2x1
ZGluZ0dyYXZpdHksIHJvdGF0aW9uUmF0ZSwgdHJ1ZSwga01vdGlvblVwZGF0ZUludGVydmFsKTsK
KyAgICBtX2NvbnRyb2xsZXItPmRpZENoYW5nZURldmljZU1vdGlvbihtX2N1cnJlbnREZXZpY2VN
b3Rpb25EYXRhLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YmU3ZjUxZTI4MzM4
ODIyNzI5ZjM1OGQ5ZDBmNjMwZDYxYTFjMWZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL0RldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmgKQEAgLTAsMCAr
MSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPU19oCisj
ZGVmaW5lIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TX2gKKworI2luY2x1ZGUgIkRldmljZU9y
aWVudGF0aW9uQ2xpZW50LmgiCisjaW5jbHVkZSAiRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVy
LmgiCisjaW5jbHVkZSAiRGV2aWNlT3JpZW50YXRpb25EYXRhLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZmRlZiBfX09CSkNfXwor
QGNsYXNzIFdlYkNvcmVNb3Rpb25NYW5hZ2VyOworI2Vsc2UKK2NsYXNzIFdlYkNvcmVNb3Rpb25N
YW5hZ2VyOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGV2aWNlT3Jp
ZW50YXRpb25DbGllbnRJT1MgOiBwdWJsaWMgRGV2aWNlT3JpZW50YXRpb25DbGllbnQgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TPiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZXZpY2VPcmllbnRh
dGlvbkNsaWVudElPUygpKTsKKyAgICB9CisgICAgRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1Mo
KTsKKyAgICB2aXJ0dWFsIH5EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUygpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250cm9sbGVyKERldmljZU9yaWVudGF0aW9uQ29udHJvbGxl
ciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
RGV2aWNlT3JpZW50YXRpb25EYXRhKiBsYXN0T3JpZW50YXRpb24oKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyRGVzdHJveWVkKCkg
T1ZFUlJJREU7CisKKyAgICB2b2lkIG9yaWVudGF0aW9uQ2hhbmdlZChkb3VibGUsIGRvdWJsZSwg
ZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CisKK3ByaXZhdGU6CisgICAgV2ViQ29yZU1vdGlvbk1h
bmFnZXIqIG1fbW90aW9uTWFuYWdlcjsKKyAgICBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIq
IG1fY29udHJvbGxlcjsKKyAgICBSZWZQdHI8RGV2aWNlT3JpZW50YXRpb25EYXRhPiBtX2N1cnJl
bnREZXZpY2VPcmllbnRhdGlvbjsKKyAgICBib29sIG1fdXBkYXRpbmc7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPU19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlT3JpZW50YXRp
b25DbGllbnRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRGV2aWNlT3JpZW50
YXRpb25DbGllbnRJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjE2YTU2NmMyODJhY2ExYWRhZDg0ZmFkZjQ3
OWY1OGQwOTgxYzU4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9EZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5tbQpAQCAtMCwwICsxLDEwOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKworI2ltcG9ydCAiRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCIKKworI2ltcG9y
dCAiV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUzo6RGV2aWNlT3JpZW50
YXRpb25DbGllbnRJT1MoKQorICAgIDogRGV2aWNlT3JpZW50YXRpb25DbGllbnQoKQorICAgICwg
bV9tb3Rpb25NYW5hZ2VyKG51bGxwdHIpCisgICAgLCBtX3VwZGF0aW5nKDApCit7Cit9CisKK0Rl
dmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjp+RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MoKQor
eworfQorCit2b2lkIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpzZXRDb250cm9sbGVyKERl
dmljZU9yaWVudGF0aW9uQ29udHJvbGxlciogY29udHJvbGxlcikKK3sKKyAgICBtX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOworfQorCit2b2lkIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpz
dGFydFVwZGF0aW5nKCkKK3sKKyAgICBtX3VwZGF0aW5nID0gdHJ1ZTsKKworICAgIGlmICghbV9t
b3Rpb25NYW5hZ2VyKQorICAgICAgICBtX21vdGlvbk1hbmFnZXIgPSBbV2ViQ29yZU1vdGlvbk1h
bmFnZXIgc2hhcmVkTWFuYWdlcl07CisKKyAgICBbbV9tb3Rpb25NYW5hZ2VyIGFkZE9yaWVudGF0
aW9uQ2xpZW50OnRoaXNdOworfQorCit2b2lkIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TOjpz
dG9wVXBkYXRpbmcoKQoreworICAgIG1fdXBkYXRpbmcgPSBmYWxzZTsKKworICAgIC8vIFJlbW92
ZSBvdXJzZWx2ZXMgYXMgdGhlIG9yaWVudGF0aW9uIGNsaWVudCBzbyB3ZSB3b24ndCBnZXQgdXBk
YXRlcy4KKyAgICBbbV9tb3Rpb25NYW5hZ2VyIHJlbW92ZU9yaWVudGF0aW9uQ2xpZW50OnRoaXNd
OworfQorCitEZXZpY2VPcmllbnRhdGlvbkRhdGEqIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9T
OjpsYXN0T3JpZW50YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2N1cnJlbnREZXZpY2VP
cmllbnRhdGlvbi5nZXQoKTsKK30KKwordm9pZCBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUzo6
ZGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyRGVzdHJveWVkKCkKK3sKKyAgICBbbV9tb3Rpb25N
YW5hZ2VyIHJlbW92ZU9yaWVudGF0aW9uQ2xpZW50OnRoaXNdOworfQorICAgIAordm9pZCBEZXZp
Y2VPcmllbnRhdGlvbkNsaWVudElPUzo6b3JpZW50YXRpb25DaGFuZ2VkKGRvdWJsZSBhbHBoYSwg
ZG91YmxlIGJldGEsIGRvdWJsZSBnYW1tYSwgZG91YmxlIGNvbXBhc3NIZWFkaW5nLCBkb3VibGUg
Y29tcGFzc0FjY3VyYWN5KQoreworICAgIGlmICghbV91cGRhdGluZykKKyAgICAgICAgcmV0dXJu
OworCisjaWYgUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKKyAgICBVTlVTRURfUEFSQU0oYWxwaGEp
OworICAgIFVOVVNFRF9QQVJBTShiZXRhKTsKKyAgICBVTlVTRURfUEFSQU0oZ2FtbWEpOworICAg
IFVOVVNFRF9QQVJBTShjb21wYXNzSGVhZGluZyk7CisgICAgVU5VU0VEX1BBUkFNKGNvbXBhc3NB
Y2N1cmFjeSk7CisgICAgbV9jdXJyZW50RGV2aWNlT3JpZW50YXRpb24gPSBEZXZpY2VPcmllbnRh
dGlvbkRhdGE6OmNyZWF0ZShmYWxzZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
YWxzZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmFsc2UsIDApOworI2Vsc2UKKyAgICBtX2N1cnJlbnREZXZpY2VPcmllbnRh
dGlvbiA9IERldmljZU9yaWVudGF0aW9uRGF0YTo6Y3JlYXRlKHRydWUsIGFscGhhLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVl
LCBiZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cnVlLCBnYW1tYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgY29tcGFzc0hlYWRpbmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUs
IGNvbXBhc3NBY2N1cmFjeSk7CisjZW5kaWYKKyAgICBtX2NvbnRyb2xsZXItPmRpZENoYW5nZURl
dmljZU9yaWVudGF0aW9uKG1fY3VycmVudERldmljZU9yaWVudGF0aW9uLmdldCgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0tleUV2ZW50SU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL0tleUV2ZW50SU9TLm1tCmluZGV4IDgyNGFiN2YxYmNiMDQ2
MDBhOTQ2MGJmMGUzOTIwMTE2NWM0NWE1ZjQuLjM5MWI2YWE5OTMwYjFiYTRkMjA1MDBkN2ZhNzc2
ZDBkNTI3NmNlODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9LZXlF
dmVudElPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvS2V5RXZlbnRJT1Mu
bW0KQEAgLTI4LDU5ICsyOCwxMiBAQAogCiAjaWYgUExBVEZPUk0oSU9TKQogCi0jaW1wb3J0ICJL
ZXlFdmVudENvY29hLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJOb3RJbXBsZW1l
bnRlZC5oIgotI2ltcG9ydCAiV2ViRXZlbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JLZXlF
dmVudChXZWJFdmVudCAqZXZlbnQpCi17Ci0gICAgTlNTdHJpbmcgKnMgPSBldmVudC5jaGFyYWN0
ZXJzSWdub3JpbmdNb2RpZmllcnM7Ci0gICAgaWYgKFtzIGxlbmd0aF0gIT0gMSkgewotICAgICAg
ICBMT0coRXZlbnRzLCAicmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBudW1iZXIgb2YgY2hhcmFjdGVy
cyBpbiBrZXkgZXZlbnQ6ICV1IiwgW3MgbGVuZ3RoXSk7Ci0gICAgICAgIHJldHVybiAiVW5pZGVu
dGlmaWVkIjsKLSAgICB9Ci0KLSAgICB1bmljaGFyIGMgPSBDRlN0cmluZ0dldENoYXJhY3RlckF0
SW5kZXgoKENGU3RyaW5nUmVmKXMsIDApOwotICAgIHJldHVybiBrZXlJZGVudGlmaWVyRm9yQ2hh
ckNvZGUoYyk7Ci19Ci0KLVBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2
ZW50KFdlYkV2ZW50ICpldmVudCkKLSAgICA6IFBsYXRmb3JtRXZlbnQoZXZlbnQudHlwZSA9PSBX
ZWJFdmVudEtleVVwID8gUGxhdGZvcm1FdmVudDo6S2V5VXAgOiBQbGF0Zm9ybUV2ZW50OjpLZXlE
b3duLCBldmVudC5tb2RpZmllckZsYWdzICYgV2ViRXZlbnRGbGFnTWFza1NoaWZ0LCBldmVudC5t
b2RpZmllckZsYWdzICYgV2ViRXZlbnRGbGFnTWFza0NvbnRyb2wsIGV2ZW50Lm1vZGlmaWVyRmxh
Z3MgJiBXZWJFdmVudEZsYWdNYXNrQWx0ZXJuYXRlLCBldmVudC5tb2RpZmllckZsYWdzICYgV2Vi
RXZlbnRGbGFnTWFza0NvbW1hbmQpCi0gICAgLCBtX3RleHQoZXZlbnQuY2hhcmFjdGVycykKLSAg
ICAsIG1fdW5tb2RpZmllZFRleHQoZXZlbnQuY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzKQot
ICAgICwgbV9rZXlJZGVudGlmaWVyKGtleUlkZW50aWZpZXJGb3JLZXlFdmVudChldmVudCkpCi0g
ICAgLCBtX2F1dG9SZXBlYXQoZXZlbnQuaXNLZXlSZXBlYXRpbmcpCi0gICAgLCBtX3dpbmRvd3NW
aXJ0dWFsS2V5Q29kZShldmVudC5rZXlDb2RlKQotICAgICwgbV9pc0tleXBhZChmYWxzZSkgLy8g
aVBob25lIGRvZXMgbm90IGRpc3Rpbmd1aXNoIHRoZSBudW1wYWQgPHJkYXI6Ly9wcm9ibGVtLzcx
OTA4MzU+Ci0gICAgLCBtX0V2ZW50KGV2ZW50KQotewotICAgIEFTU0VSVChldmVudC50eXBlID09
IFdlYkV2ZW50S2V5RG93biB8fCBldmVudC50eXBlID09IFdlYkV2ZW50S2V5VXApOwotCi0gICAg
Ly8gQWx3YXlzIHVzZSAxMyBmb3IgRW50ZXIvUmV0dXJuIC0tIHdlIGRvbid0IHdhbnQgdG8gdXNl
IEFwcEtpdCdzIGRpZmZlcmVudCBjaGFyYWN0ZXIgZm9yIEVudGVyLgotICAgIGlmIChtX3dpbmRv
d3NWaXJ0dWFsS2V5Q29kZSA9PSAnXHInKSB7Ci0gICAgICAgIG1fdGV4dCA9ICJcciI7Ci0gICAg
ICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHIiOwotICAgIH0KLQotICAgIC8vIFRoZSBhZGp1c3Rt
ZW50cyBiZWxvdyBhcmUgb25seSBuZWVkZWQgaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSBtb2Rl
LCBidXQgd2UgY2Fubm90IHRlbGwgd2hhdCBtb2RlIHdlIGFyZSBpbiBmcm9tIGhlcmUuCi0KLSAg
ICAvLyBUdXJuIDB4N0YgaW50byA4LCBiZWNhdXNlIGJhY2tzcGFjZSBuZWVkcyB0byBhbHdheXMg
YmUgOC4KLSAgICBpZiAobV90ZXh0ID09ICJceDdGIikKLSAgICAgICAgbV90ZXh0ID0gIlx4OCI7
Ci0gICAgaWYgKG1fdW5tb2RpZmllZFRleHQgPT0gIlx4N0YiKQotICAgICAgICBtX3VubW9kaWZp
ZWRUZXh0ID0gIlx4OCI7Ci0gICAgLy8gQWx3YXlzIHVzZSA5IGZvciB0YWIgLS0gd2UgZG9uJ3Qg
d2FudCB0byB1c2UgQXBwS2l0J3MgZGlmZmVyZW50IGNoYXJhY3RlciBmb3Igc2hpZnQtdGFiLgot
ICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9PSA5KSB7Ci0gICAgICAgIG1fdGV4dCA9
ICJceDkiOwotICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gIlx4OSI7Ci0gICAgfQotfQotCiB2
b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFR5cGUg
dHlwZSwgYm9vbCBiYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKQogewogICAgIC8vIENhbiBvbmx5
IGNoYW5nZSB0eXBlIGZyb20gS2V5RG93biB0byBSYXdLZXlEb3duIG9yIENoYXIsIGFzIHdlIGxh
Y2sgaW5mb3JtYXRpb24gZm9yIG90aGVyIGNvbnZlcnNpb25zLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL01JTUVUeXBlUmVnaXN0cnlJT1MubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvTUlNRVR5cGVSZWdpc3RyeUlPUy5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZjQ4
NWEyMGQ3YzFjNzI1OGFhYTVhMTI1YjZjMjY5ZjljY2U1ZmMwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL01JTUVUeXBlUmVnaXN0cnlJT1MubW0KQEAgLTAs
MCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIAoreworU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6
OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyAmZXh0KQoreworICAgIHJldHVy
biB3a0dldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dCk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IE1J
TUVUeXBlUmVnaXN0cnk6OmdldEV4dGVuc2lvbnNGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIC8q
dHlwZSovKQoreworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCitTdHJpbmcgTUlN
RVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJiAvKnR5cGUqLykKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgTUlNRVR5
cGVSZWdpc3RyeTo6aXNBcHBsaWNhdGlvblBsdWdpbk1JTUVUeXBlKGNvbnN0IFN0cmluZyYpCit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL01lbW9yeVByZXNzdXJlSGFuZGxlcklP
Uy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43YjQ0ZjIzYjNlNTFjZTFmN2E4ZWM5MzRhNzE3M2Q0YTRkOTVjY2Mw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL01lbW9yeVBy
ZXNzdXJlSGFuZGxlcklPUy5tbQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
TWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQg
IlN5c3RlbU1lbW9yeS5oIgorI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgorI2ltcG9ydCA8bGli
a2Vybi9PU0F0b21pYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIHJl
c3BvbmRUb01lbW9yeVByZXNzdXJlQ2FsbGJhY2soQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYgb2JzZXJ2
ZXIsIENGUnVuTG9vcEFjdGl2aXR5IC8qYWN0aXZpdHkqLywgdm9pZCogLyppbmZvKi8pCit7Cisg
ICAgbWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkucmVzcG9uZFRvTWVtb3J5UHJlc3N1cmVJZk5lZWRl
ZCgpOworICAgIENGUnVuTG9vcE9ic2VydmVySW52YWxpZGF0ZShvYnNlcnZlcik7CisgICAgQ0ZS
ZWxlYXNlKG9ic2VydmVyKTsKK30KKwordm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6Omluc3Rh
bGxNZW1vcnlSZWxlYXNlQmxvY2sodm9pZCAoXnJlbGVhc2VNZW1vcnlCbG9jaykoKSwgYm9vbCBj
bGVhclByZXNzdXJlT25NZW1vcnlSZWxlYXNlKQoreworICAgIGlmIChtX2luc3RhbGxlZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fcmVsZWFzZU1lbW9yeUJsb2NrID0gQmxvY2tfY29weShyZWxl
YXNlTWVtb3J5QmxvY2spOworICAgIG1fY2xlYXJQcmVzc3VyZU9uTWVtb3J5UmVsZWFzZSA9IGNs
ZWFyUHJlc3N1cmVPbk1lbW9yeVJlbGVhc2U7CisgICAgbV9pbnN0YWxsZWQgPSB0cnVlOworfQor
Cit2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6c2V0UmVjZWl2ZWRNZW1vcnlQcmVzc3VyZShN
ZW1vcnlQcmVzc3VyZVJlYXNvbiByZWFzb24pCit7CisgICAgT1NBdG9taWNUZXN0QW5kU2V0KDAs
ICZtX3JlY2VpdmVkTWVtb3J5UHJlc3N1cmUpOworCisgICAgeworICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9vYnNlcnZlck11dGV4KTsKKyAgICAgICAgaWYgKCFtX29ic2VydmVyKSB7Cisg
ICAgICAgICAgICBtX29ic2VydmVyID0gQ0ZSdW5Mb29wT2JzZXJ2ZXJDcmVhdGUoTlVMTCwga0NG
UnVuTG9vcEJlZm9yZVdhaXRpbmcgfCBrQ0ZSdW5Mb29wRXhpdCwgTk8gLyogZG9uJ3QgcmVwZWF0
ICovLAorICAgICAgICAgICAgICAgIDAsIFdlYkNvcmU6OnJlc3BvbmRUb01lbW9yeVByZXNzdXJl
Q2FsbGJhY2ssIE5VTEwpOworICAgICAgICAgICAgQ0ZSdW5Mb29wQWRkT2JzZXJ2ZXIoV2ViVGhy
ZWFkUnVuTG9vcCgpLCBtX29ic2VydmVyLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworICAgICAg
ICAgICAgQ0ZSdW5Mb29wV2FrZVVwKFdlYlRocmVhZFJ1bkxvb3AoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgbV9tZW1vcnlQcmVzc3VyZVJlYXNvbiB8PSByZWFzb247CisgICAgfQorfQorCitib29s
IE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6aGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3VyZSgpCit7Cisg
ICAgcmV0dXJuIE9TQXRvbWljT3IzMigwLCAmbV9yZWNlaXZlZE1lbW9yeVByZXNzdXJlKTsKK30K
Kwordm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OmNsZWFyTWVtb3J5UHJlc3N1cmUoKQorewor
ICAgIE9TQXRvbWljVGVzdEFuZENsZWFyKDAsICZtX3JlY2VpdmVkTWVtb3J5UHJlc3N1cmUpOwor
CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9vYnNlcnZlck11dGV4KTsKKyAg
ICAgICAgbV9tZW1vcnlQcmVzc3VyZVJlYXNvbiA9IE1lbW9yeVByZXNzdXJlUmVhc29uTm9uZTsK
KyAgICB9Cit9CisKK2Jvb2wgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzaG91bGRXYWl0Rm9yTWVt
b3J5Q2xlYXJNZXNzYWdlKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9vYnNlcnZlck11
dGV4KTsKKyAgICByZXR1cm4gbV9tZW1vcnlQcmVzc3VyZVJlYXNvbiAmIE1lbW9yeVByZXNzdXJl
UmVhc29uVk1TdGF0dXM7Cit9CisKK3ZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpyZXNwb25k
VG9NZW1vcnlQcmVzc3VyZUlmTmVlZGVkKCkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2Nr
ZWRPckRpc2FibGVkKCkpOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9v
YnNlcnZlck11dGV4KTsKKyAgICAgICAgbV9vYnNlcnZlciA9IDA7CisgICAgfQorCisgICAgaWYg
KGhhc1JlY2VpdmVkTWVtb3J5UHJlc3N1cmUoKSkgeworICAgICAgICBBU1NFUlQobV9yZWxlYXNl
TWVtb3J5QmxvY2spOworICAgICAgICBMT0coTWVtb3J5UHJlc3N1cmUsICJIYW5kbGUgbWVtb3J5
IHByZXNzdXJlIGF0ICVzIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICAgICAgIG1fcmVsZWFz
ZU1lbW9yeUJsb2NrKCk7CisgICAgICAgIGlmIChtX2NsZWFyUHJlc3N1cmVPbk1lbW9yeVJlbGVh
c2UpCisgICAgICAgICAgICBjbGVhck1lbW9yeVByZXNzdXJlKCk7CisgICAgfQorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvUGFzdGVib2FyZElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJv
YXJkSU9TLm1tCmluZGV4IDg3YjU1MTc5MWFkMWNkM2I4MTQ3NWU0ODEzZTIxNGY4YWE3MTdlOGQu
LmYyNTkyNzU4YmFlMTc5M2U1MWMxMjU1ZjNkMjAyZjY1YjYxZWY3NjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCkBAIC0zNSwyMCArMzUsMjQgQEAK
ICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlci5oIgogI2ltcG9ydCAiRnJh
bWVMb2FkZXJDbGllbnQuaCIKKyNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKICNpbXBvcnQgIkhU
TUxFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MTmFtZXMuaCIKICNpbXBvcnQgIkhUTUxQYXJzZXJJ
ZGlvbXMuaCIKLSNpbXBvcnQgIlVSTC5oIgorI2ltcG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIkxl
Z2FjeVdlYkFyY2hpdmUuaCIKICNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmRT
dHJhdGVneS5oIgogI2ltcG9ydCAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW1wb3J0ICJSZW5k
ZXJJbWFnZS5oIgorI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgiCisjaW1w
b3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCiAjaW1wb3J0ICJU
ZXh0LmgiCisjaW1wb3J0ICJVUkwuaCIKKyNpbXBvcnQgIldlYk5TQXR0cmlidXRlZFN0cmluZ0V4
dHJhcy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKICNpbXBvcnQgIm1hcmt1cC5oIgotI2lt
cG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgiCiAjaW1wb3J0IDxNb2JpbGVDb3Jl
U2VydmljZXMvTW9iaWxlQ29yZVNlcnZpY2VzLmg+CiAKIEBpbnRlcmZhY2UgTlNBdHRyaWJ1dGVk
U3RyaW5nIChOU0F0dHJpYnV0ZWRTdHJpbmdLaXRBZGRpdGlvbnMpCkBAIC0xMjYsOTcgKzEzMCwy
NCBAQCBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IFBhc3RlYm9hcmQ6OmNyZWF0ZVByaXZhdGUoKQog
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFzdGVib2FyZCk7CiB9CiAKLXZvaWQgUGFzdGVib2Fy
ZDo6c2V0RnJhbWUoRnJhbWUqIGZyYW1lKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQ
YXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkKIHsKLSAgICBtX2ZyYW1lID0gZnJhbWU7Ci0g
ICAgbV9jaGFuZ2VDb3VudCA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5wYXN0ZWJvYXJk
Q2hhbmdlQ291bnQoKTsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJkKGNvbnRlbnQpOwogfQogCi12b2lkIFBhc3RlYm9hcmQ6
OndyaXRlU2VsZWN0aW9uKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBib29sIC8qY2FuU21hcnRDb3B5
T3JEZWxldGUqLywgRnJhbWUgKmZyYW1lLCBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JD
bGlwYm9hcmQgc2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKQorU3RyaW5n
IFBhc3RlYm9hcmQ6OnJlc291cmNlTUlNRVR5cGUoY29uc3QgTlNTdHJpbmcgKm1pbWVUeXBlKQog
ewotICAgIEFTU0VSVChzZWxlY3RlZFJhbmdlKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAg
Ly8gSWYgdGhlIHNlbGVjdGlvbiBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGNvbnRlbnQgaW5zaWRl
IGFuIGFuY2hvciB0YWcKLSAgICAvLyB3ZSBtb3ZlIHRoZSBzZWxlY3Rpb24gc3RhcnQgdG8gaW5j
bHVkZSB0aGUgYW5jaG9yLgotICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgTm9kZSogY29tbW9u
QW5jZXN0b3IgPSBzZWxlY3RlZFJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcihlYyk7Ci0g
ICAgQVNTRVJUKGNvbW1vbkFuY2VzdG9yKTsKLSAgICBOb2RlKiBlbmNsb3NpbmdBbmNob3IgPSBl
bmNsb3NpbmdOb2RlV2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbW1vbkFuY2VzdG9yKSwg
SFRNTE5hbWVzOjphVGFnKTsKLSAgICBpZiAoZW5jbG9zaW5nQW5jaG9yICYmIGNvbXBhcmVQb3Np
dGlvbnMoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKS5hbmNob3JOb2RlKCkpLCBzZWxlY3RlZFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpID49
IDApCi0gICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNldFN0YXJ0KGVuY2xvc2luZ0FuY2hvciwgMCwg
ZWMpOwotCi0gICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRv
cHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLQotICAgIC8vIFB1dCBX
ZWJBcmNoaXZlIG9uIHRoZSBwYXN0ZWJvYXJkLgotICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZl
PiBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbihmcmFtZSk7
Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IGFyY2hpdmUgPyBhcmNoaXZlLT5yYXdE
YXRhUmVwcmVzZW50YXRpb24oKSA6IDA7Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIFtyZXByZXNl
bnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6KE5TRGF0YSAqKWRhdGEuZ2V0KCkgZm9yS2V5OldlYkFy
Y2hpdmVQYm9hcmRUeXBlXTsKLQotICAgIFJldGFpblB0cjxOU0hUTUxSZWFkZXI+IGNvbnZlcnRl
ciA9IGFkb3B0TlMoW1tnZXROU0hUTUxSZWFkZXJDbGFzcygpIGFsbG9jXSBpbml0V2l0aERPTVJh
bmdlOmtpdChzZWxlY3RlZFJhbmdlKV0pOwotICAgIGlmIChjb252ZXJ0ZXIpIHsKLSAgICAgICAg
TlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gW2NvbnZlcnRlci5nZXQoKSBh
dHRyaWJ1dGVkU3RyaW5nXTsKLSAgICAgICAgTlNEYXRhKiBSVEZERGF0YSA9IFthdHRyaWJ1dGVk
U3RyaW5nIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVu
Z3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07Ci0gICAgICAgIGlmIChSVEZERGF0YSkKLSAg
ICAgICAgICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6UlRGRERhdGEgZm9yS2V5
OihOU1N0cmluZyAqKWtVVFR5cGVSVEZEXTsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVkU3RyaW5n
IGNvbnRhaW5zQXR0YWNobWVudHNdKQotICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGF0
dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1lbnRDaGFyYWN0ZXJzKGF0dHJpYnV0ZWRT
dHJpbmcpOwotICAgICAgICBOU0RhdGEqIFJURkRhdGEgPSBbYXR0cmlidXRlZFN0cmluZyBSVEZG
cm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgZG9jdW1l
bnRBdHRyaWJ1dGVzOm5pbF07Ci0gICAgICAgIGlmIChSVEZEYXRhKQotICAgICAgICAgICAgW3Jl
cHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTpSVEZEYXRhIGZvcktleTooTlNTdHJpbmcgKilr
VVRUeXBlUlRGXTsKLSAgICB9Ci0KLSAgICAvLyBQdXQgcGxhaW4gc3RyaW5nIG9uIHRoZSBwYXN0
ZWJvYXJkLgotICAgIFN0cmluZyB0ZXh0ID0gc2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9y
Q2xpcGJvYXJkID09IEluY2x1ZGVJbWFnZUFsdFRleHRGb3JDbGlwYm9hcmQKLSAgICAgICAgPyBm
cmFtZS0+ZWRpdG9yKCkuc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCkgOiBmcmFtZS0+ZWRpdG9y
KCkuc2VsZWN0ZWRUZXh0KCk7Ci0gICAgdGV4dC5yZXBsYWNlKG5vQnJlYWtTcGFjZSwgJyAnKTsK
LSAgICBbcmVwcmVzZW50YXRpb25zLmdldCgpIHNldFZhbHVlOnRleHQgZm9yS2V5OihOU1N0cmlu
ZyAqKWtVVFR5cGVUZXh0XTsKLQotICAgIGZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+d3JpdGVE
YXRhVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9ucy5nZXQoKSk7CisgICAgcmV0dXJuIFN0cmlu
ZyhhZG9wdENGKFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50aWZpZXJGb3JUYWcoa1VUVGFnQ2xh
c3NNSU1FVHlwZSwgKENGU3RyaW5nUmVmKW1pbWVUeXBlLCBOVUxMKSkuZ2V0KCkpOwogfQogCi12
b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgRnJhbWUg
KmZyYW1lKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkSW1hZ2UmIHBh
c3RlYm9hcmRJbWFnZSkKIHsKLSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgUmV0YWluUHRyPE5T
RGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25h
cnkgYWxsb2NdIGluaXRdKTsKLSAgICBbcmVwcmVzZW50YXRpb25zLmdldCgpIHNldFZhbHVlOnRl
eHQgZm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVUZXh0XTsKLSAgICBmcmFtZS0+ZWRpdG9yKCku
Y2xpZW50KCktPndyaXRlRGF0YVRvUGFzdGVib2FyZChyZXByZXNlbnRhdGlvbnMuZ2V0KCkpOwot
fQotCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgRnJhbWUqIGZyYW1l
KQotewotICAgIEFTU0VSVChub2RlKTsKLQotICAgIGlmICghKG5vZGUtPnJlbmRlcmVyKCkgJiYg
bm9kZS0+cmVuZGVyZXIoKS0+aXNJbWFnZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVu
ZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShub2RlLT5yZW5kZXJlcigpKTsKLSAg
ICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSByZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKTsKLSAg
ICBpZiAoIWNhY2hlZEltYWdlIHx8IGNhY2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZUZvclJl
bmRlcmVyKHJlbmRlcmVyKTsKLSAgICBBU1NFUlQoaW1hZ2UpOwotCi0gICAgUmV0YWluUHRyPE5T
RGF0YT4gaW1hZ2VEYXRhID0gaW1hZ2UtPmRhdGEoKS0+Y3JlYXRlTlNEYXRhKCk7Ci0KLSAgICBp
ZiAoIWltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJs
ZURpY3Rpb25hcnk+IGRpY3Rpb25hcnkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBh
bGxvY10gaW5pdF0pOwotICAgIE5TU3RyaW5nICptaW1lVHlwZSA9IGNhY2hlZEltYWdlLT5yZXNw
b25zZSgpLm1pbWVUeXBlKCk7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGkgPSBhZG9w
dENGKFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50aWZpZXJGb3JUYWcoa1VUVGFnQ2xhc3NNSU1F
VHlwZSwgKENGU3RyaW5nUmVmKW1pbWVUeXBlLCBOVUxMKSk7Ci0gICAgaWYgKHV0aSkgewotICAg
ICAgICBbZGljdGlvbmFyeS5nZXQoKSBzZXRPYmplY3Q6aW1hZ2VEYXRhLmdldCgpIGZvcktleToo
TlNTdHJpbmcgKil1dGkuZ2V0KCldOwotICAgICAgICBbZGljdGlvbmFyeS5nZXQoKSBzZXRPYmpl
Y3Q6KE5TU3RyaW5nICopbm9kZS0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUTUxTcGFjZXMoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKS0+Z2V0
QXR0cmlidXRlKCJzcmMiKSkpIGZvcktleTooTlNTdHJpbmcgKilrVVRUeXBlVVJMXTsKLSAgICB9
Ci0gICAgZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT53cml0ZURhdGFUb1Bhc3RlYm9hcmQoZGlj
dGlvbmFyeS5nZXQoKSk7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJh
dGVneSgpLT53cml0ZVRvUGFzdGVib2FyZChwYXN0ZWJvYXJkSW1hZ2UpOwogfQogCi12b2lkIFBh
c3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYsIFNtYXJ0UmVwbGFjZU9wdGlv
bikKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBT
bWFydFJlcGxhY2VPcHRpb24pCiB7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9h
cmRTdHJhdGVneSgpLT53cml0ZVRvUGFzdGVib2FyZChrVVRUeXBlVGV4dCwgdGV4dCk7CiB9CiAK
IHZvaWQgUGFzdGVib2FyZDo6d3JpdGVQYXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9hcmQmKQpAQCAt
MjMwLDI0MSArMTYxLDgzIEBAIGJvb2wgUGFzdGVib2FyZDo6Y2FuU21hcnRSZXBsYWNlKCkKIAog
dm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRQbGFpblRleHQmIHRleHQpCiB7Ci0gICAg
UmV0YWluUHRyPE5TQXJyYXk+IHBhc3RlYm9hcmRJdGVtID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xp
ZW50KCktPnJlYWREYXRhRnJvbVBhc3RlYm9hcmQoKE5TU3RyaW5nICopa1VUVHlwZVRleHQsIDAp
OwotCi0gICAgaWYgKFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBjb3VudF0gPT0gMCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWQgdmFsdWUgPSBbcGFzdGVib2FyZEl0ZW0uZ2V0KCkgb2JqZWN0QXRJ
bmRleDowXTsKLSAgICBBU1NFUlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNz
XV0pOwotICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKLSAg
ICAgICAgdGV4dC50ZXh0ID0gKE5TU3RyaW5nICopdmFsdWU7CisgICAgUGFzdGVib2FyZFN0cmF0
ZWd5JiBzdHJhdGVneSA9ICpwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCk7CisgICAgdGV4dC50ZXh0ID0gc3RyYXRlZ3kucmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKDAs
IGtVVFR5cGVUZXh0KTsKIH0KIAogc3RhdGljIE5TQXJyYXkqIHN1cHBvcnRlZEltYWdlVHlwZXMo
KQogewotICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOihpZClrVVRUeXBlUE5H
LCAoaWQpa1VUVHlwZVRJRkYsIChpZClrVVRUeXBlSlBFRywgKGlkKWtVVFR5cGVHSUYsIG5pbF07
CisgICAgcmV0dXJuIEBbKGlkKWtVVFR5cGVQTkcsIChpZClrVVRUeXBlVElGRiwgKGlkKWtVVFR5
cGVKUEVHLCAoaWQpa1VUVHlwZUdJRl07CiB9CiAKLU5TQXJyYXkqIFBhc3RlYm9hcmQ6OnN1cHBv
cnRlZFBhc3RlYm9hcmRUeXBlcygpCit2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZFdl
YkNvbnRlbnRSZWFkZXImIHJlYWRlcikKIHsKLSAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRo
T2JqZWN0czooaWQpV2ViQXJjaGl2ZVBib2FyZFR5cGUsIChpZClrVVRUeXBlUE5HLCAoaWQpa1VU
VHlwZVRJRkYsIChpZClrVVRUeXBlSlBFRywgKGlkKWtVVFR5cGVHSUYsIChpZClrVVRUeXBlVVJM
LCAoaWQpa1VUVHlwZVRleHQsIChpZClrVVRUeXBlUlRGRCwgKGlkKWtVVFR5cGVSVEYsIG5pbF07
Ci19Ci0KLSNkZWZpbmUgV2ViRGF0YVByb3RvY29sU2NoZW1lIEAid2Via2l0LWZha2UtdXJsIgot
Ci1zdGF0aWMgTlNVUkwqIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoTlNTdHJpbmcgKnJlbGF0
aXZlUGFydCkKLXsKLSAgICBDRlVVSURSZWYgVVVJRFJlZiA9IENGVVVJRENyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0KTsKLSAgICBOU1N0cmluZyAqVVVJRFN0cmluZyA9IChOU1N0cmluZyAqKUNG
VVVJRENyZWF0ZVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBVVUlEUmVmKTsKLSAgICBDRlJl
bGVhc2UoVVVJRFJlZik7Ci0gICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly8lQC8lQCIsIFdlYkRhdGFQcm90b2NvbFNj
aGVtZSwgVVVJRFN0cmluZywgcmVsYXRpdmVQYXJ0XV07Ci0gICAgQ0ZSZWxlYXNlKFVVSURTdHJp
bmcpOwotCi0gICAgcmV0dXJuIFVSTDsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlKEZyYW1lKiBmcmFtZSwg
UGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlKQotewotICAgIFJlZlB0cjxFbGVt
ZW50PiBpbWFnZUVsZW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChIVE1M
TmFtZXM6OmltZ1RhZywgZmFsc2UpOwotCi0gICAgaWYgKERvY3VtZW50TG9hZGVyKiBsb2FkZXIg
PSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgbG9hZGVyLT5hZGRB
cmNoaXZlUmVzb3VyY2UocmVzb3VyY2UuZ2V0KCkpOwotCi0gICAgTlNVUkwgKlVSTCA9IHJlc291
cmNlLT51cmwoKTsKLSAgICBpbWFnZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnNy
Y0F0dHIsIFtVUkwgaXNGaWxlVVJMXSA/IFtVUkwgYWJzb2x1dGVTdHJpbmddIDogcmVzb3VyY2Ut
PnVybCgpKTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBmcmFtZS0+
ZG9jdW1lbnQoKS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgIGZyYWdtZW50LT5hcHBl
bmRDaGlsZChpbWFnZUVsZW1lbnQucmVsZWFzZSgpKTsKLSAgICByZXR1cm4gZnJhZ21lbnQucmVs
ZWFzZSgpOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVu
dEZyYWdtZW50V2l0aExpbmsoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHVybFN0
cmluZykKLXsKLSAgICBSZWZQdHI8RWxlbWVudD4gYW5jaG9yRWxlbWVudCA9IGRvY3VtZW50LT5j
cmVhdGVFbGVtZW50KEhUTUxOYW1lczo6YVRhZywgZmFsc2UpOwotCi0gICAgYW5jaG9yRWxlbWVu
dC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIsIHVybFN0cmluZyk7Ci0gICAgYW5j
aG9yRWxlbWVudC0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKHVybFN0cmlu
ZykpOwotCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnQt
PmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoYW5j
aG9yRWxlbWVudC5yZWxlYXNlKCkpOwotICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci19
Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50RnJhZ21lbnRX
aXRoUlRGKEZyYW1lKiBmcmFtZSwgTlNTdHJpbmcgKnBhc3RlYm9hcmRUeXBlLCBOU0RhdGEqIHBh
c3RlYm9hcmREYXRhKQotewotICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5kb2N1bWVudCgpIHx8
ICFmcmFtZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzdHJpbmc7Ci0gICAgaWYgKFtw
YXN0ZWJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICopa1VUVHlwZVJURkRdKQot
ICAgICAgICBzdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZE
OnBhc3RlYm9hcmREYXRhIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKLQotICAgIGlmICghc3Ry
aW5nKQotICAgICAgICBzdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdp
dGhSVEY6cGFzdGVib2FyZERhdGEgZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOwotCi0gICAgaWYg
KCFzdHJpbmcpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYm9vbCB3YXNEZWZlcnJpbmdDYWxs
YmFja3MgPSBmcmFtZS0+cGFnZSgpLT5kZWZlcnNMb2FkaW5nKCk7Ci0gICAgaWYgKCF3YXNEZWZl
cnJpbmdDYWxsYmFja3MpCi0gICAgICAgIGZyYW1lLT5wYWdlKCktPnNldERlZmVyc0xvYWRpbmco
dHJ1ZSk7CisgICAgUGFzdGVib2FyZFN0cmF0ZWd5JiBzdHJhdGVneSA9ICpwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCk7CiAKLSAgICBWZWN0b3I8UmVmUHRyPEFyY2hp
dmVSZXNvdXJjZT4+IHJlc291cmNlczsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQgPSBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPmRvY3VtZW50RnJhZ21lbnRGcm9tQXR0
cmlidXRlZFN0cmluZyhzdHJpbmcuZ2V0KCksIHJlc291cmNlcyk7CisgICAgaW50IG51bWJlck9m
SXRlbXMgPSBzdHJhdGVneS5nZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpOwogCi0gICAgc2l6ZV90
IHNpemUgPSByZXNvdXJjZXMuc2l6ZSgpOwotICAgIGlmIChzaXplKSB7Ci0gICAgICAgIERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBsb2Fk
ZXItPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZXNbaV0pOwotICAgIH0KKyAgICBpZiAoIW51
bWJlck9mSXRlbXMpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmICghd2FzRGVmZXJyaW5nQ2Fs
bGJhY2tzKQotICAgICAgICBmcmFtZS0+cGFnZSgpLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsK
KyAgICBOU0FycmF5ICp0eXBlcyA9IHN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlcygpOworICAgIGlu
dCBudW1iZXJPZlR5cGVzID0gW3R5cGVzIGNvdW50XTsKIAotICAgIHJldHVybiBmcmFnbWVudC5y
ZWxlYXNlKCk7Ci19CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyBpKysp
IHsKKyAgICAgICAgZm9yIChpbnQgdHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwgbnVtYmVyT2ZU
eXBlczsgdHlwZUluZGV4KyspIHsKKyAgICAgICAgICAgIE5TU3RyaW5nICp0eXBlID0gW3R5cGVz
IG9iamVjdEF0SW5kZXg6dHlwZUluZGV4XTsKIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50Rm9yUGFzdGVib2FyZEl0ZW1BdEluZGV4KEZy
YW1lKiBmcmFtZSwgaW50IGluZGV4LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBs
YWluVGV4dCkKLXsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBmcmFt
ZS0+ZWRpdG9yKCkuY2xpZW50KCktPmRvY3VtZW50RnJhZ21lbnRGcm9tRGVsZWdhdGUoaW5kZXgp
OwotICAgIGlmIChmcmFnbWVudCkKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsK
LQotICAgIC8vIEZpcnN0IHRyeSB0byBhc2sgdGhlIGNsaWVudCBhYm91dCB0aGUgc3VwcG9ydGVk
IHR5cGVzLiBJdCB3aWxsIHJldHVybiBudWxsIGlmIHRoZSBjbGllbnQKLSAgICAvLyBoYXMgbm8g
c2VsZWN0aW9uLgotICAgIE5TQXJyYXkgKnN1cHBvcnRlZFR5cGVzID0gZnJhbWUtPmVkaXRvcigp
LmNsaWVudCgpLT5zdXBwb3J0ZWRQYXN0ZWJvYXJkVHlwZXNGb3JDdXJyZW50U2VsZWN0aW9uKCk7
Ci0gICAgaWYgKCFzdXBwb3J0ZWRUeXBlcykKLSAgICAgICAgc3VwcG9ydGVkVHlwZXMgPSBzdXBw
b3J0ZWRQYXN0ZWJvYXJkVHlwZXMoKTsKLSAgICBpbnQgbnVtYmVyT2ZUeXBlcyA9IFtzdXBwb3J0
ZWRUeXBlcyBjb3VudF07Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9mVHlwZXM7
IGkrKykgewotICAgICAgICBOU1N0cmluZyAqdHlwZSA9IFtzdXBwb3J0ZWRUeXBlcyBvYmplY3RB
dEluZGV4OmldOwotICAgICAgICBSZXRhaW5QdHI8TlNBcnJheT4gcGFzdGVib2FyZEl0ZW0gPSBm
cmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnJlYWREYXRhRnJvbVBhc3RlYm9hcmQodHlwZSwgaW5k
ZXgpOwotCi0gICAgICAgIGlmIChbcGFzdGVib2FyZEl0ZW0uZ2V0KCkgY291bnRdID09IDApCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5n
OldlYkFyY2hpdmVQYm9hcmRUeXBlXSkgewotICAgICAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1l
bnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAgICAgLy8gV2UgcHV0
IFtXZWJBcmNoaXZlIGRhdGFdIG9uIHRoZSBwYXN0ZWJvYXJkIGluIC1jb3B5OiBpbnN0ZWFkIG9m
IHRoZSBhcmNoaXZlIGl0c2VsZiB1bnRpbCB0aGVyZSBpcyBBUEkgdG8gcHJvdmlkZSB0aGUgV2Vi
QXJjaGl2ZS4KLSAgICAgICAgICAgIE5TRGF0YSAqZGF0YSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQo
KSBvYmplY3RBdEluZGV4OjBdOwotICAgICAgICAgICAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+
IGNvcmVBcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3Jh
cE5TRGF0YShkYXRhKS5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoY29yZUFyY2hpdmUpIHsKLSAg
ICAgICAgICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBtYWluUmVzb3VyY2UgPSBjb3Jl
QXJjaGl2ZS0+bWFpblJlc291cmNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1haW5SZXNvdXJj
ZSkgewotICAgICAgICAgICAgICAgICAgICBOU1N0cmluZyAqTUlNRVR5cGUgPSBtYWluUmVzb3Vy
Y2UtPm1pbWVUeXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCku
Y2xpZW50KCkuY2FuU2hvd01JTUVUeXBlQXNIVE1MKE1JTUVUeXBlKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBtYXJrdXBTdHJpbmcgPSBhZG9wdE5TKFtb
TlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpbbWFpblJlc291cmNlLT5kYXRhKCktPmNyZWF0
ZU5TRGF0YSgpIGF1dG9yZWxlYXNlXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBmcmFt
ZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb2FkZXItPmFkZEFsbEFyY2hpdmVSZXNvdXJjZXMoY29yZUFyY2hpdmUuZ2V0KCkpOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cCgqZnJhbWUtPmRvY3VtZW50KCksIG1hcmt1cFN0cmluZy5nZXQoKSwgbWFpblJlc291cmNlLT51
cmwoKSwgRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzpXZWJBcmNoaXZlUGJvYXJkVHlw
ZV0pIHsKKyAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0g
c3RyYXRlZ3kucmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGksIFdlYkFyY2hpdmVQYm9hcmRUeXBl
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLnJlYWRXZWJBcmNoaXZlKGJ1ZmZl
ci5yZWxlYXNlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudCkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICopa1VUVHlwZVJU
RkRdKQotICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnRXaXRoUlRGKGZyYW1lLCAo
TlNTdHJpbmcgKilrVVRUeXBlUlRGRCwgW3Bhc3RlYm9hcmRJdGVtLmdldCgpIG9iamVjdEF0SW5k
ZXg6MF0pOwogCi0gICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICop
a1VUVHlwZVJURl0pCi0gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRGcmFnbWVudFdpdGhSVEYo
ZnJhbWUsIChOU1N0cmluZyAqKWtVVFR5cGVSVEYsIFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmpl
Y3RBdEluZGV4OjBdKTsKLQotICAgICAgICBpZiAoW3N1cHBvcnRlZEltYWdlVHlwZXMoKSBjb250
YWluc09iamVjdDp0eXBlXSkgewotICAgICAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBmaWxl
bmFtZUV4dGVuc2lvbiA9IGFkb3B0TlMoKE5TU3RyaW5nICopVVRUeXBlQ29weVByZWZlcnJlZFRh
Z1dpdGhDbGFzcygoQ0ZTdHJpbmdSZWYpdHlwZSwga1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lv
bikpOwotICAgICAgICAgICAgTlNTdHJpbmcgKnJlbGF0aXZlVVJMUGFydCA9IFtAImltYWdlIiBz
dHJpbmdCeUFwcGVuZGluZ1N0cmluZzpmaWxlbmFtZUV4dGVuc2lvbi5nZXQoKV07Ci0gICAgICAg
ICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IG1pbWVUeXBlID0gYWRvcHROUygoTlNTdHJpbmcgKilV
VFR5cGVDb3B5UHJlZmVycmVkVGFnV2l0aENsYXNzKChDRlN0cmluZ1JlZil0eXBlLCBrVVRUYWdD
bGFzc01JTUVUeXBlKSk7Ci0gICAgICAgICAgICBOU0RhdGEgKmRhdGEgPSBbcGFzdGVib2FyZEl0
ZW0uZ2V0KCkgb2JqZWN0QXRJbmRleDowXTsKLSAgICAgICAgICAgIHJldHVybiBkb2N1bWVudEZy
YWdtZW50V2l0aEltYWdlUmVzb3VyY2UoZnJhbWUsIEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNo
YXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShbW2RhdGEgY29weV0gYXV0b3JlbGVhc2VdKSwgdW5pcXVl
VVJMV2l0aFJlbGF0aXZlUGFydChyZWxhdGl2ZVVSTFBhcnQpLCBtaW1lVHlwZS5nZXQoKSwgIiIs
ICIiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzooTlNT
dHJpbmcgKilrVVRUeXBlVVJMXSkgewotICAgICAgICAgICAgaWQgdmFsdWUgPSBbcGFzdGVib2Fy
ZEl0ZW0uZ2V0KCkgb2JqZWN0QXRJbmRleDowXTsKLSAgICAgICAgICAgIGlmICghW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W05TVVJMIGNsYXNzXV0pIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoW3Zh
bHVlIGlzS2luZE9mQ2xhc3M6W05TVVJMIGNsYXNzXV0pOwotICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICop
a1VUVHlwZVJURkRdKSB7CisgICAgICAgICAgICAgICAgaWYgKFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGJ1ZmZlciA9IHN0cmF0ZWd5LnJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZChpLCBrVVRUeXBlUlRG
RCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRlci5yZWFkUlRGRChidWZmZXIucmVs
ZWFzZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5TVVJMICp1cmwgPSAoTlNVUkwgKil2YWx1
ZTsKIAotICAgICAgICAgICAgaWYgKCFmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPmhhc1JpY2hs
eUVkaXRhYmxlU2VsZWN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGNyZWF0
ZUZyYWdtZW50RnJvbVRleHQoZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCksIFt1cmwgYWJzb2x1dGVTdHJpbmddKTsKLSAgICAgICAgICAgICAgICBpZiAoZnJhZ21l
bnQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CisgICAg
ICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVSVEZd
KSB7CisgICAgICAgICAgICAgICAgaWYgKFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IHN0
cmF0ZWd5LnJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZChpLCBrVVRUeXBlUlRGKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAocmVhZGVyLnJlYWRSVEYoYnVmZmVyLnJlbGVhc2UoKSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmIChbdXJsIGlzRmlsZVVSTF0pIHsKLSAgICAgICAgICAgICAg
ICBOU1N0cmluZyAqbG9jYWxQYXRoID0gW3VybCByZWxhdGl2ZVBhdGhdOwotICAgICAgICAgICAg
ICAgIC8vIE9ubHkgYWxsb3cgdXJsIGF0dGFjaG1lbnRzIGZyb20gfi9NZWRpYSBmb3Igbm93Lgot
ICAgICAgICAgICAgICAgIGlmICghW2xvY2FsUGF0aCBoYXNQcmVmaXg6WyhOU1N0cmluZyAqKUNQ
U2hhcmVkUmVzb3VyY2VzRGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIvTWVk
aWEvRENJTS8iXV0pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBmaWxlVHlwZSA9IGFkb3B0TlMoKE5TU3RyaW5nICop
VVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZyhrVVRUYWdDbGFzc0ZpbGVuYW1l
RXh0ZW5zaW9uLCAoQ0ZTdHJpbmdSZWYpW2xvY2FsUGF0aCBwYXRoRXh0ZW5zaW9uXSwgTlVMTCkp
OwotICAgICAgICAgICAgICAgIE5TRGF0YSAqZGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhDb250ZW50
c09mRmlsZTpsb2NhbFBhdGhdOwotICAgICAgICAgICAgICAgIGlmIChVVFR5cGVDb25mb3Jtc1Rv
KChDRlN0cmluZ1JlZilmaWxlVHlwZS5nZXQoKSwga1VUVHlwZVBORykpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBkb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UoZnJhbWUsIEFy
Y2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShbW2RhdGEgY29w
eV0gYXV0b3JlbGVhc2VdKSwgdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnBuZyIp
LCBAImltYWdlL3BuZyIsICIiLCAiIikpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKFVUVHlw
ZUNvbmZvcm1zVG8oKENGU3RyaW5nUmVmKWZpbGVUeXBlLmdldCgpLCBrVVRUeXBlSlBFRykpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3Vy
Y2UoZnJhbWUsIEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0
YShbW2RhdGEgY29weV0gYXV0b3JlbGVhc2VdKSwgdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChA
ImltYWdlLmpwZyIpLCBAImltYWdlL2pwZyIsICIiLCAiIikpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBsaW5rIHdpdGggVVJMIHRleHQuCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnRXaXRoTGluayhmcmFtZS0+ZG9jdW1l
bnQoKSwgW3VybCBhYnNvbHV0ZVN0cmluZ10pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKFtzdXBwb3J0ZWRJbWFnZVR5cGVzKCkgY29udGFpbnNPYmplY3Q6dHlwZV0pIHsKKyAgICAg
ICAgICAgICAgICBpZiAoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gc3RyYXRlZ3kucmVh
ZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGksIHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChyZWFkZXIucmVhZEltYWdlKGJ1ZmZlci5yZWxlYXNlKCksIHR5cGUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAg
IGlmIChhbGxvd1BsYWluVGV4dCAmJiBbdHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICop
a1VUVHlwZVRleHRdKSB7Ci0gICAgICAgICAgICBpZCB2YWx1ZSA9IFtwYXN0ZWJvYXJkSXRlbS5n
ZXQoKSBvYmplY3RBdEluZGV4OjBdOwotICAgICAgICAgICAgaWYgKCFbdmFsdWUgaXNLaW5kT2ZD
bGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChbdmFsdWUg
aXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisKKyAgICAgICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICop
a1VUVHlwZVVSTF0pIHsKKyAgICAgICAgICAgICAgICBVUkwgdXJsID0gc3RyYXRlZ3kucmVhZFVS
TEZyb21QYXN0ZWJvYXJkKGksIGtVVFR5cGVVUkwpOworICAgICAgICAgICAgICAgIGlmICghdXJs
LmlzTnVsbCgpICYmIHJlYWRlci5yZWFkVVJMKHVybCwgU3RyaW5nKCkpKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRUeXBlVGV4dF0pIHsKKyAg
ICAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gc3RyYXRlZ3kucmVhZFN0cmluZ0Zyb21QYXN0
ZWJvYXJkKGksIGtVVFR5cGVUZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cmluZy5pc051
bGwoKSAmJiByZWFkZXIucmVhZFBsYWluVGV4dChzdHJpbmcpKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgY2hvc2VQbGFpblRleHQgPSB0
cnVlOwotICAgICAgICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGZyYW1l
LT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCAoTlNTdHJpbmcgKil2YWx1
ZSk7Ci0gICAgICAgICAgICBpZiAoZnJhZ21lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZy
YWdtZW50LnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiAwOwogfQog
Ci1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21l
bnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiAvKmNvbnRleHQqLywgYm9vbCBhbGxv
d1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCitOU0FycmF5KiBQYXN0ZWJvYXJkOjpz
dXBwb3J0ZWRQYXN0ZWJvYXJkVHlwZXMoKQogewotICAgIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7
Ci0KLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGludCBudW1iZXJP
Zkl0ZW1zID0gZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5nZXRQYXN0ZWJvYXJkSXRlbXNDb3Vu
dCgpOwotCi0gICAgaWYgKCFudW1iZXJPZkl0ZW1zKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IC8vIEluIHRoZSBjb21tb24gY2FzZSB0aGVyZSBpcyBqdXN0IG9uZSBpdGVtIG9uIHRoZSBwYXN0
ZWJvYXJkLCBhdm9pZCB0aGUgZXhwZW5zZSBvZiB0cmFuc2ZlcnJpbmcgdGhlIGNvbnRlbnQgb2YK
LSAgICAvLyBmcmFnbWVudEZvckN1cnJlbnRJdGVtIHRvIHRoZSBtYWluIGZyYWdtZW50LgotICAg
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRGb3JQ
YXN0ZWJvYXJkSXRlbUF0SW5kZXgoZnJhbWUsIDAsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWlu
VGV4dCk7Ci0KLSAgICBmb3IgKGludCBpID0gMTsgaSA8IG51bWJlck9mSXRlbXM7IGkrKykgewot
ICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnRGb3JDdXJyZW50SXRlbSA9
IGRvY3VtZW50RnJhZ21lbnRGb3JQYXN0ZWJvYXJkSXRlbUF0SW5kZXgoZnJhbWUsIGksIGFsbG93
UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7Ci0gICAgICAgIGlmICghZnJhZ21lbnQpCi0gICAg
ICAgICAgICBmcmFnbWVudCA9IGZyYWdtZW50Rm9yQ3VycmVudEl0ZW07Ci0gICAgICAgIGVsc2Ug
aWYgKGZyYWdtZW50Rm9yQ3VycmVudEl0ZW0gJiYgZnJhZ21lbnRGb3JDdXJyZW50SXRlbS0+Zmly
c3RDaGlsZCgpKSB7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICAgICAg
ZnJhZ21lbnQtPmFwcGVuZENoaWxkKGZyYWdtZW50Rm9yQ3VycmVudEl0ZW0tPmZpcnN0Q2hpbGQo
KSwgZWMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50KQotICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEBb
KGlkKVdlYkFyY2hpdmVQYm9hcmRUeXBlLCAoaWQpa1VUVHlwZVBORywgKGlkKWtVVFR5cGVUSUZG
LCAoaWQpa1VUVHlwZUpQRUcsIChpZClrVVRUeXBlR0lGLCAoaWQpa1VUVHlwZVVSTCwgKGlkKWtV
VFR5cGVUZXh0LCAoaWQpa1VUVHlwZVJURkQsIChpZClrVVRUeXBlUlRGXTsKIH0KIAogYm9vbCBQ
YXN0ZWJvYXJkOjpoYXNEYXRhKCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuY2xp
ZW50KCktPmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCkgIT0gMDsKKyAgICByZXR1cm4gcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRQYXN0ZWJvYXJkSXRlbXND
b3VudCgpICE9IDA7CiB9CiAKIHN0YXRpYyBTdHJpbmcgdXRpVHlwZUZyb21Db2NvYVR5cGUoTlNT
dHJpbmcgKnR5cGUpCkBAIC01NDAsNyArMzEzLDcgQEAgU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRT
dHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgICAgICAgICAgY29jb2FWYWx1ZSA9IFsoTlNT
dHJpbmcgKil2YWx1ZSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXTs7CiAg
ICAgfSBlbHNlIGlmIChjb2NvYVR5cGUpIHsKICAgICAgICAgaWYgKFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGJ1ZmZlciA9IHN0cmF0ZWd5LnJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZCgwLCBjb2NvYVR5
cGUuZ2V0KCkpKQotICAgICAgICAgICAgY29jb2FWYWx1ZSA9IFtbW05TU3RyaW5nIGFsbG9jXSBp
bml0V2l0aERhdGE6YnVmZmVyLT5jcmVhdGVOU0RhdGEoKSBlbmNvZGluZzpOU1VURjhTdHJpbmdF
bmNvZGluZ10gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgY29jb2FWYWx1ZSA9IFtbW05TU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aERhdGE6YnVmZmVyLT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBlbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gYXV0b3JlbGVhc2VdOwogICAgIH0KIAogICAgIC8v
IEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0
ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
MzljODlmZTEzZjY3ODBlOTllZTc3NzFiMmJmMWRmNmI0YmJiMjQ5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmgK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1FdmVudEZhY3Rv
cnlJT1NfaAorI2RlZmluZSBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPU19oCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlIDxXZWJLaXRBZGRpdGlv
bnMvUGxhdGZvcm1Ub3VjaEV2ZW50SU9TLmg+CisKK0BjbGFzcyBXZWJFdmVudDsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUV2ZW50RmFjdG9yeSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBsYXRmb3JtTW91c2VFdmVudCBjcmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoV2Vi
RXZlbnQgKik7CisgICAgc3RhdGljIFBsYXRmb3JtV2hlZWxFdmVudCBjcmVhdGVQbGF0Zm9ybVdo
ZWVsRXZlbnQoV2ViRXZlbnQgKik7CisgICAgc3RhdGljIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBj
cmVhdGVQbGF0Zm9ybUtleWJvYXJkRXZlbnQoV2ViRXZlbnQgKik7CisjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKKyAgICBzdGF0aWMgUGxhdGZvcm1Ub3VjaEV2ZW50IGNyZWF0ZVBsYXRmb3JtVG91
Y2hFdmVudChXZWJFdmVudCAqKTsKKyNlbmRpZgorfTsKKworU3RyaW5nIGtleUlkZW50aWZpZXJG
b3JLZXlFdmVudChXZWJFdmVudCAqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gUGxhdGZvcm1FdmVudEZhY3RvcnlJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0
OTUxZGUxYzUzZmU0NzhiZWNkODRlMzE5ODU3OGJjMjUxZmU3NTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0K
QEAgLTAsMCArMSwyNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtRXZlbnRGYWN0
b3J5SU9TLmgiCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vTlNHZW9tZXRyeS5oPgorI2ltcG9ydCA8
SW50UG9pbnQuaD4KKyNpbXBvcnQgPEtleUV2ZW50Q29jb2EuaD4KKyNpbXBvcnQgPExvZ2dpbmcu
aD4KKyNpbXBvcnQgPFdlYkV2ZW50Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IHVuc2lnbmVkIG1vZGlmaWVyc0ZvckV2ZW50KFdlYkV2ZW50ICpldmVudCkKK3sKKyAgICB1bnNp
Z25lZCBtb2RpZmllcnMgPSAwOworCisgICAgaWYgKGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJF
dmVudEZsYWdNYXNrU2hpZnQpCisgICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpT
aGlmdEtleTsKKyAgICBpZiAoZXZlbnQubW9kaWZpZXJGbGFncyAmIFdlYkV2ZW50RmxhZ01hc2tD
b250cm9sKQorICAgICAgICBtb2RpZmllcnMgfD0gUGxhdGZvcm1FdmVudDo6Q3RybEtleTsKKyAg
ICBpZiAoZXZlbnQubW9kaWZpZXJGbGFncyAmIFdlYkV2ZW50RmxhZ01hc2tBbHRlcm5hdGUpCisg
ICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpBbHRLZXk7CisgICAgaWYgKGV2ZW50
Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrQ29tbWFuZCkKKyAgICAgICAgbW9kaWZp
ZXJzIHw9IFBsYXRmb3JtRXZlbnQ6Ok1ldGFLZXk7CisKKyAgICByZXR1cm4gbW9kaWZpZXJzOwor
fQorCitzdGF0aWMgaW5saW5lIEludFBvaW50IHBvaW50Rm9yRXZlbnQoV2ViRXZlbnQgKmV2ZW50
KQoreworICAgIHJldHVybiBJbnRQb2ludChldmVudC5sb2NhdGlvbkluV2luZG93KTsKK30KKwor
c3RhdGljIGlubGluZSBJbnRQb2ludCBnbG9iYWxQb2ludEZvckV2ZW50KFdlYkV2ZW50ICpldmVu
dCkKK3sKKyAgICAvLyBpT1MgV2ViS2l0IHdvcmtzIGFzIGlmIGl0IGlzIGZ1bGwgc2NyZWVuLiBU
aGVyZWZvcmUgV2ViIGNvb3JkcyBhcmUgR2xvYmFsIGNvb3Jkcy4KKyAgICByZXR1cm4gcG9pbnRG
b3JFdmVudChldmVudCk7Cit9CisKK3N0YXRpYyBQbGF0Zm9ybUV2ZW50OjpUeXBlIG1vdXNlRXZl
bnRUeXBlKFdlYkV2ZW50ICpldmVudCkKK3sKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKKyAg
ICBjYXNlIFdlYkV2ZW50TW91c2VEb3duOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6
TW91c2VQcmVzc2VkOworICAgIGNhc2UgV2ViRXZlbnRNb3VzZVVwOgorICAgICAgICByZXR1cm4g
UGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZDsKKyAgICBjYXNlIFdlYkV2ZW50TW91c2VNb3Zl
ZDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBQbGF0Zm9y
bUV2ZW50OjpNb3VzZVByZXNzZWQ7CisgICAgfQorfQorCitjbGFzcyBQbGF0Zm9ybU1vdXNlRXZl
bnRCdWlsZGVyIDogcHVibGljIFBsYXRmb3JtTW91c2VFdmVudCB7CitwdWJsaWM6CisgICAgUGxh
dGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihXZWJFdmVudCAqZXZlbnQpCisgICAgeworICAgICAgICBt
X3R5cGUgPSBtb3VzZUV2ZW50VHlwZShldmVudCk7CisgICAgICAgIG1fbW9kaWZpZXJzID0gMDsK
KyAgICAgICAgbV90aW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOworCisgICAgICAgIG1fcG9zaXRp
b24gPSBwb2ludEZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IGds
b2JhbFBvaW50Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247
IC8vIFRoaXMgaGFzIGFsd2F5cyBiZWVuIHRoZSBMZWZ0QnV0dG9uIG9uIGlPUy4KKyAgICAgICAg
bV9jbGlja0NvdW50ID0gMTsgLy8gVGhpcyBoYXMgYWx3YXlzIGJlZW4gMSBvbiBpT1MuCisgICAg
fQorfTsKKworUGxhdGZvcm1Nb3VzZUV2ZW50IFBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQ
bGF0Zm9ybU1vdXNlRXZlbnQoV2ViRXZlbnQgKmV2ZW50KQoreworICAgIHJldHVybiBQbGF0Zm9y
bU1vdXNlRXZlbnRCdWlsZGVyKGV2ZW50KTsKK30KKworY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50
QnVpbGRlciA6IHB1YmxpYyBQbGF0Zm9ybVdoZWVsRXZlbnQgeworcHVibGljOgorICAgIFBsYXRm
b3JtV2hlZWxFdmVudEJ1aWxkZXIoV2ViRXZlbnQgKmV2ZW50KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRTY3JvbGxXaGVlbCk7CisKKyAgICAgICAgbV90eXBl
ID0gUGxhdGZvcm1FdmVudDo6V2hlZWw7CisgICAgICAgIG1fbW9kaWZpZXJzID0gMDsKKyAgICAg
ICAgbV90aW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOworCisgICAgICAgIG1fcG9zaXRpb24gPSBw
b2ludEZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IGdsb2JhbFBv
aW50Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX2RlbHRhWCA9IGV2ZW50LmRlbHRhWDsKKyAg
ICAgICAgbV9kZWx0YVkgPSBldmVudC5kZWx0YVk7CisgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBT
Y3JvbGxCeVBpeGVsV2hlZWxFdmVudDsgLy8gaU9TIG9ubHkgc3VwcG9ydHMgY29udGludW91cyAo
cGl4ZWwtbW9kZSkgc2Nyb2xsaW5nLgorICAgIH0KK307CisKK1BsYXRmb3JtV2hlZWxFdmVudCBQ
bGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1XaGVlbEV2ZW50KFdlYkV2ZW50ICpl
dmVudCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1XaGVlbEV2ZW50QnVpbGRlcihldmVudCk7Cit9
CisKK1N0cmluZyBrZXlJZGVudGlmaWVyRm9yS2V5RXZlbnQoV2ViRXZlbnQgKmV2ZW50KQorewor
ICAgIE5TU3RyaW5nICpzID0gZXZlbnQuY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOworICAg
IGlmIChbcyBsZW5ndGhdICE9IDEpIHsKKyAgICAgICAgTE9HKEV2ZW50cywgInJlY2VpdmVkIGFu
IHVuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4ga2V5IGV2ZW50OiAldSIsIFtzIGxl
bmd0aF0pOworICAgICAgICByZXR1cm4gIlVuaWRlbnRpZmllZCI7CisgICAgfQorCisgICAgcmV0
dXJuIGtleUlkZW50aWZpZXJGb3JDaGFyQ29kZShDRlN0cmluZ0dldENoYXJhY3RlckF0SW5kZXgo
KENGU3RyaW5nUmVmKXMsIDApKTsKK30KKworY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVp
bGRlciA6IHB1YmxpYyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgeworcHVibGljOgorICAgIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXIoV2ViRXZlbnQgKmV2ZW50KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRLZXlEb3duIHx8IGV2ZW50LnR5cGUgPT0gV2Vi
RXZlbnRLZXlVcCk7CisKKyAgICAgICAgbV90eXBlID0gKGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRL
ZXlVcCA/IFBsYXRmb3JtRXZlbnQ6OktleVVwIDogUGxhdGZvcm1FdmVudDo6S2V5RG93bik7Cisg
ICAgICAgIG1fbW9kaWZpZXJzID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOworICAgICAgICBt
X3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisKKyAgICAgICAgbV90ZXh0ID0gZXZlbnQuY2hh
cmFjdGVyczsKKyAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9IGV2ZW50LmNoYXJhY3RlcnNJZ25v
cmluZ01vZGlmaWVyczsKKyAgICAgICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckZv
cktleUV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSBldmVu
dC5rZXlDb2RlOworICAgICAgICBtX21hY0NoYXJDb2RlID0gMDsKKyAgICAgICAgbV9hdXRvUmVw
ZWF0ID0gZXZlbnQuaXNLZXlSZXBlYXRpbmc7CisgICAgICAgIG1faXNLZXlwYWQgPSBmYWxzZTsg
Ly8gaU9TIGRvZXMgbm90IGRpc3Rpbmd1aXNoIHRoZSBudW1wYWQuIFNlZSA8cmRhcjovL3Byb2Js
ZW0vNzE5MDgzNT4uCisgICAgICAgIG1faXNTeXN0ZW1LZXkgPSBmYWxzZTsKKyAgICAgICAgbV9F
dmVudCA9IGV2ZW50OworCisgICAgICAgIC8vIEFsd2F5cyB1c2UgMTMgZm9yIEVudGVyL1JldHVy
biAtLSB3ZSBkb24ndCB3YW50IHRvIHVzZSBBcHBLaXQncyBkaWZmZXJlbnQgY2hhcmFjdGVyIGZv
ciBFbnRlci4KKyAgICAgICAgaWYgKG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID09ICdccicpIHsK
KyAgICAgICAgICAgIG1fdGV4dCA9ICJcciI7CisgICAgICAgICAgICBtX3VubW9kaWZpZWRUZXh0
ID0gIlxyIjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBhZGp1c3RtZW50cyBiZWxvdyBh
cmUgb25seSBuZWVkZWQgaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSBtb2RlLCBidXQgd2UgY2Fu
bm90IHRlbGwgd2hhdCBtb2RlIHdlIGFyZSBpbiBmcm9tIGhlcmUuCisKKyAgICAgICAgLy8gVHVy
biAweDdGIGludG8gOCwgYmVjYXVzZSBiYWNrc3BhY2UgbmVlZHMgdG8gYWx3YXlzIGJlIDguCisg
ICAgICAgIGlmIChtX3RleHQgPT0gIlx4N0YiKQorICAgICAgICAgICAgbV90ZXh0ID0gIlx4OCI7
CisgICAgICAgIGlmIChtX3VubW9kaWZpZWRUZXh0ID09ICJceDdGIikKKyAgICAgICAgICAgIG1f
dW5tb2RpZmllZFRleHQgPSAiXHg4IjsKKyAgICAgICAgLy8gQWx3YXlzIHVzZSA5IGZvciB0YWIg
LS0gd2UgZG9uJ3Qgd2FudCB0byB1c2UgQXBwS2l0J3MgZGlmZmVyZW50IGNoYXJhY3RlciBmb3Ig
c2hpZnQtdGFiLgorICAgICAgICBpZiAobV93aW5kb3dzVmlydHVhbEtleUNvZGUgPT0gOSkgewor
ICAgICAgICAgICAgbV90ZXh0ID0gIlx4OSI7CisgICAgICAgICAgICBtX3VubW9kaWZpZWRUZXh0
ID0gIlx4OSI7CisgICAgICAgIH0KKyAgICB9Cit9OworCitQbGF0Zm9ybUtleWJvYXJkRXZlbnQg
UGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtS2V5Ym9hcmRFdmVudChXZWJFdmVu
dCAqZXZlbnQpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXIoZXZl
bnQpOworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK3N0YXRpYyBQbGF0Zm9ybVRvdWNo
UG9pbnQ6OlRvdWNoUGhhc2VUeXBlIGNvbnZlcnRUb3VjaFBoYXNlKE5TTnVtYmVyICp0b3VjaFBo
YXNlTnVtYmVyKQoreworICAgIFdlYkV2ZW50VG91Y2hQaGFzZVR5cGUgdG91Y2hQaGFzZSA9IHN0
YXRpY19jYXN0PFdlYkV2ZW50VG91Y2hQaGFzZVR5cGU+KFt0b3VjaFBoYXNlTnVtYmVyIHVuc2ln
bmVkSW50VmFsdWVdKTsKKyAgICBzd2l0Y2ggKHRvdWNoUGhhc2UpIHsKKyAgICBjYXNlIFdlYkV2
ZW50VG91Y2hQaGFzZUJlZ2FuOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1Ub3VjaFBvaW50OjpU
b3VjaFBoYXNlQmVnYW47CisgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VNb3ZlZDoKKyAgICAg
ICAgcmV0dXJuIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQaGFzZU1vdmVkOworICAgIGNhc2Ug
V2ViRXZlbnRUb3VjaFBoYXNlU3RhdGlvbmFyeToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVG91
Y2hQb2ludDo6VG91Y2hQaGFzZVN0YXRpb25hcnk7CisgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhh
c2VFbmRlZDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQaGFzZUVu
ZGVkOworICAgIGNhc2UgV2ViRXZlbnRUb3VjaFBoYXNlQ2FuY2VsbGVkOgorICAgICAgICByZXR1
cm4gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlQ2FuY2VsbGVkOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gUGxhdGZv
cm1Ub3VjaFBvaW50OjpUb3VjaFBoYXNlQmVnYW47Cit9CisKK3N0YXRpYyBQbGF0Zm9ybUV2ZW50
OjpUeXBlIHRvdWNoRXZlbnRUeXBlKFdlYkV2ZW50ICpldmVudCkKK3sKKyAgICBzd2l0Y2ggKGV2
ZW50LnR5cGUpIHsKKyAgICBjYXNlIFdlYkV2ZW50VG91Y2hCZWdpbjoKKyAgICAgICAgcmV0dXJu
IFBsYXRmb3JtRXZlbnQ6OlRvdWNoU3RhcnQ7CisgICAgY2FzZSBXZWJFdmVudFRvdWNoRW5kOgor
ICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6VG91Y2hFbmQ7CisgICAgY2FzZSBXZWJFdmVu
dFRvdWNoQ2FuY2VsOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6VG91Y2hDYW5jZWw7
CisgICAgY2FzZSBXZWJFdmVudFRvdWNoQ2hhbmdlOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1F
dmVudDo6VG91Y2hNb3ZlOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6VG91Y2hDYW5jZWw7CisgICAgfQor
fQorCitjbGFzcyBQbGF0Zm9ybVRvdWNoUG9pbnRCdWlsZGVyIDogcHVibGljIFBsYXRmb3JtVG91
Y2hQb2ludCB7CitwdWJsaWM6CisgICAgUGxhdGZvcm1Ub3VjaFBvaW50QnVpbGRlcih1bnNpZ25l
ZCBpZGVudGlmaWVyLCBjb25zdCBJbnRQb2ludCYgbG9jYXRpb24sIFRvdWNoUGhhc2VUeXBlIHBo
YXNlKQorICAgICAgICA6IFBsYXRmb3JtVG91Y2hQb2ludChpZGVudGlmaWVyLCBsb2NhdGlvbiwg
cGhhc2UpCisgICAgeworICAgIH0KK307CisKK2NsYXNzIFBsYXRmb3JtVG91Y2hFdmVudEJ1aWxk
ZXIgOiBwdWJsaWMgUGxhdGZvcm1Ub3VjaEV2ZW50IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybVRv
dWNoRXZlbnRCdWlsZGVyKFdlYkV2ZW50ICpldmVudCkKKyAgICB7CisgICAgICAgIG1fdHlwZSA9
IHRvdWNoRXZlbnRUeXBlKGV2ZW50KTsKKyAgICAgICAgbV9tb2RpZmllcnMgPSBtb2RpZmllcnNG
b3JFdmVudChldmVudCk7CisgICAgICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKKwor
ICAgICAgICBtX2dlc3R1cmVTY2FsZSA9IGV2ZW50Lmdlc3R1cmVTY2FsZTsKKyAgICAgICAgbV9n
ZXN0dXJlUm90YXRpb24gPSBldmVudC5nZXN0dXJlUm90YXRpb247CisgICAgICAgIG1faXNHZXN0
dXJlID0gZXZlbnQuaXNHZXN0dXJlOworICAgICAgICBtX3Bvc2l0aW9uID0gcG9pbnRGb3JFdmVu
dChldmVudCk7CisgICAgICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBnbG9iYWxQb2ludEZvckV2ZW50
KGV2ZW50KTsKKworICAgICAgICB1bnNpZ25lZCB0b3VjaENvdW50ID0gZXZlbnQudG91Y2hDb3Vu
dDsKKyAgICAgICAgbV90b3VjaFBvaW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRvdWNoQ291
bnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG91Y2hDb3VudDsgKytpKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0gWyhOU051bWJlciAqKVtldmVudC50
b3VjaElkZW50aWZpZXJzIG9iamVjdEF0SW5kZXg6aV0gdW5zaWduZWRJbnRWYWx1ZV07CisgICAg
ICAgICAgICBJbnRQb2ludCBsb2NhdGlvbiA9IEludFBvaW50KFsoTlNWYWx1ZSAqKVtldmVudC50
b3VjaExvY2F0aW9ucyBvYmplY3RBdEluZGV4OmldIHBvaW50VmFsdWVdKTsKKyAgICAgICAgICAg
IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQaGFzZVR5cGUgdG91Y2hQaGFzZSA9IGNvbnZlcnRU
b3VjaFBoYXNlKFtldmVudC50b3VjaFBoYXNlcyBvYmplY3RBdEluZGV4OmldKTsKKyAgICAgICAg
ICAgIG1fdG91Y2hQb2ludHMudW5jaGVja2VkQXBwZW5kKFBsYXRmb3JtVG91Y2hQb2ludEJ1aWxk
ZXIoaWRlbnRpZmllciwgbG9jYXRpb24sIHRvdWNoUGhhc2UpKTsKKyAgICAgICAgfQorICAgIH0K
K307CisKK1BsYXRmb3JtVG91Y2hFdmVudCBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxh
dGZvcm1Ub3VjaEV2ZW50KFdlYkV2ZW50ICpldmVudCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1U
b3VjaEV2ZW50QnVpbGRlcihldmVudCk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5U
UykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KaW5kZXggMzIwZWE1MDQ5ODg1MTRl
NzdlOTJhZGJhMTg1YjgxYmM5OGYwM2RkMi4uZTgzNWE1MjA5YzVhOTA5NTFmNzM5YjRlMmE5Yzhl
YTMwZmQzMzdmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRm
b3JtUGFzdGVib2FyZElPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxh
dGZvcm1QYXN0ZWJvYXJkSU9TLm1tCkBAIC0yNCwxMCArMjQsMTMgQEAKICAqLwogCiAjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtUGFzdGVib2FyZC5oIgorCiAjaW1wb3J0ICJD
b2xvci5oIgogI2ltcG9ydCAiVVJMLmgiCiAjaW1wb3J0ICJJbWFnZS5oIgotI2ltcG9ydCAiUGxh
dGZvcm1QYXN0ZWJvYXJkLmgiCisjaW1wb3J0ICJQYXN0ZWJvYXJkLmgiCisjaW1wb3J0ICJTaGFy
ZWRCdWZmZXIuaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCiAKIFNPRlRfTElOS19GUkFNRVdP
UksoVUlLaXQpCkBAIC0xNTIsMTIgKzE1NSwxMiBAQCB2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6
d3JpdGUoY29uc3QgUGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpCiAgICAgUmV0YWluUHRy
PE5TRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdKTsKIAogICAgIGlmIChjb250ZW50LmRhdGFJbldlYkFyY2hpdmVG
b3JtYXQpCi0gICAgICAgIFtyZXByZXNlbnRhdGlvbnMgc2V0VmFsdWU6KE5TRGF0YSAqKWNvbnRl
bnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdC0+Y3JlYXRlTlNEYXRhKCkgZm9yS2V5OldlYkFyY2hp
dmVQYm9hcmRUeXBlXTsKKyAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTooTlNEYXRh
ICopY29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0LT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBm
b3JLZXk6V2ViQXJjaGl2ZVBib2FyZFR5cGVdOwogCiAgICAgaWYgKGNvbnRlbnQuZGF0YUluUlRG
REZvcm1hdCkKLSAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTpjb250ZW50LmRhdGFJ
blJURkRGb3JtYXQtPmNyZWF0ZU5TRGF0YSgpIGZvcktleTooTlNTdHJpbmcgKilrVVRUeXBlUlRG
RF07CisgICAgICAgIFtyZXByZXNlbnRhdGlvbnMgc2V0VmFsdWU6Y29udGVudC5kYXRhSW5SVEZE
Rm9ybWF0LT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVJU
RkRdOwogICAgIGlmIChjb250ZW50LmRhdGFJblJURkZvcm1hdCkKLSAgICAgICAgW3JlcHJlc2Vu
dGF0aW9ucyBzZXRWYWx1ZTpjb250ZW50LmRhdGFJblJURkZvcm1hdC0+Y3JlYXRlTlNEYXRhKCkg
Zm9yS2V5OihOU1N0cmluZyAqKWtVVFR5cGVSVEZdOworICAgICAgICBbcmVwcmVzZW50YXRpb25z
IHNldFZhbHVlOmNvbnRlbnQuZGF0YUluUlRGRm9ybWF0LT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBm
b3JLZXk6KE5TU3RyaW5nICopa1VUVHlwZVJURl07CiAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRW
YWx1ZTpjb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCBmb3JLZXk6KE5TU3RyaW5nICopa1VUVHlw
ZVRleHRdOwogICAgIFttX3Bhc3RlYm9hcmQgc2V0SXRlbXM6QFtyZXByZXNlbnRhdGlvbnMuZ2V0
KCldXTsKIH0KQEAgLTE2Niw3ICsxNjksNyBAQCB2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6d3Jp
dGUoY29uc3QgUGFzdGVib2FyZEltYWdlJiBwYXN0ZWJvYXJkSW1hZ2UpCiB7CiAgICAgUmV0YWlu
UHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHJlcHJlc2VudGF0aW9ucyA9IGFkb3B0TlMoW1tOU011
dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CiAgICAgaWYgKCFwYXN0ZWJvYXJkSW1hZ2Uu
cmVzb3VyY2VNSU1FVHlwZS5pc051bGwoKSkgewotICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNl
dE9iamVjdDpwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2UtPmRhdGEoKS0+Y3JlYXRlTlNEYXRhKCkgZm9y
S2V5OnBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZU1JTUVUeXBlXTsKKyAgICAgICAgW3JlcHJlc2Vu
dGF0aW9ucyBzZXRPYmplY3Q6cGFzdGVib2FyZEltYWdlLmltYWdlLT5kYXRhKCktPmNyZWF0ZU5T
RGF0YSgpLmdldCgpIGZvcktleTpwYXN0ZWJvYXJkSW1hZ2UucmVzb3VyY2VNSU1FVHlwZV07CiAg
ICAgICAgIFtyZXByZXNlbnRhdGlvbnMgc2V0T2JqZWN0OihOU1N0cmluZyAqKXBhc3RlYm9hcmRJ
bWFnZS51cmwudXJsIGZvcktleTooTlNTdHJpbmcgKilrVVRUeXBlVVJMXTsKICAgICB9CiAgICAg
W21fcGFzdGVib2FyZCBzZXRJdGVtczpAW3JlcHJlc2VudGF0aW9ucy5nZXQoKV1dOwpAQCAtMTc3
LDcgKzE4MCw3IEBAIHZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgUmV0YWluUHRyPE5TRGlj
dGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkg
YWxsb2NdIGluaXRdKTsKIAogICAgIGlmIChwYXN0ZWJvYXJkVHlwZSA9PSBTdHJpbmcoa1VUVHlw
ZVVSTCkpCi0gICAgICAgIFtyZXByZXNlbnRhdGlvbnMgc2V0VmFsdWU6W2Fkb3B0TlMoW05TVVJM
IGFsbG9jXSBpbml0V2l0aFN0cmluZzp0ZXh0XSkuZ2V0KCkgZm9yS2V5OnBhc3RlYm9hcmRUeXBl
XTsKKyAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTphZG9wdE5TKFtbTlNVUkwgYWxs
b2NdIGluaXRXaXRoU3RyaW5nOnRleHRdKS5nZXQoKSBmb3JLZXk6cGFzdGVib2FyZFR5cGVdOwog
ICAgIGVsc2UgaWYgKCFwYXN0ZWJvYXJkVHlwZS5pc051bGwoKSkKICAgICAgICAgW3JlcHJlc2Vu
dGF0aW9ucyBzZXRWYWx1ZTp0ZXh0IGZvcktleTpwYXN0ZWJvYXJkVHlwZV07CiAgICAgW21fcGFz
dGVib2FyZCBzZXRJdGVtczpAW3JlcHJlc2VudGF0aW9ucy5nZXQoKV1dOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtU2NyZWVuSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtU2NyZWVuSU9TLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJi
ZjIyMTBiY2E2ZTAxZDk2OTU3ZjI1YTQyNGViMTNhMzY3ZTc2ZTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TY3JlZW5JT1MubW0KQEAgLTAs
MCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlBsYXRmb3JtU2NyZWVuLmgiCisKKyNpbXBvcnQgIkZsb2F0UmVjdC5oIgorI2ltcG9ydCAi
RnJhbWVWaWV3LmgiCisjaW1wb3J0ICJJbnRSZWN0LmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2ltcG9ydCAiV0FLV2luZG93LmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLmgiCisjaW1wb3J0ICJXaWRnZXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbnQg
c2NyZWVuSG9yaXpvbnRhbERQSShXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK2ludCBzY3JlZW5WZXJ0aWNhbERQSShXaWRnZXQqKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBzY3JlZW5EZXB0aChX
aWRnZXQqKQoreworICAgIC8vIEFzc3VtZSAzMiBiaXRzIHBlciBwaXhlbC4gU2VlIDxyZGFyOi8v
cHJvYmxlbS85Mzc4ODI5Pi4KKyAgICByZXR1cm4gMzI7Cit9CisKK2ludCBzY3JlZW5EZXB0aFBl
ckNvbXBvbmVudChXaWRnZXQqKQoreworICAgIC8vIEFzc3VtZSB0aGUgc2NyZWVuIGRlcHRoIGlz
IGV2ZW5seSBkaXZpZGVkIGludG8gZm91ciBjb2xvciBjb21wb25lbnRzLiBTZWUgPHJkYXI6Ly9w
cm9ibGVtLzkzNzg4Mjk+LgorICAgIHJldHVybiBzY3JlZW5EZXB0aCgwKSAvIDQ7Cit9CisKK2Jv
b2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CisvLyBUaGVzZSBmdW5jdGlvbnMgc2NhbGUgYmV0d2VlbiBzY3JlZW4gYW5kIHBhZ2UgY29vcmRp
bmF0ZXMgYmVjYXVzZSBKYXZhU2NyaXB0L0RPTSBvcGVyYXRpb25zIAorLy8gYXNzdW1lIHRoYXQg
dGhlIHNjcmVlbiBhbmQgdGhlIHBhZ2Ugc2hhcmUgdGhlIHNhbWUgY29vcmRpbmF0ZSBzeXN0ZW0u
CitGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAoIXdpZGdl
dCkKKyAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CisgICAgV0FLV2luZG93ICp3aW5kb3cgPSBb
d2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRvd107CisgICAgaWYgKCF3aW5kb3cpCisgICAg
ICAgIHJldHVybiBbd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIGZyYW1lXTsKKyAgICBDR1JlY3Qg
c2NyZWVuUmVjdCA9IHsgQ0dQb2ludFplcm8sIFt3aW5kb3cgc2NyZWVuU2l6ZV0gfTsKKyAgICBy
ZXR1cm4gZW5jbG9zaW5nSW50UmVjdChzY3JlZW5SZWN0KTsKK30KKworRmxvYXRSZWN0IHNjcmVl
bkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRnZXQpCisgICAg
ICAgIHJldHVybiBDR1JlY3RaZXJvOworICAgIFdBS1dpbmRvdyAqd2luZG93ID0gW3dpZGdldC0+
cGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddOworICAgIGlmICghd2luZG93KQorICAgICAgICByZXR1
cm4gQ0dSZWN0WmVybzsKKyAgICBDR1JlY3Qgc2NyZWVuUmVjdCA9IHsgQ0dQb2ludFplcm8sIFt3
aW5kb3cgYXZhaWxhYmxlU2NyZWVuU2l6ZV0gfTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVj
dChzY3JlZW5SZWN0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJJT1Mu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1TcGVlY2hTeW50aGVzaXpl
cklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yNjQwNWU3Njc2YzFkYWQ3ZTkzYmI3MGRkNjg1YzZjMTc4MjMw
ZWRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRm
b3JtU3BlZWNoU3ludGhlc2l6ZXJJT1MubW0KQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNwZWVjaFN5
bnRoZXNpemVyLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpZiBFTkFCTEUoU1BFRUNIX1NZ
TlRIRVNJUykKKworI2luY2x1ZGUgIlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZS5oIgorI2luY2x1ZGUgIlNv
ZnRMaW5raW5nLmgiCisjaW5jbHVkZSA8QVZGb3VuZGF0aW9uL0FWU3BlZWNoU3ludGhlc2lzLmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91
bmRhdGlvbikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWU3BlZWNoU3ludGhlc2l6
ZXIpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlNwZWVjaFV0dGVyYW5jZSkKK1NP
RlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWU3BlZWNoU3ludGhlc2lzVm9pY2UpCisKK1NP
RlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFWU3BlZWNoVXR0ZXJhbmNlRGVmYXVsdFNw
ZWVjaFJhdGUsIGZsb2F0KQorU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91bmRhdGlvbiwgQVZTcGVl
Y2hVdHRlcmFuY2VNYXhpbXVtU3BlZWNoUmF0ZSwgZmxvYXQpCisKKyNkZWZpbmUgQVZTcGVlY2hV
dHRlcmFuY2VEZWZhdWx0U3BlZWNoUmF0ZSBnZXRBVlNwZWVjaFV0dGVyYW5jZURlZmF1bHRTcGVl
Y2hSYXRlKCkKKyNkZWZpbmUgQVZTcGVlY2hVdHRlcmFuY2VNYXhpbXVtU3BlZWNoUmF0ZSBnZXRB
VlNwZWVjaFV0dGVyYW5jZU1heGltdW1TcGVlY2hSYXRlKCkKKworI2RlZmluZSBBVlNwZWVjaFN5
bnRoZXNpemVyQ2xhc3MgZ2V0QVZTcGVlY2hTeW50aGVzaXplckNsYXNzKCkKKyNkZWZpbmUgQVZT
cGVlY2hVdHRlcmFuY2VDbGFzcyBnZXRBVlNwZWVjaFV0dGVyYW5jZUNsYXNzKCkKKyNkZWZpbmUg
QVZTcGVlY2hTeW50aGVzaXNWb2ljZUNsYXNzIGdldEFWU3BlZWNoU3ludGhlc2lzVm9pY2VDbGFz
cygpCisKK0BpbnRlcmZhY2UgV2ViU3BlZWNoU3ludGhlc2lzV3JhcHBlciA6IE5TT2JqZWN0PEFW
U3BlZWNoU3ludGhlc2l6ZXJEZWxlZ2F0ZT4KK3sKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybVNwZWVj
aFN5bnRoZXNpemVyKiBtX3N5bnRoZXNpemVyT2JqZWN0OworICAgIC8vIEhvbGQgYSBSZWYgdG8g
dGhlIHV0dGVyYW5jZSBzbyB0aGF0IGl0IHdvbid0IGRpc2FwcGVhciB1bnRpbCB0aGUgc3ludGgg
aXMgZG9uZSB3aXRoIGl0LgorICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpc1V0dGVyYW5jZT4gbV91dHRlcmFuY2U7CisgICAgCisgICAgUmV0YWluUHRyPEFWU3BlZWNo
U3ludGhlc2l6ZXI+IG1fc3ludGhlc2l6ZXI7Cit9CisKKy0gKFdlYlNwZWVjaFN5bnRoZXNpc1dy
YXBwZXIgKilpbml0V2l0aFNwZWVjaFN5bnRoZXNpemVyOihXZWJDb3JlOjpQbGF0Zm9ybVNwZWVj
aFN5bnRoZXNpemVyKilzeW50aGVzaXplcjsKKy0gKHZvaWQpc3BlYWtVdHRlcmFuY2U6KFBhc3NS
ZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U+KXV0dGVyYW5j
ZTsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViU3BlZWNoU3ludGhlc2lzV3JhcHBlcgor
CistIChXZWJTcGVlY2hTeW50aGVzaXNXcmFwcGVyICopaW5pdFdpdGhTcGVlY2hTeW50aGVzaXpl
cjooV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplciopc3ludGhlc2l6ZXIKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAK
KyAgICBtX3N5bnRoZXNpemVyT2JqZWN0ID0gc3ludGhlc2l6ZXI7CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKGZsb2F0KW1hcFNwZWVjaFJhdGVUb1BsYXRmb3JtUmF0ZTooZmxvYXQpcmF0ZQor
eworICAgIC8vIFdlYlNwZWVjaCBzYXlzIHRvIGdvIGZyb20gLjEgLT4gMTAgKGRlZmF1bHQgMSkK
KyAgICAvLyBBVlNwZWVjaFN5bnRoZXNpemVyIGFza3MgZm9yIDAgLT4gMSAoZGVmYXVsdC4gNSkK
KyAgICBpZiAocmF0ZSA8IDEpCisgICAgICAgIHJhdGUgKj0gQVZTcGVlY2hVdHRlcmFuY2VEZWZh
dWx0U3BlZWNoUmF0ZTsKKyAgICBlbHNlCisgICAgICAgIHJhdGUgPSBBVlNwZWVjaFV0dGVyYW5j
ZURlZmF1bHRTcGVlY2hSYXRlICsgKChyYXRlIC0gMSkgKiAoQVZTcGVlY2hVdHRlcmFuY2VNYXhp
bXVtU3BlZWNoUmF0ZSAtIEFWU3BlZWNoVXR0ZXJhbmNlRGVmYXVsdFNwZWVjaFJhdGUpKTsKKyAg
ICAKKyAgICByZXR1cm4gcmF0ZTsKK30KKworLSAodm9pZClzcGVha1V0dGVyYW5jZTooUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZT4pdXR0ZXJhbmNl
Cit7CisgICAgLy8gV2hlbiBzcGVhayBpcyBjYWxsZWQgd2Ugc2hvdWxkIG5vdCBoYXZlIGFuIGV4
aXN0aW5nIHNwZWVjaCB1dHRlcmFuY2Ugb3V0c3RhbmRpbmcuCisgICAgQVNTRVJUKCFtX3V0dGVy
YW5jZSk7CisgICAgQVNTRVJUKHV0dGVyYW5jZSk7CisgICAgCisgICAgaWYgKCF1dHRlcmFuY2Up
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIW1fc3ludGhlc2l6ZXIpIHsKKyAgICAg
ICAgbV9zeW50aGVzaXplciA9IGFkb3B0TlMoW1tBVlNwZWVjaFN5bnRoZXNpemVyQ2xhc3MgYWxs
b2NdIGluaXRdKTsKKyAgICAgICAgW21fc3ludGhlc2l6ZXIgc2V0RGVsZWdhdGU6c2VsZl07Cisg
ICAgfQorCisgICAgLy8gQ2hvb3NlIHRoZSBiZXN0IHZvaWNlLCBieSBmaXJzdCBsb29raW5nIGF0
IHRoZSB1dHRlcmFuY2Ugdm9pY2UsIHRoZW4gdGhlIHV0dGVyYW5jZSBsYW5ndWFnZSwKKyAgICAv
LyB0aGVuIGNob29zZSB0aGUgZGVmYXVsdCBsYW5ndWFnZS4KKyAgICBXZWJDb3JlOjpQbGF0Zm9y
bVNwZWVjaFN5bnRoZXNpc1ZvaWNlKiB1dHRlcmFuY2VWb2ljZSA9IHV0dGVyYW5jZS0+dm9pY2Uo
KTsKKyAgICBOU1N0cmluZyAqdm9pY2VMYW5ndWFnZSA9IG5pbDsKKyAgICBpZiAoIXV0dGVyYW5j
ZVZvaWNlKSB7CisgICAgICAgIGlmICh1dHRlcmFuY2UtPmxhbmcoKS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICB2b2ljZUxhbmd1YWdlID0gW0FWU3BlZWNoU3ludGhlc2lzVm9pY2VDbGFzcyBjdXJy
ZW50TGFuZ3VhZ2VDb2RlXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdm9pY2VMYW5ndWFn
ZSA9IHV0dGVyYW5jZS0+bGFuZygpOworICAgIH0gZWxzZQorICAgICAgICB2b2ljZUxhbmd1YWdl
ID0gdXR0ZXJhbmNlLT52b2ljZSgpLT5sYW5nKCk7CisgICAgCisgICAgQVZTcGVlY2hTeW50aGVz
aXNWb2ljZSAqYXZWb2ljZSA9IG5pbDsKKyAgICBpZiAodm9pY2VMYW5ndWFnZSkKKyAgICAgICAg
YXZWb2ljZSA9IFtBVlNwZWVjaFN5bnRoZXNpc1ZvaWNlQ2xhc3Mgdm9pY2VXaXRoTGFuZ3VhZ2U6
dm9pY2VMYW5ndWFnZV07CisKKyAgICBBVlNwZWVjaFV0dGVyYW5jZSAqYXZVdHRlcmFuY2UgPSBb
QVZTcGVlY2hVdHRlcmFuY2VDbGFzcyBzcGVlY2hVdHRlcmFuY2VXaXRoU3RyaW5nOnV0dGVyYW5j
ZS0+dGV4dCgpXTsKKworICAgIFthdlV0dGVyYW5jZSBzZXRSYXRlOltzZWxmIG1hcFNwZWVjaFJh
dGVUb1BsYXRmb3JtUmF0ZTp1dHRlcmFuY2UtPnJhdGUoKV1dOworICAgIFthdlV0dGVyYW5jZSBz
ZXRWb2x1bWU6dXR0ZXJhbmNlLT52b2x1bWUoKV07CisgICAgW2F2VXR0ZXJhbmNlIHNldFBpdGNo
TXVsdGlwbGllcjp1dHRlcmFuY2UtPnBpdGNoKCldOworICAgIFthdlV0dGVyYW5jZSBzZXRWb2lj
ZTphdlZvaWNlXTsKKyAgICBtX3V0dGVyYW5jZSA9IHV0dGVyYW5jZTsKKyAgICAKKyAgICBbbV9z
eW50aGVzaXplciBzcGVha1V0dGVyYW5jZTphdlV0dGVyYW5jZV07Cit9CisKKy0gKHZvaWQpcGF1
c2UKK3sKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
W21fc3ludGhlc2l6ZXIgcGF1c2VTcGVha2luZ0F0Qm91bmRhcnk6QVZTcGVlY2hCb3VuZGFyeUlt
bWVkaWF0ZV07Cit9CisKKy0gKHZvaWQpcmVzdW1lCit7CisgICAgaWYgKCFtX3V0dGVyYW5jZSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFttX3N5bnRoZXNpemVyIGNvbnRpbnVlU3BlYWtp
bmddOworfQorCistICh2b2lkKWNhbmNlbAoreworICAgIGlmICghbV91dHRlcmFuY2UpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBbbV9zeW50aGVzaXplciBzdG9wU3BlYWtpbmdBdEJvdW5k
YXJ5OkFWU3BlZWNoQm91bmRhcnlJbW1lZGlhdGVdOworfQorCistICh2b2lkKXNwZWVjaFN5bnRo
ZXNpemVyOihBVlNwZWVjaFN5bnRoZXNpemVyICopc3ludGhlc2l6ZXIgZGlkU3RhcnRTcGVlY2hV
dHRlcmFuY2U6KEFWU3BlZWNoVXR0ZXJhbmNlICopdXR0ZXJhbmNlCit7CisgICAgVU5VU0VEX1BB
UkFNKHN5bnRoZXNpemVyKTsKKyAgICBVTlVTRURfUEFSQU0odXR0ZXJhbmNlKTsKKyAgICBpZiAo
IW1fdXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zeW50aGVzaXplck9i
amVjdC0+Y2xpZW50KCktPmRpZFN0YXJ0U3BlYWtpbmcobV91dHRlcmFuY2UpOworfQorCistICh2
b2lkKXNwZWVjaFN5bnRoZXNpemVyOihBVlNwZWVjaFN5bnRoZXNpemVyICopc3ludGhlc2l6ZXIg
ZGlkRmluaXNoU3BlZWNoVXR0ZXJhbmNlOihBVlNwZWVjaFV0dGVyYW5jZSAqKXV0dGVyYW5jZQor
eworICAgIFVOVVNFRF9QQVJBTShzeW50aGVzaXplcik7CisgICAgVU5VU0VEX1BBUkFNKHV0dGVy
YW5jZSk7CisgICAgaWYgKCFtX3V0dGVyYW5jZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IC8vIENsZWFyIHRoZSBtX3V0dGVyYW5jZSB2YXJpYWJsZSBpbiBjYXNlIGZpbmlzaCBzcGVha2lu
ZyBraWNrcyBvZmYgYSBuZXcgc3BlYWtpbmcgam9iIGltbWVkaWF0ZWx5LgorICAgIFJlZlB0cjxX
ZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZT4gcGxhdGZvcm1VdHRlcmFu
Y2UgPSBtX3V0dGVyYW5jZTsKKyAgICBtX3V0dGVyYW5jZSA9IDA7CisgICAgCisgICAgbV9zeW50
aGVzaXplck9iamVjdC0+Y2xpZW50KCktPmRpZEZpbmlzaFNwZWFraW5nKHBsYXRmb3JtVXR0ZXJh
bmNlKTsKK30KKworLSAodm9pZClzcGVlY2hTeW50aGVzaXplcjooQVZTcGVlY2hTeW50aGVzaXpl
ciAqKXN5bnRoZXNpemVyIGRpZFBhdXNlU3BlZWNoVXR0ZXJhbmNlOihBVlNwZWVjaFV0dGVyYW5j
ZSAqKXV0dGVyYW5jZQoreworICAgIFVOVVNFRF9QQVJBTShzeW50aGVzaXplcik7CisgICAgVU5V
U0VEX1BBUkFNKHV0dGVyYW5jZSk7CisgICAgaWYgKCFtX3V0dGVyYW5jZSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIG1fc3ludGhlc2l6ZXJPYmplY3QtPmNsaWVudCgpLT5kaWRQYXVzZVNw
ZWFraW5nKG1fdXR0ZXJhbmNlKTsKK30KKworLSAodm9pZClzcGVlY2hTeW50aGVzaXplcjooQVZT
cGVlY2hTeW50aGVzaXplciAqKXN5bnRoZXNpemVyIGRpZENvbnRpbnVlU3BlZWNoVXR0ZXJhbmNl
OihBVlNwZWVjaFV0dGVyYW5jZSAqKXV0dGVyYW5jZQoreworICAgIFVOVVNFRF9QQVJBTShzeW50
aGVzaXplcik7CisgICAgVU5VU0VEX1BBUkFNKHV0dGVyYW5jZSk7CisgICAgaWYgKCFtX3V0dGVy
YW5jZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fc3ludGhlc2l6ZXJPYmplY3QtPmNs
aWVudCgpLT5kaWRSZXN1bWVTcGVha2luZyhtX3V0dGVyYW5jZSk7Cit9CisKKy0gKHZvaWQpc3Bl
ZWNoU3ludGhlc2l6ZXI6KEFWU3BlZWNoU3ludGhlc2l6ZXIgKilzeW50aGVzaXplciBkaWRDYW5j
ZWxTcGVlY2hVdHRlcmFuY2U6KEFWU3BlZWNoVXR0ZXJhbmNlICopdXR0ZXJhbmNlCit7CisgICAg
VU5VU0VEX1BBUkFNKHN5bnRoZXNpemVyKTsKKyAgICBVTlVTRURfUEFSQU0odXR0ZXJhbmNlKTsK
KyAgICBpZiAoIW1fdXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ2xl
YXIgdGhlIG1fdXR0ZXJhbmNlIHZhcmlhYmxlIGluIGNhc2UgZmluaXNoIHNwZWFraW5nIGtpY2tz
IG9mZiBhIG5ldyBzcGVha2luZyBqb2IgaW1tZWRpYXRlbHkuCisgICAgUmVmUHRyPFdlYkNvcmU6
OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPiBwbGF0Zm9ybVV0dGVyYW5jZSA9IG1f
dXR0ZXJhbmNlOworICAgIG1fdXR0ZXJhbmNlID0gMDsKKyAgICAKKyAgICBtX3N5bnRoZXNpemVy
T2JqZWN0LT5jbGllbnQoKS0+ZGlkRmluaXNoU3BlYWtpbmcocGxhdGZvcm1VdHRlcmFuY2UpOwor
fQorCistICh2b2lkKXNwZWVjaFN5bnRoZXNpemVyOihBVlNwZWVjaFN5bnRoZXNpemVyICopc3lu
dGhlc2l6ZXIgd2lsbFNwZWFrUmFuZ2VPZlNwZWVjaFN0cmluZzooTlNSYW5nZSljaGFyYWN0ZXJS
YW5nZSB1dHRlcmFuY2U6KEFWU3BlZWNoVXR0ZXJhbmNlICopdXR0ZXJhbmNlCit7CisgICAgVU5V
U0VEX1BBUkFNKHN5bnRoZXNpemVyKTsKKyAgICBVTlVTRURfUEFSQU0odXR0ZXJhbmNlKTsKKyAg
ICAKKyAgICBpZiAoIW1fdXR0ZXJhbmNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8g
aU9TIG9ubHkgc3VwcG9ydHMgd29yZCBib3VuZGFyaWVzLgorICAgIG1fc3ludGhlc2l6ZXJPYmpl
Y3QtPmNsaWVudCgpLT5ib3VuZGFyeUV2ZW50T2NjdXJyZWQobV91dHRlcmFuY2UsIFdlYkNvcmU6
OlNwZWVjaFdvcmRCb3VuZGFyeSwgY2hhcmFjdGVyUmFuZ2UubG9jYXRpb24pOworfQorCitAZW5k
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcjo6UGxh
dGZvcm1TcGVlY2hTeW50aGVzaXplcihQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyQ2xpZW50KiBj
bGllbnQpCisgICAgOiBtX3NwZWVjaFN5bnRoZXNpemVyQ2xpZW50KGNsaWVudCkKK3sKK30KKwor
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcjo6flBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIoKQor
eworfQorCit2b2lkIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXI6OmluaXRpYWxpemVWb2ljZUxp
c3QoKQoreworICAgIGZvciAoQVZTcGVlY2hTeW50aGVzaXNWb2ljZSAqdm9pY2UgaW4gW0FWU3Bl
ZWNoU3ludGhlc2lzVm9pY2VDbGFzcyBzcGVlY2hWb2ljZXNdKSB7CisgICAgICAgIC8vIGlPUyBT
cGVlY2ggdm9pY2VzIG9ubHkgZXhwb3NlIHRoZWlyIGxhbmd1YWdlIGFzIGFuIGlkZW50aWZ5aW5n
IGFzcGVjdC4KKyAgICAgICAgTlNTdHJpbmcgKmxhbmd1YWdlID0gW3ZvaWNlIGxhbmd1YWdlXTsK
KyAgICAgICAgTlNTdHJpbmcgKnZvaWNlVVJJID0gbGFuZ3VhZ2U7CisgICAgICAgIE5TU3RyaW5n
ICpuYW1lID0gbGFuZ3VhZ2U7CisgICAgICAgIGJvb2wgaXNEZWZhdWx0ID0gdHJ1ZTsKKyAgICAg
ICAgCisgICAgICAgIG1fdm9pY2VMaXN0LmFwcGVuZChQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1Zv
aWNlOjpjcmVhdGUodm9pY2VVUkksIG5hbWUsIGxhbmd1YWdlLCB0cnVlLCBpc0RlZmF1bHQpKTsK
KyAgICB9Cit9CisKK3ZvaWQgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcjo6cGF1c2UoKQorewor
ICAgIFttX3BsYXRmb3JtU3BlZWNoV3JhcHBlci5nZXQoKSBwYXVzZV07Cit9CisKK3ZvaWQgUGxh
dGZvcm1TcGVlY2hTeW50aGVzaXplcjo6cmVzdW1lKCkKK3sKKyAgICBbbV9wbGF0Zm9ybVNwZWVj
aFdyYXBwZXIuZ2V0KCkgcmVzdW1lXTsKK30KKwordm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
emVyOjpzcGVhayhQYXNzUmVmUHRyPFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPiB1
dHRlcmFuY2UpCit7CisgICAgaWYgKCFtX3BsYXRmb3JtU3BlZWNoV3JhcHBlcikKKyAgICAgICAg
bV9wbGF0Zm9ybVNwZWVjaFdyYXBwZXIgPSBhZG9wdE5TKFtbV2ViU3BlZWNoU3ludGhlc2lzV3Jh
cHBlciBhbGxvY10gaW5pdFdpdGhTcGVlY2hTeW50aGVzaXplcjp0aGlzXSk7CisgICAgCisgICAg
W21fcGxhdGZvcm1TcGVlY2hXcmFwcGVyLmdldCgpIHNwZWFrVXR0ZXJhbmNlOnV0dGVyYW5jZS5n
ZXQoKV07Cit9CisKK3ZvaWQgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcjo6Y2FuY2VsKCkKK3sK
KyAgICBbbV9wbGF0Zm9ybVNwZWVjaFdyYXBwZXIuZ2V0KCkgY2FuY2VsXTsKK30KKyAgICAKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1NTTEtleUdlbmVyYXRvcklPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvU1NMS2V5R2VuZXJhdG9ySU9TLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNGNjZTM3YzllN2M5
N2RlNTAyYWQyZGM0N2FiODBkNzdhYTdlMTBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1NTTEtleUdlbmVyYXRvcklPUy5jcHAKQEAgLTAsMCArMSw0MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTU0xLZXlHZW5lcmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2b2lkIGdldFN1cHBvcnRlZEtleVNpemVzKFZlY3RvcjxTdHJpbmc+JikKK3sKK30KKwor
U3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXpl
SW5kZXgsIGNvbnN0IFN0cmluZyYgY2hhbGxlbmdlU3RyaW5nLCBjb25zdCBVUkwmKQoreworICAg
IFVOVVNFRF9QQVJBTShrZXlTaXplSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShjaGFsbGVuZ2VT
dHJpbmcpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9y
SU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2Nyb2xsQW5pbWF0b3JJT1MuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44MGQxOTdiMzAxNmRhOGIyZDU1NmQ4M2VlNTI1OWM1ODU4MGQ2OWZhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbEFuaW1hdG9y
SU9TLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5pbWF0
b3JJT1NfaAorI2RlZmluZSBTY3JvbGxBbmltYXRvcklPU19oCisKKyNpbmNsdWRlICJTY3JvbGxB
bmltYXRvci5oIgorCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9ySU9T
IDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK3B1YmxpYzoKKyAgICBTY3JvbGxBbmltYXRvcklP
UyhTY3JvbGxhYmxlQXJlYSopOworICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9ySU9TKCk7CisK
KyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVUb3VjaEV2
ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpIE9WRVJSSURFOworI2VuZGlmCisKK3ByaXZh
dGU6CisgICAgdm9pZCBkZXRlcm1pbmVTY3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UoY29u
c3QgSW50U2l6ZSYgdG91Y2hEZWx0YSk7CisKKyAgICAvLyBTdGF0ZSBmb3IgaGFuZGxpbmcgc2Vx
dWVuY2VzIG9mIHRvdWNoZXMgaW4gZGVmYXVsdFRvdWNoRXZlbnRIYW5kbGVyLgorICAgIGVudW0g
QXhpc0xhdGNoIHsKKyAgICAgICAgQXhpc0xhdGNoTm90Q29tcHV0ZWQsCisgICAgICAgIEF4aXNM
YXRjaE5vbmUsCisgICAgICAgIEF4aXNMYXRjaEhvcml6b250YWwsCisgICAgICAgIEF4aXNMYXRj
aFZlcnRpY2FsCisgICAgfTsKKyAgICBBeGlzTGF0Y2ggbV90b3VjaFNjcm9sbEF4aXNMYXRjaDsK
KyAgICBib29sIG1faW5Ub3VjaFNlcXVlbmNlOworICAgIGJvb2wgbV9jb21taXR0ZWRUb1Njcm9s
bEF4aXM7CisgICAgYm9vbCBtX3N0YXJ0ZWRTY3JvbGw7CisgICAgSW50UG9pbnQgbV9maXJzdFRv
dWNoUG9pbnQ7CisgICAgSW50UG9pbnQgbV9sYXN0VG91Y2hQb2ludDsKKworICAgIC8vIFdoZW4g
d2UncmUgaW4gYSB0b3VjaCBzZXF1ZW5jZSwgdGhpcyB3aWxsIHBvaW50IHRvIHRoZSBzY3JvbGxh
YmxlIGFyZWEgdGhhdAorICAgIC8vIHNob3VsZCBhY3R1YWxseSBiZSBzY3JvbGxlZCBkdXJpbmcg
dGhlIHNlcXVlbmNlLgorICAgIFNjcm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhRm9yVG91
Y2hTZXF1ZW5jZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNj
cm9sbEFuaW1hdG9ySU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9TY3JvbGxBbmltYXRvcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3Jv
bGxBbmltYXRvcklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYWY1MjEyOGE1M2FkNzEwMDBhNzBkMGQxNmMz
OGI0N2I1MTQwZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Njcm9sbEFuaW1hdG9ySU9TLm1tCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9ySU9TLmgiCisKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVRv
dWNoRXZlbnRJT1MuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlNjcm9s
bGFibGVBcmVhLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxTY3JvbGxB
bmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJs
ZUFyZWEpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvcklPUyhzY3Jv
bGxhYmxlQXJlYSkpOworfQorCitTY3JvbGxBbmltYXRvcklPUzo6U2Nyb2xsQW5pbWF0b3JJT1Mo
U2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Ny
b2xsYWJsZUFyZWEpCisgICAgLCBtX3RvdWNoU2Nyb2xsQXhpc0xhdGNoKEF4aXNMYXRjaE5vdENv
bXB1dGVkKQorICAgICwgbV9pblRvdWNoU2VxdWVuY2UoZmFsc2UpCisgICAgLCBtX2NvbW1pdHRl
ZFRvU2Nyb2xsQXhpcyhmYWxzZSkKKyAgICAsIG1fc3RhcnRlZFNjcm9sbChmYWxzZSkKKyAgICAs
IG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlKDApCit7Cit9CisKK1Njcm9sbEFuaW1h
dG9ySU9TOjp+U2Nyb2xsQW5pbWF0b3JJT1MoKQoreworfQorCitib29sIFNjcm9sbEFuaW1hdG9y
SU9TOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVu
dCkKK3sKKyAgICBpZiAodG91Y2hFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6VG91Y2hT
dGFydCAmJiB0b3VjaEV2ZW50LnRvdWNoQ291bnQoKSA9PSAxKSB7CisgICAgICAgIG1fZmlyc3RU
b3VjaFBvaW50ID0gdG91Y2hFdmVudC50b3VjaExvY2F0aW9uQXRJbmRleCgwKTsKKyAgICAgICAg
bV9sYXN0VG91Y2hQb2ludCA9IG1fZmlyc3RUb3VjaFBvaW50OworICAgICAgICBtX2luVG91Y2hT
ZXF1ZW5jZSA9IHRydWU7CisgICAgICAgIG1fY29tbWl0dGVkVG9TY3JvbGxBeGlzID0gZmFsc2U7
CisgICAgICAgIG1fc3RhcnRlZFNjcm9sbCA9IGZhbHNlOworICAgICAgICBtX3RvdWNoU2Nyb2xs
QXhpc0xhdGNoID0gQXhpc0xhdGNoTm90Q29tcHV0ZWQ7CisgICAgICAgIC8vIE5ldmVyIGNsYWlt
IHRvIGhhdmUgaGFuZGxlZCB0aGUgVG91Y2hTdGFydCwgYmVjYXVzZSB0aGF0IHdpbGwga2lsbCBk
ZWZhdWx0IHNjcm9sbGluZyBiZWhhdmlvci4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmICghbV9pblRvdWNoU2VxdWVuY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICh0b3VjaEV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpUb3VjaEVuZCB8fCB0
b3VjaEV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpUb3VjaENhbmNlbCkgeworICAgICAg
ICBtX2luVG91Y2hTZXF1ZW5jZSA9IGZhbHNlOworICAgICAgICBtX3Njcm9sbGFibGVBcmVhRm9y
VG91Y2hTZXF1ZW5jZSA9IDA7CisgICAgICAgIGlmIChtX3N0YXJ0ZWRTY3JvbGwpCisgICAgICAg
ICAgICBzY3JvbGxhYmxlQXJlYSgpLT5kaWRFbmRTY3JvbGwoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIElmIGEgc2Vjb25kIHRvdWNoIGFwcGVhcnMsIGFzc3VtZSB0
aGF0IHRoZSB1c2VyIGlzIHRyeWluZyB0byB6b29tLCBhbmQgYmFpbCBvbiB0aGUgc2Nyb2xsaW5n
IHNlcXVlbmNlLgorICAgIC8vIEZJWE1FOiBpZiB0aGF0IHNlY29uZCB0b3VjaCBpcyBpbnNpZGUg
dGhlIHNjcm9sbGFibGUgYXJlYSwgc2hvdWxkIHdlIGtlZXAgc2Nyb2xsaW5nPworICAgIGlmICh0
b3VjaEV2ZW50LnRvdWNoQ291bnQoKSAhPSAxKSB7CisgICAgICAgIG1faW5Ub3VjaFNlcXVlbmNl
ID0gZmFsc2U7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlID0gMDsK
KyAgICAgICAgaWYgKG1fc3RhcnRlZFNjcm9sbCkKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVh
KCktPmRpZEVuZFNjcm9sbCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIEludFBvaW50IGN1cnJlbnRQb2ludCA9IHRvdWNoRXZlbnQudG91Y2hMb2NhdGlvbkF0SW5k
ZXgoMCk7CisKKyAgICBJbnRTaXplIHRvdWNoRGVsdGEgPSBtX2xhc3RUb3VjaFBvaW50IC0gY3Vy
cmVudFBvaW50OworICAgIG1fbGFzdFRvdWNoUG9pbnQgPSBjdXJyZW50UG9pbnQ7CisKKyAgICBp
ZiAoIW1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlKQorICAgICAgICBkZXRlcm1pbmVT
Y3JvbGxhYmxlQXJlYUZvclRvdWNoU2VxdWVuY2UodG91Y2hEZWx0YSk7CisKKyAgICBpZiAoIW1f
Y29tbWl0dGVkVG9TY3JvbGxBeGlzKSB7CisgICAgICAgIGJvb2wgaG9yaXpvbnRhbGx5U2Nyb2xs
YWJsZSA9IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUoSG9yaXpvbnRhbFNjcm9sbGJhcik7
CisgICAgICAgIGJvb2wgdmVydGljYWxseVNjcm9sbGFibGUgPSBtX3Njcm9sbGFibGVBcmVhLT5z
Y3JvbGxTaXplKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgICAgICBpZiAoIWhvcml6b250YWxs
eVNjcm9sbGFibGUgJiYgIXZlcnRpY2FsbHlTY3JvbGxhYmxlKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIEludFNpemUgZGVsdGFGcm9tU3RhcnQgPSBtX2ZpcnN0VG91Y2hQ
b2ludCAtIGN1cnJlbnRQb2ludDsKKyAgICAKKyAgICAgICAgY29uc3QgaW50IGxhdGNoQXhpc01v
dmVtZW50VGhyZXNob2xkID0gMTA7CisgICAgICAgIGlmICghaG9yaXpvbnRhbGx5U2Nyb2xsYWJs
ZSAmJiB2ZXJ0aWNhbGx5U2Nyb2xsYWJsZSkgeworICAgICAgICAgICAgbV90b3VjaFNjcm9sbEF4
aXNMYXRjaCA9IEF4aXNMYXRjaFZlcnRpY2FsOworICAgICAgICAgICAgaWYgKGFicyhkZWx0YUZy
b21TdGFydC5oZWlnaHQoKSkgPj0gbGF0Y2hBeGlzTW92ZW1lbnRUaHJlc2hvbGQpCisgICAgICAg
ICAgICAgICAgbV9jb21taXR0ZWRUb1Njcm9sbEF4aXMgPSB0cnVlOworICAgICAgICB9IGVsc2Ug
aWYgKGhvcml6b250YWxseVNjcm9sbGFibGUgJiYgIXZlcnRpY2FsbHlTY3JvbGxhYmxlKSB7Cisg
ICAgICAgICAgICBtX3RvdWNoU2Nyb2xsQXhpc0xhdGNoID0gQXhpc0xhdGNoSG9yaXpvbnRhbDsK
KyAgICAgICAgICAgIGlmIChhYnMoZGVsdGFGcm9tU3RhcnQud2lkdGgoKSkgPj0gbGF0Y2hBeGlz
TW92ZW1lbnRUaHJlc2hvbGQpCisgICAgICAgICAgICAgICAgbV9jb21taXR0ZWRUb1Njcm9sbEF4
aXMgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9jb21taXR0ZWRUb1Nj
cm9sbEF4aXMgPSB0cnVlOworCisgICAgICAgICAgICBpZiAobV90b3VjaFNjcm9sbEF4aXNMYXRj
aCA9PSBBeGlzTGF0Y2hOb3RDb21wdXRlZCkgeworICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0
IGxvY2tBbmdsZURlZ3JlZXMgPSAyMDsKKyAgICAgICAgICAgICAgICBpZiAoZGVsdGFGcm9tU3Rh
cnQud2lkdGgoKSAmJiBkZWx0YUZyb21TdGFydC5oZWlnaHQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBkcmFnQW5nbGUgPSBhdGFuZihmYWJzZihkZWx0YUZyb21TdGFydC5oZWlnaHQo
KSkgLyBmYWJzZihkZWx0YUZyb21TdGFydC53aWR0aCgpKSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChkcmFnQW5nbGUgPD0gZGVnMnJhZChsb2NrQW5nbGVEZWdyZWVzKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdG91Y2hTY3JvbGxBeGlzTGF0Y2ggPSBBeGlzTGF0Y2hIb3Jpem9udGFs
OworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkcmFnQW5nbGUgPj0gZGVnMnJhZCg5MCAt
IGxvY2tBbmdsZURlZ3JlZXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV90b3VjaFNjcm9s
bEF4aXNMYXRjaCA9IEF4aXNMYXRjaFZlcnRpY2FsOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFtX2NvbW1pdHRlZFRv
U2Nyb2xsQXhpcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29s
IGhhbmRsZWQgPSBmYWxzZTsKKyAgICAKKyAgICAvLyBIb3Jpem9udGFsCisgICAgaWYgKG1fdG91
Y2hTY3JvbGxBeGlzTGF0Y2ggIT0gQXhpc0xhdGNoVmVydGljYWwpIHsKKyAgICAgICAgaW50IGRl
bHRhID0gdG91Y2hEZWx0YS53aWR0aCgpOworICAgICAgICBoYW5kbGVkIHw9IG1fc2Nyb2xsYWJs
ZUFyZWFGb3JUb3VjaFNlcXVlbmNlLT5zY3JvbGwoZGVsdGEgPCAwID8gU2Nyb2xsTGVmdCA6IFNj
cm9sbFJpZ2h0LCBTY3JvbGxCeVBpeGVsLCBmYWJzZihkZWx0YSkpOworICAgIH0KKyAgICAKKyAg
ICAvLyBWZXJ0aWNhbAorICAgIGlmIChtX3RvdWNoU2Nyb2xsQXhpc0xhdGNoICE9IEF4aXNMYXRj
aEhvcml6b250YWwpIHsKKyAgICAgICAgaW50IGRlbHRhID0gdG91Y2hEZWx0YS5oZWlnaHQoKTsK
KyAgICAgICAgaGFuZGxlZCB8PSBtX3Njcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZS0+c2Ny
b2xsKGRlbHRhIDwgMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlQaXhlbCwgZmFi
c2YoZGVsdGEpKTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJuIGZhbHNlIHVudGlsIHdlIG1h
bmFnZSB0byBzY3JvbGwgYXQgYWxsLCBhbmQgdGhlbiBrZWVwIHJldHVybmluZyB0cnVlIHVudGls
IHRoZSBnZXN0dXJlIGVuZHMuCisgICAgaWYgKCFtX3N0YXJ0ZWRTY3JvbGwpIHsKKyAgICAgICAg
aWYgKCFoYW5kbGVkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX3N0YXJ0
ZWRTY3JvbGwgPSB0cnVlOworICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLT5kaWRTdGFydFNjcm9s
bCgpOworICAgIH0gZWxzZSBpZiAoaGFuZGxlZCkKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEoKS0+
ZGlkVXBkYXRlU2Nyb2xsKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3JJT1M6OmRldGVybWluZVNjcm9sbGFibGVBcmVhRm9yVG91Y2hTZXF1ZW5jZShj
b25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsYWJsZUFy
ZWFGb3JUb3VjaFNlcXVlbmNlKTsKKworICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJl
YSA9IG1fc2Nyb2xsYWJsZUFyZWE7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKCFz
Y3JvbGxhYmxlQXJlYS0+aXNQaW5uZWRJbkJvdGhEaXJlY3Rpb25zKHNjcm9sbERlbHRhKSkKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIFNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdBcmVh
ID0gc2Nyb2xsYWJsZUFyZWEtPmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCk7CisgICAgICAgIGlm
ICghZW5jbG9zaW5nQXJlYSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHNjcm9sbGFi
bGVBcmVhID0gZW5jbG9zaW5nQXJlYTsKKyAgICB9CisKKyAgICBBU1NFUlQoc2Nyb2xsYWJsZUFy
ZWEpOworICAgIG1fc2Nyb2xsYWJsZUFyZWFGb3JUb3VjaFNlcXVlbmNlID0gc2Nyb2xsYWJsZUFy
ZWE7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxWaWV3SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1Njcm9sbFZpZXdJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjBiMGFkMTMyYmI0M2ViZjE2ZDBi
N2YxNGFkOTVkYWE3NzlmYTQ3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9TY3JvbGxWaWV3SU9TLm1tCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTY3JvbGxWaWV3
LmgiCisKKyNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiRmxvYXRSZWN0Lmgi
CisjaW1wb3J0ICJJbnRSZWN0LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2ltcG9ydCAiV0FLQXBwS2l0U3R1YnMuaCIKKyNpbXBvcnQgIldBS0Ns
aXBWaWV3LmgiCisjaW1wb3J0ICJXQUtTY3JvbGxWaWV3LmgiCisjaW1wb3J0ICJXQUtWaWV3UHJp
dmF0ZS5oIgorI2ltcG9ydCAiV0FLV2luZG93LmgiCisjaW1wb3J0ICJXS1ZpZXdQcml2YXRlLmgi
CisjaW1wb3J0ICJXZWJDb3JlRnJhbWVWaWV3LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIE5TU2Nyb2xsVmlldzxXZWJDb3JlRnJhbWVT
Y3JvbGxWaWV3PiAqU2Nyb2xsVmlldzo6c2Nyb2xsVmlldygpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFwbGF0Zm9ybVdpZGdldCgpIHx8IFtwbGF0Zm9ybVdpZGdldCgpIGlzS2luZE9mQ2xhc3M6W05T
U2Nyb2xsVmlldyBjbGFzc11dKTsKKyAgICBBU1NFUlQoIXBsYXRmb3JtV2lkZ2V0KCkgfHwgW3Bs
YXRmb3JtV2lkZ2V0KCkgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJDb3JlRnJhbWVT
Y3JvbGxWaWV3KV0pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOU1Njcm9sbFZpZXc8V2ViQ29y
ZUZyYW1lU2Nyb2xsVmlldz4gKj4ocGxhdGZvcm1XaWRnZXQoKSk7Cit9CisKK05TVmlldyAqU2Ny
b2xsVmlldzo6ZG9jdW1lbnRWaWV3KCkgY29uc3QKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CisgICAgcmV0dXJuIFtzY3JvbGxWaWV3KCkgZG9jdW1lbnRWaWV3XTsKKyAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBuaWw7Cit9CisKK3ZvaWQgU2Ny
b2xsVmlldzo6cGxhdGZvcm1BZGRDaGlsZChXaWRnZXQqIGNoaWxkKQoreworICAgIEFTU0VSVChj
aGlsZCAhPSB0aGlzKTsKKworICAgIGNoaWxkLT5hZGRUb1N1cGVydmlldyhkb2N1bWVudFZpZXco
KSk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1SZW1vdmVDaGlsZChXaWRnZXQqIGNo
aWxkKQoreworICAgIGNoaWxkLT5yZW1vdmVGcm9tU3VwZXJ2aWV3KCk7Cit9CisKK3ZvaWQgU2Ny
b2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxiYXJNb2RlcygpCit7CisgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOworICAgIFtzY3JvbGxWaWV3KCkgc2V0U2Nyb2xsaW5nTW9kZXM6bV9o
b3Jpem9udGFsU2Nyb2xsYmFyTW9kZSB2ZXJ0aWNhbDptX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZSBh
bmRMb2NrOk5PXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCit2b2lkIFNj
cm9sbFZpZXc6OnBsYXRmb3JtU2Nyb2xsYmFyTW9kZXMoU2Nyb2xsYmFyTW9kZSYgaG9yaXpvbnRh
bCwgU2Nyb2xsYmFyTW9kZSYgdmVydGljYWwpIGNvbnN0Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworICAgIFtzY3JvbGxWaWV3KCkgc2Nyb2xsaW5nTW9kZXM6Jmhvcml6b250
YWwgdmVydGljYWw6JnZlcnRpY2FsXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
fQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0Q2FuQmxpdE9uU2Nyb2xsKGJvb2wgY2Fu
QmxpdE9uU2Nyb2xsKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBb
W3Njcm9sbFZpZXcoKSBjb250ZW50Vmlld10gc2V0Q29waWVzT25TY3JvbGw6Y2FuQmxpdE9uU2Ny
b2xsXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitib29sIFNjcm9sbFZp
ZXc6OnBsYXRmb3JtQ2FuQmxpdE9uU2Nyb2xsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gW1tzY3Jv
bGxWaWV3KCkgY29udGVudFZpZXddIGNvcGllc09uU2Nyb2xsXTsKK30KKworSW50UmVjdCBTY3Jv
bGxWaWV3OjphY3R1YWxWaXNpYmxlQ29udGVudFJlY3QoKSBjb25zdAoreworICAgIENHUmVjdCBy
ID0gQ0dSZWN0WmVybzsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgV0FL
U2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19jYXN0PFdBS1Njcm9sbFZpZXcgKj4ocGxhdGZvcm1X
aWRnZXQoKSk7CisgICAgciA9IFt2aWV3IGFjdHVhbERvY3VtZW50VmlzaWJsZVJlY3RdOworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qo
cik7Cit9CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6dmlzaWJsZUV4dGVudENvbnRlbnRSZWN0KCkg
Y29uc3QKK3sKKyAgICBOU1Njcm9sbFZpZXcgKnZpZXcgPSBzdGF0aWNfY2FzdDxOU1Njcm9sbFZp
ZXcgKj4ocGxhdGZvcm1XaWRnZXQoKSk7CisKKyAgICBDR1JlY3QgciA9IENHUmVjdFplcm87Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIGlmIChbdmlldyBpc0tpbmRPZkNs
YXNzOltOU1Njcm9sbFZpZXcgY2xhc3NdXSkKKyAgICAgICAgciA9IFt2aWV3IGRvY3VtZW50Vmlz
aWJsZUV4dGVudF07CisgICAgZWxzZSBpZiAodmlldykgeworICAgICAgICByLm9yaWdpbiA9IFt2
aWV3IHZpc2libGVSZWN0XS5vcmlnaW47CisgICAgICAgIHIuc2l6ZSA9IFt2aWV3IGJvdW5kc10u
c2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTogV2ViS2l0MiBvbiBpT1MgZG9l
c24ndCBpbmZvcm0gdGhlIFdlYlByb2Nlc3Mgb2YgdGhlIGV4cG9zZWQgYXJlYS4KKyAgICAgICAg
cmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgY29udGVudHNTaXplKCkpOworICAgIH0KKworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qo
cik7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0QWN0dWFsU2Nyb2xsUG9zaXRpb24oY29uc3Qg
SW50UG9pbnQmIHBvc2l0aW9uKQoreworICAgIE5TU2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19j
YXN0PE5TU2Nyb2xsVmlldyAqPihwbGF0Zm9ybVdpZGdldCgpKTsKKworICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKKyAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbTlNTY3JvbGxW
aWV3IGNsYXNzXV0pCisgICAgICAgIFt2aWV3IHNldEFjdHVhbFNjcm9sbFBvc2l0aW9uOnBvc2l0
aW9uXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitJbnRSZWN0IFNjcm9s
bFZpZXc6OnBsYXRmb3JtVmlzaWJsZUNvbnRlbnRSZWN0KGJvb2wgaW5jbHVkZVNjcm9sbGJhcnMp
IGNvbnN0Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIGlmIChpbmNs
dWRlU2Nyb2xsYmFycykgeworICAgICAgICBpZiAoTlNWaWV3KiBkb2N1bWVudFZpZXcgPSB0aGlz
LT5kb2N1bWVudFZpZXcoKSkKKyAgICAgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KFtk
b2N1bWVudFZpZXcgdmlzaWJsZVJlY3RdKTsKKyAgICB9CisgICAgcmV0dXJuIGVuY2xvc2luZ0lu
dFJlY3QoW3Njcm9sbFZpZXcoKSBkb2N1bWVudFZpc2libGVSZWN0XSk7CisgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCitJbnRTaXplIFNj
cm9sbFZpZXc6OnBsYXRmb3JtVmlzaWJsZUNvbnRlbnRTaXplKGJvb2wgaW5jbHVkZVNjcm9sbGJh
cnMpIGNvbnN0Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIGlmIChp
bmNsdWRlU2Nyb2xsYmFycykgeworICAgICAgICBpZiAoTlNWaWV3KiBkb2N1bWVudFZpZXcgPSB0
aGlzLT5kb2N1bWVudFZpZXcoKSkKKyAgICAgICAgICAgIHJldHVybiBJbnRTaXplKFtkb2N1bWVu
dFZpZXcgdmlzaWJsZVJlY3RdLnNpemUpOworICAgIH0KKworICAgIHJldHVybiBleHBhbmRlZElu
dFNpemUoRmxvYXRTaXplKFtzY3JvbGxWaWV3KCkgZG9jdW1lbnRWaXNpYmxlUmVjdF0uc2l6ZSkp
OworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIEludFNpemUoKTsK
K30KKworVGlsZUNhY2hlKiBTY3JvbGxWaWV3Ojp0aWxlQ2FjaGUoKQoreworICAgIC8vIE1ha2Ug
dGlsZSBjYWNoZSBwb2ludGVyIGF2YWlsYWJsZSB2aWEgdGhlIG1haW4gZnJhbWUgb25seS4gVGls
ZSBjYWNoZSBpbnRlcmFjdGlvbiBzaG91bGQgYmUgbWFuYWdlZCBieQorICAgIC8vIHRoZSBtYWlu
IGZyYW1lIGFuZCB0aGlzIGF2b2lkcyBoYXZpbmcgdG8gYWRkIHBhcmVudCBjaGVja3MgdG8gYWxs
IGNhbGwgc2l0ZXMuCisgICAgaWYgKHBhcmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgV0FLU2Nyb2xsVmlldyAqdmlldyA9IHN0
YXRpY19jYXN0PFdBS1Njcm9sbFZpZXcgKj4ocGxhdGZvcm1XaWRnZXQoKSk7CisgICAgcmV0dXJu
IFtbdmlldyB3aW5kb3ddIHRpbGVDYWNoZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldENvbnRlbnRzU2l6ZSgpCit7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIGludCB3ID0gbV9jb250ZW50c1Np
emUud2lkdGgoKTsKKyAgICBpbnQgaCA9IG1fY29udGVudHNTaXplLmhlaWdodCgpOworI2lmICFQ
TEFURk9STShJT1MpCisgICAgTE9HKEZyYW1lcywgIiVwICVAIGF0IHcgJWQgaCAlZFxuIiwgZG9j
dW1lbnRWaWV3KCksIFsoaWQpW2RvY3VtZW50VmlldygpIGNsYXNzXSBjbGFzc05hbWVdLCB3LCBo
KTsgICAgICAgICAgICAKKyNlbHNlCisgICAgTE9HKEZyYW1lcywgIiVwICVAIGF0IHcgJWQgaCAl
ZFxuIiwgZG9jdW1lbnRWaWV3KCksIE5TU3RyaW5nRnJvbUNsYXNzKFtkb2N1bWVudFZpZXcoKSBj
bGFzc10pLCB3LCBoKTsKKyNlbmRpZgorICAgIE5TU2l6ZSB0ZW1wU2l6ZSA9IHsgc3RhdGljX2Nh
c3Q8Q0dGbG9hdD4obWF4KDAsIHcpKSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4obWF4KDAsIGgpKSB9
OyAvLyB3b3JrYXJvdW5kIGZvciA0MjEzMzE0CisgICAgW2RvY3VtZW50VmlldygpIHNldEJvdW5k
c1NpemU6dGVtcFNpemVdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3Zv
aWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxiYXJzU3VwcHJlc3NlZChib29sIHJlcGFp
bnRPblVuc3VwcHJlc3MpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAg
IFtzY3JvbGxWaWV3KCkgc2V0U2Nyb2xsQmFyc1N1cHByZXNzZWQ6bV9zY3JvbGxiYXJzU3VwcHJl
c3NlZAorICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRPblVuc3VwcHJlc3M6cmVwYWludE9u
VW5zdXBwcmVzc107CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKwordm9pZCBT
Y3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb2ludCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgTlNQb2lu
dCBmbG9hdFBvaW50ID0gc2Nyb2xsUG9pbnQ7CisgICAgTlNQb2ludCB0ZW1wUG9pbnQgPSB7IG1h
eCgtW3Njcm9sbFZpZXcoKSBzY3JvbGxPcmlnaW5dLngsIGZsb2F0UG9pbnQueCksIG1heCgtW3Nj
cm9sbFZpZXcoKSBzY3JvbGxPcmlnaW5dLnksIGZsb2F0UG9pbnQueSkgfTsgIC8vIERvbid0IHVz
ZSBOU01ha2VQb2ludCB0byB3b3JrIGFyb3VuZCA0MjEzMzE0LgorICAgIFtkb2N1bWVudFZpZXco
KSBzY3JvbGxQb2ludDp0ZW1wUG9pbnRdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSkKK3sKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSB0byBp
bXBsZW1lbnQgdGhpcyBzbyB0aGF0IGFsbCBvZiB0aGUgY29kZSBpbiBXZWJGcmFtZVZpZXcgY291
bGQgZ28gYXdheS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0
IEludFJlY3QmIHJlY3QsIGJvb2wgLypub3cqLykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CisKKyAgICBOU1ZpZXcgKnZpZXcgPSBkb2N1bWVudFZpZXcoKTsKKworICAgIFt2
aWV3IHNldE5lZWRzRGlzcGxheUluUmVjdDpyZWN0XTsgICAgCisgICAgLy8gRklYTUU6IEhhbmRs
ZSAibm93Ii4KKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKKy8vICJDb250
YWluaW5nIFdpbmRvdyIgbWVhbnMgdGhlIE5TV2luZG93J3MgY29vcmQgc3lzdGVtLCB3aGljaCBp
cyBvcmlnaW4gbG93ZXIgbGVmdAorCitJbnRSZWN0IFNjcm9sbFZpZXc6OnBsYXRmb3JtQ29udGVu
dHNUb1NjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKKyAgICBpZiAoTlNWaWV3KiBkb2N1bWVudFZpZXcgPSB0aGlzLT5k
b2N1bWVudFZpZXcoKSkgeworICAgICAgICBOU1JlY3QgdGVtcFJlY3QgPSByZWN0OworICAgICAg
ICB0ZW1wUmVjdCA9IFtkb2N1bWVudFZpZXcgY29udmVydFJlY3Q6dGVtcFJlY3QgdG9WaWV3Om5p
bF07CisgICAgICAgIHRlbXBSZWN0Lm9yaWdpbiA9IFtbZG9jdW1lbnRWaWV3IHdpbmRvd10gY29u
dmVydEJhc2VUb1NjcmVlbjp0ZW1wUmVjdC5vcmlnaW5dOworICAgICAgICByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdCh0ZW1wUmVjdCk7CisgICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworSW50UG9pbnQgU2Nyb2xsVmlldzo6cGxh
dGZvcm1TY3JlZW5Ub0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgaWYgKE5TVmlldyogZG9jdW1lbnRW
aWV3ID0gdGhpcy0+ZG9jdW1lbnRWaWV3KCkpIHsKKyAgICAgICAgTlNQb2ludCB3aW5kb3dDb29y
ZCA9IFtbZG9jdW1lbnRWaWV3IHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTogcG9pbnRdOwor
ICAgICAgICByZXR1cm4gSW50UG9pbnQoW2RvY3VtZW50VmlldyBjb252ZXJ0UG9pbnQ6d2luZG93
Q29vcmQgZnJvbVZpZXc6bmlsXSk7CisgICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisgICAgcmV0dXJuIEludFBvaW50KCk7Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZv
cm1Jc09mZnNjcmVlbigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IERESzogU2Nyb2xsVmlld01h
Yy5tbSBhbHNvIGNoZWNrczogIVtbcGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddIGlzVmlzaWJsZV0K
KyAgICAvLyBidXQgLVtXQUtXaW5kb3cgaXNWaXNpYmxlXSBkb2Vzbid0IGV4aXN0LgorICAgIHJl
dHVybiAhW3BsYXRmb3JtV2lkZ2V0KCkgd2luZG93XTsKK30KKwordm9pZCBTY3JvbGxWaWV3Ojpw
bGF0Zm9ybVNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShTY3JvbGxiYXJPdmVybGF5U3R5bGUpCit7
Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50
UG9pbnQmIG9yaWdpbiwgYm9vbCB1cGRhdGVQb3NpdGlvbkFsbCwgYm9vbCB1cGRhdGVQb3NpdGlv
blN5bmNocm9ub3VzbHkpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAg
IFtzY3JvbGxWaWV3KCkgc2V0U2Nyb2xsT3JpZ2luOnN0YXRpY19jYXN0PENHUG9pbnQ+KG9yaWdp
bikgdXBkYXRlUG9zaXRpb25BdEFsbDp1cGRhdGVQb3NpdGlvbkFsbCBpbW1lZGlhdGVseTp1cGRh
dGVQb3NpdGlvblN5bmNocm9ub3VzbHldOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxi
YXJUaGVtZUlPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbGJhclRoZW1l
SU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODU4MTYyYTgxZmFlOTRkNWE1ZmNjNTU4NDMwNDIyNjEzNjk1ZTE0
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxi
YXJUaGVtZUlPUy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY3JvbGxiYXJUaGVtZUlPU19oCisjZGVmaW5l
IFNjcm9sbGJhclRoZW1lSU9TX2gKKworI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQ29tcG9zaXRl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyVGhlbWVJT1MgOiBw
dWJsaWMgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgeworcHVibGljOgorICAgIFNjcm9sbGJhclRo
ZW1lSU9TKCk7CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVJT1MoKTsKKworICAgIHZpcnR1
YWwgYm9vbCBwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCosIEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEludFJlY3QmIGRhbWFnZVJlY3QpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBpbnQgc2Ny
b2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplID0gUmVndWxhclNjcm9sbGJhcikg
T1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBkb3VibGUgaW5p
dGlhbEF1dG9zY3JvbGxUaW1lckRlbGF5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBkb3VibGUg
YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgU2Nyb2xsYmFy
QnV0dG9uc1BsYWNlbWVudCBidXR0b25zUGxhY2VtZW50KCkgY29uc3QgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJU
aGVtZUNsaWVudCopIE9WRVJSSURFOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIGhh
c0J1dHRvbnMoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSBPVkVSUklERTsKKworICAgIHZpcnR1
YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJh
clBhcnQsIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnRS
ZWN0IGZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFy
dCwgYm9vbCBwYWludGluZyA9IGZhbHNlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEludFJlY3Qg
dHJhY2tSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgYm9vbCBwYWludGluZyA9IGZhbHNlKSBP
VkVSUklERTsKKworICAgIHZpcnR1YWwgaW50IG1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXJU
aGVtZUNsaWVudCopIE9WRVJSSURFOworICAgIAorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDZW50
ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JikgT1ZFUlJJREU7CisgICAgCitwdWJsaWM6CisgICAgdm9pZCBwcmVmZXJlbmNlc0NoYW5nZWQo
KTsKK307CisKK30KKworI2VuZGlmIC8vIFNjcm9sbGJhclRoZW1lSU9TX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxiYXJUaGVtZUlPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxiYXJUaGVtZUlPUy5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
Mzc3NDUyNGQxYzgyYmJiZDk1ZmYzNzMzOGY0OTcyNDBhOWMwMGZlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Njcm9sbGJhclRoZW1lSU9TLm1tCkBAIC0w
LDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUlPUy5oIgor
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTY3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhl
bWU6Om5hdGl2ZVRoZW1lKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2Nyb2xsYmFy
VGhlbWVJT1M+IHRoZW1lOworICAgIHJldHVybiAmdGhlbWUuZ2V0KCk7Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyVGhlbWVJT1M6OnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KikK
K3sKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUlPUzo6dW5yZWdpc3RlclNjcm9sbGJhcihTY3Jv
bGxiYXJUaGVtZUNsaWVudCopCit7Cit9CisKK1Njcm9sbGJhclRoZW1lSU9TOjpTY3JvbGxiYXJU
aGVtZUlPUygpCit7Cit9CisKK1Njcm9sbGJhclRoZW1lSU9TOjp+U2Nyb2xsYmFyVGhlbWVJT1Mo
KQoreworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lSU9TOjpwcmVmZXJlbmNlc0NoYW5nZWQoKQor
eworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVJT1M6OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxi
YXJDb250cm9sU2l6ZSkKK3sKKyAgICByZXR1cm4gMDsKK30KKworZG91YmxlIFNjcm9sbGJhclRo
ZW1lSU9TOjppbml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKQoreworICAgIHJldHVybiAwOwor
fQorCitkb3VibGUgU2Nyb2xsYmFyVGhlbWVJT1M6OmF1dG9zY3JvbGxUaW1lckRlbGF5KCkKK3sK
KyAgICByZXR1cm4gMDsKK30KKyAgICAKK1Njcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgU2Nyb2xs
YmFyVGhlbWVJT1M6OmJ1dHRvbnNQbGFjZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBTY3Jv
bGxiYXJCdXR0b25zTm9uZTsKK30KKworYm9vbCBTY3JvbGxiYXJUaGVtZUlPUzo6aGFzQnV0dG9u
cyhTY3JvbGxiYXJUaGVtZUNsaWVudCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFNjcm9sbGJhclRoZW1lSU9TOjpoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCopCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lSU9TOjpiYWNrQnV0
dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wgLypwYWlu
dGluZyovKQoreworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisKK0ludFJlY3QgU2Nyb2xsYmFy
VGhlbWVJT1M6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xs
YmFyUGFydCwgYm9vbCAvKnBhaW50aW5nKi8pCit7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30K
KworSW50UmVjdCBTY3JvbGxiYXJUaGVtZUlPUzo6dHJhY2tSZWN0KFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiwgYm9vbCAvKnBhaW50aW5nKi8pCit7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKwor
aW50IFNjcm9sbGJhclRoZW1lSU9TOjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqKQoreworICAgIHJldHVybiAwOworfQorCitib29sIFNjcm9sbGJhclRoZW1lSU9TOjpz
aG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU2Nyb2xsYmFyVGhl
bWVJT1M6OnBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYgLypkYW1hZ2VSZWN0Ki8pCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9TZWxlY3Rpb25SZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxl
Y3Rpb25SZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OTcxYWE1NDM1MWRhYWEzNTE5NDU4OGI1YjUyOTJh
ZTQ4YWNhOGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1NlbGVjdGlvblJlY3QuY3BwCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uUmVjdC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1NlbGVjdGlvblJlY3Q6OlNlbGVjdGlvblJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCwgYm9vbCBpc0hvcml6b250YWwsIGludCBjb2x1bW5OdW1iZXIpCisgICAgOiBtX3JlY3QocmVj
dCkKKyAgICAsIG1fZGlyZWN0aW9uKExUUikKKyAgICAsIG1fbWluWCgwKQorICAgICwgbV9tYXhY
KDApCisgICAgLCBtX21heFkoMCkKKyAgICAsIG1fbGluZU51bWJlcigwKQorICAgICwgbV9pc0xp
bmVCcmVhayhmYWxzZSkKKyAgICAsIG1faXNGaXJzdE9uTGluZShmYWxzZSkKKyAgICAsIG1faXNM
YXN0T25MaW5lKGZhbHNlKQorICAgICwgbV9jb250YWluc1N0YXJ0KGZhbHNlKQorICAgICwgbV9j
b250YWluc0VuZChmYWxzZSkKKyAgICAsIG1faXNIb3Jpem9udGFsKGlzSG9yaXpvbnRhbCkKKyAg
ICAsIG1faXNJbkZpeGVkUG9zaXRpb24oZmFsc2UpCisgICAgLCBtX2lzUnVieVRleHQoZmFsc2Up
CisgICAgLCBtX2NvbHVtbk51bWJlcihjb2x1bW5OdW1iZXIpCit7Cit9CisKKy8vIEZJWE1FOiBX
ZSBzaG91bGQgbW92ZSBzb21lIG9mIHRoZXNlIGFyZ3VtZW50cyB0byBhbiBhdXhpbGxhcnkgc3Ry
dWN0LgorU2VsZWN0aW9uUmVjdDo6U2VsZWN0aW9uUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgaW50IG1pblgsIGludCBtYXhYLCBpbnQgbWF4WSwKKyAg
ICBpbnQgbGluZU51bWJlciwgYm9vbCBpc0xpbmVCcmVhaywgYm9vbCBpc0ZpcnN0T25MaW5lLCBi
b29sIGlzTGFzdE9uTGluZSwgYm9vbCBjb250YWluc1N0YXJ0LCBib29sIGNvbnRhaW5zRW5kLAor
ICAgIGJvb2wgaXNIb3Jpem9udGFsLCBib29sIGlzSW5GaXhlZFBvc2l0aW9uLCBib29sIGlzUnVi
eVRleHQsIGludCBjb2x1bW5OdW1iZXIpCisgICAgOiBtX3JlY3QocmVjdCkKKyAgICAsIG1fZGly
ZWN0aW9uKGRpcmVjdGlvbikKKyAgICAsIG1fbWluWChtaW5YKQorICAgICwgbV9tYXhYKG1heFgp
CisgICAgLCBtX21heFkobWF4WSkKKyAgICAsIG1fbGluZU51bWJlcihsaW5lTnVtYmVyKQorICAg
ICwgbV9pc0xpbmVCcmVhayhpc0xpbmVCcmVhaykKKyAgICAsIG1faXNGaXJzdE9uTGluZShpc0Zp
cnN0T25MaW5lKQorICAgICwgbV9pc0xhc3RPbkxpbmUoaXNMYXN0T25MaW5lKQorICAgICwgbV9j
b250YWluc1N0YXJ0KGNvbnRhaW5zU3RhcnQpCisgICAgLCBtX2NvbnRhaW5zRW5kKGNvbnRhaW5z
RW5kKQorICAgICwgbV9pc0hvcml6b250YWwoaXNIb3Jpem9udGFsKQorICAgICwgbV9pc0luRml4
ZWRQb3NpdGlvbihpc0luRml4ZWRQb3NpdGlvbikKKyAgICAsIG1faXNSdWJ5VGV4dChpc1J1YnlU
ZXh0KQorICAgICwgbV9jb2x1bW5OdW1iZXIoY29sdW1uTnVtYmVyKQoreworfQorCitTZWxlY3Rp
b25SZWN0OjpTZWxlY3Rpb25SZWN0KCkKKyAgICA6IG1fZGlyZWN0aW9uKExUUikKKyAgICAsIG1f
bWluWCgwKQorICAgICwgbV9tYXhYKDApCisgICAgLCBtX21heFkoMCkKKyAgICAsIG1fbGluZU51
bWJlcigwKQorICAgICwgbV9pc0xpbmVCcmVhayhmYWxzZSkKKyAgICAsIG1faXNGaXJzdE9uTGlu
ZShmYWxzZSkKKyAgICAsIG1faXNMYXN0T25MaW5lKGZhbHNlKQorICAgICwgbV9jb250YWluc1N0
YXJ0KGZhbHNlKQorICAgICwgbV9jb250YWluc0VuZChmYWxzZSkKKyAgICAsIG1faXNIb3Jpem9u
dGFsKHRydWUpCisgICAgLCBtX2lzSW5GaXhlZFBvc2l0aW9uKGZhbHNlKQorICAgICwgbV9pc1J1
YnlUZXh0KGZhbHNlKQorICAgICwgbV9jb2x1bW5OdW1iZXIoMCkKK3sKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Nl
bGVjdGlvblJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25SZWN0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOWRjOTFmZGYxZTdjODA1NmRjMDY5MjVhZjBkMjJiNDUzMGU3NTI5ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25S
ZWN0LmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNlbGVjdGlvblJl
Y3RfaAorI2RlZmluZSBTZWxlY3Rpb25SZWN0X2gKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTZWxlY3Rpb25SZWN0IHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTZWxlY3Rpb25SZWN0KGNv
bnN0IEludFJlY3QmLCBib29sIGlzSG9yaXpvbnRhbCwgaW50IGNvbHVtbk51bWJlcik7CisKKyAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1vdmUgc29tZSBvZiB0aGVzZSBhcmd1bWVudHMgdG8gYW4g
YXV4aWxsYXJ5IHN0cnVjdC4KKyAgICBTZWxlY3Rpb25SZWN0KGNvbnN0IEludFJlY3QmLCBUZXh0
RGlyZWN0aW9uLCBpbnQsIGludCwgaW50LCBpbnQsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJv
b2wsIGJvb2wsIGJvb2wsIGJvb2wsIGludCk7CisgICAgU2VsZWN0aW9uUmVjdCgpOworICAgIH5T
ZWxlY3Rpb25SZWN0KCkgeyB9CisKKyAgICBJbnRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KKworICAgIGludCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIb3Jp
em9udGFsID8gbV9yZWN0LngoKSA6IG1fcmVjdC55KCk7IH0KKyAgICBpbnQgbG9naWNhbFdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250YWwgPyBtX3JlY3Qud2lkdGgoKSA6IG1fcmVj
dC5oZWlnaHQoKTsgfQorICAgIGludCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9pc0hv
cml6b250YWwgPyBtX3JlY3QueSgpIDogbV9yZWN0LngoKTsgfQorICAgIGludCBsb2dpY2FsSGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250YWwgPyBtX3JlY3QuaGVpZ2h0KCkgOiBt
X3JlY3Qud2lkdGgoKTsgfQorCisgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX2RpcmVjdGlvbjsgfQorICAgIGludCBtaW5YKCkgY29uc3QgeyByZXR1cm4gbV9t
aW5YOyB9CisgICAgaW50IG1heFgoKSBjb25zdCB7IHJldHVybiBtX21heFg7IH0KKyAgICBpbnQg
bWF4WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4WTsgfQorICAgIGludCBsaW5lTnVtYmVyKCkgY29u
c3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9CisgICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0
IHsgcmV0dXJuIG1faXNMaW5lQnJlYWs7IH0KKyAgICBib29sIGlzRmlyc3RPbkxpbmUoKSBjb25z
dCB7IHJldHVybiBtX2lzRmlyc3RPbkxpbmU7IH0KKyAgICBib29sIGlzTGFzdE9uTGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNMYXN0T25MaW5lOyB9CisgICAgYm9vbCBjb250YWluc1N0YXJ0KCkg
Y29uc3QgeyByZXR1cm4gbV9jb250YWluc1N0YXJ0OyB9CisgICAgYm9vbCBjb250YWluc0VuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNFbmQ7IH0KKyAgICBib29sIGlzSG9yaXpvbnRhbCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNIb3Jpem9udGFsOyB9CisgICAgYm9vbCBpc0luRml4ZWRQb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNJbkZpeGVkUG9zaXRpb247IH0KKyAgICBib29sIGlz
UnVieVRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzUnVieVRleHQ7IH0KKyAgICBpbnQgY29sdW1u
TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5OdW1iZXI7IH0KKworICAgIHZvaWQgc2V0
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fcmVjdCA9IHJlY3Q7IH0KKworICAgIHZvaWQg
c2V0TG9naWNhbExlZnQoaW50IGxlZnQpCisgICAgeworICAgICAgICBpZiAobV9pc0hvcml6b250
YWwpCisgICAgICAgICAgICBtX3JlY3Quc2V0WChsZWZ0KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9yZWN0LnNldFkobGVmdCk7CisgICAgfQorCisgICAgdm9pZCBzZXRMb2dpY2FsV2lk
dGgoaW50IHdpZHRoKQorICAgIHsKKyAgICAgICAgaWYgKG1faXNIb3Jpem9udGFsKQorICAgICAg
ICAgICAgbV9yZWN0LnNldFdpZHRoKHdpZHRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9yZWN0LnNldEhlaWdodCh3aWR0aCk7CisgICAgfQorCisgICAgdm9pZCBzZXRMb2dpY2FsVG9w
KGludCB0b3ApCisgICAgeworICAgICAgICBpZiAobV9pc0hvcml6b250YWwpCisgICAgICAgICAg
ICBtX3JlY3Quc2V0WSh0b3ApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3JlY3Quc2V0
WCh0b3ApOworICAgIH0KKworICAgIHZvaWQgc2V0TG9naWNhbEhlaWdodChpbnQgaGVpZ2h0KQor
ICAgIHsKKyAgICAgICAgaWYgKG1faXNIb3Jpem9udGFsKQorICAgICAgICAgICAgbV9yZWN0LnNl
dEhlaWdodChoZWlnaHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3JlY3Quc2V0V2lk
dGgoaGVpZ2h0KTsKKyAgICB9CisKKyAgICB2b2lkIHNldERpcmVjdGlvbihUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbikgeyBtX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsgfQorICAgIHZvaWQgc2V0TWlu
WChpbnQgbWluWCkgeyBtX21pblggPSBtaW5YOyB9CisgICAgdm9pZCBzZXRNYXhYKGludCBtYXhY
KSB7IG1fbWF4WCA9IG1heFg7IH0KKyAgICB2b2lkIHNldE1heFkoaW50IG1heFkpIHsgbV9tYXhZ
ID0gbWF4WTsgfQorICAgIHZvaWQgc2V0TGluZU51bWJlcihpbnQgbGluZU51bWJlcikgeyBtX2xp
bmVOdW1iZXIgPSBsaW5lTnVtYmVyOyB9CisgICAgdm9pZCBzZXRJc0xpbmVCcmVhayhib29sIGlz
TGluZUJyZWFrKSB7IG1faXNMaW5lQnJlYWsgPSBpc0xpbmVCcmVhazsgfQorICAgIHZvaWQgc2V0
SXNGaXJzdE9uTGluZShib29sIGlzRmlyc3RPbkxpbmUpIHsgbV9pc0ZpcnN0T25MaW5lID0gaXNG
aXJzdE9uTGluZTsgfQorICAgIHZvaWQgc2V0SXNMYXN0T25MaW5lKGJvb2wgaXNMYXN0T25MaW5l
KSB7IG1faXNMYXN0T25MaW5lID0gaXNMYXN0T25MaW5lOyB9CisgICAgdm9pZCBzZXRDb250YWlu
c1N0YXJ0KGJvb2wgY29udGFpbnNTdGFydCkgeyBtX2NvbnRhaW5zU3RhcnQgPSBjb250YWluc1N0
YXJ0OyB9CisgICAgdm9pZCBzZXRDb250YWluc0VuZChib29sIGNvbnRhaW5zRW5kKSB7IG1fY29u
dGFpbnNFbmQgPSBjb250YWluc0VuZDsgfQorICAgIHZvaWQgc2V0SXNIb3Jpem9udGFsKGJvb2wg
aXNIb3Jpem9udGFsKSB7IG1faXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsOyB9CisKK3ByaXZh
dGU6CisgICAgSW50UmVjdCBtX3JlY3Q7CisgICAgVGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbjsK
KyAgICBpbnQgbV9taW5YOworICAgIGludCBtX21heFg7CisgICAgaW50IG1fbWF4WTsKKyAgICBp
bnQgbV9saW5lTnVtYmVyOworICAgIGJvb2wgbV9pc0xpbmVCcmVhazsKKyAgICBib29sIG1faXNG
aXJzdE9uTGluZTsKKyAgICBib29sIG1faXNMYXN0T25MaW5lOworICAgIGJvb2wgbV9jb250YWlu
c1N0YXJ0OworICAgIGJvb2wgbV9jb250YWluc0VuZDsKKyAgICBib29sIG1faXNIb3Jpem9udGFs
OworICAgIGJvb2wgbV9pc0luRml4ZWRQb3NpdGlvbjsKKyAgICBib29sIG1faXNSdWJ5VGV4dDsK
KyAgICBpbnQgbV9jb2x1bW5OdW1iZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBTZWxlY3Rpb25SZWN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9Tb3VuZElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Tb3Vu
ZElPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hNGQ1NDkzMzQ1NGUwMjFkNTkwMDFmOGY4MzJiY2M5YzcxN2Q4
YjVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NvdW5k
SU9TLm1tCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJTb3VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQg
c3lzdGVtQmVlcCgpIHsgTlNMb2coQCJXZWJjb3JlIE5TQmVlcCgpISIpOyB9ICAgIAorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvU3lzdGVtTWVtb3J5SU9TLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TeXN0
ZW1NZW1vcnlJT1MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0MjIwYzUwNTE4N2E1NDg3ZTFmMzk2NDNhZDQy
MGRiMTdhN2ZhYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvU3lzdGVtTWVtb3J5SU9TLmNwcApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU3lzdGVtTWVtb3J5LmgiCisKKyNpbmNsdWRlIDxtYWNoL21hY2guaD4K
KyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbnQg
c3lzdGVtTWVtb3J5TGV2ZWwoKQoreworI2lmIFBMQVRGT1JNKElPU19TSU1VTEFUT1IpCisgICAg
cmV0dXJuIDM1OworI2Vsc2UKKyAgICBzdGF0aWMgaW50IG1lbW9yeUZyZWVMZXZlbCA9IC0xOwor
ICAgIHN0YXRpYyBkb3VibGUgcHJldmlvdXNDaGVja1RpbWU7IAorICAgIGRvdWJsZSB0aW1lID0g
Y3VycmVudFRpbWUoKTsKKyAgICBpZiAodGltZSAtIHByZXZpb3VzQ2hlY2tUaW1lIDwgMC4xKQor
ICAgICAgICByZXR1cm4gbWVtb3J5RnJlZUxldmVsOworICAgIHByZXZpb3VzQ2hlY2tUaW1lID0g
dGltZTsKKyAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihtZW1vcnlGcmVlTGV2ZWwpOworICAgIHN5
c2N0bGJ5bmFtZSgia2Vybi5tZW1vcnlzdGF0dXNfbGV2ZWwiLCAmbWVtb3J5RnJlZUxldmVsLCAm
c2l6ZSwgbnVsbHB0ciwgMCk7CisgICAgcmV0dXJuIG1lbW9yeUZyZWVMZXZlbDsKKyNlbmRpZgor
fQorCisjaWYgIVBMQVRGT1JNKElPU19TSU1VTEFUT1IpCitzdGF0aWMgaG9zdF9iYXNpY19pbmZv
X2RhdGFfdCBnSG9zdEJhc2ljSW5mbzsKKworc3RhdGljIHZvaWQgaW5pdENhcGFiaWxpdGllcyh2
b2lkKQoreworICAgIC8vIERpc2NvdmVyIG91ciBDUFUgdHlwZQorICAgIG1hY2hfcG9ydF90IGhv
c3QgPSBtYWNoX2hvc3Rfc2VsZigpOworICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgY291bnQg
PSBIT1NUX0JBU0lDX0lORk9fQ09VTlQ7CisgICAga2Vybl9yZXR1cm5fdCByZXR1cm5WYWx1ZSA9
IGhvc3RfaW5mbyhob3N0LCBIT1NUX0JBU0lDX0lORk8sIHJlaW50ZXJwcmV0X2Nhc3Q8aG9zdF9p
bmZvX3Q+KCZnSG9zdEJhc2ljSW5mbyksICZjb3VudCk7CisgICAgbWFjaF9wb3J0X2RlYWxsb2Nh
dGUobWFjaF90YXNrX3NlbGYoKSwgaG9zdCk7CisgICAgaWYgKHJldHVyblZhbHVlICE9IEtFUk5f
U1VDQ0VTUykKKyAgICAgICAgTE9HX0VSUk9SKCIlcyA6IGhvc3RfaW5mbyglZCkgOiAlcy5cbiIs
IF9fRlVOQ1RJT05fXywgcmV0dXJuVmFsdWUsIG1hY2hfZXJyb3Jfc3RyaW5nKHJldHVyblZhbHVl
KSk7Cit9CisjZW5kaWYKKworc2l6ZV90IHN5c3RlbVRvdGFsTWVtb3J5KCkKK3sKKyNpZiBQTEFU
Rk9STShJT1NfU0lNVUxBVE9SKQorICAgIHJldHVybiA1MTIgKiAxMDI0ICogMTAyNDsKKyNlbHNl
CisgICAgLy8gRklYTUU6IENvbnNpZGVyIHVzaW5nIEMrKzExIHRocmVhZCBwcmltaXRpdmVzLgor
ICAgIHN0YXRpYyBwdGhyZWFkX29uY2VfdCBpbml0Q29udHJvbCA9IFBUSFJFQURfT05DRV9JTklU
OworCisgICAgcHRocmVhZF9vbmNlKCZpbml0Q29udHJvbCwgaW5pdENhcGFiaWxpdGllcyk7Cisg
ICAgLy8gVGhlIHZhbHVlIGluIGdIb3N0QmFzaWNJbmZvLm1heF9tZW0gaXMgb2Z0ZW4gbG93ZXIg
dGhhbiB0aGUgYW1vdW50IHdlJ3JlCisgICAgLy8gaW50ZXJlc3RlZCBpbiAoZS5nLiwgZG9lcyB0
aGlzIGRldmljZSBoYXZlIGF0IGxlYXN0IDI1Nk1CIG9mIFJBTT8pCisgICAgLy8gUm91bmQgdGhl
IHZhbHVlIHRvIHRoZSBuZWFyZXN0IHBvd2VyIG9mIDIuCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdD4oZXhwMihjZWlsKGxvZzIoZ0hvc3RCYXNpY0luZm8ubWF4X21lbSkpKSk7CisjZW5k
aWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1RoZW1lSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
VGhlbWVJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2NjOWJhNzNkOTE1NjRjMDMwNmRmYzZiYTFjYTVkYjQx
OTcyOTMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Ro
ZW1lSU9TLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFRoZW1lSU9TX2gKKyNkZWZpbmUgVGhlbWVJT1NfaAor
CisjaW5jbHVkZSAiVGhlbWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUaGVt
ZUlPUyA6IHB1YmxpYyBUaGVtZSB7CitwdWJsaWM6CisgICAgVGhlbWVJT1MoKSB7IH0KKyAgICB2
aXJ0dWFsIH5UaGVtZUlPUygpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVGhlbWVJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1RoZW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RoZW1lSU9TLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmI0NmZjM2FiMmQ2YzFiMjJlYjZmNWYyZTdkNzAwNTVhMjE1MzI5MGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGhlbWVJT1MubW0K
QEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRoZW1lSU9TLmgiCisKKyNpbXBv
cnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiU2Nyb2xsVmlldy5oIgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTog
SW1wbGVtZW50IGJlZm9yZSBlbmFibGluZyBVU0UoTkVXX1RIRU1FKS4KKworVGhlbWUqIHBsYXRm
b3JtVGhlbWUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaGVtZUlPUz4gdGhlbWVJ
T1M7CisgICAgcmV0dXJuICZ0aGVtZUlPUy5nZXQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1RpbGVDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlM2I5NTVhNTM4YzVhZjFkNDExZGUx
MTc3ZmM3ZWJjNmU4Y2E2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVGlsZUNhY2hlLmgKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFRpbGVDYWNoZV9oCisjZGVmaW5lIFRpbGVDYWNoZV9oCisKKyNpZiBQTEFURk9STShJT1Mp
CisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBDQUxheWVyOwor
QGNsYXNzIFRpbGVDYWNoZVRvbWJzdG9uZTsKK0BjbGFzcyBUaWxlTGF5ZXI7CitAY2xhc3MgV0FL
V2luZG93OworI2Vsc2UKK2NsYXNzIENBTGF5ZXI7CitjbGFzcyBUaWxlQ2FjaGVUb21ic3RvbmU7
CitjbGFzcyBUaWxlTGF5ZXI7CitjbGFzcyBXQUtXaW5kb3c7CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBUaWxlR3JpZDsKKworY2xhc3MgVGlsZUNhY2hlIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShUaWxlQ2FjaGUpOworcHVibGljOgorICAgIFRpbGVDYWNoZShX
QUtXaW5kb3cqKTsKKyAgICB+VGlsZUNhY2hlKCk7CisKKyAgICBDR0Zsb2F0IHNjcmVlblNjYWxl
KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAKKyAgICB2b2lkIGxheW91dFRp
bGVzKCk7CisgICAgdm9pZCBsYXlvdXRUaWxlc05vdygpOworICAgIHZvaWQgbGF5b3V0VGlsZXNO
b3dGb3JSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHJlbW92ZUFsbE5vblZpc2libGVU
aWxlcygpOworICAgIHZvaWQgcmVtb3ZlQWxsVGlsZXMoKTsKKyAgICB2b2lkIHJlbW92ZUZvcmVn
cm91bmRUaWxlcygpOworCisgICAgLy8gSWYgJ2NvbnRlbnRSZXBsYWNlbWVudEltYWdlJyBpcyBu
b3QgTlVMTCwgZHJhd0xheWVyKCkgZHJhd3MKKyAgICAvLyBjb250ZW50UmVwbGFjZW1lbnRJbWFn
ZSBpbnN0ZWFkIG9mIHRoZSBwYWdlIGNvbnRlbnQuIFdlIGFzc3VtZSB0aGUKKyAgICAvLyBpbWFn
ZSBpcyB0byBiZSBkcmF3biBhdCB0aGUgb3JpZ2luIGFuZCBzY2FsZWQgdG8gbWF0Y2ggZGV2aWNl
IHBpeGVscy4KKyAgICB2b2lkIHNldENvbnRlbnRSZXBsYWNlbWVudEltYWdlKFJldGFpblB0cjxD
R0ltYWdlUmVmPik7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvbnRlbnRSZXBsYWNlbWVu
dEltYWdlKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFRpbGVCb3JkZXJzVmlzaWJsZShib29sKTsK
KyAgICBib29sIHRpbGVCb3JkZXJzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZUJvcmRl
cnNWaXNpYmxlOyB9CisKKyAgICB2b2lkIHNldFRpbGVQYWludENvdW50ZXJzVmlzaWJsZShib29s
KTsKKyAgICBib29sIHRpbGVQYWludENvdW50ZXJzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGlsZVBhaW50Q291bnRlcnNWaXNpYmxlOyB9CisKKyAgICB2b2lkIHNldEFjY2VsZXJhdGVkRHJh
d2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCA9
IGVuYWJsZWQ7IH0KKyAgICBib29sIGFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQ7IH0KKworICAgIHZvaWQgc2V0S2Vl
cHNab29tZWRPdXRUaWxlcyhib29sKTsKKyAgICBib29sIGtlZXBzWm9vbWVkT3V0VGlsZXMoKSBj
b25zdCB7IHJldHVybiBtX2tlZXBzWm9vbWVkT3V0VGlsZXM7IH0KKworICAgIHZvaWQgc2V0Wm9v
bWVkT3V0U2NhbGUoZmxvYXQpOworICAgIGZsb2F0IHpvb21lZE91dFNjYWxlKCkgY29uc3Q7Cisg
ICAgCisgICAgdm9pZCBzZXRDdXJyZW50U2NhbGUoZmxvYXQpOworICAgIGZsb2F0IGN1cnJlbnRT
Y2FsZSgpIGNvbnN0OworICAgIAorICAgIGJvb2wgdGlsZXNPcGFxdWUoKSBjb25zdDsKKyAgICB2
b2lkIHNldFRpbGVzT3BhcXVlKGJvb2wpOworICAgIAorICAgIGVudW0gVGlsaW5nTW9kZSB7Cisg
ICAgICAgIE5vcm1hbCwKKyAgICAgICAgTWluaW1hbCwKKyAgICAgICAgUGFubmluZywKKyAgICAg
ICAgWm9vbWluZywKKyAgICAgICAgRGlzYWJsZWQsCisgICAgICAgIFNjcm9sbFRvVG9wCisgICAg
fTsKKyAgICBUaWxpbmdNb2RlIHRpbGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3RpbGluZ01v
ZGU7IH0KKyAgICB2b2lkIHNldFRpbGluZ01vZGUoVGlsaW5nTW9kZSk7CisKKyAgICB0eXBlZGVm
IGVudW0geworICAgICAgICBUaWxpbmdEaXJlY3Rpb25VcCwKKyAgICAgICAgVGlsaW5nRGlyZWN0
aW9uRG93biwKKyAgICAgICAgVGlsaW5nRGlyZWN0aW9uTGVmdCwKKyAgICAgICAgVGlsaW5nRGly
ZWN0aW9uUmlnaHQsCisgICAgfSBUaWxpbmdEaXJlY3Rpb247CisgICAgdm9pZCBzZXRUaWxpbmdE
aXJlY3Rpb24oVGlsaW5nRGlyZWN0aW9uKTsKKyAgICBUaWxpbmdEaXJlY3Rpb24gdGlsaW5nRGly
ZWN0aW9uKCkgY29uc3Q7CisKKyAgICBib29sIGhhc1BlbmRpbmdEcmF3KCkgY29uc3Q7CisKKyAg
ICB2b2lkIGhvc3RMYXllclNpemVDaGFuZ2VkKCk7CisKKyAgICBzdGF0aWMgdm9pZCBzZXRMYXll
clBvb2xDYXBhY2l0eSh1bnNpZ25lZCk7CisgICAgc3RhdGljIHZvaWQgZHJhaW5MYXllclBvb2wo
KTsKKworICAgIC8vIExvZ2dpbmcKKyAgICB2b2lkIGR1bXBUaWxlcygpOworCisgICAgLy8gSW50
ZXJuYWwKKyAgICB2b2lkIGRvTGF5b3V0VGlsZXMoKTsKKyAgICB2b2lkIGRyYXdMYXllcihUaWxl
TGF5ZXIqLCBDR0NvbnRleHRSZWYpOworICAgIHZvaWQgcHJlcGFyZVRvRHJhdygpOworICAgIHZv
aWQgZmluaXNoZWRDcmVhdGluZ1RpbGVzKGJvb2wgZGlkQ3JlYXRlVGlsZXMsIGJvb2wgY3JlYXRl
TW9yZSk7CisgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0SW5MYXllcihDQUxheWVyICopIGNvbnN0
OworICAgIENBTGF5ZXIqIGhvc3RMYXllcigpIGNvbnN0OworICAgIHVuc2lnbmVkIHRpbGVDYXBh
Y2l0eUZvckdyaWQoVGlsZUdyaWQqKTsKKyAgICBDb2xvciBjb2xvckZvckdyaWRUaWxlQm9yZGVy
KFRpbGVHcmlkKikgY29uc3Q7CisKKyAgICB2b2lkIGRvUGVuZGluZ1JlcGFpbnRzKCk7CisKKyAg
ICBib29sIGlzU3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9pc1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZDsgfQorICAgIHZvaWQgc2V0U3BlY3Vs
YXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkKGJvb2wpOworICAgIAorICAgIGVudW0gU3luY2hyb25v
dXNUaWxlQ3JlYXRpb25Nb2RlIHsgQ292ZXJWaXNpYmxlT25seSwgQ292ZXJTcGVjdWxhdGl2ZSB9
OworCitwcml2YXRlOgorICAgIFRpbGVHcmlkKiBhY3RpdmVUaWxlR3JpZCgpIGNvbnN0OworICAg
IFRpbGVHcmlkKiBpbmFjdGl2ZVRpbGVHcmlkKCkgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZVRp
bGluZ01vZGUoKTsKKyAgICBib29sIGlzVGlsZUludmFsaWRhdGlvblN1c3BlbmRlZCgpIGNvbnN0
OworICAgIGJvb2wgaXNUaWxlQ3JlYXRpb25TdXNwZW5kZWQoKSBjb25zdDsKKyAgICB2b2lkIGZs
dXNoU2F2ZWREaXNwbGF5UmVjdHMoKTsKKyAgICB2b2lkIGludmFsaWRhdGVUaWxlcyhjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQgc2V0Wm9vbWVkT3V0U2NhbGVJbnRlcm5hbChm
bG9hdCk7CisgICAgdm9pZCBjb21taXRTY2FsZUNoYW5nZSgpOworICAgIHZvaWQgYnJpbmdBY3Rp
dmVUaWxlR3JpZFRvRnJvbnQoKTsKKyAgICB2b2lkIGFkanVzdFRpbGVHcmlkVHJhbnNmb3Jtcygp
OworICAgIHZvaWQgcmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzSW50ZXJuYWwoKTsKKyAgICB2b2lk
IGNyZWF0ZVRpbGVzSW5BY3RpdmVHcmlkKFN5bmNocm9ub3VzVGlsZUNyZWF0aW9uTW9kZSk7Cisg
ICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5nUmVwYWludCgpOworCisgICAgdm9p
ZCB0aWxlQ3JlYXRpb25UaW1lckZpcmVkKFRpbWVyPFRpbGVDYWNoZT4qKTsKKworICAgIHZvaWQg
ZHJhd1JlcGxhY2VtZW50SW1hZ2UoVGlsZUxheWVyKiwgQ0dDb250ZXh0UmVmLCBDR0ltYWdlUmVm
KTsKKyAgICB2b2lkIGRyYXdXaW5kb3dDb250ZW50KFRpbGVMYXllciosIENHQ29udGV4dFJlZiwg
Q0dSZWN0IGRpcnR5UmVjdCk7CisKKyAgICBXQUtXaW5kb3cqIG1fd2luZG93OworCisgICAgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2U7CisKKyAgICBib29s
IG1fa2VlcHNab29tZWRPdXRUaWxlczsKKworICAgIGJvb2wgbV9oYXNQZW5kaW5nTGF5b3V0VGls
ZXM7CisgICAgYm9vbCBtX2hhc1BlbmRpbmdVcGRhdGVUaWxpbmdNb2RlOworICAgIC8vIEVuc3Vy
ZSB0aGVyZSBhcmUgbm8gYXN5bmMgY2FsbHMgb24gYSBkZWFkIHRpbGUgY2FjaGUuCisgICAgUmV0
YWluUHRyPFRpbGVDYWNoZVRvbWJzdG9uZT4gbV90b21ic3RvbmU7CisKKyAgICBUaWxpbmdNb2Rl
IG1fdGlsaW5nTW9kZTsKKyAgICBUaWxpbmdEaXJlY3Rpb24gbV90aWxpbmdEaXJlY3Rpb247CisK
KyAgICBJbnRTaXplIG1fdGlsZVNpemU7CisgICAgYm9vbCBtX3RpbGVzT3BhcXVlOworCisgICAg
Ym9vbCBtX3RpbGVCb3JkZXJzVmlzaWJsZTsKKyAgICBib29sIG1fdGlsZVBhaW50Q291bnRlcnNW
aXNpYmxlOworICAgIGJvb2wgbV9hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkOworICAgIGJvb2wg
bV9pc1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZDsKKworICAgIGJvb2wgbV9kaWRDYWxs
V2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nOworICAgIE93blB0cjxUaWxlR3JpZD4gbV96b29t
ZWRPdXRUaWxlR3JpZDsKKyAgICBPd25QdHI8VGlsZUdyaWQ+IG1fem9vbWVkSW5UaWxlR3JpZDsK
KworICAgIFRpbWVyPFRpbGVDYWNoZT4gbV90aWxlQ3JlYXRpb25UaW1lcjsKKworICAgIFZlY3Rv
cjxJbnRSZWN0PiBtX3NhdmVkRGlzcGxheVJlY3RzOworCisgICAgZmxvYXQgbV9jdXJyZW50U2Nh
bGU7CisKKyAgICBmbG9hdCBtX3BlbmRpbmdTY2FsZTsKKyAgICBmbG9hdCBtX3BlbmRpbmdab29t
ZWRPdXRTY2FsZTsKKworICAgIG11dGFibGUgTXV0ZXggbV90aWxlTXV0ZXg7CisgICAgbXV0YWJs
ZSBNdXRleCBtX3NhdmVkRGlzcGxheVJlY3RNdXRleDsKKyAgICBtdXRhYmxlIE11dGV4IG1fY29u
dGVudFJlcGxhY2VtZW50SW1hZ2VNdXRleDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIFRpbGVDYWNoZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVDYWNoZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wY2VjMDdkNmJl
M2E4N2ZmN2FlYzFiODU5MjM5ZjMwZDA4ZjVjY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVDYWNoZS5tbQpAQCAtMCwwICsxLDgyMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaWxlQ2FjaGUuaCIKKwor
I2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZW1v
cnlQcmVzc3VyZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJTeXN0ZW1NZW1vcnkuaCIKKyNpbmNsdWRl
ICJUaWxlR3JpZC5oIgorI2luY2x1ZGUgIlRpbGVHcmlkVGlsZS5oIgorI2luY2x1ZGUgIlRpbGVM
YXllci5oIgorI2luY2x1ZGUgIlRpbGVMYXllclBvb2wuaCIKKyNpbmNsdWRlICJXQUtXaW5kb3cu
aCIKKyNpbmNsdWRlICJXS0dyYXBoaWNzLmgiCisjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVy
ZmFjZS5oIgorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWRSdW4uaCIKKyNpbmNsdWRlIDxRdWFydHpD
b3JlL1F1YXJ0ekNvcmUuaD4KKyNpbmNsdWRlIDxRdWFydHpDb3JlL1F1YXJ0ekNvcmVQcml2YXRl
Lmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK0BpbnRlcmZhY2UgV0FLVmlldyAo
V2ViVmlld0V4dHJhcykKKy0gKHZvaWQpX2Rpc3BhdGNoVGlsZURpZERyYXc6KENBTGF5ZXIqKXRp
bGU7CistICh2b2lkKV93aWxsU3RhcnRTY3JvbGxpbmdPclpvb21pbmc7CistICh2b2lkKV9kaWRG
aW5pc2hTY3JvbGxpbmdPclpvb21pbmc7CistICh2b2lkKV9kaXNwYXRjaFRpbGVEaWREcmF3Owor
LSAodm9pZClfc2NoZWR1bGVMYXllckZsdXNoRm9yUGVuZGluZ1RpbGVDYWNoZVJlcGFpbnQ7CitA
ZW5kCisKK0BpbnRlcmZhY2UgVGlsZUNhY2hlVG9tYnN0b25lIDogTlNPYmplY3QgeworICAgIEJP
T0wgZGVhZDsKK30KK0Bwcm9wZXJ0eShnZXR0ZXI9aXNEZWFkKSBCT09MIGRlYWQ7CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFRpbGVDYWNoZVRvbWJzdG9uZQorCitAc3ludGhlc2l6ZSBkZWFk
OworCitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVGlsZUNhY2hlOjpUaWxlQ2FjaGUo
V0FLV2luZG93KiB3aW5kb3cpCisgICAgOiBtX3dpbmRvdyh3aW5kb3cpCisgICAgLCBtX2tlZXBz
Wm9vbWVkT3V0VGlsZXMoZmFsc2UpCisgICAgLCBtX2hhc1BlbmRpbmdMYXlvdXRUaWxlcyhmYWxz
ZSkKKyAgICAsIG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01vZGUoZmFsc2UpCisgICAgLCBtX3Rv
bWJzdG9uZShhZG9wdE5TKFtbVGlsZUNhY2hlVG9tYnN0b25lIGFsbG9jXSBpbml0XSkpCisgICAg
LCBtX3RpbGluZ01vZGUoTm9ybWFsKQorICAgICwgbV90aWxpbmdEaXJlY3Rpb24oVGlsaW5nRGly
ZWN0aW9uRG93bikKKyAgICAsIG1fdGlsZVNpemUoNTEyLCA1MTIpCisgICAgLCBtX3RpbGVzT3Bh
cXVlKHRydWUpCisgICAgLCBtX3RpbGVCb3JkZXJzVmlzaWJsZShmYWxzZSkKKyAgICAsIG1fdGls
ZVBhaW50Q291bnRlcnNWaXNpYmxlKGZhbHNlKQorICAgICwgbV9hY2NlbGVyYXRlZERyYXdpbmdF
bmFibGVkKGZhbHNlKQorICAgICwgbV9pc1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCh0
cnVlKQorICAgICwgbV9kaWRDYWxsV2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nKGZhbHNlKQor
ICAgICwgbV96b29tZWRPdXRUaWxlR3JpZChQYXNzT3duUHRyPFRpbGVHcmlkPigpKQorICAgICwg
bV96b29tZWRJblRpbGVHcmlkKFBhc3NPd25QdHI8VGlsZUdyaWQ+KCkpCisgICAgLCBtX3RpbGVD
cmVhdGlvblRpbWVyKHRoaXMsICZUaWxlQ2FjaGU6OnRpbGVDcmVhdGlvblRpbWVyRmlyZWQpCisg
ICAgLCBtX2N1cnJlbnRTY2FsZSgxLmYpCisgICAgLCBtX3BlbmRpbmdTY2FsZSgwKQorICAgICwg
bV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUoMCkKK3sKKyAgICBtX3pvb21lZE91dFRpbGVHcmlkID0g
VGlsZUdyaWQ6OmNyZWF0ZSh0aGlzLCBtX3RpbGVTaXplKTsKKyAgICBbaG9zdExheWVyKCkgaW5z
ZXJ0U3VibGF5ZXI6bV96b29tZWRPdXRUaWxlR3JpZC0+dGlsZUhvc3RMYXllcigpIGF0SW5kZXg6
MF07CisgICAgaG9zdExheWVyU2l6ZUNoYW5nZWQoKTsKK30KKworVGlsZUNhY2hlOjp+VGlsZUNh
Y2hlKCkKK3sKKyAgICBbbV90b21ic3RvbmUuZ2V0KCkgc2V0RGVhZDp0cnVlXTsKK30KKworQ0dG
bG9hdCBUaWxlQ2FjaGU6OnNjcmVlblNjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gW21fd2lu
ZG93IHNjcmVlblNjYWxlXTsKK30KKworQ0FMYXllciogVGlsZUNhY2hlOjpob3N0TGF5ZXIoKSBj
b25zdAoreworICAgIHJldHVybiBbbV93aW5kb3cgaG9zdExheWVyXTsKK30KKworRmxvYXRSZWN0
IFRpbGVDYWNoZTo6dmlzaWJsZVJlY3RJbkxheWVyKENBTGF5ZXIgKmxheWVyKSBjb25zdAorewor
ICAgIHJldHVybiBbbGF5ZXIgY29udmVydFJlY3Q6W21fd2luZG93IGV4dGVuZGVkVmlzaWJsZVJl
Y3RdIGZyb21MYXllcjpob3N0TGF5ZXIoKV07Cit9CisKK2Jvb2wgVGlsZUNhY2hlOjp0aWxlc09w
YXF1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZXNPcGFxdWU7Cit9CisgICAgCitUaWxl
R3JpZCogVGlsZUNhY2hlOjphY3RpdmVUaWxlR3JpZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2tl
ZXBzWm9vbWVkT3V0VGlsZXMpCisgICAgICAgIHJldHVybiBtX3pvb21lZE91dFRpbGVHcmlkLmdl
dCgpOworICAgIGlmIChtX3RpbGluZ01vZGUgPT0gWm9vbWluZykKKyAgICAgICAgcmV0dXJuIG1f
em9vbWVkT3V0VGlsZUdyaWQuZ2V0KCk7CisgICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCAmJiBt
X2N1cnJlbnRTY2FsZSA9PSBtX3pvb21lZEluVGlsZUdyaWQtPnNjYWxlKCkpCisgICAgICAgIHJl
dHVybiBtX3pvb21lZEluVGlsZUdyaWQuZ2V0KCk7CisgICAgcmV0dXJuIG1fem9vbWVkT3V0VGls
ZUdyaWQuZ2V0KCk7Cit9CisKK1RpbGVHcmlkKiBUaWxlQ2FjaGU6OmluYWN0aXZlVGlsZUdyaWQo
KSBjb25zdAoreworICAgIHJldHVybiBhY3RpdmVUaWxlR3JpZCgpID09IG1fem9vbWVkT3V0VGls
ZUdyaWQgPyBtX3pvb21lZEluVGlsZUdyaWQuZ2V0KCkgOiBtX3pvb21lZE91dFRpbGVHcmlkLmdl
dCgpOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0VGlsZXNPcGFxdWUoYm9vbCBvcGFxdWUpCit7
CisgICAgaWYgKG1fdGlsZXNPcGFxdWUgPT0gb3BhcXVlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworCisgICAgbV90aWxlc09wYXF1ZSA9
IG9wYXF1ZTsKKyAgICBtX3pvb21lZE91dFRpbGVHcmlkLT51cGRhdGVUaWxlT3BhY2l0eSgpOwor
ICAgIGlmIChtX3pvb21lZEluVGlsZUdyaWQpCisgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+
dXBkYXRlVGlsZU9wYWNpdHkoKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmRvTGF5b3V0VGlsZXMo
KQoreworICAgIGlmIChpc1RpbGVDcmVhdGlvblN1c3BlbmRlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAgIFRpbGVHcmlkKiBh
Y3RpdmVHcmlkID0gYWN0aXZlVGlsZUdyaWQoKTsKKyAgICAvLyBFdmVuIHRob3VnaCB3ZSBhcmVu
J3QgYWN0dWFsbHkgY3JlYXRpbmcgdGlsZXMgaW4gdGhlIGluYWN0aXZlIGdyaWQsIHdlCisgICAg
Ly8gc3RpbGwgbmVlZCB0byBkcm9wIGludmFsaWQgdGlsZXMgaW4gcmVzcG9uc2UgdG8gYSBsYXlv
dXQuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS85ODM5ODY3Pi4KKyAgICBpZiAoVGlsZUdy
aWQqIGluYWN0aXZlR3JpZCA9IGluYWN0aXZlVGlsZUdyaWQoKSkKKyAgICAgICAgaW5hY3RpdmVH
cmlkLT5kcm9wSW52YWxpZFRpbGVzKCk7CisgICAgaWYgKGFjdGl2ZUdyaWQtPmNoZWNrRG9TaW5n
bGVUaWxlTGF5b3V0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBjcmVhdGVUaWxlc0luQWN0aXZl
R3JpZChDb3ZlclZpc2libGVPbmx5KTsKK30KKwordm9pZCBUaWxlQ2FjaGU6Omhvc3RMYXllclNp
emVDaGFuZ2VkKCkKK3sKKyAgICBtX3pvb21lZE91dFRpbGVHcmlkLT51cGRhdGVIb3N0TGF5ZXJT
aXplKCk7CisgICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCkKKyAgICAgICAgbV96b29tZWRJblRp
bGVHcmlkLT51cGRhdGVIb3N0TGF5ZXJTaXplKCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRL
ZWVwc1pvb21lZE91dFRpbGVzKGJvb2wga2VlcCkKK3sKKyAgICBtX2tlZXBzWm9vbWVkT3V0VGls
ZXMgPSBrZWVwOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0Q3VycmVudFNjYWxlKGZsb2F0IHNj
YWxlKQoreworICAgIEFTU0VSVChzY2FsZSA+IDApOworCisgICAgaWYgKGN1cnJlbnRTY2FsZSgp
ID09IHNjYWxlKSB7CisgICAgICAgIG1fcGVuZGluZ1NjYWxlID0gMDsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX3BlbmRpbmdTY2FsZSA9IHNjYWxlOworICAgIGlmIChtX3RpbGluZ01v
ZGUgPT0gRGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBjb21taXRTY2FsZUNoYW5nZSgp
OworCisgICAgaWYgKCFrZWVwc1pvb21lZE91dFRpbGVzKCkgJiYgIWlzVGlsZUludmFsaWRhdGlv
blN1c3BlbmRlZCgpKSB7CisgICAgICAgIC8vIFRpbGUgaW52YWxpZGF0aW9uIGlzIG5vcm1hbGx5
IHN1c3BlbmRlZCBkdXJpbmcgem9vbWluZyBieSBVSUtpdCBidXQgc29tZSBhcHBsaWNhdGlvbnMK
KyAgICAgICAgLy8gdXNpbmcgY3VzdG9tIHNjcm9sbHZpZXdzIG1heSB6b29tIHdpdGhvdXQgdHJp
Z2dlcmluZyB0aGUgY2FsbGJhY2tzLiBJbnZhbGlkYXRlIHRoZSB0aWxlcyBleHBsaWNpdGx5Lgor
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAgICAgICBhY3RpdmVU
aWxlR3JpZCgpLT5kcm9wQWxsVGlsZXMoKTsKKyAgICAgICAgYWN0aXZlVGlsZUdyaWQoKS0+Y3Jl
YXRlVGlsZXMoQ292ZXJWaXNpYmxlT25seSk7CisgICAgfQorfQorCit2b2lkIFRpbGVDYWNoZTo6
c2V0Wm9vbWVkT3V0U2NhbGUoZmxvYXQgc2NhbGUpCit7CisgICAgQVNTRVJUKHNjYWxlID4gMCk7
CisKKyAgICBpZiAoem9vbWVkT3V0U2NhbGUoKSA9PSBzY2FsZSkgeworICAgICAgICBtX3BlbmRp
bmdab29tZWRPdXRTY2FsZSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wZW5k
aW5nWm9vbWVkT3V0U2NhbGUgPSBzY2FsZTsKKyAgICBpZiAobV90aWxpbmdNb2RlID09IERpc2Fi
bGVkKQorICAgICAgICByZXR1cm47CisgICAgY29tbWl0U2NhbGVDaGFuZ2UoKTsKK30KKyAgICAK
K3ZvaWQgVGlsZUNhY2hlOjpjb21taXRTY2FsZUNoYW5nZSgpCit7CisgICAgQVNTRVJUKG1fcGVu
ZGluZ1pvb21lZE91dFNjYWxlIHx8IG1fcGVuZGluZ1NjYWxlKTsKKyAgICBBU1NFUlQobV90aWxp
bmdNb2RlICE9IERpc2FibGVkKTsKKyAgICAKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxl
TXV0ZXgpOworCisgICAgaWYgKG1fcGVuZGluZ1pvb21lZE91dFNjYWxlKSB7CisgICAgICAgIG1f
em9vbWVkT3V0VGlsZUdyaWQtPnNldFNjYWxlKG1fcGVuZGluZ1pvb21lZE91dFNjYWxlKTsKKyAg
ICAgICAgbV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUgPSAwOworICAgIH0KKyAgICAKKyAgICBpZiAo
IW1fa2VlcHNab29tZWRPdXRUaWxlcykgeworICAgICAgICBBU1NFUlQoYWN0aXZlVGlsZUdyaWQo
KSA9PSBtX3pvb21lZE91dFRpbGVHcmlkKTsKKyAgICAgICAgaWYgKG1fcGVuZGluZ1NjYWxlKSB7
CisgICAgICAgICAgICBtX2N1cnJlbnRTY2FsZSA9IG1fcGVuZGluZ1NjYWxlOworICAgICAgICAg
ICAgbV96b29tZWRPdXRUaWxlR3JpZC0+c2V0U2NhbGUobV9jdXJyZW50U2NhbGUpOworICAgICAg
ICB9CisgICAgICAgIG1fcGVuZGluZ1NjYWxlID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChtX3BlbmRpbmdTY2FsZSkgeworICAgICAgICBtX2N1cnJlbnRTY2FsZSA9IG1f
cGVuZGluZ1NjYWxlOworICAgICAgICBtX3BlbmRpbmdTY2FsZSA9IDA7CisgICAgfQorCisgICAg
aWYgKG1fY3VycmVudFNjYWxlICE9IG1fem9vbWVkT3V0VGlsZUdyaWQtPnNjYWxlKCkpIHsKKyAg
ICAgICAgaWYgKCFtX3pvb21lZEluVGlsZUdyaWQpIHsKKyAgICAgICAgICAgIG1fem9vbWVkSW5U
aWxlR3JpZCA9IFRpbGVHcmlkOjpjcmVhdGUodGhpcywgbV90aWxlU2l6ZSk7CisgICAgICAgICAg
ICBbaG9zdExheWVyKCkgYWRkU3VibGF5ZXI6bV96b29tZWRJblRpbGVHcmlkLT50aWxlSG9zdExh
eWVyKCldOworICAgICAgICAgICAgaG9zdExheWVyU2l6ZUNoYW5nZWQoKTsKKyAgICAgICAgfQor
ICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPnNldFNjYWxlKG1fY3VycmVudFNjYWxlKTsKKyAg
ICB9CisKKyAgICAvLyBLZWVwIHRoZSBjdXJyZW50IG9yZGVyaW5nIGR1cmluZyB6b29taW5nLgor
ICAgIGlmIChtX3RpbGluZ01vZGUgIT0gWm9vbWluZykKKyAgICAgICAgYnJpbmdBY3RpdmVUaWxl
R3JpZFRvRnJvbnQoKTsKKworICAgIGFkanVzdFRpbGVHcmlkVHJhbnNmb3JtcygpOworICAgIGxh
eW91dFRpbGVzKCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpicmluZ0FjdGl2ZVRpbGVHcmlkVG9G
cm9udCgpCit7CisgICAgVGlsZUdyaWQqIGFjdGl2ZUdyaWQgPSBhY3RpdmVUaWxlR3JpZCgpOwor
ICAgIFRpbGVHcmlkKiBvdGhlckdyaWQgPSBpbmFjdGl2ZVRpbGVHcmlkKCk7CisgICAgaWYgKCFv
dGhlckdyaWQpCisgICAgICAgIHJldHVybjsKKyAgICBDQUxheWVyKiBmcm9udExheWVyID0gYWN0
aXZlR3JpZC0+dGlsZUhvc3RMYXllcigpOworICAgIENBTGF5ZXIqIG90aGVyTGF5ZXIgPSBvdGhl
ckdyaWQtPnRpbGVIb3N0TGF5ZXIoKTsKKyAgICBbaG9zdExheWVyKCkgaW5zZXJ0U3VibGF5ZXI6
ZnJvbnRMYXllciBhYm92ZTpvdGhlckxheWVyXTsKK30KKyAgICAKK3ZvaWQgVGlsZUNhY2hlOjph
ZGp1c3RUaWxlR3JpZFRyYW5zZm9ybXMoKQoreworICAgIENBTGF5ZXIqIHpvb21lZE91dEhvc3RM
YXllciA9IG1fem9vbWVkT3V0VGlsZUdyaWQtPnRpbGVIb3N0TGF5ZXIoKTsKKyAgICBmbG9hdCB0
cmFuc2Zvcm1TY2FsZSA9IGN1cnJlbnRTY2FsZSgpIC8gem9vbWVkT3V0U2NhbGUoKTsKKyAgICBb
em9vbWVkT3V0SG9zdExheWVyIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKHRy
YW5zZm9ybVNjYWxlLCB0cmFuc2Zvcm1TY2FsZSwgMS4wZildOworICAgIG1fem9vbWVkT3V0VGls
ZUdyaWQtPnVwZGF0ZUhvc3RMYXllclNpemUoKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmxheW91
dFRpbGVzKCkKK3sKKyAgICBpZiAobV9oYXNQZW5kaW5nTGF5b3V0VGlsZXMpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2hhc1BlbmRpbmdMYXlvdXRUaWxlcyA9IHRydWU7CisKKyAgICBUaWxlQ2Fj
aGVUb21ic3RvbmUgKnRvbWJzdG9uZSA9IG1fdG9tYnN0b25lLmdldCgpOworICAgIFdlYlRocmVh
ZFJ1biheeworICAgICAgICBpZiAoW3RvbWJzdG9uZSBpc0RlYWRdKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBtX2hhc1BlbmRpbmdMYXlvdXRUaWxlcyA9IGZhbHNlOworICAgICAgICBk
b0xheW91dFRpbGVzKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpsYXlvdXRUaWxl
c05vdygpCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsKKwor
ICAgIC8vIGxheW91dFRpbGVzTm93KCkgaXMgY2FsbGVkIGFmdGVyIGEgem9vbSwgd2hpbGUgdGhl
IHRpbGUgbW9kZSBpcyBzdGlsbCBzZXQgdG8gWm9vbWluZy4KKyAgICAvLyBJZiB3ZSBjaGVja2Vk
IGZvciBpc1RpbGVDcmVhdGlvblN1c3BlbmRlZCBoZXJlLCB0aGF0IHdvdWxkIGNhdXNlIDxyZGFy
Oi8vcHJvYmxlbS84NDM0MTEyPiAoUGFnZSBmbGFzaGVzIGFmdGVyIHpvb21pbmcgaW4vb3V0KS4K
KyAgICBpZiAobV90aWxpbmdNb2RlID09IERpc2FibGVkKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgLy8gRklYTUU6IGxheW91dFRpbGVzTm93IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgc3Rh
dGUgaGFzIGJlZW4gc2V0IHRvIG5vbi16b29taW5nIGFuZCB0aGUgYWN0aXZlIGdyaWQgaXMgdGhl
IGZpbmFsIG9uZS4gCisgICAgLy8gRml4IHRoaXMgaW4gVUlLaXQgc2lkZSAocGVyaGFwcyBhbHNv
IGdldHRpbmcgcmlkIG9mIHRoaXMgY2FsbCkgYW5kIHJlbW92ZSB0aGlzIGNvZGUgYWZ0ZXJ3YXJk
cy4KKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vOTY3Mjk5Mz4KKyAgICBUaWxpbmdNb2RlIHNhdmVk
VGlsaW5nTW9kZSA9IG1fdGlsaW5nTW9kZTsKKyAgICBpZiAobV90aWxpbmdNb2RlID09IFpvb21p
bmcpCisgICAgICAgIG1fdGlsaW5nTW9kZSA9IE1pbmltYWw7CisKKyAgICBNdXRleExvY2tlciBs
b2NrZXIobV90aWxlTXV0ZXgpOworICAgIFRpbGVHcmlkKiBhY3RpdmVHcmlkID0gYWN0aXZlVGls
ZUdyaWQoKTsKKyAgICBpZiAoYWN0aXZlR3JpZC0+Y2hlY2tEb1NpbmdsZVRpbGVMYXlvdXQoKSkg
eworICAgICAgICBtX3RpbGluZ01vZGUgPSBzYXZlZFRpbGluZ01vZGU7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY3JlYXRlVGlsZXNJbkFjdGl2ZUdyaWQoQ292ZXJWaXNpYmxlT25seSk7
CisgICAgbV90aWxpbmdNb2RlID0gc2F2ZWRUaWxpbmdNb2RlOworfQorCit2b2lkIFRpbGVDYWNo
ZTo6bGF5b3V0VGlsZXNOb3dGb3JSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNT
RVJUKFdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsKKyAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV90aWxlTXV0ZXgpOworCisgICAgYWN0aXZlVGlsZUdyaWQoKS0+YWRkVGlsZXNDb3Zlcmlu
Z1JlY3QocmVjdCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpyZW1vdmVBbGxOb25WaXNpYmxlVGls
ZXMoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAgcmVtb3Zl
QWxsTm9uVmlzaWJsZVRpbGVzSW50ZXJuYWwoKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OnJlbW92
ZUFsbE5vblZpc2libGVUaWxlc0ludGVybmFsKCkKK3sKKyAgICBUaWxlR3JpZCogYWN0aXZlR3Jp
ZCA9IGFjdGl2ZVRpbGVHcmlkKCk7CisgICAgaWYgKGtlZXBzWm9vbWVkT3V0VGlsZXMoKSAmJiBh
Y3RpdmVHcmlkID09IG1fem9vbWVkSW5UaWxlR3JpZCAmJiBhY3RpdmVHcmlkLT5oYXNUaWxlcygp
KQorICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9wQWxsVGlsZXMoKTsKKworICAgIElu
dFJlY3QgYWN0aXZlVGlsZUJvdW5kcyA9IGFjdGl2ZUdyaWQtPmJvdW5kcygpOworICAgIGlmIChh
Y3RpdmVUaWxlQm91bmRzLndpZHRoKCkgPD0gbV90aWxlU2l6ZS53aWR0aCgpICYmIGFjdGl2ZVRp
bGVCb3VuZHMuaGVpZ2h0KCkgPD0gbV90aWxlU2l6ZS5oZWlnaHQoKSkgeworICAgICAgICAvLyBJ
ZiB0aGUgdmlldyBpcyBzbWFsbGVyIHRoYW4gYSB0aWxlLCBrZWVwIHRoZSB0aWxlIGV2ZW4gaWYg
aXQgaXMgbm90IHZpc2libGUuCisgICAgICAgIGFjdGl2ZUdyaWQtPmRyb3BUaWxlc091dHNpZGVS
ZWN0KGFjdGl2ZVRpbGVCb3VuZHMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYWN0
aXZlR3JpZC0+ZHJvcFRpbGVzT3V0c2lkZVJlY3QoYWN0aXZlR3JpZC0+dmlzaWJsZVJlY3QoKSk7
Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpyZW1vdmVBbGxUaWxlcygpCit7CisgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKKyAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9wQWxs
VGlsZXMoKTsKKyAgICBpZiAobV96b29tZWRJblRpbGVHcmlkKQorICAgICAgICBtX3pvb21lZElu
VGlsZUdyaWQtPmRyb3BBbGxUaWxlcygpOworfQorCit2b2lkIFRpbGVDYWNoZTo6cmVtb3ZlRm9y
ZWdyb3VuZFRpbGVzKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOwor
ICAgIGlmICgha2VlcHNab29tZWRPdXRUaWxlcygpKQorICAgICAgICBtX3pvb21lZE91dFRpbGVH
cmlkLT5kcm9wQWxsVGlsZXMoKTsKKyAgICBpZiAobV96b29tZWRJblRpbGVHcmlkKQorICAgICAg
ICBtX3pvb21lZEluVGlsZUdyaWQtPmRyb3BBbGxUaWxlcygpOworfQorCit2b2lkIFRpbGVDYWNo
ZTo6c2V0Q29udGVudFJlcGxhY2VtZW50SW1hZ2UoUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvbnRl
bnRSZXBsYWNlbWVudEltYWdlKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NvbnRlbnRS
ZXBsYWNlbWVudEltYWdlTXV0ZXgpOworICAgIG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2UgPSBj
b250ZW50UmVwbGFjZW1lbnRJbWFnZTsKK30KKworUmV0YWluUHRyPENHSW1hZ2VSZWY+IFRpbGVD
YWNoZTo6Y29udGVudFJlcGxhY2VtZW50SW1hZ2UoKSBjb25zdAoreworICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX2NvbnRlbnRSZXBsYWNlbWVudEltYWdlTXV0ZXgpOworICAgIHJldHVybiBtX2Nv
bnRlbnRSZXBsYWNlbWVudEltYWdlOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0VGlsZUJvcmRl
cnNWaXNpYmxlKGJvb2wgZmxhZykKK3sKKyAgICBpZiAoZmxhZyA9PSBtX3RpbGVCb3JkZXJzVmlz
aWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90aWxlQm9yZGVyc1Zpc2libGUgPSBmbGFn
OworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnVwZGF0ZVRpbGVCb3JkZXJWaXNpYmlsaXR5KCk7
CisgICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCkKKyAgICAgICAgbV96b29tZWRJblRpbGVHcmlk
LT51cGRhdGVUaWxlQm9yZGVyVmlzaWJpbGl0eSgpOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0
VGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKGJvb2wgZmxhZykKK3sKKyAgICBtX3RpbGVQYWludENv
dW50ZXJzVmlzaWJsZSA9IGZsYWc7CisgICAgLy8gVGhlIG51bWJlcnMgd2lsbCBzaG93IHVwIHRo
ZSBuZXh0IHRpbWUgdGhlIHRpbGVzIHBhaW50LgorfQorCit2b2lkIFRpbGVDYWNoZTo6ZmluaXNo
ZWRDcmVhdGluZ1RpbGVzKGJvb2wgZGlkQ3JlYXRlVGlsZXMsIGJvb2wgY3JlYXRlTW9yZSkKK3sK
KyAgICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFsbCB0aWxlcyBhcmUgc2hvd2luZyB0aGUg
c2FtZSB2ZXJzaW9uIG9mIHRoZSBjb250ZW50LgorICAgIGlmIChkaWRDcmVhdGVUaWxlcyAmJiAh
bV9zYXZlZERpc3BsYXlSZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIGZsdXNoU2F2ZWREaXNwbGF5
UmVjdHMoKTsKKworICAgIGlmIChrZWVwc1pvb21lZE91dFRpbGVzKCkpIHsKKyAgICAgICAgaWYg
KG1fem9vbWVkSW5UaWxlR3JpZCAmJiBhY3RpdmVUaWxlR3JpZCgpID09IG1fem9vbWVkT3V0VGls
ZUdyaWQgJiYgbV90aWxpbmdNb2RlICE9IFpvb21pbmcgJiYgbV96b29tZWRJblRpbGVHcmlkLT5o
YXNUaWxlcygpKSB7CisgICAgICAgICAgICAvLyBUaGlzIENBIHRyYW5zYWN0aW9uIHdpbGwgY292
ZXIgdGhlIHNjcmVlbiB3aXRoIHRvcCBsZXZlbCB0aWxlcy4KKyAgICAgICAgICAgIC8vIFdlIGNh
biByZW1vdmUgem9vbWVkLWluIHRpbGVzIHdpdGhvdXQgZmxhc2hpbmcuCisgICAgICAgICAgICBt
X3pvb21lZEluVGlsZUdyaWQtPmRyb3BBbGxUaWxlcygpOworICAgICAgICB9IGVsc2UgaWYgKGFj
dGl2ZVRpbGVHcmlkKCkgPT0gbV96b29tZWRJblRpbGVHcmlkKSB7CisgICAgICAgICAgICAvLyBQ
YXNzIHRoZSBtaW5pbXVtIHBvc3NpYmxlIGRpc3RhbmNlIHRvIGNvbnNpZGVyIGFsbCB0aWxlcywg
ZXZlbiB2aXNpYmxlIG9uZXMuCisgICAgICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9w
RGlzdGFudFRpbGVzKDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWluKCkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gS2VlcCBjcmVhdGluZyB0aWxlcyB1bnRpbCB0aGUgd2hv
bGUgY292ZXJSZWN0IGlzIGNvdmVyZWQuCisgICAgaWYgKGNyZWF0ZU1vcmUpCisgICAgICAgIG1f
dGlsZUNyZWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFRpbGVDYWNoZTo6
dGlsZUNyZWF0aW9uVGltZXJGaXJlZChUaW1lcjxUaWxlQ2FjaGU+KikKK3sKKyAgICBpZiAoaXNU
aWxlQ3JlYXRpb25TdXNwZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAgY3JlYXRlVGlsZXNJbkFjdGl2ZUdyaWQoQ292ZXJT
cGVjdWxhdGl2ZSk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpjcmVhdGVUaWxlc0luQWN0aXZlR3Jp
ZChTeW5jaHJvbm91c1RpbGVDcmVhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobWVtb3J5UHJl
c3N1cmVIYW5kbGVyKCkuaGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3VyZSgpKSB7CisgICAgICAgIExP
RyhNZW1vcnlQcmVzc3VyZSwgIlVuZGVyIG1lbW9yeSBwcmVzc3VyZSBhdDogJXMiLCBfX1BSRVRU
WV9GVU5DVElPTl9fKTsKKyAgICAgICAgcmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzSW50ZXJuYWwo
KTsKKyAgICB9CisgICAgYWN0aXZlVGlsZUdyaWQoKS0+Y3JlYXRlVGlsZXMobW9kZSk7Cit9CisK
K3Vuc2lnbmVkIFRpbGVDYWNoZTo6dGlsZUNhcGFjaXR5Rm9yR3JpZChUaWxlR3JpZCogZ3JpZCkK
K3sKKyAgICBzdGF0aWMgdW5zaWduZWQgY2FwYWNpdHk7CisgICAgaWYgKCFjYXBhY2l0eSkgewor
ICAgICAgICBzaXplX3QgdG90YWxNZW1vcnkgPSBzeXN0ZW1Ub3RhbE1lbW9yeSgpOworICAgICAg
ICB0b3RhbE1lbW9yeSAvPSAxMDI0ICogMTAyNDsKKyAgICAgICAgaWYgKHRvdGFsTWVtb3J5ID49
IDEwMjQpCisgICAgICAgICAgICBjYXBhY2l0eSA9IDEyOCAqIDEwMjQgKiAxMDI0OworICAgICAg
ICBlbHNlIGlmICh0b3RhbE1lbW9yeSA+PSA1MTIpCisgICAgICAgICAgICBjYXBhY2l0eSA9IDY0
ICogMTAyNCAqIDEwMjQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhcGFjaXR5ID0gMzIg
KiAxMDI0ICogMTAyNDsKKyAgICB9CisKKyAgICBpbnQgZ3JpZENhcGFjaXR5OworCisgICAgaW50
IG1lbW9yeUxldmVsID0gc3lzdGVtTWVtb3J5TGV2ZWwoKTsKKyAgICBpZiAobWVtb3J5TGV2ZWwg
PCAxNSkKKyAgICAgICAgZ3JpZENhcGFjaXR5ID0gY2FwYWNpdHkgLyA0OworICAgIGVsc2UgaWYg
KG1lbW9yeUxldmVsIDwgMjApCisgICAgICAgIGdyaWRDYXBhY2l0eSA9IGNhcGFjaXR5IC8gMjsK
KyAgICBlbHNlIGlmIChtZW1vcnlMZXZlbCA8IDMwKSAKKyAgICAgICAgZ3JpZENhcGFjaXR5ID0g
Y2FwYWNpdHkgKiAzIC8gNDsKKyAgICBlbHNlCisgICAgICAgIGdyaWRDYXBhY2l0eSA9IGNhcGFj
aXR5OworCisgICAgaWYgKGtlZXBzWm9vbWVkT3V0VGlsZXMoKSAmJiBncmlkID09IG1fem9vbWVk
T3V0VGlsZUdyaWQpIHsKKyAgICAgICAgaWYgKGFjdGl2ZVRpbGVHcmlkKCkgPT0gbV96b29tZWRP
dXRUaWxlR3JpZCkKKyAgICAgICAgICAgIHJldHVybiBncmlkQ2FwYWNpdHk7CisgICAgICAgIHJl
dHVybiBncmlkQ2FwYWNpdHkgLyA0OworICAgIH0KKyAgICByZXR1cm4gZ3JpZENhcGFjaXR5ICog
MyAvIDQ7Cit9CisKK0NvbG9yIFRpbGVDYWNoZTo6Y29sb3JGb3JHcmlkVGlsZUJvcmRlcihUaWxl
R3JpZCogZ3JpZCkgY29uc3QKK3sKKyAgICBpZiAoZ3JpZCA9PSBtX3pvb21lZE91dFRpbGVHcmlk
KQorICAgICAgICByZXR1cm4gQ29sb3IoLjNmLCAuMGYsIDAuNGYsIDAuNWYpOworCisgICAgcmV0
dXJuIENvbG9yKC4wZiwgLjBmLCAwLjRmLCAwLjVmKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxk
UmVwYWludEluUGllY2VzKGNvbnN0IENHUmVjdCYgZGlydHlSZWN0LCBDR1NSZWdpb25PYmogZGly
dHlSZWdpb24sIENHRmxvYXQgY29udGVudHNTY2FsZSkKK3sKKyAgICAvLyBFc3RpbWF0ZSB3aGV0
aGVyIG9yIG5vdCB3ZSBzaG91bGQgdXNlIHRoZSB1bmlvbmVkIHJlY3Qgb3IgdGhlIGluZGl2aWR1
YWwgcmVjdHMuCisgICAgLy8gV2UgZG8gdGhpcyBieSBjb21wdXRpbmcgdGhlIHBlcmNlbnRhZ2Ug
b2YgIndhc3RlZCBzcGFjZSIgaW4gdGhlIHVuaW9uLiBJZiB0aGF0IHdhc3RlZCBzcGFjZQorICAg
IC8vIGlzIHRvbyBsYXJnZSwgdGhlbiB3ZSB3aWxsIGRvIGluZGl2aWR1YWwgcmVjdCBwYWludGlu
ZyBpbnN0ZWFkLgorICAgIGZsb2F0IHNpbmdsZVBpeGVscyA9IDA7CisgICAgdW5zaWduZWQgcmVj
dENvdW50ID0gMDsKKworICAgIENHU1JlZ2lvbkVudW1lcmF0b3JPYmogZW51bWVyYXRvciA9IENH
U1JlZ2lvbkVudW1lcmF0b3IoZGlydHlSZWdpb24pOworICAgIENHUmVjdCAqc3ViUmVjdDsKKyAg
ICB3aGlsZSAoKHN1YlJlY3QgPSBDR1NOZXh0UmVjdChlbnVtZXJhdG9yKSkpIHsKKyAgICAgICAg
KytyZWN0Q291bnQ7CisgICAgICAgIHNpbmdsZVBpeGVscyArPSBzdWJSZWN0LT5zaXplLndpZHRo
ICogc3ViUmVjdC0+c2l6ZS5oZWlnaHQ7CisgICAgfQorICAgIHNpbmdsZVBpeGVscyAvPSAoY29u
dGVudHNTY2FsZSAqIGNvbnRlbnRzU2NhbGUpOworICAgIENHU1JlbGVhc2VSZWdpb25FbnVtZXJh
dG9yKGVudW1lcmF0b3IpOworCisgICAgY29uc3QgdW5zaWduZWQgY1JlY3RUaHJlc2hvbGQgPSAx
MDsKKyAgICBpZiAocmVjdENvdW50IDwgMiB8fCByZWN0Q291bnQgPiBjUmVjdFRocmVzaG9sZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgZmxvYXQgY1dhc3RlZFNwYWNlVGhy
ZXNob2xkID0gMC41MGY7CisgICAgZmxvYXQgdW5pb25QaXhlbHMgPSBkaXJ0eVJlY3Quc2l6ZS53
aWR0aCAqIGRpcnR5UmVjdC5zaXplLmhlaWdodDsKKyAgICBmbG9hdCB3YXN0ZWRTcGFjZSA9IDEu
ZiAtIChzaW5nbGVQaXhlbHMgLyB1bmlvblBpeGVscyk7CisgICAgcmV0dXJuIHdhc3RlZFNwYWNl
ID4gY1dhc3RlZFNwYWNlVGhyZXNob2xkOworfQorCit2b2lkIFRpbGVDYWNoZTo6ZHJhd1JlcGxh
Y2VtZW50SW1hZ2UoVGlsZUxheWVyKiBsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHSW1h
Z2VSZWYgaW1hZ2UpCit7CisgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEs
IDEsIDEsIDEpOworICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIENHQ29udGV4dEdldENs
aXBCb3VuZGluZ0JveChjb250ZXh0KSk7CisKKyAgICBDR0Zsb2F0IGNvbnRlbnRzU2NhbGUgPSBb
bGF5ZXIgY29udGVudHNTY2FsZV07CisgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSAv
IGNvbnRlbnRzU2NhbGUsIC0xIC8gY29udGVudHNTY2FsZSk7CisgICAgQ0dSZWN0IGltYWdlUmVj
dCA9IENHUmVjdE1ha2UoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhl
aWdodChpbWFnZSkpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtaW1h
Z2VSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgaW1h
Z2VSZWN0LCBpbWFnZSk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpkcmF3V2luZG93Q29udGVudChU
aWxlTGF5ZXIqIGxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dSZWN0IGRpcnR5UmVjdCkK
K3sKKyAgICBDR1JlY3QgZnJhbWUgPSBbbGF5ZXIgZnJhbWVdOworICAgIFdLRm9udEFudGlhbGlh
c2luZ1N0YXRlU2F2ZXIgZm9udEFudGlhbGlhc2luZ1N0YXRlKGNvbnRleHQsIFttX3dpbmRvdyB1
c2VPcmllbnRhdGlvbkRlcGVuZGVudEZvbnRBbnRpYWxpYXNpbmddICYmIFtsYXllciBpc09wYXF1
ZV0pOworICAgIGZvbnRBbnRpYWxpYXNpbmdTdGF0ZS5zZXR1cChbV0FLV2luZG93IGhhc0xhbmRz
Y2FwZU9yaWVudGF0aW9uXSk7CisKKyAgICBDR1NSZWdpb25PYmogZHJhd1JlZ2lvbiA9IChDR1NS
ZWdpb25PYmopW2xheWVyIHJlZ2lvbkJlaW5nRHJhd25dOworICAgIENHRmxvYXQgY29udGVudHNT
Y2FsZSA9IFtsYXllciBjb250ZW50c1NjYWxlXTsKKyAgICBpZiAoZHJhd1JlZ2lvbiAmJiBzaG91
bGRSZXBhaW50SW5QaWVjZXMoZGlydHlSZWN0LCBkcmF3UmVnaW9uLCBjb250ZW50c1NjYWxlKSkg
eworICAgICAgICAvLyBVc2UgZmluZSBncmFpbmVkIHJlcGFpbnQgcmVjdGFuZ2xlcyB0byBtaW5p
bWl6ZSB0aGUgYW1vdW50IG9mIHBhaW50ZWQgcGl4ZWxzLgorICAgICAgICBDR1NSZWdpb25FbnVt
ZXJhdG9yT2JqIGVudW1lcmF0b3IgPSBDR1NSZWdpb25FbnVtZXJhdG9yKGRyYXdSZWdpb24pOwor
ICAgICAgICBDR1JlY3QgKnN1YlJlY3Q7CisgICAgICAgIHdoaWxlICgoc3ViUmVjdCA9IENHU05l
eHRSZWN0KGVudW1lcmF0b3IpKSkgeworICAgICAgICAgICAgQ0dSZWN0IGFkanVzdGVkU3ViUmVj
dCA9ICpzdWJSZWN0OworICAgICAgICAgICAgYWRqdXN0ZWRTdWJSZWN0Lm9yaWdpbi54IC89IGNv
bnRlbnRzU2NhbGU7CisgICAgICAgICAgICBhZGp1c3RlZFN1YlJlY3Qub3JpZ2luLnkgPSBmcmFt
ZS5zaXplLmhlaWdodCAtIChhZGp1c3RlZFN1YlJlY3Qub3JpZ2luLnkgKyBhZGp1c3RlZFN1YlJl
Y3Quc2l6ZS5oZWlnaHQpIC8gY29udGVudHNTY2FsZTsKKyAgICAgICAgICAgIGFkanVzdGVkU3Vi
UmVjdC5zaXplLndpZHRoIC89IGNvbnRlbnRzU2NhbGU7CisgICAgICAgICAgICBhZGp1c3RlZFN1
YlJlY3Quc2l6ZS5oZWlnaHQgLz0gY29udGVudHNTY2FsZTsKKworICAgICAgICAgICAgQ0dSZWN0
IHN1YlJlY3RJblN1cGVyID0gW2hvc3RMYXllcigpIGNvbnZlcnRSZWN0OmFkanVzdGVkU3ViUmVj
dCBmcm9tTGF5ZXI6bGF5ZXJdOworICAgICAgICAgICAgW21fd2luZG93IGRpc3BsYXlSZWN0OnN1
YlJlY3RJblN1cGVyXTsKKyAgICAgICAgfQorICAgICAgICBDR1NSZWxlYXNlUmVnaW9uRW51bWVy
YXRvcihlbnVtZXJhdG9yKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBTaW1wbGUgcmVwYWlu
dAorICAgICAgICBDR1JlY3QgZGlydHlSZWN0SW5TdXBlciA9IFtob3N0TGF5ZXIoKSBjb252ZXJ0
UmVjdDpkaXJ0eVJlY3QgZnJvbUxheWVyOmxheWVyXTsKKyAgICAgICAgW21fd2luZG93IGRpc3Bs
YXlSZWN0OmRpcnR5UmVjdEluU3VwZXJdOworICAgIH0KKworICAgIGZvbnRBbnRpYWxpYXNpbmdT
dGF0ZS5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpkcmF3TGF5ZXIoVGlsZUxheWVy
KiBsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgLy8gVGhlIHdlYiBsb2NrIHVu
bG9jayBvYnNlcnZlciBydW5zIGFmdGVyIENBIGNvbW1pdCBvYnNlcnZlci4KKyAgICBpZiAoIVdl
YlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKSB7CisgICAgICAgIExPR19FUlJPUigiRHJhd2lu
ZyB3aXRob3V0IGhvbGRpbmcgdGhlIHdlYiB0aHJlYWQgbG9jayIpOworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBXS1NldEN1cnJlbnRHcmFwaGljc0NvbnRleHQo
Y29udGV4dCk7CisKKyAgICBDR1JlY3QgZGlydHlSZWN0ID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5k
aW5nQm94KGNvbnRleHQpOworICAgIENHUmVjdCBmcmFtZSA9IFtsYXllciBmcmFtZV07CisgICAg
Q0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIC1mcmFtZS5vcmlnaW4ueCwgLWZyYW1lLm9y
aWdpbi55KTsKKyAgICBDR1JlY3Qgc2NhbGVkRnJhbWUgPSBbaG9zdExheWVyKCkgY29udmVydFJl
Y3Q6W2xheWVyIGJvdW5kc10gZnJvbUxheWVyOmxheWVyXTsKKyAgICBDR0NvbnRleHRTY2FsZUNU
TShjb250ZXh0LCBmcmFtZS5zaXplLndpZHRoIC8gc2NhbGVkRnJhbWUuc2l6ZS53aWR0aCwgZnJh
bWUuc2l6ZS5oZWlnaHQgLyBzY2FsZWRGcmFtZS5zaXplLmhlaWdodCk7CisKKyAgICBpZiAoUmV0
YWluUHRyPENHSW1hZ2U+IGNvbnRlbnRSZXBsYWNlbWVudEltYWdlID0gdGhpcy0+Y29udGVudFJl
cGxhY2VtZW50SW1hZ2UoKSkKKyAgICAgICAgZHJhd1JlcGxhY2VtZW50SW1hZ2UobGF5ZXIsIGNv
bnRleHQsIGNvbnRlbnRSZXBsYWNlbWVudEltYWdlLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAg
IGRyYXdXaW5kb3dDb250ZW50KGxheWVyLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworCisgICAgKyts
YXllci5wYWludENvdW50OworICAgIGlmIChtX3RpbGVQYWludENvdW50ZXJzVmlzaWJsZSkgewor
ICAgICAgICBjaGFyIHRleHRbMTZdOworICAgICAgICBzbnByaW50Zih0ZXh0LCBzaXplb2YodGV4
dCksICIlZCIsIGxheWVyLnBhaW50Q291bnQpOworCisgICAgICAgIENHQ29udGV4dFNhdmVHU3Rh
dGUoY29udGV4dCk7CisKKyAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGZy
YW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSk7CisgICAgICAgIENHQ29udGV4dFNldEZpbGxD
b2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKGNvbG9yRm9yR3JpZFRpbGVCb3Jk
ZXIoW2xheWVyIHRpbGVHcmlkXSksIENvbG9yU3BhY2VEZXZpY2VSR0IpKTsKKyAgICAgICAgCisg
ICAgICAgIENHUmVjdCBsYWJlbEJvdW5kcyA9IFtsYXllciBib3VuZHNdOworICAgICAgICBsYWJl
bEJvdW5kcy5zaXplLndpZHRoID0gMTAgKyAxMiAqIHN0cmxlbih0ZXh0KTsKKyAgICAgICAgbGFi
ZWxCb3VuZHMuc2l6ZS5oZWlnaHQgPSAyNTsKKyAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29u
dGV4dCwgbGFiZWxCb3VuZHMpOworCisgICAgICAgIGlmIChhY2NlbGVyYXRlZERyYXdpbmdFbmFi
bGVkKCkpCisgICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwg
MCwgMCwgMC40Zik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZp
bGxDb2xvcihjb250ZXh0LCAxLCAxLCAxLCAwLjZmKTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRl
Y2xhcmF0aW9ucyIKKyAgICAgICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjb250ZXh0LCBDR0Fm
ZmluZVRyYW5zZm9ybU1ha2VTY2FsZSgxLCAtMSkpOworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVj
bGFyYXRpb25zIgorICAgICAgICBDR0NvbnRleHRTZWxlY3RGb250KGNvbnRleHQsICJIZWx2ZXRp
Y2EiLCAyNSwga0NHRW5jb2RpbmdNYWNSb21hbik7CisgICAgICAgIENHQ29udGV4dFNob3dUZXh0
QXRQb2ludChjb250ZXh0LCBsYWJlbEJvdW5kcy5vcmlnaW4ueCArIDMsIGxhYmVsQm91bmRzLm9y
aWdpbi55ICsgMjAsIHRleHQsIHN0cmxlbih0ZXh0KSk7CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCisgICAgCisgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7ICAg
ICAgICAKKyAgICB9CisKKyAgICBXQUtWaWV3KiB2aWV3ID0gW21fd2luZG93IGNvbnRlbnRWaWV3
XTsKKyAgICBbdmlldyBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9kaXNwYXRjaFRpbGVEaWRE
cmF3Oikgd2l0aE9iamVjdDpsYXllciBhZnRlckRlbGF5OjAuMF07Cit9CisKK3ZvaWQgVGlsZUNh
Y2hlOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChJbnRS
ZWN0KDAsIDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCksIHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OnNjaGVkdWxlTGF5ZXJG
bHVzaEZvclBlbmRpbmdSZXBhaW50KCkKK3sKKyAgICBXQUtWaWV3KiB2aWV3ID0gW21fd2luZG93
IGNvbnRlbnRWaWV3XTsKKyAgICBbdmlldyBfc2NoZWR1bGVMYXllckZsdXNoRm9yUGVuZGluZ1Rp
bGVDYWNoZVJlcGFpbnRdOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9zYXZlZERpc3BsYXlSZWN0TXV0ZXgpOworICAgIGJvb2wgYWRkZWRGaXJzdFJlY3QgPSBtX3Nh
dmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKTsKKyAgICBtX3NhdmVkRGlzcGxheVJlY3RzLmFwcGVu
ZChkaXJ0eVJlY3QpOworICAgIGlmICghYWRkZWRGaXJzdFJlY3QpCisgICAgICAgIHJldHVybjsK
KyAgICAvLyBDb21wb3NpdGluZyBsYXllciBmbHVzaCB3aWxsIGNhbGwgYmFjayB0byBkb1BlbmRp
bmdSZXBhaW50cygpLiBUaGUgZmx1c2ggbWF5IGJlIHRocm90dGxlZCBhbmQgbm90IGhhcHBlbiBp
bW1lZGlhdGVseS4KKyAgICBzY2hlZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5nUmVwYWludCgpOwor
fQorCit2b2lkIFRpbGVDYWNoZTo6aW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCkKK3sKKyAgICBBU1NFUlQoIW1fdGlsZU11dGV4LnRyeUxvY2soKSk7CisKKyAgICBUaWxl
R3JpZCogYWN0aXZlR3JpZCA9IGFjdGl2ZVRpbGVHcmlkKCk7CisgICAgaWYgKCFrZWVwc1pvb21l
ZE91dFRpbGVzKCkpIHsKKyAgICAgICAgYWN0aXZlR3JpZC0+aW52YWxpZGF0ZVRpbGVzKGRpcnR5
UmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRmxvYXRSZWN0IHNjYWxlZFJlY3Qg
PSBkaXJ0eVJlY3Q7CisgICAgc2NhbGVkUmVjdC5zY2FsZSh6b29tZWRPdXRTY2FsZSgpIC8gY3Vy
cmVudFNjYWxlKCkpOworICAgIEludFJlY3Qgem9vbWVkT3V0RGlydHlSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChzY2FsZWRSZWN0KTsKKyAgICBpZiAoYWN0aXZlR3JpZCA9PSBtX3pvb21lZE91dFRp
bGVHcmlkKSB7CisgICAgICAgIGJvb2wgZHVtbXk7CisgICAgICAgIEludFJlY3QgY292ZXJSZWN0
ID0gbV96b29tZWRPdXRUaWxlR3JpZC0+Y2FsY3VsYXRlQ292ZXJSZWN0KG1fem9vbWVkT3V0VGls
ZUdyaWQtPnZpc2libGVSZWN0KCksIGR1bW15KTsKKyAgICAgICAgLy8gSW5zdGVhZCBvZiByZXBh
aW50aW5nIGEgdGlsZSBvdXRzaWRlIHRoZSBjb3ZlciByZWN0LCBqdXN0IHJlbW92ZSBpdC4KKyAg
ICAgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+ZHJvcFRpbGVzQmV0d2VlblJlY3RzKHpvb21lZE91
dERpcnR5UmVjdCwgY292ZXJSZWN0KTsKKyAgICAgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+aW52
YWxpZGF0ZVRpbGVzKHpvb21lZE91dERpcnR5UmVjdCk7CisgICAgICAgIC8vIFdlIG5lZWQgdG8g
aW52YWxpZGF0ZSB6b29tZWQgaW4gdGlsZXMgYXMgd2VsbCB3aGlsZSB6b29taW5nLCBzaW5jZQor
ICAgICAgICAvLyB3ZSBjb3VsZCBzd2l0Y2ggYmFjayB0byB0aGUgem9vbWVkIGluIGdyaWQgd2l0
aG91dCBkcm9wcGluZyBpdHMKKyAgICAgICAgLy8gdGlsZXMuICBTZWUgPHJkYXI6Ly9wcm9ibGVt
Lzk5NDY3NTk+LgorICAgICAgICBpZiAobV90aWxpbmdNb2RlID09IFpvb21pbmcgJiYgbV96b29t
ZWRJblRpbGVHcmlkKQorICAgICAgICAgICAgbV96b29tZWRJblRpbGVHcmlkLT5pbnZhbGlkYXRl
VGlsZXMoZGlydHlSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fem9v
bWVkSW5UaWxlR3JpZC0+aGFzVGlsZXMoKSkgeworICAgICAgICAvLyBJZiBubyB0aWxlcyBoYXZl
IGJlZW4gY3JlYXRlZCB5ZXQgZm9yIHRoZSB6b29tZWQgaW4gZ3JpZCwgd2UgY2FuJ3QgZHJvcCB0
aGUgem9vbWVkIG91dCB0aWxlcy4KKyAgICAgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+aW52YWxp
ZGF0ZVRpbGVzKHpvb21lZE91dERpcnR5UmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV96b29tZWRPdXRUaWxlR3JpZC0+ZHJvcFRpbGVzSW50ZXJzZWN0aW5nUmVjdCh6b29tZWRP
dXREaXJ0eVJlY3QpOworICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+aW52YWxpZGF0ZVRpbGVzKGRp
cnR5UmVjdCk7Cit9CisgICAgCitib29sIFRpbGVDYWNoZTo6aXNUaWxlQ3JlYXRpb25TdXNwZW5k
ZWQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gKCFrZWVwc1pvb21lZE91dFRpbGVzKCkgJiYgbV90
aWxpbmdNb2RlID09IFpvb21pbmcpIHx8IG1fdGlsaW5nTW9kZSA9PSBEaXNhYmxlZDsKK30KKwor
Ym9vbCBUaWxlQ2FjaGU6OmlzVGlsZUludmFsaWRhdGlvblN1c3BlbmRlZCgpIGNvbnN0IAoreyAK
KyAgICByZXR1cm4gbV90aWxpbmdNb2RlID09IFpvb21pbmcgfHwgbV90aWxpbmdNb2RlID09IFBh
bm5pbmcgfHwgbV90aWxpbmdNb2RlID09IFNjcm9sbFRvVG9wIHx8IG1fdGlsaW5nTW9kZSA9PSBE
aXNhYmxlZDsgCit9CisKK3ZvaWQgVGlsZUNhY2hlOjp1cGRhdGVUaWxpbmdNb2RlKCkKK3sKKyAg
ICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkgfHwgIVdlYlRocmVhZElzRW5hYmxlZCgpKTsK
KworICAgIFdBS1ZpZXcqIHZpZXcgPSBbbV93aW5kb3cgY29udGVudFZpZXddOworCisgICAgaWYg
KG1fdGlsaW5nTW9kZSA9PSBab29taW5nIHx8IG1fdGlsaW5nTW9kZSA9PSBQYW5uaW5nIHx8IG1f
dGlsaW5nTW9kZSA9PSBTY3JvbGxUb1RvcCkgeworICAgICAgICBpZiAoIW1fZGlkQ2FsbFdpbGxT
dGFydFNjcm9sbGluZ09yWm9vbWluZykgeworICAgICAgICAgICAgW3ZpZXcgX3dpbGxTdGFydFNj
cm9sbGluZ09yWm9vbWluZ107CisgICAgICAgICAgICBtX2RpZENhbGxXaWxsU3RhcnRTY3JvbGxp
bmdPclpvb21pbmcgPSB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KG1fZGlkQ2FsbFdpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZykgeworICAgICAgICAgICAgW3Zp
ZXcgX2RpZEZpbmlzaFNjcm9sbGluZ09yWm9vbWluZ107CisgICAgICAgICAgICBtX2RpZENhbGxX
aWxsU3RhcnRTY3JvbGxpbmdPclpvb21pbmcgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobV90aWxpbmdNb2RlID09IERpc2FibGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAgICAgIGNyZWF0ZVRpbGVz
SW5BY3RpdmVHcmlkKENvdmVyVmlzaWJsZU9ubHkpOworCisgICAgICAgIGlmICghbV9zYXZlZERp
c3BsYXlSZWN0cy5pc0VtcHR5KCkpCisgICAgICAgICAgICBzY2hlZHVsZUxheWVyRmx1c2hGb3JQ
ZW5kaW5nUmVwYWludCgpOworICAgIH0KK30KKwordm9pZCBUaWxlQ2FjaGU6OnNldFRpbGluZ01v
ZGUoVGlsaW5nTW9kZSB0aWxpbmdNb2RlKQoreworICAgIGlmICh0aWxpbmdNb2RlID09IG1fdGls
aW5nTW9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgd2FzWm9vbWluZyA9IChtX3RpbGlu
Z01vZGUgPT0gWm9vbWluZyk7CisgICAgbV90aWxpbmdNb2RlID0gdGlsaW5nTW9kZTsKKworICAg
IGlmICgobV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUgfHwgbV9wZW5kaW5nU2NhbGUpICYmIG1fdGls
aW5nTW9kZSAhPSBEaXNhYmxlZCkKKyAgICAgICAgY29tbWl0U2NhbGVDaGFuZ2UoKTsKKyAgICBl
bHNlIGlmICh3YXNab29taW5nKSB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVN
dXRleCk7CisgICAgICAgIGJyaW5nQWN0aXZlVGlsZUdyaWRUb0Zyb250KCk7CisgICAgfQorCisg
ICAgaWYgKG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01vZGUpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2hhc1BlbmRpbmdVcGRhdGVUaWxpbmdNb2RlID0gdHJ1ZTsKKworICAgIFRpbGVDYWNoZVRv
bWJzdG9uZSAqdG9tYnN0b25lID0gbV90b21ic3RvbmUuZ2V0KCk7CisgICAgV2ViVGhyZWFkUnVu
KF57CisgICAgICAgIGlmIChbdG9tYnN0b25lIGlzRGVhZF0pCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01vZGUgPSBmYWxzZTsKKyAgICAgICAg
dXBkYXRlVGlsaW5nTW9kZSgpOworICAgIH0pOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0VGls
aW5nRGlyZWN0aW9uKFRpbGluZ0RpcmVjdGlvbiB0aWxpbmdEaXJlY3Rpb24pCit7CisgICAgbV90
aWxpbmdEaXJlY3Rpb24gPSB0aWxpbmdEaXJlY3Rpb247Cit9CisKK1RpbGVDYWNoZTo6VGlsaW5n
RGlyZWN0aW9uIFRpbGVDYWNoZTo6dGlsaW5nRGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV90aWxpbmdEaXJlY3Rpb247Cit9CisgICAgCitmbG9hdCBUaWxlQ2FjaGU6Onpvb21lZE91
dFNjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV96b29tZWRPdXRUaWxlR3JpZC0+c2NhbGUo
KTsKK30KKworZmxvYXQgVGlsZUNhY2hlOjpjdXJyZW50U2NhbGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2N1cnJlbnRTY2FsZTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmRvUGVuZGluZ1JlcGFp
bnRzKCkKK3sKKyAgICBpZiAobV9zYXZlZERpc3BsYXlSZWN0cy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoaXNUaWxlSW52YWxpZGF0aW9uU3VzcGVuZGVkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAgIGZsdXNo
U2F2ZWREaXNwbGF5UmVjdHMoKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmZsdXNoU2F2ZWREaXNw
bGF5UmVjdHMoKQoreworICAgIEFTU0VSVCghbV90aWxlTXV0ZXgudHJ5TG9jaygpKTsKKyAgICBB
U1NFUlQoIW1fc2F2ZWREaXNwbGF5UmVjdHMuaXNFbXB0eSgpKTsKKworICAgIFZlY3RvcjxJbnRS
ZWN0PiByZWN0czsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NhdmVkRGlz
cGxheVJlY3RNdXRleCk7CisgICAgICAgIG1fc2F2ZWREaXNwbGF5UmVjdHMuc3dhcChyZWN0cyk7
CisgICAgfQorICAgIHNpemVfdCBzaXplID0gcmVjdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90
IG4gPSAwOyBuIDwgc2l6ZTsgKytuKQorICAgICAgICBpbnZhbGlkYXRlVGlsZXMocmVjdHNbbl0p
OworfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0U3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVk
KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobV9pc1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5h
YmxlZCA9PSBlbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9pc1NwZWN1bGF0aXZlVGls
ZUNyZWF0aW9uRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgaWYgKG1faXNTcGVjdWxhdGl2ZVRpbGVD
cmVhdGlvbkVuYWJsZWQpCisgICAgICAgIG1fdGlsZUNyZWF0aW9uVGltZXIuc3RhcnRPbmVTaG90
KDApOworfQorCitib29sIFRpbGVDYWNoZTo6aGFzUGVuZGluZ0RyYXcoKSBjb25zdAoreworICAg
IHJldHVybiAhbV9zYXZlZERpc3BsYXlSZWN0cy5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgVGlsZUNh
Y2hlOjpwcmVwYXJlVG9EcmF3KCkKK3sKKyAgICAvLyBUaGlzIHdpbGwgdHJpZ2dlciBkb2N1bWVu
dCByZWxheW91dCBpZiBuZWVkZWQuCisgICAgW1ttX3dpbmRvdyBjb250ZW50Vmlld10gdmlld1dp
bGxEcmF3XTsKKworICAgIGlmICghbV9zYXZlZERpc3BsYXlSZWN0cy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKKyAgICAgICAgZmx1c2hTYXZl
ZERpc3BsYXlSZWN0cygpOworICAgIH0KK30KKwordm9pZCBUaWxlQ2FjaGU6OnNldExheWVyUG9v
bENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5KQoreworICAgIFRpbGVMYXllclBvb2w6OnNoYXJl
ZFBvb2woKS0+c2V0Q2FwYWNpdHkoY2FwYWNpdHkpOworfQorCit2b2lkIFRpbGVDYWNoZTo6ZHJh
aW5MYXllclBvb2woKQoreworICAgIFRpbGVMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+ZHJhaW4o
KTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmR1bXBUaWxlcygpCit7CisgICAgTlNMb2coQCI9PT09
PT09PT09PT09PT09PSIpOworICAgIE5TTG9nKEAiWk9PTUVEIE9VVCIpOworICAgIGlmIChtX3pv
b21lZE91dFRpbGVHcmlkID09IGFjdGl2ZVRpbGVHcmlkKCkpCisgICAgICAgIE5TTG9nKEAiPEFD
VElWRT4iKTsKKyAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kdW1wVGlsZXMoKTsKKyAgICBOU0xv
ZyhAIj09PT09PT09PT09PT09PT09Iik7CisgICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCkgewor
ICAgICAgICBOU0xvZyhAIlpPT01FRCBJTiIpOworICAgICAgICBpZiAobV96b29tZWRJblRpbGVH
cmlkID09IGFjdGl2ZVRpbGVHcmlkKCkpCisgICAgICAgICAgICBOU0xvZyhAIjxBQ1RJVkU+Iik7
CisgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+ZHVtcFRpbGVzKCk7CisgICAgICAgIE5TTG9n
KEAiPT09PT09PT09PT09PT09PT0iKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9UaWxlR3JpZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Rp
bGVHcmlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTk5OTBmY2NkZDY5NzBmZDk4YWY4NWVlZjQzYzAzYzViYTM3
YmVlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxl
R3JpZC5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUaWxlR3JpZF9o
CisjZGVmaW5lIFRpbGVHcmlkX2gKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIklu
dFBvaW50LmgiCisjaW5jbHVkZSAiSW50UG9pbnRIYXNoLmgiCisjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJUaWxlQ2FjaGUuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisjZGVmaW5lIExP
R19USUxJTkcgMAorCitAY2xhc3MgQ0FMYXllcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBUaWxlR3JpZFRpbGU7CisKK2NsYXNzIFRpbGVHcmlkIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShUaWxlR3JpZCk7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRQb2ludCBUaWxlSW5k
ZXg7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxUaWxlR3JpZD4gY3JlYXRlKFRpbGVDYWNoZSog
Y2FjaGUsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGls
ZUdyaWQoY2FjaGUsIHRpbGVTaXplKSk7IH0KKworICAgIH5UaWxlR3JpZCgpOworCisgICAgVGls
ZUNhY2hlKiB0aWxlQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3RpbGVDYWNoZTsgfQorCisgICAg
Q0FMYXllciAqdGlsZUhvc3RMYXllcigpIGNvbnN0OworICAgIEludFJlY3QgYm91bmRzKCkgY29u
c3Q7CisgICAgdW5zaWduZWQgdGlsZUNvdW50KCkgY29uc3Q7CisKKyAgICBmbG9hdCBzY2FsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KKyAgICB2b2lkIHNldFNjYWxlKGZsb2F0IHNjYWxl
KSB7IG1fc2NhbGUgPSBzY2FsZTsgfQorCisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCgpIGNvbnN0
OworCisgICAgdm9pZCBjcmVhdGVUaWxlcyhUaWxlQ2FjaGU6OlN5bmNocm9ub3VzVGlsZUNyZWF0
aW9uTW9kZSk7CisKKyAgICB2b2lkIGRyb3BBbGxUaWxlcygpOworICAgIHZvaWQgZHJvcEludmFs
aWRUaWxlcygpOworICAgIHZvaWQgZHJvcFRpbGVzT3V0c2lkZVJlY3QoY29uc3QgSW50UmVjdCYp
OworICAgIHZvaWQgZHJvcFRpbGVzSW50ZXJzZWN0aW5nUmVjdChjb25zdCBJbnRSZWN0Jik7Cisg
ICAgLy8gRHJvcHMgdGlsZXMgdGhhdCBpbnRlcnNlY3QgZHJvcFJlY3QgYnV0IGRvIG5vdCBpbnRl
cnNlY3Qga2VlcFJlY3QuCisgICAgdm9pZCBkcm9wVGlsZXNCZXR3ZWVuUmVjdHMoY29uc3QgSW50
UmVjdCYgZHJvcFJlY3QsIGNvbnN0IEludFJlY3QmIGtlZXBSZWN0KTsKKyAgICBib29sIGRyb3BE
aXN0YW50VGlsZXModW5zaWduZWQgdGlsZXNOZWVkZWQsIGRvdWJsZSBzaG9ydGVzdERpc3RhbmNl
KTsKKworICAgIHZvaWQgYWRkVGlsZXNDb3ZlcmluZ1JlY3QoY29uc3QgSW50UmVjdCYpOworCisg
ICAgYm9vbCB0aWxlc0NvdmVyKGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2b2lkIGNlbnRl
clRpbGVHcmlkT3JpZ2luKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KTsKKyAgICB2b2lkIGlu
dmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworCisgICAgdm9pZCB1cGRh
dGVUaWxlT3BhY2l0eSgpOworICAgIHZvaWQgdXBkYXRlVGlsZUJvcmRlclZpc2liaWxpdHkoKTsK
KyAgICB2b2lkIHVwZGF0ZUhvc3RMYXllclNpemUoKTsKKyAgICBib29sIGNoZWNrRG9TaW5nbGVU
aWxlTGF5b3V0KCk7CisKKyAgICBib29sIGhhc1RpbGVzKCkgY29uc3QgeyByZXR1cm4gIW1fdGls
ZXMuaXNFbXB0eSgpOyB9CisKKyAgICBJbnRSZWN0IGNhbGN1bGF0ZUNvdmVyUmVjdChjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlUmVjdCwgYm9vbCYgY2VudGVyR3JpZCk7CisKKyAgICAvLyBMb2dnaW5n
CisgICAgdm9pZCBkdW1wVGlsZXMoKTsKKworcHJpdmF0ZToKKyAgICBkb3VibGUgdGlsZURpc3Rh
bmNlMihjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3Qp
IGNvbnN0OworICAgIHVuc2lnbmVkIHRpbGVCeXRlU2l6ZSgpIGNvbnN0OworCisgICAgdm9pZCBh
ZGRUaWxlRm9ySW5kZXgoY29uc3QgVGlsZUluZGV4Jik7CisKKyAgICBQYXNzUmVmUHRyPFRpbGVH
cmlkVGlsZT4gdGlsZUZvckluZGV4KGNvbnN0IFRpbGVJbmRleCYpIGNvbnN0OworICAgIEludFJl
Y3QgdGlsZVJlY3RGb3JJbmRleChjb25zdCBUaWxlSW5kZXgmKSBjb25zdDsKKyAgICBQYXNzUmVm
UHRyPFRpbGVHcmlkVGlsZT4gdGlsZUZvclBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7Cisg
ICAgVGlsZUluZGV4IHRpbGVJbmRleEZvclBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisK
KyAgICBJbnRSZWN0IGFkanVzdENvdmVyUmVjdEZvclBhZ2VCb3VuZHMoY29uc3QgSW50UmVjdCYp
IGNvbnN0OworICAgIGJvb2wgc2hvdWxkVXNlTWluaW1hbFRpbGVDb3ZlcmFnZSgpIGNvbnN0Owor
Citwcml2YXRlOiAgICAgICAgCisgICAgVGlsZUdyaWQoVGlsZUNhY2hlKiwgY29uc3QgSW50U2l6
ZSYpOworCisgICAgVGlsZUNhY2hlKiBtX3RpbGVDYWNoZTsKKyAgICBSZXRhaW5QdHI8Q0FMYXll
cj4gbV90aWxlSG9zdExheWVyOworCisgICAgSW50UG9pbnQgbV9vcmlnaW47CisgICAgSW50U2l6
ZSBtX3RpbGVTaXplOworCisgICAgZmxvYXQgbV9zY2FsZTsKKworICAgIHR5cGVkZWYgSGFzaE1h
cDxUaWxlSW5kZXgsIFJlZlB0cjxUaWxlR3JpZFRpbGU+PiBUaWxlTWFwOworICAgIFRpbGVNYXAg
bV90aWxlczsKKworICAgIEludFJlY3QgbV92YWxpZEJvdW5kczsKK307CisKK3N0YXRpYyBpbmxp
bmUgSW50UG9pbnQgdG9wTGVmdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBy
ZWN0LmxvY2F0aW9uKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50UG9pbnQgYm90dG9tUmlnaHQo
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocmVjdC5tYXhYKCkg
LSAxLCByZWN0Lm1heFkoKSAtIDEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBQTEFURk9STShJT1MpCisjZW5kaWYgLy8gVGlsZUdyaWRfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1RpbGVHcmlkLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkMTcwMTMyMWU5Yzc0MGU0Mzcy
OTVkYTRjZWNkNjMwMGZmY2Q0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvVGlsZUdyaWQubW0KQEAgLTAsMCArMSw1NjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGlsZUdyaWQuaCIKKworI2lmIFBMQVRGT1JN
KElPUykKKworI2luY2x1ZGUgIk1lbW9yeVByZXNzdXJlSGFuZGxlci5oIgorI2luY2x1ZGUgIlN5
c3RlbU1lbW9yeS5oIgorI2luY2x1ZGUgIlRpbGVHcmlkVGlsZS5oIgorI2luY2x1ZGUgIlRpbGVM
YXllci5oIgorI2luY2x1ZGUgIlRpbGVMYXllclBvb2wuaCIKKyNpbmNsdWRlICJXQUtXaW5kb3cu
aCIKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzUHJpdmF0ZS5oPgorI2luY2x1
ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6
Q29yZVByaXZhdGUuaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZnVuY3Rpb25h
bD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUaWxlR3JpZDo6VGlsZUdyaWQoVGlsZUNhY2hl
KiB0aWxlQ2FjaGUsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKQorICAgIDogbV90aWxlQ2FjaGUo
dGlsZUNhY2hlKQorICAgICwgbV90aWxlSG9zdExheWVyKGFkb3B0TlMoW1tUaWxlSG9zdExheWVy
IGFsbG9jXSBpbml0V2l0aFRpbGVHcmlkOnRoaXNdKSkKKyAgICAsIG1fdGlsZVNpemUodGlsZVNp
emUpCisgICAgLCBtX3NjYWxlKDEpCisgICAgLCBtX3ZhbGlkQm91bmRzKDAsIDAsIHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkp
IAoreworfQorICAgIAorVGlsZUdyaWQ6On5UaWxlR3JpZCgpCit7CisgICAgW21fdGlsZUhvc3RM
YXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Cit9CisKK0ludFJlY3QgVGlsZUdyaWQ6OnZpc2li
bGVSZWN0KCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChtX3RpbGVDYWNoZS0+dmlzaWJsZVJlY3RJbkxheWVyKG1fdGlsZUhvc3RMYXllci5nZXQo
KSkpOworCisgICAgLy8gV2hlbiBmYXN0IHNjcm9sbGluZyB0byB0aGUgdG9wLCBtb3ZlIHRoZSB2
aXNpYmxlIHJlY3QgdGhlcmUgaW1tZWRpYXRlbHkgc28gd2UgaGF2ZSB0aWxlcyB3aGVuIHRoZSBz
Y3JvbGxpbmcgY29tcGxldGVzLgorICAgIGlmIChtX3RpbGVDYWNoZS0+dGlsaW5nTW9kZSgpID09
IFRpbGVDYWNoZTo6U2Nyb2xsVG9Ub3ApCisgICAgICAgIHZpc2libGVSZWN0LnNldFkoMCk7CisK
KyAgICByZXR1cm4gdmlzaWJsZVJlY3Q7Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OmRyb3BBbGxUaWxl
cygpCit7CisgICAgbV90aWxlcy5jbGVhcigpOworfQorCit2b2lkIFRpbGVHcmlkOjpkcm9wVGls
ZXNJbnRlcnNlY3RpbmdSZWN0KGNvbnN0IEludFJlY3QmIGRyb3BSZWN0KQoreworICAgIGRyb3BU
aWxlc0JldHdlZW5SZWN0cyhkcm9wUmVjdCwgSW50UmVjdCgpKTsKK30KKwordm9pZCBUaWxlR3Jp
ZDo6ZHJvcFRpbGVzT3V0c2lkZVJlY3QoY29uc3QgSW50UmVjdCYga2VlcFJlY3QpCit7CisgICAg
ZHJvcFRpbGVzQmV0d2VlblJlY3RzKEludFJlY3QoMCwgMCwgc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSksIGtlZXBSZWN0KTsK
K30KKwordm9pZCBUaWxlR3JpZDo6ZHJvcFRpbGVzQmV0d2VlblJlY3RzKGNvbnN0IEludFJlY3Qm
IGRyb3BSZWN0LCBjb25zdCBJbnRSZWN0JiBrZWVwUmVjdCkKK3sKKyAgICBWZWN0b3I8VGlsZUlu
ZGV4PiB0b1JlbW92ZTsKKyAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgp
OworICAgIGZvciAoYXV0byB0aWxlIDogbV90aWxlcykgeworICAgICAgICBUaWxlSW5kZXgmIGlu
ZGV4ID0gdGlsZS5rZXk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB0aWxlLnZhbHVlLT5y
ZWN0KCk7CisgICAgICAgIGlmICh0aWxlUmVjdC5pbnRlcnNlY3RzKGRyb3BSZWN0KSAmJiAhdGls
ZVJlY3QuaW50ZXJzZWN0cyhrZWVwUmVjdCkpCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQo
aW5kZXgpOworICAgIH0KKyAgICB1bnNpZ25lZCByZW1vdmVDb3VudCA9IHRvUmVtb3ZlLnNpemUo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcmVtb3ZlQ291bnQ7ICsrbikKKyAgICAg
ICAgbV90aWxlcy5yZW1vdmUodG9SZW1vdmVbbl0pOworfQorCit1bnNpZ25lZCBUaWxlR3JpZDo6
dGlsZUJ5dGVTaXplKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIHRpbGVQaXhlbFNpemUgPSBtX3Rp
bGVTaXplOworICAgIHRpbGVQaXhlbFNpemUuc2NhbGUobV90aWxlQ2FjaGUtPnNjcmVlblNjYWxl
KCkpOworICAgIHJldHVybiBUaWxlTGF5ZXJQb29sOjpieXRlc0JhY2tpbmdMYXllcldpdGhQaXhl
bFNpemUodGlsZVBpeGVsU2l6ZSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGlj
IGJvb2wgaXNGYXJ0aGVyQXdheShjb25zdCBwYWlyPGRvdWJsZSwgVD4mIGEsIGNvbnN0IHBhaXI8
ZG91YmxlLCBUPiYgYikKK3sKKyAgICByZXR1cm4gYS5maXJzdCA+IGIuZmlyc3Q7Cit9CisKK2Jv
b2wgVGlsZUdyaWQ6OmRyb3BEaXN0YW50VGlsZXModW5zaWduZWQgdGlsZXNOZWVkZWQsIGRvdWJs
ZSBzaG9ydGVzdERpc3RhbmNlKQoreworICAgIHVuc2lnbmVkIGJ5dGVzUGVyVGlsZSA9IHRpbGVC
eXRlU2l6ZSgpOworICAgIHVuc2lnbmVkIGJ5dGVzTmVlZGVkID0gdGlsZXNOZWVkZWQgKiBieXRl
c1BlclRpbGU7CisgICAgdW5zaWduZWQgYnl0ZXNVc2VkID0gdGlsZUNvdW50KCkgKiBieXRlc1Bl
clRpbGU7CisgICAgdW5zaWduZWQgbWF4aW11bUJ5dGVzID0gbV90aWxlQ2FjaGUtPnRpbGVDYXBh
Y2l0eUZvckdyaWQodGhpcyk7CisKKyAgICBpbnQgYnl0ZXNUb1JlY2xhaW0gPSBpbnQoYnl0ZXNV
c2VkKSAtIChpbnQobWF4aW11bUJ5dGVzKSAtIGJ5dGVzTmVlZGVkKTsKKyAgICBpZiAoYnl0ZXNU
b1JlY2xhaW0gPD0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICB1bnNpZ25lZCB0aWxl
c1RvUmVtb3ZlQ291bnQgPSBieXRlc1RvUmVjbGFpbSAvIGJ5dGVzUGVyVGlsZTsKKworICAgIElu
dFJlY3QgdmlzaWJsZVJlY3QgPSB0aGlzLT52aXNpYmxlUmVjdCgpOworICAgIFZlY3RvcjxwYWly
PGRvdWJsZSwgVGlsZUluZGV4Pj4gdG9SZW1vdmU7CisgICAgZm9yIChhdXRvIHRpbGUgOiBtX3Rp
bGVzKSB7CisgICAgICAgIFRpbGVJbmRleCYgaW5kZXggPSB0aWxlLmtleTsKKyAgICAgICAgSW50
UmVjdCB0aWxlUmVjdCA9IHRpbGUudmFsdWUtPnJlY3QoKTsKKyAgICAgICAgZG91YmxlIGRpc3Rh
bmNlID0gdGlsZURpc3RhbmNlMih2aXNpYmxlUmVjdCwgdGlsZVJlY3QpOworICAgICAgICBpZiAo
ZGlzdGFuY2UgPD0gc2hvcnRlc3REaXN0YW5jZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB0b1JlbW92ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZGlzdGFuY2UsIGluZGV4KSk7Cisg
ICAgICAgIHN0ZDo6cHVzaF9oZWFwKHRvUmVtb3ZlLmJlZ2luKCksIHRvUmVtb3ZlLmVuZCgpLCBz
dGQ6OnB0cl9mdW4oaXNGYXJ0aGVyQXdheTxUaWxlSW5kZXg+KSk7CisgICAgICAgIGlmICh0b1Jl
bW92ZS5zaXplKCkgPiB0aWxlc1RvUmVtb3ZlQ291bnQpIHsKKyAgICAgICAgICAgIHN0ZDo6cG9w
X2hlYXAodG9SZW1vdmUuYmVnaW4oKSwgdG9SZW1vdmUuZW5kKCksIHN0ZDo6cHRyX2Z1bihpc0Zh
cnRoZXJBd2F5PFRpbGVJbmRleD4pKTsKKyAgICAgICAgICAgIHRvUmVtb3ZlLnJlbW92ZUxhc3Qo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzaXplX3QgcmVtb3ZlQ291bnQgPSB0b1JlbW92ZS5z
aXplKCk7CisgICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCByZW1vdmVDb3VudDsgKytuKQorICAg
ICAgICBtX3RpbGVzLnJlbW92ZSh0b1JlbW92ZVtuXS5zZWNvbmQpOworCisgICAgaWYgKCFzaG9y
dGVzdERpc3RhbmNlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiB0aWxlQ291
bnQoKSAqIGJ5dGVzUGVyVGlsZSArIGJ5dGVzTmVlZGVkIDw9IG1heGltdW1CeXRlczsKK30KKwor
dm9pZCBUaWxlR3JpZDo6YWRkVGlsZXNDb3ZlcmluZ1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdFRv
Q292ZXIpCit7CisgICAgLy8gV2UgbmV2ZXIgZHJhdyBhbnl0aGluZyBvdXRzaWRlIG9mIG91ciBi
b3VuZHMuCisgICAgSW50UmVjdCByZWN0KHJlY3RUb0NvdmVyKTsKKyAgICByZWN0LmludGVyc2Vj
dChib3VuZHMoKSk7CisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBUaWxlSW5kZXggdG9wTGVmdEluZGV4ID0gdGlsZUluZGV4Rm9yUG9pbnQodG9wTGVmdChy
ZWN0KSk7CisgICAgVGlsZUluZGV4IGJvdHRvbVJpZ2h0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2lu
dChib3R0b21SaWdodChyZWN0KSk7CisgICAgZm9yIChpbnQgeUluZGV4ID0gdG9wTGVmdEluZGV4
LnkoKTsgeUluZGV4IDw9IGJvdHRvbVJpZ2h0SW5kZXgueSgpOyArK3lJbmRleCkgeworICAgICAg
ICBmb3IgKGludCB4SW5kZXggPSB0b3BMZWZ0SW5kZXgueCgpOyB4SW5kZXggPD0gYm90dG9tUmln
aHRJbmRleC54KCk7ICsreEluZGV4KSB7CisgICAgICAgICAgICBUaWxlSW5kZXggaW5kZXgoeElu
ZGV4LCB5SW5kZXgpOworICAgICAgICAgICAgaWYgKCF0aWxlRm9ySW5kZXgoaW5kZXgpKQorICAg
ICAgICAgICAgICAgIGFkZFRpbGVGb3JJbmRleChpbmRleCk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgVGlsZUdyaWQ6OmFkZFRpbGVGb3JJbmRleChjb25zdCBUaWxlSW5kZXgmIGluZGV4
KQoreworICAgIG1fdGlsZXMuc2V0KGluZGV4LCBUaWxlR3JpZFRpbGU6OmNyZWF0ZSh0aGlzLCB0
aWxlUmVjdEZvckluZGV4KGluZGV4KSkpOworfQorCitDQUxheWVyKiBUaWxlR3JpZDo6dGlsZUhv
c3RMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZUhvc3RMYXllci5nZXQoKTsKK30K
KworSW50UmVjdCBUaWxlR3JpZDo6Ym91bmRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UmVj
dChJbnRQb2ludCgpLCBJbnRTaXplKFt0aWxlSG9zdExheWVyKCkgc2l6ZV0pKTsKK30KKworUGFz
c1JlZlB0cjxUaWxlR3JpZFRpbGU+IFRpbGVHcmlkOjp0aWxlRm9ySW5kZXgoY29uc3QgVGlsZUlu
ZGV4JiBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlcy5nZXQoaW5kZXgpOworfQor
CitJbnRSZWN0IFRpbGVHcmlkOjp0aWxlUmVjdEZvckluZGV4KGNvbnN0IFRpbGVJbmRleCYgaW5k
ZXgpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0KGluZGV4LngoKSAqIG1fdGlsZVNpemUud2lk
dGgoKSAtIChtX29yaWdpbi54KCkgPyBtX3RpbGVTaXplLndpZHRoKCkgLSBtX29yaWdpbi54KCkg
OiAwKSwKKyAgICAgICAgICAgICAgICAgaW5kZXgueSgpICogbV90aWxlU2l6ZS5oZWlnaHQoKSAt
IChtX29yaWdpbi55KCkgPyBtX3RpbGVTaXplLmhlaWdodCgpIC0gbV9vcmlnaW4ueSgpIDogMCks
CisgICAgICAgICAgICAgICAgIG1fdGlsZVNpemUud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAg
bV90aWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgcmVjdC5pbnRlcnNlY3QoYm91bmRzKCkpOworICAg
IHJldHVybiByZWN0OworfQorCitUaWxlR3JpZDo6VGlsZUluZGV4IFRpbGVHcmlkOjp0aWxlSW5k
ZXhGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
b3JpZ2luLngoKSA8IG1fdGlsZVNpemUud2lkdGgoKSk7CisgICAgQVNTRVJUKG1fb3JpZ2luLnko
KSA8IG1fdGlsZVNpemUuaGVpZ2h0KCkpOworICAgIGludCB4ID0gKHBvaW50LngoKSArIChtX29y
aWdpbi54KCkgPyBtX3RpbGVTaXplLndpZHRoKCkgLSBtX29yaWdpbi54KCkgOiAwKSkgLyBtX3Rp
bGVTaXplLndpZHRoKCk7CisgICAgaW50IHkgPSAocG9pbnQueSgpICsgKG1fb3JpZ2luLnkoKSA/
IG1fdGlsZVNpemUuaGVpZ2h0KCkgLSBtX29yaWdpbi55KCkgOiAwKSkgLyBtX3RpbGVTaXplLmhl
aWdodCgpOworICAgIHJldHVybiBUaWxlSW5kZXgoc3RkOjptYXgoeCwgMCksIHN0ZDo6bWF4KHks
IDApKTsKK30KKwordm9pZCBUaWxlR3JpZDo6Y2VudGVyVGlsZUdyaWRPcmlnaW4oY29uc3QgSW50
UmVjdCYgdmlzaWJsZVJlY3QpCit7CisgICAgaWYgKHZpc2libGVSZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgbWluaW11bUhvcml6b250YWxUaWxlcyA9IDEg
KyAodmlzaWJsZVJlY3Qud2lkdGgoKSAtIDEpIC8gbV90aWxlU2l6ZS53aWR0aCgpOworICAgIHVu
c2lnbmVkIG1pbmltdW1WZXJ0aWNhbFRpbGVzID0gMSArICh2aXNpYmxlUmVjdC5oZWlnaHQoKSAt
IDEpIC8gbV90aWxlU2l6ZS5oZWlnaHQoKTsKKyAgICBUaWxlSW5kZXggY3VycmVudFRvcExlZnRJ
bmRleCA9IHRpbGVJbmRleEZvclBvaW50KHRvcExlZnQodmlzaWJsZVJlY3QpKTsKKyAgICBUaWxl
SW5kZXggY3VycmVudEJvdHRvbVJpZ2h0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludChib3R0b21S
aWdodCh2aXNpYmxlUmVjdCkpOworICAgIHVuc2lnbmVkIGN1cnJlbnRIb3Jpem9udGFsVGlsZXMg
PSBjdXJyZW50Qm90dG9tUmlnaHRJbmRleC54KCkgLSBjdXJyZW50VG9wTGVmdEluZGV4LngoKSAr
IDE7CisgICAgdW5zaWduZWQgY3VycmVudFZlcnRpY2FsVGlsZXMgPSBjdXJyZW50Qm90dG9tUmln
aHRJbmRleC55KCkgLSBjdXJyZW50VG9wTGVmdEluZGV4LnkoKSArIDE7CisKKyAgICAvLyBJZiB3
ZSBoYXZlIHRpbGVzIGFscmVhZHksIG9ubHkgY2VudGVyIGlmIHdlIHdvdWxkIGdldCBiZW5lZml0
cyBmcm9tIGJvdGggZGlyZWN0aW9ucyAoYXMgd2UgbmVlZCB0byB0aHJvdyBvdXQgZXhpc3Rpbmcg
dGlsZXMpLgorICAgIGlmICh0aWxlQ291bnQoKSAmJiAoY3VycmVudEhvcml6b250YWxUaWxlcyA9
PSBtaW5pbXVtSG9yaXpvbnRhbFRpbGVzIHx8IGN1cnJlbnRWZXJ0aWNhbFRpbGVzID09IG1pbmlt
dW1WZXJ0aWNhbFRpbGVzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgbmV3T3Jp
Z2luKDAsIDApOworICAgIEludFNpemUgc2l6ZSA9IGJvdW5kcygpLnNpemUoKTsKKyAgICBpZiAo
c2l6ZS53aWR0aCgpID4gbV90aWxlU2l6ZS53aWR0aCgpKSB7CisgICAgICAgIG5ld09yaWdpbi5z
ZXRYKCh2aXNpYmxlUmVjdC54KCkgLSAobWluaW11bUhvcml6b250YWxUaWxlcyAqIG1fdGlsZVNp
emUud2lkdGgoKSAtIHZpc2libGVSZWN0LndpZHRoKCkpIC8gMikgJSBtX3RpbGVTaXplLndpZHRo
KCkpOworICAgICAgICBpZiAobmV3T3JpZ2luLngoKSA8IDApCisgICAgICAgICAgICBuZXdPcmln
aW4uc2V0WCgwKTsKKyAgICB9CisgICAgaWYgKHNpemUuaGVpZ2h0KCkgPiBtX3RpbGVTaXplLmhl
aWdodCgpKSB7CisgICAgICAgIG5ld09yaWdpbi5zZXRZKCh2aXNpYmxlUmVjdC55KCkgLSAobWlu
aW11bVZlcnRpY2FsVGlsZXMgKiBtX3RpbGVTaXplLmhlaWdodCgpIC0gdmlzaWJsZVJlY3QuaGVp
Z2h0KCkpIC8gMikgJSBtX3RpbGVTaXplLmhlaWdodCgpKTsKKyAgICAgICAgaWYgKG5ld09yaWdp
bi55KCkgPCAwKQorICAgICAgICAgICAgbmV3T3JpZ2luLnNldFkoMCk7CisgICAgfQorCisgICAg
Ly8gRHJvcCBhbGwgZXhpc3RpbmcgdGlsZXMgaWYgdGhlIG9yaWdpbiBtb3ZlZC4KKyAgICBpZiAo
bmV3T3JpZ2luID09IG1fb3JpZ2luKQorICAgICAgICByZXR1cm47CisgICAgbV90aWxlcy5jbGVh
cigpOworICAgIG1fb3JpZ2luID0gbmV3T3JpZ2luOworfQorCitQYXNzUmVmUHRyPFRpbGVHcmlk
VGlsZT4gVGlsZUdyaWQ6OnRpbGVGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHRpbGVGb3JJbmRleCh0aWxlSW5kZXhGb3JQb2ludChwb2ludCkpOwor
fQorCitib29sIFRpbGVHcmlkOjp0aWxlc0NvdmVyKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHRpbGVGb3JQb2ludChyZWN0LmxvY2F0aW9uKCkpICYmIHRpbGVGb3JQ
b2ludChJbnRQb2ludChyZWN0Lm1heFgoKSAtIDEsIHJlY3QueSgpKSkgJiYKKyAgICB0aWxlRm9y
UG9pbnQoSW50UG9pbnQocmVjdC54KCksIHJlY3QubWF4WSgpIC0gMSkpICYmIHRpbGVGb3JQb2lu
dChJbnRQb2ludChyZWN0Lm1heFgoKSAtIDEsIHJlY3QubWF4WSgpIC0gMSkpOworfQorCit2b2lk
IFRpbGVHcmlkOjp1cGRhdGVUaWxlT3BhY2l0eSgpCit7CisgICAgVGlsZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90
aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIFtpdC0+dmFsdWUtPnRpbGVM
YXllcigpIHNldE9wYXF1ZTptX3RpbGVDYWNoZS0+dGlsZXNPcGFxdWUoKV07Cit9CisKK3ZvaWQg
VGlsZUdyaWQ6OnVwZGF0ZVRpbGVCb3JkZXJWaXNpYmlsaXR5KCkKK3sKKyAgICBUaWxlTWFwOjpp
dGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOworICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVl
LT5zaG93Qm9yZGVyKG1fdGlsZUNhY2hlLT50aWxlQm9yZGVyc1Zpc2libGUoKSk7Cit9CisKK3Vu
c2lnbmVkIFRpbGVHcmlkOjp0aWxlQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3RpbGVz
LnNpemUoKTsKK30KKworYm9vbCBUaWxlR3JpZDo6Y2hlY2tEb1NpbmdsZVRpbGVMYXlvdXQoKQor
eworICAgIEludFNpemUgc2l6ZSA9IGJvdW5kcygpLnNpemUoKTsKKyAgICBpZiAoc2l6ZS53aWR0
aCgpID4gbV90aWxlU2l6ZS53aWR0aCgpIHx8IHNpemUuaGVpZ2h0KCkgPiBtX3RpbGVTaXplLmhl
aWdodCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9vcmlnaW4gIT0gSW50
UG9pbnQoMCwgMCkpIHsKKyAgICAgICAgbV90aWxlcy5jbGVhcigpOworICAgICAgICBtX29yaWdp
biA9IEludFBvaW50KDAsIDApOworICAgIH0KKworICAgIGRyb3BJbnZhbGlkVGlsZXMoKTsKKwor
ICAgIGlmIChzaXplLmlzRW1wdHkoKSkgeworICAgICAgICBBU1NFUlQoIW1fdGlsZXMuZ2V0KFRp
bGVJbmRleCgwLCAwKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBUaWxl
SW5kZXggb3JpZ2luSW5kZXgoMCwgMCk7CisgICAgaWYgKCFtX3RpbGVzLmdldChvcmlnaW5JbmRl
eCkpCisgICAgICAgIG1fdGlsZXMuc2V0KG9yaWdpbkluZGV4LCBUaWxlR3JpZFRpbGU6OmNyZWF0
ZSh0aGlzLCB0aWxlUmVjdEZvckluZGV4KG9yaWdpbkluZGV4KSkpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OnVwZGF0ZUhvc3RMYXllclNpemUoKQoreworICAgIENB
TGF5ZXIqIGhvc3RMYXllciA9IG1fdGlsZUNhY2hlLT5ob3N0TGF5ZXIoKTsKKyAgICBDR1JlY3Qg
dGlsZUhvc3RCb3VuZHMgPSBbaG9zdExheWVyIGNvbnZlcnRSZWN0Oltob3N0TGF5ZXIgYm91bmRz
XSB0b0xheWVyOnRpbGVIb3N0TGF5ZXIoKV07CisgICAgQ0dTaXplIHRyYW5zZm9ybWVkU2l6ZTsK
KyAgICB0cmFuc2Zvcm1lZFNpemUud2lkdGggPSBDR1JvdW5kKHRpbGVIb3N0Qm91bmRzLnNpemUu
d2lkdGgpOworICAgIHRyYW5zZm9ybWVkU2l6ZS5oZWlnaHQgPSBDR1JvdW5kKHRpbGVIb3N0Qm91
bmRzLnNpemUuaGVpZ2h0KTsKKworICAgIENHUmVjdCBib3VuZHMgPSBbdGlsZUhvc3RMYXllcigp
IGJvdW5kc107CisgICAgaWYgKENHU2l6ZUVxdWFsVG9TaXplKGJvdW5kcy5zaXplLCB0cmFuc2Zv
cm1lZFNpemUpKQorICAgICAgICByZXR1cm47CisgICAgYm91bmRzLnNpemUgPSB0cmFuc2Zvcm1l
ZFNpemU7CisgICAgW3RpbGVIb3N0TGF5ZXIoKSBzZXRCb3VuZHM6Ym91bmRzXTsKK30KKwordm9p
ZCBUaWxlR3JpZDo6ZHJvcEludmFsaWRUaWxlcygpCit7CisgICAgSW50UmVjdCBib3VuZHMgPSB0
aGlzLT5ib3VuZHMoKTsKKyAgICBJbnRSZWN0IGRyb3BCb3VuZHMgPSBpbnRlcnNlY3Rpb24obV92
YWxpZEJvdW5kcywgYm91bmRzKTsKKyAgICBWZWN0b3I8VGlsZUluZGV4PiB0b1JlbW92ZTsKKyAg
ICBmb3IgKGF1dG8gdGlsZSA6IG1fdGlsZXMpIHsKKyAgICAgICAgVGlsZUluZGV4JiBpbmRleCA9
IHRpbGUua2V5OworICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gdGlsZS52YWx1ZS0+cmVjdCgp
OworICAgICAgICBJbnRSZWN0IGV4cGVjdGVkVGlsZVJlY3QgPSB0aWxlUmVjdEZvckluZGV4KGlu
ZGV4KTsKKyAgICAgICAgaWYgKGV4cGVjdGVkVGlsZVJlY3QgIT0gdGlsZVJlY3QgfHwgIWRyb3BC
b3VuZHMuY29udGFpbnModGlsZVJlY3QpKQorICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGlu
ZGV4KTsKKyAgICB9CisgICAgdW5zaWduZWQgcmVtb3ZlQ291bnQgPSB0b1JlbW92ZS5zaXplKCk7
CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHJlbW92ZUNvdW50OyArK24pCisgICAgICAg
IG1fdGlsZXMucmVtb3ZlKHRvUmVtb3ZlW25dKTsKKworICAgIG1fdmFsaWRCb3VuZHMgPSBib3Vu
ZHM7Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OmludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpCit7CisgICAgaWYgKCFoYXNUaWxlcygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBJbnRSZWN0IGJvdW5kcyA9IHRoaXMtPmJvdW5kcygpOworICAgIGlmIChpbnRlcnNlY3Rpb24o
Ym91bmRzLCBtX3ZhbGlkQm91bmRzKSAhPSBtX3ZhbGlkQm91bmRzKSB7CisgICAgICAgIC8vIFRo
ZSBib3VuZHMgaGF2ZSBnb3Qgc21hbGxlci4gRXZlcnl0aGluZyBvdXRzaWRlIHdpbGwgYWxzbyBi
ZSBjb25zaWRlcmVkIGludmFsaWQgYW5kIHdpbGwgYmUgZHJvcHBlZCBieSBkcm9wSW52YWxpZFRp
bGVzKCkuCisgICAgICAgIC8vIER1ZSB0byBkaXJ0eVJlY3QgYmVpbmcgbGltaXRlZCB0byBjdXJy
ZW50IGJvdW5kcyB0aGUgdGlsZXMgdGhhdCBhcmUgdGVtcG9yYXJpbHkgb3V0c2lkZSBtaWdodCBt
aXNzIGludmFsaWRhdGlvbiAKKyAgICAgICAgLy8gY29tcGxldGVseSBvdGh3ZXJ3aXNlLgorICAg
ICAgICBtX3ZhbGlkQm91bmRzID0gYm91bmRzOworICAgIH0KKworICAgIFZlY3RvcjxUaWxlSW5k
ZXg+IGludmFsaWRhdGVkVGlsZXM7CisKKyAgICBpZiAoZGlydHlSZWN0LndpZHRoKCkgPiBtX3Rp
bGVTaXplLndpZHRoKCkgKiA0IHx8IGRpcnR5UmVjdC5oZWlnaHQoKSA+IG1fdGlsZVNpemUuaGVp
Z2h0KCkgKiA0KSB7CisgICAgICAgIC8vIEZvciBsYXJnZSBpbnZhbGlkYXRlcywgaXRlcmF0ZSBv
dmVyIGxpdmUgdGlsZXMuCisgICAgICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMu
ZW5kKCk7CisgICAgICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgVGlsZUdyaWRUaWxlKiB0aWxlID0g
aXQtPnZhbHVlLmdldCgpOworICAgICAgICAgICAgaWYgKCF0aWxlLT5yZWN0KCkuaW50ZXJzZWN0
cyhkaXJ0eVJlY3QpKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0aWxl
LT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOworICAgICAgICAgICAgaW52YWxpZGF0ZWRUaWxl
cy5hcHBlbmQoaXQtPmtleSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBUaWxl
SW5kZXggdG9wTGVmdEluZGV4ID0gdGlsZUluZGV4Rm9yUG9pbnQodG9wTGVmdChkaXJ0eVJlY3Qp
KTsKKyAgICAgICAgVGlsZUluZGV4IGJvdHRvbVJpZ2h0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2lu
dChib3R0b21SaWdodChkaXJ0eVJlY3QpKTsKKyAgICAgICAgZm9yIChpbnQgeUluZGV4ID0gdG9w
TGVmdEluZGV4LnkoKTsgeUluZGV4IDw9IGJvdHRvbVJpZ2h0SW5kZXgueSgpOyArK3lJbmRleCkg
eworICAgICAgICAgICAgZm9yIChpbnQgeEluZGV4ID0gdG9wTGVmdEluZGV4LngoKTsgeEluZGV4
IDw9IGJvdHRvbVJpZ2h0SW5kZXgueCgpOyArK3hJbmRleCkgeworICAgICAgICAgICAgICAgIFRp
bGVJbmRleCBpbmRleCh4SW5kZXgsIHlJbmRleCk7CisgICAgICAgICAgICAgICAgUmVmUHRyPFRp
bGVHcmlkVGlsZT4gdGlsZSA9IHRpbGVGb3JJbmRleChpbmRleCk7CisgICAgICAgICAgICAgICAg
aWYgKCF0aWxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXRpbGUtPnJlY3QoKS5pbnRlcnNlY3RzKGRpcnR5UmVjdCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHRpbGUtPmludmFsaWRhdGVSZWN0KGRp
cnR5UmVjdCk7CisgICAgICAgICAgICAgICAgaW52YWxpZGF0ZWRUaWxlcy5hcHBlbmQoaW5kZXgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChpbnZhbGlkYXRlZFRp
bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIFdoZW4gdXNpbmcgbWluaW1h
bCBjb3ZlcmFnZSwgZHJvcCBzcGVjdWxhdGl2ZSB0aWxlcyBpbnN0ZWFkIG9mIHVwZGF0aW5nIHRo
ZW0uCisgICAgaWYgKCFzaG91bGRVc2VNaW5pbWFsVGlsZUNvdmVyYWdlKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAobV90aWxlQ2FjaGUtPnRpbGluZ01vZGUoKSAhPSBUaWxlQ2FjaGU6Ok1p
bmltYWwgJiYgbV90aWxlQ2FjaGUtPnRpbGluZ01vZGUoKSAhPSBUaWxlQ2FjaGU6Ok5vcm1hbCkK
KyAgICAgICAgcmV0dXJuOworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB0aGlzLT52aXNpYmxl
UmVjdCgpOworICAgIHVuc2lnbmVkIGNvdW50ID0gaW52YWxpZGF0ZWRUaWxlcy5zaXplKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgUmVmUHRy
PFRpbGVHcmlkVGlsZT4gdGlsZSA9IHRpbGVGb3JJbmRleChpbnZhbGlkYXRlZFRpbGVzW2ldKTsK
KyAgICAgICAgaWYgKCF0aWxlLT5yZWN0KCkuaW50ZXJzZWN0cyh2aXNpYmxlUmVjdCkpCisgICAg
ICAgICAgICBtX3RpbGVzLnJlbW92ZShpbnZhbGlkYXRlZFRpbGVzW2ldKTsKKyAgICB9Cit9CisK
K2Jvb2wgVGlsZUdyaWQ6OnNob3VsZFVzZU1pbmltYWxUaWxlQ292ZXJhZ2UoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3RpbGVDYWNoZS0+dGlsaW5nTW9kZSgpID09IFRpbGVDYWNoZTo6TWluaW1h
bAorICAgICAgICB8fCAhbV90aWxlQ2FjaGUtPmlzU3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFi
bGVkKCkKKyAgICAgICAgfHwgbWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuaGFzUmVjZWl2ZWRNZW1v
cnlQcmVzc3VyZSgpOworfQorCitJbnRSZWN0IFRpbGVHcmlkOjphZGp1c3RDb3ZlclJlY3RGb3JQ
YWdlQm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgLy8gQWRqdXN0IHRo
ZSByZWN0IHNvIHRoYXQgaXQgc3RheXMgd2l0aGluIHRoZSBib3VuZHMgYW5kIGtlZXBzIHRoZSBw
aXhlbCBzaXplLgorICAgIEludFJlY3QgYm91bmRzID0gdGhpcy0+Ym91bmRzKCk7CisgICAgSW50
UmVjdCBhZGp1c3RlZFJlY3QgPSByZWN0OworICAgIGFkanVzdGVkUmVjdC5tb3ZlKHJlY3QueCgp
IDwgYm91bmRzLngoKSA/IGJvdW5kcy54KCkgLSByZWN0LngoKSA6IDAsCisgICAgICAgICAgICAg
IHJlY3QueSgpIDwgYm91bmRzLnkoKSA/IGJvdW5kcy55KCkgLSByZWN0LnkoKSA6IDApOworICAg
IGFkanVzdGVkUmVjdC5tb3ZlKHJlY3QubWF4WCgpID4gYm91bmRzLm1heFgoKSA/IGJvdW5kcy5t
YXhYKCkgLSByZWN0Lm1heFgoKSA6IDAsCisgICAgICAgICAgICAgIHJlY3QubWF4WSgpID4gYm91
bmRzLm1heFkoKSA/IGJvdW5kcy5tYXhZKCkgLSByZWN0Lm1heFkoKSA6IDApOworICAgIGFkanVz
dGVkUmVjdCA9IGludGVyc2VjdGlvbihib3VuZHMsIGFkanVzdGVkUmVjdCk7CisgICAgaWYgKGFk
anVzdGVkUmVjdCA9PSByZWN0IHx8IGFkanVzdGVkUmVjdC5pc0VtcHR5KCkgfHwgc2hvdWxkVXNl
TWluaW1hbFRpbGVDb3ZlcmFnZSgpKQorICAgICAgICByZXR1cm4gYWRqdXN0ZWRSZWN0OworICAg
IGludCBwaXhlbHMgPSBhZGp1c3RlZFJlY3Qud2lkdGgoKSAqIGFkanVzdGVkUmVjdC5oZWlnaHQo
KTsKKyAgICBpZiAoYWRqdXN0ZWRSZWN0LndpZHRoKCkgIT0gcmVjdC53aWR0aCgpKQorICAgICAg
ICBhZGp1c3RlZFJlY3QuaW5mbGF0ZVkoKHBpeGVscyAvIGFkanVzdGVkUmVjdC53aWR0aCgpIC0g
YWRqdXN0ZWRSZWN0LmhlaWdodCgpKSAvIDIpOworICAgIGVsc2UgaWYgKGFkanVzdGVkUmVjdC5o
ZWlnaHQoKSAhPSByZWN0LmhlaWdodCgpKQorICAgICAgICBhZGp1c3RlZFJlY3QuaW5mbGF0ZVgo
KHBpeGVscyAvIGFkanVzdGVkUmVjdC5oZWlnaHQoKSAtIGFkanVzdGVkUmVjdC53aWR0aCgpKSAv
IDIpOworICAgIHJldHVybiBpbnRlcnNlY3Rpb24oYWRqdXN0ZWRSZWN0LCBib3VuZHMpOworfQor
CitJbnRSZWN0IFRpbGVHcmlkOjpjYWxjdWxhdGVDb3ZlclJlY3QoY29uc3QgSW50UmVjdCYgdmlz
aWJsZVJlY3QsIGJvb2wmIGNlbnRlckdyaWQpCit7CisgICAgLy8gVXNlIG1pbmltdW0gY292ZXJS
ZWN0IGlmIHdlIGFyZSB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCisgICAgaWYgKHNob3VsZFVzZU1p
bmltYWxUaWxlQ292ZXJhZ2UoKSkgeworICAgICAgICBjZW50ZXJHcmlkID0gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIHZpc2libGVSZWN0OworICAgIH0KKyAgICBJbnRSZWN0IGNvdmVyUmVjdCA9IHZp
c2libGVSZWN0OworICAgIGNlbnRlckdyaWQgPSBmYWxzZTsKKyAgICBjb3ZlclJlY3QuaW5mbGF0
ZVgodmlzaWJsZVJlY3Qud2lkdGgoKSAvIDIpOworICAgIGNvdmVyUmVjdC5pbmZsYXRlWSh2aXNp
YmxlUmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGFkanVzdENvdmVyUmVjdEZvclBhZ2VCb3Vu
ZHMoY292ZXJSZWN0KTsKK30KKworZG91YmxlIFRpbGVHcmlkOjp0aWxlRGlzdGFuY2UyKGNvbnN0
IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkgY29uc3QKK3sK
KyAgICAvLyBUaGUgImRpc3RhbmNlIiBjYWxjdWxhdGVkIGhlcmUgaXMgdXNlZCB0byBwaWNrIHdo
aWNoIHRpbGUgdG8gY2FjaGUgbmV4dC4gVGhlIGlkZWEgaXMgdG8gY3JlYXRlIHRob3NlCisgICAg
Ly8gY2xvc2VzdCB0byB0aGUgY3VycmVudCB2aWV3cG9ydCBmaXJzdCBzbyB0aGUgdXNlciBpcyBt
b3JlIGxpa2VseSB0byBzZWUgYWxyZWFkeSByZW5kZXJlZCBjb250ZW50IHdlIHNoZQorICAgIC8v
IHNjcm9sbHMuIFRoZSBjYWxjdWxhdGlvbiBpcyB3ZWlnaHRlZCB0byBwcmVmZXIgdmVydGljYWwg
YW5kIGRvd253YXJkIGRpcmVjdGlvbi4KKyAgICBpZiAodmlzaWJsZVJlY3QuaW50ZXJzZWN0cyh0
aWxlUmVjdCkpCisgICAgICAgIHJldHVybiAwOworICAgIEludFBvaW50IHZpc2libGVDZW50ZXIg
PSB2aXNpYmxlUmVjdC5sb2NhdGlvbigpICsgSW50U2l6ZSh2aXNpYmxlUmVjdC53aWR0aCgpIC8g
MiwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICBJbnRQb2ludCB0aWxlQ2VudGVyID0g
dGlsZVJlY3QubG9jYXRpb24oKSArIEludFNpemUodGlsZVJlY3Qud2lkdGgoKSAvIDIsIHRpbGVS
ZWN0LmhlaWdodCgpIC8gMik7CisgICAgCisgICAgZG91YmxlIGhvcml6b250YWxCaWFzID0gMS4w
OworICAgIGRvdWJsZSBsZWZ0d2FyZEJpYXMgPSAxLjA7CisgICAgZG91YmxlIHJpZ2h0d2FyZEJp
YXMgPSAxLjA7CisKKyAgICBkb3VibGUgdmVydGljYWxCaWFzID0gMS4wOworICAgIGRvdWJsZSB1
cHdhcmRCaWFzID0gMS4wOworICAgIGRvdWJsZSBkb3dud2FyZEJpYXMgPSAxLjA7CisKKyAgICBj
b25zdCBkb3VibGUgdGlsaW5nQmlhc1ZlcnlMaWtlbHkgPSAwLjg7CisgICAgY29uc3QgZG91Ymxl
IHRpbGluZ0JpYXNMaWtlbHkgPSAwLjk7CisKKyAgICBzd2l0Y2ggKG1fdGlsZUNhY2hlLT50aWxp
bmdEaXJlY3Rpb24oKSkgeworICAgIGNhc2UgVGlsZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb25VcDoK
KyAgICAgICAgdmVydGljYWxCaWFzID0gdGlsaW5nQmlhc1ZlcnlMaWtlbHk7CisgICAgICAgIHVw
d2FyZEJpYXMgPSB0aWxpbmdCaWFzTGlrZWx5OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRp
bGVDYWNoZTo6VGlsaW5nRGlyZWN0aW9uRG93bjoKKyAgICAgICAgdmVydGljYWxCaWFzID0gdGls
aW5nQmlhc1ZlcnlMaWtlbHk7CisgICAgICAgIGRvd253YXJkQmlhcyA9IHRpbGluZ0JpYXNMaWtl
bHk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGlsZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb25M
ZWZ0OgorICAgICAgICBob3Jpem9udGFsQmlhcyA9IHRpbGluZ0JpYXNWZXJ5TGlrZWx5OworICAg
ICAgICBsZWZ0d2FyZEJpYXMgPSB0aWxpbmdCaWFzTGlrZWx5OworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFRpbGVDYWNoZTo6VGlsaW5nRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIGhvcml6b250
YWxCaWFzID0gdGlsaW5nQmlhc1ZlcnlMaWtlbHk7CisgICAgICAgIHJpZ2h0d2FyZEJpYXMgPSB0
aWxpbmdCaWFzTGlrZWx5OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkb3VibGUgeFNj
YWxlID0gaG9yaXpvbnRhbEJpYXMgKiB2aXNpYmxlUmVjdC5oZWlnaHQoKSAvIHZpc2libGVSZWN0
LndpZHRoKCkgKiAodGlsZUNlbnRlci54KCkgPj0gdmlzaWJsZUNlbnRlci54KCkgPyByaWdodHdh
cmRCaWFzIDogbGVmdHdhcmRCaWFzKTsKKyAgICBkb3VibGUgeVNjYWxlID0gdmVydGljYWxCaWFz
ICogdmlzaWJsZVJlY3Qud2lkdGgoKSAvIHZpc2libGVSZWN0LmhlaWdodCgpICogKHRpbGVDZW50
ZXIueSgpID49IHZpc2libGVDZW50ZXIueSgpID8gZG93bndhcmRCaWFzIDogdXB3YXJkQmlhcyk7
CisKKyAgICBkb3VibGUgeERpc3RhbmNlID0geFNjYWxlICogKHRpbGVDZW50ZXIueCgpIC0gdmlz
aWJsZUNlbnRlci54KCkpOworICAgIGRvdWJsZSB5RGlzdGFuY2UgPSB5U2NhbGUgKiAodGlsZUNl
bnRlci55KCkgLSB2aXNpYmxlQ2VudGVyLnkoKSk7CisKKyAgICBkb3VibGUgZGlzdGFuY2UyID0g
eERpc3RhbmNlICogeERpc3RhbmNlICsgeURpc3RhbmNlICogeURpc3RhbmNlOworICAgIHJldHVy
biBkaXN0YW5jZTI7Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OmNyZWF0ZVRpbGVzKFRpbGVDYWNoZTo6
U3luY2hyb25vdXNUaWxlQ3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKK3sKKyAgICBJbnRSZWN0
IHZpc2libGVSZWN0ID0gdGhpcy0+dmlzaWJsZVJlY3QoKTsKKyAgICBpZiAodmlzaWJsZVJlY3Qu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBEcm9wIHRpbGVzIHRoYXQgYXJl
IHdyb25nIHNpemUgb3Igb3V0c2lkZSB0aGUgZnJhbWUgKGJlY2F1c2UgdGhlIGZyYW1lIGhhcyBi
ZWVuIHJlc2l6ZWQpLgorICAgIGRyb3BJbnZhbGlkVGlsZXMoKTsKKworICAgIGJvb2wgY2VudGVy
R3JpZDsKKyAgICBJbnRSZWN0IGNvdmVyUmVjdCA9IGNhbGN1bGF0ZUNvdmVyUmVjdCh2aXNpYmxl
UmVjdCwgY2VudGVyR3JpZCk7CisKKyAgICAvLyBJZiB0aWxlIHNpemUgaXMgYmlnZ2VyIHRoYW4g
dGhlIHZpZXcsIGNlbnRlcmluZyBtaW5pbWl6ZXMgdGhlIHBhaW50aW5nIG5lZWRlZCB0byBjb3Zl
ciB0aGUgc2NyZWVuLgorICAgIC8vIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgYWZ0ZXIgem9v
bWluZyAKKyAgICBjZW50ZXJHcmlkID0gY2VudGVyR3JpZCB8fCAhdGlsZUNvdW50KCk7CisgICAg
aWYgKGNlbnRlckdyaWQpCisgICAgICAgIGNlbnRlclRpbGVHcmlkT3JpZ2luKHZpc2libGVSZWN0
KTsKKworICAgIGRvdWJsZSBzaG9ydGVzdERpc3RhbmNlID0gc3RkOjpudW1lcmljX2xpbWl0czxk
b3VibGU+OjppbmZpbml0eSgpOworICAgIGRvdWJsZSBjb3ZlcmVkRGlzdGFuY2UgPSAwOworICAg
IFZlY3RvcjxUaWxlR3JpZDo6VGlsZUluZGV4PiB0aWxlc1RvQ3JlYXRlOworICAgIHVuc2lnbmVk
IHBlbmRpbmdUaWxlQ291bnQgPSAwOworCisgICAgVGlsZUdyaWQ6OlRpbGVJbmRleCB0b3BMZWZ0
SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludCh0b3BMZWZ0KGNvdmVyUmVjdCkpOworICAgIFRpbGVH
cmlkOjpUaWxlSW5kZXggYm90dG9tUmlnaHRJbmRleCA9IHRpbGVJbmRleEZvclBvaW50KGJvdHRv
bVJpZ2h0KGNvdmVyUmVjdCkpOworICAgIGZvciAoaW50IHlJbmRleCA9IHRvcExlZnRJbmRleC55
KCk7IHlJbmRleCA8PSBib3R0b21SaWdodEluZGV4LnkoKTsgKyt5SW5kZXgpIHsKKyAgICAgICAg
Zm9yIChpbnQgeEluZGV4ID0gdG9wTGVmdEluZGV4LngoKTsgeEluZGV4IDw9IGJvdHRvbVJpZ2h0
SW5kZXgueCgpOyArK3hJbmRleCkgeworICAgICAgICAgICAgVGlsZUdyaWQ6OlRpbGVJbmRleCBp
bmRleCh4SW5kZXgsIHlJbmRleCk7CisgICAgICAgICAgICAvLyBDdXJyZW50bHkgdmlzaWJsZSB0
aWxlcyBoYXZlIGRpc3RhbmNlIG9mIDAgYW5kIGdldCBhbGwgY3JlYXRlZCBpbiB0aGUgc2FtZSB0
cmFuc2FjdGlvbi4KKyAgICAgICAgICAgIGRvdWJsZSBkaXN0YW5jZSA9IHRpbGVEaXN0YW5jZTIo
dmlzaWJsZVJlY3QsIHRpbGVSZWN0Rm9ySW5kZXgoaW5kZXgpKTsKKyAgICAgICAgICAgIGlmIChk
aXN0YW5jZSA+IGNvdmVyZWREaXN0YW5jZSkKKyAgICAgICAgICAgICAgICBjb3ZlcmVkRGlzdGFu
Y2UgPSBkaXN0YW5jZTsKKyAgICAgICAgICAgIGlmICh0aWxlRm9ySW5kZXgoaW5kZXgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgKytwZW5kaW5nVGlsZUNvdW50Owor
ICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gc2hvcnRlc3REaXN0YW5jZSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8IHNob3J0ZXN0RGlzdGFu
Y2UpIHsKKyAgICAgICAgICAgICAgICB0aWxlc1RvQ3JlYXRlLmNsZWFyKCk7CisgICAgICAgICAg
ICAgICAgc2hvcnRlc3REaXN0YW5jZSA9IGRpc3RhbmNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdGlsZXNUb0NyZWF0ZS5hcHBlbmQoaW5kZXgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgc2l6ZV90IHRpbGVzVG9DcmVhdGVDb3VudCA9IHRpbGVzVG9DcmVhdGUuc2l6ZSgpOworCisg
ICAgLy8gVGlsZSBjcmVhdGlvbiB0aW1lciB3aWxsIGludm9rZSB0aGlzIGZ1bmN0aW9uIGFnYWlu
IGluIENvdmVyU3BlY3VsYXRpdmUgbW9kZS4KKyAgICBib29sIGNhbmRpZGF0ZVRpbGVzQXJlU3Bl
Y3VsYXRpdmUgPSBzaG9ydGVzdERpc3RhbmNlID4gMDsKKyAgICBpZiAoY3JlYXRpb25Nb2RlID09
IFRpbGVDYWNoZTo6Q292ZXJWaXNpYmxlT25seSAmJiBjYW5kaWRhdGVUaWxlc0FyZVNwZWN1bGF0
aXZlKQorICAgICAgICB0aWxlc1RvQ3JlYXRlQ291bnQgPSAwOworCisgICAgLy8gRXZlbiBpZiB3
ZSBkb24ndCBjcmVhdGUgYW55IHRpbGVzLCB3ZSBzaG91bGQgc3RpbGwgZHJvcCBkaXN0YW50IHRp
bGVzCisgICAgLy8gaW4gY2FzZSBjb3ZlclJlY3QgZ290IHNtYWxsZXIuCisgICAgZG91YmxlIGtl
ZXBEaXN0YW5jZSA9IHN0ZDo6bWluKHNob3J0ZXN0RGlzdGFuY2UsIGNvdmVyZWREaXN0YW5jZSk7
CisgICAgaWYgKCFkcm9wRGlzdGFudFRpbGVzKHRpbGVzVG9DcmVhdGVDb3VudCwga2VlcERpc3Rh
bmNlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHBlbmRpbmdUaWxlQ291bnQgPj0g
dGlsZXNUb0NyZWF0ZUNvdW50KTsKKyAgICBpZiAoIXBlbmRpbmdUaWxlQ291bnQpCisgICAgICAg
IHJldHVybjsKKworICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgdGlsZXNUb0NyZWF0ZUNvdW50
OyArK24pCisgICAgICAgIGFkZFRpbGVGb3JJbmRleCh0aWxlc1RvQ3JlYXRlW25dKTsKKworICAg
IGJvb2wgZGlkQ3JlYXRlVGlsZXMgPSAhIXRpbGVzVG9DcmVhdGVDb3VudDsKKyAgICBib29sIGNy
ZWF0ZU1vcmVUaWxlcyA9IHBlbmRpbmdUaWxlQ291bnQgPiB0aWxlc1RvQ3JlYXRlQ291bnQ7Cisg
ICAgbV90aWxlQ2FjaGUtPmZpbmlzaGVkQ3JlYXRpbmdUaWxlcyhkaWRDcmVhdGVUaWxlcywgY3Jl
YXRlTW9yZVRpbGVzKTsKK30KKwordm9pZCBUaWxlR3JpZDo6ZHVtcFRpbGVzKCkKK3sKKyAgICBJ
bnRSZWN0IHZpc2libGVSZWN0ID0gdGhpcy0+dmlzaWJsZVJlY3QoKTsKKyAgICBOU0xvZyhAInRy
YW5zZm9ybWVkIHZpc2libGVSZWN0ID0gWyU2ZCAlNmQgJTZkICU2ZF0iLCB2aXNpYmxlUmVjdC54
KCksIHZpc2libGVSZWN0LnkoKSwgdmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVp
Z2h0KCkpOworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFRpbGVJbmRleCYgaW5kZXggPSBp
dC0+a2V5OworICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnZhbHVlLT5yZWN0KCk7Cisg
ICAgICAgIE5TTG9nKEAiIyUtM2QgKCUzZCAlM2QpIC0gWyU2ZCAlNmQgJTZkICU2ZF0lQCIsICsr
aSwgaW5kZXgueCgpLCBpbmRleC55KCksIHRpbGVSZWN0LngoKSwgdGlsZVJlY3QueSgpLCB0aWxl
UmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwgdGlsZVJlY3QuaW50ZXJzZWN0cyh2aXNp
YmxlUmVjdCkgPyBAIiAqIiA6IEAiIik7CisgICAgICAgIE5TTG9nKEAiICAgICAlQCIsIFtpdC0+
dmFsdWUtPnRpbGVMYXllcigpIGNvbnRlbnRzXSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWRUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVGlsZUdyaWRUaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmFkOTIyODVmZDk4ZGI2YTI5MzI4
YTJiM2UwMGM0ZjkyZGFhMDFkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBUaWxlR3JpZFRpbGVfaAorI2RlZmluZSBUaWxlR3JpZFRpbGVfaAorCisjaWYgUExB
VEZPUk0oSU9TKQorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworQGNsYXNzIFRpbGVMYXllcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBU
aWxlR3JpZDsKKworLy8gUmVmY291bnQgdGhlIHRpbGVzIHNvIHRoZXkgd29yayBuaWNlbHkgaW4g
dmVjdG9yIGFuZCB3ZSBrbm93IHdoZW4gdG8gcmVtb3ZlIHRoZSB0aWxlIGxheWVyIGZyb20gdGhl
IHBhcmVudC4KK2NsYXNzIFRpbGVHcmlkVGlsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRpbGVHcmlk
VGlsZT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRpbGVHcmlkVGlsZT4gY3Jl
YXRlKFRpbGVHcmlkKiBncmlkLCBjb25zdCBJbnRSZWN0JiByZWN0KSB7IHJldHVybiBhZG9wdFJl
ZjxUaWxlR3JpZFRpbGU+KG5ldyBUaWxlR3JpZFRpbGUoZ3JpZCwgcmVjdCkpOyB9CisgICAgflRp
bGVHcmlkVGlsZSgpOworCisgICAgVGlsZUxheWVyKiB0aWxlTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX3RpbGVMYXllci5nZXQoKTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdEluU3VyZmFjZSk7CisgICAgSW50UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9CisgICAgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KTsKKyAg
ICB2b2lkIHNob3dCb3JkZXIoYm9vbCk7CisKK3ByaXZhdGU6CisgICAgVGlsZUdyaWRUaWxlKFRp
bGVHcmlkKiwgY29uc3QgSW50UmVjdCYpOworCisgICAgVGlsZUdyaWQqIG1fdGlsZUdyaWQ7Cisg
ICAgUmV0YWluUHRyPFRpbGVMYXllcj4gbV90aWxlTGF5ZXI7CisgICAgSW50UmVjdCBtX3JlY3Q7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1Mp
CisjZW5kaWYgLy8gVGlsZUdyaWRUaWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
VGlsZUdyaWRUaWxlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2MTg2N2E3MTczYjhlMmMyYzBmZjQ5ZGZmM2Q1
MTUyNGRiM2JlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvVGlsZUdyaWRUaWxlLm1tCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRpbGVHcmlkLmgiCisKKyNpZiBQTEFURk9STShJT1Mp
CisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIlRpbGVDYWNoZS5oIgorI2luY2x1ZGUg
IlRpbGVHcmlkVGlsZS5oIgorI2luY2x1ZGUgIlRpbGVMYXllci5oIgorI2luY2x1ZGUgIlRpbGVM
YXllclBvb2wuaCIKKyNpbmNsdWRlICJXQUtXaW5kb3cuaCIKKyNpbmNsdWRlIDxRdWFydHpDb3Jl
L1F1YXJ0ekNvcmUuaD4KKyNpbmNsdWRlIDxRdWFydHpDb3JlL1F1YXJ0ekNvcmVQcml2YXRlLmg+
CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworI2lmIExPR19USUxJTkcKK3N0YXRpYyBpbnQgdG90YWxUaWxlQ291bnQ7
CisjZW5kaWYKKworVGlsZUdyaWRUaWxlOjpUaWxlR3JpZFRpbGUoVGlsZUdyaWQqIHRpbGVHcmlk
LCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKKyAgICA6IG1fdGlsZUdyaWQodGlsZUdyaWQpCisg
ICAgLCBtX3JlY3QodGlsZVJlY3QpCit7CisgICAgQVNTRVJUKCF0aWxlUmVjdC5pc0VtcHR5KCkp
OworICAgIEludFNpemUgcGl4ZWxTaXplKG1fcmVjdC5zaXplKCkpOworICAgIGNvbnN0IENHRmxv
YXQgc2NyZWVuU2NhbGUgPSBtX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+c2NyZWVuU2NhbGUoKTsK
KyAgICBwaXhlbFNpemUuc2NhbGUoc2NyZWVuU2NhbGUpOworICAgIG1fdGlsZUxheWVyID0gVGls
ZUxheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT50YWtlTGF5ZXJXaXRoU2l6ZShwaXhlbFNpemUpOwor
ICAgIGlmICghbV90aWxlTGF5ZXIpIHsKKyNpZiBMT0dfVElMSU5HCisgICAgICAgIE5TTG9nKEAi
dW5hYmxlIHRvIHJldXNlIGxheWVyIHdpdGggc2l6ZSAlZCB4ICVkLCBjcmVhdGluZyBvbmUiLCBw
aXhlbFNpemUud2lkdGgoKSwgcGl4ZWxTaXplLmhlaWdodCgpKTsKKyNlbmRpZgorICAgICAgICBt
X3RpbGVMYXllciA9IGFkb3B0TlMoW1tUaWxlTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICB9Cisg
ICAgVGlsZUxheWVyKiBsYXllciA9IG1fdGlsZUxheWVyLmdldCgpOworICAgIFtsYXllciBzZXRU
aWxlR3JpZDp0aWxlR3JpZF07CisgICAgW2xheWVyIHNldE9wYXF1ZTptX3RpbGVHcmlkLT50aWxl
Q2FjaGUoKS0+dGlsZXNPcGFxdWUoKV07CisgICAgW2xheWVyIHNldEVkZ2VBbnRpYWxpYXNpbmdN
YXNrOjBdOworICAgIFtsYXllciBzZXROZWVkc0xheW91dE9uR2VvbWV0cnlDaGFuZ2U6Tk9dOwor
ICAgIFtsYXllciBzZXRDb250ZW50c1NjYWxlOnNjcmVlblNjYWxlXTsKKyAgICBbbGF5ZXIgc2V0
QWNjZWxlcmF0ZXNEcmF3aW5nOm1fdGlsZUdyaWQtPnRpbGVDYWNoZSgpLT5hY2NlbGVyYXRlZERy
YXdpbmdFbmFibGVkKCldOworCisgICAgLy8gSG9zdCBsYXllciBtYXkgaGF2ZSBvdGhlciBzdWJs
YXllcnMuIEtlZXAgdGhlIHRpbGUgbGF5ZXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5
CisgICAgLy8gc28gdGhleSBhcmUgcGFpbnRlZCBiZWhpbmQgZXZlcnl0aGluZyBlbHNlLgorICAg
IFt0aWxlR3JpZC0+dGlsZUhvc3RMYXllcigpIGluc2VydFN1YmxheWVyOmxheWVyIGF0SW5kZXg6
dGlsZUdyaWQtPnRpbGVDb3VudCgpXTsKKyAgICBbbGF5ZXIgc2V0RnJhbWU6bV9yZWN0XTsKKyAg
ICBpbnZhbGlkYXRlUmVjdChtX3JlY3QpOworICAgIHNob3dCb3JkZXIobV90aWxlR3JpZC0+dGls
ZUNhY2hlKCktPnRpbGVCb3JkZXJzVmlzaWJsZSgpKTsKKworI2lmIExPR19USUxJTkcKKyAgICAr
K3RvdGFsVGlsZUNvdW50OworICAgIE5TTG9nKEAibmV3IFRpbGUgKCVkLCVkKSAlZCAlZCwgY291
bnQgJWQiLCB0aWxlUmVjdC54KCksIHRpbGVSZWN0LnkoKSwgdGlsZVJlY3Qud2lkdGgoKSwgdGls
ZVJlY3QuaGVpZ2h0KCksIHRvdGFsVGlsZUNvdW50KTsKKyNlbmRpZgorfQorCitUaWxlR3JpZFRp
bGU6On5UaWxlR3JpZFRpbGUoKSAKK3sKKyAgICBbdGlsZUxheWVyKCkgc2V0VGlsZUdyaWQ6MF07
CisgICAgW3RpbGVMYXllcigpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBUaWxlTGF5ZXJQ
b29sOjpzaGFyZWRQb29sKCktPmFkZExheWVyKHRpbGVMYXllcigpKTsKKyNpZiBMT0dfVElMSU5H
CisgICAgLS10b3RhbFRpbGVDb3VudDsKKyAgICBOU0xvZyhAImRlbGV0ZSBUaWxlICglZCwlZCkg
JWQgJWQsIGNvdW50ICVkIiwgbV9yZWN0LngoKSwgbV9yZWN0LnkoKSwgbV9yZWN0LndpZHRoKCks
IG1fcmVjdC5oZWlnaHQoKSwgdG90YWxUaWxlQ291bnQpOworI2VuZGlmCit9CisKK3ZvaWQgVGls
ZUdyaWRUaWxlOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiB3aW5kb3dEaXJ0eVJlY3Qp
Cit7CisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBpbnRlcnNlY3Rpb24od2luZG93RGlydHlSZWN0
LCBtX3JlY3QpOworICAgIGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisgICAgZGlydHlSZWN0Lm1vdmUoSW50UG9pbnQoKSAtIG1fcmVjdC5sb2NhdGlvbigpKTsKKyAg
ICBbdGlsZUxheWVyKCkgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OmRpcnR5UmVjdF07CisKKyAgICBp
ZiAobV90aWxlR3JpZC0+dGlsZUNhY2hlKCktPnRpbGVQYWludENvdW50ZXJzVmlzaWJsZSgpKQor
ICAgICAgICBbdGlsZUxheWVyKCkgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OkNHUmVjdE1ha2UoMCwg
MCwgNDYsIDI1KV07Cit9CisKK3ZvaWQgVGlsZUdyaWRUaWxlOjpzZXRSZWN0KGNvbnN0IEludFJl
Y3QmIHRpbGVSZWN0KQoreworICAgIGlmIChtX3JlY3QgPT0gdGlsZVJlY3QpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX3JlY3QgPSB0aWxlUmVjdDsKKyAgICBUaWxlTGF5ZXIqIGxheWVyID0gbV90
aWxlTGF5ZXIuZ2V0KCk7CisgICAgW2xheWVyIHNldEZyYW1lOm1fcmVjdF07CisgICAgW2xheWVy
IHNldE5lZWRzRGlzcGxheV07Cit9CisKK3ZvaWQgVGlsZUdyaWRUaWxlOjpzaG93Qm9yZGVyKGJv
b2wgZmxhZykKK3sKKyAgICBUaWxlTGF5ZXIqIGxheWVyID0gbV90aWxlTGF5ZXIuZ2V0KCk7Cisg
ICAgaWYgKGZsYWcpIHsKKyAgICAgICAgW2xheWVyIHNldEJvcmRlckNvbG9yOmNhY2hlZENHQ29s
b3IobV90aWxlR3JpZC0+dGlsZUNhY2hlKCktPmNvbG9yRm9yR3JpZFRpbGVCb3JkZXIobV90aWxl
R3JpZCksIENvbG9yU3BhY2VEZXZpY2VSR0IpXTsKKyAgICAgICAgW2xheWVyIHNldEJvcmRlcldp
ZHRoOjAuNWZdOworICAgIH0gZWxzZSB7CisgICAgICAgIFtsYXllciBzZXRCb3JkZXJDb2xvcjpu
aWxdOworICAgICAgICBbbGF5ZXIgc2V0Qm9yZGVyV2lkdGg6MF07CisgICAgfQorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRiODUxZGM4YjY1MTdhNTM2
NzM1YzYzZTZlYThjOWFlMGRjYWUwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBUaWxlTGF5ZXJfaAorI2RlZmluZSBUaWxlTGF5ZXJfaAorCisjaWYgUExBVEZPUk0o
SU9TKQorCisjaW5jbHVkZSA8UXVhcnR6Q29yZS9DQUxheWVyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIFRpbGVHcmlkOworfTsKKworQGludGVyZmFjZSBUaWxlTGF5ZXIgOiBDQUxh
eWVyIHsKKyAgICBXZWJDb3JlOjpUaWxlR3JpZCogX3RpbGVHcmlkOworICAgIHVuc2lnbmVkIF9w
YWludENvdW50OworfQorQHByb3BlcnR5IChub25hdG9taWMpIHVuc2lnbmVkIHBhaW50Q291bnQ7
CitAcHJvcGVydHkgKG5vbmF0b21pYykgV2ViQ29yZTo6VGlsZUdyaWQqIHRpbGVHcmlkOworKyAo
VGlsZUxheWVyICopbGF5ZXJCZWluZ1BhaW50ZWQ7CitAZW5kCisKK0BpbnRlcmZhY2UgVGlsZUhv
c3RMYXllciA6IENBTGF5ZXIgeworICAgIFdlYkNvcmU6OlRpbGVHcmlkKiBfdGlsZUdyaWQ7Cit9
CistIChpZClpbml0V2l0aFRpbGVHcmlkOihXZWJDb3JlOjpUaWxlR3JpZCopdGlsZUdyaWQ7CitA
ZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisjZW5kaWYgLy8gVGlsZUxheWVyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXIubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyOGJlYzg1
ZTdlOWZjYzY1NTlkNTZmMzViNDljM2JjMTA1MGM2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyLm1tCkBAIC0wLDAgKzEsMTAzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRpbGVMYXllci5oIgor
CisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiVGlsZUNhY2hlLmgiCisjaW5jbHVkZSAi
VGlsZUdyaWQuaCIKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCisKK0BpbXBsZW1lbnRhdGlv
biBUaWxlSG9zdExheWVyCistIChpZClpbml0V2l0aFRpbGVHcmlkOihXZWJDb3JlOjpUaWxlR3Jp
ZCopdGlsZUdyaWQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfdGlsZUdyaWQgPSB0aWxlR3JpZDsKKyAgICBbc2Vs
ZiBzZXRBbmNob3JQb2ludDpDR1BvaW50WmVyb107CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KGlkPENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5Cit7CisgICAgVU5VU0VE
X1BBUkFNKGtleSk7CisgICAgLy8gRGlzYWJsZSBhbGwgZGVmYXVsdCBhY3Rpb25zCisgICAgcmV0
dXJuIG5pbDsKK30KKworLSAodm9pZClyZW5kZXJJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250
ZXh0Cit7CisgICAgaWYgKHB0aHJlYWRfbWFpbl9ucCgpKQorICAgICAgICBXZWJUaHJlYWRMb2Nr
KCk7CisgICAgX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+ZG9MYXlvdXRUaWxlcygpOworICAgIFtz
dXBlciByZW5kZXJJbkNvbnRleHQ6Y29udGV4dF07Cit9CitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBUaWxlTGF5ZXIKK0BzeW50aGVzaXplIHBhaW50Q291bnQgPSBfcGFpbnRDb3VudDsKK0BzeW50
aGVzaXplIHRpbGVHcmlkID0gX3RpbGVHcmlkOworCitzdGF0aWMgVGlsZUxheWVyICpsYXllckJl
aW5nUGFpbnRlZDsKKworLSAodm9pZClzZXROZWVkc0Rpc3BsYXlJblJlY3Q6KENHUmVjdClyZWN0
Cit7CisgICAgW3NlbGYgc2V0TmVlZHNMYXlvdXRdOworICAgIFtzdXBlciBzZXROZWVkc0Rpc3Bs
YXlJblJlY3Q6cmVjdF07Cit9CisKKy0gKHZvaWQpbGF5b3V0U3VibGF5ZXJzCit7CisgICAgaWYg
KHB0aHJlYWRfbWFpbl9ucCgpKQorICAgICAgICBXZWJUaHJlYWRMb2NrKCk7CisgICAgLy8gVGhp
cyBtYXkgdHJpZ2dlciBXZWJLaXQgbGF5b3V0IGFuZCBnZW5lcmF0ZSBtb3JlIHJlcGFpbnQgcmVj
dHMuCisgICAgaWYgKF90aWxlR3JpZCkKKyAgICAgICAgX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+
cHJlcGFyZVRvRHJhdygpOworfQorCistICh2b2lkKWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJl
Ziljb250ZXh0Cit7CisgICAgaWYgKF90aWxlR3JpZCkKKyAgICAgICAgX3RpbGVHcmlkLT50aWxl
Q2FjaGUoKS0+ZHJhd0xheWVyKHNlbGYsIGNvbnRleHQpOworfQorCistIChpZDxDQUFjdGlvbj4p
YWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtleQoreworICAgIFVOVVNFRF9QQVJBTShrZXkpOwor
ICAgIC8vIERpc2FibGUgYWxsIGRlZmF1bHQgYWN0aW9ucworICAgIHJldHVybiBuaWw7Cit9CisK
KysgKFRpbGVMYXllciAqKWxheWVyQmVpbmdQYWludGVkCit7CisgICAgcmV0dXJuIGxheWVyQmVp
bmdQYWludGVkOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVMYXllclBvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYjMxZDdi
NjQ0ZTVlYWJjNjA0MDhlMTBhYzQyMjAzMGYyNGJjMmIyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVMYXllclBvb2wuaApAQCAtMCwwICsxLDkwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBUaWxlTGF5ZXJQb29sX2gKKyNkZWZpbmUgVGlsZUxheWVy
UG9vbF9oCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5j
bHVkZSAiSW50U2l6ZUhhc2guaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9E
ZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCitAY2xhc3MgVGlsZUxheWVyOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRp
bGVMYXllclBvb2wgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGVMYXllclBvb2wpOwor
cHVibGljOgorICAgIHN0YXRpYyBUaWxlTGF5ZXJQb29sKiBzaGFyZWRQb29sKCk7CisKKyAgICB2
b2lkIGFkZExheWVyKGNvbnN0IFJldGFpblB0cjxUaWxlTGF5ZXI+Jik7CisgICAgUmV0YWluUHRy
PFRpbGVMYXllcj4gdGFrZUxheWVyV2l0aFNpemUoY29uc3QgSW50U2l6ZSYpOworCisgICAgLy8g
VGhlIG1heGltdW0gc2l6ZSBvZiBhbGwgcXVldWVkIGxheWVycyBpbiBieXRlcy4KKyAgICB1bnNp
Z25lZCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWNpdHk7IH0KKyAgICB2b2lkIHNl
dENhcGFjaXR5KHVuc2lnbmVkKTsKKyAgICB2b2lkIGRyYWluKCk7CisKKyAgICB1bnNpZ25lZCBk
ZWNheWVkQ2FwYWNpdHkoKSBjb25zdDsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBieXRlc0JhY2tp
bmdMYXllcldpdGhQaXhlbFNpemUoY29uc3QgSW50U2l6ZSYpOworCitwcml2YXRlOgorICAgIFRp
bGVMYXllclBvb2woKTsKKworICAgIHR5cGVkZWYgRGVxdWU8UmV0YWluUHRyPFRpbGVMYXllcj4g
PiBMYXllckxpc3Q7CisKKyAgICBib29sIGNhblJldXNlTGF5ZXJXaXRoU2l6ZShjb25zdCBJbnRT
aXplJiBzaXplKSBjb25zdCB7IHJldHVybiBtX2NhcGFjaXR5ICYmICFzaXplLmlzRW1wdHkoKTsg
fQorICAgIHZvaWQgc2NoZWR1bGVQcnVuZSgpOworICAgIHZvaWQgcHJ1bmUoKTsKKyAgICB0eXBl
ZGVmIGVudW0geyBMZWF2ZVVuY2hhbmdlZCwgTWFya0FzVXNlZCB9IEFjY2Vzc1R5cGU7CisgICAg
TGF5ZXJMaXN0JiBsaXN0T2ZMYXllcnNXaXRoU2l6ZShjb25zdCBJbnRTaXplJiwgQWNjZXNzVHlw
ZSA9IExlYXZlVW5jaGFuZ2VkKTsKKworICAgIEhhc2hNYXA8SW50U2l6ZSwgTGF5ZXJMaXN0PiBt
X3JldXNlTGlzdHM7CisgICAgLy8gT3JkZXJlZCBieSByZWNlbnQgdXNlLiBUaGUgbGFzdCBzaXpl
IGlzIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQuCisgICAgVmVjdG9yPEludFNpemU+IG1fc2l6ZXNJ
blBydW5lT3JkZXI7CisgICAgdW5zaWduZWQgbV90b3RhbEJ5dGVzOworICAgIHVuc2lnbmVkIG1f
Y2FwYWNpdHk7CisgICAgTXV0ZXggbV9sYXllclBvb2xNdXRleDsKKworICAgIGRvdWJsZSBtX2xh
c3RBZGRUaW1lOworICAgIGJvb2wgbV9uZWVkc1BydW5lOworCisgICAgZnJpZW5kIE5ldmVyRGVz
dHJveWVkPFRpbGVMYXllclBvb2w+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorI2VuZGlmIC8vIFRpbGVMYXllclBvb2xfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVMYXllclBvb2wubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZWM0
OTBjNWM4OTg1YjgyYjQ2Y2I0ZWI4YjU2YWEwMmYyNjczYzEzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVMYXllclBvb2wubW0KQEAgLTAsMCArMSwx
NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGlsZUxh
eWVyUG9vbC5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgor
I2luY2x1ZGUgIk1lbW9yeVByZXNzdXJlSGFuZGxlci5oIgorI2luY2x1ZGUgIlRpbGVMYXllci5o
IgorI2luY2x1ZGUgIlRpbGVHcmlkLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Cisj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIGNvbnN0IGRvdWJsZSBjYXBhY2l0eURlY2F5VGltZSA9IDU7CisKK1RpbGVMYXllclBv
b2w6OlRpbGVMYXllclBvb2woKQorICAgIDogbV90b3RhbEJ5dGVzKDApCisgICAgLCBtX2NhcGFj
aXR5KDApCisgICAgLCBtX2xhc3RBZGRUaW1lKDApCisgICAgLCBtX25lZWRzUHJ1bmUoZmFsc2Up
Cit7Cit9CisKK1RpbGVMYXllclBvb2wqIFRpbGVMYXllclBvb2w6OnNoYXJlZFBvb2woKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaWxlTGF5ZXJQb29sPiBzaGFyZWRQb29sOworICAg
IHJldHVybiAmc2hhcmVkUG9vbC5nZXQoKTsKK30KKwordW5zaWduZWQgVGlsZUxheWVyUG9vbDo6
Ynl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7Cisg
ICAgcmV0dXJuIHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiA0OworfQorCitUaWxlTGF5
ZXJQb29sOjpMYXllckxpc3QmIFRpbGVMYXllclBvb2w6Omxpc3RPZkxheWVyc1dpdGhTaXplKGNv
bnN0IEludFNpemUmIHNpemUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKK3sKKyAgICBBU1NFUlQo
IW1fbGF5ZXJQb29sTXV0ZXgudHJ5TG9jaygpKTsKKyAgICBIYXNoTWFwPEludFNpemUsIExheWVy
TGlzdD46Oml0ZXJhdG9yIGl0ID0gbV9yZXVzZUxpc3RzLmZpbmQoc2l6ZSk7CisgICAgaWYgKGl0
ID09IG1fcmV1c2VMaXN0cy5lbmQoKSkgeworICAgICAgICBpdCA9IG1fcmV1c2VMaXN0cy5hZGQo
c2l6ZSwgTGF5ZXJMaXN0KCkpLml0ZXJhdG9yOworICAgICAgICBtX3NpemVzSW5QcnVuZU9yZGVy
LmFwcGVuZChzaXplKTsKKyAgICB9IGVsc2UgaWYgKGFjY2Vzc1R5cGUgPT0gTWFya0FzVXNlZCkg
eworICAgICAgICBtX3NpemVzSW5QcnVuZU9yZGVyLnJlbW92ZShtX3NpemVzSW5QcnVuZU9yZGVy
LnJldmVyc2VGaW5kKHNpemUpKTsKKyAgICAgICAgbV9zaXplc0luUHJ1bmVPcmRlci5hcHBlbmQo
c2l6ZSk7CisgICAgfQorICAgIHJldHVybiBpdC0+dmFsdWU7Cit9CisKK3ZvaWQgVGlsZUxheWVy
UG9vbDo6YWRkTGF5ZXIoY29uc3QgUmV0YWluUHRyPFRpbGVMYXllcj4mIGxheWVyKQoreworICAg
IEludFNpemUgbGF5ZXJTaXplKFtsYXllci5nZXQoKSBmcmFtZV0uc2l6ZSk7CisgICAgbGF5ZXJT
aXplLnNjYWxlKFtsYXllci5nZXQoKSBjb250ZW50c1NjYWxlXSk7CisgICAgaWYgKCFjYW5SZXVz
ZUxheWVyV2l0aFNpemUobGF5ZXJTaXplKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1l
bW9yeVByZXNzdXJlSGFuZGxlcigpLmhhc1JlY2VpdmVkTWVtb3J5UHJlc3N1cmUoKSkgeworICAg
ICAgICBMT0coTWVtb3J5UHJlc3N1cmUsICJVbmRlciBtZW1vcnkgcHJlc3N1cmU6ICVzLCB0b3Rh
bEJ5dGVzOiAlZCIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIG1fdG90YWxCeXRlcyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9sYXllclBvb2xNdXRl
eCk7CisgICAgbGlzdE9mTGF5ZXJzV2l0aFNpemUobGF5ZXJTaXplKS5wcmVwZW5kKGxheWVyKTsK
KyAgICBtX3RvdGFsQnl0ZXMgKz0gYnl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKGxheWVy
U2l6ZSk7CisKKyAgICBtX2xhc3RBZGRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBzY2hlZHVs
ZVBydW5lKCk7Cit9CisKK1JldGFpblB0cjxUaWxlTGF5ZXI+IFRpbGVMYXllclBvb2w6OnRha2VM
YXllcldpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKCFjYW5SZXVzZUxh
eWVyV2l0aFNpemUoc2l6ZSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbGF5ZXJQb29sTXV0ZXgpOworICAgIExheWVyTGlzdCYgcmV1c2VMaXN0ID0gbGlz
dE9mTGF5ZXJzV2l0aFNpemUoc2l6ZSwgTWFya0FzVXNlZCk7CisgICAgaWYgKHJldXNlTGlzdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgbV90b3RhbEJ5dGVzIC09IGJ5dGVz
QmFja2luZ0xheWVyV2l0aFBpeGVsU2l6ZShzaXplKTsKKyAgICByZXR1cm4gcmV1c2VMaXN0LnRh
a2VGaXJzdCgpOworfQorCit2b2lkIFRpbGVMYXllclBvb2w6OnNldENhcGFjaXR5KHVuc2lnbmVk
IGNhcGFjaXR5KQoreworICAgIE11dGV4TG9ja2VyIHJldXNlTG9ja2VyKG1fbGF5ZXJQb29sTXV0
ZXgpOworICAgIGlmIChjYXBhY2l0eSA8IG1fY2FwYWNpdHkpCisgICAgICAgIHNjaGVkdWxlUHJ1
bmUoKTsKKyAgICBtX2NhcGFjaXR5ID0gY2FwYWNpdHk7Cit9CisgICAgCit1bnNpZ25lZCBUaWxl
TGF5ZXJQb29sOjpkZWNheWVkQ2FwYWNpdHkoKSBjb25zdAoreworICAgIC8vIERlY2F5IHRvIG9u
ZSBxdWFydGVyIG92ZXIgY2FwYWNpdHlEZWNheVRpbWUKKyAgICBkb3VibGUgdGltZVNpbmNlTGFz
dEFkZCA9IGN1cnJlbnRUaW1lKCkgLSBtX2xhc3RBZGRUaW1lOworICAgIGlmICh0aW1lU2luY2VM
YXN0QWRkID4gY2FwYWNpdHlEZWNheVRpbWUpCisgICAgICAgIHJldHVybiBtX2NhcGFjaXR5IC8g
NDsKKyAgICBmbG9hdCBkZWNheVByb2dlc3MgPSBmbG9hdCh0aW1lU2luY2VMYXN0QWRkIC8gY2Fw
YWNpdHlEZWNheVRpbWUpOworICAgIHJldHVybiBtX2NhcGFjaXR5IC8gNCArIG1fY2FwYWNpdHkg
KiAzIC8gNCAqICgxLmYgLSBkZWNheVByb2dlc3MpOworfQorCit2b2lkIFRpbGVMYXllclBvb2w6
OnNjaGVkdWxlUHJ1bmUoKQoreworICAgIEFTU0VSVCghbV9sYXllclBvb2xNdXRleC50cnlMb2Nr
KCkpOworICAgIGlmIChtX25lZWRzUHJ1bmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX25lZWRz
UHJ1bmUgPSB0cnVlOworICAgIGRpc3BhdGNoX3RpbWVfdCBuZXh0UHJ1bmVUaW1lID0gZGlzcGF0
Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMSAqIE5TRUNfUEVSX1NFQyk7CisgICAgZGlzcGF0
Y2hfYWZ0ZXIobmV4dFBydW5lVGltZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRD
SF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKKyAgICAgICAgcHJ1bmUoKTsKKyAgICB9
KTsKK30KKwordm9pZCBUaWxlTGF5ZXJQb29sOjpwcnVuZSgpCit7CisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbGF5ZXJQb29sTXV0ZXgpOworICAgIEFTU0VSVChtX25lZWRzUHJ1bmUpOworICAg
IG1fbmVlZHNQcnVuZSA9IGZhbHNlOworICAgIHVuc2lnbmVkIHNocmlua1RvID0gZGVjYXllZENh
cGFjaXR5KCk7CisgICAgd2hpbGUgKG1fdG90YWxCeXRlcyA+IHNocmlua1RvKSB7CisgICAgICAg
IEFTU0VSVCghbV9zaXplc0luUHJ1bmVPcmRlci5pc0VtcHR5KCkpOworICAgICAgICBJbnRTaXpl
IHNpemVUb0Ryb3AgPSBtX3NpemVzSW5QcnVuZU9yZGVyLmZpcnN0KCk7CisgICAgICAgIExheWVy
TGlzdCYgb2xkZXN0UmV1c2VMaXN0ID0gbV9yZXVzZUxpc3RzLmZpbmQoc2l6ZVRvRHJvcCktPnZh
bHVlOworICAgICAgICBpZiAob2xkZXN0UmV1c2VMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgbV9yZXVzZUxpc3RzLnJlbW92ZShzaXplVG9Ecm9wKTsKKyAgICAgICAgICAgIG1fc2l6ZXNJ
blBydW5lT3JkZXIucmVtb3ZlKDApOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyNpZiBMT0dfVElMSU5HCisgICAgICAgIE5TTG9nKEAiZHJvcHBpbmcgbGF5ZXIgb2Ygc2l6ZSAl
ZCB4ICVkIiwgc2l6ZVRvRHJvcC53aWR0aCgpLCBzaXplVG9Ecm9wLmhlaWdodCgpKTsKKyNlbmRp
ZgorICAgICAgICBtX3RvdGFsQnl0ZXMgLT0gYnl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXpl
KHNpemVUb0Ryb3ApOworICAgICAgICAvLyBUaGUgbGFzdCBlbGVtZW50IGluIHRoZSBsaXN0IGlz
IHRoZSBvbGRlc3QsIGhlbmNlIG1vc3QgbGlrZWx5IG5vdCB0bworICAgICAgICAvLyBzdGlsbCBo
YXZlIGEgYmFja2luZyBzdG9yZS4KKyAgICAgICAgb2xkZXN0UmV1c2VMaXN0LnJlbW92ZUxhc3Qo
KTsKKyAgICB9CisgICAgaWYgKGN1cnJlbnRUaW1lKCkgLSBtX2xhc3RBZGRUaW1lIDw9IGNhcGFj
aXR5RGVjYXlUaW1lKQorICAgICAgICBzY2hlZHVsZVBydW5lKCk7Cit9CisKK3ZvaWQgVGlsZUxh
eWVyUG9vbDo6ZHJhaW4oKQoreworICAgIE11dGV4TG9ja2VyIHJldXNlTG9ja2VyKG1fbGF5ZXJQ
b29sTXV0ZXgpOworICAgIG1fcmV1c2VMaXN0cy5jbGVhcigpOworICAgIG1fc2l6ZXNJblBydW5l
T3JkZXIuY2xlYXIoKTsKKyAgICBtX3RvdGFsQnl0ZXMgPSAwOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlTW90aW9uTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmZDA5
MTM3NmI5ZTY0NTQ4MGY0ZWJiOTgwN2MwNDBjZTI2NjI0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZU1vdGlvbk1hbmFnZXIuaApAQCAtMCww
ICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgV2ViQ29yZU1vdGlvbk1hbmFnZXJfaAorI2RlZmluZSBXZWJDb3JlTW90aW9uTWFu
YWdlcl9oCisKKyNpbXBvcnQgIkRldmljZU1vdGlvbkNsaWVudElPUy5oIgorI2ltcG9ydCAiRGV2
aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCIKKyNpbXBvcnQgPENvcmVMb2NhdGlvbi9Db3JlTG9j
YXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorCisjaWYgUExBVEZPUk0o
SU9TKQorCisjaW1wb3J0IDxDb3JlTW90aW9uL0NvcmVNb3Rpb24uaD4KKworY29uc3QgZmxvYXQg
a01vdGlvblVwZGF0ZUludGVydmFsID0gMC4wNWY7CisKK0BpbnRlcmZhY2UgV2ViQ29yZU1vdGlv
bk1hbmFnZXIgOiBOU09iamVjdCB7CisgICAgQ01Nb3Rpb25NYW5hZ2VyKiBtX21vdGlvbk1hbmFn
ZXI7CisgICAgQ0xMb2NhdGlvbk1hbmFnZXIqIG1fbG9jYXRpb25NYW5hZ2VyOworICAgIEhhc2hT
ZXQ8V2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TKj4gbV9kZXZpY2VNb3Rpb25DbGllbnRz
OworICAgIEhhc2hTZXQ8V2ViQ29yZTo6RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MqPiBtX2Rl
dmljZU9yaWVudGF0aW9uQ2xpZW50czsKKyAgICBOU1RpbWVyKiBtX3VwZGF0ZVRpbWVyOworICAg
IEJPT0wgbV9neXJvQXZhaWxhYmxlOworICAgIEJPT0wgbV9oZWFkaW5nQXZhaWxhYmxlOworfQor
CisrIChXZWJDb3JlTW90aW9uTWFuYWdlciAqKXNoYXJlZE1hbmFnZXI7CistICh2b2lkKWFkZE1v
dGlvbkNsaWVudDooV2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TICopY2xpZW50OworLSAo
dm9pZClyZW1vdmVNb3Rpb25DbGllbnQ6KFdlYkNvcmU6OkRldmljZU1vdGlvbkNsaWVudElPUyAq
KWNsaWVudDsKKy0gKHZvaWQpYWRkT3JpZW50YXRpb25DbGllbnQ6KFdlYkNvcmU6OkRldmljZU9y
aWVudGF0aW9uQ2xpZW50SU9TICopY2xpZW50OworLSAodm9pZClyZW1vdmVPcmllbnRhdGlvbkNs
aWVudDooV2ViQ29yZTo6RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MgKiljbGllbnQ7CistIChC
T09MKWd5cm9BdmFpbGFibGU7CistIChCT09MKWhlYWRpbmdBdmFpbGFibGU7CitAZW5kCisKKyNl
bmRpZgorCisjZW5kaWYgLy8gV2ViQ29yZU1vdGlvbk1hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjczYTk4MmFkMjY1ZTBhZmU3ZDc0MzhhN2ZmYmIxNjFlNDVkMWMxMjcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZU1vdGlvbk1hbmFnZXIubW0K
QEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJDb3JlTW90aW9uTWFuYWdl
ci5oIgorCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRy
YXMuaCIKKyNpbXBvcnQgPENvcmVMb2NhdGlvbi9Db3JlTG9jYXRpb24uaD4KKyNpbXBvcnQgPG9i
amMvb2JqYy1ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvTWF0aEV4dHJhcy5oPgorI2ltcG9ydCA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIFBMQVRG
T1JNKElPUykKKworI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgorI2ltcG9ydCA8Q29yZU1v
dGlvbi9Db3JlTW90aW9uLmg+CisKKy8vIEdldCBDb3JlTG9jYXRpb24gY2xhc3NlcworU09GVF9M
SU5LX0ZSQU1FV09SSyhDb3JlTG9jYXRpb24pCisKK1NPRlRfTElOS19DTEFTUyhDb3JlTG9jYXRp
b24sIENMTG9jYXRpb25NYW5hZ2VyKQorU09GVF9MSU5LX0NMQVNTKENvcmVMb2NhdGlvbiwgQ0xI
ZWFkaW5nKQorCisvLyBHZXQgQ29yZU1vdGlvbiBjbGFzc2VzCitTT0ZUX0xJTktfRlJBTUVXT1JL
KENvcmVNb3Rpb24pCisKK1NPRlRfTElOS19DTEFTUyhDb3JlTW90aW9uLCBDTU1vdGlvbk1hbmFn
ZXIpCitTT0ZUX0xJTktfQ0xBU1MoQ29yZU1vdGlvbiwgQ01BY2NlbGVyb21ldGVyRGF0YSkKK1NP
RlRfTElOS19DTEFTUyhDb3JlTW90aW9uLCBDTURldmljZU1vdGlvbikKKworc3RhdGljIGNvbnN0
IGRvdWJsZSBrR3Jhdml0eSA9IDkuODA2NjU7CisKK0BpbnRlcmZhY2UgV2ViQ29yZU1vdGlvbk1h
bmFnZXIoUHJpdmF0ZSkKKworLSAodm9pZClpbml0aWFsaXplT25NYWluVGhyZWFkOworLSAodm9p
ZCljaGVja0NsaWVudFN0YXR1czsKKy0gKHZvaWQpdXBkYXRlOworLSAodm9pZClzZW5kQWNjZWxl
cm9tZXRlckRhdGE6KENNQWNjZWxlcm9tZXRlckRhdGEgKiluZXdBY2NlbGVyYXRpb247CistICh2
b2lkKXNlbmRNb3Rpb25EYXRhOihDTURldmljZU1vdGlvbiAqKW5ld01vdGlvbiB3aXRoSGVhZGlu
ZzooQ0xIZWFkaW5nICopbmV3SGVhZGluZzsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2Vi
Q29yZU1vdGlvbk1hbmFnZXIKKworKyAoV2ViQ29yZU1vdGlvbk1hbmFnZXIgKilzaGFyZWRNYW5h
Z2VyCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8V2ViQ29yZU1vdGlvbk1h
bmFnZXI+LCBzaGFyZWRNb3Rpb25NYW5hZ2VyLCAoW1tXZWJDb3JlTW90aW9uTWFuYWdlciBhbGxv
Y10gaW5pdF0pKTsKKyAgICByZXR1cm4gc2hhcmVkTW90aW9uTWFuYWdlci5nZXQoKTsKK30KKwor
LSAoaWQpaW5pdAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKHNlbGYpCisg
ICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpAc2VsZWN0b3IoaW5pdGlh
bGl6ZU9uTWFpblRocmVhZCkgd2l0aE9iamVjdDpuaWwgd2FpdFVudGlsRG9uZTpOT107CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChXZWJDb3JlT2Jq
Q1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChbV2ViQ29yZU1vdGlvbk1hbmFnZXIgY2xh
c3NdLCBzZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFtX3VwZGF0ZVRpbWVy
KTsKKworICAgIGlmIChtX2hlYWRpbmdBdmFpbGFibGUpCisgICAgICAgIFttX2xvY2F0aW9uTWFu
YWdlciBzdG9wVXBkYXRpbmdIZWFkaW5nXTsKKyAgICBbbV9sb2NhdGlvbk1hbmFnZXIgcmVsZWFz
ZV07CisKKyAgICBpZiAobV9neXJvQXZhaWxhYmxlKQorICAgICAgICBbbV9tb3Rpb25NYW5hZ2Vy
IHN0b3BEZXZpY2VNb3Rpb25VcGRhdGVzXTsKKyAgICBlbHNlCisgICAgICAgIFttX21vdGlvbk1h
bmFnZXIgc3RvcEFjY2VsZXJvbWV0ZXJVcGRhdGVzXTsKKyAgICBbbV9tb3Rpb25NYW5hZ2VyIHJl
bGVhc2VdOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKWFkZE1vdGlvbkNs
aWVudDooV2ViQ29yZTo6RGV2aWNlTW90aW9uQ2xpZW50SU9TICopY2xpZW50Cit7CisgICAgbV9k
ZXZpY2VNb3Rpb25DbGllbnRzLmFkZChjbGllbnQpOworICAgIFtzZWxmIGNoZWNrQ2xpZW50U3Rh
dHVzXTsKK30KKworLSAodm9pZClyZW1vdmVNb3Rpb25DbGllbnQ6KFdlYkNvcmU6OkRldmljZU1v
dGlvbkNsaWVudElPUyAqKWNsaWVudAoreworICAgIG1fZGV2aWNlTW90aW9uQ2xpZW50cy5yZW1v
dmUoY2xpZW50KTsKKyAgICBbc2VsZiBjaGVja0NsaWVudFN0YXR1c107Cit9CisKKy0gKHZvaWQp
YWRkT3JpZW50YXRpb25DbGllbnQ6KFdlYkNvcmU6OkRldmljZU9yaWVudGF0aW9uQ2xpZW50SU9T
ICopY2xpZW50Cit7CisgICAgbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudHMuYWRkKGNsaWVudCk7
CisgICAgW3NlbGYgY2hlY2tDbGllbnRTdGF0dXNdOworfQorCistICh2b2lkKXJlbW92ZU9yaWVu
dGF0aW9uQ2xpZW50OihXZWJDb3JlOjpEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUyAqKWNsaWVu
dAoreworICAgIG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzLnJlbW92ZShjbGllbnQpOworICAg
IFtzZWxmIGNoZWNrQ2xpZW50U3RhdHVzXTsKK30KKworLSAoQk9PTClneXJvQXZhaWxhYmxlCit7
CisgICAgcmV0dXJuIG1fZ3lyb0F2YWlsYWJsZTsKK30KKworLSAoQk9PTCloZWFkaW5nQXZhaWxh
YmxlCit7CisgICAgcmV0dXJuIG1faGVhZGluZ0F2YWlsYWJsZTsKK30KKworLSAodm9pZClpbml0
aWFsaXplT25NYWluVGhyZWFkCit7CisgICAgQVNTRVJUKCFXZWJUaHJlYWRJc0N1cnJlbnQoKSk7
CisKKyNkZWZpbmUgQ01Nb3Rpb25NYW5hZ2VyIGdldENNTW90aW9uTWFuYWdlckNsYXNzKCkKKyAg
ICBtX21vdGlvbk1hbmFnZXIgPSBbW0NNTW90aW9uTWFuYWdlciBhbGxvY10gaW5pdF07CisjdW5k
ZWYgQ01Nb3Rpb25NYW5hZ2VyCisKKyAgICBtX2d5cm9BdmFpbGFibGUgPSBtX21vdGlvbk1hbmFn
ZXIuZGV2aWNlTW90aW9uQXZhaWxhYmxlOworCisgICAgaWYgKG1fZ3lyb0F2YWlsYWJsZSkKKyAg
ICAgICAgbV9tb3Rpb25NYW5hZ2VyLmRldmljZU1vdGlvblVwZGF0ZUludGVydmFsID0ga01vdGlv
blVwZGF0ZUludGVydmFsOworICAgIGVsc2UKKyAgICAgICAgbV9tb3Rpb25NYW5hZ2VyLmFjY2Vs
ZXJvbWV0ZXJVcGRhdGVJbnRlcnZhbCA9IGtNb3Rpb25VcGRhdGVJbnRlcnZhbDsKKworI2RlZmlu
ZSBDTExvY2F0aW9uTWFuYWdlciBnZXRDTExvY2F0aW9uTWFuYWdlckNsYXNzKCkKKyAgICBtX2xv
Y2F0aW9uTWFuYWdlciA9IFtbQ0xMb2NhdGlvbk1hbmFnZXIgYWxsb2NdIGluaXRdOworICAgIG1f
aGVhZGluZ0F2YWlsYWJsZSA9IFtDTExvY2F0aW9uTWFuYWdlciBoZWFkaW5nQXZhaWxhYmxlXTsK
KyN1bmRlZiBDTExvY2F0aW9uTWFuYWdlcgorCisgICAgW3NlbGYgY2hlY2tDbGllbnRTdGF0dXNd
OworfQorCistICh2b2lkKWNoZWNrQ2xpZW50U3RhdHVzCit7CisgICAgaWYgKCFwdGhyZWFkX21h
aW5fbnAoKSkgeworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6X2Nt
ZCB3aXRoT2JqZWN0Om5pbCB3YWl0VW50aWxEb25lOk5PXTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFNpbmNlIHRoaXMgbWV0aG9kIGV4ZWN1dGVzIG9uIHRoZSBtYWluIHRocmVh
ZCwgaXQgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQKKyAgICAvLyBhZnRlciB0aGUgaW5pdGlhbGl6
ZU9uTWFpblRocmVhZCBtZXRob2QgaGFzIHJ1biwgYW5kIGhlbmNlIHRoZXJlIHNob3VsZAorICAg
IC8vIGJlIG5vIGNoYW5jZSB0aGF0IG1fbW90aW9uTWFuYWdlciBoYXMgbm90IGJlZW4gY3JlYXRl
ZC4KKyAgICBBU1NFUlQobV9tb3Rpb25NYW5hZ2VyKTsKKworICAgIGlmIChtX2RldmljZU1vdGlv
bkNsaWVudHMuc2l6ZSgpIHx8IG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzLnNpemUoKSkgewor
ICAgICAgICBpZiAobV9neXJvQXZhaWxhYmxlKQorICAgICAgICAgICAgW21fbW90aW9uTWFuYWdl
ciBzdGFydERldmljZU1vdGlvblVwZGF0ZXNdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBb
bV9tb3Rpb25NYW5hZ2VyIHN0YXJ0QWNjZWxlcm9tZXRlclVwZGF0ZXNdOworCisgICAgICAgIGlm
IChtX2hlYWRpbmdBdmFpbGFibGUpCisgICAgICAgICAgICBbbV9sb2NhdGlvbk1hbmFnZXIgc3Rh
cnRVcGRhdGluZ0hlYWRpbmddOworCisgICAgICAgIGlmICghbV91cGRhdGVUaW1lcikgeworICAg
ICAgICAgICAgbV91cGRhdGVUaW1lciA9IFtbTlNUaW1lciBzY2hlZHVsZWRUaW1lcldpdGhUaW1l
SW50ZXJ2YWw6a01vdGlvblVwZGF0ZUludGVydmFsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDpzZWxmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxl
Y3RvcjpAc2VsZWN0b3IodXBkYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86bmlsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0czpZRVNd
IHJldGFpbl07CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBOU1RpbWVyICp0aW1l
ciA9IG1fdXBkYXRlVGltZXI7CisgICAgICAgIG1fdXBkYXRlVGltZXIgPSBuaWw7CisgICAgICAg
IFt0aW1lciBpbnZhbGlkYXRlXTsKKyAgICAgICAgW3RpbWVyIHJlbGVhc2VdOworCisgICAgICAg
IGlmIChtX2d5cm9BdmFpbGFibGUpCisgICAgICAgICAgICBbbV9tb3Rpb25NYW5hZ2VyIHN0b3BE
ZXZpY2VNb3Rpb25VcGRhdGVzXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW21fbW90aW9u
TWFuYWdlciBzdG9wQWNjZWxlcm9tZXRlclVwZGF0ZXNdOworCisgICAgICAgIGlmIChtX2hlYWRp
bmdBdmFpbGFibGUpCisgICAgICAgICAgICBbbV9sb2NhdGlvbk1hbmFnZXIgc3RvcFVwZGF0aW5n
SGVhZGluZ107CisgICAgfQorfQorCistICh2b2lkKXVwZGF0ZQoreworICAgIC8vIEl0J3MgZXh0
cmVtZWx5IHVubGlrZWx5IHRoYXQgYW4gdXBkYXRlIGhhcHBlbnMgd2l0aG91dCBhbiBhY3RpdmUK
KyAgICAvLyBtb3Rpb24gb3IgbG9jYXRpb24gbWFuYWdlciwgYnV0IHdlIHNob3VsZCBndWFyZCBm
b3IgdGhpcyBjYXNlIGp1c3QgaW4gY2FzZS4KKyAgICBpZiAoIW1fbW90aW9uTWFuYWdlciB8fCAh
bV9sb2NhdGlvbk1hbmFnZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBXZSBzaG91
bGQsIGhvd2V2ZXIsIGd1YXJkIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgbWFuYWdlcnMgcmV0dXJu
IG5pbCBkYXRhLgorICAgIENNRGV2aWNlTW90aW9uICpkZXZpY2VNb3Rpb24gPSBtX21vdGlvbk1h
bmFnZXIuZGV2aWNlTW90aW9uOworICAgIGlmIChtX2d5cm9BdmFpbGFibGUgJiYgZGV2aWNlTW90
aW9uKQorICAgICAgICBbc2VsZiBzZW5kTW90aW9uRGF0YTpkZXZpY2VNb3Rpb24gd2l0aEhlYWRp
bmc6bV9sb2NhdGlvbk1hbmFnZXIuaGVhZGluZ107CisgICAgZWxzZSB7CisgICAgICAgIGlmIChD
TUFjY2VsZXJvbWV0ZXJEYXRhICphY2NlbGVyb21ldGVyRGF0YSA9IG1fbW90aW9uTWFuYWdlci5h
Y2NlbGVyb21ldGVyRGF0YSkKKyAgICAgICAgICAgIFtzZWxmIHNlbmRBY2NlbGVyb21ldGVyRGF0
YTphY2NlbGVyb21ldGVyRGF0YV07CisgICAgfQorfQorCistICh2b2lkKXNlbmRBY2NlbGVyb21l
dGVyRGF0YTooQ01BY2NlbGVyb21ldGVyRGF0YSAqKW5ld0FjY2VsZXJhdGlvbgoreworICAgIFdl
YlRocmVhZFJ1biheeworICAgICAgICBDTUFjY2VsZXJhdGlvbiBhY2NlbCA9IG5ld0FjY2VsZXJh
dGlvbi5hY2NlbGVyYXRpb247CisKKyAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkRldmljZU1vdGlv
bkNsaWVudElPUyo+IGNsaWVudHM7CisgICAgICAgIGNvcHlUb1ZlY3RvcihtX2RldmljZU1vdGlv
bkNsaWVudHMsIGNsaWVudHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsaWVu
dHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjbGllbnRzW2ldLT5tb3Rpb25DaGFuZ2VkKDAs
IDAsIDAsIGFjY2VsLnggKiBrR3Jhdml0eSwgYWNjZWwueSAqIGtHcmF2aXR5LCBhY2NlbC56ICog
a0dyYXZpdHksIDAsIDAsIDApOworICAgIH0pOworfQorCistICh2b2lkKXNlbmRNb3Rpb25EYXRh
OihDTURldmljZU1vdGlvbiAqKW5ld01vdGlvbiB3aXRoSGVhZGluZzooQ0xIZWFkaW5nICopbmV3
SGVhZGluZworeworICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICAvLyBBY2NlbGVyYXRpb24g
aXMgdXNlciArIGdyYXZpdHkKKyAgICAgICAgQ01BY2NlbGVyYXRpb24gdXNlckFjY2VsID0gbmV3
TW90aW9uLnVzZXJBY2NlbGVyYXRpb247CisgICAgICAgIENNQWNjZWxlcmF0aW9uIGdyYXZpdHkg
PSBuZXdNb3Rpb24uZ3Jhdml0eTsKKyAgICAgICAgQ01BY2NlbGVyYXRpb24gdG90YWxBY2NlbDsK
KyAgICAgICAgdG90YWxBY2NlbC54ID0gdXNlckFjY2VsLnggKyBncmF2aXR5Lng7CisgICAgICAg
IHRvdGFsQWNjZWwueSA9IHVzZXJBY2NlbC55ICsgZ3Jhdml0eS55OworICAgICAgICB0b3RhbEFj
Y2VsLnogPSB1c2VyQWNjZWwueiArIGdyYXZpdHkuejsKKworICAgICAgICBDTVJvdGF0aW9uUmF0
ZSByb3RhdGlvblJhdGUgPSBuZXdNb3Rpb24ucm90YXRpb25SYXRlOworCisgICAgICAgIFZlY3Rv
cjxXZWJDb3JlOjpEZXZpY2VNb3Rpb25DbGllbnRJT1MqPiBtb3Rpb25DbGllbnRzOworICAgICAg
ICBjb3B5VG9WZWN0b3IobV9kZXZpY2VNb3Rpb25DbGllbnRzLCBtb3Rpb25DbGllbnRzKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtb3Rpb25DbGllbnRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICBtb3Rpb25DbGllbnRzW2ldLT5tb3Rpb25DaGFuZ2VkKHVzZXJBY2NlbC54
ICoga0dyYXZpdHksIHVzZXJBY2NlbC55ICoga0dyYXZpdHksIHVzZXJBY2NlbC56ICoga0dyYXZp
dHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQWNj
ZWwueCAqIGtHcmF2aXR5LCB0b3RhbEFjY2VsLnkgKiBrR3Jhdml0eSwgdG90YWxBY2NlbC56ICog
a0dyYXZpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJh
ZDJkZWcocm90YXRpb25SYXRlLngpLCByYWQyZGVnKHJvdGF0aW9uUmF0ZS55KSwgcmFkMmRlZyhy
b3RhdGlvblJhdGUueikpOworICAgICAgICB9CisKKyAgICAgICAgQ01BdHRpdHVkZSogYXR0aXR1
ZGUgPSBuZXdNb3Rpb24uYXR0aXR1ZGU7CisKKyAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkRldmlj
ZU9yaWVudGF0aW9uQ2xpZW50SU9TKj4gb3JpZW50YXRpb25DbGllbnRzOworICAgICAgICBjb3B5
VG9WZWN0b3IobV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudHMsIG9yaWVudGF0aW9uQ2xpZW50cyk7
CisKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBXM0MgRGV2aWNlT3JpZW50YXRpb24gc3BlY2lm
aWNhdGlvbiBsYWJlbHMgdGhlIFggYXhpcworICAgICAgICAvLyBhcyBwYXNzaW5nIGJldHdlZW4g
dGhlIHNpZGVzIG9mIHRoZSBkZXZpY2UsIGFuZCB0aGUgWSBheGlzIGFzIHBhc3NpbmcKKyAgICAg
ICAgLy8gZnJvbSB0b3AgdG8gYm90dG9tIG9mIHRoZSBkZXZpY2UuIENvbnZlbnRpb25hbCBUYWl0
LUJyeWFuIEV1bGVyIGFuZ2xlcworICAgICAgICAvLyBoYXZlIHRoZSBYIGF4aXMgcG9pbnRpbmcg
Zm9yd2FyZCAodGhlIGhlYWRpbmcgb2YgdGhlIGFpcmNyYWZ0LCBmb3IKKyAgICAgICAgLy8gZXhh
bXBsZSksIHdoaWNoIGlzIHdoYXQgeW91IHdvdWxkICJyb2xsIiBhcm91bmQsIGFuZCB3aGF0IHRo
ZSBXM0Mgc2F5cworICAgICAgICAvLyBpcyB0aGUgWSBheGlzLiBVbmZvcnR1bmF0ZWx5IENvcmVN
b3Rpb24gZG9lc24ndCBub3JtYWxpemUgaW4gdGhlCisgICAgICAgIC8vIHNhbWUgb3JkZXIgYXMg
dGhlIFczQyByZXF1ZXN0cywgc28gb3VyIGJldGEgaXMgWy05MCwgOTBdIGFuZCBnYW1tYSBpcwor
ICAgICAgICAvLyBbLTE4MCwgMTgwXS4gRm9yIG1vc3QgcHJhY3RpY2FsIHVzZXMgdGhpcyBpcyBh
Y2NlcHRhYmxlLgorICAgICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk0MTQ0NTk+IE5vcm1h
bGl6ZSBvdXIgRGV2aWNlT3JpZW50YXRpb24gYmV0YS9nYW1tYSBwZXIgc3BlYworCisgICAgICAg
IC8vIFJvdGF0aW9uIGFyb3VuZCB0aGUgWiBheGlzIChwb2ludGluZyB1cCwgbm9ybWFsaXplZCB0
byBbMCwgMzYwXSBkZWcpLgorICAgICAgICBkb3VibGUgYWxwaGEgPSByYWQyZGVnKGF0dGl0dWRl
LnlhdyA+IDAgPyBhdHRpdHVkZS55YXcgOiAoTV9QSSAqIDIgKyBhdHRpdHVkZS55YXcpKTsKKyAg
ICAgICAgLy8gUm90YXRpb24gYXJvdW5kIHRoZSBYIGF4aXMgKHNpZGUgdG8gc2lkZSkuCisgICAg
ICAgIGRvdWJsZSBiZXRhID0gcmFkMmRlZyhhdHRpdHVkZS5waXRjaCk7CisgICAgICAgIC8vIFJv
dGF0aW9uIGFyb3VuZCB0aGUgWSBheGlzICh0b3AgdG8gYm90dG9tKS4KKyAgICAgICAgZG91Ymxl
IGdhbW1hID0gcmFkMmRlZyhhdHRpdHVkZS5yb2xsKTsKKworICAgICAgICBkb3VibGUgaGVhZGlu
ZyA9IChtX2hlYWRpbmdBdmFpbGFibGUgJiYgbmV3SGVhZGluZykgPyBuZXdIZWFkaW5nLm1hZ25l
dGljSGVhZGluZyA6IDA7CisgICAgICAgIGRvdWJsZSBoZWFkaW5nQWNjdXJhY3kgPSAobV9oZWFk
aW5nQXZhaWxhYmxlICYmIG5ld0hlYWRpbmcpID8gbmV3SGVhZGluZy5oZWFkaW5nQWNjdXJhY3kg
OiAtMTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9yaWVudGF0aW9uQ2xpZW50
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG9yaWVudGF0aW9uQ2xpZW50c1tpXS0+b3JpZW50
YXRpb25DaGFuZ2VkKGFscGhhLCBiZXRhLCBnYW1tYSwgaGVhZGluZywgaGVhZGluZ0FjY3VyYWN5
KTsKKyAgICB9KTsKK30KKworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg4YWQ1NWY2NWE5MDhkNDA2YTE5Yzk3NjFjMjViY2FiMTM3MWQ0NDEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViQ29yZVN5c3RlbUludGVyZmFjZUlP
Uy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViQ29yZVN5c3RlbUludGVyZmFj
ZUlPU19oCisjZGVmaW5lIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1NfaAorCisjaW5jbHVkZSA8
QXZhaWxhYmlsaXR5Lmg+CisKK3R5cGVkZWYgZW51bSB7CisgICAgd2tJT1NTeXN0ZW1WZXJzaW9u
XzNfMCA9IF9fSVBIT05FXzNfMCwKKyAgICB3a0lPU1N5c3RlbVZlcnNpb25fNF8yID0gX19JUEhP
TkVfNF8yLAorICAgIHdrSU9TU3lzdGVtVmVyc2lvbl81XzAgPSBfX0lQSE9ORV81XzAsCisgICAg
d2tJT1NTeXN0ZW1WZXJzaW9uXzZfMCA9IF9fSVBIT05FXzZfMCwKK30gd2tJT1NTeXN0ZW1WZXJz
aW9uOworCitib29sIGlvc0V4ZWN1dGFibGVXYXNMaW5rZWRPbk9yQWZ0ZXJWZXJzaW9uKHdrSU9T
U3lzdGVtVmVyc2lvbik7CisKK2V4dGVybiBib29sICgqd2tFeGVjdXRhYmxlV2FzTGlua2VkT25P
ckFmdGVySU9TVmVyc2lvbikoaW50KTsKKworZXh0ZXJuIGJvb2wgKCp3a0lzR0IxODAzMENvbXBs
aWFuY2VSZXF1aXJlZCkodm9pZCk7CisKK2lubGluZSBib29sIGlvc0V4ZWN1dGFibGVXYXNMaW5r
ZWRPbk9yQWZ0ZXJWZXJzaW9uKHdrSU9TU3lzdGVtVmVyc2lvbiB2ZXJzaW9uKQoreworICAgIHJl
dHVybiB3a0V4ZWN1dGFibGVXYXNMaW5rZWRPbk9yQWZ0ZXJJT1NWZXJzaW9uKHZlcnNpb24pOwor
fQorCit0eXBlZGVmIGVudW0geworICAgIHdrRGV2aWNlQ2xhc3NJbnZhbGlkID0gLTEsCisgICAg
d2tEZXZpY2VDbGFzc2lQYWQsCisgICAgd2tEZXZpY2VDbGFzc2lQaG9uZSwKKyAgICB3a0Rldmlj
ZUNsYXNzaVBvZCwKK30gd2tEZXZpY2VDbGFzczsKK2V4dGVybiBpbnQgKCp3a0dldERldmljZUNs
YXNzKSh2b2lkKTsKK2lubGluZSB3a0RldmljZUNsYXNzIGlvc0RldmljZUNsYXNzKHZvaWQpCit7
CisgICAgaW50IGRldmljZUNsYXNzID0gd2tHZXREZXZpY2VDbGFzcygpOworICAgIHN3aXRjaCAo
ZGV2aWNlQ2xhc3MpIHsKKyAgICBjYXNlIHdrRGV2aWNlQ2xhc3NJbnZhbGlkOgorICAgIGNhc2Ug
d2tEZXZpY2VDbGFzc2lQYWQ6CisgICAgY2FzZSB3a0RldmljZUNsYXNzaVBob25lOgorICAgIGNh
c2Ugd2tEZXZpY2VDbGFzc2lQb2Q6CisgICAgICAgIHJldHVybiAod2tEZXZpY2VDbGFzcylkZXZp
Y2VDbGFzczsKKyAgICB9CisgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICByZXR1cm4gd2tEZXZpY2VD
bGFzc0ludmFsaWQ7Cit9CisKK2V4dGVybiBDRlN0cmluZ1JlZiAoKndrR2V0VXNlckFnZW50KSh2
b2lkKTsKK2V4dGVybiBDRlN0cmluZ1JlZiAoKndrR2V0UGxhdGZvcm1OYW1lRm9yTmF2aWdhdG9y
KSh2b2lkKTsKK2V4dGVybiBDRlN0cmluZ1JlZiAoKndrR2V0VmVuZG9yTmFtZUZvck5hdmlnYXRv
cikodm9pZCk7CisKKyNlbmRpZiAvLyBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNl
SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkNvcmVTeXN0ZW1JbnRlcmZh
Y2VJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYWI3NjRhNWU0M2RmYTlmMTdlMzJhOTRmN2IxMGQ0NTA4NDg3
MDA3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJD
b3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJp
Z2h0IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLmgiCisKK3ZvaWQgKCp3a0NBTGF5ZXJFbnVtZXJhdGVSZWN0c0JlaW5nRHJhd25X
aXRoQmxvY2spKENBTGF5ZXIgKiwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIHZvaWQgKF5ibG9jayko
Q0dSZWN0IHJlY3QpKTsKK0JPT0wgKCp3a0NHQ29udGV4dEdldFNob3VsZFNtb290aEZvbnRzKShD
R0NvbnRleHRSZWYpOworQ0dQYXR0ZXJuUmVmICgqd2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VB
bmRUcmFuc2Zvcm0pKENHSW1hZ2VSZWYsIENHQWZmaW5lVHJhbnNmb3JtLCBpbnQpOwordm9pZCAo
KndrQ0dDb250ZXh0UmVzZXRDbGlwKShDR0NvbnRleHRSZWYpOyAKK0NGU3RyaW5nUmVmICgqd2tD
b3B5Q0ZMb2NhbGl6YXRpb25QcmVmZXJyZWROYW1lKShDRlN0cmluZ1JlZik7Cit2b2lkICgqd2tD
bGVhckdseXBoVmVjdG9yKSh2b2lkKiBnbHlwaHMpOworT1NTdGF0dXMgKCp3a0NvbnZlcnRDaGFy
VG9HbHlwaHMpKHZvaWQqIHN0eWxlR3JvdXAsIGNvbnN0IFVuaUNoYXIqLCB1bnNpZ25lZCBudW1D
aGFyYWN0ZXJzLCB2b2lkKiBnbHlwaHMpOworTlNTdHJpbmcqICgqd2tHZXRNSU1FVHlwZUZvckV4
dGVuc2lvbikoTlNTdHJpbmcqKTsKK05TRGF0ZSAqKCp3a0dldE5TVVJMUmVzcG9uc2VMYXN0TW9k
aWZpZWREYXRlKShOU1VSTFJlc3BvbnNlICpyZXNwb25zZSk7Cit2b2lkICgqd2tTZXRCYXNlQ1RN
KShDR0NvbnRleHRSZWYsIENHQWZmaW5lVHJhbnNmb3JtKTsKK3ZvaWQgKCp3a1NldFBhdHRlcm5Q
aGFzZUluVXNlclNwYWNlKShDR0NvbnRleHRSZWYsIENHUG9pbnQgcG9pbnQpOworQ0dBZmZpbmVU
cmFuc2Zvcm0gKCp3a0dldFVzZXJUb0Jhc2VDVE0pKENHQ29udGV4dFJlZik7Citib29sICgqd2tD
R0NvbnRleHRJc1BERkNvbnRleHQpKENHQ29udGV4dFJlZik7Cit2b2lkICgqd2tTZXRVcEZvbnRD
YWNoZSkoKTsKK3ZvaWQgKCp3a1NpZ25hbENGUmVhZFN0cmVhbUVuZCkoQ0ZSZWFkU3RyZWFtUmVm
IHN0cmVhbSk7Cit2b2lkICgqd2tTaWduYWxDRlJlYWRTdHJlYW1IYXNCeXRlcykoQ0ZSZWFkU3Ry
ZWFtUmVmIHN0cmVhbSk7Cit2b2lkICgqd2tTaWduYWxDRlJlYWRTdHJlYW1FcnJvcikoQ0ZSZWFk
U3RyZWFtUmVmIHN0cmVhbSwgQ0ZTdHJlYW1FcnJvciAqZXJyb3IpOworQ0ZSZWFkU3RyZWFtUmVm
ICgqd2tDcmVhdGVDdXN0b21DRlJlYWRTdHJlYW0pKHZvaWQgKigqZm9ybUNyZWF0ZSkoQ0ZSZWFk
U3RyZWFtUmVmLCB2b2lkICopLCAKKyAgICB2b2lkICgqZm9ybUZpbmFsaXplKShDRlJlYWRTdHJl
YW1SZWYsIHZvaWQgKiksIAorICAgIEJvb2xlYW4gKCpmb3JtT3BlbikoQ0ZSZWFkU3RyZWFtUmVm
LCBDRlN0cmVhbUVycm9yICosIEJvb2xlYW4gKiwgdm9pZCAqKSwgCisgICAgQ0ZJbmRleCAoKmZv
cm1SZWFkKShDRlJlYWRTdHJlYW1SZWYsIFVJbnQ4ICosIENGSW5kZXgsIENGU3RyZWFtRXJyb3Ig
KiwgQm9vbGVhbiAqLCB2b2lkICopLCAKKyAgICBCb29sZWFuICgqZm9ybUNhblJlYWQpKENGUmVh
ZFN0cmVhbVJlZiwgdm9pZCAqKSwgCisgICAgdm9pZCAoKmZvcm1DbG9zZSkoQ0ZSZWFkU3RyZWFt
UmVmLCB2b2lkICopLCAKKyAgICB2b2lkICgqZm9ybVNjaGVkdWxlKShDRlJlYWRTdHJlYW1SZWYs
IENGUnVuTG9vcFJlZiwgQ0ZTdHJpbmdSZWYsIHZvaWQgKiksIAorICAgIHZvaWQgKCpmb3JtVW5z
Y2hlZHVsZSkoQ0ZSZWFkU3RyZWFtUmVmLCBDRlJ1bkxvb3BSZWYsIENGU3RyaW5nUmVmLCB2b2lk
ICopLAorICAgIHZvaWQgKmNvbnRleHQpOworTlNTdHJpbmcqICgqd2tDb3B5TlNVUkxSZXNwb25z
ZVN0YXR1c0xpbmUpKE5TVVJMUmVzcG9uc2UqKTsKK3ZvaWQgKCp3a1NldE5TVVJMQ29ubmVjdGlv
bkRlZmVyc0NhbGxiYWNrcykoTlNVUkxDb25uZWN0aW9uICosIEJPT0wpOwordm9pZCAoKndrU2V0
TlNVUkxSZXF1ZXN0U2hvdWxkQ29udGVudFNuaWZmKShOU011dGFibGVVUkxSZXF1ZXN0ICosIEJP
T0wpOworaWQgKCp3a0NyZWF0ZU5TVVJMQ29ubmVjdGlvbkRlbGVnYXRlUHJveHkpKHZvaWQpOwor
dW5zaWduZWQgKCp3a0luaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3Qp
KHVuc2lnbmVkIHByZWZlcnJlZENvbm5lY3Rpb25Db3VudCk7CitpbnQgKCp3a0dldEhUVFBQaXBl
bGluaW5nUHJpb3JpdHkpKENGVVJMUmVxdWVzdFJlZik7Cit2b2lkICgqd2tTZXRIVFRQUGlwZWxp
bmluZ01heGltdW1Qcmlvcml0eSkoaW50IHByaW9yaXR5KTsKK3ZvaWQgKCp3a1NldEhUVFBQaXBl
bGluaW5nUHJpb3JpdHkpKENGVVJMUmVxdWVzdFJlZiwgaW50IHByaW9yaXR5KTsKK3ZvaWQgKCp3
a1NldEhUVFBQaXBlbGluaW5nTWluaW11bUZhc3RMYW5lUHJpb3JpdHkpKGludCBwcmlvcml0eSk7
Cit2b2lkICgqd2tTZXRDT05ORUNUUHJveHlGb3JTdHJlYW0pKENGUmVhZFN0cmVhbVJlZiwgQ0ZT
dHJpbmdSZWYgcHJveHlIb3N0LCBDRk51bWJlclJlZiBwcm94eVBvcnQpOwordm9pZCAoKndrU2V0
Q09OTkVDVFByb3h5QXV0aG9yaXphdGlvbkZvclN0cmVhbSkoQ0ZSZWFkU3RyZWFtUmVmLCBDRlN0
cmluZ1JlZiBwcm94eUF1dGhvcml6YXRpb25TdHJpbmcpOwordm9pZCAoKndrU2V0Q29va2llU3Rv
cmFnZVByaXZhdGVCcm93c2luZ0VuYWJsZWQpKEJPT0wpOworQ0ZIVFRQTWVzc2FnZVJlZiAoKndr
Q29weUNPTk5FQ1RQcm94eVJlc3BvbnNlKShDRlJlYWRTdHJlYW1SZWYsIENGVVJMUmVmIHJlc3Bv
bnNlVVJMLCBDRlN0cmluZ1JlZiBwcm94eUhvc3QsIENGTnVtYmVyUmVmIHByb3h5UG9ydCk7Citi
b29sICgqd2tFeGVjdXRhYmxlV2FzTGlua2VkT25PckFmdGVySU9TVmVyc2lvbikoaW50KTsKK2lu
dCAoKndrR2V0RGV2aWNlQ2xhc3MpKHZvaWQpOworQ0dTaXplICgqd2tHZXRWaWV3cG9ydFNjcmVl
blNpemUpKHZvaWQpOwordm9pZCAoKndrU2V0TGF5ZXJDb250ZW50c1NjYWxlKShDQUxheWVyICop
OworZmxvYXQgKCp3a0dldFNjcmVlblNjYWxlRmFjdG9yKSh2b2lkKTsKK2Jvb2wgKCp3a0lzR0Ix
ODAzMENvbXBsaWFuY2VSZXF1aXJlZCkodm9pZCk7Cit2b2lkICgqd2tDR1BhdGhBZGRSb3VuZGVk
UmVjdCkoQ0dNdXRhYmxlUGF0aFJlZiBwYXRoLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSogbWF0
cml4LCBDR1JlY3QgcmVjdCwgQ0dGbG9hdCBjb3JuZXJXaWR0aCwgQ0dGbG9hdCBjb3JuZXJIZWln
aHQpOyAKK3ZvaWQgKCp3a0NGVVJMUmVxdWVzdEFsbG93QWxsUG9zdENhY2hpbmcpKENGVVJMUmVx
dWVzdFJlZik7CitDRkFycmF5UmVmICgqd2tDb3B5TlNVUkxSZXNwb25zZUNlcnRpZmljYXRlQ2hh
aW4pKE5TVVJMUmVzcG9uc2UqKTsKKworI2lmIFVTRShDRk5FVFdPUkspCitDRkhUVFBDb29raWVT
dG9yYWdlUmVmICgqd2tHZXREZWZhdWx0SFRUUENvb2tpZVN0b3JhZ2UpKCk7CitXS0NGVVJMQ3Jl
ZGVudGlhbFJlZiAoKndrQ29weUNyZWRlbnRpYWxGcm9tQ0ZQZXJzaXN0ZW50U3RvcmFnZSkoQ0ZV
UkxQcm90ZWN0aW9uU3BhY2VSZWYgcHJvdGVjdGlvblNwYWNlKTsKK3ZvaWQgKCp3a1NldENGVVJM
UmVxdWVzdFNob3VsZENvbnRlbnRTbmlmZikoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZiwgYm9vbCk7
CitDRkFycmF5UmVmICgqd2tDRlVSTFJlcXVlc3RDb3B5SFRUUFJlcXVlc3RCb2R5UGFydHMpKENG
VVJMUmVxdWVzdFJlZik7Cit2b2lkICgqd2tDRlVSTFJlcXVlc3RTZXRIVFRQUmVxdWVzdEJvZHlQ
YXJ0cykoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZiwgQ0ZBcnJheVJlZiBib2R5UGFydHMpOwordm9p
ZCAoKndrU2V0UmVxdWVzdFN0b3JhZ2VTZXNzaW9uKShDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmLCBD
Rk11dGFibGVVUkxSZXF1ZXN0UmVmKTsKKyNlbmRpZgorCitib29sICgqd2tHZXRWZXJ0aWNhbEds
eXBoc0ZvckNoYXJhY3RlcnMpKENURm9udFJlZiwgY29uc3QgVW5pQ2hhcltdLCBDR0dseXBoW10s
IHNpemVfdCk7CitDVExpbmVSZWYgKCp3a0NyZWF0ZUNUTGluZVdpdGhVbmlDaGFyUHJvdmlkZXIp
KGNvbnN0IFVuaUNoYXIqICgqcHJvdmlkZSkoQ0ZJbmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRleCog
Y2hhckNvdW50LCBDRkRpY3Rpb25hcnlSZWYqIGF0dHJpYnV0ZXMsIHZvaWQqKSwgdm9pZCAoKmRp
c3Bvc2UpKGNvbnN0IFVuaUNoYXIqIGNoYXJzLCB2b2lkKiksIHZvaWQqKTsKK2Jvb2wgKCp3a0NU
Rm9udFRyYW5zZm9ybUdseXBocykoQ1RGb250UmVmIGZvbnQsIENHR2x5cGggZ2x5cGhzW10sIENH
U2l6ZSBhZHZhbmNlc1tdLCBDRkluZGV4IGNvdW50LCB3a0NURm9udFRyYW5zZm9ybU9wdGlvbnMg
b3B0aW9ucyk7CisKK0NHU2l6ZSAoKndrQ1RSdW5HZXRJbml0aWFsQWR2YW5jZSkoQ1RSdW5SZWYp
OworCitDVFR5cGVzZXR0ZXJSZWYgKCp3a0NyZWF0ZUNUVHlwZXNldHRlcldpdGhVbmlDaGFyUHJv
dmlkZXJBbmRPcHRpb25zKShjb25zdCBVbmlDaGFyKiAoKnByb3ZpZGUpKENGSW5kZXggc3RyaW5n
SW5kZXgsIENGSW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2
b2lkKiksIHZvaWQgKCpkaXNwb3NlKShjb25zdCBVbmlDaGFyKiBjaGFycywgdm9pZCopLCB2b2lk
KiwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpOworCisjaWYgIVBMQVRGT1JNKElPU19TSU1VTEFU
T1IpCitDR0NvbnRleHRSZWYgKCp3a0lPU3VyZmFjZUNvbnRleHRDcmVhdGUpKElPU3VyZmFjZVJl
ZiBzdXJmYWNlLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBDR0NvbG9yU3BhY2VS
ZWYgY29sb3JTcGFjZSk7CitDR0ltYWdlUmVmICgqd2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1h
Z2UpKENHQ29udGV4dFJlZiBjb250ZXh0KTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX1NJTVVM
QVRPUikKKworQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiAoKndrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VT
ZXNzaW9uKShDRlN0cmluZ1JlZik7CitOU1VSTFJlcXVlc3QqICgqd2tDb3B5UmVxdWVzdFdpdGhT
dG9yYWdlU2Vzc2lvbikoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiwgTlNVUkxSZXF1ZXN0Kik7CitD
RkhUVFBDb29raWVTdG9yYWdlUmVmICgqd2tDb3B5SFRUUENvb2tpZVN0b3JhZ2UpKENGVVJMU3Rv
cmFnZVNlc3Npb25SZWYpOwordW5zaWduZWQgKCp3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3kp
KENGSFRUUENvb2tpZVN0b3JhZ2VSZWYpOwordm9pZCAoKndrU2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeSkoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiwgdW5zaWduZWQpOworTlNBcnJheSAqKCp3a0hU
VFBDb29raWVzKShDRkhUVFBDb29raWVTdG9yYWdlUmVmKTsKK05TQXJyYXkgKigqd2tIVFRQQ29v
a2llc0ZvclVSTCkoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiwgTlNVUkwgKik7Cit2b2lkICgqd2tT
ZXRIVFRQQ29va2llc0ZvclVSTCkoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiwgTlNBcnJheSAqLCBO
U1VSTCAqLCBOU1VSTCAqKTsKK3ZvaWQgKCp3a0RlbGV0ZUFsbEhUVFBDb29raWVzKShDRkhUVFBD
b29raWVTdG9yYWdlUmVmKTsKK3ZvaWQgKCp3a0RlbGV0ZUhUVFBDb29raWUpKENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWYsIE5TSFRUUENvb2tpZSAqKTsKKworQ0ZTdHJpbmdSZWYgKCp3a0dldENGVVJM
UmVzcG9uc2VNSU1FVHlwZSkoQ0ZVUkxSZXNwb25zZVJlZik7CitDRlVSTFJlZiAoKndrR2V0Q0ZV
UkxSZXNwb25zZVVSTCkoQ0ZVUkxSZXNwb25zZVJlZik7CitDRkhUVFBNZXNzYWdlUmVmICgqd2tH
ZXRDRlVSTFJlc3BvbnNlSFRUUFJlc3BvbnNlKShDRlVSTFJlc3BvbnNlUmVmKTsKK0NGU3RyaW5n
UmVmICgqd2tDb3B5Q0ZVUkxSZXNwb25zZVN1Z2dlc3RlZEZpbGVuYW1lKShDRlVSTFJlc3BvbnNl
UmVmKTsKK3ZvaWQgKCp3a1NldENGVVJMUmVzcG9uc2VNSU1FVHlwZSkoQ0ZVUkxSZXNwb25zZVJl
ZiwgQ0ZTdHJpbmdSZWYgbWltZVR5cGUpOworCit2b2lkKCp3a0Rlc3Ryb3lSZW5kZXJpbmdSZXNv
dXJjZXMpKHZvaWQpOworCitib29sICgqd2tDYXB0aW9uQXBwZWFyYW5jZUhhc1VzZXJQcmVmZXJl
bmNlcykodm9pZCk7Citib29sICgqd2tDYXB0aW9uQXBwZWFyYW5jZVNob3dDYXB0aW9uc1doZW5B
dmFpbGFibGUpKHZvaWQpOworQ0dDb2xvclJlZigqd2tDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb3Jl
Z3JvdW5kQ29sb3IpKHZvaWQpOworQ0dDb2xvclJlZigqd2tDYXB0aW9uQXBwZWFyYW5jZUNvcHlC
YWNrZ3JvdW5kQ29sb3IpKHZvaWQpOworQ0dDb2xvclJlZigqd2tDYXB0aW9uQXBwZWFyYW5jZUNv
cHlXaW5kb3dDb2xvcikodm9pZCk7Citib29sKCp3a0NhcHRpb25BcHBlYXJhbmNlR2V0Rm9yZWdy
b3VuZE9wYWNpdHkpKENHRmxvYXQqKTsKK2Jvb2woKndrQ2FwdGlvbkFwcGVhcmFuY2VHZXRCYWNr
Z3JvdW5kT3BhY2l0eSkoQ0dGbG9hdCopOworYm9vbCgqd2tDYXB0aW9uQXBwZWFyYW5jZUdldFdp
bmRvd09wYWNpdHkpKENHRmxvYXQqKTsKK0NHRm9udFJlZigqd2tDYXB0aW9uQXBwZWFyYW5jZUNv
cHlGb250Rm9yU3R5bGUpKGludCk7Citib29sKCp3a0NhcHRpb25BcHBlYXJhbmNlR2V0UmVsYXRp
dmVDaGFyYWN0ZXJTaXplKShDR0Zsb2F0Kik7CitpbnQoKndrQ2FwdGlvbkFwcGVhcmFuY2VHZXRU
ZXh0RWRnZVN0eWxlKSh2b2lkKTsKK0NGU3RyaW5nUmVmKCp3a0NhcHRpb25BcHBlYXJhbmNlR2V0
U2V0dGluZ3NDaGFuZ2VkTm90aWZpY2F0aW9uKSh2b2lkKTsKKworI2lmIEVOQUJMRShQVUJMSUNf
U1VGRklYX0xJU1QpCitib29sICgqd2tJc1B1YmxpY1N1ZmZpeCkoTlNTdHJpbmcgKmhvc3QpOwor
I2VuZGlmCisKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorQ0ZTdHJpbmdSZWYgKCp3
a0NhY2hlUGFydGl0aW9uS2V5KSh2b2lkKTsKKyNlbmRpZgorCitDRlN0cmluZ1JlZiAoKndrR2V0
VXNlckFnZW50KSh2b2lkKTsKK0NGU3RyaW5nUmVmICgqd2tHZXRQbGF0Zm9ybU5hbWVGb3JOYXZp
Z2F0b3IpKHZvaWQpOworQ0ZTdHJpbmdSZWYgKCp3a0dldFZlbmRvck5hbWVGb3JOYXZpZ2F0b3Ip
KHZvaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkV2ZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViRXZlbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
ZjgyOTk3ZWZlMjgxZGYzMTI4MjlmOTk1ODJlZGRkMWM0MDA4MDUzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkV2ZW50LmgKQEAgLTAsMCArMSwxOTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBGSVhNRTogUmVuYW1lIHRoaXMgZmlsZSB0byBXZWJFdmVudElP
Uy5oIGFmdGVyIHdlIHVwc3RyZWFtIHRoZSBpT1MgcG9ydC4KKyNpZm5kZWYgV2ViRXZlbnRJT1Nf
aAorI2RlZmluZSBXZWJFdmVudElPU19oCisKKyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3MuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCit0eXBlZGVmIGVu
dW0geworICAgIFdlYkV2ZW50TW91c2VEb3duLAorICAgIFdlYkV2ZW50TW91c2VVcCwKKyAgICBX
ZWJFdmVudE1vdXNlTW92ZWQsCisgICAgCisgICAgV2ViRXZlbnRTY3JvbGxXaGVlbCwKKyAgICAK
KyAgICBXZWJFdmVudEtleURvd24sCisgICAgV2ViRXZlbnRLZXlVcCwKKyAgICAKKyAgICBXZWJF
dmVudFRvdWNoQmVnaW4sCisgICAgV2ViRXZlbnRUb3VjaENoYW5nZSwKKyAgICBXZWJFdmVudFRv
dWNoRW5kLAorICAgIFdlYkV2ZW50VG91Y2hDYW5jZWwKK30gV2ViRXZlbnRUeXBlOworCit0eXBl
ZGVmIGVudW0geworICAgIFdlYkV2ZW50VG91Y2hQaGFzZUJlZ2FuLAorICAgIFdlYkV2ZW50VG91
Y2hQaGFzZU1vdmVkLAorICAgIFdlYkV2ZW50VG91Y2hQaGFzZVN0YXRpb25hcnksCisgICAgV2Vi
RXZlbnRUb3VjaFBoYXNlRW5kZWQsCisgICAgV2ViRXZlbnRUb3VjaFBoYXNlQ2FuY2VsbGVkCit9
IFdlYkV2ZW50VG91Y2hQaGFzZVR5cGU7CisKKy8vIFRoZXNlIGVudW0gdmFsdWVzIGFyZSBjb3Bp
ZWQgZGlyZWN0bHkgZnJvbSBHU0V2ZW50IGZvciBjb21wYXRpYmlsaXR5LgordHlwZWRlZiBlbnVt
IHsKKyAgICBXZWJFdmVudEZsYWdNYXNrQWxwaGFTaGlmdCA9IDB4MDAwMTAwMDAsCisgICAgV2Vi
RXZlbnRGbGFnTWFza1NoaWZ0ICAgICAgPSAweDAwMDIwMDAwLAorICAgIFdlYkV2ZW50RmxhZ01h
c2tDb250cm9sICAgID0gMHgwMDA0MDAwMCwKKyAgICBXZWJFdmVudEZsYWdNYXNrQWx0ZXJuYXRl
ICA9IDB4MDAwODAwMDAsCisgICAgV2ViRXZlbnRGbGFnTWFza0NvbW1hbmQgICAgPSAweDAwMTAw
MDAwLAorfSBXZWJFdmVudEZsYWdWYWx1ZXM7Cit0eXBlZGVmIHVuc2lnbmVkIFdlYkV2ZW50Rmxh
Z3M7CisKKy8vIFRoZXNlIGVudW0gdmFsdWVzIGFyZSBjb3BpZWQgZGlyZWN0bHkgZnJvbSBHU0V2
ZW50IGZvciBjb21wYXRpYmlsaXR5LgordHlwZWRlZiBlbnVtIHsKKyAgICBXZWJFdmVudENoYXJh
Y3RlclNldEFTQ0lJICAgICAgICAgICA9IDAsCisgICAgV2ViRXZlbnRDaGFyYWN0ZXJTZXRTeW1i
b2wgICAgICAgICAgPSAxLAorICAgIFdlYkV2ZW50Q2hhcmFjdGVyU2V0RGluZ2JhdHMgICAgICAg
ID0gMiwKKyAgICBXZWJFdmVudENoYXJhY3RlclNldFVuaWNvZGUgICAgICAgICA9IDI1MywKKyAg
ICBXZWJFdmVudENoYXJhY3RlclNldEZ1bmN0aW9uS2V5cyAgICA9IDI1NCwKK30gV2ViRXZlbnRD
aGFyYWN0ZXJTZXQ7CisKK0BpbnRlcmZhY2UgV2ViRXZlbnQgOiBOU09iamVjdCB7CitAcHJpdmF0
ZQorICAgIFdlYkV2ZW50VHlwZSBfdHlwZTsKKyAgICBDRlRpbWVJbnRlcnZhbCBfdGltZXN0YW1w
OworICAgIAorICAgIENHUG9pbnQgX2xvY2F0aW9uSW5XaW5kb3c7CisgICAgCisgICAgTlNTdHJp
bmcgKl9jaGFyYWN0ZXJzOworICAgIE5TU3RyaW5nICpfY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZp
ZXJzOworICAgIFdlYkV2ZW50RmxhZ3MgX21vZGlmaWVyRmxhZ3M7CisgICAgQk9PTCBfa2V5UmVw
ZWF0aW5nOworICAgIEJPT0wgX3BvcHVwVmFyaWFudDsgLy8gRklYTUU6IHRvIGJlIHJlbW92ZWQK
KyAgICBOU1VJbnRlZ2VyIF9rZXlib2FyZEZsYWdzOworICAgIHVpbnQxNl90IF9rZXlDb2RlOwor
ICAgIEJPT0wgX3RhYktleTsKKyAgICBXZWJFdmVudENoYXJhY3RlclNldCBfY2hhcmFjdGVyU2V0
OworICAgIAorICAgIGZsb2F0IF9kZWx0YVg7CisgICAgZmxvYXQgX2RlbHRhWTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBfdG91Y2hDb3VudDsKKyAgICBOU0FycmF5ICpfdG91Y2hMb2NhdGlvbnM7Cisg
ICAgTlNBcnJheSAqX3RvdWNoSWRlbnRpZmllcnM7CisgICAgTlNBcnJheSAqX3RvdWNoUGhhc2Vz
OworICAgIAorICAgIEJPT0wgX2lzR2VzdHVyZTsKKyAgICBmbG9hdCBfZ2VzdHVyZVNjYWxlOwor
ICAgIGZsb2F0IF9nZXN0dXJlUm90YXRpb247CisKKyAgICBCT09MIF93YXNIYW5kbGVkOworfQor
CistIChXZWJFdmVudCAqKWluaXRXaXRoTW91c2VFdmVudFR5cGU6KFdlYkV2ZW50VHlwZSl0eXBl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RhbXA6KENGVGltZUludGVydmFsKXRp
bWVTdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOihDR1BvaW50KXBv
aW50OworCistIChXZWJFdmVudCAqKWluaXRXaXRoU2Nyb2xsV2hlZWxFdmVudFdpdGhUaW1lU3Rh
bXA6KENGVGltZUludGVydmFsKXRpbWVTdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2F0aW9uOihDR1BvaW50KXBvaW50CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFYOihmbG9hdClkZWx0YVgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YVk6KGZsb2F0KWRl
bHRhWTsKKworLSAoV2ViRXZlbnQgKilpbml0V2l0aFRvdWNoRXZlbnRUeXBlOihXZWJFdmVudFR5
cGUpdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVN0YW1wOihDRlRpbWVJbnRl
cnZhbCl0aW1lU3RhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjooQ0dQ
b2ludClwb2ludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzOihXZWJFdmVu
dEZsYWdzKW1vZGlmaWVycworICAgICAgICAgICAgICAgICAgICAgICAgICB0b3VjaENvdW50Oih1
bnNpZ25lZCl0b3VjaENvdW50CisgICAgICAgICAgICAgICAgICAgICAgdG91Y2hMb2NhdGlvbnM6
KE5TQXJyYXkgKil0b3VjaExvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICB0b3VjaElkZW50
aWZpZXJzOihOU0FycmF5ICopdG91Y2hJZGVudGlmaWVycworICAgICAgICAgICAgICAgICAgICAg
ICAgIHRvdWNoUGhhc2VzOihOU0FycmF5ICopdG91Y2hQaGFzZXMgaXNHZXN0dXJlOihCT09MKWlz
R2VzdHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgZ2VzdHVyZVNjYWxlOihmbG9hdClnZXN0
dXJlU2NhbGUKKyAgICAgICAgICAgICAgICAgICAgIGdlc3R1cmVSb3RhdGlvbjooZmxvYXQpZ2Vz
dHVyZVJvdGF0aW9uOworCisvLyBGSVhNRTogdGhpcyBpcyBkZXByZWNhdGVkLiBJdCB3aWxsIGJl
IHJlbW92ZWQgd2hlbiBVSUtpdCBhZG9wdHMgdGhlIG5ldyBvbmUgYmVsb3cuCistIChXZWJFdmVu
dCAqKWluaXRXaXRoS2V5RXZlbnRUeXBlOihXZWJFdmVudFR5cGUpdHlwZQorICAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVTdGFtcDooQ0ZUaW1lSW50ZXJ2YWwpdGltZVN0YW1wCisgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzOihOU1N0cmluZyAqKWNoYXJhY3RlcnMKKyAgICAg
ICBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM6KE5TU3RyaW5nICopY2hhcmFjdGVyc0lnbm9y
aW5nTW9kaWZpZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzOihXZWJFdmVu
dEZsYWdzKW1vZGlmaWVycworICAgICAgICAgICAgICAgICAgICAgICBpc1JlcGVhdGluZzooQk9P
TClyZXBlYXRpbmcKKyAgICAgICAgICAgICAgICAgICAgaXNQb3B1cFZhcmlhbnQ6KEJPT0wpcG9w
dXBWYXJpYW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb2RlOih1aW50MTZfdClr
ZXlDb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGFiS2V5OihCT09MKXRhYktleQor
ICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlclNldDooV2ViRXZlbnRDaGFyYWN0ZXJTZXQp
Y2hhcmFjdGVyU2V0OworCistIChXZWJFdmVudCAqKWluaXRXaXRoS2V5RXZlbnRUeXBlOihXZWJF
dmVudFR5cGUpdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVTdGFtcDooQ0ZUaW1l
SW50ZXJ2YWwpdGltZVN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzOihO
U1N0cmluZyAqKWNoYXJhY3RlcnMKKyAgICAgICBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM6
KE5TU3RyaW5nICopY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzCisgICAgICAgICAgICAgICAg
ICAgICAgICAgbW9kaWZpZXJzOihXZWJFdmVudEZsYWdzKW1vZGlmaWVycworICAgICAgICAgICAg
ICAgICAgICAgICBpc1JlcGVhdGluZzooQk9PTClyZXBlYXRpbmcKKyAgICAgICAgICAgICAgICAg
ICAgICAgICB3aXRoRmxhZ3M6KE5TVUludGVnZXIpZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtleUNvZGU6KHVpbnQxNl90KWtleUNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXNUYWJLZXk6KEJPT0wpdGFiS2V5CisgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVy
U2V0OihXZWJFdmVudENoYXJhY3RlclNldCljaGFyYWN0ZXJTZXQ7CisKK0Bwcm9wZXJ0eShub25h
dG9taWMsIHJlYWRvbmx5KSBXZWJFdmVudFR5cGUgdHlwZTsKK0Bwcm9wZXJ0eShub25hdG9taWMs
IHJlYWRvbmx5KSBDRlRpbWVJbnRlcnZhbCB0aW1lc3RhbXA7CisKKy8vIE1vdXNlCitAcHJvcGVy
dHkobm9uYXRvbWljLCByZWFkb25seSkgQ0dQb2ludCBsb2NhdGlvbkluV2luZG93OworCisvLyBL
ZXlib2FyZAorQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHksIHJldGFpbikgTlNTdHJpbmcg
KmNoYXJhY3RlcnM7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSwgcmV0YWluKSBOU1N0
cmluZyAqY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOworQHByb3BlcnR5KG5vbmF0b21pYywg
cmVhZG9ubHkpIFdlYkV2ZW50RmxhZ3MgbW9kaWZpZXJGbGFnczsKK0Bwcm9wZXJ0eShub25hdG9t
aWMsIHJlYWRvbmx5LCBnZXR0ZXIgPSBpc0tleVJlcGVhdGluZykgQk9PTCBrZXlSZXBlYXRpbmc7
CisKKy8vIEZJWE1FOiB0aGlzIGlzIGRlcHJlY2F0ZWQuIEl0IHdpbGwgYmUgcmVtb3ZlZCB3aGVu
IFVJS2l0IGFkb3B0cyB0aGUgbmV3IGluaXRXaXRoS2V5RXZlbnRUeXBlLgorQHByb3BlcnR5KG5v
bmF0b21pYywgcmVhZG9ubHksIGdldHRlciA9IGlzUG9wdXBWYXJpYW50KSBCT09MIHBvcHVwVmFy
aWFudDsKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSBOU1VJbnRlZ2VyIGtleWJvYXJk
RmxhZ3M7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgdWludDE2X3Qga2V5Q29kZTsK
K0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXIgPSBpc1RhYktleSkgQk9PTCB0
YWJLZXk7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkgV2ViRXZlbnRDaGFyYWN0ZXJT
ZXQgY2hhcmFjdGVyU2V0OworCisvLyBTY3JvbGwgV2hlZWwKK0Bwcm9wZXJ0eShub25hdG9taWMs
IHJlYWRvbmx5KSBmbG9hdCBkZWx0YVg7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSkg
ZmxvYXQgZGVsdGFZOworCisvLyBUb3VjaAorQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkp
IHVuc2lnbmVkIHRvdWNoQ291bnQ7CitAcHJvcGVydHkobm9uYXRvbWljLCByZWFkb25seSwgcmV0
YWluKSBOU0FycmF5ICp0b3VjaExvY2F0aW9uczsKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRv
bmx5LCByZXRhaW4pIE5TQXJyYXkgKnRvdWNoSWRlbnRpZmllcnM7CitAcHJvcGVydHkobm9uYXRv
bWljLCByZWFkb25seSwgcmV0YWluKSBOU0FycmF5ICp0b3VjaFBoYXNlczsKKworLy8gR2VzdHVy
ZQorQHByb3BlcnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgaXNHZXN0dXJlOworQHByb3Bl
cnR5KG5vbmF0b21pYywgcmVhZG9ubHkpIGZsb2F0IGdlc3R1cmVTY2FsZTsKK0Bwcm9wZXJ0eShu
b25hdG9taWMsIHJlYWRvbmx5KSBmbG9hdCBnZXN0dXJlUm90YXRpb247CisKK0Bwcm9wZXJ0eShu
b25hdG9taWMpIEJPT0wgd2FzSGFuZGxlZDsKKworQGVuZAorCitAaW50ZXJmYWNlIFdlYklPU0V2
ZW50IDogV2ViRXZlbnQKK0BlbmQKKworI2VuZGlmIC8vIFdlYkV2ZW50SU9TX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJFdmVudC5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJFdmVudC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNTU3ODg3MzA3ZTM3ODMx
Njg0MzM2MzlhNDc4Y2YwZDcyOWZmMDkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYkV2ZW50Lm1tCkBAIC0wLDAgKzEsNDk1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRklYTUU6IFJlbmFtZSB0aGlzIGZpbGUgdG8gV2ViRXZlbnRJT1MubW0gYWZ0
ZXIgd2UgdXBzdHJlYW0gdGhlIGlPUyBwb3J0LgorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIldlYkV2ZW50LmgiCisKKyNpbXBvcnQgIktleUV2ZW50Q29jb2EuaCIKKyNpbXBvcnQgPEZv
dW5kYXRpb24vTlNHZW9tZXRyeS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJFdmVudAorCitAc3lu
dGhlc2l6ZSB0eXBlID0gX3R5cGU7CitAc3ludGhlc2l6ZSB0aW1lc3RhbXAgPSBfdGltZXN0YW1w
OworQHN5bnRoZXNpemUgd2FzSGFuZGxlZCA9IF93YXNIYW5kbGVkOworCistIChXZWJFdmVudCAq
KWluaXRXaXRoTW91c2VFdmVudFR5cGU6KFdlYkV2ZW50VHlwZSl0eXBlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aW1lU3RhbXA6KENGVGltZUludGVydmFsKXRpbWVTdGFtcAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOihDR1BvaW50KXBvaW50Cit7CisgICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgCisgICAgX3R5cGUgPSB0eXBlOworICAgIF90aW1lc3RhbXAgPSB0aW1lU3RhbXA7CisKKyAg
ICBfbG9jYXRpb25JbldpbmRvdyA9IHBvaW50OworICAgIAorICAgIHJldHVybiBzZWxmOworfQor
CistIChXZWJFdmVudCAqKWluaXRXaXRoU2Nyb2xsV2hlZWxFdmVudFdpdGhUaW1lU3RhbXA6KENG
VGltZUludGVydmFsKXRpbWVTdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvY2F0aW9uOihDR1BvaW50KXBvaW50CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFYOihmbG9hdClkZWx0YVgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YVk6KGZsb2F0KWRlbHRhWQor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIAorICAgIF90eXBlID0gV2ViRXZlbnRTY3JvbGxXaGVlbDsKKyAgICBfdGlt
ZXN0YW1wID0gdGltZVN0YW1wOworCisgICAgX2xvY2F0aW9uSW5XaW5kb3cgPSBwb2ludDsKKyAg
ICBfZGVsdGFYID0gZGVsdGFYOworICAgIF9kZWx0YVkgPSBkZWx0YVk7CisgICAgCisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKFdlYkV2ZW50ICopaW5pdFdpdGhUb3VjaEV2ZW50VHlwZTooV2Vi
RXZlbnRUeXBlKXR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVTdGFtcDooQ0ZU
aW1lSW50ZXJ2YWwpdGltZVN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRp
b246KENHUG9pbnQpcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczoo
V2ViRXZlbnRGbGFncyltb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdG91Y2hD
b3VudDoodW5zaWduZWQpdG91Y2hDb3VudAorICAgICAgICAgICAgICAgICAgICAgIHRvdWNoTG9j
YXRpb25zOihOU0FycmF5ICopdG91Y2hMb2NhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgdG91
Y2hJZGVudGlmaWVyczooTlNBcnJheSAqKXRvdWNoSWRlbnRpZmllcnMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICB0b3VjaFBoYXNlczooTlNBcnJheSAqKXRvdWNoUGhhc2VzIGlzR2VzdHVyZToo
Qk9PTClpc0dlc3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlc3R1cmVTY2FsZTooZmxv
YXQpZ2VzdHVyZVNjYWxlCisgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlUm90YXRpb246KGZs
b2F0KWdlc3R1cmVSb3RhdGlvbgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3R5cGUgPSB0eXBlOworICAgIF90
aW1lc3RhbXAgPSB0aW1lU3RhbXA7CisgICAgX21vZGlmaWVyRmxhZ3MgPSBtb2RpZmllcnM7CisK
KyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxODUyODQ+IFRvdWNoRXZlbnRzIG1heSBi
ZSBpbiBtb3JlIHRoYW4gb25lIHdpbmRvdyBzb21lIGRheS4KKyAgICBfbG9jYXRpb25JbldpbmRv
dyA9IHBvaW50OworICAgIF90b3VjaENvdW50ID0gdG91Y2hDb3VudDsKKyAgICBfdG91Y2hMb2Nh
dGlvbnMgPSBbdG91Y2hMb2NhdGlvbnMgY29weV07CisgICAgX3RvdWNoSWRlbnRpZmllcnMgPSBb
dG91Y2hJZGVudGlmaWVycyBjb3B5XTsKKyAgICBfdG91Y2hQaGFzZXMgPSBbdG91Y2hQaGFzZXMg
Y29weV07CisgICAgX2lzR2VzdHVyZSA9IGlzR2VzdHVyZTsKKyAgICBfZ2VzdHVyZVNjYWxlID0g
Z2VzdHVyZVNjYWxlOworICAgIF9nZXN0dXJlUm90YXRpb24gPSBnZXN0dXJlUm90YXRpb247CisK
KyAgICByZXR1cm4gc2VsZjsKK30KKworc3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZvckNoYXJD
b2RlSU9TKHVuaWNoYXIgY2hhckNvZGUpCit7CisgICAgLy8gaVBob25lIFNwZWNpZmljIENhc2Vz
CisgICAgLy8gPHJkYXI6Ly83NzA5NDA4PjogV2UgZ2V0IDEwICgnXG4nKSBmcm9tIFVJS2l0IHdo
ZW4gdXNpbmcgdGhlIHNvZnR3YXJlIGtleWJvYXJkCisgICAgaWYgKGNoYXJDb2RlID09IDEwKQor
ICAgICAgICByZXR1cm4gMHgwRDsKKworICAgIC8vIEdlbmVyYWwgQ2FzZQorICAgIHJldHVybiB3
aW5kb3dzS2V5Q29kZUZvckNoYXJDb2RlKGNoYXJDb2RlKTsKK30KKworLSAoV2ViRXZlbnQgKilp
bml0V2l0aEtleUV2ZW50VHlwZTooV2ViRXZlbnRUeXBlKXR5cGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1lU3RhbXA6KENGVGltZUludGVydmFsKXRpbWVTdGFtcAorICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhcmFjdGVyczooTlNTdHJpbmcgKiljaGFyYWN0ZXJzCisgICAgICAgY2hh
cmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOihOU1N0cmluZyAqKWNoYXJhY3RlcnNJZ25vcmluZ01v
ZGlmaWVycworICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczooV2ViRXZlbnRGbGFn
cyltb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgaXNSZXBlYXRpbmc6KEJPT0wpcmVw
ZWF0aW5nCisgICAgICAgICAgICAgICAgICAgIGlzUG9wdXBWYXJpYW50OihCT09MKXBvcHVwVmFy
aWFudAorICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29kZToodWludDE2X3Qpa2V5Q29k
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RhYktleTooQk9PTCl0YWJLZXkKKyAgICAg
ICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJTZXQ6KFdlYkV2ZW50Q2hhcmFjdGVyU2V0KWNoYXJh
Y3RlclNldAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF90eXBlID0gdHlwZTsKKyAgICBfdGltZXN0YW1w
ID0gdGltZVN0YW1wOworCisgICAgX2NoYXJhY3RlcnMgPSBbY2hhcmFjdGVycyByZXRhaW5dOwor
ICAgIF9jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgPSBbY2hhcmFjdGVyc0lnbm9yaW5nTW9k
aWZpZXJzIHJldGFpbl07CisgICAgX21vZGlmaWVyRmxhZ3MgPSBtb2RpZmllcnM7CisgICAgX2tl
eVJlcGVhdGluZyA9IHJlcGVhdGluZzsKKyAgICBfcG9wdXBWYXJpYW50ID0gcG9wdXBWYXJpYW50
OworICAgIF90YWJLZXkgPSB0YWJLZXk7CisgICAgX2NoYXJhY3RlclNldCA9IGNoYXJhY3RlclNl
dDsKKworICAgIGlmIChrZXlDb2RlKQorICAgICAgICBfa2V5Q29kZSA9IHdpbmRvd3NLZXlDb2Rl
Rm9yS2V5Q29kZShrZXlDb2RlKTsKKworICAgIC8vIE5PVEU6IHRoaXMgcHJlc2VydmVzIHRoZSBv
cmlnaW5hbCBzZW1hbnRpY3Mgd2hpY2ggdXNlZCB0aGUKKyAgICAvLyBjaGFyYWN0ZXJzIHN0cmlu
ZyBmb3IgdGhlIGtleUNvZGUuIFRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgaW4gaU9TIDQuMCB0bwor
ICAgIC8vIGFsbG93IHRoZSBjbGllbnQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGEga2V5Q29kZSwg
b3RoZXJ3aXNlIGRlZmF1bHQgdG8KKyAgICAvLyBtYXBwaW5nIHRoZSBjaGFyYWN0ZXJzIHN0cmlu
ZyB0byBhIGtleUNvZGUuCisgICAgLy8gZS5nLiBhZGQgYW4gJ2Vsc2UnIGJlZm9yZSB0aGlzICdp
ZicuCisgICAgaWYgKFtjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgbGVuZ3RoXSA9PSAxKSB7
CisgICAgICAgIHVuaWNoYXIgY2ggPSBbY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIGNoYXJh
Y3RlckF0SW5kZXg6MF07CisgICAgICAgIF9rZXlDb2RlID0gd2luZG93c0tleUNvZGVGb3JDaGFy
Q29kZUlPUyhjaCk7CisgICAgfQorCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKworLSAoV2ViRXZl
bnQgKilpbml0V2l0aEtleUV2ZW50VHlwZTooV2ViRXZlbnRUeXBlKXR5cGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICB0aW1lU3RhbXA6KENGVGltZUludGVydmFsKXRpbWVTdGFtcAorICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyczooTlNTdHJpbmcgKiljaGFyYWN0ZXJzCisgICAg
ICAgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOihOU1N0cmluZyAqKWNoYXJhY3RlcnNJZ25v
cmluZ01vZGlmaWVycworICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczooV2ViRXZl
bnRGbGFncyltb2RpZmllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgaXNSZXBlYXRpbmc6KEJP
T0wpcmVwZWF0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEZsYWdzOihOU1VJbnRl
Z2VyKWZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb2RlOih1aW50MTZfdClr
ZXlDb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGFiS2V5OihCT09MKXRhYktleQor
ICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlclNldDooV2ViRXZlbnRDaGFyYWN0ZXJTZXQp
Y2hhcmFjdGVyU2V0Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX3R5cGUgPSB0eXBlOworICAgIF90aW1l
c3RhbXAgPSB0aW1lU3RhbXA7CisKKyAgICBfY2hhcmFjdGVycyA9IFtjaGFyYWN0ZXJzIHJldGFp
bl07CisgICAgX2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyA9IFtjaGFyYWN0ZXJzSWdub3Jp
bmdNb2RpZmllcnMgcmV0YWluXTsKKyAgICBfbW9kaWZpZXJGbGFncyA9IG1vZGlmaWVyczsKKyAg
ICBfa2V5UmVwZWF0aW5nID0gcmVwZWF0aW5nOworICAgIF9rZXlib2FyZEZsYWdzID0gZmxhZ3M7
CisgICAgX3RhYktleSA9IHRhYktleTsKKyAgICBfY2hhcmFjdGVyU2V0ID0gY2hhcmFjdGVyU2V0
OworICAgIAorICAgIGlmIChrZXlDb2RlKQorICAgICAgICBfa2V5Q29kZSA9IHdpbmRvd3NLZXlD
b2RlRm9yS2V5Q29kZShrZXlDb2RlKTsKKworICAgIC8vIE5PVEU6IHRoaXMgcHJlc2VydmVzIHRo
ZSBvcmlnaW5hbCBzZW1hbnRpY3Mgd2hpY2ggdXNlZCB0aGUgCisgICAgLy8gY2hhcmFjdGVycyBz
dHJpbmcgZm9yIHRoZSBrZXlDb2RlLiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIGluIGlPUyA0LjAg
dG8KKyAgICAvLyBhbGxvdyB0aGUgY2xpZW50IHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBhIGtleUNv
ZGUsIG90aGVyd2lzZSBkZWZhdWx0IHRvIAorICAgIC8vIG1hcHBpbmcgdGhlIGNoYXJhY3RlcnMg
c3RyaW5nIHRvIGEga2V5Q29kZS4KKyAgICAvLyBlLmcuIGFkZCBhbiAnZWxzZScgYmVmb3JlIHRo
aXMgJ2lmJy4KKyAgICBpZiAoW2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyBsZW5ndGhdID09
IDEpIHsKKyAgICAgICAgdW5pY2hhciBjaCA9IFtjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMg
Y2hhcmFjdGVyQXRJbmRleDowXTsKKyAgICAgICAgX2tleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZv
ckNoYXJDb2RlSU9TKGNoKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClkZWFsbG9jCit7CisgICAgW19jaGFyYWN0ZXJzIHJlbGVhc2VdOworICAgIFtfY2hhcmFjdGVy
c0lnbm9yaW5nTW9kaWZpZXJzIHJlbGVhc2VdOworCisgICAgW190b3VjaExvY2F0aW9ucyByZWxl
YXNlXTsKKyAgICBbX3RvdWNoSWRlbnRpZmllcnMgcmVsZWFzZV07CisgICAgW190b3VjaFBoYXNl
cyByZWxlYXNlXTsKKyAgICAKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKE5TU3RyaW5n
ICopX3R5cGVEZXNjcmlwdGlvbgoreworICAgIHN3aXRjaCAoX3R5cGUpIHsKKyAgICAgICAgY2Fz
ZSBXZWJFdmVudE1vdXNlRG93bjoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50TW91c2VE
b3duIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudE1vdXNlVXA6CisgICAgICAgICAgICByZXR1cm4g
QCJXZWJFdmVudE1vdXNlVXAiOworICAgICAgICBjYXNlIFdlYkV2ZW50TW91c2VNb3ZlZDoKKyAg
ICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50TW91c2VNb3ZlZCI7CisgICAgICAgIGNhc2UgV2Vi
RXZlbnRTY3JvbGxXaGVlbDoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50U2Nyb2xsV2hl
ZWwiOworICAgICAgICBjYXNlIFdlYkV2ZW50S2V5RG93bjoKKyAgICAgICAgICAgIHJldHVybiBA
IldlYkV2ZW50S2V5RG93biI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRLZXlVcDoKKyAgICAgICAg
ICAgIHJldHVybiBAIldlYkV2ZW50S2V5VXAiOworICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hC
ZWdpbjoKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50VG91Y2hCZWdpbiI7CisgICAgICAg
IGNhc2UgV2ViRXZlbnRUb3VjaENoYW5nZToKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50
VG91Y2hDaGFuZ2UiOworICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hFbmQ6CisgICAgICAgICAg
ICByZXR1cm4gQCJXZWJFdmVudFRvdWNoRW5kIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNo
Q2FuY2VsOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaENhbmNlbCI7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIEAiVW5rbm93biI7Cit9CisKKy0gKE5TU3RyaW5nICopX21vZGlmZXJGbGFnc0Rl
c2NyaXB0aW9uCit7CisgICAgc3dpdGNoIChfbW9kaWZpZXJGbGFncykgeworICAgICAgICBjYXNl
IFdlYkV2ZW50TW91c2VEb3duOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRNb3VzZURv
d24iOworICAgICAgICBjYXNlIFdlYkV2ZW50TW91c2VVcDoKKyAgICAgICAgICAgIHJldHVybiBA
IldlYkV2ZW50TW91c2VVcCI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRNb3VzZU1vdmVkOgorICAg
ICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRNb3VzZU1vdmVkIjsKKyAgICAgICAgY2FzZSBXZWJF
dmVudFNjcm9sbFdoZWVsOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRTY3JvbGxXaGVl
bCI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRLZXlEb3duOgorICAgICAgICAgICAgcmV0dXJuIEAi
V2ViRXZlbnRLZXlEb3duIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudEtleVVwOgorICAgICAgICAg
ICAgcmV0dXJuIEAiV2ViRXZlbnRLZXlVcCI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaEJl
Z2luOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaEJlZ2luIjsKKyAgICAgICAg
Y2FzZSBXZWJFdmVudFRvdWNoQ2hhbmdlOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRU
b3VjaENoYW5nZSI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaEVuZDoKKyAgICAgICAgICAg
IHJldHVybiBAIldlYkV2ZW50VG91Y2hFbmQiOworICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hD
YW5jZWw6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoQ2FuY2VsIjsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAg
ICByZXR1cm4gQCJVbmtub3duIjsKK30KKworLSAoTlNTdHJpbmcgKilfY2hhcmFjdGVyU2V0RGVz
Y3JpcHRpb24KK3sKKyAgICBzd2l0Y2ggKF9jaGFyYWN0ZXJTZXQpIHsKKyAgICAgICAgY2FzZSBX
ZWJFdmVudENoYXJhY3RlclNldEFTQ0lJOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRD
aGFyYWN0ZXJTZXRBU0NJSSI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRDaGFyYWN0ZXJTZXRTeW1i
b2w6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudENoYXJhY3RlclNldFN5bWJvbCI7Cisg
ICAgICAgIGNhc2UgV2ViRXZlbnRDaGFyYWN0ZXJTZXREaW5nYmF0czoKKyAgICAgICAgICAgIHJl
dHVybiBAIldlYkV2ZW50Q2hhcmFjdGVyU2V0RGluZ2JhdHMiOworICAgICAgICBjYXNlIFdlYkV2
ZW50Q2hhcmFjdGVyU2V0VW5pY29kZToKKyAgICAgICAgICAgIHJldHVybiBAIldlYkV2ZW50Q2hh
cmFjdGVyU2V0VW5pY29kZSI7CisgICAgICAgIGNhc2UgV2ViRXZlbnRDaGFyYWN0ZXJTZXRGdW5j
dGlvbktleXM6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudENoYXJhY3RlclNldEZ1bmN0
aW9uS2V5cyI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisgICAgcmV0dXJuIEAiVW5rbm93biI7Cit9CisKKy0gKE5TU3RyaW5nICop
X3RvdWNoTG9jYXRpb25zRGVzY3JpcHRpb246KE5TQXJyYXkgKilsb2NhdGlvbnMKK3sKKyAgICBC
T09MIHNob3VsZEFkZENvbW1hID0gTk87CisgICAgTlNNdXRhYmxlU3RyaW5nICpkZXNjcmlwdGlv
biA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKyAgICBmb3IgKE5TVmFsdWUgKnZhbHVlIGlu
IGxvY2F0aW9ucykgeworICAgICAgICBDR1BvaW50IHBvaW50ID0gW3ZhbHVlIHBvaW50VmFsdWVd
OworICAgICAgICBbZGVzY3JpcHRpb24gYXBwZW5kRm9ybWF0OkAiJUAoJWYsICVmKSIsIChzaG91
bGRBZGRDb21tYSA/IEAiLCAiIDogQCIiKSwgcG9pbnQueCwgcG9pbnQueV07CisgICAgICAgIHNo
b3VsZEFkZENvbW1hID0gWUVTOworICAgIH0KKyAgICByZXR1cm4gZGVzY3JpcHRpb247Cit9CisK
Ky0gKE5TU3RyaW5nICopX3RvdWNoSWRlbnRpZmllcnNEZXNjcmlwdGlvbgoreworICAgIEJPT0wg
c2hvdWxkQWRkQ29tbWEgPSBOTzsKKyAgICBOU011dGFibGVTdHJpbmcgKmRlc2NyaXB0aW9uID0g
W05TTXV0YWJsZVN0cmluZyBzdHJpbmddOworICAgIGZvciAoTlNOdW1iZXIgKmlkZW50aWZpZXIg
aW4gX3RvdWNoSWRlbnRpZmllcnMpIHsKKyAgICAgICAgW2Rlc2NyaXB0aW9uIGFwcGVuZEZvcm1h
dDpAIiVAJXUiLCAoc2hvdWxkQWRkQ29tbWEgPyBAIiwgIiA6IEAiIiksIFtpZGVudGlmaWVyIHVu
c2lnbmVkSW50VmFsdWVdXTsKKyAgICAgICAgc2hvdWxkQWRkQ29tbWEgPSBZRVM7CisgICAgfQor
ICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKworLSAoTlNTdHJpbmcgKilfdG91Y2hQaGFzZURl
c2NyaXB0aW9uOihXZWJFdmVudFRvdWNoUGhhc2VUeXBlKXBoYXNlCit7CisgICAgc3dpdGNoIChw
aGFzZSkgeworICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hQaGFzZUJlZ2FuOgorICAgICAgICAg
ICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaFBoYXNlQmVnYW4iOworICAgICAgICBjYXNlIFdlYkV2
ZW50VG91Y2hQaGFzZU1vdmVkOgorICAgICAgICAgICAgcmV0dXJuIEAiV2ViRXZlbnRUb3VjaFBo
YXNlTW92ZWQiOworICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hQaGFzZVN0YXRpb25hcnk6Cisg
ICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoUGhhc2VTdGF0aW9uYXJ5IjsKKyAgICAg
ICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VFbmRlZDoKKyAgICAgICAgICAgIHJldHVybiBAIldl
YkV2ZW50VG91Y2hQaGFzZUVuZGVkIjsKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoUGhhc2VD
YW5jZWxsZWQ6CisgICAgICAgICAgICByZXR1cm4gQCJXZWJFdmVudFRvdWNoUGhhc2VDYW5jZWxs
ZWQiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorICAgIHJldHVybiBAIlVua25vd24iOworfQorCistIChOU1N0cmluZyAqKV90b3Vj
aFBoYXNlc0Rlc2NyaXB0aW9uCit7CisgICAgQk9PTCBzaG91bGRBZGRDb21tYSA9IE5POworICAg
IE5TTXV0YWJsZVN0cmluZyAqZGVzY3JpcHRpb24gPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107
CisgICAgZm9yIChOU051bWJlciAqcGhhc2UgaW4gX3RvdWNoUGhhc2VzKSB7CisgICAgICAgIFtk
ZXNjcmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCIlQCVAIiwgKHNob3VsZEFkZENvbW1hID8gQCIsICIg
OiBAIiIpLCBbc2VsZiBfdG91Y2hQaGFzZURlc2NyaXB0aW9uOnN0YXRpY19jYXN0PFdlYkV2ZW50
VG91Y2hQaGFzZVR5cGU+KFtwaGFzZSB1bnNpZ25lZEludFZhbHVlXSldXTsKKyAgICAgICAgc2hv
dWxkQWRkQ29tbWEgPSBZRVM7CisgICAgfQorICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKwor
LSAoTlNTdHJpbmcgKilfZXZlbnREZXNjcmlwdGlvbgoreworICAgIHN3aXRjaCAoX3R5cGUpIHsK
KyAgICAgICAgY2FzZSBXZWJFdmVudE1vdXNlRG93bjoKKyAgICAgICAgY2FzZSBXZWJFdmVudE1v
dXNlVXA6CisgICAgICAgIGNhc2UgV2ViRXZlbnRNb3VzZU1vdmVkOgorICAgICAgICAgICAgcmV0
dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAibG9jYXRpb246ICglZiwgJWYpIiwgX2xv
Y2F0aW9uSW5XaW5kb3cueCwgX2xvY2F0aW9uSW5XaW5kb3cueV07CisgICAgICAgIGNhc2UgV2Vi
RXZlbnRTY3JvbGxXaGVlbDoKKyAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAImxvY2F0aW9uOiAoJWYsICVmKSBkZWx0YVg6ICVmIGRlbHRhWTogJWYiLCBfbG9j
YXRpb25JbldpbmRvdy54LCBfbG9jYXRpb25JbldpbmRvdy55LCBfZGVsdGFYLCBfZGVsdGFZXTsK
KyAgICAgICAgY2FzZSBXZWJFdmVudEtleURvd246CisgICAgICAgIGNhc2UgV2ViRXZlbnRLZXlV
cDoKKyAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImNoYXJz
OiAlQCBjaGFyc05vTW9kaWZpZXJzOiAlQCBmbGFnczogJWQgcmVwZWF0aW5nOiAlZCBrZXlib2Fy
ZEZsYWdzOiAlbHUga2V5Q29kZSAlZCwgaXNUYWI6ICVkIGNoYXJTZXQ6ICVAIiwgX2NoYXJhY3Rl
cnMsIF9jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMsIF9tb2RpZmllckZsYWdzLCBfa2V5UmVw
ZWF0aW5nLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfa2V5Ym9hcmRGbGFncyksIF9rZXlD
b2RlLCBfdGFiS2V5LCBbc2VsZiBfY2hhcmFjdGVyU2V0RGVzY3JpcHRpb25dXTsKKyAgICAgICAg
Y2FzZSBXZWJFdmVudFRvdWNoQmVnaW46CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaENoYW5n
ZToKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoRW5kOgorICAgICAgICBjYXNlIFdlYkV2ZW50
VG91Y2hDYW5jZWw6CisgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJsb2NhdGlvbjogKCVmLCAlZikgY291bnQ6ICVkIGxvY2F0aW9uczogJUAgaWRlbnRpZmll
cnM6ICVAIHBoYXNlczogJUAgaXNHZXN0dXJlOiAlZCBzY2FsZTogJWYgcm90YXRpb246ICVmIiwg
X2xvY2F0aW9uSW5XaW5kb3cueCwgX2xvY2F0aW9uSW5XaW5kb3cueSwgX3RvdWNoQ291bnQsIFtz
ZWxmIF90b3VjaExvY2F0aW9uc0Rlc2NyaXB0aW9uOl90b3VjaExvY2F0aW9uc10sIFtzZWxmIF90
b3VjaElkZW50aWZpZXJzRGVzY3JpcHRpb25dLCBbc2VsZiBfdG91Y2hQaGFzZXNEZXNjcmlwdGlv
bl0sIChfaXNHZXN0dXJlID8gMSA6IDApLCBfZ2VzdHVyZVNjYWxlLCBfZ2VzdHVyZVJvdGF0aW9u
XTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyAgICByZXR1cm4gQCJVbmtub3duIjsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlw
dGlvbgoreworICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAIHR5cGU6
ICVAIC0gJUAiLCBbc3VwZXIgZGVzY3JpcHRpb25dLCBbc2VsZiBfdHlwZURlc2NyaXB0aW9uXSwg
W3NlbGYgX2V2ZW50RGVzY3JpcHRpb25dXTsKK30KKworLSAoQ0dQb2ludClsb2NhdGlvbkluV2lu
ZG93Cit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShfdHlwZSA9PSBXZWJFdmVudE1vdXNlRG93
biB8fCBfdHlwZSA9PSBXZWJFdmVudE1vdXNlVXAgfHwgX3R5cGUgPT0gV2ViRXZlbnRNb3VzZU1v
dmVkIHx8IF90eXBlID09IFdlYkV2ZW50U2Nyb2xsV2hlZWwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE4NTI4ND4gVG91Y2hFdmVudHMgbWF5IGJl
IGluIG1vcmUgdGhhbiBvbmUgd2luZG93IHNvbWUgZGF5LgorICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEJlZ2luIHx8IF90eXBlID09IFdlYkV2ZW50VG91
Y2hDaGFuZ2UgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEVuZCB8fCBfdHlwZSA9PSBXZWJFdmVu
dFRvdWNoQ2FuY2VsCisgICAgICAgICAgICAgICAgICAgICAgICAsICJXZWJFdmVudFR5cGU6ICVk
IiwgX3R5cGUpOworICAgIHJldHVybiBfbG9jYXRpb25JbldpbmRvdzsKK30KKworLSAoTlNTdHJp
bmcgKiljaGFyYWN0ZXJzCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50S2V5RG93biB8
fCBfdHlwZSA9PSBXZWJFdmVudEtleVVwKTsKKyAgICByZXR1cm4gW1tfY2hhcmFjdGVycyByZXRh
aW5dIGF1dG9yZWxlYXNlXTsKK30KKworLSAoTlNTdHJpbmcgKiljaGFyYWN0ZXJzSWdub3JpbmdN
b2RpZmllcnMKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRLZXlEb3duIHx8IF90eXBl
ID09IFdlYkV2ZW50S2V5VXApOworICAgIHJldHVybiBbW19jaGFyYWN0ZXJzSWdub3JpbmdNb2Rp
ZmllcnMgcmV0YWluXSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKFdlYkV2ZW50RmxhZ3MpbW9kaWZp
ZXJGbGFncworeworICAgIHJldHVybiBfbW9kaWZpZXJGbGFnczsKK30KKworLSAoQk9PTClpc0tl
eVJlcGVhdGluZworeworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudEtleURvd24gfHwgX3R5
cGUgPT0gV2ViRXZlbnRLZXlVcCk7CisgICAgcmV0dXJuIF9rZXlSZXBlYXRpbmc7Cit9CisKKy8v
IEZJWE1FOiB0byBiZSByZW1vdmVkCistIChCT09MKWlzUG9wdXBWYXJpYW50Cit7CisgICAgQVNT
RVJUKF90eXBlID09IFdlYkV2ZW50S2V5RG93biB8fCBfdHlwZSA9PSBXZWJFdmVudEtleVVwKTsK
KyAgICByZXR1cm4gX3BvcHVwVmFyaWFudDsKK30KKworLSAoTlNVSW50ZWdlcilrZXlib2FyZEZs
YWdzCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50S2V5RG93biB8fCBfdHlwZSA9PSBX
ZWJFdmVudEtleVVwKTsKKyAgICByZXR1cm4gX2tleWJvYXJkRmxhZ3M7Cit9CisKKy0gKHVpbnQx
Nl90KWtleUNvZGUKK3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRLZXlEb3duIHx8IF90
eXBlID09IFdlYkV2ZW50S2V5VXApOworICAgIHJldHVybiBfa2V5Q29kZTsKK30KKworLSAoQk9P
TClpc1RhYktleQoreworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudEtleURvd24gfHwgX3R5
cGUgPT0gV2ViRXZlbnRLZXlVcCk7CisgICAgcmV0dXJuIF90YWJLZXk7Cit9CisKKy0gKFdlYkV2
ZW50Q2hhcmFjdGVyU2V0KWNoYXJhY3RlclNldAoreworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJF
dmVudEtleURvd24gfHwgX3R5cGUgPT0gV2ViRXZlbnRLZXlVcCk7CisgICAgcmV0dXJuIF9jaGFy
YWN0ZXJTZXQ7Cit9CisKKy0gKGZsb2F0KWRlbHRhWAoreworICAgIEFTU0VSVChfdHlwZSA9PSBX
ZWJFdmVudFNjcm9sbFdoZWVsKTsKKyAgICByZXR1cm4gX2RlbHRhWDsKK30KKworLSAoZmxvYXQp
ZGVsdGFZCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50U2Nyb2xsV2hlZWwpOworICAg
IHJldHVybiBfZGVsdGFZOworfQorCisvLyBUb3VjaAorLSAodW5zaWduZWQpdG91Y2hDb3VudAor
eworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudFRvdWNoQmVnaW4gfHwgX3R5cGUgPT0gV2Vi
RXZlbnRUb3VjaENoYW5nZSB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoRW5kIHx8IF90eXBlID09
IFdlYkV2ZW50VG91Y2hDYW5jZWwpOworICAgIHJldHVybiBfdG91Y2hDb3VudDsKK30KKworLSAo
TlNBcnJheSAqKXRvdWNoTG9jYXRpb25zCit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50
VG91Y2hCZWdpbiB8fCBfdHlwZSA9PSBXZWJFdmVudFRvdWNoQ2hhbmdlIHx8IF90eXBlID09IFdl
YkV2ZW50VG91Y2hFbmQgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENhbmNlbCk7CisgICAgcmV0
dXJuIF90b3VjaExvY2F0aW9uczsKK30KKworLSAoTlNBcnJheSAqKXRvdWNoSWRlbnRpZmllcnMK
K3sKKyAgICBBU1NFUlQoX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEJlZ2luIHx8IF90eXBlID09IFdl
YkV2ZW50VG91Y2hDaGFuZ2UgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEVuZCB8fCBfdHlwZSA9
PSBXZWJFdmVudFRvdWNoQ2FuY2VsKTsKKyAgICByZXR1cm4gX3RvdWNoSWRlbnRpZmllcnM7Cit9
CisKKy0gKE5TQXJyYXkgKil0b3VjaFBoYXNlcworeworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJF
dmVudFRvdWNoQmVnaW4gfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENoYW5nZSB8fCBfdHlwZSA9
PSBXZWJFdmVudFRvdWNoRW5kIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDYW5jZWwpOworICAg
IHJldHVybiBfdG91Y2hQaGFzZXM7Cit9CisKKy8vIEdlc3R1cmUKKy0gKEJPT0wpaXNHZXN0dXJl
Cit7CisgICAgQVNTRVJUKF90eXBlID09IFdlYkV2ZW50VG91Y2hCZWdpbiB8fCBfdHlwZSA9PSBX
ZWJFdmVudFRvdWNoQ2hhbmdlIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hFbmQgfHwgX3R5cGUg
PT0gV2ViRXZlbnRUb3VjaENhbmNlbCk7CisgICAgcmV0dXJuIF9pc0dlc3R1cmU7Cit9CisKKy0g
KGZsb2F0KWdlc3R1cmVTY2FsZQoreworICAgIEFTU0VSVChfdHlwZSA9PSBXZWJFdmVudFRvdWNo
QmVnaW4gfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaENoYW5nZSB8fCBfdHlwZSA9PSBXZWJFdmVu
dFRvdWNoRW5kIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hDYW5jZWwpOworICAgIHJldHVybiBf
Z2VzdHVyZVNjYWxlOworfQorCistIChmbG9hdClnZXN0dXJlUm90YXRpb24KK3sKKyAgICBBU1NF
UlQoX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEJlZ2luIHx8IF90eXBlID09IFdlYkV2ZW50VG91Y2hD
aGFuZ2UgfHwgX3R5cGUgPT0gV2ViRXZlbnRUb3VjaEVuZCB8fCBfdHlwZSA9PSBXZWJFdmVudFRv
dWNoQ2FuY2VsKTsKKyAgICByZXR1cm4gX2dlc3R1cmVSb3RhdGlvbjsKK30KKworQGVuZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDk5ZTQxMjFl
N2E5Y2Y5ZDZhZmI3Zjg3MGZlYTk2N2E2NDI2ODgyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0KQEAgLTAsMCArMSwyNzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldp
ZGdldC5oIgorCisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkN1cnNvci5o
IgorI2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZyYW1l
LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBv
cnQgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2ltcG9ydCAiU2Nyb2xsVmlldy5oIgorI2ltcG9y
dCAiV0FLU2Nyb2xsVmlldy5oIgorI2ltcG9ydCAiV0FLVmlldy5oIgorI2ltcG9ydCAiV0FLV2lu
ZG93LmgiCisjaW1wb3J0ICJXZWJDb3JlRnJhbWVWaWV3LmgiCisjaW1wb3J0ICJXZWJDb3JlVmll
dy5oIgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitAaW50ZXJmYWNlIE5TVmlldyAoV2Vi
U2V0U2VsZWN0ZWRNZXRob2RzKQorLSAodm9pZClzZXRJc1NlbGVjdGVkOihCT09MKWlzU2VsZWN0
ZWQ7CistICh2b2lkKXdlYlBsdWdJblNldElzU2VsZWN0ZWQ6KEJPT0wpaXNTZWxlY3RlZDsKK0Bl
bmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBzYWZlUmVtb3ZlRnJvbVN1
cGVydmlldyhOU1ZpZXcgKnZpZXcpCit7CisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBwcm9iYWJs
eSBjaGFuZ2UgdGhlIGZpcnN0IHJlc3BvbmRlciBvZiB0aGUgd2luZG93IGlmCisgICAgLy8gaXQg
aXMgYSBkZXNjZW5kYW50IG9mIHRoZSB2aWV3IHdlIHJlbW92ZS4KKyAgICAvLyBTZWU6IDxyZGFy
Oi8vcHJvYmxlbS8xMDM2MDE4Nj4KKyAgICBbdmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKK30K
KworV2lkZ2V0OjpXaWRnZXQoTlNWaWV3KiB2aWV3KQoreworICAgIGluaXQodmlldyk7Cit9CisK
K1dpZGdldDo6fldpZGdldCgpIAoreworICAgIHJlbGVhc2VQbGF0Zm9ybVdpZGdldCgpOworfQor
CisvLyBGSVhNRTogU2hvdWxkIG1vdmUgdGhpcyB0byBDaHJvbWU7IGJhZCBsYXllcmluZyB0aGF0
IHRoaXMga25vd3MgYWJvdXQgRnJhbWUuCit2b2lkIFdpZGdldDo6c2V0Rm9jdXMoYm9vbCBmb2N1
c2VkKQoreworICAgIFVOVVNFRF9QQVJBTShmb2N1c2VkKTsKK30KKwordm9pZCBXaWRnZXQ6OnNl
dEN1cnNvcihjb25zdCBDdXJzb3ImKQoreworfQorCit2b2lkIFdpZGdldDo6c2hvdygpCit7Cisg
ICAgaWYgKGlzU2VsZlZpc2libGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U2VsZlZp
c2libGUodHJ1ZSk7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW2dl
dE91dGVyVmlldygpIHNldEhpZGRlbjpOT107CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKK30KKwordm9pZCBXaWRnZXQ6OmhpZGUoKQoreworICAgIGlmICghaXNTZWxmVmlzaWJsZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRTZWxmVmlzaWJsZShmYWxzZSk7CisKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW2dldE91dGVyVmlldygpIHNldEhpZGRl
bjpZRVNdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK0ludFJlY3QgV2lk
Z2V0OjpmcmFtZVJlY3QoKSBjb25zdAoreworICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkKKyAg
ICAgICAgcmV0dXJuIG1fZnJhbWU7CisgICAgCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KFtnZXRPdXRlclZpZXcoKSBmcmFtZV0p
OworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgCisgICAgcmV0dXJuIG1fZnJh
bWU7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCAmcmVjdCkK
K3sKKyAgICBtX2ZyYW1lID0gcmVjdDsKKyAgICAKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgTlNWaWV3ICp2ID0gZ2V0T3V0ZXJWaWV3KCk7CisgICAgTlNSZWN0IGYgPSBy
ZWN0OworICAgIGlmICghTlNFcXVhbFJlY3RzKGYsIFt2IGZyYW1lXSkpIHsKKyAgICAgICAgW3Yg
c2V0RnJhbWU6Zl07CisgICAgICAgIFt2IHNldE5lZWRzRGlzcGxheTogTk9dOworICAgIH0KKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitOU1ZpZXcqIFdpZGdldDo6Z2V0T3V0
ZXJWaWV3KCkgY29uc3QKK3sKKyAgICBOU1ZpZXcqIHZpZXcgPSBwbGF0Zm9ybVdpZGdldCgpOwor
CisgICAgLy8gSWYgdGhpcyB3aWRnZXQncyB2aWV3IGlzIGEgV2ViQ29yZUZyYW1lU2Nyb2xsVmll
dyB0aGVuIHdlCisgICAgLy8gcmVzaXplIGl0cyBjb250YWluaW5nIHZpZXcsIGEgV2ViRnJhbWVW
aWV3LgorICAgIGlmIChbdmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdlYkNvcmVG
cmFtZVNjcm9sbFZpZXcpXSkgeworICAgICAgICB2aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XTsKKyAg
ICAgICAgQVNTRVJUKHZpZXcpOworICAgIH0KKworICAgIHJldHVybiB2aWV3OworfQorCit2b2lk
IFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIGlmIChwLT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBOU1ZpZXcgKnZpZXcgPSBnZXRPdXRlclZpZXcoKTsKKworICAgIENHQ29udGV4dFJlZiBjZ0Nv
bnRleHQgPSBwLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNn
Q29udGV4dCk7CisKKyAgICBOU1JlY3Qgdmlld0ZyYW1lID0gW3ZpZXcgZnJhbWVdOworICAgIE5T
UmVjdCB2aWV3Qm91bmRzID0gW3ZpZXcgYm91bmRzXTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0oY2dDb250ZXh0LCB2aWV3RnJhbWUub3JpZ2luLnggLSB2aWV3Qm91bmRzLm9yaWdpbi54LCB2
aWV3RnJhbWUub3JpZ2luLnkgLSB2aWV3Qm91bmRzLm9yaWdpbi55KTsKKworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBbdmlldyBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0
eTpbdmlldyBjb252ZXJ0UmVjdDpyIGZyb21WaWV3Olt2aWV3IHN1cGVydmlld11dIGluQ29udGV4
dDpjZ0NvbnRleHRdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBDR0Nv
bnRleHRSZXN0b3JlR1N0YXRlKGNnQ29udGV4dCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRJc1Nl
bGVjdGVkKGJvb2wgLyppc1NlbGVjdGVkKi8pCit7Cit9CisKK3ZvaWQgV2lkZ2V0OjphZGRUb1N1
cGVydmlldyhOU1ZpZXcgKnZpZXcpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworCisgICAgQVNTRVJUKHZpZXcpOworICAgIE5TVmlldyAqc3VidmlldyA9IGdldE91dGVyVmll
dygpOworCisgICAgaWYgKCFzdWJ2aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
IVt2aWV3IGlzRGVzY2VuZGFudE9mOnN1YnZpZXddKTsKKyAgICAKKyAgICBpZiAoW3N1YnZpZXcg
c3VwZXJ2aWV3XSAhPSB2aWV3KQorICAgICAgICBbdmlldyBhZGRTdWJ2aWV3OnN1YnZpZXddOwor
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKwordm9pZCBXaWRnZXQ6OnJlbW92
ZUZyb21TdXBlcnZpZXcoKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAg
ICBzYWZlUmVtb3ZlRnJvbVN1cGVydmlldyhnZXRPdXRlclZpZXcoKSk7CisgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKK30KKworSW50UmVjdCBXaWRnZXQ6OmNvbnZlcnRGcm9tUm9vdFRv
Q29udGFpbmluZ1dpbmRvdyhjb25zdCBXaWRnZXQqIHJvb3RXaWRnZXQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgaWYgKCFyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQorICAgICAg
ICByZXR1cm4gcmVjdDsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBB
U1NFUlQoW3Jvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgaXNLaW5kT2ZDbGFzczpbTlNTY3Jv
bGxWaWV3IGNsYXNzXV0pOworICAgIFdBS1Njcm9sbFZpZXcgKnZpZXcgPSBzdGF0aWNfY2FzdDxX
QUtTY3JvbGxWaWV3ICo+KHJvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpOworICAgIGlmIChX
QUtWaWV3ICpkb2N1bWVudFZpZXcgPSBbdmlldyBkb2N1bWVudFZpZXddKQorICAgICAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdChbZG9jdW1lbnRWaWV3IGNvbnZlcnRSZWN0OnJlY3QgdG9WaWV3
Om5pbF0pOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KFt2aWV3IGNvbnZlcnRSZWN0OnJl
Y3QgdG9WaWV3Om5pbF0pOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBy
ZXR1cm4gcmVjdDsKK30KKworSW50UmVjdCBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dp
bmRvd1RvUm9vdChjb25zdCBXaWRnZXQqIHJvb3RXaWRnZXQsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgaWYgKCFyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1
cm4gcmVjdDsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBBU1NFUlQo
W3Jvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgaXNLaW5kT2ZDbGFzczpbTlNTY3JvbGxWaWV3
IGNsYXNzXV0pOworICAgIFdBS1Njcm9sbFZpZXcgKnZpZXcgPSBzdGF0aWNfY2FzdDxXQUtTY3Jv
bGxWaWV3ICo+KHJvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpOworICAgIGlmIChXQUtWaWV3
ICpkb2N1bWVudFZpZXcgPSBbdmlldyBkb2N1bWVudFZpZXddKQorICAgICAgICByZXR1cm4gZW5j
bG9zaW5nSW50UmVjdChbZG9jdW1lbnRWaWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZpZXc6bmls
XSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoW3ZpZXcgY29udmVydFJlY3Q6cmVjdCBm
cm9tVmlldzpuaWxdKTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgcmV0
dXJuIHJlY3Q7Cit9CisKK0ludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Sb290VG9Db250YWlu
aW5nV2luZG93KGNvbnN0IFdpZGdldCogcm9vdFdpZGdldCwgY29uc3QgSW50UG9pbnQmIHBvaW50
KQoreworICAgIGlmICghcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0
dXJuIHBvaW50OworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIEFTU0VS
VChbcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSBpc0tpbmRPZkNsYXNzOltOU1Njcm9sbFZp
ZXcgY2xhc3NdXSk7CisgICAgV0FLU2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19jYXN0PFdBS1Nj
cm9sbFZpZXcgKj4ocm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSk7CisgICAgTlNQb2ludCBj
b252ZXJ0ZWRQb2ludDsKKyAgICBpZiAoV0FLVmlldyAqZG9jdW1lbnRWaWV3ID0gW3ZpZXcgZG9j
dW1lbnRWaWV3XSkKKyAgICAgICAgY29udmVydGVkUG9pbnQgPSBbZG9jdW1lbnRWaWV3IGNvbnZl
cnRQb2ludDpwb2ludCB0b1ZpZXc6bmlsXTsKKyAgICBlbHNlCisgICAgICAgIGNvbnZlcnRlZFBv
aW50ID0gW3ZpZXcgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpuaWxdOworICAgIHJldHVybiBJ
bnRQb2ludChyb3VuZGYoY29udmVydGVkUG9pbnQueCksIHJvdW5kZihjb252ZXJ0ZWRQb2ludC55
KSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHJldHVybiBwb2ludDsK
K30KKworSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3dUb1Jvb3Qo
Y29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAg
aWYgKCFyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm4gcG9pbnQ7
CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgQVNTRVJUKFtyb290V2lk
Z2V0LT5wbGF0Zm9ybVdpZGdldCgpIGlzS2luZE9mQ2xhc3M6W05TU2Nyb2xsVmlldyBjbGFzc11d
KTsKKyAgICBXQUtTY3JvbGxWaWV3ICp2aWV3ID0gc3RhdGljX2Nhc3Q8V0FLU2Nyb2xsVmlldyAq
Pihyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKTsKKyAgICBOU1BvaW50IGNvbnZlcnRlZFBv
aW50OworICAgIGlmIChXQUtWaWV3ICpkb2N1bWVudFZpZXcgPSBbdmlldyBkb2N1bWVudFZpZXdd
KQorICAgICAgICBjb252ZXJ0ZWRQb2ludCA9IEludFBvaW50KFtkb2N1bWVudFZpZXcgY29udmVy
dFBvaW50OnBvaW50IGZyb21WaWV3Om5pbF0pOworICAgIGVsc2UKKyAgICAgICAgY29udmVydGVk
UG9pbnQgPSBJbnRQb2ludChbdmlldyBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6bmlsXSk7
CisgICAgcmV0dXJuIEludFBvaW50KHJvdW5kZihjb252ZXJ0ZWRQb2ludC54KSwgcm91bmRmKGNv
bnZlcnRlZFBvaW50LnkpKTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAg
cmV0dXJuIHBvaW50OworfQorCitOU1ZpZXcgKldpZGdldDo6cGxhdGZvcm1XaWRnZXQoKSBjb25z
dAoreworICAgIHJldHVybiBtX3dpZGdldC5nZXQoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldFBs
YXRmb3JtV2lkZ2V0KE5TVmlldyAqd2lkZ2V0KQoreworICAgIGlmICh3aWRnZXQgPT0gbV93aWRn
ZXQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2lkZ2V0ID0gd2lkZ2V0OworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVlcERpc2FibGVy
LmNwcAppbmRleCA1Yjk5N2NhY2E3OGZlMjg3NWQ0OTM0ZDE1ZjRkY2FlNzg0ODEzYTQyLi5iMzZi
NjZkOGU4ZmJhNDI0NzI1OGMwODZhOTRiNGNkODEwZjY3OTlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EaXNwbGF5U2xlZXBEaXNhYmxlci5jcHAKQEAgLTI2LDYg
KzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEaXNwbGF5U2xlZXBEaXNh
Ymxlci5oIgogCisjaWYgIVBMQVRGT1JNKElPUykKKwogI2luY2x1ZGUgPElPS2l0L3B3cl9tZ3Qv
SU9QTUxpYi5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtNTQsMyArNTYsMTIg
QEAgRGlzcGxheVNsZWVwRGlzYWJsZXI6On5EaXNwbGF5U2xlZXBEaXNhYmxlcigpCiB9CiAKIH0K
KworI2Vsc2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworRGlzcGxheVNsZWVwRGlzYWJsZXI6OkRp
c3BsYXlTbGVlcERpc2FibGVyKGNvbnN0IGNoYXIgKikgeyB9CitEaXNwbGF5U2xlZXBEaXNhYmxl
cjo6fkRpc3BsYXlTbGVlcERpc2FibGVyKCkgeyB9Cit9CisKKyNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Rpc3BsYXlTbGVl
cERpc2FibGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlz
YWJsZXIuaAppbmRleCAyYzlhMTg0MmY0OTBhZDkwNzEzMTA5OTQ5NjZkYWJhNjdmM2U0MjdmLi5h
NjliZjhkZDk0NjhmZjQ2MzM3YjA1YjQwMjI0MDQ4ZjQ2MDBjZjNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRGlzcGxheVNsZWVwRGlzYWJsZXIuaApAQCAtNDAsNyAr
NDAsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIERpc3BsYXlTbGVlcERpc2FibGVyKGNvbnN0
IGNoYXIqIHJlYXNvbik7CiAgICAgCisjaWYgIVBMQVRGT1JNKElPUykKICAgICB1aW50MzJfdCBt
X2Rpc2FibGVEaXNwbGF5U2xlZXBBc3NlcnRpb247CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9GaWxlU3lz
dGVtTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW0K
aW5kZXggMjE2YjYwNTk1OGUxMzdiMjlhYTI4MWVkZDRmMmM4M2Q2YWY5MDBlMC4uNjhmNmRmNmM2
NTVhNjkwZWQ1OTIwMjVkY2M5YmE2MGE2ZTU2Y2M1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW0KQEAgLTY3LDYgKzY3LDggQEAgU3RyaW5nIG9wZW5U
ZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIHBs
YXRmb3JtRmlsZUgKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCh0ZW1wb3JhcnlGaWxlUGF0
aC5kYXRhKCkpOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKKwogdm9pZCBzZXRNZXRhZGF0YVVS
TChTdHJpbmcmIFVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5n
JiBwYXRoKQogewogICAgIE5TVVJMICpVUkwgPSBVUkxXaXRoVXNlclR5cGVkU3RyaW5nKFVSTFN0
cmluZywgbmlsKTsKQEAgLTgyLDcgKzg0LDYgQEAgdm9pZCBzZXRNZXRhZGF0YVVSTChTdHJpbmcm
IFVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5nJiBwYXQKICAg
ICB9KTsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCiBib29sIGNhbkV4Y2x1ZGVGcm9tQmFja3Vw
KCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk0LDYgKzk1LDcgQEAgYm9vbCBleGNsdWRlRnJv
bUJhY2t1cChjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgQ1NCYWNrdXBTZXRJdGVtRXhjbHVkZWQo
cGF0aEFzVVJMKHBhdGgpLmdldCgpLCBUUlVFLCBGQUxTRSk7IAogICAgIHJldHVybiB0cnVlOwog
fQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0tpbGxSaW5nTWFjLm1tCmluZGV4IDMyZTdjNzIyNjJhNmVlNjQyOTg2MTMwMDFi
YTU3Nzg1ODdkN2E0MTkuLjEwMTUwNzA4YTM5ODMxNGU5MDZkODc3YTFjOTA5NmFlYjdmOTI1OTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9LaWxsUmluZ01hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvS2lsbFJpbmdNYWMubW0KQEAgLTgxLDMg
KzgxLDQgQEAgdm9pZCBLaWxsUmluZzo6c2V0VG9ZYW5rZWRTdGF0ZSgpCiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L01lbW9yeVByZXNzdXJlSGFuZGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMubW0KaW5kZXggYWM5ZDBjZmFjY2RjYjRhMzI5ZDNj
MjlmY2RjMDA4MjY5ZjgwOTA4ZC4uOTE2MzY1M2RlY2MzMzA4ZTQxYWUzYzkwZmU1NzViNGJmYTM3
M2VhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL01lbW9yeVByZXNz
dXJlSGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTWVtb3J5
UHJlc3N1cmVIYW5kbGVyTWFjLm1tCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgTWVtb3J5UHJlc3N1
cmVIYW5kbGVyOjppbnN0YWxsKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSNpZiBNQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgIVBMQVRGT1JNKElPUykgJiYgTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogICAgICAgICBfY2FjaGVfZXZlbnRfc291cmNlID0gd2tD
cmVhdGVNZW1vcnlTdGF0dXNQcmVzc3VyZUNyaXRpY2FsRGlzcGF0Y2hPbk1haW5RdWV1ZSgpOwog
I2Vsc2UKICAgICAgICAgX2NhY2hlX2V2ZW50X3NvdXJjZSA9IHdrQ3JlYXRlVk1QcmVzc3VyZURp
c3BhdGNoT25NYWluUXVldWUoKTsKQEAgLTE1OCw3ICsxNTgsOSBAQCB2b2lkIE1lbW9yeVByZXNz
dXJlSGFuZGxlcjo6cmVsZWFzZU1lbW9yeShib29sKQogCiAgICAgbWVtb3J5Q2FjaGUoKS0+cHJ1
bmVUb1BlcmNlbnRhZ2UoMCk7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIExheWVyUG9vbDo6
c2hhcmVkUG9vbCgpLT5kcmFpbigpOworI2VuZGlmCiAKICAgICBjc3NWYWx1ZVBvb2woKS5kcmFp
bigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1D
bG9ja0NNLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtQ2xvY2tDTS5t
bQppbmRleCAzM2Y1NGM5YTE0ZjMwZTRhMjUyZWI1YjgyMGI0ZWFhYTY1YzdlMDM1Li4wNzQwMDVl
YmFkODQ0NmMxZGMwM2U0YmFhZWJjMzcxYTU0MzViNTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1DbG9ja0NNLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9QbGF0Zm9ybUNsb2NrQ00ubW0KQEAgLTMxLDExICszMSwxOSBAQAogCiAj
aW1wb3J0ICJNZWRpYVRpbWVNYWMuaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaWYgUExB
VEZPUk0oSU9TKQorI2ltcG9ydCA8Q29yZU1lZGlhL0NNQXVkaW9DbG9jay5oPgorI2Vsc2UKICNp
bXBvcnQgPENvcmVNZWRpYS9DTUF1ZGlvRGV2aWNlQ2xvY2suaD4KKyNlbmRpZgogCiBTT0ZUX0xJ
TktfRlJBTUVXT1JLX09QVElPTkFMKENvcmVNZWRpYSkKIAorI2lmIFBMQVRGT1JNKElPUykKK1NP
RlRfTElOSyhDb3JlTWVkaWEsIENNQXVkaW9DbG9ja0NyZWF0ZSwgT1NTdGF0dXMsIChDRkFsbG9j
YXRvclJlZiBhbGxvY2F0b3IsIENNQ2xvY2tSZWYgKmNsb2NrT3V0KSwgKGFsbG9jYXRvciwgY2xv
Y2tPdXQpKQorI2Vsc2UKIFNPRlRfTElOSyhDb3JlTWVkaWEsIENNQXVkaW9EZXZpY2VDbG9ja0Ny
ZWF0ZSwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENGU3RyaW5nUmVmIGRl
dmljZVVJRCwgQ01DbG9ja1JlZiAqY2xvY2tPdXQpLCAoYWxsb2NhdG9yLCBkZXZpY2VVSUQsIGNs
b2NrT3V0KSkKKyNlbmRpZgogU09GVF9MSU5LKENvcmVNZWRpYSwgQ01UaW1lYmFzZUNyZWF0ZVdp
dGhNYXN0ZXJDbG9jaywgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENNQ2xv
Y2tSZWYgbWFzdGVyQ2xvY2ssIENNVGltZWJhc2VSZWYgKnRpbWViYXNlT3V0KSwgKGFsbG9jYXRv
ciwgbWFzdGVyQ2xvY2ssIHRpbWViYXNlT3V0KSkKIFNPRlRfTElOSyhDb3JlTWVkaWEsIENNVGlt
ZWJhc2VTZXRUaW1lLCBPU1N0YXR1cywgKENNVGltZWJhc2VSZWYgdGltZWJhc2UsIENNVGltZSB0
aW1lKSwgKHRpbWViYXNlLCB0aW1lKSkKIFNPRlRfTElOSyhDb3JlTWVkaWEsIENNVGltZWJhc2VH
ZXRUaW1lLCBDTVRpbWUsIChDTVRpbWViYXNlUmVmIHRpbWViYXNlKSwgKHRpbWViYXNlKSkKQEAg
LTU0LDcgKzYyLDExIEBAIFBsYXRmb3JtQ2xvY2tDTTo6UGxhdGZvcm1DbG9ja0NNKCkKICAgICAs
IG1fcnVubmluZyhmYWxzZSkKIHsKICAgICBDTUNsb2NrUmVmIHJhd0Nsb2NrUHRyID0gMDsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgQ01BdWRpb0Nsb2NrQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQsICZyYXdDbG9ja1B0cik7CisjZWxzZQogICAgIENNQXVkaW9EZXZpY2VDbG9ja0NyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBOVUxMLCAmcmF3Q2xvY2tQdHIpOworI2VuZGlmCiAgICAgUmV0
YWluUHRyPENNQ2xvY2tSZWY+IGNsb2NrID0gYWRvcHRDRihyYXdDbG9ja1B0cik7CiAgICAgaW5p
dGlhbGl6ZVdpdGhUaW1pbmdTb3VyY2UoY2xvY2suZ2V0KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaAppbmRleCBlOTQ2YjNkOWRlNTM5ZGZmY2IzOGUzOTU4
ZWI4MGFiZTU5ZmUxMTY4Li4yNTdkODNkMDcxOGRjMmI1ODFlNDBlM2UyNGQ2ZTY1ZWMwMGQyNjYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaApAQCAtMjksNiAr
MjksMTAgQEAKICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0IDxkbGZjbi5oPgog
CisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjZW5kaWYKKwog
I2RlZmluZSBTT0ZUX0xJTktfTElCUkFSWShsaWIpIFwKICAgICBzdGF0aWMgdm9pZCogbGliIyNM
aWJyYXJ5KCkgXAogICAgIHsgXApAQCAtNjIsNiArNjYsMTUgQEAKICAgICAgICAgcmV0dXJuIGZy
YW1ld29ya0xpYnJhcnk7IFwKICAgICB9CiAKKyNpZiBQTEFURk9STShJT1MpCisjZGVmaW5lIFNP
RlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05BTChmcmFtZXdvcmspIFwKKyAgICBzdGF0
aWMgdm9pZCogZnJhbWV3b3JrIyNMaWJyYXJ5KCkgXAorICAgIHsgXAorICAgICAgICBzdGF0aWMg
dm9pZCogZnJhbWV3b3JrTGlicmFyeSA9IGRsb3BlbigiL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVG
cmFtZXdvcmtzLyIgI2ZyYW1ld29yayAiLmZyYW1ld29yay8iICNmcmFtZXdvcmssIFJUTERfTk9X
KTsgXAorICAgICAgICByZXR1cm4gZnJhbWV3b3JrTGlicmFyeTsgXAorICAgIH0KKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpCisKICNkZWZpbmUgU09GVF9MSU5LX1NUQUdFRF9GUkFNRVdPUksoZnJh
bWV3b3JrLCB1bnN0YWdlZExvY2F0aW9uLCB2ZXJzaW9uKSBcCiAgICAgc3RhdGljIHZvaWQqIGZy
YW1ld29yayMjTGlicmFyeSgpIFwKICAgICB7IFwKQEAgLTk5LDYgKzExMiwzMCBAQAogICAgICAg
ICByZXR1cm4gc29mdExpbmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgXAogICAgIH0K
IAorI2lmIFBMQVRGT1JNKElPUykKKyNkZWZpbmUgU09GVF9MSU5LX01BWV9GQUlMKGZyYW1ld29y
aywgZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMsIHBhcmFt
ZXRlck5hbWVzKSBcCisgICAgc3RhdGljIHJlc3VsdFR5cGUgKCpzb2Z0TGluayMjZnVuY3Rpb25O
YW1lKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMgPSAwOyBcCisgICAgXAorICAgIHN0YXRpYyBib29s
IGluaXQjI2Z1bmN0aW9uTmFtZSgpIFwKKyAgICB7IFwKKyAgICAgICAgQVNTRVJUKCFzb2Z0TGlu
ayMjZnVuY3Rpb25OYW1lKTsgXAorICAgICAgICBzb2Z0TGluayMjZnVuY3Rpb25OYW1lID0gKHJl
c3VsdFR5cGUgKCopIHBhcmFtZXRlckRlY2xhcmF0aW9ucykgZGxzeW0oZnJhbWV3b3JrIyNMaWJy
YXJ5KCksICNmdW5jdGlvbk5hbWUpOyBcCisgICAgICAgIHJldHVybiAhIXNvZnRMaW5rIyNmdW5j
dGlvbk5hbWU7IFwKKyAgICB9IFwKKyAgICBcCisgICAgc3RhdGljIGJvb2wgY2FuTG9hZCMjZnVu
Y3Rpb25OYW1lKCkgXAorICAgIHsgXAorICAgICAgICBzdGF0aWMgYm9vbCBsb2FkZWQgPSBpbml0
IyNmdW5jdGlvbk5hbWUoKTsgXAorICAgICAgICByZXR1cm4gbG9hZGVkOyBcCisgICAgfSBcCisg
ICAgXAorICAgIHJlc3VsdFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9ucyBc
CisgICAgeyBcCisgICAgICAgIEFTU0VSVChzb2Z0TGluayMjZnVuY3Rpb25OYW1lKTsgXAorICAg
ICAgICByZXR1cm4gc29mdExpbmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgXAorICAg
IH0KKyNlbmRpZgorCiAvKiBjYWxsaW5nQ29udmVudGlvbiBpcyB1bnVzZWQgb24gTWFjIGJ1dCBp
cyBoZXJlIHRvIGtlZXAgdGhlIG1hY3JvIHByb3RvdHlwZSB0aGUgc2FtZSBiZXR3ZWVuIE1hYyBh
bmQgV2luZG93cy4gKi8KICNkZWZpbmUgU09GVF9MSU5LX09QVElPTkFMKGZyYW1ld29yaywgZnVu
Y3Rpb25OYW1lLCByZXN1bHRUeXBlLCBjYWxsaW5nQ29udmVudGlvbiwgcGFyYW1ldGVyRGVjbGFy
YXRpb25zKSBcCiAgICAgdHlwZWRlZiByZXN1bHRUeXBlICgqZnVuY3Rpb25OYW1lIyNQdHJUeXBl
KSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnM7IFwKQEAgLTIwMiwzICsyMzksMzIgQEAKICAgICAgICAg
Z2V0IyNuYW1lID0gbmFtZSMjRnVuY3Rpb247IFwKICAgICAgICAgcmV0dXJuIGNvbnN0YW50IyNu
YW1lOyBcCiAgICAgfQorCisjaWYgUExBVEZPUk0oSU9TKQorI2RlZmluZSBTT0ZUX0xJTktfQ09O
U1RBTlRfTUFZX0ZBSUwoZnJhbWV3b3JrLCBuYW1lLCB0eXBlKSBcCisgICAgc3RhdGljIGJvb2wg
aW5pdCMjbmFtZSgpOyBcCisgICAgc3RhdGljIHR5cGUgKCpnZXQjI25hbWUpKCkgPSAwOyBcCisg
ICAgc3RhdGljIHR5cGUgY29uc3RhbnQjI25hbWU7IFwKKyAgICBcCisgICAgc3RhdGljIHR5cGUg
bmFtZSMjRnVuY3Rpb24oKSBcCisgICAgeyBcCisgICAgICAgIHJldHVybiBjb25zdGFudCMjbmFt
ZTsgXAorICAgIH1cCisgICAgXAorICAgIHN0YXRpYyBib29sIGNhbkxvYWQjI25hbWUoKSBcCisg
ICAgeyBcCisgICAgICAgIHN0YXRpYyBib29sIGxvYWRlZCA9IGluaXQjI25hbWUoKTsgXAorICAg
ICAgICByZXR1cm4gbG9hZGVkOyBcCisgICAgfSBcCisgICAgXAorICAgIHN0YXRpYyBib29sIGlu
aXQjI25hbWUoKSBcCisgICAgeyBcCisgICAgICAgIEFTU0VSVCghZ2V0IyNuYW1lKTsgXAorICAg
ICAgICB2b2lkKiBjb25zdGFudCA9IGRsc3ltKGZyYW1ld29yayMjTGlicmFyeSgpLCAjbmFtZSk7
IFwKKyAgICAgICAgaWYgKCFjb25zdGFudCkgXAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBc
CisgICAgICAgIGNvbnN0YW50IyNuYW1lID0gKnN0YXRpY19jYXN0PHR5cGUqPihjb25zdGFudCk7
IFwKKyAgICAgICAgZ2V0IyNuYW1lID0gbmFtZSMjRnVuY3Rpb247IFwKKyAgICAgICAgcmV0dXJu
IHRydWU7IFwKKyAgICB9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TeXN0ZW1WZXJzaW9uTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1N5c3RlbVZlcnNpb25NYWMubW0KaW5kZXggYmNjMTFiYTliNTg5OTNmZDU4OGExMWM5OTkwNTVj
OWY3NmMzMmZjZC4uZWNkNTVlMjIzN2M5OTAxMTk2NTI4ZDQwMzk1YWM3MmJiMWFhZWFiZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1N5c3RlbVZlcnNpb25NYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1N5c3RlbVZlcnNpb25NYWMubW0KQEAg
LTI3LDYgKzI3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIVBMQVRGT1JNKElP
UykKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKIAogc3RhdGlj
IE5TU3RyaW5nICpjcmVhdGVTeXN0ZW1NYXJrZXRpbmdWZXJzaW9uKCkKQEAgLTY0LDExICs2NSwx
NSBAQCBzdGF0aWMgTlNTdHJpbmcgKmNyZWF0ZVN5c3RlbU1hcmtldGluZ1ZlcnNpb24oKQogCiAj
ZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAKLQogTlNT
dHJpbmcgKnN5c3RlbU1hcmtldGluZ1ZlcnNpb24oKQogewogICAgIHN0YXRpYyBOU1N0cmluZyAq
dmVyc2lvbiA9IGNyZWF0ZVN5c3RlbU1hcmtldGluZ1ZlcnNpb24oKTsKICAgICByZXR1cm4gdmVy
c2lvbjsKIH0KKyNlbHNlCisKK30KKworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlblBs
YWNlaG9sZGVyVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxs
U2NyZWVuUGxhY2Vob2xkZXJWaWV3LmgKaW5kZXggN2IyNDNiMGEyZjI0YzIwNTczN2FhMzk3OGQx
YThjNmFlNGRjNDRjMy4uODdlNjk5YWNlYzBhNjgwODdlZTlkZWZmZGE0MDQwODUwOGZjMjMxYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVu
UGxhY2Vob2xkZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNv
cmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmgKQEAgLTIzLDYgKzIzLDggQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaWYgIVBMQVRGT1JNKElPUykKKwog
I2lmbmRlZiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlld19oCiAjZGVmaW5lIFdlYkNv
cmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3X2gKIApAQCAtNDAsMyArNDIsNSBAQAogQGVuZAog
CiAjZW5kaWYgLy8gV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXdfaAorCisjZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbQppbmRleCBhOTZk
YjBlNmIxZDFkZmEzMDczY2NmMzI0YTkzYmY0NjI4YTZmMWEzLi4xM2Y1NjNlOTI4MWU3YTdjMmU3
NWM2NjM2YTNjOWYxNTU5YmZmOWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tCkBA
IC0yNCw2ICsyNCw4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmICFQTEFURk9S
TShJT1MpCisKICNpbmNsdWRlICJXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oIgog
CiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgpAQCAtOTMsMyArOTUsNSBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIH0KIAogQGVuZAorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVl
bldhcm5pbmdWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxT
Y3JlZW5XYXJuaW5nVmlldy5oCmluZGV4IGY2ZWE5YWQ3ODRlYWUyZGUwOTVkMWUzMGVkZDdjMGM1
NGZhNmNjY2QuLmUyYTM3ZmI0MjQwODEyYjE4ZGQwOGYyM2MzYmI4MTI3MmNjYTYxNmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldhcm5p
bmdWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2Ny
ZWVuV2FybmluZ1ZpZXcuaApAQCAtMjMsNiArMjMsOCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQorCiAjaWZuZGVmIFdlYkNv
cmVGdWxsU2NyZWVuV2FybmluZ1ZpZXdfaAogI2RlZmluZSBXZWJDb3JlRnVsbFNjcmVlbldhcm5p
bmdWaWV3X2gKIApAQCAtMzksMyArNDEsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvLyBXZWJDb3Jl
RnVsbFNjcmVlbldhcm5pbmdWaWV3X2gKKworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5XYXJu
aW5nVmlldy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVl
bldhcm5pbmdWaWV3Lm1tCmluZGV4IGM0ZTFmYTMyOTBhZDQ0MDRkNjJmMmUxMTRiMGFkZmExNmFl
MTkyYzMuLjM0OTRiODhhYzllNDE2YmZkNWI5YTkwODcyMjcwNWU0ZjY5NzE4N2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdW
aWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVl
bldhcm5pbmdWaWV3Lm1tCkBAIC0yNCw2ICsyNCw4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2lmICFQTEFURk9STShJT1MpCisKICNpbmNsdWRlICJXZWJDb3JlRnVsbFNjcmVlbldh
cm5pbmdWaWV3LmgiCiAKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCkBAIC0xMDMsMyAr
MTA1LDUgQEAgc3RhdGljIGNvbnN0IENHRmxvYXQgV2FybmluZ1ZpZXdTaGFkb3dSYWRpdXMgPSA1
OwogICAgIHJldHVybiBzZWxmOwogfQogQGVuZAorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVl
bldpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVu
V2luZG93LmgKaW5kZXggZGU2MzY1YTk0MTgyMTQ0NDRjNzE4MWI1ZTBjZGRlZGU1OTYxOGFjMC4u
NjAxZTM0OGYwMDQ0YzAyM2RlNTFhMDE4NWFlMmI4NWE1YjBiNzlhMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93LmgKQEAg
LTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3dfaAogI2RlZmlu
ZSBXZWJDb3JlRnVsbFNjcmVlbldpbmRvd19oCiAKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiAhUExBVEZPUk0oSU9TKQogCiBAaW50ZXJm
YWNlIFdlYkNvcmVGdWxsU2NyZWVuV2luZG93IDogTlNXaW5kb3cKIEBlbmQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5tbQpp
bmRleCA1MjAyOTJjZmFiZWIwMTFhZTgyZGNjZjEyNjhmMDJjYmQ1ODQ5OWIxLi41MzAyY2RhMmVh
MWU0Njc1YTk3NzIxNzk1ZGRmY2QxMjEyYmY2MjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93Lm1tCkBAIC0yNSw3ICsy
NSw3IEBACiAKICNpbXBvcnQgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgIVBMQVRGT1JNKElPUykKIAogI2ltcG9y
dCAiV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU0NlbGxFeHRyYXMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0cmFzLmgKaW5kZXggNDdlZGZmODYxYWViNGJhOGRm
Mjk4YTA4ZThjODQwODdkYTMwZDQ2MC4uOWZmNzQ2MmIwNzY2YzI1YWQxYTg1MDNmOTM2MzJlODY1
OWYxN2IxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVO
U0NlbGxFeHRyYXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5T
Q2VsbEV4dHJhcy5oCkBAIC0yMyw4ICsyMywxMiBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKKyNpZiAhUExBVEZPUk0oSU9TKQogI2ltcG9ydCA8QXBwS2l0L0Fw
cEtpdC5oPgogCiBAaW50ZXJmYWNlIE5TQ2VsbCAoV2ViQ29yZUZvY3VzUmluZ0RyYXdpbmcpCiAt
ICh2b2lkKV93ZWJfZHJhd0ZvY3VzUmluZ1dpdGhGcmFtZTooTlNSZWN0KWNlbGxGcmFtZSBpblZp
ZXc6KE5TVmlldyAqKWNvbnRyb2xWaWV3OwogQGVuZAorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU0Nl
bGxFeHRyYXMubSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNDZWxsRXh0
cmFzLm0KaW5kZXggYTU2ODkzMTc0YjM3NmQ3NjllNWE4ZDc1N2I2MzBlMzQwNWRjMGQzMi4uMGQ1
YjBlNzE1Y2MzYTQzNGVjNWY0YmU5OTE4YzM1OWZjMGEwYTM4MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU0NlbGxFeHRyYXMubQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TQ2VsbEV4dHJhcy5tCkBAIC0yNiw2ICsyNiw4
IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkNvcmVOU0NlbGxFeHRyYXMuaCIK
IAorI2lmICFQTEFURk9STShJT1MpCisKIEBpbXBsZW1lbnRhdGlvbiBOU0NlbGwgKFdlYkNvcmVG
b2N1c1JpbmdEcmF3aW5nKQogCiAtICh2b2lkKV93ZWJfZHJhd0ZvY3VzUmluZ1dpdGhGcmFtZToo
TlNSZWN0KWNlbGxGcmFtZSBpblZpZXc6KE5TVmlldyAqKWNvbnRyb2xWaWV3CkBAIC00MCwzICs0
Miw2IEBAIC0gKHZvaWQpX3dlYl9kcmF3Rm9jdXNSaW5nV2l0aEZyYW1lOihOU1JlY3QpY2VsbEZy
YW1lIGluVmlldzooTlNWaWV3ICopY29udHJvbFZpCiB9CiAKIEBlbmQKKworI2VuZGlmIC8vICFQ
TEFURk9STShJT1MpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
Q29yZVN5c3RlbUludGVyZmFjZS5oCmluZGV4IDRiNDI3MDkwYzRmMjZiZmQ0NTRlMzVlZmNkMjEz
ZmFiY2EzYmY3MTkuLjUzMzEyODk3MzU5M2ZhNDU2ZDY0MTY0NGUzMWZkY2RjMmZiMDZhOTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UuaApAQCAtMjgsNiArMjgsMTAgQEAKIAogI2luY2x1ZGUgPG9iamMvb2JqYy5oPgogCisj
aWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaCIK
KyNlbmRpZgorCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGU3RyaW5nICogQ0ZTdHJpbmdSZWY7
CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGTnVtYmVyICogQ0ZOdW1iZXJSZWY7CiB0eXBlZGVm
IGNvbnN0IHN0cnVjdCBfX0NGRGljdGlvbmFyeSAqIENGRGljdGlvbmFyeVJlZjsKQEAgLTUzLDE2
ICs1NywyMSBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NUTGluZSAqIENUTGluZVJlZjsKIHR5
cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RSdW4gKiBDVFJ1blJlZjsKIHR5cGVkZWYgY29uc3Qgc3Ry
dWN0IF9fQ1RUeXBlc2V0dGVyICogQ1RUeXBlc2V0dGVyUmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1
Y3QgX19BWFVJRWxlbWVudCAqQVhVSUVsZW1lbnRSZWY7CisjaWYgIVBMQVRGT1JNKElPUykKIHR5
cGVkZWYgc3RydWN0IF9OU1JhbmdlIE5TUmFuZ2U7CiAKIHR5cGVkZWYgVUludDMyIEZNRm9udDsK
IHR5cGVkZWYgRk1Gb250IEFUU1VGb250SUQ7CiB0eXBlZGVmIFVJbnQxNiBBVFNHbHlwaFJlZjsK
KyNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQ0EpCisjaWYgIVBMQVRGT1JNKElP
U19TSU1VTEFUT1IpCiB0eXBlZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSAqSU9TdXJmYWNlUmVmOwor
I2VuZGlmIC8vICFQTEFURk9STShJT1NfU0lNVUxBVE9SKQogI2VuZGlmCiAKKyNpZiAhUExBVEZP
Uk0oSU9TKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVT
CiB0eXBlZGVmIHN0cnVjdCBDR1BvaW50IE5TUG9pbnQ7CiB0eXBlZGVmIHN0cnVjdCBDR1JlY3Qg
TlNSZWN0OwpAQCAtNzAsNiArNzksMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IE5TUmVjdDsK
IHR5cGVkZWYgc3RydWN0IF9OU1BvaW50IE5TUG9pbnQ7CiB0eXBlZGVmIHN0cnVjdCBfTlNSZWN0
IE5TUmVjdDsKICNlbmRpZgorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyNpZiBQTEFURk9S
TShJT1MpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCiAK
ICNpZiBVU0UoQ0ZORVRXT1JLKQogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ0ZIVFRQQ29va2llU3Rv
cmFnZSogIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7CkBAIC0xMTksNyArMTMzLDcgQEAgdHlwZWRl
ZiBlbnVtIHsKICAgICB3a1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcKIH0gd2tQYXR0ZXJu
VGlsaW5nOwogZXh0ZXJuIHZvaWQgKCp3a0NHQ29udGV4dFJlc2V0Q2xpcCkoQ0dDb250ZXh0UmVm
KTsKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKKyNpZiAhUExB
VEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKIGV4
dGVybiBib29sICgqd2tDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hhZG93T2Zmc2V0cykoQ0dD
b250ZXh0UmVmKTsKICNlbmRpZgogZXh0ZXJuIENHUGF0dGVyblJlZiAoKndrQ0dQYXR0ZXJuQ3Jl
YXRlV2l0aEltYWdlQW5kVHJhbnNmb3JtKShDR0ltYWdlUmVmLCBDR0FmZmluZVRyYW5zZm9ybSwg
aW50KTsKQEAgLTEzNSw2ICsxNDksNyBAQCBleHRlcm4gQ0ZSZWFkU3RyZWFtUmVmICgqd2tDcmVh
dGVDdXN0b21DRlJlYWRTdHJlYW0pKHZvaWQgKigqZm9ybUNyZWF0ZSkoQ0ZSZWFkUwogZXh0ZXJu
IENGU3RyaW5nUmVmICgqd2tDb3B5Q0ZMb2NhbGl6YXRpb25QcmVmZXJyZWROYW1lKShDRlN0cmlu
Z1JlZik7CiBleHRlcm4gTlNTdHJpbmcqICgqd2tDb3B5TlNVUkxSZXNwb25zZVN0YXR1c0xpbmUp
KE5TVVJMUmVzcG9uc2UqKTsKIGV4dGVybiBDRkFycmF5UmVmICgqd2tDb3B5TlNVUkxSZXNwb25z
ZUNlcnRpZmljYXRlQ2hhaW4pKE5TVVJMUmVzcG9uc2UqKTsKKyNpZiAhUExBVEZPUk0oSU9TKQog
ZXh0ZXJuIHZvaWQgKCp3a0RyYXdCZXplbGVkVGV4dEZpZWxkQ2VsbCkoTlNSZWN0LCBCT09MIGVu
YWJsZWQpOwogZXh0ZXJuIHZvaWQgKCp3a0RyYXdUZXh0RmllbGRDZWxsRm9jdXNSaW5nKShOU1Rl
eHRGaWVsZENlbGwqLCBOU1JlY3QpOwogZXh0ZXJuIHZvaWQgKCp3a0RyYXdDYXBzTG9ja0luZGlj
YXRvcikoQ0dDb250ZXh0UmVmLCBDR1JlY3QpOwpAQCAtMTQzLDE2ICsxNTgsMjIgQEAgZXh0ZXJu
IHZvaWQgKCp3a0RyYXdGb2N1c1JpbmcpKENHQ29udGV4dFJlZiwgQ0dDb2xvclJlZiwgaW50IHJh
ZGl1cyk7CiBleHRlcm4gTlNGb250KiAoKndrR2V0Rm9udEluTGFuZ3VhZ2VGb3JSYW5nZSkoTlNG
b250KiwgTlNTdHJpbmcqLCBOU1JhbmdlKTsKIGV4dGVybiBOU0ZvbnQqICgqd2tHZXRGb250SW5M
YW5ndWFnZUZvckNoYXJhY3RlcikoTlNGb250KiwgVW5pQ2hhcik7CiBleHRlcm4gQk9PTCAoKndr
R2V0R2x5cGhUcmFuc2Zvcm1lZEFkdmFuY2VzKShDR0ZvbnRSZWYsIE5TRm9udCosIENHQWZmaW5l
VHJhbnNmb3JtKiwgQVRTR2x5cGhSZWYqLCBDR1NpemUqIGFkdmFuY2UpOworI2VuZGlmCisjaWYg
IVBMQVRGT1JNKElPUykKIGV4dGVybiB2b2lkICgqd2tEcmF3TWVkaWFTbGlkZXJUcmFjaykoQ0dD
b250ZXh0UmVmIGNvbnRleHQsIENHUmVjdCByZWN0LCBmbG9hdCB0aW1lTG9hZGVkLCBmbG9hdCBj
dXJyZW50VGltZSwKICAgICBmbG9hdCBkdXJhdGlvbiwgdW5zaWduZWQgc3RhdGUpOwogZXh0ZXJu
IHZvaWQgKCp3a0RyYXdNZWRpYVVJUGFydCkoaW50IHBhcnQsIENHQ29udGV4dFJlZiBjb250ZXh0
LCBDR1JlY3QgcmVjdCwgdW5zaWduZWQgc3RhdGUpOwogZXh0ZXJuIENGU3RyaW5nUmVmICgqd2tT
aWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpKHVuc2lnbmVkIGtleVNpemUsIENGU3Ry
aW5nUmVmIGNoYWxsZW5nZSwgQ0ZTdHJpbmdSZWYga2V5RGVzY3JpcHRpb24pOwogZXh0ZXJuIE5T
U3RyaW5nKiAoKndrR2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUpKE5TU3RyaW5nKik7
CiBleHRlcm4gTlNBcnJheSogKCp3a0dldEV4dGVuc2lvbnNGb3JNSU1FVHlwZSkoTlNTdHJpbmcq
KTsKKyNlbmRpZgogZXh0ZXJuIE5TU3RyaW5nKiAoKndrR2V0TUlNRVR5cGVGb3JFeHRlbnNpb24p
KE5TU3RyaW5nKik7CisjaWYgIVBMQVRGT1JNKElPUykKIGV4dGVybiBBVFNVRm9udElEICgqd2tH
ZXROU0ZvbnRBVFNVRm9udElkKShOU0ZvbnQqKTsKIGV4dGVybiBkb3VibGUgKCp3a0dldE5TVVJM
UmVzcG9uc2VDYWxjdWxhdGVkRXhwaXJhdGlvbikoTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UpOwor
I2VuZGlmCiBleHRlcm4gTlNEYXRlICooKndrR2V0TlNVUkxSZXNwb25zZUxhc3RNb2RpZmllZERh
dGUpKE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogZXh0ZXJu
IEJPT0wgKCp3a0dldE5TVVJMUmVzcG9uc2VNdXN0UmV2YWxpZGF0ZSkoTlNVUkxSZXNwb25zZSAq
cmVzcG9uc2UpOwogZXh0ZXJuIHZvaWQgKCp3a0dldFdoZWVsRXZlbnREZWx0YXMpKE5TRXZlbnQq
LCBmbG9hdCogZGVsdGFYLCBmbG9hdCogZGVsdGFZLCBCT09MKiBjb250aW51b3VzKTsKIGV4dGVy
biBVSW50OCAoKndrR2V0TlNFdmVudEtleUNoYXIpKE5TRXZlbnQgKik7CkBAIC0xOTEsNyArMjEy
LDkgQEAgZXh0ZXJuIE5TQXJyYXkgKigqd2tRVEdldFNpdGVzSW5NZWRpYURvd25sb2FkQ2FjaGUp
KCk7CiBleHRlcm4gdm9pZCAoKndrUVRDbGVhck1lZGlhRG93bmxvYWRDYWNoZUZvclNpdGUpKE5T
U3RyaW5nICpzaXRlKTsKIGV4dGVybiB2b2lkICgqd2tRVENsZWFyTWVkaWFEb3dubG9hZENhY2hl
KSgpOwogZXh0ZXJuIHZvaWQgKCp3a1NldENHRm9udFJlbmRlcmluZ01vZGUpKENHQ29udGV4dFJl
ZiwgTlNGb250KiwgQk9PTCk7CitleHRlcm4gdm9pZCAoKndrU2V0Q29va2llU3RvcmFnZVByaXZh
dGVCcm93c2luZ0VuYWJsZWQpKEJPT0wpOwogZXh0ZXJuIHZvaWQgKCp3a1NldERyYWdJbWFnZSko
TlNJbWFnZSosIE5TUG9pbnQgb2Zmc2V0KTsKKyNlbmRpZgogZXh0ZXJuIHZvaWQgKCp3a1NldE5T
VVJMQ29ubmVjdGlvbkRlZmVyc0NhbGxiYWNrcykoTlNVUkxDb25uZWN0aW9uICosIEJPT0wpOwog
ZXh0ZXJuIHZvaWQgKCp3a1NldE5TVVJMUmVxdWVzdFNob3VsZENvbnRlbnRTbmlmZikoTlNNdXRh
YmxlVVJMUmVxdWVzdCAqLCBCT09MKTsKIGV4dGVybiB2b2lkICgqd2tTZXRCYXNlQ1RNKShDR0Nv
bnRleHRSZWYsIENHQWZmaW5lVHJhbnNmb3JtKTsKQEAgLTIxNiwxMSArMjM5LDEzIEBAIGV4dGVy
biBib29sICgqd2tHZXRWZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3RlcnMpKENURm9udFJlZiwgY29u
c3QgVW5pQ2hhcltdLCBDR0dsCiAKIGV4dGVybiBCT09MICgqd2tVc2VTaGFyZWRNZWRpYVVJKSgp
OwogCisjaWYgIVBMQVRGT1JNKElPUykKIGV4dGVybiB2b2lkKiB3a0dldEh5cGhlbmF0aW9uTG9j
YXRpb25CZWZvcmVJbmRleDsKKyNlbmRpZgogCiBleHRlcm4gQ1RMaW5lUmVmICgqd2tDcmVhdGVD
VExpbmVXaXRoVW5pQ2hhclByb3ZpZGVyKShjb25zdCBVbmlDaGFyKiAoKnByb3ZpZGUpKENGSW5k
ZXggc3RyaW5nSW5kZXgsIENGSW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRy
aWJ1dGVzLCB2b2lkKiksIHZvaWQgKCpkaXNwb3NlKShjb25zdCBVbmlDaGFyKiBjaGFycywgdm9p
ZCopLCB2b2lkKik7CiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
OTAKKyNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTA5MAogZW51bSB7CiAgICAgd2tDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmcgPSAoMSA8
PCAwKSwKICAgICB3a0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgPSAoMSA8PCAxKQpA
QCAtMjM1LDExICsyNjAsMTIgQEAgZXh0ZXJuIENUVHlwZXNldHRlclJlZiAoKndrQ3JlYXRlQ1RU
eXBlc2V0dGVyV2l0aFVuaUNoYXJQcm92aWRlckFuZE9wdGlvbnMpKGNvbnMKIAogZXh0ZXJuIENH
U2l6ZSAoKndrQ1RSdW5HZXRJbml0aWFsQWR2YW5jZSkoQ1RSdW5SZWYpOwogCi0jaWYgUExBVEZP
Uk0oTUFDKSAmJiBVU0UoQ0EpCisjaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoQ0EpICYmICFQTEFU
Rk9STShJT1NfU0lNVUxBVE9SKQogZXh0ZXJuIENHQ29udGV4dFJlZiAoKndrSU9TdXJmYWNlQ29u
dGV4dENyZWF0ZSkoSU9TdXJmYWNlUmVmIHN1cmZhY2UsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlKTsKIGV4dGVybiBDR0ltYWdlUmVm
ICgqd2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UpKENHQ29udGV4dFJlZiBjb250ZXh0KTsK
ICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKIGV4dGVybiBpbnQgKCp3a1JlY29tbWVuZGVk
U2Nyb2xsZXJTdHlsZSkodm9pZCk7CiAKIGV4dGVybiBib29sICgqd2tFeGVjdXRhYmxlV2FzTGlu
a2VkT25PckJlZm9yZVNub3dMZW9wYXJkKSh2b2lkKTsKQEAgLTI1MCw3ICsyNzYsOSBAQCBleHRl
cm4gdm9pZCAoKndrU2V0Q3Jhc2hSZXBvcnRBcHBsaWNhdGlvblNwZWNpZmljSW5mb3JtYXRpb24p
KENGU3RyaW5nUmVmKTsKIGV4dGVybiBOU1VSTCAqKCp3a0FWQXNzZXRSZXNvbHZlZFVSTCkoQVZB
c3NldCopOwogCiBleHRlcm4gTlNDdXJzb3IgKigqd2tDdXJzb3IpKGNvbnN0IGNoYXIqKTsKKyNl
bmRpZiAvLyAhUExBVEZPUk0oSU9TKQogICAgIAorI2lmICFQTEFURk9STShJT1MpCiAjaWYgUExB
VEZPUk0oTUFDKQogZXh0ZXJuIE5TQXJyYXkgKigqd2tTcGVlY2hTeW50aGVzaXNHZXRWb2ljZUlk
ZW50aWZpZXJzKSh2b2lkKTsKIGV4dGVybiBOU1N0cmluZyAqKCp3a1NwZWVjaFN5bnRoZXNpc0dl
dERlZmF1bHRWb2ljZUlkZW50aWZpZXJGb3JMb2NhbGUpKE5TTG9jYWxlICopOwpAQCAtMjY2LDYg
KzI5NCwxMyBAQCBleHRlcm4gQ0ZUeXBlUmVmICgqd2tDb3B5QVhUZXh0TWFya2VyUmFuZ2VFbmQp
KENGVHlwZVJlZiByYW5nZSk7CiBleHRlcm4gQ0ZUeXBlUmVmICgqd2tDcmVhdGVBWFRleHRNYXJr
ZXIpKGNvbnN0IHZvaWQgKmJ5dGVzLCBzaXplX3QgbGVuKTsKIGV4dGVybiBCT09MICgqd2tHZXRC
eXRlc0Zyb21BWFRleHRNYXJrZXIpKENGVHlwZVJlZiB0ZXh0TWFya2VyLCB2b2lkICpieXRlcywg
c2l6ZV90IGxlbmd0aCk7CiBleHRlcm4gQVhVSUVsZW1lbnRSZWYgKCp3a0NyZWF0ZUFYVUlFbGVt
ZW50UmVmKShpZCBlbGVtZW50KTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisjaWYgUExB
VEZPUk0oSU9TKQorZXh0ZXJuIENHU2l6ZSAoKndrR2V0Vmlld3BvcnRTY3JlZW5TaXplKSh2b2lk
KTsKK2V4dGVybiB2b2lkICgqd2tTZXRMYXllckNvbnRlbnRzU2NhbGUpKENBTGF5ZXIgKik7Citl
eHRlcm4gZmxvYXQgKCp3a0dldFNjcmVlblNjYWxlRmFjdG9yKSh2b2lkKTsKKyNlbmRpZgogCiB0
eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGVVJMU3RvcmFnZVNlc3Npb24qIENGVVJMU3RvcmFnZVNl
c3Npb25SZWY7CiBleHRlcm4gQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiAoKndrQ3JlYXRlUHJpdmF0
ZVN0b3JhZ2VTZXNzaW9uKShDRlN0cmluZ1JlZik7CkBAIC0yOTcsMTcgKzMzMiwyMSBAQCBleHRl
cm4gQ0ZBcnJheVJlZiAoKndrQ0ZVUkxSZXF1ZXN0Q29weUhUVFBSZXF1ZXN0Qm9keVBhcnRzKShD
RlVSTFJlcXVlc3RSZWYpOwogZXh0ZXJuIHZvaWQgKCp3a0NGVVJMUmVxdWVzdFNldEhUVFBSZXF1
ZXN0Qm9keVBhcnRzKShDRk11dGFibGVVUkxSZXF1ZXN0UmVmLCBDRkFycmF5UmVmIGJvZHlQYXJ0
cyk7CiBleHRlcm4gdm9pZCAoKndrU2V0UmVxdWVzdFN0b3JhZ2VTZXNzaW9uKShDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmLCBDRk11dGFibGVVUkxSZXF1ZXN0UmVmKTsKICNlbmRpZgorI2lmICFQTEFU
Rk9STShJT1MpCiBleHRlcm4gdm9pZCAoKndrU2V0TWV0YWRhdGFVUkwpKE5TU3RyaW5nICp1cmxT
dHJpbmcsIE5TU3RyaW5nICpyZWZlcnJlciwgTlNTdHJpbmcgKnBhdGgpOworI2VuZGlmCiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogI2ltcG9ydCA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KIAogZXh0ZXJu
IGRpc3BhdGNoX3NvdXJjZV90ICgqd2tDcmVhdGVWTVByZXNzdXJlRGlzcGF0Y2hPbk1haW5RdWV1
ZSkodm9pZCk7CisjZW5kaWYKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTA5MAorI2lmICFQTEFURk9STShJT1MpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTA5MAogZXh0ZXJuIGRpc3BhdGNoX3NvdXJjZV90ICgqd2tDcmVhdGVNZW1vcnlT
dGF0dXNQcmVzc3VyZUNyaXRpY2FsRGlzcGF0Y2hPbk1haW5RdWV1ZSkodm9pZCk7CiAjZW5kaWYK
ICAgICAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKKyNpZiAh
UExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAK
IGV4dGVybiBib29sICgqd2tFeGVjdXRhYmxlV2FzTGlua2VkT25PckJlZm9yZUxpb24pKHZvaWQp
OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJG
b250Q2FjaGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViRm9udENhY2hlLm1t
CmluZGV4IGU0MDc1M2U1OTQzYjNjYTE3MzA3NTU0ZTIxZDE4Mjc3Mzg4MmZkZTMuLjhjODI2MGIw
MmIyYjA5OGI5ZWRkZWJlMGFlYjEzNTJjMWY0ZWUwOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJGb250Q2FjaGUubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYkZvbnRDYWNoZS5tbQpAQCAtMjg3LDEyICsyODcsMTAgQEAgc3RhdGljIGlu
bGluZSBGb250VHJhaXRzTWFzayB0b1RyYWl0c01hc2soTlNGb250VHJhaXRNYXNrIGFwcEtpdFRy
YWl0cywgTlNJbnRlZ2UKICAgICByZXR1cm4gW3NlbGYgaW50ZXJuYWxGb250V2l0aEZhbWlseTpk
ZXNpcmVkRmFtaWx5IHRyYWl0czpkZXNpcmVkVHJhaXRzIHdlaWdodDpkZXNpcmVkV2VpZ2h0IHNp
emU6c2l6ZV07CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQogKyAoTlNGb250ICopZm9udFdpdGhG
YW1pbHk6KE5TU3RyaW5nICopZGVzaXJlZEZhbWlseSB0cmFpdHM6KE5TRm9udFRyYWl0TWFzaylk
ZXNpcmVkVHJhaXRzIHNpemU6KGZsb2F0KXNpemUKIHsKICAgICBpbnQgZGVzaXJlZFdlaWdodCA9
IChkZXNpcmVkVHJhaXRzICYgTlNCb2xkRm9udE1hc2spID8gOSA6IDU7CiAgICAgcmV0dXJuIFtz
ZWxmIGZvbnRXaXRoRmFtaWx5OmRlc2lyZWRGYW1pbHkgdHJhaXRzOmRlc2lyZWRUcmFpdHMgd2Vp
Z2h0OmRlc2lyZWRXZWlnaHQgc2l6ZTpzaXplXTsKIH0KLSNlbmRpZgogCiBAZW5kCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5jcHAKaW5kZXggNWFi
MDQyZjM1NzUzMjQ4YTRmMjYzZjYwMTRlYmJmNTk2YzY0NDMxMS4uNGE2MWRmNGM5ODg1ZGE3YzBh
Y2M4NjRiMDU2OTM3MWEyOTU3YjcwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmNwcApAQCAtMzMsNiArMzMsMTAgQEAKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCisjaWYg
UExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIEJsb2JSZWdpc3RyeSYgYmxvYlJlZ2lzdHJ5KCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCmlu
ZGV4IDZiYjVjYWU1YmFiNGJiMDcyZjY1NmE5ODNiZGViMDQwYTY4ODQ5MjMuLjIzMWFmNzhhYWMz
YmFlMjM1NjBlMzliYWExYjA3Yzg5NjMwYTQ0YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcApAQCAtNDMsNiArNDMsMTAg
QEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBCbG9iUmVnaXN0cnlJbXBsOjp+QmxvYlJl
Z2lzdHJ5SW1wbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0NyZWRlbnRpYWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlh
bC5oCmluZGV4IDFhNWE0N2U1MjlmNzYzOGM5MTUzYzhmYzcyYzE4M2MzYTVjYTRjNDQuLjIxNjZi
OWJmYTk3MzU2MDUyMmM4MmU2NjM1MDc5OWVlYjU4OTFlMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2RlZmluZSBDRVJUSUZJQ0FURV9DUkVERU5U
SUFMU19TVVBQT1JURUQgUExBVEZPUk0oTUFDKQorI2RlZmluZSBDRVJUSUZJQ0FURV9DUkVERU5U
SUFMU19TVVBQT1JURUQgKFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oTUFDKSkKIAogI2lmIENF
UlRJRklDQVRFX0NSRURFTlRJQUxTX1NVUFBPUlRFRAogI2luY2x1ZGUgPFNlY3VyaXR5L1NlY0Jh
c2UuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVu
dGlhbFN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50
aWFsU3RvcmFnZS5jcHAKaW5kZXggOTU5NTcyNDg3ZTk5OTM5MWZlNWMwYTNhNzNkN2RmNTVmMjZj
ODllZS4uZDg2ZmQ4MWM0YzA2YjE3YTM2YjM3YmVmNjNjNmM5YmExMjQyODgxNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5j
cHAKQEAgLTM2LDYgKzM2LDEwIEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAi
V2ViQ29yZVRocmVhZC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdHlwZWRl
ZiBIYXNoTWFwPFByb3RlY3Rpb25TcGFjZSwgQ3JlZGVudGlhbD4gUHJvdGVjdGlvblNwYWNlVG9D
cmVkZW50aWFsTWFwOwpAQCAtOTMsNiArOTcsMTEgQEAgdm9pZCBDcmVkZW50aWFsU3RvcmFnZTo6
c2V0KGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYK
ICAgICBBU1NFUlQocHJvdGVjdGlvblNwYWNlLmlzUHJveHkoKSB8fCB1cmwuaXNWYWxpZCgpKTsK
IAogICAgIHByb3RlY3Rpb25TcGFjZVRvQ3JlZGVudGlhbE1hcCgpLnNldChwcm90ZWN0aW9uU3Bh
Y2UsIGNyZWRlbnRpYWwpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHNhdmVUb1BlcnNpc3Rl
bnRTdG9yYWdlKHByb3RlY3Rpb25TcGFjZSwgY3JlZGVudGlhbCk7CisjZW5kaWYKKwogICAgIGlm
ICghcHJvdGVjdGlvblNwYWNlLmlzUHJveHkoKSkgewogICAgICAgICBvcmlnaW5zV2l0aENyZWRl
bnRpYWxzKCkuYWRkKG9yaWdpblN0cmluZ0Zyb21VUkwodXJsKSk7CiAKQEAgLTE2Myw2ICsxNzIs
MTUgQEAgQ3JlZGVudGlhbCBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0KGNvbnN0IFVSTCYgdXJsKQog
ICAgIHJldHVybiBwcm90ZWN0aW9uU3BhY2VUb0NyZWRlbnRpYWxNYXAoKS5nZXQoaXRlci0+dmFs
dWUpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBDcmVkZW50aWFsU3RvcmFnZTo6Y2xl
YXJDcmVkZW50aWFscygpCit7CisgICAgcGF0aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcCgp
LmNsZWFyKCk7CisgICAgb3JpZ2luc1dpdGhDcmVkZW50aWFscygpLmNsZWFyKCk7CisgICAgcHJv
dGVjdGlvblNwYWNlVG9DcmVkZW50aWFsTWFwKCkuY2xlYXIoKTsKK30KKyNlbmRpZgorCiB2b2lk
IENyZWRlbnRpYWxTdG9yYWdlOjpzZXRQcml2YXRlTW9kZShib29sIG1vZGUpCiB7CiAgICAgaWYg
KCFtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVk
ZW50aWFsU3RvcmFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50
aWFsU3RvcmFnZS5oCmluZGV4IGIzYmQxZmQ3ODM5MmEyNjdlMzA5ZmZjY2NmNDdhMjFhZTA2ZTg5
OWUuLjNjOGM3NDg3NTIwMjA1OWYxNzFkMWQyNGFiY2FkM2ZjOTVkODU1NDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmgKQEAg
LTQyLDYgKzQyLDExIEBAIHB1YmxpYzoKICAgICAvLyBPUyBwZXJzaXN0ZW50IHN0b3JhZ2UuCiAg
ICAgc3RhdGljIENyZWRlbnRpYWwgZ2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFByb3Rl
Y3Rpb25TcGFjZSYpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyB2b2lkIHNhdmVU
b1BlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYsIGNvbnN0IENyZWRlbnRp
YWwmKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCk7CisjZW5kaWYKKwogICAg
IC8vIFRoZXNlIG1ldGhvZHMgd29yayBmb3IgYXV0aGVudGljYXRpb24gc2NoZW1lcyB0aGF0IHN1
cHBvcnQgc2VuZGluZyBjcmVkZW50aWFscyB3aXRob3V0IHdhaXRpbmcgZm9yIGEgcmVxdWVzdC4g
RS5nLiwgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24gc2NoZW1lCiAgICAgLy8gYSBjbGll
bnQgc2hvdWxkIGFzc3VtZSB0aGF0IGFsbCBwYXRocyBhdCBvciBkZWVwZXIgdGhhbiB0aGUgZGVw
dGggb2YgYSBrbm93biBwcm90ZWN0ZWQgcmVzb3VyY2Ugc2hhcmUgYXJlIHdpdGhpbiB0aGUgc2Ft
ZSBwcm90ZWN0aW9uIHNwYWNlLgogICAgIHN0YXRpYyBib29sIHNldChjb25zdCBDcmVkZW50aWFs
JiwgY29uc3QgVVJMJik7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgVVJMIGNvcnJlc3BvbmRzIHRv
IGEga25vd24gcHJvdGVjdGlvbiBzcGFjZSwgc28gY3JlZGVudGlhbHMgY291bGQgYmUgdXBkYXRl
ZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0
YXRlTm90aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0
YXRlTm90aWZpZXIuaAppbmRleCAzMzI0N2M5N2ZjOTAyOTFlMTY1YzA0NWEzNmE2ZjYzMWFhYmYz
OWE5Li5mOWY2MWQ1Y2UzMzFjOGFlNDY5MjAxMDQ2ZGRjMTgwNzJkZGE0OTJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmll
ci5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1B
QykgJiYgIVBMQVRGT1JNKElPUykKIAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNs
dWRlICJUaW1lci5oIgpAQCAtNjIsNiArNjIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkTmV0
d29ya1N0YXRlQ2hhbmdlTGlzdGVuZXIoTmV0d29ya1N0YXRlQ2hhbmdlTGlzdGVuZXIpOwogCiAg
ICAgYm9vbCBvbkxpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzT25MaW5lOyB9CisgICAgCisjaWYg
UExBVEZPUk0oSU9TKQorICAgIHZvaWQgc2V0SXNPbkxpbmUoYm9vbCk7CisjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgdm9pZCBuZXR3b3JrU3RhdGVDaGFuZ2UoYm9vbCBv
bmxpbmUpOwpAQCAtNzQsNyArNzgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbm90aWZ5TmV0d29y
a1N0YXRlQ2hhbmdlKCk7CiAgICAgdm9pZCB1cGRhdGVTdGF0ZSgpOwogCi0jaWYgUExBVEZPUk0o
TUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKICAgICB2b2lkIG5ldHdv
cmtTdGF0ZUNoYW5nZVRpbWVyRmlyZWQoVGltZXI8TmV0d29ya1N0YXRlTm90aWZpZXI+Kik7CiAK
ICAgICBzdGF0aWMgdm9pZCBkeW5hbWljU3RvcmVDYWxsYmFjayhTQ0R5bmFtaWNTdG9yZVJlZiwg
Q0ZBcnJheVJlZiBjaGFuZ2VkS2V5cywgdm9pZCAqaW5mbyk7IApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAppbmRleCAwYzg1MmRjMmRj
NmM1MGNhYTZiYjVmY2E3YTJlMDU5YTIxN2IzZDNhLi45M2UwZjlhNGNiMGMzMDgxMmZjOTAyMzJm
MmYyOGJkMTQ2ZmU5N2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlLmNwcApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIFBMQVRG
T1JNKElPUykKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RhdGljIGJvb2wgc2hvdWxkRm9yY2VDb250ZW50U25pZmZpbmc7CkBA
IC00Miw3ICs0NiwxMSBAQCBzdGF0aWMgYm9vbCBzaG91bGRGb3JjZUNvbnRlbnRTbmlmZmluZzsK
IHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlc291cmNlSGFuZGxlOjpCdWlsdGluQ29u
c3RydWN0b3I+IEJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwOwogc3RhdGljIEJ1
aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwJiBidWlsdGluUmVzb3VyY2VIYW5kbGVD
b25zdHJ1Y3Rvck1hcCgpCiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEFTU0VSVChXZWJUaHJl
YWRJc0xvY2tlZE9yRGlzYWJsZWQoKSk7CisjZWxzZQogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisjZW5kaWYKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEJ1aWx0aW5SZXNvdXJjZUhhbmRs
ZUNvbnN0cnVjdG9yTWFwLCBtYXAsICgpKTsKICAgICByZXR1cm4gbWFwOwogfQpAQCAtMTUxLDIz
ICsxNTksMjMgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50KFJlc291cmNlSGFuZGxl
Q2xpZW50KiBjbGllbnQpCiAvLyBSZXNvdXJjZUhhbmRsZSBuZXZlciB1c2VzIGFzeW5jIGNsaWVu
dCBjYWxscyBvbiB0aGVzZSBwbGF0Zm9ybXMgeWV0Lgogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29u
dGludWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKIHsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFJlc291
cmNlSGFuZGxlOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpCiB7Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhh
bmRsZTo6Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShib29sKQogewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKICNpZiBVU0Uo
UFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29u
dGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpCiB7Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KICNlbmRpZgog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmNwcAppbmRleCBlZjQyMTkzNDM1NDc5ZTdiOWRjYWI0NDkzYTlkNGM4
ZDUwODI2MmYxLi4wZWQ4Mjg5OTNhMWRiNjkyNmE0MWZiMmMwZTVhMWU1OWU0YjYyM2YyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1
ZXN0QmFzZS5jcHAKQEAgLTM4LDYgKzM4LDEwIEBAIGRvdWJsZSBSZXNvdXJjZVJlcXVlc3RCYXNl
OjpzX2RlZmF1bHRUaW1lb3V0SW50ZXJ2YWwgPSBJTlRfTUFYOwogZG91YmxlIFJlc291cmNlUmVx
dWVzdEJhc2U6OnNfZGVmYXVsdFRpbWVvdXRJbnRlcnZhbCA9IDA7CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKElPUykKK2Jvb2wgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c19kZWZhdWx0QWxsb3dDb29r
aWVzID0gdHJ1ZTsKKyNlbmRpZgorCiBpbmxpbmUgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBSZXNv
dXJjZVJlcXVlc3RCYXNlOjphc1Jlc291cmNlUmVxdWVzdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
ICpzdGF0aWNfY2FzdDxjb25zdCBSZXNvdXJjZVJlcXVlc3QqPih0aGlzKTsKQEAgLTUyOCw0ICs1
MzIsMTYgQEAgdW5zaWduZWQgaW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVy
SG9zdCgpCiB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgUmVzb3VyY2VSZXF1
ZXN0QmFzZTo6c2V0RGVmYXVsdEFsbG93Q29va2llcyhib29sIGFsbG93Q29va2llcykKK3sKKyAg
ICBzX2RlZmF1bHRBbGxvd0Nvb2tpZXMgPSBhbGxvd0Nvb2tpZXM7Cit9CisKK2Jvb2wgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZTo6ZGVmYXVsdEFsbG93Q29va2llcygpCit7CisgICAgcmV0dXJuIHNfZGVm
YXVsdEFsbG93Q29va2llczsKK30KKyNlbmRpZgorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCmluZGV4IDE0MDU3Y2Iy
N2Y0ZjgyM2U1OWFiYzQyYTg4MGY4NDAxYzVlNWEwYjkuLmFhMDYwMTk1M2Q4MDg0NTVkNDRiNzA1
YjY5ZmJhYjUwZjAwYTYwNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCkBAIC0xNDIsNiArMTQyLDExIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGRvdWJsZSBkZWZhdWx0VGltZW91dEludGVy
dmFsKCk7IC8vIE1heSByZXR1cm4gMCB3aGVuIHVzaW5nIHBsYXRmb3JtIGRlZmF1bHQuCiAgICAg
ICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRUaW1lb3V0SW50ZXJ2YWwoZG91YmxlKTsKIAorI2lm
IFBMQVRGT1JNKElPUykKKyAgICAgICAgc3RhdGljIGJvb2wgZGVmYXVsdEFsbG93Q29va2llcygp
OworICAgICAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0QWxsb3dDb29raWVzKGJvb2wpOworI2Vu
ZGlmCisKICAgICAgICAgc3RhdGljIGJvb2wgY29tcGFyZShjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAogICAgIHByb3RlY3RlZDoKQEAgLTE2Myw3ICsx
NjgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX2NhY2hlUG9saWN5
KHBvbGljeSkKICAgICAgICAgICAgICwgbV90aW1lb3V0SW50ZXJ2YWwoc19kZWZhdWx0VGltZW91
dEludGVydmFsKQogICAgICAgICAgICAgLCBtX2h0dHBNZXRob2QoQVNDSUlMaXRlcmFsKCJHRVQi
KSkKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgLCBtX2FsbG93Q29va2llcyh0cnVl
KQorI2Vsc2UKKyAgICAgICAgICAgICwgbV9hbGxvd0Nvb2tpZXMoUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6ZGVmYXVsdEFsbG93Q29va2llcygpKQorI2VuZGlmCiAgICAgICAgICAgICAsIG1fcmVzb3Vy
Y2VSZXF1ZXN0VXBkYXRlZCh0cnVlKQogICAgICAgICAgICAgLCBtX3BsYXRmb3JtUmVxdWVzdFVw
ZGF0ZWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcmVzb3VyY2VSZXF1ZXN0Qm9keVVwZGF0ZWQo
dHJ1ZSkKQEAgLTIwNCw2ICsyMTMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgYXNSZXNvdXJjZVJlcXVlc3QoKSBjb25zdDsKIAogICAgICAg
ICBzdGF0aWMgZG91YmxlIHNfZGVmYXVsdFRpbWVvdXRJbnRlcnZhbDsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgIHN0YXRpYyBib29sIHNfZGVmYXVsdEFsbG93Q29va2llczsKKyNlbmRpZgog
ICAgIH07CiAKICAgICBib29sIGVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZSYsIGNvbnN0IFJlc291cmNlUmVxdWVzdEJhc2UmKTsKQEAgLTIzMCw3ICsy
NDIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfTsKICAgICAKICAgICB1bnNpZ25lZCBp
bml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCk7Ci0KKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgdm9pZCBpbml0aWFsaXplSFRUUENvbm5lY3Rpb25TZXR0aW5nc09uU3Rh
cnR1cCgpOworI2VuZGlmCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBSZXNv
dXJjZVJlcXVlc3RCYXNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvQ3JlZGVudGlhbFN0b3JhZ2VDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL0NyZWRlbnRpYWxTdG9yYWdlQ0ZOZXQuY3BwCmluZGV4IGMzNGY2ZjY2
NWNhNzQ1MjMyOTliOTFjMTc0MTkzMGU2NzE0YmZjYjkuLmM3MjUyYzM4NTQwM2U2NWM1NTA3ZTQ5
ZTUyNWRkMzAzYWYxYjNjYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvQ3JlZGVudGlhbFN0b3JhZ2VDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9DcmVkZW50aWFsU3RvcmFnZUNGTmV0LmNwcApAQCAtMzksNiAr
MzksMTAgQEAKICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50
ZXJmYWNlLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDRk5ldHdv
cmsvQ0ZVUkxDcmVkZW50aWFsU3RvcmFnZS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogQ3JlZGVudGlhbCBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0RnJvbVBlcnNpc3RlbnRTdG9y
YWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQpAQCAtNDgsNiArNTIs
MjMgQEAgQ3JlZGVudGlhbCBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0RnJvbVBlcnNpc3RlbnRTdG9y
YWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHIKICAgICByZXR1cm4gY29yZShjcmVkZW50aWFs
Q0YuZ2V0KCkpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBDcmVkZW50aWFsU3RvcmFn
ZTo6c2F2ZVRvUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0
aW9uU3BhY2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCit7CisgICAgUmV0YWluUHRy
PENGVVJMQ3JlZGVudGlhbFN0b3JhZ2VSZWY+IHN0b3JhZ2VDRiA9IGFkb3B0Q0YoQ0ZVUkxDcmVk
ZW50aWFsU3RvcmFnZUNyZWF0ZSgwKSk7CisgICAgUmV0YWluUHRyPENGVVJMUHJvdGVjdGlvblNw
YWNlUmVmPiBwcm90ZWN0aW9uU3BhY2VDRiA9IGFkb3B0Q0YoY3JlYXRlQ0YocHJvdGVjdGlvblNw
YWNlKSk7CisKKyAgICBpZiAoY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpID09IENyZWRlbnRpYWxQ
ZXJzaXN0ZW5jZU5vbmUpIHsKKyAgICAgICAgQ3JlZGVudGlhbCBzZXNzaW9uQ3JlZGVudGlhbChj
cmVkZW50aWFsLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uKTsKKyAgICAgICAgUmV0
YWluUHRyPENGVVJMQ3JlZGVudGlhbFJlZj4gc2Vzc2lvbkNyZWRlbnRpYWxDRiA9IGFkb3B0Q0Yo
Y3JlYXRlQ0Yoc2Vzc2lvbkNyZWRlbnRpYWwpKTsKKyAgICAgICAgQ0ZVUkxDcmVkZW50aWFsU3Rv
cmFnZVNldERlZmF1bHRDcmVkZW50aWFsRm9yUHJvdGVjdGlvblNwYWNlKHN0b3JhZ2VDRi5nZXQo
KSwgc2Vzc2lvbkNyZWRlbnRpYWxDRi5nZXQoKSwgcHJvdGVjdGlvblNwYWNlQ0YuZ2V0KCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIFJldGFpblB0cjxDRlVSTENyZWRlbnRpYWxSZWY+IGNyZWRl
bnRpYWxDRiA9IGFkb3B0Q0YoY3JlYXRlQ0YoY3JlZGVudGlhbCkpOworICAgICAgICBDRlVSTENy
ZWRlbnRpYWxTdG9yYWdlU2V0RGVmYXVsdENyZWRlbnRpYWxGb3JQcm90ZWN0aW9uU3BhY2Uoc3Rv
cmFnZUNGLmdldCgpLCBjcmVkZW50aWFsQ0YuZ2V0KCksIHByb3RlY3Rpb25TcGFjZUNGLmdldCgp
KTsKKyAgICB9Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gVVNFKENGTkVUV09SSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvRE5TQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9ETlNDRk5ldC5jcHAKaW5kZXggMDc1YWE2YmNhNWUyNTY0N2FlYmU5ZjEyZDY5ZDZhYjZjODNl
NDZjMy4uZTNmMWMyYjkxMmM4ZWM1YmRkYjY4MThkZTRhNzUyZjZiMTk1NTFiNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5jcHAKQEAgLTM3LDYg
KzM3LDEwIEBACiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxDRk5ldHdv
cmsvQ0ZOZXR3b3JrLmg+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlICJM
b2FkZXJSdW5Mb29wQ0YuaCIKICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZOZXR3b3JrLmg+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Byb3h5U2VydmVyQ0ZO
ZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Qcm94eVNlcnZlckNG
TmV0LmNwcAppbmRleCA3MTExOGQyZWViMWZmOTUyYTE1OTIzMGMwYmM0Mzg2MmQ5NDRhNmZhLi45
ZjE0NzEyNjk3ZTQ5ZWI2NTVkNjhhNjhmMmQ1NzQzYmMxOTJlNjY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Byb3h5U2VydmVyQ0ZOZXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUHJveHlTZXJ2ZXJDRk5ldC5jcHAK
QEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogCi0jaWYgUExBVEZPUk0oV0lOKQorI2lmIFBMQVRGT1JNKElP
UykgfHwgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUgPENGTmV0d29yay9DRk5ldHdvcmsuaD4KICNl
bmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jl
c291cmNlUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNv
dXJjZVJlcXVlc3QuaAppbmRleCA2Y2YyNmFiNGMzZWY4NGEwNGNlY2U4ZmFkZTk4ZDdkOGNhMjM1
ZDcyLi4zYjg5ZjNiNDQ2NmRjMDViNTk4YmRkOGQ2MTIxZGM4MzhjNWI2ZjM1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0LmgK
QEAgLTQzLDIyICs0MywzNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAg
ICAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwpIAogICAgICAgICAgICAgOiBS
ZXNvdXJjZVJlcXVlc3RCYXNlKFVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIFVzZVByb3RvY29s
Q2FjaGVQb2xpY3kpCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgLCBtX21haW5SZXNv
dXJjZVJlcXVlc3QoZmFsc2UpCisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAg
ICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFVSTCYgdXJsKSAKICAgICAgICAgICAgIDogUmVzb3Vy
Y2VSZXF1ZXN0QmFzZSh1cmwsIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisjaWYgUExBVEZPUk0o
SU9TKQorICAgICAgICAgICAgLCBtX21haW5SZXNvdXJjZVJlcXVlc3QoZmFsc2UpCisjZW5kaWYK
ICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFVS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGlj
eSBwb2xpY3kgPSBVc2VQcm90b2NvbENhY2hlUG9saWN5KSAKICAgICAgICAgICAgIDogUmVzb3Vy
Y2VSZXF1ZXN0QmFzZSh1cmwsIHBvbGljeSkKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICAg
ICAsIG1fbWFpblJlc291cmNlUmVxdWVzdChmYWxzZSkKKyNlbmRpZgogICAgICAgICB7CiAgICAg
ICAgICAgICBzZXRIVFRQUmVmZXJyZXIocmVmZXJyZXIpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBSZXNvdXJjZVJlcXVlc3QoKQogICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RC
YXNlKFVSTCgpLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAgICAgICAgICwgbV9tYWluUmVzb3VyY2VSZXF1ZXN0KGZhbHNlKQorI2VuZGlmCiAgICAgICAg
IHsKICAgICAgICAgfQogICAgICAgICAKQEAgLTcwLDYgKzgyLDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIFJlc291cmNlUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1ZXN0
KQogICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKCkKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgICAgICAsIG1fbWFpblJlc291cmNlUmVxdWVzdChmYWxzZSkKKyNlbmRpZgogICAg
ICAgICAgICAgLCBtX2NmUmVxdWVzdChjZlJlcXVlc3QpCiAgICAgICAgIHsKICNpZiBQTEFURk9S
TShNQUMpCkBAIC03OSw2ICs5NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbHNlCiAgICAg
ICAgIFJlc291cmNlUmVxdWVzdChOU1VSTFJlcXVlc3QgKm5zUmVxdWVzdCkKICAgICAgICAgICAg
IDogUmVzb3VyY2VSZXF1ZXN0QmFzZSgpCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAg
LCBtX21haW5SZXNvdXJjZVJlcXVlc3QoZmFsc2UpCisjZW5kaWYKICAgICAgICAgICAgICwgbV9u
c1JlcXVlc3QobnNSZXF1ZXN0KQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTEwOSw2ICsxMjcs
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgYm9vbCB1c2VRdWlja0xv
b2tSZXNvdXJjZUNhY2hpbmdRdWlya3MoKTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICAgICB2b2lkIHNldE1haW5SZXNvdXJjZVJlcXVlc3QoYm9vbCBpc01haW5SZXNvdXJjZVJl
cXVlc3QpIGNvbnN0IHsgbV9tYWluUmVzb3VyY2VSZXF1ZXN0ID0gaXNNYWluUmVzb3VyY2VSZXF1
ZXN0OyB9CisgICAgICAgIGJvb2wgaXNNYWluUmVzb3VyY2VSZXF1ZXN0KCkgY29uc3QgeyByZXR1
cm4gbV9tYWluUmVzb3VyY2VSZXF1ZXN0OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBtdXRh
YmxlIGJvb2wgbV9tYWluUmVzb3VyY2VSZXF1ZXN0OworI2VuZGlmCisKICAgICBwcml2YXRlOgog
ICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0QmFzZTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENG
TmV0LmNwcAppbmRleCA2OGZiYmZhZjliMjQ3ZWI3MWM2M2FmY2Q2ZDA1ZGMwN2ZkOTVlMzg1Li40
YTI2MjNmYzY2NWM4ZTRiNTJjY2MxNDNiY2U2NTZhZDM5NjE4OGQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENG
TmV0LmNwcApAQCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgIkZvcm1EYXRhU3RyZWFtQ0ZOZXQu
aCIKICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxSZXF1ZXN0UHJpdi5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q0ZOZXR3b3Jr
L0NGTmV0d29ya0Nvbm5lY3Rpb25DYWNoZVByaXYuaD4KKyNlbmRpZgogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShNQUMpCkBAIC01MCw3ICs1MywxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
KyNpZiBQTEFURk9STShJT1MpCitib29sIFJlc291cmNlUmVxdWVzdDo6c19odHRwUGlwZWxpbmlu
Z0VuYWJsZWQgPSB0cnVlOworI2Vsc2UKIGJvb2wgUmVzb3VyY2VSZXF1ZXN0OjpzX2h0dHBQaXBl
bGluaW5nRW5hYmxlZCA9IGZhbHNlOworI2VuZGlmCiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogCkBA
IC0yMjIsMTAgKzIyOSwzMyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9y
bUhUVFBCb2R5KCkKICNlbmRpZgogfQogCit2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBkYXRlRnJv
bURlbGVnYXRlUHJlc2VydmluZ09sZEhUVFBCb2R5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgZGVs
ZWdhdGVQcm92aWRlZFJlcXVlc3QpCit7CisgICAgUmVmUHRyPEZvcm1EYXRhPiBvbGRIVFRQQm9k
eSA9IGh0dHBCb2R5KCk7CisKKyAgICAqdGhpcyA9IGRlbGVnYXRlUHJvdmlkZWRSZXF1ZXN0Owor
ICAgIHNldEhUVFBCb2R5KG9sZEhUVFBCb2R5LnJlbGVhc2UoKSk7Cit9CisKIHZvaWQgUmVzb3Vy
Y2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlUmVxdWVzdCgpCiB7CiAgICAgaWYgKCFtX2NmUmVx
dWVzdCkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzk5
MTM1MjY+CisgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1pbWljIHRoZSBzdWJ0bGUgYmVo
YXZpb3VyIG9mIHRoZSBGb3VuZGF0aW9uIGJhc2VkIFJlc291cmNlUmVxdWVzdAorICAgICAgICAv
LyBjb2RlLiBUaGF0IGNvZGUgZG9lcyBub3QgcmVzZXQgbV9odHRwTWV0aG9kIGlmIHRoZSBOU1VS
TFJlcXVlc3QgaXMgbmlsLiBJIGZpbGVkCisgICAgICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzMzY+IHRvIHRyYWNrIHRoYXQuCisgICAgICAgIC8vIEFu
b3RoZXIgcmVsYXRlZCBidWcgaXMgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02NjM1MD4uIEZpeGluZyB0aGF0CisgICAgICAgIC8vIHdvdWxkLCBpZGVhbGx5LCBhbGxv
dyB1cyB0byBub3QgaGF2ZSB0aGlzIGhhY2suIEJ1dCB1bmZvcnR1bmF0ZWx5IHRoYXQgY2F1c2Vk
IGxheW91dCB0ZXN0CisgICAgICAgIC8vIGZhaWx1cmVzLgorICAgICAgICAvLyBSZW1vdmFsIG9m
IHRoaXMgaGFjayBpcyB0cmFja2VkIGJ5IDxyZGFyOi8vcHJvYmxlbS85OTcwNDk5Pi4KKworICAg
ICAgICBTdHJpbmcgaHR0cE1ldGhvZCA9IG1faHR0cE1ldGhvZDsKICAgICAgICAgKnRoaXMgPSBS
ZXNvdXJjZVJlcXVlc3QoKTsKKyAgICAgICAgbV9odHRwTWV0aG9kID0gaHR0cE1ldGhvZDsKKyNl
bHNlCisgICAgICAgICp0aGlzID0gUmVzb3VyY2VSZXF1ZXN0KCk7CisjZW5kaWYKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMzA3LDggKzMzNywxMCBAQCB2b2lkIFJlc291cmNlUmVxdWVz
dDo6c2V0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lv
bikKICNpZiBQTEFURk9STShNQUMpCiB2b2lkIFJlc291cmNlUmVxdWVzdDo6YXBwbHlXZWJBcmNo
aXZlSGFja0Zvck1haWwoKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gSGFjayBiZWNh
dXNlIE1haWwgY2hlY2tzIGZvciB0aGlzIHByb3BlcnR5IHRvIGRldGVjdCBkYXRhIC8gYXJjaGl2
ZSBsb2FkcwogICAgIF9DRlVSTFJlcXVlc3RTZXRQcm90b2NvbFByb3BlcnR5KGNmVVJMUmVxdWVz
dChEb05vdFVwZGF0ZUhUVFBCb2R5KSwgQ0ZTVFIoIldlYkRhdGFSZXF1ZXN0IiksIENGU1RSKCIi
KSk7CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0zODMsNSArNDE1LDIxIEBAIHVuc2lnbmVkIGlu
aXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKQogCiAgICAgcmV0dXJu
IG1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdDsKIH0KKyAgICAKKyNpZiBQTEFURk9S
TShJT1MpCit2b2lkIGluaXRpYWxpemVIVFRQQ29ubmVjdGlvblNldHRpbmdzT25TdGFydHVwKCkK
K3sKKyAgICAvLyBUaGlzIG5lZWQgdG8gYmUgY2FsbGVkIGZyb20gV2ViS2l0SW5pdGlhbGl6ZSBz
byB0aGUgY2FsbHMgaGFwcGVuIGVhcmx5IGVub3VnaCwgYmVmb3JlIGFueSByZXF1ZXN0cyBhcmUg
bWFkZS4gPHJkYXI6Ly9wcm9ibGVtLzk2OTE4NzE+CisgICAgLy8gRGVza3RvcCBkb2Vzbid0IGhh
dmUgZWFybHkgaW5pdGlhbGl6YXRpb24gc28gaXQgaXMgbm90IGNsZWFyIGhvdyB0aGlzIHNob3Vs
ZCBiZSBkb25lIHRoZXJlLiBUaGUgQ0ZOZXR3b3JrIFNQSSBwcm9iYWJseQorICAgIC8vIG5lZWRz
IHRvIGJlY29tZSBtb3JlIGZvcmdpdmluZy4KKyAgICAvLyBXZSBjYW4ndCByZWFkIHNldHRpbmdz
IGhlcmUgYXMgdGhpcyBpcyBjYWxsZWQgdG9vIGVhcmx5IGZvciB0aGF0LiBBbGwgdmFsdWVzIG5l
ZWQgdG8gYmUgY29uc3RhbnRzLgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBwcmVmZXJyZWRD
b25uZWN0aW9uQ291bnQgPSA2OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYXN0TGFuZUNv
bm5lY3Rpb25Db3VudCA9IDE7CisgICAgd2tJbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9u
Q291bnRQZXJIb3N0KHByZWZlcnJlZENvbm5lY3Rpb25Db3VudCk7CisgICAgd2tTZXRIVFRQUGlw
ZWxpbmluZ01heGltdW1Qcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2hlc3QpOworICAg
IHdrU2V0SFRUUFBpcGVsaW5pbmdNaW5pbXVtRmFzdExhbmVQcmlvcml0eShSZXNvdXJjZUxvYWRQ
cmlvcml0eU1lZGl1bSk7CisgICAgX0NGTmV0d29ya0hUVFBDb25uZWN0aW9uQ2FjaGVTZXRMaW1p
dChrSFRUUE51bUZhc3RMYW5lcywgZmFzdExhbmVDb25uZWN0aW9uQ291bnQpOworfQorI2VuZGlm
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAKaW5k
ZXggZmMyZDI4ZDcyNDE4M2Y1NTRhZWM3NzI3N2U0MWEzMjA1YTkwMjlmZi4uYjVlYWM0NWE3YTZi
YmRjODA4YTg4NDEwODAyMWYxNDNjN2Q3MWE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5j
cHAKQEAgLTQxLDYgKzQxLDEwIEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRl
IDxDRk5ldHdvcmsvQ0ZOZXR3b3JrLmg+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICNp
bmNsdWRlICJMb2FkZXJSdW5Mb29wQ0YuaCIKICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZOZXR3b3Jr
Lmg+CkBAIC01NzEsNyArNTc1LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlcG9ydEVy
cm9yVG9DbGllbnQoQ0ZFcnJvclJlZiBlcnJvcikKICAgICBDRkluZGV4IGVycm9yQ29kZSA9IENG
RXJyb3JHZXRDb2RlKGVycm9yKTsKICAgICBTdHJpbmcgZGVzY3JpcHRpb247CiAKLSNpZiBQTEFU
Rk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogCiAjaWYgQ09N
UElMRVIoQ0xBTkcpCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvTmV0d29ya1N0YXRlTm90aWZpZXJJ
T1MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvTmV0d29ya1N0YXRl
Tm90aWZpZXJJT1MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllZDZhMDg3ODVjZWU4ZGRmNDcwNzBkYmVmMjZh
NjFjNDdiODJkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2lvcy9OZXR3b3JrU3RhdGVOb3RpZmllcklPUy5jcHAKQEAgLTAsMCArMSw0NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0YXRlTm90aWZpZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitOZXR3b3JrU3RhdGVOb3RpZmllcjo6TmV0d29ya1N0YXRlTm90aWZpZXIo
KQorICAgIDogbV9pc09uTGluZShmYWxzZSkKK3sKK30KKwordm9pZCBOZXR3b3JrU3RhdGVOb3Rp
Zmllcjo6c2V0SXNPbkxpbmUoYm9vbCBpc09uTGluZSkKK3sKKyAgICBpZiAobV9pc09uTGluZSA9
PSBpc09uTGluZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faXNPbkxpbmUgPSBpc09uTGluZTsK
KyAgICBub3RpZnlOZXR3b3JrU3RhdGVDaGFuZ2UoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xvb2suaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZTI3NTZk
ZjQ1MTgzYTA5NzE0ZjllOWRmOGViNmZlNGEyMjhiOTBmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLmgKQEAgLTAsMCArMSwx
MjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFF1aWNrTG9va19oCisjZGVmaW5lIFF1aWNrTG9v
a19oCisKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKworI2ltcG9ydCAiUmVzb3VyY2VSZXF1ZXN0Lmgi
CisjaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL1Bhc3NPd25QdHIu
aD4KKworI2lmZGVmIF9fT0JKQ19fCitAY2xhc3MgTlNEYXRhOworQGNsYXNzIE5TRGljdGlvbmFy
eTsKK0BjbGFzcyBOU0ZpbGVIYW5kbGU7CitAY2xhc3MgTlNTZXQ7CitAY2xhc3MgTlNTdHJpbmc7
CitAY2xhc3MgTlNVUkw7CitAY2xhc3MgTlNVUkxDb25uZWN0aW9uOworQGNsYXNzIE5TVVJMUmVz
cG9uc2U7CisjZWxzZQorY2xhc3MgTlNEYXRhOworY2xhc3MgTlNEaWN0aW9uYXJ5OworY2xhc3Mg
TlNGaWxlSGFuZGxlOworY2xhc3MgTlNTZXQ7CitjbGFzcyBOU1N0cmluZzsKK2NsYXNzIE5TVVJM
OworY2xhc3MgTlNVUkxDb25uZWN0aW9uOworY2xhc3MgTlNVUkxSZXNwb25zZTsKKyNlbmRpZgor
CisjaWYgVVNFKENGTkVUV09SSykKK3R5cGVkZWYgc3RydWN0IF9DRlVSTFJlc3BvbnNlKiBDRlVS
TFJlc3BvbnNlUmVmOwordHlwZWRlZiBzdHJ1Y3QgX0NGVVJMQ29ubmVjdGlvbiogQ0ZVUkxDb25u
ZWN0aW9uUmVmOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVzb3Vy
Y2VIYW5kbGU7CitjbGFzcyBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGU7CisKK0NsYXNzIFFMUHJldmlld0NvbnZlcnRlckNsYXNzKCk7CitOU1N0cmluZyAq
UUxUeXBlQ29weUJlc3RNaW1lVHlwZUZvckZpbGVOYW1lQW5kTWltZVR5cGUoTlNTdHJpbmcgKmZp
bGVOYW1lLCBOU1N0cmluZyAqbWltZVR5cGUpOworTlNTdHJpbmcgKlFMVHlwZUNvcHlCZXN0TWlt
ZVR5cGVGb3JVUkxBbmRNaW1lVHlwZShOU1VSTCAqLCBOU1N0cmluZyAqbWltZVR5cGUpOworCitO
U1NldCAqUUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzU2V0KCk7CisKKy8vIFVzZWQgZm9y
IHNldHRpbmcgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSBzYXZlZCBRTCBjb250ZW50CitOU0RpY3Rp
b25hcnkgKlFMRmlsZUF0dHJpYnV0ZXMoKTsKK05TRGljdGlvbmFyeSAqUUxEaXJlY3RvcnlBdHRy
aWJ1dGVzKCk7CisKK3ZvaWQgYWRkUUxQcmV2aWV3Q29udmVydGVyV2l0aEZpbGVGb3JVUkwoTlNV
UkwgKiwgaWQgY29udmVydGVyLCBOU1N0cmluZyAqZmlsZU5hbWUpOworTlNTdHJpbmcgKnFsUHJl
dmlld0NvbnZlcnRlckZpbGVOYW1lRm9yVVJMKE5TVVJMICopOworTlNTdHJpbmcgKnFsUHJldmll
d0NvbnZlcnRlclVUSUZvclVSTChOU1VSTCAqKTsKK3ZvaWQgcmVtb3ZlUUxQcmV2aWV3Q29udmVy
dGVyRm9yVVJMKE5TVVJMICopOworCitQYXNzT3duUHRyPFJlc291cmNlUmVxdWVzdD4gcmVnaXN0
ZXJRTFByZXZpZXdDb252ZXJ0ZXJJZk5lZWRlZChOU1VSTCAqLCBOU1N0cmluZyAqbWltZVR5cGUs
IE5TRGF0YSAqKTsKKworY29uc3QgVVJMIHNhZmVRTFVSTEZvckRvY3VtZW50VVJMQW5kUmVzb3Vy
Y2VVUkwoY29uc3QgVVJMJiBkb2N1bWVudFVSTCwgY29uc3QgU3RyaW5nJiByZXNvdXJjZVVSTCk7
CisKK2NvbnN0IGNoYXIqIFFMUHJldmlld1Byb3RvY29sKCk7CisKKworY2xhc3MgUXVpY2tMb29r
SGFuZGxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShRdWlja0xvb2tIYW5kbGUpOworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFF1aWNrTG9va0hhbmRsZT4gY3JlYXRlKFJlc291
cmNlSGFuZGxlKiwgTlNVUkxDb25uZWN0aW9uICosIE5TVVJMUmVzcG9uc2UgKiwgaWQgZGVsZWdh
dGUpOworI2lmIFVTRShDRk5FVFdPUkspCisgICAgc3RhdGljIFBhc3NPd25QdHI8UXVpY2tMb29r
SGFuZGxlPiBjcmVhdGUoUmVzb3VyY2VIYW5kbGUqLCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUqLCBDRlVSTFJlc3BvbnNlUmVmKTsKKyNlbmRpZgorICAg
IH5RdWlja0xvb2tIYW5kbGUoKTsKKworICAgIGJvb2wgZGlkUmVjZWl2ZURhdGFBcnJheShDRkFy
cmF5UmVmKTsKKyAgICBib29sIGRpZFJlY2VpdmVEYXRhKENGRGF0YVJlZik7CisgICAgYm9vbCBk
aWRGaW5pc2hMb2FkaW5nKCk7CisgICAgdm9pZCBkaWRGYWlsKCk7CisKKyAgICBOU1VSTFJlc3Bv
bnNlICpuc1Jlc3BvbnNlKCk7CisjaWYgVVNFKENGTkVUV09SSykKKyAgICBDRlVSTFJlc3BvbnNl
UmVmIGNmUmVzcG9uc2UoKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFF1aWNrTG9va0hhbmRs
ZShSZXNvdXJjZUhhbmRsZSosIE5TVVJMQ29ubmVjdGlvbiAqLCBOU1VSTFJlc3BvbnNlICosIGlk
IGRlbGVnYXRlKTsKKyNpZiBVU0UoQ0ZORVRXT1JLKQorICAgIFF1aWNrTG9va0hhbmRsZShSZXNv
dXJjZUhhbmRsZSosIENGVVJMUmVzcG9uc2VSZWYpOworI2VuZGlmCisKKyAgICBSZXNvdXJjZUhh
bmRsZSogbV9oYW5kbGU7CisgICAgUmV0YWluUHRyPGlkPiBtX2NvbnZlcnRlcjsKKyAgICBSZXRh
aW5QdHI8aWQ+IG1fZGVsZWdhdGU7CisgICAgYm9vbCBtX2ZpbmlzaGVkTG9hZGluZ0RhdGFJbnRv
Q29udmVydGVyOworICAgIFJldGFpblB0cjxOU0ZpbGVIYW5kbGUgKj4gbV9xdWlja2xvb2tGaWxl
SGFuZGxlOworICAgIE5TVVJMUmVzcG9uc2UgKm1fbnNSZXNwb25zZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShRVUlDS19MT09LKQorCisjZW5kaWYgLy8g
UXVpY2tMb29rX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
aW9zL1F1aWNrTG9vay5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1F1
aWNrTG9vay5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTc2OTA5MTFlMTdkMjAwMzFkODk3ZTE5ZTY2YTRkNGFk
NjVlZmRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9pb3MvUXVpY2tMb29rLm1tCkBAIC0wLDAgKzEsNDY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJRdWlja0xvb2suaCIKKworI2lmIFVTRShRVUlDS19MT09L
KQorCisjaW1wb3J0ICJGaWxlU3lzdGVtSU9TLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1w
b3J0ICJSZXNvdXJjZUhhbmRsZS5oIgorI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tz
SU9TLmgiCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCAiU3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgiCisjaW1wb3J0ICJXZWJDb3JlVVJM
UmVzcG9uc2VJT1MuaCIKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9y
dCA8Rm91bmRhdGlvbi9OU0ZpbGVNYW5hZ2VyX05TVVJMRXh0cmFzLmg+CisjaW1wb3J0IDxRdWlj
a0xvb2svUUxQcmV2aWV3Q29udmVydGVyLmg+CisjaW1wb3J0IDxRdWlja0xvb2svUXVpY2tMb29r
UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYv
U3RkTGliRXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CisjaW1wb3J0IDx3dGYv
VmVjdG9yLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFVTRShDRk5F
VFdPUkspCisjaW1wb3J0IDxDRk5ldHdvcmsvQ0ZVUkxDb25uZWN0aW9uLmg+CisKK0BpbnRlcmZh
Y2UgTlNVUkxSZXNwb25zZSAoUXVpY2tMb29rRGV0YWlscykKKysoTlNVUkxSZXNwb25zZSAqKV9y
ZXNwb25zZVdpdGhDRlVSTFJlc3BvbnNlOihDRlVSTFJlc3BvbnNlUmVmKXJlc3BvbnNlOworLShD
RlVSTFJlc3BvbnNlUmVmKV9DRlVSTFJlc3BvbnNlOworQGVuZAorI2VuZGlmCisKK1NPRlRfTElO
S19GUkFNRVdPUktfT1BUSU9OQUwoUXVpY2tMb29rKQorU09GVF9MSU5LX0NMQVNTKFF1aWNrTG9v
aywgUUxQcmV2aWV3Q29udmVydGVyKQorU09GVF9MSU5LX01BWV9GQUlMKFF1aWNrTG9vaywgUUxQ
cmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzLCBOU1NldCAqLCAoKSwgKCkpCitTT0ZUX0xJTktf
TUFZX0ZBSUwoUXVpY2tMb29rLCBRTFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yRmlsZU5hbWVBbmRN
aW1lVHlwZSwgTlNTdHJpbmcgKiwgKE5TU3RyaW5nICpmaWxlTmFtZSwgTlNTdHJpbmcgKm1pbWVU
eXBlKSwgKGZpbGVOYW1lLCBtaW1lVHlwZSkpCitTT0ZUX0xJTktfTUFZX0ZBSUwoUXVpY2tMb29r
LCBRTFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yVVJMQW5kTWltZVR5cGUsIE5TU3RyaW5nICosIChO
U1VSTCAqdXJsLCBOU1N0cmluZyAqbWltZVR5cGUpLCAodXJsLCBtaW1lVHlwZSkpCitTT0ZUX0xJ
TktfTUFZX0ZBSUwoUXVpY2tMb29rLCBRTFR5cGVDb3B5VVRJRm9yVVJMQW5kTWltZVR5cGUsIE5T
U3RyaW5nICosIChOU1VSTCAqdXJsLCBOU1N0cmluZyAqbWltZVR5cGUpLCAodXJsLCBtaW1lVHlw
ZSkpCitTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoUXVpY2tMb29rLCBRTFByZXZpZXdTY2hl
bWUsIE5TU3RyaW5nICopCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBOU1N0cmluZyAqUUxU
eXBlQ29weVVUSUZvclVSTEFuZE1pbWVUeXBlKE5TVVJMICp1cmwsIE5TU3RyaW5nICptaW1lVHlw
ZSk7Cit9CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitDbGFzcyBXZWJDb3JlOjpRTFBy
ZXZpZXdDb252ZXJ0ZXJDbGFzcygpCit7CisjZGVmaW5lIFFMUHJldmlld0NvbnZlcnRlciBnZXRR
TFByZXZpZXdDb252ZXJ0ZXJDbGFzcygpCisgICAgcmV0dXJuIFFMUHJldmlld0NvbnZlcnRlcjsK
KyN1bmRlZiBRTFByZXZpZXdDb252ZXJ0ZXIKK30KKworTlNTdHJpbmcgKldlYkNvcmU6OlFMVHlw
ZUNvcHlCZXN0TWltZVR5cGVGb3JGaWxlTmFtZUFuZE1pbWVUeXBlKE5TU3RyaW5nICpmaWxlTmFt
ZSwgTlNTdHJpbmcgKm1pbWVUeXBlKQoreworICAgIGlmICghY2FuTG9hZFFMVHlwZUNvcHlCZXN0
TWltZVR5cGVGb3JGaWxlTmFtZUFuZE1pbWVUeXBlKCkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICByZXR1cm4gOjpRTFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yRmlsZU5hbWVBbmRNaW1lVHlw
ZShmaWxlTmFtZSwgbWltZVR5cGUpOworfQorCitOU1N0cmluZyAqV2ViQ29yZTo6UUxUeXBlQ29w
eUJlc3RNaW1lVHlwZUZvclVSTEFuZE1pbWVUeXBlKE5TVVJMICp1cmwsIE5TU3RyaW5nICptaW1l
VHlwZSkKK3sKKyAgICBpZiAoIWNhbkxvYWRRTFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yVVJMQW5k
TWltZVR5cGUoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiA6OlFMVHlwZUNv
cHlCZXN0TWltZVR5cGVGb3JVUkxBbmRNaW1lVHlwZSh1cmwsIG1pbWVUeXBlKTsKK30KKworTlNT
ZXQgKldlYkNvcmU6OlFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpCit7CisgICAg
aWYgKCFjYW5Mb2FkUUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzKCkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBzdGF0aWMgTlNTZXQgKnNldCA9IGFkb3B0TlMoOjpRTFByZXZpZXdH
ZXRTdXBwb3J0ZWRNSU1FVHlwZXMoKSkubGVha1JlZigpOworICAgIHJldHVybiBzZXQ7Cit9CisK
K05TU3RyaW5nICpXZWJDb3JlOjpRTFR5cGVDb3B5VVRJRm9yVVJMQW5kTWltZVR5cGUoTlNVUkwg
KnVybCwgTlNTdHJpbmcgKm1pbWVUeXBlKQoreworICAgIGlmICghY2FuTG9hZFFMVHlwZUNvcHlV
VElGb3JVUkxBbmRNaW1lVHlwZSgpKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJu
IDo6UUxUeXBlQ29weVVUSUZvclVSTEFuZE1pbWVUeXBlKHVybCwgbWltZVR5cGUpOworfQorCitO
U0RpY3Rpb25hcnkgKldlYkNvcmU6OlFMRmlsZUF0dHJpYnV0ZXMoKQoreworICAgIC8vIFNldCBm
aWxlIHBlcm1zIHRvIG93bmVyIHJlYWQvd3JpdGUgb25seQorICAgIE5TTnVtYmVyICpmaWxlUE9T
SVhQZXJtaXNzaW9ucyA9IFtOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjooV0VCX1VSRUFEIHwg
V0VCX1VXUklURSldOworICAgIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBhZG9w
dE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVXNlck5hbWUoKSwgTlNGaWxlT3du
ZXJBY2NvdW50TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aWxlUE9TSVhQZXJtaXNzaW9ucywgTlNGaWxlUG9zaXhQZXJtaXNzaW9ucywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyXSkubGVha1JlZigpOworICAgIHJl
dHVybiBkaWN0aW9uYXJ5OworfQorCitOU0RpY3Rpb25hcnkgKldlYkNvcmU6OlFMRGlyZWN0b3J5
QXR0cmlidXRlcygpCit7CisgICAgLy8gU2V0IGZpbGUgcGVybXMgdG8gb3duZXIgcmVhZC93cml0
ZS9leGVjdXRlIG9ubHkKKyAgICBOU051bWJlciAqZGlyZWN0b3J5UE9TSVhQZXJtaXNzaW9ucyA9
IFtOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjooV0VCX1VSRUFEIHwgV0VCX1VXUklURSB8IFdF
Ql9VRVhFQyldOworICAgIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBhZG9wdE5T
KFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNVc2VyTmFtZSgpLCBOU0Zp
bGVPd25lckFjY291bnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGlyZWN0b3J5UE9TSVhQZXJtaXNzaW9ucywgTlNGaWxlUG9zaXhQZXJtaXNz
aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bGxwdHJdKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuIGRpY3Rpb25hcnk7Cit9CisKK3N0YXRpYyBN
dXRleCYgcWxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeU11dGV4KCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8TXV0ZXg+IG11dGV4OworICAgIHJldHVybiBtdXRleDsKK30KKworc3Rh
dGljIE5TTXV0YWJsZURpY3Rpb25hcnkgKlFMUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnkoKQor
eworICAgIHN0YXRpYyBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gYWRvcHROUyhb
TlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XSkubGVha1JlZigpOworICAgIHJldHVybiBk
aWN0aW9uYXJ5OworfQorCitzdGF0aWMgTlNNdXRhYmxlRGljdGlvbmFyeSAqUUxDb250ZW50RGlj
dGlvbmFyeSgpCit7CisgICAgc3RhdGljIE5TTXV0YWJsZURpY3Rpb25hcnkgKmNvbnRlbnREaWN0
aW9uYXJ5ID0gYWRvcHROUyhbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XSkubGVha1Jl
ZigpOworICAgIHJldHVybiBjb250ZW50RGljdGlvbmFyeTsKK30KKwordm9pZCBXZWJDb3JlOjph
ZGRRTFByZXZpZXdDb252ZXJ0ZXJXaXRoRmlsZUZvclVSTChOU1VSTCAqdXJsLCBpZCBjb252ZXJ0
ZXIsIE5TU3RyaW5nICpmaWxlTmFtZSkKK3sKKyAgICBBU1NFUlQodXJsKTsKKyAgICBBU1NFUlQo
Y29udmVydGVyKTsKKyAgICBNdXRleExvY2tlciBsb2NrKHFsUHJldmlld0NvbnZlcnRlckRpY3Rp
b25hcnlNdXRleCgpKTsKKyAgICBbUUxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeSgpIHNldE9i
amVjdDpjb252ZXJ0ZXIgZm9yS2V5OnVybF07CisgICAgW1FMQ29udGVudERpY3Rpb25hcnkoKSBz
ZXRPYmplY3Q6KGZpbGVOYW1lID8gZmlsZU5hbWUgOiBAIiIpIGZvcktleTp1cmxdOworfQorCitO
U1N0cmluZyAqV2ViQ29yZTo6cWxQcmV2aWV3Q29udmVydGVyRmlsZU5hbWVGb3JVUkwoTlNVUkwg
KnVybCkKK3sKKyAgICByZXR1cm4gW1FMQ29udGVudERpY3Rpb25hcnkoKSBvYmplY3RGb3JLZXk6
dXJsXTsKK30KKworTlNTdHJpbmcgKldlYkNvcmU6OnFsUHJldmlld0NvbnZlcnRlclVUSUZvclVS
TChOU1VSTCAqdXJsKQoreworICAgIGlkIGNvbnZlcnRlciA9IG5pbDsKKyAgICB7CisgICAgICAg
IE11dGV4TG9ja2VyIGxvY2socWxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeU11dGV4KCkpOwor
ICAgICAgICBjb252ZXJ0ZXIgPSBbUUxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeSgpIG9iamVj
dEZvcktleTp1cmxdOworICAgIH0KKyAgICBpZiAoIWNvbnZlcnRlcikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICByZXR1cm4gW2NvbnZlcnRlciBwcmV2aWV3VVRJXTsKK30KKwordm9pZCBXZWJD
b3JlOjpyZW1vdmVRTFByZXZpZXdDb252ZXJ0ZXJGb3JVUkwoTlNVUkwgKnVybCkKK3sKKyAgICBN
dXRleExvY2tlciBsb2NrKHFsUHJldmlld0NvbnZlcnRlckRpY3Rpb25hcnlNdXRleCgpKTsKKyAg
ICBbUUxQcmV2aWV3Q29udmVydGVyRGljdGlvbmFyeSgpIHJlbW92ZU9iamVjdEZvcktleTp1cmxd
OworCisgICAgLy8gRGVsZXRlIHRoZSBmaWxlIHdoZW4gd2UgcmVtb3ZlIHRoZSBwcmV2aWV3IGNv
bnZlcnRlcgorICAgIE5TU3RyaW5nICpmaWxlbmFtZSA9IHFsUHJldmlld0NvbnZlcnRlckZpbGVO
YW1lRm9yVVJMKHVybCk7CisgICAgaWYgKFtmaWxlbmFtZSBsZW5ndGhdKQorICAgICAgICBbW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIF93ZWJfcmVtb3ZlRmlsZU9ubHlBdFBhdGg6Zmls
ZW5hbWVdOworICAgIFtRTENvbnRlbnREaWN0aW9uYXJ5KCkgcmVtb3ZlT2JqZWN0Rm9yS2V5OnVy
bF07Cit9CisKK1Bhc3NPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBXZWJDb3JlOjpyZWdpc3RlclFM
UHJldmlld0NvbnZlcnRlcklmTmVlZGVkKE5TVVJMICp1cmwsIE5TU3RyaW5nICptaW1lVHlwZSwg
TlNEYXRhICpkYXRhKQoreworICAgIFJldGFpblB0cjxOU1N0cmluZz4gdXBkYXRlZE1JTUVUeXBl
ID0gYWRvcHROUyhXZWJDb3JlOjpRTFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yVVJMQW5kTWltZVR5
cGUodXJsLCBtaW1lVHlwZSkpOworCisgICAgaWYgKFtXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBw
b3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWluc09iamVjdDp1cGRhdGVkTUlNRVR5cGUuZ2V0KCld
KSB7CisgICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gdXRpID0gYWRvcHROUyhXZWJDb3JlOjpR
TFR5cGVDb3B5VVRJRm9yVVJMQW5kTWltZVR5cGUodXJsLCB1cGRhdGVkTUlNRVR5cGUuZ2V0KCkp
KTsKKworICAgICAgICBSZXRhaW5QdHI8aWQ+IGNvbnZlcnRlciA9IGFkb3B0TlMoW1tRTFByZXZp
ZXdDb252ZXJ0ZXJDbGFzcygpIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YSBuYW1lOm5pbCB1dGk6
dXRpLmdldCgpIG9wdGlvbnM6bmlsXSk7CisgICAgICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9
IFtjb252ZXJ0ZXIuZ2V0KCkgcHJldmlld1JlcXVlc3RdOworCisgICAgICAgIC8vIFdlIHVzZSBb
cmVxdWVzdCBVUkxdIGhlcmUgaW5zdGVhZCBvZiB1cmwgc2luY2UgaXQgd2lsbCBiZQorICAgICAg
ICAvLyB0aGUgVVJMIHRoYXQgdGhlIFdlYkRhdGFTb3VyY2Ugd2lsbCBzZWUgZHVyaW5nIC1kZWFs
bG9jLgorICAgICAgICBhZGRRTFByZXZpZXdDb252ZXJ0ZXJXaXRoRmlsZUZvclVSTChbcmVxdWVz
dCBVUkxdLCBjb252ZXJ0ZXIuZ2V0KCksIG5pbCk7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCkpOworICAgIH0KKworICAgIHJldHVybiBudWxs
cHRyOworfQorCitjb25zdCBVUkwgV2ViQ29yZTo6c2FmZVFMVVJMRm9yRG9jdW1lbnRVUkxBbmRS
ZXNvdXJjZVVSTChjb25zdCBVUkwmIGRvY3VtZW50VVJMLCBjb25zdCBTdHJpbmcmIHJlc291cmNl
VVJMKQoreworICAgIGlkIGNvbnZlcnRlciA9IG5pbDsKKyAgICBOU1VSTCAqbnNEb2N1bWVudFVS
TCA9IGRvY3VtZW50VVJMOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhxbFByZXZp
ZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5TXV0ZXgoKSk7CisgICAgICAgIGNvbnZlcnRlciA9IFtRTFBy
ZXZpZXdDb252ZXJ0ZXJEaWN0aW9uYXJ5KCkgb2JqZWN0Rm9yS2V5Om5zRG9jdW1lbnRVUkxdOwor
ICAgIH0KKworICAgIGlmICghY29udmVydGVyKQorICAgICAgICByZXR1cm4gVVJMKFBhcnNlZFVS
TFN0cmluZywgcmVzb3VyY2VVUkwpOworCisgICAgUmV0YWluUHRyPE5TVVJMUmVxdWVzdD4gcmVx
dWVzdCA9IGFkb3B0TlMoW1tOU1VSTFJlcXVlc3QgYWxsb2NdIGluaXRXaXRoVVJMOltOU1VSTCBV
UkxXaXRoU3RyaW5nOnJlc291cmNlVVJMXV0pOworICAgIE5TVVJMUmVxdWVzdCAqc2FmZVJlcXVl
c3QgPSBbY29udmVydGVyIHNhZmVSZXF1ZXN0Rm9yUmVxdWVzdDpyZXF1ZXN0LmdldCgpXTsKKyAg
ICByZXR1cm4gW3NhZmVSZXF1ZXN0IFVSTF07Cit9CisKK3N0YXRpYyBWZWN0b3I8Y2hhcj4gY3Jl
YXRlUUxQcmV2aWV3UHJvdG9jb2woKQoreworICAgIFZlY3RvcjxjaGFyPiBwcmV2aWV3UHJvdG9j
b2w7CisjZGVmaW5lIFFMUHJldmlld1NjaGVtZSBnZXRRTFByZXZpZXdTY2hlbWUoKQorICAgIGNv
bnN0IGNoYXIqIHFsUHJldmlld1NjaGVtZSA9IFtRTFByZXZpZXdTY2hlbWUgVVRGOFN0cmluZ107
CisjdW5kZWYgUUxQcmV2aWV3U2NoZW1lCisgICAgcHJldmlld1Byb3RvY29sLmFwcGVuZChxbFBy
ZXZpZXdTY2hlbWUsIHN0cmxlbihxbFByZXZpZXdTY2hlbWUpICsgMSk7CisgICAgcmV0dXJuIHBy
ZXZpZXdQcm90b2NvbDsKK30KKworY29uc3QgY2hhciogV2ViQ29yZTo6UUxQcmV2aWV3UHJvdG9j
b2woKQoreworICAgIGlmICghY2FuTG9hZFFMUHJldmlld1NjaGVtZSgpKQorICAgICAgICByZXR1
cm4gIiI7CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPGNoYXI+PiBwcmV2aWV3
UHJvdG9jb2woY3JlYXRlUUxQcmV2aWV3UHJvdG9jb2woKSk7CisgICAgcmV0dXJuIHByZXZpZXdQ
cm90b2NvbC5nZXQoKS5kYXRhKCk7Cit9CisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorLy8gVGhlIHdh
eSBRdWlja0xvb2sgd29ya3MgaXMgd2UgcGFzcyBpdCBhbiBOU1VSTENvbm5lY3Rpb25EZWxlZ2F0
ZSBjYWxsYmFjayBvYmplY3QgYXQgY3JlYXRpb24KKy8vIHRpbWUuIFRoZW4gd2UgcGFzcyBpdCBh
bGwgdGhlIGRhdGEgYXMgd2UgcmVjZWl2ZSBpdC4gT25jZSB3ZSd2ZSBkb3dubG9hZGVkIHRoZSBm
dWxsIFVSTCwKKy8vIFF1aWNrTG9vayB0dXJucyBhcm91bmQgYW5kIHNlbmQgdXMsIHRocm91Z2gg
dGhpcyBkZWxlZ2F0ZSwgdGhlIEhUTUwgdmVyc2lvbiBvZiB0aGUgZmlsZSB3aGljaCB3ZQorLy8g
cGFzcyBvbiB0byBXZWJDb3JlLiBUaGUgZmxhZyBtX2ZpbmlzaGVkTG9hZGluZ0RhdGFJbnRvQ29u
dmVydGVyIGluIFF1aWNrTG9va0hhbmRsZSBkZWNpZGVzCisvLyB3aGV0aGVyIHRvIHBhc3MgdGhl
IGRhdGEgdG8gUXVpY2tMb29rIG9yIFdlYkNvcmUuCisvLworLy8gVGhpcyB3b3JrcyBmaW5lIHdo
ZW4gdXNpbmcgTlMgQVBJcywgYnV0IHdoZW4gdXNpbmcgQ0ZOZXR3b3JrLCB3ZSBkb24ndCBoYXZl
IGEgTlNVUkxDb25uZWN0aW9uRGVsZWdhdGUuCisvLyBTbyB3ZSBjcmVhdGUgV2ViUXVpY2tMb29r
SGFuZGxlQXNEZWxlZ2F0ZSBhcyBhbiBpbnRlcm1lZGlhdGUgZGVsZWdhdGUgb2JqZWN0IGFuZCBw
YXNzIGl0IHRvCisvLyBRTFByZXZpZXdDb252ZXJ0ZXIuIFRoZSBwcm94eSBkZWxlZ2F0ZSB0aGVu
IGZvcndhcmRzIHRoZSBtZXNzYWdlcyBvbiB0byB0aGUgQ0ZOZXR3b3JrIGNvZGUuCitAaW50ZXJm
YWNlIFdlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGUgOiBOU09iamVjdCA8TlNVUkxDb25uZWN0
aW9uRGVsZWdhdGU+IHsKKyAgICBSZWZQdHI8U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlPiBtX2Nvbm5lY3Rpb25EZWxlZ2F0ZTsKK30KKworLSAoaWQpaW5p
dFdpdGhDb25uZWN0aW9uRGVsZWdhdGU6KFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZSopY29ubmVjdGlvbkRlbGVnYXRlOworLSAodm9pZCljbGVhckhhbmRs
ZTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGUK
Ky0gKGlkKWluaXRXaXRoQ29ubmVjdGlvbkRlbGVnYXRlOihTeW5jaHJvbm91c1Jlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUqKWNvbm5lY3Rpb25EZWxlZ2F0ZQoreworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlID0gY29ubmVjdGlvbkRlbGVnYXRlOworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5l
Y3Rpb24gZGlkUmVjZWl2ZURhdGFBcnJheTooTlNBcnJheSAqKWRhdGFBcnJheQoreworICAgIFVO
VVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbkRlbGVnYXRlKQor
ICAgICAgICByZXR1cm47CisgICAgTE9HKE5ldHdvcmssICJXZWJRdWlja0xvb2tIYW5kbGVBc0Rl
bGVnYXRlOjpkaWRSZWNlaXZlRGF0YUFycmF5KCkiKTsKKyAgICBtX2Nvbm5lY3Rpb25EZWxlZ2F0
ZS0+ZGlkUmVjZWl2ZURhdGFBcnJheShyZWludGVycHJldF9jYXN0PENGQXJyYXlSZWY+KGRhdGFB
cnJheSkpOworfQorCistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5l
Y3Rpb24gZGlkUmVjZWl2ZURhdGE6KE5TRGF0YSAqKWRhdGEgbGVuZ3RoUmVjZWl2ZWQ6KGxvbmcg
bG9uZylsZW5ndGhSZWNlaXZlZAoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKyAg
ICBpZiAoIW1fY29ubmVjdGlvbkRlbGVnYXRlKQorICAgICAgICByZXR1cm47CisgICAgTE9HKE5l
dHdvcmssICJXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVnYXRlOjpkaWRSZWNlaXZlRGF0YSgpIC0g
ZGF0YSBsZW5ndGggPSAlbGQiLCAobG9uZylbZGF0YSBsZW5ndGhdKTsKKworICAgIC8vIFF1aWNr
TG9vayBjb2RlIHNlbmRzIHVzIGEgbmlsIGRhdGEgYXQgdGltZXMuIFRoZSBjaGVjayBiZWxvdyBp
cyB0aGUgc2FtZSBhcyB0aGUgb25lIGluCisgICAgLy8gUmVzb3VyY2VIYW5kbGVNYWMuY3BwIGFk
ZGVkIGZvciBhIGRpZmZlcmVudCBidWcuCisgICAgaWYgKCFbZGF0YSBsZW5ndGhdKQorICAgICAg
ICByZXR1cm47CisgICAgbV9jb25uZWN0aW9uRGVsZWdhdGUtPmRpZFJlY2VpdmVEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPihkYXRhKSwgc3RhdGljX2Nhc3Q8aW50PihsZW5ndGhSZWNl
aXZlZCkpOworfQorCistICh2b2lkKWNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5nOihOU1VSTENv
bm5lY3Rpb24gKiljb25uZWN0aW9uCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwor
ICAgIGlmICghbV9jb25uZWN0aW9uRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBMT0co
TmV0d29yaywgIldlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGU6OmRpZEZpbmlzaExvYWRpbmco
KSIpOworICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlLT5kaWRGaW5pc2hMb2FkaW5nKCk7Cit9CisK
Ky0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRGYWls
V2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKK3sKKyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlv
bik7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb25EZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworICAg
IExPRyhOZXR3b3JrLCAiV2ViUXVpY2tMb29rSGFuZGxlQXNEZWxlZ2F0ZTo6ZGlkRmFpbCgpIik7
CisgICAgbV9jb25uZWN0aW9uRGVsZWdhdGUtPmRpZEZhaWwocmVpbnRlcnByZXRfY2FzdDxDRkVy
cm9yUmVmPihlcnJvcikpOworfQorCistICh2b2lkKWNsZWFySGFuZGxlCit7CisgICAgbV9jb25u
ZWN0aW9uRGVsZWdhdGUgPSBudWxscHRyOworfQorQGVuZAorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIE5TU3RyaW5nICpjcmVhdGVUZW1wb3JhcnlGaWxlRm9yUXVpY2tM
b29rKE5TU3RyaW5nICpmaWxlTmFtZSkKK3sKKyAgICBOU1N0cmluZyAqZG93bmxvYWREaXJlY3Rv
cnkgPSBjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoQCJRdWlja0xvb2tDb250ZW50Iik7CisgICAg
aWYgKCFkb3dubG9hZERpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TU3Ry
aW5nICpjb250ZW50UGF0aCA9IFtkb3dubG9hZERpcmVjdG9yeSBzdHJpbmdCeUFwcGVuZGluZ1Bh
dGhDb21wb25lbnQ6ZmlsZU5hbWVdOworICAgIE5TRmlsZU1hbmFnZXIgKmZpbGVNYW5hZ2VyID0g
W05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOworICAgIE5TU3RyaW5nICp1bmlxdWVDb250
ZW50UGF0aCA9IFtmaWxlTWFuYWdlciBfd2ViX3BhdGhXaXRoVW5pcXVlRmlsZW5hbWVGb3JQYXRo
OmNvbnRlbnRQYXRoXTsKKworICAgIEJPT0wgc3VjY2VzcyA9IFtmaWxlTWFuYWdlciBfd2ViX2Ny
ZWF0ZUZpbGVBdFBhdGhXaXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6dW5pcXVlQ29udGVudFBh
dGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6
UUxGaWxlQXR0cmlidXRlcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5QXR0cmlidXRlczpRTERpcmVjdG9yeUF0
dHJpYnV0ZXMoKV07CisKKyAgICByZXR1cm4gc3VjY2VzcyA/IHVuaXF1ZUNvbnRlbnRQYXRoIDog
bmlsOworfQorCisKK1F1aWNrTG9va0hhbmRsZTo6UXVpY2tMb29rSGFuZGxlKFJlc291cmNlSGFu
ZGxlKiBoYW5kbGUsIE5TVVJMQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgTlNVUkxSZXNwb25zZSAq
bnNSZXNwb25zZSwgaWQgZGVsZWdhdGUpCisgICAgOiBtX2hhbmRsZShoYW5kbGUpCisgICAgLCBt
X2NvbnZlcnRlcihhZG9wdE5TKFtbUUxQcmV2aWV3Q29udmVydGVyQ2xhc3MoKSBhbGxvY10gaW5p
dFdpdGhDb25uZWN0aW9uOmNvbm5lY3Rpb24gZGVsZWdhdGU6ZGVsZWdhdGUgcmVzcG9uc2U6bnNS
ZXNwb25zZSBvcHRpb25zOm5pbF0pKQorICAgICwgbV9kZWxlZ2F0ZShhZG9wdE5TKFtkZWxlZ2F0
ZSByZXRhaW5dKSkKKyAgICAsIG1fZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXIoZmFs
c2UpCisgICAgLCBtX25zUmVzcG9uc2UoW21fY29udmVydGVyLmdldCgpIHByZXZpZXdSZXNwb25z
ZV0pCit7CisgICAgTlNVUkwgKnByZXZpZXdSZXF1ZXN0VVJMID0gW1ttX2NvbnZlcnRlci5nZXQo
KSBwcmV2aWV3UmVxdWVzdF0gVVJMXTsKKyAgICBpZiAoIWFwcGxpY2F0aW9uSXNNb2JpbGVTYWZh
cmkoKSkgeworICAgICAgICAvLyBUaGlzIGtlZXBzIHRoZSBRTFByZXZpZXdDb252ZXJ0ZXIgYWxp
dmUgdG8gc2VydmUgYW55IHN1YnJlc291cmNlIHJlcXVlc3RzLgorICAgICAgICAvLyBJdCBpcyBy
ZW1vdmVkIGJ5IC1bV2ViRGF0YVNvdXJjZSBkZWFsbG9jXS4KKyAgICAgICAgYWRkUUxQcmV2aWV3
Q29udmVydGVyV2l0aEZpbGVGb3JVUkwocHJldmlld1JlcXVlc3RVUkwsIG1fY29udmVydGVyLmdl
dCgpLCBuaWwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUXVpY2tMb29rIGNv
bnN1bWVzIHRoZSBpbmNvbWluZyBkYXRhLCB3ZSBuZWVkIHRvIHN0b3JlIGl0IHNvIHRoYXQgaXQg
Y2FuIGJlIG9wZW5lZCBpbiB0aGUgaGFuZGxpbmcgYXBwbGljYXRpb24uCisgICAgTlNTdHJpbmcg
KnF1aWNrbG9va0NvbnRlbnRQYXRoID0gY3JlYXRlVGVtcG9yYXJ5RmlsZUZvclF1aWNrTG9vayhb
bV9jb252ZXJ0ZXIuZ2V0KCkgcHJldmlld0ZpbGVOYW1lXSk7CisgICAgTE9HKE5ldHdvcmssICJR
dWlja0xvb2tIYW5kbGU6OlF1aWNrTG9va0hhbmRsZSgpIC0gcXVpY2tsb29rQ29udGVudFBhdGg6
ICVzIiwgW3F1aWNrbG9va0NvbnRlbnRQYXRoIFVURjhTdHJpbmddKTsKKworICAgIGlmIChxdWlj
a2xvb2tDb250ZW50UGF0aCkgeworICAgICAgICBtX3F1aWNrbG9va0ZpbGVIYW5kbGUgPSBhZG9w
dE5TKFtbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVGb3JXcml0aW5nQXRQYXRoOnF1aWNrbG9va0Nv
bnRlbnRQYXRoXSByZXRhaW5dKTsKKyAgICAgICAgLy8gV2UgbXVzdCB1c2UgdGhlIGdlbmVyYXRl
ZCBVUkwgZnJvbSBtX2NvbnZlcnRlcidzIE5TVVJMUmVxdWVzdCBvYmplY3QKKyAgICAgICAgLy8g
c28gdGhhdCBpdCBtYXRjaGVzIHRoZSBVUkwgcmVtb3ZlZCBmcm9tIC1bV2ViRGF0YVNvdXJjZSBk
ZWFsbG9jXS4KKyAgICAgICAgYWRkUUxQcmV2aWV3Q29udmVydGVyV2l0aEZpbGVGb3JVUkwocHJl
dmlld1JlcXVlc3RVUkwsIG1fY29udmVydGVyLmdldCgpLCBxdWlja2xvb2tDb250ZW50UGF0aCk7
CisgICAgfQorfQorCitQYXNzT3duUHRyPFF1aWNrTG9va0hhbmRsZT4gUXVpY2tMb29rSGFuZGxl
OjpjcmVhdGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgTlNVUkxDb25uZWN0aW9uICpjb25uZWN0
aW9uLCBOU1VSTFJlc3BvbnNlICpuc1Jlc3BvbnNlLCBpZCBkZWxlZ2F0ZSkKK3sKKyAgICBpZiAo
aGFuZGxlLT5maXJzdFJlcXVlc3QoKS5pc01haW5SZXNvdXJjZVJlcXVlc3QoKSAmJiBbV2ViQ29y
ZTo6UUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzU2V0KCkgY29udGFpbnNPYmplY3Q6W25z
UmVzcG9uc2UgTUlNRVR5cGVdXSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBRdWlja0xv
b2tIYW5kbGUoaGFuZGxlLCBjb25uZWN0aW9uLCBuc1Jlc3BvbnNlLCBkZWxlZ2F0ZSkpOworCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorUGFzc093blB0cjxR
dWlja0xvb2tIYW5kbGU+IFF1aWNrTG9va0hhbmRsZTo6Y3JlYXRlKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSog
Y29ubmVjdGlvbkRlbGVnYXRlLCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UpCit7CisgICAg
aWYgKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaXNNYWluUmVzb3VyY2VSZXF1ZXN0KCkgJiYgW1dl
YkNvcmU6OlFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpIGNvbnRhaW5zT2JqZWN0
OihOU1N0cmluZyAqKUNGVVJMUmVzcG9uc2VHZXRNSU1FVHlwZShjZlJlc3BvbnNlKV0pIHsKKyAg
ICAgICAgTlNVUkxSZXNwb25zZSAqbnNSZXNwb25zZSA9IFtOU1VSTFJlc3BvbnNlIF9yZXNwb25z
ZVdpdGhDRlVSTFJlc3BvbnNlOmNmUmVzcG9uc2VdOworICAgICAgICBXZWJRdWlja0xvb2tIYW5k
bGVBc0RlbGVnYXRlICpkZWxlZ2F0ZSA9IFtbW1dlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGUg
YWxsb2NdIGluaXRXaXRoQ29ubmVjdGlvbkRlbGVnYXRlOmNvbm5lY3Rpb25EZWxlZ2F0ZV0gYXV0
b3JlbGVhc2VdOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFF1aWNrTG9va0hhbmRsZSho
YW5kbGUsIG5pbCwgbnNSZXNwb25zZSwgZGVsZWdhdGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworQ0ZVUkxSZXNwb25zZVJlZiBRdWlja0xvb2tIYW5kbGU6OmNmUmVzcG9u
c2UoKQoreworICAgIHJldHVybiBbbV9uc1Jlc3BvbnNlIF9DRlVSTFJlc3BvbnNlXTsKK30KKyNl
bmRpZgorCitOU1VSTFJlc3BvbnNlICpRdWlja0xvb2tIYW5kbGU6Om5zUmVzcG9uc2UoKQorewor
ICAgIHJldHVybiBtX25zUmVzcG9uc2U7Cit9CisKK2Jvb2wgUXVpY2tMb29rSGFuZGxlOjpkaWRS
ZWNlaXZlRGF0YUFycmF5KENGQXJyYXlSZWYgY2ZEYXRhQXJyYXkpCit7CisgICAgTlNBcnJheSAq
IGNvbnN0IGRhdGFBcnJheSA9IChOU0FycmF5ICopY2ZEYXRhQXJyYXk7CisKKyAgICBpZiAobV9m
aW5pc2hlZExvYWRpbmdEYXRhSW50b0NvbnZlcnRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgTE9HKE5ldHdvcmssICJRdWlja0xvb2tIYW5kbGU6OmRpZFJlY2VpdmVEYXRhQXJyYXko
KSIpOworICAgIFttX2NvbnZlcnRlci5nZXQoKSBhcHBlbmREYXRhQXJyYXk6ZGF0YUFycmF5XTsK
KyAgICBpZiAobV9xdWlja2xvb2tGaWxlSGFuZGxlKSB7CisgICAgICAgIGZvciAoTlNEYXRhICpk
YXRhIGluIGRhdGFBcnJheSkKKyAgICAgICAgICAgIFttX3F1aWNrbG9va0ZpbGVIYW5kbGUuZ2V0
KCkgd3JpdGVEYXRhOmRhdGFdOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBR
dWlja0xvb2tIYW5kbGU6OmRpZFJlY2VpdmVEYXRhKENGRGF0YVJlZiBjZkRhdGEpCit7CisgICAg
TlNEYXRhICogY29uc3QgZGF0YSA9IChOU0RhdGEgKiljZkRhdGE7CisKKyAgICBpZiAobV9maW5p
c2hlZExvYWRpbmdEYXRhSW50b0NvbnZlcnRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgTE9HKE5ldHdvcmssICJRdWlja0xvb2tIYW5kbGU6OmRpZFJlY2VpdmVEYXRhKCkiKTsKKyAg
ICBbbV9jb252ZXJ0ZXIuZ2V0KCkgYXBwZW5kRGF0YTpkYXRhXTsKKyAgICBpZiAobV9xdWlja2xv
b2tGaWxlSGFuZGxlKQorICAgICAgICBbbV9xdWlja2xvb2tGaWxlSGFuZGxlLmdldCgpIHdyaXRl
RGF0YTpkYXRhXTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBRdWlja0xvb2tIYW5kbGU6
OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIGlmIChtX2ZpbmlzaGVkTG9hZGluZ0RhdGFJbnRv
Q29udmVydGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMT0coTmV0d29yaywgIlF1
aWNrTG9va0hhbmRsZTo6ZGlkRmluaXNoTG9hZGluZygpIik7CisgICAgbV9maW5pc2hlZExvYWRp
bmdEYXRhSW50b0NvbnZlcnRlciA9IFlFUzsKKyAgICBbbV9jb252ZXJ0ZXIuZ2V0KCkgZmluaXNo
ZWRBcHBlbmRpbmdEYXRhXTsKKyAgICBpZiAobV9xdWlja2xvb2tGaWxlSGFuZGxlKQorICAgICAg
ICBbbV9xdWlja2xvb2tGaWxlSGFuZGxlLmdldCgpIGNsb3NlRmlsZV07CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgUXVpY2tMb29rSGFuZGxlOjpkaWRGYWlsKCkKK3sKKyAgICBMT0coTmV0
d29yaywgIlF1aWNrTG9va0hhbmRsZTo6ZGlkRmFpbCgpIik7CisgICAgbV9xdWlja2xvb2tGaWxl
SGFuZGxlID0gbnVsbHB0cjsKKyAgICAvLyByZW1vdmVRTFByZXZpZXdDb252ZXJ0ZXJGb3JVUkwg
ZGVsZXRlcyB0aGUgdGVtcG9yYXJ5IGZpbGUgY3JlYXRlZC4KKyAgICByZW1vdmVRTFByZXZpZXdD
b252ZXJ0ZXJGb3JVUkwoW21faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoRG9O
b3RVcGRhdGVIVFRQQm9keSkgVVJMXSk7CisgICAgW21fY29udmVydGVyLmdldCgpIGZpbmlzaENv
bnZlcnRpbmddOworICAgIG1fY29udmVydGVyID0gbnVsbHB0cjsKK30KKworUXVpY2tMb29rSGFu
ZGxlOjp+UXVpY2tMb29rSGFuZGxlKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlF1aWNrTG9va0hh
bmRsZTo6flF1aWNrTG9va0hhbmRsZSgpIik7CisgICAgaWYgKG1fcXVpY2tsb29rRmlsZUhhbmRs
ZSkgeworICAgICAgICBtX3F1aWNrbG9va0ZpbGVIYW5kbGUgPSBudWxscHRyOworICAgICAgICBy
ZW1vdmVRTFByZXZpZXdDb252ZXJ0ZXJGb3JVUkwoW21faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5u
c1VSTFJlcXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9keSkgVVJMXSk7CisgICAgfQorICAgIG1fY29u
dmVydGVyID0gbnVsbHB0cjsKKworICAgIFttX2RlbGVnYXRlLmdldCgpIGNsZWFySGFuZGxlXTsK
K30KKworfQorCisjZW5kaWYgLy8gVVNFKFFVSUNLX0xPT0spCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9SZXNvdXJjZUhhbmRsZUlPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1Jlc291cmNlSGFuZGxlSU9TLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY2N2I5YjE4NjY3NDQwZGViZmVmZGExODA1Yjg0Y2I1NDc4NGM1NzkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9SZXNvdXJjZUhh
bmRsZUlPUy5tbQpAQCAtMCwwICsxLDM5IEBACisvLworLy8gIFJlc291cmNlSGFuZGxlSVBob25l
Lm1tCisvLyAgV2ViQ29yZQorLy8KKy8vICBDb3B5cmlnaHQgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJlc291
cmNlSGFuZGxlSW50ZXJuYWwuaCIKKworI2lmIFVTRShDRk5FVFdPUkspCisKKyNpbXBvcnQgPENG
TmV0d29yay9DRlNvY2tldFN0cmVhbVByaXYuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxS
ZXF1ZXN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitDRk11dGFibGVEaWN0aW9uYXJ5UmVmIFJlc291cmNlSGFuZGxlOjpjcmVh
dGVTU0xQcm9wZXJ0aWVzRnJvbU5TVVJMUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCit7CisgICAgTlNTdHJpbmcgKmhvc3QgPSByZXF1ZXN0LnVybCgpLmhvc3QoKTsKKyAg
ICBOU0FycmF5ICpjZXJ0QXJyYXkgPSBbTlNVUkxSZXF1ZXN0IGFsbG93c1NwZWNpZmljSFRUUFND
ZXJ0aWZpY2F0ZUZvckhvc3Q6aG9zdF07CisgICAgQk9PTCBhbGxvd3NBbnlDZXJ0aWZpY2F0ZSA9
IFtOU1VSTFJlcXVlc3QgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3Q6aG9zdF07Cisg
ICAgaWYgKCFjZXJ0QXJyYXkgJiYgIWFsbG93c0FueUNlcnRpZmljYXRlKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgc3NsUHJvcHMgPSBDRkRpY3Rpb25h
cnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFy
eUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOworICAgIGlm
IChjZXJ0QXJyYXkpCisgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHNzbFByb3BzLCBfa0NG
U3RyZWFtU1NMVHJ1c3RlZExlYWZDZXJ0aWZpY2F0ZXMsIChDRlR5cGVSZWYpIGNlcnRBcnJheSk7
CisKKyAgICBpZiAoYWxsb3dzQW55Q2VydGlmaWNhdGUpCisgICAgICAgIENGRGljdGlvbmFyeVNl
dFZhbHVlKHNzbFByb3BzLCBrQ0ZTdHJlYW1TU0xWYWxpZGF0ZXNDZXJ0aWZpY2F0ZUNoYWluLCBr
Q0ZCb29sZWFuRmFsc2UpOworICAgIHJldHVybiBzc2xQcm9wczsKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1dlYkNvcmVV
UkxSZXNwb25zZUlPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvV2Vi
Q29yZVVSTFJlc3BvbnNlSU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTAwZGQ5MGI2MDJhMTZiYzJkYWM4NGU2
MGExZmFkNzBiMmU1OTQ0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvaW9zL1dlYkNvcmVVUkxSZXNwb25zZUlPUy5oCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV2ViQ29yZVVSTFJlc3BvbnNlSU9TX2gKKyNkZWZpbmUgV2ViQ29yZVVSTFJl
c3BvbnNlSU9TX2gKKworI2lmZGVmIF9fT0JKQ19fCisjaW5jbHVkZSAiV2ViQ29yZVVSTFJlc3Bv
bnNlLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNF
KFFVSUNLX0xPT0spCisgICAgCitpbmxpbmUgYm9vbCBzaG91bGRVc2VRdWlja0xvb2tGb3JNSU1F
VHlwZShjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKCghTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKG1pbWVUeXBlKSAgICAgICAvLyBp
Z25vcmUgc3VwcG9ydGVkIG5vbi1pbWFnZSBNSU1FIHR5cGVzCisgICAgICAgICAmJiAhTUlNRVR5
cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKG1pbWVUeXBlKSAgICAgICAvLyBp
Z25vcmUgc3VwcG9ydGVkIGltYWdlIE1JTUUgdHlwZXMKKyAgICAgICAgICYmIG1pbWVUeXBlICE9
ICJ0ZXh0L2NzcyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9y
ZSBjc3MKKyAgICAgICAgICYmIG1pbWVUeXBlICE9ICJhcHBsaWNhdGlvbi9wZGYiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBwZGYKKyAgICAgICAgICkKKyAgICAgICAg
fHwgbWltZVR5cGUgPT0gInRleHQvcGxhaW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGJ1dCBrZWVwIHRleHQvcGxhaW4gd2hpY2ggaXMgdG9vIGdlbmVyaWMgYW5kIGNh
biBoaWRlIHNvbWV0aGluZworICAgICAgICB8fCAobWltZVR5cGUgPT0gInRleHQveG1sIiB8fCBt
aW1lVHlwZSA9PSAiYXBwbGljYXRpb24veG1sIikpICAgLy8gYW5kIGtlZXAgWE1MIHR5cGVzIGZv
ciAubW9iaWxlY29uZmlnIGZpbGVzCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNlbmRpZiAvLyBVU0UoUVVJQ0tfTE9PSykKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViQ29yZVVSTFJlc3BvbnNlSU9T
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1dlYkNv
cmVVUkxSZXNwb25zZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9z
L1dlYkNvcmVVUkxSZXNwb25zZUlPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTdjYmRmMjU2NDM0NDVhMmVk
MGMxYTVhZjQ0OGFhNmYyOTU2NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9pb3MvV2ViQ29yZVVSTFJlc3BvbnNlSU9TLm1tCkBAIC0wLDAgKzEs
ODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViQ29yZVVSTFJlc3BvbnNl
SU9TLmgiCisjaW1wb3J0ICJVVElVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UuaCIKKworI2ltcG9ydCAiUXVpY2tMb29rLmgiCisjaW1wb3J0ICJTb2Z0TGlua2lu
Zy5oIgorI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgor
CitTT0ZUX0xJTktfRlJBTUVXT1JLKE1vYmlsZUNvcmVTZXJ2aWNlcykKKworU09GVF9MSU5LKE1v
YmlsZUNvcmVTZXJ2aWNlcywgVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZywg
Q0ZTdHJpbmdSZWYsIChDRlN0cmluZ1JlZiBpblRhZ0NsYXNzLCBDRlN0cmluZ1JlZiBpblRhZywg
Q0ZTdHJpbmdSZWYgaW5Db25mb3JtaW5nVG9VVEkpLCAoaW5UYWdDbGFzcywgaW5UYWcsIGluQ29u
Zm9ybWluZ1RvVVRJKSkKKworU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVTZXJ2aWNlcywg
a1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwgQ0ZTdHJpbmdSZWYpCisKKyNkZWZpbmUga1VU
VGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiBnZXRrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9u
KCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIGFkanVzdE1JTUVUeXBlSWZOZWNlc3Nh
cnkoQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlKQoreworICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gbWltZVR5cGUgPSB3a0dldENGVVJMUmVzcG9uc2VNSU1FVHlwZShjZlJlc3BvbnNlKTsK
KyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVwZGF0ZWRNSU1FVHlwZSA9IG1pbWVUeXBlOwor
ICAgIGlmICghdXBkYXRlZE1JTUVUeXBlKQorICAgICAgICB1cGRhdGVkTUlNRVR5cGUgPSBkZWZh
dWx0TUlNRVR5cGUoKS5jcmVhdGVDRlN0cmluZygpOworCisjaWYgVVNFKFFVSUNLX0xPT0spCisg
ICAgLy8gV2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgTUlNRSB0eXBlIGlzIGNvcnJlY3QsIHNvIHRo
YXQgUXVpY2tMb29rJ3Mgd2ViIHBsdWdpbiBpcyBjYWxsZWQgd2hlbiBuZWVkZWQuCisgICAgLy8g
V2UgZmlsdGVyIHRoZSBiYXNpYyBNSU1FIHR5cGVzIHNvIHRoYXQgd2UgZG9uJ3QgZG8gdW5uZWNl
c3Nhcnkgd29yayBpbiBzdGFuZGFyZCBicm93c2luZyBzaXR1YXRpb25zLgorICAgIGlmIChzaG91
bGRVc2VRdWlja0xvb2tGb3JNSU1FVHlwZSgoTlNTdHJpbmcgKil1cGRhdGVkTUlNRVR5cGUuZ2V0
KCkpKSB7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3VnZ2VzdGVkRmlsZW5hbWUg
PSBhZG9wdENGKHdrQ29weUNGVVJMUmVzcG9uc2VTdWdnZXN0ZWRGaWxlbmFtZShjZlJlc3BvbnNl
KSk7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcXVpY2tMb29rTUlNRVR5cGUgPSBh
ZG9wdENGKChDRlN0cmluZ1JlZilRTFR5cGVDb3B5QmVzdE1pbWVUeXBlRm9yRmlsZU5hbWVBbmRN
aW1lVHlwZSgoTlNTdHJpbmcgKilzdWdnZXN0ZWRGaWxlbmFtZS5nZXQoKSwgKE5TU3RyaW5nICop
bWltZVR5cGUuZ2V0KCkpKTsKKyAgICAgICAgaWYgKCFxdWlja0xvb2tNSU1FVHlwZSkgeworICAg
ICAgICAgICAgQ0ZVUkxSZWYgdXJsID0gd2tHZXRDRlVSTFJlc3BvbnNlVVJMKGNmUmVzcG9uc2Up
OworICAgICAgICAgICAgTlNVUkwgKm5zVVJMID0gKE5TVVJMICopdXJsOworICAgICAgICAgICAg
aWYgKFtuc1VSTCBpc0ZpbGVVUkxdKSB7CisgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBleHRlbnNpb24gPSBhZG9wdENGKENGVVJMQ29weVBhdGhFeHRlbnNpb24odXJsKSk7
CisgICAgICAgICAgICAgICAgaWYgKGV4dGVuc2lvbikgeworICAgICAgICAgICAgICAgICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aSA9IGFkb3B0Q0YoVVRUeXBlQ3JlYXRlUHJlZmVycmVk
SWRlbnRpZmllckZvclRhZyhrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9uLCBleHRlbnNpb24u
Z2V0KCksIG51bGxwdHIpKTsKKyAgICAgICAgICAgICAgICAgICAgcXVpY2tMb29rTUlNRVR5cGUg
PSBtaW1lVHlwZUZyb21VVElUcmVlKHV0aS5nZXQoKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHF1aWNrTG9va01JTUVUeXBlKQor
ICAgICAgICAgICAgdXBkYXRlZE1JTUVUeXBlID0gcXVpY2tMb29rTUlNRVR5cGU7CisgICAgfQor
I2VuZGlmIC8vIFVTRShRVUlDS19MT09LKQorICAgIGlmICghbWltZVR5cGUgfHwgQ0ZTdHJpbmdD
b21wYXJlKG1pbWVUeXBlLmdldCgpLCB1cGRhdGVkTUlNRVR5cGUuZ2V0KCksIGtDRkNvbXBhcmVD
YXNlSW5zZW5zaXRpdmUpICE9IGtDRkNvbXBhcmVFcXVhbFRvKQorICAgICAgICB3a1NldENGVVJM
UmVzcG9uc2VNSU1FVHlwZShjZlJlc3BvbnNlLCB1cGRhdGVkTUlNRVR5cGUuZ2V0KCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1tCmluZGV4IDFlYzc3NzdkMDA4
MGYyMjQzZTdmNzAyNDQ3MGZiZTM4YTYxZTMwMDcuLmM5YzMwZjdiNjYwY2Y0MWMzMTIxMDcxZGQ0
ZWM1NWFmOTEyM2U3YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1tCkBAIC00Myw3ICs0MywxMSBAQAogQGVu
ZAogCiBAaW50ZXJmYWNlIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKERldGFpbHMpCisj
aWYgUExBVEZPUk0oSU9TKQorKyhOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopX2NyZWF0
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRm9yQ0ZBdXRoQ2hhbGxlbmdlOihDRlVSTEF1dGhDaGFs
bGVuZ2VSZWYpY2ZDaGFsbGVuZ2Ugc2VuZGVyOihpZCA8TlNVUkxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZVNlbmRlcj4pc2VuZGVyOworI2Vsc2UKICsoTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSAqKV9hdXRoZW50aWNhdGlvbkNoYWxsZW5nZUZvckNGQXV0aENoYWxsZW5nZTooQ0ZVUkxBdXRo
Q2hhbGxlbmdlUmVmKWNmQ2hhbGxlbmdlIHNlbmRlcjooaWQgPE5TVVJMQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VTZW5kZXI+KXNlbmRlcjsKKyNlbmRpZgogQGVuZAogCiBAaW50ZXJmYWNlIE5TVVJM
Q3JlZGVudGlhbCAoRGV0YWlscykKQEAgLTE1NCw3ICsxNTgsMTEgQEAgTlNVUkxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSAqbWFjKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjb3JlQ2hh
bGxlbmdlKQogICAgIGlmICghYXV0aENoYWxsZW5nZSkKICAgICAgICAgYXV0aENoYWxsZW5nZSA9
IGFkb3B0Q0YoY3JlYXRlQ0YoY29yZUNoYWxsZW5nZSkpOwogICAgIFtjaGFsbGVuZ2VTZW5kZXIu
Z2V0KCkgc2V0Q0ZDaGFsbGVuZ2U6YXV0aENoYWxsZW5nZS5nZXQoKV07CisjaWYgUExBVEZPUk0o
SU9TKQorICAgIHJldHVybiBbW05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgX2NyZWF0ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRm9yQ0ZBdXRoQ2hhbGxlbmdlOmF1dGhDaGFsbGVuZ2UuZ2V0
KCkgc2VuZGVyOmNoYWxsZW5nZVNlbmRlci5nZXQoKV0gYXV0b3JlbGVhc2VdOworI2Vsc2UKICAg
ICByZXR1cm4gW1tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIF9hdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUZvckNGQXV0aENoYWxsZW5nZTphdXRoQ2hhbGxlbmdlLmdldCgpIHNlbmRlcjpjaGFs
bGVuZ2VTZW5kZXIuZ2V0KCldIGF1dG9yZWxlYXNlXTsKKyNlbmRpZgogfQogCiBOU1VSTENyZWRl
bnRpYWwgKm1hYyhjb25zdCBDcmVkZW50aWFsJiBjb3JlQ3JlZGVudGlhbCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0NyZWRlbnRpYWxTdG9yYWdlTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ3JlZGVudGlhbFN0b3Jh
Z2VNYWMubW0KaW5kZXggYWE1ZTdhZmYyOTQ1MzM4NWJjODMxYTFjYjdkNGU3YzhjOGJjODczZi4u
MDExMzE1YjI4YjQ0NWI5YmQ3MjI1ZGY2ZDU5NjRmMDE4Yjc5ZDc3NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ3JlZGVudGlhbFN0b3JhZ2VNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ3JlZGVudGlhbFN0b3Jh
Z2VNYWMubW0KQEAgLTM5LDYgKzM5LDE3IEBAIENyZWRlbnRpYWwgQ3JlZGVudGlhbFN0b3JhZ2U6
OmdldEZyb21QZXJzaXN0ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByCiAgICAg
cmV0dXJuIGNyZWRlbnRpYWwgPyBjb3JlKGNyZWRlbnRpYWwpIDogQ3JlZGVudGlhbCgpOwogfQog
CisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBDcmVkZW50aWFsU3RvcmFnZTo6c2F2ZVRvUGVyc2lz
dGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UsIGNvbnN0
IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCit7CisgICAgaWYgKGNyZWRlbnRpYWwucGVyc2lzdGVu
Y2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSB7CisgICAgICAgIENyZWRlbnRpYWwg
c2Vzc2lvbkNyZWRlbnRpYWwoY3JlZGVudGlhbCwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vz
c2lvbik7CisgICAgICAgIFtbTlNVUkxDcmVkZW50aWFsU3RvcmFnZSBzaGFyZWRDcmVkZW50aWFs
U3RvcmFnZV0gc2V0RGVmYXVsdENyZWRlbnRpYWw6bWFjKHNlc3Npb25DcmVkZW50aWFsKSBmb3JQ
cm90ZWN0aW9uU3BhY2U6bWFjKHByb3RlY3Rpb25TcGFjZSldOworICAgIH0gZWxzZQorICAgICAg
ICBbW05TVVJMQ3JlZGVudGlhbFN0b3JhZ2Ugc2hhcmVkQ3JlZGVudGlhbFN0b3JhZ2VdIHNldERl
ZmF1bHRDcmVkZW50aWFsOm1hYyhjcmVkZW50aWFsKSBmb3JQcm90ZWN0aW9uU3BhY2U6bWFjKHBy
b3RlY3Rpb25TcGFjZSldOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vICFVU0UoQ0ZORVRXT1JLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VFcnJvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlRXJyb3JNYWMubW0KaW5kZXggY2VmNmNkZjM0NmUw
ZDIzYzdkZjJiYzU3MGQwYTJhYzY2ZjE0ZDQyZS4uY2M3ZjQ1NDE2NmQ2ZDFkZTdlNDVlNzhjOTFi
NmQ3MmZmYjFkOWM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9tYWMvUmVzb3VyY2VFcnJvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9SZXNvdXJjZUVycm9yTWFjLm1tCkBAIC0zMSwxMCArMzEsMTQ4IEBACiAjaW1w
b3J0IDxDb3JlRm91bmRhdGlvbi9DRkVycm9yLmg+CiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5k
YXRpb24uaD4KIAorI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPENGTmV0d29yay9DRlNvY2tl
dFN0cmVhbVByaXYuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxFcnJvci5oPgorI2VuZGlm
CisKIEBpbnRlcmZhY2UgTlNFcnJvciAoV2ViRXh0cmFzKQogLSAoTlNTdHJpbmcgKilfd2ViX2xv
Y2FsaXplZERlc2NyaXB0aW9uOwogQGVuZAogCisjaWYgUExBVEZPUk0oSU9TKQorCisvLyBUaGlz
IHdvcmthcm91bmQgY29kZSBleGlzdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGNhbGwgdHJhbnNs
YXRlVG9DRkVycm9yIGluIEZvdW5kYXRpb24uIE9uY2Ugd2UKKy8vIGhhdmUgdGhhdCwgd2UgY2Fu
IHJlbW92ZSB0aGlzIGNvZGUuIDxyZGFyOi8vcHJvYmxlbS85ODM3NDE1PiBOZWVkIFNQSSBmb3Ig
dHJhbnNsYXRlQ0ZFcnJvcgorLy8gVGhlIGNvZGUgaXMgbW9zdGx5IGlkZW50aWNhbCB0byBGb3Vu
ZGF0aW9uIC0gSSBjaGFuZ2VkIHRoZSBjbGFzcyBuYW1lIGFuZCBmaXhlZCBtaW5vciBjb21waWxl
IGVycm9ycy4KKy8vIFdlIG5lZWQgdGhpcyBiZWNhdXNlIGNsaWVudCBjb2RlIChTYWZhcmkpIHdh
bnRzIGFuIE5TRXJyb3Igd2l0aCBOU1VSTEVycm9yRG9tYWluIGFzIGl0cyBkb21haW4uCisvLyBU
aGUgRm91bmRhdGlvbiBjb2RlIGJlbG93IGRvZXMgdGhhdCBhbmQgc2V0cyB1cCBhcHByb3ByaWF0
ZSBjZXJ0aWZpY2F0ZSBrZXlzIGluIHRoZSBOU0Vycm9yLgorCitAaW50ZXJmYWNlIFdlYkN1c3Rv
bU5TVVJMRXJyb3IgOiBOU0Vycm9yCisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkN1c3Rv
bU5TVVJMRXJyb3IKKworc3RhdGljIE5TRGljdGlvbmFyeSogZGljdGlvbmFyeVRoYXRDYW5Db2Rl
KE5TRGljdGlvbmFyeSogc3JjKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gbWFrZXMgYSBjb3B5
IG9mIGlucHV0IGRpY3Rpb25hcnksIG1vZGlmaWVzIGl0IHN1Y2ggdGhhdCBpdCAic2hvdWxkIiAo
YXMgbXVjaCBhcyB3ZSBjYW4gaGVscCBpdCkKKyAgICAvLyBub3QgY29udGFpbiBhbnkgb2JqZWN0
cyB0aGF0IGRvIG5vdCBjb25mb3JtIHRvIE5TQ29kaW5nIHByb3RvY29sLCBhbmQgcmV0dXJucyBp
dCBhdXRvcmVsZWFzZWQuCisKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5KiBkc3QgPSBbc3JjIG11
dGFibGVDb3B5XTsKKworICAgIC8vIEtpbGwgdGhlIGtub3duIHByb2JsZW0gZW50cmllcy4KKyAg
ICBbZHN0IHJlbW92ZU9iamVjdEZvcktleTpAIk5TRXJyb3JQZWVyQ2VydGlmaWNhdGVDaGFpbktl
eSJdOyAvLyBOU0FycmF5IHdpdGggU2VjQ2VydGlmaWNhdGVSZWYgb2JqZWN0cworICAgIFtkc3Qg
cmVtb3ZlT2JqZWN0Rm9yS2V5OkAiTlNFcnJvckNsaWVudENlcnRpZmljYXRlQ2hhaW5LZXkiXTsg
Ly8gTlNBcnJheSB3aXRoIFNlY0NlcnRpZmljYXRlUmVmIG9iamVjdHMKKyAgICBbZHN0IHJlbW92
ZU9iamVjdEZvcktleTpOU1VSTEVycm9yRmFpbGluZ1VSTFBlZXJUcnVzdEVycm9yS2V5XTsgLy8g
U2VjVHJ1c3RSZWYgb2JqZWN0CisgICAgW2RzdCByZW1vdmVPYmplY3RGb3JLZXk6TlNVbmRlcmx5
aW5nRXJyb3JLZXldOyAvLyAoSW1tdXRhYmxlKSBDRkVycm9yIGNvbnRhaW5pbmcga0NGIGVxdWl2
YWxlbnQgb2YgdGhlIGFib3ZlCisgICAgLy8gV2UgY291bGQgcmVjb25zdGl0dXRlIHRoaXMgYnV0
IGl0J3MgbW9yZSB0cm91YmxlIHRoYW4gaXQncyB3b3J0aAorCisgICAgLy8gTm9uLWNvbXByZWhl
bnNpdmUgc2FmZXR5IGNoZWNrOiAgS2lsbCB0b3AtbGV2ZWwgZGljdGlvbmFyeSBlbnRyaWVzIHRo
YXQgZG9uJ3QgY29uZm9ybSB0byBOU0NvZGluZy4KKyAgICAvLyBXZSBtYXkgaGl0IG9uZXMgd2Ug
anVzdCByZW1vdmVkLCBidXQgdGhhdCdzIGZpbmUuCisgICAgLy8gV2UgZG9uJ3QgaGFuZGxlIGFy
Yml0cmFyeSBvYmplY3RzIHRoYXQgY2xpZW50cyBoYXZlIHN0dWZmZWQgaW50byB0aGUgZGljdGlv
bmFyeSwgc2luY2Ugd2UgbWF5IG5vdCBrbm93IGhvdyB0bworICAgIC8vIGdldCBhdCBpdHMgY29u
ZW50cyAoZS5nLiwgYSBDRkVycm9yIG9iamVjdCAtLSB5b3UnZCBoYXZlIHRvIGtub3cgaXQgaGFk
IGEgdXNlckluZm8gZGljdGlvbmFyeSBhbmQga2lsbCB0aGluZ3MKKyAgICAvLyBpbnNpZGUgaXQp
LgorICAgIFtzcmMgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oaWQga2V5LCBp
ZCBvYmosIEJPT0wqKSB7CisgICAgICAgIGlmICghIFtvYmogY29uZm9ybXNUb1Byb3RvY29sOkBw
cm90b2NvbChOU0NvZGluZyldKSB7CisgICAgICAgICAgICBbZHN0IHJlbW92ZU9iamVjdEZvcktl
eTprZXldOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBkcmlsbCBkb3du
IGludG8gc3ViZGljdGlvbmFyaWVzLCBidXQgaXQgc2VlbXMgbW9yZSB0cm91YmxlIHRoYW4gaXQn
cyB3b3J0aAorICAgIH1dOworCisgICAgcmV0dXJuIFtkc3QgYXV0b3JlbGVhc2VdOworfQorCist
ICh2b2lkKWVuY29kZVdpdGhDb2RlcjooTlNDb2RlciAqKWNvZGVyCit7CisgICAgTlNEaWN0aW9u
YXJ5KiBuZXdVc2VySW5mbyA9IGRpY3Rpb25hcnlUaGF0Q2FuQ29kZShbc2VsZiB1c2VySW5mb10p
OworCisgICAgW1tOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpbc2VsZiBkb21haW5dIGNvZGU6W3Nl
bGYgY29kZV0gdXNlckluZm86bmV3VXNlckluZm9dIGVuY29kZVdpdGhDb2Rlcjpjb2Rlcl07Cit9
CisKK0BlbmQKKworCisjaWYgVVNFKENGTkVUV09SSykKK3N0YXRpYyBOU0Vycm9yICpOU0Vycm9y
RnJvbUNGRXJyb3IoQ0ZFcnJvclJlZiBjZkVycm9yLCBOU1VSTCAqdXJsKQoreworICAgIENGSW5k
ZXggZXJyQ29kZSA9IENGRXJyb3JHZXRDb2RlKGNmRXJyb3IpOworICAgIGlmIChDRkVxdWFsKENG
RXJyb3JHZXREb21haW4oY2ZFcnJvciksIGtDRkVycm9yRG9tYWluQ0ZOZXR3b3JrKSAmJiBlcnJD
b2RlIDw9IGtDRlVSTEVycm9yVW5rbm93biAmJiBlcnJDb2RlID4gLTQwMDApIHsKKyAgICAgICAg
Ly8gVGhpcyBpcyBhbiBVUkwgZXJyb3IgYW5kIG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQgdG8gdGhl
IE5TVVJMRXJyb3JEb21haW4KKyAgICAgICAgaWQga2V5c1sxMF0sIHZhbHVlc1sxMF07CisgICAg
ICAgIENGRGljdGlvbmFyeVJlZiB1c2VySW5mbyA9IENGRXJyb3JDb3B5VXNlckluZm8oY2ZFcnJv
cik7CisgICAgICAgIE5TRXJyb3IgKnJlc3VsdDsKKyAgICAgICAgTlNJbnRlZ2VyIGNvdW50ID0g
MDsKKworICAgICAgICBpZiAodXJsKSB7CisgICAgICAgICAgICBrZXlzW2NvdW50XSA9IE5TVVJM
RXJyb3JGYWlsaW5nVVJMRXJyb3JLZXk7CisgICAgICAgICAgICB2YWx1ZXNbY291bnRdID0gdXJs
OworICAgICAgICAgICAgY291bnQgKys7CisKKyAgICAgICAgICAgIGtleXNbY291bnRdID0gTlNV
UkxFcnJvckZhaWxpbmdVUkxTdHJpbmdFcnJvcktleTsKKyAgICAgICAgICAgIHZhbHVlc1tjb3Vu
dF0gPSBbdXJsIGFic29sdXRlU3RyaW5nXTsKKyAgICAgICAgICAgIGNvdW50ICsrOworICAgICAg
ICB9CisKKyAgICAgICAgdmFsdWVzW2NvdW50XSA9IChpZClDRkRpY3Rpb25hcnlHZXRWYWx1ZSh1
c2VySW5mbywga0NGRXJyb3JMb2NhbGl6ZWREZXNjcmlwdGlvbktleSk7CisgICAgICAgIGlmICh2
YWx1ZXNbY291bnRdKSB7CisgICAgICAgICAgICBrZXlzW2NvdW50XSA9IE5TTG9jYWxpemVkRGVz
Y3JpcHRpb25LZXk7CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfQorCisgICAgICAg
IHZhbHVlc1tjb3VudF0gPSAoaWQpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUodXNlckluZm8sIGtDRkVy
cm9yTG9jYWxpemVkRmFpbHVyZVJlYXNvbktleSk7CisgICAgICAgIGlmICh2YWx1ZXNbY291bnRd
KSB7CisgICAgICAgICAgICBrZXlzW2NvdW50XSA9IE5TTG9jYWxpemVkRmFpbHVyZVJlYXNvbkVy
cm9yS2V5OworICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKworICAgICAgICB2YWx1
ZXNbY291bnRdID0gKGlkKUNGRGljdGlvbmFyeUdldFZhbHVlKHVzZXJJbmZvLCBrQ0ZFcnJvckxv
Y2FsaXplZFJlY292ZXJ5U3VnZ2VzdGlvbktleSk7CisgICAgICAgIGlmICh2YWx1ZXNbY291bnRd
KSB7CisgICAgICAgICAgICBrZXlzW2NvdW50XSA9IE5TTG9jYWxpemVkUmVjb3ZlcnlTdWdnZXN0
aW9uRXJyb3JLZXk7CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfQorCisjcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgICAgIGlmICh1c2VySW5mbyAmJiAodmFs
dWVzW2NvdW50XSA9IChpZClDRkRpY3Rpb25hcnlHZXRWYWx1ZSh1c2VySW5mbywga0NGU3RyZWFt
UHJvcGVydHlTU0xQZWVyQ2VydGlmaWNhdGVzKSkgIT0gbmlsKSB7CisgICAgICAgICAgICAvLyBO
ZWVkIHRvIHRyYW5zbGF0ZSB0aGUgY2VydAorICAgICAgICAgICAga2V5c1tjb3VudF0gPSBAIk5T
RXJyb3JQZWVyQ2VydGlmaWNhdGVDaGFpbktleSI7CisgICAgICAgICAgICBjb3VudCArKzsKKwor
ICAgICAgICAgICAgdmFsdWVzW2NvdW50XSA9IChpZClDRkRpY3Rpb25hcnlHZXRWYWx1ZSh1c2Vy
SW5mbywgX2tDRlN0cmVhbVByb3BlcnR5U1NMQ2xpZW50Q2VydGlmaWNhdGVzKTsKKyAgICAgICAg
ICAgIGlmICh2YWx1ZXNbY291bnRdKSB7CisgICAgICAgICAgICAgICAga2V5c1tjb3VudF0gPSBA
Ik5TRXJyb3JDbGllbnRDZXJ0aWZpY2F0ZUNoYWluS2V5IjsKKyAgICAgICAgICAgICAgICBjb3Vu
dCArKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFsdWVzW2NvdW50XSA9IChpZClD
RkRpY3Rpb25hcnlHZXRWYWx1ZSh1c2VySW5mbywgX2tDRlN0cmVhbVByb3BlcnR5U1NMQ2xpZW50
Q2VydGlmaWNhdGVTdGF0ZSk7CisgICAgICAgICAgICBpZiAodmFsdWVzW2NvdW50XSkgeworICAg
ICAgICAgICAgICAgIGtleXNbY291bnRdID0gQCJOU0Vycm9yQ2xpZW50Q2VydGlmaWNhdGVTdGF0
ZUtleSI7CisgICAgICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKworICAgICAgICBpZiAodXNlckluZm8g
JiYgKHZhbHVlc1tjb3VudF0gPSAoaWQpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUodXNlckluZm8sIGtD
RlN0cmVhbVByb3BlcnR5U1NMUGVlclRydXN0KSkgIT0gbmlsKSB7CisgICAgICAgICAgICBrZXlz
W2NvdW50XSA9IE5TVVJMRXJyb3JGYWlsaW5nVVJMUGVlclRydXN0RXJyb3JLZXk7CisgICAgICAg
ICAgICBjb3VudCsrOworICAgICAgICB9CisKKyAgICAgICAga2V5c1tjb3VudF0gPSBOU1VuZGVy
bHlpbmdFcnJvcktleTsKKyAgICAgICAgdmFsdWVzW2NvdW50XSA9IChpZCljZkVycm9yOworICAg
ICAgICBjb3VudCArKzsKKworICAgICAgICByZXN1bHQgPSBbV2ViQ3VzdG9tTlNVUkxFcnJvciBl
cnJvcldpdGhEb21haW46TlNVUkxFcnJvckRvbWFpbiBjb2RlOihlcnJDb2RlID09IGtDRlVSTEVy
cm9yVW5rbm93biA/IChDRkluZGV4KU5TVVJMRXJyb3JVbmtub3duIDogZXJyQ29kZSkgdXNlcklu
Zm86W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHM6dmFsdWVzIGZvcktleXM6a2V5
cyBjb3VudDpjb3VudF1dOworICAgICAgICBpZiAodXNlckluZm8pCisgICAgICAgICAgICBDRlJl
bGVhc2UodXNlckluZm8pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICByZXR1
cm4gKE5TRXJyb3IgKiljZkVycm9yOworfQorI2VuZGlmIC8vIFVTRShDRk5FVFdPUkspCisKKyNl
bmRpZiAvLyBQTEFURk9STShJT1MpCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIFJl
dGFpblB0cjxOU0Vycm9yPiBjcmVhdGVOU0Vycm9yRnJvbVJlc291cmNlRXJyb3JCYXNlKGNvbnN0
IFJlc291cmNlRXJyb3JCYXNlJiByZXNvdXJjZUVycm9yKQpAQCAtNzcsNiArMjE1LDE0IEBAIE5T
RXJyb3IgKlJlc291cmNlRXJyb3I6Om5zRXJyb3IoKSBjb25zdAogICAgIGlmIChtX3BsYXRmb3Jt
RXJyb3IpIHsKICAgICAgICAgQ0ZFcnJvclJlZiBlcnJvciA9IG1fcGxhdGZvcm1FcnJvci5nZXQo
KTsKICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gdXNlckluZm8gPSBhZG9wdENG
KENGRXJyb3JDb3B5VXNlckluZm8oZXJyb3IpKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAg
IG1fcGxhdGZvcm1OU0Vycm9yID0gTlNFcnJvckZyb21DRkVycm9yKGVycm9yLCAoTlNVUkwgKilb
KE5TRGljdGlvbmFyeSAqKXVzZXJJbmZvLmdldCgpIG9iamVjdEZvcktleTooaWQpIGtDRlVSTEVy
cm9yRmFpbGluZ1VSTEVycm9yS2V5XSk7CisgICAgICAgIC8vIElmIE5TRXJyb3JGcm9tQ0ZFcnJv
ciBjcmVhdGVkIGEgbmV3IE5TRXJyb3IgZm9yIHVzLCByZXR1cm4gdGhhdC4KKyAgICAgICAgaWYg
KG1fcGxhdGZvcm1OU0Vycm9yLmdldCgpICE9IChOU0Vycm9yICopZXJyb3IpCisgICAgICAgICAg
ICByZXR1cm4gbV9wbGF0Zm9ybU5TRXJyb3IuZ2V0KCk7CisKKyAgICAgICAgLy8gT3RoZXJ3aXNl
IGZhbGwgdGhyb3VnaCB0byBjcmVhdGUgYSBuZXcgTlNFcnJvciBmcm9tIHRoZSBDRkVycm9yLgor
I2VuZGlmCiAgICAgICAgIG1fcGxhdGZvcm1OU0Vycm9yID0gYWRvcHROUyhbW05TRXJyb3IgYWxs
b2NdIGluaXRXaXRoRG9tYWluOihOU1N0cmluZyAqKUNGRXJyb3JHZXREb21haW4oZXJyb3IpIGNv
ZGU6Q0ZFcnJvckdldENvZGUoZXJyb3IpIHVzZXJJbmZvOihOU0RpY3Rpb25hcnkgKil1c2VySW5m
by5nZXQoKV0pOwogICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybU5TRXJyb3IuZ2V0KCk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3Vy
Y2VIYW5kbGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNv
dXJjZUhhbmRsZU1hYy5tbQppbmRleCBlNzNjNjVkMjI3N2Q5ODkyMmU2NzhlYzY1YmVmOGY4Yzdh
OTBlYjRiLi4zZDA0NTE4MTMxNzFhMWI3ODIzYjExNmJmMzVkZjExNjk1YzUyNGM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhh
bmRsZU1hYy5tbQpAQCAtNTYsNiArNTYsMjEgQEAKICNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2lt
cG9ydCA8Q0ZOZXR3b3JrL0NGVVJMUmVxdWVzdC5oPgorCisjaW1wb3J0ICJSdW50aW1lQXBwbGlj
YXRpb25DaGVja3NJT1MuaCIKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIKKworQGludGVy
ZmFjZSBOU1VSTFJlcXVlc3QgKGlPU0RldGFpbHMpCistIChDRlVSTFJlcXVlc3RSZWYpIF9DRlVS
TFJlcXVlc3Q7CitAZW5kCisjZW5kaWYKKworI2lmIFVTRShRVUlDS19MT09LKQorI2ltcG9ydCAi
UXVpY2tMb29rLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbnRl
cmZhY2UgTlNVUkxDb25uZWN0aW9uIChEZXRhaWxzKQpAQCAtOTQsNyArMTA5LDE5IEBAIFJlc291
cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQogICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVw
IGRlc3Ryb3llZCIsIHRoaXMpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGJvb2wg
c3luY2hyb25vdXNXaWxsU2VuZFJlcXVlc3RFbmFibGVkKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBk
aXNhYmxlZCA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JL
ZXk6QCJXZWJLaXREaXNhYmxlU3luY2hyb25vdXNXaWxsU2VuZFJlcXVlc3RQcmVmZXJlbmNlS2V5
Il07CisgICAgcmV0dXJuICFkaXNhYmxlZDsKK30KKyNlbmRpZgorCisjaWYgIVBMQVRGT1JNKElP
UykKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbihpZCBkZWxlZ2F0
ZSwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbCBzaG91bGRDb250ZW50U25p
ZmYpCisjZWxzZQordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlTlNVUkxDb25uZWN0aW9uKGlk
IGRlbGVnYXRlLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29sIHNob3VsZENv
bnRlbnRTbmlmZiwgTlNEaWN0aW9uYXJ5ICpjb25uZWN0aW9uUHJvcGVydGllcykKKyNlbmRpZgog
ewogICAgIC8vIENyZWRlbnRpYWxzIGZvciBmdHAgY2FuIG9ubHkgYmUgcGFzc2VkIGluIFVSTCwg
dGhlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOiBkZWxlZ2F0
ZSBjYWxsIHdvbid0IGJlIG1hZGUuCiAgICAgaWYgKCghZC0+bV91c2VyLmlzRW1wdHkoKSB8fCAh
ZC0+bV9wYXNzLmlzRW1wdHkoKSkgJiYgIWZpcnN0UmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXNJ
bkhUVFBGYW1pbHkoKSkgewpAQCAtMTM0LDE5ICsxNjEsMzMgQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlTlNVUkxDb25uZWN0aW9uKGlkIGRlbGVnYXRlLCBib29sIHNob3VsZFVzZUNyZWRl
bnRpYWwKIAogICAgIEFTU0VSVChbTlNVUkxDb25uZWN0aW9uIGluc3RhbmNlc1Jlc3BvbmRUb1Nl
bGVjdG9yOkBzZWxlY3RvcihfaW5pdFdpdGhSZXF1ZXN0OmRlbGVnYXRlOnVzZXNDYWNoZTptYXhD
b250ZW50TGVuZ3RoOnN0YXJ0SW1tZWRpYXRlbHk6Y29ubmVjdGlvblByb3BlcnRpZXM6KV0pOwog
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIE5TRGljdGlvbmFyeSAqc3RyZWFtUHJvcGVydGllc0Zy
b21DbGllbnQgPSBbY29ubmVjdGlvblByb3BlcnRpZXMgb2JqZWN0Rm9yS2V5OkAia0NGVVJMQ29u
bmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMiXTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICpzdHJlYW1Qcm9wZXJ0aWVzID0gc3RyZWFtUHJvcGVydGllc0Zyb21DbGllbnQgPyBbW3N0cmVh
bVByb3BlcnRpZXNGcm9tQ2xpZW50IG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV0gOiBbTlNNdXRh
YmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKyNlbHNlCiAgICAgTlNNdXRhYmxlRGljdGlvbmFy
eSAqc3RyZWFtUHJvcGVydGllcyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwor
I2VuZGlmCiAKICAgICBpZiAoIXNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQogICAgICAgICBb
c3RyZWFtUHJvcGVydGllcyBzZXRPYmplY3Q6QCJXZWJLaXRQcml2YXRlU2Vzc2lvbiIgZm9yS2V5
OkAiX2tDRlVSTENvbm5lY3Rpb25TZXNzaW9uSUQiXTsKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gc291
cmNlQXBwbGljYXRpb25BdWRpdERhdGEgPSBkLT5tX2NvbnRleHQtPnNvdXJjZUFwcGxpY2F0aW9u
QXVkaXREYXRhKCk7CiAgICAgaWYgKHNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhKQogICAgICAg
ICBbc3RyZWFtUHJvcGVydGllcyBzZXRPYmplY3Q6KE5TRGF0YSAqKXNvdXJjZUFwcGxpY2F0aW9u
QXVkaXREYXRhLmdldCgpIGZvcktleTpAImtDRlN0cmVhbVByb3BlcnR5U291cmNlQXBwbGljYXRp
b24iXTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIE5TTXV0YWJsZURpY3Rpb25h
cnkgKnByb3BlcnR5RGljdGlvbmFyeSA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnlX
aXRoRGljdGlvbmFyeTpjb25uZWN0aW9uUHJvcGVydGllc107CisgICAgW3Byb3BlcnR5RGljdGlv
bmFyeSBzZXRPYmplY3Q6c3RyZWFtUHJvcGVydGllcyBmb3JLZXk6QCJrQ0ZVUkxDb25uZWN0aW9u
U29ja2V0U3RyZWFtUHJvcGVydGllcyJdOworICAgIGNvbnN0IGJvb2wgdXNlc0NhY2hlID0gZmFs
c2U7CisgICAgaWYgKHN5bmNocm9ub3VzV2lsbFNlbmRSZXF1ZXN0RW5hYmxlZCgpKQorICAgICAg
ICBDRlVSTFJlcXVlc3RTZXRTaG91bGRTdGFydFN5bmNocm9ub3VzbHkoW25zUmVxdWVzdCBfQ0ZV
UkxSZXF1ZXN0XSwgMSk7CisjZWxzZQogICAgIE5TRGljdGlvbmFyeSAqcHJvcGVydHlEaWN0aW9u
YXJ5ID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpzdHJlYW1Qcm9wZXJ0aWVz
IGZvcktleTpAImtDRlVSTENvbm5lY3Rpb25Tb2NrZXRTdHJlYW1Qcm9wZXJ0aWVzIl07Ci0gICAg
ZC0+bV9jb25uZWN0aW9uID0gYWRvcHROUyhbW05TVVJMQ29ubmVjdGlvbiBhbGxvY10gX2luaXRX
aXRoUmVxdWVzdDpuc1JlcXVlc3QgZGVsZWdhdGU6ZGVsZWdhdGUgdXNlc0NhY2hlOllFUyBtYXhD
b250ZW50TGVuZ3RoOjAgc3RhcnRJbW1lZGlhdGVseTpOTyBjb25uZWN0aW9uUHJvcGVydGllczpw
cm9wZXJ0eURpY3Rpb25hcnldKTsKKyAgICBjb25zdCBib29sIHVzZXNDYWNoZSA9IHRydWU7Cisj
ZW5kaWYKKyAgICBkLT5tX2Nvbm5lY3Rpb24gPSBhZG9wdE5TKFtbTlNVUkxDb25uZWN0aW9uIGFs
bG9jXSBfaW5pdFdpdGhSZXF1ZXN0Om5zUmVxdWVzdCBkZWxlZ2F0ZTpkZWxlZ2F0ZSB1c2VzQ2Fj
aGU6dXNlc0NhY2hlIG1heENvbnRlbnRMZW5ndGg6MCBzdGFydEltbWVkaWF0ZWx5Ok5PIGNvbm5l
Y3Rpb25Qcm9wZXJ0aWVzOnByb3BlcnR5RGljdGlvbmFyeV0pOwogfQogCiBib29sIFJlc291cmNl
SGFuZGxlOjpzdGFydCgpCkBAIC0xNjgsMTEgKzIwOSwyNCBAQCBib29sIFJlc291cmNlSGFuZGxl
OjpzdGFydCgpCiAKICAgICBkLT5tX25lZWRzU2l0ZVNwZWNpZmljUXVpcmtzID0gZC0+bV9jb250
ZXh0LT5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBjcmVhdGVOU1VSTENvbm5lY3Rpb24oCiAgICAgICAgIFJlc291cmNlSGFuZGxlOjpkZWxlZ2F0
ZSgpLAogICAgICAgICBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwKICAgICAgICAgZC0+bV9z
aG91bGRDb250ZW50U25pZmYgfHwgZC0+bV9jb250ZXh0LT5sb2NhbEZpbGVDb250ZW50U25pZmZp
bmdFbmFibGVkKCkpOworI2Vsc2UKKyAgICBjcmVhdGVOU1VSTENvbm5lY3Rpb24oCisgICAgICAg
IGQtPm1fcHJveHkuZ2V0KCksCisgICAgICAgIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLAor
ICAgICAgICBkLT5tX3Nob3VsZENvbnRlbnRTbmlmZiB8fCBkLT5tX2NvbnRleHQtPmxvY2FsRmls
ZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSwKKyAgICAgICAgKE5TRGljdGlvbmFyeSAqKWNsaWVu
dCgpLT5jb25uZWN0aW9uUHJvcGVydGllcyh0aGlzKSk7CisjZW5kaWYKIAorI2lmIFBMQVRGT1JN
KElPUykKKyAgICBOU1VSTENvbm5lY3Rpb24gKnVybENvbm5lY3Rpb24gPSBjb25uZWN0aW9uKCk7
CisgICAgW3VybENvbm5lY3Rpb24gc2NoZWR1bGVJblJ1bkxvb3A6V2ViVGhyZWFkTlNSdW5Mb29w
KCkgZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07CisgICAgW3VybENvbm5lY3Rpb24gc3Rh
cnRdOworI2Vsc2UKICAgICBib29sIHNjaGVkdWxlZCA9IGZhbHNlOwogICAgIGlmIChTY2hlZHVs
ZVBhaXJIYXNoU2V0KiBzY2hlZHVsZWRQYWlycyA9IGQtPm1fY29udGV4dC0+c2NoZWR1bGVkUnVu
TG9vcFBhaXJzKCkpIHsKICAgICAgICAgU2NoZWR1bGVQYWlySGFzaFNldDo6aXRlcmF0b3IgZW5k
ID0gc2NoZWR1bGVkUGFpcnMtPmVuZCgpOwpAQCAtMTk2LDYgKzI1MCw3IEBAIGJvb2wgUmVzb3Vy
Y2VIYW5kbGU6OnN0YXJ0KCkKICAgICAgICAgW2Nvbm5lY3Rpb24oKSBzdGFydF07CiAgICAgZWxz
ZQogICAgICAgICBkLT5tX3N0YXJ0V2hlblNjaGVkdWxlZCA9IHRydWU7CisjZW5kaWYKIAogICAg
IExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIHN0YXJ0aW5nIGNvbm5lY3Rpb24gJXAgZm9yICVAIiwg
dGhpcywgY29ubmVjdGlvbigpLCBmaXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoRG9Ob3RVcGRh
dGVIVFRQQm9keSkpOwogICAgIApAQCAtMjMwLDYgKzI4NSw3IEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKIAogdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6c2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBwYWlyKQogeworI2lmICFQTEFURk9STShJ
T1MpCiAgICAgTlNSdW5Mb29wICpydW5Mb29wID0gcGFpci0+bnNSdW5Mb29wKCk7CiAgICAgaWYg
KCFydW5Mb29wKQogICAgICAgICByZXR1cm47CkBAIC0yMzgsMTIgKzI5NCwxOSBAQCB2b2lkIFJl
c291cmNlSGFuZGxlOjpzY2hlZHVsZShTY2hlZHVsZVBhaXIqIHBhaXIpCiAgICAgICAgIFtkLT5t
X2Nvbm5lY3Rpb24uZ2V0KCkgc3RhcnRdOwogICAgICAgICBkLT5tX3N0YXJ0V2hlblNjaGVkdWxl
ZCA9IGZhbHNlOwogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhaXIpOworI2VuZGlm
CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnVuc2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBwYWly
KQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKE5TUnVuTG9vcCAqcnVuTG9vcCA9IHBh
aXItPm5zUnVuTG9vcCgpKQogICAgICAgICBbZC0+bV9jb25uZWN0aW9uLmdldCgpIHVuc2NoZWR1
bGVGcm9tUnVuTG9vcDpydW5Mb29wIGZvck1vZGU6KE5TU3RyaW5nICopcGFpci0+bW9kZSgpXTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhaXIpOworI2VuZGlmCiB9CiAKIGlkIFJlc291cmNl
SGFuZGxlOjpkZWxlZ2F0ZSgpCkBAIC0yOTksMTAgKzM2MiwxOSBAQCB2b2lkIFJlc291cmNlSGFu
ZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleAogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBoYW5kbGUtPmNyZWF0ZU5TVVJMQ29ubmVjdGlvbigKICAgICAgICAgaGFuZGxlLT5kZWxlZ2F0
ZSgpLAogICAgICAgICBzdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxz
LAogICAgICAgICBoYW5kbGUtPnNob3VsZENvbnRlbnRTbmlmZigpIHx8IGNvbnRleHQtPmxvY2Fs
RmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSk7CisjZWxzZQorICAgIGhhbmRsZS0+Y3JlYXRl
TlNVUkxDb25uZWN0aW9uKAorICAgICAgICBoYW5kbGUtPmRlbGVnYXRlKCksIC8vIEEgc3luY2hy
b25vdXMgcmVxdWVzdCBjYW5ub3QgdHVybiBpbnRvIGEgZG93bmxvYWQsIHNvIHRoZXJlIGlzIG5v
IG5lZWQgdG8gcHJveHkgdGhlIGRlbGVnYXRlLgorICAgICAgICBzdG9yZWRDcmVkZW50aWFscyA9
PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLAorICAgICAgICBzaG91bGRSZWxheFRoaXJkUGFydHlD
b29raWVQb2xpY3koY29udGV4dCwgcmVxdWVzdC51cmwoKSksCisgICAgICAgIGhhbmRsZS0+c2hv
dWxkQ29udGVudFNuaWZmKCkgfHwgKGNvbnRleHQgJiYgY29udGV4dC0+bG9jYWxGaWxlQ29udGVu
dFNuaWZmaW5nRW5hYmxlZCgpKSwKKyAgICAgICAgKE5TRGljdGlvbmFyeSAqKWhhbmRsZS0+Y2xp
ZW50KCktPmNvbm5lY3Rpb25Qcm9wZXJ0aWVzKGhhbmRsZS5nZXQoKSkpOworI2VuZGlmCiAKICAg
ICBbaGFuZGxlLT5jb25uZWN0aW9uKCkgc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBjdXJy
ZW50UnVuTG9vcF0gZm9yTW9kZTooTlNTdHJpbmcgKilzeW5jaHJvbm91c0xvYWRSdW5Mb29wTW9k
ZSgpXTsKICAgICBbaGFuZGxlLT5jb25uZWN0aW9uKCkgc3RhcnRdOwpAQCAtNDkyLDYgKzU2NCwx
OSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbAogICAgICAgICB9CiAgICAgfQogCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIC8vIElmIHRoZSBjaGFsbGVuZ2UgaXMgZm9yIGEgcHJveHkgcHJvdGVj
dGlvbiBzcGFjZSwgbG9vayBmb3IgZGVmYXVsdCBjcmVkZW50aWFscyBpbgorICAgIC8vIHRoZSBr
ZXljaGFpbi4gIENGTmV0d29yayB1c2VkIHRvIGhhbmRsZSB0aGlzIHVudGlsIFdlYkNvcmUgd2Fz
IGNoYW5nZWQgdG8gYWx3YXlzCisgICAgLy8gcmV0dXJuIE5PIHRvIC1jb25uZWN0aW9uU2hvdWxk
VXNlQ3JlZGVudGlhbFN0b3JhZ2U6IGZvciA8cmRhcjovL3Byb2JsZW0vNzcwNDk0Mz4uCisgICAg
aWYgKCFjaGFsbGVuZ2UucHJldmlvdXNGYWlsdXJlQ291bnQoKSAmJiBjaGFsbGVuZ2UucHJvdGVj
dGlvblNwYWNlKCkuaXNQcm94eSgpKSB7CisgICAgICAgIE5TVVJMQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UgKm1hY0NoYWxsZW5nZSA9IG1hYyhjaGFsbGVuZ2UpOworICAgICAgICBpZiAoTlNVUkxD
cmVkZW50aWFsICpjcmVkZW50aWFsID0gW1tOU1VSTENyZWRlbnRpYWxTdG9yYWdlIHNoYXJlZENy
ZWRlbnRpYWxTdG9yYWdlXSBkZWZhdWx0Q3JlZGVudGlhbEZvclByb3RlY3Rpb25TcGFjZTpbbWFj
Q2hhbGxlbmdlIHByb3RlY3Rpb25TcGFjZV1dKSB7CisgICAgICAgICAgICBbY2hhbGxlbmdlLnNl
bmRlcigpIHVzZUNyZWRlbnRpYWw6Y3JlZGVudGlhbCBmb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZTptYWNDaGFsbGVuZ2VdOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogICAgIGQtPm1fY3VycmVudE1hY0NoYWxsZW5nZSA9
IGNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCk7CiAgICAgZC0+bV9jdXJy
ZW50V2ViQ2hhbGxlbmdlID0gY29yZShkLT5tX2N1cnJlbnRNYWNDaGFsbGVuZ2UpOwogICAgIGQt
Pm1fY3VycmVudFdlYkNoYWxsZW5nZS5zZXRBdXRoZW50aWNhdGlvbkNsaWVudCh0aGlzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVx
dWVzdE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNl
UmVxdWVzdE1hYy5tbQppbmRleCA4NjkxNDA1MGZiZmRiOGE2YTVmZTdiYmM5YTM4MGY4ODI4ZmM0
MTIyLi4zYzc4YzY4NjEwNTQzMmFmYmIyOGJjM2IxN2IxN2U4MjhlNDk2N2JlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1
ZXN0TWFjLm1tCkBAIC01OSw2ICs1OSw5IEBAIE5TVVJMUmVxdWVzdCAqUmVzb3VyY2VSZXF1ZXN0
Ojpuc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3kgYm9keVBvbGljeSkgY29uCiAKIFJl
c291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1ZXN0KE5TVVJMUmVxdWVzdCAqbnNSZXF1ZXN0KQog
ICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSgpCisjaWYgUExBVEZPUk0oSU9TKQorICAgICwgbV9t
YWluUmVzb3VyY2VSZXF1ZXN0KGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX2NmUmVxdWVzdChbbnNS
ZXF1ZXN0IF9DRlVSTFJlcXVlc3RdKQogICAgICwgbV9uc1JlcXVlc3QobnNSZXF1ZXN0KQogewpA
QCAtNjYsOCArNjksMjUgQEAgUmVzb3VyY2VSZXF1ZXN0OjpSZXNvdXJjZVJlcXVlc3QoTlNVUkxS
ZXF1ZXN0ICpuc1JlcXVlc3QpCiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVOU1VSTFJl
cXVlc3QoKQogeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBUaGVyZSBpcyBjbGllbnQgY29k
ZSB0aGF0IGV4dGVuZHMgTlNVUkxSZXF1ZXN0IGFuZCBleHBlY3RzIHRvIGdldCBiYWNrLCBpbiB0
aGUgZGVsZWdhdGUKKyAgICAvLyBjYWxsYmFja3MsIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBl
IHRoYXQgdGhleSBwYXNzZWQgaW50byBXZWJLaXQuIFRvIGtlZXAgdGhlbiBydW5uaW5nLCB3ZQor
ICAgIC8vIGNyZWF0ZSBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhbmQgcmV0dXJuIHRoYXQu
IFNlZSA8cmRhcjovLzk4NDM1ODI+LgorICAgIC8vIEFsc28sIGRldmVsb3BlcnMgcmVhbGx5IHJl
YWxseSB3YW50IGFuIE5TTXV0YWJsZVVSTFJlcXVlc3Qgc28gdHJ5IHRvIGNyZWF0ZSBhbgorICAg
IC8vIE5TTXV0YWJsZVVSTFJlcXVlc3QgaW5zdGVhZCBvZiBOU1VSTFJlcXVlc3QuCisgICAgc3Rh
dGljIENsYXNzIG5zVVJMUmVxdWVzdENsYXNzID0gW05TVVJMUmVxdWVzdCBjbGFzc107CisgICAg
c3RhdGljIENsYXNzIG5zTXV0YWJsZVVSTFJlcXVlc3RDbGFzcyA9IFtOU011dGFibGVVUkxSZXF1
ZXN0IGNsYXNzXTsKKyAgICBDbGFzcyByZXF1ZXN0Q2xhc3MgPSBbbV9uc1JlcXVlc3QuZ2V0KCkg
Y2xhc3NdOworCisgICAgaWYgKCFyZXF1ZXN0Q2xhc3MgfHwgcmVxdWVzdENsYXNzID09IG5zVVJM
UmVxdWVzdENsYXNzKQorICAgICAgICByZXF1ZXN0Q2xhc3MgPSBuc011dGFibGVVUkxSZXF1ZXN0
Q2xhc3M7CisKKyAgICBpZiAobV9jZlJlcXVlc3QpCisgICAgICAgIG1fbnNSZXF1ZXN0ID0gYWRv
cHROUyhbW3JlcXVlc3RDbGFzcyBhbGxvY10gX2luaXRXaXRoQ0ZVUkxSZXF1ZXN0Om1fY2ZSZXF1
ZXN0LmdldCgpXSk7CisjZWxzZQogICAgIGlmIChtX2NmUmVxdWVzdCkKICAgICAgICAgbV9uc1Jl
cXVlc3QgPSBhZG9wdE5TKFtbTlNVUkxSZXF1ZXN0IGFsbG9jXSBfaW5pdFdpdGhDRlVSTFJlcXVl
c3Q6bV9jZlJlcXVlc3QuZ2V0KCldKTsKKyNlbmRpZgogfQogCiAjZWxzZQpAQCAtMjMyLDggKzI1
MiwxMCBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBkYXRlRnJvbURlbGVnYXRlUHJlc2Vydmlu
Z09sZEhUVFBCb2R5KGNvbnN0IFJlc291cmNlUmVxdQogCiB2b2lkIFJlc291cmNlUmVxdWVzdDo6
YXBwbHlXZWJBcmNoaXZlSGFja0Zvck1haWwoKQogeworI2lmICFQTEFURk9STShJT1MpCiAgICAg
Ly8gSGFjayBiZWNhdXNlIE1haWwgY2hlY2tzIGZvciB0aGlzIHByb3BlcnR5IHRvIGRldGVjdCBk
YXRhIC8gYXJjaGl2ZSBsb2FkcwogICAgIFtOU1VSTFByb3RvY29sIHNldFByb3BlcnR5OkAiIiBm
b3JLZXk6QCJXZWJEYXRhUmVxdWVzdCIgaW5SZXF1ZXN0OihOU011dGFibGVVUkxSZXF1ZXN0ICop
bnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpXTsKKyNlbmRpZgogfQogCiB2b2lkIFJl
c291cmNlUmVxdWVzdDo6c2V0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBz
dG9yYWdlU2Vzc2lvbikKQEAgLTI0NCw2ICsyNjYsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6
c2V0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbikK
ICAgICAKICNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JLKQogCisjaWYgIVBMQVRGT1JNKElPUykKIHN0
YXRpYyBib29sIGluaXRRdWlja0xvb2tSZXNvdXJjZUNhY2hpbmdRdWlya3MoKQogewogICAgIGlm
IChhcHBsaWNhdGlvbklzU2FmYXJpKCkpCkBAIC0yNjIsMTEgKzI4NSwxNiBAQCBzdGF0aWMgYm9v
bCBpbml0UXVpY2tMb29rUmVzb3VyY2VDYWNoaW5nUXVpcmtzKCkKICAgICB9CiAgICAgcmV0dXJu
IGZhbHNlOwogfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIGJvb2wgUmVzb3VyY2VSZXF1
ZXN0Ojp1c2VRdWlja0xvb2tSZXNvdXJjZUNhY2hpbmdRdWlya3MoKQogeworI2lmICFQTEFURk9S
TShJT1MpCiAgICAgc3RhdGljIGJvb2wgZmxhZyA9IGluaXRRdWlja0xvb2tSZXNvdXJjZUNhY2hp
bmdRdWlya3MoKTsKICAgICByZXR1cm4gZmxhZzsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmIC8vICFQTEFURk9STShJT1MpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1VUSVV0aWxpdGll
cy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1VUSVV0aWxpdGllcy5t
bQppbmRleCA0MjU5Mjk4MDBmNWFiZmE3ZDYyZDYzYmExNGQ5ZTg4MTJiNjJmZjMzLi42N2I4ZDVl
NTVmMDc2ZjgyM2Y1ZTU2MWNmNDVjNmYzOWNmMzlkMjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9VVElVdGlsaXRpZXMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvVVRJVXRpbGl0aWVzLm1tCkBAIC0zNCw2ICszNCw3
IEBAIFNPRlRfTElOS19GUkFNRVdPUksoTW9iaWxlQ29yZVNlcnZpY2VzKQogCiBTT0ZUX0xJTkso
TW9iaWxlQ29yZVNlcnZpY2VzLCBVVFR5cGVDb3B5RGVjbGFyYXRpb24sIENGRGljdGlvbmFyeVJl
ZiwgKENGU3RyaW5nUmVmIGluVVRJKSwgKGluVVRJKSkKIFNPRlRfTElOSyhNb2JpbGVDb3JlU2Vy
dmljZXMsIFVUVHlwZUNvcHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3MsIENGU3RyaW5nUmVmLCAoQ0ZT
dHJpbmdSZWYgaW5VVEksIENGU3RyaW5nUmVmIGluVGFnQ2xhc3MpLCAoaW5VVEksIGluVGFnQ2xh
c3MpKQorU09GVF9MSU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywgVVRUeXBlQ3JlYXRlUHJlZmVycmVk
SWRlbnRpZmllckZvclRhZywgQ0ZTdHJpbmdSZWYsIChDRlN0cmluZ1JlZiBpblRhZ0NsYXNzLCBD
RlN0cmluZ1JlZiBpblRhZywgQ0ZTdHJpbmdSZWYgaW5Db25mb3JtaW5nVG9VVEkpLCAoaW5UYWdD
bGFzcywgaW5UYWcsIGluQ29uZm9ybWluZ1RvVVRJKSkKIAogU09GVF9MSU5LX0NPTlNUQU5UKE1v
YmlsZUNvcmVTZXJ2aWNlcywga1VUVHlwZUNvbmZvcm1zVG9LZXksIENGU3RyaW5nUmVmKQogU09G
VF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVTZXJ2aWNlcywga1VUVGFnQ2xhc3NNSU1FVHlwZSwg
Q0ZTdHJpbmdSZWYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L21hYy9XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5tbQpp
bmRleCBiMTM0ZjU1ZjE2ZTEwYTI1M2U2YzJlZjAwM2ZiNjgzMGE3NDFjMzBlLi45NzNiYTYyYzRk
ODhhMTgwNGMwOGNkYzc4Y2M2NzIwMWZkOGI3YzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJj
ZUhhbmRsZUFzRGVsZWdhdGUubW0KQEAgLTkzLDEwICs5MywxNCBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAogICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rp
b25TaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZTolcCIsIG1faGFuZGxlLCBjb25uZWN0aW9uKTsK
IAorI2lmIFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4gTk87CisjZWxzZQogICAgIGlmICghbV9o
YW5kbGUpCiAgICAgICAgIHJldHVybiBOTzsKIAogICAgIHJldHVybiBtX2hhbmRsZS0+c2hvdWxk
VXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKKyNlbmRpZgogfQogCiAtICh2b2lkKWNvbm5lY3Rpb246
KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxlbmdlCkBAIC0xNDEs
NyArMTQ1LDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIC0gKHZvaWQpY29ubmVjdGlv
bjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJM
UmVzcG9uc2UgKilyCiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBVTlVTRURfUEFSQU0oY29u
bmVjdGlvbik7CisjZW5kaWYKIAogICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRl
IGNvbm5lY3Rpb246JXAgZGlkUmVjZWl2ZVJlc3BvbnNlOiVwIChIVFRQIHN0YXR1cyAlZCwgcmVw
b3J0ZWQgTUlNRVR5cGUgJyVzJykiLCBtX2hhbmRsZSwgY29ubmVjdGlvbiwgciwgW3IgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzdGF0dXNDb2RlKV0gPyBbKGlkKXIgc3RhdHVzQ29kZV0g
OiAwLCBbW3IgTUlNRVR5cGVdIFVURjhTdHJpbmddKTsKIApAQCAtMTUzLDggKzE1OSwxNiBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBpZiAoc3RhdHVzQ29kZSAhPSAzMDQpCiAgICAg
ICAgIGFkanVzdE1JTUVUeXBlSWZOZWNlc3NhcnkoW3IgX0NGVVJMUmVzcG9uc2VdKTsKIAorI2lm
ICFQTEFURk9STShJT1MpCiAgICAgaWYgKFttX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkubnNVUkxS
ZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpIF9wcm9wZXJ0eUZvcktleTpAIkZvcmNlSFRNTE1J
TUVUeXBlIl0pCiAgICAgICAgIFtyIF9zZXRNSU1FVHlwZTpAInRleHQvaHRtbCJdOworI2VuZGlm
CisKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBtX2hhbmRsZS0+c2V0UXVpY2tMb29rSGFuZGxl
KFF1aWNrTG9va0hhbmRsZTo6Y3JlYXRlKG1faGFuZGxlLCBjb25uZWN0aW9uLCByLCBzZWxmKSk7
CisgICAgaWYgKG1faGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKSkKKyAgICAgICAgciA9IG1faGFu
ZGxlLT5xdWlja0xvb2tIYW5kbGUoKS0+bnNSZXNwb25zZSgpOworI2VuZGlmCiAKICAgICBtX2hh
bmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZShtX2hhbmRsZSwgcik7CiB9CkBAIC0x
NzEsNiArMTg1LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIGlmICghbV9oYW5k
bGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgVVNFKFFV
SUNLX0xPT0spCisgICAgaWYgKG1faGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKSAmJiBtX2hhbmRs
ZS0+cXVpY2tMb29rSGFuZGxlKCktPmRpZFJlY2VpdmVEYXRhQXJyYXkocmVpbnRlcnByZXRfY2Fz
dDxDRkFycmF5UmVmPihkYXRhQXJyYXkpKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAg
ICBtX2hhbmRsZS0+aGFuZGxlRGF0YUFycmF5KHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZBcnJheVJlZj4o
ZGF0YUFycmF5KSk7CiAgICAgLy8gVGhlIGNhbGwgdG8gZGlkUmVjZWl2ZURhdGEgYWJvdmUgY2Fu
IGNhbmNlbCBhIGxvYWQsIGFuZCBpZiBzbywgdGhlIGRlbGVnYXRlIChzZWxmKSBjb3VsZCBoYXZl
IGJlZW4gZGVhbGxvY2F0ZWQgYnkgdGhpcyBwb2ludC4KIH0KQEAgLTE4MywxMiArMjAyLDIyIEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAgICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAg
ZGVsZWdhdGUgY29ubmVjdGlvbjolcCBkaWRSZWNlaXZlRGF0YTolcCBsZW5ndGhSZWNlaXZlZDol
bGxkIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIGRhdGEsIGxlbmd0aFJlY2VpdmVkKTsKIAorI2lm
IFBMQVRGT1JNKElPUykKKyAgICBpZiAoW2RhdGEgbGVuZ3RoXSA9PSAwKSAvLyA8cmRhcjovL3By
b2JsZW0vNTUzMjkzMT4KKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICBpZiAoIW1faGFu
ZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBGSVhN
RTogSWYgd2UgZ2V0IG1vcmUgdGhhbiAyQiBieXRlcyBpbiBhIHNpbmdsZSBjaHVuaywgdGhpcyBj
b2RlIHdvbid0IGRvIHRoZSByaWdodCB0aGluZy4KICAgICAvLyBIb3dldmVyLCB3aXRoIHRvZGF5
J3MgY29tcHV0ZXJzIGFuZCBuZXR3b3JraW5nIHNwZWVkcywgdGhpcyB3b24ndCBoYXBwZW4gaW4g
cHJhY3RpY2UuCiAgICAgLy8gQ291bGQgYmUgYW4gaXNzdWUgd2l0aCBhIGdpYW50IGxvY2FsIGZp
bGUuCiAKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBpZiAobV9oYW5kbGUtPnF1aWNrTG9va0hh
bmRsZSgpICYmIG1faGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKS0+ZGlkUmVjZWl2ZURhdGEocmVp
bnRlcnByZXRfY2FzdDxDRkRhdGFSZWY+KGRhdGEpKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlm
CisKICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NzkzCiAgICAgLy8gLTEgbWVhbnMgd2UgZG8gbm90IHByb3ZpZGUgYW55IGRhdGEgYWJvdXQg
dHJhbnNmZXIgc2l6ZSB0byBpbnNwZWN0b3Igc28gaXQgd291bGQgdXNlCiAgICAgLy8gQ29udGVu
dC1MZW5ndGggaGVhZGVycyBvciBjb250ZW50IHNpemUgdG8gc2hvdyB0cmFuc2ZlciBzaXplLgpA
QCAtMjMwLDYgKzI1OSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBpZiAoIW1f
aGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKIAorI2lmIFVT
RShRVUlDS19MT09LKQorICAgIGlmIChtX2hhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCkgJiYgbV9o
YW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpLT5kaWRGaW5pc2hMb2FkaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyNlbmRpZgorCiAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5n
KG1faGFuZGxlLCAwKTsKIH0KIApAQCAtMjQyLDYgKzI3NiwxMSBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKICAgICBpZiAoIW1faGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCiAgICAg
ICAgIHJldHVybjsKIAorI2lmIFVTRShRVUlDS19MT09LKQorICAgIGlmIChtX2hhbmRsZS0+cXVp
Y2tMb29rSGFuZGxlKCkpCisgICAgICAgIG1faGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKS0+ZGlk
RmFpbCgpOworI2VuZGlmCisKICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZEZhaWwobV9oYW5k
bGUsIGVycm9yKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZURhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuaAppbmRleCBmMTU1MDhjNDBhMGY5MWNmOTJmZTg4NzIxMTNkYzBkNDFhMTcxZWZiLi4x
Y2RmMTc3OTc0NWJhNjliNTc3MGRjNTljMDliNzNmZmI4YmQ2ODU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaApAQCAtMTA3LDcgKzEwNyw5IEBAIHB1
YmxpYzoKICAgICBjb25zdCBjaGFyKiBsYXN0RXJyb3JNc2coKTsKICAgICAKICAgICBzcWxpdGUz
KiBzcWxpdGUzSGFuZGxlKCkgY29uc3QgeworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIEFT
U0VSVChtX3NoYXJhYmxlIHx8IGN1cnJlbnRUaHJlYWQoKSA9PSBtX29wZW5pbmdUaHJlYWQgfHwg
IW1fZGIpOworI2VuZGlmCiAgICAgICAgIHJldHVybiBtX2RiOwogICAgIH0KICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAppbmRleCA3
MzVmMGI0MWY3OGUyYzIzM2E3YzliYmNmODdlMjExMDRjMDEzNzYwLi5lNzA5NGI0ZGE0ZTg2ZTE2
ZDM0MjA3YTBhMjMwMTc4MWYxYmNlMzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCkBAIC0zOCw2ICszOCwxMCBAQAogI2luY2x1ZGUg
PGludHR5cGVzLmg+CiAjaW5jbHVkZSA8c3FsaXRlMy5oPgogCisjaWYgUExBVEZPUk0oSU9TKQor
I2luY2x1ZGUgPHNxbGl0ZTNfcHJpdmF0ZS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogU1FMaXRlRmlsZVN5c3RlbTo6U1FMaXRlRmlsZVN5c3RlbSgpCkBAIC0xMTAsNiArMTE0
LDEzIEBAIGJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0
cmluZyYgZmlsZU5hbWUpCiAgICAgcmV0dXJuIGRlbGV0ZUZpbGUoZmlsZU5hbWUpOwogfQogCisj
aWYgUExBVEZPUk0oSU9TKQorYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjp0cnVuY2F0ZURhdGFiYXNl
RmlsZShzcWxpdGUzKiBkYXRhYmFzZSkKK3sKKyAgICByZXR1cm4gc3FsaXRlM19maWxlX2NvbnRy
b2woZGF0YWJhc2UsIDAsIFNRTElURV9UUlVOQ0FURV9EQVRBQkFTRSwgMCkgPT0gU1FMSVRFX09L
OworfQorI2VuZGlmCisgICAgCiBsb25nIGxvbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJh
c2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQogeyAgICAgICAgCiAgICAgbG9uZyBs
b25nIHNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
RmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0
ZW0uaAppbmRleCAxNDA4NWI5MjljODViODdhYzA1NjJiYzlmZWM3YTNmMWM3NzAzMTY0Li5hN2Vm
NjVlNjc1MWU0NjE5YzY1ZWEzYzIwNGQzMDk3YzdkNjBkYzY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKQEAgLTk5LDYgKzk5LDEzIEBAIHB1
YmxpYzoKICAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuCiAgICAgc3RhdGljIGJvb2wg
ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOwogCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIC8vIFRydW5jYXRlcyBhIGRhdGFiYXNlIGZpbGUuIFVzZWQgd2hlbiBNb2Jp
bGVTYWZhcmlTZXR0aW5ncyBkZWxldGVzIGEgZGF0YWJhc2UgZmlsZSwKKyAgICAvLyBzaW5jZSBk
ZWxldGluZyB0aGUgZmlsZSBudWtlcyB0aGUgUE9TSVggZmlsZSBsb2NrcyB3aGljaCB3b3VsZCBw
b3RlbnRpYWxseSBjYXVzZSBTYWZhcmkKKyAgICAvLyB0byBjb3JydXB0IHRoZSBuZXcgZGIgaWYg
aXQncyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kLgorICAgIHN0YXRpYyBib29sIHRydW5jYXRl
RGF0YWJhc2VGaWxlKHNxbGl0ZTMqIGRhdGFiYXNlKTsKKyNlbmRpZgorICAgIAogICAgIC8vIFJl
dHVybnMgdGhlIHNpemUgb2YgdGhlIGRhdGFiYXNlIGZpbGUuCiAgICAgLy8KICAgICAvLyBmaWxl
TmFtZSAtIFRoZSBmaWxlIG5hbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZVRyYW5zYWN0aW9uLmNwcAppbmRleCA2ZjkwZWFjMDg5NGU1ZmMzMTFkYmEzZjA0NzUy
ZDFjZTJiOTM4YjYxLi5kMTVjZWQzYWUwZmJkZTRhOWFkNDhiNTAzOWE0ZjA5YjNmMDU3YWE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5j
cHAKQEAgLTI4LDYgKzI4LDEwIEBACiAKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgogCisj
aWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oIgorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1FMaXRlVHJhbnNhY3Rpb246OlNRTGl0ZVRy
YW5zYWN0aW9uKFNRTGl0ZURhdGFiYXNlJiBkYiwgYm9vbCByZWFkT25seSkKQEAgLTU0LDExICs1
OCwxOCBAQCB2b2lkIFNRTGl0ZVRyYW5zYWN0aW9uOjpiZWdpbigpCiAgICAgICAgIC8vIGFueSBz
dGF0ZW1lbnRzLiBJZiB0aGF0IGhhcHBlbnMsIHRoaXMgdHJhbnNhY3Rpb24gd2lsbCBmYWlsLgog
ICAgICAgICAvLyBodHRwOi8vd3d3LnNxbGl0ZS5vcmcvbGFuZ190cmFuc2FjdGlvbi5odG1sCiAg
ICAgICAgIC8vIGh0dHA6Ly93d3cuc3FsaXRlLm9yZy9sb2NraW5ndjMuaHRtbCNsb2NraW5nCisj
aWYgUExBVEZPUk0oSU9TKQorICAgICAgICBTUUxpdGVEYXRhYmFzZVRyYWNrZXI6OmluY3JlbWVu
dFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KCk7CisjZW5kaWYKICAgICAgICAgaWYgKG1fcmVh
ZE9ubHkpCiAgICAgICAgICAgICBtX2luUHJvZ3Jlc3MgPSBtX2RiLmV4ZWN1dGVDb21tYW5kKCJC
RUdJTiIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2luUHJvZ3Jlc3MgPSBtX2RiLmV4
ZWN1dGVDb21tYW5kKCJCRUdJTiBJTU1FRElBVEUiKTsKICAgICAgICAgbV9kYi5tX3RyYW5zYWN0
aW9uSW5Qcm9ncmVzcyA9IG1faW5Qcm9ncmVzczsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAg
IGlmICghbV9pblByb2dyZXNzKQorICAgICAgICAgICAgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpk
ZWNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOworI2VuZGlmCiAgICAgfQogfQog
CkBAIC02OCw2ICs3OSwxMCBAQCB2b2lkIFNRTGl0ZVRyYW5zYWN0aW9uOjpjb21taXQoKQogICAg
ICAgICBBU1NFUlQobV9kYi5tX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyk7CiAgICAgICAgIG1faW5Q
cm9ncmVzcyA9ICFtX2RiLmV4ZWN1dGVDb21tYW5kKCJDT01NSVQiKTsKICAgICAgICAgbV9kYi5t
X3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IG1faW5Qcm9ncmVzczsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgIGlmICghbV9pblByb2dyZXNzKQorICAgICAgICAgICAgU1FMaXRlRGF0YWJhc2VU
cmFja2VyOjpkZWNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOworI2VuZGlmCiAg
ICAgfQogfQogCkBAIC04Miw2ICs5Nyw5IEBAIHZvaWQgU1FMaXRlVHJhbnNhY3Rpb246OnJvbGxi
YWNrKCkKICAgICAgICAgbV9kYi5leGVjdXRlQ29tbWFuZCgiUk9MTEJBQ0siKTsKICAgICAgICAg
bV9pblByb2dyZXNzID0gZmFsc2U7CiAgICAgICAgIG1fZGIubV90cmFuc2FjdGlvbkluUHJvZ3Jl
c3MgPSBmYWxzZTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIFNRTGl0ZURhdGFiYXNlVHJh
Y2tlcjo6ZGVjcmVtZW50VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnQoKTsKKyNlbmRpZgogICAg
IH0KIH0KIApAQCAtOTAsNiArMTA4LDkgQEAgdm9pZCBTUUxpdGVUcmFuc2FjdGlvbjo6c3RvcCgp
CiAgICAgaWYgKG1faW5Qcm9ncmVzcykgewogICAgICAgICBtX2luUHJvZ3Jlc3MgPSBmYWxzZTsK
ICAgICAgICAgbV9kYi5tX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworI2lmIFBMQVRG
T1JNKElPUykKKyAgICAgICAgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpkZWNyZW1lbnRUcmFuc2Fj
dGlvbkluUHJvZ3Jlc3NDb3VudCgpOworI2VuZGlmCiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYmY2MjJmNGE1ZDA0YjlmYTQwYjViNmE1ZWRkOGE3ZjJlMjhiMTJjYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9pb3MvU1FMaXRl
RGF0YWJhc2VUcmFja2VyLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oIgorCisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNl
IFNRTGl0ZURhdGFiYXNlVHJhY2tlciB7CisKK3N0YXRpYyBTUUxpdGVEYXRhYmFzZVRyYWNrZXJD
bGllbnQqIHNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50ID0gMDsKK3N0YXRpYyB1
bnNpZ25lZCBzX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXIgPSAwOworCitzdGF0aWMgTXV0
ZXgmIHRyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8TXV0ZXg+IHRpcE11dGV4OworICAgIHJldHVybiB0aXBNdXRleDsKK30KKwordm9pZCBz
ZXRDbGllbnQoU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KiBjbGllbnQpCit7CisgICAgQVNT
RVJUKGNsaWVudCk7CisgICAgQVNTRVJUKCFzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNs
aWVudCB8fCBzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCA9PSBjbGllbnQpOwor
ICAgIHNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50ID0gY2xpZW50OworfQorCit2
b2lkIGluY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KCkKK3sKKyAgICBpZiAoIXNf
c3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KQorICAgICAgICByZXR1cm47CisgICAg
TXV0ZXhMb2NrZXIgbG9jayh0cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCgpKTsKKworICAgIHNf
dHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRlcisrOworICAgIGlmIChzX3RyYW5zYWN0aW9uSW5Q
cm9ncmVzc0NvdW50ZXIgPT0gMSkKKyAgICAgICAgc19zdGF0aWNTUUxpdGVEYXRhYmFzZVRyYWNr
ZXJDbGllbnQtPndpbGxCZWdpbkZpcnN0VHJhbnNhY3Rpb24oKTsKK30KKwordm9pZCBkZWNyZW1l
bnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpCit7CisgICAgaWYgKCFzX3N0YXRpY1NRTGl0
ZURhdGFiYXNlVHJhY2tlckNsaWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIE11dGV4TG9ja2Vy
IGxvY2sodHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgoKSk7CisKKyAgICBBU1NFUlQoc190cmFu
c2FjdGlvbkluUHJvZ3Jlc3NDb3VudGVyKTsKKyAgICBzX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc0Nv
dW50ZXItLTsKKworICAgIGlmICghc190cmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudGVyKQorICAg
ICAgICBzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC0+ZGlkRmluaXNoTGFzdFRy
YW5zYWN0aW9uKCk7Cit9CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECitib29sIGhhc1RyYW5zYWN0
aW9uSW5Qcm9ncmVzcygpCit7CisgICAgcmV0dXJuICFzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJh
Y2tlckNsaWVudCB8fCBzX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXIgPiAwOworfQorI2Vu
ZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKworfSAvLyBuYW1lc3BhY2UgU1FMaXRlRGF0YWJhc2VU
cmFja2VyCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9pb3MvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg2MWM2NDYzM2U2Mzg0Mzk0MDFiYWZkM2U4YzE0MTU5NWRjYmRkMGYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tl
ci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNRTGl0ZURhdGFiYXNlVHJhY2tlcl9oCisjZGVmaW5l
IFNRTGl0ZURhdGFiYXNlVHJhY2tlcl9oCisKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZVRyYWNr
ZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCituYW1lc3BhY2UgU1FMaXRlRGF0YWJhc2VUcmFja2VyIHsKKwordm9pZCBkZWNy
ZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudCgpOwordm9pZCBpbmNyZW1lbnRUcmFuc2Fj
dGlvbkluUHJvZ3Jlc3NDb3VudCgpOworCit2b2lkIHNldENsaWVudChTUUxpdGVEYXRhYmFzZVRy
YWNrZXJDbGllbnQqKTsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKK2Jvb2wgaGFzVHJhbnNhY3Rp
b25JblByb2dyZXNzKCk7CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorCit9OworCitjbGFz
cyBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB7CitwdWJsaWM6CisgICAg
U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIoKQorICAgIHsKKyAgICAgICAg
U1FMaXRlRGF0YWJhc2VUcmFja2VyOjppbmNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3Vu
dCgpOworICAgIH0KKyAgICB+U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIo
KQorICAgIHsKKyAgICAgICAgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpkZWNyZW1lbnRUcmFuc2Fj
dGlvbkluUHJvZ3Jlc3NDb3VudCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFNRTGl0ZURhdGFiYXNlVHJhY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvaW9zL1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2lvcy9TUUxpdGVEYXRhYmFzZVRyYWNrZXJD
bGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42MWYzZDJiOWJmYjc4MmZhZjgzNmYyOWVlNGU2M2U5ZGE1NWMz
N2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2lvcy9T
UUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTUUxpdGVEYXRhYmFz
ZVRyYWNrZXJDbGllbnRfaAorI2RlZmluZSBTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnRfaAor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlZ2luRmlyc3RUcmFuc2FjdGlvbigpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTGFzdFRyYW5zYWN0aW9uKCkgPSAwOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU1FMaXRlRGF0YWJhc2VUcmFja2Vy
Q2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZv
cm1Mb2NhbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2Fs
ZS5jcHAKaW5kZXggZDczNmNjYTc0ZWE0OWE5N2U0MjIzMGU1N2QxMmEwMDBlODQ1ZDhjOS4uMzBm
N2FiMjA5YWM1ZjdiZmU2ZmIzOWYxNTI1ZjkzMzVjZjgxNzljMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAKQEAgLTMyOCw2ICszMjgsNyBA
QCBTdHJpbmcgTG9jYWxlOjpjb252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcihjb25zdCBTdHJpbmcm
IGxvY2FsaXplZCkKIAogI2lmIEVOQUJMRShEQVRFX0FORF9USU1FX0lOUFVUX1RZUEVTKQogCisj
aWYgIVBMQVRGT1JNKElPUykKIFN0cmluZyBMb2NhbGU6OmZvcm1hdERhdGVUaW1lKGNvbnN0IERh
dGVDb21wb25lbnRzJiBkYXRlLCBGb3JtYXRUeXBlIGZvcm1hdFR5cGUpCiB7CiAgICAgaWYgKGRh
dGUudHlwZSgpID09IERhdGVDb21wb25lbnRzOjpJbnZhbGlkKQpAQCAtMzYzLDYgKzM2NCw4IEBA
IFN0cmluZyBMb2NhbGU6OmZvcm1hdERhdGVUaW1lKGNvbnN0IERhdGVDb21wb25lbnRzJiBkYXRl
LCBGb3JtYXRUeXBlIGZvcm1hdFR5cGUpCiAgICAgfQogICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKwogI2VuZGlmCiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuaAppbmRleCAxZTk3Njkw
NmJlODY4NmI4OTVjNmUzMzI5MzI1NTZlMTU3ZTIwNTZhLi45ZmM2MzljZWE2MGE0OTM3NzYzZmNi
NDM4NzA3NjRkZjZkM2IwZGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1BsYXRmb3JtTG9jYWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Q
bGF0Zm9ybUxvY2FsZS5oCkBAIC0zMyw2ICszMywxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKKyNpZiBQTEFURk9STShJT1MpCitjbGFzcyBGb250OworI2VuZGlmCisKIGNsYXNzIExvY2Fs
ZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9jYWxlKTsKIApAQCAtMTEzLDcgKzExNywx
NyBAQCBwdWJsaWM6CiAgICAgLy8gZGlzcGxheSB0byB0aGUgdXNlci4gSWYgYW4gaW1wbGVtZW50
YXRpb24gZG9lc24ndCBzdXBwb3J0CiAgICAgLy8gbG9jYWxpemVkIGRhdGVzIHRoZSBmdW5jdGlv
biBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4KICAgICAvLyBGb3JtYXRUeXBlIGNhbiBi
ZSB1c2VkIHRvIHNwZWNpZnkgaWYgeW91IHdhbnQgdGhlIHNob3J0IGZvcm1hdC4gCisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBTdHJpbmcgZm9ybWF0RGF0ZVRpbWUoY29uc3QgRGF0ZUNvbXBvbmVu
dHMmLCBGb3JtYXRUeXBlID0gRm9ybWF0VHlwZVVuc3BlY2lmaWVkKTsKKyNlbHNlCisgICAgdmly
dHVhbCBTdHJpbmcgZm9ybWF0RGF0ZVRpbWUoY29uc3QgRGF0ZUNvbXBvbmVudHMmLCBGb3JtYXRU
eXBlID0gRm9ybWF0VHlwZVVuc3BlY2lmaWVkKSA9IDA7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUg
c2hvdWxkIGJlIG1lcmdlZCB3aXRoIE9wZW4gU291cmNlIGluIGEgd2F5IHRoYXQgaXMgZnV0dXJl
IGNvbXBhdGlibGUuCisgICAgLy8gTWF4aW11bSB3aWR0aCBmb3IgYSBmb3JtYXR0ZWQgZGF0ZSBz
dHJpbmcgd2l0aCBhIHNwZWNpZmllZCBmb250LgorICAgIHZpcnR1YWwgZmxvYXQgbWF4aW11bVdp
ZHRoRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUsIGNvbnN0IEZvbnQmKSA9IDA7CiAj
ZW5kaWYKIAogICAgIHZpcnR1YWwgfkxvY2FsZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAppbmRleCA1ZTE0ZTNmMDhh
YWVmMzNmNWQzM2U3YTJjMzc2YTExMWYxYTg5YjZjLi43ZTBlMmQ4Mzc0OTE1MmMzYzdiZDBkZjE3
ZTljNWIzNjAwOTVjZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcApAQCAtNTcxLDYgKzU3MSw3IEBAIGJvb2wgaXNX
b3JkVGV4dEJyZWFrKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvcikKICAgICByZXR1cm4gcnVs
ZVN0YXR1cyAhPSBVQlJLX1dPUkRfTk9ORTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiBzdGF0
aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHNldFVwSXRlcmF0b3JXaXRoUnVsZXMoYm9vbCYgY3JlYXRl
ZEl0ZXJhdG9yLCBUZXh0QnJlYWtJdGVyYXRvciomIGl0ZXJhdG9yLAogICAgIGNvbnN0IGNoYXIq
IGJyZWFrUnVsZXMsIGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCiB7CkBAIC01OTUs
OSArNTk2LDExIEBAIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc2V0VXBJdGVyYXRvcldpdGhS
dWxlcyhib29sJiBjcmVhdGVkSXRlcmF0b3IsIFRleHRCcmVhCiAKICAgICByZXR1cm4gaXRlcmF0
b3I7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogVGV4dEJyZWFrSXRlcmF0b3IqIGN1
cnNvck1vdmVtZW50SXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKIHsK
KyNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIFRoaXMgcnVsZSBzZXQgaXMgYmFzZWQgb24gY2hh
cmFjdGVyLWJyZWFrIGl0ZXJhdG9yIHJ1bGVzIG9mIElDVSA0LjAKICAgICAvLyA8aHR0cDovL3Nv
dXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1L2ljdS90YWdzL3JlbGVhc2UtNC0wL3NvdXJj
ZS9kYXRhL2Jya2l0ci9jaGFyLnR4dD4uCiAgICAgLy8gVGhlIG1ham9yIGRpZmZlcmVuY2VzIGZy
b20gdGhlIG9yaWdpbmFsIG9uZXMgYXJlIGxpc3RlZCBiZWxvdzoKQEAgLTY4Myw2ICs2ODYsMzAg
QEAgVGV4dEJyZWFrSXRlcmF0b3IqIGN1cnNvck1vdmVtZW50SXRlcmF0b3IoY29uc3QgVUNoYXIq
IHN0cmluZywgaW50IGxlbmd0aCkKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVkQ3Vyc29yTW92ZW1l
bnRJdGVyYXRvciA9IGZhbHNlOwogICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGlj
Q3Vyc29yTW92ZW1lbnRJdGVyYXRvcjsKICAgICByZXR1cm4gc2V0VXBJdGVyYXRvcldpdGhSdWxl
cyhjcmVhdGVkQ3Vyc29yTW92ZW1lbnRJdGVyYXRvciwgc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVy
YXRvciwga1J1bGVzLCBzdHJpbmcsIGxlbmd0aCk7CisjZWxzZSAvLyBQTEFURk9STShJT1MpCisg
ICAgLy8gVXNlIHRoZSBzcGVjaWFsIFRoYWkgY2hhcmFjdGVyIGJyZWFrIGl0ZXJhdG9yIGZvciBh
bGwgbG9jYWxlcworICAgIHN0YXRpYyBib29sIGNyZWF0ZWRDdXJzb3JCcmVha0l0ZXJhdG9yOwor
ICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljQ3Vyc29yQnJlYWtJdGVyYXRvcjsK
KworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICgh
Y3JlYXRlZEN1cnNvckJyZWFrSXRlcmF0b3IpIHsKKyAgICAgICAgVUVycm9yQ29kZSBvcGVuU3Rh
dHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICBzdGF0aWNDdXJzb3JCcmVha0l0ZXJhdG9yID0g
cmVpbnRlcnByZXRfY2FzdDxUZXh0QnJlYWtJdGVyYXRvcio+KHVicmtfb3BlbihVQlJLX0NIQVJB
Q1RFUiwgInRoIiwgMCwgMCwgJm9wZW5TdGF0dXMpKTsKKyAgICAgICAgY3JlYXRlZEN1cnNvckJy
ZWFrSXRlcmF0b3IgPSB0cnVlOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKFVfU1VDQ0VT
UyhvcGVuU3RhdHVzKSwgIklDVSBjb3VsZCBub3Qgb3BlbiBhIGJyZWFrIGl0ZXJhdG9yOiAlcyAo
JWQpIiwgdV9lcnJvck5hbWUob3BlblN0YXR1cyksIG9wZW5TdGF0dXMpOworICAgIH0KKyAgICBp
ZiAoIXN0YXRpY0N1cnNvckJyZWFrSXRlcmF0b3IpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgVUVycm9yQ29kZSBzZXRUZXh0U3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIHVicmtf
c2V0VGV4dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oc3RhdGljQ3Vyc29yQnJl
YWtJdGVyYXRvciksIHN0cmluZywgbGVuZ3RoLCAmc2V0VGV4dFN0YXR1cyk7CisgICAgaWYgKFVf
RkFJTFVSRShzZXRUZXh0U3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gc3RhdGljQ3Vyc29yQnJlYWtJdGVyYXRvcjsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9T
KQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY0lDVS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5j
cHAKaW5kZXggYjRiYjM5MDdmNjE0OGMzNDkzZjZhMTdmYWY5ZTgyMDA3ZTAzNjAxNS4uY2M2ZWFh
MjFmMDRhYWQ4YTQ5NjU2MGE2NTg1NjYyNzZhNGU5ZWI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcApAQCAtNDQsNiArNDQsMTggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjb25zdCBzaXplX3QgQ29udmVyc2lvbkJ1ZmZlclNpemUgPSAxNjM4
NDsKIAorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRpYyBjb25zdCBjaGFyKiB0ZXh0Q29kZWNNYWNB
bGlhc2VzW10gPSB7CisgICAgIm1hY29zLTdfMy0xMC4yIiwgLy8geG1hY2N5cmlsbGljLCBtYWNj
eXJpbGxpYworICAgICJtYWNvcy02XzItMTAuNCIsIC8vIHhtYWNncmVlaworICAgICJtYWNvcy02
LTEwLjIiLCAgIC8vIG1hY2dyZWVrCisgICAgIm1hY29zLTI5LTEwLjIiLCAgLy8geG1hY2NlbnRy
YWxldXJyb21hbiwgbWFjY2VudHJhbGV1cnJvbWFuCisgICAgIm1hY29zLTM1LTEwLjIiLCAgLy8g
eG1hY3R1cmtpc2gsIG1hY3R1cmtpc2gKKyAgICAic29mdGJhbmstc2ppcyIsICAvLyBzb2Z0YmFu
a3NqaXMKKyAgICBudWxscHRyCit9OworI2VuZGlmCisKIElDVUNvbnZlcnRlcldyYXBwZXI6On5J
Q1VDb252ZXJ0ZXJXcmFwcGVyKCkKIHsKICAgICBpZiAoY29udmVydGVyKQpAQCAtMTgwLDYgKzE5
MiwyOSBAQCB2b2lkIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5n
TmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCiAgICAgcmVnaXN0cmFyKCJJU084ODU5LTE1IiwgIklT
Ty04ODU5LTE1Iik7CiAgICAgLy8gTm90IHJlZ2lzdGVyaW5nIElTTzg4NTktMTYsIGJlY2F1c2Ug
RmlyZWZveCAoYXMgb2YgdmVyc2lvbiAzLjYuNikgZG9lc24ndCBrbm93IHRoaXMgcGFydGljdWxh
ciBhbGlhcywKICAgICAvLyBhbmQgYmVjYXVzZSBvbGRlciB2ZXJzaW9ucyBvZiBJQ1UgZG9uJ3Qg
c3VwcG9ydCBJU08tODg1OS0xNiBlbmNvZGluZyBhdCBhbGwuCisKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgLy8gQS5CLiBhZGRpbmcgYSBmZXcgbW9yZSBNYWMgZW5jb2RpbmdzIG1pc3NpbmcgJ2Nh
dXNlIHdlIGRvbid0IGhhdmUgVGV4dENvZGVjTWFjIHJpZ2h0IG5vdworICAgIC8vIGx1Y2tpbHks
IHRoZXkgYXJlIHN1cHBvcnRlZCBpbiBJQ1UsIGp1c3QgbmVlZCB0byBhbGlhcyB0aGVtLgorICAg
IC8vIHRoaXMgaGFuZGxlcyBlbmNvZGluZ3MgdGhhdCBPUyBYIHVzZXMgVEVDIChUZXh0Q29kZWNN
YWMpCisgICAgLy8gPGh0dHA6Ly9wdWJsaWIuYm91bGRlci5pYm0uY29tL2luZm9jZW50ZXIvd21i
aGVscC92NnIwbTAvaW5kZXguanNwP3RvcGljPS9jb20uaWJtLmV0b29scy5tZnQuZWIuZG9jL2Fj
MDA0MDhfLmh0bT4KKyAgICBpbnQzMl90IGkgPSAwOworICAgIGZvciAoY29uc3QgY2hhciogbWFj
QWxpYXMgPSB0ZXh0Q29kZWNNYWNBbGlhc2VzW2ldOyBtYWNBbGlhczsgbWFjQWxpYXMgPSB0ZXh0
Q29kZWNNYWNBbGlhc2VzWysraV0pIHsKKyAgICAgICAgcmVnaXN0cmFyKG1hY0FsaWFzLCBtYWNB
bGlhcyk7CisKKyAgICAgICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAg
ICAgdWludDE2X3QgbnVtQWxpYXNlcyA9IHVjbnZfY291bnRBbGlhc2VzKG1hY0FsaWFzLCAmZXJy
b3IpOworICAgICAgICBBU1NFUlQoVV9TVUNDRVNTKGVycm9yKSk7CisgICAgICAgIGlmIChVX1NV
Q0NFU1MoZXJyb3IpKQorICAgICAgICAgICAgZm9yICh1aW50MTZfdCBqID0gMDsgaiA8IG51bUFs
aWFzZXM7ICsraikgeworICAgICAgICAgICAgICAgIGVycm9yID0gVV9aRVJPX0VSUk9SOworICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFsaWFzID0gdWNudl9nZXRBbGlhcyhtYWNBbGlhcywg
aiwgJmVycm9yKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoVV9TVUNDRVNTKGVycm9yKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKFVfU1VDQ0VTUyhlcnJvcikgJiYgc3RyY21wKGFsaWFzLCBtYWNB
bGlhcykpCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcywgbWFjQWxpYXMpOwor
ICAgICAgICAgICAgfQorICAgIH0KKyNlbmRpZgogfQogCiB2b2lkIFRleHRDb2RlY0lDVTo6cmVn
aXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKQEAgLTIxNyw2ICsyNTIs
MTMgQEAgdm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJh
ciByZWdpc3RyYXIpCiAgICAgLy8gRklYTUU6IElzIHRoZXJlIGEgZ29vZCB3YXkgdG8gZGV0ZXJt
aW5lIHRoZSBtb3N0IHVwIHRvIGRhdGUgdmFyaWFudCBwcm9ncmFtbWF0aWNhbGx5PwogICAgIHJl
Z2lzdHJhcigid2luZG93cy04NzQiLCBjcmVhdGUsICJ3aW5kb3dzLTg3NC0yMDAwIik7CiAgICAg
cmVnaXN0cmFyKCJ3aW5kb3dzLTk0OSIsIGNyZWF0ZSwgIndpbmRvd3MtOTQ5LTIwMDAiKTsKKwor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBTZWUgY29tbWVudCBhYm92ZSBpbiByZWdpc3RlckVu
Y29kaW5nTmFtZXMoKS4KKyAgICBpbnQzMl90IGkgPSAwOworICAgIGZvciAoY29uc3QgY2hhciog
YWxpYXMgPSB0ZXh0Q29kZWNNYWNBbGlhc2VzW2ldOyBhbGlhczsgYWxpYXMgPSB0ZXh0Q29kZWNN
YWNBbGlhc2VzWysraV0pCisgICAgICAgIHJlZ2lzdHJhcihhbGlhcywgY3JlYXRlLCAwKTsKKyNl
bmRpZgogfQogCiBUZXh0Q29kZWNJQ1U6OlRleHRDb2RlY0lDVShjb25zdCBjaGFyKiBlbmNvZGlu
ZywgY29uc3QgY2hhciogY2Fub25pY2FsQ29udmVydGVyTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKaW5kZXggYTU3
ODJjZmQ1Zjg0ZjgzYjhiOTM5MTYyMDFlYjRmMDk2NTY3MDE2My4uYjFmZWUzNTAzNWY5MjIzZDIz
YWVhMDY4OWVhMjA1ODQ2ZmU2ZTlhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAKICNp
ZiBVU0UoSUNVX1VOSUNPREUpCiAjaW5jbHVkZSAiVGV4dENvZGVjSUNVLmgiCiAjZW5kaWYKLSNp
ZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQogI2lu
Y2x1ZGUgIlRleHRDb2RlY01hYy5oIgogI2VuZGlmCiAjaWYgT1MoV0lORE9XUykgJiYgVVNFKFdD
SEFSX1VOSUNPREUpCkBAIC0yODQsNyArMjg0LDcgQEAgc3RhdGljIHZvaWQgZXh0ZW5kVGV4dENv
ZGVjTWFwcygpCiAgICAgVGV4dENvZGVjSUNVOjpyZWdpc3RlckNvZGVjcyhhZGRUb1RleHRDb2Rl
Y01hcCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYm
ICFQTEFURk9STShJT1MpCiAgICAgVGV4dENvZGVjTWFjOjpyZWdpc3RlckVuY29kaW5nTmFtZXMo
YWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNNYWM6OnJlZ2lzdGVyQ29k
ZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAKaW5kZXggNWFjNzk0YTMxODNjN2M2ZmI2
ZDQ5Y2U5NWQ4OGI2NmU3ZmNkOTY0MS4uMGRlZGE4N2ZjYzdhYmQ5Nzk5YjZiNGFiODFkMDI1ZGJh
ZmFlNmJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9IeXBo
ZW5hdGlvbkNGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL0h5cGhl
bmF0aW9uQ0YuY3BwCkBAIC02MCw3ICs2MCwxNyBAQCBzdGF0aWMgQXRvbWljU3RyaW5nS2V5ZWRN
UlVDYWNoZTxSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+PiYgY2ZMb2NhbGVDYWNoZSgpCiAKIGJvb2wg
Y2FuSHlwaGVuYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikKIHsKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIHJldHVybiBjZkxvY2FsZUNhY2hlKCkuZ2V0KGxvY2FsZUlk
ZW50aWZpZXIpOworI2Vsc2UKKyNpZiAhKGRlZmluZWQoV1RGX0FSTV9BUkNIX1ZFUlNJT04pICYm
IFdURl9BUk1fQVJDSF9WRVJTSU9OID09IDYpCisgICAgcmV0dXJuIGNmTG9jYWxlQ2FjaGUoKS5n
ZXQobG9jYWxlSWRlbnRpZmllcik7CisjZWxzZQorICAgIC8vIEh5cGhlbmF0aW9uIGlzIG5vdCBh
dmFpbGFibGUgb24gZGV2aWNlcyB3aXRoIEFSTXY2IHByb2Nlc3NvcnMuIFNlZSA8cmRhcjovLzgz
NTI1NzA+LgorICAgIFVOVVNFRF9QQVJBTShsb2NhbGVJZGVudGlmaWVyKTsKKyAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiB9CiAKIHNpemVfdCBsYXN0
SHlwaGVuTG9jYXRpb24oY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIHNp
emVfdCBiZWZvcmVJbmRleCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0
ZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lvcy9Mb2NhbGl6ZWREYXRl
Q2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kN2FkMmJjYjc5NGRiYmU0ZWI0NDRmZTIxYzY2Y2Q1ZGE4YzQ5
OTFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3Mv
TG9jYWxpemVkRGF0ZUNhY2hlLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTG9jYWxpemVkRGF0ZUNhY2hlX2gK
KyNkZWZpbmUgTG9jYWxpemVkRGF0ZUNhY2hlX2gKKworI2luY2x1ZGUgIkRhdGVDb21wb25lbnRz
LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisv
LyBGSVhNRTogUmVuYW1lIHRoaXMgZmlsZSB0byBMb2NhbGl6ZWREYXRhQ2FjaGVJT1MubW0gYW5k
IHJlbW92ZSB0aGlzIGd1YXJkLgorI2lmIFBMQVRGT1JNKElPUykKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBMb2NhbGl6ZWREYXRlQ2FjaGUgeworcHVibGljOgorICAgIE5TRGF0ZUZv
cm1hdHRlciAqZm9ybWF0dGVyRm9yRGF0ZVR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUpOworICAg
IGZsb2F0IG1heGltdW1XaWR0aEZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlLCBjb25z
dCBGb250Jik7CisgICAgdm9pZCBsb2NhbGVDaGFuZ2VkKCk7CisKK3ByaXZhdGU6CisgICAgTG9j
YWxpemVkRGF0ZUNhY2hlKCk7CisgICAgfkxvY2FsaXplZERhdGVDYWNoZSgpOworCisgICAgTlNE
YXRlRm9ybWF0dGVyICpjcmVhdGVGb3JtYXR0ZXJGb3JUeXBlKERhdGVDb21wb25lbnRzOjpUeXBl
KTsKKyAgICBmbG9hdCBjYWxjdWxhdGVNYXhpbXVtV2lkdGgoRGF0ZUNvbXBvbmVudHM6OlR5cGUs
IGNvbnN0IEZvbnQmKTsKKworICAgIC8vIFVzaW5nIGludCBpbnN0ZWFkIG9mIERhdGVDb21wb25l
bnRzOjpUeXBlIGZvciB0aGUga2V5IGJlY2F1c2UgdGhlIGVudW0KKyAgICAvLyBkb2VzIG5vdCBo
YXZlIGEgZGVmYXVsdCBoYXNoIGFuZCBoYXNoIHRyYWl0cy4gVXNhZ2Ugb2YgdGhlIG1hcHMKKyAg
ICAvLyBjYXN0cyB0aGUgRGF0ZUNvbXBvbmVudHM6OlR5cGUgaW50byBhbiBpbnQgYXMgdGhlIGtl
eS4KKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPj4g
RGF0ZVR5cGVGb3JtYXR0ZXJNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgZmxvYXQ+IERh
dGVUeXBlTWF4V2lkdGhNYXA7CisgICAgRGF0ZVR5cGVGb3JtYXR0ZXJNYXAgbV9mb3JtYXR0ZXJN
YXA7CisgICAgRGF0ZVR5cGVNYXhXaWR0aE1hcCBtX21heFdpZHRoTWFwOworICAgIEZvbnQgbV9m
b250OworCisgICAgZnJpZW5kIExvY2FsaXplZERhdGVDYWNoZSYgbG9jYWxpemVkRGF0ZUNhY2hl
KCk7CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPExvY2FsaXplZERhdGVDYWNoZT47Cit9Owor
CisvLyBTaW5nbGV0b24uCitMb2NhbGl6ZWREYXRlQ2FjaGUmIGxvY2FsaXplZERhdGVDYWNoZSgp
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisj
ZW5kaWYgLy8gTG9jYWxpemVkRGF0ZUNhY2hlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvaW9zL0xvY2FsaXplZERhdGVDYWNoZS5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTJk
MmI3YzkyMzE1MzFjNjc5YzU3NGE2ZmQ4NjIyOGNmYTQ1YmUxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pb3MvTG9jYWxpemVkRGF0ZUNhY2hlLm1tCkBA
IC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJMb2NhbGl6ZWREYXRlQ2FjaGUuaCIK
KworI2ltcG9ydCAiRm9udC5oIgorI2ltcG9ydCAiVGV4dFJ1bi5oIgorI2ltcG9ydCA8bWF0aC5o
PgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbXBvcnQgPENvcmVGb3VuZGF0aW9uL0NGTm90aWZpY2F0aW9uQ2VudGVyLmg+CisKKy8v
IEZJWE1FOiBSZW5hbWUgdGhpcyBmaWxlIHRvIExvY2FsaXplZERhdGFDYWNoZUlPUy5tbSBhbmQg
cmVtb3ZlIHRoaXMgZ3VhcmQuCisjaWYgUExBVEZPUk0oSU9TKQorCit1c2luZyBuYW1lc3BhY2Ug
c3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xvY2FsaXplZERhdGVDYWNoZSYgbG9jYWxp
emVkRGF0ZUNhY2hlKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TG9jYWxpemVkRGF0
ZUNhY2hlPiBjYWNoZTsKKyAgICByZXR1cm4gY2FjaGU7Cit9CisKK3N0YXRpYyB2b2lkIF9sb2Nh
bGVDaGFuZ2VkKENGTm90aWZpY2F0aW9uQ2VudGVyUmVmLCB2b2lkKiwgQ0ZTdHJpbmdSZWYsIGNv
bnN0IHZvaWQqLCBDRkRpY3Rpb25hcnlSZWYpCit7CisgICAgbG9jYWxpemVkRGF0ZUNhY2hlKCku
bG9jYWxlQ2hhbmdlZCgpOworfQorCitMb2NhbGl6ZWREYXRlQ2FjaGU6OkxvY2FsaXplZERhdGVD
YWNoZSgpCisgICAgOiBtX2ZvbnQoRm9udCgpKQoreworICAgIC8vIExpc3RlbiB0byBDRiBOb3Rp
ZmljYXRpb25zIGZvciBsb2NhbGUgY2hhbmdlLCBhbmQgY2xlYXIgdGhlIGNhY2hlIHdoZW4gaXQg
ZG9lcy4KKyAgICBDRk5vdGlmaWNhdGlvbkNlbnRlckFkZE9ic2VydmVyKENGTm90aWZpY2F0aW9u
Q2VudGVyR2V0TG9jYWxDZW50ZXIoKSwgKHZvaWQqKXRoaXMsIF9sb2NhbGVDaGFuZ2VkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NGTG9jYWxlQ3VycmVudExvY2FsZURp
ZENoYW5nZU5vdGlmaWNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5VTEwsIENGTm90aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2aW9yRGVsaXZlckltbWVkaWF0ZWx5
KTsKK30KKworTG9jYWxpemVkRGF0ZUNhY2hlOjp+TG9jYWxpemVkRGF0ZUNhY2hlKCkKK3sKKyAg
ICAvLyBOT1RFOiBTaW5nbGV0b24gZG9lcyBub3QgZXhwZWN0IHRvIGJlIGRlY29uc3RydWN0ZWQu
CisgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJSZW1vdmVPYnNlcnZlcihDRk5vdGlmaWNhdGlvbkNl
bnRlckdldExvY2FsQ2VudGVyKCksICh2b2lkKil0aGlzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga0NGTG9jYWxlQ3VycmVudExvY2FsZURpZENoYW5nZU5vdGlmaWNh
dGlvbiwgTlVMTCk7Cit9CisKK3ZvaWQgTG9jYWxpemVkRGF0ZUNhY2hlOjpsb2NhbGVDaGFuZ2Vk
KCkKK3sKKyAgICBtX21heFdpZHRoTWFwLmNsZWFyKCk7CisgICAgbV9mb3JtYXR0ZXJNYXAuY2xl
YXIoKTsKK30KKworTlNEYXRlRm9ybWF0dGVyICpMb2NhbGl6ZWREYXRlQ2FjaGU6OmZvcm1hdHRl
ckZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUpCit7CisgICAgaW50IGtleSA9
IHN0YXRpY19jYXN0PGludD4odHlwZSk7CisgICAgaWYgKG1fZm9ybWF0dGVyTWFwLmNvbnRhaW5z
KGtleSkpCisgICAgICAgIHJldHVybiBtX2Zvcm1hdHRlck1hcC5nZXQoa2V5KS5nZXQoKTsKKwor
ICAgIE5TRGF0ZUZvcm1hdHRlciAqZGF0ZUZvcm1hdHRlciA9IFtjcmVhdGVGb3JtYXR0ZXJGb3JU
eXBlKHR5cGUpIGF1dG9yZWxlYXNlXTsKKyAgICBtX2Zvcm1hdHRlck1hcC5zZXQoa2V5LCBkYXRl
Rm9ybWF0dGVyKTsKKyAgICByZXR1cm4gZGF0ZUZvcm1hdHRlcjsKK30KKworZmxvYXQgTG9jYWxp
emVkRGF0ZUNhY2hlOjptYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShEYXRlQ29tcG9uZW50czo6VHlw
ZSB0eXBlLCBjb25zdCBGb250JiBmb250KQoreworICAgIGludCBrZXkgPSBzdGF0aWNfY2FzdDxp
bnQ+KHR5cGUpOworICAgIGlmIChtX2ZvbnQgPT0gZm9udCkgeworICAgICAgICBpZiAobV9tYXhX
aWR0aE1hcC5jb250YWlucyhrZXkpKQorICAgICAgICAgICAgcmV0dXJuIG1fbWF4V2lkdGhNYXAu
Z2V0KGtleSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9mb250ID0gRm9udChmb250KTsKKyAg
ICAgICAgbV9tYXhXaWR0aE1hcC5jbGVhcigpOworICAgIH0KKworICAgIGZsb2F0IGNhbGN1bGF0
ZWRNYXhpbXVtID0gY2FsY3VsYXRlTWF4aW11bVdpZHRoKHR5cGUsIGZvbnQpOworICAgIG1fbWF4
V2lkdGhNYXAuc2V0KGtleSwgY2FsY3VsYXRlZE1heGltdW0pOworICAgIHJldHVybiBjYWxjdWxh
dGVkTWF4aW11bTsKK30KKworTlNEYXRlRm9ybWF0dGVyICpMb2NhbGl6ZWREYXRlQ2FjaGU6OmNy
ZWF0ZUZvcm1hdHRlckZvclR5cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUgdHlwZSkKK3sKKyAgICBO
U0RhdGVGb3JtYXR0ZXIgKmRhdGVGb3JtYXR0ZXIgPSBbW05TRGF0ZUZvcm1hdHRlciBhbGxvY10g
aW5pdF07CisgICAgTlNMb2NhbGUgKmN1cnJlbnRMb2NhbGUgPSBbTlNMb2NhbGUgY3VycmVudExv
Y2FsZV07CisgICAgW2RhdGVGb3JtYXR0ZXIgc2V0TG9jYWxlOmN1cnJlbnRMb2NhbGVdOworCisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6SW52YWxpZDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGF0
ZUNvbXBvbmVudHM6OkRhdGU6CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldFRpbWVab25lOltO
U1RpbWVab25lIHRpbWVab25lRm9yU2Vjb25kc0Zyb21HTVQ6MF1dOworICAgICAgICBbZGF0ZUZv
cm1hdHRlciBzZXRUaW1lU3R5bGU6TlNEYXRlRm9ybWF0dGVyTm9TdHlsZV07CisgICAgICAgIFtk
YXRlRm9ybWF0dGVyIHNldERhdGVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJNZWRpdW1TdHlsZV07Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRGF0ZUNvbXBvbmVudHM6OkRhdGVUaW1lOgorICAgICAg
ICBbZGF0ZUZvcm1hdHRlciBzZXRUaW1lWm9uZTpbTlNUaW1lWm9uZSBsb2NhbFRpbWVab25lXV07
CisgICAgICAgIFtkYXRlRm9ybWF0dGVyIHNldFRpbWVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJTaG9y
dFN0eWxlXTsKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0RGF0ZVN0eWxlOk5TRGF0ZUZvcm1h
dHRlck1lZGl1bVN0eWxlXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRlQ29tcG9uZW50
czo6RGF0ZVRpbWVMb2NhbDoKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0VGltZVpvbmU6W05T
VGltZVpvbmUgdGltZVpvbmVGb3JTZWNvbmRzRnJvbUdNVDowXV07CisgICAgICAgIFtkYXRlRm9y
bWF0dGVyIHNldFRpbWVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlXTsKKyAgICAgICAg
W2RhdGVGb3JtYXR0ZXIgc2V0RGF0ZVN0eWxlOk5TRGF0ZUZvcm1hdHRlck1lZGl1bVN0eWxlXTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRlQ29tcG9uZW50czo6TW9udGg6CisgICAgICAg
IFtkYXRlRm9ybWF0dGVyIHNldFRpbWVab25lOltOU1RpbWVab25lIHRpbWVab25lRm9yU2Vjb25k
c0Zyb21HTVQ6MF1dOworICAgICAgICBbZGF0ZUZvcm1hdHRlciBzZXREYXRlRm9ybWF0OltOU0Rh
dGVGb3JtYXR0ZXIgZGF0ZUZvcm1hdEZyb21UZW1wbGF0ZTpAIk1NTU15eXl5IiBvcHRpb25zOjAg
bG9jYWxlOmN1cnJlbnRMb2NhbGVdXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRlQ29t
cG9uZW50czo6VGltZToKKyAgICAgICAgW2RhdGVGb3JtYXR0ZXIgc2V0VGltZVpvbmU6W05TVGlt
ZVpvbmUgdGltZVpvbmVGb3JTZWNvbmRzRnJvbUdNVDowXV07CisgICAgICAgIFtkYXRlRm9ybWF0
dGVyIHNldFRpbWVTdHlsZTpOU0RhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlXTsKKyAgICAgICAgW2Rh
dGVGb3JtYXR0ZXIgc2V0RGF0ZVN0eWxlOk5TRGF0ZUZvcm1hdHRlck5vU3R5bGVdOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIERhdGVDb21wb25lbnRzOjpXZWVrOgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGRhdGVG
b3JtYXR0ZXI7Cit9CisKKy8vIE5PVEU6IFRoaXMgZG9lcyBub3QgY2hlY2sgZm9yIHRoZSB3aWRl
c3QgZGF5IG9mIHRoZSB3ZWVrLgorLy8gV2UgYXNzdW1lIG5vIGZvcm1hdHRlciBvcHRpb24gc2hv
d3MgdGhhdCBpbmZvcm1hdGlvbi4KK2Zsb2F0IExvY2FsaXplZERhdGVDYWNoZTo6Y2FsY3VsYXRl
TWF4aW11bVdpZHRoKERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUsIGNvbnN0IEZvbnQmIGZvbnQp
Cit7CisgICAgZmxvYXQgbWF4aW11bVdpZHRoID0gMDsKKworICAgIC8vIEdldCB0aGUgZm9ybWF0
dGVyIHdlIHdvdWxkIHVzZSwgY29weSBpdCBiZWNhdXNlIHdlIHdpbGwgZm9yY2UgaXRzIHRpbWUg
em9uZSB0byBiZSBVVEMuCisgICAgTlNEYXRlRm9ybWF0dGVyICpkYXRlRm9ybWF0dGVyID0gW1tm
b3JtYXR0ZXJGb3JEYXRlVHlwZSh0eXBlKSBjb3B5XSBhdXRvcmVsZWFzZV07CisgICAgW2RhdGVG
b3JtYXR0ZXIgc2V0VGltZVpvbmU6W05TVGltZVpvbmUgdGltZVpvbmVGb3JTZWNvbmRzRnJvbUdN
VDowXV07CisKKyAgICAvLyBTYW1wbGUgZGF0ZSB3aXRoIGEgNCBkaWdpdCB5ZWFyIGFuZCAyIGRp
Z2l0IGRheSwgaG91ciwgYW5kIG1pbnV0ZS4gRGlnaXRzIGFyZQorICAgIC8vIHR5cGljYWxseSBh
bGwgZXF1YWxseSB3aWRlLiBGb3JjZSBVVEMgdGltZXpvbmUgZm9yIHRoZSB0ZXN0IGRhdGUgYmVs
b3cgc28gdGhlCisgICAgLy8gZGF0ZSBkb2Vzbid0IGFkanVzdCBmb3IgdGhlIGN1cnJlbnQgdGlt
ZXpvbmUuIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IGRhdGUKKyAgICAvLyAoeC0yNy0yMDA3KSBhbmQg
dGltZSAoMTA6NDUgUE0pLgorICAgIFJldGFpblB0cjxOU0NhbGVuZGFyPiBncmVnb3JpYW4gPSBh
ZG9wdE5TKFtbTlNDYWxlbmRhciBhbGxvY10gaW5pdFdpdGhDYWxlbmRhcklkZW50aWZpZXI6TlND
YWxlbmRhcklkZW50aWZpZXJHcmVnb3JpYW5dKTsKKyAgICBbZ3JlZ29yaWFuLmdldCgpIHNldFRp
bWVab25lOltOU1RpbWVab25lIHRpbWVab25lRm9yU2Vjb25kc0Zyb21HTVQ6MF1dOworICAgIFJl
dGFpblB0cjxOU0RhdGVDb21wb25lbnRzPiBjb21wb25lbnRzID0gYWRvcHROUyhbW05TRGF0ZUNv
bXBvbmVudHMgYWxsb2NdIGluaXRdKTsKKyAgICBbY29tcG9uZW50cy5nZXQoKSBzZXREYXk6Mjdd
OworICAgIFtjb21wb25lbnRzLmdldCgpIHNldFllYXI6MjAwN107CisgICAgW2NvbXBvbmVudHMu
Z2V0KCkgc2V0SG91cjoyMl07CisgICAgW2NvbXBvbmVudHMuZ2V0KCkgc2V0TWludXRlOjQ1XTsK
KworICAgIHN0YXRpYyBOU1VJbnRlZ2VyIG51bWJlck9mR3JlZ29yaWFuTW9udGhzID0gW1tkYXRl
Rm9ybWF0dGVyIG1vbnRoU3ltYm9sc10gY291bnRdOworICAgIEFTU0VSVChudW1iZXJPZkdyZWdv
cmlhbk1vbnRocyA9PSAxMik7CisKKyAgICAvLyBGb3IgZWFjaCBtb250aCAoaW4gdGhlIEdyZWdv
cmlhbiBDYWxlbmRhciksIGZvcm1hdCBhIGRhdGUgYW5kIG1lYXN1cmUgaXRzIGxlbmd0aC4KKyAg
ICBOU1VJbnRlZ2VyIHRvdGFsTW9udGhzVG9UZXN0ID0gMTsKKyAgICBpZiAodHlwZSA9PSBEYXRl
Q29tcG9uZW50czo6RGF0ZQorICAgICAgICB8fCB0eXBlID09IERhdGVDb21wb25lbnRzOjpEYXRl
VGltZQorICAgICAgICB8fCB0eXBlID09IERhdGVDb21wb25lbnRzOjpEYXRlVGltZUxvY2FsCisg
ICAgICAgIHx8IHR5cGUgPT0gRGF0ZUNvbXBvbmVudHM6Ok1vbnRoKQorICAgICAgICB0b3RhbE1v
bnRoc1RvVGVzdCA9IG51bWJlck9mR3JlZ29yaWFuTW9udGhzOworICAgIGZvciAoTlNVSW50ZWdl
ciBpID0gMDsgaSA8IHRvdGFsTW9udGhzVG9UZXN0OyArK2kpIHsKKyAgICAgICAgW2NvbXBvbmVu
dHMuZ2V0KCkgc2V0TW9udGg6KGkgKyAxKV07CisgICAgICAgIE5TRGF0ZSAqZGF0ZSA9IFtncmVn
b3JpYW4uZ2V0KCkgZGF0ZUZyb21Db21wb25lbnRzOmNvbXBvbmVudHMuZ2V0KCldOworICAgICAg
ICBOU1N0cmluZyAqZm9ybWF0dGVkRGF0ZSA9IFtkYXRlRm9ybWF0dGVyIHN0cmluZ0Zyb21EYXRl
OmRhdGVdOworICAgICAgICBTdHJpbmcgc3RyID0gU3RyaW5nKGZvcm1hdHRlZERhdGUpOworICAg
ICAgICBtYXhpbXVtV2lkdGggPSBtYXgobWF4aW11bVdpZHRoLCBmb250LndpZHRoKHN0cikpOwor
ICAgIH0KKworICAgIHJldHVybiBtYXhpbXVtV2lkdGg7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvbWFjL0NoYXJzZXREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L21hYy9DaGFyc2V0RGF0YS5oCmluZGV4IDQ1OGNlY2I1MGYxY2YxYzliZjUzNGIz
NzJiY2U1ODI3ZjM1ZTQ2M2QuLmE2MDcwNDI5NWNkZWMzN2ZiMDZjODY0YTM3MzkyMGI3ODUyOTQ5
MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0NoYXJzZXRE
YXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvQ2hhcnNldERhdGEu
aApAQCAtMjMsNiArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKyNpZiBQTEFURk9S
TShJT1MpCit0eXBlZGVmIFVJbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEVuY29k
aW5nOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICNkZWZpbmUga1RleHRF
bmNvZGluZ0lTT0xhdGluVGhhaSBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluVGhhaQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMuaAppbmRleCA3MDc0OTAzZjQy
ZDFmNmU4MjNkOGQ0NGNhOGI5MDdkZTcxODIyYjk2Li44NGE4ZmRiOTk0MmNhODkzOTJhZjI0MDY1
OTc1ZTQzNzUzOGY5MGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L21hYy9Mb2NhbGVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9M
b2NhbGVNYWMuaApAQCAtNTEsNiArNTEsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3du
UHRyPExvY2FsZU1hYz4gY3JlYXRlKE5TTG9jYWxlKik7CiAgICAgfkxvY2FsZU1hYygpOwogCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgZmxvYXQgbWF4aW11bVdpZHRoRm9yRGF0ZVR5
cGUoRGF0ZUNvbXBvbmVudHM6OlR5cGUsIGNvbnN0IEZvbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIFN0cmluZyBmb3JtYXREYXRlVGltZShjb25zdCBEYXRlQ29tcG9uZW50cyYsIEZvcm1hdFR5
cGUgPSBGb3JtYXRUeXBlVW5zcGVjaWZpZWQpIE9WRVJSSURFOworI2VuZGlmCisKICNpZiBFTkFC
TEUoREFURV9BTkRfVElNRV9JTlBVVF9UWVBFUykKICAgICB2aXJ0dWFsIFN0cmluZyBkYXRlRm9y
bWF0KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTdHJpbmcgbW9udGhGb3JtYXQoKSBPVkVSUklE
RTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbQppbmRl
eCBkYjQzNWJmYTNmNzIzZTJjNDk2OWU5ZTAyMjFlZDMzYTU2ZDNjZmVjLi5kMzczYWRkNzkxOWU2
ZjdkYmRmYzY0ZjMxYmNjNDc3ZDljZjU4Y2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9tYWMvTG9jYWxlTWFjLm1tCkBAIC00MCw2ICs0MCwxMCBAQAogI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNp
ZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJMb2NhbGl6ZWREYXRlQ2FjaGUuaCIKKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBpbmxpbmUgU3RyaW5nIGxhbmd1YWdlRnJv
bUxvY2FsZShjb25zdCBTdHJpbmcmIGxvY2FsZSkKQEAgLTExNiw2ICsxMjAsMzUgQEAgUmV0YWlu
UHRyPE5TRGF0ZUZvcm1hdHRlcj4gTG9jYWxlTWFjOjpzaG9ydERhdGVGb3JtYXR0ZXIoKQogICAg
IHJldHVybiBjcmVhdGVEYXRlVGltZUZvcm1hdHRlcihtX2xvY2FsZS5nZXQoKSwgbV9ncmVnb3Jp
YW5DYWxlbmRhci5nZXQoKSwgTlNEYXRlRm9ybWF0dGVyU2hvcnRTdHlsZSwgTlNEYXRlRm9ybWF0
dGVyTm9TdHlsZSk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitTdHJpbmcgTG9jYWxlTWFjOjpm
b3JtYXREYXRlVGltZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZUNvbXBvbmVudHMsIEZvcm1h
dFR5cGUpCit7CisgICAgZG91YmxlIG1zZWMgPSBkYXRlQ29tcG9uZW50cy5taWxsaXNlY29uZHNT
aW5jZUVwb2NoKCk7CisgICAgRGF0ZUNvbXBvbmVudHM6OlR5cGUgdHlwZSA9IGRhdGVDb21wb25l
bnRzLnR5cGUoKTsKKworICAgIC8vICJ3ZWVrIiB0eXBlIG5vdCBzdXBwb3J0ZWQuCisgICAgQVNT
RVJUKHR5cGUgIT0gRGF0ZUNvbXBvbmVudHM6OkludmFsaWQpOworICAgIGlmICh0eXBlID09IERh
dGVDb21wb25lbnRzOjpXZWVrKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyBJ
bmNvbWluZyBtc2VjIHZhbHVlIGlzIG1pbGxpc2Vjb25kcyBzaW5jZSAxOTcwLTAxLTAxIDAwOjAw
OjAwIFVUQy4gVGhlIDE5NzAgZXBvY2guCisgICAgTlNUaW1lSW50ZXJ2YWwgc2Vjb25kc1NpbmNl
MTk3MCA9IChtc2VjIC8gMTAwMCk7CisgICAgTlNEYXRlICpkYXRlID0gW05TRGF0ZSBkYXRlV2l0
aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDpzZWNvbmRzU2luY2UxOTcwXTsKKworICAgIC8vIFJldHVy
biBhIGZvcm1hdHRlZCBzdHJpbmcuCisgICAgTlNEYXRlRm9ybWF0dGVyICpkYXRlRm9ybWF0dGVy
ID0gbG9jYWxpemVkRGF0ZUNhY2hlKCkuZm9ybWF0dGVyRm9yRGF0ZVR5cGUodHlwZSk7CisgICAg
cmV0dXJuIFtkYXRlRm9ybWF0dGVyIHN0cmluZ0Zyb21EYXRlOmRhdGVdOworfQorCitmbG9hdCBM
b2NhbGVNYWM6Om1heGltdW1XaWR0aEZvckRhdGVUeXBlKERhdGVDb21wb25lbnRzOjpUeXBlIHR5
cGUsIGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgQVNTRVJUKHR5cGUgIT0gRGF0ZUNvbXBvbmVu
dHM6OkludmFsaWQpOworICAgIEFTU0VSVCh0eXBlICE9IERhdGVDb21wb25lbnRzOjpXZWVrKTsK
KworICAgIHJldHVybiBsb2NhbGl6ZWREYXRlQ2FjaGUoKS5tYXhpbXVtV2lkdGhGb3JEYXRlVHlw
ZSh0eXBlLCBmb250KTsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKERBVEVfQU5EX1RJTUVfSU5Q
VVRfVFlQRVMpCiBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlTWFjOjptb250aExhYmVscygp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Qm91
bmRhcmllcy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRCb3VuZGFy
aWVzLm1tCmluZGV4IDJmOTIxN2YwN2JhMTgzY2E3ZjljZmQxYjk5N2M5ZWYwYTU5NTg5MTUuLjMz
NmQ3ZjVlMTY2MmJlN2E3MDFjNGZjMDZiODY5NGYyNmZmNTNjNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRCb3VuZGFyaWVzLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRCb3VuZGFyaWVzLm1tCkBAIC0yNiwxMCAr
MjYsMTc3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlRleHRCb3VuZGFyaWVzLmgi
CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJUZXh0QnJlYWtJdGVyYXRvckludGVybmFs
SUNVLmgiCisjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9DRlN0cmluZ1Rva2VuaXplci5oPgorI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDx1bmljb2RlL3VicmsuaD4K
KyNpbXBvcnQgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbXBvcnQgPHVuaWNvZGUvdXN0cmluZy5oPgor
I2ltcG9ydCA8dW5pY29kZS91dHlwZXMuaD4KKyNpbXBvcnQgPHd0Zi91bmljb2RlL0NoYXJhY3Rl
ck5hbWVzLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCisjaWYgUExBVEZPUk0oSU9TKQorCitzdGF0aWMgYm9vbCBpc1NraXBDaGFy
YWN0ZXIoVUNoYXIzMiBjKQoreworICAgIHJldHVybiBjID09IDB4QTAgfHwgCisgICAgICAgIGMg
PT0gJ1xuJyB8fCAKKyAgICAgICAgYyA9PSAnLicgfHwgCisgICAgICAgIGMgPT0gJywnIHx8IAor
ICAgICAgICBjID09ICchJyAgfHwgCisgICAgICAgIGMgPT0gJz8nIHx8IAorICAgICAgICBjID09
ICc7JyB8fCAKKyAgICAgICAgYyA9PSAnOicgfHwgCisgICAgICAgIHVfaXNzcGFjZShjKTsKK30K
Kworc3RhdGljIGJvb2wgaXNXaGl0ZXNwYWNlQ2hhcmFjdGVyKFVDaGFyMzIgYykKK3sKKyAgICBy
ZXR1cm4gYyA9PSAweEEwIHx8IAorICAgICAgICBjID09ICdcbicgfHwgCisgICAgICAgIHVfaXNz
cGFjZShjKTsKK30KKworc3RhdGljIGJvb2wgaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihVQ2hh
cjMyIGMpCit7CisgICAgQ0ZDaGFyYWN0ZXJTZXRSZWYgc2V0ID0gQ0ZDaGFyYWN0ZXJTZXRHZXRQ
cmVkZWZpbmVkKGtDRkNoYXJhY3RlclNldEFscGhhTnVtZXJpYyk7CisgICAgLy8gQW1wZXJzYW5k
IGlzIGFuIGV4Y2VwdGlvbiBhZGRlZCB0byB0cmVhdCBBVCZUIGFzIGEgc2luZ2xlIHdvcmQgKHNl
ZSA8cmRhcjovL3Byb2JsZW0vNTAyMjI2ND4pLgorICAgIHJldHVybiAhQ0ZDaGFyYWN0ZXJTZXRJ
c0xvbmdDaGFyYWN0ZXJNZW1iZXIoc2V0LCBjKSAmJiBjICE9ICcmJzsKK30KKworc3RhdGljIGJv
b2wgaXNTeW1ib2xDaGFyYWN0ZXIoVUNoYXIzMiBjKQoreworICAgIENGQ2hhcmFjdGVyU2V0UmVm
IHNldCA9IENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFyYWN0ZXJTZXRTeW1ib2wp
OworICAgIHJldHVybiBDRkNoYXJhY3RlclNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihzZXQsIGMp
OworfQorCitzdGF0aWMgYm9vbCBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKFVDaGFyMzIg
Y2hhcmFjdGVyKQoreworICAgIC8vIFRoZXNlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlaGF2
ZSBhcyB3b3JkIGJvdW5kYXJpZXMsIGJ1dCBjYW4gYXBwZWFyIHdpdGhpbiB3b3Jkcy4KKyAgICBy
ZXR1cm4gY2hhcmFjdGVyID09ICdcJycgfHwgY2hhcmFjdGVyID09IHJpZ2h0U2luZ2xlUXVvdGF0
aW9uTWFyayB8fCBjaGFyYWN0ZXIgPT0gaGVicmV3UHVuY3R1YXRpb25HZXJzaGF5aW07Cit9CisK
K3N0YXRpYyBDRlN0cmluZ1Rva2VuaXplclJlZiB0b2tlbml6ZXJGb3JTdHJpbmcoQ0ZTdHJpbmdS
ZWYgc3RyKQoreworICAgIHN0YXRpYyBDRlN0cmluZ1Rva2VuaXplclJlZiB0b2tlbml6ZXIgPSBu
dWxscHRyOworICAgIHN0YXRpYyBDRkxvY2FsZVJlZiBsb2NhbGUgPSBudWxscHRyOworCisgICAg
aWYgKCFsb2NhbGUpIHsKKyAgICAgICAgY29uc3QgY2hhciogdGVtcCA9IGN1cnJlbnRUZXh0QnJl
YWtMb2NhbGVJRCgpOworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGN1cnJlbnRMb2Nh
bGVJRCA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXNOb0NvcHkobnVsbHB0ciwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KHRlbXApLCBzdHJsZW4odGVtcCksICBrQ0ZTdHJp
bmdFbmNvZGluZ0FTQ0lJLCBmYWxzZSwga0NGQWxsb2NhdG9yTnVsbCkpOworICAgICAgICBsb2Nh
bGUgPSBDRkxvY2FsZUNyZWF0ZShudWxscHRyLCBjdXJyZW50TG9jYWxlSUQuZ2V0KCkpOworICAg
ICAgICBpZiAoIWxvY2FsZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIENGUmFuZ2UgZW50aXJlUmFuZ2UgPSBDRlJhbmdlTWFrZSgwLCBDRlN0cmluZ0dldExlbmd0
aChzdHIpKTsgICAgCisKKyAgICBpZiAoIXRva2VuaXplcikKKyAgICAgICAgdG9rZW5pemVyID0g
Q0ZTdHJpbmdUb2tlbml6ZXJDcmVhdGUobnVsbHB0ciwgc3RyLCBlbnRpcmVSYW5nZSwga0NGU3Ry
aW5nVG9rZW5pemVyVW5pdFdvcmRCb3VuZGFyeSwgbG9jYWxlKTsKKyAgICBlbHNlCisgICAgICAg
IENGU3RyaW5nVG9rZW5pemVyU2V0U3RyaW5nKHRva2VuaXplciwgc3RyLCBlbnRpcmVSYW5nZSk7
CisgICAgcmV0dXJuIHRva2VuaXplcjsKK30KKworCisvLyBTaW1wbGUgY2FzZTogYSB3b3JkIGlz
IGEgc3RyZWFtIG9mIGNoYXJhY3RlcnMKKy8vIGRlbGltaXRlZCBieSBhIHNwZWNpYWwgc2V0IG9m
IHdvcmQtZGVsaW1pdGluZyBjaGFyYWN0ZXJzLgorc3RhdGljIHZvaWQgZmluZFNpbXBsZVdvcmRC
b3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBz
dGFydCwgaW50KiBlbmQpCit7CisgICAgQVNTRVJUKHBvc2l0aW9uID49IDApOworICAgIEFTU0VS
VChwb3NpdGlvbiA8IGxlbik7CisKKyAgICBpbnQgc3RhcnRQb3MgPSBwb3NpdGlvbjsKKyAgICB3
aGlsZSAoc3RhcnRQb3MgPiAwKSB7CisgICAgICAgIGludCBpID0gc3RhcnRQb3M7CisgICAgICAg
IFVDaGFyMzIgY2hhcmFjdGVyQmVmb3JlU3RhcnRQb3M7CisgICAgICAgIFUxNl9QUkVWKGNoYXJz
LCAwLCBpLCBjaGFyYWN0ZXJCZWZvcmVTdGFydFBvcyk7CisgICAgICAgIGlmIChpc1dvcmREZWxp
bWl0aW5nQ2hhcmFjdGVyKGNoYXJhY3RlckJlZm9yZVN0YXJ0UG9zKSkgeworICAgICAgICAgICAg
QVNTRVJUKGkgPj0gMCk7CisgICAgICAgICAgICBpZiAoIWkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIGlmICghaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3RlcihjaGFy
YWN0ZXJCZWZvcmVTdGFydFBvcykpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIFVDaGFyMzIgY2hhcmFjdGVyQmVmb3JlQmVmb3JlU3RhcnRQb3M7CisgICAgICAgICAgICBV
MTZfUFJFVihjaGFycywgMCwgaSwgY2hhcmFjdGVyQmVmb3JlQmVmb3JlU3RhcnRQb3MpOworICAg
ICAgICAgICAgaWYgKGlzV29yZERlbGltaXRpbmdDaGFyYWN0ZXIoY2hhcmFjdGVyQmVmb3JlQmVm
b3JlU3RhcnRQb3MpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IFUxNl9CQUNLXzEoY2hhcnMsIDAsIHN0YXJ0UG9zKTsKKyAgICB9CisgICAgCisgICAgaW50IGVu
ZFBvcyA9IHBvc2l0aW9uOworICAgIHdoaWxlIChlbmRQb3MgPCBsZW4pIHsKKyAgICAgICAgVUNo
YXIzMiBjaGFyYWN0ZXI7CisgICAgICAgIFUxNl9HRVQoY2hhcnMsIDAsIGVuZFBvcywgbGVuLCBj
aGFyYWN0ZXIpOworICAgICAgICBpZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0
ZXIpKSB7CisgICAgICAgICAgICBpbnQgaSA9IGVuZFBvczsKKyAgICAgICAgICAgIFUxNl9GV0Rf
MShjaGFycywgaSwgbGVuKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDw9IGxlbik7CisgICAgICAg
ICAgICBpZiAoaSA9PSBsZW4pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBV
Q2hhcjMyIGNoYXJhY3RlckFmdGVyRW5kUG9zOworICAgICAgICAgICAgVTE2X05FWFQoY2hhcnMs
IGksIGxlbiwgY2hhcmFjdGVyQWZ0ZXJFbmRQb3MpOworICAgICAgICAgICAgaWYgKCFpc0FtYmln
dW91c0JvdW5kYXJ5Q2hhcmFjdGVyKGNoYXJhY3RlcikpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXJBZnRl
ckVuZFBvcykpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgVTE2
X0ZXRF8xKGNoYXJzLCBlbmRQb3MsIGxlbik7CisgICAgfQorCisgICAgLy8gVGhlIHRleHQgbWF5
IGNvbnNpc3Qgb2YgYWxsIGRlbGltaXRlciBjaGFyYWN0ZXJzIChlLmcuICIrKysrKysrKyIgb3Ig
YSBzZXJpZXMgb2YgZW1vamkpLCBhbmQgcmV0dXJuaW5nIGFuIGVtcHR5IHJhbmdlCisgICAgLy8g
bWFrZXMgbm8gc2Vuc2UgKGFuZCBkb2Vzbid0IG1hdGNoIGZpbmRDb21wbGV4V29yZEJvdW5kYXJ5
KCkgYmVoYXZpb3IpLgorICAgIGlmIChzdGFydFBvcyA9PSBlbmRQb3MgJiYgZW5kUG9zIDwgbGVu
KSB7CisgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAgICAgICBVMTZfR0VUKGNoYXJzLCAw
LCBlbmRQb3MsIGxlbiwgY2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKGlzU3ltYm9sQ2hhcmFjdGVy
KGNoYXJhY3RlcikpCisgICAgICAgICAgICBVMTZfRldEXzEoY2hhcnMsIGVuZFBvcywgbGVuKTsK
KyAgICB9CisKKyAgICAqc3RhcnQgPSBzdGFydFBvczsKKyAgICAqZW5kID0gZW5kUG9zOworfQor
CisvLyBDb21wbGV4IGNhc2U6IHVzZSBDRlN0cmluZ1Rva2VuaXplciB0byBmaW5kIHdvcmQgYm91
bmRhcnkuCitzdGF0aWMgdm9pZCBmaW5kQ29tcGxleFdvcmRCb3VuZGFyeShjb25zdCBVQ2hhciog
Y2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQpCit7Cisg
ICAgQ0ZTdHJpbmdSZWYgY2hhclN0cmluZyA9IENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnNO
b0NvcHkoTlVMTCwgY2hhcnMsIGxlbiwga0NGQWxsb2NhdG9yTnVsbCk7CisgICAgQVNTRVJUKGNo
YXJTdHJpbmcpOworICAgIAorICAgIENGU3RyaW5nVG9rZW5pemVyUmVmIHRva2VuaXplciA9IHRv
a2VuaXplckZvclN0cmluZyhjaGFyU3RyaW5nKTsKKyAgICBpZiAodG9rZW5pemVyKSB7ICAgICAg
ICAKKyAgICAgICAgQ0ZTdHJpbmdUb2tlbml6ZXJUb2tlblR5cGUgIHRva2VuID0gQ0ZTdHJpbmdU
b2tlbml6ZXJHb1RvVG9rZW5BdEluZGV4KHRva2VuaXplciwgcG9zaXRpb24pOworICAgICAgICBD
RlJhbmdlIHJlc3VsdDsKKyAgICAgICAgaWYgKHRva2VuICE9IGtDRlN0cmluZ1Rva2VuaXplclRv
a2VuTm9uZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gQ0ZTdHJpbmdUb2tlbml6ZXJHZXRDdXJy
ZW50VG9rZW5SYW5nZSh0b2tlbml6ZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gaWYgbm8gdG9rZW4gZm91bmQ6IHNlbGVjdCBlbnRpcmUgYmxvY2sKKyAgICAgICAgICAgIC8v
IE5COiBJIG5ldmVyIGhpdCB0aGlzIHNlY3Rpb24gaW4gYWxsIG15IHRlc3RpbmcuLi4KKyAgICAg
ICAgICAgIHJlc3VsdC5sb2NhdGlvbiA9IDA7CisgICAgICAgICAgICByZXN1bHQubGVuZ3RoID0g
bGVuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAqc3RhcnQgPSByZXN1bHQubG9jYXRp
b247CisgICAgICAgICplbmQgPSByZXN1bHQubG9jYXRpb24gKyByZXN1bHQubGVuZ3RoOworICAg
IH0gZWxzZSB7ICAgIC8vIGVycm9yIGNyZWF0aW5nIHRva2VuaXplcgorICAgICAgICBmaW5kU2lt
cGxlV29yZEJvdW5kYXJ5KGNoYXJzLCBsZW4sIHBvc2l0aW9uLCBzdGFydCwgZW5kKTsKKyAgICB9
CisKKyAgICBDRlJlbGVhc2UoY2hhclN0cmluZyk7Cit9CisjZW5kaWYKKwogdm9pZCBmaW5kV29y
ZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQq
IHN0YXJ0LCBpbnQqIGVuZCkKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIE5TU3RyaW5nKiBz
dHJpbmcgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnNOb0NvcHk6Y29uc3Rf
Y2FzdDx1bmljaGFyKj4oY2hhcnMpCiAgICAgICAgIGxlbmd0aDpsZW4gZnJlZVdoZW5Eb25lOk5P
XTsKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcqIGF0dHIgPSBbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhTdHJpbmc6c3RyaW5nXTsKQEAgLTM4LDYgKzIwNSw0NCBAQCB2b2lkIGZp
bmRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24s
IGludCogc3RhcnQsIGludAogICAgIFtzdHJpbmcgcmVsZWFzZV07CiAgICAgKnN0YXJ0ID0gcmFu
Z2UubG9jYXRpb247CiAgICAgKmVuZCA9IHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoOwor
I2Vsc2UKKyAgICBpbnQgcG9zID0gcG9zaXRpb247CisgICAgaWYgKCBwb3NpdGlvbiA9PSBsZW4g
JiYgcG9zaXRpb24gIT0gMCkKKyAgICAgICAgcG9zLS07CisgICAgCisgICAgLy8gRm9yIGNvbXBs
ZXggdGV4dCAoVGhhaSwgSmFwYW5lc2UsIENoaW5lc2UpLCB2aXNpYmxlX3VuaXRzIHdpbGwgcGFz
cyB0aGUgdGV4dCBpbiBhcyBhIAorICAgIC8vIHNpbmdsZSBjb250aWd1b3VzIHJ1biBvZiBjaGFy
YWN0ZXJzLCBwcm92aWRpbmcgYXMgbXVjaCBjb250ZXh0IGFzIGlzIHBvc3NpYmxlLgorICAgIC8v
IFdlIG9ubHkgbmVlZCBvbmUgY2hhcmFjdGVyIHRvIGRldGVybWluZSBpZiB0aGUgdGV4dCBpcyBj
b21wbGV4LgorICAgIFVDaGFyMzIgY2g7CisgICAgaW50IGkgPSBwb3M7CisgICAgVTE2X05FWFQo
Y2hhcnMsaSxsZW4sY2gpOworICAgIGJvb2wgaXNDb21wbGV4ID0gcmVxdWlyZXNDb250ZXh0Rm9y
V29yZEJvdW5kYXJ5KGNoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpbXByb3Zl
cyBvdXIgd29yZCBib3VuZGFyeSBiZWhhdmlvciwgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZ28gZmFy
IGVub3VnaC4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzg4NTM5NTE+IFRha2UgY29tcGxl
eCB3b3JkIGJvdW5kYXJ5IGZpbmRpbmcgcGF0aCB3aGVuIG5lY2Vzc2FyeQorICAgIGlmICghaXND
b21wbGV4KSB7CisgICAgICAgIC8vIENoZWNrIGFnYWluIGZvciBjb21wbGV4IHRleHQsIGF0IHRo
ZSBzdGFydCBvZiB0aGUgcnVuLgorICAgICAgICBpID0gMDsKKyAgICAgICAgVTE2X05FWFQoY2hh
cnMsIGksIGxlbiwgY2gpOworICAgICAgICBpc0NvbXBsZXggPSByZXF1aXJlc0NvbnRleHRGb3JX
b3JkQm91bmRhcnkoY2gpOworICAgIH0KKyAgICAKKyAgICBpZiAoaXNDb21wbGV4KSB7CisgICAg
ICAgIGZpbmRDb21wbGV4V29yZEJvdW5kYXJ5KGNoYXJzLGxlbiwgcG9zaXRpb24sIHN0YXJ0LCBl
bmQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZpbmRTaW1wbGVXb3JkQm91bmRhcnkoY2hhcnMs
bGVuLCBwb3NpdGlvbiwgc3RhcnQsIGVuZCk7CisgICAgfQorCisjZGVmaW5lIExPR19XT1JEX0JS
RUFLIDAKKyNpZiBMT0dfV09SRF9CUkVBSworICAgIENGU3RyaW5nUmVmIHVuaVN0cmluZyA9IENG
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoTlVMTCwgY2hhcnMsIGxlbik7CisgICAgQ0ZTdHJp
bmdSZWYgZm91bmRXb3JkID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhOVUxMLCAoY29u
c3QgVW5pQ2hhciAqKSBjaGFycyArICpzdGFydCwgKmVuZCAtICpzdGFydCk7ICAgICAgICAKKyAg
ICBOU0xvZyhAIiVzX0JSRUFLICclQCcgKCVkLCVkKSBpbiAnJUAnICglcCkgYXQgJWQsIGxlbmd0
aD0lZCIsIGlzQ29tcGxleCA/ICJDT01QTEVYIiA6ICJTSU1QTEUiLCBmb3VuZFdvcmQsICpzdGFy
dCwgKmVuZCwgdW5pU3RyaW5nLCB1bmlTdHJpbmcsIHBvc2l0aW9uLCBsZW4pOworICAgIENGUmVs
ZWFzZShmb3VuZFdvcmQpOworICAgIENGUmVsZWFzZSh1bmlTdHJpbmcpOworI2VuZGlmCisgICAg
CisjZW5kaWYKIH0KIAogdm9pZCBmaW5kRW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFy
cywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIGVuZCkKQEAgLTUzLDYgKzI1OCw3IEBAIHZv
aWQgZmluZEVuZFdvcmRCb3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBw
b3NpdGlvbiwgaW50KiBlbmQpCiAKIGludCBmaW5kTmV4dFdvcmRGcm9tSW5kZXgoY29uc3QgVUNo
YXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCkKIHsgICAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIE5TU3RyaW5nKiBzdHJpbmcgPSBbW05TU3RyaW5nIGFsbG9j
XSBpbml0V2l0aENoYXJhY3RlcnNOb0NvcHk6Y29uc3RfY2FzdDx1bmljaGFyKj4oY2hhcnMpCiAg
ICAgICAgIGxlbmd0aDpsZW4gZnJlZVdoZW5Eb25lOk5PXTsKICAgICBOU0F0dHJpYnV0ZWRTdHJp
bmcqIGF0dHIgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6c3Ry
aW5nXTsKQEAgLTYwLDYgKzI2NiwzNSBAQCBpbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KGNvbnN0
IFVDaGFyKiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBib29sIGZvcndhcgogICAgIFth
dHRyIHJlbGVhc2VdOwogICAgIFtzdHJpbmcgcmVsZWFzZV07CiAgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgLy8gVGhpcyB2ZXJ5IGxpa2VseSB3b24ndCBiZWhhdmUgZXhhY3RseSBsaWtl
IHRoZSBub24taVBob25lIHZlcnNpb24sIGJ1dCBpdCB3b3JrcworICAgIC8vIGZvciB0aGUgY29u
dGV4dHMgaW4gd2hpY2ggaXQgaXMgdXNlZCBvbiBpUGhvbmUsIGFuZCBpbiB0aGUgZnV0dXJlIHdp
bGwgYmUKKyAgICAvLyB0dW5lZCB0byBpbXByb3ZlIHRoZSBpUGhvbmUtc3BlY2lmaWMgYmVoYXZp
b3IgZm9yIHRoZSBrZXlib2FyZCBhbmQgdGV4dCBlZGl0aW5nLgorICAgIGludCBwb3MgPSBwb3Np
dGlvbjsKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBVQnJlYWtJ
dGVyYXRvciAqYm91bmRhcnkgPSB1YnJrX29wZW4oVUJSS19XT1JELCBjdXJyZW50VGV4dEJyZWFr
TG9jYWxlSUQoKSwgY29uc3RfY2FzdDx1bmljaGFyICo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5pY2hhciAqPihjaGFycykpLCBsZW4sICZzdGF0dXMpOworCisgICAgaWYgKGJvdW5kYXJ5ICYm
IFVfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgICAg
ICBkbyB7CisgICAgICAgICAgICAgICAgcG9zID0gdWJya19mb2xsb3dpbmcoYm91bmRhcnksIHBv
cyk7ICAgIAorICAgICAgICAgICAgICAgIGlmIChwb3MgPT0gVUJSS19ET05FKSB7CisgICAgICAg
ICAgICAgICAgICAgIHBvcyA9IGxlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IHdoaWxlIChwb3MgPCBsZW4gJiYgKHBvcyA9PSAwIHx8ICFpc1NraXBDaGFyYWN0ZXIoY2hhcnNb
cG9zLTFdKSkgJiYgaXNTa2lwQ2hhcmFjdGVyKGNoYXJzW3Bvc10pKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBwb3MgPSB1YnJr
X3ByZWNlZGluZyhib3VuZGFyeSwgcG9zKTsKKyAgICAgICAgICAgICAgICBpZiAocG9zID09IFVC
UktfRE9ORSkgeworICAgICAgICAgICAgICAgICAgICBwb3MgPSAwOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gd2hpbGUgKHBvcyA+IDAgJiYgaXNTa2lwQ2hhcmFjdGVyKGNoYXJz
W3Bvc10pICYmICFpc1doaXRlc3BhY2VDaGFyYWN0ZXIoY2hhcnNbcG9zLTFdKSk7CisgICAgICAg
IH0KKyAgICAgICAgdWJya19jbG9zZShib3VuZGFyeSk7CisgICAgfQorICAgIHJldHVybiBwb3M7
CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvbWFjL1RleHRDb2RlY01hYy5jcHAKaW5kZXggNDhhOTc3NmE5ZTU1YTNj
YjRjY2NlYTJiNWQ3OTIzMjFhYjQ0NTdkZC4uNzNlZDRlODFkY2VmZmFmZDc0YzY4YWYwZDBlNWRk
NjgzYjVkNjkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMv
VGV4dENvZGVjTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9U
ZXh0Q29kZWNNYWMuY3BwCkBAIC0yNCw2ICsyNCw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwog
CisjaWYgIVBMQVRGT1JNKElPUykKKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRl
eHRDb2RlY01hYy5oIgogCkBAIC0zMjUsMyArMzI3LDUgQEAgQ1N0cmluZyBUZXh0Q29kZWNNYWM6
OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFi
bGUKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRDb2Rl
Y01hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmgK
aW5kZXggM2U3YTIzN2MxMzdlOTk3MDAzNGE3YThmYWUxYmZlMDg3NDVlMjkxMy4uNDYwMmIxYmE4
YzY5ZWVlOGIxMzg0ODA0MjU4ZmM4YjFjYzA3NDMzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9tYWMvVGV4dENvZGVjTWFjLmgKQEAgLTI3LDYgKzI3LDggQEAKICNpZm5k
ZWYgVGV4dENvZGVjTWFjX2gKICNkZWZpbmUgVGV4dENvZGVjTWFjX2gKIAorI2lmICFQTEFURk9S
TShJT1MpCisKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKICNpbmNsdWRlIDxDb3JlU2VydmljZXMv
Q29yZVNlcnZpY2VzLmg+CiAKQEAgLTcwLDQgKzcyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCiAj
ZW5kaWYgLy8gVGV4dENvZGVjTWFjX2gK
</data>
<flag name="review"
          id="244503"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
    <flag name="commit-queue"
          id="244515"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>220742</attachid>
            <date>2014-01-09 08:46:05 -0800</date>
            <delta_ts>2014-01-09 08:46:05 -0800</delta_ts>
            <desc>Archive of layout-test-results from webkit-ews-14 for mac-mountainlion-wk2</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>463394</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64">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
zlJ1eAsAAQT1AQAABBQAAABzLClJzS0oUSjJV0jNKyxNLU1VSFQozy/KVsgESiiUZ2TmpCpAxDOL
FZJSM/PSFQqK8pNTi4tTU/S4AFBLAwQKAAAAAABaQClEAAAAAAAAAAAAAAAADAAcAGZhc3QvZnJh
bWVzL1VUCQADLMjOUjbJzlJ1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAWkApRNsI00I7AAAAPwAA
AC8AHABmYXN0L2ZyYW1lcy9mcmFtZS1kaXNwbGF5LW5vbmUtZm9jdXMtc3RkZXJyLnR4dFVUCQAD
LMjOUizIzlJ1eAsAAQT1AQAABBQAAABzLClJzS0oUSjJV0jNKyxNLU1VSFQozy/KVsgESiiUZ2Tm
pCpAxDOLFZJSM/PSFQqK8pNTi4tTU/S4AFBLAwQKAAAAAABlQClEAAAAAAAAAAAAAAAADAAcAGZh
c3QvbG9hZGVyL1VUCQADPsjOUjbJzlJ1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAXUApRNsI00I7
AAAAPwAAAFIAHABmYXN0L2xvYWRlci9kaXNwbGF5LWltYWdlLXVuc2V0LWNhbi1ibG9jay1pbWFn
ZS1hbmQtY2FuLXJlbG9hZC1pbi1wbGFjZS1zdGRlcnIudHh0VVQJAAMyyM5SMsjOUnV4CwABBPUB
AAAEFAAAAHMsKUnNLShRKMlXSM0rLE0tTVVIVCjPL8pWyARKKJRnZOakKkDEM4sVklIz89IVCory
k1OLi1NT9LgAUEsDBBQAAgAIAGFAKUTbCNNCOwAAAD8AAABTABwAZmFzdC9sb2FkZXIvaW1hZ2Vz
LWVuYWJsZWQtdW5zZXQtY2FuLWJsb2NrLWltYWdlLWFuZC1jYW4tcmVsb2FkLWluLXBsYWNlLXN0
ZGVyci50eHRVVAkAAzXIzlI1yM5SdXgLAAEE9QEAAAQUAAAAcywpSc0tKFEoyVdIzSssTS1NVUhU
KM8vylbIBEoolGdk5qQqQMQzixWSUjPz0hUKivKTU4uLU1P0uABQSwMEFAACAAgAZUApRNsI00I7
AAAAPwAAAC0AHABmYXN0L2xvYWRlci9yZWxvYWQtcG9saWN5LWRlbGVnYXRlLXN0ZGVyci50eHRV
VAkAAz7IzlI+yM5SdXgLAAEE9QEAAAQUAAAAcywpSc0tKFEoyVdIzSssTS1NVUhUKM8vylbIBEoo
lGdk5qQqQMQzixWSUjPz0hUKivKTU4uLU1P0uABQSwMECgAAAAAAckApRAAAAAAAAAAAAAAAAAkA
HABmYXN0L3hzbC9VVAkAA1fIzlI2yc5SdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAHFAKURy/WXy
hQAAAOkAAAAlABwAZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2Mtc3RkZXJyLnR4dFVUCQADVsjO
UlbIzlJ1eAsAAQT1AQAABBQAAACtTjEOwkAM2/uKfKBkYLsZJthAdE7bVJyUu1S5nNT+noN+gcWy
bMv2pGmNQh41A5upBVii8A8CIr5UauKCF3LC6/DAgcdbdLzTrtWfXLzgQsVxK4LGRatNLb69rZ91
OjUVJGaGM7Bw4uwQ06rmXXPCQSFAzTS2UVcQpflP4/1Rz/P3RfcBUEsDBBQAAgAIAHFAKUQFj1WO
kwAAANACAAAnABwAZmFzdC94c2wveHNsdC1iYWQtaW1wb3J0LXVyaS1zdGRlcnIudHh0VVQJAANW
yM5SVsjOUnV4CwABBPUBAAAEFAAAAO1POw7CMAzdewpfoHhgywwTbCA6O6krIjlxlTgS3J5Aj8CG
WCzb76P3gqY1ClnUDFyKFgdLFP4Mh4g3lZa44oGM8DhdcGJ/ioZnemqzK1eruFA1fFTBwlVbCZ3e
Lxs9zWNMqxYbW4m7/gOJmWEPLJw4G2zo0BG3reCgZfI9gCmI0vxtkKy1hfvbpOtEhvDv+9N9X1BL
AwQUAAIACAByQClEgUp3rUsAAACsAAAANAAcAGZhc3QveHNsL3hzbHQtdHJhbnNmb3JtLXRvLWZy
YWdtZW50LWNyYXNoLXN0ZGVyci50eHRVVAkAA1fIzlJXyM5SdXgLAAEE9QEAAAQUAAAAtcyxDYAw
DETRPlPcCrRs48AFWXJsZCzmR6JgA+qv97eYp5qUhoOZkSuGGgFTJxbQOOmFW1KlG1ty51DXV8TA
YdHFvo7iVW375foAUEsDBBQAAgAIAOlAKURpV0b/JgEAALIBAAARABwAZnVsbF9yZXN1bHRzLmpz
b25VVAkAAzXJzlI2yc5SdXgLAAEE9QEAAAQUAAAATZBRT8IwFIX/y33SZDgEH2A+ESFqJGqoymNz
2e5YQ7fV9hYhhP9uuxFjn9qTc79zT2fzuVwtxOfyQ1ydgMmxg+wENRUK44Ut5rs/ZUCaamp4QM23
J08D2sdXbtFVNxXXOjotmdYyZLBaPAa0eH57hQToYChnKoL+PhMiKJizxzABD6uZeIJzOAm4nTIm
uu6Gk0kCja+lpa0l51TbhNVuE1ANk7XedLAStaPeV6tgaraQDRPQeGw9y66PLJQNKelXq31NLp0j
Y7pYi3RNmxfF6bLzfnTVE9iTjVGQjXuqQecoBI9Ho2mQjDqQvnCpwY3+t0SFThpLzMcwxXkFGVsf
9FIdorHrNO2ppcbdsdvUB7rsPwc5dpSlit5+NCJ/ClWWl5Dz9f0vUEsDBAoAAAAAAC5AKUQAAAAA
AAAAAAAAAAAFABwAaHR0cC9VVAkAA9fHzlI2yc5SdXgLAAEE9QEAAAQUAAAAUEsDBAoAAAAAAIFA
KUQAAAAAAAAAAAAAAAALABwAaHR0cC90ZXN0cy9VVAkAA3LIzlI2yc5SdXgLAAEE9QEAAAQUAAAA
UEsDBAoAAAAAAC5AKUQAAAAAAAAAAAAAAAARABwAaHR0cC90ZXN0cy9jYWNoZS9VVAkAA9fHzlI2
yc5SdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAC5AKURDY25PPwAAAL0AAAA7ABwAaHR0cC90ZXN0
cy9jYWNoZS9zdWJyZXNvdXJjZS1mYWlsb3Zlci10by1uZXR3b3JrLXN0ZGVyci50eHRVVAkAA9fH
zlLXx85SdXgLAAEE9QEAAAQUAAAAcywpSc0tKFEoyVdIzSssTS1NVUhUKM8vylbIBEoolGdk5qQq
QMQzixWSUjPz0hUKivKTU4uLU1P0uBwHVDsAUEsDBAoAAAAAAGJAKUQAAAAAAAAAAAAAAAAQABwA
aHR0cC90ZXN0cy9taXNjL1VUCQADOMjOUjbJzlJ1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAYkAp
RBU1NZJ6AAAAvAAAACoAHABodHRwL3Rlc3RzL21pc2MveHNsdC1iYWQtaW1wb3J0LXN0ZGVyci50
eHRVVAkAAzjIzlI4yM5SdXgLAAEE9QEAAAQUAAAAjY5BDsMgDATveYU/QCDtoRW/IcRVLBmMjJH6
/BLlA9VeVjuH2SylEScjqYCqohE+xAinWYveb4/XGma2+A4h+EI9e8UuQzN2/+1sbk+Ho9JEzQ2l
dW7AVBGegIwFq8FNl0niXSHCqGmfGhNgScd/uip95PO6lywxLz9QSwMECgAAAAAAZ0ApRAAAAAAA
AAAAAAAAABYAHABodHRwL3Rlc3RzL25hdmlnYXRpb24vVVQJAANByM5SNsnOUnV4CwABBPUBAAAE
FAAAAFBLAwQUAAIACABnQClE2wjTQjsAAAA/AAAANwAcAGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9m
YWxsYmFjay1hbmNob3ItcmVsb2FkLXN0ZGVyci50eHRVVAkAA0HIzlJByM5SdXgLAAEE9QEAAAQU
AAAAcywpSc0tKFEoyVdIzSssTS1NVUhUKM8vylbIBEoolGdk5qQqQMQzixWSUjPz0hUKivKTU4uL
U1P0uABQSwMECgAAAAAAhkApRAAAAAAAAAAAAAAAABQAHABodHRwL3Rlc3RzL3NlY3VyaXR5L1VU
CQADe8jOUjbJzlJ1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAhkApRAAAAAAAAAAAAAAAACoAHABo
dHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9VVAkAA3vIzlI2yc5SdXgL
AAEE9QEAAAQUAAAAUEsDBBQAAgAIAIZAKURjqqxsggAAAKgAAABAABwAaHR0cC90ZXN0cy9zZWN1
cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kveHNsLWFsbG93ZWQtc3RkZXJyLnR4dFVUCQADe8jO
UnvIzlJ1eAsAAQT1AQAABBQAAAAtjUEKwzAMBO95hV4QO72k+BWFviC4G2JQLCMppf59TSl7WobZ
zXK2wpsXqQRV0UR7YdDh3lIIy22d48iS7jHGYMiXFu8hS3VUf/77Q7jkHhQml2ZYMO+M+WNMXCpo
JTDOIdAP2AH4NGh6Q21cJ5LKnZY50o7NrzFEm4Lsak3U8Zq+UEsDBBQAAgAIAIZAKURjqqxsggAA
AKgAAABSABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kveHNsLXVu
YWZmZWN0ZWQtYnktc3R5bGUtc3JjLTItc3RkZXJyLnR4dFVUCQADe8jOUnvIzlJ1eAsAAQT1AQAA
BBQAAAAtjUEKwzAMBO95hV4QO72k+BWFviC4G2JQLCMppf59TSl7WobZzXK2wpsXqQRV0UR7YdDh
3lIIy22d48iS7jHGYMiXFu8hS3VUf/77Q7jkHhQml2ZYMO+M+WNMXCpoJTDOIdAP2AH4NGh6Q21c
J5LKnZY50o7NrzFEm4Lsak3U8Zq+UEsDBBQAAgAIAIFAKURgS2YQkQAAAPsBAABFABwAaHR0cC90
ZXN0cy9zZWN1cml0eS94c3MtREVOSUVELXhzbC1kb2N1bWVudC1zZWN1cml0eU9yaWdpbi1zdGRl
cnIudHh0VVQJAANyyM5ScsjOUnV4CwABBPUBAAAEFAAAAO2OMQ6DMAxFd07hC4QEllaZYejSngEF
UyKZJLKdCm5fOvQGHau/vq/3Qt5KpEljToDMmT0skRBW1eKt7fpL6851/uqcs4KhctTD7iJmGO+3
cTC7kJlzqBsmNV/gwfEZU7tvBBQTQg9I+CFA9CCUFVGb8+lfyHK6PeREB3StgwUnrYwCEyNILSWz
4tyEf+iPQ99QSwMEFAACAAgAK0ApROqKfEJhBQAABQ8AAAoAHABodHRwZC5jb25mVVQJAAPRx85S
98jOUnV4CwABBPUBAAAEFAAAAK1XbW/bNhD+rl9BuDCwFZOcuHHnDYEB13GaLEmdWU4DLEkNWqIk
1hLJkVQSZ+t++4605RfJEQpsDmCTx+e5Ox6Px4tP5CORY841arRyJRuOc8mD+SlNCQh0Jlq3ZHZB
dSvRWoReCmsN55qGrwEEDRuOH3BJPnAsX4Upg5gZBBic0IzwXKN3BwfOBSGin9JHgkbMucLP6/mY
/JkTpRU63EYV1MOO41xR5gssiW+3BEDD35F0HF9jqXcAg5QSZtR2Dsy0MHNN5CChaWjMwcdEBYdX
PMxhPzjXycs04UpPs6UkpTPyTIIWFjhISLsF4ukG5Sm+TacsSPOQ1HFXkBIx5fE04CyicR13gyrR
E4JD2HYddwUpEZVK60iwXCJkcCp1DLNeomBFaz0z6yVKENM6BiyXCIzEXFOsKWd1xC1Y+eQyHJMM
i9qjW2HK+wuMvvotLiFlYkpxPc0ASiRJniTVtWewgpSIIhGdgrX6lMkwNyhDdJY36RPOCDps/+wd
wN+h4xyfUEkCzeUCtXqO0TESdmvonIWgS6FTnqb8yV9kl5TNFbrKU00/U/Kk0BBMDT6eA9LeAGXp
fYMegSVJQ2JmS6USchXiA2s/hYQtNlAUSZ6ZFee4tfal5zj9ICBKmZpkXfYSja0EXDZChf5BjS/3
3g93Z8nD3UQ//H13Ej7c+ephar5+bPRet3sCg41ZI/Ehg1S0sO4et6x+cOFGkQFmnNEAp9YJKHMn
JMIQgclCEKTJs26JFFPmnEHpYAC55HyeC4VGUWTKUHxJHkmKnrBkZnbKZYaheDcT1ExRM0dNje4b
TXnfQM2eQs2Zmf01JhGRRH6jIDZzcEO6/RgqnxE1UMCzGWUk/C6NFp7xXfMbE8jtoeZNA5LQCnZR
1jBeGm4gOyjSyKcxwzqXNibO8XlUVJN1kgc9iGQh75UxtqoEyzPqh+ElZnEOBlCIkRfOK2KWIo+l
FTFhyCOsKtYgJhVxJJEXyapJSK6wioZj80jVZGJScY0eJFgqMHfuj9xut/OL20UeVXw5rHAp+EV1
RfwV9vwV71PZPmi33d+uYZmqCm0O25nLV2kXY+uKO6/umEHYWDVsjIOYV8QCAiH4qztuL82IaqgE
bFfoPWJ3Js0K/FQWU/2CvDSvyAOIUYCrh6TgkKqhUY/IU49VJYAOQH9QZcgcebJq9iVxJ7fIgx/9
VI7ABxp3irqLvGLmzWBQht6efzoZ3fruYbtzCOaFHZRBg+vu+/drfYGA2atBN6Zs2Dc+F5iL0XnX
HRdq5px23UqS3Ax8OLcCkweqvQ9xtI04qiAmp5Dta4SOuo6F7N7z7fd5dd3NpwjwtaQcXraFuclw
9eGag2a4p6G9f3Bf4G5AnkNmQhZCPi1zBw7L5AnkBJw/nPXqbHbKzcpbW6exECnUcONE69mFrhJ5
On5ZY4Ys4CFlMXp2oVYKCY8M8v7Ysxq/UIG8+GWXfoZZmMIjAz2MqwJJTdrDGDI83XXDPheJzuA+
KfNTVqBsZXWFiW9YYKogFrpYuVTZNqyuxtqXf1Nj94TC9vcu4MDZRHwfcIb19wBdxXMZEKtY7cuM
kMrtjFg//bbtgL4bvj0brOWw8K9yyLAwjVIc244bug4O/yxwtrukEi71lAvCphqmsFwTtqLZWjk3
Xk6HLIY317x2W8IBZyGC13T4+83Qn0yvhpOz0ck39GUy7g+G28CxUe69RS66O30oGf9Mpc5xajoI
9PbX7tHRu6Xhvf2aXfAvN94ct7b4oO6N8wb14UiIqwQJaEQDFJl2ZqE0yZCQXBPbunqAXDVSDalk
8H/0S1u9pOnOvLf33r1nuqIw4nL+XyxsNYb/AlBLAwQKAAAAAACbQClEAAAAAAAAAAAAAAAABgAc
AG1lZGlhL1VUCQADpcjOUjbJzlJ1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAlkApRAAAAAAAAAAA
AAAAAAwAHABtZWRpYS90cmFjay9VVAkAA5zIzlI2yc5SdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAI
AOlAKUR91lEV/TsAAA/1AAA7ABwAbWVkaWEvdHJhY2svbWVkaWEtZWxlbWVudC1lbnF1ZXVlLWV2
ZW50LWNyYXNoLWNyYXNoLWxvZy50eHRVVAkAAzXJzlKcyM5SdXgLAAEE9QEAAAQUAAAA7F1Zc+O2
ln4e/Qo+peR0KGMhCUCV6RQ3uZ14i+XupCqVclEkZHNaIhVKcrfn188BqIWiKNtyu+71nbarowUA
z/rhnAOQQi6KPJbTaddY/v0hBxdlm/GXzTilf7cuotntegD8HX7KR/OxnB5+Oj/5eBoe/ngIV/2W
zkhnWERj+SUvPh+u6XSiyeTQz7OZzGbTw9MoPu9XelvHCbSnw1QWCx5xPlaXjGSnMuqTLKZpnq3F
sCl/Z7ThtYPJu4OWnyfSuLqfyOWIP7ljOpbRPotm6Z08ACUK4GNcrPT95ZdfjL/w362PU1kYx0GF
MsKt1sVofnOcGVXVd2l9Jaezy3mWyeI4+x8Zz2TizbMExB/otwbVH7hoybhqladdUbWQ0q2NDlqt
IJrJw6t0vDILQdgyETaRMBDvIquLrY7NmGEijlDrvG9sGhpENqDxTwOjDu/YRhuTnmUftC7lJC9m
lcEYtVp+EU1vZWJc3RYySqARGUaQTifRLL41/pnLOUixdu44SjNzpoe2WuHXWE5mQGrpw/BP/9pz
g2vX98N+32j3j4/64dGng8pI5XJw5G/h5dn18dkn9+QYhgfBpRofzQz0FZV/mEhriB1Qr/Xp1LiU
N3Dx1DiTUQFjVp3dltL3175xExWD6EaCpKMRmDkvoHlNiUbqg1klrT4YfxmYWtZvfxvFF/MQ/jP6
p/99cfnJMFqm+d54Gm0b1WjbdEHbwII00W65YMo0jrQ9+hMZA2Ji4zgb5sVYN3Zb/qXb/3B8dmRc
hf2rrjGWSRodzooo/nyoP5tyJMeANVNm2kWmvFPfYuXLzu1sPGq1Sn+CNxcO7naf6Fa0MZt/je6i
flykk5mfF7LE13+tvYRi2+YCoHiXpwkYy+92vVEef3ZH8BqBrbrdREblF/mz7v8go4keU37188n9
HxB7TtLprC9vlFbvjfftpw798cB4ZzBstFdjO7ddhx608L5qiGEijCWfVCb9SRRLED/PpGKcZjdt
xYtYwmgH+Xwwuj9Js88yUdIAT4xg6pL9mDpsQDmt2E4p0e3GwM4DXwPLPphQTn9em+N8IgsNkgPy
vpSH2aXynXgy6To2zHO6rxSRIwabAmika/oOrdK3MDloWfV4vyZsbNNPEE44dozFOOBxdXpyqlAc
liDudgs5zu9k0ivycXs1TEVggKUsziBk/KBEwZwsRLkFQZyDlr2XIHGCEGMLc6/YXBTpHWCz242S
xL9NR4liN73KA5hiys6/q7ny82q46v3JaBbyfXtj2I8/VAZuNWyrRwiDzAffFIIRP2g5+6kXDwds
gHdwWBo5kLMohnCgVYXkqn0sgPHGaHd0kxfp7HY8BVmEddBi+4ki8RDHg7UoQR7PS1cnRT7Z4G0p
rc+/ZBezQvECr/L94GXJoY3RpqVXkDqJIP/KYcmJG+2rQso+zC9lY0xgroj9mFEwc2Svmf3aV+xA
fEj53WGaRaP0f+VitkYq0ZeR62P2Ocu/ZO9/0uDTMYs4ELTKy5W/GUQstNe05Zw64DhN/w8ZfdbB
r9udfpFyovXFiBpt1XM8noyABwc/YrwnD9sBs6149OWsysFCzaEQC+BE9uLEIsKW8fc0KoDYhj7b
7X3VfgrW08aEGFXp1aEKYwxS0D2lcDBehELNoNu9lLN5kakCpyrcIjlAyg5hOlVylL5qkb705zJy
IdZoKQfgjq09RbQsljTIsnYLpON2pau0BoGAgu19E4MFGNpODJDdj8qiSPODFLbOEIwpszt7hYsh
R0lM1rPqyFfRqFDMYFot6i+/5H2Wf9FMbcBedZxmzmFGY2Y8UnxXeGOooLF0IDtdXarZvMl5mQfP
JxGUTGAHtSj4OgPVsunsx5+MZfunaDSXDd/n2TS9yaC4HuXZTa17QaSZ1qJVBwqKVJzYUpUpf/L9
/DlMBoRoYcoX7Vn34tiHCm0ABUdvnsW6AO3G0FICGl5qvQt0h19l3J9B6tRS2krMBlIK5AoQYj+Q
C0SXyDs5OVaJYypnHyeKep37T+WwYzBYMdc8l01qraHraxWVddH0W5oli86FpX+qMFHU1fRUpXip
lIC4orv6o/yLWlZOte2FgAKToD1VsmIHGaNRms2u88m1srCuadiqVscP1uijdJAsOs1xlMGMKHSt
Du3T++lMjq8/yyKTo05yD021ecaGw6GgEY4SmJqf9WpBhyVdJlcob168RYFxRqCeN66X46/HN8V1
mt3ln6UKBJzqEng/gkLKGsFyJaIcYK2MQ7pVY5z1P16ewIzIpPb4SR4lzzEHd7hjjCPFdnpzDQus
yYZVnk6IxRZZEVIhGNXWAgoVvRzCT7ns26JBbMsilBrX134PYtZJnk/6srhLYwmr+dsLtW4HyYRd
K+6fQFYIcHmFLLyVGYnXCvmn0EKSGFVKq+Ur5GCBagV5ndgWwSFLbMsx3v1Vc2e79OeBcQ2Ln3xe
xFI1KJbdv1VEtJ1abfw4p2RgOwTMcNYv8XR9rda819fKFNSydYG79nj8CGxpIiljQG9SQvV6Oou0
hyhhun7dhxQskCJs1AhhukI+BeRvhpfFIrsHxezey3UcC6g8G1fqgyVRWHiWvE/BRmWlB1m17c7y
cRqrJQGmZO8VNpfwbwiJttftfpkNSwYh5LT7ixxiYntVGUOV0i57QY6L0i5l3AX8HywDzEt4ir6w
p6wGT6lCDPR4RqhGQwi015PpfQZhJb77EqWzpuj0BAuw4UCsLQC1RXK9oMYdsf+mhaXWbBpBR/5i
27Cr6PXy4gzKo4vbaFoWhrAQUEVaOaYs0NAzticsa8Dr/G7iGkI5r7ESor5T8S+DqP1yEHVeGKL2
G0TfIPq6Ieq8QfQNoq8bouwNom8Qfd0Q5W8QfYPo64aoeIPoG0RfN0Qx2th2jMEQ+gGMzlTdRJ2P
ZDJMRzLN/2Pwqlypb77vImfHsYy40Utv+nIcTW5h/B9A7FKO9DNZ+okD2rAL+QhRHkdSE13arQd2
Oz6/Wu70Ettp2I58hGhCmTCGaWWzSsGAk1eNKLXLD7PT8PPxJB2Vm5ZX60dv/n8EPXs45Iv7qEHv
qNtVj+2M0ql61mOeldqWT6+op0sC+c9c3wQne0e7lwpB1ssBxn5pwKg7H79f/ZbOuoYyoczOM/Vw
yk00k+q+wNtdj9d11+NxgjZLEmzURBOsdk9Du9wwdiGHDylBRDqNmNDPZtDXfFMD021Un+Xq4dny
wcg3ZH/fyGYc78SFgiTDrxrdVvcZydxJlGPVg/j/6PGFfvTomfncHuJ4rWxJdEWQ2PvfRrNjSSsE
/1ndpLcwec6dNIENbbkqqaoJ7TcTfqsJnR2Ll0zOlDaD+XAoi2ettt8C7X9CoH3CEmrAKVLrshIy
R6N8EI3OSnh4S3gA9REwUaLi2pPA37JI4y8Xv8VLx2/2Fny+NfjwNxN+qwnFmwm/0YQEvZnwW02I
d1QRk1F0L4tOpDafvu/9T03wKs9Hg/xr4+OHER/GYmigr4uv1FE/EYTc5TDG7O9j45OofSz3d3+U
yuxtaf/KKs5onqR5Z1ZCuOOqbws8VxfmA0KFQ6VxJDMoDOMF7eU9Jr3tut5xJciqlaNPZ2INbcN3
LzYprxrKDV32qh/aJXRH1NRG0A/3d8pHm99C58Oh02GDONoOnQRRRsh3EjqtHWBKx9GNLMGkGqMs
LX9B/m/G1JA2Y0qAbZ6BKdt+CFMYgtmemBqQoUzQNqYwItQR38mNSGLvANVdmshcfwTf3cli9qwf
Gn1PMQrwxDhrxBPmFH8neNq123g3Uz/GnslEQu+kkFN1+kisy8BOlpfnpbzmevCTmg+73c8H3LJ4
5CzczwcsHpTutwTjFO3/rMRO77/iu9SEPVTvqN/+529R5JFKZ4CGTVHERtTh7DsJIvzhpPQGoyfA
KGHDJhip9aWowegJ1OIBeKyBGuYWrq0in0CNY9FQzNuUcCjjnBeD+GteGT5rV/ffg+CnrthtnPAY
VuxH86iA9boCcXmwTD37PZWgNUwSonaLlhXoafmL92630rbcHricl8+0EmHV4P10djGVT2VXa6hv
e5Bnb608cdfDeTlssxfGNt18XLZUffmUZyd+9Vt/pcAq8Gg/bQcwi0mGYuODe+JdL3f7ut2+zJJT
qGsBMn+ks9tLORndt1eHf6TZrHIUyKPfVoreSvUj+Gt1OMgAALM5Ts8u3ji7HhbfgfjbIH4/HQOF
ihJlw+OqLF9+2CWlRRon5YNSxlEilJT+9UWRf70/Pl+cvNLtHp/rE+DyfHHGEXZw43x7mLw9GO4i
3zipOW3cynyYCZT/paWXRLe2SF/3FiYy4sXZkF8AD+pszsVzyoY+eMVoO5Y5SGcH6hDGIvraXR/e
uPqDjkG1A6MhEQliIGoRb3ToEx0tBFO6SDY6MHPsBD4oJkm6g9Y07TYcHam4T5YdSmmbSjmMpOqY
NnTEiolR8LomBDkqZhWi6RJox6jOHcWaO8ZbRiGWozTBZOOSgXQ4QkoTTLcuwQOiOqwdKmK7wfJY
MUknG+ZaHtVoFMNR7RIMOqrzugrSxKR1kt+kcTQy/IuPXcNptbw0i4p741jtPk7LMzjVmZhfMRok
SCq/m0atESzWfEisPg72HVywPBXW+JmEvkst5ps0FNikggemsD1sWjZzXYGgx8XvX/Y82w1psdOg
AnaGUFW/gym1OKZKnS7Vv03Hi3nWRiC54K7l+TY1XRAYxHdC00Ocm67jBb5DSciZ0yT5Lqo1uaIm
uSJl2ndrXeoy0QAx5ISBabsOWBNTyxQ9PzCpQzwifOH1GHtZa+6SP9qGRoxsZxsaim8DLnCAQHAw
rMW8nkm9wFJ2Dk2bIc4siIvYcZ+siWqpihfb6jDduniCJzXxaj9JaJASCRdzjk03cGyTMpuZLnZA
XsdGDPu+QJg3SblJuCLs4rze6aFbG7MhfkzQlvgQ4pNt6+6QGwW90LNpz+wRh5qU+r7pMvhk95Dw
iO2hkHk7rLtb4EVnVdIhgqVeXVJorIeIMsWqs3Llh8CFRLo4MrlNOlaHweX6fRhbIHvo2oL4IgSb
Y7B5ECCT215oBoAUzwuRRbiad32dGg9P0kEB8esw/Ar4XUi6YNP5DGXAGtkly3X3Soodx0Rvjaso
jhEUX3XFMeJ4sJzADxxZV05lhSgRIt/kPITwQl1hCisgpuC+Z/shw0Hgv/8XHXld1UFQtK0YrM9r
Hj0+d+NYjtQBtnlhtJnVwTZcpN9Bu4D7UAAwYVouESaFz6bwqG06oYNDlzAeWHjbiYvzW3tL9E0P
N9g0w3JjSE2VpEEVyxlKpqureJTEk7nMbtJMLqMs6ZAOdkADzwmphy3PBHkhe/WCwOQuRF7OCMUu
otQLg20NKqKfT2TmnzTLXA5Pwa+NYmxqwZocwmLtEBh8dPGxP5+o08BPZRHPi/ulKhAMUAfrWBuS
gPWE6SMKWcODgOsFds+0QkwQ95weEc5TnLHm9AStdoi1qZrE26pFhOhJVMujC8aVZAhY8l0Hsl9I
wS+QoD3T7YWuGTAc2qFtYZvQJyToKuEN6SJGt6UbJJaqHbZyXEMQZpx4fi8Ei4eMwRyADOJSmBI9
i6KQExxQJ9w9w3fGYOirikmwvY0PaMRaTPeq/+F4aTRqYY0HWIIj1xOBSVjomNTGjikwgALZoeWJ
kLu8hx6EduXQ88XTMtNmcavXXPWbx1wujoXTQ5bC1jTkDRpyqmfA0cklLHllIYveKI9mFdgj2w59
HjITwB9C8oZYKxw3MAMvDAMPI0cQ9ugMPqrO4LWoNa7LsFtr3tCCNUQjAkl5OY8vgt7l8UXHXXmL
0tJbdo95oeiZNlc1nxX2TI49x1Sls2WFRKDQe3FvqdlxVESTW3VG3CNu25J9Q+1BZG2rnThk4bxQ
h71qsIJSMBCYmj5Mb8iLXJgeBCqz5zNqk9DyCe0932slu7W7yu8bAidCbAs8RGIVb0+gNL4B6uNo
kI7S2Xa8paHFuQ9+spkNHkOMmh4PQxN5FiyGhO85rrefCjuDbLMsG/oMre0gS2ksamEsgXAvi7JG
O4biYfQhUI5bguDoJNADtJpOh1lAED51VKp0mSsgxFkm8T0IdC4oLXyIdqhHRQ/1nAD36OMV2wNM
H6rQHrisYgYimdwKk0TquoZtV6rzLJ1NO+pX3XmmGBpt3BEdDFfrd9DZ5h6svBCDoEkBppjAOrHn
+bAwo5jb2IdA3wDTNcXD1X5TJ1421vVbDakoQm2Hk7oi1OYCNyoS54mMNzWhWo8ytsCM6llC4TNw
Lai1HWK6luuo/xeJJ0AfIvDDWmjx/JLJTj0qgzY0ETje1iSKWE0T7eajT+5qgkCuVVWaurL8oApO
l/YIV/5wYbFDXT80hbCQqtl6yMY2rDDJU2qcJbPK5Fs2tUoZ1YaRMxDVvZFVo0UEhSgBkzCBUhLC
AelQZWYoVFzI9iaDisBU4QEyUQCBDfIRCWDNDpUGCDefFmpSH6rLK8x4FCNUZ6YblyFJxYtyKZlm
Nx9n6XLnvI0trgXocYdjQoiJhAPlOCQ/k3tgIt+2XUj5vk2QXxFgN8maWLhBLHtQWypMijSrlDOd
C/W9XLiCdAqLnHWImlOei3woq00r4Mik3HHBTJZj9ji1fcGR7TH84pluJU3zyFX3puZ23KQ51OTJ
rmCiJ8HHTFWKKoaQRSxRejsBxZYDKjMLKe/4zHQVlKkDFZuF/4+4K1mO5Eayd37FHHUBB/tyxCpp
RrJuiWpZ38aCuVTRxCJruFR36evbHZEZGYhAkrRpjnRiWgYIuAccjvfcHUjmi/Mv633su6/D9Hih
w3atw3bLF6svlsMRMlh1Tl8iyat/MbbHheHSIKsr4D08lcSKEoFmaFayNMwE8aLcU999uafHF62I
Yi33brOE5enm8bcxqDnzG/VHlKrJSVRARaWZZQU4HuArIcDgggmBaE6VVt6GVBH6q07jNFZfkdPz
RpP9HNdOX1p2XNaPw90W84xsIqec1uUMCEJlDtjdcY0AHuX2Dq3GiwSbcTDUtct50dVcjGsu+EqM
a2FlN4bTy32uLTpFVURigVB8p8KkTELkkgDc1Sk6lT2Lr1v0ofsXjPrQolFHbERHnc2E3zAndz9h
Nu6Q6xchuAeHnC3agQW64DhsiDozH4ysiHT2PseszH+2fS1kGNYySLNd2CjA5kodef1pL4yC2bqw
svcZEA3sF4EjBmacWA7bB9feJeAuAKpefn0/PQ8PT7+/7vvq+GccX3120Sqw62m1DPZN4ZgdGoaF
9rNv4AtQ0BrrdYbXHIMAz2EpcBoOWkpTQmE8mtiLSMztY+rxjHVMzxca7DsaXC+x8Lf4g2fiktYp
QXQhOeCHAsDCMQt+uYhMfAiUJI4rWOTAVH5RXuixLyg8aCW87lnObundcEeqtYzHV+zcZQ2eKgom
DU5BJ4vpFoB2nipYgtZ7Fawq1r78YqeOz7jk4+NGaKXX+ATvaF8I3QUCCALqi1bVMAqXgI8coZzh
SnScBKUUkChGvSlSUc9fln94uL6/e9uu/8KOv1Cv41GUGRE3LP3f/nm7nVw0VfRSYggI/YotJgP7
IbFYMHPAeWhAAjAqi4qJVGyF12u/cuqxFWSz7QiynTaM+O3f8cdt1jEEpjVX1MH+zMB0gZUBAPUF
lh/zXIKEzEj3Z8cQFsK3im87W5Tmy3V7tRluh+vbHf6iJPLCh/2wqU4I/xXfgxORSeUAsTDDYUKy
IxZMDtxQtHVSZKJvcKzn4eKsaVeY/n91m160unbcgjZm4XqnMrvv/wKTT11VXDI9WoEticGMO8IB
+ADOxByL0YmEDGbBgSIBj3zVORy6P+8eDg1a8Y3tiD/I4wrqBr5i5F6AbyWAimEXjDIRZ5IkkhXp
gaEWa+SfbbTLqNdJN9VTWB8VHoW+DBNR064iOyw2AeAJrtsq0JkHR1yCKRI2y+Cjo65ujDNk1/bU
CrGVHSG2yyTt427z/HDz9PXjzX98I6vFKBAe/RdgDp0keK1cMPSowJMFbyOB6eTSey5Y1O/hja8O
Enz3/Zn1MT1f6GfW+hlqV0yg/hAJiHa0AnQJFa5aWXfNEqiStBSiKMIR5Rjx3CairQVAEgF2F/Pq
wnizia3lOccalu0uWkVdR3u51P6nhFBG8hr14VbVpWWMB8bPFckhgCeQLCJMiEQliYEt45OK7760
fkr9Jj+lVq/xyEWr14YuXV1zkuPg4oEOXTJas3eMWZVcAhyB2bvEDQkW9j/O4Ilxhfv8chR53n1f
7HmLi1bWjrPbyOvFxPxcD9L8erP7x8kseVXD0hpWVbF4oVki0iqBIS2AnxnotQeVwAWK4GV4Cztd
D3TOsS3btWoNuqMWVqwskOmnTztwj2OAZ5wXmBZ0J77ABmOkJ7p4QNHcAivMAkNRIRcKRIt5+xaF
jkOc5S6dtue37HmLRuEt66CtLdsdffj27vHmbj9RSalg20I2ySSnvJRAooiAvCttkEAWmNSMhWK1
46mL+poOF6J0eMuWX0/A7+rr3Wa9gwrmksgAOC21GmCfg3dtgBJYwwvPJur8SoDmj4B9c9FbpXlP
acGPSv88ANC420ype6sqahAMWbMh0Qt4+xwIfdApEhOjECVTG+3LQcQaqDkHcNrNvxGglV2sKcNG
b4TmKxp3fFe4WGCF1QUzQSAKMIAaSQzXFCCQAAhEoyZeqyRi4KFbRvH/PoHzFhethrKj9m6CPf/8
vDmFpoEnIeQxNEQtVSDaKcDkXEviBI0kWqGA9cWYSz/4MnXWirBbg4KNEcttcXxl8f5uf/PhefwV
ZpwAxg9xLPxQ0zywYqUWwJSQRWsRiHPOE1hUlHNevOPqxQnojHMG46wbNnrB3rbWyx30gpfw+ylM
WF8r90wpli1sF0h1UlawDoBOO6WckSUzoAUtkvy9Fx3cOKs64262x1UIyOz2Uh6H1mP8L4cEr40n
kjGbJBJVyDQC4ZaZZFxSLvN28Hk37fgdELsZhFgGnTLWMKtLDS3rX4zayCIpMD6iNYXJU1IQH5BK
OMozuGgndHk/WOfzmVBUbvQZbGcer7GY4bBEPt1iDdIU8a20wJREXQEUYEUCTXJMxKYE5NXQDBS+
UFlLGWbvc97NRTtU530eveoMNk5E9xhhElSOuSSpaOEpE9hDECwrQ5wNMMuMZqoSYBNT/i0OfXre
CL51m47gK/zxw3D3wd8Nt18fb6pLNSP5x79YE8JFcpVO+gIvUgo71t+B4DQkr3wp+d0d6lykM0n9
WYtG6b1cY8ktN3YxW999PyHhEUJqRMK1eEQn2PJg2VNtYbIEhyWQgE/yHBVVsCmGd4mnTQL0W06P
58rBHrmO6sCX01IYf/cbL+WfloMYE2YGHHEE+MhsAK0wcm8LzGeQwjDhYbOU/bjasseFOKojjp7w
3uPj7SW9dJd28rNj2lLqVIBsRJAGQB8sA0scK5ooIBkih8KFXCzORU+tFHqNera1cnmFHPzfIji9
S/ARFHNah0+1IMOECCwOPT7Qu2IyAdQJEgUuYM5hQ9DhbUC7DnIeBMDDRnjXidNtB74214aJj0Eq
g7QtJgEiU0KZKGCuaLgM5pkq74SXJmT7/rz0JM054+3xIVDLdXQVZjKX8ezO4X7Wo80YM9YrcO+9
Np6BlahMhC0AzSm3hCUetDRMA1fomnCv21Yuuw7Gb6/pMvd0tRseNh//e8xHy4OTlNVJKukt1eAk
s3TA0wIF8pyBsSVYdC4FBQK699s3J0HOxX4Ojy9afXYdJe2uUzqyNAf/CyZ3BK9Z4LEgUrighNKK
AOFmsF40I4ECWYrGmuisAEaX/7iCSHjQ6mo7HmF3iCW2HmEafHTbh+2bClNx0fgBGWpWYHuAtrUx
sMwYbA3OYIVhCYFaZpPi4f0m+CTLGUcyPZ+rveMdCrXjw7LO6ZRO+v4vh2QqrbEuo1QNe6E/hJUq
LBaWYLBfxOiIB8hElMB8OSBcK1+OJNeuz5WfL2xzz81acPhyN6X1DysYr0uZigfdmPmN0nGjYgSg
h3yDw9LzJXhiI3hEgw+DftEtzDpdCLXvCGXNUajb4flu+oXvbyS8uEPQhhfDoi+WaIVwj2PSICpN
AD5orWyQsSkdOkk077EVZbcO8O2BTi1zGQVrkNLNw27zdP/wdSzeQCtWbHShjBbJsG7NJwWSFbDn
YJ0lytrkPGOGvVIu1PT/uhmXN7RfNLpoVRx6el+fpuDuw82USGT1FILVMkrqEkkK6JOwIhMXJKgs
wT6kQWyxYHHzXhbDr/Hzfl2TMF7o/40BwFwjxgozy3URAa0CJIOV9hnws4QNwVLFiFfGR01hWl4J
qdaez0D+X5aLqFdrAGB4qpbeDJuPEyxUpkJdZjGkBZaAJ8oyIEPPPKa+nZQqc2dlP+w266oVocOU
4Eu7Oglz9XxINFoNvqdWxtYPNYNSKItJkoD0VxgvgCzBdGqdLZNUSf5KBG7q/Zz3OTxuJd+vYdhe
cbqAJtPRQoxljBsDCxo2AJAPqzFE9hjuMAq2/6TB1ELSXr3kfj51XqPq4KS9csvtazs8DdvdU103
j5u6ccnRAg+pMWWMKjQFIL2psk3gwIEKkrlPBtxSCfxN0eMEA6XjQOd3pVWzRinNOz5MC7awDSz8
8g/XN0/HCBO/VDXAVP+iv0e+Ul29pmC5OqJ3pR4ztFZ78Gk0vlz6txjhfP3ZrFGrSYeE7bVcanIP
bu3DbY0FjJW344d6kE26WGBHCCZikhA8sNWMghsGtlmiZEKq/3O1+/isFVh2lqU2w8K4m9A8BTaM
PiK64BmFfYxKrNoOSQExtgX2WEMdRi9yli/Zdz88D6P3rMG6xTs8lO4PY6TxUJKgfORWa02MBkQi
nAJpHBck6mI9NzKEkN5i1lPnLx4bGNrJd7zjZQc+edkbvDXwFI0SNVmasw0O2GTGjUgY5N0O3G4S
xmktUy6ZtVtS08tFO5Tsjb8sPezAa8y3IG2sZZzgv2K0CjZJTN+WDLOaEaJ4pg14MgC5+n3ge6fh
Qh/V02eZu/zl4fnxKX8Zbp9rV/7D7u7pGLnhlcA7k4S0ASsAcC8DaGMTQFflQvGJs8y8eItR9Abq
a9ZruVDNdlQTyzPJNXsSh89Pz2N9d81nVlZpWOBSU0dgkTkwdG6IixY4CM+Gc0O5c/E9QlFzCc5s
mrMWrY6itxzcsModfLq+P9oBrmWMvjictyS8D1jymhQe6qWwQELGLHQwJgOUo93CzfW8NSOcyxfM
mjRaXHeKbeDLKY71fPePm7sJZ4qxIgBWCRVJaMITbPoige0BKeIkg0JcRKppEl3POO9tIUaHcWwE
XTrFShNOy1oJd+nqOUr4ixFbUyKsYvCPxsIOKQ3G+rgliUfnmMksJfZ+XLWV5lywdt7molVvfSJi
v9uqDlWvRogr5Bh7oYeiJ50S54EUUBtRTgALYoJw4YwHN2dcLu9VoTaJcT7AVx9ftNqs8xf7/fVy
Wq+HzW/Pn08dj1EmcYgy4VrRQasoZYSJxeOxQuAtC7BWpLCJUe+jMeYtayUsRpqrMD67aEVlPfn3
E7G4//Tp/i4+fP38NOEH0JjX8KT3JdPoSAiYT49IgYCZkyxi8M4mT3U/7rzudCYTwOP1UQz4chZ5
Hh7nSSGmEatrgF0+A2q0pcDCAApGvJUgW8Zy1SyD4Xp5COCxmxTCsfZrAdhmu9/tV3cC4uGuh/vb
q3rQtWZYcFINveTo5QH0hYwMR7pA0ctz2IsBZqUUUnawrwn1prPm66H6M7xu1yjG1tlgR/l+qiEo
8J9/HR4eoftjFYGsTMjpKDkWIhuHGUw85RJUlkR7Y5ETe538n3FGuiPzRaub7Sk8nX5IN8OHu/vH
p5vN4X6wx/FHHCb16xxKm2mKhCYO6IMGwPZUKlKy9RhHMzrZ1rJe7nUh4NATcIqO/Tg8bT6ectkV
tmdGs6IFvKAqFgtXA/GeMQI4OUtaVCkptQI1vSzG75i6YO5cJa1/fvp4j7+chQANQbtjldiLwoNL
lJhgBBanAkLL8MqsT6G4aIKN/K0plnacVyprp3YXrQKdtyrFEkjXi+W/bD5u8QilHms9seZEjnde
WKUBBWh4sRorlywFo3eWkSBZkCaD1Qvz5rzRr/G79ELmCB9ftNKqtQrqegqPhR/81WQV1IgaX4nA
5iItmtiIKeiA/s9joUEOmhUauLHy3zpIMmv6ZbeBDvrNGvkuWg02a7X04aYkaPzlx5vHqSgGXvmB
VJuClwPgpUiwQwoNaNLCmiTFcl2UL0qFP0qvmYAXrQ4d16rt5rhpAaPYYUE/Frev3KsWKuQcErhX
PJBKsUYtMMDN0gFe9pYpZv4k99qTu1XcdnZrvVkGUutqHfNrGBLUFj2Z9d7bGGs5Z8IgaqWqwISA
G/lkfUkyvXl7PBtOPT5txd7s1mIbNsVNhucT4GFW1eXlk/IyZkNiwBJUJiJxxWeijRBUxMiTUK3j
PfVy0Y5z3RncbRb+6cfd04CBwBrsHys3DDXjYRrtssi5AOQKJuANXOBxBad4tYIF1GFgi9DvRwSO
kpx7wePTVkfXsQus0GpB1JcD8h/dr67cGN4pEwxWAncYCxRgFhbvszGRx8gkcCBv3m25vwD5vyzx
vmsvUZq+lHK6DqP8/erj8LDbrq7BCNIHJy0lPCaYMAlbt026EPBfPJbIOQv0na7BaGVo5ZedbeV4
/0gZxrrfH24+fHwabyNDyVPyACkMuCM8eikkZuEohjR9LiIzYwV7U/1E0/2ZiZk3aQTfms563bpl
muzx824HUOfx693Tx11TYFQD6LB2MExWPyCslTkVDgzf1iIovGEtIDw3PkkVuDeR6Xf3u1dVxKu1
hE08o23Uvgon1q9id72sAdzuHn97uv/8OKstMTUdU/8ijkwC9hYgbExTALYR8Br4NUMCVkNr7TGC
/aYUwjjQ8QVggzOB93XDuWKMqVXw3eE1uFMx4PAwg8JU1XvJYJIs5rUyOD/hWSLeBE9kScAjefGK
LsD5rJN2cN0b3A7Hlf1ff83ftrXVWnqRMecCixnDWxbwLgNnrBnFS17w2obyTrXVp8Fbme11R+Zh
uY/87frmf59vnr4eD/pwKcZ76aLzJuN1XEELvGDBALXRGvY3aqUIAWgOdW+xgOMAfU2OT1vRh21H
9M1E8uPP5Qr+aXcq4q8+FNAQV4p4mRxuDIXADhFIAMYC+CumUi9ynM12200jAV/f14Ff6lno4/MN
7CL/c7pnTdSiSVusEWBoyuExMFcwUkMpkQqIB2cJoIs7F/ZoO2zFEbQjjlwGy+sP1FWHM9xePd0/
1M3zkD8RY3ksoCZvZRCECW8PoRDlMtBFPEAjpfHsTbylM9SZU9vrhq1q67JN/HJ5M8rH3e3nGj+u
RiprMSGz3nkJnCsGLLfwnDiD19t5YW3RLnqX3qVgE4Y+U+4GT1plhjXQZ8K4TlDzl90/cRvV4ykG
btSYdvNgxvirECQzi/MD5NJqZQkDVi+cYcDq+avQDfs+zyfxaSO1GDrWJTfD8laLL/vTby8eUjBg
M5dyxDCWZ5ozHnmkXOP6S8Q6Ce6D08RzMoHnVw5g/Hr6bcczOaVZi0YDxToOQ/HptPfn4dOsUBwX
6r+Ku7LmOHIj/d6/ol8coQlv0biPidADCodWFilpRWq8+6Ro9iFxh4fMJj2Wf/1moprdjSpUN2fN
9bYjLKkKAyRQQCLPL71JQhrQGmULq8sZsDijIwUBjEkDN4Xmbe9u2OujHJux2tirimNumc79rhYU
CB22M2fjfavgopU8gBzlGbq4UVoPCQ5nJMEq0IK5eDYoUzHMuHuubFdOitcmJeQTB75c35yQLedj
OdYdHXE+NoIg+5WSNsBnEClLRm5hPpr3Qnv3+ijG1vMKRzCUPY395vTzQIBWytoQnQIVEb1JrREY
bJNg84EgKkT08ohx43fgyH2u0Gwor9HcF7s6jgN8TGZZS8qM4seMUC3mMYuIciZICtaCfkMQzlEz
zo+FkB5gY927HqmiRuq8FxSwuF2vd54vbU8QrBOv2eBbI5VqCDUIVwsiolU5Fdi1gccUmWwPxQXs
9dsjq3KEjeib5XYxjKvZzdX1j3lnz14/hcCIbBOSBDQnyWAlE9q6CHFwNWi4lX0KUQSprXqmVoJj
bGzmY9J70aac07I2pxWt5IHe3X6c3S6vuyjvjHBjUQwHdk+DtLwRLaKpBA9iuIXVVkwGwVUrfEtf
4o7bJ2E89/OpRTFJqyus4nLZt/F8mv3modv72QahMCfQI//TNCOQgjipOAsNsQ62FSbNWBMN6BvO
2mSTkkzV4PV2doo/9UfoY+tt309KSoe6I51r0iP/35dXN4vZdYl143wiHmVimZH0DHMNUGtAyI9G
cqM8nLXnbLNN52NCRn65TzSjw8woyxidVeSMjyFlqOZMdGbUmFcW4L4T1CJ0XASxKQnehCBAdtWW
cUuea7mGzsflDHg5KekbKiRMSFIhOmwMW6o700SfZNkIdJBIHaam53Aa1TaWtbBHoJMQ4M42UR6V
jcKoperp7aSkj1aIvqwjfu0Ko2R7wpM5Ia96dK3hoI5QTC/kcDU0rROm0Q4jU7Xw/giQ8A4Ec9xR
sAXA3BEqK9TPtz69y3+wE7q7yDPCl49WG4lHT3KgVBIBKpRFWK1EiALdyqVeQmLRSzn+qvLJJVED
DxLyFnTXlOeLgggPqhuDvekRLRUjGi2NjU6Ea0zOcs87X7v+D/E2fF9QLys3JVOrZWXD7lUlf6Vy
7LUWostxJ0ljaqVDyFeDCZ5wF8G2bZS2mtCQmD4St1j2P/7567IxELyqzaIvn3auDVx/pH7zL54h
yJRv2xQ8wskg0oqlBFNjYYMoTbUCnVGbwxLKIbdJ966g2M4ru9Yu+irh2eP1w9XD3eP82wBqHdPf
OntW/rP7CilGZhuqaA7aQUAFLLNCjAe5RQqhnmXPOjBoYfXuNysmOGNDaREe9j+JxzpEn5b4ny/v
N/3sATOC/osG2KhcilQ1wSJ0N4jBcFJRCwa9xGvNPX8eMGNtsJG9VmlZTq/insSHT1zn1+WPm69b
NxfLxiZvI+cWY8Aowi+A6A6btG0iiGqtAr1SsLrdZL+vHhGVK3K+rLqeRrFRgPkIDqoDyiIai5qA
Nm5dbJJQwhDnJCz6wZ2/3/0BB9Qw5RNpHQombMEXT3I6xjZ8Wn69Wj/s6hjAXYV3jY6eMJAXpYkI
NtrGxgkJG54S6ZSJTqv4/xiQURJdzHm5Gloi4OGsbsi/X87vvt5elVyxu3rl5urNMa9OwFXGMCKO
AQNOwIAN4axpiUspaeYdfxE7UWeW/1Qjami932vWW4GhyoC45DsMge/rvShj1klGNnG0YzjYmMgE
BPzNRGKbyLhMCFvMNOmDCOz6mZRjsRoBWyfWXx9n97Pbh706ILLLHKOCYxxVbAIQgfkbprFwRJpE
pAW1izo2EjDe77FHzpCXcDbry1/D+9cKeZIZJMiFEQ6CwoxF13CPOA8YAY0hKao1Hmg8LHkdvnv9
n+r3LhBZpVwOZJ/53QyJzrFhKDBwn7wlgTWsxejfCHcuXL9tI4E1wip6rF91RGCALsfkBHjVI3PI
J7nUfWTxJ+QzTHfqcM+otie0QzlgJnKiGo/eP95KidBnDHi30RIESWA3h10dT5hlhxHNCqplxUMA
F4wZC00asnaQW0ACI7IRJniMzbegBgFXANVKK+MTU4I8D+HvSBRSSffKDulWl8ME1eu7e0T7QW7W
RYbnPzE2nLdRWInGVYPIhFhmTQfSMB5AGW0l4eT/AupvQ8/YXDevi7laM+Qk3A6yUv23x9tfr26/
bkh9sixTzrPDwrTRI75+Ezx68jQeX3TrMCEYnAQuok/Pkm/KYUYmUjYqpzOrTWc1700Hs3/m15vq
SLbTuk8251qHhCjFLU9oORNYIS15jBt3AlR66o5cy4fKJHXvCoJnQ3A1eMh4z9BXFJAtQVlFq60F
CbJJiqFfxdPGJVAFBRWOBBVjyFi+o7a+/a5L0obJLPBQX9bKGfSqGZBuVbu/5Ax8CvsfRJyUhR2C
1SW4J40J0jEnJfGpfbbhvChm0LeWF2UNkNx5ZQ7WVvbD+qk6QOfBygnmm3IDnhCTEJWcRgLaSBC+
cRZdlxqWPpDkorIvIZwURQrGt9C2STlVOwyZ5Jd2W1dr3kVr1xA/fOKta0EoERaxlWwK3RZixnkQ
v4jRPPYkk0Fnk3LYCue/nG0FpDdvU+mJd0GQQAxClGcAbR8aq3RoNJHJipYacyQ8+fme+O3YBcXz
YXY+PNR9nn95dwPbY8P8LK4diSkifhCismXPQGwseofg3KlgVdJVhOdK2D+MUY/5v7spKdW6Quml
yGFZ2ffRBUT1vS+WRk4x1BhrMDRcBYnQOb5hJFEglQbi00t5X/YoKGmvmLr4Yr6sJV3tf0y0eHTm
0U3ghpTMK81BGsByfC3mWlBQHrzgljoriVXyf79dNi8nJZFDAw1f2ssen57vgPjlk89VgswNOh1Q
lxwIA7BfQO6XptGaMWCMFAN8DzHoSrAqjFzha6tLAbJ4Jufu8r/38BNBscrnHARWDrvWgAZiMO89
+1NFahgjTtIUQL3vuf/2+ykIWC1phYBl32h4DPIAVSFvFVYK4bAnEdAxAGme08BblYIj7p+FPBgD
MLCCVuJH4GHfdPh++dBZPcVGxsteBeEYIpU1LcOKEMGDZIr5FMGBKsfxrX9WRuOm8zrpm5cl0UM4
HNCi9Bb44tR9dP7dILA8YIVfb0Akax06FBB7DT1ujMAaE0eJPVbB4sUCsPcpnJSzMJWp2T5U1Mfl
/eru/gaRKveB0Wi+sVVXcs1xpVBNaHN1A1ByBSbROo/oz6DqmGex5MpAIxD7w4bFxJSqbDSltnDh
WCBpK9ttqywlCVqHho3lKcVPxtrGIf6VJVw6FQLW9ajjrv6ooO1bMav4AMXMbv0MH0HmKC5lDjQm
Dppt9BT3OEWbDOKCaWmkTo7aIF/oUt6OvU+xrGCHwUO9F+D1/cc+nJqxuRaHkpqDshUtarroBXeI
YQZnJLpAW0UNG4nu2u+tIGTOhvKMnM9rmmwvmbbzlNAcNqSD4DFYrE6GiOgcww2JVo1yoOE7GqiN
5rlOvWdk1A6aFVNa0CEfkQu+DR6Z//GPs8ur7a5UuQiuogr0b9TBKZZ/cFh1gTehpRpBgmVpPOp1
Uo5eMfzKhd1mTf0tnH8cJJFw76gUjje0RfecT2iJFnCbEaepdVbxtv1XJZFs6SunVQnSkkvev1Gu
bn8tMknRWZBhWmVXFN0EqhxrdNY2oqNddKfhwNUClyCpmhdJLL8dqVMFL4pZLU3lGC5Xem+r7KJ6
VZd/HaUj3iDUncHAVEJB2rRGgwLo4Q3MIgQ12Cu1sF4YaHgryBVTtbO3MZXkmhO3GAgA+6VL0pVP
YJ+RUtRBI2eYpEuxxFfQoN4zgrtYx/Bsv3p/tAOnsNdyUk5F1+a3zXD0v5ydY8Huq9tezeCtZJ9A
n7bo/Y3EIyhPwAjwyJqgkgyCJUuPVB96tmQ/Qks5n4pJVa6Wgzz54D7u2QwwVYFl2dCK7BDQUSTm
gW8TzFTgwmHJLaEaKixoqpi5mQ5fPjjAyJTgTUlyRZiVq42hMis0wzU3oDE77httkDynZFcrTgH9
0jlJon2pZJDT2iJXTJSKiC16MiZGzoucb4zTyLo+bBJmgYl6gfH2HHNPg3MNVs5UhjPOvR+5Hssu
J+XQFXqouNzF3rNStmAqJQRVbqz3oDbjGXQImk0cpx5Tz7mOLxZ6X3GhAHHzGsWLnkL3VGiuV7Gu
1dwGpzi61zFSBK5CFww63xlsBUoF9+SQTld026NrWaFL9i1Wl+vFyYatnM1uYSlu9jFXsoriKbOK
gZpvJGY3CES6cxLEDZHgf0YnRu0Rk3+v/zHbf69ZOR85q8zHbP3Mf19fP+zlhNC8vEJQrVWLwLMc
RV+QmaxUqeHWw2SSU6IAxO11U45ficJSdMFGQxaRYf/l1L3PZUYyqCbpfFQt6O9UONtoZtAZAeKw
xSKoDFOQoofzQ47Db2PP4xcFvi2pHxaHzA8PXH4IH4e2V5Q4hUwUhHiH5fZEA+IR3AwkgkAvo2xT
GwNs1H8yx3C/RY/02odf2R0a8vru+m8ndmukyBGGxrDgWWgclkrjNCU8V74hbSup8cK0jJcfvuym
pKCSmq/YILE1XK3n6Om9X2Tj71OaJkE9rFOdGejItG1ki0ULogVVn4MeBmpZwjRyjKk/hmm2G2AU
0WzXpJgEH5bKgIdqeXj/XqWrJyAfOEGdC9D7hCE1wPkxfJkrtLHCTdB4azVLhvPExPH9Cz0f2L/w
tqRe1ajXfeHt/fIhnWfHwdbAQq0EYj2etha4VyQCtF8Rmkhha7TCSOIPB9XmPkftKum8pLNiVFVC
bx3q679eXz0s+ZZNbeKsXYjWt9Y0AQOX4aj6xoEq10ipWi0EKHe2x6eKjiblaLJCwmIHs/qwQBFZ
bc+L6iprslbyCAIsWp+th/NCYmpSa4OwgijNXI+AopuSgsWqRsFqtB7moXi0JBWcF6MaJmL2KbDG
YaK4l1EQIwSw9/ivUNaGoWtKLCt8IcNJlmCHy8vHr50CvUZAW/RMm1zgQ9qkKZwedKDzwFljLexR
2KI8RJAKqBbPy7rc9T+WbrlrMSmJpZUZCN7jbO+W95fL+7ttISaaE7KwYZJN1C5heRLbGPh3440P
zoRA4Ho9+F2eOq2T/PS2JHcIcQgPl7NDiM8fzvcuNNkBPuc/cddb2uJNAXPAWEeCZQ8DsDMNez9G
GEx6/3Kp8ztKRgzM59X7Tw5hgfFh35p54f1+RcfEEm+15E3yiMOCNT6wnBTIcDaFthVBuWfhDUG3
I8B43pdkVqK5NKOLYWZUxn7o4nZAh9YnIoexUeZzQRmVMBUOgxptbF1DkmMucJ+kPpqAPYL74Dfv
JgVllUQuLRjbITw+oqKy830IS082UqXUoOtzIhsiIgb5Ut1YkXRDfXTJWS2ZIH2kx6K3ghIhLiuU
iHkPFvvy+m7+63rLtNFCGSzIOC3wQomF6rhuQdxB9g38UaPZRIKUe0h52O+yR9KiRtJqh5Q3LwI6
WQreIvAxJ9yCRGAI6gq8YVSJqHgr1AjE8LajcnhZ2UpCbi/RXGz3rMRn4ixr+6ElxGZc4RZxYxE8
rYXd3jjcaQZNo/yFnJNDInpzGN7CWg6SNnBXPF5t+arpcPdhezEPH7dRBrFPvUUJCxOwbJAt9Cw8
d8+1Ln1+Oy5mfX47Kcmr7ESpt/DIF29Tz90O0o5qsQ5CxFAdbjD4VCbSBNMqHnkLVPMX0r53g5c0
z3WF5hUfFWtzdIchjFK0wsjsCgYJXbIcbiWJ8o42PmnVcAcCmVOIjB+wfA/xoKS7Z4eX5DEORJjk
98VclB1eb1pTPhKdtyrCIDdxerQDqMG4tkhCQuCU1DlEW7TOKG89DXDrt8Y8K0zvWC7CsF0xJaOG
VghtdlWdFlfr7xmSbGsXMScZ6TWAQGFVCxKol8BXbAZ6YrZJiksDYjGNpB4jXvY4mcS/b2y4Z3eL
q9WTP+X88eYGZvwzEOtn1yCX3cwWy+nlj+ndw7fl/fT7/R1suzXIDA+z+6/LHM3z8O1q/fTi5zzJ
h9n61y+ru/sv368WP09Z9+zb/XK2+DKH/39Y/jwl+w/Xy4cv64ft83LgY92Tf657+MferGAF8ng3
s/m3q9tlbTxQk4n6fWNOfjmbYrz3/vp+glYfbq9/TNHKi2/uVtMtH/15enH3MLt+zUANkmdTUMGv
FsBOX1MG4sHZK8n/8NN0/Rvs+uXiy93jwxeg7RE+JVxbMOLiNYXzpc9eCf2HnyZ/gU2IpaKhEyRg
2zU9EW+mv8HLh+UtjENhnFdUQb/bwZgC9RwemnKw1+TdKwKPigFP2JtXhsFw08mn+Obth/fTi//6
GKcjv1/efrr47E4nr3e/saab15NXt4/X1z9NXwF1IAsuFz9VW1Nh3j39/anlFBZ/tlhgfvcUTgDC
7u+R/tMkl3dZ3d0+TNedyb3WNayPPZv4N9OrjMV08MeUeIdN72dw9O6nGZ5q7CdVbrrOYERd5+v6
zKjBXjG/7Raa5R0z1qdUpGu6FfDHfuhUfDfp6qAc+aHX/Gzy5/Ppn99eTL92cBZA8vxu0V8OJoHp
jjUtP6BWBpr+3i8GPf9ylvdzXmB0KQ/pFcTC2kLTr7P7S/xm87vr6xyjMlwwgx/3zJ2efvBHPq1V
J2rb9Ovj7H4x/T66IWAzTs6WNxiY8zD7+poJNr66rGwq6WhTDk07YWz65vT89MAXs1yVTcdPD2W/
/+Cc/8fp1cOym38uiTFCBdB7fuH8u+mbz+5TmB44Cyf0bHL+MJv/emwzYlm3s8mFBz6N9BzetwK2
+C9nX/I3cxfxQFvF4Ix9+RLchTt2GhQS8OXL2zP3Jh5pK2Ftoenp2/fvYoATMf4DKVdgrxfxPy+O
jA+KOsWmn9+/9R/CYRKkgGndZAY+cli2XC5Pa8ONbrr9ONorbsTfwcEvPly40+nRL3tC3nRN/216
c3X7uC62Y7cNn9bghL+ZTP4HUEsDBBQAAgAIAJtAKURNoKK5twAAAAMBAAAqABwAbWVkaWEvdmlk
ZW8tc2V0LXJhdGUtZnJvbS1wYXVzZS1zdGRlcnIudHh0VVQJAAOlyM5SpcjOUnV4CwABBPUBAAAE
FAAAAFXOQW7CMBSE4X1PMRdI5CRECemKJbtIiHZRdfHqDGDxsCPbEuX2pRQhuh9989emWhSmKswS
ph/MYmibsm56vPNrjMEypY+26+tuaEzzidXbqHJhXGeeYL67nVjbLqteKoOJohqsZE44H5wSgpl+
cn6PRB7hElJ2qnAecwz7eMVfoZTj78SG06zMLngcxE/KWGKbiMKKt9TxT9pcoYQcnt4g/n9Xkh31
8mi4fYeZUW74o+LeVr78AFBLAwQUAAIACACgQClEX1pmpUgCAAD5EgAAKwAcAHB5d2Vic29ja2V0
LndzLmxvZy0wOUphbjIwMTQtMDgwMTIyLWVyci50eHRVVAkAA6vIzlLSx85SdXgLAAEE9QEAAAQU
AAAA7ZRbb5swFIDf8yuO+tJEIxgSyIW3XdJt6tRNSdU+RJFl4NBYMZjZTjP26+dculIpmzZtyRMC
CRlfzmef42/e8/yg6/ldbwzeKPKCKPCd0A8WML9/Pb35ePN+AZTmjBeUuvcYz2SyQjPFr2vU5gMr
UoEqAt/1/unh5cBlqmTQhUSmCIHXdyBHrdkDwpVUMU9TLFrz47BDCzuZTj9Pj6HOUD1uESffEiwN
lwXwAkolE7s6Lx5A7bcCmZJ5BO3LKPIvHQgHYTB2wLNvp3WrWIIxS1bQzqUdqjDBwkDChADBtOlE
LYArLhAuyKzSBnPyiceKqYpcKZbjRqqVJl8qs5SFmz39IXeotOXRpOcOieAxKXcjtq06ultWFw4I
XiCEo55Tw6cHdmqWCllqIQA0iszNeMH18qm7ffg6kAhuwSlLU2Wnd85E3e/1d9QvqZ5pXxbTW3ui
+lfIzm5GDfxOirWtE/KOGUYm9zNi837NDbmVUmgySxQvjSYbjFfclBUxS67SkilTkVymtKxsj95R
E21sfCZkgTX0wWB/4JRadkPpT2gHfkO43f+5Dndgb8BRwkMRtM8GMg5qWX7G2GQ2uJuJ9SlY9rmr
15p3qLVtvGcIuh3oatxmWLQfOW7mG8UNUpllGk1Ub7yK11mGimr+HRedFiolrT7mE6UKaWt5AW+U
XKG9hLzE1jElBU7fD/+nkvzecGfJvZiG/UGjpEZJjZIaJf2VkkanVNKoUVKjpEZJjZL+WEmhMw7H
J1RSb9woqVFSo6RGSceV9ANQSwMEFAACAAgAoEApRPU1TTQKAQAAjwIAACsAHABweXdlYnNvY2tl
dC53cy5sb2ctMDlKYW4yMDE0LTA4MDEyMi1vdXQudHh0VVQJAAOryM5S0sfOUnV4CwABBPUBAAAE
FAAAALWQzW6CQBSF95PwDrMnVga1IgkLpbVAbSQdh78djCNQkaEwBfR9+p79XbaJjenZ3dxz8517
rM3GHaIrBJGCIO5yQbO8TKFbc8EpLxoJkCqt4y3TYceShtM9ExIweVkyKnJe6vB7LwHM6MBnCf70
DOaUskrokBYYT7zI8nNnfK9yMlNtmoxu6yx7MCTwqktAAsD67xSuY2+p3CBixmpKLN+e9Xi4dheH
fmz8dhO8S2R5kzddzcv0Y7wg7M8M7j6zRRtW9ak7Pe3ccEq0Nn45Lg9dapwFu7QYOwyWq5V8HXQj
nPRon81lzYt307VHjDO//QNNHO/SmCj2o2NOIj/w0U0t2sKMNE/5or0BUEsDBBQAAgAIAOlAKURn
zwjRfiYAACOkAAAMABwAcmVzdWx0cy5odG1sVVQJAAM2yc5SNsnOUnV4CwABBPUBAAAEFAAAAM19
a3cbyY3od/2KNp2kyYgPyTOTnYgSfRyNHWvXr2PJm+RqtDpNsij2qMnmdjf1yET/fQHU+9FN0uOc
c2eztlldhUKhUAAKhUIdP/vp4+nFPz69jubVIhvtHZfVY8ZGe+N8+hj9uhfBf4ukuEmXR9HBkH7O
8mXVmyWLNHs8it6y7I5V6STpRmWyLHslK9KZUa9M/8mOosPDVTXce9rjUEfRHy3IvYzNqqPo+9XD
0Cyt8pUohIbzQ9HEhPo9QnVbHPZ/YAtqs7J7GedVlS9gGP3vRIWqOFrmVbtfsHKdVWWvyO87UTUV
ze7nacV65SqZQF/L/L5IVk2tjmZpUVa9fNarHlcsDKNYJBmHMSUYdpuOaFSxh6pXFUDOGbQ4irL8
nhWTpGSiqai2SqbTdHkDI149KDpV8yO2WFWPXcSI/uXWPhD1RHnvno1v06q3hpmD2cvYpEJMl4xT
trfI/xn6BiD6E5gKBrOBfyfpkhWS3kDsOUtv5pXsrQ+DlSSZ5FleHEU3RfLo8UkJ9MlYwdsY9BVN
x8nk9qbI18tpT0Ah+vrV01mRLFg3sgsXN3JW0inQKfrx4ECynET3T7zIgXc5Taqkxx5WyXLKpiet
WZKVrHUloE3TcpUljwZlnld5no0TSY9VXqZVmsMKmqUPbMp7JF59IfsvePfqN7FAkqU30Ii+cZxm
WZ5UMIs9wIRl7syqBeTTqbgZJ+0XP/zQjfQfB/0/d0T9vJiygjNSmWfpNCpTWNaF+bVXJNN0XeoV
2ef06I3XsKyWm2bIIDsIA4fqh2rcPiaaTxSd02UG3NYbZ/nkdmhLqOg7aHggJZUmfMEyINydQGSy
LkrEbcpmCcyx4OZ1UQA321xa4HSZX8Oj5hRy21hVezilHkMkYxjlWhKIeKIn5BMWcMF4KNc2SU9g
guSmlvWoDlW5YdNwXU4+jmIJXa7YtFesl0vkK5YU2WNvwcoyuWHW6I6ItHxOnk8PTF1wL6ZxnGfT
jVOluPU7e6F5UqQBRhOXSFb4vha8IxzML0pCyB7EMGEtoI7L5JIEqvGFnq9wHsst5JOsCsRdrp1e
1DgC2kyuDEW3F1LacwgPvXKeTPN7/kH+//Mff/xxaMl30ieC63LQRylohv6L0hc3yHPDRjYVwqpB
3NQNO0vGSmyp+RUTi3M1T6dTtjRJtMpTUDJFj93B6itNzSQGoVSMCVsQSxgW30lEa7jVVUB1o5JC
EXtbgSTPev/M84XHuPXi/sBc1QeWUPzzn35v8+/hgTfzukjRTs4u8IH7BRW3Kq4nY/0wA7L/xcE2
gtpkSpDF0Q9QhxTQASgd/r/+f/zQaSCkthCNAfZmGXuAHg3DxCv10RpniaslFOPmME5QqYAmZ7zN
7BxGt1+CbAApmi5Aajbwg62Fwr1LJXlw8HtbSX6vTZOa7kaGAGtUMSE+5MBAxwH9iNsk5XEBL2Bx
UEdFUnJ1+VyoGFBrZbXdEpD29/eO0aN+i6H/IEeOdqQo+16batsaN5LD6jAdRfMX7gYH/u97NCD8
hqVnRiNbD0P7Izlh/yG1uJzoHizLclLkGe0Bjgdip8V3XFEKhuV6CTYDWNnQKRW2RqoWVJsU6aoa
7aWzqH2fLmF59RGzz6C6WdERclz+7k/Xi9Wr8gIEexvosHcH1ujNdVklyAiz9XKC0xPdZPk4yc6x
tN3Z4yNE8M9EVbkjwf9EUXRilJGlBDwxv0ASHUWXV13rG1Dw9vFTUpY13+dJ+baqVuIrmdVehTNk
zDdJmq1BX9dVwnE21lmkZQnz9pkb9T4mhfzw65P9oZzn62x6kd/cZIxQgTpVsXbAz6BvAF8zTGKg
v6XV/LyC1VUEKqQLlq+rmuaaKyxSqjpPe/rPglXrYqmnGvhYzfarn366/vz6/Mu7i/N2ulytKznl
FhvIjQ9MNFUSvCqYT7JhVBYT2Aits+xa1O//UuZLYlin6khjALoprV4/wK6xhJ9tpIvEARkUmJo9
QL9YDvq8rM6w4OOsHfdjsVUR47ukKuV6XFYorVCzUONON3K+cJj70WHnyqYGfl+FcRGdhLC9PHDA
LJJqMmflOe2O86K9zKdgW5bip7mo8EufC9X3dqPOnmZD6rm+altBhkVtQQZ9uBVYv54J0xzaKsEt
z8fZxeOK1YwLNCOILvoI80bweasP8E9TeiCaG0jVcRakQnno8/dyzYWoRrZgC5CzBFMi56DT51VO
AeUpr2dDmOXF62Qyp0/v0rLqgmBZTjOmBvuqABOnvyryKkd3TV806IM2zgKtXPxwlZzR3qMNi0cC
HQyiN2d/f//6KFqXLErW0zSPquSmRHSiV19+OvvIxcdLtUrAvJOy4kwsGIDXT+Vaeae/y1WDzZbQ
8VCxjAfk2UnUOzRnDNugZC2SidsDmAETwZ79vLiJO7z10Gq7Khgof2gqgbyM3IaDfr8/iKOjKI51
W8QTWonm+9SzXs4e3vuROeBB3M/Y8qaai4E/RQxUgTMqlCw/gdIyqWdJmx50XlWPknqaZlY7IpjF
s5sBmyDFQN3xmSBQbEnuVxMJ3PGBN217HfRXS5wOjhtSnG92icZgHMaG0JBgYOrokx4KQI32ofQl
uh+T6qR6qGJL+sbH0/QumkDP5Ym7iR4Z32hLNophGDRWmKrjAXwdHWOR7B9KuTKJ+WRjAaoRp86I
N43tVVWhXga6kWZuc55xpPi2yLb4BpLsYDQnWqLHYzSqeZVkCV9BDVNvETkFeZeEvKKfYl0aBzRv
wJ29JtWe0Ca5DaIQ9r6WTuROpHfp8hYmXHzXy1h/7ROKakZ935MxwTZMDeJ/16x4VOI57oeAGBxk
tMRvp9wdjMwX73u92eNULQV74ypVDcCsz5JVyeqbmGTcVFvQsg5ZxHVoUBtEuLYTP+f3KIpMPajh
dEGeobct7niEM3zHcsVzgrnQNZXWK+AnHAT5mLkt5tfvctvWIUGobYGV01IWqkUBu4aSVa8qEDcw
r6wdW77t2GrDMefQiecvxHK7AHu1aDtYJKsV7B7fXrx/JzQ7Hih5BlC6LFlRvZr+kkyAqFhb06Cm
QjseMxBF7PUS8SOoAa4RjWFVYxsUYFjTRrGZFY1VV2ya+MJUrbzeBblnT4jE2urYireo6TZcpIEt
UUsg+/68fnFw+J3g4Vou5/UbWdHQktsyI26EDI3GJa5prmnrg93zAU/zyRplWH9SMOyDS7S2QVFe
1ZBnMEiTFEMT6CnLsiaoUwMq1u2DuDiHYYl5skj+Csw4aiFsiKHWubx/pGtZ21L6k2GB3JrcgfaP
qaYQAq1i6X0sojbtfqD8YAh/HZvdSVyidH/fNc8yLsGN2pfplW2F8W+OHROS2KT3wGB0dvch5HHW
h4HdM36y9DF1dONLG64g447BOk/2YraAWqYzwZwDAKmJ8D9T9PB57opWnaFiQ2FCCfbiTcRmgLfp
SH+rXpJOLVwmotvQEuE11LLYSXrW1zPEEszGf6dlOs7YK8sUMRZAgxBxjzERzdZV1LfMGlNfPavp
z2SSScaS4gydy3dJ1rY9CRY3yDrGpG9RG3eVa+mS92WM4bHaomcD7cpw6LR3Rgk0qBqyCakbvTg4
OFAmu6Udy8flpI0/u1FS3JRyWgHUBff+tGXdNiAa4Q9kv+yxjQQQjYbRUxd9ww7z3PFJoi1QO19V
18rCNblH+z5PIqtS9K9/KQbSs58vs8fzeX7/RbmfpIet3fFcCwpWSKTiUuIxExJSJw6p8G1hxeHh
v1bKr7S8mTsNJLyQascR1RjJdWNrAF8DybdfoLZlwoS3CyipQ4QJaZ1uBFrG2gsYegf0EfybKyAt
cYmdfXuqG10aQEAdXdWY6///DCK0gdg4DO4W/lIydG3YLCdm+lnQq9rnDoxr8ulcT1Nae8+yfEL9
gsA5536Ajva2zNKMHQ0GfFt/YKNhuEP+kpTsU1LNLUqORaFe1SHEXbuiYEjzHIkZHoSsoOWm7AiN
tXlVrQBh10sUqLx/ovt6GbXjARA9Lyra+8sPHfRdDMagv2BfUAMkhs7Wy9uB5QkyPUAhPLecH9jG
D2z3hyaqtZ2HFkjPkCc5Pk6EC4EOochuQxuGOz2Ck4jeDyjhXoTY+HU8SEbHJZqwHCKFeOTLSZZO
bvEECX+3q3ladlqjCDYHf/rz4fEA67v+B1EV/zBZhjPIG4Rq2amI34fkLr1JQGBRYAmWtK09Epbq
bXHXgNUJEwsPRfjC/gtJvTDxjNHa4Tdq2AFfiiBBbWMSsKN9QRtJIkFoPZEhL676+okMWRjnekZ/
i4i4snb6jS2CwQAaFLrACBbNu+dismsKxpCdSuaInHlOS6HuXgul1ZbaC4yKSbVOMusMppTVLEsf
RQevTO6l8/86+xS7YkOCJT85F8T0u08HKe04Mr2f2IADlNX5r2Dl0B7JaFy3R7L7+e8kWzPVDzW0
tkuGW0sPQ4lhA4bwr0Z/+IPVFv+raRy/eXX2TvplQeJ77SITPlH44vXfL2LoInI/nL1/9dfX+7Wf
6cgAtlYdrw9rZo2FXXOEqKs7p0JFPmFl+VctPd/ARgMZ8+P4F6hvMhPJLH6exz/27VMI4wNsNa5L
Oh7t1Bnj9ilqf7Uu52a/YsNlNzJPmD2Zb30EPUxHh2rOUI1prbtnM5M9Kl42tD00xjLSNVUpdBd/
enV+HmtqhBXSumTlNTMk2zUaBJpIBnBrhrdY9oYvV44KOOj92fn52Ye/Wstbn1ItklsGMqpgUTVP
KtxNY/CgijIjUparFP4EnRaB6O2JdV09VBFijovZhMub3MO8RqJneRjfr2EE+yw/wAcNe0U9gxf5
LVuW9XKHO/bKkk2R52h/9xE2EoKoZ8vPrCq02OLQLg+uiITO6hQfD/lHWsCxK1Z1HdVMsyIxijhl
Q85p1xiXFJ0kbBe2TMBqniK4jcOwLEAbtB3CsRuxHcaiUSA+ahE8k6XuUbFVgxOMxr39sMVyFisD
VCb+uqYwe1dF2EAD0RYNo37aYfynn1+dv43rSa0jaX4TmS/O3r/++OWioSMz3GTrrpRwc/jDiHwJ
wPIPvKTPxbQ5pGexaXcc9FKp1nhitwmCqhg37h85NuGto2PxpML7xpt4zlcK+T4xELRqcAX4UHmu
WCXExVAddvXbgNbn088bOCYNlvXxYFVg0uSRRRtSCmw8SnYdtFug4mD/W5FRRqSDTsDFhoh81r5w
5ziY/KfVIrMc5qJO1+wIj7u7dIJKvxGPPdsn7bTUCg7b8V+bW03T2Uy2wX9bR6thOYc2Eg9NuF5h
LI02Amhg+zUj4014h1gRe+Rl0Q4d32PdLXu8t/q6t3oR5qV/OEf8IJQ6uuMNQdKNzN2WsF4i97gu
jj2DRqtQrkQ64TgXhK4CvdC/60d+GfZrB7R0ncfYDVhUmyhn2Qc1E+rGmk96IM9OQqMQZ7vOjDR5
Fj55nN8Dw4pitPpyq6lI0MUjuFkkK5h7s3DPdg+GRDFWyAbh8lsJdVJLqG9BrDoasYItJ8wl0JM3
Mptt/CjT7XC2ccN1VqplJ0/0HExCpN4GuCWILfk43BnWJn4wjBtzmeL47O0UjfEay69XrJio84td
KCbRIOhtnFb6Fyif33fijq9yakWM3jg9E/4Be3N2LTYu14S1cfKwE7XgL1HVFakAx4loBNs9XcJm
Hc/+x3lSTL98fge7dX5OpHEr3T07BjICoVut+iNqo7Uylfb3U+uMTULaN+cMjSDhBrBkYopU86FG
vciJsjPBtrotyxSWDjfhgjZ2pT2py5LVqlzlVX+SLwZTSZdyoGh1rQppJT2HpXkP9uPn9bI8QVH+
B9pnnCCfwErPp+zL57PTfLHKlxhxIJFzTV/clHzO720/ieUvEDrsmDtPf6NTQLBULGPbENt22FPw
0ljKFIpJdlcrDnppfou28pGT6kQ0JfJKV7uoMzquipHU67LwuJpantqgF9lU2Nw1iq0MR47hSz0J
RYObAIZ+/05AToNbqFZgkJsgoKM8k8K83uAFYAisXOtXD6/jbeFCyAjHoY/N1orhPrkzFQMPZjYl
6JaCTsARFLWgbC99XY9CWBIT8M7X2DISSQrY1vJ4c5c4T1/Vo9gr2H1t6dYa/FzuD4w984SHTe1o
cisnlxkjQqAcV5eU3SNTdm/TJ4wOFiIrB7FjeDlOso4rEXBxS7FAHbkrfldZig4kl8Wielkm+xZM
+1t7r++gge/56cLLoLtZCXYLLRP4cWKcSDVbDpe6hyuuLUZz0Hl58UiHk8EeBiDH4Q9UbiP7ONU3
W/i9CjpeFJcpuhSwUhWM8X/5W3v8JuJa6J8wfWGCk/o2XLxSA2iw5JuXA1C2zy17jNIl9eNuH5fs
XikSAeJl1NZh4MTN0B6PsuEvW0pI81cCv4QaV6FTLE10UgGi5tCzjQy9hdFTErehE9dHdK1xavrB
eME5UUh0dTfB4CdQYTr4hvp0j0iprF/mC6bCoLgAxVgoGVHBz2f0uVT0FAyiQyQz4MfTfL2stKdR
3u9pchGK43m6KAqN8QxbRWVRiTv1ZkyVdRROtWlXcecee2Inp7JdaXPDdrFKcqo1FOj+a0OwvFCl
r4MemwGZNHrHM2iDVDG2xC0dd99yg4DnLJmywo3NrsRZnhX0ZtFet5MToB2+xAIEwphazpHO1FqB
ELbJVRMLIcBaUQ+B4ck9wltC8y1sMgTGXtjA/JBkPv9KN2XaZjyDw60yiKFzFClh/rxlhIn0ElCM
KmZCUlkESlAcCVTgIhx7HgaxlqPkSHX51uZMXTCQC7ng944dzytdxiE1RsGlnlCgPQUHSEc//ES4
R0UxXWjSoRzulgVvUPNLQ7w9Xhoyr+XUk530IjVTeksfeCbTaVTNmT60mvEFiZFs6wVpKyQb1aHz
bpyQEhfzLgrfuJbFsceDADq3K+XoPdcr4IwDALtnPsKeQb3O6YeLKv8w4LU9xeZs6hsjzm0dhLUD
hx71Z/4O9iQ2bPn3dUaSBdfa89ZsejeyWcOW2OqM9qfGftD82DCXwkrTYUbQTXNMVIiAyuh13ctG
v/bQghQzNh6hS9G4BeFQ5BaE/3L1x7bsa3YdMFU3AKVDUh5noIj569cOiwPL8hs5MiqIoMD1Ru5C
q2SxypiiFf0KOLvdgYlD2cahaamEdgJYjJNsPWUyfYDYfAzIfSlv8c9ZQX3dM/EZ2mF8BoVnyEoo
CyQQLgNqZst2MYQoYDlMG3j237PdcPvy9hzcCWJWIbGvLmg2nlBVOYV1qbvejr5274eXoGeZfTvc
dQsW6aLNb/66uQeoEATgKksmrD34n8ufy58fkoOr/X+pf/1ugMGWIkYcWOM/1yB5E7prSxkHaVrR
QxktkiVsusnopUwgFzjoc9DRZLf++gTUM4r619DwHiYBBiSckuXdTUSJSE5aPCML5SISmU7w363R
8SrPHm8wQAxzDYH8PegeRIf4xw/dw4OWbA6COzt6PplMKFXE3Q1NndU5Jnj5Fr0fUveH2P8u3aPp
wqanMqjyRFuJ0uJJEDFnvqiMrBAyQXBeeXXTCO6oClSd5s3qm+9fuIFyKu+/WTjAPuutZSuSpQrN
eWnTTSBdy7zjo0tdj5kJlfaRfjUdNPoqK+Dr42d2B7Y9xZ/p5vwqH7J/X+wiynZciJquoKWjABec
H8wYhC5yQNTC9nY5tZDA6AuDCR6fGSDsLU/4w3Bv65H4c/bVBHhyLsGFx2x36PKnPTq9fUIJSzff
uE3s7u3F55rblpe80ZVNoqfAsgQY4cWAt/0kpzgbRQJiLosbVonroX95PKNZ5hfkhMY17m0SaPK3
C7mvAYaGMlfbTLkmT/kO4USCUk47vZjMO6Z8dNt1xnfchhtU7LkUbZJuNHYiODHuD2YeVmeVR+V6
hVctoow9pJP8pkhW83RCWJPaWMJ02bHaFzyYqY4fsEM9ZsfjMd7UeFzT2ApA5UqJ48j+F92sdxj2
XEbjR77rQM3X92SYmAV0UXM0Tjg+wUhxvrMnz1nTSA+c1SgGubnt2G9Lhxm67YkG5Is9saIOhqFc
ORrIsYHMS3QKqwR5jl2GfRdBIathAsmOxQy+jBCUmeklcGs32M7E4anTsAUlVjZ3oNb+XSwI81ou
NoBNqC+trBVoePGw5MN6MbZ1qFqSO8iKGilwafYhdseeLLNkgIM5d7CeopvGRJ3V4QubjaQAXLVW
1/Idr5ZlKi0IoheM79wJP6rQaJVsYdVYHdgn4dqICOmpehtCyl1pOSpAL6MGC/MoqrV9h46y1Okl
TqIGo9FUTAofc5RBzRZUZ0R7HNcnjHH+f3m+0Ca7UYQBRPcflz+xjK7ScG+l+f0aU1a+SZBP4fuf
REbAW76b+xsa1VD8I6b1NcrfkoWN9fED/0LwpnY7C8wfo5p+hz4A1YHdYQMIf1AULnVquOEVV66L
rO76c12+CMNbrx3eViYKSv3pZN60ogrSiuwN6LxPwQ3twc+99uX//Ny7+mPnZwziGej4QSOnF+Ye
2govqmrjREWx+dkUkA5MFMiYmKRNmHa80ZpNCZi7PFOX4FsgbbexsQ9nM41DvXKJwCOL2yZoEVIM
RLcKcc/Xv5dc6rMubMdWD7HfZK74MsCtdY147lkckZN9Ng7SwKQzDwhrmgm7sTkl7qV5khjWKuHT
ElwilkqpRAIbO+2N0C36WufQCVmqQslr7AQ5hP1P6WzWnEEluUSX0O9OWrhMWlde0ptvs4JDKXxd
bpPHFW65lRBCJNDyxmIMxAjJ1OMhz58LyPW0q3Npr2ZTyPzQOIELsdEG6WmcWdvxnp1vCdmIZ+z4
sUkho9Dmn7B5+HVo2ZAxNJFyy0gLVXGZlw1m4qxFq6NpkWDMoMjx4n0yV6CzsN1bMTJg5jR8/Nrm
qfuG/hL5C2ZILv3mwDz0CTgKDEwY2mcA5MhSEmeYHRpzDDoQhTgdRC+inj1oEYD7d1Dfvqjt1IrN
Kl+FuhEiuL6ff7j9cPGsOwpR/hWFIOlEKzuEBuyS+RvjBry+fWbgdv77fF2yj+sqKJfpMlyfEoez
6QVJYrpBZxf1zWSOZ28+v3r/OmDny4PNs5nbPkrLiGeZuWfxHYsWiNKUjgjyGZ1sKso0C2PX5xiU
tYYYNPLUaGzJh2Wur3qyvYeqNt0iTTdrBhayusi207EzGMkcPM1tjGiuOiVZM+Sa2fgmhHSylJmK
XmFmqkCVT80EFb3Ue3rRBnZGtaP0ARghgS4emOLEKQuKMdcDHeCOGg7ZcOOX4/1OZFkxdszN4jAs
3oiqE6r8d5BNNmwSmx0QW04xSc16qP8wof7DhwpCMgCUy0iDKZ9pmjikrNkruj6wRvbnia9C2ao8
P1WT/dlm7k2PLub374R8WkGn1dbAay6wNqhqtf6S6fQ1vpWBHgeGcGOiBjJebMt2RxrpDJ2bYAER
60GBPtCQ+JmdGXOkTu2sQCRYY8xSI3Jq7GriLSMslJmKpUvPD2y6AR0hAq6wxye3T47zf7FHGqIl
i++MVLakx7Cgv2BVAtVRKPCCcp7OKqtkUhUZFNTIzPI+hW111OaZkvqzIl+czpPiFPe0or34aQkU
fEAtitP4yGIzezDX/HmGi/wNvstGMV0OW46B3W6HDtBftgP6AXbeW8O83Q7mJ0yTBAyzNdxsO7jv
kh3Gz5ph8rQ7p5rrtgI6aQYqs3btCrZqBsvvqO8KdLYj0Dd8YTXAfvJXms+cIVMWF5rbjlXmgA4M
Y6SmB2f89ahINglhIjOUerGahqnQjGlm7PboHti3Q1yuxe1I6EtM+xbAtlJEBf40j3tD5/vflBKm
BPm3UsMVKd+GGN+GLQywwquzMzsLPxxVuWxG+moDCq/N/OweIqKj5hG0O1tmc/cR8cR1CIlAJu1t
xtPuhMnvC/NQp8FU77+hW08uhzoNpJb7ll0KVVDHcZXmyE0T3pimT8Lp8lsU+sUA50hNmHxxR0WV
iYDDC37ALu1PHuO+jKvodpnfR8nysZqDNRYlY9woEBQ0zqKzSlTFvGHjZJw9RhOKQsdIwzzSFCgi
hApmMMHp74XHYUWdwG/K0mxF3Du0E05fVddbFSohY9zhx3t4PjK0r0oa4J3rzRymE0OjaNh0YUDa
1ZcSyytA87Dm1ZJQVzLWJ9DbFIZXsa06tbbKdgN+bPvGaBaUnX61Ol42MEAij/OHprN26/U1y73g
w3Gd50aNHQ+qxKtlXut+iks0Dr8lF29oax0/2G/4bmpqnjjHx/MXIykviNLHAyg5XhX89TiLYi2Z
F/L1NJUxrlDRjFOvd26HUDGv93yDmTS8M842U8SD37JHnsTT4lx5kccoUpdNVAgAWyWF2CXXIgV7
7N6S3ePTsoATbBnZ5Jbfhv95SUH/Uex1JcZqTYqFyS95umyr7gVKW9HF9KQJx7h4ytPtQ5jDgCih
iS95xkH7zjKjXMFJdsgulrpqFB1HBzK7Gi8YnUSmpe6l1Ba5JrXD00JrS4NJ+QT1J8OFqwsDElJ8
VRfUNnpD1NBEg69GOIwXKQkXKRkrSZEb9db6BmPFcHbuYjSQWNXtGpzVRX7/Wdz+UdWbnahgQshG
aYmXXLmTE8RTXkzLqJ32WV+9jIo2wV3K7jE0EfMH53hv4ReMa79PlmQx4HUszC6Jx0bwE88m5Nvc
nEbq8dF+4ARPknFFdzk4Wn35mrNNq/qbmKfzZNlgstncUuvRNxhAu29DzB04vsnXdjdjNkHtwt+R
pacvWGWSRvFlf6uk+HjCFGZdbSjq9D9fuQ22QlNhHvLFau0ZLS7+3vMndSJrq3XOpZYMyjWJbzhh
Gty4oKJApZZl3I2anKKGI1df/Wiiv73Rq1dh+rVYEZioFdnQuX+N+OiuZPoFYmTV30d6qvtvRUrR
k8mdCrFRb504eNa8QhUezTbDIMUXd5wo+kZW1cdWsc528Kt+B5teuo6e5CuDxnjca+Kh/dNGIdDW
EXom+aR/3iLpNaYQwMM3J19uT7yRHrsNcA7qpIx8eb4x5aV40g6fcTWDBDBkRGBYnwZTdLBVHkxe
VzeyLoVib5f8A1jRV6qWZlV9PkPRqueAPsUHsOqsYou2R8Ru9J/nHz/0+R2pdPbYxi7EjtWqTO+n
1FEQ36tFIWB2eVPXpSmlsaH/WhYQnLeyZFDNgaSYARoGWIslaxNQdz6mqC9pcG7iUZzSBvM2nTq5
aMR7v1bcORYpw/eEzxNMkDkfoaH5a978vn1ExXPBLD34vpZMalzK5yjDWuaI5suJEFd+3gcu33j6
vC8l+yDs+s2Sbcsdb7AjnqdvNxlqv6UVpqZbx3ubgXfftLnhXqaezABor7RNmQfxmNcoDPpC+CeT
K7eYcNqGUhKK5yIZEg+k70Q6PcWlkxPsqhN5UYH0zsIdK6qLXNLqrUhnophHJIhxM2SKjDN1+Vib
kic+dewHCf5No00XN5dlMdluuFZsYKfuzdstkK0LWDT6/pAv3e41HXekjZvMubkbnRAmGZd5Blai
/e5G4yyLZ+PsluqZjdD8Pu32cBusvc92bIv1CLVAhj9+qZ7upazmf6U8AIFXtkPhNdGReAvbfkxp
G8Z4I6o7KOnbG85b3Shp1gUGytVjTR8w6JqjRVGTtsbRAfB2LOnv4k4wnKeOjqEsAyZsHU36u7gT
utMlH5QO0Lnu/VbTKVx7cbMO4X4OfCbdQ8GJcC/OU4rBTnNy683r8GumWUUZ0yRuFVi81bBtjEJZ
tr0ssvTkU02rpnyxT4Ec88IaeQ+GhaU/ydJo0JumRSLh478tD27bLcEnr2jnLdop35xZGrIjKNLn
p/zeifd8Vhd199zGjweCikC2lGcykTU48/qu3uYR255qD/1NEU1TGAq+0GsPztj+6gxPxqsBdBlK
ZhWiSyldsHwtgph5aTz3Ymxev1nSpbt85m/YKJrccJLxhKxv7UD/7ZLiGAczJhjMkGHmeRXXEk2h
+EyWG8lobGlYP4D9fW8bMZc3AHleJfvlTi+5kpFBSCSUOvHzKQlaGjWMVKtW8iR+f8hIsCRyKNFZ
BLZJp+INdJmmqLDyMcVW3iL3C0FB2St9Gz2OUmskfte34sHYbjMeTm81/s3JGQ0q4WBE8kcr61Jd
OqYAobHuDmlRRMasQD4Ue2gpzy9DD7nY2WXqxiHwLGsRFYlVrHxSMmuKzFVmL41AqpWnPcuKAjEC
xP+UGJspM+lg8NmpQIYxzFm9YVZTfLq1WK+stSdTwrSOV2JJxEDS1Qqda+vlEs13lhTZI4jDskSj
dYRo4ZE3e0hxculr/3iwGrXqEDAeeHFlmZkQibKs1bUENcAPyuj5JSqnZ9tDiZHkzAnYvtCtf8ql
q5eV0R3WwPQBsCwHFJE+4Plv6YGHbuTnUtipf/tdpzAG82QKtopOxiYzGLVVeMGS3XcQF2vT1fDG
hfUYzo7TYra1Jwa/0AUKRCWY2qkeIeeds11xspt3PfLx7F2I22ptpPP6Wqax3ocyJu0NfhDJGtuS
ceYsmuFpQARrKgIzQTxNFdHTivgQFeITkFRfm8QXLKTNrzvtSOAACEVkxZdVTpSLwJQWY6Tc/VZG
tNpBme/SmRa7Tlu1GmGG+2mUTFAoYsIyI+cjL7wWac1aI/s31xErS3Vy9SmBAjOAGWTDpDIN0vqp
IFr2Sa3JuYBNQ08EJ8igG7FtmCtdIXSEItC2KRlMcm2dxsE3ZylFJh7rhLMyaJNWnTUFE0+0D1z7
7+vzG1qbgp3OhLryhrgfWSDDBxpwdNLP20jVeyB9y80714k3dmw9pePu7Wv7Dtl/jZ1vT17HsboD
ZZ9835J/ABXwSdNZrnQi+4cb3Bt1PCgnRbqqRnvHdIc7X2Z5ApawbVW1RtqVi/sFmShTrEXtbRIV
VT0yxfM8GyeFTCfbssOY3Bai0jKvWGv0pWQk+dNu9Es3uiW5n2EibDzFlzGFsOmD/02whMeWUjUZ
8dmlXzMSq1lyw+WD7lJKqV+Su4RT4uguT6cwZJ3utubt9NZIdsdT3+4GtPY189ZIftoJMFDa3MG7
Dxxbfo3WSFS1ocsJM3f2ataMLb0xZdSOGHl0zE+WEIAvSloR5jWEUeNxwjh/ALDi9EgezkAPzUfN
rRFlodKw9Y6MI7ABKWsBbo9P6MSmNRIHKRxYAwLcK3HSQkaWMWNRugRlAeZUPoso2yIxs4j9YjJk
i9s/LYusRuDZrgOwzrb4wjLwUZ2iUDkeUJcGY+g1I/65p3jFVMmtkfo8oMyZe/8HUEsDBAoAAAAA
AOhAKUQAAAAAAAAAAAAAAAAIABwAcmV0cmllcy9VVAkAAzPJzlI2yc5SdXgLAAEE9QEAAAQUAAAA
UEsDBBQAAgAIAOlAKUQzYZ5eNcYFACtSIgAKABwAc3RhdHMuanNvblVUCQADNcnOUjXJzlJ1eAsA
AQT1AQAABBQAAACs/WmTK0mWHgb/FRq/iijzfdG3YYsUKSPFsZl+tZhs7BoSiMxEFxLIxnKXovG/
v75EwD0Cfh6PrKGovn27psLhy1mfs/33f/tjeNne94fzv/1f/81//7fpby/319fhcj3fL7th83nc
/nrZ7n6/bG/Db++3j2P69y7D9X68XcPf/z/x7/6NZZ79u3+jrRP+3/0bLln8Q/3L//h3/+bfvm0P
p83L9nrYkd/y+NH4rXbhPz59+WP7fbi+bz+Hy+b8Pexm+/F5HDbiJ72OVmWd+FeT1jmdb8Pm7RL3
cT6l09ArSP1YQcnwn3IG8E05uefhP/mb53u83raXG7hA/lhGhM0LnZZ5Ofz9vt2HCzztP7fXK70L
5uY712UXn9vL9mOzO59Ow+62Sf8ovuX18HbaHsGGqlcx8WWIc32Erw6b3fs2rH+kd8hc2aEP18yZ
TQuer7vD8bi9nS89MpG23FBYSyAyUYhMyiObsKTJB/uM+79shnDfx8/zj/DX6224DGd6HVXILW5N
5nX2v07bj8Puujt/fIYvrv1ziXIxMj4fr1/+eP5xfR+Or/TnXJaXD++kqnc6nffD9DKby/04gOfx
pjx3+AdaVrt4PRzDXaTVOmfhZRUZrkdmFgy09/18vN/CjjYfYVfpD7BIeWgX/uryiT4OPw+nN0Ae
5Tlc2IXzDe6/HT7wGs3tp7scr/FjuLz1aYN5NWceu2TH4efn+TScboft8Z8Cyf71/H9tj/fhH25/
PXwMgMuLrFE8cvrT/q6fx8MtbA5sTQNB8zbc/uMl8MBw2v36p+Ea9nhF2ykiIkrO8br2Q5CxkVgA
yVfXE48klrJlcxru8BROlJ8WLP6h5nQPLqDwW/qc5V0fgoA+BXlWvQw4gJ6vkXn2/rnJVDrSx0Zz
IIZkpTFl/CNf39+237fX3eXweSs8/MdwOW8Op8/7rS9ouaw0SdimMIu9JQ7sCTdd7leFRdQTAV/v
H5GX/nY/7SJfAyKpriqwgrCt7cCLKudxUXmIpd64Hk6A1lT53AZCsbVg22yPx45eLbJIRbrhyx+/
XQ7b09sRbaA8tFFR5ywF9KiZz5c95NtK/YV/IGRbH4MFypOa8FejlwsAbpMtct8Pu7j/tMJmv71t
u9qhyAtjHjfx4LzDKSpwJDaKeBbyIbq2wYz5dY26++du+ITEyByvBHyU8KOh9JBZm+vufdjfj1BN
CNnSlY9zhI+H7QV8blsc8WxZHc/nz022I96H0/XwHTyus3Omf+bX4bZOxUhsjWB24ZXYCDtSvv76
/fD23jNmeEsxjN9/Dtvf4btw3bLIqkvIL/MVhctn7D+eJ9uKa+whVRkU4R9IST3LX+6X7/3dVBan
jMT7JAm3P27n8+0dbIjNfC3zJM929+vt/AG0S9GexsV/UL9QsLZ24Me5mgtT1riNv26DgXXr3oRo
3Wvh4o/tz/Q/ABNWlMYfPJzVokg6aX/+cdr0rE5VRFpk69EpqZ8kXMwFaQfRus/LsA1e1cfwkG2v
r7eg5/7AeykyQNvH20YZvdsEfy/9m/89Okzpv4V6Odw2Sv3+/kdzyaj13SgvowqLFpfLFJc/FSJ8
uglfJJcLrMEeayR/K1xRsuc/ZfrXg//z+8vntbcT6x+r2PAPrM2rbLe79K9/f7ls1q7kykqBPW2Q
Emmp0XXc7nb36B+v0gSq8t1clJjPdBiY4rQfXrfhu02PJtlcemb5FZ+uJ2d0+dLph/PzzA/H4ADd
wAbE3NRihGZao2lNy814XmoFcKBa9npjU+Ga92CZSjlErS1Hli8AArjecpgoQEelSGNl/3yDYJnz
LQu90pIdJVse20Smykz5MewP2+E4fATfJe0s7wk7YlK2xNf2HlTA9nbYbT7vx+MGL8EWRll3N5s3
BPKIlR44ZgjmZeuKK7mMqYVL37LRnkAiIBmaHmJGQr5HBGG4/fvR1Q13DB7bPW0kLnQYolgIFxoU
Vvpud71meZrwuN35eP845f9D+uvmx2F/e99sPz+Ph+G6uZ03jJn4qw0RKbUuIjIp/GA2jNun1lL0
WqasFaUaH40oei1Nr2WrtXRa8Hmt0/AWaPf7EFbi5EpGVCf0K07I6RMaXq1l04KdEzr6hL46IY9/
iM5akl5Ll7WixONaddYS9FqqWiv9oTv3Re/LsC/ePXjHEUXJ+4prPayetFbgt9v2cIo4w8vxvPsd
31dFEzbe14gVzPYV9ETkuu1bh76qfUUnYEGpeTOv50sQs7e4u7jR4ecNn7Wis6jweXSP4qKvx+Hn
y/ln+mj8++YzqKHN34Ixf3j9Ra0aYQRbwQKznU4Lxf+GC1hXLaASZ84WSDsJ4hbvgleLyOdFtsfD
26m7itXVKhX3LM4i6AWK2E9Kn+v5ZbxdzvdgYRLyLi1RGT4zipyfJEWD8Fnqdfj42q2tSHor1XXY
RNVqtkSwVs73G16ielwbH9e23iUo4yH61vhANaFVimC+VFZp+JFUtVDSAuaZ4B7rAJqrYpYqXTOb
rXO+7A/B/8o3DVdyNdmoRDvoaOCOJD7aSMCa3kl1yVFbcu1bC4AHry4lCuol+e4PlyEhvvgctgK3
RUK4W9sAXFTJAxMvwhCMSJNJ5Tc0qf+xBHjX6jlMWoe1GQgsUd1ENKvCpT4Ta18a+Jow3Mg82Tv8
eUtfxL8EP2Z//gEvtoKRI9jGxb9Mqzw+ttTHroo/pY/l88c0aVZxlwgTcvX8saN/mc8/bvyypz8W
3V+mGaIKjHLW/mXwbBUNRiq2zx/TBOxr8R3+458/NvTHvvfLnNEXJucfu0xrLylEcY0ebmSe0z4j
SpGM8XGS+aIqc7QQT15zc9nuD/drYIRfxwEaabI23OP2Gqv8OARD7fZ+GYbN9wiuXqFZJSunolDH
fMWZZWvJpUS1OfZgrrzS+XVz+Ahm45W271j/glY6cJy3NjJfanc8fMKLEbJ51Y/X31yGz2F721yD
DBuCINvvk519/kmtqHz7qh8rfvu8nIOBfQsn/PZ2CWsPl2+34PZ/69wck/Ob6z0hODQzffpa6edw
17m/YPtvd+8RItkEfyBYGtfd5XycEMf2DVZ+GEt3yPoES5+Wl9MmmQ5YkvbKpWouUgkF2ndWX2U+
eileuc6j0CpL3c6fm+PwepvWfMgFsDXR39p0OfQqspBmVNusR5n0NXMkHsjz0eSp+Px8GpyPluqy
LWkKS2ch8S0JiW959W9ARmhWUbgqz1gWDC70+fJtFDd4Kd4UC4UB01Lj/e/j/ad/HP56OCV3ZgQw
aW7UrcPnVV+G90P4iY7kUm6FUrx/RO0R/9cBv4XpS/3r+/kSReoei37flQun8y1c0/twOdyGzmKu
u9iMxRnNAov7VrRao29JqPki8lle0WdRij5L5MHL4e39S0JG9oVMwoaCjhj2HdBJ6LkE9D1hQ++L
+a+9GS22RFtsFSa8Hv4Y6sUSNkaznP8zUhBYpWyupE3jpIfTIaaD5eXwC9ivGSKc3hi3WLCOwmtc
G1pdXzRpwG0xu0LCzMUVMLz1XNKb3r5ow5uLLy7l6aXmHC56L0gb4WKhGnmb8q+fMfvrsr0dzvS9
s67MAop+8f4WKHrwWl/1TuggB5ct4UKYDKP0w4p+oRf0KqEAzuq7NJB9zB/nVcu5PtfsDzEYGMV8
jjNAKdOy2k/nUySmbHBEZCpHJ9sU4bFM/vZ5vh4iyPctedHfXs/3y7d8UPoNxBfpgyZY5jp2W2Ic
IKeUd3NNOEZN8xGC8XMPEj2DF+lvGAxR7dDE+KUAX+oGGJsqSi6Hffoi/mUTDKgP0kqIuRNuBBFT
KDZDmXkL6fMcUiIpMC+gqwXiTqxfLkDdZ/5ele9jEg831ffT/jX9uas+j2GVsehi9jnYval2H/8Y
85D2h2vMuNikZeAColqApfBeawFwflkWyC85QmKn7ceQ5FSmpuvu/Jnxq5/P8fy0kq/OkvH1vJXr
r9Nt+zOQk6A+9Uw0NhGzEi7D6+FnomHyV+XyV/nsV7mlP63ergaw98PuuL1ExCfePPX1GBmpvp7/
sJD0ces7r2Jx03GDgiH3zBe/qifs9PJxOAW76e0X2rVnqn3Tj+sCP+3bu34cmNG/ypdUyucH9vSv
VqQR0xG4yeI3JqocXoNz+39GOoUv5SsRETMHphjWg7rAp/V1iZIc8Ng4oC7Wpq7HTRv600oo1kG3
x6eevmm2fF8/JgH+H4/qi5ycqH8Tv8nfxEZsfDNHh8dUYzNqiBSnehhY4Vv5m/pNb9hGUN+qR9Jm
TFLiMbV/+jb+Llcbjj4W5ePKewxOBWfhVyW94/pDXe84/qrchJ81jvzaTxUNehaYmPYsNnJjyT2z
KV1g+mkzfazC/xMs/LYhPzZTIp4e7XxdfxxuS28kfV1iim0+7fvxdVbm7a8tm2/czb7W4WvOya/V
VOQa35nFt158LTac3rm0HL6XoIlE2vrCTX3q8IMy7JmmbOWVI343PRaP900/ll8ceSRtHg8ctqzI
LRsv0TP7jdvQN22mIt70Rk/UySNx0ydmhhE/nb6WmJkZm/OjXNC2oQ+tjHHEvh8fC/CxmZO2WzK0
oq/bTWm/enQQVf1xlH0Z3iHIiwESCUwlAYkIrsAvx207Q2/bSPRU6aFpUcK0nX9tlj8twE+zsu+q
GGv82MRfpn9YSOLM6cJMoDD64wmAmYhEsNnHNnAGfWRtKT01yiAFJRh3QOonneHpG/M1dTdfWjCa
yLytjl2yFmaylz63kgrsXKO3YgIoq/C7Hr5VEUSp4O5xZJ0ZGj30Iy2PJE/NAENTl50NErRrrj2Q
YUlR0fwsDbXr4JvYIEro350KPJ6f+EFetNiWkwmavvY1X0xfSyD/uGgeOSsq9dt2wy0t/7gm7jqa
YeH7NwNO7euffhL6SRgIQGCOOHTU7N+i7Ug/lV9KzycC4zSBPdICm6I3fmwBdVZGRTJ55UKGBalP
n1lzpGKjRUJ/bNmCSvhCV3Gg6RT3jLix0SpRSEELyq6YyATpDM90R3oG04O+cKsJKRa/RsKA1ZKz
JXcloBIlSSpRkwAEF6bLhVUlfg8Z5pAdph2g7WwZgENr0eFoAZ+KEZc9mdscMKUWiMT0BskSVd1Y
w7BQQey/bA7ANZNC4l9H7yWVJoyLUdshYfRIsqP9USGA8KeMosfXmtO2hTAdQWiBIagXBqx+coUB
oVlB+P4jfwS7Blj8sklngUDDD6PbDt4/R++sENihBONATwtk1EirKXNKT76/ABYCt12+FIAvOYYO
POKM2g6siLuyEICyrNX0040lrQOUjmTzj+Vi29AftRaoDQNdM8Y5kiYuCGBa0ZqlRdUURQdkSUqO
fRW32QJnWlWuTo09PMwED67N1p7Oswns4cdGmfnG3ZNEoEWZYhXy0YADI9IDTHcmEaHFjy342GP+
QKCe4A4Ri4ZiUNaWfyUVROINwFfKEkRWpAktTJgAghvYYtJ7i7UkB4whNQemWNYX9NePwmHKHUVw
nKql/jN0kHxo8LXkyFGJ4gBAW4zCfO1viDKcQXBv4GIOXegKciWMZuCl+NqeeX5mC+96Kr18huPG
jVu079rY908PZcJV05w45QCSr+x6klfVrnS1QtCwv+ngVKqwAG2LmaXK0YUp4/8LIgj8tqsjKTPJ
W+xACexAhFZnfIsBfKsdiWFBUQKzWxrTQ2q4ArGU2uYmbFeAi9XWgWmAr8i5E97gcEhW0gckuhVr
4qDFLgLAMZOIR0RgMJrMrZbAwIjeBkPyyFE6+hFfAB9Lh3nbg4+tYEiCm3Bo+mPNYTSGQeDEaEcw
ZvanBTJCtSA17cTUCjB1F7ywNLLnteobgiB0piwVVnlYCZK+NbfUIfoZtgbMXQUc50G/pO0xAsyk
bv50NouAk6UcNhKCHQikP+neBSL5LXqVe2Q5u85vc4TTS+2bvk7RPDskhy3CJGMUy4AIPuVtPJ6Z
g2f2DHk7Gv20khV3NDwVgQFNrUi7u+OMq1TQSlt06a0AtqclUh4axXfDmWWHq4LEASrT9uJ+QoMA
rwEWeP5tmk5q94w9QddRcYB4uLRYkkHbX9ba+snFyrYwANgkx9hg+J5+L+48oNEUdQSIvTU93xBQ
ihPYwOHIpXWiA38AMuEUFuqj4sB5AM4qkIKQwtoglEWoyyT3AainFgEGvzTFFDDFRDeSTt+UEj03
HJC1IzMAJrNEArMEpVskHBPl83BO7HtUzgClkQ58Gt/XgGijEpgVIUAkJEyNsfCppuqltumaJRBA
+IGaQ0F0W1vbT0GkoOF80OvQJbW1CGmTmGTAhqNYuRAosF656LlYyaEGASUpPWG3lw0AYcIZEbQc
ISNIqWR2zkSpHvjTxiMOkRCKrG6tlDyM0gjFCEyta2bR4UccCdifXuPEMWRMmTrYqWY4ZLTUQQqA
QB5hyisEXrjmhC30SPuiNZyxnaAGSpQTziOpnwQRiEu4uee/zGJCaZy6Uq7RmJNsIREQRmS1RWeO
OKagw1dKaYSPTUFSIAV5J39Vwxw/lE8UDo6NOMfwayPkmTsJMgRzZAGYUpzKCpqi2iCorQSG5UZI
EiRwedvxFzTNnU5CmeBglFV7hF1kywjE0GB0WKBgjrTadIBBwUC6HekMT7FSBF97aBpZrHFEOzxS
O/EIPvZAGiYBjpA5BK4l1F0D1N0DTZkSf4EN7D2CIwUONxrbSabiBry0ooL5gcJiIgBiTa7ojI+M
H4BvLaW4kkhANFKD3jUuVoXTAVYDc4ZzfAJF73wnUdAD16z261q5zjDAIJRDtP2wJDUwJCXhhz8M
SQ2iaapjyUogggW3CNlLNg7wWowAWjfwh0KcqSRJaNgNd6qXUipBbIUzmr6TCEWc1Y1FoSCeqjCq
Bt7ik8YEFRC1SGh5DBABZl71IBeAFNXy+wkWTGimAZadwAapgAapQKmKEaMCat52AUkJRDBH1Tk5
qA8UppMgCyycGhnDwulOUj6IPbo6860pC7kB/KE61ig0KAVzILyeomgJFEChNCr7uYACtB/giLyq
hLKBYirSlZ9jGQANsQqBVhY+tzYoK0pgwN9Ki/SPhnloUrXfK0bHg9OSDg3MOmNxIgeM9TKJVI/H
FYNCYb3FcVKrBMlcueZFgZoXg5JDk8sFRCmnYLMHfQPUisx0f5g5ILnfIjgjpvoAsMvwuURaONjR
3QIVDR6kXmPq9hxpnvS7ABj1HCWMp/AIqMLtBDhQWF5x3aMwCYLjXJHZNhONAOxdelQOkUPrKLJe
pS+XmVM1coXSl9vgE4ufouuWpsqtSgMn7MzvgGUUQvdqFYENyyW2B1HGifMMZZyk0mOg5a0kcxhy
/gXK5HUaWpPR79giyU9aNw+TDugc1QHrXKcmQTlD0uiUj4BCDxZXoHgUr7UL7KeRbQm4o65yYo3k
fo+4w3aLU0FerKcKvmd3DgpJ6rSVirEfpQUgkihEr8RUA1kocHkWLNsRyqMAOYN0arTvpC2i9Gdn
WC/DCaAK3qIIQLIIgebSvmtjAFBYMOQ0GRg/0JKhNhAc2mVsmbw9y/R0GGKU7esu8BFAj5jqJkKA
+6rtk5lpxDFY5mo/TSwMGxk05QuCY6Xodr0AfGHbyRs5jwx4OpT8epRFgcih5r0YN4DNhVBYaSBt
Jx3v8aKRIKEWlaln6ATBwAIXVnHAEZzceMo4UdD6nZV4Ppd+JAgCJLtUSjYNa3v2sEAMUmhcMC5h
bLwOQjbtX4B9O9XLsxEMvLXVuFsHwqqMUdjoh76dtFQWxyPIjVoDqF46AQiAPjX7eI6lgQuXqhOq
AG2DnDJdkA0408x3UjS5syCLuFM540DJozKO6PYxRUlA6rSVuPgPFnTVWXusBWArDroaUB2HcmYV
NzA51HXyRgRQHd4ThvOYWYWSni3Gj2EIT3dK2JBvKLAzPCUGgARNEml6KEwNFKbsJa4AWSQ7VeNB
aQEPi2nMGgL1S5K1p9LGkCWIxjGDOljECHm8dFQwb3G5E+zoILXDqQEwicU53MdHISCXM4CdJNBf
AdDfYMcU0bliPbvOgE4SshPChMFm25Mp3IMk+yqTLY0qfS67eYHFgJKooy7RPBBJ9Kj/UC43AiXB
TuFMewmUj3TdrHEB4EWCwXJRG+jAZnTHH0YWitOoJC45pcAOZg77DhbmtMlmk77sGmrk7/BuBzWQ
GCBsR/aDBhSzGiPdqDRF1reucqAb0UMHi6C1UyjBM3kNCngNmujQUuGKwAbmndpFjX5cLHtuPuPm
ChT3co3lGBL8Qin8MUoyFYTKGZNMUbl7ZQw22iZ12ki4Tvsh6Fw6SvqVxhtARTPRNOmmNpAgaug5
gfPEVDKo5uRM5raTbbaosJWRWWwRAoXAiZA9HwkkKyq6cFwnCYaSn2EmscAfq15/vkBCwL3S3eIk
8NuwinkMqqOIugRQYpJiAIe0FqEXJmibTkBfC4ujaAI5DcZixGjMCQNiVIpe6SID2LPjZOJidm2B
orYKp1siM3SW5h8hp2cwwIISQGV7JR0CVVQ41IRD4lpohoDrXH0IdKZBrdhwhy3GqCD1o90fCH2a
bj+dlPcOWuo4B3ueIiOWka2bHh11QBxO9YNhgFRsD7LiDnytDVIjDqbxGc6x3a8RmKwkxSHFtQUw
uEYtDkp+FfKYdC/uC5KzdMe4g6l8ftFd1zxVtYD+ZF6hSLvB0bSqR86zcyxQNaK02qEqcDdpEuAn
1l2FZV1T8yjIAXJJ8W4iCaBzhnLDkiwHhVNk976K1hChdTkU8LezVCv7EeaUv72gazO6kyglGICV
re91zgahyDru+5yxZGGCl1YdWAABhkqg9tXp0MBEZShjKZfEgPb/2qE++Aq2VRIkSvrwYlA2eNfC
BT3SZ+llslELCfv3czJPqyJSkApoFDZSYS8qDu1Ti+uftMXYBOxXo3sBH+BSOO2QHE/tykDIRtpO
igAQ5LhT5MNUAokstXGrawXGRcfTlri3EEqfmU1N0I0cMzTpgTtF1HNOdfggWIQ7zjycGJBnK1m3
QhokV3Dei2CAGIBRvbQ+lNbRblqesqIhtGE8dphhspK3uN8McvSVYL2sNtRNSXamPaC2zKJOgnRL
JEijtHtuuxEuoO6Y6ooS4PfIXn83ATrGeGdRM79JmCBZUjGmqeMeJSMFZHZ402v6CDonqCpiP4cc
pzkCQOUZRnw7VQyD+sBlAdNzaQeos3PM4YQUjWKCSkrcIwM2FZHW4ZYkGrkuZJLCI2kf2MHG9eq7
wb65EF0ADxRuSdWJKXKQLDYbMtTspgKaQTnJesn3QDBwSdDo45dBOouE1R0cWtGKGdSiHiZ7SU92
uSiBVOCzGCpLwsZ9IwvaeORzWFxioakqntEE1jAdxdBN9ccIhAIRiHYVT9TSGnb25BhKgIUwWnrU
yhngCLyb7YmmlCGzuTN0xiiPLV8OU/k0NWYnDX/R0O4VRKLTo3IftMWA2EXKnwYhUMNI/axxyFhZ
3+k/BcOnQqDWEg4mSbVnoKQYIhwFJ2H9i8HTo6qPm9MKfBffcgs7/RkPBbnXSlJJqg/tCGLsVZyl
/TGoBHdcgjae2DdiTPbGDmxRd0guiDhkNJklDJ62PfepwEqDAivfjSgBoGTZq6smTgsTztFMSgEB
FjnrofHsEsXqb2AxatvrLyMAdSzLU+0zHgYMdG1wHTTy5Yx3veIPkI7FNJos4WHBvJGeLtSU4Z1R
cN1L1WltowD8KDROD0LhVsEYyFbMzhQI3nmqtLWM+jKgQNXikRSwNQIT2I2UMEnTWzw0C7UJt0Tn
j6pZC8DS4BSRpDQAeVuUN5edEpANLGXP6wdJsUL3usSCIjjfmRqIgH3FOarW1HCIh0R2csynlbCi
12tUjNFr/SF8pxWFAyXnBveH0TDtm3favAhQLek9qlhMpicIczKHu8kp5O6rntbhIMnerRiZBZxA
PNgyma6geYdwnTENFvQ/1aKzcQdOvUzxbyR+oF6evuNGcljD7fGEs+Caga9h48Hc+g/Ifyd79YOA
rZeZg+IpfATMfsE6AVLuAXcZQac7wvZ35MzWh90MXCvvUapkbmwAeuBbqiPPY4QfMG50dx4ywGuF
NHg+BJJGWnTa+yJppHhfnoBoHW68quEMaSWtQtYkR5mtXqnevoHf4Mjs+odTCRDAOvHw2SiLFvSu
M0DFqDaZp+JckDqgZKeKmcGpLYUpY/TLzEdUYubw0nby5LkC4RDBcA8iNCFdaQkei+MuGMx2Zr/C
eLIw7b5PpavlHiYjV7NM4z8QzdoykM3FfY/IAbF4lO2RgWqQIGs6jf9QSFooCQZ/IaTZ9ppk9bJy
Ta+3mQC59p6YHJCf26BxduGxe64D8ByW4w7cU7UoMMCXbvVz3gLINjSM7Oc89VlBnYk9IRSq/BYE
73MsFRD8q4hEkdHEAL5pb1SahJE+73pBeGBBK6kRECFxfiTrFoDTIlg5aGIEh8ehDr2Knnee04AR
FOq6ffgNsN0lBts9glEZx1jA2IIaPJh3vXGoAC1jHhngFhdpkY7DlHeNrrw7vgrMVfa+0+PAQLYU
eFgZeq/ZLCciVw/ER6EpyyFcb3kHmjTAmFSM6LSSGzGDkiGFcnKiunuBuk6vKiIB/CFVr7kCqAr2
UJhlFxG8lpEdfSkAwOid7s2AAXrHyx4KAtAEITujBOC4XY8A9BGpA1a4Yciadbj43FEivBT3AttM
Q1zVdYjVwMG7KcwDVLbpZBrCbleCeZxFplHVkFKUYz85qQD7VzDw6nF6vehNAuBAtjhncJcbJMRn
fVtlcyg0UNlCWJyIJWA6gWXUgPvHHFo0DdDg2IFFHWd5O8A+RV0liLo6XEeB+wS4Tjd+NOqddQFd
kJkJa1bhkPlgJZgV2b8IjuAIUUgGDgOVZYs7e27JD3BspbvjKkHS8rIRqXoyKkHqWT320S1H4KSG
L0CGCksK8Kn1NehWWKH3DXQ0xcqR8mAkCj51SkSdIVRveDqIbmmGQmOpMTHgLm5QW0zcclC7No6d
hBGeZ2VFN+QM0Bdve/3oAGrFPAMVownIZkBnwYbKHkYxjRA9kxSEq5nCI1Et+NjC2aI5HcOBdIxu
fEmBzGPJcVs3tdHga3KSy3hsh8voiCKhqbMESgujZrmWQwOWxt0pH741SLn2ptPGjwtQws4UrlNF
tpVVppdKa0FPIi27MRMwNoL1hg5zUHroXHfsPDCknXOYP1GpqeCmC32BOJPvEZsGLcuXGaqNQiFQ
GIAyaxOlgAisUt1xEwB0E900L5RlwHppuaA/xLJ6/jk9DWSnqW75OwBxOAO8hScEMqFxaA0WwglJ
NL3KqY/AfCdnCz4UJkgz17JTBQEC5c4YHDZO/WqQES37vfyBCLbIlk2sAeiTnAD80NcAT9YGBa1N
v2xeV/ZsDCSY5wHTqFaTSVSQ/FBfKNOfdfozo9YYQsAkco8T9rntxYtA6btcTJ4n6lzRXEaGJwvA
1pGCsyaukWLfYNqqUriCHPkfosqnbowtfUClwAmRuosZgvIMyXuAPANAqxW9XBwQ1Jz1ICc6oQAz
y7SLbCfzEoDbBuOFiMC16zQSR3JJwMGjY6QLJb520k8hZzrbi2CAnHJfafxGJxAOUQ2mHNKdDvbQ
NYw3QxEl2xf4EQz15dcoFMtdr2EkgCQ47xK2AEY8k+C3IeomraY8p6lqHiB2tSn7VPOUSqlBJwxP
tRYa8wFh/r1whOORPtYdvM6LzlAVFM00cMZfjuwBISQUDWjkYn0QQfai17cRgdl4JmN8a4BoGIcm
GwrcPMsxlDnK8NDoWToKOb8eWUhSmO54QyCNnMN5VxDeFYL3QosakItUPWh6CxFernA2JmydUvdf
fyrcl1iuWN2ThwINJKNSJSapBJr6admDsACHMXoSWhalaHKo6LmaqHPWwr1uDDcHxe+8K5NAtces
B8isq8U4LQn1HPa4YydM47TW9WpUQL8Ab1QP6dRgioRmvcgJyGZUBpVcxJAkMKyM7hVlg+CFFCua
/ONWNf0+a6DP/yw7vOKQyYpGCfGiV7uLojaK47JwWGYIaqSngBFITqFGo5d4EUo20B3jDDXkU72m
MWhEi0cl6fm+UdIWA9guduqZFKiTB+7Fx3AJv8FjkKVC3rHFITIlO3A2mLv0FPuw8xJrBZPcNGDq
lGkGE1JsdzQMSEmvok3L0TCjdQP8U97Nm7Igb0oZ2HsQdZjQaNOmUywtOzVvcESWkILsxcFhWrVl
XV0JagRdm6eqIlZwX8z35sg74F+aTsmDRrethOslejkw1rYtheqqBTADwsneRF1QNuYNDmai9M9Z
Z0zdTNQChUzCdt0VIEwqQml22Tdw+oTAs49R9ZZhyKTqzHs2up3AmYf8AUeDVBej4cxgBwE0ai8p
KlBMr3QPCeWgftX5TvQTAMhuUcbPn9KaQbigvujKLBgNOFDiLDyu/7SIIQxD5Z8cTjnyujeYCkyY
drwL9oAG2BqmDxro02nJEc7vcSodd5iNPUyvlf1hc4C+erWQDofylLU4qgIbf/O6TXtMLOOzLkww
Pu44FgaonXHwontF4VwCLckl6A2U8jVBDJFRYep0ZpiQ5tpZvUlwgkItxbE3Bns3L1s8yKf6S8DN
0oOOQNGS8cCQsaDTXsy0BI4FN9RElIctAQLrTpBRzuzHgVR52284DfQM9CAlbBggHYP1eALnP7Mq
BjQv+3lMdAWerzW9qSYgzsh8t4cxyHSvQn0RuZTLwjjUtEVXvJhgT/+kMABYrVFBRrIaQRqC8WhI
m4BdsmeGkH4GGgRs+GKo8lwff7szuZejNkwaT+6VfuF0mwVvwIEiquOZwGoKaQ0KzVqs3C1DvsUj
6wK0g/PowTi+dC4U6FWjUARLet+N5QD1zOp2vryRgKDhZGzTrb3p1EWbKtqZJePT7wPAQivcKwdG
/ghnNGdlCRSKl4b0oUuqJCiBsQb1DcAgDVesN9oP9IaT3e5/MfgGUEjBcIIPrAkRvbi4AK6h709Q
S4FDkCpDxplLQTpAPownOKWkygB0zMqO2gfTUBxnuPkMLFwSTPZUCZjyZ3QnpdgDcwViZGnMEoAQ
lOtlx4JYlFwEO5/HkQBRLgxw1pJYAVmmXuFt48lzbp5no5+ccpA7bjqJ7wbZWJoTgaBUKwwQG9Gu
Op0qUUBHUCvXJOrDrhp1suTTfaW0XGDciXZ9Q55Fi2YlQKX3yNkD6RfS9rLdUdmo8IQl/kg6AQnr
XuGfRnWIwjk8DoQjv2nW7dc27g12B/W6N0wERdQdTCdmWBBZmAqdZhaAvgOK6mGYsAA4tpgcUD1L
iAX5sE53+sk71MCfgTLf3KYH2JVGdeewA8Sql2UDimCcNh2sDAxydJrRZfCpIx+qJfHMrzGvQN8D
gRJqTSdUUGdvzG6tA7PZzsgCC/WGhU8FM3GtguM8uIbzPGyvLT0K+1Vebuq//czTaPSkomooH90P
QVmGlEgCW5x/XP1y3Tc8wYMAaMN1Mx7XzSjWSR0G1XCuhvieE0MdHMntJUzDxbOrmPG9NgUWFMPp
ngjSIHtAcqCsxgHCMKtnlnDXnBcGZvxYLjstLcC3y9wa+eSbAiUt57ruKZIF+5coJrrT3wHC6Dg9
Nwsm5igvOkn9sHWWMBb14XCd1uMal1nBin/uLAHcPxpsAsOEUy1bSmYlKA7WvNNd2QAARPpeaMYh
1nSgPNfg8dpc9SpWGDAtHBLdOfMZlWAgCCDZvyCateyS1ihTBXmw3R71aDAIMzjJ/Q05lk+BtOes
UA3eWnKq8WFOZkWOKeuBg8A39Cir0kCEjvFOrwE4VkQYaiBpuW0LbtvhgAUKj1ulAVuazjBwC4Id
2aUFpXcSzUHAoXUmuxniGoS1yI6gVd8r1F3Z9VKHUVe5DjymIXrh8TBv9NKKwwmEHhYSGMlxFYOD
rbDFfBTpcyaDB93VjAZAaE66AwCZ60wQR6O46yTFRlxM4VlU3Jlel2KGcFSPq889bOms6ZbOID9I
6W6LXzB1R6JGj52iWC5tx3IHaaizjgyiPTkQkIg0RMbcZDqj4rvFtp+ddyDFBEPbfkyzQuZFWSGy
iXmuRQMWgu/VAUsDwhOq2wUPdO9gnWEwcNYG6wyngyEd4VErU4G6G4fXhj1UHygw+HkpKWU9ai7U
ws96j9FUj4YMMwY5DGZrW4v6VlkYHdEKtJnEsZGnVu3qaWgQuC1ynugjlcyBTDKGu/VK2KeRsd5P
g2gvM93hiyA876iq3NKdBrWn8XQWGyi6s53ZyGMqBQACvO4NCUYNNJRE3YA8LtyTpjP7lYNMy1lF
b7sHkgU5xLr7tQa9GMjgeqlrAtNgtO2FxjsxLc06MepA6MDrkZ3M3E7H4Tpi+zxSgHUcCNPrXqhA
90LpcNKS66RUKFzWoKEWkGT/qYd8ACXk5Ky/AsOg0kGLw7dBNIGkYkWNcZhS1FAqoiB8zQfihoYP
mc4wHQdaENpeJBDkQCrpgOIsqDDIKLQWR54VbKqqGXhugxtvCdWjcjQ2VFUh1JiEI5476ikAAgmO
rx0Pl1GouMzCOgdtVKcztYVTQyROAO1MNiDbqD8MeiCWvMTZUig1TijWqSkGI3Uc7N0roc0hnwZ3
+Ke4B+h1DPIi5DcFu4jPBoO1ZyQiE8/jOlVcm0t693Js1I+aZimFRQJM1xWCigsW1SeB6lMYgoKZ
p9JTicZlFgSaOS/X5EaAJC+HQIaczw66iHgHeuvl5AhgccCesFkcgkRIbjsxDFDX4rghfc5JogGX
wIjejN7ezG0loRLCycqC46nKcBqdEbjxDBLlok6Tfk4g4tDbtoL3XHXwy97iCCFsqectCJUJNBFC
WiMwh8EeJtJ4jMojoWbrlHb+JMnjvjstobSm+2aOQRQQD+aqG7IClWOyP8QDuOxSdSUyaIOiGHIH
NO5bJonW4HVJFUiLJKv1JsMahK2UQWCag5EQXauC5754MQYDhlnYOZU3skQYyG5xlHE5di7bdjqX
dYrSOUwWtr7X0g+MvfWqN4oJQYC+1xEEVflI3D7M96dUOtGJpggOunB5vgbrgC1e647wVRpWkS9I
Ks86hItGOB6WClmDAwUwaGh4J6gDwhuOdQo9UZY4hlAdnKinidlERS5tYZp5dyCrBLAag53PEqmj
HDTRuTOgf5nujd4FVyaQTKyiEyAVtZ0+lxqjCFgbhWalYWedMRgRj46UBX6U7o3YAQECsjn4zORA
s+pR3+jR2Qf1nob6fNKeIE1S9dwJ4E04GFZJNjVo0GRkr5eMQKnxvIcUeIA/krOgyuh1NHSGAcQ4
632Q4Gkd9iVghEJY3ctMBam83mK4GBXNyzoN4TlLR0PnT5GJ9Q+THtw35uwpNR51/USTEHMzCA9K
D7uTUCQA8hblua1ZCyC2IjTuJAl7MzjT80UYiMwTSbFZ/wg4OEz0BqiDnoSG97JdwHzoWS6CbjMX
SCWzC1xHzo+swZEVbh8E9JbivbChAoE/Ae/a4uGJimpnXsQgKAcTnbtG7byEMh0gSoBn9s51q4EB
/udA3t5YqIOSUhnqySVxxgrnKFia8shAkqXhvcEaqM2269Q2gYDdDLyTzdZJwOXSSJIk6x/kynDR
a8yFeocYTuD6hcJBojrvZFAIGDNjquuhg7d2nZ62yKqzBPCXy1OB5DYKtZoyOOAldC/yAwY6cCoU
PvV5Bgpam37pHLAOuMFjd5EIFaQd+gjAAH+8rshizYoCA7AIpeCVpUH1qAgOYtqxoRnoxljlXNSY
dnarLeqDK2ejQdvYEwdBCC97CAzI7zG9Eg5QWFrZQ832qLD3pVh2/ViqWojWedmbQAjsdtbrHsEl
sC84qipNDSAADGE7w5Rg5MMi2EfgjowzE/QpFxd5Kkw4JA3sihlOlXOZ8lx8exYRSLGvrFhCDKMR
UujFUnASdEazvmOMgiS0WYNr10hSQdCuVaxnBmuASAuPjDJcsMOUAtakhvnmjKluOwZQSizaZlUC
ylgnaztoa9MdDwqwdC07kyoFQH4YamLEcSN0ZmH83cG294Z1UsdQCZ+sjaoZhlHqfUDOApkv8ahb
BBa06oT2EFYmXD95DKQrKIWaigvIHLPukE1tDQqCF46WEO15eAiLpnrxFAsJOHoSjfMWePSUWdX6
FKStcVRfq6AYFtzjafOwV6P0ClVF4HpPo9Gxcw0McDzwAN1YHAZuHHc30LCfmyKz9AvyA9IbBYor
cuhYzyafLFJK4ZgY5wxunoGEqHTtWYt1YAs4elajMKLDFoZHrXxSsyiQzqk1BnMlROgknPXr8ewP
4UDbV7uBLftdd0y9Bgi2cp3MKSQNnOGohE/hbBrBRDdFHdCoRKV8MecKJLpx3au66Yh/K2yv8x0I
tPAesKrAx6JX1MZBE496Kt1zTkrKU0BDPCgPV+JhGIor3WutDgKBMJZnYGWulmsGz6KGEk7gQRwe
JoyRgfbCnKB+UfV7FIAAKte4ah7rS8fBOA7TCXjjoSkCJksb1Kcw2eDgws1inOjTc0F7VNiOWdZv
cSNML7MCzCDUDNsoEMvmHptHsMsiF0Co4OmxTHgir3ECSEHXca3g0BeUrdXOGMqzONC8KtZTWaBf
iaekZ4nuACiAjHrmi4IJUnUu4SxVt+hpIEi068wqBMWamtOtO3JbMNQJqDNPCOU2W+2w4ex7o7Ol
sGvK2EANhOOdafNgMKaTlp4Am8Q3gp38Uog+WRgO9FYwHAtR5F/q7tgXzgCc4FgnhongUc9cr84W
DvVAQ1zTsUHaj7OogTXmMEb2ac8chob3cW2xt4WgbCWtRtkvDvqm2qtVpQ+oEUfRHLF5gHlO+wFN
3ZzvYasgi9Ex12u9irq8M41LexEgILTFIy5RewdBDssoTVeQDuK9GiFgzRqB5yPhKX5PYRM5m8sE
8rtkp21VJ4+QY+5KAUXQwc904BuO2hprqi1m0bygb4BezB/njRFJAEthcMq8hvpTaY8pBc4QlN73
EpZQ/IBEBh6j01FTDI9z8lDup5qNA5BNHB6E3F0vJmkAqNytsEFTcLzvbRtpAa/p+05aF/Zk9gYO
gBWopRIs++s1wK7f6lmOWuguaS1wewUFm6zDTmNx6jj4mOveYCpgXnHVVFt5RAdHsyK1A7HjhBuB
BETRixFxA6LtSmBDHuLQxuFUQDhN2vJeNBDkZDDTGzvb62ekGe9BOCBF18Hps2l0EJpR7PHUIg5n
K2uLkXQHeMtwSQw1nTLjgERgMHrgMF86SXe8hZ231SzjtM2VwPrnoufpAdktBUIZk64E9mDVEqH+
6Sm514DkXo3LHOCJVW+yvQAoNOO9cZcgHQMjkxGq8sAWlJ2wrwdC0Pa2zQH0PutDyps5mwqYgtL2
CkMAT3nTrVsGmeuoDV8yLYBl4XQvKQ6EOmb+fDt5BtTX+U7hVD9KjzWPg365IWrVJr5ETTtYt3sr
IBRlsUXFkUUlXG+iIWjySxabPaxfAHcpi+OnKG1TeAmsEwGH5ElrJQICLAaNtHWgKz0MvdZM6RpN
A1HMV+t+PT6wx6ToxRlQW3lNFQvb3ySe3mIc6G9iO4EC0+mNIkEHVOZ77fNAdm1VOJoqm5/zsAGB
SGa6OC7ou8B6fV/BWHtnFLZfYU6CYtQYkzQaVXZGZkrQeKgzemDdUDs0kU/3p1GBF+O6N2MZJO1z
3stAAcLE256JANL4mMQzsN7Q0HTPDZGymf1KkPe+rPJ9mj2ARv8KKpW6nBjoOmGBFDQ4W7Oqd2pY
3Ra2CdTagRbpKSMBlUVTJDLF00DfVd1vQQ3aJEm7ZrwcCmlVmrZdI2yBjtftdM+cqGQ61RUrimHg
NFoJsyaTngehDpjyn3AqEATF5rfBmp4bQgM8Wt4BAMHrXlUJyK81qKlWrggEcSkue412QWoY6yVI
eeAgWkHPiwdZvUrgQJqDWkPZ9lC7SNxqw0DKYnfSDlB1wnZ63WnUdE1Ygc0i12uJofwz8PE/4hrX
3eV8PL5sL9f02eN/bl7ut9v5dG2uGNaSejqRnwWfX7bXw27zWIb+fAKU/exIl1v+t/eH75v38+Xw
x/l02x6bq4Sfl1MD2piWWYm5+PX34XI77OC3ivp2+3I9H++3AXwryrejqTm7zc3usr2+b86nzWV4
DR+/g3s05SIKC53D/l+P5x+basnzx8vhtL0d8LPwx3JRnHGWL7Ys83G4Xjcf5/t1+Ag/stkfrtuX
47CnV5xy4yLfpLTE8abyksP34XTbHF4v249hczqP+z2c3ugFvZhTTkbC3g/7/XCaVlrcpACEZGaE
NMqv8v3hdLgdtsfN5/l6iHcHDsrKSvzB4WWlz+Gyi4f93O734YB5Z2A5V5azjY0dt5e3YfN46Muw
u21Pb8cBrMjnpKJHis0vuIrrNN5TYLlwwm3nngrnR6/aLha5RrKfbjtsaxd4OCwK6KG6d9m493GB
3n3bcrZIB0u631+2b5vb+/3jZfPjcHsfr7+7uakng59Z65BYwfWXxSqR8yCB3f16O3+sX85WF1eU
ytMqt0gem91wPIKdlTf1i8vbBKEcCGPzcgt39msA1GXFnIHEGjmx+fE+DGBnviJ6lo7JxoOOj1Ax
6CX9yjXu83wHj2pci5GOh+vt5fzzyyJ36hcZ/yvqI71kqh+neM7LcNoPl6H7qk63xGMl0PId7o6H
3e+b/Xm4huu8bV6O98sKai5brWzr6ga3l8hnw/YWGDexSXiq8A9XsJ8zLWLMSycCHPd9yXqnR9qy
9ULzjQZB87ndHW6/wKYq7o3IJVdLiff4W17xMnxuDysO6/EbzZUsWEcudKt2i5XeLtv9YY30W2gb
ly2SsINLWOzwecsGXvzfm+vtV3iPbWDt9CQkaVtWWRNV8/O8SFp1s73vD+dAhrv7B6A8y2ZqOgpS
l5/0cAqL3fKWrkES3MButG+ZSuNGIhNc7qfNaxBV4VhvcTtgLcOf7utxsnQ9t/Nnvp6gzo6/wBVV
1kz4j2TPV7Tioo1uWdP1Kp/H+9vhtOamK0rgSW2x+p7iHW3jhQd6B4vIuaCwjSWCPAMLLHTB84HW
XnAlXlMN5jMNHj62QZWvuJkiDeIgOCmeVvp+2A9rqLnSvFVd6MfhZ7R3ttehomewHdYyLaYf3wzH
If339vv2kCVo/9m0m6lxviDqtKFgEX/fHg/77W0AB6zev2AK18PH53Hl4dSTURdX2O52w/V6eDkc
g9xOH24vh21Q2C/BPBn2L7+SQXwJz3DdlP8L5deKZlAnfTcaB/fPeM5r5MGwZDDf91tKLPDMeuN6
5fp252MQKT8o84nnlNjqM1Z2sXsfdr9HmyL9hfCyeDJYn/Hk7ENu9+ck3fZD4JZg152GH5hAeR6i
Ns1Ti4VVRk1HyZb0sD8ko5D8XrTyGaMmOo/AwOZ2uAVKgK8zG4ZXrI1sjobXuF3OvyK/kIotrqHn
CbwjId6Gn4ERhu3mGrhkF42V+E82l+BAkYfidnGqzP7ZLAum0z3czSWtQ66gmlV56aXDqTZBZ0dh
BrGThBW29hGM12Az3KJXEuyQ6GiG3XyeD/Qrz/LqismVpeHH9jMbcIfT/hB9y026L3jZVeFL+P9H
mRZoZTvJInInVShGRs6XdrSIvr8FC+Z8/3xIs7SnRDz0LdsW9V2H3f0ypPd5PQzH/UiB9wO9Tnnv
cDuuvFV8J/p12HzKp3n4Blf6+NUvRfaR5beakg2yTZ1FXZPH+S1SCOXeJ3popjKkbWx3t8P3oYhA
TAjNgbi7bdAb18i4SVcGn2izPe3TZZKCsRkLTs93HW49qmqH7E/hd4NM31Zu7YMUunRal9UW0oqP
e7gNHx265M2PD6fP+2SCbI/0T1edWsL1+koUpiNEszVomvvHdKs/eoKx0Fy0RuxMwk8CflKD+8N3
UtbLhs7LH5/Or4dL9In3v+htuMaxkiyOwjBxe62Pg7kfOIBczfgW7b8P2wS45Wc+nHbHe+Kiw+l3
kiedbWWLHKJUPW2P6dtw0bv38+Uq6Ddb1ONleT/TgMG4uoYtnYKwPny8IQqoU0FYfdNBQg8/J9KN
Zk8gpNFMAtSomw0Y5lYHUmblpt3joo9Bf94TId9ul8MLBYGnq2m2c6yf+nV7DIbwj/Pl93hBm+v9
5XYZaLlbdaaUSY2M4Ga4lGvEX6Z336yw46oKMTMpsuDfb4Mz/fk+wn+H0/ASNCJNQbzKZCmccTrv
3g/HfbAaHi9GL9Csh4kRhriFw2kiwOAyJDLCMlk0jMyR5IIsfEte1ObHexBk18/tjny5dgXCxGKj
zfkajY/8jiSD6ZrxXVPjBW/l13hWUtvxmg6XYpG+24qboq/i5GiinrIYDttPvz980trStfIhzqcM
rL0HKXwcLuBx9bPgy+ePouV6//w8R0ApmXXk4cXzHabre5hL8HNehV/nb4CfrkqUetx5sRqzy9RH
/SItNS21tIOCYCEDQTVePzz74fN6uELpVVViltv/mW3oaJjELWQ5TYrjZnbHaXjbRktp85DLD4R1
+Pl5vvZcnip5uMiMUWHk3UVLDOxKPtus4ccPr4ddgqE30VYZTpAwm/OeMmPvh8AZH4eERz9M4YjA
n/K50h6RY2meCW74+Lz9Gg2gvnVvm6lTtxHfGLUOYPuq5Dn+XWj5EIRB4RyDfRyY93bumHKs6chF
gotqM13KZcgMnD1M8GTcLhR73tHn+TO4PbWtQEuiJinGf3uT/piEQeCJw9vpfAE4gqeEciCbZFhO
ti4pkpojiKcdvG+v6Vzk6+qWQBg9h/g+6XkmGII0vGZFLekPW9nar4eoHVaoTM4agq42URK59tR4
lfpW4orpdxMXJd0bdHkQnSTXONJUu54vNzpro/VZUEzp9w7XHi00e8JHjzzxKu02N3ebLv3+eTxv
9xNRXwO3nt6+b493mttbyFiKsUUIMVMjefFafIGYyEXKaWQKlFRmcvgysPp1lFrbF+Dgt5yJpdcZ
FrxEpOWEVHY9TrYgx6fzBGXjN+WV6o6cKvOj7sPDRAURROjPjGedX/4WMR9sUcpnHRr/VR1k39/v
h7CNvh/gXAsqyKR9PERgLdFHcEkQNKcErRSC9sMOqEd2KMnU+lkyPBIpHoQR1f7reXe/IrC07rSY
IgsPOG9Kpdgei3eXaC2tSauDZtZ/llvDkTZoDQF3jcIumTbJltl8P0wQPLmYJ0UWzBjiec9P1uUp
+lvpYg+nOwioJ6ktGjbUPtzgLQrcMYw84sfBnvq52waHl5S9vlUUkB2vZKpHKj+dT79itHbzcjxH
kYK4RhO3/AA96GzJJhpe2xxBqC4BHKzgbAu8KQ5hbZWFM+b/BffYaigzw7dp3NRQQZBzBgvR70pD
OFO1EKFThilkLZq72HarEcqUL+fdGBWIgfv9jGKLnF9jeyhGgrExreQcHp3mgIbFkc31UTDTqeNN
ak8PeH57C1cy6u6+oa58YxO34GBfX8+Xj3A1PazVugZBNMyIjBH+hJ6uY2Sg72EIQOqsAhRlM0te
Gzkuomer3tgo4EeTybi+iQMmrzsZlJPKjUbeuKM19GY9xQXpgi93dDuVhaoSRy0/fziL9BJNc/Mj
Opz98FGF/SUfZCZ3kNBpll09EgaT0bHfzBzoVQ/LW9eRtGa4kC7uV1NrMYpGGoOeYN1mo+DfOQY3
WSX0LSoyOvkwbT4v58/tW0rvCk7yBGXSpgjhPy2sGyja7fMan8ftLUqRzSmoctrWdQ0JlEGUjCqP
6jL8+ub26xOQt1StErl0kjEZgrQTm735K8bI6Mct4qfr+NQ0K60fViYK1bhmd+vo0a2DC9tDr4r1
M4bCsxF0OM2V3yq+aZVqJTw0x30mkV/CGzjezhoyLUHeBd6b4G96jWZZ/IR3x7xU0klwzVq7t+P5
JdB8Dqs+EKsqq2bBHeTqsvWaBYfN7uWaa6/qlh4sdh2Or7H4YAiPunvAfQWbp4mk2ROkVvwv5/tp
Dzxc23IdsmO7SaGJS1eEVu3PHgGc0QDa7sl0sVRV1DSA6qyjnEsTEz0vSCfRsjQFwF9ySD9GND/v
IODc8BaeN/MRrM3Lr/Dqp/D4SFNWca1o0Zgx8TSaU5VvFIhvf51pPVpnyHnUbYQjgnMV0ZmURt2R
Z7wZss1w8+h4TNIpQ6nA8DVNXRHzHukL9q22KtFiufYzRGzLKpylOeXklfA+Lwhyr9yXKq8/Bc+D
hLlNeUWbBxetYuuqLekc2QiXeU9ZxuG/I5ZLx5eaumZOgCNSFFyl6EbTirDl1OfU3SkFa/TzDqdg
WeR/uBKlbWAxUfVsDzGqnhgkef/rhKFhzTD7lDCWN31IJSox0TvhEqd7fF+aTFgrUhgTUU45WJSF
Nj6laKKZ2/3ftruMHVbQSD5oIOFpr6/bw/F+oW2sFgtmI+V8AqUfyR5hZAwvaYupEGBCkc50+kYz
YJ4pdvv5GQQUTajNETH5WqP9QOoJ2QIOHzqUDDD4ZnPOyel/woOimbyOlmWzq+41HH4UKBDJ4Krp
G45i/WUbs3/3hz+gSPfNWfflKjcVFkeuIVryLBPUx3lfOVM4Rck2xGvBqvO1RoKiEznUswj8PJ8v
x1+b0RgpTiL9JoxGlxNpfxyuH9vb7n1KwEq5oCnGMtYOXjsokrEtBnzK/+sYC8JSyWkRIBxOY5Xf
bYsCpBV2tIDhRgZ+z7nVx+MKP7bYBj4mRs4laaKimLaW4uS08ORkhKCT9Y3MVOGptJHxrQDWUQcb
cn2CnPzs032TEgE7Jk8l50QUQstkvmDlgg3UMf6UbP1w46IAug1duES1bZ70+1N5VdxGxxFtPkzc
RsfAV83+URU/TZQWfeIu6zQHQYxBvpmlEgVFNlZIaL7Z7Pm5HIAkKkaycRD9+wKoB9VCRy3b6bvH
oObfz8c9MDPEc4fwybgfLumDBJvuo1O3id9+IJsj5dCNwFr06TiL64c/J4A7LXa9v4RvzvfLbkwD
iUDKCJxdwbr+sW71aqOSSfvNdQv/ZzTeshkDFjNlsRgSHbNett8Pb1nL/Hg/JDD/NcqI6LSHX0Cb
c+XQxbF+CzZ9ihcnMzc84SEW5+ejg7X0Y630sCK/ye56Fb/x9MWNOSYZ3+wU55vvt83H5e20YWzz
QidFqxYiEdfRm53W3G9eLvvwwpuwKoiYNOeT3ljsmCM3wUfdfgZpygzYyNw7HR19Fv5xPI6Qm9GB
iXIeHkg3e8LdeCxxEpuXfSpMfT0Gf+DHRojNnk5Fdk3bPZxIhTNdY05e0DhBN4f/RW+HNfym9mY4
A5sRDVTlxnx+JKE3r8fbj8v2E15N3bG5yq5+PLXeHNJbwzV08zwinGYqWuGC/ly16wnKHlwmt1vc
xJbeRCO6HIktbMLyzeuPfUwYvEbuDG/zSsOpvJUr1X4dzcHrGNu82GdKEYhSWIsBHFPxYpiNnR5O
kQ8FfSJZYZRljeZ5pAbnmT/ySG3BOTNhK0bkvN5gVyRK2dBwp2r3MLpxxlwQUWpzPG2iNRk2t0fL
8HaaHg8PHoWDlmrz8nYZPoOECZcFVjLzYKYH96PQ/RhOMJJMbyWCZo6C95JEA03HdSudElQIZwpC
U8j0wWtQLzFRI/J2rFENluj5x+Q1McaTAm8oi6mhTNI76e5H3yuqnYgjBZI8nGLOVGyRE96DWEeq
onMqN3rsSRPj+BG8jPZE9Mz3wd5iTBBrCVnWqkLJsV4lZjeGLw21izERMJ0misIpB+/lfMn1cuHZ
DrtSpspy4/rWUt5UVkjaxizPe5txowwfBW+LPo725TgPLvnYXmJh9PYz+JVB493O4G61LLbBg1uz
kz+71/fh8PYer8dTZ9L6eSH4Rpy6aaF8vVQWrfmjxxqPS2acWGUaTDy7mgQ6RvcsubOF9BS5SEXC
yVwUrs7feb4f8qV446Xa9/NYizqaGEXIuNaj7mq+pemaNbUjYVusMG3peTsUDQmjno9GcoWknl1V
Zq/3pVPT+X4b8ZlYdryOqkfhON/RM1VP0oJkVOO/cDKaN1xlgGc7jneOlkf4NI9W6CjB7Fy6zsPR
jGbZ8/FGMkIygKJx5RGNP60jSSHtGgSVtFBjMxR5q4oqH1KkIRo5xftayWeJlnfRFGcUtyrt6tO4
eYujdVtxrHp0lSpbkSaVpCat1imm7595a6nc8/WSUpFkVMFmqv0hgz7P180Y8ogm9BSBz+hj4LQt
ta0xqjDbFlRDgrr0adrVnJorS4GUGrK2e1xpOEITD7mW0g0q3h0Pn5N6aHnpSlT2hUjvzFs81DOW
pkaac+OAFOwkA3DeFn+UNhakNhZtbYwImLTndINS0gXl3lRrSVhZ2bBOwY5IhSwrrfXY0ePzj1RS
8ROYBVMTJiVz/GiqGP112n6Ee42me8axotSkGEhJ0X6sNhPFHXWvWgi71vbpGS1Cua+oGJq5rV1r
rj6OZ0lzzMzMMbbifIw8nySo8gsKx5Yn1DPFdd1w5cmvlk4JaRGOG9AkIbOW5ky9gLKHM+ZR0BSj
VBF7sabSd/mcvA2pbcObCEIspd5kXk8RgpSJA5Sn4RVnyFyXABiM5K9KGLKc3V8/EBLrttIrzBa3
cQVrkra7aFi4w/kViBklbXsblANCyishGw5IB22QRxJtqLbFM+SwhqtJodVy2MZtNFU4eUz+VZOE
dEeFbLlsTVuS3o6pnJHcjYo9G/7rndEJM5xJm7HXRv52e3w7Xw63949ACzSQUb2eTLi5aUAiCAnh
DUtyNFYmTp8Z2ySHzk1Ii4Ugram8eDb7aeOJNABnEav0h+q5xRRJa+2rS05oM4fPRapP7f2X1DDp
6VlNeHpBVTFBS8LKCU6RTe7Weg4vpOfQ0Lw0tkeqG8+WYkhB6Ug6+kL3HaxpEfKdKk+gDXeS5xC1
mMj5WkDakA5e/VIyu68dq4J0qyos7gGcAwSFlBQVMJBC91x1eJzWEc43RXuHBtUrdcS5Jekpr7Er
lJVqWNyPz4uvdYnxZOhSVFRQZRBA7eVJ21Z8AU2j3SS/dK95T/6Q3CoMxECbeIEk8QLzJfSLXMe1
QhQAvSQ9XPM1X4ncUOUZICSNpiLJn1UhheeRitDotWbUzPIlvTbhvuiUkja9kF9diiZIpciAzi42
jv68xk7Xw/aCJJyyS/XosYSjFbRvCF1yGUuSIvNNm6ojKPWOFJT+S7ELTvo/VpAGyMIFeXndwWin
dUS0c25Q99wFae2q2MXjaIx0fM1K3JnkEV17nDLVrsieFCEp2zYoqUYAaSvGVC7GzGWhlQcZS679
jOx+yx42S4IUWjZ859z8Z3JXSWhV6q9ElsjjzJxeUwzh0W1K6bvXzfBzm/oUAxFdh6SjlzmFlYCb
QVKNYV+0+Wh4wrO17FmunM5HMEvgoueVMdIrq618VcAGBCyRkep6MZHiBWPNh1Z8M64Yvic3U3ku
M8kDjA+SS50kvQ5CkJHeJnOrchNIAaZVA1lY8Jck+cs8f9tCbx52AumH8UYseYlK0GzFGnqKDJOR
oXreCLY1YUfSISAg+J63THoqAlljz0qKtC9aNiplGpKHM/Nb7gXX6bfWpg2QUH43aYGJRtguw6o0
5C0gcAAcADoe34C+kSlBBnurEHZphN3wAEiVUAGXS3b8Cis2mJoU3oKMdFTGaOphzKfEdmj9k+6R
bNhZ4LUU6a6tdLNIopMNxLHvIdG8KeVX8npIKqzjJim/m/eMSNrTMqIFgNOcTkrUiqJnwRwgw8iY
XevhKoyNxgrrSEoju4yC4slDzRGyPnJAbsxIkhSfvFA6f8a3EUTSDFSkmcs4Jcieb4fkL6u+5FjR
t6PsGt03HsqQ+2Hmi3EhTiJrWnwtVkVnKbZCcsioJX22aqWZKiVSlkjkoAqIVyUQRCYLaQ6ahgJb
AR6RZrIQKOT/7BXTKXge4CtNIiD1kDKtRJSFvM6znJgllaNgrfsGspq8I+2+mvFKqyLBv3TfNKdY
2QmIkEmcUi9dbdsLQZCC2ti2hzzuPz/1yMDZ1wDWrxfrIUNaH7I2ZNgyQEiPT5oGylfdLQnpy56J
0OQEMkyuvpjyoUkhppbAE19pk5OSyDe4ounKkSu0UjbauB75UBUXpL58XPGOaiZTStnXERpJIzSu
HdqhdD3psLRSoLL/RcYXZorG0WktXUNDc7sWQ+lGKTRbXTYws+lJW1WSmfHrNyWt+RpETRKP9l9J
MCUzNqpUndQ8hbP6xcnPFF9+BhF70kSx7gsJI2T9g/B0RvWkA8SWBBz8V7JNSO1fxVVmVwL0PymF
q3TW1eldgk7v0m14ZIUVR1sVLWNgqTqZIJmzsrhmkyXb0piENewTXq57xQaks639n8H5FJkVw8VX
7VMy4KrZmnD0pHBIs3Jd6tEU2CR34/VX0n3IIJvzy0CA6cBSpF5ndYGhSL3NW2EAGuKtjZX0h+q5
JaSZ7PhXUgfoN7f9yH8PF1PmTyXZaJqk3Xp7meRZ5drewPfYoGoX2yEeD2+ptHi4wipFvRaHmvQH
KW8rtHdWJtvj/T15UQ3ABJnRhjSj9RLn6lEUnURkNIW2rgeSpZWr8qy6AHurUrUt/D0p/E3bFQS+
BV1AYr8g02h7pla1dbgd4KykLaztsmp6TQI0KU9Uq/KVFtukf+D5UmyrRmAvS4UrDPDJNfkxj7gr
CWw7Q+rtxe2MooqOB8sq1sfj/gQTuLycPp1aq/1nBhcpooSmDa519CTVSo6jRbd9yoIWT0gFKTkk
a9PzTC4GH/6y3d2GyxVWs1UqxKX2YqIfpqaRW7Y6k3HmKZJ2lhTrggl9d1HLr9Zk0piiWol90FkF
1i4LqNemo5EHFPwrzhdp6NRoUx2XbDEISd1S/qk0SVIwCfNlfIfTTpz8aihQkKlB7kvF610rs+VW
EJYqCShYRka5v2qiaCaowizyCLPqblPym9oFai9k6oxsm7ZE5IYEzGvvuOoeRytHErRyYjWSkLM0
AcJIIM1T8ctMhJBFsjPzQZcrqlUIGfeTvJ2uBQxQ8sk1/1KPAjKFrFUkSaXh0I5awxaizU/Sip21
DZoLiZ4rQ7YFqEvQS4s5hFnSaRrsS0k19Dl1Q2tQJfFkUeoMNFiVGksezH+N78lzVYlMvm+jk7pe
1Vm/NbpG0SUd/G3leDfKkemSwBnQV8Ullv2IoKtQi55qhBguTyX1ctc5nxmhNP34dt1lo1gIJJ7U
aciFvYB7T0Ky+ks4NtmUoW55WavCFTKErjmQ65NQ6Ox+/qfMMzLo30o0xL41bfC3KCp9NFunmHkk
TZnV/dr6BercfiEJjaxjUeypeF+izE46dCoEhWh+LQ6sGdGk4Wuvplp9eGilS9KlIxLa/0SIW1YQ
XT9Nk+xOJb1u549RWC0ZptG14FVphC4ueyaNcl+jvg8R3nZASU+9LhSaZUbRV00mxlm2FoAkEZVK
Is38YVrqkjTNiUIE+vFJ56G+6ZjWWAUiOwKcJHHe6jVFGVy0cONkSVRPswzkzvTaV6SLmj2JaoBY
HSl1Nf+K1CXVcA1x1VJl9N3+GC7nif/G1sF0LjsjS/6BsiMPqPifyaugwxKSToNpnJKU5rNwYmWD
41OSKQXSN9LmUAiHBCtrB2pVnEqQ3rz/SqMFsgWFYqvDnVMmLhkNYLqTsPPF6nuv1seoSDeKbI3x
taCQ0qKZ+toLn5JRQdGgdBAZIiWW1kut3Iuck0esg6j9nmX9JCnuV+bokdJKNFKCOkgg2ULjz5jT
ZASmmeDdh01pUjfrivxI17EqeF9jB5OqRmvCLqcKuUmQug4QMN+jpq640/KLcRQSoFmXQNP3GQ3r
K/cxT9yR992KeeAbon1+utPWlPhGhztmbpRpSCOAyGgK8SLtVdLn8QK03CRIkE52q0OUNQnSspFM
a2W2vbGOACENnQpZWdkxhc7qV7pXWvsefLI/opYaE2o6bqz24gsQNMmz0j/dP4NoAd3ijq+NCHWX
YjOIvpf3Rr6fN2sD6DTaR9iCBFBMhk2VagWIpuuJQxlo66HGLfPgGNvO3gRdUnSnS8rXGk2KlmGU
I3Z0lbonWxn17DM61NEI5YAaFRIXMIbwKKsYF2lRC982zgkSIVXeLEV7SSJfaFLI1RcgKRrZqiH8
DCtb4KyTDGTFstkGjDeTJeOW/xnT3pM4hFCruoYBMKlusVFmqD1uemTK8+vrdcD1G/75ZICIyWQP
I5dojWqZF7T8bvRu79jxtMj6Uk4tXSfgWj3LFn0x6Oat6ivBOcZJN7BWAlGQc6VJ45/OohVfqP+g
pcQsraQSo8CPICsgdKPHQF3MTdoM0rSd0D/RuEG2ZhfQZgwpH5jpNDpYH/YWxlM5GF+ZEGH4F5L3
6VCVawQ9dlrJze1nnNy8S2Y/o/vjF80fI7uq7y2CtsNPze0FkuV0D5NWty4aViHziY1oB3Q79j5p
o/OmBqZiMHTrWd6eiQDyAsjsG/Y1+5Pkssr68qs8czIMo1uNF5opBqQpWFujdXOqWUlwvxZYfrn0
kNTlTH6pfSSZqWAdGGuw5qF0nRFUZe+QioL0OGrzpC6xoTFjMkDFGgMEWrqPdj8aAErzWkjtWefp
lzGTABEi0+qN/PJwKhJd4uJL+DANzqh1Eft+DS33X8vYosfntMZBtYUO3fPFzeWprPxEulugW9vh
rdslwvN1XYZI50XqL1S7WvIe2FqpQOdTyVYwHuX00Z1yxcq6BFLtSr+yQxsZz5pHEPsmCehzyEiz
L7qGDVN0RU1JJTkVX9E0W5NLseU8BDDxVKIJmL4xuTIO9lSbXTAFL5/HzctLBJE6kz1Za5lqIm2a
BvsDT4NVrjENNtg4cQ0jN3FmfZ4kjQbbKiOaJ2rOTkWzYJVtzU5tLeMNvYytxiHXI0Z9eNs03lnF
kb95vih5vVNx8/JMOo5f1cLmobScbXbkrTg32wZ7nvd7DYIGXKsS7fnSmvnNLo4c3l/haGlRDaj3
MxKZ5uIepsG4eBjtRPrzh3mQms2kFvM16euYbM3nC42TceMY5nihP26Y0qxsPm2clR3vxIab/RgT
WjmYF1xNL57NC17O7YaDlD01/Tvfrhtv9yWNLgYLcdnmwXCozXV3jszH6XudKvme9pEGXE/EPg24
pseQu+bc4mBUxMG8Kg6mjgrqR08sTWVKy4HDgYfDOpwXDJZ+nqlWdjnpejYqG00On0ahPG1iNvT7
PR1mR8uAqUvxYla2jjOGN/vzx+Y94qfxeXebw5meqm4Q85hxcviuQ22ytYjOc5PDI++O2+s1lWzT
b6yr2dRzlZFnL+tx5r2gqU1405phPpeKiPWmEOGz9uOboJM3CQMOLKPBEky0Brq3ZAAadq/Yqo04
tBG9dkC9FEjtOWJA/UxdgRH32tgmdSRC3YlwoN3t8D2ODI/ksTnQBCJacnEmScKe9oBlrKaG1Gca
U5nGjpn1aDkyjShpSXq5Ga677efQeWBm1loTVoHX8Yw60ZOc55tXJOfFWmoRBlGLWG0kOWQkqRbR
TYcym3Sm22gZ0IYBb4+XXwgExM1Ozu+XN+0kJFKkaZFKmw8ZutnVBBNMBHoZqQmtkVjx8zrcgwI9
7d47zDjNcV1abyreiw2k9mMfHulyjaGySHnkOtKvdBQ4MognEOHx1GK+TjhaWueI9Zgxzc1ktj7k
gQoeWDtCtd5oQW4ekZtt0P3k8Zjs8Vxvx/w4wP1qHySoj3wb6oGco0tVfGG8ySc+PEyMyBEjTt2F
2kaGEPltAuXQBqAVhBZKK5go/HfHS09uy8pAqM1RbqIy08qWsRk0CylP+baT4zL5LTxuhpZOjvB/
lhSL7sW4tjGqk0YLV5to7nX7cTj+6jgvbLWcYkjACI21fTZLV2h7tVbeObAdy3Sb9NJbBQ85vVX0
U8FLCdNmaxuv2OQrvv7R8aSmUbALyTtRjR956TguQ9Mwb0reto6V6GZ8Wzs2dT7STLLpQiwsxPjg
YDfTUJylRTVZZiK4ZtE0C1yl4PUIKylXcYFgQVNRtz0BFklmFzy0pCjPm+H4kWIjwCepHKyZt1f8
+cMah/4LKJZC+J72q+1Oi+xOidzGUaJfumpbKoJ0iiM8deiCvrBv2os8aG65ub5vT/sVvl+lpCr+
DCtEk8bwzWU4bo7DqQdHTbnXK5wMiVzZJkwYgZfNR/j3DnnyEAD4tGmb0PmF5Eh1Lz0Ito1V8GDn
JZUpAze+XYbepRjWlOYiPdD3w/Xwcjgebr/giXTzgdoawSK5J6GkUaOkOY5GDXACJVAttXHEsHHk
kGlT8wDGg3zl7cQsOnRBCvmUhq0XNQ6to1ZbFBrpF9KYddlqU5vv2+NbYswtYkzHKR/hSceYjo7R
61WnQdLYIhxhdDgccjhk2/xrepfIb6+wldrPTTvRm+3tco/yBqCaunIse1Rj0ZW0oZU21SAqruzZ
md5NptZ+cw3S/PrrdNv+xP5pOzDwkKNqtNJ/QON6mrfw5NdFYRMDofto9dEeh9ZNMjFJfE5+ezxV
x6Y2cq1qgq6LIDwgnWGRYBJ/XqN1dBqu2DjSdZgipjsaIP04ln4tB7HNkEhmubbMWuKuArz13NkV
klhCIeiWE8q/ijAg6FdYynFfvjNE0zmhsysLhCMLxDbl7TMKwTEK0Q7NzS4DBSqFASGoicZ252zH
I/TYGcJweIJaMSzJOQmdTRJJA4mkbPM+FhbZ5zWugsAQw/lqie2QfvaGkAaTy/963t2va1x+SVng
YR0jNp/DZZdz0ToWuG6SfyLdnN6GLecKUykZYBEkigSjdMyHvV22p2tvI8pXG/GxZejM7o00F49z
Op+GjuVrG+B8eqZdtORP75v7KRzreDjBEJswhDU/4yUEEnFCXhe34uFVdBw/35YtT0AnlPrK2Dam
8mTQdUx5u97k9ci34E3fovBmsCvfogLo7Mc04x+zJJzDmiQc3vIsniLEvBMh1tBfkuMl98Te1Fpy
umNOmvEcx/CdaBsx8xhG4IXfMTNo17bJ6sAOwuprPz8y99Jk/n34ha3CabxER5J3iYXpvhOhgHTh
1DbSJvij4hdgmxUM3XCFCyIuab0mq5SxBj5apQN18NEKaujABAqle+lmupdJ21FicxxuUVrG4QEw
9qH86u1YjZQsJ0NTxT9DWUVSEgs0AnYMBexcOyLajESixALh1sTQwQq6iqAsLbsl9IzyEywnBFzW
aWMg5tbVaRU7z5zxBz/rwM+b18PPfSfwZqpgfAwpCktEzPB+7Hr7zqMQCtdtO74JMiDXXqEwYH3P
AGeYGr0u+PJxx+HTt8PH9m3o3I5hspXw8KyNZNJGtNHqFJUO9pymiuBnwjdfKCSDFBJv2q0TO0yu
zpRRCWIfpqMZNxx5r1JglKEyy7D9LAyRxRjpLli9w+VwS/QXNEOyP+iF1BdiXSjuoVpU03IBJXYB
CftuDhGgx2ayrS2zgGATvN8JKuk2xTznmsIYNF9/uQ6lRrP1MS6vkMBi2Aq3QUa8/vy89tIFDF/c
jyLCx50EZUGmnU0g4qFCEUEwxq6+H4NsCde2JRZw4u547eKJokWEJhsVckqn3Z5wRq02vJvYl1OE
cXafE1+wTJDpJywEeqpQvYo5dSBUvx7LtmhDrplBWQNGEgFGem3Il6EQgein4PSTlr1tp5NXOo4j
LbmEdhQd32c4vt9OnElok60iAyBFtxmOfAiZcLdvfc/JMEbQGs+J7e9/jE1boG9tzBcCUsgot241
rSCC5asxyo4EZsTBlqoSOerNVNuF54TEk2yH4nUSB0KO+T+5tRfMsOIQSJkS3CVOPfYWZZ8FlXRY
p5PU6iwijnSJpEIVyfrV2fpNkBes0VofPBQo6FelzdsaQU5I9Pbaeeg5cmCbBjg0fNsOYCMPBd2F
d91dcIPgawbrKKr8hk6U27Xd67Zdh6SBt7gYqcJ2sNncTOZbPBCqvJFutT72DBmqphef69C71JT2
aaAxCul20bkR7HQKRmvBnPX0+f7r+kh7onVh0xtp4DAIzqky92Zxl6WsRy/MGIFyyVjJZ2QBM3EE
yUKnXmWxdvh466VQG9WN9cHnnRMa8KR1J8CBUQqeD7Q/XD+PHUnNqfLV8tCvB1wRJK1HcLHflExY
Gi4WopfL8JBznYxR145fLkuckC1oXD9gj7x5QZi1OVCYnmX7a02g0LUjqCUSwAVKJ7JtdGNZi4HS
HzRDIbnJyOkAPxVoPhMFTc8J5XN4BU4kxOh4Q6/bSlhi9QABILE2L9azGJGeXndqZpDCCXQ4zrQK
eHJo8AuVHYJKSl6yIAxuTDP6VlSNGYSqOaJ+NLxSMHX2w3U3nPYJRhAooMdxEOpQ6jJwAEmuTSXS
6FDtavB2IAq5ZNqtttQlYoV2QUVKItDKpCZfebwytk5F3/ThqKJOeZwPX6UQoIy6L5hyEr2Shons
boxJwE4GsgoVxqCwMuipUSaNNmtNd9FRaYpKmQ0KTUVLbAQVcP7AF9JcnUb28vpIlEYkbFXP2oWk
J+XK6i8ItijnseUhNysTIircPP7HtgL3EgXu14M1iAWEhFQnNpONiZIFrYN5shVXI+Oh6b+36Q0F
Gr2HwfKcmQGD5awd8mwAWKIDYLm2AbK8W5xway0yUR+RvWM3sqdXOK4os7Ry9GbSexG1B0tortYZ
/3LzioLtckWpLUoLdXq1WlWo3rENXS3aEgAultauz+E3aCdOr6xL7RTJMkuBaAUvVYh5DFWTuiyY
lKglgbIWxVore0517Ln1FfgcyUm52i4USIkptVbGKbQb05bajfIGIHCFJryJMQvCRVMhNaLEeAlR
tDG3CgWSK50qySo5BFmFwgHBv6K5j5a2W5B4OOWEIshDNXbaM50QKGY4lSXVAAoFQpIWGk0R4BoS
mazpTOusE8Pzxo6Nn2MCGX3FFUCwQIOfikeRqSC/YJxyZCwQWZgz7AaFlyqai48l2s3YoFZ16yWU
RcTiXNuPrjqyAaRDaLEye7lT7MklrRInLoolJL2Ci7q5TZVtvhArFhVO8d7bhgUczTZqWRcn6VyA
TsbPqmxHpFY5W9HcCoWniMTpNpkhQ8PrbpsUjvyWtpRuGdeyY1yvrgj2HLmnlmrZ9XDDNDoO67fU
yenoEtVmcKID4dJogiFmtb6kB/VfYop8YbGJ7tP5su81uBL9XjoW3arohEGhelCCrxapBkWUHVvD
t6gwlvnV9h5KvzFEl8vsSPLsSHaLzY1bD6wbtB0nVgVNBEzCMZ5qx5iKD6SIQfvddt+1KQxbkzyL
6EWu76qC+pgYopiiCXUhVW7c+owIJKuVJroMPUGKEoNVGhXhK5EKkt5Hlb6lHQXWFbUGCQXeBQAN
0OZS9cIeD23eSZ8hoNFZqsfLilrDeT6cpVEzlBKviO6oy1R20UtlX9OsFaGA0hqc6WrHgNu1009U
r66ZQXC6MxCTrBwNWHBAnGl+KzDcrfqqEEV1eTd/+JE+DMFV3dKoTdsASSbfLgCam/cvx93vMEVQ
uj6WDzNXfLvE3WfXeBRIsTCg1xPYrHe+DMpyshaWEU2x5ksnyVvaFdi1QBAGJyGMWYJGJ5m6CGrB
SxuD1ivj+5W1VGnVDLvxYm4dmeCo2uWqiQZsR7Aad2Mo4bGtgpo+BwqJcSKPJidT7x5ZAbCEtaKV
BD3wFt7FId7lqR4PjztF/oaWK50WXCNpm62KG/4g7/iDth0UiIQmVN7N922nxt0KojP+o3kAag6p
/RptoZAObZvozXQIRBxEoH3eux256V7TedOPyW2Itly7wk4kGpePqaowU4V53OC4Mtk6aR3cIAeq
MoQ7qXTO9sutUZIVt6uNG+SAedGrCTEIDnZ9kwT19edmXdyAd+IGMGos+FQY1Slj83288UFssDpF
0mm5JZoCbnWmYlBruU7+m1vdRlsgZ7Qp3ZvIFBzU4QGtPCAQhJBxvrJNB+ygKuxKP0f1/BxNFZUU
8h0i6tD1ZptcsIBkUbqyW49SIQ/DcLM2NOkFgv0I0/45XQG1rrTrIRCJoDe9OhlEIwTE6pXpLZ2e
/9ZA+95sVk3KmKGafpaevqIdnVaOqH4PxkVqL7Dbnr5ve9U2nlLsU5UMEv1UR+Wp8ngqPEYZc0Q9
drqIoNeN2twvh9zQESTpww6nlXcP8whlvzgMelsKTjEq6Sy9eiyGm1w+NKrC3qzHzSwqqKDTUF+1
gxq5w18wYw+X621zvN0unWjvehzToZpuxrqFLij1jyh3W4hqBBC3AwHJLbiczzea2BXRT3Vmh4Oj
a2+6R0dhP7HwvzXdqBaPgmJsVVIp7ySVmk5H4apwFngXhnHUAGHqkIJY366bscNRr0fXjy9DulSs
XbO+IEzor7p2t7tn0SE7ooOt4RFUxlL3QhG9rBek+gVbFX9E3icjMhVb1i+qKjBsrWklkRWidRfu
hJWLX+ixYZClaNvNlFMZgArqf5iaAEIm9l/YDkfJcJJIKXqGOqCHwmBlNR8djFu/4UwFqEUPDo7Z
Qd65FN08sjXzSipPZYbCzlItUOhArI6kcMSPkq0c8dAZqiCI7rpzDSI7GuQLdckaPZIVK/tRwTy0
9a0jGeIEoSjsoXpqZJcLswpuw8122Re6uwkUDWknUpYywMNUB7iFdYCS6FTz6Hwae0BtT7uh0/hU
wgha5bVAnInwFaZa6eFnNSCCdlsEbDz20NYMVQRoZ+mG7RUqAzVkLewi0mx1yzRFWKZf3R0dxq9X
oxcCRWYU73YHgH3LlFtV22BRjp5sw6ILHsTFmazdN3uGQqKW9fMeZY1+hocqlxoEIgVhKTx3wMT1
UtSsmHlFMBzBJNoph4vHRQaUWp/foxGRWaopemEY5A77dnCp1b4Qdg0SK2eHQRCmn+s+CWlspPgn
IyUtFVtkv54vH9f00en87fFPvr0fbt9uw/V2OLWXFamIa7xqP+u+trteP7a3y+HnRqSR9sPldbsb
fvtJLjNtz8+qM8syct0yk3fko6SJhJCWEfv0Lz9OFtt7DvvU2nt7OA2X5ulUUvd5WzFIFl3iKW38
sVDOHgr2EFjCzZYYJ75ch9umLBMTkW7nT7CIfiwSOV6qxT62u939st39AivYxwoxs1dkSno/nPaH
zeV8296GPfhYPT6OO1H5Wnfnj8/A1vtykOvm+7Vc6xUsyMullHT8x4KiXhOswsq24i3zxyr3cJyx
29P5cng7nMAiolxMbOOqF1ebv1/z0pq1DvXH+fyx+RhO99i8A3wsWh+XbXzfHu9D6lAKLkTz+VnM
YhGB3tiUb2O5nBiZZ8bK8TBgCflE6onWv78lurheEeeKIkfMw6mTmXPfhkBO2/zhy3b3e6xhCWRS
zaQ6bn9RBJeXV2X5YjZkwt+ooEuGt8sQDIfj+fQWJE34uc1t+HkLf93sb2DZIrYiRj3y5WfYyucQ
ByYPm/vpcEP7cmVfpby4XuB0PuXTgUXsY5Hisc1kJ/lu+Xvd2sT49Y9DMIYSEcs9WMLM1YAen29B
wOgmZLlKGxVWmw//GFtwUAtZxooOmDgp3ek5KJDNx/YzFj+lD8O9zP7h+BNXemleXitmvovplPN1
6O9FpSxLN/rnfXwfLsfeWtw/HbO1VrB2jtvT9gIWMqsW2g/DJ1ikkGBEi6RpLyLBChUR2koALFYQ
YIXC41HFSeIgn+G74RI4i6bn8FKFiKKWUaO5FEyizWgSpc/ycIZRf25Ow9s28ewfgDqr2xYLQbTf
TOujU/I5s5p/mTY2HewKT8aqey6RhrL18+trNE6mnYCF3HyhvJEonqORFuRWZeCsWE3M70UXi+B6
qK8GLCFbMn7+REma7d4Px/1lOK17MNtSTLWE3h0Pn58DuHLO5qSdRVvF5aP6WnPGwvWRREcJsiQf
sBUJH23FBnhL0E9SZrzf7UdQ12AN1VpjeYjqrcB5xPzNgxv+P7K4P96jLE8f3U/b79vDcfsSzMH8
z2MTkcNueztfNueXa7Cdgw1B2TVS2eIFRDNa5fe7DK/Jq41pKL9fwdfFLIz1ImYkoLyP/Xl3/4io
4fG83UcO/h6x/f3mHjj5urscPm/0wqYyt1QqFx4p/rDfB+I+vF7CO+RbvP54HU9OLyeLoyLjs8jp
XYbr4Y9h83oJJkBvDVsZ03GuWr6p4eNlSId7jUQ+vswmCIZN8qLB3YnieMQIqRjtq8vhe7TbXi7n
H6mo+uO8HwjNkG/KzZfJB3uLPtj2Ev4r7O5vgUTyhW/ulyO4pcrEji8rbGbBfaDYy/nXZh9oKezo
9PkZpMsPeh3uWy7V/XMfD/bjsA+7CibzZXt9p9dwlcNR5MopfBlRsDQ9KDiGwxVccOUxJANWP0TT
5bCPQjz88THc3s97cLt8bvbno/ztmklmvBj688q5TEaVejzO8PEZTHv4HMK1ruD1fjyGxxwCF0zU
to9x0csQ2QysVpzk9B//2ErYROakik7GkyWbosdb5YzVjLHLcLtfTptw14EV0mUFkglu62XYhns7
D9dTdEC+n38fpt8a/4+AAVXFxBEsyPcRZ7uBY1foQjR4MkVn0tlsXyOA+BnRrnETA7hBXn4/pke6
LJGC/D28JWn7eI7DNYpjsFLlTVdkMYrNy/ARaDT813b/6xrVBnAKMo0W77YKR4Wd5LhE0Q8vQ5BL
Q8YOru9D5MJIM0FCnF/+FhQ+oGPeAnrmD7e5/TjswDZFJT/9w4QNptTHYRLlwY867DfBNx1O18MZ
0Jwur1ohcw/pMN5ksIo3QeZsN7fz5nrZgeUqgKLYncvlPi/nYBoFrh2pZ/i5Gz5veJ9yTn2s0hnh
gaIY6l29kC1ayV9tzqc82vDjHggl7KQnVQ1rKYvraft5fT/fNsFiG7aXSDWACyupFHEVPor3j3PQ
65tEuskqfRgjm6SrAW3VCz4u/+Nwva6RPhV6mK5nZMrPS7BeAl2lbyYdPT7f8Pf79kgZRQmBrJGL
wlH74RjU6XSwSLDhv4IA/cdxYbBe0zG6vQcd36Gi+LmuHNDq85EEakUUT/m49uv9hb75vO7CZWcz
i6Z7KN+0/MGuwE5Ey2rO+oH+aum+2PHtww9vj8fzLpobu/C3sIFR9IX/2/X9ftuff4DN1M5f2cxk
NwStcTxO13OgUR+pa3/EPwzGh9J73YZ/G+zCtLyhJg127kktMDT20PwPlhi1dcKxwJZkC0tLH51f
wT1Ufl0Mz4jRQEiyoktnuoI+Kvnw4PD0wtesP07BNormKTiCb4V0krE9XEZZnHMdsIAoe4rpF5I/
rjSiMfn710MKTg67w/bYQQilZguIeHQuTvfobd7Qm7CWbLhWjwtu1rQuYyTQ8U5e76cd2ndBXFL4
zYzubg6dHIKj8AkUXN6Fhu8LPmQtxHF3DobP5Q5+US0x4fyLQ3wjfNe8JfGq1w6/HaTEFQpztiCd
Mbh+DpsGmKjU/BlNT8cNptdt+OdktUcj779lEn6YetsLsC34QvXqpt0TiOnH4RRk5iY5y8AX1U2X
NhBUsutIOy/I5EBrm9UqX7astVGEQXrLBoyZRaNG0Gt3POx+T/72bBcxzTyI/Ch23yjayFdpWzEu
6AVFwRXRqWQjRcmVQY0uDiFbgbBJ9EWDJMfTEjJMB4DlNGY6bbl0ZKM8Qowc6FagcfIPorN6uwA3
WfDWi8adrN5AZdjyygxMSMXmNXhACCiwLSf/Kw4UIFYxd+J9w9WDllq22+0cyshPtb3dtrv3CZbp
ghFct7h9eu/TOQixX/nZ4/++vW9v+eKi+4SxBVm5dsVWGfvJZ8An5QEkJuv5KNy0FkvbjDo6OOun
21zdj5zVg6WkaT3zEqxMHBme+cf2gnChcuJI+2NMaLQfRgt6lJ6JeinRnunPV+Hpx7TVeOLXQ6A6
DBL5We7D6FX//R4uOllHD0r7PG53QzwhOJSv0Fyb2vml1UbpH8wJIJYcn6MzcmSiGG6OH82GSAB+
Ya3Xn6T65m/XNIkvGDaVdzHCOPmk9xOmVV2RV6zME9b0ICGk8niRxjFBx/PKGc7kPu5rdwyu9TX2
RY2hFQQa1NkKxV6eyeUR/84IL6B4Ob9MsUCsokb+a0y7iGmjbzfAlFWyUAV+p11EWzNtatKYWJQJ
00r3eYuK8jiR6ebv9wHpC9nEMkc9MRnxtFOU1ahtAQf54VKkAiiMOuHIlNSIhST5cTge/3k47f9p
CMe53pK4AsynWq8+WTVTMC8OYEnS7sflgMwRq1spUYfawpiqnMA1+zmyy+tjVpq5B8SbspkUcBYz
6+BBNudiEgHyqeSDfsjKDH5PAOzpnBgYxa3402U/MjIOkTtzcO0RKyj/B6y9zJQwvgDtq+8DQWT6
2sQOpIfPNDadXE9WdmWejjM+ZbXiI6j4iEnTy9USwT8c12qxYEyMSGKUVwmmrE4fN48vQLJKUmSh
Ixa/cZ0aBtOLVFoglnQ5s9xm5LMhapPP9+11AOfVLcCz+RyncIUgUVBWRqqPGs6PKq65WD//UvJi
QuQi3tGIyKWH1aqfwUzMpHJAiYymaQKnWwIfOTI1jyZXCQ5VXt/FS3LokrJdAR6vviFdbigIxaT4
YmyzLAx40lQ8xFIXv+WmSjpH+ttxhA5392OK22f12CP9Wl5W8zRaRy+u0Wk/XCCZ1AB3tA7FU/bY
Zx6e9rG97RBj6hZ9RBs9q++XbX2bG5zSWQXD0yxxOYEoP8MSqx6lSh3gLIql8KeiL+w4vN7AJVUv
nFzBZ8FWlrqfYrg+pUkzBV6TV2umSvsnUg4WdvS8IkYGDyur/IPKwk/++eUeNOgfw+X8EL3gzsox
XeQ0N/Jr8iKz5brm6l2dcW1S13r6tlag3fkJynva9McY7NrdXw674Dn/EQGyqFBfj8GXgJaHEVX6
RzISdQ0ZV9tMnjhg/Mqmis5NILopuJSYJSZSv2+jb1NpJ3BvshXpfthmHVHreQsc61KoABrJt6m+
0NVCrPVYsqKLyFESSbB1O5RtHhpznx8b7QvynLkoqpTklI45JsDGbOkkp2M1NaYtqZrv8LG9/r6S
ClgL62qTOXarAp2rllsVvKAhqZ3XQ0J2qrTwDt/4CuKJDg632VqcyZdoPEHpLpVoWYkxF3AVHdV4
RrHR2zfUt1lFBX7FSxohjoc5knLZn9gY3BFrFq28ny+3umvuKlrwrvV+NVlH3+iYYjjrbBVrW0lL
Ccf/GjdP3TKS1xVVtHokRM70fDl4x7OpwP2MoZSdxeTT9whVXe/Xz2jRADOaVWo1WxFjyCp/+tVD
VgIm2Z5ipeIHLleVd5UnBYwu1/lzu4v1GNXaf8SBbaBsxjfR33Ll64jMtwy37gmBlV6h5Xm4PLLS
V61YJTPmETayJXiinXm+30DhSBY/mixbWm5uhcsrag9appYEGbw6Dj/XPUCNFtgHmFI7zZeYO3MA
ZOpaSTwf6Vpj3RPQNqr1+A/h9wW11fP0YH50JhvVipzNpF0wFldJubIZG3WgNYa4045VNc0KG90I
lv7MgMPw9/vh+/Y4YfqjAs21rVMCf2ebFSDOc7cHW0c2clB/ir+s0ozVI6SJLFwilztCqwguN7JC
U0XSteMOY13aGrKQrEqqLJkMTxhEujwE2YgqU7Yi8TY4kmLWwJWQc/vBAO/kdrscXu436Jn0HbkW
ygFcwwqEtPHvdsS42iZOfIuuIVjeMRpfSvWhgwME2o2s0lW5TDUjC9lRccU6CdIMcT9L+FTWl/9x
gujC1oGsl5UkiF3hzWiP3WK/5dUONhNzB/vJoS06tyNQqthChcM/oy0xcbUDuBhypeWbZhgIQqJV
IjNnIuElI2P0XwCmgRhZZalzlhpxMIu8mmxsA2LWc5ki1hgXyCB7wgFHMRzD8+sUThXiT0Uraixt
GI39y3Z/uF/XrWTmAddxncDg+1SqsYqVqvzlcSRqPlEs0U1E+v1aUewhmEuH7RGoU98xUOKdH4eP
R+Q8wtMgFGykNC3A6hk3yakQQGaINvCV2uZszrf3GGy9nD+R9SVb3uS0j6rxwSgk0G4qTZDE4yPR
NO0H7EG17Pisx9b7PqLKGnApkhX+FKRQTtlW6ySzaaXWP9b8EsbVzEXoqEqAAFUpZjaKVjs6Bl9V
PnqBCI5OY0cS+cqbjg8n48sl2Dt8oY+Hl6oEP7xkXuN+2qRUuivjIMwqYzBzUhZinv4YVwha+up6
309yQMxLHqfvhUj1C/T3ExYlZpHVx/fc9DYwWbixniU2g3KLBXxvAVtOYJMltDiB6p1AlRPwXIw8
20D3CifxIMZMHLtYwHY2YMsVRvY0ZQOnmNzwGdMRrkMi0O/R++9sRxSKqOK/cbn9eRddvdihDm6I
lw3x6P7y0V8tR2JdsiqvWlmTFVniHejqTSL7svnnpvd5dYD4d66XZN3bvypvmgoIyyWmxOxDYM0e
Z0wRoUjYsWdTIYsfw8vvh1v3GXy5BK5S69rC3El6pJD7LpY54I24shEZJf5jlcM1oUed7yfjR8wh
4vogndv0hUWT/VMoPOdvxN/vXocs1xGFjls86beU6PWf/vpf/8u37sUW8qiUVVwp6PT33m2oOXv5
J9bo0GZ5De7S1JpCGFF7R28j5uyPnTiuve2U5Srv+XGWnqzQFYmVRGZqK5/HbUzGiHD3/XTdvg5d
7VQxopnJosyGvZeybs5DlXa7HHa//1pBeoWRq1jLYwe6swFVNmATSvT4PKj9VDTFurKEWUgxXQ05
VRFP3LMQhqInDV05Q/RvjX1S0fh7U77XyX40SxXZfQVTjlDhqY8FbPcKKhVb2td8gU47TFS0VZVm
Vs6nu+ejrbCJTjsiqcjYlOjIW/qmswlu52JteYqewjJlD5WBW+isq/Rt2UDVpqZsoMdrrKJzn4Zf
E/qudxHlOSsPolL+nX1U+i56oWJp0cmu9aDnJqVYaszeFnyxHRJuUERGOH50old4BszPJZ9eHqJz
C5WeixEzzuSz7OtvQkP3wPeUpak2kf6ojJfTy3m/QgMIPmdu9kTWHR1U7UGmiWS2sqg//nZdJ2N4
RVUs/aGWd9ETgpYyWyqiwJtglSpIHZeX2rBH2AvOcm1DrmcVaEpQfd3AkJTMqmi0cyeVXWlmdvrk
P3b24LALPTNMe9ZKpSdLSnhtL/VEsJ/b6r5lr3Tuw8x19VKK9/xpU/lu8tFstHaHe2fgUHzzntCw
ZQMyF4LIZ6HRMQgYRVbFh+4pIT5HBczS5OlIPlH54FXgb2YSdB35chOC53To+S56b6nM/B4WIkt0
NaGTtGX18ZmSXDteX+XfODc3Cpq2X09gYG3QfVZVvo+5I1Y+GeO9G/GUFM8LdGWws5Qt3YaLOpRu
KOFVUVmP1PXc7tNP5nNHYpQ9VD286ivpODhm/ibqCcHrCAwxRxYqrTihsB0irQ4gY3PkJ5HZ8x8q
FcIXcn9kkx5dF7KKiKplTyBPz0ySWOz37sAUkZkgDt82knqkJOe4oVzKqx57Vr62ngEakw/Uewk5
fwnxJPE6tCgo4POrTqkUSwO84Ub07AmLPaHuAu7ZcU/1mOn3N/Hf/iBKB7ItIStsPsZe2Bj92F2v
54/0SfhbnqSbBs19DPvDloqm2DoPraryvV5TEHA/7I7bqXYo/KN406+H0/YYY9CHjwMoRXdVqmJp
UBIWyYXssVHm9nK40lFZx+qc3uQ0jv2ZswhJn6Q+lFNz089tbNSRXNrpn2/aEejUwG6EKKJFFd/E
jVXcjUUEvcgIxyVwOwraMXf54/zH4Xjc5uc4X4bxL8dvaVbD9dv2fjunP/7j4ec/EpeY1h8957R+
/OuYQxJv4BudK5I+1eV8lQxfbuK1twH9WCVBXW65Sljg2ydaYUSa0gpRjvLWCnEvYBO2LOEeovh8
Gr5diEhh/uXymXUPfDtfXuSNK/3pCK+lT2MGi2teXvwD3145e4qkTTmC1x3YdbnxGAebsjae7yvQ
DvhlVwin4B0vx/P542W4vAGKVo8Po+/kp9D8hWw1nXddPksQg6/uOu8bXHZF5PqRhbw4cY9QdVkk
xfxqTnkfDm/vN7SDio3jQR5Ve9+C9XcCl+Xnb2XAW2FCKQsle2dqMfujswFdnjkNkBg3sP2kQ+95
4xVrxFEdtsqcQZ/p1iU3zouf6lloNpgLCpXRjVouMRyP/ceWbsUhXhFz6Uo6lBhGLjYFGkeXTSes
SJJCBbN289dfzj+/XQ9/UPlm+eSGIvPlBsCvl8ergvsNtQKWqGSFz5hZKmsd7ZfcD+0v5yOZPqZ9
lRtYhdmChBout/DlVdKfVuWsFYo7/mggoOs/vwet/7sAP85bmUPlx8G+uW0VqsTmF6f9P51/XP/D
z8Due3oB55sJm+W3wbbrzlB+0X0ufAqurEoorm47fxl3/U/Dy/1w3KP3sq3qo6dLRyuwViFuObii
PxWMfvG/RvSqd+u+KoCvXrzafvcGnPd4/xrsn7dafuRP111/3XC0eMPjj8f95xtAxCPoG0h32N8E
bxZpPW7gf7+c75+Qfg34vhwC7YC3Mooz960iBOcXFRd88RTdLYim4MpbCJcgwE+beQWNXR5/fAF0
g6rVZuwhAdILILnXfIBkYv1v9JydcGZF0+867vFcQtmVdo74V7c+X5Ae+nlNU3989r70albqPPaP
Ll3OCWbsERgM8u+HU/ri57fb6/l8+xY78L2dvsXBXD/buZO8XbsWKf/bLf5Jb6NqulEdIPz0/tth
T/5e1VKguvfw1fuw3X/L+01dAIgFBNfNCpSEAHwbm918Ox8P3wd6667Z6Prnt/BxzFb9HPfxt/s1
dksjz8LbJXt5K7hondXPX7pyZudkSsGPV7n/ddp+HHbf9sM2zuoAFTXaV9mzVZfQxaHy6GXwrL51
v+lZ8wKXaEyTd2KaMul2eTzNafv917fL2wt9NfVQAF8T1vt4qRRp1NKo0HL4MN1q2cAHuQSvOudE
h0L5+knDFSSLlt563dWuZLEviDPeAH3/dZZ/kcgTR8ML4FT13+OnX473AV++ca2GWZk7R3Hycr7d
wBA1RtWIPXYRB5Wd8DasAlweCKHzDqJZW5az0b/Bat6gm4qASY63ab3hr6CkAoOCM2hf9aWo7Ltx
ExGQjWXtqeNkWPP+cQI8yeZd96ZS2ceLbK/D8QAqCFndMqDMAJoOlZz8b0Dl+EUbNduQ2rv37YWW
2nKF1P68Xz6PSGzL5iFWE+ay6EsW0Tau8HHY7wF/WdfWG5k3+9fAXXtGYvU57IDDGvMJ8waSwl53
CNMc8rh4iu3f71tM3UbNFZiuBEV1E+RRdLNRUfWYXZqWptUUs35OZPjYptNf739S//QRTMeMWPcg
lcCpjOFJbe2O2zh2kvi2bjxrapU3qSqSEllLVz4RMk2JzWr5cPYMNCITkIlmA62HbI8tySmIM0v3
5gLh0JcVDy9qKVA9fP75wx6YbM3OsgvGeb3v3q90eC3wTRM4WKxyGfaY++paMFGLsveFMCRtJdcc
tNoSyJ2drNVyQL012xU+7LasnT5/0kabbV7pZaGtgXZsFh8mgsIWZ7v1anqGDDrT9y9arTunM6+x
tOt2zPoBXaTfPp1j+1z6t1XbTn5EN0jO9S2oYmZfgraehhndEpgti+hCP1egFzFrDKuaZi7Yxbyv
q3gil+vhGDywjpPiWi+/8LWQMtd+OUJ6TvYxchETjSJ8T0p/1nL4qpPchu0Rn6PdJ2naRIqJfktH
AjpIN+Vibe9vOy6fFYTTc5l7rRRFC9XTCFgHi9qWqGqrszhc85i101OLkEkf9g0SRr3E+xqtxhlB
TO/rHN8KxkxBnBqPiEHHdeBBPRqiyKSallCjk/C9J99xzSmEWMwkrCVbH1vijFIk1QPQnNR0DrJl
Xstz2p5tNj0mjElaqpg5etIUTB3TNqyyiK1Upu2TgU7CY4yAY/brbBRuLYEw1mhEh7HreXTF2lte
KnjYcBeWsLHfgZUrmCRIed8Bcar+jIQs6928kAt4XVbG/RpSVgtgUzX1fAdIMivs3O46QbCaFmBc
2bldP1Gz1syCTMvJSUK2JdcdHw8aTKSnUvtZULVx15yaUr1Fx1cwrPYV6u7YjxU+tpczaIbCaj5U
xcRPMYLIisBSsy29/ri78fZ3yEhybT8zfBeWQZcvGCfEx2WNfS3EvJuvZA3MqxMhEFx1DOZ89R3j
yLXa5M58vZ5AaCu2Z6SiK9OFJGT6BcnC2lURS5d7uoof7wcU3PCcVq9r8b+mSH66A7hKoEgUgIpW
++d2H0smEF0bxkRrgkBFnDAIJmyrR19ta3TBK+GAxRstvuJH0odojlSqza2OcKs90YXNu8YFXsLS
1FOAE/Cmdrl8AQIxzC2g0CWgtcZ2NozbpqyopE3HftSuNXOlYvIsbi/DkWbv5pTWBb6MnBjKDcoI
EPmzvglJ11hy5/KA43FdCQMFESNJk2XuCdP+i2tpyrm+xyTtqKh6bbx1xbRbgNtmEcbsQqxct9D9
Wud07O4aKgIhdhgtaaenFb4aITZaxHHC+noALLWoJnG25knye3Qwct00w9/X6ivNCd/lG3q8YHW1
PdHLOlVrmOdECkBldAZ5SGp71nLCaxboKiclyJcv2RHvgQKHII6A/ambWpYAHDeJMMG18lZPwErb
THAdrW0kiMIudB7Nmp7SmUtNQVqlpiWlllgPxru0blkgc9wwYT0kamhamXd0dLz3OpUOmWm/ym3G
EZEqnykdzi0CktBjln5FULWXfRGcXUfgoFVUACJYsuktLh0ukP2gPApGpgKjb9/PILq3DFE/ocHH
w0fHnrKLHCLX1IEYO/KMjG+N1Lml57QF8m4jgTXwBOnByBYKl9CfFSKUV3SQqn1tZd9jnSN5P0Wh
l9fmJAjQjuE4kBtej0t4SoubZeh1IouiQ0ndNQxzbUWyTDakVXAzS/3JHKafQxNBuv06WL6KVaXe
LpKWkgOi58qwj6JKiUV4AmcZMI4IYhY1A89JoLk1pIx5mvN2q+WVWzDMWRKRXuWuGgGk/LoIiemF
7PqZZYZ51THwcCaVYa6ZR5QRvSgogBFkCJs6yyZIRlqT2eKjZnk5A9WkeRP0aKBInbw8AVIf9sPr
NvzbwIbTnWSD4wH0a2dWt+J0DUMBkJAlfLM1+dPcEOGFig2Rg18n8jXBZJh6bZjjOPlnAnVpp46R
xuv1C7Cq9rbnJaU0VfCSEqQD9Qwtw4ReEdxCEV/RzD2ZBwbAO+g2dPccryS5WdFoycTN0VQADM2Q
LFmLdWjXtlhLeAchXtwQ9/COE+gEJ6IL84A/1mjMt5MQm1gP7SyjpPOREIfLDnWCZ2L+mHPNdluL
wtWgT5UT+lilhydzBYTD08UCCe9XZOoB9gjGip5LGd10kaGnHujbIFm3EtVtV6gtzhIzbICk4wjV
XWX5aEZny3byfJsk/gQEYlkjeDtaMtEEjqgvC6bMU7SkR9jCoDgutnqq8OsM3F7lP2gJINC1JTWB
nFlz1s7IWGn7NFOrucWqZooKRP2460DAJfxLvrttz9leb+4Z5pv1lU2DAbBQM9L1DOvTQlrRWmoF
FM70Cg8sZvsBGvBN83lW2dPVNfX4aVFxc52qS4NTup1IQ0RgSaJQrQ5FM3aGEkmsSSvqgIXt0AIZ
TqfhNiIVd2YCdOoHiMj4AlXGOAfvVY71CkIMMwohwhU+Djletf2DpkVIoy6CSCh/X4W+VeZDdHdn
s0y+pR5Q1804JhIgLqaZpLxQ/p1XYU17qqJ0/L3wHV8V2Q2Gte2GcoRe/I3LlhFV5Tj00mdEM4es
aTnQHNZMk6/uoFOxYZhZg+33cpyDClnoIf/seHcYnTejWY1cMloLMbJmG9crcNvG3uaX0IP2wyUY
UgWsBKfreWtFkWb06QzUn1Rt1KTKAgRiiSsgY1fXtYbzo7rWVfS8wCBrDBPboTUZx3ktvJZqn+dp
2D0u1al0ZxqFIWdCHpvhdR4tacNEPQMOL0kAt5MNyC1rebjPxgcCv4Tp5qDh9GzDFtNV28JkFEkd
UqLQk+yUIVoQvJ0/tl99CgJzCWIV//AiPLWwvXCxFV8XYwUVSIGAIOq2qtaEC4RarUBgtVzRJACh
yOHtNVnJjGu/uJXN+v5ZbA90LfFrsrr79VPBG3GtQPV0iyC+rM2KFLWOB6H9CpewVzsVLoMRW0ka
GZzB2U5aMGoRYZidm3Wl1qeR/0legWh79e1uIaRatES0+bKmKYDQHe8eObSGOU9c//saLvSGzF19
KuEj9QGj8xZXStJKnVfFCS3DAkgDSeRrVVkjnYescraScSCWHSY6qWretOqF5mKFAU7SZB7wlKpI
JhrCRKRufYfyhCR9X8lIvo3MXNYSgLdtu+S2pq8GNxKJUWyP1TkunhAj8Mc1p4vE1qC6zEEQBSc5
Kkk3MFh59coRxkBNOgircJ3sdXh7VRC/TpO5fMUKNGxp1s7rd1Ge1sIQla2ie5jBJ00zjv6+9vq1
IJ3RDtNzq5Dtu7YqRjCCAZb9WEg9vuie1wrfdQSnsu3wSAyFQ0uaMbK+cJ3gMgplR6/BySpfJiUV
cSq/ml7BIehy388GWEAida+wVXrPUw11VlMRtwa4Jc/l33Sc5bn+Ozno97fc2T78RcQWRM0VoiR2
Y6QmmlXRNPVjstj9TVtPf2ZGuFPocTqwnz5zwitD9LrnVQ/G+GXdd/j+ZoxV5Gd2hHDSD8a+/rrs
U6LzjT5D/C7GIcbJWvFehDf0+VT1c+Yx/Th8pqTT9Geuus1wLf5xLUJZv5H0h2OsNE0USlATLwf0
UtMX48ZQVTpgaYwfvuNOa/pirBXEC3JppXPEzANeISrp0zJBN3zqhVEWPf4YAklf+tgavmyWMfp2
ZPksHterx2dcCqnRL46yUugRl388pAtkYwCZVi/Ja77gQjoDflBLgnKM8xx8x8oZq+kE8Qc9Mxw8
hx0d+2ei4zYIS/o7Y4hbFdJ7wIq+OmEcefG4GmG8NuBOPZvLmgcvKiUsYCpd8UaUcryiVWeFBpRa
HTGOIngwlTLSOEA3The5EV1nx4vcYFqCQzo5v1U5EwECiBxfHTOBrYXMY9tj+iUnhDxt1pQ+/Ik/
lFCAO8pvVlMiIrEyxiUQOuWQMbPQPIhcWg60hvXzuynPobQAP1cx8ZxwOJNa0h9OVU2JVGWtNTgz
joNXVIL4UGgk/3WRGqkxCGcPUpVKA2Z0Us3F8eNGhdUGkbgvciMmHFg3ozcO6M1VezWzvXIlwXNM
E1EeuvihwpVwCvBxudPox3hTHkNrtFNuK86IY4CEnJsbQFdxQZgbkgkLSI5XBk4cPlTEMQtiDvCx
rZRVykXhsmg5EWwcpDtq8lHpXcp2tfb0dkUldeJ/HlRglQWqg3OKseIxwRnNXAWYQnSaAcrxRZRX
s+KLIgesPCNXXkbOprsxHohy8XSrtog5xywQc2YuBYpAdhK8hrWUouMqiHKky3W5oDRsiBUx4ATU
rZRNZhRDZrUmrEdnLNI43BA/J5QButzWN1pG+iW5agxgRybn5tjju8DgEl2oqISOqRkjsCVQVbYy
yOf2XxxdD2QcpxwAyTXYZmUazfWNFZHSflJG40LxF2NTIZPRME8QqNAMeGHTOLZnk1FpBaxppykl
Fd0phewwpZdW0fzpgSBeysTKKmLQTq1+c24VWQmkt+Vs7txUVopnCom2IqCqGWvxNXjQ/R7Ymoxw
p0QwUYFcY2JuFqvKDmMaPIYh3TfuNsAukhS9BZvI03TqbOW9m9rO1NoAF8VVpkZMQrHFCPfAdzOG
kjJcawWkqCHfIWIzyHhTpBMug92HHFvDCSMsGJrACLMksBEuFNyoqWhU13aUcA7t02hPmsRB6Tt1
BVYG5Z0EuwjBDKYy3pZun3IMiZv6JV39kh5oJ8M18VUQp0gsMgrXEIJbh+Sir5ziOYX7YLoC2Sbc
XBJXFOe1gD9pKJfYOY2czNqUnuk2HbgKSJtKl6axh0VoBHsPOQzOeAr0C1QOPCJLOCjByQBi2HFH
sOL4jMA9cZTbx4UAgFhl1SzMr+CaI69GEDv1DLygFZTa58qDi7EViDIXNtwr9IO+kvtLVzF6X8CQ
koz6SSEMsPfUQmNUOLGQEO+hLOH4D4HDX1l88bQVIzoGaLTCCeZPYdFXXJK3YgWwFHzlj8yxPms5
IJiazsTMcQp+Hno9S+nt6B4C85kTplfG+YCoqLCMeoRl8g8MIm3qFyWTFpnehuKJYLJ5hrZqKWPf
SYN8fD1/i8edyghlImUoTKW6Y1CCFdHNuWJgq2Jut1XeKAB6KzRiLgyl5BKYsxXiMqcaJZRCsCIn
zATjpRNIbFdRs7mbHqgGaN9pvGzD/WWBiAGg4CkB7IwBfGglFRrQSE/YyricCycjLbBnp8F2zyqb
S43wpAr4mouZOPwYmWuaQPe8Ad4IJ6MCWmpA1RUmkH6tgMKWSShlGPWLIpCLl9DQo1W2Rc4vRdtJ
PiEfyM8Bk6LPgjELbNkqCrWIQTCOIrvTJIeWlFHI7DK15p05T2GjCPPypDPqULiscprnlrNQAgQv
beXjJbP5ISsckwLhF1UIcqFEg2EFMLbqBefeqApSDVynJK5FCuT72OZn2/3r+bIbvh0+3g7Xbzsi
myVjUZTVPQaikUdChtutZShIWwXNk7ypoBomgRwWVNqD5hbAnq66pLk8DdalMgD2thWR+5RoWRBh
ZLiZCsOK9B6YsATpOQKjKls/Td2pcHYd+yMDf00Rwjg4JcgS5pxAo8LvcwWDAlUcYoFjSuHBO9ZJ
E7P4JReeIUlulSaMMA+D7V4YIvKhjUbAd/X+c50TLA0A1dk6sjuziWR4YeDLSirU6riXyMmn4CjL
OZRyzBEoreLBRwIb9XM72hcpJ4D0d0rOqa2IG62sY8AnVYRGDTTDEahkK1xhTjPhFOAJa3RohkZm
0BxwoqLkYhySCB6/VlUzwC2IKaeQE0xlWXHBJDBQvV7EhO3cOQGmZgVkLQRc5AyBHsTXAeziaKgg
31DMxBDwlwzPATYqBaGOgyUmkZfhathlLvuzg4KyiTSRTeQ8sHAt92QAmiM0wyhOKMbYrwYY8L68
RBqcWVww7lDYcpF/4qusRaAU/QJWKg6mcRwZxTUeNQ/oCidQhEZTOVbKiA4wUakoVd9MirUAg6yS
4Ine2JzekL9PZQN4I6HJoJeZJCX9gAuYu8Y8EZ5VziGDqsaiZyGziEhamBFoqdyl8CHcq1CEAFAO
5DwYL2meUhKBvPMUlMq/cVIByqnikAsYOxmbQFE5RSl/h1JJK/zb27mN6hHeU6EMC/mWuAPwhiHh
AmC9m8rqewpFCYnkTWU0LHDJ5PkDnqq8mzncJzTIPzNaUjCv48ixqfhpniY9vv0WPL6mFWoKDaGM
4MUpC2iAkt5MJf0XBDCa/gg2sMQNaa2R5Khi5nNjLMlVoANqX8POMkkUgDeMpGLD0dVEFnWFas4D
C5w7cKeCZCphwmsAStWEIS6s9xKiWx48ozcwXCMWomN2PQAxFGSEyDH0iIJI6wt0ITVMJKQCBTmm
jDS5p0IMMYyN8h4XccXKOHZIAVQkNzf+YlYQCpuT9mYwABCpCkXAGwgUMXWK/eIJOTKNjNQUJwYf
HD2FrQCjpZ+C4me2cqjmNsOI3yCxagk8Ndmc4JSW0hz5lECNG02gW046FCgylAKwEfsFSscRUQ0p
GUxBpl3qsBlUuWDnlljlGSP4zlVB3gXEyZEFV6dzztzpwPgCGvHGUPnnKREU5VgbKsLENIhtWEmC
cDnSgHIRSIVjtUKv4Sgc3oHkF2MoMzXINk5lPFpuCZmYHSpU0UGVrYw4M3BwDBXbEMHRRl+6WsbN
/BvBAEcZJcgEJgPzXV0duZs5KVwwhvIfOJEILBgKpVWG8SJNnqN0MqsYkU4WtskZSkjgBOwngvcm
JJkp66h8/iTBwQ9W8nvOwt57gZxi6geDA+rQd3ZhEbkqkIbwdy8XSUFuDoh9O6QOy+Bq58GNsmMl
OIg3ueot5zQe7g7m6tSYuJsjFR5FmQVlqRqPNuor1CiBBqXWNYh/FL3hhH7LFwtutKpZSB1TuCmw
v0KZto6MpnqpgVlcGw2zZI8Y9gQwDCPzBATw4G1t2s4UcVQZGvpvlqzpCh9ahN9QkQZUJmXqMMMC
a3AKYQaaAlOsBrZtjfstE9g8xGCqcHhVIP8Q/SgZQhDJF5IpUOrgRA2L6Fl9TK49Bbu1hsDvOSyv
rjg/iYyC38YMdMCJZGKnRulveg7BhzcoCpyDZ3Scev2g3mD5sCbrOWI4DAGidDRcIYRKS9JeZMiz
qdTNQoFnIBXoG0tZ0zk/F1CqJTGY8E89isFpMleEC5BQaoQkKk/HwjNwzKroQUT6E1WzgwQaoGYH
jrI6PErSN2T6pJQemOK+/nCONgbpgcqPLBGdFh47qbWrqecQhQH2raXsW8k98hc5RawRMUDtHKhq
rmDEofuswbvZQ2TPDwljS9gawlrUB8JRbQfCD14BJCIJpZiykNFGK8N4ntYUK3NAvtcy9aLsNHZY
Ad6iIKDioPkESrlcYsW85CTCCkdFnM8EAY76angi8cKxcAaIFDIqOV9ojlJ9HMX1zEmQbevJ6ERM
hwfa1FGQZoqEoeRCKivcS2mQbyOJExob9DBMuK37o/B5c4QcKgBSWJI2nMdh37p9xBwSlzD5snY2
9Ryk8AIVWVHetAp8A2zUuuLczSrOYz0fVMVVWfUcKzSBA4BkrLMh5zWLFmULVpkXGWNk80gaik9Q
iUIZhEEBUUll3wafGYg4Trn+wqA+B7o2Utjc3AzqDYAwbmFR1c8I1GLFx08/KBgH1p+jY9OCA3TD
KBK5dR4kw1iryCr+8BigpMQtk7bNgv8RMKKId0wZuAgRp7RqcOQRCmcEVUYYLhjl3VeSalHUmdKh
AHcs7PgqHS7hogBq0FQOfUR2YH5SJXci7GjmuD9Kp9FUGm2UnUBhyTlIOfPh0Q9WiW1L7x81njGu
zodyqQS9ihghAtB0SDQoO1ASrDjdIsOpvwPaqXLwdF1zIxW3yJCTVKeDqDuA5vBEXjuXKAIramHl
ZwX9Y9EzyjNgVDcXoQBO5YSn/CIO84QdJ+7GGVSf6WvcYF5ZxBxKTvVUOw4uDKI2RfScCpYAShVw
VAqFgG0ArCKy7xTKvDC+tuHSH4VEvUUNwBgNUOXUFBS7oVL2vXAGJWwLElCJ8wOhvvFUfySNinod
ZeDkykCEp1iCLca9ov54jKh75U4Bn8NWrvgizggp3M7e0s4lanTiUSYNVTkZWBhlmdllQUPhRhSD
4xS8pRgs7JWO7OmQaBVh4qR4i5gQ+Em9tKqKBPAaCThLGtWxexgycmufI7e6KgCA0AgAkIts0Vqn
BucZBA2pBgTcBxsYwYZUB4Jc7oFS96kwfDargEFWlTQuUgaVc6hcjGwm4BFwVGW2zF1HDbPFvFm6
Djy3kN2dj8ft5zWO3sp9nR8NZWOqDCEZwipqCmBEUCJmBlTaISgxQdBU/lI8vkzkJedfSvAlf3w5
IRnx0/PtfbikD6amwuQKI+vFFWJm4Ti/6zZcbwZ8VI7qTcGkfmzHdsa396ovNb2KeqzC8x9Zsl2P
2+v78fx2Bp+Wc3MdqZybMae17GEcqwAW0eXaIznkBU7h6MP+r6klMf3tqF3TBjIgn/f+gb6x5bFK
0DBeNXhh26YNNMIp/1h5ogqnyIcT4DP3+CzZuflhq4F04NNynVVJQ/w0t4dHN1MooUpu+Dh/TwNk
wXemXE68p3DIRP/vh1u81rDd9Nnr4XhMRLG53sISAE6uckFTz28+cnFZ4Xy/kfP08hKVmI+2FB9H
TJQlho/P2690pWCVZm1gWeM4fB/g980ux+X7y+0IPlZPBViPNt2b67BLw6/C41xej+cfm93x8LnZ
XQLPghVZS518nP8IG9p+G35+hkWH/bfX7eF4D9+mNXbnyzD+5fR6POxu7eOKKGonwMLPhhiODcWv
nP5wQtf9bBxI4Kz7xwn9niifqcdYojwf7Hw/7cGnUzlVjHFHInbTL6JtTlWGfjZy5Hrbnvbbyx5+
qcrPhS+VnN2MAPt05YhlbNX0oQQf+seHEYCSZjpgGlIBfnGKH/gsBfyokffnj/Svbz8/h9P+L5Fv
/ml4uR+Oe3TscstVr/pqCfStLt+Kx/S78dvz8X+PAzfQ5w789PmIvrTzH85vdThdh8vtr1Hk988t
2HwJtVziP/wMjwBvrjxfCjiMzP+xvXw/nNIXWb9O/P9o2/9+2O+H0zd6KF5aXlUPU0YLzueFhpXA
CqJsULgHry82tT9cbr++XYb0P9KQFnpBXYTHfDZSWjIlj307vjenS6TvXfk+Weqs8f37NZwJLCFa
NAPOBE7Dnt7vsVTey/YlLEkvIJsvtNhLsO/2v07bj8Pu237YBo3wfXsDaxrTvuL5yAdqfkhawmpA
OPORjJuoXMEBizCtxoiMK2Wjf1zngi5amLnOUWBDcCFZTlZPXZ1f+MRdF/DyzUterJPGHE2Mge9J
25YsQet1GM3I1oITo1zucQhI9BpoNpmLVjEby/l6+DnsNy9v4MXK55Wv8zxk/SdNhNWV+DJQtUE6
+GpFIcEYUVIGPTkWqLooeP+YVEqIaHICchbNTfXzzPj9kUX5td1cEEl61gs9xjXfulwhkZ4J8dv1
8HKkXJa8RfXVhS/xH3SXZeskaH/sUV7Otow/glg6qk6Tb9LaGTWDJ2/LU4R3fZpgTj+tanF0ra1e
BqjupF1xoieh139DTVNvZRLQ2/L0m1WCjr4XTvLitaU16YUELcTzOb6fD3sgFKqNLAYRP8sXSC/K
04ZJvpLoBIGTsBXqbdpJR6IohzTRSHhnWg84Pidb0dBk6TTkAnZ+GNvYQLbTSFXk5laMQVbMJuk3
oI+KXKhGVbcW+/v9cPkdvJJQc2PGNi09ctZhPppZYQ2PC4I3ljP5xBpPtA06mnwh0/IC5y90QV6B
an3f0S1AHvkvG2PYbjAc2NP1k4O3tnNPjCGTPEEqPTqUouXbkTZ1d7nyBhGdlxqJjKxBAT3pFS/w
mCjYEUBmoYhb1JU1H8kkFUHY+Sg9RBB9vjF9jZGdWfqmREvSL6VrpDCae9hc7Tja0F5FWKIiLPsg
1fmWvnd8dD0HxJ7v5b1zL3JhU6guv4C1JOCUEUe5vkPLqVxxZLs2c8xxlI4nIlYwyMRtPaNXqRV2
3Wx3WHw2zRiangAlVRdvHpS01Ar0uRbwjHmeXJlz3jgZ9piyelKkJbZIMvPqajq8M2V2pmjfbCqg
juUy9HeyBFrmCWicamyc4jOuBK+Wgww4CKVOnRHTd3bWcowbs+H0L04TPtJGZyk6ZNfAvNESu4oG
r5LzH9TgB0v8NHV8rtqZWwuOKBh1NXHgEbgaT8SK005BzNbzebSzdJwSXoHzVVG9mOtY9ZimZrtk
ihGzJ6zavNOJ2Tng6eYXY2YHBG/oq5cQs8ZhXqMbFeVi5rV1UloHbqaKvS9JLdKMA3daYrPRzTSl
TwlnSiD+VdUjpod55OVpxsEZVeH7jBdVkxoE+D0hW68fDHQiuTq/YBWVtY+4+uNiwNt7S9BokBbM
QsFWfnNelZOyTqAw1cTVcOGcBXeqF8ecDyBEwqaKdvt5TZ5XQNTw8t080TUXAqBnLDw1r1bNqc7g
S+kgkYPEBe+eUlOqLwERuEIEVThlyiFHD6IIUWUlNU0qM0cl/GOIVFQ1q0DCMTvn4jpnFR2PEwLc
CiRPmZ8fri7klIC8eSVrktSYPyC4TsbnjDEXxODlnSPeQXCNxKKoVAabj/Yh+ynkM7K5dcKrIXIe
3KlS8x+sqqotA0aGMHOmcPMSOSS/K5nha12TknK/gTNq/pTqMjU2lcg+UeUxhEmpCtWsSwOS0hx1
qYaaoJCpxrSygFLpmFPoThVh06ZOmuBKGUltqX0bkoqWUKaJwIGC84qw3XwwbsAZVeHh6CKrqnmn
ckBAcTfLLLR8noyJbBRFKVTGQSqjtQSZ0q2C88/J2Y0WNyH2SkVaxhNCKtdHIoYqvxh5S5UDcuHA
AT2h9PMkd8SHhS2iUVX9IAtvCKSbrnZaQn65VM1owFHaEXI4fGXR1Yi5Z1K/vdWA3LRAmpsDkWEI
Hk4fIlnj51mHJdvYcoOcDI1UFAe/6D3F+xq6l2p+p3bRexs9oyW0W94ruFZPXWt2FwCxqoVLJOva
QeRkCkJsxMRCJG4swcecmlafn1+2EnEfSAj6wXLAsTxazl0GZDVowpwOdqY3yM7U81tVs5cEcIgX
hBxPHwJx5SVhambaAZLc66eXxFnuOeUcZUzKFrj7+NKAL5sA+uNLDb5UT9GyeZp7Sqn9RufURrYR
oy8T/yulRJtH/rUCH/nykcyuU84x3m1P37f52j7fD8fDZ86NC6vlfyj2v31ub++/vQx/HIbLX+6X
78Nfz7+9bK+HHfVravTwpJuBnmGl3fkj4cPDb/fTLsKfQ1r9NlxOv+1TpvM2YcdbKgKrxjz1cfVY
KTGtPa1z+Ni+xfX3w+vhNOypZfRobcdlYq52zkQ9/DH8Fta5HF7u4Qp+S3EHaoUpNz2uUCJz1U52
l/P1mu+X3AWbr8GnNdIp/rftbfvb+eVvw+722+fl/DlcboeBXEty37yYmC39z+kgn9vLdfhtd79c
htPtt8sQM9PJC+Lat4+3XO9wimkWYZ3rkWCbuJpX9ebmq/1TPODtsj1dX8+XD3IJ1T5fIaq0RNhU
PN31fL/sBkhJI6z7dMDb8PO22d2vt/PH5vV8um2O5+0epIZHBpPV8SKI48ZQz7jcb/vL9sdvMZUk
3H8WWsP4P6kVTWFznbzmaoPTVSVu+e1yvsWsxf3hknPaySVdIbYqm2Pi8MPpcDtsjyRXj1rxiVTL
+eJb/vax/fl/x/yz364f2yO52tRJ4rEXThyukMX19+EHTa7TuJWGWAhbuV3Ov0ehsH19TSn65CG9
aK5yTTd83UaRFejiMiy3SR2TO+LKnxj8OtxIzhaCuKz6dJ+X+ylx93eSqJRzbS58u2z3h8g2h1MQ
XZ/nYzxuINTARNRaQhWSj6QxuoEdKT+y5fl+o+W7aT5BKlfZbT9/C6KZvinV4umJssO/Gy552gpF
SKIohkq/V3L9c3tI4vNz2N7CYYPhIUj5LhaqULT1zHD7h+l//Tb8JCXWNLa0pXICA1//8Rx29p9P
/xj/V7j74/kKSL1ay1b3nNg5l5w9JDsl9MwqiUAV6SQx4GnKTpc9XvP9FITb+e10ACfSlWX0UOkz
eow1PitIUKomBVaCPHMctIKmttMPOmpYQddzvN5xQwdAkh2ujf8d6Ht3Dixyfd9+DiRBCkNo9Xiu
/5xMpz+GyxlbLVzxL2jitYadtU16LItmy256viBXSELQSFwmIshPx0nmqIXAs6rcXnb5nukVpDPt
R3tWJW/H88v2+A/Hz/ctSUysRwKjFom3Fa6dfH5t6kt2+OV2589ftPVL2PiPC9qe3oKNqMkLsu2t
PN9P+Ce732kN23YHnvRr1yOQgjBR04mSJPtxOKUy5Ov9JdxTWFTS1hLQYn8LYjo4VN8HUi5KXdGf
rJUQsr4FbX2z9tHKLe0uQcwGudGxAoUvrB9BNUoUFbONvCLhNO0SUEck+Y07v9Jyi0/wl+0nzWoK
+pdZcpzOQdgmhUB6dqytHBMFfARWu/T0qzTEqxVZfRregmD9PmShSN6NFIQ0C0Jsf/4xM0XSP/lL
MP26+9OVQ/bg4NuvIBWD0j4C38Y60xT1DSvmdD69RpKkTVql22rjOGwvybHsLlEhASmpyqwxZJFs
5IzwLAu7fQbrIykiUhjZtW8f/D764TmhCZc8hnnLiDYtlwuK4ET2hNZYagZJ2sggXYhJy7byyPQ8
mi+1LuO0sUC5aNnKyzQ03jUNsKkeWDIyU1iUKthIoItunitJmo9he70HAfYju9cQPXCVmE4Rfjbn
sggVJEvvN0M7i21fuFCg3F7okzCH0bHJf9peB9qglwT5Ni3f3a9AOnvaLBSmbXGkC1n487v3YL6A
h1K+/VCU7rq8vWxoTchm1Mwd4tLdcfvxCVT9wsAnr6wrFoUl3LsadEiINU1BsumQzR3p8yVua7x2
jJYK9nVIUtNGkSQs9CxEsruxTobYphs7mQgzkfiy3V/vr6+HnzSS5ZoarfDdj8v59JYULemgMfB0
Se+swMIqmfbELsHADzI6+0DDiV6D+eezNNAP8i6UfZZBGD1BBGk1QUDPVmI6JWkiuj/p/yKv1VF4
QQN8DFT174PgJFu4JMfIrkMNhr/fgb1v+Vco+0RNqEl0bSE9/Xb7cf48DL+Rok0S4GxTGbwMV6r9
ghpziEgGScoR2x/GrZOyxQ+iIRnXcDhu52gm/v/+6b/0PQ1bu+Iz+xUpI04rIwJjnGyrB5GT+kyb
BQBjnw3gt6FzxcJ77LSMGihCwjT+6inPZ453dfwn1UNfIiNuL6teWyvCafq8nG9nJNWta7s6c68C
XqoUFGTbiLqkIABczlKOTuWlnH9caGebV1Arxjmu399oo0dIBVX5NmFrNJUojgDDJA46YLrxtN3e
jP3dtpcbHfvzZOyv4SMP+zfgHs9MMIs8t/fD2/uRrPdTOTGxE2KLCu5Iv7dyqoPWTThURzaw5+t+
3R6PsRLqt4/wbx4+QeCei+adFGh3OL6mQFhsEoYgXkXfRyKaaBmRVKcsb9LMXEb27TTJwTaynTac
ouN4vb+kf0bviKmmgAF6ZEvb16K6ZuQiBSN9O3o1pEbhlC8yl32pkC5dPf1okhBZo+txGV6DmXUC
yqANoD/gJmQ48o5qjYY5LaUMlFL5paOAybqIhqYZyHtoCitg4JtK1eeUmlYYMIcT4zIoFlhpWc3c
DLNYBoF+nungjyFO10ya6HrBxhGW4hxqguJK627qRL4hsgdGuh65uJ7KDhluk5EYtnWhZYVQbBVP
Js5O0UmAWtTgIl/EyCqoHPv0yrsOVSPyk7XTNAtDLZ77utse17y2l00J2MyPyNFb8qb9FyJtSe0C
15B3QqNJcnQWWT6XRHkNP38732/Ig9LCN/fUjrf8H2c6uj11K6Wk4uPutyhCqmtHdZa2QRvptA+k
qUypVkggiyQUEFjpuI5XTnOc9evkyAVacVXizkyQFJ/z8/SWTnocfuYkoCvtfFZ5XOrRAQKZH3TQ
ncm1YaGcjUobvbxp4FVicvh5uN6utGhzzQVaeCxAYue5nVQKAY13OEuGSZ4Y9leXYaWgb/fv9+0+
egG7KcF3rcVoFJaXI2UfTh3C7lnSU+SdtKUN7X/FHM7Ji4zQYXB4dhFxpr0mU1F1C7jOig356pq1
RfYo016OMbEucCltMqiVkbvJGI/QG8oAcLTPM+etSJlkVoNbF7KPCNPpTqbyCsHXrYMBfGMIA6RY
49guWxWhgoiyltQ70ZpibUKUx4nuj8y4Xqa7tHSiX8vcD1ZSJzXZtG3+JTAfO5qMqa2H/TFFG0mc
X0MfdsKGFY0NQxB1e3m7fwSev9LaxxoQwu3TEldyjbA+ndfljVbg/RwXq9IzO8mZFgmgp4yP//b6
GuMwvZQPLQgjclx3OKXmOufXVxAtM3N3SNLZzEn2k54D+0JaJGjUk+IBetW5aDlgiYgbGZocftLF
ElV+zFyoFFz1cMoGGkhrqbDeyiJeMmne1sfhdKeNPCIhtm3r5+x/0tgn3HMqzZPO0tUK54mfP4cT
neFL5J6VbeSszL88/jeZifJYqOovT8j/lES4Vvw7B4GHc2bY3G/r+/D/ktfk1FeDF7Sdpolro2pA
XuIUATr5W5GAT5V7k/QGpzNvfGNLMET84z28CtRwloTaWq9aInT109IOr/cdYzedWNEY+hezIBKY
Q8dOmF8FmBXyGPH1XzSIQqy4pLh+CooWTTv8uXgGZlVJQbnzVTJm8plzzjKZjylwlInQqR2NKgkj
ttpbcMOHYQ9CANqDhLqF63x4Qxa+EquKCEsmEsgapBLrlpYnrqOo7DKdkr0XGMNlVZKnsmq9M/0z
m2e0BSMcYS4UBe1jchw2GXkbjH2wCfQ8hBJdGfXsbwB9qqh4+ww2CWIgHAwgJ77pZ5Z7icE1Wpxz
qsqQKJqBBSW8JydjgO06BB6roFgyM7MBnyQEAENJ1oluBWDaRs5ASIqLBHA5YYaVPNUuwC0w2Dra
uRmfoMz3yq70j5at842g3GZDef+NLNdOiVUdJzfJiqDw/+H216UCA1EA3cnvGmMaq2vWDZV29rgw
fFAxd3XmwO/LlAnWrddrQ/Zk7keXmiyTQO/UOYIw30FxtkrpVFEpkArCOm+3MMcRbk8BsEk7xIfH
ZiRntpPtUILWvQxzKRcVQRreUidLWAjVE7N1VVracKduVtHR/lUp9Fy1JFMz0fB+OuzOe5DfwTpW
45RkgiAp4V0n0g9l3IpMrUCIMcscmHWKYYSyhSnRRgs3X3nzLOI6jy4dDS1WsHtHisuVhYCF0kl0
gfXcegTGApdtLQCSDk3ujn8xmfl8Ov7CjqpuVZmOZskNBM6tk6sR+Ema0HiVpaq4S7kjRGM0YZun
z/fD6zb+yzSX+J5ZNBo3pHa1X4UQ3gc6fV8LOs05a5ycSogTjAk1Njca07uQ98LYl7K5wplAdSVI
/UtycArQgZJqDcMZH+f94fVXPiCQYfJrMGtShiDX2a14+U6jnGnI9LPQmTTF//JQgimFgdFF0VUG
VGlY1snkVvTpWkr+qRnGO61He80ZnjthAJdZ9rRPoqO11RKSdTRs5I88nIGcx5OW0Z067YzAkJKr
0wMqM3lWNaTf7buO/MznRddiVS8he3sKu4nppGFpcDJOdq6hu07QfFZDQbPaFqBu6Fi21b0ExjkK
HZXyKwpoVrD2Mt8adpcCaAqRG7zAQegzStdll2cfFFEG9+tD9/kBaMHCqZy9UdGuSLHS3nwNTP33
EZLoVqSjksUIe0aLP9ItHeyS3n6pjRqG+LTFmV91PuH32N9tB2qxNKOV8Lw/Xx8O5c3+WyVivqaM
2zoG3P8SytB0KIN/McslyQeQ5WLaOMkCls3sG/iIln4UKr9MSlxZH7rSbCnMR8fguF0XuqzdOLoJ
SyvNYG4iBLMspcTTBWhkskLSohnIw50u7Bpt3iVqyb7SKOn1Anw1YexKjy+7Gdgt5bqjDCZw5J8T
Yf6nIcaiaCqv/JU5cc7vK6iFXzSW3C+MezSYCCel9RTrBnkKPrkfzuEpPt8BGFDJuJkqbqctBO47
xAGYf7uffqdNohaKslzvDRQhC6IpQyvFHEMdzneBYFh4LMza+uU6Avn/0oQpMH47NnGSNOOqXjpH
qS873Y9HXPpO9RlZZMzSPaWqlKBquGYDeesWVUnfLQnEiQnKWtCrL2PjaQU6ubb5Om1GOO9utOFg
pe4DT+M6XcSJaGy1Kt2FBtic73eEWZtGTiQGPZxwhPpyqkMA9APAuZqZB+27X5GXotpZxZWe7faU
srhd0v+yLt1RtVPb21U3veY5XsCY5JjpNC0DMp3EV10c2mMlVDblYiKaMtp1SoG+lhes1keVopyi
6wuk7NH6EySD9iXsGjU5Ft6hqnBT5z/Oikqe/EtQ+d8EdYfgth3CxeyTm/OfaZUvCUVSaepsZsOq
JCNEL0X9CRykXguoxkWGT2JcWq0oti66vQJuare3fU5Sj6qfzk/XQFHO/dokUOgqfO7ASk0tQt+S
1l+obKEDrVZ+oeNyp4RHVPBGzKEQck22w4qiR7OqKHRCPDpRS06Iu+VylR4FclgaDLBm0fkSmfJE
F+NQ0e6p5jtIlROd0Fj4Rbg0WryFpHf711vR6cI47gaXOeomCcy3ckVdeATvJGfWPjKU9mxVKwcO
66SEa/Rsbgb9+96DZb4TsYeWn0L1EhO54cch9RYdf+4jyd7gtknZRaMbHqztHp0lGc2J1TpzlGcZ
pujUIVtGqUQIbYOO8W7dAXt2qLANP3/iLNwM33K1KrqFko2E+VJHwffhJ90uw8kV/XA0DaOrr/l4
K4iYf72zCIg/8FUG9YocUS1gkUW+KBrXVWydx3H9db0NdPWR1F1Ab0pZgsLU2w6MOqbLn7Z0LgYZ
91tg6JE5UbYq56LXPnAXjNZdtHdo4eXXBOgPexr6aHFViXL87XN4++3zEi7o8qtb6V7JrZT62jOc
aVRAiBWIZKacsViZhmMsXdWdb7kfC2JmHdnsbmfQXcJ+JbtsTOqh352qv16OOzlfTqARgLPrSmVq
WxSkliJEL5chDD8mz4J03mUfi6sKZ5MtBN5fyS+29k5x1E4U1XbEf9bzayPPpjtIqkMNnBhV0nAy
sYWopVnVjrRuJ0rfvF9VXoCaxHAt2/HK0fV9O2SPnvR3Za+tf8mCuZx/gCyY3ovXk1OQPpWikyfW
AycE/xI4AfEojgtEMVCq1o0j6Ri7mhOJL8vBHaPl05m5pH1nwk2rKnHNzCW+NrNgLXzCW+kdjxZ9
pyA6QF5BRde61aCvpz1sG4EoFgxK3eZikZQgGxV5290dxKG1o2GxJVq3IldGKYddQBxHklSqTQVm
TxlSoygla/EE2YNsmfM99g+is75Vp/vhyBg9cEaKL1bep0YpdKarb6PYJSHwgmqapTbrAz77YReO
C2xXR59s5WgLZWAXiGSLKdoQkJ2WGLDZobJrwjpTAfv/Q6MqEq5DDi+Bg2w0zVNP6cigTUdz0mn7
tYEpIbp9vR45FEDfGS2+ODIyASMnetZsq+Hw8nAdWWypyRhP09T6QXlj0fi7px5WnQ7eotvi7dnM
ReaGMWuGviCOkUQ5TZE92GTRdt2QsFESjgxIwlFsbftWUBlibCejo1v35npYz1OhGm2ToCqVaBFe
Aw3Rw9OkMjijI8pjWLMtiZEqc3sdodSSN1iy4Bk9ZjSuk++Dt0/1H2xkl78dXmlkyJJyqm4c3tNt
9XSYGSC9GLOUkDMw9s3Rtm8s/OjPInK4jH9CT8bwGWnbu/UtjiGJSELiVlkiOY7asaJNL23hKTsA
IF69mSb98c9y5Tzqkt1BIzl89QCy3qBI6WnTfFYYBVzetYMQFy2J/lvp3E4VHMqvplcPP+l2e67b
M6nk+kE8SHY8azwcniYyznAn9DFUZmj5Zle+RGy6d3k9gppC7mG126JyF7cp5HqdhxNVMR0TMt0Q
Va+lEWxW6NYk/xQuP+yDLDzcQBMht6ojIJ2a6lFvgkVaSUorJc2G7shcGBXm1fO1RzCMkBZoai4I
1sP5MLpOYm2m5xxW9pLTjCisIaa17odPkMXMVW+s2ywpJo+UoIV55WdyV/cjqYMgHTNTMU27/Rny
Ob/c7lfQHIr3pONzfSONyAm/DgbtwI+C9UZDPGJwAD4C/cooLIuePqAZ7hOBa7W5ckSb78q6eWwD
WH0GlqzvLucrKDh3a5khUc5/OYT/onW0XVmIH75XtG6m+uB/Px/2l+F2BwPvK625GDw2z31ZV+rk
3Nq51y+H2wedBKo91WOr0SYIui3GMXIYZpXO2bVATbvr16M3VtwDbkRn2ddyPBJUSWt03xsxsEjk
BOJGrk74KKYB7HjfKX4YVS7dz5cqCJh7Q1DxStGymwhw7ifdRkyCpPusGn4cbu+0WSqNWue5RPuN
ZnGjO4l7tdLstbgSVbed+B+lYFuyTmKq5N1J1VXdJc4aUetrrY5hTZDVymAOVK9dPuXttLHGfpKF
aecTfxyu1yAxUE89aeHgn9ROJA/LDlz5GdUx7Wp6Eo5r24PnQOAAPNHETMd5XzLclUx9uU0JXRm5
qABRZPOVFeNPJf/aePqIOxjaEDNf7P3TCw4pt77wMonJl+EGKhPVEybHV/RooMNoVGHgfHhjArVB
DYdaVYpfvwDdWoX1mvo1umUCFEMzmDk4ZiAGEgMAjbZufeO70/0DNXSzBDk8DGsY855nfK7zyGjd
0j5V1Uf0fjr8/Q6U07ps0arTHZ22LL5QgYdHFLSx+5JdvgLCbGZvzBOGVvUiVT3jaEoX7eY8e/mF
UcYrKoJcw4+Gcg53ntdqbTviiRJo/HLObKWkixyEcb69AxTT2HYuBBX9RXOpiW5fyxDC/XO/Bd2y
TS/5qgy1JA0EuR7jBSXzROywTpTs4DG2lSJbAl0v57f7FQ7LpSKPxSTFRUOcgv3qaF+nHwWVht9I
pYbNSPjXKgOgG0EV2z6CoL0KYqI4oGmh9zvt8s7c3IcN83HY78FCVaLd0n4pVDcf7EqSHigDyQVW
Yp/RDDJ/TSODfXFTvTtS3vypagzQzZL1IgHk/HoaQrAAJRxLL/tOkl7X2eQ4nN5AGgWDzQonbwlK
ZCXsytBZMkI6WfpCwCGXY5R5hQ/JV80RvJ3vu3e6gRDZkbzBdXhsjqksvWUkP30e7LwzwEV0L+L9
MGO6kyIqV6EOspQj/R7922B/Xg9XlFBvjOzeTuKyFelKhtFR5tJBBAyIBmmfnYl9dMDayE7e5XTn
EF0RXuAWcEWWgDlQi6tWOO8cIGyy22ol4427eFlgACXOWJw3dSSBo67h8VWUhVPhv5IY1lPaWnyt
ZSKG1rTpWYn9majKrJ1E3JeunbZB8+cH488d7olXpsgJ2uzUlPgg22B0+6O4PznKDSfA6jmqKNi6
tmT/cNrDCV+8iTFCFxC63S2nhiiVO6IRZlRKfjnt6/G8vY2AN3k4uToJaRpVAKAJv7qnRwetVs0e
xPDSYcs0cv7x3A67xEYQtBkGMjhG/C95CTRDer66TrLTtMrDWEDSMkBPsTWD9Ga32+naTuVlANAb
xH6J5vQ1EFkb9DTe6qj2ac2Gz90J4abLcrg7JRdsdUOn7WY4v9KcplfNOMuVcqQYFn8iSNq1XThj
HYOsisN1s6WZ/1rQAqeMLfiPAxAfNPqVXxtXF2jd0bTuEK0TpSCdAWzdjm91hnkyk0gDotEVDQ/F
pdFmNBIhwjRjIItEaXAHiIfLiG3ZZc8P/czCsARINsdTzMvvYQzf1nk6sx0snd5RGoFOTK7bexP7
Y0YyeJrP0/peAn4+QosT9jjuJlpraTcfxLXMtYnr/kOaGkwm5Zk/UQ9DizWDEkAeFT8AHVCe6HhW
5V10Wh3KP1fUSvuHXH9Nuqb8HTCfoTenKKa4pEK0A+pUqtcIacznnq315mnjoZ9fXEIHndID7Vb1
Xks4F83wjnfmcnTVacWlOgaQOlncPYOIf9kzWtXf2MzFkmgA1o+bIxFr1/PoawsSZCo789WQ/Rb1
OmerksBB/5hm/f0jg217DddzygWodNKeXpXZuyI4KjWyXtLQRVBToKuWhHNdOAemohbDhrVmKzul
wiZTS7dINj2PjoFBNOx/LgOHVddUUzuQwQq8IOwsHvop/9rqlQ7e9fsban74leaR8dlRap3QnG5p
WxXu415VxuK66dZIOklLRPeVSgB454LshLPgUyC8JCgLewLcO71IDVXVNbc2NW1tii8nP4Eh32Ll
OAOUJaT9qqTcfly8umc8y7LyCS3tE9pV2UJlZDUt0ixboaGj23bt1OlaYdePm/7VEZKSrcnahD12
mVvXbQNPlON4Zk+NB9A871vqdG6uICK01CZgPQrohuw7cYiRBlGyCdemkxvWqWoRncSwRRoggJRN
t7lm9uJQaMboL+aq9prUaSqYTs2t+Pdg/rRhflXjWYFtBtGkQ3xMFGCgyrcbZIkzDxQoYk2gwFRR
vN2D5GW5Xvz0lLTQX+gY/DK8H8ClGwnTuhIgFDTtMVaGns63QOwvoJOsbQX+ymrBlg6EGWz837bX
3eFAL6N67Ve2CTrJQ6yPN5o0lcb5EEk0BmbeHo/DkfYSvlDv2xnVxqmWKY3eT2QaA28fKknEE+o1
7dSfmNZpaW+wXRvSHhMB+glxorDsuXV1J4YqnP1aa6JxiF2nM5Fek2B3W9/g3TK20h0Jdhbo5UKV
obRD23AkhqPCsVUZJzSKpOk0hl/TiUR5S/YzWzYRQQWhRLXuvAqmg3mZlbO0k4YaFW6uV8DLWtNL
sio9InE5HdFdodGjGAweE1U2o6ESxPNJIehFpfwUMdsJkGi+LoelG8DTcv3M8Yk4V0QFV01LzjAP
GJfMO2Z/aSnTK/GTnHCvCe8YtlQwa7Mrq8R+oOPsF6vaoAGmmQaWXMrbi4PVweAv1ul1gzw1LjVK
9hlpMiVXk+CT7TUim9QblLDCmWZKZfOJQCGY6DVNToqCbhhgQYedeS9oyPDK9bp34Xlu0sOHaQ4E
pTFGS7XAKOK+K9gFAJhW9VU28gtjSWF6BUh0nT1Rks7kA/kVyOKqhjn1pBUTEaJGpJZ0BtxX+ph3
8i6VRN3nSz6hpIM7Zn2FYM43o+ONLUSR8L1GbQATvKz9amYHlhRe07Ug2QHr0rPupxtMJ4QUZOuS
a7/oKVNR4/kSeT6bvbD3oK6bCus6tao7GgbUcegO6rRiQpldzXM/e0xHaOGnqG2/4bHozC9J+CAN
WBixotqiW3aj/UqhFnUHKdPQbLM5KjTBOuR+mqdqm87vdONlK8Xavp5o0raV2P2aGaigga5YlWg6
trB/e6GdE4PevDR/o9scWbmquGaUjGBOkl05Fws5yKJShnUL9PmosHW2xjLbVKNqNNzq0ivaR30C
yi63Iw2UlefSKchfDa5YTlgsEpJszCPn+p7usYZg73bVXlEfvQCrdfwLtdTr0qis61fVdbt+6G7/
9wdIEUf7ASFkqmjJEuBEjRToAxK9AlpJQ6uyNcgKwmUApN8UyUrogo9KGjZ80syv8qFmACjdRIRL
5INPDd2O8SW3F+ChsnXl5rhvmDD8i6X+eEi11p3exBlSoBs+Up3HiuOtY7U1ibj4lXGX6/0lMPLu
hrrCKqD2p3LP/qwgooyeiprlbGcywZN1JgUlM5G2qlS/YXrtGUHXQalVyRGStvT5mkyEH5fz6Q0F
bqVaA5AhvEZWQ6HMclZJ3ZrpB/R9W02oH9NSsKvCOUoqGy3VmDEOUvT/RKsjOkzDej3f52X4tEXm
qFq6ZiIo8CbYquqPjKrBsIVvzjtuRRzvp8PuvAe+syb6WLYTRFKIln5AycGVJ2+pU+3eTg/ClYB0
NoOjy4iWXk9PBCoLs5uH0/YlPNr59RVlJruO2hx9A7oboQXQRBWb6aBBxuqVWVh1Ief/Q0t03mtM
3DWduRDdGfDPw1hB3MI2cpFnWrTTPEpJsb7xQq/lj+C+4xUGPYxhX8V5t7a8mFygtrgbh8+uUwwt
wAyDKhifnOciOZ4GDsSYJU4EFro35SwbyyBnsqLpSEvCtj340/n0eRk+7rQiZXK1J/B6DnYG3ZnN
r2pQU89Iv/4+/ACNHPyfGIhI+xXUEI65SKOHGBq/JqILzR6iExmwdWnKJgJWSxSyK4p6M9u+FsXj
QvW8gUeGwBbEAzh/QirChYf/LyYthhNdwgLpsx9yl/47rrO5hb3FlOVr+kfb/f4QieK6uZ03t/dh
c70Nn+l/BAPxNGy2m1MwFdK/+vhwE5GKzf68SxGCzfkHNeZUJAMnE2jMQ4hYiMgQz7TY+DO798Nx
fyE6XuVlTFlG5OHycZ3Z/q/DJZhchz8CdWx+psNOm8yHDYQ/XOI/b/6MTiPS8s/E4EjUFxFcjz8T
xXpctXWDn59DIsi4g+3j/zi7sny+dJVX+ogjWaQjcuKIr+fwQJdNBmrCj85/5nANO5j9K5vhOHxQ
+Y/pV0d+i79aAVT1kqfz7U8sWx1G5Wd/Okykt8Np83rZfsTc2vD38IJJRH1MRBeudnPbvj3+Hfrl
xtB2erkxsEb94Puw3bd+7HHo6Vdj8+RANJsEGm7OhJOUf16Uny9RmbfhlBRDoI7z6yYw5fEw7Kfl
r2A1/litpvYkuBKpJU4NDtgmemGZ8t6CDXzajPVDadXHv778V29RjG8u5x/Tvw52osu51AOh7az8
ct7/WrG0LIeM9C7WLN1fVc04OM7CpuggbbNBB8HYCZZu/j/fyEZ8mczNXLqN/RcSvUQKIqVN5nhe
eK/U2v5JMswritaKf4IM8+l0OZ2OsFpOiM/Xk7iodz2uLMAe2xkXePB9bxELFskSubOALwv4aM4t
Hik+NLhSVq60Q1CZRIEYS/8C+KlKFo/eaWKJGJWJj7c9TYI3iONL+tV09Ln0Sgr5ofrAr1Wvm4q0
RTIf4tVUirSh8lboUVvp0bE+NddSnPKXgYoXiz7+T+AdK+J25SUKv+S7ybIvDyffPABfsFc7l0Ny
zoXbqFSD4t6FR9yekOTx5cyl5j0q/WIs7WIUY0CS3z0Wie6mXGym7CPxH72OU3O5bch1+qrVyZZu
K8bNeNWzk4LVWOualquB74tujO6UEeTJSL7O64jZPpp8Pdl9LWtytXGXDUvdusOVV2bKY8YqGkGJ
oN31urkH5t0EH+IU9cWvII6u78Mw8gT5fw68eL1tGONgD4VLeIbP8hH6i0qwaMUyKg8FXrmoAIu6
atG8cr6v/ZCS0eONLV4w0xzShEVTR0BTiibRXkfZC28zuzMeWt2L9R7ig/Sc86Juruf4mk0KcGg2
97lU8i7jmh/D/rBN33w/7IfgLOYBkn89fEQGPG7bbBfvkI1R1ah8XAwiOZO3mZbcHM/BqBi+U9yQ
VpisEj3OLhAsu+Tb+/5wjqe83i733S0oyCuR/sJT61r7WCYiuSrDA/k8t3CQ3NF6s78nazRc4a8U
8aC2xcdSyLge5z63adbVmt/PxztRkJK/l4/vdQKcWP11fLzL+XiNZka+Kig28lWL6oTxzFY9egyk
tSKbJdDzTKiSdFGuHKzy4PMm0m1vKdZJuxjhxXQvUXrxEYfL5wpPtAGN7dLNCFfdrE0XW63wmRxT
+vfHwEgml+TT568vQ4x2BvV3/igMdjpv0GVoJqo7lY/hNONZhuF30sBLJ2HVXuKLCCvq76esumg/
DvQmpq7b6UJs+qO+0nCGMRuxezfV08pUQhv+dNVSiR3jmPtf/0x2lU4L2epgkRGEFMtlPi9D+u8T
5cDkhQoXKJ0zRMbXSuGH/FyfQS1sdtvdO1hIlB3lbq5GzaVEZoH9OeEbr9s9nXCRxYUvV8XSH/Wd
b++38yeUe7IQDk+bC3/WDB7tjKDkUpSmyxGsyK6UCy9cvZlUoxTsQzISluVNzRc8FeJn6XDZXt8j
Lpcsn3TV0QEdpU6whj+P97cI20wxYFpwmPILPte1zkVHfIJjVEVRb0yiBEiSasc6SSJVrxe8o0Rg
P96H0+b9sN8TPmHam1/wcf0Uk4+VhixsYhlh6pm4STdDb8+UJVN3GDHi36OYCtQRbjNYNZvh5274
JIevZMbUlZYM/7GLg6bVPj6H4BNGegbnLHcW4zNKPknOBLG80QXJWYhWyi312A1/2oqfgtIfgrL8
EUzhYKgdY352sEjvHzEOdtj9PgD1YivGSLYQr2l5H9k9Sw5w89XuYhEX9/USOc7U4ykmi5ZJ3ZbV
0qwYjZzN9f6ZwXUgLHR1JpZU1owYUorB5f6ZZ9fuYvg6k+1EemgyeD5ykQC5pkCotv1yCdbUJRAd
lE5c8urwkR+YeiYUurYn04hcvoJbKHoo+nklsVMP7yAzFsp18/Jrc/0IcidcYLghbP34WmCz1Hu/
es/IO2rNU1YKaUQK/LPKjgfrL6Z5Zbry2PeEz6754w6f3JYn9ynFPruQw+3H+fJ71PrjZpIg3YC2
DtmKdpXqj25TSzsGeg+cTGUR5vupzV6ZeLhtjQNuKVtJpY9iITaDytmGE0UQ7fya/BYgOKtXTxME
Jzd1OlJYL2Kp+8MFDMDK6qsSTFG289GCOBV1nzVj8lTfwrbul8hvf78ferTJfcUqLI0+mdn6x/Ml
q5xf9+9KCGDi80rnmATkVbeftgi9qfB+lSCJ+to1VTRQym7JtfKZP6KljdhCVdeh8p9Zgr8Mr9Hq
S3r9Y4gdF4K43A3XKzhQ5WCGa/Z8IYRiq4y+y1H5mFGuzWVRogCgdgOvuvpESSCm7/9v+ZccNYyf
p7+Nyq3++7exEev1W5Qr36BtmXyQKaAsxqZFea9Pq9FR6bwKK6u4B84+rfJ5iUkOt1/fhp+HK+Hv
pWWmPJvOZk7nb8HWJSat5f2IVQt9DLftPqYW0Avx+UK6vVC8596epq5g3cOd0MFkWaQUXD0tkgZJ
dTfky1pjsl5C8C855B/+uzrghIWH/d2+ZRb4Nloc4EFl9Q72UbKYVw6MvT1+25+Ha1ozrP/2Nly+
xYPkSgt61Ypmk1cd/pTVyqvJRMo52Y4h++K1jl9N//NbRnS+RZaiNFt+pnK1KRfJ/ct83WmhYF92
2FM/FpKpPwSxULy1Yd+h5Yq7olXDR6+NWm0FdxSSTv2mBT7m7T24Cm/vYD1T1ouMJ5froSYj+UWL
IIqmgfHLFVbLIlk4fwodxqWC7X2+5MBc/Ns3Motap+KrKmBRmknmL9fsJC/C54uoKbEkGA+j8E9/
/Rbc6uuMRgHvF7ri3haDe1wp2F1lofiPwErlzSIk5MZsjdG2LFxU/4P+O/KKM0s3m9ka67WKmsu5
KSNie/rHcEd//fWZN1j976gY3s/77suIKjJTRHq90PbzMzixKXnu23l3G4LsvAVq/ABrVvkbJWS9
Zs1v0aL8FvOzd9dvAvyCbBHll3+Bg18QvV/ICoqMSeRVVJPuR1/6n0c1Vf5nNlK+HV6j5Kfw+7zy
IsScab9aaTVvCj9fySxXiuo8bWv7Gvzgb9fhFsPxne25OQmozqIxmBfXzFo5xRTB4vYpKyfJpO+P
6GT66xodkKVT2axK0YJ/eSy3kPvfPran+xZJy4qdMuZfL4YNg7SAKuI21RXL6vNRZ3c3oWuRnVp5
1qukkt3F3fSUb95aRcwsQbjmadnxuqB5kRerODheGpeNWwf3LKqshQjfjhnt5aK6t6TKq8cogq0P
E5jnLfz71/5V12IiFZ7I1nv3N1OF9aPSZ80Hy2tNmwOrFSqMAIXliz31XloW4ZKL/xZ3C365sGYE
DYwkWQn8upo/jG08DHgRvuRA88xC4AB+fvTZx9GM6D9lubxYvuUlySRrL0QVIot43BjHzCsWrLNP
q+VeU5M2adzz6/QlXK16RYviK7HSXczPs1lYk1D7yxSqS02/dPOCwM3IKu0oJTjIMRcsIR7/M5CK
9DtVwseUyfI1pCKvUrh7Si7+IlKRl6lEqHvkBX4NqcgLVRlk8mk/65CKvJCZ5/2qP4VU5KXkfE9f
RSryIm5+0X8SqchrqSeb+H8iUpF+os7kK/mq/wqkIq9amYcsWRNspNv1SEVeyD09yb8aqcgLV1cb
rWzB5Z/AKvJSxXKKOZzW/TmsIq9VZ9ilSUD+K1hAXqMyJ6M64tr8eXwir1j7ZrakD/0pBCWvWCkE
kxwI82cQi7yWaWb+fw2x0JX1w6PK/DOIha52Eq/J/esQiywDCnXFpFKnv45X5HUqE0cnB2gVYlG9
a4fndSVJSsr4avgjr+Hmjoz6c/BHXss3hSeCP1b5/xJgZxXU7Ut5xv8chCH/gmnh8l9AGPIqvgXJ
16uEC/+Wix6u36KZArakZG9Ly8UEWEy1gPN6sfGOslGMtsXmEQP7PxNPyrdY4cqm+QuP8Pa3oJij
thsXjT3Dg4zsHED0HulLIFvecoE/K/Ptawhg3lyFEvOil/91GFVeWTdv9U8jS3nR8lTJKLN/BvjK
K7n59tz/JIwqL26eqP/PYlRpPV3dZcR3uOZ/CqXKi4kqMJAzQ1ejVHmBml9U0fmrcaq0iqlW8bqE
if88TpWXrQKeNlXLsD+FU+XFWHVVrOQJ9nGqTAZFPNe2yCqUKv9+9e65RkB/EafKy1RqIqdc8K/i
VPnhC8+ko/E/i1PlXVVy0aWiPbYeqcr7qTRWfCpuxBqsKv+6agXaVmNV+fchra24gdrM4CUVpo9W
5c/NnLzEV9CqvEJ1gSoVtvh/DV6VL6UQW8we8V/Hq9Iylle0ZlJO0tfwqryZynjwWdL8KbwqL1ZL
dZ6aaH8ZscoLqeVCcj1mlW+nnCuF2FX09yvQap52DhVMztmpUoIjIYSLIwsFQN55yRf0CStgVUJV
TKcDGX68yiD2Jo8kGPslXLa733PRUvzbI080psfmmkKQnZyiOikA7VTaU51mm9f7Mbx8v902tx3j
frO7Dxuym2RaLF1VXqyqnclLpZq2YCls8r3RiyQDIS8yQy3yMvvDNdZS7ONSO5D/oVP0btxLvHw1
Ql3LgzGxeTnT5qTWZTtxZ8pVq8QbeeRCboJdmhoj5ANGEov21pEWtHm86nj5daQ+rx4L2tPfrmB3
suyuROieHo9vXo7b0++b2PQHrJZ0al4t6TM/P+t1TFQ/nzbBhLyBu1flCRlPzilv374Qm9ix4nZA
27LVtgoYPm7rek3PcDy8DlE60HLBl8sW8bKF9w26ApzCymPpWGAW/qyvO1Z1p6KRzHj7mJV8Gn5s
0v8VkHt5QaGS7S6Xt/5xuF7RzkRZgguX+5nRZJos9/TPOqKBq2rZKoRXFo2JoNtDrBosy6eWOVQC
bVqXVQxuUwOmet1RrHb2pspjzrK48xrH7SVIvkgOweAipgPmNy1bSYV6XNbLRGmFXy+P/J728SgA
fRtuf7kP/3D9T3/9r//lL/AgyhVTX6lHwUlqHDXWvwcPKw67yr7RX4NM+GvcUlj/vwQvLv3D43B6
IxrSiRS4qfoHlM59eZP//td/3oMvxVM9avz0sYv1Wyh9X6pcivMpXDF9w/lL/VTdn77MdNL72Mzr
c5f7Tx/9To1/S0uwqs9DacX3QXVKzN9UF17BRbAoMn7IvWu9VLikv9wH8FXVCcM8PP/j9mU4gj3y
+YtMH53e7tRUgPzdgiQmcGBAx/Kt38oviE4mmG71LYk1N0OWsuBTNX+DEb2JLPkfqoYQ8X8nUqj/
IZrakA8kWu+EiZF789TGYxYNAF9WZykZc/iBuZdPF5BjU/GNwWe6yfLxnv5rNFbre7pNfITenrf4
J5D0gwnBt2ze+kqMwedaCmYpiRjYtbrVJEvmv53+A2XH5E/9vFuVKR1i/krZGlnusPlv2hX0Iapm
AlV2YFCs+LfqTmplk7k3I/3RQjDKuYvUsVlcbd9VpfZPtrVO7UiCfbA7f5D+UTZki0KPMJWpzcVc
/R/DVL2i46zUXWWoJTuNNoaup+1nbJORDONkvVEtT7JJVJaW+d7kwhb92N5273FlJEOyGcSqS0w2
siHWAmtU5kdkcjkzs7HCyfaLLXelSsOJpf8gNyMEjZyHYktVGU7l0g+neMmb7XVqg9Qx8VjlHLkU
K65r0Tp2masyl2OhbJs+hY79WNNNX36/AzvRlnevymXzcqT5kImx+C4iEqOYE2P47Vi3SKrP/Ejl
11Matmgfhj089A3N/fk4hWySA6kWT/VxpztSZT6oUIMYIuLSL/k14SKxsGoNy6rCC1UpROVXPdz+
nl8gKo+6KrAaDfr77Rybqe42sUvo4XaEt15eTsbwu7RtIuIqXzeWb6YwWoQ2LVs6edikyX5euXWd
QxVKE6CGCiT9Fs6ZxS8Qu4W0qmD00xFtEpArfDtbHrJKkHwiVbe5nx6Bwy73uXLu6C/aapPH4IBk
zGUbbg/SrKu8ZJ/6LdWHHautO4xYNjL+4UnNQs2SyfxjK6AsImXWtVkwtuF6w5TFKz2S+wsQ8sEW
1x/cEpvDXcQDqjXetbVzMWMWvvXk6qMyLl8YOlodTi/55pppaKwIDXLiM2pNwESVyy9SZEH4+sJi
A8jtab/Z33Pgeciq5poL8adaatCvLYt9tQQxCUaVm3HQAgL5LA2rVkzKYgFqeJaOmlb0A0d7flNo
MDIX2BWnocf8MsPwO7ReRCVhoxUrmW9vJrapHns3deS/FjMxa/xC2aaa7Njb6EJNjs22R6W1s+dB
2nmkN5UXqhRlDrLUC01wfae9VaYosUZSC7P5fj7sEEbvKyWyYMqRIWM7hWzubVL7xej7AZXrqrtK
DU9nUNw5rLLbfuaGdK8HJKFVbVWo5Og+g6FDBMR6+HN1VznhQM3JM4dG8I2n0No8NDIDjMdeSriT
ZN5Oxb+5i4Zuc7DLlkQm/bUat1KOyUCc7TG1Xxl7lYU3RVpWVG6TSX/MbLrhbbv7tf085N4GxZIi
kbBMtZV/wVJ7C8LDMOPRpwNDwWH8PCDAm8bnxF2rfEY/N/AFqdeD4xI+hmEwXgHcLGEXrC38/SSu
N+9Br4DzFtMlim8zI5/zJWi/cEYsa11lGLOEI7EJiNlEdTeyfs+tqkqWC9xd7HTA27omBJv+bOsx
xjf326sDMl7Pb4Nym4uJAtQhK/ciI1nJpWVePX2i/M+c7QT4qIoT1ck7C+W6ymjNE4YnutR0FFPI
vg9r1oQKmcm728ew3OthuCBTojL2S0l3OeI0gmeNrcjF3ANc2Hmj6ZrusIcbVN6yXFiMU7gBO+15
aOSEIC1QkTlJvJ8vhz9iFAwZ+zXpp9p83n5Dntq8QcddzZW3XpD+lOIXO27dBmy/seqQLiUayTZF
uIeUCvZlFFSIJESTyArpryN7X+EBvLQ7Xu7MZjI7bw4AgTF8TqWiTrwYVcRw+vt9uI8WQYfAlCup
SRFIHf+rrdIZ2+D2KlqXZ4hKSLEl9DGWpFyTZoOSR1UvGh1xbtuExvVKNeswTHQ6397HCReZIwAP
1EClWAKV6Plk9aVb3E8RDPFv5ACATO4WQVaj+isoQBdoKstVBTGzxf5+P+x+R+kfuvK1RW4aWnW4
SqkWh49EqIGXQQ/JqiOViliJGhHC7KxeHy0ZNzk1GyQpVe2NcnGXem7aNKa3gLZNpb+jY6l1RF6l
hnwut+sn2Edpk2TVowK5/h7kxeQVSiet6nl218/Ny/Ecvfl0JNDkq+oCzKLurYRGvof0Wf0PwjVf
b9HnBalpJf+v8r1ni6xNJbTFEqvKcWdL5RE0YVsHlNeibMm4SwU9/nmljyAoUuPk/D9f7q+vyDBQ
jlVmYgox8cb29vv8t7wc2GCVlM1TR7PGvXUSpZQr6Zypr516XiK4SXkSVspqH68PbKvKty+1QK0X
6B6w2pt+oN9zsohzOdFmSryjkpLPN7TJs7rASq7cdtXJeLZSacGXpMrf78FqQR3EnJqfr/F8YxO/
Xm2HLaq3EgyzlXBqs+PznktjfVheYcJax1SbvwTTh26E4qpqfBOPZcZ3i9+BPvTW1UVqVcFC+j0J
fq+eQVWl2MbvLPiubogiMupZfk+D3yt1aj76xH7EYuJ3QtHn86W805n0hyr3osG9qOo7Mf/OgH3y
qq+/FSVjOH6nwb2wUjtneAo7l3th4HzV2AsT389U7ycV+L16ElWuCS3vIMA71I2IUqFUuRfpwe/p
6nyRPnmhT2HB+9UNSCpDKb2DA3TGl+9Q9mkN+K6qo85dy8s+HQP3Ur+DiX/Yx3ccvV89XCL+nirf
SXA+pujf0+AdeLXPFBiv6NqB36s6nxib/qj4yIPzmbouPf5R+EFacL6yTxfli6vkiwZykFWdTWIO
gDHVfQK+ZdX5YuKxMeXdLbiXqmWal6mPSNmnA/xX9cIY/d1ynxzIJc+W+yznM+A+Rc3vNoGqZZ/g
u6rRkY+ukufl/RSSL7WcT39U8hN8xy29TzCkxdaDcqJjzXVFL+D9ePVd6oHNyu8ZICe4p+W8B/JT
1a0CEq7NyndAvlSNmHyMq3pe5LwFdC1qfZRyaoqcl+A+fXW+XLFV6RVgT3i31CuVfAFySdV6midl
Xc4H7rNqjGeioW9c2acHcqLqkuWjLvSsOh94dyYqPWaTsi70AvbJNW0vSQbus24glzsJlHsBfCsB
vxvwDnVDPeMLapPuE9gvqrYHTZn2kfYJ+L1uEre8F2YAv1fvrtJg50LXFvBR3ZLwyT5DcqmSu1zN
7RcN3p256juTiKacDzQ2rAeQpVw4Xs4nHKAXteTbcp8GvB+v36+qkEz6CPkPlV0eq8mqW0FWcqVt
I6UaWaiMI2uw7r+WwN3yeg5wbdXAyvP0R+EiD15dWWBFAulSN5R8uk306rX1IufWmQBWltfL36uk
Gfg9X2tbvqAWcD5e9xjMQbxyL0C6VP0AfZSefiq4n4aGjJH5U2nvD6aGFFTNs0cP9UcP/TiPLY9o
vRx2oLe8q6cCxZxIWU+EeEw9RxhjNTZH6NTrq4atykyhPHYsQee98WEFtYwaYDakYhwVsj1+voNC
UVlNcchF21UR+CYHGOCsmHAz1fSFmHLolpMuHhMPUAV0ngVUjSlIzfuCHcKf0dycVn1KZ9wf9mia
E2e+qkNNf9jWKLI/zmf0dkyZamdVmKI65kf44PAJR2ZV08eiZzZlTzcGqaSwbfz+IybGHs8/psFt
YIxK9Q4qYUWzATm9wTO+UIKMDC+9aw3qSf1MEOaVma5ajD3G9y3uPI9iut8ygJkp7j28KJzRoOqx
I7x4ijnD+nw6/to8rvNyOF1j3iyV+JBnLFSTnUqpxWKra/ibqVIuLaJTKUxj/liaqDEbswGquMtZ
R+vFPE+0uOa580BIVIPRSlyyDJE4nPKgrs6ANV6Ni6sE6UzY7C/bH4jBmaxCFHUXgKcxWhNQe4Gj
2li5cRkhLukUeUG9kVe1oCgFadXAq6+9XTUwbNbsrQ6U5TBg7iIDVqqHDlY9OqehUtU8TbCKrqRD
/mNG6NXQS6qYJC/Dqgf06d5aUoJsc5Wlg5lLB0GPUgONE/KrlaVSCxBl6ulnlyHsJkYTu4MVqyF0
qZ/hfJ5dVjtQfvKq4cEYLZZzS2Mafd6RxIElKuGZG5jOLmi0fsCdVGomVVctZNp8Ig8DAq3WV6na
R9EvBfZTK4MqZXZ6ozLU6xHOAi9VjTaLfKqWIziBAKs4PLH41G6qDHZCs3j8fHRoHWWOGdxx+9vr
57C7bdIZAA/VswRT9NItpnmtGuZVDYVM8PBMII9jzpIliXSWrwf9VXHK8VwPQ7Q3yFZXajlagXxm
Bj544PvheogVAkVbA+qrJikl8uOCNUL7UdRsUuO2K2DOwt/RXHV+QceHU+oUke3TMZY6Co/usL3a
aE0zP8OfY93q97c4ZPLwsRg8mcL56FWEWXoKZvYq6yai6ko78pzF4v3c4BwtpFVTNlk9Hk2mguB6
Cl3MaIqle8dY8TSc3sjygEy9hV6q9hhPDwtetJpKlXxLzhYKO2ZspIqHDQfKtZ7Hmyor5vPLFg5M
6u4JDPyiqlOHXDs69JOJlZ//fjn2fCrP5hPtarn70Pj53pF1G4y/sqOqtqmySOsenuDpKxukLgmo
LinR9yN7sj9jurLdTDSWjHNtgwQQeDXpMQodNRM69ZTSnoml2iPOWsZtHK37eQdsIiuTJApm5VlD
FAK5V9kizJVM7Gm27h/Iw3SVxxARs1kS0MM8+zG8IOetMhXtwqGPfjJAOHTVdsqmpMjlfGxgXHJR
nTxmKgipG0r2tMKY17aCNVLHB9eY5BcvBUiYagZotMGnXNO8Rkyc2pCZU9khryenqjJOcp6Kgj0c
V89GTTmN7JlL4sXujsP2gnSKFm1faaZTOmM7taqlZWqxM46R3A/X/3g5f/xTNH/yuM6/BELH3cXY
kun0glhAbWmml8o+damvc63XRy0bK4N+HI7HaxDg0YUDIzcD6VczKMdG0bMdgT5geUemPQxzzNW5
h23sLsNwGgvLgdxWS9iqpp11dmY1CFeoVMvdsBC/fkvBaKy0QYxA8DF3c8UY7WJEV7ngZYL5ZZsr
IF62YMZq5RCb6GkZrhfKCIOMVcKodgWGHQfXnqPCeA06FojoCjOqMsZbzfU21dRPwArVhaYaMlXb
IGNGXnfoc+GGGPRwUx+e8+ctN7Lr2BymIrl4xcLVm8jnGEGsdM7ufuoZynLJ36c1g+Yrn8u4VB5Z
P1VOUYyJtecgj4cfm+3/n7U/bZIkudEE4V/kLXYfH8lis5u7xW4uq2Zm3xEZKbFwt4gwpoebtx+Z
GRTZ//4qAFVTqDkUap7VIzLZVckyuB5Q3Hhwebt/6JqeTYpnNbKP0WVFLTDTDI6p7HgAEmAZwcBT
LF9217CaPFBy0SAwwHxsDQT3bE46xERyHjY0bs1w0bMKLfPXQVOEA7RxEO+2yBULiFrUs9js9ypV
3MwmcqNl0cmTmdPRlaYRQS3FOJg2rZiHA0CKlP1q1LsWi8iaXHJIOR8qHNjLOZvHkG5SXfELynDq
8WoT6Tdas9VQCQHfC6VqYFQJcjCieCunwuwLnkhdm6/DV31osWEXZkr2SwICVIv1CU9gLmlrKdq4
pHgFmHiY3gzhqjFlBjYrTqmy1XXFu23olnImcQovcVgOM5G7ZDiu7ZImfIji3U/xURUU6WCH2mKM
PMilHSdo33057r/APwCKz2HQUxMlT87la/5DhFmbF9ruWGYNm3KPvlTFrcLxu7FKr4t0VaEqSBoy
NYZgYEGEzAiJHfIAan39/HIWrKaOv8Czs2p1OgHWEIrpSZWuLIpetDjZxBaGG+/ujT7J/yX7l5wQ
/+cTpK+Gk20Cgb6j+8UCNO7nM7Yp2kgVtNZe7y/23wpZlmLRiAXdp3goOGy2vAZpnYyXjM2Bh3hI
F6k4CVKSLLTusl0hYQPt7y/GXxsiTbFIxelVDBS2BCtKlN6OsDncjbKIjH3OZj26ZZzORnzFdRTS
aPxGEA29cnhSlsZ+/jhDc7tCoVkosIGR8B0gj4Op425JuZTWrwIzNP5KxOulh0D/FkWVpjMqF8og
6W1601Be5maY9UVkKm2vCLdXbVoaxV+UZXmqWOvaClTvpwn4f/cynaAf0diObxpFfw3gmfb1pnUO
l4tRTmSVGlYZvyk/wJgVwRjzcvstKWQrxsQ9g4Y1ZLe96MYvjHXSmBd0nr6Px6uxsMZJYT3/AOAt
tHnI/hCiUH669j/N8MpWS9+9GA/EGPrK7TVZ5AHgKmy75EusmZpI+IPkoNLL7dBlWCsr8Wg6JhQ8
FjcTK4pM40KpRZEmLQQl+w1ZJho0p7V40ZCDmHDzAdxqiNA19Yo9Fd5C/3i+u0Ih4mUJ79O1RD4m
TdQ3/kixOWGbGEkI77pmUgR8zSbkGywBIdfJPoadHZtlFJTCSi2TTiUtlp7Ulf771/tpjwld/Df4
6537K3MMp92rcWeiLcJ1AA3FK1VDQobIfFGI5Az8gxUmrYhchr22Eg5jh3igmUBk2M/XOA2On8id
iRWN63SK02DYYkGpVkjjBKx+VCBRao5eZAfrSKfyMXxP3lG1ZVeHCUzmvbIghuRpT1ja2cd82L0Z
LlUmjdV8hEIAwLbmv/TeOhk35pFQck1s+gEiPRdZGTnvNCkGX8EjlCGp/XH4OKeJMSyMIC0RErt+
zPPt/Xobz6kjK5stR2aUymn3/VNZVr7lvdmZnspqGJY/H769Ws2L9moZX+JwzD6PnnbibBh+v3dq
1qSUzfDhFA1OqBBWogC/E/eUWxgRrzr90Nj74AUWAq0U27RrWLZKOmVNvDKQpyCltZLzwx6Cvd+G
y0E5I44EzEZprVYzTkdlOeVaCEl8c5g1fuEyo/AlSqvj1fQFQ7sNquIfpWrqgjioZRO9agUspw4w
GKl2qxbF6WmDDGy3HM3+Ml81juFYaKzM4lFWKTSYYUDNZY2bFnwdL1/tBNbfMGzxGwVy/+XreIli
nLd57THOEYSEuJgIfB0uEwL16CQaD0/PIGzsIhZBk1iGR2lnczAcjWk8HlIEPAw6xhgLto9NB9F4
vHyGsvnbcyeRhSeRs0VsPIjGjxZgLQDbz6HxKPKu4gDjYnYDzjSGINvpZsTTFB8G0OYNO1SfnMOv
h7e9sYMPyrceYt7FX7CQa4DAzUUy0a17AI7pNFwVyn5EAUjezlL+mK57gSom1GMNMlXHG3J4ETxk
3sfL4hTujNV/jlLpWfM7BF9t7JXT2B+nM9zc+D1+gUiK9721C4QpJwVFnrCzPMv+BS4iTqvqpLHd
nNbh9fA9QYQ1CLNZepzIcfqYAJXH+Knjd2AonSDrxMYxePUDweHyMhkn8fLpSeqHxprQERhkIRmr
48Cv6mrdEv5492/H82X+x4i8ZBz6y5S6P9b/C1ZX+7g7GIaA2YIDYnANRwDF1xDE6RpYnyii0tlU
ZLhYLNHTj58BgkSY4nwZ9xOwWIq92FT4dqHk4oPHmeb2WhuRuOSq3Ia/Qyjb7tqHdbkokUcnTHFa
KZE8od+7nyY3luKa4q4swl3Lyoq6gRIb8OrNX21eH8dc8OjW48fLeIB8DektKCjC8Agi6M7maZj/
8aRItIY1aIvvlZQaX2Zi/7V6jKmvc2mTwb1+Hfelca+M9D9BmuM+pu51taDHl4BnNhKIrq1KptRJ
QtZ5wi1Wnm4RTYk7bkJ5UD2SRAhhinmnzrILlUMniADsSkgJqeQBvmPe6bYMEdl9DMa+VSj6hl8G
u7m+5eKpW2aIQL4KJ9SEz/ENw4IAt6+XF1k9tUh2vR5/2V7pkyKw413FvD+JrdC2vWySz3UZWiXM
QyVTZPdyGU4RtHxaEGvj7j10qRVMp/GKKOHj9/04HgB59/v0cf9QFpRkO1vkMF1GjH0rL5W9hGbJ
VK2Y4yl2YwAVEcUN3xvJcr69p1RskVKxT0rgukjZYEsnw8IbCTOzSp+fNzN1WhV7+37ajs3STkfA
jARJ/EWRa8y4wWZlW18ZnL6Pw+3vlw3sz5AnnJ/woLbbH1LbVWgPNPGzK1NnV+ei1RM+sDugq254
Xk1ojz26Dt70odK8hGxjr9+3qT6aspvM1zx8EpJ1tz/eD2PivBj8E6v2CuncnhLgRcglhWxVXz8/
XuZjiuOSJizOQ4jWK9OCutSpL9xVJLkrS6nQ/7rP4LptYQeGSMbmUIlP9Lqfz4sBq5xXlTKsH8Va
woArJXUsWFupmBA99F5ycAJ99R3GxEw3spWGa4piLlJElYys4eI0u9PwoYYtOhnlja8NpAZYwTjt
3Hix+/F6BRTXLZzM0KFw5tIj9enD7hyNsNu8Q8tpwxEwoCQ2zilcOHmQ0wnDLt5VTumhMiUbINwB
9dIAFZ1gpCbUj51kXzxlKTLAJrSQH7UGBsWfIckw5rBHrpcXiTdE1+ODDspC2wezEeNrEP3Yjyxy
Z/6mgps3/7dUWJVFWUos1bYzRR0HEZQyQX58/mYe0m9AOH7XCJra+bISFjAOqFCOIUEml6rEjDVw
Mi7eb+iy/AZ/6GSazFc5sUDpCNC4m4nUrESFRaAPE1RbIJUSqJQJKrykxCNDD4cDkqiAROpsWXFa
1S0LOc233/yONq2lL6UiNUZo4y314i2xk9l0vuuKwOqRZTYcTtdKjAcDBcGM3Mq+PStl8ukKzndb
DrjJ2GVny3ADsscsldu85aZYmR5FRYUr38Q7vfgunWGw+cbbMlxPE8ILJFM6tKlOunB8CnTXKY5h
RbnsWa85JkWlq6WyNc8xG4+2ySqpGO/JJ8lqe3FLzWpLW+l0vVRiyDivspyXFDZtIGzqLLikLbxS
VaHc7NZLKexSUhfF6tbYa1prpuTJiNLTCattQoYXcPYPh7JhEVWjc+7m55yFz7nhPLfxflgtN852
Lh4l5iYlwKoKs4UMO9cNYpdXTVcPynGTFmH1xuw1h9eb1NHiSw5uZ9Nauk4uH/VaZJtg6aQnGG4p
qVxL6ViYrE3KgUx6xQGXbNlKHlo/7frhpJbBS/7LRX+FinDT3fRFeDfErkfjg/12ex9OKTHdS7ag
V6Nb32/L5IAv72DXkhQkvSbNti6DlRkzhg/fbpLDMuntrg2v5LU0Eq+vVXpSxjcJGb9FoNXi0b5d
xsG8YGQS4rnUFXcSx67PJWmqi2o4MFK2eUJFqEPzUCRtO5omq0WjwKp0Q8Qo9E1HzJoPmkUcBM9o
m2tWheZ6Hj7mTffUZaHFVKzMt23vuQjF7IN8S5q0zMbBgrQHpkutoNV117ZldIUk3wJ22+YAlZK8
DwVLUhvnSY9ui7zvJb87YLVtBnodVaRbSdQrK0feUPJoswfjAsM21ENG3Y4E5xPtccH4Dx+4UeQ+
qWk//ud4UaB4KIKUSbkDCyJkm8SuNxxHu2lFDNQaoWkc1HdIMUEjUo4DzWqAN7czF4+YK4fd/awP
jSV6pQTrbZcyv75asJPEUfNiNgRNyWz6wBI62zrRFJ2Oz0ywgTIK2tnY7FJHaP+dSqOq16/Rsr2i
8GV7TKaf7seFyJIvV4j4ikSWtnzie19nWkBhW5G7/hHf1zjPR4WAL3ZF8ZcHC3DVjfHzJSJ9WO3a
rNeAtSBXhYAvVsUGq8wT+HKav50cIYUCK8+0vi4q6s/zeKBfx8+oEdNQu+GWtCX5wlWWog4aOeOo
KUSBVc96pLaHVtAkGV8B6wbaobLG2gvHtlD2TZkgrdC0k0qC7deu7Vv53N8y0wj2c/eO4p+3/jic
pobvz5f5DRAa3U7exptrFNRnkePhZP6WmEHkCuv+x69/3uWN8rVnGhyfZnfkV6CzfeZ3hIBTDvPK
7AJ7HNdVMwlq/p6ZljO0bP4j8TWTRj5+RedJBBTsEKJQhZXzFaPgziP5DDP/kEF425SVvePUFtrw
AJpVHbRt7yUcH51W3vrDZLgW03U3v/wj1vNEH7ZhvfoikH1DZ+Knu2LNFUXAlOcB2/UVXFJaCBNo
vgsWcTRP+3F+TR1AqJ1cNy8gou7nk8u4J3aSs50w4APLkEsO2zYHK4Qyqe5+aW+1KUI3a+H0ph1L
9VCG77QuXe3uZXwfvk6xAfRExAtCVkhGNUyAnza9TntlN57HWc6bKr0uIxhLahNCyz7Plk54C8er
4qTT54y9EMfV/Emiwu7fUBpR3Gw5CC/SPWqfL/hbhLItr7MCDU3c6Xq9axn9TjQA17SU71ktRb9U
PpjvaeTnZjKFVNu0LIM+P88IroV26agVNHb1Over0VPosGE5YPflTev6nuwodvwM6cSdCZSaeScZ
cMBG1uoCVFIYRvoy308HxeDJ/WtnxYxmO8bqP2oLEI0/XICdR759CUWoPehlYdEzFk6YxexeB8Uc
zpnQ9AFkeNVGUkGxiK6B8jpsurIIqYDSB5GEXQMdulAoDXUDCpn2wdKhVcChuDNRPq9Cyb8YAnGU
DPrOC5YcZH4OLglV3w23kdtX++F4VDoXmkwqa8Wnd/9Q7GYq0eJz3wo/v41+Oo6gR7+ch5WXS4OW
lW1bFu/ljkX+7LgphPpF+TomLqzUWU5AOYAu7A+wZsyCLkVClZTNYXy5v1kDT+ui9q2WLIZCJEIE
IMJFKm97hRhragU7K7cMxldEYghqSE+vs0LKNw1jCoveCyC6OemMzo5icxGZKiRTLGQIKexi1KIR
il8R5ks7Jt9NyrB5gM6CYqK36Wa+69hpdoemZgg4tCzsH4gvo+r9dpjl9jHe3ueD9pnvV0Y0EA+A
an7byL/rTfmWXUS3NNm5b9HqizItEWAc5mOGjsDiiNmhUVQ0Dq3pp/103JnjANN40DbHmI6Hl8x/
R9Ca0NsGBqC6zDrLJYYz/O/itbS8BBGGAkLoo8623s8XKNTfuX1vsihpfwznAEp687LgCt2OmLef
+r/xODGJOE/OXU0CIiMbGtC1XFSNVmsua9i/R6uXydViYSMIBRRWpHByCWfNa333Zmm7w8FZL/DP
Dg9Hv5GK4VVgRgvyN//H0XM0zjCd3ZyVUppN1Pz9ugpoHzKkO8BeJ4ZAt+Cpon+nD7g3l+3lDAvS
P9DEuA5RdkHd+0scEopI+7WzbIT9HBFkefwoTqfrQjq5vEQjpqFB4Io4uR/D6VM1bmiF7An6iOWa
svJ9KYmqx8Obz7Cu5HI6LzXRmyr4gWEURhd8nRd8WMVqMZjA5lsKQ/EfbOjjP++3/3z9o27H5r1/
HKztDm9u2/ed2BEe4kEZCfUXQLEq/vTH4fAHFfasYBUr3VKXbgj8cn+xNP7917/+HCdQMvQ4Qrr0
bsYf4rFd+vE8LJcp2Q39yXB0cvV5Gab4+kUy/A0FQ3r7PsWHRl3Q1/tXaoKOb72Rqn384ScOjsG0
UV17xX/8VfnSp8GxO8ENpzx//srvTTm2Lrz0bLmxf9VcEDqxUoJRm66/Rm1/+qyWrppswT+gDfE3
8oyTV1Y1UnGEP3VlDZ2Ez+e5RfmykdKM9qam9JKLEAKzf3xkSRrlCvqOlgBi7M9eM/88Dl/H/5hP
/3u8KKB1eR6Wly1hJuOE/RHppN9NFtY+lA8clCbhBQdr2IEN/TGuwShd2z+A4wViQ9l5IWWuBS5U
7rIOf1wQmMolFuErCPlI+VF2YxVzAFYvPi0v+9QrVNZQMhhIkFc2DcC/Tr8Ef+kswmk3snkXrcS/
nnPSBLKwVqYTBHf6QeYSIzjpnT6JLII/Gyre9DJqSbaEJ6qcRCNtgp6SWcg2JVyHGqF81KHpXfgr
DYDBvBWRso5Ipvj3xSLD7k6Q0M/jKVfW0Yusxc9DOYjqsYyEXOUARfu/7tP+y0/v4/7LH/72l91P
iq3H8sx+N+Hnf8yVbIS3FRkew+r7Uvn9TMqUfRtf/u3nP+hZ+7xvpURI+NP/9ttfFAI+0sm6G0MC
f/rt3xQCLOQJQTI3Rjwk8Qfl9Fj9hTd09CAPfViF0fJW+N2ff/tFWXrNorWZH5kXkvjlt/+pkPDR
7gDScHX5hbILlv/haFFasIo+bKTil9UPV8rSWbLBW7dv4+0nCr0ov1w/hPj/PyrkAkj7QoS0X2Wz
nsog9U0d9jku4ezDdAU6h82EfEarAFHo5oI8mTzq24xVM4GO9mmOrSvh3baUQhQp2DiwQkhEC/mh
hGHf+GIvi32a/55cXd+wRMQCpM5gm398wAEYVVnOZ0WVfhDndjT93eXtpW7q+E8U/icY0tDmCQpI
gw3qhcf+/AQFpMKmu5UQrS+z9onNJvfZr+dohOjw74fd4Twpq2Pj4jL8o3liegAsb6jrOlcWyMal
Ioa8+bPcNECCWKVbjxx8aoAE7bFgQ47wjxAt3kd9HVS7whN+PAhrht80ioK+76TvN4+ioDNhs1N4
YOR3DqOg6/LrY8AOq5duCCYPio3ayyv8I7w4v7wtb8ifOgPm2DYig47dHxnLTT4nb1KM7sf4MGP0
Yzqbre1eXxT+5JOnQEI4lfI7JnjQipjkacHKLN3kXDbpADKXcRIl25Qvt94suobK/D+FerbeePV7
howQzUaaymST90B4YRnlQhp5IOd/z6gSuhs2ZBOkYtGEcvt+xqGAW94GG04bjI95hrX1e2LzNxm2
xI9PVaGL8lKZ44ltGqpCb9oTYN7bhqEqdMdslu2SdXxO8SUOjU2GxSYx82e3cXIL7a+NqJonJrcQ
oTzkkP6pyS1EomYjuBd3NTCFsKhaYdNglD3metv8h+a/EPewGZb9EqFPzn+hpTD92ZS+zOYH5r/Q
WpiNAv+cV9lz81/oiPuIxbpx/gsRqUL1nW+b/0LHkkdN5h+a/0JnwxgHwiVtX/ze+S+0WP84WLnb
psVu0OVsnmkLQaa2r58UDrrRzkYPYlCsdMN2t2vWxAbYOFTyUqsnDyihudnsQ5BtfWdbK57oCMNa
iFIsW9zUD0bfl1IF5c2PjE39fs+agBqcJNH8jp4younDLEw2bewoIwpiiOgH+smQWsVKyBlMQbAe
8hNTy6pYJQ2K8FDQWQvtahY4GKp7QJPbsL7Sh2EDVcwran6UdLsOcnbP9cARFVbMj12zAKrxZFMe
Ecp4ATq6bnX1O5rpINVV2m4HOEU2aWB7Mx0R6RYiLOO9/Xvb74DqD950Xpabm+loAfVCgDXhbG+m
o1UUnohviXZEHIAgwqldFSqZ30teYn2/1ehBLXbYoQdza8erQtX2C9DkGiq96Z/q1SMq7cNlP9/R
hjE+hsXGovBbOtro8zosN+43d7TR503YopDLPYf4764Y3xD+Nl++xMp96Xwqf3cU4CXFh+og0TJI
BEp/wBCt4r2Lid5H+t6zIKt52dj7SBQ8+9EI2Kd7H4mMf5G89/G/a0JexypBeWDuqQl5bb0uJ62f
n5DX8ll9tR2E8+SEvKZkNGA3bfv0hLyGzaMre+8GPD0hr+PzpHAWRfVjE/JaPkEMJ1vUPzQhr2Wj
hsK+hKcn5HVs6hso5CLrfmxCXldsmUe4aUJexy4fO+XFQWubJuS1/ZqPuh+fkNc8jG3sfteEvJ6P
cCz9HPgnJ+Q17NHCEvP2hybkdXyQVhkbpKVOyGsYD4BDmNfdj07Ia7oN48qUo2UsxEfAPjchr223
8PS2CXm9NB7shybksapl9JCcg/TEhLyWcR4Bu9c/OiGvZVK2o6zQ0xPyGn7OeWy6qzohry23KB1V
X3T9muWyH5uQ11VbxjPqE/I6PgQVGLjvfnRCXsf4BR553vXPT8hrPRE2ReuZ+XhNIzzJH52PhzYr
g1Rhc022ToUjs7eU4Gs2z8ejZTDw6HZJS2+bj0cExNEnTxwEA7xhRYq/PXUSnTgb66mD4FhAPuNG
JDjM+W/uxhVSeQiOX24ftUe76UV35ulReyj0q0KqOUyO2qNvcwkZE9/Ny306Ajj9VfmalbAu4ZKt
o/qOs7IuVjcY5KyfHvtH1DpGjdVeRajB2DZl077Q1HFigJ3xo9PoMOLDxkAycOfNEwWRRivO5Xx2
oiAtp5Y63sMJF/PLcPTDBzxShTmQj+G2V+B2WD0lA874fbO46AR8lBhxDYl3jsPlbXRjAXC6jBID
7RhACgjQqv0dswuRZC/uduvESVpVLZVQKrMKMQ/IEJ9YDe6PTiqkm+vDA65/bPIJ0WpT7JqaTUhk
fAz8x2cT4nkxdCAWTf+B2YR0+gz4CKNwv2s2IXFSFZC0cYNnZhMSN63kBF/ZlZZm3vAOHzGNEkrg
TpVFEK9GpfB7psPRZpMScdNMG1wfB53w4DhPT64iWpUEYPGjswlpq40ELPUDE2hIdleSEIxfrxHh
nyogUMng0SKjxJ6YaUOCug1h0h4f7fUdMlj76bK/TzjQaj6Pl+E2X5R1MnitIHDx/Cw8uuleGs38
/BhGupVSertPjWEkcVdLaGw/Pv+TJEL1MAH6d0xiJJ6uN+j4rXOaiGdW6cn2d01ipEWKw6qfn8RI
h8hAp+QRb9sGZxErF3FF6x/xdeP7LUJUwfbH5kPToyhDVumfGRBJ59Q+wBr82HxI2ps4Sf7Z+ZDE
YI/4lj8+H5JusU/pHX2YNi2rktLyPzYZkq6wTT2kJyZD0hLzcJ/N1mm/+HWdpUTjt3cYCal6PyUD
6WKMGagU84CNL7DKx8anptEV1lLv18ZBlbS9XK6G+NFBlaQGOERd4wsW1h4jTNXTsO4Kjhv4oImt
aEFYEPi/5mMY6IV6RdmwFxGIeFlk9X/DGE0i3ab80k1jNIlhVlZX8WNjNEkK1SFkYvXjYzSJ67Kk
6UGwT69W41/TuKGNZxlWuhGO5vTz5S3jmIN4G3SxuYK8rbMfG/lJtMSCpqdGfpJi93st6wV19sdG
fhLBMuX40ib5EW7acCuBuW4f/0mL61On9ttzKqKoGTpKJQ4eFHhF2WWfjG5tHwNKYit5H89MXac9
9yGkYHAVTmc8KQk5G/ZY4d23/x2zK0lIdClPdMv0aTrOPEXqQd5AWG6YEFE2BT3eeOosUB2qg4ap
A4r+Kcca9jTLMyyf8cBLhv3FykM5xQW9KR0NYZDXkZG+LtEAdUoHjRLrvS5rQkStom9ny0vsRATq
+FVs18y1ZDw/NaWWvIMmxHVq/rtm1NKBtuE91/8tM2pJCOcp0qHNk2TypDeyaTIt2edlKtzypOdc
MiTbhyDTD42RJapFSpEd5lQSpE695GdG5hLJxwA+1VKaaxyOlOtCor/Zv0rFXx+F7Q8OyyVy3BXA
AR7F7x+W2+biSMJnh+W2HCHGoy09OdupZdhozGN9duRuW4ojop4b0tbwoT3Nw/igrUOI+EwxPyfi
mZG7TSeOzXp6Um7LIKjYU356cFbDhlgyn+WpuUoNnx3pAwnPzrhtOaCcz3w9P+O24XNYvVB/aghd
w8eeepX77Hjblk1JY4Gu58bbNnwSsbfzto+3bdgoL3bJT463bRnADw/aPTveti1LaTLZc+Nt20yc
of30eNs275JjAtPc0ubisN3nB2m3RaEN9d4kpNikc8a5Tw63bfNCmjj61HDbho2IZgmK52dNt4Wo
1rZPyW3YrDUcXtL92JTcNhcBsp4aoNqweaEsxfyU9G/6TjqQZyfttgyEUJ4HmzY5GjayfS2ctipn
PjDR1xQ8NWm3YRPomczfPu6wzRppuuazI3ZbBuXGsjZPzp5vc3Gq8/Yhuw0bKyvK6m3LKDPpULcP
2W3aRpr1+/yQ3bbIJVvy6TGSLYOgZDDST4/bbfncUh+G3j5ut+HDXB+nS2+1JtkwV2aoPz+cvWFz
btkQ4ydn7rZFLQ0Rf3LmbssQFZkyfW7mbsMmZjOx9OzM3TYTTa8nZ+62HEDXG/1Pz9xty1yCXHZc
t+VY2jI82we22+ZN1f8t03bbTHQ+npq22zI4XHa2TxoYfJp4v4xZ3D5tt2Fzg9kqnh703nJwV18z
uHGYeMvmuzNxsObWpLXVSq7lk2NyWwY3zYy/p8fkthk7WZ+kYyKusCIuaWVUW7aVfMqP7Pb7pjVi
O2ftu7zDCZLiuEQMzWJENtExXft+WQ7cfYXCXxo8yEYxHKbrHibKTNiT+YaIaRSBi/9Aw1qyvXjc
MGWSvva9sMwSTs5EpG99Ayyr6d8yoZJOxjcCU3q/6H9sQiVRY+3tPpm6YUIlfe17x8MhsVsmVBIF
39//QxMqiYhvPnfoMuGUyXk+jsNpmTTJxiUq5fc1q+V3YU6AVtg2spJosBkLHJRTH1qJn9a5JJY3
Dq0kCl5126HW9eaxhLR6RiBr6M/tIyuJRC/FOraPdqSNeMuXQac9M7GSyFRi8GbDjEfaitctYKF1
T07fpCUwngJvPrezSDeMqaTvwzX02Q8N3aTtdBJ/bR9oSuvJQnj77geGVhIh1uBDUCsW2HV+c11K
//YzofdA16z/p9+yLActmmVNnHrjGaiDJXdulDR28FM+BTXpJmIt70XCJIgTOMORPjH/15OqYt1Z
tcOipMY9LH2w0/3O8zc7LPKbodAjoYg6QkJVxWZYQvLC/EmyGCnkLVIolKVUbAomTtMyfxaegttM
p1Ao+bT5Fv+0XVrWd/nVmIH/CtYtWRqrv0z9COI7ZR68LsceJvOnG1M1HKbBokbYf07dJ+YAGSoS
gof0PRsRd5mP4Jx8cxDUy19sWG3d9y3DfETpZXu4wFrDL9CU3HS6bLoogqEafWKZBash/CT0TUxc
e7mMceQ2t0nG4WRJnT5TLIwuVOk7qNHHa93DXfAk8LPl37ZdCaurp648bKQj63k60QLNP6SI0SPj
810zwnLKpOFLy7+lnhxtvGODCeGC1xOQfzNKF6gYDo1TqX03PKY6GltbwtbSYu4o67I4lcq3FPeQ
FettCzCjUtFBVZ1ChY1aBCnZ21AKo9KjIMk1hqhY9ziCWZo/uzWdmgRSo9HxzeMICdT3D3vqaE+d
tifWUY+zr82f5fqeshp3lRfKPbH5c8CdXfmwGl3IEs/4s+nQULVgDmwteUk8o9x2zVrQQVL32ZpK
VuCOslLZEZ+oB4Hwri8feIZeQa3wb1UyzsuR/dZUSuLfSuNftiOwM/vm8a5pLb22FgYVUNgp7Q+r
0UUt3RLjmayhPx9eZUMn3GonzPBIshZ7i9vSTe+F3Cl18VI2NXFlKBZZHUePTfKu5seS0PdGkpVB
2tH8dyOeAiI6G9M6+OBKwiEusnAlqvyklfS81Az/bEIiOvvRStjEDtDjXRluRuc9IsGBHuFltyEJ
XXASCV/t1CEMuBtP+WF11UdaVaEfW/lYinE5screNbpjk/xvho4tkf+NdP18v/02v/5GwG/k6274
D/1icsV4YcC4TWfhdGjq8ZlGcsA/+LtW0F8zhuAKKqHLbeaQCGww+xggN47iBr6zVVHYLIVf0T9u
M+K999PD6npXw3T9r4t9l+YfNpFiiaIelF/vRnR/TN/t7X9PEaJN1nzkAf1pR8gPdtCJ+b/bbB5m
i698lMNoDG/rUtl/TpEkqcj0cdWxbQLDHRbWO6QkGa3Pg2xg3WFRO/hLpKA/W6LQy4NXLAXdUEEK
BZtNAj5d0XAKeUVGQa3somRjySG4ULjZfrQG3TyhNXjbFHvuC2tE2jXUZAw0yjmUbAANMHW4iy2e
Re49C+w6KPqKr6Glk2wVCmXLLGzE2Awo6CYNnQO7TRq8wk8yL1DEGAWhrCFnFHoEr+fnoOsSWgOj
AMGMognW0JAx32jnwG4THl3R5cEaVE1Ca8gYV8O7KIN3scGPz9v1bQa7KOk2K4VCWTCexD/4bSbc
EdoF40mI7xZ1wJO6KUcUGE82dCGcgu4+EAW+C7iLOgs4yrpm2m2yu+DztC0F3WmgNXRrCRPcpm5C
EgUmYcDqKqoi4El6F632LthJgoNZtC4mc/ztzwD682cE/bG5H/5XKSOB+tCYFQePJm8aq0et6bPB
SydzsOVNi6jhHXT39dv0z38uID/Lv6WEGylnHqzrKZ5grUxPR3+YSIfVvnYN/lGtqegPg6g0bGgx
/rGmkhCWSIWVLWEAtnUlD34t+hOjtXSMCrSPu5Srp6IzKFHxAe0WwnFts15L4qHQjrLkWvQnT2th
I0oJxKx7OBdVJROVNrWjhHlCVHIWcQYXu3ngOt1EISosSge+QeuKhzwVXSXQG2AQVwU9sDJf09E9
NqLT8Rg9zSd5WI+uaGlXJZsfDAnQ4uEt6SYkUfE804O66AvnKU0/uVGPZJX6f9+0zcZfXQ9h7N5Z
EgGdtOhp2JhwwqdchONxfiMPCv5hmwfF5mdU+Ad5qZbABg+KzRZBpZyjhWT7QMhPGW7b+IAfEETm
bM4fv3eyVPueyQwwwlubwKbf3yDTM/a2Wnxg/vsNb7PlSVnqYrFo2khhA++1HI7OwuWXnsKWN1nw
NeCIqcIyB6BH2gmXwynFHOSa+cBtV+BwNFvJSgQ2RLwYMmaNq6ndak7zzads3L9sY1k2JqjGP5bS
8ifyPWziFdYqmD9bx7bWvR6+b7MwfJSmr4l3bYrRAf3gZ8u/LZxQKBGbmmGiQ5S66GmTjIrODRT3
8WUUPQT5eltHzKjoZ0VUfCmFfZe1C5Fcr2HuLfibbdKs59IMBzq6xBtg2lJ+zPzDhkhH7UD27Xw1
jHNVnQNBRXhm+xn+87bbZXNzCSw7711I5zaebah1PG+Kw9UFj8NRJiN7SGWus5jbArAsdpp3GaUl
Fq3glELqgREpPmUarKZ+0QnblsJxQhA+Hd0s+0bdg09lAYn1fAEONpS0uTv76c35AW/bYqC1r45C
9NO+tzHzCWssxiVAx/59U0ys9N5YD0FffGQoSGYKX5n/uy0VW/BwB82Fsdt1kPUUXbP/su1J8FmL
GETJymUMuRtruzFSxyCgcVas+bNgLZ/ff5o/zn81nzitz/5qU9lClTOwYPyjXsiXjmi56VIqBpUL
9nvb1YscWGoz7D9vC6J2fERihX9akojsTCcJ/+TJKZq+4WW+gKfQNy6MiohFNoyK/7wtqu7XV0Cj
UuEmGONECtfaO1+2RbG9P9n1PYtij4ukH7foa3Ll2dD5AlH3SlaPvEWgFNyHx0kThWM8PwyApMHy
r9sulT8ORBLPXJGG02SBWtv0jEs2Sxp7ms2f5ZLhcAmObfYTy/TlqM9yGywiChtMOJ/Bx5hF2/aL
RIHSVidQ4J+3MS5rYIMKijKzon1w4mTYIE+oVoT7fZhXLYt8qWNxZSyLoZMr5lzOJh6X+AepLPxe
dz3o+5yX/1T4J6eQNihzPtqVZrtm7klbpXeYNxaC1awYD9Po2f+xY+tpxrqLq+F48/i8OOTGmnEj
IUfbCcf34zFWlkgfemGMxZG2nw568ZWfa7zcZXg7RhMMpzf1uzycrrQMZ7ruJ0TFeH2Z4zWQtOAm
RHkvl6lvu/E4UlVtMM9KIcXSXHxgJsI4I7SN2dHuNYLGTyR8vNyWrJAfN8MMSCNKdk1dlw1A+gBU
gkKnY9IEhckyZwy25namEKhlBjAE4vNY6Usfbu/LBTYfD9QOqNp6nMywwSSry7HCkMGRtwfsh+NR
mTXVeHMwBIqHsnAsTFW+ZePI8qVpwnw7nu4fqSFXTRMW9Rf+Y8SCWWgoJOqwIL1kaycktfinXTgD
Lfs/TBjQhCxbnsj+xo8VjU+yo9vJGLNjW0j+MI0QLwqxouZLglzFkhMQjSjsrBFOzhby+jn0CjmW
d+rQG84eyOlyoWI5wAzHXha+DnP8fnMlmBSCi8/XYOVRrHPkY7y9zwftM1+bhWKl+j/st40wuSqD
TmqWG/cv0H17MY9/uI5uJibMz1ZIeVMCkw6tLahyxLDePHqQRMLXL7H+9/VqCOdSGVtHtJhdAqnm
tgz3tjQIXXfD8fw+EPgXjO857afjztwUsPag/QKbB4Smk7WczH+HrSPQiAISI7Hpxt8667I9X0bX
yEbLSxDh44BqnM9iq+L38wXgXHdu35uaF2h/rCqtzPwQUc5Z9sWOGl+wQruKWIzsS3PS16WElfoI
DubBvdkGHmXUYcdmvlTLpJMZW7PsgGhELkoMTUdaLSsBAPcwr9ikEssUlqqyoIo5gwvMWmRB8fnO
tKCODU4pfZKBnxCJYRTBrwqpTpwqo51TfEY4rY1ZQFC/mS8NYMt1Kh8zJc3RXWE9FhDZQufFG4xo
W0yf5FgZWy6EQMYeoKMOrNiviMepMFLLug9yrNaurfNz80c0HQGEbDhN1/l2mc+RLheix+ILHpIN
1mXNKEJY3N2nk7K/lhmHfNAYcQCg6ZovrthFZafFlzdlUV2+Jqe+FxrIrKzOm3slzgw0f5YyQYUI
cxogV5j3i8kxHJz3Af/sRpgnTB82o7TBsQqNnavAaQAipRH2GtIoUfN9ig6hw08mvtoQHlwjdhzZ
9lCcnEL/SVwW8qJuPjz5gZzDPsRmuSRVZgD4bt0Hmqzt1Bld95f4gyfSjaSR7ec4AZZPUVXolOES
S3mJRgwAguLVY0hq7gtR7pjZsYhe99yCGa/Y1gVG5h5D3wpNbxWBUd204moVlcdr7pexZo8XYoTJ
eN2wRWZZ+alcbIx3wjhg7REOQMd5iguCHv6DbVf9z/vtP1//mHC5ci/Nsfeo9TN1t32fR1y2sLXF
yJO/gGIq/vTH4fCHy1v8mJrc3xrr5wZv8g9x1FX8MmvC++aTyP9kmDz103XvmfBx1vdfaVxQfN29
xG3249f4d0UufWeY6vPX8fsv9xd7bsq2/aPEno5CJpA8+KwKdm/rOOHg/1ULHtC37OT6xUSZrr9G
3WU6M968tWDNkxXxB7Ts/wahq/GSXHzBu34KP/jMM56yipL1QC0bB5XzN9Q4ypePT9Lf+ZRetJcI
5Oe4JT9xa7nXRWxUDYiTP3vP9+dx+Dr+x3z632NkABGxv38/rJmexO0fkU6ah/yOIBRi6w05D6VJ
9LEN/TGhnXomOTwSiX//ypetpHoFPlTukikw78zctj3hvJEYwfGR8qNV+PRz/vTTgiNnMf9lkJg/
6bS8ZLcNwe2Sv/o057I4iW+H54eefkCM+b2hHu4/zXDiI+brUBbQsIY635O//Pi///rXn9MHUYcH
0QeaI30ITP73izcXcN62ZTAZXi74OfR8DKktGrTJMun9Bxo0vZ8sfElrAyBll9BCWsmedGeKhH4e
T7myihVXlI+noTwML8M4gPJ+PiFGhEvQ/9d92n/56X3cf/nD3/6y+yluZWUsNp9X3sENCfwxVyiw
LA2EbxZX9N9+VswqMvG4n04rEH783377i/Lr7ZpEOihK42e9g4mNbaXwy39QfjcLp9dWHkJ2UJIh
lWucpwVTm6F04KXy0977Z5Ih/P6X3/6nQoCHo3P4o5CWoBTvZ4WcEgop/Om3f1NIsK7/HIs2M2kR
Sq1GxmMzWG5UuGjTTxSBVG6hC+dKS3z382+/KD/OkmLLfLz/z+ZIMUfxNrq45fW/iMY7uNf79+H0
ZmPU398vsZKDJmcz2qh0G4qmPcYM5Klehv2Xq0KBDQ+CjpvWVd6d0DN/gVj5FUJzH+fb505DDSJy
vooCPIui4Ghq4+52GU7XQR/jYYiwMR4YIBLWNJul4IC3QaHjCzIKbMaxYblxfzcevDlxADJS1sGG
xeA6KmEd4/fzYHzn1Ep8eR6WvrCwEj+S3eV+QvgaIyP298vFWKzHzzhVNkUE7D8bCUWqsKZvl+kW
HvnuMMMYnvtpd5vNC3gfFdbig6o8wuwZ46Hj7uUyf8NpeKcZf+80468pJ9BLE4L4XQDFPxj9tr/F
h+w2OZ9+5POTqzvZyKt1yB62DN8shUCR9tqQYHNApTS/Zn+czQoO94tFIRqvStiRdlSxWVbA+VZO
Xu97GLWxPGJlJbU0vcoKEYfMdJpt7M788xlKS6e399vudZiOsaQErc6/RTB3ba16eN4YCcNYVHKp
bLge5NNKBzh/ve2Gu9HGl+mfKlOyd0RaqVwuDQOJkB/U7oztpl9eDPELJo+16VHmMJrgwdnDWB20
+bcDzqm7X7VzFd+uKCjhxg4TWH4QjCTymvTMpRfCCC7XhFMfzz6sq5xbK218YYDjDDHxV8hwKAle
2vdqclvJ5QCK5D2sCTZ9/DR/jJvupRcnGroP3XtOPyQ26MinusL7VVZRShNp+MFvXkf3MB+WKrQ+
uNVg/3nn8c9O8w0VI8ji26gslU0PAuc/d1E/qJr6vvsyfir8xeYr8vmYRlTBGtj6lkj5x/w1MoUG
4ctZGIEPj8MSrt39Gku80rfM1WEov1hkk4I5RAIMwIkJJCiUgd4D4D7ckLKCWloBhekRxNFoYmNA
KQRaicCDoh1QNV43LMg70gzg2u+IptzRjF1YnLlthVgTuJLWCvhmtjd/gxHR2smykgQrhziT4SQg
jc3Y+EQf0wVYz+OPMBmPcvgc1EYm8zuBTdkKhieumMU2+OCA7UzGInQoFJ5mcxZPYNOtfgeTsWcD
2dvy9zAZCyKjdWz76ey85QVsVCHgpQAzgDZxKQtfOWxhMqINP407Y9J+KCzKjJlsuRX7s6w0aPw+
aQYgmzyGbaVWBH0dlxbO4Trtdy/z4TOBSEzkmK6Guy5qB9wKVAyfbqHB3Dh4LgEN5bOeGYsdwkCQ
YiEv8nSdtNGmTd4wd3YphiKrOlYCSr+bhValC0+pPhkbm+tYmFKHw9ViYk4Oe/OVBg8j4OoBbBJb
YLAbXuYI5DQcWsurrcE5t/HIi3F2xv+6T5fxkOBuosJ6OjCEQWeK6efdy3F+2QHFuAWHRFhjCCap
qDqR7Qv/2RBS1sHAJ7HQididauhsQQOWHtNf7b5Ow7K82DXkJQth9LQwa+rApq77y3SGuiAwDynb
TWVjqd32rNB+McVwMdfjtKfwAeBYKiRYkx6iBy93B6EV5ZQY6OVy0PjLy+yoSBEt/axHQWJ+QXBR
r68H5edZiwB2sj58P318jIcJeCfFvWV434+krka0v8zfdxOWuSqUqpCD6Sy/v4O7cD2bYyE+Vgj4
+yyqJZLD7jPqYtOh+jthEhas5fE039/eN71Cjge2mMyX8ev8ZdTZnD5vHh4xWUPzl8lKGbRt6B3u
hxNG3ez/HFNfRWV3hh1z2Irn5OVELTwKeklTePUFvQy4nyzro/89a7j0IiTWKYc/0AZPm+RWltfx
X+ikFRXxH6ilFcVh9xqGugfNIva/j++AwbIs/70THUYhX+ARANju/bqDI4/SYRB5bGNlfGONsDGY
kT4efgV/8jxcxtP+8yf1N3PxcOI/ynqI+XXFj59BB7fsF9r4kjL+gTuG+HUV4nXFOZoB5/otx+5r
/niZToMeimYAi0xwZVmchXkb4bLkLH4krCG68/99F//vc2lF8T2eZ2N0KQHVikUCikWpR+i9Tt8B
FR1IapGQqhE5L4tvqhSe2f2GxoRbis7rhcCJkU1gQAYSodqptOEpu8bI035eCkvfh5N5hRPI/rey
2L3uCzjvqAZYZIBTIMtErd377XbegUH4leybU1yVNU0tmSXfP4446hh0xv32Gu8hLBrWgetf+Yfx
CmB8CNlb8Y/rStrD0byiU258vhP+k/I5s4cxQ/QwdKRTzq8JLRsL8H4d74d5BwdQxr/tRFPmDAdG
fTnXXZvFP2+95csauuDAd44l4h8X/rdZXaDxbs/HYW+eEyz9MO6Pg9KyRKfXS5uAmvkLzSJHW9my
wb98jx+kvwVw4+0tGLbZGTY+TrcbdooBgrx5OQpDc4RUL4pEOqcZKH2PEWoEljQv9zKM37FKfXe5
K3yRS0xlTnSGRz8cQQJQNhROJk6nXL2scrlkeFWWSZVrrgUHa3mTpwmWo3wteQ2Wt2/DG9T3soiC
wui5tAm4k7zZvUxv9kKUS/UE2JixPeSh7F4OGk+URSgg+seXsvsY9spBeAIsP2Bey8dw27+b5zJC
pfKgvLdadJfH6344Qxn8Zdh/GRURV3aiq0GfwTWoP84cFX+P//bH/5tKpF++xPoFCgergUN8nA7c
X99eijJigeFXZff41b/+j592P/2H8g3rc4AgTcYSl2aJNp54i0+PKhysov1Zu83vO32DNUOV8WGM
d6Pkr6PyU/4zr9pTx1Jlwvqm67ybLru6U74rpTV+3433/W5/Ur7zR+qv3d1eBBKRdtcLC317+Q2+
22kfVh4nhkurk7kD5dfa8CPbYWo4Ghl7uh0VEdUFEaTe2w1gZ13uR+iBvN9m5WG2kv7iomX86qCU
Vn+pnIPnRFfj4dSrNVPNo4dlKiZVJslMiB5iX0XyXBpJ3gS2Ra3ZFhmDtlugCNzmv8xTt1OUX9FI
4R4mrVIWHQ8u+s1bW8J8/z4OitLrWk1nJizRokseXKEcXON/mxXwoqpB5a8bZUxPtjQekMxxmM13
NnZZimc4EsfiNgWW7K5QbJao6WTUdGA6KZraa0pWJcWPT2E6f/RsyLCx0eDKkz4IC3Gyi4PQ6Dt0
88IZGovPGCzX/TQpG8ikQ/g0P60H8wrps38M5wEUCTMzIu0ydAG9xLgB71Ua7/nP626p9We+iHL3
XSF5cMFP95q88C4Yq3o/U93FBneky6Q4pj31Qjn2XDDSUU4PaJeprkLJXA74izJ4Llj1snv5vNmy
PgiU3z/OujdUtaHks8jx0Lg7GQq7f5xdr7/yDnhQ1z/j4C5KjQ38M2K1++/T27uxtW878ouVLVQh
J1SLLw+SoNtZYK2439RLpxqsPs80VvK7xxR7xh047yykvDcxuO8iCgnlWdeCvez4wvyicnj+7DGT
16+fYKW8gerRlIH6OKu3oN7q00gxSJeSIozWNBEblBIXOWr7c17UChcUlSQPDqOdGQYt2l/nCSIF
i4xLebL+aWBmk9bzObxjP+ykZCky0RSyfLjDkIIXMfEIQ9lIZJAlXHgizhGFdJiYYHIPApagMEYh
CYZHrtZjG6XAl4EX7N5m/BDEuERgnyRc4ZXQtBbKvNU4ayop63UwkvUP118dooy1OQz3R944WdnM
cbCpXxJVw/4yf5jDXLSuqrubXgpzvI8vl5FGDHZd3e8U/4zhzTLmIALKV4JrTb+0mxTPInTNbF/r
9S+//Cd82/1F+b2cu6y9QyWd9oPiyLCJzw8ua15qZ1IKH9rtKX41g8vlCUkvQBXxKQltJ/ChTEV5
3aVYy2Ae1nE6fUlLh7KSKipAqN3m3XD8BnBfqDyVJeThs2gF2zfluvBsbuHNx/Gyx3JTiDWpRljb
S9sAPxyN58P0NimH0PWP6ivU+rmm9f3aiecoPnbff7ngryuH3yej6NoPN41kuQ7vMDJ8vhi5rMXV
2L37mJX31m7zcbxAZ5vy84WUuwhW32jH5tmGdeczlaCcW5m0Mjvtl1kCoV26Gp0i+n6/IirF63Qa
tfB0L3F9eHeat922obdZBY8etaCiC+uVQWAhJ+H03sYTlgwe3NujkjdfUh5N0rHWJS/4bgh0h+WH
Rk/OUGkNDsXlFCfUlmKmXKk7qPrHpO3hMrxRrXr0s654/OwdPR4qnIp+2JePH1I1wA73e7WALOMr
4DZSIb6TZGpl/+JMh+lkFjp7uJ7d/YTJ1PsJ5aVOvXlct42rHYeIfITvclZY2WARvJ0kNX83kmLS
egFYp1VucVKDXAokfycqxv+q0FkqyPog22gXD+4FbuB7dAcsrY5QwFWWLKeo+XDKRamgzW1XD10D
bxfoPTa3cZzjT6NnP48Q2JWrWTbP/WbY9NMwzftoa5ctdb0HpO+k1wa1eJbt6OWZdSWYgpUReevB
s5lhrCleWtDn63PNkyUZvJLcVZ3gRZo7/ARs0Nd5D8US6qpz4e1qJQ2sqHexAYeX63yEdjf3vswL
uk6HMfX8G7F6KF4GU/mrAliCZGFXLZVRfZ2uk7nQn+jV//t0MB7p36Ds6KZA6kvCxBaFHjDh/Zno
0Oob6Q28TperccLH2w1l5c7KPmK8uLgVrsAuxixlut3AX0HBSRKT4MsSr8AXhtANswYyJyCR5BZi
rN3Ih9ToGYWi/H06HnbD4RDnzj48+Zyl9IjVT+Mb4tgRGGFcfPKxtA3W5yaL1Vj19cKetAtjXhi7
wu3FSBpVobdFIV3+y/2tz+sqXkLF2nxZDsRFcIbz+fjpbnhOqlrW1RnADTCVyKTw+3RD4ymlByvW
tojmq50ISCezqGrzf6fT3fZSvg+KHGzEC9dKHxupetMugDiWPbL4WecCyz7o1jifZuENF66OF4y9
EwSRvy9nOsUNhIa1kTI6Wmlg3QpaBx8pSIHVRVD3ymSO42PAUvaEUMiEo11Y48GCitMpxEtVqgdr
yQQm0RPITBDlZp9Xl9s3/lLyIbCeygZMMPau9+PxuDqz+KOWjGsoZdnZBp84x3aP1aKnGft5mGSL
P7pSqsSM1/qyvsblvzf/yXhb2AIPDdGq4wwuFAzTmV3mbzuQGmduq8dPrZVODYUYFjPGD60WHih9
SACtpAC5qInT4gMtcNqAxU0ZjlQ/qXV2LNmJUJrbxqrD9HX3epk/jJ4cv0+o8czT95qTmtG2+zG5
aDc8cutWhVpIT5rk1DabjYEL5DlNv+Oy0kFLUpdXnIc7SbWtGSr5mFuxnlwrM66F3gAjC9+M8RUY
O/GVZ7KhzlgxkFBb7CXWft84uxaAjPOsKbv4w267x8+u5xEHS/w6z8dfp/NuuIJjFGevTrL+4y5H
k2ti4FlerATVxdzoHbbXgWuXaLBbOnoIUshD8qj2NTl2cT0h92DEr4M3+RU+ikjvYjhNH6pQWnp5
+qALza6YbF0/veI8TBfldTFnEjIcecVjMugkWyieuJCrJLnz7eUSRGRSj4X1LQjssklfdFIZv9bt
UffabxJvnhJBgbYoH1W0E9jnC8zvA1GhH2HHbUIGxE07/sMr8aT582DcdBUHoi0E3RfwNlMICIV2
25FMT/hpnYR+Ib/n+FHVjyKETvlwN97oHi1E+gv0TuPvRxIHtJgf8h1Zk40/tZRBDOXIUOKz5fge
OzzX13KCMJK1UVN30T4eI/PNwK74cSsiq6U+4sN4G6bjdXe9f5jdf2667qbLJVueRacTDzrsC8pz
FrUiGJ++bOssLukff97F62hC3XT4ZgzJ3ctlHL64HV3vl8v8Bp2hIDfjNUxlzbtQqiUdg3cKdoht
PYwKn6Iqc6kTLI9/ELaCpWP05iceTDgH5PjH6TD9GoN+g/1VrEkG83PEZ/+4G6/09XMHoxfeLsP5
fWfBLOIHxZsTKmzwt3AcHy/w3G9Yzj6/AiLT7pshuaPwFMFSwD9flUXydBz+0fCg7O3bOJ52t2+z
uWSsYwWMLvMLqdbnsuFt67zx90Sxj2/D5RBfVs2n1RHunwXWGmGaKYQ2DHedQNpdxzM0vYzHzzg1
MdeMrIuJv/gmeK9RtaT7GNNf59fb7v3z/D6e4lQqsert3Xgu0/0DLuj+fffq4JTUpvSy6sR6R2pn
x2ZEF4gBkLZXdXM8HQp+a+4w9QHs7wjiwfgEn+b6Ye6oK2aKr0yuZsWVvV6GN/RUAoF9Px8GJ4mU
VTZB0ta+Is8H7zBiA5gcL0ThAZ8AZWIZteSOoQF8jy4kE3EYrrfL/EVJ05cNa8bHpCe9L7wfGKqw
+2cM0BqXzVpZWM76+vXN3zBduFGoJ30d/iAZCNtwu96nHU7Xu83z6+vVTSbb7eO0Kl6Fj+Cq5s9i
aZmiHrR0kyQJoFJaltFxW7fFc9IZsrKdPneaKa3/bTrgMJH9+6goo07iXjqQP8+Xv7lki0MeetXw
t5Aiy7izyiko6rjBpLIRxLXxF7+Ou9PL9Rw/IJY0974ROAfoW8RPNuhF86LCi72NB8yrnElM2HZh
mA9oLWJ30YnHXLdimSdsZkJAwZQw4EUQPqH6YlTx7jLiKGNI/V1TQrQVq6dJjCtKif+6V+gebg8N
0PcBgXtgUpZyDpnEbai2Sa8M1mOhKYxqCXBZ17lYDO6sAXM7ExrF5lEpS+oiwCxO1aF9jYJ2/o4g
cYcJHTM0JD+GSVGAvObHR6DovHcfdPWv4wWgbPCxKuKQz7Jnk8Cm0/l+w/BfqHCcTkzjvZjrlawE
bkW5+JIRAcNFkSU9t9fwD4tG542FXa18LgKNkKC+3I7UKgXRw0UJKoJavNX92+7rdYcUlUfSS2/N
erzgCl3mo3JRVWjc0w+Drtstqk+xuwrReJxxbFU8eE6/nAnWFo2Jw8lISxLTpTWMLFySuDP8y+1T
MUfEtpWHl0vxTft+ldJSer9iRzvkPc1GkXVBqClPlz0KSCjnNqN8fZ/vxm+/G6mo33XdS2dGeQvc
yd/vJ8WyEntpFkWJJt/b0bC9Sx7gBe6Gw1et1s6YuryIG+SttQ0sgMR02787PsTyuWF/Gy/KMeW9
tE6SYvam4KxBiCT0h/xCPRNcnfx2Pt60B6nxMexgui+0kV9v81lhiF56tY+eozKhmBxHuafAmyA4
zXa4TJqHyBo8WCPAYbximSog1lCL4HCEW4kB/tG58UZDNuFQ9jjGu+ZtsCnYCMdo1YAbSEgj6UBe
KgK/kiScYfj34TpdUc4eB+WaMrGelAQ8eDbH6WO6JRzwmlf4e6MCeWl5KcZnNo4zwDN8M4ekUePH
4of3PnLmt3eA9da937rJpPPhWqxSREoj8R4VUlxvRrZZu9xGK79M57O9NEWb+bNaws3eE8TholhS
odmzdSf2laANOV3nI1wcxJpJWJ3GuzGfjgof9muDxAnPN7Mmc2U4U224mYd//fyYX46aHO8lOw5E
nLGuEIYCngXLwCqvljVaL0cV7BGDRwc9Vko77CSxybngKQuOR8Vq0lhkaQJHIkPStDVntJKrYoOL
5ChcEHUcT0NjGXC2+5xhm5ESWWoA0Dim0DZEou8391fuwKNUOxs1Q6o14h9nDqdZWLWFBj8Pp12u
rLRjK2VDSbOiiS/E6kj4yIdAi1b5oFw+SJcp4xc1Wxcr2L84gwdchPiubNSBTmopGY8VEuIPuunh
RVjp7tyZBZFJN3/pTIvw1zu1gIN+PQvB8Ao1T4uf2Hqm1Sc+GjtcCVFHOSV2xtkikxwS5vIykB40
hezyXGFOfuTshYXhYW1Qozm4TLr0rFAOrmOfeG2o7KFTtlCxn8cKwm7b+yqULbE3C558XrpNKQvp
qvBiitSmSoUWXwBTFVmuPIa2lhYQq9GjTzzT83bYOC8pj79n4hNeRt4Uam6eFpAFC8jVxAzJmDbc
JX0CcbHdx3ygsk9YP6z5qqyWPSNvsChbVwRlX8qKQ6GmiIieiQhKs1hBWCh339XCOWoXqZBq17/v
ZQKlX6lTeCntwqiOoq2ySjrqRcTgypyxae5tW0aK3ik/eFYwxnYM7GALifDX6Ge21VribxRZqGKW
Si/vSO4QplpbZxPS0Gucic378NDa9KEpv89uwLeiKeyhiIye6Unqz+1T1JT332cyNZTQcGc+BL0f
7tfxqqcTabe1YOjkiuRuq5jZEurAjVyZsatrcFKWDm1KtkQXPOBGraehL3rJPCuUL9r+AbwXPokg
TpAwaGSdokjD1j/KJgW6ShsppGXZ7PFDuCzljtIVaCQZBWgfMn77VSPFZEzdefvdCkFXuISUcZ0x
j5KoeX7HwGWtFpLT8bT8notCLdKmL8onLRGFL7tubV61agMULSAXuaZQdtm2/NH2qxc4g5ONomCb
XshlFaYcgaJb+zpyBIVyBF3Ob03H2aUzE81HOAKnEylloZniAjo3rlO537YTpYgiEtpG/JFc+aRp
JDfNPhqctUD5EmVnuWT16SaJYuBn9YMbFqawlByniDhpy8wxaWHHkFzUQHgmhW2vt8EwN5QK/Ww7
BbFknSohYhqeUtvFuu4nD0LrGAQeP8zRHO9XVpy/Nb7O8Wxb72SFZV0kC/Gfqe4x5shSyLCSoplL
SHX4Ok/QnfmiFOswjKjArkGE2hsG1ai7G6JZP//pj7tiB7OB4zVcDDedFWDg52AymhcY/5bPuFoH
C08nnK98U365D8uM63SJWllEf/AP/2EvQ9trFv18qZHZqQuoc6HQ8oGAUjJXiz1i7LSVZBQRqMJR
Nq2n8DGe7kdlDo75uJHaR4P6qAkGSqvzFIuKtWiCqnaoVoTAu8O1nI9Ygabcf81a9nJigtzv5ecC
+98vI/biKD1M5lZz6VatXFzWsTMPzEZ3D3FavDmT1rSlDLIUrwSlNMbiGAZEnIrcPWiOwkbZSXFr
iy/5g6JAzuPFuAi3LecnSUtx3sR15eu+1c7nnZcCvduMubxZhcWko2bXX+a+WAH7LZZGC8yHX+NU
Ot6V1Pv5xcTOBAB1+XJNIuqb8xd7XN8hQ8HMJ2U/nSTOjL/8Mu13Njup3F0jjQvEG3P3H9OutPos
7Jru/Sy38YnT5O1oDcZ2WC0troZ6Noyf6hhJrfcuqrZ4LEOGOg3ukjirV5E4pVBBb3Tt68v9n//c
0dB2i5KrHFIrNdLc3odp9zK833aJC5a77Uh2k+0CUF2Es6TUW5IgzsLrTs4rMRxShXOfSwbMlYj2
0+abdbtcG5baOsMJpeUJZ9ga0al1Jhm24zKcTSA/z+fd3XiH99vNEEKKmJHCsiMIUB2mS2rBfSbh
gxwAfjJ1VW0uffqgEi6jvTg7S48mjtn3pj0T3nnHbENZAyJGo/m/g2EJRbyKyA7oLvz0f/3fqlVS
Z03YmsTtsDcYH33Avnwu6/VuRqNUxW4nJMmrSqCMdaS+muvuf/+vXxSCtSQer5+n2/sI5U5mSVB2
sYchsLcojhsxRiP32OHqXP2XwrMic3x5/4BMe/odMUgJBkwraS2EePseJ1TLqks5k118+gedDOuu
yZeZkXgu4x2axQZgxcsHTOWZLwqHs/kyHEj8H1/MHrF2cEgoUzaDGM6rCVyzIIwMzJkY11tUrFGd
TecM1OMEqfbvIxMtaEEm1JPUo0fn9R1axqabLwVQTquNPhZywaguEJulErVYRG81wruVxRdKrc3Y
B4bhuAXHcnzO9B9uPPaYOLimkbqv/gFBbDdSEMbtGPPjpElqDgbCrUBrNxk++zaOx90/Zo3t2Qyx
oBN8eTZ4XB/j7TLt9VnxRpbW4TT27tFF2mTOMzAnNm7EiIlR8SQ60SVmjPTTL5qILSS2AWMLbGBl
qYXwBsxPmoe04MEC9mNs9ADdQbdGBWuTzodSoUd3UawdGvuy5iO0Tp/ejHBUOLQMp2i3C96ngoFK
18B+18dpAmmzCBmzhNsnsMRgqw6hekuRNxLGl2udBCVyx3njWASc1kUco4YnzdGmfWzPsLgKiwhS
Tj6LSjQe6FDM1bqUmsitufp1/jZqBlbbSgbNwzERBuH9Bcb3KMT4XtC0yn1rAgo8MEjnl39AhZyD
ntjm3LC2ZWa0wYvbG2tPkw5i76pNcVo5g4VXgQhT6DE7vAs59mO6XIzx9262eVGuS1RhVgojWKpy
wmxKYZ6hEOYwOcYynE/HT2t4zq+bPcdHi5j1ZNn67y1V/k2inWRp5CTH5wBX8A+ld4kj7DaY8rSl
w8bJh+A1PN7DAEjciULpXBqvQftb6vBdAf6rMbPvF62okQG9s0J5MmaWckZwzBCQ8H41TweQcAul
uLF+LJN0NpwvabS4y1TaqBVdsrm7xeLAPlbf2rpJW750upu1KzF13mzHcH7hKl1gXelX4E3WyBth
Mbnae1ZXtQwr73v8UEBx20FhBp8bAJvUDjpwMCFceaa6yHIpz+LrrskLxBxGWF2cqHfms2R4bIgV
zFOpmbdIr7eLVmxctU2qeLZUSmXFwRLUSpEIG9N+xAbAh+T7f90BKM0oz6gNRWxYhLMS6jC18z5i
VW7i6rJSKr5G/vFNhCc7nxsEVbIttxCnMoY5rPdBO6YmfF82GT+dB2MSLj2OWgV/K8+zvLyNy8s4
z+AF6rkzNowCpy80th87aEFDWBmFZXiDJKLRdIrgVgQj6whiU0mgQgrLWfFwfbfFRQ9wUjazWy/N
Yh4b/YY198t16dYbLU98Gj4k7v3vq3HSwEHb3mGfSw3nTIgrnLRqga9Xgim9sZrNcMQYaCX2lCTR
Q4gxxf4N3qYKrWWQQDZO7F1JRLOWuhIUb1lk0rs12vvLZJQugnT+0wgnhSLLE3OneDEGL0fsdUw3
9gfTIr0AeGyWcsHP8fsZICYVe6quCokFELtiC+BDnbfSTB04rb/cQHHMl/+Yjn+3T0c5JNax3yyO
Ohr1pAS2dL01YlMJYS/8x/jtz3N8SFcZjB/xGkTFHVFkfybNOxBa7G01g/kBHRuhLSSC0E1+Vtpz
+fgHn2kBRX7+j/vx+OfL/KHiujRZKaHgU3Q1of74vClfI79C72BdUSn0MDLxuMxvULo+tvtA97b3
a1+H6XhXzqhqM6ljmwz37fY6ayBzcxWdKMU2fdestQ2rpuYjkgiJwDapgz+LVTp0eAlQl1IcIQkP
+98T75rPysoWSyESTDUO3BWfiHI+rYpLoxvnwfw/3k1Jt8QTGYpHVUiD3JY2C57CLBRB1YkWkOZ/
KnYm2xa1HOQacIViQIfj3Sr2MqC02+JL1XH3XMJhVUAJi6qQYQyVGFIhQv8pAP/mE2GOg1q8kQvA
gOjBTHsjCD6mo0PXU+IfRSuFgWIVwPSznQSdq8Qki0zIgCtgu+YnGumClBtlEKb8J3rli/wR93N1
eNgnr1DopNoZBWbafCLNCdBCkWxSROPB+lvlg148CGVNAeynn96FHkUKQ6bmk1IpL1MF3qNiNLCQ
CkIEBahLOxaKUBS2V/ggJ6syCPOgTErhPlRsSC1O9G4EPAtNRHKMFhJFFtYDe3qhlR7moRiL93qe
jprAzqIOtLMgDhPUiiDcVrQWhgyHPDzbxkNigQVkAV50pdxk4rB4Xy1lVMntunudvt+1TvpOUkNM
pW+wdBe44foxp7FAplhzSDF8+HY6n7J+DOIBfDiq+ftpf7sneLCum6jlRz70AkFCUDbpqC8fEx88
Kkl7K7q7l+aH+q56qIMKK4p31Nuu1EFXYZg2Y/MtIOuWihE1PCZrYdbIX0Vf83jfE5ac8k7qThxV
tfQOq6GKuq1l5BEj5/8EwZMtD6PuxDGF3pHHwjXFeRdHWPLIoQKt2YvIFjhGNQWxVYjYJr7VOx3p
qTjyGc/ZkWHq7Dbq6XxLxvxFb8t6Ih9GzOz2w/nKX6GOLVTVvYTgYxkMRlgaz0i51S4qfz0Jl1KO
z1eio86lo8Ywg63aSrwUjuC4ymEq+RDFH/Evr0JgldXdK1cuMpyI66L8vBjKdXqaioZuxu7C5DjD
9lO0tpgYwxO+3K9XZTS6OVz/LXiMZf9DID/aK61FXsLVveOoJB0Opc4LSc4iL+LgpemoQlnx9AAf
L0ZxLkzUKr/dSbEXd1fbe1B4HJAVdDNnbwFyVPw8/g7QPSmELIAIUKxEG5rQ4lu1siwpbP2OMiU6
OSF8rVO0EE87vGkaoRcl84aB7WXViMCLUspMMeJ76TERShgOLoQU0gxoY0YMauZBLrHtY8BWLZOk
cFolpZfd5O+khm0kzRILMyi2fdWsG6lCqOfzQJL4MEGU8eV+04PPjWTGsmW5YEoKA6jh8F+8Gi7w
FnwjWhKJt5BkvKt++jpcJqt+kaU1xccSEwyLF+XOl+Gk4GbyUCcN1gre036w0NB03ub5J1i69FIM
a8pimI+KpcUOpS59TBI3c5iG/WWihIaeXOWuWIZg6AwmGI8WqoKS1lLNs6HcchVdqaUeXmlkIc+q
lAEtBTGm8HUUlxG9eY/TO5mlHmaFrxkmMrrVZYiJzK4vxdJZK5UkkHG54Lq6HKdmpFYhQ1tAwBBg
cil4SQUb6iqYzWyPCkIdNo/ssgPGvBoZl2kw74Uw7RnKbCn8sSm72bbRrBgOj3k1ZpkaBcrFBBAS
oEk0yqdiZU1MVleKTOzknlo6huDCFEnYSZCI38xGjP0P+1FEXyd4hfs3n51+SZxi1Xbi9HNbOWgu
wfi3cAi2mNolgPCAHDLCIdXvRcaZ6Cl9e9Ek+0qnPgDmY8tjCqOvYbKCJRReByMlqF9AMbhaQczo
pXBJfOVKmL/gJ1/jN+bsoUoWMqLT6wWqzm6DvMGK9YwhOoq35ZDeLnbA8KEDKcYPfWLOGIG0ALlQ
pmLZDAJkWb7E/556mfGfTuC4vHw6kzBOz3nCSM9zh5uvs/t2geDTdPLz7nbq7J2KNY2tjsXoh4GO
Fspg7bTVG5lS5vqyLDfyY7pEZBcu1gExdGvXEtcKMS68tPjK+Ln7mrMXUFwICu/ovI/GHq/idKwR
jXS8DLQQqvN5VG6+XL6E7qzOVeS87d7Bw4anPUXLGpBCy27MlwIsWNnEzfGl956BwICzFRsWJMGN
tYNsyHS4Q90qJK+V7fTSVdtnxA4Ug1bKQ8r9qSyQoK6Bc4+dW9Q28v0Gi1o2C/eknBR7ngzG4Dti
EBx3uEoAzf0eWVWXSycNE78hJHTa2cca/f1eFA/sVBSLrWL9IqvHSRAagJbwN2rwoAP6d+0sXM/F
itQNGH/6p42DG5fvjhHs8PnHN9gVkhjDKiKcRWHoKo+Iix7/iNJiQpEPdXhhpfQ0YHcweVp5Ik14
b+3jtnJlW+Ii3o2B7hjOwpDE95GVkpg6zb6p+TTb5iUaIDUfFDYscumWHt+o/tRdD8fCQYUkOwtF
ZoqvaaVp5pNx1A7YdxMzLSrWtbF+GcjExiiCXvLbjPBByuuqpFNeLQj8kT3UWipr6SWthHGLE5gQ
YFbHb2et0CvHbCOmFJPDyirW6wlEvD26sBsoNPOlcrWeZeGW25xNY3Adwa7jhHxEN7VU2VcpsUvI
t/8Yvg723w/TFTq4FWleVNK7kh6FQqMIRY6bbnS97VwEhDnWgCfsJM/upBkWDjToQZbByuwO0aaI
9uKRwqrCl9o8yi/yCZiENucIOQajlU5XRaSJRsPHgMMSqAdAZzEXKl7xKW7KPn7l10XRQUbrcCRI
oDGpj+tOPB7DkK9LGnf1buLbqUULLmIJlopU64SXRzu7fp4As+A03687GBwIgw70M+5FSW1tM6yj
x2hBnEBVS/xtCezvF6wnQEIw+8T883fFNai4wK58mA7dMGp3sUXxKCip31rvpiBOEhXk6ugb5chr
Sfb76WQr0fkxXak7ReFPURNATB6MPcx9xT/OG9EjMx+O2NA2HMwLM78e4+qebcdXTSxWqpOP20yy
iptkfiua1VTlmfSsAMMHYkLYDEfxCGjw+dy8klyUtatrVpZVZNL3y6+TrrdeOhgNiu1bSc/Kfmot
jhVdVE/rOygVi62TeHplS7heQGt62UyWvva6kQT3gw8Dour79XiL+zKZdAbApbZD+OtIeuVDEU+V
JDNZzOT7xzkRMBEdmu87exVWE5GwHPml6HKzE+1lLIfEGgWjxMl7SJhRpWhVwrkSQ6AVFX3H8k35
07FcpB9QKbmMcQGuqAJREFhKi0x0D8iqg8m1M6pMWVciI0BJCctDxRs+KHLgWQETs7UkHmpFPFSP
IQMLOEnOA1SUKNKpC2MDnSRdwjNKCJlaun7yZqHrXnlXbSZdFahRaPT+QIPvQ9lMzcIncU/GCjrE
9FTkTSHYM4f5jsOKkQ4CX+L5HJLxtiaTThmlzrg/DlTzCdyIxttIbQTRHBs9M/9CsHqf3qjtil/6
WNFjUeFayB/olDfLw1caLFLFmvdX2so++Y/5QBnkN3MN95sSnnNtwisBYA1KpHZVTLY+E2ODM3bi
2Dfu7JG4NST6MpeRrl9lRO6WR61qzZoupPU/RMx28DS+fCqCvJHPgUVwlEhF10h3sHpONlSWEAqt
pHXjNszKRFAIi5oKwsjWcjGv68Pm0WHDiuzoA/MzKPO0ha3X+X7Za6+83CB+FiAEC7pjLRhFErXS
HZ6u93My8Fo00rEnI4sFJSCU+GInBQZ92H9HMltRep6/oae8baWTwr4W5eob6eov6D9Dvx0Y7bq5
VIquvJ+2CVx5RUfqYweFX9dYGUjFUHnWRhNKLB6Qs9ELLRdVh6L9wYJaJLtuQ9Vi+on4jpLu+OKg
4mm4XseLFiaoJCY0V33aHjl1HbxOpy5zGVmGJd7cTstgCp6Pz779On2MEP6BFSl8K3p40aShdkW9
rBvQqrTxdW6mKjakKKK9jWx1+TIqSHXCXRHmal20wyBWhja8BdHR9ulXx2oD/FkhKYAWQSQ3GwzV
NHNeSCEwpEUvZcVNlIpTHE4x0sPdQS/alHQyz6h6xroNL9PpAOAp9s3GtUcTWvE+1Xt6G12mhWbt
3nAGUKFwaSn50Ou3ljTF3CzGZ9PP2sp6MV0fmjVaujhUkNZm5YINa/p1qRYR+4EUIXlr4V1PxENK
Pp2ZJ0zgajTppR9S3Fl1qt0TOCQqAkrFoMRXajfmym71YUuJ80VTWTMVe+lW7Ofzq7N2bKhHT1eX
slcNhf9HN83E4vir+b618VumzTHl7DvZ0AwFhPasmTpm7eMs9XO/HK2EwDFhSuBYFFZPuWmlaMFF
wv5K9IGpdHYsT4cUFfney4Eg64Mb00xRhsUGBngFoB/0uudXxdgUrx9Px1193teRmUMVw0ZcbcSm
D3BCMEU3Egm2Qqx72lAjojCmHDVETvwr6CqIqVLIL34+uVpx8JDGneOzBiqGH57M1ScDL60QxjnN
r/NM6s8mcxc4SOXgy0hwKuVLDcdbuqBLNAJXCkiNSbNaMwyVd4+evhJv6EQf00i3qw82KMvn4WzW
mMR1iHLVuazQ47k6I2WVbB0P/WBRvbVZPyykBT5asyvv5yUSvnnMiY6YdlphjpgL+p40fxUDvU2b
ZNfd1+siplTVUpXiZdh3F/YaKVn2VSzFapd34yakKnUrNmhETrGTALHIg/BXyClKAMUh9ayYG7+1
DguirX8O70YqnI/DpxaXzPINOoUSOIoxUW8wC5NVHFUtVhK5QSGraq8El7MsI/gfjQWegzdoI3xJ
HyjvJZtie/Fj2UuPY/g4j5crRHPG634A3EPc0P/715//7DSbUiWcS6bknrJqT2aUy2JDdI/g+7EI
G6de3r7Nly8YTFCeSyUaz+Rfb3kuYpg2rLtKRuRy0a1ywaKjMSsOdtI98NZxeAtE6CbhUtdiaiha
CjWeUpVQdSrTiCJUdycrJfwCUvjrG6I7KbtqpOraiCmt1QW2idq1lA3GjAgw6dpnLBRFZYm6/SHy
tykfUbN6cR8BPNxBM4NaQZYHp24RzH/5k/JumlyKJYluO6ge808nLRDXP1ETr9VrNEruRpMCmVxE
rH4kZ/wpmgtJD8pfLPet5IHFd2Aduet4uzrr6zbvQp9VkSli/wNjPoTHg+tJaTq5VAoxWhHr+n38
nsoUrU2v8geLXxQPP2slfrx+GKFpW8JQCyriqG5EhWXrTneH6atyRqWUYxbKm7elDptO2kzMo1PM
+1p48vjGr+/z/WjU+neYdE0GHYkVOHxln6KZQJFDqjTTi0u7PBox/iT9jZMhmeaNi9z2oeoRBdqn
0bsWks04mOYpusAXTmfCmBM66+bsptNdHc2SlxlD3PIw4QTaQoDtQOoIo2K0EUF5wUaveTw3QOO/
jItvdYVBMfvdZ3w5ZSUBoeXxn2UTW5Zhy7huMBiMNHGT3uKT8swZ5MLSZSK7QiEjYbINp/n0CZ3+
tutnvpzfByAU70fHfbGZB2xNVPdDnZeH6QruhAZ5SRfTB5TsQBWbcMRJHi/X+RgT37SY6nFqm4IE
lxdN8xSenflAnB0a7PdhcL2y5dW4qjYFj2cWkAuXR8/rD4d/DICi9K9KMT4xQAgUV6Qw9szBCuPw
GLOBg+Rzaux/wHrRy6i86xW8YsEmMGBpEalu/Un34ZmUrC+Kzxm6n27qZeSPvGA8pP0XGG/qIT3U
8Q/mpLrYG7XZEsPG8GdiR23IZoX3QzEGRCNEUpNW8jIXIR5tU7NRgTOURF304UJ5yQfQZssBY4gA
kJFg6DdGuN5gQJcmwBikIQ8iLWf7bkyZI0LODwfAIVDYphVYeNEDIVoaNZPbZzkEBYmKmCzYfKE+
aMl2yipdxk98lYkAosov8/k43pdS8EDNJ9kjuqRTaqdluOllnjcpt1ISckZBUPv5y3AwKuGqXLOA
EkrcYq4DeS1xZiWDN+W9HXZDL9BrPlw+d+fxsqfGT2AaZUOS0KRz+P+hkLaRHYwSXsY38/1VfVcc
/zPnU8GBovJZH8p74n+sAYQGTrC8lTMJ9WPOKrOcZmTlG4iqRwhC6hAew5/+KZXQU1N2rtFkf79c
oRKcgMuUbTXSaawtCuIAY9Uqa2kFfWxY7ssOo6YJC6LMJSRYEgqUpwYMo2/D5XDFUKcVWNpFF3xC
UYtBXDt7gTJMy6gEoMeEDU4OShy7aEk4FicTeT8ej2nmriWmom2Dnjhchm/xuZRmi7301nAmBRwZ
yjjFlmhCJNxGVL44nls5i0Ia44RLcD6DMyoEFHXN1JUG8CrgzYYDs6j+9qoOFmbbCZRzXY0ObawU
V8ysRhhp56XD9PGmvMFMBp3OlF8ToLCtaXDBQZ7bLYRShh5ulB8vH3/c37GTZ8bqp5qqhL4o5HtW
/LFGnIFGbDXsjdNB0WtitOv7ON7ixb10BLKaV0z5VjA4nzdhFAYspbGMoa8AjKUI1PzRqojYsqol
JQ7dPA93aBoYv4IGBydxuGmChuFnB/2HfFKjcjutoDwfjwJqa7CzzRoDytFk0mhXOzpu4/2IT3Yt
uNWD7QTHR8EIN2xfCVy6vDuSp2l9X0mSzbjq7zMo+L2yZzbLnKmLr9P4bedwfJVLFN9s3bVGlClP
vRXA9S2Q0m22xklCvmTiZMeQf37V1H2ZC6LdKXtmnSubL6TNrxUtBlgVRVs++vHg0gw0YcmeRSJQ
0/aStnabuZ9gH5oXWEpmmldzRs2OqQhGIRn0ZC+QCDfG63DcJ6+1lgTTVrtDoVtJdNd3lbAPq0f4
/3/8P/fRuD3DabLdHCk3StQAZgU/Ubz6TyPA9H3+lIzSBCNtidBSAQ2XZoO8J2epxOuRSpjv7YoA
i7Bebvn+eh732PfiKqnjlDpPyWd+PCU7Iy2WbSAalafBH7ejgRNbvsc/b/znzPKKBIPxk4btn2Mv
snXHUELoJ4vle58kjVmW9Iu98MWGDBZ+7LqFiyAaBYCcNErYwdLFGx9o1bl0UOzWfbW/MiCQSLUh
A+mjS+gTtokCd7H+/aVDeEmAnWH4/IVQKOKES/EyCuUyGMdQojNTx4HQR2zLJaK/Nku0OL64JvE+
7pcJW7qOcQBb2mT/QIfKK4aDBctblfAaE9a2VcQg+DI2WQ8CNBZ7zOgR12NGTXAw10r1AODbPKsk
TOY7ZTSjBbL4aZ5J09Qc4jAgwEBv0LzkDHElUN2Cm4/vLxh6tKQirxOAkA6nESIjVJZ+1RqPkFTv
ARDhFbVrtCQIBy9JSTj+OPJhxhDqwRzoVhU8B9AJd4rHAl1zkXSKCsVMmoPhDg4LleIfc/hfn7DF
gMHuetl7yFYd2DKrxQGydMBGix+n/ecOxlK+aaNCsl7cimWjDfKSGKqUwLAtkfdPI1IwpnWDaaIx
S4kI5eLACyIEgCTX/TuMeoToU1zl4sY40KuAn/HIQaVy335/mPutWrJn3ydI1X3CciDK5spE4oSq
5nFSM5UiYHwNWFCra0QaHEGdI1jD0RzuaArawQtkwSWYOWcjAtjlMVxdFfESl8QmFEAovVwMZNob
+c7X3XQDsCJFpOXi6ASKPC7dLX/6z79aa+5nkEfKaeeNhPVLuF6u0gib0rEyMCFwMwagyhAbsN6O
arTo4R9gkLpSs0XMKYIIW7AZ3KgxNly3CwDqWg5T9srGQxnildUtw+nwMkM86Xy8v02n1B6Dybvo
strBQeak/3L622XGTIGi4dhDKZYhVfb9fpuOx1/G0+HvIw5rpobLLS+5lwQdShTjOv2Pv/+srKcQ
gIov49lwFE1VX+TBafgKwOQa+HfWi9jxH+NtgEIz81+/Q8V1tBeVNsPQ/jEt7Qsy6OLtQpb624+B
Ki41BA56PZk0aBVbAQxxBJmYTxx1x3hmypsua2mu1uSkFXh2DLuC4t1xhq9aSbBD/mgkq+mKn53n
M/6di/zNBK92xuHKWD2k17ThcDWbva3KwAyByTFE22HGWekdJ2ThHIAQ6w9c1vg6QckvVQAsUkRZ
VrVQwxfqk3Jmu+dpt+RXRycD4o+Vltf5fWZBlm9kwH3LcjHuGKdmnwpS86nq8NSmkydnfIfDEao/
4pYcrZLRZWkfpAFqF4sM4TFfcd5LzDygNfoLYaaTX+MNJkqZ532EsS+3QWWSXtou/5aoLcSVHTae
FFOgy6oQcua6GAlJtrNQOkAPIYrle7WQL9CFclVOjL0Fb96pz8xoHmQVKOiB0E2ceMnOkHVsBiwT
2FhXhGcApGcloERnmi+kQVdaSE5PWu8Bo2Nskze8gUrtXy0boOQXQjOorzinJao9iFIWrqdJX4VN
Tm2ReeyVlUF+nvOMs1ffsHBLWaq/WB9tTMtmGxXZstw8XG4tszgklWcYBjkaGTMZ7/SfiTNu8lBA
9JLExrobOojbZfgKbSZHZalMCXi16hlg2zusvKxmXcABPwPKLkrEw3iaNClYNaFELR4Z+wmu9K+k
4xZS8Ejmk+JEEJlaksyhjz1/Gs22mDdo1oYSgrKvirzxa2UTd1I/otDrwqtt3TTYi3t5lKuz9qvW
D0kmE4vvgPQpK+smLgLPEmRhtrjFxNyNfDE+WHwHIvU3SEgaU+blOJy+KKZhJ01jWs6dHvRlJChE
kA5Xuh7zP14+lf12kj280MHLxdLuxbgtFB+yY/NwgMM57jhx4gUrY71e+dDOj42eZD7p+vyUMxPd
bGJRnySxSzqAUIkyGzkPdWie0+7uV5djoZT7K+S6z4MyDjAvxJmaruiY4kj3EwSi9sPJjTTAv0Vs
pOFkg3DwsPGZK06lP4PAEpnPwMJfcVKD8X4xpKfsvJecXfT+LtYVJA5cOYiKE1VLHqHm6qh3nZWr
EEj+wCvbnlkrjkJcloWv9XK7qj2VtKBWGiVshRLak9rnecFkBwc2wf3gFC0cjkIxAeXi2DwvUDqF
naX5CnhWxu921c+Xm8VDViJovSTNKHjyfw1fh18oyogV0Pi3ik9fSw8zFWNITAfLOjEiY6naaCp1
eW4KWYiDJc21GYOGDCeo81c2WTRSkJi+IgquPRdOnx75bfrQroBNvmNMQVfw0y+/bDt7Hr1ACZm5
dPaJPxfL7hQm0IR+Hq7J0WIa05uDziFRRE3rjw2W2hBvvM3QTEHVGtPpFSb5qDUfpH9z6QbQ0Tey
FmQMzMObDzASyJim85uyLDYgFGs6Spv/WhsGympqRgETVHVK2SrL6ZmqBU5148GRF/bX61IVhHgE
iMMabfElvmikyZyL2l8w6kdFeIozRm1PlQM3Gr8biz2IiO7MXX4o70hMST0YZAOA1SunX0rieJ0A
5MFusAecFaocWybNJguC7jil+qxK+6yRTm5Zjitq5nj8enqLj5djV+H8EzeoNT5Vg+RNGzyggpT0
GTF3oF9P4c86nExXMu6ExmwfZzf/9i/m/8uHy7gc3l/9kG2VlIVyzKLRsWKC92m8DJf9O07LHL+b
w9dDyvXKhA6yuAqGF2Vuqi1mkM0ioDFkCae0Tyn6HggDsHOmYypH2osT/ugSpz+TWKBr2KR4RIMI
veUBw+9oye6WWd3KobVSuitl1+9OUHyEwVlly0zM18sAzbeLsbttn6WNl+CAWTjN6+J1Ka+xELPq
78YSXAIkwe2SOlKW2UjPC6eOvsIhYouFwhyZlFV7lA7wNuPCoQs9CzeQhc92AWpga8HRv99u55Sf
0ZZSjkHJ+FaK3uAWNP7hOQ404tnYNjuj1G7Di2KGZ5Icnc+DETcAczuqWfWsK6UMDPm9tBuXYadQ
PLaZJzIRxFFsXTX+0fgahKsD4PjvciLrQspLreTmwjWKsVg3UtkK2ZgkAAiR2g5QTs2XID6sRSsv
rJ7YDa5bzzZz/XOePzRB0LXhoNdKnGkCHpQaoCNOFIMsyy6dlbzRsWxzUY465wn9y+Sacn5qLJtH
Rj/qnwDzeJfHM4N5VkoD4Zm/bSdDxhMGdJHixohltz4LbzAwLCRFfii8Gkx37r2J7ct8kOM1Jqqz
UAmXiwCiCau5cj+d9GnkySkrEJO21IE3Gn//gBvRw/10Gq3kHsRdRuVlFbFDoaZaEFsQUjNyDIaM
K0fUh3tz3UCR8ME5ZYvxmeV+i8szBTddeZU8pIevvEhEP0EgAw4t94TAP1bUdimdnLXHkCs32WGd
FOLyUcwdhTHDgsa9HURxVY4vfxztLftXqSqdXhIn0+l9vAB32RK922z77BOeMp8Z7+M468I2hcuK
h/iG1+FUQ+7mLF9i1Rjg7btGubDm1lf3WCos628lr1KU7VAEVmXgCzY87yuIEylZnay3Tu167OCU
qyExOsiYeG17Ua3q0it5l/AmrjsbGYhX8GasEtgrznBl5sBizZ60olIqu35YEXEpnncVX1BRS6XJ
S5CEKi6vhAccZXKkVObS1rQS7JxV0PMyjPVOVPRB2oUvK8c+sIxPbv9faEH89me1GyLvamkt9iiT
GgUvpvDF4SxwuOVB1MqDqCX+o+4YDK4m7qWoeMk9VkVUKzwtqjozm1SeOrvcOhZsAp0E5unNFQvF
6fEuBIWHhaNqlaNqpYaWQA+neLiWBIez5ql9PdFWk3de+KCIbe3AsutuuB8mQNEh1+i6w5QFVKDE
F1StnmftudICzKTWU5Sl9MLZ5RtBiK7xl/GbwtuVdGGPVPY48SRiQhKlXGLoZ5gx78N3VrjJG9b3
XGrVVKeBBAcj5YNKOL3j1Tv9lhuNzb9j5bDxBXaiKNzA3bnSepKVYoOUE/agzYbz+ThBT9u3aa8s
rxaZasvylG6qTFTcD0RdkYtST4Lkci+1sC2Fi2Ma1Q2XsKfWJ4VVmIbxSVR60ItRAYkmB+ZrqyA+
lfftpYwvTnFHRj3rRiaO4wlZiMShIp1XrBK5C18JbMzEs3JszL7wRRUP5AhTEFLmpzmeAqF7ZW1S
ReHVB85h8PMdjPGqVNKTtpctKWpOwVIbo2ZZQuD4qbzbVhJqtk3BRVnIkErpx05sg6R9oVuDKLoA
xIBRp9HCMrhKeLN+NLJO89/pvwK0hOF41STySpmyGJqLnuGaC0WIih1lYBXfETABB3goV8HEnh8R
Q1WzEF2mnurx8Bdzr3/SOi2IWhNqzZYjG1uGU3C/iAa70JYiX1ZzrqJKik1RSebXq1n+FZ83BNOd
ubRLZjiRZFZILOua0pwAUcwmfk1YVxjYXrb/weZVCOA6PV6VZDg3neGlW1vFeSN7RPy5X64YJzSE
tW5u2msfNYCdqZGyNArRegKBSEMD2HzJ6Tofdd2c94X0MBOiEaYhm8u+3gbsn/gYlQ7Q3GtUTF8v
xbjL4FX3Gkk5HFIvoeh66VmSqKQZndg3dNgd0o9KNNsAo8FFMaDXBALAAMpkGPKuCHHuA3g1GCaH
SZxRr6X6zmrREGEr+/6htDFzf7oKLVpQvm/mHz4QGs2JXUW5e8mNZdCdxec7TK8TyQwaGbFgIkSj
ZSQ/eEMwPClbV812toIwTh172Ukt24t7buSRG4Wc8CzzRrJ4vc3M4Wn8iLG49mhC3moE/GHLFVgl
Adh1CXGUSXYHO7k7lrhcQSMA9rfCH2XcYrNrcuESKjaytc6J+VJkuvH7YPM4bB2HlXInVcixCA5T
nRjKh9rDl+mIGMcJm6OQVJU5ZlrJC6pv5QI54ALzoYxENXLKHAqP4vm/3Vm/BoFebHIZMmeuNzMW
MjRirQgbcgP5wX6AYKK+TQcAdoeuCkRNo+q+6FvGX+jEaPzjL2yBAKUlV1IRg7pkZXW9VN66OBB8
fb6/NLFhH8WF4sGmjayP39lAE8vneEWI2XcudYQ+0rU2LZUaoXmm0GQdlFCHU9kOTHqVUP2Sasc1
+xU7w3/3uybaHDugYHN2tjKoeXmLPFZ+Rqx/3PojCt1OqZVidBMczwr6HpX8c2dg519gf9ge4KcT
8oEVR7H6lcefpnkwCqNlUk+AX1YSz8KQ8JdUgBYvytg1XWEMk/JCWXH8OuS1fvQJSkKC0KsdVyR/
gpoZNNwV5cMizOX6cS/Bs2TYywHVxrIs+A+khIwumhHPHU0dZWmltynQGMjlAKFilNRBNokjq7r0
SMr8zkSIHDXCEAdtKTrJULW+n3K03gUA86/Kkl4LVThEO7TJVfFU4Qfa7amFRomXN9HIx5oLIN1w
mQ7j1domCh90of1m93/Zm+vDD+gfMZiiFqOiAssaqZ2Y9AHazjtLbvGbCcoF2hrehumkUGadj2wi
LVEjIto8CaLR8T61ZQA0xoMsJYctozIvESukxlVGztAw53+aoeX5TaGTC4uixbwY5/Maja3T1761
dMGmc0c8vg7w30KEC/zrA2L4RmuwiVwbNG1yZohnPujLXmzR9szzgjU0/3W/fEkuopZ6E9dnEp1p
SDTK1aluDZkrudesEiLJVtbRNLk3VYpnXmIyYAsuMtU0Co/Ys0rA0/HzJ5rQ8pfTX/6cSHRkUlrw
NnxxISgMeqSA6FjcCNyALhK0Hu63maimkgdZvSly5O6IHGcowxj2N83vKlnuioFl+bArmlZKTMfL
RmwEz4MbH8/WPtqlAh8sJo81va04/s31kTuPXknEM03QBRBAaz1ga1agVFtRAd5KwTClbQYknP7A
xtfNnbwvg4BiaFbiPDmwXzVtXDUSj68gLdI5n74SKl1o+jagQ+yMSNa2kUdDXlfWN2qPGJ3lMNWg
HHUtaVvPkBcA6VcCIv7lQS1GWwt1E1OqcKKRMsNhoHKMg/CSBOg3ZcFYSYsS1i20RKktJ03Y2U0l
pYXjaTRFFDGLHSInfRKXMm/FBLludpbM/EYgF54vdYVmSyILpXI6e8FysI9lVK4o6Dghq8TCJ/QK
aykfHgCCMcA7Jewlhs2u4/BxHK9Uuub+ZVPdMPqIfRsagm1AVBuXTJ9nkoXjvobkx34wvo9inzhY
0AUbaLUCxWnGz7tONhzt51it+QbYidaGj1Nq6xA0JhcoRZuWiUIvWtWOAiJyfAyXN8Uyd8CciIBQ
LEWhjAaKyTMgnyp2sIPqXCEueTLDddorX9cidon7esPME7qbFRrNigzCjCunWYqIJAtzEawuNsmc
L/dEjIgoZhIWyQOvKAQaCVNjIaCXn9KRFCqLWBMosY+uleCN1o8/6lPTy+3Vd2OlJkvWKdC6tKhS
EwUecjL9ELs8BPnKY6TACNJEQ6ae9UpGuo415chq9cjYsW/YZN+JHp4jZrWtdaQVMoV26smvSwmQ
KXpCkGxViFXqjqxdNR4mGixjXHnPZYoo6lQpsF6iPTdllY16YPbYYa6yQiMXYd4cEaPNp7fTX2dV
2eSqfP4w/svHoGyjExGHHpXVFr3XqXrPS4L5Mqmqq6u0o90w3ZuWU6R3Bgo98fjbSkIKZLuKTr+j
vdTqy/Dnm1pG+2Dd8Jp3Fv1WDMhCijNMrEiLeVCKWV8nXBUGMJvIUhebKjwTtSlKvJdVSTCUWB9O
R/DweLM7JeX7R69+S8gqU9yZTAhZpQIPpeIat0LQf8MxnihkkqghFUv6ob5nssNulrxLKl/vAzcr
iOQnki6sNlMs4rjMt8G1dCpU2kT5tC3ERmpas0IpOXebyx5dqeX8uqFQp1xVh3TPXLNyv430CCn+
uZ8B2DFZWZP3vSQSlgDR9X3AcIEeAulF/9aVFM/nYQ81IYrL35Uyp2JaPIiY4YNKVC2yiEy/rlAW
yo6WmT9KaQHJkzbeIqN2jlPQstxUdc5iPEq1eVHIs0sQ69FWDkynq9H6W6o0m3hF91NlWnUn1S4F
10gzY/1Et5TgaeNtF89EYPKny8wt2o7y+vIw4btuLr3fQlGhhHXqeIfKydbSqHEqrywhDFZ2kXpq
RRj2UhiVw0pvQVQmNveLgSx7Y0u7oGcfynDNYdgxT7aLIbEyXhftPbiExlUkVfeDLZulkkYuBR0e
WgAQpj/MHzA12ZWWK8ZeH2eH4/ShKkdW0Ztjs2u5eYdKtX1fbOoBZaJLGQJUiCmJpdWRahRw0GHK
oKg6Sa2GlKiXmvwWetMKvTZeevkNcKep+cl3vO4BzZWiuFY93f19X6cXlJu+d8q4CRPAjFy0TEsW
xMvL7RzaK/fX/2i3YaUQrR6t6zUCBlR0TsssS+WVl1L57KNRp1qGhdhNy3JB4xFlkGKGeJEODTal
GxE5+R44aJl/07NKxdqaKVgV/KKbtzQM1ZtayoRr65Rr67Y4RQlkTaKUSXIKcTAu0Io3wiNw5aDx
Cks6MoGZmF+atj1KlnRlUAqPLFRqrZmZOBvMtxgupYFJU1FMCjqlcGYFvN/jNMSeYxyp7cq5nB2l
HEspliNt8IKVDGMmAR8EnTJYXakkB8gtqqR3snYblLR9xwlg8WubtOvo6BSzzu8N0SprARCAVMJH
rL6KDj6TEp8pny/p0ot9f6s+9OFqjf7LPmleZZIfwV4etCoREMmkTdWrVjnbFdwhHTopyAmAtvQe
g7ra5C8j5oTCpX0gze0NhO0dSfwSOqU+7lBisCwNo9GUjxGUBVHQPWduMSicVUmtwZo1pnRVF5VS
5elbhAEjD6TDeNA6o4LpgBWOCFzpYJs3HN40LfzY+mz76Eo8bfxo+TfoqpupqQ7/h9Xf7a5fpnP0
f9jZeUWH8WqWFe05gXtvcjagHqSVneYkkkUDARDp4uTYcFY/AyS6RidxTp+7t+GsrNJPc4boZ6OQ
PWGfK9R7QUMJPs0DZtXGOHU+yZV1iMWWHSfEJrmCFY8jrVhw0n5DltcD9WgWEkjXfTjPugiCnmta
+/kYAT1FWmzgcjCtRKSlHl3dPYzZlk5OS0mYh8FSCXT+nZ2le/uJHujhFzgc/Hj9l8+eo59KzBAC
k0T1QyjCceXZNprX9/lyA9AQauuOVT3gL5TSjW3/hThh9l69SkoSTvCXlyko7SqF6PI6FzzUOFk/
2hq7JCqZ19RsvmG2TqoAiazFS9jH/8243ef34WW8xetNjOeVCSNP4gSPyrrFIVIxUvhXrsksOvid
ligl2qNLvN9mhVQuZTjVNSrEyvXRxSQLwaQclLNrpLoLoyCN0tmZG/wGsB63bzMpODs9HKyOq0KT
FQWQ5pCVUvypEBmejm1xFKLZ6OIRoS1IFXBfxm8OiXW6Ya4WSkpFytAg2Lm8VBcCfi9UiRjAi8Zp
OEiLLsiAHKbhY44IFfzMFWp34RtzP72wAKSdTnvEGowTc6ZcF/iLYJoadQVoWQvZuLlLq6qkVbks
CR3HQkw518KTaUL/FVfhCCo7KhcKPrJKib0D287w+grDClmuIldW5WnyGhX8FOA+/ic0mi60R+Xy
cnZ5zIRb8Y11YxXWyTyZQuCBBeD29Tidz9qCiky6N0rhXZV9tMtnrKnOLyCGGU2/yTmYIXwsqz4C
iCIJHoXjmvD5uFoL1+v8AuIGwQzYzWBPsLItTxPdv85OKL2CwEo856wL76S0SNjGpP8ei5TTj2bS
h9MBvN8blH4CBeV32/AG11eBJnvUxKILEV/dlkejbasKRWQRnIfy2pwPHr42folLKkcDaKGddRKT
2EVskNF5Ln1/m88fUMXzYjTRB/b33W4z/o2dUKN0RRPZXiTLtojF9lZZ7nDSsbJJRs1Hwv21UeXc
RZWajU7C5oUXea7EMomeqNv4BvfDZdT21IYsSQvCN02d+Ptb6j0yod17yNY9lnGZ+zc72u8Ok+Ef
mK5gQVyX/4HqNl6P43ccTBL1np0lgIazjyHb/nDXJaOAniAN5iiEIEB4dcqPe9eF4ZOvd2GspPvH
adNm2nAzhUhveLkaijdtXcwR9GU71D6/8UwK75AwFQcVjnHcCfyOhwnwQ/vl8N32799PWFB2AQvn
EKcTid2sDwMh9ZWTaMIbKkUitoh409H2oT+cs6Mdvs4QgIMC+TiBomYBGQLZ8iTiX7FYBFxNbpHG
Psx/NBkGi38osmiCrwsx0kWbvL5fcMjwts2yaEzJ5L/jhU2ckLGtIyErSmjMAn7yAsPFlM6KJhfa
nmn6wG76eIsDveDHrN3GOefOGXKZD21CF9EoeZMyLeBteqUwBqTeYCYTyUIcjKFtpmylsbKHV8gi
3KajxTNXUp5IhVUQLyuiVqthOsYw32kvmfD738aXtyPoS7yWQvlhXpHPZinT+mkAenzRbVjEbUcl
n95+M0LtN6Njf8PIxW/gpKq9Ng3rfGAC7nP/sr+QZbL/+PxCHi7IzGguhbbknXAAC6satyw7aesC
4wbV9pCmE+ML2DGBLUiO0/CA/uT05k+YtE/1njRNeOSuNhdIfQxnaPdSNidPHvdTYinZlKjyQ0oF
iyvUaFrwaQ6YH3DbhDk4cUKV2JBDZGBDdkgdFn9clIaahs0TRkOJVP/l7WX3j/Nobs+YO8Npd56+
j0rjf9PJk8sZR+9u87x7mRR+ZF1KCK60zEmFFKHFovyxy+9EWAIQPsd5PitpfhI2jLXhrCs3ntac
0dnl1p95K6z3D3jAsgDNwXBwEWilDDgzxpuIAOJgazHUyAqxmthK5+aYUKoswWONFJRc3gy19V8s
3hWG6ugAghYZ6ls1/73yvBrpel7u2FOGBcvLqVxGLaxoNp09ImEMJ7NkIAUXvozjwmW9vMYLA0lr
NnIc0AuO6bI/juwslG2W0th2oy5eodQLEoxqz2tT+ifPDK+17IF4g5sto1ztaqR9G756ZOnhML+A
MLl8gWDzKYLsSxzdSp1FwcFTXOn19TreFDmSiy2ClueXyWAgrRHu9gSRxq+xSBUJft7cCp5l7Ty5
i8pJudgUewGIjzOMVoZCofl193J/fdXIdJWkZCmNb8Xi7jR+S0PNNKyjDB5m1UZsMEVH+7UYAqu5
RuoLrerA3inCN+BGaxqHenAD45Vn4FfBCn8pO4kzFffKIfAuK285IajD63AYbV21FRUE/Z84lKKU
uiMFIafcTC7Jr9fhq/FLThtMurISrMllBYlZ9k1TSm/vY7iC2fTdclnKOpLsaS8JNuq1RuxdI/tv
4TP6hzS7l6XU4Z9UPgrfSahGb5fh0+Lwe1W+bbel2CXu8uyWk3dvl0lxBDqxYV3aZDTURCefSaqF
jppaaxKaXnwE1j0koZ3yEJlNg5siE9koot02v6bwmhYh2HJvo2Ew3qjpvVFEL/NwUQ609AeKVoWN
n+N8wQ97v3QgGqBW0zTSeaxV9XZe9gIC6+SzR5GXYBTed+u10bMsy7r4eXkf5uvtFARbEo4722hd
9+LaDvMSFKDONBiABtdJ5VkKI4hv4uHs91eFRunfA8P7RXGc4Vkp31aZ2A+eOiT6D14v46g+k0J6
qOhdwWEtszF9+GL3bXz5Ankpn9qKpqXoktneoQaw6HSpkgBIaGpuCKEbUIfWHVvrJmWT+wvGwtWS
61ya6GxNWVDjr5OufCvRwPKOMMYHz+oGMzEag7jAxoOxVSLxiXhFXzKk4aAyzC9Dl9+1+ISQX9Nx
nCqXoAbQIX1ahRe55GO4+v9EZEqqhmEK9unFlF2IKdNs9D/H7+fjtJ9ux8/n3NBa4qQghnEcTgez
mbN2CnXMmAvYcYcl9HIhPd2qf3YsrXM2B3mD7Twr+tuVlejK1uHj57lkFQ+zJxXA6yS5RQRyoSBI
ylTwfMFGPovyDWDZHHPE8wt0/Z10Qvb6N4WTK4nAo+KaP7BCRoFfaIpeUtTLDs/z8fPNkNrknBQP
0mHJf5Bow+QspeiuNpsEgzb3uhwvq1LCzdiPMPwcpltQfsNGmtTQxoL4t0ZLQYTm39BOii+Dl2r5
b7OijX6S9634GNBYGU7z6fNjvtvUp4aiXbMa+ZX79T7dsJAEaeCZ4PuyMwJsvj5emF6zcUnI5n4I
vIVvNxLu9hPeWXxpbSHF72xtCyaxdt8u0PN00N/GMhNjpSIt6tPq3eOW46TYM/PykY76as4IRj8h
C7k6QkhsJe6g4rJk0b8LqoAl/j7fjzDH4gu1WZ4VzKRloilRbLB6zzYFnO1IcCortM8mTqjk1c8N
lkCzHUNWxM69ojZNsiIphhLfL3NlWd3pQpE6uG3f5ylxIVWdC8Qsy2JOVykKXdpPVwZtbIBozQaI
hsEkK4XgZ90gMNqFDW0NZGAm9sLSK34vWdEpoqCX2PFgXyrpQ72RD3+Y5dKYtibQPASeg8bCCfpJ
aEu2nRylbfyt8CSPD+Fbfxw6r6bT/nhPAHwjJTlEZV+GrVdDmaI8skI4W5sD23kRt2XWR83GoaxL
tYkPcOLS7kbQg85kwn9V9JEo1f8+fzNv3ULh7z6As6Bo3vijxtS4QAjXPJkrqKyr4sMvEC5y2HKp
+CPxDgcB1dlwKkY/347xi+GOPZh8oehCAvE1sbA747qsrOKfZLWoLctu93W83KbYyO6aQYuuDtg2
zeJS46++4HFWVmJk5Sl0MsxvMBYS0RHgbQA8OASdFOtmGRq9YqK1DjfyHqBO0Ao01sibojOLXO5W
ycp6wwlljWyL1IoAqqRMDK2bYBecQITeJ78zXXRUXC6vHzyXslu1BAvPLbUSFs3TKX7sdbGwbQmM
zTKATw1mBBDixqL+ExmjkuM3LgtzF0WX7e8esjf/uF8VIdeF6sA9KIWvHzDmcRs0VHI5bWX5Ip4i
GXk2UOnEqTHJ/6iL+aIRJy9kuaKNu0JQgEZlprk97yVTbqnQXPyK43CGQlInHMm8A7kJvONU0PHV
/50x91RdttKKvXNlwUE7gyTfj9DmAcBtJF7iB1aLqH20KP/W6MHc43KoyiXlSDN73i7Dyep9TZb3
RfzBYvEMgVPYt0Yh1XE8XH8ya/v7iP6a5RTF1Ouiq3SC8kSbNQLhEm8rWqaQrFabvHvHy3jDy4Ur
V11JSSAyuum2bV0w+yvlssWMzYNDFYG+q9kI9FWgzjJxwn4S6zGyIlceWCbFSFyJpj3l4WbdSUVx
d5KO4RdPSEnWkXOeO57sYfqqsEEvhADsRFrwG5C4BZv5GL4f5zeQKLqzWRR1/E0aW8oz0S0uJCoO
JE1VuGFdtN0qOulJSVfygJe3fN6m4XSz9mVcwpb89H1pe5YpRkEr5dsvwSuHwDh0AGBlnA7tQIpG
jhJb+2s8ISz+FRU4SBps6deArpehQUQRq5Stv5VVys6qqOu6zflT5VJViODbZKU/iiPGTYqFnq0L
SDrvIvt+BIhVTa/TmIxWFBVvCsSUgXWay0YxMyTRDRoFfJv3O8AWoUOjSL/60VBZqtkRlNS26aQi
OKxikNXpbZMmIBQS9IteKMvNyl4Rb5IJY7tGrA9p2epjutqgFdXN0FTpq2Jeyk2vWQRutWZQEMH6
I+Ees76EHR/emvO6bcGNRYAAZFqPUZEyvYtOrEODtVnhSIImfia9GEwINgaGRBhdML6CMwv0uEBZ
xJ+w7mgvZv9RsR55IsQ+Qdr//TgS+CjUM5G1VShRZynZleVKpEm29OlIHKzt7fM8XrH6fa9YEuvK
k+Z5IZrguqKIBmnxB1YRxhQ1qVr+0dW73ob9F9Uc7MQMS2wuS83msjzmvUBw/nU6/S/dFhGj1U6E
YAsJCTtjJVlXVYl892KRDvn4/N6iHco1Q9JZWbH3E3brhbH4q+LodvJR9spR9tInH/M/J6NXwT3K
M+MX7FbOd64oErEsewn3WdvEwq2WysHywlgo3zB/5mv3yWbdqHfPGgR6fquWjNsnXZwfcW9riU0i
p1JEM8jmWHIxGN4o/ob401ZiPBcvymup2o4ZzIrK7QN72dVjbOTsYNiJ1x9oeAR2SUpNFrK36L3j
HzYqCl5uF4864E+oQQch9JSVuWJESlGKCGdVynsrWQFPX9DQNxa1xrO2PZ+YgTfSURnlsGBfr4KL
SYWv8MCDid2uVVjCWy9zxQkVzLhUkk2ce/FgcyleZJ89XraQv7Gl+1zzKyEJSUIkUtcXXG4ic80K
NMoFIijLSkW5iOW+WVkr3NxGjRQ4WEqlQgkZpVMPSrCgkTwOJQyUyaUew+X4ubFsoJNqvqWwL/lV
NoYCPPKHy2X4VELArST+Fm+Iy3JJcCn6ZJ3+cfDtoFqP4xKPYv0nO7CiFUtGJAgsN50O43dFfvZC
eOTNXDoEQ/88X/4ChTL/D8yAU3g0/93Ba0WHl1LIx11CQncoV5B1ctbENm9vVG18Cs8q5f97VldU
lZSM8zEGwBNAVyEZYfDiGwdnc2R3yDKhr6YYEPW6ydI+AohnYdJBKXXJpPq9LFeqiTpJDrnnu+XN
qcbCw4hp1nv9Oo3Hw5LeUoz9JignK3PR3qCrWTL6unHM4iKLyFynXd0Z2E4cxdQqpPl0Wa74dTyc
ubLOlvg4KmdFikgS4GLLBcj8SFRV9EqSdbn4MA5mRQoWf9BMRJpVqU7DLquqjFdNcfWvRCzaLEri
B0qQ8ubRHCFVpU++XCYPhMKHitJSVWhRi/wvoC+glsPbK4cJGvPg4AmoVjPHxUoUHtC06vc2v72R
WkikMLgjxSaArEOk148B1AlnEEUwiYnaSjH3cxFmQLGQnjIeG9EGoot0r0gXImXZxrNpTA2JcaxU
3FRMp2Zl+y/fYzZdpBLMj5yCYklFyFbSQNglLa0C+VOsSXoYj2EyWz6mdRyVwbxOfzl5li3c5iv8
FAZq4gnT/dGYu7/4Yq+1qaRYqHU8BcTqvhTfLF5CCoczne5Uae0KvzdFe0opYLGfL9ic5auHkBXp
4VCMWNlnvi797NZO6DJh5nobLjc7ZNcGzuCWFOVT8fgEB7Gj62E/ElQOKKntMuZgBtFpRUeJGUaM
+YBdDhW3qtHMe7+Lh64CZFWMjY+3vSJT2k7ssBKpbMj8tuKgaQj3DjAbFOIIg1aCvbHkQCkwWk//
7dJulxJGKMS29s1RTSGS+UMxTvFUF7wxayuxuENqcrQ5pkYqr7CI+YEYVyzlYH4mGxqE/UurcvfF
ntNsd/4kcg91xQpGNItN1LA3W61vrP/X2+eynMv4Zr6/qvU/fHc1Yr3lDAvBCgqtmJ0F/irfkeBU
HDwFLGvGf70m3LSCAQEw88TVTFvgUAtOPV1SafpKdAi2ZaXpv6K/SrimmfgzvIdm9zaexgtgIKx7
SRTlU6z5xOZjqmxLXW4ZHqQcTl5CqWpIWc6w5UrSoBNLwSIlmPFf5rVOpZTUfK6rQQzvWGP+dvGu
qVKbXQV+AasFXskpRSa1YTflgiKHvKJqjqpfMVrNz2OJ1ONpfJ1gCMeYdNklA/cIWCZUyvK6mO2g
DowCOONseltjopex8qZpwtzMgvqiy5isihHi288EUeJxqSoTW7S2uRkbanirWnLOjUVnPoSu/tS9
ZJ1e+cn6GROtcI1YL0jWBm2SCohBnvoQs2LBVvEkCFPOWDRBLSnY5q8oIOlVumoWxytQKWL1Ng9M
KIHHTsxjPFb6KWaRiIXnzKJ/nw6HUdE9DJqHzb97gsEU3orXy61vIHH0mRTk+OaLZxVRJDqTfnuB
n6VwZx6riwrafcbv05WitAkvsJEwIJ8rE0r05vD+ycqXClnN+pQ+YtEFnoxXKiV7SapE7RlrySzc
niixk0LWWaYEudtWEgVL7njVA3qJYbdT/lj6dd5GpESKK0mUb7PyCIiIAlRaVXMp1nY5G9F2RC79
8notg9ycTCt9xx7Ujd4+awVcHk/YHuQtPYcNqFxBKcIBZGWnWJm5JECyQuktkQsFnX18SLZnlHmj
VD9yfbFVUYgZR8zL0YAI8ss0QBSzqFjD+ZaWGdFYzjKlbpAHNLxSNy8Mk6RQ2PRBWCkHLSfWS836
Wa7UoHe1WLXHOpteJsJCT3Q4iUkSeDb/SWbm38dUh38tpOerTGFVsaeOgmGzMcuuaiCqqIrnCgus
JrYsmIyb11Fz7y8oqH5KvIpqHdx1A29etIhLFoc8WErWqD3DCfG9RTZatRkp5qIUl03VByqxKhmY
5zEvgx+fLyMqkMmVTMRVYM6cO2g2YUg3LFyP888V2z1nYhmRf7zdmMIdCIo6FOKNJ55joUPO+p9g
py7igEsGtD/ql909npHyK7X/lbL2CAVUkfqDNHNGk7uD/x3rrRjt0s9rDAtl6Iec8/rtMp8UjPOc
dcwi3WbVa/bDay09zZoAtNYGfDr7R5QYxJTFr0ZOOxhjJtUjW3Ri07ft9qDBKtizpdgLuYjtJFTc
bOmmEhHWePMJAkXSv1NVAoYpNvZwl0E0jQ0YoGeZRCI35yV0oOyPk1nHaRwum8N6BRNgDBATFrCl
MUWpA2K+QeNgju20059JiP8vH8wkAf4LCfmkDM/EQXRKSYNis0rWG5PTW8+xZFkUFNt5us5iW1WF
lPN7Gdg4DPvmAdBovABstNORlEhSQuWZ7jOnYv9N8QzESyoZLjk04WtysT9lR6L9/1g9bBMtWmG6
aASjV8Uz1Kk2UZGKUL+zQSLJZjnL0jgfMuHltxJDWTeNBYISDR5hftxVoCmhArkvRvNYN5xJJobE
XKpoKWOiwcYPCUM8fwCPPdl53CeY5hf37nPWKLSoYBJs43/dh6Nr6wdy5jMo8AKTVd1GzjpCueLE
uPT+HRxQSo0vVp/dXUIX55lk9DmSmKvAYEacQsbMRp+kDhdl9cNy3hFs45x1W5BN5JG+xtebI8CD
XtvTIEi8ZNsN+lUjfb44/rr3KwIcMxsSHQ7/GChbaR4DZQkVEswgq/GPdsO2eIe4vi12ByAgc6tW
VrdAnu42vmCWKXfuC2WPefhJ8bDD7X3vxO6dAEWKcLwIG7l+qAohcWUPz984iwMMi5tvyia97con
MM3nh1u8HJ9mTrZfjq8G7mZVtJXyBj1b++6ZSCshbqPrn5ROyuFWkgQxDyot0Fwkp6htc0Xrmiu2
fOt5nnUdrGXhRnbPOuk8gFMfuSQtp8tSorZaG7mkmxZXSxLWvMUtp5QFKsPGHfRHqTJpwfGBWSLh
UW0aATkTNJwlfOWPQxE9naaSBFGWUiilzKClcmqlJP3UV75ZqgUAywzNI9wgWljbJDWT/S2HEEpe
h0IzskbYpBVqjIPe4ynFnJUjknZiqBM+X/9I7VnZWTQRtqRTbfqib5QXloc2x6MVRElchYLIZC68
z29Sq7XMWcN6ZDGP0iPB/hmTz/UKlA2OFyEDP9C+1kuTcpappHPGKeBdyt5L8W8j2XvR15B67Ll0
D9vNLP3p5usQWB3XEwqZKpTJ+XPSRX0HVbZFujDFmOKeVrTuV9Jl8cd2QQGdck2txJQCj183L7SR
KD4quu0SpY1YY3GzcYs+XoXqiw0uXGrnvazf8g3L6Va6to65NoRcquyrWdnqVb+CugJa28UMZ7vc
szEBRf136QxuV2X4SxSJjrSR10p6h40LyqF81/zZqc36G2ohCykHhU3oSyGbXo3Vi2GPrFDwhzIx
ZkpxowWA1J0u5QyTNWGthioe1ForcfZK6kL1s2chQvMGGLi2zEkp7yvlVjm9T7dkbVDM8XtsMN8G
h16HTeV1CtE0hUoTb0NJHkjFoUt4we799HIZhy8UmcbpvBSJVpK5Iixg5DVpQdVaKUy2lRKbx6It
DsVDpzFL/2tAbGXXx/MIttwUUawTKQQ5jP7IQZtQCZoQT7+NAjAlxUzF6125t3r6Sm0hQn5WiazL
aAIsibwVs6RXsg7QOH0eLrerq9dTLj9LgAdbpYvOCOioH4MjLTqppkyG2Lc5Y9hEolyxKBu5bI8E
Mut3nr9DjX6ALbgNGUiGed6MOKdhLIgjG7JcQc7oJNlsczoLVqxZFup+/Hs0JxRUzyIONQKvf7Pa
qFpxrBxPq7iuRsgU0JChxNG3IsLx1pSqjvXXCzV2K6SwDRaIOJzB4x6yCoWtlSZ0KW3sUpZ0opJN
LB/H4malUkHF2lyWBHPYbg71ZoA9e543PBiO9u2TMNvdNCLSyYPIfPmeRx108pyn7XbjcfxQO8HL
vBRrHDOl/aVtEpjK9r7tFMNNRmjRV/FCfm5X+stwEZdEdl+CNAsBOjZigLJZ3YZVmkKwNrbZGe0j
Z65QSbdBhng62I5Rrzp1wOpNdsBW4TiFIiw3NQec7ELs4qWDWwEhFKND6gXYCCqjS75MHJ3xu7pC
N4DkNCLkU6Hour5QmqK4nfAjPXilPKknYo94SyRp3vGuy8IXgTk4ml9hXX+D4/pjcsqYuSqxJ19C
L1WQF8WpN0uxHFYMMGCKRE1+LTViTKelKw19sw07K0WrCtQDkuANvMl6tb6L912vYWqEwilFghZS
/3QoZ1JdgSuvOLCKtoOWtWK1LU7ydg6+L1vShvca4Sn2eWWFBnLc6zje/x3jCiST56kGn4vW3MNH
C+QYnLZxvMNjR0UCSSiXDuO/7jP0NIEEtj7GhAhWis8sem+bodsSIl568qsJI4mqSBE6AALYxG0o
PMbv5k/lqOqHDkA7JfQAExKv+A2G6y6UxBjPI2F2uf9ExZQreC/mYsOzAbV76iqPfy+7vuZkyx3Y
RVj9+YaNnXbFcVIiiPL9BI+SSpWJ3sUOz9lIVX6rjKw/MiBmXsEGorUI3WG/p9Yk7dBKEXMQD229
hkI5L7ExYrl3w6DG+LgfZmvGJ8YM8/GU3puDJdFQt+ttPmuXF+eD7cdaiGYVu6vfxelF3EcwZ5Wf
vycMyoIDyC7G93G63nbTbfxY1qEccf34PefEzQclI3A9vpXtr0TYmc170Cze9ObyIsI//qagjvl1
ijc/FTzEFcxEpgumKl6c7E0gZckbK4V9rZjajVxVdhYZ3CFyd6lsTnJ9lftXSFWCql9Y+aaxcPMY
qGBL2PTWK7ErUBSplg/T3FNnogG6uqr7adK4OO8ld2c5Fys9DtNdo9FGOOZH9MQaFbmKP6wdBF6u
1k26nBREsEIEk1ytcXXw2hpXt1luIaeppV5gTaC27NS83as2g5mDkbA8GDcqnjQCCinm6/tqt5xS
wjh5RshVkvkLhzKuWSupsxshPhWoge3KiYPIGr5ak3rqtKpceETuGR5GR2uLVpH6cGnQ9aZrE8cA
uZUoBVf047q+3i6Yyl6/p+1Pg/XaYotUHtVEKd4pqgRHb7dEqwc2pM6l2byD8UIdDwOGW98MQxrR
dxwHOcWLuUabBocnx6EFT9fb5b6/RcpU6Mt++ZKlgyBgMYATuKAv0MquCqHOE8oe4RtASnvA1Ot+
BuQt7/6+3k/LDMpj/FeazG+U+QHWUV2Rizj+SMc6YUiHIQHSLl2of3ebbpF4HhEJT31B5bnQpFJk
cyIJUg4c7PdxdwWIabfdOG0r0IE2vMiy5x2M41drvB+O40U5rFLapD0scZ0atdyviHouuGAxh3U0
qzpqZZRExfMbiLzKFv3fp+MNG6sDPtjdrwAlZJ4XpO+Sh1bbpMaaB4fTp6XH7wB5UDk8RsvHjs0+
x+/j/r7gpI7fb8pmi4WGl6UQXHyGRhly/Hr+8OrExq+RzCEdEGN734EcIQZHfpk/2LO1i1WkQNdJ
LPf4A8tQIxtxNReiyRbPeiwi8XCIyM1wAKCp8I6jRQh0xYUkTPyLxd0PDpXxOO8H/c1aQxh5OwP+
drAzx09lb0V4YmRMioxvr/jhsSjysqjjWxz9o7BT3tEM0x5vFd5DuUHGb5bsTfjemjXtRxbiTPqE
aM1a6cQj8pDNhp80Hm0K9rQ8iGqKmcxl3taKYr7fKKX8ToigMeuGrqQJec4+jY0KIpde62He3zH8
dZhvOCtde0JZKHFdv89RE0JN7BuanODv0PzLcCNNBXHo99FfCx3naTZ/eUmI8rr3F86GPURF6BPv
q+56iZdu3wQ1ofFOJck3EIqHH5OYTSaadVBNOX/De1X1RFM0qjGHWQbt1ztJ6lhTgXhTZZEm7+JP
FF7MYT6tn42yGVHCxkyOhS0Ufiqlw8XlGHZcUVTWVUrS1LPltkdcd+3DYWNSByrnPuYXkPPX/WXG
14UEyFlZ0N5tsFv8AaRpq2KKPmAGYwnJhK4KpX6hRKE0SiyfppMF2JkRYXhn/gprG6PumDn1onHG
DJb7LE10sQZL/MRmNPET3+OBK9g9DqqI0mmdGxLSmU5nGOEAlgiSjK/DItoScI0vTIj08dLSe/8J
hzThAG10bsrPtp6Gt2ntadv4MGQn9d03jv/dwRdhcKhUFlCEC+jY+QPi+abTb3p2i77qPNwGlfRQ
pTZsaUBAEOMOR9A6iHAlnQ9cqCE6JC61zfzpwtMuarY5V9qB4aWP4fJlvOCSNkB60coaaWXLkVfK
kbPL4tUcp+kUzDK4Jp9bKz03ImROFmfwkY7CspPkE/KvFyOWNb9ESluk2Nm5BV3YBYWxqm8giKHY
lmzR6SWqI+iUmCxpVoy5UNEPqM3KQCiEbEklS9vK42lzhbSi5cYVSdHlTz8PZRl1eOtu9hRM5Ug+
iCYibiYXSHQDgdAyUAgVcR72UdbNb6kPT9Y2rcBy7CHNl+ltOkHT/TISRb+srlOfp/JhHdxV8KiA
Wd5melv4pJQDYlfOBmN4GEyLCJzaRhXhHLMa+4Rs9aaylEriW2PUEMulFKO/GwwyWRsBXw+VbjgH
Cv9mF4WsKdq8EvPrxwkKove3K2VFofbFkIuHattMnBbO6FClmFJntNzPahQgjCuBBgy3jquymTBP
Z3uBbDiQsLb/abGIQMUolHh1nzc9wvrKRPtG0ZZCOo0kHNbkGYMcin7uL+qQDrMWEZd8KQols5Wg
ha5Gs8SHshQtq6ZYVuT5n9ZG9F6GSyLQ32ZicfQ/CQ71fdKhvs3pVI/5PNvXRAs5GPGZrocymxKH
fFnROZ9gFOj7dLVE9XlqhpjYdui00cunO27N4SBC4hBGKBCH0ifkH3eDtgP0fbgcvkE+YdjvzdYv
g/5a+FSxpQPUFs7RXm21nwtkq0PdF4G/Oka7XULldU9wl+DYQkpLEaU/fv5s3szVbx5i4jo1eTyp
vd8f2GlbiDPJXJ0so2gvhqwBZYHCxKZQAJfKNZbSYmgRTiExcaEPu1rM69UMBPES3Sh2t0zlwKRs
58nQMMrfcnDqtefiWCAYR52+f7HAKjzgXPllES9vLYeVE/XMDJXyTReopTS35Svx3fMrMdy/1Gfb
y4bIjfu7w3jdj6fDoHEfx9+DQre8sM3bqHB3fzffj5efmfBb7DVN/2VSdaOV7dPpfbxM2oOITG/C
LeMgt9uyb2VjrTRw622cP8bb5dP4h2fGzOYeoMoX/v1IMeOP6foxqNowqx/frbvXpHLPxZpC2XBS
liCqm5C3FauLtyl6hCTWzGf7ri4A8IDP3451Uk5dQpj18/HoDjdwUC4WXlkOukyH+fTlfpyViqm2
XI82dVXYZOKOp/2MsOdRwYNJEoet0QeFyNcJ6t7BPYsH4hbU4N7WRNj46jhc9jB3EXBowVcEhNL3
+RirF8RUhwML64OLug5fSWEZ1h0O8/n2H9DMFzd3kFTHAo3ei/oYT3cMmxiJojaEIg2HjNKHCUhj
QtKQm/lszI9dDFiQoFlqT4JjGUNw72P4fhxPbwBt8EF9HTAg7xAl1rBL4nidQMs60d/Gly9GyWDG
z/5VdIIckix6heTt63C8j5ZQzMpCMg42pw/GISEHhADqanS4y6rwtCq7nJs55z2+LKwVJckFPH6a
7V9ocT5coZ1LiFya+zYWF47zm72/fEzxJfYV4ysfJ3qk43o8LqhYFKbvq56fnetydIxK61nIpe/C
WbyrnVpuAMSA3YBwNkgekMIR7iNFtrOtRMuDsmVl98t1viySLv4QulbY5RWsIhQR8d9t/YGzakSc
JW4O2yYh6F8goQWB9yiUadF2HjwJbtJC2DCuQkB+IqdQEQGtSCgwAlvWIwL/LQTUNAgR8IBVUOZW
ZSEBdSBA0bYrYKEy/Bq4RflpBnLFcXztx6dY9xB9LKKpLR9b0/voBvZCGdyMTdzAtgpZj6wGrmVh
E1igT40Q+ZhOMbcWtWDrn07tijDPxkL8Nl8OXINRXuY6Gu6PGcX4FOuSCQsG1WWM15vlNVDUbKPx
B1R3XEN3ixNLTxcQCc46gaIKU29B9NVRib/Duljl20RVWCiqsJR+X7zonX7TeFdlF9gK1mGAb0Cm
AeeSmMOmMUXHZ/KpoO6ynu0eRhQdd3RrivXSSeaCFeDGlH85DqcvW2pA8Lx7z4tYaOCmXtXxlGiX
PRpxpMuNiE8qIlcdFny+KAZb4wfl1UbPHSBgpMhsdqg+0A+um7GLAXL2dpkM02HAUWlzJ8XRxDbF
H6SFLfg6jd+UDTbsgtBfKxg57E+wHaDI1HFCDWNlhoNseW+DvdR7nQ/VuxZhEd7CDYAXbtgbPRmG
g0Z8WFz8XdVNIxnN/xNUmhFOv6DZjDbJX6crNu6rrzTPpWdFiwCc8OECj0FpGsY1dX3s0lBkTMej
ImpcZeHqeJ2Ja0Qu7GKBmDOK5na/RCpQyHRhFpFPpnqbzcYqdUbsq0wwlRe9hNbUt/f5akeUuLY/
o3cI+Y/KH+eP22UcFbeFbd1787E6BHz1bSOJnelKPmRUC5NV3EruiWPkF8NByvQSpMBumqV53JSW
eT9hzNydhkWPiV990YWSQ2Jm7ED8HyDNVPdtAWx9lGekFHQF0xW1qBnub28Ud8A3pcjvPryWMmiP
/hiONlsECfwIHgOeSJ0/6l1S9TtWlJ9W4G3ZyZru9tP9eps/3BnTREvABlfkuzclGDbZETpLDhiX
v153X8ZPhWtyxRbBjplVF3R8LaHr6RwLorToWmdH2+jObBzk3eEyvClk2fXh03ATRBbHDLEP4sCd
5ItVIRN4yWPlOtZlxWUOj0Bka0lITGx5ISG9ukLyv4AFP0bjWR6eUTi1aHm9Wav9CqbO8ALaGA0e
RXGJrvSDqkmr05o5lyxs/kBpCbgolCrFHMRUm9F971TvzIxCcmK118fMOYYHSUukVsRE5MFVmKNz
AsQatjT8wIXcbIT8fkmgdBVlKTSKWSrX9+ELhQ2/3xQCPKqOfywhmwsEVSF8iOQIc4GqTsf9fBkY
IMYugVNUlCxTFhgESBp9xkBeRN8krbmQRncjKTBOnDVApj9bLJzrMOFcmMSpZlKS37sU449RFaAi
3F1BNnh1tleFUivmHSyt8Yb6NXHvPJkMaj8Lmef3n2ElAW9EIoFWHuoR4YbZSS40sAS5nS2ohbm5
KAYhk0dtk//8mjRNisCWzEODlDs2bhR9ojIEtUVZBSG6ItCFZA6a670pPmDH4sGP8erpZCSo4l5l
UvTWK0wofRvAVlHBtkhvlsL5kO2EstLaGC+fun1b15kQlyaHnExUp/U0R5xFjv3oTQp7BGX0cQRf
Mm0L6Wit/kCTYMmFxRmnaR83dBkBtHfkOlxz8ZaYY7+CDawUH6OX7BBiC7SDh+vp/vECydPT9X4+
zxc1kVE3oeb3ZhEJc5uPMxr2XbGu+iaTTvQ8XNGKAQhL+6KUCF0rMNrqSbsaSwpfKI+6iuZS8Hrj
M7PxUFb+JTeJ8b83hp6D4ATfR1WYlVSKMFtsZpQEUGx/gajdbRoVXSHO4nP+ISX3QAC7YihFoIsI
y8ue1Eg5bakV4cGddGGJjdfppNFpZFsCznnAkcsfHwgDoSsohpvaeNMJJa2R1ABnaxZ2VL7PpWV4
u8mjSkLPn7kjWw5tp+QpkG3mrHktBfNdWA6ITiq1x8hR3TAAc5sddoviChOdLn7kyzwRuD/M6u3v
Gj8WYvmVDWLb9wrT5LXlMGh2qH8sA6YGt3CHFbOnxX9UuEks6LQ+mfVc1IcqPgu3lv8eduAYXCQr
VzlG9/i0FAJR4hUrsNxivV46sgTodcER+uFdV53o16pIlQWfyBBAYC436bblq4jmU6IyrKxy2XjH
laWlFAN0E+5zWZFZivc1lMWwibxg3BXlks/CDP1tPMMcFvN/DvM3LT1fSSHC5f4tu367DGfFJMvE
MCOlF7C7cKBwLNRVXAhNh/5iMUsU07F4TG49uO96UL7uRPvq33/968//ifv7V4oB/XYcXsZj1saN
nb4UQiXeOLEJr7sStqnFLrcluUkP+TRfb5fxZtyl6fV6HveT+d+VoDg7IjtePQu9Bj1Q2/PvfYzE
NV+MsXw35f7EgHzVFF2V9Uo+SqpXsb/40E+g+CRd5D5o20ZXf9xv5AliOO1qB5qq4Qs6k1UeJyiV
OMx3nK6hiQxaXyXFsbibYd2EC7wTZqUTdK1hbVBY8L9veCpdn0turDM9VB7osu7Re6AGKzfqVyt9
IDasHoPqHzaxNCQqU4pcqslCs5hsyasNpymvnG2BYX4wi/SsZN3kUDHF9pxoTmY3296zNSqvfm3o
u6I3cGIUodwI9j5ROUKAg+AjrRExX5R0ZMZii/nS0MEjk7s//edfldKCkqcYWv512qQit3RVA/jQ
w4o9IajYgVH0kp+mquP3FIZd6b0rV5WFQq9VdYLiADNCS2WIXVFsCgC9uFw6GFIhPreOB6W8uT5k
uE6wn5fCh3l3nsEqwFiokSZK6oRnJ/IQwdfl6tPopVSM0TMOBJva1fPwVKirSY6TqSqldA00J87l
VvRUPOPnGl30IpmuakUnPBETpaQYiy9CiLUoe4FxscHVFa4nu9xbZovkJdqk9aou49tlPr1FC7Vo
ZbmUe3BJROIfEODHcUsaUUok8YglIreMr4P5KpEjbXkdBUF75g/krrwaIk6Kl5zQOLkiUhCkGN1U
EZRLhi5yMuS4gAnM+iYlHcVrRJm/u9EgMI4nDpJwhoFiChRhaWS5Yg19Ch+VRvCapcJ7dBBEI1wQ
7CC4vs/34wG7SG0IHxXmQ4Jf4eS6DpU/T18luwBIlorW2gdGX/dQxf/xRqdLQHdKZxhZI9ljYt1q
LIhF2HcBHbwnktdfxs+Xebgocc1KqqYOo4ngrP1V67mgUGItbXWxefXqm76upNKD8bSnIFnyMdU8
7bwu6liYFQrLXakAnfukuC9lEY1uuqMmvWUUmHuzW1RYq0eS6eYuWrKhr/tYYY9Z2bj/gkshC2i3
rZC0bTv1/tKJ6J5Vn4ChaEMbdsqao3Ob395ofFA8LEEXWksSibjdGbxW9iu9Aq3kebAng5beEqlS
wv9F9OUhheTpNFUeFqA08QQa6A9dDfW8SYP3iGJ5hLEatOI7pfpkOk23iTX+K8UmmcouXqKfwVG/
fNUlW8/sZ2b1ftihYH+jOSlKpKeXaiCcxe29NcWhqB8dCrpg51ZM/1RSbnVfSOfBb/VJM4rXSBKw
Qf9oaICkOWumT1tIloHIdawXtVAYT7KlHMLMNou1KoTWGzpr7AL6mA/Tq1KJxUvUy9Da4aIe0a0c
mJsi5RVqj9WA6FSUSsa0lbqKyBnYm8u6bQjO1Hk8c8mcdYuTp3jrYiWWC/TjauKMU4Xp7EKObyZK
uOqujG+F8x4NnYlD81PEVeyPg5vaHLWta7HydH8EVFJalrNzzTPQZXDVFY+um3WTsdDOBvQUZskF
Le5THKNlHAXZgKz/Srzn+41UJXojrhJj9zpMmtpt62xbA2GtdE1IMdTFGaEE1XBRuIbXreRsJi2U
5hA2NEvAGePLFu0QahKeFkRs4rcHfvrSuFezl2oJJZ1nIrDqg7J5DugQAPNrwUGYTt76sWVjFvEH
uwmUIBmvESxrny2SejGNmh0Pai1eK6lIf7H2esGqmrVK2qroEoUViuSupb7bWGxLaRvp80dt7eI/
akC16mqlPHUNvWL74TUPj8V/hEg//EPKbObifqWAWJPRcZ7VmutSUDwWFWClGVOAhz2PS/hi2evt
/voK6e6PRKITj0XunfRRMcu5aUK1nKmw92VYbn7dvYDTZYtElJsqHxN261Neiq51VVRz85vXI2q+
oeIRBn1yQRUO07UuQPXyRa/grtv+caNW61Ojr+GED5r8eT0bHawYoVUv8eaGcvmKWeRgExW9+tSV
XhHGSe3jA/OYRslemFxyu+25QMjE1yrpDR9tKTnfi9udtO+qLo/ox0gjFRBS3LlWar9ZGrsshhSq
RldNZcvDlKxTLZ0VE/G76wCe4j91r66pxeb4IEFjlbciSVg6AiYBWNwKY9Vfpv3OJ/OVqNnKOfSu
6pIz8O6qnjXoWVSCBV7Ixkq3ibVyejk4jzOgO2sFlR2zO6GWp6oiRvUmh67hGc4MLS5WuvoQ71WM
NrHB0Kkg6CRb+svuFxx7c6CuOAKsVFzOtohmHfESqXpySwjGLxEF26qG+TJ/w77mq+L9sqRRthTW
uvYFjsPiCkITHbhV4CHBW8uC2nv0JLQAcyGkxx9MbSUaVImVtTbm4eFMlTxqH9kAxY4HiAe8+p7C
VElqx54IUxxwSX8wlwQYY/9ODa+bbOie1wBRiVP1HGPmCmNG4xhMbSeQqMhN7h7NWZt7scbE62V4
04FIeFdjzyrp171yhj3veuipa0sp7/HoA5aKDyjUXLjIAwStoCPpNqL5oVgfUlLdyrkBmgIU1ZOL
rZAruwFQ9bU0ZM+se1aBtEwIiE8HwEPoW1H94cumWD8ZLcpVZFLFxXOx4rbN5ZQlmiwLX6jX2Vay
1yTUN1Ds4/o+qBmMti80vwmRSMjeJXuDDJhEULxqpB5+X3Z1gRHup+Hr9JaIRrOuezanPtLKY4Oe
iP8wnVT8SGrqYZ2ovpbXu4wQ1EjY5X1dxpMj8SnsFBWsJYdqMV+Z5LKi5+WTckqKGqqC5BGr9DvM
H/DcYQTiiFybsK+qXpCE4XNLoGNUvQC+QI0ehJ9LPR/H+UqrIoSJnas6iod7XNtFHcJ+ErnNFeFI
qmIQNt5kt6RmELOXqAdBa+klCB5L4HqeTq6QSoXS6ZpGQsMRyDhENGW+NhFkITGfxbEEGWfF6o/o
dHxgjj0+S+SrE1d4QioeGhJrK2VF9F7o7uJdzXTiDKTHF0U9HpUxu66sOP2i1+bRoXnGKjMcdpaV
nG13L8f7ZXf7Nu2Vk3f1G6mTZ0vdVj5I1GsJ+ehx92jzKTvtlUVypYZ25/0EcYYzzaVIBHObjD3O
1ifL3GvPM61ijW7Y7xERN8I9booINx7YitlNjsT0T20Dnr9oIXGmv6swEsT1tbKQhdrLcEicSesR
r8D3LvoHOhaRc7xeB01gtcVDrDzFnnHsWGJJVXaFXQZk5atoQrRKz0UQdejKUFhEtD91MiqMVSrS
/gghH7WbnGg0EuiZvFtlfwx4DQo0gpVs68Gn1eQ8dZJnK67wrZXKUry8YnVgXjlfjxBhhDFhRy3K
RMvRZB/0xk03urGdLuVqf/1YcxiTcltahuhR+4WBgGoCpfHtfTRGc0LtMLC7R7WzPGQwO1RQXKLV
bqEFXLSBFuNHnyIQLIfhfLtfVNZuSsWWkUVDwqUm+cDMNXx24bvjayTbjSbkLAAnivnWMAOlWSaB
WsJfxk90jxMsWz0oG6CR51VRKqHwKlVjcrJ92ehdKrUlbbwxijp9LKiYbzZ/QAfFCovjPBywjHF4
09J+neRFP8YTGiWe0EYblXHBGvJZIflKYgmMcVdci/GnEgTMpVrFhzrMUglEigfymBxxpc0KT7BQ
ffuIcWgt3KsrSUilJsrskdoCyquH2bsql6JGSzmDmpZtszIa41U7WinWk28JgipVO5XY3G8r18Y/
G1J/Qin29/E6He7D8Rc4TCXgIhbemNeeKW87Ch/xjo2JuldfVyIIxvbuVOoKk7ITQp4EPZKLEg/o
s0oq1SEgjJdEbrUV0MN8dSyW6iiBET0EtL8cX5Wwjwg3FjH8KOqliJ1I8M915dIYS6g7oqdpvp+P
X7WePaFTZLFITugn4oSh8X5VXnjdxwpZuX+eaiirWZS+U7KySqxObH0VpbLrKlMfXc/r+IqHNuZk
VrbhQO49a3tC8DvWMZwMn9e1kJPxDLzUmLzYArNUfVffSGHwg9kNDdbl/UqJ6BrLM6ylLLv9dIFB
p+kcYwG9KQndSgJet3ys94JWdR41ApaK8AQMatEI9ZlB/vU2oxUF+3H49ql8bBVmrLrHbMf9NO0h
Ppyst6gkBF3bjuhy76kUtdzKE2ySNEI8XEP7ypTWtlgDxHTaMLiVql6EqzBabgE8PEB3udJD2rPc
J8t4LSIkaOjaHccBK+9O47fo+A9SAr1a2C70biu0JHgd7MSirgFgiVyxIyqp9GGdtlGQcdsyCugp
FD0p5U4iXi8zvxU1KFTqeWFokUtwemaiIaSvW7nmymPU2URUWjm3vQgBa+v9B8PiGovUYlM2Ch4l
0c7YHSeV50+hftK/uwIeDI7czAuLRxWpSaOTek586URQk6r3dzUBmByrEyFR8qY14K9nZNRCwb7C
fFVsDAbxELQPO8B7NfdCylQsl7L653W6XC3Gt/1HHXuuYuZmjwfDXwZhbypsJPa8LQ7TU5jjbZ4L
9fpUUIZIzlDFgyUF16ua+mSOGDbml7KNYPn0z5f542/zpPVXdIIAQGsaZ+NA463LQyTlUFUI7qlx
7aBphPVq2IbKRBUfL7v1UcO1cM0V4VoIwp1Nd9nQAVyIHQ3OyUrJoS7PJD/zu5ENw92sHwA65vHq
zEJ4HOd5mc8SZwFedt6tMRmtWUMloMbUS1gjHbfzfXgvbDBVscJ7sW5dxYpXChnyQk6cbxnXoxTR
NWK1qysk0ssW6kwEobTQ1NePYanfpNIyB3xikWjf58v0T2hwPqI9oXQT8IayCgGotM37lhFyVOgM
4mlIOoc6bihE+n20Y+WtsqD+jTRZD7+xqScsTLeSUynY6iTh/1gUZA4ehe7e/LVWUlzqQcktUdSN
EdQ23nPBpPL5ghbpn8jyVWRyHQWdoM4nOybb0HtNxVe7IpdeOPefFIHeiEVrga9y/TKdyVUBs0dx
V0qp1/dhwoXGb70I5e+KIaFibaeXrFVNF+8Zd0shN9mGgNRZZ52MggYMi/85ehGWyd4ukYwwpLJy
K6DKYgFNYFXQzgI8fJ6Gj2mvRYmRmM2TlgUHrhB6MDc4FrkUCLfFfVvBYZtMMMexGZ7+c2yLt5id
rpToMNIYAg07sGg7cWSwpxf/tMsZDN5STYCf/qZVU9HHrTQXN+jjp6FDytLzR6xPWnga54QIiGvg
ZwndtcukkFiAhGj1wkBofhS/Wc5TjqSTjwRjPx73AAo6hxdlJYUwv1ixJVKnnEkAr7YgkJblIluo
TeOUemF+Nz9sB+Th4i7xvDEdVxbnXLu85a0qVBppwC5ROa4BzaPRWSJVSCCTRCqJcFl0tTD7mD6G
HSjdWnRNVYr/opkt+nkRy5+xna2QQ28mNqKDViKeaKjvNsmXnskXXz/hJpHtbu/jx5gcUlB01eMw
hYBtYar5JoZr6xilZeTty3i8KkspHwkkSm6Sr7MMZujmdtAsH6i6mGHmNezup/H7mQbT4WTOixLF
bnmUtVxct+Pwz08b/zwizgyUGuxnyglP2kwicYgSHhr+9/hPxvI3JpWxIh2KhB3rAcyHc+dPdMxK
z3Iv1WHR3ez22CigJ8CRSl5J5WWWyhLKgiXCqpSbJ2q+loT5TpYaIEtYYzSxtbyQatUYGfjyz/Ml
SScPl9NxOlZ2biRVsIIiD3JoSdldgczYfFK+nggrxytlaXr0gch5ZgA7swyYAdINT9AqClbEujRG
Ia0hiXdCq8miFJbNbeOEgpW5tUuZm2NyEmfPHBMrguyXKLwlN387YSnMwc551goBc16S5EfwESGc
IBXvYCYC9UPNY+C/JnMbhTg7LbR/SAr86+WiZABLFj/n5q3z2BZfi+IWNA5E6YpcoTQ1a+zhZBda
LU7fgAaxaT/dtgQ+axbOYxCpbkAYj78s46HdXL9E3IV3+LHBMx4A1rjvSbzShuOCoudlQ7Mg2gLc
HZs627MUleKASyGMIPc5v766QT08nwaRRQLXg+UrP1BLYAIRR5EMOSWJwlt5fdDWmPwvcA92NFW8
SYEi3CJYYvgIbvP882yxmNVpHFXWSvuTqemYqRXr9YpGpBOJraqV+sVWAwAtN7u53wpYYxfCdSiV
cwDEflYh6/gsPyrIZGDODveaMjpugJDy3MXuvocWAgdj5pMLSrL1AdiTx/N4OminAq3UPLeIDGYT
O6uxTdv6VytWmob+WNG16wGwqQwsz75h/3semaWwdS5zm9WS+F8+p7lNCeaSa1BRMHhxvdubo7q5
kofv8ZKbKtaJu2wuUdPS11Ikiu4shfBdsdJHrAju0jmKSslRlI+bSYObLhNdwZJQ0l6NMtJpy4DI
qqmiXbkYTbQg9AnA7LJLS+HVkSmQUyHEe7eOuu5Az6JESM2cLEsJocgiDIBng3kBPw1TOWhx5OQi
PB3SIqYY0niLfSGiBLGyMhtEoayzSopDGHtWFwdr3kZtnnmTqT3WoBM2ZEH7ut42BSMJ9FyGvZ/d
/4m6+/MJSyvUESRtJuG8LOfMWj4VqJhcKiY6jdCA/HV8Fsyg5ekSPsxmMZWtueoC+vcTVF2fIUDr
/otU9S2rI2jXQPZQnGU4detw+U401tyUZ6aslV5pPm+1QQMnsJ0pzZYo7Wx5oRjOQczcjGqlsD4s
cgxyZPSrr/Pplvrprqni+SA2/1PPAmVCza6l8XW63gcYBP5yUcbId41YHOsq+6Gw9S+a1uiqLKZf
l8LLxHAgqr4s16ZRpQX6bDpTQypqy02J0TTccJc9lqmsZx4kvYGaFaiwkMqiiZ4ZkdGxojuGE7C2
IiEU+mWzMclrnMkqZxmLg5tUeU03wbSdqI9Im2njJapWYCU3jYXiO4uU1ktL2kLCBVrmVo0edlXl
SQ7c2wbacGfYcNiNp/2sw3hWYk1Jps1r6lT0i9tlmI6bilXrIg6zt4fUHJzDp1FZl/mUQuvq8iL2
yKkAmaDEjuMrgNhiD4hSLSg3gNAMML0IuikLRYv716gPgGpz6Whi+HONYlMUj2NUvE1BmCK6B9Zy
xz5fNYy5yn1jJw2ApaIPLenFOpCFcYBZ0OrS8qlkTpbS/fgi/rTZVhXxlrwIClmuaIZMqpQW6gCU
cmkRFB+dGfzPY/B1ir8DUde2FduLbWcdfOptb72bt2UduA+wehx3JbGesPe2YPvchlPQcniA3MeR
RQhC6xkmMAhrCS8n9tgKRS52YS1RG4I0aviebZWpHUUYo3eKDgEBlmKQRENF0ccm/S0BZgtnepw+
VAheFmw1i+2LWDFbosmNozHxmKo6a1BqH/sweuZGVTI4yWQ9biMFQEnplk5Ka2ClKVUXQb+DHRyH
gB5gNF9ispuatwsJbwRJ0pw8Y/aMFyVDWbYSAeBsaL8iHKEUiUZ6rNoxFcoZrVI/pd/Qki+FuM11
Z3yab9+oOON+OaLxoeWUqkwClxgOX0GSHKJl+bSoSvoWDgkboK77aWI3qJxUJUFxLGtQEUaKWgK2
kE85JYqIYBPlxtVJb9paH+Oj33dtZRaCSdXC0Q/Hb8PndXe/ve46hVIh5eIDSsrHdYwDfuCsin7r
yS8t2bvFzFbW2EnvcCVelAdSSrBdMSbfHSEXETFUaDmlxLCPR6ZQyKUVCeekbOoRaIhP1HS1+UpE
oY10elMw8Thcb9ak+Wa8QZjKoeY8etblxZpn1zj199P1fj7PF9Wjz8Q5RBTYolIYinFFSw6JGR9R
RbYMPlHAPnkPnJdygvL2lpyiwcswgVKno98KOEYuNQgLK5tOmFrDMMvLfFAgLtpaKYRG/w0gtxMj
dRrBjyvqvNYQTur4+N3V1Ei98y0XwN7lroGLGsDreROsL7STSaWA3nsODOGfiXMBXz51hI06iyAj
AEcv9eDUpbo4crYPypaK4d+p092bTKiQ9R0S28bVN76ukFBylOb+xOQXoseqRwVUh6TXQ0R8OSAk
Urt206IiVh1RZIPXW3QNVw0lqWsgq1gvnS3r/qH0mWJ2tgpyo3fcVQpqDShA62Uluhabqog/0dX8
DCWeXIuxg/0FX4I5p01IPHVbakj82yZ6Vp0QkLQ6hsN0KAU+tQjdAtfucFOwR1URMzWDHmEedDC1
ASoF45Vv5AJ3UlvzkgLHWmk8Hgf3pcCo5jIWysIu2G8LwSaFVQQoVimmUyq9HbmEf+zafSnVTMXX
S2BQCRCJgVpV63aK1m2iWRk/4UQZbNJLcWcGSbqhc7AXtJyvvw2rOa6EEgNBGSWkLtRR2KFINlx5
SuRRWCekENlmAGtKvKWIG5NcStss/EEj1nA4BzDh3AwlEnOWlUEK+9l8L0rxQ59tNlDcWGvFSKkF
3KoBgHOgpcDiMW6pXWQJwgfZbpvkYZ+3y/20HzTru+6l/jWuaJGJ1GhgLw6kfq4tUumE7ONyacMI
CH5SvMprwSs8QU3Ny2jbFpTOf2H42wrZQ2lZY/Y1if5CmRiPpQoKH7VMVlPZeij2LdFE9WFfStl6
q4Go/eCJuUG5FItVeUApYMukepX0bGqlsJG5X76k+7EsQxGUrQjFSHNKl80Z828pFvAT6rWhn4ro
WzLth+lDGzrdMCH+4CbYYSnJxCIf7+rDSpoXWnbiNAwxse+b6pXMfhFWYllRhCFBrF+1hvUdpw1c
ptOX1IzpRqxHseVqevS86nupjiPo23q5zF/GUwpUqe0lsCg1baYASRbi1NmlDtzIjQREUcvMeZCH
VSWPDVE2VEvwLP+c5w8/7UXBY+k6SXVhNIywpU6zD4t9M9p+/qbshpU/M2/dpp2XzHFi5FRTZtEK
R0QoS3Tr161Y2rogxJ8AHtYejlqcz7v+/SP0JbI44ZZqNtJzbmt1ZN1xMh9bsUXQQ+7Moy2i1Pyf
xSeFAZQwFJPQC1OOW6xHfBwWaNd142M3FPua7xcDdsHQkuCtEawamm/arCUWCsqQ3bOHsvNNWIVt
08eHUCLwiLHT0GZXKrp6Sec/YuoqDkwpmeqWsYziAiDw9NghVnLJVKnWr1+2bcRFCAc8KbBquQJ2
SiiYvrZOMb8FZKLD+OpmyI4AbvSvibaBqusf7UDYi8WMnLF1YERkKppDPp0SlljfdBsjzVtK0npe
qLX2MxlaMY5APBHvoOJQTHDFBzImeNLzLeV2LwqY0GLMzr6MnwDAq2S0GToMdgyytmxfDI/SUS/S
ZSqZidkwLGDDFn/VkNGpiSePoZXZCp1nagB7ZsoxqHH6EPf3AWPmtEB4K/gpvl4FOTKBB9WWhYhP
FACrGMWo1diJA523TEpWom5inmjZmutuMtoS0lfK7qQYopWCp+lolQN50QqKAwnDStFkSyMCofrp
BmdXypV9qLsC9OCNxdh9qzn2HyNAzWmMyMA6zVvrgrHJOgc2IkqZXMeqlK4yj9kcSFPYwtHTEijZ
6GLlXSIOjnCLamdAU4reAF0OWb6KFVFL0sblgBLV+ZnEFZeR6mafLOAVuowspBjVkiW78CoOOo57
Caczk/0OcW8jyxVWZ2FitHi7aOctWoA/Cn9WrRfbqlVqWpZS0PlLSei2loScZ5PhKhcvAxuMjJMx
W6uBzkFxNprH+tSl20MHVK7zTMoXUHPuyaFGLj48Gt3Qa3YloagVmzWS8249IJrohCay8uCbRhn8
HfgrNEMnkQ8Wdfzi5KzbDs3zuVlbXDeGWlZWx2AL5Ha9lxFKKWgMDcx/OVlMcer9vyYm27XrUei+
Ig08IWW8QSPYAGK716Ziz7qNobk+BX5ZN5VkFBDz6YmcOoxwtRv9RZKSisfYquiA3M0jybj7OilN
N31gN7G5m4IlDyYK9e0rRRmsaYBl1WNVDTFoHCpEkENhLmK8NMel4AN488RDltA7F4ovkUdDHEH3
xU4bYZxJGn1JA7vphQw9TelO6ZVxyC6hfJtuR23EgoT6vUAcTKflkViI0aCQ1F+nYgVIJuv6MSu6
R7TGgyhGqh21bVbItSGkxTtEEEYjAhPGUNNH2rc2wLEqkeM8DAJWkdCIgu3Lnu4iYFJoVI7hlIXV
UtXXGnJY6QznZVlrkXkAGNHbnBoUU0jFClg9w5okLoTtf5nfwAOHtwNwIrMCsdbXDCKt8+gOV7Mt
w1CIUwAaWqm1x2KXog6LXQq/vk1z7pBI7muYGKLUxY9oXaIM9h+UGp+8kLHfrI+5oe4oa0MK3OEI
puUppWh0xm2IKVnHz2bDxENam68tgkRAVUXmweBvxNr6aHEMbA06AnIbCby9m71ZLkjdfStBwElL
UZZRhcCHJedCXAuOpoasqF51VRSPgIyWjJNuah1d3nLMQf7OtiJw9r3EN24rhtQVy+QPyh4qoZaP
1kBRDQyQ6ttgyIvmH/suwN20lLaMAaUtNfHHZOE6LATtfIoHSYlzSw5w2vLj1RAYyyyXSgnjskE5
mjK+mUUBEgxNAoexzFb1jfym7Hog0vExfFfOliOk9t6jXERVwjSghTRx8RueTuJ6cu0dJs+jyCU0
VFwEPmHr+Nl0+6DeUv7IJ3YZ1tdOSKU8AK8NDjXegUqHWcsQuo5JyQW8zW9vYHOrLepEj4G6MvAr
JmBPs4PIo79QTriLHouVkkY8DsqQTaLin0C9osL7GRMH3DyK/eWG0pNWiYbfDk62bYUQPuhGF79P
qhERrtauakO7J51OJsPnwqfJMaF045WEIu1sqrhtTT/fSJCsKAwg2I4caOzF8aA9n8wfLKLidVR8
zAubHf5DumO4yh7jEKvaFj0E0hQCcH0cKEbJQfZSBEGaAwZ9L1sKGTpWBcwSoS/H4fQljR/VPcbw
VqhcPk2nNcFWfSVnRSyRZLqwLWspyLSe16GdrICbgmFp8i8wQL1tnHrWSq1WFF+F8KTVAvOrxyFP
zDPPOqn1itY0AuKlxe61w8euVufp07Cz5mGUtTZWg/r8l+kaStlbI4GsxaZR4oSXl08L4QUptcuk
hcMbcQStZbJgpuDGNumqzSMZJps8cxm55Pw6CcLw23Q8Jj3/vhPnlPl2DK+T1ML1nsML8q7aQwCe
voR0rjd0k1WwrKoopIKNGVDcIE6svMgsmAJXrMZ1uNr+dNdZVxTynNyHOHCi7ZvCwL0kKFyLmJ5S
rhhggDAVbr7f9OrERhyLwSNY9B6ovcYNIzVC/HLSUsGNmL6VmzBcuRC8uX9o9XViLZgctE1GkPq2
kcKTAQjUzj855aHU8gBwPmHCR3GVRE9b/UDtlhKC7ySmWtQX/R+t1KDlE1O80c0nYgP4x2EBBDTE
qF9pOquTx/pojHkJ3dmJl7Z6COrePhRp2cZLwLQkhp4g7upGgoagjmAwOhHoHiZKpYet8UQ5aIu8
DYbbMZRHVlr5Npx3L3cFLKmXBgerLTi9ssT20daw7SqpXsy6FcsSULBj9WmijZ9kYBmbFRrO+lUk
WZMCst3UCdc24oN27WeAApheTNVJyJ6UXYVufaVEn1c1+5B7UKeC9WXWvnDTTBQ7VmiNsY8Dve7d
qs0JG5yqHbAM/zul6EAswVzhNhvZt3iMhh+Uqi+xmQvLo96NZ/MtbZBVrKqOh/vQnNvUh9ixiqil
7t/p4+mfaq5dLKi8DS8bqhWzLApBtkABp+qmmiaSoNYqfOtGQLR5nY7kaMA/bIRD6psHrABLyUO9
O0RNBT6TaHG0CgZYSXYazusGui/36+fuOM/nOKWulVBV3KgIcHqc6YcUU55PKaLZLF/q4SfaWiEt
CEkww3oJTEMwanx9NWxwVTbJ55G4SWLhwlwoVVlYKYHrBHu7KOKAaLCpHz63QkyET3A6vY+X6RY1
sIlKK4GxIBWSWlCuFg8rEw2GyQKVsnm5DMO5QLHnHkPB5AU7qXJVWl/o+jmgEo5/q9aHhMW2mBcZ
btryRNAg12oIEJSJCTSZhKYWaIr7GYYiahWNxDvsqflIPq5h8YYDuimCfSYB2LCtQTW3UcSnpV0R
UPXvF2V2SObZijDr7X6DnlqgrayKw+qAhC1yF2BACDJXT7UfjVVn3pzeMtzwWcxF6TnB93hS6WvC
Sa/FyrFwMLrheSM690rtVC15M4oOHgGwTNHCbNx1uczHIfDKDcjmfdZLajAInul+VVs2Uv8ew6Bz
KJopAM1+PRp4BR++mgqhX1beSs4LVeAiF2mhySKOXblpRnaTCVFfaxXdLuO4G78be/t+0WrYW6mm
XioQZdWgG4ezsO1B/jm3DXmUOidfOgFDy0nUwfzTsNykVcpNOskL8EGCvyqJVfLnS6k0jPe9YXxB
h+QvOqGsSCjFOpm/Mkuz6Jmog+5KtVIlNqAs7QNLdIbDf4ACUKqGmvSQ1cU/MG8O7+GidRN0ZS33
3FwwOgfh/9cjzGKfbMkWCTjr8Sv3UslxLnzD7zDPcYFs1TMffZGJYOqBiZQCd2+y/BEvwoa3iNON
n6iEsgQr3WoLKswerlrPtdj14wIear9c1+QSLKg6REiZOZvF3wp1R99Ph1lBlKgkabQ4p+i7pyao
dJX01tSWo03oaZUkbNXoilIEl4t1lT66cZqRe18ML39RIhy8Crb2Y8etZ+pH9CjuabZKjxHU+Onr
cMX/vjj8C3p4h8vw7V+MNXX8l4/h+/9Ci9gIp8+fIYIhUkdPyLajgQwGPmtsaA/JU0PFLx/zfHs3
5/WvCvpJxfKTQIvB+Njw21IEd9gR9fiabKa07MLyCYxS7sALOIyWxs4BhkSJuRA0EFtevf3Y8Pxf
YId/AgGP6xuO5/chvkEb9ceFVbX3by09UAYgu6+QXv6GpKGL8u/macRpsvWF/vcR3LbdG9Qyg7Sl
87vN5/jBtVaHAS2vGtxmBxdPnU6vRq6fAElhPF2jjba0Y3+lzNK1JGFKGjAwNIgZqw5qzKdTfKt1
55fHJmpZYpDQj+/MFiIimzpV4ljA/PbfBiw0InAlMq/ie8r8nsAD74NjMhyORWEO3PorFGJEG94r
FonBbZUoE+3GaHqTW5afGRe1qCrWoiUx7NvIGNYBduyu8/2yj6+vyRmHdYtZ/sCzxkP/JXFydRby
ah1bnLIY/4TYjIiHxcCl/hqLW9G7YczkoSQcZ8JYPvXd1V2hcDY7lRsAW+hLqRkpPg0iZChKtG9h
qNYzVAX461WXcYpX41fSk/s7Wg+JS2v9pWEhS5WU8I5lFblQlMHpFQFkvZMG43BT5HIeHlrACPv7
BQq54FnHj6n3fM1sKkthicRdN5+Um1Sw6K9AF4KWgWu0Y6rHWF8ULk3liG/jy5fpBq3+f1IFQdaH
HGrxiZ1CgIT8dTS2OUatLoBOdkAFEadYsmV5d3bNqMsvbBJ+PbsEaNKuOllFpJR+x6QU/SFDgina
z8t1NjLGDayaTzftEbd5LRkdj9x0uF9oWMtNuzqmYnxawCZDXl8hGNrEv2ZK91FPmv8YOgni1ZcV
K58RLQEWpB5Oyh4KrocC8eiFouvZ2S02Z3RJHWNn78OZXeB3f4f9/AGiGX+ejTY7/B1DEIr48OIf
XdYyYYgpiqRRTvuYeqUNM6CR6+qUNREPw9GDYnJxiXiyBYE5D7tShHNZK8+c6vyMnTYAbgGGj7gd
rOiRThL5juqXadiN38HSR5Mk1o5KlFppfThRjKoHFAnmlRmweNPZ+ig65fF0/9DKSisGP7NwTnDf
0/Vvszmbv5z+RuZyvEGATjpXhAa9EtQ8YLz/Ys7k36xoVV5Jq1BcuBnCRXZEsaIf2YX16wtbONOZ
p8ib9l8U08TTxIBz5QBsZmCe//H3nxMuVMtdqG69KB4ES3kTTcEcO5Cz2YO3Y2S+uYN7HGWErLcy
PKY81F/wbvfH4eOsMULdrUR2HsC9otu1iF1FqGUKaw6XPezoBMk8c2/RGjFyoVvJOvb8Q7VhH1AL
o3SzV2zQ2MpBDZVZrVx4pRlVss2RZsOMbQ9LA3NBR1rphnDWLmmloDqQ4izD9xdYbiiixu+7+2m6
XRN+XMNcVjZ18EExwIhKlbUaxhRl7kefp1Vby6x0b4YE0ukZyZQpWsWZAWBrx8OZFQu0y4Y/MDlG
OoC9b7PC4Mz98/XBgYdELPrHWKKpYt2yqL1raJ+QDSUbT/9UrKU8ai3hXafs6JrHRkCCZKX0ZN+O
88tw/IMuY5mP/SjRJJPkLXX5DkQB5T5QD1jpYxwghUX24GGcDbnz+7T/BWBSFbsrV16a46eEcGqY
PcAq/v7rPhzADNj/dL98HX+d/+V7TOCWoiUC/qt9H1g8RuULuslfNCFbNw9udtJTZ5KWlWFYSft+
NxReNGZuq14KzxSHf7G+6y/guv5t+j4e/w42khIULrSY5G9JdmmLPnTN21REJM2BLTsccK+Lulxw
tIaLE18Q3ITh0mNSrZUrd6Rb8NOG4/PUqmpLCMgyliYe3TQ5lEjw//t4tA459CfVnXAQE/Irextv
P5Ff7B6cos7KkCfoSn1ruw36KCG3lmnttYx08b4n9FGehyZXJYvuCRDSY318SKhnnOCnQXpDEk24
tPXWMBHOXg0yOaaQ7az66+5uDJIObUrzP1wug6JWmHf54Mcvca3tZ5Z1infhZC5JvpQW75XwaRCn
phLalLFUR1nDh5ASKpQFGHpMK2ahTXiy2DVKWKFheo4XaK3TOb+BMv7V+Tx/uP6ih+DdZAH5FZLM
8Sbw9QwNgX/FthRlpWr8FLXWXZMzXanY5dsiAswyBbO5qXUbXCFUSd7TKgSTFlFlo9g9KOUgSa86
Tk1fhVGOKhL32v7m+lzKiirWWNL74cdFqrCS5IIiBsTI8vq9KZGFPIx5VQ8RKnIElKvyWwCfxro0
oVNZKU5lqVj/3mROGFw1k/yuv5ddDSHt7a9K0LouFZ9oedDO91QNSDcEeP0IsJgTjgOcT8Xmb8PQ
QcD7lPY9Hsc3I2fM9SiGTJ7Fg0a/Ge/sN7zeARoNNCpVNIcpB54SQdGWhVfwwl0zeMAwrcIwjeYu
4rPGiF/KRO/Y0+uWPmfnvDpD/306nCfFd2XWcbMQMXb6kvVMm8NlpUiV25xKtzQ9O9F6baFb/3n7
sXDj3Ld/n30oVbGc2aeFfDN/DwohklfEtAAoubyrH9/CaT9fsL4i8Rpy6TWsfPJVIh6Gzt+giVCN
Qhe55DBYj+jlHyNV2yVuseWRfq/xwleRK68iC68tl+2uxfaNVsiRNOWBqtZn8BZ5+s8J8JahotCI
AGQORbJWSqmBG/d9mZZKTMXQ8fyA+11t8vyJHrEi5PtCShAlyq5++Yg1atLz9YY4WFFNJEFn/U8t
7pTFHYTkq60Vx0euDFj8PUWPVXFT3qf1Ew6B65RcNGuxSjMs1YC/Rlt0KzZTBg0NXxUfvpBSeSGF
YiUzAYlZj7Ro8o++7x48FKcQFSRM8jPb8NoasRpqs7zM/H2B8dszXD5IFhpFsMkbcKC+so+D5+N9
wpfxffg6aRq/qqVYWGBibqlfK8sgD+JV7eTW8u9/Ul5prfhYC3C7bWcZToamKoqaij+4Ftk8FRhL
GUbMuQAfrAidMGIlqq5W1XDDIqGsLtg6cTS38zoYHUfgG4o6ryW5fT/tj/N1Kf2MQA7Sg214pV+3
5m3dq21YGJ4De1jxgwV5aVZ2kwVXyhnF8nGwc/OUHVRSTFrRF86AUBixUdQF5jrJZlCERqWkFhfG
83Uuij71R4ySqF9JZihxjJfzV2yupbwY8M/xXMIiBW8KKq+9UyQjy1Ioz6BQhBjyMNnD1GmdsGGY
s/DIjP7MtQXVPOtGDYytYyfvqPOskFMACjOJKU5eV4Yx5V9u83kZDomBQV0WtYxuv8424tN9Ik5Z
KIJXqBJQBEpTNJKPblzZsskU/ZMr2VtjNPyajge3lVLq4G2865fxm1JV32ZxeyqIs6Yj+JVkx65F
s+IuNHXaqw8T+alaJxbdhr2F2lDJiddKWDyylA05zi6sLWpjZXe7czqH1jS1lt50ZUaUw1EkWhEm
0urQzXcy9x/n8S0VYmflQFAyEVZMOINfOXIxkfQn5wr/ghIRXSmzpzE2JYgEEAs/8mEUj2b1fjjv
/mFOSjGpCyUg8/KmtxXUtWazYsQYZ0h86AFeVq4Nly6/K8XJaIQWFa5PdbubReG7lXzwkQnVY2PJ
y8cwgH9OqGQS9V01N99qeEjiYSih3aZTApnmQpfWRjtUXrlcbopSO2/K2k4XHrG4NbyIshY8QjJ/
UOcp2qFXWE8Okm5IkrMwJ+JmVqHeAgveQTxacF7NKWhaRYOxZ7o9Nsdr7TLs7IxXxic1WsvTmc06
gBEoRxXrmbRjJyU0DZG/Me/3b8N0+TUGx0FGEEuNQGymzHJZZKekdSs5EY9h0Y2BB97G1eJELDFo
kIwVNGFZYUCFuJ5eU+ohNWLcytz/G/3nsBCAf8I55QgzR22Ecxx9pqxaCRLDFv6T84cYlKcDhmih
MFRDRSk4IgbeZe4uE9eJ+uEOs5hs9TFgiIyXrwqKTMlRZHgtHxG8jAj9oSNulmxZRYUpyp7RgBrs
c3x6JlJg2CFsTuz9ZDbwahT4QW2WIAqFhIOCtQwv99fXBaId8IJfHXxs/KRbf3MgcmxVt9kNIBAB
ghK2OceXU/gjYflIOhAfxgYsBO1UGBAS6NTcetmGBtywXcTuOO8H2zOuwPKUDGwVZwuUltb1iO30
ACKggek4BH7CBioxCGFbC9DpjGt0egoeeYUNhzQ7MfLseouCAeQMvBy5wyNuumdk1PhNeTIejAiC
y22z5EtYg/odUWtfQCIr18HBY/p1yKM47II3GF8R41Qwc6w+xNlellPt873u7qcBEZto8hgZ/Mr6
GBQQrDXPigVG8nsATjufAUwXx4ho/Fd4gqyaYiVkYJXjE6tsxZfhLtMInHG4AuYQkoriTuRsuASR
AtNncSAnwiKA1++AG1W4PVqZfyBgtbS+0sZs0wkR/YlxWCf8o2FsbkzNWAVCzkabIGOUC2O8GPk7
XN7uxKrq7xetxyYCmWxNGXdhFqUY7i2+iMaTYOXHa8FHWZfper1r/JP30oaAyuRzlSh4bqgDo2Nh
aWU5kz8I7pKHa6OloTBSIOHcMAO85nbp0vCrgpVc7y/23+BdT+j3kdP99jIYMz6Pk6/zyKPZSL5u
akWK9gy/yvz/chNx+rcNS/dQZxDFb+3Sza0c6C0hXOu3+fJlvCjXznRnATh3RVZ7ZYyFI9sEbtGW
EhCgJ+OigMvzUEgVEsyZqI/VPh/Syw+QcAsaFDv9/f1lhGmDykk1jaRRTncApKKMu01L3RV+Lv0p
QRVUXwYCFe3K+XNMGXEFQ9yDPZUcdwnmRxjO+mr+Zca4N8h9hUuZ3RLAfqtc+hUK9RXm5CYilmYE
pr6eBibF24SYgtYmQ3YmSCWYH5gQ8RwOMBhKiB7Zr+q3DduCj2qgLWKf11ZLxOtQrPeqwodx055n
0fodIN4Bf1VWyyVYpamC+3WgxkjBQSDuYs3AtIZcGiVAkP/m+c2Xm2oQMvRMNiaLXvPBOBvvSSus
ZHCeDHLD3WPxp8XBTlwpk3U+SQlez+n+gayk6Ud/CtBnVxVPSvPK/D/lwbBb4jFNKOWleDEk6vZf
EgFFetGeFi8T8EVLTtxsF1sFF+6YHssi1qqHjrfsCWdyiEUgcza2jurIFo/B2IWn6YYVOjCbT73Y
jnFoS2FAxuXQbpe43aL14gbSbl3DmPTRs91NmpPuzwrHznfbGUXhjyb0jNpF28OazDO+pn1Ktse8
xxgVnfRGaVpwME2I5ORZ7x4QcSjEBSflBfnfZ01gT9hyiSeUheQtpOn9ZAGuL6MRMifC4EjoRDaV
hL114gbiKWfNIEKyFhWoJC0Chw1y07CWm4RgfSjdHevKwLcuM6b27XNbHs2gRqfKyj86NjccW54H
1Tjj0R/fGmxjAxh2UwCFcjb7bSWG91cXwNXKFnM2y3EJQLk5s4s/nmDkLpPwnHmIwkW5NX/WG6ms
psLxxXlAPODzcBk+FPYoc0k3okZCXNpFMSmnyVz0Hjrq7WbOn7v401K2JfIFMb2btgGb01R+wcIG
OQQ68swObBmvS9jzfTi+7oyPP9z4O1eOqpW8KXqTy3vC84YxHNdN4dRKCnPJi1ReErsAMBJKayBB
EMF68YlABLNuwMftgrjIEjC0oZHj9DFpdgoLK+A0t+V9Wm2/JbbBFHKJ49PCF7LARtrCPGvGXW/j
aT8ZCXlCCaS9YA5dDq8x74qVKko5QF0IFt6uvE1kKarPVNiUCWeGunAZXb827U6/vYrHsvGP9tFG
91uiuYXGrDNP6O2kCZimlhC1WUAGWF8xdpk6bJbmFO0FJny6smdiG46rzmUbEImRKjvYA1CMvzZ8
gzmX5cgO/CAVjhIx6B/WZiwlO5xsno2/f/rcEFhtQokohQ8KLUhXR4J0PC3wAVMAtGlWOZs4vJBq
xaXsbBRSi2VUUvzApQepNvqazOMUzLphMUMraDD5Bme+JSzCgzRNEKRBVj2dZ82wZR4m9GH5G1oG
RWtj4elEPA0s2i6D38d0lJ0Oar0x5p0oK6vClXU+ZrSW78rhsMh+vRQWOUvjf/z6513eKF9nYQyk
Fx+Gwv5e0qKTWjO9ez2Pe/Oc9oqKZQHWaqnn2Ow1q/HV2l8ZRIu61j0se7Qfg3la36vXr4qm68L8
RpkUkgk/rfQEwQ/sK6EILKHamJHPci485ZQwJ2rJvLZSFGNVOiARKR+2iHAaAByKCh5FjF9IplVE
JyrLaKTQE/y8HbixcJJynmLUZ52O3WZdFa0YFfTnAo1F58usTqUoWUCNgZhuc4SV58AcEkCwzh94
mdiYEC8UFm4Y/wEDFtygedueEWh6KfIYbtNJQVcE8XLX1FbNTBDIMBVNIfuOybRA0fPBo6wldLpq
tfB0QIy3PcRG6vquX9+SQZ42sDQaHnZA4AEN344CBL0UIJjQqd+P5s500VH0IXcXS7cTFLddjLDH
MBNlARWTuJPMAvMs3owQS5nTpcTFqzTk22X8pCbTxIk2YvreczJeFQxEoyGeWk0gsXQXZqZIn/+v
8eXffrZIKP/6VYvNFmxBj4ZXImpRh25iL7qJCm9wQ6BEb4WdBgO7U1YvjmjyGtdmRhR920o5NCOJ
sSNckZj1g5cgdNKyFKMGSJcplZNL94hSU91LHccQn4Tww1WrEmwZWCiaB3Vgyrk2/RTEd6nVuC7F
eNtK+zJWUplhKV1QUvmOA7KSMPkN60d+gIp7hHP5j/kEeX8jDo5/2tCFx1oDOwkcDWO6CawGVi/L
CotXrZO6p0KNUI1WMI5QbddZqzqtOYQlPKi86Ve1SUtzoW05gwlcBCSlNJyUCqAOKxuFeh2jD+DM
MTT1Yc4/WspRsYExy45DdJXZPFxD55BESG4YOqXQvQrIfWWTJTFTa463W6+B20kpbEbwaFi1ONS8
VUE1NlgV5iX+81Pp9KuEMlSMkW1C2qs7BfbLdjvrAF01A2LA8G/GgAAcW1/mm46Kq5Xl8pmEMHQN
pzq+KE2UbVYmwKPRkd5/ovZNw8W0WSv1cq9BM54Bf63rTAFtdjMLWfegztnrDn8Lo+DRfj7sxBhd
MdVtAjFb715k4zGEku8F9H9ToXajIds89GHftUbsSkLZDxvolXbeOtcuCr1pAmine0rBs7IGh8eW
ygVEbjsoOYO7wZrGTARYS+rgVnp/Af7PTsXOaMtKaXiUu0FSQyQYLnmHwoXv7U9UZ/mX023+ZTy+
Kl39ZZSnAzDCP5uzSkARVmLHy3JpqekMDO+ZpYcfkbksfF3y0jhcyQP6BXb50dzpabSgMaH43O1v
Wu9nGUD8FC4Lt0/hXvAGZG8aLjLct1DpAwDa5qEZl0ZUHm/TfqZPXHeYubb7xyn+UMBGzvgcO2ay
HnG0qPFdvph3PB0PF5zrCUY4yEwa3aVOECyycGhXZ2vc3Vys3fV8nG7xr5vVhEaSLwASsLu9T3so
NrsZAQOj2eNE+DT0Ap+g87tx7C2EhcwJaSCgSKYshJHMgO8MaRQ4o6s+zxeJ5MXj7O9lxB0OmB9v
30ZzzOfhTVtM0UqDGeGjn+c3mOr8nyS73ZDnOCU+7RTklJthZk+FhvFCRaByx410S/Ft7eyxKdtr
HrnGLgguXzkYPgPWi1pYAjxwFYuBflkYMsf41agvHFCGfS+wHmUpfLIfrcdmz2ConNWIw/Eb1Cq+
zLfb/GEnfcbnzbHhkAv3fGDlk1si1c/YYTbqsEDD0GwkLBZaWC6imbsXwD4Zp7f3G9luygBE88QY
B5CbSk9sQVG5n/ClI2lFDPXhLMQmrJtl90BT11PCp+mFSYROSlrFDXLNwof+jEE8I4j1ufBmnVyi
IMcX4XaNdTpbBlFFExuVGMwIp50a/+84DgdluKfZYhXOznyQsLRLDB8Zo9v8BV2qQrFkL4iN6jFP
1+Ke7b764fFHhcHqXlobhbktNZes+K6ITM9bTNliku44XG9/RnLTiaKDI/6rObH/xCjx9Y9jrE2F
zr+UxkAukmt4MRTNMzLiSyVT5JIAJMU5fJ+uW47LvO5S4v7ByK3Pj/l+tYoY31FqKnKfSSNfbU50
s8IrH4UwXd7wdZ4O0Q43urXyUY7iGO/r+2U6fYmGq2j57FnkvZ+S41xJFMEnc0Ne9VJNa0ri5dKx
cNnkzBukqsi7XiJkz9U40KDoMBsNYZfpdGfVt4rqqsP7r9dcxCZA316U01sZTRW7OYDvoYdySC0n
r8O3UUkWD504KTOFVC7IYfYm8KNQLojEINW54GsWPypViEq3UGFOnd3OeThYj+xNg3okQrlfjgeg
2WRw4Pe1/57h6hAn7ee7czDjZg+topJWYcmQwWHnGB/Nu41pFCJVelI+VEk0vNOkfF/4770vsUVw
0OdNcB75YvEHb9zi9yrH6g+kCYXX7XI/7ROX6gJQ4R6sxNEMP/qanaDv2aFfd9aHcgDt8jUmU8rf
K/poTUXIID8i+ohQ7Qmx/EzKOKet+W8xXFSS37rhXElbF5JEwtEZ/MEoerqX3AocPOhsXex9Sgnq
bjWzmdsMkGJYvAO6GzzWlNlVlMLg98Dm2iT+jdXVSR4QCX1r7pINgZZqyoLuuMdhpdNp/BaEGkio
jE384vM8ZBornux0pB1gkak9xUikYI8SLMHcmoL254v4l1kbPmdbzTpRuw0eCdfdMWxXWgWTtNw8
Vkc90Zf8EFhHM/WuWP5DKDW7I4WUF5I5yIu8cqEEIx1e5u9JgxOplF5OBW2A9udL5UA7dgjLS9wU
16FfZt8To2b8lyG0S+eRKzzVSDLaUlC+y8TvlpNjr+xF20HBzq7FA+S/3yvrriRJvMU2ps/Z0eHZ
BxIYAqPzBWJiBzXdTVzE9BR5n6V8C8rTytnT8nHWzdq+aFevqQoYoVV+uJBY0H5XKdffC/aW2zFq
WUWB5Uz5eRCaxwc83CPTzWjTjAoYbrnDrQhtWELcAeWhrKhkQhHN4byNSIKLItRKz5MFbszaLBYJ
MzpUg7Q6l8uZ99a2GvQlk4uIhWIr7rCm6mqV1bC/zNdr2vYq2esu8A9bNHo5m0dxxaTmt+kwf7um
pWzZhixWP5g6O371yoUzXgV7P7f1y1tNwoK9ed6PsSjQFVqxwsDMeaJob/1D7lPB6BDWcSD+OmUF
pSK2a+U70SS3PDKdNpxiyZ4dVbG3vydYRjR74Sk/Rr8XH16x/zophsQMwPcNqokMwFIMCYrhu4uS
GWgyKcewyYkir78XotXDdyconcJKhFrKVjL6Y+eiGsaVFLQBi49AydD0g3qFj/Ew4StAy/BtPMHU
YVdDo/gXOQuZ8AJNSzh0c4h6nBaLKbLUOrPcfWDw2wXaUy4JWz4vqseQXGzT1tH/VGsuac8+PIvV
0vSmSHf9QOyyyLNWcDlsKpKG9lDqxDluKXL+NSyBAKgXAd24PRqW84TbOkP6akSlIaesIXbylPAB
ljgO56sW6M+Zf8jCAof5Dq77x3jByubwuFMn0/CTaVfRZrqrLYSyvhdujElVYqknDjvPBIICq/KX
tIFTvYTF9qyeZbtQeyxRhAQrNEI0082TwqX4U3QROFXG5Vku+P52PxBMWFJWeAapwyv026D6+etT
9yGtLyY6rO1ADHRTeTr37wKL/JukvNwdPk/DR6SliW4nC+VmaQOIJ3xnm6PxOUtgdIq03CbMmSpk
rEdPzIbdvl1miDhDd/um11vUkr1wnK63p5g5k94ukwK22A4rJdSMT55lYdzJYgNjS8RKZAePJbXP
Lqa1GY/w0GVSsRYCM5Mgv94/jET+VPZYC0+fvl0LX6onwmVt2mcmlJcwmvzEXG4pIZU7yXBi1sxz
ocA8Uy8iJpWT7zX3ihVnBVZkP0vJ07ixmvd9JSW9nk2AUHg3l/Kwi0EfxxsgO75+lBtWxwTKXqum
qKWTXny8Da4whcubeB5wc5CBLPlWeDKbt1M2gvWTCCzQOUgh8Q1RBVpzl/SCtvpTrcQPV3MLxyN3
vpWNMFveJxs3eP+0E6Yli6V33p3AwfaeJaRBLYgXGweBkIgNj8S/71bSfe2G4Ud/xDKmX+df57N6
ol0hpSh+Hl9vv85/R+dQ/Zrxdb94RvjdrzMQUb1anh33fMFXrn3dMTHTLQFA/rVWENOV0k3yfatf
t9LK+dfqyrtw5aS7zIp/nWn5qu/c+99mAyX5mWsr70Vflv+2emNNGIdoH/atrbzzBg6rcOcr13it
X8VAuoeVq/uuQ/u2fvht9czL1G+rK69SfK6eGlNBtgjg2boE0qWrWpTyIWUL8bGE7CqzR0dVLouJ
H4ixEPLwQEIbHHOQev2lkePcyMB+lz4ILl9GpcOBdHIlxdSeKzuh3dSSSsZo9Hwe9tPtM1GJXHar
qmirlSABTjXjP+nJ9E6uGefRcVeJqvCHGKvcH7GzAtKzV+UI+lAP5GFZ0eX4VFlRU4WJrB8rK2rK
oKzIQcDdceDu51H7fTEv9Xw9Uu0TIN6h216O1DRSqvzpeqS6l+qRNqcFm1woAtpeglS3Uq7gh6qh
6k7K+D1fj9Rm0rlur0hq6t9TkdR08Zq5dOKkYbluj6rxeyuSmva/qSKpzZXatwSfNplYkYRgCOMV
4RQuI+B3Kp5G04hlSc5fZJoq3fcgtIcsfl8q/ZBVzEDkWNoRz3Fn3tHelz4pdMVK0OcKDkjat5I1
EORyNmWm6kZyRp6qtRUqwfhgZmryIEWq2AM8JNJ5yNVnM9ekkGsl0eViW5fxfBz2GgvV+YPlFi1P
UxhRyFhskr+kmVshTCa8qQ2uc8NjIYhVWbOaC/vIHSMfqffJZRiBL+e3+WT+5ttlglA0otIrnnYm
efokixbGRIhnhSfaMAcYDG3HI1SfSFtsfyJq70Ut0dmYLid+rEKXz4HY7+/mlcPUue1FhO3KfgdC
3z+O77fb+TL+193wJX4X/hX0QJ7n0xXxD3aHeX+P4mqDKO953bI3rSM0/9+//rwDSgvd8NcAgniv
/Barl2HN3D/2W/91ny5frspv+X0xjLbVb4HG3V/Gw4jgnku82DzVuE3RyzXBK8rXz9N+d5iuOCFe
oZVL9s2KluvcVjpPkFjRbiAGMIoqPAaR8nuE6EtXSaQO4+tgvmLIqQrBUip401g3ik5AbLtqZ2g3
sdJpDn5D4Z46rObvUuTdHZn/RKHaPLFoPIR/XOfTLj7wj46i2bDWt71yN888S1zWpnfCOxq8Zl6R
Ne7VaGw8zG9F8eXo8JjN6RHv1tscb//yPb7RVR1iltwoNAMPYOohBDi41uP0VXvQVfssn+MV32+v
eaNQraUbwma+RTqufkO/myLfIMOCZbI5dso6/R0x5ElhZTazOSEA5G4+4Yw/W2x/jWEvEBuwlVdx
fbWoW5DD41dVBbKi5LzqaRCEyBooQ9ypGJtwPx80L7jn9ebRU3YwKsD9flKhQrSTmgLUqzM+pbb9
fsMqjeTEBdLESWV1/ZMq/ntMwysLbqUa5sRv2Nlum+h3UgGrKiaAy+z/oryO7glTay1nt/5GvoE7
QKptOwrW0eUjSklpps2opVVWD6uk+c5fxtP0z5E6G82FjRfwQq77y3S+eS4BryTujtSslIXxc5bl
8U/E4jn3MKmYAzzA2/AWgfVBKqUAgpBlVfwD5jixqRM2fGN3jb9+fR/H9L4FmAMi8ps5ysvwG46b
VpbfPi7/DoPsPmzG9L/u8w2iS0YYEF2FlgQhkGXK4bE6iSW0YI+AdAWqihi8C/2okDFHHQl5ipg1
SV9Wjz+Op+0na9Na4oGIuhIqnyjYR8UCurdXF7XkRLtI5bB/h/ag1BpKsdUPRd/5OCg5mrrspLSE
eXLWDBou+3cFXofYWTgBOsX1U44aJ3SSYr85UQJQ49hETvpYuErxFAkmdXldytGIMAWydFBkTNFL
J5xlpfImpCoz8FURf0n7MheT3qEE3V0GCOIbufqhqXWiV0ln4Jei7HvdEO+apQ4pGcIqMpcS5Jhs
VI69few61TXLb4qUKsTsnT8H5VNW8c2cv9fj/QpwKoO5jJsNMm1WdKW+GE3zdI9PNb0UY0hPR2U9
hVSvYx/fdkFaSvVL9Pvh9SekiBgSHD7OZmvw9KcTIf1D+8PwphyVhMJg2O6KEFqLerwCFRIqEA9R
9ld0MTF5Hi6INIJX+KlsTSiWi/K0fkpStwnqzO+aOCilgk7agzVZE0I6E654ejvBl3iM5nLIN1SO
sZLkCi3ifkJbx8l6ZSFrk4EJGUwd4FfbOwTAui0ZkIE/HZezHCasfvv2btZ5PQ9KOrfkSVSvB6Fa
AkGOWHH65XZMLYql2Be9mFfG3V3o/Hm+/DTPlwOxs7KsQkocxuxr/ISHqHxUJCg/DhMFu0L5/V5y
cXy+L4YpScewCkrVdvG18ntZGLXrVWOW9rvyUHl7r8Wm2sYBTTz9/TLf3rcRqQUfLuaX0PJ7KcaS
ZY3yI6uwTB2g52xbZyusEzIKXz53L8N1VNtpS16IwtdcKtvsJF6w+eLxMFEGK/3TDDQlgI2Kcrey
C7Fdc9GdeJ62UGDLkTb5Aznc4vto1kRFVzsaeWvuKBHGh0l+ZSsWs7uaXmoIxH/Doxsu4+CbbKG7
e/d1uk4vRgQah0hpukVEfKvlqjIEIF6Rt5Xyek4U6Vn3fKFXi/QoImlbN4xofWLB1lGoSqHiefUD
yq4ZEZ+Ille5TJxGs0OpHCHKfv8srCVT3tIZTXsu/KH6dCcRfRkuO9Ca42H+dqJ/up/jpGq28y66
82VleDFH5STr1X4bnR6y52G6Gkf5E9MSYIRQz4hypn77/3/a/rVJkhtHFwZ/URzz++Vjt7r7jGz7
9kqaM7NrtibzjPDM9K7I8OzwiKpKmb3/fQmAdIIeIOip2dfsHI2qWs7gBQRxefCA4ZzkPfXQ94tw
D5T6G9pofxtY8PCTl23XkqpPHUOUs4EG68JZt5+bdfKM7UO73pbuk2esjFzGbwsItlHnX96GK9HX
RjGjJIh+KOYXpYTkw7gU+6Zatp8SDahgjMVxaOl9IAGO1EJYOjrgitDWVVw7SCrnOmFV2u/RvWyP
c18Tmb6I/8OfrfZra/6zyohN/BHZKlTodJHUqsX+GX5eKfW/Z/kfEQuDhuz2aNSoxqDjPGkXe7PB
lnni23z9Ml4XMmFezY+cDvRXehMiqI3oeDsAX6hhPwf60PinTSv16ggnEMnd008zrv5y7dtjP3St
bbUBWLcOrpyCCWD+9HDGNP14jY9VtkHjgHAf4tkHmgdr14GXALD2vn03NXECGF3kuaEJFOFu1HwC
VN/7HsuF4gAt68zgYWiOKeJteFf3svNf5z26ip2wm8sEaHhlJxjbPbsBwRh7TpY3QPElPHYAi4i0
HV2SjbJoc6qwR1Swu3tlpCnCTjctH2SNpgGdNIAdlcmIXWbcUVNP78RZ+6uDXcus5JstMJ/iF6vf
hRhXaHtttglSEKcJcBAIAjaWt1bKU7MKQLirlql6+feZ+gBDemXB3K4yxKbW1wY8ICkMY4CDiild
yjMBRBQQj4kxGS9Gv05r/D4ejQN4gOlBWxcrbvFhGJSXrc52L3EzoT0yImeeqvSIVVjz73qrAq/0
/YZFS3CH9MX5WTWI/xM2zLjP4cGibWzBtqnx/RwrbIJrA3PQoRiIsjAGGcjMCRqgXe9QL/Uy3l61
DWB1muBdVNLkP3XSPg5Or4xHbfuF8z/qw7HSPtbIdf9NSQzPKKJR1ovPHp2yET5ozboUijNXBsml
5W8EPrFEPw9U9RWj/lmgpxWG7RNjNOFaeumWKKvwuwzvf5PJtz8xB6aWSk9BELy2Zj3X2/1dUcLs
sUMT0tqQtB12rMusNogxT51/mZiGDJ9MskLP0/N4/Dhq7y9rhVj2SDsSvJzak9uEXeWsMXUaT9MR
ERTOotwxCd7BEP3wzPlhoWmmAsZoqE5q7bixcdMzYk14mF56MEvSZkRZh++uaCPhnxQbyVta7Bqa
3wbl/a/lQKKsbksd7HCL/+wjRoR+6KyFE8QYc99hlq3oEov60eZ6wcGQSSaZ8XsMWNaHkbV9CKei
J9doPrlkg8L7/TYYnxBysDeldaaZR806N6J7GFwikhJo32x3WdEQbTiVTDJjF6VflxmiDv2SwFZc
b9DhdL+idz58nV4SHl/DG1OC7LSB6NgcLIbWlWn5Qwc12Lai2OBktGGqNmyS2YkWtTINJr8Ywzb/
LEONVyg7seM27zsl3grNh53cAuCAMO+B99FKzaIIYBVehHZzo9J6inUuZO0C3b5Ob6PSlM/4gt67
AHO0l5T3PjFhbR0tAae0x3ZHyA1b5vv1qF3vWnENT/PbPVJGSCeehx5co5z4Z9zLqpMaTroTAwMg
bIicjss0bOdYLG0T3TFWe+IEWBvax7DCjmlsQiyBIEEL3OX1kDBwmk2EKbifO3QEa72HXlXnCnZH
WL8F3CZK7btayvufp4tSZNxlEracYJHL9RgLQ1OBcqTSGSoxbsaZWDA1GwXv0O8HZf29hIJTwaw0
kVKayGYYhey75a09MG+aOVam6YolWbQM6Gd6IT5drSq9raXpbIZKDCEWJqT2oask4AVM+vA0nz6M
hT2/YanMITmSuKPpk+hyed6PM5je3rWiB+cVhxideP8y2jWJayLecZS+ETE8OxB+9DVHFmCHuMx1
reRxqmW8TkYl/rYCnqhUMBoDzxsft0dDreGhr8NpvBFSdtJz1XnLMqz2OFjnd/xEhQV1rYhMiXcB
KPuao5j6NJSllwoYsjwO96kysSTTwX1PN4f1jY/AOPbZJBW4UNeFYm1h26e1oh65R+M/WIha1k3Z
zfd7fMKlpNkJuPlaLspKGxF0k/fK9kpopLWV9OmEHlx6izOBriVTSuiqrBC/qJQvMkndYYwFG87f
oIvqwZzS8jrfLVMvJjkOpzMGwpUDy7UDe4ZgYXoLKmlBGt6p60PJtsC9vFP2oBJOaxWMw3V4n07f
xuGrUhRY5SIHS5YrM+174Qblyg3qO/F0W2VlpYxiVDBufSFpBse5gjcVGPA/DvRXGvEIbUwnFcga
20CZgqwxW+WLUtqZIvtf32Mb00jaS8FH9huFaZdR5Mrmt9LKzX81ne4AYVYN0Yo3T2k773z/6375
glHi+NpE6GiWdcrqpBtge70G800AcKtckGn7Uv78f/73X2ZNUjKxctDYAsq8G0m+12fsvEPB5FvJ
oUN6gQi5tTvO43GlsbR/gsZU1G/+UBzsf01kczGeOXAiew4lqPEfFnGjjAqoyhjjDQ4agOmQwjHn
+24HOqzrUM4Qxyu60OAp903xfFWmyGwo8Kzzpgiox7Gx7vs8XW7p5TIQDI/FPEyPgus0RWVmpQQE
E+aV75iZX6XLFQgzgwIA+JM9lh1Cw0FxWLjd84Ex/3Slf1PWyQAhdeUlT1qpMhUvaixvmVhhUjo4
GqjDQq5ux7jKeN2+WybNUz1fBkGjVjt5Qlq0VRd9KMe9NMfb63W+v7yyDKOdLOCCFuW4mcyUve+d
Fbtw6vF4cBV28UiqLGVaHKeFUMk2Mi1lOtUOGdT3LRLHoCkysBu1z+vcm4BYNARkmeHB/9Yfw447
Dv4hthMx80Xn2EG7hxv4owe1zWHbF9KI38anL45uiYoR7hd8u2/z4f2uzZCXqMNm5m4370+36zhS
KJI0VIQRFofhvDec+/QVgGoHy+dN04PYBeKOV3DbbY5XsrSBTcB03xOR3K6DAMZ/fj5QfEjRDzBo
E7QprXyzRdbbezES6UdPDdiLXApCXw1X2ncbbubIoTH57azeGtwEHgurkB02fzwl7RrTIVXbFplt
WFNEmwfYDuidnp4WZxThjzqOcx5vyH1CHgOMT3cmvoltZH7vy3g/zXZ21DPBtoq4xAjbcHqdzFa6
LPObI3/95hs3HTzD39N8v2DxEqOajeoLlw0HfcGqBOlGQjr0dLB4ZHPlgQMIfV+lhKNwTEXhiC/j
eiKHp4911qk3q+s6CeY8I8XejfOdAgY9xvOCI/XdroVSbsZoHiiwjC8y51Bm+Btr7kfWSUKgLJOZ
EA+K8XF2w/VlVJ6YnNV7gFosrFqcn5/Nrv2TWmxMF/4WKPvGpuar1IMTUD7uH4KP4rr4tiX2qs/7
z+wVsoklnvWsDXHphTqifQBx/7A51sFtBiGMlN/xMy8wpeeSVPIvKVtQhXUP1Ub2aJArzGYJ+CEX
c9kO1yfNXnJJ0c2Vc++9/QG3ZMRCJZlNa5boW0HjmTZp7v3ET85BgTfyFRkz6aq4DNxafaYOh4Za
yvp0+IHNUW2Ut6Syd3C/1wyru16HShXehO+cNVKpjqzUCkWESkmE4heKLFOwrU7zmyL2rDiQpXgf
hoW+LSmHMhNLhyJHTYysxiBSztkfgw/hkcLFbgj0r9CbAMym9SeGHW9gX/zu2357gguv3naxHnKH
fCoSWQcvba5MV5lX8TkR2upkWzW0Sy1327e8VX8My1kUYmkalBXGwlUqHOQnNujpBFaHblpllaRC
H4dcsFYrnpAiO62V4mR79fzKt3+wpjJUOasGWC2+24krYlyZ+Yx41xvWmONNVK5Kruuv4KpwO1yR
RJaHZakRwURW0rCF41bd7HZkZs7P+qpsZ+sFzNNhPUyK6q9OJ2XT+rwVVJdmsKv6ZGNLxawzK1jK
htWSArCbhfuE0Ra466lHTaypfpySUZnT82T/pEys2K3edtWGrkUuGwW/5/FQbkIp3YTQcaIcoTKG
qCECLwIRHbtdiXqfqcJkTzkGcdM0Y8AalS+orzR3oJAU1R6TbZ8dXO6XH6sI5sv5QxGf6qFYMrqt
Wr6TlEEnETpor4Ky0jx0HdtPb6QydiXsYuTKYAtAZiPY1SiCWkn1rXvsV1115LlsFMSu+lr3knSE
+iws4m5SnosiTq3isbi2n7/PMGz3KWJ2ZVOqXbReI2+XGgimx0t8c+ThlFF2BigoJMg9XbO9p0gL
JpKf5tPL1VzHrtoX93CZ2ISFk3/CTUk6PW0v6aHIaKuVqLpoTSeJn2rwft7I7T7hVqaDB13o8Mbe
ONfrOmG4NPuCcTvjvHn9YB0ged+ywLKCPNP8RskEhYe7YYRsj9mmkEpgD/EN5gw4OoxnHgiofh2t
dAcqbQIu/+uECahv0wn6gSUyCU0rgtCU7FE86s8wc2LikyVjoD3xxed/tQQMQ9RQ86TuIfF2mu+w
YtaNxfaH0xNwLIdCCH5npgMC3Mk8/UmBn3UcLZQjWWBg7rPOzmGbbWQdVvKNtUR4Jia2dqayyu3x
5OysvXH+Ym74SSHxoeRgETboysN8FqPTiKPw2oCvnNARtp7xhkVgq3hQmmTDkqgJdSEhAnclBZO7
yGngakxU27KBCbQvgLUwHW7cO+Q2MdsIsZHb60iRjUQ+s6syGbmmqRKNxYh0CSfPa/ykobnmNo+7
jEZOT8l5clJ/Sl+3fKakfWzZsuu/qdQwdBlncMy8umOH9vV69vxSTOkrechckgNcrXP+4Nu4IDHg
NLPUVykHZjS7Rkrk2caarqIyPjPOMVmh8un3yehWc8LdV6Q1squW5+9pWEjsP/tq8ARvhf8o5emv
L9RTArHRNiJiw/EGjd8OG+WiQAKajWIvAzBkgFSwVIepNmT0vnF1BbeodiL/PkwX6pWFi8VZ4sB2
nxOKpcB0WhY2oQ4uPv4AzBA7u5NFgkRS4zdlRN6oGFmhM3HMr9NwSDTILXjfMm8g/2sw0jguI8RU
PSTO7seuVVeMKAA2oNjgIqgzY3BAlvFy156KRO/OaoZGA95yXO1w8oWjsVqadilxP7uFu6uZbKNX
8B72j2b9dLG+FmRwcFrmjOgKoDJQ5ldLdOobVKqbrt44oKjEDuVbIWJSqYUoaNW8z3zloU+Pwo7z
VVsum9EqqQ85bVp4xIrioJUmTiN0gNdDcZKjDFwJdNZu3PBMaUh+8sqwQUOOjRD6aSMMaGV1Vh52
2s7moRX2ykCCtMJ7dGXDiWEL/EcQSXAO5XV4wUlqLUrRPKjFzlrLV/MOzrNfrI2+KA20uqKTSmM2
eDMlQk2WKzMwSbXmgdQR8upRBBWTlb+oWOVQ+N4aDkaOrR1TgVoyzxrJjPQUjcSZn7R2uTXaYOtS
2ni0P8H8Ifpy8yfb25NcRjtfjNSTtzOcvw0f8Wr6hlXTW7O6WX/IDY2GKR/a3JwlRsWHo1adXNnO
RrXjXYyB8TZ8VzKjNGAeFnzXkeGmy9FMENgsgPVRH5PRpzCOQ3VP0XWkLd0za17gz30W9hs7BIIm
y+h0fFicDQT4xY23gsKC816Igj/Ou9LkjNaD227sFxxq9/5+0mgnmozRPVAAJZNPi2wfGm4NWwP/
grIPjE+FGm/kXUoU0LRWdraXuAQex7MR+z3CWiXOKhAsflqKKDEuEG7471YBe24EZ84BEy63ZiGX
1/n6NpxTCGHa2DKpWsyc1v209IkKOhBHLVqJ9Cgx5mVOjbqhUvKbS44ZW7YZPCFRLeeQgW1sH7Zx
OJ+TVz7jOq/1rqqm9dLCyag8mUPBxqQ0bzxIRnMrNuqiitzxw2nceQ0bxhe2mgf8BC6u2Tf5If5I
lJNg0+SBrlBcggkrMsLXzKxnP0eLoaeBjOE2KaMxRrG8wWTnw5t2Gp+NV3uyf6J4x2W+ncZb3NSi
02EvGygjc/3i8gxmjcIK07Tpifr7ltrDvNuqsSolN3tecvZ41ZLC5cbGet5fz4qAM1I0bhzQAcfe
7+hwdZ+6dYHoKOM8UJLljwKNuMPB2Cnn8bzDssglouGYQqXRSUd81cSmqCV2LzZsypymW8J0ILf3
Zc08XVKamQtKJj5wv+PtyELpa0SNapMP367z5SUlz1kVs0wx8mmlGWKdRsVgygT+XtnFtJF/nK8I
onBu2HzFuhPteWqToqga0IoZwg69qUKNwxWtsmA2N7Cc8jpiJYIZf1XOllOw+UIGNszt22zu2rK4
pisQjjmP3w8xWhBaYC+R8EVcLmVyfdJAiJyAWfSL9jjVD+/mg85PI81J4ZdJv0JULsqIrURxFuir
08mtWbm1edygfrA4kgLXcpFFJbD7hh0UQcnY24sEfmXcMFUm124n14oK5dt0OaFdn9AmNefXRALT
vU+GchxNyqz/pJ+Q94n3Z+PWpa2Mqk684cFlc/4s+d/KVWOj8oTUo21g6z/jjabIQugSkRI6Dtc5
1aqrpJVQ9BIB7ipBzjAyVi/EGVh1uWZkccr4TNKDlMTa2vtpK5O9d4Rd2DNdZZ6l1P5As1l3+GHV
vrBDYLMqwllKnSoS8TbdgqtSdk00jLE36MRaQ+SET6tUaU3bspnUg0A2xVJWSFZvnahmt2X8qj2J
RZnQTJgnDd7sxFTzLBlu9QEHZ9BqS+dxSxYT988Ou5jKu5NtjfdMPI9PRlWzMu6H68FQZQcfJPHB
5LwRd57NjSVVRhdw3jITnoaL5znoc/Z6QQ2k8bz3W565cuO6hJqIO3uaIi+q/eEz/IGUn8YjqE1o
sWzdR/WB4YLciAF4PIjrvuBFkbRlbSWZMka+tegKTr/koJmWGSMB3egrCWZDgAAGLEtRdvRhG9R2
N4+FAlPjY7KgUQDYJlQeNjfU0Go8ccijWRLoLVdSahySw9iAOKDRwf7X3K0FSANifVGSpJmMyglI
SmD3kulWPknvb34anKQAk9rtVCuZT+XTm1CxTDH9o9KPXDmrgp8VJiICZK/lbSDAwiHeHZMAbhwj
jAiDB3SsS4d7rKgCl6plAJmtNaRenekb0gVMkQ2SyBCR23B7fUs1fW4LBgMttiBvq0MIPwvPg7Y9
vOkz3x6zs1eQgCOmm3ekrBnzD9zYMgsvqfGy4MiexkDCPguAazn8MYgNMTQ/ohK8/lPg43zttSfF
ief+lcR/K9HySTrKLPkDAR24YuUWcOwFT8dxvIQ5pvkw3YCAPyEzTUgYaSmzr8hObXsQLoBDTd2A
5hHPnGkkTwQqTpE8ldJL5up5relFwVOrSvT7wQiIH8dbZ2gLLc3H0I36pslKy8gwmQ+YPt9COV8O
PWFGJ4Hol/MEZSMHihUd1RAKYUPrLZLFInlH8/XlBgTQFPdbrGEH6PXTDE0YLjuojziyiNdFbBE8
9DIp7zA76hbtjU5/J5QdLNgxw21xyFDL0zqez4dhSUOqc1kFHs2Ld3OtI41KuA5HOyczUeAB5gDT
w/j9HU4MDHH67BDjryYMWSZj8dzvwPjmYo9vME4TH6dg43C0hTROhICWxqn1+Xxq3bWy7nz7O3V8
3WV8nJxjBln64XfNV9kX3hm9LnwKWZxvr+wvBwU3ntVNHKdTxmEYTh4zceNc7m9PuHCwCX0xOVQD
H5b5TQFLlqW+o8EMlR3LmSRxUrPfdTKFMl+Gj61yb3U/7ATkQl+uw/srbMfX1KhMPrm3kZy9LkUM
K8tJB92o90tsXOUmFb97/dpMuT5hr4ioT5T7WbT79VKE5prG4fqi8CkQcT6K3il6JpUtavr4fBT5
yBlMlz8W4nwyZT7Vfv2fK/Mpmq1e6X7/bVPOs+w/8V4p717ebbVMsfd+abNrPn0XlMHYxQJXZisq
yhQ1xcLUIg8SiBuoCHLOD4JBr0TBUQ6i4AfR2EIybPwDDuNiv0GT7rcfocQcI4zGxTr9HGVxhxaN
ubv5dZCBcvkHHwncVbRFIzZ+ROol2TFD2VUvXOe3GVx44xDFfV4ar/bjcZ2ynVEywECjdWx2sGDX
eXy1jI2I3C8TEm2mHdxIneP09nS1zSZZmfSScoRYjwaWETkuyyq0xkIAa1ljKc2lZiCBpU4FbXsQ
8g1vVsEDH44b3OYrII1k/p/FwCl+mQ64lwleqZzLwWcSFeEt9w96pPdwZTOYOgY2oenyPB+oil0J
tNaxqkhzCuM7BGwux4/VcabhFX9eamCwlptMjAeLglLLjqhUXsnlI9ahGqif4h6fKtuGVtqI1CgL
fAiRrY0U311jDmpQwP7iMF/YKYfEIyik3mXHr7AUF/lT4qqy4ZYmj/lFfpcS1qsXu4bAHDMLfqc8
QE0j26CR34sP1DKTvil8Gmnnhr3P548XV6s5nP51X256gVmbb59hYeLX8Xi/LkiQkSh+ZM2QLduy
PP3hdMJQ7nDeUZrYbf05ecz1sB4xY8rBsfXziF0wOO6mS+/SzVS2oN2a48UnTlAZt9iaja2+DQEj
wEpxst4hZU/KrevTfuLy/P47W8l28fZng7L7/dvHjDme30punwPx7LhMDa/WbIP2oMFvBGXVexfQ
8PATI6VQBw+ORrlizELleLOdWufz+rLlPivDt35SP9uzYYmh/RqbyQNPLu6bwaf1bNNu9Wzxu3b4
f7JidsgcfKrfr50S1FabB7fOdD36Dk9AJLFKI3ZbzWyph8BdAgzwp4j7W5694xaB57/Bbp+ei0Ox
hyP9KHa0e9AroCnFVW37PsST58/TiiJRwve93AEhNN+t2Q4WfBR4Q+Z7G7aRCNgX1j4hABCy9D1K
zqcPhrI50Wj243y7fib7kcm5uBA9AM1HkhXVeZi6LW2uga7mSpl3m72HRtswnM8fCi0rlX9zYWJR
Gml422QiyTnSlDL+YuUv2sdc02aVnO4SK9wPlSLTvdwghTOL2Iuosyl1vNWKD1UoZ6HsUrdd3cYT
Zf6nymRHLicbDZRh3j5mphUUH7lghXS1HNf1XnhQ0xVhi7o2Bkk5Ws6QT4BRclmyHrmHdpEOiQxO
lpkA+Yb2cgI0Yj/I5ePtad6MYTdv+foigzx6yeMXRUJlXiSZ4KAYVtSyuvyfcPM5JgarLYuV18Fl
x7Hr6Q5ah1bmTxAExKhiCHJMx/t5uNquVLuovzqZMG7tXaSTRjR9LzFPeIfmBBMhhQGeBQLstSWz
/olB+NCzPJit+/8T3qVivwVWX94E0TKuqi5cUynXpNtSaGRRi0AheyYEA5udL1TjYm3xUNfhNN01
8FAvS5GIaErMquOskByJ5iozgCR3+G5PYLm/qw3FWyY9rIFE1NBT4AoN747OAaTSKpXlcZOOZbKk
AzS6ARFRDuGmHGUhwztEYNUeJVqL7bbdAzgt0F/VN0RznaiUt7r6HcR3pTIetzxZbZVsjiinWrcy
HuoRRba8GRuO0WUqb3cthdytxUbm8M6OYKUEKH3soqZx2hQc2Vn6+7TXZrVMs8p728gAnLWFCuPh
tqUguux1uawBHmLtSA2pj8X5QAVgH4Cofo9eZ6NSZLbiR2yrhXeecSW14lOyT+50FFujlGGW/kQ+
owoYl6zPVBCf7mn6erB0QkQNuSuH1PRbFdgxlwSyPf+i1zZUM4pvksuw6FX7oZ1i7azkcA0HhPPQ
3drzM+y48zvkhzt6POC0sWpgK+bru1FpiqPA+IPh9pXZ53DxO8Cx1QOZcJ8UJ0XjtmJ/dUzGbbhq
3YwfLPZ4ZKfcTWG7w3It5DfLSDzB9yd7/CmjjafTeEG2poIvc5Kxswm7zsfeLXpwlLpgerNKVQ3Z
EdMvfcs7tJKjw6XF+SfrQITq0CHLtdRmfR8vqYY/5RTUFBWqYr1kFc+uKwo5SPcUvvJWdL/H1U4j
efx7n2lzVcxFVt/pWrY8I9fY+kJpUttsG7SqUwgD5bnOtqzguUCAuHxcbsYFAGp+RaIDgPYq0cy8
XtFE5oXFq4J5ckXTdpENvBu70Iw7jvBmncaZyoWSPXi9+KGGpfu7hvqHiYVhknov29nPl/Tq5wuP
sk3EvM40TH4iat6yY0YWCC2UWCoPdcQZlgeqlauRyaUkqQ3c84owLW2TjZXQJZiaTey0GGvpAd0S
0lvC7+XL5BvirO+rYkuVIeSoCQwT7/JNKnM6t/A6wcl9CKcqfaDbMlL1RiuGywGU8W7B2wbq2lpb
SQzZoZOHdT27sffGMkUi/c+bZKpfx9sAPFplj5YTwQCVV7aV7wD1GRFesrgyEj2ax57vNv6CiL90
E/SOl57wCYqRk/lGYLt05KSUTXF+w/d6Dl0Reb6spJ+hFBt9G7B8qOfGt1fzajgU3wEAkfcLsGgq
yrOTKn4ZvfLvsbH6Qoqybm7YDlOXNyTw5EhrrDf5eaZ2DgiyncqZZnKsfU2Pn6Yrsa4bC/Lmnqvf
5cnx6IqPoQppy0+7iKXcfELaDMXGrdotILWRPE3Ezu5JPXCXiOG/ebji00Wh9bYMrInUsKPxO99e
tQYwPDnCjfrIaInePDysmiv00opf1YnZqK8vh9N89FTee/M1jWxsW+X6ZE7x5QqPCObzDmo3jY5n
JyLNQ6JWz57WOUFSlcEspIcwFdPquCAX2Get0pgOUlKSy4CAmMLbpfpEsnWx7cnvuCV15CI/+vtp
bjcSzGpvyTP3jva8qJW8t9tuPHpBbJcVsgL8rFOjt3rhsUieOBE0OMj8p7V4IdcDQHQHDwvdvRjn
CL0wfRj96D7ZTUdff8yFUvMyuXJq9RYUwOoNfHjPNXlSwgqt0tFpuX0AhQR+GIYGrnetuKVipSg+
n8IGdW1SuCKdz/O1iI/p6o3MmCWMX1Ydry84j883G9f2CLqo/UyzLMISnOZxlrDMFfinzK1npTKP
xf7aipVBSz+oRO+Bg8J7ZpOzYH1e53fwaSKQRBqWFeLw9CpAskBjErbtNu476YKt3PdFsvCuw8Ne
KtPK1oHWptvB59MbKIlPbB8rX+LJmVC0D8Zon4Z/38frhyIoOduy2icqXHNI5wjYie7ADNGwpbR3
bNtDRrfUBvJJMpPxUZ6X9/E4PUNVo7bmjF0OZlSE/QeP9wXglzR4lCSWBqzYgC0fkB8ygDXO97eL
JsDNdiBJWgjL+wlx4fV4rPAwGDU1BlsiT1diX/D5+6flw0uwa/iOAXnqOoZQrbQp2+bVg2GM8U+A
xeEHsUJn+LpiQXef+4hVcNIXZUgBsiKIzXG8XKeTb0QGf6IQhQYFrRiz1aoZ/Pc2AKNJDY3SS++c
H8ebO/ExykryMdgYCVRrxZI/jJDID5DA7FQMrNitp4GfIxzrQAxt4+ll1Hai0VeB/hphsZSZ5DsG
SR5KKYbT2YLgVU+uRzSw2SDJYynExBflHi/D+45zraVQkd8Nm2eA6MT5PioTaR/2A70l99+b9/04
LsvB6OCDsZmRHnm6ICJAb+ft6CDhyfG0RqOZ1Hlx5L7L/c1o8I9Djflw49dGWCthvLpphCbxxzPw
3l2jOQn8MqvDHt6VzTK+G4P39vG+Gtn6guquk1oumw16ucIO3RfzSL3Np+n5Q9mUKmz6XQfbMpxO
65708YkUPd9ZeycjW1spG1pL6xlO87sDaB9Q7ysbm0kNsm2jy6d4eXbNyEzxY+9UX4avar+8mnEp
46c+NOd2INmQDcdo/erhIV5D7C/365ieQZelzpHCDLmyeZ0gz28jJIv2iJJrXbGR6ud5hhHSCyil
7vOSINJCivhQZSmI44BvZHIaNhSwdq231Atv77cPH0Ez6uxlxrLzd+U8/Xaub7ZbjjVqlcOoiof+
55HtKPboqrySLsYAuZ/znl3JpavxZfx4ifjVdKSaWuBL6PYsgTeYfxSQtZXz23hNa86SbYcvVfAa
C8n8Q4FTDroI7k3BuVVPxhs9AeLaPH/LtFiAwg6DvGbteYIXC186qmlN+bp0dKVyCObzSx3/ti64
CPcP5xdsvnYj81yYBEL8jVpEl2B5Hcdb8gUvtGODQBedmPLGVK10r55neFvgzOmmL6/z3awII+WJ
NziP33Iu4spVz8vHXSbMIzlLPG2vnHMjPZ7mt41jP2r4LtLd9c6rWirraOP2VXDblTvOTseb1GRT
pbQNt2R8KMEsfHpHVnPENIF1BUTYl5f78KJcm4Zv5+OLHpzsLv1bCG/rbXiakC8HTaQhfjwNuz9m
XjGx156TSvj9xbaDTql/18FnvXeNqC6jGSDSkqVkHUgb2u56DaQFGWPJMY8kn7S2l0TNzQcix2Nq
DlWuyQjo1sO/hq8DiaCiZatwJqtwHBIGa+5tPngcLXHKf/zyt7/++e1pPP2ZtuBXCNXP99uvZEL/
6upGfiUWml91BVf1ihljTfuk+q8FzYD5gudpxNSXc3yUC8luENuliJORnFGbJ15FRc/V2W4/stnl
R3aS6U5cQ0Bpi9XHygvUaJaiQrJKlhD7cZ6YlS7mLq+4yLR79WjHK0qrVG3gQPiUUWrJTbcoGPvC
ppVFoy1qc+jaXPq4QQVSp2nwTpDY8Hkf3oCgT3nk/SpA5myn6NdxOO1y0KpQ23XaHijXpykTpkby
8maaX4HiidEmsyWKXVx6i4dV18eWs+seF3slXzG5izym5oAaG6Pe38z+2LfJ0j5TeyLKyb7HonS0
da1wGV7BG3nfIQG15ESKVuIum6jZu18Rekw6R02Tq2lLupG1Zpag5an8diOZnEAUoh5CL015OP1r
ABiAS2pQQj11JlXf793EXW9RIdmp98uXC/iwt+FFeZ9LTT0EE1F+vozrx20ccdeVrISdXik+92o+
tscQWiprbV6K3mry8P5UETteGaKqHzfIPPBfsH7XO9LKWtTn2WVxbYbTsQElgimt8jKlN9cfEaRC
yrgA97sEOAxiqqFoRRCbfq+3sksOcym0yiw8Ree2klu/uinER7REeVZJaLJPmM7K29S0O4MErXI+
dcLw1oRfevexyOlgPJlpOMeqzmrW60+WjPC12XOkZSaZlXa4L+PH0zxcTxBI+ga0odoj0oexVRt3
H6YdTmxfSA/Qo0ZRzLGqedQomL4yj+dEdQj0R0i0+YKH03y8w9y0EEqtiR2ctRKnq3Nle91JuUkk
I7TVow8LV2fHBpda5APWoCiROrR01Wu3K4rfaDK39UL2DFh32hEFak5RbrIJch1eXqJFbnQsibCS
4NIrDlIruOU280e4KUcIMEALG2VXmiyXFoQx4m+2G+Fs5gIX4gl3eblBvxlFiSfi6Dtsh1x4+CEF
gFbiWmOgrEnUMpt8lKZ7y4T2DHMBWrg726wEE2xfQZfM9+uRiHrZnzF1crvej7dIqgQVH+NVXE+f
DwKv7PQEBfpnTMMoXKpmMM8qSPqCFMbyxQFBHbgP/u5gfwHiV9FVt40YnufjKN/6ewLeThkCDBF9
/z4AHBdID5VhNgnmLjLMdJ2UQR6j7JSVQkYp/CRg8gFYryOcOmRRrrairEQcDACh3cdF/GOZesN2
paTPyTi2s1KG6kRoULgmwlPr/YuKkiFivLa2Aw2XG9grg4apKQq2LNaE0w5BSg2aP42H+W1aFqVi
oCi3lOLCULsYmMykOumgwg16uc6gu+OouqIsRDr2cG3HQaGbN2vKw5k0j0MoMyg4o2S1/dwuJAF7
Mocskt7RID/hGD9Np5dR24m2TktccIuUsVj96mrpWC8OdRXAw6FqGndHuQR+SiDFZStMybWRnS6X
ePmLOedSOufs/btKaY0HxHk6ecEA390/zTfzcmmKpd5wgNSp7VWUA6uw8h7IdiijQhHp+jqcjPGv
nVZVJIc7TtfjWTmpYlNMWUVUxKJco0bSU4jUf5QZ5OAZb8qtKoMqRVeVyvS4clZ9m9YtcVufNoQp
hW6FqqhnpBxQya9TL0jf3Vi42oqaKvoI2CEGqExWpaQPpKR4GOJHoif5IQomITXj11K7HLKwlk5Z
SyfVmguLKZXbmEsvtT0ehLoSgBf5tiyzsfc6j/oSGTlgsxZQMMlT5rXtDlKzbhYpRVWxUmKmwR13
z3B+fx0O8Rbo9Pt+X8AC6bqtmgRvHodTup6T1uzkQtJAJ9At3mnIZBvMd5nSoMo+l71y/nYs+2Bp
5cFmoCx2NcUp1cr9yh/fzKfpNEGbvkFRdLkkMRtZTcpO2WVJw2w5Xoe3J90UUl6S4MSBhfl1vt5e
jd+qnHiRNM6I9iDN0mQG6yQ7y5UR7zI6qyzfpYiVp7sp4k8LjfHzbJSoJrut9Ppz/aIo8b6KH3Og
OxtFd1bJt/46vo9xhltzFqJ3s3bpsGNhKaYisr1wYR5Xolw5zoTxoAVoJcb0wNYv6AQoC8oeSm0U
60W5zZVkNoQqPKUnGbEFcrw0ERFTpLRtU3KO5q4iaHXodUaH0N7oTU/kXrA4jC5RfZoipZ1f7+aQ
9UZYxpjr4y70xtVUNrVoFRVLQQI8YGUEJmVg1PaP8nqeLy+qUi04u3Qluop/OJ+xZR78yw/z9aI+
HIylAOZURn0j7R7ueI3VHDo9xZXU0F1Qz72invu4bRm3WTx90VkxC7NS0NtRr9j9zg5mJKMKFUVG
S/8HjqbelerRat0cATEEKCdQxp9/64eeB8DFJ97ZkjEqblS7s0WIQ+p0P+oykZfSnUO8n9mOP7IN
Uja3kFoS8jcqvTNVI5Wl8QP636hAVKWc73y7tSiEEidyx+xtR1pcpsbP6qQzRpeuVS5dK1Eg2TfP
1hgACXpKTTOfvxENApqJshrWM74XrxG9nNotavZZwIqaqOPxwGAdytPJqJRkd99Km7aQLLUQSjgo
d09871IKT7mHsu1KLlKhPHiZEs2xP/02rR4/hKmU0xEv4QlP5JCvfnJSVgPGb8YRYD8nr226vI7X
SYtyydFr3JJc25Ii7UpTvgsayiq6kVX8dpHbj4+/4k4EnYq2Ksm5E1i3/7EmUXa4jm1SfDFlsa5S
dWtl4iBoUT9fmLsCTLy6z8JkMfLIAqvtLXkXeNG33zTuBCrmFk+dqGkqRXy7sMlEFXuLlPes1kIO
Nk+mUo2ZZ7WWel0Ex3y73t/el6TFwZhufWKZMj8HPp6yq0F8NOrwaBuy8Yqjml+7TU0qvvCH63FR
47xdOg9EPNROV0EfJT071QibG0+LKmLXplZnd0iR/mbDJVtGMn67Ykp9mGXIIgaDYpG1QbC4jaUf
jYNpxlNtTEaL/zCZrZuq2A7FI1m9RzEQ7GB+v79TJBlS9sDdeY3ksiueIO2CgIQlrMFxoeHDZboR
du4UHSnP/EjrZtEADk7h+hjpwDAczEllFza7ujjuL/yneSVixU8V9g71M2JgWvM0zMPJ8tB7eNh5
XkaCwz2ZceLmU8V68+LIXk6Pr+PxC7QrNIMudvPs8wO0qjdjxLwgqti8lqnqMfiZzJkCXRhxgqqx
b9Pl5NgFhwvyCyrMBxXrgIxH7eNgC7Spwh3B3h74b/B8n7GmH2mr6aeWWCl7xW9uF5R/209JPg9P
9ydz/xVh7Ngg3hOjXgFwMPoC11BQF0aRX8fxTIcBkW0sg0EpnL4qMynYXiGzUOOKgt6H2/EVaIJp
l2hxcUnO/UhtgDpi12J4N2bUK5TzxnHUdC3q8Fq49mjGEASUOm1zfIPXEKb5Hp+SjJHQY39NqhKZ
GC+i0tC+4qCcUEZP8xtwM7s2AMBzs141t4dE8++Q5LFHijbRn6x/pOYLiasi8Wy7AtsQhBzIqJEZ
aorCYirW/Nn9du65e9FZQmj9cL1Ce4Lh6/QSb8aEo5WbKXEqgOU2XG/U5xb+OESqsSseLAjHYdof
6aaNcngevgAw93hfFLFgF8eTOvJHQFH7gny/jcsyIDz4elMKZPC32fesKMSKJF2U0zwuWGhPCiS+
KQ7agpsCGsDe2nA+tm7mNAIm80N50orMHz2CqzY12aTnn87360E9q9ZPq4U70tpLYinK5gs+BgBl
jW+zixqEL47ZWSN5V9oY7Qa5VvWbt5CMKcSn0oaTwlZ2mO0I1BPTaUFbXjvAxfhsnqvVrnDVu/iX
muLNWqZOUB6sQDyCM80BnsebThCHQ7KnCcyKFdRoBOKruftPE7Ju26nioCPSg8c3k71TbBfsY+fO
ZPx+HKnQfFIqOCpMXYrv3mn8isC9K5iWw46V5pl/4Vc3J5xVFz/avpEkBNq5QMjkiIxaqFHC1yu+
710n2XCb22MMukl5XVo2Bg2SPyhMY00Bklx5ovrQNhGHsJzNVBtK1LWv0/NN0cBZqDRb258A7LqV
pF/NjKAsFeIw2GHNmbvxA69raWW24Zs15qBD5dqI3dpQi3IBe8lKlAw5xXpqpDX9NgNQ5+msG71V
1kuW5MavoWMyS5sSNiEbjTXVIBE2TqRi5Ds+0/DhXyazmdjM4cv4gSTPyo83mbQUmjuJPxlcigfQ
hq9jz4TseL8uyrdF7nU1wgLqmCI1r6HZidtqMcCOnuG6Aye8fS4V9dpKNql7ckGCL+P58HJUnlm/
TSxgxR4VxrWD7orRhGb334HCThFkZlhgbYT5ZxO8u1T5MetGZN4wV8CnmEKbWzGtaukqMJ8Ee1Ep
V0kWoU94mkbhKvLlzQpGtbn62ct4i3Mxkl3BPArzr5Zf235O+6wbn1mfhVMoA+MeDx17/54+FEO/
lPQg6QzH64Oy/WLedSDLo4gGiLxu3hbsVYQ8YcWMBxv8YZ58ShsVHdtunwYPn+hIJXvFo8NdwAOy
7hXULIEbh9M7DkZKlC3LJcWIiwFS9dM4nNIud1FsPIeGqddV0yw22LJaRPHLVrQ8iESbTVKEnJXD
2xuy6usilTNjF9+wwnHRuQcMHg5ilNFUW95l0u3AHzeP0H/ipo+nv6hblMtRKFu6doOUOwYmcOfv
SoSlaCVzKmLG0uC6EcskG5q+VW6TkIzOzk8//pybeP74kSx8LRQnHaVpoZyFJSCy1pSRJyTCGUJj
dJKi5Ebe6Q5BhoN/VxTbjp0ZWuQ5F0X7KqFnTbdf991qf0nQuqnyLNhrwDRTgtP8jSLWnZcAGotL
EhXVOe9LEaNcitcYRf8nY0P/iFFtI41rsMadou55rHiwMNICj/U/r7ORUXJfjD55mxSTmpsS3g8S
LBaMKUjmitzQkuyU6tE5sqHFxCO+ht1RtlC4HJnYFUz8dzQDU4GSipljGM8KXqlNxL5SIvb+DcF/
L50vz0TdmEaogvcEkthwjFzBCAMVjqIrdDyPw1XR2pWkmt7m5T7iQOC5DpevwxJacjBTmqHqIfEU
hTcPjVTeD+4GmR+wVAlauTbpCeabFNS+Z62UtW7BfLjc1S1rpFgMs+lQKeCfD2glDvoKV/REaOVD
O+vEQ5fXUvBMUJyVsiGiw3e8jiDTPj+CbJMzRjKAZygVFcykLdpOzN/n6Xo0btX1YA7TSP/r9K54
C7n05jBv4TF6jYQ5igfDgwysTx4dJl7yOM0eXQApPu3i3H/+mlagObvVq3aSDBajB2+aAcXcd5aF
tfb4ui288VEixpD1uRicsr1VoWMZDGejOYlFVpJUfEa/73BHS+koxufB/FdWLapZzIqHsy0IxJjV
2N3XRfiNRRulByDf099LfBmZ206OgrX7IPLqQkRq+LYQD4EmxWPlytuai4JhqdDuyqcZU5kAYWhs
RNbmilz9CfTYOB2+H+JuWsbtcl+s7FgcCIT6CimhhLVRiGdsI0tANYBX7q+pCGWelZEI5b7oTMl8
qPXSmltxw+jd78k7Fj3PO1Y+74gPMIY5EzGnjNnSTD0ux/l9pKYixji/UUMu40xdThrHQblyHPgW
pzDavxh9zWi126gnvvIgkssYM2wQWO9lQAZUL6fz11gF0mmjOaXEK0opRyzaYI1ig/E8LIiy+Wf+
u5WZkrHNmiIaAETLxzZ2AcmwBhXjpR4wMqHualEUoU7mxuS0bm4qzMqMW6wIX51JFBKbMZiPNosB
uL5BxX90uTgrnhV8fx0WLRfYiUF/9EAsaNFSmqSi2Y0ouS/QLnMcf7N97vaSh9CdZpFlIzy9Rd+C
JgUsALS5R3K1xIVgHg3rH0e5aPAkk3GzjHmmPKvoTINUcHObKyikxIqfjyI+rSQ+qEZtQMM+mDa1
gdGuxO6wyCS76atEE7kw/AJWHCgag0dwGf0thBCtKFoskbX3lAOrpQMLstOUfzythrdiB9dh/KaU
M7p2/1Q5WCkqbFAgl1KHijrsRUG0Cnnd8cSjXpVSbDMqTKuPa207ZeBG0iUaDIzSf7uAYCJ6Idy4
Xtm4vQGPPSka9RlpRPtxvAmK67BJZKdCP0FchaNzBTFM4gvEQD6dFcZZf9Bfs6aTklFh9hL43+9X
LX3ZSmYq4jysrWpbDSWAByzCGjD6H5ymVyzLSrqQm7i64o82YUDVNknwLFmLa5RFfaCsEbeHRav2
xFdY59gFL/1nRrL2HIzEOFMfBlAMVNdAtQ926T59aj1+Fgzj8218emEUu/uHsylfnJJ3s+DyfvnU
rFppVu8Emh8u5DF+asDCz4u5Or9vrM6P5dU9qc7PnL+fEsuuBNDjfeNUgRQ46CmRB/y+FTZsat6w
sUMOl+lt+PSIubRnPH+7b62tNDFuFX1mMHFOzhz5jEBk4U221vr7OB6hK/VxfrnYI6AHZdeYnq2P
Wd2habpzJLZMb1gAN9X8ecmoSukAjMheP7tnXnchrIDMUwIBk730mVl10qyMV3tgqYmd8yrD3bIZ
XYK0fWJG/viAz6UqWKUChlSd6aU1tiHMcyYEewSg6/1iJoUO3R5sfcmwckVJhowlulhWWIB77gHK
nPKjNzjovI+F4gslFM8MD/+2Uk7+K9ZPUHZegRfnUorwMhNKdb4QNOA8Dkq+suCWuDcWN6B1MxZA
n5VzawXrZyIeqkOWKanctlaMOIeSKBQEWSZ5EuH3tWKUl3GIdjK/tBK2obeBoarMn6KRWagexIhN
0sErRcivT3JY/AmeKHosuzH7JfPb4YLmfGSbJke0XiI3UJaiW7E5qVI5qVzaaud4XOakriGjP5MQ
+hsM+qJh0HkcGIegM7u/n4z2/OvwYQ7tL/P1P6bbLxqkouTxkIJlKgEOQU89HNvNuEUD9iuj/yUp
CTkDkWGNjPFQNpFqrEKYXJpVmWEpRYfDA2uVq1FLIulyzRiz8oAIJcvCBDCk4rVZLjS8L7c/n6bb
oMXmcha4YICqFRBlF2abIGoAsiqtMvJGEeRKwj+s1UIW6jdS/N+VvyiJCUl3ikHqXAlSi8C6B888
ERkSk+/hxihgBV7B5q0JfFQdsoRKszFZDrO6zfd1w9Kh1KKsNPQpXv7pAvn3r3tUbraJQ5aep5y6
8zrZVoK7RaTCx7mRUA2wq2CvZJFHhjwNM93gnw7XcVBCP70k2hHc2DtD6yTgY6KtwiZ3f/82XE8L
H1JJmPI3l/Lwgb1PD9Hax35NT2AB1/CeTnPwgj5fsoHBmIV0KNamKNQQFSfi3ZTRbLIl2At5hZgq
toIfDWL5TbNOCvYeczh4RFBJkw4ZiW/xfCHn0CpEXCnsYwLXyQLyXHcA+Hp6w2frNu462ZLl49eE
+nJf3rE5O6ow5VsGnANrqLKepWD9p0uoSq6jWRcN+HBELDf+K9rGyRhhUVTRso1ExkKx/+tNPrr0
KLMg9ZUEOVVcB9VYSsWD3o5YkaZm/nSctbVyWJ4X+rDKxIXMU+UlvHTKx1YtlsD20Nbx4vUGB+vw
tFSVQbuuQAcySTvzst7n+4VUCy5pZ5FvLgEJwh3yfT73FIpmLAPKm8+5iboXzljHaFQMt0ExJ9g9
KuifVaYWjKIGs2B55UZl4QPVrE8L9LM5fH+9Yv8TBe7ATZQeh+SuCEUICNUBDxJoa6gdU8wVZin7
SNSJXBnMoFxxr6hT/QQCYx/QJHapDR+Q1sW9sQzlwIEMiiGfpeu1bMwBbCFq/JHA4GfsaWPI5+2g
5iQv/0et5ci6SoIGewVJqpFwvKm6gEYsVEC+sP+2vGH/b+X5Ydj0DADTMWF1hqgmZeXGmuZVWLuI
JDJeH+2f1nA6UHYB0KWn83DRwk6diKYDYA+cODSDPwQW3iVpJ+YMHIaOTNHWTuzR8oW32uz3YoTB
LPP84QvobEJpsWpO8UjyLjyRQrQiATdr/jx+UwyxTmX2oHnBvyvS0Utv7yY+Bf9yeLvfErCkUnT8
Av8BqycVn0EEmqyxmE8WCxSs5qSCoauVH+tlTRWsi7ThtNRTInmTrtwZ0Lzjaa1AAVCRYqC0UoCD
wGmAK9uHUBOLVldNSvrvhEFXRZMWwpqs1UZvhWoHZJ1YuMQLKyH8lLYqi5wHS9HFbcQKZWKhM6/1
u6sy1vAwopYI4VQeA5Z4ubri0QL3cdhaicO2kq1kS8Gx/HU8PxOPwv2o7HUte8R4MZ4A1kh7kwjY
V9zGwruaPaL33LswrZU6sb7qFScx3/pMFH+c3l6sCaJVr9Z91K2g6+ARG4oUtbI7sUVHKs4Dlxmf
gEjT+6zYl2/XSS1mFq0D48gdp+F8+HRxXcmgM1g5WkvYM5wUhV5OWjGjeF+2rxPLBSdiG70EutxN
8pI1opMhIYPRxziNZ2OR/jZe51QUoy9l/h/ZiKdagcS9KvpOcjo3oUujC9NhavYSeux8YIYOp/md
Fj1ddpERtJLMKff9qpRS8yh/GQrJYymvIhyVVDhLEv8JMHzOmE54AS6zPBR1kbEaMMjgFHk6LcpN
vrUjuLJdtRS6XeVi+bjcXkcoxiUHIeEgS0lc0e+ZbvCqKA93KdUxgGtIJUp4o1x/AC1clkl1b/5d
VCqm2iadRCmVmLhYibHJNdRKrqFU8IyWxoSaMs9veri7aYRT8VuQK1sg5kidub2W2r5jmC/ejolC
+M2OdDO28L3Ml7X3+fN90Q37Uq5JDLOwiXKqggNj/Vm5ssM1VJSo262koIRxefBCkqOCXZoVI4Ml
JvJVWm29Ipq6yu9zaAJ3uSgiPJn//HD7Nqkw11KKALJUX1AvnnrFcpHhZXZq4GAWdVVydQxFzXqs
0O/v5CYqWdUD6/ruYRIUEE5JB8/1+43FeK23zr8Z6YdYuVHsPoeUKuOrSum8qZjWim4CSpuLRVLb
G0oEfTYSrFwDMQJs9stqLZ2GrxJp+FiUY1uu6RplaJZBvqV6C9QohduTQN9O5ge0VSJpVrVWvFkB
VQVRtQCUgaG6lKSt6HNZ2JRTN7f555tOmFiKBKW7CFHQRE1U6he9GA1dozjvw7J8m6+nVGlFFnFz
8eJ8MrbaicUVsK7Qb04V1XTqm6g4YG2lRraWcbgeX1M7ItYTrGEIV66AegAQYasTrYRiRQqp+cLw
7MrV7aT3L0y22KRiQq77uCWPnEUWX5VCHOWNlHIIjSeFYbYXJY50skXopBKtBQuFsl7LQB1stRn3
f/cQHFS8LBq7Jksoi7xSTEIRZhHjmEm89iUP3ucb5bGBnygwOl7s7Woki3hsBALou2iM80YsOlt5
2ciqMn7K8KRFtEset2FRqQ1lCarvp1lJOTViqiO69/TiquXjZVHHIBvLK8CZXIIN6vugsMC8C4MK
KCqYz8HIfoJwJ4a5ce/NXyjbX0huq+B4vk6Aiv4ALkTNOig5BvAhfvYYNQ0oREhnXOCeIUbXvF2U
unT/i0o9m4uB6K2JdB3fz1BmTwQ7CrkyrzgtJDMHXVPwYRgZKlUSKXZOteVD7X284Rdc+AgPAUGq
yRWhoLDx70cFVt2KgBhSXKQJIeZzfzd7viLItZLWXopMrYYd5IQwmUKVrY69VRPZTuT5sPBsXtGl
KNZccjQcPOMpxa7CwngAgWikqkiMgwzfbWVDmulVDB08n4cXyM5hd5HLwVeWKg6CmIlhNanpVFzO
NFfrGZG+jtArDfCk+C5bxJCScs8kEyGM7Zh/fyLTfk/4lEVzGe7Nr007Mr8tmCUsBVY7NbFUFJ30
lG6fl+NsrFslgVN3Mu5RwBopUxG5I43eGM8p0e0FOpmZ2Ig1JrZCTvk8WOS29vZPidLbnBPBetuT
xb/34LtLWRNsrCMFCNuL8YZ1MdYH1hnq8k8ZWKdx1Jj8REcB6qSMj3JaNXjKou4kfydEEoBCwb9B
zIuZZqrvxpYNomQak/HWKhniRprV5qyUo+6jgSbYk1+ny697XJ5SRGMbr+XD7C/2s1mhAYddXmEm
pjA5ky9A1s3ElLS3iBOgXwc9vcOrr6SolREXCyymY3L581RWWKxV+L6cHSHu9/gjJkqe6B8oYfD8
ocVGK/TruDnbTpGZUlIy7hYpQWzOxgrSVqx8quSrUxRQCUTKGALNflSsx16S2QfspyIcEWI7KQPn
Um/odFE8UXmOxb4x1sVdK1A+ZS22eTzKlaYSYk80wHfKJiz6QDgKkJ9w5LPy5BVhhUPNSV61Yru8
FqlzaDtcPNz8YVySaBYWCFufa7+1qXKuVvT+ATzok8xo/aQyuFktev7GpAVkrnOqBufKfLvOlJkH
JKUCn9t2S6ofmVhSYTGRUP40I6sQlJ2fhyVpMhdZNCMUVFdqLl4Wmpd5nMAlEcVgjgAr1ETErM0L
6fq7ykTqkGAqEJ+/Qg5O0WGcbZ/i6GL6bXkdEgFn0eDd0sj+5Tq//ROY05VMMYN+lmuk4qGlwQ5Y
7MYvsdxlx4W4L6hvz9ko+AviI7HJnXl6bod4f7qOtZL3qLPTaOzII8XOzyN0Gf1OYA5q0WtWe4Wy
lePhzfiJeg/Kusuklr0WVmDm9m40G+VtMCAdHagtxU560KmXZkV4/XeoSjYacwSEIvT8iy+9lHrO
PsMNfIbXDd5a4h8ACy86TMM6ihbd2ibdFiRg41lK409v8JbE+0uWebVp/NluGC1+XTuR/mp3LTrW
SprHG/2hgLgwYtytJ7nI4y2kw+ahIByW6dDFRM7j5UWRiYo1RUTS7tzeCVyf63KO8htfYCb3tx+O
X16u852xUCb72lZ1/rhXaKWtwR4eRIq3D8B5tbynOxhvWdB7CuXr++sI5NjxS9OyDWI9DKmG1DwN
l5c73J/Tx2V4g3bt5w9A1ivCXhetdA3d5TMqZE2i2fqLtbog3iCz422FvdHj77b5/zetVWdbtqGU
uRo2SsIYNw9V7VuUgwx3vOqlFtb3y2RObxnOh1d8C/99n65flPsidql96HoD5HrgD1hQDkmq5U6y
p+Hcleiqe95a3XvvocQZ/TW9L9OCx3G8KfJWhE1KLYDUOO2n+aDn+HAykQaswj1azC3ClpnKTdo0
fG+c3hkPJPLrAuMy0edC+1ZU5Q/PD/15/H4830/Qvtf50XGRbaou3lz5+XD7eDfHSXt3NBaYIvtc
7TPm1xdj4ppXI363+64P1lewivp/38crgE6NhhluKk8ZTqGopbXwO73czdv1gpWNw6TeZL8tSG6S
P3aGfZ7Mk6rPqGqKR006X9/NkzWefjU38rb8mlgT6yXPcRnA2I7ZCkiSmCcfmwu8zUt8n7uaj4Qm
U+/Pmgbbd9J1H5605bVBreJIo0kpkD6Ii3ZRBD1zXSjJ7DIYLsdQ7QLY7R2sryjoGI2G4Mphaq3Z
3uDVbHBG1uF+PSuXuJS0OjSXRHZmMjb9Hw/jchzex+V/fReJc/rS05GtDVCyrIn+555mx1tlQK4S
++8L/t/3m7k6xGB8du3j56AvY/+5Z15q/X+eR//zLOQoK+wHdfQDz/zlzXG+11BPGv24Ez42hlL0
v2+ErWY/5qTFaLPICFUmHlYV/cVy+987jTVCeA0uwAoJSiiKwM7y8UtzZ8xr7Og2dCPSWEVhE2uH
JLnf8Mmior5DwtY2UynV1vJQLzNe4vZAxa09H7jMlLbiVV5Iqv+I0KLLDf2X6/08Jjaxrpn95Sss
KH3wE3yP71JcodW15LE4uQFdTV4Z+D6O4wAyjKN56S5HRVOyZ8AL1gw6Esqp1Qe2a3LpUBGUOt3G
N6f1L3NCwrKS6X0MFWY8YQuhd6OlqaYaHoP4SBU/LdbzETPnSJ5zPa24jMOimVgdM2D8zpjrhl7B
YXoBqmWMJ0Q7RNCzUUtK/tkYCca/MGY7Ig5u6ttTNGU4l4KbnlT5zpsqxE0i7px4aUbYA+Z6tK/L
nJ0TNpXNm8qFG890DZYEwyi5EQ2LL/Bos39IyRDCE38azDK1V5R5JetLcQbH5nC5vz1pblXb+u1g
3NGBMUYZn6SfXQmyEkPBlzwREnxxNK4IpS08R1eM8x/VSiYqRNBORhEYWyTW0Zt0UidJZhh5gItz
GV/QN1OW38hPxBkZG69XS7hiMUf8jJWlie5SxHcbzDw/IAhL9uESF76G3YASr4DrJDGc0GClW4WW
KtSGXwfdq2PXmxGIxWNlSpQsFyQiPI0VCvP1LdL5lp65nAU1ett8wYbcsO+c2nsSb0ZWyFGphwhU
YioscFE0bLttG20jHJiwQb55qxPBIAATGiyLYYLeJnSo8TPlgkzNJlpNWJ4B3nK7AvLN+GvX21nx
+dkLB1AnN7J9mUjxUZsrSyZ0OtCRKW4O138V0pDkvsntDKWW1CgpHtkocybGHYMam1Wd0LaDh3tJ
GCVt7SfCkX3DdxdDgGNIR567ItfcY4I3AUTBnMRHfJQ+k0bxDqnZFuOzv1/H5+m74kPWwsZwT30d
UPHRGymE9xhoxswTPN7n8UWxO8u82oSOLI0swXmMBfdyOQxPy3wGKnUWTcWroMq+ud5MnxFzdLbW
sxMTDaghsam0PF7NX9OHWP3aDhr+pER/2IuAqZjawSigQ/oeg7kNXnUb2YVeQ6MlILd/MINBo1q4
6Zi8jVwaEAfWk2Y1FNwot+sAQczRXumopsZx2pBeuApHgqlgKgGqIeKDSN43YH+0ghr8sJfYuLGS
fv44uFnEdxfGaEVvGZRazP3CryqJn3w9B+yLErN54HtGl95t93+6HK/E6Qfl1YsknjiE3zUMnkhT
WO5Pt+s4OmyWvhOMrZsFdV/G2w80Zpz2BnekkHZkZdawjXRP66lEM/k4WCkdyuMGqVvM+Kp96m57
REV8O7I932fx32f07j4sHVyNBTDiU4RQE+dQhfsQzmGNWlCmKL4Uxmu9Rkgdb6Qljray8T16Iupu
hjOJz6MXLrpt0oNyeh3n60vqwtZR1YUS+pf5+mda2x8/flQ04OZ4SK0W1neMdkvoxHjXo2SqKQcU
jzDolkXGYXlEcZQyvHWh/qUyJ3Lb9E3l5P+Px2thA2soJTFW83hA19Hmq+ybAkaH+bOzF+ktSx18
86gzhxPaeKBMlCPrJS52SZvEr1AtqrfBmL7XafmyajWiOrYbf0bG49Ru+YsFGqcp5Ld4fvoX1nXp
GrzZ86qoSisL3/NQDozN+EssNoNraaX3eNX4GIJIqAjG599sbB2rc+2NODzdXw591VSKBmc6CyL8
edkGKe2siL8eVanJTEyc9eOpW/lVo4xLwtZhbT4YdmtzQ93KKGFlD1wxA6taOm7LF2jGmi73OIgQ
B3iUFwKxWsPdxUsOwJ/zNlxfFAe5zysJFsQ7pDog1J8V5k4CAHG/Es6vogP84eef/3md3iaYE74W
kMgd0T1YlMB3E0SsA2rAn61S/MflB6OEUhOreAiUJwj1ANGixIZ61UG7/vs+jiwmlOjBQC5aJiTD
zd0vD9Qpdbqg5wge8XlQchQ1c6pZ7wKMxh0oM4hmKfpAl9kqz7iPzlxHBjE1+vEGcBTrPEKMFJ3F
6/wNgk1G3XURD69c2wWjx4hXMggnX0cAcAA85TXqTRGegYGoSlQZzFnE3ujJwGHDvE0OzsT6g4c4
0xB3+2sWPEBmUCf77+P1SDhWBDS8vQDPj1YpTJcyk9AVyw3oz8myCM2CQx4PIeWt5PtT0F7hGMPt
YdArZvZtsEmWBH26UTYxvkdlI8V7xeD9Aa7gu825xMGSFM6XgI1xPM9ahReD9cSPhUXZWRnEKiF0
xjanGL/pZSHMl87DzofDaHxQMhYyaTIp5ER6//A03wiMdn1bWetVgFTR5RJakpSQe/FeIY+rQJXy
WtKP0hjQHRBgrEoMlL1QvGSDhdQ0siAKqIlpCpf9vSA72l81QIeLWIRYHrqKt+FlV/arzHj2y2ub
rS5FKbVnFU8krKymqEZb7NiyJuXjj6oU44dswWn8Oh2BQ/4dLF4Miivx1n6b5SzCwMPaL0vL/7RN
nwCkQYbzfRxuKTBSnT3G6tYI2GG+TnAT0kDaTEo5AIU9yJlTuEpqh20u07Qs6bEzeNlm4vVxT4ln
gx4SGFXzEkmqwVb1nFaF4ADLekK67zZQhGoTm4WXLQWhaDiEwheepO2JPm5PMP1AFBT1mlFDXsgg
pRb3hCid1kvTQzsMzK/b/GW8LKl3s64rCdv2NzIMqSdPtBsP3dNWgsCTZbNivJCqQOcbIiNHFOwA
AcBSXzrCoSm6EIMrDLZJhiZub1OUUt4FY3UkDQ6nrBrQGYfHeW2yD9cLfAPLTcH+961kZBixMCdg
y6X8uagteyi5UISGRLlWTWk3sMwCCwr/Uck22RuUziCxt3VKoIG5ho9iRsmmRIIs6eHyv5avL7J4
VZKH4N5nPEcKN6rQqr6XhJQAYwEgwj4JyBGQQo61gk+15mOTx+QSDhszPK2r8qiuyjj0hHVY49aM
nnDrOsl8tL7TWs19msClPbjHS0OC9FUt2VfWTKOwxC74bMW1HhQz5IV/AdfdNv8yzdH4OwoUw02z
d5RVOY0X9BmW0cj9iRVCQV8/qOOJNvejS1RKiAkyl9eWPD50Qmk90BAO4hYnViP7uZIzov6hxKwM
xNLiexCgtnJvYiWFL88Vk7HZHlBj7TaM7o2r6poAgPpdr2IqWo6w97krz42t386+/wzAhj0HV62i
plxLfjfvwO0M2tD5asqspHgYAQBsTN/sMszvCixGwNB8c3X5SrxIBCgEcHA4xSdjsnxRkHyVrDys
RztQUEcBfpS9FFIDnlOsywP1msJs9NnmmXXlM/hMJAPmZEc2knXkULQMwg60flCGssPIqdpij2/1
eF0K5bo8QLVsZB7wm+NaVOA8AwUjIYYLKYFoy/XfKamiYGXE9Xmdgq2xXFva26RFzpqgUpMaR7Io
4WCG/Neyyrhy/xvJH7DSiPFFG1hBra3gkUSEKmIRAZKkbUudBcDHENV9vF/h5zHKq4CIW8ni9+7j
iYhiYC3D23iL28ZlxgS7ZaXwQnjLx7UKJbAlQfsen0Gyvf0rqL9+RS/HmbnqP5prgnFiLEdV4qd1
I/mXm0tH2FXztL5/aG+euW+9VDSzhtdcXVkqvlaI6ClP8LBaIlBddNfUdi8IV+o8lUhsVUUDf6CM
lDAsr3usfXDZ2Hr/tIuhvArpUCWw0EuAecT9sbCLtbC/K+g/HulgST4mnOaZPBEGBfPEGtSB5LKT
ajsfHJuzlqyoy1zYYbOUV+huRN5aIpTERlhDSUjbDWdNF8NdC82GbXmIDKKPedc4PgorMj6CTzjT
tar0Mq/RP9WqqMpauMrMz9308VHSDY2kAldEIFk/KOIuBmXvom1p6Z3sOCMgzphX4XRrAJ2uVIg0
Juj9CvdVrPl2i5Dt0nhqxRtiRtaqw0X44dt0nlQEooSQDeIk1MBICYyIxRJh3AZwtvbZ14tlmo3i
z22dAlyM/SWSLY8BehNyzTjvALeWUn7S7zBEU5Qr3rR5JFDxtxHqp9f+kCRNQOFPaZkd8YJGttMk
0HmirL9qeSUp4lgDgh3sXTPqGOuiqaQTC47fhq/okpv3bcVG6OtkHjAjcAkqye+X4d0MqOVfuUXq
mV4pH2k88Re4yaxPzHVCZi/VGKsryZ74TG6iDoLUuQ+ReQdSCSHW0htEUbC3eYbOL4rL3jfSdU3b
ay5qoVrJRtFJ1fLrxTsbdadGJcpaD94jy979OiXpWRoGMAAjonjQJC4ZZjmSzICAplKqoPpHM8t5
gzMIo20MMp5eIFSLTuGguYJl6t44njmdSqPhbwsj2XUFCXqtW8fj2l6arLf98yoWfzFH8LOad2E+
Dm/V4FUJvkqoCWzLKeg4dXBmuHKSYVGsg9hQ66WUiusaKUWBXATOsgE4uXmBySNUnIiGYSewp00W
s5Vciv57zCRqHkXpgYFIYSlpQjaWOpFDSAQ6GElCELCBV2l+Ns7Q8/OYCpM1rACYYTAAuKTn8eu8
keq5vJmPDjbmD5W7VLWP9rBVGsYA+jhQgP7L+AHBLCXiwEM+YA7bUsdtvbBRGXtStXkYAy+9BvoU
tUfbsdSFpwfcPvZIZ6HwEwle4u+hk1GST6LRteHTsuPvqHMSs8vprEYVz2rwgD0GBfO0DV4qloX4
kvq3ClrmwikrVmIWKieWQnB8cAH7VOLt3YYUBF2n1k/XzBkooGa2yCzh5mBU3HdI5O9lQ8hFG9VX
/3kg1gHIKMHGxGJeXDpwvZ2PSjRNjJ37WNg6SSCQuqI3bI50vCpb10k5OF4efSBtBDz5iokgOQ22
UBmiqIRBC0x/ciSVQtw6QqxQHJaPBegDQOAUEChno2JlWLDr46/Wg/+VLM7v8UEkL5HZUoHIKoqs
5HQ8HTehoN/YeTquPIYOcS+n8PhNbnxgJ7CejsP7dMPA/Ik657r+J4k8vxTOfAhhwasUX6eITXuA
8TIML0Je9buZtTIhGGY0zKgXKgmw1MDuLgD1ggpMNKZMKUEl4uSNuUKV1UiZaOaZro7AXma+1sfb
sENbbukMgWCCzclRnH2PZ6V6yQ6Mr7JUVtkJEpJ+mNo4NKiQK53lw1VOspYgDhs4zjcbnzYPnuIk
SjgLDMBOa6Q8rRDLvGkkPheWJV3B6DfMLqGhgcaa4v5KftPxbIyXv4M/Yfs3YQntTzsqaDmKrQ3I
735YFcifjUv3gzlRRU939aP9K3gG4/fhePsdMVQpHRIerHKYpYRZ8byb99vrbEvBlHekk9ICEpRS
uTmtgIAUUewJDlcmnkWPVS8r0gmMfCLeTkR560Zkmp2+/vp+vi+/Xoavvz7dX6q2b3NlUyR6Eg8t
IJ8uBTCQzhZLa9+MzTCe0Ae3tdz0N/a5TaJ5YVadWLW1Hf6wIZqIDdcXvm4K4r5Fv9YpsYlhw19E
CdjQe3x2tVQVJs8uVTbZF4VYfhlMjRcdxWdV8SrFTp6TC/0QMCI6qawI979QR7NpBf1S47D+WCH8
U3bSYtHcBK0dXymrdAWD3wWAH+YHnuLHHC/O63NWSOnhWbF1xtp9wZx6oVLxYRxK81hmJ6WwCuXC
C1kJ1nBZZ9JucfhevNDUb1iBMSBtmT/RaRbxU6zTEsvCGPFjLITi6YdJWaBYWrhyL//I/xbRGRYM
smfALhywjuzaI8lrXEo2RZiRIZMME31RhuXNkQsQcvDFV1pLpZjR0XZsnb8NLBceu1c2iHiONR/E
net23dTffrycxu9gHczxvWukevtAfK3Tlax571qpyvxhVsia57zN5N6xt88Hxh2QLBFRwfV1j+tT
tz6+6f0uKbOmNYTy4krDD8XY2B7PD6x1MPg58WosgI+L9ScAhedV5KWyFrvxZu9vlz1PVVFJ5dI8
Ovs8gLmEUUHlbnV9sUtEdq7XBRhV5ev6erieenHx9YeCB5PrRsNOAc7KXcYbf23iYzVShXnskbAI
CkWk+7yMMgr8uBIKuA20/0P8MPIdj757cNxDdn96n76PZ412ECe6US2tdNLGZgey0kFjnmFnnK3q
5GGWdDPimC08DD8l5qnHDkPVwXm+71ZscKvxqeWhZdmrU0ttvWSSx+YWd/pwXpXEmRMbi4JtydV2
fRueaSHIRvxj/76wrggPU1JSlLgwiTXGkdzt8fH6QmSMilmRh7f5MsdroFGb5bv0jvlqPkOCWknP
4fyYs9KtZO6q4k4fnBcHzA8XoiO6gkXjS21kMo+H3YuPUD64BJ8sBElBKioxrUOYQxsYcNweSiSA
SUnAB+Q+vb4NcTK3LXF4Hnz87/t8G1McPSGz+RoUD0ZQOLvKXLKgtt/X8e/rPd+X8e9LyZHffh9n
nCkLmT4n/L6Jf9/s+f0q/n31sP5IjBJt7E+HKKtcgMfcX6quyTxro8UjEP5mHhfLRkOsPRgR1ilS
Oik5s15WR4e8MspucKCIRFje5pPGwC72QiH7z5EcDzY/vo9MmjelKbZpYkInTGbfX67Du5KW6sSi
/GRBndZoRUzWuDQ9FkboZdttI0U/4ykVpca+byPp4jBjdgeL9MWdtBKszktpzwnEzoqIE6nATMZp
365JiE5VinzxruKDjJPx/AxtUIBK6QXyRLF0Z8ezKKBFHTGQcHexHe2nr67YYMNY8IQpgXfqOs9K
NVor9r7CtoUfh/tg6xCwEPxfw9chUZfeiaWPTjA5ZEZjJ2gESBDWSFo0cqpAss4iWTlPtTufTvuL
ULq6kjbJ1iFtNBXsuKU/UAqSxGPbYXckCk8LmaV8U+JgpMv+nVLoIBIMBGAU261FwS3lIfipYNCM
r5SLXxY1dd6yJDIyfxaRnH7CcaPUfi7BJWk6+HDOz1bcE6zS7abnXNF1HC5ygs1mqkpR5WXWcE7o
0qOJPRZp5c7ACvu4QUs1AYVy/6Bk3xYaG/P6Bft7Q65LLTor2lrkdzo9X9bKNUpn6hWqXfloZARJ
P5eAgtTfT2rVVCPeHtYTQOHN6CWDnGTAkxGkzr8Km6yUUp80rR5eLAhcteQav0kTCLRieZxVTKgs
qcnyBivIfkNjcRdrirf4Tkfcn4J51pIQCUloZdvzxzw9Ua9DNAMQTafxqICR8ypaLyPByhWckTAR
D2Hb13Oyk1LHW4K6GSkMzaXfUSxRlVKxBKd9cM214sQPlVS5KVAYEs2xWjdlDDnBq7A8Wp+l6DKD
dcn69nSXyTLn/cggg5dblORn0LSKLVVtMch0CKi4fwX18muq9qFjWDHGlIqP9Z+0Pim8kqBak01C
XRmVPx2W+X7V+e37GLhGJ7gm6Rbp0DxOnl5/8CBdoURC5TIUDXY1r38vB5+CpZcQoPCleSHXUqNd
Fd9tL2nl1/H7D3iXpuVP0ws4zSqw1dgrnUhktalW1ityy7yQajhtBe18PttLrduVmaa87aNLbidx
f8ayv/RkCXohqvjUd7Rsxfaeq+G1QcYcPAsJ+jMJgWgqmRbQixqUdz88rVbaEsghzl+4QddJBqRS
880tGupRXss2sieP5Tw0iviJVhb1qhyen43gLIlKzLbII5WYj3R1iWLXNmvis1nuT0mKjLbYELE6
LsNO4Ujzn9SOYJ+s1PFyfxuvrNZ/0gCGhciswRqROmTTQBwQiiMqjoTkcUcl90ymL+fkwH+UsVDE
FRT8AjOyzOfYsvf2h1TnM2PmFcKjTz3LbaiQVH8KGkPQ9fLRzhIxh6ke2MzYKrraNwnHCICOMyF6
FVa1Bf7eTuqXKAy+zDkkHB60vLTV+8fpVCjl7bVEYAGHNacjWzW3TzrBRvg2Pz8rYcxCrOFnNbMH
T8m2KE5YVfTSXTbSewQU8NN0mg5rYDjRIp3D1quAEdOS1thBr7pFz6NgHqoTM30VMzUEX1sCju94
M8kYucyH7yl5bfJGilSgtUvYTOxnaIN0rtm67oGVedUJr+WWWlCJhXv1AfkYF8fkx2+v+KC146yK
blcc4O1+w/YyOgK8EdTNei3TRF//ui83s4WK8VRIchHwWSV4R4qeRcEwktJFe2293K8K60wlBsZ5
uQgMplwVqbw7JE9MUucZy16w3lBpHRDQoZx7JXWm9a1U0+XzxjmqZI7MX8gfTclwzZvdeXaQsJEY
tYdfzTnbuNdijuXXQaifDUHBOxCI1GVScv7gcTdX3Twuh0LrdSlGax5ivzbDYJSGi3Mo+1V0kshJ
7crVPFpbRJt4YjurIKicuvHd42ZzB+Q6YlwTjs5Ywn2mkIuJrLAhMJllZ9bKAJ2+tueVnLz5gDf3
MKCLAIXxXTH1sl15NShGS5LYmIcpe9w2u9Th8qH4KX67IYtfiqHOSolK9dL7bO03Z/4rjmcplk/v
ZrxIpEsysXFxWHT1Nn3n7ZoidTpiojj9AFGDRIVqUpRRenfIkFarlNtKXKFz3Hki27iEjD400VWz
Fzooal0WFMayfMsxby2C4Xy8AxXXyQFrh2XNtCUYtjqxgFktFVckuBYTpLZ21mmHNUdze5pPikeT
ZVJWzWV9t0zwShVVI5wAdu325WqYMffNqr/H4+pBaW/YTCnFHFCzZ52VoNKPQ4/J1S1SFtPLdLZW
y7gkkxoKKsSNZQwmO5/gphafKiU+1SjKT2VVwFIrNWPZ9UJ3FI9cASX17fCqMWjWXS1nwnkbqB/0
F7cSKdWkyDJYEwt0AtnrdrHHHNCFQdMk4GQ/aq6WVNeuNLBRcrDb5EK1t2HKBpYkI1GkrFMA+tjR
UD7LpLQlT+58uw6KMdEJBEjALPw0nY21b2SIupIqLWWqSNNhB4mZoDvidaeK7touZo7Q2XmCf9Xf
7vltZf37HiNarx/vr+PvYECsZCtMbz28y2mQXJlIL/QUUVLDw1vskqcDVGU8QMVNf2p8YaM043dw
+SG5AvEIkLt3EEIb3bgcPN+o8u5zihjqM2CHX1yNhU1R6D3NsggT+hmOw1yLBF11JtDprrvO8vA2
GoWWtlrfXOaBy4S9QiqJ9cC469MAweMjOCuXF43+QHTClPA+tABRwvqVFEK+3iFzsbY8VEqeowE3
RE5goOs6viUxNJmUuwnlf6XR1bGMVdOJb79rXe4ezKviHzX5hqKjjpDXKYYDI+Cp1xgxxnfepmXZ
xovi9DudpOpFAv3rcB11BdluKWSEvPnTePs2ji5xpSXP802TQ0vr6NwJF4Z2x5byIjYLtQiztwFo
NIf3JdWOheWnsDwhi3Jp6pQEFQtsFzU5IjY3VCq5IZGCwEz4aR6uwHD8As0nLalvohG8TOv47zsc
r+XK89AtZUPEcawB4wIa+Ae1DYA5mU07nzVIm/9qjLtvZn2/gkY0j55x+X5Nph0qkXg5TX+jxKI3
OoyxTK8gLoXZpJYUakjd9XLFPjvEauLbnSs5vjoWXY2ypSg53SrSI+oxXqZEytjV7/EY2/CB+/qG
7ft0+EApGkASPYrZr8+To3Riw8YRKoXHG4LXjoPZ/UWndTU75qcJcT2b3/tcb6Yd7Rl7ia5TjbE6
eqO4A82MN0/L4XZyF8tgvSXckxqdqG3Jymyb3uHZbuM7Iwv36ziclBsgQb+d2w11kNYyhMilYpM1
kqfhGjOteYokz2YpYTf+P+N1/gc8e7ePvw4f43VRUq25VCERtC3mQD9HRZtQ9V0rw/WV0FSteD+i
4eO8Qtsq5VmJW3a92ALZmz2IXMPoIHjWZ43KtolQGz9EYPTXuNli7auHjO7qgIwadVIbqbwI6BYS
kcQmV/jRGb+mI/UBtlUdUiTBs/FugC5WmyNWlYzO3OgelKNdvXLrx5AAXdCX8YLYllOySqDJpPWs
sXOIBd2vqcR0xkwplhlku+wqOdeG6L6Vub7bTAnUaNUXkdzr7aTkXWW09gnCHXRV7ayYe5cIXrVl
JiExXPAEWoOtT5dt3mDWa8NP9wvk3KdnFQ2ctRE+UUyVYnswxSANOBCtUiDZ2PUeNcyvZqXZj3A8
86fFrPg0aH1oM07Wyv2OEPZyWNGlysLEV4FvOyVV0Dp4MB6U3RbRyU/zy31xFWNa+5WKKfIVaLah
E3cJEW0eTSl6AE7xvk6nE/h5Ro+/DOeEV91tvWpOcLu2deXw/YS7VoipKAaCU1KhEoyQIiiuyfwO
jdcVrTAMENJjz9UkJ3SeiV1Oo7T0Cpdq9phwUTIMSiFo2cn9JMQwotpfvmKXvqgr3+YEvSrfWzG1
SU0ndyIj8J/tuMbSq4m6kZZpX5YBts6jpe0fvk+L4iyKHPsEVEaWydW2UDxi0SF7NlfJvLwfOyjW
JWMSNSryJ/wyKF0f8lwsnMa378cocxG98b3cuB5S4xCqxdvsuzQnMMttLYPkNhYILkuZUyba9yCh
v4Le/RXC1PfrWRGJWgQiCi4pPlmJ6GHZPl5GqgbU24AVXSZ6XaCoXb/4xYHzlOBTpMn6BoeyI2zT
F5VMf/wXqAPDIPFf5ut/ahjhlj1k7OEOQ8vmLRvHE0V6zROersw3JlQuEsInIu162qPMg+5FOGyu
wS4SEYSA0L32rUtJiCCtr6bIjBPeRfs6IcLidh0mTO8/QazLGIkv9zg4pWi67vd3m7ZuyZdxfF8S
dZk9s4k4jY7rR57wIuR0uStA5CYMNbDD+u1EBLzKpPjctnjIocoPoIVRD/48ahZ3J7c4WWsR4P+Y
0zmpQLasVAghjHP623idD68wsS+j1n9YALbzDPMJCnKNRwiHi/2MzdX70Ct/WyYvGAHzGYxf3ev9
q8IUQ8sTPbFt5+IsL42dcrofVWO049TY1NyUhAMsmzcK/V7MnQD8p/qKdbzJCRKJN9wjeXDmlJc0
k6Idtvk70rAcnqbLcFXgr6w5Atsh4e15Gl9+V8e9ShKwPb2jlYPgkRmME9V81Kf5dsPA+fXNwx51
/7XLhQpYkt0zFJWvqF4lDckLIArfr8UeJ52tL6p9B37B69exPKVSwqWI1yJ0GovH6ysss0qAqQf9
dG0fNCIeSKW6hNr3N3QWjhBloSpYhVSjEPsHrCTuKSO6Z/BExlkXxGYh0qffZ7mdxYp5WImC9C6B
fS6+GJZjPxKKrQTu8Wi31cPaZFh5q8VJsNfgNH+7oJmMBeaKxsylrO8m2e9xqfsS/mKQmL8PePRq
/DvEpHcPcCFj/Q/LcZoUyJB43DLKE8PhvkOtcqtK+daTpfCp1koNI0Fiqth+63LSev1oIdYU5tjO
xuKrndpWNFkT+pf2uOYXhN6s0omMe3f9ivE4ko8wuHOzqnFnt8B+izWtIxS6QFcDVEbKSKWUDzY+
Gp05AgCNoXLz5VYJZpg8KyQCK+h795lWjF0QUyo8eQrnqNhTsF2JtVGMggWDBSqavGhY4qrGJ9el
QCKdbRR+CTGMJ7s1ikPTRtoPbUutUhUXIm2Ou2BQw7+X0Z3Kv8OUQSGWNSiwzyr+vPseVRQBUzan
7LdNfVm7e9tnJVfw/mJU6hH+YSRwfEY7fkWxp+rj61YCtq5qLQGp7VkTT3azhJIdpVpHRh+sJBT/
ZY77hxRQrC47AaL+OwgbVhs6lUnvGS1Q4L1cPsiLXTa0I4oeFgtULRFy6r5UudiUCcKE/59/gFjq
eOtWJEq058+SYknmXYoJ9dLlPY3vkFEgkqDxOwRb9iUh607MiF5v5wNOR32QuNHlUTvWCwGXxnoi
KRhGx30Hhqu3aRwC5U5vL655ODrl7n+FmDOV+K2JNeXh47sHWqLqglJleubgVnZPE3lNWlPJgCoR
L0Uv2SyX2cGNEuaLqArjhEbJPrlNIYHa0Dv/ZTqPFjmhBGa9cJT9ShaM9dygf65wGMCJvYK7dUVU
1eI5h+Dr1e3gWToZcS34rNeXp8GYCAuInY407zMJNquVf1R5Ga258zUtSpPKopBCVtDYgbqxw1P1
dbhOmqfT5BIVjfOmqY58TSdT44Hz+HU8E40heECKJyfymvrUTrqYOOsjOLdyR5/3uhbdYsxtW2Jm
MLpvqPETFWNtDLynVu+dx2clgtDWcUtlRwciMlM6hbEBo8pP98lY3xfFT+oqGR4do8lRPK5IwiNe
Ph2/jOWjf0pGCjGOKNYJN45Bieahd0uVHsSV+TbREhW4WS+h1qyn5ezkJUFNV+bcnMSD4oQ+jzL0
NBrXzRL0aQ1EOXAWC5PKBzAUhi1PBNRSwFAMYICnWLX/A4DkDlOsC+zjcutQGZdzRPNDS/Q1rCtx
Ce9lad9Lpz2JKcQ4NHqZR81WD9lHG4f+BE9Eokw358zTDXscFHhh1sf6zYYIGcsAS/piH1yG45Vy
X7njHDSMrLqT1JO1fdHFbVEJqqCAFblZ7KlrbCLfpnQAVH5Vgd8iKMWDSJKmY9VLOWwvmMvXFzwA
jJHosb+mFfnBAndfj4U2W3B1oZAkKi6x7K1gfoy2FBfz77tGsCgiE7mPcUCSVAU/ItHncWN0X1Sv
KKSAqv0W2tEASW/CBW4kHng7xEUjwy5ryeD8PU7rWhTrryx9s+xAmdcSYOV++XKZv102cRYqKNC9
DpayogJeK/T4UpM9Qh0CqWDbtuqJFrRyPCSH40mVNzrkqOPpRhSaRoaUwI0YjCoEdjR87SYtEV9I
ksjinXRECLz5OdG+Q0Sa4EKn3zCVv/ZEXDWq63Rk/6eEOVN1YsJPQqgqFcw5bwjgbTyX4EG/77Yj
9tQ1InVCvC9ApWQgehG/YOsME31VxZ4Cq6vnzBLXdOKgMablW1hHK1UUKMCBancFHV1wpYAu25K+
1Y90Kkn1UOcqD1RYlkCWmlL2IRaXrlTU8PJc8Tp+v9n5GaMYF09HaN5LOcpbSQ81JcWhUsgGXz6J
1aobyU+DlVMOEoAF5jye7xc1imx0YikJ2INzriAvi1yqg2WgVHOOSuKikbYdKvJJvZn7BiEbxeHg
LxUaH90aifPmUJh6SNy5kLquejRm6LVTrBktbsyUedh2QYso1ayqjjVMZMwFKyQCRZ+KJTU/TTz3
C1o3q6FCYGsFjsxLoFkLa0tDRRcv5cZWVcz+Dyu2DlRBg1CB1/l8UtmCOrmoXuTMhOo/JUHO8tot
qqruIQuNVrNaPli0MhdPlOe2VpzhSOo4RKTbBHsSjC62h/HtEbD+GE08aMxzHDQynqoQWNvWBru3
4XpTC5U6XqjEOD0dAabviZTsZklXppB8UVJMxJZv5Btk7ENRT5WMPXSssCdoKe24YYkZTTFnM0kt
YKgRUZX692XelFKYcXy/P+0g3y2aXArwXO5vT6MvHUkwxJgr38rFbT5BfPCqX0kRl1GmwCTHR6aU
opF+1onpmlKS+dflPBwSbOZiEMCpdZcUy/Is5jHUnP4PAXx1x8lHyRGhSEDymWrFhFaa6aSOMp1w
VCBn7NjWnFIhsmIoFqKM8BMirxGfKgQ/zucUT0ZTiJy9iRzILgKaLJ5mdtp0Bo6q0/cUlUNf1FIE
IuRfSFea5yoGY/kwz/RoTtkMBCSKgKI4KsGZWoaGQO3T8QNWBrks68so75dIOy64Z+BGK/5ZLVqL
G1inOUdzgkAHTv9LtKtY0COt8lh1/jo7UnHFQxPKkGK0MtT3wUjsF41aRg6f3DkZl9pNnAxRbvNB
r4dCKIjD+Txfh5cdhStNlYlcM2u4Altt85opJcolFhMxnhjWEUmpcRY7OyhxVY1hM05iiTPiySII
RkH/Ni2qyeE+3nOj59rDqiiAf1CokzlqmzM74kg2IX27Ti8vpF0pAqUMV0lmTVLv51l8SC6uvPTm
E4mBa6JCRfSCAwjWznL2mq2/kapLbGWdkgYUk3fMYTWiMY6XP43vt9d/jlfo7ztfNCRXV4jB+FjK
azpNinHfSzZecOOXL9O7CwCrCqQpRRMhTLmuBvV62InQQ1sJiHfqhXHE4PDpqhTxtbm4QBa6IATc
jtruMmOeOvbCaUISUSLQW7G5/75rpn4th9owArGH9qPoNhQAmUy0oaAkpEZYm3tN4DnFry8EeuMH
yD9WqinYZHknfFxgulzGK3yumAu5pNjX/h7c753WVjE6CqbjGACIGuRVozVB1JDKhXRhH+kLXf9K
mCPt4gok0u1A9nZgn4zHmAFq/xfsPZTs005GSinZvwGJx+V+Pu/k8ygFWVtPZ76+m2cpZZF3ZSsm
ui7Qx+X7jeqBFXdUyvsGyHxyTQEIr7Vqa9W4rTEfLO404ds1ItQYmYTfIB5yMj6EswERY6ASCRdi
dRzX4u8Qmr2naAzEp8plM5KGbSc1CtyUZNym23lnOUYjOUqeXAe/8X88fDUqc4a7FEMMwMnXrCc7
rNa1f2HjGEPrGwRNT3EoPYxUsd7kVe21AxsJoJDL15ciPgbrL84LxPgYGIuMF+rhMC1bFEsMhlOJ
f94kV4J7Ai7ldYhUMeNArN07j8+ygZbXawzLjyP0bIRK3JDR3NJTfADf8b4ALEzRPmwF/Wt8hI5t
ZunDnY/nGh+iZqtwtLDM79wRm9zWtuQxUiddzTR1oWHaXamORnRRxrGuVrXY1xTNTvNaTUm3kAVs
8P+XQoMzB31SomNiUWmqToqo0VNVCpxAPAhNaeRDSoQqFylYCMSAfh0+GEDIqLWFFWEvDv7g2UnT
ZXjttmdJ/XtAaYyoMQ2taCUu8wh0UAENVgpJPAJQD8hErmBnuY+CurJ/JB3PsnIXw7iEM/aUCtby
QoA/hFhPFHangZUZbkzZRs/BK+kRLsSdDwRsmoi0SsY7U+EA77PrvHiA9GeirWNViD011u7TUD60
k/CwiqGGpdRWpXi/xbYY6cFwVgxkURYJUOd4TMBnfoL7vSQJtUUWPyjMc2FFjR+hK6TiLiWupaDf
yyhAUtrdUtndfAsYtl2rUMUTxYJT+jfHPp7icKpYBn8NnsqdLaHwaHc5cSU2a8Uo5cl4Tstxftfa
BIgpCOYCJ6JEZVbnojTtj4ipmPi8EHN5Tv/yigZzsMbMv19V7HYhAjBZMBaxdzD0zoYUdR/pLE8F
CUgUlmJUqWvxDoXU+Mrz2kpOunXBKEo0nKBxnZJJEWjtT/e39z8g+x9+snGH3ics5DQa1Dzg59m4
Q6JJ2bXexEdOg5oMSprWeRy+qHRUuQinW4xoffnAD+hfXdrqYRCspnOeb7cJh9hvQf4YoVB8HAeW
6NwL3NqSIBf8oAGVARo2QOHR+XYixgAgRmsLn1JWVG4HspWLTodgSGGxE1I0OE2rWEdjKoQ+dTc3
Bnij6eSbjak3fWtcmCi5QWxdHpQ4XchCT33MZkHsMcHukguzKKvIVDH5dp2QXRoMK6P9r9NvAEgz
Jrl2TluJsTabNOSqMc9XZcDeD9igEgvWCCWRq671NKBqBo3GrdlEWd2IzbevAMFd4lT5sfLNnY0s
OVLSgcP1/FjQyW/5gNDky4qXuzrxEk2aH1MHZe+DDmwP07JSbWWlDpqj7tsotukZgx2vWkn5tFdl
FU3R9CIKdRAuTMogTKfZLbUaHrPckKegYknLvfoNmupY5iyltqBKwaiNqoS2AgvVKwCMa3yeNOR4
Ge23l4T0llkn1TqsK5wuMInziP66AjOvmpiB6rG4lPZWZiInCLeQyVSjxKIuS5HpEeWXsVMlqOA6
iTvgARWrJKPlRp+vyzmJMWqTtTQe9alk+sX8C6cDMRarXulbcSy9n8oK+B4P5uvroGA9WHdE+P+1
ROCwRr30tGNfin3thhtEln49z9Bw7fYr1oAonGJCk+SwHd4KhKMSASWyLgzFAuqKZyJdFrcHr+P3
ZJ5CBBG6on7gLfBl/8v1mHLf+kwEYPOunwvuqi02SeFJM7GPhW+H/h0ZzV4HhbDFuDOdwk6NiS7U
TrfxReMsyOWW1RaPepnTENKOY6e8l3YZ3lw+SVkEA4GDG1KGHt5unpeuE0kgvQNlSWds3G/6imHA
MG2s8JNz5AJLv5D4r0Sn4BJh/jdFalPJhXwRb3lwpb/IWo6Jldfppvbfy3iejuEHYuGQRhmpktHr
Qc1WEqxXiNU9D3XTKa4+gWTPPFprLdVizlKlFGlT+Ql8OVUa32Yb8uDdH3m/D0WcJHyZBDFWAMYb
RNi2/5ilJEpV+xVNF4l2RSnpjEYg3a0Q0jWilYJF0TbsI9JwyHeFqznemCON4W3iGN58E2O2FefA
UQaG2HCzfNdXneE9f2Ql4MX2dwgOL/P9iq1RhpNWDdOKndcoaP681gaDaBjtpSBK2scr4mRq/P5+
3Y3p5xUd3VqSnw7oQahpelZIPFrRhoVt+9sIJJshtJLQGonMXP9Al04Ow+kDE0zDCwII8FNm22F2
Gv/S2KhQxX2GclFACkQhCwVjfV47L2ikO0XYnqi3H8RN4qItInyXB5yVMrdOADVlWR//KQbxa1cj
C5JIqV9qJHp6LR9bNI00t3rvrkc4QJu934u/3qV3tJCsSLPQ9A7VkpAbSUl/KXlmWuajaCREHBzj
vs1pWvEH6+RMW6nzVpZn6W1txF9slEvRiV+0imznooi2eyWmF+VVmWEtfdCkN7GVRbtP76K4/UaT
JX8yf4QGm9ug7GUpH7TyRchJaHEk7t2wOlfeTaBHLKy5CHUi/Lx3aGn6vFo/Z29pTF7wE4sho5Jv
dtWbnT9pLfqHn8zjP2mbfDwsUtmWRv6Rcu++5P57LmyqzNCXtfzLdfpLeZVt8sOyEj/Mkx9anrH1
KMs97xrNtQhXWaiaiWZZiLMslEPM5B8plU9K8Uea9B5GDrzeKzCt/H2RPgR/g1kgapcCppmX4S9b
FcJDcxAbUFUJqqK6khTzXnuv6uWnKqlkuQ/0e0yWuha1u2JpVqW00LQxV7WShZo2ccSK9D3vzxae
U+62OOrys3ZnVT96aOpb1xTyvqe3oxCtMMXSF9uUqWZQLR5V2o5tRAqQ/SbiJnXRpG3SqpPPWLHY
mky+MXudhPp3O061aOztNRXrbVAKFdX39+H2iv89h3OeRsTaYyOCGA53bQ1PFEfrSqY36GAw3WiY
4fqyxEdoPDbaI9phRoflMrwvrzNSXUJ6xvz7/XyCEOaXw3RbcPAYexgO3TPYtY8X0+Cn8UZsmpba
QkkPFKxn0WahNBaEj4mGWZkLQ277R2a5P9keLRDDoQAToUOjgaaCEV/iaP6W0Gxuo9l9CH9pod2C
UX1vRhnenqaXO3DYYp/eWywmXrCWtogGx/iGA/HCVJRD9595fULTdww3CMlatNl7IDpSH1rA6wei
ybxMw7/Eccg9h0X5IhwQLfh17UOxocFpuA3KN2J79uHp6Tp+nTDwo/1gKQWE1zuqfMnVlS/Rdhut
/WQr0c0N37Uf4/0E/TcQz4NyFP3nHnurhpcEo4vKrShCea7E+07Fqdiz4qtKykBjtoGkZkFnmPhn
LVMXjEDYX/fhckiP0pXhKAz0iMpP+ZIVSPgXZt0EM5HbdRx9l9MRehpdo2QwBUMQ4phe4i/LupW2
7uN7fFcaUQnSlsTTxQWL/m++XVXv4evC3qv4FJpeOM/qv//p1MUf5+sV2hoSaO/6a2Fsttz4adGJ
ucZpm0O6LvBpnnVlrnxaSKd0/A0+BSafVtF+4nv05US/WhWl8mkf7mS92UldtFwntXXStgIJf9mY
hBGLtWAthVYJ6uiC/zBfKbgNKvfXp3k+j8PlV1AZylDs4anWhwcHsHZBagBRmnEA4oaLf5qzEqic
9YA2ny638V35UDQC6Ded7P4aZYAsWKGrNMQZr/A5tW5/B1krCRrANsr6VX2826yVBIC2/v42Xqdj
Ygq5lyB8LTZn96v67rtGntIOHI0g/aq/azSE146uzPz/pgQtdhE4RF840kSZZFYyPTh+P45YCKCp
wkrQQ3AHKYu03kbFhvL74Nu4GdUOxrf2WR03HefbK5Dh0f35/WZ3Jb19bH9WEkNle2rBQBzhiYC3
6vZtUneGXTNv01mABT0260usjJLz/V25oWB3vx+mk/JOdsLcw1MFsFS03J42oJWU9MaWSRkBvNbT
d0iZj3eiQIriIGj9Wdx7sqJhrsvlBvpqvKQtqZ6bJA32CSFzcq12i/W6pl2tJa2DDiZeG+ReTDEv
0tbmgXg4C/Wy3K8Pt08xJArhAt8vRHhxWW00ZYSuke6JQ46l1VjTMBnxpra7vmsbQWWEtghkPGNH
zK+LcqhZ3C12FuXvVySFJL9MkTwNpx1GZ/moJ8H8vs0Ha2oo+5MJ+wNRkj0Kum6k6UN7ohEBayjv
yrwfLFXc2oX+a/N/ocD5Bkxf4+UoVbWgTyW3yHBBD0RrWFL26BAykcICAzjehMiXrQjxXBWQfwdi
vywmtT0G+fsrtLM8xvE9PUdwMBF6Wt6xA0GystjMoReirGz34zsvd5lcJ2/kj4J9samX0ubhL1ty
B6XnN+9IBeFeC/vHr23fBWqGQ5IQnUQvgklxGLPx5gprstdK2X7aOsAZHxwYfKBS/ehGihitdSN/
mf/iyNL++29/9ZFQhSS5b8VAjDEKKDiQ6hhrBiiih2N25HD8uMaXI0H08UuGzL0NLwtIKPx9fCRJ
NO3VhnjietHiDxGJeBs7J2stATn9GzTuVoI3fXQQsyF5c5vzJr4QsTQTP4YuKvJnVSa3AcXPbOW/
v+BLXMTFvm/323N3OL7eL1/iXzKsDus97I5yoTgPs/jUw+xFFlQcDE9ujevGtyOP3lX1hZBQPCPt
IlhX8ERHFXQlgcPx25XBcHLFoaCpo+LTxcTnV1vfGl92EV22vQsnIH6Lr78Te33Bh/pPGwHIVe2o
6kaRnf5t/m06n4cDxZ6ju86a/sBfkNydbshqZTGc7u7HBymlihicu2epGJR96+uowK7vkxfauN4o
pO3HYcC8s0d4v06KMm6jytgSOys2Rl9FlYhWTGM+7CTTwmu8uMBl0Q8D62AfB6iZSC9eYHhhz8/u
cY0rf5Hg1pVEaZxwZd88sq6E/KP4FfGX+b+Mg0cqhuGA1PtKP38Bh8aPsChDeDAHa1/7NCyAuU99
XHoAEHN5GZ1qsuUyzSGXACXbRWiErDlLTONSPOXcYhwIcy/WCuoLYMDP8VHqXoJDsWmsMheBfOcM
nIBz8U8dLkn5aYZR6qTtdGhv6/MqP+8hNpgZyjl7BFZBGHfqepueh6M2nw0mrdrOBwtvsKdq8mzY
UERAVXD2PgsIf5peFGHrJRjf9nhTW8wktl4Lq2iQ+FdNFiKWShs4ODyd74zggyrolF2oy+DXw2PR
eq/nDDdEe8jITP1tO0/I07ecp1hunQ7DL6fEAgCbCwbZAuab6btxdFK6p27DnWw37tozWMKxWEjO
oCsO+vbAxTw/LUZ/ACvLigzTFsUuD1W6F0yN2CGxcZk9J2VpmQSN+4wmqsLrx2eCdwZfGyP602W4
fuBwE6OeVmaWS8oJaqOQyyn9YtSPM7NlxsZ1uQMt90K1FOf5CYrrMLp/vQ4fvmXU4XmYjNgrhDiZ
BHBjPwG1/S6WkeLpzB6DKTYmgrSY+I39g1OP4mB42S0IFLUj9r8kSwLdBTwX/Ne39zw/2DFlL5AG
q9bBGGIrj/96Hnxgt8XNXTE76Ney9eMNhAoDubaNr7p6C0oOf19YfLFn8fU61gq+exxqz0DNOlAa
KU3LaB/33e0i+E4Kiod+MedT71WgIf1gLW99qXziV7X2gYGyux370WpCEsQf47/eB3tKY+DhuN+P
/3wZrtVic21reCI4/TpeoaQaaZqwbS1Wx9pGsMp9zpEYNhcR3EUch90y2yFAi8e/YDhsvwHmbb1C
G/gjqxEf3t/PQFCIQkvNR/B/iA/dNOEjXKu1WDlrmrJBhRPJBLWpgjLZl/ESH6IWh7C0GaOrBNdZ
PWig0AJxeM+iULZfhMHn8RKPNgLvV36jEN81W4P9AtkybPZ4Gb8drCgq8+1iZhI9uGfgjr2/K3uU
S0dM58Ua1mtz2FrOVmXkipRwX4qVleXKxSjlyo28Uj4Ryw3yVvmikeZljVXbselpuCo3vpQGsMxD
SKduXMSU2mjqh5oBV0J7PA/mpaHGlKgfXemqMhpzJRjFiJEsJLJ1NbC0OMjLvSljiYUltukejajI
SSVdR2I4jaZ36Uuv4tZX8OG+nEbInuG/pq9NG0hGz27NhC2IUVMpEyrCPW2TtS8tr8lhD2veKdLY
Sp4Y3U27RChjd01s4RSUo8vk31emXBbylVN0GyvU8ZXkgImItnWkyeUJiXcPrmVIGM7nD+US8sqk
0vdAygplsVWoLArWC2ulW1npQJWVMCEnTnH328obwgIo3g7i7GzmoNH6SGqOUqxWKhQlydw3ZqOQ
TP3HOoU/mhmkfrsVFpHliuVSZnJJnXKJGi5eejkrfVAJkzqex8HbDyuTNClApYElXf1aMLeyQlnm
NuJXJwskW1Yo58t9inwlelF+TN5TRcsU7aNy1UoF26KWNElg4hG7C1AvIyeJspuS0LB7n5K5TtIb
WZEpQieV5ApmvtU4ipYpBEFAtmlLGUx2tlF+ymnxMB8jOo8VJdP+SytYWURQV/BOe8oKKikEGxwk
ZHuiDaroBPvtCaLymk7vEwvwL9cjwo6G2+D+nZBMKClLzEcrqraR/FE7KITMt7254kM13t1j4NZg
fs/XIc7PVLPe7VUZFJaIi1QWVT04nttBHNKL9seiRg8xOh6amg/4IHhVGJXwn4fiuzKK96fB2rPU
nMrclKGYf+2xdMFQK/vS23yC9k9XZbjehyYwpNcK68NsOrEoGtPIDaqM6Y8TPFdL0a6I19pAC3xR
Rdb8WbBkUTjX69HyJEJkMFeOpN8IbrmdJO8KpEB8aWb+QjFsvHgLDvn/qpVptb00rZVpEGGsoAbi
I9RN8kZaLkdm95npzW+Hf2lypy1xu1/IvHmdFu3SN/6+shD3E3SFvNhhJqNuk8utwnkJAmwbBArL
VSWkzZWNBNqrhUmysk52G/KtoPEbttyfd9+wPFx0bVnXoFvQ2gw2LSq9DxUyWINyoTQd1/uDAIel
LOJKPJY7qVlXTLzlPi1EHX1tQ5HkujZXgNb1AlkScDnQhrApD7UnCwmYv5FgdFZ1XJtpLUNIFnJF
g+EjsEL00mO1ykMwrq0a4vkgGsWH9FmNox9l1cyulaAS3qTjY2kG78X7AZOqtJfUgvaMWwZI3Tro
8qSGVtSEJvdtobx2NPJ8MWPBTVrLvZWJ1tJEPQuhoqLrLrzO0lsOYEvH1weAI2PVGtUNgWw3Ne0N
aJObaI0hTa92fpqIbBAeqD06sKtCo1HQq+MFwGSKbm47IXcUPEGkK0D1pN6hWtI5p/HrBKodlA0Q
/0HuMp6kp4HYJrcrCCXy0Ka1RJ20Brj/sNcKbVlGi7UMlB61q2sGtethK6SH7XG6IzayO6Ufk3Kb
yCIq6PPNbSF+xv8iVl6Ql6yCLCCb5F8joEMZghVYcLxVMITSh82MwEqtCgwXe35gI2L7FuIrexCq
Xj7OYbiY/6vVSptRGB2AffAtSOGd2nMv93dwQ/Dj++U43MGBP81vJavXiyHdSgbm91fTgrWxFZry
qYT35hPId01AolA7Lst//vTX/+s+39QJ5IkJdLsmILaLV2nXzUflA0mCC8OfRvNS4pkenq7j8IVg
GsL/oMIgCEklpnTEsXQKfRqNheRXFmGKWS03AmicJ9eL+Pz+Ohxe70ZEqS2VDtWsGqkJ0nw+2MLT
tXozitWvGOafhX+NQj/aFDA9EdHKJBykbkUCoF4PPtKnIg091HRBPRaFWXmnt/hI25aq9f/XbbLd
XGwpmNjQVuyfZnbUFgDgcI5zGQBLcQr4shIvyny23SQ1McTPOQ2ttxX56bJJKbMQmzUr7KjmUCQm
KL8JkPBblB/MpJu9rtsYnfGmTmXF8NuMtireEq6qhA8oMD9SceCoGSX0m514UDhf5SuxQ5fCyVVW
pUC3FBEuimIouyyWKXwrD9iCy4v9QkrlabzFuz2atfiJFT1yHmfhqSX6RZZVn0kEXc0OFVDVgvaw
QRxYhz1D9FYAX8AaXII7OV2oSXLqavetomnILFBbzpVVW0ojSFu+fLw9zWdlu+pMLFPglzu5410t
VVwoRHlG/sQ9EFRK6oo3Ed7dHaft5YQFjL4F+6dsm18zPjrWHTWzdV3ZcBhMB327Du/vqoZtZOK6
Yscyyk6mXCuVlYv63Lz9+NQru93UEt8Sa/l6ND7ILSn/jaDUV+GdvwFB/fVtvEyKdq5ZA1W2BukK
WOoOZSi2HSXWAdj6fbSBcCg4QeWVqiLC7FoRqI3hy0rmH/YIpsQdqMV6JbcVxjnYt6FVeB2KmB7Q
Qkt0J8XKbNxHvB87WqSWVdPIJss+S6OUHn6LZLK23Fqji1AknB2pYGVOmchL2Sg3TazwZaYgokXd
xuoNcMqqzeWeFSDedvLL2gdX3yGJjd2ZKNfx2bw/ZLNE+5fRKJVk0dE+/3H+/l+g98br3+/n8w+v
4/GLsrOSgWp8HPManqFHJdIKQP2Kcgs6SeowiOMsGnypL/PBiNFt0OzdSnoSjX580oQjwo9fK9JR
fY5R3XwRlubZoJXtqEOQKvq/KRVcP3bCZVeAdmrfPe0frS0nz3awxFzqXrLX2j0veKg3vcritsNu
O7YV+8gC7eyOR1hm0++UVYst6J+ml32qqG4k56Tes2mlrFi3nnpcuXZSsyrp5X0eAHFqTGQ9mFLz
Xjyo2LIHgbRWeCoK0cncvDt2pQ8r3itVlFL+dttJepGvZ/MI3YYnbcsb0UBwGh9qo13qUJmT2MiX
bBzsMw4FTikDsH7s4Ri2hbTMpJfxvEQBH2g5Fl3YenPt2kx7QRrIj6sMxHsLezIamsLt26x8yVp4
+jgN/fxxPMc7otZlHjZYLbdd3xStSQOwlqq+unHXclm3T8Y0CBv3cp1OFlCLn+Kf0eKiVAYBwVVy
rJYTc67NRDGpa8ayFTtYlgF40niKEoZiPFLMQveTot50NGnsGTViOyolFt5y8lGfRTXTgdnA/3f3
yY8FFPX3tzjZVMv5Jr38BOu1GUtoaqUWf+KqJWIlSxAFj7OZznl4h2I9X6AAYYToBLs8pLIqHudn
U1Xr1kYnx0mt21Xs8Du7TbTIF8grmf+v9jDFAcsHvkF/IFSmc55fENtngYWQo42fRSPx3HqRAd4E
Ehtj8QyI0Txg52+NDrplzKhMG/tRKa5kNbJdevyC+C0E861qNoPhQwUN0YK5achcHLUKuStrPyoO
FJzOjotSiRclMl5qyVUrsYL6JVNXR4szt8dsNASHk+J/vGPenIycAzcs6zpOF8fdMVZfCzx2VjSh
OR12q96vKDrGacsgfLgyYBM6WtWqNw7EieXCxOyxPKiva4zXAUYqG4nyUtJd64En1JdMhYxZGDap
tKYpO/3OQWtTHOp2BQMRcliQ40lcE8YLiAabvnUpzV/WurZBHZO6HIyslPgsfNnIZ0+z2tCL9tsH
c3whMAl0D1WIXFtGsMfU/HqLXLxuT9wB5bWSBN/FtugCjFDNpKiQLHxkmX5bWf1TO81IExnEAsfw
IQv32qBpojz6WUiyXD9eHAuZTZ5/HfYJqKLPs2vnu+OZFrUgfmd2HezT0+Hpw3X3jg9TP/JDemny
Rk1SKXA0hTd3dbNLlXRO1F2HNtdW0qledvxuZXf3QyLSd+K1pFbRl98z76qQDsY9fe6AKWz2KX3Z
Zb3E/ex3ZKUuic48fnoiWycMYA4d5ktpLPgtRVfy+TUIS0m9p9pOdoxbnqGv3DOAQLDN/sWn1goW
99a5SFzjLtvouKCPtz8/sGuCv6Tna/O38V+ppaNYm8oSvEA/iKqWD4KJylb84pJRP7DW7190fJGt
frmdhfypl5+1fSB2uK02w7cetVlKYzNkFyTO+ybul6IFsGcj26gd9mhuJ1Za9VEfzT0o+18SmTA8
Zp2kDKaqlKi7/TKxIjG1/fXGFAj0yBtDZrsj/YSFnunHgPPbcZx1Hn3T/TiJY6xFimd3jT71NrCu
ArjtbWjOOeHa7ReVUm8OUcBIlcSlqwof2eazz2FiEzvWEYE1YUKvGiN0YAWhMRzfu1xScX4CozEG
KAOYVBt+sehdZzGbZTWv95gpefSys8Ddp4R32ytoqymFpzo+VhN6/uX+u6q//rlknT3YpuuoCfM0
F9oSBPJMDys8DjRkXKJzwZaIxsfil7+SwmKR9+BTp1tpJxIG3Ag1qcfbWt3qXL30z0WzWOc7jPyy
YZ3LSSMseo0ubqXYSyAMCTKxO813CN+DkMflJZPcmUg8y8W6bSBLw0LhjeklJ3WvHZlSh430/u5w
apIPe/5gsj30iiYOB1TkZ4/4iTYJyKtauEqrbiRR9SSEyIioNWTIuar0z9ZKhGDPh2a5j+YKh+UW
ktfAlk/hNH2FepQROjx8U6ZWhWEpW99CAWV6Xfw8p9NpvBwYQca364TW/xtwUt+e4j9TcisTq+5d
zR7ezBOxqBzyLHsIxiIihPbcOn4uyb9ODK64ssRSipWtH19v5zXJCjw0itVgttxLxsq5to7kK7CU
ATLJtloZjkCYjoCIh3UuhziLA62sC8sryvThrSsNju56Vo6ORXQg4JTbiFOw+95yGJ7w6sZbcOR1
+xjb8RtwxVpL7Xb2cq+zYDrxpDRNoZPUqCgSylGKKo2ZUETYrRxfITz+IVltWrdUUtIuhp+mA82k
++BPYF2BrtLN/PvHg8QydKi1XOydVatnaQWbXn10q86zGWJ+PizT05noiAkBN2ttwHIWN0RoYtXa
O3qxatE82WZ3l/H8fDiNxBWqjNZIzpSrs3MVz69GUZ2jOXMaKJee1lXeCLI0I42ILxUebtBRSu0W
m/PwpofieCIXZUqVJL0736RSuRVF2AGW3jpngtyp0Rc6gFgqrJtQRjha9emk+S1mo76ot6QW2yta
mbA4GYYFJikxBoNKdkiXQGqKts4PCRlepxs2D9AfBrEvGKPkGS6nlDFk1lk+vk/vRlxPh+9oEVjA
P/omL4MiHjy+5iNh/w++0lW+WxkeNOXmt7GBCuemFJ57q0t0XkE6FaknMiXdwf3+/4dpxBtqUVSU
H9sHHJtyTH2YDGptHeF1NKqD0EAOpqX1b8w5eiHbsdDPmxFBr20sCuSmz0/j13E4/zFO/0d3rZWg
Aevc6L3ylrmybeIT6Bw8WqMiqpVkPbjzwgDCrOw1z+/4987MmijzSaWBgMaoFGk/BUvUkzKuwQ3d
g2Au+YqlXbfzw14QZRulfplM3ShfiokdfkmVO9lKh+d+dr+G68JwRPVwdQKd8XRXlHcv5XHWz79O
YMSMrtfe9HLxvHfK/HhvZYyGVVt+Qvt+kaX/pCQ2ipyFrivY8Wqlw6sVZerv7Iq0twogMNhjlEwk
Y1LnzRhSnH5WTDVBWdD32Bd5GLUp1YpH+qR4XBs+b38Bn+sncxN/MM+NsqxCXFan/GIj7SZpZi9r
Kn0c/XIvb0+j/HQlJX93GnvKa8tijgwbcQtvDw6r3J1KCnMv4w3fFZKzX+Z3K+U7Qhq9GG1x+iGp
nnlCzJvU62q+Hz6Ub0vNGEybqU0nwdWmy/N0mW7jT2vfpPg1D6S6U4sZ8YNCBBhaxbK+8iATXu8o
T1sj9hJHrq8jIXuV6r6iyuSqklz5ongsBlKqh80H5bYQCuNQ96cP+s/NvziGmmv8+pfFJoJQBXyW
fOfwIpyH9/g1KvoQuWZFDqfiTFVbfO/i1ycLMuehHvvmx+ect7FHF+fMHpZ9s26is0a3x9UJoM+w
GIdPmVopwnRgrD/942+2ZgFHzZUxeune0y6ez+OLWZcRxKdJC/2WeSMNgqw0H9xD9MvUTayC273V
qt7wc1sYAi1+hmVUZK2U7igOQfiXB+mIj8UQDn0wFOyznRAginHcuJtfMstxc2DrZitHxSFD3oSj
92eVR6xVX/dZ2WHRnqaL/DUBaDVSk0kwg82OJCSPBykim9EqIrdpol2pZ1Io05BQwyQm0L7lbbwi
+RCMsoMSnw6qktQcEQlp6nGbJbV9duG+MPqX6QJBuKNxMIcLUP+aqcaHDMAXvedFwgXaLKmiYTKx
ViI4o1o5o1JK5XENrUecy7yXNhIHSNUqkg7IY1ZJ7L3JlRvThYPlsube+aww45td5mBnG2Vjqh3S
D7PSBL+TcDnCw6ZsSStZyDYyqApm0VeSbNDmneZxSbrhRVdHX651EYmLWhSSFR0cQqUcQiGBGrQX
5vfYH5n4tq4Qwj2qPgwSBvkumujODW9iKaS4JaTdp1pCNgSbr0hvnknbYldFvtTOVYlZLR8UWgs3
75f9stkXkdBGoHeUQ88k19zrGsBAqdqljClOZhnueR2Z+x2+jsErq2mZMvqCKPXZdDsr6X5J5qSy
kaWEWKOfvys5gbJod9jW2tPJM8Bl8MvB1mkGUiEpaEqhJZ79Sszc0H7ZkKky80oQXnsNdt6pNvq4
wa4jWkfb+yY2e0l6NeemfgwexYZRzPYyuhzJ1tROVNpZwV/T7tNG75XcCXj6F4jGzjPqwzQtExGF
EIDOp4+4Q1ZZ4sum3MlaWkKg+JXDyPOoX2dki8gRlamLJWCoU401/DrEmlORMZ1HfaZYxEFZRxe9
I+fx8nLTzJYstoEbOdJc0VwawwNSEkcY1sUUNiC0kpvaj/59hyjt+rfA1f82Hib8P1EZr9iTUVAz
Xqs7I+MdHetEvBCjYtq488o4MiBYaYB1teNGB+UABWRnSYx7GgGb4ECqygb4cQH5ZLtaREaNz46V
zyFbirsqkdm9TctC3adf7jC/JT4/KXsfP53LcTzHF8sCUPa0+09sYnyOfvWsM4g+yfhgzBwD/VPk
+nC3GfpuvyvyyP1yvP7u/qt3Jj7BaruJnT7B6c389fD2vhyG01dYfHxof3Pg3CtdxB1ty3lSD6cN
i8H6nZOND8iFCBtC1OqQ1HQlPlwT1vzXNt49vozUaZW1TI6/sJmYL//3fbjcCMazNm6OvznFtp6B
jMD3I3g5sDLFwWLxwqLBrS5YM0I1I9L3km92mt/wv76YfXwfbkB2D8h9aMAS64UDJDINo21CdHxt
k8YTsMj/MCzjj+bJusDLo9A1NYyxJ4eAbJ65FlDzsrCnQGXWaapaIi9dPozf+p1YOLWFdAIf23lY
bj9Ga1LouybgfgINRykqIoW/YvEDvDhmLEUWskqShXG4nj8Ow3E6lYeuUb4WwxVJrFaRtZI1fppv
AHRRPvOCC+qzsjky9adYwBBkpuo2wl4pn/rLhiA9p6awphvpzQ/fhvNpfNPmnIsV5yDux+H9RjA8
sAgQvK/5UEXWSJv9NpwBYmOuPvHsa2ctQslu8883FSpd5JV0c3lnCrIu4bkHlof7eUiogk4qLyIG
utdxUdeweTqsvB7foMbSqNLD+H0AT0MbogzBSy7zSBVClsLcGN4eEWo74kX7MhoXgJGsM1IhKLg+
Ii9avPoIv2/EfsA4jVSbZ/NxHrSxsyFpmzomKKB5m8DFd4jK6FhrDKwOaV2pw6q5nTeHl5mfn2PV
Szgp1tkPsPpNxyINOCGqN1Bm0ofdclvvVgEjJLTwma43itov8WF4R1Afjw1B6gxfSn/hGLfjy2t7
qe+0r0Vx6Hu9K21Zyv2S19mYXbe8VgkB6lpptwg+awdRzmozidYzib0OJzMNrWIJRsibPt7a2ArP
tgc0xRcSVUA0eCbtkcW4YlJ7fvZgQ+AcBXuRYuEKuAvH7v3FY+qZ9s2Ondo91lAT3d6aDfF8P++4
/VUm9Rm2KKDxG8gnbmV8hFxsQW5TBitA/mV4h7ES7HS055WkUxiUaHqHni4B6jQxx27TTbl5jJMc
vioXuZaElKRgjTGgFOBDcvwIUc/xeWV+Xux5czcPQh/K0bWN1D2YFQ+YrYayOtgf12/vPF/TN6pm
d7LF/GC+UTGWxsXeL9TNip6ppXlCWt5eT8Biub4dt9s10Qa4LLnO2NL22qhleutZ692Hm73/Eq92
YW1DRzknYbRceSdLoRNfEWuyzvFvpAFX7hRL05VIZeKArBc4fyNwWq+wOYCBg1b2ypwKaU52l11h
0x4lWpRlqOjqBzrRQrEwSmklvEE3A04usagCHXklPlSiwdUrBhfT2/Xq7s/vxmcxNoGt/Z4ve8CP
dI+rcIVtVIGaiwZiNRxfR0V9NtIqocoWAcjwtHrQZ1qUVi/CyQEv1qMt4++f5XJOmXqNpOIt7BVr
POLr63pZLs1tNROYwEy0esXJpiKZohKgNmzvWOH1elUvSVZLm21f3bXUSdchJXsFGO6AKXLj3BjP
+kW1VJgbABZ9u+fVjONV6NUsg2bXAQt9WsGWRbi3DbPCnUD7i5vYomLz1pGtVLVt0zZ1fFOqTvKN
SA2ax/8K1MG32/x2MBv9TVGFuaie16VctZn30hSO5prcVq573XpZS8dD+ZD1lqJJ2SpQDXMrBqlX
Niqdxt3pTazhuVBNbGDgtnCAOz1BLYHmlNX1TrcHuAl4Sw9biaYYKJWoBe5Pt+s4WuvkC14fxSYp
JAG1Zty6OipfA4NAt1e525FQK3RKv83zm6JgRAFaGV8YBmNTrqdUQdE8e2nViHGHhhvTcAR1c1R8
ZNYijlXgyLKdK7LtNwyr4Lk1h+pcEVzx+SXBXewFT2q7khkFjIfBlj/vcwdF6yTUl3td+6KUfLIH
zrz1pisMmqSBou81yIyRyTm9RTmPEzA75/7y22Ts5IMxguNGV86DFSzTTVzr7E3T/bgidBxKyZv/
rAuwFn6Fr4PVfHcsy0qZ/6Wu2laGDPIIlOvEY0Nhx0XrTLwqW5ylBdCZEbsFsZJ8v1W/oORomEGy
QxpZGz67md2YMxofhsVbWKjjeB2tyYhtGvRwyco7EY4hieGrIoa5eEjuIrRFqZg0bRduRtr81e3p
oElnyK+5NoSzNCKJaNRKRbLxFFYBomEUnByJjPhY+cDRg1udNB6rSvI/RY9IcYNK+YHXm53QK1mJ
lrC1L1gMJVG2TA+mKMW+dBC4N8KhlYu1kWbXs/TydVgO7/fbjxA1+tNwG5Qzz6TTCmwnVfxW5E6o
Pa1VGlqPv8W58uglb8MEQqNFIqEeDS5IMi+R8whEHSDLmetipOj0gdmBQZEEdkOIsOcxXUKKCM0e
r+EU065Tg6X/A4O76CrpaG18Iy2peVcqgQPLFrEjHrxWB2zeVzBamQsGUEG+zELRv60UdaWwmNEr
99NsNcuixJJqKVnlq5cSysSfGqhf26QkjEdrD0gV2jFFuLNBQCYViRFND24SfcYSaqSNjYn358NG
mZj5Gq9Q2ZS2P3vxHnvaLyc5NJf4LLqNw7Dtu3PQ37dKbIrNrBnn5kXZOsiaaaX3yKUO6OiS2R8e
mvfBCUcp4Gy8z6qkRnruvL581W5GLwauZX+wU/zBNnzym9DEaoq2U0ysWtKpF2OpYtTGnY+5aIil
sF6QMb5sYEnB8tGuF5LuiIS0E2GXQow70Jt3gfSyH+SqePJ5sxmH6wEIqGAwVHWkV5RVmM9cpWjj
bGqhzEzypau2rcq6UoJ9XK3jP8IaME+sYkGXyevRbw7qIcNmZPl6ewVWJpTLFyApwqac5m8soQKt
dlFWy9PAWPD/UBlymo93IoJNiVZfS28lGoVEMEauwWk8q0ZdJfkYFs6Bq7Jh032SscJeag97QfDU
BNb77fX+9pTIkaylD5tsneP0hEw162a9a5VFLof9tAC1ZlUUG61RuFiYeV4OjB1RiyKWrfS0BBAY
lVKQUvobQFDxGE2gMKIvu1UCCqF96byxgKhoITvfcfPtiJa1hWTA0HGivWFDnCkHJq8lE5M4OPHV
Uiw4DvJpQ9q8x8hjpjw1vWT0OB4pehJWIwPTOKyxkaJNxaSQDdVK+VeLclGsxkbyHLdJ5l3Z5Ux8
dNzrWje9FsmrJO2+XjRzaUewOVTcC8uIMMUc3BMgjt6Vna5qSdlxJW8OLgZSJA3eSkflqC9ZsGx9
ApPOV96LNsj2sNTSSzqqUrpp3BnUtrmWo4lEyGfVyMt5uh2VsGIjRoWMMQKdja8rAydsC1YeIYjY
nODPqyKOl36RvZmp4bSmaktFGlvR/9FZfMnyyiS52aDmUrtTtHHZUVRXLllaD0GXQ6l4IZmc+cZX
btUupL0+46tvFLL1sSZ4n/2NQlYPDJgo7ylPF2xDrehmpZ+ZShxCVvGNouFrSdvQTPS8sZzx8NH4
r4pgFlLQ0okX4RJU+WxFXC87BRSRaL0xabZKyiMZ8Xh8d/ZC3vpeAkxZrY/5AEu4kEiK92KY2OVX
k1ZS3olqn1tJmxdWsWZayeCylc3zO6k2tu+AwlOuUCeDDYarcVmep9H49Up9Fw3RKtCt1RY5X/eg
OMTsaADu3YUiqgpJZUlhXsWNEGOdpGfJNQcyGcdwG7QbVH0mObW4SsKu7FLJQRrZFi1DvonCkkgv
ShePxe1QvkUm5slcB3AqKVqDhBoiomCpQJhUmQmuEQ/fsXih4iB1Ui4wiu8vFWHqQoB/uz0x+Lez
iiHtCkk7GuvD8nRS8bniPpSd5D64Zx/QrTZmirjWhLVfchACatq1JJPGI9E57XjzmK/9GIOdLisC
JRUXzqXlJUCJynOeN7VabeAnuP2rdKKCJ2Wrda7Gj0SUDL20VOOnGGIsKcCUC2UZbOp8h2fU9JIW
YM1YbFQopQoCMAgWyGV7sh7KxERrQMmqKlaVmPp4jKOrYNySv7+5kMNg6QJFSos4zHkJw+mKldbv
kUyyUBRfqZfsEVd5gsD7hBIoGFSQcVjI5mqlmKuyBuDRttN1gAZa5zHGOUi+YyXBZWLpnMu8khyn
EB0lz9TWWyiiUd70rCgOUBYPUDq1EWf9oMeyjqN2oG7OG2zKTRDPPEwCUsBUWYrfiqqg4mzBVrue
99hqtZR4eRu+sNKnC1Lu6dGVpo7bISwb+GX8eJqH6yldI8GsiXbNej8qjIT90InldP6cfjYa9acU
gIdH6zx4P5J7SWQCi0Kc0XDiJm1qPmL+xmv441kDFJRFkUwmmruuuWMisg8LGz8TS2+K+PNy+zab
nVwWN1R6V8pGhFmRskH252+vIMvjeFqSMeJKzChGamt2BNQK0U7wD+mDXCv6Q3yUYxmzwxa/qaTC
eikX4Q1kV3iVehpbERvm0lzLAfox3ub3JZ1KK3LJaFCrNJN1ujkH0uUS2hEr6NKovjYXsV0xz0TB
2LOIE/hQbVgzsbeillVvMUPARzTLTsteN3Gb6H9ae1zWYs7swdROg+6LZoMVeQhPrZyFivKsRQzE
03K8X8GQ9YNd5h1gCF6mhjJaJqKXufJYycWZ2NzksLzfr9N8XzXiqy6don0a+vPp+9dINfEbqfgf
OGFlLYodqWy0C6fzdPtQbo4oWSweN+M9hHxKCkHaZdHyfRJRReFlQclTvn6JrbRBmdjSV62uXnad
gzZGSZXUiEX1jyF+JYDOi8NZvi8axNmN6W6jpS4PbkqtuClViIUsIo8fdqFQdICIH5Vno4SUarES
W4ydIaZfUSN5YO0WgSMoG5rKS5BJJj0FO0MQ3aDGqPMuYWdaqmLdyS2Lx6wRDMOR7/jd03X+ArDT
0zgbY+H99bC8DRBjGOKkV0WzpcthGW+za8beGGwkfYk3sC0aRsYFF6AisRovL+dpeQU/SmVYbRiP
4cqxiW8jtQFfDgMRND3BUzCYacUXVPMmJKw5JAWDADZjW4zHZyO3M2Aj2HASoJDml/myaca1HP59
n65flD3nbXa8NWuF9TRdrXS4y6hOlrXDWLtRsWeT+bLKlm0ILfkz5aJo1BgaV6aIgcgzja92UAL7
fp3fhxcrWWCNKiSXDSOBaj2VrDamMpbQe4hnBnfsVpMXsRamId7tPL4AE4ROodqUldyemVUsLofH
ZkWJHlZNUTx2COU5KF/cNGrQUhyrLiQOOmnbzldl26Qu6f8a3gej7keiYQ70tLJlmXR9YlsG8xxP
L4rKaIpMaqbkrt9f5us/Z6WVvBF7kUccs4bGeNGUb/+Zw0f1kFpK/nju5GVMv4FoMp0FcqTpUZHX
3hhiRnA+jAt/S1y1vH5siMQU076zrvtS6g5gnwVFRDhjOMy+ark9SMQsu24751DjVD36/VQOSGwp
4+8BPZWW5J8e9OdZEz7eRwrBgkXQwRMzYcvOtXbSZq+fBmlVs2S1sWVT5xL5XHAAO+97Vsa6q+BW
necXUj7js3ZHeR+RFhM8ikRoiiyTOpPutw4UoW1Cwv6CyfqaKVI+L8THV7AFlNXVvdh3xlly5uVI
WHJtwnZaLTrncqgBJ1pYG+5L7qzoZ7crenCOzr8SO30ghPaaNG+lVgxuT55uqT0R2g9uFIi9Wm/G
OaRu1LZCNx7OobvPjQfUTjzCRw4KSh7mhr5reraV+gRoBVl0F3g7qRL71DuwUojjgUl4KVBGrCQz
wUYsx6/jmW6q9m51UutwtBeZab3LWMwk/s3NyaEK+vS5SeTXKIPsksayRbTKRmokxDNXn7LwSumR
c4rVKjTbayaaGqG7yttP9f41WmcGj9nh69vt++F+mW4LCMVhfFOmxg8Bgypt4kCTHkXd9wmDdufD
xPvHlOs4IezcJqWgD5h6og3jyGba35KHTYk20k0lNsIJAx+fkYiilRhbI13B9z2bTbzN+NZIUcdp
pX2ysSZHnJjqbt+w9iBMzWwCKOY66rYXI8rFitI29dopF0e3vWyVBg6nSAFvUIuSXVKsyLFuL+N1
MmL5G/SXAFvkuzRUzXh3qzIQAFfZTKG5y3xAzPb/io2S2YAAjMKU8fe38+vt9u6I1RkROjWmgzox
VoAVHd6lM3CS/gJS84rx9OPlNv/JFXHFw6sYfLRBBhzJa0DI21/M91dQzMPZzHb94/sAWxDlLK9Z
u3IcFJzovHa5kn8dD0+TMQhHYyOeDpcYZoeK6vwifQMaTLNdRsUcIwb/PlxWYXm3aVPu18koBaPx
LueP2Bh53/mtWSNM5ot5OB3m90h1Y816FOOPe5GG/3w4n8Fyc9n2wREqIdUAotrQoos0/kbJskGJ
zcrABzgwopPD+XaNTzDPpTGO5/lC9+Pw2yFOfoBZXhs5gxFYMx6zpR82g+mSyNEgEJVM1uFlqxxV
vpOQkxfjKJqJDqt+FJb14+nt3Xglf4eV6Q06cKg252vrt3uDAmAsMrVLEG1SuQ7kNX9Z5W0T/6bw
6gfqIjtHi3P753V6Q5L//wP3Ma4abEwHt9Tb+y/HQ57HhaqoJIGA/xw5UqcncFhuHzHSdRLMTFjt
y3j7M1WRLn/8+GV4+TuoT7QY8d+QWz4W5sVRS3aRfTTmP37521//gVB3O7ptLLFeLWjmbZTEC/6f
WIahqLYkRI41cAXS08XUyhbMIBtSaavraIDEp4XyqTHtbjNsuvL9I5QgeD0pWvo0XAnCYszGxEUq
HJ5vIz/rVTIjTu/q7SmkK239PLo2q0gtRhTmL/f3tft7lOIDZYHdcXZatnHX+/kO4QLA6yxoFcMe
KPLq6uhCFWZMO2NEWeVjzgCvgFYHjZeWTQz54Kw+XRZXX2i2L75jJbM4YPfydu0YcqC+t6v1oui/
Ljy2fL0nzhLAz+xm4aOzYG8cKhq8KA1y8qwtJKN4lYkhHpDPsyYXglgQGBrP9ALGP+2yxxQPTPR0
MF+/eTQVahFlBt1jQPZuHEWjHGKM17Tq5vHnKRvkC+6Vr1v+deu0oTMh7bN/G1+MmtJ3v5HmARvo
dwD2cVHm0j/uwHp6YMuYC2iMogvZespMpHCQPxHlw/4xOn+bbmbmL+oJVI97OBzhEfyz3sEqz+pe
EDtQ7FRsOeNajfCPqYHaUgqGeH34Ph7N3UxpHNoFHoprcHC2JDcVlMvD/YIT1Vo8m0V2Uk8b2lhd
tIUcBcql8UYXfJ8poGAxYOYqlq2yrlqahrvje4W0kxTF67D8BQ/Mz07NK5rJCPeObouubFpBSzCr
j1LbGMlWfjtT9SQ9UZqAlFIIbyMeuBPKIDWLEzQr2t0q/qcPVDZGvL5c5m8Xy9yTvgT546ZuRgQf
9qSM8NjPy71xzA1W7IrO2yWItLDKB9pOQBut03AbUt5G1XMfwVuSf0ScXGBJWtqxmPFFG11J2VNU
ofjfp96XensJbV8r493CrA6Xp+U9bgz1rWBu43GivOILSZFL+FfN0zb2i+TxgPUyv6GfHMF9kfXS
SwEEC15aYVXGsEPaFHCe4jaZ61CBYZN+rQS8DU9kh5/G5wH++/gAJbNePS4QgpDMkQGjCpyO79EN
4UZsxskrrr4C2baQwC3GLUcjNgLmJteMjeqJaYxNfP24oeMP6ep4iyo89kzyKU9IjmMc78txnJ+V
O1QJJq8RU3v/l6eP2/AConIxmg4LMOAPy/tw1By/qgj3vF4v1h+M8PBrhbDGaYFOEPYdxvv7frum
tHqdb2wg9xN/MR4D/wmsGHFV0OPt2whuj1XA8hoqbDlCOwOmeE72s8NSk5mAoFAENihjlH6MDA8n
W91oBD1aBY6yPJ4055TGK9bx/FEPyzIfJ2yu7k7NXXO8Imt/wsPzMEU6h+LoNoMFo6/KcB0RmvBO
Fz0QSXPM/Zp5fzv74p1GfLyGNdyFrWbjZ01jZn5MT9nyuYXnysI7dkx+X09GaA56d0f6vOX75poR
nph6ofo0d3ESj5IzjTeh3OvNOe+gFCC69zYvN4tHXhRPsHCkwZvQs3U7bK3cf5k9gxIofWptGNHx
0swCLRCkgNJlTPQoqyykqDpc4B8v7/cbv8GwOr+b8YOwqAE8R291TjDcYfcYmSS+dgwqYVTaA9EQ
RShORWwIejAU/VHm8ZEw22o+GJW7WDL9w0C3uBUYv3/StI3FZpIGXE+Ift1mP+LeIY5QtOEIfP4E
MxnOCmSgYuFPHIPzTcMYBGmOu900gFdrICC2c+bp/n6ejnAITglfokY0DVOHgmH9gdcRWw1Y2lZK
J87KphaSCkevAswIWJQbMt7VigaqJGEn/yQYSBnCi4d//MNJJASs2Nw4fjg2nkGvpVLTTbLGVlPh
P9amri61czAaUDF+c8k+Y2rJ3Lu3d6OZYs2ZKT7fxfI0bKTTCPptUApKKPrdCXaZfxO8HQXPftQ5
x2k1raTAwR5HyvXr3Zidz/fLMd78GI29qpUigmYaC4LB5+vNRidP4MMNRzO3ZdaSRlK8lGINeGA2
AvIBj+j0gsAXcwa3j5RJ6/g1ArfM52uPpxgjeM0a7Iaz+tM//vbn78cRrUB6U6BHCFQvHJVgeiYS
ga5ReEvSEf2+7MXWkH+GkPc6G+XrRqKs+Qn80D1fixw8//3P4fa65+vugUcLPidCdp9EA7lBkYkN
VrNnbOMQshuFAcMfwT/9Og3xwCEKcSZ4ps6/vQ6QOL+OzyN0QRyZEzYqCW8ebfevlCTHhSKy7WO2
EYyZ/zDOMrdlYMAfL/C3pWLv+idrje/6DxVLNm8fTfhXcNfRwSL/9NXsD+l3ZRym16ugXyVNoVae
hFybu+J+5J1k7ODsU7P1TzNFUDY/WimzzTYbhm/OQg5EluUKTKIR1MzfXQGSsa1f8I6o6HCsO81E
yjoLnVts5kn5vJQotKflz/++D+e/z3F6RfPphh7Ovd7TDeLXhPJQvvbqCcNoub2K1zdS0/j+x3U1
jSEqSBvUYR4TPRsuU6+MV0kNJdY5xT/MM6l61LwasIM/kQZBva38diFxgrjzPzyd71fl4y6suK6c
9SPgd4DjRHs+86wKHch6Y3ocB8wgXiAS99XYMIUS95KRK8f5jWzm+baGBP6cyIn24o0JjRgyP36C
f1W8LDJm/Gi1C0CbwX4xQjKmcBh9zfLGuCy7ruF6HT7WDI6zgBbg2b6fjYH+YkSJIqlxM6tjaWSf
o8JgwoWqszDnHX+RzAgyGsf8tpHI1WHxB/ovCpvFj7EvRIzQv4avA6Xvsb58OavB8kx8J6l/UfLw
mQ0QRNp/gXzWT/M3/kaS1P8wKsmZlSI8wFAC/8WifMOSKZZ7xXKcnTEsg5kPe7sUmEAnBVwdC79P
7ahYDToUwZRZ6+m/joihftcLacji9fcd8zsdp7S0E1PcgiaTkXFvt8no39vw9n6Y1GgBjsKgTRhr
cEwwGH4liDJxapNhhWKjWI2Fox3AVVVrC4X//ttff3aewPXw/e3sX4n4fapqIWz1i7EPVpPM3XBQ
aK/DVxYqiocEeh4rYoUUJE7/9Tqfx1+00EbPIhMsPKOwC9BXj3aShqdJRPREYd44vOaojq/RvDNF
8/wwqFvpsIirn4MQNR8+Z4gV/0D8DEbrz6/jSIf1cgyzLUblK4YKbZgY0jMD4Qgw8uHbFTonXWUF
SoP4AAW7Y2YQfLdWzhg7kDYbH3SBoEfpTB6L9KVVvU/KVJiRzyGS6wi4ovnbxWah4lPJKyl645BX
hETHwdjbvLbK0UP2vRz6M/t1Go/n4Uo2kR0KhldmyW6Jz5E9bNih0LaskW7qy3HfDJhLw2awWi7Y
gy3qtNLv51IoNXpk8c7oNFoZnlsv7UihfF9LuxF+r3zdSb6h30svN8qOFlJCB+NgXuqePqI5ahqk
VjeVHS36IkB04+55fHGFNKa7Enjcv+s2NLLORhQyM+Si95WyLwKi+TJbA852zYP6SLTIToRUTFYO
5FLkYnQRIkxJYuAO3xVoNXOOWwFFlkn5ZMsdvVYULQn7vHDkiGtevIgZE/jv9sXVl9n6x4W63GzQ
yH/8+BGbNS/mNo+XoxLYLVkY1bckOQ7vN5oTbdUZx1GKIvKu3ST6Oud0/gjUkW+OcYTwJ3ioqw+I
zvV9odIQDZTSM8gkdikurKO+GZD52tdoyVHPYINIFlkKQ/0CkVFtEAbr4mm6YM0Qrr/cYvF1HKV+
BCDRRDjE1Sb+wZQGszM+WiG4E7z8Rt/jSqpkF2aTmES5WRILBI3Xvyu6YTVygtIUTAZhjcPTCPYX
tYhclc3bCCVUL0o2pIkiiKevAYoDyvv2IZwaEeFEqWjK9WB6Uut5QrqwkHwerJ8ZgjIqoxOHNTmi
3MVWgqycx8sLoHv9ng1Y56fkREop9hJ6dUFpjqIESyn04itX4CAUw35T9VGxqLZzVhekrDebDn4K
Am/jVXDMh2JGg1FW/wRA+tXmeA5fB+OcKa7CmmEPIgF/MBtsq/K2zyHR3ZGExPVSLsEsKX5jMSEu
asL6vUSHY/BVVmZvn3ofyolPJ3ssc6foAtYaHqxYIWd5fBKdoOAIhTidMFECG0V7pKK0ewYXB+dx
ZQRznW5wDLRiaatwXHMSiVElPDVfZWJ57UPFMHrl13H8r+H8ZSR5uF2NM35doI57jObayBlvQpyA
LUA1Vw6YDuG+/HVYbj/A/H5KDVWFDqPrFXG+IYF1rOUKfStCLkAS36ncjIZRBvAWKJM9vw/Ll0g3
44pVjmxQAeHXBwAOKUO0kgnsNvJnCo+te/mzPp1a8gL9GR+O9ytcqr+rfiqHwVhFGDE70IX6U8Lk
XZ3T0Ep1lvKviA3/FatataomIUe9BvvJBLT2qgvi69Z9XpTCpNCG96GYhVKlGlCQsAd5WH5UumLj
xcfOfEJ9BZkeRjUzTIXGrYRO+9/j7GoE8KvTtJhH5mJmDTVc+LoPZ6wGjWfbOV8k1h+af1oWzult
BPcNGRcO3walo1VRcVJenxA7zvP1NF0GCIlhs/pnsHUTUT6als8pwdUonbcN1KInIG14m8zTh7iQ
y0QVa77CwRZ2a8PzHlH4D9eeHV8vZZ2ZlOA3V+sCnIw3MMFnpdCxFlvv+g5xN637mPm8klpqPu4G
0TPjkWmbXIvtefxikrux7YHX8U3cJzi1mIy0sqecQyn98tvwfXq7vx2GFwVfwjtZVCsH8YqKvc2o
QlwQXysblVnBBSE1Y8/f4nymZiTepRFTY13kaO2F3re5jBGccVUcbajGSZ1i5uEorIUPc+ITkl6J
ovqooZQReFEtvmOkUFOayB8vGL2ly5Cbu3mZ7y+vidJz+ukuZHPtHkTERaLSMuIVBohLWdk3a7eq
Yo1dUVwd5HA9/hXuN530polmMiJsIapVlYEYUgkfJPsirVs0JtFOVSF2jh4vKtGy2Y9C6iz5zSKp
z/MypnaBsSyX9cqaIjyen9gQ3lmRE1Gt2TxlOpXUbDd+89NamXER+8oz95wbK2RWJlNIuJjLTB2f
484FbQLrapKtLLzuvinEBSQP7Fj6FTKMIv5Pp6rul+nfd2UGvNutn35cI3/abuD9iwrfsesTkrJt
1FMknp9CmU0u0VdbAzgcBULUqLH3lH/QPDupHUFcLFOWTya9ld7W+MwONtKy7ep2PYvlw1xsWfIf
nGn6958t/CmZ6C6KvBGyuVhRteIS1lLeFfagl0hy9gdG/ebwbayaB+u3jHl9QwhO3DnJWejOa1ur
NpFLJZEdqMVYXbhMOxyWsqdWWEnw1JdjhK6d1tAKiAJS1e49ZtVSOjtQlosTwJDFtFCEdY3Q6Ln4
Ag2UKoS5NB6BhBEIm2GELIwWockLRhHN9rluAbPY0a4eoIX7cJ3mSL6RxtmwB6rjlMo4EiHiJoyF
C1uI3MRVdcYHrCWmsXWvfU5k/RElamg2vhSSCFh2C42lT2ubMjUnRxNrpHjmOjEck2Ldix7bptE6
aTQM1f0dI3UQlwZWEYJQ62NVEmHgOjPKk5qXwykIZbdE8vBwjZ4KS5lRL1EPxmekSSpj5mYZj4ik
5nGkGadV9DnyYMch0p26fxvG5y62QypbSMG4GdmjEIxCwfuETMoBW4BBUITLkmrFwRSE26wfE1UO
F/k8fXc8TSwfmYxJ5bze2Md+jQY3D9INOHNSWDyj6jpJB0OK5a/T5QtPdiGUfr7EjQyUAMZCuWL7
7Jf4xD2NzwAlRVsW/kIZSeYRhioHcLlckjI+QF2oUymUn24ElhjbfyZRTEnfiyxBfAM53sOqR2Md
fsfcuRMoZfxKeBDMYb+YhxgakoCK/DhAPzz8TeoQbn9YgzLQton05MnR8XTTg4vwVTxI85/O9+tR
Y1ejxUuvobq3674iv9OnNrqUZJDL8/a3kiN20u6yEZVPRc5aO4/jDDgCS7S2KBOoN50KnPd0OWEr
Mb+c43y/aOPkEks4HOLZuD7AKoWkcVoVOY1TP2wxXrfhNmi1gX29wbWUriPa6OlDKSsH8EuV6S3P
+xhvAySIt9wN9Ia55lTxGpuuCABjzscJX6CVRFTR8iLCmHBPP1gP9aSg4+O5/05KbQOIYIbG6zOI
A7ipqZT9Ch/DpJBZatuEBYMKqLzd+ACVlFBymCK6YqcJatJCNKzu6RSFxIVivXQaIcFsV7hGTg/M
MK70+ReFhdVIay7BIwJQtwLjlrxbkM6/GUEPKD/Mn/cguLtSom4A7hTGDpyEl/edSHgDUS6gooA0
pbGt36YLJZ6+YjL7HeDvag0sL2gmbrAs4OT4hIT3jBoIwmqNwg6shOCpCqSQ6Dct+sOY2dbxhur1
u1Yk0wkOtDUgV7dZdSIIBiQwAvt9MRO5HAfwmqMUAVTkVClUsZ/YZjk3auzQvQhPlpgGmbSUVmud
TEBINZ7Ptn9XwhTDQFNfhJFYi/McrmDCHKdTeWhqNLWv70oKod+0Xq8Y0O2HIRFl7ysp7naczz+/
D9pnpdTO8Brr2EPf9HIPPHRTrvGGd+bLLkgCOkYmvk/Njn0SuxqPb+8fB9aplzrb+K4k2KVdGbSN
9zjeS7ZAxYa5ONAf59OkFnxmD+HiqBa5zKm3KCtTddzrDSQXPjFe2YR6qd2g5ax/qaiSXrICkPn3
fkvRixd5LIhYKHE/EV+5BmhJpyrWmljmiUTIyEvAtQWwTdlip+WWK1mLXsoA2TaUSHmlGQg0RBf2
1bTmHueZ3SGoZBPz0A46kCx0BeU2hIfTfN9WapCGdivghcx7RXyBKtdY3gh4PnLgyfexZrAd5nt8
NrytEU6n58SJw3JQYY5mgE7qbfGVAiWv9H90Zh9aT771PlnZ9f+ZRsXCrfvHa2tNsPG6scEY6jJB
8FWVUokWDcFbRsVHqNkIVW77PaxjAAr87f6mWIJVL9EMBYtQPu4kmFu4A1EiaxqhEmiBaADXdjLK
8UXrz6IDIAxc+Wmx5AVk2v6+zmNLv86q4+o1z0vf244mR9cSkqiSlLHygJWIrwSKd4yfeDkiutRI
e6xAgIx7dir+7tNIQIAOS0wQWFXZVqqKh5UpKykecIsPYkEsCeifp+6IiMsMR7NtnSHkYCnGUgv0
qFm42U0uDPo2XL/c35UxaqmM0O4ztan9OCSKNLtqU2MXO/Yruk1moefx6xAr06Hj7x+mRexnkGQf
LuN8X84fP40vCxgc4+kXcNf+Ml3Hf0TfJKLsLMPCg9YHioen8RxEiuEvMO19nZVSdtZklxU6Exsm
DqF82ol5BqSsT33aig0303YCxeCybfDx/075vJap0Fy69+F6U7l0eOlChp1u7UO52kavqi2Y1xIz
8G8zOPaWhhbi7tEAIQFdmT1YYzRsDVb8x+32/hNv2TNoBfaOSM8VjFnZDivZsdpJ6U6w6unASYVo
53D7G5i3PxsX8KhEXnKhQGh1LH+Yz5vIHuKC0bW4L9Q270yNj5U4XxZc4bJ0cb6LJTpcNcqUtOZZ
logZOtCzJFO851IKX2LBx/xhA1TAaTecpvnwhBTPKaKQJhdA2YyTTqMIylhciL2KzCXRoglF1op9
pzZX7IZdPEbhwin3q3oMLbWrPN1vaw0xXlZLfqVIVv7IdwInpTg+tRDII4VnS5PG03TTGQfyXHKe
VqZrxVEUqmjDu2jL/QrlRkvRq6fzcPlyWNm6NTLp8nEKiFQBHUnAwaePw5/+8Telo5TXBjVup9P9
YQextY2KFtRbK8KFbj+MBsIVw60U4kr9gUhh66Ng5/FlOH5QwENReaypGYPeA5PSXjkxe10JsjYd
QSmBjkuJd5E1lSRoNsx5mt8gxZMCLPntZWhElA8PS7BoFZ/v1nrSNeVj9cnmuC62WY2yslxKm9t6
ci/HcV5hgT3fV45f5oMr66QMha1T1/lIGEkUk0T3LbKbXsfrXQmL9JWQoGANBTCNc51OWulrzzJh
Iak6pHuppjjVA6gPMyWOW/14aJUXbJMeabZNJ07AiTAdFY4GqtzNpNAQKGUlHFXU0qUN+J2suzKf
728Xpbwqtnmb3kUH20Jd2cJGismZxw/tngnME7i+g0p8ah7iIqyk7XzvF5TQ5Xo8fDM+mJGt+wV5
StdLoGvOosizSLODjbyC+fGsCG0R6TCnVn13YssHhoGE1kS2Z62x7I+j1gyUqtokjrYNp9Bh+DpM
5yT/LUsUgQptLNHNBCWrWIquWF2CqXsZvk4vGBc+zvOXafwzofN3RJqLRlJzngB6Oi0Mqal5f0bj
VWIOekGKuOvtP8wDrtQM1oLW/sd1EogebMJ39v+j0qWNGAzlxm/W33GWN2K6j0Yy4e28KqyoDrS5
8XO9eof+stPlpLemqMVcIZYXo4F5m2cjkr99KHnCXmoeh7Y3KkSIDRijCZu92ER24jEua0nHMoI+
gvkp1l/VS4a5t+v/WzH+iqwT2XB56zTrqij3oxaI41at6rOBSk9bIW/q+8yswBH3xsVX0wtToV4C
+J+/z8vtb5ZgmrQhZnjj4Dks+G1rIZi5FoG6qoHlOL8rVcNdHYT/bPTNyDx2yqaXDJ0pZR6tVE29
ItU3QHqdgbti1o3HGxAFzd+wPPL0w88/A/XlQnOzlPJrawtCNn2Pz7YR6bxezvPTcEYEujHbVbAw
jdKEBewlXzMcp+MLR65MZa2cixj8wvXR/cUepK05VlldK2ZIbaLLdkqUmvVB6sP3V+VE+14q7efF
AuY9Watw6O+180wOZ0kjsGzpqqzS7FcmRUDdxjsKaiJRgn3TyLGMMVdwSXNNFmkwJwTW+qFicsiP
HsdTlB+/Yr2GkNzZnGkTnISNGoEPi3pYr26kWXphYzbCt/Hpy3T7Yb5A19J/ztPl9p8YzP5r3Hip
GA4nVBtc4Mbbjy4aqZRvVazV84blzNX2bWDFKfqvvpUazDikzL5+gbhfvLUIKKe87R8kLmpoVqzW
BO9SsQbWAom1EEjj1yrDsCvZrm25AkFQTp3Rm3s0EjgDoAfjNMsVo+7dpAqdMiCriRy8UbcNSaBz
oQXGH4frj5fn2UY66JJoLPIV63oWqHbcT5fsVvZz7TC9sn4U4UuDLXF3XVAvaSDBXRV7YhJp74qZ
4ZbKPbjrPMz0DlF9ZVar1ewuZiZotgn7YKwkEorwZFJWL1RBKudtxeD+suLGCNwpeakLLjp04H/l
HBirgbDK423+md4818vZBtdP4/N0Gf+33pq65kQDrJvPyGr6SGJx/vFx2loqynXaiEj61hFpgv9a
Dhy/4dah/EYnkSIoO0K/A6MrG9BKG/A4KOYa//GszK761EDb49JnyTuI+wjWfmFI7EEVbmyfGF0Z
qZNGwiwr3GrjekZbk9L3xf9oE3fKfB/+SJn4kc+MzVutP77K4j1YUmLfP9D479oTZcR83y4/SJOy
p/XnDm6X0JeS0Duzwo1o//ypQ2r3CcBGkeyUrkYaPJSAYM4bPbhOI94HEn+ny6Qd3+7ORtZ27o9f
gn1aOUQ8jHtf7GIU46qXrMMFyCPvQWUTzhqQWTdIP2qNyhw55saJRtMI648QEzS/H4yF82S24Evs
gpGdlEk+Lrb9BDPt55XO9cAtwr+6uok9rO4cieKz9cZZuH78bGsc/uDAuxsfXZl3I1hA41IXB/LP
lU+bTHEeVoufaBLn26uzWBXbvVRcG8HRnC8IKFGMqTLEzgUD2lRfWMCiGLCx0M+VTFYbWR+/j8c7
9RBVaG8qlkMQWc4Pa1BJt/VasTcR2Fn363gIeCZtnDrBZkSS1kszI94IjXaKPvZTAmM29MAoKjq8
jJb6SnNceuZ65FuPMLI0ZbRMomF00kq683idFwt1VVrAkzh0gjg4jwrfueOsuFWNSJVv++3tQTY6
AAhWYwCZjG3ncpkvH2/zfTkY3biC+CBArykWrwgZHRQmFWmX8Qo7oUqq6i4Mitm+1rd5OLxfXs4a
+7qMJIxEcZb7U0qhMK5/Fp+DWOHBBQtT94tFJTwEjsIsZjYnppbu16/TV3AWj8reVGGPhU4L3iiy
LDqJqHKBuujgGqla4LSyvEJ6Vl2BYbwJIS0mLJ90AY+HGJmiAf06wPdrW96nJIqeoJlLIbVYxHq9
l3tfxUYkS3X7koynr+WEG0nGBBMzfZSb0Dz2y1vvAYr/3neLNyN40Hth2PxFC5o3oTIuIkEXRWiF
FMPb/Nt0Pg+2w3q0ExmdiRcWsNy6etdTl9RWmRLC//6xL/jJOqfUa+cUYYtd2h3r80/j+E65CmXX
+yCaacvFrKLgNrSyQFGUIzkK5b3LpDYz27j95bNh+0pKLbDI+GVOR+vzvhMt0X+e7y+HSbulrMKA
EQ86N+sIzFv7BCB7FG0/CqS5d6QcGJkwe2oeUzaKtGyg6sXDCLf5Xfm8FvX5Y1wVmFB07dzXj+or
Zk+kjNFabPkJntUf59PH/9yryqSOL06wYWoL+TG2eyu0oFQEupAk0eqj8XR4iC0r+q6XnJedSVll
2LgfA/+pub94j1cFChlt5eZxi431K4wqv11aj5kFBZgGuh+ovH0bw9aSLZ6h2PZ+oTiG4oDw4q+g
8JJCAz4/AN4eheZTz01XSpd8uM1PB7CQlbnUEvv6dk/Qp9K3JFff8S2mNpWoWtvrba6n7jyQyKqG
MrPc+9WJnK/vxpfxxN1xkk+yEcsH0ycEbK1wkh1YLdbpHCOoNoTqSDJd5acCGCokyKC9sH8xm4TG
MhQQmYv3FUtAv07jtyhbTc08gZWy0F4V6ialAFEIqyuzUxEuI2ldIMqmqiXM0Ot8nX6D9jBn+/5B
VRs12Tuc5nGBqsPpCpqG/mdl/DbstVgnmiMpzIhlJXGMDJfj65pUUA5PxFqv8LpXxMfPb2/zRSls
q5kLGACcdvSPKhSGFrZHjME66F9LpsNPOgFaL9UOzMbjGS4MZGneQaskFGy7R3FhO6YqcWy1cmyN
VDtD5G6MYIZAboMGe67KGOAekPI78PZSbUWA1lTuqVDbMT8/26IzRNlb/l4gMLuc7OIUblCRGsgF
Ia1RFNGwBOytpesAZlXQQAk8VoDGDnejjxDdiMX2tnaQ1F68q1LXCVRgOCYS2QLIyqX1nofzEi8w
d3C+sKkLjkQctEoCjL4vhO/XQlvsPA18EdR6Wil0zzuJHDJYkmvH41Zm/16ZWytwroU7b/vrRAPK
tNt1ODcXDB7MZUFCq3/fp+sXhbmN8Toye2ltxmT5JrBmffpN5+N0pY5rqyI+FkVj1C4+ZoBGYlPz
WFDCok5qqRytqn4kC1zex/PZPP0R25Ym4MtfmXeIjaCwGgqi4XhAab5BTt/Jy2HdySiTZ5y53u+W
5M081tr96QUZe4qUu9Mv5zukUjF6SCSbR4KKYAxlxtkjOyRWRqiKIpfZW/E3neAldUUlDcHuUUSv
0rYVotgum7owaPcFzKbzaQR4jNUVyrD9426IKsLyd65AdOVsitgBgyildinPMokokS7463idbrsE
M88r+Zg3g6ROvYw9D9v98Y3AlJ0pJT7nxBGez3bKypZ1EluldJlTr6FInJx4rJX19tJw+oKVsxAF
I/qe7Z2jRExKFE9/OP1rgLoRfBYQwa+9cY3EyhzOztrjUFK3Q8W10qu7Dmjti3iRDB1oLsgvsP4v
50F7WAq/16xpN/L+6Leujd0XlLy0iix3G3aJd0lg8t190yAHmCAmyh5Ph1e1uPChTp/XthqZn5Vl
MzNkxVSq4ppSqhn6O3ROg/Kcvw3vEFvFP/+ITOoqB0BXFhJjtR4DpErzXPBk6H2DKp9vr9MtQS3Z
daEzRRrDsayxejG3we7tRdbKOEdX5lGEDDzwg1GKt59gl9c4Cf3E499DmAH5NMBGU6IL2NY25OBa
C3GoakYro8WvRSr1p2GZjvFvmsfH7hWwSssnAj84UPdgXYcFucoWF1I3sbXMi6r8bePbKN8xjeRB
hazpsh/pFapqFUK2rNNnQi0YLbImPkxeyP3mhtPHEr2P1E4nC6StWAk2KVtClbdaswZaxob+sAqw
IKf5bZgu64MHTTqXPa2f8s3mtOHmUL/cF21780rqohPZ3sOwfFyOymC5BMq1d+UHsqkABjWfTz9E
YwK06YU00kb+LLHfLjHMRVxzqH72KR+xLZqvWob2m1Cler8u+tF56CNCcxrW4dinL4DHzNVzYQss
ZcsqScIpeevrMxMtr/JWbr+1tttJHFsuNvJzv34do61k6NfLENNcSHtCZ7ZY4U4SOhZiq7bg4P/+
844G8nT4/tAw+dBLh6/1W6dl1lLfJdImmKazNUwJie6l86ZdwWFWwVHNU9qkWrputEm8ldPebSof
OpBZZq9tYb9iO7QirfnjEFrAikZqlH65ZpDhpBh12WOB8LT8+d/34YwcSAQlIVfgD2qIh2hjZZIK
jnO2TSVdNlgh+WARfQ/74A2F7Wcwt6iN0Gei6cuKA1+HSeEraQuJuNY8OfZiPn1ciEUl0YKIEjnC
bjOGYZZFWRaN0DbvpHPbMMzAwN+G62kBB+F2HVMNhIgaKOR+4q/IjsbNQvMYck7/SPGY6/j8Q4JM
kcQokzY90int1Yx6eL/fko3ERD6dZ7O0+1Xh/ncg1w3VwqYHXKA4tGRhkW/ao3UMe0Dh1JWTb7qo
rUqIL8HPDv9/vWWe+wH/NX5oWf94aOfxBWkbiAAmmYbJC4muANm8zZ4g59lszstofAx1PN1fDkVX
VEq+q+8kH5E4osEiekOCwOElTn2QN1Iib8uedPiujMAm4YNy72fjcR+B0OJ/fY9xUNbCLwMQFHrS
/A9zwUUtNolwt+J+nQ7QwXZ4fiY2vacPowcW2qs4j0/Gz895wphcTLBMrbBpTCsaCdqQwXw1YjRf
f74/KZgCiY4oLGCN1UvRM9EIu/2fP/31k8lalhhntWGPWBCjo+8YOjVyPLrqoJMCeegzkYMI8uSg
xnZ3UzADBVvdekY9qpWYjb/wzY9HPClv6uPGuliwTqq8AMD2/ko06Mp7TtvC2BA9EcwNQCYaBTdp
M4H4xCfMlz9+/ADxGYgN4edZVitlXbXkEWV5Ff+E90DwQdssL5RPCvFXslyZWC7VtWV5qfyKWFxs
niblV8Qa3yzrlU96yT3Jskb5pAmXb9eSKZvcVeInuXKUrLEFV3r3t3fXhlP5tpG+zTLlTLtCPKBM
OaCulAIVWdYqn4gNIxAVaIVbE4h+W1iY2PaG9YfwelaVU97Rgou2dhse4zV0uLn0WtInuXxNs/gX
2UN4dFWFrInjdBrf3udbFHtNQeBCeD2wScP9ZmxKjgKBMWb8W8/nDfGL8avqn7eN1LPhcbA4EICG
8TsLgWvbakEcZjrFmN9oJPFYH0da2zho5Bo0Yi3pDWrURCBp8zp9MSOdtZtasbp/1m79YWLKAH14
1WvfA9ODwMgwBRCYJWFXbJtOMk0wuuw4LA7ZASxlQjEpLnovWFhEVJmCQZMxK+ZMHMLRSDrwU38o
IEf/0MObX5Vb60YjjM07RiXKYky2+d0Bn/M4n27PGkKzcBBcsh+XH6F7LL9lexxzYkivH9ofJzjO
FcrlIkZpLlIPK1ZkLyIkGe0r+LDn6UuKf4kMPqEJzzawt7P5uLHQBA5LotVjSTw0z5avLzKxngT9
AwT5zSyOMpSMJk9xYbJdxLTp4t+acepsrgaj8TZX9Zlq9iFkcP67RhiatRJlp63lWQupbKWsQtbK
myH62OW6PZiaxkDm2kIwwXTeirhdpwAwa6noj4LxNIKS7HKe7MR6PMrMnOb7E58VOKWKVqukDCp2
G/TM5OkOwWsRZbjr8J4vkNL8yez12mZ9/RtUwdPlnto+Mn5KydYKxxvfnkbjyTlcvdXwypj+YWeo
7HBM6Ji6YBY2Gs6jsXrJvg/HMtcyPgBP/3VBr3S2YUb3jA5UaykyzL89GY3yRZlaJdnPm6mZezUq
k/MmHuLzpdURttLdkEWZTycl9DYrxSDj3nMswq55RWrrtMnVkhsQjmUeOC0f27BMHtRUlpJcxRPs
NA2/4QwQEw4RL16jWZQhV04tnhlKEkbjlMm0D46owK/O4BYKr7qocDz/Nm+BpiRMeon6WyzX+Ib9
G6arBl0ihS9S6iPzyXwJ3IglJIGN9utgZKSY/uicl2NjmCrHeJGzx9r3I8Hk0n9BbukPkNdxEf0f
l58UE59UfScZNrC+n3E6wQppguYwmGlxv4zf3ykmubKDxI27lkH7eKKdOA+wAbfy8aNliI8vJg2G
k5nKl8v87XKImnI0ik8crXFxhAeEjPlKG7dSwHTS1pzG44wZUOoETkk2V1K3XBVgbdtKG+NEApgz
tK87hsAu0PcreAfBPQfjF8V4LWhf5ovvuqdsi9QV/gRlpbs3VsTE0xA759BK4EzKbtsGGi8XM8qJ
Mt7KhkroYZpJ4sumlyB///nTX/+QBtK3uYSgxbsBvN87NqAV8dlWjPCSYFRDQZC2vTQHDqPBy68M
wE7RP5X0JcEvjacOxFv8rxLHWsQFY8386HSfNE73iNe3umfv/lYiLJzmcB13XLQuExG6uBcp0ao3
musxh0tuo5LJrR5dtDUehEaA8lSE7RyKTCrKAusTnDtro+mZW9ZHofPkrWj3Y4ZhnxNV5LxXDGN0
QmORwkLkgN6m548U7JTlzHCVLG+lthvr802Huo1rCMZGuqmTmNz82dUCESzUmDDD+zL+Mv+3qw4b
tSxYgW9CLcE5Xyy+9A835cvmoVwkTAXezf7+4UVtXl8ICVdbmqqjIepabKgiu+2KEVfJLWEapStL
JuW9gnYBt+FFEYemebxprlOCv3BGIifHqag2QMyZXPas8GaCONshFrsn0IWA7zZOAn15PA9v7woK
oZAOIAyesS7rK1iCMvoYojlPR7VLXxuiN5pUjbVyzF3Q8M/aUFjW94vWRTpvQqBVHm0mY2wwBVZQ
ij1pGJ7EUkxOlwl4Nsz/BXSLWlFdFHkthcHixcZK8Kosw4aIhRXKF/j0uvK6JbEpOSuAZnP6M8aq
fyIikaMDcQ3GPj9/8PZacTDfY/t2RPJwd/+/LJeDHjvMy0S6+Zfh5e+EvbWRw8Mb8I6Y0ymUrhsM
k8Mhmd5PTfWHEluHkxKH1poE6x+H61GLi2YhKUK16YvNXTVbLoeGnxLNR0VfC+j9r8ZOm/ko8XeC
9cj2FrNVeM9nWFxgYuncXjhixevJUG9b1uXp8mXfnKpacEksTpGgRruGYT1bGTvJ4xYrmyMVJNnN
oT3+7ObUJXuW0RK1NWP7l1UVj44wfW4JI/eNUj36O3Rj932eScWI20UkAEs0Uh4XQBrw03ucbQRw
DUwBmo/ODTiA0MP93NBlJ5XVOaYMM4Q9gk/fGV4QlmMNXURYXU87Zfl11Fvyfdo+t6GFoiNs08JP
rlcq/H6fAtmLq7xKUHnBrfydp1szL7EufQ/j2O3aJd6lIjGoEj89y1y4eqSq96nFfqvUXOjwP64B
vuJKHUfNEwmsVuMeSoEiD4MIDQ3+N+sQ/uPJOB1fx6stxQNY20lDMVcMmL8hhxowNQQu6/ys2OAV
KwvcdJY/jefJzOUj+XUfklyVa7IdkZxrgy03njJSFzJ/kQngvWU3EvQiXVEfept71ivEu+K0yw5m
HqeiYv2J8EJmwefo7kSxXDQA6wdjFtQVmwGG63A0FxHRufFBPNcdXsCGDwJxO8qpnowTPj8/K+PU
Ev+sjWHuIyZdUxEbukG3ooQ1TNMopI5g2MvzukZGtO8biWHPdSbeJfA962vDaxixhPmC+TMohD67
wh9lOzKJ3X2V2Ot4NDPZxbTa9a1E+UrFyY5fKn2FOLGbL/iKCcsBi9UntUMSZ/v0YrN+eHg5psjm
eCsyLzO2IcJpflN+uwsJeYtwe9dlkVuu7EojNQ2wvTF37y2nfm+3e7uHtrLj/eIgpp83NtHlNFua
NrXjDRCyxy6ta4JyDRAq08lDIumGM8avB+xCnzs2aEN3WIu3ASBFMfAXTauTyG8fT33ftaolTufb
8GX8CaejaZr+oeUjhQjfxhO4xW/DO4aGqKGWEiaUwnQAO/npf//x/+i8c6XYsXgtJQIAvY0VpskQ
WeEB5ukrsVOpErTMpOgI5PAstbGDcrquTvPh2cwviRsrikxEoWHQgSoXjAnIS40vY0gjdxqPZ8fB
kmrXGmtlPRynk8JDyLr+FvCCFdkDJBHlAnCJVN/wNN6+ARWxDhGp2ZNI6++902vTnGuTCvVxJXhw
Ju0kni4V0xlzFU/HIgMP13lWAogcHpgzoCyDhemtl9tSHQDCzRgtVOLNQmbHHBe5HM4I1IKDfkeg
9UlTuBEqJcwmVnPFcBu0odHkYc007eYeW67VL+OHxqdMWEYfTmZV7iT+y+s4oslygoJO11zwcL+Y
C3GCtsy6E0E1YJ0U5KXFTmdwFjVaQlaM5LEHHqU5YJt2YulTYL9514jFq7gaTOKZWxo4RcpNKMJ8
Vy7BYxdwzW1I/zQ9E1O0j/Yva5xfORcR6OxIIi07JCZAwcZ40zKRRV73Yon1YzWykq3rpAuHvKQk
v+hS71aYedfW0j76w0UdQG71uLLGHKJ+FR1zL7GDYsrOmi1/3/EelWJe4v06w6WifATtG7YyxBY2
VMzLFGk869GKVXCuMtkc5PQ8AeunbvXRmyNefrien81QFHUegzX90VyyMDoxPgclhct8/up4x82f
3hFTN+uqAcmeWHQLswOZNccsmQE6+SqGjUYpRfg7IrIwzxsgsvBvbAJ4PCHoHstw86Kvirixx2jS
+QUirPA6Y+wwigEANcFcsUztxha181sFHh79ZOPprqmkXrObtf4j4T93nGHe18mJO3aZ/4DZaPpT
IlLCmxtVm9khlBTGcFt3IqQhBzWkGhZ1rdgDGZuBUe8b7IKT5C7veGsBfwcgdPE0f7c7QKVOyhid
NAYtZ+GM6ghRo1aAVFCrbKDQwdW1fbGCgqzqcAONiqTuKa4BXupwSrEXtXDmTsqVsZrQ67MNGx11
/C1VJEwb2ApxNZIGJOBLLCeT+hOvshbnUawYl4R+j3A3lBl04SZYuDCY8FaqFUlmfQ15EOxRehxV
vTKPfNvJLyDvxdh5HF+cS8DgIKLn36eDipgtMo6Y9bu64ei4OJY7hXBbdEFCw8vdh73FQB0r/Pbi
5gAQB0+fp2AhamlaSvUVJq2pYtJYSrdDrjzwvXAMWDn1Dl7K8mr8c2MxmDFPZgfmlyTzx2auj8b4
2gNh2gVIK0uJW8JIxvvfzSwBHw/7+HfVOi0KMRYB+0MM05iHj4uqNAUjFf9xu73/NP77DmR6+5s7
kgHYyLVPEQSJ4vBxNoBuTWFQxZMFaFguKaVqsnB5t0BKT0BngrFt/D/wAtj35M3IHvrgy/090S8i
F3GAnjPlD+e3eblBy9qjxsfQPbrSoGB+gcqKn+mGcysMSO+UYF/+kDRiUZv/WZSm6CVd9P3tfLB7
STj0sB2gXAZoxLYOu1E0oVc1uqT04nkjNDikzLuh0Zcp9Dp5z70Yv1Q4ln9e5xfzXy+balP8u1WD
vg3XWOwRsUedSHP4MAwENJRBRGaKdRDu3cYHYVXwOVyU3Da/XIcBKBzx7oZtkZR5lSGwKg8HRBlU
vt7w8/WP01lbDSijsEI2CNLkVbfqxXWsRMk07U8eluc18kmh/0YXSq8hrBg7Bit9mLD+9WpeOggV
rcNrxApVl0kMGNGRCmWkXKCBeFhjOHJqmSJfhrxvxwSZFw3YhautQvJhIr1SApbdYywsbCsH1Yex
rCJ5+Z3Y9MaYcr+exuH0q5mKElzhgQuEypSrbWvDWrkSNquFN/W72cc//fnvP/75T4d/DV8HG4/+
Ohh7To9HF42AkGZDQAsX4v1xzQgVuG8vBaI2MH2H4xnPzwo8v5Ga+SCfpsPPvQ1KPofxF+ITQMfz
w88//wzX8k/mmRuItg6/5p1OdKQ80P+1AnSHUnGce+FDIUXFUUR2c0g5gdFwx6QCNeCJmfI4Sil2
VIB66R0fi0Vtx0AZhpHhOCcir05htSUUPQeeNjAe2dDK9hYxYnG0xELLM1Xj3kho3CNktDH+acZ5
HsHBULJKPZMk/EctEBgCdWSh1L40XOFsGIfxpDBBsKw9dzQsb9/Wj6NhZNYG5sAQBma89Rc04tG6
biVSp+s20rs4JPQwxSx+HK6qpMLs5X4lPsqV5OR5xm4MR8U0pOlxAhaULFdYNiCHNDZAnEixHJUi
77quRTZrXKcckdYGy8PB2u2cnmC1MB6bnDJcJXEAGz/pj3aYH3CUn9RBGJkxo/OxCArc9++3+3DW
WeFopEyiDnAiYZ79Bbb675otWVespt7XJKFDdB1xWcP1A5nll4PC/pS3kl1DU9kB7K9LUbqdOP7g
pFGhrGqy+AymBVfw4+WnaCk3bUYfH4MO6OQwLptCHWVlpWRUsRtLumQFm+gmVV2I1GE0xZN5u2+M
oGjFeZAyToxcNpJ/YxdP8hBvZ04jFNL2idcDmNv9n5b95P+0CWWc8Vy6Qi7vDyFZsyBFjLvwsIKi
LEixr4VZic2sNxwKVURbA6eoyg9SV41IPG9vFrSov60nroyShwRbTQAEUna6k7ggZPWgXM68kaSW
Qm8HK7wrdgxIhZILKsQuDmkRuF/Azzdnif0RzBM+XG8KwVmd95KoPSgmbKVGr4nZkMM77oiirHLp
ppR50ynsifmG7r1QJMFeeWSWRVFVdHfZS8wlD7IKPENXXVqqUuJTIeJczGxBfZ6ugutO0kKhtlCk
wssZdk4OcowY9fXgBDVdS3NppOc+fA6mi6xmv8e3u5Io8gM9qz/ZpWjUYE63N++DIkC1JHUI1zo8
WH7KMJXEkblR6I70WDmrWjppuv8nqxTGyyl1lYo8bgRtH8TtpVD2uBaiKzuvmnI/xE4dj6/C+A5u
Ly7/hx2mfC3JgxUoDB7HS/5psZmknfMyyzJFCgrN4sMt+iH9LBXRbQ4N2B0dY+pK8ZDG7+/DRVHz
pVc7EGhp+CuLCJWP9L2oM8mlojF8s84t7ippSRSKWRYQUip3pH+4sQqr/h5C/ULCanmMDNm0FIK+
zDuagzdiH20b5XMhKexMp1TxF5nP7uApONAbnJ8lo76cbFsjgFa9spoaANmmYL9CPPIHIvPe04+i
fah/tVktqHz588Wcgt6iIXcdLRC66Duywn9uVsFyy+ZtOr5GSb6o20MlsVZtctSrtasaijReIyVf
CI80X//wzx/xK8e/RGkJpXCslrt9YsONTagrXryXi1RS+FC2ZYRzmz5knW9BHEurqScAVCy39wFQ
qpgoxGjkUSHHKHqJ64bzV+8eqQm6tRWehPN5gq7ZeJspOGrEXdnbShoHNvWX4eW/le0sKon3h+2J
8pu5FMK09/qnGHCafjVSB7tMLwcnXouRrwM0kVNmX/oQLHlndWcL2Mdv5zFVHkhDNGIg1uzcj39K
H18uhoDxY+WrItbo1F+FPX27C9bw8jM86jQJVt3OSRxvLt8+nliadrrY127WqpuLMA4dbOXeC5HJ
nE8Wz5HoX5i7Zh2b7+1FUD4rxWaxTDWkJl5moV6yPE2+s9AitBYivLJCbZJLufktvl8BbuRhUmit
D+iVoHsRQukL36Jcpe0psn7DkttzheCbWWKk1vWx1MDajKYaQomlZRmYrsvtTFxASHp5HM/nJKuw
BEFa6XYpsqCk6TKJYPLhhV6l1FPXK/ZR4TC/YTLRb/QBV3qgpSq7nkkywjvIQPPBBQytdOuYVuge
FIGMu3a1YZmughjP5c5bZrnTMSgZsVEJRawLCazGdg6z2RewLLHCQ9s9odcRoEv+X+OHmRrHlnzB
v1EIzB9pDFcEkTGdzx4Ag58bi8kzdv53HMiIY7OGwuyVJspV28rTksgQhpDsuu+x0cT0JxB1wyGY
zZ+P06DT2fUiLQFNiMrbABzmGlW6KSpRFBq1k1hB1uZO4DErPJK9+HQ4AiG66woDIm+cW3sU2cfx
PGpfdZIpiD7c37V27HlXS48lLlF1seljka0xTSeR9xuqSdvKkcviAUse9cn3lWR4BMMoH9chr04Z
E79IbooGKUSzzYIR5/sNinGN0rM3T3kfaEObB69C6Ci5h/u8KB8TxO/n+4uxoBjYeEx7hkXO0CEB
7fP1DXHCAXh5b1aIyIQbWX/KwGiq31XbhhBCekMP1q2QBkj5X9W+layTIn93bOuIFIFikfNCSp85
sOjfZHlf1op1Q64hRry0z8hyI71qW5d7vnwdsb/uvl7JZB20kbLo9ZVcxfJfS6LXeyX1Rt+Au2/I
jT1KUO/r+G7ugYrJ4oV+GXBQmH92rAgTG7YcwuBUynx1PkoAj6JiGnPPjfVowVGzc04UCHolQcY3
5Y6xFpBGNSkMCgTAr4S+q4z2RxG9UorZRKJ4RjlOL0le1FokseRtrRXwlhizi6kG+gsIbL/hfinK
oRI7qTwAeRTFKgTq1kIQMvsuxuuPEvoTzD5/xHg7kuOTsi0MYs6aqm+ger7pybTM54Ryz8VDIucG
9po6Y6YID0XOgbCe/eqYGQ9rc8Fkw9YtO2fHDOw97ZCNXV0JfPVB93JCnM7n+9sl0nrTWJlCaxlc
xadKIcyDlwn6ry7atolfaQ4+8wES/ZFU5H/T1qZmTTk3RQAWHZmC11WFVG/ireXR+Nnv6Bgk+zxn
vVQqclpLMT7VerNnLhWkxJuSY3xJhrCeMY3zbSSc72QsOpQgt0sgVLDiP6WfeanfhNEh/7xObxhq
Q7qRPUwSLpq8jZKYhwlVQbQzGtWAtYqCtm7/MaGnK6mXWVhmoVRVCIQE9NbdZj3IUxSyIqcct3+y
1tp+zxplAyMa0UcrYZjhbKlQN6yBvh02Rdyvs0I21nICqZCfZTOMeeuRLN8IOwRMlJYeuVwS/Dhi
DPhEw2RSsa00zHB7jb6ytMZeIg8ThmLtWeLzEgnRLG7qOp53dD1pGb1Qx2/cw9Fp9bCtzE9lqcSN
dbaWrpOSWZSRSmlNdqQJqLltelIhHKGB2Nln+EZmVj8Jq0sKUrmtco1JJhEhKCOJ7HEvnxTJltEC
8gyF3aYFmJ30EuaWEeFx8tzHiSi8x7SiSuKii9z+xO14rGp/UNrAhIH9Le8aGXMjlEg4Zvv5Z3w0
FaIo4eP5QiV709uLEg8QOTdW4Z9OGt9LLniToXmAbjrww2uPcs7fLpZpXBz3yoFa9R2gOafyALV6
E+03fCqUl6J+7J2NFKTmg+0rYV1vhXW0fOQyPt3fz0DRP2Ld7g46TRqpeOgTsrJ4gH33UKs4vL0N
CKk6fyAxAFmBaBo7kdBIT6jeX9RpNNJ8ATJXhRKkbQXVk54acs2mZ1ZJ5HJuZrg85eNGUopsVcqn
vUQHwX+W1jF+R8/hhrFzZE11f0FCrPxCLTEvEtzLFeFiamO4afQGbaFMFPfYcgdhXUNi0Z1ElfCn
f/ztP3/6KxHmIpx1wo4mx3F+hmsGas/VlinFl6wBnbPEd7MWFErUJBPa6AIVDzQEW6Me4CKt0Ey8
jcmAXt5JwTNsUQtBGX4NKUoDWwvK8EXptlW0UsiZvl+ux8PwZLx+bPegNSPiqAnfTIBGQaF0LY2e
4iStNBCPgGP6gbOoQ9mXsbX3zqroBKZ6Guky3O7X4Zz2+2lWWXQgR5TpknI0ojJUKSY51vM67GCA
psU18YGG8y3u8NDXtcA1zkjHtrF34/C8Q1MJZUSBOx91ht7tbYvxCffjG4igMfRiDAz0y/1D3obZ
9ETvsm0fHL9judA+xVpBgL5bzjpfpsR4ITSVibOQrTQ1Dx1+aiVkJpLIfRufptP5AGkGq3Nmaozl
SQ+UOIVEYBp2UFRr00C/xd0NpAfjZ+8NcuStI4fll/n98H/dp+uXeNUrSyIzIKVvGrzLM8SBpDQt
jYMmtNKHHReTZVL2MOiYs8FATfGa1Tyr6seGFrQpfx2fFeI21jmCNfydTutxaFcpyzcp2M9XRtLB
tpJucr5MPKRROL+THUT+uwshaSq1VEbM9kOZSCetgkTion6ZFYIs7S++pF/3DwXcwareCKTy67nU
12++EOvaMea003blj3BW9xa5GLcXw8TlNFOpRLuAdn++vvl0orIRrSiTPK9l6VnJ0k1Hh4mbMIt0
PyS9o9wwfzCMlZU1kQVIhrbLfS9CCumn/0s1HzLWoYZh35jK1LRDz0EKvtbvJdBRaE/vYm+l02H6
xtcIhTo8Pp8NXPP/iTJMmmUhHTbT7iJ7s2VNXuuw/o3SHqe8wSX1Enj2QVofn4JUT6usEhp+ylcz
/WxSNtttPUry43Plclna5WRdZ3qu6X7fo5dnkjOCaWPHrotUUvERCrFprqX7XQhfqcMUSA0W0qtB
c4DdRYjmATCayhiZYGKjmlimExUeRfh3UI5KCTWGitOjb+Pf51kh/TzlX9c0xs5NzXrpmtJkMLKo
3bxGpPEw22Az7GCFotKJBehwN3LJuKKkKVzf6TRiwz5lO2qx0TVExckH/GqOJVaHQufZy6KeKvek
bfB6m6XaaQtjvDM070LUJ7JFtsfmbuKSjU+6F3JU4qjzlOl1EjyR1mUDR69X5fNcQlwG5/IaJyWl
BXWPfucnLBTWsw0Llcr4fkS5DmkpInoxqqCV2yY+ih4gp0drMxYX8J3wTpQGWq8L8KSqyqOUAh44
Ct5a5ctK+HL/s8T6+LF7cpre4PnwXEjAI+Sp7pW9LCW9sTGXki5mFUI7i4RVrEynDo+22WscKBsm
aaUo6CvG20NDtaEr3fBKB+gNAzmHQbkCWSfZgnqtYZ6V5UYzP65AQSx0AmKAMIDU0maF+xnRdbzL
EBh3cexDPGBPGLs27ITdh5AIIsBWcmq1EA+Cnohhnk+h4s+DnJIVPmIpRXhYEkbq+goG4F1IbUEy
KxEnJzSohDOCbJYN77lg+eH72xmgPvGROhEiYs0yIuO6GD/umEJQ5jJICJ6bP5z+ZQT9ckO0kAPP
/CVNWUOIof4xiUmZFeNlWNjQcoMaXKDLfj7P35TiHDbJCikFaZpGKM8ftkNkLHpNiKNHoBCWUV7P
Ngn4QlXZyC8OqF4tGF7UTRc+dA74YN2ob9NF+ZZ5nQwPDKVvZg/I2z1A0dFiLLm49eFZrvoNRshO
4n6JwFFpFmI5mzmVr9CA2u1H/HvOA8eS7sPzcJ3AHqcnRvl9OeL+/rVRFtwG4W0L/nHZEHNg5h27
PXfKALW09adx1V/Pk+3HEB+jkvIgFNNWPhJLKd1RKbvE3rh2VZiQnjsN15Muoy0LJjRrMPff91gD
MvpBsWjCioXyW6VseuoC3LSSDGnBB0+h0we9OrUgqOdScLvoqgTP2uXKJMMR6zzVXa976V6hXL3e
bu8p4eqlIu23YTrfZuU3O/Eupu8wM9cbqKAMvjvc4TEyT8jh63LQN7hhhfO+DGU6XQajurX7WEkT
MEqgUr5pYgejzC+T4/g4v1L5LS/WcBObll4NSF29IG3Ogp+9XIcT+o3+fzgYe+nLoDAe5XlINUPG
lkYinHFaXS8cywzKj/ro2jJVIN2/zVflxzmdnB8KaVIhkjyeyF/161GGEsnzKDV9gI25L8R3tmu0
3MMIOmbirdu6GDV7A9PzMDzfqCKDjfuzMZziY2eNRDE5G1seIobzZV/ZCS26kKhzFDkAz/t9UtZd
SRRaDweC2IY9+1hmDxTM4UauYatc2bBMENFPyHjWt+GqLBxtWIAz7TuVqCt70koUiuz3jVY9U8+b
4ToOCUYdV28QXc3xPL2TF2B2JdqUj4YSmcYBsk64LVvMauufxXFKRMpZAFMRKO5QnrM2/r3Na8L3
0m2Bz/M6/rlVb/jzXorD77F5uHD/lEXl66hFi1nkVppXp8yrCZaVS7tSKbtS+GX5MJo7FL4YWB+y
FS3KcvweM1W5WUyvLKb13/u6ss33pfK9387Vjdp8nSt70SclJFMmX7XJH2+UqVc7lp4pv96t3zeR
Xy+UX8/4191a/TtAoB0Z775GwFN07n7yeATS3SyUn28yvnXy3VSEuC7SB6dsfVVJd2Aze0Vu6j55
8Ipequvw1xt58w+/zfPbqKkSr6BQEkVNoCiSqkmtolDEr+6CE6Qfh+dGmbC/L31McykyU2Xpz5VD
K/u0Ps+U96AqU9uVKYqqChRVJ70lLrf8z/EKYSWC/MVS9LShTJfDw5I3lnAe2u5yXQ6Ru+EFkVmF
YrdVunm5WkX2tVBsoyJkZY2bE4oZUUgcltJ0KDivT6iUu8MoG6XsUy3sk2beKnvO+Gt73aTHHPlG
ZOJk+7RqbyOyQBy3EYfldiB6JiwLJE9JORNpttwOJxN8r3dUioy/VC2PH1zGFwrX2fQx/U8H9ovK
ffdqlpG4X+afcIwf5ivkMX8wcqgM0Qqm1ttwBTKKHbZeySxI1tfo0dSiZSkDdeyee3Lb7QC75lRI
Bhs6HfJmK0NVoX1uN/izozThJlnaH9b/dQ0nbLqLKBeUkY52K+JEuJirIC2KzIuExwygc8D6Y3DZ
2FyVyTFV5GO7ol6z0CTlgleSjoRtgjHAr355PQPg/DAtDhiv6KKUxjW68d93xAG8v5tTcCpP2zzO
Hc9A9vPTcrxD63D+JmD3JNt76lVlxM45wXGN/2hTr5WmhVl9BrpXDOu2VqFYzjj3Qpi/AOrVGE1j
znoKbTYUL9t6RspxdBJ1rngxFMIvGkokbNfDUMkAhMjbzKXlOoGixCc2FTNy+bBNOGP5+mLWdoAd
U2ShCxuRuepWM384pZfpGcbY8R5lvKVZTi8U40oHWeLiqj6VOWNdR2fL+Cy0QS8/uKP/YX7/UISn
k/TEuqw9W5OxpnhVjv+IPR17VWsm0qVjmGkTO1CefaZnIFOWW0p6yYRaXodTJPdJUsibKIAjUm4t
c0+0h1Hgp/uLsl/1Q18Jf/7zlQLaWYROHqysrO0lOpqsKp/i33S9RK6Tlb32Tchf0NsAeRH/ohb7
q2ZVrfxKv+kUa1dTVsrERCqovM3iP5NXYpbdfBP/pIzsmbIB3ab81y4mVz5ppDK4rI2ff85aJgc/
Uio/0gWsDTa6nTe9svo2OP3S7ddJ2eNSqhjOm25QfkYWmaxWpKyX1n8eoIsJ8LdOx/jPcQJ1qsYl
sc7rRhGeopFvnCKjfQgzsRte18pWFIVQrJUVuXJ52k7avfvl33djhj1P4C1hnGdR++qWvGLcO11Z
nikSVUu840Y+lM3ndDjl+gDnba19I/Kbx9J0JB9i7+ks65XVSKwzWaH8SCtWx5v1KwfMammZN2O2
Mv4Jp1th16MtFGnNcwFFltWd8iuZIHl5o+nGzVJaJ9/KUcq0NFlTKBOrJHohhFA4DvK1t40Ohyrz
Wuy+GUs/kyS1EneXec+OysVvJH2ed4ooldJeoj6zdgUUgysLq8RZ5poJUYjaSXl0CvmZ6jQ5rCR8
3HG+LxDboK6OA5FXWZibTmBOd4gbPwiSsWKUK5e1iZyJplkrsVU8eo6/Y9pSo80sawdlzrloF3Xq
jstKqa6VR5u1y2V702u2lFyfm1XKCXSyGq8qzTLMRSFVbJZCnlhTKRqmkR6LUMMsx/lduX/8pDxk
K28aRX2ypZlf7e0nmo4upDrqLFNMkHpjHNSS8rRB39Xld0z4tks3suEr0sN/g+mertXER2Kyy/JG
uYwSM07ettpb24pGcpMrolAK8rZVw8pjxarlg9dCeWC6TjSya82RCe9rEVWq58FR1O3QT5yPlEIJ
uV/+1wXA0Af8d6WujwaSum8bP1PZg1IS7FoRBwZsZr9RVdqrXEiaMfv/0favzZEkx5ko/IvQFvfL
R4qidGiHS+lwpLPvlzVYNVDdXSQaBVUBM9M02/9+MiLy4pkZ/ngOte/actSNhmdEePg9/GKAhRu7
ZBoBAWjVgXi9zqPgSznvUwmDfC5j4a+3O7iPrt1XqrrqLNTzfdA7z6dXZNL3agkGjw/5YqlrBiI2
s72+CsPaAML3HT5gIIUuY7UeNlNBx/fT87n1B2JnrjXE6i4hIK2iuqEDlQDIppBjpGkHqI029aW+
AVAiKnX9HGS2qz4bOPcMWIcRa8BDJ51l6TIagMQe76x11cv5y3sbUDP95Htp4nK+1/jvn0EzMrvq
y2bIjoBcir4fmEGaradBlEMBo9jVhUCrh030o2eYLqIfYMT3rJaB4MD5yIgW4o4Nlg6SED1XYxD6
AIt+36j7/nZ+uny5tERRoVrFTkkLW1fPo3hN6pvOwHQ0vZEzgwJEgSTbdYEtEH7JcFYJUctA3nVd
HwW0K2WVJUt34/mQ3pAjL1Z7sc2Xk7rGWx0cE4aD7OW6JrBDlkLsudb7+Nh/8TWTbb/daQyDagR0
v2kanybbDhmtvY7Bg5sInKRgum5iAPylfJ9uAdnulWaliW+nt3N7sKh/LFWel+fz7gcP94/Pb5df
zy+1rnsg19q9843rk2dWfYDb0+v4Vkc/2nowf7m84z6nJjrSfHGRBqtvNVsCFmzUT1na5bamSrj9
x6YRvHzyUfnWqg+srVTS+dYY0MafitZs8RX3n3q63J5ezvxHjD6A9NJVoGaWvFyf/vawVDK3x/SH
1/P5uXUz+XH9ABvO9OyhCoHeWjVf6O368uPrsAT38tQ+SNpY0iSALjLrDwE2KSKq5PD7b9U89UGI
fH0FN0y6RnvHfGjMYWkIhQPJ6uY8aZBbZHv3qhfW4MKbjTFoc2ySsbb61pIMUHYIeMMTNnMtCW7/
tdv568fL6TZdauI/lyjydL0K8XNMDKF9jx62GjC9yxhNi3G0w0zf9+l+2vAifpVAV4mVGHu7fnq/
lIyeZecP3ItG/SptZeqqDd7BxfSlWcaC79EW1OXiTefi68t2mQg+y2zIgYlev2b2OCiCNsR7KmS/
S8Kbtkun8V5hq2+nZzatqX1XHfjuTPtzSR68Jk/7YJN8DJY3NR7X3qQRRUB18zobLZlh98vf4Yk1
kRzl9DprvDsHJIc5IDlKvsfL+ddjAtwQEve1PFjxJF7S1gF102bLRexaRn4Dya23six2ifl+HlzU
13dRNtK25qy+m0430i7GVyT0m5daRPq9lkzGPaW3eyTEFSxjzzxdL69PtSfRSK5ncFJjDnxxz6+D
EB/22tLEgIzJW+majkpXhMpw4Ktvc8Y8EP50fEX9TxP+g0Y5ve/t5BrQeKj/WB4xa6e9h1tNpRy8
q4aXcfIM0ju1BndVNs4RbG+9+rN5OVnL1dVovfNcFLATJfXUoxUHvkX7GFRry/0jOz+KKFoeXoKs
2idpudoUYnMxYAFaUx8OLdA7z+xEvNyOEwFpOMe6AfLZDlMBaebAKoHecv8Yzdktzfl/ZLXDdOK2
DBX+IVweXo+04/CJ0X8HBMZBbJIuDouPs3eLX14ub3fkKu3cLn3EDgA2lHEHPOyeaQq+mcwBz6Q0
b21K44CSIxZGqGEFdcx4BCaVpzEPw/g7O5cYfJBO5GkOVEdIjzcs28vWbp3izr20zGGusKlZocuu
iq7tuUeT3QJUtjtytrfTcI+DBK1V6pBAAiE6WwNcht8W+I7zB+Iw7S8v168tRgTjYPqAJTsRgxRz
CWk9oQkaOQ+nD6bhSfsWwX9LiU5MUA1QFCH4kBkm2nN6802QI0q+a2vOduAdfXBEQvCtuqIrNNow
48H/AtKCIN4lJiYwURdyuo6Efj5f39+v3x/Oz8hQ1QRFqQan/QFZAyJJ2R8I1vQEIvimD1sfk6Ox
eY9CLMH69ZyqeNR5ALskw3lWjdFEfQW+mdyBuOEmLgdTnxs+9far4ej5AVHGnWfbwWoZ1HC+l8yF
sQT9PL4Xla6X9+tLGXcKppa07VNXVVUjsMOPp5cniQr08iHSv0i8L4CDRMNzjrEvNtoICLDgt1I/
HBeMyAwKBwTjlqzkAJU3B3TxTpiAfdIBgOxND6pu0aYAl+qA2bIEversVCDKHTUU6nWDuAuKvMeN
Sug9VzwNV/w+aORyEb9c7jP2gKbJB14u9uY4IG0TD9zFOqT57Xq7/L2wOQpqpgM0w5E4kpxHVO0+
zobku+7NtRQQCr5n6AsiFzqZJhiPuZiA99T2UcMdOS8yhfP2VdJ3tcTH7V4qsCWjk4x50wWVOppj
hgGQj95vadL1FdnBpwA6Ao+G7Tqvp/LHjDpA2ZRhkJejDoT+p0fNpmABy5GPJcfYfOz7FyAY+pZU
k1jHsXalKW/LECjztsqIAbA7tTAubehV9zaJ+l0Ydf0Po9x9/zZ8+9v15ZnFbVX6dGrJ/rlq+vLq
xXi7AIiukBhgcNtY1Wbby0SOX26XOu/lOzuCuX49kugrTZ5Zf739bXBMzvyrVS35VrTpfaw8wH5u
bEyB/fz6VTKjpHak9CJ2C+19O/FjEwa0ZhQq3qD19fr+cCryiR/QtwxNzLPj36OC8dQTLg34HgmJ
mjQyA7fDUaRw+rfdNR34tHO0Nx+cgjnjfl9A93Zjk+41ml1/d9LAR6go9Eb5AD79+Ss/KGJgT7tB
pMnyxaDt0eFsNQnUSRscP476k9pEWdFvvZ/ps9P+wIdoN+b9qwFzz0opQDn5iJRYnRhh0Cb3W773
WvuyjOTzfn1rYWpw30Ritud4dYAeESfGXqdpzIceYDMcURezRD99v74+TxSEzPb28bieK6ZY+btV
cUcEsV73Ju4hQv6MJe3Kq9FpDosh4eaT6fUUP0BVY6RLIiwiQGlhC1KWFmCTPLFVsanDYTkCrJEU
u+MWIbUCXqW94Rs3md+IVaw7Mn0c272YT9+vPsz97VSyp66/Dm7S7fV8uwOWpTJ/F3Ht7RrsMG0x
oA+gFAjoSBVI3trifTpC4okOVtN17qtoIDVCAixKu5DvXpBECS1ceTgi/uWT2+C3tJMPcxAwlBId
m6uOXjjSn9Q+MoLE34i8xkRgs2q7WXMYB0hFdzuz9zd8MG7evtubn4QRCwiAjirYpw0whgmSnR69
1G++N/z1fPuOeuk7Mu4UiCE5l7gdVqG8HHzTwBzJ5LP7qPuWGwHJ0Fkool2zd7DBl1dD7iQ+b2Gk
saX85fVSI+XjD99Od+AM0wmVvH4flxlRi8nd0dnHs1G/iWicX6WABnllWIaTjn3iVk3K207FwJL2
62eLdVNtUUO0b9h1lMV3vtEiQeAbS0C0mG6pt48R7eAjS8iteHo5dj7ycn79+v4NRJ70EnkqcfmR
7TenORCyaR9TuwBUvfNvp8FqubeoU2ll+v308nJ9updx8qWad5Aon//KTT4u/b4SacFPyiffz2U2
/Wt5CBM+kGk7tKX2aPwtAGbXfcbG2XnlReG15F2L+ybd8pbW+CVIcysc9fe//71MuTijjZvexr+f
v19vP+pYE/Hk3fZ/X64lVFZfCwcJ9/IMjkA7QxLhVuaqPJQpqsNZBuOnFNB9oD6EmQ6uIDWXp/qm
9f1yr3Wo5fGoXCv4DJkxUV9gx0jb2/lWIRuVDWRxb+Onzk/Fi7y8TwPvwZeXk5Yw1pi+sv3Sy/Ur
+MRy3zXRQM9bexgJdezf97AQP/haXDeWHCvGZvJp2D+/cmlW7SN6h/axee/L6en8XGG+n34dR2uO
ySvsDLNMKimrkzVyxKh033jA2G1kM4qW01cAuKnVDf+L7n9sznD98nD6fL++zEOKS+oNeg6vdX8q
9+pVB2w0wAPY2JR1J6mxlsm0p8bSxIWs+esdrOd6NbnfS2uNA8C9zgRvz7XrJt9DtCFKrzfdVM2g
oap7Ot8FfGtrH1K9089Xt/SCXZKo8CWazPRL5Ju6GDq+kNx7o0U6iahR0svbtxMgz+64yUFXTmW9
g+N+O5/+xuOEdgIyM3LnRp9tW409W31ww82ImLkWY54/XUcTtLen0mylDFGimdD8UYLrVcUXg21K
0ar9zc+f/3Z5f1jPvxHGKOYQegQ072ocYLing4WXGwJOtSn0l7YTHLUyaT131sqkxrfxbx80vcnG
aNPjFZXNluhA+b+CW2uS3S2ykrClMaoOwy8Akuw1gxmExFERn3vV0Etv3fIqvHTkBnRt1nQdJkl3
dB/d3hEKHNx1m3nMVEafBh+KzpvyR9uGJjHGn2hbwm0m9b7mx+Ger68/vl8/porH4UeVPYFc7PYU
mQVr7UVRZS3IFWhIJ6KNRhUXVjvXgUFaqWnfUqMBRXo0kLFe/8eYtYnk1ZzVaQbAw5fr04DF2i7h
wo8xr18g3YlK2GnsVVx3Qg5b58pzmabttAv31NmM4/zyNp6VCuBFOdUfT5fcfoeI48vX1+tN1mN0
rO/iKyxsi1Q7aZRaW9Pq7tlLud6Xy/kFUXjXIpqGkzZfox3wy+DDlebNgH91T9f/VkQuvLSgFCBR
9ZB4WJfuNSdQaT0pu0X5/Xy6PX2TkE5MwmVygShWgDTp9l0kZqIoemNPBTTsXV9frqdncAW+02tl
cRQrhpCF6NfTtdP/YSXbpE2vtVQjzDab/Pnh+aNKnSYuARV0uyWCTz3cS/TjjAgrQRt5NFP5QuV2
Qt9v+WuB9uy26pa123CjX8/Iy7I9FK2F+/n75zOgKdLFso4wTf8dW67hp9vUZrGykHlleqht0mnr
CgFF3e063b6yxjn4xmJV1//5rgz6/DEwwysQPxs7zbPKowyoBN9J69BA3Nh70Dft9QncbkFwUmlr
5DQrwUpZJXluuJgfpbkdYuaFKGoEyHa3UQqsr2Ab66P4tSVXfUHAuQO7pB5lrgkDEvdAF8s5yBsW
8QH//+Ft6fUo9P++u0WTbxZr+/+0u6W67tbG25lNEmR9DHjvWjzrbwFo25O/6+EvdR7b5I2z9UmN
mJfNlMd7xwuYGZXI99FOluIgFt3E+HLCsrsxa3vHGw/fL7++f9yQu9Tt0Tyap2+nQfuWnAkuLtr2
0msa2OT/qKgFDUJam5J0k3EPtanRw7e6iYef6/8BW3E9wQnGNwzqS/c681L7vMm9j9tLwwdYfZE3
bRDX1DANrN6dUXF6e3s5vx8VteqAwB806MfL5Y5cU9/byf/R2Bk4Q69N71h2UCJjv9xOtbq8THpj
x7Q29ddtFwj6uQ534PbN0FcMMLDmK3aYe10NKQnNnWAHsXO6D5gqFfJfv55v9wPeH+kvvCKrAI5k
OvgcN3SMqugcnCVC1+ZOzl0ESiyljARrP61ZVXDogaLtzRdFdMwOj72hIF0hXJuhFdF+u74A/4g0
9iQjO/8bHu7B2LDZYbah9suo3MZ3t/nvRyZVFdUU6KTDBbvvg+P8fP0F5RlUaDIme56PTDYx12J8
uzw/My3h2i5SZ4Tk+/Xr12rUL4cSdmPXI4Ptdj/Pl1v7E9jJ8o0abfPbb5QiFY7m2hc6864Hs2mx
mEpC6fw9/jumNwdYsIMaGjRFZh79yDojkSKzDdjDGLVqP4/3OqjT0sOWfAqHo9tpcuc0m93U3Cbu
Pb7tx+/GYK4/U5mO7a3VvpF7g6X3W2nHBN9ZBnsWohnTlyoqBhVQXZX2zcKEH59rGccd3JpbH20i
3hLE+C08oNbz0vuIBqcK6/nPkcJXCfdVJBrdY8NJ/mNYk9bTUse0pe/n58upPZb/18Nf7w/17w/n
X5/Ob+8P4E0irXwC0rWsfaA25364n2+XwWL8O58+7kmJ9FqXtO+UZva3y1sdtPFj8K5+fQDWY6QT
r1pOzeir16N9vD2fBv+qfhicq+umDl+oEzPLPL92NhBxipkq1oKb5SujAzo5e+AriY4jo/VC81fe
BpXIcmT7BLXASV/LzkYc+Irtv70MX3m71qQhHtb43nS0adT4w4pafrw+fbtdX68fd7CX0KOV/5pq
yF/PX+X7SXSuHB3auHxn/Aagfzqvi1b3NFobh22cz9MREX7pZB5VTdZ5O6Vbbp1mPBhQ90ECXmoB
bABHo73sq9lhpm/NugSfi14YaXczfGB6Lpk4EWB45cjWUgiW8DS4bMXe07SXht0v51NxrOHHaK5H
TTLRe4E1fXX478cZCCzyqVYw5jkcoQ15lr+vtzKHFIvNROObtEyACvLhun8ZDM5xO4AEacKPImRT
v/L+4+184ESRPq+0r2iePwEN2h0NThlM70/fypY+vo9fOb1dgDroDqdguQpsiM54rIVIOnMXDvic
RkA3vFkJbpAYQPLRZ4y5lrpBn8oEhBLAfecDuHPDqB43EdEA9k9TvIxbkf1WORqwDRra8EuV1Mvl
y/n9Ahz7SB4o6gu2gQIXcN4q5lczUCO2ORzYVDyoS4C0dPzN9EnVA1KlL93V5LWzsm5t9iGVJPra
oPPCwz2VDSR33Mg2I0luxDfMlr4PtkKxGBDNpN1IwJlrvt6GXSCup0l9tBP2DAtEYc6MtmERgLSp
3SIA2D0AkZbSKpkq8It9qr9f8owf67Yey8cufKMBnUlNVZ1Sp0d/giPZCLbFqVOOHYHpTaPXpvpJ
dpFRL3Ui6PMZazE6DozWz6w56OHtdgGpBolOc1lK6Fn0gNunaRTNm0ic2AVyik47KYG/wdLkVBiQ
LjSzmFLQTtoB6Wv5b5TktUNSapVbulZF30tV9SFJp7cKVWOyAzRDs8A3VvMaL0i9Un+P9Npg9wOU
bPSMyGSUJSA/TfOQ44pwtuQHXHM6Qon2WGjr33/+KmTaRvKSTprAdOxTgJWUWHd4F/pAGDHbMENg
P4OsEOrdkAaeHcQiaeVYRbPXDYCzLc3OIf2EeIWFNKfZeLRSUCcAUubFRZeUUczKM14pcQHLuxx2
ckwvojGerPUyEmlZMY7J1jcGZ6EvpbRhH41yjUcqme6l8g3FaXw3TtMlIiTaHUvSfbWXwLfMQcMa
ELWzrIu9sgaQu2LXScIaHyiDA9ktcmaxgXtseDKTZGzktpJdxHsDd+Pc1ppNqw9ccLSB5qBTQ7pc
RRm9N1LcCWSxxrBjZY7/ImCebhXACgvI1aKhP7NIk0nGocJST2ZrbB5Ndyd4kh6SY+rOwRwNmIWm
gP2iWLtwa9EhUR36ymwt9JeTAcww9lTjtOfrufXdurw+vXyUvjKw/iiG1L/mPtsBs4qm783xhuXd
pMLMyQ3PP4Ds1iQ5oqBqeW6r2QR/rB+5/8+a6v2nAVWgejGodflro6LPt/Za/nx+ut54eaBJVmv9
Ak2E1QBE9UDIEILL60dd9aElZ4H9x6WmtIZiNpl4LU2ongUkqmlS2LHZlPEDPYGT2DX67FTdXdMp
Vw0y586WNQWhzqW8gxQoTar5NiW943dL9suYgtDWQ9X5mlQxtFLj+V20ZoU9fD6//3I+vw6c8fnG
f8FTJJHWsjPd1utqu/p8eb48TLW0gAJJ6TlNzTEA66TkluTzz0l2Ux3FdKZj9ZOa5FLPGHfbnKMi
S7/WjjSAKF3vSNO1teSxkvUzUTyap6dJZel8cX67q9PzXz/uS55hkx0AgyH16uZXrDcWnwLe865H
TuOuvp9ug6w+S1Is2Z78oWKw4muw069Fj91EqbgUwRMr6enlfHodG3fU9/bCh+/DJbTuI+CIuof4
l+sA3pLPnmvVGGA51/vA57fv0+VPWUJgE45eVp0GlCmWGi0tI1XmG2yZBQD3VBwQS44I4kGrNZH1
8nJ6u5fqkm+XQW7VrMv3QW6UfIHT1KiHVJsC3iBdCugMzHHRSUiODsy9ye46+RYcxK2ZdpWOMOvp
aYZl4d1hCa5GTZN0+U0/jEp7gwfyyxrPlUJHdgGkFHqU3lLFBr59KHc1Ss7B7yo/mXNMxgPAhElN
ksjmbY9tcv52qZRK7m5Cwj/xSJjT8tYWxtgiv6Z/F+XKFmFokgK5weN4M0tiM7gIsxZULQJac+bb
TKGSe7fkHs5bqqOO3m8tsf79Bc2+0yRzui+yq4R9KwlWYzcEQQhF1espslx1K2Cc3YRl3ABHA+DG
HTClWM0AvtdtqLLpfHQvjD4w6UgLyGDIps/uY3Tg9PLL6UcZr1lEycO06QEHXz5e5t5KcMtzk4mJ
TNfiZDr2TK+A1LyoE4mJMdgU9Wog9XovGLq/Rb4Ceot9JHcY/+nl0mQK39Jmzv7fyNNqCj8gs8z0
wPbVbBv7B3yw29Gm0PPly4/yjW+n++X+sFA7oEPdY8muXfdQ1TtfC6VJMfEsL/Iyf/75Dxsn7J/+
ggzO1EMaIbT/jvtgeuS3K/ApOX8NEcXhH9YqZaR8BWy7Gt87/6yqqC2OhhhpUpHa93IW/f8wWE2A
e+P6rEFUr7PFIUjYLuUUuXT98lBTn5u3cW/NOxZWa9LyGKXT/ltL3xmipdvOqTACdxNX7tH4sYl+
Pp+/lGr5wSKuf+1Q2mEKm4sQ6lJLsvxkI7QQwn0gqefTK4pCZConSWh9aoBDz40+k4Az0TT3XAZf
4tvCIB5Nqq1r+mD5XzhotgGC6ro8Xd+rfbflFSPJ67uMvlztn1BKiyYV7X1fruOyHruQlHv2aF/q
Dgp10HcPSM1ZsMf5Ri5j4OiIla+Ben4uze+uP0pFwfuPh3YdEq3kjsFM6jFb50OkDPQ/RBqAMLpm
bT3Sn8pX/uV6+6MgmnzsRdh6SmTuxXJUh7ieZH2+nX75aadHwf5Sjyr6Xyna+H/+BL6VgbvSp1dA
XnHju6QW7j3/+vTycZ8resqj2PIjPIWk8hDtwq9WXaTIZ1Drz/aVpZn3UkLSafxZo4zv34Yzf+Up
P1LxsSBu9Q1kAwwfsGtFosbOlpWE2oamOvnSp/9cEw3v9YkCFPHXBL3cq7KpoaXpYlvoBJUtGB3j
qn6Jhhx/Xloqty9VTdNCz6N7Orig7KeNIgUddObdy/nr6elHU6Pta7N44wMidbOJFNHQyE7tMFsh
pkl3gxlwK3EFjlA8bakd5lirMpGFoN3n/Wx+PL2cvhdfpHntdSPsF8yKNqfuIWNv5BbFWV1dMw/L
DwAtlA/TkTe0PziZxlIxMuzzy+36/eHrrdh0TaHf+a+aPSuBZtCOdMBejjcHz8ZqINCHqpTiGbPq
vabHW0n8reh1Hf6k695vH9UObAObCwamriq0m9enX7nvkiZw8+FfB8KlbFFxylPY0ho7EqON31i9
mtfCFffL55fqE6FeyZ50fFvw/XnsPoj3ZnwHzUTltc3B5QMZMhSWzltVJtbFqxCDrRqCWn1i6tRm
HX/bPQ5qq71fy0wvFtKqzolH/qh7Xk9/Gxve9L5EhxHQOcPKsD3D/WrM0+LFrVm/VuDyErCypOs3
2kcHcexBaO92t7RHV9bwF+D7A01ul9e/jVcg3LlRPTU/T6FrlDeR4oWfSOXplKLlSUtpXkARmR8X
XXc7/3wpYZyJ6UZ3B0i6oOk8ClJoME3RWvh7rIKsrL015Vkrsi6h6F5TV3hMO64MjwdUeDqigeZl
rGmwkEwbF1JjeHiPPmSodmo7lSLOShLQK9BePdYEHfgdPQvp3Go0z3/LhRFjn15Xi2qMbvTzuURu
72decLneDl6vD3sKwDKcdNDfiKX/lmpwvc++Xt9KNsd41OpiNW/w4wmNHwp0TtvCaFPfKkmh697l
asUzaRe1rKg8ZB7Z/nwrMELBkcEWi6ZZ4oAFkSUU9MuFtzED0VbkKG6wWr31v4cXqHm6GETH38+3
uWkR6+WWz3h68iVS+vP1QsRIs+V5p8qbnqGhmFS8eoeWCq8Mm5LU3+/aAYZXQ3TU35KfIhA4L8+V
6jXo/e3SHKyQO8ZS9VV+N70j/BP/lFclReqx9Ol2u/4yHvgXLh+lgrs1JRAL5KHSA/SW7ELJJRd2
LEVv78ZzFsrUagUrDWvWV7c2YBZN9nD/dv0Y/M0iBotdw34wavDBnls1EMTl6f2Q4Ej9MURgWJUj
08TiIvAsbxvq3sVOPPmwuaFp3jHX36Gya1jPM4tHlQpvd7uuJFOa98uI0phFALJSeb+bDuhrl+A4
5xYrxdBTRaINMJLQnWdtu2ftPbIFfd2VsJpHCpFYiahVXp/lnj47P1+aGq9mWkHFy+ntbZZ3PA+7
rsUW+dX1Ecu7YQ0a3mE7Ljez5sFvYHO/sWNH+2CvAE7P5U2xDeF4OmrKq7APJTTROYDuAs7I5bG6
N1eTPzx/Yioi7CaQdjQnpO4o9PzB2VCpzH39fP5xJ9kgKJ+zGi1mO1XKwdEMVeqmDnkvUnPV/7LK
UBSmU51vLS5u/epkOonSOBBLrmRKW9V15ahlMbFD01YDFtemBm8VrVXPaHZZy2uesDbsm3Kbhqt9
vI6++O38Bfv03nbsvZ00GbX7kc5aFW967wC3SM/0nvt+rf1GS8LVjWadYPvDpI7k5IMAmt+g3Y6v
NqKW02wsxmxjMdRAu94ugxA61bDl+Ij3cn4XtYp3+2spvnjh7jqVYxV8Ryy5balqN0R8yB/yuefo
LzOE2u22E/8WUvGrcfJkqCFj8gyXLdCI1z1z57epA+AL9FSxMopX9t1I19Ie9msNuV7eyiPqw/vl
6/kmhW4Tq0fGJv23U/306eVB0J0+9a2zRfZyb0SVGVdPDEyMHMrGnf7kpWPoccN6qelCt6tsbhiI
4N8aZg48z4W+SMBu6b7NsUSNkTXUNwE8Lv+5ksGxOBbI369msOm7GXwoMHcFU1u41YkVVJU3+zE9
SEq9rNtY2J+MEjjgQPGq1nUft8XXoCXLSHoLMh2Z8g9SN7+I7gounoTpoOWtJzpcR+3dfK6pZu/f
zqPo5yMgtucoX16lyHdM3SdF3tklHLEMomgqakrvrY4ifGIL66DZaIzpzK9qepSsNG/z0jHbNAzO
r6FN98nE8oFz7XoBxKkIpmsUgxCW5t6/C1m2P3y7lI62fKPSSgjEpF5aBHPWvuAKma6uZ31TYA8S
L5LWQh+QG0Ai+m40/PL+WPTHY+WeR4lv1vaGPfDuA/I6KwmpvtJvFtz2mfz9ygfvDJEQsTqQ4xuk
5iNsOcpkVA1SRENO9SLIo7m9tjt3voXgDXnfc8N4807bA7L7txlBwEDx/93F1t4ov1BfOvEGj8vd
l+FulJw/X44dab9KinjggQ3/9rRn4C+XWxmudn7n+nNWMnO8BpwMufvD7XoFFnbYO8LK8KYGCTf9
pidFPkLtEniS61q1hvVzLXgyxvvjEdSL1/xDVjJvJCcWp31/SWyOXjdOIttza5k5O7B9ea72W42t
/XJ9GeRTq/b8FeQIRtKaecm/f7q+3N9Orw8frZF9HfMj5Qkm0hp5ybgdcbrUwoyjC4Y/fBsE55x5
X43we00QGQMa0uyQlkHo1i2hzdjIcJ5nuG4usExOwAnN2vpePnL7Sq0av37+a6OX4QKlb4VeJWyL
7xZNOhDaaRouTDKs6j2Cr9pe+czi8n8biOylEtoYZ+M/RbsSeLuEU5+vHyX0/w+eekmMrS3EwxaD
03dea27WOANK/GrsVcwQe+JXFI5on0hHESftJXfnX0/tfy7PtTXzvQYfS5uMpiRrkR9mJaM6bfa3
GbeDS3Z731lSJSpP82/BGmSgwNjSpjeVjfiXxx6rWuax6+QMSzLrdq7zA6ayhkF83YHcIr3c2/D4
cer7IFP/9oNUfW4tMwn1oZftTDKw59rk35KI7VeJ2BQd4+dab/+StDFGOlnmb6fXPfye7pfWRRKl
rdCEDxpB4SFocszSdAJldwTdywvm/VTfS7tDQR2azkznGvGZfb1I92DSvj6NHQP4EKTbzk32/emF
1b45MkizfDOm7nMuj9KoeptQmjeWSWpCiTkmJ4YL6JtfnDV4LexrQ69qYLxo0DuPLNdLlEHpEMQZ
ml/HW8nVtoB2tCVgnMvF3mxukIfgSI4ivQp+w+QxuOQMWyOmlZKk3PmItUnm/HD2MOZFY0fdxdAP
6PDJcrGX0lCnxhav/v5+O78/fStm18v56/n1mf+OX3NcU+ctwW47bgjPcalU0o0TgvQAEj2e2bct
jl8fXMw90QJSR33viZRPHHWxW48AUtmC6kgiGkNHoqi/GC8EfNcxm+f18qeK6+KXttJYSFsttsOS
zvajljzJrqtKxkN2Ka1WqfCqsmJMbUO1K4OxWVGj8bQqXEKTjJtSJ/5Om8mRp5YRA/j+TbEpesmJ
6k7KaS4d98kxNCealTqprc00NfWv1ZnlyHWW0tPHy+nge3n7blh7fnEqlCwP5GOOyJzbMXl69QRz
uuwggNobA79KIONzaKn0KnRTo7tj8L21lij756ckNmuKTE2iXSSa1vlvoz2qjvW3qx4lw1HLWt8x
7RFc0PfscU8jtisoLkXVzvUKlSd928xzAG1AYXJxt6cgB/hEt3T968uPt293ABV6C09ll2PnRB7c
dwuq2QmADcbwNfYASoPKfBnBpO0cUd/X6oCIl+N7rRXI5Rz4xOJuL6/vB3btVmCa0FS72CNLd0vU
qQ/5fL4OCqCQya/8V5aLJrbagb4p2u0roplCJiLcWqiv2HC1AgO1t2vepu+Fr6b8qrlxRW0uCOSv
6cXwtqGBpuq2YQTO5mtiZlef63eNJYrXXqLTywuRoIQsGxqos3FLmlDJT4HdU5pctR25Kmt2cFyz
1ehp5/4vfj8ONbUPbgbOOTp3udHPQC+tMBj3FGsHTv2Yx1RsOvZSqrAatJE0pNsCLblJPDeE2Gs8
yTmsmujrTWU8lwygyY1uhCXqqKppoym6CthY7PajU87zILSJ0rKKBhszqie5uSBIO0radU0AYZCG
424TNO4pUZNy/h2ODdhYWIlzNQVMv1Abi0jmMfN1NPymBl9CD5A56tnOr2ssGhZ3t+P0mgH/cv78
t8vM/NMWFjnN70ETJV8cNR0MDLS0W9i0cfJoE/fSPu0kpaO1zbheC0DlATqyZ4LbB+4K3AztNJJI
mzX+u9sX8jod+MhaWvcMUmXBodOmnYqHVeKaPFZtVzERUJrrMbSzYJHcMYO4XBpNJPzm+jhKaq+e
gwP+DtBJ25VpQtAWbbzbG1sFICNoHy9CqwYIr9g1qLlCKE0snekORgiPJLfpClULjkKaGRHnQFmg
UlK33SEXEmxCo9tvmQuUNjncFd3THPUSlBGafRrScK6GL/UR+gLERTRpq8OYbgRIy9x9uORKmRqu
Qg9Xx6Qaai9tSAdNErng4qltL91OScqD7eeNj+3hk0tbxfSa+k19pkgqRXvvYUy3OuJiMuLTSDUO
KrQKMmbmtEonghYNVrELCL1VA1YJC4jcP7+CRLIxiskIVslrEAeR30D8AiIbYg0kdo+vEIhZIznA
YG4D6SPZACRPL7FplcXGUXgDMevjR2i6to3p9SrYqGxXudwLqQC3YI2Fjuk7DThIct2rN+BSsl9j
2EE/p4Ho3aU0fQEkQupOT2DkMHgTalLYbrukp9E9AWIs9zr2aaB9DOmpWqJvLkMSbwqrPyHDIAtI
dVtvr0IZSMH1OndzDKLJU/pGqWrgqBnVvT3lwCp0jkFc/GcHTFQ6s4LIOoUcEdVVrR5YLts+5Zax
KaZCRoAV6q2QYJEKwKQhjUvl5h/tjLrvvQMQ2tN+UabKATJMXVNLtDiO9Hw1dN5KDTMVb4q+CUyd
CJXj9Zpzi5QuMfypM5MBIMbsRe6c57hk3pSu8bzgntJB1nJ4zm8aO3ifmTFFlS6M66oxl8Bpe4tC
/ZJjD8KANUxvjbHy5fky/KG8LW2z9OBognZa3VF01oF95M4+eg2m1+3Uz2APWnc+OV99PVOBHSPN
rW/Ond9hXC5w4dpl3MTk+s/pXXyvgLo7lbtKF+hpZ7rGgLeAglIHYlYsw+ZxQKZ+I4fDDATuN2xs
DANd0nbc2LOv9jnKz5fb+QmfIa5JQbbTneratuW9ckw28/wDhyYhdZoOFAGI64No8IySOo1OyVAW
eZ8mdL4At2nS+qXeyNs0pruIAxC+lw7A2QANpNeulZOUDcJ2ISyAcNuDiCfRvYxFkgJ/gJRyd5vo
ivT6+cXLV6R9dxF0sNSFQDekumQAbkj3qRPckI67h0VxX9r+VspReZ+njLeltku0aoNqWlLVBlMg
qlSi7vMiJmaR2DqU1Hk9qFattQjOHXXWketlrA4yjLo6CYQAnOpCgDCL06EDsZ//1uo27m8vgzu5
yjPmH2ebJva9kMy31gtujDsNqnJngwCVqbrKDgUTcu6ah5YPjDjbs28476pB5EOq/P7tensvFw+u
PXbNtXHWGkCadBnad8hy01Tu+fx+evpWM5NO38E1kJDWfNzny5cv51trU740PAZmH42nLBU+fQMI
4Ct0jtWqTP9Uplu1P/7H9e2htnwd3K2P78gmI9QSawaEEyNDjtD58jLz7fJe/JaHOkBub23DaHLb
ykKFpU5lKlxb39jgRzz9bRpnw5VmNXTHDqJgeJTYp6swXAaYcB3vBAQUnV6bolbBGEOTr11/jzGc
gQkfut8Zc0FbXiHAZoYm9ErKgy2YDuFwD1Dt8IsAJK0iSOa3sPGpWnMiAwUfgduS3TCxQIfgylPo
vSDsmoGvZ6XVJmPDz5/BybryhHtmbEeLlFxnAgdh49zz+7hHxqYaVIclwAuL07bnvxZiXuOcK1Ft
0p7wVSRzpUYXetQj7YMlEQlM9W3fC/1INogP6U586DeZ6HZtQeoDLlHuJcBBg9suXtRcTAHtWrup
EbWyYWtV3+8Cpq3VG1t4Sdy+fnlYx1pqri9IHmuOej8qAh6unApM5Kgy5jj5Yj/3asxgBratJ6TR
k567CBJoqdEO57u2MiBO1SFOLoTb2LjLAKso1TzA/IykVMT2ypLDjj6iO0KckME4GbPManx9lnh7
qs7YCPiW8Xj5+nq9LePOQFxyEXMzHy2lO4da/rTv2B5plEGlS3cP0ICnWU6u74Fhz+YfMKqnCqqN
h9Mme65jq6TCRfhm7mKAy7BpAb2uVgJv8q4bwlUBMIAPHVvll8vrc8nKOmQ0TVNANkqJS3pqbJe6
yPCAtX1XuHRdgnHOOriL/vIWmKfWoXj7HM3mCykah3dv1IMb9bpD9DTXuA777XkjYBeEFJ1fWsKh
B3+nO87hYa0BdIZdm3dT+iIgWbeQbE3Xt+u9kEG0Iulq11WfDhCC6/hCUw4+KgdrmDed21x1FSfi
CtCvQS81L+fXryW58ksp/H8I9f8BWad6zooClqxiLdmNOmihjeVw4B5SL5ukFvIuthDfLqkhpRcJ
4Z58G0/LsZP6Wvl0u768fC6v3B9fgQO0yYfy/2tl3C0zMZvvcyB42Y+KGXCZRncTeQJAgl/xdYJp
7o0B1AprBtw+uPBeNPU3PcbY3A13AzfCemp8Hwnb20QhDngRbhW6zgd8iPBbn1Vs3O/pmAfZdqh3
D2dS3prT/Qg0CJzq3BdQmw5Pg7ADhNnVlQ74/XYVZM1iVpbTrhco0OBg5BV68Ss92JOLvdAZ2JNx
3VAE0IemZ8IxcVtcU9fEziLei/VvjPBwD5hc9TJEFz31G0NBUxOGurNCzFNWLbgv1yPEnl92wbFx
T15hVsnbwMglxh7J6QCK1Vqk1jdDw4+4pVPfgYnAt/kM1bwfvguUajz0AlIevVBMtmfEcgVIjab9
ns/GqEGz6eaRUTiNyNFkYFrOjlJoneqrUQvcE2u60gos4jaLaNiSr8mrvvsA8Oj8wah6e8PCbzIJ
vYBSi+n1uhhN4Gp65D4/8y5zoaUYWOqFTUZjZJpiPz+FtapZ4MyabqKu1JYK1GP6bUcCD1p1HWzL
RRJmigWhbSSp/6U/szR0w5IqhX9saC/YHTExWsHHul9A689TP9gGEDzMxeZSkwSzN69+QysyA4pw
aaOzpUHx+fb1zHYYOoLilOQmbexY5MEUBq0uMomKt0rIuW8LqTvedkMRqDUtH631P+E34QEgOPVz
Tb5dSl7kjwpyHxTww/P16aM2e2wK+d7EfW2/eTt9ZR2mOlHcLjmzxRB3mnR+ffj5MmC9PItw6qJ+
wsReG8Zxl6NnDaCXtOOabtuwdz/9PJyjCKSp60g92sPr6WdwliV9nFzE12udsV7yVaaO9K+c2VI/
Qyr7iqCwU7/NlgM4IOWELJ92qLTujjC1l7h9f7h/fP5+ae2S64nK566vTy8XNNeeZDaXoNooDt8v
38v46/OX4ddrx8snKWWhoSkQNBVbe/hvO+N03y+lEwMZTP90fbnewAdpFSuJjX0dyOajTPxoAwCu
r8VUfSBYAAfeD29fHu0aWbxecRvJbJYiifqIZMao10SZlSqG3fxyuj1XNVU0ysfndi3f4KdJfR4Z
ajp9eDAxB2PzPjjll/vD6f7j9enb7fo6CAGwV7tuKZLoBx8Hu40z8hu0W1Ns3J/z8jrIz2FHP98f
vlxKs9yP2ws438LSuaSl5+CXPP3hUCOhAJJwvfMMInDsCtguUsCyWRixJOWPfTRXx9peGzyVUeui
xASodN7qt4G/AKLcun2DWW1x3lY1grDUMUsVUMl3C0Y+rECjebW18YmhK1irjhBk67I9Mktrnh39
9HK6388HCMOEHmMLauzt4/6tbhnsb1EjNRtknI49dlA/pshob2IyUW2UEM8fNTSAOZG2OViSJ6fl
v55fz6VFQWvbVV8j8IbiGll6TxN17FOjr4kuiswpr25gl6knvnrqCXxD75Rtq7V5Ob2XL1Wg76en
h1/+Zuqf3y8vZVLp7fTLVIaz+snD36/My6wp7YXImMbyRzdpwEJ7xbWvk/eq/1QUPXjnrV+jQ1XN
/BzSWtw2u6p1u60t5+78d0gTyFoGoWir3ME7vPy9lJC8gA8sXfRqcpHf9NppJ2rBF/4rpNNm/coY
oFxjp3F7+yLAzNIIs5pj44Y+hl2Mma6V7GCrUGvIbIkque18W+v7HrfDD0AeLt6sUDxWR46vrQOZ
/1wO9Xp6G5zx0hL/evsb+NbSa7OmCA9u10JGtUnSvUTpys7gltS6T2n7SDtKbQx/O49fmn8GEK67
pLiCprbY+/Xr15cz+J45sLmDtKDWo4dD5xZHCp2DBW+F1KodWjo6DXLqhEZVWEMGPtVmurp3/LHV
yW/Bgl2NfhxnlW7ExdEbSr1vHYZ264k5YcytPJW4XG3ecr3W2bfL9B0sfRuDLWxaHYLQO9/buTSc
LIIEbI+KjjZgdpwnc/reptpdvwzidMD5fTwtEIeGdBxW1ZA5ctpW+dcE+AldqolrqeLkj4OPLbda
X8V7FELZ5CA6PUGnq1Nal9emCrHJFh0x/PPl/MvSc/7vpWPtr4BpiHgtf1xlOJSN06RG/jOkO3hN
ph2Hi1w/bgOrIbVHxsQSrTUDjllr23sB39Nr5e6AFizMUbAFvmZ7SpnEb4/ghkyNI/ZGu7xhB7CJ
XvvAQl/1eN1cYXL74DxEDOu51eIYopGu2PeO8VvtC9LjnXxli1FKyhJ2CSfHptTrhIf7+WGlXsAX
li3VkgD6qLvoCcJxr0U53a6DnKkG+Ofr8w/yi8C2SmtJG7sL1Sr+a7Pyy6cALpej165BRq2+uN6W
aIqQlumlXCbq/u7GkSDgO6pnhbTvtPTTI6jaWNWuv5lFzNXO3L+KNEz0b5H7xlmAseGGny7vP4Rb
IK2wSc+N/Vav7ZEVbG4RxST00t0a2E1Yczg63/vt9HovDpZIaaQ5fjXfEviqMBKofc+uWS6D79W/
V+8JfE+vx3Pr2YP8KL1Imh82yNj6BxpGe2i/McW0Ln8XbEwyW6y+zuupOrL64Pdmdjx8OT1x7Qbq
V8g0cVsdiCZK394GL+R99EeGDxXpVapABNuazD50fg57D6ecD/k86M/lBa3EepsyPQ+M/MHFQtpO
Y48mnweFcbv+mOIYFaEPZfuvSPmQiezEk1vdxvThMYB29FbIJGRiGA94u7y9T0nJp6en8/0+XM3l
5T5tvBreh6/e7K6+Xtrt47VgdISpbzJFOZxvg+Sovcj/evr51PYCPr4whK9qIhQ99r9b59g2MKZ0
lG6U/O1UugjcP14vXy5PJ5SraGkWRJVUdb55xXvFx+Xz5WUQcWOE5f3bIJ5rIE7YryUjG0guSB2r
VCni/f12+Tw+cbeE9VuhaejqO+LA1aDZSMi3y+mhEOqZLcWrWzK94bnvl/dh7WU7H6XL6ek+yJN7
nQ90vfFfdCS0s93Py6B0buevA+rv5aFzvoj7w+nll9OPQRBwT2X1unN3IGj98vfz68dnfiKttUr1
xn5/r7Jz8JWf/sa1zK7QZPZLQdj03DD8uh/u6q0kE398/wxkraVWh5uZbYOVh2m47PP5y2kA51GR
cm8YTRv1dR4nV99qykmZ0dWaHk2TyPir287INbN/V8vpyhNZnfwFjhnWM3Pbvq5v1diucvTlBKxK
S8bkrtrufzvfqmn3NgAUF2scOFjGXPNuku3PdyocOxDcO2YMOpBmQ8b3t8urODmwfoSMNyU9v64P
H69/e73+8jpK2XFi4JbrxrMCqoy9ASR1i4P5/nX4Dz991hoyqIkE26fhfXXMQKOjgSj/Vud+PPMq
z9ruMJT5RaE8aIKL2k41JshuOXbn75cysbcppfHx6jsUFin0jtek6jiT7PPtVAQsvy9HYhSUzQbU
FFugzKG8j9f2cZmqBwB72d7XXk6fzy9L6cH518EUbOJ2+2WAQDpEa+G7Gf0zUaE7SGvW8zOzfH9p
yS7TpE+wjdRjuEJFIxENxumg6sA2HAngkJzFsYFgM+rqOEVpCK91JIJQ0BPNRkaePkuqVXdV6/29
WKvkUNJXiK+tixXX1bEl8WfSs6df678CJIW1NhtzDZtMun+7frw8l+99O5UBpb9WMwCYAKEnc6f5
pZ8/7j+mvA3+G+R1iKagFMf1Pk6flInYb7iNyLNmXtWrKxwM9LzrMUIz2/52/gHEoelaw+fT7am+
7A2EBy6EDMkllt2Ew5fzz+cXgLyuxdRE1WQcAhnlVzpG0XLH2mGiOi3VkBw8QyCejO1x3kyhz7X0
tQbHn14+Slr2PE8U7c+Sz5K3zqK5R/a5f3wZfFggVHozwseIeLFubmy5VFu/O9Tu/HwZdcH5cxvP
2poFVEvyQbByyJMY4Zj6mVb5U826ItcBvXUVJslWwCLAkpAgMrNPz8/nZ0kzGWp26bVlTT82JibK
n4u9cYvfB5wXhftyrgmPxVUqXwX2DdnV8vouxLItiY2Tys7lSmro+HZ5HpMlPo+yHFgSsStSqplV
M9KuNyRXwn5i6Jjn26z0go+PkrpR/9qqgGVTomuY1D29Xd8+3sbJ1vcSCXltwT5Z/qrQ85H2JCUb
EyabtcPkpt4g9wG+6YOioCZjp9q/NWR1uTc/Y9Bdr88v6J5z6MmVyr6Dq/C9Ob+IuroCfxIH9TH6
/F8fp5f7nCtSfgbMjX6MvmCvPFS8XwGFdeXJ+JhWCITwCyB8vXaP9aTBvr8UtF/wi+bUOagGU0zL
YVgbzE2FlMeK8WkJGc5dlXb/eHu73urg6KeP4u2/C6rNQC/3Vs1vaA9MZWAbz31JVJlEgGDZTvWj
G+VIeW0k5rtscGW3lrbtWIO7VZO4Dhnr5LmA3PX3y/3+dq4R0J3aBoxAFHSeM8tmvXh6LRfVrgxQ
f8/Tnf2P0ZMprF409iFydqpn15Q2VgM//nx+vZxL19rv5/dv12dEibmn2qhjW3bUzAlgcPfDR805
OuCekdGrenZF5shVlVcYwVaZrnW2Fc6jpY412pYAyXaabwsiGmY/43Uyc98GdIATkAfZKrBNJ1BJ
9JW0E6PZ6EdlS4DKyFoIt9Pz5VqeUBB47oUha8r2EcMt9iYEj2cuVnHTXs2JI0pSsCen0Q6MFycQ
F9FdxNJ6un4v9S112iWWaIQ9SBFgQWjFZfEaihoDBgONsC45PjOH/Aaz0eTck41Pg2QdhOO5eHNv
59PfwGG6mGyKsPqhxVK5oBgGee8iBDapmqXRQ421FfFTSR8G2NzW5/AHwuoAR92B6AsLjCoNh0hV
6iF6NIx/rntpTXvQoyYRjaS7RPOD6qda7hlQhboXXvl4HY0Nqgsfnq/nti0hZGNzT7ZUfijcUIyF
n8/rqq0DWLdUF+3u8P5ePj0ZN/MEStANpDFO6lt95TOTZhq/Osfgr2/vlS8BCVMhtyi8GtA56uJa
8jRPbILLz3QAc/nr/EHAk7EXGqqkOplf0ysONtMt9U0TmR1bHnFarJkrYWjU5nroXsVwx+yrljJZ
jjrILvDBrjZ5vn5UxxSrEvL0t1PGgyMl8Z4lEdLVCN/B7WivK0WlFddsNuS+ne64pq2dKbGO5KDM
TrV78c79K57vlwtMgCDvp8QG2r8KjOUe1+FnxZ0mLU4HWVDlbKtcBdo09Xz+FsH4zW8RloxqJzUX
S2CTbTTcxKxlxexsPFbiLwWDWE8r3Q9cVUV9eR7LGN7by+G3y/lWop8guJG6Qay5jBrJF7f2Nm2H
9E6vT9+uN+QFxS79Fi7+fnp7GNveAnjTcw7nDsfTg+mYhlpChpLioM/MpOaHxHuOSk+nu2ZMtYPG
cPTh0IAj915bDrkcN/bV00vlRKrIgPWQOq5Z/db1F6T/lP8tPswJPYDnrj9eJUgzrqopPVzbd6BU
uvGu3VMTsMmIW1caAozdAF4ub2/TI/yxeJ41qUc3Xy71BaDWw02PO8JLhCXJqkRT1mcEMte6Stxm
7hVCahhH7n33fZG8gRUrtiUTrlPWJUPL9QTSeAUDAdTvFtN9jMGBHfp1zlWi7zdfLudS7l1G2ryM
mATMEnp3QSMGoKS6nYoPp5fqD+Bdb97BIz3EW6mAfirXOOl44UGH+LlEvHHq8h/Xld1clAHZP5+Q
LRx7T8Uzjoo6AsCqx/2EThabH7C/61njH6+DVdLii9/OL2/YBXL00XxRgM1XnPw9IcUgsCr5fn6v
YejiML6i/HBLH6oXfIx5CnPUtcU4wV60Y+22WrU0MviXGqIAd6tTdztL2kw1Uw5pLu17geQxXFJ9
zNfxL5P9D2P+oXflS6JUTXMQ86Qs0X/kdaOWb472fjthjXDj92pSK1FzhOOo5X8ZqzcGaVpz+6d0
QPgIbXqCizjRk5yvZy35+KOHIEcwDQ0vLRkHqwedS6lsvyF7iyTwkS5dzfeSwn0k0Z7kto/VsiNZ
jWlzghXsDJ8xSZ47nq4v98FXqT2DEa13o0VjjshJ5n/dJcnxqb1R5ugu3x+WR3NwuK7+f2mjwGqS
YbEihoOBCKVjHxdn960MjXsuVdlYFJjUfZSa45wHnNRo2N0sEgXcj+sEIWhCYvmSEMjIipXRwzXf
EN9scWnH3qu1kneQpEua70V6y7LU5g3roN379foC818pmeVVZlYJmTRv4tzURBWCQj6rI1WuhIcm
7TtnVzQCHjO7LzD9TPfy9erhWhrLLBMRtn3vieH7wDyyCU5g54f6KRvyYYmj32hSJDiOOZBRUVhR
KG/Zkp7n7+1YENJZyyr527nMR6z1ccu7JqCp7t7aJQGN59l0ilYavQmugvXj+iS5H2Y6Eg+nEZrF
jqu9+0ZP7lCun81dtiilsN9PLX/5+rXoTBCT67r9TUcK4cDQDect1o2YMmlzN+r7m4mf+GI0kY/P
JCMP1y0ENcWrgQuwz3+qRtjp/l5/v/kf5I+1pPHh18/fBZZztCxKNbepma/l8ej+4/X92/l+Gauj
xgel6Yfjk861lMo/Pwzsc74VnxMUmmw6dI5Wzfazb6dSmVmAv6OP0TaA5Wvc50ZHGHY5t3RaWTG+
Qux/bD5ly2L6+XqBB6bNy+s0Z+az9Tt38KFNA//U/wz/1udIWoe8nRrOON1+PJx/Zg1lR3wD+RLO
dQb6cy0sAxvUnc9Vpnx9uj5PjVx+HZzW9/v7+W0wgduPAXnvrYhJpTRuuX7/3N5mBm+hZHwXF3JQ
DDXdYup2zX+e1k2U1E89eke/opaYFTLbnsqc+2uX/pyDi1DqhMA3SBltie7aMKmX0+fL08Pff/lr
zYb9+y+vfwVH8NsjjH5ioYHaDuP0BKoZXOrWKc0HuX/cBi1Q4jhvpwswsWhS5iJF37+dLg/LHRVR
LDbRbruib5qVknqnaprzDn3y1PUP7j8GAvz+L1cUkUqbNOk5ub+U6Y1h9vfL64+H79fX6zRwG8Vf
Mm22Uqt3Ne0A9P7j7TxmmT18OZ9KmzF0b139OWi617lLxn8Mu/lTbeELyIfGwyohj3uqrF8eAj5f
X1Z1xGBLNPe02lljDdOP0+tw9Q/3b6c3fOuUqepEUTWlq5wfPt8G4Vg7raGwQuolrHw5fb+8/Kgm
Qb27wbyprQ8//+DbrDXsdGNDL5ev9XZKfPv5UiJnkAC7SX3j41ErDatw/3o+//308O+36yy3Sr7Y
7fJU8qL/+jE402CWgaVDp1rbtZZ5fnm+PHw5lQeu2r6wxE9hs19L50wXgs2jCF/uYKavkdjA0TcG
5uinlLrfaprNG3tfqsy+QJ4kCRh1cIvzY61reXY438YODi/1XXww1AYEFqZiOme3L5Lafl97WPkl
pfDpW01GHrVXsWlatBV8ritu9lsCXyDJifUS7NjvorBfs+SagV1m656aMUOilTjvNzDBwJLhOsYZ
pqDg2J4JfCus23IkYvw3j/yBb1TajtptjQVOBzaT13mhU7Tu+Vye1S6vVYON/szUYFrS8dsX27ET
QGub10jtZfATzq+TZVNST8tIycEP4wzpdm69t2qqmVTNtQpSAp636/fT68BlP4Y7QdlWwfWk1HAF
b4NdP4AX6EHmvWHhS2KWU1Lb+E5Rf/15ML8/X0sQbQwHvJ1udxR0Ie/VU8+Vecx0NQFGpBHfp1Q+
vUw9D5sfRH4bPKelnTH2v6e6mWmZSlXjLU35RWOj+/qcfC/6F67i17YoiUrNPDNwdyuxBl9xvR4D
eE/MSMD2PdN/W/759Hr6erpdHiZtBT6hepHu76dfpadDv3/JGb2H2uas3enH+3WQ+LfpeAVTUv46
ycUqVDS2k9186fT+8HmgxNdq71y/lGZ+zxBRXV1+5KMafLSboLX5aFUb7/fyvH4F/KK2ltjky0+0
UcHqjopdDTYViAZpGnzO0mr1KuuE3eJknJ5u13sLpwLd5P2ujKVR28t5ZrSi0FsL1Np6HnAtybjT
Zau9ji7Tc+DT6fa5lC0UCVkHrbzwFgyZ0Vcebs1kdrz+3KYLXqAdReZ9mvqfaUz3vQaJx92B1TeT
hiPNafjl8vy11CeUpiH39x81IMo2oXekzcE8uCtMTUPmvtGjvihDf0pw432wcrm5TqVJvtpGw6fm
t38/P/z9PJift49XAJx7rwvfr38vo7u8z54ZnlWBTTeaut16BKv7XuRzWj2rGDVYPXQeV2oU95fT
SwmXQqw53wt1bvfuwN51zzJcr2/A+qab1LICB6s7dwT14O6sPfIBcACT+8XOl2db+y8+IFhS9RNn
52Z9eHDz/a4za3ALwG03x56AD/Z9iQagLcRevGiLPrAJ230q/Xb59XJ+WH1mHOwWPv3KfMn3qp+U
VjxA7D2dFIxzEC71lhjYi12i+25ahiSyEL6HUKUyDxH6EJGHcL0YS6Fy9uC5d0uFM9k1uk+JhRRY
CLW3dne0NPg679fiaQKK6qYNn399OjdHcGxlDmzigTEdk0L6Y+o/f7te3wFbdHOjtmyBhHq3DUPR
CN8/3sd+TYCraGLXUku0XT8DJHY/sBYtQKq6bm+MnVg+gQ103+y3X0jgA2GnU5sR//H+evlbBfn9
9bUEH4ozXv+u9eMffq3pNAW/448+hcffPT/XuTuP//bWVl7+7ZN5/I9v58efPj5P5v/j9Y0IrJ/G
X/qdffwP84k1ARytkSV6eAY3n/Tjf7AX7lZpCQu61qs7fnUV5dU1WL2b0k5X158MWL378Lte3YDV
u8/8Mzjat+oJQrKww0hPELwiPYMrx/uGa69y8vrAGgBbCTjxwKabhry+bERq3Ro6gnOLSc13VPAa
5QEsniGdO0Rnq8xMu9/5AAyOrYNA4wYfuxt/XVMqYhHM3xXlHqBNpBck2UScgwvTSdq4+QRotZ+T
S9cGp9YRSrWKc3RlQZYOSCh6mc3Q6hmevK6ObjxBLq2rA+mkNCSYujoCDzI4EG/KdQPcFVxXfd00
el9Z62GBpu/Y6bxu8p1q+GJJ5Zs/wHJEBQ6mN7R8vTqHn7b68pZFGlnOH6jCBICTccfEOiPgDoLT
+aOdswN13Va3u8jP+vRGOL136+3H7gc0+IDpDSpeow8dgDxJ6h44ayw1cNNLmqGkkwHp4LOzOqid
O8N7H+kOUX0QPmCED3jbG4ZMtx/A2TUkHFaYN2C1vnPd3TpCnl8/RO9XRySbBJLVAsnScbydswNd
1Ggurze/J5sEUGd7ceft5gHqXFqP8/bdD4DLI8O4iTtOt4+4PUB+G2U9knduze92tzqi+Ai3Duy+
dnFeFpYayjoFKQ/4lW19J4sMuL4z67vfHAAdXUMlNx4doV5DYQNs5rZzCXMW31zaHXyyQrR+/KfL
6+n24/FP168lI2YfWCj/f/7X3/35n+ffmA2V+huSb7wKo+iVFdngobO1CmOtL29aHTqpq1eV9Q0Q
eLC+jXh9i1yuVXy7tzreu2NtULJ3hPmEV0fHNr2yzM2lI7R7zvOYD44u3XEuF1kd7d5yruq8OkCb
8xLaNbx0GvYzK66dV0ckE7kw2kxwiGQME5uYgdHBdTde2aDNIin+0hUFcrRq9bKQVxbQBI/v1SFm
NhJufAKsLEcw1LbVauzBg93TLJfYOT06eLeTygKKFw5scJOgHSFO44NjGUhSTrqXjkkmGMAOcmR2
96Rj93tHV7buj7UWg0YWBR6JUSlgpwISY0biZh9FmgHQYf+mPgsD8/j762uLXhDDYZEFBvsiNtG5
KmtPSCMubrBu7fqvYVlryMbsOTtSG+y2DosS58Ws7G+NqaCtnIWVDVh5Md5J22qCKgRrV4Y/pT5E
+Q3WcE6DNtjdGWDD+orMHlvongK6YBzaGaDj2tXKe2gLoJO4dgDn1ghnFlOY50z9eWUPoNXOPx6Z
NT/+oXQvvrz/2Fv4eQxF1t+47xm5/PvvIojR+thrOj+DBvyi4EPmZPu4cgYrZy42nbFp6303ZWWG
dFih+GA4hZIPGMbeO3hmwQbx28E6fg3uPyF0w8vyIBruQ+RM4jw6wmDLmTFJ8wH/y3sP0e3RyiFw
Bt9CngA8KkhiDiLMIVxH8Drpo0P4cvDAlvObFtJGBKIhuIUHVpAwLSJMn9CJI1q2Pz6BwIJlo4Zb
juBVz8cEGUJwZLw3wrYRWRp5acSOVgB3WH7FXmsFwlOIvpIg7wM4dYC0GUFii497l3rSjuW0JXmm
VIO9A0XoHn+X4I3mwJ/NyXI9ATHX1gZ3khNPyE6miP7YAbo2bwEEpYRzY3WYgMRysjJOmSdmJ1Bj
thBWEpYpQXCJj1KA4ICas4cYTxBhOXKP6hUYmHrZQEh01MiFD0ZEo/0qSB/ofpRwP8L1aoEwET9q
Lvg5UiU6sIPbTihg4HOGUkSytZLrpr9WcE/l5D9fz/fH1+v745kVmB4IrfI4YaiTuJU6nkdwgdVb
hzquYQN4kjHUsV074+O6MHVA5wiXTuhBxtDYRefMHkAqzrWclkXACe6Z37BOCSJLyDPQKXPBiwqO
bthzL6bLwgicfadfwNElK7h6+ITumE1NmW4KEafn0nImYAeAY688ihza4UNbLnKyMAa4axq26aLc
YXADV4/g2JbLhVkWRqTi4H25TwhlaY3xRARmy8o+ICkNH+loTBR5xBpZYEVAy4YP77SlLYSFMjoa
XugY6Hw38MQlSI1LI1jNhZcrrEWwIXKxywrr4ZE9vKmAEy10jFy4dtw2WDoAQW34uFBb1+6omMIC
yE021x5Z6JIcr9EM7ww2unRcWsWIaHTaAOlS0izB8Crc8H5o2zamD0mbkvyx/tLo1BnSBxfraNsO
vIA1soANHiI8IrJOhJOXeaoEFhBYUlzKV/5kZBuApvp1ZJ+kz2jGWlcGIdgAGTKCRDedjLxtdGoH
6UQyAkLeKdP51dA+/u5+v3x9Lc12OtlGJY/rp8v3t5cz+b3lTdFKUUQV2FKYBiwlFwTWr27w+I09
su7mtHX02Jp7g6I2W0fwAS+On3r5OGiDRjhzvflRm42j1/3Y7d7Y4Msz8/e30paMoYhGkBoX3Bg+
UDN9wuNKBKMyE8xvHxhvh48Wa4UwvEh+/rlLZeELrokj/qp0SmwywYRJheumTGDf3KZPBOEujAU8
2ixKXKSoE1d8NZ8CF7Vo/gFu+oLBRXM6OkgO7lPCxSEGpLfRQwCCCgrj0WKBoU2SkJAwEgz/gjHt
wHBVBHUHLmByxAKPPvtsMpIoSwLJw8frCQZQgZEhqXapKxXg47fWAYjOuoEsMBNIjVquQIMtOEEy
FqGkeBQmtuR2JVh5MjbayILVIj7QAhW6TxHTgbFW4sWMC5cNyK6jvBQBLykutE5OASVzd/DmlhYB
JZggYcEJEilnTEsjRwbAkRnjsR7CgzMoLq9jRU0IDdpLQsELol15UbQrgRrWk+L7TKERIlOS9mAw
U+iQJILUGpsbdEbf3EZ/x1UA3sdDnA2EC8l+7+7AYXrUfMHyylYB5BSzYKskQcK7jLfQal94Ea1t
EEwVLwgW5STjWeMvaG8EJATcmsFsJ6v4Hi1BWiQpDzwlgCNkDzlyNHuBkjEKb6BZ3gAHIcr3CIWK
1liyjVLFA6kSJePfYINJBydQQhbQ6LNEjELnBx2TsIUoKHsreg9NvgPLOaYDcgVRg45BcgabUwzo
IWUZEdD6NRnb76O2BZ6c1pLFYFATEG0sJshxB8BioK040jbsQi4TSOgoiYYsaKlwTMAiKz5L8tEI
X6CORN8rN4KmC0Gy3QSC1EpJzoQTuCLhKI3FoShtMEeMJ0DWo3K9jlM7tx7swa/tT8OEFpBTGo7Z
n0DXRIEvLU6b1TazdSdUWYEdqCDtAEZydX+m5E7ZgejAdsxd7l8l2AOfZkmkG7A+jRbDdcIW6FTm
zLsBQMJGK+kZob+UTvEYOSJHQslWAzRhvcAS9SaAzaDzgfgxtN6UEWW8Fj6RoAWpUfcjFZMkWrUQ
b6Tjx0DIE4TQXToQ8oTi3StMjFUoAGKWLbcgmDw6SGrSCUIhY19Io/iGiuGACY+embQKkkwRmlnp
FCRKdoITIFKSEegg2EOeDOCHhF7bJgUHzEYnBh2bUAMyKVqJGLMgELw7IlOgI5K1yJOCc2+SQWKp
hR1BeML4AzwJz2DEML7Q5EwnJXp0gtlmkj9gw8NYkxfFYxDUJO1S57tCXmiYpuNGV3fjrwCRWtT1
XsCjilK4yyBFp5078CACMODUAbsTCAarpRBJFNSk9bIPAxAgP2YYgRDjsZdqkBKQLCbEZrwDJWnj
AdkI/QefDrxNAovPaYmfjSBUQjwQuAXXYI34Mgf6BkR/gA5hxNTgeKNGT7tqK1FdT5AAp8E4aftZ
0ArbVB7XQz/YgfVigE0Qpl4feL6ACt6kI6F7JE1FQwlLQ52kI3iBikjaSwb2BdKs+tArEAjQ2SAR
UzPWgPOzVYyG+QQ4RzQSP4FgRHSH0m7ACYwXaCkL9+ClDwTBUNTxiM0MqSmEI+YqNLuT4MEZwcAw
suUvpB8ZUmPVDxgLjWl10odMRRD7N1L+UiNnYKZEd8jqBqZSskfi5mALQcupI0i+quTEBCTwxh7j
AQ0BQ2NBS/EMwXlyUQrrRIEWrTnwngbNxeQOvMEgwaBSOPCONPwF5CH1h63vPpHAF4THhzG0Am5z
1c7eLOOedw4YShfwh8xOIJ+i+JATBdlgjzlxQOFqdSRZFqCSRkt7iXHmkyDmVRbi/w512jUkj12K
tSH25Fv1r2KmgD2d5AziFwRnDyUzATNa20M5XQgLyh7gLIQFlf0BPEJL2ulD6bZAW/mI001HnQvU
lTFS6DUJNpwXT5EEA8qpA4+0qMRC0+y2Ph6cgMkcDoXKgIzzx1gTWFAqitltSrCHQzpmiwKKSIdS
elBqVpLFAwjlOy8n/6Iwj6hqkuASOCF/A1frRHPEjgYinhwg9nKyjJBKFLxkfmVB1wbpfdYJrkB2
Rz4ABLxSEhlH4QtW4Eb4JqdIguSmyJfEacAdWLEMAufggwbJVJYAJavVId2C8iOD5FMGQa5ryZ9z
QrQy2yO+FJIG29lfTPYOyrHUh7LokTwRQwxGUE4k1aC8K1nGfAZXYbWUayAkbajsDuXVAUyqdOCN
FqrYnA6QJLwLo484AeCxO29yFhiLC6UN79LBptJC+/jv1/v7l8uvnUl75ePjvz7+8/npdl5Vq87F
h/aT1DI2k7EJmwJgK5cf22zYEncLx0a1tQNX+tyEMmxEMKxtpLUBsDVckbv9JDUGzpZtkDNuHCNN
0wnTK8K1n6SOt9mwYzKkeq4GTnC+Zjsr9xUYwL1wZbBpbtYJXpnQczcbC8G1tHklgwNWMXrdXdnt
rg3xmVrP6NgTKyAYfhCU/SR1os4mw1NbzKJaIlUkHPa3Pcm2AdWT/PrjK5BfWqSpRLtsbZlRS+cj
w9V316IlzGoFV5bIcduCSa/BsezU7GQyKw36GYDZhjlWnks2bNzz5Khlub3thGR3OAd8pDXXesrK
U3qGtYHK0ZLY12yLkOW+wdaVEbYuoC3CS5OUDm3NtrbYrDyLbQAHil5LOkttBIHbAaONZ17hacm8
0QHiHItd7XbEMgmw+PhPl/dfLvfz40/fLl86jULi2LT8T+fhX++r35nFW5wPD2bfOrYXQTzQLsTx
Eb1ldTBV1HFpzQs0GOVq2ZTeKLYqcc5x4fEoTJVqB2erj5atg8Galm0lvoCDqaCWLYmM4kAlR6oj
Np2MlrXBKFea+Nk5udDsxBknUwzAu2VbBEfcpcWx3lg80IHdbXKBepQKZsiyFajxQGMbx9d4xbH7
O6Z0tjQqzrIVYVyJeEPXzYbGlsURnxh43XjUs4tcKVIU+wE557kCnhHpWDC6BOWqNJzbWhkc0ZsW
pDqmGD4jeaF2MGiazxyMB6Y7OL4ty3J2JBt3gcBJqRaRPujM/3wtbZTOz49/uXz99r7RsER7Wpmv
A0CUlW85sG/2FVySC95Iq8Nr4pt1LZsHROKBWLGy8g5RWh1aDiHLm0cXp3gFamUaC5ab5rhsHhhd
0bDKxEId5hUClGQSn9s+khuWCt7xit9KRgdN69iaW1ay1WihyNpGX24LrB20TGrA4Imai8Iu4Gj1
ALlU0t4x8faSlZRYdIKAwXj3ASJO0v0+CeCYXL2W6A2IF1on5plLA2vzBekLOJIP+NIk58JjtSIp
UB8h4iQL3a8fwgxRoK2d80+D+hQ8TwOlkSMJa534VJxjf2AqcFJcn+A4R7nB6tFxkZp4oC+qCmyY
fNk8mKCe2EnW8UB/UhUN3LwV5mjHwDX7XjYPwEk72p1ZbaQB7KSp/GaG4LJ2BmuT7u659NPvnBwM
QKfNpW3v1vEQ8MC+rCybj2DzbF/7KAXp53rNTv/h5eRgcntM8ORWGPyeLNy6NL08sKMu44E2wipq
LoweD7SMVoFtdr2cHa2euYkCUXoAnVuWVuC0J1i0aw/ZDNjXjqQmAS4Fayd8X1YY+B7ZuRXL1hNY
PXBTEMbrxgPfaa//rdEjd+pW0XLR5FGtYRmR9+CT/vSP/2P41cvby+Xp9H75+bwP6/ryLH++PdEW
v/6ArWT59ov+gDdlI5sC5EdTCwAntk+eP+AI2hjg1gWvxPKV8H52LAB4MhK4B8Bsnrg/YCXaGOVL
iwA8w60Lbo3lR0P5A0amDUHePMB7tJwv6g8EXix1bNahf38gdmEDJlnoWtjEBXP9AXfQRi/jLYPF
tUSvAGuJS5X0B6JVNrLNePyBkIvlIzbTzgGtpywQq8VCwkFwIdxjIxYSgkNlg4HSFeybj7H5A/67
DSKtaUiqSj42unCN+EQIHtiAhaPQB83yIxW9GKyyaZ/VPKnwEoG+v59vl/vfiIaWXzKsTfx5tHye
beHDBlwS9g4IPPkNyG7er/Ru70BseK7W0x94YLYGo00yLhzQE/Krn7WAiuSnCOsUxDo2qzxbpusP
PFBba+DWEcojL67kB15r2Q7U06GBnPcR7loyBvnMYy+++FkPpLz8ZGdtlikVnNxFuLpDJQSWj7T6
A9kIlk8C8Qfe5C3/3ufFbATLtwj0BzJIrOONMfmd1Fq2na8/8DBvTRZYFB/devnoSLp4iV6hJekw
vUr2v3VQSkgGvDMSuUOF5JVEcgBxfm8WzerdPP70crp/I7q9BUtATJJkwG7Gc/kjIU2duXiDPxKN
pcmWWw13ILilNRcb80fCipqdqzghDsR5aAKv32/dsZX/Fdoq+eAgBE9S9+qt+d3iIMBljIQ1+Hah
DTw4SHWkg3c7h5bSLMmoTua64KMJzXAPe3ApJKkd9+IzrQ6C5yZyQUF/JCioDDy5FLrn86H9kXcH
kmRaA9h7SgfApAimJ1+cEIw1GhKbFLpXiov8e6kEZ1jbQz5hDeAGHGTRhG58w+A7gsEhcGXhuaUk
dlo20KE36YVPsXNB/ZEXPpoR3ZeNkGRoLvjWjD4QQacJ/OunWS8/EBorMypSSB4yqvTCR4omisAx
vdWBRtN7jTaP8lOP/3R5Pd1+zKnd++mPqtguf/7n/YN6+xcsZWwM7NDtBi+UAERvOfk8rw+E5LB+
5qYVk/2j9dk8frI+On9YX17ewIOlXeZIlmzdgK1vZrx3URfA1tOB9T2AN/jqsRFqY2TnvE6kA2sZ
ometKbI+gCcTV2tagO+d3wJ4VkuR9RM4P0lL8Ks3XgKP1vecvCb4Q6TvuYQQAg/W96x1RPYP1g/2
ADyiv4hZX1CX0bPP5BO8xfhzEv1qDM9atgQe4d/s+HeW+8PW/+0vXZluZcbMjjOCGrx0sO1Y87yB
lwQTzV/wK8uVwAOZTNNWzFYwWiiTowEy0co0QZJ9qkyKva2DO6VJEIY7OuCJzDqoBB7IpMxOpCdX
D/bPZ2GQ9QH+UpBID8u0mIBMsbJOILleJZhtXe/8AJ6k+FWZZPfrQ3MkaaBTrCyTE9IpVtZpyYr3
B83B5IA5Z2WbJiGbwsrmJEkz3OsEK5uTmc1yJPhH95+BTrayTUXS9aaC/EWmm8f/HyPUjRjrV4Yf
DqSEcIIhLn2vOaASXGND3JRexx8lRP0MCX/1WqMowT01JI7EwkuT3jU/FkgJ8TdDIiq9viqKD8AZ
EsnpNbxSgmNvSNix16xJCXEsQ2Jo7PrCQ7CyCl+98B6raKunnVAw8qx7bQ5cHWirbrVIenDiNRi2
oYSwkCHxhV7zPyXERgwJJHYqh8j+wfpg3p8Swt6GxNwR/mHDYC3Sv8H42wxGSL39I9EX2LE1SogP
GRJGXqV2TFLdPf7++v37qSPVXemixrYI0bzz4UQLPWnNZcTP0AZAs2m+BRotqxCgYFsmvY+OTlh8
/Pfb5XuJc3UaS5Uc2H/7/Nfz0/vjH18v75fTy+XvZ4Ln4Z8RovmOThUSWXPJ8hGOBusArBNg0Z4t
19anwjpggSWbWAuswCJIz1ULjKsiTEUuBjqeFq3LPoyN6yJM7e21iaYGzv7j8/n1/fLlcr49/uX8
5Xw7vz6dCeGgVpn160az1vgIDI5l9rVK89ZCrYn619v14+3y+rUjPIbfwD1IkmMbME3AAQDzoZ8C
jJbV0rIAn87wPBGg5HGK5+IgdFRKLsBlYUel5BxP2UFoDZTc/mVhpoFBYt5upx+zULuvhFoVxBFQ
V+ZvsMICfNBn0Y2T12ARSwCyq7CA6sjb/Tbg22DBNRjPi0QniGLDO5UNFnGx40WAw+JU7UIx8923
Rjzv3y73x//7/OOX6+2ZXL0WZK3OXKGNbmFHHjLwF69r01cAm1jd32DRjklUprrJa1ioz/j8AY3f
ZxJ91hs14XQDadAHL6f3wcw4vezf1NLcKOl+Hy7p9LoX0Gk8M04Y0XxrsCRH6OeG/h0mTw1vfAaA
NqzEHGFBnow2Ae7bgfdMTTlmHZZPclR8HkEwgZvcQZkGKGNLfJcrQ8/gmjxE99Z3CFaz9ZYTzg16
wdd8VlgSpMI8RJC7b4vGg7YPsFpyXDyDjXsIa1Fv+ra4ROkavsFrwz4D09Mj9Hku8E5P4MEHFPca
N54AwPLpNnRxRPX47qREp5wh00gJEDnBy7No8qEjsy46Mn66fXT1kXMfKPKApKTd/EIPeUJPAn/k
8pDEScLpgYIxRlYwgOeV5nLM6N7RByK8eqklQg6C0NI4eUZry3m7I+6AzDES1SFhmeDGEbk4WdBA
Oa0c3LZFY4Icma9TrTHdmrVPZtHomF5e7++nwVe+fnm87i2fICpxTQIYm9SWCh5Q7qJ2wPgIQpat
tpmXBgNwhNt2GFigZs0HMqa1gRgjLvlOfwQQ4ZrHvnLLeryshsAA0ipe7gVZ9FgPF8ZWHh/kWtZG
4A5uPcCNO8eLvCDb9DbAcwdMoB6uHfBVW2HjGiNNQ6R5jDS2qfV02+jUmNIiXnkvqWdpF0dp15Ny
UeZ3D5RvlIWktzwlxKJ/eMjEJdiMC2Py9w4uLBGC1xAcQSouAFQhEa4irzWjLGy85yJACzhaPXBh
vFQgayj39H6+tWDB9fZ4/q8PElggVOUEo6a8N3laJrV+760fQM5QheertOgGHNgAWymVWtALvjd7
o+D+AaRmx0+PC8OHYq8T3LeVRrB7w45nHdeHD/We72w9XhzAudPw0hx4oPX8wMJl2+jUGqLNgbdR
79iS4RE2AlgnXxfKifGWG780rg1IxSlhbSOQig3w4FYadO7pq/TWhXB8jK3tnh3tuPAJYrMgXDg6
d+JKtemlAWKlRebdcwMGs4ckG0J6PkJyiMWThDokmBOiVyvNdvJ8i2b6gQw+4AUhAyaSelJtnnrc
BtZ14QjakYiKkNuEDBJPM1C2lprDgdkK75WwPEzg8cYe0UuI6rwgbIzwAX52wCIwALjeNxqYDSC7
eStB5o/l5ZonFZdFn5XqgkAVKM4e9aWAbsweLeClOCOaNTgUD/UDaflAKQwKcbu+xevHGbwa934N
zgoHTyrgKnCRE7m7+cSvPqbd1w8UzRq2m9d481YAdxg8Lagrk0F1B9wA8LysXojAdk8P1h8zl7m7
B6ZjW59gvzB7n3TAAdLygVJYFHof0PAAeo0B1/0AIl67pj7XwQC6Abem/bQjXkB6a9oNag2LyMbI
LKsh3onIiIX2dttWgOcI0QzAcQfswZkJxRaxsccXElZzrfHMMGoLHwGsPsItEWxeLYv7cuHbDxgB
7VmiFgdgiahwZQNb2ABOvmy81B8yIh5cW1oWL7QXbe/aDNhAhFzmINLIlaf9lUOno33ACgomg40T
2LjXL8CGaXhTArkC2ByPkGsGHzCQYqDT0Xa/MGuNjujuBwDNJnKEKuyIBWTGENB5iQF1bB9zwM51
WXOp0mkasA6sNM1biXKZgUuBSxOnmwdDDzLv3pgD0ReXEu/emAPencsgDmKEGIqKvEtthGCCchBz
0tCCpHjvRC6PcMnwTp0RwjcqQJKBTp1WcF3Rl3Z50+MybD8gxWCUOkIwYCJMxiQvRlq1RHDAp1JW
4FY87yE5GftwnE3KwtWD+JPKAsmhKAgp50mMmICTcHJGYgaNRZF2DUKNKsnCEQ6UySDgKNcQuW17
0Z14AqFl5QVKwyOj+PbB9MLAXJXs5KMj+RaPcDkYWpXjkQOA0SzZS+QOkG+wUpQiN0ofEFEodOPQ
+tL8prSPXE12j3v8z9qaZpc+60aD6Ofr5XlvCDl5lrlnU1crMJ5JS7JHNnkUTuiTRh/X12TipMZT
w57ZlnpOnnjv2ad1J0/ipkkrHWCDgaO0Mhj47NlyDidPu3f7dlMTYX3yj/9+O5dB3P98Zgdxu1r3
hQSHyWyz+wqMWxArlucnYNCpUrHNUV0rh+L3zL6nTQdGwGyUd9oz6CyqHNyzYIWa7CGyLeyuqbR0
U6Cvp8IoE6xvky28aEFCmhwknKNzB+7BeEKaASsniVQQeSsZaWhttwOfuddN3PvHV8C9ThIQ0XEp
3e4TLFPNgc1vcZ/k4tocPK9+5DLXTMd8bQnCSWPJ6bSoLTE6eSB7YDOxp7XBxunEpHVd0QQMVFg0
vCJxQoFejlbGOFBiIcC1se6NUTo1WDkquHFs5tCRamZ/11j3xsTbG04yGeI+ZX3m3jiadd8vrx/3
HuNGQS5ZzU6odUJWXZNMmddDERvbVrP+/AiLtg2UZxQ0r9Xc3AonZNS1Iyd4ZAQpbhpoH+3hstC4
stoy4x0mWKB8WJ9kxBZu2K8V9xjtxsfo9x9vJXe9Q7w11otcD2BMW1zlmH0UYAE70zacW0ECO55l
77iaswqJzX8fhC0j2MTr5wobwXEtN1lwhAWeFmlbuSmSG2GBsOdbPk7IQpgGUjM//un69fJ0enn8
87/9R4/wsqRAs+eNlnygd7DifbEsaf7Mdv0a18aIof3+tiSYJd2fAQlmSf/SdnedlcGeE7CUsmSl
5XWhxx5f2MBMmUsndmPl8fP55fx+7tERLHnONvJiZCrkQ9EAQERakJykumBnR8l9hLPN/H0I5eXZ
gfCJBon0A6Tj5UErXwM7TrwcEorps9tXCs0UEEYD7O2lb39JHSty8vwtwi4bmU4tXTc7cGJzj8yP
e3Vy8dSc/tKVf0Gmn2TgobHsTWwnYic2YsnJccWzTmxNkhM7I8DJNTnzo3ynpZL7lOam4YxKSpJ9
aEBoI0kW8bbf3x4YGIjGQ2DJntaZtU3TgQk9ig/KJGiN8/UH05nRsiBmmGSr2Gje9UmSMU/rHjY9
6E2b2v5/nV6fH3+6PJ97LbpMbWbz9aPGev50ub/fZzIzY0cZ2BeIGi/rvY/g0J1NvAmxgIP2MJmt
5R3BDd48K3mW1RG451q5jeC4pVJ28tlBW50cBcwbjHm2/Hq5dwSu1xGQpVuqGd+QXs+/7EWXGZv2
gXNFtmuMac9eLGRgq2nN3CuQB940UjBrYNhpKAAqlp7MUmTHZ0y7BgwQ2QEWRnwESpHtAGDEt6u0
jfH6HTAgfRo1TPuVMd+ExLk8RnyvSzHwZG+EBlokurzp0D3tGiHbcC5oSRf5l4/Xp9LT6PH3p5cX
KoKt9N3kOOPdwInWDTjzMsRKHEPNvi0FWMioMXPjH6ZlwQ3yxqqZJ8XywF4CRisDbWMlsZaMtDJC
dYD3hDhtvecteWBOSwoeGMu1FPc9vCaCL11DS+H2+4/H3z09DSbJlIPw0/jPwsbo/Ii1A2fgCMoG
nLguV2aeRcgDB64afto2YDfvebGn8US0QfoYCIypz1te1GtBu/HDcqZdZ7BrJwGDlX3kTQEtiSdv
eGtAS6zuM0Q2WlbxNqWW5DEJcu6EucbzFQdgKwGDBo80it2nLoQtB1ENlarbR/NGB6Y8Rl+/3k7f
R8nA9mwsflAKTCot28u5QTHlfQ40X2mATLm5A+00GiCTDQir61PQ/YcTNfh056ePZjpcX9/Pv44O
XG2P/YfXMrr89evj7173vzf/WvnFn08vw8+fpxa7ajZ6wVnmOppd4vUMXnxHDeBjP3uawkcAbvve
/mp5HpwmJ1LRRME9WF2vpjrM7EbBHQBnUrAp6jWaTJD65QZ0+QCWN/LyoC/7NrXRd8BBW3aa9xN7
qDdoVrpSm4vv0Z0FF5/7yesr1APUpT7rU3AwkkF5gWoNp1ANqT3jz27gQAKlZJbN4Oy+nyBAVweT
UJSTGZ4vk5lfnPjlNUD9/Fg2cfys5Cg4EHeJSSRf0Y0Cp4+7YQbzBw6IK9tTHHVx/fivL9fPexGu
QaNzQ6LnXSGiQYt1Qx4rKCltj4OWduvJIlMaWpm/9s/nL5fSWnuOU6raT348ZJsoMB9TCymOtWsx
faNaH3Rq6Q9nC1lmXiFdHYxGskyDuBncwM2T97nSBcLuNo9XN4zXQVcHZ3fMyAm6OgA3QQC3+OKY
t/UZHG+e63RHwcFMLcv0tp1Rh0fSOd+PVNGzI7KxcHUhuh1N7rcao0QLzk5elFcNRum9A3CTBKqz
ePUknx2RjZZpHq3OeK0UdYjq0hp1PZpHVBf6QV2KOsSwAVKdNMeNaytJV0fCihkNSskGgJvYT7BQ
tWn/T0/Xt/Pj77+dLq+P5VVrNSXkfn2pDg7RDK7qMGARhMSZwRMwMIZC5qyRCRjY/1sH0u2AgfUe
QveVdIEFajto6chAawfTH6W2AAN/LUTOfpqAgbsVPGe4TsDA4g97T3GBFq0k7/h9a5B6Zkie3u5t
WI2DUzBw5CksihfdLVussGl+873vzalUQxiAdJPi/CfdnrtZyKghJFgzhv4MxRHSwguMy/WvImPL
aQEaY+T5RciGmNO1d/GlBRitbFguTzjMNCeZd8kOZULMifEdn0BL2Qhz5ccuujUCA5GWNESzx8tm
uCyQScnsPNKtZED8ablQwAQMNu27ZWoV1j7+v6fb5fT55fz4x9rQ+/1y2qg2i0anRZ15qxu+zUWd
+tN6RkgvORuGd7QmcOQtWLhvL5m8jrcapbfBSMau1M7nZgeMNq55ixHPvdZxlwi71RBINyVeQwSR
AvM6DKfH3CGVHv/jx9u5Od9Tn9yf3msoufxDI8PWERZVJs4zp7ZcXUHjJwCo+gWgY888HszwYBoV
fs5D32YNkygoWFGBFQGc7ode5p0CUKPBkuCEul+NX+E8OKHj7zCB1XSXMtsuob5OOndt4waqAFxf
21a48Aldou9aeCOZOrCiQvSNVoz8itpingJramhRJJ14osv4Smw3cjv24OSPaXlSDZ/AeqrfYnfa
KTqj4YkHLah5rGZ4H9oh4kFLpp3EKZBTX85/ul5fzqfXlcS1gj6ImRMrVrBlYuaYx/LZ9A0wMnds
kaiOzOPh1C0UAKbuW2gaLL3azvRyf1/hLAkuWoqZwVmDBFefOEmcQPmWIak1lNzaIdoYl3Fq7nyM
4edlKGp5zy1z78bsmcv5XsMg/+P8/u36fJ8OHFoKJ9h3UIwmGEExvnzqDrVu0AZymfcMc4bWUoW/
I06blDW9hG3q/8clfk+hwXmDYWTfgi105Ax2HvA1bV6o9QYUnTjwiIa9luZsjr3orXcE3c4UOVsh
jHkkYFnLcGGYskh4UA0OazHogqdqfecNZaDbQWf1cNWgGZUxoRhJK8tfD5+bZEhK1Db8Mi6L9psZ
3RAEfmeCCctBEcsDWcFXQxmSqVtvlTixM8cigoi8cEORhBQTowumowIzKQZGF4bWKIoH5JyWChgA
YOQpsI71AchNuwyECVaSpHTaRVj88wRL1AwZxzy/naf/tVoTkKDrBtrLQWkW6vvg3X7+eD8TJSqI
K7UmMXJlmAldZjGPpZzbuPqJ4h17jK6f6pRgiZwhA7j3Nmqrdv3P1+fyVn9+XllcGvmTkWY+rWgW
Ijwmjr+0QAGRJnqthJAU34uJU4XSm0FMnt+tA2CZ0SnSO0NM+4q/dlGtGufPHy8vqzsy2DjfHHy+
IyjuY7aMrWNEv8UwBzei36K7/YymEWF/OX85386vT+fV6SOeemaD79cS4fFeA5jnwHD5d3D9NAk8
lmtYr9+7p6yHENeWTNySuM4q+E1SRVodEgDSlnUrMRTxrMNhyQ16MoEMAKyfRYBHlg1grlvoMw4c
48GscBkINbmbbVGXjGDJftn3uCQ64j5BonGNH8XF98/n24plvBi2o4OZVtc7gPLP6Mlaxrj0NZwJ
1BozGqVBQqmRrGcku4exUMNFJr0YX3ZcaBq7CobzMjy076ziwYARazUPplFUJtnEmLDYiTKRRyhc
j6lwn+8ebbWbPTHfIbKj+m3aKygIhTNzs8ZDosv3jOXioYVuEqOGvRghthmgFYTerdvitL0k5SpD
Ss3Bz+fbfXrCzMV8vP777fL98n75eRQxWbTHUupHYrJojyWaPUus7iw+06bkulJtggTXQGzAvBgm
uRgm1/+8vL7rMB08zm2o2bc6289UWmBBFoLrTwnMY8susGhksBbn/sf8on2iz7At2rCkF86Jtpt5
WMRn2QZ0TvyI6lQ3tyiXcPS1PZpO15ykJ2gyk52mbFZI/HCu+q0MJki0Zr8FT4Zx8wbZf6yfzol2
2y/hzjCVp0H2J4xnmMfTILttinIdvT5d1OPv3t5eLoM3+359fO+ZQXkcEg9qFHy3a/gImPFjvl6L
GruCRbxmu9lR+ZPgVGe3cVPzChCJlNANJY6AIM/H7YsgCCDI1HEb/3+9IsAqDQDtkQOSQ0mkhkYR
l6tEmUFqF69aESrKwNmMWs5rhkTM4bq5OxmmmjXIfROKxh3DVq9/fH23ZqJ/OYM4MBX6uZmC2A+i
NfYraeShxqmwWfOwQtJ0SIGRZXK6d0iGh7W4QCHk/nT1fKC8ICTfdYoXPCPY2G3eUGEFSIVOC7O7
A+k3QZPD84EimkDbTWRqh3loADUsq25YJh+ofwm0wcbomTfWCKMZt/AGbNEWsmU2EXC7upA3fUId
AZT4KUcG4+EA1nK3DmGEFWwDxR9WohKmq9OIKHRYjiGCzBC5Pyg+l3Nex1SM6Z6l/jaBNARaC2Kp
DVEI/WKtChngmtEx0s9IwbXI3ZWRoqRR87uFTThC6DfBzvCtrK1p1+qR7hZzcrA8hhyGjDyGsE4K
htGFUpujEBxj0YuxxKC7PREzfHJtuO3Xu2Wxr1IIa1lh9Xq36JyKXzNg6tt3y2wsOyD22kz3iWPb
eEgYIWC6CWTYCMmQXmhdSIfd+pQ5L9lKb6kpMU69lTIIcuhFIgfA6gmNPs+X2/X749p9tdULAd6E
5nz3ColT+FVAsBo4Bky26AQJaoqYvvEjpAVO3jaiF9aQKEbhunHSETJAp0LB/WrgdekEcQQcPR3Q
fg04aaczJYEEdXVaoyWR7637MfZpswDSYEhAuAYSvcMXahCsAaRrItovyALP2nESBzZkavu1u6J9
uio4qbaQdIEXbhS8GUC6pl96N0ECCrS622RjggS7pe8umdrbE3sj7CYoVDAl9ZMqph0DSKZEY4IE
aiQjQCCwmTEh0zlRnNZCMQZu1GhEfwaIToNFJ8BPYkJkbUmAIJMRyeNyRabFyggLKFcrqAwx5a75
ZUP1uFKx0w+Hmk84uYvpR5Nhb0NDGhd3lIz4lBQhJDLZAnevUl5tjt3ONRnOCTGkxWfXTHT4CSdl
1820z6UirEQFz18XC1sauBRiZjwhabJWiInxhOAssUBavdIsjswXgjSwyHgVeTg0LZbOddoEiONy
8Z7MpRg0MM+Doajx2nVbwmMZZchEHRjvK+OiRd3taFPBQGcLvU+sac/E8fFP51/rEJb6Uvy69P6J
n+Ljv5fuuB/LpNKfIn5EDLafVVDBUGMzG1w/M3uCDACy3wR+gkwAsp8rOEGicyYIacGaCkIasGaG
GPJgzf60xwkyAsi+zTpjSAHQvrSeQDOADF3pFz8F0ndkJsggTSewwXCYC2LTuWAMQ9EBdq9qsIFf
1+DUgWD7dlNsOeICdToeVsMZ6cOePcNNAfaMarCRobMgzUId9tzPm4rCSI+2buJhhThQsIbhxwqL
cWX7XfEWukK4gneEJYGxaM+CFPGIrjAf2X2lUGPM8lj5t/OsOHxtrP7+cStZwPfz7efz8+P/vN6e
Z571rTiICfR44jcU4V5CuWE+4wibWNDJP6p6oWDZb0ANALULaNmA2YAyQThPHIC6Y93ZMeNfeRIF
KbDlUSBu1zUAU5pgSpW1t+uC4zqMZA1AyY51Z8cegIYFyfWOtof14LALbHnrCWkLmwGS1XrLu9NG
cLlpjeTtcSM4LgEd8B225OgAqJ9BSxaGy9sdB7DjiLGsHYBd1m0J4FtYQI5KYxYygIW0E24I3K5W
mCC1AXu2Ap4B66qFEcprVdjCGrCuthjPBlCkXsiqvMzFnZRLAHYjIcP2vIADVRDOC3ClCa5yuacN
bACsEPGWAWUotV5VbU8LMKWycEOAAzXZcipyYwsLOFATDsxNqI+qdtDRnFIFLd+L/vbZMvaoxxFH
nwMC1J8QaD8sNoNaALo3RSccmMf/+/zjl/XpDZAQ1XzRnOkzwgJrXHHW6QgK3imCzizyDGCYBhsZ
a9yj2UgNewmfFiBKecbrm1YFNqJOAqaAy6gDSysGMEyziRXje4ywiM4yY8ZPNAWOqxLjHk5bBm65
0RhViJOjsGUQL9EGEwYAVQaTMnjPDFox8YAJFoQhtBXWBVjWGhMGeDwLSmA/8HwW6HNfd10gMlTG
VIXiLipgPIMtK4cpA2BZacYlHUHB5Sq7ryNtct49/v76vTbLnKS8ExLA/Hau7SxCnDACxpOe0TQh
NMLGrhXShm4J4bRmBGvGboA98l1kGlg/EzTy/cQaGA3nmxriNmm9V7RoP6oeYSOWhp/Mbxemf3ln
ugmJEbbKaWv2uylOazqwpuMpSONzgtuEQ4A8LUImpU6xdeviweiwpFCfqOJsKNrHP11ez4//cb59
v7yuQvgWNo/3pFdCdYiGvbkZCbVHFIgo+MUrKazoDAEELSw96WGzt5drPysLNxwWW7v+zxFY6GJ7
4voN6ztPACN3aZ488O09kgYJ1kzEMSgUbgkky4SetB2ZIekxA4RMhgmKWZAd4UmvrS6GQDayJ/2f
6qqKBgOmK0WwYR03iWv8ooiLWruoaUW9mPK953ccMYbDinx9Xp0Vk35QjJs54RisGzxPh6AKwpNW
SvuYZTstCOIlLqplYWa/J61+KkWpIii2mEKnNesdm+26AMs+rJ1qtV0XYWrhgkJe2ax5FnB7XHiA
ThEZV3V41UXGFC26wpSWsMwF4trdAjwlIoj9hqK8sGpc7rbYRXatOZAgJkctnYDz6qiYfdxCjLoZ
vmqrd9CWFwayVa9ukYxIijBuOXlai1WEZMWLC4f15AJZDEiXVvtFytnwFOERYExMfBS1Z/akfWDX
HrCf8DlD4skwYAVr+f1GLiXAk5TyrogwAhV6x99oxCrW8zfqEdPEvEav3XIqIqP9M0yzHPPj7z7e
r99P75enx5/O3y9P15fra+mHXjpfTr3Q669pjczaQP2UlVlbU2PgJBifHONu1CQeD125YHjYCHes
PGPC51p3yq8ZdOIhA64n9KR+ko5JGGGx0xEyv26E2V2qX/8xYhjC+uB5DGuFBtMG289gWi4W+KAB
bDnCJDhabL8/bMaHjYz/OnIAqOuhA8jsMvJ4uVl+rKwnVTZFp9k1VeAwSE74fjSgCzL9qlYfbpAM
apGURTygYSiEVtE5GtEckZyAmDHdUsuJacH10CS87aJeQDFtVOY3KA78KMom3BITMZquB1DydiSe
3SIZ3K0nGZ20Qm08cMBsYHkWKpsGhGECE8eZhCPgeVK9S7NJl/NmcNzAE2SVNUCw+sxzfYRUpQwv
zhPEE8klpePVZyZAZBF4coyQfUjvkx0T1MsBEagcBI4HWjoCLR34QbSNgcBpCy0CFW9St5x9pAkc
VSRdBneSpiwLiMJswst0x4gKtYAkgGDapsBvRapiszcdSYvrcl3lHISlhHRtwkIm8OtmyADa8ySR
IQMYzXN6k6hAPKXNtMa8A1aABTast7tdQBnJ8FiubAsog9brb+WxF4xVD1g+YW2rkcaELRF8lO4I
CAtSuN7XPsAsyZFXmBrXV5MJqjtDt7IfoEgL3RBgXRsDuQDpnig4IYAJouJXrWYFcmAcMCuwORPI
m11xKyxFMdiuN0hA4cc+77AzAHqGOs27wxrqymAztr2AdLMKyQl82IDcCIAjxQvxhL1oC4UL8mYz
bxZnaBDojIgX9sTwpOPDjgA1bvJigQ8QBDuEtuRZ5QdkELZ35Il/2+huWRWpuq4cHUAHuD/8evr+
9nKe3xiz3Hk6JiZRYYIFrcxTf57lAhsBrGWymyZY0J475m43/AUWtRhXTHZFlnttx8ikV0ywAay7
yfeZxgbMwgMYVcYJTi6ybrLqNqlZAhhAK+QsaAVguzrgISdsQyreYgZSgPSf3rkFAc+c9tkJRhGI
BXha2mk3lo2GrnGg6RxbNyhCNaYC0IAKgpoM7RoEqXi5BaN3QTtkOVpMhcCTjxC9CoSDC5KAiDax
21p84TkQ8EgZHdZAUzft4wBNvqfHP13ez7fTy1TfU5oS/+X89ePldBsE/9vwodJgeP1bP7VfQzVj
nnR8KORYBGSaUZzm/nIgGZ2+fUf65JLmPn4AmryQrp+Jxp3Dp62pd62rbkGqt5U664OzkyybKkL8
/uygAICkvHTOrvnwlidtjefHtbSCdqBIKpM3vXUSyrJtkBVP0jrWpU4jyjyGViK5gKx6ku5QQoMx
7aHBuUnqQdHHsXPZoPbBkaQHQ5/qlnODnZO8qhIpj35/2YjJFkIr1kCy+52Dc5PX9fWb6II1UH1B
UhjWr6ILkwGsWc/UbozQBmLNJCatZhFNgNasYxJrlhsDO6eJRKvH9iS0NvWkd24VLi5UHyHkPd7B
nQeL18d4p2lxq3y6hd4A3h2XFbFgDpzdByZ9a4EG56bJReX61R7viEuXcxc/IYXNuTG0sbuqnS21
gnMbcm5LU6qW+waVSiRboiNXHajlzCShpATlo91fNtCiDmpwLehga5kytiR0PPakjTazcyNocE+Z
zNU0YWf3VwaIzcQ10vUec0DAOIMEqxHw7jMSbkIO3tRHfJ/VuewcieXl3OUJKKf9nSPbQ6GdC7mS
OWzy2ux+bcSiC9ZKACLm/X0jaE8SzYq7ZuJeQCAWpxTnK8X5jjJGhoBCbK4FaGuYlKplbUCvfg89
egjDseugs70LII0WCbS9/KrGRh72FlzuDvMtsLbMEDjfLk+dPeGcQEP67Oxrsyp0wE0lIlsElw50
f4qKa0mR5iw0UDsUHBNWSweasYbs0c7NJ9zEJ6RuMzyK8wSwxjUPSnO6ODh36k88naFxW4wYxLVB
4VTyTDleEtKhDWlazdy3/oSbGAWNdu4EnCuuzcyyc1APGBXauf+Eg7jM/Pb53JhSvUXQ/hMOArOl
piN/48GWRiNoI9xYNOJ9o3N7pq5wuW9Qp5cTWtvhnUeVEY85QTLlgCkVypao4LmlNk7eIWgjNOsJ
EVMqbqIVFFrb8krXkKEe++eKJBTRGNLCD2kDAL2dRhr2mghAb8e3hz2HgqcWbRCPWaH1VhQoFTZM
iyqgnQsDuMJ2frbfUwvQoT4iiazxzqfBmwyPGWHnAeoxLWgDn8X7Bs9U2ot6DKydM8JarTQAOE8Z
SUVhQlyIUBNZQbbQp73QoXOHz62RdHCCFqRtLXxfngOsbZsQxL2NjCzsjOWagzKVGVtM+RudO4nU
gnSowjYytluCxbTmsJWbsETG0iFktHPLh2oMGbfE2sgOWj3Z4rUx1qLDXGIhtSSHdi616vMB61Ao
FaOCtoMRbIeoEYcGwZM0CuMcNskPCdprXvKBFZaKsOF9SBFzicXyfOPVdDwLZCtC2eKxVIzaYokM
aS0qJ9rIQKaq/dpTPMQ8jrOUOvEQKVUneN5LlFJXgt/TwbQnN8456WzJiS57tLxx6mQTz/EBHiea
ttHwIsGJKiDSPqluB60laN7ccKX9P3ajomYZy8FKtQodNFpbIm6buyMoKTRQ2s6yROhgRVTbuUHQ
UWDqEFmT3o19YoEK8ApRSxR2HnmjfFob4NxFzCXQjYoO0rnQHzc6j+hcUl4+I0qNgvsYAsJaEKB9
ZIPSTlZ9HtKaFP61EfFYwIozBotuTEtyzbChCic6QtFCmRoF6ODQjUWB1qITqQVhzYs3hjRRQms7
bKxEJ0DjkJzjDQYnhsWiEXQoxhrtf70xyidNBDRwNFiHCiHYjGhNCi55h+S5lTjUYg7FusQL9y3w
mEf3baT7hmtLj2I05O539y0FcJ1CskVL9y2cG0sHq0TLA+hvOj8hrp+1nBzo8GsuMWrPJSjjHNoO
0kOk94hLpGeOINstKL8/oBuLAqWSp8S8I5YobTyLRg8wNIG3M0EjxyKLxwakFi26MCsJ5L3nOjpb
5vF/fhucrMef3k5P58nNMjDJtSQFO9pIYCUwDGTZBuuYujsDYw81GVlzvfQMFJEV1nA1s0YcR+4V
1xGgjXAFNZXWM9UOBr7StNP6dR6/W+0Y1wLRpgt2g2UnNA+h1YKrIgADjfsG6/nbFQaoe8WVRhoY
GWq4Sui8uKaf1sJ1z4twFXhOEAbVe2V4ihQG1Xtav5A2exZma3sNOQHjmVQwrCsuDMzgbOsq/o6E
weleA1xpTFcucxXvBialNVhwv1agDR2YiiMDM20bnrk+IgbmGDfYjHgQ04bS/Loar+ty5qWzxvfr
Mld8a2A2eION6I6wnNSWpysnwBrL41kLvKAUz0e4uJR0elknlxrokrYdO6YkzcAgQMOy5rlIkK+G
155G2LGC1gJe1yhkLWD+M4CmMPeRTlY7rY37WNEWS1t54QSepzV0ex7AsDrz96MxDzjSh2dtFU84
RveztyKrXarN40/vp/dz6fFdAXWRWv/0cn36W7NR699hy29nbOwydgP1AK5fYjovaQBo6vYKb6Bo
q7577w0OrbcvuWzo+6QHxfTt/Pj+7Xb95fG+wuVP7Z/hdNDh05tafYI9C+YKVljTbwWywEYAm9hb
sxCHpq+3lkUtgHVdG31BlAOIMiy5NFiwru13flj2DNY1fZtmgUW4Ml3ds8AGABu7tvICC4iK6sv9
HVlIVNYiwrBwz7Zf67vAIlztbamJx1TlsV8u79824uqn9q9wMrRbZTaR4e0jbJlAgcBXU0rJW8QI
jp/C3Sq5mETd5sXRZHQXTH9C6ry2htA08kVU+giNEl3cKgHfrMm+rYzyXN3qJXy/cQ9iMC5uB9+7
PcrAdTGDHeeNZ3TsVZZM77ITRHiKaG39iW/T1yjNYnAUz3dB9Yse5q07uDZ5l84dMoXEshoctCc0
CwPTbpVBv5EaCjT3bmRq0KG1wCBMpceKyMHiyiBiwdNa3Wowjt9xmIZhTrcaydPbOoYO/VfpGTrC
nSdIpx4KBpp22GMwA1cOCp1aCzSuIxYNFhILeR/tcYiBUkn1ay1maCyVbMbHznBtGzGZJkgq20fG
tL8wsLZPWP05iHItqL8Erzv1mwXN0NBqWGUVd2WDgmjLsjQGFx4VgnbQ3FEZkdqwcYM1dxJ0GNZC
3gmKHwnzhIV5gDgzUAlpgbu1Ei0tROaCjajhzr0gl/gmUY3UPEZbxCZmQtaWFaCToAIx2pRG0qGR
KrBRVcBikW8J28wtQftjcksKq2/IpKvpdL07wxYTk9NMFRlSoh4oMhDqa5LJiToUHDtYfGyPOVy2
mBCxZYHLMK1mARyaPasqk55UjVgHCwfP8Mpswjs32InMolMCroywaM9owipYZ8G419idEs6t4cFX
BY+G0aPIOYBWl4MeMJEOdHreSiGAg+couzVIrGpZrKJ4icLOoACe+5UmlN6QR+eFvWOH0AXMaFg2
GiUqFGRwChZjhNBJY2LHRn5WoqGN1hZiXDhowmTzUamOfDqDxRPeuTWYXDDOzYFwDyI2jZxwLTjh
JsvSDXkJgh7HColpuEDNPqQUYPzA4fjBAkt7Gy/+BZDoup9Nv3JtkJGvRAsABdigaME1jy4wybr0
upAn7LB7guMHWQs2PvaEncOyBdt80Qu0gu5b4ShXwgZ+wrIBX7cRHCN8YVbWJMhGz6JMRGt7MXKB
LHwh4INtj+AiVgaYS7Tgy2I7ORvsVeHARxCgseWxKwWPHdmErHSNrSZM6tYh6eLxQ1EUjHTsyvoD
YTb0XhNkFwHJpiwHu1DgxoisggLKGYsI7FGa/UvV+F6a63Pp7fz+cXvtPJhm3NzdJZU5Fs64t7tL
ev2KpCikBWDsLWbcEX7YLOtmsYN92pKso5C5rJUGlzhWaVvNANTiUzpwyoRBmXbsbVnHGR4Z1w4P
y3r+OqE4SypwjJVxv/xhv4pfFKBII0JATbgGUMOxUqqs9Pl2Pv2tw0kJ4K/kNFhruHyIhMcpObua
Lb9Kd0k4C3AANVxaUALj7Ac4B3ab4EFdP21/xpEFOHJcvkkCXNFA2XSuhNK57HZW22q3Dt8om3mW
cCP8AUeJS8pJpS6Fh/NcElHCGZIDqAYH9fBanO223m+g6DojJiJEtxHQrYag1nLJYQkkurRVVTeL
dAZFq+4n10wpS+bxT6fP55eX8/MiN+5LzpIRJIcx+0kY46ft4x++v73/6IgjnLcX1G6swfjFWIXc
0/X1/fL6ce58OApKOKbMhfyioGIiSZlZS/soeXeZ1WuR46emmljfKgIWbqAWnxPsNrF+UUSmUcwG
wOG8txzAQXFmC4kHpu2tJIwiNlgQAf83UMN5b5HTW22ziPrwW3lmY49RSpDLHmAXkS2XaBWBSdDw
43hI7KPlBC4Fx8w6bwmj2HB09sheaDgpOTawZorDgoxN5nVSXmzYDN3Ri8B2LY/71hOsumwogcbU
TpGu97Sx8wSsQFdop2jj+bQMWZiAAwQmkwpKDl80a+AMt00GcnRWNjygIs3P1TLdYASMoAm3U9qv
5zr49Y4tBCadz2n3cXJLARzXdJvdE1yBlUN/oARZGdwSmZtSZyrkNXAElEXmtfgy+WSHLQuwldbA
YQcMiMNisjQYeINqt6NpDXDtMbSCS5MpEHQCxQiML1nn7gSJaWGNF07dwRnkzOCqyOQL2pSfYBtx
he1OMiDAiEiIBCkKX+3ODAibzI/qMHOGCxuF2BFLLp26kycofYGVyXiVnrgOUIqQ0Q0d4AyGRgxH
NpAhA5g4NSxMRqsUOt0TJyARkxGJJIDp2B0mQ+QeOC8dFkGGZI3AAFCb7mQPgigATMaSVO20BwaU
ReapdFQb/6bbsEwUaihiYL8ysiI03DdQx2k9pknv+B+xsIcXjPCsoO2RIPd7aEIA/tO2OxeK4Bhc
EJn5UnTyRsBnbKfp9by4vU4DbESmeBWrK+x3zQRxG7I2mLY7okRy1kOlprDEigjbYFWtICskeE1k
3loRIWFNHOCOtF6r0Q0xIzbIiDK0xjpUQYMlQblOR4XtGTBiPQjN/wg3rQNk3wDmyg30nCUViiSH
xz5AgQZXRQZHTeJu9ON8deMuXzpenBcCtCYmLojokQFWYZPnwp4eyd8GG7lQ6wAb8JZdt9FHAwXb
JQPjawMYt9ruJxybZCbGL2cFlbiJDb175FI0WIdwjAAtAAzwXiMJvtch4xQUlFfH0O2m0OBA9W20
3JOGByOQBzizi2wQ3ODrTKsjmvV1fhIiKhHcZ8akoLgCZy+E+03IXAjISw1QBmCPUPVJCFoFwHDg
sHEJWhVD3K53rDDda0C+CawZuSdELwweH9Y0XFsCL7xcmrhvTjMK5/D4x9Jn+n0VMLxPjSdq7+NB
eH+53jrSO9TnDaGgc9e+bdFoFT4K4J7NyBiXh1HWGCE0jkR7NgWnAsP8nbidj7MBBrFzWnq0luVh
bI8PYNk67YYtnF7PVw5V6PwJICsk8Z4ANE0ptPt9J5y9uuqT26ExAMmnCy0LA4wF9vVpxLfEHBnf
l1CtFSObLL0wF6JwfGkRn13DtYXkuhi47LiZUtHrpoVr41dKv06hMb07Q2srSKswPz3y1dKBfyyu
kC5hFsHLekjmDnG2t1CSaSG1PEbMnBqh2sFtg5z07YCSPbYQZbPFE4tQQMg28MAZQGaMKiOJg4Th
FQBl69kmULSugusaBOuyqLJQroIWVuYpRMNL1uApPnmMZkCXaZ+EN1lixcwtPXW+XV7Onb5VoXYV
g32CMmtGV2CQ0EQ6pm5KOCokdsgy66RPewZeEu2Iu6W7kpKD0320gScO0NshLRun9JsNsAcY05yr
1PYN7PjEPbKH1hSQh2R9rAqZwW49hAyohZRVGMkaYEmznaumdUEuIW0TqfbrJgDpIIpxJ7tsIDmD
qIYljUtrKmKHmAG01pxzOO0aUBXpUEm7WxJMI+DI5UG2fcN+eZa2XA17bCMOVFDsIFEXoNhwmPEt
RDSjJttZN20H8x5TILGRNgEOfTwj6trL2Vl3uNlPv7x2XXUH84wN4FMnEoCJPKOiaHkDdjz1OJgz
rIFQc6LqoF0e44b22hgBsGfDa442NALAKi4MOe8aQWcIbdHKOvCCzYm0aza50mkPjfYdIIEBFUKb
W8b9ukB/kNaum8DtiCseMmLKApCOywxvkOCgVjooWjbBq42Yff2uUmCWK7rKlefraJb2JIuW0jJN
4C18jSi++QfAddVSCM84CIwcIpt5h0gDhdqAFVwXuCUGxOA0sJjaspb3aTSMLhgNNwyLW1dDruz+
goE7ZDIfDtEoZXw1aGkbldBSxbpJEMkJLBsxQcGOVqt5fW6/6QA3bR1mI8RDqjv8cwZFW9bwhhDb
W4lxASWbKLEBWNkafEk4POgChgZX5CKTDj4TB7okkfPBo4H1XK3yvDRAmHNwaRCxsgkSJca02W96
0jzm8f893S6nz12dY2oADwQVPJuPDsMgxrGVUm1J0GfZsxa0ESr1DK1CW7sj0Kk3PnAhCCPUdRmX
wUERnAZw4EJo6ZpemWLY3zI+4jOCt1bvARFgf9h5zh9uqwLH1BtwmQn2f/eO8yqwL+wcJj3gCXsF
7hMhSHG2Knb4aR3sDrEaEJ7PAK04PEkKYTdBGRzNMT6tiXaJ1epmFt9/ubw/dRuga2nGgPZchkeB
heW5ho8TjbDgTHysRotTJag/tRnxoKXKIm3ZuQhaSi3RCu0Zt7DXbGLUCAuElo4Iz3i8AR1/tA6J
jOdF65q13+q26wJZoPcVzY1o/eOfT++Xn8+P//b5r+enKcXDf0qP/+P0/m3+2ydN/vgpPP77H0ei
nn7AawevIjP8YobVANb3L2qGdQA2CbAWwMZd3LThq8Kmx5/+n7/8h1nhIAFHyqdtZ0e32ksC/RJ8
csxj1gxrwLq5a3rOoBYs2x9HP8LGigL9uEZChF+0oW9PzrAACdTDomp7hkXIZ1ykGRYh0Pdf5hqs
fvzD6vwa7sMYdJEa4o6ZP7zAgjNQlyuRR4AZFuDd+H7HjQZrH//05zUFWHwKpifLDIt2ktEtWoz5
gDBvMfb2vj3BgBkwoNUKBazNW6sgpxYmA17La0WOq62wdlKD1QvsgMmct7AGwKoFdvhBtltYzcNO
fYYG2JJ7kcIKBe7xT//2r2bNCA5rhP40zQUWSWa7zvPdwSJtovsqdIZF2mQ/XZLgwBccaLVGgseS
RSOO9lgaWiRJPZaGTKLSDIsk+L654YIFs9gIpcL79H56Jegw8K3Ja2qSbWnCYJrQeh0jt3YL6wCs
4a0Tg+lYExO0yNgVPRn4gDHAMpGBGZanY60yT4sl77eg3qxw70FuqU+JCWrPsJoNufqsmC7CCzAg
KK7zxQIMtp2Z9mczsNFg245nISOwUAIGhRFYKAVeBYI88XZgJhw/w2YAayRMewCchIWNA5iOvMBp
K2cALG4biNjsebUP6kIarJIWVgDYCgSiEziyFlY2BgB7gRsBuja9gs0OXcaChYNAIhrosxwFTgaw
KUroUmDXVrplIAayJAYAR6V9hJyI8MEvv10/Xp9XMlzjL3qHLkBjavdBAgZ48JBVNNY924EsegcM
KNZrdAMaE463vAHWgIEY96bfbWcEDo/3y9r60QGa2FPvx6J+iwDQas19OmCvIiwW+vCDZHfAAQCn
xTXwG5ekAUcAnMnGywWq/drIpfHL2rasvwP2ADiufam0uoT0eP71bXUHCVqCxiOLLEELlE6R1jvR
maA1Z4ywLrAiTUDWa4LWq7ECLLDWaW7X6IVR8nePt9Pr8/X7mgMc5gC7owT6ycfT5/v6c1AyRI2M
DhyniVieQblAS28C6TQ4wtrHt+sv62NY9NzgVWbqlQk0D5yY1G8CDFxtkv9ZnEZrdtAGsISK4toJ
QJt++eYCHcHGNR/5HSfcApzFfvYpObUC+3aImSs0cux8/62PQAOGVkE6Nv+mOiDN9R/hFugEgE0/
qY4sDaQJSemu/uyeVDy4L+YNkCwNQlEZClBtYUyIy9lfgANYWfUfosm+M0CZFe8abJzWZuT+2gDj
OUvH1hHsXK/4y+7XBte17UqwJ9IM9m0lSjHAPFCpXy3doPPjl5fr9bYS7RlpmawSCkCgFto+a2j3
ohbuA6xCAQjUU32ANcihzsjFyNohrYp6wA+4gpGejByMrC3/glNa8Z62ljp+wkgKocDiOJtFRgl+
wqBFfHvKt9jZhEEU/PwRswCLXHPNPx7V2Qkv169rY0hh7meS8xdgIG8T1m8Kvxzkftv0BRhpKAsl
vcLmiIbCVmEFZZDM0ulxG6PX+Dk5wIiHTpD6Q4JmNX5A5+ZRLsCA/rkh2gswYPjgpW0DDggBCXmd
YFAmZBQjCo9P58vL6vawt2zc+gVwvZcAXw+NXocIwhYWxCbM4titulbOsCA0YTz/Wmo+4ZCKUcJ5
QVjCmG1UYwcNYiImEOgi6NXamY2PT9e1MxuRP6NJsUt9Z1qr7IjfqKBTEPEbVUa+Z8RvcrFfeTjD
AjdIeyTzIo5MqH4/nBkWvQVCE0/Hx/t/3d7X8hJnvNA2NR1vEKet+AhFHs6XCUoCRmFVLKkjFrZa
WhnpCMMnHdVEt++nX9cXgMNADj7EaBwHcgZZyhonzrhNXNvugFHulUM2qzaP37fRZYO/B41HbTAO
I7J4tcFoyBIwuoCwHW5AsGAeT1spaiBhxoiuE+MgOmS5YxRE+LaCMRDh+xS+9Lg3XOZsjZap/K8v
18+nlzH3c8akxhMyvLasG6PxEJEBtOtAFshPdkofGf44fOj5/HR9Pv/nX5ZM0/bz32k4ndcbuxmw
tyiP+QMZlL0MH4jdRkAEHp7RGNbRnT+A6sGGDyROaI0fcBA8OE7pLAdAE+u8IU+Jq7oM+gUHcUgE
ziopfP6CheDBcCyzOgJAAnkZ3AQkxy8YOITeG6oD18Gi8QP+E8/zJirhChsGwfpE9m3C0PMXDCbD
hf1duUVnzP4IAD5EznVZHQHcAVEcq2oG+gV8BpL67Ipd4YLp8AK4h8Amfi5bwHRAVPGq/+1anCB5
5Dm1s8ICwuPCDV43Mdr/BmLIRWa7olRc7JCkxwdRwkH8JyBTohbIyX+KANoKAsEIQpkkONRGxKoj
kBAzKJGOMDvz2cvz8QM4vpHFicY0tBzAFb50LnfVEjoCEQjrB735CEik53X/ytRhZHQBvM1BNQKi
gAUDm7e11RfAEWjORxcBGs4tHjgoiJaBxqYB8SqKnWN7ehWZBlok44hlgESIRtBKPh66RyDSadpO
177D5iG15GNPr9cRzOgSnXgCLM5JMUKd5Gld6CBB4XtYrBNXsOD2aDCCRKKxiRqp6nFEwruw3LPM
LBEQMSaBG7CJyTWv3FASkKo09Sz2PQWNzQvi3W4KClZyGaFw+YIrOQ9OLSGP8g37eH7tOUIWGoCl
974mnftXQ47IByz+wDJQYhNAHT/g0BAOHZcBHsWYdXELbniDo36ATFvYBH/nA2h8ALseA+K3H+AM
4Lb/BbrQWghbaCssT2a2FT53YY8A4QZzf4wQ2QEcGKXDcoPFpQq2+wF0BEJDFQ8dEjAAhao/4Itg
QLjBJNIwHKak6QAKxxwAnZ/MzkhkFhM5gPAB3Z+tMn8AjjjSiSCwWG25s31w/1Gv7993tw/QR+bw
lTybrPYEhGVISKIQED6wYKA2BjRZ77kYSaEgkCBneDfoJLAwp+Ea9EYA+C77IfSH/iTDtQ5A5B/W
81c6p49g/7k/doZAewAdRemLSNfv5pERtegWtfj76/e36+vSZ2H6BSTbCi510ty75PgBVr01cJI1
rXba0UH9XD8Ql/ULmye9/QDgrbYDxyV9zztghWPbAXkhdavk6wUDFqy/pF+XRNMUuxhA6y+vrIXR
Yt5+AEjX9gGyA9PDAJBv7QObS9QdDKAbWJ6nV8OkyBVq/IHlBkqWSNrdAGehNOjMvXDPx8fLR7e+
wdClIPCBsOxgNdyR7J/PSNB5yQwotJTSfnnMAXH5gC7OtbZxv4EINrDcX9XOuw0EuHxe3vlLAmzu
nD4AaCfePRA/2axrsv3+7j3GHSncMDUip/cbAKyTlcC8wDht1EvyQuiETXIC4fYX9NdGxyZ3+F+Q
wQsBlNTSvQjD4iMtO6iWat5jECAga4H8rSA/k9l9gOhIs7yh9XWkwc8Q1d4hpfq2+qirPRocr2lf
yP3ep/QLsNNPIKOcXK6+kN9+g2OVCk9yvEvEwrr+GcAOSDuYPhYMnkYVSApgRULqbAF2pw6k/4BL
O0/AwNBd/YBnk9XnD8AJYoH0MHPlLcBZ3TkFnJAVyEQ6V0JGbhOCNDCI2j5h1re5owXY4Dls0u51
7qIB4VGTI2jmCHhAXiDD2FzZkMudb1i8DdvvX7bZBKAoMpvNFfHhUgcXCd8F07V6Q9aIs5ZjNO7a
f8FjPASu8mT+QMAfiOtKI0Y6IBkZ+l3biHSKgCDzusqqx1T4AIorGho/AM8fleJqQebdB7D7xKUI
rsgQ0dDyBV/3osx+Bx7sIAr7Bw+0bQNaFIwJX0Dm8rvpDhAnWoGN4LCUQIuv1i1xVhSMlMtyByX7
Zc+FsK1dSKk/e5NsAFsZnq1TXNkI6BKXL7hi1LkY+rIIWSrLN+rjmu1gAel4NtN2NhIwFlajacuL
SLB7TgDXkL1Ah5w936CdcAdofkHIG3UUO7gDi6coshD/mNO+oLkK7NUXgCBJbDef5QuYAsiw3joL
23aVOjKxnCwIEAFlUZLhmR2BdMjqRCwNjCi0LSyyqBPUkmawBG5eDVlfYML9pIXFJzJLimEx2N9O
t/v5jyunqOWBogbCQUWuMllPKZmwkWfQQNqPragxjq3jdW7rfCvsgMyU2Llk4xGw6ajZcqgFhRmg
MPHcPmIA37LNAgbqHQBpQRvtho24ajm5aH2fpSvMyGLh+omT42P3wTJtZCn6wfrKCbvHl88N/lqT
H9g+mRmzM9mn9QH41mDVe+QD2nfMiKg16QDs0UZ12xSYMQUdG7ykd0Yf/Q7PxQ509o1nuA84HKRN
wKaKcl5fOIAVmMcL9GsO3QE4gg5HJCC4RMv2XFlQCIhISfxvP2ksQA+sDxrgh23D7tiVoOAOnTpC
BOAExvFxlOUDiAiMcIdAB5OG8buXp0l8GyC+He8xjxIEoc7xdv6Ce4A6BxzOafcB7D6J9gO+OpsE
zEPrwdOWGZz6AOhTB05vwepeALeC9tFK+EAUxJ+NAu8FgfmtEswfKygA0u90V12xaBDEe4prhDsz
AIB2VmD9IFhf1oryH1+BTrL4BOsrL5pvANolUfbi67NeuP+M4oUuy/wTAf9krg0CvTyk/aX1M4pR
kBkqm1JmevWIfaMsvDw4fuTD5qPtIrCO52qEdW0Odv759LJyKNEQjFrM4S2flG1ae3Y+DVZHzafB
js3KDCr20uHQB8AOfBb2bz/Bai8dIp9GvOwggA8YPpN4+UAEH7B8ccryAQc+oEQcsFGF9gEn3ALI
5Wm3oPm09HEHwgd2xbZbKgTAtN5tL9E11MptdS8yAYAOWaAgB4qLdPRH6A9tXiZgi8knHWEhhAAv
cIDBd+/4PPYRf2D3pDop95EPxA+p7GKAAeNHJxC9lshOcVX6FPEAc7TA0PUIX0u0Y0S+Fe4u7XZA
FJJ7vNz/fPrzSiO15CCQ1BX4zMYRGmS1BJCVOEKjhDKQ1jRCg3yukNYpVW4LjfMhg17nQ4b94iCf
KyzJiCVfJKY9NMjnCl5EG9q55TPRpoMjrC+5XLXUIa5oyLZI+b+8XE/rWLkV6s003yF7BNfQMNj2
PAtbcKxTs0KsVRKQYYGR8kgl1w6koDSIb9G37B3I1O2YgB04LI7SmW34sSAeCCXSsiLvbAELbGxD
k1r72qztHZRlKY2MsXZtAPEq8GXK0+aBMUB75bkeeERVzrRBIkexCHNRODo2Y1OW2Q3p8QPgQBmn
AxSPwBMyotq1g0I6ZWWiA2fPWQDnA7KGpuOyNweLMXUOwvLYg8pekBbYhEhOPjxYncyN6EoL9jHQ
0CxYVsxityVG+egA8ekA2YC+BMrwxcgG1se1s0dg/FZZgyg+CZIKydhl4VrX5/YrA82oDwh4ICSV
Ejg9olYQ2gnQ2FPKVmDUiGqWlSQmImrjoK0s4tDijptEp+u8kcv9Xy6vl/fzykbzvOXY9gRdT8/b
vK2WHXovnjfXG7QFgsPzBnMDVugivWDiTKN20bkRdERCy/MuUoPO4tqAfYxGBo4XBOY0g7Y3w00v
c151nYv48fp8/nJ5PT8TktKyPnEgHjKOiAQc6hKPW2HQo3aeJwotawMHrO5x4+jYu2GrC14HJ/6P
r18Ke/5Y4dKIW9IIG0bCpUU3YcSLNAgfBl8FUBLjxtHKjmsdrevM0nVMY5yeihrPJXQS2AdSW88b
tloOrtmIaFJ8HrABEYAW8Ghzpwng0q1PWNpx3Tj940/vt8vr10lc+FFy/NT+LDYC9IENGC/gAYCz
0puszmseT3sy+tUTJoEH2yfx7rXhRsAtADece77AA/DAOhsLeAbgiYtZkt0D+Mh6agu8B8s7+fBg
WJyPVlgeErWPmeMnsjzYfmTbOxJ4A+A1F3Je4MHp+aeqBRysHjTnNJDdKwCfOTm6wAO+4/vxLeAJ
gEd5dTAx1Ee2Fx+BB+sTZ7PMX17E4di9tH0J57vb+gw9NsctedZ+1RbDT42DWNjqbo+wpWOQ3cI6
AJsW2HV+t4fWkZ1Tb0bgdQmi580yOydcNchNfcmILbDl6rCNsOt6Pz8ltfPHzQtsrdfbwqIrUgts
mVOzuyIAW6O3I6zfwgJ7wc75VQhZFt+SXq8dtvu2YN9xBztTuCEUbrCOc7WYkB3o7IUnSVerIkmK
Ul7VFHk0hK3BslUEZOsGbJ0d2EHgefDEZjYScACf2ZHUC3wEyyeuoJEsD+Azm527wIN7T07YPczv
SdvhUrm3+wDg2RFqBF4BeC2vn8Dps3x3HoAHLjFvAQeESyfNZIZwAe5oFZZfZdYv4A6A+wNskwHq
2cQ6Ag9wTytBOdyj5TcSxxDh54nw84IAb4XVo54MG+XusYJuBfIjbG3aTGGB4LFzo4RRfK/bFHgY
F7JzTTqj77xgGrQiXsYm8VhZtoL+BrtpcjXCegC7Nkm82sJaAGsBqrEN1mqGCawltOIWp9iVeRfN
U/70dru+X99/vJ0/vV//dH06vZz/dP3lfPv96X4mxOXaVBBkw4cI3L8Z3gN4zzWIn+B55y+kfGBx
Cxa3vAcwwwP/KfDDzMgHIthAPLIBcAL6ZOS76EsAOPFxj3F13ncNmX1inaEVgFYS5gDatmPW90sH
ABx4n3vGOYCPQTw3iniEmLlnOgLvALw7QHMI9XxKxPQBGLQIyR/gOkQ5SR+heoAC/o2YfAAQfkwH
rhAcIOruwPXpA9I7sc8QAUYCT91BLNPu9V7I385vL6enjWjXQmVsNpHLzp/goe2fFTChGjysv852
M8fc7uBhZUU2jvcdZngH4IHrNJ8feJ1ZOxGBvPORnZHQByurMq3MzBsDeob3AH5TGJN68OD6SXHC
phMNRZ8C6APez7yBBDYQDtAvcL2zZtsaTR8A1GeBAzDvHlw/P++O7B7FLOyB9QE8Lcvaxi2W/YPr
MyL7Y+8568i7cO0DsBVSJpXpDDx0nzOpa920siHyC2CQVJZtRtZTBAABREcPsiQABLhWkgQAwE4E
hqGXrJzEvYh4SFlqLQnOPdyjuzfi6hCe9hVgaQcErrJOEvpg/59M6vIY9oPhk6xE8QMo32YJ2GLN
rY9gD+geUlNfwx/9DyDpaQ6cAMAbEQMw/JRJVeemKnaCB7RjEx94mxcH2FNBoh2LBZfa9cQgBmbY
25dP19cnko7ffgu7vtFo5IYFwQSP2svgHoBnCRysbaH7EdDwxmg8cj2CkKQZDTsJbjl2AuBGxloG
4FbYPPSco4E+fxCiNVFHYXW0dD5AbQrAO/6peoJ3YOuJm+6ygINb10HYPeAzOikt74RBEJLBo5GQ
Di7MBBQoCDBAFLeDPXcYB2ROxm5uM2IqKCBxa7oVbLPwlHKJEsglckgyeJJ/TdyVad3Mh27/8+2t
F7rNgCjt3LprjBvnTay7wWce2GX+VbkBRwAc+beBBpwA8BLerxWT+23zZrWde6YwqQPtAwEAh3UG
gOutDgL91u6C9Z3dgxcKZ9a4090PgA1o6eLw64rz6zSGLgI0+oDmn0mWDwAUOrvOSUj7D4DlvZZu
n1Vidu53Rp6mUg8evBJZf+D+wP1bs8Z/F32A92wU2UcB7KkV7vurow+45QNOcccHcseus2hs9/qA
9LBpd3372CtIeaPB772U9nspff/4fF/SU39aflOIMZvMDQ2e4C18WKOl2J3ggRefCewmMzP2PgAe
aSy00Ed4cABsAGgv1C8Gl+AzhZeeORx+ZJBqGwI1vAKHP/DIYQ0wYkZw8ExlHTI5x+ODNxKv5eXB
KxdNNHfc8uBhk1Y/MNhDDzRKOjysFQ/eS7SDOCdkifJhFWLwRoK3ED4Y+CjshXrv4OIBzgV3ZzWf
GdvgAd1t02q7bI+wT1sYOe4DgHFchu+rHr5M8y04yNUBwvVOgscvmzZIVwdOHmSqh+nowdkDhA/Y
znnp7i08fdCSyLb4ZTo4+DDsYTZKSBKw8KztDHLVx+0j4lPSBmDJfvDqiMkA0GfzAcEFBIcP0gEs
5n1+Mjf5AOAAf+QA4AZ9PMC+KKFoW6jWFb0oIcjts3JWAQhQyUP6dKwrYMecBlzKkmFaipHKiPop
HSN0J/jxUkMfZZbU6bYOfIgelHd83UEFB+6HT3x+YIEFbqs3yHHEMQ8fkcuLIxberzNAd7A4XuAt
itXgOI8PKNYgOOpB8SmRDRj5qXnnZW/I0eEwXu4ZERMbuo6b9/ZyWb+A6HFiY2Lnitq0TCWtUz83
RrZr+jLzH3DLUNdy4mB2H9BoLLZVy0zezdg7egLFf4BOZXXlI70T8JNVrU6rmcY+d+EBBshM5cYk
PQwAeBXWU4ldbwOanyxr7TITuJF7F4UABcms71D1PgBOQMYCb0bb0g0AeLUbbrvHgDPgCggVW5YG
AAq9kk5QPgD4iMxWr7OBbY8INOADTfgglJZpXRwGcIl+zQehS0YRkBGhgvKtLieCSyDTtRlG1JAR
1XIHRfD2JYkGG1D5AAYAGRsnIUBjRtRmfYKuMEU0QA5gugdgAy4NAfYAG2iAAeskWWghBkM8cAMG
SAIbJFkKCDiLwGV1QIF2kWObNkCUB8EO0hFRbsENer2+wf4HAAk5QkJpNcWb4gAIMmclLnasB9Zw
sBGlrkfEYANqkWO182MXnpcCJm+YaA8PCDintQiIXfQBDo4HsGfA/eUF/cWZj7orgwD6VVobA/sT
AGinRFOi0B+wxpyXCNhCU8CLt6cRvKEXyJoSSA+bLMnQcoOABLKoyC1Ug0FLG7CQf0I4YI4il0D7
IxgAajC7A3eAmMBmiYg0lsOa7MB1NbnBpoSJ0g4cJqNExKgqtNzdAWAk46UPaGzU6yNGtQE7sH7t
mXUkCYCmYlh1BZmBZGystLqFkjgoyaex+AKCKEiBHs/+gFOKxLgJK0ssdPU4un6Tjhiz4PyKsMC6
fzNVBWAHTvQKLbRmg5N0scPGZFYHlDnYgNErWyrm3gaADIgbc7y7vgUHcOEADQNBHKwUWwEMmKN0
+iI/APrcEY8WwEd/QII4QIA+SegrH0DGSDjgDiEuDlm6gEIBQJF5s3YobJcHAA7yJrSjex8AVBDj
2h7rbgC5lCmtVXE3KoDiGtoeoENwBzocCG4hWyAdiVCCO4xBwkBhJPABZw7E95AmT3nNialHx0CQ
BUKFwwlCP0YLBFFyB7QZMimdOkDGgA2ikTag4R0q0aS1ED74A3494gKrJXOoSBJAxS5KNKChLlFG
cischI9HnAKAQWOkdwYD1zciBRVlAJjIH1FHyK+y9oAyQJ6l3cti8iTUeRF6+na6/W79JOSkbHvl
UQKDk3K+ckKvx/D1NyonLA2HPEQVhaVRrr+2EjBMG8lOxhp4Ms+wJMdJRTFq8+LuO+CojYYVVge1
HVqhdAfHdatp204C0kA1De08vq9CclIVklLC0gDb2ghHBmU0CmaUOikhMwe+WeZ80YDKlUHJIU4q
/VIB5eM6WBCjNd+mtG0dldo5Yd84jzdHCfwTYg+D8kCdlIScczcdZhL7pvOQfz7dnr6tX/KNxMQK
d7MxYt4PvaBOyqaR0mV1gJlzBiesbou8+ttHy5sDHwDXpHDaohGT1VWGiV9SWn9QFiZuGSnZXCfp
ADj1zuDUPSl9KigDk16NZDkoL62Pk2ZpPa3n8AfwryMSUHX/eHqez1n8ArxB5SQSxrmr2ksYwAnz
WB9XeFQtIkPj1E2tDnAgOL7SSDlqabRA0E46AMCdCRL346xroyXqB6RPi6I7WbNGTPvV9oDwBFnP
1PTubwAXO+Ci8AIPFjde2jySeo4ZUlFh1V45fz+9b3WzAqKpZmgmMkFy+GPeoEcBxqzw0a/HGbod
PJ/aUz+Ql1mMubKH7u2AH6hoyCTJzSjICZ7f/hQ6qJMgOzmGipUrDXoZoKkLi2vVP74Dx18+kesw
X9U7vgbHX/BX0qxS6O0AoC8tGChX0SEAQD2TWlkQYLvbt4CAskSArG5s+3dr+NzbAFg/kCNUHtXd
IwAKjvbACcANpmWWaQ1/5R48YMFEL6GYNyp0LwFsIcZjn1DgE4F8wvR5IQFW0ltKMl00ImIkokyv
JquSIyRwAjIOd/hU6t4jgE9pPRfWdVEIWDGKkow1s9sGiCweaDL73gYAfFzuoJwlq976gBHSVpR3
ZRm4wUhkUZVHXRIAV5DTWph1hQEQJlHJ8sxgPshqfYbuJSIqyEbeQwSMdGR9IA+TJcurPiNqrNOS
kj/B5403JCyk3HtZU6zH3nDAzlimywN5mLWolQ1Wa9nuzZp9xRBqeOJ7PvcI3WlVfXl9Pv/6b19W
5p/ULTdaWJQXhbhKdBm5JVKv4OgUCutEKeTnvbA6CJSGJCwNXaLoNQooRekhwztUSip1BY8W1uBG
6THCw3AS7kwdSfV27Z6mO1sHobzoAgpERGHSdwxaODpukmWjcG8eEiwtgM27zn1RcCWjNwLReUw1
Wd48WD1I3IYO7gU5AcfIRp+ES8fd7KwXLh08AoUAGjVIHeij0xKrgG1HCeE46BSdR3EbafZApMXu
+2eoKFQbR2+Fo8PZ7jEYgWLAe0yIwn1DzRldQtFqsQN8dLA3SBSCtZHWibsem+LnP2dkVkOrR/Qi
JHWvj7i5hdS9Pzor3JyHciLYA53jQfuhbFH7Idt5znq5bBu/W6Hkt3Wi41uEWaHHWQvFj0XSZde2
Bw+KrJWH7eEsrDk2gZ/+0oBxfzNt1vBuB29hVz3jYH8vK4xMa7Fovr+XxUXTVsHmalZqj6UcP3hn
hgfYVxZ2R7OwuN6QwT22i3qhtZyK6+ZipvcB0JtNadhZzqIaxEY88uXh9mgqrHsydj4AoE1GnQ20
NO2vvUSMjNtJM7NSbzxlJOqDkyjbS8SIPrcZF7igD/RYUAQBcd/cz4JAY9uAktBvIAHpzfXpHjzY
vxbZD2DfeIn3hMaYWknUa+HujV23FtS9DYD1leKnRc7YA8JHJ9gb0IKXogYfJQQauH/t+WGZMzwQ
vjrD3qBW7A2q0gHpjaZ9JukAYPcmrnlv31kRh4NSBB1gdOr1v2U63yZpMELEk10SHOwRM2xun+BU
BTqOs5MlkMSZMhH3dk/iUIkY4VSdJE1GCA4ORUnSYIIgog/19ScDPevxu7sHpw+bmSK6e3rQGz9u
5jJ0PwBGK0QNh9IkPBYjWTjWIsGpDonM1AhlpskOGMwkSErcN57IEN0K852t43k2wR+4OcA4IcCJ
DkkcRxQtHEmSpKkMIa0Zr8u54AYiuQHXvQE8UCiS9W0bSUEErO8nsP/++nzeJLF7RKJe0blD+xie
R+w9ALs1jtMOGKKYTE3tyBbPJQc32ICm/XhJLJJhuZ15Lx4w5nBqjUSy52a0tm0nNGXL89m1bdeb
CUO5c2ggy7MW8A34kQ7I3etgL4mDFJEk9JIFsB0IrjvggBezQcLMi7KEDIbu7z4CalH8XOUKiy4s
C8yZwbpGvjCgfcgc8yp+XAcc0DmZZd2ZCOQl6U/nkI/qa2OcWtwPDkZcpexGn+CbkBYHPm7ehML/
2gcNUWNHVDPBjRZukGEVKB5pbdp26M+k6A4SDtA0CZCmCzDWbR5PuwrYqgp40mIQjUKPbZsgGkfe
QqM8SOLM6wMbAPj3eNhbEAWax/PSgqS5XTxwBYC/HR6VF0S3yIe1cdynAbABKx4AOVUWWtcBCnWf
JOIHlBP0AcoDeHMEb37vDgbRofX+AOUAVezwlMYg2TAuQZcqQK/I5wObB4LD7QXHvmsu0itw+rqV
wHM36X+E7kRcXk739z92snASNG/pHN49bwqO32B3BHRBCU/h9EonARyRxwCukGQVvM5h81CuCYGq
YXWL9CKKUw1oh6GmBG1MA421hJ04Mje6FM5v5p4Kfu5wZjj6Uwo0DPB+7Sfvzg3wbTwSpYKLP9x2
3rnY+60jWg0C2tHQ0wE8yqSOXHftZFpHzruXGRUgz2h59w6snqTNg5ObgIJLCU8qHxAHdZAQExzA
jYw4cHKzN57/9xTa0erxL+evf/j1rULWH3wK9M+DA9B+YWXE/7SeWDT+IshCUpnNaJmAQUKK5ivC
J+gMlmYr/ybgBIATl8syAQcAzOYZzofW4ND7aRXzrQ3QZn8x51/PT+tLMSAnrr4AJ9a8muCheeUd
G/cl8MCw9sSy38jE6QMJ7D5Lq8NJtp4Gfde6gGBPg/Udp74neIPcEk/9Ut9dH/pl3ukD8DqDDbCB
qukDDl5/TJztRjcATkA9UxaD4AY9a/0ReLB+MEcwCDaw9SxjD4OA/umD0Vqn0w0osAF74AoM+IC3
B04AaIg8/WxmWRN4gMEorq/ZVoLtAE7CABxH7smj3yZGTq8AfIA4uYwYAugjjxKbdx+6Ojg+dRIj
RwBgA85wLjphoQDQpyQWdJiCkz6gQwABWS9tAMZmvHUSAixEAHl527z5EgQiBJA3856dgLojNAZI
u4HsewQA+rUbNbjnYER/2Uj0BxRIOrJ1DZDv2CcL+gGwAxLbrLfftSEA8sm77SY2SjYA4G2U0GdR
aNTThIncteAcpP5oDoh/QDz04Z61wZAJoQ+IHwAftCj+AOtlUfZ4eHr6rtsnP4dlh3j7DtsfJOWD
IV8Y3/Q2HzCggPYIViJ/Bw2wmA+wjwb075JkwTnIPzFIN2Ag/CbG20EgwH6KB3Q3WNymA5tHppPn
0sUo+SEPyBzgfgAf9rqbfkBU3RqqXi3Bm4zwJxoeXedhWtx2Iifn+/vaQbfCACpN5t5smpVP8HBs
jSbNWYumiLoHD1qNa9LnejN3hXwgAXjHddac4BHw0hx3UypCsOcB9tR6813s8a1pNRl2sOkzT9YH
fUU16Su6GQhIPgD6pGsydKe29+2eAMHH9QZsDx7QH5kZMqXtbuADAI5ce2eKvgh2T5obxzJ1pfsB
QL1kUsOmvzM5PiAg0iedJwDQ3lnbDf5y7wOAf8nYqc20DIoBQABkWEExVUN3A+AOSaP9Tc0C3QCg
IDK3qt5hdwOABow5AA8QQHqMb3oDU3ggBMi0hs3MlekD4PRkeN1mZs68OqAeMnJq0xiZ7B1sncxP
LLFOhn8A+ZGJO5s5EZT+wQbiAfkH5CeZNMKvDxrEazIsZlOzRAQAEmFGpB5Ae3REgF41xqbbB8uT
1uKbMRlk++D4dGpaX30AziNDQgDnAOlJhl8y4hv2FdfO7saVdew7ZKEp5ByghF9v7c40XKy7SK04
qVmG3rYvNcROjJ/c4/fhty8vl9fz6qv4WUtrtjh+AkYvajqAF7WIH8U0acZYuiStLkXqZaCV6bUj
nBb2j3MSyRoZHiMjMU0OJlh0mrirmaY7Mo9fX66fTy/r7Rj8SQ1eO+MnI9yN5crvJ2iEiX2n1/Xt
wCorTRu9qh1dCHmsWjnw1Cr1a9CKbXU+MxmCjr2dT0izj5evr9fbeZV5Ov4LaI84eT+1i5EqzZTW
d2FRS7fJdq7txHIXGPRwmoxnujQ9kX68Xz9uT5vTaIG0FLqgAg1IS2XwFl6BAUvQ/rWTOF2O4+gp
asZzQm0WVEqAwSo8bAWjQgbib4IHaQHRAzxWeIv6NCjaxWeHygqf4f7pSIOd8J/wZwH+DC8vKzhs
oKRIN5yKgR72wO3FwPWFIctrsLwVlk/w8lKULg82QVLRAhlZ4QPcfowHiA8QT9QS8VvUZEQFI8E7
TLxBIj5oASivD1w/2n+U1rd4/SSQD2w+przI+xHybjwie0AqVXTS9WV4/CySL1TTyhvp/LDcRPF9
lQj7anQAJbM/AE9KIh+DySdwndzJ/QH6ieaA+EHSLx04PtId+gA8uL8s7t9g+okb76GzvALXl4GV
OLEfkr7pAPkB9ktBVp3I8nAS9yVIPclJ0iND7steWh/2H1Rxk4rZFb7IdFDS/mGHK+XF8yeI/6QP
XD9YP9kDyhdRf5a4J0HjI/muf9fgPTWjvZQ7ZxJ4+feVlAGwBw/fXnp3NBGkbNWlwZs7LRjZGc8V
GB3aghfDCoy2jbIFPQbdF0It92ZIyrX5pPXjP5+fLt9PL3+4P53eVh5e/Vcc9FVkOHIxFeOKReYP
8GG7icfn6cK5+wEDdhDBq8v8gQh2gN595g9k8AEHnj3nDyTwAbt+eXTdD2iAA/RwN3/AgQ+gl5/5
AwEcYR87JiT3KT7+Px+n1/fLl8v5tiaxKOQcuYDSDgzsulzht1m/e/gAs240Shmd9g/Sfly0IOvc
4C6+7QQZZI7POwAfiF76AEw9d9tSfbeDh3nHLmmQ9zMdIIL9K64VB1kfpJ67HIAsNbA9a6NBER7m
vbmYQN6cgZHStr6WLhCm3Tqaud7nAYPPb7iKZMJDIPVIB2n/MO3bpSDxIM5bdj5JCIBvO85lSQhB
G8SRvOV96qmB3dcbAaHEr5kAA+AACzIfZxEAkhdVklgA5v45bw+wUAIk4EHm/0SCIHtNe4mEHMz8
dzkduEKgx0j2GgNvMQm5AzwAEOi9RMIe8rBykhAP0AOglYW8FgNCKAZJiHqcvqrVAS2ApAhJP950
LaNcCEwBmoLJKmJwAqUO6AGAQr63BsEA0kNHmAiUYDnabMhzCAAZwKSGfZ9DOm8AnGBbxdfdABAj
yoIcVANHKjR4fUATA1OKpEDzUgRcQNwksXZNOUBBSUlMGGAFgj4ixYAU9UbCn4cZ/MofMGVBCrjL
h8QYuEHa9LJvzFpoC0UjyWGcRu1o/6ldSGP+AKCBrCRjBCZCO5cOSBFgSvCdJwkGEQ9Faf8BBpS0
lhDoIQ+ojSXQpUFQRelylFS5g3VILjuJi2AVmqN1QIbjIrB+cgekMCjkUOGAMQrWJ1WcjBTFhbDO
xyM8BGiQ1gL15ZDHxRC0v4dbYnzTF/C76CADlocVUgo8LR8ef3e/n2/vl+vrOloT8IPd3MKoHzKv
8BZNoJ2b2vZj3vUDAcTM576b/Zh7hTcgX2Bu/wYOgF4c5x5QYP9oevfc/Kv/ZjIhEKwfHP/iNqGP
p4tM8hV6sing9+65f133xWoGB/QT7QH0BYC+KF2/RQ++cz/u+cU29D4A6CeK9BMgA9Fso45gCMDA
M6Sndf/NZ6JfRH9aoB+P6ceDF9Pp/sD2fT4gP8D2Q5Du38H9R/7BeFo9gtUTNw+IrA7g6YOf3auV
gJ+7596NAD5A4ZGyRHxQq2QXpfUtenCfW5L38x0mBIAD0BdbFh4cwJsD5APIN22mWXUJCGgvlOw2
LQ+oHz44T/cHlvdKun8H0R9F4eMg/cYkwXssPIMkfSzr3Rky0gCoH4sSVubW8kB+GSgBPOoBNW0A
6D+ar9aHd5ACkpLgDaYgf8B8ATcYjkhAJEFotitLggCBnTaW1DIe6O98+742ir0oFrFU8aJN6eCZ
vKTTHWYLLxr19gA8IArnd+enONXm8fffTrfT0/v59vuX0/3eTUUwkulJkvI3I2vmD2DtZyzk3fED
YAdGQ+NZG4n7tIcXrY2kv0jBy6bfJd0BIBVYq9M+AGk15QwFiBY9U9K9r1RU9Y6APSiFPShtBHJP
OYm3gI1IUhezb/I0kzKgRJWhwNBGUoQ6QY7VRtLkGhtS2kiKQHmRkDzegYwDHAkwTrxG7EtoLX4A
yz2ljlAiImWNvOkRBYAMjBHJANvTyoknwB4JrbNyfTrCBoFK4gewTamteARsk2slXQJ2ifVGoPU/
gAh5l4O+0p52oz03etNKuQ0GPyrCMaMtnh/FD8C2So50hes9KsFBqfUDNsBXOTgusO1A/gDuLeqs
4cbX0DOgD2T4qgEHPrYzKPgqAMe9tg+4Q0gAXzD5CCWAhwWnj2wBYJFkzW5GwtEPACwanO4HB4+2
DziRmHGXOGdRn1yDR3e2DySREvALnc6HPoC2oEVKwM32nHUiFnDSG8375i8CvJWbIHIkTrcw+LEf
D/FtSLCHWBJId6tg3hQco9wOgVM24CTdxtMetDw1eBZp+4AVd4DTJ0nbw17yG56F3JCQQIMG8yk/
/u79+r3ntmapq5rRUN5kqesEmSnRO1uWWkIarDWy1NVMR3g5WeoHqve5xSvrxj/++fp6/v72/qMa
N385vX49b02cMYACmoMokt+utq1h5i8YUGaQSYq9L5UC3S+ADPmk1u1x+h+woL2PtjhJfzwE6HCj
DGhRtnwBlGvkvM7z7+8B1XtkXK4xbgE0alEatPlZEAk6FamlZKQIJ9c/BGhVNPUE6HfKW/YATqFJ
q6v1fPIVHkDpTY5rmtb9PYCGPSqAlmkLHkDpS7brlmWpvwdAktqse1bZ7hdA8Uwy69oXhitA3yOl
cA3TeAjQekmhxmsLIsEpslkTVP8UoIopoeZxyxaAhEsbCdffggMdxLRbI7J/l6AH2VRxWvdgtg0g
ly8A8eJxKZWX2gBOJcuCnAY93KaeD/02YMsXwCmSB33wFooEvdRUWu+hT5GAs5M9IhtAN8Kpb8jU
DDD2v2ABY2qFK/O81BRsKuCWZCSgp3hEwBmgKnICTfmWLQC2Uu6IzgWNPadCbEk4AOslK9CXcBEO
AJEJdFZcPoB6K/pDNhwwoJQF/UWXL4BDhJ39RI3VVN2AtXGacM6HVw6/uKTmXoEPWAvD1EmqklcZ
PrmOGwBtAizqsVI/YGCbASFMnqQeK/1uXJsbAGX25Hlzn/Mzog8sb6N0gbjFjIMZe+P64P5sltbH
rxTZwZyH8f7BBkyWCBC3WHKH7h/0KTD4fT0JSafz2DJ4BaDPgkoCOH7lyf7I9sEFaPzmOu4fdKmy
EgniDmdeHRBhGrCAwWlf4wfAAYyTUIibjDkjEwCgH43zppKQ9zZPW8Q8iPoU6XhACRjwARMPEKEB
RzDhCBcDKtLpgBwF8E5Ll+BgqzYnqhH84p2zhEGc5ZPtEUMAIMCkAzQAxChJW+D0oAHg9gAPWUBA
NhxgInB/2kl2jIOdAp2IPtwry+Ujdhi4P5sOcBCQolofMATAQ3XWMFsg4dS5AQEePZQnnDw9DxjG
xzfgAq20Pk5VyKIdZ7AQpykvfS1mIP7UIS0IMGisZAcYyEFKvAGcJ0i7tfUdAcuGEw2ZeQxEqMFq
UB1ypoAmt0pSxAYKESVZUgbygDIHdBBiYXL+TmljkvJ9cpJEgIXH1x5mz9rHf77c//rx+rSvLEOv
sXVr1kDxDl9C2wcCzCRC78kN3kLiRA+pDR6LV/gY3D6QD2wApDZbBRUUTExoebwwHc1K4sFg5oRJ
Be0AETKnlTxdwUCC+S1tA/7IFYLsdOsOoACQgOBqW8nGpFZ+57UZpjm1A6Qjdwg24A9coQZE7NSO
i1fvxWrJhuumkavSOc/j2tiIZHj5gv0k5DBjVm+bEAp0LbSGyyectAtcS1k+YaRdJHEXXtpFgCTX
cOHwLoJ4EP3J4k8ImfXTpaK0cGzdzOhEyfFKpAsj7CIJadETXaBd4Bqd+RMIF+7AjRh8I/v0bMLJ
lrKthY1+2wADs4w/GD6cVsrdwlavFX7SrQV++EEyPXgL4NMMXzIcku7Be7B/taw/iJ+UdvAWn9+t
4XNvfQ32v8yeMOVF3SS3+4KBX5iMAz++ELneCRC8XU4QuhjQEAN2GWFRUm3KDSzkpCk5acHUTBHV
O2lJRaWEAlFashFSRJUTWjJzU0SBPKHlsUvb8vHO4h6srUTEgZ2HKB8ciLWYZLSDk0fUuEELzkGK
G2nWWRxQTNTinQGzNMUgnhzgLSQZ7QA6iAQTwc6NzGmA3lLHGByZPjz+0/X6cj69Tu2OAxn8Mvz5
k5AEPb8JTJmZJH+4gBsJ3HoudXdcHZUDzNHoTpOicXVUDDAHwztpnQu4AZtnmx0u4BaAZ7R5K24+
cUn8CzhYfVvMkTrg6N6dgHmNURe4Xqlh7DkPYNnuaAvaETjb6XwheLBzkme9Rzvct2NrVyokWNMr
Lst/uSu0ZY9ObEQm27dlncTH2Ce9fcrw91aFBC+/R1gHYNmQwAhrAKzh2k2MsBbA7ivt57PbRWgW
y2uUpMtwaYIaK20x88ezAmrSZnJV3MKiK0n8lVgBNVStpPWg8DZIEiwbOD+zQqL7iNwkvjb9EkDu
o1LzTWpyVRqOK5gTibq8qKX5l3MaSKfeZgFHOkOtO1PaDjjQGdbwCk9Lw9nnt9OuBNPQbHYkBWrV
jW28g0H+3W6nH/M9uDH2w9dERKp99arL6QTM1+tEYrYwwBqsHDgsTsABrKzXpShxB+wBMKsIJuAM
gB3X13Y+swLQbGvpCdoAjEVuxscE7ABwltCdwLZtD7jAjpZu+2MtMC4U+DiL78f728uFTHOcfqsG
Rnnh5gLr3i1fgBN1nGPby0xfKH9iwRNbjj6Bm08w19BFNlNnOQLMFnQ+yEcI4AiB6y83HwHeQTTc
K9ZyAPTG551jH1kXJOJbDI6LhC57gDmnzrPPrAsSNUAim+mwgEcAvn5Hojw7gwMa4nvcrdgAEIEz
XEx8dQVgD8FLnFCvANGxlgjJfwI3SN8n1l7SBI4pIEb5AHA2oLNJZmWYMOO8kS/S4S9EiY7xC4t3
QUtf0MIXbOTSRohEAfC887LaAcCCE9mximUkUbJ8EzAJ3PGNZ1d3CZjSb16H93hwWDJnmR7htErH
Z3KvZDvSr0GWzJganD2ERyTbvUSP9QsAk95J1GAETAYr0TQ+w3ZuZ+jBI55KkoCv9wBw4GRTB8tX
K8sVfAZvpR1YzA9B4gf/CYAnc0ioIHM1ShswgooJ7PjR1TUi0RhFYwsyNI0O9a1NLBb5dtorox+R
QZZEihEMTvrAwAkETEp8U+3VHpCaDVwLwvoFvXeRrrf3tYMkzXp2xkJ6K9NikVFrFSQVLetAbSG5
1g0g9WPgTWvcbcw7k6HA0DKlGCMdQOJ5o7l3uOULmOf51nnLNWDBqd0hPCBKUtJNSOpDYzexkgKy
rTWXbLmAA1PKeukeJTNEa5kZsFmsFdQfWjYidJa+gM0YE6DU0rJzoKP0BSy7zdoMMT2BAJSPtfIl
4A3oIJEhZiXjpR1E5OhbHKvRkhlooixQgfK3Tto9VnvGSdiTLGnd77w7fkJmQ9XtHDxtwO605sfr
/dvly0ZxWj6UUAKZybDTHRdwB8DZaTgLuAfgiQ08j+Cw92DS7CyaZXkDlvfrcVC5Aw5WN+xUvgkc
Nj5MRkvwMPydyFjF+tpge+uj4yv58vjHjmTZgXbk8sDxdZJIz+HtW24OEFkfoW+h3U1v0OX4ASyf
D2wfUY9ZP17E3u0h2s/s48dCPQh+3yuRyJe8N8p3wiUL3B3ZjpQjNJCA9QNk7GaHP7Mgm2LikoBG
aEweISDuzIJo2Q7M1FtoTNt02qXqgQuPiSlYcfeAtumkwcCgDmA+JCSWsySXokZyKQsajc74WzeC
n6EB3si47s2Qy+XkgOQD+w4/Lw4kKpnVvUlfWhYHJw9R4DeB27yAdqzN+NmIC8UjxC8EW3xh6zqr
I/A9xa6MLcnaVwl4fbLDo7rW+rj5/Rvw+/Wn99vl9etKnArd+b3L0KsSOqJ7R0tS9vcrdOb3LsPH
khKVRe5Mzsiar9C8Me+VEtdGO98UXqU9dABra/TYJsxk8C4bFJgSH4iyE+7coahSTsgJqtBo7SBs
HUfEaKnLXhzVxSNAu9ldOWGpuGOpt4/7txU7RZTx5a1GcaIyhhRtzsH4eBQu1W9CAxuCjEJkweMI
TxReJ7xVwuYDYCbPd1waoTU+ehAXB7zotHBy6JF7a4VLdxhxMCQQhewRb+AbZRTkrzdRAA+fEM3A
x8koxIK8NQLFBiS+aeZR7EM7sDZ8gKjQ6NISkiP7t4en6+v9/fbx9H69rSMpKPXUkcpAMtKVwGLN
nvaTx8gm/W6Tf71eXle78wLXGoVI10sig5+JM4ILIXGvoMjywh0aaHp4QWgYmDHlJa7HcWAvcY6G
CUteqmf2Xmth+1bAvXbCDrDQ1AE9R3hBU5pDx0fLQ1XrBcljrHB5Atkmge6hzNUZvb1ON4c+AB81
vfgo6bctWdx+/0DwGoPUpRe9Iq8OYB+sr5VAO9hM0kncPka/khhHAI87xt37lMB470/xGldPO51w
O/98vt3XicWJj5WUnqqGtBAvYZO4VsyJj+816KUpbAmbxLCHjgA6rtfOe+gAoEn79OGeg95DawC9
9JkugboYt9Cw0bUh/b435dYjuMXg67373ckdBl/6Ktdyd9VZHdw5aZ+/GQIwghvUhtekTUPkuEc8
gCat1jloB6Ad10p52To6uZdvHZ3crElOdVZH12a5sQXLtaHVI9fKeiEahHi1aylOzWC1D/fvqxSU
XElCw3CdBzkFU/zrFxJbAbp8AQYiI3126O8Bvlpo/CqH+520DbCloNMXjIDGrOHbkhLC99pIOMTB
VGXXcejUQQGuoqIvAPs4+IxEUNsTE1sYNH/Bw2tIm1Feen8NcAc5SZeAA+IKPiUIvXfaCTQ3vWl1
D6AgjQblffcMUo1ViBItGYEWUl6/4jHsAPaQEnyoVjAvun3BSkwNktsaNVhZLuH6PvqgCDCJ6EEW
LPBdTimJK+GbphKZGg4YTMrIygFXOUYNn/yV9LKoHExZULBYopGBl3CAn7lUgBkvChYCNiIgPQ5s
VzDCZ76YoyTWhGf5SJ7qesEuBcvg2hf8AUoCOlppmPmi5OpP8lC7abKxEinoHtbvnV1mQoQQJUIw
AhKzY4uN5w0AYaCVpOSF5bN8AHwHWclGAhbK0R1CIuIGI4lULUiEGCTVAtMVVJa1gsHGYoBZbEpI
OtBWxoDFJrva9XwhvoXrhdifTutUIiclJ1iPdukki9bCPEXHv0VWaAcT/Rz/9N2g+dL8MRAElbZ1
yIRz/Btug07C4g4Rp4N5QI5/tW/QRkA6tBsTaYnRyc9zUn4bPwV3IThgKoBuDNPREXQWFnfIf6PN
gPaeg5PyQu0+E4fwY9g/nV/fVswYBNXlA9IcQWJlF5HiDIK89AnxYhCc+wAJOggq00OVF+SERtId
q2O3BMl49E44O3ZIvUWZcUEynr1BOYlBUDPBCHvHuW18l6t5cbT1iBgqyOmUzsu7B+s7KIWDEM4J
GtmqQfL6+DZfy7UjooPZmEHKZPW+K4zIKwjOIlJcQ+glrQ+8yytURiS3Oei/AI1Ht520vj9dn04v
505yn5UeBSIJD6fdc4jlLZQWHVbcyMkZGgTGyWg9DhqEliN8BrK8kdCgEzfkcYZGWHPrsLbeQuOY
fCTza1UZe7pfHDxHkPmUm7mxMzR4wSLDmDfDd53QIbOB693g3EXL+6UH0SAXH1/Or1/faXacFxMP
vQfFy/6TVIDuPchWmsBB0oUHHSW8mHrofeBbAHgx1dWjHghezNP1HpQCT5sHz94+cy3lCrh+/PeP
99VVysXJ3iV0G3JRrPca3YcWJamnLRW2WmT8AE7FcEHYgZDh7b06cgSERCsgUaik9y4juqhHEMh6
k4WXu0hER/AiDnAimNsnQy3EqQlZajmMSEy6nVGk5YcJB+KYGqZVVXAP4vlaDsVTq2gbu9Jy2MmD
sJOWXxipSbeNg2v5JcKB4iQtP+65fXnPTANm0TwFha/nX7YtGKeGrjD5xSaQMGgOkLpNgU/dMgdE
nk3AdDQHBI6lSZ1bkWcOCBybLJ95Zw6IfZtAny9zQGrbTs+/5aYH/M3XW0yM1RXL3bcsP8di/ICE
n6zQFcs9n2w2CD9mFMgoRUsd+QA6QhKOIHTtsLS2xe1oRG7UYzPoEjAiEfNJtsIHjNAMT2nE6tMH
0BHykVsAvQIUaAm4IBHhwPOmwUKJ6Ah7+2rhNEs4y8ri2YMHCSvrVe97erVB7/Pl6db4zs7tyc3y
gQTQjbrBgsiXhY3dB1jN61oL2zIPsIZ/6qyw4F0m+F3ew+oizCd0C4kPIFdYhCwQ5LSydUCijPsz
V2YCsBnguqoEABt3YeV5iox+/MPtNlZk1L/TIUVaGn3mNa15Wu+rQRsMzRaLFehPUicVbfjxJloY
ENTg2RT8Cd5ieHZGuhamCzXwyPXvGuANvQdz4CysczzBC5vhp/iN8AIu9oblchhNDyMfxYCtHIDX
iCz0gaOsK1ON2sELqFRcoGGAdxQVju+8X+c/+WV+VLGp8uokTp6A5ZYJXsWcyG4Nb/Diy/CrktUR
dW9xNL6LjB8rHLKG51RLW3qZ3FU0eDbrpR3et1/WHZCWNkizeGWDgDld2kAzBgWT1vxyT8W7oZPO
tHRaMiJsuOLkd1eMTqvWW3Y7PCNgt9p0VoteMY//9vmv56f3Sa8YIs7MLM14XBqlOMIdwR2aXGf0
srViyOe8BfeIco1eyE8XK1ors/1AgB8winygmBkqdHagwQ48N7rPzMIYHUBxrLdgH9BUTtzgvgX7
aHUitYbD59BZHTBDzhwzmFmRRUA6ROZVZaQ68AHAx/XufQf1iPQ0N7RwoRx08cvhdVV+RHsZQQ+3
7ec15/gO4aHtxw32TAceMK5OIuXDoZFGaU7lLbSH8LfI71y5v3P5gHSVXfOd7WweiMQchc0HiHyj
BcYxWGh6Tpov4AjzQeB6AzevFpm7KaQxgv3ZwDcXtwQ/DfFJDG8w1dc7tbyZlgT7QM/AKv4GydZA
GX7IUYMM68Kv2bE31QlomrAzZ8ogD7t9eXkILUnu69PwUYEGuzyDlqKRkLewCItpX9Q0n0mTA8zG
MHjNVeQJvaKIbERDedrALX+j0/KZBdfZy+AOgC+bL8F9FzvgEYCT5AO1MqEJ7gyAXy6iPMu43u49
AF/eskuwJtje8grAE8o2vavTcPkkgePKPGXkw2sLds8mAhjBi2u7J8xXXKDe1SewultLhdDBHSA8
UlO5yaBYVgdnJ7Wslexz7+zg8LSI2G6EOR6b1pa3vPDRUAs3cCJ/CgP2Dh/A5jeEkzt0h6SuxDUa
041ZU30PHN2c25URz/BIWWhSPE2uvC7riMh2UGtov753Tz7yKe50WfnT2/n2/uOP9z+8fnw/306f
X6iCkxsXWcV2ERnBMw+rNy3F8xaWH0k9AGsuGcVM7W/4TUfuYcMc6FNlFZsDNIInAJu5h6npzGBh
bbjOGSNwBAsn+czgJUaF3dKEtPyetL6d7v/2y+u/jwS2IiqPLsfkTWeiNYY8xi7bUWmERRSl2JZ0
EzDCkMkBUYXHN6vYtubL2hasHYWtRwCbBZwBDlbsC8CybQ2W9ty8V1PDVzui+vn08nH+ty8ranJ4
krk3KSLcOmmT26EvO/AEDsi+4RqhxqUt7bkHDiMUPDRwi1jeYapQiKIcogqTJYyhy2LTS6YjI3py
8k0DLkpOWhs9l5sUEDM4PHfeG5oXk3ba0EHZZTpNTCm0ZPVMEceuzcWGzRtk2DmbFBI4CNqtPcuV
sWL2zL/rDtt+73e8+zhFZOaeMGuCMCxOG7DhXYAGDBBq7DoPebcySIHWiY9lVNgE1lVr69fsNg3W
jetGMGkLCzLtdd61cVnRgUB+xOQvH9oQEW5Aoy0wesOeji73f5/+vFElAR7RhLVHuaaHgOnBwnsJ
AiVuWhvpLTBigYWYStZGcFtYREyR6ww0bRrAOmFdwABmcWPq+4fqSTNEEXp9U9SX+mR7kqVboNJ+
G2krfp7cCAu0ZMxcgtgIi+R9UkjXWGiUxIQ8J4tVbNLIJLHQpojQEIMD5U3sTI2ZjEX7+C8fr0/v
l+uSa9nqinhlbfnemVZyhXTX0C+QY4HJT+3PYpjHOBJncYVWl0188mP2DmATHzkdY2Ebvgoc2MZZ
49Zx4yyXuLDwuHUY2jRBcx32lpMDcB/W/dLCdvNYPtgMzi51eguJM3iWkyNwxbVLs9BhasB+V920
XhuHZIPjOuwt5ApWd2x7wBEcPwW4AE4+3jlQRj731Pz6ztHqiiuJW+gdnZ2NqC6rI/Wf0OoW+Abt
7GkdTtZrosEB0bAgrj6K+h0wqmJUMskgMWGEOxe2brkayoXi0Ooe8jkWEmFT/Zk6fA6Ec2C9h+XG
wcm9QasbEVwhAWklZvFuTW+2g3fELOxj7MJriFXz+tZ7ZwcX5zX3arecHTi03gOt+smKq++9kdk8
cMQ8wGZss1HYak9bvCJg3djAmXj2QN91a1hDzcIOIW1tDdYWcjctHUXgaZa9rRbiZOcR2/309vby
Y4XXYv3C4hB+APEIHiB40OBaxtXBESNbvrSAOwAehNUtCoZaF7gnhBE8QrM5RM5pWVAHzu6zvHlw
dn4A+bJ5cPaQAFmLyfLWbsrGbGfzgGxInew623yBBoh3bOHfAg5ef1wUMAfHKNuwmZOQOjQLNh+j
fO0A8Y5t9b+Ag807I6AuQKILRpAWls3CaDSvBHgPd+8PLA9eaPji6oXmkTBPEjiqs9TyycFjnl+X
Z+gOs6NrY3sdLHgDiztJVkSsI7xA8R6Ce8u9gS6rA8QHi9R/Y1cgJyM7h2lZHZBclK49QZKLTrg4
jSpzDaYZxKhJCXcWsYx03FCJ5cqRapSEXMRiJkpSLkJ6j0q4c3ThWVAuOJ2CH2S0IA5Qq2cHai/g
QDNuO7KEDjgQM97JRANWD1kQM9jWJhOkNq3Lls0Dvez5UdyWf/Zrl+bZIGh5KuoY6rvnOys/wdnA
DWWw4kuYdQIsfK5hU3et+HxnDe/9Otl1t3rt/e7AwWOP9VzeoBVf8KzdRfe2Xh/QWNYwU1lsfbzu
0MPT6eVlRQsOmP81x9wuOea7+GPLK4AZ7qSgTZdcH63c9gMRVheQMq9NWdKyfgbgnqvqWU6fwOk3
RXW2s3lQHhC0sHqAuPebkiS1BQcHD3aNt7SFxTUtTm/vbXd0jcu5AlfZtxwdVBSRmsJNSc6yfXBv
bll999QxXTvYvFWbip7dxWlQlhEWmiv5abm3OCAauylgdR3Mgb3T+tV1NY8Vmhu3e4trxIfO5gHd
WLYUaQEHVGsjV0+zXDvYvCVlcG4TdZ9WB0RnnYC6AKvoSOVxMWuT6XAMwvxCNpuhPIusAZgnpbR9
hrdw89YLkg4XgRlaw1YyqdROUGsAHoIsrRDNq10h1O7iAOZdFMAZc6ltnRCNWtVdL3hH8DatpUXs
HB3cm/OCfvRQ2DjLFQ0vRAc4Jhhy7Wpd+2iFZuiNbqh9UP/TYzpwAK+50tPlAGB9HwU9E6GGDgvh
bTqlEsIDl0+L9rnLB8s7I2iaALUkqUZnlSy4fOd2tLM1XpEHquBDCw4vWgccd5TTYk3mxttaUjNp
ZQ/aOD7eI/qQZuMEhjUwWtbyAXGLxozb/rjrBvhJd7wFig2+6rKxsdmy8epEfO1kg7YEum5PbaFR
BbDbG2vLnRpyCtwFoDb+MZrrJ2+FOvwKrtjZTsvqjDxoy2euXdICnwB45KYaWaEYuoLrKKyOmzWR
STg7psRV7A2cHatBcAd2T2Y0bGaPEHiwvnVcT7AFPgPcJwH3eHCJsVwbTctnELd9e5nmwBwr49et
T0Pn1sBUN352EKEZQPFaCbeOB85odg6YFXqmtN0vd14CHdZ1cAdWN064czxCTLFT2KzQdaOd/YCw
0EDWWS0TDrh5E2R2R8uTyZBF7FnVWR6IWmNkwkGrS1yDJ07pIAgbDYUFP2mJ4A7wvGaHjlmhWU1b
3ghMizsGayegXrNV5g3ecg0FF3ig5cjsv80QRyt0e2mEQySO3RhuMzjYvTUHdDyS15thZzTmK9m9
OvHPNmKGkbbsc5OUBGLYyjQx+cUYDAosVtqUrrdhdNbIWueSYa89AEVw+x7CoxWaH//59H6eGntl
krGeS0qkgi6yXbnIah2NbPDQxbWWWtdxHZqp8DpBeOLmbQphGnTG0J4LMDRog/eeepGZBvwpVbSC
StX2S5Clgopsv9wRHNUvDuBGBkera+4tcgRHtDqAWwFcY3A2TWZBHQJnU8MWcIS6wPXyLOB6d71f
z+//1/Xjdl/dr0Y3VCsrKw0lV0rcS5zQrei3wlsIX4MsDb4Gm0wP3gB4PcNXOzPv4Nk7bvvPy/7X
PV3I+cH6NaY+wuvy6NjbP1i/BleX/TvVWx/tPyzwueGfXLOxnWv+z//4/U/np+vr8/qujZXuukqb
ca1hWRtXezVWvKuEzmqsdNaWc9/g4+6ujZXu2i24qo9/urd/BB/X66fe/tH53QJvV/4QWR/hP+/2
T+46bK96qgEsP94kKrTfh6bcHL3uGKIjuIbgdDLi2n1bwC1YnY0VjeAGb54dSbmsbgC4EsAt3ryX
wdHqbjfQfq3XHbYKFPdqUaEttkiCg9AG2xTkgbR0D0hxY00FbJGYbqvMSRq6jjSbjb+flt8S+Mgu
cmzTBmyCF2S+QnJQO0mOWAtlvpPkoMlrma9666P9Eznku/sXdL6GOs+JOnfR+bU+3q1Nk+0lD6rq
/n77eHof28LPCwlcqMng7o4IEfx4ryMbsM1CyVBbXXGebBbq69rqgZvhmYXiwAaekAQSIvV+6t3F
b97gze+n4pIbtrsrvrNWidWSj2CglW61ZOXzfeYneOzimIDsdKv/P9r+tEly5TgThX/Qa3kMQGD9
SJGUxLkkj4yHmjvzQdaWlYmqAjs35tLdRTP99zfcI4BwIH1BHeqOhnV6i0AsHr4+7m6ZCYWYf06+
r+2/0cwMl1tGUlFY56fbKTTaRu46iRvdAF8WKS8px3eOp5Q/DafHvV9QirMoxWVSXHMcr9+00ynN
mSedPC7tLF9mHK4TqstVQnUmobWaMe2cddGuUAndWYTqStUiLRjh/qfzibSzjP9Md8R1pfqe43in
jK8l2DkZXyjjK43KcqsfZycnNo3jnf79TvKwkfHK/qtMylYg47X1P5flI9dcPlspfx2OnH1SWvRE
kebPjLO0XmNdanyztF5jXWvMoLQeUy2280rDtcW3GpGUFieUk3nScG3xjm2tkmyETLcRatVrWege
V9qCZI4jDKN1cVMKkKiRvBveYfI70tgw/jtLAdM1qMZUoRYBvPxpvK7BNaUUuyXrV75fd5r1H7+v
7b+SWk+S72vrz6zxuvrdOLEdeaAT3bNOoe1zrGywY3UbmmBdc4hDL6isqBkqAzb4j/Op//n11Ss5
c9dcbbGTTGVmRW29aLm/IRmvMJSs0BhKUVvcdFkt9Hm8LgtoMddnc6eoLWGQqUp4UVv8mBTQ7RiG
6HSnCUnDWFSnDqSqO00omj+hwseHUrM+kwU3qy2lqFaNjLy2lJJmoXq3T+N1pa6uhCzIcbiuU9Xt
iuVr4zspE5IsX9l+Xas6WW3pZCSQ1c1amaHm3fBG0pNnzFlMuyhKzeXhLKZd5KrP11lMuyCwE8bp
4SyhWRSq0HWW0C6KTBOazhK6ReFWnJ+yfgq4itARetGdYA0/WUn+Xxo37UQ44Thev+mi1vxL8fva
TXUSSoV8X7upRlNPYLxBKe2K9Sv7pzgThlI766YLuWdokBi6elKzLeXGrz/bWEIMyAz51bXm6jUj
fnWnRczMgF9dao52M15Xt0+x0flw3U1dk9BuNWu1kr6uHF2TogSLCrCdUXXJTU1l507+uQZa6Rpo
rlpJma6QFC2XuxCX3gnK64yyOkvjk2sTxOG6widXAo/DDWSIWBAifV1bvAos6UxkSCMVw0jDNWhH
J2UppMUre28L3Xp3uvVe6dZ7qY8muWgYH1zYVU6PbNYZR9Wjlt4y4vFPw+Ew3Di4Q2tZ8F03x24v
bIrWEhGZGoIuWssC7lpNxBWtJeKyTBOxRWt5ALrGGq+L+Cy39q+rKDTdo2Us+FynNPfUM9MtzCqd
1qqMT64f159x/momLuH/oWFcyVWFxvG6cUWr/D9rvfH72niVFcN43bpqC81jHr+vjG86jZvG/Wvf
dyvGa+f/7A0lF11JuBpGn7KKj5a5WP4zDXfK8FKqoRmHq+Vuy1ysURyH5/rXM+Prah3JMlsU1Of2
ri2+kArOpq8rw2kLwSaUfaWvOef9vuyDzi2C6tRIWZGbD7JRAoWF1S6861TgaWFB2btl2w/HfV9Z
fqcGKovc5Iet+p5zkx91ekQ60xk/qU+BDaxnbD+vpADBEoZUmT61TNtmXlnHvIzCFE/jdSqrOuv7
hlNNvebc6pXUVa3mc80r0ylXqE61ynqlNAA479WEBhqrTT57WkwU+TIevPB0mDjwslbxHSYIvnRq
2N8EkpetdszOxPAvS5zm3Pe19Tcq7MGE4ZcFK92TGpjrAcOGVyPHWKmAZfrXx+Hwf/vtHLFWmmCg
qlYDsyaYibzpjh1uhJVzzaouTSxSrWKJShPLVelhbRPLVDXW8RlR+UynlVyPxJSF2Ok92Ma616Vu
58VO8hmhFc96KGDmGOBEYVlmrtbc3GVhWZY0Kbplx+vOWzkZnKxfc742UoIn+b62/kKzbMvCdJ6T
HEkH3gHu+9r6STJ9G/JbqeSpGZbyHMwxY5JlpgoeM6bsOpXxmjFdpz5mZ8akaUFGJphixnSdCuRy
Zkzb6cBKMyZdPreSpO85Y26ZlxqZyfULFcqUWSut1JMuM5PtZioSK7MotSpXjNf2r6IHysxUETqN
UsrMFFv5k4o192rqKgYtk1Quve0M22d4fmEtMVfhaoVFYbn6FgrrgvNO00EL637y0vi6Tp55pZrj
JsA6s4dri2/FzGUYXkmOB8lvXVnIr67SpGNRmX7vQguiF5WFXOvUvLGispBjXT33uzfc+rX959Z4
HTnWldb6Db95pgXxG8mdKMBgGytE27h5iHb+OBorSNpUWlJlY4Upm2Ke01gth+sx1qacp/9yi9e+
XmvZv40VX25yLRGrMSO8JEDchhazcz+THsMnRSFn5f1GBaNkFITnFG1npotVjXbDzkz3qrp5ulbF
jVcuqWq1dDNnpovV2TwOXz+NN0AIhQpCMNMFaze75mUg30z3q/MnFAN1KHa8AGCS8TvLo9iUqkev
M1F6jeqR68xATqE5jvPOhLm1Ui8e8n1t/U71CHaWR1FufjqO1z2izXNxE3rTXMSQ1fjzzKLpgrCe
IqRQ0pVm1psuFsia9mm8/iaLal42oeO+r40vNGhOnlk8pVBLAeSZ9SaLWk2BzSyeULRP+6esu2CR
CEzOmulqIFUDmRxWZ7oa8kJTBp3pKqKVvMpnI9x0tZBaWgyM35muHloKLGPH664mUg0LxxdP43VX
F1ONa+491hMBaBHYecXuoCHohiEtF55P1Y9HRZSD/T7hsIrGhP43qmXYmND/bsV4DTrfatjqojFN
00y1LRvTNtXRC41lHtLCX8+ZXEVj2oeW80BPh6qdAXNxOlCQdFEgVY7H1UuIY9E67SzJURFtqn4q
uFN0Fuetas1iKDpTG801yVN0luSoVExq0ZnaeLbi+9r6qxXf186vmBdsmnslCy4Ll60WZHHevFUT
wAqL8+Zt/VTJbzHeKGGgw+csyZW3zhpvVJ/oNIR9YUnuvFUT+IrCrD/xXL5iHozSZU/dKMEoxzmv
2fINmSWgaZlWxsufmSjLTlVwMktBIUVqOSB/ZqIs9USEzERJtrNYkMu49Wv7r9REisxUMDOWTEZN
WMBF8WaLCYwqnZqHZQKjnIpFyE1kVJlb443c/GzF+pX9u041cE1kVanqKrmJ7GJCWnNdQY9vk4YU
hCek6Lieek36x7DR8VxXVEjTpOechFwodMcUkLCqm3ZMDzl6yM7ENem4KGcRSeWs7+tESqNpzyZb
7swCEI1KZM7ElRXWeJ3Iq1oLmLiKV0kZz6gJKc2qpwZxlHfamNL8qTP683gFUJslNDBkSjX503gd
z5stGgLWT+N1OHHWzBG57P41RK8KyXUmGjqrn8bPOYKuopB+VqR27qgglSw+X7JbShPT26kxyNJ6
FZ1alqYoTVCvbqZbHWG6rtbQIEVpcaVOD6KWJii4XXF+2vodi6ZIjhhdepBORtg+bCm6dCObNnJq
o+iaaK0klFRKrVhwD7niX1abk3Y5C4kOAyeIwPZ6o86f8iez1hGp3bUEmpc/mZWOilLZzk9moaNi
weeb5XD9QRTKgyh/MsskFa0spcqfzCpTheL1KX8yiywVnRwpKMcEXi/VZtdpai5OvRBTcXFKHlD5
k6m3OAWFZDdN7pwCZ7f7uncu18jBVHpcbQ/Xvl4pwNFS6xzV5Uq9L7XbVpezxdXjkpeG24ySTEOl
UO/StNOKXKMk00xhGiLMzqRSzqSTc7kcOQP3k+mAqmvZgYUNIWqlfY0fXsr+KzeVD1UcQKV7qgJM
JjD9V3Ul+4+c1cKlyinGdonRHXevfT2T4zbj8FIZ7mSEMQ4vVd9bVctOoXT2yvJLBQPlJtmkHF/d
GrevX57LjMtDbqZtoNY2YLRu8t93xu3rvkuXG0+nVL9eNcb1lerhVaVBPLW6+Do3jk5nG642KB+b
wWhX18ohX2d1evPfL5/A5U/LV4aXmf10CpVtVfbdK8OrSuo/lL5fa9+vnNS9iT4dbQNK3ed0gdoE
nUF/WuMyf4GVzXkV3lcX2vDC5n21tf9SJaCqNZZfqMt3rfH6sGmc9votyVPonK8zOK8e9aKpJZ3w
+iuVfHN7/7W6/8I+f4X6tL4L4+0rw6vOXn6hcr/n3KBJgSuIAlfITVNxnqKVH2Eht0wNY7vnNcRF
NF/+/Di+9Nex31QTtcrwS28ohL/+6U9/+POX//2bP/7n76clN7F1rai7ttlCa042ZWN1rm0zMQUj
ji2VscnyWrDcxup725LCj/60EgyqwV7B8TD+vP3z7BhK7eYy8gLAw0B6ZsaxThkrNr+LYwtlrNjz
MI4tlbHlE9Mhg7Wba0i2+7y0IQ6UTZ2mE5MtcWSjjBR9kTiyVUZWnF0Yj6iYiP83/4ch/kIjpKZr
ld3A2FIZ20kmdKM1eA1ja+Us0EhUxibTnTYbjGPz8TiebfDGUKIBqVFTdPoc49gYBlwYXkqw58aw
QMJwsclJY8jBMLx4wsbPh2tjK6mnWGMo4GG4m2M729mt1OOt/MfPv/zhr3/437//8oc//+sf/vyH
v/7f2e3UOterNWKtdW7bSE66OFbj8qVG6LUuXcQqNzC2mnj17//tN/KxVFqjcpdV80S2OfetpGMJ
Y1s+G4KMLpTR9bODfj7YKYObZaUnt2DfCg9oO5WXahyPiOy5htLoAruRC6zgyFoZ6aTYakO0q0bT
rmLMTwJSxLHKvttaJmJFMwtjK8kvGccqp9Y+l9yf9p6TvefWGpwUSYtjtXPja+/h2IqsIYReM0Vb
oe69ObxsGt3Io5tM0o6n0ZXybdFGm0YrOlpdSxbGNFrRtKh12vErV3TLWqw8MI2uldEdW5EOR5fJ
DCiT5iu3Tw3/DERZJut4bV7JL72MjRoyTWCITX7J9xVBlztZWE3jle/nuSwop/UrQksGd5Pva+NF
LAoZrwjrvBTjOo1lxohpuE0wYrQHlstkimM1Il3U0HbLsZr51MkPG8dqD1NhKThWM73aecpuPR+r
jazn3r5i+VWFCdaOu6FIG8/aO9uIronxLOUJtmwwK46tnj9zP//r8KPfzz6Bepf1VhrZBRBncMYM
nSzVy1heUHvthfrapz1o/KKWXRFkD9oMrfbicYbS2EUmK8plMnKVigzNBH8QeDvaKa2TcujS+FwZ
3zmpdXEaX9RyJkBWzvJqq2w5Xj4nHJ+LrY/J+htl/SSToZyljqfxTslkyEkbynKWF0zOXzEz21zK
gST7L5UcwEy2z6fvK/tvKyl5nexfOf+ss8+/6JTxzbydMHt/rXJ/tZQ9T9afKd9vjfOH8UomTC5m
0pD1K/ff5SvWr9x/XtjfLxT6zdbQn7b/VqpPT/av+EnabsX6W2X9texgGiFQ2vvJxRxc8n40P0+3
gn92yv1b9O8M/ufm/OuJ/+Tq/dWkfMSTh226f43/dSu+r7nZWpv+80yhn9bmf7my/05skEDuXxnf
Zsb7yQ36qQ36ccb7K6W6EOT9KOfXtfb7yxT+29ZSG2tCP5Uiv3Kprga5v1JZfyG1syf7V76fOamN
NRmvnH+Wze6Ppx/l/beNwb/g+wr9dN2cf7H6h3J+bbFCfjfK/on+UMAdcN+vle+Xxvk7g/9UBv8C
+lG+35W2/lMo8iMrnvjXwvbTrPMFyAFcOUHNd1/+9XHa3Yfz6cvv+tfhNMAvo2rvQk6CaEKVLc0w
S7jgHCJJv73227s3E9L8P7/8rd/dx0wEsJCBa4n2eenajvcLjEMrBZlUOlIYawbscMF1WquDK8Hv
Fgd3P+XqcOKunKFyyMqVfXdOXrkf3SiIIn9oOd+UbISAykNLUv0BC32Wi1V3CpRkSm+RbqtWV910
4qrx09qGW/m7/qpa9bt1qR51XusX1air7pRFV+Z3lVV3tUraGtywdFWpDkbS1k5MgFoSIqkUIml4
15cJUJ6aSYgfrtRdd/pF69ygafXb8ntulD0LvWXjaJ2LNQK214RET/0v2AMzUKWlq3KVtPXBtBsv
9WOPJKYTWKvfc6Nzff2qWnVwW/AwZnLPCvuUcuvTeSu7JnCcGQwoDVb4UOVU1qt/mbQuXj7Jn4yy
DX5wpovoTqVQ2vPoSVY5hbIrmThzFJAKJ6gL9Vnogp3CLakDnuxXWXdW6VKu1emrMM+6Vc4sM9mn
JnEKfeXao2pUXcjpnEQAmKab1jhJxhcuT4xXo+zGPO1auatW5PnGkyrzBSeonras0afQaDQpvRoP
atVL1jWp1omCKvJ8TV9u5D1Hnq8RZyffc27dc6XrM04nEqcKOl20V4YOqGkzGZ82kCwE7UFmikpR
6rTZzPdb0aGK2pe3qgoE96uxTXnBMmQx3E8ufze8JUWq1kLT4CQYNYrudHarK5xdJYuZ3NJiamc9
Y83mLvV1t7pAz2WzGUZnyodrvnShM9XNMq+F2k9O/CR6L1zHYpGdpunhwFoojOMURQ0HSmnY8MlC
97QI0BgnMoowrBNXmsujpMi4U4RAOFEB7WlkFPuDKbWBylKlzHSnSQ0cKXXPcVoljnCoQol8p1kn
4Zu1eLC1frAFj3ZwoQ6RQnJlK25TPx+SXt+RaglOc1+FTRby8VT68Qg9XJzkSwkLbUUaL/TXWIhE
pz/GIpefsZhpGm7DabehrNXJ779Uv1iITK7UH1YtjdPprVAYVa1cfSUzqkpyKYWRpfamlB2SGgqL
HeqP2Ml3mBc64yjFkcoGXSZTW6ucSytKt0pnjLl8FTozLmvx/ea5zqWE7J74TU0wNuLIVr/GWpYc
nc6mOpkAKvUxSsXOnKJ4h1fVaKxKe8bZkgpQN/rD8XLoj/3pvg2hn2H7djrf7sMuFYoqAetXfPld
/lOllmRshcIRpR+q1oKkrs05phv7AOmDW8liNL9aaQru74pMS/ctiFoPz3KMQrY/+d0WCl60oP7U
OV4UThoKT+Y/6aUvaTzLcXDFHNafaTPwNTri4pWBJMUbzc1uHNjCspWBdSblB+MVa1TVscYxrlX9
JMlnpwnR7U81HrFyQxXrRYgDlZqiNFZYogQq0xOodSpeNK2vZjdSK9/ky/XGxSrHQ9wdCxiGt5Tq
n8zn04mFUmZ0rLyETvGZxAeobJw4nGd4b4csQ9s5DUrM2U0evqyO1u1iXLWy57rlPRh5KH+l0mVd
aN4P/HKj7FrgO57A1MoUBY15waPPF04m/LC27Iol7RzIGt+wPLLUXrDGY9OSK/SiPkGy4Y7VlJmi
E+sIjUJJIxI+FB2ZlvLVkpehkQ8o8qgq+FMmd9Qqd1ywm42fVaiqUkJd8bOaVBBanvmvKt9sxTam
M86j3W0meqeM+yF+3rnkbC2hIrgBp4evHZMAAwlPV1utyKNnOp0ml4SiLOHTiixsxHoiE5PVPuuk
XLnZFSvfJ3EqxjGOhKmMptl2hMTiNWsD87laWMwekvbwW0GO40BN6chE4qh1HpXLFdT96eqseQk8
icnm/3kadud9SPiPv/5SZVkwJZqQ5S1KG0xKblPnGFpbuFEjsqFKd6qzDZZI24wj65iAo3y1SWPz
BhOTMzK6+slpo8fodXB44KkWZDTQm7rjlAEOtkxXzmm91RLAS5LDPd80Vn/Qy5o36ahBye6y5aKV
sS3JHQdfb+7ap2XnyrJrtixtPG3RWYef7qr52GJ5U9p3UyX3EijNG+LLLyub7kjPGZB2+ah0NqFQ
h3HcNN0e9N2sJKOdNZqcWAmXvVx3p+w6I1/GH/O3Uarn3VbyXSmCNqyaVDcoscuRW667Vc67Y7tI
RQJViip0GddAKjAR6zk2bv4q6HalZM7w0URbFQYjinK510YZTU4qR4dbRqijsKijmncomG/YuKNs
SZfV8oY16niirSfKFCJvgTRJfeoWTnx22tpbTAMr5AhdvVx1ray6mJdQn7M+bbtEUKDUJGLT77MA
peo36rdLUvHjie1WBnF2iWVjwbu8Lpekrd102jUoOHW3/LJyYl3DtaEgp608xzYXapwk+tQeZM4+
5lHQ1Lp8JMyrANb5fFuFfluEB1WptkvinJqQdHP+VS7HamdmSUiN/dVix5HxyDQZWc6eZJfNVLsv
Zb5SnYMubzkN5xJfS2MVQ67zrGMDnZY6h2NJ2BqJtVynzOFYEpirEF6YN+uUubDfFGtB/T9fefLh
0yU72OIMOJYEaVE/qNaJvHBcfBzLUiLDWL5HvaVEhsNKsYxFJpyuQobDqtmeQpYKGQ6rmqfbd+tU
yPDdFKBC1cjNDI3K2DIJGc41E12BDEfdyNfkrLF88SFLfQw7ztjiBJbyGK6YRHOJ28NSHsOa01sC
ydWUK9S/cMiZVGnJZvphxx0bZFN1wPDlRBxlG4KL63TAMDptGLsbu3UaYDisSniHugYYxmZsMNLU
4MJZsZlfugYXdpsGVsi9XL1CCwtUle6HouIshTWMzViUgGWQhCWn74KLuc4+ofuFwxKrdOi2fhjc
yG9YUXjDrgu26Jql+oVdS3xHV/3Cd3OBd+iKXyDLXCo4pit+4bAq+QkreltYNJGHxAlv6W1hbC2r
LYreFg46jaWZrZZuHw6rYCvcjVpbkbfrtDZMMaUlVmaMyCqf2ZDkelrD0tLacCxJrJ+39LX0Nhjd
krIaeRle9rMyou25mTfobVY+Tfx4Xgjbzu0PtwWbj2xpX2GsdFG69hU2TPLokfBWal9hwySJHv6g
XKd9hZvK5gngbh33Dhvu2ORr64mEsfm88EW+TvcKY2u26IOle4WxlbBmXfcKZ1WxxRosTTWMTRTd
Af6iq/N1mlsgj5ItU2FpbmHHDXnJc4Nfl7Jh3eW8wEP1CfUtEGeagCayWTpY+Hh6UQjnaNfpYGHb
JVuZydLBAuPsZMap6WBh0RJ16lI2LDqTX7KkhAUCSQwXAvV18wllKFwTKYSRp1iZZe6Gj6fjoi1Z
LV0ojM3ZAkKWLhROelH8Y6UbLHyX53umPhMOK5MPS9FnwoeLOV1W6/SZMLaSmbWiz4TDyqVi2Loz
JAzunsqsUIWmWuuGQsuCpIwH78oahSYEOlsW4GApNCWp7RyQM/ksXqQrNDiatNRAn3GZZ+vUmbDj
FMGmVWqsx4VjC4I3CIrYSo9Q2DWf/2fpJGHVKawMSKm6W6mThAOrWLiQpZOELSccC6re5TqdJGy4
mxNXvs4fFL6bLhkU0K5bp5OUpPj3Epth6SQlKVm+xBlZOklYM4G+lgseqOgk4Y4IPgJ4kSvrdTpJ
II+SxfxZOklJqp3jSeeLYKKikYQdEzwZaThsKQXhu6VwS7VeHNYV5Kgq/NGt02PC6LRd7DGcrbNI
wpILtvyLpccEfsk3gTL1mEAdPC5L9fgFwuhYvJClDoSxfHkgVQEKA1tyQbNCULYCVJJGzizEUDM5
w+CaT+60hGsY7OZLr9epQIGy+DxpSwUKR5ax8CjVWRg+SgZC4NPVbp2OGwg6kxMMNM0rnJVYO902
R8IELQuat1S3cGDpKT6FbBXVLYytWHSlpbqF864EHp/bQjx7rhhDNTd/l+s0N+yVHlkC9or3v6yL
NZpbRWqDYJf3bBE+UDQ3HFuksdhYLa/ydZobjo7hA1wzMt+Z4a1w37Djcr7utSFEHFyR46qSUWap
fWHZaew8fcGSc+HI8vTlnF6UrjKGsdIl6ypjOC6XVj3zGppKYziwIp02oEGadUpjOLBcO2ynLjtG
AtDkbrGMdbtObQybThQ2h6FYimM47nRkwEtrt05xDGPTeWGezEocWthznb4LQb1sneoXdpzO+ikY
qKh+Yc0lOa1qdlq68hdWnXjBIkpt8/9AYmSCpQ9P0gDDnhONVMF5WazTAMO6067nyJXc5kF5oi9A
iTbVOg2wIkUYcNXlgkIUUyrcVC1QpqE9hg0302BaWFPVHsM51zJNSxpgGFjNj+kzWLBAGjqvFzXA
MDg947mrUld6w0ET0qoXYxUFMJyzm9Nzu04BDN9NdwR42GYN3i8cdRrYwSRdsdLJWZFyNUt6NhXA
cM6J9dDIkKW/hf2mh4T4M7dOfwtbJqzWpULHlv4W7iiNpY4US3+rSI2ewHbAfIypwn/p3/w/vaWy
sJDLARf+FxUTkQlhXD8S8m3+UvzklLT+OmuFmPlsvAxfyTqhCsVsvFO+X/PtSWfjc2V8yad6z8dn
ygbciglqZQGLNpHs+EIZLzYfg+vHCTQc35rtl8rXGwkyMX1dIz5r7SpEJaul1jKR8LVvZ3J7zunb
2sobtmpDyJr8i0JvnbDl2YE3yvjM2LR+ZJnUuSuO1lbe8IUYyHFro9sV+861CQRKjUeu3XStLbzQ
Np1njkXIzpfdKt/OjQNXACdZYbwObezzcaOU+N6/bK+79+FbyAK797f7ZjhdHvfN7boThU7bJCGL
8jYIu93ttrls3/rN9XHoN7vr9vYuT1GXT3LLT3E4b/djkyJcTPyDTVyltMMma7p5m9ug53BzbG6P
Fz/6/Lju+s3pcThsjsOxxyZJ8uztHMMWzv44eAHrJ95v71tlbMOhuY7b4cSvQjm5MF/NAZ6+Dfv+
7O9uk65UnqIl7x5IMo/Q1r9tv21vu+twuW8e18NmeL1uj/Z6Kg4Itdvu3vtN/+MyXPs9PXJlovSk
sThILAi33Z/9erb3+3V4edz99d0/Dn7Kl/P+w9psReq+BJ8DwTcEYj++GaSevB3ENY9j8XRu/V0h
8m5G5HTwffviH8nLdvf17Xp+nPbKCpLdQlrA4CT7x+Uw7Lb+UMbTvSmLSZoiSdYML2Q4fd28X/tX
ZRVER0UXCo4e3k7nq6ffc6Sa4XUTfgXPoj/BHpWd1dWcjbi0IuAlw/Fyvmqn28ztzzIN/3E8BDq5
vff+gn5Im2KNUIHgTud9v4rg6kQyoA/FNKmR+/THy/0j0M5mfz4q06QTR5AJuXek/TW0Uy+cOAXZ
4HDy1/4rdpcT225K1wg0vV9H0DXxpk3QrvF8vg/3983j1J/A/7wHPqSsxYkEFAlSf9sl5/zA4Wfs
eiFz9jDezXlDbJTradfhv38EJ/rmZdgP/rhv5wM81cv2euslKMVUlwk4oj9dXNF8njjN9n17PZ/k
eZppHsxzySOM4tYfemgOGZc4vgxY8+Z43vu/3riCezAQhs1rklA34XTp2LzoXoTR+djYFlOdJi15
NrrshcEtyWFup7qGs7EuV77czhfunodXO+nTJEGV6Njzbzv52ySRj2DYZwfeSgdekLHJKpkfWSl+
maRAtyMtzZddyauujLsqxQPrXGfdVVu+Sl/Oq874clNLh92RxGuBwqpa/HDurItqxZdB8q4FAiud
eFy5NbbLxB3TBHvprF/kszZHF41IIuZF+U9v5U+T2hEccbaNvOfMWHXdSUNri6w9rxA3XJgvOW+d
vGFnfbrIxE+XrXVRpcKCSLa7xP4ymRUUmcUKyr1I2+aDzDN53fRlCOwvk88st9adi5Iuz0iBEuLJ
mo1u5JXn9pvOG1HeFCah5DKhWI9yL+45r60PFyL/y0zemZfKRdMEaomL9fLLsh6H67aihC3NhRed
TCXWm5bVoY6Km2THz4lbZr6FqUtliiZWmKy7EhWx1nqTlSjpCBeTFi2/yLw0blkU7V2Vz75bMCqF
qFFUJn00hcIHLP7XiE+qboyhlSjlqgVRP2usZS4+CEvR7lqZrkiFI/m0ZJ3AVSvklELVuUVeTaZ8
PDOFTS4LyTIzSKwST7y0aEQizpYSpyCknJNVfPO4MkWnyJu5VVQzXFekMVMVahr5TZnnVeYyu291
rdNrxOJ3M0vMVI34IG07TqSPPM8sXt+IH57VsRIMSMVubk2GXbWyPWWa7FmjPObKfsw7+TEvVHXO
4K9lEpvLGoZM8lbmBLX5KGv50BbbzrinIfOwsrK2XchmVTY325l3JT7o0taiRL7dkjJN7Jvcl7LG
WlrkLSpvXV5Y+pfrRBdHUduWSaEwT5u4ZRIpG5vry+RJ6jsJrzJXFu4qW0jKxokzLZvGKbpUa+47
l990VlpCpytFh4Pl0GpFDx4pfSaoYrX4WeJgEW0TRRmrbcfjVtQs5jfFsM9C1oUqi7pr0UKoTOui
U644s65Y1Ia6pTrzfE+dqKl3lqae17XMswvzUZTKg+wy08AQGT71iktGu+gVb01O0JSyn5aQZkpL
WTxl+SXb7qxcVnudzbqbStE+reuSHXGdzf8Ked2VxbidaMQSDx4rYTv5LWeWkSBz7I4Wq+ymyj+z
D8sOjswy9zvZLWNq6v4aFRnX2QSi+NRL60WKUZcu71YQtrLwBQ9jGH4mfrq0Py1fVmlaKKKAbOzT
Fh1ZbWfaJ3UjM15nHZcfrfBti0AlPailvmUhoJjLxE3Vv5w1vMUgRNdaksqJlqTtXCllxa81/UJO
1ERsT7pTVILGtmAr+Y4zwzQRffhmINLJjuFiIVkdZ0AqdGn60nPFh1aax92K/oKuNWJ6uVMM/taK
6uVNp1i+pke7qWR3Qemsb9fKtwuLxmQtvcvJedesJuREx2FemXCMKpNp21mehkKhk6qmV806d0TN
MVuhgCk3bRqwToZEkILhksNAlM6ZGctsFfdyldkuklqm0NyK1BeiqOoyE/1S5KKng1Th5990Jvsa
bC9JK7pn5uAV1skhh35rE9eQy4OdGe8WQxjdYixzTaJsNr28eVvK9FGZRy0iObrMctSWlWzStLYj
TPFRFLZ/upUD1sStLtkIirOgs7EvinPFZGK1qGtXNlhIZELO1KRa8Z5bW0Zme9n9Zof4K8Vuzq2X
Ucme6coSz4XoQ8tWyEiZwDKbjyjRE/vEStGnVJhmUS3D4GrbQVLIMtIGKomBgDzPLOlcysumumfK
rpkzAzlKVtnhTMXozy1u0CmDMxNpJIZwO9uskiMBmeHX2cunVZtLLmQoBtVlJJtM8Vk21rdb2WfZ
mkqYk81QE1LhRazMACtztFPETWu5C2qRF1Q2qiKT/Ya5dWKdIuYyM1BVKMa3CcxqZMOoNVHXnWgY
dbVFn+KW22XEnMOgyLwzby0pJ95yaZFXKS7ZmfpEKYO1bW9DJr+o3AY2OAX3V5u+Cqcoj+0KWKsi
nnPT6O9Ert1YtrPooGlpWyApnUA0nVfgSGTZnLc2nciKfmlFBBsF7e0609daygABi3U2oqpdW8yv
FYMmbWv7hGSXkCkrcoXrlvabdLKDuHU29lh2CxV20NnJobnGDKPmpaxXtKZJJorndqEYcE4lOfXD
jF+IoIa2NTHqlWiclHYgwMlBl6bTQUqdfE2ZncmQy0LO2VEX+ajtOEIl430yk7xEaHyXmUprKwpY
2hmRDbnklZz4kdWWB02RkLnp7Sxk/1ttn7XiFDc/3YheClsjyQslkGnDJWvx0/UK77JTBFVjK7zy
uhehOWbdInlWM1WIiZWXoqQqMwtjlJeKtOnsqHMpx0GzztQqxCBEV9qA77JSPm3C//JalnS56Q7L
ZVHlSjPmI4ZtMgt42IgSg0RDSYXzRQKb4m51JoROZIKd+abF/LW2M5UKUWJ0NhMrlThVZxmwncw+
zYCPjFLvGlvXFgmkNCNzpWzudxbX3ssmUV7n1j2JeUGNCQERQz1LFYoLeMuerMJm+KXsl8lXqEKF
4vqrSjM5UrSonAXWbmX3iJ0k2MqoGRO6Jxq+TWfC0+WbcjbGSPRxtCuiDzLUJ7f8DKJfuWstL8Fe
1vxqZwfHZDuuMOGZYqC7M/1Q/jIUB60dipSrJZgunbJWJLrpuevEAKoJBmvEoRSRlWo0zVPwxc9a
oJdSEcid6dotxXDeAonKnbQc5G6tyJaYo9Itky44R7gikU1olAjZ6+h74gNEMnK3a8wclVa8Y9vT
KOaNddUKg0R2JJVmfL0QebWVkljISK4F7DfjLEc5UpI/USYM/zHVqrGrzUCBqjyVwpFMMV6uQ+Gl
SKTKYD6hHGuwNsZY3vEHa47AE3loK263TUMlX7gTtxsB9cpgoVqBSwVIlMG8EuOSVTCrV2SnmMAp
kyVDlay1BWawfFk3Da25oVJ9GZeSasSxQnUZrIFsEiSfgu5Stj/WY+LfMa/T43bz2XeL1RhWl7L6
xAvi5QvWXi70kbyFiy83S5sV0juE0jAuZa+L3xUqw8CHu0ynqVpcMuEX0hsQmc2IkYufZcNBTtyt
8YCEqjDw9qJs0NYsc4zO5Bh8SRgsjp0ZY4WKMEjMtfXdXORUrf0SMvG0KFFmnyjJgrXzZofVra3I
gpfUGUyjEoWJ9RAKUZZkzpR+8iG3JpsrC3GsxZlzJ95tre+2y8RXb71d8XaaLDOOWHz0DeXoPHK7
FT/bOmPFlbjZsjJOOJOVoqLT2WNeiSpRa3y1KkXm2OhHXIlyj/A3MTVIfLGNvlVRUjdVbjDkVlRp
OuPBNuJHG0tvlKrMuFRkS6amRmQUtXE58lebutVPWKgTA3RISELSVgtRPXCVcT9CiRh8ALmtJssf
zixyrMQHXxrMrRG1sGZ+VvnKUj7Yeqex1BIncuPGeAWNyKDqmrKKbnVVGZTRBjl2tUxTlshzopwt
nEkVosrZWTebi0y1LQ3hIxSjcSmlQ+EXTvxsYz0gkYzHHAV5qGvEr3bWV1vRdjJ4uVRHBl+8ZVWX
sr1XWpKgEseO+bTysxXwTihsjVN2ohVTFKbEFMrHuBSNFYV8IRtelpUpVSF1KR1CtlDFh1uWhlpe
yWc8U1SblUVnXHJ/yqckLjcvLI1RitO7FEPV7JeskDmr6V1qxPdXGlw5r0WFKL2gijtlqdYM2gPm
inPR6HKG60KqM+NSRpP2XVkKlYY135WiEdMZn23FV98ZfKoWP1pZH5UKzKCL1ThkIdDsUkxfNicK
UXpVlcFYa9GeqCyh2YnSiwg+IQAgqlINEV9SuFXUz7vG4HCt6MbuFtvNVgIEcbuWc6gpZS+pzeVE
N1w3F9ers01R0ltWkOwMa0x+UYiKcmWQshNtvsJQ/zrxDWSWGSOzt6bJ5tfTriysgt+1vAAyWXRl
ZrzbLpPdupX5+irx9VmaSSZebV7b1uJeFCOWUeFECyo3Y1eip7ItLV+YKOabprPdLaI+1bXGw81z
WdI7nayEep74hlpLNZHV3aI0FSppt7VBVKK7vyGxRZ5diI6AwrJGREdAO2sGsr78CkbpTI9JJkqR
FdZILvsCnOUkcrJv1rT6pAoqLtV21Cx6Wf8zLqkVX0HTluZpOdk6aC1fglA8xaU0BIWti6HYrjTe
rlQ4xaVivKJdL+ueTZ5bSoYT3WK57WutZDFmagoycVQWYWWitZqZNyTfrqVrOzG43xjWjKilN5m1
1Vb2s1amW6wWyTE3XRiiKMkMUSLUSMGhhcma5YdrGSWt6E+wsBe5qGK0teUDFGmxdcb1lKLrvrGG
ilp2k5nheaE4ikupFfJnRZmbGdK6rGSTwtJMMtmyLsz4iAgjGkuNy2M7OT6YWfFB2QM4dr1TxFct
KrymB1DkM6aS0Ip323ZmmLveis440zSoZBmSZ7rvUci9w8dnOacK0deTmW5/kaayGVdlLfpGFPLO
YheiEmeoJbXsuSeuKcG/JJ6wiccR3dFdlhvPR6hY71JpWIUaRTRBN49YszignahZVDotdqXMLTLz
AYl+Hgt3ITSCQavcEgV78aBqS40SETVtZQ11sie7seBSrRxlby1FStRz29oKm7UiSmssOaKZfTJh
5KZXWTbd2tYG4skadmfafZXIqPLaIg7Z7W96lhvZlGmtZ9SJlkxX6zfcila95cjLRP6YG3qNKEWa
0oIjlOJynR5GKksZKlxZsWPx/eSFqV7L2pCpHzhZ/WtNWZDJ9kRu+R33opi3AjqyWdw0K5wXoggy
NVaRLmYaApeWX4jOKZPDlXKIwxlxZ6FxCCo1JrhSjKa2pQUzbsVYQ2v6SUWtxkYR5bJVYKIVRVRO
21qKmAhB6gpbAImHTPBWYiF0cc2lKTZFkVu3lvwR0YNdacFyRIxlRxw1nypfggzdCq04WWI2lhiR
sSaVGVnp5HiBGVqpxVMucjP6JWMHOzuXSZQlhotVPKm6schRBLw3ltop+kzaBaYgX13vBKVXbgMS
xHMy4VqyGzs37rYRPRCNs1ISnCysaxNrUsgBksowcmtxzXVmBjadTMomj8tFK8oZjKoWVV3Lh1eK
os9GWYqij+i6Qj0XqTKKS80pcLRQ3SkTX1GxwgySv2xrY6IzrrOtt1I2dbtM14waUZiQQKOQgi1V
NsHjMpQFEaHWWAqKaEMR77sQVBUzt+rOkJyiEGpqi0HWov1VGc7sTuSsWW3wOBkf3TStFWUXvUTN
HE23vhCKS4V1Fb7ciO++tMxjEYE7loPT9CmRFEsDLClyx64wXXEy3Lh1NghQHlyVphklWlFOTxRo
ZZ9JZ5nmrQxUsdzgjXjKlvQS3fZ163Qvq0iKTZsb2tReVO1rMwkwE3VOC1cjxowbyz8kFR5xqYaQ
cq2iH7szQRvi3RhqYycGJeeYp9UFR5CNd7MMaU7a1bUMnDA0v042yLPKjnrJ0t1EsgolR1xqGKgQ
huzXbUwrVQxANbUpRMQSFK2F8xK9yU1lcKhWDIa2xkgxKagxYxSV/HzMoaK+SBKvRIeJKC5Lw+lR
iMLSWHAhA60yy44XSpu41DQ46bcwmK1r0tY/TX++WHtmRyn8TUmji9IKi0pDq8YKU0BIVRxshGPB
6SmNNUEJCN+QdmxmCwD6SRpsuuQgNCOtuzMxiKU4tjTuyQsHaShxBYr1ZpUtF8UKAJU42NB921am
69Z6k+KOTbc4JOJLg4kCK5SFkm8pMwxWL1fEWzKKjRTyV82KO2BQiURZmXVZxO/W1kkh1lN8S0bS
HIRMpE/XhhsGnLYi+zD9VV48SYvOGwsSKB+XFXeslP2WhtpRZzKrLUw8lPhZw1ncyl+1nBIIixVJ
w2Ib8gu0IrSdzDUMswpr9oh0URuXWygEWZtARpGmMrNGhHhBZly4lpmzndaoEHNuAA32pSy8W/2Y
W5nT1VbpkFzhN7mReiq/+syCtLeiHKurxs5yF28oM06qUE7KmTqtPNhynjbyhyti1bGL3stnVRuu
16aQv2oE4AuZyxXWV+WhrXHIlSzwa8srUu5lSrbuFmCFIl+2bQ357RYGReayHMorsyCArMBaNfog
ZCO+IsNYkFlk1Vp2hmyjVHmhi6JClmKEM0vaft0pBo7B6CB7TpRjVqk9+ZxzS47JG+4s56LMm8vG
8szLbL2zC8SInzWA8YpmVFnZ+aXM5ipDNSplhmNn9tcyZzZzV+V3nxnUWMuHbDm+IHdHfENG7ETe
bNXY7HUvPz7L7ayYrYW1ZpmWzRI+jcIwLKrKZZu3djOlueVL4ojipNE37OSXYKbdydZU7VYUxckU
/mppR4rPrDMrS8nvoS4tn2wp65K5VYlO5hwEKigUCMhlEUrAAwLmoZT9C1Vt1jaU+Y5BW40sU7py
RTVTcckrIpEiAzBjxU4ky7IzdKS2kI0FQ1cBkLz4hjvjnGXamOdMCbn64iNuTANHXrOVl9PKgsWM
rENGt3jQVmhRJmfDOZHL51xXznLDyi/Q8v7mMj1aFyT7Nayqf62TT7hckeMiGqCFoTnLArhqzFLg
snqVt9blKj4RO78zU3xelpWiuJ2dwZxrWaRYaFIn83ULvVfLOoOFJugUn7FVt0z20tWVld3Zyl6r
2kRmOpkmS0vZKOTHa3lvZYFgcyqFHk3get0qIsEsWyFfcGmnW5av8i1ZSK2yl5mdseVScTJYCGcn
WzlWYZJC0VOI7BU0wlLRgWvTiSuflaUBy7Hu2rIInSyPLFBCLh+zXSFL3qwlFVpFbFt8PVe00Mb0
1PXyS7AiMI2i01UWl61kHXaOUu64pAjxjix9X/YuVk1uRECd/N3KisBUCnLDamwhe2QaS7uSFZXM
en+tYjdXK0okyLqZ5aYv5TdoZfAXsspQGCFQJx+zlenWyEO7bEWlK3G3VqFuhSJpXTCpT4use1et
Ve5A9m1UpV1lQXz6RsipkE/aWXUhZI9qbYZhALApSiNjzfLLz4wll/LQ2pBjlQIjMBzee5kzmy0F
lKBta7qP2lYxtzvLryGrC4VxVnvFzLfO2ck+kfIJkfffcfTm2/Y6bF8O/Wbfvw6n4T6cT9I0BYEi
5WDC50U4929D//1yvt43l/6660/37Vu/OfSnt/v7Dafh/v5bf70Pu+1hsz0Mb/wnSwJ+hq857Mce
4lbf3jf+Xw7/6OWRNRkJuy6J+q2sePPtuP2x2b7czofHXZk+I9OXaWH29N9XTF6mycF4yctq7dqH
04rpC+FQmZmHI/zUT7r5J05anjX/tbO+i3OODx/nBBvDNWsvTV5nRe4KkMmlWzfnW3//5f5xkM+1
TecKtkLZrqcBebWOnIBD2l17qjZdteSxghGZ18V//fd6i6jgsrVfh8O9vwY+0r++9rv75uU6vL3f
T/3tJs3kSHTBL6wmM3m2cdkOp7vopCCx32lo/PDbdftx8zyr37x/Fz/NVUuJn969b0/+SK0V0A4w
Ceo+Lf9NYdEl58COq7/2r/21P+2A1R/6e7/ZXbe3d3GmbJGFkdO5zpftbrh/KOdQctUK51fgz2M4
7DeH7Ye/YHlHHac9Pu2p/+FnPm0P8no6ZT+78/FlOPV7+VYZjEoce+svw1Y7CTbVNR7F9uQZLAhd
bQJipSAzoDP0+81wOvi1i6M51f39gXSoklLluLTka388f+s3Kx8TcSXlCAXOZw/q5fC4ym+4FB8i
Hrl8XJk4cKIX+bLS8wUzzeX8bb1ez8fN6awcO4m7AwnPLm1zuZ49j/UPyBPexbPU/eYmigJ8BOku
CghfFnXDrkteDWGIOUzIvyJYzvk23OWVZAts9/xetvfHdauMnnufosYEbGgzY5EyTWRcNvTTNs7X
fX8dTm/yOgpuF9Pu95v9A8bbB+uIzAKNwjUco7u9b/fn74HTBa4nix+SVE8F9JJ1pqW+bg+Hl+3u
q8HPy4x7zoQRkDllnsA5tJ8ex9EPGWRSJAK2kEnRj+rv4VmsE1g5AzhhZgX2td9895fQez3ntIdr
9jOdH17lkaXQrLEudsmeKRXH7c2f/2G4BNKT33E6vwLYVFHk/Do1cZIuEgRD0bB8+WS8gJolB1ZR
WUMYxKVFnPdxW3vP7eIbkAUs79iaNI3vw/191UQE35UXuLOCrmU4geWpKi4Z09AkHkx/vPi1eGo8
9nAuKj3Os286mS/IT7aeqz7tXGU53f337/KJMnFnELgjjVzQsNtdz4eDzN2qZ37NP3dVf6k5UYjD
LoeRZm9wNdvDsNcFGXHpoQRw2r68onB4lTdXPm9uIcjUd9iIir7CpeXLzpXLfhZt6srSVIHJ4FS3
4ZhOew2HcKIpER6R/IJyUQEjL1g1otzz2aYziFt4XPZwRZ4Ct/f7dXh5gIhQ9YeyoqV2MJu+IzrI
+/fNDf7/cN+9y/wl56yzp3vavt4VOTBr9ETWcX599ZTb96fpURw9X79+bB63rbYtAkuD5RWKEnI9
37caJycRhmc7iV7fqX/zT9XLnOt2PzxkW3xWJgiT1CJ3f9zu5yOOWD4b/Bt1pXlqnAhCEHitc2Ta
zVLRvmyvN3g2kcmIk0ZBBpOWeLTsu8ZvyAsrpjlA2SnmfDusb7Q4N8fhdpOeYZ46meMu4TgrZpeB
fIMduMakyFONuqKKErth5tXVX5glT6trsJYOt7qRC26CluWf6/kir8ulwwMDLNNude1e23SG4EZ3
dcvMehx+bPydgEZ4k6dKGwa/Z9fK9IEK4UUj4CzRGqyQ2+rusD1eNqAJwfJ258P5Or08+VY6crej
I+6JBPfDDTz/8vqiMwmnIYXJZusDZgDL3O7e5fW49CCAfbbcSz2dJ73q3v/w4tfTyW4nOfny1HgY
lwdJU3kbqC8+8Q23UPkuyHOIPucV7ETecbpaILhIb/zKHqfh9Xw9bu4fl17ebeTLYbeoIHBsxa9r
e+zvkkMtTy0jcGkZRBzVJwv79e9Vma8oCLGBxtywdOwp+Gv/8d3rL5vtLa1zc/L/ledOm4aHx3FS
eZ/pEYBx0dVz7RkekqdZQSPLU1FnXAPsMVBt5NefpK7ENSgGe85sr9ftx8Y/SORA8ttOVA8nX5Tr
mIZ8xBkhfBoTmc3oTY3TDaj0tkIouPSWQMoUlUL8SXUzyN8R8scfNUu3cK1+edfhh7xjojc0oNEx
E137w3mrcEYyRbJoWM547R83hTOmbcHbaXL1Nun2VkiB9NBjFLEO4RjZm6lacfnc08VKPs2jW5IU
RJBKtVv6gjWToOVwp5Ld59mLFySyTtq4FWGSxAQ1b0FSl+GAipnqjU6L0YOxPe2D78/PLmvfrWJd
pMCXelDNmnBDunLbfC9m4YcoGLf7/Wpb0tFurW7pt31/9FHXl22ITgy/TIq0diSdGIv6lIGAREz8
+sVkdSycMqpty+SJ+DtFJ0Ew+mQ7j0G4z4bKIyvObbK0ENWwSsn6zD+jGOHxES8twGdmzBffy9a/
wcfBP+WP0337A+cY72b8K92EKxPfIw7ScY63/uwVD29ST0vWZ6uK+Wz1bDaQr2snSlIRuHE5nygp
bqvnSzoFhuoqeWGW0VsR4Zqe5zjVKI0epx2yDmOuTFvWeIPWikqi25cTREu+Q3OHSWCjSyw3D9+c
seIcBeOMt+tu9T22nIEvHb55cEnrxZtQlmXucKFpuqA9PHFtldlxaOQQb7pt+h+Xrazs4qF2SjQW
ucWkmMp8q1PgFONhyPyKSycEux6O8/ytv74ezt9HtQNXdBl+9IfN8fwN/sWIlzhFlUSWkLQYG8KI
inmUf9RGYNZ9f9t5mbtVIu9clUYmGiZaX+hHFjx3SziMfPuN6GEnugzqt7pL27UVF66S55Inqhn0
ZnLT+7M5+CkVJEjTiW5/UbuSVSs3D8trjlvNm4R0zhbi/RWkKm+94b3Wt/fz47D3+/VcYfutn5Eq
xrzlGAMXT55jjGTN24nEtYQ6yXO0DD4FjVWAPQbUmT8vT1iv3pjbQADn7Xp+eE1eRETitvjK+Gmi
+3BQbpKtOkpWobkI8PNsNZ40wapAG4EbFwD6KLKnhYSIkjxDa5yCP0N1GxzQOo2eKDrQmraVZygb
ku3jAmjHmx7HLbjaU69ez9+89lt0U976O5D6zdJ9Cxo6SnURJ0kPIMnT/V3FhxSsGfwV/vWSOjfZ
j2zzcrzIUxVMoBuQDH41gfIB0HDZAqM4Hz7elBNuc+YdIyjCM7EelD5cFphHihAsaagINMC8TAJ3
tpBN/60/nffKE+Iy5KZZEn943PrrL57R9D+f/vMmk3IrxOuet7h93M9K+jqhgAjxWSxtN1x3U5RW
3h5rT6dZbEAYSTEDizZqnfx+lIzeYnlhbZrn8DgOpy2c8huECLWLpylCcNZ5W/HnMj56eV+ldvH9
wf9Sueem0UaHNciDmRzl5wO9bPcq8yZAmNxhK4v8iXp39+3pTVkJW+OIof7zq2elX3tULf7D/5U8
IROPp1u7wROynzfRcRHjkLfCIb3oMCraFIU/o0gu1/4QYtQ23VTCDhMVX5Rbo+VsuqnS/mKC2zdl
gk55SfFszhjdvcgqEUEp5w5tneLp7r05eVUoh5bAhxkypz/Ezfuw3ysOTbap5hM796ryP/rrWZ6l
WzNLSluQ95cJAJDn1yHPQW0R4L7AftEl6nnl7nC+eRXt6t/DDV2+we57728yurBouEKT28Mu/ls0
SUaEpo0WdkXxPF14UQZWo6DNpAAH52kARx/6HyH3wP/7G6ykaqo2l0s9uLxkdItRDMQ4hqfEi+yi
pxDdmUEMqhfqN6/+kOFYZNC/y1pmGS/nH6OdJw+kQGNUXiOH2d5375v98G0ARfxjk8kzMJewIukN
htKUh2CVBIonQTj85UFzmTsn8AJQM+Ei/DLGC5FvIaPSiKS54S0cz6czcn55OJtEonP3ous4W/+t
v/82kj+mTW2O2+vbsObRuzznVnHHtEd4ZvL2aSpOKpqJhz+EFwmmg/wMSLCAiIWIxCNuB+Dy8nMm
PDmk6zXR8x8BWIZK4YpsCYmNTB2f4ftNeT+OeT/h4AIUduc1KuX4yMHDLvLoi/cCEZIs++v1fFU4
QMcpuQIrcvI0jGTnJ5GnYHK6lkQgH0Izp6Gg2f7jPMY7etF16cqMG7r8cil/umabpuC1X99e5Gsv
uXGE/ehuP1oKMTDPGQIVn9zm4lnw8ENxtJEEmhxiHXk14kCnW6uLQi6R5ApGaX05nHdfA1wfNJjD
9iNmuJ4fd2/HyzyJXGKFV1FNUtqiYwKHJXAIYq2PDgzTgUAV6Aoz18sFRShvsZ2DgscIiME6ci7h
Jl5keMby2IZ9v4BRfO/BYyu/N1ZsgMyRh7BJk7jQ4dXLXDWJpxBqppzlp5nVnJAKrDHqWiAa1bPt
bK4iszVXcd61STuSF87mQQZhKp9uq8kxVYQWVIPAPO4weDi+6QulKTcYByyib/ZxGnZnUL+G/bAZ
bmdQgzYv29uwk11d5II7aL34iZorBVfa5sV/OsIV5XHV0qkRdScvfbwOGpDP/tdBG/Tq8LWXgOcQ
jmurOYYsj9wwBAmu9wOo1Y+jCMsaWyZPUd6KeFS3P4ZbDA28bGWwWENQkjS55uVxvyuAsLrl4G8Y
GkF2EA5Acx8gajSbgwGb6TSVrCsYmDnu8zjwb4/bfXj9ML+dEZRcys6IN5mMYbAAxTlyApQskSGO
eFU8BJhMHEvR2gS/kahHYsRIOY6jHBy8FtA6NmfFKDX6DAMICL89FgZQUhsxntzNY/qz1wAPuBfz
mHEFrXQFG9Gzk6fyFAugu5a5DF+ryYUnX73/0BbSX25g/sGnvfZ+lC+crJgakYnwr72nnFu/+X7d
XuwTIIDU2evbns6nj+P5cdtE9aa/vmnZknnq8IuQ7AkSNZ5ltK1uSM8yl85TLZEFQpcUkIDRIqyz
JVgdCiqKJzsad1Ff0LJ78LzTIyGZewv6Gvcm01lDTybOEiQ6koz2SkjmR/RwkpPFHYWaB6o7Mk91
b+ZbuV8f/lr9echgOyTdRCYOMx4Wl3u+gs2/ldXFPJWgWcCeJpMTZ0PtFVE9t5uUD5an1r+Lhz/N
ZR1GS/IkCPND2jQus6npkxmVCCBQdPMBruL7sIf6Jufr/f38JjqTUH46Tn5GsR0Svjy1vxwQaAMO
KoNcyRNcsGWgV89Yz1cIBF1v9z/297si3/Jsnqfh2De4+ftjuH5VnmLDnTLAjqOQGBR4dlPNAdGj
cuINLG9ZRRtLg1S3BM5GrIVRvYn5+KHmE+SKqNKyajnm7feACd+7x2F79Sw3ABS8/tffKEvfqDyd
4KtoUBs1r9vIpyBz/duw3dzPnquf71qWQpOLgh35Rbh/4Fs6WKvreH6uC6iGQ8JHRKmhj7Yk/Y5m
kC9liLzi9JzwUAOPw+c4JqCD/3yiIRU7je+JpaD0sMPt7odr8KYrL8Gx4MMoiyz5QRJ1EuveD7cL
OBvG1w0U8tbfZbKoOd5ANEXN84gKY8HR1aR5yLw6PR18kTFxCd9vOoEfmgWPn8/5dKqosb55GXR/
jw4wi1CalrsOIs9MYUqyiNyUMkP4Y9iMcqU1R+qCGmeKM5LRSbjTPzwP2is8jdpQZRWzOZ5OVD7E
js/JAcGNCXe6vtiSvMekFRF6fBJZGpEV8ydC7ZHlpfhT2aBXRdbXiIifhfTWaVo1zZUEla1ul7bV
XAuVzaykMk1+gqWeIYssgg5Pxd686LuCaNqBry1MsdleLgcvisPbQRdq+Av5tBtOZD3xEnl8Yocg
5puoQY1Oy7n1F5YVzel+P+h3V1HNrkiRiaVrQKzjgO8p8Rqg8jZb3p8X+vKlFVyyQGIuq7TMliSN
VxO0H4dGKt5/nLZHwUGFVFhy/D4dA1z/gpbk8yg5VeC8xTSR8FRljaDjOB0uAZjbRbM7SJY1grWL
mX48umJ7rPjmBbrM6Ry3hkkPCHcKeo3ymipOI45UOd4JUurk81LkT7FgMEUma+oa28slm1sOB+ep
DuSinAChb93v17S5qgqs9oGRXMXQMKMkKt/hfHp7j3gH3ZGUc1rawoUhvxNyFxSgMHkMTuNrhVM5
bC/qWnInySF8+1gPVzYIxxKlz/4GXMlI+Kg7yUuodC36RXVtjmVoxxICES8ZyMLyJzXUx5UHNAup
hoIVpRA67h8dIMVgObqHr5EdrZbJlhXPb2O0qmwvVJNxPr50ilqYK0/FghfJPOmJ3N69GP7q7Tn/
ypUH0iz9c04TlZotQ7POWvwRtjSzWmUO+py5QzjxcLo8UK8y4gX0rdEqxGi/IHQbxRJYA6qTr6lr
jhsv2CdwH2/q99dVLo+sY55eKrsE+xq1cvmM2fIWoeKc5bopOVfQ09O/6u7Kmld+CGefAEP03mVG
nyYkuchTcOJr31+ivPMUKRs7QqghKRCqT4HWE6CYD16lAr6w/bYdDhg4lcFEeSovzHDrlfyuTUuD
WJLLtTDU5t1bVP8AojQDa6RmEMjqtlvMG+lRDQ65gvORUhUyzoJaS4wwbw08MT4+xzN5gSnJryVf
Sv9VZpt/C36V2+v+ptJumxGqm0CVM2Yj77ARA0PJ0xA5lSxBnpnBHKWBgwhoYz1KvqCofxr4e55t
FY66mEHE2xRSl1ZngDwKmnYBMiyPjkBtt7k8GwUtFakgujSbhQakYKIyefCl6czDo7ACh5PGdCBk
/IDLgprKRwVQWFiN4eX2aUXDQ7JW9aUuGq5xTEq2mxVJT8eD+WL4+vS8M1fPS20XT1RFZlomG+1A
zMhANppnVyfkPz/32/AaIcIyspJUtcaazWXU+czVbu93qFWFhaZ0ABqtyAh28Ri+NT/hWQ4YIJFJ
S+Y2fqLkkXL8J2IvBjmLwFUtV/mRn+3WQ9q75/uhLPG+3x3g9xpOqi6W6Uul8oF9/7r1oyFw8ZBh
PiQ9G5UWp8w4lQwlf62Xj3ckg5wA2IQTGSCrJp6HV0ysREtXMz2gTOpIaD8buUyLMVLXg/mRmM+A
fF+nQMcD3c0vRKbrjyn8Sv7CU9ZP9ym+gmaBPHsjrD9N+dkSL66uWNBjyHL+XIaza9juy9r7lst1
IT3X8+rPKh8d8y1UaeZIbRgMDWiM1DMfY4E09zlVgtY2bKyumUMPNfK0qjk42o8gOZ8UWpFnIvfQ
TmUqjXuw8iBdtcgX0KhlP7xiptIYXQdk9lZJ5agyruuVsWKDGJ3Sm0MgIC99v6oH284fX/UJhjea
birDKz7D8CZVRD4DUtIdlKZOIil5xzT5dVK7tFOUuU02F6blisdik3o2L8KSBX0ZMxh2Z6/k3H76
IWrKSfyC0VimhkA5/nOIPH5J+JL0Z3pdFyzjE44NDapqYjQ42OsyZ0WVwdFVGp3Yyuhv+SJ75HFw
Ow1GPTQcM9S2/KKBvnFoJ67a+GaZBiZBggMhcCwwlSpWbxhHJvo6oIPNXm+RBqcnDm6NL0o4FEe6
aeRYqDIg1IFNgeT8AmQYhoapvpxfv8DMN2nOvEt3jpH8WANy6wW6MqjiTg4dWrCKCONWxqfzIyWV
Qvx0xWhy4UkeToSWjkM+yPzpIIOz87Dd9XtzBUXELk/jw/qTe2vFGvIuUTwKjya+48P2dpvyK3Dg
Ybjdv8j5qWOx3nGy5OtKA7+oFT3GCqDjDElIkBlknaKKaHw6vFwOh1qk8uhED0QFiwgfeVQxZziB
Cr+/D/f+i+z3HKv9LljGlMb1ZXvafxGdVF8U1RxvNV0EovaW6oZ9EV3aFStwjIvo8tnjeLJuvgRr
/aiwt7xND4xVX7/I8huXkM0pu045cvKYRD/JE52+KC+1feLE0ce5lIHInaan7Tn8l1t/HZQU8pKt
lBZcEF+wPtYXRA180buFFY5Xt8M8Acv4RYYfIIup5gYAASDIq1+UPS2fvyp/z7E6Txh7P1/W7bt0
nF8uznLoX9cen5tnbNLk+y9q1n6xTNB7WoE8MmOtBnr31rKJCVhMcjXEaPAMjfF1wdoWYQWq/lzQ
LMFiMVQeRErSZhPUJH7PWGvRcR+Me1XPuVpk8jY0hTIQiXVOLTdDolWZPDPOsRcXbTwQYlQSD9u4
7PimrYVX2tZXUAitWPS08yDKrHtr5zRWJ77yRU9fLIjpi8Z6ToaePYGDEq2qUTgJqZhUTZ3e6CuT
n1c5K/w1VYcht2ftnhbwdaQgargA6/ZqjiWn5y0PzFnnbNizLgZmjexStuGh38rPmroKWSqTySvn
vE5xh9bRsqdDebbJPjuFuKnQNGm85niTt9D2nkjlXl8FTdN+ktqTDJTPXWPfSfjJ+y+U09efRsXG
nMYrXyW8GrZIx7PqIy9/TgDz57mGrVetSOtfDMWn4QTvbPvy4+w4hcEK9taODfLNaNWi0nl5iKJh
BIr8fdY/rF9Qw/oZKX2ZHDDjHhYV3fLQRjmwNdThcmWCFaKzZDuOWSKP1Yr1ugtFpfGBdWr0c+gE
D/rWP/ZnHDDG8L6EP9Plbp602xHeEY9ve9q9y11NCop5T242RJYdVGRZUbC5Y2GkAi4qikWSY3wU
800GQw4qTykddQq3AOxW0eDf3nbbfY8jhiOULt1qZjExrZNJFef4IqvXODZ78nAEC/c2hJpkYOdq
WPCCZJZRjng+6ndNMnhnSJkYBTwq8OSCIGmBoY89WcBD9WV7m45dHk+zvjKsOhYdfe/e9L5vTzI0
rSCwecyC7hLe/Mf9sT2suHSCBgTijQElL/hXrb1lKeZxGu7Bn5BizV/wD2XaK/mLAwXdGFnMM4yi
V68/vXm2YQx18wSt8NHH9aAMqdgkqv56hlzRUIUboHIAXjY+Xi+Qx/Hq0CvqLz34Y87X79sr+JKO
Fz/5C/AvHeheECAk9jkem+94onjy9sCffdteh61C3yRpijAYHPpdTUwqSO4W9cjAyNftcTh8yCMp
DDkZTmdtmSQbJ4NuS+ljapO+YlnioiQDFex3QRsGxgAcHvT7/X6J8aRbfAW78/nreOYR7PH3xxlg
rTJGJQuQcPiCi2my3byKG86JMGjJ1ZkFEohzQD5jE+fo73ECaBFw7UNyqjhHNs1Bi4yOoJi4Emn0
mIUPTktM4cu4bfQ/Ln4Ne3EJedoG3HAgwr/dIJkV4aiwIzh5v5/DR5xVXFE7TUaa0t/fhyumkdzH
8ZgD/EN6a1nopzJuzU3lfXAZb+mEYWnDafM3+YSa+fkGat+fHy8LQompQ/1xwODwSZywToTTYWp8
ZALf+5fbefe1vy8I9P3jZQhRlHPCqWzee7G5XAhgp8+QTOpbj/He84u/imN/u2GVM0SmyTO5dL1g
mZRdmun+fhWyKMPItAaaNxx30J+wYlMQBspG0uexQViMcZ7PmF7kaeJDLCGA48lDxRY7ox2GJVn7
V0gz8HxX3n/epFeKPc7GWjHwWSVLMiD3qnQC3dRX8fv5+rW/RpbzvsXsPfwjrXo+zteQw0it4Tx/
6KFoBlysPLZOlAwux4ZQBLYZfHkAduTb0Cs3Wnfcfsbvk2mUKRJRgNlX1+Q+/EtMdGkcbZWWQrpp
TgSunGHimMGBNl/A7EKUbWTzbVTkZrVOgWEJiSbzBn9U80WYX8+5Q1xLRIkzgo++DpzxdN7cHi9e
CbmfPf9SPl3J94cPOhRo2N7OCk+pEpePhXzJNMq301OM9WsdS8TKDO2cm7i5uCQncFMmcfNXkNHT
h4RHT0NfMV/oANwNumGf9ufjSWpcG24l7Q1bsBbjraQXAdT5cdptBJ9nWFu63CKr0DauszEwD3fk
dYrHCXlXqvk+qK2IAhdM3IMkFfbe4A6CD1r1/rj3p9ug3PsY7Jy0pvBo05Fh1Ux5eJdoD7t7F6NN
oOKVAsWl9woqRrQET4/DAe4JqkZrZFMQGZiSucOBPk7+IDeT9FY2T1Q1WvUwbf91OxyggvR0kjdL
zo9AlMLNuo7GcoiKVCznG2p+xSvOCRvrupR3+7yf43A7YpHs8XHZ2yJqYD2tD2461BLwLNqTq5SI
G26c3Bnp2n7dvh2xDEFozOjX8nqVGl6FpbDzhKOCliPaoylnRBeNhMfpsgV92nMbT+5v2zvWGtrE
V67cWTNX6fJP8r4iSUw0Pss0/vzyNwAW3s+3O9ZUkpsgB8Uu7QvfVU6sBmX9OTcq1Jo0lNARHjRd
wtTcBAGpqtTIidJEnv70YMMlbu7b65vyesdg27T6QqB1zwh3yiVk5dy+UaZ5XABy25uqflZxVLbv
X7EIKlJ36maoHDFRzNyk0fAbPJ9Osf2AuTjHcXwwu2xVg1inCAbJ1qp4LslS0m/yk1I+J6pCMymY
DHMDE2I9xx6hdwtyfNnuqeqg6r45UUAIET1OUMMa8nHhrpWdlZWoASvkkRPpRfJ80s6VseQis2m9
nzIbCpYBREcF5FZruhVxkhRtnTLnkZSwaL1CS27duz9ufxim7IhUXfiMLmdNbymKufXdTm4M6ky5
CKTWzky+uvsvTg8EUe/tYOjJtFO4KDHmYdruU1ZD3nHuCOExrdUSRhTswjSH/l1ekJ7QswO2/RDK
kOCXFAZfzsVjxDVcz197f1T311Z5jy2nHj7v7gLYy9PeP1FQPJV91aKk/4TfhrzyYgKkbw9Q3Gs4
RakHazxoUoGYXE9Kx2voRD+jJoWSW44poxNnnSY2RXPcrKBkEHDh7Sk8qCOCCKSJK1OuLHCP9Qph
S6RLOW2EKJYG/x0BshM7lNTm71c4nO1u11/u9ltoOMdpYKv9/jfH88NfN70yyEZ93D6Uq09vFkyX
Np90cP/q79ftEKqaHlQ3TdlxSt/oA4QTH04POS0j3HvGKa5rCS9vWFvic44vR5xGwHTc0s0+KkSa
QkHYf4n1st0k+j0TTWxvpEMwTBUyIqY+cr+lgvIp/8OIX14Yki/DaXv92IjY97CQtLExGQhFww6S
qhWGkM09s/VEX9u7N0NeHnfNmCCehNQhO9BEsFs3o49YoYyOU05H4iSCLfkItPtNHKbFonPtqLBe
v42vTqGwllNw/L+C0V7hlcKV4SiTwAD9Jqo3cxMAdO6X1+Gk2MxjWsFS2+BsgLVsieV107bOl51Y
tSjsjMRfaLbzfG/AxOGIPDs4v74q+yvnz7iQLly75pLjRhhlDkIIS2cqekbDXfTk2gg9lP7+6K+K
UloVPLGsiQMU5VwOJzeAQpwsXQxQdfzQb78Fmfcm4zgCKXTce6ecT3nuBed+fOKcui6fE981aXA6
CZLT9tsA7pjNqf/uOcdOF0t5U8004ugGJnpAZJ6mOpBxRPm0txPU5bnthkHZH+sMTJ6OSx9rs3tR
9W3QrJ6q5ohkIlKLPB03ev5kx0e3xjNBQg7VFPUS3GhUBCj0VHNBzXFNMzs6NG4PTFzhCgUXZpTV
L4WsMm4mwVRax4XHhEOqKgRAxHG4BfQWXO2Adk5ey048R1Qxmt394w7SMQT5x4Trw/b09gBDZdSS
frq8X5g5qYVNSpSBxA0x4lCeITYVDUpRD3Va+sN+rCcirZeKH5IU8rftN/+SroM/Odg3NJ3EQvSK
eKfxRkTlNsT4gFu43caC9Jo2Sn1aGMKYYE3T6b/Ip084KMnahXL8kQ62J11Xo04thDO4KDiwiKxI
QEW7OMbxBcJWQ0UvPE154S2HUhnC6XnVdAulwSQwe5Yw0Qu6g8oTqY0AFKU8ePl327ztJpwXetKU
yJAjDllSSRVV133clkwU1JdHHBDTbbpCe0sFd5s3rE05wgsAbCaKxaIruc+PksvwENAgMq2hjm3s
tyEqmFym/WTcQhdbmbzr+T2F0zyPAcfj2asn8dpDRdFCnIqIV1JEAYj92mO0YiR2jIt6g2F3lwsh
ZASQOZ53IGIsUyCwJkefS0IUQqPXM9TsAW7+z9IfsRpIsxwQ9uBzipzdqyZHkX8SO502fj9fPqA3
xvkAKxJxkxlBuY6KTLTRb1h8fgrvioUXspTtsGAQqlwQxQFr1k5EDWxi8+N2CP2ON7f3vr//9EOg
cDc3EssF19hD/eg+VhU69W/n+6DqfC6joqpFHH1bkm4IWKgYJrzuME4iVwzNErS+mKecrxN8eCv/
MrxVMm8ia004zU/M/odfft54AVps/td/yB9hH2nEUU5G8+YyhOuKtyXyM8KRUh4IEB6+NjSsLoet
wtOIoQKbjuvZn0JvUSzAGr0r4hTE496Bxz7PIirS60pYKooSnshba+5qY5i1P770oQoXkKJEhIE1
spyRhDMyF+46KDZ7b3xge4ORyU6m7fkBDn41rkQtQ3KZv2amklVUHicUq0RhiHXCZGypI27NPAsV
s+IzfjuCIhzaTIH1pqpdpZvJpWIsDhzAtVDEefsC7PrFc6evskgiOmDKuI1aTKxs598WKcMUdBt5
Wdkq1Tf04nh+oSpCmbpNCVoG9Qs4KywdLPWYzlJVzOB6KVL5Vf+Q/L9833irbRulQ/9dzIPJUm3M
Yl6t5LuXL34t+/MdNXBZQlas7vd4OQ7YMGeFrlUQPMk8m2AarKjdBIJKiqXEdwE27R1jTBt36L/1
3lD3Egp+G6rygkSIbarw5ci00FJKRzxN9Jb97uc//TYIzz+CkbI3YCeEi2IXWzdy5fDk9qDsj63J
gBgIZxYvkIj31Onxcj4Muw9gYD26TXbgb95v7t8HZZsESEYa79C1yavoOFXd6wJQEgvqs0L+k3iL
xN1MeFK4xTIr5XshxJtyWGKZOiybjkror1H+aMyRFGXXzentm+coXhj2f38M30QlKuf43WF7Qx05
tNwwMHMU4ppjvXb/s/2sEvH7//ytqj+QA0itVkLxJr9AyMo7BQfMcNpdMWFue1CqA2apNlLg0kgo
2agHgHg8eX5zCO9In4dADoqsRrM1up6Cj1bVqQnYitTfiApAIB4V7DjDCCddKHI91IZWmJjE/UHo
6/tw8Opzjwi/vz9An77298cVKq8DHnJF1okjTnCasXsd0L/nr2sPPjPdKUBSFPwNhZ9RBb6CUvD7
kCD5Z3DCQTGkQlYcc9bsnJPp9CgpkcrCM+fMssjzQ95AhE/sh+3hHMgKQY7oYPVmu5dpnsH2u4c/
lA/DFCfuSNqJS/7ar/9SxfFQ1Ej/WVOWZjuQ+peRtVdZJjP2irs+b9TdAXzh9eKrpyc84aB2Xnh6
Iq61DAOsWYywfoJf/fI+vN6//K8//CKzl5pjWd7am3FXmau285fTPGHTjoNiVzTzCEZNjxjAOJ4U
FC0o44KmqMeNSt3Ni56PDU2Ek9dSzQRq1Mu2CFHXnz6F9+ZZgZln0T6NNA9tO0CBxvvaY9+eQYOW
U3w3ARih4hy3JjPJikOnxTMN28E30f/wT+weslSue01PqZ92FwXQv/z8JzTPrsNeAm2ROyKaKl2N
/N1G+i6a0AHhmixDVWUn4WhiSAfBp2fwzUK2qX9zOEjAmgUF1KKQ5zOM5DrJJkH1oUDFlph6gb6D
P+0mDnYcI0ZxG0Wv0tYexXbLYfw+ZfjLYq4RNRvGGnpR+EDDsbBn5SSwxLOKr6GJK0SiTP66kBaJ
xQwl/2XJOVmfHWqWN43cOy3NH2j2dTiEcsj77X0rk+7CzqmeWFp0YsuxcgryzHJsKxN3NLO8R/th
VHLluyooACIUfQ/Lug9H/46+3cY5ZQZHJBYqM1EyB3Xt+zsczfftcFfd1I1EesGPPwmwkD2+gTDC
61axA6kGmRJr3/pTf92O2RkBw4ldmOWekVkqVhQ9Yjn+LJ84rsVzlvZlN3cSxci3F4ky+8i4tBpO
adeifDnnLfmEDnOGHp6qdksCiUgQTdICfwvXqQi3op77wD7tVgYe5VWO97OyPFb4jHPdTuhegxae
4deaTkqDbBn2iskiUzeC1tsDcAv/0CULu+Dk9BrLjqAjaNxvycG1SHBBMuFIBgAzh+YTY40O8OZM
II2pxfp2/3G7+3dp8GCSJ0fq4X2COGIcO/6NTCCsEwlqohWby/BDDpnOYMBuUqBft9+GHeJrDJ8A
AVVjnKt+lpy/3n4i6WLUimWNYSdTfMPF2p95kE5fHec44CbRvA8Zx2We3eW3hAKQOXzOiQv+bHIp
HphXHBrkl//9b/8KQe9RH1PRxBS7XU9A4DWPJnK/XXS9hiAyahNbJRiVccmHyF/AZ3nhiTTjtjl2
rL5hq9wTKkPx6Z0UvHtBEj8IMx6jw6ZKRZBkpHgQF1zGZn2bd6+py5M1XLzkn313JLWPhHWQm8h0
UM6DK4kDOXkMMZi7UPS7bCew38gNt4dhK6MFycMkWWmTth0rwG8wq9J4UnXxJMmn04wVoqDAxvX8
BvkRACzVcfYlVXyDIhPLD2Kdjiuk6xpTECACCu4YcVpOgPjjw+V9K89EcjQwDhaX8rdLv3YtJFsV
fw0zBJDg5IgOFTxArQ9YDUSSCBjGeSpjTKO5HAYA7/3YgKsDSj9Jw4k3ucYfY7HCR6xaEYyTWFNO
mqXm4K8xjHXeQaPlUBBFPxhCxShsILsrGTh4Ejst0+DZSzG2DwlGhL+dUM8uRpwjVkNhMo7oHWhY
FNHpME240VA+JOJf5wiAifsBXKAa6HYFlShwvv5nu/j0+CYB0wPzTO0IpeU4Up8DCnQUs3Db2Bs3
eEKFKconJyPOcHhAg9VQ9wpF5+ZbO9JOUGJucsGrlrevgfccQOeEaCr6/kGoyX7DkgbUkuYc8sAD
MUZ9KsAq5QV1XHz7dNleBoi2Xs6nWz/5e8TFVByEjqk3FTXTcAnydA1XxSMczumMLdXxiE6Xi9c3
bvfr+QOSV7dHeUYKEhp7U44+KTzy4aCcdT3P4SoScP/6uICdDcaCn0aegXjECoSMjpZ6+Pw8OhG3
tAmUJk+acTqFuZT8yWAJxbi+49djo4vbsNNx8jWbS+A5cX/1hOz510ZM9ayfg3IRYQ/+jqluX8AS
T74eO50pr1i34ev2cIAWEuhNiY4aw9njp5ohZgJ/jRUMXx+Hg3/tfR/asqTfRrlBgCt6GKllzc/n
+VCzN6Z6Vi9TCDhoIX7fw7Js3xju+mn0nwV+Jtsi5FCm9hzMJGeZ4bgFXraezwE5TXKws5x/v+C/
H4xPeENf+1/EyohZsF1XzBe7IHkWcVCnm2VZTeWEp+n21+33P+DSlLZKWXAmT55cEBF1LU2km9m1
upz5aZmbcyzMUjqr+3DUbIWOi21Ic624yKJ9IsyRpbyFfx87x0LlcGxEPtYgFbdbkZqOJfyo45yR
dYRZA8P+Bg6PY78fQBcYA2W89kiLajRTNb8ATYveMwTCBNhTSH2yS0IR8dKCZthOWMHX4TTcAISP
2QEjfAqb3wFeLyL0L1gqLvJJWemkYe/k65q7diGEO9pRegEOqgolThDh7dgyfeM5/tubVzwQZaOk
5riOM49fh+sYggl5+iGI4U1+y4ddsIkST/OliDG9O3nWdm53R7suZikMxzc1eyOfec3iz/gKwT8y
6nvjM/JkA7qWSjYssAVz5kK27e3xYlQTcHOu4Ej2RewJa85BnVIZ6sRZJF/AAPbQhWv/ZdSreVU9
J1KFFDUYj5bGjMQZaKgU6TGLFDnOsr1c0Fnu2ZI4CRUokHrhfzYkfmafZ1pF6n+FXyfZVsH1dYTM
jR/vWi51x13O9DrfIeI0psh87JSiU0Tud5OYHF0am4nFjAxEnqdh9YdYfsakk2y+nXrJ4nAnv5Kz
sdZUcEjuN+/RVTuxz6imE8Smum9q3xLg53j2/gz1h0/VnqYkVIV6upKfmaTC2ETbZU2kH5e5+Csw
gpRM5yceEWFFEPKJ0LegTHou9LjFObcvCorUy6uCK9/k+VZItnmEzKuLtyWw9swmyzrl7hrO+qQl
0TBv4QClvDdaeTJHWBGp0xLniElEs3mxOLMGJ/FSLmMLZzwugLP1xPUj+TJQfChEStlLU1cBUcos
kRgMIcxgrLDhCu8MXkf6+fQf8ZX/XgVLO5IFR0yZuARsxQg9INGMU0r2OIKQRsM/nysY8yvVqLac
QWJrzK2KvmVMMh2Lg/jVgGjwa7tBA+VrgpxDR4WtIso7zkUxnFAEG4nEjtjOBEG2WNpte9q/nH8A
onAM9pwAcDw65L97BWm3vcouRlcI6efyIyuVR1ZwBRvwmW9iA/eQZ6n7PSm8ihRdkIs5hyD3zXhl
FfHtIh7cX/oIy4PhykAKt2wRH08Hmt8ldIapbG3JXWZwqAC3wMRzcGIahR4rGnOHm8wjJmh+PHoa
fEU85kVWh0K23DT/A8tt5pWkO+YrXlsJECIAob6KDT1xPiJ3aHXM2Xyh9u5VmYSolqElebGiSl9F
s0kzJIqsy1KOt/ZFiqEumnRrc3m5/hT4gn3cC1EmyZa8MHqy2VsPLDEJTFSkxsS1oDlC3QQVe5JT
WAQIqiimHpcQX0SzGcsGoh0V02gAHxYPSBOCDVdKcDJ2bor95NjSKbFNA5UtkdXi6m669CyJrUgY
48g+/FnCK90q5OZomiNaHlG1hfe3h6D39fy4WT54vz22dtn5FHi0nu3k+PKuCoHofJEm1eO6Om6+
RGTju4gKDJ6afmiE35DLFD8QT89S1og0oCKTkq1xkiXR1gmGWlwYUn2glkh2yuo6roDQgrX88ZeZ
zraZ/y6Kasx8UPw8bJFhRQ9eo2W6OYXln1B6FB2n4S4s8KwJIy6Opk5NdPTk7aKs3cYoqVrSO0nK
M6+y4l2HrieK5lpxFTTZlzgp1ov3ozCJjO0M83/+9Md/9yT0lzDL703H0SzXBABKeVY8G13bh6fq
6/APvQKUm3kFMFWcVA9JDxdlhNETwhE/ECZ4F7FL0vf+Bfw3QcHM8lYR4Pm84GfQzbOssDSgklZb
Tw8/yyr5YySzDOEzbRzSKEPc3JwMjDXLnTKEhMWqGp3b0V7J8kIZ1nDVGjUjocoWHTWa8fCUU+u4
OGKWKVdEq3+nitZZnilDKs4Iz3LlbkjiN9EzsjxXvlKzQzLtbtJXsKlXPORcO+QFxxmJJlcOuXlq
2BGqm6h9rfxzIoFv+B9r20wogRCzOO8/DElQFFyp9VByLKSzKysquW5Ige3cAIgfVbdpUchzC8Xl
Q7uh1KgKcVI1wGdI1uvt29tP/n/scZOcX9LgJ7ZqGmeEsL+2LmLQutDqWvSpGPjH3HWOA0ByUw2X
zXa/x1K+t5h18ngJEDiFTroF03RTasX5EZyDi+OMfzWZny/oC1MImPiXSrBjyzK2XhImhms/nzTk
Xl7STIWsCj8rbdK42lGvuIWWboqtQs696Bz2r3Ttii+YooZwwKYNP8vPrFyZmjzOMgs/1UMx747U
rShL5PFlla2Y0bw+4rkJPp/R6SPMu/7eWlqLFzv9dq5cNbUyZ/3Jg7WIgDhLy6bBRJmmXkEEamUJ
TwCkqGObhZ9rXkV4cUbPrZKmXLQ5iq+80Wa3VpvRl4CH0DZciCK4OEMYznBelHXLW9Kc10IPdDhS
gIAUE2XNA8UkIF48kAtFfD/rfJSuptnqJRaFi6tYl5DiF8C691mbxDLYMrYVwySu/wY1p2PbpLg4
xfZquWUt7v1xum1fe7MYg39PbHuqcOsYGzB9KA1fT9gPum6hw45ah9Cfcselpe/eHydI3pzirRHL
8OPid9Pv/6i3y3AkZkT7FZlOL9uiL0lYkxzY0tN5vr6ERKWRWlfgEkiZUFJyTvUeWgFHtr3PbP8A
h19psXZLEO9YTvu+DQUlgvNCU+/YRkiLs9tdD6/ghf/N4fCX+ED+XQ8tlVXLleTl5tA8iS2XgDk7
HDPGRZOAUwHCcWdjHptiGOY0saLCyAV7RiF0iqApvXB1WTXctpZiYgp5BokRHWakMrkiN4gnA0rd
5FFHpWXNR06n8CHHVcT+Z3zmjmQfQZCqdQnAjFWsofmPxmkdhex2+KP6BB9RWAjNnsQfrKqBndQw
HpXEAnAWxHKNAVGwPJXLrzh6ZL8DpM18SJm75hwS66Mrihu95dhEbKcDyIHxISnMKmNrKbDkpDvX
SC1ZIt844jYEBy2EnJb0T8cgaWFRIpC0gHelBLwdFxFZEEyIrSCt/IK0EtjFn8/33w23CzjZdeBE
WbEBvnVfWfsJFmuD8h2bWM9wp7om2bGJEJ8II0atXiF4WvihxvJDtbO9Tl4bOtt5KjlN6aGafWBc
/Q/IZB+LQinvgNblhHhdW6/z0a/LpslphfJZr53PhAPLgm0vKcahQnmOGNsxA1HZr4kPWUCpYu6k
jJ3xkD3BAUJRC625miNRq9BJlbQ6hMS3jdqdqOSzhMUDS91TzaCim7e6qldPbMy7aEEdiDlKr2Dt
qGosdVOm3mbnE4E4K4+g4Gj02cepXFe2zHMg9a5TRwtNTy25ZmhL5rnfI4P840hCScNTeGbJSRLj
8YB3eML1KdfGIlsUKaUENsqS7QUdS8kGzOp4FYNCCd2Kgxz51//50x/X2HCN4ywuU2FU3if1gpRY
74+g34MCc+rv4IEyWmCXJEwIRnvTmYpCrVwB2z/g1l/9C4aiVPvz7nFUJXTBdno5nN80UelIxSfS
S3JxaSQ3Iepoa8ifeIxI95RVLX5dxUZ35GWpKRNlzTbMjE0cLaOfwL+CnvVs9Me8VKj4p7WNdiRZ
BdTgiL+ewR9j2ub0Tv6qNrCi3lsjzB9UKXBBKXpTt0KP9BpE/OXYEOGsVq3wj5jVl5bTBua38FAp
5EXMUQx65qwzhshBP/PxouG2s5nXIxpgXHyL6HiKJtKtgPCEu0lmSbgmRaljQ9AWoLCkvYKcSx2D
reCdosQX3J3ik3qc9v2rFxyhna3aXrVcAjSLVXhbR9scgvAqVp6uJ4WPmNShnHE9VyGLdaAwQ82q
BbeRbXyXFdudkUcH3a/D5ahUk8xLgshwHfLWbu49R3sOKiEq9FSxIMijp94NuppvyVBRW/CVtJsn
omSrESUrZyOsyZcoOcxB7CoHcjmyWyPwQmI4tD136rketFx9LcRrDBucQMCLmkTwWAxRRHAeZDka
vnL+V/MjRWtGU65pwUOCv13FwqwLIvAbBPlUvHkeWlKg8wajF8m8UZNCicwGSohVGmeu/zXBGFpo
g6gwHNdcBXAouW7FcVWTU5ukhqq1bXNahAH05GYlsEY5NjbMM81gcyqCp52Regib2sNnSZxYLmGx
Aoy8rulSX+Zs3spC6TgOXtSAx+o4/MDcQ82lXhc8G44hKqglcjlfHhdlTSWHcJEzkwwPKPVU5pL2
twAJr/XNsMHrZeBF2anjbMHpAc6VPOX9sT4smeEp/Cbjjt6AfCm6ouNShfmbVMJTtCkAqAVF3OFo
7Y0N+W5qvmHLFc1ehBGV4TXnSVgCKTCw8fAWztF2GhLXpq3vY+lcbTKKosFS9rnIhGF+jf9m3KX5
s8ZeLtd/Nc6p4Qpqel1kZVTVVSxIVX+uK71BBdsTXYFWrA4e0RK45CWzUyPLWsRZ1lnotLcUsQOC
ZazL+lmJ9xKLirByMMBBwvvUst1zToItw7sRqDWJj1n0wwhqlzXL1FRcghpSKwnAFtXC2uBtCo2T
JHHwBOa84+Vp/2vEJ22mm3wVmrusVVQfFiRt5YEYMqKoVpD6jI7MBCZqdwfBau66UXbNVkiT00QU
wVNzwVOsN6iByBytebnCNt5+KjEp58RGuLlY1GwNQ3AkkC77DjkvltrDzRNwxUU6kOlF3fpx2m+V
ZtyOBOIh8tGUa0DiCiPJZ+lxdbYmi98ynGs7KLe0xY0ZqznYvvuvfzJr1OCvtCA3QfcLoWrjOGid
WNp4b3FnOLlOliVJjiSRQU4r+hb5SuyoCNsGqfq4asTZzoVKDOFAEymAXIm1Zho2XslLIT0e4oib
F1CQrftnvBPK9Truep8Mu9AgFFOkV8SZCDSJAEq5ONNq/3RBM2xA3awzUbNGv+nrYatYVG3G+eaN
qiLGy8w5cz/Q8iqtjWYEdeCGZ69ibEcB8k25gZKriCtEDyEqsip8WHB6cayI9mPzuKEpjM5qRS3o
ONdt1NdWk0PJx8lB5ofHDkqVAZ1q56H6yIreIRr9OOk6IskEIiHeIFxJf3Pwshk+0ap6khDBZ78f
tjhgLKduQKWJOMX8KRfpLwzHNemw/XnvXexgSCYI/iHQetG7CgQN3jlvxF6hquZfB8XWo+20nItJ
vv817dIOxlZCkeixCBiy09A/Tl4E7cBchZ8V2WBwFOqXReIkHQRBu1i3I8yA9dn20GlB9dE3VCWo
sQZ3qje4cg7KX+ElllFjDwuJBX1NtxLhEdh+rYjbuexfyUL87+QZSBEyeENdxLuEdXgmc/1QXeJE
xhENjpDs7XGDAm/yAjpOTtMb3Z/7G6p//Y9BQb3WNB8XGyTRnQBn82qkQqKUmbRT+DSMXlODh9ab
yDKsUhex1WGO+/v1fL8fxopq0NlOqxue07wHcIuVWUlLOa6ruEtctBUaSzEuGJZ0OWw/JoYtL4Rk
f1ehmxWdw0geb2Zt6eFHt1zB7Q5hsljfHTv+6QdD6zyB48i5KvuvRWXS/KfspyKO3u7/A/qu3P5l
u//N9U2p/k64FMZg6vFZ//J4wdKwxe/+/a9/+qM8AWVRWB02Vgf0U6wbnzH+/v+e0vZDcfRAi7GT
R9SDDV1bKH8IgSTw0gezgtYCQAPO60yD6iulZZCw/vbY6/32eJmq+vkZ3tB1OyDu4HVQdNmO6z/5
Y6y8HirRbJzSEDnnaoHGE5v0LlTotBqPbl5CdUR/ERBUaqSSTDFxVyQZPQc2ueL8pbk6dn/Ufgsl
+PefWSBRNAssVj87NmYiz9S9gOoVWzw9UbCf2yiVoBIcjEfXGFqyuiueVcdBvdOidgRBQVp/RrKe
1euVbMCa7YF1P18u6DNcceMNd03vA+ChPsCjOWIuNvShYBBWrO7OGRb74YYMNHhIHqfQosVbkrdx
/tR+Rpq44nzwyYfzvE6xWizbNI9ucHqA0CMcmwPLTbT4Qihw99/AVNFtYtodO5Xwx01NvkFA20k+
AK411FRX9NBjmbBY5DOW4w1vxf/xy8fmb0rRMCIeQiOXp2QPv0W50RRXeTbe0JyyhRky0qAH9Zzn
SwKBApYXVHuNLE9uSsi5h6Nr2XNpXSixfT6fWITs9nhKPIqvFNS8KChjfdrN9hrKycKDAHDiNXiH
gW0qKjotX1s71AnK2KvAq17by0B7laAjbeoyYiFJWtr5r8YKPRN9B9cH9JzCWeBbgCbc9Led/6as
69FKUNgRQJpxClKcoFr7wcjLJMAh0vFx2i441o0Sw7TpbaxLP+FeA9HhIPL7McstvDG1rGCT81Xe
6Gz+tgNAaZRlEfZkaE20y31WoDYWOTkaIpguTL4SC/UG9SA+An3+lqvXT6f0lBrLhSTUpiwhOs5f
NJ+O6AlGG8O64rrN0oKis72rKWRtZhFAuiLxsGhPM/DXRK1sRjVn0c5tMq4pIx0MxGw2QyE2GabC
8Dem1o8mZiJ5pk9znKI3QhQGNCvWTZ0j6DxY3X+sqa828iEWlUaJoUnUXcTz0PbxBbuka3+/gsXZ
79SO6TSwhIHwrIuN7E+b/6G313FKIp0S6vUDp1Q9vrQ9NH8JcWWYv4PgRvH9Eq/SCK2LJu32unsf
vkWhNgtpQveO23vfW7GWnObppn5U6GofFZuk38mz1E/xtanLVixWPi1oi0X9sbJ+iOMDdE8ln7wq
nhluNJaG01e62wsCvK+Kk5qmQT33mwc5GFv1zERjKM10RyERHaQoLzTINknrp+YCM3EA66HoHKW6
PGvD8szlQZCjtRwxBBUFkqfN/mtUZZD33TCsdTOr/xLUD+kvAptKB4pbhj+St1fxGeo4/HYYdv2q
WeqlPl2MauDHoR/DadGxtDg1jXYo6rIKP8fC3AhRiCcG0PKAtwo95OVQDtdHxXwrwbV+8cSo+NVn
OkpsJL1qenlK2hehCMZX/l868SmVhGZE14wdtG63qSHZBlqxb27XneXMrCgcAmKSkWvHDi2vQ2qT
C11foJScNBPtBVUiOf5XXJYfCtiyWzIU1SYe5aIZSJUOCibzBjr0ht8HJEVkL6RtyiYc5HDSQ8lV
wcWqYr1qciHHx13V5SmrClkvYxTm9RDx+8ft7SvxGmjXUXNOjm8Qn4emi96weDth21zMmQyqvO2O
oB5UeDf52IU2vIlVK6MNlVIn3nC5a4Y3XP+eTxxMyfbhEm8L9aHzybOTh6z/UnkA+8tLCmp73WJ6
sHawhAkR3/ba65IxuzSyB+8qj0kYq2cWy3hSZ3gZQNSLi8RX5c/0fSuraETs5Q3gjfI2ZrB/8pWK
B+C4x0lZSXALBC+4OEv21DQPqeY2/mOUytBeRvFXFFyVIn8R0NrTz7TxKgfsU/J70YZnUAG66Ggy
nf92rnw757ILLlPjj7X1wmg/ItRUY1FVUMXHfjgAKvPKOajUU2wwxBrT48KPYkD2ctDqHRKvCT7W
Zkx+Jh9Bxyw/OVwziNexH7AKDyH1D2eO5V+zIfwqfN1uY9cW3BYfl0soBm9bOTnJqiU+oL8/zpCK
NDoSBKJq+c6UKw7Y8FDktFp2/amrC4r4KkgPbQGa3JSfWP5nLqp86o8XCkrdoCjdGVT88/28O4fB
UbuNf+svIuhBssM0Y1vLRhY3FoYf8yxOZ6XCe5E/Jf4E8xzCe6EPGvURiay5YOmKTjNlgXliRQib
EsVyGfuU32WEM22YRVovLoqjqKb1rNYWEEigb+hhtvvAfx8q02/0dTjOHaEPaeZRCuoOkweVnBss
nrE8qub0KVp0wGjVRusEFlmIDa36cC5eDxC+F9yotCoQ43LZc7JdQ2Kr9kT7AJbJQv9xPEBBnP4a
Lv9xvPzmBui8sV5z+MuJO0BL+p9+SMZdMfcVxiAYKC7ymGwOGo9B08dBHlFxWUDoZwPOcL/2/WZs
mhzegjQTLV2ZEq9+YGP5+/ZNHsdi8abDklfuOCDicXt/P8rbLRquvClYi+KIlvOsA09PPF8eXHKl
apHbas2Fai435MftsOaTji2d8kx7u0teVLk8zXN52v+ORxXjayTEfBv+oXb+ppkaeIixDqunrtfN
dn++3P8MotRwY9KUs/QgYr74EFArG4CbBcSC6dAkRtEI9o7ZKPjP4XFuLtu75lgtuaZzO6/yf2xe
rlv/dTNwl1OHE7mwredF3nKC70/VGA99tEgO+jl1HPngQqAk0Ok+KBU9qR+WvBBMz/mWkp7B3txC
lUtlIlqoHa5sejjv/tpFM4TYQqSo5PI4Vp9F+1T1NgBXb7ft29hyOpjRMbk0/NUYOtnHeoAy2KPj
c5rYOW8aFpIGytokJsfew88BAPS8W2V2aO1xjOXF0iTXndf2vBh99wbiPTp+Fc9vNQvBTdMsIfZ/
grPq97/95Ze/PDyjKuRVsbpXcNaG1s1BJY1Nky3LkQK6KTZqFi/pg3iPB7a5vw9XaGZ7DW753VfZ
KUzboyD/ikzVT/673//5D7//Hez9l350oyEKYDjFMrCeBvQOHDWBUuAV1VNT4cPmf22/bX8J7luc
FgCgcoiSChzSdJcsND6kqWPx6Xwa7Zn/uELmncwb6lnN9GnyaSo0UDR7iqonRTuxhHA6MBw+P/TQ
mlxGpNYZC3WIrrCQ2BgzabDfef/jchh2w5g8LnvImvnmwiXsPals9n5lnhMggh7rUGil5WnXRprv
na4gJgAiG4tkjkcn7rhwXHois+OUKK+/FhoQp03nAw/YXM7+xD6SExxVTtHf2XB+p8hfdtvTuDb/
0DQPGMUZJ9zVckmY0r7ZHr5vP27yinJOMWSOK8YOTLql2UaEbpeLM5ZFqjeQjPln4keMmUGtNclD
J8KVEFn0b/y/YfpeaWVT5yxgLi4M4pR7nT6rruXUoO/jp9FgW7OrqqvY+sBpV/HGokEiP5h6Drot
RRahtE5+ysGKzqvAjHGySRCDCygiyw4fcsyk4jgXT+P7/nXrx8pEztZ7JkcVj9//7H9Eri+el2OR
00EADVgIYp3wqbhpmAMb66FCP+zrUY9a8Xz5uanhyPpC9UE5+NdxeszzuWEq2t+88I3LBzd+iA1A
tFeWTo5FzI3upOAH8B+bdwd8KqgqgqloJxliZKMrMOobgJhTkmNb2lMvuQJhinHrp50nxK+fWFTH
1YWCGf/XL3/F0pZo3o3z3t7P1/tOLsPZdmxZP2aF1kxdxqaJiitbv+NSuobFxdp7bZ78L4G+U1L5
qLBaSmrFquhQRBLqMIUXHN/N5n6+yIIqlxWsMe338NBUIHLsLSY/twXhKDHdbkwQWcFX2nneavFf
BO0bjgVMwcP57A2sEBJMvZxljUPopsFx41OvgPEqvqw9IM7/FAy/4A3sD/55QgqABprols6fWWbz
47T1Wig6/F8+MKyKrjVxrk4pzT6fa1FjSZzSsXVLRsgzWrg3hEwZanJHhUU3UdkYShvrN75fIZ/B
zG3ulh2jY+YVPnFrJY6ttEF4/wVt9/twGPdnba1lwXyhBhXQ5yS8qDIiGxTVXHGsDfL/3r/c/n6Q
6Z7l1uAdHN+kZxlzyScrbBkX/8Bd/XmqLokDJ/H0+jgFKxlLcABjSoBsMNhkhDtbZTPi+LGhyGSJ
ooNJnIdVndl5dLWppeZsisKA5qCIDscWzqKfJxqIPAurs3ObkKcoODYP0WdrB/W85EQSz7/54x9/
/n+9DhXeXcgcCiROao3qjdFaYiYR23Qmfaz1sd3C6fqCLfqZRbVPNKOojbqpW9OIWjJ1vansnxxB
/d+/nzfvZ6UHEW10Epo1zmpdzQyd3/38pz8ASh9YvJ4OSHLTwwonBv/X6/Z0e4WKN9g1I6anqPwh
t72GsdWhwbTyRU/fQvBYQLE105dZspa4YB5CGHDpRAqEJB9hxSdqYmdgmjdkVU5o85wLvlLPZSy2
PkoBeaZmnpTZRADwFWKfdKZQjObH7SCFmNqc7Xwbt7f5fj17YRTP6dr/LWgYYQrB6d9m3TxCXFCf
/6SZaClVxEFLPDSoIG1fsJPVYSs7sdqs4pjO9GWVFdOmauk5K3ekHy4tJIBgsCwv7AOWTjbPONRR
XND9vX+NeBUi7/2u5XNquXjmvCyNfFAtR8xqvkxLKiESzIJ2uFjFZqu2aWmpRpWj7MsTvSgKdUsK
xRF0qLYcvCUjQ6580u9Glvuff/nj5DKIguZ+3iRt+/EytkXcHLyJoqQcNmyrtjTtLHORfkSe0nGB
JWGlcAieMYf3HIq4WomDFFuT8IjWScjTdZyy9unlJuXQUBmofdNw35uf+IoNFBzt2RPatJEZvmRp
4k9eQM7iWSzKnqCK8sQtx/uFiVdm6JYc8E88kl9B3aTaRQvw7rYaAX/HCJqNVd5RIQxNFOFPbrAb
NaW/KDhCf3KYRvVru5dnomWKkpeL0ZPwN4ZTnlYfo+tamrGQrAi58GjKGn4mAi8l2BzZMl4VMa9I
AiKhp1iyxivky9JyCFuRIfK08Xk70T118D3Vt44bQFVMc/ixCLH52tAzDG0tBYWjbBd88YnNYvXi
9623bgA/jpGqO4SJPxPAZE/UWzxgbUKJHljnFRADdqS/YmGBZL2Ak5pOdJruh2CLtXNbsaAhi3/q
GZKMbOLfilZecHiGrU9h1vt5/HNEVcknUJlYh2BNmQRE60ynGg4Sqwi1p+QNl5wXlOEWkBexOixP
8OvrAA23HjJm5WAnq62T+Za7l4m65QJTNM4/Quv9ZvsdJA76m4fZ5ClJPTUo3tXEooapMCGws2+k
5p63BgbFc553HHknZZ/ql6NzBEXbIvI1k/nS34myjsDoCURgtop4RKhXRSfWiAC67sDh8JsxO//P
v8jfYTWMT3znjXxHr3/cNi0XHP61e1Lw9i3t7Fut/lL6EMzrH5m8E8fhD9fPv9yIckGkggJJRJ95
Dp/IayRH2xvd0o4GqcW9RdvhkyumbxedJfJ/5srlr4ibSNrsYge/Qv3s2I4dv/LSlQuvOFfRr/uM
/BEWZL2epVn2UcvCNnSqtZkiaa3AAzi4Rf+amy5+zU0Pn+AfHY9W149/TZCDqKbkKaynns+w84Kz
gX89E5Q/VHO+539CbmjycMUjh76Q/Xer1CNJTiPEuu54UlTOIqSc46+r37G8+OZp8VzwYAVFVlXG
Id1YiIUMryg43wKjJ48lAy8PxahmLSvZAr5ch29YsQzi6vA3hoVNJTbJcBBh6JvvX3MZ9F1xHj1m
5+shxbTvKXFwU6BJNNlXAU2otxlNK7fG9pdNf6IxgJZYOjFAdxvR47IlxCbi6f6TdQ6PNuOidMv3
YWBgKm6OJ1MSl3lLfiPoEqcDg0nZCkI0MySR54qrbpeWfcox/VuyyZNnT7fESy5WSmQ44dvbw7CV
YYMFWw+foROsBugF212+C9r9ggRNsFBCTNgCb4b85mk1AhCM/ueTs/navz0O2+uvcwc1nE2vcUCb
DZScc5yDyPt3JtMI7UaFul4pYd+eOen9/PaGDQN0p0tJ8JcYtmwz06cBMAAZCs4CqYJAimsBgNeI
/Pv+Dj0WDMeQq7kGINwxmLtt2HREea96IZOaRsQTbasyRBOffB1S6eyGW3IPyWdXcWcn4fwvSsOC
mjZETLwvKj/YzvsZUx1b+b70sNThPvxDWWrdciE81N3uV8A9kA/I0qPmeklSJhgxfdFi0eNmNQ0T
VRzBUP+u5NYtM8NJDPla//vffjd60QxXH+2emhqnsL7c5L8d8bqLi5KFScsV3eT8pwvOI2sMpeB2
V5c90v3a0qMlqQWFTsZcgNSfCBBMLndVO8cFJHQ9x0APLc2X9ikEEx3mJsS6YiXrUsvB0n8axLpe
4Ca79XxnbBAl85+Ss/pW3rp8ySwfj1lGv8Qc1f9ATTFU6ollzYeAL0IJmdVyaVXa7wKStmJN5BAa
AdzoOMlUR9xovFq3i5YeS5Me9TvjwhuaSZQ6nBCtLoGLZhe3e+8VftKxeKfhhDWyYvnCyXERLWd5
iY4tUjOSTmS+es30hjKf5DpfRRoNBcUQ8NQDAjyIchvvUL6qjtvCtcdI0chGo04+yBWbO86HE1PG
4LLWXDiR3ljIPptdTSAc60ByFk3GvYjT+eSpcZD3RNsFph737OMq5MdFKARCfkXWzup43zZHyNsG
G/RVrjicc0q7NwMGtIpfPiBpFxmzSvvNsnRNQ3UauCV/JvJo2tKmmdrdLSgF+olSXVUuK83uaUKo
T3X5oLOU9QicQsLY9AFN1PgMebReU7LIyjgJ7GrhAJM31rICjyEbqKhw28jF3RoKXwA+WtTdf5Eq
q8ax0ASBFKuec7pR38CeRrvDGavuhmcr10vOO46MIpgY0l3Nl05yuJ6V6+BpPbxONKWcEIH7ki6w
6dbkW2JbH895jbWLJajS0XOYKHn6hXkoFV8EcCJjeTMVVzcEb8IgkpqEQojxPsvi2oxF/OFirE0s
c8nbeK4Ri8xRn3y+bKIF2CDz/KkwG6wuF1HOBZcaiicULhu8gNiKL+gU6ibrji1UGvPuoZCgN2sC
U94kmpZfOVs/41n7kp9BTaINIHAafnt/8ArjdRVRlKy7c1JrMDNvavWp68QNLVebbnGcLEDex0XO
p5anzLnUJ1JpOaZxYDVi5eRp27EK5Kws4SuZ4okJVmFSV2zH4j9OzNC3nVEYn8DFZ8a3TO2FSO2O
dfKRZww2FyzNpvWmZYvyYolsmCk4K3AWWU1u2Q5FvFImKyDUC59hwOFJbpid0xpi/tV474v9mFYJ
hRSCARF7bBFd1982NrUw2JvLuFc2m+fU20qzm2uptbAacx423YUViJu38/lVlkY5GyxhZImpwBSG
lgDtkq7Dvp9KNqivnUBqiXnBMyIrtN9UbCRxeXkmCRSc+hKPaoXoICUJyMOKKgPUP+2hysNOsQha
jpM+6/Sy6lGwJa4kTc7Jt9NwWWbj7WDhWPkyKu4YCE2Meocl+NqcUxOABxNuLnLd3DJDiDUR24LL
51qyNXbTuVpg3Ya2SAldUdsntXCD0NK0wKMCn6j5hOPgp3iFrPP30LzusN9BhV7TaltozyVtYjac
bgNUJbxd5PEV5zZZGmyhEJX+lkkxwpnXDhPGY08beSE1MfFppv/c92FygnI9+12XIN7QZojZ9CpG
5uJF/32dutt0DavBcWpSI6tJxCzOEYufP2klix7rlmrSZpr3LdSathl5yZ0So30X8jrKOevKDRvK
ooWGzW2nPPW+HbEQhseHxFRxo7VijpnmLntSrPyUT9txPIT6DIAlUc+uER7qWMNudz6+wMZI51lA
vCu1g5Y1FounhclLYPeEwCRwycuaZPdUdXzpnzGV0ZJTaZY8ME65xnfVcDV7Fg7CcT6sLiZTXpKG
dTapNgvFQB5NAgjQ8KolssY6FJq3mtTGRfDBeoMkbYa0VVCYlaVa0GKlug103B4giNWHVuWyNeTY
il8cVy5lVkM1J4CbdG5dlMWokVbTSldJKPIuBJlbsDcZMVFTw4ZgHOsVTBpXc3yCQoQMbYVVfngT
1pP2cdidD0qfPSIywAPXFTxfXumHLNaSVp7JK8qXHdAL1Udm+pBqzgchGgZyBIX0bTTCMPseGvps
78pR0ZYctLUNrsMr5WOQF4AJ72hZft9eT4qiXjdsNd1EWFOKmcm2Ck4DZBSRSlZEGs638Su8uJ1j
oa0cb2ll3kLr9JfYPmkypyxTKtNfq3mWudCufTqBWcdJywVWr+W0MaIjEzNt6NIhS2ula5bbM5HA
JAmMB+H4SRus42iODcKZR15y5hzc9bgIIfDWscUBWFqT40C0kSrEUfKuYcpjIJhxKooSvjCJEaNt
abs2rpx18u0TdCf42POulm6/lG+/nmMrcpW2TbWk4vvzCpEDUxeuuMRMAV1h6mA5B9Xg3djmPpvV
VCb7qIiRgD2l8uj7ZTxNpu3KVpQQFAAzUMayu4UXLxaMUlx5GecGEe7OtEwK07gxrz9j0QorAkd2
TCqbey1J505bNj6jYOeqLZb1h7y0ATCgW5IRLxcqoDi+pC5zAEQFUUv7cgFJ5LEtsoU/M/P+63wl
aFxD1JbUYKHOVRV6rfXqrbOaywGYQaW3lws68uRVkQKnGSKQshGy0W+Phz42TB1/swrc0hG/Pqne
Mc0x0kqIGMuzPMe/pXMPRfVWJ/azQfpYczr4c9fkdLBqEdynWvKcVmxNOdUCZHV76BWMNt9FTK42
/9bf/2NMZ/j5VUamsxBBJfHKBOIvetXUpBbsvyPHwlFx7sjDoJDkm9yFryMcFkyk6CJ5nuOiJDB0
xIFEygM8TwIAQHmSjItiPU+iBnE6Iu1Jn9TnWbAqsDwLQUJ0odk2TPN/sJL6z5fUIe9HpJBz+DNv
PJ4+0OGiFSGr+SREda7xcc6qzvh/ID+Qbs03QnhCnqTiShmzCw1pOZsx8BIaYKrOvXoZMcnY2ZmN
40uRT7dZM2043dGzuzsMWue9mjavduJBLJHNuOg1l7UU3AU7fUQCy7Ow/dS4jctTFGz/hs9Spn5B
JZsQqH/ET/py3ivkzhemsGlJP452zb08XbtXHF+9CJUpv+Krzy/mxVNU+lvUJZsV8RmqNF5S9VQY
YJnKczxgZ9TraXsYG5P9EAVtw0lE9DXszke4mw12tB1ON2i1qgHOKyItSNyWNHGFCtKmTlq1bPhX
7BBCCEfODKm5kmZ8VXpjKnq/87oVkq6rOB/qrOTqGXLF4LCmLMR1ZeWGhTjMu3WNJbhiw4eQ3Dbe
iFbTKpeLoq0r7utP5//KZki9MtF09/Ca2VGep13V1uR43mP/biVOVRFMPAmNB+3wt7/8sk6Pdtxy
DKNN3lzB0YpR6u+TlQloWaT0UL73L2+H/7nctoqEdknR+cmYVthrRSBotF79J1KJZV2eeLUzTNB2
NMl0fC1T2wQbklhnbBFQ+0nK73DhXDKTnMFvrVvaHRcQwHjJb0O4JHYawJaJ/ebHO3QYWlGBtyMJ
O6QlzjTR9rEfzrHYwLoJiVMAkNVdNp8wVmUcjElo92K45cbNp5lwSqv2mHFtH1LB1XC5K1ZVckkL
U4QJPWD3c5RQn1thzdVAmHYbH4u9QgLZB0ZUl9oKV+87Z/s2MHdhnV/HJVIGoBBcRNqmMQ8BB3Tw
OmYpXWsWUnBJzdOG1h8M227hGT6z9unkXKg1nTPy8ZUEVXD25/NU1gZzLr95Rk+3kaA+SfEtZxcu
2cSaQxN6GbFLXH+zHWe/pNoon7pW91TciSAUD4M3AjQ5TJt9F1xTTQjyPZkSgt1TKF1IY7tCrQNp
1TVsXWSvDGB5Tm8kPUD/u2p1bcoq4wAT6/QXeWWOo3ja2+e5oJzVhKJaZufWahlouU4AwahiqaZC
7ToqmzWt3A111FRWNQDLaqnemGQfgVFoI9jqrFlTT8my3moeWjyfxGwTmXF7nDlbYnDCrn2Q0yAF
HmBcFPL6fwFWH8MUoRrAWAdOPKeaj7ovhm/ert4qQmSVf1Ch4O3m0P8YdoqDn1ggpAjL09Q42UFu
jFmzqQlrVng42Wt0nKfRmNycNF+18dmk8mQlV4CRP0V5EraFh7FNvVpWzRortAUTArtWdH6pKc4Z
bdURWf60Sbs8YE0ygdGFWktTeevT6jVS13zj9uVk+klVz5UVUMW4nQ+AUft/z9fDHsfF7RFwnbfO
tYZCNRshWNcyp5p3pYmB+e+wGM//H0qvhybjew+Fs9j3ftFn0SHblmzhseetj+AjefNsx+OYbova
UNjM7nbBeJE3ReVFsahvWgIxVoySj5NNBX6qOCXvpuGe+XSVZvW1tmKLqtMJzC2w0X3o5fNv/k69
Mox9WZUt1PMcgzD+fr6s2n/F5r2gxrVi8zWbbT6ONnfO5o15RW+z/gJL9j3th/1vocZY6AH+M2ra
8hRseuybNyehzuL2OkDzB2UXbOrQ6XF86a9rzrDjHYZXdASaw+tyTVkmeXjOgY7WFyFtaY3K7Kk0
5xoKLGY8oBwTgG4XKMzyey0O2pZs8RwId61YOQFCkBS/Xn9sNIGmeyo6u+K6nLZik9gLruLr/MGE
BShz8GAibALd66fNJhaznF+eo+LIJZrCK44vY2U6DtydD5+PhtGWpKXcYHbmrl9nYtEK1MlWI+Ca
fajLLQNhKtpc3M2ai/Ol/M4qn6tpQmKqlhnLZoDpGGFRsTnNDNskV0xlgZSkPRQgDn/aaT1+ndnK
Bzwck0fnX/7482//n9//Tp5v0RrIyag0EzlEEf0ArXnyvdw+Trv36/l0ftyw9J1c27EzeqIR7wQq
yZ7/7ZSEuYKNfM126anjT8BD+/1vf/nlLw9FhpWd40TgUzuly3U4qu+p7FjQ6NxD4akKu9WsbPWU
OQ4sKjdStSfs5u7j/L9WAkhl/0DDZijQRvazbFTT3+DYSKuBI13Zx7ysM7kKe7ps+YpzGpvJ8Geh
dqIaDbefg9tH6keVrgVQ8Y1ZLnfk+jLDy4y+hzCw9/8X2gmtLuKcd78iYjwBwe8rqhCXFWtivvTQ
AgMBYnGhAX5lQ4jLlntEUFXh12E1lh0Nc8aRbFf5rbpa6l8i+7bNxmZUw1nCNdjnaDKMygxnG1VY
SZCCRA79Pn/z2A+eD+IYLOIQMuEANBqTh/XYAsmrIJU+oxwB+FeQJcEB/oA0kuNwAveHkmeR5wQj
hBlOsejQlBj7A2UB5vKgczigQ+UJM1pLtIZMHG2ZJziHnb8heYEk8EYgr2S+7X5/O2xv71Cb5vyA
5n1/fyggkDwjuSUkcgoPZIQU/Nu//D/qqjpCzDBbU8Xw5gs8er+m3XlPUzjEbISumpdvjVUHYS3T
UXlF97iVd0NkJgEnExXDa2Vf5eEkHA14pXj/007EhRPrBtPGoz/xm7+Pk2eCyvnnjq0LFbncsm3V
92GHzdc9R9gpJVM6Er5BV0Ub8+umdwbH4C8YrR/5jVXca1i8ATtJzu8xHSvks/lrCtY2WcQK4s/4
10l2xb8reX/dvFRAzhGLlwqvyvOhkfDEIrdeOfYvB27K6yRj/CLKb5n+aRnnp6JG067u1+2AUUd4
C140VAo/q+fPoZlKRKQLTNPLuyQVcqGeStMpbAfwdfhrheeQ59JNzFtiGDK76Di+M4Wo/6Y3V+lo
OmsaDpw+tBKHKsz++3dlClouopwe74yuY0qYQdoEFYAnUpDs8ClT1KsVXycqEtdEHN70sb1uHz/i
XefyfkqOXqKD5mPT33bQT+R0Rplyk7dDvGvgDmhL9mYmaJ6T78gZhEfl56qjzkmkltyZtEf/kZcN
kjNOq+05m8uOQuWWhcItG06YzIhqe/SLBcNNoaiGKw5kqTKtwgNyTrTy3DeoiLo51pHKTOT9JX45
nLwC8u9//dMfZQZQch4UsiRWjMoLKjhVyDqyQhFYicNA9vRYsRGDlakghaKQZiRqRs6InLQunTqj
xV2QcPTdKLshViWwzpZnDvhsNG0gI45vouWRPVlGXZ6R5ElSd5bWB9oA4QTDadA4FYE2ElFk3Xml
3Dlp9QM93p92F0vMgXLof6vcPcmWnNUiSpo5tOn+zS+//cMf9KvriD+V1OoMHMUT4w3bAQYbVtlY
wZky1knVyoQdaYrk/1fEiqgxfwdxa9f+1Q97X/mCPZNyHBOW7K2zYRzlxEWLtgkvfl69uvfhjcxB
08m94CmNt0zXhr6IWFTD/+nfH/31Q1lnzTH7tca0ZzMFN56oDDJt1axq+MTjFH5Qso95yaRm7znE
EZRXXc9JK18e9SWkEK1RzYiaCNWT2pq9trx+Ge4jDShMlKTkggsjvqJnI0GWeWxTlicb4f3a95iQ
cyP24n6+TMVuKOYuyVrVZUpFl+k4HjZGSW7oiJK3ynbBXm7VK+uP7cFwDOQk14HYejOlyhYWeWe8
YE9R386Hx12jTar2xExhZldjD5fp8hRcjt9dzR2zKHQUYi84/om9jba6NUUAJQEdsUo8lIp4aDga
fGIsylsru88J0Kmas3ngGSEnEAx1tspS3/xn4fUD5dk1nPm1YFvK5aXhoCBF1SNdgaZL+/N2nDiW
bDbZYksMDoipdYqrANjHCg9lzbl6iZYfo+iag47MQQS5KmOUy2+5LUrcUXE3u4XVn8816nDoiiLN
enfwhZAmpJp5QXwFPC+a8w3lrZESUyjXuoVc+8+/KGac49BwCyNH+/bC2/mkpf3L8FZZ1g3BNqJ6
m6Jwr8MhdTva3P423JQbrbhjILSKEFAAlcukunAIlyxrQXGnOl1Jrg8hrs9ZxCTkSfTC5bNZ4bol
2ATiELKkQ6co+uzuVL/rqvqxHfFVx0qNM0Z4PoUo5MmSpR2BFjwXouX1RkUakhgLuhIa2fsis+aM
Y4JUHt6vXhH6UDhfwe2JOWpCIurLJ4cNzu/cVU9rAjjOCQJ3egyq4fbGOVDHdArZgZq4MtxhV60g
rZX7Ja49ZP6561Y9hEZ5CBnnTYki0Yxc+fELnZZXssfEeYX1kSQ+Ep150tcUGq/YGTRvlcJwcs5b
sXRWHc6akkfjC8kwnTi4zfc6EpEn3iU8E1LSTqlS4kW044pupkWsOY7OdZw9nCYBASs74UvHYR54
R82ilIhCd7RNRJPaROh2/7rLJ7gF3gs0KQRPIdWVFnJGpDTv5qPOnGt/2GKZTb1qfp6TpHRiVhAu
vzKS3ZGoPglkC8sbzXFFUyXQMaLXqMJsc3t4/v0GRQ4u20G5rY6N+pNNv/UrMSGsw5T205BJnKiQ
CPNZRCRX6ksk7oXM9KlFk6XSE1Q/KSLwubi2tyNzjmcsXxbxCyl8tOIIiXgGZbZBzZMUaJszHflC
SqVB0JqQdd2ukYtrdFdipZG4xypuovCPfC5bNNjH8XztTZ9E19aGc4oY3it23VScXjCPjg8npSxo
V7NRB7Ig29ImCA3iXE7GLQC4J5lugEu7jm+XIjjedodzqMuy1fxuFds8imez5nbzfBGAdJrpp0SQ
KQoqmZDL9w8tNS6Hx22j9L7zDMBxitSvta5o5hMoJXmZ2ZJEibYt1P4oMJdqXsRPqoHWllMZCLNC
yT1JcplvVZwMkhakREWqeo0yvIiK2M+aoB+ol08OKq52inZUjidsIs/SVsierrMcIRjEWbFnwhnR
X1euctZqMNFSAR4ZmD05ktY2HMDiNHbwXU5shPQcW1RuFUBWcSrlLODpGXFxOo/5BEL5/Y5gwHhu
rNok/uVnXFLPs7/uxQtnxV/nOCmn2vqykdVy1YJUzqZsr/uEZFmF9M3z3FAQJj1GEcgFZxKvoipF
XuVsP9wnR7YW6mED4DJbUxhkPpPBQpR+ySyUzRU8NtiYUJmv5dJFJAmjnBmJJJsq6JKLKYi9luPa
6x2zK7wqjioRsBXH+TNkRluyNaKeWQd4h4ySCHlO/BjoOMwm6PcKKyV3rIOIckHayscAe7Ga2hqk
d54VrLssHagOyOqI2UpEl+Fu0BRYNkZueUkVbYpIbIBVtWNLj/PXYQ1UuMo4g3qtX6LN1xgei9NR
uGXGhT6WmuEKiGjG+jftaKpnt4WBr2F5moITIUhJQkCfMNM7HlW4YIuKu6Cai6AnY3WNnunYNlik
RA0cCxQbweqL/leHfegkd7sp7QY8lyi4qs1kcTj5CthkyUXSn+SshtWq1pDyTMfRdLg0GxhysSfV
zLyXrYOKk14CGlVZA4G8UyjpLNpnZ0AVXLr0k7dqkxRlZUEEv18Ab128ytVYSBJ8QJ7neA/YOpc6
iVyRydaIOALzJAoBEl0Q+O+eSR08+7ZAiuXCp93NZZQsnAj2o5mSoeaorRUn0DRrLPtIcBrQwK3J
sRgRQ6oCV37CRpgApYpgaQz3E+gfWow656CJ4s4054dTHuVz/ohiU7P2yueIvyOZHUSDx75tm+/v
0N4KuER0FoZDv2yVilbdrPIRlB0oc/2oNMfVc6xrVt0CjfDbFPXG0lSgRcl1KRq2CeOyDAXUCcB6
40q8u3Itl39A0pyjt0ArAU0iELRwfKjVgdnmu9vtqlZ5qNimYM+tf5AprWOvNTFCSI49Lbt5Oo9R
UTkNnDY/daGqt15qA89rhKCsXWo2r/pb8LVeDufzLZRl16uwEywdrWYcSBahoqjDvg49qDdaedCK
FsNN/UeeSqCYlU/YpPynwvpGN5SqzrkaHuQm9v2rt1P/I75SmWJLrnyNUeZ1rJLgqYZUJpApp3wq
IIDewu234Q2NahwUK3IDGvGt36gNyRxR7UC36hYF3SZjPehE4jT0XaQnH95C4EAoifRsE8d3frug
MbGiEZpr5qJobAMNrftGXo1HEiRk6ugneCtLQmGkTgyuZ0XVCNewHgcodecXcRK/Sjs0ZNNXAXgx
cWO9/q4jUQSEKUy6z/lwuN0hNr99BY8HYjj6vz+GbxOSw8/8hjc/YMcE/5xFCVlmtBgaeET8z1gF
AJxvZVZu3s6AH5LJpptrRaNyt/sKggZvSFUPHWFyBaIz/M9F1W5km54SkUf54cAANbPf0a6iVBLC
yMjqwiGqvcHKbNHTvXq+Rq/FDjv5Fiuujn9668RDBFiHB7Sn0rrKuqrjGtjtPzy3HnYjuxx/i/sM
XVO8svQh30DNTTouzWWFRQPUipp5Sn8VscpaYZnRtkJYKiWberzf7nGZ4nBH2+kG/2OUqA+sHFZk
mbHTkibntpN/K4lz9OAYp1VlvM0ZKeHi/3l//dbfTMCjI9hSwp0Wq9EptGw5nQDyj67raLwkxR1I
xf15He4bNNzd72+b9wGe4MdmuPdH+YAKrprC7NlZR9xwBhbSiMscsJDL+STr+a5Z6IjrCVomXdoj
EmtuZbFK1nRUsVzUJw4q50R29H0QLhP5wj1UzJVlNy2tCsKyeNYBgDiVGTKuTUWMIQSJt3l7ke+N
5NGQvHBpQ/IyWIZ2edzew+U9Ll7RXfPAWrZcJ2SIJOX0s9y2ZhtLx5TPcEJI3LlMnQTnjC0smTdr
8DHaC5R4Tb20Xi/dSoJ6qYKDMVv2XJpo++iNoP78TTlrEo8hMhvPJe2qh9+gGstrXq4tuHL+hMFj
xTCFeEpi2pBie7COxeEqcoagxeG681q85M3jpDfmdMR9hVDtsX/UyCGQ5LaxwwNqNo+X4xAqFnoN
bBSwsgQgeF54tHk1di/AV+dnC3SuPrmS5NWROE2wkEar9xHecXQbygtquNbWswtY+VBoShuAMnPm
oRh9MIqc29eTPRPCSao26QjymEBVr/3lAHUzkTGhT3Q4HPo3uWtASXI5ckx2eTbU4p3JPKjgrLTn
Vxvyay25QaMcqfTf69iyL7L/+G7FW8+4JVGeD6CE6+MCmISXD5uuCTAM4zD5WIfT098b3F8g63ev
cW6vu3fI2jNN5JnXpw1ZGEsGo++zJJAJCnzrT/vgyhlPHlbZGwEmR7CymPqdRydb1HSKFZpOyR27
qELIPI+EY9Aj1GokJZ+w44RjpCBdky1qrjA4dRA+KVayoUHCzqRgJsODZN5DsA6AY8ujCf923ozG
ccC3XJTmjI5kcJAyjMTYCV4MxYno2pxFfp2v37fXPZUQ0Ay0v1lvoKQhTURLdU/monE0y+TEJyPM
UDvYVrjBCzfdrs7/SAAGZsuplwqhBTKZd1zHs4kodh+7gzyY+P6I1jVCUyOVW7Z2xxUcm7w1+htx
i75486sDYoDGLl6SQZw79sY69kc4Ud0H2VHDHB5u1rJKxGBoEfkcsc88O32DJJKfAxvKp5aHRMqu
Vf/LrOTU/2czcGJuFu/PaCvQOlQdogw7X8Gw3axWbFST19EOQaChP+tZc/C6P+jYahseVzsW1ZDe
r6FTkaI3RKeaSNjgHsvQVL5UreWj6+bgpIJzlxhzlIuaz61kHShaKe1KgN7hRReZT3pLHNe7lbJj
atLJL9hxpvuzdmropmwd8CfSWGGFUagg/mB4gaFSEkRj3oSy3xzD1TlKx3YPosdrjM+4/oNzw2hi
j2stJKLqhI4BpH576vZ4g7iXf9SqS7nMFk0yypl+4FcC7RV2vaxglFScAwYxayhPa1bwtJrtUXI4
f/+MI5LW/ArZt1lZ2UqgrANWnBcpKF1eXbe9RwRAM3YYi62zvnrRGjp5xT4A+J9fkAv9+Xz/63t/
lfE0BTFrgRnGTJw4Fak/pMxQcD2U4wwmHK1o2WZ4cfiiqP9US1+ermFLx4/7OQIWKxzNTVkSEa1A
xqMlNK+bbm+NeFuCkhhcBtCwzCwuVBDHHCmWwW3k59PvtYbcfj9zrX3EF892s/JommppCFfcZGvo
pqnZ4PWPW/jn/r93AI+ebuiIwhgtgTrshxs0ppKBrRXNfYmFw4irKw6JzOBvt0WzzwJI7Xzaa2mJ
REtF0Zvli1Cjy5Qq51zjqpkXKIrLib9EzB52ShRbBJH+8MXkzkE2s39gT61ojd/9N976a3B/aHoe
dT92U9MlenDPZnlmHR6Rg8Rk0ic1b6TrzAuh15zZN1yoqwz+mRB5TIu78MkKNF5TkHjNaL5jTS/e
DU00D5LDxe4pBn1WbK2cY6HamRc4uWpuqD+axVLyeS+x9mmFyZd8X7M6wn/B7qqXz0quXV1yzS/I
SCVRnYP9aKe8gkXQdl85Xnu+6EmP9TOeqUgGbz/PyCjXqC15qnrrFaBnxnVTkzniimur577k6Ag5
X8KigkcoACOjh/La//3hlyw/6YJrUkeus5HLQKy+zhWn7mTOwp+6Vg+ab59jc365wzrH86XXt2K3
Od1tHijNy87/HpM8vQTu+1Nq2hJ+P16m/y+sVpDMQLLN6DHrZkEHOhdmmskTjKHhbgbE+jbs+/MI
5vUi5CoA0sMUzTQFaVBH16BYKjjDqNJ3M0gqnSEYTsIbxDlGF3U3AzzROUJt4UP/Q7Yvwn7ytJ98
XgV93A9Clc+vr35Ff+xflVWN3u9uRqJ0rujBx8UdB0BXIgobGgF9He7h13rrhrD9Ni06Keuh557f
tJ8kJgWGxsmYWyzrP+Ec6vmtVM+3guv1j1Vr7heWVyQyS1KSp/nj+ZtK8pU11T/+cNr3P5SNJVJB
fp0/PxpQiOF5i3C2sJRufrsVfTyP6w2qrT08G3sf9srVNeQJovexaJ4W9LX/eDmD4d+fZF0dZysd
t6YZxQVCuF0OnonJTogwW3oLqLjVzL3BfW3UPujhsMg2kwRipgJmAdx61LPRchn0myhb5SZGNgZe
C+wiKVMGuVBYbxGjwZDsPC1LcZaHSRKBkr6R4pvf/vC/2PtfvffD27v2hpr5AT4TvtRtL7AiwqZT
5zZhWZBUt+A9U3YIxtTNB09OMmPf2FTZ4K7WwA2z1eSJgKgj13u79DsAKO43t+Ef2jNbsPXna8Fn
AQj3m/ksktglfRrpXF6PCVkAsa+68i4I6Tr2wUbWqExRz5dTxODD+fQBAJ/I7o/99a23dlYQRl2x
rzTem31nFadZPL93ZVvFnIYKiWPchpeD5AEKMy3YWCXtyhIdZWZpKvPjAdgoSknlnMr5idcmX8To
lrLG9NDRcutijtbl/rFZ0gRQ53B6RAyAQRpEbObTI1QWqiyxm9NG9jTVyT/s+wcI4fftVb3bspq/
n+cr6Q99aB96l7wzYX+tpfd5lrdHn5wuRSpn0W0gM+si68LiDP0PL8K/Qx9Qbxs+LgqR5XOZ9Lwk
U7FwRH6j1fs0BZpa7+fDXqXOmrMWFpIaEIlXVWmqyWUlZ/v8sqDUxE4umxnuKj2WRbHEUaaCYkOl
lPVM6tK6te1lUKiwtFhVvKkVrKXorLkmvVJ1AoeLW6jwXXAC/y1ETPofEEqEmpyhnNrjJuFnwPFW
RLsIrq4A4V5EhLungNiiBTSQ2DfZi/WrNFUxVmFG3FfyvoQyI0FXwVKCYnmgElMtXFpP8nbtX982
x7O//f6tuJ/v773LwckLhd4gAIcNeD0/9ss7j8Xu/IP2dBc8Mm9IMjvxq3mZlo5GW6zifdZoDI8v
hmZwz0mXhjvAMrGYlOo5veLtCLeQvk8YlV94/+PijTu/xdfhehvrKQjEgecXlUtcUDLK4Pwe/kza
7fW6/ZDPITqnwhWCQzVvJ+lyCqnJe3iA1zf0ZN/kHZWErgg0JBDDTeogHEggnSnN4XmFov13V4A7
KtaF8sv5ejp/90LqcXyRSdON1b2QQdUJfIdTorI52x7UhFZny+Y02k2z+euGeoggDJAmbwiFB3a6
R7sJ27n4h7U93bG84wZbNJ8v4rfG0hvjfcZHhdcYksekQpX4JKN6HBjzFFyHlULuWbiMb9vDo//5
dfPSe4aBbS73CoGwW4fX9gahzeHbgLjq9E4LeKf+t7lMKuTJVwhriBpq2OQAAlrSO3CTUb9dPJ5A
Eptdf4DcVClpHRfQNjPGFbOo493pL2ZEyuHHk8YPJ7yHTNhvXmfaRlIFspAvmlA9zhm1z8HTzOED
meYbOHq2w+Fx1fh52gsRx7Cenf/fbTheDsPrh9fEhlC/DIMhmO6+uX9AZv57D9EbIN6XKwBAUOJC
jRh56dE3sfhmpFEoFAISDpwHu14h1ZqTHuSJTkxnc75dwxsL4IvLXTuRsZKma+el/eG1Hs7be13q
Nzx2qwvsqEQESASGhe6ZsLixHBzCVa8KrY3g/YlYc1q75DD4ifxN3D5O9+0P+ZI7wlyT8TMR3RGR
2nhiCr0RwnWzOeDdXuPty5yAEn47cQL/r86Hb/SyUPDfdueLdihpP+icmqqeDbtN0B1B+ivEU6XH
Q1BnhAJv6rUUY2uESWx2CqMEzIZcOy2wSUIzCbAzSuEgwyKD8rMdh/0eWATUvL98oGDYvskJvOEL
NXf8Y0FuQzB4ChLZRBStnmHCgjD+E7nGEINL8V9cIByzU1c59mDHY+0W0msUuTesYIh/dlOYfDGX
4E3SC4dbXEriti8PlK/foDSCfAo5kRwoHgPdQc/IsMS4U9QovTnVK/pOm6YiOZlPfNcv9HHag/jH
l/o2Ml+FuZacIhXWh7rE9bEDvoMtFUFzkc+Q6obJCpkUkldvMKqCtk1LIZ2E8JH0XrE/v76Sd4+G
mr/gbwYhN4mQCdQKJo3PDuwPT4kvZ39w0NDzLXQcgCp55/Amlckdp55HxQJ4rT85jejSgZH09MfJ
a+UYDkzKnG4mOKpXdzPhtjvfplkUZp3NVeKa7KP/JnXQDHvIOFkxvJ3OgJQJ/3qD/TZ0S4csgZQi
AZ1hvxmp8aIoSoR4SPQ6cpAtIDTOCoYel5B1HP0GNW1qzu712FcoYuBfsegcCiywkywl1C8gR9U/
quGG93w4v7wgtCi8N69wBE1JkY+J9DpYbReX63nUvt/FYmk3tKwVumk4upFLzwRWRIg++TGP28vm
7QrxzBXcrGGVg3DN4eEB904V6j0fA5x/sHsVKZtJz+BJxwP5g6qD52igjgaflrdOruevvcJOMmJM
pPQxxOz7pYv1mHDXRKUhtRqDGuKPT1E/iO4KTpQ8OlEGfNe73rMvOKit5IoND4zlEd4m8wQ+3KA+
zcVkWE1SY0I1ozapdX4WaCq636NTDyPRQdkfbYGQEPu9B06+OUCiQ9RRZEIZeycjV0ixnOT/GHWZ
eJlRoTocNLFcFIuTyGc+oGhPPjt+Punzce3c51MtGRISejCKPF/S9L2CeARm6C7033jG1v+496eb
6ADFt040HKw00VIz9n7+RVc5i44VEazKefs6XMLRqSZp3rUzJdF18nPFsgcxKROOTDHHiJ2b8iiC
Ofbw7HuFStQWnFQPND4uaHsYttgAQqlKiZPRq1uqCGFX4SkMYjwqsLYF022IhCf6Faazo8FKfAP3
9+19M9z8h4CJjn8vL3npc0hHeH75NkBMKeklr1tFRBWSBIR2v56x+5UNt1DXWq5qFZZUzfnA6MDE
Si2Iod4rpE90XKJbeGrtve0XF3PTtMiCKFhEu3jzYnsL7p9glN7fr+fH27vXmBTqKqqa8wbNHISH
/vTmeSnWOjufDh+KG5Q190dvzr0HhLong17j6aXku7x5Ub573wzH46QWK6pwRWTUBFALBso2Gkve
ZAT2OuyDwdKHiBZEEBH+EUP8GAfYT/abTBRu4ciNnZPP/xgOhy2OCMY9/jIiUO/n4H5VaicWROQu
wuOe4/p/eNtUXohUpTyaBPQIrDOvfnI/VT/l8jiC6SEyOs9+quUxJPZD4B558ZMfpnyK4DYIyCTP
/RILZVTBxbD9qPynShmVcZi16HlBHjAEg84rv/f3D+VcSw6l5Dda/uSUE2o5QNJ0l51XnTvlm45D
x/m7LP3/5cpZEagSeeg4UCUCgp8iLl9/xqV6n45DYcRltsoq6zlGLpDcv/yUq0ssuSUC30tSpz99
G67n01FDD3UUE5O8D37VlXFGOY8xi0z0hMgMMeupID695+vx5NQow/gnmuOtyrdTiQxBHVdKjARu
VSFaAg0h/sbcqcwnnSlyv3ZkJIVKdy0XesbzUBgkxcIQavVEp7OfhmM/LTxD5coINpd7/97wL5UN
EpQwwYoj18KSwCPNeVUc5gtp6AAK1XCMXV1xFxTw59H9dDi/PXqp2nOgxYbbWOvPQjlDgjvA3Jg6
MX7tmllgFZ68Qr4U791OitfjBM7/PXJ+5YRq9n0Cr9d213A4eZCGKvfk4V7xnSnCl2CSiBS9XL3F
i9eIZOINNOzb8qKhkjoK0E/actQZNDFTsk89yidFLJadxPmVr/Gg7MiwtXEFu0p88BrZ1U8PfpQ0
EY3yvn3c8Kj9Q4zBnBBfj61X/Olfj9uDiArBz+T5HEkXu2jMJ48TzSaPH1Qnz1oOIUsmj2bEr158
xx3tuvnXrL/IOBrXDscbc+uXn7Fy+Hn5/BfWbCBvOZie8YXPXEDFakMKaX7qgHLHPbl1y191PKyp
s+JlrZq8mCl4MVJpEOenjqfI57frPvWFVQ+gMB6wxB1WkX/DSZ5VxLPq/EuOyT9OECPA9PNTKPDu
LXyMRESjTHRhhAOxKFLmCKvWnHFA37UcYdWTap60mf+eGRAwKTh5ITxzDZ5ePc5YEHcvqbwSUWXJ
JR6cfaP/DEvMbzdqIGls8bRwGMHMMSwCfifFd0Y8t6SKdnQeX7HMHQY/N6/+/yn+42buyIxVhwD9
EDZlIJkIBGKBaoOYQUABqSi7LCslCA8gUkC7gpIpt3UAB5ccqkQN5sIhm0N/0/xnBOpQYdGEIp1M
KJM/7L05/PoKqn1o6hW/obgsSXiPvIFw0MnS0EJsCSLSIZI7S6sCQIQVehnLZDMOvSeHPz6YhddZ
cfs3XGAE8gD64+AfBEBQMWccSn7sIVgUWwzIEcmaI81I4cft6QPQRruv/V0Lj7Ahlr+e/6wS5aQd
LcIq6PfE6Ffw9E8QFAWIUXFe94Auum9fhoPkzQi3VXC4ZoJQit7u3yLxaUgl1o87xocgmBcq29IW
dXIMwBG3MKkKiW/2cYAes5sI7rwp6OlyjnZKc5CXFUsMYP7HCOCTp6wJxdCivpFf57UBZM6J371o
8ZFmaVlPCJ+AdseQGEgD/K2yXxb0vcd8+Yj3PYYo1L2/KeFwghLDcofjs7j023vAQvjneozoSY1z
J9qCqhxdOY/TrYyH5oQSXIBshHkelwNAv3Bz26OFE8kL7p2OcYaQ+oZcFwFQEObfQg+uQYn3LUX3
guRD+gVC1fC/MeoUMiMVjkKC5SR2fTzvAah1QjfRa++n2Klgi4wV/v2IE4EFJspXZCfB0KZsHCSn
6+Z9eHvfvHzce8yg2O7uihR2mZOgjBBa3R3ON0CveDGA4R76ewygxy0r0ddOytDw46tirMwLBRq2
yiMqci5gGl4lBt0h1vQ4qFrC5LZYxNeiZJmUuvv5DKxMES41txgsgREq9gyYEB/VTQPsVYmaZtAs
oGwIZAKMnQ/P89+frxGBi8G3lzPUFoHo3Gn2zxQ51XG5LPh5UJqP/f39vPck5ZWf7X33fjlrWIyM
nAw+knruyKcIxJundWgZB8gArdlzCIzmc/2povQe8M8GwspRdbPA8lvFP3PSnzpkonyRuAgGWMBz
CgxOYZGV9EKfcBUhKSMkvigWRDkXJDUTfY+WnSJFHKf/HzzR3wf/knvIQhiVyHGBinpLxECopdD+
+kwE+P35VSH5Yg6+pXC10Nrs5+8ntbtZSeKQI6baZXN8rFrfLgBkF8ClggGmjKVFhq0Cq8pZHo7k
hXqBKYTrz1JYUIQUEiO4ulTXOXJ9L+UAI/c4PaDvhxg2CHYdEZglxmsSg/LiGmRR1IpjG7+zCbfP
GhayMeG3FB0gL/krR+7xetqsU++9kVnN+UHSemIWzeH8NuzQJ3LfXPr+AgBMv1G06011OCPGMPFg
ek3R80tMqPOW2e58wC4A0TxTHnrOCXBE8saT9w9xbK56DN6buxfqmz2C63S7fSwqu3AC/O02Zrj3
/kT67Vc7KziAIlmQ7uV8+Dier5f3gA4KEkgRFPUcXsQld0zaJEmDi3pqQgTeRoUzEpZM5SSljOCh
0ETYbz9uAIb0dnY2qSiKkaBAvw/b2x0T2H9+VQDgrQS6TbundlrEOt9szGFOMN3YCiabkMYBXN/H
tNUAph5umy0CjxWpUXFrZbWNiO+OFcbBf6DMW2ZSwlREBiNnDRtXNF+SDpBhveJuhvMcUxMiSiop
65pbI+e8CnFGcD6C3+/sX4znIVj2WLsQV7SSKzJitwFhaWYHZVQQpi4TEx4IUOQoonuxRmtI5M05
tw8mgW8Vs7gmx5y6tiU0oOogcQWxqkkkXEatKljyjMsc/E3IHrn9RvNATFEhBsTsn8DHCLUDupvM
rlhJEEgyvm/EGSpCuZgbje0yi+sbtGF9ffzjH4rsTE+uQk920c3AQhuIRCiaRssZYAthQgTHXKIE
KaMIE9a1juVDknXnv+Nls1eM7jvNKiNTAfomL7tZSvrjxf9KcRZknL2CDP13v/wVnA4bYOiKbtjK
OmqPxB2c2VNanKKnEgvcofN50lQRtXvaIo7y5XxWksHamtN89FyMEM9QHgyhpYRQCq2KI0Xez1pK
3oTMXPCMpQ/qbWdqwI5zYi/ybMeOkmqmZCVZ81PS2ydrI+QkIkE6QoY8E2BvjzsWFYm5NVrOyoT0
Y9UDSDbc9X8Ri5mVBMG2mGCR2XNDOXQLv1a06ZxTU0e086T2opGnRWxE1ini+1fo0FnDlZWY7m5S
AOc0opW46CQYfvIvvzxeX9HBMPh9v2+/oTsQdUuogae4mFte4UdIXChTesY8nVHRGhnJXQSTFySR
cATSxFcfHHe3y3A4yEO7mqtcFNln//fH9qDAOV1OvoxOOzd+OblhvAIVMnnQ6E+amTwpCc7jiY3b
ecWgV+joObo45Z21HYe4S86OyX2rHKxjy7UNEETBPUpZAgVJk15AxOPRgtIb8rLkcyBYWaIIxDIA
O2hL8upJWTmCppkDAbPFCjzv9ax3uGqOsbCSisNioK70L+Et/G573/7vAV4IxCM8M4C2boNWaXT0
q2BtqG4q9j/p20gz+Dt5hzkFmSa1kC7sD6d7G5S7uDIM5q5aH0UPo4KRxbYImN9xSFmj8vramrsB
Wlllr4wmADlKQSFBJF5jEDAQ0vNqnTxVU3HlGWcP1StLn3ijLVcFD5STHvQUpZ6iN0S6OfycRk1P
YJOjUUO8AVtspCNPSLB4RJo/8WuITSmk1HGw3s+Q0tRTTqUqAuLHkxu3v/eciVRBMmgjI/g0Umyf
GCBHTG+UayXgppflbOt4cohKmqTo6JAKbdKUI6Q1UFElnmnjxCqfp/8Pp9v2pLwDkthDWHm427Ew
mCuAkuPh3R5HhfxYZhYX5lUaMEgVkZBzhP8HWMCMNkwG4zLyvPNQ8y9K35CmFXFGBvHnJOGlwoQH
1yyPJ54KiK3tXlkQhdwlZWqMs2hvOufLkXKsSmdTDVd3cD5NzNMzhGfLlhkfE2/1vTgOvXc4Q5Ei
bxcM/WGv3EfecKhmlY8kDhI4lcI9iLxDoEhEioTyo6Mn8/C4qc8+I7hwUtckVUHACgloi5Py0Mqe
SfFfcmLRSQ4Zssp7IjhngJzksZl2fwz4I6gR+Xjpi3elKqTfULoy0Gi7hlLuGA0X66iEWy/nUqmm
rAtcJrY2TEqNk1IqQXGdFpFAKcfzN8hS0OudTqWqFgsLJjdUYgsyV3kJ8zc19u4V35T+QttFVmGg
v3/3t/On7WWiwEfoWh7tGJmeu7Q2EIxtFUGnfhwEbJNl6Gd7+dA0kozoqDTzP7A+SfTI05UVt08/
z5eQyfrleD6do4KiWGYdB6od9b/jef84nBVWwpoffwCk1G+iYvOC4k6qvIhryIimUE3Sk0isxI++
TRq8Ml3NKR5ztd1SbGkVVmxbNi6p/ZwM9QSUpB9pdh4l6O5xu+sOriBBExFWmJgZ61AlBRI87Arn
KLgH+qQSvD/elFdOFGp/7y3+DC91ezv+7fYFnvmXl8ebIr1rjtYItcTGi3dQBJSFlJwS8KRMG0dC
PBKpVBpZy3otKUvsD3hPOysj12tmBnEjpOJike/ForVKiabA0QsuU3YBBJuYlOLZL0hJxXBDmDVR
PJn0fmLNomf7kIQ9KTzbcSrJzPjbvtxWG38Z4dqE0uKjS+XBvMF1VLgbyYFGp1smqK3DaXfttYRm
f9U5lx48QbsQuA3CF/3d55vGCypuUWNxvPPh8MCd2eKI7O65VC56fwIkVHG6EMUefCQ55wbb9/3F
9oV1xE2HYd3lU1BeANvwZE47+/0naKebeUSmWrOb+/czvgBFJjdpLFZui3YgOI0JfGmNspCXnMdg
1GIW6guU8VZSZrtEMiSg+GwRrnQ8eY7XUSW/wp81rXg17GO9LsDn9YdXRf8gb8y/kTLs81+hROq4
Oj/Nv4aSqb8ZQ3vKXouFT8yN97fvf6T4xtBjjk3Qv5ULbTP23QLGbyoHez4plYMKglRfKDgzEgXT
d71vq+JWlbQTlKOh0dPHvf+jyvT9kbGJonMRcvu+vSishHXSCEJImabgm2vQMNflonm060UVhtGJ
uIgsTg/ScNt1bNeqkSvZsrnkPDEDlGd/XE1WUs+VA0EkfipwkRFllFR75vX1tQTk2UHB6TGzN/sJ
fZlcIbKW6C1iA08a3/PUwNqlu+Ol/zu8fGAs8B88TMX+JxpNNxUzT4wO+BvcCTI8ZTFE2asm0TA3
cm/vmp2Ut6z3C/p47TDCrffTmQpvoaKa+iDPoy1moKXk9OaFG234jL1OZCZmSjUJRbnWPqJFiyAo
kreLwi+6u79mk2EpXFihDrbSg+hRwaQaiDmu8KrQpohBIZ/6r2+mmpivQ8gj+gYZLqedcvsl26xu
ndtP8ffNQ6ER3TKT38etJ4sfIOE0uZ1zXVPmIvK8/4SILLlwUswQ/jaaVptwUdBPNareF4VOGra6
0FinT3k0pBIAKfiMhflsfErwHXVc15z58Wx/fOJ4CraBGYLEaXHdEQ0d8nSU1lh+iWx7urS/MT2U
zL7iFdCugSS5l57afFJFvRAqSjy58rx2bbnyak5lGl2V8GyGPSTwrMAn1JzsxAD+1G1EjeE7Lh4B
scmYedH/XeGb6eNgMXddBNJeb9s3ryIp7jEi8VFtLwspch+MbkWg1BxAA4t0QY314xZrDcaEQsVe
WsTZG2Y95lJ4NMJTMxVlhlzwh84sLWUXBSuJxlQQXYzRlovpTR+3X/sNGD2b3U2L5C8GV886nH9t
RFPUrTDa0w4LlM2iv4MS5SYuKALDVR78Gi5C24MmXNNz+XhF92Jjsni4o2kZeaVyxmyTUgEtoShM
xHFTC84yJYg69YSfh1uCwrU2pEvcNRjnj1E+iolYAT5xLI5qEqgArlFOs5z7Wqo580rl1BU2lmgN
LMe60qWgIg9azt+4e98Op5U6bEZLWrXYAqsWiNTkYy3bFPzJRYhiLjSxVl5OwxZJSrHPozc6LooR
RgyGyqG26Npucc9q7eFw2U6JferB8ppli3GoGrTNaTW+VFf0yZ0Qsgf7m9+G5uJ0c8a2xADp4B/a
wLGSESbg6bw9XhRHdMnxsX1/AAbPkBrqEMezBvShRfLIlIrip1BLzimR89idFZQk8BnSLNgyyRRD
rJ5Z7mMYIBT/6dHaNazmLGelx7wCkO5CpMWPUqXpuctP8dBknOr77Bez/GE5tw00SFeZoBXrTTXA
V8rzdNyu4nSxngW2H1CmIO0/y0kCCPAyheSIj6hAME8xyUOsfAMxzRSO30zeI+XBt5yjZWGuj2ol
eOl+Vjm5t9Q7jpNDyS/IVN4bXLRtOYtHiEcoimE9d0FVlBBhBmzZtVc9RllXctHCzyMoSA9Z4mJ9
IkeFetjWzUHsr9OkMqICVcFf3Dyrc/vh2ydM+5zTdXdb9HYQAKeyJlbYsg5YbISkHTHbwpgPPSns
k8CW/C+bglTF/VRUrWQvTBQNQNaQrQo0ucpl57g3+xww1tGfbp7wEOEEoSSSjowoWi5ewTu9FJcC
G4ZRHIUKzyHxhtR1A5tjqrUcAhmWPCjggOwqNQ1IAECFZRAPnJuMBT5jYwNqrT8tLSzYcCgHFlCz
LqBKfGcI//U/64U9g28Eq+UoIpEWZc2wilVnunlXrtLfJqFMdNW7Vj3G72frGFvOL7rE/CusruMo
dcr0iJZXCvkqcokWeq4R+b5I01SkAHl1cJH+4JdhteA6GYlDNbhIbBfUrc4lh+BR6/Y9pdROJkKz
BNyTjjKbl8P29HXqcrsRywoEc7/g0rcYx4XitFhE0fL1nFehn5LLP3rmtzqmPOOA4Vrq0PoEHeoO
hFdd2YBbZbeFiSKAVLb1ikItQD9JTAFgL6vnc5ys/94P132qCBc2C09S0TXZRJdYQeqstt0OTNBx
nqFnMwNkqo4tohHkmmCk+sv2dP72BWqLeF1PTZEjNkpWNlX4T60kFL1f1iQUtXONKF8EpYMOiiEt
qIEhN6MKWlrFoe1J7RjFLq05tFTYUNjE5nNOwSxnPU4E10zmU5jh86te1N4YoCsWlAm4xzJc0CEO
1vt9ez0+tN7opVzlyGx1T0okFYgLKkbfuJ4D/ziNis9OaUk8PepFVV9SiuN8CUq7Zz/9Vq9vVNRS
r2bA+iZnvN7nPCMd5hap7GDXpJ7tOdwKNpBettgbHVyf6LOXkUpgzxVOoMziipqGTrxpw2VXEkV+
se/oUQ6gDbsp5tSPYVEvMpIbovTPF693Df8wKhvT24SgWxFBlsPtP8bCQnI9H1fUbB47S7SKf7ok
Fmqo/QFIpEX3RpjO83glB77IpRx4tnvv7qZ1KMvZtH+wcR/3Haq0u8OgtOEkPbHJBAsfklbLsxSS
7oFSx3oAG6gqek8VwpViPJ1UE2xUZrW4cEmAa2EKbG7VcJWLootDO92M1h8BI8zFIPPfhvvmNaBE
xjDeVimjXrezds3RB/t23A5Qj32jFeapGq6YS6I20qBHCYaE6h7dvKhzOhWor2Z1Z6/yT/ePRPcw
NolRCkx0XBlk8NYMaMYqSnSoUM8WeZsX6jqfrJbXpPsvWUUsK76B2wa5ZdUwLcXmyOmIbOdeSTQk
ph6pIv+P0MLZlP+L9u3FVHvIL2usOmJ15s7EHpi3PjVpN7yhJcG8ThXrq0+VmQvlLnW1rCSFAhbK
wFipyYtS5HKjvN7ftc2X8+JNxVKUrKroSGooYmAhr4q5iFfSF4J0r7j3GPN2LldFtk8N6sYSWBF2
E9M5zTorBTkBBIflBK8C+aBet4G+BfoJuJotAu3/1fCP0T8biogoD66SqpbFurS3v1/vn+2hUHXz
urAN3+CV2gVjCvfYHRg4jozLLUnMnSkhj8/nGDM2PONQuERdcQV1ofbRnmvhpgjxguN/ownlmfHf
tHYRrmicVL/88u7lvbcAPGEqz5PUGSOZJz+HYxVh0iVpFLVoYjucPMcHS9LT4usVusHsA5D/cYKu
vIqorrlnhXXdQg2/a+85jXKUsyL6k3IXt7Lz7/KuFKbKF2yKKxj7q9sDkAKF4BmoHVd1DkT2YXu5
hLYIfRRar5sbnCE8TaXuHNuwYn8+4r/G7ggTmotsgr9bcHMXMWnTFbNGkdGVIhe6hrFT/dJi1sIi
XMBmLDbw/Xz9KhXngllG+IWbspogGk4ZNdhhXoB4w1uWmbiesd8D7KVBnhe4rjdfjoOXmlA3HUqZ
bYU4Ji4n5lziJInhkUIAnkddIa50kp4rTlPV83PlpaE4vszIXlL3SKZBM8KmB6y2EcI4qBdq551N
M5PXw9eKK2TCGa2iIiZAu9lRn0//+ji8DocDVNjr+4u8nDwtB6yKplrE6A/bXah179W68yuAiQTA
FpJAQ4ipBhyc/9koG0RXQugEpWy14N4I9RQgPAmdh9fz4yIf/tQcp5hJ5AWBijVjA4GSF0t5wA53
BF6PjT+8N2iN4rnB7e8Pbx7uoYanXlUfdzpqPLhTBDXlNEJI6tze/LUe+rvYsQena8l0SWZ5pfp9
eL0HwlVeADl1mnXWX1KfVBmTgEfVpkfkHGb751IAQFaDwnNm7y2SACxic3ocDpqFF66/5u4uTvM4
DWgCqeV0wzSJRxGfKupPFEuoNPjCTXXpsZDa6dFOCb0OlOvJuEcRBHiynQHnENvoyfBG3BOllTrh
+EcAFSE9eUPk9ZPG7ubdFtzdou8BK4GcERVxfZwQzXVF4pVpvi45vpgoFtoKRNy/IsnI4dYILIzq
3jmWbCQ+CdnuDk867Q768ERg5e3+J+gnMwjBqSDeC04Sxk4o58ih/cmCSXyDku9b9XLKjiOY2JXj
8DjqrcXCihKNlA1igqNpfY1ldi0NoSPCPaBfc6r+heZkU1oF6fyAZUa9YQxW201WAoNKlR45Jk20
jPdSC1HhJPS0GloPADjFvNCwwiequahPLo6p5un/161fcDN50hWIQ2Qp9frb+fBNEXyOKC5PPXUO
5/PXzfYdDDusJKW8rWb23Je13FepZwVRWglQEYLSEXQUg+j9x9lTzrceS8PHlMdgf8sLdEnAk4z3
8bTMYyoKTnOEjnjD2LFCgyIH6su47WGVhPNm6lKtvPU0HuOahHMgXw3KgzZBzqnPsaOWIZqcYzWH
8QBjNzXbMCHTkHB1aBOagkPxLG/kdNUSvbjCvCE2T3LJjjQ4qqfYTvURKpG89FBuP4lWhTar+eXl
c/5zC2oBnsHoR9IoPd0EAY08hXRGaLg8UbfQfZoY/X8Z9rGzzjEYxYrOQUVIk+qZgg4eWZWcZB0O
njXLpoN/kRwX4SgajiCew1JwsjDJRjGfqpzjQruP3QFZ4ave5SJoOw23l+iaC/G6GObfYSHNtxgm
PV4AVALeY6CCqaL2zVvsAJW73DZOYeU1p9J7uxb4ZupxpydMhcusOHYeGrIkK+OBmXVocEdNUlEP
WAFx2n4b3kA1gaqCb8PJdCMQaUUKSgeOZfGeqcFKwdQ9pwaHWHwqqKQ591Z+veBW7tOxm319GxFW
4OaGDNOJUOS5CnKjycU5hRYMlcd1adMk2eqfpeVCkRNuLifauY4NX4BY0tTESFGyyUxYBpV6+9MO
DKAhLqpgbeaYoBqQZUHMWHQ81pydFAHiugddeUuqCg772K9mjZOAeGxIAmZigzdv3PSnnca7CmII
FyVGi9Lqdtfz7TaajfEMo7xJyVB4/aP3VDFxS85SXmieUlHNoE7VHKMeJJh1EHXF/CEUKUvXMmHr
dm50jTXfDwf07wf176EqAGPZrYmEIs4z9iE1taec81FMOazBs3A+zS9IOYuKk1I3f3XAn6JGIuEv
cUHEosY4zlNHEEslLjL6PDEUmFVy84ZU/k1h8+2cKnKVeieyVQi10XRWuYcMDqbO4sTITiElDpsh
Gb3BgvgkvtMUEJ90I6U0YPCSlqpdde0xj2jQdVfiwSHEpynGirpWc08p6ujgzlfe4dRXp5jV9xzv
Y3sAsQidTOB+FSfKBGWa3+skE8GvgA6cn1/Rnr9KRUeDj4xYhsCXyqIV3bPbu//Cy+PuLZObt1VC
u82vmirQurknvqZzk3s0HltLokKkAHbY7+vZvzPV+m0KjpYX1m+U/nexdFwILbQc6xmnAlpcZQeS
ENkzXgpLIkGV6Vgpbh6h1txE1I8fykY3MX4GDCREVD2VHbzqpeIFgi3gONU3mhO6TTSWC8ALy59U
wKgdjMmsY70XC2MbtpgtwwluoStEUxQRrJ5LKo8548jisP3HR4z4EjY+9oTSAOmB4znucY6B7djt
F4BSI/UrYi7dZjO6WelNrrhCNi43SQBQfhUarTiDIfgJ72o8yRGNAyNdRZOsDeztPRYQ1gItRHQU
MyzVP6m+K1poxyk5A6IfdxDA+D9/+uO/3++Xv4A2etMUlIY7d8DrbTekC5MZ26ELShJj/ozwPc8e
kvJ4yJMOKKilI1BVvHJi2RE/YGhHs8J3nBeMCw+DXFh4eDiZB0Jff1pAKJYTlJKptFIoFgGT9uqD
pcH5FFy5+3lCUwPTt0oiggTLSJ2/3qweQnf3DVAjNr9T9JWMM/eX0mqNlMlZXz3tLGooYDl1T83y
IoD4LgBZ2oyG/Hp7tGizudNroRWKXeDC8dRzV2QsFn089vsByHAqXATvFnz3AJDsFXOsIJyG+BhW
xW+MqA3hoBmaCHOVT27YHJzF9ZwQqmXz6BOqrwi5W7aRBriU8hQLEoijPho4wNTbtb8fvW6lkEfL
xgVi+AReorfw9qQ3rIm2IcE4l+owvb7Nay/1Dy3sW5CgDlHSJwM9FOS2Yx6lBquYKY2xpIfOOwvW
Bn7ycsY/UHycjWZFwFIUiqo45STe13V7AtoJSOezX4ViylSslvMEzPVWgqdC3f/Oapnzy1IOteIk
9mqPz9gcE28Ra2a8HLQX2RVcBHU4xdbco9mlKAYlt96EcPpLNP4sgFOiJUSRFHNgw4qHm3NEJHsE
C0VEsKAtw3z0bAF7nK6wIAnWIJ/qx8rP8DVgxBSSYbnDVNt0vRgbS/Uv0UTeUCA79bx4qiio+koK
V/OPE/kCHtTen+HNdpq7mnpTc6Q7ajAfVc+Po06XZxM3uSnw5DU3RcHRerLTxkYEWE329u6X9lVx
7jrOE7RsUr/KG95UXMjtfyLGpcTm8mruzS9WvBLlUZQknI9FDNonP4RyMZ0KGAzycY1+OTMnnsxL
fI5jwMOOCo+tphZgHsV1Ee7lyxe8ti9fFDOYRR2NmWkXLwVGBc/AeVC2map8/a9ffv4zlmuSH3dG
bPmZKhhDgLTqk9+ppt7kFNWW/MTR3FkDBHJ1scJ/Hgp7b952yjyVJs2eebMNNMjzjlvaiNoO71HR
H93cFFu6huxEqQBVabl4GReNguj+WXMpULgUAFCKkrO411lzvMp+hmS3fR9COSugHAQK9Jw5GhUl
7dIJJwsRt1kLwbNXZHfDTVuBI2gicks621iHrnEcZ3/xAhnqEgyo9UPthNsU/leSL0PYq+I4B7Wg
V7DrnEQNSOUeT0Fwb//5lz/okOPCdZxDIOSMfe+3X49bRVUkgpO40XhvqY4gLSrWGTBjoxG6udve
NIfJQjFon+9/Skbzt9R7W1Rhh45FvWDqz1gqY/K7ootIefclZ6I9YQoNO6+TIa6YmrqCC1IGtMjU
/IRZo9gxbr7RqB6iO+c6vIEj7vESZO72Bd4hVu5RBEHO+QHuZ6w/9J/4UyGHRFYVRHbrKBr/WW2s
VOLRFZvvsPJ8lXOtZ9AAl2kg+jivokF3PKseWe2rWJopsNmc085I0AwAKFq4ksVLhoeFp2T5mIg3
h9SMBuYJYCNwXk19RMWCfoF/Om4lVDO0Q9F5w+puaDNPzpejtxz9U4ey68pyWqcC/tArOgTwppgF
H1yZrFEASQGPt3fCKFZpdSUJC0+ofHBNvFw9I+3HrEN42UFXVLwUTkIBppqflhcu7zKOePUQoBK5
ILcHG80zLew33QXyCozorUBgFFW3Wi9WeOEi9Olo3bKX/n37bTg/tKQVNwe2p3MLaSJwdJjw3kPa
xwlOD9/P/TyofLagqCPQ3PKqTS86AgVUgBVFudP8wagMrUTv5LXos9OCWiujw0S1LDG/WoDN3c9/
BCd+/4sVcKo5aT5hLdZmTZAXRQTDk/N3sv40jGv9/MyDPEHST4qGQmL1LA6X/0+IW0XYsvDVIDww
lIIv9R0AyqijP64KzL0krs8UQ/T62S1cxwcY8VDKafu2+ZuW9tMoqaaKspmGkZIwM/jHJ1TXjM0L
VlSQVFVVkXPlXOo21IJ+OWsZYgWrSctmr4ZFp6tAhEtMnEt9UA0ICbF6CLcZb/o+3NfedMvhaMMz
+ZvnmZuXx9smz6uiVPRxNnP6f8JlWCouQzbQo6QGKBD7ik03HnmFBiFZpDZFUwGAn5tjf7sBZ/aL
6K8BE2Q4ph0bvo9JPN5w3GqIREKeJFI0a5nRQ64UlM8EPJ8eXXUkUxX2WM69oCuMtIzFAgo54dia
adCQ7ku4VUGLs0yI+WCEKtsiWWTklL73LzvMqRx7EwHQf7gp2ysz0QYFiQz1cjxDCcGqUNvPqx/n
hKaE6Lha3CLI64a7hCBVt7HwBhwmAKYCvkPrnhoOoOH0/KVT0sA+5WwMJBpx1F2v8OFF5kI21xwg
v7Q/aG4SijOvlowcrKe3a9/vP0Bp8Af+3t80audzg2jEcL/VkufajM0eCd7rz5aLaNmXg20Pd8Ok
R0JnoPAr7JahlGgoupxRaKajtt+y6zLF7ZzyQBXZ2XJUh7YCLOG3rwQFodxSJ9lMUQGIZsRwPCrQ
jpIv5nAcPViTHIr12kJ1fd1p3HAAXAx8BJYi9asMwQ/Ck0CUFbnjHSPKptiorf/0t4EgiTV2P1Ob
I4nMS4JoeT2NiMUJRdxu98cLyXTB7o6KaC+55OVJc5ybr1i7wUukb/1J81R3HAptBvZfh0xmfegp
4e2wPb09NFPd5RmnWv+zilKlaBU1J6n6H/0OKR6SQK9fVcuWBMRIp8v4/EPs/tp7Eh8zZtVmjYEf
sMjNg5eGAB0DjvK4YFRivOo1mTxuWcHnf+ZonXK0JceQZq4uDcnYcPjDpSgOd7QqAlZzqPnUigF3
3nsVEFe3hQoORu2GSt2e7VUsmlYHOTwp6bmipC/Q2tWykwbW+VBQAQQv7k+qaZ/QXaE2Ucgu32/e
Py7vvcYzqRG3SKcN4bO0z8CkNNLNuYN6HaCGAASNUC0N2WhvUIZk03VNpVg0vE94G5v/KgEx4pWm
fuBQYgH1DEx5Te9yr2F2co7rhnbLhAynlgfQ1Cz2OF/ZCyF43tjDm0oDaKGZRndW01AmFkg0Sr9Q
ZH8KKrwM9+8IDjphrfypv5MirliLmhpzSjX68HZJ4lIqPjgpfWPmkzZDwekU/2wpk89VMSnmlRDq
pZMkfiJlzA2vvZ7zQeP785yBCdgbrWUN1V5kHQtuS+Djz0OOc5abDHe020NbccxfCxX8UaChzQtq
akoqVvOzCmrVp0TiZW81PS7jchb6G9I3Zg9mRQZH++ytFYLv4IaHWpH7qZuNIipYsTMr2PbS37/3
QIhXXUgTEV+ByVlnIyLk76EAmVXawHHgBlbIK5K94Z7iJ+tSlUTzbCff8JPrf5WmVbAltxb2AgEW
6WdEtASSBhurISBwZ0QCQnVMLajr2BAVdY1ssHQ3suK9N879AcL7CS4Vu95Cyda5WexbURgb9iIX
1ehWVJlqJdZMGoR8ti4FcbcHhrsmeQii/v9qpeq5gmW6cWV+1iswjuNxq8zguFhAqF/8P1GVIyc+
kuUHVhdHUEVG3rHxfuRrX/sPwC9vvt1W5D0SXDVt/4vAA1TwY4XyYEUp8zgu8EQCjd+mGoKrGg4F
j2ViDBDprWemIhTBQ5VOMQxr3lGE41c8jPQ+QZGN+b2T6wyLOuBVrXadsY6VSP+eawBg6bSf4nSa
49VxTo2xB8TuHpTfWefEsZiZVQdgiamapZGnOohnhP8fArNT7KTEBwBL287KVgfN9T8sRpkThxTq
snVyqP7ul7/GpnSP20XzELMe9kmD3Z9P99+fHkcljtuJJdGQCs9KInvp2NJZ+Mqx9aSCAS2J2opd
ErsxLfDn76fx6H7XByLSAHcET016bKKAVvADpZhb/v+Zj6ng8/5n2Ee/7Fco5HbSMqOJHx0bJ9SL
6GxYKzrUxbafgY/kXLk35I/7oEsqF5hXbIIyRvUAMhShQlMjEK220LNCMl5H6MGt96aaEhGxtjZE
KfK2Hr3vwLq2p8jVjBLwjlZwz2a+88Ryjo87Jh3ZrSeyvJSmg23ltdFyqyM9DroGNakuoQGhsWJs
rorNlMKzO8I2xz8a9bfdXZcKJemViF8DH2Ge1Ss6jyjdRmqpvYfipy9Jt+6pQQJ5nCNxTdUslMYC
zbw7QJs0tX+FWo8yFZA2T4SwEdgsRV9D/X/aHAP4YeTGUJ/SCxi4gg+5AQBpDbVQV6Me1W+vhw+r
CUFOuuoQp8jYTuU6HOV9k4ZSC+FLXmFq/K4gLsOrJMeYAZcusq6QPUcyrjp0++mkJkTQjO0FMnrf
8ucObJ9tvpY6k5DWvS/D/XyJ3oT79k2+Q9LYZNGSCLtTjifnxYrXOy9Kv4aS9GsALZEEu8a4wWb3
ugUj/+VFeUtTsbV2ViYT5gkB96kXXtTNp94Myr02844hiSVh07+pJtJtyoZFQ2vMqVcmLrlOPVGu
4W3GSrXbA5pY4IdSusy41PSC9HA+bpUOP1O0oY1JsflzrYL7O6S3erPhtjkMX70y+ly2TlL+Q1sv
x/Xmi0I3SimsR+W5zT/Qk6mVrAxkV8766cTAPLpiV5UgDa/fcZ2dQg8C3egPa6jn3f4apn+j2foj
tB8krW0SzjHV0kbv+ux3aMVOvDH+RfxDpWlJzjYtQWO2D+Gk0LiSIHBOU/NbpaV6aNCTc311mLpu
ivqQc+oDWc29l2ubB5lSSu0GpwoX2DrkdbjexpIUABOKVRdDK7djL/W4D+2Mcq4plrfTRpCx8tpa
rokTJrh4nW1/PmrXR75LlNfgowp6ntbUztHuenNxu325fbJxVEYV0ErtkKdUuA4z1bPub1EGR3Tb
cFD0pqJz+ay3l2s/oSsqeqHj2P3rYXuHdvMkQDUpxMEX/f192L2jFzklVG++e2Eci2wrnZgKtgVe
9P+E+OOY0v4F/0ghsYybakp/+f2Py/kEqDqNY7d8Y0oElvfoRlNaQBYd6ZlGCpJwhd3lJZQsc55M
PHQMgtP+1H9X2VJBmV610DLHNlOki93G7LgU9BWinJVYAHvm871hz9jtS6xRbiiOjvTMJKETWCNk
Km7GUszAvW7DoUekzEG5v6wl9wdaXU2Qa8F1KyZPhhtMzxt+2ZHexCnKNpYimCzee6jnLjc7CQ/e
cbIbsg6Hk9fPXq6w5Qkcd9i+9AdFEyAtHudlsGMZFWjH+mb2eKy485+cHTrUK9jRBTfD1Jxj1odl
mlcJ1gZ5nXGCZhz+h9vvEUMsdv4JC3NSS+fEqIMrOwQZMJFRkdDFvINulmzMP5w0C7PgOEqqRLH6
oGlzY6Zu2OQHtPCdQTMlbRkLzCUbsUGxscLyrjb9/i0k6irXlmdclz6USklH+GcNt5yYh4tKf3NN
5zhAh8wotRSlxs2bRi9w2dvLRVFNpiosbQwg0wbaVo9Nr7SRZnpgB+VFbZXEgvavSmPlmlOzVtgV
RBMngQLa2/FtrGSm+GFqrsFjoqkoYfSOobRXcHq3ixLuCJeHSK9i5DScFyHIAK2P81TDn7PsowQ2
zNs8ExuR872/1za4pT6LpKBFnG7wwysQkqAMd7xN6pU3JHVdYnjjr+Isd9JfEp+00UOSrCGrQkls
F4XhmGmQSh8CcH2rasMN9T+CRTqSb8jWBcDtW3/CpJPh9C2GphQdwHHmRhDPv/nlD8rZOM42iLBp
vwioEqmwkoJzSEVWsPfvRyy3EJ5+ybWJXcbTYBVqy+K644yla//uqcJu1ZuxdnZSe+Eg0NRUTr9l
D/EJZOm1aTViFJRpUb+MrsT/CYmUNTn3LMH9tEG0KcR5NMOFsE1QYEsSbJf8bIoKXHOOAFKwDOcb
/WuxwkBQ0xR7s7MbsK/xKOZEa104KXdAqRiZfv0gycqpgGaM1PXYcxqagIWGqOBwROBRCIHsrtiQ
Qb4sQqOLMH+shhEOZq/01vZKXcmdx1j6F1j7VGFUuXjqOEr60lh1CPzGNwJg2feK/G4S8yCZppgG
HiFVMfxNO1qDxzBZ9QpPKInDD9WunJWJEzB0ewfCvdkOTZdnixbZT60VqEtOSlgPsaRE+CDkauqG
AycIxGYmv3ygo5HMAmNBXdFrWy+PO1JVhGYOGjWRUA4hBNI2GDB6PQLOv2l6W8ZZF5+I/UHcQvPs
5JxsiY8/Ylredoq9QOxEN+sF7Edfg/86WB6KdOwkpShdMRFViinWSUz9MVXgVapfhIDrInbmZLIL
rXX7zaKxqEKI1fxZEyysPbiZS6w5Qa2LhuStREzYdd7Tudc6wUwClZ4yPcXFXXNan38ykGX0ezBT
biLaJyjVLUeA4eOwoJ1iJZWs+5fcVYKdvTwgnVe+dmLFE1c9Vq/FMraXXuu7iE+B6CeLepCe+Kpi
c7sMof/x7uugLaUoJJEqxtbw7Wtg36AAsBp65CX3YRMqgQWHf3LkmuHFkliI+SxkvACKy4i2MA/r
x0h+IpLEdh0BzghQCb3LPk7b42jsKG7linO1MeLwdul3w6ufcJUcrJZek2ImsSMOxovVsTv6B9zf
1T9dRXKzrP9xwjwyBLiPOdI7by0qll3nOLYYlLMvEYurmMuFxJ3Bd5OrUjAnXhDy6e23g2VNUudL
0oDGsF8M8o0xPzvM56QnhZQJiiXmXBxiFadv2MfH5l6ZyzhfQjTsQjxXsesyiX3F1Aj0AL89zg8s
/6ukCAQB0cynK+YXpVxSMyc00jAKtImJ47wPd6sJWziUSpov2QToAtPaSAa3RisFUP3ReI3tHgIU
VHUdcc201Y11csT1QTFwM6chWhNaiKd1kvKRdj05q16gmUMPMca9YhK183D6kiEaRYoDv3O6UQO9
Hk1/pNdmGy6ENlfR1CoNQT9rOI4WXwvk2Ro6UEGim7RjVfIxgVGI5QdD09b+KNbYCnyh4cIJmpNV
LHkdtPVKxg5SPvMpFpNzUIiX8/nQb0nXMduj7RXtnIsgziuNoKtvTNB4kepvBh9KxU039ajUe1MG
tFzOaSQRQT2HAf9ZzD7CrRHVllSyR6fudfPjeEDtaIqRKupoJULMQEV+nLC4DCpduykHM6CEvZoY
/03MvtFNc687L96307F2K8BTRKC0U/r5OGG7O2yP00uZO5pJIoMOSMmpD5QADPqXx9ub5ortGo5Y
0J/mSRfMzNPZKq4XfCOVhLNgXeiTDrrel15I4XHiWHrdDgflzZZcqCKuL7RfN8G4jiK6EimmIuH+
lX4T64KFR1Fyj4K1ZcG0CLnLoE9dsdRxQD7tNJM7J1FM4luZ5NyUU6Hol2xYJxAp5M4qj945TkAC
Od3BpTmoD11Uep7OZkZQinVPnjN4Mx0Bau+A97xu/RHfdp65ejL6UPhCwTnsiQ2VfIhKcapwQiUn
MJdBZgTj6DHmmlOgw5KmkD64m6ASmqLV55KOdPu7V+Y+h7jKCf8E12bZiYirs7/PYNdOqQgrXJDZ
DDQyXUSoTY3wI/+vY25rCk/pwIqChtnmPpiZShsSwWdarBHAyyjYfdGPYqqHSTNbVDQPQTEDdqmr
dNYRSkaCe+PdG1CgO2ie3USU8Phj3hSsClpsTbAeXWl3Hesj5yBVIWlYlftFWUh+gVn44SnmjeYF
NlEMbhMzFp6VIvxkTgCMHSNnZgYCqDkC4PLRBlWVYhNggnNIKnIfXjcNrEMiWZNFfdprRd4GxfiN
houeegLMlYTRaY7t7zRfueO0yZRogKFs4AeqUd5wLCohfoPbCTNxEUa1lVFnXuFuOYUstkcKWjLU
8QXeuQIU0nSsvv36NtY/jkYhVj9FQ30TikjpVllWGZLw81jAnMa7QYeqGuJnG73Mh3Psqhf86Pvk
z4wBFhtPQQLrpGjAxENUx5g32UX09ytkB1k5ZxlFo2F4tSjmARoA7CluwzI9WFCPuyTAjtsfn5WG
BCWA8bI8IR2sSgXhMBboKbcsE/hyvCiJFk6ymybLl8TUFEcDDb+UCfiEFljorbPd70OVpokrhwQW
xTPmOJkbPQaQ8aw8uopFHEZlDMF5fbopRREjjtBQdzxOhPa2J3zPTDQUVsGnAUzNIELg7xYMA5Jp
H3qw6VGcoitZx8w7aE4kxVVRalpOzYxVHUMw8Rajicomu84GZo5OpgSHDUUix4pqhgOq0gKEMwNZ
sYBpRicuNGP9YaSwqYX4L0TogX8xwAyUZ19yW6I5r3KvoyBzCWWG7Ntw7l/3Pf77f8N4yM+y8om1
yKPuAc+XUNBue1PGRAMXxySq8UbtYXOSR0U3N44i7b0i+D1XPlelgSmye9xXQr1GHNSRQel4/zaB
7UtlaJaGVk91feVxUSpNxxKk0u8i5uX/9kLR7nAN5EgTzPP3YlplGMQejKiphVuouQ/JzcvCiXTT
IOLwOoDXafJq35ThBXcwQVH+Mlk2X0Z7VJmomW94rih+scRluCUnkOFFsaUDHS4IuCTMUjlwNyPE
KIf0NtBhs+00EAuNzO2kL7oZHLZacAtec2NNxz2B4fTyGA73L9Ma7Btr05lhRcwg/3RwfBjYcu/3
X4L3XHkSjiM1xMeJXXXD9zLuLaFPQGMzDTniErXmbMFonPJNcspJjRWTXANVpA2SqO5kKMt32mVk
ZLIyyZv5omgbYbPZfL2BImOzKY2SE2MkSlB0PhWKzOiyipM0BF0kggbCiy24Sw0uTksw1mnRpATC
9Hi+WLp9OLF2fuZTAVSlrGig4457ukuWqRx5Pec6gSr/LGOowlfTawXe0ZZGOZZwUB3HUJ94hZzB
HN5CWjDCSOchLpM025LjM+MbVB5wTQ4qtWDS6arLEl2R8hSgkShqTFey3FhsOBoIiNULksw0zqXL
sjm7qAlbU9ba5HP+3yw+q19ml+VzpTJaPQimMWRW7bgNv22vL9hpQqEAVuH7jWgSBIJPFzkHEARL
VVOk6pYTkX/p334vYIPCqHQfJB4fWWGussKSk2yhh+QXL9vgP4/roNxpRYgW2HBNo7bKGbUc1/eW
L3z18EVsNRxWnZ7XiBKcvKYB+P39nGJ7iku/bNk8XnS5fO03YOmiHxvf09i7XLG+WPjsHPShAqRa
NgKOXpv7ebiddS+4t5krzuebJBt4FVXcXdEVokM6ZAXEPL/oDDRRHjlxBiAe8AlBe9yePrTeDsGF
SEvhgKXof847fMXqfZDYOjpgNnp5I4J/IN0HnjMlJ+QCYrSvejy6yiWv7BxARAtOhkCy4skXK7bM
yGqDBTl1CBXxUWJT5Jz4d6OXM/qLtNy3jPieF5ca3l/ysr9DgfA1lbGI95M4HKdLAFgQ3K2ob4fo
cc1hKBiMIGZpKUiggkuOmTemGGExWsS94ryF8+5uoTaJkoiXtgRmT9sy6fn2KywWeIvGRhFjkY8V
N1fQfHVUiEcLOiC5tt/Ow36zf4BnVc9zod5erjUVLewSshiNClE0/WaWKodp+b8NvrDfYHb3v+Ab
/Cv4R+9aBaGOQ4PMqgGBc9ws0x14RaIysOebiJYfdvivY/0f6EuGPckC2nVsSiALR6rctQQobCCX
cSy1V9snz63ZiDF8v+J0rbibWSqJMkfGWThxjln+lVIiAGei7pWn1ZDGjRBYnXAUysIcp8KSkie2
FdVRZ9lTuScgoX3CYrxZB5Vzl/20PfO8WV9anCYWZ7EApgUJcS50dHgfsRr7jw+bgNq5fc0REDlx
wJkYlkO9cIlMhUVnip2yooa79ZjsegHF7HQzOGVBQraUGNfHNJQ4Ri0hx5N+ALK4V0qi5ETkEfkb
8jamas2fi1F75S/jAlXzoglBAdQCXq6gGPICaxy3bBmTt51ZyaTmcnDHXoMhMhOaLI9tMBQ/VEj0
cUqkFFTRa4+tA3dqLlbHAk4C4w21NR9a0D6zkRLWyRRixaoFVnKWDglC/mQRV1aKYKTbsCqw38w1
4HqWT/O3g1IlZuKRy3DkPBNLUZ0WBlGpIfmHk62Cd3yVstir5jLcIU3SqvIipuEg6BjSlR4HI7i+
rBQTndMfu0Po5hZkh1ZaqJHipytK9OY0yompw0XeOCE3BOtD/fyqoHQ7znAOKCUg0fOrEtOvBJYA
BUQghoUXo+P4SHLGsnIggbOsKI6S8ek3JFMYcw9i+7CIRcXEROVl52xa0pwL21CoclnRq2Xue3Ux
2DyntQK6PIBmRNRe4MmhT+EaAF/JMUTS0NpMEmtKCaH+hoUQ7lBAQEvaJ7BGsN1mzxxpoP9taMGg
vPLq6YWiP+c0HMOh4Kiv/Qd2Y9lsH/dzSGx4uUpJfFA6Nil7qZ/JNCfmdUHxs1STQlRoiLVAutGd
T2/vWCoDpMTbxgpxU3W4mg56LMSClyXrdiSiQRBfaTMBxB6KsXnClMPROfFjVi2y1NacDKvMyVno
oYD+GEBAH5b/WSzby8FZpY+Ikb2chtqQX9b1YoG39/P1/h6KIUKq016ay2Ws2RCcNSM9iWq+I+pw
BpFv/zO6nB9e8sDVj6STNiaeUMfvamzJHdgI9sCYVibNReI1pOEiXlKoUm6bMMQvPXVWmm7ZIiIC
nfAXjc6xIjOJyPP0/XdoxXK+bHeDHLfJ06WBsywC3Mdzig/FqiRTBHY0nlKCBkLxCC/z1btyi/ON
tbDP+49AcFstkTc2I4vjU2eJyTO0T5SHZrA0S1lzMdQp4/v+4dXB974PiFLFrisJigACdqNHOVT7
e91CPlf/8hUsse3t6+blDJkWUo/S2C9uXFc9nc6CC97k2yVBnOSOJot5CfUHcA2b2/lxlVl8WXAY
AI0Il8ucqFJcr5tTkZtR4yST7BdH8CRwbJEcmbWKKyH0kAr9pQkgb/p6xqLV+yvkNIrhLOI5wz7s
/ueIRjj17/3w9n63GRrxfxHyTKQ9nF4hutWnYo7i0dSflW5oipk3lw6cFPUfWTf8W9AlTL5NI5Vg
CfifbWzxFnPsvPkqh0kJFIeA4VcJW3OHZOoM0WW5KCjRZSvrz0VIsx2ZVjvBstNiPK9FtK8IByiJ
1ydzKC6faNT/5zr8SOmJN9APN1jdwf+5uLSKo3y3x3+aZHCoWUq7ZMmdV0ivLfzhkraCc/nHDMal
WKYIuMK8F0014o9gg2ki9EvqVAZHxXVQDq19t6GFVEid1nVVeDukrw0hiTG1Ga4ztMMw5iEtikLh
4IKqTml7kMI+rk6aKyM9v+AHJMgIdCpK1JxzbydmYxqIwLAKFj0wgP9xe+qh3kTo2GUaBAQeS0QY
4cRelF0fBy1PsRjpZ4EM+IzsEhlfOUcDLWeGyl94YaGvstJ7uBgJAXGUHfSZWsyVSHPvbanrGTSk
k78EecI8qSNFjs7SfHaZzyLavI96IYqW9sL3/gCFJza37etWBnk4R8Vigz+X3DrqJmoaczG+wukC
aonSDv2rGCDoSg7TFXXnz1geBChJ9LX0dqJGKR5uyxkbaxR9kQLSYwbdtFwuCJ6O+IjdHA1ZLLWO
UdkIWVCoKGiF/mHKtJwaDqh2Y8MkiBmrij4FuwMqKI9y5NnLID6vnDEV0nCsFHDaHm6aOle4OQpv
gu+9EDMpGD39/w8lrijCszmpNPOXeesPPZY0nOS3F5M7//gVa4FA0prR0IxCErYpXkrDPaF0z9gP
1C/oAn4z2QFAwqJUs9xDgZNYryPog/IU5Iqx7ptnDTGAfcAOzqGU/uMmz0ARvBVANYtRhRRMMN38
qjjurhgkAODot3fFQmwzjkMkKjy/vkICf49Vez1Hxl+L1FhzNxfS1771HOOSBRmnwD9OYSA2ovuQ
aTmnmD+S7/Ck0IryOZ0KVhToxjzLdGmH4XYPqzDujE2bmAKf6STWOhNbVnlY+EjEt9Xp1x11g9AL
SDzejoP+cooBKncrrMC8nWv5TjRmYnd6NZadeLo/rTnzEM+l5Cxa8gxOU3lXTSgUiecEUNOTYfxt
exjQCyQvhUW6ckJ3rIFpOu1qbkbq8lM9qSTFCruKFFFUiVqbaCbWJSdj0kKWjj7z2igMGVQLFzMV
CH+OTF5k0AV19Db4szXZ6tqnms+NhXy535EL2BslaiX48d2YXDfNZWrKJGERW5W4yBUXXujQFct0
QzuOj5ixApIngV1JxjUM/3/W/rTLldtIF4V/UZ2VQGLKj7Zld2stT1dS97n3kxZ3Fas2WyyyTLL2
4F//JoAcAsmIByj12+dY3pKVIIYYn5hij0jRUNpWlDiRI/KsHZGz7uMfDgJDkzgUaYcaKhHgmZoB
5Yyb6puacC+o5h2kSWRvuzRo5PGzHHshJvGQZN9Wcq5G8cdcNU2YXiVjtcdBHS0rYwLGReVlgqeA
QmxVg8zBnoQrIq2FjRfT7Bs7h6HGwuD+AG9qLtgo3pOS7+nOGfGlrVDdSfCcoN/GvGDkoV8vySZn
bXr3VdD8DjfLkpNFm8UpT9geq1RS+BHWMqM7eEzkEPLoXcqZ3vpZ06j2D3FHr7mwMGPUiS/lOGg4
pjG9V61bo8of76cB5E+3zw/vSZTvX0EMxnKS+w7cy5bt0/vU56qCM/QDxU9SknTG+eJAwv37IWf7
5gGT76O0/teoaW7w3XTQbA7p+2H3WKnB1Z5NQdxHL+T0kj6ZqhyKv3v4dHn41/s5Xn/XOXb5GLvv
J4I0fVniFWX1v88x7eKcRrQJU1/iF2bC29MSK/lEf/blsnv7PPu2o7fdaXmVCRhNq6xmuFXWmU49
yB/Og7jih8OCGayX0HVB/tZ25dZ7+nGcJNJ1Xv7ad9yWp6/X83dGXmJSumADChx9ilzxG4hfAWGU
f369u6Joc768USbddp+ub7vTeBNgI5NBxx9ju04P1jHrOqunG2k9wxy3/bjG415QO2mJyWFKS5iF
oKetxEE9rZsxKrAUOQzGhE7eAPlsSUiYfj4bQlOSaNeBU/Tsb9++v0UBhr40U7BdeNLcZWV0/X5D
d2hUwVJTy9r8bT7D4RRLuMaDiFld+TEQgSby1kA2BfKUa1Dc+a4PHhCRNuy7WTMMengAH3brpS8I
n3Wd79yABJDqSoqzghgASwzonj69JCkMnmvDxeb+loEICqsIIumyhQwEd+Yc2PnIZhUWY/m9EH+A
TH31624AX2tu5xN1offWPcMdnLqLw8FSZRZg176vaC+wEcMSuhncqDQ68KOaaB2/EVH52ix48MCJ
+qlaL/Wsmlof1oSDodu/UxrcfWJlZjrHmTJU8o+G/RnzktGEmUkeaha8kZ5HozqWr0+4q2CapqWs
Lslzcj1mg+rh8bjfXa4TPJR/QLaUs1ZQNWtBA3IJlmMXG7rRkHFIHSgr02jvrAnOPDwLSQ9538jM
yPsGFBcCu+/OBuUgo3aKauLNvr0PnR0q+7ZV8QQETNBINN5ZIsA2Vl4yi7J/FAGacTtXcJKVrEnp
wGyWZM8TihrWUJ7fANBO1xW0I5jIn/a3rykqIw1SzAyuuU041w3GD9AmVLyTw3goQFn1GnDf7fPu
QCcNQBuNaBAyF6OQwOAt3MZYmN7ChdFWUci+IdqW2Df5M8T+m3MbTMfg3MoxmtOOhnYYEAmZmhGp
gJMWeMrNVjw06zxgfmLWgZ0PvCU6mZToyAOnOuxIFsYgvT4UAq+7t8WQkOmRDXrBxpTdeO+Kqs3d
JbZez2sgz2XdfertEahl8ds+9vrcTQAXWKRjSCxKymSIJZ+47rV4pCgRyTj5/gUDMZWKJqAGyD2P
X2bBeYCVb0PppLh7FQyYaOgAL6w1TofTFHA55qLfCvrgNAccmcEOnfOAyrlbXp54CmzWHzkwqxBi
y/MYU55IxFUx5aqafaMAYOCBC/C2u8YGtYenw5wVDRiY6Pi1ydNs74TRETOuYu8g7ICIPGCsDYHR
9+hagUSifu0dzWZ5ZsB1WBGHSZIIkDuRRIIoROBJz12iU53pKzjCAGQodKMNYe5U3hPC3Y6BXWBY
9IE1j5An22EMcJFSCEdsI8BERMmRSiNSd4+/vWQVE7v+XIAgHeTlp2TiQ8oqzihjXPwoN2LIphy5
u8g+agpz2d6HYACNdX3VlwMyI2yIbJ7m/XQGD8TajUb74IYAxK1usoNWnj6/31KX/SiwRhE8S2bw
LEaEI2bXBEGlQ034oq8diyERgfV6eHo6psnP0fwAt7sBKwv0IdNTTDHPvpowdDzLLeTkZ6mHTOzN
a1nqIwFtyPqqJnirAhJamiCXy9vNOfrj4305XA9RK6fhO1Inm3x/jpN+hQ4FascHjgisVd3IiIAJ
LQCzWHWFpHCVoxUQwt41BZNWWRxJAZMkwbPvDYKkFAD4bgJjlcyuC3IyFUDDqRoAz+K4+ENxkcDS
9chvy/wXvwUmjOKcL3ptgBCNBzbL+ow5ijI/YdI0Feyj4zZFKDUWQIyiah9N8P3xCTBakM3NLC5R
uHgAl9s7O9jgKzZmD1BackFZ8I9iN5rz4F6Q6Z1SWVNtyNtl//CtGg3tYdANWapsGBfGBFAo3AAa
SgQIyJ/G/6AZhsKwiIVWJD39qUJtWtUgVA20czCAWPLX4BjBcfHDgtTBRTrPead3l5AlSs5F2t9q
MQo13Dslc2QSIdm+8VHBXVrLUVVyluXmivkNnYzh5msEKRZegeCB97ZXNafUcBy+ZCfFA1wnFb1H
hOhr0aGk60/7r2lFsNBqKpHWSPMjIlDPUVMp8HJvmlAlpr5moddzTKViq39gqakmzbSKqt2tRhid
bUuAATw6OB4izag08pZZN5soxClf4VOSuRXb3SMEptTZMUFwAZvihNj5h6D+7gk0SwIw6+Kz03SK
qWRPOJpjtjku92CeAhwZFAobIwpiE71mJwHh0kbGRfN2gcnhByD7+mCVqoYfWdafwelGQ8MqtEiG
H3KnB+ifWRSIixIoFgDvT7ErUOqlFeFhQAiGIdwJagLOXscFdCbMIxF5rqGIQmiHsHYrPytVSsBc
tgOHY5hgOucQJbIBNDZKD56iNPfmxso5OyvK4ZfT4fnwGDtAJ/1QsR61AwDANgcO6WkULI85tecp
E3vNhwNGDDmjSW89pbImYPnTeXfJvQdy7+DICEbqbqWKIZtEEy+fyjBP/nzg+hVOCPcSBsntQdfI
MOr7rLTzXKtAa0Lneyd+RkfPrpRrR8/HCyBJ+op0diZi9+lyfssEMpWbRTm+f36OOTCwCZ3SpKMa
6X6dbyRHMU6xNuwqestplTBwDej+9X64/HbNSe4j9Snx+55Of1uPlXexGkY5hVrLy/SBaxnJLiMv
QkiMjNS4vu6WWIjkhxmC5m32YDrvtJNvUBl2kKT1Ttm+A1dXzBqnijgmR6bjPh2uqXrrFOtCRlUn
v6KmEwZJ7XOBoSY/Vj4/7QlLSIG8Abw92pZ2rUzKX69q8pRTn47H89dRuse5xPWIW+ZVxXULt/1o
P/gAeHVl8VXHTZsad3TdnUZx+G8gd8gs5OgRzg3ZRwnzkHj3kAtvLvvn8cvPVZ4l/WijMtd2Nlmd
1QOQHrSrabcQWRj1EKIwOpiTpsX3xlvwY4QRtpf2mMpeEiQin5KO3KTz4TayOnnA5O81eIWBY5XH
89v3ibEv7yMtiUZ0WoN0zSUzo7PvN9MfknSu4zrDpkqpqWRkcv8EgDNtgr7I6nxlRn9MDa9zI8T0
t5/PR9Dpc6QmttVt9Z6BkqZktgYA3k9TEVBMw5AvyJe8psluMuKThBBqHTyqI8XNUMjlMn/bXX57
f3vYXaMx83++Sc8cuBsm2yA3kaXs+TH14s4xQTkImC9o4DgqESJmfRVW1p8Kv8JWvjbUFhgSad/a
LZ2PTRkAWyvOAku/vAQpwOtuupPS580vi9WD5roH588JsefaAHkZOn1iPYMZ+m4IDolC0pucGm0+
+B5Jwp75qjQo+jXwW7GpDcm/2xD42yUX3eVB8tGNT6gxsrs8dxGJEKN4Hpnk6znOxBEB1nS+gWW3
uW4KXCc5Bh15Rm7mcJocH5B5YgjGt2mGPkNps3ecxtWk1vaXh9mJkfsXK21LHdbJxjFQO8Fwl0wt
IhUAm9btKdnL6HXHGbP7193j9eHxdjk+/JbFV/S1gWGouWbQxvVq8MAUpA2V12h/oq7xXz0fv4wP
836R++SPYpidqbO6e0BHmo0SIj/++D6T1+QuPR8uqbhrH0vfr1EMAWqnHcy3vorp+jCa+SIWlInK
ywp3NiUf0LxPQ0p+Nt3LJx/9Pb9qoo84kW2qL44uALAqOu5gtnPWCfhJlokDJ9LTRc/2UNrMyMLP
xziCI/VnL/NlcgWC2Ksq3zv13aPxbrVoOwFu7LUo8qinBPYRWOWRHTxAkcqQ+3VpoFLRTzBbD6NL
kP6Q4a8HYjQlpwebBz15i63NPadBXB8vhzegG43hxm+owRmD3D7agn5rMH297N7inLWtNTnecyX3
1JB49kbpT5SezK3s1ke2ie7Y4xVIFDovqt/sM3UgQjaTJrPySGlOIcqBxUUGahHb3wzGeN+hy7WG
U26FDgBKno6s3+qfPBIgAytQiQ2hCTnb2MbABNZVpdiBmzTcTUpGMLgbOqBgPdaqYCxQMD2nFAtK
UuA+e+5JS6MQuZF9OcsjAMDMANYqZ8AUhPU5DgWZwB/AUJ7DRh53sYNhGhz5kERr4sv3G+r/koVr
x2ntja0MrsWV10J184qq53mMiwH4cP3t8LbiveCohsPoVmIBz90PMrk3ghemhK76LXjxdpmM0unN
gL0eZModLZjB+5oFQ3DWsEw/caMd6yxQgGTSYthY06dz1ksP1y8vwG/bgCdT3LsbzdwBWSiBIVEC
viWsNEZox98e/8OjJCuZpzCcXlMXnvdRt03lYzHKEhOCY4e19+NTmtV52edOp+moT9X3oZOr7mDs
OdKLMu8yvegKpA4ZiRzXpDb1WVV5Y6RMi2ziOE5VEyKdzp5LaHInlKfJi3oYhcaXHZANdFAthc5O
+8svORcmPUclBKRlp2RKfPisIi+NUiL6J5+B+zpojiWNM7FlN7gkcg6fWEite5jjr3UsRXeuglGt
UBkSLLzIZZ1cYBkFK4chEnyApKO28klaq1QNqZbdDCKOiqdqJuluI6LnOHDnAsLDjK8YMhWV1xPL
OabUB8uJxW8pX/SbLBkVN+631JsAZPCsYGVpYAA2zSaGNUzQ4PX2uLvuHwYLQoh0dhJ5OquNtQph
aysTLBlNT7vb7pfUeCmPDf1h/Ps4Riv+N8DBOwKtxmZhea1zEuGJN99HURMnh8YJknlkCOIrZRpC
1WgBMmicCNMUrUGOmOF4acY2kZPBxsamKNfUcSXRQrYqq7E2O/BwgrejwwMeVLNsOGjtAe0pA/26
goKBTU+xnXWuVMZTsxd7uT4sRAAsnaFUn1MTwTTVOJJSwkDiCJxkpq9oCFjRy245it05EQU7vY96
YS0XB2quL1ME9Fapp0Pk1nMxUyXCOAjTUxymN2vckclGU2myY1EQhQ655m2NJZo33bKYx5RPOXBI
KQcuITNfyYqM5pckdmpxk0vxtgl3xM2Np3u/JjGXIpAQupprTTYiacr3yxNjCXC4Gz04wN5VB74D
jqcKbACD2C7jEnEDS0qsnBuXOVczNv74Dzo3eCT1SECK5l3kKBj6kARyid9LTbjYVv08lVfXQvqd
5VIv4n2s7TVS5fjz7ni8JonxMN0S8O4Hzj4tEAqE+JjCydPDPUJjAUIzSAhNCr/AKedLAtqGj5Li
eVpQ5dcUyQUWBc1bSBl29z4QMC16GmW3G7APBMaBkeyBqT3xDDDSSBQmDYHVUnoOgFd6OZi00ZJA
yoWes/NKixUIIfK2Xe4PfX8NgLLoDFC7ZGBQxCm69qQJKbgONkY0A7IoDtxzUoNow8v+KVYbnm7V
bDMr2y0E/M/iHSzDbkiS7Dieqy0bHi+dCWDJu4GjU5JrXZbvALcwyHezBTkBwRjFJzroYAzIyONj
48n8Bs59z7qy/eBHLxJZ7UAf5qD++XT8Pv7lEWHqruJGS508DUke3liYkykVo1FpVrXcxNyQ/oWL
zHSygHFAwAR2+vYUnssK9ZwrKoChqXruTo02Wg894m7Dhtw5UxAkQRWjj1f3Z7JIUEKn4fLesB8K
LsHKXijtBQoOEsSsudvX88OaxZ0ndI1+zciUX88XkDLdGdnVnK2nKX0FsPVKr4lVw9b+n/rAxHea
0kigRasGJ1u0p/Pb8f3lANC4gU2BnhN4kQXac6ZffqGsxVocBZKZdAdrppKQJCt3xxuWuWpY1/H5
L8MGLh/FdgRYYuYGIDtCNEkQ3EXWogEKsA+PTNdCjgAeJNlyd0HLSSACH0UHOU/j6fyeiq+Igs3W
31zy1RICFVDPqe81eGsrR7nKywExVD1o2YZZkWMAXBKAi3jMazAKBjApeD1sIo9lUBoFUYWAesa6
gJYm/sU2EvX73tKxIbWcxLN7jMI6RTiOh7ckKhMiKQ80zELSV5wFYv2gNM+Bw1X9YEHAjOTIrKjD
DNCs5bokI78xtNVbNoGCCu2YoQfEk5fti8l1AB6d7kvXIdyJWiyVCEQ63DnpKVMyeh+jhTvu5LLD
iEVvWT1/r5lhMpPnwFJWTAbARp0k6KZaNiAEeF9hFfN5yCMgc1MGjii6GFGO6zGyUCL1/fsjcOWo
SZHmIlomtRhFPNmEjNGJO6dvN4lZ4EaoFU5L/peCnJSJdTjGyZO5XQbwgLwEMmXRku8lEluehLm7
3S6HT+83BAFskCYGtwO+nSbg7bBE/mdSST7dZ0dj31FDjv8IEFAnp3RPOhp8TXMWV6trrYRoq4DQ
XBpySTkov4rE3tZZa6AmD7x3xyVWMDIBYdCsGRtr2W2Abg9Fp0jkZUpsRM4rG+kp8QLgn5PqKlox
N4TBo8ArtYLyqCbDwuOnc4zcAEtkI4fvUqR3D789fAdvpjgj5GV/y2Zy2kPaTb4LsFAv25sTJwDO
JKGHu6SRCewFlvLgOF/5enh9Oz4fUrgqo62Uta+jrHmrq3wS0Luj6aghUAS0k3NY2hBXx6YllF4I
3IFrKo4C7OhY927t5zXlxeC8XqeqeadAQJH0CrGiFchYB6pqv8GsBD6CPSEwAH9hwUxiJMZmpMBG
NKWVR6kGPDWJJxI+JpZMgxuwTZ7u5dR+5BuxGfXW6mjwgYjUwNnGGahZo6BLrLlSo0ZqpMjoM9QW
Ib9d4AOWi3nwdmcdANlsWdmafZ6lZADZYppzfqiLCgDRDvga6Si70+Pn2AUPgtg+cEjGp12bbaLo
55NtslxB+iAlwD/vXg/HuVWgWDoWaambh3nZMnySR4llaHX0emfvW0hnzyv1y0rE0Ph8ePl8HP9z
kz+ch73Z8krSb+NU9PR515efO0IUo7AaDQMd01dFoy0tMo+5t4WMuatLuexvo+YWyoHybhR3C2ZQ
LgQvfaaGeV6dLRTTUvUx50DE9tznI/h5t14G0a62My54KU8obWAet15u4O39GmtZv55iPsfx8Hi4
zZlOUwVdUpijbSTvyKw3G8WhmfN+lHeqRzuaUP8NWWxrmPKkwozDy5vwK5VHH3kCMUsSc+BRCZOY
ReXdvc4uj6+mrbMqz2XXM6bkoPxcMdU+udop7SLZ+Z8vgH86juSm3eWOOR/q45N3RhiCND/NjQnO
p+M5VgNMTucJ7G1dhhiSt33MDkrxipjDKVs7+fEct5V4OYQO5m5V5+fxQUZ373DLrhrKS0urB3J7
BHYVCR8T+0oo6QKdeGvvJyGjPl+bWTe1wqGcTAOC0blyEbU9Gcnfu4IzrTQaj2cC1hAd0BAdt6HI
IXPR/OvEyWA7qivFwhxOzoO/8XDIfLeBY5dSFgBN0Wnu893b26hwb59HqfjyeUZB5yYAYLGuVDtZ
+/7P+2ggPX8XmfabfLZhZbfVNv/X+35ktepAp/zaQ8lsmhxvHRQ1WjtLu8NYiHgFioWnwhk+Xj2f
Zco02Jwujze3xj6OMiDJumWQVY7LQvaw5CFXXy5TwNwcWsQIs2BSnOiQOAPtRbEm0N1ekAFD3m3F
K/O75XX+5xyrrz4fjrmxb343LHvH1xu4Gy+ZBdxQZ8pdqTbFCR5t3U9EA6aJ78tKQMwTFb66DpFi
EsGAm9WBk8VtlhHUjWblDFJUk9UWrvfI1Ec0NGkfyugaqLL61WJMHDHt4vzycpxzu5OEPtxGAfv4
8Hr4FnPuUnpZAq3BlSvOuBHZAzyBUqwVIewR7GhlswTNmoVJljT2OW/uVVbPI1fYDzF+ACcLnLhd
nKaHbctP8I6s41Hm6H+7Rc10eUcGmy+vaK670EEZBW6Edf7EGwEiQ/V19WyAxGENztlyGjrfya05
syD1nEoWTwK2ogzHoPnDRQKvSn7J2NxdoM3gyQXZFCl0VTUIdmkNpwYnEb1JsSUhZrHaMC/quUe0
2g9WIyoy3Gd3ahCcxus69VhAPY57/NlZBTsn6oW8tWgkA1NAaw6JEOnPA/rznJSasQB0mIHDAt5P
WcbWfFoCZSQIQvGPCK7Asy4ZtV+xugg9ZwsRIrjii+sG7jE3vw9EWCAyyC+p8lurB4iglQ0IQH9v
NSVkoEE1OKKI14qd1YLJAqPFvV0vNgJmriIbB0Cbg8zp/TCEMOiKmA7lGwVwJmyFrZcd13QDPhNA
iZTjjPjp2abUsEaf27oScHIy9gXYKHDO4Ovutzlh6JKntS6O17w7fF/EznDpL76Cx1zOZzxyKe92
4G4vghyXpMQyvj8utWrKCm6kLWdb2S4YDU0ZzYtNZwcZ3Bg/U6WD0TcxbQOiuwpDEngp7LoYc42w
NMIIHQdMUfdwdzu/yrbzeD5fKoUpDxl3tc7vYLh3oDr57XJ+Gb+61l60Y61lZPgAKW17jsdElY08
RFVeja9uCyxmFce1KfMwxyA+fX84SUn3eTslFLBYdHMJStN0uryXjlOEdzSdWDOLtM/7PTBdHcFv
1nShjWIFhkFgbVVKxTU4I3BEnD6Ntu3j9drYcSGLLHY7UwTuMd6QHB/OL+U4UdMgobGWJq8W3Dp7
UdRpwCBWlpPKRvfdoHtgQd5HD4o0h/TR4+jo3EjSaDpyJijSyzlvdxSTX2Kfnsfd8QH20LdkAAGh
/sn1Hdeb42jL3Lt3OJXVkRHfZGhnrkg+nq/7NFt295yRNXkZ03OjDqdtrSComMqQFlGWa8S/nm2d
e4vmCFkyNYPOi9FmJEh5MoLt2GFUj8dDfp/n8SpTs8R4xb/RsP7jeEGXCkNlbzZwEy22JY3zL0b7
Ql7LbcZwebLbT/uRvB4utyMekWINO+Z4fa2REiNOj8cweGfvp+wkCTq+2DUe7PSIR3S4ELjpOtO7
T21qbqnDxfnymsuBv+4ugBrJYN6wRNTIDJlTi5GVriiw49esGfxI8oCWuInJGa0cf7yZYMi8Zr8s
M73KxOuLy3lYpOd6tnPKCZTn2jg6jHP1xqfq+t3xCGeJ+N7dj6KcfjnJPnmeiBdGMI+8fRpFYP78
IiWPZoljSy43hAGmwUGkXAUwgeXmd+YdTPntkwGaIlSXj8hqlt/vIOaHATwQO5uUlMqiKXk+sCIt
44Q9GohH6IJ0rfjhH3/7eREOP0yq5Zfvb+AKCCdSkDATWLRDRsWYiiD2T7hmLX3MT2rJ5tpbzlKa
u2/C2UKebossdPcyCkgtx2hOwjlNfSrSZsy6mZGhJiM0WdLX90syZP809SXMCOXbyBj7lEFxQuTn
dccIoVkyr7pUngTlyJBXnYrctJ7Qpkk4jwI5SuK4YCoIGRcvB3YBw2MQ33Je7cvh+j5e5dS85dNZ
njjliRlDCHYxwdI89+pIXKtXfjFpCN/4Vz9ZvY+x4OD0VG+bm05HZnOTUIztvOt1DyZ3mcCM933Z
336K9PAHIA75WdPzYOBVpytAL+xkZuO9c8BuMo6d3T5lC6Z7U0A+sAPtbBdi42gkocLAfzgMPRoZ
PHA88fn8up/tjPiss/6sUDA/B9sMoQ82gJ1rznJjZI8GsodTn7yhDNibjLglnSJTycVfRp/3h5rz
YB07Ka7N8ckOyofdH0Iva7pF1vrnONb3fPr+GmuD5taLFfuOahSSMZ+k0P4l+lEnYGfS81sST+m8
MlC/EsW8kuH6fsRsBkRAprgTFsi1uvlG/mf3thutoMqoREsmYZMcxvFFop0ZSTJZPvvPuy+HxNKX
/Jovo5J6P+4uUpQ83cjQtxsArfPrvWVnMxPlCxo3ZMs1cM8+PUBSYs+H437qlTo+SKoHx6TkFGts
JfRmCoqeZwv9cKpZpSowE2AnxjpGSDIPX7msfIOfWGtOtt8bA9BP8z0eupx7wbx/AuRA5P0AbJJP
l/dbSu4Eo/YcmVOp07jP6OHzuMOyMni+lQlS5yLtpwdMvkTD1F6rem5aJyPY5U1Y9oapKRmpO8ep
Px+eb4DvFMfTvHmVHdPYufJB1vNuoI5Sr/J0Ac4YzDcWZzN/io0wU8/bbzeMQoWSd2aFNoqvZOgu
L3kFsA8h8bW797S3vKeoGfYtjjeRWtHJ7UOJBb3tntK28jAROhg5WqlglrGl00jXMAqV2etAnJru
8p67tJUdm+SzMkASHvfPoxueMnU2cAPgI9YSX1mx9ybUBsh6GzhZesfWm8xRMbKXN0acmTXszPPW
uOSMxAEW06Vqc+tYXzBe1/iB0f1Eyoj1m1nIGE5CTAeALpLRnCbOjubSzztd4+40R3IB3Qycv3E7
/3y7SH1sMvATgFOazg9tnq3x3CjWYuQjjYnb1fo2ZFG36gLSHHdRtZdjAldnJsmWbZZ9b4BcBoQJ
Jgtjkie3HGMGrZSz9b0xrQJ1+Z5md/ewvz70wOkLHD3ZaMD2COD0zGG2vFQXtJ74YwTF49/z6+U8
cvoqkwAa4DjJmFaNwy9HUQDFj3OOc69mtzDi/+BZeDR7Q+LAKwvcjyepIpRDZo+iYyfDp2ZIU2eX
JL+hCeOM4riaf45JSGZVda7MI83PQlBFl8pzB9EMNcDucyXNOCoCU7A22sK5DfvoYUS+vAKxuJki
PdxD4IB9elZ9msFbpTvwWuw9R6GS8xIXDZeVb6R5sAeCH7olbWk6QRYwyKz329idWhXDn0YZAn5Z
K+5LJCfn2A0UlP4eAltCxLtkQmd1GduVPEzyDphJHScmJYCfwBLAm9ogP5TFJ02aB/HFKpnD8/M+
prwSH+AATETnkR274RIQziTqJlpTrhO1AwggaM/Jssfz8bh7o5Z08mhRbNcSi44U4k5QCWAUFuPI
j3e8XSqKwPamGj4BjEGMjVUST3329rfb/kI9TAwOaM7sSTp/yno77gAuTeM4q5QZnWkNgzgd99Xi
xLzuLi+H03UGPhf1Jg3NztEyYsSMy0+zPBa7FWzHWQ0sP9FyA3pgYPFqO3qlyg7AdCHXkvJa5hap
ujd9QLCd7bgjJClUiZEHxQmMHFTYxv8r2JXrNfAAssICHN33Rf7IXHoZZ0IVcXEUu1UMW4xea36w
BYIFJ3AcYTapjU8XoDfYZe/xF2B72cAcjW4syhzO7odOmx8shOsT8WOol5g8JJmvOfFEDhcAkaUB
MtAMGloKG6k113dyFFE8ynspwJo6yaQOpVMuRS1Fxd2vlHXIZBqDhtNZ4XM2ecFy4ByUYckgtTuj
l0i9aijcbe39qQGrGuzoviCtMLBJP0kVkS7iEfuI//XtAamlzcE8vdgYcc26MsIJx92iNIHrRMwN
gh3RxuBvyNTzgfNKF8l0PpHOMIl7P++h+eD6db2YJmIKTyOtFWMFzzHban88Ht6uB+BoWMPQULqX
bHNWEBdHs7VWeNkMxvcBOIYEcKGlCOkMfz8/7f+EZh7mjTP2OLUWJh4cr/e3/fdYnQAohhXRLfXk
WZawpvzzYfz++/4UU7XzOLqyk+ISBUvlsEDgrZtLIxn6qVjUxjGxwMzquQtOqfz5ST+dv00CJmJP
MY9ypOeayOJdjAT613BJt744SalHWmxRrxU1ZtjEyr7vvUaJlWyMf0no21NEN3p5gBQ9G/WXCQA8
tuc0auzxRlIwxfESWdp0HBZpQhjsAOL/xL8j08eWEHYaRJptc+BN2ZKPbIECR9ErVcFmj3+14EI8
fdDFAlkPTHnwiZArxGp7XjT1WrsOoI/GcwJ71YippeCCh1bCIaYrN7Ewr/LKoZSbgbNnSbu7yu/y
IAjNQ6umQwbWscgkkfDOWGY0msRp0bl1DqCOdUeZUIrnADfhLRN1vou6RHMVMBZJKkkhXnqYTFnj
aaCqs9ZzOZk0pQg4aSSQS5su55TS8RJrkAEL314/X1LW93IJU5AzyePYxBzqPb/NkVJFOhjCPxjd
m9KVoOlOzzCk0o3ZxTWxZx0Q1YZj5Dm4FnMPpynC+2zS4aoAq9nszxiMebvu30e3ea68joVDINCx
SfrpSgSPmk+Aum3fcaDrhP1d/w7zjhzKYyU9wtMlnd/SNe0fStQSyGPyyvE/UjoqiM7zLDNplalY
sQ3isSv/pGi13vCPxnC05b37kRaGIQAzagiiiwWfxluHIcLqfjVnVBJOryQeeDtwV29GM8DogFwx
36N6lwXy+HBurR0M55jdZ/bNXZbnvz2/VQ1T6wJn9aSccjUAK9lxiXtijceEq4BovpIhldt5zsWo
JStoxR0m2ZPTEJUEz13OR7CG5SzJhdfSHLtaaMwGL2CZCZIEQq0r72HKJ3l/fXvYXecuxvFKKyZD
MJxByYtYoHt7xSXmrfAwSn1S95ruOZYKRmgC3P668Qj295Lo9OCXB4aUFnkHDsvXBk0GJ0pCZrO8
Cigc5uENHZdBTCtvEKqmOWnF4/AptakGuhAK9PERR29gkqC3P+6u+z+cnv6csr9GhyL6oC1ZAc4z
WYKHU5TEX1ryt5zRcoLoH47HP01OOJDp9h4xzA7R+PlPcg+/7Lv3IKmYJNpcR3FeybjsuFD3nUVe
twhpuk60ZUbGERgFBFy2mnbOFRnMoDsopFhOoQQLQuzesL7RfnfJieSxEP37aOIAz9BU+W1D8jj3
iUSQ0tjN3s/top1zHvlXnNJK+4h9lqP+G98gpjtWOG7gLJbb590hH2Z3W1U6ogpPMylIw+k1v24i
tLXWNW126meXXy7WiQrl2pmXCWi0dqzKeHM2n0fFcHg6IpxZcebMLGgR1q3lDPkJ5CFu7dyjcwYc
QEpBX55J3fmnIHVK8QD8/GANv665UPrcInTU1j8luPy/D/uvQEI6xm7gsgNQwZAr+Sq0hXRBnGvQ
jOBnoJQeQCm9XI48JV8BERfYmDKlViDmCCBIGiNV7wNpetaeGinfuQGkmA6W+yz1Y0tKbHdEz6pY
rpnhI+TPOLaoN916pZaKiOh4dT2fUPi2u1xhdum2XPsuNl6vMe25NM1R20QodP+v95aaYmdYj7Ao
R4hZtzEJo0j2zOosEcxj1URxms+Z5+KzQByReGCKFjiuocRH66pcp1ghN9VOTuV1uCiJTZErUndA
aXpw7SqfsGIPWLFnegq0pATDlAUuLWiBLoDrwXbKuK/2rAWZLMd1Ka8IWDEWVP0lwAXsG1jGrZlt
jgQNEqORvKyflpRH4DFyDF7E8h2QDl7QLqn4PLvJJPRXKVr2sAqw7gjykbU1z9moSp4zt4F7lwAl
dRmGK6a8JvwMPSoMfD3kEZIpfxngpgNHTgSVBZ8GxtLIQPfj++U62nERb4tDKysVqcSzInDpxuIA
1BwsF+gt5BxwjgLr2tRSyEioLN3DZGdFemspGgrdJrPQA+la17idlbNpS6EACNEbNq+NrTNNZZ3A
91dcEGThy6mH4O2zPLwzM+cmwmzLgo+WUL51bDymIA4DiMOibP6JNFFfntLvmoc8T8X5qIlBuMfy
rPcxAABhAo4np24lAFleTxkjPHNL5ym2hoqwHe27gZwX5OA6kmht4iMZBYv6Dq8v1cK+UNIyk24G
Xn3bCUJx5QAgvdMY7vvkAsUeQ1i0WFqUu6Lh0xzHrYRpQ9gtUVN3vF2a05+O75ffY0orJu59jPG8
xS3PdYEk3x2253JEvSSizJfoRhcJ2FVs5HnrA5H55m1liiG0ildg/ZLMgASz+yJ2mlt911otDBL4
lUJdI2lc26weFzj4ywQVxjsE3mnHIB5zw7SUBbpbCoUr8TXDBrOEvBWwDMnTiH9sdFLqyaEDh5/f
ocZz8G9FwwB+bLi65Qm6nAuOV9DxCeLjXbUG9PH7Y+xsHGNwGDcIniGq3dPTT+LArGy06XsFddm/
pEj9+KtPo093O18QxK+5NoymH2ILeKCrWOxvztpFOUqOi8+pPnQoM5GDm6laqukhCoal7er7PmAJ
C05dPKvpmyRme2/yz6kgKzlVw7fecHn1b5f9l0OEKhIlzQkrAO5ioQJjOt171PaILVG/z20Bao3k
m6rFcMnO06fzEwhb92zYmod+gDdOiIpUxB/3LyMTzPcG8mW3XVhMYabkGMEopp7Op+P3qZUKypJX
bYUpKLTZcZqugD2B3aMgNjFZy0BFBq7IYqkYrndO8N62NgVCkEDPxYZJB9b3221KhAf2UMciPHOK
6tS0Cfrm1rLXyWD5CviZirmROe6DcolMe2+5GahJZyLpbTX2dbTNbFTf2poi8QelvRq+vcV9uxPE
vSzEeo/eAJK1nPzcVBVV0275zkJ32wjAoOOasi1iPD3X0uZ0kivriC/A0L5AOcw0njc2Y9+9vo62
2SM5ZQ5jPhyua9LeaIGg1dfnz3mOWvOtbxvK7vlmdlzCwPc03ANlDCiunD2W/QDrYhtKINbdjHDP
83an1jdRQ12eUDGPJ9qe9NCp9nCBvjZ5UqKxksr8ddYQv8avge40nIPa0OJg7q5b7XJAgsND+osl
yUyr9QUQapoflBzSTZu7aB3UawRY7IhcfNEh/M+1Y7EtB6kxOd3PVB8d8xla+7lZovmS2rDblFMQ
UfCcM2i16geHUrAGzp6eWiu/v8VLbk+4dwSCInkUZRYeCBsT39pnRsmcsn/803kUVKen9FluIpeY
8PEqTwFXisyTN9t5uWlsX541kjvMwlyqtF7nuPn0o5MUrfWpx3Jc9ioU1sZF5uExm029R5L5Tf5p
TUbDr+OenTFGymIfPxtMX84g13cXcLjtX8FIekVnoa86LZtO4s9O/JY2222HQa73PicYTdsADznh
4mnBtdzqaf+8G/814idd9/HPN3m8/eDW2ycxCmt6PRot8kUMah3HTgP6TwsgliGEekw40YD25XD3
ydFSOnShk3cRwvqeUZEYVXR9TuOQpgyl5C18PjyNG5zltHy/8+iZ/GAJxpl67TijQpAyHdKOfElh
UyGcCXFMvHibur8bbi8wkgWMtBIFnYOYJkMe/r3/4/c/wVaHaY2pE8OGvK/jiz5+zpSZ4l7phQ+n
U2pMdr0BiWPK6+jpeqQ93kzyFUJRypcSZ8r3GunVeP0ALthzd5ORszu7A2WYJ3YeuE0cnhZCHy2x
2/kteZeHq6wg4lpD4F7ejg5r6BH/TQDh8p1iRp/Lblh664HQy1oNpa22TibvrqSPfvqmF1oapW/W
rS4Js9ME0yzlRcMuS/pVQpE07lxTU7j/a12e/HKa2/75/XbPaEa+OG85tZdKFEYvcb8tMt6/o9MF
TiPFMgPQLi8eJRhGAE/zrjfT0tIuqkOw09HCStppyvBEji5Y1yFy7D13jJkv5e80uUoCl6d5PX8F
BsDg1g9TFGV7b6OvNvqDh+SgXOVL7DlxN5qIXddrWfexwiRbiH85X/Z/irOl2sSt48Rj7N88iOzk
e47zzRCdA1E7hIHIixVgfRuv6gaoQZemmaNqac1okRfoFKcNr+ML/bafR8a/X0dxmf/Rw233AmS/
Ypl3zsW4vr+9nS9gM740Wbrl3kwn6/NhIzHm4cLlcOKH29fD4540Nicz3rJAidpN3poh9tzqJUxC
8vH8+pZmloHZifmCVuZNFqcTrQgFrAjFvXkWLOs8t4+IFAtsm6SirrLiVvMg9Q2zTVHjTIN4CmCS
FoGqoBktdDYMfQ+sht5xFKdG4dMDo5TQGalJnZUMqR6PITvwEs4gZVV3zzq/yikCiYy2aG+1k0Uy
+dk1fmVH6tJGVIoDdQW3BlaCcqI3EJvyZIfgz2vHTNl8HJzmFpWtR8AagbvLWJziDdBPYfDcd9TR
et2LjWvSETwjdGIpOaAfzTHMthfY/7yPQuX5+8jX32pT0pPlw+qs/WlcK/LwjhrA4iJ+FTCxbN13
VBiSUufz6XjePcmE2dtSxmRlFKeB/lzdg13lE+lePnMFheyhKTiy13qYJdArMCkQT85x4rK3fgBe
q+Z08eE0Wi+xNPyyj2mGCV8fJf/7bR9TV0e74qfRmYfqul+N89zcPRO5DZ0Vm9el/WwcRzeJOdP1
MpE6RqJOfsc0Z/EDUNJA3GYCvRbrLfy+EPsV9WFJq65cnxLYbWGVygaeZiGpYjfjH5DpM5A7Xc1z
19vxn8mi12jmUif2Spj6pMCBIWG4nVNcpqKtNevbzngQsIkHzpKdfvjtsq/sW69cnRhcc1YHsDHW
B4vQjZvrUmIGKbCJLafpFnF2XYym3Lrh8vZ5d9ojsTZwit9614+WtPzoXbEL3d0b2VM55P54BHaS
rjFkOsWn0SWRbchhYPGfaX5qupK0ymdgam0Qn7xCmkwS2fX6tpOlgGHRokwFjxnvfviyO77v2yb5
ZtIwnGnNuvxAzHvDOoqx9dog8zNFv7qNk06fBux+lYsxfOd7BuZZBOOMa4rDDjLsswpF0rluMqin
kp7UdyFyQYISDtNQ+akXQwPO4jvOa9o0sI5vmH9QqqXPPvJ6BSkXZoYkOtMrYLr3jN1ljRuCk8MD
RAqRJoNxn3kANQQnB9tx1DtKfDt6VQg76TgTgkAZsuwg0Nq2fyR3z9HLfgRS2AbOECiEyNYMfd4d
r0ABOy7wwXmkHniknjvklNkbCVN+Ectx7eRW56BZD6C5njPTSt6blcLqhICgTcfpZtuFru+BPzlQ
D3jFyKwyRvUDCtH0HF3ZzgxSJXr6Nc2C21kc0AzjTF+17L6sGPtCNzFY9Q1AnePN9dwNbMDuU5Oa
HBxjl1nVh/E25TsZOHFW/n6UlARzxfnw+VSKc8l2l5f3LMVHjffpcNrJqXZJZQ41GybHaoDZQg2Q
lc4LLtGAS1Z6SZXNYelxk8eQnpZ8nEl8fhOVBou2zCiNLAR7lstX0xNYnX2JdpeIIrAGiOu4NuVq
0egDsTmJRDR+/H8WhFACsK4nDE0D27Bnb3bSTOBmFScLMqiTPP0lNyf7ylP7XIDoWC5snBck+EGO
HU82mmxpqvIqdZNthGJNHYF7SDTcROTLAJBoKBkIa2GgfgceKV15eUrMEXq0ZVnr+YBi1xmFHDjq
vKzSKGOdMnRAOCEF56ZGp6OTazrwa2FgZU5sdZLNz/HtHidfNRftABNZcQfeAELY+9yaq4aEGKcC
wXzzVS0/WCJS/JJZKOBKgGWd5Vh2EsqbAB/APfn42iwbFyAFGF8DJ96X86ydDSu4ggt1FVrPyxio
Q6WSCKfeSzZPDrHTb+y3IksOltGyGMp3EwVb/bEdSzfloWKImjZ6q6XCDCyQMoqg4OTw3tCxcfnR
RtSdQvFX1XE38Tnm5e6hYz3wyDgVVt9ej6KyH60OFmkoff3rbYcQXBq9jRlRIyPLzj0ItFDAncTg
pyYNE22dzg/Xx8tZti0HYloSUyydaErW+zme56EDWxk6EHGt+xhd5zhkndpySFiYIpuqD+RJ//OX
v/21pd9yftvA2Q3sswAR6Hs+ZhNnccjA9MAiNXG4J0yNpE44HcNCXN+WcOcwKN5SW9himaqzO51v
n2sJVB3JWEymfglfZfNmiUJXtJwq0XAzhwPjdHsZE9kEKwY2ZRLlKgYO2ucjT8A+oVFVWnE2W7EA
CtJcqsjE1tlnzHk6SzAZKaGBkuUdXpuHstUqRbPzUSbw3AHmLdqZPE5MCDNLNc7bp3Oat/v4uJep
frAofzeOb5hIFdNVx2rB0URJ2S9PvyaG+XV3jSwgI0UseJZGZE9m4DarCYNxhlVP+YkjBj2XfcnP
7MvsuEGErgBsrDYQkqPSYOKhLFwyJ+XrHl8/lojsbnPRKXYbyFGJiWaNDdqAMH/HyWiSQLYMEwcK
OGzNsak8ZH952f9v0tAocKc2ntB/ni+Hf8eMj+NP73CNjnNoZkcIwLGBA+1pCORDkU3Xc/EHgu7K
gito4A9mWzfW653f8jDBpaE4zDgd30gDokwHzLZXzLIAq5TWji7drsv+JTZyaArEe8dA9duUY5Da
4Urxrqh4J41Qd9eK6iZmIEH/Z18WhPMFCG5K0xkVyhPJFDucmi6FOm50grR3oetkN4D1hWcwbjar
v472/ehWf9s/vqd/PvHk/D9jweoti2JPngYIECtAzHIi3eP79TZyW0MKnSv5bNPXF9BPxz17afkh
TT4Qmz1Ckb2jNndDfnNXWt1zSnuc3TTI4puFpDPgO1cmZRFRsdVJbYqQnY2iiYok1hPuK9XkSu/A
lOELa+4yF4C/oFlDM07btQPA9nm8TPXOe8BoAfhpUxH0CUOhw8Ad+D5iv7T+/QSc8eb6EZDWTqPV
qzWYBOlc5zbK9bhIkyfk2WB+szdNvBVSnTAnMwFpbLgYptWjO+lkdlJ8pqcGKY+B7HCQo1oodtJp
vhztur/lPIfr5Eqcdl8OL7tKMd7Aq/Up8htN6LxYJosKuj4qeJKSMyw5Nda68WVBQn9gra4pyCmr
h44N4gi4KSBi50GF38xczckjQ8/R8Ok6/ntv59hnbbpMsB/FB2Gd7r1snHfs76rBgGwm4rAsgtyq
oRtAri8pGUtVlGr6nS54+Xf4VJgpTAfsasP5zbHnw+kpxwff043WwsmDsYy9SN+kStpO1wIto/A+
xV4PJEs5GimYYQIABiYhnNkRwl6KDY2c3o/HiYsrCt3193SQQDMUweo5oZlTraISikGQlrYPGUpT
NLG2rAmOz3wbZf/bMY7ePNfOolhpMqU+A5uGXMH41MHcl538XK9uVrqE3jpQC0nyQMCCFqRWrLF6
SngTGgXMXsXDFDNmC74ceINrm8xdVdUj5RtuE3N2PYgCchU5FFpEhdgGhMQnboOBUt6EyyFIgNCH
jos635ltkWNSLwbsTQ2GE9rZl5KBAUKZ0Q+YxDb1OLDNrjicf65tBqbVxkhyi7YA1WoCktNaw0JS
sVMfanWf+QCemP3xBCqml5pDcl8O18PIbXOLn/Ex4w98q0GMLFBEIcs2j5p4rhWkEWkNzSufyM0/
4jpgq+q/P+stwBjU/rxziUbdeTtEZKqCibO6LwoSE4IsRlgYmwbe/jtpsvfTVCMYh+3m/wHFmnU1
IsSUJMhgHqmdGf/eWSk6CB55UHfYS+6V8XRO/378A7JIdazozWtEuUEI5bIfv5zcOqmJUPx68pbT
14q03h+/zulq+zlgKi4xuZlpiZ70+xiXyF/+X2mIaPp63YBOXv7k5qfvY2/wtzhu+/RylS9Ar7+/
knv6/voaZ5CSjrTyInZdxNx12f80xRhun/dToEG+jolt0kokXhm3U0ag5SsZyr247YXidolpCSu+
SVaIX+NJpplv1zTuZ7SQL2InzXRF/brmysvRT/DaS1/1w/q+q1NNziIfwZU/R561ga41+XptQLJY
dRvb9+HT+0uvgzifNb2rKg7SNS6o5JsZmAUTSihktKePQnkutXK7jN6k7TvCZwsqmj6cmsPubzsh
PpC+70sum2yM0TvxFpxxpUPS97J+a1reR7eeY62B5QRWA5ewFD0z/VwqkXycFMK7fIlkF3s87S+o
s0lauxPFwDRPeJ/hpOSUycto7r1NZweDiasvBYAhdJJ9tXi65J6gwGm6cVY0EtVEHRyZITtOIs0H
0fJBDHePc7vv2IL1cn6L+b0pyDX98worrDxEcOU6URp5RV0SkhNUUBqLeN3XSnPTfZFzJ2Mw4rlb
Gsrtz+Pd74GGVaWKn3C/3gfje/neV3kRiCtX0s9JGpeRLsWIdLNJxaozarjTiEvXuPTvZ00mg3/p
/hynVjdD4fJCCQdI3SOlbIu0oGd3dY3lvvvcBXf+bFwz5b7F+G4F+8394X3Z2jHMvuw1dS3MHXZz
xcyTHE7NS7ENUjdLpbaKaNyWIf1D71rNxXAoXQ6scj8wOnm6SdSOFB1bm+UPb8cmgCqRKqeZp96E
o5Ad+SSuhtcI61suGFf8qlim2GZtUx1HbWlw4zR0Jt7cK7Ds+0Gzoi/lKdzOOWthdFtyMkaUfsf9
6eUGzjhwUipNQM7iBLaxTyvY+1tahlfH21kup7i3ytUTOZHOqUxLz6T0KWHpPrkv/f3jF01l5aXC
nZTM7u7MxQWEl7qTZImRlk8Tj0/RlRT1aG/XyyOdL7M5nihrnzsCT73Yxq1PJXGn/VcxYSgu7Byn
65eY00OqXopcHmkkiTY4ViDdBk96o74Zff5pGOhzdpcTsiizfdpgKDfoSM/PWGn1eZ/GCMQl8UJ2
3RbJ/MtoZmSJtMrhuSg9WTIPlpEFLb1K9TTvdd62S1jEUMrO/ePn5E9dox6UValbd50mkrm+ky+g
dXN2FXoEMry/CqZ35P/qTlYi1tHq0d3UAPXwZeL5NILl4fJ+rFGF7TmLUKax1i06zwEiHyWSKot4
at641Gh2SkncPY7Owe1yfDjLZ3flHu/G/uTO3JltX/e3z+cneSOB8bAPr1OfqYyA5vVGJybenrwr
z/HpBH1mWfT0nnLc8MsG8rIDOd1ulGgjleyPE4Iavaun/TWmJQJDsve+FEY94ELZkXDEDNY6Qd66
KK5c0mzmHtB1GrCBI+HzW7ryt5isM3UtlVdYdTLJNdoyQWpFGJHKeaLZFMFJ+giEMdO5Bx4flH+h
Vaz7jjeoWb3Thn31oWOIeeLdL4f914j2tt2sZwGPrG6XPu15lmNs03NIXcCnhrLVh3e2dMs1vdTI
Yw+JAOJvrV3V5a1qIlRJOXR+ok2B/ocWVtzC9PomQrrKJyV4i13wFlbc19nFcLeGDJWKnFHtgkE+
IBFWOrdgX+6JLhRPhxeiSEUysPUykoM9YYUV/LBlhbTWhIdntze1YUug1IqUj+8qVDtEu3auyo6P
mdqFeJJW9Ou8xq8TyAWWCcsyRMZvtzH+JQIU02CT/feYOpvGf8kLzxLAloPqp1XBd2bd0BoGWHbz
fjqMmmd8y1G6yU5OXqlfVoqX5f260uPnfewV9XYAPk1eQy1rrD5p/VKH5SvS32pO+ZqPMgOQo7B6
O4DF/HqR64jyZZVJ64kTFPIx9HqpdvXX5xzC9M0E4uyYeU6HNMLCigiK85z+nFGh1F8wTReoNIKI
ZEKjQGvSdkbf5nzpp8M1LvQkRtMj2xnLuT6PUdu+Xfd0vOOo/r3r5Lm76euNaO/vmvNEzvh6Fac3
xbNRybLyGl1EmhKZGMhzUjeWsVJsUrwPzcazClhzGtSyNm5eXl++ZRZ6j32ntRyDUQRUJyS9QROb
WmzpaWLHvfqwZrBey3voe+46CVnEWi8ZmLddaZYY+pYyD4kRIUWtsPUmC+JQ4mk0dUTW7l4laXn5
646LHlcPY2SB4DiBYPXQ2V7+SnsuAryKEWmWl06DAEojlrs+JV+AKS8/FL+cR02SEVoyXShvuUAP
OYOS5YPexJosYSb5F0kY5L6McsqHSHVfcwXluAdZlJN4AfMGtNXUFb2HCqxTkTdCi25Gs/2zyljZ
0+ECAkg0mt5vgOu/j/bclKzxAOoZ4zL9JqBs2H0lTPaNlDfIwqxXhjvpdGP9oEPfWahbKPeRSgfT
98Fp+UbmfM6NRMcPL8ufYQA6nGAsEzeknOBjCtOiXMik9hQHR0BSgIG/XisuIlXyuqxHree4DF+b
zH08uJ+il2nWGcpu6HWgOLwqOHerjOeJLUQCy9xnHRflL5Q9YN7eEIp0rCCWr5dGuu/Ygb9eLQvm
jr1ea43zDuh21kEttaGsSgzSpaMjHUzfYWNxNS2S+d9wBbJqVzRyvgI/+ELlw9Fo7p2qF/Y2yKt1
QGhM+REx4eor5ANl2ey12tynZPv5VqmVZ/KRHsVZ0OxeK2kGmsD+ZeB1bqyVB4wk9K6thCXpIRIC
ifmznAksn9oCyb+9diAlkMg3XR9MF7Dm0iWhFwuMPz5++/4GeY2G6+yWuBOvjSoQ8prlEHjMHbLw
6tDFfrpA7051SPBdkPGvlasJrMW9lHmBIGDEJcmnfzo8P+8ThYJmM5EuO9YGZe2jz44aSLLl1rF5
kKNZ0DlvkZfYM6kr82eyMKGewN1d9t5b5Ssk5Rjs+q5uHb2E32itTSvfXDKNoQLWDH+7vJ9Sb5Yc
5k+PIlsX1MO9I8jsxyBF3rPY+MZJ31FQZ4p8y2JLl2ZF2DR8gZLCs5K+Eb8A1GnQpiZbQX5pw1oa
rG1b6S6QXAk2DmVjglffIU+gTM5lX+q3/Xf5YQwHulGnVX4XrZjfXmkCQEfI04zx3RzJxSM0kg7p
gDtQOO8w4Ky851z3/Jbvp1F45kb/CR2STXrW8qZXKROTYhN7ZoZNOO81rpHZH8y2TOwbECbLK0ZZ
HnVskH/WLV+yQsg2R91/69h4z73ZIMumMCADSASsBvntVVU0ybvxAUB3/FV3TkZOqiYtgOK14bII
1neakpLW2nP5kTS44n6wg3EGG4ebK/WyJbF7ekIZmn0XAIe/r1WZ2JAPBklX2aDogT0geEyd7M2x
ZT7W68EF+ase2aWfL7IQUFVYWMYCtQ2cWzYDU+DCOg5jw6JH3kXnAKIac2zmBP/03zktJYOAIAVS
ua5qTiDkhkrXVXnlU91nIcmKl6sdKZ9HlskkEZEW8vRuQJKOxoHuSCICqDGzW762skhrIt+ii9JU
YrH/eyXdkVDJfUhNlOEAivNAR93hjLIC1wgguUBrsBv4FxntWg9eBKmPyCKHl/fz+7Xm/tFlNDSD
su0vm5OeLbpa0ijIzsSGjOmBVc2ZliNSylbDOTKNa6sBjS99eyr3GdhFbDcMPcBUqA1H2xaNfquT
db5mIfKRmXIF9PfaUM8kS1g5uU6/TUvI1rjn3hxrOTmSRwEqIYp0ZxHJoYkwcLczmyKhSyOZoUfv
+djRy9zI8enwGDNqAS1bYJRd3y+X88vuFufAybqYJJomxC8Q8TTqi388/7Pm6fRd/+GIDwrRbUqy
Jmml/ejVyqYIcXBI3pEd1XSvFDAKSCEUqdaa9v56+BZzeraxDoh2sW9qu37cicxoxMMmiGUaDJ2C
/rsv58NTVGGP+yfcSivdP1uSNcvHiIjUhKTWjlM3rJXc6l4pz+2K1YPSFI6kCH8Hsck6JfSAh7OD
BfA0y3lnrtOu7+VQdj8AILAhvCYfhlpew9JrJAfq5a+IdUD6wUqhdVm4knTJsDUas2p/Ph+P56+x
w9/3h9vXs9ShLnkIDtjqsictn9IZQDYE+wScbUvDkElogECO7lAeSaY12ar2Dkh6kpMkc/TAlfG8
xhGhuzhoj3R8q4V5AshKmQFc+R77MnCl2SCwDIxS9rm7xV0qhEzjL6Pykk3JTbiRt8lTKdbtcJom
E1VLQ+gD36E1d5wEDN3hwyJOdzLZqQ9HvmXvTtGstjWwZYJz0pSwXHP3O9TJ0i5l0xla1jAOAJWp
zj7T9w//+FtMzfkpV5fKDB8YCDnvuczHk3WVB1Ls8fMudTzHvpv2wO9L2atxnWWcmcx1A4dVpSz4
IkCbuyaCuERgHYkwdC7IuqEPnO4n9k0Rr/k0WsCnEwjZqG0myKb36GUfk7C/jI8zFSglfHz/GFsK
TU2cZOmmgHSbwA/ZQXQoZTG5qYnI309J3sotx5Knh3L2ZB0oW5kuIOw0OBtsxWEZauB9Jp/j7pLK
DZ+ve2BjduF3nc/L5xuAdx7bCOYCOMwoQbEG/DQ+URaMfJ+gjVaU9XtfZixrJrybUEVooQxy1C/Z
1dlOyDJfhpo6A+IgKVYkKxsFYw7fMwuge9AWyPBj7GwQux/A2CcNtOt1ygDWeDLXDB4lOi1HAiKc
uJixY3jJNSlcRhN0Mq1Ee0NekYUU5xwEmUaV5l5WIBCQOWG5EApHqyBuruRE3BNyDXq+0QZBimMx
6un9TRYTikvzF2o5pF7sSReipLUJDXQynSIrj4QbZV4JrL1ZS2aWrZWO8xCWOO+UtiZLMA+iYeQ8
ANp0IL+zwTMGmXymBYO/T68Ged89OC2xZapICzX25UfM3Tiimwr6VSgNfdxkusiimxbMKxYXl2l5
m2zeEGqWjShFHUxXTfYHkZfwe+pHQJTUa842rGehyS/WcXGrqgkkH9n1wAoxXehjW3UYHmfrj2Yc
FZg/BB1Jwx2QfyFL1AEEi7JnL8/LTdyEiHjUC08NERbTfRxhlMNo2049XAWQzFiWVRImeKuC/Jsk
THUXvy30M8CbOmAE9sF6bzEhmdBQaXNFqcqyorK/S5rLXGjZQm8mqxHAUhsJWDDe1DAIzmNMKpTN
1TXDaPA5WVwqX8vwlbMYVN9SBDNJNPkCUUh19n1kW7A3oluZB6su+fJzEP+6FvrghHY9IKNGYGaA
cdsPF+kAfzWw/rgd2dcBEa/5vhi/Hd4evhwuu9cdzhDxZcOFgUNfjSygFSBz4QLkUAg1+BiDZXH2
ZDFlkNedEvUNrnIzhs2NUC7YQQ796h5Qlay35aCns/V0X3ALFkTJp6/lLH/Lcm+cAaF7mNHuQJhR
oAV5tbAp0ApycgTwiPoPFP6AQBrPmGY0nzzIhtMtSdfEu8iDAd9RSaGpiXY520T5NuYCFWf3lRvz
fLjdpzjz+XtuXZenzM+trdLZ4inBAN1ARmovgwwOL6fzpVK4mWYEdOU4g47M6lx2AWJY6fc9M0pi
s8Q0NyQPaZVXCnR8SVwp9yGlvePTedLHyQaolzoaPvlqnSKSaFn+euAcqOyVps9z3pX4fe84yCt/
37D5ns2p2HwuN9cmfERcifLmQGtuqT/b4e2Wepu8vz2kacKpT+4NOdRmm6fab16hdo1s7wTyDPgV
ezacv7lGuZU1RZQnlbI2kJ15d4pb7+XBc70howgiOB6mWbvvt3NsAZdjWbH/23ihE5IJ1iLz/9Ta
YnF/S8O2HopFd7fb5fDpXebi0V1kxwCvh4pQYuRCsCEylWPI5JJmBqVJC+mLZRtXqfHsaGes7Wt9
FC1+6uWYQyDyd5P5Hb9zkdbdZI9JojP/2Nq9V+e/zKL9eX+5CAHN/OWw9seNtdjKTt7o7rYDX4Xl
q5Rw1k8zJ1N7aHA2tf5YSkka/zoNnJaYJv/c2sQ3xKyHMHVIet2dDm+ou1L+VU0uJ72omVGVwyjV
r+PH4GonPCYdNRpV/ZRHNtofsbU2aGE8frt2Qg7RgAhuoqXxMb9ODbVGTZBo6Xy5Ztp6On/apz9d
3z+9Hm6jush/93n3tr+uf4wzyuKs5/t/8vB8PO9G0+pt9/SUpxbIw3Xo5JYoo9VUAs4uOIrKl8NJ
TMSP6/V0tmtCW/r6ep28Hh1i26eG0lZebz2wOHYzGDKTxWRrv2VBeaSRIYPPaFdOfOJePjFZb2oz
LK8X57S/7eXwWVywcx+4woSy7GNb+8fb7hSHQaGl6fT3TD3odc7H7y+pHFV+HUsn5mQakhf8vIzx
LrYrXy2dnlbd7kLsTib2j9zs8vTyFKJi8qWtMOP69PKBi4m4NVq63kY1nRaU38dRYk/91X0L98gU
ZMgMNtNVHnxdUL7DYmZ70v8aHPlf77tYa3C+PKWcG3BwvZVraNn0D5cHB+Q+bMm9+zC5y5JJ0ZGM
XeUqlt3KYzvJoOZUaaZ638Lt8gYt3aBem6lXHl+ep0vnoNmUxNdwYiWvR6cSVsl9WU+m9l5/5AaX
A8vq0ZAnMenUXcMGZXOgHz6wwYVk5BfW6gMvzOke+W1s+ACjL0eXt9qrD/Bi7GgZezMi5qbj6pvZ
T8nCvO8/IIIeD5fHinigE4KbtZcGlhWVvD5ltbdoL7BBu3kRtODcm7igHiDPzdZqCx9cW+Zy5z5g
YsZi+VvjwmrYknyLcS1fAp2V+Lu4UyZW6/+XSwOt8RErTlCaslgpxrinVmdD1X6AhEYHLvoKod0T
AxAvH7nhhRhk0a8/Yoss4kq2Fnq/NWYbVIkGfpb6HcY7YCZNdHEsbVI6tOhi2Rugw1yrD8KKFPnw
7ve41Uomnr7b6vnQsJ5sddPB5dXHWWW/vEE6m7luxpf2NrjGbiuZ+5Ztym+u7iSoaVlQFj9d+MCC
y4nlDWr3AaUsCEugkMxH/P+Fh2S1YSidm6SbG44vX6c2v8vglqUaHXn+gQeXLXg68zi76B93AYGS
0B9go3vtA3zLD0EVszEK+F1/BOdbfEsATVEDL8Xj46jj9H8JOL59nr57fd6fHqPxcT7fHo6770L0
JeG5mgzJW+Onf44xwr+l7JN/jHL9T6lP/zd5kRUEJ0WDOdD4en3/dH1/A73+8xJkwh6pnZo+nkdV
xjkZl/0JbKXX5dA/X6zz/P7vf8t76DtuD7vLp8Ptsrt8n+Jq4Azrb0cDfDKLDqcvu+Ph6SEH567V
iyDT/dZw2vgI36eCk+vtsr89fv7+EEd2yoXz+UQkiBIHvU63kR52vNDL3cXKK/XctuYzjWLmT3EJ
8P0aO0qlF33nCKX95bJ7rBIZeZ015DlfwsPnw//EQquHifbTlBFAJqY8jlvI5GF3Op++v8aeH9NY
ltR7rPpsQ7G7eXTCdD/5mmtXtL68iUm9xg8F8Z7ODy+X3ekpbQudTZUs3VNuTDLhsXbVPctEp4fd
dc3vQ82+8yprRI1UPqXktlOekZilVRxRfnoHVOwJT9v0F1vc7tfD001+Gk9CbYXTPVHK60H+ZUuu
Mrs605M8jwT7cNpfbygQ6alYTInPUyp1LPmcNz8X74HzD2RsqE1TRKapk7GyMn7asoglBEpxtXWR
kTa+gu+JoigMzekci0wBD2G2S5iCwMf/7C/Tep8Pz4C0Aqu18qvETLDb58Pjb+PzXLW8hhv4A5HX
eYgba9nPoDhxct2/7k6jTyR1M8iX4jfvMpHY+i5y6md+mPVWU6+G2fGZOnM9ofC1V+QS8jy3UnBB
mvAdYcwMJs9ydC4afk5dGzGDOk+vgEZMpk182l1js7E44g7G4gcicELq/zhxa77Jh9v55eUIYvLO
bBMHwkyfb3kT07RgIDoD2QMFtAiNt6xCRRYx8pOCaiXKoDk9MF/qcxwqdT38G9zHsBJHqsJKBmfc
RVIi8XWrL0vPQQDjLHoBTVPCGlZhldKCRu/4EJNnAFW7LV1O5krUolhoe5LgQPKyGNHSg2Ovpkqq
tJ5/f02yiaV3b6NpLq9hiLnjUuKvknaiAEkHchqKsE9UQNyvOoP5Tm2Jeypxf38Z/DB04DTkRSJk
oZzeiEgDfnbYauHZss6pQElKJQYVe97ly1Cs1vgAW9KNEF9+ldWn99d0jw+j2D3nPwIqJ7Jicejo
4+zFnMx8Lx3kklFvvL+e8B68IrZF9lKnNKvvp93r4RFsntJn+ku5+SzvwOZ7zOJvO2DNeEWuLs+7
7onmAZxJr5zww9v49rfzK5CF1C0jcdhI+tZ0BpC+3ZL+VPV+uORu5uDTYavQwobeJucSPBMdOe+I
KJyeaUFtW9if2qFdugiqXwHj2e1bq41S/NTCfWZLqpM6Oi+JHi/H72+fkSdBiG5IOcPDdiNtqpVy
zSJJiHiXS7Hyw677SK2+Rg4qZFGjGTx0ohfbeKVUIvo1YrASWKFoAJk5XpStC306fwOf97whSW60
abhH9n8HXjLNsNju6Sm79khvui3bhMKUrIpHR/ESs/pspXfR/NCaQ6ay1xeHHe1e908VyTd43iYi
VxwhRGwRGkIv0ciZjZIkBaUkyvyl2coOTQZjT+lKM1xdqY7MGkBtQQFDJ21HEnm4/uuCfJ+eWGkk
zbFwz/f/ej+MIjZSDrhb+th63csdxSF3dOsHWrWxkHogmQOvTBcdM/o+vyF4zxA7MZq981hvOrcc
PQahT5/bAa+iqNVzIsKsiEPMFwB+vttKH7NqhgktXRTdpx2QHZ7ClHZ9yXR9f85NlTKjfNldDjuk
LXXHi8TX6U6v14eWpHs/1CTrB1S4c9RqC4mL76yuqnDzitBqQjvnFtzLfYPzrIIgoi7zS1GeO52n
PwGOM7xZsxJ8hKJ2wuDSTPJ+qyYc41XM9AOulPqqSzXeRqzWqMWZOw4qsbFWJuqZe0mzVfMkYIr/
ygo0lOEcReFS0hTuuo8FfzECUUXHbQkoh2kE8vk15/p/yZUDx/2X/bFPf/z2Nt5a+tP/+8/xTz+l
BX+dzN0fbxn0//m2u+1//a+//+OnH/78059/+PXv//jhz7/++Muff/rDL//46ddf/r9//vn/zEtv
hjIv5aC2AEfob42u3Kf95b/jyHF5Fcut8qfzKdb57Mb7+vVw/XkukRtXHOlRWkqRKdGK3dAhnXr/
9/23268//v2///DXH3/49edf/vDLn3/9808/yVtcB3ET8kzr/jnOU4/3+Os+/2n/61wWOIk6cdVe
lbvVdwf/vLv+ZZ+qL3/txWU6L77CurnHyz4e++fxGs7HkauXTYrL6p7bXVqWLHM8n397f/v7aDsl
cv6vn378NWJah2/yqQP3RsKpc8tv8eShPLlBS0HC6Qb5Dr/FaEusBlpf+O//+OXXn//rn//8x0+/
jByDKKcnFLlWa1OKHIXjaK5hFnG2xmgtTP3z3//wz5//c9w6ZurNjn3bb/3xH//465//8He8trEl
H2Vl8Utkxthm8yozthUZEBPjt1f50Xvy6F1J4dyjN7O15ajyXgidL0kK/R65a2rkcD3t3q6fz7fx
jV4hGWC2cIQW1llQcVDxeAGVJ+tMg1haLvf//vSPv//Hrz/840//9bc///0XyFKaPFvPcj3VF1iC
KCUKOUTsf/nxp59/KV8O071rFtGE8v7+h7/9+ed//uFPSTf92in5FOEj6qldeGn/u8TOz7/89OP4
mJiEu5L3FCZhQMDJ65UpuBMtgvab1/LND7/nYU/nX//+s3zritvyPy/nx/j56eXXH0+jznhPFnpN
bBqRvIFpsAMSQesaSXw6n2NXxaTQfn3eHa+yWjOK4+SCCA4x5SweMq/3h7//f1txhsnMl79g2yj4
d6hNM4g82PxLbdLfhA/ZKlVDrzeivsK6FaqOntz8mmlUvY+PPrAxtWtvlSPwNHb4XZIwngZvv685
LAU7jWwPuImw5ppd9ofZh66p66rZN1/kX/enl9vn32dcuv8/Wi6P53dA1U6WLUAyzy7hn//ff/70
559//vEff4cKUvmaqbe5tN9zZf1H7KhCc8lS3HH7ngzbmk7Z7MdVhfZHrSUbakSSv/jl+xtAFZzo
eDV4xTUbXxvOfNnwWnQ+ToDj+pojTO1Y2f9XHedU0XVWAge7sTVHNTEdoirTiSKEodQPspq2hT6Z
wNKqIQfMrIbd/ml3vSG724nsz2niD/g4fV+zjFh98/f/+tsf/1wzHzz30JRcfvxBphL3e22Fw/X2
69Pr9fYon9k1SOzlMqvUqAPHFjXMTt7dvSORawZWHDkhr2pq33LJHVg+P/4as6jjz+y7wIPOOSox
lQzp4manz/Po5NxD6rJ/TmGwZK+I6/VTHl9ab5VQcb0Y54yLvu5GEr29X06VleaKPV3AJNPOYoJk
/O+1A5N8xLlOdVpILwst801id6Hcryr+6WV/Oya1uTs9pb5D4tIzEn1/2mmGR84dXzaZumllYQEO
Ptd8atr5bTp3zOCeWv2kP4Njz/XKuqDr7bF3b2/76jGNE54iniyfcQqRymv05BXUdo00+uT5sH9K
BIt2YtZVVrubIdfT/mva0tPh+XlhMkC2fbmuo7vLdzSlHch76wjpr5J9PuH+ls6GFpibAd3zTqT0
dRMfPJsJJYsXdzZ/n5gqGjbyOl4LL1gwYiNX9lYSPPHjx+P5lFZC16UcuK7IxKMWbRFZQZWMUtzP
5901r5GMU7BIAJczSYNFIqNL9liijOea/nT99H2UVVGsguU6g95sJalx2fhPKqtROXC3WnqzBLyc
zo/nt+9RRKP3DwLHbYk9/u1oHlxHvYm2NpTk1Jci6u04GgRVDjZdeb5+c/mT8bMI0P23x/1bSp8D
0ly1MXX6y/7bKNMRmRkDpOhKqEgQK8url1kSZP00nfhxd40lPzlXCSwaJNmwKML0Aul8o5u2CIiX
KkPoTri/eb8j6aaU8te5MgltMwhUcsddGb8HjNUD6yRy00j9cQLxeNia+OkBgUQdn62l1KE99WYH
Kl9aKt030Y4G3JEONZsmPeXyhLGR7miMPCMeCAJfPZ1fy7d7zlFTfGV6sEAOUY1WkWdeleQwNS+e
FhC5PXPI2wHZAsh4bVIo1gDDPE8iSCeEN2XIPobiLcfj3Q77azbekm0eaUshRnTCI0ZKSNQJiht7
EmHgFS3ra4waJUqMiu3mRU2Sieo6Gl8tR5z7+jKvVjgvxZUhDwYZlZmIZlp7vuxesBk3g35pNbtd
rdFMmQGke6dgKyGQBtGu6ZoapdY8IvyemxsZcZ6XCORFL5w6cWMOKzcYwG7daOoa7TmPFIscs1Vn
npf20XatCXsjyOm4k+vbMfZq/XaLQ9oAwXustjlrc/cYA4LzdpGKtIIEI5p7/CO+dB2kYxZubKyV
/Bbzn/eXy+rJ5+bGp/3LrmK+WA+EbcFbObIItPmALYxxP4WrVDEORH6lrBYrsFd9PN4AYrZO2N/m
OqMkiH96PTw9HdHVudBoczgEDmwMb/MRRZxskmekjJuQEEpCMXEz5UelYE8DAbmKOTiKwy+H8/u1
0ST0wMrHAkb3G1lX+FXUEWoQVlTlQIWNtHPHWyB3oEHFVqNQW6FMG+RA6ytaSWJRblsu7xITehHv
Ss7GHVbV5uJSq/eO05r9jTnuzvsbq6Ajril6FQvsiVNE9o+xKAXsRrpyHkGVW4NkR8O3cfos3dY5
zoC1JWtHJLyJyz5Cea5r0XJk4SgD90/XDFSfnysALoXu7hiZvPQoceuWaG/Im605FgJhV9h6QCAe
FVfn41O7T2DURisZHieB8KIB7PYhea7FUIb4uifkR3lBpG41bo9seC94c0J0INpqlSCBB/5h1tSz
jQzhqfAhTYq0KIpaEKJHhoki2nRYyiko4hlzYxrgTqeBhblVy3VlYJTkjW/w5hoCYsGjkTtCgNEW
4ZSiQ4jZevTqOYppkVfleUxzcwqLTiEhmEKUsGoYWw0l23ItHxRs0mVPb767Xs+Ph13aYzUIo+Vo
7dY6q7jGVmPkPFc/LSvWwnzDgOCz1WGvgcfOVaAFzsG9nW+7Y1asyC91Vdf5I45ep3kKjmLlbXe5
7uOQ7Ohwn5/nDSO/3raYE3WZbntBahUYw+3rGe1l4E/WaNnsLsg48woQyoqSIhhF0hJlPKSFm3wQ
wNZK9Aihrqrjb28GcBuhzV771sjHyggpKr871pis843EVuUpEfOOt//SEEHXYoiaOHC5OPD8XEPg
RTR4a2d5pNgUsCJLqwgppwH5bNEMiZZRJncsZ+yAoNA57F5Duai7shboNCEqGZN7SSe/II/ISqg+
eUpK/bfP44rV+KkEfxUC7fn8jmyvHoXBaeIBMk47ILi2UYEWbBrlHxxT1HV8jP2/3nfHf4/Ejzyy
QQy48sG6WOsGVLkTbryUrx8IhIhX1+KQN5OfkpOwqLmOTDUtu2mzMINhlr5BcSLgu35K61rQYHJ9
CTCp4CXDxzVN7LcVOw8AJeNwVDpT0Wn/tSX3qOuwEb0BnZB6tjKZEDuVNIsALNzjXS1wmkYb0i1R
odvnyx7GhcJHEfMVU2umPSldLm4wJhVEokhNm+V9GgAul0kYSBSzV/ah4ANMCzStaXM1Q0u0xu/j
rhl+hVgpwYFL0iWLvRD9iozLQcjK3FpK0HazmPy/Xs6nl/lVcJBLb1AN+8GI8vIqaL9DV1FsrT+C
fkN9NPh5p+pawGfJ0J0k2EgF05+Q8+OBYUkAqSZR6I2AV2+z+ZD+NKohdkotyMw6NS7cJjKLYZ02
MH1QUISdv57GR64n+QbpxgpKue5bYBPtTS0FbHzD/Zd9Pf+U2DD3l7Xi8LVsO2qneJrCX/h152i4
x1bWMACuyjSacI809ghptCCot9jZ41awlW063RhanaRIgwswaIyct+Ro9R4FLfP1aHQ9KLiYPzfo
c1eFgR36XNw8IZMP6BGjW8zj1exusI5NaIKbGuTt0OagzMUCNdfYqKYsifWwBU6H7LxOYDg24Rj5
fUpIgFu0Swv/K5RBvX9+ji3IvlQlpJiVLLnvFTnpPJKTqyNRW8Yg3HxGd1I5N1hEYWS7Iazfq16s
05lyMtszT02vgAVNab1ZVhrV81q31JYzZlXVl66h6O3aZkv3HIh8nzE3LnpDMeKuB4kZZbkV7EzX
k/5JC+f5GrVX4zKr8IqQre6lBO4WH9x3Ynb5cmuxdV4FYw2DbIjNEG2FqrQC0dRrA+Rj+ubM2nqG
aN877FF9JG+wG1rCoyziO3sg2R9BfgjMuGhMedf01AbkurQbVgYJ58XmawhwmK6DEaJtzBC9B8ql
pxxULTiTJHWlcgcJ/wEX5q2GaCVY4QesiXZPT22Inx6kjMrI2ZRqM5Ge32/n50/RmIBR1pVeR6E9
CPH9SvyRBPjusRNCrkhsiMyJwtw1pRbqlYgN9YcBkGk26D0SqEObI7o7HptwBVFAo4uqpwJYIHFm
1VG5bqN1i/lN4J1qAopHOcmci9BWT2wUCzU0V01BrNQ1xG+pIZVw4v3XmpAzkuvAoSy15GwLHAjC
sCj7TnVtZbnoSH2t4nJijXFX1RpLXXW7kX2u+1pZ8Mqcj+e3wx5mFHuBmT5WDQSRWw39iUVyNxVF
m07KVdqqllY7yPR9W25frV7fCUQvVl3GvttXXEE7mA/ZQufnBO3VWlWoj0Z0t+GmluT+oe3V0T5R
kJ3rPlHNRxhMgx9KMBeYF2yGJgx4tssnAKfq3Fo5t5KeGSVX6uFjefn4nCJYUiJKDXk1oQeyvCGN
Q/f3scPUnSf15NH3PXmKqq0kxyITC8JKkQy3Tbsu0feeoBm4ItsbGmAzpytcju3jmJ/gh2l/sWWa
BPwqUkW26Rgq1fBWNsR2rc4bWlql/f1nCUlWpOhj09RQLpzGO3JsG8faG2p0xp67dCEvsHJdXf39
pBZSirDjpqPZuAFy2apDO3B3C6TTzP/+f/7yt7/+EodcTO3xpABNXMx7tjfissTPecTEvBKgydCz
DZ/TSqNk+cN4QfMqFqzilbSfv1zGB5qXAMRoaWNCv/Sgi0tMX1tAKsawvS/J10qBzy3tp70qFfJ5
GMCPB1XykVu+/nlUao9zw0OFXpQ2Jl6TDckONNqBFu//5zSoZH4AD3bQsT3dyA4MIG/Ts93MR764
nU+IlMMwSC/3n/tdHLY07x2wt6WStef2rpRBz++kB5wvH1ycUWx34vj1LFk0uLnZ1WJ+/I/np+/z
6QH19j07TUKQBgpIuWB7yMc/729Nr7FSYyRMvdnPvBFwKT4YSSz9eHp7XzgK3Irr2GfZnR4/ny/o
OkNwrDGyTLtAZx86dgIHFWOIlIxISgsdg6878fVmKQYY0VCLopSB6dX+tD8eWwSZsRI//3X3aX9s
0G5Oe2knlCN6xBFGkqbpLD+dv85H8Ug3qppSMUApWtKlO8V/7h/ToMdkO3ZO5KsQ+VqJAn+kyhhR
kg2Ws3bo1hEVbzlvlWh/OeyPT0SKIJ1MLRPHaUQfEDV3nG1LhbJySCgr6XNOpDokUmtEFJBapW7M
sFQhx6//8el/iGkBHtM5J13k3/a3XQtD0ra29p6dGiyU0PWinUmW6JFyIgOoNmqFmqmAMHvNWolp
tJwBpDg4Azf/p/Mi1gZktCtJTTec3vRdRbgPSDWEXqKjhR0sYoeuYiAhiTT3Hd20l5a8FeRnmE7S
j39IgrGBHXolUuJMxw4Ze6FipyOzxtBBAKVk3HpbyGfzIilsV0Ec6a10l9yrIMY0ot3x4+vuZd+w
GTtgDlsVNlR9ykqrlG6QQ26QaHwsnIIsDx8kYfuPN3qfyHL1rE+exJRGYsrUvNgBae0wQHqYZRTS
daqDjgh5RUSYGquKkjA18i1tkAizEBfQlOxEe5ZqT/Scxkm7+H/ez7d9wxK+YxGGRBFIbg89ewH5
uw59x87UIi4QuLFBpoJRUR7z68Ert5u5M/cyFknoLkhcQCUjMv50Lz351hPSQEx76yBIRx0qhRyq
voUvkUHuB1VReQNSWkFXgKEB2S1DJ8rkOGa4Qax7PbReJJIG3toWExTuxNuKEaYQ1GMVe5OErRAv
04/XNJHit5GGpRBh+Yp/PZx+a2ALR4QJmbpLjUDEVEOQPKoZGEE0SOcvbVQi+tWh1xIrF9AsMm+8
cpWdqx6Bi9pVtDKyJ0zHjmaZcFVkCw1eMtlLQwRs3QWFIaHV70H357uK9EFfz9mEojBe9wCYx9Pw
zaqTns6PGMwT77AwbD0ybEunteexUORyhI69v3Py/+H2txMKexEFQ96GDpXn84h+yXRd3RVOexkb
QVJXiUjQL4dbk+AOQbf6FwgQpDK03MgSQzTIN+ggqET1GPJQZKt2RpSQeeRFOfy3/em94S4ddTPK
FYh9F5B9J3oam5APEqsETdkQVgsSNLAmxcRT0Lh1TTgWokXeoyBWAPLxKLZaGtclIGiRf9lJZExN
AUQCveiibV6wRy9YA5WQWjVUra5ENL2gQS/om617pNXI8NsN/W2XgZH8HqMw1ElA+s34mpGBzCQz
BGkXK0tDUM2JPsI/Ly0C2lGGLInhL+dlZCAkJ6PhTRJt1yERbz6QWYGM/WAtiD8ihRtECU3DX0i6
9aGZqJCiIcNwSQFTUneHy3gR58v3FvjXmRpkihjNklmCKJqMkPdBdOhbcn96mofERqJUj7w+rStB
XYNguV5Uln85X15bTFASVCaSapKU4NoGOSfln7vL7uWye/vcxNqmjD3wcRuU4KAGiCvO3IgE5IAx
hIYUl6BEjHqhIhRD8arNIUNX6cUcnTvGRtkVRjcDKghWskPFELUWufS+NfMMGVNO1ObEGEXSyWop
OFUYVBDhteJRyqcNyNcWQ+5bPxeJbBcas6lQKp6v5ZEomDxAQ72y14wI1A7iZfznTy25A8608gkK
qHhraq4vInAec5igGwRa0Sjh+mECuxBINngNgIKABL0YUKTZVkhXuM5V8y0GFGDe6AjFS3gUhexE
NVvkvWCXxEsar4QLkUWvVBPkiGxHr0U2/rE5oTawaENOdkBaX87lLe8AiSElRiJLoepR2kpzrBxB
Nr4XgWOL/Hxva8oeRVx6ijfZZYqSFFxH6J9Rkn5aRSHCSZwYhfrj7trimvXaV6SgQldhCWKR7Pdy
A9S7gzmuXSuWiWSEHA4oA8IIxaOSzjMR/mub4eGCFw17yuLobWmEMXA58zDMOligLjxCUIYaQfRI
ORMXe+NWFvYBWmIb3LgLyXjkUjkRayjTRJCU70ylXAHBNaZrtX0hMh/EbKhSyiK97YyYWYCcocGJ
gPp/jp+0ZIl7UUdQxxatwEfGs2xHcRFeJ0yEj8BXVQbjSBYd3TLiWFMLBjpEuBb7wdT9Q4kJhsWw
J8MUmQadrSAZHoGMvG+S05oQqcne6uxmogCUqYXsEXZjtG4zxCChb5yZgZAbzMLRuiZnDfrdXsz5
XC0HZAw7sTClyJdAwFvoGzL5IbBsNLeJiVYRzC/HjZefRYfvrJTsUMR5UPaZLOSLSggUgJf9gFlc
oKI4W80HRAGW4CT7+x9/PVxblKTbQuC+ABBfW6CVwUkij1IQshxNDzIokFdcLQpE1R+mF8274vqQ
hWj7ajUQAs7VJm/AU0P1Py7n97cmyNFVhBBStUZODeb8IJQVakQs5o/pKVssXuMkJ6J0bRGQrHoJ
mioDsMi15YvTCwMaySZtK4FThUw32+smuY78+9CJXjUK2g7EYYmiTcNKAAQYhapsc6he1inJer8L
3iIAnMZmSv+LCidU/GkUdAIbS6WIMZ48qnsbB/GoFsszGp1za0TI6N4lRupuqNW49OhRe9Uc9UQ2
ixUP87fzU5PW2ywgJOwi7zLgHAWSroQKWZUTqXzjZSIzxg9tghfBYVZMASzNaKTONpDaNkDSkgE8
iFkS2wtBRUhyuX+BlkP8YpAYtlQiiMycWGlSlEgjflObQu0789KgzExajOX5bDhEE15LMNBf9y/7
01OLfSzjeXMqHDLRvJcs3DI3EZkDuoeRppYo08BiAjm3GUHUfEXgbqRiKBUGLaImCLYbrKlVtiNi
sV2lohgxrlFsbfqUS4OEV/At6XrIjPaDCD/QbDlIpa4pGgJZ1Q0wFXtjOaErMaE1oRphSM5x75mI
D2alK5x5sPw4cum8N00WLDLdqBDvIJQGDeE+VGp6FbI1rBILc4oEc6RKCIVv0qMWYkBNCrQX3ZmN
kwgrFkXFWugi5Gd2YtYbZTMEZcu29KzNEDop58zNXyMB1dsW4wQSdXDSBv62a3oE4mtvFOqd/Yvk
nWyrEfsXZsN0Eu54x1poH8S8iBEjzffFQSVHvWhF0xVQzlYvBk/LCAsqm3JiEc0PxzYgqHcOiuzZ
OUJGaze0KEKNyjBIvDBaPVpOsEXqR/uPNCtCoX2roRPfUlfrWUAo20KoFs/6VlcTJiXaVjcP+iN6
kDLRFzsc4aMutFwjTBQeWI7PZcbIpOxZWpgiI+j+NXv/yfqAvcb6irvgEZzuRMipdFiQltOsGfcU
BQGuRBMlANWOqOiDF4ak6gRlpFHQs6w9LUIZSCvQeo01w2sy4aG7PcDMjz/tWrNnfa8rPkhAz+9N
SwYxNJp9kKtYUcJFX2tZghw3o8V6rcI465Bx5iXRT8kPpbduO7cIpZQooW1QlTp0ZGobpap9PVAN
QOhr/isKI6taCBupCaOanFgEvIdu4/Q5gNAiY2bQrYoPhdW90239KmFPjL4JhkNOdcd2+ZoSQWAt
vtxXA0HUg1OSLFtaRSJVHXwT5IfUgBJDT5sEceQ0epEKSuAMPZ/uGqpIIabM9vmYjAekS3XfUOwG
LSYW88uJLCigbGspCQGFaXwvupgb8BoBMLKnTiU5UuR9rdUuahFkaEbDUCTGFpYEtKHEjjyFU4YE
sqM5OWxNmkWpEYa1ZbIeR/auHlrDOiiJVeuWaiiIWoehEQOEdfn+I42aYNWlsZIPUgg2FA5RooGx
TTOGjUPF5P2//thEm2LCEwFPYHH9IIL6SL8Pplayg7jS6gDhK+KIItmixZx5ItKRYN0mvMCseWQy
Bde1AJLQYeo0rte7tukpR53OVdRkYQHVlAgt08ZjkJas1BWbynrEVL1tacMMj9+Zph4qsBut6PwW
S6Dg8YDDdBvKQtLXiULvx+uPcXhLkzOs2upjEH26rpZEhDjEKt9SV4zudAsUO76AAS1Bz7BJPaFL
oPISO4jVBEW7Y5QRRavPSueubCuKMnlUDVwYzQaUlOXkai2UUeXEqMG9lEIUGcTK4jJDA7oFA5dO
MEE8qMaJ4oclvBSdkqaW87614BPmKxuRL/+LJm3C7vEGmlYbSYN0umWNtMnBQYkB2jZVMcIsKDku
uDADCmx2qlYeg+xT2/kPiGsI+YJWGJsqQvSoTuyBVSQyI1U6+JY6PGQd6SAGK1AdwOD6tiAWQkrs
8IEHQdBPcLZWU41QPC+G7ctUCuT7OduGXqCIhxatmrKQENU8y4XCZWIdTG63GBw/t3jU3vWt/c0R
olMput9IPuRIWNc4vgGyvsJDktZVYBsfCneUJkoZ9YFmtIL5KuQ8SEvqri2NCOG3XnFiPUfqEHBp
FHwRGvBEWkXGP6k/AZEb5Vub6OFYUN/YEBASqty9qyQOiKd1LYY48t6NqJ1KAQ+TloOURkSyT6Cz
qWsJ+Sh/hu/NmyFVRJdWJqjSG4PzZkRPvxTEsE6tOoAM2XpWObnBN4wMDjCNbSNzUTaF01xtaw5p
oCJFKwYUOFMNGVlyxdTWVENSnyZK8t3GUCKX7W1blyaUiBbkfM9GL8LZaq8pBTuNDhXze0AYfQjV
YSGIFUhSTcpHgamqsFOmEy+SeLUof8uKFRClykSvSeL+xKvNogmZ3aavCUQU7bFy3xI0JmbYtqW8
a9LtUZzaiUK8NI1RZq22kkBorpi2YsO9xoGUvdb1BlIQT/hQaANJNeNbbWtUueJk/YhqNAYvtk35
4fClKfXQipFupE4GI7cq2AhzZPJ63ZJzA5sdhCA200IaeTDuAzgObEEk9y9Ygv6wVbHYB6nUSMjs
Dz03wCtLEyTDbN9y/9Df70zTcCCkk8PGvuXFAQrr6Vrk3SLQwYrOD80jRlzUiyFbauMjQM2KyGRp
oyKrwHjR+YOF8L2Rdl8MsEHuVtfVKs3QA/CwbLaO0cZN1+JuoiWcEpOeZy2OLCkb5E4zSGoN2tXi
uch8NEOl/+G5qU2o123l8vDhP1K3BEuH+o8IZBinNq5pog46VtiQhTxPAEWp1dDWjgwlJqquyfmH
o3IdW0OUdSRKC6bAQ4mNlQSCICHlm5El9CCypqLRcgRxGzYCNvUJQcmAnWpoUQIFc1/DxBXSbmaw
lcRYi2SUqc33gFsfRF4qED2EHKlN8smds4pKMYz2tazgHoWP9VBpoTcgOQsCx22zHHt5cvusX5C/
ZpsbOUPkvhfRBmqeoICd8TAO0ZCmHjonea4liom0tetro5rQa3ambXwkcjc6sUXcnOOJqqTrc1ZR
MGgwTUlPyO/dTumiqa0o5CxP/W7olGV08xAMePe9+0CzIdhZ0Qz1TDaYDeLEWoVNmjVs6zLI1WlI
LduaREcZJaYXm4puPXeUJuWNmPWG8NfB2VpTCQ2nzMm9OZozikJztA6RkAptxjMiaCX29SlPg4jI
u5ZaeaQjgxIvpMh+gDMgbEXHK3QRZmtleGqbIRhKLhIppk9C5dg19cOGIJQuS1UnrTDtHzbrCK0V
oqhZVt83NTqB16BqqknBFLtO7GVZbgEhywoP8KQF7mgZMzQvgy5EHoNWIjIIpjZiju9/NTYJDKGX
BGaBryHjbeiaBjZAu6HWJRBew+BrjQ6RA2GVXAlWBoFh5n7XNP4asZmqRnyQ7edEsKqtNq+3Xi5K
QzLSDm3pA7BVpatJB6S2rQqimC5kLEKrVGhLj0H+gxcpqXmEhGUBwwyyIsSvF0HmAqtEKL/qK64w
Ki40yoBOMG3Zli50TQPXYXWdEjMpCpUNh+qpSquqgLpsexmVazN+e21bKrRg9xN5YGnhyyFy6GrO
MJIKRh66TTEBOJBPhKVoNRZs8N41XQKiyA5MQUGgnqsNVByQQxtES6UEdlHcT570WQgElLqgXNtI
HDhnVSwNK+wLtEQYWlwQOBBHDmgsIgWRohKnEP/lsD8+kTarsKG66NKVr4qkWydKtz+8vR33La2y
ejkFstwHWqMTExy25ZJwNMwgD2GFnV90tV4R8YYZcFSJBg0QVdlag32HnFLrmqQTsjc6sW3YWm4K
68hqbGGQxu9NxexGgRvTse3WSEMZOIS3FWOBuTXa1ZIuO4Seg2YWm4p6tAkvBsFolSUqkZRHfC6Y
F/SeuoqeD4iKvQi7lyYbSq+gjvmmKuOtMUvGhWpDbxQFor7PZjJLK1BmjZT1WKL/MNqtuVEflCCR
B6i6trotZDcSltDl4LH7ekBoyYtNxQrrA73o1qEIrAUJ+4q3TQVE2GWn2kLsyLGmzXO6MoUMje4d
KH5felSkGQCsuqrl1Cvk0Vklz3ZC4ZjB2oaZqqiyyXVifwzUg3NwQeLiuzgQ6m4h931crg3h/2qo
2ZqwprkT218unyNJNmwiqUyfKhR4oo1NhhJ+QEpkkAO4NIkBPbrp6m11YCjcbrxmNEUAFcYPqhpC
QsoshCrQjaCsrtZHFkGZRvUtk1gR1zs1VPoCoLRXo+Rw0cYmQkmf3tUsGpx0LPa5Wl4QERLVXeMf
eyW4vSjfksDqG/1XmkVoH+ojGWvoTYOtoREevancPrbUgcjI7KoyFZUl2L4TMzgt8hO9ODu+NMqQ
OujcByqUEEwdXGXCyLlpaowTi3NKaxnJOAoPlpZRc7cGKzYOb5y93ssh7hkjQ/7jwDbf+zRqG9xB
XnzNMuyG8FmrKiIe1dObajdOhXLqre5r5QAwlZ2vb8vxBVQp2eP58i2M5Adonm3ya1DiqxUjjn/8
qQl3qjn+Hj2g61vaaSMV44dQrTJElrmMvFBrC5EwxQxKAbBQETLW+PScwkhFN0jaKW3S+RcFjZ4v
OFjDvZHIKOQq92RerGWExnpfsZUGZKoHz1XVFIIAmRjbeVVy0zWkk/razCzUzcrIUe9SmiL3WM6n
IH4+TA6R/dwiwQiODmMTZT7trvvncyWDYrjvoRG/3X8Zf/Oavng6XN92t8fPf/5S0e16YO2cw+lw
y99CE4vtzVD8NrpFPbDpB+X3Cn3Ppr8+jsbAbZ93D/SSDmwi83pyOFK940Jd5a3D33ZcJ7L1t+Gp
2frM8rc1+m024be8dbT3gR2kQ2/dol9nVRn9Gu6dRY7p1wZ9rWtfo3v3bOeC9c3gnbER+vLNAvqe
RQjW34ZgIBs0mLVN+v5Pu2vl7Gy+U7l/h25+4G5+3T968yFUpQTce2Ajd+m7X3aXl33D6QM3H7Hc
AaQ7X3/9Ad2ArnK8gjdo678PefY+PTspnOOocY59+uTxfNmnP5zOT/vD6bq/3D6NiuwiDkrvSa+z
WGxK/LGn8+v1djmcXuKQicNt/yo9TpKcEw6Y1iD5Et/fxm08nw/Xp/3l8GX/9Hw5v0qXFLOeuqmT
QFpnJZN91uTX/e3wtLuNu/r0ftufrmClZShoWok818Rw41LzH98vB0lqJEL3vryeLHHiDV/2r+cv
+8fPh+MT2sowxSPiCkMUW9wCErTck1S7tIVV8GwfWQrw9KQMcnOK+Q5G/jtEoHB/ejzHMgP01nML
0M1S7FubHrz1ZHgsb93Lb60Q7blQvrSb6ffw+pYX20W/4LJ/GSn58l1isp40Cd/wQrrp6/5f77tj
/KMkZnoC9pSPPW7m8Xx6Pry8X9JeHnfju93eopW6v+3FLpc96VC9uSb+uj26bs+xVjzP4/l13Mp+
Joa38/UQN9mDi/LWcbtazvk4vt1oRCeH7IqIKWwezy67GmnyfSTuuBB6snlcLU9G4yLXx8/71918
X/CqrYeHOo2vNUrrx/0VCZ6u40ThdKLb/tttXOwGgqA9mbu1ocPED9fDUwc+nXtibW50pLjz6fC4
O46S4hXd55xQnL7vCnlHWECjF/FDwQJqMjOezyPNo617rTjJMt7V4fb9TkRB4U+oKvqZo9AqNgG+
9ZSe+ooKGm9CAdXqfOB4jleLHVKLrAxAvDsg3h0kIXfZvx1H+k4aCbH/MOiSSFShTnZP57dbIhOg
kmxnuYteaBxIDWMGSSdThYh4PWgjXelIac85FwlpdT8ojk+IRh3/GF8a61JeB0aKP+yv0OSi6rOi
hh1Qw4rfQhRUXz+fj/v4hw6ZbMS6Ifso5U2P5JVkfgrqe0DqeyjPYuU70QqcyZO3dYXBRUw29Doz
bs5I0VILIFtiHvHM0Gg8yvNu/JcXndQh689yRskiV7+9Hr/sL1cQaE+76ahQxZfbocslm6GzKka+
/5C2nsepLI/kWcO8Q4a5Zq6Fl84WSWfWaOSpDkl53wGaiZjk6KooJNg9a0xFapsE+8rRDnF0x/sK
kxm0PhEST52RXoeaERqZEQHpmI/YA3OhECPjxs1kITPx49fPo6+bGQrRMBU05VNdS/ZGfuEwSOy9
WQSZ9Z0B5u9HDrUMkdks9XV/TEJ8/9QhNdKzRMPSHtIm1E9dL5akB/fIdNuoRGBuuYBUIiGXNRdr
ayAhf3vw9kNaTRv0Lpp3SzbGFhJ1JghaNq9x2Uc9kjgSLDKPS9gsIrpayNGm/qOtO+0KPLvrteTZ
Hs/n397f3i7758M3pCAHrQtppRW/ndU0hO4HRUj6Ch06RIeOo+fxkh9/e/y8u+web/vLaWTN3fHw
7x2a1ZE2QdWLIVdODdYmREyJipfeN9S81PomOaasLYFUrxXxGqIyEY7hyUb6BK26e/sV+QHGsXCY
AFlCsgmdhIUIXh6SQN50SH2uHI888jm7vcWBtUCsq043m0gOraM0crpmXlguCp7NsHYoQYgj/h1Z
7HK+JJ6rWRkE96DxmTunGG2qMw0AJKLH4IJkVVDfBQlD3v5jH6tH9mxgUYsZg0GuhgriLVD/fkD+
PaurSrcUwWg0ErEy44JOIATN9ohIr4XDhegpGAn2pw4O8kJNz8mAO6QHLUENBxB7QE/RixGUw/U6
SyGE1VCopRSMhYJHIRStJBuBBmEcCsIE7hS824qow1hOqd9JiR5p4E7Ev64ENQcmbqckqHsT9EP6
yrDo5ufd6em4T1IT46yd7L4T2jTIgVItQCYC2gdvpJtcDQjoc7ieE/qiTYzsWGtaXhWZQ8pUonzU
xIMOM2tXETcMviwrOnlcxSBchXVtkfmLMGMnot6SdYWevQ/NJn6PXiysF01SIu9IGHEBAivXJRDU
MvgBeZh3UAvYjdVs+EvEIyA/iDKb+GHIjAii+iMLIBs6eIiELQHchMJCbKXTzVHcDvEEb5Bv7UOF
7EMvgspUoSN93Jtmax7YaONhRJYs9DrSylr0mYrT9Og0ohahYhedQ0FwJRt819uoF3fH8wkHhEKL
nQI1mmGhydnqRr6wGmTf4y7cgEjMGCkEnt91WSV650i0dQHJpTt3D9G9Ne0ovUEI5aA/mEeBsD1P
gxhrVQ9/VZAROlVilroF4kaaqe85iIaJYCkUwWoPUmok9mQzrTAWkVc7WO6m7+xuGHIKpgVpRLJz
IDj5UKikQl6h3JDeApOVJpigNKXOIZG13gayqPyArM0VYYJsSd2q1XqRgXKUbtEPVZ9fQRPR8blb
QiQa6Xvqb5J6Ky4cgui+Z2Ou2/QopKuVb+EcZEYNjs0cE9JyYAS5k07D6AUESnRS9GCbqIUobxhg
ttekMeEKvuJulXofOVx6kCKUd/SCooFGcRavmLwESZh3mO7DTuDFzaDZGxqJNuqAwnlDYLYhseBU
PeY4Nx3ZNjRGH5lKmY43NlHWkxqaMyA0CrB7MYCyUa3IA6X6rJJyrVEaru9RWOgeUh+QjdVz1rgs
QT2SoCyAy3IEitT3FvsYhYGFNCYVF/3GMicmCHKzw9AeBfEoCuIbggQozBCImxGKlPQCX0cpRdpx
Co7nbJT+JZAfuw4yzbyYK1WYZshz6hUfMStzt19o4jaMAmuMWheUhyzXrpeSTZiFkPzqujajD0n0
oJuCXEhMmOCRW0cMR5SMQJO1S2OiQM4QP7pBwofuHV5oTVvHLzTJzgWtvELlrdncl4oLB61Hzfga
95EGi4Bg1axl7IACwK0JUyho0VmYHz5aW4sZijQn5afVE+QjOSjyb3Q9dgBD9LS0KAbJVD/UwATo
besA8nPuUhFQIi3l0NUrk+qwkE8WggxY3oFKqKqARJsoMUsJQyihikIbhc+5Br/GFxyJ6eX2GWfM
OQkjobF2JJJ7NsmRNwkUMgmUXLVxJ8pQNaAUvJZMuIBMuCBFJgqdjHQfze0iZoZonSJZZrrmgrOR
qFFkggYejRwUR/esWxPyULDFqxabFNYWBhFZk+BM5GYZj6ou758L1YcYjfJzVksDZXGQ8JoYQkLP
5AMwEdaCQASG20GyUxgBiOIUpr0wCTpWNKy6rjODSTl8f0F2hdJesmxpkAJBSsY11Q+htBIzQFpb
6QMlY4S+IVmqR5mMTreUIsF6OdM35McgygihIc6JDIfQfUB7oKNYD/IxqZmHhMjgQUCuDR4ZbUXW
12FtRXQznWpzVaDisfojigcZHGGQOY8IfKRReZF4n6UI84+69rRQlODcOe44YvIMuhn+jpEeQ8/O
A1l3AAliBd0e+jLIiRtMQxYEqqoNrqGgF60QHGsT8poHmU2ua4LQehTF6xDkXuZWwjh73wzlWoso
2KJcpyj0IorVoN91Z2A4bWVMVOYxBATmrnoVIWlbgoO41YDgJtbQIPVEyMboFUy9ERopIK+vG9pT
cBBMY+UEGoK+ophcYONgZW4yioYUOYepG5CvRE1hGifrRLCaEgb3jBgljKXMsFzfNGk1JBdCJ+fN
kDAnCio6qU0LcRVgrgMr3cpCasj/ton/Uba27fyHmmEgN8GG9lY8FQXivEWmOnF2kRXlNTI6iKiF
mKhhjcvr2/FwK5qW4PLPIOE+hdGPIGPT5DdAs18r2DwAycJhY3gFToYhSgsUNyDAVUHt6AqNmF5E
ExlhmxER8qIp/Qj/t2KBBd0DioJ59ha2vjSqaNIWB3cmjAzpWQpn0ho2VrX5Dm2mkx71LuaKcHqj
m+JMyK+2HRsjZ0QGgpCo3BlIWefdIkimuoAgyLssD+Q39aIBTCIGKHThdYvtgfiWxhxgIAapyqGp
Pgvug+ZqyeUfkO69k3GTlX2RIebbyxI9Kn7XPZ+PdBfQRMkTJPvsPtdrznFB7R+KRmh96rFb0dnI
KPNNzhqs8nWhPfcCLkS8rPuOUg5FxDoppHon0GAurIgC0xRxpO5Uh9MTCqcK8Q3V3DGgoQwIGRlU
njmgSo2NV49sCackLUoACiTUgm4p40LSZPChJfsD7WKgSTXrQLbH82u6DpwIyx9gftKn/eNxl/1V
6Ad5agsYMZyILJq+SSSiYk1vW0xbtInAlwDxjjYyI/jOUDyho3S7wbXUVCMAzH8wKIrYRZu2/oCQ
UgYjaXEJ7UQIoYQ8SbF1mIPd8fDyhNukutDJLkb5sPybyZoM3Thlz7KdC1GsyLN3Si6jXvkSxbt6
35Z5hTLlAitn+bQVhB6Z8FHaQQFSPkq79YBQ6oKuFa1yfRiQwa5VWx8Gh9yPvlmGGaT35RJlCr7D
fg7dB58Lue3e9nJbrmtDLCvwAPxd6gM6Ud/e0VYhwMz1LZWMMLLB9/tdujwgmNya5lR7KDD5eswS
DEYJmXbgsbVZ4AqJg7CuoW/LTUHwjHVaMguvraFg3XW6qY1WW5jbKRRu3Fi8KK+JFhOQ4Q0FItDU
l06blsYWCBEYtOdsRqE4B/YT9XLTsxVOQ1uxLMpLmgYgwaRUQzIlMmIoGkBRMIZsUUqVU43JB8ji
7PoP9hpAbS68FYXUhxB9Y3xbRyioGH3fpFxhzv/AJhWX/DMHcSGcZnE92cQ+yDDTXFYpbWECk0Nq
DRMh8CtmRBeKFGEBemhqk4SWUPIuVnsAadBBjGPs3t72p6dq3M1r15gzhLh/GFo6HSFLdqDI6B2O
MUsgdJCiwV6ek4UbAcDmT5prDMKXd6Fyda8/5LrC7KNe4ab/cmcWmIohIsFSYxb0CD2r41HTGFid
pD5ofEMi7XVDtiFMh7ZdU9tMYg+hJpxqaClnh0zTs2gGmzyA8IxON1qciGWsmBxHcR6UlO1Y+GwG
mlEph9aoqxfRregAjjfl2Vo4pOg9nmMxY5rQBfhArnxUEchc9k6u1FotSxTpcS3GIYoDeNuwBeTO
DMZ/NE8e0bsx7e2jUDZDMJXGTe2dZ7bFGrBpC3IDOpAfdW2o7AuDhalfq30FfT3Lwfl3tiEKKmj7
wSeH/kk/gEZxd0nAMHmDmAbdXVT75eONS/VGL00tcBvTYZTZxvksiH9AS9B80G1C7qg3Vo6F3CW1
wwoOFqAkZj5ENwNCN+8rYpBvuo2ZC2VHKO2oh4r2vqMSIhvj6owOnY/gmuIObWFEp9AoqVlJICib
ql+TPWbBuUXKd7BNdcmoR5DvP5jLDgfV9B50m5gTG2GnCf0xWwCZnHy5/9ZdhEHSpoY2sJVr6CU+
2nRQQsQrV+XT1jwof0+JkUAJJUL6xYb6M8Oym2BAw685TIZwKscuMFvPcHCDl6iC5lcgQ0j1TcVg
qD2H7cLHwqAo47V39aSxtn6a7qN1LcgONgFMvVouGuE9fK/DJWKC6uVtBxKcKNuh+BPMcN5g+GjW
n+ubYwG1fhbO+4a8DViU5bqGEkCUiDr07b0bYTdMAjbHrDaNSrvQDBWembiWGAi90qpNUsMksOED
nbvh1Dn1oVZ1MLtOszqV3xOK/hkjwHtT9G9KBoeuvuGOxYdjUajbKU4BSd0nkIMTdEMTVFh6ZMSM
DUm1IpPDmrZGh9C/5rul32clIGXQCSMrJApE5rJm7Ree0ZGD00mFWmszjcikuwN2/hyl5FKIMvgD
7HLEhgJmMwQl0Oq+qSodBeusQkPcGoYH+aCaO4L0KDtiW9puWJsKRTGVbWmMjPagdFNaJgJhlOWq
EUlQGc4RMc1ZZNBrcW2tKOCcIDlxprgLJNV0j9C+svgVpWYEJ1V4Xlv9H911Xhi7fZ/oB7WPbR9j
iupFlWlLwYfGNu04v4KGs+iA6QssmS638WU0ekZagxMT+UGsZSIQNK8909NPUr9oI37guziyvgui
M+0/5FCh6j9nWJ+9vB1kvFm2Cn7xW+CEWvWB3H1kWw9s5mV5BtTxhDrY0ZwYDQLRqkZiWeuWvAHo
hsndwQUDy0DkrWu2RRzqMqeG9oITGNZUoN/46tGhxBLrBIEggAnIV+V7mPJxQdTtxttKpm2ZLQZn
AIpY6STx2N3BjG8N+lxM8BPMRPaoSKdt5PKo1VSzM2RQ7cIQGuZ0wMbdTkuN4kmlH6rkCAJAeS8r
0IXwbUzu3RakBzoNyh6pvYGyhjvTOqzZohLXD7SuMSgzldotm1jMfVsvBKjxqBg3nBumolneGtsW
GKDCgCC0pb4nGHQx2qDpdyQTAo1B9KY5Rdyh9izKNjXIQ+5k0B/yuVFxletDezt0hPoI14M7xSJX
rzfNVrhC6zjXLD4h7me1xF3XJpx6dD1rADwdhYYcFIXqteawInJCfd2uh6Obnf3gwBlUV++tbja1
FLpf19IFB6FqIdj2bvpoJ94Dw6EheKSCsu3mJ9Itqr2idnTBUMpUYLMYKwwO56pLY2ekPEYYgh0A
xjVHChEi75xsHS3hDkg7HhgDd123YB+SAOsn2ka1etqtImaKKTPwLRHQoUh/2nFTA2vwobwp70Ab
yFlSoVN4JQ2jogmUyMOlKRR209Vh7acJuzD1YJz2h2Ijbls34fh2c8gPDDiTkk1xgmhXw6S4lsqH
UEosDUBiiyZJdGxJCB+GQhAJQWcG4HopJKKkiGHpMiGPZ6spUYc3hI/YD+ffII3bb6rFhAlMKKWS
N6v4ghnkY/cb2xxO+EPOqRla+h7BlikOpPTOcRIUrAmhWWlr5Kn70DSEEmE9KqCaqPscP/hEHmUG
36k2OCtUGPeBWyiiqDUVF9umXXf0gzjVSuAGDfDCWS0DKiG7v3IklHsnp2+QjD3kJMp9mQg1I4so
8GEQbPAhGda3TwLDfXUHFPq68snGUHV17anvaOhqGD7mlyNzu8dzfnkHHal5hbLR7tLyEXbWs7nZ
/HUhOzeoZt2oEbzjLU/p9yARbKDYyS1/1noMpBKN5WXu9GT3DR3hdOYmmKhHOaUfmHQKkRjrPlCG
gSSkUk16DXUT2tbLu7LBJJyQ0W6KWRTW3XSVRYauQtLCsS1uytAb6vZAkpvAKCXUo8oMbJ3jEoGE
PR7EItuNfY36fXVO9u6uDdHxwM/C4DN9YMNhW0fUYB1lgT3FOKhmz4IMkME0jW2A8zhUM8d7WCGi
Plj1giBmb1Rz06weeWO0/lgv9cdbLACRi/9d5icU0645dqORMPDDR+ZkITEX1Ac9RaRDvPUfHS2O
SlJt1zi6ArV7+LArDKtk+74lKorynJ3YspdRjyjjmqam2U0jpDtXBqJ2tqUNMQKZLKwdXrPLUGh/
6Jv1bY+84RCkJuZ3DTOh9+E/VvUGu3wEyTiTSBDJx958aGfIBrXGI1iGhDrRIr7jRzZgMYmEEgXS
wrbf3RIQQTStUG0TtTcQq6ruQ0gushjkrmUvrfaPCp1ulIeoSa91INhEk0yQ8dGp1nGhyFPge5dx
kQs4DNO3dtWHswtcZSzLR3v48Q1dhRxEWNbet894hdav8c14o4d9f3S7pEZhz+D5BulzaOKemqBp
pVp68KIkvmHwKPHjXrKi7u98McDawaIIniOwCcdv5rTcw3MWRjA91/AJfQKmA+u41Ud7SSCNZtst
fosQ+a6XssILEARhDoMBiV4NfbJHpcHaQnebQFnyg/tozx6UvdF3oCqWqh7kKnYW5/4XVis6m4Kd
GZvTxWwvVBLIlfcoP1V3TcW3qJzahEGG4FYzGkWObQ9Akpn4IEKiBsnZuTYZTuMKCsxN/kjGxmjz
dC34HYxK6OEDHTBQuM8GgH6R7kzIk3R9U5d3RP3BNXVRRlapGRoNONgkncdWJQABlTXQJN2hgm8i
v82FpnFCyMDRGurKrCGP58da9MN1fWO5JBrdQpM3SrSyIBcUlg3trwTLu52rR3Oakua1mJCycR6Q
W0UTmF0NAUERC9W1PRNiSetd22Qv6Edv50LCiYPI/uh0W4dTFDixznysDQRi7/6jHY1gkLhXjbIL
yfJOHMpOQ2+IcEjKXCgG5VFNjfSS9U1dnZe6MFg2LNpnRfAehRJ919qqAElgjUYfz1ENlH3ntNDI
WyjuhhaZa+unCFNRzNAybArJqqCbkxBGPYn6qQSLUmwIZyOd4ir9ggs5g/CxwfPZJyVm99Ia11Bw
yPRad47MK9XYQRMqKMtikdJ7IQIMpmVEPDL2bHvCQo9gMt5o5At+UNBoGGCdTnPpnBuaZnjDwLxr
GxqIltAfHLCCTuRVk/8Hq5f5Aa7yfhDxeZH4rq0+u+66+yDh+H+x98D8xXH/ZX9U6Y+Po3Gd/vD5
8ddFX0Rv8XB62n+7jlpkf7mMrzOKgvhPz8/P405eLqNvvb/8H+kcnQpMlvv2F9ZVRyoc7dCXW0y/
jH8PFmZB0XHleMekEVsvLSEkvI0rbF2OkRLTUqf341HckOIng99fZlw3/un18PR03MsH3JQ7dHR3
MU9hPGWESdKfwa7YKNa0TEGOUZzI6yi2JG5cZw2GzIT+6fv4jlFW7x4f99frvF/5pHCPVKDI2/OG
64GfV5iZ+Pmye8kw7tP+y+74Dk7bK/nui0tb/gbcnOY4OS42XtFTXOR19/b1MuraeaMjn8nLkWwi
0jmV21vljNuKISWRv7yELY+mCw6aWjTHP8aTyqsQMV5c9nwdh1PCuBc22n973L+lgGISPhPZyeTF
z57YMmYWGZMMwqKH785zf+zKA+ggsBStZi/sZnDGTtoSIbJRXqe/Pdz2r4DAOoEbN4LVyYLV8g8a
F8hvtmVJeamB5+tV6hQkD2RMLwj7RiqrMzotuZBVXXyDKml0vQMURiXi+Zgf43Q+7b+NQhYxggod
WHW60UKKXIGEdC3abtpq/ONINuC8SBVHjCFvDKi5gPq9VN727aBEAuTnvya62Ti1U5QBGgmd9VjW
jQR9OZ/xYTviVoQtfxEG1TJXKYEQJiI4nN6vKxUgddTxdvOsjtbNpL89jfbA7QyUm1LYylgADbAh
K2wonYcmRorXE4IgAaPdPVLjdVSPt3O0ac7Ps9Ejn4mPKa9nys5koxjzbMUAsQqTsb5Y0eP+Xt9u
3ysmYs/FK6cbu77tHw/Ph/1TRWJ1DthwawC9Zmb2pkGPXfYjo50wow0DIIPPu+tClFeZDNCR0nV0
BghbSbvfnyRuCT/74BqJWtzQMCDhTxgVGAa2zTCwstyRXrfB33w8v48EtH8ZZe0XcFPKy5Z707OP
Vm0HPMvnw+V6gxc1hB7c9Mia56+n8aAzS0Cfkh93ttgBCwoFHCP07C23QQooYuxHu0V8TTUUeRuL
YanktwlBEF6L2hHUNFiTn1u9rpk1/Gn/tcGAcxrdVUyJWS2jx/PbKBTBtQ1AeKz33sR4ygtn3Hpq
4zHTUskURBTugNKOyiLLpeNu1CfQV3AOsMoo3b4czu/X6+HT8XB6QZQ+DI0uFdYeGrFLwf3Pu+MV
ObYKiLrR0r41nckJRm3pELx/yrUnNZcgyIJtPVdS94CSJMtmsUXGrexHa+R4bHAChP6sMuQFfQA9
8AcEABNgZSdp3yyDyRsC6Wskr+ROhVdZpds2ThRdupmJnw7Pz7OWAPKdHUy1Xtvu6alN+NkBa626
4hsvDECWxRIVracEsorH2D8/x2rIL9iFHoJGmZw1SClywjNwCp2MNhKJ/rJvQL86yU4UbSLiVDeC
8HwDPI72mrw0H4A+yoaxBYbxgCl22k/SYSN7NpBukKQ15dPT+fY8mpBP0JsdeuExtna2HFUIA9Ct
1BFqgI57DdGvRVqPK1W0R4AlI1V8ROaEQcQweXjk2ytCRwJ/3hU4jB54CtnL999hbIPTI6fz624U
TECdIOHNxRcqiDeikfmIeImgG2j+AzjOoBvcVQogfz3cPo+apYJxdz2XZbBZ9qUFl+4GpBVo2g4A
KVQTzFiJ8w3AtKDCdOKqutnq7Ufd4tWkatUAHaA4cnkfwpP5Odr3izbpQRGT3Dwv8AVh5GK8pUSr
iDxss9FYMWBsQyRgAekAmOG4KjgBSQDbcW2hchk88pIBIaH9n/YvhxMyrrtetXhHK/5TX1F1LZuk
bLT4XjOulLkJsJFr4dR101GR7p+u1XfWcsDsZaJb2RoNBgSrCQL/Ib+i7TKroVJlxfBJ3kFW65OH
L69jVIMCbgnsW+BFR4QnSesLDNv2TRB1AYoBrWZlVyKb0goYARaHFpqzCopKvCb1n93emvaXXi01
hSKM2Mh/arAQI5Bch5davDVgQ/u6CTPj0ENA2AOlVawQ+17IG5FkDQJXlAIBhAheYEh7AOk1S9Qp
5dP+e385A9tJNTnOTSBm5xp9NTkeMSjgF892eIOfFhQGtjchvt3z+HhZ8AFgO6A6gNz8OTf0errJ
D+eQSTOfsMLFQYLBsmVGKlmAadU3Jhu1IRDWty73IaVnbQ2CrAKPYryl2Zavx7i0Ao9K2KjZAZET
miiA8v76aWTuZxwv6gYpxldq/GrWlukB1VXzAIpK7jtfYMXLZavKO+ArkmSZmsExVK6DwyNq9qLx
H0s1TbYzNp61hOmV9wVySjwOLTThb94BgyH1w4t/GNcBskEE2iVfpZqIawElZBvNg+0gHRN9wF0d
Vte1DJJ0lkW/RGjmuj8+AxOlAwjuotDHJ6uoc4NTlMtkFLCObpA/CxFedqcXlCvRAbvgpYYCDMEK
ulxM+DpP1eoA15TT+fJSV2paA4NfFK4TMX0g5DqSlRSi/ljiLQBkrPlfxDYaEz60btI3DWEE0zWg
sliRhv5/lcq8bBLdqZZ2KXhqt8/jyjVbWsvAe5kBNm595D7gafDNeO7eY75P8ByWz3LcpgICq9Mj
dsmS2wFmk4Tk1nvNdtv5/XZ+/hRVHEoGdFyp55ww0YRAD0MAdJpP1QMS9RWu/1iG9vhO+oOxkUoG
YNeSrU8TiynGdn7eXRDo2LelmbRkQGuUaHqtoXYjo5hqoOoDoANRxSgnGNi7neSaTyqqOc9LDT3K
CS7OBBEQ1YM83MUavH2+7OVFtBgUQAZ4BS4yOFVld72eHw+7BMvUk846kNF7r9KBOg+YnjYgBJCa
qBwrgaS5KriavahVm5silxc25HsO/ztxgeHr3nwAtsDEbANySJt0YtEN5I6xFvi6ktumJaxzyuds
M0W7MHzUtluiLa0xS8nLRZx7G8XVseo/h7ZCmApAW0nsz6bSwnAVmeJUa45OY5Kn94LbWkjPkWaA
IB/gnpaYLK7N8ZL7Worxr2cgxFVj/ruXrSYpWF2n11ZPBBVUrlm1KQuuklZrW4Jvq7CsIRhi8e5W
jI2cVTX4lJUCE3cZNjgbtXOgTrCY4iwLRInGaxnlQPuhuvJFxgI7KlSkVuE8P+6u++v+FBvnINIy
QvyFzySeVFwtodjza96HGMC+XMO+1spaYAwL2c1RMqRMo/Pr7vLb+xsQEfqjwPtdHmUDixuggCnJ
NkPv1jTm9i9NCFoyc+wAVt0mfFbycgZgt9ANyvXAg67miwaghDRMDCINkgB5VapEOEsi4R67Y01t
D3JEk1gSFZ9XhKyzSzpur5oh0Q//64RnOYromxPh69qtI6GZZUYktWFj+sXj+e175H1gxtaxHQ1Q
EJQShRhiGCpJYgueXwFf+6aknSaF3EmG8iZPuBq8DLZWAJV8i9O54Xnu4ITUeCb1m9Flv5lR8v5h
NpL//rPq2EUVSZSMhtYmxsT4LichuKdIEmdaqTQc+Ko2vFjgtpU5i5xMwBoVsfg2+8lL/DDx8C+j
DBEqThVp9ZLWaADiJvgUnGtKyUwLFmBlmWOcJEsUcGiprryivgYvwQufbLR7OmDjKXgpsy618k55
8YJ2UqQCbvneNl26BhvSd2crOjb95y9/++svu0/H/c95KNifM49r/oyWvKPpi8tfFvrp/HVapBvk
RSYdlRZZM7njIvM1KS997SbYm9nBPz79z3iO+feNtMJcOsys8JfxUqv7n+eqpu91+X1sbzcvYMUF
6CWuhBIXmL5VvRM/njDy9PHKmvTyBBqLlzc5OcvR9faXnZa+9Y682ur10l3LrxamTEfm438k2+H6
p/PxmKmwE7ew5P4sN3e/By3fXK+lPfywjjcRyU63EI2RiaaTiObH193LQjTi0w3dev1D8ex/HP2+
+XPx6tyWbNaX/8Pp8fP5Mt+feALXiycoGW+QGW+Q6L5YQYnyZ0YtmRUYOaaCLIIoMetioeI6OnEr
ThFWWltV30kBmRy9rkgBLd7kPESZ2f70rTUyH3fiK7yR25NpaU7hLEnxFh9AiUJPadtXZI9grsU9
Kyedl9NfPdBfvUTEyyZEqgnKSHor7eJP++NxXsXLMswZeBayigarbJXYept/PD99r1Kfs0pSI1Se
yQLd9dL307dBpt5hQ72rIP7j++22UqC8++2v680dnpeHAMokDNxDJDrujUzHVHuvXWEp78knp6YD
ywNGFDjeeEkDLaQrHjZ0oU14O1l4O5HgikeTVZAdJLFhZY7VQ1d81YkGJ7Baqepar26XJL185NHx
tJUrl+00Lyvc/9zvYlfcuoYIksr/w+hTzJ/LJktvhJubbT2Ru73va0amrKTdIBoKv4x+Ptk70BaK
mvmrsZaoRXdAyXjhymb+ku1bE7gHS79oZEGsg+hN/O38VKXNgWqD8qaJHAeXbZ2kzSmRAKuOJfF8
z4ArXSf6gZs37sAbK4lFZgUoWwTaQQ1QvbilOSWjh3+MzaurBvGgXcUIU30vOyMDtGSXFcD+iYBZ
R4JsNbh4AYGwCq/BZSPGa9EP+3l/JJa8rEbnmBGzxI/XH2Nopc47vW2xgWTeMU60gagJLxtBvq+5
xFq2JntTs4eVrBq0rv0yePlOtCQ2qkleIvRYzsqyw+tBsqIXopehE6NkIQ3EVdiIK8N73zKpdUp6
rILgZdBnKYvYEPw5mV/AeNH0vlh7U8liMlAZtY432aoHmUV60Yopz+3AuQeO2uIIkOczNNu06mqU
Isv3oHxFuSgA8SnRv96oN3BwRcE2V2z/P3+qc5iXjL8Nj8oqJtg2jEOkWaeVYEGWSIHsNAwbpNeJ
vq7sdi9dt5lV/vhTg5RfqWhNZ53YDoiMXkFnv+51dINoI5VKEnj5hjWl8+aBZaV7Eef9x18P11sd
4nGDaJYW3p7sfTjOb8uCGrC8DzVQzMqgmKo6LZ2MjItSlkOYQHDDD9LV34FEgHYs64x8SncPQita
y75X+vVdwbhgA8ZLD7Exz2Qa6h32P2U1742qoUvyt4Oq6kvZvqA0pAFE3csQdQ+wBgCPdqa8cMcb
o7I96Q1nX0wkA0AO5SsxFdl79KpDlmSDGSkGs+70Qw+YpZP0ww+HL3UF4UVZV8ppYNvRiKa6Dwn+
vL81KHwnsS6Jjcm62ssBpoKAZHthqAUkZBjE2xocPMi+TMfamJOG1kDJbU4MRTbCISiYUZqKS0h1
kBWH+PTrswH8xuPIBkGygbCW90AdYVlXGzYathvN3A4A4d1QwT+CDGYH3xbFlz0yryrOgZbFVt9V
fAMnu69by4gHnoCO7obAKahJQwB67zZKkYeM5GMvVVBV2AZ4c71o3hSomawfta2F8OW7VwPMPtkY
aRoYaWI0/6+H029108aIt1C6VnImhq6A80qOXAUVoJHXgEUMphZLkoPnQZvKC3pZT/DWUWGcyV65
HPW+TyIByCON6rC6yspBgq1dTmyFx8vhre5ZLWPsJIm/RrQAejrnfMqytw+ycW0EZIFiYTL5DUrL
GBwQX7JjdP96wCXuQkXuB/nkMtlTPSnbWLaTXp/sXdb1ToxZFLJTTqDhvZPJUgK+RV9LmxrkQAsN
xNkizNDCbc4NUFZtRDbI2PGhApcPMtcOyJsGJKtELvvr/mV/agjvGdMItcsuqWwq/dgYphhci74A
Wl9tRSYDpso/L1sdPza6toMXlGUJQgObq9cS9axYrJy8F5R0gTRIK4NL1kqeFeEh2VaoJy3JcjeY
NmMBmHzD5vF5qSmLANlYKnUm8PCViM6V2Yuy7NWeQYELq1N+ftNJBMzIMJSHYlloKmccASjad9wF
ft5d/5LbBsHoUS8qa+TbGfcBSxtF2Z3CgOTq33bAv2VjOZPHBA5PQ/wbUHcTxgFx9mA+osGAEPUf
uVOgluZZqbI67+UMNMO6X8nVRxfpKkbXIFvtnYWZDsTeBdqfwtFa9H172W5U22wNKyC7XkZ2vZwq
A4wvJ2Kc5Q/Lqd9BTt67s5yB09e5mhLv5UBy7yRW+sthf3xqQjgJ3bJJA17Gi7yHQPFGHoG8Mifm
nv4/7+fbvsV/ExMht6lPQKjInkhhkgF67lw1HVTWaIoVjESjAG20BXCcAN3JEJBszxR+UCdjSCJ8
QxeQeWFQvlEroRCZD421UIgeDdYuJL8VLNKLKeUzgC3XdPnGPDhZPPVyLuDh1hIpV4Nvy64BFqIW
NRTNhpPNZALslPbhfzUFzJcGJ0w9SMkWsn6hMm6T5kBKfECig6pIBPn+fDfUCsNkVEUuRbiLeAMv
g6b0lw9IIVmZComPxQKqMhzstahf48X/5Xy6NVx+j9LUyR30wM71Ih/8bX+r26qDw+FUIpGAmUot
xDJt6cfGyqZBLJAssk+AguikeyCWjhyS8xK2TkSBrF2CE0Nypb+Kct5YBTUBTkC30gojI+tWkJS8
TUe3QmRCDgaqgbm9KeUIeYxKlF5FxpAMczgruqogqKWdgjlmDSk7SoSUqYsob5zExJYuFJ/OT99h
bmOtBtjL8sqL8mqJV8tVODTl4i6lDGy4D7hskDohQE93psXa0CCraF0gGh79fZaX7IP7DpAYOLsN
TfYmCJlgc5/Ym8B/Iy8XUR3tBeEgp2MGJ2WNF5Jd9uCcF8u4CyNHvgkvVi1wjhxgWjfgYGBDXmnX
4SpCUokJZD31ZhyuCgVBSRknq27By+A2lYAGZMDooSZRQDZF17flzMnuWBBzAgoXRA6zaNGj/M/x
i4Y8tJr5a+Tbt1r6bVIABjJtrZTFRPKHZHHuWU82V1WCBOHg5czu/7ic398aqsB1a4488FwDa2s9
nR8hpq0/UA2OMvRp8ZwXqyPkXiS9mA2wvQIA5MjJW0Vtiuw3dpWaRzmy4eXIRpVpvVaSpVkEloD8
Hbxkd5XpSACD6UXFWpq7MgOp0Oi4wWzp0FiPjq4jsG7T5DQAgJkCkiXysORyyMHZvm913lFShjW1
VEAZegjNCfPAROvkhh6zBJcpeRuWWyn5r7tP+3oG8mAkYHspPJBbGQyi7tuKYln9DUoslgYNELQV
YdR/7kZ7sBrZVZ0Sqacx59gN0tWX/CvLYN23OBSgK41WkHc3FinQJs7V2loBrzuIpaRbHBhEFXpd
q0iWa2+CEUMsZbKLjD0YD89ALWEQX7FsfSiJTQAsQDvJu6AgoqxKLYYy11dAPdJs19zgBTjKMgZG
zEoABZbFN7JCAtwdxGIYmvgBek7VKszlkl1vxFTf0r2T33IQ9coilWVIZ6g1SpN9Oa9Ft7IQqyjd
RcRxt4A0yOmv4OFW1odOSSqpFMpyyo/uGjqXyHmWvau1JpCd2WDE+OyPjSjH0NV+Xo6mKZFwaBxK
xs4d68tPRiCQfMrWqB0EQDoRQl00l/xYwday02QnIujNLweSEQWarvAhp/wZcBydaKYXlCHnsngr
OYw0QAOcfRHlKT0eECPa5vLe6fhBNvY7sW1WYeiCugdRMpShEWCoKzGd9W/703vd1qXmQfkEs6sh
03kITbaibOEosdvOj429Pwcjd4FAtno/VLjMySncrpr4I6Nb20hW4L18YEUMtZIPWRp6pSs7H2QL
YhhqCTJyjUQwpi0jAdixDYVOcjpCH2A5eoNLPrjW0lqAsndyLJQa1LJzZZ1gCJRWnAwND2IdeiGy
QAa+aI21tJx1ruLTnI8NpCBXGN+9BbAKXdeYKoTycY24yKYgQaZNGmIeyVQHsdhZXkPOdVmMczm+
P1TjnzLg5TtRhP/1x4aWU3KTOFRIImd5LU8mYyRqkBLuSlkElK5cslcG50Edj5KKALb4BEBI+qqp
KOtu1SQRUe9XqkxKmiuUN8gMGYbmgCGI43pd9S3lzE3bYbBfychE0L5iOjrZqfVdTYvLCWJK7HFY
Vm/IzqwWBeg/2hqaDINcB2GBxyC24ORy/0GQZ5u/bHhMANnNXYVqgizzhl4MEmqED9ctKJnYejG4
U4oc0NoSyFrwZKZv6QooQz+2b80NBnZTcB8pGgGFvltP977Tt2wBsw13txchI+tyeKDUO8AIlRst
lKkBsse5TVeSMWXQFrZzYvlISYwyyuE0ChM2tBxQouv8w5EkRcrsECTJX0IHwICUazhmESL7kKHN
8wU5GiTbJsKDtGE+ATRBhrZtOj9gSqPFAh5QaaGtkeyG6m96XWvUr2SaCZoteU61WqhNiMfx1HNL
S6XQNVlbQOMp11ThAkRf19drdkH3w66lTwto9K62M0scjxbJFK9ETfK3XUOCjQ0tN9gDmaOV2OEe
JCJoM9Tm0wCAS7G/OdVqom5CveRgzIpOFk7WQSe92qx9mcDe0JQDZNHxvXEyKg0Y1klq+ufb9+O+
gVmNKJu34SIQqzOtGSxA3YdaWxn5Y6/EADi1VmRQgA/dTr0xQMfE3rWmb6KEf9uLqqUHqTuyK1j6
NTIiPdTKAL2Mrgb9kcwHIOudhwsRcAAIq76WASvzkO9rzUGcHO30CoJzDfw3sMDCRHpAzvYbhHgQ
hQ64eyMitEVEQrYyXGiaTCVjvF0zKoIwUjM0NceR4/16kAxskjAhM5Kr9Yu2MiPxQduJAIDOo/k6
EUntGAsHYKiie75gqDKeN/RNBfUATpOLcBnpAaKyiqaZlD3KachctvTs0NIdBrmHRoypbkBx0CJG
CnRsM4FBScPQNaXBy8ESGeDjEqNBuwUboA+xWQhIJ+tBuBMoRqNFUwopc1uCZFqacie36tGN74gc
F5rSyfrZTs4fcV5qm92Dc/uaZy/ny3i+1Uv+SVBBAEqBCtMF+ONdbf6LkpN2g1W1kg0ZkLZy+gio
9NGuxylVgyweuq7Fl0PdY1Q1dtLJgQs56FWUt6MS/SDJpn9eWprhy5WtTelsgbh4bP8mWcF4vhl+
JnBgnXnbXNYOVIv1bW2ZZTU/iFmYTZXpwX6ofxFwb/kO07nvI5BNwbU6B0CP9OwckyktDmB3KsCw
5UaRAWvH9o0Dr4C9p4KFJTPE4Ac7MR+xu1DtlbWtM7yQXNCwNxo5EjB8jJiXtW0uBOBhtgN5BnfR
wDi2JdtkugPCooVHjktDkxWfVzVQWDa7fV+LyYHUB7nWp/D0ZB+pM00LyJBmp1t8bUQqXdvgXlAx
qcN9tb6EeQC4wummu5CLsTsnEizog6pdrXtxB/J8Q7OnDsw2K8Y2i1g2aqHFGn6kxAMYYTq0tO6W
CyOsNE+UtvIEQ0xFfU5/XnbRrAbN30FnkK6MP96LDNnA790HeqeBxBXlrdi+0gBfLoiz6taMK9Dv
YfiIKwokhx0ax5Iix7haKC4/vVdif6YyeRoA7LpvaeaK2iir6hRhWfoGOUqyIE4y5wy19lRO1phb
yrP3BQoy1FWNSnj5h0NtYPMge6hdpfUpkbYgW8zqthQKuVte6KrpkjLRdkY2q4CWsrWG0V42ceRG
8VG/vFx2b58bHM6OTRl7irkWsLeAak7VBY/mGlNnQDV4L9bklOWYoCrZodw1UssIfD5Tk3deRlmC
+UgPYeA2udrACQUKqpRuKciSudippvatoDOdb2vwID9kJw5XKnqWIvRFbDKySH0Zu9JiLkiJ9MkH
GGzTtB+ZEIeha2lxA0KtSstzuknpFhjULVb1liwNKmF0UxNj1Aa5q5WldqDPJzuOdIJQgChXQwsD
yaU0TurGV1o96N66pgZDwOr2ouFSonAyE8hVTIsFImdSBrEklZqdsulEHPfCZS3CQrKnqcNHBDGA
nlzfVBWFqvt71OQE9cvTYioTaGylvYz9InSH7+fyh7e34/5GGt3JTWU2ePtdv3QvZ9qHTuzQjvzD
AHE4arcAo8NZXHV/bZlzM9peurmlCyAVVx18DeIF8nC6wlMCyKbqqtnvsqdkbMuYNKDwejanJNM7
yCgItSQa+WMvTzfKhF8fskFs1jJIUyRMynZCNcYV5BwMGYhumSvl5IlwVVLxWhYyFuT9BTFh5R9N
QbnBhcZO9CiwF3TD2FEw5lncA8XDZN0E4iqUT4GL0rG4DgETATSlfYtRCJKGamNPZWHrqUHqxcpq
hMcpA1MXNxk44AplhGCWGjJCInv6dygHMPGsKLd+OFzGc5wv3xsG+QbZRgAGbpA6pVAKBgXGoTKd
B4gAbT4wdRxFFitB3upQwNE/8hIxLXJfzi9Q1SxUGWEKtUSOQZa8cgfBwjSW0WVtWvQ06DKkakNw
5epCb31LCAkge6prm08HGnpYuQ/oxt4D2c+dr9fYg5yr9kwL0MW789WBKHK7qSCXPJBSDdCUxLck
r2pQV85mIGaYFeW7cRBf9m6Ar0CNUwvHYoH4Z+ib8o5lj9p3DUPx5L6JXjW2akPhnN5LJljRXQK0
vKsZAEG2t9swLRSD7hR0+ho0v6o3fgZDQ3StZ7Vs/fSm1q8KlUKqmmco7zroocXiROFrOZJVPBzI
ChsGOZUKxL6DSG3UVJGp1YpY9hK/kytgt52LDA9jyyCcPAiOihyZ43svCjtwZ6a5NgWYV73opRQ1
WqhDsAFjF5Cs7lqr0YF+Dn1lfJ+Sm60FIxZmlaAfgJX4tmE5AxM8XXXu6SCjzp1oWZewMwji8Q2u
c4IO0MlOTLcoa81lLMKZtunycjGctm2hP6RcTA1KsrJ0d6ZtZrEMoA2hxaICwIIS55UUC8hhOxD2
KgLvcmFUGOSBkQB8dtJ89vL1ZUGpdXObGsC0vhbCl2WGN7Web1b+tpZl7+VMJy+y3o/XH09P+291
CLL3LdVwoM2BPNinsMlAopIOtfJruWFIIB03okeveVQJlWPprtpJVHblKh2SGgYidqYxTQvJrqGX
PJxCX6NyRNvayxp0b+l8NedJBrT9fa5s/Hj/Zfzsmj44nA63P3+RZUF6vclHiBqBUNPT4fq2uz1+
zp/34udzynr6fKWG8nMFPu/Xz9fXLD8f5M8HsvkVlCo+V+DXB/bXH0cauu2rW5/QxOXk9x+ja+vW
jzv+2gT6VWQ87LJx7tHA58FwW5/ZN33+p90Vn95xO1gpzoDND+unq+Isz96BzzW3+fWXwa0PoU6s
YOPBcRtffxlRGntdlFgs+F3NUTn9GG1acWdeN22BaOjqzOnALzfcNjq1r3/uwecDx2H00gCDePbj
9Nkvu8vLvs4eZPNWoHFEqKtUjdpeD8zZA/i8w2+OJMv9rcf/Gz+/fnlJX9xGNZv+cE3u3cO3h5gz
+fD1cPv8cBs3eLo+qP8z/8tk+SRzJg6M/Rii+6QzSV32r+cv+4e48sPp/LR/eL6cX/Ni7E7TUpP+
W5bKGnjaVFzqr/vTy7incZXHw+nl4fqv9/3+3/sHLW5uevW0olkG6B1Ox8Np2tzT/nq7nL8/7G63
y+HT+21/fXi87K6f/883cZuTuRoXJdN3rq+74/Hh+TyqanlDc1lm+nYdV/Hp8HTI2xlPdPkuHmeK
18evI5rWZxqMv/lwPYwXcTufH46RmqcziOusb0bEz7rO6X08yu563V9Szou4jF+XWVni9fx0eP6e
3/rh7Xw9xDUePr2/yA/v6EKJwfKO0pXkK+3Uw028VU1uNdrAamKv5fuH98vh4XD6sjsenuRVbPk2
YV1jPkakuom0Hz8fjk/4nueOiJsVRYL+w+npP47f3z5fGyg7kKVXzUWWHo97PYyMdxov/3rb3Q6P
yykABzruRWWxIO9vIJzXL7wcN/Pp9W36XGbbjmwj2eJufYuvIzFoQAxu/TjShW6/9NtlP8riByMf
auX86HFrw1xPL3/tOEmZznTZv+0Op/jfj7erLHqC6bglPkBQ8u5CYKWa+PS9LOPI6609TnbH28PL
8e3754eRBp5HWflp9/hbZk4srCYcdbl0cm2ff9tfTnG9L1FSPe6O6Q5kBh8KdpyOmIUvJsgJRk+C
d/yyzzQVf328ZfErZzhKTDtPf+kMIGOzMnis/zVm+7EHHxNFke5s0qTjDe2f0p3LrEf23C39NMZ/
++Fyy9c7PZdIo6rjmCR9OcrNy/Px/PVh9KUPb9fDSJdfXhIJTFc5ktlLSqG4yuv3hAntotM/wAOy
LROczN+HJEe/H/eIP7v19mI6X09efFQ9L6eHzj58El9NOY4F49ejkfh5FA7P+8v+lEwf8hCiHOw5
JZ/3klS7vI9B/jKfwqBTrGo0Zgf2ZqGgf59HGzDbJ6Mmft+Di1Sq3ELgr2JfI0anuRddLZ1P+0iO
b+cofJ8PX5DGtba0JafgQDJzov9wfn0bzcenXxYKlF/GcwKSGjtIv2kiGMYnNlO28Nvb/vREDO7b
uWZuG1eqaHNnxwIZvzH9/FY6WSTaVlUTr8KrjRGca2MfnlIeGDJAzcCJgryLkUSi0SjTqdWsmnp6
+pDpaiiXRUp1hOef9o9nvAmtOAdl/3p9iK7hcfc92m97mSZ7TlqTZwjoAohSi7PVLaPxgS3kOU8m
/3S6P3z5thSUNb6Ub8DVnLHD6SG+npWFRBe4ozyfL/tR2OXQzyRwR631FsVvJIlvkjPTidydZBe8
l34jPImx83wYj3SOSu32XaYnQtQk7ppF9+0lKkK8ARU4lsrGW/x4vJWH6/vlch719H480OEicyf1
pyLy4PstefZgJ0Q8EWdXNkiNLKyUpFdH4hi9fyytevJ1As2UoYb7uJm38a+HK3KsQj9wsjaJvMv+
fHnaX7JKTMeS7VAiOVOsZ1jsukiViX3Slbzsz6/72yX6fNW9zaXWSaGMd24IJ3+JdpnMxIFVAonK
4zbO75nkZUVoREPja8XltxtkxxFt/PT9tHsl/i6w0YNznATdf2sVwEYUwF8O+6+fzt/G9012t0wb
VIRtBMbr4SnLwHErh1sSOyKZanEn1R0YVbqVuga8VT3lYKXd/HMkiD+e309P1z+C0zjFISePx/3u
8jB6ELvbtQZx6RIfsRtAaDc+6/fX8/t1pNDRkrwBW1T3oq0zmcNQoOqS893d10gIKsPBKESCOmRn
DeJPJ0+miogZFumcsd3EaxnXjV63LF96kb5fLrunw3j7TayqAwt5rapeVgCD5E1kCRchhNHiPPx7
XKUGIljW8k2SfP/6af/0NHrYDZarF53kRJ7zy8hEacqn6T6KcgHoTnHm0AzdUSgUKysnW+efjufH
3woIFbCfjCdMDOQQA3kA2YGYAhBt7PXUhSWA3oyMWEYHZFTkb+Ofj4fH32QStyWJ5129jv/O4fHz
KDST9SY/VShtLYpUTScbfdJnmSlM+dShiAQsPuloild8Uuc+eLlVTMeH3wuZVt9tkFVusoFG7f00
StlEpbLeJicm7VYgXAbsTCPK2olZNGKWXvTpssIYxdru+FgDXcyGnifGjx55ymVJcmN/Gm3eCoJl
OeVHYxy1+/DeczLomJ78D0//836dFsrW8hUQJjGSo1xTGx59Or9/qvLoRp1OdWOHl8+RRUeTZg25
yfvQoip7u5zfxs+/ZxegMF9legmVKxb4DQizjgWQC7cNRJPNh/Zzz61gaRQ7mTYGlKKVwyMJJNo9
/vZyiXbtw+P5eL4gkFhzGynhhikgJIIM1P3ZiJ75qaBVajQnsJOSiGw6WsSjS5oYNGZXVBjeu4/5
D/eQPNC2gxhD+Qyd077jrMXRHR5ZbLReP40H++3h6+h6A+GhtgBGq2ME4rY1xA6+mi3DUK2mB4h4
aBEaWRQ/xPHuI6Jxgf/b/+nh5//+j/GHVfrsLV365ZoM/gfl+RXjWnnq4ei6lKjkZgEDFkjQdF6A
Ilinw2uk5PFMrw9GQBYinB6S2Zq/j/c9wSGJqZOIFS8kfZ1CxNP2x4XMJCdul/fxKp9GX0myVtPe
0wNPex+/7rP6ft1df4vPCeHD+Ou5ZdG0dxPhnHx5UZTEBV53l5FnRFMuLZGScKYDlDkm13x5nQcb
SNYM2YAvN5AwTCkGln+ePP8KgG6ef0D0Q/bvVlP2+9v+Ogrp6+Hxh3/8DV2ize0FpjN0MfrKbSGg
Laj1FcPdK8b/xq+YcLXpCGkTlIYOMSldNOPS79v1EYiYKDig7xEHrDRMQs/F99qC763l9h+p9/rw
tLvtHlQnf51rKNbdT18Xvx40+PWw3l7EtabdXz/vIgVkS3ovRtjS/emBo8FiB+P7yzswoeRi1ZrM
lH49rK+X2mQry71/ACs4Xb5fT2/g8XB5HC15uAVNCKhbDrBwccyY+20vZiBkPh5YMXI43iIPTYdA
TKAVx8fzAlkcwwWIIEgPwtBRbxAXmPUV3YK1zxt42b1fr5UTEFFmIzHfKRLEhIMt9SDDhB3afr9u
nzgsmf6e9tdHxAKjHF/3rrJbykpBpMuoGI1hhcCpAnCCgShicn+lGOqQGOo4Chp/fn/ZjYyUshEA
G5jB+HIDYSvHxgeUFWnQnBSY6Se7Z4+JCeQ1lC+PMFBJ8HzZvWBBRg5AzInoyscXeIwEbMRftx0x
BVKsmJGDDsnBoEoxoqkcuky2pbx7QsEk6aoUgxapQVYEPZ5Hm//6cLvEmCHiwDy+lqgxxSgixMG8
IqNqEP36sJF/DPW7Af06sYPWCDsl3gEp4VAawZ4xRA0yRIkJsSapUDMYvZwxpQqfc8qjU5qODl9u
NMBW/ZUcFFuw3u398gmznV5PH20xd2/EK7T7rvpyAZlP5OXJ6enLIaEVOs74K3gebd6xTHOn+pHc
9pB2pgyGigU8sBZkoXw65EUS3iXCd3rBx/PpqSJ6XNWH1Bp4gZbYHn7RfaUPipQ37wUVj4j4x/el
7eAac0ez+6M4wVGKXXR3xPpPz8+cHQm+HHS8855KweeR4GN94PL3keA0A8d+xd0js8cb4Lwl2YFc
N6O4rxsSSLPrQBzPNT2kJNsBkS3r+TYkfuZf77ivJ30bsyFijQ06/qhyA2ezU/ChR+BDz8mu0mRG
lNN7jutmtTFewOdbRW9ozvWc9FZEh98qios6PavJSzOVevAAVHEQ8GWWmqMGucVgN5T/qi8lV6k+
DqfP+8vhhpfwlnsGSkUIPAk9RwLUakJ+y9CVTlvgFAeCj7pScs8UOJsOh2PNbfWlzWuK71/Pl5yA
B2jIlJaT5/wuJEI6yxkAlIeg46c5+LX0mpH0dCwPNeQ258f35eMrxmR3yGTvObX/ur/tEunsv+1e
32ov6Cy3h4ZswcyD6w7iYQIjghEB58DMHfa2ESGI+wjqQJy26QrfT4fbFQvRzpXq35Zec85VhCsY
x+mBUgshMWw994glEaArHAaOhEf5lezPWAkI3T6KnpK06ML+GRD61nOwQ/m9QfYTcT4iMZjGqqFM
fkEkXpiXnz9eL86lpmuc8ESyu2PV1yz8Ph332e4GmJ3iqL+e0J8N1160nSbRg1Qv8XilZwOw9fjs
G7ntGssA8o9b7sc3N494bmCJduKZ9F/Qawz89wVUg+R2bzmkp7TZob/jOaxwZtkdPjvB+YjD0VCJ
kKnGVd0FiNMSozNV6atBM/IK+cuEa9JR+sYijrx9zRH9CpO/pny9PTa7Fcs5d5Y74lwSdZU9drQH
gncn23kCC1PrtofPu1PMpIKuk+5LwJvD+2HcVyHr//q2f3w/7i4V481xsBeFbpDtRdw3Ynu3FW9k
MWIAXHz9/vrpfKygP5bbwR36g9QnYWWC2i72QwU9G60HzVrwxP63yP7vy6857A0JoqHEfLnQqUNE
RLz/6Amw4AWyXajvJIW/AfwwXsBQFWcaXYA1pfnHYP49Cro4NuiV9e9EwUgW9gPnfm3Oj8hnMJzz
WQLXSJk4DRTh2/n4PbUOweBhz4J3eYnJhYDfszRYGpAOWSIdJwXukkBQ7MoLNizBwBAQ4Vk7sMTv
PcLvA4jcTD4MhJEsC+HlF2h4wA2MxiCYDgH4BACX8gcM5KEgmpJfcfKAImo4+V49L8CRFvKOe7wZ
wNw/V9IXejZ5YpH/j++X67miRQkISrQosQbR2xP4lggwqj+Q/Bl0FUJEySvBdLzzSBgH2TCeT37b
Ph+K/1ANsj4fuTykPu0mZs2qH5S+NQRO9qzm6OlLJeBtOUegCHgjJ45k3pCIfan+kfqm+NMautoY
oQgD15azXooNeEQ/gRW8pfpC1O8UpztGyRFd79PudR9TQ2tJBx2Pv0x5K8/w6zAIceci7QPJH4Ig
Ju43reV2mYN83ZMeORhgGD0X+qMmPAIgqSO/pn8W2BN6Pstitw3FgvnsrO1XEo8FD08hjI0jPZkt
EHrS5dE1o/RR1poauLPTi0f5ZsGxuSZZcLxfK6kiRONu7x2WWWad21XTLY1D5oLi1P0WcYU6rySb
6eoLoxti/r6aaOUQBOJdFf3xMGJrSsTTNnZMyGTH+7xlsiPM9tyYTIo3l5HEpC+4oq6l2oFS33Fx
w0JqwGwJFHLOyQ5IafaBe75ZZzfFTFTgk07SDlLUAm+BnCAFLUxr2VqWewGqnEkEwQN4I4LuuMg0
4y51qxGZXaG3AHuerg+mXBCzjXTyKc0WpDlI0FHyWDqU6UdIiOD2NOkBGU2bjA8ubQEZ7cEY7v3L
75H84dMkNyYLsrkdKwAXCZ4beFdgr5533FbtF5D281zKWal7EWSgfL3iADnsxOyUQn49egF6gZuU
gVr9cVbBtkzY6zgGgFFTzTq9m6IBmDMfKrglxL0Cm7qyMVuRBdOxNSMl7oc4mEQdSdZVreFmvvzA
2byl8ECYJ0k5iOibM5zTiZJNBzZLurRfoAE2gPDHFMBBXnPHZnqXF4B+n2YbChlvFoLGG/Fv72JA
8RAVDW4a6q6QCiFxNBI8np2PBfaUjSgS9ic6hJZLaOR2Gi5yUUpAxL70/Czu+3I+VYAvLcqw6fTI
hqGBB8GE0IiGaNbCXd3he014Oce5IAXsgtSHVSDzb8JrYfDQAPsn/zzKW6CFHpL+R3dn2HInmjGF
XH5ivBHuLUPvMF3FowjulHVoUNCx50ArgvghxWNVvcgG+X52o7hsY4u3TPSek/zljyO4jmyeltik
h/ttSnUE5T1d6bUxRq+H5S2WY5pS7SCvz/ec17gWCD0/T3wLoLp6pScq8wg9mypVSk3kOytby1eF
lY5D6fXdlxqj5+vZMomS6xHx0FTr9e7ukh5grhxbLLFFbqDZz0q+0nBGwsM1xCuQ52ksUBtZ8iLM
jwRbiOVBRA+C7GwPlE4ifQQZ0ETTsoPote5xD73hKiRm3nueqQ/YS0M9SxAiHpuMp4EpUUJl+qRG
OS7luEC5Qh5PZ7jqNOqyI8ktZWkULjNKE6GI61re2tTAJKuOjeRhKiOR6DGsyV1AZjDfzZdIu2UA
G1ih33P++vz65+fn6/5WyTO3qEIotjnBF+BZi6+AjNHz8Zhh6TLBNhmhkvMG396VnsJ9lhVi/WCq
IrNH1qKzHFjb1DIlu8usp0JkJtQX4U7s5B5St9v+Og3x+fKSpOc+z5vLHRpTF1Gx043rN21M1dKz
fcI+5HZGTrONoOO3k/eUJpDEBqRT/BpsQ5VdofvtNu7XAvuyXCu0qc3SQ57DS9o2SS1unGbv5t/7
0bo5Tu12/vW+u+wfHndvud2tvKee7fxOD5hybetnc9xMjHTnqR1mbRta+nwaGjM3D0uTS9E+gnSe
aaHqAgPXpYle7tRTq+FuHTts50uMfD49xcai4NuOa5u93ufUyxetwPZ1ogf59H67NZ3jvuvdpFxG
mkhfzExAUkKm2i653yhpZWXTX4Z1g18PT+P+Pu9OqM/9plt+gXE9PdxvCSzVMX3Bc4fAUW+MDPqa
h10ufzsa0oeXwymlz8xN7vgLTO5vtw501dE20tNZx+8eo0Bc100tt69oqXUyKnFQH+NV7R/u9pea
i53irKXxNpaBYvLydHZqmlqu55D7/3Zl360TZaOl5YZy3f00KSLZaXMT3v8jr0b2GbMLtdPwIsaH
QqcO5NSpfzfa3UzZ4uYUmX8bPUo9rFIoUsxKVei+1tGrJP43LjH+/1mRLgtxXJZX6XnKyzB67MqY
mj+lP8XtNay4zsaNiV0+bNabazpncUuuMJ4VndgWFOKVsPJHNrsOY44R0WCEd0hzFIAYzIutg3Sj
q+eGUuCkxIAPn9oNq2yI5cpBZ8kzWd6L/ZS6+xx2p0/H98vD/ull/7fYvvbp/e14eBx/XroBN1jC
KLETopuqCPY/TP1eIiX9bVQCGddOUMHb+ZgZe9qFuLoigi1mCurp0Z73f0ylVVPT6IfXcbPyHVjC
f5GZZ17++IbsQKZvJ507G1n7NDr74fr+6bJ/GVe6Zgn2Zf+HWEdx+ykuLzbWT2c161l9Iv5i4Vsa
2blKwodJEiVijcbv4QR7cKefsKrkrckJ2//H9Ph/HB9f/FivIjFmb4SpPdX+T+fTl/Pxy/5vu3Fr
3x5O+5fxrF/2CY7cH//rdJh6NP6/8isrIkTS8K6eXzvp7qfDl8P1LO9TOSJs019oRXJsfJ47Mkvf
eyKARmKZOmCWlzTtZP/lsIMXTsacE89nftO5NSclkdH2ElfrB35n0gskNO7/ky/KkItKrSznzOXE
VNE3HC8rtywfTePz+01cKmzk4GRev3/6KTHDw+3r+WH//Jxm/YmShNz7uJwfOPrPTZkz7ctkTu7J
xNWWe5pqw8QviSEVqyOHkrlTb/GYGZQ3c30YJU9lK/26YIw4ufJQmST/K4WLRh6+/BxTVf9x+q9r
pI3D6yG+Ive/yj+3SuMY4g0s7S4ySiZbsut+MQLnXR8jZczi5uH97Qnph55QxrijQf3OC8jeaxqj
MVrcfxw9E/EXVzpKkCPFGbNvlcKz12s0hEUhUFqTvuOIcZqq20aT68vEorcwS7i/HM/nJ043yo9D
NK5K7rkqTtgwKC4fcX2ZmAbrZi75a4y/pdx9qVV5+twRXaIjoy1MNh5lkkRP++fd+NFD7EUqq9SV
W2MrpkXD04VmPZ+NIXQ7xH/JVy7S2x1F/S9IbrWl47W4pfrm6fz1YbEqZOk5IM1/3R+fx4M/PZxv
n8n7HgTfNdsSRLRHDtRLflSe/fKwWJUT1WSKlhcMKz8onf5SyoSV6hbtgV7JbIhHtBkjCT5EoA9Y
uCrwi01Kdh4BLD7e+jlpH3GvVc+nxKCj73jMmlVWrIRD40voGWuetpSMhzT0rcJihJYTAEz5fPec
3m1xRCtLDZxQXCk0ifJkS1ZodVj3FAsP/DzO+yUdaKEnLbP7SpoqGqEqdPyFzzyfSROYMcQbtmlM
JQ1tJc9LFvNdaXOsCNp6sckjwrdLvAICmuQN/AS0TDCcPb6aTaO7MJlN8k/3nFO7UVTT/KKEiz+d
H98je8mainWWtn5IHBp5ri9mBs6nnRdbpBDBU07rpsGx+/XhVOQNNTPH/m/7OG316+WccrDegNHq
dMn4pUSbkZ5J1T/JW1Hs47P6Kw+BFXWXKm9+fssfLue3nzOrNthumiOILYPK7EnslBj3CS7c72Lx
MBo8IMUDfhN3LtI+G2Qyo67bisymum7DKofTakDKzKJ5Rfu32KRqfK6X7zWjya0ca2y6MMc89zVO
dEZWMYHNIh7se2aRHBOVlyDUa5ZUkuv5/fK4/8Px7fNOvgXFIX8VNxJ47/3WjTSssVz1lSwx3EkP
U2oGtRk/RP1G0EL3HW9eyETbsSZpItn9U9qPLNNteYot+DD9KU4VlaauZYrvOZty0Sla3oBu0Aj5
Ka5Irtm+NKv8B4GubE7EOBIynY1jFUS+pM+Hp6f9KWYn3JCS8bp0soOwU3kTgXMa4s/uDnFoEzGM
ADRIgzDZGAFozyXek7yhrlRNeotgPOwu455e97fD46JcLi+fZKbvKCoWmcIquuZpvN9fkhIejzs5
tPKUuryi5V3kpIBlpdvzbmNBnctcp5rEcCyPEFUlszgxvSLSQ0vAHrIUrbsOfihxEnuvKluBwp53
grcOEXFgZYE88NGmRXb0suxYt0HqadsxXmCla7KpiFoYVW5KyZtS/C3PnmeezZkdWJGhyP1aAnZQ
hTvFRkUOMpyUmbNoYuROFg09a3csgM3478vOhfecx1UYLYnIYkzzXd6+o5ELtQ51ft7/cjgCfg2c
dTuhCAkbHv80hcx2r/sq1LEeJvkZg4AipCSGGY6RX3UlKtIAayXXv+Qb/v7wKY3flZ828Ny3caJ2
b28x6NTi91jfAGY3BXNkV9rZjkU68Y/Iq2nW78tXmBMmKlhvWPcTkutAV9i/vo0C/UUmc1Xq4HBP
5ouiq1C6Jb5hmoTsWhAG2cItkgHUmgzwu1DFViS/55CJDZL/ET/MCfJ3/w/sZzhfeF5DyPHjFI3e
XR6rc3v7fuDmUu+udIBgSh9OX2//YWpA/CQa+4aI1sQOekFwyl/owRLrCUn/5fslFFhiJbmUVC4t
UZjEYriaeIfEEVrAkrtlwb6I9+3S0Hgn7MyCRVbyVyEhdkFYxIBFWD2SHveOEOSboVifT82q1tzL
LKJU17013o4lfB1Dhk6gHbCAKSlnwlq2JDxb/jviIV3f397Olxu4MM0Fe+/v/NP56TvYISGAPv1l
TfSjAzwTzp5w4GyMyAsSMyLiOcpIxKDB2Vx5tileEu2Hiem/nmOqy2032gLXdvowBFwm3uT93hw4
YFfaao67r9H+uR12x/G6ni67r2Axz8X/p/1siR8sY7l4rCBeLvtjVgoR7wNrak7IFNB36+5Idlv0
VlP6RjkTUz/8cjh9z8lGa7XLaOG8X67RxpEy75MCIQNEVVjTrdl1FFqHzGxdZ0Xw62i0DsklNmu6
6uNu1IQ5oSr/cUkoGxdiby+BzlNaTYzqpkR51blpvffr7fyavslMkV43y5CHSxYiedopt9MkY6eX
iT+RTP615uCfUX1PVudidevxFmLg99Puuh+VurTsnM6alo3qTtHG08f9LbnQuaRFXGNCDdMaaxp0
fIV5hvoEVM0gjLRS0GQ3Oq62zt7O8a2n8yt7/WkfE7Ccvi5y+Uka5OPt1fJASFxizu7cLPE/18lc
nkRajOBOSea9+GCT2xCXGsrJ6LGj9iXnqH05XA+fDsfD7bt4u5OUXm43A1pP44Fu0wUf5pTTwym3
OBQjXHHBni64poundNV5vNHnq0gxsw0YP09T30mi+mV88mXsuxIfasZaNs8cXYHd8T+mfN6H5/Nj
lMqif5BW6nruvbLblVXOT+fzbXXGMsLwJBLgBG3ooSjOGYn35/dPP4+OxuklgyPi2Xq33u48U3ja
USxPenjePe7x+8wTtjfvExkoPfJdQi+Ic6Qd2aEgxI4Z2L3YDJ/j83Fzu/NKZt1ZOb6dlUGy0CGM
GtMHlCEVVFOP5WeZIVbGSsUKG0l4FUN86WtLODy+lZrAn+v7p1yDFQnkdh4v4/h9ar4EZJ8jy61c
/i3WQz1kob/2LRQffFgPFNMNJvmZpN5pf41uwtSDB9KN97q8F71Q3iirIt4x8ueUapBRYRkCSOtN
Dgcj1gveSntLA+j3EV8/jubKuOurLGRDN3Cq7NP7S3D9oEVC1oS1iulu46OP3PHL+bY7TtwpHMlS
Al5ZK5HdqBhkirPchkdz6J+xMO3hNUEQv6AM87T/vud+PWWYp0H1459Wpk55VqIEdauiJDPrj1HP
zo7KZLBg4WA82VOSoJIILZ8ZPa9a95bw2aywomDJUevFlIqVcOJTGaKl0kC88a96U1+SxPo+JwFC
FvPOly849Wp4PDz1KSXpwXuZ7vqVx1O1qpkF8h8TJrSTCa53uvxdvZIs5j5rPUdzqyUyd3VJGk02
8IyznFQYlev79QFJtp4+wLDUTL1N1z3+2zmwkgXKvAuRKqx3nKZepPZIa/vL1DERlINl9UGWsomR
Mic9jZS+u1x23/+RCnlkA8gwFsxlJPJJtYrCnjLwardku2IJZj8cYiGtqL6Co/acXydkxwfNla7X
O6BXNIDmHI/MJguBRZmSq6Gfd8djdPyAzUsohPYiiE0gRhM1ecZCrnc2ClhzchE/32MLy6fRVhXL
GTK58yZhlDxr7HY2T1MFDohG58dSHAOlqsiYfvB4PCcHaXw9WcwGsqsMk8wTrSbqpxmSWD3PNReb
E44MnXKwU2lVygydLbL9Dl2YIUyw0fabiOv14fZ59Ppfch1UdKAkyqQvuQrJopo2loDeco5OnqVX
2JEykfVbH9Eu273NoeqpkHOfegZNhzjE7Z/jzrW47UKFLQ99J6iO+91vIvl51iS5HmLz0D/98BfJ
InbGcfI90Wd60QXVh8pO+8A9ZkxTjT1g0+SWqZNr1bi2ui+tST8bKz9Fukp56c9AVep+YyNtk17G
7w5S1kxWHOwGUvnr4dv+eH14ejvIsllLXJvl2ejiZnPtHDv0HK/ARCpdeeKIjYeIFvFx9FJjEl1Z
U29FOjOKE7VLNeBUXVMR2JpS2no7cVtTBm+SeVNQtqLcg++4LQm226f3T5+OYiV5tszXO6MN7Jfb
v+5fooIcHWhZnZA9pRbkjoNQZNRk4Kjv6/7Tb4d2lzcMrKWd3bLbeQkWLrXDwm6GruMk4urIR19R
5oMgWQukKmskn8ffUH5ONqk9Zzx9+nSOqYUPMTl2GpAkkt3WnNQfk79pcSCCnWCFRKMm4UKXh5Fr
Lztsps91Y8u7OaCBpIy7rG6s4GL6kWc68ZYcy+LlJLdkePwipqgkKg6EB+47S6GW2PnzlXxJZ7j4
uzHO9HA6F28lvkqw3G3OWS4txUXpUgyLPE8Duf59Rohsp7ZAz1Zofo4oR01mBsUZD5MB+PD5AK5A
lYjVGrR5fL982W+iLI/ny2gzRE8cqBXFoqdZiZwpnJYx/k/X8/H9tiag7Z+WVBvZpN4Y9WpW4X9/
f/20v7QocVXKnp5iQYmZpPrlDP1oFoefnbUpTwt5vp4KHJOU3TSJYyoDynB1/G+0jB42buPUmPWc
owtf9pNFkrVmVHlPuyM4maWSdO35sozGmloRye6W47T3rE8iY0/9QyTWJlgC4UnWWH3Qsrnquecd
CeTP3x73STzK7Ez9kBXEvU9P7JQcArAcV00War6A/5sEVM17pfq1RMSSQZRQyufjeXer+FZDx0GV
G6Bosq+ik1VT/N6xBjkT5eiB88jy4EwrAG80mlXWh1P0gac+MOK3KjBo/+k8O2yj+IkwSUw9AW2a
siPBCoFJxF0P/44Eu/8Wm0ocblkhgcWIQEoa0VUXm7UbWLPjKHmK/I6iofbKjkQSCPllMLaCBfXd
xlTYRCHeSECkhmdZctFR9M9JbgupXK8yqTiO8tc7qPy2I1h8CoBPFtf+tnuMRHIeVdfl9Xy9PWSY
GgaaOi7QtCTmrY1sRNnoJW9mjeYrGVdjfSExONUaHycWqUlpb0NxrJnGsohJHoZ8PgV3SEhGy7RC
DZrUg2oKwKZOX7n/GoIa5tYkG2suu0Zv4+2kXMoVgLwCJ2vgrLI0cCQFKOPVJqUaO7rIxh2JJ2+A
rCWmNCXrVpw+IvmIbl4j7EloX2LLHTmxORuNA6ejny8xpymGgv/7P36Yc4bloOt6zSSd7M4zz/H7
xwT1XeWotCpPRprDTV3B8pvLqog8uktiwoq0J5Me0fqRDJXdxMEazFLNREuf9vu3h6fvp93r4XEC
CWS0mYbiVqWUe37m/pVRSnw6PB0eXg+Xy1l85d47jhEWfr7ezm+FsVzJqgiB09k5U/rxuLte/x7J
J/LEf++ONUmqLSNJuViJLLdoTDkKG0tDhJ/m1hkRQZhoSJbLJLC8kcvRj3ujNb/ifgK7xuH19T17
9SveIMcqSXJGikjpj2LIMn7BxoVTH9IEneUhLAn+JM1JZfcplNHZFX0Yxv8NBLhNCZ35IthwTY3I
Eqc/yaxOjaLMpavtOgqvaesHiOAZzudam7WlJCPRpqchT53MGT0V4aXgVkSCcjYDAnAsTT6IhrQK
K3w2JUUQDPcG4Zig2ayuhdWr6FlfICnR1JxanSckcJQQt0j7P+yjSf29IieIsUeS3MmxqrwU+jLp
SSvW0jk86arlSbH+LCUU91LJtomq/HH3dk0O1OvoSVyOsRgCZALYgQXzo5e8mmGJtVB2oWfNjJzk
MMsfAAGZbiM1urY4QC9fP4vgT97v+ZJIavd+O8uCjCb8rEb7lNI3QSOj3fNLCnRUbO4ghRMu+0/v
MSBBxAdMOysSo9awzYLUJSIoWiHKAIUOjlPTd6mYKBNzYF36w21UFqM2jXIdoByeSiF7h32mA41v
P7p6cgqGJmlqOi6ipzuJcbnz2+5f73tUSJx9aCNl7T58HYl2Gmhb5QG9ibEvU61j99ys81IgQU5T
67kY/yIy8oXKYoJPXErR0Ycpae89avGrWKibfQ8ZlQ+dl1F5zQEpOC6dlAsIR0tBzmMlL6c3nAk7
60aaBjJXihRp3rLWZLNttkHfZGeLkm4YOJqfJJ1s/BgnuaUP30a7PLlhV5k0ScjQLmURMA8B5iBY
zoyOva6ihxEfOAn+XARa8Vgc5b5VhiyQfI60Trj8wzTsSyYaTWBPMjUjGfeT7yG7G5q4GyvdxByy
yRT/0zEqjp9wFgU1ENfk4o22nhDx3Ac3/09ARwfPccL18z7mG0dpK3OzKenGbMq34gyd2OP2saLD
HG8mZNcpvorIiwQnXRO5oMZSssZiZdPEPJs1l/Vgik7oWcaaeLoCjZuhk1yS6/72hzU/DOp0xyrR
OedoMYDryUZsmv16rTkgtOzq7z/LwLqYrzbVijy+Xy5zA4u4S1BF4Lkg6+TN5hL0R9nB4B3SbBic
X6/vn26X/X4pr8AUbK2SQv2Ziusp8TSwRLFsUv81ejwRKZnCGHF7SzcV2YxSho+MxIqaW5xEsYBs
+IjeO848LAH8bWAaQPeWQ7TgarNfM505QRepLA78CuvWZ7PpqQqNWysk7Em1QHJSCxtBz314H47n
85sMvfDPl3Tz9xpY5nvFEVWB9b7Et99NplMb7Bu44PRGB03uGZW9MieSbIforOluLpJ+/HyeMRfZ
SFfb4IlHoaUqZZLwKKksTOHmuWXwNlorA7fUAHHJJHMFXnlLzVmfyFAEEa0cpGKMeMn51mXwjYKB
ZH7GNPFokTJ52GU9UqMHlrFGS+g1euPz2NTknQO3RlPqprD0RuwxEm+K6GbUBkg/j8L1Up+XHKzp
JHtggYvyJuTebjmlzjFQbkmcWcrZ7m2WdN6+keaJqTZ4slmRsAvcmySuvE6weJT12GIwmvWbV/uH
ejiILUOPssKTIqMN4ES3iC0Ind14gt40wLKaWjGrCtsQW05PBCRlOUZkMgM0CMd0WLMsGe9aVik9
5y9+PZxST8ddrPc+3PavUbv89v4GpLnl8mGmC/7bOZENjWVD6tE0kk2tmOy9jTZiqtSJ9Jy05hdw
z4QQSWfDHJtPrVr+XAvQdyj9Irn6n/ffZEYYuFDVFKXKVh2s/FHc9/d5S2tNtMzZigXT0qusVY+H
UT3tcImFk8I4MQhDKhjkPFRtucAGSWnNOTtyIJM1ImdAcI6Mju9yfHr49P3hf2qlzFRaleZRQ8y/
XmdEaxa6NXtx8ZvSjNUKXhT4at4izFjrOp8XGoSy4Ihijqe7vSbN9Hg5H48JEhv562E38ssUWACw
gu+qFeE1VIx1gPJmIjoP+n7nqJXj1A6nJqNunNRk1JiFmgQ8ZDb6KBQZuZEiYoLySA2p3mn21sT1
zNZ9zPyd0mUSX7+ffjudv54envexfywoc1w5arRV5twSMotgTlq4VrIWTOHpEWrlcyWRuGENidSX
LskcMjBwqY/Wcgo962dPL5vmXcYUYNm11nepC07OtMr8Xalz8tbwsXEZR4t+WgOUJoUZv+ehjwvT
Q1BrYIvsiX3z4ywmc2waxz79YLhNrVm4Gf+v+3168FxU+D7qWA86Oj6PJDkzaV/5GZeOhJ/2MTY3
Go0pvip7OZZTLqms3AcFou7rwUhHntbOKvXjUs8tErDZVsRUVjCOL6jKFVBzyWhsQvxzsqt+kd02
OZFjU6YpwkBUC0W7TNHht5fzDZognk/RWrMVsYhzneM6PzzGhO+HUxwbJr5xYJOeV7dmbgI5v/YU
EJPX6xjrblMnsgPeJW1VE+Mvyngm2VEuuCFVCNvmMufXWtmY71gJH9XCkur57XsSCleks1ls6hOZ
sSJenw0cIXKpekhUhqGTyhQmAGqyXmR61BJuOyVjvB6uidmL4Qty+xgKGpS5BkWB+NQR9Pi9Witu
+WSeuffA/8iJck5JBbdTElOOjqSaxSg1sktTSaSxmgsW5Rq2pB2j+TThdkvPnYpTob0HkZfFQ0qK
HWbpBMMG20sj8neYjnz0u5pAIjMvj9SswzXnUUvihIlsprGFSDM0UhJsfVxIZkvaVSSOGprk5FJ5
tpcDt8EwEmmaoT01SIz3n6NfckOnLUYTypDtBAimEc0P3+RxmTley6b3F1eyDKGqxSg1200gel9f
Xp6q2cCkRJ0MnF9MjDn0FZlR9kYHPleLet9LZarsgW9yx0iToAnbyMnWsj3Z4wLtr+fL09IxTo7d
sc98l9H88Ol4fvwNAGmWdw4mx/N2noVRNcXPbYllWii659korZSGOcNWLk9ioiK5COOFhXlO+6+T
Gjtc02TYGsBptRLShh9SwC9ZJZOBk+oukZNE8Ks7VTbbJ0ZWXI0tASv3QrludV4k9LwZC1ANsdZc
bQUXchTOWsHTdNeV3lqeLXXZgjmvh28x9lwL8vY0zO+XfWzDMHEEh9x5wdLWdymTqOsq1tDu6QnY
QprNRsqG9WRtTBFQ4n2KmslwcEtmzAkuWdvEPB4PSBrrwTKqSjymrMZZzGtBkRLmnTLAGrp29H3H
lZPNyHmZ6YczR5xma1TXpgUxOrCgGulv4gPI0B7bGmXKYqkD4WYwktOJI7uBvrkmPzyaSftvj/tr
8hhj2dP5US4w5RsTRLOkobmf4ZuR5MdYOiuJ+QOs8OKGtPxQyUTtafVkTEQNUxT5/CnWkpxPufHt
+XIFJsh6m2RC2uxITHUqSzBCFjVixe7Ut+RpqiuJg6aitRcbccn6m1jCEQmd3eBkTqS632mhaV2x
D4/jrM85zykKwAzlVPOcVBnfsBtgapTJMfn36/54nJoq12xqTwOhq+RaG3wt7SFHvt7L1KQtJ7TG
K3qa0MpZ7ixJCZf9v95HN/NJ7jLhpdTxxWCZZ9RXEKpgBhjkSF6NelrKjj7Jbbv6oQwh6k7kml9i
lENmGcOVFc6gXbT743+Pd7RD3Xe1ZQMT91H1SXWAIiOj2e5xi52xhklEhH8QUxKymYiyfDsrebGf
V3ul1pnWcOG/bfHdcRcxsHpGi2chucMlIpEpXFEbP5vR28DZYJOJeJpmsxILA2T+BK7R8qToZp+8
pfGK4dsPze+L48YD26BiRSpzjk61YwqboJNaDI78fLqNJrhcesVKrDl143sl4cV6y4mVtPfUsGiy
jOVcyk7KYh8dj93x8Wcy0Uw0HQYeX9x/TVmD30c1901GMjRXEr9xoxaL7mlpyFxDXSn/h8KjWmzG
CvspkN9/msJViz55qrmLwbD4yP5LzLOPmkUOu7OCqCiueY2jflDuF+1fqNL8c8Pd84RKyJfKIpIz
sTbbiQQtTdN7l1YSt7WF3+P5EkV1VGoHOURhtv301abPYxInH+r0aDi6uVdBDR0WNFtdkWXa8/vx
+LBmT8ugO9uja+mgM4WjKgnTQxD74patnB9SNffL3HkOc4glWVGxaDT0QtKQBqjhMMg99TLKVrOG
1CZLxnCJ6XJzn8DFdoScABQeMRSeiAnXqnf3KT85iIwFz7b8rBYhlTFMxXfT2EDn19/2X+UC2o0Y
VVtoaQUCDqeaD68GzkebodCcSDBHBit82mu2CdEqFbMKu46rgV5rJBatlymYiyGdAqxxlAuyoIPj
ujNRAsa4eVCs8VDEq6sohHFs/qzYzlSut9Wk/cBa5ZM0RI781goX2BZwS/fu/SWlc+dd4V7eLPKd
Te/cfqXJOOw8tx9e7cmctI1H/J5+jnI7BC8GqFpsctuxNvnou2f5lYrL5IQhxdmPo6Y7x5lRWQzi
6k5nuoY2jtXCBOO91AQsHiUG2kdL8hHUtbFVU2kC0/4Jd9V2Pefuz8AkbDNkKfsWBnhRoioHFmnQ
OUZFRjuGDWPvTriXa3CGT3K4D/N8idM2AEzk+DBPUyCgJXeeEsxKsIvYbU1X7wN/9VwlcMULcV0n
pYEtdSjR6r9rhRFxXjndW4txmTUSejjlygg5B6gT8pHzWIfocI8m28sogm6jklieItZqiU4ji6Xn
KQWkBUt85t/23z+ddxeUz0os5hRuVXf9FWpdFbwwBmpK2V7xVjE/fz1Q5KGJhWjLkrmLdXYdK1B0
rzrOKS/6YqcQYRSPn0ZL5TfUwtRxw0Nm4+CY7e6EM8gtLEgnp1QmFYS++HvCjDgm5gj+svG774Lk
9dTtwFeFyfaH3MvCK9RGtyXDxbLKeqOPypnyP6FuAYYUY0bbXIeiGux0ftg/P0dJEzGBtXhKxqg3
yFcoCGKKd6Biid421Rl/yOtdCSyu3vvVTMJZgn7b0tA31pShQK/YZWXKrRdjhGab/Enb1+QOwbGI
YE47TMNUJkFVmdxDj6mLWoxsG0OPznOtGjcEGVs7/+H09M+d/Ei0xelahZR+Pya/r+INI2O+50Gc
w4nkDD10/uF57u8h59PzReF3md3UCkMp3Q4GNsoB0FPLhSqE0g8K13/VGpcaa2HdC+0kWe8+2vHT
dO6iZx/i3q6co+elKjkLrL4exKdQbX/gO5YvWWxYD4XgOVW7qbmOw1D/ekA1LZ6vIM1jfsZLSGXJ
qUOhjJKxjdjWRMHoc2Y9LfoCHYslpUzbuXfPNBIupUzBBiiGpLKnOXre+217lmQc7U7Z3Kv2Z+k5
vfMxJ1ZuCOttQ6F6NsOa6tRptnE0geeWdCvfrg0xYrgaMghJ2SGhNFAf2NTcnO1YMPntKZALO/d1
bFsyEmM+xZYnclJ7YMMCLQ3ne8VhngvDRhEks2tffKprXRpATS2bOMN1NpCxW8qxaY2w2U+MgT+C
+SdahF6a5svYjs3KX5rOkCVgX+mBNVm5DH38OEHsLbUo0dFcnS0wMRmx45Mzk2HaVqLo+Jvlu4iV
U61EomVrANdqFpDc5JTiB0dFQHMOKGYZn/2MnPTc0CVVh4A9xTnzawaTUvgedQPVsHlmzpDNobHH
3RW07g1eQjQmFON0rmXcsdMUd8dbPoMYauwKX7VnI3J1k4a1udaYUMrTS4llMCjTc5lKHHvKrMkW
2af47+MuQSR4BoXlwzmj//klg10p00EGphTbJ/J8+hJRtuocPM0nkBdQHkLq2OrItZNV27jBfqM0
FMkaT3bZ66d9TG5NTDe6m7MamQ2dkQ9HcfEKuvAOZRzHingWgrFIv7nxrFPP2fTvp8yWmHSXgCNU
lRoGYURd7Fo3taN+B5PpbENX0KrtpAM3DH2+U9iw3nQOpPZlxVhlXc+5qakyVKkBVIZaDuRKvxkb
Bi44bKJdoJIHdq7i+fVw2tE++ZHvIQboucgn41QZ4FSxvTT5+TO9DNeGxrYsOVu31peFFWiVHjm/
C+fv2YT9GbneePPxb385/3F8nXW0M5hv23MdzepV6nX/nC7s1uZNC97+2/7ryoEyFmW9hhHZ+x4/
tZbBumgvqMkc98UPmtSj3A5wk+PNhpqrI46VVEw0YdmpkG5q4i7uxXk21ZPLPP3ryK07OWOeFAyS
bO0i/a+iovuBbQe7FlnvG2YYKTbQfC924HiOXgWhk/OSdDo6urtjDu/IRiRNCjTriBu5OEmOfHd8
77GZeg/1GZy8EEx7iWXky5DRNYohU7BiUYb/uS62wmUC4ld1WRkRZtkDxtcer7nMqR7t+AQLRHky
Ghe7I2wQ7PjhqlsHt6E7mqWFd2UziGoas1dsgP9+snk1w4QNtkbKnCcDzsmDcoRecUVuTCd9ubuD
3VYwuKJ98rda+2SPOyIgX8J1oanLeo/arLMA9/0NyBcgzPlL5J6axmRyzwPCxMS9IL3lbJrcvh4e
0YQbIdCSZEvG5S/nl/Gr62gyxHTC29t1//50rnV68D4w5mfRGuny8mknV091Qq1Zw+gCz4dXcr59
2YM4H/Hzb8CQ6GnYnoz1mBM3F082JXDKKKjnCtVIcuP5OUei8whjFFths3TkCK2RnZSeHS4jpUzC
CnRDBTrNmtyED+Ty/uAah8hGEdWQhcQmU4G+X8kWHl0i1PBLc4TF9IqsdPA0WnH224rgozEmWydi
FT0PE4PUJyN7bTnbb7G1Elt8Au5xP4iNVWF3BznswHcdWKz1DNHIRnqHOpZmezY+jYwv9XDIHBnd
Wvc83NZosxvzPmdvJe9TNvEd1yaeRBUi6PqOkl9M4Id+Xc7vb7UWL/3A+vAbuzP9qVq/YaCqHA2x
yw3XxviienKTkU1T664NNS4u8DHg3SVuYgJmpr8DE5rZRgxr1GlWcsm+noSWDO1tLLt12vLSwOP/
19q3fjlu3Pj+Rcrh+/HRduxszvVrPRNvcs+5H9gSu5trtaSI0sy0//pLoKpYKBJAUbO7ZxM7YxOq
Bwpv/BCbfVyVLedHu3iPe0bxkA87pIcXwrLobYUC0NC+yjT7quSHEhrpj223crUe1ZBrlCjPLpBa
+zIJhQ0YORVrbz4KtLippnLhZNULZA4g4w4xPtCnytlMkinEQ32RtPJE9YqKMmqlBsmaTM7WJEwJ
+gKUJkCm9tDgCjxNxQ3zMKj8cyAOERL14ccFKwjs0X4c3vrvLFLc5PZHBw+yPapM2k9uD0o5f5hk
eWISoMlYBbrsMu2u3dOw36n9TjnfiyggMsolgPmikpv4iTsrUmRvVxwtiIp4eggRAHEe49a1Sv0K
VYMn08uznAoit1iyiUsStXs5AeCiKQyJhvBYg8NetpPXBBXup/MBOVIFskliNhShjd2OcjV7K/Hj
tNXP3RVKwOSaiCZhC6ZN6Mt4OMbStdjLcu1MkkseblDAq1Ttkomy9TxoaYUiqaNIFVUm4TfM2YPb
+0VBF6nZ2ipnoMJs8e56VWZhZI3cRWP9dDeE+HP/1F2n7XySY2VpwiWnLXiBhy1zulqTo3XCQrDM
/V9QbDWc9sc7OJHQ5y8PF6u4qBID7y6HAIttWP6nu4IxmbH4KbfhaDI9L+hlv/ZfupdztPe4rthQ
BAGVOeMczRgcRl6yqOxP95eizHN5OlOVKF6aNki0KVMFvsbZYdGimlQpRQwgCoPKESw70ntkCrEh
wzKxe5ayG51KqBDOv1Ivtm35biFwfq96Fr0sWCDDR4dbaPm6ljNHHs0Maj/AZoZNw/Durb91aH/F
EphtIwFKQYNtaJlHvLrlYCQ5CfW37u1NjjvS/oxmrnnx79UMb5SfacrPOMUytMhbYWEOjOH24f70
4XZVkQEL7amFuKXym2fryUmO9KdpIz90w1GOy9eJBnFgeWtONR3k3Ha7hDkoF8CCss/Cxkf/+376
A70C2WvVYCLkiJYM5lckXzl5QItAsiXw3h3DyKPSjVslkmnvytI8Ypps1ic8Ig8bN3Z18LItkvNg
Vo5pXKbUdILfT/hXpRW84FrBV9W4rqxVK68tmkZAL2XdB7kDutySLCJI6VFsdOq61h4PQE4CyCZC
zdaIcjpaA50rIkPf8N2Cz7chA1/Q0GcddOIfJtWyV5RywlUQzC28WAEgezyNYvHMVr5WtlsQhebj
HZYC5vRsYYWbCS4rg4xPyy26sR6NnVRpxo/LBf10Pp6vuk+YiLM+DczbshxKTtCxiNOUW5RpOEXV
CL5YGF4stPBizaF8Y2AC2re07hS+FsCy2ANjTsuaBXhc3HCIg6tcLAtlGr4/+UDZipfw2exeNH6t
WCxyhDYMgcRmM0gOWGbLFtRVP0Wn4gcUfDf5nNu6T87oeYQi1fsTqEo5DEbRdvxrgagexGhwHCS+
Gjmoxw6O8FmT2SLSfQ3KKSD6HbKAinubacC3jTRN1te6YzvsDNHlwA/kSiXSuJ3Ok9ItPqYrMpIx
YNhB7YsKG41CSZposLCtIPNI5poiE4eIl3rXacW1GX34/W8/dRMjfzGg/RpgeJZzoW/vR+y7cT/x
8w5hOuUqCBZcexsy/6a6zkVUa2aruXLz4zk2L2759GtaxzN3u0Bp2AjesQ7WnrV8AAfSHH+/9W/f
mpE2iEF/ctGc83UAtFQxnsMPtKNF1NYIV5qGWQuORN98EBiZPTZzKiWY0QAsK6ZE48nmdlnmWgt9
DbEKjjKTSvKCFOJD7awNl6rhjRhNueWctn66v9RNkzdKHXouYbEb5EC1YLIhcU2y+C3Qsdt8C3Y6
4RPc1MkPBfE1xTLUKqv6ZwhsbNiXW0lLTsXBEdmeqXcE63m9nk/Dn128TaUp2S5gO5S+vyrd3Usc
UfrGcNDc/TrI3Q5pED0hLsNy+tdbf3s9H+QIRsueCFauTfL/V6tHIuI/JwEyokBCoYOuhCxyWPNw
bp64DbfjvDmlkZkbp+mBJQ4HtAyV5jMB89+mWQ1kfKwEpCKpSfTL5t4n0+0Lzv31jJCTk7SC4lxQ
GeMkWPdKP5RYIYi+yOfX3rzvSDN1zb/Dzc3Un16UTmq2QcMJ0skYOV+xytnkFmTjOg+xGfzoXDsl
UcOsyTlMReTmGBB7nnPeLJn8cr9CHu87zQLOylzDPJpMzMtks0YGsFbsSzC9ZmZIuRWW4AIqVi9J
7BgzNQhbBbNxhDfJtwZM7rOJvcFY8OGkjZYv01ziNjXIWMmBl4zNvlkkxkilTs7D4bmYh14iVrSV
1OLg/AYcPYiITzBV+bppYhDJtBIQqmUZA5g3T28XuYKhkUIVfgxLLlf7ZFyb4/uIk6EnaXLvXqL4
iQk/EZw8GoP7cFSQLPJETHORbsj+apA9lsjKsopjYbqYyIPrefY44JuCERlbjPlsoGR3FzvcYyvq
C20+o9DAlksxGmtMFbUlsxDHl1hsnMgMZh7bzES7fXgDPTwNsq0q2XZuDgwj1shRJ49NcY6Cf2U8
og1JAPlqiWP3dvFTccX0dyvhqRuh29/80VkEZC03X7ZsYjMY83LsFCOzKgtBJb9ONuZBTRCV/LQG
HzWZtBm8oJOFBpAlXKvhyFGAO7lauRLxIbQAdc0blRZ5/FMPVVWn43scV69kx2q8grs/Q/5rjVAF
D9NIjD+tUGQ5BnMS7mZGkht7gnY2foqBkPDPRbppm3CmP0Nil8lEaCAqARgns7jPw/5gVmTCNs/H
7o/pCYy87VZCsZLtqIBSB8xkuYDWaOA/MWUIBtwLgnKZlQlRP0OvnelBH39TbaCXavSamR5YurX1
7sFKtpt8uQ4HjUAxE0jBxU6z0i+J0nnSiNSeCHiBaZLzRDqNSOWPJjEA6HhpcyXVzEzj/jpcbhA7
RidIcMwN0dzfH0A/JTM7gQUy6X9H5KpSSf3Spq02LbH+LYjyJjLZTAafT2t2aIed4SeYBoIqtl13
vLyychAvzJIC9yAD/zBrLI+/Dl8Gc1KTWsW/JknKGdNAxrXQYUDbv7YkyeQvGuEL0zgpflb7z6ys
sb1Xz3aRFfctzop0OjHHpgMfek+SXPzGVd/AUeMTtl+k8he1/xXDw5X9ppRXls7fOJbFL2r5i3z+
AtHg81o9crOyZv4GpGPr1lXIv5LMX0Deu7KMBtmSMcoTFblhHwPSeMIqU3q58vXgF9ZsQvYtjTtN
YROja2wSlp1A+dpvc1amG14kb8cHFadPnmT2LfzveWtafVkJfybKy0r9F774aFpWJ3+S+53YCJfx
IqzpgP3xR3siQi7WnOfizqvo/hrhROT92U4oXKwHflX319T8snJtK9XqGIk3rgkb/LyoeO6XebnI
+ZuWz64gN+0dY0HQmC9K/iDk0y4IkxczmKggNMwXixt1b9JHBSk3yefRpOFa6+gvNxl/gvJ5NOTM
rRuAlwwVj1gDHpUgOZFZGbmDTGGtIlndQuCbxdVtyRIwo6bxC3AD4tKvDW8KxDsGNkxC032/M4kM
+QgadjUI7Bl9J2XCcmQq31mVPCpjivrht9hyMuZwf7t8M370ykFmxSoPdUP8aVbFSpuYk5BXWdah
DWUlfSq/5rJa6cvY+2/CF2KVXCrfaJXyEr2RV5XxN9rKX+Q81yTyF0Ugzm3IJ0nlKyxbXo/W8hcp
K39SmTPLkuXMVP6Nishj38s77UO3m8smFFOWu7DKJPpG64I9CeW06yY8iTbK/jV5MDnRMzLX1ETD
1uQ3ZK6p60dvtC5X+iFyo3XL70Pms3qhteq41ev5DHtyrdaabN4rYNzu46Zr5U+CwOqBDJU/KfnD
y5RPKtY6tzMIjZ5aI/7H1Jbr197ubLpQ2Xxg1r5VVWz7oN3teqdmnRG9xzoRJGUhf7G2cIzGHkfr
9n+x9d7cpeDMY1fAPP0FzIi2JkACBppJrDLA713ADkcEgr/qciEQBbn2l6OQSjcf5/PHadl4IDcX
MMUUilyVYGi0Mw1wMSvSYT/Hn21trsUYlw/DjTdyh2ETO9BoAoWB84gEobsKaRT+QCAM0jau8Ar6
VabFHMy0zqduepm8UWi2VfmjobDJACi7G/vpXWNCB/aIA8tN/kyad21W5k+7xayvK2L+4gZ0yVyS
zZ+CT9e0DGhxhFFc5z4yGf11G5lSftx/Cc5eI9yKgf+yiU35EDy7pICjmSY1yW0eh8voxqArWUDD
LC13JlDgNQYvRybgrxjcXrsvkw49XwfXhGAGMyDgUy+h6xuW8dwL3qpbkDkdJeNkFiMwhytKMS96
jB1KRdgWcH3T3ILRYeUGoMq/9CdIF8eqw8yOCM9Mf9BmC7T/CMu5Dk33ue2sXMTBxYSE4RdPA/yj
NqUzmaEwd+tiXPMKCEocxunnqS5bdGLboixcehY2DfAP0iISL5lPmL6oedir3JRvGKgMua+himDG
CtbVgZcyOCAoKy0AFuDynr/s3qADWldnJbmuDN7VDIVIwAYjF1WGR5LPUtJkIXOF+/0dZxAOzNrC
38wmjm0CmdLavMJ+wAHVw353ur899ZqQr/0BpGgTzPg1oEov1zNiN0deceFfMYQo25KXuP2XDlsm
ZTqEu7KZDvK8LbkwRRKyBKgTIk8wIWgRzq9Xx6Cx6yTaI5nfnS/X/tRdh+50ix1JWYaMlTNmBqI+
XTGepVxQQy4IFKH1VJ7uz5DNP5AMrXyuGSeUPItmCot6OY/oybnDhiVPHvPsONX5riiMgluDJYOV
xHKNkSGQsRoHjQpLxmkfhUGadKnP22U9fuRii5BHrSs8NzbgRx5L1ZS6w/7kPgPIyrn5fcboMlm5
AJTVF4OkIo2qDTJ7tuERaVjVI36a+wSsMSVXny7AnWVKPtdJUDYWeOcqgIM5D59SBpO9ShdkzKAA
q1gzkUzpc8IZyLfMyTeekHy2pc8LZ+iaZ0vYXKjDOh8OIoXCHzGYPZUF6bbwYB7ASfre5nJwBQVW
cGbsVuhgLuVkqpKQAw1kcVc9OTNARz6RjEtq+89xJuYot3mYa664yobllhygrbIb/3wyk21IVEqu
xE0mmJP7BsbJmvWTMDWZ33poHvlVZI/sU3niyZKfa+XY5fOqyXrq2Q1e3j0KLv0CS3/w6Ctla0IO
qPWuSI3CP/cqn8c94NhYh3pFD34SqiehKAnJNaRgJoEjX6xKrzU2G8sjAhknf8UFe1WHB5QydOSP
2cIa/7E7Wn0CkOHARr9xyjelzDflqniEE4JQlQttzvJ9R7RE+B5y+YAy8u5BiuVLKRZdiZdAoIPX
R0xHmykvsyAPoWJ2RM+3kM/XKwlwsWuvZC6TqYj+ENZTD+N4l3muIbwLF9as17JFldeedeGZ25nR
0qOUV1PpTAzoAvIzTCIvAM5zdA9B5v5qiznhIjqKPdES+YsFDy1Fa1sIKTvz0XcuHVRAYHNa5MlX
ECXl+TlubpCXijFpdceK4dOQHWcIwsILIXkliS6M0SI8DOjPwEjQ03DD7LmivVp9b142wyZl4UEY
s4DjFm1uZSlkcw1jBUmbk+8/4cxEjr8eY6s6FAn8GCJXNqxdZ+NFLmy+ZjT+FsOhIHeYMIYDLsgO
2sQYhEqtSXWOILg4AEP39B4za4rQuE1Fxatrl7wNRCjd5XASK7TNp0ShwH8K3SQKeeyjzmNFYAus
mDY8LfmQytC0WZLZbh4XNed+ikJ1K8/7w8cCRM1Ulk2MOmIIMl6XYr8XCz8lbzmFFtdn5OjhDyrV
apHFVxHxSxyfO7vODJEQV1WHq6rncvywDh96tqBz9gXH5iIWqV6Qn/FTPrCCujt9mn4AMTgAQxFD
hNPJiaTSgm3fmefxmAUpS0l5TGlPAWd/7bv9a2/7SOS1kBaB1LQI+D6DuQ0rcjYpC0QzQprPrOf2
+Qzja7HrWZl7mbBgSxapdZ1p33VyV0fasn2+/ohsFl85ZQH8JZjm6RgL/J9nhDyZqxj0cUopAVk2
dlzma/I30shox3zReOyt4e2FPa/xfkEw1Uy5goxHl3hBMCLcM/aZja99f1PILFdWJpSxYvzEwmQE
520enbKAhmCwNCAJkrDtHU4FcFxe+g/w3H7oIBmt0PNLyrFoPeQFK8jt2tRuzJQ0/5keXNe9hWlx
ixk+61Il020WVi8HuBXzlc3vN0pEwL1bjK9G+CRElJ4onztNxNUC7L6TlmYEJhC+qaKyitABgRun
wiLCBSckp+nMARU8+DwvDLzkU7iAoHtiGZCb4BJ5u6myyJSDl15w/KH/NCnQLTyfEswpUjvNblkh
kvP7ZFWMsbn7L5fjsB9uEelHh5BxatQ2nTpgOiQmQ/mTIXn4yDNBGqN9BX3XgG34CSLm01EqIpq+
rMR3DKMRgtal8m1F7hNlWLsWhBZvj/RLKwzSLrk42bBLZYEUDKzws1B0IetQMGSW8csEC9UG0g/X
7mUrz1Uhcm6yZlyLSTPZ3mdICd/64zvitw+Hy6AQJrANOVbieTax8AibdXfDj1NcGHGI8aNdgddL
GC8ulwJyOrbPlqBBrFQF5WqmMlD7r/w7wJuZRE+6+/A9fmhnK96u511S7sSYb0FiCUF23zbej1j+
sUtrfu4HkiA5RbRQbfAHAC5GnL6aFLtn+eskDK46jETTYOXASZNaI0F8imZ2MsEKAgrg56grqNnA
H4ZgzPJzZfMNn50im8+VnyaxQsIc9O4y5bdJjIu4/wZOzEkf9edJBgtDD/ly59qpk2QjlkFkdOcQ
YBj1kyP5OBKBJj9eaMdehzG1lJk4JX+ccfEzxy+g2+HcFYapuVuzY3Jg6WmqfZ2zd+73XSkf03gF
CZQSdtN+uuQTTeRrbdskzEvig6GgyBKNXz3HYGa4COuILrqkIul1Eqqhb6XV7jzlonXz4h1Uhfpc
aAGGj0eS8Uj6vRdh6UWy+loVUiSaU8zRHPfWnwHFBe5eeW4Z9/OIaRq/epJktDPV6iXXltrhN2E8
uPCjNiaDY+egO6fDl6+fFCOAxdquno22eRLNJGH86d+GLxGIQn03pNLEtlyzorbUTrDgcqtk+drx
01x1ozCvykAZ9/iMxMQKJFXVkHQhWYEb9Xa/DhHmW2tJZ7f8PW1+9hZLd9q/QnWnQdlBdMTrbx9/
tH/+/ekgAQ3ktPOsmDvPKNGJ1M/nU2//50/D4cAj+CA50pZGRxqOdmgHEro//UIgS4+3q3Fl+GQ9
UiXt5HTOKFD88eNvhKC8Lt/SgdC52WqbwdkB1U37Je1rUIhiIXm1/TroltieK7Zh6cXd7P3pZwH5
0uw3W3WO03UZCt8DvNsjayItUSDO8ppjFn92HwBjVV5ixR4dIXY6ox17v8jHTw7JO0SLbeIlbOW0
kuthWhCk13m9HeNEG3aV0rFpz5U0ccsbnu91047zVQ8WpehGOt2uMoWWw1vQ3sCmQ0vDJrVau9rN
DFzEpJ0gBnRWJu2i8C6KlLtgL49jMiXlmpznnYcSb+txEtQPIk4UopvlVCVK1u3imfQmk8iIrIUi
kqUNWTpcUviG5SXlXEu2eKcRBsnCQ8pjYmUzQ1fcKyGaUdcSXq8S10Rhii0ChfSwktN/eeDoCeLG
lle6+RJC2yRPud06ibLpTZUin+nrjAmAeoOa3Wje+RtGpM+M2/OsLzZtulClk9UXEyWRAgH3ISmn
8HmqbFtlqsJZv6ZNerBmNb+kpGN2cPmYWa3q/DrQ+Vm7VWmpjJGz6jUQ2/olJCsCAXaxaXzu9vv7
2x3B7T8BcuhoG2Pmf03sUs8pApHpz2mCmVUmAGJglmFWwdO7TIugmoFlXMwwur6Sw4MuHwaY+HHr
RXIlwXkhASG3MAwqpOVuOsnrTSRSpF50kyp/R8R2DWLKVYiTF6TLedEPb6n8dDbziA8H06SciYBz
BfEDU3hfqQ3JuvWYCklTNjQf2qisa+EY5cwRVdEj8pxPCoSmLbgSF39pMkJCSXw/3GXIRn/07x8u
gJSqbCbzBgUK1DnVZfvZ5wN+et/lykI825AO+Wt/6bvbX+9mfJUMT1SmSQis0SxGuEGbC/hMTz2M
6pA303ACHOY6ne70GaTaTvxSsBM8mCZngJc90+1lpiOIETXOpJkfpumvJMuR8SxK4l+RWh93MJBz
vk0iou//7BV+rbh3NC3E1hpv4DOCZkYi+3NX4s/dW//N6TCPsoNCwp+GcaK7f5XXRRFbFgUni/uq
5ZXlFPoLB5jM2+tOLwCu7IVf/wKY+1ehCALJZZn6HHBgjKdYKBdXci9zvv0FIYUDCMIYqXK0HDAP
2pkjfrMAk8+dIrHA8eVhZcwMaA1pMjfGQ3lznrtIyimUhkVUGvrTQkCLWnwrCpMSM4cE4x2W/dv5
MDy/+05aRLQQYT9wVRQIkappV6VAzmf3+XXwzAYAvUZ56y+T2AHgJlYLEXG+mPEWjwgMalokiIEh
CkGFCoGYI51VzJvCFM/0qKa3pTyqnLMpTlR9I27spGLixlNJkHUwV1cvNda8uMsXWFr/RVZ/JbG3
ifU0L+thw66OaNN5bQ5+Bn9Bu1DiMWGap6QsCDXNv3dHnvvsjLhM4T9J2knXrMvOglupZK8dZNXZ
8iI9kClJ1AhNiGCydcUqnyiGRUkiJqSggbGSrLmu2mzE4vJdB5ysU9QLcTQdTHiwID96D3jgoAu6
kga//dAM6eae5JujUMlQOeVapjZwq5GVKreSPZOiDvFCyXAI+WI9k6DFVog0f8Q/+Ol86P9LrDs0
D7YMr0aWAfbCp6Wav1Noep7BMsFm7cB4sv/5791H5V0QA5fAsawMivGP/vO/xJumaStaRoZjPxbX
K9fWGo+z5c4rdIWvL08dtJXs4fzjXmxOaCJPcgKkjgoQ1rN2ROzlbV9UkdecLT++DcfdbXiDtC1U
xsIUn6fj/GRll4kN6sxYSj5YsckUKQmUHAG1WXEF2q36ygqKweeBSFek0FI9GoPT6MLZNhOxugoC
IyXci2nCO2/Q1gVxWsMaAOzH2WRzEhORmDbgW0EFw8LK1xysZqvQsEbNm2bUpJzmM8441jMF8kLU
CinFFkVY5VoTO/vvduMHuMuJkzVvNOX8a8Y8VQyNhttf+Lrz6OsuAm1StBttbyV0QGDCU0R8zZKY
naBQI7mytQzzz2gOQypXWVAAY1O5WnrQqDgnJDSCAE6FR0Dkoozae/GnjjU7sr6dZCkdbiwze8uF
kEP/s40xQ7bIFlUb7Xbt+hrB/IzwlyYkSEyJ4grGVBIEAj9OGkYJA+aVYOAuXmWr+IyVEqhwVbsG
c9DI55ejpiw9o5Ae2NAqeMQgIItrfakdopW4vZlhyrLCJeEq8LLTphQtd4UvSEkBI7zsFC/D82K8
tCgTDog4ZPqofUM2RMon+QtDeWW8wg13l3GO4HROv3INgZskfhJyw8ye4w2HRWyTPQtfPxctph57
j+UNtksPtUq4gHUsWl1z6L2Cdv1uv/ugvV9/lwhDqdL68bj7/dPuPxQTjsR/COLuAWbBXTGf6nCn
ZGeNiL/Ks3mg/yZO2h5ZKUP46HCDsyQYMd9h4zaKOCg5VkBTfOxvdsoiGOURxzmtOFD4TU/ofjsr
559zslSxI5RQASnQIM0MbKZJCUORqjvS1bCyRqalmOnEqWyLUAjqZvV4DoZbPw0dlkAf+qf7SyRO
Syvb/KxMe1ShDS7HegmNCtvTEsaqjBoSJJGFLsV6YqFsZBH9AgafC3vNAgrFyRZrLecJhVtpogay
lwFQKt8wac4kGthPSi7Y1dFEkSLViK4kqCErpnOPwHDe/DbG+5vMhDRtBPXbZaYkPkvlXdSCZlpZ
jhGZVNYplxF2aFYq55BQgJm8ySRhYMxZ5K7y0DMLhVkwr1mmkYb1PZWmh/79n7vbxw0eI1mXR/1l
A1b/lC+cqGwKwCBpkHjdBYmZQslVG/HY92+KD5MoObRlzlkpdEiXOedScq4VM4mYEpBRq5tYmHWv
bGzx/MtYKCgIAUWUJIlah32UK6PQzSrHTFW8BCbXgq3GuI5Kz5SIrmxuYnREUJR/b2L038iFW03L
RdLiPqSWOPAWi4OiXW0uKinSnAsWyiwSC28TacwVHZ1IaBBo9ddhD015+2FUbdAs5QxsGM9wnFN7
GxKOZLf40hu1JkAr5iA+bUNrfpbpNptte9HTbcSl9e07onJ0Fjc0T3dXc3KisKSzjmoszwgNWxTk
xgtQjNgyWieVROukiG4jBsQ6d+y2uSWBTGqVCprcXnGvA8VSrjThZMXb+c/heOxMmWCQRcPUoIRW
nXoYcezqycNyH0vCXaRCJyX42wiMkDB0htPkzw0nwFqfqGUytZxHzNeoKWvziNw55BzyhKMGk6RN
keuhP2nUCBg+SKLMjd6daw0Db06xMYgJZbAREhs0xxy6ZwmXWA2SXLD/cXe9G3xZmfFazlZ0S3X3
Gg/W0US7Z7p4tFJR+qRGkgm3Ley244+7T7/vXv9jg+nmVTS28meMtkmi2iblDJKlW+SkwRYBQOwk
4ME0CRXOPN9iQzFVVrLGwuN1LTnRzDiqpVzWcgIHj7HkW54svGuvZRY2oKKoSFEoaU0Nry2aYEkL
IQC+WEejmKKkLGxaR2vWYWKkxCZQnCoyvBmbBUMGdLVhNuoa1DMqKmkR3qyEjSlBYHJLtG9cLTv4
DxkQyjzhnCvmcVvF8vdHipxbbpPEJLPWa2DKKs+E2FBAL/dB4afz+dh3p42B4FqpMVo5cWYi0NNk
TXXXa/duZ3TJcfW8TbnBeEIhjBziojMWq8pnTqXyTy3nk4ZOTrWBU365varFJEUY/GTSp2kafd3+
EUBaqikjtqxeIMi6ifOEtnEk9n+kZDNfZip1a12J7NSsfa34wcrbJCW3pFxrkulYJjDu3lyxtLiv
gkv4IISde+AkEXvY4RAdVQmSvhEM6OZK/KtS4l8NJ8mkB6kGVEjvVDs3SvIL0srrcs7JshVoNqW8
rFACpKR4pTNR0CRA57ZKKmOkS8w16bKOocvuGR1ei9B/HocKYDvpU+4RMEtPYhBtj9W+NriPO/p8
7RBFXh01YliUlP2A0MuqWCV+xL9NQ8vKtZRAywOpOolUSWVqLNwf+vV8QxPADG3DZymff8O7x0yc
LVFsgJozuRfpSFrosSWu3TZacsWc/QWGP5327zFTkk67pRAvigj8oojARtbci3XBW1WWtWjCTdUs
iY/3idFzyiIZhtANRYtqjQ4gOmduidOLwgUDBl3sEKkBCqI/86W6C15RhCxJBxJ4/3hnQybyCYks
kojz9jpdRUqyLWn74yRA5v6gD/0NCH6nH11Tc/Oz1wen6HBSicA0IrIxfyXinNPIsK8Zk8iplAqu
3m965/se055uCux02IDreO3NVhc3orBdFkZUEy2joJTiU7MDIbRrRStr6WPStOFRytgIr+JEZKGF
kPqsvQvL0Jqx3Vun1fSTniOC7hBWGKFRdemuqm9DSmdJnHN7h4byAnJOBbo9nk+HYYsOJIoZClfc
EDyBGZTqfiIoYWVpU27Ix8patORTsHJ2SC4AKFRSqw4GpW2T9hxjRUelVfRqjViaA002d44cE0kL
L9FoWY9Ga5B7tKpEa0tKwtY1H8sEbsfJ00r9DV/uvFBo3qMBwNzz/YaP6ZMA3WvEXsrBJzBt9Zuy
2XnLV+yvCsSVcyIrwvejuVlK2o708NKcBRV90DwQtvvIoq8QihYWmlVZEPVl4KjTrHisNzIq+8qV
BqM8YkJ2Bolhct9++P5XeJ4/QojMRaYsmN87LoT9IUS+QzO3MZazTyNPNL/DucKOGpD6glpKJJXm
npQZZ+FI/fD9X4fn50mx4wKnM6BUx/sVhoh+MNUr2g8YsF+7Vl/LhT/w7ZEE5YDscMoiy8U3bKn5
CMdE7beJvSmpd52QMRPsvv0YM1gWwiH+eh3ekMk/3LrTobv6RvHRXdIX/ZIMyB1ZKjnZD5cze+8m
tPLN7Z+R+0ea3P0vT+Ha//s+XPvDD5Mxdr8KUed8LsSw5+Fl/0TyY/8lIHmIcJTJxJKTrf2+v4NR
yaeJklEmfcCpMDR5uN0PEYZCPAxLn+BwWvqnT+fjp/6nbrqsL5S4MUD+FSGNRbKGNOkhNo9hupAP
aOEu7mzy3PTLonzgYzDwWHEW61ddV5oRCeBdFpW5oIAZgNa//2LuIMK+CVl2GrLvWm5tkDRZnYnv
4W/dfRyH7vTt8R6wxHg7/LX/NNiwCcxhEamXnutI/mei/lM3/vGYeDWt/eRw2xiHWbqGyWKPN2kE
fqCP11J84P0SOe67IQTWXZ2tfnO5XzGZ/abpiKP9367rwapWRUuUwqFEjhwbIGIHvtCWs2j7OyDe
0jOxpd3aYRjcMnvQzZyzmqj9ODnQX3t9OXkcxG3C/f9wPJ8DLfkMf7CbByqrV1dUwWop3b8O4zxn
86fusnwj301W0ak/fphsNRynoJ9xRk7Fj8ddqA9L+hDRnAU9jKVNIonhQ8xmKojlUFAuWIvhfeRU
06wQbivgqG3SxkA2EkEb6LPp9TDKDAsNdTupnokaTI2UPNqP9+vTfbK99suljrfhtn/9OJm+kfea
k/dKypwn6r8aUBe6XIvz8p2ZkPIPBNXXTYjU6+GswiR4lfljOV/74eX0Cw7C+CrtaXBb+dcmmiiz
ur9Bj/4loj7T2qtPAs8vHD8QBkfxB9gCxpN1GZT428VEWKmezUY+LLOQD3NRTG4/aMKGoZnyE/aZ
LNmvv/2CjScfz9/coe5P0/im9tvSLuf+uBVtoyWwNkY/1DYL6HkBYTyCQALjn2zg5DxtQrN6NoZ/
NUXyX63vc2Jl+45yXpzFfMAsD9kp51QamngR98zAZHMP67fuMHTHv9kqpcWuXfESgYZS9UNRC3tn
ucq0NJnL0l9AWwlGyEKobTQjcy8CCKT2RO5vX20mEK91afaLmjEw9CI6shCcQP76tuhKAyFB7KVE
McxjhkG6cNqbDRdvapBiN+/VGRZ+bZdTmCaOCKostI1Sna2sutzAsAWxulrsoWzzqGm+1W1NiY7x
QF9WKHRX4SlPEkI/6aYKJIRnh1DKWnJG0P7WjxGnKs9K0YiKBVv+b8wRToTri0eKzOMGchG5mRfC
I+EMyljgqVowcy34Eu6M0Z3wA2wU8UA810bXuMHb0/fetEKAkH171/75X5FXQSIXS58nZt3dAMfm
d9NmEbHviiDe4H1ixuExcfNvDv99H28x16cIjziNS+DnWEAul3yzf4xL1nqdjjeNLLEhvOoTIfap
mRATFzIeYlGGWgpqUkVheGv8Y4sXkYgxspVBFznCPMvEIDYfDIv55XUuKvJfnp8nBfNIyDWrKiFg
pWqYreZWRnzJrPGNBjFd8J7GdEEtRARVa3Efs7uoFZNTK4ZVMTFpSqw4gsqv+9Gn+9sv+1v3Ke5G
56GSndX398fjcBkfi0qQQHOoqBhLy0S6ItbWInOTbVPVujWUk9gJgfBYOS6PmsZpnohB25/O18vr
pN9e3pfRw0t/7eLBraoI/aNiY0aDapNITqMWNOs/xq/zvE0dhnU+Wiql17p6kvn/jPnGuZB242P3
W23MshR4QQqSxCNfeUoCL5B2rrbERjY8h3xT6nGja1hKfvLK405jHncjPNJJ9L9+dXSBGP+mnkqz
R1+3eFhVmAXzHM4EDDeE4QuqkVcJA93I84lG3cQjwYxwyUsdvTGundHoSOBeL165scL0/TepEM7G
wP7kiqxtkv7Yf9qU7pEcHtRLX8lR5P4RDKeRrLstl5/U0lPUDIdrzG5ow7BSKaXAoTHpR1sLo6fC
G0EIR7Jah+HTMEbVEvFzUHqqNmTU/CZrJbNFpTSE85dAHkdeUUIyETh7stySsJ+H0x8vr10sbV+L
2glyGY8cQ56UUpZaUR8PZB5aKZggOBJ/xhyJYtPeN2rknPpMoaOzKdgR86NItVGonJnkadR9qEvB
YVwlLC4ciJue5SXnkFCf+VeLi/T1gXu/agiNFslDxQX/ismEVkqdSlmzWK6pkEzTiPF7RhEUs3tL
Jcj4dSknYkrjpAgp4/LgrWUCP3zDXlNEJhLjJUwOsiEvk736GBW1OS1fSunrYuyLLGZfZOExVlFG
2lI8UZSi+ENmGofboyIrpfGogCbvUMauphWCp3woJZaxoLZUkKpaOPhudRF6KQnBhhkQ1fJ5joZM
KtF5lsLnR9QEp5dJaPUmCxKpWaxFg5VzKjiRHXEma0EdSOZ6tMo2UaoEJLvlaehizn6bSLE/6Wm9
bomjF7norqzeFhD9I4+ss0lCZV1vrR2CMt5IuRCJqCTLjLMYUHwwT5yTGEiYVVmUHm9ddkqKDJcc
wccrSCAwYnY2QkXHypaJmVilZGFyr+wBtZoLClArJ+oBGlMPgBZhdLWRfK4ghxLxusowQZFtk5Ex
UU51V+C9C+9rDi5GXtnCFnggkDEez1H3iyQaliXNshCbbJBTf4QcyxY3N23lkxF5I+455mmlCDTF
Ug5dx4i9LLqOW9sANkW/aAVtEoTSRbvnjyJm9zRh/VO6nXH6TSXgaZ08lFbachJFFhb6+lVzhaIx
s4Uw96Op+VkAYnY+cnuLwFAut9vEcjS0GiY0VgNS26zLNJfiS0xQNZYlznLFNJfiP1HjnGgji//f
PFQStqUKpmiEDN1ShzwQraw2Vde5jGTsnkgGdVlAH6tOiTn8bStmplektySmxUqoH77/qZ9c25/P
h4cCalm5KBrJ4uUCFsAAmwg+nO/XfS+TJ95fWLW6KHZxEyJJtYtS6FKLxo4UXO/+HN7uMU2ZEe8y
XC2T773GyjaJwW+6UpV8L9RMBAXYkdRvKpYQSb06cUZIxUCS0OJgapIiDQ6lcFWMPon2HUi+P5Ph
i9EqJUddL5mIls814sWoNhG6pRFTKBFyfvyKN9UDExdy8ZCEmurfop4SrUtc5IyVVHR/eOkR6CIS
Q/DSBHEbWyU+/SUan5bdT94hj+T8UlIhFdryf/vK6vz869JT0bw+Kc3HyEEjxHq+KjaflVI/VyQi
bdylSEDa08ZhCHXkzuIdy6RXG+eSbKjo20cr+iohSSU/1fdYIQFJKIcN0XykMmrzFI84hcvmo4gI
SMRIn+hN5TFvqhYampQ2/T9jAcRaqlFYSb9YFoZa50FehxNMMSVSF0JTyjfrlulY60gSHlu+8S3O
HmjkOeZSo1OkvP1g/ukkxtBci9W6V4KyFiOdbItkxPbLhR9RizQfMNpIT3iGaE3Tf/sux+kR05Ig
aMn1aCXD6fkIjWfT03sdbh/7UYRqMn7nolu12ZLGiQVXm4XSKKOiNyZ569DYzmL6NyrKWyFbKYvy
0I/VpXqRiq6M3NxjQLdcM3Ckfl+K4XLeR7TatBALsESBGSuQqkuhHJYtWvxXrGhRii0rYcmwCzMS
n5Qit4zrYbEaI/5HJTGAlBiKJQMKKY4h9hZ/2lKuSpwbC/CURQWzc8AfhwYoHir2MkneyEuTG8zZ
oEmsCEdsHGQgPmIKtRR4gNcSW+q4SdBhbeZr5cvxNnNSNAZvt671QIkrwLSxEv3eaeF9ENnalCPc
0u8pVg6o2EfRQEeafnVOYXOyN5dQlbjGgWggKQksE6knz3hrdvFbmp+zhZ0+H8TH3/rnZUFKLKmX
ie6EbgkGUFURSSM1a6+c1pi5TooeQzQW2UF7wFLI6wUgSxWpKtncRKEUe62iv5uL/FvRuJYCwF+t
K2gyNVP6adzBvMec2FY0yaQ46BxpigQxiOOUUxQrqZdyC1+0iQK9JeVwPm1pdyTl28s8jiosFzcY
EZyZEDD77fFSs6LM1Nyg1L30r1ijcSX4AKsicY+CrQu2VkAJ4NoeH8BQoYXMi3orvvgllskrxGqg
WLrZloJGks1ZGNysYgBWh1gqizRVkwHaTHFpNDZWS2Hsf3y9rC0aEXmRY9AtHUq0BU6zHbfgI2aF
GLxmq+miaqBO1cryRytJM8nI+l8pJswrEY+Lu5yFVRSRIK3YRb9K220qqaDh0IXSZr0ZjzIZ8Wok
xCzGvyUtMREftxbtOMka+Cr8wqyRgq/fPGZ5pgSMahkZVt0njxQV8aFIzimb5y9HKrQM7l2kLKsS
MmW/fVUDZFHW2/lsY3N1kkmt2lrgddwAO0vkQ/iAl2o1lmtJGrH/W6+CHTd4HMSaWKZz1af7r9jT
DXev9pU/4B1k4lFIb/dxC15KdMjAclusoSywX3GAXpWJELcx5VgVQmSZR9TIYoga5WMCfCUJI8wg
V3YJmbjejqpTHm4rJmY46/ItmnpPy1JAPtkIDxtxtzKxhV8DLXnwpBuphGJt42yK8qStsurz4xC8
y4h4/XC9ZCwmTkXECpc4fs5zvi7S9Ci1zzNCYstBF2mzCVjMe+P/tcFEJUKYqSJT+ydiaqMUhKQE
mfTPGGRSIlllm0KWWwx20ve4VB6ymRPN8bW5QJVrKI3mxaU0MFucG4sdLauGiy2dxDGDicK0BwbT
KkS5ScCUEmwal8La7NmSNB4ZixcLFS1T9pFYUSLBfDBwL9vbMTIS6EJrXIzvxOzGWorFzSNcgxS8
4n80ArI5Y8Zv8hfLRclkGrfj/4zZ8VKObmltxyyrRMJgYHGxYhEg0guMEczUG8LfMHZarIo7FbLT
Udc1KtBFC/C3xxK+BSnpCwmtauHt8EDdzpXqoJU6s2hJaKb0k+vjG/4ZUwaNEKLkYkJbAmqVDK4g
gOqH5RiR+GQtZqFFxCo48XsEYisjDXCICppJRUCYHbR/tsGLSvNcAu/Urbv7deOwmGUR4mZn+8uD
cPUSvpEGkbmxyKYVe0Ql6RozqpfltPHQeMwRyGU8L6mAaxtWWkrQPJfl2SJTR8UjKQOEMLKvMowX
Xn3cmIYptNSZUgu9sbA8yTagIG92VxIpOB9PL288j5zGaRdPXYnMRcuhM+LSLvMKrEu7hhmISJBW
VNKxIrpNELiZVikqFbx45K1IyUumFDZLunFbwjkl8PahEBHqu6OpcblmVizCjpaAVoI3R5DHHmzk
SwTs283pho0lxI1Ukv/bV2A5FGXyAM77ioUjsr/SZb8GjxyH+6IlnCuEJxk2PAoVK2E9KbjIUWT6
VnxtvAsZx1BLFAw1RYms+u0jyqTcNMpm60smKPIhs3F5vo2YwaRCKbRtl35I7JJqCX5XzgdsVfmk
PA3nqU0HsVHJxXJPidDtvyo8iDlLtVhKuB6e+BbXAaWEO8VmtWNmaZ59BT6OYXXz5zGNVajtM7Gg
ZKxGL6/F2i5mMGXsZFOpw1sJ9m2Cjiikjk8dJDuKZhIGCgJsh9ev07Wki0aDHA6mc/zXBi+cIEct
RttxXLvpUKnIC97VEt7vQZS44jHj1o+giORtskfq+rYxbEUSouWioI9Xfzb2EFGBUlOE0kUcLb9q
xXk/bKP7pg53adrV5lTYlgBSkQg4V1ILUhFDC0qFnhYFOXADOlu+nCgbjXRFlWAuTSFZBqGcxAri
UJHUSrG9s9qZWGnM9yiF5mq33oeb5BYTdTdNMYx1SOUSRAFjq8XQc5pEgLVRrZ8vD3Y96u+MLcPd
VEW3CE3nEnt9fZNjKc45kc0bh9wcsWxS0Svd4CdY4yniIxTCmNK440uitRGfd22awI+cP/XX5+P5
M37j/sfufJou4NRf4WfcAPi/TH/PTVKvUz9JHQJGmVk9pXWeRPH17TzeKD2QSl9gubtxfz0fj3/5
Is1qr7Eb1/7C9Adp/egvTPc8PB177Sf8yHrYD/MTz9Q4lA+DLBXclObRpR765w4oamtNw7VWW3/j
5TTtAdkdteMulbdRzz8BojHPVz+x4g+/cpFo9Iw3rjuXf6L16/ZIuA8cf3e/nbWjT0JOfJj+63A4
9CftF7L/pUPK5ENq5p+A+uZ864ONX3DlT9+2RwDlafPzdqe3Plxuu9Mk0PvDX8RTSPwSYbWZMRpg
Md049tfb7rkbjpN9v7tA2e7p1r30MrE05Y7UrET5yl81TrU1cn+PURtl4f4IoPAno7+1m9T+pBS6
o/K5f3fAalaW2s8/XydTSfmW8H4yX+vTO9QU9VfQpcq3XoaDJMwqc3PX/tJNXo/9BP9+97l/+mMw
jDEHMqcLmDyGq0w/X9A39tXT/RlWdphWeDr0Vyg9dfUWw5t6pRnROZCkTpvcccj0//2MTWaWvH8d
jofpN5T1sfyGizDVBvvJkJoWJHF+1obMYlZjfx/21T3foAb8NJHE3EJP4dMmjpAI554hEL8jtaTB
dUIz3EF/+OIUkVTB6Wkvx80WJ13Zf/72/EUmk4Ui0Fwl9BSgP7e7Xw7dTT6pvOVOemYhd2fySVfh
C8nUXSBvTiaSTC9Pw1PJZXq/nq9wYccOfE2ZYM4t0BjLhhPje6w5brIkoh8T6T6dlY2TGlb+PEyu
EXLNZbK65S140UeCQ6IAkOlUq30AoW7cndGKwo8OfX+x+mDXvz31k348GOLDn709/nF3Ou+O3fuk
lyZGH15e+us4KTjuOadzdKtuQEqYoInhMvOru6eJLybi8CwnsiY0YCJRMkVrgiLFAqgiQXG9ytJa
dmkBpeHtrT8MUPJjuvFM4O3f9/76rhCuZ8KQ32qM5vmag02VY0j86ic50JabfkShl830cK5aamNQ
/8v8YC1m/JkEGwoy/f4Y+srJN/7kJ+JNNhsrM31rAsFfh+dr99Yray3CIzbRna9+JcplWsdt5unS
PM/Jr8R/HQrvUF/1B5PpEimVCXkd8J85yfX7JDbBhZU/LRNyNbWPbYKA2t3Ot+4Y+/HaXy50wfkK
KvPhj8OIlgCESP5+69942xspkbeJlZxplggDSQB65vfuuDsa4qjDd/trNyrrzAn1yjD8XOBoz/n7
0/0NKnfAQmAjZPJlNoQ6bfoOCldHZfNlTQi0cALpcnl/P936F8HMM3yQLd+ZofEJgiGzzRM5p9bv
BDbVJtFTWoXA5WNqyQrhutOsWpL/+T69ryuwjbLRij9tNINsueYRrASRQlPzIgkMDShnmDT0dfJ0
dqVyUH4RmHotfK0Vc1TKZtLlZnyk0nEOvqKJ64e9xkMFORYwidPco1yv23rlFRXJSjIZiYpSYTJ3
IWj4oX/55hYTDk0RCod0w5NjgnoKQxH5BXmKNM3Ze8yVeyzIPeJ/1YwI6y6XyUuKSbCcrAascxuh
eL7/+SfafHY58mKqdCmlGnY/hbIfr1dKdOTT+QmbtyV/SpSfHUBn1N94Q+8QxW1sBzVhQjDG05w7
zuE03IbuOGlP7Tir5XJKr5wwIRjnwIoI5hLDgnScJnAxrmd/7DtwEA/bVpY1S2md+ZWZdK2F5j5Y
ecsY6WZ9RBDB8TuJ+DLX74/fvn/sXn6erJbd8bzvjvh30+OZnBkhJm8IZ5wcN2nU+CVmUW20erm0
EkBRlDVvcMiUF1kKhXTJy/TFVW96yRldJrBNSspQQTIpj4gKgRptGfuI3o/9+Nr3E7dNjDaAnz6Z
jIfecMh0pYOiJWpi5RbgY0ROLaz5UQRoE8r6KpD1YMuenyeX7X46jETyKxKfXkKGD3euTIQDsAsy
vucwwthnY0jDP5yTHRx5EM1la+QjlGSAoLGi2nx8nKzw8dIJgTbzeTZ/7joq9GOEXKFFkokfJbUB
y0CRO+oPqeGkDnzVtl2ZBYoKL5fPLOiFUj5MOY1tRgptUwAVUSIG8dAoEYcssutw87urwRaJSSLy
mkzQi0ja6FKapWnVssI/4jkkoXtlbpWU90VW0ZBVgCucZpyPFLXuUnquqT/XASJaz0f1Vqucs+iW
FqbCFQ1vGIBZcoG4nI8g6uqu9eyFCfqsiPoXNPmtPD5yOpA7IBqLXvU2TzSnIjz1ViUKMTCFIqeV
h7J6tp8zB9fWSekAw/OtaMd/wFwEFaI2O3E8dwe0X/rr9Xzd9Z/AcuCuwTRKFlxnmSW1P55P/XRS
1/tpN/bHZ5lKxk0Ps1S68f20N8l98fuUw4ZYr0ImkIeTN0tKYMbkxIScTMNXR4DSz1pK49r3X/r9
HR04kUClnMK0B7yPp/vT0xHsNZFKuSqBCWTE7vLFxo9BG31RuC+lLpExQv5fXMltsbDKJOHfxfj+
9nQ+zpGxb1yeRRQDTSVErBAPWRHF9ULFpsSaV7/MqqUQNkvv7JHsbpMDcH5+nnTccz9ZESctVpNz
McKli1YpLlpNXE6sUmzW8mWDv58t5QRr8H6BugaoVpke5Ov1fBr+NJejyL+K92NR6Y79C7olivxK
+LAycuDLUYm+Nhkv+ZZnmyln6y8HRybmdu33sbdG5rWfvKj9bs4KwwPvY0YACfCBC9OYHblOv7nk
UVHBJcc0sCo1d2j2RCwQ6FLNH7jmTLvncqk0s6Wo0K3FpOFdrumaINQI1+ZC4pHzrSpui+AZXM/n
m51pqfBcQ6NoqV9Jd7z97fh+eYWj0Z50yocaQhvNHfHb+TA8D3s8X+2BZonoRodGCUQKYjZJttzg
fERolvdfAEANJLqpIHFOG+of5dyypb9WcEu0jz7YuciuOQ0jFWh7M4c5eZOxcBp5MvXsALngP0ju
OQkQ4a7SU8JZNVXgk879CxAYmKTvb/2Io9RiVAu/T2C/JuPjtv3b5fZulznxy/kIrr8aEi5IMrGc
nf2lEEwVIehvtUBzwpfUuof97fl87LuTIosLnjNWGrP/9707Drd37XktglFZLOaz7K774X7awz+M
B4Eq3lNZpdMiGYaClwfXlyfX/BpzXIulDo3nm1YYY4q/k4txFoH8op9AIV0un28Zxr4MXiNAhWuy
j6ryHKObJhY+2a87+NYFexShXpJsfTWn/Z97BB6AdOtwUh5B2QhGpnj+fC23clKpYA9bOyPildd1
qPMyPhemcGkpRpzsYJEtZmTeLB2Gho3YQ+UfSOxveyjG1eT2Kngaix6T7hTltGsuNLWUirUiFf1G
MRNZtEW4UcWpyhZbStrllmKmbc5LFKe/l+dr49SayZML8UHxkEnfi3LMQnJ1fBuOu7f+9no+jKLq
rz1HwvKaguntth/urTXxvrt+kd3iNdqaKVh7uxz7LxA5hhoH7ED3doksEfzWEE8190Lzx/P0MUaj
J7vku48/7ZzpqbiUJFTa+mz7nGfb9vqycpkv8z3K4uhV8/pJmAgc4zRvN6RXlz1wCsc2Ygx5jkko
LyblM7OkLMWXNMuW0LImJOWNwJj9R5QxRJRTCx2MxUCmqBBwPC/D7nA3qc5zd1CcFeKP5UH4Ikgp
Tj6YlqHL2pBKyVF5QOzm6dKby9lanA3ORkpVQu4DALQe3de6//e4O92lFhIjqhLGTwSCf55tuRPE
tPBv4E92r8OXod+9DV+mW0mS9i9f+HyOK0eFgCtB/UQSsNTn6RrBEUIE6Et3AONeptV4Wr4VvXua
DHbYJFR6HSbvb383HUDYNfM06RxOdhmCJFfl8fFwcfvztKYR/WM4xl2S7p5kOvlMx8iZzBOKtsUY
CoVPe3nYAmlrk121ZXeJp+lbzl197tccl8/Nka5Cwg6+TB36948TYxQ8yxlytT997/Ix3NXIHFF6
EnbErQluvPSeVbHqGiOzvhlC7NFoGl++DcGXvPkfMBkSrFquT2IbbyCBuuR6duYndHu9nu8vr7Zk
2Gz09f5ilio30jSt3yjwb1bGyULzjyErU0256uqvZmRzgg1XMY4rfer2f7xcIY5iOiJ2t+Go9M00
NVke9oHEN+2ZJnqihXhR9qZNbuCk3HXBVf8jCWhimA6r7ycqtzdli76onACqbBXahkTLXeLDQtu8
pyZks6+QsWZNvm0AR24UG9iVct0uU26uIa1B+Zymmol3Y6TfpmnKsLcoWxEwC1Mo+Gsj87rU/UFH
2nU49LEnmXMSja5t1gmxXdbhMZE7IBeqvRB/TAT+dfslaqQTVUpOuySyAikHmlDZdCGKjAe1niGX
iOpgKcxG5ZETLVWFdzq8vbAzYsb7BQsBUmWrXjqSEiYnfb6FlQF63RGCVJh2kLdZ11yLzObrwES5
67SS15tzV/N1Fo5ZdSI+4w0miSHRrHs8jT90G/4IDWmcM4O5l0yyuUpixJEXA19+c9q/nq+5+GXq
jVIyMQq+/PUKWbHb0I/yz3pTG5SBDZzDx7+cwPlRFpxxVp3/8gPUfyk/7A1hkIgtt2rlx71JSRBF
4Ou/9vvz1abbxBPz1iQZhwZfY4LqFwQgQRr/cb4Of0JBzVEm1vqleDUMxDCjoZxAGx5g7U8AOh3U
HRBvi4wwxW+/++s3H7+RP/RbJ/BxnkHlD9OwXs825L51x+MPZ6HAxZyP/7CtfZ+X52z5y0LisO+f
nyeppDwJ4nH46UfTS0amFD/L/RvELFI+/+CMoiT+on9H4Fg0xWKTCjNmEv+YdyTvknij4EuSh2/O
R/nNKhQZqXGnTGPliJ+42YIvmFgVgowFDZmZ0FLpPDOobsZvLMBdlFSzzHXUrtLBf/6N/LkPSRMU
Q/sxU+ypUCJRVwh6paUT7fvuejv/5dQbqf55OAk9n+kM1GgjnBnqmLkcyWgn+UsSIoMnk9lw5ojg
NdMpQJRa/lqIYo7HyYJUfrTiiiKe7rebnF4ucqEKCXjwiW+dNt81QTrZyYT9+e3prH6X8VWkGDyc
ZC3CXJn0QyTbXuQ5V8UNCcX79TLs/9COikT3KATjrXsCO+cif1gzxTwmE0fiA+b5/bI7YArsffKd
T2KTdUVgFhBmxbyZ6Wtb9+GIuAZUkU7DWVhrOrCYhRl3OY8xd7cikAwEeWKuWbX7t+6AHEFGWhQE
B4pFUguj9HQ+vBNjU15LxkGXzO7HxSrf2ZV3q8KO9cjakoS7DqiuPx7Pn22nKnQajGAZH4brTBlQ
GcQVFxyWDrSvKyshJnM2u+P+Qs/P3NWKS0hZNJa36d8ZLsd+cVayP1MRPB2MElRuWf9TBivD9dn8
dHiFh/55lKuizfoIndrT+WX3jA7BzBwxPqi58I4DDjC3Dj70cOpuvXZc5N2YCn6HokBXI++GMk6C
80Tm5MHsLi0YUSRGIX/gaGyD+tk2zeCdIVCEuaq51dv9kLxKgjmSz0AaxgBRjibC4NvYmuwJzBcr
SbzHanz+3eW1G3vlulMOCiT22L6CzSmCj2dPbLa9ATpLksmRtYogKhEsK4iaK6dccVgpAf9svmcC
1zWjYLg6FGMqTkba8MwuBm7YJTrAcUK82pSWsYBNtf8DIiLP0O4/6fDb+eXaXYRSRSToyiPaOW9r
Rev9OkpNy+bDYv6QYOF96iYbazda8M0dLEzZTEp+G/jG3Mb5dJY7p8xvN/4U0jk7M3anyfrRz8+1
9bvzs7Kkm/zb8V35rJo/I862zRgrn5X+jDJfR7+/vl9uZ/zC/O3uZS+h9WVOXWQ2/GXUjv3uOp3z
PApeJOHEVhY8cY4E9inIhJwszkItzBHC+Q8KpcZTsldv2rIMRpL1ml76SRzcYRypKdt1uGTSiedz
sXhrH6ttNJ0o/QzFBz/M0+C+ff/7QSZTeOYmkfxxAG3fnfrzfSRGEqYILCiUTLHleB23+HTtuz9C
YS3vLwnJWNAVLPH45flXMZKKH2eeHYmM3o9j9pfUn7hZzpOp+0mSTKZXpRw9QsQgXSVJLtMo6400
lHWU5NI9f3ObSZXNJBEiw2mEBESSJAqRLLKbeSUKkbKNrMQdSaHQ8BISK1VaiYZyIiVhl1Rbh7aX
YrUO48fffrVPXXkyfg9Y5OZ/HqqZpzd36G7dxndTJOHFVJ7Y9T5Z75MGR5wlBVnJ0MnpmlanCuAj
kxZS3q8/D9Ik5lwjT0l7xX4rJGNJhCWYUygux9fpjP9QFuMPmAx7uPa3+3USa1cAOreXhOke5VRq
jlPGAQGsAZZ993YfIQV+mx7AbrqvAWymSWfcPp9x08p2S/ousXR3zcufzoMizDO/TZJTX/FxjIoX
MossD0m8KNvIOcW0t5g+WOXVvYOZHX0W1GpCFEBjNc3cO/SjoaKQyLnXAH6MdVxMl0DkZrKC25LB
tIquwAtKgo15Gfv7YVrFsRtHaBtBgXvpVL1ahayXCU8Ss2yfh8P5s/Y6/bmQeWUGFS5ue5R+T7kf
vUUeJimvUDDmzErIiypDeRUokhjTtiHT2iVdEQnzeB61rhJzvCV3vOPkad32gMlluqpiuynTmEY7
fu7eNVYjx1Fz6ix6s8QSb+aZJ+RuTJUBeKTnq3KguT9Q04CapKxaUk7UnwVp8fWaCEG6pJ5aQyEL
BUAiWCoR3sjT0IFbkXnrri8D1PEcj930MjVSWXg9jdXyGOefhNkc6Dlf8fsTmM3d6PLUWOl8xezG
9CfdEUDyZGQ8UJsFKUIhFV0K3bmvcQvxakV8IazxM3C23d9PstP+T+ACeOmYZ5E86Nxg31oPyFs3
CzJifDM3K/Pft9LnKLem+5Odw+gyehsIQgUl0ilnOoA4qS4HXCXZM2Qdw+vN/su3o4ddFUikbc7s
Cb50EW7xy4a4pVi0PH+K4Ub5F5Pwu2z+bobSnh+DTMRfRRv89hyYXxBTFuRYOAui8MGChhMGa+Qu
BVyTv47acRm7JHklNRczmI90A4F2dbZzxG962EfAPFZ4szRmss31Br0Dl+N9EnA27gZpfFBohp57
62CU478l0U5Jip449umX9BEaPutOtCx5PuMNqu3Fz30WnFz2Az/v6xPmt2uOAWpg8WAeIOaT+U7X
u1SNTSA9obMGQUKzOcAfgQ1KJEmhh2NBa6eORl2Y+mcj4qF5Qpx8QV43dVOgfcdQEr+smadpEbyV
WSReJpJogNVw6q5dbXy4WJMwPPQmdIh/Z0Ctz8fRug/7SXNrbUdpS2sMZlYztNAGsmJhZ7qOJTpZ
gL5R+14YQ2nilZvcK5hScCqoJE4d3iwtv3Bjmy3qNqh2/KfoJyNwHLqQsXOsyKUjU1qkovGzPTKr
IMfd62cHYi2RagMuSBwdi8XrhogTesE/kcjWCU+Woaeq4JqR1TyZyHoySsfacpAjMfcyZzzxj0Sx
XbAqERsUzLmLpai5TUW4r32Wxz5VIozE1E1ugalo3Luwkg1+HRcy99fK6/CvEFNspc1mY7LQlOGr
S8iJCKD4N/DRBiGQ5q14iudntKgufcQyS/OGlSSm7tZi3+F+DN645G6XM4dhIdssBoPDsGnm50GE
zat8zR/xbAMiJPm4F7sOy/lpz2ozp7pB30nly+OahVKxi1AC+qWZkbf+abuLy+E5co4Ju3C0j082
FX18p3yub6ZkVe5tODr3xOSnIfmOKVjsHIlwTUs4z0eQsdvGvCDUFlbr2PKN6Re0V50l3jAnkTjb
mg4gDoNi02ZJxb0FspfYz6dEHvgKDrKl7nCwLYm2EEBcShqKJ2sYI9iz3cZcmJ4fIKD1dtF2tsiG
uUqs0zjZNMNp3p8qMtuas25gLbt9t3/tdyZWKS8ivHAbztMvXCbmvVsSGzRhRYj76hdNVEdeetRe
spbhTfYgE+LSwjtvXCU5XosOu49skoRsUjGXG73RmlM9INgQbWKGn8wjTJ+2LNOb9+zPQ/58nWcl
6Jd59MmVrO81m9+Tjfbvez9HQ5zQVsIWBefkLurWduMfqNdEGiV3JoYxbiocaW7nxi6DA9aK1g+z
qMKzLEkd0sTTk0+jBgmKhtm5mQFmnpadTCdH/3I7M3Fh480evSVmvCzcijzzlokeKeVGuRkVvfbj
ufWrorNo1xuwdrix9+Xpi+sPNxkKuclure4clzsAVpCbxCZO3FzYwwzHokei3H2xvHtbzfy8m8dC
mQvLxCAG6UiGIFmV5WvLiYQoJTptGCtoPX4sljPYaAhOkfR/it2rt+56k106WjLuB6tNC4GRlbsl
QZkOKRD2j8z5gjhsEBKK8vflyr/1WSm3ORuJ0xQBmFUkstMEtSRWoTqJ04skSn/a4NHk7TIyY7Nl
k8f9ctLApvM8NPHMsfQnHCRFkoj6jgrSYVXMdVOTx29frnVX7aLGV8FHLOfXWOTBELfF92rEs5xD
HEUeOFeuRNRkZY/nEQNgvqFNui2/N5IWN9/ZUCPNAUTAvSsSxfIqxlJ7gVInI2UjHJSHscGSZkid
u/EMTpxySoUngmPUrRfbd5/6B66+LDhAiad+ohA41MEVioedp4QdG5+Un/Z0MpW9W9eV+xdSoV+1
YMkIQ7fr2OB8vPOeooxY+NvOLbCPJ4Q9mpN+/7O/nkUCDXfR8mnsDlCjIegLbFz29Hzk0FXBnQKK
uqNa5iEoSb6KDRuXMHJLaw/TGh7HDiMQEeZrQqXTBJUCrpBuzikYLALTbE+T5nKuupytM7NEnF2h
S7dJ58vrTcIYRU3XO5wob6mJh8IfG3oEWdLwBxc7v5pbj93PSpuIVBaXWFARsPku8yySbAikv0iF
zZosOgwib5/IoHYegz6//gtaC/oqCr8KMlxRfraicZZXj73/XCRUKxpDCW+Us4HuzBVr2QnsL/JI
xv2++WE5DpeuLjOYsQBu5vlFAqQrzf0tE1DPx85WZVC1LfsW1vB0PZ2TQjDFO/3Ti/l38e92W12G
LM24cIghYiNWSuI0S73FT7rJ3OcXER8cvy3DoHNOvp0M8e54ee3kj/NVaAp58bWHjr6nc3cVz48c
n4EgsdggO4Q/MXUO/Ytp1fhzkoOH/ou8jLWzbBwCRJ6f37iilEl7vO2sdOHCl9lPoaxhA0Om9mX1
D2SHgbQy5lgQZyv7lA2mNm/FAZNerpOz8gLjdGzlCY4YNTmYBY6MRJrO74MaIdddaaetoq9vunLA
QDYBuYjjl/r6AkM28aM/MN5pyGDRpxl1YKpmIL92vr0q50eB+fLU475P2jy4BTfN2c4EFslRaHxs
h0rodcQ+b1dDz0rCNNDo5djEbQyP8/Z67WWMvZQOdgM7Iy1qEobzw1cs85kfk7dIXFzQQKkDkhzv
T+4ezvv7uLtqr4Mqc7zMICl9PuE3fsh0jEGMBb0MCc3wylS/m03qMZOKy3w/3cd3uEaAxpQlb8Nk
Q+Hn72jKI5itxUVEI1oiQ1tVaN8fzmOcVEsP40k+YTZkvj89lupDb3mCIt2KVottPpyMKzetEqaz
q1XToOlpAipdlwM7tX3ox8n+PXSyr9pQ5dkKrbzGSzg8Yr2moQuch8HG2/X+diFP3FyNSKtZ59us
ybl7Ohqkc9OCYo2GcTIatIggPiQ6nxDveI5PH+9vVkWQ3V6PUEyMDaeHmBKmCeh1vbY5yJmYSKRY
PymXR9jyPc2hh3nCy0YKWRtSsLLZpp13D5FquJQGZabrA8e7MHEK7XiD9zTdokg055IdhKjli90n
ANfZd0eNVsKmCZZxEktRpFKtGWC9HvHrlFnD63C79eNt9ygrtiwrCQeunEvG5V5e+smHvF3fd2/d
hZDpRsCLFUmxxZb3U2DvP7bLYp3h5fIErmSXUF/+K7vPr/1pUx0vrXMhYNwrgmi22zpzPdVBWj6t
SZrwJF2MRAkB5bPsNQ+XTPVckcOSSi15R/s/53kGM/rI2N9WIndLeBtMj5wtUZkbrLdWhNBCyqK0
ppUP3NoszS54gqbdXDKzEqpc67mAz6mrsPoAm6a1atpi1Yi7KGEYwa66DOJyvBp1iGvrsMnXqPp0
HUf1+TFbbjiny0yuya7X2vUi5brg4vLmxOaMoX4JKa2XoUWL84psYZhxkfWd1iQlAwvKi0SgZkoZ
I9QaDsyY0PI3INPItcN3q9l3p0/dmMUusq6ZEi12PXQUvEgtC6itrVSDXThTh85BqOl+foaITy86
jmaYNGMB23yyHqRKSQ0ZSWbwu5xdIHmTKvMH3C7TKJmDIkSwrAtgEW4bDPq0rhYmfYCaNaeMRSmR
ro3thYywAnG6qElqTzIHrMF3CDCqheY5F2F0HgHJrUKezg4ItAbm+fNJ8ayadJ1hN0nAU/+ys/En
cnC29NcncueCFN2DC9RM7qMDs1ODJXgGi3W/748wrYDmj+L1mlWq1Gf4G9SLM9KaLVxd1XmgRIhs
ufJbRlz/4qtzrLmXLmENi0tkvkwkxy1USBELiQ5MwgJMBcTtA6Tk8d4dN3SH5MyK5pNCFG8TRD7f
968QPY1SLJkKFeQLy3/ilCBndKyjxrAMEEKT4XCcZMHFdj9vTlHmtnbdUi4qD5rcXw1M+YaTKtf7
AqBt78Fj9O9kQ5bzEF35oDxBSAJwYiZwNGVCXCucFbswSXb9gBTeqtniPVPU6d85BO4ymc39zhC3
ZfH+nNniGUumxFWbOUik2I3VBVv7h5009s3dEZvJ78t2g8hcVCjyKRaUR3nCRvYWN/Tok6u4mN/4
er4fDwgaMKN/uygwtBO60R/4W8C1+NjdvwGGyXJV8Gf6dTXZWhGRw/V2T0SJ46aIp0wHj85vInos
pFZyGf6BNTz1r92n4Xy/uhaZYcTTmjMQWJZItKbM8AXbbsHJJ9NhBOB9voErLipI1R+JzLCvUn4N
FfOUyBVjV5Xf7ZzRVrm5Xnetzsxir0nJOOTen5jlchPWCmCsPLAv1AWRri+vzjZafsjANBpBWh2/
nmnkO224BoF5q+b43x8WBYyWMunn+ObrZh1to8kZC2sRZ9emoGxR6zaFktrObWB6JdsOZ3PoaISd
7zfESBFtgtm8ldkmWxq2BS0RiVsXtDWyoAUMqGUAKWKbZZdy2nchh+WjasOYu9F3LnHIngykc+7K
enIuxLg0pDfo8YozUeZHNcuK/4nrUFTqWhfOw6ysFWM94YqOhWARrDwMGFkrRQ83ZOvCjbnJYRFA
Yv4c1HYu9z4wr5AjIvdG5bPPGsgEjsjrMN3Ydf+KaYFoEwEpDlGXpmwu3UbBRH9kBl+b4BwVDIzJ
zO2JNGZ4lp5DNJ79Y5yyqKctZqxpaMW8TeduA6qujp3+AzH0TpozyxlJd+6+M9+LH9dsST4Watg6
cVO0cbh2n1XYBr5HxrrY+IWLD8spsdILq0WV5Kn/HLYCUghdmRZbsOlxaW8RVVx6o3C+szQoxX/q
b59hQJOKqVF6jyyMSFLwiZFWtPaHWKitTNlleViL2zkaUKYFqUmIGmU6FaJ31XJ1cv7J2ETDUqXH
oA7SQisLoBNeIvXrKS2HJYgk/b/vw/RvzsASsX3S0j7vgqx4MlppmZL6cwI5FjwM5Gjl3okIAZ5K
y8A6jO6EC2UvqhcitdQp6Rqe1Z30HjJ5IxUXVKet3CaiE1kMKS7GNnWH3Bu0PNjWqjsCMANWl7y3
kuNohtgp/rxo54xnPkOEtvnpLEOK6jFzZLNvc01+FMCm9PHPxVKCouf37WkyUjBcYjuyLeg2TUkz
I+seRulDoDbnYC8O4RojK6CN516wux9GPBy4JJzCEO8OSEnXDClzWYI+RVmRSEMjk10hzv04p0od
ZpEzNZ/OXyJwGwVXu2K6FHfn/f54HzHGiHl1xKsRKTFdkzwdkUIQ13fSA3qrPQGsA+sAf1GkUjJe
xGohT8e7jGaSM97k/fT42XKBfHYlkZPNuGB5P3kp5rXrrdYk1E76GmYcn8OGfVQMVkkIheMLhYHm
nyogGpYQMD1FC6eJyNMQsC4i0prFa0v5mPkh4oCUZhrUWlovKMUlNUlfe8iYS3f6xYLFfIcpJvmo
vDAiM+QWqzAh6uiOmpYzEOIHHzlxr/WhdiILKw+3VYnjTlPGLgsCoAhHZumasItMrGaIkXKkGUXQ
N1CI3bwpp97cOkj5b6TJsC02cOYGM6IpOeP80PcXtU+WlEBk6MpZZb9YQADieLLoo+JSWPdFYahI
JUvNNalslAviGtOwASm8vuilNYwhycZ3gpVN+kE7t5p1HZetWadtZ1aty6cYRv86idEmXIGywjIO
UVjlmmZtmM334YEVxDVtYToCtGzt60lVjbIRW9dy8TTdX2exNy6a7EnWEp8RFzEDti0DuZon/KIU
1ZEzvOsX4CiZUJOGNlPOgGWLlsS55u96G7qjlsbB9bAbUt/3hptrCqVvNl6a1FYcVpapIM8PcUum
EGAll+9vvA37P97FVWQcDgJbUCSeQ8Upd46Hnc47KEovTbIQOKAQySmas5WuhqaMI0fc0pBdiu7m
Nr0gHpQnSAYUSYaGfEBLKTabxeMqJxnxwqtln1FY8R12BeLiBqyR8XO7aapFL1bKMsa7cU01T8fz
/o/R4n9AobmaSE147D+YSmN9Wtu2M6/wej7LyfyUBQDF8nY3nAYSegdpCEU+68JVXdElhFkW26Iq
vnaNxC5wBpWGEdYwLV4bQKSSRS9MKp1loGxjmd4s4fJdtw5ldgDBK+d2Ei5C4IIhW6GrU5IKoLHJ
9f50EGiSr6LDX0gX9Di9CTWjkdKUBhDJ7GLMyWJ35nUAVPZJqvjarwj+I9dGwuzOiStXGjyoyNAp
V7Nj6B3uvUFSDrABzeZlegnZOU60o3omSE2KLX8s5Cj35m3Mdss2KYAnme+6GD8oPh22g8tUls+g
RiYKKd8f5StMnumWbpiam1Mah/NncZ0tUzmhlew1BXP50PFLHASjZfROl5opR9PlivxyUk6cqGwu
X3rL4oXBpZlDjxdUkF40TFywARr2osQ7yjlI96Dzyhottj3W6iWjpVQmLXmQ9w0SOGsZHLmtcjdh
+/U0GYKBhIggIWCaiPiZuZaTNSusCjhkjsg4wM/FdW5u/81nB4oFE1wAoDzIJqyydumlADT8KN8N
KRbG1F1augk0xpuyvBWpjctoahztplRVrZveJlvS43qwX05nSG9aa9OVDk326Z8qXAUtm8u5NIht
lIg02iVcldDrpLH/BH/66N7nhndFsW69z6XuUtxbymlFWRLpz6stOIVmLeG37vrvez893OFNgSmv
l0yRfIU6E9fnBRJpN+MPjubVo/W8dbvNivL+hN4BnaYLgP+CrtS9V9qpqMFqktJHH7aydYURps2E
NFtcU+kmBWd1mgLM/u0J61j2ckVj025YlCYe9bVVnHM4d4Vvf6a0G5rtiTfzk7Qm7+XImWyTEpQF
R8tBbK9qziNMQRogyL7AQ7aLiQn+htVuD+jHNMnYXOkGrtSrTNuMM6OU85YfMJcTxu4MY/yKN75o
di5lESWSyDgwXgu+j0vA17XB9svy1UMjhcOPgsumNQlfQXPtbKWebEFstDJrHX43BdZbfj4jMb0k
Nf/tBu3ebv31FIw7sH+2FUwx9f0hBuwIp2W3AfA/R9GE0iHoP2mEvpMhdBuCXQQ+X5pXMeJWkV27
AxhlL/BX6XBTX9dufgHfZh77BWjAkukRsF0zu74lU2rMm/RVqCISjk9JABHbj+0x1kJQAX9LHm5J
RWMrfbBiUcbmP9wQXyi9U+cStymtsd+wCgKdOPtZq6/NZJJIwQ1Ff1qNn1hO4tjNAxZkeglfVYT9
ORt2RoCFPdCN3xJpLJPL4nIuK06IYBOwJntyZlCU3YIZ7BC/IC8/oEK0SoSpM4Q35SNhM/Pr6yax
DflsiGDzZwN2wPF9tyIpryltOQRQY5SRJWHkXhxrU/pgyyLNqW5OPvSEq4ZYkbJJQbViOauYUmNh
VYPOCWSD3t+3ZYMaQ8hnX2/jhy2ln1nD7JN/b/IOmdIfO5UoPPUNcpFg02tX6NDkZDo+YQmPOa9X
LVxbBX7BVftyK9q/QqHNWascznK+lPrBQyKQtyqfKxHT0icrxLuPfU+gnBsm8f6ATvWEyEDsufvE
mSYbCFXLFZGBgSq2tYS5gQX8e9N74Tzpp3fMv17O8hADN2EoKwP5OIMguv54ZSqeN7DgfeXtIvjm
1yaTqLk15IeoLE39gKV5CgNFP1I+S7Nw6IL5zWzjb6bcx3TBCjRg6uf1ZGXQfGyd+9NZ6wdJ/bie
rFy0zYwBxo38uV8+qSVwrmqsBC/105uycuFyK8Iu9bN1sjKYDeEGQpwOsX0nHiXWgVdLQ0VEf4lI
tgDXlOLcOcBf01evAjBzomnuiXEZIVILIedTJ2JkngMYY5mdVkEGWr3dR0DDBa9FlC5EXFqwVYtE
PC0HkN2wzPJ8O+/PR9+qNZK/DbwhU+0jj0UoSV1U4ScJWErdJDve38537XuvJIpyRvmw3/tBaREv
eqLTKHQ2e+MTnTqkE+wHSodOGsRpSQqYoFK7spUoh/7p/vJiIaUBFMXixD3fT0aJnaSaSYTTJsPc
CaYNDi1HTb7rDJVDf+v2rzKdzA9zBwfGajCyntsrdsfDGLZhf1MW5MfT59BrkFuw2fWS0LTuv+z7
i6gSDcXEz5m3PZn4tm+/dvex/+X0vSMxcZUQ60I6tocG6DQQwW6a1FH6vbsOMCH99+54Vw67JGPi
YfxIxh7S63nUzqfyF4ZlbW4N35IDut/O351BammrKcikeYNAWMonM3FTd395VRZWkmNGxZsE2mOW
EaOyN89EAeJ0sLtv3/9xPdqRuv/47Udlf56TIIBuWXt52lF+bAg/Ak6gLUsLT/xsj2kDOxb+xWGX
KsXv8BSV7/05Y7NQWqbrBSmfE/4pgIc4/lF8X0PEM3KNIe7lE+0/dcftDzQnjJhivJpZ1CRfD0Pk
aAtPyGRaVwuzmtMQwyc/WQfR/eaeMAGMemIWt33T/vVV2KDFbhnSHcp+/cG1eHiJvK6YAM/TUIBn
siwQzXazKP+IcTBW5fBH30zAeLL7xx7gAVzv+0kc0od6j/QeIOl07r5F6F6sIwfNOU5bvNxeFQXq
/VgsIwkCc/MkZiSlEEk51FC/KWUfxIzIZyCs1+Hl9Tj9x44isABMGuy9WQaJ8yIE9LwMux+EY1f2
0bAeJ7kcdUDQ9H3FFdci1r7ykY+ZIY/N0LRvu8CMOSE2NW7koJwBKXsvjCY0xujlfrO5ifECsAU/
TWZi//0nyTiD0sDWFQk0FqbMRYENhf/Tv8e+L+fvUcvb3A+k5Y425m66FOzeXkyA4Pksk3RVfI3t
kU9tDPUNUiDzFBt5tLwhks1EyEwwPy9t4rnjMGoba2cCUHVbN2sCdGujQqn2+4HoIhl0tqaFt98d
FWrNTK3BDqXFcxpfu0s/t6m8ddeX4aQcUzpTmyUpSof7CQow8JuXSRZezxdIAioSoiKdAu5lOUAE
M0cCkFE+aYZ+G/o9s4b+fhJS4Gr81B+GTllAzuWAkGE+wNzJ/vDjuTso8cyJRDjEzSXP+tP77p+7
H4DSLxctDjVR8AIK4QoqsojJ3zzcj/3h5+7T8NJF6KRhGNN6PftxdHfy4X6BQFR/+O7Dh8j9GE+F
GHQ2rjT93/8HUEsDBAoAAAAAALtAKUQAAAAAAAAAAAAAAAAEABwAc3ZnL1VUCQAD4sjOUjbJzlJ1
eAsAAQT1AQAABBQAAABQSwMECgAAAAAAu0ApRAAAAAAAAAAAAAAAAAsAHABzdmcvc3Ryb2tlL1VU
CQAD4sjOUjbJzlJ1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAu0ApRPpWXYKCAAAAkAAAACUAHABz
dmcvc3Ryb2tlL3plcm8td2lkdGgtaGFuZy1zdGRlcnIudHh0VVQJAAPiyM5S4sjOUnV4CwABBPUB
AAAEFAAAAA3IwQqCQBAG4HtP8b+AoqBkS3SxCKJD0KFDdBh1oMV1BnanrJ4+j993IgE2KBpX1K6u
MHM3est4TllZ5UF7Crhxd4nac0r3et1U5QPbQ4wadw7tsVUx/tiV7eyF95SeDl7eFPyAYREoRvo6
kCEwJYMKgwNPLIbptUTHEJXsx1Hz1R9QSwMECgAAAAAAykApRAAAAAAAAAAAAAAAAAwAHAB0cmFu
c2l0aW9ucy9VVAkAA/zIzlI2yc5SdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAMpAKUQnLS/FiAAA
ACwCAAA3ABwAdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXN2Zy1sZW5ndGgtc3Rk
ZXJyLnR4dFVUCQAD/MjOUvzIzlJ1eAsAAQT1AQAABBQAAADtzrEKwjAURuHdp/hfoCWVqjWISxGh
OAgOHcQhbS4aDLmQXBsf34Iv4eD6neV0JgBbqEartV4qZBqeTgrKqajq0vNoPHoazpFHSum62jR1
dcPuECPHvUZ7bDkIveVCcnKBemfloeHCZLyz8DMhfy3Q3YibCHN6UYKJhMAC4z1nsuWi+6/89soH
UEsBAh4DFAACAAgAyEApRKfkCZV3pQAASxUIAA4AGAAAAAAAAQAAAKSBAAAAAGFjY2Vzc19sb2cu
dHh0VVQFAAP3yM5SdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAyEApRAT04GxmEgAAfxQBAA0A
GAAAAAAAAQAAAKSBv6UAAGVycm9yX2xvZy50eHRVVAUAA/fIzlJ1eAsAAQT1AQAABBQAAABQSwEC
HgMKAAAAAABxQClEAAAAAAAAAAAAAAAABQAYAAAAAAAAABAA7UFsuAAAZmFzdC9VVAUAA1bIzlJ1
eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABMQClEAAAAAAAAAAAAAAAACQAYAAAAAAAAABAA7UGr
uAAAZmFzdC9jc3MvVVQFAAMPyM5SdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgATEApRNsI00I7
AAAAPwAAACkAGAAAAAAAAQAAAKSB7rgAAGZhc3QvY3NzL2NvbXBhcmUtY29udGVudC1zdHlsZS1z
dGRlcnIudHh0VVQFAAMPyM5SdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAWkApRAAAAAAAAAAA
AAAAAAwAGAAAAAAAAAAQAO1BjLkAAGZhc3QvZnJhbWVzL1VUBQADLMjOUnV4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIAFpAKUTbCNNCOwAAAD8AAAAvABgAAAAAAAEAAACkgdK5AABmYXN0L2ZyYW1l
cy9mcmFtZS1kaXNwbGF5LW5vbmUtZm9jdXMtc3RkZXJyLnR4dFVUBQADLMjOUnV4CwABBPUBAAAE
FAAAAFBLAQIeAwoAAAAAAGVAKUQAAAAAAAAAAAAAAAAMABgAAAAAAAAAEADtQXa6AABmYXN0L2xv
YWRlci9VVAUAAz7IzlJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABdQClE2wjTQjsAAAA/AAAA
UgAYAAAAAAABAAAApIG8ugAAZmFzdC9sb2FkZXIvZGlzcGxheS1pbWFnZS11bnNldC1jYW4tYmxv
Y2staW1hZ2UtYW5kLWNhbi1yZWxvYWQtaW4tcGxhY2Utc3RkZXJyLnR4dFVUBQADMsjOUnV4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIAGFAKUTbCNNCOwAAAD8AAABTABgAAAAAAAEAAACkgYO7AABm
YXN0L2xvYWRlci9pbWFnZXMtZW5hYmxlZC11bnNldC1jYW4tYmxvY2staW1hZ2UtYW5kLWNhbi1y
ZWxvYWQtaW4tcGxhY2Utc3RkZXJyLnR4dFVUBQADNcjOUnV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAGVAKUTbCNNCOwAAAD8AAAAtABgAAAAAAAEAAACkgUu8AABmYXN0L2xvYWRlci9yZWxvYWQt
cG9saWN5LWRlbGVnYXRlLXN0ZGVyci50eHRVVAUAAz7IzlJ1eAsAAQT1AQAABBQAAABQSwECHgMK
AAAAAAByQClEAAAAAAAAAAAAAAAACQAYAAAAAAAAABAA7UHtvAAAZmFzdC94c2wvVVQFAANXyM5S
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAcUApRHL9ZfKFAAAA6QAAACUAGAAAAAAAAQAAAKSB
ML0AAGZhc3QveHNsL3RyYW5zZm9ybS14aHItZG9jLXN0ZGVyci50eHRVVAUAA1bIzlJ1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACABxQClEBY9VjpMAAADQAgAAJwAYAAAAAAABAAAApIEUvgAAZmFz
dC94c2wveHNsdC1iYWQtaW1wb3J0LXVyaS1zdGRlcnIudHh0VVQFAANWyM5SdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAckApRIFKd61LAAAArAAAADQAGAAAAAAAAQAAAKSBCL8AAGZhc3QveHNs
L3hzbHQtdHJhbnNmb3JtLXRvLWZyYWdtZW50LWNyYXNoLXN0ZGVyci50eHRVVAUAA1fIzlJ1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACADpQClEaVdG/yYBAACyAQAAEQAYAAAAAAABAAAApIHBvwAA
ZnVsbF9yZXN1bHRzLmpzb25VVAUAAzXJzlJ1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAAuQClE
AAAAAAAAAAAAAAAABQAYAAAAAAAAABAA7UEywQAAaHR0cC9VVAUAA9fHzlJ1eAsAAQT1AQAABBQA
AABQSwECHgMKAAAAAACBQClEAAAAAAAAAAAAAAAACwAYAAAAAAAAABAA7UFxwQAAaHR0cC90ZXN0
cy9VVAUAA3LIzlJ1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAAuQClEAAAAAAAAAAAAAAAAEQAY
AAAAAAAAABAA7UG2wQAAaHR0cC90ZXN0cy9jYWNoZS9VVAUAA9fHzlJ1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAAuQClEQ2NuTz8AAAC9AAAAOwAYAAAAAAABAAAApIEBwgAAaHR0cC90ZXN0cy9j
YWNoZS9zdWJyZXNvdXJjZS1mYWlsb3Zlci10by1uZXR3b3JrLXN0ZGVyci50eHRVVAUAA9fHzlJ1
eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABiQClEAAAAAAAAAAAAAAAAEAAYAAAAAAAAABAA7UG1
wgAAaHR0cC90ZXN0cy9taXNjL1VUBQADOMjOUnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGJA
KUQVNTWSegAAALwAAAAqABgAAAAAAAEAAACkgf/CAABodHRwL3Rlc3RzL21pc2MveHNsdC1iYWQt
aW1wb3J0LXN0ZGVyci50eHRVVAUAAzjIzlJ1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABnQClE
AAAAAAAAAAAAAAAAFgAYAAAAAAAAABAA7UHdwwAAaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL1VUBQAD
QcjOUnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGdAKUTbCNNCOwAAAD8AAAA3ABgAAAAAAAEA
AACkgS3EAABodHRwL3Rlc3RzL25hdmlnYXRpb24vZmFsbGJhY2stYW5jaG9yLXJlbG9hZC1zdGRl
cnIudHh0VVQFAANByM5SdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAhkApRAAAAAAAAAAAAAAA
ABQAGAAAAAAAAAAQAO1B2cQAAGh0dHAvdGVzdHMvc2VjdXJpdHkvVVQFAAN7yM5SdXgLAAEE9QEA
AAQUAAAAUEsBAh4DCgAAAAAAhkApRAAAAAAAAAAAAAAAACoAGAAAAAAAAAAQAO1BJ8UAAGh0dHAv
dGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L1VUBQADe8jOUnV4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAIZAKURjqqxsggAAAKgAAABAABgAAAAAAAEAAACkgYvFAABodHRwL3Rl
c3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS94c2wtYWxsb3dlZC1zdGRlcnIudHh0
VVQFAAN7yM5SdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAhkApRGOqrGyCAAAAqAAAAFIAGAAA
AAAAAQAAAKSBh8YAAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3hz
bC11bmFmZmVjdGVkLWJ5LXN0eWxlLXNyYy0yLXN0ZGVyci50eHRVVAUAA3vIzlJ1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACACBQClEYEtmEJEAAAD7AQAARQAYAAAAAAABAAAApIGVxwAAaHR0cC90
ZXN0cy9zZWN1cml0eS94c3MtREVOSUVELXhzbC1kb2N1bWVudC1zZWN1cml0eU9yaWdpbi1zdGRl
cnIudHh0VVQFAANyyM5SdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAK0ApROqKfEJhBQAABQ8A
AAoAGAAAAAAAAQAAAKSBpcgAAGh0dHBkLmNvbmZVVAUAA9HHzlJ1eAsAAQT1AQAABBQAAABQSwEC
HgMKAAAAAACbQClEAAAAAAAAAAAAAAAABgAYAAAAAAAAABAA7UFKzgAAbWVkaWEvVVQFAAOlyM5S
dXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAlkApRAAAAAAAAAAAAAAAAAwAGAAAAAAAAAAQAO1B
is4AAG1lZGlhL3RyYWNrL1VUBQADnMjOUnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOlAKUR9
1lEV/TsAAA/1AAA7ABgAAAAAAAEAAACkgdDOAABtZWRpYS90cmFjay9tZWRpYS1lbGVtZW50LWVu
cXVldWUtZXZlbnQtY3Jhc2gtY3Jhc2gtbG9nLnR4dFVUBQADNcnOUnV4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIAJtAKURNoKK5twAAAAMBAAAqABgAAAAAAAEAAACkgUILAQBtZWRpYS92aWRlby1z
ZXQtcmF0ZS1mcm9tLXBhdXNlLXN0ZGVyci50eHRVVAUAA6XIzlJ1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACACgQClEX1pmpUgCAAD5EgAAKwAYAAAAAAABAAAApIFdDAEAcHl3ZWJzb2NrZXQud3Mu
bG9nLTA5SmFuMjAxNC0wODAxMjItZXJyLnR4dFVUBQADq8jOUnV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAKBAKUT1NU00CgEAAI8CAAArABgAAAAAAAEAAACkgQoPAQBweXdlYnNvY2tldC53cy5s
b2ctMDlKYW4yMDE0LTA4MDEyMi1vdXQudHh0VVQFAAOryM5SdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgA6UApRGfPCNF+JgAAI6QAAAwAGAAAAAAAAQAAAKSBeRABAHJlc3VsdHMuaHRtbFVUBQAD
NsnOUnV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAOhAKUQAAAAAAAAAAAAAAAAIABgAAAAAAAAA
EADtQT03AQByZXRyaWVzL1VUBQADM8nOUnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOlAKUQz
YZ5eNcYFACtSIgAKABgAAAAAAAEAAACkgX83AQBzdGF0cy5qc29uVVQFAAM1yc5SdXgLAAEE9QEA
AAQUAAAAUEsBAh4DCgAAAAAAu0ApRAAAAAAAAAAAAAAAAAQAGAAAAAAAAAAQAO1B+P0GAHN2Zy9V
VAUAA+LIzlJ1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAC7QClEAAAAAAAAAAAAAAAACwAYAAAA
AAAAABAA7UE2/gYAc3ZnL3N0cm9rZS9VVAUAA+LIzlJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAC7QClE+lZdgoIAAACQAAAAJQAYAAAAAAABAAAApIF7/gYAc3ZnL3N0cm9rZS96ZXJvLXdpZHRo
LWhhbmctc3RkZXJyLnR4dFVUBQAD4sjOUnV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAMpAKUQA
AAAAAAAAAAAAAAAMABgAAAAAAAAAEADtQVz/BgB0cmFuc2l0aW9ucy9VVAUAA/zIzlJ1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACADKQClEJy0vxYgAAAAsAgAANwAYAAAAAAABAAAApIGi/wYAdHJh
bnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXN2Zy1sZW5ndGgtc3RkZXJyLnR4dFVUBQAD
/MjOUnV4CwABBPUBAAAEFAAAAFBLBQYAAAAALAAsAHERAACbAAcAAAA=
</data>

          </attachment>
      

    </bug>

</bugzilla>